From 1b59d1dc0670829fe5e3a06f76d5f4b6c495b4b7 Mon Sep 17 00:00:00 2001 From: Garma Date: Tue, 4 Jun 2024 11:47:01 +0200 Subject: [PATCH] WIP: replace sb with notification hub library and make tsc compile --- .../handler.ts | 21 +- .../handler.ts | 6 +- HandleNHNotifyMessageCallActivity/handler.ts | 21 +- .../handler.ts | 5 +- Info/handler.ts | 6 +- package.json | 4 +- utils/config.ts | 2 +- utils/healthcheck.ts | 19 +- utils/notification.ts | 283 ++------------ utils/notificationhubServicePartition.ts | 19 +- utils/types.ts | 1 + yarn.lock | 361 +++++++++++++----- 12 files changed, 351 insertions(+), 397 deletions(-) diff --git a/HandleNHCreateOrUpdateInstallationCallActivity/handler.ts b/HandleNHCreateOrUpdateInstallationCallActivity/handler.ts index e8cb7be..ca9f647 100644 --- a/HandleNHCreateOrUpdateInstallationCallActivity/handler.ts +++ b/HandleNHCreateOrUpdateInstallationCallActivity/handler.ts @@ -1,7 +1,10 @@ -import NotificationHubService = require("azure-sb/lib/notificationhubservice"); import { pipe } from "fp-ts/lib/function"; import * as TE from "fp-ts/lib/TaskEither"; import * as t from "io-ts"; +import { + createAppleInstallation, + NotificationHubsClient +} from "@azure/notification-hubs"; import { toString } from "../utils/conversions"; import { InstallationId } from "../generated/notifications/InstallationId"; @@ -33,7 +36,7 @@ export type ActivityBodyImpl = ActivityBody< >; export const getActivityBody = ( - buildNHService: (nhConfig: NotificationHubConfig) => NotificationHubService + buildNHService: (nhConfig: NotificationHubConfig) => NotificationHubsClient // eslint-disable-next-line @typescript-eslint/explicit-function-return-type ): ActivityBodyImpl => ({ input, logger }) => { logger.info(`INSTALLATION_ID=${input.installationId}`); @@ -41,14 +44,18 @@ export const getActivityBody = ( return pipe( createOrUpdateInstallation( nhService, - input.installationId, - input.platform, - input.pushChannel, - input.tags + createAppleInstallation({ + installationId: input.installationId, + pushChannel: input.pushChannel, + // FIX: this map is here as a workaround to the typescript error due to + // the readonly property + tags: input.tags.map(x => x) + }) ), TE.bimap( e => retryActivity(logger, toString(e)), - ActivityResultSuccess.encode + installation => + ActivityResultSuccess.encode({ kind: "SUCCESS", ...installation }) ) ); }; diff --git a/HandleNHDeleteInstallationCallActivity/handler.ts b/HandleNHDeleteInstallationCallActivity/handler.ts index 195996c..558f798 100644 --- a/HandleNHDeleteInstallationCallActivity/handler.ts +++ b/HandleNHDeleteInstallationCallActivity/handler.ts @@ -1,9 +1,9 @@ import { pipe } from "fp-ts/lib/function"; import * as TE from "fp-ts/lib/TaskEither"; -import { NotificationHubService } from "azure-sb"; import * as t from "io-ts"; import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; +import { NotificationHubsClient } from "@azure/notification-hubs"; import { toString } from "../utils/conversions"; import { @@ -32,7 +32,7 @@ export { ActivityResultSuccess } from "../utils/durable/activities"; */ export const getActivityBody = ( - buildNHService: (nhConfig: NotificationHubConfig) => NotificationHubService + buildNHService: (nhConfig: NotificationHubConfig) => NotificationHubsClient // eslint-disable-next-line @typescript-eslint/explicit-function-return-type ): ActivityBody => ({ input, @@ -45,7 +45,7 @@ export const getActivityBody = ( deleteInstallation(nhService, input.installationId), TE.bimap( e => failActivity(logger)(`ERROR=${toString(e)}`), - ActivityResultSuccess.encode + response => ActivityResultSuccess.encode({ kind: "SUCCESS", ...response }) ) ); }; diff --git a/HandleNHNotifyMessageCallActivity/handler.ts b/HandleNHNotifyMessageCallActivity/handler.ts index f9c5f83..fbf033d 100644 --- a/HandleNHNotifyMessageCallActivity/handler.ts +++ b/HandleNHNotifyMessageCallActivity/handler.ts @@ -3,9 +3,12 @@ import * as TE from "fp-ts/lib/TaskEither"; import * as t from "io-ts"; import { TelemetryClient } from "applicationinsights"; -import { NotificationHubService } from "azure-sb"; import { FiscalCode } from "@pagopa/ts-commons/lib/strings"; +import { + createAppleNotification, + NotificationHubsClient +} from "@azure/notification-hubs"; import { toString } from "../utils/conversions"; import { ActivityBody, @@ -39,7 +42,7 @@ export const ActivityResultSuccess = t.intersection([ export const getActivityBody = ( telemetryClient: TelemetryClient, - buildNHService: (nhConfig: NotificationHubConfig) => NotificationHubService, + buildNHService: (nhConfig: NotificationHubConfig) => NotificationHubsClient, fiscalCodeNotificationBlacklist: ReadonlyArray // eslint-disable-next-line @typescript-eslint/explicit-function-return-type ): ActivityBody => ({ @@ -57,7 +60,19 @@ export const getActivityBody = ( ? TE.of( ActivityResultSuccess.encode({ kind: "SUCCESS", skipped: true }) ) - : notify(nhService, input.message.installationId, input.message.payload); + : // FIX: use the right platform + pipe( + notify( + nhService, + createAppleNotification({ body: input.message.payload }) + ), + TE.map(notificationMessage => + ActivityResultSuccess.encode({ + kind: "SUCCESS", + ...notificationMessage + }) + ) + ); return pipe( doNotify, diff --git a/HandleNHNotifyMessageCallActivityQueue/handler.ts b/HandleNHNotifyMessageCallActivityQueue/handler.ts index ba69e12..11098fe 100644 --- a/HandleNHNotifyMessageCallActivityQueue/handler.ts +++ b/HandleNHNotifyMessageCallActivityQueue/handler.ts @@ -4,6 +4,7 @@ import * as TE from "fp-ts/TaskEither"; import * as t from "io-ts"; import { FiscalCode } from "@pagopa/ts-commons/lib/strings"; import { TelemetryClient } from "applicationinsights"; +import { createAppleNotification } from "@azure/notification-hubs"; import { errorsToError } from "../IsUserInActiveSubsetActivity/handler"; import { buildNHService, @@ -72,8 +73,8 @@ export const handle = ( pipe( notify( buildNHService(nhConfig), - message.installationId, - message.payload + // FIX: use the right platform + createAppleNotification({ body: message.payload }) ), TE.map(() => ({ kind: "SUCCESS", skipped: false })) ) diff --git a/Info/handler.ts b/Info/handler.ts index df807e2..69aed6e 100644 --- a/Info/handler.ts +++ b/Info/handler.ts @@ -58,7 +58,11 @@ export function Info(): express.RequestHandler { healthcheck.checkAzureStorageHealth( c.NOTIFICATIONS_STORAGE_CONNECTION_STRING ), - c => checkAzureNotificationHub(c.AZURE_NH_ENDPOINT, c.AZURE_NH_HUB_NAME), + c => + checkAzureNotificationHub( + c.AZURE_NH_CONNECTION_STRING, + c.AZURE_NH_HUB_NAME + ), ...[0, 1, 2, 3].map(i => (c: t.TypeOf) => checkAzureNotificationHub( c.AZURE_NOTIFICATION_HUB_PARTITIONS[i].endpoint, diff --git a/package.json b/package.json index 5bd6792..32cc8f1 100755 --- a/package.json +++ b/package.json @@ -26,11 +26,12 @@ "version": "auto-changelog -p --config .auto-changelog.json --unreleased && git add CHANGELOG.md" }, "dependencies": { + "@azure/notification-hubs": "^1.2.3", + "@azure/service-bus": "^7.9.4", "@pagopa/express-azure-functions": "^2.0.0", "@pagopa/io-functions-commons": "^28.0.0", "@pagopa/ts-commons": "^11.0.0", "applicationinsights": "^1.8.10", - "azure-sb": "^0.11.1", "azure-storage": "^2.10.3", "durable-functions": "^1.4.4", "express": "^4.15.3", @@ -43,7 +44,6 @@ "@azure/functions": "^1.2.2", "@pagopa/eslint-config": "^1.3.1", "@pagopa/openapi-codegen-ts": "^10.0.5", - "@types/azure-sb": "^0.0.38", "@types/express": "^4.17.9", "@types/jest": "^24.0.15", "@types/node-fetch": "^2.5.7", diff --git a/utils/config.ts b/utils/config.ts index c4467e2..a485452 100644 --- a/utils/config.ts +++ b/utils/config.ts @@ -89,7 +89,7 @@ const BaseConfig = t.intersection([ // Legacy Notification Hub configuration t.interface({ - AZURE_NH_ENDPOINT: NonEmptyString, + AZURE_NH_CONNECTION_STRING: NonEmptyString, AZURE_NH_HUB_NAME: NonEmptyString }), diff --git a/utils/healthcheck.ts b/utils/healthcheck.ts index db74852..a2352be 100644 --- a/utils/healthcheck.ts +++ b/utils/healthcheck.ts @@ -3,7 +3,6 @@ import { pipe } from "fp-ts/lib/function"; import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; import * as healthcheck from "@pagopa/io-functions-commons/dist/src/utils/healthcheck"; -import { NHResultSuccess } from "./notification"; import { buildNHService } from "./notificationhubServicePartition"; /** @@ -12,24 +11,16 @@ import { buildNHService } from "./notificationhubServicePartition"; * @returns either true or an array of error messages */ export const checkAzureNotificationHub = ( - AZURE_NH_ENDPOINT: NonEmptyString, + AZURE_NH_CONNECTION_STRING: NonEmptyString, AZURE_NH_HUB_NAME: NonEmptyString ): healthcheck.HealthCheck<"AzureNotificationHub"> => pipe( TE.tryCatch( () => - new Promise((resolve, reject) => - buildNHService({ - AZURE_NH_ENDPOINT, - AZURE_NH_HUB_NAME - }).deleteInstallation( - "aFakeInstallation", - (err, _) => - err == null - ? resolve({ kind: "SUCCESS" }) - : reject(err.message.replace(/\n/gim, " ")) // avoid newlines - ) - ), + buildNHService({ + AZURE_NH_CONNECTION_STRING, + AZURE_NH_HUB_NAME + }).deleteInstallation("aFakeInstallation"), healthcheck.toHealthProblems("AzureNotificationHub") ), TE.map(_ => true) diff --git a/utils/notification.ts b/utils/notification.ts index d38f219..dff2ba4 100644 --- a/utils/notification.ts +++ b/utils/notification.ts @@ -1,26 +1,17 @@ -/** - * This file contains the CreatedMessageEventSenderMetadata and Notification models. - */ - import * as t from "io-ts"; -import { pipe } from "fp-ts/lib/function"; - -import * as E from "fp-ts/lib/Either"; -import * as O from "fp-ts/lib/Option"; - import { TaskEither, tryCatch } from "fp-ts/lib/TaskEither"; -import { either, Either, left } from "fp-ts/lib/Either"; -import { NotificationHubService, Azure } from "azure-sb"; -import { - getKeepAliveAgentOptions, - newHttpsAgent -} from "@pagopa/ts-commons/lib/agent"; import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; -import { Platform, PlatformEnum } from "../generated/notifications/Platform"; -import { toString } from "./conversions"; +import { + Installation, + Notification, + NotificationHubsClient, + NotificationHubsMessageResponse, + NotificationHubsResponse +} from "@azure/notification-hubs"; + /** * Notification template. * @@ -46,270 +37,40 @@ export enum APNSPushType { MDM = "mdm" } -const httpsAgent = newHttpsAgent(getKeepAliveAgentOptions(process.env)); - -// Monkey patch azure-sb package in order to use agentkeepalive -// when calling the Notification Hub API. -// @FIXME: remove this part and upgrade to @azure/notification-hubs -// once this goes upstream: https://github.com/Azure/azure-sdk-for-js/pull/11977 -export class ExtendedNotificationHubService extends NotificationHubService { - constructor(hubName: string, endpointOrConnectionString: string) { - super(hubName, endpointOrConnectionString, "", ""); - } - - public _buildRequestOptions( - webResource: unknown, - body: unknown, - options: unknown, - // eslint-disable-next-line @typescript-eslint/ban-types - cb: Function - // eslint-disable-next-line @typescript-eslint/no-explicit-any - ): any { - // eslint-disable-next-line @typescript-eslint/no-explicit-any - const patchedCallback = (err: any, cbOptions: any): any => { - cb(err, { - ...cbOptions, - agent: httpsAgent - }); - }; - // eslint-disable-next-line @typescript-eslint/ban-ts-comment - // @ts-ignore -- although _buildRequestOptions is not defined in the Azure type NotificationHubService, we need to hack its internals to use keepalive feature. Compiling in strict mode would fail, so we prefer TS to just ignore this line - // eslint-disable-next-line no-underscore-dangle - return super._buildRequestOptions( - webResource, - body, - options, - patchedCallback - ); - } -} - -/** - * A template suitable for Apple's APNs. - * - * @see https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html - */ -const APNSTemplate: INotificationTemplate = { - body: - '{"aps": {"alert": {"title": "$(title)", "body": "$(message)"}}, "message_id": "$(message_id)"}' -}; - -/** - * Build a template suitable for Google's GCM. - * - * @see https://developers.google.com/cloud-messaging/concept-options - */ -const GCMTemplate: INotificationTemplate = { - body: - '{"data": {"title": "$(title)", "message": "$(message)", "message_id": "$(message_id)", "smallIcon": "ic_notification", "largeIcon": "ic_notification"}}' -}; - -// send the push notification only to the last -// device that set the installationId -// see https://docs.microsoft.com/en-us/azure/notification-hubs/notification-hubs-push-notification-registration-management#installations -// eslint-disable-next-line @typescript-eslint/no-explicit-any -export const toNotificationTag = (fiscalCodeHash: NonEmptyString): any => - `$InstallationId:{${fiscalCodeHash}}`; - -const createOrUpdateInstallationOptions = t.interface({ - installationId: t.string, - platform: t.keyof({ - adm: null, - apns: null, - gcm: null, - mpns: null, - wns: null - }), - pushChannel: t.string, - tags: t.array(t.string), - templates: t.interface({ - template: INotificationTemplate - }) -}); - -type CreateOrUpdateInstallationOptions = t.TypeOf< - typeof createOrUpdateInstallationOptions ->; - -const notifyPayload = t.interface({ - message: t.string, - message_id: t.string, - title: t.string -}); - -type NotifyPayload = t.TypeOf; -// NH result export const nhResultSuccess = t.interface({ kind: t.literal("SUCCESS") }); export type NHResultSuccess = t.TypeOf; -const successNH = (): NHResultSuccess => - nhResultSuccess.encode({ - kind: "SUCCESS" - }); - -/** Check if an Azure ServiceBus Dictionary is empty */ -const dictionaryIsEmpty = ( - obj: Azure.ServiceBus.Dictionary -): boolean => Object.keys(obj).length === 0; - -/** Compose the error message coming from NH */ -const composeNHErrorMessage = ( - err: Error, - response: Azure.ServiceBus.Response -): string => - pipe( - response, - O.fromNullable, - O.map( - res => - !res.body || dictionaryIsEmpty(res.body) - ? "No response body" - : toString(res.body).replace(/\n/gim, " ") // avoid newlines - ), - O.map(innerMessage => - innerMessage - ? `[error message: ${err.message}] [response: ${response.statusCode} - ${innerMessage}]` - : `[error message: ${err.message}] [response: ${response.statusCode}]` - ), - O.getOrElse(() => `[error message: ${err.message}]`) - ); - -/** - * Handle the Azure Notification Hub callback and - * return either an Error or a `NHResultSuccess` - * - * @param err The error message from Notification Hub, if any - * @param response The response from Notification Hub - * @returns either an Error or a success result - */ -const handleResponseOrError = ( - err: Error | null, - response: Azure.ServiceBus.Response -): Either => - err == null - ? either.of(successNH()) - : left(new Error(composeNHErrorMessage(err, response))); - -/** - * Call `Notify Message` to Notification Hub - * - * @param notificationHubService The Notification Hub to call - * @param installationId The `Installation Id` to notify - * @param payload The message payload - * @returns An `NHResultSuccess` or an `Error` - */ export const notify = ( - notificationHubService: NotificationHubService, - installationId: NonEmptyString, - payload: NotifyPayload -): TaskEither => + notificationHubService: NotificationHubsClient, + message: Notification +): TaskEither => tryCatch( - () => - new Promise((resolve, reject) => - notificationHubService.send( - toNotificationTag(installationId), - payload, - { - // Add required headers for APNS notification to iOS 13 - // https://azure.microsoft.com/en-us/updates/azure-notification-hubs-updates-ios13/ - headers: { - ["apns-priority"]: 10, - ["apns-push-type"]: APNSPushType.ALERT - } - }, - (err, response) => - pipe( - handleResponseOrError(err, response), - E.mapLeft(reject), - E.map(resolve) - ) - ) - ), + () => notificationHubService.sendNotification(message), errs => - new Error( - `Error while sending notification to NotificationHub [${installationId}] [${errs}]` - ) + new Error(`Error while sending notification to NotificationHub | ${errs}`) ); -/** - * Call `Create or Update Installation` to Notification Hub for an Installation Id - * - * @param notificationHubService The Notification Hub to call - * @param installationId The `Installation Id` to create or update - * @param platform The user's device platform (cgm or apns) - * @param pushChannel The user's device notification token - * @param tags An array of tags - * @returns An `NHResultSuccess` or an `Error` - */ export const createOrUpdateInstallation = ( - notificationHubService: NotificationHubService, - installationId: NonEmptyString, - platform: Platform, - pushChannel: string, - tags: ReadonlyArray -): TaskEither => { - const azureInstallationOptions: CreateOrUpdateInstallationOptions = { - // When a single active session per user is allowed, the installation that must be created or updated - // will have an unique installationId referred to that user. - // Otherwise the installationId provided by the client will be used. - installationId, - platform, - pushChannel, - tags: [...tags], - templates: { - template: platform === PlatformEnum.apns ? APNSTemplate : GCMTemplate - } - }; - - return tryCatch( - () => - new Promise((resolve, reject) => - notificationHubService.createOrUpdateInstallation( - azureInstallationOptions, - // eslint-disable-next-line sonarjs/no-identical-functions - (err, response) => - pipe( - handleResponseOrError(err, response), - E.mapLeft(reject), - E.map(resolve) - ) - ) - ), + notificationHubService: NotificationHubsClient, + installation: Installation +): TaskEither => + tryCatch( + () => notificationHubService.createOrUpdateInstallation(installation), errs => new Error( - `Error while creating or updating installation on NotificationHub [${installationId}] [${errs}]` + `Error while creating or updating installation on NotificationHub [${errs}]` ) ); -}; -/** - * Call `Delete Installation` to Notification Hub - * - * @param notificationHubService The Notification Hub to call - * @param installationId The `Installation Id` to delete - * @returns An `NHResultSuccess` or an `Error` - */ export const deleteInstallation = ( - notificationHubService: NotificationHubService, + notificationHubService: NotificationHubsClient, installationId: NonEmptyString -): TaskEither => +): TaskEither => tryCatch( - () => - new Promise((resolve, reject) => - notificationHubService.deleteInstallation( - installationId, - // eslint-disable-next-line sonarjs/no-identical-functions - (err, response) => - pipe( - handleResponseOrError(err, response), - E.mapLeft(reject), - E.map(resolve) - ) - ) - ), + () => notificationHubService.deleteInstallation(installationId), errs => new Error( `Error while deleting installation on NotificationHub [${installationId}] [${errs}]` diff --git a/utils/notificationhubServicePartition.ts b/utils/notificationhubServicePartition.ts index d13146d..acb1fa2 100644 --- a/utils/notificationhubServicePartition.ts +++ b/utils/notificationhubServicePartition.ts @@ -1,16 +1,15 @@ -import { NotificationHubService } from "azure-sb"; import * as t from "io-ts"; import * as E from "fp-ts/lib/Either"; import { pipe } from "fp-ts/lib/function"; import { NonEmptyString } from "@pagopa/ts-commons/lib/strings"; +import { NotificationHubsClient } from "@azure/notification-hubs"; import { InstallationId } from "../generated/notifications/InstallationId"; import { IConfig } from "./config"; -import { ExtendedNotificationHubService } from "./notification"; export const NotificationHubConfig = t.interface({ - AZURE_NH_ENDPOINT: NonEmptyString, + AZURE_NH_CONNECTION_STRING: NonEmptyString, AZURE_NH_HUB_NAME: NonEmptyString }); @@ -25,7 +24,7 @@ export type NotificationHubConfig = t.TypeOf; export const getNHLegacyConfig = ( envConfig: IConfig ): NotificationHubConfig => ({ - AZURE_NH_ENDPOINT: envConfig.AZURE_NH_ENDPOINT, + AZURE_NH_CONNECTION_STRING: envConfig.AZURE_NH_CONNECTION_STRING, AZURE_NH_HUB_NAME: envConfig.AZURE_NH_HUB_NAME }); @@ -56,7 +55,7 @@ export const getNotificationHubPartitionConfig = (envConfig: IConfig) => ( Error(`Unable to find Notification Hub partition for ${sha}`) ), E.map(partition => ({ - AZURE_NH_ENDPOINT: partition.endpoint, + AZURE_NH_CONNECTION_STRING: partition.connectionString, AZURE_NH_HUB_NAME: partition.name })), E.getOrElseW(e => { @@ -64,12 +63,8 @@ export const getNotificationHubPartitionConfig = (envConfig: IConfig) => ( }) ); -/** - * @param config The NotificationHubConfig - * @returns a NotificationHubService used to call Notification Hub APIs - */ export const buildNHService = ({ AZURE_NH_HUB_NAME, - AZURE_NH_ENDPOINT -}: NotificationHubConfig): NotificationHubService => - new ExtendedNotificationHubService(AZURE_NH_HUB_NAME, AZURE_NH_ENDPOINT); + AZURE_NH_CONNECTION_STRING +}: NotificationHubConfig): NotificationHubsClient => + new NotificationHubsClient(AZURE_NH_CONNECTION_STRING, AZURE_NH_HUB_NAME); diff --git a/utils/types.ts b/utils/types.ts index 24024ce..22834d1 100644 --- a/utils/types.ts +++ b/utils/types.ts @@ -50,6 +50,7 @@ export type NotificationHubPartition = t.TypeOf< typeof NotificationHubPartition >; export const NotificationHubPartition = t.interface({ + connectionString: NonEmptyString, endpoint: NonEmptyString, name: NonEmptyString, partitionRegex: RegExpFromString diff --git a/yarn.lock b/yarn.lock index 05112cd..89164b0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,6 +10,18 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" +"@azure-rest/core-client@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@azure-rest/core-client/-/core-client-2.0.0.tgz#34a83f7a9443848c08de98f5840ea9788c2e2d79" + integrity sha512-MXduH8EZCeH3Z4rMYgTlcI0O+iU9g6R0JKO9CyHni6gWulgBw+jFDB5vv3N1NbQ+xr1AvGjv//nYrqLTMvcSFg== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.3.0" + "@azure/core-rest-pipeline" "^1.5.0" + "@azure/core-tracing" "^1.0.1" + "@azure/core-util" "^1.0.0" + tslib "^2.6.2" + "@azure/abort-controller@^1.0.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" @@ -17,6 +29,29 @@ dependencies: tslib "^2.2.0" +"@azure/abort-controller@^2.0.0", "@azure/abort-controller@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" + integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== + dependencies: + tslib "^2.6.2" + +"@azure/core-amqp@^4.1.1": + version "4.3.0" + resolved "https://registry.yarnpkg.com/@azure/core-amqp/-/core-amqp-4.3.0.tgz#4aa196ac9b351e981420677e7b2b0925a405b6c5" + integrity sha512-Fl/ppFYx17iaIZtfqWahXQbR6hdsY+T/j268KdTMpzuSa2d55VRJIpxrbyPH5pPvqDHNCY3uz9DsrUuZCkOevQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.7.2" + "@azure/core-util" "^1.9.0" + "@azure/logger" "^1.1.2" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + rhea "^3.0.0" + rhea-promise "^3.0.0" + tslib "^2.6.2" + "@azure/core-auth@^1.3.0", "@azure/core-auth@^1.4.0": version "1.4.0" resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.4.0.tgz#6fa9661c1705857820dbc216df5ba5665ac36a9e" @@ -25,6 +60,59 @@ "@azure/abort-controller" "^1.0.0" tslib "^2.2.0" +"@azure/core-auth@^1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.7.2.tgz#558b7cb7dd12b00beec07ae5df5907d74df1ebd9" + integrity sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-util" "^1.1.0" + tslib "^2.6.2" + +"@azure/core-client@^1.0.0": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" + integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.4.0" + "@azure/core-rest-pipeline" "^1.9.1" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.6.1" + "@azure/logger" "^1.0.0" + tslib "^2.6.2" + +"@azure/core-lro@^2.7.2": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.7.2.tgz#787105027a20e45c77651a98b01a4d3b01b75a08" + integrity sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-util" "^1.2.0" + "@azure/logger" "^1.0.0" + tslib "^2.6.2" + +"@azure/core-paging@^1.4.0", "@azure/core-paging@^1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7" + integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA== + dependencies: + tslib "^2.6.2" + +"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.15.2", "@azure/core-rest-pipeline@^1.5.0", "@azure/core-rest-pipeline@^1.9.1": + version "1.16.0" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.0.tgz#631172e2fe0346cf4410d1c8e01ad98d849738e2" + integrity sha512-CeuTvsXxCUmEuxH5g/aceuSl6w2EugvNHKAtKKVdiX915EjJJxAwfzNNWZreNnbxHZ2fi0zaM6wwS23x2JVqSQ== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.4.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-rest-pipeline@^1.2.0": version "1.10.2" resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.10.2.tgz#eacd4ed9308f1f5cdac37332f36d4f3a4f3c01e4" @@ -48,6 +136,13 @@ dependencies: tslib "^2.2.0" +"@azure/core-tracing@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.1.2.tgz#065dab4e093fb61899988a1cdbc827d9ad90b4ee" + integrity sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA== + dependencies: + tslib "^2.6.2" + "@azure/core-util@^1.0.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.2.0.tgz#3499deba1fc36dda6f1912b791809b6f15d4a392" @@ -56,6 +151,22 @@ "@azure/abort-controller" "^1.0.0" tslib "^2.2.0" +"@azure/core-util@^1.1.0", "@azure/core-util@^1.1.1", "@azure/core-util@^1.2.0", "@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1" + integrity sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw== + dependencies: + "@azure/abort-controller" "^2.0.0" + tslib "^2.6.2" + +"@azure/core-xml@^1.0.0", "@azure/core-xml@^1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@azure/core-xml/-/core-xml-1.4.2.tgz#9ce65e9520ebafc7b0c1f7115596282bfc7b32f3" + integrity sha512-CW3MZhApe/S4iikbYKE7s83fjDBPIr2kpidX+hlGRwh7N4o1nIpQ/PfJTeioqhfqdMvRtheEl+ft64fyTaLNaA== + dependencies: + fast-xml-parser "^4.3.2" + tslib "^2.6.2" + "@azure/cosmos@^3.17.1": version "3.17.3" resolved "https://registry.yarnpkg.com/@azure/cosmos/-/cosmos-3.17.3.tgz#380398496af8ef3473ae0a9ad8cdbab32d91eb08" @@ -87,6 +198,54 @@ dependencies: tslib "^2.2.0" +"@azure/logger@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.2.tgz#3f4b876cefad328dc14aff8b850d63b611e249dc" + integrity sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg== + dependencies: + tslib "^2.6.2" + +"@azure/notification-hubs@^1.2.3": + version "1.2.3" + resolved "https://registry.yarnpkg.com/@azure/notification-hubs/-/notification-hubs-1.2.3.tgz#4e66ac3b4fdc050b53cddf65be4f01aa5b60a14c" + integrity sha512-4EU4t0+UXR9J3TeA8focWDHylcuTrdT4gMPstJUHxhZHpo8N5AoUFjDHN8ROAOyhO1WorSezqAa2In4Alg33KQ== + dependencies: + "@azure-rest/core-client" "^2.0.0" + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.7.2" + "@azure/core-lro" "^2.7.2" + "@azure/core-paging" "^1.6.2" + "@azure/core-rest-pipeline" "^1.15.2" + "@azure/core-tracing" "^1.1.2" + "@azure/core-util" "^1.9.0" + "@azure/core-xml" "^1.4.2" + "@azure/logger" "^1.1.2" + tslib "^2.6.2" + +"@azure/service-bus@^7.9.4": + version "7.9.4" + resolved "https://registry.yarnpkg.com/@azure/service-bus/-/service-bus-7.9.4.tgz#e0d3a9e79b30025f5b590eb410602ed678bf7ab9" + integrity sha512-LxFx6gVpMmxfVpTUEN4++CfXejGCCFvuFNSBovz70upmvZ/urBmqQoPOriXwezEQtaEo/NlFMIjR9AnJDmQIdA== + dependencies: + "@azure/abort-controller" "^1.0.0" + "@azure/core-amqp" "^4.1.1" + "@azure/core-auth" "^1.3.0" + "@azure/core-client" "^1.0.0" + "@azure/core-paging" "^1.4.0" + "@azure/core-rest-pipeline" "^1.1.0" + "@azure/core-tracing" "^1.0.0" + "@azure/core-util" "^1.1.1" + "@azure/core-xml" "^1.0.0" + "@azure/logger" "^1.0.0" + "@types/is-buffer" "^2.0.0" + buffer "^6.0.0" + is-buffer "^2.0.3" + jssha "^3.1.0" + long "^5.2.0" + process "^0.11.10" + rhea-promise "^3.0.0" + tslib "^2.2.0" + "@babel/code-frame@7.12.11": version "7.12.11" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.12.11.tgz#f4ad435aa263db935b8f10f2c552d23fb716a63f" @@ -1147,13 +1306,6 @@ resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== -"@types/azure-sb@^0.0.38": - version "0.0.38" - resolved "https://registry.yarnpkg.com/@types/azure-sb/-/azure-sb-0.0.38.tgz#409505e976c9ccd960c9ca7d87c35df85fd6b1ea" - integrity sha512-Ow5P1br3DmSwSw9gvMEhVA8V0Tiuk82128jAQmbftHZBGS1BqRC7R2SoFHjE5lfR6bGrC5CCn9Qtq9NBbnZ0TA== - dependencies: - "@types/node" "*" - "@types/babel__core@^7.1.0": version "7.20.0" resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.0.tgz#61bc5a4cae505ce98e1e36c5445e4bee060d8891" @@ -1234,6 +1386,13 @@ "@types/minimatch" "*" "@types/node" "*" +"@types/is-buffer@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@types/is-buffer/-/is-buffer-2.0.2.tgz#3dcd8e21e7d6c2d312d0b9f6cf23bb6ca1ef9f76" + integrity sha512-G6OXy83Va+xEo8XgqAJYOuvOMxeey9xM5XKkvwJNmN8rVdcB+r15HvHsG86hl86JvU0y1aa7Z2ERkNFYWw9ySg== + dependencies: + "@types/node" "*" + "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0": version "2.0.4" resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.4.tgz#8467d4b3c087805d63580480890791277ce35c44" @@ -1617,6 +1776,13 @@ agent-base@6, agent-base@^6.0.2: dependencies: debug "4" +agent-base@^7.0.2, agent-base@^7.1.0: + version "7.1.1" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" + integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== + dependencies: + debug "^4.3.4" + agentkeepalive@^4.1.4, agentkeepalive@^4.2.1: version "4.3.0" resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-4.3.0.tgz#bb999ff07412653c1803b3ced35e50729830a255" @@ -2011,32 +2177,6 @@ axios@^0.21.1: dependencies: follow-redirects "^1.14.0" -azure-common@^0.9.19: - version "0.9.27" - resolved "https://registry.yarnpkg.com/azure-common/-/azure-common-0.9.27.tgz#5a836a96a2b9c33a8c6895b4125a9c73d811c39d" - integrity sha512-5rPZth1SFvhcNeTYd//0A78Dl+OFqlL2QWyI1Jzw3mPMEoxdBRyc1wUr9PSzsWB3f9pzjSbmlBJC+dcFBshh+A== - dependencies: - dateformat "1.0.2-1.2.3" - duplexer "~0.1.1" - envconf "~0.0.4" - request "^2.81.0" - through "~2.3.4" - tunnel "~0.0.2" - underscore "^1.13.1" - validator "13.7.0" - xml2js "^0.4.19" - xmlbuilder "15.1.1" - -azure-sb@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/azure-sb/-/azure-sb-0.11.2.tgz#f5a45611140d42e918c917c8a0b6be2c2a5e8394" - integrity sha512-+7+MiugTLnVK8ZCYqX2Y0RhlmfofzyBUtjOw3ypU1iMft6vd0BvuGKlXdLMwdLEaw3TPpMSEIUyva91fNDsk7Q== - dependencies: - azure-common "^0.9.19" - mpns "2.1.3" - underscore "^1.13.1" - wns "~0.5.3" - azure-storage@^2.10.3, azure-storage@^2.10.5: version "2.10.7" resolved "https://registry.yarnpkg.com/azure-storage/-/azure-storage-2.10.7.tgz#50290ac638d1b709b89d961f333cc1c1a6722a05" @@ -2259,6 +2399,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + base@^0.11.1: version "0.11.2" resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" @@ -2436,6 +2581,14 @@ buffer-from@1.x, buffer-from@^1.0.0: resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== +buffer@^6.0.0, buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + builtins@^5.0.0: version "5.0.1" resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" @@ -3144,11 +3297,6 @@ data-urls@^1.0.0: whatwg-mimetype "^2.2.0" whatwg-url "^7.0.0" -dateformat@1.0.2-1.2.3: - version "1.0.2-1.2.3" - resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-1.0.2-1.2.3.tgz#b0220c02de98617433b72851cf47de3df2cdbee9" - integrity sha512-AXvW8g7tO4ilk5HgOWeDmPi/ZPaCnMJ+9Cg1I3p19w6mcvAAXBuuGEXAxybC+Djj1PSZUiHUcyoYu7WneCX8gQ== - dateformat@^3.0.0: version "3.0.3" resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-3.0.3.tgz#a6e37499a4d9a9cf85ef5872044d62901c9889ae" @@ -3446,11 +3594,6 @@ duplexer2@~0.1.0: dependencies: readable-stream "^2.0.2" -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - durable-functions@^1.4.4: version "1.5.4" resolved "https://registry.yarnpkg.com/durable-functions/-/durable-functions-1.5.4.tgz#5a4a9012e7c83a901a54c25da93e83e5cca85f0e" @@ -3554,11 +3697,6 @@ env-paths@^2.2.0: resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== -envconf@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/envconf/-/envconf-0.0.4.tgz#85675afba237c43f98de2d46adc0e532a4dcf48b" - integrity sha512-2m1iNXPrvG5FNoBEsYm8HTcsS5lViCZsRcLiuBZsOPX9G09bzv9+yo9Xp6ih8HSG3Mqhcd4M0n7sSD/QgY05Xg== - err-code@^2.0.2: version "2.0.3" resolved "https://registry.yarnpkg.com/err-code/-/err-code-2.0.3.tgz#23c2f3b756ffdfc608d30e27c9a941024807e7f9" @@ -3975,6 +4113,11 @@ event-target-shim@^5.0.0: resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + exec-sh@^0.2.0: version "0.2.2" resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36" @@ -4188,6 +4331,13 @@ 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-xml-parser@^4.3.2: + version "4.4.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.4.0.tgz#341cc98de71e9ba9e651a67f41f1752d1441a501" + integrity sha512-kLY3jFlwIYwBNDojclKsNAC12sfD6NwW74QB2CoNGPvtVxjliYehVunB3HYyNi+n4Tt1dAcgwYvmKF/Z18flqg== + dependencies: + strnum "^1.0.5" + fastest-levenshtein@^1.0.12: version "1.0.16" resolved "https://registry.yarnpkg.com/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#210e61b6ff181de91ea9b3d1b84fdedd47e034e5" @@ -5022,6 +5172,14 @@ http-proxy-agent@^5.0.0: agent-base "6" debug "4" +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + http-signature@~1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" @@ -5039,6 +5197,14 @@ https-proxy-agent@^5.0.0: agent-base "6" debug "4" +https-proxy-agent@^7.0.0: + version "7.0.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.4.tgz#8e97b841a029ad8ddc8731f26595bad868cb4168" + integrity sha512-wlwpilI7YdjSkWaQ/7omYBMTliDcmCN8OLihO6I9B86g06lMyAoqgoDpV0XqoaPOKj+0DIdAvnsWfyAAhmimcg== + dependencies: + agent-base "^7.0.2" + debug "4" + human-signals@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" @@ -5065,6 +5231,11 @@ iconv-lite@^0.6.2: dependencies: safer-buffer ">= 2.1.2 < 3.0.0" +ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + ignore-walk@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-5.0.1.tgz#5f199e23e1288f518d90358d461387788a154776" @@ -5282,7 +5453,7 @@ is-buffer@^1.1.5: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== -is-buffer@^2.0.0: +is-buffer@^2.0.0, is-buffer@^2.0.3: version "2.0.5" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== @@ -6675,6 +6846,11 @@ jsprim@^2.0.2: json-schema "0.4.0" verror "1.10.0" +jssha@^3.1.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/jssha/-/jssha-3.3.1.tgz#c5b7fc7fb9aa745461923b87df0e247dd59c7ea8" + integrity sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ== + "jsx-ast-utils@^2.4.1 || ^3.0.0": version "3.3.3" resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-3.3.3.tgz#76b3e6e6cece5c69d49a5792c3d01bd1a0cdc7ea" @@ -7123,6 +7299,11 @@ logform@^2.3.2, logform@^2.4.0: safe-stable-stringify "^2.3.1" triple-beam "^1.3.0" +long@^5.2.0: + version "5.2.3" + resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" + integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== + loose-envify@^1.0.0, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -7591,11 +7772,6 @@ modify-values@^1.0.0: resolved "https://registry.yarnpkg.com/modify-values/-/modify-values-1.0.1.tgz#b3939fa605546474e3e3e3c63d64bd43b4ee6022" integrity sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw== -mpns@2.1.3: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mpns/-/mpns-2.1.3.tgz#4328bb23ca79669e3383389074c898713e22ccb9" - integrity sha512-gPLNoVqwYoKUmNYZ2shMSdaE2XvHSRxWNzyG4DUi6Av7MSujyeOw/nj61nnQeuV/vke5E0Dni468xn0qxTHIZQ== - ms@2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" @@ -8752,6 +8928,11 @@ process-nextick-args@~2.0.0: resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + progress@^2.0.0: version "2.0.3" resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" @@ -9229,7 +9410,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.79.0, request@^2.81.0, request@^2.86.0, request@^2.87.0, request@^2.88.0: +request@^2.79.0, request@^2.86.0, request@^2.87.0, request@^2.88.0: version "2.88.2" resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== @@ -9353,6 +9534,22 @@ reusify@^1.0.4: resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== +rhea-promise@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rhea-promise/-/rhea-promise-3.0.2.tgz#b3416c59885f3dcf04d91322bb19d67a6a0ab70b" + integrity sha512-zBe9n4rIL2ELK8EMbXDfcR/MtJgzzzyd9TvM5Zd7oEvTTnHY4fgQqZlWdZvMfQbbZ5HKQUYRdyN50Ln+pmfpUA== + dependencies: + debug "^4.0.0" + rhea "^3.0.0" + tslib "^2.6.0" + +rhea@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rhea/-/rhea-3.0.2.tgz#3882ec45ed7620936c8c807833d17d84a5724ac7" + integrity sha512-0G1ZNM9yWin8VLvTxyISKH6KfR6gl1TW/1+5yMKPf2r1efhkzTLze09iFtT2vpDjuWIVtSmXz8r18lk/dO8qwQ== + dependencies: + debug "^4.3.3" + rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" @@ -9459,7 +9656,7 @@ sax@0.5.x: resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" integrity sha512-c0YL9VcSfcdH3F1Qij9qpYJFpKFKMXNOkLWFssBL3RuF7ZS8oZhllR2rWlCRjDTJsfq3R6wbSsaRU6o0rkEdNw== -sax@>=0.6.0, sax@^1.2.1, sax@^1.2.4: +sax@^1.2.1, sax@^1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -10117,6 +10314,11 @@ strip-json-comments@~2.0.1: resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== +strnum@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" + integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + subdirs@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/subdirs/-/subdirs-1.0.1.tgz#d65264787476e4caf7efc5498fb740c69f626d48" @@ -10347,7 +10549,7 @@ through2@~2.0.0: readable-stream "~2.3.6" xtend "~4.0.1" -through@2, "through@>=2.2.7 <3", through@~2.3.4: +through@2, "through@>=2.2.7 <3": version "2.3.8" resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== @@ -10510,6 +10712,11 @@ tslib@^2.2.0, tslib@^2.3.1, tslib@^2.5.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.0.tgz#42bfed86f5787aeb41d031866c8f402429e0fddf" integrity sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg== +tslib@^2.6.0, tslib@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" + integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== + tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" @@ -10524,11 +10731,6 @@ tunnel-agent@^0.6.0: dependencies: safe-buffer "^5.0.1" -tunnel@~0.0.2: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - tweetnacl@^0.14.3, tweetnacl@~0.14.0: version "0.14.5" resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" @@ -10632,7 +10834,7 @@ unc-path-regex@^0.1.2: resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" integrity sha512-eXL4nmJT7oCpkZsHZUOJo8hcX3GbsiDOa0Qu9F646fi8dT3XuSVopVqAcEiVzSKKH7UoDti23wNX3qGFxcW5Qg== -underscore@^1.12.1, underscore@^1.13.1: +underscore@^1.12.1: version "1.13.6" resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== @@ -10864,11 +11066,6 @@ validate-npm-package-name@^4.0.0: dependencies: builtins "^5.0.0" -validator@13.7.0, validator@~13.7.0: - version "13.7.0" - resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" - integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== - validator@^10.0.0: version "10.11.0" resolved "https://registry.yarnpkg.com/validator/-/validator-10.11.0.tgz#003108ea6e9a9874d31ccc9e5006856ccd76b228" @@ -10879,6 +11076,11 @@ validator@^13.6.0, validator@^13.7.0: resolved "https://registry.yarnpkg.com/validator/-/validator-13.9.0.tgz#33e7b85b604f3bbce9bb1a05d5c3e22e1c2ff855" integrity sha512-B+dGG8U3fdtM0/aNK4/X8CXq/EcxU2WPrPEkJGslb47qyHsxmbggTWK0yEA4qnYVNF+nxNlN88o14hIcPmSIEA== +validator@~13.7.0: + version "13.7.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.7.0.tgz#4f9658ba13ba8f3d82ee881d3516489ea85c0857" + integrity sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw== + vary@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" @@ -11105,11 +11307,6 @@ winston@^3.1.0, winston@^3.2.1: triple-beam "^1.3.0" winston-transport "^4.5.0" -wns@~0.5.3: - version "0.5.4" - resolved "https://registry.yarnpkg.com/wns/-/wns-0.5.4.tgz#ad8e2ee60e675557da9610d94444a7f59eceaf78" - integrity sha512-WYiJ7khIwUGBD5KAm+YYmwJDDRzFRs4YGAjtbFSoRIdbn9Jcix3p9khJmpvBTXGommaKkvduAn+pc9l4d9yzVQ== - word-wrap@^1.2.3, word-wrap@~1.2.3: version "1.2.3" resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" @@ -11228,14 +11425,6 @@ xml-name-validator@^3.0.0: resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== -xml2js@^0.4.19: - version "0.4.23" - resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.4.23.tgz#a0c69516752421eb2ac758ee4d4ccf58843eac66" - integrity sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug== - dependencies: - sax ">=0.6.0" - xmlbuilder "~11.0.0" - xml2js@~0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.2.8.tgz#9b81690931631ff09d1957549faf54f4f980b3c2" @@ -11243,21 +11432,11 @@ xml2js@~0.2.8: dependencies: sax "0.5.x" -xmlbuilder@15.1.1: - version "15.1.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-15.1.1.tgz#9dcdce49eea66d8d10b42cae94a79c3c8d0c2ec5" - integrity sha512-yMqGBqtXyeN1e3TGYvgNgDVZ3j84W4cwkOXQswghol6APgZWaff9lnbvN7MHYJOiXsvGPXtjTYJEiC9J2wv9Eg== - xmlbuilder@^9.0.7: version "9.0.7" resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== -xmlbuilder@~11.0.0: - version "11.0.1" - resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" - integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== - xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.1: version "4.0.2" resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54"