diff --git a/libraries/botbuilder-ai/src/luisRecognizer.ts b/libraries/botbuilder-ai/src/luisRecognizer.ts index 7f8b7458a7..fa8c59329b 100644 --- a/libraries/botbuilder-ai/src/luisRecognizer.ts +++ b/libraries/botbuilder-ai/src/luisRecognizer.ts @@ -5,7 +5,7 @@ * Copyright (c) Microsoft Corporation. All rights reserved. * Licensed under the MIT License. */ -import { RequestOptionsBase } from '@azure/core-http'; +import { PipelineRequestOptions } from '@azure/core-rest-pipeline'; import Url from 'url-parse'; import { BotTelemetryClient, NullTelemetryClient, RecognizerResult, TurnContext } from 'botbuilder-core'; @@ -41,7 +41,7 @@ export interface LuisApplication { * * Options per LUIS prediction. */ -export interface LuisPredictionOptions extends RequestOptionsBase { +export interface LuisPredictionOptions extends PipelineRequestOptions { /** * If true, return all intents instead of just the top scoring intent. */ diff --git a/libraries/botbuilder-ai/src/luisRuntimeClientContext.ts b/libraries/botbuilder-ai/src/luisRuntimeClientContext.ts index c7df9e844c..99982ccbe9 100644 --- a/libraries/botbuilder-ai/src/luisRuntimeClientContext.ts +++ b/libraries/botbuilder-ai/src/luisRuntimeClientContext.ts @@ -4,14 +4,15 @@ * license information. */ -import { ServiceClient, ServiceClientCredentials, ServiceClientOptions } from '@azure/core-http'; - +//import { ServiceClient, ServiceClientCredentials, ServiceClientOptions } from '@azure/core-http'; +import { ServiceClientOptions, ServiceClient } from '@azure/core-client'; +import { TokenCredential } from '@azure/identity'; /** * Client for LUIS context */ export class LUISRuntimeClientContext extends ServiceClient { endpoint: string; - credentials: ServiceClientCredentials; + credentials: TokenCredential; /** * Initializes a new instance of the LUISRuntimeClientContext class. @@ -21,7 +22,7 @@ export class LUISRuntimeClientContext extends ServiceClient { * https://westus.api.cognitive.microsoft.com). * @param [options] The parameter options */ - constructor(credentials: ServiceClientCredentials, endpoint: string, options?: ServiceClientOptions) { + constructor(credentials: TokenCredential, endpoint: string, options?: ServiceClientOptions) { if (endpoint == undefined) { throw new Error("'endpoint' cannot be null."); } @@ -33,10 +34,10 @@ export class LUISRuntimeClientContext extends ServiceClient { options = {}; } - super(credentials, options); + super(options); - this.baseUri = '{Endpoint}/luis/v3.0-preview'; - this.requestContentType = 'application/json; charset=utf-8'; + //this.baseUri = '{Endpoint}/luis/v3.0-preview'; + //this.requestContentType = 'application/json; charset=utf-8'; this.endpoint = endpoint; this.credentials = credentials; } diff --git a/libraries/botbuilder-ai/src/luisV2-models/luisMappers.ts b/libraries/botbuilder-ai/src/luisV2-models/luisMappers.ts index a33169405b..04b44d3a5e 100644 --- a/libraries/botbuilder-ai/src/luisV2-models/luisMappers.ts +++ b/libraries/botbuilder-ai/src/luisV2-models/luisMappers.ts @@ -6,7 +6,7 @@ * Licensed under the MIT License. */ -import { CompositeMapper } from '@azure/core-http'; +import { CompositeMapper } from '@azure/core-client'; export const IntentModel: CompositeMapper = { serializedName: 'IntentModel', diff --git a/libraries/botbuilder-ai/src/luisV2-models/luisModels.ts b/libraries/botbuilder-ai/src/luisV2-models/luisModels.ts index 367bb25983..b058784d74 100644 --- a/libraries/botbuilder-ai/src/luisV2-models/luisModels.ts +++ b/libraries/botbuilder-ai/src/luisV2-models/luisModels.ts @@ -4,7 +4,7 @@ * license information. */ -import { RequestOptionsBase, HttpResponse } from '@azure/core-http'; +import { PipelineRequestOptions, PipelineResponse } from '@azure/core-rest-pipeline'; /** * Represents an intent prediction. @@ -194,7 +194,7 @@ export interface PredictionRequest { /** * Optional Parameters. */ -export interface PredictionGetVersionPredictionOptionalParams extends RequestOptionsBase { +export interface PredictionGetVersionPredictionOptionalParams extends PipelineRequestOptions { /** * Indicates whether to get extra metadata for the entities predictions or not. */ @@ -212,7 +212,7 @@ export interface PredictionGetVersionPredictionOptionalParams extends RequestOpt /** * Optional Parameters. */ -export interface PredictionGetSlotPredictionOptionalParams extends RequestOptionsBase { +export interface PredictionGetSlotPredictionOptionalParams extends PipelineRequestOptions { /** * Indicates whether to get extra metadata for the entities predictions or not. */ @@ -234,7 +234,7 @@ export type PredictionGetVersionPredictionResponse = PredictionResponse & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -254,7 +254,7 @@ export type PredictionGetSlotPredictionResponse = PredictionResponse & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ diff --git a/libraries/botbuilder-ai/src/luisV2-models/luisResult.ts b/libraries/botbuilder-ai/src/luisV2-models/luisResult.ts index 83948d732d..c5ddfa315d 100644 --- a/libraries/botbuilder-ai/src/luisV2-models/luisResult.ts +++ b/libraries/botbuilder-ai/src/luisV2-models/luisResult.ts @@ -7,8 +7,7 @@ */ import { Sentiment } from './luisModels'; -import { RequestOptionsBase } from '@azure/core-http'; -import { PipelineResponse } from '@azure/core-rest-pipeline'; +import { PipelineRequestOptions, PipelineResponse } from '@azure/core-rest-pipeline'; /** * Prediction, based on the input query, containing intent(s) and entities. @@ -123,7 +122,7 @@ export interface CompositeChildModel { /** * Optional Parameters. */ -export interface PredictionResolveOptionalParams extends RequestOptionsBase { +export interface PredictionResolveOptionalParams extends PipelineRequestOptions { /** * The timezone offset for the location of the request. */ diff --git a/libraries/botbuilder/package.json b/libraries/botbuilder/package.json index 18775a5582..9a5b2a2b7c 100644 --- a/libraries/botbuilder/package.json +++ b/libraries/botbuilder/package.json @@ -27,7 +27,10 @@ } }, "dependencies": { + "@azure/core-client": "^1.9.2", "@azure/core-http": "^3.0.4", + "@azure/core-rest-pipeline": "^1.17.0", + "@azure/identity": "^4.5.0", "@azure/msal-node": "^2.13.1", "axios": "^1.7.7", "botbuilder-core": "4.1.6", diff --git a/libraries/botbuilder/src/botFrameworkAdapter.ts b/libraries/botbuilder/src/botFrameworkAdapter.ts index 7df7cc2599..806fbb0dd9 100644 --- a/libraries/botbuilder/src/botFrameworkAdapter.ts +++ b/libraries/botbuilder/src/botFrameworkAdapter.ts @@ -9,7 +9,8 @@ import * as z from 'zod'; import { BotFrameworkHttpAdapter } from './botFrameworkHttpAdapter'; import { ConnectorClientBuilder, Request, Response, ResponseT, WebRequest, WebResponse } from './interfaces'; -import { HttpClient, RequestPolicyFactory, userAgentPolicy } from '@azure/core-http'; +import { RequestPolicyFactory, userAgentPolicy } from '@azure/core-http'; +import { HttpClient } from '@azure/core-rest-pipeline'; import { INodeBufferT, INodeSocketT, LogicT } from './zod'; import { arch, release, type } from 'os'; import { delay, retry } from 'botbuilder-stdlib'; diff --git a/libraries/botbuilder/src/cloudAdapter.ts b/libraries/botbuilder/src/cloudAdapter.ts index c914aa8f93..1d50536452 100644 --- a/libraries/botbuilder/src/cloudAdapter.ts +++ b/libraries/botbuilder/src/cloudAdapter.ts @@ -5,7 +5,7 @@ import * as z from 'zod'; import type { BotFrameworkHttpAdapter } from './botFrameworkHttpAdapter'; import { Activity, CloudAdapterBase, InvokeResponse, StatusCodes, TurnContext } from 'botbuilder-core'; import { GET, POST, VERSION_PATH } from './streaming'; -import { HttpClient, HttpHeaders, HttpOperationResponse, WebResource } from '@azure/core-http'; +import { HttpClient, PipelineRequest, PipelineResponse, createHttpHeaders } from '@azure/core-rest-pipeline'; import { INodeBufferT, INodeSocketT, LogicT } from './zod'; import { Request, Response, ResponseT } from './interfaces'; import { USER_AGENT } from './botFrameworkAdapter'; @@ -393,13 +393,13 @@ class StreamingConnectorFactory implements ConnectorFactory { class StreamingHttpClient implements HttpClient { constructor(private readonly requestHandler: StreamingRequestHandler) {} - async sendRequest(httpRequest: WebResource): Promise { + async sendRequest(httpRequest: PipelineRequest): Promise { const streamingRequest = this.createStreamingRequest(httpRequest); const receiveResponse = await this.requestHandler.server?.send(streamingRequest); return this.createHttpResponse(receiveResponse, httpRequest); } - private createStreamingRequest(httpRequest: WebResource): StreamingRequest { + private createStreamingRequest(httpRequest: PipelineRequest): StreamingRequest { const verb = httpRequest.method.toString(); const path = httpRequest.url.slice(httpRequest.url.indexOf('/v3')); @@ -411,14 +411,14 @@ class StreamingHttpClient implements HttpClient { private async createHttpResponse( receiveResponse: IReceiveResponse, - httpRequest: WebResource - ): Promise { + httpRequest: PipelineRequest + ): Promise { const [bodyAsText] = (await Promise.all(receiveResponse.streams?.map((stream) => stream.readAsString()) ?? [])) ?? []; return { bodyAsText, - headers: new HttpHeaders(), + headers: createHttpHeaders(), request: httpRequest, status: receiveResponse.statusCode, }; diff --git a/libraries/botbuilder/src/streaming/streamingHttpClient.ts b/libraries/botbuilder/src/streaming/streamingHttpClient.ts index 0d631ba2bb..a1b4e4e90f 100644 --- a/libraries/botbuilder/src/streaming/streamingHttpClient.ts +++ b/libraries/botbuilder/src/streaming/streamingHttpClient.ts @@ -6,7 +6,7 @@ * Licensed under the MIT License. */ -import { WebResource, HttpOperationResponse, HttpClient } from '@azure/core-http'; +import { HttpClient, PipelineRequest, PipelineResponse } from '@azure/core-rest-pipeline'; import { IStreamingTransportServer, StreamingRequest } from 'botframework-streaming'; /** @@ -35,7 +35,7 @@ export class StreamingHttpClient implements HttpClient { * @param httpRequest The outgoing request created by the BotframeworkAdapter. * @returns The streaming transport compatible response to send back to the client. */ - async sendRequest(httpRequest: WebResource): Promise { + async sendRequest(httpRequest: PipelineRequest): Promise { if (!httpRequest) { throw new Error('StreamingHttpClient.sendRequest(): missing "httpRequest" parameter'); } @@ -59,7 +59,7 @@ export class StreamingHttpClient implements HttpClient { /** * @private */ - private mapHttpRequestToProtocolRequest(httpRequest: WebResource): StreamingRequest { + private mapHttpRequestToProtocolRequest(httpRequest: PipelineRequest): StreamingRequest { return StreamingRequest.create(httpRequest.method, httpRequest.url, httpRequest.body); } } diff --git a/libraries/botbuilder/tests/botFrameworkAdapter.test.js b/libraries/botbuilder/tests/botFrameworkAdapter.test.js index ca5d995d69..d42d5afc4f 100644 --- a/libraries/botbuilder/tests/botFrameworkAdapter.test.js +++ b/libraries/botbuilder/tests/botFrameworkAdapter.test.js @@ -6,7 +6,7 @@ const sinon = require('sinon'); const { BotFrameworkAdapter } = require('../'); const { Conversations } = require('botframework-connector/lib/connectorApi/operations'); const { UserToken, BotSignIn } = require('botframework-connector/lib/tokenApi/operations'); -const { userAgentPolicy, HttpHeaders } = require('@azure/core-http'); +const { userAgentPolicy, createHttpHeaders } = require('@azure/core-rest-pipeline'); const { ActivityTypes, @@ -480,7 +480,7 @@ describe('BotFrameworkAdapter', function () { Promise.resolve({ request, status: 200, - headers: new HttpHeaders(), + headers: createHttpHeaders(), readableStreamBody: undefined, bodyAsText: '', }) @@ -536,7 +536,7 @@ describe('BotFrameworkAdapter', function () { const length = client._requestPolicyFactories.length; for (let i = 0; i < length; i++) { const mockHttp = { - headers: new HttpHeaders(), + headers: createHttpHeaders(), }; const result = client._requestPolicyFactories[i].create(mockNextPolicy); diff --git a/libraries/botframework-connector/src/auth/appCredentials.ts b/libraries/botframework-connector/src/auth/appCredentials.ts index c02b78f940..8cde600efb 100644 --- a/libraries/botframework-connector/src/auth/appCredentials.ts +++ b/libraries/botframework-connector/src/auth/appCredentials.ts @@ -8,6 +8,7 @@ import { ConfidentialClientApplication } from '@azure/msal-node'; import { ServiceClientCredentials, WebResource } from '@azure/core-http'; +import { PipelineRequest } from '@azure/core-rest-pipeline'; import { TokenCredentials } from './tokenCredentials'; import { AuthenticationConstants } from './authenticationConstants'; import { AuthenticatorResult } from './authenticatorResult'; @@ -149,7 +150,7 @@ export abstract class AppCredentials implements ServiceClientCredentials { * @param webResource The WebResource HTTP request. * @returns A Promise representing the asynchronous operation. */ - async signRequest(webResource: WebResource): Promise { + async signRequest(webResource: PipelineRequest): Promise { if (this.shouldSetToken()) { return new TokenCredentials(await this.getToken()).signRequest(webResource); } diff --git a/libraries/botframework-connector/src/auth/serviceClientCredentialsFactory.ts b/libraries/botframework-connector/src/auth/serviceClientCredentialsFactory.ts index f790d97a21..f05e613810 100644 --- a/libraries/botframework-connector/src/auth/serviceClientCredentialsFactory.ts +++ b/libraries/botframework-connector/src/auth/serviceClientCredentialsFactory.ts @@ -1,10 +1,10 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -import { ServiceClientCredentials } from '@azure/core-http'; +import { TokenCredential } from '@azure/identity'; // Export underlying type for convenience -export { ServiceClientCredentials }; +export { TokenCredential }; /** * The ServiceClientCredentialsFactory abstract class that allows Bots to provide their own @@ -33,12 +33,12 @@ export abstract class ServiceClientCredentialsFactory { * @param audience The audience. * @param loginEndpoint The login url. * @param validateAuthority The validate authority value to use. - * @returns {Promise} A [ServiceClientCredentials](xref:botframework-connector.ServiceClientCredentials). + * @returns {Promise} A [ServiceClientCredentials](xref:botframework-connector.ServiceClientCredentials). */ abstract createCredentials( appId: string, audience: string | undefined, loginEndpoint: string, validateAuthority: boolean - ): Promise; + ): Promise; } diff --git a/libraries/botframework-connector/src/teams/models/index.ts b/libraries/botframework-connector/src/teams/models/index.ts index 5981690659..ffe2617ce8 100644 --- a/libraries/botframework-connector/src/teams/models/index.ts +++ b/libraries/botframework-connector/src/teams/models/index.ts @@ -3,7 +3,8 @@ * Licensed under the MIT License. */ -import { HttpResponse, ServiceClientOptions, RequestOptionsBase } from '@azure/core-http'; +import { PipelineResponse, PipelineRequestOptions } from '@azure/core-rest-pipeline'; +import { ServiceClientOptions } from '@azure/core-client'; import { ConversationList, TeamDetails, @@ -34,7 +35,7 @@ export type TeamsFetchChannelListResponse = ConversationList & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -53,7 +54,7 @@ export type TeamsFetchTeamDetailsResponse = TeamDetails & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -65,7 +66,7 @@ export type TeamsFetchTeamDetailsResponse = TeamDetails & { }; }; -export interface ConversationsGetConversationPagedMembersOptionalParams extends RequestOptionsBase { +export interface ConversationsGetConversationPagedMembersOptionalParams extends PipelineRequestOptions { /** * Suggested page size */ @@ -83,7 +84,7 @@ export type TeamsFetchMeetingParticipantResponse = TeamsMeetingParticipant & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -102,7 +103,7 @@ export type TeamsFetchMeetingParticipantResponse = TeamsMeetingParticipant & { * * @extends RequestOptionsBase */ -export interface TeamsFetchMeetingParticipantOptionalParams extends RequestOptionsBase { +export interface TeamsFetchMeetingParticipantOptionalParams extends PipelineRequestOptions { /** * @member {string} [tenantId] */ @@ -116,7 +117,7 @@ export type TeamsMeetingInfoResponse = MeetingInfo & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -135,7 +136,7 @@ export type TeamsMeetingNotificationResponse = MeetingNotificationResponse & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -154,7 +155,7 @@ export type TeamsBatchOperationResponse = BatchOperationResponse & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -173,7 +174,7 @@ export type BatchBatchOperationStateResponse = BatchOperationStateResponse & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -192,7 +193,7 @@ export type BatchBatchFailedEntriesResponse = BatchFailedEntriesResponse & { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ @@ -211,7 +212,7 @@ export type CancelOperationResponse = { /** * The underlying HTTP response. */ - _response: HttpResponse & { + _response: PipelineResponse & { /** * The response body as text (string format) */ diff --git a/libraries/botframework-connector/src/teams/models/mappers.ts b/libraries/botframework-connector/src/teams/models/mappers.ts index 86124cf8f2..c0b9c37750 100644 --- a/libraries/botframework-connector/src/teams/models/mappers.ts +++ b/libraries/botframework-connector/src/teams/models/mappers.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. */ -import { CompositeMapper } from '@azure/core-http'; +import { CompositeMapper } from '@azure/core-client'; export const ChannelInfo: CompositeMapper = { serializedName: 'ChannelInfo', diff --git a/libraries/botframework-connector/tests/appCredentials.test.js b/libraries/botframework-connector/tests/appCredentials.test.js index d8104402d9..17c5171fc0 100644 --- a/libraries/botframework-connector/tests/appCredentials.test.js +++ b/libraries/botframework-connector/tests/appCredentials.test.js @@ -5,7 +5,7 @@ const { AuthenticationConstants, CertificateAppCredentials, MicrosoftAppCredentials } = require('../'); const { ok: assert, strictEqual } = require('assert'); -const { WebResource } = require('@azure/core-http'); +const { PipelineRequest } = require('@azure/core-rest-pipeline'); const APP_ID = '2cd87869-38a0-4182-9251-d056e8f0ac24'; const APP_PASSWORD = 'password'; @@ -43,13 +43,13 @@ describe('AppCredentials', function () { describe('signRequest', function () { it('should not sign request when appId is falsy', async function () { const creds = new MicrosoftAppCredentials(''); - const webRequest = await creds.signRequest(new WebResource()); + const webRequest = await creds.signRequest(new PipelineRequest()); assert(!webRequest.headers.Authorization); }); it('should not sign request when appId is anonymous skill appId', async function () { const creds = new MicrosoftAppCredentials(AuthenticationConstants.AnonymousSkillAppId); - const webRequest = await creds.signRequest(new WebResource()); + const webRequest = await creds.signRequest(new PipelineRequest()); assert(!webRequest.headers.Authorization); }); }); diff --git a/libraries/botframework-connector/tests/botFrameworkAuthenticationFactory.test.js b/libraries/botframework-connector/tests/botFrameworkAuthenticationFactory.test.js index 44090d10ee..f703dc7952 100644 --- a/libraries/botframework-connector/tests/botFrameworkAuthenticationFactory.test.js +++ b/libraries/botframework-connector/tests/botFrameworkAuthenticationFactory.test.js @@ -11,7 +11,7 @@ const { PasswordServiceClientCredentialFactory, SkillValidation, } = require('..'); -const { HttpHeaders } = require('@azure/core-http'); +const { createHttpHeaders } = require('@azure/core-rest-pipeline'); describe('BotFrameworkAuthenticationFactory', function () { it('should create anonymous BotFrameworkAuthentication', function () { @@ -147,7 +147,7 @@ describe('BotFrameworkAuthenticationFactory', function () { const length = client._requestPolicyFactories.length; for (let i = 0; i < length; i++) { const mockHttp = { - headers: new HttpHeaders(), + headers: createHttpHeaders(), }; const result = client._requestPolicyFactories[i].create(mockNextPolicy); diff --git a/yarn.lock b/yarn.lock index be3977e8c6..8066e1084f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -54,6 +54,15 @@ "@azure/abort-controller" "^1.0.0" tslib "^2.2.0" +"@azure/core-auth@^1.8.0", "@azure/core-auth@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac" + integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-util" "^1.11.0" + tslib "^2.6.2" + "@azure/core-client@^1.3.0", "@azure/core-client@^1.6.2", "@azure/core-client@^1.9.2": version "1.9.2" resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" @@ -127,6 +136,20 @@ https-proxy-agent "^7.0.0" tslib "^2.6.2" +"@azure/core-rest-pipeline@^1.17.0": + version "1.17.0" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.17.0.tgz#55dafa1093553c549ed6d8dbca69aa505c7b3aa3" + integrity sha512-62Vv8nC+uPId3j86XJ0WI+sBf0jlqTqPUFCBNrGtlaUeQUIXWV/D8GE5A1d+Qx8H7OQojn2WguC8kChD6v0shA== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.8.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.9.0" + "@azure/logger" "^1.0.0" + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + tslib "^2.6.2" + "@azure/core-tracing@1.0.0-preview.13": version "1.0.0-preview.13" resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.0.0-preview.13.tgz#55883d40ae2042f6f1e12b17dd0c0d34c536d644" @@ -158,6 +181,14 @@ "@azure/abort-controller" "^1.0.0" tslib "^2.2.0" +"@azure/core-util@^1.11.0": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7" + integrity sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g== + dependencies: + "@azure/abort-controller" "^2.0.0" + tslib "^2.6.2" + "@azure/core-xml@^1.3.2": version "1.4.3" resolved "https://registry.yarnpkg.com/@azure/core-xml/-/core-xml-1.4.3.tgz#a74f37a0e584fee7e9adae19f51016d4b59e9ca2" @@ -207,6 +238,26 @@ stoppable "^1.1.0" tslib "^2.2.0" +"@azure/identity@^4.5.0": + version "4.5.0" + resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.5.0.tgz#93ce3757bf761a08cfd05f56ef181435e05b9e1c" + integrity sha512-EknvVmtBuSIic47xkOqyNabAme0RYTw52BTMz8eBgU1ysTyMrD1uOoM+JdS0J/4Yfp98IBT3osqq3BfwSaNaGQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.2" + "@azure/core-rest-pipeline" "^1.17.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.11.0" + "@azure/logger" "^1.0.0" + "@azure/msal-browser" "^3.26.1" + "@azure/msal-node" "^2.15.0" + events "^3.0.0" + jws "^4.0.0" + open "^8.0.0" + stoppable "^1.1.0" + tslib "^2.2.0" + "@azure/logger@^1.0.0": version "1.0.0" resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.0.0.tgz#48b371dfb34288c8797e5c104f6c4fb45bf1772c" @@ -233,6 +284,13 @@ dependencies: "@azure/msal-common" "14.14.1" +"@azure/msal-browser@^3.26.1": + version "3.27.0" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.27.0.tgz#b6f02f73c8e102d3f115009b4677539fb173fe2b" + integrity sha512-+b4ZKSD8+vslCtVRVetkegEhOFMLP3rxDWJY212ct+2r6jVg6OSQKc1Qz3kCoXo0FgwaXkb+76TMZfpHp8QtgA== + dependencies: + "@azure/msal-common" "14.16.0" + "@azure/msal-common@14.14.1": version "14.14.1" resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.14.1.tgz#62e4569518d2c52e7de1f460d40ab919ca66b99b" @@ -243,6 +301,11 @@ resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.14.2.tgz#583b4ac9c089953718d7a5e2f3b8df2d4dbb17f4" integrity sha512-XV0P5kSNwDwCA/SjIxTe9mEAsKB0NqGNSuaVrkCCE2lAyBr/D6YtD80Vkdp4tjWnPFwjzkwldjr1xU/facOJog== +"@azure/msal-common@14.16.0": + version "14.16.0" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.16.0.tgz#f3470fcaec788dbe50859952cd499340bda23d7a" + integrity sha512-1KOZj9IpcDSwpNiQNjt0jDYZpQvNZay7QAEi/5DLubay40iGYtLzya/jbjRPLyOTZhEKyL1MzPuw2HqBCjceYA== + "@azure/msal-node@^2.13.1": version "2.13.1" resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.13.1.tgz#f144371275b7c3cbe564762b84772a9732457a47" @@ -252,6 +315,15 @@ jsonwebtoken "^9.0.0" uuid "^8.3.0" +"@azure/msal-node@^2.15.0": + version "2.16.1" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.16.1.tgz#89828832e8e6c8a88cecc4ef6d8d4e4352116b77" + integrity sha512-1NEFpTmMMT2A7RnZuvRl/hUmJU+GLPjh+ShyIqPktG2PvSd2yvPnzGd/BxIBAAvJG5nr9lH4oYcQXepDbaE7fg== + dependencies: + "@azure/msal-common" "14.16.0" + jsonwebtoken "^9.0.0" + uuid "^8.3.0" + "@azure/msal-node@^2.9.2": version "2.13.0" resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.13.0.tgz#007ffffa84e4f91f00f816b980740837ce6626fe" @@ -3048,7 +3120,7 @@ lodash.last "^3.0.0" lodash.max "^4.0.1" -"@microsoft/recognizers-text-number@1.3.1", "@microsoft/recognizers-text-number@~1.1.4", "@microsoft/recognizers-text-number@~1.3.1": +"@microsoft/recognizers-text-number@1.3.1", "@microsoft/recognizers-text-number@~1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@microsoft/recognizers-text-number/-/recognizers-text-number-1.3.1.tgz#b2bffbb0b5c44eec77121f0c510c5bb40f77c668" integrity sha512-JBxhSdihdQLQilCtqISEBw5kM+CNGTXzy5j5hNoZECNUEvBUPkAGNEJAeQPMP5abrYks29aSklnSvSyLObXaNQ== @@ -3057,6 +3129,17 @@ bignumber.js "^7.2.1" lodash "^4.17.21" +"@microsoft/recognizers-text-number@~1.1.4": + version "1.1.4" + resolved "https://registry.yarnpkg.com/@microsoft/recognizers-text-number/-/recognizers-text-number-1.1.4.tgz#1fbe0473322e6292bb93f9af86c6ca5ce05212d9" + integrity sha512-6EmlR+HR+eJBIX7sQby1vs6LJB64wxLowHaGpIU9OCXFvZ5Nb0QT8qh10rC40v3Mtrz4DpScXfSXr9tWkIO5MQ== + dependencies: + "@microsoft/recognizers-text" "~1.1.4" + bignumber.js "^7.2.1" + lodash.escaperegexp "^4.1.2" + lodash.sortby "^4.7.0" + lodash.trimend "^4.5.1" + "@microsoft/recognizers-text-sequence@~1.1.4": version "1.1.4" resolved "https://registry.yarnpkg.com/@microsoft/recognizers-text-sequence/-/recognizers-text-sequence-1.1.4.tgz#339f38292ba207cd78ee27defeea1ab79206fa5d" @@ -4350,10 +4433,12 @@ resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.5.tgz#434711bdd49eb5ee69d90c1d67c354a9a8ecb18b" integrity sha512-/JHkVHtx/REVG0VVToGRGH2+23hsYLHdyG+GrvoUGlGAd0ErauXDyvHtRI/7H7mzLm+tBCKA7pfcpkQ1lf58iQ== -"@types/ramda@0.26.0", "@types/ramda@~0.30.0": - version "0.26.0" - resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.26.0.tgz#ce45c2c61b3e510f907cc84941c8cdb99f089b6a" - integrity sha512-6FCz2E3SrkgbuV3piRNfjThSRyMbcIxHknnGYPfrg4k55PHnNRR80boVdl1AME/KfDW+FBVmKrKPyRbFo8HjaQ== +"@types/ramda@~0.30.0": + version "0.30.2" + resolved "https://registry.yarnpkg.com/@types/ramda/-/ramda-0.30.2.tgz#70661b20c1bb969589a551b7134ae75008ffbfb6" + integrity sha512-PyzHvjCalm2BRYjAU6nIB3TprYwMNOUY/7P/N8bSzp9W/yM2YrtGtAnnVtaCNSeOZ8DzKyFDvaqQs7LnWwwmBA== + dependencies: + types-ramda "^0.30.1" "@types/range-parser@*": version "1.2.3" @@ -8514,14 +8599,14 @@ find-cache-dir@^4.0.0: common-path-prefix "^3.0.0" pkg-dir "^7.0.0" -find-my-way@^7.2.0, find-my-way@^8.2.2: - version "8.2.2" - resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-8.2.2.tgz#f3e78bc6ead2da4fdaa201335da3228600ed0285" - integrity sha512-Dobi7gcTEq8yszimcfp/R7+owiT4WncAJ7VTTgFH1jYJ5GaG1FbhjwDG820hptN0QDFvzVY3RfCzdInvGPGzjA== +find-my-way@^7.2.0: + version "7.7.0" + resolved "https://registry.yarnpkg.com/find-my-way/-/find-my-way-7.7.0.tgz#d7b51ca6046782bcddd5a8435e99ad057e5a8876" + integrity sha512-+SrHpvQ52Q6W9f3wJoJBbAQULJuNEEQwBvlvYwACDhBTLOTMiQ0HYWh4+vC3OivGP2ENcTI1oKlFA2OepJNjhQ== dependencies: fast-deep-equal "^3.1.3" fast-querystring "^1.0.0" - safe-regex2 "^3.1.0" + safe-regex2 "^2.0.0" find-root@^1.1.0: version "1.1.0" @@ -10735,9 +10820,6 @@ lodash.once@^4.0.0: resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== -"lodash.pick@file:overrides/lodash.pick": - version "0.0.1" - lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" @@ -10748,6 +10830,11 @@ lodash.tonumber@^4.0.3: resolved "https://registry.yarnpkg.com/lodash.tonumber/-/lodash.tonumber-4.0.3.tgz#0b96b31b35672793eb7f5a63ee791f1b9e9025d9" integrity sha1-C5azGzVnJ5Prf1pj7nkfG56QJdk= +lodash.trimend@^4.5.1: + version "4.5.1" + resolved "https://registry.yarnpkg.com/lodash.trimend/-/lodash.trimend-4.5.1.tgz#12804437286b98cad8996b79414e11300114082f" + integrity sha512-lsD+k73XztDsMBKPKvzHXRKFNMohTjoTKIIo4ADLn5dA65LZ1BqlAvSXhR2rPEC3BgAUQnzMnorqDtqn2z4IHA== + lodash.union@^4.6.0: version "4.6.0" resolved "https://registry.yarnpkg.com/lodash.union/-/lodash.union-4.6.0.tgz#48bb5088409f16f1821666641c44dd1aaae3cd88" @@ -13464,10 +13551,10 @@ restore-cursor@^3.1.0: onetime "^5.1.0" signal-exit "^3.0.2" -ret@~0.4.0: - version "0.4.3" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.4.3.tgz#5243fa30e704a2e78a9b9b1e86079e15891aa85c" - integrity sha512-0f4Memo5QP7WQyUEAYUO3esD/XjOc3Zjjg5CPsAq1p8sIu0XPeMbHJemKA0BO7tV0X7+A0FoEpbmHXWxPyD3wQ== +ret@~0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.2.2.tgz#b6861782a1f4762dce43402a71eb7a283f44573c" + integrity sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ== retry@^0.12.0: version "0.12.0" @@ -13609,12 +13696,12 @@ safe-regex-test@^1.0.3: es-errors "^1.3.0" is-regex "^1.1.4" -safe-regex2@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-3.1.0.tgz#fd7ec23908e2c730e1ce7359a5b72883a87d2763" - integrity sha512-RAAZAGbap2kBfbVhvmnTFv73NWLMvDGOITFYTZBAaY8eR+Ir4ef7Up/e7amo+y1+AH+3PtLkrt9mvcTsG9LXug== +safe-regex2@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/safe-regex2/-/safe-regex2-2.0.0.tgz#b287524c397c7a2994470367e0185e1916b1f5b9" + integrity sha512-PaUSFsUaNNuKwkBijoAPHAK6/eM6VirvyPWlZ7BAQy4D+hCvh4B6lIG+nPdhbFfIbP+gTGBcrdsOaUs0F+ZBOQ== dependencies: - ret "~0.4.0" + ret "~0.2.0" safe-regex@^2.1.1: version "2.1.1" @@ -13733,22 +13820,22 @@ semver-greatest-satisfied-range@^2.0.0: resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== -semver@7.5.4, semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@7.5.4, semver@~7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" semver@^6.0.0, semver@^6.3.0, semver@^6.3.1: version "6.3.1" resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@~7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" +semver@^7.1.1, semver@^7.3.2, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== send@0.19.0: version "0.19.0" @@ -13769,15 +13856,15 @@ send@0.19.0: range-parser "~1.2.1" statuses "2.0.1" -send@^0.18.0, send@^0.19.0: - version "0.19.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.19.1.tgz#1c2563b2ee4fe510b806b21ec46f355005a369f9" - integrity sha512-p4rRk4f23ynFEfcD9LA0xRYngj+IyGiEYyqqOak8kaN0TvNmuxC2dcVeBn62GpCeR2CpWqyHCNScTP91QbAVFg== +send@^0.18.0: + version "0.18.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" + integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== dependencies: debug "2.6.9" depd "2.0.0" destroy "1.2.0" - encodeurl "~2.0.0" + encodeurl "~1.0.2" escape-html "~1.0.3" etag "~1.8.1" fresh "0.5.2" @@ -14366,7 +14453,16 @@ string-argv@~0.3.1: resolved "https://registry.yarnpkg.com/string-argv/-/string-argv-0.3.1.tgz#95e2fbec0427ae19184935f816d74aaa4c5c19da" integrity sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg== -"string-width-cjs@npm:string-width@^4.2.0", "string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.2.2, string-width@^4.2.3: +"string-width-cjs@npm:string-width@^4.2.0": + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +"string-width@^1.0.2 || 2 || 3 || 4", string-width@^4.0.0, string-width@^4.2.2, string-width@^4.2.3: version "4.2.3" resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== @@ -14481,7 +14577,14 @@ stringify-entities@^4.0.0: character-entities-html4 "^2.0.0" character-entities-legacy "^3.0.0" -"strip-ansi-cjs@npm:strip-ansi@^6.0.1", strip-ansi@6.0.1, strip-ansi@^6.0.1: +"strip-ansi-cjs@npm:strip-ansi@^6.0.1": + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-ansi@6.0.1, strip-ansi@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== @@ -14934,6 +15037,11 @@ ts-node@^10.9.2: v8-compile-cache-lib "^3.0.1" yn "3.1.1" +ts-toolbelt@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/ts-toolbelt/-/ts-toolbelt-9.6.0.tgz#50a25426cfed500d4a09bd1b3afb6f28879edfd5" + integrity sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w== + tsconfig-paths@^3.15.0: version "3.15.0" resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz#5299ec605e55b1abb23ec939ef15edaf483070d4" @@ -15123,6 +15231,13 @@ typedoc@^0.26.7: shiki "^1.16.2" yaml "^2.5.1" +types-ramda@^0.30.1: + version "0.30.1" + resolved "https://registry.yarnpkg.com/types-ramda/-/types-ramda-0.30.1.tgz#03d255128e3696aeaac76281ca19949e01dddc78" + integrity sha512-1HTsf5/QVRmLzcGfldPFvkVsAdi1db1BBKzi7iW3KBUlOICg/nKnFS+jGqDJS3YD8VsWbAh7JiHeBvbsw8RPxA== + dependencies: + ts-toolbelt "^9.6.0" + typescript-compare@^0.0.2: version "0.0.2" resolved "https://registry.yarnpkg.com/typescript-compare/-/typescript-compare-0.0.2.tgz#7ee40a400a406c2ea0a7e551efd3309021d5f425" @@ -15915,7 +16030,7 @@ workerpool@^6.5.1: resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0", wrap-ansi@^7.0.0: +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== @@ -15942,6 +16057,15 @@ wrap-ansi@^6.2.0: string-width "^4.1.0" strip-ansi "^6.0.0" +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"