diff --git a/packages/connectivity/package.json b/packages/connectivity/package.json index 4583baa655..9a55437b8b 100644 --- a/packages/connectivity/package.json +++ b/packages/connectivity/package.json @@ -47,7 +47,7 @@ }, "devDependencies": { "mock-fs": "^5.3.0", - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3" } } diff --git a/packages/http-client/package.json b/packages/http-client/package.json index 30a9553362..36a4c86320 100644 --- a/packages/http-client/package.json +++ b/packages/http-client/package.json @@ -44,7 +44,7 @@ }, "devDependencies": { "https-proxy-agent": "^7.0.5", - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3", "jsonwebtoken": "^9.0.2" } diff --git a/packages/odata-v2/package.json b/packages/odata-v2/package.json index b0b6365d10..380e474d79 100644 --- a/packages/odata-v2/package.json +++ b/packages/odata-v2/package.json @@ -48,7 +48,7 @@ "devDependencies": { "@sap-cloud-sdk/test-services-odata-v2": "^3.22.2", "@sap-cloud-sdk/resilience": "^3.22.2", - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3" } } diff --git a/packages/odata-v2/src/request-builder/a-debug.spec.ts b/packages/odata-v2/src/request-builder/a-debug.spec.ts new file mode 100644 index 0000000000..911cae6ae8 --- /dev/null +++ b/packages/odata-v2/src/request-builder/a-debug.spec.ts @@ -0,0 +1,202 @@ +import { + testFunctionImportGet, + testFunctionImportPost, + testService +} from '@sap-cloud-sdk/test-services-odata-v2/test-service'; +import nock from 'nock'; +import { + BatchChangeSet, + ODataCreateRequestConfig, + ODataRequest +} from '@sap-cloud-sdk/odata-common'; +import { createODataUri as createODataUriV2 } from '@sap-cloud-sdk/odata-v2/internal'; +import { + defaultDestination, + defaultHost, + defaultRequestHeaders +} from '../../../../test-resources/test/test-util'; +import { CreateRequestBuilder } from './create-request-builder'; +import type { DefaultDeSerializers } from '../de-serializers'; +const regexUuid = '\\w{8}-\\w{4}-\\w{4}-\\w{4}-\\w{12}'; +const responseBoundary = 'responseBoundary'; + +describe('debug', () => { + const { batch, testEntityApi, operations } = testService(); + + const getHeader = contentType => `Content-Type: ${contentType} +Content-Length: 3886 +content-transfer-encoding: binary + +HTTP/1.1 200 OK +Content-Type: application/json; charset=utf-8 +Content-Length: 3679 +sap-metadata-last-modified: Wed, 22 Dec 2021 22:29:24 GMT +cache-control: no-store, no-cache +dataserviceversion: 2.0`; + + const getAllResponse = `--${responseBoundary} +${getHeader('application/http')} + +{"d":{"results":[{"StringProperty":"4711"}]}} +--${responseBoundary}-- +`; + + const functionImportResponse = `--${responseBoundary} +${getHeader('application/http')} + +{"d": {"TestFunctionImportGET":"MyText"}} + +--${responseBoundary}-- +`; + + const postResponse = `--${responseBoundary} +${getHeader('multipart/mixed; boundary=batchId')} + +--batchId +--partId +HTTP/1.1 200 OK + +{"d": {"TestFunctionImportPOST":true}} +--batchId + +--${responseBoundary}-- +`; + + const baseUrl = 'https://some.sdk.test.url.com'; + + it('batch works with function imports', async () => { + const body = [ + `--batch_${regexUuid}`, + 'Content-Type: application/http', + 'Content-Transfer-Encoding: binary', + '', + 'GET /sap/opu/odata/sap/API_TEST_SRV/TestFunctionImportGET HTTP/1.1', + 'Content-Type: application/json', + 'Accept: application/json', + '', + '', + `--batch_${regexUuid}--`, + '' + ].join('\r\n'); + + nock(baseUrl) + .post('/sap/opu/odata/sap/API_TEST_SRV/$batch', new RegExp(body)) + .reply(202, functionImportResponse, { + 'content-type': `multipart/mixed; boundary=${responseBoundary}` + }); + const response = await batch( + operations.testFunctionImportGet({} as any) + ).execute({ url: baseUrl }); + expect(response[0].isReadResponse()).toBeTruthy(); + if (response[0].isReadResponse()) { + const casted = testFunctionImportGet({} as any).responseTransformer( + response[0].body + ); + expect(casted).toEqual('MyText'); + } + }); + + it('batch works with POST function imports', async () => { + const body = [ + `--batch_${regexUuid}`, + `Content-Type: multipart/mixed; boundary=changeset_${regexUuid}`, + '', + `--changeset_${regexUuid}`, + 'Content-Type: application/http', + 'Content-Transfer-Encoding: binary', + `Content-Id: ${regexUuid}`, + '', + "POST /sap/opu/odata/sap/API_TEST_SRV/TestFunctionImportPOST\\?SimpleParam='someValue' HTTP/1.1", + 'Content-Type: application/json', + 'Accept: application/json', + '', + '', + '', + `--changeset_${regexUuid}--`, + `--batch_${regexUuid}--`, + '' + ].join('\r\n'); + nock(baseUrl) + .post('/sap/opu/odata/sap/API_TEST_SRV/$batch', new RegExp(body)) + .reply(202, postResponse, { + 'content-type': `multipart/mixed; boundary=${responseBoundary}` + }); + + const requestBuilder = testFunctionImportPost({ + simpleParam: 'someValue' + }); + const changeSet = new BatchChangeSet([ + requestBuilder + ]); + const response = await batch(changeSet).execute({ url: baseUrl }); + expect(response[0].isWriteResponses()).toBeTruthy(); + if (response[0].isWriteResponses()) { + const casted = testFunctionImportPost({} as any).responseTransformer( + response[0].responses[0].body + ); + expect(casted).toBe(true); + } + }); + + it('executes a getAll request', async () => { + nock(baseUrl) + .post('/sap/opu/odata/sap/API_TEST_SRV/$batch') + .reply(202, getAllResponse, { + 'content-type': `multipart/mixed; boundary=${responseBoundary}` + }); + const response = await batch( + testEntityApi.requestBuilder().getAll() + ).execute({ url: baseUrl }); + expect(response[0].isReadResponse()).toBeTruthy(); + if (response[0].isReadResponse()) { + const casted = response[0].as(testEntityApi); + expect(casted[0].stringProperty).toEqual('4711'); + } + }); + + it('create', async () => { + const requestConfig = new ODataCreateRequestConfig( + testEntityApi, + createODataUriV2(testEntityApi.deSerializers) + ); + + const request = new ODataRequest(requestConfig, defaultDestination); + + nock(defaultHost).head(`/${request.relativeServiceUrl()}`).reply(200); + + nock(defaultHost) + .post(`/${request.relativeServiceUrl()}`, () => true) + // .query({}) + // .delay(0) + .reply(500, { d: undefined }); + + const someEntity = testEntityApi.entityBuilder().stringProperty('').build(); + + const createRequest = new CreateRequestBuilder( + testEntityApi, + someEntity + ).execute(defaultDestination); + + await expect(createRequest).rejects.toThrowErrorMatchingInlineSnapshot( + '"Create request failed!"' + ); + }); +}); + +function getRequestHeaders( + method: string, + additionalHeaders?: Record, + headers?: Record +) { + if (headers) { + return { reqheaders: headers }; + } + + if (additionalHeaders) { + const initialHeaders = + method === 'get' + ? defaultRequestHeaders + : { ...defaultRequestHeaders, 'x-csrf-token': 'mocked-x-csrf-token' }; + return { reqheaders: { ...initialHeaders, ...additionalHeaders } }; + } +} diff --git a/packages/odata-v2/src/request-builder/batch-request-builder.spec.ts b/packages/odata-v2/src/request-builder/batch-request-builder.spec.ts index 09f486fd9c..1814753fa1 100644 --- a/packages/odata-v2/src/request-builder/batch-request-builder.spec.ts +++ b/packages/odata-v2/src/request-builder/batch-request-builder.spec.ts @@ -76,13 +76,12 @@ HTTP/1.1 200 OK const response = await batch( operations.testFunctionImportGet({} as any) ).execute({ url: baseUrl }); + expect(response[0].isReadResponse()).toBeTruthy(); if (response[0].isReadResponse()) { const casted = testFunctionImportGet({} as any).responseTransformer( response[0].body ); expect(casted).toEqual('MyText'); - } else { - throw new Error('Should be readResponse'); } }); @@ -119,13 +118,12 @@ HTTP/1.1 200 OK requestBuilder ]); const response = await batch(changeSet).execute({ url: baseUrl }); + expect(response[0].isWriteResponses()).toBeTruthy(); if (response[0].isWriteResponses()) { const casted = testFunctionImportPost({} as any).responseTransformer( response[0].responses[0].body ); expect(casted).toBe(true); - } else { - throw new Error('Should be writeResponse'); } }); @@ -138,11 +136,10 @@ HTTP/1.1 200 OK const response = await batch( testEntityApi.requestBuilder().getAll() ).execute({ url: baseUrl }); + expect(response[0].isReadResponse()).toBeTruthy(); if (response[0].isReadResponse()) { const casted = response[0].as(testEntityApi); expect(casted[0].stringProperty).toEqual('4711'); - } else { - throw new Error('Should be readResponse'); } }); }); diff --git a/packages/odata-v2/src/request-builder/create-request-builder.spec.ts b/packages/odata-v2/src/request-builder/create-request-builder.spec.ts index 24105b786a..d38b2a4a7a 100644 --- a/packages/odata-v2/src/request-builder/create-request-builder.spec.ts +++ b/packages/odata-v2/src/request-builder/create-request-builder.spec.ts @@ -260,7 +260,6 @@ describe('CreateRequestBuilder', () => { it('throws an error when request execution fails', async () => { mockCreateRequest( { - body: () => true, statusCode: 500 }, testEntityApi diff --git a/packages/odata-v2/src/request-builder/delete-request-builder.spec.ts b/packages/odata-v2/src/request-builder/delete-request-builder.spec.ts index 35afe9ea50..562727dd16 100644 --- a/packages/odata-v2/src/request-builder/delete-request-builder.spec.ts +++ b/packages/odata-v2/src/request-builder/delete-request-builder.spec.ts @@ -50,12 +50,11 @@ describe('DeleteRequestBuilder', () => { testEntityApi ); - const deleteRequest = new DeleteRequestBuilder( - testEntityApi, - entity - ).execute(defaultDestination); + const deleteRequest = new DeleteRequestBuilder(testEntityApi, entity); - await expect(deleteRequest).resolves.toBe(undefined); + await expect(deleteRequest.execute(defaultDestination)).resolves.toBe( + undefined + ); }); it('delete request with version identifier on the request should resolve', async () => { diff --git a/packages/odata-v2/src/request-builder/get-by-key-request-builder.spec.ts b/packages/odata-v2/src/request-builder/get-by-key-request-builder.spec.ts index caab61615c..4e6b2ac7ea 100644 --- a/packages/odata-v2/src/request-builder/get-by-key-request-builder.spec.ts +++ b/packages/odata-v2/src/request-builder/get-by-key-request-builder.spec.ts @@ -70,9 +70,9 @@ describe('GetByKeyRequestBuilder', () => { expect(actual.versionIdentifier).toBeUndefined(); }); - it('ETag should be pulled from __metadata', async () => { + it('eTag should be pulled from __metadata', async () => { const entityData = createOriginalTestEntityData1(); - const versionIdentifier = 'etagInMetadata'; + const versionIdentifier = 'eTagInMetadata'; entityData['__metadata'] = { etag: versionIdentifier }; const expected = createTestEntity(entityData); @@ -95,10 +95,10 @@ describe('GetByKeyRequestBuilder', () => { expect(actual).toEqual(expected); }); - it('ETag should be pulled from response header when __metadata has no ETag property', async () => { + it('eTag should be pulled from response header when __metadata has no eTag property', async () => { const entityData = createOriginalTestEntityData1(); const expected = createTestEntity(entityData); - const versionIdentifier = 'etagInHeader'; + const versionIdentifier = 'eTagInHeader'; expected.setVersionIdentifier(versionIdentifier); mockGetRequest( @@ -108,7 +108,7 @@ describe('GetByKeyRequestBuilder', () => { expected.keyPropertyString ), responseBody: { d: entityData }, - responseHeaders: { Etag: versionIdentifier } + responseHeaders: { etag: versionIdentifier } }, testEntityApi ); diff --git a/packages/odata-v2/src/request-builder/update-request-builder.spec.ts b/packages/odata-v2/src/request-builder/update-request-builder.spec.ts index a1ad50d6bd..c7cc9ce6f6 100644 --- a/packages/odata-v2/src/request-builder/update-request-builder.spec.ts +++ b/packages/odata-v2/src/request-builder/update-request-builder.spec.ts @@ -476,21 +476,19 @@ describe('UpdateRequestBuilder', () => { it('returns request and raw response when sending non-key properties', async () => { const entity = createTestEntity(); entity.booleanProperty = false; - const requestBody = { + const body = { Int32Property: entity.int32Property, BooleanProperty: false, StringProperty: null }; - const response = { d: requestBody }; mockUpdateRequest( { - body: requestBody, + body, path: testEntityResourcePath( entity.keyPropertyGuid, entity.keyPropertyString - ), - responseBody: response + ) }, testEntityApi ); @@ -499,8 +497,8 @@ describe('UpdateRequestBuilder', () => { testEntityApi, entity ).executeRaw(defaultDestination); - expect(actual!.data).toEqual(response); - expect(actual!.request.method).toEqual('PATCH'); + expect(actual?.status).toEqual(204); + expect(actual?.request.method).toEqual('PATCH'); }); }); }); diff --git a/packages/odata-v4/package.json b/packages/odata-v4/package.json index 00f2e40242..f3b0418f24 100644 --- a/packages/odata-v4/package.json +++ b/packages/odata-v4/package.json @@ -47,7 +47,7 @@ }, "devDependencies": { "@sap-cloud-sdk/test-services-odata-v4": "^3.22.2", - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3" } } diff --git a/packages/odata-v4/src/request-builder/get-by-key-request-builder.spec.ts b/packages/odata-v4/src/request-builder/get-by-key-request-builder.spec.ts index 925c72323d..8c98b6973f 100644 --- a/packages/odata-v4/src/request-builder/get-by-key-request-builder.spec.ts +++ b/packages/odata-v4/src/request-builder/get-by-key-request-builder.spec.ts @@ -95,9 +95,9 @@ describe('GetByKeyRequestBuilder', () => { expect(actual[0].somethingTheSdkDoesNotSupport).toBe('SomeValue'); }); - it('ETag should be pulled from @odata.etag', async () => { + it('eTag should be pulled from @odata.etag', async () => { const entityData = createOriginalTestEntityDataV4_1(); - const versionIdentifier = 'etagInMetadata'; + const versionIdentifier = 'eTagInMetadata'; entityData['@odata.etag'] = versionIdentifier; const expected = createTestEntity(entityData); const response = { @@ -129,10 +129,10 @@ describe('GetByKeyRequestBuilder', () => { expect(actual).toEqual(expected); }); - it('ETag should be pulled from response header when json payload has no @odata.etag property', async () => { + it('eTag should be pulled from response header when json payload has no @odata.etag property', async () => { const entityData = createOriginalTestEntityDataV4_1(); const expected = createTestEntity(entityData); - const versionIdentifier = 'etagInHeader'; + const versionIdentifier = 'eTagInHeader'; expected.setVersionIdentifier(versionIdentifier); const response = { KeyPropertyGuid: entityData.KeyPropertyGuid, @@ -150,7 +150,7 @@ describe('GetByKeyRequestBuilder', () => { expected.keyDateProperty ), responseBody: response, - responseHeaders: { Etag: versionIdentifier } + responseHeaders: { etag: versionIdentifier } }, testEntityApi ); diff --git a/packages/odata-v4/src/request-builder/operation-request-builder.spec.ts b/packages/odata-v4/src/request-builder/operation-request-builder.spec.ts index 564b5fd55b..f544caf4b5 100644 --- a/packages/odata-v4/src/request-builder/operation-request-builder.spec.ts +++ b/packages/odata-v4/src/request-builder/operation-request-builder.spec.ts @@ -107,12 +107,12 @@ describe('operation request builder', () => { nock(host) .post(`${basePath}/TestActionImportNoParameterNoReturnType`) - .reply(204, {}); + .reply(204); const actual = await testActionImportNoParameterNoReturnType( {} ).executeRaw(destination); - expect(actual.data).toEqual({}); + expect(actual.status).toEqual(204); expect(actual.request.method).toBe('POST'); }); }); diff --git a/packages/openapi/package.json b/packages/openapi/package.json index a808d3a0e1..295151a46b 100644 --- a/packages/openapi/package.json +++ b/packages/openapi/package.json @@ -44,7 +44,7 @@ "axios": "^1.7.7" }, "devDependencies": { - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3" } } diff --git a/packages/openapi/src/openapi-request-builder.spec.ts b/packages/openapi/src/openapi-request-builder.spec.ts index 36011b0c3d..3c56841f4c 100644 --- a/packages/openapi/src/openapi-request-builder.spec.ts +++ b/packages/openapi/src/openapi-request-builder.spec.ts @@ -210,11 +210,7 @@ describe('openapi-request-builder', () => { .get(/.*/) .reply(200, 'iss token used on the way') ]; - const requestBuilder = new OpenApiRequestBuilder('get', '/test', { - body: { - limit: 100 - } - }); + const requestBuilder = new OpenApiRequestBuilder('get', '/test'); const response = await requestBuilder.executeRaw({ destinationName: 'ERNIE-UND-CERT', iss: onlyIssuerXsuaaUrl @@ -227,10 +223,7 @@ describe('openapi-request-builder', () => { middleware: [], url: '/test', headers: { requestConfig: {} }, - params: { requestConfig: {} }, - data: { - limit: 100 - } + params: { requestConfig: {} } }, { fetchCsrfToken: false } ); diff --git a/packages/resilience/package.json b/packages/resilience/package.json index 1abcb2a8dd..a4321e6312 100644 --- a/packages/resilience/package.json +++ b/packages/resilience/package.json @@ -46,7 +46,7 @@ "devDependencies": { "@types/async-retry": "^1.4.9", "@types/opossum": "^8.1.8", - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3" } } diff --git a/packages/util/package.json b/packages/util/package.json index 8f7d5d5457..ddf46e11f1 100644 --- a/packages/util/package.json +++ b/packages/util/package.json @@ -42,7 +42,7 @@ "winston-transport": "^4.8.0" }, "devDependencies": { - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "typescript": "~5.6.3", "mock-fs": "^5.3.0" } diff --git a/test-packages/integration-tests/package.json b/test-packages/integration-tests/package.json index 2ea253e9cb..3a4fa26c1b 100644 --- a/test-packages/integration-tests/package.json +++ b/test-packages/integration-tests/package.json @@ -35,7 +35,7 @@ "execa": "^5.0.0", "jsonwebtoken": "^9.0.2", "mock-fs": "^5.3.0", - "nock": "^14.0.0-beta.6", + "nock": "^14.0.0-beta.15", "winston": "^3.15.0" } } diff --git a/test-resources/test/test-util/request-mocker.ts b/test-resources/test/test-util/request-mocker.ts index e3383b124b..92159bcf5d 100644 --- a/test-resources/test/test-util/request-mocker.ts +++ b/test-resources/test/test-util/request-mocker.ts @@ -1,8 +1,5 @@ import nock from 'nock'; import { - EntityApi, - EntityBase, - GetAllRequestBuilderBase, ODataCreateRequestConfig, ODataDeleteRequestConfig, ODataGetAllRequestConfig, @@ -11,11 +8,16 @@ import { } from '@sap-cloud-sdk/odata-common/internal'; import { createODataUri as createODataUriV2 } from '@sap-cloud-sdk/odata-v2/internal'; import { createODataUri as createODataUriV4 } from '@sap-cloud-sdk/odata-v4/internal'; -import { +import { basicHeader } from '@sap-cloud-sdk/connectivity/internal'; +import type { HttpDestination, - Destination, - basicHeader + Destination } from '@sap-cloud-sdk/connectivity/internal'; +import type { + EntityApi, + EntityBase, + GetAllRequestBuilderBase +} from '@sap-cloud-sdk/odata-common/internal'; const defaultCsrfToken = 'mocked-x-csrf-token'; @@ -66,7 +68,16 @@ interface MockRequestParams { responseBody?: Record; responseHeaders?: Record; query?: Record; - method?: string; + method?: + | 'get' + | 'post' + | 'put' + | 'head' + | 'patch' + | 'merge' + | 'delete' + | 'options'; + headers?: Record; delay?: number; } @@ -82,7 +93,7 @@ export function mockCreateRequest>( return mockRequest(requestConfig, { ...params, statusCode: params.statusCode || 200, - method: params.method || 'post', + method: params.method || ('post' as const), responseBody: { d: params.responseBody || params.body } }); } diff --git a/test-resources/test/test-util/xsuaa-service-mocks.ts b/test-resources/test/test-util/xsuaa-service-mocks.ts index 7c6d5a118c..8066ce4141 100644 --- a/test-resources/test/test-util/xsuaa-service-mocks.ts +++ b/test-resources/test/test-util/xsuaa-service-mocks.ts @@ -1,3 +1,4 @@ +import https from 'node:https'; import nock from 'nock'; import { basicHeader } from '@sap-cloud-sdk/connectivity/internal'; import type { ServiceCredentials } from '@sap-cloud-sdk/connectivity'; @@ -30,6 +31,7 @@ export function mockClientCredentialsGrantWithCertCall( serviceCredentials: ServiceCredentials, zoneId?: string ) { + jest.spyOn(https, 'request'); return nock(uri, { reqheaders: xsuaaRequestHeaders(zoneId ? { zid: zoneId } : {}) }) @@ -38,9 +40,18 @@ export function mockClientCredentialsGrantWithCertCall( client_id: serviceCredentials.clientid }) .reply(responseCode, function () { - const agentOptions = (this.req as any).options.agent.options; - expect(agentOptions.cert).toEqual(serviceCredentials.certificate); - expect(agentOptions.key).toEqual(serviceCredentials.key); + expect(https.request).toHaveBeenCalledWith( + expect.anything(), + expect.objectContaining({ + agent: expect.objectContaining({ + options: expect.objectContaining({ + key: serviceCredentials.key, + cert: serviceCredentials.certificate + }) + }) + }), + expect.anything() + ); return response; }); } diff --git a/yarn.lock b/yarn.lock index 7f5f790ad5..4b741a2723 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1152,6 +1152,18 @@ jju "^1.4.0" js-yaml "^4.1.0" +"@mswjs/interceptors@^0.36.4": + version "0.36.4" + resolved "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.36.4.tgz#444d379ed917fa23640e65ddd8720c2cbf8725cd" + integrity sha512-ktzj7bra4HatOGqXw/PXyresXxFtnZa570rm4olAyf9HbvNdEWRkQl81ykmJK0nCHxNndmh2zQ84TBYKFDM+sg== + dependencies: + "@open-draft/deferred-promise" "^2.2.0" + "@open-draft/logger" "^0.3.0" + "@open-draft/until" "^2.0.0" + is-node-process "^1.2.0" + outvariant "^1.4.3" + strict-event-emitter "^0.5.1" + "@nodelib/fs.scandir@2.1.5": version "2.1.5" resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -1286,6 +1298,24 @@ dependencies: "@octokit/openapi-types" "^22.1.0" +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.npmjs.org/@open-draft/deferred-promise/-/deferred-promise-2.2.0.tgz#4a822d10f6f0e316be4d67b4d4f8c9a124b073bd" + integrity sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA== + +"@open-draft/logger@^0.3.0": + version "0.3.0" + resolved "https://registry.npmjs.org/@open-draft/logger/-/logger-0.3.0.tgz#2b3ab1242b360aa0adb28b85f5d7da1c133a0954" + integrity sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ== + dependencies: + is-node-process "^1.2.0" + outvariant "^1.4.0" + +"@open-draft/until@^2.0.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz#a77ea742fab25775145434eb1d2328cf5013ac33" @@ -5452,6 +5482,11 @@ is-negative-zero@^2.0.3: resolved "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== +is-node-process@^1.2.0: + version "1.2.0" + resolved "https://registry.npmjs.org/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== + is-number-object@^1.0.4: version "1.0.7" resolved "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" @@ -6904,11 +6939,12 @@ neo-async@^2.6.0: resolved "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz#8b01a07644065d536383835823bc52004ebac5e7" integrity sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg== -nock@^14.0.0-beta.6: - version "14.0.0-beta.7" - resolved "https://registry.npmjs.org/nock/-/nock-14.0.0-beta.7.tgz#bdb3f3cfa2276659c87412f6dff2aea9ee69a7fc" - integrity sha512-+EQMm5W9K8YnBE2Ceg4hnJynaCZmvK8ZlFXQ2fxGwtkOkBUq8GpQLTks2m1jpvse9XDxMDDOHgOWpiznFuh0bA== +nock@^14.0.0-beta.15: + version "14.0.0-beta.15" + resolved "https://registry.npmjs.org/nock/-/nock-14.0.0-beta.15.tgz#1eb16e009d3a692bb2a9db4ba4a2834bda424aa3" + integrity sha512-rp72chatxoZbR/2cYHwtb+IX6n6kkanYKGN2PKn4c12JBrj9n4xGUKFykuQHB+Gkz3fynlikFbMH2LI6VoebuQ== dependencies: + "@mswjs/interceptors" "^0.36.4" json-stringify-safe "^5.0.1" propagate "^2.0.0" @@ -7329,6 +7365,11 @@ outdent@^0.5.0: resolved "https://registry.npmjs.org/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff" integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q== +outvariant@^1.4.0, outvariant@^1.4.3: + version "1.4.3" + resolved "https://registry.npmjs.org/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== + p-filter@^2.1.0: version "2.1.0" resolved "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c" @@ -8799,6 +8840,11 @@ streamx@^2.15.0, streamx@^2.16.1: optionalDependencies: bare-events "^2.2.0" +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.npmjs.org/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + string-length@^4.0.1: version "4.0.2" resolved "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a"