diff --git a/.gitignore b/.gitignore index d0432a6a..d978811c 100644 --- a/.gitignore +++ b/.gitignore @@ -12,4 +12,5 @@ eastern-rider-263712-9376010a1184.json config/addOnNeed.json config/headers.json config_kuber -output/* \ No newline at end of file +output/* +savedFolder/* \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index dc758274..144277ae 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -292,3 +292,181 @@ documentation/Documentation-Kexa.md was changed initKexa.ps1 was changed +## 1.8.0-SNAPSHOT.113.3054896 + +### Files added: 0 + +### Files changed: 1 + +README.md was changed + + +## 1.8.0-SNAPSHOT.118.4150a43 + +### Files added: 0 + +### Files changed: 3 + +Kexa/services/addOn/azureGathering.service.ts was changed + +Kexa/services/analyse.service.ts was changed + +initKexa.ps1 was changed + + +## 1.8.0-SNAPSHOT.124.7d39677 + +### Files added: 0 + +### Files changed: 2 + +.gitignore was changed + +initKexa.ps1 was changed + + +## 1.8.0-SNAPSHOT.127.e802885 + +### Files added: 0 + +### Files changed: 3 + +Kexa/rules/OperationalExcellence.yaml was changed + +Kexa/services/addOn/azureGathering.service.ts was changed + +Kexa/services/addOn/display/azureDisplay.service.ts was changed + + +## 1.8.0-SNAPSHOT.129.168f9b5 + +### Files added: 0 + +### Files changed: 2 + +README.md was changed + +documentation/Documentation-Kexa.md was changed + + +## 1.8.0-SNAPSHOT.132.427091f + +### Files added: 0 + +### Files changed: 1 + +README.md was changed + + +## 1.8.0-SNAPSHOT.135.a605443 + +### Files added: 0 + +### Files changed: 1 + +README.md was changed + + +## 1.10.0-SNAPSHOT.25.9ee4861 + +### Files added: 0 + +### Files changed: 0 + + +## 1.10.0-SNAPSHOT.29.a6375e2 + +### Files added: 0 + +### Files changed: 13 + +Kexa/main.ts was changed + +Kexa/models/settingFile/config.models.ts was changed + +Kexa/services/addOn.service.ts was changed + +Kexa/services/addOn/awsGathering.service.ts was changed + +Kexa/services/addOn/azureGathering.service.ts was changed + +Kexa/services/addOn/gcpGathering.service.ts was changed + +Kexa/services/addOn/githubGathering.service.ts was changed + +Kexa/services/addOn/googleWorkspaceGathering.service.ts was changed + +Kexa/services/addOn/kubernetesGathering.service.ts was changed + +Kexa/services/addOn/o365Gathering.service.ts was changed + +Kexa/services/analyse.service.ts was changed + +config/default.json was changed + +documentation/Documentation-Kexa.md was changed + + +## 1.10.0-SNAPSHOT.31.b2209bd + +### Files added: 0 + +### Files changed: 1 + +package-lock.json was changed + + +## 1.10.0-SNAPSHOT.34.fd4abd2 + +### Files added: 3 + +Kexa/emails/teams.ts was added + +Kexa/helpers/extractURL.ts was added + +Kexa/helpers/spliter.ts was added + +### Files changed: 8 + +Kexa/emails/teams.ts was changed + +Kexa/helpers/extractURL.ts was changed + +Kexa/helpers/spliter.ts was changed + +Kexa/services/alerte.service.ts was changed + +Kexa/services/analyse.service.ts was changed + +documentation/Documentation-Kexa.md was changed + +package-lock.json was changed + +package.json was changed + + +## 1.10.0-SNAPSHOT.40.9bbdd02 + +### Files added: 1 + +Kexa/helpers/statsNumbers.ts was added + +### Files changed: 8 + +Kexa/helpers/statsNumbers.ts was changed + +Kexa/main.ts was changed + +Kexa/rules/Economy.yaml was changed + +Kexa/services/addOn/azureGathering.service.ts was changed + +config/default.json was changed + +documentation/AWS.md was changed + +package-lock.json was changed + +package.json was changed + + diff --git a/Kexa/emails/teams.ts b/Kexa/emails/teams.ts new file mode 100644 index 00000000..eb68faaa --- /dev/null +++ b/Kexa/emails/teams.ts @@ -0,0 +1,55 @@ +const levelAlert = ["info", "warning", "error", "fatal"]; +export const Teams = { + //https://learn.microsoft.com/en-us/microsoftteams/platform/webhooks-and-connectors/how-to/connectors-using?tabs=cURL + OneTeams: (color:string, subject:string, url:string, description:string) => { + return JSON.stringify({ + "@type": "MessageCard", + "@context": "http://schema.org/extensions", + "themeColor": color, + "summary": subject, + "sections": [ + { + "activityTitle": subject, + "activitySubtitle": description, + "activityImage": "https://kexa.io/kexa-no-background-color.png", + "markdown": true + } + ], + "potentialAction": [ + { + "@type": "OpenUri", + "name": "Go to ressource", + "targets": [ + { + "os": "default", + "uri": url + } + ] + } + ] + }); + }, + GlobalTeams: (color:string, subject:string, text:string, errors:{ [x: string]: number; }) => { + return JSON.stringify({ + "@type": "MessageCard", + "@context": "http://schema.org/extensions", + "themeColor": color, + "summary": subject, + "sections": [ + { + "activityTitle": subject, + "activitySubtitle": "Kexa by 4urcloud", + "activityImage": "https://kexa.io/kexa-no-background-color.png", + "text": text, + "facts": Object.entries(errors).map(([name, value]) => { + return { + "name": name, + "value": value.toString() + }; + }), + "markdown": true + } + ] + }); + }, +}; \ No newline at end of file diff --git a/Kexa/helpers/extractURL.ts b/Kexa/helpers/extractURL.ts new file mode 100644 index 00000000..4fe3f753 --- /dev/null +++ b/Kexa/helpers/extractURL.ts @@ -0,0 +1,34 @@ +const jsdom = require("jsdom") +const { JSDOM } = jsdom +global.DOMParser = new JSDOM().window.DOMParser + +export const extractURL = (text: string): string | null => { + return extractFirstURLFromHTML(text)??extractFirstURL(text); +} + +function extractFirstURLFromHTML(html: string): string | null { + const parser = new DOMParser(); + const doc = parser.parseFromString(html, 'text/html'); + + const urlElements = Array.from(doc.querySelectorAll('a[href], img[src]')); + + for (const element of urlElements) { + const url = (element as HTMLAnchorElement).href || (element as HTMLImageElement).src; + if (url) { + return url; + } + } + + return null; +} + +function extractFirstURL(input:string): string | null { + const urlRegex = /(https?:\/\/[^\s]+)/g; + const matches = input.match(urlRegex); + + if (matches && matches.length > 0) { + return matches[0]; + } + + return null; +} \ No newline at end of file diff --git a/Kexa/helpers/spliter.ts b/Kexa/helpers/spliter.ts new file mode 100644 index 00000000..c21e219a --- /dev/null +++ b/Kexa/helpers/spliter.ts @@ -0,0 +1,21 @@ +export const splitProperty = (prop: string, delimiter:string, ignore:string="/"):string[] => { + const result = []; + let current = ""; + let escape = false; + + for (const char of prop) { + if (char === delimiter && !escape) { + result.push(current); + current = ""; + } else if (char === ignore && !escape) { + escape = true; + } else { + if(escape && char !== delimiter) current += ignore; + current += char; + escape = false; + } + } + + result.push(current); + return result; +} \ No newline at end of file diff --git a/Kexa/helpers/statsNumbers.ts b/Kexa/helpers/statsNumbers.ts new file mode 100644 index 00000000..cdd888d3 --- /dev/null +++ b/Kexa/helpers/statsNumbers.ts @@ -0,0 +1,37 @@ +export function getMinMaxMeanMedian(array: Array): MinMaxMeanMedian { + let min = array[0]; + let max = array[0]; + let sum = 0; + for(const num of array){ + if(num < min) min = num; + if(num > max) max = num; + sum += num; + } + return { + "min": min, + "max": max, + "mean": sum/array.length, + "median": array[Math.floor(array.length/2)], + } +} + +export function convertToPercentage(num: number, total: number): number { + // pourcentage avec 2 chiffres après la virgule + return Math.round((num/total)*10000)/100; +} + +export function convertMinMaxMeanMedianToPercentage(stat:MinMaxMeanMedian, total:number): MinMaxMeanMedian { + return { + "min": convertToPercentage(stat.min, total), + "max": convertToPercentage(stat.max, total), + "mean": convertToPercentage(stat.mean, total), + "median": convertToPercentage(stat.median, total), + } +} + +export interface MinMaxMeanMedian { + min: number, + max: number, + mean: number, + median: number, +} \ No newline at end of file diff --git a/Kexa/main.ts b/Kexa/main.ts index 2171bf2e..11657377 100644 --- a/Kexa/main.ts +++ b/Kexa/main.ts @@ -46,15 +46,13 @@ export async function main() { let settings = await gatheringRules(await getEnvVar("RULESDIRECTORY")??"./Kexa/rules"); context?.log("settings", settings); if(settings.length != 0){ - let resources = {}; - resources = await loadAddOns(resources); + let resources = await loadAddOns(settings); context?.log("resources", resources); if(args.o) createFileSync(JSON.stringify(resources), folderOutput + "/resources/"+ new Date().toISOString().slice(0, 16).replace(/[-T:/]/g, '') +".json", true); context?.log("good"); settings.forEach(setting => { context?.log("setting", setting); let result = checkRules(setting.rules, resources, setting.alert); - logger.debug(result); if(setting.alert.global.enabled){ let render_table = renderTableAllScan(result.map(scan => scan.filter(value => value.error.length>0))); let render_table_loud = renderTableAllScanLoud(result.map(scan => scan.filter(value => value.loud))); diff --git a/Kexa/models/settingFile/config.models.ts b/Kexa/models/settingFile/config.models.ts index d9776442..ec9f0777 100644 --- a/Kexa/models/settingFile/config.models.ts +++ b/Kexa/models/settingFile/config.models.ts @@ -27,4 +27,5 @@ export interface Config { name?: string; description?: string; prefix?: string; + ObjectNameNeed?: Array; } diff --git a/Kexa/rules/Economy.yaml b/Kexa/rules/Economy.yaml index 5c164517..23bf902b 100644 --- a/Kexa/rules/Economy.yaml +++ b/Kexa/rules/Economy.yaml @@ -138,4 +138,19 @@ conditions: - property: consumedUnits condition: SUP - value: 0 \ No newline at end of file + value: 0 + - name: "not-under-use-VM" + description: "this rule is if a VM is under-used (50% > CPU or 50%>RAM over 2 weeks) " + applied: true + level: 1 + cloudProvider: azure + objectName: vm + conditions: + - operator: OR + criteria: + - property: instanceView.percentageCPU.mean + condition: SUP + value: 50 + - property: instanceView.availableMemoryBytes.mean + condition: SUP + value: 50 \ No newline at end of file diff --git a/Kexa/rules/OperationalExcellence.yaml b/Kexa/rules/OperationalExcellence.yaml index 4c780221..4c9ab1eb 100644 --- a/Kexa/rules/OperationalExcellence.yaml +++ b/Kexa/rules/OperationalExcellence.yaml @@ -108,6 +108,18 @@ cloudProvider: azure objectName: mlJobs conditions: - - property: properties.status - condition: DIFFERENT - value: Failed \ No newline at end of file + - operator: NAND + criteria: + - property: workspace + condition: EQUAL + value: "Test-Kexa-Machine-Learning" #name of the workspace + - property: properties.displayName + condition: EQUAL + value: "hello-world-example" #name of the job + - property: properties.status + condition: EQUAL + value: Failed + - property: properties.properties.StartTimeUtc + condition: DATE_INF + value: 0 0 0 1 0 0 + date: "YYYY-MM-DD hh:mm:ss" \ No newline at end of file diff --git a/Kexa/services/addOn.service.ts b/Kexa/services/addOn.service.ts index c5580b37..2cba6c96 100644 --- a/Kexa/services/addOn.service.ts +++ b/Kexa/services/addOn.service.ts @@ -1,24 +1,26 @@ import { Provider, ProviderResource } from "../models/providerResource.models"; import { Header } from "../models/settingFile/header.models"; import { writeStringToJsonFile } from "../helpers/files" -const configuration = require('node-config-ts').config; +import { Capacity } from "../models/settingFile/capacity.models"; +import {getContext, getNewLogger} from "./logger.service"; +import { SettingFile } from "../models/settingFile/settingFile.models"; +const configuration = require('node-config-ts').config; const mainFolder = 'Kexa'; const serviceAddOnPath = './' + mainFolder + '/services/addOn'; const fs = require('fs'); - -import {getContext, getNewLogger} from "./logger.service"; -import { Capacity } from "../models/settingFile/capacity.models"; const logger = getNewLogger("LoaderAddOnLogger"); -export async function loadAddOns(resources: ProviderResource): Promise{ + +export async function loadAddOns(settings:SettingFile[]): Promise{ + let resources: ProviderResource = {}; let context = getContext(); logger.info("Loading addOns"); context?.log("Loading addOns"); const addOnNeed = require('../../config/addOnNeed.json'); const files = fs.readdirSync(serviceAddOnPath); const promises = files.map(async (file: string) => { - return await loadAddOn(file, addOnNeed); + return await loadAddOn(file, addOnNeed, settings); }); const results = await Promise.all(promises); results.forEach((result: { key: string; data: Provider[]; }) => { @@ -29,7 +31,7 @@ export async function loadAddOns(resources: ProviderResource): Promise { +async function loadAddOn(file: string, addOnNeed: any, settings:SettingFile[]): Promise<{ key: string; data: Provider|null; } | null> { let context = getContext(); try{ if (file.endsWith('Gathering.service.ts')){ @@ -43,6 +45,10 @@ async function loadAddOn(file: string, addOnNeed: any): Promise<{ key: string; d const { collectData } = await import(`./addOn/${file.replace(".ts", ".js") }`); let start = Date.now(); const addOnConfig = (configuration.hasOwnProperty(nameAddOn)) ? configuration[nameAddOn] : null; + addOnConfig?.forEach((config: any) => { + config.ObjectNameNeed = [] + config.rules.forEach((rulesName: string) => config.ObjectNameNeed = [...addOnNeed["objectNameNeed"][rulesName][nameAddOn], ...config.ObjectNameNeed]); + }); const data = await collectData(addOnConfig); let delta = Date.now() - start; context?.log(`AddOn ${nameAddOn} collect in ${delta}ms`); diff --git a/Kexa/services/addOn/awsGathering.service.ts b/Kexa/services/addOn/awsGathering.service.ts index cb4442b7..0ffde0e7 100644 --- a/Kexa/services/addOn/awsGathering.service.ts +++ b/Kexa/services/addOn/awsGathering.service.ts @@ -30,6 +30,7 @@ let rdsClient: RDS; let s3Client: S3; let ecsClient: ECS; let ecrClient: ECR; +let currentConfig: AwsConfig; //////////////////////////////////////////////////////////////////////////////////////////////////////// //// LISTING CLOUD RESOURCES /////////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -37,6 +38,7 @@ export async function collectData(awsConfig: AwsConfig[]): Promise(); for (let oneConfig of awsConfig ?? []) { + currentConfig = oneConfig; let awsResource = { "ec2Instance": null, "ec2SG": null, @@ -169,6 +171,7 @@ function addRegion(resources:any, region:string) { } async function ec2SGListing(client: EC2, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("ec2SG")) return null; try { const data = await client.describeSecurityGroups().promise(); let jsonData = JSON.parse(JSON.stringify(data.SecurityGroups)); @@ -182,6 +185,7 @@ async function ec2SGListing(client: EC2, region: string): Promise { } async function ec2VolumesListing(client: EC2, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("ec2Volume")) return null; try { const data = await client.describeVolumes().promise(); let jsonData = JSON.parse(JSON.stringify(data.Volumes)); @@ -195,6 +199,7 @@ async function ec2VolumesListing(client: EC2, region: string): Promise { } async function ec2InstancesListing(client: EC2, region: string): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("ec2Instance")) return null; try { const data = await client.describeInstances().promise(); let jsonData = JSON.parse(JSON.stringify(data.Reservations)); @@ -208,6 +213,7 @@ async function ec2InstancesListing(client: EC2, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("rds")) return null; try { const data = await client.describeDBInstances().promise(); let jsonData = JSON.parse(JSON.stringify(data.DBInstances)); @@ -221,6 +227,7 @@ async function rdsInstancesListing(client: RDS, region: string): Promise { } async function resourceGroupsListing(client: ResourceGroups, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("resourceGroup")) return null; try { const data = await client.listGroups().promise(); let jsonData = JSON.parse(JSON.stringify(data.Groups)); @@ -234,6 +241,7 @@ async function resourceGroupsListing(client: ResourceGroups, region: string): Pr } async function tagsValueListing(client: ResourceGroupsTaggingAPI, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("tagsValue")) return null; try { interface TagParams {Key: string;} const dataKeys = await client.getTagKeys().promise(); @@ -255,6 +263,7 @@ async function tagsValueListing(client: ResourceGroupsTaggingAPI, region: string } async function s3BucketsListing(client: S3, region: string): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("s3")) return null; try { const data = await client.listBuckets().promise(); let jsonData = JSON.parse(JSON.stringify(data.Buckets)); @@ -268,6 +277,7 @@ async function s3BucketsListing(client: S3, region: string): Promise | } async function ecsClusterListing(client: ECS, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("ecsCluster")) return null; try { const data = await client.describeClusters().promise(); let jsonData = JSON.parse(JSON.stringify(data.clusters)); @@ -281,6 +291,7 @@ async function ecsClusterListing(client: ECS, region: string): Promise { } async function ecrImagesListing(client: ECR, region: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("ecrImage")) return null; try { const data = await client.describeRepositories().promise(); let jsonData = JSON.parse(JSON.stringify(data.repositories)); diff --git a/Kexa/services/addOn/azureGathering.service.ts b/Kexa/services/addOn/azureGathering.service.ts index ef037241..b60af38d 100644 --- a/Kexa/services/addOn/azureGathering.service.ts +++ b/Kexa/services/addOn/azureGathering.service.ts @@ -26,11 +26,13 @@ import { } from "@azure/arm-network"; import { ComputeManagementClient, Disk, VirtualMachine } from "@azure/arm-compute"; import { ResourceManagementClient , ResourceGroup } from "@azure/arm-resources"; +import { MetricsListOptionalParams, MonitorClient } from "@azure/arm-monitor"; import * as ckiNetworkSecurityClass from "../../class/azure/ckiNetworkSecurityGroup.class"; import { AzureResources } from "../../models/azure/resource.models"; import { DefaultAzureCredential } from "@azure/identity"; import { getConfigOrEnvVar, setEnvVar } from "../manageVarEnvironnement.service"; import { AzureConfig } from "../../models/azure/config.models"; +import axios from "axios"; /////////////////////////////////////////////////////////////////////////////////////////////////////// const { ContainerServiceClient } = require("@azure/arm-containerservice"); @@ -41,6 +43,8 @@ const logger = getNewLogger("AzureLogger"); let computeClient: ComputeManagementClient; let resourcesClient : ResourceManagementClient ; let networkClient: NetworkManagementClient; +let monitorClient: MonitorClient; +let currentConfig: AzureConfig; //////////////////////////////////////////////////////////////////////////////////////////////////////// //// LISTING CLOUD RESOURCES //////////////////////////////////////////////////////////////////////////////////////////////////////// @@ -48,6 +52,7 @@ export async function collectData(azureConfig:AzureConfig[]): Promise(); for(let config of azureConfig??[]){ + currentConfig = config; let azureResource = { "vm": null, "rg": null, @@ -87,13 +92,14 @@ export async function collectData(azureConfig:AzureConfig[]): Promise { + if(!currentConfig.ObjectNameNeed?.includes("sp")) return null; const { GraphRbacManagementClient } = require("@azure/graph"); logger.info("starting getSPKeyInformation"); try { @@ -149,6 +156,7 @@ export async function getSPKeyInformation(credential: DefaultAzureCredential, su //ip list export async function ipListing(client:NetworkManagementClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("ip")) return null; logger.info("starting ipListing"); try{ const resultList = new Array; @@ -164,6 +172,7 @@ export async function ipListing(client:NetworkManagementClient): Promise { + if(!currentConfig.ObjectNameNeed?.includes("aks")) return null; logger.info("starting aksListing"); try{ const client = new ContainerServiceClient(credential, subscriptionId); @@ -180,6 +189,7 @@ export async function aksListing(credential: DefaultAzureCredential, subscriptio //network security group list export async function networkSecurityGroupListing(client:NetworkManagementClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("nsg")) return null; logger.info("starting networkSecurityGroupListing"); try { const resultList = new Array; @@ -196,6 +206,7 @@ export async function networkSecurityGroupListing(client:NetworkManagementClient //virtual network list export async function virtualNetworksListing(client:NetworkManagementClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("virtualNetwork")) return null; logger.info("starting virtualNetworksListing"); try { const resultList = new Array; @@ -212,6 +223,7 @@ export async function virtualNetworksListing(client:NetworkManagementClient): Pr //network list export async function networkInterfacesListing(client:NetworkManagementClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("networkInterfaces")) return null; logger.info("starting networkInterfacesListing"); try { const resultList = new Array; @@ -227,6 +239,7 @@ export async function networkInterfacesListing(client:NetworkManagementClient): //disks.list export async function disksListing(client:ComputeManagementClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("disk")) return null; logger.info("starting disksListing"); try { const resultList = new Array; @@ -241,12 +254,24 @@ export async function disksListing(client:ComputeManagementClient): Promise|null> { +export async function virtualMachinesListing(client:ComputeManagementClient, monitor:MonitorClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("vm")) return null; logger.info("starting virtualMachinesListing"); try { const resultList = new Array; for await (let item of client.virtualMachines.listAll()){ - resultList.push(item); + let vm:any = item; + let rg = item.id?.split("/")[4] ?? ""; + vm.resourceGroupName = rg; + const promises = [ + getMetrics(monitor, item.id??""), + getVMDetails(item.hardwareProfile?.vmSize??""), + ]; + const [metrics, vmDetails] = await Promise.all(promises); + vm.instanceView = metrics; + vm.details = vmDetails; + vm.instanceView.availableMemoryBytes = convertMinMaxMeanMedianToPercentage(vm.instanceView.availableMemoryBytes, convertGbToBytes(vm.details?.MemoryGb??0)); + resultList.push(vm); } return resultList; }catch (err) { @@ -255,7 +280,66 @@ export async function virtualMachinesListing(client:ComputeManagementClient): Pr } } +function convertGbToBytes(gb: number): number { + return gb * 1024 * 1024 * 1024; +} + +const VMSizeMemory: {[x:string]: any} = {} +async function getVMDetails(VMSize:string): Promise { + if(VMSizeMemory[VMSize]) return VMSizeMemory[VMSize]; + try { + let capabilities = (await axios.post("https://api.thecloudprices.com/api/props/sku", {"name": VMSize})).data.message.CommonCapabilities; + capabilities.MemoryGb = parseFloat(capabilities.MemoryGb.$numberDecimal); + return capabilities; + } catch (err) { + logger.debug("error in getVMDetails:"+err); + return null; + } +} + +async function getMetrics(client: MonitorClient, vmId:string): Promise { + try { + const vmMetrics = await client.metrics.list(vmId, { + //get all list of metrics available : az vm monitor metrics list-definitions --name MyVmName --resource-group MyRg --query "@[*].name.value" (select max 20) + metricnames: "Percentage CPU,Network In,Network Out,Disk Read Operations/Sec,Disk Write Operations/Sec,OS Disk IOPS Consumed Percentage,Data Disk Latency,Available Memory Bytes", + aggregation: "Average", + timespan: "P14D", + }); + let dataMetricsReformat:any = {}; + for(const metric of vmMetrics.value??[]){ + let data = metric.timeseries?.[0].data; + if(data?.length){ + let name = (metric.name?.value??metric.name?.localizedValue)??""; + if(name == "") continue; + dataMetricsReformat[name.charAt(0).toLowerCase() + name.slice(1).replace(/ /g, "")] = getMinMaxMeanMedian(data.map((item:any)=>item.average).filter((item:any)=>item!=null)); + } + } + return dataMetricsReformat; + } catch (err) { + logger.debug("error in getCPUAndRAMUsage:"+err); + return null; + } +} + +function getMinMaxMeanMedian(array: Array): any { + let min = array[0]; + let max = array[0]; + let sum = 0; + for(const num of array){ + if(num < min) min = num; + if(num > max) max = num; + sum += num; + } + return { + "min": min, + "max": max, + "mean": sum/array.length, + "median": array[Math.floor(array.length/2)], + } +} + export async function resourceGroupListing(client:ResourceManagementClient): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("rg")) return null; logger.info("starting resourceGroupListing"); try { const resultList = new Array; @@ -269,7 +353,8 @@ export async function resourceGroupListing(client:ResourceManagementClient): Pro } } -export async function networkSecurityGroup_analyse(nsgList: Array): Promise|null> { +export async function networkSecurityGroup_analyze(nsgList: Array): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("nsg_analyze")) return null; try { const resultList = new Array; for await (let item of nsgList){ @@ -290,7 +375,14 @@ export async function networkSecurityGroup_analyse(nsgList: Array { + if( + !currentConfig.ObjectNameNeed?.includes("mlWorkspaces") + && !currentConfig.ObjectNameNeed?.includes("mlJobs") + && !currentConfig.ObjectNameNeed?.includes("mlComputes") + && !currentConfig.ObjectNameNeed?.includes("mlSchedules") + ) return null; logger.info("starting mlListing"); try{ const client = new AzureMachineLearningWorkspaces(credential, subscriptionId); @@ -310,16 +402,10 @@ export async function mlListing(credential: DefaultAzureCredential, subscription schedulesListing(client, resourceGroupName, workspaceName), ]; const [jobsList, computeOperationsList, schedulesList] = await Promise.all(promises); - logger.error("jobsList: "+JSON.stringify(jobsList)); - logger.error("computeOperationsList: "+JSON.stringify(computeOperationsList)); - logger.error("schedulesList: "+JSON.stringify(schedulesList)); result.jobs = [...result.jobs??[], ...jobsList]; result.computes = [...result.computes??[], ...computeOperationsList]; result.schedule = [...result.schedule??[], ...schedulesList]; - logger.error("RESULT0: "); - logger.error("RESULT0: "+JSON.stringify(result)); } - logger.error("RESULT1: "+JSON.stringify(result)); return result; }catch(e){ logger.debug("error in mlListing:"+e); @@ -328,6 +414,7 @@ export async function mlListing(credential: DefaultAzureCredential, subscription } export async function jobsListing(client: AzureMachineLearningWorkspaces, resourceGroupName: string, workspaceName: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("mlJobs")) return []; //logger.info("starting jobsListing"); try{ const resArray = new Array(); @@ -345,6 +432,7 @@ export async function jobsListing(client: AzureMachineLearningWorkspaces, resour } export async function computeOperationsListing(client: AzureMachineLearningWorkspaces, resourceGroupName: string, workspaceName: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("mlComputes")) return []; //logger.info("starting computeOperationsListing"); try{ const resArray = new Array(); @@ -362,6 +450,7 @@ export async function computeOperationsListing(client: AzureMachineLearningWorks } export async function schedulesListing(client: AzureMachineLearningWorkspaces, resourceGroupName: string, workspaceName: string): Promise { + if(!currentConfig.ObjectNameNeed?.includes("mlSchedules")) return []; //logger.info("starting schedulesListing"); try{ const resArray = new Array(); diff --git a/Kexa/services/addOn/display/azureDisplay.service.ts b/Kexa/services/addOn/display/azureDisplay.service.ts index 801fb89b..662e26e2 100644 --- a/Kexa/services/addOn/display/azureDisplay.service.ts +++ b/Kexa/services/addOn/display/azureDisplay.service.ts @@ -2,7 +2,7 @@ import { Rules } from "../../../models/settingFile/rules.models"; export function propertyToSend(rule: Rules, objectContent: any, isSms: boolean=false): string{ if (isSms) - return `Id : `+ objectContent?.id + `https://portal.azure.com/#@/resource/` + objectContent?.id + return `Id : `+ objectContent?.id + ` | Link: https://portal.azure.com/#@/resource/` + objectContent?.id else return `Id : ' + objectContent?.id + `` } \ No newline at end of file diff --git a/Kexa/services/addOn/gcpGathering.service.ts b/Kexa/services/addOn/gcpGathering.service.ts index 236055a8..0e006851 100644 --- a/Kexa/services/addOn/gcpGathering.service.ts +++ b/Kexa/services/addOn/gcpGathering.service.ts @@ -40,6 +40,7 @@ import { GcpConfig } from "../../models/gcp/config.models"; import {getContext, getNewLogger} from "../logger.service"; const logger = getNewLogger("GcpLogger"); +let currentConfig: GcpConfig; ///////////////////////////////////////// ////// LISTING CLOUD RESOURCES ///// @@ -51,6 +52,7 @@ export async function collectData(gcpConfig:GcpConfig[]): Promise(); let defaultPathCred = await getEnvVar("GOOGLE_APPLICATION_CREDENTIALS"); for (let config of gcpConfig??[]) { + currentConfig = config; setEnvVar("GOOGLE_APPLICATION_CREDENTIALS", "./config/gcp.json"); let prefix = config.prefix??(gcpConfig.indexOf(config).toString()); let gcpResources = { @@ -303,6 +305,7 @@ async function executeAllRegions(projectId: number, serviceFunction: Function, c const {CloudTasksClient} = require('@google-cloud/tasks').v2; async function listTasks(projectId: number, regionsList: Array): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("tasks_queue")) return null; let jsonData = []; try { const tasksClient = new CloudTasksClient(); @@ -316,6 +319,7 @@ async function listTasks(projectId: number, regionsList: Array): Promise const compute = require('@google-cloud/compute'); async function listAllComputes(projectId: string): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("compute")) return null; let jsonData = []; const instancesClient = new compute.InstancesClient(); @@ -336,6 +340,7 @@ async function listAllComputes(projectId: string): Promise|null> { } async function listSSHKey(projectId: string): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("compute_item")) return null; let jsonData = []; const instancesClient = new compute.InstancesClient(); @@ -353,6 +358,7 @@ async function listSSHKey(projectId: string): Promise|null> { return jsonData ?? null; } async function listPersistentDisks(projectId: any) { + if(!currentConfig.ObjectNameNeed?.includes("disk")) return null; let jsonData = []; const disksClient = new compute.DisksClient(); const aggListRequest = await disksClient.aggregatedListAsync({ @@ -372,6 +378,7 @@ async function listPersistentDisks(projectId: any) { } async function listAllBucket(): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("bucket")) return null; let jsonReturn = []; try { const storage = new Storage(); @@ -392,8 +399,10 @@ async function listAllBucket(): Promise|null> { import { ClusterManagerClient } from '@google-cloud/container'; import {CloudBillingClient} from "@google-cloud/billing"; import {VpcAccessServiceClient} from "@google-cloud/vpc-access"; +import { config } from "dotenv"; async function listAllClusters(): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("cluster")) return null; let jsonData = []; try { @@ -414,6 +423,7 @@ async function listAllClusters(): Promise|null> { const {ProjectsClient} = require('@google-cloud/resource-manager'); async function listAllProject(): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("project")) return null; let jsonData = []; try { @@ -430,6 +440,7 @@ async function listAllProject(): Promise|null> { } async function getBillingAccount(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("billingAccount")) return null; const {CloudBillingClient} = require('@google-cloud/billing'); let jsonData = []; @@ -449,6 +460,7 @@ async function getBillingAccount(projectId: any): Promise|null> { } async function listWorkflows(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("workflow")) return null; const {WorkflowsClient} = require('@google-cloud/workflows'); let jsonData = []; try { @@ -467,6 +479,7 @@ async function listWorkflows(projectId: any): Promise|null> { } async function listWebSecurityConfig(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("websecurity")) return null; const { WebSecurityScannerClient } = require('@google-cloud/web-security-scanner'); let jsonData = []; try { @@ -484,6 +497,7 @@ async function listWebSecurityConfig(projectId: any): Promise|null> { } async function listVpcConnectors(projectId: any, regionsList: Array): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("connector")) return null; const {VpcAccessServiceClient} = require('@google-cloud/vpc-access'); let jsonData = []; try { @@ -497,6 +511,7 @@ async function listVpcConnectors(projectId: any, regionsList: Array): Pr } async function listVMWareEngine(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("vmware_engine")) return null; const {VmwareEngineClient} = require('@google-cloud/vmwareengine').v1; let jsonData = []; const parent = 'projects/' + projectId + '/locations/-'; @@ -519,6 +534,7 @@ async function listVMWareEngine(projectId: any): Promise|null> { } async function listNamespaces(projectId: any, regionsList: Array): Promise|null> { ///// KO REGION + if(!currentConfig.ObjectNameNeed?.includes("namespace")) return null; const {RegistrationServiceClient,} = require('@google-cloud/service-directory'); let jsonData = []; @@ -534,6 +550,7 @@ async function listNamespaces(projectId: any, regionsList: Array): Promi } export async function listSecrets(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("secret")) return null; const {SecretManagerServiceClient,} = require('@google-cloud/secret-manager').v1; const parent = 'projects/globalInnovtech'; let jsonData = []; @@ -553,6 +570,7 @@ export async function listSecrets(projectId: any): Promise|null> { } async function listConnectivityTests(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("connectivity_test")) return null; const {ReachabilityServiceClient} = require('@google-cloud/network-management'); let jsonData = []; @@ -570,6 +588,7 @@ async function listConnectivityTests(projectId: any): Promise|null> } async function listResourceSettings(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("resource_settings")) return null; let jsonData = []; const { ResourceSettingsServiceClient } = require('@google-cloud/resource-settings'); @@ -588,6 +607,7 @@ async function listResourceSettings(projectId: any): Promise|null> { } async function listRedisInstances(projectId: any, regionsList: Array): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("redis_instance")) return null; const {CloudRedisClient} = require('@google-cloud/redis'); let jsonData = []; @@ -602,6 +622,7 @@ async function listRedisInstances(projectId: any, regionsList: Array): P } async function listOSConfig(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("os_config")) return null; const {OsConfigServiceClient} = require('@google-cloud/os-config'); let jsonData = []; @@ -619,6 +640,7 @@ async function listOSConfig(projectId: any): Promise|null> { } async function listOrgPolicyContraints(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("org_policy_constraint")) return null; const {OrgPolicyClient} = require('@google-cloud/org-policy'); let jsonData = []; @@ -636,6 +658,7 @@ async function listOrgPolicyContraints(projectId: any): Promise|null> } async function listOrchestrationAirflow(projectId: any, regionsList: Array): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("airflow_image_version")) return null; const {ImageVersionsClient} = require('@google-cloud/orchestration-airflow'); let jsonData = []; @@ -650,6 +673,7 @@ async function listOrchestrationAirflow(projectId: any, regionsList: Array | null> { + if(!currentConfig.ObjectNameNeed?.includes("notebook")) return null; const {NotebookServiceClient} = require('@google-cloud/notebooks'); let jsonData = []; @@ -669,6 +693,7 @@ async function listNotebookInstances(projectId: any): Promise | null> } async function listDashboards(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("dashboard")) return null; const { DashboardsServiceClient } = require('@google-cloud/monitoring-dashboards'); const parent = 'projects/' + projectId; let jsonData = []; @@ -687,6 +712,7 @@ async function listDashboards(projectId: any): Promise | null> { } async function listIdentitiesDomain(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("identity_domain")) return null; const { ManagedIdentitiesServiceClient } = require('@google-cloud/managed-identities'); let jsonData = []; @@ -723,6 +749,7 @@ async function listLineageProcesses(projectId: any): Promise | null> } async function listKMSCryptoKeys(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("kms_crypto_key")) return null; const {KeyDashboardServiceClient} = require('@google-cloud/kms-inventory').v1; let jsonData = []; const parent = 'projects/' + projectId; @@ -743,6 +770,7 @@ async function listKMSCryptoKeys(projectId: any): Promise | null> { } async function listKMSKeyRings(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("kms_key_ring")) return null; const {KeyManagementServiceClient} = require('@google-cloud/kms'); let jsonData = []; @@ -763,6 +791,7 @@ async function listKMSKeyRings(projectId: any): Promise | null> { } async function listDomainsRegistration(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("domain_registration")) return null; const {DomainsClient} = require('@google-cloud/domains'); let jsonData = []; @@ -780,6 +809,7 @@ async function listDomainsRegistration(projectId: any): Promise | nul } async function listDnsZones(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("dns_zone")) return null; const {DNS} = require('@google-cloud/dns'); let jsonData = []; @@ -797,6 +827,7 @@ async function listDnsZones(projectId: any): Promise | null> { } async function listDeliveryPipelines(projectId: any, regionsList: Array): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("pipeline")) return null; const {CloudDeployClient} = require('@google-cloud/deploy').v1; let jsonData = []; @@ -811,6 +842,7 @@ async function listDeliveryPipelines(projectId: any, regionsList: Array) } async function listCertificates(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("certificate")) return null; const {CertificateManagerClient} = require('@google-cloud/certificate-manager').v1; let jsonData = []; const parent = 'projects/' + projectId + '/locations/global'; @@ -830,6 +862,7 @@ async function listCertificates(projectId: any): Promise | null> { } async function listBatchJobs(projectId: any, regionsList: Array): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("batch_job")) return null; let jsonData = []; const {BatchServiceClient} = require('@google-cloud/batch').v1; @@ -844,7 +877,7 @@ async function listBatchJobs(projectId: any, regionsList: Array): Promis } async function listWorkloads(projectId: any): Promise | null> { - + if(!currentConfig.ObjectNameNeed?.includes("workload")) return null; const { AssuredWorkloadsServiceClient } = require('@google-cloud/assured-workloads'); const {ProjectsClient} = require('@google-cloud/resource-manager').v3; let jsonData; @@ -867,6 +900,7 @@ async function listWorkloads(projectId: any): Promise | null> { } async function listArtifactsRepositories(projectId: any, regionsList: Array): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("artifact_repository")) return null; const {ArtifactRegistryClient} = require('@google-cloud/artifact-registry'); let jsonData = []; @@ -881,6 +915,7 @@ async function listArtifactsRepositories(projectId: any, regionsList: Array): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("app_gateway")) return null; const {AppGatewaysServiceClient} = require('@google-cloud/appgateways').v1; let jsonData = []; @@ -899,6 +934,7 @@ async function listAppGateways(projectId: any, regionsList: Array): Prom ///////////////////////////////////////////////////////// /* async function listAppConnectors(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("app_connector")) return null; const {AppConnectorsServiceClient} = require('@google-cloud/appconnectors').v1; const parent = 'projects/' + projectId + '/locations/global'; let jsonData = []; @@ -919,6 +955,7 @@ async function listAppConnectors(projectId: any): Promise | null> { */ /* async function listApiKeys(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("api_key")) return null; const {ApiKeysClient} = require('@google-cloud/apikeys').v2; const parent = 'projects/' + projectId; let jsonData = []; @@ -938,6 +975,7 @@ async function listApiKeys(projectId: any): Promise | null> { }*/ /* async function listApi(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("api")) return null; const {ApiGatewayServiceClient} = require('@google-cloud/api-gateway'); let jsonData = []; @@ -957,6 +995,7 @@ async function listApi(projectId: any): Promise | null> { }*/ /* async function listAccessPolicy(projectId: any): Promise | null> { + if(!currentConfig.ObjectNameNeed?.includes("access_policy")) return null; const {AccessApprovalClient} = require('@google-cloud/access-approval'); let jsonData = []; @@ -977,6 +1016,7 @@ async function listAccessPolicy(projectId: any): Promise | null> { // Workstations : timeout because no instance to be tested // /* async function listWorkstations(projectId: any, regionsList: Array): Promise|null> { // KO + if(!currentConfig.ObjectNameNeed?.includes("workstation")) return null; const {WorkstationsClient} = require('@google-cloud/workstations').v1; let jsonData; try { @@ -995,6 +1035,7 @@ async function listWorkstations(projectId: any, regionsList: Array): Pro // Storage Config : Deadline/Timeout // /* async function listStorageConfig(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("storage_config")) return null; const {StorageInsightsClient} = require('@google-cloud/storageinsights').v1; let jsonData = []; const parent = 'projects/' + projectId + '/locations/-'; @@ -1019,6 +1060,7 @@ async function listStorageConfig(projectId: any): Promise|null> { // Private CA : Timeout // /* async function listPrivateCertificates(projectId: any): Promise|null> { + if(!currentConfig.ObjectNameNeed?.includes("private_certificate")) return null; const {CertificateAuthorityServiceClient} = require('@google-cloud/security-private-ca'); let jsonData = []; diff --git a/Kexa/services/addOn/githubGathering.service.ts b/Kexa/services/addOn/githubGathering.service.ts index 6627ca53..ad5b2ddd 100644 --- a/Kexa/services/addOn/githubGathering.service.ts +++ b/Kexa/services/addOn/githubGathering.service.ts @@ -27,11 +27,13 @@ env.config(); import {getContext, getNewLogger} from "../logger.service"; const logger = getNewLogger("GithubLogger"); let githubToken = ""; +let currentConfig:GitConfig export async function collectData(gitConfig:GitConfig[]): Promise{ let context = getContext(); let resources = new Array(); for(let config of gitConfig??[]){ + currentConfig = config; let prefix = config.prefix??(gitConfig.indexOf(config).toString()); githubToken = await getConfigOrEnvVar(config, "GITHUBTOKEN", prefix); if(!githubToken){ @@ -192,6 +194,11 @@ async function getOctokit(): Promise{ } export async function collectRepo(){ + if( + !currentConfig?.ObjectNameNeed?.includes("repositories") + && !currentConfig?.ObjectNameNeed?.includes("branches") + && !currentConfig?.ObjectNameNeed?.includes("issues") + ) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -214,6 +221,7 @@ export async function collectRepo(){ } export async function collectBranch(repo: string, owner: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("branches")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -242,6 +250,7 @@ export async function collectBranch(repo: string, owner: string): Promise } export async function collectIssues(repo: string, owner: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("issues")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -270,6 +279,15 @@ export async function collectIssues(repo: string, owner: string): Promise } export async function collectOrganizations(): Promise{ + if( + !currentConfig?.ObjectNameNeed?.includes("organizations") + && !currentConfig?.ObjectNameNeed?.includes("members") + && !currentConfig?.ObjectNameNeed?.includes("teams") + && !currentConfig?.ObjectNameNeed?.includes("teamMembers") + && !currentConfig?.ObjectNameNeed?.includes("teamRepositories") + && !currentConfig?.ObjectNameNeed?.includes("teamProjects") + && !currentConfig?.ObjectNameNeed?.includes("outsideCollaborators") + ) return []; try{ return (await (await getOctokit()).request('GET /user/orgs')).data; }catch(e){ @@ -279,6 +297,7 @@ export async function collectOrganizations(): Promise{ } export async function collectMembers(org: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("members")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -315,6 +334,7 @@ export async function collectMembers(org: string): Promise{ } export async function collectOutsideCollaborators(org: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("outsideCollaborators")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -342,6 +362,7 @@ export async function collectOutsideCollaborators(org: string): Promise{ } export async function collectTeams(org: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("teams")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -369,6 +390,7 @@ export async function collectTeams(org: string): Promise{ } export async function collectTeamMembers(org:string, team: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("teamMembers")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -397,6 +419,7 @@ export async function collectTeamMembers(org:string, team: string): Promise } export async function collectTeamRepos(org:string, team: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("teamRepositories")) return []; let page = 1; try{ let octokit = await getOctokit(); @@ -425,6 +448,7 @@ export async function collectTeamRepos(org:string, team: string): Promise{ } export async function collectTeamProjects(org:string, team: string): Promise{ + if(!currentConfig?.ObjectNameNeed?.includes("teamProjects")) return []; let page = 1; try{ let octokit = await getOctokit(); diff --git a/Kexa/services/addOn/googleWorkspaceGathering.service.ts b/Kexa/services/addOn/googleWorkspaceGathering.service.ts index 2739cd52..d1c1c14c 100644 --- a/Kexa/services/addOn/googleWorkspaceGathering.service.ts +++ b/Kexa/services/addOn/googleWorkspaceGathering.service.ts @@ -33,6 +33,7 @@ const fs = require('fs').promises; const path = require('path'); const {authenticate} = require('@google-cloud/local-auth'); const {google} = require('googleapis'); +let currentConfig: googleWorkspaceConfig; ///////////////////////////////////////// ////// LISTING CLOUD RESOURCES ///// @@ -64,6 +65,7 @@ export async function collectData(googleWorkspaceConfig:googleWorkspaceConfig[]) for (let config of googleWorkspaceConfig??[]) { + currentConfig = config; let googleWorkspaceResources = { "user": null, "domain": null, @@ -156,6 +158,7 @@ async function authorize() { } async function listUsers(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("user")) return null; let jsonData = []; const service = google.admin({version: 'directory_v1', auth}); @@ -199,7 +202,8 @@ async function listUsers(auth: any): Promise | null> { return jsonData ?? null; } async function listDomains(auth: any): Promise | null> { - let jsonData = []; + if(!currentConfig?.ObjectNameNeed?.includes("domain")) return null; + let jsonData = []; const admin = google.admin({version: 'directory_v1', auth}); try { @@ -232,6 +236,7 @@ async function listDomains(auth: any): Promise | null> { } async function listGroups(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("group")) return null; let jsonData = []; const admin = google.admin({version: 'directory_v1', auth}); @@ -251,6 +256,7 @@ async function listGroups(auth: any): Promise | null> { } async function listRoles(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("role")) return null; let jsonData = []; const service = google.admin({version: 'directory_v1', auth}); @@ -267,6 +273,7 @@ async function listRoles(auth: any): Promise | null> { } async function listOrganizationalUnits(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("orgaunit")) return null; let jsonData = []; try { @@ -285,6 +292,7 @@ async function listOrganizationalUnits(auth: any): Promise | null> { return jsonData ?? null; } async function listCalendars(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("calendar")) return null; let jsonData = []; try { @@ -309,6 +317,7 @@ async function listCalendars(auth: any): Promise | null> { } async function listFiles(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("file")) return null; let jsonData = []; try { @@ -330,6 +339,7 @@ async function listFiles(auth: any): Promise | null> { } async function listDrive(auth: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("drive")) return null; let jsonData = []; try { diff --git a/Kexa/services/addOn/kubernetesGathering.service.ts b/Kexa/services/addOn/kubernetesGathering.service.ts index 332e5c01..d62c5fea 100644 --- a/Kexa/services/addOn/kubernetesGathering.service.ts +++ b/Kexa/services/addOn/kubernetesGathering.service.ts @@ -21,10 +21,12 @@ import {getNewLogger} from "../logger.service"; const logger = getNewLogger("KubernetesLogger"); const k8s = require('@kubernetes/client-node'); +let currentConfig:KubernetesConfig; export async function collectData(kubernetesConfig:KubernetesConfig[]): Promise{ let resources = new Array(); for(let config of kubernetesConfig??[]){ + currentConfig = config; let prefix = config.prefix??(kubernetesConfig.indexOf(config).toString()); try { let pathKubeFile = await getConfigOrEnvVar(config, "KUBECONFIG", prefix); @@ -78,6 +80,7 @@ export async function kubernetesListing(isPathKubeFile: boolean): Promise { } async function collectHelm(namespace: string): Promise { + if(!currentConfig?.ObjectNameNeed?.includes("helm")) return null; try{ let helmData = await helm.list({ namespace: namespace }); return helmData; @@ -88,6 +91,7 @@ async function collectHelm(namespace: string): Promise { } async function collectPods(k8sApiCore: any, namespace: string): Promise { + if(!currentConfig?.ObjectNameNeed?.includes("pods")) return null; try{ const pods = await k8sApiCore.listNamespacedPod(namespace); return pods; diff --git a/Kexa/services/addOn/o365Gathering.service.ts b/Kexa/services/addOn/o365Gathering.service.ts index 2200f680..f5853d2a 100644 --- a/Kexa/services/addOn/o365Gathering.service.ts +++ b/Kexa/services/addOn/o365Gathering.service.ts @@ -32,6 +32,7 @@ import { o365Config } from "../../models/o365/config.models"; import {getContext, getNewLogger} from "../logger.service"; const logger = getNewLogger("o365Logger"); +let currentConfig:o365Config; ///////////////////////////////////////// ////// LISTING CLOUD RESOURCES ///// @@ -42,6 +43,7 @@ export async function collectData(o365Config:o365Config[]): Promise(); for (let config of o365Config??[]) { + currentConfig = config; let o365Resources = { "sku": null, "user": null, @@ -173,6 +175,7 @@ async function getToken(tenantId: string, clientId: string, clientSecret: string return accessToken ?? null; } async function listUsers(endpoint: string, accessToken: string, headers: Headers): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("user")) return null; const axios = require("axios"); let jsonData = []; @@ -223,9 +226,9 @@ async function listUsers(endpoint: string, accessToken: string, headers: Header } async function listSubscribedSkus(endpoint: string, accessToken: string, headers: Headers): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("sku")) return null; let jsonData = []; - try { const response = await axios.get(`${endpoint}/subscribedSkus`, { headers: { @@ -262,6 +265,7 @@ async function listSubscribedSkus(endpoint: string, accessToken: string, header } async function genericListing(endpoint: string, accessToken: string, queryEndpoint: string, operationName: string): Promise | null> { + //if(!currentConfig?.ObjectNameNeed?.includes(operationName.toLowerCase().replace(' ', '_'))) return null; let jsonData = []; try { @@ -301,6 +305,7 @@ async function listSecureScore(endpoint: string, accessToken: string, headers: H } async function listAuthMethods(endpoint: string, accessToken: string, userList: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("auth_methods")) return null; let jsonData = []; for (const element of userList) { @@ -377,6 +382,7 @@ async function listIncidents(endpoint: string, accessToken: string, headers: Hea } async function listAppAccessPolicy(endpoint: string, accessToken: string, headers: Headers, userList: any): Promise | null> { + if(!currentConfig?.ObjectNameNeed?.includes("app_access_policy")) return null; const axios = require("axios"); let jsonData: any | []; for (let i = 0; i < userList.length; i++) { diff --git a/Kexa/services/alerte.service.ts b/Kexa/services/alerte.service.ts index a9f5ae1a..5ab9cb98 100644 --- a/Kexa/services/alerte.service.ts +++ b/Kexa/services/alerte.service.ts @@ -11,12 +11,15 @@ import { Readable } from "stream"; import { propertyToSend, renderTableAllScan, renderTableAllScanLoud } from "./display.service"; import { groupBy } from "../helpers/groupBy"; import { getConfigOrEnvVar } from "./manageVarEnvironnement.service"; +import axios from 'axios'; +import { extractURL } from "../helpers/extractURL"; +import { Teams } from "../emails/teams"; const jsome = require('jsome'); jsome.level.show = true; const request = require('request'); const nodemailer = require("nodemailer"); -const levelAlert = ["info", "warning", "error", "critical"]; +const levelAlert = ["info", "warning", "error", "fatal"]; const colors = ["#4f5660", "#ffcc00", "#cc3300", "#cc3300"]; const config = require('node-config-ts'); @@ -164,20 +167,24 @@ export function alertWebhookGlobal(alert: GlobalConfigAlert, compteError: number export function alertTeamsGlobal(alert: GlobalConfigAlert, compteError: number[], allScan: ResultScan[][]) { logger.debug("alert Teams Global"); - let content = compteRender(allScan); - let nbrError: { [x: string]: number; }[] = []; + let nbrError: { [x: string]: number; } = {}; compteError.forEach((value, index) => { - nbrError.push({ - [levelAlert[index]] : value - }); + nbrError[levelAlert[index]] = value; }); - content["nbrError"] = nbrError; - content["title"] = "Kexa - Global Alert - "+(alert.name??"Uname"); + let content = "" + let render_table = renderTableAllScan(allScan.map(scan => scan.filter(value => value.error.length>0))); + let render_table_loud = renderTableAllScanLoud(allScan.map(scan => scan.filter(value => value.loud))); + content += render_table; + if(render_table_loud.length > 30){ + content += "\n\n\n

Loud Section:

\n" + content += render_table_loud; + } for (const teams_to of alert.to) { const regex = /^https:\/\/(?:[a-zA-Z0-9_-]+\.)?webhook\.office\.com\/[^\s"]+$/; - if(regex.test(teams_to)) return; + if(!regex.test(teams_to)) return; logger.debug("send teams to:"+teams_to); - sendCardMessageToTeamsChannel(teams_to, "Kexa - Global Alert - "+ (alert.name??"Uname"), content); + const payload = Teams.GlobalTeams(colors[0], "Global Alert - "+(alert.name??"Uname"), content, nbrError); + sendCardMessageToTeamsChannel(teams_to, payload); } } @@ -307,11 +314,13 @@ export function alertTeams(detailAlert: ConfigAlert|GlobalConfigAlert ,rule: Rul logger.debug("alert Teams"); for (const teams_to of detailAlert.to) { const regex = /^https:\/\/(?:[a-zA-Z0-9_-]+\.)?webhook\.office\.com\/[^\s"]+$/; - if(regex.test(teams_to)) return; + if(!regex.test(teams_to)) return; let content = propertyToSend(rule, objectResource); - sendCardMessageToTeamsChannel(teams_to, "Kexa - "+levelAlert[rule.level]+" - "+rule.name, content); + const payload = Teams.OneTeams(colors[rule.level], "Kexa - "+levelAlert[rule.level]+" - "+rule.name, extractURL(content)??"", rule.description??""); + sendCardMessageToTeamsChannel(teams_to, payload); } } + export function alertEmail(detailAlert: ConfigAlert|GlobalConfigAlert ,rule: Rules, conditions:SubResultScan[], objectResource:any){ logger.debug("alert email"); detailAlert.to.forEach((email_to) => { @@ -414,7 +423,7 @@ async function sendWebhook(alert: ConfigAlert, subject: string, content: any) { for (const webhook_to of alert.to) { if(!webhook_to.includes("http")) continue; const payload = { - title: "Kexa scan : ", + title: "Kexa scan : " + subject, text: content.content, }; try { @@ -426,25 +435,28 @@ async function sendWebhook(alert: ConfigAlert, subject: string, content: any) { logger.error('Failed to send Webhook.'); } } catch (error) { - logger.error('Teams webhook : An error occurred:', error); + logger.error('Webhook : An error occurred:', error); } } } -import axios from 'axios'; - -export async function sendCardMessageToTeamsChannel(channelWebhook: string, subject: string, content: any): Promise { +export async function sendCardMessageToTeamsChannel(channelWebhook: string, payload:string): Promise { const context = getContext(); if (!channelWebhook) { logger.error("Cannot retrieve TEAMS_CHANNEL_WEBHOOK_URL from env"); throw("Error on TEAMS_CHANNEL_WEBHOOK_URL retrieve"); } - const payload = { - title: subject, - text: content, + let config = { + method: 'post', + maxBodyLength: Infinity, + url: channelWebhook, + headers: { + 'Content-Type': 'application/json' + }, + data : payload }; try { - const response = await axios.post(channelWebhook, payload); + const response = await axios.request(config); if (response.status === 200) { context?.log('Card sent successfully!'); logger.info('Card sent successfully!'); diff --git a/Kexa/services/analyse.service.ts b/Kexa/services/analyse.service.ts index 3c924c1a..7f7a00a1 100644 --- a/Kexa/services/analyse.service.ts +++ b/Kexa/services/analyse.service.ts @@ -22,6 +22,7 @@ import { extractHeaders } from './addOn.service'; //////////////////////////////////////////////////////////////////////////////////////////////////////// import {getContext, getNewLogger} from "./logger.service"; +import { splitProperty } from '../helpers/spliter'; const logger = getNewLogger("AnalyseLogger"); const jsome = require('jsome'); @@ -33,7 +34,7 @@ const varEnvMin = { const config = require('node-config-ts').config; const levelAlert = ["info", "warning", "error", "critical"]; let headers: any; -//Analyse list +// Analyze list // read the yaml file with rules // exam each rules and raise alarm or not export async function gatheringRules(rulesDirectory:string, getAll:boolean=false): Promise { @@ -46,7 +47,7 @@ export async function gatheringRules(rulesDirectory:string, getAll:boolean=false let listNeedRules = getListNeedRules(); for(const p of paths) { logger.debug("getting "+rulesDirectory+"/"+p.name+" rules."); - let setting = await analyseRule(rulesDirectory+"/"+p.name, listNeedRules, getAll); + let setting = await analyzeRule(rulesDirectory+"/"+p.name, listNeedRules, getAll); if(setting){ setting.alert.global.name = p.name.split(".")[0]; settingFileList.push(setting); @@ -60,32 +61,41 @@ export async function gatheringRules(rulesDirectory:string, getAll:boolean=false export function extractAddOnNeed(settingFileList: SettingFile[]){ let providerList = new Array(); + let objectNameList:any = {}; settingFileList.forEach((ruleFile) => { + objectNameList[ruleFile.alert.global.name] = {}; ruleFile.rules.forEach((rule) => { if(!providerList.includes(rule.cloudProvider)) providerList.push(rule.cloudProvider); + if(!objectNameList[ruleFile.alert.global.name][rule.cloudProvider]) objectNameList[ruleFile.alert.global.name][rule.cloudProvider] = new Array(); + if(!objectNameList[ruleFile.alert.global.name][rule.cloudProvider].includes(rule.objectName)) objectNameList[ruleFile.alert.global.name][rule.cloudProvider].push(rule.objectName); }); }); - writeStringToJsonFile(JSON.stringify({ "addOn" : providerList}), "./config/addOnNeed.json"); + writeStringToJsonFile(JSON.stringify({ "addOn" : providerList, "objectNameNeed": objectNameList }), "./config/addOnNeed.json"); } function getListNeedRules(): string[]{ const config = require('node-config-ts').config; let listNeedRules = new Array(); for(let cloudProvider of Object.keys(config)){ + if(["host", "host", "workerId", "requestId", "grpcMaxMessageLength"].includes(cloudProvider)) continue; let configAssign = config[cloudProvider]; - for(let config of configAssign){ - if (Array.isArray(config.rules)) { - for (let rule of config.rules) { - if (!listNeedRules.includes(rule)) listNeedRules.push(rule); + try{ + for(let config of configAssign){ + if (Array.isArray(config.rules)) { + for (let rule of config.rules) { + if (!listNeedRules.includes(rule)) listNeedRules.push(rule); + } } } + }catch(err){ + logger.debug("error in getListNeedRules:"+err); } } return listNeedRules; } -export async function analyseRule(ruleFilePath:string, listNeedRules:string[], getAll:boolean=false): Promise { - logger.debug("analyse:"+ruleFilePath); +export async function analyzeRule(ruleFilePath:string, listNeedRules:string[], getAll:boolean=false): Promise { + logger.debug("analyze:"+ruleFilePath); try { let lastBlockSplited = ruleFilePath.split('/')[ruleFilePath.split('/').length -1].split("."); if(lastBlockSplited.length == 1){ @@ -125,9 +135,9 @@ export async function checkDoc(doc:SettingFile): Promise { logger.debug("check doc"); let result:string[] = []; if(!doc.hasOwnProperty("version")) result.push("info - version not found in doc"); - else if(doc.version.match(/^[0-9]+\.[0-9]+\.[0-9]+$/) === null) result.push("debug - version not valid in doc : "+ doc.version); + else if(RegExp(/^[0-9]+\.[0-9]+\.[0-9]+$/).exec(doc.version) === null) result.push("debug - version not valid in doc : "+ doc.version); if(!doc.hasOwnProperty("date")) result.push("info - date not found in doc"); - else if(doc.date.match(/^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\d\d$/) === null) result.push("debug - date not valid in doc : "+ doc.date); + else if(RegExp(/^(0[1-9]|[12][0-9]|3[01])-(0[1-9]|1[012])-(19|20)\d\d$/).exec(doc.date) === null) result.push("debug - date not valid in doc : "+ doc.date); (await checkDocAlert(doc.alert)).forEach((value) => result.push(value)); checkDocRules(doc.rules).forEach((value) => result.push(value)); return result; @@ -421,7 +431,7 @@ export function parentResultScan(subResultScans: SubResultScan[], result: boolea value: null, condition: subResultScans.map((value) => value.condition).flat(), result, - message : subResultScans.map((value) => value.message).join(" || ") + message : subResultScans.map((value) => value.message).filter(item => item != "").join(" || ") }; } @@ -521,7 +531,7 @@ export function resultScan(condition: RulesConditions, value: any, fs: Function[ export function getSubProperty(object:any, property:string): any { if (property === ".") return object; - let properties = property.split("."); + let properties = splitProperty(property, ".", "/"); let result = object; properties.forEach(prop => { result = result[prop]; diff --git a/README.md b/README.md index 3680a8c2..7367f13e 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,7 @@ [![Stargazers][stars-shield]][stars-url] [![Issues][issues-shield]][issues-url] [![MIT License][license-shield]][license-url] + @@ -77,12 +80,20 @@ With Kexa, you can [edit your own rules](documentation/Documentation-Kexa.md#rul ### Built With -* [![NodeJs][NodeJs.com]][NodeJs-url] +* [![NODE][NODE-shield]](https://nodejs.org/fr) #
**Quick Launch**

-For a quick launch, we're going to use docker. If you can't use docker you can refer to [this documention](documentation/Documentation-Kexa.md) to try Kexa. However, we have a powershell script to initialize all resources and credentials if you want to get Kexa up and running quickly. +For a quick launch, we're going to use docker. If you can't use docker you can refer to [this documention](documentation/Documentation-Kexa.md) to try Kexa. However, we have a powershell script to initialize all resources and credentials if you want to get Kexa up and running quickly such as : +```powershell +Invoke-WebRequest -Uri "https://raw.githubusercontent.com/4urcloud/Kexa/dev/initKexa.ps1" -OutFile "./initKexa.ps1"; & "./initKexa.ps1" -d -c +#answer all question to setup + +#dont forget to get [nodejs](https://nodejs.org/en/download) to launch Kexa: +npm i +npm run start +``` From any folder, create a folder called "config" and create a "default.json" file inside this folder. This file will be populated according to the provider you want to test, as follows. @@ -509,11 +520,16 @@ Distributed under the MIT License. See [`LICENSE.txt`](https://github.com/4urcl #
**Contact**

-[contact@4urcloud.com](mailto:contact@4urcloud.com) +[contact@4urcloud.com](mailto:contact@4urcloud.com) - [![LinkedIn][linkedin-shield]](https://www.linkedin.com/company/4urcloud/?lipi=urn%3Ali%3Apage%3Ad_flagship3_search_srp_all%3Blkvp7yZwRd2%2BaYEK4b0VWg%3D%3D) -Project Link: [https://github.com/4urcloud/Kexa](https://github.com/4urcloud/Kexa) Public site: [Kexa.io](https://github.com/4urcloud/Kexa/blob/rework-documentation/documentation/www.kexa.io) +Projects Link: [4urcloud](https://github.com/4urcloud) +Public site:  + - [Kexa.io](https://github.com/4urcloud/Kexa/blob/rework-documentation/documentation/www.kexa.io) + - [4urcloud.eu](https://4urcloud.eu/#/) + - [www.TheCloudPrices.com](https://www.thecloudprices.com/)

(back to top)

+[linkedin-shield]: https://img.shields.io/badge/-LinkedIn-black.svg?style=for-the-badge&logo=linkedin&colorB=555 [contributors-shield]: https://img.shields.io/github/contributors/4urcloud/Kexa.svg?style=for-the-badge [contributors-url]: https://github.com/4urcloud/Kexa/graphs/contributors [forks-shield]: https://img.shields.io/github/forks/4urcloud/Kexa.svg?style=for-the-badge @@ -524,3 +540,4 @@ Project Link: [https://github.com/4urcloud/Kexa](https://github.com/4urcloud/Ke [issues-url]: https://github.com/4urcloud/Kexa/issues [license-shield]: https://img.shields.io/github/license/4urcloud/Kexa.svg?style=for-the-badge [license-url]: https://github.com/4urcloud/Kexa/blob/master/LICENSE.txt +[NODE-shield]: https://img.shields.io/badge/Node.js-43853D?style=for-the-badge&logo=node.js&logoColor=white diff --git a/VERSION b/VERSION index 6e46212c..f6e1bd9a 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.8.0-SNAPSHOT.111.ef2090d +1.10.0-SNAPSHOT.40.9bbdd02 diff --git a/capacity.json b/capacity.json index 82bd90a6..b3d5437a 100644 --- a/capacity.json +++ b/capacity.json @@ -211,6 +211,31 @@ } ] }, + { + "name": "not-under-use-VM", + "description": "this rule is if a VM is under-used (50% > CPU or 50%>RAM over 2 weeks) ", + "applied": true, + "level": 1, + "cloudProvider": "azure", + "objectName": "vm", + "conditions": [ + { + "operator": "OR", + "criteria": [ + { + "property": "instanceView.percentageCPU.mean", + "condition": "SUP", + "value": 50 + }, + { + "property": "instanceView.availableMemoryBytes.mean", + "condition": "SUP", + "value": 50 + } + ] + } + ] + }, { "name": "azure-virtual-network-minimum-subnets", "description": "check if NSG have a minimum of subnets", @@ -235,9 +260,30 @@ "objectName": "mlJobs", "conditions": [ { - "property": "properties.status", - "condition": "DIFFERENT", - "value": "Failed" + "operator": "NAND", + "criteria": [ + { + "property": "workspace", + "condition": "EQUAL", + "value": "Test-Kexa-Machine-Learning" + }, + { + "property": "properties.displayName", + "condition": "EQUAL", + "value": "hello-world-example" + }, + { + "property": "properties.status", + "condition": "EQUAL", + "value": "Failed" + }, + { + "property": "properties.properties.StartTimeUtc", + "condition": "DATE_INF", + "value": "0 0 0 1 0 0", + "date": "YYYY-MM-DD hh:mm:ss" + } + ] } ] }, diff --git a/config/default.json b/config/default.json index f774db90..c784d59f 100644 --- a/config/default.json +++ b/config/default.json @@ -3,7 +3,7 @@ { "description": "organization 4urcloud", "rules": [ - "OperationalExcellence" + "rules-testing" ] } ] diff --git a/documentation/AWS.md b/documentation/AWS.md index 3804f94a..6ca557bf 100644 --- a/documentation/AWS.md +++ b/documentation/AWS.md @@ -43,7 +43,6 @@ Example config for 2 environments: There are several ways to identify yourself in an AWS environment. Obviously, you can only scan the environment for which you are at least a "reader": ```shell -AWS_SECRET_NAME=XXXXXXXXX AWS_ACCESS_KEY_ID=XXXXXXXXX AWS_SECRET_ACCESS_KEY=XXXXXXXXX ``` diff --git a/documentation/Documentation-Kexa.md b/documentation/Documentation-Kexa.md index 860f96a3..ae5e40b5 100644 --- a/documentation/Documentation-Kexa.md +++ b/documentation/Documentation-Kexa.md @@ -14,9 +14,11 @@ Explore the docs »

- Report Bug + Report Bug · - Request Feature +Request Feature + · +Put Star

@@ -172,18 +174,42 @@ In the Kexa config folder, edit the default.json (create it if it doesn't exist) ## **Configuration via script** +A powershell script is available for easy downloading, updating and configuration of Kexa versions. + +We don't yet have a Bash script for Linux. You can follow [this documentation](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.4) to run the powershell script on linux. + +### Downloads or update Kexa + +You can download a version of Kexa from a specific branch. To do this, there's the "-d" argument to request a Kexa pull locally without Github. To preset from which branch this should be done, you have the "-b" argument followed by a branch name present on our repository (by default: main). Finally, if you don't want to perform the download where you are, you can use "-p" followed by the path to where to perform the manipulation. +Note: in the event of an upgrade, your configuration files will be preserved. + +Here's an example: + +```powershell +#for download the script localy +Invoke-WebRequest -Uri "https://raw.githubusercontent.com/4urcloud/Kexa/dev/initKexa.ps1" -OutFile "./initKexa.ps1" + +#to update or download Kexa locally with the main branch +./initKexa.ps1 -d +#to update or download Kexa at ./Kexa with the dev branch +./initKexa.ps1 -d -b dev -p ./Kexa +``` + +### Setup configuration + A powershell script located at "./initKexa.ps1" allows you to set up a configuration and all your necessary environment variables. It also downloads from our github repo the basic rules per provider you've configured. +Note, executing the command is destructive to your previous configuration. + +- Windows: -- Windows: ```powershell - ./initKexa.ps1 + ./initKexa.ps1 -c ``` - Linux: - We don't yet have a Bash script for Linux. You can follow [this documentation](https://learn.microsoft.com/en-us/powershell/scripting/install/installing-powershell-on-linux?view=powershell-7.4) to run the powershell script. ```bash sudo pwsh - ./initKexa.ps1 + ./initKexa.ps1 -c ``` @@ -446,6 +472,7 @@ Here is the structure and required fields for a new rule : conditions: # the list of criteria to match - property : string # the object field name to check (you can see the objects fields by launching Kexa with npm run start:o option) + # for any property with a dot in his name, add "/" before the dot condition : enum # the condition for this comparison (defined in ./enum/condition.enum.ts) value : string @@ -847,7 +874,7 @@ We've set up a system to facilitate the development of new features. This system ### **Gathering data** -A file to collect data whose path will be "./Kexa/services/addOn". It is named as follows: [extension's name]Gathering.service.ts . The entry point for this file is a function named "collectData", which takes one arguments. The argument is a list containing all the configs for your addOn. The return format of this function is as shown in the following example. exemple : +A file to collect data whose path will be "./Kexa/services/addOn". It is named as follows: [extension's name]Gathering.service.ts . The entry point for this file is a function named "collectData", which takes one arguments. The argument is a list containing all the configs for your addOn. This list corresponds to what you can find in the default.json file in the key that has the same name as your addOn. As additional information per item in the list, you have "ObjectNameNeed" which corresponds to the CategoryItem solicity in the rules set up. This helps you, to optimize your addOn and make faster, more targeted collections. The return format of this function is as shown in the following example. exemple : ```json [ @@ -874,7 +901,7 @@ A file to collect data whose path will be "./Kexa/services/addOn". It is named a } ] ``` - + The data format is the following for several reasons. The first list corresponds to the different subscriptions or accounts in a sector. To illustrate, in the case of a cloud provider such as Azure, we might need different identifiers to scan all our accounts, and each account scan result is an item in the list. The dictionaries in the main list correspond to your dictionary that you find relevant to create to identify the different resources of your addOn, in the rules this corresponds to your "objectName". Finally, the lowest-level lists correspond to the list of items collected by your addOn. For project maintainability, we require addOn modules to contain a header to quickly identify certain information. It's also important to update this header according to the capabilities of your addOn. In fact, this header serves as a basis for checking the feasibility of certain rules. This header is a comment that must contain at least 2 pieces of information: the name of the module and the "categoryItems" you've included in your module. example for an "azureComplement" module: file name : azureComplementGathering.service.ts @@ -890,8 +917,8 @@ For project maintainability, we require addOn modules to contain a header to qui * - azFunction */ -export async function collectData(myGlobalConfig: any[]){ - //the type of myGlobalConfig is any but you can make an interface if you want +export async function collectData(myAddonConfig: any[]){ + //the type of myAddonConfig is any but you can make an interface if you want //insert your stuff here } diff --git a/initKexa.ps1 b/initKexa.ps1 index d0d54320..247a6696 100644 --- a/initKexa.ps1 +++ b/initKexa.ps1 @@ -1,3 +1,17 @@ +param ( + [switch]$help, + [switch]$d, + [switch]$download, + [string]$p, + [string]$path, + [string]$b, + [string]$branch, + [switch]$c, + [switch]$config + #[switch]$r, + #[switch]$rules +) + function Get-ValidInput { param ( [string]$Prompt = "Entrez une valeur : ", @@ -11,6 +25,26 @@ function Get-ValidInput { return $input } +function Get-ValueFromMultipleChoice { + param ( + [string]$firstOption, + [string]$secondOption, + [string]$defaultValue + ) + + if($firstOption -eq $null -or $firstOption -eq ""){ + if($secondOption -eq $null -or $secondOption -eq ""){ + $result = $defaultValue + }else{ + $result = $secondOption + } + } + else{ + $result = $firstOption + } + return $result +} + function Ask-User { param ( [string]$prompt, @@ -138,7 +172,7 @@ function Configure-Providers { $configJson = @{} $askingProvider = @() - "RULESDIRECTORY=./rules" | Out-File -FilePath "./.env" -Encoding utf8 -Force + "RULESDIRECTORY=./rules" | Out-File -FilePath "$path/.env" -Encoding utf8 -Force while($true){ $ask = Ask-User -prompt "Which providers do you want to configure? (q to finish)" -options $providers.Values $askProvider = $providers.Keys | where { $providers[$_] -eq $ask } @@ -196,10 +230,10 @@ function Configure-Providers { if($environments){ Write-Host " " $credentials = Get-UserInputForAllCred -provider $askProvider -prefixs $prefixs -credForTheProvider $credByProvider[$askProvider] - Write-DictionaryToFile -filePath "./.env" -dictionary $credentials - $url = "https://raw.githubusercontent.com/4urcloud/Kexa/main/Kexa/rules/rulesByProvider/${askProvider}SetRules.yaml" + Write-DictionaryToFile -filePath "$path/.env" -dictionary $credentials + $url = "https://raw.githubusercontent.com/4urcloud/Kexa/$branch/Kexa/rules/rulesByProvider/${askProvider}SetRules.yaml" $text = Invoke-WebRequest -Uri $url -UseBasicParsing - Save-TextToFile -text $text -filePath "./rules/${askProvider}SetRules.yaml" + Save-TextToFile -text $text -filePath "$path/rules/${askProvider}SetRules.yaml" } $configJson[$askProvider] = $environments $askingProvider += $askProvider @@ -207,7 +241,7 @@ function Configure-Providers { Clear-Host } - Save-ConfigJson -configJson $configJson -filePath "./config/default.json" + Save-ConfigJson -configJson $configJson -filePath "$path/config/default.json" } function Press-EnterToContinue { @@ -216,9 +250,119 @@ function Press-EnterToContinue { Clear-Host } +function Help { + Write-Host "initKexa.ps1 [-help] [-d | -download] [-c | -config]" + Write-Host " " + Write-Host "-help : Display help" + Write-Host "-d | -download : download the latest version of Kexa" + Write-Host "-c | -config : configure Kexa" + Write-Host "-p | -path : path it will be refer" + Write-Host "-b | -branch : branch of Kexa it will be refer" + Press-EnterToContinue + exit +} + +function Download-Kexa { + Write-Host "Download the latest version of Kexa" + Protect-config + $url = "https://github.com/4urcloud/Kexa/archive/refs/heads/$branch.zip" + $zipPath = $path + "/Kexa.zip" + $unZipPath = $path + "/Kexa-$branch" + Write-Host "Download Kexa from $url to $path" + Invoke-WebRequest -Uri $url -OutFile $zipPath + Expand-Archive -Path $zipPath -DestinationPath $path -Force + $absolutePathUnZip = (Get-Item -Path $unZipPath).FullName + $absolutePathPath = (Get-Item -Path $path).FullName + Get-ChildItem -Path $unZipPath -Recurse | ForEach-Object { + $destinationPath = $_.FullName.Replace($absolutePathUnZip, $absolutePathPath) + if(Test-Path -Path $destinationPath){ + Remove-Item -Path $destinationPath -Recurse -Force -ErrorAction SilentlyContinue + } + Copy-Item -Path $_.FullName -Destination $destinationPath -Force + } + Remove-Item -Path $unZipPath -Recurse -Force + Remove-Item -Path $zipPath -Force + #Remove all files and folders of github + Remove-Item -Path "$path/.github" -Recurse -ErrorAction SilentlyContinue -Force + Remove-Item -Path "$path/.git" -Recurse -ErrorAction SilentlyContinue -Force + Remove-Item -Path "$path/.gitignore" -ErrorAction SilentlyContinue -Force + Write-Host "End of download" +} + +function Protect-config { + New-Item -ItemType Directory -Path "$path/savedFolder" -ErrorAction SilentlyContinue | Out-Null + Remove-Item "$path/savedFolder" -Recurse -Force + + New-Item -ItemType Directory -Path "$path/savedFolder/config" -ErrorAction SilentlyContinue | Out-Null + Copy-Item -Path "$path/config" -Destination "$path/savedFolder" -Recurse -ErrorAction SilentlyContinue -Force + + New-Item -ItemType Directory -Path "$path/savedFolder/rules" -ErrorAction SilentlyContinue | Out-Null + Copy-Item -Path "$path/rules" -Destination "$path/savedFolder" -Recurse -ErrorAction SilentlyContinue -Force + + New-Item -ItemType Directory -Path "$path/savedFolder/Kexa/rules" -ErrorAction SilentlyContinue | Out-Null + Copy-Item -Path "$path/Kexa/rules" -Destination "$path/savedFolder/Kexa" -Recurse -ErrorAction SilentlyContinue -Force + + Copy-Item -Path "$path/.env" -Destination "$path/savedFolder" -ErrorAction SilentlyContinue -Force +} + +function Retreive-config{ + Copy-Item -Path "$path/savedFolder/config" -Destination "$path/" -Recurse -Force -ErrorAction SilentlyContinue + Copy-Item -Path "$path/savedFolder/rules" -Destination "$path/" -Recurse -Force -ErrorAction SilentlyContinue + Copy-Item -Path "$path/savedFolder/Kexa/rules" -Destination "$path/Kexa" -Recurse -Force -ErrorAction SilentlyContinue + Copy-Item -Path "$path/savedFolder/.env" -Destination "$path/" -ErrorAction SilentlyContinue -Force +} + +function Test-AndInstallNodeJS { + $nodeInstalled = Get-Command node -ErrorAction SilentlyContinue + + if ($nodeInstalled -eq $null) { + Write-Host "Node.js n'est pas installe. Tentative d'installation avec Chocolatey..." + $chocolateyInstalled = Get-Command choco -ErrorAction SilentlyContinue + + if ($chocolateyInstalled -eq $null) { + Write-Host "Chocolatey n'est pas installe. Veuillez installer Chocolatey avant d'installer Node.js." + } + else { + choco install nodejs.install -y + Write-Host "Node.js a ete installe avec succès." + } + } + else { + Write-Host "Node.js est deja installe." + } +} + +if($help){ + Help + Press-EnterToContinue + exit +} + +$commandTrigger = 0 Write-Host "Kexa Script initailization" -Configure-Providers +$path = Get-ValueFromMultipleChoice -firstOption $path -secondOption $p -default "." +$path = $path.Replace("\", "/").TrimEnd('/') +$branch = Get-ValueFromMultipleChoice -firstOption $branch -secondOption $b -default "main" +if($d -or $download){ + Protect-config + Download-Kexa + Retreive-config + #Test-AndInstallNodeJS + $commandTrigger++ +} + +if($c -or $config){ + cd $path + Configure-Providers + $commandTrigger++ +} + +if($commandTrigger -eq 0){ + Help + Press-EnterToContinue + exit +} Write-Host "End Script" -Press-EnterToContinue +Press-EnterToContinue \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index ca56ca39..251aa269 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "Kexa", - "version": "1.8.0-SNAPSHOT.69.12ed96c", + "version": "1.10.0-SNAPSHOT.31.b2209bd", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "Kexa", - "version": "1.8.0-SNAPSHOT.69.12ed96c", + "version": "1.10.0-SNAPSHOT.31.b2209bd", "hasInstallScript": true, "license": "MIT", "dependencies": { @@ -15,6 +15,7 @@ "@azure/arm-containerservice": "^19.0.0", "@azure/arm-machinelearning": "^2.1.1", "@azure/arm-machinelearningservices": "^5.0.1", + "@azure/arm-monitor": "^7.0.0", "@azure/arm-network": "^30.1.0", "@azure/arm-resources": "^5.1.0", "@azure/arm-resources-subscriptions": "^2.1.0", @@ -75,6 +76,7 @@ "googleapis": "^105.0.0", "helm-ts": "^0.1.5", "js-yaml": "^4.1.0", + "jsdom": "^23.0.1", "jsome": "^2.3.26", "moment": "^2.29.4", "node-config-ts": "^3.3.1", @@ -200,48 +202,50 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@aws-sdk/client-ec2": { - "version": "3.416.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.416.0.tgz", - "integrity": "sha512-VOrVdxSnJe0VTRLFoaUvSzzNlX2d4SHUCyF6jHQjC6PpgjkMVwstQC/8jdOablqZwI7Ylw6+cS2OrWKDIDjv1Q==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-ec2/-/client-ec2-3.465.0.tgz", + "integrity": "sha512-jrGjGvotHnitGSP61MVzDaDfCIQZ+bctDi+NAxVVPthgn2nzDKPmnFFgXomWTvMARIFqxhKzaVTIn73ZHKzODQ==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/client-sts": "3.414.0", - "@aws-sdk/credential-provider-node": "3.414.0", - "@aws-sdk/middleware-host-header": "3.413.0", - "@aws-sdk/middleware-logger": "3.413.0", - "@aws-sdk/middleware-recursion-detection": "3.413.0", - "@aws-sdk/middleware-sdk-ec2": "3.413.0", - "@aws-sdk/middleware-signing": "3.413.0", - "@aws-sdk/middleware-user-agent": "3.413.0", - "@aws-sdk/region-config-resolver": "3.413.0", - "@aws-sdk/types": "3.413.0", - "@aws-sdk/util-endpoints": "3.413.0", - "@aws-sdk/util-user-agent-browser": "3.413.0", - "@aws-sdk/util-user-agent-node": "3.413.0", - "@smithy/config-resolver": "^2.0.8", - "@smithy/fetch-http-handler": "^2.1.3", - "@smithy/hash-node": "^2.0.7", - "@smithy/invalid-dependency": "^2.0.7", - "@smithy/middleware-content-length": "^2.0.9", - "@smithy/middleware-endpoint": "^2.0.7", - "@smithy/middleware-retry": "^2.0.10", - "@smithy/middleware-serde": "^2.0.7", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/node-http-handler": "^2.1.3", - "@smithy/protocol-http": "^3.0.3", - "@smithy/smithy-client": "^2.1.4", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", - "@smithy/util-base64": "^2.0.0", + "@aws-sdk/client-sts": "3.465.0", + "@aws-sdk/core": "3.465.0", + "@aws-sdk/credential-provider-node": "3.465.0", + "@aws-sdk/middleware-host-header": "3.465.0", + "@aws-sdk/middleware-logger": "3.465.0", + "@aws-sdk/middleware-recursion-detection": "3.465.0", + "@aws-sdk/middleware-sdk-ec2": "3.465.0", + "@aws-sdk/middleware-signing": "3.465.0", + "@aws-sdk/middleware-user-agent": "3.465.0", + "@aws-sdk/region-config-resolver": "3.465.0", + "@aws-sdk/types": "3.465.0", + "@aws-sdk/util-endpoints": "3.465.0", + "@aws-sdk/util-user-agent-browser": "3.465.0", + "@aws-sdk/util-user-agent-node": "3.465.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.8", - "@smithy/util-defaults-mode-node": "^2.0.10", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", - "@smithy/util-waiter": "^2.0.7", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", + "@smithy/util-waiter": "^2.0.13", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0", "uuid": "^8.3.2" @@ -259,43 +263,45 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.414.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.414.0.tgz", - "integrity": "sha512-GvRwQ7wA3edzsQEKS70ZPhkOUZ62PAiXasjp6GxrsADEb8sV1z4FxXNl9Un/7fQxKkh9QYaK1Wu1PmhLi9MLMg==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.465.0.tgz", + "integrity": "sha512-JXDBa3Sl+LS0KEOs0PZoIjpNKEEGfeyFwdnRxi8Y1hMXNEKyJug1cI2Psqu2olpn4KeXwoP1BuITppZYdolOew==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.413.0", - "@aws-sdk/middleware-logger": "3.413.0", - "@aws-sdk/middleware-recursion-detection": "3.413.0", - "@aws-sdk/middleware-user-agent": "3.413.0", - "@aws-sdk/region-config-resolver": "3.413.0", - "@aws-sdk/types": "3.413.0", - "@aws-sdk/util-endpoints": "3.413.0", - "@aws-sdk/util-user-agent-browser": "3.413.0", - "@aws-sdk/util-user-agent-node": "3.413.0", - "@smithy/config-resolver": "^2.0.8", - "@smithy/fetch-http-handler": "^2.1.3", - "@smithy/hash-node": "^2.0.7", - "@smithy/invalid-dependency": "^2.0.7", - "@smithy/middleware-content-length": "^2.0.9", - "@smithy/middleware-endpoint": "^2.0.7", - "@smithy/middleware-retry": "^2.0.10", - "@smithy/middleware-serde": "^2.0.7", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/node-http-handler": "^2.1.3", - "@smithy/protocol-http": "^3.0.3", - "@smithy/smithy-client": "^2.1.4", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", - "@smithy/util-base64": "^2.0.0", + "@aws-sdk/core": "3.465.0", + "@aws-sdk/middleware-host-header": "3.465.0", + "@aws-sdk/middleware-logger": "3.465.0", + "@aws-sdk/middleware-recursion-detection": "3.465.0", + "@aws-sdk/middleware-user-agent": "3.465.0", + "@aws-sdk/region-config-resolver": "3.465.0", + "@aws-sdk/types": "3.465.0", + "@aws-sdk/util-endpoints": "3.465.0", + "@aws-sdk/util-user-agent-browser": "3.465.0", + "@aws-sdk/util-user-agent-node": "3.465.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.8", - "@smithy/util-defaults-mode-node": "^2.0.10", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -303,46 +309,48 @@ } }, "node_modules/@aws-sdk/client-sts": { - "version": "3.414.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.414.0.tgz", - "integrity": "sha512-xeYH3si6Imp1EWolWn1zuxJJu2AXKwXl1HDftQULwC5AWkm1mNFbXYSJN4hQul1IM+kn+JTRB0XRHByQkKhe+Q==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.465.0.tgz", + "integrity": "sha512-rHi9ba6ssNbVjlWSdhi4C5newEhGhzkY9UE4KB+/Tj21zXfEP8r6uIltnQXPtun2SdA95Krh/yS1qQ4MRuzqyA==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/credential-provider-node": "3.414.0", - "@aws-sdk/middleware-host-header": "3.413.0", - "@aws-sdk/middleware-logger": "3.413.0", - "@aws-sdk/middleware-recursion-detection": "3.413.0", - "@aws-sdk/middleware-sdk-sts": "3.413.0", - "@aws-sdk/middleware-signing": "3.413.0", - "@aws-sdk/middleware-user-agent": "3.413.0", - "@aws-sdk/region-config-resolver": "3.413.0", - "@aws-sdk/types": "3.413.0", - "@aws-sdk/util-endpoints": "3.413.0", - "@aws-sdk/util-user-agent-browser": "3.413.0", - "@aws-sdk/util-user-agent-node": "3.413.0", - "@smithy/config-resolver": "^2.0.8", - "@smithy/fetch-http-handler": "^2.1.3", - "@smithy/hash-node": "^2.0.7", - "@smithy/invalid-dependency": "^2.0.7", - "@smithy/middleware-content-length": "^2.0.9", - "@smithy/middleware-endpoint": "^2.0.7", - "@smithy/middleware-retry": "^2.0.10", - "@smithy/middleware-serde": "^2.0.7", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/node-http-handler": "^2.1.3", - "@smithy/protocol-http": "^3.0.3", - "@smithy/smithy-client": "^2.1.4", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", - "@smithy/util-base64": "^2.0.0", + "@aws-sdk/core": "3.465.0", + "@aws-sdk/credential-provider-node": "3.465.0", + "@aws-sdk/middleware-host-header": "3.465.0", + "@aws-sdk/middleware-logger": "3.465.0", + "@aws-sdk/middleware-recursion-detection": "3.465.0", + "@aws-sdk/middleware-sdk-sts": "3.465.0", + "@aws-sdk/middleware-signing": "3.465.0", + "@aws-sdk/middleware-user-agent": "3.465.0", + "@aws-sdk/region-config-resolver": "3.465.0", + "@aws-sdk/types": "3.465.0", + "@aws-sdk/util-endpoints": "3.465.0", + "@aws-sdk/util-user-agent-browser": "3.465.0", + "@aws-sdk/util-user-agent-node": "3.465.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", + "@smithy/protocol-http": "^3.0.9", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.8", - "@smithy/util-defaults-mode-node": "^2.0.10", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", "fast-xml-parser": "4.2.5", "tslib": "^2.5.0" }, @@ -350,14 +358,26 @@ "node": ">=14.0.0" } }, + "node_modules/@aws-sdk/core": { + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.465.0.tgz", + "integrity": "sha512-fHSIw/Rgex3KbrEKn6ZrUc2VcsOTpdBMeyYtfmsTOLSyDDOG9k3jelOvVbCbrK5N6uEUSM8hrnySEKg94UB0cg==", + "dependencies": { + "@smithy/smithy-client": "^2.1.15", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.413.0.tgz", - "integrity": "sha512-yeMOkfG20/RlzfPMtQuDB647AcPEvFEVYOWZzAWVJfldYQ5ybKr0d7sBkgG9sdAzGkK3Aw9dE4rigYI8EIqc1Q==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.465.0.tgz", + "integrity": "sha512-fku37AgkB9KhCuWHE6mfvbWYU0X84Df6MQ60nYH7s/PiNEhkX2cVI6X6kOKjP1MNIwRcYt+oQDvplVKdHume+A==", "dependencies": { - "@aws-sdk/types": "3.413.0", + "@aws-sdk/types": "3.465.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -365,19 +385,19 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.414.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.414.0.tgz", - "integrity": "sha512-rlpLLx70roJL/t40opWC96LbIASejdMbRlgSCRpK8b/hKngYDe5A7SRVacaw08vYrAywxRiybxpQOwOt9b++rA==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.413.0", - "@aws-sdk/credential-provider-process": "3.413.0", - "@aws-sdk/credential-provider-sso": "3.414.0", - "@aws-sdk/credential-provider-web-identity": "3.413.0", - "@aws-sdk/types": "3.413.0", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.465.0.tgz", + "integrity": "sha512-B1MFufvdToAEMtfszilVnKer2S7P/OfMhkCizq2zuu8aU/CquRyHvKEQgWdvqunUDrFnVTc0kUZgsbBY0uPjLg==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.465.0", + "@aws-sdk/credential-provider-process": "3.465.0", + "@aws-sdk/credential-provider-sso": "3.465.0", + "@aws-sdk/credential-provider-web-identity": "3.465.0", + "@aws-sdk/types": "3.465.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -385,20 +405,20 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.414.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.414.0.tgz", - "integrity": "sha512-xlkcOUKeGHInxWKKrZKIPSBCUL/ozyCldJBjmMKEj7ZmBAEiDcjpMe3pZ//LibMkCSy0b/7jtyQBE/eaIT2o0A==", - "dependencies": { - "@aws-sdk/credential-provider-env": "3.413.0", - "@aws-sdk/credential-provider-ini": "3.414.0", - "@aws-sdk/credential-provider-process": "3.413.0", - "@aws-sdk/credential-provider-sso": "3.414.0", - "@aws-sdk/credential-provider-web-identity": "3.413.0", - "@aws-sdk/types": "3.413.0", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.465.0.tgz", + "integrity": "sha512-R3VA9yJ0BvezvrDxcgPTv9VHbVPbzchLTrX5jLFSVuW/lPPYLUi/Cjtyg9C9Y7qRfoQS4fNMvSRhwO5/TF68gA==", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.465.0", + "@aws-sdk/credential-provider-ini": "3.465.0", + "@aws-sdk/credential-provider-process": "3.465.0", + "@aws-sdk/credential-provider-sso": "3.465.0", + "@aws-sdk/credential-provider-web-identity": "3.465.0", + "@aws-sdk/types": "3.465.0", "@smithy/credential-provider-imds": "^2.0.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -406,14 +426,14 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.413.0.tgz", - "integrity": "sha512-GFJdgS14GzJ1wc2DEnS44Z/34iBZ05CAkvDsLN2CMwcDgH4eZuif9/x0lwzIJBK3xVFHzYUeVvEzsqRPbCHRsw==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.465.0.tgz", + "integrity": "sha512-YE6ZrRYwvb8969hWQnr4uvOJ8RU0JrNsk3vWTe/czly37ioZUEhi8jmpQp4f2mX/6U6buoFGWu5Se3VCdw2SFQ==", "dependencies": { - "@aws-sdk/types": "3.413.0", + "@aws-sdk/types": "3.465.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -421,16 +441,16 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.414.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.414.0.tgz", - "integrity": "sha512-w9g2hlkZn7WekWICRqk+L33py7KrjYMFryVpkKXOx2pjDchCfZDr6pL1ml782GZ0L3qsob4SbNpbtp13JprnWQ==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.465.0.tgz", + "integrity": "sha512-tLIP/4JQIJpn8yIg6RZRQ2nmvj5i4wLZvYvY4RtaFv2JrQUkmmTfyOZJuOBrIFRwJjx0fHmFu8DJjcOhMzllIQ==", "dependencies": { - "@aws-sdk/client-sso": "3.414.0", - "@aws-sdk/token-providers": "3.413.0", - "@aws-sdk/types": "3.413.0", + "@aws-sdk/client-sso": "3.465.0", + "@aws-sdk/token-providers": "3.465.0", + "@aws-sdk/types": "3.465.0", "@smithy/property-provider": "^2.0.0", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -438,13 +458,13 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.413.0.tgz", - "integrity": "sha512-5cdA1Iq9JeEHtg59ERV9fdMQ7cS0JF6gH/BWA7HYEUGdSVPXCuwyEggPtG64QgpNU7SmxH+QdDG+Ldxz09ycIA==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.465.0.tgz", + "integrity": "sha512-B4Y75fMTZIniEU0yyqat+9NsQbYlXdqP5Y3bShkaG3pGLOHzF/xMlWuG+D3kkQ806PLYi+BgfVls4BcO+NyVcA==", "dependencies": { - "@aws-sdk/types": "3.413.0", + "@aws-sdk/types": "3.465.0", "@smithy/property-provider": "^2.0.0", - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -452,13 +472,13 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.413.0.tgz", - "integrity": "sha512-r9PQx468EzPHo9wRzZLfgROpKtVdbkteMrdhsuM12bifVHjU1OHr7yfhc1OdWv39X8Xiv6F8n5r+RBQEM0S6+g==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.465.0.tgz", + "integrity": "sha512-nnGva8eplwEJqdVzcb+xF2Fwua0PpiwxMEvpnIy73gNbetbJdgFIprryMLYes00xzJEqnew+LWdpcd3YyS34ZA==", "dependencies": { - "@aws-sdk/types": "3.413.0", - "@smithy/protocol-http": "^3.0.3", - "@smithy/types": "^2.3.1", + "@aws-sdk/types": "3.465.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -466,12 +486,12 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.413.0.tgz", - "integrity": "sha512-jqcXDubcKvoqBy+kkEa0WoNjG6SveDeyNy+gdGnTV+DEtYjkcHrHJei4q0W5zFl0mzc+dP+z8tJF44rv95ZY3Q==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.465.0.tgz", + "integrity": "sha512-aGMx1aSlzDDgjZ7fSxLhGD5rkyCfHwq04TSB5fQAgDBqUjj4IQXZwmNglX0sLRmArXZtDglUVESOfKvTANJTPg==", "dependencies": { - "@aws-sdk/types": "3.413.0", - "@smithy/types": "^2.3.1", + "@aws-sdk/types": "3.465.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -479,13 +499,13 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.413.0.tgz", - "integrity": "sha512-C6k0IKJk/A4/VBGwUjxEPG+WOjjnmWAZVRBUzaeM7PqRh+g5rLcuIV356ntV3pREVxyiSTePTYVYIHU9YXkLKQ==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.465.0.tgz", + "integrity": "sha512-ol3dlsTnryBhV5qkUvK5Yg3dRaV1NXIxYJaIkShrl8XAv4wRNcDJDmO5NYq5eVZ3zgV1nv6xIpZ//dDnnf6Z+g==", "dependencies": { - "@aws-sdk/types": "3.413.0", - "@smithy/protocol-http": "^3.0.3", - "@smithy/types": "^2.3.1", + "@aws-sdk/types": "3.465.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -493,17 +513,17 @@ } }, "node_modules/@aws-sdk/middleware-sdk-ec2": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.413.0.tgz", - "integrity": "sha512-4cD1O7/Z/hBnO6V09BWPY1CCfa/EOPx9v5R6N86IxrT7YLR2BBITZBfAsrTKrjsrhGYDIJTjfy3PL3nA2FCdxg==", - "dependencies": { - "@aws-sdk/types": "3.413.0", - "@aws-sdk/util-format-url": "3.413.0", - "@smithy/middleware-endpoint": "^2.0.7", - "@smithy/protocol-http": "^3.0.3", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-ec2/-/middleware-sdk-ec2-3.465.0.tgz", + "integrity": "sha512-1hfIsmmM3sdAXvEZMsqJc9YJWvkPfdufpQVDCOzdX6VmUV/1ONY0xQLxaw83vSo6RGCk1FIdtPmX+aum6Rkm0g==", + "dependencies": { + "@aws-sdk/types": "3.465.0", + "@aws-sdk/util-format-url": "3.465.0", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/protocol-http": "^3.0.9", "@smithy/signature-v4": "^2.0.0", - "@smithy/smithy-client": "^2.1.4", - "@smithy/types": "^2.3.1", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -511,13 +531,13 @@ } }, "node_modules/@aws-sdk/middleware-sdk-sts": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.413.0.tgz", - "integrity": "sha512-t0u//JUyaEZRVnH5q+Ur3tWnuyIsTdwA0XOdDCZXcSlLYzGp2MI/tScLjn9IydRrceIFpFfmbjk4Nf/Q6TeBTQ==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.465.0.tgz", + "integrity": "sha512-PmTM5ycUe1RLAPrQXLCR8JzKamJuKDB0aIW4rx4/skurzWsEGRI47WHggf9N7sPie41IBGUhRbXcf7sfPjvI3Q==", "dependencies": { - "@aws-sdk/middleware-signing": "3.413.0", - "@aws-sdk/types": "3.413.0", - "@smithy/types": "^2.3.1", + "@aws-sdk/middleware-signing": "3.465.0", + "@aws-sdk/types": "3.465.0", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -525,16 +545,16 @@ } }, "node_modules/@aws-sdk/middleware-signing": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.413.0.tgz", - "integrity": "sha512-QFEnVvIKYPCermM+ESxEztgUgXzGSKpnPnohMYNvSZySqmOLu/4VvxiZbRO/BX9J3ZHcUgaw4vKm5VBZRrycxw==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.465.0.tgz", + "integrity": "sha512-d90KONWXSC3jA0kqJ6u8ygS4LoMg1TmSM7bPhHyibJVAEhnrlB4Aq1CWljNbbtphGpdKy5/XRM9O0/XCXWKQ4w==", "dependencies": { - "@aws-sdk/types": "3.413.0", + "@aws-sdk/types": "3.465.0", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.3", + "@smithy/protocol-http": "^3.0.9", "@smithy/signature-v4": "^2.0.0", - "@smithy/types": "^2.3.1", - "@smithy/util-middleware": "^2.0.0", + "@smithy/types": "^2.5.0", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -542,14 +562,14 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.413.0.tgz", - "integrity": "sha512-eVMJyeWxNBqerhfD+sE9sTjDtwQiECrfU6wpUQP5fGPhJD2cVVZPxuTuJGDZCu/4k/V61dF85IYlsPUNLdVQ6w==", - "dependencies": { - "@aws-sdk/types": "3.413.0", - "@aws-sdk/util-endpoints": "3.413.0", - "@smithy/protocol-http": "^3.0.3", - "@smithy/types": "^2.3.1", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.465.0.tgz", + "integrity": "sha512-1MvIWMj2nktLOJN8Kh4jiTK28oL85fTeoXHZ+V8xYMzont6C6Y8gQPtg7ka+RotHwqWMrovfnANisnX8EzEP/Q==", + "dependencies": { + "@aws-sdk/types": "3.465.0", + "@aws-sdk/util-endpoints": "3.465.0", + "@smithy/protocol-http": "^3.0.9", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -557,14 +577,14 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.413.0.tgz", - "integrity": "sha512-h90e6yyOhvoc+1F5vFk3C5mxwB8RSDEMKTO/fxexyur94seczZ1yxyYkTMZv30oc9RUiToABlHNrh/wxL7TZPQ==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.465.0.tgz", + "integrity": "sha512-h0Phd2Ae873dsPSWuxqxz2yRC5NMeeWxQiJPh4j42HF8g7dZK7tMQPkYznAoA/BzSBsEX87sbr3MmigquSyUTA==", "dependencies": { - "@smithy/node-config-provider": "^2.0.10", - "@smithy/types": "^2.3.1", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.0", + "@smithy/util-middleware": "^2.0.6", "tslib": "^2.5.0" }, "engines": { @@ -572,44 +592,46 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.413.0.tgz", - "integrity": "sha512-NfP1Ib9LAWVLMTOa/1aJwt4TRrlRrNyukCpVZGfNaMnNNEoP5Rakdbcs8KFVHe/MJzU+GdKVzxQ4TgRkLOGTrA==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.465.0.tgz", + "integrity": "sha512-NaZbsyLs3whzRHGV27hrRwEdXB/tEK6tqn/aCNBy862LhVzocY1A+eYLKrnrvpraOOd2vyAuOtvvB3RMIdiL6g==", "dependencies": { "@aws-crypto/sha256-browser": "3.0.0", "@aws-crypto/sha256-js": "3.0.0", - "@aws-sdk/middleware-host-header": "3.413.0", - "@aws-sdk/middleware-logger": "3.413.0", - "@aws-sdk/middleware-recursion-detection": "3.413.0", - "@aws-sdk/middleware-user-agent": "3.413.0", - "@aws-sdk/types": "3.413.0", - "@aws-sdk/util-endpoints": "3.413.0", - "@aws-sdk/util-user-agent-browser": "3.413.0", - "@aws-sdk/util-user-agent-node": "3.413.0", - "@smithy/config-resolver": "^2.0.8", - "@smithy/fetch-http-handler": "^2.1.3", - "@smithy/hash-node": "^2.0.7", - "@smithy/invalid-dependency": "^2.0.7", - "@smithy/middleware-content-length": "^2.0.9", - "@smithy/middleware-endpoint": "^2.0.7", - "@smithy/middleware-retry": "^2.0.10", - "@smithy/middleware-serde": "^2.0.7", - "@smithy/middleware-stack": "^2.0.0", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/node-http-handler": "^2.1.3", + "@aws-sdk/middleware-host-header": "3.465.0", + "@aws-sdk/middleware-logger": "3.465.0", + "@aws-sdk/middleware-recursion-detection": "3.465.0", + "@aws-sdk/middleware-user-agent": "3.465.0", + "@aws-sdk/region-config-resolver": "3.465.0", + "@aws-sdk/types": "3.465.0", + "@aws-sdk/util-endpoints": "3.465.0", + "@aws-sdk/util-user-agent-browser": "3.465.0", + "@aws-sdk/util-user-agent-node": "3.465.0", + "@smithy/config-resolver": "^2.0.18", + "@smithy/fetch-http-handler": "^2.2.6", + "@smithy/hash-node": "^2.0.15", + "@smithy/invalid-dependency": "^2.0.13", + "@smithy/middleware-content-length": "^2.0.15", + "@smithy/middleware-endpoint": "^2.2.0", + "@smithy/middleware-retry": "^2.0.20", + "@smithy/middleware-serde": "^2.0.13", + "@smithy/middleware-stack": "^2.0.7", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/node-http-handler": "^2.1.9", "@smithy/property-provider": "^2.0.0", - "@smithy/protocol-http": "^3.0.3", + "@smithy/protocol-http": "^3.0.9", "@smithy/shared-ini-file-loader": "^2.0.6", - "@smithy/smithy-client": "^2.1.4", - "@smithy/types": "^2.3.1", - "@smithy/url-parser": "^2.0.7", - "@smithy/util-base64": "^2.0.0", + "@smithy/smithy-client": "^2.1.15", + "@smithy/types": "^2.5.0", + "@smithy/url-parser": "^2.0.13", + "@smithy/util-base64": "^2.0.1", "@smithy/util-body-length-browser": "^2.0.0", "@smithy/util-body-length-node": "^2.1.0", - "@smithy/util-defaults-mode-browser": "^2.0.8", - "@smithy/util-defaults-mode-node": "^2.0.10", - "@smithy/util-retry": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-defaults-mode-browser": "^2.0.19", + "@smithy/util-defaults-mode-node": "^2.0.25", + "@smithy/util-endpoints": "^1.0.4", + "@smithy/util-retry": "^2.0.6", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -617,11 +639,11 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.413.0.tgz", - "integrity": "sha512-j1xib0f/TazIFc5ySIKOlT1ujntRbaoG4LJFeEezz4ji03/wSJMI8Vi4KjzpBp8J1tTu0oRDnsxRIGixsUBeYQ==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.465.0.tgz", + "integrity": "sha512-Clqu2eD50OOzwSftGpzJrIOGev/7VJhJpc02SeS4cqFgI9EVd+rnFKS/Ux0kcwjLQBMiPcCLtql3KAHApFHAIA==", "dependencies": { - "@smithy/types": "^2.3.1", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -629,11 +651,12 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.413.0.tgz", - "integrity": "sha512-VAwr7cITNb1L6/2XUPIbCOuhKGm0VtKCRblurrfUF2bxqG/wtuw/2Fm4ahYJPyxklOSXAMSq+RHdFWcir0YB/g==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.465.0.tgz", + "integrity": "sha512-lDpBN1faVw8Udg5hIo+LJaNfllbBF86PCisv628vfcggO8/EArL/v2Eos0KeqVT8yaINXCRSagwfo5TNTuW0KQ==", "dependencies": { - "@aws-sdk/types": "3.413.0", + "@aws-sdk/types": "3.465.0", + "@smithy/util-endpoints": "^1.0.4", "tslib": "^2.5.0" }, "engines": { @@ -641,13 +664,13 @@ } }, "node_modules/@aws-sdk/util-format-url": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.413.0.tgz", - "integrity": "sha512-ZTL8eOMY8C3CJErYBV3Qp3EEc3wfTmwiB2b9Eqml7WjWeAgg4x4RZrsx4EYN8HITtuHkZrEw5hq3v0PgCmOQPQ==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.465.0.tgz", + "integrity": "sha512-jJmIeMFQMADPw5DfyIzqqsIyS4p+duc1fhnOK+GfEkyja1cjafUQOcvovpQ4rCRHGffjTG2LCkOdyrSRDTFzfQ==", "dependencies": { - "@aws-sdk/types": "3.413.0", - "@smithy/querystring-builder": "^2.0.7", - "@smithy/types": "^2.3.1", + "@aws-sdk/types": "3.465.0", + "@smithy/querystring-builder": "^2.0.13", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -655,9 +678,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.310.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz", - "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz", + "integrity": "sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw==", "dependencies": { "tslib": "^2.5.0" }, @@ -666,24 +689,24 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.413.0.tgz", - "integrity": "sha512-7j/qWcRO2OBZBre2fC6V6M0PAS9n7k6i+VtofPkkhxC2DZszLJElqnooF9hGmVGYK3zR47Np4WjURXKIEZclWg==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.465.0.tgz", + "integrity": "sha512-RM+LjkIsmUCBJ4yQeBnkJWJTjPOPqcNaKv8bpZxatIHdvzGhXLnWLNi3qHlBsJB2mKtKRet6nAUmKmzZR1sDzA==", "dependencies": { - "@aws-sdk/types": "3.413.0", - "@smithy/types": "^2.3.1", + "@aws-sdk/types": "3.465.0", + "@smithy/types": "^2.5.0", "bowser": "^2.11.0", "tslib": "^2.5.0" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.413.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.413.0.tgz", - "integrity": "sha512-vHm9TVZIzfWMeDvdmoOky6VarqOt8Pr68CESHN0jyuO6XbhCDnr9rpaXiBhbSR+N1Qm7R/AfJgAhQyTMu2G1OA==", + "version": "3.465.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.465.0.tgz", + "integrity": "sha512-XsHbq7gLCiGdy6FQ7/5nGslK0ij3Iuh051djuIICvNurlds5cqKLiBe63gX3IUUwxJcrKh4xBGviQJ52KdVSeg==", "dependencies": { - "@aws-sdk/types": "3.413.0", - "@smithy/node-config-provider": "^2.0.10", - "@smithy/types": "^2.3.1", + "@aws-sdk/types": "3.465.0", + "@smithy/node-config-provider": "^2.1.5", + "@smithy/types": "^2.5.0", "tslib": "^2.5.0" }, "engines": { @@ -735,9 +758,9 @@ } }, "node_modules/@azure/arm-containerservice": { - "version": "19.3.0", - "resolved": "https://registry.npmjs.org/@azure/arm-containerservice/-/arm-containerservice-19.3.0.tgz", - "integrity": "sha512-SZ1kLB0GLPC3/cMCW2ISqD4IjAeqBe5QHb5F9sCKUHaa96gLwuHE842WDuIzS5NQ9oCuw2+uCBLIxBJbxea9Gw==", + "version": "19.5.0", + "resolved": "https://registry.npmjs.org/@azure/arm-containerservice/-/arm-containerservice-19.5.0.tgz", + "integrity": "sha512-/5hL5uOpJ46+C4FZjiNFkiy0AWK1AlFxMtkEuPSXFZMaulg8Ko+uRY2qFWfGDe9nmBP2uQ/vXccfbpV1h+uWiw==", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -748,7 +771,7 @@ "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=18.0.0" } }, "node_modules/@azure/arm-machinelearning": { @@ -786,6 +809,23 @@ "node": ">=12.0.0" } }, + "node_modules/@azure/arm-monitor": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@azure/arm-monitor/-/arm-monitor-7.0.0.tgz", + "integrity": "sha512-RtCLRc/29bqaaf5iuUOmJvc5XDolN/icFhlKC/rXXKTtmwB3sKymaOZbNHnOM4P0nJYpS5QIo7Nzvh4M3Wj+FA==", + "dependencies": { + "@azure/abort-controller": "^1.0.0", + "@azure/core-auth": "^1.3.0", + "@azure/core-client": "^1.0.0", + "@azure/core-lro": "^2.2.0", + "@azure/core-paging": "^1.2.0", + "@azure/core-rest-pipeline": "^1.1.0", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, "node_modules/@azure/arm-network": { "version": "30.2.0", "resolved": "https://registry.npmjs.org/@azure/arm-network/-/arm-network-30.2.0.tgz", @@ -883,9 +923,9 @@ } }, "node_modules/@azure/core-http": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.3.tgz", - "integrity": "sha512-QMib3wXotJMFhHgmJBPUF9YsyErw34H0XDFQd9CauH7TPB+RGcyl9Ayy7iURtJB04ngXhE6YwrQsWDXlSLrilg==", + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@azure/core-http/-/core-http-3.0.4.tgz", + "integrity": "sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.3.0", @@ -965,9 +1005,9 @@ } }, "node_modules/@azure/core-rest-pipeline": { - "version": "1.12.1", - "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.1.tgz", - "integrity": "sha512-SsyWQ+T5MFQRX+M8H/66AlaI6HyCbQStGfFngx2fuiW+vKI2DkhtOvbYodPyf9fOe/ARLWWc3ohX54lQ5Kmaog==", + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/@azure/core-rest-pipeline/-/core-rest-pipeline-1.12.2.tgz", + "integrity": "sha512-wLLJQdL4v1yoqYtEtjKNjf8pJ/G/BqVomAWxcKOR1KbZJyCEnCv04yks7Y1NhJ3JzxbDs307W67uX0JzklFdCg==", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-auth": "^1.4.0", @@ -980,7 +1020,7 @@ "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@azure/core-tracing": { @@ -995,15 +1035,15 @@ } }, "node_modules/@azure/core-util": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.4.0.tgz", - "integrity": "sha512-eGAyJpm3skVQoLiRqm/xPa+SXi/NPDdSHMxbRAz2lSprd+Zs+qrpQGQQ2VQ3Nttu+nSZR4XoYQC71LbEI7jsig==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@azure/core-util/-/core-util-1.6.1.tgz", + "integrity": "sha512-h5taHeySlsV9qxuK64KZxy4iln1BtMYlNt5jbuEFN3UFSAd1EwKg/Gjl5a6tZ/W8t6li3xPnutOx7zbDyXnPmQ==", "dependencies": { "@azure/abort-controller": "^1.0.0", "tslib": "^2.2.0" }, "engines": { - "node": ">=14.0.0" + "node": ">=16.0.0" } }, "node_modules/@azure/functions": { @@ -1041,9 +1081,9 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" }, "node_modules/@azure/identity": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.3.0.tgz", - "integrity": "sha512-gISa/dAAxrWt6F2WiDXZY0y2xY4MLlN2wkNW4cPuq5OgPQKLSkxLc4I2WR04puTfZyQZnpXbAapAMEj1b96fgg==", + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/@azure/identity/-/identity-3.4.1.tgz", + "integrity": "sha512-oQ/r5MBdfZTMIUcY5Ch8G7Vv9aIXDkEYyU4Dfqjim4MQN+LY2uiQ57P1JDopMLeHCsZxM4yy8lEdne3tM9Xhzg==", "dev": true, "dependencies": { "@azure/abort-controller": "^1.0.0", @@ -1051,31 +1091,20 @@ "@azure/core-client": "^1.4.0", "@azure/core-rest-pipeline": "^1.1.0", "@azure/core-tracing": "^1.0.0", - "@azure/core-util": "^1.0.0", + "@azure/core-util": "^1.6.1", "@azure/logger": "^1.0.0", - "@azure/msal-browser": "^2.37.1", - "@azure/msal-common": "^13.1.0", - "@azure/msal-node": "^1.17.3", + "@azure/msal-browser": "^3.5.0", + "@azure/msal-node": "^2.5.1", "events": "^3.0.0", "jws": "^4.0.0", "open": "^8.0.0", "stoppable": "^1.1.0", - "tslib": "^2.2.0", - "uuid": "^8.3.0" + "tslib": "^2.2.0" }, "engines": { "node": ">=14.0.0" } }, - "node_modules/@azure/identity/node_modules/uuid": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "dev": true, - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@azure/keyvault-secrets": { "version": "4.7.0", "resolved": "https://registry.npmjs.org/@azure/keyvault-secrets/-/keyvault-secrets-4.7.0.tgz", @@ -1165,38 +1194,38 @@ } }, "node_modules/@azure/msal-browser": { - "version": "2.38.2", - "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-2.38.2.tgz", - "integrity": "sha512-71BeIn2we6LIgMplwCSaMq5zAwmalyJR3jFcVOZxNVfQ1saBRwOD+P77nLs5vrRCedVKTq8RMFhIOdpMLNno0A==", + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-browser/-/msal-browser-3.6.0.tgz", + "integrity": "sha512-FrFBJXRJMyWXjAjg4cUNZwEKktzfzD/YD9+S1kj2ors67hKoveam4aL0bZuCZU/jTiHTn0xDQGQh2ksCMXTXtA==", "dev": true, "dependencies": { - "@azure/msal-common": "13.3.0" + "@azure/msal-common": "14.5.0" }, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-common": { - "version": "13.3.0", - "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-13.3.0.tgz", - "integrity": "sha512-/VFWTicjcJbrGp3yQP7A24xU95NiDMe23vxIU1U6qdRPFsprMDNUohMudclnd+WSHE4/McqkZs/nUU3sAKkVjg==", + "version": "14.5.0", + "resolved": "https://registry.npmjs.org/@azure/msal-common/-/msal-common-14.5.0.tgz", + "integrity": "sha512-Gx5rZbiZV/HiZ2nEKfjfAF/qDdZ4/QWxMvMo2jhIFVz528dVKtaZyFAOtsX2Ak8+TQvRsGCaEfuwJFuXB6tu1A==", "dev": true, "engines": { "node": ">=0.8.0" } }, "node_modules/@azure/msal-node": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-1.18.3.tgz", - "integrity": "sha512-lI1OsxNbS/gxRD4548Wyj22Dk8kS7eGMwD9GlBZvQmFV8FJUXoXySL1BiNzDsHUE96/DS/DHmA+F73p1Dkcktg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@azure/msal-node/-/msal-node-2.6.0.tgz", + "integrity": "sha512-RWAWCYYrSldIYC47oWtofIun41e6SB9TBYgGYsezq6ednagwo9ZRFyRsvl1NabmdTkdDDXRAABIdveeN2Gtd8w==", "dev": true, "dependencies": { - "@azure/msal-common": "13.3.0", + "@azure/msal-common": "14.5.0", "jsonwebtoken": "^9.0.0", "uuid": "^8.3.0" }, "engines": { - "node": "10 || 12 || 14 || 16 || 18" + "node": "16|| 18 || 20" } }, "node_modules/@azure/msal-node/node_modules/uuid": { @@ -1209,9 +1238,9 @@ } }, "node_modules/@azure/storage-blob": { - "version": "12.16.0", - "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.16.0.tgz", - "integrity": "sha512-jz33rUSUGUB65FgYrTRgRDjG6hdPHwfvHe+g/UrwVG8MsyLqSxg9TaW7Yuhjxu1v1OZ5xam2NU6+IpCN0xJO8Q==", + "version": "12.17.0", + "resolved": "https://registry.npmjs.org/@azure/storage-blob/-/storage-blob-12.17.0.tgz", + "integrity": "sha512-sM4vpsCpcCApagRW5UIjQNlNylo02my2opgp0Emi8x888hZUvJ3dN69Oq20cEGXkMUWnoCrBaB0zyS3yeB87sQ==", "dependencies": { "@azure/abort-controller": "^1.0.0", "@azure/core-http": "^3.0.0", @@ -1257,9 +1286,9 @@ } }, "node_modules/@babel/highlight": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.22.20.tgz", - "integrity": "sha512-dkdMCN3py0+ksCgYmGG8jKeGA/8Tk+gJwSYYlFGxG5lmhfKNoAy004YpLxpS1W2J8m/EK2Ew+yOs9pVRwO89mg==", + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", "peer": true, "dependencies": { "@babel/helper-validator-identifier": "^7.22.20", @@ -1342,9 +1371,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.22.16", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.22.16.tgz", - "integrity": "sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.5.tgz", + "integrity": "sha512-hOOqoiNXrmGdFbhgCzu6GiURxUgM27Xwd/aPuu8RfHEZPBzL1Z54okAHAQjXfcQNwvrlkAmAp4SlRTZ45vlthQ==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1353,9 +1382,9 @@ } }, "node_modules/@babel/runtime": { - "version": "7.22.15", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.15.tgz", - "integrity": "sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==", + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.5.tgz", + "integrity": "sha512-NdUTHcPe4C99WxPub+K9l9tK5/lV4UXIoaHSYgzco9BCyjKAAwzdBI+wWtYqHt7LJdbo74ZjRPJgzVweq1sz0w==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1438,9 +1467,9 @@ } }, "node_modules/@google-cloud/artifact-registry": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/artifact-registry/-/artifact-registry-3.0.1.tgz", - "integrity": "sha512-kMnmjwG14xj4VBC6rw9v64bA3FvBQ6yBAAv08CPTPacHXtcKS5GVIPhVDdDMyT2tlpwOz6cKFJFEJ/hO5foxQQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@google-cloud/artifact-registry/-/artifact-registry-3.1.0.tgz", + "integrity": "sha512-TrCWoqYrS+tr+DZN1EZpit2vsvUxzILcQW28qcrK970nxM/vBDaSzuokkq2CzGEqE+CbCJ6iiG/Q/gfEFXNoGA==", "dependencies": { "google-gax": "^4.0.3" }, @@ -1460,9 +1489,9 @@ } }, "node_modules/@google-cloud/batch": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@google-cloud/batch/-/batch-1.2.0.tgz", - "integrity": "sha512-+k836Ak5HdmmZ2sSWAe93hT76qcsoukK98rEMcbG89xtg9Me5cNE3pZS0XEsisNyBXj9zsKsZBkgJgaa3Ri2Vw==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@google-cloud/batch/-/batch-1.6.0.tgz", + "integrity": "sha512-RmveUzv33nJgwOmVG+KcQC77TZjTPP1l9th1rxfsO3WDOLLf1DU2uCeTwazPgoW/Uz376nc4G3cLAgRCzhqWHw==", "dependencies": { "google-gax": "^4.0.3" }, @@ -1493,9 +1522,9 @@ } }, "node_modules/@google-cloud/common": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.0.tgz", - "integrity": "sha512-IsbTVr7Ag+04GMT87X738vDs85QU1rMvaesm2wEQrtTbZAR92tGmUQ8/D/kdnYgAi98Q4zmfhF+T8Xs/Lw4zAA==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/@google-cloud/common/-/common-5.0.1.tgz", + "integrity": "sha512-7NBC5vD0au75nkctVs2vEGpdUPFs1BaHTMpeI+RVEgQSMe5/wEU6dx9p0fmZA0bj4HgdpobMKeegOcLUiEoxng==", "dependencies": { "@google-cloud/projectify": "^4.0.0", "@google-cloud/promisify": "^4.0.0", @@ -1504,7 +1533,7 @@ "ent": "^2.2.0", "extend": "^3.0.2", "google-auth-library": "^9.0.0", - "retry-request": "^6.0.0", + "retry-request": "^7.0.0", "teeny-request": "^9.0.0" }, "engines": { @@ -1635,6 +1664,17 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, + "node_modules/@google-cloud/compute/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@google-cloud/compute/node_modules/proto3-json-serializer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", @@ -1682,9 +1722,9 @@ } }, "node_modules/@google-cloud/container": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/@google-cloud/container/-/container-5.3.0.tgz", - "integrity": "sha512-bq2uKIXesbdOwWnOsjAKwvv6JTub2syaoQkjlTshOUtFZh24WImwI1kzpHiwPzUotjk8BX1vebPVohiOxS5ZUA==", + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/@google-cloud/container/-/container-5.4.0.tgz", + "integrity": "sha512-6OPd7Ez6BR53HKYshgCrtMiLD8MjhZLbwqDI76n74t5/HvLfZPBomqixzTRP7Eq1OZKBckdQ1P+wCZyYtELVIw==", "dependencies": { "google-gax": "^4.0.3" }, @@ -1693,9 +1733,9 @@ } }, "node_modules/@google-cloud/deploy": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/deploy/-/deploy-3.0.1.tgz", - "integrity": "sha512-0dsvVeDK8YlM9tVIcbNoC2QUkBrQQSpFgr3R6vhTk9kxle58SFv3g/tPhwFqLEemBkWrFYAqvSLM1D7IFsQjFQ==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/@google-cloud/deploy/-/deploy-3.2.0.tgz", + "integrity": "sha512-1zTrNXI5EmvlhTjM4ujAe7NYzQpKFnTsDKAqzHPv6D/+DZFQtpSs0gR9SAU1dt1H2YoIwIST0yyejHGREb9Otg==", "dependencies": { "google-gax": "^4.0.3" }, @@ -1754,9 +1794,9 @@ } }, "node_modules/@google-cloud/lineage": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@google-cloud/lineage/-/lineage-1.0.1.tgz", - "integrity": "sha512-FFRf9isbr5a8ZVko5swJzdfMmNeVE5X8C+kVYn6Pv4Qq5ecBlmRZN7KxOaTgRJz2hJwi4G35u1eAiPnoInkp3A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@google-cloud/lineage/-/lineage-1.1.0.tgz", + "integrity": "sha512-Yylz3AzEKJTVjp6EBHB2WvE8Nke71hmzgdSmzpob3/KwZj9yUFPfzmqGlT58ouOMDMmhtOU8bpevvkAjonkNew==", "dependencies": { "google-gax": "^4.0.3" }, @@ -1836,6 +1876,17 @@ "node": ">=12.0.0" } }, + "node_modules/@google-cloud/local-auth/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@google-cloud/local-auth/node_modules/open": { "version": "7.4.2", "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", @@ -2046,9 +2097,9 @@ } }, "node_modules/@google-cloud/storage": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.1.0.tgz", - "integrity": "sha512-kAtniePZT5Ms9wayYcbT44H+1jwkYvRaA+E3IGnmBLG+aGwMTM0q9Xn0CCIez4D8toeBYczNkhQsQfRT1TDy7A==", + "version": "7.7.0", + "resolved": "https://registry.npmjs.org/@google-cloud/storage/-/storage-7.7.0.tgz", + "integrity": "sha512-EMCEY+6JiIkx7Dt8NXVGGjy1vRdSGdHkoqZoqjJw7cEBkT7ZkX0c7puedfn1MamnzW5SX4xoa2jVq5u7OWBmkQ==", "dependencies": { "@google-cloud/paginator": "^5.0.0", "@google-cloud/projectify": "^4.0.0", @@ -2058,13 +2109,13 @@ "compressible": "^2.0.12", "duplexify": "^4.0.0", "ent": "^2.2.0", - "fast-xml-parser": "^4.2.2", + "fast-xml-parser": "^4.3.0", "gaxios": "^6.0.2", "google-auth-library": "^9.0.0", "mime": "^3.0.0", "mime-types": "^2.0.8", "p-limit": "^3.0.1", - "retry-request": "^6.0.0", + "retry-request": "^7.0.0", "teeny-request": "^9.0.0", "uuid": "^8.0.0" }, @@ -2072,6 +2123,27 @@ "node": ">=14" } }, + "node_modules/@google-cloud/storage/node_modules/fast-xml-parser": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.2.tgz", + "integrity": "sha512-rmrXUXwbJedoXkStenj1kkljNF7ugn5ZjR9FJcwmCfcCbtOMDghPajbc+Tck6vE6F5XsDmx+Pr2le9fw8+pXBg==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, "node_modules/@google-cloud/storage/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -2215,6 +2287,17 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, + "node_modules/@google-cloud/tasks/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/@google-cloud/tasks/node_modules/proto3-json-serializer": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/proto3-json-serializer/-/proto3-json-serializer-1.1.1.tgz", @@ -2317,9 +2400,9 @@ } }, "node_modules/@grpc/grpc-js": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.3.tgz", - "integrity": "sha512-b8iWtdrYIeT5fdZdS4Br/6h/kuk0PW5EVBUGk1amSbrpL8DlktJD43CdcCWwRdd6+jgwHhADSbL9CsNnm6EUPA==", + "version": "1.9.12", + "resolved": "https://registry.npmjs.org/@grpc/grpc-js/-/grpc-js-1.9.12.tgz", + "integrity": "sha512-Um5MBuge32TS3lAKX02PGCnFM4xPT996yLgZNb5H03pn6NyJ4Iwn5YcPq6Jj9yxGRk7WOgaZFtVRH5iTdYBeUg==", "dependencies": { "@grpc/proto-loader": "^0.7.8", "@types/node": ">=12.12.47" @@ -2485,9 +2568,9 @@ } }, "node_modules/@jsdoc/salty": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.5.tgz", - "integrity": "sha512-TfRP53RqunNe2HBobVBJ0VLhK1HbfvBYeTC1ahnN64PWvyYyGebmMiPkuwvD9fpw2ZbkoPb8Q7mwy0aR8Z9rvw==", + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz", + "integrity": "sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg==", "dependencies": { "lodash": "^4.17.21" }, @@ -2548,9 +2631,9 @@ } }, "node_modules/@microsoft/teams-js": { - "version": "2.15.0", - "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.15.0.tgz", - "integrity": "sha512-OZqzIL1uQxxL87lqWBXB9hJtGv5pRzNs1tinLwSpLd8fRoriBNv5g6nvxs/SwY5g1h5evQWrPqwh7qnkprra8w==", + "version": "2.18.0", + "resolved": "https://registry.npmjs.org/@microsoft/teams-js/-/teams-js-2.18.0.tgz", + "integrity": "sha512-sWL3Z/FRuWHc0XEl44hFAA9cDodoCov5HJnW9s1dV7qzIVMnlllvyMPKZqo6Nf/bS3hb/n4RND4i5hC7cuWylA==", "dependencies": { "debug": "^4.3.3" } @@ -2623,14 +2706,6 @@ "node": ">= 14" } }, - "node_modules/@octokit/auth-app/node_modules/lru-cache": { - "version": "9.1.2", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", - "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/@octokit/auth-oauth-app": { "version": "5.0.6", "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-5.0.6.tgz", @@ -2784,9 +2859,9 @@ } }, "node_modules/@octokit/openapi-types": { - "version": "18.0.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.0.0.tgz", - "integrity": "sha512-V8GImKs3TeQRxRtXFpG2wl19V7444NIOTDF24AWuIbmNaNYOQMWRbjcGDXV5B+0n887fgDcuMNOmlul+k+oJtw==" + "version": "18.1.1", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-18.1.1.tgz", + "integrity": "sha512-VRaeH8nCDtF5aXWnjPuEMIYf1itK/s3JYyJcWFJT8X9pSNnBtriDf7wlEWsGuhPLl4QIH4xM8fqTXDwJ3Mu6sw==" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "6.1.2", @@ -2898,9 +2973,9 @@ } }, "node_modules/@octokit/webhooks": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.9.1.tgz", - "integrity": "sha512-5NXU4VfsNOo2VSU/SrLrpPH2Z1ZVDOWFcET4EpnEBX1uh/v8Uz65UVuHIRx5TZiXhnWyRE9AO1PXHa+M/iWwZA==", + "version": "10.9.2", + "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-10.9.2.tgz", + "integrity": "sha512-hFVF/szz4l/Y/GQdKxNmQjUke0XJXK986p+ucIlubTGVPVtVtup5G1jarQfvCMBs9Fvlf9dvH8K83E4lefmofQ==", "dependencies": { "@octokit/request-error": "^3.0.0", "@octokit/webhooks-methods": "^3.0.0", @@ -2925,9 +3000,9 @@ "integrity": "sha512-AanzbulOHljrku1NGfafxdpTCfw2ENaWzH01N2vqQM+cUFbk868Cgh0xylz0JIM9BoKbfI++bdD6EYX0Q/UTEw==" }, "node_modules/@opentelemetry/api": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.6.0.tgz", - "integrity": "sha512-OWlrQAnWn9577PhVgqjUvMr1pg57Bc4jv0iL4w0PRuOSRvq67rvHW9Ie/dZVMvCzhSCB+UxhcY/PmCmFj33Q+g==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.7.0.tgz", + "integrity": "sha512-AdY5wvN0P2vXBi3b29hxZgSFvdhdxPB9+f0B6s//P9Q8nibRWeA3cHm8UmLpio9ABigkVHJ5NMPk+Mz8VCCyrw==", "engines": { "node": ">=8.0.0" } @@ -2996,11 +3071,11 @@ "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" }, "node_modules/@smithy/abort-controller": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.9.tgz", - "integrity": "sha512-8liHOEbx99xcy4VndeQNQhyA0LS+e7UqsuRnDTSIA26IKBv/7vA9w09KOd4fgNULrvX0r3WpA6cwsQTRJpSWkg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.14.tgz", + "integrity": "sha512-zXtteuYLWbSXnzI3O6xq3FYvigYZFW8mdytGibfarLL2lxHto9L3ILtGVnVGmFZa7SDh62l39EnU5hesLN87Fw==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3008,14 +3083,14 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.10.tgz", - "integrity": "sha512-MwToDsCltHjumkCuRn883qoNeJUawc2b8sX9caSn5vLz6J5crU1IklklNxWCaMO2z2nDL91Po4b/aI1eHv5PfA==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.19.tgz", + "integrity": "sha512-JsghnQ5zjWmjEVY8TFOulLdEOCj09SjRLugrHlkPZTIBBm7PQitCFVLThbsKPZQOP7N3ME1DU1nKUc1UaVnBog==", "dependencies": { - "@smithy/node-config-provider": "^2.0.12", - "@smithy/types": "^2.3.3", + "@smithy/node-config-provider": "^2.1.6", + "@smithy/types": "^2.6.0", "@smithy/util-config-provider": "^2.0.0", - "@smithy/util-middleware": "^2.0.2", + "@smithy/util-middleware": "^2.0.7", "tslib": "^2.5.0" }, "engines": { @@ -3023,14 +3098,14 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.12.tgz", - "integrity": "sha512-S3lUNe+2fEFwKcmiQniXGPXt69vaHvQCw8kYQOBL4OvJsgwfpkIYDZdroHbTshYi0M6WaKL26Mw+hvgma6dZqA==", - "dependencies": { - "@smithy/node-config-provider": "^2.0.12", - "@smithy/property-provider": "^2.0.10", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.2.tgz", + "integrity": "sha512-Y62jBWdoLPSYjr9fFvJf+KwTa1EunjVr6NryTEWCnwIY93OJxwV4t0qxjwdPl/XMsUkq79ppNJSEQN6Ohnhxjw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.6", + "@smithy/property-provider": "^2.0.15", + "@smithy/types": "^2.6.0", + "@smithy/url-parser": "^2.0.14", "tslib": "^2.5.0" }, "engines": { @@ -3038,36 +3113,36 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.9.tgz", - "integrity": "sha512-sy0pcbKnawt1iu+qCoSFbs/h9PAaUgvlJEO3lqkE1HFFj4p5RgL98vH+9CyDoj6YY82cG5XsorFmcLqQJHTOYw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.14.tgz", + "integrity": "sha512-g/OU/MeWGfHDygoXgMWfG/Xb0QqDnAGcM9t2FRrVAhleXYRddGOEnfanR5cmHgB9ue52MJsyorqFjckzXsylaA==", "dependencies": { "@aws-crypto/crc32": "3.0.0", - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "@smithy/util-hex-encoding": "^2.0.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/fetch-http-handler": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.1.5.tgz", - "integrity": "sha512-BIeCHGfr5JCGN+EMTwZK74ELvjPXOIrI7OLM5OhZJJ6AmZyRv2S9ANJk18AtLwht0TsSm+8WoXIEp8LuxNgUyA==", - "dependencies": { - "@smithy/protocol-http": "^3.0.5", - "@smithy/querystring-builder": "^2.0.9", - "@smithy/types": "^2.3.3", - "@smithy/util-base64": "^2.0.0", + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.2.7.tgz", + "integrity": "sha512-iSDBjxuH9TgrtMYAr7j5evjvkvgwLY3y+9D547uep+JNkZ1ZT+BaeU20j6I/bO/i26ilCWFImrlXTPsfQtZdIQ==", + "dependencies": { + "@smithy/protocol-http": "^3.0.10", + "@smithy/querystring-builder": "^2.0.14", + "@smithy/types": "^2.6.0", + "@smithy/util-base64": "^2.0.1", "tslib": "^2.5.0" } }, "node_modules/@smithy/hash-node": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.9.tgz", - "integrity": "sha512-XP3yWd5wyCtiVmsY5Nuq/FUwyCEQ6YG7DsvRh7ThldNukGpCzyFdP8eivZJVjn4Fx7oYrrOnVoYZ0WEgpW1AvQ==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.16.tgz", + "integrity": "sha512-Wbi9A0PacMYUOwjAulQP90Wl3mQ6NDwnyrZQzFjDz+UzjXOSyQMgBrTkUBz+pVoYVlX3DUu24gWMZBcit+wOGg==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "@smithy/util-buffer-from": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3075,11 +3150,11 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.9.tgz", - "integrity": "sha512-RuJqhYf8nViK96IIO9JbTtjDUuFItVfuuJhWw2yk7fv67yltQ7fZD6IQ2OsHHluoVmstnQJuCg5raXJR696Ubw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.14.tgz", + "integrity": "sha512-d8ohpwZo9RzTpGlAfsWtfm1SHBSU7+N4iuZ6MzR10xDTujJJWtmXYHK1uzcr7rggbpUTaWyHpPFgnf91q0EFqQ==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" } }, @@ -3095,12 +3170,12 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.11.tgz", - "integrity": "sha512-Malj4voNTL4+a5ZL3a6+Ij7JTUMTa2R7c3ZIBzMxN5OUUgAspU7uFi1Q97f4B0afVh2joQBAWH5IQJUG25nl8g==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.16.tgz", + "integrity": "sha512-9ddDia3pp1d3XzLXKcm7QebGxLq9iwKf+J1LapvlSOhpF8EM9SjMeSrMOOFgG+2TfW5K3+qz4IAJYYm7INYCng==", "dependencies": { - "@smithy/protocol-http": "^3.0.5", - "@smithy/types": "^2.3.3", + "@smithy/protocol-http": "^3.0.10", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3108,14 +3183,16 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.9.tgz", - "integrity": "sha512-72/o8R6AAO4+nyTI6h4z6PYGTSA4dr1M7tZz29U8DEUHuh1YkhC77js0P6RyF9G0wDLuYqxb+Yh0crI5WG2pJg==", - "dependencies": { - "@smithy/middleware-serde": "^2.0.9", - "@smithy/types": "^2.3.3", - "@smithy/url-parser": "^2.0.9", - "@smithy/util-middleware": "^2.0.2", + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.1.tgz", + "integrity": "sha512-dVDS7HNJl/wb0lpByXor6whqDbb1YlLoaoWYoelyYzLHioXOE7y/0iDwJWtDcN36/tVCw9EPBFZ3aans84jLpg==", + "dependencies": { + "@smithy/middleware-serde": "^2.0.14", + "@smithy/node-config-provider": "^2.1.6", + "@smithy/shared-ini-file-loader": "^2.2.5", + "@smithy/types": "^2.6.0", + "@smithy/url-parser": "^2.0.14", + "@smithy/util-middleware": "^2.0.7", "tslib": "^2.5.0" }, "engines": { @@ -3123,16 +3200,16 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.12.tgz", - "integrity": "sha512-YQ/ufXX4/d9/+Jf1QQ4J+CVeupC7BW52qldBTvRV33PDX9vxndlAwkFwzBcmnUFC3Hjf1//HW6I77EItcjNSCA==", - "dependencies": { - "@smithy/node-config-provider": "^2.0.12", - "@smithy/protocol-http": "^3.0.5", - "@smithy/service-error-classification": "^2.0.2", - "@smithy/types": "^2.3.3", - "@smithy/util-middleware": "^2.0.2", - "@smithy/util-retry": "^2.0.2", + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.21.tgz", + "integrity": "sha512-EZS1EXv1k6IJX6hyu/0yNQuPcPaXwG8SWljQHYueyRbOxmqYgoWMWPtfZj0xRRQ4YtLawQSpBgAeiJltq8/MPw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.6", + "@smithy/protocol-http": "^3.0.10", + "@smithy/service-error-classification": "^2.0.7", + "@smithy/types": "^2.6.0", + "@smithy/util-middleware": "^2.0.7", + "@smithy/util-retry": "^2.0.7", "tslib": "^2.5.0", "uuid": "^8.3.2" }, @@ -3149,11 +3226,11 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.9.tgz", - "integrity": "sha512-GVbauxrr6WmtCaesakktg3t5LR/yDbajpC7KkWc8rtCpddMI4ShAVO5Q6DqwX8MDFi4CLaY8H7eTGcxhl3jbLg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.14.tgz", + "integrity": "sha512-hFi3FqoYWDntCYA2IGY6gJ6FKjq2gye+1tfxF2HnIJB5uW8y2DhpRNBSUMoqP+qvYzRqZ6ntv4kgbG+o3pX57g==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3161,11 +3238,11 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.2.tgz", - "integrity": "sha512-6BNfPVp/8gcmkKdJhNJK3HEkUNNTrY3hM9vuWXIUSoLk9FZo1L2QuGLGB6S124D9ySInn8PzEdOtguCF5Ao4KA==", + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.8.tgz", + "integrity": "sha512-7/N59j0zWqVEKExJcA14MrLDZ/IeN+d6nbkN8ucs+eURyaDUXWYlZrQmMOd/TyptcQv0+RDlgag/zSTTV62y/Q==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3173,13 +3250,13 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.12.tgz", - "integrity": "sha512-df9y9ywv+JmS40Y60ZqJ4jfZiTCmyHQffwzIqjBjLJLJl0imf9F6DWBd+jiEWHvlohR+sFhyY+KL/qzKgnAq1A==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.6.tgz", + "integrity": "sha512-HLqTs6O78m3M3z1cPLFxddxhEPv5MkVatfPuxoVO3A+cHZanNd/H5I6btcdHy6N2CB1MJ/lihJC92h30SESsBA==", "dependencies": { - "@smithy/property-provider": "^2.0.10", - "@smithy/shared-ini-file-loader": "^2.0.11", - "@smithy/types": "^2.3.3", + "@smithy/property-provider": "^2.0.15", + "@smithy/shared-ini-file-loader": "^2.2.5", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3187,14 +3264,14 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.5.tgz", - "integrity": "sha512-52uF+BrZaFiBh+NT/bADiVDCQO91T+OwDRsuaAeWZC1mlCXFjAPPQdxeQohtuYOe9m7mPP/xIMNiqbe8jvndHA==", - "dependencies": { - "@smithy/abort-controller": "^2.0.9", - "@smithy/protocol-http": "^3.0.5", - "@smithy/querystring-builder": "^2.0.9", - "@smithy/types": "^2.3.3", + "version": "2.1.10", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.1.10.tgz", + "integrity": "sha512-lkALAwtN6odygIM4nB8aHDahINM6WXXjNrZmWQAh0RSossySRT2qa31cFv0ZBuAYVWeprskRk13AFvvLmf1WLw==", + "dependencies": { + "@smithy/abort-controller": "^2.0.14", + "@smithy/protocol-http": "^3.0.10", + "@smithy/querystring-builder": "^2.0.14", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3202,11 +3279,11 @@ } }, "node_modules/@smithy/property-provider": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.10.tgz", - "integrity": "sha512-YMBVfh0ZMmJtbsUn+WfSwR32iRljZPdRN0Tn2GAcdJ+ejX8WrBXD7Z0jIkQDrQZr8fEuuv5x8WxMIj+qVbsPQw==", + "version": "2.0.15", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.15.tgz", + "integrity": "sha512-YbRFBn8oiiC3o1Kn3a4KjGa6k47rCM9++5W9cWqYn9WnkyH+hBWgfJAckuxpyA2Hq6Ys4eFrWzXq6fqHEw7iew==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3214,11 +3291,11 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.5.tgz", - "integrity": "sha512-3t3fxj+ip4EPHRC2fQ0JimMxR/qCQ1LSQJjZZVZFgROnFLYWPDgUZqpoi7chr+EzatxJVXF/Rtoi5yLHOWCoZQ==", + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.10.tgz", + "integrity": "sha512-6+tjNk7rXW7YTeGo9qwxXj/2BFpJTe37kTj3EnZCoX/nH+NP/WLA7O83fz8XhkGqsaAhLUPo/bB12vvd47nsmg==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3226,11 +3303,11 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.9.tgz", - "integrity": "sha512-Yt6CPF4j3j1cuwod/DRflbuXxBFjJm7gAjy6W1RE21Rz5/kfGFqiZBXWmmXwGtnnhiLThYwoHK4S6/TQtnx0Fg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.14.tgz", + "integrity": "sha512-lQ4pm9vTv9nIhl5jt6uVMPludr6syE2FyJmHsIJJuOD7QPIJnrf9HhUGf1iHh9KJ4CUv21tpOU3X6s0rB6uJ0g==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "@smithy/util-uri-escape": "^2.0.0", "tslib": "^2.5.0" }, @@ -3239,11 +3316,11 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.9.tgz", - "integrity": "sha512-U6z4N743s4vrcxPW8p8+reLV0PjMCYEyb1/wtMVvv3VnbJ74gshdI8SR1sBnEh95cF8TxonmX5IxY25tS9qGfg==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.14.tgz", + "integrity": "sha512-+cbtXWI9tNtQjlgQg3CA+pvL3zKTAxPnG3Pj6MP89CR3vi3QMmD0SOWoq84tqZDnJCxlsusbgIXk1ngMReXo+A==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3251,22 +3328,22 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.2.tgz", - "integrity": "sha512-GTUd2j63gKy7A+ggvSdn2hc4sejG7LWfE+ZMF17vzWoNyqERWbRP7HTPS0d0Lwg1p6OQCAzvNigSrEIWVFt6iA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.7.tgz", + "integrity": "sha512-LLxgW12qGz8doYto15kZ4x1rHjtXl0BnCG6T6Wb8z2DI4PT9cJfOSvzbuLzy7+5I24PAepKgFeWHRd9GYy3Z9w==", "dependencies": { - "@smithy/types": "^2.3.3" + "@smithy/types": "^2.6.0" }, "engines": { "node": ">=14.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "2.0.11", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.11.tgz", - "integrity": "sha512-Sf0u5C5px6eykXi6jImDTp+edvG3REtPjXnFWU/J+b7S2wkXwUqFXqBL5DdM4zC1F+M8u57ZT7NRqDwMOw7/Tw==", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.5.tgz", + "integrity": "sha512-LHA68Iu7SmNwfAVe8egmjDCy648/7iJR/fK1UnVw+iAOUJoEYhX2DLgVd5pWllqdDiRbQQzgaHLcRokM+UFR1w==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3274,17 +3351,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.9.tgz", - "integrity": "sha512-RkHP0joSI1j2EI+mU55sOi33/aMMkKdL9ZY+SWrPxsiCe1oyzzuy79Tpn8X7uT+t0ilNmQlwPpkP/jUy940pEA==", + "version": "2.0.16", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.16.tgz", + "integrity": "sha512-ilLY85xS2kZZzTb83diQKYLIYALvart0KnBaKnIRnMBHAGEio5aHSlANQoxVn0VsonwmQ3CnWhnCT0sERD8uTg==", "dependencies": { - "@smithy/eventstream-codec": "^2.0.9", + "@smithy/eventstream-codec": "^2.0.14", "@smithy/is-array-buffer": "^2.0.0", - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-middleware": "^2.0.2", + "@smithy/util-middleware": "^2.0.7", "@smithy/util-uri-escape": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3292,13 +3369,13 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.6.tgz", - "integrity": "sha512-+F26b8U7C6ydJgj5Y+OZ94NL54HQUPF1LrFiZjMAIX3OlgZjDhiT3m6VOZo6+hge3sEFOrupwdjB5V24JOCpQw==", + "version": "2.1.16", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.1.16.tgz", + "integrity": "sha512-Lw67+yQSpLl4YkDLUzI2KgS8TXclXmbzSeOJUmRFS4ueT56B4pw3RZRF/SRzvgyxM/HxgkUan8oSHXCujPDafQ==", "dependencies": { - "@smithy/middleware-stack": "^2.0.2", - "@smithy/types": "^2.3.3", - "@smithy/util-stream": "^2.0.12", + "@smithy/middleware-stack": "^2.0.8", + "@smithy/types": "^2.6.0", + "@smithy/util-stream": "^2.0.21", "tslib": "^2.5.0" }, "engines": { @@ -3306,9 +3383,9 @@ } }, "node_modules/@smithy/types": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.3.3.tgz", - "integrity": "sha512-zTdIPR9PvFVNRdIKMQu4M5oyTaycIbUqLheQqaOi9rTWPkgjGO2wDBxMA1rBHQB81aqAEv+DbSS4jfKyQMnXRA==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.6.0.tgz", + "integrity": "sha512-PgqxJq2IcdMF9iAasxcqZqqoOXBHufEfmbEUdN1pmJrJltT42b0Sc8UiYSWWzKkciIp9/mZDpzYi4qYG1qqg6g==", "dependencies": { "tslib": "^2.5.0" }, @@ -3317,19 +3394,19 @@ } }, "node_modules/@smithy/url-parser": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.9.tgz", - "integrity": "sha512-NBnJ0NiY8z6E82Xd5VYUFQfKwK/wA/+QkKmpYUYP+cpH3aCzE6g2gvixd9vQKYjsIdRfNPCf+SFAozt8ljozOw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.14.tgz", + "integrity": "sha512-kbu17Y1AFXi5lNlySdDj7ZzmvupyWKCX/0jNZ8ffquRyGdbDZb+eBh0QnWqsSmnZa/ctyWaTf7n4l/pXLExrnw==", "dependencies": { - "@smithy/querystring-parser": "^2.0.9", - "@smithy/types": "^2.3.3", + "@smithy/querystring-parser": "^2.0.14", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" } }, "node_modules/@smithy/util-base64": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz", - "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz", + "integrity": "sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -3381,13 +3458,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.10.tgz", - "integrity": "sha512-M5eaPn961jU2glZkqvmrVd6H4Tz4j1CJ2Kt8kjqMfcWZ4IQFgwPYbRkgND0W93dZXDmFU2GtuJGatwSmWIqxrA==", + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.20.tgz", + "integrity": "sha512-QJtnbTIl0/BbEASkx1MUFf6EaoWqWW1/IM90N++8NNscePvPf77GheYfpoPis6CBQawUWq8QepTP2QUSAdrVkw==", "dependencies": { - "@smithy/property-provider": "^2.0.10", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", + "@smithy/property-provider": "^2.0.15", + "@smithy/smithy-client": "^2.1.16", + "@smithy/types": "^2.6.0", "bowser": "^2.11.0", "tslib": "^2.5.0" }, @@ -3396,22 +3473,35 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.12.tgz", - "integrity": "sha512-fwAVus2YBTU5u4KFmmEZDdgx3HpUUg8f6SEUetJFsNL+6AzoGBIhCZX0yMrVCLJEZe6tUfMbL5TZHXMw2q6MaA==", - "dependencies": { - "@smithy/config-resolver": "^2.0.10", - "@smithy/credential-provider-imds": "^2.0.12", - "@smithy/node-config-provider": "^2.0.12", - "@smithy/property-provider": "^2.0.10", - "@smithy/smithy-client": "^2.1.6", - "@smithy/types": "^2.3.3", + "version": "2.0.26", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.26.tgz", + "integrity": "sha512-lGFPOFCHv1ql019oegYqa54BZH7HREw6EBqjDLbAr0wquMX0BDi2sg8TJ6Eq+JGLijkZbJB73m4+aK8OFAapMg==", + "dependencies": { + "@smithy/config-resolver": "^2.0.19", + "@smithy/credential-provider-imds": "^2.1.2", + "@smithy/node-config-provider": "^2.1.6", + "@smithy/property-provider": "^2.0.15", + "@smithy/smithy-client": "^2.1.16", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { "node": ">= 10.0.0" } }, + "node_modules/@smithy/util-endpoints": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.5.tgz", + "integrity": "sha512-K7qNuCOD5K/90MjHvHm9kJldrfm40UxWYQxNEShMFxV/lCCCRIg8R4uu1PFAxRvPxNpIdcrh1uK6I1ISjDXZJw==", + "dependencies": { + "@smithy/node-config-provider": "^2.1.6", + "@smithy/types": "^2.6.0", + "tslib": "^2.5.0" + }, + "engines": { + "node": ">= 14.0.0" + } + }, "node_modules/@smithy/util-hex-encoding": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz", @@ -3424,11 +3514,11 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.2.tgz", - "integrity": "sha512-UGPZM+Ja/vke5pc/S8G0LNiHpVirtjppsXO+GK9m9wbzRGzPJTfnZA/gERUUN/AfxEy/8SL7U1kd7u4t2X8K1w==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.7.tgz", + "integrity": "sha512-tRINOTlf1G9B0ECarFQAtTgMhpnrMPSa+5j4ZEwEawCLfTFTavk6757sxhE4RY5RMlD/I3x+DCS8ZUiR8ho9Pw==", "dependencies": { - "@smithy/types": "^2.3.3", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3436,12 +3526,12 @@ } }, "node_modules/@smithy/util-retry": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.2.tgz", - "integrity": "sha512-ovWiayUB38moZcLhSFFfUgB2IMb7R1JfojU20qSahjxAgfOZvDWme3eOYUMtAVnouZ9kYJiFgHLy27qRH4NeeA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.7.tgz", + "integrity": "sha512-fIe5yARaF0+xVT1XKcrdnHKTJ1Vc4+3e3tLDjCuIcE9b6fkBzzGFY7AFiX4M+vj6yM98DrwkuZeHf7/hmtVp0Q==", "dependencies": { - "@smithy/service-error-classification": "^2.0.2", - "@smithy/types": "^2.3.3", + "@smithy/service-error-classification": "^2.0.7", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3449,17 +3539,17 @@ } }, "node_modules/@smithy/util-stream": { - "version": "2.0.12", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.12.tgz", - "integrity": "sha512-FOCpRLaj6gvSyUC5mJAACT+sPMPmp9sD1o+hVbUH/QxwZfulypA3ZIFdAg/59/IY0d/1Q4CTztsiHEB5LgjN4g==", - "dependencies": { - "@smithy/fetch-http-handler": "^2.1.5", - "@smithy/node-http-handler": "^2.1.5", - "@smithy/types": "^2.3.3", - "@smithy/util-base64": "^2.0.0", + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.21.tgz", + "integrity": "sha512-0BUE16d7n1x7pi1YluXJdB33jOTyBChT0j/BlOkFa9uxfg6YqXieHxjHNuCdJRARa7AZEj32LLLEPJ1fSa4inA==", + "dependencies": { + "@smithy/fetch-http-handler": "^2.2.7", + "@smithy/node-http-handler": "^2.1.10", + "@smithy/types": "^2.6.0", + "@smithy/util-base64": "^2.0.1", "@smithy/util-buffer-from": "^2.0.0", "@smithy/util-hex-encoding": "^2.0.0", - "@smithy/util-utf8": "^2.0.0", + "@smithy/util-utf8": "^2.0.2", "tslib": "^2.5.0" }, "engines": { @@ -3478,9 +3568,9 @@ } }, "node_modules/@smithy/util-utf8": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz", - "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz", + "integrity": "sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA==", "dependencies": { "@smithy/util-buffer-from": "^2.0.0", "tslib": "^2.5.0" @@ -3490,12 +3580,12 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "2.0.9", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.9.tgz", - "integrity": "sha512-Hy9Cs0FtIacC1aVFk98bm/7CYqim9fnHAPRnV/SB2mj02ExYs/9Dn5SrNQmtTBTLCn65KqYnNVBNS8GuGpZOOw==", + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.14.tgz", + "integrity": "sha512-Q6gSz4GUNjNGhrfNg+2Mjy+7K4pEI3r82x1b/+3dSc03MQqobMiUrRVN/YK/4nHVagvBELCoXsiHAFQJNQ5BeA==", "dependencies": { - "@smithy/abort-controller": "^2.0.9", - "@smithy/types": "^2.3.3", + "@smithy/abort-controller": "^2.0.14", + "@smithy/types": "^2.6.0", "tslib": "^2.5.0" }, "engines": { @@ -3535,9 +3625,9 @@ "dev": true }, "node_modules/@types/aws-lambda": { - "version": "8.10.121", - "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.121.tgz", - "integrity": "sha512-Y/jsUwO18HuC0a39BuMQkSOd/kMGATh/h5LNksw8FlTafbQ3Ge3578ZoT8w8gSOsWl2qH1p/SS/R61vc0X5jIQ==" + "version": "8.10.130", + "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.130.tgz", + "integrity": "sha512-HxTfLeGvD1wTJqIGwcBCpNmHKenja+We1e0cuzeIDFfbEj3ixnlTInyPR/81zAe0Ss/Ip12rFK6XNeMLVucOSg==" }, "node_modules/@types/azure": { "version": "0.9.20", @@ -3549,19 +3639,19 @@ } }, "node_modules/@types/btoa-lite": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.0.tgz", - "integrity": "sha512-wJsiX1tosQ+J5+bY5LrSahHxr2wT+uME5UDwdN1kg4frt40euqA+wzECkmq4t5QbveHiJepfdThgQrPw6KiSlg==" + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/btoa-lite/-/btoa-lite-1.0.2.tgz", + "integrity": "sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg==" }, "node_modules/@types/caseless": { - "version": "0.12.3", - "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.3.tgz", - "integrity": "sha512-ZD/NsIJYq/2RH+hY7lXmstfp/v9djGt9ah+xRQ3pcgR79qiKsG4pLl25AI7IcXxVO8dH9GiBE5rAknC0ePntlw==" + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.5.tgz", + "integrity": "sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==" }, "node_modules/@types/chai": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.6.tgz", - "integrity": "sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==", + "version": "4.3.11", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.11.tgz", + "integrity": "sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ==", "dev": true }, "node_modules/@types/glob": { @@ -3574,27 +3664,27 @@ } }, "node_modules/@types/js-yaml": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.6.tgz", - "integrity": "sha512-ACTuifTSIIbyksx2HTon3aFtCKWcID7/h3XEmRpDYdMCXxPbl+m9GteOJeaAkiAta/NJaSFuA7ahZ0NkwajDSw==" + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/js-yaml/-/js-yaml-4.0.9.tgz", + "integrity": "sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg==" }, "node_modules/@types/json-schema": { - "version": "7.0.13", - "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.13.tgz", - "integrity": "sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==" + "version": "7.0.15", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", + "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" }, "node_modules/@types/jsonwebtoken": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz", - "integrity": "sha512-b0jGiOgHtZ2jqdPgPnP6WLCXZk1T8p06A/vPGzUvxpFGgKMbjXJDjC5m52ErqBnIuWZFgGoIJyRdeG5AyreJjA==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-9.0.5.tgz", + "integrity": "sha512-VRLSGzik+Unrup6BsouBeHsf4d1hOEgYWTm/7Nmw1sXoN1+tRly/Gy/po3yeahnP4jfnQWWAhQAqcNfH7ngOkA==", "dependencies": { "@types/node": "*" } }, "node_modules/@types/linkify-it": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.3.tgz", - "integrity": "sha512-pTjcqY9E4nOI55Wgpz7eiI8+LzdYnw3qxXCfHyBDdPbYvbyLgWLJGh8EdPvqawwMK1Uo1794AUkkR38Fr0g+2g==" + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", + "integrity": "sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==" }, "node_modules/@types/long": { "version": "4.0.2", @@ -3611,9 +3701,9 @@ } }, "node_modules/@types/mdurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.2.tgz", - "integrity": "sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==" + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz", + "integrity": "sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==" }, "node_modules/@types/minimatch": { "version": "5.1.2", @@ -3621,29 +3711,32 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/mocha": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.1.tgz", - "integrity": "sha512-/fvYntiO1GeICvqbQ3doGDIP97vWmvFt83GKguJ6prmQM2iXZfFcq6YE8KteFyRtX2/h5Hf91BYvPodJKFYv5Q==", + "version": "10.0.6", + "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-10.0.6.tgz", + "integrity": "sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==", "dev": true }, "node_modules/@types/node": { - "version": "18.17.18", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.17.18.tgz", - "integrity": "sha512-/4QOuy3ZpV7Ya1GTRz5CYSz3DgkKpyUptXuQ5PPce7uuyJAOR7r9FhkmxJfvcNUXyklbC63a+YvB3jxy7s9ngw==" + "version": "18.19.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.2.tgz", + "integrity": "sha512-6wzfBdbWpe8QykUkXBjtmO3zITA0A3FIjoy+in0Y2K4KrCiRhNYJIdwAPDffZ3G6GnaKaSLSEa9ZuORLfEoiwg==", + "dependencies": { + "undici-types": "~5.26.4" + } }, "node_modules/@types/node-fetch": { - "version": "2.6.6", - "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.6.tgz", - "integrity": "sha512-95X8guJYhfqiuVVhRFxVQcf4hW/2bCuoPwDasMf/531STFoNoWTT7YDnWdXHEZKqAGUigmpG31r2FE70LwnzJw==", + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.6.9.tgz", + "integrity": "sha512-bQVlnMLFJ2d35DkPNjEPmd9ueO/rh5EiaZt2bhqiSarPjZIuIV6bPQVqcrEyvNo+AfTrRGVazle1tl597w3gfA==", "dependencies": { "@types/node": "*", "form-data": "^4.0.0" } }, "node_modules/@types/request": { - "version": "2.48.8", - "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.8.tgz", - "integrity": "sha512-whjk1EDJPcAR2kYHRbFl/lKeeKYTi05A15K9bnLInCVroNDCtXce57xKdI0/rQaA3K+6q0eFyUBPmqfSndUZdQ==", + "version": "2.48.12", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.12.tgz", + "integrity": "sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==", "dependencies": { "@types/caseless": "*", "@types/node": "*", @@ -3674,9 +3767,9 @@ } }, "node_modules/@types/tough-cookie": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.3.tgz", - "integrity": "sha512-THo502dA5PzG/sfQH+42Lw3fvmYkceefOspdCwpHRul8ik2Jv1K8I5OZz1AT3/rs46kwgMCe9bSBmDLYkkOMGg==" + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", + "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" }, "node_modules/@types/tunnel": { "version": "0.0.3", @@ -3687,9 +3780,9 @@ } }, "node_modules/@types/ws": { - "version": "8.5.5", - "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.5.tgz", - "integrity": "sha512-lwhs8hktwxSjf9UaZ9tG5M03PGogvFaH8gUgLNbN9HKIg0dvv6q+gkSuJ8HN4/VbyxkuLzCjlN7GquQ0gUJfIg==", + "version": "8.5.10", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.10.tgz", + "integrity": "sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==", "dependencies": { "@types/node": "*" } @@ -3883,9 +3976,9 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", - "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", + "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", "dev": true, "engines": { "node": ">=0.4.0" @@ -4127,9 +4220,9 @@ } }, "node_modules/aws-sdk": { - "version": "2.1461.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1461.0.tgz", - "integrity": "sha512-oRZqsSEx5jkXq8Xq4Nkhhwupnjzw0UuFyEKGLsEDFjiFGOzdJoYspGg/Oa4RfTpa8ITLGHIRkYeik/7fN8ccng==", + "version": "2.1511.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1511.0.tgz", + "integrity": "sha512-LikcMeIzA1fu+j8qElVmPDpWBFsMzd8pwQoo33xXhIwtWaMoaBMI5vGGz/cvdn3LnjkRcEntWZeE8haULsy+bA==", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -4176,11 +4269,13 @@ "integrity": "sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==" }, "node_modules/axios": { - "version": "0.26.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", - "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz", + "integrity": "sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A==", "dependencies": { - "follow-redirects": "^1.14.8" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, "node_modules/balanced-match": { @@ -4372,18 +4467,18 @@ } }, "node_modules/chai": { - "version": "4.3.8", - "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.8.tgz", - "integrity": "sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==", + "version": "4.3.10", + "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", + "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", "dev": true, "dependencies": { "assertion-error": "^1.1.0", - "check-error": "^1.0.2", - "deep-eql": "^4.1.2", - "get-func-name": "^2.0.0", - "loupe": "^2.3.1", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", "pathval": "^1.1.1", - "type-detect": "^4.0.5" + "type-detect": "^4.0.8" }, "engines": { "node": ">=4" @@ -4416,10 +4511,13 @@ } }, "node_modules/check-error": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz", - "integrity": "sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", + "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", "dev": true, + "dependencies": { + "get-func-name": "^2.0.2" + }, "engines": { "node": "*" } @@ -4555,6 +4653,17 @@ "node": ">= 8" } }, + "node_modules/cssstyle": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-3.0.0.tgz", + "integrity": "sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==", + "dependencies": { + "rrweb-cssom": "^0.6.0" + }, + "engines": { + "node": ">=14" + } + }, "node_modules/dashdash": { "version": "1.14.1", "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", @@ -4566,6 +4675,49 @@ "node": ">=0.10" } }, + "node_modules/data-urls": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", + "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls/node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-urls/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/data-urls/node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/dayjs": { "version": "1.11.10", "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.10.tgz", @@ -4599,6 +4751,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/decimal.js": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", + "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==" + }, "node_modules/deep-eql": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", @@ -5354,9 +5511,9 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" }, "node_modules/fast-glob": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", - "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", "dependencies": { "@nodelib/fs.stat": "^2.0.2", "@nodelib/fs.walk": "^1.2.3", @@ -5461,17 +5618,17 @@ } }, "node_modules/flat-cache": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.1.0.tgz", - "integrity": "sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", "peer": true, "dependencies": { - "flatted": "^3.2.7", + "flatted": "^3.2.9", "keyv": "^4.5.3", "rimraf": "^3.0.2" }, "engines": { - "node": ">=12.0.0" + "node": "^10.12.0 || >=12.0.0" } }, "node_modules/flat-cache/node_modules/rimraf": { @@ -5705,9 +5862,9 @@ } }, "node_modules/gcp-metadata": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.0.0.tgz", - "integrity": "sha512-Ozxyi23/1Ar51wjUT2RDklK+3HxqDr8TLBNK8rBBFQ7T85iIGnXnVusauj06QyqCXRFZig8LZC+TUddWbndlpQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/gcp-metadata/-/gcp-metadata-6.1.0.tgz", + "integrity": "sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==", "dependencies": { "gaxios": "^6.0.0", "json-bigint": "^1.0.0" @@ -5812,9 +5969,9 @@ } }, "node_modules/globals": { - "version": "13.21.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.21.0.tgz", - "integrity": "sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==", + "version": "13.23.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", + "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", "peer": true, "dependencies": { "type-fest": "^0.20.2" @@ -5860,28 +6017,27 @@ } }, "node_modules/google-auth-library": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.0.0.tgz", - "integrity": "sha512-IQGjgQoVUAfOk6khqTVMLvWx26R+yPw9uLyb1MNyMQpdKiKt0Fd9sp4NWoINjyGHR8S3iw12hMTYK7O8J07c6Q==", + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/google-auth-library/-/google-auth-library-9.4.1.tgz", + "integrity": "sha512-Chs7cuzDuav8W/BXOoRgSXw4u0zxYtuqAHETDR5Q6dG1RwNwz7NUKjsDDHAsBV3KkiiJBtJqjbzy1XU1L41w1g==", "dependencies": { "base64-js": "^1.3.0", "ecdsa-sig-formatter": "^1.0.11", - "gaxios": "^6.0.0", - "gcp-metadata": "^6.0.0", + "gaxios": "^6.1.1", + "gcp-metadata": "^6.1.0", "gtoken": "^7.0.0", - "jws": "^4.0.0", - "lru-cache": "^6.0.0" + "jws": "^4.0.0" }, "engines": { "node": ">=14" } }, "node_modules/google-gax": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.0.4.tgz", - "integrity": "sha512-Yoey/ABON2HaTUIRUt5tTQAvwQ6E/2etSyFXwHNVcYtIiYDpKix7G4oorZdkp17gFiYovzRCRhRZYrfdCgRK9Q==", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/google-gax/-/google-gax-4.0.5.tgz", + "integrity": "sha512-yLoYtp4zE+8OQA74oBEbNkbzI6c95W01JSL7RqC8XERKpRvj3ytZp1dgnbA6G9aRsc8pZB25xWYBcCmrbYOEhA==", "dependencies": { - "@grpc/grpc-js": "~1.9.0", + "@grpc/grpc-js": "~1.9.6", "@grpc/proto-loader": "^0.7.0", "@types/long": "^4.0.0", "abort-controller": "^3.0.0", @@ -5891,7 +6047,7 @@ "object-hash": "^3.0.0", "proto3-json-serializer": "^2.0.0", "protobufjs": "7.2.5", - "retry-request": "^6.0.0" + "retry-request": "^7.0.0" }, "engines": { "node": ">=14" @@ -5997,6 +6153,17 @@ "node": ">=12.0.0" } }, + "node_modules/googleapis-common/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/googleapis/node_modules/gaxios": { "version": "5.1.3", "resolved": "https://registry.npmjs.org/gaxios/-/gaxios-5.1.3.tgz", @@ -6055,6 +6222,17 @@ "node": ">=12.0.0" } }, + "node_modules/googleapis/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/gopd": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", @@ -6204,6 +6382,17 @@ "@typescript-eslint/eslint-plugin": "^4.1.1" } }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", + "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/http-proxy-agent": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", @@ -6260,9 +6449,9 @@ "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==" }, "node_modules/ignore": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", - "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", + "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", "engines": { "node": ">= 4" } @@ -6342,14 +6531,14 @@ } }, "node_modules/is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.1.tgz", + "integrity": "sha512-YBUanLI8Yoihw923YeFUS5fs0fF2f5TSFTNiYAAzhhDscDa3lEqYuz1pDOEP5KvX94I9ey3vsqjJcLVFVU+3QA==", "dependencies": { - "kind-of": "^6.0.0" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.10" } }, "node_modules/is-arguments": { @@ -6435,14 +6624,14 @@ } }, "node_modules/is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz", + "integrity": "sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw==", "dependencies": { - "kind-of": "^6.0.0" + "hasown": "^2.0.0" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-date-object": { @@ -6460,16 +6649,15 @@ } }, "node_modules/is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.3.tgz", + "integrity": "sha512-JCNNGbwWZEVaSPtS45mdtrneRWJFp07LLmykxeFV5F6oBvNF8vHSfJuJgoT472pSfk+Mf8VnlrspaFBHWM8JAw==", "dependencies": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" + "is-accessor-descriptor": "^1.0.1", + "is-data-descriptor": "^1.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">= 0.4" } }, "node_modules/is-docker": { @@ -6577,6 +6765,11 @@ "node": ">=0.10.0" } }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", + "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==" + }, "node_modules/is-regex": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", @@ -6724,9 +6917,9 @@ "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==" }, "node_modules/jackspeak": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.3.tgz", - "integrity": "sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==", + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", "dependencies": { "@isaacs/cliui": "^8.0.2" }, @@ -6749,9 +6942,9 @@ } }, "node_modules/jose": { - "version": "4.14.6", - "resolved": "https://registry.npmjs.org/jose/-/jose-4.14.6.tgz", - "integrity": "sha512-EqJPEUlZD0/CSUMubKtMaYUOtWe91tZXTWMJZoKSbLk+KtdhNdcvppH8lA9XwVu2V4Ailvsj0GBZJ2ZwDjfesQ==", + "version": "4.15.4", + "resolved": "https://registry.npmjs.org/jose/-/jose-4.15.4.tgz", + "integrity": "sha512-W+oqK4H+r5sITxfxpSU+MMdr/YSWGvgZMQDIsNoBDGGy4i7GBPTtvFKibQzW06n3U3TqHjhvBJsirShsEJ6eeQ==", "optional": true, "funding": { "url": "https://github.com/sponsors/panva" @@ -6823,6 +7016,125 @@ "node": ">=8" } }, + "node_modules/jsdom": { + "version": "23.0.1", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-23.0.1.tgz", + "integrity": "sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==", + "dependencies": { + "cssstyle": "^3.0.0", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "nwsapi": "^2.2.7", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.14.2", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.0.tgz", + "integrity": "sha512-o/zjMZRhJxny7OyEF+Op8X+efiELC7k7yOjMzgfzVqOzXqkBkWI79YoTdOtsuWd5BWhAGAuOY/Xa6xpiaWXiNg==", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/http-proxy-agent": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.0.tgz", + "integrity": "sha512-+ZT+iBxVUQ1asugqnD6oWoRiS25AkjNfG085dKJGtGxkdwLQrMKU5wJr2bOOFAXzKcTuqq+7fZlTMgG3SRfIYQ==", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.2.tgz", + "integrity": "sha512-NmLNjm6ucYwtcUmL7JQC1ZQ57LmHP4lT15FQ8D61nak1rO6DH+fz5qNK2Ap5UN4ZapYICE3/0KodcLYSPsPbaA==", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.3.tgz", + "integrity": "sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsdom/node_modules/tr46": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", + "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/jsdom/node_modules/webidl-conversions": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", + "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", + "engines": { + "node": ">=12" + } + }, + "node_modules/jsdom/node_modules/whatwg-url": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", + "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "dependencies": { + "tr46": "^5.0.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/jsome": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/jsome/-/jsome-2.5.0.tgz", @@ -7248,18 +7560,21 @@ } }, "node_modules/keyv": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.3.tgz", - "integrity": "sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==", + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "peer": true, "dependencies": { "json-buffer": "3.0.1" } }, "node_modules/kind-of": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, "engines": { "node": ">=0.10.0" } @@ -7403,23 +7718,20 @@ "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" }, "node_modules/loupe": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", - "integrity": "sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==", + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", + "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", "dev": true, "dependencies": { - "get-func-name": "^2.0.0" + "get-func-name": "^2.0.1" } }, "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, + "version": "9.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-9.1.2.tgz", + "integrity": "sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==", "engines": { - "node": ">=10" + "node": "14 || >=16.14" } }, "node_modules/make-error": { @@ -7810,21 +8122,21 @@ } }, "node_modules/nodemailer": { - "version": "6.9.5", - "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.5.tgz", - "integrity": "sha512-/dmdWo62XjumuLc5+AYQZeiRj+PRR8y8qKtFCOyuOl1k/hckZd8durUUHs/ucKx6/8kN+wFxqKJlQ/LK/qR5FA==", + "version": "6.9.7", + "resolved": "https://registry.npmjs.org/nodemailer/-/nodemailer-6.9.7.tgz", + "integrity": "sha512-rUtR77ksqex/eZRLmQ21LKVH5nAAsVicAtAYudK7JgwenEDZ0UIQ1adUGqErz7sMkWYxWTTU1aeP2Jga6WQyJw==", "engines": { "node": ">=6.0.0" } }, "node_modules/nodemon": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz", - "integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.2.tgz", + "integrity": "sha512-9qIN2LNTrEzpOPBaWHTm4Asy1LxXLSickZStAQ4IZe7zsoIpD/A7LWxhZV3t4Zu352uBcqVnRsDXSMR2Sc3lTA==", "dev": true, "dependencies": { "chokidar": "^3.5.2", - "debug": "^3.2.7", + "debug": "^4", "ignore-by-default": "^1.0.1", "minimatch": "^3.1.2", "pstree.remy": "^1.1.8", @@ -7845,15 +8157,6 @@ "url": "https://opencollective.com/nodemon" } }, - "node_modules/nodemon/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, "node_modules/nodemon/node_modules/has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", @@ -7926,6 +8229,11 @@ "node": ">=0.10.0" } }, + "node_modules/nwsapi": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.7.tgz", + "integrity": "sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==" + }, "node_modules/oauth-sign": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", @@ -7959,12 +8267,12 @@ } }, "node_modules/object.assign": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", - "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, @@ -8076,12 +8384,12 @@ } }, "node_modules/openid-client": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.5.0.tgz", - "integrity": "sha512-Y7Xl8BgsrkzWLHkVDYuroM67hi96xITyEDSkmWaGUiNX6CkcXC3XyQGdv5aWZ6dukVKBFVQCADi9gCavOmU14w==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/openid-client/-/openid-client-5.6.1.tgz", + "integrity": "sha512-PtrWsY+dXg6y8mtMPyL/namZSYVz8pjXz3yJiBNZsEdCnu9miHLB4ELVC85WvneMKo2Rg62Ay7NkuCpM0bgiLQ==", "optional": true, "dependencies": { - "jose": "^4.14.4", + "jose": "^4.15.1", "lru-cache": "^6.0.0", "object-hash": "^2.2.0", "oidc-token-hash": "^5.0.3" @@ -8090,6 +8398,18 @@ "url": "https://github.com/sponsors/panva" } }, + "node_modules/openid-client/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "optional": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/openid-client/node_modules/object-hash": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-2.2.0.tgz", @@ -8202,6 +8522,28 @@ "node": ">=6" } }, + "node_modules/parse5": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", + "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "dependencies": { + "entities": "^4.4.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/parse5/node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -8242,14 +8584,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/path-scurry/node_modules/lru-cache": { - "version": "10.0.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.0.1.tgz", - "integrity": "sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==", - "engines": { - "node": "14 || >=16.14" - } - }, "node_modules/path-type": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", @@ -8390,9 +8724,9 @@ } }, "node_modules/protobufjs-cli/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "bin": { "acorn": "bin/acorn" }, @@ -8477,6 +8811,11 @@ "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" + }, "node_modules/psl": { "version": "1.9.0", "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", @@ -8498,9 +8837,9 @@ } }, "node_modules/punycode": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", - "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", "engines": { "node": ">=6" } @@ -8737,12 +9076,14 @@ } }, "node_modules/retry-request": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-6.0.0.tgz", - "integrity": "sha512-24kaFMd3wCnT3n4uPnsQh90ZSV8OISpfTFXJ00Wi+/oD2OPrp63EQ8hznk6rhxdlpwx2QBhQSDz2Fg46ki852g==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/retry-request/-/retry-request-7.0.1.tgz", + "integrity": "sha512-ZI6vJp9rfB71mrZpw+n9p/B6HCsd7QJlSEQftZ+xfJzr3cQ9EPGKw1FF0BnViJ0fYREX6FhymBD2CARpmsFciQ==", "dependencies": { + "@types/request": "^2.48.8", "debug": "^4.1.1", - "extend": "^3.0.2" + "extend": "^3.0.2", + "teeny-request": "^9.0.0" }, "engines": { "node": ">=14" @@ -8758,19 +9099,19 @@ } }, "node_modules/rfc4648": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.2.tgz", - "integrity": "sha512-tLOizhR6YGovrEBLatX1sdcuhoSCXddw3mqNVAcKxGJ+J0hFeJ+SjeWCv5UPA/WU3YzWPPuCVYgXBKZUPGpKtg==" + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/rfc4648/-/rfc4648-1.5.3.tgz", + "integrity": "sha512-MjOWxM065+WswwnmNONOT+bD1nXzY9Km6u3kzvnx8F8/HXGZdz3T6e6vZJ8Q/RIMUSp/nxqjH3GwvJDy8ijeQQ==" }, "node_modules/rimraf": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.1.tgz", - "integrity": "sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==", + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-5.0.5.tgz", + "integrity": "sha512-CqDakW+hMe/Bz202FPEymy68P+G50RfMQK+Qo5YUqc9SPipvbGjCGKd0RSKEelbsfQuw3g5NZDSrlZZAJurH1A==", "dependencies": { - "glob": "^10.2.5" + "glob": "^10.3.7" }, "bin": { - "rimraf": "dist/cjs/src/bin.js" + "rimraf": "dist/esm/bin.mjs" }, "engines": { "node": ">=14" @@ -8788,18 +9129,18 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.3.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.4.tgz", - "integrity": "sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==", + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", "dependencies": { "foreground-child": "^3.1.0", - "jackspeak": "^2.0.3", + "jackspeak": "^2.3.5", "minimatch": "^9.0.1", "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", "path-scurry": "^1.10.1" }, "bin": { - "glob": "dist/cjs/src/bin.js" + "glob": "dist/esm/bin.mjs" }, "engines": { "node": ">=16 || 14 >=14.17" @@ -8822,6 +9163,11 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", + "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==" + }, "node_modules/run-parallel": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", @@ -8908,6 +9254,17 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==" }, + "node_modules/saxes": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", + "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, "node_modules/scmp": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/scmp/-/scmp-2.1.0.tgz", @@ -8927,6 +9284,17 @@ "node": ">=10" } }, + "node_modules/semver/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/serialize-javascript": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.0.tgz", @@ -9063,9 +9431,9 @@ "peer": true }, "node_modules/sshpk": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.17.0.tgz", - "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "version": "1.18.0", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", + "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", "dependencies": { "asn1": "~0.2.3", "assert-plus": "^1.0.0", @@ -9345,6 +9713,11 @@ "url": "https://github.com/chalk/supports-color?sponsor=1" } }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==" + }, "node_modules/table": { "version": "6.8.1", "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", @@ -9537,9 +9910,9 @@ } }, "node_modules/ts-node/node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", + "version": "8.11.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", + "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -9617,11 +9990,11 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==" }, "node_modules/twilio": { - "version": "4.17.0", - "resolved": "https://registry.npmjs.org/twilio/-/twilio-4.17.0.tgz", - "integrity": "sha512-fjY/VbmbEipXJEbBE3Zc8IS0Fzk1vDjUAMtyJIT1VbTN6xl+hIhoZ4FnXrd13JlrqaoonwOxAUnSjJBoHyNtmw==", + "version": "4.19.3", + "resolved": "https://registry.npmjs.org/twilio/-/twilio-4.19.3.tgz", + "integrity": "sha512-3X5Czl9Vg4QFl+2pnfMQ+H8YfEDQ4WeuAmqjUpbK65x0DfmxTCHuPEFWUKVZCJZew6iltJB/1whhVvIKETe54A==", "dependencies": { - "axios": "^0.26.1", + "axios": "^1.6.0", "dayjs": "^1.11.9", "https-proxy-agent": "^5.0.0", "jsonwebtoken": "^9.0.0", @@ -9781,6 +10154,11 @@ "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz", "integrity": "sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==" }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, "node_modules/universal-github-app-jwt": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-1.1.1.tgz", @@ -9791,9 +10169,17 @@ } }, "node_modules/universal-user-agent": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==" + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } }, "node_modules/uri-js": { "version": "4.4.1", @@ -9885,11 +10271,41 @@ "extsprintf": "^1.2.0" } }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", + "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/webidl-conversions": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", + "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", + "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", + "engines": { + "node": ">=18" + } + }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -9977,17 +10393,6 @@ "node": ">=0.10.0" } }, - "node_modules/window-size/node_modules/kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", - "dependencies": { - "is-buffer": "^1.1.5" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -10060,6 +10465,14 @@ } } }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", + "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", + "engines": { + "node": ">=18" + } + }, "node_modules/xml2js": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.5.0.tgz", @@ -10088,6 +10501,11 @@ "node": ">=6.0" } }, + "node_modules/xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==" + }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", diff --git a/package.json b/package.json index 1cd77646..7d8063fb 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "@azure/arm-containerservice": "^19.0.0", "@azure/arm-machinelearning": "^2.1.1", "@azure/arm-machinelearningservices": "^5.0.1", + "@azure/arm-monitor": "^7.0.0", "@azure/arm-network": "^30.1.0", "@azure/arm-resources": "^5.1.0", "@azure/arm-resources-subscriptions": "^2.1.0", @@ -65,6 +66,7 @@ "googleapis": "^105.0.0", "helm-ts": "^0.1.5", "js-yaml": "^4.1.0", + "jsdom": "^23.0.1", "jsome": "^2.3.26", "moment": "^2.29.4", "node-config-ts": "^3.3.1", @@ -89,7 +91,7 @@ "typescript": "^4.9.5" }, "name": "Kexa", - "version": "1.8.0-SNAPSHOT.111.ef2090d", + "version": "1.10.0-SNAPSHOT.40.9bbdd02", "main": "./build/index.js", "scripts": { "postinstall": "node-config-ts",