From a6fe93c29671173a5d1f52f7144bdf1e464a1352 Mon Sep 17 00:00:00 2001 From: Bogdan Gavril Date: Thu, 24 Sep 2026 14:22:42 +0100 Subject: [PATCH] Remove B2C sample and consolidate Node guidance Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> Copilot-Session: f37be5c9-0d16-4be3-8ffa-07026d760680 --- .github/ISSUE_TEMPLATE.md | 1 - .github/workflows/build.yml | 1 - 1-Authentication/1-sign-in/README.md | 3 + 1-Authentication/2-sign-in-b2c/App/app.js | 95 - .../2-sign-in-b2c/App/authConfig.js | 31 - .../App/controllers/mainController.js | 15 - .../2-sign-in-b2c/App/package-lock.json | 6489 ----------------- .../2-sign-in-b2c/App/package.json | 32 - .../2-sign-in-b2c/App/public/style.css | 32 - .../2-sign-in-b2c/App/sample.test.js | 63 - 1-Authentication/2-sign-in-b2c/App/server.js | 10 - .../2-sign-in-b2c/App/views/home.ejs | 36 - .../2-sign-in-b2c/App/views/id.ejs | 44 - .../App/views/includes/footer.ejs | 7 - .../App/views/includes/navbar.ejs | 11 - .../AppCreationScripts/AppCreationScripts.md | 138 - .../Cleanup-WithCertificates.ps1 | 155 - .../AppCreationScripts/Cleanup.ps1 | 152 - .../Configure-WithCertificates.ps1 | 299 - .../AppCreationScripts/Configure.ps1 | 275 - .../AppCreationScripts/sample.json | 45 - .../2-sign-in-b2c/README-use-certificate.md | 298 - 1-Authentication/2-sign-in-b2c/README.md | 169 - .../2-sign-in-b2c/ReadmeFiles/screenshot.png | Bin 15585 -> 0 bytes .../2-sign-in-b2c/ReadmeFiles/topology.png | Bin 10174 -> 0 bytes 2-Authorization/1-call-graph/README.md | 3 + 3-Deployment/README.md | 2 +- .../1-call-graph-bff/README.md | 1 - README.md | 14 +- 29 files changed, 13 insertions(+), 8408 deletions(-) delete mode 100644 1-Authentication/2-sign-in-b2c/App/app.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/authConfig.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/controllers/mainController.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/package-lock.json delete mode 100644 1-Authentication/2-sign-in-b2c/App/package.json delete mode 100644 1-Authentication/2-sign-in-b2c/App/public/style.css delete mode 100644 1-Authentication/2-sign-in-b2c/App/sample.test.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/server.js delete mode 100644 1-Authentication/2-sign-in-b2c/App/views/home.ejs delete mode 100644 1-Authentication/2-sign-in-b2c/App/views/id.ejs delete mode 100644 1-Authentication/2-sign-in-b2c/App/views/includes/footer.ejs delete mode 100644 1-Authentication/2-sign-in-b2c/App/views/includes/navbar.ejs delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/AppCreationScripts.md delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup-WithCertificates.ps1 delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup.ps1 delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure-WithCertificates.ps1 delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure.ps1 delete mode 100644 1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json delete mode 100644 1-Authentication/2-sign-in-b2c/README-use-certificate.md delete mode 100644 1-Authentication/2-sign-in-b2c/README.md delete mode 100644 1-Authentication/2-sign-in-b2c/ReadmeFiles/screenshot.png delete mode 100644 1-Authentication/2-sign-in-b2c/ReadmeFiles/topology.png diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index 60a419f..b3a9bf3 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -10,7 +10,6 @@ ```console - [ ] 1-1) Sign-in with Microsoft Entra ID - - [ ] 1-2) Sign-in with Azure Active Directory B2C - [ ] 2-1) Acquire a Token and call Microsoft Graph - [ ] 3) Deploy to Azure Storage and App Service - [ ] 4-1) Use App Roles for Role-based Access Control diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 0f4ba34..15d07bd 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -31,7 +31,6 @@ jobs: projects=( "Common/msal-node-wrapper" "1-Authentication/1-sign-in/App" - "1-Authentication/2-sign-in-b2c/App" "2-Authorization/1-call-graph/App" "3-Deployment/App" "4-AccessControl/1-app-roles/App" diff --git a/1-Authentication/1-sign-in/README.md b/1-Authentication/1-sign-in/README.md index b5329d7..5e4efbc 100644 --- a/1-Authentication/1-sign-in/README.md +++ b/1-Authentication/1-sign-in/README.md @@ -1,5 +1,8 @@ # A Node.js & Express web app authenticating users against Microsoft Entra ID with MSAL Node +> [!IMPORTANT] +> This chapter is retained as a legacy prerequisite for later tutorial chapters that use the sample wrapper. For new basic sign-in applications, use [ms-identity-node](https://github.com/Azure-Samples/ms-identity-node), which implements the same direct MSAL Node sign-in functionality without the tutorial wrapper. + 1. [Overview](#overview) 1. [Scenario](#scenario) 1. [Contents](#contents) diff --git a/1-Authentication/2-sign-in-b2c/App/app.js b/1-Authentication/2-sign-in-b2c/App/app.js deleted file mode 100644 index 9fcb19c..0000000 --- a/1-Authentication/2-sign-in-b2c/App/app.js +++ /dev/null @@ -1,95 +0,0 @@ -/* - * Copyright (c) Microsoft Corporation. All rights reserved. - * Licensed under the MIT License. - */ - -const path = require('path'); -const express = require('express'); -const session = require('express-session'); -const { WebAppAuthProvider } = require('msal-node-wrapper'); - -const mainController = require('./controllers/mainController'); -const authConfig = require('./authConfig.js'); - -async function main() { - - // initialize express - const app = express(); - - /** - * Using express-session middleware. Be sure to familiarize yourself with available options - * and set them as desired. Visit: https://www.npmjs.com/package/express-session - */ - app.use(session({ - secret: 'ENTER_YOUR_SECRET_HERE', - resave: false, - saveUninitialized: false, - cookie: { - httpOnly: true, - secure: process.env.NODE_ENV === "production", // set this to true on production - } - })); - - app.use(express.urlencoded({ extended: false })); - app.use(express.json()); - - app.set('views', path.join(__dirname, './views')); - app.set('view engine', 'ejs'); - - app.use('/css', express.static(path.join(__dirname, 'node_modules/bootstrap/dist/css'))); - app.use('/js', express.static(path.join(__dirname, 'node_modules/bootstrap/dist/js'))); - - app.use(express.static(path.join(__dirname, './public'))); - - try { - // instantiate the wrapper - const authProvider = await WebAppAuthProvider.initialize(authConfig); - - // add the auth middleware before any route handlers - app.use(authProvider.authenticate()); - - // app routes - app.get('/', mainController.getHomePage); - - // authentication routes - app.get( - '/signin', - (req, res, next) => { - return req.authContext.login({ - postLoginRedirectUri: "/", // redirect here after login - })(req, res, next); - } - ); - - app.get( - '/signout', - (req, res, next) => { - return req.authContext.logout({ - postLogoutRedirectUri: "/", // redirect here after logout - })(req, res, next); - } - ); - - // secure routes - app.get('/id', - authProvider.guard({ - forceLogin: true // force user to login if not authenticated - }), - mainController.getIdPage - ); - - /** - * This error handler is needed to catch interaction_required errors thrown by MSAL. - * Make sure to add it to your middleware chain after all your routers, but before any other - * error handlers. - */ - app.use(authProvider.interactionErrorHandler()); - - return app; - } catch (error) { - console.log(error); - process.exit(1); - } -} - -module.exports = main; \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/authConfig.js b/1-Authentication/2-sign-in-b2c/App/authConfig.js deleted file mode 100644 index 18e3622..0000000 --- a/1-Authentication/2-sign-in-b2c/App/authConfig.js +++ /dev/null @@ -1,31 +0,0 @@ -/** - * For enhanced security, consider using client certificates instead of secrets. - * See README-use-certificate.md for more. - */ -const authConfig = { - auth: { - authority: 'https://Enter_the_B2C_Tenant_Subdomain_Here.b2clogin.com/Enter_the_B2C_Tenant_Subdomain_Here.onmicrosoft.com/Enter_the_Policy_Name_Here', - clientId: "Enter_the_Application_Id_Here", - clientSecret: "Enter_the_Client_Secret_Here", - // clientCertificate: { - // thumbprint: "YOUR_CERT_THUMBPRINT", - // privateKey: fs.readFileSync('PATH_TO_YOUR_PRIVATE_KEY_FILE'), - // } - redirectUri: "/redirect", - knownAuthorities: ["Enter_the_B2C_Tenant_Subdomain_Here.b2clogin.com"], - }, - system: { - loggerOptions: { - loggerCallback: (logLevel, message, containsPii) => { - if (containsPii) { - return; - } - console.log(message); - }, - piiLoggingEnabled: false, - logLevel: 3, - }, - } -}; - -module.exports = authConfig; \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/controllers/mainController.js b/1-Authentication/2-sign-in-b2c/App/controllers/mainController.js deleted file mode 100644 index 8166f98..0000000 --- a/1-Authentication/2-sign-in-b2c/App/controllers/mainController.js +++ /dev/null @@ -1,15 +0,0 @@ -exports.getHomePage = (req, res, next) => { - const username = req.authContext.getAccount() ? req.authContext.getAccount().username : ''; - res.render('home', { isAuthenticated: req.authContext.isAuthenticated(), username: username }); -} - -exports.getIdPage = (req, res, next) => { - const account = req.authContext.getAccount(); - - const claims = { - name: account.idTokenClaims.name, - sub: account.idTokenClaims.sub - }; - - res.render('id', {isAuthenticated: req.authContext.isAuthenticated(), claims: claims}); -} diff --git a/1-Authentication/2-sign-in-b2c/App/package-lock.json b/1-Authentication/2-sign-in-b2c/App/package-lock.json deleted file mode 100644 index 73cc70a..0000000 --- a/1-Authentication/2-sign-in-b2c/App/package-lock.json +++ /dev/null @@ -1,6489 +0,0 @@ -{ - "name": "msal-node-tutorial-signin-b2c", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "msal-node-tutorial-signin-b2c", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "bootstrap": "^5.3.8", - "ejs": "^6.0.1", - "express": "^5.2.1", - "express-session": "^1.19.0", - "msal-node-wrapper": "file:../../../Common/msal-node-wrapper" - }, - "devDependencies": { - "jest": "^30.5.1", - "nodemon": "^3.1.10", - "supertest": "^7.2.2" - }, - "engines": { - "node": ">=20" - } - }, - "../../../Common/msal-node-wrapper": { - "version": "1.0.0-beta", - "license": "MIT", - "dependencies": { - "@azure/msal-common": "16.5.2", - "@azure/msal-node": "5.1.5", - "axios": "1.20.0", - "express": "5.2.1", - "express-session": "1.19.0" - }, - "devDependencies": { - "@rollup/plugin-node-resolve": "^16.0.3", - "@rollup/plugin-typescript": "^12.3.0", - "@types/express": "^5.0.6", - "@types/express-session": "^1.19.0", - "@types/jest": "^29.5.14", - "@types/node": "^26.4.1", - "@types/sinon": "^22.0.0", - "@typescript-eslint/eslint-plugin": "^8.69.0", - "@typescript-eslint/parser": "^8.69.0", - "eslint": "^8.57.1", - "eslint-plugin-header": "^3.1.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-security": "^4.0.1", - "jest": "^29.7.0", - "jest-util": "^29.7.0", - "rollup": "^4.63.1", - "sinon": "^22.1.0", - "supertest": "^7.2.2", - "ts-jest": "^29.4.12", - "tslib": "^2.8.1", - "typedoc": "^0.28.20", - "typescript": "^5.9.3" - }, - "engines": { - "node": ">=20" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/code-frame/-/code-frame-7.29.7.tgz", - "integrity": "sha1-8vu/6ofESiFZDsUVt3iywm2IZuc=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.29.7", - "js-tokens": "^4.0.0", - "picocolors": "^1.1.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/compat-data/-/compat-data-7.29.7.tgz", - "integrity": "sha1-bwI38PNtLlHAVwpjb67Z0tDv5ik=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/core/-/core-7.29.7.tgz", - "integrity": "sha1-gMELFySAgpaLV6hXuRZAlx8gcPc=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-module-transforms": "^7.29.7", - "@babel/helpers": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/template": "^7.29.7", - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7", - "@jridgewell/remapping": "^2.3.5", - "convert-source-map": "^2.0.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.3", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/core/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/generator": { - "version": "7.29.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/generator/-/generator-7.29.8.tgz", - "integrity": "sha1-SwuIeIVCJkMzngkCIUikxOuqSXk=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.29.8", - "@babel/types": "^7.29.8", - "@jridgewell/gen-mapping": "^0.3.12", - "@jridgewell/trace-mapping": "^0.3.28", - "jsesc": "^3.0.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-compilation-targets/-/helper-compilation-targets-7.29.7.tgz", - "integrity": "sha1-eh3vcEMCQBxH9k+oVYnpdK4hcEI=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "browserslist": "^4.24.0", - "lru-cache": "^5.1.1", - "semver": "^6.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-globals": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-globals/-/helper-globals-7.29.7.tgz", - "integrity": "sha1-8EqW+9hHMkGxB5JD9bPwOjAQq3s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-module-imports/-/helper-module-imports-7.29.7.tgz", - "integrity": "sha1-7yUEilGOgo1zk/rFiC3dc5Idc5Y=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/traverse": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-module-transforms/-/helper-module-transforms-7.29.7.tgz", - "integrity": "sha1-sGJ0elmXuhOGNyATKLv/d5YFdK4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-plugin-utils/-/helper-plugin-utils-7.29.7.tgz", - "integrity": "sha1-wKB2bxoTYX2KF0B9erj51IYiXqQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-string-parser/-/helper-string-parser-7.29.7.tgz", - "integrity": "sha1-fwhx2Zgk0jE31g+G/PYTD9WhtR8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz", - "integrity": "sha1-vYcITO0MeW7Ea9pJLeboPSnon8I=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helper-validator-option/-/helper-validator-option-7.29.7.tgz", - "integrity": "sha1-zzFb6UAhOzVOtKvMC9Aevj9zvCo=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/helpers/-/helpers-7.29.7.tgz", - "integrity": "sha1-Rav951SJl+NDdsPmn+tHXP+0pgc=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.29.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/parser/-/parser-7.29.8.tgz", - "integrity": "sha1-llNxai8Qxne5j7xj1L+wAMMCzxc=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.29.8" - }, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-async-generators": { - "version": "7.8.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", - "integrity": "sha1-qYP7Gusuw/btBCohD2QOkOeG/g0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-bigint": { - "version": "7.8.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", - "integrity": "sha1-TJpvZp9dDN8bkKFnHpoUa+UwDOo=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-properties": { - "version": "7.12.13", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", - "integrity": "sha1-tcmHJ0xKOoK4lxR5aTGmtTVErhA=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.12.13" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-class-static-block": { - "version": "7.14.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", - "integrity": "sha1-GV34mxRrS3izv4l/16JXyEZZ1AY=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-attributes": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.29.7.tgz", - "integrity": "sha1-YRUmRRbpXq0PNaQXEJBmEuRH9gU=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-import-meta": { - "version": "7.10.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", - "integrity": "sha1-7mATSMNw+jNNIge+FYd3SWUh/VE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-json-strings": { - "version": "7.8.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", - "integrity": "sha1-AcohtmjNghjJ5kDLbdiMVBKyyWo=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.29.7.tgz", - "integrity": "sha1-YiwW+a1jeC/m6D2tx+QDMHRLfx4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-logical-assignment-operators": { - "version": "7.10.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", - "integrity": "sha1-ypHvRjA1MESLkGZSusLp/plB9pk=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { - "version": "7.8.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", - "integrity": "sha1-Fn7XA2iIYIH3S1w2xlqIwDtm0ak=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-numeric-separator": { - "version": "7.10.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", - "integrity": "sha1-ubBws+M1cM2f0Hun+pHA3Te5r5c=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.10.4" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-object-rest-spread": { - "version": "7.8.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", - "integrity": "sha1-YOIl7cvZimQDMqLnLdPmbxr1WHE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-catch-binding": { - "version": "7.8.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", - "integrity": "sha1-YRGiZbz7Ag6579D9/X0mQCue1sE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-optional-chaining": { - "version": "7.8.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", - "integrity": "sha1-T2nCq5UWfgGAzVM2YT+MV4j31Io=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.8.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-private-property-in-object": { - "version": "7.14.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", - "integrity": "sha1-DcZnHsDqIrbpShEU+FeXDNOd4a0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-top-level-await": { - "version": "7.14.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", - "integrity": "sha1-wc/a3DWmRiQAAfBhOCR7dBw02Uw=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.14.5" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.29.7.tgz", - "integrity": "sha1-fCk4iTIxPtWEE6A0MEjXXZL7WyQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-plugin-utils": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.29.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/template/-/template-7.29.7.tgz", - "integrity": "sha1-TZ1ABPZFzdME3pWMclFieE7KxwA=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/parser": "^7.29.7", - "@babel/types": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.29.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/traverse/-/traverse-7.29.8.tgz", - "integrity": "sha1-QREBTNxxoPldlHGQdZC6oLimsoo=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.29.7", - "@babel/generator": "^7.29.8", - "@babel/helper-globals": "^7.29.7", - "@babel/parser": "^7.29.8", - "@babel/template": "^7.29.7", - "@babel/types": "^7.29.8", - "debug": "^4.3.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/@babel/traverse/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/types": { - "version": "7.29.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@babel/types/-/types-7.29.8.tgz", - "integrity": "sha1-Einu8x2FFW1w+j9M2Fk3bQ6vaGM=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-string-parser": "^7.29.7", - "@babel/helper-validator-identifier": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@bcoe/v8-coverage": { - "version": "0.2.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", - "integrity": "sha1-daLotRy3WKdVPWgEpZMteqznXDk=", - "dev": true, - "license": "MIT" - }, - "node_modules/@emnapi/core": { - "version": "1.10.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@emnapi/core/-/core-1.10.0.tgz", - "integrity": "sha1-OAzMjyQS6iLR2XLff47iOjucdGc=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/wasi-threads": "1.2.1", - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/runtime": { - "version": "1.10.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@emnapi/runtime/-/runtime-1.10.0.tgz", - "integrity": "sha1-SyYMDTU0IE6YxhELjbGph9JuyHw=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@emnapi/wasi-threads": { - "version": "1.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@emnapi/wasi-threads/-/wasi-threads-1.2.1.tgz", - "integrity": "sha1-KP7SGhuhznl8RKBwq8lNQvOuhUg=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@isaacs/cliui": { - "version": "8.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@isaacs/cliui/-/cliui-8.0.2.tgz", - "integrity": "sha1-s3Znt7wYHBaHgiWbq0JHT79StVA=", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^5.1.2", - "string-width-cjs": "npm:string-width@^4.2.0", - "strip-ansi": "^7.0.1", - "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", - "wrap-ansi": "^8.1.0", - "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-regex": { - "version": "6.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ansi-regex/-/ansi-regex-6.3.0.tgz", - "integrity": "sha1-JHyOe3ChpDsQzhTAIm/L9Y6IFdU=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/ansi-styles": { - "version": "6.2.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ansi-styles/-/ansi-styles-6.2.3.tgz", - "integrity": "sha1-wETV3MUhoHZBNHJZehrLHxA8QEE=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/emoji-regex": { - "version": "9.2.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/emoji-regex/-/emoji-regex-9.2.2.tgz", - "integrity": "sha1-hAyIA7DYBH9P8M+WMXazLU7z7XI=", - "dev": true, - "license": "MIT" - }, - "node_modules/@isaacs/cliui/node_modules/string-width": { - "version": "5.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/string-width/-/string-width-5.1.2.tgz", - "integrity": "sha1-FPja7G2B5yIdKjV+Zoyrc728p5Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@isaacs/cliui/node_modules/strip-ansi": { - "version": "7.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strip-ansi/-/strip-ansi-7.2.0.tgz", - "integrity": "sha1-0iomlSKDamJ6+NBLXD/Sx/o+MuM=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.2.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { - "version": "8.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/wrap-ansi/-/wrap-ansi-8.1.0.tgz", - "integrity": "sha1-VtwiNo7lcPrOG0mBmXXZuaXq0hQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", - "integrity": "sha1-/T2x1Z7PfPEh6AZQu4ZxL5tV7O0=", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@istanbuljs/schema/-/schema-0.1.6.tgz", - "integrity": "sha1-jcmvoqwVBssaWPiZQPHBJERsjfM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jest/console": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/console/-/console-30.5.1.tgz", - "integrity": "sha1-VKJb9P7gmk5MUrWpA8p0c9iSl/Y=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.5.1", - "@types/node": "*", - "chalk": "^4.1.2", - "jest-message-util": "30.5.1", - "jest-util": "30.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/core": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/core/-/core-30.5.1.tgz", - "integrity": "sha1-Ti7MwzZxBde0uswvtMzb+jSlkPE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.5.1", - "@jest/pattern": "30.5.0", - "@jest/reporters": "30.5.1", - "@jest/test-result": "30.5.1", - "@jest/transform": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "exit-x": "^0.2.2", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-changed-files": "30.5.1", - "jest-config": "30.5.1", - "jest-haste-map": "30.5.1", - "jest-message-util": "30.5.1", - "jest-regex-util": "30.5.0", - "jest-resolve": "30.5.1", - "jest-resolve-dependencies": "30.5.1", - "jest-runner": "30.5.1", - "jest-runtime": "30.5.1", - "jest-snapshot": "30.5.1", - "jest-util": "30.5.1", - "jest-validate": "30.5.1", - "jest-watcher": "30.5.1", - "pretty-format": "30.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/diff-sequences": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/diff-sequences/-/diff-sequences-30.5.0.tgz", - "integrity": "sha1-uJbUcN91HMDH0aDFB4+ApnzhCNQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/environment": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/environment/-/environment-30.5.1.tgz", - "integrity": "sha1-ooqThkUV2jrZDTqEHcMqlb5GLFI=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "jest-mock": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/expect/-/expect-30.5.1.tgz", - "integrity": "sha1-tCzlW6NcwMsu6KqCO67Gtvu5XR8=", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "30.5.1", - "jest-snapshot": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/expect-utils": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/expect-utils/-/expect-utils-30.5.1.tgz", - "integrity": "sha1-rhDhaY7/CADelxFoqng+rWqUA98=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.5.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/fake-timers": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/fake-timers/-/fake-timers-30.5.1.tgz", - "integrity": "sha1-biX0OfETIWWQpW5kI+cWoiWaElU=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.5.1", - "@sinonjs/fake-timers": "^15.4.0", - "@types/node": "*", - "jest-message-util": "30.5.1", - "jest-mock": "30.5.1", - "jest-util": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/get-type": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/get-type/-/get-type-30.5.0.tgz", - "integrity": "sha1-D8dt15JSO/BddxWhgEHBhfkSjMQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/globals": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/globals/-/globals-30.5.1.tgz", - "integrity": "sha1-J5TqUOfvfeomddBEZ7nrfELxdxM=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.5.1", - "@jest/expect": "30.5.1", - "@jest/types": "30.5.1", - "jest-mock": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/pattern": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/pattern/-/pattern-30.5.0.tgz", - "integrity": "sha1-n13QWWpoS4HrotfB39yo0Jl40yY=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "jest-regex-util": "30.5.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/react-is-18": { - "name": "react-is", - "version": "18.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/react-is/-/react-is-18.3.1.tgz", - "integrity": "sha1-6DVX3BLq5jqZ4AOkY4ix3LtE234=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/react-is-19": { - "name": "react-is", - "version": "19.2.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/react-is/-/react-is-19.2.8.tgz", - "integrity": "sha1-CYJvn7wYe8Zo4+XGLtwAH4BNUBg=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jest/reporters": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/reporters/-/reporters-30.5.1.tgz", - "integrity": "sha1-Xn3QH6YU/ugf8UC/SNMgV7/sI7c=", - "dev": true, - "license": "MIT", - "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", - "@jest/console": "30.5.1", - "@jest/test-result": "30.5.1", - "@jest/transform": "30.5.1", - "@jest/types": "30.5.1", - "@jridgewell/trace-mapping": "^0.3.31", - "@types/node": "*", - "chalk": "^4.1.2", - "collect-v8-coverage": "^1.0.2", - "exit-x": "^0.2.2", - "glob": "^13.0.6", - "graceful-fs": "^4.2.11", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^5.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "30.5.1", - "jest-util": "30.5.1", - "jest-worker": "30.5.1", - "slash": "^3.0.0", - "string-length": "^4.0.2", - "v8-to-istanbul": "^9.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/@jest/schemas": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/schemas/-/schemas-30.5.0.tgz", - "integrity": "sha1-eB8ULeRjRbkD9DFAsVhlcyq/01Y=", - "dev": true, - "license": "MIT", - "dependencies": { - "@sinclair/typebox": "^0.34.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/snapshot-utils": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/snapshot-utils/-/snapshot-utils-30.5.1.tgz", - "integrity": "sha1-Fycg0FRqsF1afcf6P+t0wWbJYxA=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.5.1", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "natural-compare": "^1.4.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/source-map": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/source-map/-/source-map-30.5.0.tgz", - "integrity": "sha1-fD2n+vz/zJLDYFwVp/yruhIObz0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.31", - "callsites": "^3.1.0", - "convert-source-map": "^2.0.0", - "graceful-fs": "^4.2.11" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/test-result": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/test-result/-/test-result-30.5.1.tgz", - "integrity": "sha1-CE2SIfFXvb6fFsm6mxqD2ngxpUA=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.5.1", - "@jest/types": "30.5.1", - "@types/istanbul-lib-coverage": "^2.0.6", - "collect-v8-coverage": "^1.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/test-sequencer": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/test-sequencer/-/test-sequencer-30.5.1.tgz", - "integrity": "sha1-bI1Iu5V5iO04yCaD4FEInMSSl1E=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "30.5.1", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.5.1", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/transform": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/transform/-/transform-30.5.1.tgz", - "integrity": "sha1-VjiV+ctgvEkMOt3edY54892dwyE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/types": "30.5.1", - "@jridgewell/trace-mapping": "^0.3.31", - "babel-plugin-istanbul": "^8.0.0", - "chalk": "^4.1.2", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.5.1", - "jest-regex-util": "30.5.0", - "jest-util": "30.5.1", - "pirates": "^4.0.7", - "slash": "^3.0.0", - "write-file-atomic": "^5.0.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jest/types": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jest/types/-/types-30.5.1.tgz", - "integrity": "sha1-3AjHc0AcGOoNnKZw+0oQoiyKT7U=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/pattern": "30.5.0", - "@jest/schemas": "30.5.0", - "@types/istanbul-lib-coverage": "^2.0.6", - "@types/istanbul-reports": "^3.0.4", - "@types/node": "*", - "@types/yargs": "^17.0.33", - "chalk": "^4.1.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.13", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", - "integrity": "sha1-Y0Khn0Q0dRjJPkOxrGnes8Rlah8=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.0", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/remapping": { - "version": "2.3.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jridgewell/remapping/-/remapping-2.3.5.tgz", - "integrity": "sha1-N1xHbRlylHhRuh4Vro8SMEdEWqE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.5", - "@jridgewell/trace-mapping": "^0.3.24" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", - "integrity": "sha1-eg7mAfYPmaIMfHxf8MgDiMEYm9Y=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.6.0.tgz", - "integrity": "sha1-9MZj6GLwbcmMpNRThixGkCeJoY0=", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.31", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", - "integrity": "sha1-2xXWeByTHzolGj2sOVAcmKYIL9A=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } - }, - "node_modules/@napi-rs/wasm-runtime": { - "version": "1.2.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@napi-rs/wasm-runtime/-/wasm-runtime-1.2.3.tgz", - "integrity": "sha1-l+PUXXQk3F2h1OMvO/OykvbBtEw=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@tybys/wasm-util": "^0.10.3" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=23.5.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/Brooooooklyn" - }, - "peerDependencies": { - "@emnapi/core": "^1.7.1 || ^2.0.0-alpha.4", - "@emnapi/runtime": "^1.7.1 || ^2.0.0-alpha.4" - } - }, - "node_modules/@noble/hashes": { - "version": "1.8.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@noble/hashes/-/hashes-1.8.0.tgz", - "integrity": "sha1-zuQ9gB/O+WRLEbgZSFdpWs1fgVo=", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.21.3 || >=16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@paralleldrive/cuid2": { - "version": "2.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@paralleldrive/cuid2/-/cuid2-2.3.1.tgz", - "integrity": "sha1-PWLqnnvoZ9P6lLmJf6tbCuGH14Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "@noble/hashes": "^1.1.5" - } - }, - "node_modules/@parcel/watcher": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher/-/watcher-2.6.0.tgz", - "integrity": "sha1-mWYfYiAHC3anZqumt+MToIehvk8=", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "detect-libc": "^2.0.3", - "is-glob": "^4.0.3", - "node-addon-api": "^7.0.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "@parcel/watcher-android-arm64": "2.6.0", - "@parcel/watcher-darwin-arm64": "2.6.0", - "@parcel/watcher-darwin-x64": "2.6.0", - "@parcel/watcher-freebsd-x64": "2.6.0", - "@parcel/watcher-linux-arm-glibc": "2.6.0", - "@parcel/watcher-linux-arm-musl": "2.6.0", - "@parcel/watcher-linux-arm64-glibc": "2.6.0", - "@parcel/watcher-linux-arm64-musl": "2.6.0", - "@parcel/watcher-linux-x64-glibc": "2.6.0", - "@parcel/watcher-linux-x64-musl": "2.6.0", - "@parcel/watcher-win32-arm64": "2.6.0", - "@parcel/watcher-win32-x64": "2.6.0" - } - }, - "node_modules/@parcel/watcher-android-arm64": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.6.0.tgz", - "integrity": "sha1-maqjIj1DgHyTQK9DnK1+m20mraY=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-arm64": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.6.0.tgz", - "integrity": "sha1-AkSW5Ya0dE8JzlMrvon+OO8Cpk4=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-darwin-x64": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.6.0.tgz", - "integrity": "sha1-pGId8TWak9OaMy2bq1/wkBagYI8=", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-freebsd-x64": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.6.0.tgz", - "integrity": "sha1-f1Ze0aWzpeYE5qR5kSFRgmXWKj0=", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-glibc": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.6.0.tgz", - "integrity": "sha1-rX04JeZ7gZmRZdpCWTAiBFq8CIk=", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm-musl": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.6.0.tgz", - "integrity": "sha1-/n0czLLEgyFcCQ6TjPXPQE0vmow=", - "cpu": [ - "arm" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-glibc": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.6.0.tgz", - "integrity": "sha1-fiOdy0ZGxMefAGpxMaSCOCSVMNo=", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-arm64-musl": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.6.0.tgz", - "integrity": "sha1-xYuNnG2NgVlL4A3YOqt0HBqvfg4=", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-glibc": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.6.0.tgz", - "integrity": "sha1-UYT6mncEeNhuVodfTuFjoKvch5E=", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-linux-x64-musl": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.6.0.tgz", - "integrity": "sha1-LRxVqnJGy8dnDiYSBYqKVCyc8kY=", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-arm64": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.6.0.tgz", - "integrity": "sha1-FeCUMgQP7p4iE6qcEO1YkBJSbe8=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher-win32-x64": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.6.0.tgz", - "integrity": "sha1-m+4ZmipKzNVXtFGsLBx5PzBa4BI=", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/@parcel/watcher/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha1-YxM2ADTMs2s9xh7L3/eBIfkP4h8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/@pkgjs/parseargs": { - "version": "0.11.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", - "integrity": "sha1-p36nQvqyV3UUVDTrHSMoz1ATrDM=", - "dev": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=14" - } - }, - "node_modules/@pkgr/core": { - "version": "0.3.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@pkgr/core/-/core-0.3.6.tgz", - "integrity": "sha1-NWlwi9S+TYhwujK/HEVtrIFgDZc=", - "dev": true, - "license": "MIT", - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/pkgr" - } - }, - "node_modules/@popperjs/core": { - "version": "2.11.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@popperjs/core/-/core-2.11.8.tgz", - "integrity": "sha1-a3kDLnYKCJnNQgRxC+7elyo6GF8=", - "license": "MIT", - "peer": true, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/popperjs" - } - }, - "node_modules/@sinclair/typebox": { - "version": "0.34.52", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@sinclair/typebox/-/typebox-0.34.52.tgz", - "integrity": "sha1-YvimhuSrKKiUSQLirS1kgxLvEcs=", - "dev": true, - "license": "MIT" - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@sinonjs/commons/-/commons-3.0.1.tgz", - "integrity": "sha1-ECk1fkTKkBphVYX20nc428iQhM0=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "15.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@sinonjs/fake-timers/-/fake-timers-15.4.0.tgz", - "integrity": "sha1-XUDBUanmYHX+RSC+xAvM/lSTGWI=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/@tybys/wasm-util": { - "version": "0.10.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@tybys/wasm-util/-/wasm-util-0.10.3.tgz", - "integrity": "sha1-AVy6np3UfOFNA9KoxdVHv7FpZl0=", - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "tslib": "^2.4.0" - } - }, - "node_modules/@types/babel__core": { - "version": "7.20.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/babel__core/-/babel__core-7.20.5.tgz", - "integrity": "sha1-PfFfJ7qFMZyqB7oI0HIYibs5wBc=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7", - "@types/babel__generator": "*", - "@types/babel__template": "*", - "@types/babel__traverse": "*" - } - }, - "node_modules/@types/babel__generator": { - "version": "7.27.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/babel__generator/-/babel__generator-7.27.0.tgz", - "integrity": "sha1-tYGSlMUReZV6+uw0FEL5NB5BCKk=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__template": { - "version": "7.4.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/babel__template/-/babel__template-7.4.4.tgz", - "integrity": "sha1-VnJRNwHBshmbxtrWNqnXSRWGdm8=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/parser": "^7.1.0", - "@babel/types": "^7.0.0" - } - }, - "node_modules/@types/babel__traverse": { - "version": "7.28.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", - "integrity": "sha1-B9cT1szg0mXJhJ2wy+YtP2Hzb3Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.28.2" - } - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", - "integrity": "sha1-dznCMqH+6bTTzomF8xTAxtM1Sdc=", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", - "integrity": "sha1-UwR2FK5y4Z/AQB2HLeOuK0zjUL8=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" - } - }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", - "integrity": "sha1-DwPj0vZw+9rFhuNLQzeDBwzBb1Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/istanbul-lib-report": "*" - } - }, - "node_modules/@types/node": { - "version": "26.4.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/node/-/node-26.4.1.tgz", - "integrity": "sha1-PY3IBRWJSVhEjuJmz11rw+UgW9U=", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~8.3.0" - } - }, - "node_modules/@types/stack-utils": { - "version": "2.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/stack-utils/-/stack-utils-2.0.3.tgz", - "integrity": "sha1-YgkyHrLBcSp+dGZCK4yx/A2d1dg=", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/yargs": { - "version": "17.0.35", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/yargs/-/yargs-17.0.35.tgz", - "integrity": "sha1-BwE+RqpNfX1QpJ4VYEwcU0DU6yQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/yargs-parser": "*" - } - }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", - "integrity": "sha1-gV4wt4bS6PDc2F/VvPXhoE0AjxU=", - "dev": true, - "license": "MIT" - }, - "node_modules/@ungap/structured-clone": { - "version": "1.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@ungap/structured-clone/-/structured-clone-1.4.0.tgz", - "integrity": "sha1-Xi4TdMCjC1pC6LCDUjoiXGlF+Io=", - "dev": true, - "license": "ISC" - }, - "node_modules/@unrs/resolver-binding-android-arm-eabi": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.12.2.tgz", - "integrity": "sha1-mKn+5iwB8gl0ekq1hV8c7Tim0Do=", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-android-arm64": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.12.2.tgz", - "integrity": "sha1-RrfooTk/kHRiMk8VduiINSms8GY=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "android" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-arm64": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.12.2.tgz", - "integrity": "sha1-DqB7AOJYOrAEuFPUwC7F8HRdSQw=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-darwin-x64": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.12.2.tgz", - "integrity": "sha1-oqaQHtWESbkbRDjlgvaJDLqVYEk=", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ] - }, - "node_modules/@unrs/resolver-binding-freebsd-x64": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.12.2.tgz", - "integrity": "sha1-6+b+f2cGtzeOpKSKAkYC6cL0j4k=", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "freebsd" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.12.2.tgz", - "integrity": "sha1-5gQP7aokASRBnTWyW2nF+hXdtJk=", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.12.2.tgz", - "integrity": "sha1-0heo+1n2WcExU5MmwUDnti4+PGo=", - "cpu": [ - "arm" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.12.2.tgz", - "integrity": "sha1-7asTxGpFeDp+ATUeETglwE81LiQ=", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-arm64-musl": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.12.2.tgz", - "integrity": "sha1-5eGV2xEw99O2qi/Wezyf4epIWaA=", - "cpu": [ - "arm64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-loong64-gnu": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-loong64-gnu/-/resolver-binding-linux-loong64-gnu-1.12.2.tgz", - "integrity": "sha1-8B0i4JG64TAW9GNmmNncu9p3XD4=", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-loong64-musl": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-loong64-musl/-/resolver-binding-linux-loong64-musl-1.12.2.tgz", - "integrity": "sha1-fSPvy5it8Ha/vOzCe0ISw2qmaX0=", - "cpu": [ - "loong64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.12.2.tgz", - "integrity": "sha1-HzXx6qMi8zzy2W2sJ/BiapP/4vY=", - "cpu": [ - "ppc64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.12.2.tgz", - "integrity": "sha1-Z0+qaW9c6W8hSHOUah4tbKlnI90=", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.12.2.tgz", - "integrity": "sha1-N4Nf3QtHLs3P/M1CiPGQGEVLE4w=", - "cpu": [ - "riscv64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.12.2.tgz", - "integrity": "sha1-tu3xPbS7Cszc0a1IKk7qAwHekiQ=", - "cpu": [ - "s390x" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-gnu": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.12.2.tgz", - "integrity": "sha1-2t2tAL9lpAUgIoTaHrHbjrg7IY8=", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "glibc" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-linux-x64-musl": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.12.2.tgz", - "integrity": "sha1-39/x4MK60lQgtBx2p0YBHDmDubs=", - "cpu": [ - "x64" - ], - "dev": true, - "libc": [ - "musl" - ], - "license": "MIT", - "optional": true, - "os": [ - "linux" - ] - }, - "node_modules/@unrs/resolver-binding-openharmony-arm64": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-openharmony-arm64/-/resolver-binding-openharmony-arm64-1.12.2.tgz", - "integrity": "sha1-zgfE9ee0L3v85F52KbhlkGOu/v4=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "openharmony" - ] - }, - "node_modules/@unrs/resolver-binding-wasm32-wasi": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.12.2.tgz", - "integrity": "sha1-glFPBQbPr2Xxf+FglfktRQ5IcYM=", - "cpu": [ - "wasm32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "dependencies": { - "@emnapi/core": "1.10.0", - "@emnapi/runtime": "1.10.0", - "@napi-rs/wasm-runtime": "^1.1.4" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.12.2.tgz", - "integrity": "sha1-UhQn3Vmo9HQN3R3Hw7xq8aodJg0=", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.12.2.tgz", - "integrity": "sha1-BbYyhv8to34M4wg7g5CIQ4Xv/2I=", - "cpu": [ - "ia32" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/@unrs/resolver-binding-win32-x64-msvc": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.12.2.tgz", - "integrity": "sha1-ctoNpI1yseh4MbnAMIkx0/RmkCc=", - "cpu": [ - "x64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "win32" - ] - }, - "node_modules/accepts": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/accepts/-/accepts-2.0.0.tgz", - "integrity": "sha1-u89LpQdUZ/PyEx6rPP/HPC9deJU=", - "license": "MIT", - "dependencies": { - "mime-types": "^3.0.0", - "negotiator": "^1.0.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha1-zds+5PnGRTDf9kAjZmHULLajFPU=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/accepts/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha1-OQAtQYJXXVrwNv+hGBAPJSSy4qs=", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ansi-escapes/-/ansi-escapes-4.3.2.tgz", - "integrity": "sha1-ayKR0dt9mLZSHV8e+kLQ86n+tl4=", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha1-CCyyyJyf6GWaMRpTvWpNxTAdswQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha1-7dgDYornHATIWuegkG7a00tkiTc=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/anymatch": { - "version": "3.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/anymatch/-/anymatch-3.1.3.tgz", - "integrity": "sha1-eQxYsZuhcgqEIFtXxhjVrYUklz4=", - "dev": true, - "license": "ISC", - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/argparse": { - "version": "1.0.10", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha1-vNZ5HqWuCXJeF+WtmIE0zUCz2RE=", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/asap": { - "version": "2.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/asap/-/asap-2.0.6.tgz", - "integrity": "sha1-5QNHYR1+aQlDIIu9r+vLwvuGbUY=", - "dev": true, - "license": "MIT" - }, - "node_modules/asynckit": { - "version": "0.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "license": "MIT" - }, - "node_modules/babel-jest": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/babel-jest/-/babel-jest-30.5.1.tgz", - "integrity": "sha1-sg2iQePVJeF6HNph6tvC4TIwuus=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/transform": "30.5.1", - "@types/babel__core": "^7.20.5", - "babel-plugin-istanbul": "^8.0.0", - "babel-preset-jest": "30.5.0", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "slash": "^3.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-0" - } - }, - "node_modules/babel-plugin-istanbul": { - "version": "8.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/babel-plugin-istanbul/-/babel-plugin-istanbul-8.0.0.tgz", - "integrity": "sha1-h2L1QhU6Urd+Ym3SwDO0Z94vL6I=", - "dev": true, - "license": "BSD-3-Clause", - "workspaces": [ - "test/babel-8" - ], - "dependencies": { - "@babel/helper-plugin-utils": "^7.0.0", - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-instrument": "^6.0.2", - "test-exclude": "^7.0.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/babel-plugin-jest-hoist": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-30.5.0.tgz", - "integrity": "sha1-Qlv37iTP/ke/3P7soohbh7HPZkQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/babel__core": "^7.20.5" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/babel-preset-current-node-syntax": { - "version": "1.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", - "integrity": "sha1-IHMNbNx92l2JQByrEKxqMgZ6zeY=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/plugin-syntax-async-generators": "^7.8.4", - "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.12.13", - "@babel/plugin-syntax-class-static-block": "^7.14.5", - "@babel/plugin-syntax-import-attributes": "^7.24.7", - "@babel/plugin-syntax-import-meta": "^7.10.4", - "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", - "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.10.4", - "@babel/plugin-syntax-object-rest-spread": "^7.8.3", - "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", - "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-private-property-in-object": "^7.14.5", - "@babel/plugin-syntax-top-level-await": "^7.14.5" - }, - "peerDependencies": { - "@babel/core": "^7.0.0 || ^8.0.0-0" - } - }, - "node_modules/babel-preset-jest": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/babel-preset-jest/-/babel-preset-jest-30.5.0.tgz", - "integrity": "sha1-MxYu7jdcAGbysgWc2Xp4QO+Ewlk=", - "dev": true, - "license": "MIT", - "dependencies": { - "babel-plugin-jest-hoist": "30.5.0", - "babel-preset-current-node-syntax": "^1.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.11.0 || ^8.0.0-beta.1 || ^8.0.0" - } - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/balanced-match/-/balanced-match-4.0.4.tgz", - "integrity": "sha1-v7EGYv7tgZaixi58aOF3IMJ0F5o=", - "dev": true, - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/baseline-browser-mapping": { - "version": "2.11.20", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/baseline-browser-mapping/-/baseline-browser-mapping-2.11.20.tgz", - "integrity": "sha1-JgeMeksIKZZW6n3c6uvslV3EQwM=", - "dev": true, - "license": "Apache-2.0", - "bin": { - "baseline-browser-mapping": "dist/cli.cjs" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/binary-extensions": { - "version": "2.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/binary-extensions/-/binary-extensions-2.3.0.tgz", - "integrity": "sha1-9uFKl4WNMnJSIAJC1Mz+UixEVSI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/body-parser": { - "version": "2.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/body-parser/-/body-parser-2.3.0.tgz", - "integrity": "sha1-bYZi9NjDNgKLismqJCUbDKZLpDc=", - "license": "MIT", - "dependencies": { - "bytes": "^3.1.2", - "content-type": "^2.0.0", - "debug": "^4.4.3", - "http-errors": "^2.0.1", - "iconv-lite": "^0.7.2", - "on-finished": "^2.4.1", - "qs": "^6.15.2", - "raw-body": "^3.0.2", - "type-is": "^2.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/body-parser/node_modules/content-type": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-2.1.0.tgz", - "integrity": "sha1-2TicQ8Coz2o1XbRk0h4HCSpASTo=", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/body-parser/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/body-parser/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "license": "MIT" - }, - "node_modules/bootstrap": { - "version": "5.3.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/bootstrap/-/bootstrap-5.3.8.tgz", - "integrity": "sha1-ZAGhAFeiJ1LSH04ZBVUImAZWru0=", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/twbs" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/bootstrap" - } - ], - "license": "MIT", - "peerDependencies": { - "@popperjs/core": "^2.11.8" - } - }, - "node_modules/brace-expansion": { - "version": "5.0.9", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/brace-expansion/-/brace-expansion-5.0.9.tgz", - "integrity": "sha1-fHJDiAm1+lur9UGZofHCgaaYT88=", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/braces/-/braces-3.0.3.tgz", - "integrity": "sha1-SQMy9AkZRSJy1VqEgK3AxEE1h4k=", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/browserslist": { - "version": "4.28.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/browserslist/-/browserslist-4.28.8.tgz", - "integrity": "sha1-o8ec63AChSfl2n2vyIfzIAtRaMA=", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "baseline-browser-mapping": "^2.11.12", - "caniuse-lite": "^1.0.30001809", - "electron-to-chromium": "^1.5.402", - "node-releases": "^2.0.53", - "update-browserslist-db": "^1.3.0" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/bser": { - "version": "2.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/bser/-/bser-2.1.1.tgz", - "integrity": "sha1-5nh9og7OnQeZhTPP2d5vXDj0vAU=", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "node-int64": "^0.4.0" - } - }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha1-iwvuuYYFrfGxKPpDhkA8AJ4CIaU=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", - "integrity": "sha1-S1QowiK+mF15w9gmV0edvgtZstY=", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/call-bound/-/call-bound-1.0.4.tgz", - "integrity": "sha1-I43pNdKippKSjFOMfM+pEGf9Bio=", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha1-s2MKvYlDQy9Us/BRkjjjPNffL3M=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha1-48mzFWnhBoEd8kL3FXJaH0xJQyA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001810", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/caniuse-lite/-/caniuse-lite-1.0.30001810.tgz", - "integrity": "sha1-SXC0d96jJ4N03pvEOqj105/DzaI=", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0" - }, - "node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha1-qsTit3NKdAhnrrFr8CqtVWoeegE=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/char-regex": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/char-regex/-/char-regex-1.0.2.tgz", - "integrity": "sha1-10Q1giYhf5ge1Y9Hmx1rzClUXc8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/chokidar": { - "version": "3.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/chokidar/-/chokidar-3.6.0.tgz", - "integrity": "sha1-GXxsxmnvKo3F57TZfuTgksPrDVs=", - "dev": true, - "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, - "engines": { - "node": ">= 8.10.0" - }, - "funding": { - "url": "https://paulmillr.com/funding/" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/ci-info": { - "version": "4.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ci-info/-/ci-info-4.4.0.tgz", - "integrity": "sha1-fVTv+fVLRbYkAcJgMmlutZyL0Yw=", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/cjs-module-lexer": { - "version": "2.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cjs-module-lexer/-/cjs-module-lexer-2.2.1.tgz", - "integrity": "sha1-qzWwPFat4F/hcMcOZ66J9gZmhHw=", - "dev": true, - "license": "MIT" - }, - "node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha1-DASwddsCy/5g3I5s8vVIaxo2CKo=", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/co": { - "version": "4.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">= 1.0.0", - "node": ">= 0.12.0" - } - }, - "node_modules/collect-v8-coverage": { - "version": "1.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/collect-v8-coverage/-/collect-v8-coverage-1.0.3.tgz", - "integrity": "sha1-zB8B640CKYy8mkN8dMcKtOUhC4A=", - "dev": true, - "license": "MIT" - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha1-ctOmjVmMm9s68q0ehPIdiWq9TeM=", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha1-wqCah6y95pVD3m9j+jmVyCbFNqI=", - "dev": true, - "license": "MIT" - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha1-w9RaizT9cwYxoRCoolIGgrMdWn8=", - "dev": true, - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/component-emitter": { - "version": "1.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/component-emitter/-/component-emitter-1.3.1.tgz", - "integrity": "sha1-7x1XlvfZPxNe5vtoQ0CyZAPJfRc=", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true, - "license": "MIT" - }, - "node_modules/content-disposition": { - "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-disposition/-/content-disposition-1.1.0.tgz", - "integrity": "sha1-89t4nHUtRVZMx+nh4LMXkNSjjhc=", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-1.0.5.tgz", - "integrity": "sha1-i3cxYmVtHRCGeEyPI6VM5tc9eRg=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/convert-source-map/-/convert-source-map-2.0.0.tgz", - "integrity": "sha1-S1YPZJ/E6RjdCrdc9JYei8iC2Co=", - "dev": true, - "license": "MIT" - }, - "node_modules/cookie": { - "version": "0.7.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookie/-/cookie-0.7.2.tgz", - "integrity": "sha1-VWNpxHKiupEPKXmJG1JrNDYjftc=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/cookie-signature": { - "version": "1.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookie-signature/-/cookie-signature-1.0.7.tgz", - "integrity": "sha1-q13Xq3V8VOYPN+9lUPSBxCbRBFQ=", - "license": "MIT" - }, - "node_modules/cookiejar": { - "version": "2.1.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookiejar/-/cookiejar-2.1.4.tgz", - "integrity": "sha1-7macH+os9C3DFYVGnRk/7w1ldxs=", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cross-spawn/-/cross-spawn-7.0.6.tgz", - "integrity": "sha1-ilj+ePANzXDDcEUXWd+/rwPo7p8=", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/debug": { - "version": "2.6.9", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-2.6.9.tgz", - "integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", - "license": "MIT", - "dependencies": { - "ms": "2.0.0" - } - }, - "node_modules/dedent": { - "version": "1.7.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/dedent/-/dedent-1.7.2.tgz", - "integrity": "sha1-NOImSrU4MB4nz3sHvyNpwZuqjdk=", - "dev": true, - "license": "MIT", - "peerDependencies": { - "babel-plugin-macros": "^3.1.0" - }, - "peerDependenciesMeta": { - "babel-plugin-macros": { - "optional": true - } - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha1-RLXyFHzTsA1LVhN2hZZvJv0l3Uo=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/depd": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/depd/-/depd-2.0.0.tgz", - "integrity": "sha1-tpYWPMdXVg0JzyLMj60Vcbeedt8=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/detect-libc/-/detect-libc-2.1.2.tgz", - "integrity": "sha1-aJxdzcGQDvVYOky59te0c3QgdK0=", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-newline": { - "version": "3.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha1-V29d/GOuGhkv8ZLYrTr2MImRtlE=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/dezalgo/-/dezalgo-1.0.4.tgz", - "integrity": "sha1-dRI1JgRpCEwTIVffqFfzhtTDPYE=", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/dunder-proto/-/dunder-proto-1.0.1.tgz", - "integrity": "sha1-165mfh3INIL4tw/Q9u78UNow9Yo=", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/eastasianwidth/-/eastasianwidth-0.2.0.tgz", - "integrity": "sha1-aWzi7Aqg5uqTo5f/zySqeEDIJ8s=", - "dev": true, - "license": "MIT" - }, - "node_modules/ee-first": { - "version": "1.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "license": "MIT" - }, - "node_modules/ejs": { - "version": "6.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ejs/-/ejs-6.0.1.tgz", - "integrity": "sha1-iOqM4AM1w1ddfDYC3XboSwvWD0M=", - "license": "Apache-2.0", - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.12.18" - } - }, - "node_modules/electron-to-chromium": { - "version": "1.5.420", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/electron-to-chromium/-/electron-to-chromium-1.5.420.tgz", - "integrity": "sha1-/GbSanItbyJ+IJKs3zjdVbGYy0Q=", - "dev": true, - "license": "ISC" - }, - "node_modules/emittery": { - "version": "0.13.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/emittery/-/emittery-0.13.1.tgz", - "integrity": "sha1-wEuMNFdJDghHrlH87Tr1LTOOPa0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha1-6Bj9ac5cz8tARZT4QpY79TFkzDc=", - "dev": true, - "license": "MIT" - }, - "node_modules/encodeurl": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/encodeurl/-/encodeurl-2.0.0.tgz", - "integrity": "sha1-e46omAd9fkCdOsRUdOo46vCFelg=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/error-ex/-/error-ex-1.3.4.tgz", - "integrity": "sha1-s6jYu2+S7swWKePifTyGB6ijJBQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-define-property/-/es-define-property-1.0.1.tgz", - "integrity": "sha1-mD6y+aZyTpMD9hrd8BHHLgngsPo=", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha1-BfdaJdq5jk+x3NXhRywFRtUFfI8=", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "2.3.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-module-lexer/-/es-module-lexer-2.3.2.tgz", - "integrity": "sha1-MR+k9AFowZdcUFR3xRsjI01BrVU=", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-object-atoms/-/es-object-atoms-1.1.2.tgz", - "integrity": "sha1-otCzcyBXJN+lJdI7DD4bHKWCyZs=", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", - "integrity": "sha1-8x274MGDsAptJutjJcgQwP0YvU0=", - "dev": true, - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/escalade": { - "version": "3.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/escalade/-/escalade-3.2.0.tgz", - "integrity": "sha1-ARo/aYVroYnf+n3I/M6Z0qh5A+U=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-html": { - "version": "1.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "license": "MIT" - }, - "node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha1-owME6Z2qMuI7L9IPUbq9B8/8o0Q=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha1-E7BM2z5sXRnfkatph6hpVhmwqnE=", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/etag": { - "version": "1.8.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/execa": { - "version": "5.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/execa/-/execa-5.1.1.tgz", - "integrity": "sha1-+ArZy/Qpj3vR1MlVXCHpN0HEEd0=", - "dev": true, - "license": "MIT", - "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "node_modules/exit-x": { - "version": "0.2.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/exit-x/-/exit-x-0.2.2.tgz", - "integrity": "sha1-H5BS3juNmaaWsQ2tW87ZvdXDqmQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/expect": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/expect/-/expect-30.5.1.tgz", - "integrity": "sha1-D9uvipvkxmDzlNdF/BcXTQi0+6Y=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.5.1", - "@jest/get-type": "30.5.0", - "jest-matcher-utils": "30.5.1", - "jest-message-util": "30.5.1", - "jest-mock": "30.5.1", - "jest-util": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/express": { - "version": "5.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/express/-/express-5.2.1.tgz", - "integrity": "sha1-jyHRW20yf5K0eU7PjLCKcvlWrAQ=", - "license": "MIT", - "dependencies": { - "accepts": "^2.0.0", - "body-parser": "^2.2.1", - "content-disposition": "^1.0.0", - "content-type": "^1.0.5", - "cookie": "^0.7.1", - "cookie-signature": "^1.2.1", - "debug": "^4.4.0", - "depd": "^2.0.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "finalhandler": "^2.1.0", - "fresh": "^2.0.0", - "http-errors": "^2.0.0", - "merge-descriptors": "^2.0.0", - "mime-types": "^3.0.0", - "on-finished": "^2.4.1", - "once": "^1.4.0", - "parseurl": "^1.3.3", - "proxy-addr": "^2.0.7", - "qs": "^6.14.0", - "range-parser": "^1.2.1", - "router": "^2.2.0", - "send": "^1.1.0", - "serve-static": "^2.2.0", - "statuses": "^2.0.1", - "type-is": "^2.0.1", - "vary": "^1.1.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express-session": { - "version": "1.19.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/express-session/-/express-session-1.19.0.tgz", - "integrity": "sha1-aCE59u7Gxp25/rviNi6Khd2Ery8=", - "license": "MIT", - "dependencies": { - "cookie": "~0.7.2", - "cookie-signature": "~1.0.7", - "debug": "~2.6.9", - "depd": "~2.0.0", - "on-headers": "~1.1.0", - "parseurl": "~1.3.3", - "safe-buffer": "~5.2.1", - "uid-safe": "~2.1.5" - }, - "engines": { - "node": ">= 0.8.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha1-V8f8PMKTrKuf7FTXPhVpDr5KF5M=", - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/express/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/express/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha1-zds+5PnGRTDf9kAjZmHULLajFPU=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/express/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha1-OQAtQYJXXVrwNv+hGBAPJSSy4qs=", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/express/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "license": "MIT" - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", - "integrity": "sha1-h0v2nG9ATCtdmcSBNBOZ/VWJJjM=", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha1-xAaoO25w2eNc47MKgRQd8wrrqIQ=", - "dev": true, - "license": "MIT" - }, - "node_modules/fb-watchman": { - "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fb-watchman/-/fb-watchman-2.0.2.tgz", - "integrity": "sha1-6VJO5rXHfp5QAa8PhfOtu4YjJVw=", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "bser": "2.1.1" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fill-range/-/fill-range-7.1.1.tgz", - "integrity": "sha1-RCZdPKwH4+p9wkdRY4BkN1SgUpI=", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/finalhandler": { - "version": "2.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/finalhandler/-/finalhandler-2.1.1.tgz", - "integrity": "sha1-osUXplWYUrzbBtH4vX9Rto+tgJk=", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "on-finished": "^2.4.1", - "parseurl": "^1.3.3", - "statuses": "^2.0.1" - }, - "engines": { - "node": ">= 18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/finalhandler/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/finalhandler/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "license": "MIT" - }, - "node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha1-l6/n1s3AvFkoWEt8jXsW6KmqXRk=", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/foreground-child": { - "version": "3.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/foreground-child/-/foreground-child-3.3.1.tgz", - "integrity": "sha1-Mujp7Rtoo0l777msK2rfkqY4V28=", - "dev": true, - "license": "ISC", - "dependencies": { - "cross-spawn": "^7.0.6", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/foreground-child/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha1-lSGIwcvVRgcOLdIND0HArgUwywQ=", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/form-data": { - "version": "4.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/form-data/-/form-data-4.0.6.tgz", - "integrity": "sha1-KOhk4beG2+u2jbH0UvljUnhmWCc=", - "dev": true, - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "es-set-tostringtag": "^2.1.0", - "hasown": "^2.0.4", - "mime-types": "^2.1.35" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/formidable": { - "version": "3.5.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/formidable/-/formidable-3.5.4.tgz", - "integrity": "sha1-rJpZO5UegpsymPIaqaIkOTLzLtk=", - "dev": true, - "license": "MIT", - "dependencies": { - "@paralleldrive/cuid2": "^2.2.2", - "dezalgo": "^1.0.4", - "once": "^1.4.0" - }, - "engines": { - "node": ">=14.0.0" - }, - "funding": { - "url": "https://ko-fi.com/tunnckoCore/commissions" - } - }, - "node_modules/forwarded": { - "version": "0.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/forwarded/-/forwarded-0.2.0.tgz", - "integrity": "sha1-ImmTZCiq1MFcfr6XeahL8LKoGBE=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/fresh": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fresh/-/fresh-2.0.0.tgz", - "integrity": "sha1-jdffahs6Gzpc8YbAWl3SZ2ImNaQ=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/fsevents": { - "version": "2.3.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fsevents/-/fsevents-2.3.3.tgz", - "integrity": "sha1-ysZAd4XQNnWipeGlMFxpezR9kNY=", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/function-bind/-/function-bind-1.1.2.tgz", - "integrity": "sha1-LALYZNl/PqbIgwxGTL0Rq26rehw=", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha1-MqbudsPX9S1GsrGuXZP+qFgKJeA=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha1-T5RBKoLbMvNuOwuXQfipf+sDH34=", - "dev": true, - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-intrinsic/-/get-intrinsic-1.3.0.tgz", - "integrity": "sha1-dD8OO2lkqTpUke0b/6rgVNf5jQE=", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.1.1", - "function-bind": "^1.1.2", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-symbols": "^1.1.0", - "hasown": "^2.0.2", - "math-intrinsics": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-package-type/-/get-package-type-0.1.0.tgz", - "integrity": "sha1-jeLYA8/0TfO8bEVuZmizbDkm4Ro=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-proto/-/get-proto-1.0.1.tgz", - "integrity": "sha1-FQs/J0OGnvPoUewMSdFbHRTQDuE=", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/get-stream/-/get-stream-6.0.1.tgz", - "integrity": "sha1-omLY7vZ6ztV8KFKtYWdSakPL97c=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/glob": { - "version": "13.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/glob/-/glob-13.0.6.tgz", - "integrity": "sha1-B4ZmVmpCUUfMrPvS4zLetmor5x0=", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "minimatch": "^10.2.2", - "minipass": "^7.1.3", - "path-scurry": "^2.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha1-hpgyxYA0/mikCTwX3BXoNA2EAcQ=", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/gopd/-/gopd-1.2.0.tgz", - "integrity": "sha1-ifVrghe9vIgCvSmd9tfxCB1+UaE=", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha1-QYPk6L8Iu24Fu7L30uDI9xLKQOM=", - "dev": true, - "license": "ISC" - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha1-lEdx/ZyByBJlxNaUGGDaBrtZR5s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/has-symbols/-/has-symbols-1.1.0.tgz", - "integrity": "sha1-/JxqeDoISVHQuXH+EBjegTcHozg=", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha1-LNxC1AvvLltO6rfAGnPFTOerWrw=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/hasown/-/hasown-2.0.4.tgz", - "integrity": "sha1-jGLYy5C+sqrV0KW2dYGtmFTD8AM=", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/html-escaper": { - "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/html-escaper/-/html-escaper-2.0.2.tgz", - "integrity": "sha1-39YAJ9o2o238viNiYsAKWCJoFFM=", - "dev": true, - "license": "MIT" - }, - "node_modules/http-errors": { - "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/http-errors/-/http-errors-2.0.1.tgz", - "integrity": "sha1-NtL2W8kJyHkAGN02+02T2myq4Gs=", - "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/human-signals": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha1-3JH8ukLk0G5Kuu0zs+ejwC9RTqA=", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=10.17.0" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/iconv-lite/-/iconv-lite-0.7.3.tgz", - "integrity": "sha1-hO4S+WPn3lC8AaE+FgoHizsPQV8=", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ignore-by-default": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ignore-by-default/-/ignore-by-default-1.0.1.tgz", - "integrity": "sha1-SMptcvbGo68Aqa1K5odr44ieKwk=", - "dev": true, - "license": "ISC" - }, - "node_modules/import-local": { - "version": "3.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/import-local/-/import-local-3.2.0.tgz", - "integrity": "sha1-w9XHRXmMAqb4uJdyarpRABhu4mA=", - "dev": true, - "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha1-D6LGT5MpF8NDOg3tVTY6rjdBa3w=", - "license": "ISC" - }, - "node_modules/ipaddr.js": { - "version": "1.9.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ipaddr.js/-/ipaddr.js-1.9.1.tgz", - "integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=", - "license": "MIT", - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true, - "license": "MIT" - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha1-6h9/O4DwZCNug0cPhsCcJU+0Wwk=", - "dev": true, - "license": "MIT", - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha1-8Rb4Bk/pCz94RKOJl8C3UFEmnx0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-fn": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-generator-fn/-/is-generator-fn-2.1.0.tgz", - "integrity": "sha1-fRQK3DiarzARqPKipM+m+q3/sRg=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha1-ZPYeQsu7LuwgcanawLKLoeZdUIQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha1-dTU0W4lnNNX4DE0GxQlVUnoU8Ss=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-promise": { - "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-promise/-/is-promise-4.0.0.tgz", - "integrity": "sha1-Qv+fhCBsGZHSbev1IN1cAQQt0vM=", - "license": "MIT" - }, - "node_modules/is-stream": { - "version": "2.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/is-stream/-/is-stream-2.0.1.tgz", - "integrity": "sha1-+sHj1TuXrVqdCunO8jifWBClwHc=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/isexe": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true, - "license": "ISC" - }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", - "integrity": "sha1-LRZsSwZE1Do58Ev2wu3R5YXzF1Y=", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "6.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz", - "integrity": "sha1-+hVAHfbBWHS8shBfdzMl14xmZ2U=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.23.9", - "@babel/parser": "^7.23.9", - "@istanbuljs/schema": "^0.1.3", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/semver/-/semver-7.8.5.tgz", - "integrity": "sha1-ObZGA33VDBT7RR5+TKxY7YuGP2k=", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", - "integrity": "sha1-kIMFusmlvRdaxqdEier9D8JEWn0=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps": { - "version": "5.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", - "integrity": "sha1-rK75SN93R8jrX78SZcuYD2NTpEE=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.23", - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "dev": true, - "license": "MIT" - }, - "node_modules/istanbul-reports": { - "version": "3.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/istanbul-reports/-/istanbul-reports-3.2.0.tgz", - "integrity": "sha1-y0U1FitXhKpiPO4hpyUs8sgHrJM=", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/jackspeak": { - "version": "3.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jackspeak/-/jackspeak-3.4.3.tgz", - "integrity": "sha1-iDOp2Jq0rN5hiJQr0cU7Y5DtWoo=", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/cliui": "^8.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - }, - "optionalDependencies": { - "@pkgjs/parseargs": "^0.11.0" - } - }, - "node_modules/jest": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest/-/jest-30.5.1.tgz", - "integrity": "sha1-23gRRPz/i0hZ2N1aAQjUw7IXPP0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "30.5.1", - "@jest/types": "30.5.1", - "import-local": "^3.2.0", - "jest-cli": "30.5.1" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-changed-files": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-changed-files/-/jest-changed-files-30.5.1.tgz", - "integrity": "sha1-D5HMd+b4NPsuhb0nfZsxPlVazUM=", - "dev": true, - "license": "MIT", - "dependencies": { - "execa": "^5.1.1", - "jest-util": "30.5.1", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-circus": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-circus/-/jest-circus-30.5.1.tgz", - "integrity": "sha1-Mj/ypRplaVisuy/pg3AiYe7nGYE=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.5.1", - "@jest/expect": "30.5.1", - "@jest/test-result": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "chalk": "^4.1.2", - "co": "^4.6.0", - "dedent": "^1.6.0", - "is-generator-fn": "^2.1.0", - "jest-each": "30.5.1", - "jest-matcher-utils": "30.5.1", - "jest-message-util": "30.5.1", - "jest-runtime": "30.5.1", - "jest-snapshot": "30.5.1", - "jest-util": "30.5.1", - "p-limit": "^3.1.0", - "pretty-format": "30.5.1", - "pure-rand": "^7.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-cli": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-cli/-/jest-cli-30.5.1.tgz", - "integrity": "sha1-VGLFHQG0Ho8zn6qI/ZE57rCps00=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "30.5.1", - "@jest/test-result": "30.5.1", - "@jest/types": "30.5.1", - "chalk": "^4.1.2", - "exit-x": "^0.2.2", - "import-local": "^3.2.0", - "jest-config": "30.5.1", - "jest-util": "30.5.1", - "jest-validate": "30.5.1", - "yargs": "^17.7.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "node_modules/jest-config": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-config/-/jest-config-30.5.1.tgz", - "integrity": "sha1-//A4p0xHUMR47+Oma96MgAUe20g=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@jest/get-type": "30.5.0", - "@jest/pattern": "30.5.0", - "@jest/test-sequencer": "30.5.1", - "@jest/types": "30.5.1", - "babel-jest": "30.5.1", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "deepmerge": "^4.3.1", - "glob": "^13.0.6", - "graceful-fs": "^4.2.11", - "jest-circus": "30.5.1", - "jest-docblock": "30.5.0", - "jest-environment-node": "30.5.1", - "jest-regex-util": "30.5.0", - "jest-resolve": "30.5.1", - "jest-runner": "30.5.1", - "jest-util": "30.5.1", - "jest-validate": "30.5.1", - "parse-json": "^5.2.0", - "pretty-format": "30.5.1", - "slash": "^3.0.0", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "@types/node": "*", - "esbuild-register": ">=3.4.0", - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "esbuild-register": { - "optional": true - }, - "ts-node": { - "optional": true - } - } - }, - "node_modules/jest-diff": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-diff/-/jest-diff-30.5.1.tgz", - "integrity": "sha1-4DR07Kfl3EKSSxXHIGmzIDJTdo0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/diff-sequences": "30.5.0", - "@jest/get-type": "30.5.0", - "chalk": "^4.1.2", - "pretty-format": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-docblock": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-docblock/-/jest-docblock-30.5.0.tgz", - "integrity": "sha1-fPnQi6cU/eC2jJy0v8C+hnp90R0=", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-newline": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-each": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-each/-/jest-each-30.5.1.tgz", - "integrity": "sha1-ZkfJSNtYNR1AgYUerjKaQQKIus0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.5.0", - "@jest/types": "30.5.1", - "chalk": "^4.1.2", - "jest-util": "30.5.1", - "pretty-format": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-environment-node": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-environment-node/-/jest-environment-node-30.5.1.tgz", - "integrity": "sha1-xFgfCgtlbSsXvoCQZsBRzumeqO0=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.5.1", - "@jest/fake-timers": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "jest-mock": "30.5.1", - "jest-util": "30.5.1", - "jest-validate": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-haste-map/-/jest-haste-map-30.5.1.tgz", - "integrity": "sha1-odu6Y1ZEkvU3g9dUYjzdQbsDKLA=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.5.1", - "@parcel/watcher": "^2.6.0", - "@types/node": "*", - "anymatch": "^3.1.3", - "fb-watchman": "^2.0.2", - "fdir": "^6.5.0", - "graceful-fs": "^4.2.11", - "jest-regex-util": "30.5.0", - "jest-util": "30.5.1", - "jest-worker": "30.5.1", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-haste-map/node_modules/fdir": { - "version": "6.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/fdir/-/fdir-6.5.0.tgz", - "integrity": "sha1-7Sq5Z6MxreYvGNB32uGSaE1Q01A=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/jest-haste-map/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha1-YxM2ADTMs2s9xh7L3/eBIfkP4h8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-leak-detector": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-leak-detector/-/jest-leak-detector-30.5.1.tgz", - "integrity": "sha1-vKS2sI1eOgtGVg4mjSjImxXnty4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.5.0", - "pretty-format": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-matcher-utils": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-matcher-utils/-/jest-matcher-utils-30.5.1.tgz", - "integrity": "sha1-k+ZPpDYsRNaM3HpVkKLM9pcgg/Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.5.0", - "chalk": "^4.1.2", - "jest-diff": "30.5.1", - "pretty-format": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-message-util/-/jest-message-util-30.5.1.tgz", - "integrity": "sha1-6NBNe20SP12/sUl0Ms2cKz1RD5A=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.27.1", - "@jest/types": "30.5.1", - "@types/stack-utils": "^2.0.3", - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-util": "30.5.1", - "picomatch": "^4.0.3", - "pretty-format": "30.5.1", - "slash": "^3.0.0", - "stack-utils": "^2.0.6" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-message-util/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha1-YxM2ADTMs2s9xh7L3/eBIfkP4h8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-mock": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-mock/-/jest-mock-30.5.1.tgz", - "integrity": "sha1-pSpyhtS78Em/nauqlGFqnMKMS4Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/expect-utils": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "jest-util": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-regex-util": { - "version": "30.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-regex-util/-/jest-regex-util-30.5.0.tgz", - "integrity": "sha1-rtsZMtNh1OcB7Kzaasg6zzcplQU=", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-resolve/-/jest-resolve-30.5.1.tgz", - "integrity": "sha1-kpNy6oJ2ls63EO7UFomZ0N0hUu0=", - "dev": true, - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.5.1", - "jest-util": "30.5.1", - "jest-validate": "30.5.1", - "slash": "^3.0.0", - "unrs-resolver": "^1.12.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-resolve-dependencies": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-resolve-dependencies/-/jest-resolve-dependencies-30.5.1.tgz", - "integrity": "sha1-KsMFKnc+cCd2B2CbonNRAly0uxE=", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-regex-util": "30.5.0", - "jest-snapshot": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runner": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-runner/-/jest-runner-30.5.1.tgz", - "integrity": "sha1-LCvDKucde+QJC80DtQGPwblzPMY=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/console": "30.5.1", - "@jest/environment": "30.5.1", - "@jest/source-map": "30.5.0", - "@jest/test-result": "30.5.1", - "@jest/transform": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "exit-x": "^0.2.2", - "graceful-fs": "^4.2.11", - "jest-docblock": "30.5.0", - "jest-environment-node": "30.5.1", - "jest-haste-map": "30.5.1", - "jest-leak-detector": "30.5.1", - "jest-message-util": "30.5.1", - "jest-resolve": "30.5.1", - "jest-runtime": "30.5.1", - "jest-util": "30.5.1", - "jest-watcher": "30.5.1", - "jest-worker": "30.5.1", - "p-limit": "^3.1.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-runtime": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-runtime/-/jest-runtime-30.5.1.tgz", - "integrity": "sha1-djcgCMiNEkrYMuL3Wa0oCpLMpjQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/environment": "30.5.1", - "@jest/fake-timers": "30.5.1", - "@jest/globals": "30.5.1", - "@jest/source-map": "30.5.0", - "@jest/test-result": "30.5.1", - "@jest/transform": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "chalk": "^4.1.2", - "cjs-module-lexer": "^2.2.0", - "collect-v8-coverage": "^1.0.2", - "es-module-lexer": "^2.1.0", - "glob": "^13.0.6", - "graceful-fs": "^4.2.11", - "jest-haste-map": "30.5.1", - "jest-message-util": "30.5.1", - "jest-mock": "30.5.1", - "jest-regex-util": "30.5.0", - "jest-resolve": "30.5.1", - "jest-snapshot": "30.5.1", - "jest-util": "30.5.1", - "slash": "^3.0.0", - "strip-bom": "^4.0.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-snapshot/-/jest-snapshot-30.5.1.tgz", - "integrity": "sha1-N/6PeYcQvBufWY1fUTE8DDhDjq4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.27.4", - "@babel/generator": "^7.27.5", - "@babel/plugin-syntax-jsx": "^7.27.1", - "@babel/plugin-syntax-typescript": "^7.27.1", - "@babel/types": "^7.27.3", - "@jest/expect-utils": "30.5.1", - "@jest/get-type": "30.5.0", - "@jest/snapshot-utils": "30.5.1", - "@jest/transform": "30.5.1", - "@jest/types": "30.5.1", - "babel-preset-current-node-syntax": "^1.2.0", - "chalk": "^4.1.2", - "expect": "30.5.1", - "graceful-fs": "^4.2.11", - "jest-diff": "30.5.1", - "jest-matcher-utils": "30.5.1", - "jest-message-util": "30.5.1", - "jest-util": "30.5.1", - "pretty-format": "30.5.1", - "semver": "^7.7.2", - "synckit": "^0.11.8" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-snapshot/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/semver/-/semver-7.8.5.tgz", - "integrity": "sha1-ObZGA33VDBT7RR5+TKxY7YuGP2k=", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/jest-util": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-util/-/jest-util-30.5.1.tgz", - "integrity": "sha1-HnGh7iTzZcNAAcH4qrbW9Szq3Lc=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/types": "30.5.1", - "@types/node": "*", - "chalk": "^4.1.2", - "ci-info": "^4.2.0", - "graceful-fs": "^4.2.11", - "picomatch": "^4.0.3" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-util/node_modules/picomatch": { - "version": "4.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-4.0.7.tgz", - "integrity": "sha1-YxM2ADTMs2s9xh7L3/eBIfkP4h8=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/jest-validate": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-validate/-/jest-validate-30.5.1.tgz", - "integrity": "sha1-CSJwD64SPJ4dhAO99ikkt+PGaN4=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/get-type": "30.5.0", - "@jest/types": "30.5.1", - "camelcase": "^6.3.0", - "chalk": "^4.1.2", - "leven": "^3.1.0", - "pretty-format": "30.5.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-validate/node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha1-VoW5XrIJrJwMF3Rnd4ychN9Yupo=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/jest-watcher": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-watcher/-/jest-watcher-30.5.1.tgz", - "integrity": "sha1-cPxrvMJigrG65dU9fkYlniZrI40=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/test-result": "30.5.1", - "@jest/types": "30.5.1", - "@types/node": "*", - "ansi-escapes": "^4.3.2", - "chalk": "^4.1.2", - "emittery": "^0.13.1", - "jest-util": "30.5.1", - "string-length": "^4.0.2" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jest-worker/-/jest-worker-30.5.1.tgz", - "integrity": "sha1-MqTBdQKt3vcTQRyjv5UXlt6D4ro=", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@ungap/structured-clone": "^1.3.0", - "jest-util": "30.5.1", - "merge-stream": "^2.0.0", - "supports-color": "^8.1.1" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/supports-color/-/supports-color-8.1.1.tgz", - "integrity": "sha1-zW/BfihQDP9WwbhsCn/UpUpzAFw=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha1-GSA/tZmR35jjoocFDUZHzerzJJk=", - "dev": true, - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "3.15.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/js-yaml/-/js-yaml-3.15.2.tgz", - "integrity": "sha1-P4OCOsa+F/Vw8jsuze83d/9eo2Q=", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "3.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/jsesc/-/jsesc-3.1.0.tgz", - "integrity": "sha1-dNM1ojT2ftGZB/2t+sfM+dQJgl0=", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha1-fEeAWpQxmSjgV3dAXcEuH3pO4C0=", - "dev": true, - "license": "MIT" - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/json5/-/json5-2.2.3.tgz", - "integrity": "sha1-eM1vGhm9wStz21rQxh79ZsHikoM=", - "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/leven": { - "version": "3.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/leven/-/leven-3.1.0.tgz", - "integrity": "sha1-d4kd6DQGTMy6gq54QrtrFKE+1/I=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha1-7KKE910pZQeTCdwK2SVauy68FjI=", - "dev": true, - "license": "MIT" - }, - "node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha1-Gvujlq/WdqbUJQTQpno6frn2KqA=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha1-HaJ+ZxAnGUdpXa9oSOhH8B2EuSA=", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/make-dir": { - "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/make-dir/-/make-dir-4.0.0.tgz", - "integrity": "sha1-w8IwencSd82WODBfkVwprnQbYU4=", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/semver/-/semver-7.8.5.tgz", - "integrity": "sha1-ObZGA33VDBT7RR5+TKxY7YuGP2k=", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/math-intrinsics/-/math-intrinsics-1.1.0.tgz", - "integrity": "sha1-oN10voHiqlwvJ+Zc4oNgXuTit/k=", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/media-typer": { - "version": "1.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/media-typer/-/media-typer-1.1.1.tgz", - "integrity": "sha1-bwNUAN/jq51WB7x3VGzjDML5xrg=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/merge-descriptors": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/merge-descriptors/-/merge-descriptors-2.0.0.tgz", - "integrity": "sha1-6pIvZgY1oiSe5WXgRJ+VHmtgOAg=", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/merge-stream": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/merge-stream/-/merge-stream-2.0.0.tgz", - "integrity": "sha1-UoI2KaFN0AyXcPtq1H3GMQ8sH2A=", - "dev": true, - "license": "MIT" - }, - "node_modules/methods": { - "version": "1.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/methods/-/methods-1.1.2.tgz", - "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.52.0.tgz", - "integrity": "sha1-u6vNwChZ9JhzAchW4zh85exDv3A=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-2.1.35.tgz", - "integrity": "sha1-OBqHG2KnNEUGYK497uRIE/cNlZo=", - "dev": true, - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha1-ftLCzMyvhNP/y3pptXcR/CCDQBs=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/minimatch": { - "version": "10.2.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/minimatch/-/minimatch-10.2.6.tgz", - "integrity": "sha1-/ZVrvgt3JB6fFaxdzLHGOAYJaO8=", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.8" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minipass": { - "version": "7.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/minipass/-/minipass-7.1.3.tgz", - "integrity": "sha1-eTibTrG7LQA6m7qH1JLyvTe9xls=", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": ">=16 || 14 >=14.17" - } - }, - "node_modules/ms": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "license": "MIT" - }, - "node_modules/msal-node-wrapper": { - "resolved": "../../../Common/msal-node-wrapper", - "link": true - }, - "node_modules/napi-postinstall": { - "version": "0.3.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/napi-postinstall/-/napi-postinstall-0.3.4.tgz", - "integrity": "sha1-evJW1liLX46VK5GQll1rAZZTu7k=", - "dev": true, - "license": "MIT", - "bin": { - "napi-postinstall": "lib/cli.js" - }, - "engines": { - "node": "^12.20.0 || ^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/napi-postinstall" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/negotiator/-/negotiator-1.1.0.tgz", - "integrity": "sha1-FuAD0NtKwk/Z3xaO34cWJd7q498=", - "license": "MIT", - "dependencies": { - "content-type": "^2.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/negotiator/node_modules/content-type": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-2.1.0.tgz", - "integrity": "sha1-2TicQ8Coz2o1XbRk0h4HCSpASTo=", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/node-addon-api": { - "version": "7.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/node-addon-api/-/node-addon-api-7.1.1.tgz", - "integrity": "sha1-Grpmk7DyVSWKBJ1iEykykyKq1Vg=", - "dev": true, - "license": "MIT" - }, - "node_modules/node-int64": { - "version": "0.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/node-int64/-/node-int64-0.4.0.tgz", - "integrity": "sha1-h6kGXNs1XTGC2PlM4RGIuCXGijs=", - "dev": true, - "license": "MIT" - }, - "node_modules/node-releases": { - "version": "2.0.54", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/node-releases/-/node-releases-2.0.54.tgz", - "integrity": "sha1-Ca8X1WR6qfIh7FzyvsuVtoqYGv4=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/nodemon": { - "version": "3.1.10", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/nodemon/-/nodemon-3.1.10.tgz", - "integrity": "sha1-UBXF60//yyTZjPlFTfFPT+zsm8E=", - "dev": true, - "license": "MIT", - "dependencies": { - "chokidar": "^3.5.2", - "debug": "^4", - "ignore-by-default": "^1.0.1", - "minimatch": "^3.1.2", - "pstree.remy": "^1.1.8", - "semver": "^7.5.3", - "simple-update-notifier": "^2.0.0", - "supports-color": "^5.5.0", - "touch": "^3.1.0", - "undefsafe": "^2.0.5" - }, - "bin": { - "nodemon": "bin/nodemon.js" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/nodemon" - } - }, - "node_modules/nodemon/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", - "dev": true, - "license": "MIT" - }, - "node_modules/nodemon/node_modules/brace-expansion": { - "version": "1.1.18", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/brace-expansion/-/brace-expansion-1.1.18.tgz", - "integrity": "sha1-POdNiYhRNr4VNTQfjD1EJcKaXKs=", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/nodemon/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/nodemon/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/nodemon/node_modules/minimatch": { - "version": "3.1.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/minimatch/-/minimatch-3.1.5.tgz", - "integrity": "sha1-WAyI+NVEXyvWqo88re+g3nn71p4=", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/nodemon/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "dev": true, - "license": "MIT" - }, - "node_modules/nodemon/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/semver/-/semver-7.8.5.tgz", - "integrity": "sha1-ObZGA33VDBT7RR5+TKxY7YuGP2k=", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/nodemon/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha1-4uaaRKyHcveKHsCzW2id9lMO/I8=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha1-Dc1p/yOhybEf0JeDFmRKA4ghamU=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/npm-run-path": { - "version": "4.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/npm-run-path/-/npm-run-path-4.0.1.tgz", - "integrity": "sha1-t+zR5e1T2o43pV4cImnguX7XSOo=", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/object-inspect/-/object-inspect-1.13.4.tgz", - "integrity": "sha1-g3UmXiG8IND6WCwi4bE0hdbgAhM=", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/on-finished": { - "version": "2.4.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha1-WMjEQRblSEWtV/FKsQsDUzGErD8=", - "license": "MIT", - "dependencies": { - "ee-first": "1.1.1" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/on-headers": { - "version": "1.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/on-headers/-/on-headers-1.1.0.tgz", - "integrity": "sha1-WdpPkcRfX5icbkvO3Fo7Cu1w/2U=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/onetime/-/onetime-5.1.2.tgz", - "integrity": "sha1-0Oluu1awdHbfHdnEgG5SN5hcpF4=", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha1-4drMvnjQ0TiMoYxk/qOOPlfjcGs=", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha1-o0KLtwiLOmApL2aRkni3wpetTwc=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-locate/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha1-PdM8ZHohT9//2DWTPrCG2g3CHbE=", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha1-yyhoVA4xPWHeWPr741zpAE1VQOY=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-json-from-dist": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", - "integrity": "sha1-TxRxoBCCeob5TP2bByfjbSZ95QU=", - "dev": true, - "license": "BlueOak-1.0.0" - }, - "node_modules/parse-json": { - "version": "5.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha1-x2/Gbe5UIxyWKyK8yKcs8vmXU80=", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/parseurl": { - "version": "1.3.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha1-UTvb4tO5XXdi6METfvoZXGxhtbM=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-key/-/path-key-3.1.1.tgz", - "integrity": "sha1-WB9q3mWMu6ZaDTOA3ndTKVBU83U=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-scurry": { - "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-scurry/-/path-scurry-2.0.2.tgz", - "integrity": "sha1-a+DQ7gKhDZ4N56mLrmXhgskGH4U=", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^11.0.0", - "minipass": "^7.1.2" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "11.5.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/lru-cache/-/lru-cache-11.5.2.tgz", - "integrity": "sha1-AOFmZckMYg+6FKPDaHMql2ST92A=", - "dev": true, - "license": "BlueOak-1.0.0", - "engines": { - "node": "20 || >=22" - } - }, - "node_modules/path-to-regexp": { - "version": "8.4.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-to-regexp/-/path-to-regexp-8.4.2.tgz", - "integrity": "sha1-eVxCDE98pFxbiHNm9iLuDJhSzM0=", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picocolors/-/picocolors-1.1.1.tgz", - "integrity": "sha1-PTIa8+q5ObCDyPkpodEs2oHCa2s=", - "dev": true, - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/picomatch/-/picomatch-2.3.2.tgz", - "integrity": "sha1-WpQpFeJrNy3A8OZ1MUmhbmscVgE=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pirates": { - "version": "4.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/pirates/-/pirates-4.0.7.tgz", - "integrity": "sha1-ZDtKGMQlfIplEEtz8wSc6aChXiI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/pkg-dir/-/pkg-dir-4.2.0.tgz", - "integrity": "sha1-8JkTPfft5CLoHR2ESCcO6z5CYfM=", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pretty-format": { - "version": "30.5.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/pretty-format/-/pretty-format-30.5.1.tgz", - "integrity": "sha1-DdqRCnXRI0a3cZd7HzKFF7noRtQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/react-is-18": "npm:react-is@^18.3.1", - "@jest/react-is-19": "npm:react-is@^19.2.5", - "@jest/schemas": "30.5.0", - "ansi-styles": "^5.2.0" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - } - }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha1-B0SWkK1Fd30ZJKwquy/IiV26g2s=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/proxy-addr": { - "version": "2.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/proxy-addr/-/proxy-addr-2.0.7.tgz", - "integrity": "sha1-8Z/mnOqzEe65S0LnDowgcPm6ECU=", - "license": "MIT", - "dependencies": { - "forwarded": "0.2.0", - "ipaddr.js": "1.9.1" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/pstree.remy": { - "version": "1.1.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/pstree.remy/-/pstree.remy-1.1.8.tgz", - "integrity": "sha1-wkIiT0pnwh9oaDm720rCgrg3PTo=", - "dev": true, - "license": "MIT" - }, - "node_modules/pure-rand": { - "version": "7.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/pure-rand/-/pure-rand-7.0.1.tgz", - "integrity": "sha1-b1OlqePkpHRFgir5aCHKUJ7TdWY=", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/dubzzz" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fast-check" - } - ], - "license": "MIT" - }, - "node_modules/qs": { - "version": "6.16.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/qs/-/qs-6.16.0.tgz", - "integrity": "sha1-wixyOiipIPOqzc6Cifq9Q+zLef0=", - "license": "BSD-3-Clause", - "dependencies": { - "es-define-property": "^1.0.1", - "side-channel": "^1.1.1" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/random-bytes": { - "version": "1.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/random-bytes/-/random-bytes-1.0.0.tgz", - "integrity": "sha1-T2ih3Arli9P7lYSMMDJNt11kNgs=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/range-parser": { - "version": "1.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/range-parser/-/range-parser-1.3.0.tgz", - "integrity": "sha1-1/Gb6BK7YnIUcrRdO+IZ7wlXK0c=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/raw-body": { - "version": "3.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/raw-body/-/raw-body-3.0.2.tgz", - "integrity": "sha1-PjraWuVWj5CV2EN2/TpJuPsAClE=", - "license": "MIT", - "dependencies": { - "bytes": "~3.1.2", - "http-errors": "~2.0.1", - "iconv-lite": "~0.7.0", - "unpipe": "~1.0.0" - }, - "engines": { - "node": ">= 0.10" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha1-dKNwvYVxFuJFspzJc0DNQxoCpsc=", - "dev": true, - "license": "MIT", - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/resolve-cwd/-/resolve-cwd-3.0.0.tgz", - "integrity": "sha1-DwB18bslRHZs9zumpuKt/ryxPy0=", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-from": { - "version": "5.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/resolve-from/-/resolve-from-5.0.0.tgz", - "integrity": "sha1-w1IlhD3493bfIcV1V7wIfp39/Gk=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/router": { - "version": "2.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/router/-/router-2.2.0.tgz", - "integrity": "sha1-AZvmILcRyHZBFnzHm5kJDwCxRu8=", - "license": "MIT", - "dependencies": { - "debug": "^4.4.0", - "depd": "^2.0.0", - "is-promise": "^4.0.0", - "parseurl": "^1.3.3", - "path-to-regexp": "^8.0.0" - }, - "engines": { - "node": ">= 18" - } - }, - "node_modules/router/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/router/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "license": "MIT" - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha1-Hq+fqb2x/dTsdfWPnNtOa3gn7sY=", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=", - "license": "MIT" - }, - "node_modules/semver": { - "version": "6.3.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/semver/-/semver-6.3.1.tgz", - "integrity": "sha1-VW0u+GiRRuRtzqS/3QlfNDTf/LQ=", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/send": { - "version": "1.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/send/-/send-1.2.1.tgz", - "integrity": "sha1-nqt0O4dPNVD0CiaGe/KGrWDT8+0=", - "license": "MIT", - "dependencies": { - "debug": "^4.4.3", - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "etag": "^1.8.1", - "fresh": "^2.0.0", - "http-errors": "^2.0.1", - "mime-types": "^3.0.2", - "ms": "^2.1.3", - "on-finished": "^2.4.1", - "range-parser": "^1.2.1", - "statuses": "^2.0.2" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/send/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/send/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha1-zds+5PnGRTDf9kAjZmHULLajFPU=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/send/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha1-OQAtQYJXXVrwNv+hGBAPJSSy4qs=", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/send/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "license": "MIT" - }, - "node_modules/serve-static": { - "version": "2.2.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/serve-static/-/serve-static-2.2.1.tgz", - "integrity": "sha1-fxhqSk5fW2Y616QpT/G/N88OmKk=", - "license": "MIT", - "dependencies": { - "encodeurl": "^2.0.0", - "escape-html": "^1.0.3", - "parseurl": "^1.3.3", - "send": "^1.2.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/setprototypeof": { - "version": "1.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/setprototypeof/-/setprototypeof-1.2.0.tgz", - "integrity": "sha1-ZsmiSnP5/CjL5msJ/tPTPcrxtCQ=", - "license": "ISC" - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/shebang-command/-/shebang-command-2.0.0.tgz", - "integrity": "sha1-zNCvT4g1+9wmW4JGGq8MNmY/NOo=", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/shebang-regex/-/shebang-regex-3.0.0.tgz", - "integrity": "sha1-rhbxZE2HPsrYQ7AwexQzYtTEIXI=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/side-channel": { - "version": "1.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel/-/side-channel-1.1.1.tgz", - "integrity": "sha1-6gLGLgXcS+pn1EQvD7ce4ZL44Ks=", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel-list/-/side-channel-list-1.0.1.tgz", - "integrity": "sha1-wuC1oUpUCuvuO7xsP4ZmzJtQkSc=", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel-map/-/side-channel-map-1.0.1.tgz", - "integrity": "sha1-1rtrN5Asb+9RdOX1M/q0xzKib0I=", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", - "integrity": "sha1-Ed2hnVNo5Azp7CvcH7DsvAeQ7Oo=", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3", - "side-channel-map": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha1-qaF2f4r4QVURTqq9c/mSc8j1mtk=", - "dev": true, - "license": "ISC" - }, - "node_modules/simple-update-notifier": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz", - "integrity": "sha1-1wuSvat9bZDf1zkxGVowtuPXzrs=", - "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^7.5.3" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/simple-update-notifier/node_modules/semver": { - "version": "7.8.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/semver/-/semver-7.8.5.tgz", - "integrity": "sha1-ObZGA33VDBT7RR5+TKxY7YuGP2k=", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/slash/-/slash-3.0.0.tgz", - "integrity": "sha1-ZTm+hwwWWtvVJAIg2+Nh8bxNRjQ=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha1-qvB0gWnAL8M8gjKrzPkz9Uocw08=", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/statuses": { - "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/statuses/-/statuses-2.0.2.tgz", - "integrity": "sha1-j3XuzvdlteHPzcCA2llAntQk44I=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/string-length": { - "version": "4.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/string-length/-/string-length-4.0.2.tgz", - "integrity": "sha1-qKjce9XBqCubPIuH4SX2aHG25Xo=", - "dev": true, - "license": "MIT", - "dependencies": { - "char-regex": "^1.0.2", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string-width-cjs": { - "name": "string-width", - "version": "4.2.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha1-JpxxF9J7Ba0uU2gwqOyJXvnG0BA=", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-ansi-cjs": { - "name": "strip-ansi", - "version": "6.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha1-nibGPTD1NEPpSJSVshBdN7Z6hdk=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-bom": { - "version": "4.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strip-bom/-/strip-bom-4.0.0.tgz", - "integrity": "sha1-nDUFwdtFvO3KPZz3oW9cWqOQGHg=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-final-newline": { - "version": "2.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strip-final-newline/-/strip-final-newline-2.0.0.tgz", - "integrity": "sha1-ibhS+y/L6Tb29LMYevsKEsGrWK0=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha1-MfEoGzgyYwQ0gxwxDAHMzajL4AY=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/superagent": { - "version": "10.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/superagent/-/superagent-10.3.0.tgz", - "integrity": "sha1-/x4555drY/gIQpHWX1v7u70VaYk=", - "dev": true, - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.1", - "cookiejar": "^2.1.4", - "debug": "^4.3.7", - "fast-safe-stringify": "^2.1.1", - "form-data": "^4.0.5", - "formidable": "^3.5.4", - "methods": "^1.1.2", - "mime": "2.6.0", - "qs": "^6.14.1" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/superagent/node_modules/debug": { - "version": "4.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/debug/-/debug-4.4.3.tgz", - "integrity": "sha1-xq5DLZvZZiWC/OCHCbA4xY6ePWo=", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime/-/mime-2.6.0.tgz", - "integrity": "sha1-oqaCqVzU0MsdYlfij4PafjWAA2c=", - "dev": true, - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/superagent/node_modules/ms": { - "version": "2.1.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/ms/-/ms-2.1.3.tgz", - "integrity": "sha1-V0yBOM4dK1hh8LRFedut1gxmFbI=", - "dev": true, - "license": "MIT" - }, - "node_modules/supertest": { - "version": "7.2.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/supertest/-/supertest-7.2.2.tgz", - "integrity": "sha1-2sPuJaKqWZQqf2QeUMg4p8iBkgQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "cookie-signature": "^1.2.2", - "methods": "^1.1.2", - "superagent": "^10.3.0" - }, - "engines": { - "node": ">=14.18.0" - } - }, - "node_modules/supertest/node_modules/cookie-signature": { - "version": "1.2.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/cookie-signature/-/cookie-signature-1.2.2.tgz", - "integrity": "sha1-V8f8PMKTrKuf7FTXPhVpDr5KF5M=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.6.0" - } - }, - "node_modules/supports-color": { - "version": "7.2.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha1-G33NyzK4E4gBs+R4umpRyqiWSNo=", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/synckit": { - "version": "0.11.13", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/synckit/-/synckit-0.11.13.tgz", - "integrity": "sha1-BipepX2Bvvw1iS+CVN5cVn6XyAo=", - "dev": true, - "license": "MIT", - "dependencies": { - "@pkgr/core": "^0.3.6" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/synckit" - } - }, - "node_modules/test-exclude": { - "version": "7.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/test-exclude/-/test-exclude-7.0.2.tgz", - "integrity": "sha1-SCOSB3YwvFfVYwwTq+kIu5EN/GU=", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^10.4.1", - "minimatch": "^10.2.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/test-exclude/node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha1-6D46fj8wCzTLnYf2FfoMvzV2kO4=", - "dev": true, - "license": "MIT" - }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "2.1.4", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/brace-expansion/-/brace-expansion-2.1.4.tgz", - "integrity": "sha1-WJ2rEcABjQNmvmTNi/Esjb7MgyY=", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/test-exclude/node_modules/glob": { - "version": "10.5.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/glob/-/glob-10.5.0.tgz", - "integrity": "sha1-jsA1WRnNMzjChCiiPU8k7MX+c4w=", - "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^3.1.0", - "jackspeak": "^3.1.2", - "minimatch": "^9.0.4", - "minipass": "^7.1.2", - "package-json-from-dist": "^1.0.0", - "path-scurry": "^1.11.1" - }, - "bin": { - "glob": "dist/esm/bin.mjs" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/glob/node_modules/minimatch": { - "version": "9.0.9", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/minimatch/-/minimatch-9.0.9.tgz", - "integrity": "sha1-mwy5/LeAh/b9fqur4lEcTT1gV04=", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/test-exclude/node_modules/lru-cache": { - "version": "10.4.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/lru-cache/-/lru-cache-10.4.3.tgz", - "integrity": "sha1-QQ/IoXtw5ZgBPfJXwkRrfzOD8Rk=", - "dev": true, - "license": "ISC" - }, - "node_modules/test-exclude/node_modules/path-scurry": { - "version": "1.11.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/path-scurry/-/path-scurry-1.11.1.tgz", - "integrity": "sha1-eWCmaIiFlKByCxKpEdGnQqufEdI=", - "dev": true, - "license": "BlueOak-1.0.0", - "dependencies": { - "lru-cache": "^10.2.0", - "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" - }, - "engines": { - "node": ">=16 || 14 >=14.18" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha1-FkjESq58jZiKMmAY7XL1tN0DkuQ=", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/toidentifier": { - "version": "1.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha1-O+NDIaiKgg7RvYDfqjPkefu43TU=", - "license": "MIT", - "engines": { - "node": ">=0.6" - } - }, - "node_modules/touch": { - "version": "3.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/touch/-/touch-3.1.1.tgz", - "integrity": "sha1-CXoj17FhR2Q15cE0SpXA91tKVpQ=", - "dev": true, - "license": "ISC", - "bin": { - "nodetouch": "bin/nodetouch.js" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/tslib/-/tslib-2.8.1.tgz", - "integrity": "sha1-YS7+TtI11Wfoq6Xypfq3AoCt6D8=", - "dev": true, - "license": "0BSD", - "optional": true - }, - "node_modules/type-detect": { - "version": "4.0.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/type-detect/-/type-detect-4.0.8.tgz", - "integrity": "sha1-dkb7XxiHHPu3dJ5pvTmmOI63RQw=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha1-0mCiSwGYQ24TP6JqUkptZfo7Ljc=", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/type-is": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/type-is/-/type-is-2.1.0.tgz", - "integrity": "sha1-cdGnBTKTWC4WrJ8+uvGrmqSeVXA=", - "license": "MIT", - "dependencies": { - "content-type": "^2.0.0", - "media-typer": "^1.1.0", - "mime-types": "^3.0.0" - }, - "engines": { - "node": ">= 18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/content-type": { - "version": "2.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/content-type/-/content-type-2.1.0.tgz", - "integrity": "sha1-2TicQ8Coz2o1XbRk0h4HCSpASTo=", - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/type-is/node_modules/mime-db": { - "version": "1.54.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-db/-/mime-db-1.54.0.tgz", - "integrity": "sha1-zds+5PnGRTDf9kAjZmHULLajFPU=", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/type-is/node_modules/mime-types": { - "version": "3.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/mime-types/-/mime-types-3.0.2.tgz", - "integrity": "sha1-OQAtQYJXXVrwNv+hGBAPJSSy4qs=", - "license": "MIT", - "dependencies": { - "mime-db": "^1.54.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/uid-safe": { - "version": "2.1.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/uid-safe/-/uid-safe-2.1.5.tgz", - "integrity": "sha1-Kz1cckDo/C5Y+Komnl7knAhXvTo=", - "license": "MIT", - "dependencies": { - "random-bytes": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/undefsafe": { - "version": "2.0.5", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/undefsafe/-/undefsafe-2.0.5.tgz", - "integrity": "sha1-OHM7kye9zSJtuIn7cjpu/RYubiw=", - "dev": true, - "license": "MIT" - }, - "node_modules/undici-types": { - "version": "8.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/undici-types/-/undici-types-8.3.0.tgz", - "integrity": "sha1-ROn8nzJEZIzeo15Pm7LWgelBCAk=", - "dev": true, - "license": "MIT" - }, - "node_modules/unpipe": { - "version": "1.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/unpipe/-/unpipe-1.0.0.tgz", - "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/unrs-resolver": { - "version": "1.12.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/unrs-resolver/-/unrs-resolver-1.12.2.tgz", - "integrity": "sha1-psaIg5arulrarEyrZYffhm8dev0=", - "dev": true, - "hasInstallScript": true, - "license": "MIT", - "dependencies": { - "napi-postinstall": "^0.3.4" - }, - "funding": { - "url": "https://opencollective.com/unrs-resolver" - }, - "optionalDependencies": { - "@unrs/resolver-binding-android-arm-eabi": "1.12.2", - "@unrs/resolver-binding-android-arm64": "1.12.2", - "@unrs/resolver-binding-darwin-arm64": "1.12.2", - "@unrs/resolver-binding-darwin-x64": "1.12.2", - "@unrs/resolver-binding-freebsd-x64": "1.12.2", - "@unrs/resolver-binding-linux-arm-gnueabihf": "1.12.2", - "@unrs/resolver-binding-linux-arm-musleabihf": "1.12.2", - "@unrs/resolver-binding-linux-arm64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-arm64-musl": "1.12.2", - "@unrs/resolver-binding-linux-loong64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-loong64-musl": "1.12.2", - "@unrs/resolver-binding-linux-ppc64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-riscv64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-riscv64-musl": "1.12.2", - "@unrs/resolver-binding-linux-s390x-gnu": "1.12.2", - "@unrs/resolver-binding-linux-x64-gnu": "1.12.2", - "@unrs/resolver-binding-linux-x64-musl": "1.12.2", - "@unrs/resolver-binding-openharmony-arm64": "1.12.2", - "@unrs/resolver-binding-wasm32-wasi": "1.12.2", - "@unrs/resolver-binding-win32-arm64-msvc": "1.12.2", - "@unrs/resolver-binding-win32-ia32-msvc": "1.12.2", - "@unrs/resolver-binding-win32-x64-msvc": "1.12.2" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.3.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/update-browserslist-db/-/update-browserslist-db-1.3.2.tgz", - "integrity": "sha1-nZn7/1bFC7Ebpf01zs5ZFtpZWDY=", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.1" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha1-uVcqv6Yr1VbBbXX968GkEdX/MXU=", - "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/vary": { - "version": "1.1.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/which": { - "version": "2.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/which/-/which-2.0.2.tgz", - "integrity": "sha1-fGqN0KY2oDJ+ELWckobu6T8/UbE=", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrap-ansi-cjs": { - "name": "wrap-ansi", - "version": "7.0.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/wrap-ansi/-/wrap-ansi-7.0.0.tgz", - "integrity": "sha1-Z+FFz/UQpqaYS98RUpEdadLrnkM=", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "5.0.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/write-file-atomic/-/write-file-atomic-5.0.1.tgz", - "integrity": "sha1-aN9HF8Vcb6QoGnhgtMK6Cm0rEec=", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^4.0.1" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/write-file-atomic/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha1-lSGIwcvVRgcOLdIND0HArgUwywQ=", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/y18n": { - "version": "5.0.8", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/y18n/-/y18n-5.0.8.tgz", - "integrity": "sha1-f0k00PfKjFb5UxSTndzS3ZHOHVU=", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha1-27fa+b/YusmrRev2ArjLrQ1dCP0=", - "dev": true, - "license": "ISC" - }, - "node_modules/yargs": { - "version": "17.7.3", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/yargs/-/yargs-17.7.3.tgz", - "integrity": "sha1-d53/5ryv7FlqcXLpgyiaWIZH+qo=", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha1-kJa87r+ZDSG7MfqVFuDt4pSnfTU=", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://ms-feed-25.pkgs.visualstudio.com/1es-public/_packaging/npm-public/npm/registry/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha1-ApTrPe4FAo0x7hpfosVWpqrxChs=", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - } - } -} diff --git a/1-Authentication/2-sign-in-b2c/App/package.json b/1-Authentication/2-sign-in-b2c/App/package.json deleted file mode 100644 index 10092ce..0000000 --- a/1-Authentication/2-sign-in-b2c/App/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "msal-node-tutorial-signin-b2c", - "version": "1.0.0", - "description": "A Node.js & Express web app authenticating users against Azure AD B2C using MSAL Node", - "main": "server.js", - "scripts": { - "start": "node server.js", - "dev": "nodemon server.js", - "test": "jest --forceExit" - }, - "engines": { - "node": ">=20" - }, - "overrides": { - "qs": "6.16.0", - "uuid": "11.1.1" - }, - "author": "derisen", - "license": "MIT", - "dependencies": { - "bootstrap": "^5.3.8", - "ejs": "^6.0.1", - "express": "^5.2.1", - "express-session": "^1.19.0", - "msal-node-wrapper": "file:../../../Common/msal-node-wrapper" - }, - "devDependencies": { - "jest": "^30.5.1", - "nodemon": "^3.1.10", - "supertest": "^7.2.2" - } -} diff --git a/1-Authentication/2-sign-in-b2c/App/public/style.css b/1-Authentication/2-sign-in-b2c/App/public/style.css deleted file mode 100644 index 81d94b4..0000000 --- a/1-Authentication/2-sign-in-b2c/App/public/style.css +++ /dev/null @@ -1,32 +0,0 @@ -h1 { - color: red; -} - -#card-div { - min-width: 40%; - margin: 5% auto 5% auto; -} - -#form-area-div { - width: 55%; - margin: 5% auto 5% auto; -} - -.table-area-div { - width: 70%; - margin: 5% auto 5% auto; -} - -#editButton { - margin-top: 20px; - margin-bottom: -25px; -} - -.footer { - position: fixed; - left: 0; - bottom: 0; - width: 100%; - text-align: center; -} - diff --git a/1-Authentication/2-sign-in-b2c/App/sample.test.js b/1-Authentication/2-sign-in-b2c/App/sample.test.js deleted file mode 100644 index c811339..0000000 --- a/1-Authentication/2-sign-in-b2c/App/sample.test.js +++ /dev/null @@ -1,63 +0,0 @@ -const request = require('supertest'); - -jest.setTimeout(15000); - -describe('Sanitize configuration object', () => { - let authConfig; - - beforeAll(() => { - authConfig = require('./authConfig.js'); - }); - - it('should define the config object', () => { - expect(authConfig).toBeDefined(); - }); - - it('should not contain client Id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(authConfig.auth.clientId)).toBe(false); - }); - - it('should not contain tenant Id', () => { - const regexGuid = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i; - expect(regexGuid.test(authConfig.auth.tenantId)).toBe(false); - }); - - it('should not contain client secret', () => { - const regexSecret = /^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[#?!@$%^&*-]).{34,}$/; - expect(regexSecret.test(authConfig.auth.clientSecret)).toBe(false); - }); -}); - -describe('Ensure pages served', () => { - let app; - - beforeAll(async () => { - process.env.NODE_ENV = 'test'; - - const authConfig = require('./authConfig.js'); - const main = require('./app.js'); - - authConfig.auth.authority = `https://login.microsoftonline.com/common`; - authConfig.auth.clientId = "11111111-2222-3333-4444-111111111111"; - authConfig.auth.clientSecret = "11111111222233334444111111111111"; - - app = await main(); - const SERVER_PORT = process.env.PORT || 4000; - app.listen(SERVER_PORT, () => console.log(`Msal Node Auth Code Sample app listening on port ${SERVER_PORT}!`)); - }) - - it('should serve home page', async () => { - const res = await request(app) - .get('/'); - - expect(res.statusCode).toEqual(200); - }); - - it('should protect id page', async () => { - const res = await request(app) - .get('/id'); - - expect(res.statusCode).not.toEqual(200); - }); -}); \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/server.js b/1-Authentication/2-sign-in-b2c/App/server.js deleted file mode 100644 index a571920..0000000 --- a/1-Authentication/2-sign-in-b2c/App/server.js +++ /dev/null @@ -1,10 +0,0 @@ - - -const main = require("./app"); - -(async () => { - const app = await main(); - const SERVER_PORT = process.env.PORT || 4000; - - app.listen(SERVER_PORT, () => console.log(`Msal Node Auth Code Sample app listening on port ${SERVER_PORT}!`)); -})(); \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/views/home.ejs b/1-Authentication/2-sign-in-b2c/App/views/home.ejs deleted file mode 100644 index 625a55a..0000000 --- a/1-Authentication/2-sign-in-b2c/App/views/home.ejs +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - Home - - - - <%- include('includes/navbar', {isAuthenticated: isAuthenticated}); %> - -
-
-
-
- <% if (isAuthenticated) { %> -
Welcome <%= username %>
- <% } else { %> -
Sign-in to get an ID Token
- <% } %> -
-
-
-
- - <%- include('includes/footer'); %> - - - - - - - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/views/id.ejs b/1-Authentication/2-sign-in-b2c/App/views/id.ejs deleted file mode 100644 index e2ca8c6..0000000 --- a/1-Authentication/2-sign-in-b2c/App/views/id.ejs +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - ID - - - - <%- include('includes/navbar', {isAuthenticated: isAuthenticated}); %> - -
-

