From 3054896fa64b2144d4d6db73498637d7a868be7f Mon Sep 17 00:00:00 2001
From: aesoft <43991222+aeppling@users.noreply.github.com>
Date: Thu, 30 Nov 2023 14:28:04 +0100
Subject: [PATCH 01/31] Update README.md
---
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/README.md b/README.md
index 3680a8c2..fdb194b5 100644
--- a/README.md
+++ b/README.md
@@ -77,7 +77,7 @@ With Kexa, you can [edit your own rules](documentation/Documentation-Kexa.md#rul
### Built With
-* [![NodeJs][NodeJs.com]][NodeJs-url]
+* Node JS
#
**Quick Launch**
From 572323132b085c5c8574dbb25a2bfcfb1e9b770f Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Thu, 30 Nov 2023 13:29:46 +0000
Subject: [PATCH 02/31] add info extract from addon
---
CHANGELOG.md | 9 +++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index dc758274..e9f42009 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -292,3 +292,12 @@ 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
+
+
diff --git a/VERSION b/VERSION
index 6e46212c..3c52d093 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.111.ef2090d
+1.8.0-SNAPSHOT.113.3054896
diff --git a/package.json b/package.json
index 1cd77646..6c18b6e1 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.111.ef2090d",
+ "version": "1.8.0-SNAPSHOT.113.3054896",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 2ac78c2b0280a98050213796bfd959dae3bb7879 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 11:15:51 +0100
Subject: [PATCH 03/31] update pw script
---
initKexa.ps1 | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/initKexa.ps1 b/initKexa.ps1
index d0d54320..2f271927 100644
--- a/initKexa.ps1
+++ b/initKexa.ps1
@@ -1,3 +1,9 @@
+param (
+ [string]$d = "default"
+)
+
+Write-Host "d: $d"
+
function Get-ValidInput {
param (
[string]$Prompt = "Entrez une valeur : ",
From 4f51e87dfec50a5ca7332760f1653918fa27b2e5 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 11:43:27 +0100
Subject: [PATCH 04/31] add helper, download/update Kexa
---
initKexa.ps1 | 89 +++++++++++++++++++++++++++++++++++++++++++++++++---
1 file changed, 84 insertions(+), 5 deletions(-)
diff --git a/initKexa.ps1 b/initKexa.ps1
index 2f271927..1f1dad3e 100644
--- a/initKexa.ps1
+++ b/initKexa.ps1
@@ -1,9 +1,17 @@
param (
- [string]$d = "default"
+ [switch]$help,
+ [switch]$d,
+ [switch]$download,
+ [string]$p,
+ [string]$path,
+ [string]$b,
+ [string]$branch,
+ [switch]$c,
+ [switch]$config
+ #[switch]$r,
+ #[switch]$rules
)
-Write-Host "d: $d"
-
function Get-ValidInput {
param (
[string]$Prompt = "Entrez une valeur : ",
@@ -17,6 +25,26 @@ function Get-ValidInput {
return $input
}
+function getValueFromMultipleChoice {
+ 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,
@@ -222,9 +250,60 @@ 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 "-p | -path : path where Kexa will be installed"
+ Write-Host "-c | -config : configure Kexa"
+ Press-EnterToContinue
+ exit
+}
+
+function downloadKexa {
+ Write-Host "Download the latest version of Kexa"
+ $branch = getValueFromMultipleChoice -firstOption $branch -secondOption $b -default "main"
+ Write-Host "Branch: $branch"
+ Write-Host "Path: $path"
+ $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 $zipPath"
+ Invoke-WebRequest -Uri $url -OutFile $zipPath
+ Expand-Archive -Path $zipPath -DestinationPath $path -Force
+ Move-Item -Path "$unZipPath\*" -Destination $path -ErrorAction SilentlyContinue -Force
+ Remove-Item -Path $unZipPath -Recurse -Force
+ Remove-Item -Path $zipPath -Force
+ Write-Host "End of download"
+}
+
+if($help){
+ Help
+ Press-EnterToContinue
+ exit
+}
+
+$commandTrigger = 0
Write-Host "Kexa Script initailization"
-Configure-Providers
+$path = getValueFromMultipleChoice -firstOption $path -secondOption $p -default "./"
+if($d -or $download){
+ downloadKexa
+ $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
From d28c6b98abee6e4c2408ad09600eb8ab66a3e2ab Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 14:07:24 +0100
Subject: [PATCH 05/31] add patch for azure function due to new config
---
Kexa/services/addOn/azureGathering.service.ts | 8 ++++----
Kexa/services/analyse.service.ts | 13 +++++++++----
2 files changed, 13 insertions(+), 8 deletions(-)
diff --git a/Kexa/services/addOn/azureGathering.service.ts b/Kexa/services/addOn/azureGathering.service.ts
index ef037241..80d2dff9 100644
--- a/Kexa/services/addOn/azureGathering.service.ts
+++ b/Kexa/services/addOn/azureGathering.service.ts
@@ -114,10 +114,10 @@ export async function collectData(azureConfig:AzureConfig[]): Promise();
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;
From 2807846cc58a806f735a258d29664997d28398e0 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Mon, 4 Dec 2023 13:10:09 +0000
Subject: [PATCH 06/31] add info extract from addon
---
CHANGELOG.md | 13 +++++++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e9f42009..e62e4531 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -301,3 +301,16 @@ initKexa.ps1 was changed
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
+
+
diff --git a/VERSION b/VERSION
index 3c52d093..3e2e7e60 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.113.3054896
+1.8.0-SNAPSHOT.118.4150a43
diff --git a/package.json b/package.json
index 6c18b6e1..9c981f3c 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.113.3054896",
+ "version": "1.8.0-SNAPSHOT.118.4150a43",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 78953f7be8cc0dee355d6d99af9f9a09b8034509 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 14:49:33 +0100
Subject: [PATCH 07/31] adding save of config
---
initKexa.ps1 | 59 ++++++++++++++++++++++++++++++++++++++++++++++------
1 file changed, 53 insertions(+), 6 deletions(-)
diff --git a/initKexa.ps1 b/initKexa.ps1
index 1f1dad3e..3351a4ef 100644
--- a/initKexa.ps1
+++ b/initKexa.ps1
@@ -25,7 +25,7 @@ function Get-ValidInput {
return $input
}
-function getValueFromMultipleChoice {
+function Get-ValueFromMultipleChoice {
param (
[string]$firstOption,
[string]$secondOption,
@@ -261,15 +261,16 @@ function Help {
exit
}
-function downloadKexa {
+function Download-Kexa {
Write-Host "Download the latest version of Kexa"
- $branch = getValueFromMultipleChoice -firstOption $branch -secondOption $b -default "main"
+ Protect-config
+ $branch = Get-ValueFromMultipleChoice -firstOption $branch -secondOption $b -default "main"
Write-Host "Branch: $branch"
Write-Host "Path: $path"
$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 $zipPath"
+ Write-Host "Download Kexa from $url to $path"
Invoke-WebRequest -Uri $url -OutFile $zipPath
Expand-Archive -Path $zipPath -DestinationPath $path -Force
Move-Item -Path "$unZipPath\*" -Destination $path -ErrorAction SilentlyContinue -Force
@@ -278,6 +279,49 @@ function downloadKexa {
Write-Host "End of download"
}
+function Protect-config {
+ New-Item -ItemType Directory -Path "./savedFolder" -ErrorAction SilentlyContinue | Out-Null
+ Remove-Item "./savedFolder" -Recurse -Force
+
+ New-Item -ItemType Directory -Path "./savedFolder/config" -ErrorAction SilentlyContinue | Out-Null
+ Copy-Item -Path "./config" -Destination "./savedFolder" -Recurse -ErrorAction SilentlyContinue -Force
+
+ New-Item -ItemType Directory -Path "./savedFolder/rules" -ErrorAction SilentlyContinue | Out-Null
+ Copy-Item -Path "./rules" -Destination "./savedFolder" -Recurse -ErrorAction SilentlyContinue -Force
+
+ New-Item -ItemType Directory -Path "./savedFolder/Kexa/rules" -ErrorAction SilentlyContinue | Out-Null
+ Copy-Item -Path "./Kexa/rules" -Destination "./savedFolder/Kexa" -Recurse -ErrorAction SilentlyContinue -Force
+
+ Copy-Item -Path "./.env" -Destination "./savedFolder" -ErrorAction SilentlyContinue -Force
+}
+
+function Retreive-config{
+ Copy-Item -Path "./savedFolder/config" -Destination "./" -Recurse -Force -ErrorAction SilentlyContinue
+ Copy-Item -Path "./savedFolder/rules" -Destination "./" -Recurse -Force -ErrorAction SilentlyContinue
+ Copy-Item -Path "./savedFolder/Kexa/rules" -Destination "./Kexa" -Recurse -Force -ErrorAction SilentlyContinue
+ Copy-Item -Path "./savedFolder/.env" -Destination "./" -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
@@ -287,9 +331,12 @@ if($help){
$commandTrigger = 0
Write-Host "Kexa Script initailization"
-$path = getValueFromMultipleChoice -firstOption $path -secondOption $p -default "./"
+$path = Get-ValueFromMultipleChoice -firstOption $path -secondOption $p -default "./"
if($d -or $download){
- downloadKexa
+ Protect-config
+ Download-Kexa
+ Retreive-config
+ Test-AndInstallNodeJS
$commandTrigger++
}
From 585bb71c266cb95a74a3f7c2178a6eb0380837f3 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 15:08:35 +0100
Subject: [PATCH 08/31] update gitignore
---
.gitignore | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
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
From 895230304ee7fe90f437c174727de46848e29b9f Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 15:26:51 +0100
Subject: [PATCH 09/31] remove git
---
initKexa.ps1 | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/initKexa.ps1 b/initKexa.ps1
index 3351a4ef..1ca124a1 100644
--- a/initKexa.ps1
+++ b/initKexa.ps1
@@ -273,9 +273,13 @@ function Download-Kexa {
Write-Host "Download Kexa from $url to $path"
Invoke-WebRequest -Uri $url -OutFile $zipPath
Expand-Archive -Path $zipPath -DestinationPath $path -Force
- Move-Item -Path "$unZipPath\*" -Destination $path -ErrorAction SilentlyContinue -Force
+ Move-Item -Path "$unZipPath\*" -Destination $path -Recurse -ErrorAction SilentlyContinue -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"
}
From 368bf87722dec00d2f9a89a8c2b5fc8cb210b2f1 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 17:31:27 +0100
Subject: [PATCH 10/31] recursive overwrite
---
initKexa.ps1 | 64 +++++++++++++++++++++++++++++-----------------------
1 file changed, 36 insertions(+), 28 deletions(-)
diff --git a/initKexa.ps1 b/initKexa.ps1
index 1ca124a1..247a6696 100644
--- a/initKexa.ps1
+++ b/initKexa.ps1
@@ -172,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 }
@@ -230,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
@@ -241,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 {
@@ -255,8 +255,9 @@ function Help {
Write-Host " "
Write-Host "-help : Display help"
Write-Host "-d | -download : download the latest version of Kexa"
- Write-Host "-p | -path : path where Kexa will be installed"
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
}
@@ -264,46 +265,51 @@ function Help {
function Download-Kexa {
Write-Host "Download the latest version of Kexa"
Protect-config
- $branch = Get-ValueFromMultipleChoice -firstOption $branch -secondOption $b -default "main"
- Write-Host "Branch: $branch"
- Write-Host "Path: $path"
$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
- Move-Item -Path "$unZipPath\*" -Destination $path -Recurse -ErrorAction SilentlyContinue -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
+ 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 "./savedFolder" -ErrorAction SilentlyContinue | Out-Null
- Remove-Item "./savedFolder" -Recurse -Force
+ New-Item -ItemType Directory -Path "$path/savedFolder" -ErrorAction SilentlyContinue | Out-Null
+ Remove-Item "$path/savedFolder" -Recurse -Force
- New-Item -ItemType Directory -Path "./savedFolder/config" -ErrorAction SilentlyContinue | Out-Null
- Copy-Item -Path "./config" -Destination "./savedFolder" -Recurse -ErrorAction SilentlyContinue -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 "./savedFolder/rules" -ErrorAction SilentlyContinue | Out-Null
- Copy-Item -Path "./rules" -Destination "./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 "./savedFolder/Kexa/rules" -ErrorAction SilentlyContinue | Out-Null
- Copy-Item -Path "./Kexa/rules" -Destination "./savedFolder/Kexa" -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 "./.env" -Destination "./savedFolder" -ErrorAction SilentlyContinue -Force
+ Copy-Item -Path "$path/.env" -Destination "$path/savedFolder" -ErrorAction SilentlyContinue -Force
}
function Retreive-config{
- Copy-Item -Path "./savedFolder/config" -Destination "./" -Recurse -Force -ErrorAction SilentlyContinue
- Copy-Item -Path "./savedFolder/rules" -Destination "./" -Recurse -Force -ErrorAction SilentlyContinue
- Copy-Item -Path "./savedFolder/Kexa/rules" -Destination "./Kexa" -Recurse -Force -ErrorAction SilentlyContinue
- Copy-Item -Path "./savedFolder/.env" -Destination "./" -ErrorAction SilentlyContinue -Force
+ 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 {
@@ -335,12 +341,14 @@ if($help){
$commandTrigger = 0
Write-Host "Kexa Script initailization"
-$path = Get-ValueFromMultipleChoice -firstOption $path -secondOption $p -default "./"
+$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
+ #Test-AndInstallNodeJS
$commandTrigger++
}
From c11d6eb3c3ecec384e90bdcfb4ddbbebbf0fafe4 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Mon, 4 Dec 2023 16:35:57 +0000
Subject: [PATCH 11/31] add info extract from addon
---
CHANGELOG.md | 11 +++++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index e62e4531..02a796bd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -314,3 +314,14 @@ 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
+
+
diff --git a/VERSION b/VERSION
index 3e2e7e60..3d0fd9a7 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.118.4150a43
+1.8.0-SNAPSHOT.124.7d39677
diff --git a/package.json b/package.json
index 9c981f3c..3eb01702 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.118.4150a43",
+ "version": "1.8.0-SNAPSHOT.124.7d39677",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From b4c7d6053bb11aba149f1b54d3bea20d9d76517a Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Mon, 4 Dec 2023 18:05:53 +0100
Subject: [PATCH 12/31] remove useless debug and add rule
---
Kexa/rules/OperationalExcellence.yaml | 18 +++++++++++++++---
Kexa/services/addOn/azureGathering.service.ts | 6 ------
.../addOn/display/azureDisplay.service.ts | 2 +-
3 files changed, 16 insertions(+), 10 deletions(-)
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/azureGathering.service.ts b/Kexa/services/addOn/azureGathering.service.ts
index 80d2dff9..53e64600 100644
--- a/Kexa/services/addOn/azureGathering.service.ts
+++ b/Kexa/services/addOn/azureGathering.service.ts
@@ -310,16 +310,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);
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
From 70b00779f468a4e6ca1192ca3962cff5f45d2f76 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Mon, 4 Dec 2023 17:07:35 +0000
Subject: [PATCH 13/31] add info extract from addon
---
CHANGELOG.md | 13 +++++++++++++
VERSION | 2 +-
capacity.json | 27 ++++++++++++++++++++++++---
package.json | 2 +-
4 files changed, 39 insertions(+), 5 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 02a796bd..36c25752 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -325,3 +325,16 @@ initKexa.ps1 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
+
+
diff --git a/VERSION b/VERSION
index 3d0fd9a7..3177b349 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.124.7d39677
+1.8.0-SNAPSHOT.127.e802885
diff --git a/capacity.json b/capacity.json
index 82bd90a6..d53195eb 100644
--- a/capacity.json
+++ b/capacity.json
@@ -235,9 +235,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/package.json b/package.json
index 3eb01702..9b233c57 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.124.7d39677",
+ "version": "1.8.0-SNAPSHOT.127.e802885",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 168f9b5ee2897f1f7fde5ce777b829e7e96ef53b Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 10:10:50 +0100
Subject: [PATCH 14/31] add script documentation
---
README.md | 19 ++++++++++++---
documentation/Documentation-Kexa.md | 38 ++++++++++++++++++++++++-----
2 files changed, 48 insertions(+), 9 deletions(-)
diff --git a/README.md b/README.md
index fdb194b5..3ec84bc3 100644
--- a/README.md
+++ b/README.md
@@ -3,6 +3,9 @@
[![Stargazers][stars-shield]][stars-url]
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]
+
+
+
@@ -82,7 +87,15 @@ With Kexa, you can [edit your own rules](documentation/Documentation-Kexa.md#rul
# **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.
diff --git a/documentation/Documentation-Kexa.md b/documentation/Documentation-Kexa.md
index 860f96a3..0ece0c53 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
```
From b2cfca26b52586a2159759377617afde9ae4ef0e Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 09:12:34 +0000
Subject: [PATCH 15/31] add info extract from addon
---
CHANGELOG.md | 11 +++++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 36c25752..aec79e39 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -338,3 +338,14 @@ 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
+
+
diff --git a/VERSION b/VERSION
index 3177b349..e4341c4c 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.127.e802885
+1.8.0-SNAPSHOT.129.168f9b5
diff --git a/package.json b/package.json
index 9b233c57..2bc9c10e 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.127.e802885",
+ "version": "1.8.0-SNAPSHOT.129.168f9b5",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From cd984c87c1109e6b313be49a9705e7f9e9284549 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 10:19:10 +0100
Subject: [PATCH 16/31] remove script in readme
---
README.md | 2 --
1 file changed, 2 deletions(-)
diff --git a/README.md b/README.md
index 3ec84bc3..3d84e5bf 100644
--- a/README.md
+++ b/README.md
@@ -4,8 +4,6 @@
[![Issues][issues-shield]][issues-url]
[![MIT License][license-shield]][license-url]
-
-
From 1c0d8a1c4a246a91e3dccde33db96e81bd4c817b Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 09:20:54 +0000
Subject: [PATCH 17/31] add info extract from addon
---
CHANGELOG.md | 9 +++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index aec79e39..881cdb6c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -349,3 +349,12 @@ 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
+
+
diff --git a/VERSION b/VERSION
index e4341c4c..400e65b6 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.129.168f9b5
+1.8.0-SNAPSHOT.132.427091f
diff --git a/package.json b/package.json
index 2bc9c10e..f1de3e93 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.129.168f9b5",
+ "version": "1.8.0-SNAPSHOT.132.427091f",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 14a30653ad7ab3445a554503a4eefa484f4af5f4 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 10:29:33 +0100
Subject: [PATCH 18/31] adding more fancy
---
README.md | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)
diff --git a/README.md b/README.md
index 3d84e5bf..7367f13e 100644
--- a/README.md
+++ b/README.md
@@ -80,7 +80,7 @@ With Kexa, you can [edit your own rules](documentation/Documentation-Kexa.md#rul
### Built With
-* Node JS
+* [![NODE][NODE-shield]](https://nodejs.org/fr)
# **Quick Launch**
@@ -520,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
@@ -535,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
From 9f254d80dc2a418e377a6e8cfa0d76f691630f41 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 09:31:12 +0000
Subject: [PATCH 19/31] add info extract from addon
---
CHANGELOG.md | 9 +++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 881cdb6c..6989d3d9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -358,3 +358,12 @@ documentation/Documentation-Kexa.md was changed
README.md was changed
+## 1.8.0-SNAPSHOT.135.a605443
+
+### Files added: 0
+
+### Files changed: 1
+
+README.md was changed
+
+
diff --git a/VERSION b/VERSION
index 400e65b6..addd545b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.132.427091f
+1.8.0-SNAPSHOT.135.a605443
diff --git a/package.json b/package.json
index f1de3e93..d53769b0 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.132.427091f",
+ "version": "1.8.0-SNAPSHOT.135.a605443",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 7d8908ad05fc7ed654b5435b19a821c7fd53c358 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 09:40:58 +0000
Subject: [PATCH 20/31] add info extract from addon
---
CHANGELOG.md | 7 +++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 9 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6989d3d9..952db758 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -367,3 +367,10 @@ README.md was changed
README.md was changed
+## 1.10.0-SNAPSHOT.25.9ee4861
+
+### Files added: 0
+
+### Files changed: 0
+
+
diff --git a/VERSION b/VERSION
index addd545b..37d98b37 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.8.0-SNAPSHOT.135.a605443
+1.10.0-SNAPSHOT.25.9ee4861
diff --git a/package.json b/package.json
index d53769b0..cdd2578d 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.135.a605443",
+ "version": "1.10.0-SNAPSHOT.25.9ee4861",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 0aed5e95848c833f377498e29b508dde43609bba Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 15:15:54 +0100
Subject: [PATCH 21/31] adding optional scan in addOn
---
Kexa/main.ts | 3 +-
Kexa/models/settingFile/config.models.ts | 1 +
Kexa/services/addOn.service.ts | 20 ++++++---
Kexa/services/addOn/awsGathering.service.ts | 11 +++++
Kexa/services/addOn/azureGathering.service.ts | 14 +++++-
Kexa/services/addOn/gcpGathering.service.ts | 44 ++++++++++++++++++-
.../services/addOn/githubGathering.service.ts | 24 ++++++++++
.../addOn/googleWorkspaceGathering.service.ts | 12 ++++-
.../addOn/kubernetesGathering.service.ts | 4 ++
Kexa/services/addOn/o365Gathering.service.ts | 8 +++-
Kexa/services/analyse.service.ts | 18 +++++---
config/default.json | 7 +++
documentation/Documentation-Kexa.md | 8 ++--
13 files changed, 150 insertions(+), 24 deletions(-)
diff --git a/Kexa/main.ts b/Kexa/main.ts
index 2171bf2e..9253a8ba 100644
--- a/Kexa/main.ts
+++ b/Kexa/main.ts
@@ -46,8 +46,7 @@ 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");
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/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 53e64600..f7373282 100644
--- a/Kexa/services/addOn/azureGathering.service.ts
+++ b/Kexa/services/addOn/azureGathering.service.ts
@@ -41,6 +41,7 @@ const logger = getNewLogger("AzureLogger");
let computeClient: ComputeManagementClient;
let resourcesClient : ResourceManagementClient ;
let networkClient: NetworkManagementClient;
+let currentConfig: AzureConfig;
////////////////////////////////////////////////////////////////////////////////////////////////////////
//// LISTING CLOUD RESOURCES
////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -48,6 +49,7 @@ export async function collectData(azureConfig:AzureConfig[]): Promise();
for(let config of azureConfig??[]){
+ currentConfig = config;
let azureResource = {
"vm": null,
"rg": null,
@@ -132,6 +134,7 @@ 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 +152,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 +168,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 +185,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 +202,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 +219,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 +235,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;
@@ -242,6 +251,7 @@ export async function disksListing(client:ComputeManagementClient): Promise|null> {
+ if(!currentConfig.ObjectNameNeed?.includes("vm")) return null;
logger.info("starting virtualMachinesListing");
try {
const resultList = new Array;
@@ -256,6 +266,7 @@ export async function virtualMachinesListing(client:ComputeManagementClient): Pr
}
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 +280,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){
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/analyse.service.ts b/Kexa/services/analyse.service.ts
index 73fd0ff4..c102a34b 100644
--- a/Kexa/services/analyse.service.ts
+++ b/Kexa/services/analyse.service.ts
@@ -33,7 +33,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 +46,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,12 +60,16 @@ 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[]{
@@ -89,8 +93,8 @@ function getListNeedRules(): string[]{
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){
@@ -130,9 +134,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;
diff --git a/config/default.json b/config/default.json
index f774db90..6b0d7820 100644
--- a/config/default.json
+++ b/config/default.json
@@ -1,5 +1,12 @@
{
"azure": [
+ {
+ "description": "organization 4urcloud",
+ "rules": [
+ "OperationalExcellence",
+ "Security"
+ ]
+ },
{
"description": "organization 4urcloud",
"rules": [
diff --git a/documentation/Documentation-Kexa.md b/documentation/Documentation-Kexa.md
index 0ece0c53..80820116 100644
--- a/documentation/Documentation-Kexa.md
+++ b/documentation/Documentation-Kexa.md
@@ -873,7 +873,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
[
@@ -900,7 +900,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
@@ -916,8 +916,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
}
From 907cf7c16ed6a3f9d919c90363ee7d003a09a6a2 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 15:22:08 +0100
Subject: [PATCH 22/31] adding forgetting ml optional scan
---
Kexa/services/addOn/azureGathering.service.ts | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/Kexa/services/addOn/azureGathering.service.ts b/Kexa/services/addOn/azureGathering.service.ts
index f7373282..77219646 100644
--- a/Kexa/services/addOn/azureGathering.service.ts
+++ b/Kexa/services/addOn/azureGathering.service.ts
@@ -303,6 +303,12 @@ export async function networkSecurityGroup_analyze(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);
@@ -334,6 +340,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();
@@ -351,6 +358,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();
@@ -368,6 +376,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();
From b2eeb4d8b2f264a4e38f234c27ffcb1aac3b9e18 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 14:27:42 +0000
Subject: [PATCH 23/31] add info extract from addon
---
CHANGELOG.md | 33 +++++++++++++++++++++++++++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 35 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 952db758..bb3f52ad 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -374,3 +374,36 @@ README.md was changed
### 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
+
+
diff --git a/VERSION b/VERSION
index 37d98b37..a7a42812 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.10.0-SNAPSHOT.25.9ee4861
+1.10.0-SNAPSHOT.29.a6375e2
diff --git a/package.json b/package.json
index cdd2578d..7ceec6cf 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.25.9ee4861",
+ "version": "1.10.0-SNAPSHOT.29.a6375e2",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From b2209bd2230312b43e33886f265b926bfa4e6510 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 16:20:10 +0100
Subject: [PATCH 24/31] updated outdated package
---
package-lock.json | 1622 ++++++++++++++++++++++++---------------------
1 file changed, 864 insertions(+), 758 deletions(-)
diff --git a/package-lock.json b/package-lock.json
index ca56ca39..70f5b48c 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.29.a6375e2",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Kexa",
- "version": "1.8.0-SNAPSHOT.69.12ed96c",
+ "version": "1.10.0-SNAPSHOT.29.a6375e2",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -200,48 +200,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 +261,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 +307,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 +356,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 +383,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 +403,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 +424,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 +439,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 +456,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 +470,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 +484,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 +497,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 +511,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 +529,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 +543,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 +560,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 +575,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 +590,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 +637,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 +649,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 +662,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 +676,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 +687,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 +756,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 +769,7 @@
"tslib": "^2.2.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=18.0.0"
}
},
"node_modules/@azure/arm-machinelearning": {
@@ -883,9 +904,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 +986,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 +1001,7 @@
"tslib": "^2.2.0"
},
"engines": {
- "node": ">=14.0.0"
+ "node": ">=16.0.0"
}
},
"node_modules/@azure/core-tracing": {
@@ -995,15 +1016,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 +1062,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 +1072,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 +1175,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 +1219,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 +1267,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 +1352,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 +1363,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 +1448,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 +1470,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 +1503,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 +1514,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 +1645,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 +1703,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 +1714,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 +1775,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 +1857,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 +2078,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 +2090,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 +2104,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 +2268,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 +2381,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 +2549,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 +2612,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 +2687,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 +2840,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 +2954,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 +2981,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 +3052,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 +3064,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 +3079,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 +3094,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 +3131,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 +3151,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 +3164,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 +3181,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 +3207,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 +3219,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 +3231,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 +3245,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 +3260,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 +3272,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 +3284,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 +3297,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 +3309,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 +3332,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 +3350,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 +3364,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 +3375,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 +3439,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 +3454,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 +3495,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 +3507,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 +3520,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 +3549,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 +3561,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 +3606,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 +3620,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 +3645,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 +3682,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 +3692,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 +3748,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 +3761,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 +3957,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 +4201,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 +4250,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 +4448,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 +4492,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": "*"
}
@@ -5354,9 +5433,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 +5540,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 +5784,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 +5891,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 +5939,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 +5969,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 +6075,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 +6144,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",
@@ -6260,9 +6360,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 +6442,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 +6535,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 +6560,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": {
@@ -6724,9 +6823,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 +6848,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"
@@ -7248,18 +7347,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 +7505,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 +7909,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 +7944,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",
@@ -7959,12 +8049,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 +8166,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 +8180,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",
@@ -8242,14 +8344,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 +8484,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 +8571,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 +8597,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 +8836,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 +8859,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 +8889,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"
@@ -8927,6 +9028,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 +9175,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",
@@ -9537,9 +9649,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 +9729,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 +9893,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 +9908,9 @@
}
},
"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/uri-js": {
"version": "4.4.1",
@@ -9977,17 +10094,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",
From 97486f8cd5d319c333c127b2a5abbe85d1ad66fc Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Tue, 5 Dec 2023 15:22:03 +0000
Subject: [PATCH 25/31] add info extract from addon
---
CHANGELOG.md | 9 +++++++++
VERSION | 2 +-
package.json | 2 +-
3 files changed, 11 insertions(+), 2 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bb3f52ad..70a72c28 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -407,3 +407,12 @@ 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
+
+
diff --git a/VERSION b/VERSION
index a7a42812..6dd6ec7d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.10.0-SNAPSHOT.29.a6375e2
+1.10.0-SNAPSHOT.31.b2209bd
diff --git a/package.json b/package.json
index 7ceec6cf..f4fae57c 100644
--- a/package.json
+++ b/package.json
@@ -89,7 +89,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.29.a6375e2",
+ "version": "1.10.0-SNAPSHOT.31.b2209bd",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
From 9f88936fa0442ed1706b11dc90dc9043161454c8 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Wed, 6 Dec 2023 20:13:46 +0100
Subject: [PATCH 26/31] adding VM spec azure
---
Kexa/rules/Economy.yaml | 14 +++-
Kexa/services/addOn/azureGathering.service.ts | 68 ++++++++++++++++++-
Kexa/services/alerte.service.ts | 5 +-
config/default.json | 9 +--
package-lock.json | 22 +++++-
package.json | 3 +-
6 files changed, 104 insertions(+), 17 deletions(-)
diff --git a/Kexa/rules/Economy.yaml b/Kexa/rules/Economy.yaml
index 5c164517..50344015 100644
--- a/Kexa/rules/Economy.yaml
+++ b/Kexa/rules/Economy.yaml
@@ -138,4 +138,16 @@
conditions:
- property: consumedUnits
condition: SUP
- value: 0
\ No newline at end of file
+ value: 0
+ - name: "under-use-VM"
+ description: "this rule is if a VM is under-used (50% > CPU over 2 weeks) "
+ applied: true
+ level: 1
+ cloudProvider: azure
+ objectName: vm
+ conditions:
+ - operator: NOR
+ criteria:
+ - property: instanceView.PercentageCPU.mean
+ condition: INF
+ value: 0.5
\ No newline at end of file
diff --git a/Kexa/services/addOn/azureGathering.service.ts b/Kexa/services/addOn/azureGathering.service.ts
index 77219646..97e55907 100644
--- a/Kexa/services/addOn/azureGathering.service.ts
+++ b/Kexa/services/addOn/azureGathering.service.ts
@@ -26,6 +26,7 @@ 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";
@@ -41,6 +42,7 @@ const logger = getNewLogger("AzureLogger");
let computeClient: ComputeManagementClient;
let resourcesClient : ResourceManagementClient ;
let networkClient: NetworkManagementClient;
+let monitorClient: MonitorClient;
let currentConfig: AzureConfig;
////////////////////////////////////////////////////////////////////////////////////////////////////////
//// LISTING CLOUD RESOURCES
@@ -89,13 +91,14 @@ export async function collectData(azureConfig:AzureConfig[]): 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;
+ vm.instanceView = await getCPUAndRAMUsage(monitor, item.id??"");
+ vm.details = await getVMDetails(client, item);
+ resultList.push(vm);
}
return resultList;
}catch (err) {
@@ -265,6 +273,60 @@ export async function virtualMachinesListing(client:ComputeManagementClient): Pr
}
}
+async function getVMDetails(client: ComputeManagementClient, vm:any): Promise {
+ try {
+ const vmDetails = await client.virtualMachines.get(vm.id?.split("/")[4] ?? "", vm.name??"");
+ logger.debug("vmDetails: "+JSON.stringify(vmDetails));
+ return vmDetails;
+ } catch (err) {
+ logger.debug("error in getVMDetails:"+err);
+ return null;
+ }
+}
+
+async function getCPUAndRAMUsage(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",
+ });
+ logger.debug("vm1: "+JSON.stringify(vmMetrics));
+ 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));
+ }
+ }
+ logger.debug("vm2: "+JSON.stringify(dataMetricsReformat));
+ 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");
diff --git a/Kexa/services/alerte.service.ts b/Kexa/services/alerte.service.ts
index a9f5ae1a..e1f2db44 100644
--- a/Kexa/services/alerte.service.ts
+++ b/Kexa/services/alerte.service.ts
@@ -175,7 +175,7 @@ export function alertTeamsGlobal(alert: GlobalConfigAlert, compteError: number[]
content["title"] = "Kexa - Global Alert - "+(alert.name??"Uname");
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);
}
@@ -307,7 +307,8 @@ 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;
+ logger.debug("send teams to:"+teams_to);
let content = propertyToSend(rule, objectResource);
sendCardMessageToTeamsChannel(teams_to, "Kexa - "+levelAlert[rule.level]+" - "+rule.name, content);
}
diff --git a/config/default.json b/config/default.json
index 6b0d7820..c784d59f 100644
--- a/config/default.json
+++ b/config/default.json
@@ -3,14 +3,7 @@
{
"description": "organization 4urcloud",
"rules": [
- "OperationalExcellence",
- "Security"
- ]
- },
- {
- "description": "organization 4urcloud",
- "rules": [
- "OperationalExcellence"
+ "rules-testing"
]
}
]
diff --git a/package-lock.json b/package-lock.json
index 70f5b48c..e625b9be 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.29.a6375e2",
+ "version": "1.10.0-SNAPSHOT.31.b2209bd",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.29.a6375e2",
+ "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",
@@ -807,6 +808,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",
diff --git a/package.json b/package.json
index f4fae57c..d610f3f3 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",
@@ -114,4 +115,4 @@
"author": "4urcloud | Esteban MATHIA | Adrien EPPLING",
"license": "MIT",
"description": "Kexa helps you save money and automate the standardization, security and verification of your cloud deployments."
-}
\ No newline at end of file
+}
From 533fbb3e2e7b1dd0cd7195fa89b9b92a6d32a061 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Thu, 7 Dec 2023 17:01:55 +0100
Subject: [PATCH 27/31] reworked all teams notifications
---
Kexa/emails/teams.ts | 55 +++++
Kexa/helpers/extractURL.ts | 34 ++++
Kexa/helpers/spliter.ts | 21 ++
Kexa/services/alerte.service.ts | 54 +++--
Kexa/services/analyse.service.ts | 5 +-
documentation/Documentation-Kexa.md | 1 +
package-lock.json | 298 +++++++++++++++++++++++++++-
package.json | 3 +-
8 files changed, 445 insertions(+), 26 deletions(-)
create mode 100644 Kexa/emails/teams.ts
create mode 100644 Kexa/helpers/extractURL.ts
create mode 100644 Kexa/helpers/spliter.ts
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/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\nLoud 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 c102a34b..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');
@@ -430,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(" || ")
};
}
@@ -530,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/documentation/Documentation-Kexa.md b/documentation/Documentation-Kexa.md
index 80820116..ae5e40b5 100644
--- a/documentation/Documentation-Kexa.md
+++ b/documentation/Documentation-Kexa.md
@@ -472,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
diff --git a/package-lock.json b/package-lock.json
index 70f5b48c..96105e37 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,12 +1,12 @@
{
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.29.a6375e2",
+ "version": "1.10.0-SNAPSHOT.31.b2209bd",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.29.a6375e2",
+ "version": "1.10.0-SNAPSHOT.31.b2209bd",
"hasInstallScript": true,
"license": "MIT",
"dependencies": {
@@ -75,6 +75,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",
@@ -4634,6 +4635,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",
@@ -4645,6 +4657,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",
@@ -4678,6 +4733,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",
@@ -6304,6 +6364,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",
@@ -6676,6 +6747,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",
@@ -6922,6 +6998,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",
@@ -8016,6 +8211,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",
@@ -8304,6 +8504,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",
@@ -8923,6 +9145,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",
@@ -9009,6 +9236,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",
@@ -9457,6 +9695,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",
@@ -9912,6 +10155,14 @@
"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",
"resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz",
@@ -10002,11 +10253,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",
@@ -10166,6 +10447,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",
@@ -10194,6 +10483,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 f4fae57c..d82edd26 100644
--- a/package.json
+++ b/package.json
@@ -65,6 +65,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",
@@ -114,4 +115,4 @@
"author": "4urcloud | Esteban MATHIA | Adrien EPPLING",
"license": "MIT",
"description": "Kexa helps you save money and automate the standardization, security and verification of your cloud deployments."
-}
\ No newline at end of file
+}
From e3ae36f992094f4e642b496e5291cf99277b1400 Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Thu, 7 Dec 2023 16:04:30 +0000
Subject: [PATCH 28/31] add info extract from addon
---
CHANGELOG.md | 29 +++++++++++++++++++++++++++++
VERSION | 2 +-
package.json | 4 ++--
3 files changed, 32 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 70a72c28..d73926a4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -416,3 +416,32 @@ documentation/Documentation-Kexa.md was changed
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
+
+
diff --git a/VERSION b/VERSION
index 6dd6ec7d..21cdfd33 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.10.0-SNAPSHOT.31.b2209bd
+1.10.0-SNAPSHOT.34.fd4abd2
diff --git a/package.json b/package.json
index d82edd26..c5e2bedf 100644
--- a/package.json
+++ b/package.json
@@ -90,7 +90,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.31.b2209bd",
+ "version": "1.10.0-SNAPSHOT.34.fd4abd2",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
@@ -115,4 +115,4 @@
"author": "4urcloud | Esteban MATHIA | Adrien EPPLING",
"license": "MIT",
"description": "Kexa helps you save money and automate the standardization, security and verification of your cloud deployments."
-}
+}
\ No newline at end of file
From 213585d900128e8b9ecd7a077c0467809ce52a97 Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Fri, 8 Dec 2023 14:16:29 +0100
Subject: [PATCH 29/31] convert RAM data azure to percentage
---
Kexa/helpers/statsNumbers.ts | 37 +++++++++++++++++++
Kexa/main.ts | 1 -
Kexa/services/addOn/azureGathering.service.ts | 30 ++++++++++-----
documentation/AWS.md | 1 -
4 files changed, 58 insertions(+), 11 deletions(-)
create mode 100644 Kexa/helpers/statsNumbers.ts
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 9253a8ba..11657377 100644
--- a/Kexa/main.ts
+++ b/Kexa/main.ts
@@ -53,7 +53,6 @@ export async function main() {
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/services/addOn/azureGathering.service.ts b/Kexa/services/addOn/azureGathering.service.ts
index 97e55907..b60af38d 100644
--- a/Kexa/services/addOn/azureGathering.service.ts
+++ b/Kexa/services/addOn/azureGathering.service.ts
@@ -32,6 +32,7 @@ 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");
@@ -262,8 +263,14 @@ export async function virtualMachinesListing(client:ComputeManagementClient, mon
let vm:any = item;
let rg = item.id?.split("/")[4] ?? "";
vm.resourceGroupName = rg;
- vm.instanceView = await getCPUAndRAMUsage(monitor, item.id??"");
- vm.details = await getVMDetails(client, item);
+ 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;
@@ -273,18 +280,24 @@ export async function virtualMachinesListing(client:ComputeManagementClient, mon
}
}
-async function getVMDetails(client: ComputeManagementClient, vm:any): Promise {
+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 {
- const vmDetails = await client.virtualMachines.get(vm.id?.split("/")[4] ?? "", vm.name??"");
- logger.debug("vmDetails: "+JSON.stringify(vmDetails));
- return vmDetails;
+ 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 getCPUAndRAMUsage(client: MonitorClient, vmId:string): Promise {
+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)
@@ -292,7 +305,6 @@ async function getCPUAndRAMUsage(client: MonitorClient, vmId:string): Promiseitem.average).filter((item:any)=>item!=null));
}
}
- logger.debug("vm2: "+JSON.stringify(dataMetricsReformat));
return dataMetricsReformat;
} catch (err) {
logger.debug("error in getCPUAndRAMUsage:"+err);
@@ -364,6 +375,7 @@ export async function networkSecurityGroup_analyze(nsgList: Array {
if(
!currentConfig.ObjectNameNeed?.includes("mlWorkspaces")
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
```
From b2e5132e2005b9727b32d5395a06cce9da06b5de Mon Sep 17 00:00:00 2001
From: Esteban Mathia
Date: Fri, 8 Dec 2023 14:16:43 +0100
Subject: [PATCH 30/31] adding rule detect under use VM
---
Kexa/rules/Economy.yaml | 15 +++++++++------
1 file changed, 9 insertions(+), 6 deletions(-)
diff --git a/Kexa/rules/Economy.yaml b/Kexa/rules/Economy.yaml
index 50344015..23bf902b 100644
--- a/Kexa/rules/Economy.yaml
+++ b/Kexa/rules/Economy.yaml
@@ -139,15 +139,18 @@
- property: consumedUnits
condition: SUP
value: 0
- - name: "under-use-VM"
- description: "this rule is if a VM is under-used (50% > CPU over 2 weeks) "
+ - 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: NOR
+ - operator: OR
criteria:
- - property: instanceView.PercentageCPU.mean
- condition: INF
- value: 0.5
\ No newline at end of file
+ - property: instanceView.percentageCPU.mean
+ condition: SUP
+ value: 50
+ - property: instanceView.availableMemoryBytes.mean
+ condition: SUP
+ value: 50
\ No newline at end of file
From 1898b5f36b0f06b510605b40eb18c6a7d337e3ec Mon Sep 17 00:00:00 2001
From: estebanmathia
Date: Fri, 8 Dec 2023 13:20:01 +0000
Subject: [PATCH 31/31] add info extract from addon
---
CHANGELOG.md | 25 +++++++++++++++++++++++++
VERSION | 2 +-
capacity.json | 25 +++++++++++++++++++++++++
package.json | 4 ++--
4 files changed, 53 insertions(+), 3 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index d73926a4..144277ae 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -445,3 +445,28 @@ 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/VERSION b/VERSION
index 21cdfd33..f6e1bd9a 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.10.0-SNAPSHOT.34.fd4abd2
+1.10.0-SNAPSHOT.40.9bbdd02
diff --git a/capacity.json b/capacity.json
index d53195eb..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",
diff --git a/package.json b/package.json
index bcd1e0cc..7d8063fb 100644
--- a/package.json
+++ b/package.json
@@ -91,7 +91,7 @@
"typescript": "^4.9.5"
},
"name": "Kexa",
- "version": "1.10.0-SNAPSHOT.34.fd4abd2",
+ "version": "1.10.0-SNAPSHOT.40.9bbdd02",
"main": "./build/index.js",
"scripts": {
"postinstall": "node-config-ts",
@@ -116,4 +116,4 @@
"author": "4urcloud | Esteban MATHIA | Adrien EPPLING",
"license": "MIT",
"description": "Kexa helps you save money and automate the standardization, security and verification of your cloud deployments."
-}
+}
\ No newline at end of file