diff --git a/package.json b/package.json index 637374b127b..cd26fb327b2 100644 --- a/package.json +++ b/package.json @@ -143,7 +143,7 @@ "jszip": "^3.5.0", "mocha": "^10", "multer": "^1.4.5-lts.1", - "nock": "^11.3.3", + "nock": "^15.0.0-beta.1", "nyc": "^15.1.0", "proxyquire": "^1.8.0", "rimraf": "^3.0.0", diff --git a/packages/datadog-instrumentations/src/openai.js b/packages/datadog-instrumentations/src/openai.js index 556a485d350..c70b6baae1f 100644 --- a/packages/datadog-instrumentations/src/openai.js +++ b/packages/datadog-instrumentations/src/openai.js @@ -31,7 +31,21 @@ const V4_PACKAGE_SHIMS = [ file: 'resources/files', targetClass: 'Files', baseResource: 'files', - methods: ['create', 'del', 'list', 'retrieve'] + methods: ['create', 'list', 'retrieve'] + }, + { + file: 'resources/files', + targetClass: 'Files', + baseResource: 'files', + methods: ['del'], + versions: ['>=4.0.0 <5.0.0'] + }, + { + file: 'resources/files', + targetClass: 'Files', + baseResource: 'files', + methods: ['delete'], + versions: ['>=5'] }, { file: 'resources/files', @@ -78,7 +92,21 @@ const V4_PACKAGE_SHIMS = [ file: 'resources/models', targetClass: 'Models', baseResource: 'models', - methods: ['del', 'list', 'retrieve'] + methods: ['list', 'retrieve'] + }, + { + file: 'resources/models', + targetClass: 'Models', + baseResource: 'models', + methods: ['del'], + versions: ['>=4 <5'] + }, + { + file: 'resources/models', + targetClass: 'Models', + baseResource: 'models', + methods: ['delete'], + versions: ['>=5'] }, { file: 'resources/moderations', diff --git a/packages/datadog-plugin-openai/src/tracing.js b/packages/datadog-plugin-openai/src/tracing.js index 3f3fbad0adb..60a64383239 100644 --- a/packages/datadog-plugin-openai/src/tracing.js +++ b/packages/datadog-plugin-openai/src/tracing.js @@ -366,6 +366,7 @@ function normalizeMethodName (methodName) { case 'files.retrieve': return 'retrieveFile' case 'files.del': + case 'files.delete': return 'deleteFile' case 'files.retrieveContent': case 'files.content': @@ -410,6 +411,7 @@ function normalizeMethodName (methodName) { case 'models.retrieve': return 'retrieveModel' case 'models.del': + case 'models.delete': return 'deleteModel' default: return methodName @@ -954,6 +956,7 @@ function normalizeRequestPayload (methodName, args) { case 'deleteFile': case 'files.del': + case 'files.delete': case 'retrieveFile': case 'files.retrieve': case 'downloadFile': @@ -974,6 +977,7 @@ function normalizeRequestPayload (methodName, args) { case 'fine-tune.retrieve': case 'deleteModel': case 'models.del': + case 'models.delete': case 'cancelFineTune': case 'fine_tuning.jobs.cancel': case 'fine-tune.cancel': diff --git a/packages/datadog-plugin-openai/test/index.spec.js b/packages/datadog-plugin-openai/test/index.spec.js index e326866ad3b..4f9fd125184 100644 --- a/packages/datadog-plugin-openai/test/index.spec.js +++ b/packages/datadog-plugin-openai/test/index.spec.js @@ -16,7 +16,7 @@ const Sampler = require('../../dd-trace/src/sampler') const tracerRequirePath = '../../dd-trace' -const { DD_MAJOR } = require('../../../version') +const { DD_MAJOR, NODE_MAJOR } = require('../../../version') describe('Plugin', () => { let openai @@ -26,9 +26,10 @@ describe('Plugin', () => { let realVersion let tracer + let globalFile + describe('openai', () => { - // TODO: Remove the range once we support openai 5 - withVersions('openai', 'openai', '<5.0.0', version => { + withVersions('openai', 'openai', version => { const moduleRequirePath = `../../../versions/openai@${version}` beforeEach(() => { @@ -50,6 +51,17 @@ describe('Plugin', () => { const module = requiredModule.get() realVersion = requiredModule.version() + if (semver.satisfies(realVersion, '>=5.0.0') && NODE_MAJOR < 20) { + /** + * resolves the following error for OpenAI v5 + * + * Error: `File` is not defined as a global, which is required for file uploads. + * Update to Node 20 LTS or newer, or set `globalThis.File` to `import('node:buffer').File`. + */ + globalFile = global.File + global.File = require('node:buffer').File + } + if (semver.satisfies(realVersion, '>=4.0.0')) { const OpenAI = module @@ -76,6 +88,12 @@ describe('Plugin', () => { sinon.restore() }) + after(() => { + if (semver.satisfies(realVersion, '>=5.0.0') && NODE_MAJOR < 20) { + global.File = globalFile + } + }) + describe('with configuration', () => { useEnv({ DD_OPENAI_SPAN_CHAR_LIMIT: 0 @@ -308,7 +326,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 17:24:22 GMT', 'Content-Type', 'application/json', - 'Content-Length', '349', 'Connection', 'close', 'openai-model', 'text-davinci-002', 'openai-organization', 'kill-9', @@ -435,7 +452,6 @@ describe('Plugin', () => { .reply(200, {}, [ 'Date', 'Mon, 15 May 2023 17:24:22 GMT', 'Content-Type', 'application/json', - 'Content-Length', '349', 'Connection', 'close', 'openai-model', 'text-davinci-002', 'openai-organization', 'kill-9', @@ -496,7 +512,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 20:49:06 GMT', 'Content-Type', 'application/json', - 'Content-Length', '75', 'access-control-allow-origin', '*', 'openai-organization', 'kill-9', 'openai-processing-ms', '344', @@ -572,7 +587,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 20:49:06 GMT', 'Content-Type', 'application/json', - 'Content-Length', '75', 'access-control-allow-origin', '*', 'openai-organization', 'kill-9', 'openai-processing-ms', '344', @@ -740,7 +754,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 23:26:42 GMT', 'Content-Type', 'application/json', - 'Content-Length', '63979', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-processing-ms', '164' @@ -814,7 +827,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 23:41:40 GMT', 'Content-Type', 'application/json', - 'Content-Length', '548', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-processing-ms', '27' @@ -893,7 +905,6 @@ describe('Plugin', () => { }, [ 'Date', 'Tue, 16 May 2023 20:01:49 GMT', 'Content-Type', 'application/json', - 'Content-Length', '172', 'Connection', 'close', 'openai-model', 'text-davinci-edit:001', 'openai-organization', 'kill-9', @@ -1013,7 +1024,6 @@ describe('Plugin', () => { }, [ 'Date', 'Wed, 17 May 2023 21:34:04 GMT', 'Content-Type', 'application/json', - 'Content-Length', '25632', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -1078,7 +1088,6 @@ describe('Plugin', () => { }, [ 'Date', 'Wed, 17 May 2023 22:32:44 GMT', 'Content-Type', 'application/json', - 'Content-Length', '216', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -1148,7 +1157,6 @@ describe('Plugin', () => { }, [ 'Date', 'Wed, 17 May 2023 23:03:54 GMT', 'Content-Type', 'application/json', - 'Content-Length', '83', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9' @@ -1181,7 +1189,8 @@ describe('Plugin', () => { }) if (semver.satisfies(realVersion, '>=4.0.0')) { - const result = await openai.files.del('file-268aYWYhvxWwHb4nIzP9FHM6') + const method = semver.satisfies(realVersion, '>=5.0.0') ? 'delete' : 'del' + const result = await openai.files[method]('file-268aYWYhvxWwHb4nIzP9FHM6') expect(result.deleted).to.eql(true) } else { @@ -1212,7 +1221,6 @@ describe('Plugin', () => { }, [ 'Date', 'Wed, 17 May 2023 23:14:02 GMT', 'Content-Type', 'application/json', - 'Content-Length', '240', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -1394,7 +1402,6 @@ describe('Plugin', () => { .reply(200, response, [ 'Date', 'Thu, 18 May 2023 20:41:30 GMT', 'Content-Type', 'application/json', - 'Content-Length', '898', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-processing-ms', '116' @@ -1659,7 +1666,6 @@ describe('Plugin', () => { .reply(200, response, [ 'Date', 'Thu, 18 May 2023 22:11:53 GMT', 'Content-Type', 'application/json', - 'Content-Length', '2727', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-processing-ms', '51' @@ -1940,7 +1946,6 @@ describe('Plugin', () => { .reply(200, response, [ 'Date', 'Thu, 18 May 2023 22:47:17 GMT', 'Content-Type', 'application/json', - 'Content-Length', '1718', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-processing-ms', '33' @@ -2007,7 +2012,6 @@ describe('Plugin', () => { }, [ 'Date', 'Thu, 18 May 2023 22:59:08 GMT', 'Content-Type', 'application/json', - 'Content-Length', '152', 'Connection', 'close', 'access-control-allow-origin', '*', 'openai-version', '2020-10-01', @@ -2040,7 +2044,8 @@ describe('Plugin', () => { }) if (semver.satisfies(realVersion, '>=4.0.0')) { - const result = await openai.models.del('ft-10RCfqSvgyEcauomw7VpiYco') + const method = semver.satisfies(realVersion, '>=5.0.0') ? 'delete' : 'del' + const result = await openai.models[method]('ft-10RCfqSvgyEcauomw7VpiYco') expect(result.deleted).to.eql(true) } else { @@ -2123,7 +2128,6 @@ describe('Plugin', () => { .reply(200, response, [ 'Date', 'Thu, 18 May 2023 23:21:43 GMT', 'Content-Type', 'application/json', - 'Content-Length', '1042', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-processing-ms', '78' @@ -2234,7 +2238,6 @@ describe('Plugin', () => { }, [ 'Date', 'Wed, 17 May 2023 19:58:01 GMT', 'Content-Type', 'application/json', - 'Content-Length', '450', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -2333,7 +2336,6 @@ describe('Plugin', () => { }, [ 'Date', 'Tue, 16 May 2023 20:59:07 GMT', 'Content-Type', 'application/json', - 'Content-Length', '545', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -2544,7 +2546,6 @@ describe('Plugin', () => { }, [ 'Date', 'Tue, 23 May 2023 13:55:18 GMT', 'Content-Type', 'application/json', - 'Content-Length', '549', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -2641,7 +2642,6 @@ describe('Plugin', () => { }, [ 'Date', 'Tue, 23 May 2023 14:48:40 GMT', 'Content-Type', 'application/json', - 'Content-Length', '547', 'Connection', 'close', 'openai-version', '2020-10-01', 'openai-organization', 'kill-9', @@ -2740,7 +2740,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 22:00:21 GMT', 'Content-Type', 'application/json', - 'Content-Length', '327', 'access-control-allow-origin', '*', 'openai-model', 'gpt-3.5-turbo-0301', 'openai-organization', 'kill-9', @@ -3002,7 +3001,6 @@ describe('Plugin', () => { }, [ 'Date', 'Mon, 15 May 2023 22:00:21 GMT', 'Content-Type', 'application/json', - 'Content-Length', '327', 'access-control-allow-origin', '*', 'openai-model', 'gpt-3.5-turbo-0301', 'openai-organization', 'kill-9', @@ -3128,7 +3126,6 @@ describe('Plugin', () => { }, [ 'Date', 'Fri, 19 May 2023 03:19:49 GMT', 'Content-Type', 'text/plain; charset=utf-8', - 'Content-Length', '15', 'Connection', 'close', 'openai-organization', 'kill-9', 'openai-processing-ms', '595', @@ -3235,7 +3232,6 @@ describe('Plugin', () => { }, [ 'Date', 'Fri, 19 May 2023 03:41:25 GMT', 'Content-Type', 'application/json', - 'Content-Length', '334', 'Connection', 'close', 'openai-organization', 'kill-9', 'openai-processing-ms', '520', @@ -3802,54 +3798,55 @@ describe('Plugin', () => { }) } - if (semver.intersects('>=4.59.0', version)) { - it('makes a successful call with the beta chat completions', async () => { - nock('https://api.openai.com:443') - .post('/v1/chat/completions') - .reply(200, { - id: 'chatcmpl-7GaWqyMTD9BLmkmy8SxyjUGX3KSRN', - object: 'chat.completion', - created: 1684188020, - model: 'gpt-4o', - usage: { - prompt_tokens: 37, - completion_tokens: 10, - total_tokens: 47 - }, - choices: [ - { - message: { - role: 'assistant', - content: 'I am doing well, how about you?' - }, - finish_reason: 'stop', - index: 0 - } - ] - }) - - const checkTraces = agent - .assertSomeTraces(traces => { - const span = traces[0][0] - expect(span).to.have.property('name', 'openai.request') - }) - - const prom = openai.beta.chat.completions.parse({ + it('makes a successful call with the beta chat completions', async function () { + if (!semver.satisfies(realVersion, '>=4.59.0 <5.0.0')) { + this.skip() + } + nock('https://api.openai.com:443') + .post('/v1/chat/completions') + .reply(200, { + id: 'chatcmpl-7GaWqyMTD9BLmkmy8SxyjUGX3KSRN', + object: 'chat.completion', + created: 1684188020, model: 'gpt-4o', - messages: [{ role: 'user', content: 'Hello, OpenAI!', name: 'hunter2' }], - temperature: 0.5, - stream: false + usage: { + prompt_tokens: 37, + completion_tokens: 10, + total_tokens: 47 + }, + choices: [ + { + message: { + role: 'assistant', + content: 'I am doing well, how about you?' + }, + finish_reason: 'stop', + index: 0 + } + ] }) - expect(prom).to.have.property('withResponse') + const checkTraces = agent + .assertSomeTraces(traces => { + const span = traces[0][0] + expect(span).to.have.property('name', 'openai.request') + }) - const response = await prom + const prom = openai.beta.chat.completions.parse({ + model: 'gpt-4o', + messages: [{ role: 'user', content: 'Hello, OpenAI!', name: 'hunter2' }], + temperature: 0.5, + stream: false + }) - expect(response.choices[0].message.content).to.eql('I am doing well, how about you?') + expect(prom).to.have.property('withResponse') - await checkTraces - }) - } + const response = await prom + + expect(response.choices[0].message.content).to.eql('I am doing well, how about you?') + + await checkTraces + }) }) }) }) diff --git a/packages/dd-trace/test/llmobs/plugins/openai/openaiv4.spec.js b/packages/dd-trace/test/llmobs/plugins/openai/openaiv4.spec.js index ccee47e8a94..4820f3439df 100644 --- a/packages/dd-trace/test/llmobs/plugins/openai/openaiv4.spec.js +++ b/packages/dd-trace/test/llmobs/plugins/openai/openaiv4.spec.js @@ -60,8 +60,7 @@ describe('integrations', () => { return agent.close({ ritmReset: false, wipe: true }) }) - // TODO: Remove the range cap once we support openai 5 - withVersions('openai', 'openai', '>=4 <5', version => { + withVersions('openai', 'openai', '>=4', version => { const moduleRequirePath = `../../../../../../versions/openai@${version}` beforeEach(() => { @@ -576,30 +575,19 @@ describe('integrations', () => { }) it('submits an AzureOpenAI completion', async () => { - const isFromAzureOpenAIClass = azureOpenai.constructor.name === 'AzureOpenAI' - const postEndpoint = isFromAzureOpenAIClass - ? '//openai/deployments/some-model/chat/completions' - : '/chat/completions' - const query = isFromAzureOpenAIClass - ? { 'api-version': '2024-05-01-preview' } - : {} - - nock('https://dd.openai.azure.com:443') - .post(postEndpoint) - .query(query) - .reply(200, {}) - - const checkSpan = agent.assertSomeTraces(traces => { + const checkSpan = agent.assertSomeTraces(() => { const spanEvent = LLMObsSpanWriter.prototype.append.getCall(0).args[0] expect(spanEvent).to.have.property('name', 'AzureOpenAI.createChatCompletion') expect(spanEvent.meta).to.have.property('model_provider', 'azure_openai') }) - await azureOpenai.chat.completions.create({ - model: 'some-model', - messages: [] - }) + try { + await azureOpenai.chat.completions.create({ + model: 'some-model', + messages: [] + }) + } catch (e) { /* do nothing */ } await checkSpan }) diff --git a/yarn.lock b/yarn.lock index 806d705d6f8..558fd5b54c2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -426,6 +426,18 @@ resolved "https://registry.yarnpkg.com/@msgpack/msgpack/-/msgpack-3.1.1.tgz#6f09ada4767a163f225cb7fc15bccbcef781fe4c" integrity sha512-DnBpqkMOUGayNVKyTLlkM6ILmU/m/+VUxGkuQlPQVAcvreLz5jn1OlQnWd8uHKL/ZSiljpM12rjRhr51VtvJUQ== +"@mswjs/interceptors@^0.38.6": + version "0.38.7" + resolved "https://registry.yarnpkg.com/@mswjs/interceptors/-/interceptors-0.38.7.tgz#5ca205dbf8887830ace8d0bd9b23323a211350de" + integrity sha512-Jkb27iSn7JPdkqlTqKfhncFfnEZsIJVYxsFbUSWEkxdIPdsyngrhoDBk0/BGD2FQcRH99vlRrkHpNTyKqI+0/w== + 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.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" @@ -447,6 +459,24 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" +"@open-draft/deferred-promise@^2.2.0": + version "2.2.0" + resolved "https://registry.yarnpkg.com/@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.yarnpkg.com/@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.yarnpkg.com/@open-draft/until/-/until-2.1.0.tgz#0acf32f470af2ceaf47f095cdecd40d68666efda" + integrity sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg== + "@opentelemetry/api@>=1.0.0 <1.9.0": version "1.8.0" resolved "https://registry.yarnpkg.com/@opentelemetry/api/-/api-1.8.0.tgz#5aa7abb48f23f693068ed2999ae627d2f7d902ec" @@ -2565,6 +2595,11 @@ is-map@^2.0.3: resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== +is-node-process@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-node-process/-/is-node-process-1.2.0.tgz#ea02a1b90ddb3934a19aea414e88edef7e11d134" + integrity sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw== + is-number-object@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" @@ -2935,7 +2970,7 @@ lodash.sortby@^4.7.0: resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== -lodash@^4.17.13, lodash@^4.17.20, lodash@^4.17.4: +lodash@^4.17.20, lodash@^4.17.4: version "4.17.21" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -3091,7 +3126,7 @@ minipass@^3.1.5, minipass@^3.1.6, minipass@^3.3.4: dependencies: yallist "^4.0.0" -mkdirp@^0.5.0, mkdirp@^0.5.4: +mkdirp@^0.5.4: version "0.5.6" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== @@ -3190,16 +3225,13 @@ nise@^5.1.4: just-extend "^6.2.0" path-to-regexp "^6.2.1" -nock@^11.3.3: - version "11.9.1" - resolved "https://registry.yarnpkg.com/nock/-/nock-11.9.1.tgz#2b026c5beb6d0dbcb41e7e4cefa671bc36db9c61" - integrity sha512-U5wPctaY4/ar2JJ5Jg4wJxlbBfayxgKbiAeGh+a1kk6Pwnc2ZEuKviLyDSG6t0uXl56q7AALIxoM6FJrBSsVXA== +nock@^15.0.0-beta.1: + version "15.0.0-beta.2" + resolved "https://registry.yarnpkg.com/nock/-/nock-15.0.0-beta.2.tgz#b81479aca7466c30e1bd28b1c425d46ec3a5a062" + integrity sha512-n5g92NDMQ2hmEKMod8684VuU/5QUgLEv29Qv/N3UBtXnC5iOXMzLHyrtPQaDI9a5j3N1i8PlOtmpwJu2GFiwrA== dependencies: - debug "^4.1.0" + "@mswjs/interceptors" "^0.38.6" json-stringify-safe "^5.0.1" - lodash "^4.17.13" - mkdirp "^0.5.0" - propagate "^2.0.0" node-addon-api@^6.1.0: version "6.1.0" @@ -3374,6 +3406,11 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" +outvariant@^1.4.0, outvariant@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/outvariant/-/outvariant-1.4.3.tgz#221c1bfc093e8fec7075497e7799fdbf43d14873" + integrity sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA== + own-keys@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" @@ -3570,11 +3607,6 @@ process-on-spawn@^1.0.0: dependencies: fromentries "^1.2.0" -propagate@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/propagate/-/propagate-2.0.1.tgz#40cdedab18085c792334e64f0ac17256d38f9a45" - integrity sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag== - protobufjs@^7.2.5: version "7.4.0" resolved "https://registry.yarnpkg.com/protobufjs/-/protobufjs-7.4.0.tgz#7efe324ce9b3b61c82aae5de810d287bc08a248a" @@ -4176,6 +4208,11 @@ streamsearch@^1.1.0: resolved "https://registry.yarnpkg.com/streamsearch/-/streamsearch-1.1.0.tgz#404dd1e2247ca94af554e841a8ef0eaa238da764" integrity sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg== +strict-event-emitter@^0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/strict-event-emitter/-/strict-event-emitter-0.5.1.tgz#1602ece81c51574ca39c6815e09f1a3e8550bd93" + integrity sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ== + string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"