Some of the important claims in your ID token are shown below:

-
- -
- - - - - - - - - <% for (const [key, value] of Object.entries(claims)) { %> - - - - - <% } %> - -
ClaimValue
<%= key %><%= value %>
-
- - <%- include('includes/footer'); %> - - - - - - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/views/includes/footer.ejs b/1-Authentication/2-sign-in-b2c/App/views/includes/footer.ejs deleted file mode 100644 index 6676216..0000000 --- a/1-Authentication/2-sign-in-b2c/App/views/includes/footer.ejs +++ /dev/null @@ -1,7 +0,0 @@ - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/App/views/includes/navbar.ejs b/1-Authentication/2-sign-in-b2c/App/views/includes/navbar.ejs deleted file mode 100644 index 0b7c1bd..0000000 --- a/1-Authentication/2-sign-in-b2c/App/views/includes/navbar.ejs +++ /dev/null @@ -1,11 +0,0 @@ - \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/AppCreationScripts.md b/1-Authentication/2-sign-in-b2c/AppCreationScripts/AppCreationScripts.md deleted file mode 100644 index 624c702..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/AppCreationScripts.md +++ /dev/null @@ -1,138 +0,0 @@ -# Registering sample apps with the Microsoft identity platform and updating configuration files using PowerShell - -## Overview - -### Quick summary - -1. Run the script to create your Azure AD application and configure the code of the sample application accordingly. - - ```PowerShell - cd .\AppCreationScripts\ - .\Configure.ps1 -TenantId "your test tenant's id" -AzureEnvironmentName "[Optional] - Azure environment, defaults to 'Global'" - ``` - -### More details - -- [Goal of the provided scripts](#goal-of-the-provided-scripts) - - [Presentation of the scripts](#presentation-of-the-scripts) - - [Usage pattern for tests and DevOps scenarios](#usage-pattern-for-tests-and-DevOps-scenarios) -- [How to use the app creation scripts?](#how-to-use-the-app-creation-scripts) - - [Pre-requisites](#pre-requisites) - - [Run the script and start running](#run-the-script-and-start-running) - - [Four ways to run the script](#four-ways-to-run-the-script) - - [Option 1 (interactive)](#option-1-interactive) - - [Option 2 (Interactive, but create apps in a specified tenant)](#option-3-Interactive-but-create-apps-in-a-specified-tenant) - - [Running the script on Azure Sovereign clouds](#running-the-script-on-Azure-Sovereign-clouds) - -## Goal of the provided scripts - -### Presentation of the scripts - -This sample comes with two PowerShell scripts, which automate the creation of the Azure Active Directory applications, and the configuration of the code for this sample. Once you run them, you will only need to build the solution and you are good to test. - -These scripts are: - -- `Configure.ps1` which: - - creates Azure AD applications and their related objects (permissions, dependencies, secrets, app roles), - - changes the configuration files in the sample projects. - - creates a summary file named `createdApps.html` in the folder from which you ran the script, and containing, for each Azure AD application it created: - - the identifier of the application - - the AppId of the application - - the url of its registration in the [Azure portal](https://portal.azure.com). - -- `Cleanup.ps1` which cleans-up the Azure AD objects created by `Configure.ps1`. Note that this script does not revert the changes done in the configuration files, though. You will need to undo the change from source control (from Visual Studio, or from the command line using, for instance, `git reset`). - -> :information_source: If the sample supports using certificates instead of client secrets, this folder will contain an additional set of scripts: `Configure-WithCertificates.ps1` and `Cleanup-WithCertificates.ps1`. You can use them in the same way to register app(s) that use certificates instead of client secrets. - -### Usage pattern for tests and DevOps scenarios - -The `Configure.ps1` will stop if it tries to create an Azure AD application which already exists in the tenant. For this, if you are using the script to try/test the sample, or in DevOps scenarios, you might want to run `Cleanup.ps1` just before `Configure.ps1`. This is what is shown in the steps below. - -## How to use the app creation scripts? - -### Pre-requisites - -1. PowerShell 7 or later (see: [installing PowerShell](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell)) -1. Open PowerShell (On Windows, press `Windows-R` and type `PowerShell` in the search window) - -### (Optionally) install Microsoft.Graph.Applications PowerShell modules - -The scripts install the required PowerShell module (Microsoft.Graph.Applications) for the current user if needed. However, if you want to install if for all users on the machine, you can follow the following steps: - -1. If you have never done it already, in the PowerShell window, install the Microsoft.Graph.Applications PowerShell modules. For this: - - 1. Open PowerShell - 2. Type: - - ```PowerShell - Install-Module Microsoft.Graph.Applications - ``` - - or if you want the modules to be installed for the current user only, run: - - ```PowerShell - Install-Module Microsoft.Graph.Applications -Scope CurrentUser - ``` - -### Run the script and start running - -1. Go to the `AppCreationScripts` sub-folder. From the folder where you cloned the repo, - - ```PowerShell - cd AppCreationScripts - ``` - -1. Run the scripts. See below for the [four options](#four-ways-to-run-the-script) to do that. -1. Open the Visual Studio solution, and in the solution's context menu, choose **Set Startup Projects**. -1. select **Start** for the projects - -You're done! - -### Two ways to run the script - -We advise four ways of running the script: - -- Interactive: you will be prompted for credentials, and the scripts decide in which tenant to create the objects, -- Interactive in specific tenant: you will provide the tenant in which you want to create the objects and then you will be prompted for credentials, and the scripts will create the objects, - -Here are the details on how to do this. - -#### Option 1 (interactive) - -- Just run ``.\Configure.ps1``, and you will be prompted to sign-in (email address, password, and if needed MFA). -- The script will be run as the signed-in user and will use the tenant in which the user is defined. - -Note that the script will choose the tenant in which to create the applications, based on the user. Also to run the `Cleanup.ps1` script, you will need to re-sign-in. - -#### Option 2 (Interactive, but create apps in a specified tenant) - - if you want to create the apps in a particular tenant, you can use the following option: - -- Open the [Azure portal](https://portal.azure.com) -- Select the Azure Active directory you are interested in (in the combo-box below your name on the top right of the browser window) -- Find the "Active Directory" object in this tenant -- Go to **Properties** and copy the content of the **Directory Id** property -- Then use the full syntax to run the scripts: - -```PowerShell -$tenantId = "yourTenantIdGuid" -. .\Cleanup.ps1 -TenantId $tenantId -. .\Configure.ps1 -TenantId $tenantId -``` - -### Running the script on Azure Sovereign clouds - -All the four options listed above can be used on any Azure Sovereign clouds. By default, the script targets `AzureCloud`, but it can be changed using the parameter `-AzureEnvironmentName`. - -The acceptable values for this parameter are: - -- AzureCloud -- AzureChinaCloud -- AzureUSGovernment - -Example: - - ```PowerShell - . .\Cleanup.ps1 -AzureEnvironmentName "AzureUSGovernment" - . .\Configure.ps1 -AzureEnvironmentName "AzureUSGovernment" - ``` diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup-WithCertificates.ps1 b/1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup-WithCertificates.ps1 deleted file mode 100644 index 41dd993..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup-WithCertificates.ps1 +++ /dev/null @@ -1,155 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - - -Function Cleanup -{ - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - <# - .Description - This function removes the Azure AD applications for the sample. These applications were created by the Configure.ps1 script - #> - - # $tenantId is the Active Directory Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant - # into which you want to create the apps. Look it up in the Azure portal in the "Properties" of the Azure AD. - - # Connect to the Microsoft Graph API - Write-Host "Connecting to Microsoft Graph" - - - if ($tenantId -eq "") - { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else - { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Removes the applications - Write-Host "Cleaning-up applications from tenant '$tenantId'" - - Write-Host "Removing 'client' (msal-node-webapp) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'msal-node-webapp'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'msal-node-webapp'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (msal-node-webapp) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'msal-node-webapp'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed msal-node-webapp.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'msal-node-webapp'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'msal-node-webapp'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } - # remove self-signed certificate - Write-Host "Removing CN=msal-node-webapp certificate from Cert:/CurrentUser/My" - Get-ChildItem -Path Cert:\CurrentUser\My | where { $_.subject -eq "CN=msal-node-webapp" } | Remove-Item -} - -# Pre-requisites -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -$ErrorActionPreference = "Stop" - - -try -{ - Cleanup -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} - -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup.ps1 b/1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup.ps1 deleted file mode 100644 index 7484347..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Cleanup.ps1 +++ /dev/null @@ -1,152 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - - -Function Cleanup -{ - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - <# - .Description - This function removes the Azure AD applications for the sample. These applications were created by the Configure.ps1 script - #> - - # $tenantId is the Active Directory Tenant. This is a GUID which represents the "Directory ID" of the AzureAD tenant - # into which you want to create the apps. Look it up in the Azure portal in the "Properties" of the Azure AD. - - # Connect to the Microsoft Graph API - Write-Host "Connecting to Microsoft Graph" - - - if ($tenantId -eq "") - { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else - { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Removes the applications - Write-Host "Cleaning-up applications from tenant '$tenantId'" - - Write-Host "Removing 'client' (msal-node-webapp) if needed" - try - { - Get-MgApplication -Filter "DisplayName eq 'msal-node-webapp'" | ForEach-Object {Remove-MgApplication -ApplicationId $_.Id } - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove the application 'msal-node-webapp'. Error is $message. Try deleting manually." -ForegroundColor White -BackgroundColor Red - } - - Write-Host "Making sure there are no more (msal-node-webapp) applications found, will remove if needed..." - $apps = Get-MgApplication -Filter "DisplayName eq 'msal-node-webapp'" | Format-List Id, DisplayName, AppId, SignInAudience, PublisherDomain - - if ($apps) - { - Remove-MgApplication -ApplicationId $apps.Id - } - - foreach ($app in $apps) - { - Remove-MgApplication -ApplicationId $app.Id - Write-Host "Removed msal-node-webapp.." - } - - # also remove service principals of this app - try - { - Get-MgServicePrincipal -filter "DisplayName eq 'msal-node-webapp'" | ForEach-Object {Remove-MgServicePrincipal -ServicePrincipalId $_.Id -Confirm:$false} - } - catch - { - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to remove ServicePrincipal 'msal-node-webapp'. Error is $message. Try deleting manually from Enterprise applications." -ForegroundColor White -BackgroundColor Red - } -} - -# Pre-requisites -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -$ErrorActionPreference = "Stop" - - -try -{ - Cleanup -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} - -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure-WithCertificates.ps1 b/1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure-WithCertificates.ps1 deleted file mode 100644 index 7b6d3cd..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure-WithCertificates.ps1 +++ /dev/null @@ -1,299 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - -<# - This script creates the Azure AD applications needed for this sample and updates the configuration files - for the visual Studio projects from the data in the Azure AD applications. - - In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user - - There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. -#> - -# Create an application key -# See https://www.sabin.io/blog/adding-an-azure-active-directory-application-and-key-using-powershell/ -Function CreateAppKey([DateTime] $fromDate, [double] $durationInMonths) -{ - $key = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphPasswordCredential - - $key.StartDateTime = $fromDate - $key.EndDateTime = $fromDate.AddMonths($durationInMonths) - $key.KeyId = (New-Guid).ToString() - $key.DisplayName = "app secret" - - return $key -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function UpdateLine([string] $line, [string] $value) -{ - $index = $line.IndexOf(':') - $lineEnd = '' - - if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } - - if ($index -ige 0) - { - $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = UpdateLine $line $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function ReplaceInLine([string] $line, [string] $key, [string] $value) -{ - $index = $line.IndexOf($key) - if ($index -ige 0) - { - $index2 = $index+$key.Length - $line = $line.Substring(0, $index) + $value + $line.Substring($index2) - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = ReplaceInLine $line $key $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - - -<#.Description - Primary entry method to create and configure app registrations -#> -Function ConfigureApplications -{ - <#.Description - This function creates the Azure AD applications for the sample in the provided Azure AD tenant and updates the - configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) - so that they are consistent with the Applications parameters - #> - - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) - Write-Host "Connecting to Microsoft Graph" - if ($tenantId -eq "") { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Create the client AAD application - Write-Host "Creating the AAD application (msal-node-webapp)" - # create the application - $clientAadApplication = New-MgApplication -DisplayName "msal-node-webapp" ` - -Web ` - @{ ` - RedirectUris = "http://localhost:4000/redirect"; ` - HomePageUrl = "http://localhost:4000"; ` - } ` - -SignInAudience AzureADandPersonalMicrosoftAccount ` - #end of command - - $currentAppId = $clientAadApplication.AppId - $currentAppObjectId = $clientAadApplication.Id - - $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain - #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/msal-node-webapp") - # Generate a certificate - - Write-Host "Creating the client application (msal-node-webapp)" - - $certificateName = 'msal-node-webapp' - - $certificate=New-SelfSignedCertificate -Subject $certificateName ` - -CertStoreLocation "Cert:\CurrentUser\My" ` - -KeyExportPolicy Exportable ` - -KeySpec Signature - - $thumbprint = $certificate.Thumbprint - - $unsecureCertificatePassword = Read-Host -Prompt "Enter password for your certificate (Please remember the password, you will need it when uploading to Key Vault): " - $certificatePassword = ConvertTo-SecureString $unsecureCertificatePassword -AsPlainText -Force - - Write-Host "Exporting certificate as a PFX file" - Export-PfxCertificate -Cert "Cert:\Currentuser\My\$thumbprint" -FilePath "$pwd\$certificateName.pfx" -ChainOption EndEntityCertOnly -NoProperties -Password $certificatePassword - Write-Host "PFX written to:" - Write-Host "$pwd\$certificateName.pfx" - - # Add a Azure Key Credentials from the certificate for the application - $clientKeyCredentials = Update-MgApplication -ApplicationId $currentAppObjectId ` - -KeyCredentials @(@{Type = "AsymmetricX509Cert"; Usage = "Verify"; Key= $certificate.RawData; StartDateTime = $certificate.NotBefore; EndDateTime = $certificate.NotAfter;}) - - - openssl pkcs12 -in "$pwd\$certificateName.pfx" -nocerts -out "$pwd\$certificateName.key" -nodes -password pass:$unsecureCertificatePassword - (Get-Content $pwd\$certificateName.key) | Select-Object -Skip 6 | Set-Content $pwd\$certificateName.key - - openssl pkcs12 -in "$pwd\$certificateName.pfx" -nokeys -out "$pwd\$certificateName.cer" -password pass:$unsecureCertificatePassword - (Get-Content $pwd\$certificateName.cer) | Select-Object -Skip 6 | Set-Content $pwd\$certificateName.cer - - - # create the service principal of the newly created application - $clientServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($clientServicePrincipal.DisplayName)'" - } - Write-Host "Done creating the client application (msal-node-webapp)" - - # URL of the AAD application in the Azure portal - # Future? $clientPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $clientPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" - - Add-Content -Value "client$currentAppIdmsal-node-webapp" -Path createdApps.html - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'msal-node-webapp' at `n $clientPortalUrl" -ForegroundColor Green - - # Update config file for 'client' - # $configFile = $pwd.Path + "\..\App\authConfig.js" - $configFile = $(Resolve-Path ($pwd.Path + "\..\App\authConfig.js")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $clientAadApplication.AppId;"Enter_the_Tenant_Info_Here" = $tenantId;"Enter_the_Client_Secret_Here" = $clientAppKey }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - Write-Host "- App client - created at $clientPortalUrl" - - -Add-Content -Value "" -Path createdApps.html -} # end of ConfigureApplications function - -# Pre-requisites - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -Set-Content -Value "" -Path createdApps.html -Add-Content -Value "" -Path createdApps.html - -$ErrorActionPreference = "Stop" - -# Run interactively (will ask you for the tenant ID) - -try -{ - ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure.ps1 b/1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure.ps1 deleted file mode 100644 index 0e62d19..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/Configure.ps1 +++ /dev/null @@ -1,275 +0,0 @@ -#Requires -Version 7 - -[CmdletBinding()] -param( - [Parameter(Mandatory=$False, HelpMessage='Tenant ID (This is a GUID which represents the "Directory ID" of the AzureAD tenant into which you want to create the apps')] - [string] $tenantId, - [Parameter(Mandatory=$False, HelpMessage='Azure environment to use while running the script. Default = Global')] - [string] $azureEnvironmentName -) - -<# - This script creates the Azure AD applications needed for this sample and updates the configuration files - for the visual Studio projects from the data in the Azure AD applications. - - In case you don't have Microsoft.Graph.Applications already installed, the script will automatically install it for the current user - - There are two ways to run this script. For more information, read the AppCreationScripts.md file in the same folder as this script. -#> - -# Create an application key -# See https://www.sabin.io/blog/adding-an-azure-active-directory-application-and-key-using-powershell/ -Function CreateAppKey([DateTime] $fromDate, [double] $durationInMonths) -{ - $key = New-Object Microsoft.Graph.PowerShell.Models.MicrosoftGraphPasswordCredential - - $key.StartDateTime = $fromDate - $key.EndDateTime = $fromDate.AddMonths($durationInMonths) - $key.KeyId = (New-Guid).ToString() - $key.DisplayName = "app secret" - - return $key -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function UpdateLine([string] $line, [string] $value) -{ - $index = $line.IndexOf(':') - $lineEnd = '' - - if($line[$line.Length - 1] -eq ','){ $lineEnd = ',' } - - if ($index -ige 0) - { - $line = $line.Substring(0, $index+1) + " " + '"' + $value+ '"' + $lineEnd - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function UpdateTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = UpdateLine $line $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - -<#.Description - This function takes a string input as a single line, matches a key value and replaces with the replacement value -#> -Function ReplaceInLine([string] $line, [string] $key, [string] $value) -{ - $index = $line.IndexOf($key) - if ($index -ige 0) - { - $index2 = $index+$key.Length - $line = $line.Substring(0, $index) + $value + $line.Substring($index2) - } - return $line -} - -<#.Description - This function takes a dictionary of keys to search and their replacements and replaces the placeholders in a text file -#> -Function ReplaceInTextFile([string] $configFilePath, [System.Collections.HashTable] $dictionary) -{ - $lines = Get-Content $configFilePath - $index = 0 - while($index -lt $lines.Length) - { - $line = $lines[$index] - foreach($key in $dictionary.Keys) - { - if ($line.Contains($key)) - { - $lines[$index] = ReplaceInLine $line $key $dictionary[$key] - } - } - $index++ - } - - Set-Content -Path $configFilePath -Value $lines -Force -} - - -<#.Description - Primary entry method to create and configure app registrations -#> -Function ConfigureApplications -{ - <#.Description - This function creates the Azure AD applications for the sample in the provided Azure AD tenant and updates the - configuration files in the client and service project of the visual studio solution (App.Config and Web.Config) - so that they are consistent with the Applications parameters - #> - - if (!$azureEnvironmentName) - { - $azureEnvironmentName = "Global" - } - - # Connect to the Microsoft Graph API, non-interactive is not supported for the moment (Oct 2021) - Write-Host "Connecting to Microsoft Graph" - if ($tenantId -eq "") { - Connect-MgGraph -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - else { - Connect-MgGraph -TenantId $tenantId -Scopes "User.Read.All Organization.Read.All Application.ReadWrite.All" -Environment $azureEnvironmentName - } - - $context = Get-MgContext - $tenantId = $context.TenantId - - # Get the user running the script - $currentUserPrincipalName = $context.Account - $user = Get-MgUser -Filter "UserPrincipalName eq '$($context.Account)'" - - # get the tenant we signed in to - $Tenant = Get-MgOrganization - $tenantName = $Tenant.DisplayName - - $verifiedDomain = $Tenant.VerifiedDomains | where {$_.Isdefault -eq $true} - $verifiedDomainName = $verifiedDomain.Name - $tenantId = $Tenant.Id - - Write-Host ("Connected to Tenant {0} ({1}) as account '{2}'. Domain is '{3}'" -f $Tenant.DisplayName, $Tenant.Id, $currentUserPrincipalName, $verifiedDomainName) - - # Create the client AAD application - Write-Host "Creating the AAD application (msal-node-webapp)" - # Get a 6 months application key for the client Application - $fromDate = [DateTime]::Now; - $key = CreateAppKey -fromDate $fromDate -durationInMonths 6 - - # create the application - $clientAadApplication = New-MgApplication -DisplayName "msal-node-webapp" ` - -Web ` - @{ ` - RedirectUris = "http://localhost:4000/redirect"; ` - HomePageUrl = "http://localhost:4000"; ` - } ` - -SignInAudience AzureADandPersonalMicrosoftAccount ` - #end of command - - #add a secret to the application - $pwdCredential = Add-MgApplicationPassword -ApplicationId $clientAadApplication.Id -PasswordCredential $key - $clientAppKey = $pwdCredential.SecretText - - $currentAppId = $clientAadApplication.AppId - $currentAppObjectId = $clientAadApplication.Id - - $tenantName = (Get-MgApplication -ApplicationId $currentAppObjectId).PublisherDomain - #Update-MgApplication -ApplicationId $currentAppObjectId -IdentifierUris @("https://$tenantName/msal-node-webapp") - - # create the service principal of the newly created application - $clientServicePrincipal = New-MgServicePrincipal -AppId $currentAppId -Tags {WindowsAzureActiveDirectoryIntegratedApp} - - # add the user running the script as an app owner if needed - $owner = Get-MgApplicationOwner -ApplicationId $currentAppObjectId - if ($owner -eq $null) - { - New-MgApplicationOwnerByRef -ApplicationId $currentAppObjectId -BodyParameter @{"@odata.id" = "https://graph.microsoft.com/v1.0/directoryObjects/$user.ObjectId"} - Write-Host "'$($user.UserPrincipalName)' added as an application owner to app '$($clientServicePrincipal.DisplayName)'" - } - Write-Host "Done creating the client application (msal-node-webapp)" - - # URL of the AAD application in the Azure portal - # Future? $clientPortalUrl = "https://portal.azure.com/#@"+$tenantName+"/blade/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/Overview/appId/"+$currentAppId+"/objectId/"+$currentAppObjectId+"/isMSAApp/" - $clientPortalUrl = "https://portal.azure.com/#view/Microsoft_AAD_RegisteredApps/ApplicationMenuBlade/~/Overview/appId/"+$currentAppId+"/isMSAApp~/false" - - Add-Content -Value "" -Path createdApps.html - - # print the registered app portal URL for any further navigation - Write-Host "Successfully registered and configured that app registration for 'msal-node-webapp' at `n $clientPortalUrl" -ForegroundColor Green - - # Update config file for 'client' - # $configFile = $pwd.Path + "\..\App\authConfig.js" - $configFile = $(Resolve-Path ($pwd.Path + "\..\App\authConfig.js")) - - $dictionary = @{ "Enter_the_Application_Id_Here" = $clientAadApplication.AppId;"Enter_the_Tenant_Info_Here" = $tenantId;"Enter_the_Client_Secret_Here" = $clientAppKey }; - - Write-Host "Updating the sample config '$configFile' with the following config values:" -ForegroundColor Yellow - $dictionary - Write-Host "-----------------" - - ReplaceInTextFile -configFilePath $configFile -dictionary $dictionary - Write-Host "- App client - created at $clientPortalUrl" - - -Add-Content -Value "
ApplicationAppIdUrl in the Azure portal
client$currentAppIdmsal-node-webapp
" -Path createdApps.html -} # end of ConfigureApplications function - -# Pre-requisites - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph")) { - Install-Module "Microsoft.Graph" -Scope CurrentUser -} - -#Import-Module Microsoft.Graph - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Authentication")) { - Install-Module "Microsoft.Graph.Authentication" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Authentication - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Identity.DirectoryManagement")) { - Install-Module "Microsoft.Graph.Identity.DirectoryManagement" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Identity.DirectoryManagement - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Applications")) { - Install-Module "Microsoft.Graph.Applications" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Applications - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Groups")) { - Install-Module "Microsoft.Graph.Groups" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Groups - -if ($null -eq (Get-Module -ListAvailable -Name "Microsoft.Graph.Users")) { - Install-Module "Microsoft.Graph.Users" -Scope CurrentUser -} - -Import-Module Microsoft.Graph.Users - -Set-Content -Value "" -Path createdApps.html -Add-Content -Value "" -Path createdApps.html - -$ErrorActionPreference = "Stop" - -# Run interactively (will ask you for the tenant ID) - -try -{ - ConfigureApplications -tenantId $tenantId -environment $azureEnvironmentName -} -catch -{ - $_.Exception.ToString() | out-host - $message = $_ - Write-Warning $Error[0] - Write-Host "Unable to register apps. Error is $message." -ForegroundColor White -BackgroundColor Red -} -Write-Host "Disconnecting from tenant" -Disconnect-MgGraph \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json b/1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json deleted file mode 100644 index 11d37e6..0000000 --- a/1-Authentication/2-sign-in-b2c/AppCreationScripts/sample.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "Sample": { - "Title": "A Node.js & Express web app authenticating users against Azure AD B2C with MSAL Node", - "Level": 100, - "Client": "Node.js & Express web app", - "RepositoryUrl": "ms-identity-javascript-nodejs-tutorial", - "Endpoint": "AAD v2.0", - "Provider": "B2C" - }, - "AADApps": [ - { - "Id": "client", - "Name": "msal-node-webapp", - "Kind": "WebApp", - "Audience": "AzureADandPersonalMicrosoftAccount", - "HomePage": "http://localhost:4000", - "ReplyUrls": "http://localhost:4000/redirect", - "PasswordCredentials": "Auto", - "Certificate": "Auto", - "Sdk": "MsalNode", - "SampleSubPath": "1-Authentication\\2-sign-in-b2c\\App" - } - ], - "CodeConfiguration": [ - { - "App": "client", - "SettingKind": "Replace", - "SettingFile": "\\..\\App\\authConfig.js", - "Mappings": [ - { - "key": "Enter_the_Application_Id_Here", - "value": ".AppId" - }, - { - "key": "Enter_the_Tenant_Info_Here", - "value": "$tenantId" - }, - { - "key": "Enter_the_Client_Secret_Here", - "value": ".AppKey" - } - ] - } - ] -} \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/README-use-certificate.md b/1-Authentication/2-sign-in-b2c/README-use-certificate.md deleted file mode 100644 index 28bc87e..0000000 --- a/1-Authentication/2-sign-in-b2c/README-use-certificate.md +++ /dev/null @@ -1,298 +0,0 @@ - -# How to use certificates instead of secrets in your application(s) - -Microsoft identity platform supports two types of authentication for [confidential client applications](https://learn.microsoft.com/azure/active-directory/develop/msal-client-applications): password-based authentication (i.e. client secret) and certificate-based authentication. For a higher level of security, we recommend using a certificate (instead of a client secret) as a credential in your confidential client applications. - -In production, you should purchase a certificate signed by a well-known certificate authority, and use [Azure Key Vault](https://azure.microsoft.com/services/key-vault/) to manage certificate access and lifetime for you. For testing purposes, follow the steps below to create a self-signed certificate and configure your apps to authenticate with certificates. - -## Using certificates - -
-:information_source: Expand this to use automation - -> :warning: Make sure you have OpenSSL installed on your machine. After installation, you may need to start a new command line instance for the `openssl` command to be available on system path. -> -> ```console -> choco install openssl -> ``` - -Alternatively, download and build **OpenSSL** for your **OS** following the guide at [github.com/openssl](https://github.com/openssl/openssl#build-and-install). If you like to skip building and get a binary distributable from the community instead, check the [OpenSSL Wiki: Binaries](https://wiki.openssl.org/index.php/Binaries) page. - -1. While inside *AppCreationScripts* folder, open a terminal. - -2. Run the [Cleanup-withCertCertificates.ps1](./Cleanup-withCertCertificates.ps1) script to delete any existing app registrations and certificates for the sample. - -```console - .\Cleanup-withCertCertificates.ps1 -``` - -3. Run the [Configure-withCertCertificates.ps1](./Configure-withCertCertificates.ps1) script to re-create the App Registration. The script will also create `.pfx` file(s) (e.g. `msal-node-webapp.pfx`) that you can upload to Key Vault later. When asked about a password, do remember it - you will need the password when uploading the certificate. - -```console - .\Configure-withCertCertificates.ps1 -``` - -4. Proceed to [step 3](#configure-your-apps-to-use-a-certificate) to configure application settings. - -
- -- **Step 1: [Create a self-signed certificate](#create-a-self-signed-certificate)** - - Option 1: [create self-signed certificate on local machine](#create-self-signed-certificate-on-local-machine) - - Option 2: [create self-signed certificate on Key Vault](#create-self-signed-certificate-on-key-vault) -- **Step 2: [Configure an Azure AD app registration to use a certificate](#configure-an-azure-ad-app-registration-to-use-a-certificate)** -- **Step 3: [Configure your app(s) to use a certificate](#configure-your-apps-to-use-a-certificate)** - - Option 1: [using an existing certificate from local machine](#using-an-existing-certificate-from-local-machine) - - Option 2: [using an existing certificate from Key Vault](#using-an-existing-certificate-from-key-vault) - -If you plan to deploy your app(s) to [Azure App Service](https://learn.microsoft.com/azure/app-service/overview) afterwards, we recommend [Azure Managed Identity](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview) to completely eliminate secrets, certificates, connection strings and etc. from your source code. See [Using Managed Identity](#using-managed-identity) below for more. - -### Create a self-signed certificate - -You can skip this step if you already have a valid self-signed certificate at hand. - -#### Create self-signed certificate on local machine - -If you wish to generate a new self-signed certificate yourself, follow the steps below. -
-Click here to use OpenSSL - -Download and build **OpenSSL** for your **OS** following the guide at [github.com/openssl](https://github.com/openssl/openssl#build-and-install). If you like to skip building and get a binary distributable from the community instead, check the [OpenSSL Wiki: Binaries](https://wiki.openssl.org/index.php/Binaries) page. Afterwards, add the path to **OpenSSL** to your **environment variables** so that you can call it from anywhere. - -Type the following in a terminal. The files will be generated in the terminals current directory. - -```bash -openssl req -x509 -newkey rsa:2048 -keyout msal-node-webapp.key -out msal-node-webapp.cer -subj "/CN=msal-node-webapp" -nodes - -Generating a RSA private key -......................................................... -writing new private key to 'msal-node-webapp.key' -``` - -The following files should be generated: *msal-node-webapp.key*, *msal-node-webapp.cer* - -If you need, you can generate a msal-node-webapp.pfx (certificate + private key combination) with the command below: - -```bash -openssl pkcs12 -export -out CertificateName.pfx -inkey msal-node-webapp.key -in msal-node-webapp.cer -``` - -Enter an export password when prompted and make a note of it. The following file should be generated: *msal-node-webapp.pfx*. - -Proceed to [Step 2](#configure-an-azure-ad-app-registration-to-use-a-certificate). - -
- -> :information_source: If you wish so, you can upload your locally generated self-signed certificate to Azure Key Vault later on. See: [Import a certificate in Azure Key Vault](https://learn.microsoft.com/azure/key-vault/certificates/tutorial-import-certificate) - -#### Create self-signed certificate on Key Vault - -You can use Azure Key Vault to generate a self-signed certificate for you. Doing so will have the additional benefits of assigning a partner Certificate Authority (CA) and automating certificate rotation. - -> :information_source: Azure Key Vault can export certificates and private keys in `pem` format (see: [Export stored certificates](https://docs.microsoft.com/azure/key-vault/certificates/how-to-export-certificate?tabs=azure-cli#export-stored-certificates)), if **Content Type** was chosen as `pem` during certificate generation (see: [Create a certificate in Key Vault](https://docs.microsoft.com/azure/key-vault/certificates/tutorial-rotate-certificates#create-a-certificate-in-key-vault)). If for some reason this is not the case, OpenSSL can be used for conversions. -> -> ```console -> cat msal-node-webapp.crt msal-node-webapp.key > msal-node-webapp.pem ## if powershell: Get-Content msal-node-webapp.crt, msal-node-webapp.key | Set-Content msal-node-webapp.pem -> openssl pkcs12 -in msal-node-webapp.pfx -out msal-node-webapp.pem -> ``` - -
-Click here to use Azure Portal - -Follow the guide: [Set and retrieve a certificate from Azure Key Vault using the Azure portal](https://learn.microsoft.com/azure/key-vault/certificates/quick-create-portal) - -Afterwards, proceed to [Step 2](#configure-an-azure-ad-app-registration-to-use-a-certificate). - -
- -
-Click here to use Powershell - -Follow the guide: [Set and retrieve a certificate from Azure Key Vault using Azure PowerShell](https://learn.microsoft.com/azure/key-vault/certificates/quick-create-powershell) - -Afterwards, proceed to [Step 2](#configure-an-azure-ad-app-registration-to-use-a-certificate). - -
- -### Configure an Azure AD app registration to use a certificate - -Now you must associate your Azure AD app registration with the certificate you will use in your application. - -> :information_source: If you have the certificate locally available, you can follow the steps below. If your certificate(s) is on Azure Key Vault, you must first export and download them to your computer, and delete the local copy after following the steps below. See: [Export certificates from Azure Key Vault](https://learn.microsoft.com/azure/key-vault/certificates/how-to-export-certificate) - -1. Navigate to [Azure portal](https://portal.azure.com) and select your Azure AD app registration. -1. Select **Certificates & secrets** blade on the left. -1. Click on **Upload** certificate and select the certificate file to upload (e.g. *msal-node-webapp*). -1. Click **Add**. Once the certificate is uploaded, the *thumbprint*, *start date*, and *expiration* values are displayed. Record the *thumbprint* value as you will make use of it later in your app's configuration file. - -> For more information, see: [Register your certificate with the Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials#register-your-certificate-with-microsoft-identity-platform) - -Proceed to [Step 3](#configure-your-apps-to-use-a-certificate) - -### Configure your app(s) to use a certificate - -Finally, you need to modify the app's configuration files. - -#### Using an existing certificate from local machine - -> Perform the steps below for the client app (msal-node-webapp) - -1. Open the file where MSAL is initialized (e.g. `1-Authentication\1-sign-in\App\app.js`). -2. *Comment out* the line for `clientSecret`: - -```javaScript - const authConfig = { - auth: { - clientId: "YOUR_CLIENT_ID", - authority: "https://login.microsoftonline.com/YOUR_TENANT_ID", - //clientSecret: "YOUR_CLIENT_SECRET" - } - }; -``` - -3. *Un-comment* the lines for `clientCertificate` and replace the default values: - -```javaScript - const fs = require('fs'); // import the fs module for reading the key file - - const authConfig = { - auth: { - clientId: "YOUR_CLIENT_ID", - authority: "https://login.microsoftonline.com/YOUR_TENANT_ID", - //clientSecret: "YOUR_CLIENT_SECRET" - clientCertificate: { - thumbprint: "YOUR_CERT_THUMBPRINT", // replace with thumbprint obtained during step 2 above - privateKey: fs.readFileSync('PATH_TO_YOUR_PRIVATE_KEY_FILE'), // e.g. c:/Users/diego/Desktop/example.key - } - } - }; -``` - -> :information_source: For more details, see: [initializing-msal-node-with-certificates](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/certificate-credentials.md#initializing-msal-node-with-certificates) - -You can now start the application as instructed in the [README](./README). - -#### Using an existing certificate from Key Vault - -> Perform the steps below for the client app (msal-node-webapp) - -1. Open the file where MSAL is initialized (e.g. `1-Authentication\1-sign-in\App\app.js`). -2. *Comment out* the line for `clientSecret`: - -```javaScript - const authConfig = { - auth: { - clientId: "YOUR_CLIENT_ID", - authority: "https://login.microsoftonline.com/YOUR_TENANT_ID", - //clientSecret: "YOUR_CLIENT_SECRET" - } - }; -``` - -3. Install **[Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli)**. Then, type the following to sign-in: - -```console - az login --tenant YOUR_TENANT_ID -``` - -4. Install the required NPM packages: - -```console - npm install --save @azure/identity @azure/keyvault-certificates @azure/keyvault-secrets -``` - -5. Update the code as shown below: - -```javaScript - const identity = require("@azure/identity"); - const keyvaultCert = require("@azure/keyvault-certificates"); - const keyvaultSecret = require('@azure/keyvault-secrets'); - - const KV_URL = process.env["KEY_VAULT_URL"] || "ENTER_YOUR_KEY_VAULT_URL" - const CERTIFICATE_NAME = process.env["CERTIFICATE_NAME"] || "ENTER_THE_NAME_OF_YOUR_CERTIFICATE_ON_KEY_VAULT"; - - // Initialize Azure SDKs - const credential = new identity.DefaultAzureCredential(); - const certClient = new keyvaultCert.CertificateClient(KV_URL, credential); - const secretClient = new keyvaultSecret.SecretClient(KV_URL, credential); - - async function main() { - - // Grab the certificate thumbprint - const certResponse = await certClient.getCertificate(CERTIFICATE_NAME).catch(err => console.log(err)); - const thumbprint = certResponse.properties.x509Thumbprint.toString('hex') - - // When you upload a certificate to Key Vault, a secret containing your private key is automatically created - const secretResponse = await secretClient.getSecret(CERTIFICATE_NAME).catch(err => console.log(err));; - - // secretResponse contains both public and private key, but we only need the private key - const privateKey = secretResponse.value.split('-----BEGIN CERTIFICATE-----\n')[0] - - const authConfig = { - auth: { - clientId: "YOUR_CLIENT_ID", - authority: "https://login.microsoftonline.com/YOUR_TENANT_ID", - //clientSecret: "YOUR_CLIENT_SECRET", - clientCertificate: { - thumbprint: thumbprint - privateKey: privateKey - } - } - }; - - // Pass config object to msal-node... - } - - main(); -``` - -> :information_source: For more details, see: [Get certificate from your Key Vault in Node.js](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/docs/key-vault-managed-identity.md#get-certificate-from-your-vault-in-nodejs) - -You can now start the application as instructed in the [README](./README). - -## Using Managed Identity - -Once you deploy your app(s) to Azure App Service, you can assign a managed identity to it for accessing Azure Key Vault using its own identity. This allows you to eliminate the all secrets, certificates, connection strings and etc. from your source code. - -### Create a system-assigned identity - -1. Navigate to [Azure portal](https://portal.azure.com) and select the **Azure App Service**. -1. Find and select the App Service instance you've created previously. -1. On App Service portal, select **Identity**. -1. Within the **System assigned** tab, switch **Status** to **On**. Click **Save**. - -For more information, see [Add a system-assigned identity](https://docs.microsoft.com/azure/app-service/overview-managed-identity?tabs=dotnet#add-a-system-assigned-identity) - -### Grant access to Key Vault - -Now that your app deployed to App Service has a managed identity, in this step you grant it access to your key vault. - -1. Go to the [Azure portal](https://portal.azure.com) and search for your Key Vault. -1. Select **Overview** > **Access policies** blade on the left. -1. Click on **Add Access Policy** > **Certificate permissions** > **Get** -1. Click on **Add Access Policy** > **Secret permissions** > **Get** -1. Click on **Select Principal**, add your account and pre-created **system-assigned** identity. -1. Click on **OK** to add the new Access Policy, then click **Save** to save the Access Policy. - -For more information, see [Use Key Vault from App Service with Azure Managed Identity](https://docs.microsoft.com/samples/azure-samples/app-service-msi-keyvault-dotnet/keyvault-msi-appservice-sample/) - -### Add environment variables - -Finally, you need to add environment variables to the App Service where you deployed your app. - -> :warning: Make sure your application is able to read environment variables. Alternatively, you can hardcode the key vault URL and certificate name in your applications configuration file. - -1. In the [Azure portal](https://portal.azure.com), search for and select **App Service**, and then select your app. -1. Select **Configuration** blade on the left, then select **New Application Settings**. -1. Add the following variables (key-value pairs): - 1. **KEY_VAULT_URL**: the URL of the key vault you've created, e.g. `https://example.vault.azure.net` - 1. **CERTIFICATE_NAME**: the name of the certificate you specified when importing it to key vault, e.g. `ExampleCert` - -Wait for a few minutes for your changes on **App Service** to take effect. You should then be able to visit your published website and sign-in accordingly. - -## More information - -- [Microsoft identity platform application authentication certificate credentials](https://docs.microsoft.com/azure/active-directory/develop/active-directory-certificate-credentials) -- [Create a self-signed public certificate to authenticate your application](https://docs.microsoft.com/azure/active-directory/develop/howto-create-self-signed-certificate) -- [Various SSL/TLS certificate file types/extensions](https://docs.microsoft.com/archive/blogs/kaushal/various-ssltls-certificate-file-typesextensions) -- [Azure Key Vault Developer's Guide](https://docs.microsoft.com/azure/key-vault/general/developers-guide) -- [Managed identities for Azure resources](https://docs.microsoft.com/azure/active-directory/managed-identities-azure-resources/overview) diff --git a/1-Authentication/2-sign-in-b2c/README.md b/1-Authentication/2-sign-in-b2c/README.md deleted file mode 100644 index dc9a9b2..0000000 --- a/1-Authentication/2-sign-in-b2c/README.md +++ /dev/null @@ -1,169 +0,0 @@ -# A Node.js & Express web app authenticating users against Azure AD B2C with MSAL Node - - 1. [Overview](#overview) - 1. [Scenario](#scenario) - 1. [Contents](#contents) - 1. [Prerequisites](#prerequisites) - 1. [Setup](#setup) - 1. [Registration](#registration) - 1. [Running the sample](#running-the-sample) - 1. [Explore the sample](#explore-the-sample) - 1. [More information](#more-information) - 1. [Community Help and Support](#community-help-and-support) - 1. [Contributing](#contributing) - -## Overview - -This sample demonstrates a Node.js & Express web application that authenticates users against Azure AD B2C, with the help of [Microsoft Authentication Library for Node.js](https://aka.ms/msalnode) (MSAL Node). In doing so, it illustrates authentication concepts such as [OpenID scopes](https://docs.microsoft.com/azure/active-directory/develop/v2-permissions-and-consent#openid-connect-scopes), [ID Tokens](https://docs.microsoft.com/azure/active-directory-b2c/openid-connect), [ID Token validation](https://docs.microsoft.com/azure/active-directory-b2c/openid-connect#validate-the-id-token), [user-flows](https://docs.microsoft.com/azure/active-directory-b2c/user-flow-overview) and more. - -## Scenario - -1. The client application uses **MSAL Node** (via [msal-node-wrapper](https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial/tree/main/Common/msal-node-wrapper)) to obtain an ID Token from **Azure AD B2C**. -2. The **ID Token** proves that the user has successfully authenticated against **Azure AD B2C**. - -![Overview](./ReadmeFiles/topology.png) - -## Contents - -| File/folder | Description | -|-----------------------------|---------------------------------------------------------------| -| `AppCreationScripts/` | Contains Powershell scripts to automate app registration. | -| `ReadmeFiles/` | Contains illustrations and screenshots. | -| `App/authConfig.js` | Authentication parameters and settings | -| `App/app.js` | Application entry point. | - -## Prerequisites - -- [Node.js](https://nodejs.org/en/download/) must be installed to run this sample. -- [Visual Studio Code](https://code.visualstudio.com/download) is recommended for running and editing this sample. -- A modern web browser. This sample uses **ES6** conventions and will not run on **Internet Explorer**. -- An **Azure AD B2C** tenant. For more information see: [How to get an Azure AD B2C tenant](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-tenant) -- A user account in your **Azure AD B2C** tenant. - -## Setup - -### Step 1: Clone or download this repository - -From your shell or command line: - -```console - git clone https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial.git -``` - -or download and extract the repository .zip file. - -> :warning: To avoid path length limitations on Windows, we recommend cloning into a directory near the root of your drive. - -### Step 2: Install project dependencies - -Locate the root of the sample folder. Then: - -```console - cd 1-Authentication\2-sign-in-b2c\App - npm install -``` - -## Registration - -### Choose the Azure AD tenant where you want to create your applications - -1. Sign in to the [Azure portal](https://portal.azure.com). -1. If your account is present in more than one Azure AD B2C tenant, select your profile at the top right corner in the menu on top of the page, and then **switch directory** to change your portal session to the desired Azure AD B2C tenant. - -### Create User Flows - -Please refer to: [Tutorial: Create user flows in Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-create-user-flows) - -### Add External Identity Providers - -Please refer to: [Tutorial: Add identity providers to your applications in Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/tutorial-add-identity-providers) - -### Register the client app (msal-node-webapp) - -1. Navigate to the [Azure portal](https://portal.azure.com) and select the **Azure AD B2C** service. -1. Select the **App Registrations** blade on the left, then select **New registration**. -1. In the **Register an application page** that appears, enter your application's registration information: - - In the **Name** section, enter a meaningful application name that will be displayed to users of the app, for example `msal-node-webapp`. - - Under **Supported account types**, select **Accounts in any identity provider or organizational directory (for authenticating users with user flows)**. - - In the **Redirect URI (optional)** section, select **Web** in the combo-box and enter the following redirect URI: `http://localhost:4000/redirect`. -1. Select **Register** to create the application. -1. In the app's registration screen, find and note the **Application (client) ID**. You use this value in your app's configuration file(s) later in your code. -1. Select **Save** to save your changes. -1. In the app's registration screen, select the **Certificates & secrets** blade in the left to open the page where you can generate secrets and upload certificates. -1. In the **Client secrets** section, select **New client secret**: - - Type a key description (for instance `app secret`), - - Select one of the available key durations (**6 months**, **12 months** or **Custom**) as per your security posture. - - The generated key value will be displayed when you select the **Add** button. Copy and save the generated value for use in later steps. - - You'll need this key later in your code's configuration files. This key value will not be displayed again, and is not retrievable by any other means, so make sure to note it from the Azure portal before navigating to any other screen or blade. - > :warning: For enhanced security, consider using **certificates** instead of client secrets. See: [How to use certificates instead of secrets](./README-use-certificate.md). - -#### Configure the client app (msal-node-webapp) to use your app registration - -Open the project in your IDE (like Visual Studio or Visual Studio Code) to configure the code. - -> In the steps below, "ClientID" is the same as "Application ID" or "AppId". - -1. Open the `App/authConfig.js` file. -1. Find the key `clientId` and replace the existing value with the application ID (clientId) of `msal-node-webapp` app copied from the Azure portal. -1. Find the key `authority` and replace it with the authority string of your policies/user-flows, e.g. `https://fabrikamb2c.b2clogin.com/fabrikamb2c.onmicrosoft.com/b2c_1_susi`. -1. Find the key `clientSecret` and replace the existing value with the key you saved during the creation of `msal-node-webapp` copied from the Azure portal. -1. Find the key `redirectUri` and replace the existing value with the Redirect URI for `msal-node-webapp`. (by default `http://localhost:4000/redirect`). - -> :information_source: For `redirectUri`, you can simply enter the path component of the URI instead of the full URI. For example, instead of `http://localhost:4000/redirect`, you can simply enter `/redirect`. This may come in handy in deployment scenarios. - -1. Open the `App/app.js` file. -1. Find the string `ENTER_YOUR_SECRET_HERE` and replace it with a secret that will be used when encrypting your app's session using the [express-session](https://www.npmjs.com/package/express-session) package. - -## Running the sample - -Locate the root of the sample folder. Then: - -```console - npm start -``` - -## Explore the sample - -1. Open your browser and navigate to `http://localhost:4000`. -1. Click the **sign-in** button on the top right corner. -1. Once signed in, select the **ID** button to see some of the claims in your ID token. - -![Screenshot](./ReadmeFiles/screenshot.png) - -> :information_source: Did the sample not work for you as expected? Then please reach out to us using the [GitHub Issues](../../../../issues) page. - -## We'd love your feedback! - -Were we successful in addressing your learning objective? Consider taking a moment to [share your experience with us](https://forms.office.com/Pages/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR73pcsbpbxNJuZCMKN0lURpUQkRCSVdRSk8wUjdZSkg2NEZGOFFaTkxQVyQlQCN0PWcu). - -## More information - -- [What is Azure Active Directory B2C?](https://docs.microsoft.com/azure/active-directory-b2c/overview) -- [Application types that can be used in Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/application-types) -- [Recommendations and best practices for Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/best-practices) -- [Azure AD B2C session](https://docs.microsoft.com/azure/active-directory-b2c/session-overview) -- [Initialize client applications using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-initializing-client-applications) -- [Single sign-on with MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-sso) -- [Handle MSAL.js exceptions and errors](https://docs.microsoft.com/azure/active-directory/develop/msal-handling-exceptions?tabs=javascript) -- [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) -- [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) -- [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) -- [Use MSAL.js to work with Azure AD B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) - -For more information about how OAuth 2.0 protocols work in this scenario and other scenarios, see [Authentication Scenarios for Azure AD](https://docs.microsoft.com/azure/active-directory/develop/authentication-flows-app-scenarios). - -## Community Help and Support - -Use [Stack Overflow](http://stackoverflow.com/questions/tagged/msal) to get support from the community. -Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`azure-active-directory` `azure-ad-b2c` `ms-identity` `adal` `msal`]. - -If you find a bug in the sample, raise the issue on [GitHub Issues](../../../../issues). - -To provide feedback on or suggest features for Azure Active Directory, visit [User Voice page](https://feedback.azure.com/forums/169401-azure-active-directory). - -## Contributing - -If you'd like to contribute to this sample, see [CONTRIBUTING.MD](/CONTRIBUTING.md). - -This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information, see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. \ No newline at end of file diff --git a/1-Authentication/2-sign-in-b2c/ReadmeFiles/screenshot.png b/1-Authentication/2-sign-in-b2c/ReadmeFiles/screenshot.png deleted file mode 100644 index 7c8ad8aa0ffaff05b78c6c5c3d78639440719aba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15585 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ⅇq$_vg-r2Qd-u}uPsJ(E*NE5DG%Np2PpvV; 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 ZO&pf*o7;@y()rg+20A9%HCoT#{a;y+B|`uJ diff --git a/1-Authentication/2-sign-in-b2c/ReadmeFiles/topology.png b/1-Authentication/2-sign-in-b2c/ReadmeFiles/topology.png deleted file mode 100644 index b4ebd243043188c36f6267cd9c665db0dd966903..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 10174 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 [!IMPORTANT] +> This chapter is retained as a legacy prerequisite for the deployment and access-control chapters. For new applications that sign in users and call Microsoft Graph, use [ms-identity-node](https://github.com/Azure-Samples/ms-identity-node), which implements the same direct MSAL Node functionality without the tutorial wrapper. + 1. [Overview](#overview) 1. [Scenario](#scenario) 1. [Contents](#contents) diff --git a/3-Deployment/README.md b/3-Deployment/README.md index 319cccb..bb2b0a6 100644 --- a/3-Deployment/README.md +++ b/3-Deployment/README.md @@ -13,7 +13,7 @@ ## Overview -This sample demonstrates how to deploy a Node.js & Express web application to **Azure Cloud** using the [Azure App Service](https://docs.microsoft.com/azure/app-service/). The application used in this sample is a slightly modified version of the web app from [**chapter 2-1**](../2-Authorization/1-call-graph/README.md). The steps here apply similarly to Microsoft Entra ID and Azure Active Directory B2C apps. +This sample demonstrates how to deploy a Node.js & Express web application to **Azure Cloud** using the [Azure App Service](https://docs.microsoft.com/azure/app-service/). The application used in this sample is a slightly modified version of the web app from [**chapter 2-1**](../2-Authorization/1-call-graph/README.md). One of the principles of security is to place credentials like secrets and certificates out of your code and use it in a manner that allows them to be replaced or rotated without incurring a downtime. As such, this sample also uses the [Azure Key Vault](https://docs.microsoft.com/azure/key-vault/general/about-keys-secrets-certificates) to store client secrets safely on the cloud. diff --git a/5-AdvancedScenarios/1-call-graph-bff/README.md b/5-AdvancedScenarios/1-call-graph-bff/README.md index 0923051..95588f4 100644 --- a/5-AdvancedScenarios/1-call-graph-bff/README.md +++ b/5-AdvancedScenarios/1-call-graph-bff/README.md @@ -452,4 +452,3 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope * [Logging in MSAL.js applications](https://docs.microsoft.com/azure/active-directory/develop/msal-logging?tabs=javascript) * [Pass custom state in authentication requests using MSAL.js](https://docs.microsoft.com/azure/active-directory/develop/msal-js-pass-custom-state-authentication-request) * [Prompt behavior in MSAL.js interactive requests](https://docs.microsoft.com/azure/active-directory/develop/msal-js-prompt-behavior) -* [Use MSAL.js to work with Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory/develop/msal-b2c-overview) diff --git a/README.md b/README.md index 101b6e9..9909e77 100644 --- a/README.md +++ b/README.md @@ -11,7 +11,6 @@ products: - azure-key-vault - azure-resource-manager - microsoft-entra-id -- azure-active-directory-b2c - microsoft-identity-platform description: "Tutorial: Enable your Node.js & Express web app to sign-in users and call APIs with the Microsoft identity platform" urlFragment: "ms-identity-javascript-nodejs-tutorial" @@ -25,7 +24,7 @@ urlFragment: "ms-identity-javascript-nodejs-tutorial" ![npm](https://img.shields.io/npm/v/@azure/msal-node?label=msal-node) ![GitHub](https://img.shields.io/github/license/Azure-Samples/ms-identity-javascript-nodejs-tutorial) -The [Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/v2-overview), along with [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) (Microsoft Entra ID) and [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/overview) (Azure Active Directory B2C) are central to the **Azure** cloud ecosystem. This tutorial aims to take you through the fundamentals of modern authentication with Node.js, using the [Microsoft Authentication Library for Node.js](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL Node). +The [Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/v2-overview) and [Microsoft Entra ID](https://docs.microsoft.com/azure/active-directory/fundamentals/active-directory-whatis) are central to the **Azure** cloud ecosystem. This tutorial aims to take you through the fundamentals of modern authentication with Node.js, using the [Microsoft Authentication Library for Node.js](https://github.com/AzureAD/microsoft-authentication-library-for-js) (MSAL Node). This tutorial also features a simple wrapper around **MSAL Node** [ConfidentialClientApplication](https://github.com/AzureAD/microsoft-authentication-library-for-js/blob/dev/lib/msal-node/src/client/ConfidentialClientApplication.ts) class in order to streamline routine authentication tasks such as login, logout, token acquisition. You can find the wrapper here: [msal-node-wrapper](./Shared/msal-node-wrapper). Fork it and customize as you need. Suggestions and contributions are welcome! @@ -34,6 +33,8 @@ This tutorial also features a simple wrapper around **MSAL Node** [ConfidentialC > - [Express.js web app using MSAL Node to authenticate users with Microsoft Entra ID and call Microsoft Graph](https://github.com/Azure-Samples/ms-identity-node) > - [A React SPA on an Express.js web app using the Backend For Frontend (BFF) Proxy architecture to authenticate users with Microsoft Entra ID and call Microsoft Graph](https://github.com/Azure-Samples/ms-identity-javascript-nodejs-tutorial/tree/main/5-AdvancedScenarios/1-call-graph-bff) +For new basic sign-in and Microsoft Graph implementations, start with [ms-identity-node](https://github.com/Azure-Samples/ms-identity-node), which uses MSAL Node directly. Chapters 1 and 2 remain available as legacy, wrapper-based prerequisites for the deployment and access-control chapters in this tutorial. + We recommend following the chapters in successive order. However, the code samples are self-contained, so feel free to pick samples by topics that you may need at the moment. > :warning: This is a *work in progress*. Come back frequently to discover more samples. @@ -63,14 +64,13 @@ Please refer to each chapter's README for sample-specific recommendations. | | | |---------------|---------------| -| | [**Sign-in with Microsoft Entra ID**](./1-Authentication/1-sign-in/README.md)
Sign-in your users with **Microsoft Entra ID** and learn to work with **ID Tokens**. | -| | [**Sign-in with Azure Active Directory B2C**](./1-Authentication/2-sign-in-b2c/README.md)
Sign-in your customers with **Azure Active Directory B2C**. Learn to integrate with **external social identity providers**. Learn how to use **user-flows** and **custom policies**. | +| | [**Sign-in with Microsoft Entra ID (legacy tutorial prerequisite)**](./1-Authentication/1-sign-in/README.md)
Sign-in your users with **Microsoft Entra ID** and learn to work with **ID Tokens**. For new applications, use [ms-identity-node](https://github.com/Azure-Samples/ms-identity-node). | ### Chapter 2: Sign-in a user and get an Access Token for Microsoft Graph | | | |----------------|---------------| -| | [**Get an Access Token from Microsoft Entra ID and call Microsoft Graph**](./2-Authorization/1-call-graph/README.md)
Authenticate your users and acquire an **Access Token** for Microsoft Graph and then call the **Microsoft Graph API**. | +| | [**Get an Access Token from Microsoft Entra ID and call Microsoft Graph (legacy tutorial prerequisite)**](./2-Authorization/1-call-graph/README.md)
Authenticate your users and acquire an **Access Token** for Microsoft Graph. For new applications, use [ms-identity-node](https://github.com/Azure-Samples/ms-identity-node). | ### Chapter 3: Deploy your app to Azure @@ -100,7 +100,6 @@ Were we successful in addressing your learning objective? Consider taking a mome Learn more about the **Microsoft identity platform**: - [Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/) -- [Azure Active Directory B2C](https://docs.microsoft.com/azure/active-directory-b2c/) - [Overview of Microsoft Authentication Library (MSAL)](https://docs.microsoft.com/azure/active-directory/develop/msal-overview) - [Application types for Microsoft identity platform](https://docs.microsoft.com/azure/active-directory/develop/v2-app-types) - [Understanding Microsoft Entra application consent experiences](https://docs.microsoft.com/azure/active-directory/develop/application-consent-experience) @@ -111,13 +110,12 @@ Learn more about the **Microsoft identity platform**: See more code samples: - [MSAL code samples](https://docs.microsoft.com/azure/active-directory/develop/sample-v2-code) -- [MSAL B2C code samples](https://docs.microsoft.com/azure/active-directory-b2c/code-samples) ## Community Help and Support Use [Stack Overflow](http://stackovergrant.com/questions/tagged/msal) to get support from the community. Ask your questions on Stack Overflow first and browse existing issues to see if someone has asked your question before. -Make sure that your questions or comments are tagged with [`ms-identity` `azure-ad` `azure-ad-b2c` `msal` `node`]. +Make sure that your questions or comments are tagged with [`ms-identity` `azure-ad` `msal` `node`]. If you find a bug in the sample, please raise the issue on [GitHub Issues](../../issues).
ApplicationAppIdUrl in the Azure portal