├── .prettierignore ├── .lintstagedrc.yml ├── .gitignore ├── .husky ├── pre-push └── pre-commit ├── src ├── helpers │ ├── index.ts │ ├── kindeHelpers.ts │ ├── kindeHelpers.test.ts │ └── kindeMiddlewareHelpers.ts ├── types │ ├── aws-jwt-verify.d.ts │ └── express-session.d.ts ├── auth │ ├── index.ts │ ├── kindeAuthRouter.test.ts │ └── kindeAuthRouter.ts ├── setup │ ├── index.ts │ ├── kindeSetupTypes.ts │ ├── sessionManager.ts │ ├── kindeClient.test.ts │ └── kindeClient.ts ├── index.ts ├── utils.ts └── mocks.ts ├── renovate.json ├── SECURITY.md ├── CODEOWNERS ├── vitest.config.ts ├── .release-it.json ├── eslint.config.mjs ├── tsconfig.json ├── .github └── workflows │ ├── npm-publish.yml │ └── build-test-ci.yml ├── LICENSE ├── README.md ├── vite.config.ts ├── package.json ├── CHANGELOG.md └── pnpm-lock.yaml /.prettierignore: -------------------------------------------------------------------------------- 1 | pnpm-lock.yaml -------------------------------------------------------------------------------- /.lintstagedrc.yml: -------------------------------------------------------------------------------- 1 | "**/*.ts": 2 | - "npm run format" 3 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist 3 | dist-cjs 4 | .DS_Store 5 | coverage 6 | -------------------------------------------------------------------------------- /.husky/pre-push: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run test 5 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env sh 2 | . "$(dirname -- "$0")/_/husky.sh" 3 | 4 | npm run lint-staged 5 | -------------------------------------------------------------------------------- /src/helpers/index.ts: -------------------------------------------------------------------------------- 1 | export * from "./kindeHelpers.js"; 2 | export * from "./kindeMiddlewareHelpers.js"; 3 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:recommended"] 4 | } 5 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | Our security policy can be found here: https://kinde.com/docs/important-information/vulnerability-disclosure-policy 4 | -------------------------------------------------------------------------------- /CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @kinde-oss/giants-kinde 2 | package.json @kinde-oss/sdk-engineers 3 | **/package.json @kinde-oss/sdk-engineers 4 | pnpm-lock.yaml @kinde-oss/sdk-engineers 5 | **/pnpm-lock.yaml @kinde-oss/sdk-engineers 6 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | globals: true, 6 | environment: "node", 7 | include: ["**/?(*.)+(spec|test).ts"], 8 | coverage: { 9 | provider: "v8", 10 | reporter: ["text", "json", "html"], 11 | }, 12 | }, 13 | }); 14 | -------------------------------------------------------------------------------- /.release-it.json: -------------------------------------------------------------------------------- 1 | { 2 | "git": { 3 | "requireBranch": "main", 4 | "commitMessage": "chore: release v${version}" 5 | }, 6 | "hooks": { 7 | "before:init": ["git pull", "npm run lint"], 8 | "after:bump": "npx auto-changelog -p && npm run build" 9 | }, 10 | "github": { 11 | "release": true 12 | }, 13 | "npm": { 14 | "publish": true 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /src/types/aws-jwt-verify.d.ts: -------------------------------------------------------------------------------- 1 | declare module "aws-jwt-verify" { 2 | type VerifierOptions = { 3 | issuer: string; 4 | audience: string | null; 5 | jwksUri: string; 6 | }; 7 | 8 | type Verifier = { 9 | verify(token?: string): Promise<{ sub: string }>; 10 | }; 11 | 12 | const JwtRsaVerifier: { 13 | create(options: VerifierOptions): Verifier; 14 | }; 15 | 16 | export { JwtRsaVerifier }; 17 | } 18 | -------------------------------------------------------------------------------- /src/auth/index.ts: -------------------------------------------------------------------------------- 1 | import { getAuthRouter } from "./kindeAuthRouter.js"; 2 | import type { Express } from "express"; 3 | 4 | export { validateQueryParams } from "./kindeAuthRouter.js"; 5 | 6 | /** 7 | * Attaches auth router to provided express instance. 8 | * 9 | * @param {Express} app 10 | * @param {string} route base route for auth router 11 | */ 12 | export const setupAuthRouter = (app: Express, route: string): void => { 13 | app.use(route, getAuthRouter()); 14 | }; 15 | -------------------------------------------------------------------------------- /eslint.config.mjs: -------------------------------------------------------------------------------- 1 | import globals from "globals"; 2 | import pluginJs from "@eslint/js"; 3 | import tseslint from "typescript-eslint"; 4 | import { defineConfig, globalIgnores } from "eslint/config"; 5 | 6 | export default defineConfig([ 7 | { languageOptions: { globals: globals.browser } }, 8 | globalIgnores([ 9 | "dist", 10 | "node_modules", 11 | "lib/coverage/**", 12 | "**/*.test.ts", 13 | "**/*.spec.ts", 14 | ]), 15 | pluginJs.configs.recommended, 16 | ...tseslint.configs.recommended, 17 | ]); 18 | -------------------------------------------------------------------------------- /src/types/express-session.d.ts: -------------------------------------------------------------------------------- 1 | import type { SessionData } from "express-session"; 2 | import type { SessionManager, UserType } from "@kinde-oss/kinde-typescript-sdk"; 3 | 4 | declare module "express-session" { 5 | interface SessionData { 6 | [key: string]: unknown; 7 | } 8 | } 9 | 10 | declare global { 11 | namespace Express { 12 | export interface Request extends SessionManager { 13 | user?: UserType; 14 | session: Session & Partial; 15 | sessionID: string; 16 | } 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "module": "NodeNext", 5 | "moduleResolution": "NodeNext", 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "declaration": true, 9 | "declarationDir": "dist/types", 10 | "outDir": "dist", 11 | "allowSyntheticDefaultImports": true, 12 | "skipLibCheck": true, 13 | "resolveJsonModule": true 14 | }, 15 | "include": ["src"], 16 | "exclude": ["node_modules", "dist", "**/*.test.ts"] 17 | } 18 | -------------------------------------------------------------------------------- /src/setup/index.ts: -------------------------------------------------------------------------------- 1 | import { setupKindeSession } from "./sessionManager.js"; 2 | import { setupInternalClient as setupKindeClient } from "./kindeClient.js"; 3 | import type { GrantType } from "@kinde-oss/kinde-typescript-sdk"; 4 | import type { SetupConfig } from "./kindeSetupTypes.js"; 5 | import type { Express } from "express"; 6 | 7 | export { getInternalClient, getInitialConfig } from "./kindeClient.js"; 8 | export * from "./kindeSetupTypes.js"; 9 | 10 | /** 11 | * Encapsulates Kinde setup of creatint creating internal TypeScript SDK 12 | * client, setting up its session manager interface and attaching session 13 | * manager to provided express instance. 14 | * 15 | * @param {Express} app 16 | * @param {SetupConfig} config 17 | */ 18 | export const setupInternalClient = ( 19 | app: Express, 20 | config: SetupConfig, 21 | ): void => { 22 | setupKindeSession(app); 23 | setupKindeClient(config); 24 | }; 25 | -------------------------------------------------------------------------------- /src/helpers/kindeHelpers.ts: -------------------------------------------------------------------------------- 1 | import type { ACClient } from "@kinde-oss/kinde-typescript-sdk"; 2 | import type { Request, Response, NextFunction } from "express"; 3 | import { validateQueryParams } from "../auth/index.js"; 4 | import { getInternalClient } from "../setup/index.js"; 5 | 6 | /** 7 | * Function uses internal SDK to return registration url with the `is_create_org` 8 | * query param set to true. 9 | * 10 | * @param {Request} req 11 | * @param {Response} res 12 | * @param {NextFunction} next 13 | * @returns {Promise} 14 | */ 15 | export const createOrg = async ( 16 | req: Request, 17 | res: Response, 18 | next: NextFunction, 19 | ): Promise => { 20 | const error = validateQueryParams(req.query); 21 | if (error !== null) { 22 | res.status(400); 23 | return next(error); 24 | } 25 | 26 | const { createOrg } = getInternalClient() as ACClient; 27 | const createOrgURL = await createOrg(req, req.query); 28 | res.redirect(createOrgURL.toString()); 29 | }; 30 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will run tests using node and then publish a package to GitHub Packages when a release is created 2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/publishing-nodejs-packages 3 | 4 | name: Node.js Package 5 | 6 | on: 7 | release: 8 | types: [created] 9 | 10 | jobs: 11 | build: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | - uses: actions/setup-node@v4 16 | with: 17 | node-version: 16 18 | - run: npm ci 19 | - run: npm test 20 | 21 | publish-npm: 22 | needs: build 23 | runs-on: ubuntu-latest 24 | steps: 25 | - uses: actions/checkout@v4 26 | - uses: actions/setup-node@v4 27 | with: 28 | node-version: 16 29 | registry-url: https://registry.npmjs.org/ 30 | - run: npm ci 31 | - run: npm publish 32 | env: 33 | NODE_AUTH_TOKEN: ${{secrets.npm_token}} 34 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { 2 | type SetupConfig, 3 | getInternalClient, 4 | setupInternalClient, 5 | } from "./setup/index.js"; 6 | import { setupAuthRouter } from "./auth/index.js"; 7 | import type { Express } from "express"; 8 | import { jwtVerify } from "./helpers/kindeMiddlewareHelpers.js"; 9 | 10 | import { 11 | managementApi, 12 | GrantType, 13 | Configuration, 14 | } from "@kinde-oss/kinde-typescript-sdk"; 15 | 16 | export * from "./helpers/index.js"; 17 | export { managementApi, GrantType, Configuration, jwtVerify }; 18 | 19 | /** 20 | * Encapsulates Kinde setup by completing creating internal TypeScript SDK 21 | * client, setting up its session manager interface and attaching auth router 22 | * to provided express instance. 23 | * 24 | * @param {Express} app 25 | * @param {SetupConfig} config 26 | */ 27 | export const setupKinde = ( 28 | config: SetupConfig, 29 | app: Express, 30 | ) => { 31 | setupInternalClient(app, config); 32 | setupAuthRouter(app, "/"); 33 | return getInternalClient(); 34 | }; 35 | -------------------------------------------------------------------------------- /.github/workflows/build-test-ci.yml: -------------------------------------------------------------------------------- 1 | name: Build and test 2 | 3 | on: 4 | push: 5 | branches: [main] 6 | pull_request: 7 | branches: [main] 8 | 9 | jobs: 10 | main: 11 | runs-on: ubuntu-latest 12 | strategy: 13 | matrix: 14 | node-version: [20.x] 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: pnpm/action-setup@v4 18 | with: 19 | version: 10 20 | - name: Setting up Node.js ${{ matrix.node-version }} 21 | uses: actions/setup-node@v4 22 | with: 23 | node-version: ${{ matrix.node-version }} 24 | cache: "pnpm" 25 | - name: Enabling pre-post scripts 26 | run: pnpm config set enable-pre-post-scripts true 27 | - run: pnpm install 28 | - run: pnpm lint 29 | - name: Cache pnpm modules 30 | uses: actions/cache@v4 31 | with: 32 | path: ~/.pnpm-store 33 | key: ${{ runner.os }}-pnpm-${{ hashFiles('**/pnpm-lock.yaml') }} 34 | restore-keys: | 35 | ${{ runner.os }}-pnpm- 36 | - run: pnpm build 37 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Kinde 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. -------------------------------------------------------------------------------- /src/utils.ts: -------------------------------------------------------------------------------- 1 | import crypto from "crypto"; 2 | import type { Request, Response, NextFunction } from "express"; 3 | 4 | /** 5 | * @typedef {Function} ExpressMiddleware 6 | * @description This middleware logs information about the incoming request. 7 | * @param {Request} req - The Express request object. 8 | * @param {Response} res - The Express response object. 9 | * @param {NextFunction} next - The next middleware function in the stack. 10 | * @returns {T} 11 | */ 12 | 13 | export type ExpressMiddleware = ( 14 | req: Request, 15 | res: Response, 16 | next: NextFunction, 17 | ) => T; 18 | 19 | /** 20 | * Returns a randomly generated string, utilised for producing secret used for 21 | * singing session cookie. 22 | * 23 | * @returns {string} 24 | */ 25 | export const randomString = (): string => { 26 | return crypto.randomBytes(28).toString("hex"); 27 | }; 28 | 29 | /** 30 | * Returns the complete URL including host and any query parameters corresponding 31 | * to the provided request instance. 32 | * 33 | * @param {Request} req 34 | * @returns {URL} 35 | */ 36 | export const getRequestURL = (req: Request): URL => { 37 | const host = req.get("host"); 38 | return new URL(`${req.protocol}://${host}${req.originalUrl}`); 39 | }; 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Kinde ExpressJS SDK 2 | 3 | The Kinde SDK for ExpressJS. 4 | 5 | You can also use the ExpressJS starter kit [here](https://github.com/kinde-starter-kits/expressjs-starter-kit). 6 | 7 | [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](https://makeapullrequest.com) [![Kinde Docs](https://img.shields.io/badge/Kinde-Docs-eee?style=flat-square)](https://kinde.com/docs/developer-tools) [![Kinde Community](https://img.shields.io/badge/Kinde-Community-eee?style=flat-square)](https://thekindecommunity.slack.com) 8 | 9 | ## Requirements 10 | 11 | Please note that this SDK requires that your Node version to be `>=19.x.x`. 12 | 13 | ## Documentation 14 | 15 | For details on integrating this SDK into your project, head over to the [Kinde docs](https://kinde.com/docs/) and see the [ExpressJS SDK](https://kinde.com/docs/developer-tools/express-sdk). 16 | 17 | ## Publishing 18 | 19 | The core team handles publishing. 20 | 21 | ## Contributing 22 | 23 | Please refer to Kinde’s [contributing guidelines](https://github.com/kinde-oss/.github/blob/489e2ca9c3307c2b2e098a885e22f2239116394a/CONTRIBUTING.md). 24 | 25 | ## License 26 | 27 | By contributing to Kinde, you agree that your contributions will be licensed under its MIT License. 28 | -------------------------------------------------------------------------------- /src/mocks.ts: -------------------------------------------------------------------------------- 1 | import { GrantType, setupKinde } from "./index.js"; 2 | import express from "express"; 3 | 4 | export const mockClientConfig = { 5 | clientId: "mockclientid", 6 | secret: "mockclientsecret", 7 | grantType: GrantType.AUTHORIZATION_CODE, 8 | issuerBaseUrl: "https://mockdomain.kinde.com", 9 | siteUrl: "https://mockapp.com", 10 | unAuthorisedUrl: "https://mockapp.com/unauthorised", 11 | redirectUrl: "https://mockapp.com/kinde_callback", 12 | postLogoutRedirectUrl: "https://mockapp.com", 13 | scope: "openid profile email", 14 | }; 15 | 16 | export const getMockAuthURL = (paramOverrides = {}) => { 17 | const authURL = new URL(`${mockClientConfig.issuerBaseUrl}/oauth2/auth`); 18 | const authURLSearchParams = new URLSearchParams({ 19 | client_id: mockClientConfig.clientId, 20 | scope: mockClientConfig.scope, 21 | redirect_uri: mockClientConfig.redirectUrl, 22 | response_type: "code", 23 | state: "ec780ca2734867827259c63d24774eb5e557ebd695d00ce2d434fddc", 24 | ...paramOverrides, 25 | }); 26 | authURL.search = authURLSearchParams.toString(); 27 | return authURL; 28 | }; 29 | 30 | export const setupKindeMock = (configOverrides = {}): express.Application => { 31 | const app = express(); 32 | const config = { ...mockClientConfig, ...configOverrides }; 33 | setupKinde(config, app); 34 | return app; 35 | }; 36 | -------------------------------------------------------------------------------- /src/setup/kindeSetupTypes.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | GrantType, 3 | createKindeServerClient, 4 | PKCEClientOptions, 5 | ACClientOptions, 6 | CCClientOptions, 7 | } from "@kinde-oss/kinde-typescript-sdk"; 8 | 9 | interface CommonSetupConfigParams { 10 | grantType: G; 11 | issuerBaseUrl: string; 12 | postLogoutRedirectUrl: string; 13 | siteUrl: string; 14 | clientId: string; 15 | audience?: string; 16 | scope?: string; 17 | } 18 | 19 | interface ACSetupConfigParams 20 | extends CommonSetupConfigParams { 21 | secret: string; 22 | unAuthorisedUrl: string; 23 | redirectUrl: string; 24 | } 25 | 26 | interface PKCESetupConfigParams 27 | extends CommonSetupConfigParams { 28 | unAuthorisedUrl: string; 29 | redirectUrl: string; 30 | } 31 | 32 | interface CCSetupConfigParams 33 | extends CommonSetupConfigParams { 34 | secret: string; 35 | } 36 | 37 | export type ClientType = ReturnType< 38 | typeof createKindeServerClient 39 | >; 40 | 41 | export type SetupConfig = G extends GrantType.PKCE 42 | ? PKCESetupConfigParams 43 | : G extends GrantType.AUTHORIZATION_CODE 44 | ? ACSetupConfigParams 45 | : G extends GrantType.CLIENT_CREDENTIALS 46 | ? CCSetupConfigParams 47 | : never; 48 | 49 | export type ClientOptions = G extends GrantType.PKCE 50 | ? PKCEClientOptions 51 | : G extends GrantType.AUTHORIZATION_CODE 52 | ? ACClientOptions 53 | : G extends GrantType.CLIENT_CREDENTIALS 54 | ? CCClientOptions 55 | : never; 56 | -------------------------------------------------------------------------------- /src/helpers/kindeHelpers.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect, beforeAll, afterEach, vi } from "vitest"; 2 | import type { GrantType } from "@kinde-oss/kinde-typescript-sdk"; 3 | import { setupKindeMock, getMockAuthURL } from "../mocks.js"; 4 | import { getInternalClient, type ClientType } from "../setup/index.js"; 5 | import { createOrg } from "./kindeHelpers.js"; 6 | import request from "supertest"; 7 | 8 | describe("kindeHelpers", () => { 9 | const app = setupKindeMock(); 10 | 11 | describe("createOrg()", () => { 12 | const internalClient = getInternalClient(); 13 | const handleCreateOrgMock = vi.spyOn( 14 | internalClient as ClientType, 15 | "createOrg", 16 | ); 17 | 18 | beforeAll(() => { 19 | app.get("/create_org", createOrg); 20 | }); 21 | 22 | afterEach(() => { 23 | handleCreateOrgMock.mockClear(); 24 | }); 25 | 26 | it("redirects user to create organization URL generated by internal client", async () => { 27 | const createOrgParams = { 28 | is_create_org: true, 29 | start_page: "registration", 30 | }; 31 | const createOrgURL = getMockAuthURL(createOrgParams); 32 | handleCreateOrgMock.mockResolvedValue(createOrgURL); 33 | const response = await request(app).get("/create_org"); 34 | expect(response.status).toBe(302); 35 | expect(response.headers.location).toBe(createOrgURL.toString()); 36 | }); 37 | 38 | it("raises exception if optional organization code is invalid", async () => { 39 | const query = { org_code: "" }; 40 | const response = await request(app).get("/create_org").query(query); 41 | expect(response.status).toBe(400); 42 | expect(response.text).toContain("org_code"); 43 | expect(response.text).toContain("invalid value"); 44 | }); 45 | }); 46 | }); 47 | -------------------------------------------------------------------------------- /src/setup/sessionManager.ts: -------------------------------------------------------------------------------- 1 | import { ExpressMiddleware, randomString } from "../utils.js"; 2 | import type { Express, Request, Response, NextFunction } from "express"; 3 | import session, { type SessionOptions } from "express-session"; 4 | 5 | const SESSION_MAX_AGE: number = 1000 * 60 * 60 * 24; 6 | 7 | const sessionConfig: SessionOptions = { 8 | secret: process.env.SESSION_SECRET || randomString(), 9 | saveUninitialized: true, 10 | cookie: { 11 | maxAge: SESSION_MAX_AGE, 12 | sameSite: "lax", 13 | httpOnly: true, 14 | secure: process.env.NODE_ENV === "production", 15 | path: "/", 16 | }, 17 | resave: false, 18 | }; 19 | 20 | /** 21 | * Sets up @type{import('@kinde-oss/kinde-typescript-sdk').SessionManager} as an 22 | * as an express middleware, with the assumption that `express-session` package 23 | * middleware has already been configured. 24 | * 25 | * @returns {ExpressMiddleware} 26 | */ 27 | const getSessionManager = (): ExpressMiddleware => { 28 | return (req: Request, _: Response, next: NextFunction) => { 29 | req.setSessionItem = async (itemKey, itemValue) => { 30 | req.session[itemKey] = itemValue; 31 | }; 32 | req.getSessionItem = async (itemKey) => { 33 | return req.session[itemKey] ?? null; 34 | }; 35 | req.removeSessionItem = async (itemKey) => { 36 | delete req.session[itemKey]; 37 | }; 38 | req.destroySession = async () => { 39 | req.session.destroy((e) => console.log(e)); 40 | }; 41 | next(); 42 | }; 43 | }; 44 | 45 | const hasSessionMiddleware = (app: Express) => { 46 | if (app._router && app._router.stack) { 47 | // eslint-disable-next-line @typescript-eslint/no-explicit-any 48 | return app._router.stack.some((l: any) => l.name === "session"); 49 | } 50 | return false; 51 | }; 52 | 53 | /** 54 | * Attaches the `express-session` middleware and the `SessionManager` for internal 55 | * typescript SDK (in middleware form). 56 | * @param {Express} app 57 | */ 58 | export const setupKindeSession = (app: Express): void => { 59 | if (!hasSessionMiddleware(app)) { 60 | app.use(session(sessionConfig)); 61 | } 62 | app.use(getSessionManager()); 63 | }; 64 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vite"; 2 | import dts from "vite-plugin-dts"; 3 | import { resolve } from "path"; 4 | 5 | const external = [ 6 | "express", 7 | "express-session", 8 | "@kinde-oss/kinde-typescript-sdk", 9 | "@kinde/jwt-validator", 10 | "aws-jwt-verify", 11 | "crypto", 12 | "fs", 13 | "module", 14 | ]; 15 | 16 | export default defineConfig({ 17 | build: { 18 | copyPublicDir: false, 19 | lib: { 20 | entry: resolve(__dirname, "src/index.ts"), 21 | formats: ["es", "cjs"], 22 | name: "@kinde-oss/kinde-node-express", 23 | fileName: (format) => 24 | `kinde-node-express.${format === "es" ? "mjs" : "cjs"}`, 25 | }, 26 | target: "esnext", 27 | outDir: "./dist", 28 | rollupOptions: { 29 | external, 30 | output: { 31 | globals: { 32 | "@kinde/jwt-decoder": "jwtDecoder", 33 | "aws-jwt-verify": "awsJwtVerify", 34 | dotenv: "dotenv", 35 | }, 36 | }, 37 | }, 38 | }, 39 | resolve: { alias: { src: resolve(__dirname, "src") } }, 40 | plugins: [ 41 | dts({ 42 | insertTypesEntry: true, 43 | outDir: "./dist", 44 | include: ["src/**/*.ts"], 45 | exclude: ["src/**/*.test.ts"], 46 | }), 47 | ], 48 | }); 49 | 50 | // export default defineConfig([ 51 | // // ESM build 52 | // { 53 | // build: { 54 | // lib: { 55 | // entry: './src/index.ts', 56 | // fileName: 'index.esm', 57 | // formats: ['es'], 58 | // }, 59 | // outDir: 'dist', 60 | // emptyOutDir: false, 61 | // rollupOptions: { 62 | // external, 63 | // }, 64 | // sourcemap: true, 65 | // minify: true, 66 | // }, 67 | // plugins: [ 68 | // dts({ 69 | // entryRoot: 'src', 70 | // outDir: 'dist/types', 71 | // tsConfigFilePath: './tsconfig.json', 72 | // }), 73 | // ], 74 | // }, 75 | // // CJS build 76 | // { 77 | // build: { 78 | // lib: { 79 | // entry: './src/index.ts', 80 | // fileName: 'index.cjs', 81 | // formats: ['cjs'], 82 | // }, 83 | // outDir: 'dist-cjs', 84 | // emptyOutDir: false, 85 | // rollupOptions: { 86 | // external, 87 | // }, 88 | // sourcemap: true, 89 | // minify: true, 90 | // }, 91 | // plugins: [], 92 | // }, 93 | // ]); 94 | -------------------------------------------------------------------------------- /src/setup/kindeClient.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect, vi, beforeEach, afterEach } from "vitest"; 2 | import { getApplicationExpressVersionESM } from "./kindeClient.js"; 3 | 4 | // Mock the fs module 5 | vi.mock("fs", () => ({ 6 | readFileSync: vi.fn(), 7 | })); 8 | 9 | describe("getApplicationExpressVersionESM", () => { 10 | beforeEach(() => { 11 | vi.clearAllMocks(); 12 | // Reset console.warn mock 13 | vi.spyOn(console, "warn").mockImplementation(() => {}); 14 | }); 15 | 16 | afterEach(() => { 17 | vi.restoreAllMocks(); 18 | }); 19 | 20 | it("returns Express version from package.json when found", async () => { 21 | // Import the mocked fs module 22 | const { readFileSync } = await import("fs"); 23 | 24 | // Mock readFileSync to return valid package.json 25 | const mockPackageJson = { 26 | name: "express", 27 | version: "4.21.2", 28 | }; 29 | (readFileSync as any).mockReturnValue(JSON.stringify(mockPackageJson)); 30 | 31 | // This test verifies the method successfully finds and returns the Express version 32 | const result = getApplicationExpressVersionESM(); 33 | 34 | // Validate semantic version format (e.g., 4.21.2, 5.0.0-beta.1, etc.) 35 | expect(result).toMatch(/^\d+\.\d+\.\d+(-.+)?$/); 36 | expect(console.warn).not.toHaveBeenCalled(); 37 | }); 38 | 39 | it("returns a string value", () => { 40 | // Test that the method always returns a string 41 | const result = getApplicationExpressVersionESM(); 42 | 43 | expect(typeof result).toBe("string"); 44 | expect(result).toBeDefined(); 45 | }); 46 | 47 | it("handles errors gracefully", async () => { 48 | // Import the mocked fs module 49 | const { readFileSync } = await import("fs"); 50 | 51 | // Mock readFileSync to throw an error 52 | (readFileSync as any).mockImplementation(() => { 53 | throw new Error("Test error"); 54 | }); 55 | 56 | // Spy on console.warn 57 | const consoleWarnSpy = vi 58 | .spyOn(console, "warn") 59 | .mockImplementation(() => {}); 60 | 61 | // Call the function and verify it doesn't throw 62 | expect(() => getApplicationExpressVersionESM()).not.toThrow(); 63 | 64 | // Verify fallback behavior 65 | const result = getApplicationExpressVersionESM(); 66 | expect(result).toBe("Unknown"); 67 | expect(consoleWarnSpy).toHaveBeenCalledWith( 68 | expect.stringContaining( 69 | "[SDK] Could not determine application's Express.js version: Test error", 70 | ), 71 | ); 72 | 73 | // Restore mocks 74 | consoleWarnSpy.mockRestore(); 75 | }); 76 | }); 77 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@kinde-oss/kinde-node-express", 3 | "version": "1.6.1-0", 4 | "description": "Kinde SDK for traditional Node.js Express web apps that run on the server", 5 | "main": "dist/kinde-node-express.cjs", 6 | "module": "dist/kinde-node-express.mjs", 7 | "types": "dist/types/index.d.ts", 8 | "type": "module", 9 | "engines": { 10 | "node": ">=18.0.0" 11 | }, 12 | "exports": { 13 | ".": { 14 | "require": { 15 | "types": "./dist/types/index.d.ts", 16 | "default": "./dist/kinde-node-express.cjs" 17 | }, 18 | "import": { 19 | "types": "./dist/types/index.d.ts", 20 | "default": "./dist/kinde-node-express.mjs" 21 | } 22 | } 23 | }, 24 | "repository": { 25 | "type": "git", 26 | "url": "https://github.com/kinde-oss/kinde-node-express" 27 | }, 28 | "bugs": "https://github.com/kinde-oss/kinde-node-express", 29 | "homepage": "https://kinde.com", 30 | "license": "MIT", 31 | "scripts": { 32 | "lint": "eslint . && prettier -c .", 33 | "lint:fix": "eslint . --fix && prettier --write .", 34 | "lint-staged": "lint-staged", 35 | "format": "npm run lint:fix && npm run prettier:write", 36 | "build": "rm -rf ./dist ./dist-cjs && vite build", 37 | "test": "vitest run", 38 | "test:watch": "vitest" 39 | }, 40 | "author": { 41 | "name": "Kinde", 42 | "email": "engineering@kinde.com", 43 | "url": "https://kinde.com" 44 | }, 45 | "devDependencies": { 46 | "@eslint/eslintrc": "^3.3.1", 47 | "@eslint/js": "^9.26.0", 48 | "@tsconfig/node19": "^19.1.2", 49 | "@types/express": "^4.17.21", 50 | "@types/express-session": "^1.18.0", 51 | "@types/node": "^20.10.5", 52 | "@types/supertest": "^6.0.2", 53 | "@typescript-eslint/eslint-plugin": "^8.0.0", 54 | "@typescript-eslint/parser": "^8.0.0", 55 | "eslint": "^9.26.0", 56 | "globals": "^16.0.0", 57 | "husky": "^9.0.0", 58 | "lint-staged": "^15.2.0", 59 | "nodemon": "^3.0.0", 60 | "prettier": "^3.2.5", 61 | "rollup": "^4.18.0", 62 | "supertest": "^7.0.0", 63 | "ts-node": "^10.9.2", 64 | "typescript": "^5.3.3", 65 | "typescript-eslint": "^8.31.1", 66 | "vite": "^6.0.0", 67 | "vite-plugin-dts": "^4.0.0", 68 | "vitest": "^3.1.2" 69 | }, 70 | "keywords": [ 71 | "Kinde", 72 | "login", 73 | "Regular web app authentication", 74 | "Express" 75 | ], 76 | "files": [ 77 | "dist", 78 | "dist-cjs", 79 | "LICENCE.md" 80 | ], 81 | "private": false, 82 | "dependencies": { 83 | "@kinde-oss/kinde-typescript-sdk": "^2.13.0", 84 | "@kinde/jwt-validator": "^0.4.0", 85 | "aws-jwt-verify": "^5.0.0", 86 | "eslint-config-prettier": "^10.1.2", 87 | "eslint-plugin-prettier": "^5.2.6", 88 | "express": "^4.21.2", 89 | "express-session": "^1.18.1", 90 | "qs": "^6.14.0" 91 | } 92 | } 93 | -------------------------------------------------------------------------------- /src/auth/kindeAuthRouter.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, it, expect, afterEach, vi } from "vitest"; 2 | import { setupKindeMock, mockClientConfig, getMockAuthURL } from "../mocks.js"; 3 | import { getInternalClient } from "../setup/index.js"; 4 | import type { ClientType } from "../setup/kindeSetupTypes.js"; 5 | import type { GrantType } from "@kinde-oss/kinde-typescript-sdk"; 6 | import request from "supertest"; 7 | 8 | describe("kindeAuthRouter", () => { 9 | const app = setupKindeMock(); 10 | 11 | describe("handleRegister()", () => { 12 | const internalClient = getInternalClient(); 13 | const registerMock = vi.spyOn( 14 | internalClient as ClientType, 15 | "register", 16 | ); 17 | 18 | afterEach(() => { 19 | registerMock.mockClear(); 20 | }); 21 | 22 | it("redirects user to registration URL generated by internal client", async () => { 23 | const registerURL = getMockAuthURL({ start_page: "registration" }); 24 | registerMock.mockResolvedValue(registerURL); 25 | const response = await request(app).get("/register"); 26 | expect(response.status).toBe(302); 27 | expect(response.headers.location).toBe(registerURL.toString()); 28 | }); 29 | 30 | it("raises exception if optional organization code is invalid", async () => { 31 | const query = { org_code: "" }; 32 | const response = await request(app).get("/register").query(query); 33 | expect(response.status).toBe(400); 34 | expect(response.text).toContain("org_code"); 35 | expect(response.text).toContain("invalid value"); 36 | }); 37 | }); 38 | describe("handleLogin()", () => { 39 | const internalClient = getInternalClient(); 40 | const loginMock = vi.spyOn( 41 | internalClient as ClientType, 42 | "login", 43 | ); 44 | 45 | afterEach(() => { 46 | loginMock.mockClear(); 47 | }); 48 | 49 | it("redirects user to login URL generated by internal client", async () => { 50 | const loginURL = getMockAuthURL(); 51 | loginMock.mockResolvedValue(loginURL); 52 | const response = await request(app).get("/login"); 53 | expect(response.status).toBe(302); 54 | expect(response.headers.location).toBe(loginURL.toString()); 55 | }); 56 | 57 | it("raises exception if optional organization code is invalid", async () => { 58 | const query = { org_code: "" }; 59 | const response = await request(app).get("/login").query(query); 60 | expect(response.status).toBe(400); 61 | expect(response.text).toContain("org_code"); 62 | expect(response.text).toContain("invalid value"); 63 | }); 64 | }); 65 | 66 | describe("handleCallback()", () => { 67 | const internalClient = getInternalClient(); 68 | const redirectToAppMock = vi.spyOn( 69 | internalClient as ClientType, 70 | "handleRedirectToApp", 71 | ); 72 | 73 | afterEach(() => { 74 | redirectToAppMock.mockClear(); 75 | }); 76 | 77 | it("redirects to siteUrl if internal client handles redirection successfully", async () => { 78 | redirectToAppMock.mockResolvedValue(undefined); 79 | const response = await request(app).get("/kinde_callback"); 80 | expect(response.status).toBe(302); 81 | expect(redirectToAppMock).toHaveBeenCalledTimes(1); 82 | expect(response.headers.location).toBe(mockClientConfig.siteUrl); 83 | }); 84 | 85 | it("redirects to unAuthorisedUrl if internal client fails to handle redirection", async () => { 86 | redirectToAppMock.mockRejectedValue(new Error("error")); 87 | const response = await request(app).get("/kinde_callback"); 88 | expect(response.status).toBe(302); 89 | expect(response.headers.location).toBe(mockClientConfig.unAuthorisedUrl); 90 | }); 91 | }); 92 | }); 93 | -------------------------------------------------------------------------------- /src/helpers/kindeMiddlewareHelpers.ts: -------------------------------------------------------------------------------- 1 | import { GrantType } from "@kinde-oss/kinde-typescript-sdk"; 2 | import { getInitialConfig, getInternalClient } from "../setup/index.js"; 3 | import type { ExpressMiddleware } from "../utils.js"; 4 | import { JwtRsaVerifier } from "aws-jwt-verify"; 5 | import type { Request, Response, NextFunction } from "express"; 6 | import { 7 | validateToken, 8 | type jwtValidationResponse, 9 | } from "@kinde/jwt-validator"; 10 | 11 | /** 12 | * Custom middleware fetches details for the authenticated user and attaches them 13 | * to the request object, available as `req.user` and having the following type 14 | * @type {UserType}. 15 | * 16 | * @param {Request} 17 | * @param {Response} res 18 | * @param {NextFunction} next 19 | * @returns {Promise} 20 | */ 21 | export const getUser = async ( 22 | req: Request, 23 | res: Response, 24 | next: NextFunction, 25 | ) => { 26 | const kindeClient = getInternalClient(); 27 | if (!(await kindeClient.isAuthenticated(req))) { 28 | const logoutURL = await kindeClient.logout(req); 29 | return res.redirect(logoutURL.toString()); 30 | } 31 | 32 | try { 33 | const userProfile = await kindeClient.getUserProfile(req); 34 | req.user = userProfile; 35 | return next(); 36 | } catch (error) { 37 | return next(error); 38 | } 39 | }; 40 | 41 | /** 42 | * Custom middleware determines if the user is authenticated or not if so proceeds 43 | * to next middleware otherwise redirects to `unAuthorisedUrl` with 403 staus. 44 | * 45 | * @param {Request} req 46 | * @param {Response} res 47 | * @param {NextFunction} next 48 | * @returns {Promise} 49 | */ 50 | export const protectRoute = async ( 51 | req: Request, 52 | res: Response, 53 | next: NextFunction, 54 | ): Promise => { 55 | const { isAuthenticated, logout, getToken } = getInternalClient(); 56 | const { issuerBaseUrl } = getInitialConfig(); 57 | 58 | if (req.headers.authorization) { 59 | const authHeader = req.header("Authorization"); 60 | if (!authHeader || !authHeader.startsWith("Bearer ")) { 61 | res.sendStatus(401); // Unauthorized 62 | return; 63 | } 64 | const token = authHeader.split(" ")[1]; 65 | const validationResult: jwtValidationResponse = await validateToken({ 66 | token, 67 | domain: issuerBaseUrl, 68 | }); 69 | 70 | if (validationResult.valid) { 71 | req.setSessionItem("access_token", token); 72 | next(); 73 | return; 74 | } else { 75 | res.sendStatus(403); 76 | return; 77 | } 78 | } 79 | 80 | if (!(await isAuthenticated(req))) { 81 | const logoutURL = await logout(req); 82 | return res.redirect(logoutURL.toString()); 83 | } 84 | const token = await getToken(req); 85 | 86 | const validationResult: jwtValidationResponse = await validateToken({ 87 | token: token, 88 | domain: issuerBaseUrl, 89 | }); 90 | 91 | if (!validationResult.valid) { 92 | res.sendStatus(403); 93 | return; 94 | } 95 | next(); 96 | }; 97 | 98 | /** 99 | * Custom JWT verifier as middleware, for verifying integrity of JWT bearer 100 | * tokens in authorization headers. 101 | * 102 | * @param {string} issuer - issuerBaseUrl 103 | * @param {Record} 104 | * @returns {ExpressMiddleware>} 105 | */ 106 | export const jwtVerify = ( 107 | issuer: string, 108 | options: Record, 109 | ): ExpressMiddleware> => { 110 | const { audience } = options; 111 | const verifier = JwtRsaVerifier.create({ 112 | issuer, 113 | audience: audience || null, 114 | jwksUri: `${issuer}/.well-known/jwks.json`, 115 | }); 116 | 117 | return async (req, res, next) => { 118 | try { 119 | const authHeader = req.headers.authorization; 120 | const token = authHeader && authHeader.split(" ")[1]; 121 | const payload = await verifier.verify(token); 122 | // @ts-expect-error, preserving this behaviour owing to backward compatibility. 123 | req.user = { id: payload.sub }; 124 | next(); 125 | } catch (err) { 126 | console.log("Token not valid!"); 127 | console.log(err); 128 | return res.sendStatus(403); 129 | } 130 | }; 131 | }; 132 | -------------------------------------------------------------------------------- /src/setup/kindeClient.ts: -------------------------------------------------------------------------------- 1 | import { 2 | GrantType, 3 | createKindeServerClient, 4 | } from "@kinde-oss/kinde-typescript-sdk"; 5 | import type { 6 | SetupConfig, 7 | ClientType, 8 | ClientOptions, 9 | } from "./kindeSetupTypes.js"; 10 | import packageJson from "../../package.json" with { type: "json" }; 11 | import { readFileSync } from "fs"; 12 | import { createRequire } from "module"; 13 | const require = createRequire(import.meta.url); 14 | 15 | let initialConfig: SetupConfig; 16 | let internalClient: ClientType; 17 | 18 | const commonConfigParams: string[] = [ 19 | "grantType", 20 | "issuerBaseUrl", 21 | "postLogoutRedirectUrl", 22 | "siteUrl", 23 | "clientId", 24 | ] as const; 25 | 26 | const grantTypeConfigParams: { 27 | [k in GrantType]: string[]; 28 | } = { 29 | [GrantType.AUTHORIZATION_CODE]: ["secret", "redirectUrl", "unAuthorisedUrl"], 30 | [GrantType.PKCE]: ["redirectUrl", "unAuthorisedUrl"], 31 | [GrantType.CLIENT_CREDENTIALS]: ["secret"], 32 | }; 33 | 34 | /** 35 | * Returns the above `initialConfig` private to this module, throws an exception if 36 | * said `initialConfig` has not been initialized. 37 | * 38 | * @returns {SetupConfig} 39 | */ 40 | export const getInitialConfig = (): SetupConfig => { 41 | if (initialConfig === undefined) { 42 | throw new Error("Initial config is not initialized"); 43 | } else { 44 | return initialConfig as SetupConfig; 45 | } 46 | }; 47 | 48 | /** 49 | * Returns the above `internalClient` private to this module, throws an exception if 50 | * said `internalClient` has not been initialized. 51 | * 52 | * @returns {ClientType} 53 | */ 54 | export const getInternalClient = (): ClientType => { 55 | if (internalClient === undefined) { 56 | throw new Error("Internal Kinde server client is not initialized"); 57 | } else { 58 | return internalClient as ClientType; 59 | } 60 | }; 61 | 62 | /** 63 | * Validates provided config, raises exception if any required parameters are 64 | * missing otherwise returns same config. 65 | * 66 | * @param {SetupConfig} config 67 | * @returns {SetupConfig} 68 | */ 69 | export const validateInitialConfig = ( 70 | config: SetupConfig, 71 | ): SetupConfig => { 72 | const grantType: GrantType = config.grantType; 73 | const grantTypeParams = grantTypeConfigParams[grantType]; 74 | if (!grantTypeParams) { 75 | const types = Object.values(GrantType).join(", "); 76 | throw new Error(`Provided grant type must be one of these values ${types}`); 77 | } 78 | 79 | const configParams = [...commonConfigParams, ...grantTypeParams]; 80 | const configObject = config as unknown as Record; 81 | configParams.forEach((param) => { 82 | const value = configObject[param]; 83 | if (!value || typeof value !== "string") { 84 | throw new Error( 85 | `Required config parameter '${param}' has invalid value ${value}`, 86 | ); 87 | } 88 | }); 89 | 90 | return config; 91 | }; 92 | 93 | export const getApplicationExpressVersionESM = () => { 94 | const fallbackVersion = "Unknown"; 95 | 96 | try { 97 | const expressPackageJsonPath = require.resolve("express/package.json"); 98 | const packageJson = JSON.parse( 99 | readFileSync(expressPackageJsonPath, "utf8"), 100 | ); 101 | if (packageJson.name === "express") { 102 | return packageJson.version; 103 | } 104 | } catch (error) { 105 | const errorMessage = error instanceof Error ? error.message : String(error); 106 | console.warn( 107 | `[SDK] Could not determine application's Express.js version: ${errorMessage}`, 108 | ); 109 | } 110 | 111 | return fallbackVersion; 112 | }; 113 | 114 | /** 115 | * Initializes above `initialConfig` and `internalClient` raises an exception if 116 | * validation of provided config failes, returns created client otherwise. 117 | * 118 | * @param {SetupConfig} config 119 | * @returns {ClientType} 120 | */ 121 | export const setupInternalClient = ( 122 | config: SetupConfig, 123 | ): ClientType => { 124 | const { 125 | issuerBaseUrl, 126 | redirectUrl, 127 | postLogoutRedirectUrl, 128 | audience, 129 | scope, 130 | secret, 131 | clientId, 132 | } = config as unknown as Record; 133 | 134 | initialConfig = validateInitialConfig(config); 135 | 136 | console.info( 137 | `Kinde Express SDK ${packageJson.version} for Express ${getApplicationExpressVersionESM()}`, 138 | ); 139 | 140 | internalClient = createKindeServerClient( 141 | initialConfig.grantType as G, 142 | { 143 | authDomain: issuerBaseUrl, 144 | redirectURL: redirectUrl, 145 | clientId: clientId ?? "reg@live", 146 | clientSecret: secret, 147 | logoutRedirectURL: postLogoutRedirectUrl, 148 | audience: audience ?? undefined, 149 | scope: scope ?? undefined, 150 | framework: "ExpressJS", 151 | frameworkVersion: packageJson.version, 152 | sdkVersion: packageJson.version, 153 | } as ClientOptions, 154 | ); 155 | 156 | return internalClient as ClientType; 157 | }; 158 | -------------------------------------------------------------------------------- /src/auth/kindeAuthRouter.ts: -------------------------------------------------------------------------------- 1 | import type { GrantType } from "@kinde-oss/kinde-typescript-sdk"; 2 | import type { Request, Response, NextFunction, Router } from "express"; 3 | import { getRequestURL } from "../utils.js"; 4 | import { getInitialConfig, getInternalClient } from "../setup/index.js"; 5 | import type { ParsedQs } from "qs"; 6 | import express from "express"; 7 | 8 | /** 9 | * Extracts the redirect route from the redirectUrl provided as part of the 10 | * initial client configuration. 11 | * 12 | * @returns {string} 13 | */ 14 | export const getRedirectRoute = (): string => { 15 | const { redirectUrl } = getInitialConfig(); 16 | const redirectURL = new URL(redirectUrl); 17 | return redirectURL.pathname; 18 | }; 19 | 20 | /** 21 | * Validates request query parameters for login, regsister and createOrg URLs. 22 | * 23 | * @param {object} requestQuery 24 | * @returns {Error | null} 25 | */ 26 | export const validateQueryParams = (requestQuery: ParsedQs): Error | null => { 27 | const queryParams = ["org_code"]; 28 | for (const param of queryParams) { 29 | const value = requestQuery[param]; 30 | if (value !== undefined) { 31 | if (!value || typeof value !== "string") { 32 | const message = `Provided param '${param}' has invalid value '${value}'`; 33 | return new Error(message); 34 | } 35 | } 36 | } 37 | return null; 38 | }; 39 | 40 | /** 41 | * Creates login URL using internal SDK and redirects to said URL. 42 | * 43 | * @param {Request} req - The Express request object. 44 | * @param {Response} res - The Express response object. 45 | * @param {NextFunction} next - The Express next function. 46 | * @returns {Promise} 47 | */ 48 | const handleLogin = async ( 49 | req: Request, 50 | res: Response, 51 | next: NextFunction, 52 | ): Promise => { 53 | const error = validateQueryParams(req.query); 54 | if (error !== null) { 55 | res.status(400); 56 | return next(error); 57 | } 58 | 59 | const client = getInternalClient(); 60 | const loginURL = await client.login(req, req.query); 61 | res.redirect(loginURL.toString()); 62 | }; 63 | 64 | /** 65 | * Creates Portal URL using internal SDK and redirects to said URL. 66 | * 67 | * @param {Request} req - The Express request object. 68 | * @param {Response} res - The Express response object. 69 | * @param {NextFunction} next - The Express next function. 70 | * @returns {Promise} 71 | */ 72 | const handlePortal = async (req: Request, res: Response): Promise => { 73 | const client = getInternalClient(); 74 | const portalUrl = await client.portal(req, req.query); 75 | res.redirect(portalUrl.url.toString()); 76 | }; 77 | 78 | /** 79 | * Creates register URL using internal SDK and redirects to said URL. 80 | * 81 | * @param {Request} req - The Express request object. 82 | * @param {Response} res - The Express response object. 83 | * @param {NextFunction} next - The Express next function. 84 | * @returns {Promise} 85 | */ 86 | const handleRegister = async ( 87 | req: Request, 88 | res: Response, 89 | next: NextFunction, 90 | ): Promise => { 91 | const error = validateQueryParams(req.query); 92 | if (error !== null) { 93 | res.status(400); 94 | return next(error); 95 | } 96 | 97 | const client = getInternalClient(); 98 | const registerURL = await client.register(req, req.query); 99 | res.redirect(registerURL.toString()); 100 | }; 101 | 102 | /** 103 | * Creates createOrg logout using internal SDK and redirects to said URL. 104 | * 105 | * @param {Request} req - The Express request object. 106 | * @param {Response} res - The Express response object. 107 | * @param {NextFunction} next - The Express next function. 108 | * @returns {Promise} 109 | */ 110 | const handleLogout = async (req: Request, res: Response): Promise => { 111 | const client = getInternalClient(); 112 | const logoutURL = await client.logout(req); 113 | res.redirect(logoutURL.toString()); 114 | }; 115 | 116 | /** 117 | * Handlers redirect from Kinde using internal SDK and redirects to siteURL, 118 | * if handling redirection fails, redirection is to unAuthorisedUrl. 119 | * 120 | * @param {Request} req - The Express request object. 121 | * @param {Response} res - The Express response object. 122 | * @returns {Promise} 123 | */ 124 | const handleCallback = async (req: Request, res: Response): Promise => { 125 | try { 126 | const { siteUrl } = getInitialConfig(); 127 | const client = getInternalClient(); 128 | const callbackURL = getRequestURL(req); 129 | await client.handleRedirectToApp(req, callbackURL); 130 | res.redirect(siteUrl); 131 | } catch (error) { 132 | console.debug("Error: ", error); 133 | const { unAuthorisedUrl } = 134 | getInitialConfig(); 135 | res.redirect(unAuthorisedUrl); 136 | } 137 | }; 138 | 139 | /** 140 | * Returns express Router with all the above handlers attached. 141 | * 142 | * @returns {Router} 143 | */ 144 | export const getAuthRouter = (): Router => { 145 | const redirectRoute = getRedirectRoute(); 146 | const router = express.Router(); 147 | router.get("/login", handleLogin); 148 | router.get("/portal", handlePortal); 149 | router.get("/logout", handleLogout); 150 | router.get("/register", handleRegister); 151 | router.get(redirectRoute, handleCallback); 152 | return router; 153 | }; 154 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | ### Changelog 2 | 3 | All notable changes to this project will be documented in this file. Dates are displayed in UTC. 4 | 5 | Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog). 6 | 7 | #### [v1.6.1-0](https://github.com/kinde-oss/kinde-node-express/compare/v1.6.0...v1.6.1-0) 8 | 9 | #### [v1.6.0](https://github.com/kinde-oss/kinde-node-express/compare/v1.5.0...v1.6.0) 10 | 11 | > 3 June 2024 12 | 13 | - chore: change type imports [`#33`](https://github.com/kinde-oss/kinde-node-express/pull/33) 14 | - fix: cjs build [`#32`](https://github.com/kinde-oss/kinde-node-express/pull/32) 15 | - feat: add bearer token route protection. [`#31`](https://github.com/kinde-oss/kinde-node-express/pull/31) 16 | - chore: prettier [`cc2557d`](https://github.com/kinde-oss/kinde-node-express/commit/cc2557d582c78130b2171687518f283c738fa3b0) 17 | - chore: release v1.6.0 [`e76ce33`](https://github.com/kinde-oss/kinde-node-express/commit/e76ce33dc5161aafdc523ae7d384bf1c8f19e776) 18 | - fix: improve error checking over malformed Authorization header [`f459555`](https://github.com/kinde-oss/kinde-node-express/commit/f459555be8bb025a4381c0c10fa0aed5e568009d) 19 | 20 | #### [v1.5.0](https://github.com/kinde-oss/kinde-node-express/compare/v1.4.1...v1.5.0) 21 | 22 | > 29 May 2024 23 | 24 | - chore: switch to rollup for better builds [`#30`](https://github.com/kinde-oss/kinde-node-express/pull/30) 25 | - chore: release v1.5.0 [`440e8a3`](https://github.com/kinde-oss/kinde-node-express/commit/440e8a3205f48c5362042a4f4f8b596f40a7278c) 26 | 27 | #### [v1.4.1](https://github.com/kinde-oss/kinde-node-express/compare/v1.4.0...v1.4.1) 28 | 29 | > 21 May 2024 30 | 31 | - fix: add jwtVerify export back [`#28`](https://github.com/kinde-oss/kinde-node-express/pull/28) 32 | - chore: release v1.4.1 [`5e4e0b8`](https://github.com/kinde-oss/kinde-node-express/commit/5e4e0b80bbd7ddcbf6223665bbf196b0d394c519) 33 | 34 | #### [v1.4.0](https://github.com/kinde-oss/kinde-node-express/compare/v1.3.0...v1.4.0) 35 | 36 | > 9 May 2024 37 | 38 | - fix: prevent creating new session store if one already exists [`#26`](https://github.com/kinde-oss/kinde-node-express/pull/26) 39 | - chore(deps): bump formidable and supertest [`#23`](https://github.com/kinde-oss/kinde-node-express/pull/23) 40 | - [Snyk] Upgrade aws-jwt-verify from 3.2.0 to 3.4.0 [`#14`](https://github.com/kinde-oss/kinde-node-express/pull/14) 41 | - [Snyk] Upgrade @kinde-oss/kinde-typescript-sdk from 2.6.2 to 2.8.0 [`#22`](https://github.com/kinde-oss/kinde-node-express/pull/22) 42 | - [Snyk] Security upgrade express from 4.18.3 to 4.19.2 [`#19`](https://github.com/kinde-oss/kinde-node-express/pull/19) 43 | - chore: prettier [`9a07f0f`](https://github.com/kinde-oss/kinde-node-express/commit/9a07f0ff6828ed4c379bbfe873a3505e844f7ddd) 44 | - chore: changelog [`b6d4348`](https://github.com/kinde-oss/kinde-node-express/commit/b6d4348a459c8996be22c17eb2979f9fd7840116) 45 | - fix: package.json & package-lock.json to reduce vulnerabilities [`b332fd6`](https://github.com/kinde-oss/kinde-node-express/commit/b332fd6feecac71052db49a34be2debfc5ca636f) 46 | 47 | #### [v1.3.0](https://github.com/kinde-oss/kinde-node-express/compare/v1.3.0-0...v1.3.0) 48 | 49 | > 28 March 2024 50 | 51 | - chore: release v1.3.0 [`02dcc99`](https://github.com/kinde-oss/kinde-node-express/commit/02dcc997961546c6eccae4c997c34a76075e3959) 52 | 53 | #### [v1.3.0-0](https://github.com/kinde-oss/kinde-node-express/compare/v0.0.1...v1.3.0-0) 54 | 55 | > 28 March 2024 56 | 57 | - chore(deps): bump express from 4.18.3 to 4.19.2 [`#21`](https://github.com/kinde-oss/kinde-node-express/pull/21) 58 | - fix/remove console.log message [`#20`](https://github.com/kinde-oss/kinde-node-express/pull/20) 59 | - [Snyk] Upgrade express from 4.18.2 to 4.18.3 [`#18`](https://github.com/kinde-oss/kinde-node-express/pull/18) 60 | - chore(deps): bump follow-redirects from 1.15.5 to 1.15.6 [`#17`](https://github.com/kinde-oss/kinde-node-express/pull/17) 61 | - [Snyk] Upgrade express from 4.18.1 to 4.18.2 [`#15`](https://github.com/kinde-oss/kinde-node-express/pull/15) 62 | - [Snyk] Upgrade @kinde-oss/kinde-typescript-sdk from 2.5.2 to 2.6.2 [`#13`](https://github.com/kinde-oss/kinde-node-express/pull/13) 63 | - [Snyk] Upgrade express-session from 1.17.3 to 1.18.0 [`#16`](https://github.com/kinde-oss/kinde-node-express/pull/16) 64 | - fix: cookie settings [`#12`](https://github.com/kinde-oss/kinde-node-express/pull/12) 65 | - chore(deps): bump got and nodemon [`#11`](https://github.com/kinde-oss/kinde-node-express/pull/11) 66 | - chore(deps): bump follow-redirects from 1.15.0 to 1.15.5 [`#10`](https://github.com/kinde-oss/kinde-node-express/pull/10) 67 | - Bump http-cache-semantics from 4.1.0 to 4.1.1 [`#3`](https://github.com/kinde-oss/kinde-node-express/pull/3) 68 | - chore: bumped package version to v1.2.3 [`#9`](https://github.com/kinde-oss/kinde-node-express/pull/9) 69 | - Refactor SDK with `@kinde-oss/kinde-typescript-sdk` as dependency [`#7`](https://github.com/kinde-oss/kinde-node-express/pull/7) 70 | - token check [`#2`](https://github.com/kinde-oss/kinde-node-express/pull/2) 71 | - chore: setup unit-tesing with jest and supertest for route handlers [`3cc6542`](https://github.com/kinde-oss/kinde-node-express/commit/3cc65423ea95ceed372e2760777a92f3b5a1cee8) 72 | - chore: modified jest setup for typescript [`370b3d9`](https://github.com/kinde-oss/kinde-node-express/commit/370b3d9ac69b524e9af5d52d67afbcf5db258457) 73 | - update references [`34d0ed8`](https://github.com/kinde-oss/kinde-node-express/commit/34d0ed81d6b65b2a64dce2955c1706b1437f263d) 74 | 75 | #### v0.0.1 76 | 77 | > 15 May 2022 78 | 79 | - node express functionality [`#1`](https://github.com/kinde-oss/kinde-node-express/pull/1) 80 | - package json & rollup [`5653139`](https://github.com/kinde-oss/kinde-node-express/commit/56531398b920155970acb1af24e54efdf16e19e3) 81 | - more set up [`f883cc3`](https://github.com/kinde-oss/kinde-node-express/commit/f883cc33ee3a93c53ba4adead658a154f719ee7a) 82 | - update license [`1df2939`](https://github.com/kinde-oss/kinde-node-express/commit/1df2939db03b45ca0f93d0e01f5deb2911b004be) 83 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@kinde-oss/kinde-typescript-sdk': 12 | specifier: ^2.13.0 13 | version: 2.13.0(eslint@9.26.0)(typescript@5.8.3) 14 | '@kinde/jwt-validator': 15 | specifier: ^0.4.0 16 | version: 0.4.0 17 | aws-jwt-verify: 18 | specifier: ^5.0.0 19 | version: 5.0.0 20 | eslint-config-prettier: 21 | specifier: ^10.1.2 22 | version: 10.1.2(eslint@9.26.0) 23 | eslint-plugin-prettier: 24 | specifier: ^5.2.6 25 | version: 5.5.4(eslint-config-prettier@10.1.2(eslint@9.26.0))(eslint@9.26.0)(prettier@3.5.3) 26 | express: 27 | specifier: ^4.21.2 28 | version: 4.21.2 29 | express-session: 30 | specifier: ^1.18.1 31 | version: 1.18.1 32 | qs: 33 | specifier: ^6.14.0 34 | version: 6.14.0 35 | devDependencies: 36 | '@eslint/eslintrc': 37 | specifier: ^3.3.1 38 | version: 3.3.1 39 | '@eslint/js': 40 | specifier: ^9.26.0 41 | version: 9.26.0 42 | '@tsconfig/node19': 43 | specifier: ^19.1.2 44 | version: 19.1.5 45 | '@types/express': 46 | specifier: ^4.17.21 47 | version: 4.17.23 48 | '@types/express-session': 49 | specifier: ^1.18.0 50 | version: 1.18.1 51 | '@types/node': 52 | specifier: ^20.10.5 53 | version: 20.17.32 54 | '@types/supertest': 55 | specifier: ^6.0.2 56 | version: 6.0.3 57 | '@typescript-eslint/eslint-plugin': 58 | specifier: ^8.0.0 59 | version: 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) 60 | '@typescript-eslint/parser': 61 | specifier: ^8.0.0 62 | version: 8.31.1(eslint@9.26.0)(typescript@5.8.3) 63 | eslint: 64 | specifier: ^9.26.0 65 | version: 9.26.0 66 | globals: 67 | specifier: ^16.0.0 68 | version: 16.0.0 69 | husky: 70 | specifier: ^9.0.0 71 | version: 9.1.7 72 | lint-staged: 73 | specifier: ^15.2.0 74 | version: 15.5.2 75 | nodemon: 76 | specifier: ^3.0.0 77 | version: 3.1.10 78 | prettier: 79 | specifier: ^3.2.5 80 | version: 3.5.3 81 | rollup: 82 | specifier: ^4.18.0 83 | version: 4.40.1 84 | supertest: 85 | specifier: ^7.0.0 86 | version: 7.1.0 87 | ts-node: 88 | specifier: ^10.9.2 89 | version: 10.9.2(@types/node@20.17.32)(typescript@5.8.3) 90 | typescript: 91 | specifier: ^5.3.3 92 | version: 5.8.3 93 | typescript-eslint: 94 | specifier: ^8.31.1 95 | version: 8.31.1(eslint@9.26.0)(typescript@5.8.3) 96 | vite: 97 | specifier: ^6.0.0 98 | version: 6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 99 | vite-plugin-dts: 100 | specifier: ^4.0.0 101 | version: 4.5.3(@types/node@20.17.32)(rollup@4.40.1)(typescript@5.8.3)(vite@6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1)) 102 | vitest: 103 | specifier: ^3.1.2 104 | version: 3.1.2(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 105 | 106 | packages: 107 | 108 | '@babel/helper-string-parser@7.27.1': 109 | resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} 110 | engines: {node: '>=6.9.0'} 111 | 112 | '@babel/helper-validator-identifier@7.27.1': 113 | resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} 114 | engines: {node: '>=6.9.0'} 115 | 116 | '@babel/parser@7.27.1': 117 | resolution: {integrity: sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ==} 118 | engines: {node: '>=6.0.0'} 119 | hasBin: true 120 | 121 | '@babel/types@7.27.1': 122 | resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} 123 | engines: {node: '>=6.9.0'} 124 | 125 | '@cspotcode/source-map-support@0.8.1': 126 | resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} 127 | engines: {node: '>=12'} 128 | 129 | '@esbuild/aix-ppc64@0.25.3': 130 | resolution: {integrity: sha512-W8bFfPA8DowP8l//sxjJLSLkD8iEjMc7cBVyP+u4cEv9sM7mdUCkgsj+t0n/BWPFtv7WWCN5Yzj0N6FJNUUqBQ==} 131 | engines: {node: '>=18'} 132 | cpu: [ppc64] 133 | os: [aix] 134 | 135 | '@esbuild/android-arm64@0.25.3': 136 | resolution: {integrity: sha512-XelR6MzjlZuBM4f5z2IQHK6LkK34Cvv6Rj2EntER3lwCBFdg6h2lKbtRjpTTsdEjD/WSe1q8UyPBXP1x3i/wYQ==} 137 | engines: {node: '>=18'} 138 | cpu: [arm64] 139 | os: [android] 140 | 141 | '@esbuild/android-arm@0.25.3': 142 | resolution: {integrity: sha512-PuwVXbnP87Tcff5I9ngV0lmiSu40xw1At6i3GsU77U7cjDDB4s0X2cyFuBiDa1SBk9DnvWwnGvVaGBqoFWPb7A==} 143 | engines: {node: '>=18'} 144 | cpu: [arm] 145 | os: [android] 146 | 147 | '@esbuild/android-x64@0.25.3': 148 | resolution: {integrity: sha512-ogtTpYHT/g1GWS/zKM0cc/tIebFjm1F9Aw1boQ2Y0eUQ+J89d0jFY//s9ei9jVIlkYi8AfOjiixcLJSGNSOAdQ==} 149 | engines: {node: '>=18'} 150 | cpu: [x64] 151 | os: [android] 152 | 153 | '@esbuild/darwin-arm64@0.25.3': 154 | resolution: {integrity: sha512-eESK5yfPNTqpAmDfFWNsOhmIOaQA59tAcF/EfYvo5/QWQCzXn5iUSOnqt3ra3UdzBv073ykTtmeLJZGt3HhA+w==} 155 | engines: {node: '>=18'} 156 | cpu: [arm64] 157 | os: [darwin] 158 | 159 | '@esbuild/darwin-x64@0.25.3': 160 | resolution: {integrity: sha512-Kd8glo7sIZtwOLcPbW0yLpKmBNWMANZhrC1r6K++uDR2zyzb6AeOYtI6udbtabmQpFaxJ8uduXMAo1gs5ozz8A==} 161 | engines: {node: '>=18'} 162 | cpu: [x64] 163 | os: [darwin] 164 | 165 | '@esbuild/freebsd-arm64@0.25.3': 166 | resolution: {integrity: sha512-EJiyS70BYybOBpJth3M0KLOus0n+RRMKTYzhYhFeMwp7e/RaajXvP+BWlmEXNk6uk+KAu46j/kaQzr6au+JcIw==} 167 | engines: {node: '>=18'} 168 | cpu: [arm64] 169 | os: [freebsd] 170 | 171 | '@esbuild/freebsd-x64@0.25.3': 172 | resolution: {integrity: sha512-Q+wSjaLpGxYf7zC0kL0nDlhsfuFkoN+EXrx2KSB33RhinWzejOd6AvgmP5JbkgXKmjhmpfgKZq24pneodYqE8Q==} 173 | engines: {node: '>=18'} 174 | cpu: [x64] 175 | os: [freebsd] 176 | 177 | '@esbuild/linux-arm64@0.25.3': 178 | resolution: {integrity: sha512-xCUgnNYhRD5bb1C1nqrDV1PfkwgbswTTBRbAd8aH5PhYzikdf/ddtsYyMXFfGSsb/6t6QaPSzxtbfAZr9uox4A==} 179 | engines: {node: '>=18'} 180 | cpu: [arm64] 181 | os: [linux] 182 | 183 | '@esbuild/linux-arm@0.25.3': 184 | resolution: {integrity: sha512-dUOVmAUzuHy2ZOKIHIKHCm58HKzFqd+puLaS424h6I85GlSDRZIA5ycBixb3mFgM0Jdh+ZOSB6KptX30DD8YOQ==} 185 | engines: {node: '>=18'} 186 | cpu: [arm] 187 | os: [linux] 188 | 189 | '@esbuild/linux-ia32@0.25.3': 190 | resolution: {integrity: sha512-yplPOpczHOO4jTYKmuYuANI3WhvIPSVANGcNUeMlxH4twz/TeXuzEP41tGKNGWJjuMhotpGabeFYGAOU2ummBw==} 191 | engines: {node: '>=18'} 192 | cpu: [ia32] 193 | os: [linux] 194 | 195 | '@esbuild/linux-loong64@0.25.3': 196 | resolution: {integrity: sha512-P4BLP5/fjyihmXCELRGrLd793q/lBtKMQl8ARGpDxgzgIKJDRJ/u4r1A/HgpBpKpKZelGct2PGI4T+axcedf6g==} 197 | engines: {node: '>=18'} 198 | cpu: [loong64] 199 | os: [linux] 200 | 201 | '@esbuild/linux-mips64el@0.25.3': 202 | resolution: {integrity: sha512-eRAOV2ODpu6P5divMEMa26RRqb2yUoYsuQQOuFUexUoQndm4MdpXXDBbUoKIc0iPa4aCO7gIhtnYomkn2x+bag==} 203 | engines: {node: '>=18'} 204 | cpu: [mips64el] 205 | os: [linux] 206 | 207 | '@esbuild/linux-ppc64@0.25.3': 208 | resolution: {integrity: sha512-ZC4jV2p7VbzTlnl8nZKLcBkfzIf4Yad1SJM4ZMKYnJqZFD4rTI+pBG65u8ev4jk3/MPwY9DvGn50wi3uhdaghg==} 209 | engines: {node: '>=18'} 210 | cpu: [ppc64] 211 | os: [linux] 212 | 213 | '@esbuild/linux-riscv64@0.25.3': 214 | resolution: {integrity: sha512-LDDODcFzNtECTrUUbVCs6j9/bDVqy7DDRsuIXJg6so+mFksgwG7ZVnTruYi5V+z3eE5y+BJZw7VvUadkbfg7QA==} 215 | engines: {node: '>=18'} 216 | cpu: [riscv64] 217 | os: [linux] 218 | 219 | '@esbuild/linux-s390x@0.25.3': 220 | resolution: {integrity: sha512-s+w/NOY2k0yC2p9SLen+ymflgcpRkvwwa02fqmAwhBRI3SC12uiS10edHHXlVWwfAagYSY5UpmT/zISXPMW3tQ==} 221 | engines: {node: '>=18'} 222 | cpu: [s390x] 223 | os: [linux] 224 | 225 | '@esbuild/linux-x64@0.25.3': 226 | resolution: {integrity: sha512-nQHDz4pXjSDC6UfOE1Fw9Q8d6GCAd9KdvMZpfVGWSJztYCarRgSDfOVBY5xwhQXseiyxapkiSJi/5/ja8mRFFA==} 227 | engines: {node: '>=18'} 228 | cpu: [x64] 229 | os: [linux] 230 | 231 | '@esbuild/netbsd-arm64@0.25.3': 232 | resolution: {integrity: sha512-1QaLtOWq0mzK6tzzp0jRN3eccmN3hezey7mhLnzC6oNlJoUJz4nym5ZD7mDnS/LZQgkrhEbEiTn515lPeLpgWA==} 233 | engines: {node: '>=18'} 234 | cpu: [arm64] 235 | os: [netbsd] 236 | 237 | '@esbuild/netbsd-x64@0.25.3': 238 | resolution: {integrity: sha512-i5Hm68HXHdgv8wkrt+10Bc50zM0/eonPb/a/OFVfB6Qvpiirco5gBA5bz7S2SHuU+Y4LWn/zehzNX14Sp4r27g==} 239 | engines: {node: '>=18'} 240 | cpu: [x64] 241 | os: [netbsd] 242 | 243 | '@esbuild/openbsd-arm64@0.25.3': 244 | resolution: {integrity: sha512-zGAVApJEYTbOC6H/3QBr2mq3upG/LBEXr85/pTtKiv2IXcgKV0RT0QA/hSXZqSvLEpXeIxah7LczB4lkiYhTAQ==} 245 | engines: {node: '>=18'} 246 | cpu: [arm64] 247 | os: [openbsd] 248 | 249 | '@esbuild/openbsd-x64@0.25.3': 250 | resolution: {integrity: sha512-fpqctI45NnCIDKBH5AXQBsD0NDPbEFczK98hk/aa6HJxbl+UtLkJV2+Bvy5hLSLk3LHmqt0NTkKNso1A9y1a4w==} 251 | engines: {node: '>=18'} 252 | cpu: [x64] 253 | os: [openbsd] 254 | 255 | '@esbuild/sunos-x64@0.25.3': 256 | resolution: {integrity: sha512-ROJhm7d8bk9dMCUZjkS8fgzsPAZEjtRJqCAmVgB0gMrvG7hfmPmz9k1rwO4jSiblFjYmNvbECL9uhaPzONMfgA==} 257 | engines: {node: '>=18'} 258 | cpu: [x64] 259 | os: [sunos] 260 | 261 | '@esbuild/win32-arm64@0.25.3': 262 | resolution: {integrity: sha512-YWcow8peiHpNBiIXHwaswPnAXLsLVygFwCB3A7Bh5jRkIBFWHGmNQ48AlX4xDvQNoMZlPYzjVOQDYEzWCqufMQ==} 263 | engines: {node: '>=18'} 264 | cpu: [arm64] 265 | os: [win32] 266 | 267 | '@esbuild/win32-ia32@0.25.3': 268 | resolution: {integrity: sha512-qspTZOIGoXVS4DpNqUYUs9UxVb04khS1Degaw/MnfMe7goQ3lTfQ13Vw4qY/Nj0979BGvMRpAYbs/BAxEvU8ew==} 269 | engines: {node: '>=18'} 270 | cpu: [ia32] 271 | os: [win32] 272 | 273 | '@esbuild/win32-x64@0.25.3': 274 | resolution: {integrity: sha512-ICgUR+kPimx0vvRzf+N/7L7tVSQeE3BYY+NhHRHXS1kBuPO7z2+7ea2HbhDyZdTephgvNvKrlDDKUexuCVBVvg==} 275 | engines: {node: '>=18'} 276 | cpu: [x64] 277 | os: [win32] 278 | 279 | '@eslint-community/eslint-utils@4.7.0': 280 | resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} 281 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 282 | peerDependencies: 283 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 284 | 285 | '@eslint-community/regexpp@4.12.1': 286 | resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} 287 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 288 | 289 | '@eslint/config-array@0.20.0': 290 | resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} 291 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 292 | 293 | '@eslint/config-helpers@0.2.2': 294 | resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} 295 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 296 | 297 | '@eslint/core@0.13.0': 298 | resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} 299 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 300 | 301 | '@eslint/eslintrc@3.3.1': 302 | resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} 303 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 304 | 305 | '@eslint/js@9.26.0': 306 | resolution: {integrity: sha512-I9XlJawFdSMvWjDt6wksMCrgns5ggLNfFwFvnShsleWruvXM514Qxk8V246efTw+eo9JABvVz+u3q2RiAowKxQ==} 307 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 308 | 309 | '@eslint/object-schema@2.1.6': 310 | resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} 311 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 312 | 313 | '@eslint/plugin-kit@0.2.8': 314 | resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} 315 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 316 | 317 | '@humanfs/core@0.19.1': 318 | resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} 319 | engines: {node: '>=18.18.0'} 320 | 321 | '@humanfs/node@0.16.6': 322 | resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} 323 | engines: {node: '>=18.18.0'} 324 | 325 | '@humanwhocodes/module-importer@1.0.1': 326 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 327 | engines: {node: '>=12.22'} 328 | 329 | '@humanwhocodes/retry@0.3.1': 330 | resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} 331 | engines: {node: '>=18.18'} 332 | 333 | '@humanwhocodes/retry@0.4.2': 334 | resolution: {integrity: sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==} 335 | engines: {node: '>=18.18'} 336 | 337 | '@jridgewell/gen-mapping@0.3.13': 338 | resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} 339 | 340 | '@jridgewell/resolve-uri@3.1.2': 341 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 342 | engines: {node: '>=6.0.0'} 343 | 344 | '@jridgewell/source-map@0.3.11': 345 | resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} 346 | 347 | '@jridgewell/sourcemap-codec@1.5.0': 348 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 349 | 350 | '@jridgewell/sourcemap-codec@1.5.5': 351 | resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} 352 | 353 | '@jridgewell/trace-mapping@0.3.31': 354 | resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==} 355 | 356 | '@jridgewell/trace-mapping@0.3.9': 357 | resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} 358 | 359 | '@kinde-oss/kinde-typescript-sdk@2.13.0': 360 | resolution: {integrity: sha512-cBH9a6dKQRyk1Bfh0gfAPGt9CbofCbtw3Q27hWJ5QzcYTG6SlJ6O2T0ctQ0yImgvXnSGTajwXRACjXCceW454A==} 361 | 362 | '@kinde/js-utils@0.23.0': 363 | resolution: {integrity: sha512-FNg2GVH9vE3Nzhu4uBChVIvp1mJta86nc7itViEr+Scp6C0DPBNNUcTQBgZJTqp4fRUz4+MuKh0tNGvggA2ZzQ==} 364 | peerDependencies: 365 | expo-secure-store: '>=11.0.0' 366 | peerDependenciesMeta: 367 | expo-secure-store: 368 | optional: true 369 | 370 | '@kinde/jwt-decoder@0.2.0': 371 | resolution: {integrity: sha512-dqtwCmAvywOVLkkUfp4UbqdvVLsK0cvHsJhU3gDY9rgjAdZhGw0vCreBW6j3MFLxbi6cZm7pMU7/O5SJgvN5Rw==} 372 | 373 | '@kinde/jwt-validator@0.4.0': 374 | resolution: {integrity: sha512-aseXLTD/rh/rZ2v85Xy493CEtuC49MA4Hbt6ObccqSJfIGLAeMrAtBh2m9DleigVkMuZ/99/U4PqLnaVDLt5OQ==} 375 | 376 | '@microsoft/api-extractor-model@7.30.6': 377 | resolution: {integrity: sha512-znmFn69wf/AIrwHya3fxX6uB5etSIn6vg4Q4RB/tb5VDDs1rqREc+AvMC/p19MUN13CZ7+V/8pkYPTj7q8tftg==} 378 | 379 | '@microsoft/api-extractor@7.52.7': 380 | resolution: {integrity: sha512-YLdPS644MfbLJt4hArP1WcldcaEUBh9wnFjcLEcQnVG0AMznbLh2sdE0F5Wr+w6+Lyp5/XUPvRAg3sYGSP3GCw==} 381 | hasBin: true 382 | 383 | '@microsoft/tsdoc-config@0.17.1': 384 | resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} 385 | 386 | '@microsoft/tsdoc@0.15.1': 387 | resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} 388 | 389 | '@modelcontextprotocol/sdk@1.11.0': 390 | resolution: {integrity: sha512-k/1pb70eD638anoi0e8wUGAlbMJXyvdV4p62Ko+EZ7eBe1xMx8Uhak1R5DgfoofsK5IBBnRwsYGTaLZl+6/+RQ==} 391 | engines: {node: '>=18'} 392 | 393 | '@noble/hashes@1.8.0': 394 | resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} 395 | engines: {node: ^14.21.3 || >=16} 396 | 397 | '@nodelib/fs.scandir@2.1.5': 398 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 399 | engines: {node: '>= 8'} 400 | 401 | '@nodelib/fs.stat@2.0.5': 402 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 403 | engines: {node: '>= 8'} 404 | 405 | '@nodelib/fs.walk@1.2.8': 406 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 407 | engines: {node: '>= 8'} 408 | 409 | '@paralleldrive/cuid2@2.2.2': 410 | resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} 411 | 412 | '@pkgr/core@0.2.9': 413 | resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} 414 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 415 | 416 | '@rollup/pluginutils@5.1.4': 417 | resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} 418 | engines: {node: '>=14.0.0'} 419 | peerDependencies: 420 | rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 421 | peerDependenciesMeta: 422 | rollup: 423 | optional: true 424 | 425 | '@rollup/rollup-android-arm-eabi@4.40.1': 426 | resolution: {integrity: sha512-kxz0YeeCrRUHz3zyqvd7n+TVRlNyTifBsmnmNPtk3hQURUyG9eAB+usz6DAwagMusjx/zb3AjvDUvhFGDAexGw==} 427 | cpu: [arm] 428 | os: [android] 429 | 430 | '@rollup/rollup-android-arm64@4.40.1': 431 | resolution: {integrity: sha512-PPkxTOisoNC6TpnDKatjKkjRMsdaWIhyuMkA4UsBXT9WEZY4uHezBTjs6Vl4PbqQQeu6oION1w2voYZv9yquCw==} 432 | cpu: [arm64] 433 | os: [android] 434 | 435 | '@rollup/rollup-darwin-arm64@4.40.1': 436 | resolution: {integrity: sha512-VWXGISWFY18v/0JyNUy4A46KCFCb9NVsH+1100XP31lud+TzlezBbz24CYzbnA4x6w4hx+NYCXDfnvDVO6lcAA==} 437 | cpu: [arm64] 438 | os: [darwin] 439 | 440 | '@rollup/rollup-darwin-x64@4.40.1': 441 | resolution: {integrity: sha512-nIwkXafAI1/QCS7pxSpv/ZtFW6TXcNUEHAIA9EIyw5OzxJZQ1YDrX+CL6JAIQgZ33CInl1R6mHet9Y/UZTg2Bw==} 442 | cpu: [x64] 443 | os: [darwin] 444 | 445 | '@rollup/rollup-freebsd-arm64@4.40.1': 446 | resolution: {integrity: sha512-BdrLJ2mHTrIYdaS2I99mriyJfGGenSaP+UwGi1kB9BLOCu9SR8ZpbkmmalKIALnRw24kM7qCN0IOm6L0S44iWw==} 447 | cpu: [arm64] 448 | os: [freebsd] 449 | 450 | '@rollup/rollup-freebsd-x64@4.40.1': 451 | resolution: {integrity: sha512-VXeo/puqvCG8JBPNZXZf5Dqq7BzElNJzHRRw3vjBE27WujdzuOPecDPc/+1DcdcTptNBep3861jNq0mYkT8Z6Q==} 452 | cpu: [x64] 453 | os: [freebsd] 454 | 455 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 456 | resolution: {integrity: sha512-ehSKrewwsESPt1TgSE/na9nIhWCosfGSFqv7vwEtjyAqZcvbGIg4JAcV7ZEh2tfj/IlfBeZjgOXm35iOOjadcg==} 457 | cpu: [arm] 458 | os: [linux] 459 | 460 | '@rollup/rollup-linux-arm-musleabihf@4.40.1': 461 | resolution: {integrity: sha512-m39iO/aaurh5FVIu/F4/Zsl8xppd76S4qoID8E+dSRQvTyZTOI2gVk3T4oqzfq1PtcvOfAVlwLMK3KRQMaR8lg==} 462 | cpu: [arm] 463 | os: [linux] 464 | 465 | '@rollup/rollup-linux-arm64-gnu@4.40.1': 466 | resolution: {integrity: sha512-Y+GHnGaku4aVLSgrT0uWe2o2Rq8te9hi+MwqGF9r9ORgXhmHK5Q71N757u0F8yU1OIwUIFy6YiJtKjtyktk5hg==} 467 | cpu: [arm64] 468 | os: [linux] 469 | 470 | '@rollup/rollup-linux-arm64-musl@4.40.1': 471 | resolution: {integrity: sha512-jEwjn3jCA+tQGswK3aEWcD09/7M5wGwc6+flhva7dsQNRZZTe30vkalgIzV4tjkopsTS9Jd7Y1Bsj6a4lzz8gQ==} 472 | cpu: [arm64] 473 | os: [linux] 474 | 475 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 476 | resolution: {integrity: sha512-ySyWikVhNzv+BV/IDCsrraOAZ3UaC8SZB67FZlqVwXwnFhPihOso9rPOxzZbjp81suB1O2Topw+6Ug3JNegejQ==} 477 | cpu: [loong64] 478 | os: [linux] 479 | 480 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 481 | resolution: {integrity: sha512-BvvA64QxZlh7WZWqDPPdt0GH4bznuL6uOO1pmgPnnv86rpUpc8ZxgZwcEgXvo02GRIZX1hQ0j0pAnhwkhwPqWg==} 482 | cpu: [ppc64] 483 | os: [linux] 484 | 485 | '@rollup/rollup-linux-riscv64-gnu@4.40.1': 486 | resolution: {integrity: sha512-EQSP+8+1VuSulm9RKSMKitTav89fKbHymTf25n5+Yr6gAPZxYWpj3DzAsQqoaHAk9YX2lwEyAf9S4W8F4l3VBQ==} 487 | cpu: [riscv64] 488 | os: [linux] 489 | 490 | '@rollup/rollup-linux-riscv64-musl@4.40.1': 491 | resolution: {integrity: sha512-n/vQ4xRZXKuIpqukkMXZt9RWdl+2zgGNx7Uda8NtmLJ06NL8jiHxUawbwC+hdSq1rrw/9CghCpEONor+l1e2gA==} 492 | cpu: [riscv64] 493 | os: [linux] 494 | 495 | '@rollup/rollup-linux-s390x-gnu@4.40.1': 496 | resolution: {integrity: sha512-h8d28xzYb98fMQKUz0w2fMc1XuGzLLjdyxVIbhbil4ELfk5/orZlSTpF/xdI9C8K0I8lCkq+1En2RJsawZekkg==} 497 | cpu: [s390x] 498 | os: [linux] 499 | 500 | '@rollup/rollup-linux-x64-gnu@4.40.1': 501 | resolution: {integrity: sha512-XiK5z70PEFEFqcNj3/zRSz/qX4bp4QIraTy9QjwJAb/Z8GM7kVUsD0Uk8maIPeTyPCP03ChdI+VVmJriKYbRHQ==} 502 | cpu: [x64] 503 | os: [linux] 504 | 505 | '@rollup/rollup-linux-x64-musl@4.40.1': 506 | resolution: {integrity: sha512-2BRORitq5rQ4Da9blVovzNCMaUlyKrzMSvkVR0D4qPuOy/+pMCrh1d7o01RATwVy+6Fa1WBw+da7QPeLWU/1mQ==} 507 | cpu: [x64] 508 | os: [linux] 509 | 510 | '@rollup/rollup-win32-arm64-msvc@4.40.1': 511 | resolution: {integrity: sha512-b2bcNm9Kbde03H+q+Jjw9tSfhYkzrDUf2d5MAd1bOJuVplXvFhWz7tRtWvD8/ORZi7qSCy0idW6tf2HgxSXQSg==} 512 | cpu: [arm64] 513 | os: [win32] 514 | 515 | '@rollup/rollup-win32-ia32-msvc@4.40.1': 516 | resolution: {integrity: sha512-DfcogW8N7Zg7llVEfpqWMZcaErKfsj9VvmfSyRjCyo4BI3wPEfrzTtJkZG6gKP/Z92wFm6rz2aDO7/JfiR/whA==} 517 | cpu: [ia32] 518 | os: [win32] 519 | 520 | '@rollup/rollup-win32-x64-msvc@4.40.1': 521 | resolution: {integrity: sha512-ECyOuDeH3C1I8jH2MK1RtBJW+YPMvSfT0a5NN0nHfQYnDSJ6tUiZH3gzwVP5/Kfh/+Tt7tpWVF9LXNTnhTJ3kA==} 522 | cpu: [x64] 523 | os: [win32] 524 | 525 | '@rushstack/node-core-library@5.13.1': 526 | resolution: {integrity: sha512-5yXhzPFGEkVc9Fu92wsNJ9jlvdwz4RNb2bMso+/+TH0nMm1jDDDsOIf4l8GAkPxGuwPw5DH24RliWVfSPhlW/Q==} 527 | peerDependencies: 528 | '@types/node': '*' 529 | peerDependenciesMeta: 530 | '@types/node': 531 | optional: true 532 | 533 | '@rushstack/rig-package@0.5.3': 534 | resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} 535 | 536 | '@rushstack/terminal@0.15.3': 537 | resolution: {integrity: sha512-DGJ0B2Vm69468kZCJkPj3AH5nN+nR9SPmC0rFHtzsS4lBQ7/dgOwtwVxYP7W9JPDMuRBkJ4KHmWKr036eJsj9g==} 538 | peerDependencies: 539 | '@types/node': '*' 540 | peerDependenciesMeta: 541 | '@types/node': 542 | optional: true 543 | 544 | '@rushstack/ts-command-line@5.0.1': 545 | resolution: {integrity: sha512-bsbUucn41UXrQK7wgM8CNM/jagBytEyJqXw/umtI8d68vFm1Jwxh1OtLrlW7uGZgjCWiiPH6ooUNa1aVsuVr3Q==} 546 | 547 | '@tsconfig/node10@1.0.11': 548 | resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} 549 | 550 | '@tsconfig/node12@1.0.11': 551 | resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} 552 | 553 | '@tsconfig/node14@1.0.3': 554 | resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} 555 | 556 | '@tsconfig/node16@1.0.4': 557 | resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} 558 | 559 | '@tsconfig/node19@19.1.5': 560 | resolution: {integrity: sha512-dgXw9wSRjfmHSu1THzmkouix4afgoHOi3mzsVnheNteYY3SRXhSkb9b9zTMhVCUYHv+Gu8w/NZKmw+pOktQtRQ==} 561 | 562 | '@types/argparse@1.0.38': 563 | resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} 564 | 565 | '@types/body-parser@1.19.6': 566 | resolution: {integrity: sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g==} 567 | 568 | '@types/connect@3.4.38': 569 | resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} 570 | 571 | '@types/cookiejar@2.1.5': 572 | resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} 573 | 574 | '@types/estree@1.0.7': 575 | resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} 576 | 577 | '@types/express-serve-static-core@4.19.7': 578 | resolution: {integrity: sha512-FvPtiIf1LfhzsaIXhv/PHan/2FeQBbtBDtfX2QfvPxdUelMDEckK08SM6nqo1MIZY3RUlfA+HV8+hFUSio78qg==} 579 | 580 | '@types/express-session@1.18.1': 581 | resolution: {integrity: sha512-S6TkD/lljxDlQ2u/4A70luD8/ZxZcrU5pQwI1rVXCiaVIywoFgbA+PIUNDjPhQpPdK0dGleLtYc/y7XWBfclBg==} 582 | 583 | '@types/express@4.17.23': 584 | resolution: {integrity: sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ==} 585 | 586 | '@types/http-errors@2.0.5': 587 | resolution: {integrity: sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg==} 588 | 589 | '@types/json-schema@7.0.15': 590 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 591 | 592 | '@types/methods@1.1.4': 593 | resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} 594 | 595 | '@types/mime@1.3.5': 596 | resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} 597 | 598 | '@types/node@20.17.32': 599 | resolution: {integrity: sha512-zeMXFn8zQ+UkjK4ws0RiOC9EWByyW1CcVmLe+2rQocXRsGEDxUCwPEIVgpsGcLHS/P8JkT0oa3839BRABS0oPw==} 600 | 601 | '@types/qs@6.14.0': 602 | resolution: {integrity: sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ==} 603 | 604 | '@types/range-parser@1.2.7': 605 | resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} 606 | 607 | '@types/send@0.17.5': 608 | resolution: {integrity: sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w==} 609 | 610 | '@types/send@1.2.0': 611 | resolution: {integrity: sha512-zBF6vZJn1IaMpg3xUF25VK3gd3l8zwE0ZLRX7dsQyQi+jp4E8mMDJNGDYnYse+bQhYwWERTxVwHpi3dMOq7RKQ==} 612 | 613 | '@types/serve-static@1.15.9': 614 | resolution: {integrity: sha512-dOTIuqpWLyl3BBXU3maNQsS4A3zuuoYRNIvYSxxhebPfXg2mzWQEPne/nlJ37yOse6uGgR386uTpdsx4D0QZWA==} 615 | 616 | '@types/superagent@8.1.9': 617 | resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} 618 | 619 | '@types/supertest@6.0.3': 620 | resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} 621 | 622 | '@typescript-eslint/eslint-plugin@8.31.1': 623 | resolution: {integrity: sha512-oUlH4h1ABavI4F0Xnl8/fOtML/eu8nI2A1nYd+f+55XI0BLu+RIqKoCiZKNo6DtqZBEQm5aNKA20G3Z5w3R6GQ==} 624 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 625 | peerDependencies: 626 | '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 627 | eslint: ^8.57.0 || ^9.0.0 628 | typescript: '>=4.8.4 <5.9.0' 629 | 630 | '@typescript-eslint/parser@8.31.1': 631 | resolution: {integrity: sha512-oU/OtYVydhXnumd0BobL9rkJg7wFJ9bFFPmSmB/bf/XWN85hlViji59ko6bSKBXyseT9V8l+CN1nwmlbiN0G7Q==} 632 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 633 | peerDependencies: 634 | eslint: ^8.57.0 || ^9.0.0 635 | typescript: '>=4.8.4 <5.9.0' 636 | 637 | '@typescript-eslint/scope-manager@8.31.1': 638 | resolution: {integrity: sha512-BMNLOElPxrtNQMIsFHE+3P0Yf1z0dJqV9zLdDxN/xLlWMlXK/ApEsVEKzpizg9oal8bAT5Sc7+ocal7AC1HCVw==} 639 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 640 | 641 | '@typescript-eslint/type-utils@8.31.1': 642 | resolution: {integrity: sha512-fNaT/m9n0+dpSp8G/iOQ05GoHYXbxw81x+yvr7TArTuZuCA6VVKbqWYVZrV5dVagpDTtj/O8k5HBEE/p/HM5LA==} 643 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 644 | peerDependencies: 645 | eslint: ^8.57.0 || ^9.0.0 646 | typescript: '>=4.8.4 <5.9.0' 647 | 648 | '@typescript-eslint/types@8.31.1': 649 | resolution: {integrity: sha512-SfepaEFUDQYRoA70DD9GtytljBePSj17qPxFHA/h3eg6lPTqGJ5mWOtbXCk1YrVU1cTJRd14nhaXWFu0l2troQ==} 650 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 651 | 652 | '@typescript-eslint/typescript-estree@8.31.1': 653 | resolution: {integrity: sha512-kaA0ueLe2v7KunYOyWYtlf/QhhZb7+qh4Yw6Ni5kgukMIG+iP773tjgBiLWIXYumWCwEq3nLW+TUywEp8uEeag==} 654 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 655 | peerDependencies: 656 | typescript: '>=4.8.4 <5.9.0' 657 | 658 | '@typescript-eslint/utils@8.31.1': 659 | resolution: {integrity: sha512-2DSI4SNfF5T4oRveQ4nUrSjUqjMND0nLq9rEkz0gfGr3tg0S5KB6DhwR+WZPCjzkZl3cH+4x2ce3EsL50FubjQ==} 660 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 661 | peerDependencies: 662 | eslint: ^8.57.0 || ^9.0.0 663 | typescript: '>=4.8.4 <5.9.0' 664 | 665 | '@typescript-eslint/visitor-keys@8.31.1': 666 | resolution: {integrity: sha512-I+/rgqOVBn6f0o7NDTmAPWWC6NuqhV174lfYvAm9fUaWeiefLdux9/YI3/nLugEn9L8fcSi0XmpKi/r5u0nmpw==} 667 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 668 | 669 | '@vitest/expect@3.1.2': 670 | resolution: {integrity: sha512-O8hJgr+zREopCAqWl3uCVaOdqJwZ9qaDwUP7vy3Xigad0phZe9APxKhPcDNqYYi0rX5oMvwJMSCAXY2afqeTSA==} 671 | 672 | '@vitest/mocker@3.1.2': 673 | resolution: {integrity: sha512-kOtd6K2lc7SQ0mBqYv/wdGedlqPdM/B38paPY+OwJ1XiNi44w3Fpog82UfOibmHaV9Wod18A09I9SCKLyDMqgw==} 674 | peerDependencies: 675 | msw: ^2.4.9 676 | vite: ^5.0.0 || ^6.0.0 677 | peerDependenciesMeta: 678 | msw: 679 | optional: true 680 | vite: 681 | optional: true 682 | 683 | '@vitest/pretty-format@3.1.2': 684 | resolution: {integrity: sha512-R0xAiHuWeDjTSB3kQ3OQpT8Rx3yhdOAIm/JM4axXxnG7Q/fS8XUwggv/A4xzbQA+drYRjzkMnpYnOGAc4oeq8w==} 685 | 686 | '@vitest/runner@3.1.2': 687 | resolution: {integrity: sha512-bhLib9l4xb4sUMPXnThbnhX2Yi8OutBMA8Yahxa7yavQsFDtwY/jrUZwpKp2XH9DhRFJIeytlyGpXCqZ65nR+g==} 688 | 689 | '@vitest/snapshot@3.1.2': 690 | resolution: {integrity: sha512-Q1qkpazSF/p4ApZg1vfZSQ5Yw6OCQxVMVrLjslbLFA1hMDrT2uxtqMaw8Tc/jy5DLka1sNs1Y7rBcftMiaSH/Q==} 691 | 692 | '@vitest/spy@3.1.2': 693 | resolution: {integrity: sha512-OEc5fSXMws6sHVe4kOFyDSj/+4MSwst0ib4un0DlcYgQvRuYQ0+M2HyqGaauUMnjq87tmUaMNDxKQx7wNfVqPA==} 694 | 695 | '@vitest/utils@3.1.2': 696 | resolution: {integrity: sha512-5GGd0ytZ7BH3H6JTj9Kw7Prn1Nbg0wZVrIvou+UWxm54d+WoXXgAgjFJ8wn3LdagWLFSEfpPeyYrByZaGEZHLg==} 697 | 698 | '@volar/language-core@2.4.13': 699 | resolution: {integrity: sha512-MnQJ7eKchJx5Oz+YdbqyFUk8BN6jasdJv31n/7r6/WwlOOv7qzvot6B66887l2ST3bUW4Mewml54euzpJWA6bg==} 700 | 701 | '@volar/source-map@2.4.13': 702 | resolution: {integrity: sha512-l/EBcc2FkvHgz2ZxV+OZK3kMSroMr7nN3sZLF2/f6kWW66q8+tEL4giiYyFjt0BcubqJhBt6soYIrAPhg/Yr+Q==} 703 | 704 | '@volar/typescript@2.4.13': 705 | resolution: {integrity: sha512-Ukz4xv84swJPupZeoFsQoeJEOm7U9pqsEnaGGgt5ni3SCTa22m8oJP5Nng3Wed7Uw5RBELdLxxORX8YhJPyOgQ==} 706 | 707 | '@vue/compiler-core@3.5.13': 708 | resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} 709 | 710 | '@vue/compiler-dom@3.5.13': 711 | resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} 712 | 713 | '@vue/compiler-vue2@2.7.16': 714 | resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} 715 | 716 | '@vue/language-core@2.2.0': 717 | resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} 718 | peerDependencies: 719 | typescript: '*' 720 | peerDependenciesMeta: 721 | typescript: 722 | optional: true 723 | 724 | '@vue/shared@3.5.13': 725 | resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} 726 | 727 | accepts@1.3.8: 728 | resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} 729 | engines: {node: '>= 0.6'} 730 | 731 | accepts@2.0.0: 732 | resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} 733 | engines: {node: '>= 0.6'} 734 | 735 | acorn-jsx@5.3.2: 736 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 737 | peerDependencies: 738 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 739 | 740 | acorn-walk@8.3.4: 741 | resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} 742 | engines: {node: '>=0.4.0'} 743 | 744 | acorn@8.14.1: 745 | resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} 746 | engines: {node: '>=0.4.0'} 747 | hasBin: true 748 | 749 | acorn@8.15.0: 750 | resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} 751 | engines: {node: '>=0.4.0'} 752 | hasBin: true 753 | 754 | ajv-draft-04@1.0.0: 755 | resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} 756 | peerDependencies: 757 | ajv: ^8.5.0 758 | peerDependenciesMeta: 759 | ajv: 760 | optional: true 761 | 762 | ajv-formats@3.0.1: 763 | resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} 764 | peerDependencies: 765 | ajv: ^8.0.0 766 | peerDependenciesMeta: 767 | ajv: 768 | optional: true 769 | 770 | ajv@6.12.6: 771 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 772 | 773 | ajv@8.12.0: 774 | resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} 775 | 776 | ajv@8.13.0: 777 | resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} 778 | 779 | alien-signals@0.4.14: 780 | resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} 781 | 782 | ansi-escapes@7.1.1: 783 | resolution: {integrity: sha512-Zhl0ErHcSRUaVfGUeUdDuLgpkEo8KIFjB4Y9uAc46ScOpdDiU1Dbyplh7qWJeJ/ZHpbyMSM26+X3BySgnIz40Q==} 784 | engines: {node: '>=18'} 785 | 786 | ansi-regex@6.2.2: 787 | resolution: {integrity: sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==} 788 | engines: {node: '>=12'} 789 | 790 | ansi-styles@4.3.0: 791 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 792 | engines: {node: '>=8'} 793 | 794 | ansi-styles@6.2.3: 795 | resolution: {integrity: sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==} 796 | engines: {node: '>=12'} 797 | 798 | anymatch@3.1.3: 799 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 800 | engines: {node: '>= 8'} 801 | 802 | arg@4.1.3: 803 | resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} 804 | 805 | argparse@1.0.10: 806 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} 807 | 808 | argparse@2.0.1: 809 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 810 | 811 | array-flatten@1.1.1: 812 | resolution: {integrity: sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==} 813 | 814 | asap@2.0.6: 815 | resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} 816 | 817 | assertion-error@2.0.1: 818 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 819 | engines: {node: '>=12'} 820 | 821 | asynckit@0.4.0: 822 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 823 | 824 | aws-jwt-verify@5.0.0: 825 | resolution: {integrity: sha512-FQM5EYEm7AnVJ3oeTpvBZQm7hYnpI067Em1oopHBs7cCNAcw8Aw8NFbojFjkNXifsOzyYe1ks+bg7Q9fMsTZSA==} 826 | engines: {node: '>=16.0.0'} 827 | 828 | balanced-match@1.0.2: 829 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 830 | 831 | binary-extensions@2.3.0: 832 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 833 | engines: {node: '>=8'} 834 | 835 | body-parser@1.20.3: 836 | resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} 837 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 838 | 839 | body-parser@2.2.0: 840 | resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} 841 | engines: {node: '>=18'} 842 | 843 | brace-expansion@1.1.11: 844 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 845 | 846 | brace-expansion@2.0.1: 847 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 848 | 849 | braces@3.0.3: 850 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 851 | engines: {node: '>=8'} 852 | 853 | buffer-from@1.1.2: 854 | resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} 855 | 856 | bytes@3.1.2: 857 | resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} 858 | engines: {node: '>= 0.8'} 859 | 860 | cac@6.7.14: 861 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 862 | engines: {node: '>=8'} 863 | 864 | call-bind-apply-helpers@1.0.2: 865 | resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} 866 | engines: {node: '>= 0.4'} 867 | 868 | call-bound@1.0.4: 869 | resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} 870 | engines: {node: '>= 0.4'} 871 | 872 | callsites@3.1.0: 873 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 874 | engines: {node: '>=6'} 875 | 876 | chai@5.2.0: 877 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 878 | engines: {node: '>=12'} 879 | 880 | chalk@4.1.2: 881 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 882 | engines: {node: '>=10'} 883 | 884 | chalk@5.6.2: 885 | resolution: {integrity: sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==} 886 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 887 | 888 | check-error@2.1.1: 889 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 890 | engines: {node: '>= 16'} 891 | 892 | chokidar@3.6.0: 893 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 894 | engines: {node: '>= 8.10.0'} 895 | 896 | cli-cursor@5.0.0: 897 | resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} 898 | engines: {node: '>=18'} 899 | 900 | cli-truncate@4.0.0: 901 | resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} 902 | engines: {node: '>=18'} 903 | 904 | color-convert@2.0.1: 905 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 906 | engines: {node: '>=7.0.0'} 907 | 908 | color-name@1.1.4: 909 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 910 | 911 | colorette@2.0.20: 912 | resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} 913 | 914 | combined-stream@1.0.8: 915 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 916 | engines: {node: '>= 0.8'} 917 | 918 | commander@13.1.0: 919 | resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} 920 | engines: {node: '>=18'} 921 | 922 | commander@2.20.3: 923 | resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} 924 | 925 | compare-versions@6.1.1: 926 | resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} 927 | 928 | component-emitter@1.3.1: 929 | resolution: {integrity: sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ==} 930 | 931 | concat-map@0.0.1: 932 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 933 | 934 | confbox@0.1.8: 935 | resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} 936 | 937 | confbox@0.2.2: 938 | resolution: {integrity: sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ==} 939 | 940 | content-disposition@0.5.4: 941 | resolution: {integrity: sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==} 942 | engines: {node: '>= 0.6'} 943 | 944 | content-disposition@1.0.0: 945 | resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} 946 | engines: {node: '>= 0.6'} 947 | 948 | content-type@1.0.5: 949 | resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} 950 | engines: {node: '>= 0.6'} 951 | 952 | cookie-signature@1.0.6: 953 | resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} 954 | 955 | cookie-signature@1.0.7: 956 | resolution: {integrity: sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==} 957 | 958 | cookie-signature@1.2.2: 959 | resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} 960 | engines: {node: '>=6.6.0'} 961 | 962 | cookie@0.7.1: 963 | resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} 964 | engines: {node: '>= 0.6'} 965 | 966 | cookie@0.7.2: 967 | resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} 968 | engines: {node: '>= 0.6'} 969 | 970 | cookiejar@2.1.4: 971 | resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} 972 | 973 | cors@2.8.5: 974 | resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} 975 | engines: {node: '>= 0.10'} 976 | 977 | create-require@1.1.1: 978 | resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} 979 | 980 | cross-spawn@7.0.6: 981 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 982 | engines: {node: '>= 8'} 983 | 984 | de-indent@1.0.2: 985 | resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} 986 | 987 | debug@2.6.9: 988 | resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} 989 | peerDependencies: 990 | supports-color: '*' 991 | peerDependenciesMeta: 992 | supports-color: 993 | optional: true 994 | 995 | debug@4.4.0: 996 | resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} 997 | engines: {node: '>=6.0'} 998 | peerDependencies: 999 | supports-color: '*' 1000 | peerDependenciesMeta: 1001 | supports-color: 1002 | optional: true 1003 | 1004 | debug@4.4.3: 1005 | resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} 1006 | engines: {node: '>=6.0'} 1007 | peerDependencies: 1008 | supports-color: '*' 1009 | peerDependenciesMeta: 1010 | supports-color: 1011 | optional: true 1012 | 1013 | deep-eql@5.0.2: 1014 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 1015 | engines: {node: '>=6'} 1016 | 1017 | deep-is@0.1.4: 1018 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 1019 | 1020 | delayed-stream@1.0.0: 1021 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 1022 | engines: {node: '>=0.4.0'} 1023 | 1024 | depd@2.0.0: 1025 | resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} 1026 | engines: {node: '>= 0.8'} 1027 | 1028 | destroy@1.2.0: 1029 | resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} 1030 | engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} 1031 | 1032 | dezalgo@1.0.4: 1033 | resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} 1034 | 1035 | diff@4.0.2: 1036 | resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} 1037 | engines: {node: '>=0.3.1'} 1038 | 1039 | dunder-proto@1.0.1: 1040 | resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} 1041 | engines: {node: '>= 0.4'} 1042 | 1043 | ee-first@1.1.1: 1044 | resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} 1045 | 1046 | emoji-regex@10.5.0: 1047 | resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} 1048 | 1049 | encodeurl@1.0.2: 1050 | resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} 1051 | engines: {node: '>= 0.8'} 1052 | 1053 | encodeurl@2.0.0: 1054 | resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} 1055 | engines: {node: '>= 0.8'} 1056 | 1057 | entities@4.5.0: 1058 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 1059 | engines: {node: '>=0.12'} 1060 | 1061 | environment@1.1.0: 1062 | resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} 1063 | engines: {node: '>=18'} 1064 | 1065 | es-define-property@1.0.1: 1066 | resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} 1067 | engines: {node: '>= 0.4'} 1068 | 1069 | es-errors@1.3.0: 1070 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 1071 | engines: {node: '>= 0.4'} 1072 | 1073 | es-module-lexer@1.7.0: 1074 | resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} 1075 | 1076 | es-object-atoms@1.1.1: 1077 | resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} 1078 | engines: {node: '>= 0.4'} 1079 | 1080 | es-set-tostringtag@2.1.0: 1081 | resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} 1082 | engines: {node: '>= 0.4'} 1083 | 1084 | esbuild@0.25.3: 1085 | resolution: {integrity: sha512-qKA6Pvai73+M2FtftpNKRxJ78GIjmFXFxd/1DVBqGo/qNhLSfv+G12n9pNoWdytJC8U00TrViOwpjT0zgqQS8Q==} 1086 | engines: {node: '>=18'} 1087 | hasBin: true 1088 | 1089 | escape-html@1.0.3: 1090 | resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} 1091 | 1092 | escape-string-regexp@4.0.0: 1093 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 1094 | engines: {node: '>=10'} 1095 | 1096 | eslint-config-prettier@10.1.2: 1097 | resolution: {integrity: sha512-Epgp/EofAUeEpIdZkW60MHKvPyru1ruQJxPL+WIycnaPApuseK0Zpkrh/FwL9oIpQvIhJwV7ptOy0DWUjTlCiA==} 1098 | hasBin: true 1099 | peerDependencies: 1100 | eslint: '>=7.0.0' 1101 | 1102 | eslint-plugin-prettier@5.5.4: 1103 | resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} 1104 | engines: {node: ^14.18.0 || >=16.0.0} 1105 | peerDependencies: 1106 | '@types/eslint': '>=8.0.0' 1107 | eslint: '>=8.0.0' 1108 | eslint-config-prettier: '>= 7.0.0 <10.0.0 || >=10.1.0' 1109 | prettier: '>=3.0.0' 1110 | peerDependenciesMeta: 1111 | '@types/eslint': 1112 | optional: true 1113 | eslint-config-prettier: 1114 | optional: true 1115 | 1116 | eslint-scope@8.3.0: 1117 | resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} 1118 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1119 | 1120 | eslint-visitor-keys@3.4.3: 1121 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 1122 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1123 | 1124 | eslint-visitor-keys@4.2.0: 1125 | resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} 1126 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1127 | 1128 | eslint@9.26.0: 1129 | resolution: {integrity: sha512-Hx0MOjPh6uK9oq9nVsATZKE/Wlbai7KFjfCuw9UHaguDW3x+HF0O5nIi3ud39TWgrTjTO5nHxmL3R1eANinWHQ==} 1130 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1131 | hasBin: true 1132 | peerDependencies: 1133 | jiti: '*' 1134 | peerDependenciesMeta: 1135 | jiti: 1136 | optional: true 1137 | 1138 | espree@10.3.0: 1139 | resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} 1140 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 1141 | 1142 | esquery@1.6.0: 1143 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1144 | engines: {node: '>=0.10'} 1145 | 1146 | esrecurse@4.3.0: 1147 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1148 | engines: {node: '>=4.0'} 1149 | 1150 | estraverse@5.3.0: 1151 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1152 | engines: {node: '>=4.0'} 1153 | 1154 | estree-walker@2.0.2: 1155 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1156 | 1157 | estree-walker@3.0.3: 1158 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1159 | 1160 | esutils@2.0.3: 1161 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1162 | engines: {node: '>=0.10.0'} 1163 | 1164 | etag@1.8.1: 1165 | resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} 1166 | engines: {node: '>= 0.6'} 1167 | 1168 | eventemitter3@5.0.1: 1169 | resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} 1170 | 1171 | eventsource-parser@3.0.1: 1172 | resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} 1173 | engines: {node: '>=18.0.0'} 1174 | 1175 | eventsource@3.0.6: 1176 | resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} 1177 | engines: {node: '>=18.0.0'} 1178 | 1179 | execa@8.0.1: 1180 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1181 | engines: {node: '>=16.17'} 1182 | 1183 | expect-type@1.2.1: 1184 | resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} 1185 | engines: {node: '>=12.0.0'} 1186 | 1187 | express-rate-limit@7.5.0: 1188 | resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} 1189 | engines: {node: '>= 16'} 1190 | peerDependencies: 1191 | express: ^4.11 || 5 || ^5.0.0-beta.1 1192 | 1193 | express-session@1.18.1: 1194 | resolution: {integrity: sha512-a5mtTqEaZvBCL9A9aqkrtfz+3SMDhOVUnjafjo+s7A9Txkq+SVX2DLvSp1Zrv4uCXa3lMSK3viWnh9Gg07PBUA==} 1195 | engines: {node: '>= 0.8.0'} 1196 | 1197 | express@4.21.2: 1198 | resolution: {integrity: sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==} 1199 | engines: {node: '>= 0.10.0'} 1200 | 1201 | express@5.1.0: 1202 | resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} 1203 | engines: {node: '>= 18'} 1204 | 1205 | exsolve@1.0.5: 1206 | resolution: {integrity: sha512-pz5dvkYYKQ1AHVrgOzBKWeP4u4FRb3a6DNK2ucr0OoNwYIU4QWsJ+NM36LLzORT+z845MzKHHhpXiUF5nvQoJg==} 1207 | 1208 | fast-deep-equal@3.1.3: 1209 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1210 | 1211 | fast-diff@1.3.0: 1212 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1213 | 1214 | fast-glob@3.3.3: 1215 | resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} 1216 | engines: {node: '>=8.6.0'} 1217 | 1218 | fast-json-stable-stringify@2.1.0: 1219 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1220 | 1221 | fast-levenshtein@2.0.6: 1222 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1223 | 1224 | fast-safe-stringify@2.1.1: 1225 | resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} 1226 | 1227 | fastq@1.19.1: 1228 | resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} 1229 | 1230 | fdir@6.4.4: 1231 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 1232 | peerDependencies: 1233 | picomatch: ^3 || ^4 1234 | peerDependenciesMeta: 1235 | picomatch: 1236 | optional: true 1237 | 1238 | file-entry-cache@8.0.0: 1239 | resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} 1240 | engines: {node: '>=16.0.0'} 1241 | 1242 | fill-range@7.1.1: 1243 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1244 | engines: {node: '>=8'} 1245 | 1246 | finalhandler@1.3.1: 1247 | resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} 1248 | engines: {node: '>= 0.8'} 1249 | 1250 | finalhandler@2.1.0: 1251 | resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} 1252 | engines: {node: '>= 0.8'} 1253 | 1254 | find-up@5.0.0: 1255 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1256 | engines: {node: '>=10'} 1257 | 1258 | flat-cache@4.0.1: 1259 | resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} 1260 | engines: {node: '>=16'} 1261 | 1262 | flatted@3.3.3: 1263 | resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} 1264 | 1265 | form-data@4.0.2: 1266 | resolution: {integrity: sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==} 1267 | engines: {node: '>= 6'} 1268 | 1269 | formidable@3.5.4: 1270 | resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} 1271 | engines: {node: '>=14.0.0'} 1272 | 1273 | forwarded@0.2.0: 1274 | resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} 1275 | engines: {node: '>= 0.6'} 1276 | 1277 | fresh@0.5.2: 1278 | resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} 1279 | engines: {node: '>= 0.6'} 1280 | 1281 | fresh@2.0.0: 1282 | resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} 1283 | engines: {node: '>= 0.8'} 1284 | 1285 | fs-extra@11.3.0: 1286 | resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} 1287 | engines: {node: '>=14.14'} 1288 | 1289 | fsevents@2.3.3: 1290 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1291 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1292 | os: [darwin] 1293 | 1294 | function-bind@1.1.2: 1295 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1296 | 1297 | get-east-asian-width@1.4.0: 1298 | resolution: {integrity: sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q==} 1299 | engines: {node: '>=18'} 1300 | 1301 | get-intrinsic@1.3.0: 1302 | resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} 1303 | engines: {node: '>= 0.4'} 1304 | 1305 | get-proto@1.0.1: 1306 | resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} 1307 | engines: {node: '>= 0.4'} 1308 | 1309 | get-stream@8.0.1: 1310 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1311 | engines: {node: '>=16'} 1312 | 1313 | glob-parent@5.1.2: 1314 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1315 | engines: {node: '>= 6'} 1316 | 1317 | glob-parent@6.0.2: 1318 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1319 | engines: {node: '>=10.13.0'} 1320 | 1321 | globals@14.0.0: 1322 | resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} 1323 | engines: {node: '>=18'} 1324 | 1325 | globals@16.0.0: 1326 | resolution: {integrity: sha512-iInW14XItCXET01CQFqudPOWP2jYMl7T+QRQT+UNcR/iQncN/F0UNpgd76iFkBPgNQb4+X3LV9tLJYzwh+Gl3A==} 1327 | engines: {node: '>=18'} 1328 | 1329 | gopd@1.2.0: 1330 | resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} 1331 | engines: {node: '>= 0.4'} 1332 | 1333 | graceful-fs@4.2.11: 1334 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} 1335 | 1336 | graphemer@1.4.0: 1337 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1338 | 1339 | has-flag@3.0.0: 1340 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} 1341 | engines: {node: '>=4'} 1342 | 1343 | has-flag@4.0.0: 1344 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1345 | engines: {node: '>=8'} 1346 | 1347 | has-symbols@1.1.0: 1348 | resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} 1349 | engines: {node: '>= 0.4'} 1350 | 1351 | has-tostringtag@1.0.2: 1352 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1353 | engines: {node: '>= 0.4'} 1354 | 1355 | hasown@2.0.2: 1356 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1357 | engines: {node: '>= 0.4'} 1358 | 1359 | he@1.2.0: 1360 | resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} 1361 | hasBin: true 1362 | 1363 | http-errors@2.0.0: 1364 | resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} 1365 | engines: {node: '>= 0.8'} 1366 | 1367 | human-signals@5.0.0: 1368 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1369 | engines: {node: '>=16.17.0'} 1370 | 1371 | husky@9.1.7: 1372 | resolution: {integrity: sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==} 1373 | engines: {node: '>=18'} 1374 | hasBin: true 1375 | 1376 | iconv-lite@0.4.24: 1377 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} 1378 | engines: {node: '>=0.10.0'} 1379 | 1380 | iconv-lite@0.6.3: 1381 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1382 | engines: {node: '>=0.10.0'} 1383 | 1384 | ignore-by-default@1.0.1: 1385 | resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} 1386 | 1387 | ignore@5.3.2: 1388 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1389 | engines: {node: '>= 4'} 1390 | 1391 | import-fresh@3.3.1: 1392 | resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==} 1393 | engines: {node: '>=6'} 1394 | 1395 | import-lazy@4.0.0: 1396 | resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} 1397 | engines: {node: '>=8'} 1398 | 1399 | imurmurhash@0.1.4: 1400 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1401 | engines: {node: '>=0.8.19'} 1402 | 1403 | inherits@2.0.4: 1404 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1405 | 1406 | ipaddr.js@1.9.1: 1407 | resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} 1408 | engines: {node: '>= 0.10'} 1409 | 1410 | is-binary-path@2.1.0: 1411 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1412 | engines: {node: '>=8'} 1413 | 1414 | is-core-module@2.16.1: 1415 | resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} 1416 | engines: {node: '>= 0.4'} 1417 | 1418 | is-extglob@2.1.1: 1419 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1420 | engines: {node: '>=0.10.0'} 1421 | 1422 | is-fullwidth-code-point@4.0.0: 1423 | resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} 1424 | engines: {node: '>=12'} 1425 | 1426 | is-fullwidth-code-point@5.1.0: 1427 | resolution: {integrity: sha512-5XHYaSyiqADb4RnZ1Bdad6cPp8Toise4TzEjcOYDHZkTCbKgiUl7WTUCpNWHuxmDt91wnsZBc9xinNzopv3JMQ==} 1428 | engines: {node: '>=18'} 1429 | 1430 | is-glob@4.0.3: 1431 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1432 | engines: {node: '>=0.10.0'} 1433 | 1434 | is-number@7.0.0: 1435 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1436 | engines: {node: '>=0.12.0'} 1437 | 1438 | is-promise@4.0.0: 1439 | resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} 1440 | 1441 | is-stream@3.0.0: 1442 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1443 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1444 | 1445 | isexe@2.0.0: 1446 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1447 | 1448 | jju@1.4.0: 1449 | resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} 1450 | 1451 | js-yaml@4.1.0: 1452 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1453 | hasBin: true 1454 | 1455 | json-buffer@3.0.1: 1456 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1457 | 1458 | json-schema-traverse@0.4.1: 1459 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1460 | 1461 | json-schema-traverse@1.0.0: 1462 | resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} 1463 | 1464 | json-stable-stringify-without-jsonify@1.0.1: 1465 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1466 | 1467 | jsonfile@6.1.0: 1468 | resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} 1469 | 1470 | jsrsasign@11.1.0: 1471 | resolution: {integrity: sha512-Ov74K9GihaK9/9WncTe1mPmvrO7Py665TUfUKvraXBpu+xcTWitrtuOwcjf4KMU9maPaYn0OuaWy0HOzy/GBXg==} 1472 | 1473 | keyv@4.5.4: 1474 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1475 | 1476 | kolorist@1.8.0: 1477 | resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} 1478 | 1479 | levn@0.4.1: 1480 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1481 | engines: {node: '>= 0.8.0'} 1482 | 1483 | lilconfig@3.1.3: 1484 | resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} 1485 | engines: {node: '>=14'} 1486 | 1487 | lint-staged@15.5.2: 1488 | resolution: {integrity: sha512-YUSOLq9VeRNAo/CTaVmhGDKG+LBtA8KF1X4K5+ykMSwWST1vDxJRB2kv2COgLb1fvpCo+A/y9A0G0znNVmdx4w==} 1489 | engines: {node: '>=18.12.0'} 1490 | hasBin: true 1491 | 1492 | listr2@8.3.3: 1493 | resolution: {integrity: sha512-LWzX2KsqcB1wqQ4AHgYb4RsDXauQiqhjLk+6hjbaeHG4zpjjVAB6wC/gz6X0l+Du1cN3pUB5ZlrvTbhGSNnUQQ==} 1494 | engines: {node: '>=18.0.0'} 1495 | 1496 | local-pkg@1.1.1: 1497 | resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} 1498 | engines: {node: '>=14'} 1499 | 1500 | locate-path@6.0.0: 1501 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1502 | engines: {node: '>=10'} 1503 | 1504 | lodash.merge@4.6.2: 1505 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1506 | 1507 | lodash@4.17.21: 1508 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1509 | 1510 | log-update@6.1.0: 1511 | resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==} 1512 | engines: {node: '>=18'} 1513 | 1514 | loupe@3.1.3: 1515 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 1516 | 1517 | lru-cache@6.0.0: 1518 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1519 | engines: {node: '>=10'} 1520 | 1521 | magic-string@0.30.17: 1522 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 1523 | 1524 | make-error@1.3.6: 1525 | resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} 1526 | 1527 | math-intrinsics@1.1.0: 1528 | resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} 1529 | engines: {node: '>= 0.4'} 1530 | 1531 | media-typer@0.3.0: 1532 | resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} 1533 | engines: {node: '>= 0.6'} 1534 | 1535 | media-typer@1.1.0: 1536 | resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} 1537 | engines: {node: '>= 0.8'} 1538 | 1539 | merge-descriptors@1.0.3: 1540 | resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} 1541 | 1542 | merge-descriptors@2.0.0: 1543 | resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} 1544 | engines: {node: '>=18'} 1545 | 1546 | merge-stream@2.0.0: 1547 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1548 | 1549 | merge2@1.4.1: 1550 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1551 | engines: {node: '>= 8'} 1552 | 1553 | methods@1.1.2: 1554 | resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} 1555 | engines: {node: '>= 0.6'} 1556 | 1557 | micromatch@4.0.8: 1558 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} 1559 | engines: {node: '>=8.6'} 1560 | 1561 | mime-db@1.52.0: 1562 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1563 | engines: {node: '>= 0.6'} 1564 | 1565 | mime-db@1.54.0: 1566 | resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} 1567 | engines: {node: '>= 0.6'} 1568 | 1569 | mime-types@2.1.35: 1570 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1571 | engines: {node: '>= 0.6'} 1572 | 1573 | mime-types@3.0.1: 1574 | resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} 1575 | engines: {node: '>= 0.6'} 1576 | 1577 | mime@1.6.0: 1578 | resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} 1579 | engines: {node: '>=4'} 1580 | hasBin: true 1581 | 1582 | mime@2.6.0: 1583 | resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} 1584 | engines: {node: '>=4.0.0'} 1585 | hasBin: true 1586 | 1587 | mimic-fn@4.0.0: 1588 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1589 | engines: {node: '>=12'} 1590 | 1591 | mimic-function@5.0.1: 1592 | resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} 1593 | engines: {node: '>=18'} 1594 | 1595 | minimatch@3.0.8: 1596 | resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} 1597 | 1598 | minimatch@3.1.2: 1599 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1600 | 1601 | minimatch@9.0.5: 1602 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1603 | engines: {node: '>=16 || 14 >=14.17'} 1604 | 1605 | mlly@1.7.4: 1606 | resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} 1607 | 1608 | ms@2.0.0: 1609 | resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} 1610 | 1611 | ms@2.1.3: 1612 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} 1613 | 1614 | muggle-string@0.4.1: 1615 | resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} 1616 | 1617 | nanoid@3.3.11: 1618 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 1619 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1620 | hasBin: true 1621 | 1622 | natural-compare@1.4.0: 1623 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1624 | 1625 | negotiator@0.6.3: 1626 | resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} 1627 | engines: {node: '>= 0.6'} 1628 | 1629 | negotiator@1.0.0: 1630 | resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} 1631 | engines: {node: '>= 0.6'} 1632 | 1633 | nodemon@3.1.10: 1634 | resolution: {integrity: sha512-WDjw3pJ0/0jMFmyNDp3gvY2YizjLmmOUQo6DEBY+JgdvW/yQ9mEeSw6H5ythl5Ny2ytb7f9C2nIbjSxMNzbJXw==} 1635 | engines: {node: '>=10'} 1636 | hasBin: true 1637 | 1638 | normalize-path@3.0.0: 1639 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1640 | engines: {node: '>=0.10.0'} 1641 | 1642 | npm-run-path@5.3.0: 1643 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1644 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1645 | 1646 | object-assign@4.1.1: 1647 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1648 | engines: {node: '>=0.10.0'} 1649 | 1650 | object-inspect@1.13.4: 1651 | resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} 1652 | engines: {node: '>= 0.4'} 1653 | 1654 | on-finished@2.4.1: 1655 | resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} 1656 | engines: {node: '>= 0.8'} 1657 | 1658 | on-headers@1.0.2: 1659 | resolution: {integrity: sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==} 1660 | engines: {node: '>= 0.8'} 1661 | 1662 | once@1.4.0: 1663 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1664 | 1665 | onetime@6.0.0: 1666 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1667 | engines: {node: '>=12'} 1668 | 1669 | onetime@7.0.0: 1670 | resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} 1671 | engines: {node: '>=18'} 1672 | 1673 | optionator@0.9.4: 1674 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1675 | engines: {node: '>= 0.8.0'} 1676 | 1677 | p-limit@3.1.0: 1678 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1679 | engines: {node: '>=10'} 1680 | 1681 | p-locate@5.0.0: 1682 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1683 | engines: {node: '>=10'} 1684 | 1685 | parent-module@1.0.1: 1686 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1687 | engines: {node: '>=6'} 1688 | 1689 | parseurl@1.3.3: 1690 | resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} 1691 | engines: {node: '>= 0.8'} 1692 | 1693 | path-browserify@1.0.1: 1694 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 1695 | 1696 | path-exists@4.0.0: 1697 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1698 | engines: {node: '>=8'} 1699 | 1700 | path-key@3.1.1: 1701 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1702 | engines: {node: '>=8'} 1703 | 1704 | path-key@4.0.0: 1705 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1706 | engines: {node: '>=12'} 1707 | 1708 | path-parse@1.0.7: 1709 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} 1710 | 1711 | path-to-regexp@0.1.12: 1712 | resolution: {integrity: sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ==} 1713 | 1714 | path-to-regexp@8.2.0: 1715 | resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} 1716 | engines: {node: '>=16'} 1717 | 1718 | pathe@2.0.3: 1719 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 1720 | 1721 | pathval@2.0.0: 1722 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1723 | engines: {node: '>= 14.16'} 1724 | 1725 | picocolors@1.1.1: 1726 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 1727 | 1728 | picomatch@2.3.1: 1729 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1730 | engines: {node: '>=8.6'} 1731 | 1732 | picomatch@4.0.2: 1733 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 1734 | engines: {node: '>=12'} 1735 | 1736 | pidtree@0.6.0: 1737 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1738 | engines: {node: '>=0.10'} 1739 | hasBin: true 1740 | 1741 | pkce-challenge@5.0.0: 1742 | resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} 1743 | engines: {node: '>=16.20.0'} 1744 | 1745 | pkg-types@1.3.1: 1746 | resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} 1747 | 1748 | pkg-types@2.1.0: 1749 | resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} 1750 | 1751 | postcss@8.5.3: 1752 | resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} 1753 | engines: {node: ^10 || ^12 || >=14} 1754 | 1755 | prelude-ls@1.2.1: 1756 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1757 | engines: {node: '>= 0.8.0'} 1758 | 1759 | prettier-linter-helpers@1.0.0: 1760 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1761 | engines: {node: '>=6.0.0'} 1762 | 1763 | prettier@3.5.3: 1764 | resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} 1765 | engines: {node: '>=14'} 1766 | hasBin: true 1767 | 1768 | proxy-addr@2.0.7: 1769 | resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} 1770 | engines: {node: '>= 0.10'} 1771 | 1772 | pstree.remy@1.1.8: 1773 | resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} 1774 | 1775 | punycode@2.3.1: 1776 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1777 | engines: {node: '>=6'} 1778 | 1779 | qs@6.13.0: 1780 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 1781 | engines: {node: '>=0.6'} 1782 | 1783 | qs@6.14.0: 1784 | resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} 1785 | engines: {node: '>=0.6'} 1786 | 1787 | quansync@0.2.10: 1788 | resolution: {integrity: sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==} 1789 | 1790 | queue-microtask@1.2.3: 1791 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1792 | 1793 | random-bytes@1.0.0: 1794 | resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} 1795 | engines: {node: '>= 0.8'} 1796 | 1797 | range-parser@1.2.1: 1798 | resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} 1799 | engines: {node: '>= 0.6'} 1800 | 1801 | raw-body@2.5.2: 1802 | resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} 1803 | engines: {node: '>= 0.8'} 1804 | 1805 | raw-body@3.0.0: 1806 | resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} 1807 | engines: {node: '>= 0.8'} 1808 | 1809 | readdirp@3.6.0: 1810 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1811 | engines: {node: '>=8.10.0'} 1812 | 1813 | require-from-string@2.0.2: 1814 | resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} 1815 | engines: {node: '>=0.10.0'} 1816 | 1817 | resolve-from@4.0.0: 1818 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1819 | engines: {node: '>=4'} 1820 | 1821 | resolve@1.22.10: 1822 | resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} 1823 | engines: {node: '>= 0.4'} 1824 | hasBin: true 1825 | 1826 | restore-cursor@5.1.0: 1827 | resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} 1828 | engines: {node: '>=18'} 1829 | 1830 | reusify@1.1.0: 1831 | resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} 1832 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1833 | 1834 | rfdc@1.4.1: 1835 | resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} 1836 | 1837 | rollup@4.40.1: 1838 | resolution: {integrity: sha512-C5VvvgCCyfyotVITIAv+4efVytl5F7wt+/I2i9q9GZcEXW9BP52YYOXC58igUi+LFZVHukErIIqQSWwv/M3WRw==} 1839 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1840 | hasBin: true 1841 | 1842 | router@2.2.0: 1843 | resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} 1844 | engines: {node: '>= 18'} 1845 | 1846 | run-parallel@1.2.0: 1847 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1848 | 1849 | safe-buffer@5.2.1: 1850 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1851 | 1852 | safer-buffer@2.1.2: 1853 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1854 | 1855 | semver@7.5.4: 1856 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} 1857 | engines: {node: '>=10'} 1858 | hasBin: true 1859 | 1860 | semver@7.7.1: 1861 | resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} 1862 | engines: {node: '>=10'} 1863 | hasBin: true 1864 | 1865 | send@0.19.0: 1866 | resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} 1867 | engines: {node: '>= 0.8.0'} 1868 | 1869 | send@1.2.0: 1870 | resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} 1871 | engines: {node: '>= 18'} 1872 | 1873 | serve-static@1.16.2: 1874 | resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} 1875 | engines: {node: '>= 0.8.0'} 1876 | 1877 | serve-static@2.2.0: 1878 | resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} 1879 | engines: {node: '>= 18'} 1880 | 1881 | setprototypeof@1.2.0: 1882 | resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} 1883 | 1884 | shebang-command@2.0.0: 1885 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1886 | engines: {node: '>=8'} 1887 | 1888 | shebang-regex@3.0.0: 1889 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1890 | engines: {node: '>=8'} 1891 | 1892 | side-channel-list@1.0.0: 1893 | resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} 1894 | engines: {node: '>= 0.4'} 1895 | 1896 | side-channel-map@1.0.1: 1897 | resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} 1898 | engines: {node: '>= 0.4'} 1899 | 1900 | side-channel-weakmap@1.0.2: 1901 | resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} 1902 | engines: {node: '>= 0.4'} 1903 | 1904 | side-channel@1.1.0: 1905 | resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} 1906 | engines: {node: '>= 0.4'} 1907 | 1908 | siginfo@2.0.0: 1909 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1910 | 1911 | signal-exit@4.1.0: 1912 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1913 | engines: {node: '>=14'} 1914 | 1915 | simple-update-notifier@2.0.0: 1916 | resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} 1917 | engines: {node: '>=10'} 1918 | 1919 | slice-ansi@5.0.0: 1920 | resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} 1921 | engines: {node: '>=12'} 1922 | 1923 | slice-ansi@7.1.2: 1924 | resolution: {integrity: sha512-iOBWFgUX7caIZiuutICxVgX1SdxwAVFFKwt1EvMYYec/NWO5meOJ6K5uQxhrYBdQJne4KxiqZc+KptFOWFSI9w==} 1925 | engines: {node: '>=18'} 1926 | 1927 | source-map-js@1.2.1: 1928 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 1929 | engines: {node: '>=0.10.0'} 1930 | 1931 | source-map-support@0.5.21: 1932 | resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} 1933 | 1934 | source-map@0.6.1: 1935 | resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} 1936 | engines: {node: '>=0.10.0'} 1937 | 1938 | sprintf-js@1.0.3: 1939 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} 1940 | 1941 | stackback@0.0.2: 1942 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1943 | 1944 | statuses@2.0.1: 1945 | resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} 1946 | engines: {node: '>= 0.8'} 1947 | 1948 | std-env@3.9.0: 1949 | resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1950 | 1951 | string-argv@0.3.2: 1952 | resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} 1953 | engines: {node: '>=0.6.19'} 1954 | 1955 | string-width@7.2.0: 1956 | resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} 1957 | engines: {node: '>=18'} 1958 | 1959 | strip-ansi@7.1.2: 1960 | resolution: {integrity: sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==} 1961 | engines: {node: '>=12'} 1962 | 1963 | strip-final-newline@3.0.0: 1964 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1965 | engines: {node: '>=12'} 1966 | 1967 | strip-json-comments@3.1.1: 1968 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1969 | engines: {node: '>=8'} 1970 | 1971 | superagent@9.0.2: 1972 | resolution: {integrity: sha512-xuW7dzkUpcJq7QnhOsnNUgtYp3xRwpt2F7abdRYIpCsAt0hhUqia0EdxyXZQQpNmGtsCzYHryaKSV3q3GJnq7w==} 1973 | engines: {node: '>=14.18.0'} 1974 | deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net 1975 | 1976 | supertest@7.1.0: 1977 | resolution: {integrity: sha512-5QeSO8hSrKghtcWEoPiO036fxH0Ii2wVQfFZSP0oqQhmjk8bOLhDFXr4JrvaFmPuEWUoq4znY3uSi8UzLKxGqw==} 1978 | engines: {node: '>=14.18.0'} 1979 | deprecated: Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net 1980 | 1981 | supports-color@5.5.0: 1982 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} 1983 | engines: {node: '>=4'} 1984 | 1985 | supports-color@7.2.0: 1986 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1987 | engines: {node: '>=8'} 1988 | 1989 | supports-color@8.1.1: 1990 | resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} 1991 | engines: {node: '>=10'} 1992 | 1993 | supports-preserve-symlinks-flag@1.0.0: 1994 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} 1995 | engines: {node: '>= 0.4'} 1996 | 1997 | synckit@0.11.11: 1998 | resolution: {integrity: sha512-MeQTA1r0litLUf0Rp/iisCaL8761lKAZHaimlbGK4j0HysC4PLfqygQj9srcs0m2RdtDYnF8UuYyKpbjHYp7Jw==} 1999 | engines: {node: ^14.18.0 || >=16.0.0} 2000 | 2001 | terser@5.39.0: 2002 | resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} 2003 | engines: {node: '>=10'} 2004 | hasBin: true 2005 | 2006 | tinybench@2.9.0: 2007 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 2008 | 2009 | tinyexec@0.3.2: 2010 | resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} 2011 | 2012 | tinyglobby@0.2.13: 2013 | resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} 2014 | engines: {node: '>=12.0.0'} 2015 | 2016 | tinypool@1.0.2: 2017 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} 2018 | engines: {node: ^18.0.0 || >=20.0.0} 2019 | 2020 | tinyrainbow@2.0.0: 2021 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 2022 | engines: {node: '>=14.0.0'} 2023 | 2024 | tinyspy@3.0.2: 2025 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} 2026 | engines: {node: '>=14.0.0'} 2027 | 2028 | to-regex-range@5.0.1: 2029 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 2030 | engines: {node: '>=8.0'} 2031 | 2032 | toidentifier@1.0.1: 2033 | resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} 2034 | engines: {node: '>=0.6'} 2035 | 2036 | touch@3.1.1: 2037 | resolution: {integrity: sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA==} 2038 | hasBin: true 2039 | 2040 | ts-api-utils@2.1.0: 2041 | resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} 2042 | engines: {node: '>=18.12'} 2043 | peerDependencies: 2044 | typescript: '>=4.8.4' 2045 | 2046 | ts-node@10.9.2: 2047 | resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} 2048 | hasBin: true 2049 | peerDependencies: 2050 | '@swc/core': '>=1.2.50' 2051 | '@swc/wasm': '>=1.2.50' 2052 | '@types/node': '*' 2053 | typescript: '>=2.7' 2054 | peerDependenciesMeta: 2055 | '@swc/core': 2056 | optional: true 2057 | '@swc/wasm': 2058 | optional: true 2059 | 2060 | type-check@0.4.0: 2061 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 2062 | engines: {node: '>= 0.8.0'} 2063 | 2064 | type-is@1.6.18: 2065 | resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} 2066 | engines: {node: '>= 0.6'} 2067 | 2068 | type-is@2.0.1: 2069 | resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} 2070 | engines: {node: '>= 0.6'} 2071 | 2072 | typescript-eslint@8.31.1: 2073 | resolution: {integrity: sha512-j6DsEotD/fH39qKzXTQRwYYWlt7D+0HmfpOK+DVhwJOFLcdmn92hq3mBb7HlKJHbjjI/gTOqEcc9d6JfpFf/VA==} 2074 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 2075 | peerDependencies: 2076 | eslint: ^8.57.0 || ^9.0.0 2077 | typescript: '>=4.8.4 <5.9.0' 2078 | 2079 | typescript@5.8.2: 2080 | resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} 2081 | engines: {node: '>=14.17'} 2082 | hasBin: true 2083 | 2084 | typescript@5.8.3: 2085 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 2086 | engines: {node: '>=14.17'} 2087 | hasBin: true 2088 | 2089 | ufo@1.6.1: 2090 | resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} 2091 | 2092 | uid-safe@2.1.5: 2093 | resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} 2094 | engines: {node: '>= 0.8'} 2095 | 2096 | uncrypto@0.1.3: 2097 | resolution: {integrity: sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==} 2098 | 2099 | undefsafe@2.0.5: 2100 | resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} 2101 | 2102 | undici-types@6.19.8: 2103 | resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} 2104 | 2105 | universalify@2.0.1: 2106 | resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} 2107 | engines: {node: '>= 10.0.0'} 2108 | 2109 | unpipe@1.0.0: 2110 | resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} 2111 | engines: {node: '>= 0.8'} 2112 | 2113 | uri-js@4.4.1: 2114 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 2115 | 2116 | utils-merge@1.0.1: 2117 | resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} 2118 | engines: {node: '>= 0.4.0'} 2119 | 2120 | v8-compile-cache-lib@3.0.1: 2121 | resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} 2122 | 2123 | vary@1.1.2: 2124 | resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} 2125 | engines: {node: '>= 0.8'} 2126 | 2127 | vite-node@3.1.2: 2128 | resolution: {integrity: sha512-/8iMryv46J3aK13iUXsei5G/A3CUlW4665THCPS+K8xAaqrVWiGB4RfXMQXCLjpK9P2eK//BczrVkn5JLAk6DA==} 2129 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2130 | hasBin: true 2131 | 2132 | vite-plugin-dts@4.5.3: 2133 | resolution: {integrity: sha512-P64VnD00dR+e8S26ESoFELqc17+w7pKkwlBpgXteOljFyT0zDwD8hH4zXp49M/kciy//7ZbVXIwQCekBJjfWzA==} 2134 | peerDependencies: 2135 | typescript: '*' 2136 | vite: '*' 2137 | peerDependenciesMeta: 2138 | vite: 2139 | optional: true 2140 | 2141 | vite@6.3.4: 2142 | resolution: {integrity: sha512-BiReIiMS2fyFqbqNT/Qqt4CVITDU9M9vE+DKcVAsB+ZV0wvTKd+3hMbkpxz1b+NmEDMegpVbisKiAZOnvO92Sw==} 2143 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2144 | hasBin: true 2145 | peerDependencies: 2146 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 2147 | jiti: '>=1.21.0' 2148 | less: '*' 2149 | lightningcss: ^1.21.0 2150 | sass: '*' 2151 | sass-embedded: '*' 2152 | stylus: '*' 2153 | sugarss: '*' 2154 | terser: ^5.16.0 2155 | tsx: ^4.8.1 2156 | yaml: ^2.4.2 2157 | peerDependenciesMeta: 2158 | '@types/node': 2159 | optional: true 2160 | jiti: 2161 | optional: true 2162 | less: 2163 | optional: true 2164 | lightningcss: 2165 | optional: true 2166 | sass: 2167 | optional: true 2168 | sass-embedded: 2169 | optional: true 2170 | stylus: 2171 | optional: true 2172 | sugarss: 2173 | optional: true 2174 | terser: 2175 | optional: true 2176 | tsx: 2177 | optional: true 2178 | yaml: 2179 | optional: true 2180 | 2181 | vitest@3.1.2: 2182 | resolution: {integrity: sha512-WaxpJe092ID1C0mr+LH9MmNrhfzi8I65EX/NRU/Ld016KqQNRgxSOlGNP1hHN+a/F8L15Mh8klwaF77zR3GeDQ==} 2183 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} 2184 | hasBin: true 2185 | peerDependencies: 2186 | '@edge-runtime/vm': '*' 2187 | '@types/debug': ^4.1.12 2188 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 2189 | '@vitest/browser': 3.1.2 2190 | '@vitest/ui': 3.1.2 2191 | happy-dom: '*' 2192 | jsdom: '*' 2193 | peerDependenciesMeta: 2194 | '@edge-runtime/vm': 2195 | optional: true 2196 | '@types/debug': 2197 | optional: true 2198 | '@types/node': 2199 | optional: true 2200 | '@vitest/browser': 2201 | optional: true 2202 | '@vitest/ui': 2203 | optional: true 2204 | happy-dom: 2205 | optional: true 2206 | jsdom: 2207 | optional: true 2208 | 2209 | vscode-uri@3.1.0: 2210 | resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} 2211 | 2212 | which@2.0.2: 2213 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2214 | engines: {node: '>= 8'} 2215 | hasBin: true 2216 | 2217 | why-is-node-running@2.3.0: 2218 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 2219 | engines: {node: '>=8'} 2220 | hasBin: true 2221 | 2222 | word-wrap@1.2.5: 2223 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2224 | engines: {node: '>=0.10.0'} 2225 | 2226 | wrap-ansi@9.0.2: 2227 | resolution: {integrity: sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww==} 2228 | engines: {node: '>=18'} 2229 | 2230 | wrappy@1.0.2: 2231 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2232 | 2233 | yallist@4.0.0: 2234 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 2235 | 2236 | yaml@2.8.1: 2237 | resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} 2238 | engines: {node: '>= 14.6'} 2239 | hasBin: true 2240 | 2241 | yn@3.1.1: 2242 | resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} 2243 | engines: {node: '>=6'} 2244 | 2245 | yocto-queue@0.1.0: 2246 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2247 | engines: {node: '>=10'} 2248 | 2249 | zod-to-json-schema@3.24.5: 2250 | resolution: {integrity: sha512-/AuWwMP+YqiPbsJx5D6TfgRTc4kTLjsh5SOcd4bLsfUg2RcEXrFMJl1DGgdHy2aCfsIA/cr/1JM0xcB2GZji8g==} 2251 | peerDependencies: 2252 | zod: ^3.24.1 2253 | 2254 | zod@3.24.3: 2255 | resolution: {integrity: sha512-HhY1oqzWCQWuUqvBFnsyrtZRhyPeR7SUGv+C4+MsisMuVfSPx8HpwWqH8tRahSlt6M3PiFAcoeFhZAqIXTxoSg==} 2256 | 2257 | snapshots: 2258 | 2259 | '@babel/helper-string-parser@7.27.1': {} 2260 | 2261 | '@babel/helper-validator-identifier@7.27.1': {} 2262 | 2263 | '@babel/parser@7.27.1': 2264 | dependencies: 2265 | '@babel/types': 7.27.1 2266 | 2267 | '@babel/types@7.27.1': 2268 | dependencies: 2269 | '@babel/helper-string-parser': 7.27.1 2270 | '@babel/helper-validator-identifier': 7.27.1 2271 | 2272 | '@cspotcode/source-map-support@0.8.1': 2273 | dependencies: 2274 | '@jridgewell/trace-mapping': 0.3.9 2275 | 2276 | '@esbuild/aix-ppc64@0.25.3': 2277 | optional: true 2278 | 2279 | '@esbuild/android-arm64@0.25.3': 2280 | optional: true 2281 | 2282 | '@esbuild/android-arm@0.25.3': 2283 | optional: true 2284 | 2285 | '@esbuild/android-x64@0.25.3': 2286 | optional: true 2287 | 2288 | '@esbuild/darwin-arm64@0.25.3': 2289 | optional: true 2290 | 2291 | '@esbuild/darwin-x64@0.25.3': 2292 | optional: true 2293 | 2294 | '@esbuild/freebsd-arm64@0.25.3': 2295 | optional: true 2296 | 2297 | '@esbuild/freebsd-x64@0.25.3': 2298 | optional: true 2299 | 2300 | '@esbuild/linux-arm64@0.25.3': 2301 | optional: true 2302 | 2303 | '@esbuild/linux-arm@0.25.3': 2304 | optional: true 2305 | 2306 | '@esbuild/linux-ia32@0.25.3': 2307 | optional: true 2308 | 2309 | '@esbuild/linux-loong64@0.25.3': 2310 | optional: true 2311 | 2312 | '@esbuild/linux-mips64el@0.25.3': 2313 | optional: true 2314 | 2315 | '@esbuild/linux-ppc64@0.25.3': 2316 | optional: true 2317 | 2318 | '@esbuild/linux-riscv64@0.25.3': 2319 | optional: true 2320 | 2321 | '@esbuild/linux-s390x@0.25.3': 2322 | optional: true 2323 | 2324 | '@esbuild/linux-x64@0.25.3': 2325 | optional: true 2326 | 2327 | '@esbuild/netbsd-arm64@0.25.3': 2328 | optional: true 2329 | 2330 | '@esbuild/netbsd-x64@0.25.3': 2331 | optional: true 2332 | 2333 | '@esbuild/openbsd-arm64@0.25.3': 2334 | optional: true 2335 | 2336 | '@esbuild/openbsd-x64@0.25.3': 2337 | optional: true 2338 | 2339 | '@esbuild/sunos-x64@0.25.3': 2340 | optional: true 2341 | 2342 | '@esbuild/win32-arm64@0.25.3': 2343 | optional: true 2344 | 2345 | '@esbuild/win32-ia32@0.25.3': 2346 | optional: true 2347 | 2348 | '@esbuild/win32-x64@0.25.3': 2349 | optional: true 2350 | 2351 | '@eslint-community/eslint-utils@4.7.0(eslint@9.26.0)': 2352 | dependencies: 2353 | eslint: 9.26.0 2354 | eslint-visitor-keys: 3.4.3 2355 | 2356 | '@eslint-community/regexpp@4.12.1': {} 2357 | 2358 | '@eslint/config-array@0.20.0': 2359 | dependencies: 2360 | '@eslint/object-schema': 2.1.6 2361 | debug: 4.4.0(supports-color@5.5.0) 2362 | minimatch: 3.1.2 2363 | transitivePeerDependencies: 2364 | - supports-color 2365 | 2366 | '@eslint/config-helpers@0.2.2': {} 2367 | 2368 | '@eslint/core@0.13.0': 2369 | dependencies: 2370 | '@types/json-schema': 7.0.15 2371 | 2372 | '@eslint/eslintrc@3.3.1': 2373 | dependencies: 2374 | ajv: 6.12.6 2375 | debug: 4.4.0(supports-color@5.5.0) 2376 | espree: 10.3.0 2377 | globals: 14.0.0 2378 | ignore: 5.3.2 2379 | import-fresh: 3.3.1 2380 | js-yaml: 4.1.0 2381 | minimatch: 3.1.2 2382 | strip-json-comments: 3.1.1 2383 | transitivePeerDependencies: 2384 | - supports-color 2385 | 2386 | '@eslint/js@9.26.0': {} 2387 | 2388 | '@eslint/object-schema@2.1.6': {} 2389 | 2390 | '@eslint/plugin-kit@0.2.8': 2391 | dependencies: 2392 | '@eslint/core': 0.13.0 2393 | levn: 0.4.1 2394 | 2395 | '@humanfs/core@0.19.1': {} 2396 | 2397 | '@humanfs/node@0.16.6': 2398 | dependencies: 2399 | '@humanfs/core': 0.19.1 2400 | '@humanwhocodes/retry': 0.3.1 2401 | 2402 | '@humanwhocodes/module-importer@1.0.1': {} 2403 | 2404 | '@humanwhocodes/retry@0.3.1': {} 2405 | 2406 | '@humanwhocodes/retry@0.4.2': {} 2407 | 2408 | '@jridgewell/gen-mapping@0.3.13': 2409 | dependencies: 2410 | '@jridgewell/sourcemap-codec': 1.5.5 2411 | '@jridgewell/trace-mapping': 0.3.31 2412 | optional: true 2413 | 2414 | '@jridgewell/resolve-uri@3.1.2': {} 2415 | 2416 | '@jridgewell/source-map@0.3.11': 2417 | dependencies: 2418 | '@jridgewell/gen-mapping': 0.3.13 2419 | '@jridgewell/trace-mapping': 0.3.31 2420 | optional: true 2421 | 2422 | '@jridgewell/sourcemap-codec@1.5.0': {} 2423 | 2424 | '@jridgewell/sourcemap-codec@1.5.5': 2425 | optional: true 2426 | 2427 | '@jridgewell/trace-mapping@0.3.31': 2428 | dependencies: 2429 | '@jridgewell/resolve-uri': 3.1.2 2430 | '@jridgewell/sourcemap-codec': 1.5.5 2431 | optional: true 2432 | 2433 | '@jridgewell/trace-mapping@0.3.9': 2434 | dependencies: 2435 | '@jridgewell/resolve-uri': 3.1.2 2436 | '@jridgewell/sourcemap-codec': 1.5.0 2437 | 2438 | '@kinde-oss/kinde-typescript-sdk@2.13.0(eslint@9.26.0)(typescript@5.8.3)': 2439 | dependencies: 2440 | '@kinde/js-utils': 0.23.0 2441 | '@kinde/jwt-decoder': 0.2.0 2442 | '@kinde/jwt-validator': 0.4.0 2443 | '@typescript-eslint/parser': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2444 | uncrypto: 0.1.3 2445 | transitivePeerDependencies: 2446 | - eslint 2447 | - expo-secure-store 2448 | - supports-color 2449 | - typescript 2450 | 2451 | '@kinde/js-utils@0.23.0': 2452 | dependencies: 2453 | '@kinde/jwt-decoder': 0.2.0 2454 | 2455 | '@kinde/jwt-decoder@0.2.0': {} 2456 | 2457 | '@kinde/jwt-validator@0.4.0': 2458 | dependencies: 2459 | '@kinde/jwt-decoder': 0.2.0 2460 | jsrsasign: 11.1.0 2461 | 2462 | '@microsoft/api-extractor-model@7.30.6(@types/node@20.17.32)': 2463 | dependencies: 2464 | '@microsoft/tsdoc': 0.15.1 2465 | '@microsoft/tsdoc-config': 0.17.1 2466 | '@rushstack/node-core-library': 5.13.1(@types/node@20.17.32) 2467 | transitivePeerDependencies: 2468 | - '@types/node' 2469 | 2470 | '@microsoft/api-extractor@7.52.7(@types/node@20.17.32)': 2471 | dependencies: 2472 | '@microsoft/api-extractor-model': 7.30.6(@types/node@20.17.32) 2473 | '@microsoft/tsdoc': 0.15.1 2474 | '@microsoft/tsdoc-config': 0.17.1 2475 | '@rushstack/node-core-library': 5.13.1(@types/node@20.17.32) 2476 | '@rushstack/rig-package': 0.5.3 2477 | '@rushstack/terminal': 0.15.3(@types/node@20.17.32) 2478 | '@rushstack/ts-command-line': 5.0.1(@types/node@20.17.32) 2479 | lodash: 4.17.21 2480 | minimatch: 3.0.8 2481 | resolve: 1.22.10 2482 | semver: 7.5.4 2483 | source-map: 0.6.1 2484 | typescript: 5.8.2 2485 | transitivePeerDependencies: 2486 | - '@types/node' 2487 | 2488 | '@microsoft/tsdoc-config@0.17.1': 2489 | dependencies: 2490 | '@microsoft/tsdoc': 0.15.1 2491 | ajv: 8.12.0 2492 | jju: 1.4.0 2493 | resolve: 1.22.10 2494 | 2495 | '@microsoft/tsdoc@0.15.1': {} 2496 | 2497 | '@modelcontextprotocol/sdk@1.11.0': 2498 | dependencies: 2499 | content-type: 1.0.5 2500 | cors: 2.8.5 2501 | cross-spawn: 7.0.6 2502 | eventsource: 3.0.6 2503 | express: 5.1.0 2504 | express-rate-limit: 7.5.0(express@5.1.0) 2505 | pkce-challenge: 5.0.0 2506 | raw-body: 3.0.0 2507 | zod: 3.24.3 2508 | zod-to-json-schema: 3.24.5(zod@3.24.3) 2509 | transitivePeerDependencies: 2510 | - supports-color 2511 | 2512 | '@noble/hashes@1.8.0': {} 2513 | 2514 | '@nodelib/fs.scandir@2.1.5': 2515 | dependencies: 2516 | '@nodelib/fs.stat': 2.0.5 2517 | run-parallel: 1.2.0 2518 | 2519 | '@nodelib/fs.stat@2.0.5': {} 2520 | 2521 | '@nodelib/fs.walk@1.2.8': 2522 | dependencies: 2523 | '@nodelib/fs.scandir': 2.1.5 2524 | fastq: 1.19.1 2525 | 2526 | '@paralleldrive/cuid2@2.2.2': 2527 | dependencies: 2528 | '@noble/hashes': 1.8.0 2529 | 2530 | '@pkgr/core@0.2.9': {} 2531 | 2532 | '@rollup/pluginutils@5.1.4(rollup@4.40.1)': 2533 | dependencies: 2534 | '@types/estree': 1.0.7 2535 | estree-walker: 2.0.2 2536 | picomatch: 4.0.2 2537 | optionalDependencies: 2538 | rollup: 4.40.1 2539 | 2540 | '@rollup/rollup-android-arm-eabi@4.40.1': 2541 | optional: true 2542 | 2543 | '@rollup/rollup-android-arm64@4.40.1': 2544 | optional: true 2545 | 2546 | '@rollup/rollup-darwin-arm64@4.40.1': 2547 | optional: true 2548 | 2549 | '@rollup/rollup-darwin-x64@4.40.1': 2550 | optional: true 2551 | 2552 | '@rollup/rollup-freebsd-arm64@4.40.1': 2553 | optional: true 2554 | 2555 | '@rollup/rollup-freebsd-x64@4.40.1': 2556 | optional: true 2557 | 2558 | '@rollup/rollup-linux-arm-gnueabihf@4.40.1': 2559 | optional: true 2560 | 2561 | '@rollup/rollup-linux-arm-musleabihf@4.40.1': 2562 | optional: true 2563 | 2564 | '@rollup/rollup-linux-arm64-gnu@4.40.1': 2565 | optional: true 2566 | 2567 | '@rollup/rollup-linux-arm64-musl@4.40.1': 2568 | optional: true 2569 | 2570 | '@rollup/rollup-linux-loongarch64-gnu@4.40.1': 2571 | optional: true 2572 | 2573 | '@rollup/rollup-linux-powerpc64le-gnu@4.40.1': 2574 | optional: true 2575 | 2576 | '@rollup/rollup-linux-riscv64-gnu@4.40.1': 2577 | optional: true 2578 | 2579 | '@rollup/rollup-linux-riscv64-musl@4.40.1': 2580 | optional: true 2581 | 2582 | '@rollup/rollup-linux-s390x-gnu@4.40.1': 2583 | optional: true 2584 | 2585 | '@rollup/rollup-linux-x64-gnu@4.40.1': 2586 | optional: true 2587 | 2588 | '@rollup/rollup-linux-x64-musl@4.40.1': 2589 | optional: true 2590 | 2591 | '@rollup/rollup-win32-arm64-msvc@4.40.1': 2592 | optional: true 2593 | 2594 | '@rollup/rollup-win32-ia32-msvc@4.40.1': 2595 | optional: true 2596 | 2597 | '@rollup/rollup-win32-x64-msvc@4.40.1': 2598 | optional: true 2599 | 2600 | '@rushstack/node-core-library@5.13.1(@types/node@20.17.32)': 2601 | dependencies: 2602 | ajv: 8.13.0 2603 | ajv-draft-04: 1.0.0(ajv@8.13.0) 2604 | ajv-formats: 3.0.1(ajv@8.13.0) 2605 | fs-extra: 11.3.0 2606 | import-lazy: 4.0.0 2607 | jju: 1.4.0 2608 | resolve: 1.22.10 2609 | semver: 7.5.4 2610 | optionalDependencies: 2611 | '@types/node': 20.17.32 2612 | 2613 | '@rushstack/rig-package@0.5.3': 2614 | dependencies: 2615 | resolve: 1.22.10 2616 | strip-json-comments: 3.1.1 2617 | 2618 | '@rushstack/terminal@0.15.3(@types/node@20.17.32)': 2619 | dependencies: 2620 | '@rushstack/node-core-library': 5.13.1(@types/node@20.17.32) 2621 | supports-color: 8.1.1 2622 | optionalDependencies: 2623 | '@types/node': 20.17.32 2624 | 2625 | '@rushstack/ts-command-line@5.0.1(@types/node@20.17.32)': 2626 | dependencies: 2627 | '@rushstack/terminal': 0.15.3(@types/node@20.17.32) 2628 | '@types/argparse': 1.0.38 2629 | argparse: 1.0.10 2630 | string-argv: 0.3.2 2631 | transitivePeerDependencies: 2632 | - '@types/node' 2633 | 2634 | '@tsconfig/node10@1.0.11': {} 2635 | 2636 | '@tsconfig/node12@1.0.11': {} 2637 | 2638 | '@tsconfig/node14@1.0.3': {} 2639 | 2640 | '@tsconfig/node16@1.0.4': {} 2641 | 2642 | '@tsconfig/node19@19.1.5': {} 2643 | 2644 | '@types/argparse@1.0.38': {} 2645 | 2646 | '@types/body-parser@1.19.6': 2647 | dependencies: 2648 | '@types/connect': 3.4.38 2649 | '@types/node': 20.17.32 2650 | 2651 | '@types/connect@3.4.38': 2652 | dependencies: 2653 | '@types/node': 20.17.32 2654 | 2655 | '@types/cookiejar@2.1.5': {} 2656 | 2657 | '@types/estree@1.0.7': {} 2658 | 2659 | '@types/express-serve-static-core@4.19.7': 2660 | dependencies: 2661 | '@types/node': 20.17.32 2662 | '@types/qs': 6.14.0 2663 | '@types/range-parser': 1.2.7 2664 | '@types/send': 1.2.0 2665 | 2666 | '@types/express-session@1.18.1': 2667 | dependencies: 2668 | '@types/express': 4.17.23 2669 | 2670 | '@types/express@4.17.23': 2671 | dependencies: 2672 | '@types/body-parser': 1.19.6 2673 | '@types/express-serve-static-core': 4.19.7 2674 | '@types/qs': 6.14.0 2675 | '@types/serve-static': 1.15.9 2676 | 2677 | '@types/http-errors@2.0.5': {} 2678 | 2679 | '@types/json-schema@7.0.15': {} 2680 | 2681 | '@types/methods@1.1.4': {} 2682 | 2683 | '@types/mime@1.3.5': {} 2684 | 2685 | '@types/node@20.17.32': 2686 | dependencies: 2687 | undici-types: 6.19.8 2688 | 2689 | '@types/qs@6.14.0': {} 2690 | 2691 | '@types/range-parser@1.2.7': {} 2692 | 2693 | '@types/send@0.17.5': 2694 | dependencies: 2695 | '@types/mime': 1.3.5 2696 | '@types/node': 20.17.32 2697 | 2698 | '@types/send@1.2.0': 2699 | dependencies: 2700 | '@types/node': 20.17.32 2701 | 2702 | '@types/serve-static@1.15.9': 2703 | dependencies: 2704 | '@types/http-errors': 2.0.5 2705 | '@types/node': 20.17.32 2706 | '@types/send': 0.17.5 2707 | 2708 | '@types/superagent@8.1.9': 2709 | dependencies: 2710 | '@types/cookiejar': 2.1.5 2711 | '@types/methods': 1.1.4 2712 | '@types/node': 20.17.32 2713 | form-data: 4.0.2 2714 | 2715 | '@types/supertest@6.0.3': 2716 | dependencies: 2717 | '@types/methods': 1.1.4 2718 | '@types/superagent': 8.1.9 2719 | 2720 | '@typescript-eslint/eslint-plugin@8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3)': 2721 | dependencies: 2722 | '@eslint-community/regexpp': 4.12.1 2723 | '@typescript-eslint/parser': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2724 | '@typescript-eslint/scope-manager': 8.31.1 2725 | '@typescript-eslint/type-utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2726 | '@typescript-eslint/utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2727 | '@typescript-eslint/visitor-keys': 8.31.1 2728 | eslint: 9.26.0 2729 | graphemer: 1.4.0 2730 | ignore: 5.3.2 2731 | natural-compare: 1.4.0 2732 | ts-api-utils: 2.1.0(typescript@5.8.3) 2733 | typescript: 5.8.3 2734 | transitivePeerDependencies: 2735 | - supports-color 2736 | 2737 | '@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3)': 2738 | dependencies: 2739 | '@typescript-eslint/scope-manager': 8.31.1 2740 | '@typescript-eslint/types': 8.31.1 2741 | '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) 2742 | '@typescript-eslint/visitor-keys': 8.31.1 2743 | debug: 4.4.0(supports-color@5.5.0) 2744 | eslint: 9.26.0 2745 | typescript: 5.8.3 2746 | transitivePeerDependencies: 2747 | - supports-color 2748 | 2749 | '@typescript-eslint/scope-manager@8.31.1': 2750 | dependencies: 2751 | '@typescript-eslint/types': 8.31.1 2752 | '@typescript-eslint/visitor-keys': 8.31.1 2753 | 2754 | '@typescript-eslint/type-utils@8.31.1(eslint@9.26.0)(typescript@5.8.3)': 2755 | dependencies: 2756 | '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) 2757 | '@typescript-eslint/utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 2758 | debug: 4.4.0(supports-color@5.5.0) 2759 | eslint: 9.26.0 2760 | ts-api-utils: 2.1.0(typescript@5.8.3) 2761 | typescript: 5.8.3 2762 | transitivePeerDependencies: 2763 | - supports-color 2764 | 2765 | '@typescript-eslint/types@8.31.1': {} 2766 | 2767 | '@typescript-eslint/typescript-estree@8.31.1(typescript@5.8.3)': 2768 | dependencies: 2769 | '@typescript-eslint/types': 8.31.1 2770 | '@typescript-eslint/visitor-keys': 8.31.1 2771 | debug: 4.4.0(supports-color@5.5.0) 2772 | fast-glob: 3.3.3 2773 | is-glob: 4.0.3 2774 | minimatch: 9.0.5 2775 | semver: 7.7.1 2776 | ts-api-utils: 2.1.0(typescript@5.8.3) 2777 | typescript: 5.8.3 2778 | transitivePeerDependencies: 2779 | - supports-color 2780 | 2781 | '@typescript-eslint/utils@8.31.1(eslint@9.26.0)(typescript@5.8.3)': 2782 | dependencies: 2783 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) 2784 | '@typescript-eslint/scope-manager': 8.31.1 2785 | '@typescript-eslint/types': 8.31.1 2786 | '@typescript-eslint/typescript-estree': 8.31.1(typescript@5.8.3) 2787 | eslint: 9.26.0 2788 | typescript: 5.8.3 2789 | transitivePeerDependencies: 2790 | - supports-color 2791 | 2792 | '@typescript-eslint/visitor-keys@8.31.1': 2793 | dependencies: 2794 | '@typescript-eslint/types': 8.31.1 2795 | eslint-visitor-keys: 4.2.0 2796 | 2797 | '@vitest/expect@3.1.2': 2798 | dependencies: 2799 | '@vitest/spy': 3.1.2 2800 | '@vitest/utils': 3.1.2 2801 | chai: 5.2.0 2802 | tinyrainbow: 2.0.0 2803 | 2804 | '@vitest/mocker@3.1.2(vite@6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1))': 2805 | dependencies: 2806 | '@vitest/spy': 3.1.2 2807 | estree-walker: 3.0.3 2808 | magic-string: 0.30.17 2809 | optionalDependencies: 2810 | vite: 6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 2811 | 2812 | '@vitest/pretty-format@3.1.2': 2813 | dependencies: 2814 | tinyrainbow: 2.0.0 2815 | 2816 | '@vitest/runner@3.1.2': 2817 | dependencies: 2818 | '@vitest/utils': 3.1.2 2819 | pathe: 2.0.3 2820 | 2821 | '@vitest/snapshot@3.1.2': 2822 | dependencies: 2823 | '@vitest/pretty-format': 3.1.2 2824 | magic-string: 0.30.17 2825 | pathe: 2.0.3 2826 | 2827 | '@vitest/spy@3.1.2': 2828 | dependencies: 2829 | tinyspy: 3.0.2 2830 | 2831 | '@vitest/utils@3.1.2': 2832 | dependencies: 2833 | '@vitest/pretty-format': 3.1.2 2834 | loupe: 3.1.3 2835 | tinyrainbow: 2.0.0 2836 | 2837 | '@volar/language-core@2.4.13': 2838 | dependencies: 2839 | '@volar/source-map': 2.4.13 2840 | 2841 | '@volar/source-map@2.4.13': {} 2842 | 2843 | '@volar/typescript@2.4.13': 2844 | dependencies: 2845 | '@volar/language-core': 2.4.13 2846 | path-browserify: 1.0.1 2847 | vscode-uri: 3.1.0 2848 | 2849 | '@vue/compiler-core@3.5.13': 2850 | dependencies: 2851 | '@babel/parser': 7.27.1 2852 | '@vue/shared': 3.5.13 2853 | entities: 4.5.0 2854 | estree-walker: 2.0.2 2855 | source-map-js: 1.2.1 2856 | 2857 | '@vue/compiler-dom@3.5.13': 2858 | dependencies: 2859 | '@vue/compiler-core': 3.5.13 2860 | '@vue/shared': 3.5.13 2861 | 2862 | '@vue/compiler-vue2@2.7.16': 2863 | dependencies: 2864 | de-indent: 1.0.2 2865 | he: 1.2.0 2866 | 2867 | '@vue/language-core@2.2.0(typescript@5.8.3)': 2868 | dependencies: 2869 | '@volar/language-core': 2.4.13 2870 | '@vue/compiler-dom': 3.5.13 2871 | '@vue/compiler-vue2': 2.7.16 2872 | '@vue/shared': 3.5.13 2873 | alien-signals: 0.4.14 2874 | minimatch: 9.0.5 2875 | muggle-string: 0.4.1 2876 | path-browserify: 1.0.1 2877 | optionalDependencies: 2878 | typescript: 5.8.3 2879 | 2880 | '@vue/shared@3.5.13': {} 2881 | 2882 | accepts@1.3.8: 2883 | dependencies: 2884 | mime-types: 2.1.35 2885 | negotiator: 0.6.3 2886 | 2887 | accepts@2.0.0: 2888 | dependencies: 2889 | mime-types: 3.0.1 2890 | negotiator: 1.0.0 2891 | 2892 | acorn-jsx@5.3.2(acorn@8.14.1): 2893 | dependencies: 2894 | acorn: 8.14.1 2895 | 2896 | acorn-walk@8.3.4: 2897 | dependencies: 2898 | acorn: 8.14.1 2899 | 2900 | acorn@8.14.1: {} 2901 | 2902 | acorn@8.15.0: 2903 | optional: true 2904 | 2905 | ajv-draft-04@1.0.0(ajv@8.13.0): 2906 | optionalDependencies: 2907 | ajv: 8.13.0 2908 | 2909 | ajv-formats@3.0.1(ajv@8.13.0): 2910 | optionalDependencies: 2911 | ajv: 8.13.0 2912 | 2913 | ajv@6.12.6: 2914 | dependencies: 2915 | fast-deep-equal: 3.1.3 2916 | fast-json-stable-stringify: 2.1.0 2917 | json-schema-traverse: 0.4.1 2918 | uri-js: 4.4.1 2919 | 2920 | ajv@8.12.0: 2921 | dependencies: 2922 | fast-deep-equal: 3.1.3 2923 | json-schema-traverse: 1.0.0 2924 | require-from-string: 2.0.2 2925 | uri-js: 4.4.1 2926 | 2927 | ajv@8.13.0: 2928 | dependencies: 2929 | fast-deep-equal: 3.1.3 2930 | json-schema-traverse: 1.0.0 2931 | require-from-string: 2.0.2 2932 | uri-js: 4.4.1 2933 | 2934 | alien-signals@0.4.14: {} 2935 | 2936 | ansi-escapes@7.1.1: 2937 | dependencies: 2938 | environment: 1.1.0 2939 | 2940 | ansi-regex@6.2.2: {} 2941 | 2942 | ansi-styles@4.3.0: 2943 | dependencies: 2944 | color-convert: 2.0.1 2945 | 2946 | ansi-styles@6.2.3: {} 2947 | 2948 | anymatch@3.1.3: 2949 | dependencies: 2950 | normalize-path: 3.0.0 2951 | picomatch: 2.3.1 2952 | 2953 | arg@4.1.3: {} 2954 | 2955 | argparse@1.0.10: 2956 | dependencies: 2957 | sprintf-js: 1.0.3 2958 | 2959 | argparse@2.0.1: {} 2960 | 2961 | array-flatten@1.1.1: {} 2962 | 2963 | asap@2.0.6: {} 2964 | 2965 | assertion-error@2.0.1: {} 2966 | 2967 | asynckit@0.4.0: {} 2968 | 2969 | aws-jwt-verify@5.0.0: {} 2970 | 2971 | balanced-match@1.0.2: {} 2972 | 2973 | binary-extensions@2.3.0: {} 2974 | 2975 | body-parser@1.20.3: 2976 | dependencies: 2977 | bytes: 3.1.2 2978 | content-type: 1.0.5 2979 | debug: 2.6.9 2980 | depd: 2.0.0 2981 | destroy: 1.2.0 2982 | http-errors: 2.0.0 2983 | iconv-lite: 0.4.24 2984 | on-finished: 2.4.1 2985 | qs: 6.13.0 2986 | raw-body: 2.5.2 2987 | type-is: 1.6.18 2988 | unpipe: 1.0.0 2989 | transitivePeerDependencies: 2990 | - supports-color 2991 | 2992 | body-parser@2.2.0: 2993 | dependencies: 2994 | bytes: 3.1.2 2995 | content-type: 1.0.5 2996 | debug: 4.4.0(supports-color@5.5.0) 2997 | http-errors: 2.0.0 2998 | iconv-lite: 0.6.3 2999 | on-finished: 2.4.1 3000 | qs: 6.14.0 3001 | raw-body: 3.0.0 3002 | type-is: 2.0.1 3003 | transitivePeerDependencies: 3004 | - supports-color 3005 | 3006 | brace-expansion@1.1.11: 3007 | dependencies: 3008 | balanced-match: 1.0.2 3009 | concat-map: 0.0.1 3010 | 3011 | brace-expansion@2.0.1: 3012 | dependencies: 3013 | balanced-match: 1.0.2 3014 | 3015 | braces@3.0.3: 3016 | dependencies: 3017 | fill-range: 7.1.1 3018 | 3019 | buffer-from@1.1.2: 3020 | optional: true 3021 | 3022 | bytes@3.1.2: {} 3023 | 3024 | cac@6.7.14: {} 3025 | 3026 | call-bind-apply-helpers@1.0.2: 3027 | dependencies: 3028 | es-errors: 1.3.0 3029 | function-bind: 1.1.2 3030 | 3031 | call-bound@1.0.4: 3032 | dependencies: 3033 | call-bind-apply-helpers: 1.0.2 3034 | get-intrinsic: 1.3.0 3035 | 3036 | callsites@3.1.0: {} 3037 | 3038 | chai@5.2.0: 3039 | dependencies: 3040 | assertion-error: 2.0.1 3041 | check-error: 2.1.1 3042 | deep-eql: 5.0.2 3043 | loupe: 3.1.3 3044 | pathval: 2.0.0 3045 | 3046 | chalk@4.1.2: 3047 | dependencies: 3048 | ansi-styles: 4.3.0 3049 | supports-color: 7.2.0 3050 | 3051 | chalk@5.6.2: {} 3052 | 3053 | check-error@2.1.1: {} 3054 | 3055 | chokidar@3.6.0: 3056 | dependencies: 3057 | anymatch: 3.1.3 3058 | braces: 3.0.3 3059 | glob-parent: 5.1.2 3060 | is-binary-path: 2.1.0 3061 | is-glob: 4.0.3 3062 | normalize-path: 3.0.0 3063 | readdirp: 3.6.0 3064 | optionalDependencies: 3065 | fsevents: 2.3.3 3066 | 3067 | cli-cursor@5.0.0: 3068 | dependencies: 3069 | restore-cursor: 5.1.0 3070 | 3071 | cli-truncate@4.0.0: 3072 | dependencies: 3073 | slice-ansi: 5.0.0 3074 | string-width: 7.2.0 3075 | 3076 | color-convert@2.0.1: 3077 | dependencies: 3078 | color-name: 1.1.4 3079 | 3080 | color-name@1.1.4: {} 3081 | 3082 | colorette@2.0.20: {} 3083 | 3084 | combined-stream@1.0.8: 3085 | dependencies: 3086 | delayed-stream: 1.0.0 3087 | 3088 | commander@13.1.0: {} 3089 | 3090 | commander@2.20.3: 3091 | optional: true 3092 | 3093 | compare-versions@6.1.1: {} 3094 | 3095 | component-emitter@1.3.1: {} 3096 | 3097 | concat-map@0.0.1: {} 3098 | 3099 | confbox@0.1.8: {} 3100 | 3101 | confbox@0.2.2: {} 3102 | 3103 | content-disposition@0.5.4: 3104 | dependencies: 3105 | safe-buffer: 5.2.1 3106 | 3107 | content-disposition@1.0.0: 3108 | dependencies: 3109 | safe-buffer: 5.2.1 3110 | 3111 | content-type@1.0.5: {} 3112 | 3113 | cookie-signature@1.0.6: {} 3114 | 3115 | cookie-signature@1.0.7: {} 3116 | 3117 | cookie-signature@1.2.2: {} 3118 | 3119 | cookie@0.7.1: {} 3120 | 3121 | cookie@0.7.2: {} 3122 | 3123 | cookiejar@2.1.4: {} 3124 | 3125 | cors@2.8.5: 3126 | dependencies: 3127 | object-assign: 4.1.1 3128 | vary: 1.1.2 3129 | 3130 | create-require@1.1.1: {} 3131 | 3132 | cross-spawn@7.0.6: 3133 | dependencies: 3134 | path-key: 3.1.1 3135 | shebang-command: 2.0.0 3136 | which: 2.0.2 3137 | 3138 | de-indent@1.0.2: {} 3139 | 3140 | debug@2.6.9: 3141 | dependencies: 3142 | ms: 2.0.0 3143 | 3144 | debug@4.4.0(supports-color@5.5.0): 3145 | dependencies: 3146 | ms: 2.1.3 3147 | optionalDependencies: 3148 | supports-color: 5.5.0 3149 | 3150 | debug@4.4.3: 3151 | dependencies: 3152 | ms: 2.1.3 3153 | 3154 | deep-eql@5.0.2: {} 3155 | 3156 | deep-is@0.1.4: {} 3157 | 3158 | delayed-stream@1.0.0: {} 3159 | 3160 | depd@2.0.0: {} 3161 | 3162 | destroy@1.2.0: {} 3163 | 3164 | dezalgo@1.0.4: 3165 | dependencies: 3166 | asap: 2.0.6 3167 | wrappy: 1.0.2 3168 | 3169 | diff@4.0.2: {} 3170 | 3171 | dunder-proto@1.0.1: 3172 | dependencies: 3173 | call-bind-apply-helpers: 1.0.2 3174 | es-errors: 1.3.0 3175 | gopd: 1.2.0 3176 | 3177 | ee-first@1.1.1: {} 3178 | 3179 | emoji-regex@10.5.0: {} 3180 | 3181 | encodeurl@1.0.2: {} 3182 | 3183 | encodeurl@2.0.0: {} 3184 | 3185 | entities@4.5.0: {} 3186 | 3187 | environment@1.1.0: {} 3188 | 3189 | es-define-property@1.0.1: {} 3190 | 3191 | es-errors@1.3.0: {} 3192 | 3193 | es-module-lexer@1.7.0: {} 3194 | 3195 | es-object-atoms@1.1.1: 3196 | dependencies: 3197 | es-errors: 1.3.0 3198 | 3199 | es-set-tostringtag@2.1.0: 3200 | dependencies: 3201 | es-errors: 1.3.0 3202 | get-intrinsic: 1.3.0 3203 | has-tostringtag: 1.0.2 3204 | hasown: 2.0.2 3205 | 3206 | esbuild@0.25.3: 3207 | optionalDependencies: 3208 | '@esbuild/aix-ppc64': 0.25.3 3209 | '@esbuild/android-arm': 0.25.3 3210 | '@esbuild/android-arm64': 0.25.3 3211 | '@esbuild/android-x64': 0.25.3 3212 | '@esbuild/darwin-arm64': 0.25.3 3213 | '@esbuild/darwin-x64': 0.25.3 3214 | '@esbuild/freebsd-arm64': 0.25.3 3215 | '@esbuild/freebsd-x64': 0.25.3 3216 | '@esbuild/linux-arm': 0.25.3 3217 | '@esbuild/linux-arm64': 0.25.3 3218 | '@esbuild/linux-ia32': 0.25.3 3219 | '@esbuild/linux-loong64': 0.25.3 3220 | '@esbuild/linux-mips64el': 0.25.3 3221 | '@esbuild/linux-ppc64': 0.25.3 3222 | '@esbuild/linux-riscv64': 0.25.3 3223 | '@esbuild/linux-s390x': 0.25.3 3224 | '@esbuild/linux-x64': 0.25.3 3225 | '@esbuild/netbsd-arm64': 0.25.3 3226 | '@esbuild/netbsd-x64': 0.25.3 3227 | '@esbuild/openbsd-arm64': 0.25.3 3228 | '@esbuild/openbsd-x64': 0.25.3 3229 | '@esbuild/sunos-x64': 0.25.3 3230 | '@esbuild/win32-arm64': 0.25.3 3231 | '@esbuild/win32-ia32': 0.25.3 3232 | '@esbuild/win32-x64': 0.25.3 3233 | 3234 | escape-html@1.0.3: {} 3235 | 3236 | escape-string-regexp@4.0.0: {} 3237 | 3238 | eslint-config-prettier@10.1.2(eslint@9.26.0): 3239 | dependencies: 3240 | eslint: 9.26.0 3241 | 3242 | eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.2(eslint@9.26.0))(eslint@9.26.0)(prettier@3.5.3): 3243 | dependencies: 3244 | eslint: 9.26.0 3245 | prettier: 3.5.3 3246 | prettier-linter-helpers: 1.0.0 3247 | synckit: 0.11.11 3248 | optionalDependencies: 3249 | eslint-config-prettier: 10.1.2(eslint@9.26.0) 3250 | 3251 | eslint-scope@8.3.0: 3252 | dependencies: 3253 | esrecurse: 4.3.0 3254 | estraverse: 5.3.0 3255 | 3256 | eslint-visitor-keys@3.4.3: {} 3257 | 3258 | eslint-visitor-keys@4.2.0: {} 3259 | 3260 | eslint@9.26.0: 3261 | dependencies: 3262 | '@eslint-community/eslint-utils': 4.7.0(eslint@9.26.0) 3263 | '@eslint-community/regexpp': 4.12.1 3264 | '@eslint/config-array': 0.20.0 3265 | '@eslint/config-helpers': 0.2.2 3266 | '@eslint/core': 0.13.0 3267 | '@eslint/eslintrc': 3.3.1 3268 | '@eslint/js': 9.26.0 3269 | '@eslint/plugin-kit': 0.2.8 3270 | '@humanfs/node': 0.16.6 3271 | '@humanwhocodes/module-importer': 1.0.1 3272 | '@humanwhocodes/retry': 0.4.2 3273 | '@modelcontextprotocol/sdk': 1.11.0 3274 | '@types/estree': 1.0.7 3275 | '@types/json-schema': 7.0.15 3276 | ajv: 6.12.6 3277 | chalk: 4.1.2 3278 | cross-spawn: 7.0.6 3279 | debug: 4.4.0(supports-color@5.5.0) 3280 | escape-string-regexp: 4.0.0 3281 | eslint-scope: 8.3.0 3282 | eslint-visitor-keys: 4.2.0 3283 | espree: 10.3.0 3284 | esquery: 1.6.0 3285 | esutils: 2.0.3 3286 | fast-deep-equal: 3.1.3 3287 | file-entry-cache: 8.0.0 3288 | find-up: 5.0.0 3289 | glob-parent: 6.0.2 3290 | ignore: 5.3.2 3291 | imurmurhash: 0.1.4 3292 | is-glob: 4.0.3 3293 | json-stable-stringify-without-jsonify: 1.0.1 3294 | lodash.merge: 4.6.2 3295 | minimatch: 3.1.2 3296 | natural-compare: 1.4.0 3297 | optionator: 0.9.4 3298 | zod: 3.24.3 3299 | transitivePeerDependencies: 3300 | - supports-color 3301 | 3302 | espree@10.3.0: 3303 | dependencies: 3304 | acorn: 8.14.1 3305 | acorn-jsx: 5.3.2(acorn@8.14.1) 3306 | eslint-visitor-keys: 4.2.0 3307 | 3308 | esquery@1.6.0: 3309 | dependencies: 3310 | estraverse: 5.3.0 3311 | 3312 | esrecurse@4.3.0: 3313 | dependencies: 3314 | estraverse: 5.3.0 3315 | 3316 | estraverse@5.3.0: {} 3317 | 3318 | estree-walker@2.0.2: {} 3319 | 3320 | estree-walker@3.0.3: 3321 | dependencies: 3322 | '@types/estree': 1.0.7 3323 | 3324 | esutils@2.0.3: {} 3325 | 3326 | etag@1.8.1: {} 3327 | 3328 | eventemitter3@5.0.1: {} 3329 | 3330 | eventsource-parser@3.0.1: {} 3331 | 3332 | eventsource@3.0.6: 3333 | dependencies: 3334 | eventsource-parser: 3.0.1 3335 | 3336 | execa@8.0.1: 3337 | dependencies: 3338 | cross-spawn: 7.0.6 3339 | get-stream: 8.0.1 3340 | human-signals: 5.0.0 3341 | is-stream: 3.0.0 3342 | merge-stream: 2.0.0 3343 | npm-run-path: 5.3.0 3344 | onetime: 6.0.0 3345 | signal-exit: 4.1.0 3346 | strip-final-newline: 3.0.0 3347 | 3348 | expect-type@1.2.1: {} 3349 | 3350 | express-rate-limit@7.5.0(express@5.1.0): 3351 | dependencies: 3352 | express: 5.1.0 3353 | 3354 | express-session@1.18.1: 3355 | dependencies: 3356 | cookie: 0.7.2 3357 | cookie-signature: 1.0.7 3358 | debug: 2.6.9 3359 | depd: 2.0.0 3360 | on-headers: 1.0.2 3361 | parseurl: 1.3.3 3362 | safe-buffer: 5.2.1 3363 | uid-safe: 2.1.5 3364 | transitivePeerDependencies: 3365 | - supports-color 3366 | 3367 | express@4.21.2: 3368 | dependencies: 3369 | accepts: 1.3.8 3370 | array-flatten: 1.1.1 3371 | body-parser: 1.20.3 3372 | content-disposition: 0.5.4 3373 | content-type: 1.0.5 3374 | cookie: 0.7.1 3375 | cookie-signature: 1.0.6 3376 | debug: 2.6.9 3377 | depd: 2.0.0 3378 | encodeurl: 2.0.0 3379 | escape-html: 1.0.3 3380 | etag: 1.8.1 3381 | finalhandler: 1.3.1 3382 | fresh: 0.5.2 3383 | http-errors: 2.0.0 3384 | merge-descriptors: 1.0.3 3385 | methods: 1.1.2 3386 | on-finished: 2.4.1 3387 | parseurl: 1.3.3 3388 | path-to-regexp: 0.1.12 3389 | proxy-addr: 2.0.7 3390 | qs: 6.13.0 3391 | range-parser: 1.2.1 3392 | safe-buffer: 5.2.1 3393 | send: 0.19.0 3394 | serve-static: 1.16.2 3395 | setprototypeof: 1.2.0 3396 | statuses: 2.0.1 3397 | type-is: 1.6.18 3398 | utils-merge: 1.0.1 3399 | vary: 1.1.2 3400 | transitivePeerDependencies: 3401 | - supports-color 3402 | 3403 | express@5.1.0: 3404 | dependencies: 3405 | accepts: 2.0.0 3406 | body-parser: 2.2.0 3407 | content-disposition: 1.0.0 3408 | content-type: 1.0.5 3409 | cookie: 0.7.2 3410 | cookie-signature: 1.2.2 3411 | debug: 4.4.0(supports-color@5.5.0) 3412 | encodeurl: 2.0.0 3413 | escape-html: 1.0.3 3414 | etag: 1.8.1 3415 | finalhandler: 2.1.0 3416 | fresh: 2.0.0 3417 | http-errors: 2.0.0 3418 | merge-descriptors: 2.0.0 3419 | mime-types: 3.0.1 3420 | on-finished: 2.4.1 3421 | once: 1.4.0 3422 | parseurl: 1.3.3 3423 | proxy-addr: 2.0.7 3424 | qs: 6.14.0 3425 | range-parser: 1.2.1 3426 | router: 2.2.0 3427 | send: 1.2.0 3428 | serve-static: 2.2.0 3429 | statuses: 2.0.1 3430 | type-is: 2.0.1 3431 | vary: 1.1.2 3432 | transitivePeerDependencies: 3433 | - supports-color 3434 | 3435 | exsolve@1.0.5: {} 3436 | 3437 | fast-deep-equal@3.1.3: {} 3438 | 3439 | fast-diff@1.3.0: {} 3440 | 3441 | fast-glob@3.3.3: 3442 | dependencies: 3443 | '@nodelib/fs.stat': 2.0.5 3444 | '@nodelib/fs.walk': 1.2.8 3445 | glob-parent: 5.1.2 3446 | merge2: 1.4.1 3447 | micromatch: 4.0.8 3448 | 3449 | fast-json-stable-stringify@2.1.0: {} 3450 | 3451 | fast-levenshtein@2.0.6: {} 3452 | 3453 | fast-safe-stringify@2.1.1: {} 3454 | 3455 | fastq@1.19.1: 3456 | dependencies: 3457 | reusify: 1.1.0 3458 | 3459 | fdir@6.4.4(picomatch@4.0.2): 3460 | optionalDependencies: 3461 | picomatch: 4.0.2 3462 | 3463 | file-entry-cache@8.0.0: 3464 | dependencies: 3465 | flat-cache: 4.0.1 3466 | 3467 | fill-range@7.1.1: 3468 | dependencies: 3469 | to-regex-range: 5.0.1 3470 | 3471 | finalhandler@1.3.1: 3472 | dependencies: 3473 | debug: 2.6.9 3474 | encodeurl: 2.0.0 3475 | escape-html: 1.0.3 3476 | on-finished: 2.4.1 3477 | parseurl: 1.3.3 3478 | statuses: 2.0.1 3479 | unpipe: 1.0.0 3480 | transitivePeerDependencies: 3481 | - supports-color 3482 | 3483 | finalhandler@2.1.0: 3484 | dependencies: 3485 | debug: 4.4.0(supports-color@5.5.0) 3486 | encodeurl: 2.0.0 3487 | escape-html: 1.0.3 3488 | on-finished: 2.4.1 3489 | parseurl: 1.3.3 3490 | statuses: 2.0.1 3491 | transitivePeerDependencies: 3492 | - supports-color 3493 | 3494 | find-up@5.0.0: 3495 | dependencies: 3496 | locate-path: 6.0.0 3497 | path-exists: 4.0.0 3498 | 3499 | flat-cache@4.0.1: 3500 | dependencies: 3501 | flatted: 3.3.3 3502 | keyv: 4.5.4 3503 | 3504 | flatted@3.3.3: {} 3505 | 3506 | form-data@4.0.2: 3507 | dependencies: 3508 | asynckit: 0.4.0 3509 | combined-stream: 1.0.8 3510 | es-set-tostringtag: 2.1.0 3511 | mime-types: 2.1.35 3512 | 3513 | formidable@3.5.4: 3514 | dependencies: 3515 | '@paralleldrive/cuid2': 2.2.2 3516 | dezalgo: 1.0.4 3517 | once: 1.4.0 3518 | 3519 | forwarded@0.2.0: {} 3520 | 3521 | fresh@0.5.2: {} 3522 | 3523 | fresh@2.0.0: {} 3524 | 3525 | fs-extra@11.3.0: 3526 | dependencies: 3527 | graceful-fs: 4.2.11 3528 | jsonfile: 6.1.0 3529 | universalify: 2.0.1 3530 | 3531 | fsevents@2.3.3: 3532 | optional: true 3533 | 3534 | function-bind@1.1.2: {} 3535 | 3536 | get-east-asian-width@1.4.0: {} 3537 | 3538 | get-intrinsic@1.3.0: 3539 | dependencies: 3540 | call-bind-apply-helpers: 1.0.2 3541 | es-define-property: 1.0.1 3542 | es-errors: 1.3.0 3543 | es-object-atoms: 1.1.1 3544 | function-bind: 1.1.2 3545 | get-proto: 1.0.1 3546 | gopd: 1.2.0 3547 | has-symbols: 1.1.0 3548 | hasown: 2.0.2 3549 | math-intrinsics: 1.1.0 3550 | 3551 | get-proto@1.0.1: 3552 | dependencies: 3553 | dunder-proto: 1.0.1 3554 | es-object-atoms: 1.1.1 3555 | 3556 | get-stream@8.0.1: {} 3557 | 3558 | glob-parent@5.1.2: 3559 | dependencies: 3560 | is-glob: 4.0.3 3561 | 3562 | glob-parent@6.0.2: 3563 | dependencies: 3564 | is-glob: 4.0.3 3565 | 3566 | globals@14.0.0: {} 3567 | 3568 | globals@16.0.0: {} 3569 | 3570 | gopd@1.2.0: {} 3571 | 3572 | graceful-fs@4.2.11: {} 3573 | 3574 | graphemer@1.4.0: {} 3575 | 3576 | has-flag@3.0.0: {} 3577 | 3578 | has-flag@4.0.0: {} 3579 | 3580 | has-symbols@1.1.0: {} 3581 | 3582 | has-tostringtag@1.0.2: 3583 | dependencies: 3584 | has-symbols: 1.1.0 3585 | 3586 | hasown@2.0.2: 3587 | dependencies: 3588 | function-bind: 1.1.2 3589 | 3590 | he@1.2.0: {} 3591 | 3592 | http-errors@2.0.0: 3593 | dependencies: 3594 | depd: 2.0.0 3595 | inherits: 2.0.4 3596 | setprototypeof: 1.2.0 3597 | statuses: 2.0.1 3598 | toidentifier: 1.0.1 3599 | 3600 | human-signals@5.0.0: {} 3601 | 3602 | husky@9.1.7: {} 3603 | 3604 | iconv-lite@0.4.24: 3605 | dependencies: 3606 | safer-buffer: 2.1.2 3607 | 3608 | iconv-lite@0.6.3: 3609 | dependencies: 3610 | safer-buffer: 2.1.2 3611 | 3612 | ignore-by-default@1.0.1: {} 3613 | 3614 | ignore@5.3.2: {} 3615 | 3616 | import-fresh@3.3.1: 3617 | dependencies: 3618 | parent-module: 1.0.1 3619 | resolve-from: 4.0.0 3620 | 3621 | import-lazy@4.0.0: {} 3622 | 3623 | imurmurhash@0.1.4: {} 3624 | 3625 | inherits@2.0.4: {} 3626 | 3627 | ipaddr.js@1.9.1: {} 3628 | 3629 | is-binary-path@2.1.0: 3630 | dependencies: 3631 | binary-extensions: 2.3.0 3632 | 3633 | is-core-module@2.16.1: 3634 | dependencies: 3635 | hasown: 2.0.2 3636 | 3637 | is-extglob@2.1.1: {} 3638 | 3639 | is-fullwidth-code-point@4.0.0: {} 3640 | 3641 | is-fullwidth-code-point@5.1.0: 3642 | dependencies: 3643 | get-east-asian-width: 1.4.0 3644 | 3645 | is-glob@4.0.3: 3646 | dependencies: 3647 | is-extglob: 2.1.1 3648 | 3649 | is-number@7.0.0: {} 3650 | 3651 | is-promise@4.0.0: {} 3652 | 3653 | is-stream@3.0.0: {} 3654 | 3655 | isexe@2.0.0: {} 3656 | 3657 | jju@1.4.0: {} 3658 | 3659 | js-yaml@4.1.0: 3660 | dependencies: 3661 | argparse: 2.0.1 3662 | 3663 | json-buffer@3.0.1: {} 3664 | 3665 | json-schema-traverse@0.4.1: {} 3666 | 3667 | json-schema-traverse@1.0.0: {} 3668 | 3669 | json-stable-stringify-without-jsonify@1.0.1: {} 3670 | 3671 | jsonfile@6.1.0: 3672 | dependencies: 3673 | universalify: 2.0.1 3674 | optionalDependencies: 3675 | graceful-fs: 4.2.11 3676 | 3677 | jsrsasign@11.1.0: {} 3678 | 3679 | keyv@4.5.4: 3680 | dependencies: 3681 | json-buffer: 3.0.1 3682 | 3683 | kolorist@1.8.0: {} 3684 | 3685 | levn@0.4.1: 3686 | dependencies: 3687 | prelude-ls: 1.2.1 3688 | type-check: 0.4.0 3689 | 3690 | lilconfig@3.1.3: {} 3691 | 3692 | lint-staged@15.5.2: 3693 | dependencies: 3694 | chalk: 5.6.2 3695 | commander: 13.1.0 3696 | debug: 4.4.3 3697 | execa: 8.0.1 3698 | lilconfig: 3.1.3 3699 | listr2: 8.3.3 3700 | micromatch: 4.0.8 3701 | pidtree: 0.6.0 3702 | string-argv: 0.3.2 3703 | yaml: 2.8.1 3704 | transitivePeerDependencies: 3705 | - supports-color 3706 | 3707 | listr2@8.3.3: 3708 | dependencies: 3709 | cli-truncate: 4.0.0 3710 | colorette: 2.0.20 3711 | eventemitter3: 5.0.1 3712 | log-update: 6.1.0 3713 | rfdc: 1.4.1 3714 | wrap-ansi: 9.0.2 3715 | 3716 | local-pkg@1.1.1: 3717 | dependencies: 3718 | mlly: 1.7.4 3719 | pkg-types: 2.1.0 3720 | quansync: 0.2.10 3721 | 3722 | locate-path@6.0.0: 3723 | dependencies: 3724 | p-locate: 5.0.0 3725 | 3726 | lodash.merge@4.6.2: {} 3727 | 3728 | lodash@4.17.21: {} 3729 | 3730 | log-update@6.1.0: 3731 | dependencies: 3732 | ansi-escapes: 7.1.1 3733 | cli-cursor: 5.0.0 3734 | slice-ansi: 7.1.2 3735 | strip-ansi: 7.1.2 3736 | wrap-ansi: 9.0.2 3737 | 3738 | loupe@3.1.3: {} 3739 | 3740 | lru-cache@6.0.0: 3741 | dependencies: 3742 | yallist: 4.0.0 3743 | 3744 | magic-string@0.30.17: 3745 | dependencies: 3746 | '@jridgewell/sourcemap-codec': 1.5.0 3747 | 3748 | make-error@1.3.6: {} 3749 | 3750 | math-intrinsics@1.1.0: {} 3751 | 3752 | media-typer@0.3.0: {} 3753 | 3754 | media-typer@1.1.0: {} 3755 | 3756 | merge-descriptors@1.0.3: {} 3757 | 3758 | merge-descriptors@2.0.0: {} 3759 | 3760 | merge-stream@2.0.0: {} 3761 | 3762 | merge2@1.4.1: {} 3763 | 3764 | methods@1.1.2: {} 3765 | 3766 | micromatch@4.0.8: 3767 | dependencies: 3768 | braces: 3.0.3 3769 | picomatch: 2.3.1 3770 | 3771 | mime-db@1.52.0: {} 3772 | 3773 | mime-db@1.54.0: {} 3774 | 3775 | mime-types@2.1.35: 3776 | dependencies: 3777 | mime-db: 1.52.0 3778 | 3779 | mime-types@3.0.1: 3780 | dependencies: 3781 | mime-db: 1.54.0 3782 | 3783 | mime@1.6.0: {} 3784 | 3785 | mime@2.6.0: {} 3786 | 3787 | mimic-fn@4.0.0: {} 3788 | 3789 | mimic-function@5.0.1: {} 3790 | 3791 | minimatch@3.0.8: 3792 | dependencies: 3793 | brace-expansion: 1.1.11 3794 | 3795 | minimatch@3.1.2: 3796 | dependencies: 3797 | brace-expansion: 1.1.11 3798 | 3799 | minimatch@9.0.5: 3800 | dependencies: 3801 | brace-expansion: 2.0.1 3802 | 3803 | mlly@1.7.4: 3804 | dependencies: 3805 | acorn: 8.14.1 3806 | pathe: 2.0.3 3807 | pkg-types: 1.3.1 3808 | ufo: 1.6.1 3809 | 3810 | ms@2.0.0: {} 3811 | 3812 | ms@2.1.3: {} 3813 | 3814 | muggle-string@0.4.1: {} 3815 | 3816 | nanoid@3.3.11: {} 3817 | 3818 | natural-compare@1.4.0: {} 3819 | 3820 | negotiator@0.6.3: {} 3821 | 3822 | negotiator@1.0.0: {} 3823 | 3824 | nodemon@3.1.10: 3825 | dependencies: 3826 | chokidar: 3.6.0 3827 | debug: 4.4.0(supports-color@5.5.0) 3828 | ignore-by-default: 1.0.1 3829 | minimatch: 3.1.2 3830 | pstree.remy: 1.1.8 3831 | semver: 7.7.1 3832 | simple-update-notifier: 2.0.0 3833 | supports-color: 5.5.0 3834 | touch: 3.1.1 3835 | undefsafe: 2.0.5 3836 | 3837 | normalize-path@3.0.0: {} 3838 | 3839 | npm-run-path@5.3.0: 3840 | dependencies: 3841 | path-key: 4.0.0 3842 | 3843 | object-assign@4.1.1: {} 3844 | 3845 | object-inspect@1.13.4: {} 3846 | 3847 | on-finished@2.4.1: 3848 | dependencies: 3849 | ee-first: 1.1.1 3850 | 3851 | on-headers@1.0.2: {} 3852 | 3853 | once@1.4.0: 3854 | dependencies: 3855 | wrappy: 1.0.2 3856 | 3857 | onetime@6.0.0: 3858 | dependencies: 3859 | mimic-fn: 4.0.0 3860 | 3861 | onetime@7.0.0: 3862 | dependencies: 3863 | mimic-function: 5.0.1 3864 | 3865 | optionator@0.9.4: 3866 | dependencies: 3867 | deep-is: 0.1.4 3868 | fast-levenshtein: 2.0.6 3869 | levn: 0.4.1 3870 | prelude-ls: 1.2.1 3871 | type-check: 0.4.0 3872 | word-wrap: 1.2.5 3873 | 3874 | p-limit@3.1.0: 3875 | dependencies: 3876 | yocto-queue: 0.1.0 3877 | 3878 | p-locate@5.0.0: 3879 | dependencies: 3880 | p-limit: 3.1.0 3881 | 3882 | parent-module@1.0.1: 3883 | dependencies: 3884 | callsites: 3.1.0 3885 | 3886 | parseurl@1.3.3: {} 3887 | 3888 | path-browserify@1.0.1: {} 3889 | 3890 | path-exists@4.0.0: {} 3891 | 3892 | path-key@3.1.1: {} 3893 | 3894 | path-key@4.0.0: {} 3895 | 3896 | path-parse@1.0.7: {} 3897 | 3898 | path-to-regexp@0.1.12: {} 3899 | 3900 | path-to-regexp@8.2.0: {} 3901 | 3902 | pathe@2.0.3: {} 3903 | 3904 | pathval@2.0.0: {} 3905 | 3906 | picocolors@1.1.1: {} 3907 | 3908 | picomatch@2.3.1: {} 3909 | 3910 | picomatch@4.0.2: {} 3911 | 3912 | pidtree@0.6.0: {} 3913 | 3914 | pkce-challenge@5.0.0: {} 3915 | 3916 | pkg-types@1.3.1: 3917 | dependencies: 3918 | confbox: 0.1.8 3919 | mlly: 1.7.4 3920 | pathe: 2.0.3 3921 | 3922 | pkg-types@2.1.0: 3923 | dependencies: 3924 | confbox: 0.2.2 3925 | exsolve: 1.0.5 3926 | pathe: 2.0.3 3927 | 3928 | postcss@8.5.3: 3929 | dependencies: 3930 | nanoid: 3.3.11 3931 | picocolors: 1.1.1 3932 | source-map-js: 1.2.1 3933 | 3934 | prelude-ls@1.2.1: {} 3935 | 3936 | prettier-linter-helpers@1.0.0: 3937 | dependencies: 3938 | fast-diff: 1.3.0 3939 | 3940 | prettier@3.5.3: {} 3941 | 3942 | proxy-addr@2.0.7: 3943 | dependencies: 3944 | forwarded: 0.2.0 3945 | ipaddr.js: 1.9.1 3946 | 3947 | pstree.remy@1.1.8: {} 3948 | 3949 | punycode@2.3.1: {} 3950 | 3951 | qs@6.13.0: 3952 | dependencies: 3953 | side-channel: 1.1.0 3954 | 3955 | qs@6.14.0: 3956 | dependencies: 3957 | side-channel: 1.1.0 3958 | 3959 | quansync@0.2.10: {} 3960 | 3961 | queue-microtask@1.2.3: {} 3962 | 3963 | random-bytes@1.0.0: {} 3964 | 3965 | range-parser@1.2.1: {} 3966 | 3967 | raw-body@2.5.2: 3968 | dependencies: 3969 | bytes: 3.1.2 3970 | http-errors: 2.0.0 3971 | iconv-lite: 0.4.24 3972 | unpipe: 1.0.0 3973 | 3974 | raw-body@3.0.0: 3975 | dependencies: 3976 | bytes: 3.1.2 3977 | http-errors: 2.0.0 3978 | iconv-lite: 0.6.3 3979 | unpipe: 1.0.0 3980 | 3981 | readdirp@3.6.0: 3982 | dependencies: 3983 | picomatch: 2.3.1 3984 | 3985 | require-from-string@2.0.2: {} 3986 | 3987 | resolve-from@4.0.0: {} 3988 | 3989 | resolve@1.22.10: 3990 | dependencies: 3991 | is-core-module: 2.16.1 3992 | path-parse: 1.0.7 3993 | supports-preserve-symlinks-flag: 1.0.0 3994 | 3995 | restore-cursor@5.1.0: 3996 | dependencies: 3997 | onetime: 7.0.0 3998 | signal-exit: 4.1.0 3999 | 4000 | reusify@1.1.0: {} 4001 | 4002 | rfdc@1.4.1: {} 4003 | 4004 | rollup@4.40.1: 4005 | dependencies: 4006 | '@types/estree': 1.0.7 4007 | optionalDependencies: 4008 | '@rollup/rollup-android-arm-eabi': 4.40.1 4009 | '@rollup/rollup-android-arm64': 4.40.1 4010 | '@rollup/rollup-darwin-arm64': 4.40.1 4011 | '@rollup/rollup-darwin-x64': 4.40.1 4012 | '@rollup/rollup-freebsd-arm64': 4.40.1 4013 | '@rollup/rollup-freebsd-x64': 4.40.1 4014 | '@rollup/rollup-linux-arm-gnueabihf': 4.40.1 4015 | '@rollup/rollup-linux-arm-musleabihf': 4.40.1 4016 | '@rollup/rollup-linux-arm64-gnu': 4.40.1 4017 | '@rollup/rollup-linux-arm64-musl': 4.40.1 4018 | '@rollup/rollup-linux-loongarch64-gnu': 4.40.1 4019 | '@rollup/rollup-linux-powerpc64le-gnu': 4.40.1 4020 | '@rollup/rollup-linux-riscv64-gnu': 4.40.1 4021 | '@rollup/rollup-linux-riscv64-musl': 4.40.1 4022 | '@rollup/rollup-linux-s390x-gnu': 4.40.1 4023 | '@rollup/rollup-linux-x64-gnu': 4.40.1 4024 | '@rollup/rollup-linux-x64-musl': 4.40.1 4025 | '@rollup/rollup-win32-arm64-msvc': 4.40.1 4026 | '@rollup/rollup-win32-ia32-msvc': 4.40.1 4027 | '@rollup/rollup-win32-x64-msvc': 4.40.1 4028 | fsevents: 2.3.3 4029 | 4030 | router@2.2.0: 4031 | dependencies: 4032 | debug: 4.4.0(supports-color@5.5.0) 4033 | depd: 2.0.0 4034 | is-promise: 4.0.0 4035 | parseurl: 1.3.3 4036 | path-to-regexp: 8.2.0 4037 | transitivePeerDependencies: 4038 | - supports-color 4039 | 4040 | run-parallel@1.2.0: 4041 | dependencies: 4042 | queue-microtask: 1.2.3 4043 | 4044 | safe-buffer@5.2.1: {} 4045 | 4046 | safer-buffer@2.1.2: {} 4047 | 4048 | semver@7.5.4: 4049 | dependencies: 4050 | lru-cache: 6.0.0 4051 | 4052 | semver@7.7.1: {} 4053 | 4054 | send@0.19.0: 4055 | dependencies: 4056 | debug: 2.6.9 4057 | depd: 2.0.0 4058 | destroy: 1.2.0 4059 | encodeurl: 1.0.2 4060 | escape-html: 1.0.3 4061 | etag: 1.8.1 4062 | fresh: 0.5.2 4063 | http-errors: 2.0.0 4064 | mime: 1.6.0 4065 | ms: 2.1.3 4066 | on-finished: 2.4.1 4067 | range-parser: 1.2.1 4068 | statuses: 2.0.1 4069 | transitivePeerDependencies: 4070 | - supports-color 4071 | 4072 | send@1.2.0: 4073 | dependencies: 4074 | debug: 4.4.0(supports-color@5.5.0) 4075 | encodeurl: 2.0.0 4076 | escape-html: 1.0.3 4077 | etag: 1.8.1 4078 | fresh: 2.0.0 4079 | http-errors: 2.0.0 4080 | mime-types: 3.0.1 4081 | ms: 2.1.3 4082 | on-finished: 2.4.1 4083 | range-parser: 1.2.1 4084 | statuses: 2.0.1 4085 | transitivePeerDependencies: 4086 | - supports-color 4087 | 4088 | serve-static@1.16.2: 4089 | dependencies: 4090 | encodeurl: 2.0.0 4091 | escape-html: 1.0.3 4092 | parseurl: 1.3.3 4093 | send: 0.19.0 4094 | transitivePeerDependencies: 4095 | - supports-color 4096 | 4097 | serve-static@2.2.0: 4098 | dependencies: 4099 | encodeurl: 2.0.0 4100 | escape-html: 1.0.3 4101 | parseurl: 1.3.3 4102 | send: 1.2.0 4103 | transitivePeerDependencies: 4104 | - supports-color 4105 | 4106 | setprototypeof@1.2.0: {} 4107 | 4108 | shebang-command@2.0.0: 4109 | dependencies: 4110 | shebang-regex: 3.0.0 4111 | 4112 | shebang-regex@3.0.0: {} 4113 | 4114 | side-channel-list@1.0.0: 4115 | dependencies: 4116 | es-errors: 1.3.0 4117 | object-inspect: 1.13.4 4118 | 4119 | side-channel-map@1.0.1: 4120 | dependencies: 4121 | call-bound: 1.0.4 4122 | es-errors: 1.3.0 4123 | get-intrinsic: 1.3.0 4124 | object-inspect: 1.13.4 4125 | 4126 | side-channel-weakmap@1.0.2: 4127 | dependencies: 4128 | call-bound: 1.0.4 4129 | es-errors: 1.3.0 4130 | get-intrinsic: 1.3.0 4131 | object-inspect: 1.13.4 4132 | side-channel-map: 1.0.1 4133 | 4134 | side-channel@1.1.0: 4135 | dependencies: 4136 | es-errors: 1.3.0 4137 | object-inspect: 1.13.4 4138 | side-channel-list: 1.0.0 4139 | side-channel-map: 1.0.1 4140 | side-channel-weakmap: 1.0.2 4141 | 4142 | siginfo@2.0.0: {} 4143 | 4144 | signal-exit@4.1.0: {} 4145 | 4146 | simple-update-notifier@2.0.0: 4147 | dependencies: 4148 | semver: 7.7.1 4149 | 4150 | slice-ansi@5.0.0: 4151 | dependencies: 4152 | ansi-styles: 6.2.3 4153 | is-fullwidth-code-point: 4.0.0 4154 | 4155 | slice-ansi@7.1.2: 4156 | dependencies: 4157 | ansi-styles: 6.2.3 4158 | is-fullwidth-code-point: 5.1.0 4159 | 4160 | source-map-js@1.2.1: {} 4161 | 4162 | source-map-support@0.5.21: 4163 | dependencies: 4164 | buffer-from: 1.1.2 4165 | source-map: 0.6.1 4166 | optional: true 4167 | 4168 | source-map@0.6.1: {} 4169 | 4170 | sprintf-js@1.0.3: {} 4171 | 4172 | stackback@0.0.2: {} 4173 | 4174 | statuses@2.0.1: {} 4175 | 4176 | std-env@3.9.0: {} 4177 | 4178 | string-argv@0.3.2: {} 4179 | 4180 | string-width@7.2.0: 4181 | dependencies: 4182 | emoji-regex: 10.5.0 4183 | get-east-asian-width: 1.4.0 4184 | strip-ansi: 7.1.2 4185 | 4186 | strip-ansi@7.1.2: 4187 | dependencies: 4188 | ansi-regex: 6.2.2 4189 | 4190 | strip-final-newline@3.0.0: {} 4191 | 4192 | strip-json-comments@3.1.1: {} 4193 | 4194 | superagent@9.0.2: 4195 | dependencies: 4196 | component-emitter: 1.3.1 4197 | cookiejar: 2.1.4 4198 | debug: 4.4.0(supports-color@5.5.0) 4199 | fast-safe-stringify: 2.1.1 4200 | form-data: 4.0.2 4201 | formidable: 3.5.4 4202 | methods: 1.1.2 4203 | mime: 2.6.0 4204 | qs: 6.14.0 4205 | transitivePeerDependencies: 4206 | - supports-color 4207 | 4208 | supertest@7.1.0: 4209 | dependencies: 4210 | methods: 1.1.2 4211 | superagent: 9.0.2 4212 | transitivePeerDependencies: 4213 | - supports-color 4214 | 4215 | supports-color@5.5.0: 4216 | dependencies: 4217 | has-flag: 3.0.0 4218 | 4219 | supports-color@7.2.0: 4220 | dependencies: 4221 | has-flag: 4.0.0 4222 | 4223 | supports-color@8.1.1: 4224 | dependencies: 4225 | has-flag: 4.0.0 4226 | 4227 | supports-preserve-symlinks-flag@1.0.0: {} 4228 | 4229 | synckit@0.11.11: 4230 | dependencies: 4231 | '@pkgr/core': 0.2.9 4232 | 4233 | terser@5.39.0: 4234 | dependencies: 4235 | '@jridgewell/source-map': 0.3.11 4236 | acorn: 8.15.0 4237 | commander: 2.20.3 4238 | source-map-support: 0.5.21 4239 | optional: true 4240 | 4241 | tinybench@2.9.0: {} 4242 | 4243 | tinyexec@0.3.2: {} 4244 | 4245 | tinyglobby@0.2.13: 4246 | dependencies: 4247 | fdir: 6.4.4(picomatch@4.0.2) 4248 | picomatch: 4.0.2 4249 | 4250 | tinypool@1.0.2: {} 4251 | 4252 | tinyrainbow@2.0.0: {} 4253 | 4254 | tinyspy@3.0.2: {} 4255 | 4256 | to-regex-range@5.0.1: 4257 | dependencies: 4258 | is-number: 7.0.0 4259 | 4260 | toidentifier@1.0.1: {} 4261 | 4262 | touch@3.1.1: {} 4263 | 4264 | ts-api-utils@2.1.0(typescript@5.8.3): 4265 | dependencies: 4266 | typescript: 5.8.3 4267 | 4268 | ts-node@10.9.2(@types/node@20.17.32)(typescript@5.8.3): 4269 | dependencies: 4270 | '@cspotcode/source-map-support': 0.8.1 4271 | '@tsconfig/node10': 1.0.11 4272 | '@tsconfig/node12': 1.0.11 4273 | '@tsconfig/node14': 1.0.3 4274 | '@tsconfig/node16': 1.0.4 4275 | '@types/node': 20.17.32 4276 | acorn: 8.14.1 4277 | acorn-walk: 8.3.4 4278 | arg: 4.1.3 4279 | create-require: 1.1.1 4280 | diff: 4.0.2 4281 | make-error: 1.3.6 4282 | typescript: 5.8.3 4283 | v8-compile-cache-lib: 3.0.1 4284 | yn: 3.1.1 4285 | 4286 | type-check@0.4.0: 4287 | dependencies: 4288 | prelude-ls: 1.2.1 4289 | 4290 | type-is@1.6.18: 4291 | dependencies: 4292 | media-typer: 0.3.0 4293 | mime-types: 2.1.35 4294 | 4295 | type-is@2.0.1: 4296 | dependencies: 4297 | content-type: 1.0.5 4298 | media-typer: 1.1.0 4299 | mime-types: 3.0.1 4300 | 4301 | typescript-eslint@8.31.1(eslint@9.26.0)(typescript@5.8.3): 4302 | dependencies: 4303 | '@typescript-eslint/eslint-plugin': 8.31.1(@typescript-eslint/parser@8.31.1(eslint@9.26.0)(typescript@5.8.3))(eslint@9.26.0)(typescript@5.8.3) 4304 | '@typescript-eslint/parser': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 4305 | '@typescript-eslint/utils': 8.31.1(eslint@9.26.0)(typescript@5.8.3) 4306 | eslint: 9.26.0 4307 | typescript: 5.8.3 4308 | transitivePeerDependencies: 4309 | - supports-color 4310 | 4311 | typescript@5.8.2: {} 4312 | 4313 | typescript@5.8.3: {} 4314 | 4315 | ufo@1.6.1: {} 4316 | 4317 | uid-safe@2.1.5: 4318 | dependencies: 4319 | random-bytes: 1.0.0 4320 | 4321 | uncrypto@0.1.3: {} 4322 | 4323 | undefsafe@2.0.5: {} 4324 | 4325 | undici-types@6.19.8: {} 4326 | 4327 | universalify@2.0.1: {} 4328 | 4329 | unpipe@1.0.0: {} 4330 | 4331 | uri-js@4.4.1: 4332 | dependencies: 4333 | punycode: 2.3.1 4334 | 4335 | utils-merge@1.0.1: {} 4336 | 4337 | v8-compile-cache-lib@3.0.1: {} 4338 | 4339 | vary@1.1.2: {} 4340 | 4341 | vite-node@3.1.2(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1): 4342 | dependencies: 4343 | cac: 6.7.14 4344 | debug: 4.4.0(supports-color@5.5.0) 4345 | es-module-lexer: 1.7.0 4346 | pathe: 2.0.3 4347 | vite: 6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 4348 | transitivePeerDependencies: 4349 | - '@types/node' 4350 | - jiti 4351 | - less 4352 | - lightningcss 4353 | - sass 4354 | - sass-embedded 4355 | - stylus 4356 | - sugarss 4357 | - supports-color 4358 | - terser 4359 | - tsx 4360 | - yaml 4361 | 4362 | vite-plugin-dts@4.5.3(@types/node@20.17.32)(rollup@4.40.1)(typescript@5.8.3)(vite@6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1)): 4363 | dependencies: 4364 | '@microsoft/api-extractor': 7.52.7(@types/node@20.17.32) 4365 | '@rollup/pluginutils': 5.1.4(rollup@4.40.1) 4366 | '@volar/typescript': 2.4.13 4367 | '@vue/language-core': 2.2.0(typescript@5.8.3) 4368 | compare-versions: 6.1.1 4369 | debug: 4.4.0(supports-color@5.5.0) 4370 | kolorist: 1.8.0 4371 | local-pkg: 1.1.1 4372 | magic-string: 0.30.17 4373 | typescript: 5.8.3 4374 | optionalDependencies: 4375 | vite: 6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 4376 | transitivePeerDependencies: 4377 | - '@types/node' 4378 | - rollup 4379 | - supports-color 4380 | 4381 | vite@6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1): 4382 | dependencies: 4383 | esbuild: 0.25.3 4384 | fdir: 6.4.4(picomatch@4.0.2) 4385 | picomatch: 4.0.2 4386 | postcss: 8.5.3 4387 | rollup: 4.40.1 4388 | tinyglobby: 0.2.13 4389 | optionalDependencies: 4390 | '@types/node': 20.17.32 4391 | fsevents: 2.3.3 4392 | terser: 5.39.0 4393 | yaml: 2.8.1 4394 | 4395 | vitest@3.1.2(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1): 4396 | dependencies: 4397 | '@vitest/expect': 3.1.2 4398 | '@vitest/mocker': 3.1.2(vite@6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1)) 4399 | '@vitest/pretty-format': 3.1.2 4400 | '@vitest/runner': 3.1.2 4401 | '@vitest/snapshot': 3.1.2 4402 | '@vitest/spy': 3.1.2 4403 | '@vitest/utils': 3.1.2 4404 | chai: 5.2.0 4405 | debug: 4.4.0(supports-color@5.5.0) 4406 | expect-type: 1.2.1 4407 | magic-string: 0.30.17 4408 | pathe: 2.0.3 4409 | std-env: 3.9.0 4410 | tinybench: 2.9.0 4411 | tinyexec: 0.3.2 4412 | tinyglobby: 0.2.13 4413 | tinypool: 1.0.2 4414 | tinyrainbow: 2.0.0 4415 | vite: 6.3.4(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 4416 | vite-node: 3.1.2(@types/node@20.17.32)(terser@5.39.0)(yaml@2.8.1) 4417 | why-is-node-running: 2.3.0 4418 | optionalDependencies: 4419 | '@types/node': 20.17.32 4420 | transitivePeerDependencies: 4421 | - jiti 4422 | - less 4423 | - lightningcss 4424 | - msw 4425 | - sass 4426 | - sass-embedded 4427 | - stylus 4428 | - sugarss 4429 | - supports-color 4430 | - terser 4431 | - tsx 4432 | - yaml 4433 | 4434 | vscode-uri@3.1.0: {} 4435 | 4436 | which@2.0.2: 4437 | dependencies: 4438 | isexe: 2.0.0 4439 | 4440 | why-is-node-running@2.3.0: 4441 | dependencies: 4442 | siginfo: 2.0.0 4443 | stackback: 0.0.2 4444 | 4445 | word-wrap@1.2.5: {} 4446 | 4447 | wrap-ansi@9.0.2: 4448 | dependencies: 4449 | ansi-styles: 6.2.3 4450 | string-width: 7.2.0 4451 | strip-ansi: 7.1.2 4452 | 4453 | wrappy@1.0.2: {} 4454 | 4455 | yallist@4.0.0: {} 4456 | 4457 | yaml@2.8.1: {} 4458 | 4459 | yn@3.1.1: {} 4460 | 4461 | yocto-queue@0.1.0: {} 4462 | 4463 | zod-to-json-schema@3.24.5(zod@3.24.3): 4464 | dependencies: 4465 | zod: 3.24.3 4466 | 4467 | zod@3.24.3: {} 4468 | --------------------------------------------------------------------------------