From 98517692f046eae98889f44711631e3ef4b684c2 Mon Sep 17 00:00:00 2001 From: Muhammad Rafay Nadeem <113093783+mrafnadeem-apimatic@users.noreply.github.com> Date: Thu, 4 Sep 2025 23:36:47 -0700 Subject: [PATCH 1/9] ci: only prerelease from alpha branch (#291) --- .github/workflows/release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 9e7125fa..e0052e25 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -103,7 +103,7 @@ jobs: SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} prerelease: - if: github.ref != 'refs/heads/master' && github.event.inputs.version_type == 'prerelease (unstable or experimental changes 0.0.0-alpha.X)' + if: github.ref == 'refs/heads/alpha' && github.event.inputs.version_type == 'prerelease (unstable or experimental changes 0.0.0-alpha.X)' name: Publish the npm package as an alpha release runs-on: ubuntu-latest environment: Production @@ -170,4 +170,4 @@ jobs: channel-id: 'C012YFE3D6D' slack-message: "apimatic-js-runtime release has been triggered!" env: - SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} \ No newline at end of file + SLACK_BOT_TOKEN: ${{ secrets.SLACK_BOT_TOKEN }} From c4f32a437a3d47eb7f74e9303810479d4bccff45 Mon Sep 17 00:00:00 2001 From: Muhammad Rafay Nadeem <113093783+mrafnadeem-apimatic@users.noreply.github.com> Date: Thu, 18 Sep 2025 21:49:31 -0700 Subject: [PATCH 2/9] ci: avoid passing args in workspace level command (#294) --- package.json | 2 +- packages/authentication-adapters/package.json | 2 +- packages/axios-client-adapter/package.json | 2 +- packages/convert-to-stream/package.json | 2 +- packages/core-interfaces/package.json | 2 +- packages/core/package.json | 2 +- packages/file-wrapper/package.json | 2 +- packages/http-headers/package.json | 2 +- packages/http-query/package.json | 2 +- packages/oauth-adapters/package.json | 2 +- packages/pagination/package.json | 2 +- packages/proxy/package.json | 2 +- packages/schema/package.json | 2 +- packages/test-utilities/package.json | 2 +- packages/xml-adapter/package.json | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index e77885ed..2078e591 100644 --- a/package.json +++ b/package.json @@ -15,7 +15,7 @@ "check-style:fix": "lerna run check-style:fix", "build:dev": "tsc -b ./tsconfig.monorepo.json", "test:watch": "jest", - "test": "lerna run test -- --ci --coverage --maxWorkers=2 --passWithNoTests", + "test": "lerna run test", "dev": "node ./scripts/dev.js", "ci": "npm run build && npm run test", "prerelease": "npm run build && npm run test" diff --git a/packages/authentication-adapters/package.json b/packages/authentication-adapters/package.json index c2ca24d2..08f2d1f2 100644 --- a/packages/authentication-adapters/package.json +++ b/packages/authentication-adapters/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/axios-client-adapter/package.json b/packages/axios-client-adapter/package.json index 96e5b180..1f42c472 100644 --- a/packages/axios-client-adapter/package.json +++ b/packages/axios-client-adapter/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/convert-to-stream/package.json b/packages/convert-to-stream/package.json index 5d53b781..14ff02a6 100644 --- a/packages/convert-to-stream/package.json +++ b/packages/convert-to-stream/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest --passWithNoTests", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/core-interfaces/package.json b/packages/core-interfaces/package.json index f0d402ec..606f7629 100644 --- a/packages/core-interfaces/package.json +++ b/packages/core-interfaces/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest --passWithNoTests", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/core/package.json b/packages/core/package.json index 3fea69b7..d3a879a9 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/file-wrapper/package.json b/packages/file-wrapper/package.json index 757e3424..69c31640 100644 --- a/packages/file-wrapper/package.json +++ b/packages/file-wrapper/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/http-headers/package.json b/packages/http-headers/package.json index 690ec889..ef9be67d 100644 --- a/packages/http-headers/package.json +++ b/packages/http-headers/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/http-query/package.json b/packages/http-query/package.json index c85cfca6..3ccbf662 100644 --- a/packages/http-query/package.json +++ b/packages/http-query/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/oauth-adapters/package.json b/packages/oauth-adapters/package.json index 8509cab7..4b285e49 100644 --- a/packages/oauth-adapters/package.json +++ b/packages/oauth-adapters/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/pagination/package.json b/packages/pagination/package.json index b425d764..ebf71b69 100644 --- a/packages/pagination/package.json +++ b/packages/pagination/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest --passWithNoTests", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/proxy/package.json b/packages/proxy/package.json index d444979e..bf887b69 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest --passWithNoTests", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/schema/package.json b/packages/schema/package.json index 21d8c275..c26f2ef2 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/test-utilities/package.json b/packages/test-utilities/package.json index 5f8b386c..802e17fe 100644 --- a/packages/test-utilities/package.json +++ b/packages/test-utilities/package.json @@ -10,7 +10,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest --passWithNoTests", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", diff --git a/packages/xml-adapter/package.json b/packages/xml-adapter/package.json index b0b3737e..9905197c 100644 --- a/packages/xml-adapter/package.json +++ b/packages/xml-adapter/package.json @@ -21,7 +21,7 @@ }, "scripts": { "clean": "rimraf lib es umd tsconfig.tsbuildinfo", - "test": "jest --passWithNoTests", + "test": "jest --ci --coverage --maxWorkers=2 --passWithNoTests", "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", "preversion": "npm run test", From 39129812b1aaa860bedafc074a2c44759d6ca14f Mon Sep 17 00:00:00 2001 From: Ayesha <88117894+Ayeshas09@users.noreply.github.com> Date: Tue, 30 Sep 2025 12:53:11 +0500 Subject: [PATCH 3/9] feat: add webhooks and callbacks support (#292) --- README.md | 1 + packages/core-interfaces/README.md | 1 + packages/core-interfaces/src/index.ts | 2 + .../src/signatureVerificationResult.ts | 74 +++ .../core-interfaces/src/signatureVerifier.ts | 9 + .../test/signatureVerificationResult.test.ts | 49 ++ packages/core/README.md | 1 + packages/core/package.json | 4 + packages/core/src/apiHelper.ts | 4 +- .../requestAdapters/expressRequestAdapter.ts | 110 ++++ packages/core/src/index.ts | 1 + .../expressRequestAdapter.test.ts | 313 ++++++++++ packages/hmac-signature-verifier/README.md | 13 + .../hmac-signature-verifier/jest.config.js | 7 + packages/hmac-signature-verifier/package.json | 45 ++ .../hmac-signature-verifier/rollup.config.js | 32 + .../src/hmacSignatureVerifier.ts | 157 +++++ packages/hmac-signature-verifier/src/index.ts | 1 + .../test/hmacSignatureVerifier.test.ts | 331 ++++++++++ .../hmac-signature-verifier/tsconfig.json | 10 + packages/pagination/package.json | 8 +- yarn.lock | 564 +++++++++++++++++- 22 files changed, 1713 insertions(+), 24 deletions(-) create mode 100644 packages/core-interfaces/src/signatureVerificationResult.ts create mode 100644 packages/core-interfaces/src/signatureVerifier.ts create mode 100644 packages/core-interfaces/test/signatureVerificationResult.test.ts create mode 100644 packages/core/src/http/requestAdapters/expressRequestAdapter.ts create mode 100644 packages/core/test/http/requestAdapters/expressRequestAdapter.test.ts create mode 100644 packages/hmac-signature-verifier/README.md create mode 100644 packages/hmac-signature-verifier/jest.config.js create mode 100644 packages/hmac-signature-verifier/package.json create mode 100644 packages/hmac-signature-verifier/rollup.config.js create mode 100644 packages/hmac-signature-verifier/src/hmacSignatureVerifier.ts create mode 100644 packages/hmac-signature-verifier/src/index.ts create mode 100644 packages/hmac-signature-verifier/test/hmacSignatureVerifier.test.ts create mode 100644 packages/hmac-signature-verifier/tsconfig.json diff --git a/README.md b/README.md index 0c09055c..d7ebd616 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,7 @@ They provide common runtime utilities needed by SDKs to make API calls and handl | [@apimatic/test-utilities](packages/test-utilities) | [![npm shield](https://img.shields.io/npm/v/@apimatic/test-utilities)](https://www.npmjs.com/package/@apimatic/test-utilities) | Provides assertion utilities for testing api calls. It can be plugged in as dev dependency to any library. | | [@apimatic/pagination](packages/pagination) | [![npm shield](https://img.shields.io/npm/v/@apimatic/pagination)](https://www.npmjs.com/package/@apimatic/pagination) | Provides utilities to handle paginated API responses, including support for asynchronous iteration over pages or items. | | [@apimatic/proxy](packages/proxy) | [![npm shield](https://img.shields.io/npm/v/@apimatic/proxy)](https://www.npmjs.com/package/@apimatic/proxy) | Provides proxy configuration utilities for HTTP clients. | +| [@apimatic/hmac-signature-verifier](packages/hmac-signature-verifier) | [![npm shield](https://img.shields.io/npm/v/@apimatic/hmac-signature-verifier)](https://www.npmjs.com/package/@apimatic/hmac-signature-verifier) | Provides HMAC signature verification utilities to secure HTTP requests. | ## Builds and Usage diff --git a/packages/core-interfaces/README.md b/packages/core-interfaces/README.md index 3848fc14..922efbd9 100644 --- a/packages/core-interfaces/README.md +++ b/packages/core-interfaces/README.md @@ -11,5 +11,6 @@ The exported types and interfaces include: * **Retry Configuration**: Types and interfaces for configuring retry logic in network calls. * **Logging**: Contracts for logging within HTTP clients and SDK operations. * **Paged Async Iterables**: Type support for async iteration over paged API results. +* **Signature Verification**: Interfaces and types for verifying HTTP request signatures. This library is used by JavaScript SDKs generated by the [APIMatic Code Generator](http://www.apimatic.io). For details on supported platforms and build artifacts, see the [Build and Usage Section](https://github.com/apimatic/apimatic-js-runtime?tab=readme-ov-file#builds-and-usage). \ No newline at end of file diff --git a/packages/core-interfaces/src/index.ts b/packages/core-interfaces/src/index.ts index 3b0779df..c0a47079 100644 --- a/packages/core-interfaces/src/index.ts +++ b/packages/core-interfaces/src/index.ts @@ -8,3 +8,5 @@ export * from './httpResponse'; export * from './retryConfiguration'; export * from './logging'; export type { PagedAsyncIterable } from './pagedAsyncIterable'; +export * from './signatureVerificationResult'; +export type { SignatureVerifier } from './signatureVerifier'; diff --git a/packages/core-interfaces/src/signatureVerificationResult.ts b/packages/core-interfaces/src/signatureVerificationResult.ts new file mode 100644 index 00000000..27e01f0b --- /dev/null +++ b/packages/core-interfaces/src/signatureVerificationResult.ts @@ -0,0 +1,74 @@ +const signatureVerificationResultMarker = Symbol('SignatureVerificationResult'); + +export interface SignatureVerificationResultMarker { + [signatureVerificationResultMarker]: true; +} + +/** + * Represents a successful signature verification. + */ +export interface SignatureVerificationSuccess + extends SignatureVerificationResultMarker { + success: true; +} + +/** + * Represents a failed signature verification with an error message. + */ +export interface SignatureVerificationFailure + extends SignatureVerificationResultMarker { + success: false; + error: string; +} + +/** + * Union type for signature verification results: + * either SignatureVerificationSuccess or SignatureVerificationFailure. + */ +export type SignatureVerificationResult = + | SignatureVerificationSuccess + | SignatureVerificationFailure; + +/** + * Type guard that checks if a value is a SignatureVerificationResult. + * + * @param result The value to validate. + * @returns True if the value is a SignatureVerificationResult, false otherwise. + */ +export function isSignatureVerificationResult( + result: unknown +): result is SignatureVerificationResult { + return ( + typeof result === 'object' && + result !== null && + signatureVerificationResultMarker in result + ); +} + +/** + * Creates a result object representing a successful signature verification. + * + * @returns A SignatureVerificationSuccess instance. + */ +export function createSignatureVerificationSuccess(): SignatureVerificationSuccess { + return { + [signatureVerificationResultMarker]: true, + success: true, + }; +} + +/** + * Creates a result object representing a failed signature verification. + * + * @param error Error message describing the reason for failure. + * @returns A SignatureVerificationFailure instance with the provided error message. + */ +export function createSignatureVerificationFailure( + error: string +): SignatureVerificationFailure { + return { + [signatureVerificationResultMarker]: true, + success: false, + error, + }; +} diff --git a/packages/core-interfaces/src/signatureVerifier.ts b/packages/core-interfaces/src/signatureVerifier.ts new file mode 100644 index 00000000..1ab51920 --- /dev/null +++ b/packages/core-interfaces/src/signatureVerifier.ts @@ -0,0 +1,9 @@ +import { HttpRequest } from './httpRequest'; +import { SignatureVerificationResult } from './signatureVerificationResult'; + +/** + * Defines the interface for verifying signatures on HTTP requests. + */ +export interface SignatureVerifier { + verify(req: HttpRequest): SignatureVerificationResult; +} diff --git a/packages/core-interfaces/test/signatureVerificationResult.test.ts b/packages/core-interfaces/test/signatureVerificationResult.test.ts new file mode 100644 index 00000000..d049bda3 --- /dev/null +++ b/packages/core-interfaces/test/signatureVerificationResult.test.ts @@ -0,0 +1,49 @@ +import { + isSignatureVerificationResult, + createSignatureVerificationSuccess, + createSignatureVerificationFailure, +} from '../src'; + +describe('signatureVerificationResult', () => { + describe('createSignatureVerificationSuccess', () => { + it('should create a success result with correct properties', () => { + const result = createSignatureVerificationSuccess(); + expect(result.success).toBe(true); + expect(typeof result).toBe('object'); + expect(result).toHaveProperty('success', true); + }); + }); + + describe('createSignatureVerificationFailure', () => { + it('should create a failure result with correct error message', () => { + const errorMsg = 'Invalid signature'; + const result = createSignatureVerificationFailure(errorMsg); + expect(result.success).toBe(false); + expect(result.error).toBe(errorMsg); + expect(typeof result).toBe('object'); + expect(result).toHaveProperty('success', false); + expect(result).toHaveProperty('error', errorMsg); + }); + }); + + describe('isSignatureVerificationFailure', () => { + it('should return true for a SignatureVerificationFailure object', () => { + const failure = createSignatureVerificationFailure('error'); + expect(isSignatureVerificationResult(failure)).toBe(true); + }); + + it('should return true for a SignatureVerificationSuccess object', () => { + const success = createSignatureVerificationSuccess(); + expect(isSignatureVerificationResult(success)).toBe(true); + }); + + it('should return false for unrelated objects', () => { + expect( + isSignatureVerificationResult({ success: false, error: 'err' }) + ).toBe(false); + expect(isSignatureVerificationResult(null)).toBe(false); + expect(isSignatureVerificationResult(undefined)).toBe(false); + expect(isSignatureVerificationResult('string')).toBe(false); + }); + }); +}); diff --git a/packages/core/README.md b/packages/core/README.md index f7034611..0447c3d7 100644 --- a/packages/core/README.md +++ b/packages/core/README.md @@ -5,6 +5,7 @@ This package provides the core HTTP request orchestration, response handling, an The exported functionality includes: * **Request Building**: Create fully-configured HTTP requests with dynamic URL construction, query serialization, header management, and support for multiple body formats including JSON, XML, form data, and file uploads. +* **Request Adapters**: Utilities to convert incoming requests, such as Express.js requests, into core HttpRequest objects. * **Authentication Integration**: Seamlessly incorporate API key, bearer token, and custom authentication schemes into request execution. * **Response Processing**: Validate and transform API responses into strongly-typed objects, with support for JSON, XML, text, and streams. * **Interceptor System**: Extend request/response pipelines with authentication injection, retry strategies, logging, and schema-based validation. diff --git a/packages/core/package.json b/packages/core/package.json index d3a879a9..15a74739 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -44,10 +44,13 @@ "@babel/core": "^7.26.10", "@size-limit/preset-small-lib": "^7.0.8", "@types/detect-node": "^2.0.2", + "@types/express": "^4.17.21", "@types/lodash.defaultsdeep": "^4.6.9", "@types/lodash.flatmap": "^4.5.6", + "@types/supertest": "^6.0.3", "abort-controller": "^3.0.0", "babel-plugin-annotate-pure-calls": "^0.4.0", + "express": "^4.18.2", "jest": "^26.6.3", "jsdom": "^19.0.0", "jsdom-global": "^3.0.2", @@ -55,6 +58,7 @@ "rollup": "^3.29.5", "rollup-plugin-typescript2": "^0.31.0", "size-limit": "^7.0.8", + "supertest": "^7.1.4", "ts-jest": "^26.4.0", "typescript": "^4.9.5" }, diff --git a/packages/core/src/apiHelper.ts b/packages/core/src/apiHelper.ts index 7ec6db8c..30cf4930 100644 --- a/packages/core/src/apiHelper.ts +++ b/packages/core/src/apiHelper.ts @@ -162,7 +162,7 @@ function replaceBodyPlaceholders( const [, ...rest] = element?.split('#'); const nodePointer = rest.join('#')?.slice(0, -1); if (nodePointer) { - const value = extractValueFromJsonPointer(parsed, nodePointer); + const value = getValueByJsonPointer(parsed, nodePointer); const replaced_value = value !== null ? JSON.stringify(value) : ''; message = message.replace(element, replaced_value); } @@ -173,7 +173,7 @@ function replaceBodyPlaceholders( return message; } -function extractValueFromJsonPointer(obj: any, pointer: string): any { +export function getValueByJsonPointer(obj: any, pointer: string): any { if (pointer === '') { return obj; } diff --git a/packages/core/src/http/requestAdapters/expressRequestAdapter.ts b/packages/core/src/http/requestAdapters/expressRequestAdapter.ts new file mode 100644 index 00000000..f6cb6eff --- /dev/null +++ b/packages/core/src/http/requestAdapters/expressRequestAdapter.ts @@ -0,0 +1,110 @@ +import { + HttpMethod, + HttpRequest, + HttpRequestTextBody, +} from '@apimatic/core-interfaces'; +import JSONBig from '@apimatic/json-bigint'; + +interface ExpressRequestSubset { + method: string; + protocol: string; + originalUrl: string; + headers: Record; + body?: any; + get(name: string): string | undefined; +} + +const validHttpMethods: HttpMethod[] = [ + 'GET', + 'DELETE', + 'HEAD', + 'OPTIONS', + 'POST', + 'PUT', + 'PATCH', + 'LINK', + 'UNLINK', +]; + +/** + * Converts an Express request into a normalized HttpRequest. + * + * Validates method, headers, and URL, and serializes the body. + * + * @param req - The Express request to convert. + * @returns A standardized HttpRequest object. + * @throws Error if the method, host, or URL is invalid. + */ +export function convertExpressRequest(req: ExpressRequestSubset): HttpRequest { + const method = req.method?.toUpperCase(); + + if (!isHttpMethod(method)) { + throw new Error(`Unsupported HTTP method: ${req.method}`); + } + + const host = req.get('host'); + if (!host || host.trim() === '' || host === 'undefined') { + throw new Error('Missing host header'); + } + + const url = `${req.protocol}://${req.get('host')}${req.originalUrl}`; + if (!isValidUrl(url)) { + throw new Error(`Invalid URL: ${url}`); + } + + const headers = req.headers; + if (!headers || typeof headers !== 'object' || Array.isArray(headers)) { + throw new Error( + `Invalid headers: expected an object, got ${typeof headers}` + ); + } + + return { + method, + headers: Object.entries(headers).reduce>( + (acc, [k, v]) => { + acc[k] = String(v); + return acc; + }, + {} + ), + url, + body: toBodyContent(req.body), + }; +} + +function isHttpMethod(method: any): method is HttpMethod { + return validHttpMethods.includes(method); +} + +function isValidUrl(url: string): boolean { + const protocolRegex = /^https?:\/\/[^/]+/; + const match = protocolRegex.exec(url); + return match !== null; +} + +function toBodyContent(body: unknown): HttpRequestTextBody { + if (body === undefined || body === null) { + return { type: 'text', content: '' }; + } + + if (Buffer.isBuffer(body)) { + return { type: 'text', content: body.toString('utf8') }; + } + + if (typeof body === 'string') { + return { type: 'text', content: body }; + } + + if (typeof body === 'object') { + if (Object.keys(body).length === 0) { + return { type: 'text', content: '' }; + } + return { + type: 'text', + content: JSONBig.stringify(body), + }; + } + + return { type: 'text', content: String(body) }; +} diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index c6cb069f..b239a106 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -27,3 +27,4 @@ export { pipePrefix, } from './http/queryString'; export { XmlSerializerInterface } from './xml/xmlSerializer'; +export { convertExpressRequest } from './http/requestAdapters/expressRequestAdapter'; diff --git a/packages/core/test/http/requestAdapters/expressRequestAdapter.test.ts b/packages/core/test/http/requestAdapters/expressRequestAdapter.test.ts new file mode 100644 index 00000000..02d17bf8 --- /dev/null +++ b/packages/core/test/http/requestAdapters/expressRequestAdapter.test.ts @@ -0,0 +1,313 @@ +jest.mock('formidable', () => ({})); +import { convertExpressRequest } from '../../../src/http/requestAdapters/expressRequestAdapter'; +import { HttpMethod } from '@apimatic/core-interfaces'; +import express, { Request } from 'express'; +import supertest from 'supertest'; + +describe('convertExpressRequest', () => { + let app: express.Express; + + beforeAll(() => { + app = express(); + app.use(express.json()); + app.use(express.text()); + app.use(express.raw()); + + // Helper route that converts the request and returns the result + app.use('/test', (req: Request, res) => { + try { + const result = convertExpressRequest(req); + res.status(200).json(result); + } catch (err: any) { + res.status(400).json({ error: err.message }); + } + }); + }); + + it('should convert a valid GET request', async () => { + const response = await supertest(app) + .get('/test/api/test') + .set('Host', 'localhost:3000') + .set('x-custom', 'value') + .set('content-type', 'text/plain'); + + expect(response.status).toBe(200); + expect(response.body.method).toBe('GET'); + expect(response.body.url).toBe('http://localhost:3000/test/api/test'); + expect(response.body.headers['x-custom']).toBe('value'); + expect(response.body.body).toEqual({ type: 'text', content: '' }); + }); + + it('should throw for missing hostname in URL', async () => { + const mockReq = { + method: 'GET', + protocol: 'http', + get: (key: string) => (key === 'host' ? '' : 'localhost:3000'), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + }; + + expect(() => convertExpressRequest(mockReq as any)).toThrow( + /Missing host header/ + ); + }); + + it('should throw for invalid protocol in URL', async () => { + const mockReq = { + method: 'GET', + protocol: 'invalidprotocol', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + body: undefined, + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + }; + + expect(() => convertExpressRequest(mockReq as any)).toThrow(/Invalid URL/); + }); + + it('should throw for invalid headers', async () => { + const mockReq = { + method: 'GET', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: null, + body: undefined, + }; + + expect(() => convertExpressRequest(mockReq as any)).toThrow( + /Invalid headers/ + ); + }); + + it('should throw for invalid headers (array)', async () => { + const mockReq = { + method: 'GET', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: [], + body: undefined, + }; + + expect(() => convertExpressRequest(mockReq as any)).toThrow( + /Invalid headers/ + ); + }); + + it('should handle Buffer body', async () => { + const response = await supertest(app) + .post('/test/api/test') + .set('Host', 'localhost:3000') + .set('Content-Type', 'application/octet-stream') + .send(Buffer.from('hello')); + + expect(response.status).toBe(200); + expect(response.body.body).toEqual({ type: 'text', content: 'hello' }); + }); + + it('should handle string body', async () => { + const response = await supertest(app) + .post('/test/api/test') + .set('Host', 'localhost:3000') + .set('Content-Type', 'text/plain') + .send('string body'); + + expect(response.status).toBe(200); + expect(response.body.body).toEqual({ + type: 'text', + content: 'string body', + }); + }); + + it('should handle object body', async () => { + const response = await supertest(app) + .post('/test/api/test') + .set('Host', 'localhost:3000') + .send({ foo: 'bar' }); + + expect(response.status).toBe(200); + expect(response.body.body).toEqual({ + type: 'text', + content: JSON.stringify({ foo: 'bar' }), + }); + }); + + it('should handle number body', async () => { + const mockReq = { + method: 'POST', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + body: 123, + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.body).toEqual({ type: 'text', content: '123' }); + }); + + it('should handle boolean body', async () => { + const mockReq = { + method: 'POST', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + body: true, + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.body).toEqual({ type: 'text', content: 'true' }); + }); + + it('should handle null body', async () => { + const response = await supertest(app) + .post('/test/api/test') + .unset('Content-Type') + .set('Host', 'localhost:3000'); + + expect(response.status).toBe(200); + expect(response.body.body).toEqual({ type: 'text', content: '' }); + }); + + it('should handle symbol body', async () => { + const mockReq = { + method: 'POST', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + body: Symbol('test'), + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.body).toEqual({ type: 'text', content: 'Symbol(test)' }); + }); + + it('should handle function body', async () => { + const func = () => { + return 'test'; + }; + const mockReq = { + method: 'POST', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + body: func, + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.body).toEqual({ type: 'text', content: func.toString() }); + }); + + it('should handle array body with string and BigInt', async () => { + const arr = ['john', BigInt(9532532599932)]; + const mockReq = { + method: 'POST', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + body: arr, + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.body).toEqual({ + type: 'text', + content: '["john",9532532599932]', + }); + }); + + it('should handle object body with BigInt', async () => { + const obj = { name: 'john', value: BigInt('1234567891298373746474783') }; + const mockReq = { + method: 'POST', + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value', 'content-type': 'application/json' }, + body: obj, + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.body).toEqual({ + type: 'text', + content: '{"name":"john","value":1234567891298373746474783}', + }); + }); + + it('should handle all valid HTTP methods', async () => { + const validMethods: HttpMethod[] = [ + 'GET', + 'DELETE', + 'OPTIONS', + 'POST', + 'HEAD', + 'PUT', + 'PATCH', + 'LINK', + 'UNLINK', + ]; + + for (const method of validMethods) { + const response = await supertest(app) + [method.toLowerCase() as 'get']('/test/api/test') + .set('Host', 'localhost:3000'); + + expect(response.status).toBe(200); + if (method !== 'HEAD') { + // HEAD responses have no body + expect(response.body.method).toBe(method); + } + } + }); + + it('should throw if method is undefined', async () => { + const mockReq = { + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:3000' : undefined), + originalUrl: '/api/test', + headers: { 'x-custom': 'value' }, + body: undefined, + method: undefined, + }; + + expect(() => convertExpressRequest(mockReq as any)).toThrow( + 'Unsupported HTTP method: undefined' + ); + }); + + it('should handle headers with undefined and multiple values (array)', async () => { + const mockReq = { + protocol: 'http', + get: (key: string) => (key === 'host' ? 'localhost:8080' : undefined), + originalUrl: '/multi-header', + method: 'GET', + headers: { + 'x-multi': ['value1', 'value2'], + 'x-single': undefined, + 'content-type': 'application/json', + }, + body: undefined, + }; + + const result = convertExpressRequest(mockReq as any); + expect(result.headers && result.headers['x-multi']).toBe('value1,value2'); + expect(result.headers && result.headers['content-type']).toBe( + 'application/json' + ); + expect(result.headers && result.headers['x-single']).toBe('undefined'); + }); + + it('should accept a valid URL and assign it correctly', async () => { + const response = await supertest(app) + .get('/test/path?query=1') + .set('Host', 'example.com') + .set('accept', 'application/json'); + + expect(response.status).toBe(200); + expect(response.body.url).toBe('http://example.com/test/path?query=1'); + }); +}); diff --git a/packages/hmac-signature-verifier/README.md b/packages/hmac-signature-verifier/README.md new file mode 100644 index 00000000..37f625a5 --- /dev/null +++ b/packages/hmac-signature-verifier/README.md @@ -0,0 +1,13 @@ +# APIMatic HMAC Signature Verifier Library for JavaScript SDKs + +> This package is only supported in Node.js environments and is **not** compatible with browsers. + +This package provides utilities for verifying HMAC signatures in HTTP requests. + +The exported functionality includes: + +- **HMAC Signature Verification**: Validate request signatures using configurable algorithms (e.g., SHA256, SHA512) and secret keys. +- **Header and Payload Support**: Verify signatures based on request headers, body, or combined payloads. +- **Algorithm Flexibility**: Support for multiple HMAC algorithms and encoding formats. + +This library is used by JavaScript SDKs generated by the [APIMatic Code Generator](http://www.apimatic.io). For details on supported platforms and build artifacts, see the [Build and Usage Section](https://github.com/apimatic/apimatic-js-runtime?tab=readme-ov-file#builds-and-usage). diff --git a/packages/hmac-signature-verifier/jest.config.js b/packages/hmac-signature-verifier/jest.config.js new file mode 100644 index 00000000..420e81e7 --- /dev/null +++ b/packages/hmac-signature-verifier/jest.config.js @@ -0,0 +1,7 @@ +const { jest: lernaAliases } = require('lerna-alias'); + +module.exports = { + preset: 'ts-jest', + moduleNameMapper: lernaAliases(), + coverageReporters: [['lcov', { projectRoot: '../../' }]], +}; diff --git a/packages/hmac-signature-verifier/package.json b/packages/hmac-signature-verifier/package.json new file mode 100644 index 00000000..b87bd351 --- /dev/null +++ b/packages/hmac-signature-verifier/package.json @@ -0,0 +1,45 @@ +{ + "name": "@apimatic/hmac-signature-verifier", + "version": "0.1.0", + "description": "provides utilities for handling HMAC signature verification", + "main": "lib/index.js", + "module": "lib/index.js", + "types": "lib/index.d.ts", + "engines": { + "node": ">=14.15.0 || >=16.0.0" + }, + "scripts": { + "clean": "rimraf lib es umd tsconfig.tsbuildinfo", + "test": "jest", + "build": "npm run clean && tsc && rollup -c --bundleConfigAsCjs && npm run annotate:es", + "annotate:es": "babel es --out-dir es --no-babelrc --plugins annotate-pure-calls", + "preversion": "npm run test", + "prepublishOnly": "npm run build", + "size": "size-limit", + "analyze": "size-limit --why", + "lint": "tslint --project .", + "lint:fix": "tslint --project . --fix", + "check-style": "prettier --check \"{src,test}/**/*.ts\"", + "check-style:fix": "prettier --write \"{src,test}/**/*.ts\"" + }, + "author": "APIMatic Ltd.", + "license": "ISC", + "size-limit": [ + { + "path": "es/index.js", + "limit": "5 KB" + } + ], + "dependencies": { + "@apimatic/core-interfaces": "^0.2.12", + "@apimatic/http-headers": "^0.3.7" + }, + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git@github.com:apimatic/apimatic-js-runtime.git", + "directory": "packages/hmac-signature-verifier" + } +} \ No newline at end of file diff --git a/packages/hmac-signature-verifier/rollup.config.js b/packages/hmac-signature-verifier/rollup.config.js new file mode 100644 index 00000000..8e1c43d7 --- /dev/null +++ b/packages/hmac-signature-verifier/rollup.config.js @@ -0,0 +1,32 @@ +import typescript from 'rollup-plugin-typescript2'; + +const getTsPlugin = ({ declaration = true, target } = {}) => + typescript({ + clean: true, + tsconfigOverride: { + compilerOptions: { + declaration, + ...(target && { target }), + }, + }, + }); + +const getNpmConfig = ({ input, output, external }) => ({ + input, + output, + preserveModules: true, + plugins: [getTsPlugin({ declaration: true })], + external, +}); + +export default [ + getNpmConfig({ + input: 'src/index.ts', + output: [ + { + dir: 'es', + format: 'esm', + }, + ], + }), +]; diff --git a/packages/hmac-signature-verifier/src/hmacSignatureVerifier.ts b/packages/hmac-signature-verifier/src/hmacSignatureVerifier.ts new file mode 100644 index 00000000..37b01b27 --- /dev/null +++ b/packages/hmac-signature-verifier/src/hmacSignatureVerifier.ts @@ -0,0 +1,157 @@ +import { getHeader } from '@apimatic/http-headers'; +import { + createSignatureVerificationFailure, + createSignatureVerificationSuccess, + HttpRequest, + SignatureVerificationResult, + SignatureVerifier, +} from '@apimatic/core-interfaces'; +import { createHmac, timingSafeEqual } from 'crypto'; + +/** + * Output encodings for HMAC digests. + * - `hex`: Hexadecimal string. + * - `base64`: Standard Base64. + * - `base64url`: URL-safe Base64. + */ +export type HmacEncoding = 'hex' | 'base64' | 'base64url'; + +/** + * Hash algorithms supported for HMAC. + * - `SHA256` + * - `SHA512` + */ +export type HmacAlgorithm = 'SHA256' | 'SHA512'; + +/** + * Verifies request signatures using HMAC with configurable algorithms and encodings. + */ +export class HmacSignatureVerifier implements SignatureVerifier { + private readonly secretKey: string; + private readonly encoding: HmacEncoding; + private readonly signatureHeader: string; + private readonly signatureValueTemplate: string | undefined; + private readonly hmacAlgorithm: HmacAlgorithm; + private readonly templateResolver: ((req: HttpRequest) => Buffer) | undefined; + + constructor( + secretKey: string, + signatureHeader: string, + templateResolver?: (req: HttpRequest) => Buffer, + hmacAlgorithm: HmacAlgorithm = 'SHA256', + encoding: HmacEncoding = 'hex', + signatureValueTemplate?: string + ) { + if (typeof secretKey !== 'string' || !secretKey.trim()) { + throw new Error('secretKey must be a non-empty string'); + } + if (typeof signatureHeader !== 'string' || !signatureHeader.trim()) { + throw new Error('signatureHeader must be a non-empty string'); + } + if ( + templateResolver !== undefined && + typeof templateResolver !== 'function' + ) { + throw new Error('templateResolver must be a function if provided'); + } + if (hmacAlgorithm !== 'SHA256' && hmacAlgorithm !== 'SHA512') { + throw new Error(`hmacAlgorithm must be either 'SHA256' or 'SHA512'`); + } + if ( + encoding !== 'hex' && + encoding !== 'base64' && + encoding !== 'base64url' + ) { + throw new Error( + `encoding must be either 'hex' or 'base64' or 'base64url'` + ); + } + if ( + typeof signatureValueTemplate !== 'string' && + typeof signatureValueTemplate !== 'undefined' + ) { + throw new Error('signatureValueTemplate must be a string'); + } + + this.secretKey = secretKey; + this.signatureHeader = signatureHeader; + this.hmacAlgorithm = hmacAlgorithm; + this.encoding = encoding; + this.signatureValueTemplate = signatureValueTemplate; + this.templateResolver = templateResolver; + } + + /** + * Validates the request’s signature against the expected HMAC digest. + * + * @param req HTTPRequest to verify. + * @returns A SignatureVerificationResult indicating success or failure. + */ + public verify(req: HttpRequest): SignatureVerificationResult { + const headers = req.headers; + if (!headers) { + return createSignatureVerificationFailure('Missing request headers'); + } + + const signatureHeader = getHeader(headers, this.signatureHeader); + if (!signatureHeader) { + return createSignatureVerificationFailure('Missing signature header'); + } + + const resolvedTemplate = this.templateResolver?.(req); + + let bodyContent = ''; + if (req.body?.type === 'text') { + bodyContent = req.body.content; + } + + const signingBytes = + resolvedTemplate && + Buffer.isBuffer(resolvedTemplate) && + resolvedTemplate.length > 0 + ? resolvedTemplate + : Buffer.from(bodyContent, 'utf8'); + + let calculatedSignature = createHmac(this.hmacAlgorithm, this.secretKey) + .update(signingBytes) + .digest(this.encoding === 'base64url' ? 'base64' : this.encoding); + + if (this.encoding === 'base64url') { + calculatedSignature = this.toBase64Url(calculatedSignature); + } + + if (this.signatureValueTemplate !== undefined) { + calculatedSignature = this.signatureValueTemplate.replace( + '{digest}', + calculatedSignature + ); + } + + const received = Buffer.from(signatureHeader, 'utf8'); + const expected = Buffer.from(calculatedSignature, 'utf8'); + + const match = + received.length === expected.length && + timingSafeEqual(received, expected); + + return match + ? createSignatureVerificationSuccess() + : createSignatureVerificationFailure('Signature mismatch'); + } + + private toBase64Url(base64: string): string { + let result = ''; + for (const ch of base64) { + if (ch === '+') { + result += '-'; + } else if (ch === '/') { + result += '_'; + } else if (ch === '=') { + continue; + } else { + result += ch; + } + } + return result; + } +} diff --git a/packages/hmac-signature-verifier/src/index.ts b/packages/hmac-signature-verifier/src/index.ts new file mode 100644 index 00000000..6671a437 --- /dev/null +++ b/packages/hmac-signature-verifier/src/index.ts @@ -0,0 +1 @@ +export { HmacSignatureVerifier } from './hmacSignatureVerifier'; diff --git a/packages/hmac-signature-verifier/test/hmacSignatureVerifier.test.ts b/packages/hmac-signature-verifier/test/hmacSignatureVerifier.test.ts new file mode 100644 index 00000000..092bcf58 --- /dev/null +++ b/packages/hmac-signature-verifier/test/hmacSignatureVerifier.test.ts @@ -0,0 +1,331 @@ +import { HmacSignatureVerifier } from '../src/hmacSignatureVerifier'; +import { + createSignatureVerificationFailure, + getValueByJsonPointer, + getHeader, + HttpRequest, +} from '@apimatic/core'; +import { createHmac } from 'crypto'; + +describe('HmacSignatureVerifier', () => { + const secretKey = 'test_secret'; + const signatureHeader = 'X-Signature'; + + const templateResolver = (request: HttpRequest) => { + const method = request.method ?? ''; + const body = request.body?.type === 'text' ? request.body.content : ''; + const cookieHeader = getHeader(request.headers ?? {}, 'Cookie') ?? ''; + const xTimestampHeader = + getHeader(request.headers ?? {}, 'X-Timestamp') ?? ''; + const customerName = + getValueByJsonPointer(request.body, '/customer/name') ?? ''; + + const finalMessage = `${cookieHeader}:${xTimestampHeader}:${method}:${body}:${customerName}`; + + return Buffer.from(finalMessage, 'utf-8'); + }; + + const hmacAlgorithm = 'SHA256'; + const encoding = 'hex'; + const signatureValueTemplate = 'sha256={digest}'; + + const baseRequest: HttpRequest = { + method: 'POST', + url: 'https://api.example.com/resource', + headers: { + 'Content-Type': 'application/json', + 'X-Timestamp': '1697051234', + 'X-Signature': '', + }, + body: { type: 'text', content: '{"foo":"bar"}' }, + }; + + it('should throw error for invalid constructor arguments', () => { + expect( + () => new HmacSignatureVerifier('', signatureHeader, templateResolver) + ).toThrow(); + expect( + () => new HmacSignatureVerifier(secretKey, '', templateResolver) + ).toThrow(); + expect( + () => + new HmacSignatureVerifier(secretKey, signatureHeader, 'invalid' as any) + ).toThrow(); + expect( + () => + new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + 'invalid' as any + ) + ).toThrow(); + expect( + () => + new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + hmacAlgorithm, + 'invalid' as any + ) + ).toThrow(); + expect( + () => + new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + hmacAlgorithm, + encoding, + 123 as any + ) + ).toThrow(); + }); + + it('should fail verification if headers are missing', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver + ); + const req = { ...baseRequest, headers: undefined }; + const result = verifier.verify(req); + expect(result.success).toBe(false); + expect(result).toEqual( + createSignatureVerificationFailure('Missing request headers') + ); + }); + + it('should fail verification if signature header is missing', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver + ); + const req = { + ...baseRequest, + headers: { 'Content-Type': 'application/json' }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(false); + expect(result).toEqual( + createSignatureVerificationFailure('Missing signature header') + ); + }); + + it('should fail verification if signature does not match', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver + ); + const req = { + ...baseRequest, + headers: { + ...baseRequest.headers, + 'X-Signature': 'sha256=invalidsignature', + }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(false); + expect(result).toEqual( + createSignatureVerificationFailure('Signature mismatch') + ); + }); + + it('should pass verification for valid signature', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + undefined, + undefined, + signatureValueTemplate + ); + const signingBytes = templateResolver(baseRequest); + const digest = createHmac(hmacAlgorithm, secretKey) + .update(signingBytes) + .digest(encoding); + const signature = signatureValueTemplate.replace('{digest}', digest); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': signature }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(true); + }); + + it('should pass verification for valid signature without signatureValueTemplate', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + undefined, + undefined + ); + const signingBytes = templateResolver(baseRequest); + const digest = createHmac(hmacAlgorithm, secretKey) + .update(signingBytes) + .digest(encoding); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': digest }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(true); + }); + + it('should support sha512 and base64 encoding', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + 'SHA512', + 'base64' + ); + const signingBytes = templateResolver(baseRequest); + const digest = createHmac('SHA512', secretKey) + .update(signingBytes) + .digest('base64'); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': digest }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(true); + }); + + it('should support base64url encoding', () => { + const base64urlEncode = (base64: string) => { + let base64url = ''; + for (const ch of base64) { + if (ch === '+') { + base64url += '-'; + } else if (ch === '/') { + base64url += '_'; + } else if (ch === '=') { + continue; + } else { + base64url += ch; + } + } + return base64url; + }; + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + 'SHA512', + 'base64url' + ); + const signingBytes = templateResolver(baseRequest); + const digest = base64urlEncode( + createHmac('SHA512', secretKey).update(signingBytes).digest('base64') + ); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': digest }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(true); + }); + + it('should use custom signature value template', () => { + const customTemplate = 'sig:{digest}:end'; + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + templateResolver, + hmacAlgorithm, + encoding, + customTemplate + ); + const signingBytes = templateResolver(baseRequest); + const digest = createHmac(hmacAlgorithm, secretKey) + .update(signingBytes) + .digest(encoding); + const signature = customTemplate.replace('{digest}', digest); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': signature }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(true); + }); + + it('should fail if different secret key is given', () => { + const verifier = new HmacSignatureVerifier( + 'different-key', + signatureHeader, + templateResolver, + undefined, + undefined, + signatureValueTemplate + ); + const signingBytes = templateResolver(baseRequest); + const digest = createHmac(hmacAlgorithm, secretKey) + .update(signingBytes) + .digest(encoding); + const signature = signatureValueTemplate.replace('{digest}', digest); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': signature }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(false); + }); + + it('should use body to sign if template resolver is not provided', () => { + const verifier = new HmacSignatureVerifier( + 'different-key', + signatureHeader, + undefined, + undefined, + undefined, + signatureValueTemplate + ); + const signingBytes = Buffer.from( + baseRequest.body?.type === 'text' ? baseRequest.body.content : '', + 'utf8' + ); + const digest = createHmac(hmacAlgorithm, secretKey) + .update(signingBytes) + .digest(encoding); + const signature = signatureValueTemplate.replace('{digest}', digest); + const req = { + ...baseRequest, + headers: { ...baseRequest.headers, 'X-Signature': signature }, + }; + const result = verifier.verify(req); + expect(result.success).toBe(false); + }); + + it('should handle verification when both templateResolver and body are undefined', () => { + const verifier = new HmacSignatureVerifier( + secretKey, + signatureHeader, + undefined, + undefined, + undefined, + signatureValueTemplate + ); + const requestWithoutBody: HttpRequest = { + ...baseRequest, + body: undefined, + headers: { ...baseRequest.headers }, + }; + + const signingBytes = Buffer.from('', 'utf8'); + const digest = createHmac(hmacAlgorithm, secretKey) + .update(signingBytes) + .digest(encoding); + const signature = signatureValueTemplate.replace('{digest}', digest); + if (!requestWithoutBody.headers) { + requestWithoutBody.headers = {}; + } + requestWithoutBody.headers['X-Signature'] = signature; + const result = verifier.verify(requestWithoutBody); + expect(result.success).toBe(true); + }); +}); diff --git a/packages/hmac-signature-verifier/tsconfig.json b/packages/hmac-signature-verifier/tsconfig.json new file mode 100644 index 00000000..47ff9287 --- /dev/null +++ b/packages/hmac-signature-verifier/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "include": ["src/**/*"], + "compilerOptions": { + "outDir": "./lib", + "rootDir": "./src", + "skipLibCheck": true, + "resolveJsonModule": true + } +} diff --git a/packages/pagination/package.json b/packages/pagination/package.json index ebf71b69..e7e08c8b 100644 --- a/packages/pagination/package.json +++ b/packages/pagination/package.json @@ -26,11 +26,7 @@ "license": "ISC", "size-limit": [ { - "path": "umd/schema.js", - "limit": "5 KB" - }, - { - "path": "umd/schema.esm.js", + "path": "es/index.js", "limit": "5 KB" } ], @@ -45,4 +41,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/pagination" } -} +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 7a99c914..06efb2a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -845,6 +845,11 @@ resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" integrity sha512-s88O1aVtXftvp5bCPB7WnmXc5IwOZZ7YPuwNPt+GtOOXpPvad1LfbmjYv+qII7zP6RU2QGnqve27dnLycEnyEQ== +"@noble/hashes@^1.1.5": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@nodelib/fs.scandir@2.1.4": version "2.1.4" resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz#d4b3549a5db5de2683e0c1071ab4f140904bbf69" @@ -1212,6 +1217,13 @@ dependencies: "@octokit/openapi-types" "^16.0.0" +"@paralleldrive/cuid2@^2.2.2": + version "2.2.2" + resolved "https://registry.yarnpkg.com/@paralleldrive/cuid2/-/cuid2-2.2.2.tgz#7f91364d53b89e2c9cb9e02e8dd0f129e834455f" + integrity sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== + dependencies: + "@noble/hashes" "^1.1.5" + "@parcel/watcher@2.0.4": version "2.0.4" resolved "https://registry.yarnpkg.com/@parcel/watcher/-/watcher-2.0.4.tgz#f300fef4cc38008ff4b8c29d92588eced3ce014b" @@ -1351,11 +1363,51 @@ dependencies: "@babel/types" "^7.20.7" +"@types/body-parser@*": + version "1.19.6" + resolved "https://registry.yarnpkg.com/@types/body-parser/-/body-parser-1.19.6.tgz#1859bebb8fd7dac9918a45d54c1971ab8b5af474" + integrity sha512-HLFeCYgz89uk22N5Qg3dvGvsv46B8GLvKKo1zKG4NybA8U2DiEO3w9lqGg29t/tfLRJpJ6iQxnVw4OnB7MoM9g== + dependencies: + "@types/connect" "*" + "@types/node" "*" + +"@types/connect@*": + version "3.4.38" + resolved "https://registry.yarnpkg.com/@types/connect/-/connect-3.4.38.tgz#5ba7f3bc4fbbdeaff8dded952e5ff2cc53f8d858" + integrity sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug== + dependencies: + "@types/node" "*" + +"@types/cookiejar@^2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.5.tgz#14a3e83fa641beb169a2dd8422d91c3c345a9a78" + integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== + "@types/detect-node@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/detect-node/-/detect-node-2.0.2.tgz#acca2b41de7a5ee88d9fd5081322b85f84b9604f" integrity sha512-2r16DIvQ3dLcRHBPzbdlPsqUWvNaIE7g3fPlGcoA5IF0Nvv7gaONWleB2rhEmggvj/P5VvxseWchR2noncrgGg== +"@types/express-serve-static-core@^4.17.33": + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + +"@types/express@^4.17.21": + version "4.17.23" + resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" + integrity sha512-Crp6WY9aTYP3qPi2wGDo9iUe/rceX01UMhnF1jmwDcKCFM6cx7YhGP/Mpr3y9AASpfHixIG0E6azCcL5OcDHsQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^4.17.33" + "@types/qs" "*" + "@types/serve-static" "*" + "@types/graceful-fs@^4.1.2": version "4.1.9" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" @@ -1363,6 +1415,11 @@ dependencies: "@types/node" "*" +"@types/http-errors@*": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@types/http-errors/-/http-errors-2.0.5.tgz#5b749ab2b16ba113423feb1a64a95dcd30398472" + integrity sha512-r8Tayk8HJnX0FztbZN7oVqGccWgw98T/0neJphO91KkmOzug1KkofZURD4UaD5uH8AqcFLfdPErnBod0u71/qg== + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": version "2.0.3" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.3.tgz#4ba8ddb720221f432e443bd5f9117fd22cfd4762" @@ -1424,6 +1481,16 @@ resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.168.tgz#fe24632e79b7ade3f132891afff86caa5e5ce008" integrity sha512-oVfRvqHV/V6D1yifJbVRU3TMp8OT6o6BG+U9MkwuJ3U8/CsDHvalRpsxBqivn71ztOFZBTfJMvETbqHiaNSj7Q== +"@types/methods@^1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@types/methods/-/methods-1.1.4.tgz#d3b7ac30ac47c91054ea951ce9eed07b1051e547" + integrity sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ== + +"@types/mime@^1": + version "1.3.5" + resolved "https://registry.yarnpkg.com/@types/mime/-/mime-1.3.5.tgz#1ef302e01cf7d2b5a0fa526790c9123bf1d06690" + integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== + "@types/minimatch@^3.0.3": version "3.0.5" resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.5.tgz#1001cc5e6a3704b83c236027e77f2f58ea010f40" @@ -1464,11 +1531,56 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== +"@types/qs@*": + version "6.14.0" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.14.0.tgz#d8b60cecf62f2db0fb68e5e006077b9178b85de5" + integrity sha512-eOunJqu0K1923aExK6y8p6fsihYEn/BYuQ4g0CxAAgFc4b/ZLN4CrsRZ55srTdqoiLzU2B2evC+apEIxprEzkQ== + +"@types/range-parser@*": + version "1.2.7" + resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.7.tgz#50ae4353eaaddc04044279812f52c8c65857dbcb" + integrity sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ== + +"@types/send@*": + version "0.17.5" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.5.tgz#d991d4f2b16f2b1ef497131f00a9114290791e74" + integrity sha512-z6F2D3cOStZvuk2SaP6YrwkNO65iTZcwA2ZkSABegdkAh/lf+Aa/YQndZVfmEXT5vgAp6zv06VQ3ejSVjAny4w== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + +"@types/serve-static@*": + version "1.15.8" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" + integrity sha512-roei0UY3LhpOJvjbIP6ZZFngyLKl5dskOtDhxY5THRSpO+ZI+nzJ+m5yUMzGrp89YRa7lvknKkMYjqQFGwA7Sg== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "*" + "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== +"@types/superagent@^8.1.0": + version "8.1.9" + resolved "https://registry.yarnpkg.com/@types/superagent/-/superagent-8.1.9.tgz#28bfe4658e469838ed0bf66d898354bcab21f49f" + integrity sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ== + dependencies: + "@types/cookiejar" "^2.1.5" + "@types/methods" "^1.1.4" + "@types/node" "*" + form-data "^4.0.0" + +"@types/supertest@^6.0.3": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/supertest/-/supertest-6.0.3.tgz#d736f0e994b195b63e1c93e80271a2faf927388c" + integrity sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w== + dependencies: + "@types/methods" "^1.1.4" + "@types/superagent" "^8.1.0" + "@types/xml2js@^0.4.11": version "0.4.11" resolved "https://registry.yarnpkg.com/@types/xml2js/-/xml2js-0.4.11.tgz#bf46a84ecc12c41159a7bd9cf51ae84129af0e79" @@ -1561,6 +1673,14 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + acorn-globals@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-6.0.0.tgz#46cdd39f0f8ff08a876619b55f5ac8a6dc770b45" @@ -1768,6 +1888,11 @@ array-differ@^3.0.0: resolved "https://registry.yarnpkg.com/array-differ/-/array-differ-3.0.0.tgz#3cbb3d0f316810eafcc47624734237d6aee4ae6b" integrity sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg== +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + array-ify@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" @@ -1966,6 +2091,24 @@ bl@^4.0.3, bl@^4.1.0: inherits "^2.0.4" readable-stream "^3.4.0" +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2080,6 +2223,11 @@ bytes-iec@^3.1.1: resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + cacache@^16.0.0, cacache@^16.0.6, cacache@^16.1.0: version "16.1.3" resolved "https://registry.yarnpkg.com/cacache/-/cacache-16.1.3.tgz#a02b9f34ecfaf9a78c9f4bc16fceb94d5d67a38e" @@ -2127,6 +2275,14 @@ call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: es-errors "^1.3.0" function-bind "^1.1.2" +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + callsites@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" @@ -2467,7 +2623,7 @@ compare-versions@^3.6.0: resolved "https://registry.yarnpkg.com/compare-versions/-/compare-versions-3.6.0.tgz#1a5689913685e5a87637b8d3ffca75514ec41d62" integrity sha512-W6Af2Iw1z4CB7q4uU4hv646dW9GQuBM+YpC0UvUCWSD8w90SJjp+ujJuXaEMtAXBtSqGfMPuFOVn4/+FlaqfBA== -component-emitter@^1.2.1: +component-emitter@^1.2.1, component-emitter@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== @@ -2500,6 +2656,18 @@ console-control-strings@^1.1.0: resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" integrity sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ== +content-disposition@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + conventional-changelog-angular@5.0.12: version "5.0.12" resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.12.tgz#c979b8b921cbfe26402eb3da5bbfda02d865a2b9" @@ -2722,6 +2890,21 @@ convert-source-map@^2.0.0: resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +cookiejar@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" + integrity sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw== + copy-descriptor@^0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" @@ -2842,6 +3025,13 @@ dateformat@^3.0.0, dateformat@^3.0.3: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" integrity sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q== +debug@2.6.9, debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + debug@4, debug@^4.1.0, debug@^4.1.1: version "4.3.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.1.tgz#f0d229c505e0c6d8c49ac553d1b13dc183f6b2ee" @@ -2849,13 +3039,6 @@ debug@4, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" -debug@^2.2.0, debug@^2.3.3: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - debug@^4.3.1: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" @@ -2870,6 +3053,13 @@ debug@^4.3.3, debug@^4.3.4: dependencies: ms "2.1.2" +debug@^4.3.7: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -2962,7 +3152,7 @@ delegates@^1.0.0: resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= -depd@^2.0.0: +depd@2.0.0, depd@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== @@ -2972,6 +3162,11 @@ deprecation@^2.0.0, deprecation@^2.3.1: resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + detect-browser@^5.3.0: version "5.3.0" resolved "https://registry.yarnpkg.com/detect-browser/-/detect-browser-5.3.0.tgz#9705ef2bddf46072d0f7265a1fe300e36fe7ceca" @@ -3000,6 +3195,14 @@ dezalgo@^1.0.0: asap "^2.0.0" wrappy "1" +dezalgo@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/dezalgo/-/dezalgo-1.0.4.tgz#751235260469084c132157dfa857f386d4c33d81" + integrity sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig== + dependencies: + asap "^2.0.0" + wrappy "1" + diff-sequences@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-24.9.0.tgz#5715d6244e2aa65f48bba0bc972db0b0b11e95b5" @@ -3079,6 +3282,11 @@ eastasianwidth@^0.2.0: resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + ejs@^3.1.7: version "3.1.10" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" @@ -3106,6 +3314,16 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -3313,6 +3531,11 @@ escalade@^3.2.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -3372,6 +3595,11 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + event-target-shim@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" @@ -3475,6 +3703,43 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +express@^4.18.2: + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.7.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.12" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3550,6 +3815,11 @@ fast-levenshtein@~2.0.6: resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= +fast-safe-stringify@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -3602,6 +3872,19 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + find-cache-dir@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" @@ -3666,7 +3949,7 @@ form-data@^3.0.0: es-set-tostringtag "^2.1.0" mime-types "^2.1.35" -form-data@^4.0.0, form-data@^4.0.1: +form-data@^4.0.0, form-data@^4.0.1, form-data@^4.0.4: version "4.0.4" resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4" integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow== @@ -3677,6 +3960,20 @@ form-data@^4.0.0, form-data@^4.0.1: hasown "^2.0.2" mime-types "^2.1.12" +formidable@^3.5.4: + version "3.5.4" + resolved "https://registry.yarnpkg.com/formidable/-/formidable-3.5.4.tgz#ac9a593b951e829b3298f21aa9a2243932f32ed9" + integrity sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug== + dependencies: + "@paralleldrive/cuid2" "^2.2.2" + dezalgo "^1.0.4" + once "^1.4.0" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + fragment-cache@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" @@ -3684,6 +3981,11 @@ fragment-cache@^0.2.1: dependencies: map-cache "^0.2.2" +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -3787,7 +4089,7 @@ get-caller-file@^2.0.1, get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== -get-intrinsic@^1.2.6: +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== @@ -4182,6 +4484,17 @@ http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + http-proxy-agent@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a" @@ -4334,7 +4647,7 @@ inflight@^1.0.4: once "^1.3.0" wrappy "1" -inherits@2, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -4383,6 +4696,11 @@ ip@^2.0.0: resolved "https://registry.yarnpkg.com/ip/-/ip-2.0.1.tgz#e8f3595d33a3ea66490204234b77636965307105" integrity sha512-lJUL9imLTNi1ZfXT+DU6rBBdbiKGBuay9B6xGSPVjUeQwaH1RIGqef8RZkUtHioLmSNpPR5M4HVKJGm1j8FWVQ== +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + is-accessor-descriptor@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz#3223b10628354644b86260db29b3e693f5ceedd4" @@ -5752,6 +6070,11 @@ math-intrinsics@^1.1.0: resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + meow@^8.0.0, meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -5769,6 +6092,11 @@ meow@^8.0.0, meow@^8.1.2: type-fest "^0.18.0" yargs-parser "^20.2.3" +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -5779,6 +6107,11 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== +methods@^1.1.2, methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + micromatch@^3.1.4: version "3.1.10" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" @@ -5819,13 +6152,23 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== -mime-types@^2.1.12, mime-types@^2.1.35: +mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== dependencies: mime-db "1.52.0" +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + mimic-fn@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" @@ -5994,7 +6337,7 @@ ms@2.1.2: resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -ms@^2.0.0, ms@^2.1.3: +ms@2.1.3, ms@^2.0.0, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== @@ -6049,7 +6392,7 @@ natural-compare@^1.4.0: resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= -negotiator@^0.6.3: +negotiator@0.6.3, negotiator@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== @@ -6392,6 +6735,11 @@ object-inspect@^1.12.2: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + object-visit@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" @@ -6406,6 +6754,13 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + once@^1.3.0, once@^1.3.1, once@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" @@ -6679,6 +7034,11 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + pascalcase@^0.1.1: version "0.1.1" resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" @@ -6728,6 +7088,11 @@ path-strip-sep@^1.0.17: dependencies: tslib "^2" +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -6913,6 +7278,14 @@ protocols@^2.0.0, protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + proxy-from-env@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" @@ -6946,6 +7319,20 @@ q@^1.5.1: resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +qs@^6.11.2: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -6968,6 +7355,21 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + react-is@^16.8.4: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -7307,7 +7709,7 @@ rxjs@^7.5.5: dependencies: tslib "^2.1.0" -safe-buffer@^5.1.0, safe-buffer@~5.2.0: +safe-buffer@5.2.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: version "5.2.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== @@ -7402,6 +7804,25 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + serialize-javascript@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" @@ -7409,6 +7830,16 @@ serialize-javascript@^6.0.1: dependencies: randombytes "^2.1.0" +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -7424,6 +7855,11 @@ set-value@^2.0.0, set-value@^2.0.1: is-plain-object "^2.0.3" split-string "^3.0.1" +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -7460,6 +7896,46 @@ shellwords@^0.1.1: resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + signal-exit@3.0.7, signal-exit@^3.0.0, signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" @@ -7712,6 +8188,11 @@ static-extend@^0.1.1: define-property "^0.2.5" object-copy "^0.1.0" +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -7823,6 +8304,29 @@ strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: minimist "^1.2.0" through "^2.3.4" +superagent@^10.2.3: + version "10.2.3" + resolved "https://registry.yarnpkg.com/superagent/-/superagent-10.2.3.tgz#d1e4986f2caac423c37e38077f9073ccfe73a59b" + integrity sha512-y/hkYGeXAj7wUMjxRbB21g/l6aAEituGXM9Rwl4o20+SX3e8YOSV6BxFXl+dL3Uk0mjSL3kCbNkwURm8/gEDig== + dependencies: + component-emitter "^1.3.1" + cookiejar "^2.1.4" + debug "^4.3.7" + fast-safe-stringify "^2.1.1" + form-data "^4.0.4" + formidable "^3.5.4" + methods "^1.1.2" + mime "2.6.0" + qs "^6.11.2" + +supertest@^7.1.4: + version "7.1.4" + resolved "https://registry.yarnpkg.com/supertest/-/supertest-7.1.4.tgz#3175e2539f517ca72fdc7992ffff35b94aca7d34" + integrity sha512-tjLPs7dVyqgItVFirHYqe2T+MfWc2VOBQ8QFKKbWTA3PU7liZR8zoSpAi/C1k1ilm9RsXIKYf197oap9wXGVYg== + dependencies: + methods "^1.1.2" + superagent "^10.2.3" + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -8018,6 +8522,11 @@ to-regex@^3.0.1, to-regex@^3.0.2: regex-not "^1.0.2" safe-regex "^1.1.0" +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + tough-cookie@^4.0.0: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" @@ -8194,6 +8703,14 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + typedarray-to-buffer@^3.1.5: version "3.1.5" resolved "https://registry.yarnpkg.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz#a97ee7a9ff42691b9f783ff1bc5112fe3fca9080" @@ -8265,6 +8782,11 @@ universalify@^2.0.0: resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + unset-value@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" @@ -8326,6 +8848,11 @@ util-deprecate@^1.0.1, util-deprecate@~1.0.1: resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + uuid@8.3.2, uuid@^8.3.0: version "8.3.2" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" @@ -8372,6 +8899,11 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" +vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + w3c-hr-time@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" From 11d1de30081ba62a191a9564d749d5a8c97f159f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 30 Sep 2025 07:59:01 +0000 Subject: [PATCH 4/9] chore(release): update version and publish package(s) - @apimatic/authentication-adapters@0.5.13 - @apimatic/axios-client-adapter@0.3.19 - @apimatic/convert-to-stream@0.1.8 - @apimatic/core-interfaces@0.2.13 - @apimatic/core@0.10.27 - @apimatic/file-wrapper@0.3.8 - @apimatic/hmac-signature-verifier@0.1.1 - @apimatic/http-headers@0.3.8 - @apimatic/http-query@0.3.8 - @apimatic/oauth-adapters@0.4.17 - @apimatic/pagination@0.1.5 - @apimatic/proxy@0.1.3 - @apimatic/schema@0.7.21 - @apimatic/test-utilities@0.1.1 - @apimatic/xml-adapter@0.3.8 --- packages/authentication-adapters/CHANGELOG.md | 4 ++++ packages/authentication-adapters/package.json | 8 ++++---- packages/axios-client-adapter/CHANGELOG.md | 4 ++++ packages/axios-client-adapter/package.json | 14 +++++++------- packages/convert-to-stream/CHANGELOG.md | 4 ++++ packages/convert-to-stream/package.json | 2 +- packages/core-interfaces/CHANGELOG.md | 6 ++++++ packages/core-interfaces/package.json | 4 ++-- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 14 +++++++------- packages/file-wrapper/CHANGELOG.md | 4 ++++ packages/file-wrapper/package.json | 2 +- packages/hmac-signature-verifier/CHANGELOG.md | 10 ++++++++++ packages/hmac-signature-verifier/package.json | 8 ++++---- packages/http-headers/CHANGELOG.md | 4 ++++ packages/http-headers/package.json | 2 +- packages/http-query/CHANGELOG.md | 4 ++++ packages/http-query/package.json | 4 ++-- packages/oauth-adapters/CHANGELOG.md | 4 ++++ packages/oauth-adapters/package.json | 8 ++++---- packages/pagination/CHANGELOG.md | 6 ++++++ packages/pagination/package.json | 6 +++--- packages/proxy/CHANGELOG.md | 4 ++++ packages/proxy/package.json | 2 +- packages/schema/CHANGELOG.md | 4 ++++ packages/schema/package.json | 2 +- packages/test-utilities/CHANGELOG.md | 4 ++++ packages/test-utilities/package.json | 6 +++--- packages/xml-adapter/CHANGELOG.md | 4 ++++ packages/xml-adapter/package.json | 2 +- 30 files changed, 114 insertions(+), 42 deletions(-) create mode 100644 packages/hmac-signature-verifier/CHANGELOG.md diff --git a/packages/authentication-adapters/CHANGELOG.md b/packages/authentication-adapters/CHANGELOG.md index 8c75f9b8..fdf92612 100644 --- a/packages/authentication-adapters/CHANGELOG.md +++ b/packages/authentication-adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.5.13](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/authentication-adapters@0.5.12...@apimatic/authentication-adapters@0.5.13) (2025-09-30) + +**Note:** Version bump only for package @apimatic/authentication-adapters + ### [0.5.12](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/authentication-adapters@0.5.11...@apimatic/authentication-adapters@0.5.12) (2025-09-04) **Note:** Version bump only for package @apimatic/authentication-adapters diff --git a/packages/authentication-adapters/package.json b/packages/authentication-adapters/package.json index 08f2d1f2..1d097386 100644 --- a/packages/authentication-adapters/package.json +++ b/packages/authentication-adapters/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/authentication-adapters", "author": "APIMatic Ltd.", - "version": "0.5.12", + "version": "0.5.13", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -55,9 +55,9 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/core-interfaces": "^0.2.12", - "@apimatic/http-headers": "^0.3.7", - "@apimatic/http-query": "^0.3.7", + "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/http-headers": "^0.3.8", + "@apimatic/http-query": "^0.3.8", "tslib": "^2.8.1" }, "publishConfig": { diff --git a/packages/axios-client-adapter/CHANGELOG.md b/packages/axios-client-adapter/CHANGELOG.md index e830be4a..c0c29895 100644 --- a/packages/axios-client-adapter/CHANGELOG.md +++ b/packages/axios-client-adapter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.19](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/axios-client-adapter@0.3.18...@apimatic/axios-client-adapter@0.3.19) (2025-09-30) + +**Note:** Version bump only for package @apimatic/axios-client-adapter + ### [0.3.18](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/axios-client-adapter@0.3.17...@apimatic/axios-client-adapter@0.3.18) (2025-09-04) **Note:** Version bump only for package @apimatic/axios-client-adapter diff --git a/packages/axios-client-adapter/package.json b/packages/axios-client-adapter/package.json index 1f42c472..e02ec58a 100644 --- a/packages/axios-client-adapter/package.json +++ b/packages/axios-client-adapter/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/axios-client-adapter", "author": "APIMatic Ltd.", - "version": "0.3.18", + "version": "0.3.19", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -58,13 +58,13 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/convert-to-stream": "^0.1.7", - "@apimatic/core-interfaces": "^0.2.12", - "@apimatic/file-wrapper": "^0.3.7", - "@apimatic/http-headers": "^0.3.7", - "@apimatic/http-query": "^0.3.7", + "@apimatic/convert-to-stream": "^0.1.8", + "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/http-headers": "^0.3.8", + "@apimatic/http-query": "^0.3.8", "@apimatic/json-bigint": "^1.2.0", - "@apimatic/proxy": "^0.1.2", + "@apimatic/proxy": "^0.1.3", "axios": "^1.8.4", "detect-browser": "^5.3.0", "detect-node": "^2.1.0", diff --git a/packages/convert-to-stream/CHANGELOG.md b/packages/convert-to-stream/CHANGELOG.md index 95cf49b1..497f6eb6 100644 --- a/packages/convert-to-stream/CHANGELOG.md +++ b/packages/convert-to-stream/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/convert-to-stream@0.1.7...@apimatic/convert-to-stream@0.1.8) (2025-09-30) + +**Note:** Version bump only for package @apimatic/convert-to-stream + ### [0.1.7](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/convert-to-stream@0.1.6...@apimatic/convert-to-stream@0.1.7) (2025-08-13) **Note:** Version bump only for package @apimatic/convert-to-stream diff --git a/packages/convert-to-stream/package.json b/packages/convert-to-stream/package.json index 14ff02a6..f621911d 100644 --- a/packages/convert-to-stream/package.json +++ b/packages/convert-to-stream/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/convert-to-stream", - "version": "0.1.7", + "version": "0.1.8", "description": "converts the content to stream", "main": "lib/index.js", "module": "lib/index.js", diff --git a/packages/core-interfaces/CHANGELOG.md b/packages/core-interfaces/CHANGELOG.md index d5b0aa5f..3b75ea61 100644 --- a/packages/core-interfaces/CHANGELOG.md +++ b/packages/core-interfaces/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.2.13](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core-interfaces@0.2.12...@apimatic/core-interfaces@0.2.13) (2025-09-30) + +### Features + +- add webhooks and callbacks support ([#292](https://github.com/apimatic/apimatic-js-runtime/issues/292)) ([3912981](https://github.com/apimatic/apimatic-js-runtime/commit/39129812b1aaa860bedafc074a2c44759d6ca14f)) + ### [0.2.12](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core-interfaces@0.2.11...@apimatic/core-interfaces@0.2.12) (2025-08-13) **Note:** Version bump only for package @apimatic/core-interfaces diff --git a/packages/core-interfaces/package.json b/packages/core-interfaces/package.json index 606f7629..265a279d 100644 --- a/packages/core-interfaces/package.json +++ b/packages/core-interfaces/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/core-interfaces", "author": "APIMatic Ltd.", - "version": "0.2.12", + "version": "0.2.13", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -58,7 +58,7 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/file-wrapper": "^0.3.7", + "@apimatic/file-wrapper": "^0.3.8", "tslib": "^2.8.1" }, "publishConfig": { diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index 72bb8183..ab4ba8a5 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.10.27](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core@0.10.26...@apimatic/core@0.10.27) (2025-09-30) + +### Features + +- add webhooks and callbacks support ([#292](https://github.com/apimatic/apimatic-js-runtime/issues/292)) ([3912981](https://github.com/apimatic/apimatic-js-runtime/commit/39129812b1aaa860bedafc074a2c44759d6ca14f)) + ### [0.10.26](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core@0.10.25...@apimatic/core@0.10.26) (2025-09-04) **Note:** Version bump only for package @apimatic/core diff --git a/packages/core/package.json b/packages/core/package.json index 15a74739..b97391eb 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/core", "author": "APIMatic Ltd.", - "version": "0.10.26", + "version": "0.10.27", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -63,13 +63,13 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/convert-to-stream": "^0.1.7", - "@apimatic/core-interfaces": "^0.2.12", - "@apimatic/file-wrapper": "^0.3.7", - "@apimatic/http-headers": "^0.3.7", - "@apimatic/http-query": "^0.3.7", + "@apimatic/convert-to-stream": "^0.1.8", + "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/http-headers": "^0.3.8", + "@apimatic/http-query": "^0.3.8", "@apimatic/json-bigint": "^1.2.0", - "@apimatic/schema": "^0.7.20", + "@apimatic/schema": "^0.7.21", "detect-browser": "^5.3.0", "detect-node": "^2.1.0", "form-data": "^4.0.1", diff --git a/packages/file-wrapper/CHANGELOG.md b/packages/file-wrapper/CHANGELOG.md index 80660bf6..6a883f12 100644 --- a/packages/file-wrapper/CHANGELOG.md +++ b/packages/file-wrapper/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/file-wrapper@0.3.7...@apimatic/file-wrapper@0.3.8) (2025-09-30) + +**Note:** Version bump only for package @apimatic/file-wrapper + ### [0.3.7](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/file-wrapper@0.3.6...@apimatic/file-wrapper@0.3.7) (2025-08-13) **Note:** Version bump only for package @apimatic/file-wrapper diff --git a/packages/file-wrapper/package.json b/packages/file-wrapper/package.json index 69c31640..8fa3c346 100644 --- a/packages/file-wrapper/package.json +++ b/packages/file-wrapper/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/file-wrapper", "author": "APIMatic Ltd.", - "version": "0.3.7", + "version": "0.3.8", "license": "MIT", "sideEffects": false, "main": "lib/index.js", diff --git a/packages/hmac-signature-verifier/CHANGELOG.md b/packages/hmac-signature-verifier/CHANGELOG.md new file mode 100644 index 00000000..5f88e87d --- /dev/null +++ b/packages/hmac-signature-verifier/CHANGELOG.md @@ -0,0 +1,10 @@ +# Change Log + +All notable changes to this project will be documented in this file. +See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. + +### 0.1.1 (2025-09-30) + +### Features + +- add webhooks and callbacks support ([#292](https://github.com/apimatic/apimatic-js-runtime/issues/292)) ([3912981](https://github.com/apimatic/apimatic-js-runtime/commit/39129812b1aaa860bedafc074a2c44759d6ca14f)) diff --git a/packages/hmac-signature-verifier/package.json b/packages/hmac-signature-verifier/package.json index b87bd351..fb42a25b 100644 --- a/packages/hmac-signature-verifier/package.json +++ b/packages/hmac-signature-verifier/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/hmac-signature-verifier", - "version": "0.1.0", + "version": "0.1.1", "description": "provides utilities for handling HMAC signature verification", "main": "lib/index.js", "module": "lib/index.js", @@ -31,8 +31,8 @@ } ], "dependencies": { - "@apimatic/core-interfaces": "^0.2.12", - "@apimatic/http-headers": "^0.3.7" + "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/http-headers": "^0.3.8" }, "publishConfig": { "access": "public" @@ -42,4 +42,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/hmac-signature-verifier" } -} \ No newline at end of file +} diff --git a/packages/http-headers/CHANGELOG.md b/packages/http-headers/CHANGELOG.md index 863d37f5..2b9cedd1 100644 --- a/packages/http-headers/CHANGELOG.md +++ b/packages/http-headers/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/http-headers@0.3.7...@apimatic/http-headers@0.3.8) (2025-09-30) + +**Note:** Version bump only for package @apimatic/http-headers + ### [0.3.7](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/http-headers@0.3.6...@apimatic/http-headers@0.3.7) (2025-08-13) **Note:** Version bump only for package @apimatic/http-headers diff --git a/packages/http-headers/package.json b/packages/http-headers/package.json index ef9be67d..debd65c3 100644 --- a/packages/http-headers/package.json +++ b/packages/http-headers/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/http-headers", "author": "APIMatic Ltd.", - "version": "0.3.7", + "version": "0.3.8", "license": "MIT", "sideEffects": false, "main": "lib/index.js", diff --git a/packages/http-query/CHANGELOG.md b/packages/http-query/CHANGELOG.md index 41549d73..d1fa9bbe 100644 --- a/packages/http-query/CHANGELOG.md +++ b/packages/http-query/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/http-query@0.3.7...@apimatic/http-query@0.3.8) (2025-09-30) + +**Note:** Version bump only for package @apimatic/http-query + ### [0.3.7](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/http-query@0.3.6...@apimatic/http-query@0.3.7) (2025-08-13) **Note:** Version bump only for package @apimatic/http-query diff --git a/packages/http-query/package.json b/packages/http-query/package.json index 3ccbf662..d0e173d4 100644 --- a/packages/http-query/package.json +++ b/packages/http-query/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/http-query", "author": "APIMatic Ltd.", - "version": "0.3.7", + "version": "0.3.8", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -55,7 +55,7 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/file-wrapper": "^0.3.7", + "@apimatic/file-wrapper": "^0.3.8", "tslib": "^2.8.1" }, "publishConfig": { diff --git a/packages/oauth-adapters/CHANGELOG.md b/packages/oauth-adapters/CHANGELOG.md index 40f56a8c..b4ace65e 100644 --- a/packages/oauth-adapters/CHANGELOG.md +++ b/packages/oauth-adapters/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.4.17](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/oauth-adapters@0.4.16...@apimatic/oauth-adapters@0.4.17) (2025-09-30) + +**Note:** Version bump only for package @apimatic/oauth-adapters + ### [0.4.16](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/oauth-adapters@0.4.15...@apimatic/oauth-adapters@0.4.16) (2025-09-04) **Note:** Version bump only for package @apimatic/oauth-adapters diff --git a/packages/oauth-adapters/package.json b/packages/oauth-adapters/package.json index 4b285e49..8c854bbe 100644 --- a/packages/oauth-adapters/package.json +++ b/packages/oauth-adapters/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/oauth-adapters", "author": "APIMatic Ltd.", - "version": "0.4.16", + "version": "0.4.17", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -55,9 +55,9 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/core-interfaces": "^0.2.12", - "@apimatic/file-wrapper": "^0.3.7", - "@apimatic/http-headers": "^0.3.7", + "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/http-headers": "^0.3.8", "tslib": "^2.8.1" }, "publishConfig": { diff --git a/packages/pagination/CHANGELOG.md b/packages/pagination/CHANGELOG.md index a18aa92e..dab41498 100644 --- a/packages/pagination/CHANGELOG.md +++ b/packages/pagination/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.5](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/pagination@0.1.4...@apimatic/pagination@0.1.5) (2025-09-30) + +### Features + +- add webhooks and callbacks support ([#292](https://github.com/apimatic/apimatic-js-runtime/issues/292)) ([3912981](https://github.com/apimatic/apimatic-js-runtime/commit/39129812b1aaa860bedafc074a2c44759d6ca14f)) + ### [0.1.4](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/pagination@0.1.3...@apimatic/pagination@0.1.4) (2025-09-04) **Note:** Version bump only for package @apimatic/pagination diff --git a/packages/pagination/package.json b/packages/pagination/package.json index e7e08c8b..6020121d 100644 --- a/packages/pagination/package.json +++ b/packages/pagination/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/pagination", - "version": "0.1.4", + "version": "0.1.5", "description": "provides the async utilities for handling paginated API responses.", "main": "lib/index.js", "module": "lib/index.js", @@ -31,7 +31,7 @@ } ], "dependencies": { - "@apimatic/core-interfaces": "^0.2.12" + "@apimatic/core-interfaces": "^0.2.13" }, "publishConfig": { "access": "public" @@ -41,4 +41,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/pagination" } -} \ No newline at end of file +} diff --git a/packages/proxy/CHANGELOG.md b/packages/proxy/CHANGELOG.md index 5534b325..6bb60558 100644 --- a/packages/proxy/CHANGELOG.md +++ b/packages/proxy/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.3](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/proxy@0.1.2...@apimatic/proxy@0.1.3) (2025-09-30) + +**Note:** Version bump only for package @apimatic/proxy + ### [0.1.2](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/proxy@0.1.1...@apimatic/proxy@0.1.2) (2025-08-13) **Note:** Version bump only for package @apimatic/proxy diff --git a/packages/proxy/package.json b/packages/proxy/package.json index bf887b69..d72a3e49 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/proxy", - "version": "0.1.2", + "version": "0.1.3", "description": "provides utilities to route requests through a configurable proxy", "main": "lib/index.js", "module": "lib/index.js", diff --git a/packages/schema/CHANGELOG.md b/packages/schema/CHANGELOG.md index 765ca53b..98372ffd 100644 --- a/packages/schema/CHANGELOG.md +++ b/packages/schema/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.7.21](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/schema@0.7.20...@apimatic/schema@0.7.21) (2025-09-30) + +**Note:** Version bump only for package @apimatic/schema + ### [0.7.20](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/schema@0.7.19...@apimatic/schema@0.7.20) (2025-09-04) **Note:** Version bump only for package @apimatic/schema diff --git a/packages/schema/package.json b/packages/schema/package.json index c26f2ef2..2a20e9ee 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/schema", "author": "APIMatic Ltd.", - "version": "0.7.20", + "version": "0.7.21", "license": "MIT", "sideEffects": false, "main": "lib/index.js", diff --git a/packages/test-utilities/CHANGELOG.md b/packages/test-utilities/CHANGELOG.md index c2b0b723..3369925e 100644 --- a/packages/test-utilities/CHANGELOG.md +++ b/packages/test-utilities/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.1](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/test-utilities@0.1.0...@apimatic/test-utilities@0.1.1) (2025-09-30) + +**Note:** Version bump only for package @apimatic/test-utilities + ## [0.1.0](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/test-utilities@0.0.7...@apimatic/test-utilities@0.1.0) (2025-08-13) **Note:** Version bump only for package @apimatic/test-utilities diff --git a/packages/test-utilities/package.json b/packages/test-utilities/package.json index 802e17fe..463e2a0a 100644 --- a/packages/test-utilities/package.json +++ b/packages/test-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/test-utilities", - "version": "0.1.0", + "version": "0.1.1", "description": "provides the assertion utilities", "main": "lib/index.js", "module": "lib/index.js", @@ -52,8 +52,8 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/convert-to-stream": "^0.1.7", - "@apimatic/core-interfaces": "^0.2.12", + "@apimatic/convert-to-stream": "^0.1.8", + "@apimatic/core-interfaces": "^0.2.13", "tslib": "^2.8.1" }, "publishConfig": { diff --git a/packages/xml-adapter/CHANGELOG.md b/packages/xml-adapter/CHANGELOG.md index 9035aead..8d7c179c 100644 --- a/packages/xml-adapter/CHANGELOG.md +++ b/packages/xml-adapter/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/xml-adapter@0.3.7...@apimatic/xml-adapter@0.3.8) (2025-09-30) + +**Note:** Version bump only for package @apimatic/xml-adapter + ### [0.3.7](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/xml-adapter@0.3.6...@apimatic/xml-adapter@0.3.7) (2025-08-13) **Note:** Version bump only for package @apimatic/xml-adapter diff --git a/packages/xml-adapter/package.json b/packages/xml-adapter/package.json index 9905197c..023bb947 100644 --- a/packages/xml-adapter/package.json +++ b/packages/xml-adapter/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/xml-adapter", "author": "APIMatic Ltd.", - "version": "0.3.7", + "version": "0.3.8", "license": "MIT", "sideEffects": false, "main": "lib/index.js", From 10efc469f964a8115070ae6cf366245acb970696 Mon Sep 17 00:00:00 2001 From: Ayesha <88117894+Ayeshas09@users.noreply.github.com> Date: Tue, 4 Nov 2025 10:08:16 +0500 Subject: [PATCH 5/9] fix: set headers for file and JSON data parts in multipart from request (#304) --- .../test/accessTokenAdapter.test.ts | 5 +- .../test/basicAuthenticationAdapter.test.ts | 5 +- .../customHeaderAuthenticationAdapter.test.ts | 5 +- .../customQueryAuthenticationAdapter.test.ts | 5 +- .../test/noAuthenticationAdapter.test.ts | 5 +- .../axios-client-adapter/src/httpClient.ts | 32 +++- .../test/httpClient.test.ts | 155 +++++++++++++++++- packages/core-interfaces/package.json | 3 +- .../core-interfaces/src/formDataWrapper.ts | 54 ++++++ packages/core-interfaces/src/httpRequest.ts | 6 +- packages/core-interfaces/src/index.ts | 1 + .../test/formDataWrapper.test.ts | 154 +++++++++++++++++ packages/core/test/http/apiLogger.test.ts | 2 +- packages/file-wrapper/src/fileWrapper.ts | 11 ++ .../file-wrapper/test/fileWrapper.test.ts | 56 +++++++ packages/http-query/package.json | 3 +- packages/http-query/src/queryString.ts | 6 +- packages/http-query/test/queryString.test.ts | 13 ++ .../test/oauthAuthenticationAdapter.test.ts | 2 +- 19 files changed, 498 insertions(+), 25 deletions(-) create mode 100644 packages/core-interfaces/src/formDataWrapper.ts create mode 100644 packages/core-interfaces/test/formDataWrapper.test.ts diff --git a/packages/authentication-adapters/test/accessTokenAdapter.test.ts b/packages/authentication-adapters/test/accessTokenAdapter.test.ts index bbafc700..91e43b56 100644 --- a/packages/authentication-adapters/test/accessTokenAdapter.test.ts +++ b/packages/authentication-adapters/test/accessTokenAdapter.test.ts @@ -1,7 +1,6 @@ -import { callHttpInterceptors } from '../../core/src/http/httpInterceptor'; +import { callHttpInterceptors } from '@apimatic/core'; import { accessTokenAuthenticationProvider } from '../src/accessTokenAdapter'; -import { HttpRequest } from '../../core-interfaces/src/httpRequest'; -import { HttpResponse } from '../../core-interfaces/src/httpResponse'; +import { HttpRequest, HttpResponse } from '@apimatic/core-interfaces'; describe('test access token authentication scheme', () => { const config = { diff --git a/packages/authentication-adapters/test/basicAuthenticationAdapter.test.ts b/packages/authentication-adapters/test/basicAuthenticationAdapter.test.ts index 5792ec93..c651a1c6 100644 --- a/packages/authentication-adapters/test/basicAuthenticationAdapter.test.ts +++ b/packages/authentication-adapters/test/basicAuthenticationAdapter.test.ts @@ -1,7 +1,6 @@ -import { callHttpInterceptors } from '../../core/src/http/httpInterceptor'; +import { callHttpInterceptors } from '@apimatic/core'; import { basicAuthenticationProvider } from '../src/basicAuthenticationAdapter'; -import { HttpRequest } from '../../core-interfaces/src/httpRequest'; -import { HttpResponse } from '../../core-interfaces/src/httpResponse'; +import { HttpRequest, HttpResponse } from '@apimatic/core-interfaces'; describe('test basic authentication scheme', () => { const config = { diff --git a/packages/authentication-adapters/test/customHeaderAuthenticationAdapter.test.ts b/packages/authentication-adapters/test/customHeaderAuthenticationAdapter.test.ts index 3a54f5c4..a34fcf3a 100644 --- a/packages/authentication-adapters/test/customHeaderAuthenticationAdapter.test.ts +++ b/packages/authentication-adapters/test/customHeaderAuthenticationAdapter.test.ts @@ -1,7 +1,6 @@ -import { callHttpInterceptors } from '../../core/src/http/httpInterceptor'; +import { callHttpInterceptors } from '@apimatic/core'; import { customHeaderAuthenticationProvider } from '../src/customHeaderAuthenticationAdapter'; -import { HttpRequest } from '../../core-interfaces/src/httpRequest'; -import { HttpResponse } from '../../core-interfaces/src/httpResponse'; +import { HttpRequest, HttpResponse } from '@apimatic/core-interfaces'; describe('test custom header authentication scheme', () => { test.each([ diff --git a/packages/authentication-adapters/test/customQueryAuthenticationAdapter.test.ts b/packages/authentication-adapters/test/customQueryAuthenticationAdapter.test.ts index 6d47e618..e3d56295 100644 --- a/packages/authentication-adapters/test/customQueryAuthenticationAdapter.test.ts +++ b/packages/authentication-adapters/test/customQueryAuthenticationAdapter.test.ts @@ -1,7 +1,6 @@ -import { callHttpInterceptors } from '../../core/src/http/httpInterceptor'; +import { callHttpInterceptors } from '@apimatic/core'; import { customQueryAuthenticationProvider } from '../src/customQueryAuthenticationAdapter'; -import { HttpRequest } from '../../core-interfaces/src/httpRequest'; -import { HttpResponse } from '../../core-interfaces/src/httpResponse'; +import { HttpRequest, HttpResponse } from '@apimatic/core-interfaces'; describe('test custom query authentication scheme', () => { test.each([ diff --git a/packages/authentication-adapters/test/noAuthenticationAdapter.test.ts b/packages/authentication-adapters/test/noAuthenticationAdapter.test.ts index 258e8bd1..bb59c55f 100644 --- a/packages/authentication-adapters/test/noAuthenticationAdapter.test.ts +++ b/packages/authentication-adapters/test/noAuthenticationAdapter.test.ts @@ -1,7 +1,6 @@ -import { callHttpInterceptors } from '../../core/src/http/httpInterceptor'; +import { callHttpInterceptors } from '@apimatic/core'; import { noneAuthenticationProvider } from '../src/noAuthenticationAdapter'; -import { HttpRequest } from '../../core-interfaces/src/httpRequest'; -import { HttpResponse } from '../../core-interfaces/src/httpResponse'; +import { HttpRequest, HttpResponse } from '@apimatic/core-interfaces'; describe('test access token authentication scheme', () => { const response: HttpResponse = { diff --git a/packages/axios-client-adapter/src/httpClient.ts b/packages/axios-client-adapter/src/httpClient.ts index ff7e9b65..b07a0cdc 100644 --- a/packages/axios-client-adapter/src/httpClient.ts +++ b/packages/axios-client-adapter/src/httpClient.ts @@ -12,10 +12,12 @@ import FormData from 'form-data'; import { CONTENT_TYPE_HEADER, FORM_URLENCODED_CONTENT_TYPE, + lookupCaseInsensitive, } from '@apimatic/http-headers'; import { HttpRequest, HttpResponse, + isFormDataWrapper, RetryConfiguration, } from '@apimatic/core-interfaces'; import { urlEncodeKeyValuePairs } from '@apimatic/http-query'; @@ -107,7 +109,16 @@ export class HttpClient { }); } - form.append(iter.key, fileData, iter.value.options); + form.append(iter.key, fileData, { + ...createFormDataOptions(iter.value.options?.headers || {}), + filename: iter.value.options?.filename, + }); + } else if (isFormDataWrapper(iter.value)) { + form.append( + iter.key, + iter.value.data, + createFormDataOptions(iter.value.headers || {}) + ); } else { form.append(iter.key, iter.value); } @@ -150,7 +161,6 @@ export class HttpClient { newRequest.headers = headers; this.setProxyAgent(newRequest); - return newRequest; } @@ -276,3 +286,21 @@ export function isBlob(value: unknown): value is Blob { Object.prototype.toString.call(value) === '[object Blob]' ); } + +export function createFormDataOptions( + headers: Record +): FormData.AppendOptions { + const headerKey = lookupCaseInsensitive(headers, 'content-type'); + if (!headerKey) { + return { + header: headers, + }; + } + + const contentType = headers[headerKey]; + delete headers[headerKey]; + return { + contentType, + header: headers, + }; +} diff --git a/packages/axios-client-adapter/test/httpClient.test.ts b/packages/axios-client-adapter/test/httpClient.test.ts index 4afbc830..ff391b34 100644 --- a/packages/axios-client-adapter/test/httpClient.test.ts +++ b/packages/axios-client-adapter/test/httpClient.test.ts @@ -1,4 +1,9 @@ -import { DEFAULT_TIMEOUT, HttpClient, isBlob } from '../src/httpClient'; +import { + DEFAULT_TIMEOUT, + HttpClient, + isBlob, + createFormDataOptions, +} from '../src/httpClient'; import { AxiosHeaders, AxiosRequestConfig, @@ -14,6 +19,7 @@ import { HttpResponse, } from '@apimatic/core-interfaces'; import { FileWrapper } from '@apimatic/file-wrapper'; +import { createFormData } from '@apimatic/core-interfaces'; import FormData from 'form-data'; import fs from 'fs'; @@ -138,6 +144,102 @@ describe('HTTP Client', () => { }); }); + it('converts request with http form-data containing FormDataWrapper and FileWrapper', async () => { + const httpClient = new HttpClient(AbortError); + // Need FileWrapper to trigger multipart mode + const fileWrapper = new FileWrapper( + fs.createReadStream('test/dummy_file.txt'), + { + filename: 'document.txt', + headers: { 'content-type': 'text/plain' }, + } + ); + const formDataWrapper = createFormData( + { userId: 123, name: 'Test User' }, + { 'content-type': 'application/json' } + ); + const formDataBody: HttpRequestMultipartFormBody = { + type: 'form-data', + content: [ + { key: 'file', value: fileWrapper }, + { key: 'metadata', value: formDataWrapper! }, + { key: 'param1', value: 'value1' }, + ], + }; + + const request: HttpRequest = { + method: 'POST', + url: 'http://apimatic.hopto.org:3000/test/requestBuilder', + headers: { 'test-header': 'test-value' }, + body: formDataBody, + responseType: 'text', + }; + + const axiosRequestConfig = httpClient.convertHttpRequest(request); + expect(axiosRequestConfig).toMatchObject({ + url: 'http://apimatic.hopto.org:3000/test/requestBuilder', + method: 'POST', + headers: { + 'test-header': 'test-value', + 'content-type': new RegExp( + '^multipart/form-data; boundary=--------------------------' + ), + }, + timeout: DEFAULT_TIMEOUT, + responseType: 'text', + data: expect.any(FormData), + }); + }); + + it('converts request with mixed form-data containing multiple FormDataWrappers', async () => { + const httpClient = new HttpClient(AbortError); + // Need FileWrapper to trigger multipart mode + const fileWrapper = new FileWrapper( + fs.createReadStream('test/dummy_file.txt') + ); + const formDataWrapper1 = createFormData( + { type: 'document', status: 'active' }, + { 'content-type': 'application/json' } + ); + const formDataWrapper2 = createFormData({ + version: 1, + lastModified: '2025-10-31', + }); + + const formDataBody: HttpRequestMultipartFormBody = { + type: 'form-data', + content: [ + { key: 'file', value: fileWrapper }, + { key: 'metadata', value: formDataWrapper1! }, + { key: 'version_info', value: formDataWrapper2! }, + { key: 'description', value: 'Test upload' }, + ], + }; + + const request: HttpRequest = { + method: 'POST', + url: 'http://apimatic.hopto.org:3000/test/upload', + headers: { authorization: 'Bearer token123' }, + body: formDataBody, + responseType: 'text', + }; + + const axiosRequestConfig = httpClient.convertHttpRequest(request); + expect(axiosRequestConfig).toMatchObject({ + url: 'http://apimatic.hopto.org:3000/test/upload', + method: 'POST', + headers: { + authorization: 'Bearer token123', + 'content-type': new RegExp( + '^multipart/form-data; boundary=--------------------------' + ), + }, + timeout: DEFAULT_TIMEOUT, + responseType: 'text', + data: expect.any(FormData), + }); + }); + it('converts request with http stream body(file stream) and http get method', async () => { const httpClient = new HttpClient(AbortError); const streamBody: HttpRequestStreamBody = { @@ -312,6 +414,57 @@ describe('HTTP Client', () => { }); }); +describe('createFormDataOptions', () => { + it('should return headers with content type from formDataWrapper headers', () => { + const formDataWrapper = createFormData( + { key: 'value' }, + { 'content-type': 'application/json' } + ); + + const result = createFormDataOptions(formDataWrapper?.headers || {}); + + expect(result).toEqual({ + contentType: 'application/json', + header: {}, + }); + }); + + it('should return undefined content type when not provided in headers', () => { + const formDataWrapper = createFormData({ key: 'value' }, {}); + + const result = createFormDataOptions(formDataWrapper?.headers || {}); + + expect(result).toEqual({ + contentType: undefined, + header: {}, + }); + }); + + it('should handle formDataWrapper with no headers', () => { + const formDataWrapper = createFormData({ key: 'value' }); + + const result = createFormDataOptions(formDataWrapper?.headers || {}); + + expect(result).toEqual({ + header: {}, + }); + }); + + it('should handle case-insensitive content-type header lookup', () => { + const formDataWrapper = createFormData( + { test: 'data' }, + { 'Content-Type': 'application/json; charset=utf-8' } + ); + + const result = createFormDataOptions(formDataWrapper?.headers || {}); + + expect(result).toEqual({ + contentType: 'application/json; charset=utf-8', + header: {}, + }); + }); +}); + describe('test blob type', () => { test.each([ [ diff --git a/packages/core-interfaces/package.json b/packages/core-interfaces/package.json index 265a279d..091c66be 100644 --- a/packages/core-interfaces/package.json +++ b/packages/core-interfaces/package.json @@ -59,6 +59,7 @@ }, "dependencies": { "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/json-bigint": "^1.2.0", "tslib": "^2.8.1" }, "publishConfig": { @@ -69,4 +70,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/core-interfaces" } -} +} \ No newline at end of file diff --git a/packages/core-interfaces/src/formDataWrapper.ts b/packages/core-interfaces/src/formDataWrapper.ts new file mode 100644 index 00000000..268960eb --- /dev/null +++ b/packages/core-interfaces/src/formDataWrapper.ts @@ -0,0 +1,54 @@ +import JSONBig from '@apimatic/json-bigint'; + +/** + * Unique symbol used to mark an object as a FormDataWrapper. + */ +const formDataWrapperMarker = Symbol('FormDataWrapper'); + +/** + * Represents a wrapped form-data object containing the raw data + * and optional headers to be sent with the request. + */ +export interface FormDataWrapper { + [formDataWrapperMarker]: true; + data: any; + headers?: Record; +} + +/** + * Creates a FormDataWrapper object that encapsulates form-data and optional headers. + * + * @param data The form-data payload or object to be wrapped. + * @param headers Optional headers to include with the form-data. + * @returns A FormDataWrapper instance. + */ +export function createFormData( + data: any, + headers?: Record +): FormDataWrapper | undefined { + if (data === null || data === undefined) { + return undefined; + } + return { + [formDataWrapperMarker]: true, + data: + Array.isArray(data) || typeof data === 'object' + ? JSONBig.stringify(data) + : data.toString(), + headers, + }; +} + +/** + * Type guard that checks if a given value is a FormDataWrapper. + * + * @param value The value to validate. + * @returns True if the value is a FormDataWrapper, false otherwise. + */ +export function isFormDataWrapper(value: unknown): value is FormDataWrapper { + return ( + typeof value === 'object' && + value !== null && + formDataWrapperMarker in value + ); +} diff --git a/packages/core-interfaces/src/httpRequest.ts b/packages/core-interfaces/src/httpRequest.ts index 4c7f42c0..25ec23ad 100644 --- a/packages/core-interfaces/src/httpRequest.ts +++ b/packages/core-interfaces/src/httpRequest.ts @@ -1,4 +1,5 @@ import { FileWrapper } from '@apimatic/file-wrapper'; +import { FormDataWrapper } from './formDataWrapper'; /** * Represents an HTTP request */ @@ -50,7 +51,10 @@ export interface HttpRequestUrlEncodedFormBody { export interface HttpRequestMultipartFormBody { type: 'form-data'; - content: Array<{ key: string; value: string | FileWrapper }>; + content: Array<{ + key: string; + value: string | FileWrapper | FormDataWrapper; + }>; } export interface HttpRequestStreamBody { diff --git a/packages/core-interfaces/src/index.ts b/packages/core-interfaces/src/index.ts index c0a47079..b3f5850e 100644 --- a/packages/core-interfaces/src/index.ts +++ b/packages/core-interfaces/src/index.ts @@ -10,3 +10,4 @@ export * from './logging'; export type { PagedAsyncIterable } from './pagedAsyncIterable'; export * from './signatureVerificationResult'; export type { SignatureVerifier } from './signatureVerifier'; +export * from './formDataWrapper'; diff --git a/packages/core-interfaces/test/formDataWrapper.test.ts b/packages/core-interfaces/test/formDataWrapper.test.ts new file mode 100644 index 00000000..85f9ff07 --- /dev/null +++ b/packages/core-interfaces/test/formDataWrapper.test.ts @@ -0,0 +1,154 @@ +import { isFormDataWrapper, createFormData } from '../src/formDataWrapper'; + +describe('formDataWrapper', () => { + describe('createFormData', () => { + it('should create a FormDataWrapper with object data converted to JSON string', () => { + const testData = { key: 'value' }; + const result = createFormData(testData); + + expect(result).toBeDefined(); + expect(result!.data).toBe('{"key":"value"}'); + expect(result!.headers).toBeUndefined(); + expect(typeof result).toBe('object'); + }); + + it('should create a FormDataWrapper with string data (no conversion)', () => { + const testData = 'test string data'; + const testHeaders = { + 'Content-Type': 'application/json', + Authorization: 'Bearer token', + }; + const result = createFormData(testData, testHeaders); + + expect(result).toBeDefined(); + expect(result!.data).toBe(testData); + expect(result!.headers).toBe(testHeaders); + expect(typeof result).toBe('object'); + }); + + it('should create a FormDataWrapper with null data converted to JSON string', () => { + const result = createFormData(null); + + expect(result).toBeUndefined(); + }); + + it('should create a FormDataWrapper with undefined data', () => { + const result = createFormData(undefined); + + expect(result).toBeUndefined(); + }); + + it('should create a FormDataWrapper with array data converted to JSON string', () => { + const testData = [1, 2, 3]; + const emptyHeaders = {}; + const result = createFormData(testData, emptyHeaders); + + expect(result).toBeDefined(); + expect(result!.data).toBe('[1,2,3]'); + expect(result!.headers).toBe(emptyHeaders); + expect(typeof result).toBe('object'); + }); + + it('should create a FormDataWrapper with number data', () => { + const numberData = 42; + const result = createFormData(numberData); + + expect(result).toBeDefined(); + expect(result!.data).toBe('42'); + expect(result!.headers).toBeUndefined(); + expect(typeof result).toBe('object'); + }); + + it('should create a FormDataWrapper with array data converted to JSON string', () => { + const arrayData = ['item1', 'item2', 'item3']; + const headers = { 'X-Custom-Header': 'value' }; + const result = createFormData(arrayData, headers); + + expect(result).toBeDefined(); + expect(result!.data).toBe('["item1","item2","item3"]'); + expect(result!.headers).toBe(headers); + expect(typeof result).toBe('object'); + }); + + it('should create a FormDataWrapper with complex nested object converted to JSON string', () => { + const complexData = { + user: { id: 1, name: 'John' }, + items: [ + { type: 'book', price: 10.99 }, + { type: 'pen', price: 1.5 }, + ], + }; + const result = createFormData(complexData); + + expect(result).toBeDefined(); + expect(result!.data).toBe( + '{"user":{"id":1,"name":"John"},"items":[{"type":"book","price":10.99},{"type":"pen","price":1.5}]}' + ); + expect(result!.headers).toBeUndefined(); + }); + + it('should not convert primitive string data to JSON', () => { + const stringData = 'simple string'; + const result = createFormData(stringData); + + expect(result).toBeDefined(); + expect(result!.data).toBe('simple string'); + expect(result!.headers).toBeUndefined(); + }); + + it('should convert boolean data to JSON', () => { + const booleanData = true; + const result = createFormData(booleanData); + + expect(result).toBeDefined(); + expect(result!.data).toBe('true'); + expect(result!.headers).toBeUndefined(); + }); + }); + + describe('isFormDataWrapper', () => { + it('should return true for a valid FormDataWrapper object created with createFormData', () => { + const formData = createFormData({ test: 'data' }); + expect(isFormDataWrapper(formData)).toBe(true); + }); + + it('should return true for a FormDataWrapper with headers', () => { + const formData = createFormData('test', { 'Content-Type': 'text/plain' }); + expect(isFormDataWrapper(formData)).toBe(true); + }); + + it('should return true for a FormDataWrapper with null data', () => { + const formData = createFormData(null); + expect(isFormDataWrapper(formData)).toBe(false); + }); + + it('should return true for a FormDataWrapper with undefined data', () => { + const formData = createFormData(undefined); + expect(isFormDataWrapper(formData)).toBe(false); + }); + + it('should return true for a FormDataWrapper with array data', () => { + const formData = createFormData([1, 2, 3]); + expect(isFormDataWrapper(formData)).toBe(true); + }); + + it('should return false for null', () => { + expect(isFormDataWrapper(null)).toBe(false); + }); + + it('should return false for undefined', () => { + expect(isFormDataWrapper(undefined)).toBe(false); + }); + + it('should return false for primitive types', () => { + expect(isFormDataWrapper('string')).toBe(false); + expect(isFormDataWrapper(123)).toBe(false); + expect(isFormDataWrapper(true)).toBe(false); + }); + + it('should return false for arrays', () => { + expect(isFormDataWrapper([1, 2, 3])).toBe(false); + expect(isFormDataWrapper([])).toBe(false); + }); + }); +}); diff --git a/packages/core/test/http/apiLogger.test.ts b/packages/core/test/http/apiLogger.test.ts index 6c3985b0..a639c695 100644 --- a/packages/core/test/http/apiLogger.test.ts +++ b/packages/core/test/http/apiLogger.test.ts @@ -3,7 +3,7 @@ import { HttpResponse, LoggingOptions, LogLevel, -} from '../../src/coreInterfaces'; +} from '@apimatic/core-interfaces'; import { ApiLogger } from '../../src/logger/apiLogger'; import { callHttpInterceptors } from '../../src/http/httpInterceptor'; import { NullLogger } from '../../src/logger/nullLogger'; diff --git a/packages/file-wrapper/src/fileWrapper.ts b/packages/file-wrapper/src/fileWrapper.ts index a98de05e..a5897077 100644 --- a/packages/file-wrapper/src/fileWrapper.ts +++ b/packages/file-wrapper/src/fileWrapper.ts @@ -8,6 +8,17 @@ export class FileWrapper { ) { this.file = file; } + + /** + * Updates the current FileWrapper instance with merged options. + * + * @param newOptions Options to merge with existing options + * @returns The current FileWrapper instance with updated options + */ + public withOptions(newOptions: FileWrapperOptions): this { + this.options = { ...this.options, ...newOptions }; + return this; + } } /** File upload options such as filename and mime-type */ diff --git a/packages/file-wrapper/test/fileWrapper.test.ts b/packages/file-wrapper/test/fileWrapper.test.ts index 7edbc2bc..a72ad9cb 100644 --- a/packages/file-wrapper/test/fileWrapper.test.ts +++ b/packages/file-wrapper/test/fileWrapper.test.ts @@ -4,6 +4,62 @@ import { isFileWrapper, } from '../src/fileWrapper'; import fs from 'fs'; + +describe('FileWrapper.withOptions', () => { + it('should merge new options with existing options', () => { + const initialOptions = { + contentType: 'text/plain', + filename: 'original.txt', + }; + const fileWrapper = new FileWrapper( + fs.createReadStream('test/dummy_file.txt'), + initialOptions + ); + + const newOptions = { + contentType: 'application/json', + headers: { 'X-Custom': 'test-value' }, + }; + + const result = fileWrapper.withOptions(newOptions); + + expect(result).toBe(fileWrapper); // Should return the same instance + expect(fileWrapper.options).toEqual({ + contentType: 'application/json', // Should be overwritten + filename: 'original.txt', // Should be preserved + headers: { 'X-Custom': 'test-value' }, // Should be added + }); + }); + + it('should handle FileWrapper with no initial options', () => { + const fileWrapper = new FileWrapper( + fs.createReadStream('test/dummy_file.txt') + ); + + const newOptions = { + contentType: 'image/png', + filename: 'image.png', + }; + + fileWrapper.withOptions(newOptions); + expect(fileWrapper.options).toEqual(newOptions); + }); + + it('should handle empty new options object', () => { + const initialOptions = { + contentType: 'text/plain', + filename: 'test.txt', + }; + const fileWrapper = new FileWrapper( + fs.createReadStream('test/dummy_file.txt'), + initialOptions + ); + + fileWrapper.withOptions({}); + expect(fileWrapper.options).toEqual(initialOptions); + }); +}); + describe('isFileWrapper', () => { it('should verify the instance of FileWrapper', () => { const fileWrapper = new FileWrapper( diff --git a/packages/http-query/package.json b/packages/http-query/package.json index d0e173d4..b0fb325b 100644 --- a/packages/http-query/package.json +++ b/packages/http-query/package.json @@ -56,6 +56,7 @@ }, "dependencies": { "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/core-interfaces": "^0.2.13", "tslib": "^2.8.1" }, "publishConfig": { @@ -66,4 +67,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/http-query" } -} +} \ No newline at end of file diff --git a/packages/http-query/src/queryString.ts b/packages/http-query/src/queryString.ts index e541b358..f7215c24 100644 --- a/packages/http-query/src/queryString.ts +++ b/packages/http-query/src/queryString.ts @@ -3,13 +3,14 @@ import { isFileWrapper, cloneFileWrapper, } from '@apimatic/file-wrapper'; +import { isFormDataWrapper, FormDataWrapper } from '@apimatic/core-interfaces'; /** * Type for Key-value pair for form-urlencoded serialization */ export interface FormKeyValuePair { key: string; - value: string | FileWrapper; + value: string | FileWrapper | FormDataWrapper; } /** @@ -131,7 +132,6 @@ export function formDataEncodeObject( prefixFormat: ArrayPrefixFunction = indexedPrefix ): FormKeyValuePairList { const result: FormKeyValuePairList = []; - for (const key of Object.keys(obj)) { const value = obj[key]; if (value === null || value === undefined) { @@ -145,6 +145,8 @@ export function formDataEncodeObject( result.push({ key, value: value.toString() }); } else if (isFileWrapper(value)) { result.push({ key, value: cloneFileWrapper(value) }); + } else if (isFormDataWrapper(value)) { + result.push({ key, value }); } else if (Array.isArray(value)) { prefixFormat(key, value, result); } else if (typeof value === 'object') { diff --git a/packages/http-query/test/queryString.test.ts b/packages/http-query/test/queryString.test.ts index b1ee10b2..dfc60c2d 100644 --- a/packages/http-query/test/queryString.test.ts +++ b/packages/http-query/test/queryString.test.ts @@ -1,4 +1,5 @@ import { FileWrapper, isFileWrapper } from '@apimatic/file-wrapper'; +import { createFormData } from '@apimatic/core-interfaces'; import fs from 'fs'; import path from 'path'; import { @@ -739,3 +740,15 @@ describe('test file wrapper form encoding', () => { isFileWrapper(result); }); }); + +describe('test form data wrapper form encoding', () => { + test('test form data wrapper indexed prefix format', () => { + const formDataWrapper = createFormData( + { test: 'data' }, + { 'Content-Type': 'application/json' } + ); + const params = { param: formDataWrapper }; + const result = formDataEncodeObject(params); + expect(result).toEqual([{ key: 'param', value: formDataWrapper }]); + }); +}); diff --git a/packages/oauth-adapters/test/oauthAuthenticationAdapter.test.ts b/packages/oauth-adapters/test/oauthAuthenticationAdapter.test.ts index dd90b20c..077de8c2 100644 --- a/packages/oauth-adapters/test/oauthAuthenticationAdapter.test.ts +++ b/packages/oauth-adapters/test/oauthAuthenticationAdapter.test.ts @@ -11,7 +11,7 @@ import { HttpRequest, HttpResponse, RequestOptions, -} from '../../core-interfaces/src'; +} from '@apimatic/core-interfaces'; describe('test oauth request provider', () => { it('should pass with disabled authentication', async () => { From 7f5b6930de8cf0d8d8cbb2679a9938b670158df9 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 4 Nov 2025 05:11:29 +0000 Subject: [PATCH 6/9] chore(release): update version and publish package(s) - @apimatic/authentication-adapters@0.5.14 - @apimatic/axios-client-adapter@0.3.20 - @apimatic/core-interfaces@0.2.14 - @apimatic/core@0.10.28 - @apimatic/file-wrapper@0.3.9 - @apimatic/hmac-signature-verifier@0.1.2 - @apimatic/http-query@0.3.9 - @apimatic/oauth-adapters@0.4.18 - @apimatic/pagination@0.1.6 - @apimatic/test-utilities@0.1.2 --- packages/authentication-adapters/CHANGELOG.md | 6 ++++++ packages/authentication-adapters/package.json | 6 +++--- packages/axios-client-adapter/CHANGELOG.md | 6 ++++++ packages/axios-client-adapter/package.json | 8 ++++---- packages/core-interfaces/CHANGELOG.md | 6 ++++++ packages/core-interfaces/package.json | 6 +++--- packages/core/CHANGELOG.md | 6 ++++++ packages/core/package.json | 8 ++++---- packages/file-wrapper/CHANGELOG.md | 6 ++++++ packages/file-wrapper/package.json | 2 +- packages/hmac-signature-verifier/CHANGELOG.md | 4 ++++ packages/hmac-signature-verifier/package.json | 4 ++-- packages/http-query/CHANGELOG.md | 6 ++++++ packages/http-query/package.json | 8 ++++---- packages/oauth-adapters/CHANGELOG.md | 6 ++++++ packages/oauth-adapters/package.json | 6 +++--- packages/pagination/CHANGELOG.md | 4 ++++ packages/pagination/package.json | 4 ++-- packages/test-utilities/CHANGELOG.md | 4 ++++ packages/test-utilities/package.json | 4 ++-- 20 files changed, 82 insertions(+), 28 deletions(-) diff --git a/packages/authentication-adapters/CHANGELOG.md b/packages/authentication-adapters/CHANGELOG.md index fdf92612..1102a004 100644 --- a/packages/authentication-adapters/CHANGELOG.md +++ b/packages/authentication-adapters/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.5.14](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/authentication-adapters@0.5.13...@apimatic/authentication-adapters@0.5.14) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.5.13](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/authentication-adapters@0.5.12...@apimatic/authentication-adapters@0.5.13) (2025-09-30) **Note:** Version bump only for package @apimatic/authentication-adapters diff --git a/packages/authentication-adapters/package.json b/packages/authentication-adapters/package.json index 1d097386..7c6ac8a7 100644 --- a/packages/authentication-adapters/package.json +++ b/packages/authentication-adapters/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/authentication-adapters", "author": "APIMatic Ltd.", - "version": "0.5.13", + "version": "0.5.14", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -55,9 +55,9 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/core-interfaces": "^0.2.14", "@apimatic/http-headers": "^0.3.8", - "@apimatic/http-query": "^0.3.8", + "@apimatic/http-query": "^0.3.9", "tslib": "^2.8.1" }, "publishConfig": { diff --git a/packages/axios-client-adapter/CHANGELOG.md b/packages/axios-client-adapter/CHANGELOG.md index c0c29895..6c88fae7 100644 --- a/packages/axios-client-adapter/CHANGELOG.md +++ b/packages/axios-client-adapter/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.20](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/axios-client-adapter@0.3.19...@apimatic/axios-client-adapter@0.3.20) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.3.19](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/axios-client-adapter@0.3.18...@apimatic/axios-client-adapter@0.3.19) (2025-09-30) **Note:** Version bump only for package @apimatic/axios-client-adapter diff --git a/packages/axios-client-adapter/package.json b/packages/axios-client-adapter/package.json index e02ec58a..e5166f47 100644 --- a/packages/axios-client-adapter/package.json +++ b/packages/axios-client-adapter/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/axios-client-adapter", "author": "APIMatic Ltd.", - "version": "0.3.19", + "version": "0.3.20", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -59,10 +59,10 @@ }, "dependencies": { "@apimatic/convert-to-stream": "^0.1.8", - "@apimatic/core-interfaces": "^0.2.13", - "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/core-interfaces": "^0.2.14", + "@apimatic/file-wrapper": "^0.3.9", "@apimatic/http-headers": "^0.3.8", - "@apimatic/http-query": "^0.3.8", + "@apimatic/http-query": "^0.3.9", "@apimatic/json-bigint": "^1.2.0", "@apimatic/proxy": "^0.1.3", "axios": "^1.8.4", diff --git a/packages/core-interfaces/CHANGELOG.md b/packages/core-interfaces/CHANGELOG.md index 3b75ea61..66655c4c 100644 --- a/packages/core-interfaces/CHANGELOG.md +++ b/packages/core-interfaces/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.2.14](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core-interfaces@0.2.13...@apimatic/core-interfaces@0.2.14) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.2.13](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core-interfaces@0.2.12...@apimatic/core-interfaces@0.2.13) (2025-09-30) ### Features diff --git a/packages/core-interfaces/package.json b/packages/core-interfaces/package.json index 091c66be..959556aa 100644 --- a/packages/core-interfaces/package.json +++ b/packages/core-interfaces/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/core-interfaces", "author": "APIMatic Ltd.", - "version": "0.2.13", + "version": "0.2.14", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -58,7 +58,7 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/file-wrapper": "^0.3.9", "@apimatic/json-bigint": "^1.2.0", "tslib": "^2.8.1" }, @@ -70,4 +70,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/core-interfaces" } -} \ No newline at end of file +} diff --git a/packages/core/CHANGELOG.md b/packages/core/CHANGELOG.md index ab4ba8a5..d77d87b3 100644 --- a/packages/core/CHANGELOG.md +++ b/packages/core/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.10.28](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core@0.10.27...@apimatic/core@0.10.28) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.10.27](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/core@0.10.26...@apimatic/core@0.10.27) (2025-09-30) ### Features diff --git a/packages/core/package.json b/packages/core/package.json index b97391eb..7418f476 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/core", "author": "APIMatic Ltd.", - "version": "0.10.27", + "version": "0.10.28", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -64,10 +64,10 @@ }, "dependencies": { "@apimatic/convert-to-stream": "^0.1.8", - "@apimatic/core-interfaces": "^0.2.13", - "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/core-interfaces": "^0.2.14", + "@apimatic/file-wrapper": "^0.3.9", "@apimatic/http-headers": "^0.3.8", - "@apimatic/http-query": "^0.3.8", + "@apimatic/http-query": "^0.3.9", "@apimatic/json-bigint": "^1.2.0", "@apimatic/schema": "^0.7.21", "detect-browser": "^5.3.0", diff --git a/packages/file-wrapper/CHANGELOG.md b/packages/file-wrapper/CHANGELOG.md index 6a883f12..c424b000 100644 --- a/packages/file-wrapper/CHANGELOG.md +++ b/packages/file-wrapper/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.9](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/file-wrapper@0.3.8...@apimatic/file-wrapper@0.3.9) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.3.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/file-wrapper@0.3.7...@apimatic/file-wrapper@0.3.8) (2025-09-30) **Note:** Version bump only for package @apimatic/file-wrapper diff --git a/packages/file-wrapper/package.json b/packages/file-wrapper/package.json index 8fa3c346..1a791b1e 100644 --- a/packages/file-wrapper/package.json +++ b/packages/file-wrapper/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/file-wrapper", "author": "APIMatic Ltd.", - "version": "0.3.8", + "version": "0.3.9", "license": "MIT", "sideEffects": false, "main": "lib/index.js", diff --git a/packages/hmac-signature-verifier/CHANGELOG.md b/packages/hmac-signature-verifier/CHANGELOG.md index 5f88e87d..8cb27b3e 100644 --- a/packages/hmac-signature-verifier/CHANGELOG.md +++ b/packages/hmac-signature-verifier/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.2](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/hmac-signature-verifier@0.1.1...@apimatic/hmac-signature-verifier@0.1.2) (2025-11-04) + +**Note:** Version bump only for package @apimatic/hmac-signature-verifier + ### 0.1.1 (2025-09-30) ### Features diff --git a/packages/hmac-signature-verifier/package.json b/packages/hmac-signature-verifier/package.json index fb42a25b..cc361026 100644 --- a/packages/hmac-signature-verifier/package.json +++ b/packages/hmac-signature-verifier/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/hmac-signature-verifier", - "version": "0.1.1", + "version": "0.1.2", "description": "provides utilities for handling HMAC signature verification", "main": "lib/index.js", "module": "lib/index.js", @@ -31,7 +31,7 @@ } ], "dependencies": { - "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/core-interfaces": "^0.2.14", "@apimatic/http-headers": "^0.3.8" }, "publishConfig": { diff --git a/packages/http-query/CHANGELOG.md b/packages/http-query/CHANGELOG.md index d1fa9bbe..fc67db14 100644 --- a/packages/http-query/CHANGELOG.md +++ b/packages/http-query/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.3.9](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/http-query@0.3.8...@apimatic/http-query@0.3.9) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.3.8](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/http-query@0.3.7...@apimatic/http-query@0.3.8) (2025-09-30) **Note:** Version bump only for package @apimatic/http-query diff --git a/packages/http-query/package.json b/packages/http-query/package.json index b0fb325b..76830ac4 100644 --- a/packages/http-query/package.json +++ b/packages/http-query/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/http-query", "author": "APIMatic Ltd.", - "version": "0.3.8", + "version": "0.3.9", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -55,8 +55,8 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/file-wrapper": "^0.3.8", - "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/core-interfaces": "^0.2.14", + "@apimatic/file-wrapper": "^0.3.9", "tslib": "^2.8.1" }, "publishConfig": { @@ -67,4 +67,4 @@ "url": "git@github.com:apimatic/apimatic-js-runtime.git", "directory": "packages/http-query" } -} \ No newline at end of file +} diff --git a/packages/oauth-adapters/CHANGELOG.md b/packages/oauth-adapters/CHANGELOG.md index b4ace65e..c58cde56 100644 --- a/packages/oauth-adapters/CHANGELOG.md +++ b/packages/oauth-adapters/CHANGELOG.md @@ -3,6 +3,12 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.4.18](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/oauth-adapters@0.4.17...@apimatic/oauth-adapters@0.4.18) (2025-11-04) + +### Bug Fixes + +- set headers for file and JSON data parts in multipart from request ([#304](https://github.com/apimatic/apimatic-js-runtime/issues/304)) ([10efc46](https://github.com/apimatic/apimatic-js-runtime/commit/10efc469f964a8115070ae6cf366245acb970696)) + ### [0.4.17](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/oauth-adapters@0.4.16...@apimatic/oauth-adapters@0.4.17) (2025-09-30) **Note:** Version bump only for package @apimatic/oauth-adapters diff --git a/packages/oauth-adapters/package.json b/packages/oauth-adapters/package.json index 8c854bbe..c717b3cd 100644 --- a/packages/oauth-adapters/package.json +++ b/packages/oauth-adapters/package.json @@ -1,7 +1,7 @@ { "name": "@apimatic/oauth-adapters", "author": "APIMatic Ltd.", - "version": "0.4.17", + "version": "0.4.18", "license": "MIT", "sideEffects": false, "main": "lib/index.js", @@ -55,8 +55,8 @@ "typescript": "^4.9.5" }, "dependencies": { - "@apimatic/core-interfaces": "^0.2.13", - "@apimatic/file-wrapper": "^0.3.8", + "@apimatic/core-interfaces": "^0.2.14", + "@apimatic/file-wrapper": "^0.3.9", "@apimatic/http-headers": "^0.3.8", "tslib": "^2.8.1" }, diff --git a/packages/pagination/CHANGELOG.md b/packages/pagination/CHANGELOG.md index dab41498..46838834 100644 --- a/packages/pagination/CHANGELOG.md +++ b/packages/pagination/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.6](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/pagination@0.1.5...@apimatic/pagination@0.1.6) (2025-11-04) + +**Note:** Version bump only for package @apimatic/pagination + ### [0.1.5](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/pagination@0.1.4...@apimatic/pagination@0.1.5) (2025-09-30) ### Features diff --git a/packages/pagination/package.json b/packages/pagination/package.json index 6020121d..61012181 100644 --- a/packages/pagination/package.json +++ b/packages/pagination/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/pagination", - "version": "0.1.5", + "version": "0.1.6", "description": "provides the async utilities for handling paginated API responses.", "main": "lib/index.js", "module": "lib/index.js", @@ -31,7 +31,7 @@ } ], "dependencies": { - "@apimatic/core-interfaces": "^0.2.13" + "@apimatic/core-interfaces": "^0.2.14" }, "publishConfig": { "access": "public" diff --git a/packages/test-utilities/CHANGELOG.md b/packages/test-utilities/CHANGELOG.md index 3369925e..efff8c6d 100644 --- a/packages/test-utilities/CHANGELOG.md +++ b/packages/test-utilities/CHANGELOG.md @@ -3,6 +3,10 @@ All notable changes to this project will be documented in this file. See [Conventional Commits](https://conventionalcommits.org) for commit guidelines. +### [0.1.2](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/test-utilities@0.1.1...@apimatic/test-utilities@0.1.2) (2025-11-04) + +**Note:** Version bump only for package @apimatic/test-utilities + ### [0.1.1](https://github.com/apimatic/apimatic-js-runtime/compare/@apimatic/test-utilities@0.1.0...@apimatic/test-utilities@0.1.1) (2025-09-30) **Note:** Version bump only for package @apimatic/test-utilities diff --git a/packages/test-utilities/package.json b/packages/test-utilities/package.json index 463e2a0a..58b737eb 100644 --- a/packages/test-utilities/package.json +++ b/packages/test-utilities/package.json @@ -1,6 +1,6 @@ { "name": "@apimatic/test-utilities", - "version": "0.1.1", + "version": "0.1.2", "description": "provides the assertion utilities", "main": "lib/index.js", "module": "lib/index.js", @@ -53,7 +53,7 @@ }, "dependencies": { "@apimatic/convert-to-stream": "^0.1.8", - "@apimatic/core-interfaces": "^0.2.13", + "@apimatic/core-interfaces": "^0.2.14", "tslib": "^2.8.1" }, "publishConfig": { From af661ea53726b66abcf47a064e2c2c5b15852d9c Mon Sep 17 00:00:00 2001 From: Muhammad Rafay Nadeem Date: Wed, 19 Nov 2025 13:19:14 +0500 Subject: [PATCH 7/9] fix: missing dep in schema lib --- packages/schema/package.json | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/schema/package.json b/packages/schema/package.json index 2a20e9ee..6dc3ce74 100644 --- a/packages/schema/package.json +++ b/packages/schema/package.json @@ -61,6 +61,7 @@ "typescript": "^4.9.5" }, "dependencies": { + "@types/json-schema": "^7.0.15", "tslib": "^2.8.1" }, "publishConfig": { From 7b1b409efb4f707a0d387e947edbc1784b4cc3da Mon Sep 17 00:00:00 2001 From: Muhammad Rafay Nadeem Date: Wed, 19 Nov 2025 13:26:40 +0500 Subject: [PATCH 8/9] build: update yarn lock file --- yarn.lock | 932 +++++++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 893 insertions(+), 39 deletions(-) diff --git a/yarn.lock b/yarn.lock index 06efb2a0..24091e8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -483,11 +483,102 @@ resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.14.54.tgz#de2a4be678bd4d0d1ffbb86e6de779cde5999028" integrity sha512-bZBrLAIX1kpWelV0XemxBZllyRmM6vgFQQG2GdNb+r3Fkp0FOh1NJSvekXDs7jq70k4euu1cryLMfU+mTXlEpw== +"@eslint-community/eslint-utils@^4.7.0", "@eslint-community/eslint-utils@^4.8.0": + version "4.9.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.9.0.tgz#7308df158e064f0dd8b8fdb58aa14fa2a7f913b3" + integrity sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.12.1": + version "4.12.2" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#bccdf615bcf7b6e8db830ec0b8d21c9a25de597b" + integrity sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew== + +"@eslint/config-array@^0.21.1": + version "0.21.1" + resolved "https://registry.yarnpkg.com/@eslint/config-array/-/config-array-0.21.1.tgz#7d1b0060fea407f8301e932492ba8c18aff29713" + integrity sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA== + dependencies: + "@eslint/object-schema" "^2.1.7" + debug "^4.3.1" + minimatch "^3.1.2" + +"@eslint/config-helpers@^0.4.2": + version "0.4.2" + resolved "https://registry.yarnpkg.com/@eslint/config-helpers/-/config-helpers-0.4.2.tgz#1bd006ceeb7e2e55b2b773ab318d300e1a66aeda" + integrity sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw== + dependencies: + "@eslint/core" "^0.17.0" + +"@eslint/core@^0.17.0": + version "0.17.0" + resolved "https://registry.yarnpkg.com/@eslint/core/-/core-0.17.0.tgz#77225820413d9617509da9342190a2019e78761c" + integrity sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ== + dependencies: + "@types/json-schema" "^7.0.15" + +"@eslint/eslintrc@^3.3.1": + version "3.3.1" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-3.3.1.tgz#e55f7f1dd400600dd066dbba349c4c0bac916964" + integrity sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^10.0.1" + globals "^14.0.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@9.39.1", "@eslint/js@^9.24.0": + version "9.39.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-9.39.1.tgz#0dd59c3a9f40e3f1882975c321470969243e0164" + integrity sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw== + +"@eslint/object-schema@^2.1.7": + version "2.1.7" + resolved "https://registry.yarnpkg.com/@eslint/object-schema/-/object-schema-2.1.7.tgz#6e2126a1347e86a4dedf8706ec67ff8e107ebbad" + integrity sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA== + +"@eslint/plugin-kit@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz#9779e3fd9b7ee33571a57435cf4335a1794a6cb2" + integrity sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA== + dependencies: + "@eslint/core" "^0.17.0" + levn "^0.4.1" + "@gar/promisify@^1.1.3": version "1.1.3" resolved "https://registry.yarnpkg.com/@gar/promisify/-/promisify-1.1.3.tgz#555193ab2e3bb3b6adc3d551c9c030d9e860daf6" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@humanfs/core@^0.19.1": + version "0.19.1" + resolved "https://registry.yarnpkg.com/@humanfs/core/-/core-0.19.1.tgz#17c55ca7d426733fe3c561906b8173c336b40a77" + integrity sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA== + +"@humanfs/node@^0.16.6": + version "0.16.7" + resolved "https://registry.yarnpkg.com/@humanfs/node/-/node-0.16.7.tgz#822cb7b3a12c5a240a24f621b5a2413e27a45f26" + integrity sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ== + dependencies: + "@humanfs/core" "^0.19.1" + "@humanwhocodes/retry" "^0.4.0" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/retry@^0.4.0", "@humanwhocodes/retry@^0.4.2": + version "0.4.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/retry/-/retry-0.4.3.tgz#c2b9d2e374ee62c586d3adbea87199b1d7a7a6ba" + integrity sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ== + "@hutson/parse-repository-url@^3.0.0": version "3.0.2" resolved "https://registry.yarnpkg.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz#98c23c950a3d9b6c8f0daed06da6c3af06981340" @@ -840,6 +931,25 @@ validate-npm-package-name "^4.0.0" yargs-parser "20.2.4" +"@modelcontextprotocol/sdk@^1.18.1": + version "1.22.0" + resolved "https://registry.yarnpkg.com/@modelcontextprotocol/sdk/-/sdk-1.22.0.tgz#b982143dfd36ef096b311d8ffadb2f91aabbbb1d" + integrity sha512-VUpl106XVTCpDmTBil2ehgJZjhyLY2QZikzF8NvTXtLRF1CvO5iEE2UNZdVIUer35vFOwMKYeUGbjJtvPWan3g== + dependencies: + ajv "^8.17.1" + ajv-formats "^3.0.1" + content-type "^1.0.5" + cors "^2.8.5" + cross-spawn "^7.0.5" + eventsource "^3.0.2" + eventsource-parser "^3.0.0" + express "^5.0.1" + express-rate-limit "^7.5.0" + pkce-challenge "^5.0.0" + raw-body "^3.0.0" + zod "^3.23.8" + zod-to-json-schema "^3.24.1" + "@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3": version "2.1.8-no-fsevents.3" resolved "https://registry.yarnpkg.com/@nicolo-ribaudo/chokidar-2/-/chokidar-2-2.1.8-no-fsevents.3.tgz#323d72dd25103d0c4fbdce89dadf574a787b1f9b" @@ -1383,11 +1493,23 @@ resolved "https://registry.yarnpkg.com/@types/cookiejar/-/cookiejar-2.1.5.tgz#14a3e83fa641beb169a2dd8422d91c3c345a9a78" integrity sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q== +"@types/cors@^2.8.17": + version "2.8.19" + resolved "https://registry.yarnpkg.com/@types/cors/-/cors-2.8.19.tgz#d93ea2673fd8c9f697367f5eeefc2bbfa94f0342" + integrity sha512-mFNylyeyqN93lfe/9CSxOGREz8cpzAhH+E93xJ4xWQf62V8sQ/24reV2nyzUWM6H6Xji+GGHpkbLe7pVoUEskg== + dependencies: + "@types/node" "*" + "@types/detect-node@^2.0.2": version "2.0.2" resolved "https://registry.yarnpkg.com/@types/detect-node/-/detect-node-2.0.2.tgz#acca2b41de7a5ee88d9fd5081322b85f84b9604f" integrity sha512-2r16DIvQ3dLcRHBPzbdlPsqUWvNaIE7g3fPlGcoA5IF0Nvv7gaONWleB2rhEmggvj/P5VvxseWchR2noncrgGg== +"@types/estree@^1.0.6": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== + "@types/express-serve-static-core@^4.17.33": version "4.19.6" resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" @@ -1398,6 +1520,16 @@ "@types/range-parser" "*" "@types/send" "*" +"@types/express-serve-static-core@^5.0.0": + version "5.1.0" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-5.1.0.tgz#74f47555b3d804b54cb7030e6f9aa0c7485cfc5b" + integrity sha512-jnHMsrd0Mwa9Cf4IdOzbz543y4XJepXrbia2T4b6+spXC2We3t1y6K44D3mR8XMFSXMCf3/l7rCgddfx7UNVBA== + dependencies: + "@types/node" "*" + "@types/qs" "*" + "@types/range-parser" "*" + "@types/send" "*" + "@types/express@^4.17.21": version "4.17.23" resolved "https://registry.yarnpkg.com/@types/express/-/express-4.17.23.tgz#35af3193c640bfd4d7fe77191cd0ed411a433bef" @@ -1408,6 +1540,15 @@ "@types/qs" "*" "@types/serve-static" "*" +"@types/express@^5.0.1": + version "5.0.5" + resolved "https://registry.yarnpkg.com/@types/express/-/express-5.0.5.tgz#3ba069177caa34ab96585ca23b3984d752300cdc" + integrity sha512-LuIQOcb6UmnF7C1PCFmEU1u2hmiHL43fgFQX67sN3H4Z+0Yk0Neo++mFsBjhOAuLzvlQeqAAkeDOZrJs9rzumQ== + dependencies: + "@types/body-parser" "*" + "@types/express-serve-static-core" "^5.0.0" + "@types/serve-static" "^1" + "@types/graceful-fs@^4.1.2": version "4.1.9" resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" @@ -1462,6 +1603,11 @@ jest-matcher-utils "^27.0.0" pretty-format "^27.0.0" +"@types/json-schema@^7.0.15": + version "7.0.15" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.15.tgz#596a1747233694d50f6ad8a7869fcb6f56cf5841" + integrity sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA== + "@types/lodash.defaultsdeep@^4.6.9": version "4.6.9" resolved "https://registry.yarnpkg.com/@types/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.9.tgz#050fbe389a7a6e245b15da9ee83a8a62f047a1c4" @@ -1516,6 +1662,13 @@ resolved "https://registry.yarnpkg.com/@types/node/-/node-17.0.45.tgz#2c0fafd78705e7a18b7906b5201a522719dc5190" integrity sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw== +"@types/node@^22.14.0": + version "22.19.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.19.1.tgz#1188f1ddc9f46b4cc3aec76749050b4e1f459b7b" + integrity sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ== + dependencies: + undici-types "~6.21.0" + "@types/normalize-package-data@^2.4.0": version "2.4.0" resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz#e486d0d97396d79beedd0a6e33f4534ff6b4973e" @@ -1549,6 +1702,14 @@ "@types/mime" "^1" "@types/node" "*" +"@types/send@<1": + version "0.17.6" + resolved "https://registry.yarnpkg.com/@types/send/-/send-0.17.6.tgz#aeb5385be62ff58a52cd5459daa509ae91651d25" + integrity sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og== + dependencies: + "@types/mime" "^1" + "@types/node" "*" + "@types/serve-static@*": version "1.15.8" resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.8.tgz#8180c3fbe4a70e8f00b9f70b9ba7f08f35987877" @@ -1558,6 +1719,15 @@ "@types/node" "*" "@types/send" "*" +"@types/serve-static@^1": + version "1.15.10" + resolved "https://registry.yarnpkg.com/@types/serve-static/-/serve-static-1.15.10.tgz#768169145a778f8f5dfcb6360aead414a3994fee" + integrity sha512-tRs1dB+g8Itk72rlSI2ZrW6vZg0YrLI81iQSTkMmOqnqCaNr/8Ek4VwWcN5vZgCYWbg/JJSGBlUaYGAOP73qBw== + dependencies: + "@types/http-errors" "*" + "@types/node" "*" + "@types/send" "<1" + "@types/stack-utils@^2.0.0": version "2.0.0" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" @@ -1614,6 +1784,104 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/eslint-plugin@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.47.0.tgz#c53edeec13a79483f4ca79c298d5231b02e9dc17" + integrity sha512-fe0rz9WJQ5t2iaLfdbDc9T80GJy0AeO453q8C3YCilnGozvOyCG5t+EZtg7j7D88+c3FipfP/x+wzGnh1xp8ZA== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "8.47.0" + "@typescript-eslint/type-utils" "8.47.0" + "@typescript-eslint/utils" "8.47.0" + "@typescript-eslint/visitor-keys" "8.47.0" + graphemer "^1.4.0" + ignore "^7.0.0" + natural-compare "^1.4.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/parser@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-8.47.0.tgz#51b14ab2be2057ec0f57073b9ff3a9c078b0a964" + integrity sha512-lJi3PfxVmo0AkEY93ecfN+r8SofEqZNGByvHAI3GBLrvt1Cw6H5k1IM02nSzu0RfUafr2EvFSw0wAsZgubNplQ== + dependencies: + "@typescript-eslint/scope-manager" "8.47.0" + "@typescript-eslint/types" "8.47.0" + "@typescript-eslint/typescript-estree" "8.47.0" + "@typescript-eslint/visitor-keys" "8.47.0" + debug "^4.3.4" + +"@typescript-eslint/project-service@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/project-service/-/project-service-8.47.0.tgz#b8afc65e0527568018af911b702dcfbfdca16471" + integrity sha512-2X4BX8hUeB5JcA1TQJ7GjcgulXQ+5UkNb0DL8gHsHUHdFoiCTJoYLTpib3LtSDPZsRET5ygN4qqIWrHyYIKERA== + dependencies: + "@typescript-eslint/tsconfig-utils" "^8.47.0" + "@typescript-eslint/types" "^8.47.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.47.0.tgz#d1c36a973a5499fed3a99e2e6a66aec5c9b1e542" + integrity sha512-a0TTJk4HXMkfpFkL9/WaGTNuv7JWfFTQFJd6zS9dVAjKsojmv9HT55xzbEpnZoY+VUb+YXLMp+ihMLz/UlZfDg== + dependencies: + "@typescript-eslint/types" "8.47.0" + "@typescript-eslint/visitor-keys" "8.47.0" + +"@typescript-eslint/tsconfig-utils@8.47.0", "@typescript-eslint/tsconfig-utils@^8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.47.0.tgz#4f178b62813538759e0989dd081c5474fad39b84" + integrity sha512-ybUAvjy4ZCL11uryalkKxuT3w3sXJAuWhOoGS3T/Wu+iUu1tGJmk5ytSY8gbdACNARmcYEB0COksD2j6hfGK2g== + +"@typescript-eslint/type-utils@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.47.0.tgz#b9b0141d99bd5bece3811d7eee68a002597ffa55" + integrity sha512-QC9RiCmZ2HmIdCEvhd1aJELBlD93ErziOXXlHEZyuBo3tBiAZieya0HLIxp+DoDWlsQqDawyKuNEhORyku+P8A== + dependencies: + "@typescript-eslint/types" "8.47.0" + "@typescript-eslint/typescript-estree" "8.47.0" + "@typescript-eslint/utils" "8.47.0" + debug "^4.3.4" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@8.47.0", "@typescript-eslint/types@^8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.47.0.tgz#c7fc9b6642d03505f447a8392934b9d1850de5af" + integrity sha512-nHAE6bMKsizhA2uuYZbEbmp5z2UpffNrPEqiKIeN7VsV6UY/roxanWfoRrf6x/k9+Obf+GQdkm0nPU+vnMXo9A== + +"@typescript-eslint/typescript-estree@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.47.0.tgz#86416dad58db76c4b3bd6a899b1381f9c388489a" + integrity sha512-k6ti9UepJf5NpzCjH31hQNLHQWupTRPhZ+KFF8WtTuTpy7uHPfeg2NM7cP27aCGajoEplxJDFVCEm9TGPYyiVg== + dependencies: + "@typescript-eslint/project-service" "8.47.0" + "@typescript-eslint/tsconfig-utils" "8.47.0" + "@typescript-eslint/types" "8.47.0" + "@typescript-eslint/visitor-keys" "8.47.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/utils@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.47.0.tgz#d6c30690431dbfdab98fc027202af12e77c91419" + integrity sha512-g7XrNf25iL4TJOiPqatNuaChyqt49a/onq5YsJ9+hXeugK+41LVg7AxikMfM02PC6jbNtZLCJj6AUcQXJS/jGQ== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.47.0" + "@typescript-eslint/types" "8.47.0" + "@typescript-eslint/typescript-estree" "8.47.0" + +"@typescript-eslint/visitor-keys@8.47.0": + version "8.47.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.47.0.tgz#35f36ed60a170dfc9d4d738e78387e217f24c29f" + integrity sha512-SIV3/6eftCy1bNzCQoPmbWsRLujS8t5iDIZ4spZOBHqrM+yfX2ogg8Tt3PDTAVKw3sSCiUgg30uOAvK2r9zGjQ== + dependencies: + "@typescript-eslint/types" "8.47.0" + eslint-visitor-keys "^4.2.1" + "@yarn-tool/resolve-package@^1.0.40": version "1.0.47" resolved "https://registry.yarnpkg.com/@yarn-tool/resolve-package/-/resolve-package-1.0.47.tgz#8ec25f291a316280a281632331e88926a66fdf19" @@ -1673,6 +1941,14 @@ abort-controller@^3.0.0: dependencies: event-target-shim "^5.0.0" +accepts@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-2.0.0.tgz#bbcf4ba5075467f3f2131eab3cffc73c2f5d7895" + integrity sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng== + dependencies: + mime-types "^3.0.0" + negotiator "^1.0.0" + accepts@~1.3.8: version "1.3.8" resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" @@ -1689,6 +1965,11 @@ acorn-globals@^6.0.0: acorn "^7.1.1" acorn-walk "^7.1.1" +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + acorn-walk@^7.1.1: version "7.2.0" resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.2.0.tgz#0de889a601203909b0fbe07b8938dc21d2e967bc" @@ -1704,6 +1985,11 @@ acorn@^7.1.1: resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== +acorn@^8.15.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + acorn@^8.2.4: version "8.14.1" resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" @@ -1753,6 +2039,33 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +ajv-formats@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ajv-formats/-/ajv-formats-3.0.1.tgz#3d5dc762bca17679c3c2ea7e90ad6b7532309578" + integrity sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ== + dependencies: + ajv "^8.0.0" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^8.0.0, ajv@^8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + ajv@^8.11.0: version "8.13.0" resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.13.0.tgz#a3939eaec9fb80d217ddf0c3376948c023f28c91" @@ -2109,6 +2422,21 @@ body-parser@1.20.3: type-is "~1.6.18" unpipe "1.0.0" +body-parser@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-2.2.0.tgz#f7a9656de305249a715b549b7b8fd1ab9dfddcfa" + integrity sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg== + dependencies: + bytes "^3.1.2" + content-type "^1.0.5" + debug "^4.4.0" + http-errors "^2.0.0" + iconv-lite "^0.6.3" + on-finished "^2.4.1" + qs "^6.14.0" + raw-body "^3.0.0" + type-is "^2.0.0" + brace-expansion@^1.1.7: version "1.1.11" resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" @@ -2223,7 +2551,7 @@ bytes-iec@^3.1.1: resolved "https://registry.yarnpkg.com/bytes-iec/-/bytes-iec-3.1.1.tgz#94cd36bf95c2c22a82002c247df8772d1d591083" integrity sha512-fey6+4jDK7TFtFg/klGSvNKJctyU7n2aQdnM+CO0ruLPbqqMOM8Tio0Pc+deqUeVKX1tL5DQep1zQ7+37aTAsA== -bytes@3.1.2: +bytes@3.1.2, bytes@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== @@ -2362,10 +2690,10 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== -chokidar@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== +chokidar@^3.5.2, chokidar@^3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -2377,10 +2705,10 @@ chokidar@^3.5.3: optionalDependencies: fsevents "~2.3.2" -chokidar@^3.6.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== +chokidar@^3.5.3: + version "3.5.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.5.3.tgz#1cf37c8707b932bd1af1ae22c0432e2acd1903bd" + integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -2585,6 +2913,11 @@ combined-stream@^1.0.8: dependencies: delayed-stream "~1.0.0" +commander@^14.0.0: + version "14.0.2" + resolved "https://registry.yarnpkg.com/commander/-/commander-14.0.2.tgz#b71fd37fe4069e4c3c7c13925252ada4eba14e8e" + integrity sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ== + commander@^2.12.1, commander@^2.20.0: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" @@ -2663,7 +2996,12 @@ content-disposition@0.5.4: dependencies: safe-buffer "5.2.1" -content-type@~1.0.4, content-type@~1.0.5: +content-disposition@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-1.0.1.tgz#a8b7bbeb2904befdfb6787e5c0c086959f605f9b" + integrity sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q== + +content-type@^1.0.5, content-type@~1.0.4, content-type@~1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== @@ -2895,11 +3233,21 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== +cookie-signature@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.2.2.tgz#57c7fc3cc293acab9fec54d73e15690ebe4a1793" + integrity sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg== + cookie@0.7.1: version "0.7.1" resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== +cookie@^0.7.1: + version "0.7.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.2.tgz#556369c472a2ba910f2979891b526b3436237ed7" + integrity sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w== + cookiejar@^2.1.4: version "2.1.4" resolved "https://registry.yarnpkg.com/cookiejar/-/cookiejar-2.1.4.tgz#ee669c1fea2cf42dc31585469d193fef0d65771b" @@ -2915,6 +3263,14 @@ core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= +cors@^2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + cosmiconfig-typescript-loader@^4.0.0: version "4.4.0" resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz#f3feae459ea090f131df5474ce4b1222912319f9" @@ -2957,7 +3313,7 @@ cross-spawn@^6.0.0: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.5, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -3039,6 +3395,13 @@ debug@4, debug@^4.1.0, debug@^4.1.1: dependencies: ms "2.1.2" +debug@^4, debug@^4.3.2, debug@^4.3.5, debug@^4.3.7, debug@^4.4.0: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + debug@^4.3.1: version "4.4.0" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" @@ -3053,13 +3416,6 @@ debug@^4.3.3, debug@^4.3.4: dependencies: ms "2.1.2" -debug@^4.3.7: - version "4.4.3" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" - integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== - dependencies: - ms "^2.1.3" - debuglog@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/debuglog/-/debuglog-1.0.1.tgz#aa24ffb9ac3df9a2351837cfb2d279360cd78492" @@ -3098,6 +3454,11 @@ dedent@0.7.0, dedent@^0.7.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-0.7.0.tgz#2495ddbaf6eb874abb0e1be9df22d2e5a544326c" integrity sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA== +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + deep-is@~0.1.3: version "0.1.3" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" @@ -3314,16 +3675,16 @@ emoji-regex@^9.2.2: resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== +encodeurl@^2.0.0, encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== -encodeurl@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" - integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== - encoding@^0.1.13: version "0.1.13" resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.13.tgz#56574afdd791f54a8e9b2785c0582a2d26210fa9" @@ -3531,7 +3892,7 @@ escalade@^3.2.0: resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== -escape-html@~1.0.3: +escape-html@^1.0.3, escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== @@ -3546,6 +3907,11 @@ escape-string-regexp@^2.0.0: resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + escodegen@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.0.0.tgz#5e32b12833e8aa8fa35e1bf0befa89380484c7dd" @@ -3558,6 +3924,73 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-scope@^8.4.0: + version "8.4.0" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-8.4.0.tgz#88e646a207fad61436ffa39eb505147200655c82" + integrity sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz#4cfea60fe7dd0ad8e816e1ed026c1d5251b512c1" + integrity sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ== + +eslint@^9.24.0: + version "9.39.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-9.39.1.tgz#be8bf7c6de77dcc4252b5a8dcb31c2efff74a6e5" + integrity sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g== + dependencies: + "@eslint-community/eslint-utils" "^4.8.0" + "@eslint-community/regexpp" "^4.12.1" + "@eslint/config-array" "^0.21.1" + "@eslint/config-helpers" "^0.4.2" + "@eslint/core" "^0.17.0" + "@eslint/eslintrc" "^3.3.1" + "@eslint/js" "9.39.1" + "@eslint/plugin-kit" "^0.4.1" + "@humanfs/node" "^0.16.6" + "@humanwhocodes/module-importer" "^1.0.1" + "@humanwhocodes/retry" "^0.4.2" + "@types/estree" "^1.0.6" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.6" + debug "^4.3.2" + escape-string-regexp "^4.0.0" + eslint-scope "^8.4.0" + eslint-visitor-keys "^4.2.1" + espree "^10.4.0" + esquery "^1.5.0" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^8.0.0" + find-up "^5.0.0" + glob-parent "^6.0.2" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + json-stable-stringify-without-jsonify "^1.0.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + +espree@^10.0.1, espree@^10.4.0: + version "10.4.0" + resolved "https://registry.yarnpkg.com/espree/-/espree-10.4.0.tgz#d54f4949d4629005a1fa168d937c3ff1f7e2a837" + integrity sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ== + dependencies: + acorn "^8.15.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^4.2.1" + esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" @@ -3570,6 +4003,20 @@ esquery@^1.0.1: dependencies: estraverse "^5.1.0" +esquery@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + estraverse@^5.1.0: version "5.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" @@ -3595,7 +4042,7 @@ esutils@^2.0.2: resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== -etag@~1.8.1: +etag@^1.8.1, etag@~1.8.1: version "1.8.1" resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== @@ -3610,6 +4057,18 @@ eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +eventsource-parser@^3.0.0, eventsource-parser@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/eventsource-parser/-/eventsource-parser-3.0.6.tgz#292e165e34cacbc936c3c92719ef326d4aeb4e90" + integrity sha512-Vo1ab+QXPzZ4tCa8SwIHJFaSzy4R6SHf7BY79rFBDf0idraZWAkYrDjDj8uWaSm3S2TK+hJ7/t1CEmZ7jXw+pg== + +eventsource@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/eventsource/-/eventsource-3.0.7.tgz#1157622e2f5377bb6aef2114372728ba0c156989" + integrity sha512-CRT1WTyuQoD771GW56XEZFQ/ZoSfWid1alKGDYMmkt2yl8UXrVR4pspqWNEcqKvVIzg6PAltWjxcSSPrboA4iA== + dependencies: + eventsource-parser "^3.0.1" + exec-sh@^0.3.2: version "0.3.6" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.6.tgz#ff264f9e325519a60cb5e273692943483cca63bc" @@ -3703,6 +4162,11 @@ expect@^26.6.2: jest-message-util "^26.6.2" jest-regex-util "^26.0.0" +express-rate-limit@^7.5.0: + version "7.5.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-7.5.1.tgz#8c3a42f69209a3a1c969890070ece9e20a879dec" + integrity sha512-7iN8iPMDzOMHPUYllBEsQdWVB6fPDMPqwjBaFrgr4Jgr/+okjvzAy+UHlYYL/Vs0OsOrMkwS6PJDkFlJwoxUnw== + express@^4.18.2: version "4.21.2" resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" @@ -3740,6 +4204,39 @@ express@^4.18.2: utils-merge "1.0.1" vary "~1.1.2" +express@^5.0.1, express@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/express/-/express-5.1.0.tgz#d31beaf715a0016f0d53f47d3b4d7acf28c75cc9" + integrity sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA== + dependencies: + accepts "^2.0.0" + body-parser "^2.2.0" + content-disposition "^1.0.0" + content-type "^1.0.5" + cookie "^0.7.1" + cookie-signature "^1.2.1" + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + finalhandler "^2.1.0" + fresh "^2.0.0" + http-errors "^2.0.0" + merge-descriptors "^2.0.0" + mime-types "^3.0.0" + on-finished "^2.4.1" + once "^1.4.0" + parseurl "^1.3.3" + proxy-addr "^2.0.7" + qs "^6.14.0" + range-parser "^1.2.1" + router "^2.2.0" + send "^1.1.0" + serve-static "^2.2.0" + statuses "^2.0.1" + type-is "^2.0.1" + vary "^1.1.2" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -3778,7 +4275,7 @@ extglob@^2.0.4: snapdragon "^0.8.1" to-regex "^3.0.1" -fast-deep-equal@^3.1.3: +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== @@ -3805,12 +4302,23 @@ fast-glob@^3.2.9: merge2 "^1.3.0" micromatch "^4.0.4" +fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== -fast-levenshtein@~2.0.6: +fast-levenshtein@^2.0.6, fast-levenshtein@~2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= @@ -3820,6 +4328,11 @@ fast-safe-stringify@^2.1.1: resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== +fast-uri@^3.0.1: + version "3.1.0" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.1.0.tgz#66eecff6c764c0df9b762e62ca7edcfb53b4edfa" + integrity sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA== + fastq@^1.6.0: version "1.11.0" resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.11.0.tgz#bb9fb955a07130a918eb63c1f5161cc32a5d0858" @@ -3841,6 +4354,13 @@ figures@3.2.0, figures@^3.0.0: dependencies: escape-string-regexp "^1.0.5" +file-entry-cache@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-8.0.0.tgz#7787bddcf1131bffb92636c69457bbc0edd6d81f" + integrity sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ== + dependencies: + flat-cache "^4.0.0" + filelist@^1.0.1: version "1.0.4" resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" @@ -3885,6 +4405,18 @@ finalhandler@1.3.1: statuses "2.0.1" unpipe "~1.0.0" +finalhandler@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-2.1.0.tgz#72306373aa89d05a8242ed569ed86a1bff7c561f" + integrity sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q== + dependencies: + debug "^4.4.0" + encodeurl "^2.0.0" + escape-html "^1.0.3" + on-finished "^2.4.1" + parseurl "^1.3.3" + statuses "^2.0.1" + find-cache-dir@^3.3.2: version "3.3.2" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz#b30c5b6eff0730731aea9bbd9dbecbd80256d64b" @@ -3924,11 +4456,24 @@ find-versions@^4.0.0: dependencies: semver-regex "^3.1.2" +flat-cache@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-4.0.1.tgz#0ece39fcb14ee012f4b0410bd33dd9c1f011127c" + integrity sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.4" + flat@^5.0.2: version "5.0.2" resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + follow-redirects@^1.15.6: version "1.15.6" resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" @@ -3986,6 +4531,11 @@ fresh@0.5.2: resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== +fresh@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-2.0.0.tgz#8dd7df6a1b3a1b3a5cf186c05a5dd267622635a4" + integrity sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A== + fs-constants@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" @@ -4242,6 +4792,13 @@ glob-parent@5.1.2, glob-parent@^5.1.2, glob-parent@~5.1.2: dependencies: is-glob "^4.0.1" +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + glob@7.1.4: version "7.1.4" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255" @@ -4301,6 +4858,16 @@ globals@^11.1.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== +globals@^14.0.0: + version "14.0.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-14.0.0.tgz#898d7413c29babcf6bafe56fcadded858ada724e" + integrity sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ== + +globals@^16.0.0: + version "16.5.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-16.5.0.tgz#ccf1594a437b97653b2be13ed4d8f5c9f850cac1" + integrity sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ== + globby@11.1.0, globby@^11.1.0: version "11.1.0" resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" @@ -4333,6 +4900,11 @@ graceful-fs@^4.2.4, graceful-fs@^4.2.6, graceful-fs@^4.2.9: resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -4484,7 +5056,7 @@ http-cache-semantics@^4.1.0: resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== -http-errors@2.0.0: +http-errors@2.0.0, http-errors@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== @@ -4577,13 +5149,20 @@ iconv-lite@0.4.24, iconv-lite@^0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@0.6.3: +iconv-lite@0.6.3, iconv-lite@^0.6.3: version "0.6.3" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +iconv-lite@0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.7.0.tgz#c50cd80e6746ca8115eb98743afa81aa0e147a3e" + integrity sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + iconv-lite@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.2.tgz#ce13d1875b0c3a674bd6a04b7f76b01b1b6ded01" @@ -4596,6 +5175,11 @@ ieee754@^1.1.13: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + ignore-walk@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" @@ -4608,6 +5192,11 @@ ignore@^5.0.4, ignore@^5.2.0: resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324" integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ== +ignore@^7.0.0: + version "7.0.5" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-7.0.5.tgz#4cb5f6cd7d4c7ab0365738c7aea888baa6d7efd9" + integrity sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg== + import-fresh@^3.0.0, import-fresh@^3.2.1, import-fresh@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" @@ -4820,6 +5409,13 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-glob@^4.0.0, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + is-glob@^4.0.1, is-glob@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" @@ -4876,6 +5472,11 @@ is-potential-custom-element-name@^1.0.1: resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== +is-promise@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-4.0.0.tgz#42ff9f84206c1991d26debf520dd5c01042dd2f3" + integrity sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ== + is-ssh@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.4.0.tgz#4f8220601d2839d8fa624b3106f8e8884f01b8b2" @@ -5578,6 +6179,11 @@ jsesc@^3.0.2: resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + json-parse-better-errors@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" @@ -5588,11 +6194,21 @@ json-parse-even-better-errors@^2.3.0, json-parse-even-better-errors@^2.3.1: resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + json-schema-traverse@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + json-stringify-nice@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz#2c937962b80181d3f317dd39aa323e14f5a60a67" @@ -5637,6 +6253,13 @@ just-diff@^5.0.1: resolved "https://registry.yarnpkg.com/just-diff/-/just-diff-5.2.0.tgz#60dca55891cf24cd4a094e33504660692348a241" integrity sha512-6ufhP9SHjb7jibNFrNxyFZ6od3g+An6Ai9mhGRvcYe8UJlH0prseN64M+6ZBBUoKYHZsitDP42gAJ8+eVWr3lw== +keyv@^4.5.4: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -5755,6 +6378,14 @@ leven@^3.1.0: resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" @@ -6075,6 +6706,11 @@ media-typer@0.3.0: resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== +media-typer@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-1.1.0.tgz#6ab74b8f2d3320f2064b2a87a38e7931ff3a5561" + integrity sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw== + meow@^8.0.0, meow@^8.1.2: version "8.1.2" resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" @@ -6097,6 +6733,11 @@ merge-descriptors@1.0.3: resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== +merge-descriptors@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-2.0.0.tgz#ea922f660635a2249ee565e0449f951e6b603808" + integrity sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g== + merge-stream@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" @@ -6131,7 +6772,7 @@ micromatch@^3.1.4: snapdragon "^0.8.1" to-regex "^3.0.2" -micromatch@^4.0.2: +micromatch@^4.0.2, micromatch@^4.0.8: version "4.0.8" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== @@ -6152,6 +6793,11 @@ mime-db@1.52.0: resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== +mime-db@^1.54.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: version "2.1.35" resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" @@ -6159,6 +6805,13 @@ mime-types@^2.1.12, mime-types@^2.1.35, mime-types@~2.1.24, mime-types@~2.1.34: dependencies: mime-db "1.52.0" +mime-types@^3.0.0, mime-types@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-3.0.1.tgz#b1d94d6997a9b32fd69ebaed0db73de8acb519ce" + integrity sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA== + dependencies: + mime-db "^1.54.0" + mime@1.6.0: version "1.6.0" resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" @@ -6186,7 +6839,7 @@ minimatch@3.0.5: dependencies: brace-expansion "^1.1.7" -minimatch@^3.0.4, minimatch@^3.1.1: +minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== @@ -6200,6 +6853,13 @@ minimatch@^5.0.1: dependencies: brace-expansion "^2.0.1" +minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + minimist-options@4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" @@ -6397,6 +7057,11 @@ negotiator@0.6.3, negotiator@^0.6.3: resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== +negotiator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-1.0.0.tgz#b6c91bb47172d69f93cfd7c357bbb529019b5f6a" + integrity sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg== + neo-async@^2.6.0: version "2.6.2" resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" @@ -6469,6 +7134,22 @@ node-releases@^2.0.18: resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== +nodemon@^3.1.9: + version "3.1.11" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-3.1.11.tgz#04a54d1e794fbec9d8f6ffd8bf1ba9ea93a756ed" + integrity sha512-is96t8F/1//UHAjNPHpbsNY46ELPpftGUoSVNXwUfMk/qdjSylYrWSu1XavVTBOn526kFiOR733ATgNBCQyH0g== + dependencies: + chokidar "^3.5.2" + debug "^4" + ignore-by-default "^1.0.1" + minimatch "^3.1.2" + pstree.remy "^1.1.8" + semver "^7.5.3" + simple-update-notifier "^2.0.0" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.5" + nopt@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/nopt/-/nopt-5.0.0.tgz#530942bb58a512fccafe53fe210f13a25355dc88" @@ -6721,6 +7402,11 @@ nx@15.8.7, "nx@>=15.5.2 < 16": "@nrwl/nx-win32-arm64-msvc" "15.8.7" "@nrwl/nx-win32-x64-msvc" "15.8.7" +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + object-copy@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" @@ -6754,7 +7440,7 @@ object.pick@^1.3.0: dependencies: isobject "^3.0.1" -on-finished@2.4.1: +on-finished@2.4.1, on-finished@^2.4.1: version "2.4.1" resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== @@ -6801,6 +7487,18 @@ optionator@^0.8.1: type-check "~0.3.2" word-wrap "~1.2.3" +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + ora@^5.4.1: version "5.4.1" resolved "https://registry.yarnpkg.com/ora/-/ora-5.4.1.tgz#1b2678426af4ac4a509008e5e4ac9e9959db9e18" @@ -7034,7 +7732,7 @@ parse5@6.0.1: resolved "https://registry.yarnpkg.com/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" integrity sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw== -parseurl@~1.3.3: +parseurl@^1.3.3, parseurl@~1.3.3: version "1.3.3" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== @@ -7093,6 +7791,11 @@ path-to-regexp@0.1.12: resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== +path-to-regexp@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-8.3.0.tgz#aa818a6981f99321003a08987d3cec9c3474cd1f" + integrity sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA== + path-type@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" @@ -7155,6 +7858,11 @@ pirates@^4.0.1: resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== +pkce-challenge@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pkce-challenge/-/pkce-challenge-5.0.0.tgz#c3a405cb49e272094a38e890a2b51da0228c4d97" + integrity sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ== + "pkg-dir@< 6 >= 5", pkg-dir@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-5.0.0.tgz#a02d6aebe6ba133a928f74aec20bafdfe6b8e760" @@ -7181,6 +7889,11 @@ posix-character-classes@^0.1.0: resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -7278,7 +7991,7 @@ protocols@^2.0.0, protocols@^2.0.1: resolved "https://registry.yarnpkg.com/protocols/-/protocols-2.0.1.tgz#8f155da3fc0f32644e83c5782c8e8212ccf70a86" integrity sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q== -proxy-addr@~2.0.7: +proxy-addr@^2.0.7, proxy-addr@~2.0.7: version "2.0.7" resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== @@ -7296,6 +8009,11 @@ psl@^1.1.33: resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== +pstree.remy@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + pump@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" @@ -7326,7 +8044,7 @@ qs@6.13.0: dependencies: side-channel "^1.0.6" -qs@^6.11.2: +qs@^6.11.2, qs@^6.14.0: version "6.14.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== @@ -7355,7 +8073,7 @@ randombytes@^2.1.0: dependencies: safe-buffer "^5.1.0" -range-parser@~1.2.1: +range-parser@^1.2.1, range-parser@~1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== @@ -7370,6 +8088,16 @@ raw-body@2.5.2: iconv-lite "0.4.24" unpipe "1.0.0" +raw-body@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-3.0.1.tgz#ced5cd79a77bbb0496d707f2a0f9e1ae3aecdcb1" + integrity sha512-9G8cA+tuMS75+6G/TzW8OtLzmBDMo8p1JRxN5AZ+LAp8uxGA8V8GZm4GQ4/N5QNQEnLmg6SS7wyuSmbKepiKqA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.7.0" + unpipe "1.0.0" + react-is@^16.8.4: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" @@ -7685,6 +8413,17 @@ rollup@^3.29.5: optionalDependencies: fsevents "~2.3.2" +router@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/router/-/router-2.2.0.tgz#019be620b711c87641167cc79b99090f00b146ef" + integrity sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ== + dependencies: + debug "^4.4.0" + depd "^2.0.0" + is-promise "^4.0.0" + parseurl "^1.3.3" + path-to-regexp "^8.0.0" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -7804,6 +8543,11 @@ semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== +semver@^7.5.3, semver@^7.6.0: + version "7.7.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.3.tgz#4b5f4143d007633a8dc671cd0a6ef9147b8bb946" + integrity sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q== + send@0.19.0: version "0.19.0" resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" @@ -7823,6 +8567,23 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" +send@^1.1.0, send@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/send/-/send-1.2.0.tgz#32a7554fb777b831dfa828370f773a3808d37212" + integrity sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw== + dependencies: + debug "^4.3.5" + encodeurl "^2.0.0" + escape-html "^1.0.3" + etag "^1.8.1" + fresh "^2.0.0" + http-errors "^2.0.0" + mime-types "^3.0.1" + ms "^2.1.3" + on-finished "^2.4.1" + range-parser "^1.2.1" + statuses "^2.0.1" + serialize-javascript@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.1.tgz#b206efb27c3da0b0ab6b52f48d170b7996458e5c" @@ -7840,6 +8601,16 @@ serve-static@1.16.2: parseurl "~1.3.3" send "0.19.0" +serve-static@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-2.2.0.tgz#9c02564ee259bdd2251b82d659a2e7e1938d66f9" + integrity sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ== + dependencies: + encodeurl "^2.0.0" + escape-html "^1.0.3" + parseurl "^1.3.3" + send "^1.2.0" + set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" @@ -7946,6 +8717,13 @@ signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== +simple-update-notifier@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/simple-update-notifier/-/simple-update-notifier-2.0.0.tgz#d70b92bdab7d6d90dfd73931195a30b6e3d7cebb" + integrity sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w== + dependencies: + semver "^7.5.3" + sisteransi@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" @@ -8193,6 +8971,11 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== +statuses@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.2.tgz#8f75eecef765b5e1cfcdc080da59409ed424e382" + integrity sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw== + string-argv@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" @@ -8295,6 +9078,11 @@ strip-indent@^3.0.0: dependencies: min-indent "^1.0.0" +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + strong-log-transformer@2.1.0, strong-log-transformer@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz#0f5ed78d325e0421ac6f90f7f10e691d6ae3ae10" @@ -8327,7 +9115,7 @@ supertest@^7.1.4: methods "^1.1.2" superagent "^10.2.3" -supports-color@^5.3.0: +supports-color@^5.3.0, supports-color@^5.5.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== @@ -8527,6 +9315,11 @@ toidentifier@1.0.1: resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== +touch@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + tough-cookie@^4.0.0: version "4.1.3" resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.3.tgz#97b9adb0728b42280aa3d814b6b999b2ff0318bf" @@ -8566,6 +9359,11 @@ trim-newlines@^3.0.0: resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + ts-jest@^26.4.0: version "26.5.6" resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-26.5.6.tgz#c32e0746425274e1dfe333f43cd3c800e014ec35" @@ -8666,6 +9464,13 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + type-check@~0.3.2: version "0.3.2" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" @@ -8703,6 +9508,15 @@ type-fest@^0.8.1: resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== +type-is@^2.0.0, type-is@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-2.0.1.tgz#64f6cf03f92fce4015c2b224793f6bdd4b068c97" + integrity sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw== + dependencies: + content-type "^1.0.5" + media-typer "^1.1.0" + mime-types "^3.0.0" + type-is@~1.6.18: version "1.6.18" resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" @@ -8723,6 +9537,16 @@ typedarray@^0.0.6: resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= +typescript-eslint@^8.29.1: + version "8.47.0" + resolved "https://registry.yarnpkg.com/typescript-eslint/-/typescript-eslint-8.47.0.tgz#bb8fcf4f2c69ffcd5d088f7f30cd52936ff05cbc" + integrity sha512-Lwe8i2XQ3WoMjua/r1PHrCTpkubPYJCAfOurtn+mtTzqB6jNd+14n9UN1bJ4s3F49x9ixAm0FLflB/JzQ57M8Q== + dependencies: + "@typescript-eslint/eslint-plugin" "8.47.0" + "@typescript-eslint/parser" "8.47.0" + "@typescript-eslint/typescript-estree" "8.47.0" + "@typescript-eslint/utils" "8.47.0" + "typescript@^3 || ^4", typescript@^4.9.5: version "4.9.5" resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" @@ -8738,11 +9562,26 @@ typescript@^4.6.3: resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@^5.2.0, typescript@^5.8.2: + version "5.9.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.9.3.tgz#5b4f59e15310ab17a216f5d6cf53ee476ede670f" + integrity sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw== + uglify-js@^3.1.4: version "3.13.5" resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.13.5.tgz#5d71d6dbba64cf441f32929b1efce7365bb4f113" integrity sha512-xtB8yEqIkn7zmOyS2zUNBsYCBRhDkvlNxMMY2smuJ/qA8NCHeQvKCF3i9Z4k8FJH4+PJvZRtMrPynfZ75+CSZw== +undefsafe@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + union-value@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" @@ -8818,7 +9657,7 @@ update-browserslist-db@^1.1.1: escalade "^3.2.0" picocolors "^1.1.0" -uri-js@^4.4.1: +uri-js@^4.2.2, uri-js@^4.4.1: version "4.4.1" resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== @@ -8899,7 +9738,7 @@ validate-npm-package-name@^3.0.0: dependencies: builtins "^1.0.3" -vary@~1.1.2: +vary@^1, vary@^1.1.2, vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== @@ -9052,6 +9891,11 @@ wide-align@^1.1.5: dependencies: string-width "^1.0.2 || 2 || 3 || 4" +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + word-wrap@~1.2.3: version "1.2.4" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.4.tgz#cb4b50ec9aca570abd1f52f33cd45b6c61739a9f" @@ -9302,3 +10146,13 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod-to-json-schema@^3.24.1: + version "3.25.0" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.25.0.tgz#df504c957c4fb0feff467c74d03e6aab0b013e1c" + integrity sha512-HvWtU2UG41LALjajJrML6uQejQhNJx+JBO9IflpSja4R03iNWfKXrj6W2h7ljuLyc1nKS+9yDyL/9tD1U/yBnQ== + +zod@^3.23.8: + version "3.25.76" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.76.tgz#26841c3f6fd22a6a2760e7ccb719179768471e34" + integrity sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ== From 503b1ef044ba301b82ebabca58ab8a2156b7cf58 Mon Sep 17 00:00:00 2001 From: Muhammad Rafay Nadeem Date: Wed, 19 Nov 2025 14:09:36 +0500 Subject: [PATCH 9/9] fix(test): handle breaking change in mcp sdk --- packages/mcp-core/test/createErrorMessage.test.ts | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/packages/mcp-core/test/createErrorMessage.test.ts b/packages/mcp-core/test/createErrorMessage.test.ts index a2a38293..3ac6d8fa 100644 --- a/packages/mcp-core/test/createErrorMessage.test.ts +++ b/packages/mcp-core/test/createErrorMessage.test.ts @@ -13,6 +13,7 @@ test('createErrorMessage handles API error with statusCode, headers, and body', const result: CallToolResult = await createErrorMessage(error); assert.equal(result.isError, true); + assert.equal(result.content[0]?.type, 'text'); assert.equal( result.content[0]?.text, '{"statusCode":500,"headers":{"content-type":"application/json"},"body":"{\\"message\\":\\"Internal Server Error\\"}"}' @@ -40,12 +41,14 @@ test('createErrorMessage handles error wrapped in response object', async () => test('createErrorMessage handles native Error object', async () => { const error = new Error('Something went wrong'); const result: CallToolResult = await createErrorMessage(error); + assert.equal(result.content[0]?.type, 'text'); assert.equal(result.content[0]?.text, 'Tool Error: Something went wrong'); }); test('createErrorMessage handles unknown object error', async () => { const error = { foo: 'bar' }; const result: CallToolResult = await createErrorMessage(error); + assert.equal(result.content[0]?.type, 'text'); assert.equal(result.content[0]?.text, 'Tool Error: {"foo":"bar"}'); }); @@ -75,6 +78,7 @@ test('createErrorMessage handles error with ReadableStream body', async () => { const stream = Readable.from(['streamed data']); const error = { statusCode: 502, headers: { 'x-test': 'yes' }, body: stream }; const result: CallToolResult = await createErrorMessage(error); + assert.equal(result.content[0]?.type, 'text'); assert.equal( result.content[0]?.text, '{"statusCode":502,"headers":{"x-test":"yes"},"body":"streamed data"}' @@ -84,6 +88,7 @@ test('createErrorMessage handles error with ReadableStream body', async () => { test('createErrorMessage handles error with empty headers', async () => { const error = { statusCode: 418, headers: {}, body: 'I\'m a teapot' }; const result: CallToolResult = await createErrorMessage(error); + assert.equal(result.content[0]?.type, 'text'); assert.equal( result.content[0]?.text, `{"statusCode":418,"headers":{},"body":"I'm a teapot"}` @@ -93,6 +98,7 @@ test('createErrorMessage handles error with empty headers', async () => { test('createErrorMessage handles error with no headers defined', async () => { const error = { statusCode: 401, body: 'Unauthorized' }; const result: CallToolResult = await createErrorMessage(error); + assert.equal(result.content[0]?.type, 'text'); assert.equal( result.content[0]?.text, '{"statusCode":401,"headers":{},"body":"Unauthorized"}' @@ -102,6 +108,7 @@ test('createErrorMessage handles error with no headers defined', async () => { test('createErrorMessage handles response with status but no body', async () => { const error = { response: { statusCode: 503, headers: { foo: 'bar' } } }; const result: CallToolResult = await createErrorMessage(error); + assert.equal(result.content[0]?.type, 'text'); assert.equal( result.content[0]?.text, 'Tool Error: {"response":{"statusCode":503,"headers":{"foo":"bar"}}}'