From a9e007f9092e71b9fc89da66615fbd5b410a8173 Mon Sep 17 00:00:00 2001 From: xeondesk Date: Tue, 11 Aug 2026 02:14:54 +0600 Subject: [PATCH 1/2] Add new security plugins, SaaS sync integration, and fix lint issues --- .eslintrc.json | 2 +- bannerGenerator.js | 9 +- config_example.js | 10 + engine.js | 23 +- exports.js | 3357 +++++----- helpers/azure/api.js | 285 +- helpers/azure/functions.js | 73 +- helpers/google/api.js | 342 +- helpers/google/index.js | 121 +- index.js | 97 +- .../securityNotificationsEnabled.js | 8 +- plugins/aws/ec2/ec2PrivilegeAnalysis.js | 1 + plugins/aws/ec2/openCIFS.js | 27 +- plugins/aws/ec2/openCIFS.spec.js | 74 +- plugins/aws/ec2/subnetAutoAssignPublicIp.js | 58 + .../aws/ec2/subnetAutoAssignPublicIp.spec.js | 101 + .../aws/ec2/vpcPeeringLeastAccessRoutes.js | 129 + .../ec2/vpcPeeringLeastAccessRoutes.spec.js | 185 + plugins/aws/eks/eksKubernetesVersion.js | 4 +- plugins/aws/eks/eksKubernetesVersion.spec.js | 2 +- plugins/aws/eks/eksPrivilegeAnalysis.js | 1 + plugins/aws/iam/cloudShellFullAccess.js | 100 + plugins/aws/iam/cloudShellFullAccess.spec.js | 252 + plugins/aws/lambda/lambdaEnvSecrets.js | 112 + plugins/aws/lambda/lambdaEnvSecrets.spec.js | 157 + plugins/aws/lambda/lambdaPrivilegeAnalysis.js | 1 + plugins/aws/s3/s3Encryption.js | 2 +- .../appservice/appServicePublicAccess.js | 31 +- .../appservice/appServicePublicAccess.spec.js | 46 + .../appservice/functionAppNetworkExposure.js | 2 +- .../appservice/functionPrivilegeAnalysis.js | 5 +- plugins/azure/eventGrid/domainPublicAccess.js | 16 +- .../eventGrid/domainPublicAccess.spec.js | 54 + .../azure/eventhub/eventHubPublicAccess.js | 13 +- .../eventhub/eventHubPublicAccess.spec.js | 34 + .../azure/keyvaults/keyVaultPublicAccess.js | 2 +- .../keyvaults/keyVaultPublicAccess.spec.js | 25 + .../kubernetesservice/aksPrivilegeAnalysis.js | 7 +- .../mysqlFlexibleServerPublicAccess.js | 2 +- .../openai/accountPublicAccessDisabled.js | 26 +- .../accountPublicAccessDisabled.spec.js | 57 +- .../postgresqlServerPublicAccess.js | 2 +- .../postgresqlServerPublicAccess.spec.js | 12 +- .../azure/servicebus/namespacePublicAccess.js | 48 +- .../servicebus/namespacePublicAccess.spec.js | 77 +- plugins/azure/sqlserver/noPublicAccess.js | 2 +- .../virtualmachines/vmPrivilegeAnalysis.js | 1 + plugins/github/repos/repoPublicAccess.js | 50 + plugins/github/repos/repoPublicAccess.spec.js | 83 + plugins/github/repos/secretScanningEnabled.js | 57 + .../repos/secretScanningEnabled.spec.js | 110 + plugins/google/cloudfunctions/cfEnvSecrets.js | 163 + .../cloudfunctions/cfEnvSecrets.spec.js | 132 + .../cloudFunctionsPrivilegeAnalysis.js | 1 + .../compute/computePrivilegeAnalysis.js | 9 +- .../kubernetes/kubernetesPrivilegeAnalysis.js | 1 + tests/sync.spec.js | 219 + yarn.lock | 5741 +++++++++++++++++ 58 files changed, 10409 insertions(+), 2152 deletions(-) create mode 100644 plugins/aws/ec2/subnetAutoAssignPublicIp.js create mode 100644 plugins/aws/ec2/subnetAutoAssignPublicIp.spec.js create mode 100644 plugins/aws/ec2/vpcPeeringLeastAccessRoutes.js create mode 100644 plugins/aws/ec2/vpcPeeringLeastAccessRoutes.spec.js create mode 100644 plugins/aws/iam/cloudShellFullAccess.js create mode 100644 plugins/aws/iam/cloudShellFullAccess.spec.js create mode 100644 plugins/aws/lambda/lambdaEnvSecrets.js create mode 100644 plugins/aws/lambda/lambdaEnvSecrets.spec.js create mode 100644 plugins/github/repos/repoPublicAccess.js create mode 100644 plugins/github/repos/repoPublicAccess.spec.js create mode 100644 plugins/github/repos/secretScanningEnabled.js create mode 100644 plugins/github/repos/secretScanningEnabled.spec.js create mode 100644 plugins/google/cloudfunctions/cfEnvSecrets.js create mode 100644 plugins/google/cloudfunctions/cfEnvSecrets.spec.js create mode 100644 tests/sync.spec.js create mode 100644 yarn.lock diff --git a/.eslintrc.json b/.eslintrc.json index b89aa7c55..9caf1e183 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -9,7 +9,7 @@ "SharedArrayBuffer": "readonly" }, "parserOptions": { - "ecmaVersion": 2018 + "ecmaVersion": 2020 }, "ignorePatterns": [ "node_modules/", diff --git a/bannerGenerator.js b/bannerGenerator.js index 3aeefdd4f..4021d430b 100644 --- a/bannerGenerator.js +++ b/bannerGenerator.js @@ -1,7 +1,6 @@ #!/usr/bin/env node const figlet = require('figlet'); -const chalk = require('chalk'); const gradient = require('gradient-string'); const boxen = require('boxen').default; // <-- fix here @@ -13,10 +12,10 @@ const colored = gradient.rainbow(banner); // Wrap in a box const boxed = boxen(colored, { - padding: 1, - margin: 1, - borderStyle: 'round', - borderColor: 'magenta' + padding: 1, + margin: 1, + borderStyle: 'round', + borderColor: 'magenta' }); // Print to console diff --git a/config_example.js b/config_example.js index 0d5c8589e..88811a6fb 100644 --- a/config_example.js +++ b/config_example.js @@ -82,5 +82,15 @@ module.exports = { // login: process.env.GITHUB_LOGIN || 'myusername', // organization: process.env.GITHUB_ORG || false } + }, + saas: { + // Set to true to automatically sync scan metadata to the hosted SaaS platform + enabled: process.env.KHULNASOFT_SAAS_SYNC === 'true' || false, + // API key used to authenticate with the hosted SaaS platform + api_key: process.env.KHULNASOFT_SAAS_KEY || '', + // The cloud account identifier on the SaaS platform (leave empty for auto-detection) + account_id: process.env.KHULNASOFT_SAAS_ACCOUNT_ID || '', + // Override default SaaS API endpoint URL (defaults to https://cloud.khulnasoft.com/api/v1/sync) + url: process.env.KHULNASOFT_SAAS_URL || 'https://cloud.khulnasoft.com/api/v1/sync' } }; \ No newline at end of file diff --git a/engine.js b/engine.js index 01c5f912f..f60f9c335 100644 --- a/engine.js +++ b/engine.js @@ -129,15 +129,19 @@ var engine = function(cloudConfig, settings) { if (skip) { skippedPlugins.push(pluginId); } else { - plugin.apis.forEach(function(api) { - if (apiCalls.indexOf(api) === -1) apiCalls.push(api); - }); - // add the remediation api calls also for data to be collected - if (settings.remediate && settings.remediate.includes(pluginId)){ - plugin.apis_remediate.forEach(function(api) { + if (plugin.apis && Array.isArray(plugin.apis)) { + plugin.apis.forEach(function(api) { if (apiCalls.indexOf(api) === -1) apiCalls.push(api); }); } + // add the remediation api calls also for data to be collected + if (settings.remediate && settings.remediate.includes(pluginId)){ + if (plugin.apis_remediate && Array.isArray(plugin.apis_remediate)) { + plugin.apis_remediate.forEach(function(api) { + if (apiCalls.indexOf(api) === -1) apiCalls.push(api); + }); + } + } } }); @@ -169,7 +173,12 @@ var engine = function(cloudConfig, settings) { api_calls: apiCalls, paginate: settings.skip_paginate, govcloud: settings.govcloud, - china: settings.china + china: settings.china, + identifier: settings.identifier, + integration: settings.integration, + lastScanId: settings.lastScanId, + scanTriggeredFromEventsFlow: settings.scanTriggeredFromEventsFlow, + previousCollection: settings.previousCollection }, function(err, collection) { if (err || !collection || !Object.keys(collection).length) return console.log(`ERROR: Unable to obtain API metadata: ${err || 'No data returned'}`); outputHandler.writeCollection(collection, settings.cloud); diff --git a/exports.js b/exports.js index 261e4485f..af8a2fe84 100644 --- a/exports.js +++ b/exports.js @@ -1,1772 +1,1779 @@ // Export all available scans module.exports = { - aws : { - 'accessAnalyzerEnabled' : require(__dirname + '/plugins/aws/accessanalyzer/accessAnalyzerEnabled.js'), - 'accessAnalyzerActiveFindings' : require(__dirname + '/plugins/aws/accessanalyzer/accessAnalyzerActiveFindings.js'), + aws: { + 'accessAnalyzerEnabled': require(__dirname + '/plugins/aws/accessanalyzer/accessAnalyzerEnabled.js'), + 'accessAnalyzerActiveFindings': require(__dirname + '/plugins/aws/accessanalyzer/accessAnalyzerActiveFindings.js'), - 'acmValidation' : require(__dirname + '/plugins/aws/acm/acmValidation.js'), - 'acmCertificateExpiry' : require(__dirname + '/plugins/aws/acm/acmCertificateExpiry.js'), + 'acmValidation': require(__dirname + '/plugins/aws/acm/acmValidation.js'), + 'acmCertificateExpiry': require(__dirname + '/plugins/aws/acm/acmCertificateExpiry.js'), 'acmSingleDomainNameCertificate': require(__dirname + '/plugins/aws/acm/acmSingleDomainNameCertificate.js'), - 'acmCertificateHasTags' : require(__dirname + '/plugins/aws/acm/acmCertificateHasTags.js'), - - 'appmeshVGAccessLogging' : require(__dirname + '/plugins/aws/appmesh/appmeshVGAccessLogging.js'), - - 'apigatewayCertificateRotation' : require(__dirname + '/plugins/aws/apigateway/apigatewayCertificateRotation.js'), - 'apigatewayCloudwatchLogs' : require(__dirname + '/plugins/aws/apigateway/apigatewayCloudwatchLogs.js'), - 'apigatewayPrivateEndpoints' : require(__dirname + '/plugins/aws/apigateway/apigatewayPrivateEndpoints.js'), - 'apigatewayContentEncoding' : require(__dirname + '/plugins/aws/apigateway/apigatewayContentEncoding.js'), - 'apigatewayTracingEnabled' : require(__dirname + '/plugins/aws/apigateway/apigatewayTracingEnabled.js'), - 'apigatewayWafEnabled' : require(__dirname + '/plugins/aws/apigateway/apigatewayWafEnabled.js'), - 'detailedCloudWatchMetrics' : require(__dirname + '/plugins/aws/apigateway/detailedCloudWatchMetrics.js'), - 'apigatewayClientCertificate' : require(__dirname + '/plugins/aws/apigateway/apigatewayClientCertificate.js'), - 'apigatewayResponseCaching' : require(__dirname + '/plugins/aws/apigateway/apigatewayResponseCaching.js'), - 'apiStageLevelCacheEncryption' : require(__dirname + '/plugins/aws/apigateway/apiStageLevelCacheEncryption.js'), - 'customDomainTlsVersion' : require(__dirname + '/plugins/aws/apigateway/customDomainTlsVersion.js'), - 'apigatewayDefaultEndpointDisabled' : require(__dirname + '/plugins/aws/apigateway/apigatewayDefaultEndpointDisabled.js'), - 'apigatewayAuthorization' : require(__dirname + '/plugins/aws/apigateway/apigatewayAuthorization.js'), - 'apigatewayV2Authorization' : require(__dirname + '/plugins/aws/apigateway/apigatewayV2Authorization.js'), - 'apigatewayV2AccessLogging' : require(__dirname + '/plugins/aws/apigateway/apigatewayV2AccessLogging.js'), - 'apigatewayRequestValidation' : require(__dirname + '/plugins/aws/apigateway/apigatewayRequestValidation.js'), - - 'restrictExternalTraffic' : require(__dirname + '/plugins/aws/appmesh/restrictExternalTraffic.js'), - 'appmeshTLSRequired' : require(__dirname + '/plugins/aws/appmesh/appmeshTLSRequired.js'), - 'appmeshVGHealthChecks' : require(__dirname + '/plugins/aws/appmesh/appmeshVGHealthChecks.js'), - - - 'asgMultiAz' : require(__dirname + '/plugins/aws/autoscaling/asgMultiAz.js'), - 'asgActiveNotifications' : require(__dirname + '/plugins/aws/autoscaling/asgActiveNotifications.js'), - 'asgCooldownPeriod' : require(__dirname + '/plugins/aws/autoscaling/asgCooldownPeriod.js'), - 'emptyASG' : require(__dirname + '/plugins/aws/autoscaling/emptyASG.js'), - 'sameAzElb' : require(__dirname + '/plugins/aws/autoscaling/sameAzElb.js'), - 'asgMissingELB' : require(__dirname + '/plugins/aws/autoscaling/asgMissingELB.js'), - 'webTierAsgAssociatedElb' : require(__dirname + '/plugins/aws/autoscaling/webTierAsgAssociatedElb.js'), - 'elbHealthCheckActive' : require(__dirname + '/plugins/aws/autoscaling/elbHealthCheckActive.js'), - 'asgSuspendedProcesses' : require(__dirname + '/plugins/aws/autoscaling/asgSuspendedProcesses.js'), - 'appTierAsgApprovedAmi' : require(__dirname + '/plugins/aws/autoscaling/appTierAsgApprovedAmi.js'), - 'webTierAsgApprovedAmi' : require(__dirname + '/plugins/aws/autoscaling/webTierAsgApprovedAmi.js'), - 'appTierAsgCloudwatchLogs' : require(__dirname + '/plugins/aws/autoscaling/appTierAsgCloudwatchLogs.js'), - 'webTierAsgCloudwatchLogs' : require(__dirname + '/plugins/aws/autoscaling/webTierAsgCloudwatchLogs.js'), - 'asgMissingSecurityGroups' : require(__dirname + '/plugins/aws/autoscaling/asgMissingSecurityGroups.js'), - 'webTierIamRole' : require(__dirname + '/plugins/aws/autoscaling/webTierIamRole.js'), - 'appTierIamRole' : require(__dirname + '/plugins/aws/autoscaling/appTierIamRole.js'), - 'asgUnusedLaunchConfiguration' : require(__dirname + '/plugins/aws/autoscaling/asgUnusedLaunchConfiguration.js'), - 'asgTagPropagation' : require(__dirname + '/plugins/aws/autoscaling/asgTagPropagation.js'), - - 'workgroupEncrypted' : require(__dirname + '/plugins/aws/athena/workgroupEncrypted.js'), - 'workgroupEnforceConfiguration' : require(__dirname + '/plugins/aws/athena/workgroupEnforceConfiguration.js'), - - 'customModelInVpc' :require(__dirname + '/plugins/aws/bedrock/customModelInVpc.js'), - 'bedrockInUse' :require(__dirname + '/plugins/aws/bedrock/bedrockInUse.js'), - 'privateCustomModel' :require(__dirname + '/plugins/aws/bedrock/privateCustomModel.js'), - 'customModelHasTags' :require(__dirname + '/plugins/aws/bedrock/customModelHasTags.js'), - 'modelInvocationLoggingEnabled' :require(__dirname + '/plugins/aws/bedrock/modelInvocationLoggingEnabled.js'), - 'customModelEncrypted' :require(__dirname + '/plugins/aws/bedrock/customModelEncryptionEnabled.js'), + 'acmCertificateHasTags': require(__dirname + '/plugins/aws/acm/acmCertificateHasTags.js'), + + 'appmeshVGAccessLogging': require(__dirname + '/plugins/aws/appmesh/appmeshVGAccessLogging.js'), + + 'apigatewayCertificateRotation': require(__dirname + '/plugins/aws/apigateway/apigatewayCertificateRotation.js'), + 'apigatewayCloudwatchLogs': require(__dirname + '/plugins/aws/apigateway/apigatewayCloudwatchLogs.js'), + 'apigatewayPrivateEndpoints': require(__dirname + '/plugins/aws/apigateway/apigatewayPrivateEndpoints.js'), + 'apigatewayContentEncoding': require(__dirname + '/plugins/aws/apigateway/apigatewayContentEncoding.js'), + 'apigatewayTracingEnabled': require(__dirname + '/plugins/aws/apigateway/apigatewayTracingEnabled.js'), + 'apigatewayWafEnabled': require(__dirname + '/plugins/aws/apigateway/apigatewayWafEnabled.js'), + 'detailedCloudWatchMetrics': require(__dirname + '/plugins/aws/apigateway/detailedCloudWatchMetrics.js'), + 'apigatewayClientCertificate': require(__dirname + '/plugins/aws/apigateway/apigatewayClientCertificate.js'), + 'apigatewayResponseCaching': require(__dirname + '/plugins/aws/apigateway/apigatewayResponseCaching.js'), + 'apiStageLevelCacheEncryption': require(__dirname + '/plugins/aws/apigateway/apiStageLevelCacheEncryption.js'), + 'customDomainTlsVersion': require(__dirname + '/plugins/aws/apigateway/customDomainTlsVersion.js'), + 'apigatewayDefaultEndpointDisabled': require(__dirname + '/plugins/aws/apigateway/apigatewayDefaultEndpointDisabled.js'), + 'apigatewayAuthorization': require(__dirname + '/plugins/aws/apigateway/apigatewayAuthorization.js'), + 'apigatewayV2Authorization': require(__dirname + '/plugins/aws/apigateway/apigatewayV2Authorization.js'), + 'apigatewayV2AccessLogging': require(__dirname + '/plugins/aws/apigateway/apigatewayV2AccessLogging.js'), + 'apigatewayRequestValidation': require(__dirname + '/plugins/aws/apigateway/apigatewayRequestValidation.js'), + + 'restrictExternalTraffic': require(__dirname + '/plugins/aws/appmesh/restrictExternalTraffic.js'), + 'appmeshTLSRequired': require(__dirname + '/plugins/aws/appmesh/appmeshTLSRequired.js'), + 'appmeshVGHealthChecks': require(__dirname + '/plugins/aws/appmesh/appmeshVGHealthChecks.js'), + + + 'asgMultiAz': require(__dirname + '/plugins/aws/autoscaling/asgMultiAz.js'), + 'asgActiveNotifications': require(__dirname + '/plugins/aws/autoscaling/asgActiveNotifications.js'), + 'asgCooldownPeriod': require(__dirname + '/plugins/aws/autoscaling/asgCooldownPeriod.js'), + 'emptyASG': require(__dirname + '/plugins/aws/autoscaling/emptyASG.js'), + 'sameAzElb': require(__dirname + '/plugins/aws/autoscaling/sameAzElb.js'), + 'asgMissingELB': require(__dirname + '/plugins/aws/autoscaling/asgMissingELB.js'), + 'webTierAsgAssociatedElb': require(__dirname + '/plugins/aws/autoscaling/webTierAsgAssociatedElb.js'), + 'elbHealthCheckActive': require(__dirname + '/plugins/aws/autoscaling/elbHealthCheckActive.js'), + 'asgSuspendedProcesses': require(__dirname + '/plugins/aws/autoscaling/asgSuspendedProcesses.js'), + 'appTierAsgApprovedAmi': require(__dirname + '/plugins/aws/autoscaling/appTierAsgApprovedAmi.js'), + 'webTierAsgApprovedAmi': require(__dirname + '/plugins/aws/autoscaling/webTierAsgApprovedAmi.js'), + 'appTierAsgCloudwatchLogs': require(__dirname + '/plugins/aws/autoscaling/appTierAsgCloudwatchLogs.js'), + 'webTierAsgCloudwatchLogs': require(__dirname + '/plugins/aws/autoscaling/webTierAsgCloudwatchLogs.js'), + 'asgMissingSecurityGroups': require(__dirname + '/plugins/aws/autoscaling/asgMissingSecurityGroups.js'), + 'webTierIamRole': require(__dirname + '/plugins/aws/autoscaling/webTierIamRole.js'), + 'appTierIamRole': require(__dirname + '/plugins/aws/autoscaling/appTierIamRole.js'), + 'asgUnusedLaunchConfiguration': require(__dirname + '/plugins/aws/autoscaling/asgUnusedLaunchConfiguration.js'), + 'asgTagPropagation': require(__dirname + '/plugins/aws/autoscaling/asgTagPropagation.js'), + + 'workgroupEncrypted': require(__dirname + '/plugins/aws/athena/workgroupEncrypted.js'), + 'workgroupEnforceConfiguration': require(__dirname + '/plugins/aws/athena/workgroupEnforceConfiguration.js'), + + 'customModelInVpc': require(__dirname + '/plugins/aws/bedrock/customModelInVpc.js'), + 'bedrockInUse': require(__dirname + '/plugins/aws/bedrock/bedrockInUse.js'), + 'privateCustomModel': require(__dirname + '/plugins/aws/bedrock/privateCustomModel.js'), + 'customModelHasTags': require(__dirname + '/plugins/aws/bedrock/customModelHasTags.js'), + 'modelInvocationLoggingEnabled': require(__dirname + '/plugins/aws/bedrock/modelInvocationLoggingEnabled.js'), + 'customModelEncrypted': require(__dirname + '/plugins/aws/bedrock/customModelEncryptionEnabled.js'), 'infraConfigNotificationEnabled': require(__dirname + '/plugins/aws/imagebuilder/infraConfigNotificationEnabled.js'), - 'publicS3Origin' : require(__dirname + '/plugins/aws/cloudfront/publicS3Origin.js'), - 'secureOrigin' : require(__dirname + '/plugins/aws/cloudfront/secureOrigin.js'), - 'insecureProtocols' : require(__dirname + '/plugins/aws/cloudfront/insecureProtocols.js'), - 'cloudfrontHttpsOnly' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontHttpsOnly.js'), - 'cloudfrontLoggingEnabled' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontLoggingEnabled.js'), - 'cloudfrontWafEnabled' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontWafEnabled.js'), + 'publicS3Origin': require(__dirname + '/plugins/aws/cloudfront/publicS3Origin.js'), + 'secureOrigin': require(__dirname + '/plugins/aws/cloudfront/secureOrigin.js'), + 'insecureProtocols': require(__dirname + '/plugins/aws/cloudfront/insecureProtocols.js'), + 'cloudfrontHttpsOnly': require(__dirname + '/plugins/aws/cloudfront/cloudfrontHttpsOnly.js'), + 'cloudfrontLoggingEnabled': require(__dirname + '/plugins/aws/cloudfront/cloudfrontLoggingEnabled.js'), + 'cloudfrontWafEnabled': require(__dirname + '/plugins/aws/cloudfront/cloudfrontWafEnabled.js'), 'cloudfrontFieldLevelEncryption': require(__dirname + '/plugins/aws/cloudfront/cloudfrontFieldLevelEncryption.js'), - 'cloudfrontInUse' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontInUse.js'), - 'enableOriginFailOver' : require(__dirname + '/plugins/aws/cloudfront/enableOriginFailOver.js'), - 'cloudfrontGeoRestriction' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontGeoRestriction.js'), - 'compressObjectsAutomatically' : require(__dirname + '/plugins/aws/cloudfront/compressObjectsAutomatically.js'), - 'cloudfrontOriginTlsVersion' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontOriginTlsVersion'), - 'cloudfrontCustomOriginHttpsOnly' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontCustomOriginHttpsOnly.js'), - 'cloudfrontTlsInsecureCipher' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontTlsInsecureCipher.js'), - 'cloudfrontTlsDeprecatedProtocols' : require(__dirname + '/plugins/aws/cloudfront/cloudfrontTlsDeprecatedProtocols.js'), - - 'volumeEncryption' : require(__dirname + '/plugins/aws/comprehend/volumeEncryption.js'), - 'flywheelInVpc' : require(__dirname + '/plugins/aws/comprehend/flywheelInVpc.js'), - 'outputResultEncryption' : require(__dirname + '/plugins/aws/comprehend/outputResultEncryption.js'), - - 'plainTextParameters' : require(__dirname + '/plugins/aws/cloudformation/plainTextParameters.js'), - 'stackFailedStatus' : require(__dirname + '/plugins/aws/cloudformation/stackFailedStatus.js'), - 'cloudformationDeletionPolicy' : require(__dirname + '/plugins/aws/cloudformation/cloudformationDeletionPolicy.js'), - 'driftDetection' : require(__dirname + '/plugins/aws/cloudformation/driftDetection.js'), - 'stackTerminationProtection' : require(__dirname + '/plugins/aws/cloudformation/stackTerminationProtection.js'), - 'stackNotifications' : require(__dirname + '/plugins/aws/cloudformation/stackNotifications.js'), - 'cloudformationAdminPriviliges' : require(__dirname + '/plugins/aws/cloudformation/cloudformationAdminPriviliges.js'), - 'cloudformationInUse' : require(__dirname + '/plugins/aws/cloudformation/cloudformationInUse.js'), - - 'cloudtrailBucketAccessLogging' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailBucketAccessLogging.js'), - 'cloudtrailBucketDelete' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailBucketDelete.js'), - 'cloudtrailDataEvents' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailDataEvents.js'), - 'cloudtrailEnabled' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailEnabled.js'), - 'cloudtrailEncryption' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailEncryption.js'), - 'cloudtrailFileValidation' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailFileValidation.js'), - 'cloudtrailObjectLock' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailObjectLock.js'), - 'cloudtrailToCloudwatch' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailToCloudwatch.js'), - 'cloudtrailBucketPrivate' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailBucketPrivate.js'), - 'cloudtrailDeliveryFailing' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailDeliveryFailing.js'), - 'cloudtrailManagementEvents' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailManagementEvents.js'), - 'cloudtrailS3Bucket' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailS3Bucket.js'), - 'globalLoggingDuplicated' : require(__dirname + '/plugins/aws/cloudtrail/globalLoggingDuplicated.js'), + 'cloudfrontInUse': require(__dirname + '/plugins/aws/cloudfront/cloudfrontInUse.js'), + 'enableOriginFailOver': require(__dirname + '/plugins/aws/cloudfront/enableOriginFailOver.js'), + 'cloudfrontGeoRestriction': require(__dirname + '/plugins/aws/cloudfront/cloudfrontGeoRestriction.js'), + 'compressObjectsAutomatically': require(__dirname + '/plugins/aws/cloudfront/compressObjectsAutomatically.js'), + 'cloudfrontOriginTlsVersion': require(__dirname + '/plugins/aws/cloudfront/cloudfrontOriginTlsVersion'), + 'cloudfrontCustomOriginHttpsOnly': require(__dirname + '/plugins/aws/cloudfront/cloudfrontCustomOriginHttpsOnly.js'), + 'cloudfrontTlsInsecureCipher': require(__dirname + '/plugins/aws/cloudfront/cloudfrontTlsInsecureCipher.js'), + 'cloudfrontTlsDeprecatedProtocols': require(__dirname + '/plugins/aws/cloudfront/cloudfrontTlsDeprecatedProtocols.js'), + + 'volumeEncryption': require(__dirname + '/plugins/aws/comprehend/volumeEncryption.js'), + 'flywheelInVpc': require(__dirname + '/plugins/aws/comprehend/flywheelInVpc.js'), + 'outputResultEncryption': require(__dirname + '/plugins/aws/comprehend/outputResultEncryption.js'), + + 'plainTextParameters': require(__dirname + '/plugins/aws/cloudformation/plainTextParameters.js'), + 'stackFailedStatus': require(__dirname + '/plugins/aws/cloudformation/stackFailedStatus.js'), + 'cloudformationDeletionPolicy': require(__dirname + '/plugins/aws/cloudformation/cloudformationDeletionPolicy.js'), + 'driftDetection': require(__dirname + '/plugins/aws/cloudformation/driftDetection.js'), + 'stackTerminationProtection': require(__dirname + '/plugins/aws/cloudformation/stackTerminationProtection.js'), + 'stackNotifications': require(__dirname + '/plugins/aws/cloudformation/stackNotifications.js'), + 'cloudformationAdminPriviliges': require(__dirname + '/plugins/aws/cloudformation/cloudformationAdminPriviliges.js'), + 'cloudformationInUse': require(__dirname + '/plugins/aws/cloudformation/cloudformationInUse.js'), + + 'cloudtrailBucketAccessLogging': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailBucketAccessLogging.js'), + 'cloudtrailBucketDelete': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailBucketDelete.js'), + 'cloudtrailDataEvents': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailDataEvents.js'), + 'cloudtrailEnabled': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailEnabled.js'), + 'cloudtrailEncryption': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailEncryption.js'), + 'cloudtrailFileValidation': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailFileValidation.js'), + 'cloudtrailObjectLock': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailObjectLock.js'), + 'cloudtrailToCloudwatch': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailToCloudwatch.js'), + 'cloudtrailBucketPrivate': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailBucketPrivate.js'), + 'cloudtrailDeliveryFailing': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailDeliveryFailing.js'), + 'cloudtrailManagementEvents': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailManagementEvents.js'), + 'cloudtrailS3Bucket': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailS3Bucket.js'), + 'globalLoggingDuplicated': require(__dirname + '/plugins/aws/cloudtrail/globalLoggingDuplicated.js'), 'cloudtrailNotificationsEnabled': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailNotificationsEnabled.js'), - 'cloudtrailHasTags' : require(__dirname + '/plugins/aws/cloudtrail/cloudtrailHasTags.js'), + 'cloudtrailHasTags': require(__dirname + '/plugins/aws/cloudtrail/cloudtrailHasTags.js'), - 'ec2InstancesOptimized' : require(__dirname + '/plugins/aws/computeoptimizer/ec2InstancesOptimized.js'), - 'lambdaFunctionsOptimized' : require(__dirname + '/plugins/aws/computeoptimizer/lambdaFunctionsOptimized.js'), + 'ec2InstancesOptimized': require(__dirname + '/plugins/aws/computeoptimizer/ec2InstancesOptimized.js'), + 'lambdaFunctionsOptimized': require(__dirname + '/plugins/aws/computeoptimizer/lambdaFunctionsOptimized.js'), 'optimizerRecommendationsEnabled': require(__dirname + '/plugins/aws/computeoptimizer/optimizerRecommendationsEnabled.js'), - 'ebsVolumesOptimized' : require(__dirname + '/plugins/aws/computeoptimizer/ebsVolumesOptimized.js'), - 'asgOptimized' : require(__dirname + '/plugins/aws/computeoptimizer/asgOptimized.js'), + 'ebsVolumesOptimized': require(__dirname + '/plugins/aws/computeoptimizer/ebsVolumesOptimized.js'), + 'asgOptimized': require(__dirname + '/plugins/aws/computeoptimizer/asgOptimized.js'), - 'configServiceEnabled' : require(__dirname + '/plugins/aws/configservice/configServiceEnabled.js'), - 'configComplaintRules' : require(__dirname + '/plugins/aws/configservice/configComplaintRules.js'), - 'configDeliveryFailing' : require(__dirname + '/plugins/aws/configservice/configDeliveryFailing.js'), - 'configServiceMissingBucket' : require(__dirname + '/plugins/aws/configservice/configServiceMissingBucket.js'), - 'servicesInUse' : require(__dirname + '/plugins/aws/configservice/servicesInUse.js'), + 'configServiceEnabled': require(__dirname + '/plugins/aws/configservice/configServiceEnabled.js'), + 'configComplaintRules': require(__dirname + '/plugins/aws/configservice/configComplaintRules.js'), + 'configDeliveryFailing': require(__dirname + '/plugins/aws/configservice/configDeliveryFailing.js'), + 'configServiceMissingBucket': require(__dirname + '/plugins/aws/configservice/configServiceMissingBucket.js'), + 'servicesInUse': require(__dirname + '/plugins/aws/configservice/servicesInUse.js'), - 'devOpsGuruNotificationEnabled' : require(__dirname + '/plugins/aws/devopsguru/devOpsGuruNotificationEnabled.js'), + 'devOpsGuruNotificationEnabled': require(__dirname + '/plugins/aws/devopsguru/devOpsGuruNotificationEnabled.js'), - 'dmsEncryptionEnabled' : require(__dirname + '/plugins/aws/dms/dmsEncryptionEnabled.js'), + 'dmsEncryptionEnabled': require(__dirname + '/plugins/aws/dms/dmsEncryptionEnabled.js'), 'dmsPubliclyAccessibleInstances': require(__dirname + '/plugins/aws/dms/dmsPubliclyAccessibleInstances.js'), - 'dmsMultiAZFeatureEnabled' : require(__dirname + '/plugins/aws/dms/dmsMultiAZFeatureEnabled.js'), - 'autoMinorVersionUpgrade' : require(__dirname + '/plugins/aws/dms/autoMinorVersionUpgrade.js'), - - 'dynamoKmsEncryption' : require(__dirname + '/plugins/aws/dynamodb/dynamoKmsEncryption.js'), - 'daxClusterEncryption' : require(__dirname + '/plugins/aws/dynamodb/daxClusterEncryption.js'), - 'dynamoDeletionProtection' : require(__dirname + '/plugins/aws/dynamodb/dynamoDeletionProtection.js'), - 'dynamoContinuousBackups' : require(__dirname + '/plugins/aws/dynamodb/dynamoContinuousBackups.js'), - 'dynamoTableBackupExists' : require(__dirname + '/plugins/aws/dynamodb/dynamoTableBackupExists.js'), - 'dynamoTableHasTags' : require(__dirname + '/plugins/aws/dynamodb/dynamoTableHasTags.js'), - 'dynamoUnusedTable' : require(__dirname + '/plugins/aws/dynamodb/dynamoUnusedTable.js'), - - 'enhancedMetadataEnabled' : require(__dirname + '/plugins/aws/imagebuilder/enhancedMetadataEnabled.js'), - - 'instanceLimit' : require(__dirname + '/plugins/aws/ec2/instanceLimit.js'), - 'instanceVcpusLimit' : require(__dirname + '/plugins/aws/ec2/instanceVcpusLimit.js'), - 'instanceMaxCount' : require(__dirname + '/plugins/aws/ec2/instanceMaxCount.js'), - 'instanceKeyBasedLogin' : require(__dirname + '/plugins/aws/ec2/instanceKeyBasedLogin.js'), - 'openAllPortsProtocols' : require(__dirname + '/plugins/aws/ec2/openAllPortsProtocols.js'), - 'openCIFS' : require(__dirname + '/plugins/aws/ec2/openCIFS.js'), - 'openCustomPorts' : require(__dirname + '/plugins/aws/ec2/openCustomPorts.js'), - 'openDNS' : require(__dirname + '/plugins/aws/ec2/openDNS.js'), - 'openDocker' : require(__dirname + '/plugins/aws/ec2/openDocker.js'), - 'openFTP' : require(__dirname + '/plugins/aws/ec2/openFTP.js'), - 'openHadoopNameNode' : require(__dirname + '/plugins/aws/ec2/openHadoopNameNode.js'), - 'openHadoopNameNodeWebUI' : require(__dirname + '/plugins/aws/ec2/openHadoopNameNodeWebUI.js'), - 'openOracleAutoDataWarehouse' : require(__dirname + '/plugins/aws/ec2/openOracleAutoDataWarehouse.js'), - 'openKibana' : require(__dirname + '/plugins/aws/ec2/openKibana.js'), - 'openMySQL' : require(__dirname + '/plugins/aws/ec2/openMySQL.js'), - 'openOracle' : require(__dirname + '/plugins/aws/ec2/openOracle.js'), - 'openNetBIOS' : require(__dirname + '/plugins/aws/ec2/openNetBIOS.js'), - 'openPostgreSQL' : require(__dirname + '/plugins/aws/ec2/openPostgreSQL.js'), - 'openRDP' : require(__dirname + '/plugins/aws/ec2/openRDP.js'), - 'openRPC' : require(__dirname + '/plugins/aws/ec2/openRPC.js'), - 'openSalt' : require(__dirname + '/plugins/aws/ec2/openSalt.js'), - 'openSMBoTCP' : require(__dirname + '/plugins/aws/ec2/openSMBoTCP.js'), - 'openSMTP' : require(__dirname + '/plugins/aws/ec2/openSMTP.js'), - 'openSQLServer' : require(__dirname + '/plugins/aws/ec2/openSQLServer.js'), - 'openSSH' : require(__dirname + '/plugins/aws/ec2/openSSH.js'), - 'openTelnet' : require(__dirname + '/plugins/aws/ec2/openTelnet.js'), - 'openVNCClient' : require(__dirname + '/plugins/aws/ec2/openVNCClient.js'), - 'openVNCServer' : require(__dirname + '/plugins/aws/ec2/openVNCServer.js'), - 'openElasticsearch' : require(__dirname + '/plugins/aws/ec2/openElasticsearch.js'), - 'openMongoDB' : require(__dirname + '/plugins/aws/ec2/openMongoDB.js'), - 'openCassandraClient' : require(__dirname + '/plugins/aws/ec2/openCassandraClient.js'), - 'openCassandraInternode' : require(__dirname + '/plugins/aws/ec2/openCassandraInternode.js'), - 'openCassandraMonitoring' : require(__dirname + '/plugins/aws/ec2/openCassandraMonitoring.js'), - 'openCassandraThrift' : require(__dirname + '/plugins/aws/ec2/openCassandraThrift.js'), - 'openLDAP' : require(__dirname + '/plugins/aws/ec2/openLDAP.js'), - 'openLDAPS' : require(__dirname + '/plugins/aws/ec2/openLDAPS.js'), - 'openSNMP' : require(__dirname + '/plugins/aws/ec2/openSNMP.js'), - 'openMemcached' : require(__dirname + '/plugins/aws/ec2/openMemcached.js'), - 'openInternalWeb' : require(__dirname + '/plugins/aws/ec2/openInternalWeb.js'), - 'openRedis' : require(__dirname + '/plugins/aws/ec2/openRedis.js'), - 'openHTTP' : require(__dirname + '/plugins/aws/ec2/openHTTP.js'), - 'openHTTPS' : require(__dirname + '/plugins/aws/ec2/openHTTPS.js'), - 'vpcElasticIpLimit' : require(__dirname + '/plugins/aws/ec2/vpcElasticIpLimit.js'), - 'classicInstances' : require(__dirname + '/plugins/aws/ec2/classicInstances.js'), - 'flowLogsEnabled' : require(__dirname + '/plugins/aws/ec2/flowLogsEnabled.js'), - 'vpcMultipleSubnets' : require(__dirname + '/plugins/aws/ec2/multipleSubnets.js'), - 'overlappingSecurityGroups' : require(__dirname + '/plugins/aws/ec2/overlappingSecurityGroups.js'), - 'publicAmi' : require(__dirname + '/plugins/aws/ec2/publicAmi.js'), - 'encryptedAmi' : require(__dirname + '/plugins/aws/ec2/encryptedAmi.js'), - 'amiHasTags' : require(__dirname + '/plugins/aws/ec2/amiHasTags.js'), - 'amiNamingConvention' : require(__dirname + '/plugins/aws/ec2/amiNamingConvention.js'), - 'oldAmi' : require(__dirname + '/plugins/aws/ec2/oldAmi.js'), - 'instanceIamRole' : require(__dirname + '/plugins/aws/ec2/instanceIamRole.js'), - 'ebsBackupEnabled' : require(__dirname + '/plugins/aws/ec2/ebsBackupEnabled.js'), - 'ebsEncryptionEnabled' : require(__dirname + '/plugins/aws/ec2/ebsEncryptionEnabled.js'), - 'ebsSnapshotLifecycle' : require(__dirname + '/plugins/aws/ec2/ebsSnapshotLifecycle.js'), - 'ebsOldSnapshots' : require(__dirname + '/plugins/aws/ec2/ebsOldSnapshots.js'), - 'ebsRecentSnapshots' : require(__dirname + '/plugins/aws/ec2/ebsRecentSnapshots.js'), - 'ebsSnapshotPrivate' : require(__dirname + '/plugins/aws/ec2/ebsSnapshotPrivate.js'), - 'ebsSnapshotPublic' : require(__dirname + '/plugins/aws/ec2/ebsSnapshotPublic.js'), - 'unusedSecurityGroups' : require(__dirname + '/plugins/aws/ec2/unusedSecurityGroups.js'), - 'natMultiAz' : require(__dirname + '/plugins/aws/ec2/natMultiAz.js'), - 'defaultVpcInUse' : require(__dirname + '/plugins/aws/ec2/defaultVpcInUse.js'), - 'defaultVpcExists' : require(__dirname + '/plugins/aws/ec2/defaultVpcExists.js'), - 'crossVpcPublicPrivate' : require(__dirname + '/plugins/aws/ec2/crossVpcPublicPrivate.js'), - 'vpcEndpointAcceptance' : require(__dirname + '/plugins/aws/ec2/vpcEndpointAcceptance'), - 'vpcEndpointExposed' : require(__dirname + '/plugins/aws/ec2/vpcEndpointExposed.js'), - 'vpcEndpointCrossAccount' : require(__dirname + '/plugins/aws/ec2/vpcEndpointCrossAccount.js'), - 'vpcPeeringConnections' : require(__dirname + '/plugins/aws/ec2/vpcPeeringConnections.js'), - 'ebsEncryptedSnapshots' : require(__dirname + '/plugins/aws/ec2/ebsEncryptedSnapshots.js'), - 'ebsDefaultEncryptionEnabled' : require(__dirname + '/plugins/aws/ec2/ebsDefaultEncryptionEnabled.js'), - 'ec2MetadataOptions' : require(__dirname + '/plugins/aws/ec2/ec2MetadataOptions.js'), - 'overutilizedEC2Instance' : require(__dirname + '/plugins/aws/ec2/overutilizedEC2Instance.js'), - - 'unusedEni' : require(__dirname + '/plugins/aws/ec2/unusedEni.js'), - 'unusedAmi' : require(__dirname + '/plugins/aws/ec2/unusedAmi.js'), - 'unusedVpcInternetGateways' : require(__dirname + '/plugins/aws/ec2/unusedVpcInternetGateways.js'), - 'managedNatGateway' : require(__dirname + '/plugins/aws/ec2/managedNatGateway.js'), - 'allowedCustomPorts' : require(__dirname + '/plugins/aws/ec2/allowedCustomPorts.js'), - 'ebsUnusedVolumes' : require(__dirname + '/plugins/aws/ec2/ebsUnusedVolumes.js'), - 'publicIpAddress' : require(__dirname + '/plugins/aws/ec2/publicIpAddress.js'), - 'unusedVirtualPrivateGateway' : require(__dirname + '/plugins/aws/ec2/unusedVirtualPrivateGateway.js'), - 'vpcSubnetInstancesPresent' : require(__dirname + '/plugins/aws/ec2/vpcSubnetInstancesPresent.js'), - 'webTierInstanceIamRole' : require(__dirname + '/plugins/aws/ec2/webTierInstanceIamRole.js'), - 'vpnTunnelState' : require(__dirname + '/plugins/aws/ec2/vpnTunnelState.js'), - 'networkAclOutboundTraffic' : require(__dirname + '/plugins/aws/ec2/networkAclOutboundTraffic.js'), - 'networkAclInboundTraffic' : require(__dirname + '/plugins/aws/ec2/networkAclInboundTraffic.js'), - 'outdatedAmiInUse' : require(__dirname + '/plugins/aws/ec2/outdatedAmiInUse.js'), - 'appTierInstanceIamRole' : require(__dirname + '/plugins/aws/ec2/appTierInstanceIamRole.js'), - 'defaultSecurityGroup' : require(__dirname + '/plugins/aws/ec2/defaultSecurityGroup.js'), - 'launchWizardSecurityGroups' : require(__dirname + '/plugins/aws/ec2/launchWizardSecurityGroups'), - 'securityGroupRfc1918' : require(__dirname + '/plugins/aws/ec2/securityGroupRfc1918.js'), - 'elasticIpLimit' : require(__dirname + '/plugins/aws/ec2/elasticIpLimit.js'), - 'unassociatedElasticIp' : require(__dirname + '/plugins/aws/ec2/unassociatedElasticIp.js'), - 'subnetIpAvailability' : require(__dirname + '/plugins/aws/ec2/subnetIpAvailability.js'), - 'excessiveSecurityGroups' : require(__dirname + '/plugins/aws/ec2/excessiveSecurityGroups.js'), - 'vpnGatewayInVpc' : require(__dirname + '/plugins/aws/ec2/vpnGatewayInVpc.js'), - 'internetGatewayInVpc' : require(__dirname + '/plugins/aws/ec2/internetGatewayInVpc.js'), - 'enableDetailedMonitoring' : require(__dirname + '/plugins/aws/ec2/enableDetailedMonitoring.js'), - 'ec2HasTags' : require(__dirname + '/plugins/aws/ec2/ec2HasTags.js'), - 'securityGroupHasTags' : require(__dirname + '/plugins/aws/ec2/securityGroupsHasTags.js'), - 'vpcHasTags' : require(__dirname + '/plugins/aws/ec2/vpcHasTags'), - 'ebsSnapshotHasTags' : require(__dirname + '/plugins/aws/ec2/ebsSnapshotHasTags.js'), - 'networkAclHasTags' : require(__dirname + '/plugins/aws/ec2/networkAclHasTags.js'), - 'ebsVolumeHasTags' : require(__dirname + '/plugins/aws/ec2/ebsVolumeHasTags.js'), - 'openAllPortsProtocolsEgress' : require(__dirname + '/plugins/aws/ec2/openAllPortsProtocolsEgress.js'), - 'defaultSecurityGroupInUse' : require(__dirname + '/plugins/aws/ec2/defaultSecurityGroupInUse.js'), - 'ec2NetworkExposure' : require(__dirname + '/plugins/aws/ec2/ec2NetworkExposure.js'), - 'ec2PrivilegeAnalysis' : require(__dirname + '/plugins/aws/ec2/ec2PrivilegeAnalysis.js'), - - - 'efsCmkEncrypted' : require(__dirname + '/plugins/aws/efs/efsCmkEncrypted.js'), - 'efsEncryptionEnabled' : require(__dirname + '/plugins/aws/efs/efsEncryptionEnabled.js'), - 'efsHasTags' : require(__dirname + '/plugins/aws/efs/efsHasTags.js'), - - 'dockerfileTemplateEncrypted' : require(__dirname + '/plugins/aws/imagebuilder/dockerfileTemplateEncrypted.js'), - - 'ecrRepositoryPolicy' : require(__dirname + '/plugins/aws/ecr/ecrRepositoryPolicy.js'), - 'ecrRepositoryEncrypted' : require(__dirname + '/plugins/aws/ecr/ecrRepositoryEncrypted.js'), - 'ecrRepositoryTagImmutability' : require(__dirname + '/plugins/aws/ecr/ecrRepositoryTagImmutability.js'), - 'ecrRepositoryHasTags' : require(__dirname + '/plugins/aws/ecr/ecrRepositoryHasTags.js'), - 'ecrImageVulnerability' : require(__dirname + '/plugins/aws/ecr/ecrImageVulnerability.js'), - - 'managedPlatformUpdates' : require(__dirname + '/plugins/aws/elasticbeanstalk/managedPlatformUpdates.js'), - 'enhancedHealthReporting' : require(__dirname + '/plugins/aws/elasticbeanstalk/enhancedHealthReporting.js'), - 'environmentAccessLogs' : require(__dirname + '/plugins/aws/elasticbeanstalk/environmentAccessLogs.js'), - 'environmentPersistentLogs' : require(__dirname + '/plugins/aws/elasticbeanstalk/environmentPersistentLogs.js'), - - 'eksKubernetesVersion' : require(__dirname + '/plugins/aws/eks/eksKubernetesVersion.js'), - 'eksLoggingEnabled' : require(__dirname + '/plugins/aws/eks/eksLoggingEnabled.js'), - 'eksPrivateEndpoint' : require(__dirname + '/plugins/aws/eks/eksPrivateEndpoint.js'), - 'eksSecretsEncrypted' : require(__dirname + '/plugins/aws/eks/eksSecretsEncrypted.js'), - 'eksSecurityGroups' : require(__dirname + '/plugins/aws/eks/eksSecurityGroups.js'), - 'eksLatestPlatformVersion' : require(__dirname + '/plugins/aws/eks/eksLatestPlatformVersion.js'), - 'eksClusterHasTags' : require(__dirname + '/plugins/aws/eks/eksClusterHasTags.js'), - 'eksNetworkExposure' : require(__dirname + '/plugins/aws/eks/eksNetworkExposure.js'), - 'eksPrivilegeAnalysis' : require(__dirname + '/plugins/aws/eks/eksPrivilegeAnalysis.js'), - - - 'kendraIndexEncrypted' : require(__dirname + '/plugins/aws/kendra/kendraIndexEncrypted.js'), - - 'environmentTemplateEncrypted' : require(__dirname + '/plugins/aws/proton/environmentTemplateEncrypted.js'), - - 'crosszoneLoadBalancing' : require(__dirname + '/plugins/aws/elb/crosszoneLoadBalancing.js'), - 'insecureCiphers' : require(__dirname + '/plugins/aws/elb/insecureCiphers.js'), - 'elbHttpsOnly' : require(__dirname + '/plugins/aws/elb/elbHttpsOnly.js'), - 'elbLoggingEnabled' : require(__dirname + '/plugins/aws/elb/elbLoggingEnabled.js'), - 'elbNoInstances' : require(__dirname + '/plugins/aws/elb/elbNoInstances.js'), - 'classicELBInUse' : require(__dirname + '/plugins/aws/elb/classicELBInUse.js'), - 'connectionDrainingEnabled' : require(__dirname + '/plugins/aws/elb/connectionDrainingEnabled.js'), - 'appTierElbSecurity' : require(__dirname + '/plugins/aws/elb/appTierElbSecurity.js'), - 'elbHasTags' : require(__dirname + '/plugins/aws/elb/elbHasTags.js'), - 'elbUnhealthyInstances' : require(__dirname + '/plugins/aws/elb/elbUnhealthyInstances.js'), - - 'elbv2DeletionProtection' : require(__dirname + '/plugins/aws/elbv2/elbv2DeletionProtection.js'), - 'elbv2LoggingEnabled' : require(__dirname + '/plugins/aws/elbv2/elbv2LoggingEnabled.js'), - 'elbv2HttpsOnly' : require(__dirname + '/plugins/aws/elbv2/elbv2HttpsOnly.js'), - 'elbv2NoInstances' : require(__dirname + '/plugins/aws/elbv2/elbv2NoInstances.js'), - 'elbv2WafEnabled' : require(__dirname + '/plugins/aws/elbv2/elbv2WafEnabled.js'), - 'elbv2MinimumTargetInstances' : require(__dirname + '/plugins/aws/elbv2/elbv2MinimumTargetInstances.js'), - 'elbv2UnhealthyInstance' : require(__dirname + '/plugins/aws/elbv2/elbv2UnhealthyInstance.js'), - 'elbv2NlbListenerSecurity' : require(__dirname + '/plugins/aws/elbv2/elbv2NlbListenerSecurity.js'), - 'elbv2DeregistrationDelay' : require(__dirname + '/plugins/aws/elbv2/elbv2DeregistrationDelay.js'), - 'elbv2SslTermination' : require(__dirname + '/plugins/aws/elbv2/elbv2SslTermination.js'), - 'elbv2HasTags' : require(__dirname + '/plugins/aws/elbv2/elbv2HasTags.js'), - 'elbv2DeprecatedSslPolicies' : require(__dirname + '/plugins/aws/elbv2/elbv2DeprecatedSslPolicies.js'), - 'elbv2InsecureCiphers' : require(__dirname + '/plugins/aws/elbv2/elbv2InsecureCiphers.js'), - 'elbv2TLSVersionCipherEnabled' : require(__dirname + '/plugins/aws/elbv2/elbv2TLSVersionCipherEnabled.js'), - 'elbv2crosszoneLoadBalancing' : require(__dirname + '/plugins/aws/elbv2/elbv2crosszoneLoadBalancing.js'), - 'elasticacheDefaultPorts' : require(__dirname + '/plugins/aws/elasticache/elasticacheDefaultPorts.js'), - - 'emrClusterLogging' : require(__dirname + '/plugins/aws/emr/emrClusterLogging.js'), - 'emrClusterInVPC' : require(__dirname + '/plugins/aws/emr/emrClusterInVPC.js'), - 'emrEncryptionInTransit' : require(__dirname + '/plugins/aws/emr/emrEncryptionInTransit.js'), - 'emrEncryptionAtRest' : require(__dirname + '/plugins/aws/emr/emrEncryptionAtRest.js'), - 'emrDesiredInstanceType' : require(__dirname + '/plugins/aws/emr/emrDesiredInstanceType.js'), - 'emrInstanceCount' : require(__dirname + '/plugins/aws/emr/emrInstanceCount.js'), - 'emrClusterHasTags' : require(__dirname + '/plugins/aws/emr/emrClusterHasTags.js'), - - 'opensearchClusterStatus' : require(__dirname + '/plugins/aws/opensearch/opensearchClusterStatus.js'), - 'opensearchAccessFromIps' : require(__dirname + '/plugins/aws/opensearch/opensearchAccessFromIps.js'), - 'opensearchCrossAccountAccess' : require(__dirname + '/plugins/aws/opensearch/opensearchCrossAccountAccess'), - 'opensearchEnableAuditLogs' : require(__dirname + '/plugins/aws/opensearch/opensearchEnableAuditLogs'), - 'opensearchDedicatedMasterEnabled' : require(__dirname + '/plugins/aws/opensearch/opensearchDedicatedMasterEnabled.js'), + 'dmsMultiAZFeatureEnabled': require(__dirname + '/plugins/aws/dms/dmsMultiAZFeatureEnabled.js'), + 'autoMinorVersionUpgrade': require(__dirname + '/plugins/aws/dms/autoMinorVersionUpgrade.js'), + + 'dynamoKmsEncryption': require(__dirname + '/plugins/aws/dynamodb/dynamoKmsEncryption.js'), + 'daxClusterEncryption': require(__dirname + '/plugins/aws/dynamodb/daxClusterEncryption.js'), + 'dynamoDeletionProtection': require(__dirname + '/plugins/aws/dynamodb/dynamoDeletionProtection.js'), + 'dynamoContinuousBackups': require(__dirname + '/plugins/aws/dynamodb/dynamoContinuousBackups.js'), + 'dynamoTableBackupExists': require(__dirname + '/plugins/aws/dynamodb/dynamoTableBackupExists.js'), + 'dynamoTableHasTags': require(__dirname + '/plugins/aws/dynamodb/dynamoTableHasTags.js'), + 'dynamoUnusedTable': require(__dirname + '/plugins/aws/dynamodb/dynamoUnusedTable.js'), + + 'enhancedMetadataEnabled': require(__dirname + '/plugins/aws/imagebuilder/enhancedMetadataEnabled.js'), + + 'instanceLimit': require(__dirname + '/plugins/aws/ec2/instanceLimit.js'), + 'instanceVcpusLimit': require(__dirname + '/plugins/aws/ec2/instanceVcpusLimit.js'), + 'instanceMaxCount': require(__dirname + '/plugins/aws/ec2/instanceMaxCount.js'), + 'instanceKeyBasedLogin': require(__dirname + '/plugins/aws/ec2/instanceKeyBasedLogin.js'), + 'openAllPortsProtocols': require(__dirname + '/plugins/aws/ec2/openAllPortsProtocols.js'), + 'openCIFS': require(__dirname + '/plugins/aws/ec2/openCIFS.js'), + 'openCustomPorts': require(__dirname + '/plugins/aws/ec2/openCustomPorts.js'), + 'openDNS': require(__dirname + '/plugins/aws/ec2/openDNS.js'), + 'openDocker': require(__dirname + '/plugins/aws/ec2/openDocker.js'), + 'openFTP': require(__dirname + '/plugins/aws/ec2/openFTP.js'), + 'openHadoopNameNode': require(__dirname + '/plugins/aws/ec2/openHadoopNameNode.js'), + 'openHadoopNameNodeWebUI': require(__dirname + '/plugins/aws/ec2/openHadoopNameNodeWebUI.js'), + 'openOracleAutoDataWarehouse': require(__dirname + '/plugins/aws/ec2/openOracleAutoDataWarehouse.js'), + 'openKibana': require(__dirname + '/plugins/aws/ec2/openKibana.js'), + 'openMySQL': require(__dirname + '/plugins/aws/ec2/openMySQL.js'), + 'openOracle': require(__dirname + '/plugins/aws/ec2/openOracle.js'), + 'openNetBIOS': require(__dirname + '/plugins/aws/ec2/openNetBIOS.js'), + 'openPostgreSQL': require(__dirname + '/plugins/aws/ec2/openPostgreSQL.js'), + 'openRDP': require(__dirname + '/plugins/aws/ec2/openRDP.js'), + 'openRPC': require(__dirname + '/plugins/aws/ec2/openRPC.js'), + 'openSalt': require(__dirname + '/plugins/aws/ec2/openSalt.js'), + 'openSMBoTCP': require(__dirname + '/plugins/aws/ec2/openSMBoTCP.js'), + 'openSMTP': require(__dirname + '/plugins/aws/ec2/openSMTP.js'), + 'openSQLServer': require(__dirname + '/plugins/aws/ec2/openSQLServer.js'), + 'openSSH': require(__dirname + '/plugins/aws/ec2/openSSH.js'), + 'openTelnet': require(__dirname + '/plugins/aws/ec2/openTelnet.js'), + 'openVNCClient': require(__dirname + '/plugins/aws/ec2/openVNCClient.js'), + 'openVNCServer': require(__dirname + '/plugins/aws/ec2/openVNCServer.js'), + 'openElasticsearch': require(__dirname + '/plugins/aws/ec2/openElasticsearch.js'), + 'openMongoDB': require(__dirname + '/plugins/aws/ec2/openMongoDB.js'), + 'openCassandraClient': require(__dirname + '/plugins/aws/ec2/openCassandraClient.js'), + 'openCassandraInternode': require(__dirname + '/plugins/aws/ec2/openCassandraInternode.js'), + 'openCassandraMonitoring': require(__dirname + '/plugins/aws/ec2/openCassandraMonitoring.js'), + 'openCassandraThrift': require(__dirname + '/plugins/aws/ec2/openCassandraThrift.js'), + 'openLDAP': require(__dirname + '/plugins/aws/ec2/openLDAP.js'), + 'openLDAPS': require(__dirname + '/plugins/aws/ec2/openLDAPS.js'), + 'openSNMP': require(__dirname + '/plugins/aws/ec2/openSNMP.js'), + 'openMemcached': require(__dirname + '/plugins/aws/ec2/openMemcached.js'), + 'openInternalWeb': require(__dirname + '/plugins/aws/ec2/openInternalWeb.js'), + 'openRedis': require(__dirname + '/plugins/aws/ec2/openRedis.js'), + 'openHTTP': require(__dirname + '/plugins/aws/ec2/openHTTP.js'), + 'openHTTPS': require(__dirname + '/plugins/aws/ec2/openHTTPS.js'), + 'vpcElasticIpLimit': require(__dirname + '/plugins/aws/ec2/vpcElasticIpLimit.js'), + 'classicInstances': require(__dirname + '/plugins/aws/ec2/classicInstances.js'), + 'flowLogsEnabled': require(__dirname + '/plugins/aws/ec2/flowLogsEnabled.js'), + 'vpcMultipleSubnets': require(__dirname + '/plugins/aws/ec2/multipleSubnets.js'), + 'subnetAutoAssignPublicIp': require(__dirname + '/plugins/aws/ec2/subnetAutoAssignPublicIp.js'), + 'overlappingSecurityGroups': require(__dirname + '/plugins/aws/ec2/overlappingSecurityGroups.js'), + 'publicAmi': require(__dirname + '/plugins/aws/ec2/publicAmi.js'), + 'encryptedAmi': require(__dirname + '/plugins/aws/ec2/encryptedAmi.js'), + 'amiHasTags': require(__dirname + '/plugins/aws/ec2/amiHasTags.js'), + 'amiNamingConvention': require(__dirname + '/plugins/aws/ec2/amiNamingConvention.js'), + 'oldAmi': require(__dirname + '/plugins/aws/ec2/oldAmi.js'), + 'instanceIamRole': require(__dirname + '/plugins/aws/ec2/instanceIamRole.js'), + 'ebsBackupEnabled': require(__dirname + '/plugins/aws/ec2/ebsBackupEnabled.js'), + 'ebsEncryptionEnabled': require(__dirname + '/plugins/aws/ec2/ebsEncryptionEnabled.js'), + 'ebsSnapshotLifecycle': require(__dirname + '/plugins/aws/ec2/ebsSnapshotLifecycle.js'), + 'ebsOldSnapshots': require(__dirname + '/plugins/aws/ec2/ebsOldSnapshots.js'), + 'ebsRecentSnapshots': require(__dirname + '/plugins/aws/ec2/ebsRecentSnapshots.js'), + 'ebsSnapshotPrivate': require(__dirname + '/plugins/aws/ec2/ebsSnapshotPrivate.js'), + 'ebsSnapshotPublic': require(__dirname + '/plugins/aws/ec2/ebsSnapshotPublic.js'), + 'unusedSecurityGroups': require(__dirname + '/plugins/aws/ec2/unusedSecurityGroups.js'), + 'natMultiAz': require(__dirname + '/plugins/aws/ec2/natMultiAz.js'), + 'defaultVpcInUse': require(__dirname + '/plugins/aws/ec2/defaultVpcInUse.js'), + 'defaultVpcExists': require(__dirname + '/plugins/aws/ec2/defaultVpcExists.js'), + 'crossVpcPublicPrivate': require(__dirname + '/plugins/aws/ec2/crossVpcPublicPrivate.js'), + 'vpcEndpointAcceptance': require(__dirname + '/plugins/aws/ec2/vpcEndpointAcceptance'), + 'vpcEndpointExposed': require(__dirname + '/plugins/aws/ec2/vpcEndpointExposed.js'), + 'vpcEndpointCrossAccount': require(__dirname + '/plugins/aws/ec2/vpcEndpointCrossAccount.js'), + 'vpcPeeringConnections': require(__dirname + '/plugins/aws/ec2/vpcPeeringConnections.js'), + 'vpcPeeringLeastAccessRoutes': require(__dirname + '/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.js'), + 'ebsEncryptedSnapshots': require(__dirname + '/plugins/aws/ec2/ebsEncryptedSnapshots.js'), + 'ebsDefaultEncryptionEnabled': require(__dirname + '/plugins/aws/ec2/ebsDefaultEncryptionEnabled.js'), + 'ec2MetadataOptions': require(__dirname + '/plugins/aws/ec2/ec2MetadataOptions.js'), + 'overutilizedEC2Instance': require(__dirname + '/plugins/aws/ec2/overutilizedEC2Instance.js'), + + 'unusedEni': require(__dirname + '/plugins/aws/ec2/unusedEni.js'), + 'unusedAmi': require(__dirname + '/plugins/aws/ec2/unusedAmi.js'), + 'unusedVpcInternetGateways': require(__dirname + '/plugins/aws/ec2/unusedVpcInternetGateways.js'), + 'managedNatGateway': require(__dirname + '/plugins/aws/ec2/managedNatGateway.js'), + 'allowedCustomPorts': require(__dirname + '/plugins/aws/ec2/allowedCustomPorts.js'), + 'ebsUnusedVolumes': require(__dirname + '/plugins/aws/ec2/ebsUnusedVolumes.js'), + 'publicIpAddress': require(__dirname + '/plugins/aws/ec2/publicIpAddress.js'), + 'unusedVirtualPrivateGateway': require(__dirname + '/plugins/aws/ec2/unusedVirtualPrivateGateway.js'), + 'vpcSubnetInstancesPresent': require(__dirname + '/plugins/aws/ec2/vpcSubnetInstancesPresent.js'), + 'webTierInstanceIamRole': require(__dirname + '/plugins/aws/ec2/webTierInstanceIamRole.js'), + 'vpnTunnelState': require(__dirname + '/plugins/aws/ec2/vpnTunnelState.js'), + 'networkAclOutboundTraffic': require(__dirname + '/plugins/aws/ec2/networkAclOutboundTraffic.js'), + 'networkAclInboundTraffic': require(__dirname + '/plugins/aws/ec2/networkAclInboundTraffic.js'), + 'outdatedAmiInUse': require(__dirname + '/plugins/aws/ec2/outdatedAmiInUse.js'), + 'appTierInstanceIamRole': require(__dirname + '/plugins/aws/ec2/appTierInstanceIamRole.js'), + 'defaultSecurityGroup': require(__dirname + '/plugins/aws/ec2/defaultSecurityGroup.js'), + 'launchWizardSecurityGroups': require(__dirname + '/plugins/aws/ec2/launchWizardSecurityGroups'), + 'securityGroupRfc1918': require(__dirname + '/plugins/aws/ec2/securityGroupRfc1918.js'), + 'elasticIpLimit': require(__dirname + '/plugins/aws/ec2/elasticIpLimit.js'), + 'unassociatedElasticIp': require(__dirname + '/plugins/aws/ec2/unassociatedElasticIp.js'), + 'subnetIpAvailability': require(__dirname + '/plugins/aws/ec2/subnetIpAvailability.js'), + 'excessiveSecurityGroups': require(__dirname + '/plugins/aws/ec2/excessiveSecurityGroups.js'), + 'vpnGatewayInVpc': require(__dirname + '/plugins/aws/ec2/vpnGatewayInVpc.js'), + 'internetGatewayInVpc': require(__dirname + '/plugins/aws/ec2/internetGatewayInVpc.js'), + 'enableDetailedMonitoring': require(__dirname + '/plugins/aws/ec2/enableDetailedMonitoring.js'), + 'ec2HasTags': require(__dirname + '/plugins/aws/ec2/ec2HasTags.js'), + 'securityGroupHasTags': require(__dirname + '/plugins/aws/ec2/securityGroupsHasTags.js'), + 'vpcHasTags': require(__dirname + '/plugins/aws/ec2/vpcHasTags'), + 'ebsSnapshotHasTags': require(__dirname + '/plugins/aws/ec2/ebsSnapshotHasTags.js'), + 'networkAclHasTags': require(__dirname + '/plugins/aws/ec2/networkAclHasTags.js'), + 'ebsVolumeHasTags': require(__dirname + '/plugins/aws/ec2/ebsVolumeHasTags.js'), + 'openAllPortsProtocolsEgress': require(__dirname + '/plugins/aws/ec2/openAllPortsProtocolsEgress.js'), + 'defaultSecurityGroupInUse': require(__dirname + '/plugins/aws/ec2/defaultSecurityGroupInUse.js'), + 'ec2NetworkExposure': require(__dirname + '/plugins/aws/ec2/ec2NetworkExposure.js'), + 'ec2PrivilegeAnalysis': require(__dirname + '/plugins/aws/ec2/ec2PrivilegeAnalysis.js'), + + + 'efsCmkEncrypted': require(__dirname + '/plugins/aws/efs/efsCmkEncrypted.js'), + 'efsEncryptionEnabled': require(__dirname + '/plugins/aws/efs/efsEncryptionEnabled.js'), + 'efsHasTags': require(__dirname + '/plugins/aws/efs/efsHasTags.js'), + + 'dockerfileTemplateEncrypted': require(__dirname + '/plugins/aws/imagebuilder/dockerfileTemplateEncrypted.js'), + + 'ecrRepositoryPolicy': require(__dirname + '/plugins/aws/ecr/ecrRepositoryPolicy.js'), + 'ecrRepositoryEncrypted': require(__dirname + '/plugins/aws/ecr/ecrRepositoryEncrypted.js'), + 'ecrRepositoryTagImmutability': require(__dirname + '/plugins/aws/ecr/ecrRepositoryTagImmutability.js'), + 'ecrRepositoryHasTags': require(__dirname + '/plugins/aws/ecr/ecrRepositoryHasTags.js'), + 'ecrImageVulnerability': require(__dirname + '/plugins/aws/ecr/ecrImageVulnerability.js'), + + 'managedPlatformUpdates': require(__dirname + '/plugins/aws/elasticbeanstalk/managedPlatformUpdates.js'), + 'enhancedHealthReporting': require(__dirname + '/plugins/aws/elasticbeanstalk/enhancedHealthReporting.js'), + 'environmentAccessLogs': require(__dirname + '/plugins/aws/elasticbeanstalk/environmentAccessLogs.js'), + 'environmentPersistentLogs': require(__dirname + '/plugins/aws/elasticbeanstalk/environmentPersistentLogs.js'), + + 'eksKubernetesVersion': require(__dirname + '/plugins/aws/eks/eksKubernetesVersion.js'), + 'eksLoggingEnabled': require(__dirname + '/plugins/aws/eks/eksLoggingEnabled.js'), + 'eksPrivateEndpoint': require(__dirname + '/plugins/aws/eks/eksPrivateEndpoint.js'), + 'eksSecretsEncrypted': require(__dirname + '/plugins/aws/eks/eksSecretsEncrypted.js'), + 'eksSecurityGroups': require(__dirname + '/plugins/aws/eks/eksSecurityGroups.js'), + 'eksLatestPlatformVersion': require(__dirname + '/plugins/aws/eks/eksLatestPlatformVersion.js'), + 'eksClusterHasTags': require(__dirname + '/plugins/aws/eks/eksClusterHasTags.js'), + 'eksNetworkExposure': require(__dirname + '/plugins/aws/eks/eksNetworkExposure.js'), + 'eksPrivilegeAnalysis': require(__dirname + '/plugins/aws/eks/eksPrivilegeAnalysis.js'), + + + 'kendraIndexEncrypted': require(__dirname + '/plugins/aws/kendra/kendraIndexEncrypted.js'), + + 'environmentTemplateEncrypted': require(__dirname + '/plugins/aws/proton/environmentTemplateEncrypted.js'), + + 'crosszoneLoadBalancing': require(__dirname + '/plugins/aws/elb/crosszoneLoadBalancing.js'), + 'insecureCiphers': require(__dirname + '/plugins/aws/elb/insecureCiphers.js'), + 'elbHttpsOnly': require(__dirname + '/plugins/aws/elb/elbHttpsOnly.js'), + 'elbLoggingEnabled': require(__dirname + '/plugins/aws/elb/elbLoggingEnabled.js'), + 'elbNoInstances': require(__dirname + '/plugins/aws/elb/elbNoInstances.js'), + 'classicELBInUse': require(__dirname + '/plugins/aws/elb/classicELBInUse.js'), + 'connectionDrainingEnabled': require(__dirname + '/plugins/aws/elb/connectionDrainingEnabled.js'), + 'appTierElbSecurity': require(__dirname + '/plugins/aws/elb/appTierElbSecurity.js'), + 'elbHasTags': require(__dirname + '/plugins/aws/elb/elbHasTags.js'), + 'elbUnhealthyInstances': require(__dirname + '/plugins/aws/elb/elbUnhealthyInstances.js'), + + 'elbv2DeletionProtection': require(__dirname + '/plugins/aws/elbv2/elbv2DeletionProtection.js'), + 'elbv2LoggingEnabled': require(__dirname + '/plugins/aws/elbv2/elbv2LoggingEnabled.js'), + 'elbv2HttpsOnly': require(__dirname + '/plugins/aws/elbv2/elbv2HttpsOnly.js'), + 'elbv2NoInstances': require(__dirname + '/plugins/aws/elbv2/elbv2NoInstances.js'), + 'elbv2WafEnabled': require(__dirname + '/plugins/aws/elbv2/elbv2WafEnabled.js'), + 'elbv2MinimumTargetInstances': require(__dirname + '/plugins/aws/elbv2/elbv2MinimumTargetInstances.js'), + 'elbv2UnhealthyInstance': require(__dirname + '/plugins/aws/elbv2/elbv2UnhealthyInstance.js'), + 'elbv2NlbListenerSecurity': require(__dirname + '/plugins/aws/elbv2/elbv2NlbListenerSecurity.js'), + 'elbv2DeregistrationDelay': require(__dirname + '/plugins/aws/elbv2/elbv2DeregistrationDelay.js'), + 'elbv2SslTermination': require(__dirname + '/plugins/aws/elbv2/elbv2SslTermination.js'), + 'elbv2HasTags': require(__dirname + '/plugins/aws/elbv2/elbv2HasTags.js'), + 'elbv2DeprecatedSslPolicies': require(__dirname + '/plugins/aws/elbv2/elbv2DeprecatedSslPolicies.js'), + 'elbv2InsecureCiphers': require(__dirname + '/plugins/aws/elbv2/elbv2InsecureCiphers.js'), + 'elbv2TLSVersionCipherEnabled': require(__dirname + '/plugins/aws/elbv2/elbv2TLSVersionCipherEnabled.js'), + 'elbv2crosszoneLoadBalancing': require(__dirname + '/plugins/aws/elbv2/elbv2crosszoneLoadBalancing.js'), + 'elasticacheDefaultPorts': require(__dirname + '/plugins/aws/elasticache/elasticacheDefaultPorts.js'), + + 'emrClusterLogging': require(__dirname + '/plugins/aws/emr/emrClusterLogging.js'), + 'emrClusterInVPC': require(__dirname + '/plugins/aws/emr/emrClusterInVPC.js'), + 'emrEncryptionInTransit': require(__dirname + '/plugins/aws/emr/emrEncryptionInTransit.js'), + 'emrEncryptionAtRest': require(__dirname + '/plugins/aws/emr/emrEncryptionAtRest.js'), + 'emrDesiredInstanceType': require(__dirname + '/plugins/aws/emr/emrDesiredInstanceType.js'), + 'emrInstanceCount': require(__dirname + '/plugins/aws/emr/emrInstanceCount.js'), + 'emrClusterHasTags': require(__dirname + '/plugins/aws/emr/emrClusterHasTags.js'), + + 'opensearchClusterStatus': require(__dirname + '/plugins/aws/opensearch/opensearchClusterStatus.js'), + 'opensearchAccessFromIps': require(__dirname + '/plugins/aws/opensearch/opensearchAccessFromIps.js'), + 'opensearchCrossAccountAccess': require(__dirname + '/plugins/aws/opensearch/opensearchCrossAccountAccess'), + 'opensearchEnableAuditLogs': require(__dirname + '/plugins/aws/opensearch/opensearchEnableAuditLogs'), + 'opensearchDedicatedMasterEnabled': require(__dirname + '/plugins/aws/opensearch/opensearchDedicatedMasterEnabled.js'), 'opensearchDesiredInstanceTypes': require(__dirname + '/plugins/aws/opensearch/opensearchDesiredInstanceTypes.js'), 'opensearchDomainEncryptionEnabled': require(__dirname + '/plugins/aws/opensearch/opensearchDomainEncryptionEnabled.js'), - 'opensearchEncryptedDomain' : require(__dirname + '/plugins/aws/opensearch/opensearchEncryptedDomain.js'), - 'opensearchExposedDomain' : require(__dirname + '/plugins/aws/opensearch/opensearchExposedDomain.js'), - 'opensearchHttpsOnly' : require(__dirname + '/plugins/aws/opensearch/opensearchHttpsOnly.js'), - 'opensearchLoggingEnabled' : require(__dirname + '/plugins/aws/opensearch/opensearchLoggingEnabled.js'), + 'opensearchEncryptedDomain': require(__dirname + '/plugins/aws/opensearch/opensearchEncryptedDomain.js'), + 'opensearchExposedDomain': require(__dirname + '/plugins/aws/opensearch/opensearchExposedDomain.js'), + 'opensearchHttpsOnly': require(__dirname + '/plugins/aws/opensearch/opensearchHttpsOnly.js'), + 'opensearchLoggingEnabled': require(__dirname + '/plugins/aws/opensearch/opensearchLoggingEnabled.js'), 'opensearchNodeToNodeEncryption': require(__dirname + '/plugins/aws/opensearch/opensearchNodeToNodeEncryption.js'), - 'opensearchPublicEndpoint' : require(__dirname + '/plugins/aws/opensearch/opensearchPublicEndpoint.js'), - 'opensearchRequireIAMAuth' : require(__dirname + '/plugins/aws/opensearch/opensearchRequireIAMAuth.js'), - 'opensearchTlsVersion' : require(__dirname + '/plugins/aws/opensearch/opensearchTlsVersion.js'), - 'opensearchUpgradeAvailable' : require(__dirname + '/plugins/aws/opensearch/opensearchUpgradeAvailable.js'), - 'opensearchVersion' : require(__dirname + '/plugins/aws/opensearch/opensearchVersion.js'), + 'opensearchPublicEndpoint': require(__dirname + '/plugins/aws/opensearch/opensearchPublicEndpoint.js'), + 'opensearchRequireIAMAuth': require(__dirname + '/plugins/aws/opensearch/opensearchRequireIAMAuth.js'), + 'opensearchTlsVersion': require(__dirname + '/plugins/aws/opensearch/opensearchTlsVersion.js'), + 'opensearchUpgradeAvailable': require(__dirname + '/plugins/aws/opensearch/opensearchUpgradeAvailable.js'), + 'opensearchVersion': require(__dirname + '/plugins/aws/opensearch/opensearchVersion.js'), 'opensearchZoneAwarenessEnabled': require(__dirname + '/plugins/aws/opensearch/opensearchZoneAwarenessEnabled.js'), - 'vaultPublicAccess' : require(__dirname + '/plugins/aws/s3glacier/vaultPublicAccess.js'), - 'firehoseEncrypted' : require(__dirname + '/plugins/aws/firehose/firehoseEncrypted.js'), - 'deliveryStreamEncrypted' : require(__dirname + '/plugins/aws/firehose/deliveryStreamEncrypted.js'), - - 'eventBusCrossAccountAccess' : require(__dirname + '/plugins/aws/eventbridge/eventBusCrossAccountAccess.js'), - 'eventBusPublicAccess' : require(__dirname + '/plugins/aws/eventbridge/eventBusPublicAccess.js'), - 'eventsInUse' : require(__dirname + '/plugins/aws/eventbridge/eventsInUse.js'), - - 'glueCloudwatchLogsEncrypted' : require(__dirname + '/plugins/aws/glue/glueCloudwatchLogsEncrypted.js'), - 'glueS3EncryptionEnabled' : require(__dirname + '/plugins/aws/glue/glueS3EncryptionEnabled.js'), - 'dataCatalogCmkEncrypted' : require(__dirname + '/plugins/aws/glue/dataCatalogCmkEncrypted.js'), - 'bookmarkEncryptionEnabled' : require(__dirname + '/plugins/aws/glue/bookmarkEncryptionEnabled.js'), - 'dataCatalogEncryptionEnabled' : require(__dirname + '/plugins/aws/glue/dataCatalogEncryptionEnabled.js'), - - 'imageRecipeVolumeEncrypted' : require(__dirname + '/plugins/aws/imagebuilder/imageRecipeVolumeEncrypted.js'), - 'imgBuilderComponentsEncrypted' : require(__dirname + '/plugins/aws/imagebuilder/imgBuilderComponentsEncrypted.js'), - - 'accessKeysExtra' : require(__dirname + '/plugins/aws/iam/accessKeysExtra.js'), - 'accessKeysLastUsed' : require(__dirname + '/plugins/aws/iam/accessKeysLastUsed.js'), - 'accessKeysRotated' : require(__dirname + '/plugins/aws/iam/accessKeysRotated.js'), - 'certificateExpiry' : require(__dirname + '/plugins/aws/iam/certificateExpiry.js'), - 'crossAccountMfaExtIdAccess' : require(__dirname + '/plugins/aws/iam/crossAccountMfaExtIdAccess.js'), - 'emptyGroups' : require(__dirname + '/plugins/aws/iam/emptyGroups.js'), - 'groupInlinePolicies' : require(__dirname + '/plugins/aws/iam/groupInlinePolicies.js'), - 'iamMasterManagerRoles' : require(__dirname + '/plugins/aws/iam/iamMasterManagerRoles.js'), - 'iamUserAdmins' : require(__dirname + '/plugins/aws/iam/iamUserAdmins.js'), - 'iamUserNameRegex' : require(__dirname + '/plugins/aws/iam/iamUserNameRegex.js'), - 'iamUserUnauthorizedToEdit' : require(__dirname + '/plugins/aws/iam/iamUserUnauthorizedToEdit'), - 'iamUserHasTags' : require(__dirname + '/plugins/aws/iam/iamUserHasTags.js'), - 'iamRolePolicies' : require(__dirname + '/plugins/aws/iam/iamRolePolicies.js'), - 'iamRoleLastUsed' : require(__dirname + '/plugins/aws/iam/iamRoleLastUsed.js'), - 'maxPasswordAge' : require(__dirname + '/plugins/aws/iam/maxPasswordAge.js'), - 'minPasswordLength' : require(__dirname + '/plugins/aws/iam/minPasswordLength.js'), - 'noUserIamPolicies' : require(__dirname + '/plugins/aws/iam/noUserIamPolicies.js'), - 'passwordExpiration' : require(__dirname + '/plugins/aws/iam/passwordExpiration.js'), - 'passwordRequiresLowercase' : require(__dirname + '/plugins/aws/iam/passwordRequiresLowercase.js'), - 'passwordRequiresNumbers' : require(__dirname + '/plugins/aws/iam/passwordRequiresNumbers.js'), - 'passwordRequiresSymbols' : require(__dirname + '/plugins/aws/iam/passwordRequiresSymbols.js'), - 'passwordRequiresUppercase' : require(__dirname + '/plugins/aws/iam/passwordRequiresUppercase.js'), - 'passwordReusePrevention' : require(__dirname + '/plugins/aws/iam/passwordReusePrevention.js'), - 'rootAccessKeys' : require(__dirname + '/plugins/aws/iam/rootAccessKeys.js'), - 'rootSigningCertificate' : require(__dirname + '/plugins/aws/iam/rootSigningCertificate.js'), - 'rootAccountInUse' : require(__dirname + '/plugins/aws/iam/rootAccountInUse.js'), - 'rootHardwareMfa' : require(__dirname + '/plugins/aws/iam/rootHardwareMfa.js'), - 'rootMfaEnabled' : require(__dirname + '/plugins/aws/iam/rootMfaEnabled.js'), - 'sshKeysRotated' : require(__dirname + '/plugins/aws/iam/sshKeysRotated.js'), - 'trustedCrossAccountRoles' : require(__dirname + '/plugins/aws/iam/trustedCrossAccountRoles.js'), - 'usersMfaEnabled' : require(__dirname + '/plugins/aws/iam/usersMfaEnabled.js'), - 'usersPasswordAndKeys' : require(__dirname + '/plugins/aws/iam/usersPasswordAndKeys.js'), - 'usersPasswordLastUsed' : require(__dirname + '/plugins/aws/iam/usersPasswordLastUsed.js'), - 'canaryKeysUsed' : require(__dirname + '/plugins/aws/iam/canaryKeysUsed.js'), - 'iamPoliciesPresent' : require(__dirname + '/plugins/aws/iam/iamPoliciesPresent.js'), - 'iamDbAuthenticationEnabled' : require(__dirname + '/plugins/aws/rds/iamDbAuthenticationEnabled.js'), - 'iamSupportPolicy' : require(__dirname + '/plugins/aws/iam/iamSupportPolicy.js'), - 'iamUserPresent' : require(__dirname + '/plugins/aws/iam/iamUserPresent.js'), - 'rolePolicyUnusedServices' : require(__dirname + '/plugins/aws/iam/rolePolicyUnusedServices.js'), - 'iamUserInUse' : require(__dirname + '/plugins/aws/iam/iamUserInUse.js'), - 'policyAllowsToChangePassword' : require(__dirname + '/plugins/aws/iam/policyAllowsToChangePassword.js'), - 'iamRoleHasTags' : require(__dirname + '/plugins/aws/iam/iamRoleHasTags.js'), - 'passwordPolicyExists' : require(__dirname + '/plugins/aws/iam/passwordPolicyExists.js'), - 'iamUserNotInUse' : require(__dirname + '/plugins/aws/iam/iamUserNotInUse.js'), - 'iamUserWithoutPermissions' : require(__dirname + '/plugins/aws/iam/iamUserWithoutPermissions.js'), - - 'kinesisEncrypted' : require(__dirname + '/plugins/aws/kinesis/kinesisEncrypted.js'), - 'kinesisDataStreamsEncrypted' : require(__dirname + '/plugins/aws/kinesis/kinesisDataStreamsEncrypted.js'), - 'videostreamDataEncrypted' : require(__dirname + '/plugins/aws/kinesisvideo/videostreamDataEncrypted.js'), - - 'kmsKeyRotation' : require(__dirname + '/plugins/aws/kms/kmsKeyRotation.js'), - 'kmsScheduledDeletion' : require(__dirname + '/plugins/aws/kms/kmsScheduledDeletion.js'), - 'kmsKeyPolicy' : require(__dirname + '/plugins/aws/kms/kmsKeyPolicy.js'), - 'kmsDefaultKeyUsage' : require(__dirname + '/plugins/aws/kms/kmsDefaultKeyUsage.js'), - 'kmsAppTierCmk' : require(__dirname + '/plugins/aws/kms/kmsAppTierCmk.js'), - 'kmsGrantLeastPrivilege' : require(__dirname + '/plugins/aws/kms/kmsGrantLeastPrivilege.js'), - 'kmsDuplicateGrants' : require(__dirname + '/plugins/aws/kms/kmsDuplicateGrants.js'), - - 'rdsAutomatedBackups' : require(__dirname + '/plugins/aws/rds/rdsAutomatedBackups.js'), - 'rdsEncryptionEnabled' : require(__dirname + '/plugins/aws/rds/rdsEncryptionEnabled.js'), - 'rdsCmkEncryptionEnabled' : require(__dirname + '/plugins/aws/rds/rdsCmkEncryptionEnabled.js'), - 'rdsLoggingEnabled' : require(__dirname + '/plugins/aws/rds/rdsLoggingEnabled.js'), - 'rdsPubliclyAccessible' : require(__dirname + '/plugins/aws/rds/rdsPubliclyAccessible.js'), - 'rdsRestorable' : require(__dirname + '/plugins/aws/rds/rdsRestorable.js'), - 'rdsMultiAz' : require(__dirname + '/plugins/aws/rds/rdsMultiAz.js'), - 'rdsSnapshotEncryption' : require(__dirname + '/plugins/aws/rds/rdsSnapshotEncryption.js'), - 'rdsMinorVersionUpgrade' : require(__dirname + '/plugins/aws/rds/rdsMinorVersionUpgrade.js'), - 'sqlServerTLSVersion' : require(__dirname + '/plugins/aws/rds/sqlServerTLSVersion'), - 'rdsTransportEncryption' : require(__dirname + '/plugins/aws/rds/rdsTransportEncryption'), - 'rdsDeletionProtectionEnabled' : require(__dirname + '/plugins/aws/rds/rdsDeletionProtectionEnabled.js'), - 'rdsDefaultUsername' : require(__dirname + '/plugins/aws/rds/rdsDefaultUsername.js'), - 'rdsDefaultPort' : require(__dirname + '/plugins/aws/rds/rdsDefaultPort.js'), - 'rdsSnapshotPubliclyAccessible' : require(__dirname + '/plugins/aws/rds/rdsSnapshotPubliclyAccessible.js'), - 'rdsInstanceHasTags' : require(__dirname + '/plugins/aws/rds/rdsInstanceHasTags.js'), - 'rdsPublicSubnet' : require(__dirname + '/plugins/aws/rds/rdsPublicSubnet.js'), - 'mysqlVulnerabilityCheck' : require(__dirname + '/plugins/aws/rds/mysqlVulnerabilityCheck.js'), - 'rdsInstanceGeneration' : require(__dirname + '/plugins/aws/rds/rdsInstanceGeneration.js'), - 'overutilizedRDSInstance' : require(__dirname + '/plugins/aws/rds/overutilizedRDSInstance.js'), - 'idleRDSInstance' : require(__dirname + '/plugins/aws/rds/idleRDSInstance.js'), + 'vaultPublicAccess': require(__dirname + '/plugins/aws/s3glacier/vaultPublicAccess.js'), + 'firehoseEncrypted': require(__dirname + '/plugins/aws/firehose/firehoseEncrypted.js'), + 'deliveryStreamEncrypted': require(__dirname + '/plugins/aws/firehose/deliveryStreamEncrypted.js'), + + 'eventBusCrossAccountAccess': require(__dirname + '/plugins/aws/eventbridge/eventBusCrossAccountAccess.js'), + 'eventBusPublicAccess': require(__dirname + '/plugins/aws/eventbridge/eventBusPublicAccess.js'), + 'eventsInUse': require(__dirname + '/plugins/aws/eventbridge/eventsInUse.js'), + + 'glueCloudwatchLogsEncrypted': require(__dirname + '/plugins/aws/glue/glueCloudwatchLogsEncrypted.js'), + 'glueS3EncryptionEnabled': require(__dirname + '/plugins/aws/glue/glueS3EncryptionEnabled.js'), + 'dataCatalogCmkEncrypted': require(__dirname + '/plugins/aws/glue/dataCatalogCmkEncrypted.js'), + 'bookmarkEncryptionEnabled': require(__dirname + '/plugins/aws/glue/bookmarkEncryptionEnabled.js'), + 'dataCatalogEncryptionEnabled': require(__dirname + '/plugins/aws/glue/dataCatalogEncryptionEnabled.js'), + + 'imageRecipeVolumeEncrypted': require(__dirname + '/plugins/aws/imagebuilder/imageRecipeVolumeEncrypted.js'), + 'imgBuilderComponentsEncrypted': require(__dirname + '/plugins/aws/imagebuilder/imgBuilderComponentsEncrypted.js'), + + 'accessKeysExtra': require(__dirname + '/plugins/aws/iam/accessKeysExtra.js'), + 'accessKeysLastUsed': require(__dirname + '/plugins/aws/iam/accessKeysLastUsed.js'), + 'accessKeysRotated': require(__dirname + '/plugins/aws/iam/accessKeysRotated.js'), + 'certificateExpiry': require(__dirname + '/plugins/aws/iam/certificateExpiry.js'), + 'cloudShellFullAccess': require(__dirname + '/plugins/aws/iam/cloudShellFullAccess.js'), + 'crossAccountMfaExtIdAccess': require(__dirname + '/plugins/aws/iam/crossAccountMfaExtIdAccess.js'), + 'emptyGroups': require(__dirname + '/plugins/aws/iam/emptyGroups.js'), + 'groupInlinePolicies': require(__dirname + '/plugins/aws/iam/groupInlinePolicies.js'), + 'iamMasterManagerRoles': require(__dirname + '/plugins/aws/iam/iamMasterManagerRoles.js'), + 'iamUserAdmins': require(__dirname + '/plugins/aws/iam/iamUserAdmins.js'), + 'iamUserNameRegex': require(__dirname + '/plugins/aws/iam/iamUserNameRegex.js'), + 'iamUserUnauthorizedToEdit': require(__dirname + '/plugins/aws/iam/iamUserUnauthorizedToEdit'), + 'iamUserHasTags': require(__dirname + '/plugins/aws/iam/iamUserHasTags.js'), + 'iamRolePolicies': require(__dirname + '/plugins/aws/iam/iamRolePolicies.js'), + 'iamRoleLastUsed': require(__dirname + '/plugins/aws/iam/iamRoleLastUsed.js'), + 'maxPasswordAge': require(__dirname + '/plugins/aws/iam/maxPasswordAge.js'), + 'minPasswordLength': require(__dirname + '/plugins/aws/iam/minPasswordLength.js'), + 'noUserIamPolicies': require(__dirname + '/plugins/aws/iam/noUserIamPolicies.js'), + 'passwordExpiration': require(__dirname + '/plugins/aws/iam/passwordExpiration.js'), + 'passwordRequiresLowercase': require(__dirname + '/plugins/aws/iam/passwordRequiresLowercase.js'), + 'passwordRequiresNumbers': require(__dirname + '/plugins/aws/iam/passwordRequiresNumbers.js'), + 'passwordRequiresSymbols': require(__dirname + '/plugins/aws/iam/passwordRequiresSymbols.js'), + 'passwordRequiresUppercase': require(__dirname + '/plugins/aws/iam/passwordRequiresUppercase.js'), + 'passwordReusePrevention': require(__dirname + '/plugins/aws/iam/passwordReusePrevention.js'), + 'rootAccessKeys': require(__dirname + '/plugins/aws/iam/rootAccessKeys.js'), + 'rootSigningCertificate': require(__dirname + '/plugins/aws/iam/rootSigningCertificate.js'), + 'rootAccountInUse': require(__dirname + '/plugins/aws/iam/rootAccountInUse.js'), + 'rootHardwareMfa': require(__dirname + '/plugins/aws/iam/rootHardwareMfa.js'), + 'rootMfaEnabled': require(__dirname + '/plugins/aws/iam/rootMfaEnabled.js'), + 'sshKeysRotated': require(__dirname + '/plugins/aws/iam/sshKeysRotated.js'), + 'trustedCrossAccountRoles': require(__dirname + '/plugins/aws/iam/trustedCrossAccountRoles.js'), + 'usersMfaEnabled': require(__dirname + '/plugins/aws/iam/usersMfaEnabled.js'), + 'usersPasswordAndKeys': require(__dirname + '/plugins/aws/iam/usersPasswordAndKeys.js'), + 'usersPasswordLastUsed': require(__dirname + '/plugins/aws/iam/usersPasswordLastUsed.js'), + 'canaryKeysUsed': require(__dirname + '/plugins/aws/iam/canaryKeysUsed.js'), + 'iamPoliciesPresent': require(__dirname + '/plugins/aws/iam/iamPoliciesPresent.js'), + 'iamDbAuthenticationEnabled': require(__dirname + '/plugins/aws/rds/iamDbAuthenticationEnabled.js'), + 'iamSupportPolicy': require(__dirname + '/plugins/aws/iam/iamSupportPolicy.js'), + 'iamUserPresent': require(__dirname + '/plugins/aws/iam/iamUserPresent.js'), + 'rolePolicyUnusedServices': require(__dirname + '/plugins/aws/iam/rolePolicyUnusedServices.js'), + 'iamUserInUse': require(__dirname + '/plugins/aws/iam/iamUserInUse.js'), + 'policyAllowsToChangePassword': require(__dirname + '/plugins/aws/iam/policyAllowsToChangePassword.js'), + 'iamRoleHasTags': require(__dirname + '/plugins/aws/iam/iamRoleHasTags.js'), + 'passwordPolicyExists': require(__dirname + '/plugins/aws/iam/passwordPolicyExists.js'), + 'iamUserNotInUse': require(__dirname + '/plugins/aws/iam/iamUserNotInUse.js'), + 'iamUserWithoutPermissions': require(__dirname + '/plugins/aws/iam/iamUserWithoutPermissions.js'), + + 'kinesisEncrypted': require(__dirname + '/plugins/aws/kinesis/kinesisEncrypted.js'), + 'kinesisDataStreamsEncrypted': require(__dirname + '/plugins/aws/kinesis/kinesisDataStreamsEncrypted.js'), + 'videostreamDataEncrypted': require(__dirname + '/plugins/aws/kinesisvideo/videostreamDataEncrypted.js'), + + 'kmsKeyRotation': require(__dirname + '/plugins/aws/kms/kmsKeyRotation.js'), + 'kmsScheduledDeletion': require(__dirname + '/plugins/aws/kms/kmsScheduledDeletion.js'), + 'kmsKeyPolicy': require(__dirname + '/plugins/aws/kms/kmsKeyPolicy.js'), + 'kmsDefaultKeyUsage': require(__dirname + '/plugins/aws/kms/kmsDefaultKeyUsage.js'), + 'kmsAppTierCmk': require(__dirname + '/plugins/aws/kms/kmsAppTierCmk.js'), + 'kmsGrantLeastPrivilege': require(__dirname + '/plugins/aws/kms/kmsGrantLeastPrivilege.js'), + 'kmsDuplicateGrants': require(__dirname + '/plugins/aws/kms/kmsDuplicateGrants.js'), + + 'rdsAutomatedBackups': require(__dirname + '/plugins/aws/rds/rdsAutomatedBackups.js'), + 'rdsEncryptionEnabled': require(__dirname + '/plugins/aws/rds/rdsEncryptionEnabled.js'), + 'rdsCmkEncryptionEnabled': require(__dirname + '/plugins/aws/rds/rdsCmkEncryptionEnabled.js'), + 'rdsLoggingEnabled': require(__dirname + '/plugins/aws/rds/rdsLoggingEnabled.js'), + 'rdsPubliclyAccessible': require(__dirname + '/plugins/aws/rds/rdsPubliclyAccessible.js'), + 'rdsRestorable': require(__dirname + '/plugins/aws/rds/rdsRestorable.js'), + 'rdsMultiAz': require(__dirname + '/plugins/aws/rds/rdsMultiAz.js'), + 'rdsSnapshotEncryption': require(__dirname + '/plugins/aws/rds/rdsSnapshotEncryption.js'), + 'rdsMinorVersionUpgrade': require(__dirname + '/plugins/aws/rds/rdsMinorVersionUpgrade.js'), + 'sqlServerTLSVersion': require(__dirname + '/plugins/aws/rds/sqlServerTLSVersion'), + 'rdsTransportEncryption': require(__dirname + '/plugins/aws/rds/rdsTransportEncryption'), + 'rdsDeletionProtectionEnabled': require(__dirname + '/plugins/aws/rds/rdsDeletionProtectionEnabled.js'), + 'rdsDefaultUsername': require(__dirname + '/plugins/aws/rds/rdsDefaultUsername.js'), + 'rdsDefaultPort': require(__dirname + '/plugins/aws/rds/rdsDefaultPort.js'), + 'rdsSnapshotPubliclyAccessible': require(__dirname + '/plugins/aws/rds/rdsSnapshotPubliclyAccessible.js'), + 'rdsInstanceHasTags': require(__dirname + '/plugins/aws/rds/rdsInstanceHasTags.js'), + 'rdsPublicSubnet': require(__dirname + '/plugins/aws/rds/rdsPublicSubnet.js'), + 'mysqlVulnerabilityCheck': require(__dirname + '/plugins/aws/rds/mysqlVulnerabilityCheck.js'), + 'rdsInstanceGeneration': require(__dirname + '/plugins/aws/rds/rdsInstanceGeneration.js'), + 'overutilizedRDSInstance': require(__dirname + '/plugins/aws/rds/overutilizedRDSInstance.js'), + 'idleRDSInstance': require(__dirname + '/plugins/aws/rds/idleRDSInstance.js'), 'redisClusterEncryptionInTransit': require(__dirname + '/plugins/aws/elasticache/redisClusterEncryptionInTransit.js'), - 'elasticacheClusterInVpc' : require(__dirname + '/plugins/aws/elasticache/elasticacheClusterInVpc.js'), - 'elasticacheInstanceGeneration' : require(__dirname + '/plugins/aws/elasticache/elasticacheInstanceGeneration.js'), - 'redisEngineVersions' : require(__dirname + '/plugins/aws/elasticache/redisEngineVersions.js'), - 'elasticacheNodesCount' : require(__dirname + '/plugins/aws/elasticache/elasticacheNodesCount.js'), - 'elasticacheRedisMultiAZ' : require(__dirname + '/plugins/aws/elasticache/elasticacheRedisMultiAZ.js'), - 'idleElastiCacheNode' : require(__dirname + '/plugins/aws/elasticache/idleElastiCacheNode.js'), - 'elasticaheDesiredNodeType' : require(__dirname + '/plugins/aws/elasticache/elasticaheDesiredNodeType.js'), - 'elastiCacheClusterHasTags' : require(__dirname + '/plugins/aws/elasticache/elasticCacheClusterHasTags.js'), - - 'domainAutoRenew' : require(__dirname + '/plugins/aws/route53/domainAutoRenew.js'), - 'domainExpiry' : require(__dirname + '/plugins/aws/route53/domainExpiry.js'), - 'route53InUse' : require(__dirname + '/plugins/aws/route53/route53InUse.js'), - 'domainTransferLock' : require(__dirname + '/plugins/aws/route53/domainTransferLock.js'), - 'danglingDnsRecords' : require(__dirname + '/plugins/aws/route53/danglingDnsRecords.js'), - 'privacyProtection' : require(__dirname + '/plugins/aws/route53/privacyProtection.js'), - 'senderPolicyFwInUse' : require(__dirname + '/plugins/aws/route53/senderPolicyFwInUse.js'), - 'senderPolicyFwRecordPresent' : require(__dirname + '/plugins/aws/route53/senderPolicyFwRecordPresent.js'), - - 'bucketEncryptionInTransit' : require(__dirname + '/plugins/aws/s3/bucketEncryptionInTransit.js'), - 'bucketAllUsersPolicy' : require(__dirname + '/plugins/aws/s3/bucketAllUsersPolicy.js'), - 'bucketAllUsersAcl' : require(__dirname + '/plugins/aws/s3/bucketAllUsersAcl.js'), - 'bucketPolicyCloudFrontOai' : require(__dirname + '/plugins/aws/s3/bucketPolicyCloudFrontOai.js'), - 'bucketVersioning' : require(__dirname + '/plugins/aws/s3/bucketVersioning.js'), - 'bucketLogging' : require(__dirname + '/plugins/aws/s3/bucketLogging.js'), - 's3Encryption' : require(__dirname + '/plugins/aws/s3/s3Encryption.js'), - 'bucketPublicAccessBlock' : require(__dirname + '/plugins/aws/s3/bucketPublicAccessBlock.js'), - 'bucketEncryption' : require(__dirname + '/plugins/aws/s3/bucketEncryption.js'), - 'bucketWebsiteEnabled' : require(__dirname + '/plugins/aws/s3/bucketWebsiteEnabled.js'), - 'bucketEnforceEncryption' : require(__dirname + '/plugins/aws/s3/bucketEnforceEncryption.js'), - 'bucketSecureTransportEnabled' : require(__dirname + '/plugins/aws/s3/bucketSecureTransportEnabled.js'), - 'bucketLifecycleConfiguration' : require(__dirname + '/plugins/aws/s3/bucketLifecycleConfiguration'), - 'bucketTransferAcceleration' : require(__dirname + '/plugins/aws/s3/bucketTransferAcceleration'), - 'bucketDnsCompliantName' : require(__dirname + '/plugins/aws/s3/bucketDnsCompliantName.js'), - 'versionedBucketsLC' : require(__dirname + '/plugins/aws/s3/versionedBucketsLC.js'), - 's3BucketHasTags' : require(__dirname + '/plugins/aws/s3/s3BucketHasTags.js'), - 'bucketPolicyCloudFrontOac' : require(__dirname + '/plugins/aws/s3/bucketPolicyCloudFrontOac.js'), - 'bucketMFADeleteEnabled' : require(__dirname + '/plugins/aws/s3/bucketMFADeleteEnabled.js'), - 'objectLevelReadEventLogging' : require(__dirname + '/plugins/aws/s3/objectLevelReadEventLogging.js'), - 'objectLevelWriteEventLogging' : require(__dirname + '/plugins/aws/s3/objectLevelWriteEventLogging.js'), - 'notebookDataEncrypted' : require(__dirname + '/plugins/aws/sagemaker/notebookDataEncrypted.js'), - 'notebookDirectInternetAccess' : require(__dirname + '/plugins/aws/sagemaker/notebookDirectInternetAccess.js'), - 'notebookInstanceInVpc' : require(__dirname + '/plugins/aws/sagemaker/notebookInstanceInVpc.js'), - - 'dkimEnabled' : require(__dirname + '/plugins/aws/ses/dkimEnabled.js'), - 'emailMessagesEncrypted' : require(__dirname + '/plugins/aws/ses/emailMessagesEncrypted.js'), - - 'topicEncrypted' : require(__dirname + '/plugins/aws/sns/topicEncrypted.js'), - 'topicPolicies' : require(__dirname + '/plugins/aws/sns/topicPolicies.js'), - 'topicCmkEncrypted' : require(__dirname + '/plugins/aws/sns/topicCmkEncrypted.js'), - 'snsCrossAccount' : require(__dirname + '/plugins/aws/sns/snsCrossAccount.js'), - 'snsValidSubscribers' : require(__dirname + '/plugins/aws/sns/snsValidSubscribers.js'), - 'snsTopicHasTags' : require(__dirname + '/plugins/aws/sns/snsTopicHasTags.js'), - 'snsTopicNoHttpPolicy' : require(__dirname + '/plugins/aws/sns/snsTopicNoHttpPolicy.js'), - 'snsSubscriptionHTTPSonly' : require(__dirname + '/plugins/aws/sns/snsSubscriptionHTTPSonly.js'), - - 'sqsCrossAccount' : require(__dirname + '/plugins/aws/sqs/sqsCrossAccount.js'), - 'sqsHasTags' : require(__dirname + '/plugins/aws/sqs/sqsHasTags.js'), - 'sqsDeadLetterQueue' : require(__dirname + '/plugins/aws/sqs/sqsDeadLetterQueue.js'), - 'sqsEncrypted' : require(__dirname + '/plugins/aws/sqs/sqsEncrypted.js'), - 'sqsPublicAccess' : require(__dirname + '/plugins/aws/sqs/sqsPublicAccess.js'), - 'queueUnprocessedMessages' : require(__dirname + '/plugins/aws/sqs/queueUnprocessedMessages.js'), - 'sqsEncryptionEnabled' : require(__dirname + '/plugins/aws/sqs/sqsEncryptionEnabled.js'), - - 'ssmEncryptedParameters' : require(__dirname + '/plugins/aws/ssm/ssmEncryptedParameters.js'), - 'ssmActiveOnAllInstances' : require(__dirname + '/plugins/aws/ssm/ssmActiveOnAllInstances.js'), - 'ssmAgentLatestVersion' : require(__dirname + '/plugins/aws/ssm/ssmAgentLatestVersion.js'), - 'ssmAgentAutoUpdateEnabled' : require(__dirname + '/plugins/aws/ssm/ssmAgentAutoUpdateEnabled'), - 'ssmDocumentPublicAccess' : require(__dirname + '/plugins/aws/ssm/ssmDocumentPublicAccess'), - 'ssmManagedInstances' : require(__dirname + '/plugins/aws/ssm/ssmManagedInstances'), - 'ssmSessionDuration' : require(__dirname + '/plugins/aws/ssm/ssmSessionDuration'), - - 'ledgerEncrypted' : require(__dirname + '/plugins/aws/qldb/ledgerEncrypted'), - 'ledgerHasTags' : require(__dirname + '/plugins/aws/qldb/ledgerHasTags'), - 'ledgerDeletionProtection' : require(__dirname + '/plugins/aws/qldb/ledgerDeletionProtection'), - - 'lambdaAdminPrivileges' : require(__dirname + '/plugins/aws/lambda/lambdaAdminPrivileges.js'), - 'envVarsClientSideEncryption' : require(__dirname + '/plugins/aws/lambda/envVarsClientSideEncryption.js'), - 'lambdaOldRuntimes' : require(__dirname + '/plugins/aws/lambda/lambdaOldRuntimes.js'), - 'lambdaVpcConfig' : require(__dirname + '/plugins/aws/lambda/lambdaVpcConfig.js'), - 'lambdaPublicAccess' : require(__dirname + '/plugins/aws/lambda/lambdaPublicAccess.js'), - 'lambdaCodeSigningEnabled' : require(__dirname + '/plugins/aws/lambda/lambdaCodeSigningEnabled.js'), - 'lambdaLogGroups' : require(__dirname + '/plugins/aws/lambda/lambdaLogGroups.js'), - 'lambdaTracingEnabled' : require(__dirname + '/plugins/aws/lambda/lambdaTracingEnabled.js'), - 'lambdaHasTags' : require(__dirname + '/plugins/aws/lambda/lambdaHasTags.js'), - 'lambdaDeadLetterQueue' : require(__dirname + '/plugins/aws/lambda/lambdaDeadLetterQueue.js'), - 'lambdaEnhancedMonitoring' : require(__dirname + '/plugins/aws/lambda/lambdaEnhancedMonitoring.js'), - 'lambdaUniqueExecutionRole' : require(__dirname + '/plugins/aws/lambda/lambdaUniqueExecutionRole.js'), - 'lambdaNetworkExposure' : require(__dirname + '/plugins/aws/lambda/lambdaNetworkExposure.js'), - 'lambdaPrivilegeAnalysis' : require(__dirname + '/plugins/aws/lambda/lambdaPrivilegeAnalysis.js'), - - 'webServerPublicAccess' : require(__dirname + '/plugins/aws/mwaa/webServerPublicAccess.js'), - 'environmentAdminPrivileges' : require(__dirname + '/plugins/aws/mwaa/environmentAdminPrivileges.js'), - 'environmentDataEncrypted' : require(__dirname + '/plugins/aws/mwaa/environmentDataEncrypted.js'), - - 'neptuneDBInstanceEncrypted' : require(__dirname + '/plugins/aws/neptune/neptuneDBInstanceEncrypted.js'), - 'neptuneDBMinorVersionUpgrade' : require(__dirname + '/plugins/aws/neptune/neptuneDBMinorVersionUpgrade.js'), + 'elasticacheClusterInVpc': require(__dirname + '/plugins/aws/elasticache/elasticacheClusterInVpc.js'), + 'elasticacheInstanceGeneration': require(__dirname + '/plugins/aws/elasticache/elasticacheInstanceGeneration.js'), + 'redisEngineVersions': require(__dirname + '/plugins/aws/elasticache/redisEngineVersions.js'), + 'elasticacheNodesCount': require(__dirname + '/plugins/aws/elasticache/elasticacheNodesCount.js'), + 'elasticacheRedisMultiAZ': require(__dirname + '/plugins/aws/elasticache/elasticacheRedisMultiAZ.js'), + 'idleElastiCacheNode': require(__dirname + '/plugins/aws/elasticache/idleElastiCacheNode.js'), + 'elasticaheDesiredNodeType': require(__dirname + '/plugins/aws/elasticache/elasticaheDesiredNodeType.js'), + 'elastiCacheClusterHasTags': require(__dirname + '/plugins/aws/elasticache/elasticCacheClusterHasTags.js'), + + 'domainAutoRenew': require(__dirname + '/plugins/aws/route53/domainAutoRenew.js'), + 'domainExpiry': require(__dirname + '/plugins/aws/route53/domainExpiry.js'), + 'route53InUse': require(__dirname + '/plugins/aws/route53/route53InUse.js'), + 'domainTransferLock': require(__dirname + '/plugins/aws/route53/domainTransferLock.js'), + 'danglingDnsRecords': require(__dirname + '/plugins/aws/route53/danglingDnsRecords.js'), + 'privacyProtection': require(__dirname + '/plugins/aws/route53/privacyProtection.js'), + 'senderPolicyFwInUse': require(__dirname + '/plugins/aws/route53/senderPolicyFwInUse.js'), + 'senderPolicyFwRecordPresent': require(__dirname + '/plugins/aws/route53/senderPolicyFwRecordPresent.js'), + + 'bucketEncryptionInTransit': require(__dirname + '/plugins/aws/s3/bucketEncryptionInTransit.js'), + 'bucketAllUsersPolicy': require(__dirname + '/plugins/aws/s3/bucketAllUsersPolicy.js'), + 'bucketAllUsersAcl': require(__dirname + '/plugins/aws/s3/bucketAllUsersAcl.js'), + 'bucketPolicyCloudFrontOai': require(__dirname + '/plugins/aws/s3/bucketPolicyCloudFrontOai.js'), + 'bucketVersioning': require(__dirname + '/plugins/aws/s3/bucketVersioning.js'), + 'bucketLogging': require(__dirname + '/plugins/aws/s3/bucketLogging.js'), + 's3Encryption': require(__dirname + '/plugins/aws/s3/s3Encryption.js'), + 'bucketPublicAccessBlock': require(__dirname + '/plugins/aws/s3/bucketPublicAccessBlock.js'), + 'bucketEncryption': require(__dirname + '/plugins/aws/s3/bucketEncryption.js'), + 'bucketWebsiteEnabled': require(__dirname + '/plugins/aws/s3/bucketWebsiteEnabled.js'), + 'bucketEnforceEncryption': require(__dirname + '/plugins/aws/s3/bucketEnforceEncryption.js'), + 'bucketSecureTransportEnabled': require(__dirname + '/plugins/aws/s3/bucketSecureTransportEnabled.js'), + 'bucketLifecycleConfiguration': require(__dirname + '/plugins/aws/s3/bucketLifecycleConfiguration'), + 'bucketTransferAcceleration': require(__dirname + '/plugins/aws/s3/bucketTransferAcceleration'), + 'bucketDnsCompliantName': require(__dirname + '/plugins/aws/s3/bucketDnsCompliantName.js'), + 'versionedBucketsLC': require(__dirname + '/plugins/aws/s3/versionedBucketsLC.js'), + 's3BucketHasTags': require(__dirname + '/plugins/aws/s3/s3BucketHasTags.js'), + 'bucketPolicyCloudFrontOac': require(__dirname + '/plugins/aws/s3/bucketPolicyCloudFrontOac.js'), + 'bucketMFADeleteEnabled': require(__dirname + '/plugins/aws/s3/bucketMFADeleteEnabled.js'), + 'objectLevelReadEventLogging': require(__dirname + '/plugins/aws/s3/objectLevelReadEventLogging.js'), + 'objectLevelWriteEventLogging': require(__dirname + '/plugins/aws/s3/objectLevelWriteEventLogging.js'), + 'notebookDataEncrypted': require(__dirname + '/plugins/aws/sagemaker/notebookDataEncrypted.js'), + 'notebookDirectInternetAccess': require(__dirname + '/plugins/aws/sagemaker/notebookDirectInternetAccess.js'), + 'notebookInstanceInVpc': require(__dirname + '/plugins/aws/sagemaker/notebookInstanceInVpc.js'), + + 'dkimEnabled': require(__dirname + '/plugins/aws/ses/dkimEnabled.js'), + 'emailMessagesEncrypted': require(__dirname + '/plugins/aws/ses/emailMessagesEncrypted.js'), + + 'topicEncrypted': require(__dirname + '/plugins/aws/sns/topicEncrypted.js'), + 'topicPolicies': require(__dirname + '/plugins/aws/sns/topicPolicies.js'), + 'topicCmkEncrypted': require(__dirname + '/plugins/aws/sns/topicCmkEncrypted.js'), + 'snsCrossAccount': require(__dirname + '/plugins/aws/sns/snsCrossAccount.js'), + 'snsValidSubscribers': require(__dirname + '/plugins/aws/sns/snsValidSubscribers.js'), + 'snsTopicHasTags': require(__dirname + '/plugins/aws/sns/snsTopicHasTags.js'), + 'snsTopicNoHttpPolicy': require(__dirname + '/plugins/aws/sns/snsTopicNoHttpPolicy.js'), + 'snsSubscriptionHTTPSonly': require(__dirname + '/plugins/aws/sns/snsSubscriptionHTTPSonly.js'), + + 'sqsCrossAccount': require(__dirname + '/plugins/aws/sqs/sqsCrossAccount.js'), + 'sqsHasTags': require(__dirname + '/plugins/aws/sqs/sqsHasTags.js'), + 'sqsDeadLetterQueue': require(__dirname + '/plugins/aws/sqs/sqsDeadLetterQueue.js'), + 'sqsEncrypted': require(__dirname + '/plugins/aws/sqs/sqsEncrypted.js'), + 'sqsPublicAccess': require(__dirname + '/plugins/aws/sqs/sqsPublicAccess.js'), + 'queueUnprocessedMessages': require(__dirname + '/plugins/aws/sqs/queueUnprocessedMessages.js'), + 'sqsEncryptionEnabled': require(__dirname + '/plugins/aws/sqs/sqsEncryptionEnabled.js'), + + 'ssmEncryptedParameters': require(__dirname + '/plugins/aws/ssm/ssmEncryptedParameters.js'), + 'ssmActiveOnAllInstances': require(__dirname + '/plugins/aws/ssm/ssmActiveOnAllInstances.js'), + 'ssmAgentLatestVersion': require(__dirname + '/plugins/aws/ssm/ssmAgentLatestVersion.js'), + 'ssmAgentAutoUpdateEnabled': require(__dirname + '/plugins/aws/ssm/ssmAgentAutoUpdateEnabled'), + 'ssmDocumentPublicAccess': require(__dirname + '/plugins/aws/ssm/ssmDocumentPublicAccess'), + 'ssmManagedInstances': require(__dirname + '/plugins/aws/ssm/ssmManagedInstances'), + 'ssmSessionDuration': require(__dirname + '/plugins/aws/ssm/ssmSessionDuration'), + + 'ledgerEncrypted': require(__dirname + '/plugins/aws/qldb/ledgerEncrypted'), + 'ledgerHasTags': require(__dirname + '/plugins/aws/qldb/ledgerHasTags'), + 'ledgerDeletionProtection': require(__dirname + '/plugins/aws/qldb/ledgerDeletionProtection'), + + 'lambdaAdminPrivileges': require(__dirname + '/plugins/aws/lambda/lambdaAdminPrivileges.js'), + 'envVarsClientSideEncryption': require(__dirname + '/plugins/aws/lambda/envVarsClientSideEncryption.js'), + 'lambdaOldRuntimes': require(__dirname + '/plugins/aws/lambda/lambdaOldRuntimes.js'), + 'lambdaVpcConfig': require(__dirname + '/plugins/aws/lambda/lambdaVpcConfig.js'), + 'lambdaPublicAccess': require(__dirname + '/plugins/aws/lambda/lambdaPublicAccess.js'), + 'lambdaCodeSigningEnabled': require(__dirname + '/plugins/aws/lambda/lambdaCodeSigningEnabled.js'), + 'lambdaLogGroups': require(__dirname + '/plugins/aws/lambda/lambdaLogGroups.js'), + 'lambdaTracingEnabled': require(__dirname + '/plugins/aws/lambda/lambdaTracingEnabled.js'), + 'lambdaHasTags': require(__dirname + '/plugins/aws/lambda/lambdaHasTags.js'), + 'lambdaDeadLetterQueue': require(__dirname + '/plugins/aws/lambda/lambdaDeadLetterQueue.js'), + 'lambdaEnhancedMonitoring': require(__dirname + '/plugins/aws/lambda/lambdaEnhancedMonitoring.js'), + 'lambdaUniqueExecutionRole': require(__dirname + '/plugins/aws/lambda/lambdaUniqueExecutionRole.js'), + 'lambdaNetworkExposure': require(__dirname + '/plugins/aws/lambda/lambdaNetworkExposure.js'), + 'lambdaPrivilegeAnalysis': require(__dirname + '/plugins/aws/lambda/lambdaPrivilegeAnalysis.js'), + 'lambdaEnvSecrets': require(__dirname + '/plugins/aws/lambda/lambdaEnvSecrets.js'), + + 'webServerPublicAccess': require(__dirname + '/plugins/aws/mwaa/webServerPublicAccess.js'), + 'environmentAdminPrivileges': require(__dirname + '/plugins/aws/mwaa/environmentAdminPrivileges.js'), + 'environmentDataEncrypted': require(__dirname + '/plugins/aws/mwaa/environmentDataEncrypted.js'), + + 'neptuneDBInstanceEncrypted': require(__dirname + '/plugins/aws/neptune/neptuneDBInstanceEncrypted.js'), + 'neptuneDBMinorVersionUpgrade': require(__dirname + '/plugins/aws/neptune/neptuneDBMinorVersionUpgrade.js'), 'neptuneInstanceBackupRetention': require(__dirname + '/plugins/aws/neptune/neptuneInstanceBackupRetention.js'), - 'neptuneDBMultiAz' : require(__dirname + '/plugins/aws/neptune/neptuneDBMultiAz.js'), - 'neptuneDbDeletionProtection' : require(__dirname + '/plugins/aws/neptune/neptuneDbDeletionProtection.js'), - 'neptuneDBIamAuth' : require(__dirname + '/plugins/aws/neptune/neptuneDBIamAuth.js'), - - 'monitoringMetrics' : require(__dirname + '/plugins/aws/cloudwatchlogs/monitoringMetrics.js'), - - 'customerProfilesDomainEncrypted' : require(__dirname + '/plugins/aws/connect/customerProfilesDomainEncrypted.js'), - 'wisdomDomainEncrypted' : require(__dirname + '/plugins/aws/connect/wisdomDomainEncrypted.js'), - 'voiceIdDomainEncrypted' : require(__dirname + '/plugins/aws/connect/voiceIdDomainEncrypted.js'), - - 'logRetentionPeriod' : require(__dirname + '/plugins/aws/cloudwatchlogs/logRetentionPeriod.js'), - 'logGroupsEncrypted' : require(__dirname + '/plugins/aws/cloudwatchlogs/logGroupsEncrypted.js'), - - 'vpcFlowLogsMetricAlarm' : require(__dirname + '/plugins/aws/cloudwatch/vpcFlowLogsMetricAlarm.js'), - - 'timestreamDatabaseEncrypted' : require(__dirname + '/plugins/aws/timestreamwrite/timestreamDatabaseEncrypted.js'), - - 'mqAutoMinorVersionUpgrade' : require(__dirname + '/plugins/aws/mq/mqAutoMinorVersionUpgrade.js'), - 'mqLogExports' : require(__dirname + '/plugins/aws/mq/mqLogExports.js'), - 'mqDeploymentMode' : require(__dirname + '/plugins/aws/mq/mqDeploymentMode.js'), - 'mqDesiredInstanceType' : require(__dirname + '/plugins/aws/mq/mqDesiredInstanceType.js'), - 'mqBrokerEncrypted' : require(__dirname + '/plugins/aws/mq/mqBrokerEncrypted.js'), - 'mqLatestEngineVersion' : require(__dirname + '/plugins/aws/mq/mqLatestEngineVersion.js'), - 'mqBrokerPublicAccess' : require(__dirname + '/plugins/aws/mq/mqBrokerPublicAccess.js'), - - 'memorydbClusterEncrypted' : require(__dirname + '/plugins/aws/memorydb/memorydbClusterEncrypted.js'), - - 'mskClusterCBEncryption' : require(__dirname + '/plugins/aws/msk/mskClusterCBEncryption.js'), - - 'mskClusterPublicAccess' : require(__dirname + '/plugins/aws/msk/mskClusterPublicAccess.js'), - 'mskClusterUnauthAccess' : require(__dirname + '/plugins/aws/msk/mskClusterUnauthAccess.js'), - 'mskClusterEncryptionAtRest' : require(__dirname + '/plugins/aws/msk/mskClusterEncryptionAtRest.js'), - 'mskClusterEncryptionInTransit' : require(__dirname + '/plugins/aws/msk/mskClusterEncryptionInTransit.js'), - - 'auditLoggingEnabled' : require(__dirname + '/plugins/aws/redshift/auditLoggingEnabled.js'), - 'redshiftClusterCmkEncrypted' : require(__dirname + '/plugins/aws/redshift/redshiftClusterCmkEncrypted.js'), - 'redshiftEncryptionEnabled' : require(__dirname + '/plugins/aws/redshift/redshiftEncryptionEnabled.js'), - 'redshiftPubliclyAccessible' : require(__dirname + '/plugins/aws/redshift/redshiftPubliclyAccessible.js'), - 'redshiftAllowVersionUpgrade' : require(__dirname + '/plugins/aws/redshift/redshiftAllowVersionUpgrade.js'), - 'redshiftSSLEnabled' : require(__dirname + '/plugins/aws/redshift/redshiftSSLEnabled.js'), - 'redshiftClusterInVpc' : require(__dirname + '/plugins/aws/redshift/redshiftClusterInVpc.js'), - 'redshiftClusterDefaultPort' : require(__dirname + '/plugins/aws/redshift/redshiftClusterDefaultPort.js'), - 'redshiftClusterMasterUsername' : require(__dirname + '/plugins/aws/redshift/redshiftClusterMasterUsername.js'), - 'snapshotRetentionPeriod' : require(__dirname + '/plugins/aws/redshift/snapshotRetentionPeriod.js'), - 'userActivityLoggingEnabled' : require(__dirname + '/plugins/aws/redshift/userActivityLoggingEnabled.js'), - 'redshiftNodesCount' : require(__dirname + '/plugins/aws/redshift/redshiftNodesCount.js'), - 'redshiftUnusedReservedNodes' : require(__dirname + '/plugins/aws/redshift/redshiftUnusedReservedNodes.js'), - 'redshiftDesiredNodeType' : require(__dirname + '/plugins/aws/redshift/redshiftDesiredNodeType.js'), - 'underutilizedRedshiftCluster' : require(__dirname + '/plugins/aws/redshift/underutilizedRedshiftCluster.js'), - - 'redisClusterEncryptionAtRest' : require(__dirname + '/plugins/aws/elasticache/redisClusterEncryptionAtRest.js'), - 'reservedNodePaymentPending.js' : require(__dirname + '/plugins/aws/elasticache/reservedNodePaymentPending.js'), - 'unusedElastiCacheReservedNode' : require(__dirname + '/plugins/aws/elasticache/unusedElastiCacheReservedNode.js'), - 'reservedNodePaymentFailed' : require(__dirname + '/plugins/aws/elasticache/reservedNodePaymentFailed.js'), - 'reservedNodeLeaseExpiration' : require(__dirname + '/plugins/aws/elasticache/reservedNodeLeaseExpiration.js'), - - 'transferLoggingEnabled' : require(__dirname + '/plugins/aws/transfer/transferLoggingEnabled.js'), - 'transferPrivateLinkInUse' : require(__dirname + '/plugins/aws/transfer/transferPrivateLinkInUse.js'), - - 'serviceEncrypted' : require(__dirname + '/plugins/aws/apprunner/serviceEncrypted.js'), - - 'secretRotationEnabled' : require(__dirname + '/plugins/aws/secretsmanager/secretRotationEnabled.js'), - 'secretsManagerEncrypted' : require(__dirname + '/plugins/aws/secretsmanager/secretsManagerEncrypted.js'), - 'secretsManagerInUse' : require(__dirname + '/plugins/aws/secretsmanager/secretsManagerInUse.js'), - 'secretHasTags' : require(__dirname + '/plugins/aws/secretsmanager/secretHasTags.js'), - - 'finspaceEnvironmentEncrypted' : require(__dirname + '/plugins/aws/finspace/finspaceEnvironmentEncrypted.js'), - - 'shieldAdvancedEnabled' : require(__dirname + '/plugins/aws/shield/shieldAdvancedEnabled.js'), - 'shieldEmergencyContacts' : require(__dirname + '/plugins/aws/shield/shieldEmergencyContacts.js'), - 'shieldProtections' : require(__dirname + '/plugins/aws/shield/shieldProtections.js'), - - 'enableAllFeatures' : require(__dirname + '/plugins/aws/organizations/enableAllFeatures.js'), - 'organizationInvite' : require(__dirname + '/plugins/aws/organizations/organizationInvite.js'), - - 'guardDutyEnabled' : require(__dirname + '/plugins/aws/guardduty/guarddutyEnabled.js'), - 'eksProtectionEnabled' : require(__dirname + '/plugins/aws/guardduty/eksProtectionEnabled.js'), - 'guardDutyMaster' : require(__dirname + '/plugins/aws/guardduty/guarddutyMaster.js'), - 'noActiveFindings' : require(__dirname + '/plugins/aws/guardduty/noActiveFindings'), - 's3ProtectionEnabled' : require(__dirname + '/plugins/aws/guardduty/s3ProtectionEnabled.js'), - 'rdsProtectionEnabled' : require(__dirname + '/plugins/aws/guardduty/rdsProtectionEnabled.js'), - 'exportedFindingsEncrypted' : require(__dirname + '/plugins/aws/guardduty/exportedFindingsEncrypted.js'), - 'lambdaProtectionEnabled' : require(__dirname + '/plugins/aws/guardduty/lambdaProtectionEnabled.js'), - - 'workspacesVolumeEncryption' : require(__dirname + '/plugins/aws/workspaces/workspacesVolumeEncryption.js'), - 'workSpacesHealthyInstances' : require(__dirname + '/plugins/aws/workspaces/workSpacesHealthyInstances.js'), - 'workspacesIpAccessControl' : require(__dirname + '/plugins/aws/workspaces/workspacesIpAccessControl.js'), - 'unusedWorkspaces' : require(__dirname + '/plugins/aws/workspaces/unusedWorkspaces.js'), - 'workspacesInstanceCount' : require(__dirname + '/plugins/aws/workspaces/workspacesInstanceCount.js'), - 'workspacesDesiredBundleType' : require(__dirname + '/plugins/aws/workspaces/workspacesDesiredBundleType.js'), - - 'xrayEncryptionEnabled' : require(__dirname + '/plugins/aws/xray/xrayEncryptionEnabled.js'), - - 'codebuildValidSourceProviders' : require(__dirname + '/plugins/aws/codebuild/codebuildValidSourceProviders.js'), - 'projectArtifactsEncrypted' : require(__dirname + '/plugins/aws/codebuild/projectArtifactsEncrypted.js'), - 'buildProjectEnvPriviligedMode' : require(__dirname + '/plugins/aws/codebuild/buildProjectEnvPriviligedMode.js'), + 'neptuneDBMultiAz': require(__dirname + '/plugins/aws/neptune/neptuneDBMultiAz.js'), + 'neptuneDbDeletionProtection': require(__dirname + '/plugins/aws/neptune/neptuneDbDeletionProtection.js'), + 'neptuneDBIamAuth': require(__dirname + '/plugins/aws/neptune/neptuneDBIamAuth.js'), + + 'monitoringMetrics': require(__dirname + '/plugins/aws/cloudwatchlogs/monitoringMetrics.js'), + + 'customerProfilesDomainEncrypted': require(__dirname + '/plugins/aws/connect/customerProfilesDomainEncrypted.js'), + 'wisdomDomainEncrypted': require(__dirname + '/plugins/aws/connect/wisdomDomainEncrypted.js'), + 'voiceIdDomainEncrypted': require(__dirname + '/plugins/aws/connect/voiceIdDomainEncrypted.js'), + + 'logRetentionPeriod': require(__dirname + '/plugins/aws/cloudwatchlogs/logRetentionPeriod.js'), + 'logGroupsEncrypted': require(__dirname + '/plugins/aws/cloudwatchlogs/logGroupsEncrypted.js'), + + 'vpcFlowLogsMetricAlarm': require(__dirname + '/plugins/aws/cloudwatch/vpcFlowLogsMetricAlarm.js'), + + 'timestreamDatabaseEncrypted': require(__dirname + '/plugins/aws/timestreamwrite/timestreamDatabaseEncrypted.js'), + + 'mqAutoMinorVersionUpgrade': require(__dirname + '/plugins/aws/mq/mqAutoMinorVersionUpgrade.js'), + 'mqLogExports': require(__dirname + '/plugins/aws/mq/mqLogExports.js'), + 'mqDeploymentMode': require(__dirname + '/plugins/aws/mq/mqDeploymentMode.js'), + 'mqDesiredInstanceType': require(__dirname + '/plugins/aws/mq/mqDesiredInstanceType.js'), + 'mqBrokerEncrypted': require(__dirname + '/plugins/aws/mq/mqBrokerEncrypted.js'), + 'mqLatestEngineVersion': require(__dirname + '/plugins/aws/mq/mqLatestEngineVersion.js'), + 'mqBrokerPublicAccess': require(__dirname + '/plugins/aws/mq/mqBrokerPublicAccess.js'), + + 'memorydbClusterEncrypted': require(__dirname + '/plugins/aws/memorydb/memorydbClusterEncrypted.js'), + + 'mskClusterCBEncryption': require(__dirname + '/plugins/aws/msk/mskClusterCBEncryption.js'), + + 'mskClusterPublicAccess': require(__dirname + '/plugins/aws/msk/mskClusterPublicAccess.js'), + 'mskClusterUnauthAccess': require(__dirname + '/plugins/aws/msk/mskClusterUnauthAccess.js'), + 'mskClusterEncryptionAtRest': require(__dirname + '/plugins/aws/msk/mskClusterEncryptionAtRest.js'), + 'mskClusterEncryptionInTransit': require(__dirname + '/plugins/aws/msk/mskClusterEncryptionInTransit.js'), + + 'auditLoggingEnabled': require(__dirname + '/plugins/aws/redshift/auditLoggingEnabled.js'), + 'redshiftClusterCmkEncrypted': require(__dirname + '/plugins/aws/redshift/redshiftClusterCmkEncrypted.js'), + 'redshiftEncryptionEnabled': require(__dirname + '/plugins/aws/redshift/redshiftEncryptionEnabled.js'), + 'redshiftPubliclyAccessible': require(__dirname + '/plugins/aws/redshift/redshiftPubliclyAccessible.js'), + 'redshiftAllowVersionUpgrade': require(__dirname + '/plugins/aws/redshift/redshiftAllowVersionUpgrade.js'), + 'redshiftSSLEnabled': require(__dirname + '/plugins/aws/redshift/redshiftSSLEnabled.js'), + 'redshiftClusterInVpc': require(__dirname + '/plugins/aws/redshift/redshiftClusterInVpc.js'), + 'redshiftClusterDefaultPort': require(__dirname + '/plugins/aws/redshift/redshiftClusterDefaultPort.js'), + 'redshiftClusterMasterUsername': require(__dirname + '/plugins/aws/redshift/redshiftClusterMasterUsername.js'), + 'snapshotRetentionPeriod': require(__dirname + '/plugins/aws/redshift/snapshotRetentionPeriod.js'), + 'userActivityLoggingEnabled': require(__dirname + '/plugins/aws/redshift/userActivityLoggingEnabled.js'), + 'redshiftNodesCount': require(__dirname + '/plugins/aws/redshift/redshiftNodesCount.js'), + 'redshiftUnusedReservedNodes': require(__dirname + '/plugins/aws/redshift/redshiftUnusedReservedNodes.js'), + 'redshiftDesiredNodeType': require(__dirname + '/plugins/aws/redshift/redshiftDesiredNodeType.js'), + 'underutilizedRedshiftCluster': require(__dirname + '/plugins/aws/redshift/underutilizedRedshiftCluster.js'), + + 'redisClusterEncryptionAtRest': require(__dirname + '/plugins/aws/elasticache/redisClusterEncryptionAtRest.js'), + 'reservedNodePaymentPending.js': require(__dirname + '/plugins/aws/elasticache/reservedNodePaymentPending.js'), + 'unusedElastiCacheReservedNode': require(__dirname + '/plugins/aws/elasticache/unusedElastiCacheReservedNode.js'), + 'reservedNodePaymentFailed': require(__dirname + '/plugins/aws/elasticache/reservedNodePaymentFailed.js'), + 'reservedNodeLeaseExpiration': require(__dirname + '/plugins/aws/elasticache/reservedNodeLeaseExpiration.js'), + + 'transferLoggingEnabled': require(__dirname + '/plugins/aws/transfer/transferLoggingEnabled.js'), + 'transferPrivateLinkInUse': require(__dirname + '/plugins/aws/transfer/transferPrivateLinkInUse.js'), + + 'serviceEncrypted': require(__dirname + '/plugins/aws/apprunner/serviceEncrypted.js'), + + 'secretRotationEnabled': require(__dirname + '/plugins/aws/secretsmanager/secretRotationEnabled.js'), + 'secretsManagerEncrypted': require(__dirname + '/plugins/aws/secretsmanager/secretsManagerEncrypted.js'), + 'secretsManagerInUse': require(__dirname + '/plugins/aws/secretsmanager/secretsManagerInUse.js'), + 'secretHasTags': require(__dirname + '/plugins/aws/secretsmanager/secretHasTags.js'), + + 'finspaceEnvironmentEncrypted': require(__dirname + '/plugins/aws/finspace/finspaceEnvironmentEncrypted.js'), + + 'shieldAdvancedEnabled': require(__dirname + '/plugins/aws/shield/shieldAdvancedEnabled.js'), + 'shieldEmergencyContacts': require(__dirname + '/plugins/aws/shield/shieldEmergencyContacts.js'), + 'shieldProtections': require(__dirname + '/plugins/aws/shield/shieldProtections.js'), + + 'enableAllFeatures': require(__dirname + '/plugins/aws/organizations/enableAllFeatures.js'), + 'organizationInvite': require(__dirname + '/plugins/aws/organizations/organizationInvite.js'), + + 'guardDutyEnabled': require(__dirname + '/plugins/aws/guardduty/guarddutyEnabled.js'), + 'eksProtectionEnabled': require(__dirname + '/plugins/aws/guardduty/eksProtectionEnabled.js'), + 'guardDutyMaster': require(__dirname + '/plugins/aws/guardduty/guarddutyMaster.js'), + 'noActiveFindings': require(__dirname + '/plugins/aws/guardduty/noActiveFindings'), + 's3ProtectionEnabled': require(__dirname + '/plugins/aws/guardduty/s3ProtectionEnabled.js'), + 'rdsProtectionEnabled': require(__dirname + '/plugins/aws/guardduty/rdsProtectionEnabled.js'), + 'exportedFindingsEncrypted': require(__dirname + '/plugins/aws/guardduty/exportedFindingsEncrypted.js'), + 'lambdaProtectionEnabled': require(__dirname + '/plugins/aws/guardduty/lambdaProtectionEnabled.js'), + + 'workspacesVolumeEncryption': require(__dirname + '/plugins/aws/workspaces/workspacesVolumeEncryption.js'), + 'workSpacesHealthyInstances': require(__dirname + '/plugins/aws/workspaces/workSpacesHealthyInstances.js'), + 'workspacesIpAccessControl': require(__dirname + '/plugins/aws/workspaces/workspacesIpAccessControl.js'), + 'unusedWorkspaces': require(__dirname + '/plugins/aws/workspaces/unusedWorkspaces.js'), + 'workspacesInstanceCount': require(__dirname + '/plugins/aws/workspaces/workspacesInstanceCount.js'), + 'workspacesDesiredBundleType': require(__dirname + '/plugins/aws/workspaces/workspacesDesiredBundleType.js'), + + 'xrayEncryptionEnabled': require(__dirname + '/plugins/aws/xray/xrayEncryptionEnabled.js'), + + 'codebuildValidSourceProviders': require(__dirname + '/plugins/aws/codebuild/codebuildValidSourceProviders.js'), + 'projectArtifactsEncrypted': require(__dirname + '/plugins/aws/codebuild/projectArtifactsEncrypted.js'), + 'buildProjectEnvPriviligedMode': require(__dirname + '/plugins/aws/codebuild/buildProjectEnvPriviligedMode.js'), 'codebuildProjectLoggingEnabled': require(__dirname + '/plugins/aws/codebuild/codebuildProjectLoggingEnabled.js'), - 'codestarValidRepoProviders' : require(__dirname + '/plugins/aws/codestar/codestarValidRepoProviders.js'), - 'codestarHasTags' : require(__dirname + '/plugins/aws/codestar/codestarHasTags.js'), + 'codestarValidRepoProviders': require(__dirname + '/plugins/aws/codestar/codestarValidRepoProviders.js'), + 'codestarHasTags': require(__dirname + '/plugins/aws/codestar/codestarHasTags.js'), - 'pipelineArtifactsEncrypted' : require(__dirname + '/plugins/aws/codepipeline/pipelineArtifactsEncrypted.js'), + 'pipelineArtifactsEncrypted': require(__dirname + '/plugins/aws/codepipeline/pipelineArtifactsEncrypted.js'), - 'dataStoreEncrypted' : require(__dirname + '/plugins/aws/healthlake/dataStoreEncrypted.js'), - 'dataStoreHasTags' : require(__dirname + '/plugins/aws/healthlake/dataStoreHasTags.js'), + 'dataStoreEncrypted': require(__dirname + '/plugins/aws/healthlake/dataStoreEncrypted.js'), + 'dataStoreHasTags': require(__dirname + '/plugins/aws/healthlake/dataStoreHasTags.js'), - 'codeartifactDomainEncrypted' : require(__dirname + '/plugins/aws/codeartifact/codeartifactDomainEncrypted.js'), + 'codeartifactDomainEncrypted': require(__dirname + '/plugins/aws/codeartifact/codeartifactDomainEncrypted.js'), - 'auditmanagerDataEncrypted' : require(__dirname + '/plugins/aws/auditmanager/auditmanagerDataEncrypted.js'), + 'auditmanagerDataEncrypted': require(__dirname + '/plugins/aws/auditmanager/auditmanagerDataEncrypted.js'), - 'flowEncrypted' : require(__dirname + '/plugins/aws/appflow/flowEncrypted.js'), + 'flowEncrypted': require(__dirname + '/plugins/aws/appflow/flowEncrypted.js'), - 'pipelineDataEncrypted' : require(__dirname + '/plugins/aws/elastictranscoder/pipelineDataEncrypted.js'), - 'jobOutputsEncrypted' : require(__dirname + '/plugins/aws/elastictranscoder/jobOutputsEncrypted.js'), + 'pipelineDataEncrypted': require(__dirname + '/plugins/aws/elastictranscoder/pipelineDataEncrypted.js'), + 'jobOutputsEncrypted': require(__dirname + '/plugins/aws/elastictranscoder/jobOutputsEncrypted.js'), - 'translateJobOutputEncrypted' : require(__dirname + '/plugins/aws/translate/translateJobOutputEncrypted.js'), + 'translateJobOutputEncrypted': require(__dirname + '/plugins/aws/translate/translateJobOutputEncrypted.js'), - 'databrewJobOutputEncrypted' : require(__dirname + '/plugins/aws/gluedatabrew/databrewJobOutputEncrypted.js'), + 'databrewJobOutputEncrypted': require(__dirname + '/plugins/aws/gluedatabrew/databrewJobOutputEncrypted.js'), - 'networkMemberDataEncrypted' : require(__dirname + '/plugins/aws/managedblockchain/networkMemberDataEncrypted.js'), - 'networkMemberCloudwatchLogs' : require(__dirname + '/plugins/aws/managedblockchain/networkMemberCloudwatchLogs.js'), + 'networkMemberDataEncrypted': require(__dirname + '/plugins/aws/managedblockchain/networkMemberDataEncrypted.js'), + 'networkMemberCloudwatchLogs': require(__dirname + '/plugins/aws/managedblockchain/networkMemberCloudwatchLogs.js'), - 'docdbClusterEncrypted' : require(__dirname + '/plugins/aws/documentDB/docdbClusterEncrypted.js'), - 'docDbHasTags' : require(__dirname + '/plugins/aws/documentDB/docDbHasTags.js'), + 'docdbClusterEncrypted': require(__dirname + '/plugins/aws/documentDB/docdbClusterEncrypted.js'), + 'docDbHasTags': require(__dirname + '/plugins/aws/documentDB/docDbHasTags.js'), 'docdbDeletionProtectionEnabled': require(__dirname + '/plugins/aws/documentDB/docdbDeletionProtectionEnabled.js'), - 'docdbClusterBackupRetention' : require(__dirname + '/plugins/aws/documentDB/docdbClusterBackupRetention.js'), - 'docdbCertificateRotated' : require(__dirname + '/plugins/aws/documentDB/docdbCertificateRotated.js'), - 'docdbClusterProfilerEnabled' : require(__dirname + '/plugins/aws/documentDB/docdbClusterProfilerEnabled.js'), - 'docdbEncryptionInTransit' : require(__dirname + '/plugins/aws/documentDB/docdbEncryptionInTransit.js'), - 'docdbAuditLoggingEnabled' : require(__dirname + '/plugins/aws/documentDB/docdbAuditLoggingEnabled.js'), - - 'instanceMediaStreamsEncrypted' : require(__dirname + '/plugins/aws/connect/instanceMediaStreamsEncrypted.js'), - 'instanceTranscriptsEncrypted' : require(__dirname + '/plugins/aws/connect/instanceTranscriptsEncrypted.js'), - 'instanceReportsEncrypted' : require(__dirname + '/plugins/aws/connect/instanceReportsEncrypted.js'), + 'docdbClusterBackupRetention': require(__dirname + '/plugins/aws/documentDB/docdbClusterBackupRetention.js'), + 'docdbCertificateRotated': require(__dirname + '/plugins/aws/documentDB/docdbCertificateRotated.js'), + 'docdbClusterProfilerEnabled': require(__dirname + '/plugins/aws/documentDB/docdbClusterProfilerEnabled.js'), + 'docdbEncryptionInTransit': require(__dirname + '/plugins/aws/documentDB/docdbEncryptionInTransit.js'), + 'docdbAuditLoggingEnabled': require(__dirname + '/plugins/aws/documentDB/docdbAuditLoggingEnabled.js'), + + 'instanceMediaStreamsEncrypted': require(__dirname + '/plugins/aws/connect/instanceMediaStreamsEncrypted.js'), + 'instanceTranscriptsEncrypted': require(__dirname + '/plugins/aws/connect/instanceTranscriptsEncrypted.js'), + 'instanceReportsEncrypted': require(__dirname + '/plugins/aws/connect/instanceReportsEncrypted.js'), 'instanceCallRecordingEncrypted': require(__dirname + '/plugins/aws/connect/instanceCallRecordingEncrypted.js'), - 'instanceAttachmentsEncrypted' : require(__dirname + '/plugins/aws/connect/instanceAttachmentsEncrypted.js'), + 'instanceAttachmentsEncrypted': require(__dirname + '/plugins/aws/connect/instanceAttachmentsEncrypted.js'), - 'backupVaultEncrypted' : require(__dirname + '/plugins/aws/backup/backupVaultEncrypted.js'), - 'backupResourceProtection' : require(__dirname + '/plugins/aws/backup/backupResourceProtection.js'), - 'backupInUseForRDSSnapshots' : require(__dirname + '/plugins/aws/backup/backupInUseForRDSSnapshots.js'), - 'backupNotificationEnabled' : require(__dirname + '/plugins/aws/backup/backupNotificationEnabled.js'), - 'backupDeletionProtection' : require(__dirname + '/plugins/aws/backup/backupDeletionProtection.js'), - 'compliantLifecycleConfigured' : require(__dirname + '/plugins/aws/backup/compliantLifecycleConfigured.js'), - 'backupVaultHasTags' : require(__dirname + '/plugins/aws/backup/backupVaultHasTags.js'), - 'backupVaultPolicies' : require(__dirname + '/plugins/aws/backup/backupVaultPolicies.js'), + 'backupVaultEncrypted': require(__dirname + '/plugins/aws/backup/backupVaultEncrypted.js'), + 'backupResourceProtection': require(__dirname + '/plugins/aws/backup/backupResourceProtection.js'), + 'backupInUseForRDSSnapshots': require(__dirname + '/plugins/aws/backup/backupInUseForRDSSnapshots.js'), + 'backupNotificationEnabled': require(__dirname + '/plugins/aws/backup/backupNotificationEnabled.js'), + 'backupDeletionProtection': require(__dirname + '/plugins/aws/backup/backupDeletionProtection.js'), + 'compliantLifecycleConfigured': require(__dirname + '/plugins/aws/backup/compliantLifecycleConfigured.js'), + 'backupVaultHasTags': require(__dirname + '/plugins/aws/backup/backupVaultHasTags.js'), + 'backupVaultPolicies': require(__dirname + '/plugins/aws/backup/backupVaultPolicies.js'), - 'equipmentdatasetEncrypted' : require(__dirname + '/plugins/aws/lookout/equipmentdatasetEncrypted.js'), + 'equipmentdatasetEncrypted': require(__dirname + '/plugins/aws/lookout/equipmentdatasetEncrypted.js'), - 'iotsitewiseDataEncrypted' : require(__dirname + '/plugins/aws/iotsitewise/iotsitewiseDataEncrypted.js'), + 'iotsitewiseDataEncrypted': require(__dirname + '/plugins/aws/iotsitewise/iotsitewiseDataEncrypted.js'), - 'trackerDataEncrypted' : require(__dirname + '/plugins/aws/location/trackerDataEncrypted.js'), - 'geoCollectionDataEncrypted' : require(__dirname + '/plugins/aws/location/geoCollectionDataEncrypted.js'), + 'trackerDataEncrypted': require(__dirname + '/plugins/aws/location/trackerDataEncrypted.js'), + 'geoCollectionDataEncrypted': require(__dirname + '/plugins/aws/location/geoCollectionDataEncrypted.js'), - 'modelDataEncrypted' : require(__dirname + '/plugins/aws/lookout/modelDataEncrypted.js'), - 'anomalyDetectorEncrypted' : require(__dirname + '/plugins/aws/lookout/anomalyDetectorEncrypted.js'), + 'modelDataEncrypted': require(__dirname + '/plugins/aws/lookout/modelDataEncrypted.js'), + 'anomalyDetectorEncrypted': require(__dirname + '/plugins/aws/lookout/anomalyDetectorEncrypted.js'), - 'lexAudioLogsEncrypted' : require(__dirname + '/plugins/aws/lex/lexAudioLogsEncrypted.js'), + 'lexAudioLogsEncrypted': require(__dirname + '/plugins/aws/lex/lexAudioLogsEncrypted.js'), - 'forecastDatasetEncrypted' : require(__dirname + '/plugins/aws/forecast/forecastDatasetEncrypted.js'), - 'datasetExportEncrypted' : require(__dirname + '/plugins/aws/forecast/datasetExportEncrypted.js'), + 'forecastDatasetEncrypted': require(__dirname + '/plugins/aws/forecast/forecastDatasetEncrypted.js'), + 'datasetExportEncrypted': require(__dirname + '/plugins/aws/forecast/datasetExportEncrypted.js'), - 'fsxFileSystemEncrypted' : require(__dirname + '/plugins/aws/fsx/fsxFileSystemEncrypted.js'), + 'fsxFileSystemEncrypted': require(__dirname + '/plugins/aws/fsx/fsxFileSystemEncrypted.js'), - 'wafv2InUse' : require(__dirname + '/plugins/aws/wafv2/wafv2InUse.js'), - 'wafv2WebAclLoggingEnabled' : require(__dirname + '/plugins/aws/wafv2/wafv2WebAclLoggingEnabled.js'), - 'wafv2CloudwatchMetricsEnabled' : require(__dirname + '/plugins/aws/wafv2/wafv2CloudwatchMetricsEnabled.js'), - 'aclRulesDefaultAction' : require(__dirname + '/plugins/aws/wafv2/aclRulesDefaultAction.js'), + 'wafv2InUse': require(__dirname + '/plugins/aws/wafv2/wafv2InUse.js'), + 'wafv2WebAclLoggingEnabled': require(__dirname + '/plugins/aws/wafv2/wafv2WebAclLoggingEnabled.js'), + 'wafv2CloudwatchMetricsEnabled': require(__dirname + '/plugins/aws/wafv2/wafv2CloudwatchMetricsEnabled.js'), + 'aclRulesDefaultAction': require(__dirname + '/plugins/aws/wafv2/aclRulesDefaultAction.js'), - 'wafInUse' : require(__dirname + '/plugins/aws/waf/wafInUse.js'), + 'wafInUse': require(__dirname + '/plugins/aws/waf/wafInUse.js'), - 'fraudDetectorDataEncrypted' : require(__dirname + '/plugins/aws/frauddetector/fraudDetectorDataEncrypted.js'), + 'fraudDetectorDataEncrypted': require(__dirname + '/plugins/aws/frauddetector/fraudDetectorDataEncrypted.js'), - 'ecsContainerInsightsEnabled' : require(__dirname + '/plugins/aws/ecs/ecsContainerInsightsEnabled.js'), - 'ecsClustersHaveTags' : require(__dirname + '/plugins/aws/ecs/ecsClustersHaveTags.js'), - 'ecsClusterWithActiveTask' : require(__dirname + '/plugins/aws/ecs/ecsClusterWithActiveTask.js'), - 'ecsClusterActiveService' : require(__dirname + '/plugins/aws/ecs/ecsClusterActiveService.js'), - 'ecsServicePublicIpDisabled' : require(__dirname + '/plugins/aws/ecs/ecsServicePublicIpDisabled.js'), - 'ecsFargatePlatformVersion' : require(__dirname + '/plugins/aws/ecs/ecsFargatePlatformVersion.js'), + 'ecsContainerInsightsEnabled': require(__dirname + '/plugins/aws/ecs/ecsContainerInsightsEnabled.js'), + 'ecsClustersHaveTags': require(__dirname + '/plugins/aws/ecs/ecsClustersHaveTags.js'), + 'ecsClusterWithActiveTask': require(__dirname + '/plugins/aws/ecs/ecsClusterWithActiveTask.js'), + 'ecsClusterActiveService': require(__dirname + '/plugins/aws/ecs/ecsClusterActiveService.js'), + 'ecsServicePublicIpDisabled': require(__dirname + '/plugins/aws/ecs/ecsServicePublicIpDisabled.js'), + 'ecsFargatePlatformVersion': require(__dirname + '/plugins/aws/ecs/ecsFargatePlatformVersion.js'), - 'cognitoHasWafEnabled' : require(__dirname + '/plugins/aws/cognito/cognitoHasWafEnabled.js'), - 'cognitoMFAEnabled' : require(__dirname + '/plugins/aws/cognito/cognitoMFAEnabled.js'), + 'cognitoHasWafEnabled': require(__dirname + '/plugins/aws/cognito/cognitoHasWafEnabled.js'), + 'cognitoMFAEnabled': require(__dirname + '/plugins/aws/cognito/cognitoMFAEnabled.js'), 'opensearchCollectionCmkEncrypted': require(__dirname + '/plugins/aws/openSearchServerless/opensearchCollectionCmkEncrypted.js'), 'opensearchCollectionPublicAccess': require(__dirname + '/plugins/aws/openSearchServerless/opensearchCollectionPublicAccess.js'), - 'securityHubEnabled' : require(__dirname + '/plugins/aws/securityhub/securityHubEnabled.js'), - 'securityHubActiveFindings' : require(__dirname + '/plugins/aws/securityhub/securityHubActiveFindings.js'), + 'securityHubEnabled': require(__dirname + '/plugins/aws/securityhub/securityHubEnabled.js'), + 'securityHubActiveFindings': require(__dirname + '/plugins/aws/securityhub/securityHubActiveFindings.js'), }, - azure : { - 'fileServiceEncryption' : require(__dirname + '/plugins/azure/storageaccounts/fileServiceEncryption.js'), - 'networkAccessDefaultAction' : require(__dirname + '/plugins/azure/storageaccounts/networkAccessDefaultAction.js'), - 'storageAccountsHttps' : require(__dirname + '/plugins/azure/storageaccounts/storageAccountsHttps.js'), - 'storageAccountsEncryption' : require(__dirname + '/plugins/azure/storageaccounts/storageAccountsEncryption.js'), - 'logStorageEncryption' : require(__dirname + '/plugins/azure/storageaccounts/logStorageEncryption.js'), - 'logContainerPublicAccess' : require(__dirname + '/plugins/azure/storageaccounts/logContainerPublicAccess.js'), - 'storageAccountsAADEnabled' : require(__dirname + '/plugins/azure/storageaccounts/storageAccountsAADEnabled.js'), - 'blobServiceEncryption' : require(__dirname + '/plugins/azure/storageaccounts/blobServiceEncryption.js'), - 'trustedMsAccessEnabled' : require(__dirname + '/plugins/azure/storageaccounts/trustedMsAccessEnabled.js'), - 'blobSoftDeletionEnabled' : require(__dirname + '/plugins/azure/storageaccounts/blobSoftDeletionEnabled.js'), - 'storageAccountsTlsVersion' : require(__dirname + '/plugins/azure/storageaccounts/storageAccountsTlsVersion.js'), - 'storageAccountHasTags' : require(__dirname + '/plugins/azure/storageaccounts/storageAccountHasTags.js'), - 'storageAccountPrivateEndpoint' : require(__dirname + '/plugins/azure/storageaccounts/storageAccountPrivateEndpoint.js'), - 'infrastructureEncryption' : require(__dirname + '/plugins/azure/storageaccounts/infrastructureEncryption.js'), - 'queueServiceLoggingEnabled' : require(__dirname + '/plugins/azure/storageaccounts/queueServiceLoggingEnabled.js'), - 'tableServiceLoggingEnabled' : require(__dirname + '/plugins/azure/storageaccounts/tableServiceLoggingEnabled.js'), - 'blobServiceLoggingEnabled' : require(__dirname + '/plugins/azure/storageaccounts/blobServiceLoggingEnabled.js'), + azure: { + 'fileServiceEncryption': require(__dirname + '/plugins/azure/storageaccounts/fileServiceEncryption.js'), + 'networkAccessDefaultAction': require(__dirname + '/plugins/azure/storageaccounts/networkAccessDefaultAction.js'), + 'storageAccountsHttps': require(__dirname + '/plugins/azure/storageaccounts/storageAccountsHttps.js'), + 'storageAccountsEncryption': require(__dirname + '/plugins/azure/storageaccounts/storageAccountsEncryption.js'), + 'logStorageEncryption': require(__dirname + '/plugins/azure/storageaccounts/logStorageEncryption.js'), + 'logContainerPublicAccess': require(__dirname + '/plugins/azure/storageaccounts/logContainerPublicAccess.js'), + 'storageAccountsAADEnabled': require(__dirname + '/plugins/azure/storageaccounts/storageAccountsAADEnabled.js'), + 'blobServiceEncryption': require(__dirname + '/plugins/azure/storageaccounts/blobServiceEncryption.js'), + 'trustedMsAccessEnabled': require(__dirname + '/plugins/azure/storageaccounts/trustedMsAccessEnabled.js'), + 'blobSoftDeletionEnabled': require(__dirname + '/plugins/azure/storageaccounts/blobSoftDeletionEnabled.js'), + 'storageAccountsTlsVersion': require(__dirname + '/plugins/azure/storageaccounts/storageAccountsTlsVersion.js'), + 'storageAccountHasTags': require(__dirname + '/plugins/azure/storageaccounts/storageAccountHasTags.js'), + 'storageAccountPrivateEndpoint': require(__dirname + '/plugins/azure/storageaccounts/storageAccountPrivateEndpoint.js'), + 'infrastructureEncryption': require(__dirname + '/plugins/azure/storageaccounts/infrastructureEncryption.js'), + 'queueServiceLoggingEnabled': require(__dirname + '/plugins/azure/storageaccounts/queueServiceLoggingEnabled.js'), + 'tableServiceLoggingEnabled': require(__dirname + '/plugins/azure/storageaccounts/tableServiceLoggingEnabled.js'), + 'blobServiceLoggingEnabled': require(__dirname + '/plugins/azure/storageaccounts/blobServiceLoggingEnabled.js'), 'storageAccountPublicNetworkAccess': require(__dirname + '/plugins/azure/storageaccounts/storageAccountPublicNetworkAccess.js'), - 'blobContainersPrivateAccess' : require(__dirname + '/plugins/azure/blobservice/blobContainersPrivateAccess.js'), - 'blobServiceImmutable' : require(__dirname + '/plugins/azure/blobservice/blobServiceImmutable.js'), - 'blobContainersCmkEncrypted' : require(__dirname + '/plugins/azure/blobservice/blobContainersCmkEncrypted.js'), - - 'fileServiceAllAccessAcl' : require(__dirname + '/plugins/azure/fileservice/fileServiceAllAccessAcl.js'), - 'tableServiceAllAccessAcl' : require(__dirname + '/plugins/azure/tableservice/tableServiceAllAccessAcl.js'), - 'queueServiceAllAccessAcl' : require(__dirname + '/plugins/azure/queueservice/queueServiceAllAccessAcl.js'), - - 'externalNetworkAccess' : require(__dirname + '/plugins/azure/containerapps/externalNetworkAccess.js'), - 'containerAppManagedIdentity' : require(__dirname + '/plugins/azure/containerapps/containerAppManagedIdentity.js'), - 'containerAppAuthEnabled' : require(__dirname + '/plugins/azure/containerapps/containerAppAuthEnabled.js'), - 'containerAppVolumeMount' : require(__dirname + '/plugins/azure/containerapps/containerAppVolumeMount.js'), - 'containerAppHttpsOnly' : require(__dirname + '/plugins/azure/containerapps/containerAppHttpsOnly.js'), - 'containerAppHasTags' : require(__dirname + '/plugins/azure/containerapps/containerAppHasTags.js'), - 'containerAppIPRestriction' : require(__dirname + '/plugins/azure/containerapps/containerAppIPRestriction.js'), - - 'mlWorkspaceHBI' : require(__dirname + '/plugins/azure/machinelearning/mlWorkspaceHBI.js'), - 'workspacePublicAccessDisabled' : require(__dirname + '/plugins/azure/machinelearning/workspacePublicAccessDisabled.js'), - 'mlWorkspaceCMKEncrypted' : require(__dirname + '/plugins/azure/machinelearning/mlWorkspaceCMKEncrypted.js'), - 'workspaceLoggingEnabled' : require(__dirname + '/plugins/azure/machinelearning/workspaceLoggingEnabled.js'), - 'mlRegistryHasTags' : require(__dirname + '/plugins/azure/machinelearning/mlRegistryHasTags.js'), - 'mlWorkspaceHasTags' : require(__dirname + '/plugins/azure/machinelearning/mlWorkspaceHasTags.js'), - 'mlRegistryPublicAccess' : require(__dirname + '/plugins/azure/machinelearning/mlRegistryPublicAccess.js'), - - - 'minimumTlsVersion' : require(__dirname + '/plugins/azure/redisCache/minimumTlsVersion.js'), - 'sslAccessOnlyEnabled' : require(__dirname + '/plugins/azure/redisCache/sslAccessOnlyEnabled.js'), - 'redisCacheHasTags' : require(__dirname + '/plugins/azure/redisCache/redisCacheHasTags.js'), - 'redisCachePrivateEndpoint' : require(__dirname + '/plugins/azure/redisCache/redisCachePrivateEndpoint.js'), - 'redisCacheManagedIdentity' : require(__dirname + '/plugins/azure/redisCache/redisCacheManagedIdentity.js'), - 'redisCacheDiagnosticLogs' : require(__dirname + '/plugins/azure/redisCache/redisCacheDiagnosticLogs.js'), - 'redisCacheScheduledUpdates' : require(__dirname + '/plugins/azure/redisCache/redisCacheScheduledUpdates.js'), - 'redisVersion' : require(__dirname + '/plugins/azure/redisCache/redisVersion.js'), - 'redisCacheVNetIntegrated' : require(__dirname + '/plugins/azure/redisCache/redisCacheVNetIntegrated.js'), - - 'multipleSubnets' : require(__dirname + '/plugins/azure/virtualnetworks/multipleSubnets.js'), - 'ddosStandardProtectionEnabled' : require(__dirname + '/plugins/azure/virtualnetworks/ddosStandardProtectionEnabled.js'), - 'noNetworkGatewaysInUse' : require(__dirname + '/plugins/azure/virtualnetworks/noNetworkGatewaysInUse.js'), - 'virtualNetworkPeering' : require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworkPeering.js'), - 'noGatewayConnections' : require(__dirname + '/plugins/azure/virtualnetworks/noGatewayConnections.js'), - 'managedNatGateway' : require(__dirname + '/plugins/azure/virtualnetworks/managedNatGateway.js'), - 'virtualNetworkHasTags' : require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworkHasTags.js'), - 'virtualNetworkFlowLogs' : require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworkFlowLogs.js'), - 'routeTableHasTags' : require(__dirname + '/plugins/azure/virtualnetworks/routeTableHasTags.js'), - 'virtualNetworksLoggingEnabled' : require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworksLoggingEnabled.js'), - 'publicIpDdosProtectionEnabled' : require(__dirname + '/plugins/azure/virtualnetworks/publicIpDdosProtectionEnabled.js'), - - 'vmInstanceLimit' : require(__dirname + '/plugins/azure/virtualmachines/vmInstanceLimit.js'), - 'classicInstances' : require(__dirname + '/plugins/azure/virtualmachines/classicInstances.js'), - 'vmAgentEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmAgentEnabled.js'), - 'vmDiskOSEncryption' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskOSEncryption.js'), - 'vmDiskDataEncryption' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskDataEncryption.js'), - 'vmEndpointProtection' : require(__dirname + '/plugins/azure/virtualmachines/vmEndpointProtection.js'), - 'vmAutoUpdateEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmAutoUpdateEnabled.js'), - 'vmAvailabilitySetEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmAvailabilitySetEnabled.js'), - 'vmAvailabilitySetLimit' : require(__dirname + '/plugins/azure/virtualmachines/vmAvailabilitySetLimit.js'), - 'vmDailyBackupRetention' : require(__dirname + '/plugins/azure/virtualmachines/vmDailyBackupRetention.js'), - 'vmBackupsEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmBackupsEnabled.js'), - 'premiumSsdDisabled' : require(__dirname + '/plugins/azure/virtualmachines/premiumSsdDisabled.js'), - 'vmManagedDisks' : require(__dirname + '/plugins/azure/virtualmachines/vmManagedDisks.js'), - 'acceleratedNetworkingEnabled' : require(__dirname + '/plugins/azure/virtualmachines/acceleratedNetworkingEnabled.js'), - 'passwordAuthDisabled' : require(__dirname + '/plugins/azure/virtualmachines/passwordAuthDisabled.js'), - 'approvedVmImage' : require(__dirname + '/plugins/azure/virtualmachines/approvedVmImage.js'), - 'noUnattachedDisks' : require(__dirname + '/plugins/azure/virtualmachines/noUnattachedDisks.js'), - 'instantRestoreRetention' : require(__dirname + '/plugins/azure/virtualmachines/instantRestoreRetention.js'), - 'desiredSkuSize' : require(__dirname + '/plugins/azure/virtualmachines/desiredSkuSize.js'), - 'approvedVmExtension' : require(__dirname + '/plugins/azure/virtualmachines/approvedVmExtension.js'), - 'guestLevelDiagnosticsEnabled' : require(__dirname + '/plugins/azure/virtualmachines/guestLevelDiagnosticsEnabled.js'), - 'oldVmDiskSnapshots' : require(__dirname + '/plugins/azure/virtualmachines/oldVmDiskSnapshots.js'), - 'vmAdAuthenticationEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmAdAuthenticationEnabled.js'), - 'performanceDiagnosticsEnabled' : require(__dirname + '/plugins/azure/virtualmachines/performanceDiagnosticsEnabled.js'), - 'vmBootDiagnosticsEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmBootDiagnosticsEnabled.js'), - 'diskByokEncryptionEnabled' : require(__dirname + '/plugins/azure/virtualmachines/diskByokEncryptionEnabled.js'), - 'vmImageHasTags' : require(__dirname + '/plugins/azure/virtualmachines/vmImageHasTags'), - 'vmHasTags' : require(__dirname + '/plugins/azure/virtualmachines/vmHasTags.js'), - 'vmDiskHasTags' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskHasTags.js'), - 'snapshotHasTags' : require(__dirname + '/plugins/azure/virtualmachines/snapshotHasTags.js'), + 'blobContainersPrivateAccess': require(__dirname + '/plugins/azure/blobservice/blobContainersPrivateAccess.js'), + 'blobServiceImmutable': require(__dirname + '/plugins/azure/blobservice/blobServiceImmutable.js'), + 'blobContainersCmkEncrypted': require(__dirname + '/plugins/azure/blobservice/blobContainersCmkEncrypted.js'), + + 'fileServiceAllAccessAcl': require(__dirname + '/plugins/azure/fileservice/fileServiceAllAccessAcl.js'), + 'tableServiceAllAccessAcl': require(__dirname + '/plugins/azure/tableservice/tableServiceAllAccessAcl.js'), + 'queueServiceAllAccessAcl': require(__dirname + '/plugins/azure/queueservice/queueServiceAllAccessAcl.js'), + + 'externalNetworkAccess': require(__dirname + '/plugins/azure/containerapps/externalNetworkAccess.js'), + 'containerAppManagedIdentity': require(__dirname + '/plugins/azure/containerapps/containerAppManagedIdentity.js'), + 'containerAppAuthEnabled': require(__dirname + '/plugins/azure/containerapps/containerAppAuthEnabled.js'), + 'containerAppVolumeMount': require(__dirname + '/plugins/azure/containerapps/containerAppVolumeMount.js'), + 'containerAppHttpsOnly': require(__dirname + '/plugins/azure/containerapps/containerAppHttpsOnly.js'), + 'containerAppHasTags': require(__dirname + '/plugins/azure/containerapps/containerAppHasTags.js'), + 'containerAppIPRestriction': require(__dirname + '/plugins/azure/containerapps/containerAppIPRestriction.js'), + + 'mlWorkspaceHBI': require(__dirname + '/plugins/azure/machinelearning/mlWorkspaceHBI.js'), + 'workspacePublicAccessDisabled': require(__dirname + '/plugins/azure/machinelearning/workspacePublicAccessDisabled.js'), + 'mlWorkspaceCMKEncrypted': require(__dirname + '/plugins/azure/machinelearning/mlWorkspaceCMKEncrypted.js'), + 'workspaceLoggingEnabled': require(__dirname + '/plugins/azure/machinelearning/workspaceLoggingEnabled.js'), + 'mlRegistryHasTags': require(__dirname + '/plugins/azure/machinelearning/mlRegistryHasTags.js'), + 'mlWorkspaceHasTags': require(__dirname + '/plugins/azure/machinelearning/mlWorkspaceHasTags.js'), + 'mlRegistryPublicAccess': require(__dirname + '/plugins/azure/machinelearning/mlRegistryPublicAccess.js'), + + + 'minimumTlsVersion': require(__dirname + '/plugins/azure/redisCache/minimumTlsVersion.js'), + 'sslAccessOnlyEnabled': require(__dirname + '/plugins/azure/redisCache/sslAccessOnlyEnabled.js'), + 'redisCacheHasTags': require(__dirname + '/plugins/azure/redisCache/redisCacheHasTags.js'), + 'redisCachePrivateEndpoint': require(__dirname + '/plugins/azure/redisCache/redisCachePrivateEndpoint.js'), + 'redisCacheManagedIdentity': require(__dirname + '/plugins/azure/redisCache/redisCacheManagedIdentity.js'), + 'redisCacheDiagnosticLogs': require(__dirname + '/plugins/azure/redisCache/redisCacheDiagnosticLogs.js'), + 'redisCacheScheduledUpdates': require(__dirname + '/plugins/azure/redisCache/redisCacheScheduledUpdates.js'), + 'redisVersion': require(__dirname + '/plugins/azure/redisCache/redisVersion.js'), + 'redisCacheVNetIntegrated': require(__dirname + '/plugins/azure/redisCache/redisCacheVNetIntegrated.js'), + + 'multipleSubnets': require(__dirname + '/plugins/azure/virtualnetworks/multipleSubnets.js'), + 'ddosStandardProtectionEnabled': require(__dirname + '/plugins/azure/virtualnetworks/ddosStandardProtectionEnabled.js'), + 'noNetworkGatewaysInUse': require(__dirname + '/plugins/azure/virtualnetworks/noNetworkGatewaysInUse.js'), + 'virtualNetworkPeering': require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworkPeering.js'), + 'noGatewayConnections': require(__dirname + '/plugins/azure/virtualnetworks/noGatewayConnections.js'), + 'managedNatGateway': require(__dirname + '/plugins/azure/virtualnetworks/managedNatGateway.js'), + 'virtualNetworkHasTags': require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworkHasTags.js'), + 'virtualNetworkFlowLogs': require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworkFlowLogs.js'), + 'routeTableHasTags': require(__dirname + '/plugins/azure/virtualnetworks/routeTableHasTags.js'), + 'virtualNetworksLoggingEnabled': require(__dirname + '/plugins/azure/virtualnetworks/virtualNetworksLoggingEnabled.js'), + 'publicIpDdosProtectionEnabled': require(__dirname + '/plugins/azure/virtualnetworks/publicIpDdosProtectionEnabled.js'), + + 'vmInstanceLimit': require(__dirname + '/plugins/azure/virtualmachines/vmInstanceLimit.js'), + 'classicInstances': require(__dirname + '/plugins/azure/virtualmachines/classicInstances.js'), + 'vmAgentEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmAgentEnabled.js'), + 'vmDiskOSEncryption': require(__dirname + '/plugins/azure/virtualmachines/vmDiskOSEncryption.js'), + 'vmDiskDataEncryption': require(__dirname + '/plugins/azure/virtualmachines/vmDiskDataEncryption.js'), + 'vmEndpointProtection': require(__dirname + '/plugins/azure/virtualmachines/vmEndpointProtection.js'), + 'vmAutoUpdateEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmAutoUpdateEnabled.js'), + 'vmAvailabilitySetEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmAvailabilitySetEnabled.js'), + 'vmAvailabilitySetLimit': require(__dirname + '/plugins/azure/virtualmachines/vmAvailabilitySetLimit.js'), + 'vmDailyBackupRetention': require(__dirname + '/plugins/azure/virtualmachines/vmDailyBackupRetention.js'), + 'vmBackupsEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmBackupsEnabled.js'), + 'premiumSsdDisabled': require(__dirname + '/plugins/azure/virtualmachines/premiumSsdDisabled.js'), + 'vmManagedDisks': require(__dirname + '/plugins/azure/virtualmachines/vmManagedDisks.js'), + 'acceleratedNetworkingEnabled': require(__dirname + '/plugins/azure/virtualmachines/acceleratedNetworkingEnabled.js'), + 'passwordAuthDisabled': require(__dirname + '/plugins/azure/virtualmachines/passwordAuthDisabled.js'), + 'approvedVmImage': require(__dirname + '/plugins/azure/virtualmachines/approvedVmImage.js'), + 'noUnattachedDisks': require(__dirname + '/plugins/azure/virtualmachines/noUnattachedDisks.js'), + 'instantRestoreRetention': require(__dirname + '/plugins/azure/virtualmachines/instantRestoreRetention.js'), + 'desiredSkuSize': require(__dirname + '/plugins/azure/virtualmachines/desiredSkuSize.js'), + 'approvedVmExtension': require(__dirname + '/plugins/azure/virtualmachines/approvedVmExtension.js'), + 'guestLevelDiagnosticsEnabled': require(__dirname + '/plugins/azure/virtualmachines/guestLevelDiagnosticsEnabled.js'), + 'oldVmDiskSnapshots': require(__dirname + '/plugins/azure/virtualmachines/oldVmDiskSnapshots.js'), + 'vmAdAuthenticationEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmAdAuthenticationEnabled.js'), + 'performanceDiagnosticsEnabled': require(__dirname + '/plugins/azure/virtualmachines/performanceDiagnosticsEnabled.js'), + 'vmBootDiagnosticsEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmBootDiagnosticsEnabled.js'), + 'diskByokEncryptionEnabled': require(__dirname + '/plugins/azure/virtualmachines/diskByokEncryptionEnabled.js'), + 'vmImageHasTags': require(__dirname + '/plugins/azure/virtualmachines/vmImageHasTags'), + 'vmHasTags': require(__dirname + '/plugins/azure/virtualmachines/vmHasTags.js'), + 'vmDiskHasTags': require(__dirname + '/plugins/azure/virtualmachines/vmDiskHasTags.js'), + 'snapshotHasTags': require(__dirname + '/plugins/azure/virtualmachines/snapshotHasTags.js'), 'unattachedDiskWithDefaultEncryption': require(__dirname + '/plugins/azure/virtualmachines/unattachedDiskWithDefaultEncryption.js'), 'unAttachedDiskByokEncryptionEnabled': require(__dirname + '/plugins/azure/virtualmachines/unAttachedDiskByokEncryptionEnabled.js'), - 'snapshotPublicAccessDisabled' : require(__dirname + '/plugins/azure/virtualmachines/snapshotPublicAccessDisabled.js'), - 'snapshotByokEncryptionEnabled' : require(__dirname + '/plugins/azure/virtualmachines/snapshotByokEncryptionEnabled.js'), - 'systemAssignedIdentityEnabled' : require(__dirname + '/plugins/azure/virtualmachines/systemAssignedIdentityEnabled.js'), - 'vmWindowsAntiMalwareExtension' : require(__dirname + '/plugins/azure/virtualmachines/vmWindowsAntiMalwareExtension.js'), - 'vmSecurityType' : require(__dirname + '/plugins/azure/virtualmachines/vmSecurityType.js'), - 'vmVTPMEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmVTPMEnabled.js'), - 'vmSecureBootEnabled' : require(__dirname + '/plugins/azure/virtualmachines/vmSecureBootEnabled.js'), - 'vmDiskDeleteConfig' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskDeleteConfig.js'), - 'vmDiskDoubleEncryption' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskDoubleEncryption.js'), - 'vmEncryptionAtHost' : require(__dirname + '/plugins/azure/virtualmachines/vmEncryptionAtHost.js'), - 'vmDiskCMKRotation' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskCMKRotation.js'), - 'vmDiskPublicAccess' : require(__dirname + '/plugins/azure/virtualmachines/vmDiskPublicAccess.js'), - 'computeGalleryRbacSharing' : require(__dirname + '/plugins/azure/virtualmachines/computeGalleryRbacSharing.js'), - 'vmPrivilegeAnalysis' : require(__dirname + '/plugins/azure/virtualmachines/vmPrivilegeAnalysis.js'), - 'vmNetworkExposure' : require(__dirname + '/plugins/azure/virtualmachines/vmNetworkExposure.js'), - - 'bastionHostExists' : require(__dirname + '/plugins/azure/bastion/bastionHostExists.js'), - 'bastionHostDiagnosticLogs' : require(__dirname + '/plugins/azure/bastion/bastionHostDiagnosticLogs.js'), - 'bastionHostHasTags' : require(__dirname + '/plugins/azure/bastion/bastionHostHasTags.js'), - - 'logProfileArchiveData' : require(__dirname + '/plugins/azure/monitor/logProfileArchiveData.js'), - 'logAnalyticsWorkspacePublic' : require(__dirname + '/plugins/azure/monitor/logAnalyticsWorkspacePublic.js'), - 'monitorLogsEnabled' : require(__dirname + '/plugins/azure/monitor/monitorLogsEnabled.js'), - 'diagnosticsCapturedCategories' : require(__dirname + '/plugins/azure/monitor/diagnosticsCapturedCategories.js'), - 'diagnosticsSettingsEnabled' : require(__dirname + '/plugins/azure/monitor/diagnosticsSettingsEnabled.js'), - 'resourceAppropriateSKU' : require(__dirname + '/plugins/azure/monitor/monitorResourceSku.js'), - - 'securityPolicyAlertsEnabled' : require(__dirname + '/plugins/azure/logalerts/securityPolicyAlertsEnabled.js'), - 'nsgLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/nsgLoggingEnabled.js'), - 'sqlServerFirewallRuleEnabled' : require(__dirname + '/plugins/azure/logalerts/sqlServerFirewallRuleEnabled.js'), - 'virtualNetworkRuleEnabled' : require(__dirname + '/plugins/azure/logalerts/virtualNetworkRuleEnabled.js'), - 'securitySolutionLogging' : require(__dirname + '/plugins/azure/logalerts/securitySolutionLogging.js'), - 'nsgRuleLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/nsgRuleLoggingEnabled.js'), - 'policyAssignmentLogging' : require(__dirname + '/plugins/azure/logalerts/policyAssignmentLogging.js'), - 'keyVaultsLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/keyVaultsLoggingEnabled.js'), - 'storageAccountLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/storageAccountLoggingEnabled.js'), - 'sqlServerDatabaseLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/sqlServerDatabaseLoggingEnabled.js'), - 'loadBalancerLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/loadBalancerLoggingEnabled.js'), - 'virtualMachineLogging' : require(__dirname + '/plugins/azure/logalerts/virtualMachineLogging.js'), - 'flexibleServerLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/flexibleServerLoggingEnabled.js'), + 'snapshotPublicAccessDisabled': require(__dirname + '/plugins/azure/virtualmachines/snapshotPublicAccessDisabled.js'), + 'snapshotByokEncryptionEnabled': require(__dirname + '/plugins/azure/virtualmachines/snapshotByokEncryptionEnabled.js'), + 'systemAssignedIdentityEnabled': require(__dirname + '/plugins/azure/virtualmachines/systemAssignedIdentityEnabled.js'), + 'vmWindowsAntiMalwareExtension': require(__dirname + '/plugins/azure/virtualmachines/vmWindowsAntiMalwareExtension.js'), + 'vmSecurityType': require(__dirname + '/plugins/azure/virtualmachines/vmSecurityType.js'), + 'vmVTPMEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmVTPMEnabled.js'), + 'vmSecureBootEnabled': require(__dirname + '/plugins/azure/virtualmachines/vmSecureBootEnabled.js'), + 'vmDiskDeleteConfig': require(__dirname + '/plugins/azure/virtualmachines/vmDiskDeleteConfig.js'), + 'vmDiskDoubleEncryption': require(__dirname + '/plugins/azure/virtualmachines/vmDiskDoubleEncryption.js'), + 'vmEncryptionAtHost': require(__dirname + '/plugins/azure/virtualmachines/vmEncryptionAtHost.js'), + 'vmDiskCMKRotation': require(__dirname + '/plugins/azure/virtualmachines/vmDiskCMKRotation.js'), + 'vmDiskPublicAccess': require(__dirname + '/plugins/azure/virtualmachines/vmDiskPublicAccess.js'), + 'computeGalleryRbacSharing': require(__dirname + '/plugins/azure/virtualmachines/computeGalleryRbacSharing.js'), + 'vmPrivilegeAnalysis': require(__dirname + '/plugins/azure/virtualmachines/vmPrivilegeAnalysis.js'), + 'vmNetworkExposure': require(__dirname + '/plugins/azure/virtualmachines/vmNetworkExposure.js'), + + 'bastionHostExists': require(__dirname + '/plugins/azure/bastion/bastionHostExists.js'), + 'bastionHostDiagnosticLogs': require(__dirname + '/plugins/azure/bastion/bastionHostDiagnosticLogs.js'), + 'bastionHostHasTags': require(__dirname + '/plugins/azure/bastion/bastionHostHasTags.js'), + + 'logProfileArchiveData': require(__dirname + '/plugins/azure/monitor/logProfileArchiveData.js'), + 'logAnalyticsWorkspacePublic': require(__dirname + '/plugins/azure/monitor/logAnalyticsWorkspacePublic.js'), + 'monitorLogsEnabled': require(__dirname + '/plugins/azure/monitor/monitorLogsEnabled.js'), + 'diagnosticsCapturedCategories': require(__dirname + '/plugins/azure/monitor/diagnosticsCapturedCategories.js'), + 'diagnosticsSettingsEnabled': require(__dirname + '/plugins/azure/monitor/diagnosticsSettingsEnabled.js'), + 'resourceAppropriateSKU': require(__dirname + '/plugins/azure/monitor/monitorResourceSku.js'), + + 'securityPolicyAlertsEnabled': require(__dirname + '/plugins/azure/logalerts/securityPolicyAlertsEnabled.js'), + 'nsgLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/nsgLoggingEnabled.js'), + 'sqlServerFirewallRuleEnabled': require(__dirname + '/plugins/azure/logalerts/sqlServerFirewallRuleEnabled.js'), + 'virtualNetworkRuleEnabled': require(__dirname + '/plugins/azure/logalerts/virtualNetworkRuleEnabled.js'), + 'securitySolutionLogging': require(__dirname + '/plugins/azure/logalerts/securitySolutionLogging.js'), + 'nsgRuleLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/nsgRuleLoggingEnabled.js'), + 'policyAssignmentLogging': require(__dirname + '/plugins/azure/logalerts/policyAssignmentLogging.js'), + 'keyVaultsLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/keyVaultsLoggingEnabled.js'), + 'storageAccountLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/storageAccountLoggingEnabled.js'), + 'sqlServerDatabaseLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/sqlServerDatabaseLoggingEnabled.js'), + 'loadBalancerLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/loadBalancerLoggingEnabled.js'), + 'virtualMachineLogging': require(__dirname + '/plugins/azure/logalerts/virtualMachineLogging.js'), + 'flexibleServerLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/flexibleServerLoggingEnabled.js'), 'mysqlFlexibleServerLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/mysqlFlexibleServerLoggingEnabled.js'), - 'postgreSqlDBLoggingEnabled' : require(__dirname + '/plugins/azure/logalerts/postgreSqlDBLoggingEnabled.js'), - 'sqlServerDatabaseRenameAlert' : require(__dirname + '/plugins/azure/logalerts/sqlServerDatabaseRenameAlert.js'), - 'virtualMachinesPowerOffAlert' : require(__dirname + '/plugins/azure/logalerts/virtualMachinesPowerOffAlert.js'), + 'postgreSqlDBLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/postgreSqlDBLoggingEnabled.js'), + 'sqlServerDatabaseRenameAlert': require(__dirname + '/plugins/azure/logalerts/sqlServerDatabaseRenameAlert.js'), + 'virtualMachinesPowerOffAlert': require(__dirname + '/plugins/azure/logalerts/virtualMachinesPowerOffAlert.js'), 'virtualMachinesDeallocateAlert': require(__dirname + '/plugins/azure/logalerts/virtualMachinesDeallocateAlert.js'), - 'publicIpAddressLoggingEnabled' : require(__dirname+ '/plugins/azure/logalerts/publicIpAddressLoggingEnabled.js'), - - 'monitorBlobEncryption' : require(__dirname + '/plugins/azure/securitycenter/monitorBlobEncryption.js'), - 'monitorVMVulnerability' : require(__dirname + '/plugins/azure/securitycenter/monitorVMVulnerability.js'), - 'monitorSQLEncryption' : require(__dirname + '/plugins/azure/securitycenter/monitorSqlEncryption.js'), - 'monitorSQLAuditing' : require(__dirname + '/plugins/azure/securitycenter/monitorSqlAuditing.js'), - 'monitorDiskEncryption' : require(__dirname + '/plugins/azure/securitycenter/monitorDiskEncryption.js'), - 'adminSecurityAlertsEnabled' : require(__dirname + '/plugins/azure/securitycenter/adminSecurityAlertsEnabled.js'), - 'monitorNsgEnabled' : require(__dirname + '/plugins/azure/securitycenter/monitorNsgEnabled.js'), - - 'resourceAllowedLocations' : require(__dirname + '/plugins/azure/policyservice/resourceAllowedLocations.js'), - 'resourceLocationMatch' : require(__dirname + '/plugins/azure/policyservice/resourceLocationMatch.js'), - - 'mysqlFlexibleServerHasTags' : require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerHasTags.js'), - 'enforceMySQLSSLConnection' : require(__dirname + '/plugins/azure/mysqlserver/enforceMySQLSSLConnection.js'), - 'mysqlFlexibleServersMinTls' : require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServersMinTls.js'), - 'mysqlFlexibleServerVersion' : require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerVersion.js'), - 'mysqlServerHasTags' : require(__dirname + '/plugins/azure/mysqlserver/mysqlServerHasTags.js'), + 'publicIpAddressLoggingEnabled': require(__dirname + '/plugins/azure/logalerts/publicIpAddressLoggingEnabled.js'), + + 'monitorBlobEncryption': require(__dirname + '/plugins/azure/securitycenter/monitorBlobEncryption.js'), + 'monitorVMVulnerability': require(__dirname + '/plugins/azure/securitycenter/monitorVMVulnerability.js'), + 'monitorSQLEncryption': require(__dirname + '/plugins/azure/securitycenter/monitorSqlEncryption.js'), + 'monitorSQLAuditing': require(__dirname + '/plugins/azure/securitycenter/monitorSqlAuditing.js'), + 'monitorDiskEncryption': require(__dirname + '/plugins/azure/securitycenter/monitorDiskEncryption.js'), + 'adminSecurityAlertsEnabled': require(__dirname + '/plugins/azure/securitycenter/adminSecurityAlertsEnabled.js'), + 'monitorNsgEnabled': require(__dirname + '/plugins/azure/securitycenter/monitorNsgEnabled.js'), + + 'resourceAllowedLocations': require(__dirname + '/plugins/azure/policyservice/resourceAllowedLocations.js'), + 'resourceLocationMatch': require(__dirname + '/plugins/azure/policyservice/resourceLocationMatch.js'), + + 'mysqlFlexibleServerHasTags': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerHasTags.js'), + 'enforceMySQLSSLConnection': require(__dirname + '/plugins/azure/mysqlserver/enforceMySQLSSLConnection.js'), + 'mysqlFlexibleServersMinTls': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServersMinTls.js'), + 'mysqlFlexibleServerVersion': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerVersion.js'), + 'mysqlServerHasTags': require(__dirname + '/plugins/azure/mysqlserver/mysqlServerHasTags.js'), 'mysqlFlexibleServerCMKEncrypted': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerCMKEncrypted.js'), 'mysqlFlexibleServerPublicAccess': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerPublicAccess.js'), 'mysqlFlexibleServerDignosticLogs': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerDignosticLogs.js'), - 'mysqlFlexibleServerIdentity' : require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerIdentity.js'), - - 'logRetentionDays' : require(__dirname + '/plugins/azure/postgresqlserver/logRetentionDays.js'), - 'connectionThrottlingEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/connectionThrottlingEnabled.js'), - 'logDurationEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/logDurationEnabled.js'), - 'postgresqlCMKEncrypted' : require(__dirname + '/plugins/azure/postgresqlserver/postgresqlCMKEncrypted.js'), - 'logDisconnectionsEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/logDisconnectionsEnabled.js'), - 'logConnectionsEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/logConnectionsEnabled.js'), - 'logCheckpointsEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/logCheckpointsEnabled.js'), - 'enforcePostgresSSLConnection' : require(__dirname + '/plugins/azure/postgresqlserver/enforcePostgresSSLConnection.js'), - 'storageAutoGrowthEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/storageAutoGrowthEnabled.js'), - 'activeDirectoryAdminEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/activeDirectoryAdminEnabled.js'), - 'geoRedundantBackupEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/geoRedundantBackupEnabled.js'), - 'postgresqlServerHasTags' : require(__dirname + '/plugins/azure/postgresqlserver/postgresqlServerHasTags.js'), + 'mysqlFlexibleServerIdentity': require(__dirname + '/plugins/azure/mysqlserver/mysqlFlexibleServerIdentity.js'), + + 'logRetentionDays': require(__dirname + '/plugins/azure/postgresqlserver/logRetentionDays.js'), + 'connectionThrottlingEnabled': require(__dirname + '/plugins/azure/postgresqlserver/connectionThrottlingEnabled.js'), + 'logDurationEnabled': require(__dirname + '/plugins/azure/postgresqlserver/logDurationEnabled.js'), + 'postgresqlCMKEncrypted': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlCMKEncrypted.js'), + 'logDisconnectionsEnabled': require(__dirname + '/plugins/azure/postgresqlserver/logDisconnectionsEnabled.js'), + 'logConnectionsEnabled': require(__dirname + '/plugins/azure/postgresqlserver/logConnectionsEnabled.js'), + 'logCheckpointsEnabled': require(__dirname + '/plugins/azure/postgresqlserver/logCheckpointsEnabled.js'), + 'enforcePostgresSSLConnection': require(__dirname + '/plugins/azure/postgresqlserver/enforcePostgresSSLConnection.js'), + 'storageAutoGrowthEnabled': require(__dirname + '/plugins/azure/postgresqlserver/storageAutoGrowthEnabled.js'), + 'activeDirectoryAdminEnabled': require(__dirname + '/plugins/azure/postgresqlserver/activeDirectoryAdminEnabled.js'), + 'geoRedundantBackupEnabled': require(__dirname + '/plugins/azure/postgresqlserver/geoRedundantBackupEnabled.js'), + 'postgresqlServerHasTags': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlServerHasTags.js'), 'postgresqlInfraDoubleEncryption': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlInfraDoubleEncryption.js'), - 'postgresqlPrivateEndpoints' : require(__dirname + '/plugins/azure/postgresqlserver/postgresqlPrivateEndpoints.js'), - 'azureServicesAccessDisabled' : require(__dirname + '/plugins/azure/postgresqlserver/azureServicesAccessDisabled.js'), - 'postgresqlTlsVersion' : require(__dirname + '/plugins/azure/postgresqlserver/postgresqlTlsVersion.js'), - 'postgresqlServerPublicAccess' : require(__dirname + '/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.js'), + 'postgresqlPrivateEndpoints': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlPrivateEndpoints.js'), + 'azureServicesAccessDisabled': require(__dirname + '/plugins/azure/postgresqlserver/azureServicesAccessDisabled.js'), + 'postgresqlTlsVersion': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlTlsVersion.js'), + 'postgresqlServerPublicAccess': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.js'), 'postgresqlFlexibleServerPublicAccess': require(__dirname + '/plugins/azure/postgresqlserver/postgresqlFlexibleServerPublicAccess.js'), - 'flexibleServerPrivateAccess' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerPrivateAccess'), - 'diagnosticLoggingEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/diagnosticLoggingEnabled.js'), + 'flexibleServerPrivateAccess': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerPrivateAccess'), + 'diagnosticLoggingEnabled': require(__dirname + '/plugins/azure/postgresqlserver/diagnosticLoggingEnabled.js'), 'flexibleServerLogDisconnections': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerLogDisconnections.js'), - 'flexibleServerSCRAMEnabled' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerSCRAMEnabled.js'), - 'flexibleServerVNetIntegrated' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerVNetIntegrated.js'), - 'flexibleServerDiagnosticLogs' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerDiagnosticLogs.js'), - 'flexibleServerPrivateDns' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerPrivateDns.js'), - 'flexibleServerVersion' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerVersion.js'), - 'flexibleServerLogDuration' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerLogDuration.js'), + 'flexibleServerSCRAMEnabled': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerSCRAMEnabled.js'), + 'flexibleServerVNetIntegrated': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerVNetIntegrated.js'), + 'flexibleServerDiagnosticLogs': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerDiagnosticLogs.js'), + 'flexibleServerPrivateDns': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerPrivateDns.js'), + 'flexibleServerVersion': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerVersion.js'), + 'flexibleServerLogDuration': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerLogDuration.js'), 'flexibleServerConnectionThrottle': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerConnectionThrottle.js'), - 'flexibleServerATP' : require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerATP.js'), - - 'openOracleAutoDataWarehouse' : require(__dirname + '/plugins/azure/networksecuritygroups/openOracleAutoDataWarehouse.js'), - 'nsgFlowLogsEnabled' : require(__dirname + '/plugins/azure/networksecuritygroups/nsgFlowLogsEnabled.js'), - 'nsgFlowLogsRetentionPeriod' : require(__dirname + '/plugins/azure/networksecuritygroups/nsgFlowLogsRetentionPeriod.js'), - 'excessiveSecurityGroups' : require(__dirname + '/plugins/azure/networksecuritygroups/excessiveSecurityGroups.js'), - 'defaultSecurityGroup' : require(__dirname + '/plugins/azure/networksecuritygroups/defaultSecurityGroup.js'), - 'openAllPorts' : require(__dirname + '/plugins/azure/networksecuritygroups/openAllPorts.js'), - 'openSMTP' : require(__dirname + '/plugins/azure/networksecuritygroups/openSMTP.js'), - 'openOracle' : require(__dirname + '/plugins/azure/networksecuritygroups/openOracle.js'), - 'openKibana' : require(__dirname + '/plugins/azure/networksecuritygroups/openKibana.js'), - 'openHadoopNameNode' : require(__dirname + '/plugins/azure/networksecuritygroups/openHadoopNameNode.js'), - 'openHadoopNameNodeWebUI' : require(__dirname + '/plugins/azure/networksecuritygroups/openHadoopNameNodeWebUI.js'), - 'openFTP' : require(__dirname + '/plugins/azure/networksecuritygroups/openFTP.js'), - 'openSSH' : require(__dirname + '/plugins/azure/networksecuritygroups/openSSH.js'), - 'openCIFS' : require(__dirname + '/plugins/azure/networksecuritygroups/openCIFS.js'), - 'openDocker' : require(__dirname + '/plugins/azure/networksecuritygroups/openDocker.js'), - 'openDNS' : require(__dirname + '/plugins/azure/networksecuritygroups/openDNS.js'), - 'openRDP' : require(__dirname + '/plugins/azure/networksecuritygroups/openRDP.js'), - 'openTelnet' : require(__dirname + '/plugins/azure/networksecuritygroups/openTelnet.js'), - 'openVNCServer' : require(__dirname + '/plugins/azure/networksecuritygroups/openVNCServer.js'), - 'openVNCClient' : require(__dirname + '/plugins/azure/networksecuritygroups/openVNCClient.js'), - 'openMySQL' : require(__dirname + '/plugins/azure/networksecuritygroups/openMySQL.js'), - 'openNetBIOS' : require(__dirname + '/plugins/azure/networksecuritygroups/openNetBIOS.js'), - 'openPostgreSQL' : require(__dirname + '/plugins/azure/networksecuritygroups/openPostgreSQL.js'), - 'openRPC' : require(__dirname + '/plugins/azure/networksecuritygroups/openRPC.js'), - 'openSalt' : require(__dirname + '/plugins/azure/networksecuritygroups/openSalt.js'), - 'openSMBoTCP' : require(__dirname + '/plugins/azure/networksecuritygroups/openSMBoTCP.js'), - 'openSQLServer' : require(__dirname + '/plugins/azure/networksecuritygroups/openSQLServer.js'), - 'openUDP' : require(__dirname + '/plugins/azure/networksecuritygroups/openUDP.js'), - 'openSNMP' : require(__dirname + '/plugins/azure/networksecuritygroups/openSNMP.js'), - 'openRedis' : require(__dirname + '/plugins/azure/networksecuritygroups/openRedis.js'), - 'openMongoDB' : require(__dirname + '/plugins/azure/networksecuritygroups/openMongoDB.js'), - 'openMemcached' : require(__dirname + '/plugins/azure/networksecuritygroups/openMemcached.js'), - 'openLDAPS' : require(__dirname + '/plugins/azure/networksecuritygroups/openLDAPS.js'), - 'openLDAP' : require(__dirname + '/plugins/azure/networksecuritygroups/openLDAP.js'), - 'openInternalWeb' : require(__dirname + '/plugins/azure/networksecuritygroups/openInternalWeb.js'), - 'openElasticsearch' : require(__dirname + '/plugins/azure/networksecuritygroups/openElasticsearch.js'), - 'openCassandraClient' : require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraClient.js'), - 'openCassandraInternode' : require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraInternode.js'), - 'openCassandraMonitoring' : require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraMonitoring.js'), - 'openCassandraThrift' : require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraThrift.js'), - 'openHTTP' : require(__dirname + '/plugins/azure/networksecuritygroups/openHTTP.js'), - 'openHTTPS' : require(__dirname + '/plugins/azure/networksecuritygroups/openHTTPS.js'), - 'nsgLogAnalyticsEnabled' : require(__dirname + '/plugins/azure/networksecuritygroups/nsgLogAnalyticsEnabled.js'), - - 'networkWatcherEnabled' : require(__dirname + '/plugins/azure/networkwatchers/networkWatcherEnabled.js'), - - 'resourceUsageLimit' : require(__dirname + '/plugins/azure/resources/resourceUsageLimit.js'), - 'managementLockEnabled' : require(__dirname + '/plugins/azure/resources/managementLockEnabled.js'), - - 'emailAccountAdminsEnabled' : require(__dirname + '/plugins/azure/sqlserver/emailAccountAdminsEnabled.js'), - 'sendAlertsEnabled' : require(__dirname + '/plugins/azure/sqlserver/sendAlertsEnabled.js'), - 'advancedDataSecurityEnabled' : require(__dirname + '/plugins/azure/sqlserver/advancedDataSecurityEnabled.js'), - 'tdeProtectorEncrypted' : require(__dirname + '/plugins/azure/sqlserver/tdeProtectorEncrypted.js'), - 'noPublicAccess' : require(__dirname + '/plugins/azure/sqlserver/noPublicAccess.js'), - 'serverPrivateEndpoints' : require(__dirname + '/plugins/azure/sqlserver/serverPrivateEndpoints.js'), - 'auditRetentionPolicy' : require(__dirname + '/plugins/azure/sqlserver/auditRetentionPolicy.js'), - 'auditActionGroupsEnabled' : require(__dirname + '/plugins/azure/sqlserver/auditActionGroupsEnabled.js'), - 'serverAuditingEnabled' : require(__dirname + '/plugins/azure/sqlserver/serverAuditingEnabled.js'), - 'azureADAdminEnabled' : require(__dirname + '/plugins/azure/sqlserver/azureADAdminEnabled.js'), - 'sqlServerTlsVersion' : require(__dirname + '/plugins/azure/sqlserver/sqlServerTlsVersion.js'), - 'autoFailoverGroupsEnabled' : require(__dirname + '/plugins/azure/sqlserver/autoFailoverGroupsEnabled.js'), - 'automaticTuningEnabled' : require(__dirname + '/plugins/azure/sqlserver/automaticTuningEnabled.js'), - 'enableATP' : require(__dirname + '/plugins/azure/sqlserver/enableATP.js'), - 'serverSendEmailToAdmins' : require(__dirname + '/plugins/azure/sqlserver/serverSendEmailToAdmins.js'), - 'sqlServerRecurringScans' : require(__dirname + '/plugins/azure/sqlserver/sqlServerRecurringScans.js'), - 'sqlServerSendScanReports' : require(__dirname + '/plugins/azure/sqlserver/sqlServerSendScanReports.js'), - 'sqlServerHasTags' : require(__dirname + '/plugins/azure/sqlserver/sqlServerHasTags.js'), - 'restrictOutboundNetworking' : require(__dirname + '/plugins/azure/sqlserver/restrictOutboundNetworking.js'), - 'auditOperationsEnabled' : require(__dirname + '/plugins/azure/sqlserver/auditOperationsEnabled.js'), - 'serverConnectionPolicy' : require(__dirname + '/plugins/azure/sqlserver/serverConnectionPolicy.js'), - 'auditStorageAuthType' : require(__dirname + '/plugins/azure/sqlserver/auditStorageAuthType.js'), - 'sqlServerVNetRuleIntegrated' : require(__dirname + '/plugins/azure/sqlserver/sqlServerVNetRuleIntegrated.js'), + 'flexibleServerATP': require(__dirname + '/plugins/azure/postgresqlserver/flexibleServerATP.js'), + + 'openOracleAutoDataWarehouse': require(__dirname + '/plugins/azure/networksecuritygroups/openOracleAutoDataWarehouse.js'), + 'nsgFlowLogsEnabled': require(__dirname + '/plugins/azure/networksecuritygroups/nsgFlowLogsEnabled.js'), + 'nsgFlowLogsRetentionPeriod': require(__dirname + '/plugins/azure/networksecuritygroups/nsgFlowLogsRetentionPeriod.js'), + 'excessiveSecurityGroups': require(__dirname + '/plugins/azure/networksecuritygroups/excessiveSecurityGroups.js'), + 'defaultSecurityGroup': require(__dirname + '/plugins/azure/networksecuritygroups/defaultSecurityGroup.js'), + 'openAllPorts': require(__dirname + '/plugins/azure/networksecuritygroups/openAllPorts.js'), + 'openSMTP': require(__dirname + '/plugins/azure/networksecuritygroups/openSMTP.js'), + 'openOracle': require(__dirname + '/plugins/azure/networksecuritygroups/openOracle.js'), + 'openKibana': require(__dirname + '/plugins/azure/networksecuritygroups/openKibana.js'), + 'openHadoopNameNode': require(__dirname + '/plugins/azure/networksecuritygroups/openHadoopNameNode.js'), + 'openHadoopNameNodeWebUI': require(__dirname + '/plugins/azure/networksecuritygroups/openHadoopNameNodeWebUI.js'), + 'openFTP': require(__dirname + '/plugins/azure/networksecuritygroups/openFTP.js'), + 'openSSH': require(__dirname + '/plugins/azure/networksecuritygroups/openSSH.js'), + 'openCIFS': require(__dirname + '/plugins/azure/networksecuritygroups/openCIFS.js'), + 'openDocker': require(__dirname + '/plugins/azure/networksecuritygroups/openDocker.js'), + 'openDNS': require(__dirname + '/plugins/azure/networksecuritygroups/openDNS.js'), + 'openRDP': require(__dirname + '/plugins/azure/networksecuritygroups/openRDP.js'), + 'openTelnet': require(__dirname + '/plugins/azure/networksecuritygroups/openTelnet.js'), + 'openVNCServer': require(__dirname + '/plugins/azure/networksecuritygroups/openVNCServer.js'), + 'openVNCClient': require(__dirname + '/plugins/azure/networksecuritygroups/openVNCClient.js'), + 'openMySQL': require(__dirname + '/plugins/azure/networksecuritygroups/openMySQL.js'), + 'openNetBIOS': require(__dirname + '/plugins/azure/networksecuritygroups/openNetBIOS.js'), + 'openPostgreSQL': require(__dirname + '/plugins/azure/networksecuritygroups/openPostgreSQL.js'), + 'openRPC': require(__dirname + '/plugins/azure/networksecuritygroups/openRPC.js'), + 'openSalt': require(__dirname + '/plugins/azure/networksecuritygroups/openSalt.js'), + 'openSMBoTCP': require(__dirname + '/plugins/azure/networksecuritygroups/openSMBoTCP.js'), + 'openSQLServer': require(__dirname + '/plugins/azure/networksecuritygroups/openSQLServer.js'), + 'openUDP': require(__dirname + '/plugins/azure/networksecuritygroups/openUDP.js'), + 'openSNMP': require(__dirname + '/plugins/azure/networksecuritygroups/openSNMP.js'), + 'openRedis': require(__dirname + '/plugins/azure/networksecuritygroups/openRedis.js'), + 'openMongoDB': require(__dirname + '/plugins/azure/networksecuritygroups/openMongoDB.js'), + 'openMemcached': require(__dirname + '/plugins/azure/networksecuritygroups/openMemcached.js'), + 'openLDAPS': require(__dirname + '/plugins/azure/networksecuritygroups/openLDAPS.js'), + 'openLDAP': require(__dirname + '/plugins/azure/networksecuritygroups/openLDAP.js'), + 'openInternalWeb': require(__dirname + '/plugins/azure/networksecuritygroups/openInternalWeb.js'), + 'openElasticsearch': require(__dirname + '/plugins/azure/networksecuritygroups/openElasticsearch.js'), + 'openCassandraClient': require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraClient.js'), + 'openCassandraInternode': require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraInternode.js'), + 'openCassandraMonitoring': require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraMonitoring.js'), + 'openCassandraThrift': require(__dirname + '/plugins/azure/networksecuritygroups/openCassandraThrift.js'), + 'openHTTP': require(__dirname + '/plugins/azure/networksecuritygroups/openHTTP.js'), + 'openHTTPS': require(__dirname + '/plugins/azure/networksecuritygroups/openHTTPS.js'), + 'nsgLogAnalyticsEnabled': require(__dirname + '/plugins/azure/networksecuritygroups/nsgLogAnalyticsEnabled.js'), + + 'networkWatcherEnabled': require(__dirname + '/plugins/azure/networkwatchers/networkWatcherEnabled.js'), + + 'resourceUsageLimit': require(__dirname + '/plugins/azure/resources/resourceUsageLimit.js'), + 'managementLockEnabled': require(__dirname + '/plugins/azure/resources/managementLockEnabled.js'), + + 'emailAccountAdminsEnabled': require(__dirname + '/plugins/azure/sqlserver/emailAccountAdminsEnabled.js'), + 'sendAlertsEnabled': require(__dirname + '/plugins/azure/sqlserver/sendAlertsEnabled.js'), + 'advancedDataSecurityEnabled': require(__dirname + '/plugins/azure/sqlserver/advancedDataSecurityEnabled.js'), + 'tdeProtectorEncrypted': require(__dirname + '/plugins/azure/sqlserver/tdeProtectorEncrypted.js'), + 'noPublicAccess': require(__dirname + '/plugins/azure/sqlserver/noPublicAccess.js'), + 'serverPrivateEndpoints': require(__dirname + '/plugins/azure/sqlserver/serverPrivateEndpoints.js'), + 'auditRetentionPolicy': require(__dirname + '/plugins/azure/sqlserver/auditRetentionPolicy.js'), + 'auditActionGroupsEnabled': require(__dirname + '/plugins/azure/sqlserver/auditActionGroupsEnabled.js'), + 'serverAuditingEnabled': require(__dirname + '/plugins/azure/sqlserver/serverAuditingEnabled.js'), + 'azureADAdminEnabled': require(__dirname + '/plugins/azure/sqlserver/azureADAdminEnabled.js'), + 'sqlServerTlsVersion': require(__dirname + '/plugins/azure/sqlserver/sqlServerTlsVersion.js'), + 'autoFailoverGroupsEnabled': require(__dirname + '/plugins/azure/sqlserver/autoFailoverGroupsEnabled.js'), + 'automaticTuningEnabled': require(__dirname + '/plugins/azure/sqlserver/automaticTuningEnabled.js'), + 'enableATP': require(__dirname + '/plugins/azure/sqlserver/enableATP.js'), + 'serverSendEmailToAdmins': require(__dirname + '/plugins/azure/sqlserver/serverSendEmailToAdmins.js'), + 'sqlServerRecurringScans': require(__dirname + '/plugins/azure/sqlserver/sqlServerRecurringScans.js'), + 'sqlServerSendScanReports': require(__dirname + '/plugins/azure/sqlserver/sqlServerSendScanReports.js'), + 'sqlServerHasTags': require(__dirname + '/plugins/azure/sqlserver/sqlServerHasTags.js'), + 'restrictOutboundNetworking': require(__dirname + '/plugins/azure/sqlserver/restrictOutboundNetworking.js'), + 'auditOperationsEnabled': require(__dirname + '/plugins/azure/sqlserver/auditOperationsEnabled.js'), + 'serverConnectionPolicy': require(__dirname + '/plugins/azure/sqlserver/serverConnectionPolicy.js'), + 'auditStorageAuthType': require(__dirname + '/plugins/azure/sqlserver/auditStorageAuthType.js'), + 'sqlServerVNetRuleIntegrated': require(__dirname + '/plugins/azure/sqlserver/sqlServerVNetRuleIntegrated.js'), 'sqlAzureServicesAccessDisabled': require(__dirname + '/plugins/azure/sqlserver/sqlAzureServicesAccessDisabled.js'), - 'sqlServerManagedIdentity' : require(__dirname + '/plugins/azure/sqlserver/sqlServerManagedIdentity.js'), - - 'javaVersion' : require(__dirname + '/plugins/azure/appservice/javaVersion.js'), - 'phpVersion' : require(__dirname + '/plugins/azure/appservice/phpVersion.js'), - 'pythonVersion' : require(__dirname + '/plugins/azure/appservice/pythonVersion.js'), - 'clientCertEnabled' : require(__dirname + '/plugins/azure/appservice/clientCertEnabled.js'), - 'netFrameworkVersion' : require(__dirname + '/plugins/azure/appservice/netFrameworkVersion.js'), - 'nodeJsVersion' : require(__dirname + '/plugins/azure/appservice/nodeJsVersion.js'), - 'authEnabled' : require(__dirname + '/plugins/azure/appservice/authEnabled.js'), - 'identityEnabled' : require(__dirname + '/plugins/azure/appservice/identityEnabled.js'), - 'http20Enabled' : require(__dirname + '/plugins/azure/appservice/http20Enabled.js'), - 'httpsOnlyEnabled' : require(__dirname + '/plugins/azure/appservice/httpsOnlyEnabled.js'), - 'tlsVersionCheck' : require(__dirname + '/plugins/azure/appservice/tlsVersionCheck.js'), - 'remoteDebuggingDisabled' : require(__dirname + '/plugins/azure/appservice/remoteDebuggingDisabled.js'), - 'alwaysOnEnabled' : require(__dirname + '/plugins/azure/appservice/alwaysOnEnabled.js'), - 'vnetIntegrated' : require(__dirname + '/plugins/azure/appservice/vnetIntegrated.js'), - 'certificateExpiry' : require(__dirname + '/plugins/azure/appservice/certificateExpiry.js'), - 'scmSiteAccessRestriction' : require(__dirname + '/plugins/azure/appservice/scmSiteAccessRestriction.js'), - 'secureHttptriggerFunction' : require(__dirname + '/plugins/azure/appservice/secureHttptriggerFunction.js'), - 'appServiceAccessRestriction' : require(__dirname + '/plugins/azure/appservice/appServiceAccessRestriction.js'), - 'webAppsADEnabled' : require(__dirname + '/plugins/azure/appservice/webAppsADEnabled.js'), - 'securityLogsEnabled' : require(__dirname + '/plugins/azure/appservice/securityLogsEnabled.js'), - 'appInsightsEnabled' : require(__dirname + '/plugins/azure/appservice/appInsightsEnabled.js'), - 'automatedBackupsEnabled' : require(__dirname + '/plugins/azure/appservice/automatedBackupsEnabled.js'), - 'ftpsOnlyAccessEnabled' : require(__dirname + '/plugins/azure/appservice/ftpsOnlyAccessEnabled.js'), - 'backupRetentionPeriod' : require(__dirname + '/plugins/azure/appservice/backupRetentionPeriod.js'), - 'privateEndpointsEnabled' : require(__dirname + '/plugins/azure/appservice/privateEndpointsEnabled.js'), - 'disableFTPDeployments' : require(__dirname + '/plugins/azure/appservice/disableFTPDeployments.js'), - 'accessControlAllowCredential' : require(__dirname + '/plugins/azure/appservice/accessControlAllowCredential.js'), - 'appServiceDiagnosticLogs' : require(__dirname + '/plugins/azure/appservice/appServiceDiagnosticLogs.js'), - 'functionPrivilegeAnalysis' : require(__dirname + '/plugins/azure/appservice/functionPrivilegeAnalysis.js'), - 'functionAppNetworkExposure' : require(__dirname + '/plugins/azure/appservice/functionAppNetworkExposure.js'), - 'appServicePublicAccess' : require(__dirname + '/plugins/azure/appservice/appServicePublicAccess.js'), - - 'rbacEnabled' : require(__dirname + '/plugins/azure/kubernetesservice/rbacEnabled.js'), - 'aksManagedIdentity' : require(__dirname + '/plugins/azure/kubernetesservice/aksManagedIdentity.js'), - 'aksLatestVersion' : require(__dirname + '/plugins/azure/kubernetesservice/aksLatestVersion.js'), - 'aksAgentVersion' : require(__dirname + '/plugins/azure/kubernetesservice/aksAgentVersion.js'), - 'aksClusterHasTags' : require(__dirname + '/plugins/azure/kubernetesservice/aksClusterHasTags.js'), - 'aksEncryptionAtRestWithCMK' : require(__dirname + '/plugins/azure/kubernetesservice/aksEncryptionAtRestWithCMK'), - 'aksPrivateCluster' : require(__dirname + '/plugins/azure/kubernetesservice/aksPrivateCluster.js'), - 'aksDiagnosticLogsEnabled' : require(__dirname + '/plugins/azure/kubernetesservice/aksDiagnosticLogsEnabled.js'), - 'aksHostBasedEncryption' : require(__dirname + '/plugins/azure/kubernetesservice/aksHostBasedEncryption.js'), - 'aksApiAuthorizedIpRanges' : require(__dirname + '/plugins/azure/kubernetesservice/aksApiAuthorizedIpRanges.js'), - 'aksNetworkExposure' : require(__dirname + '/plugins/azure/kubernetesservice/aksNetworkExposure.js'), - 'aksPrivilegeAnalysis' : require(__dirname + '/plugins/azure/kubernetesservice/aksPrivilegeAnalysis.js'), - - 'acrAdminUser' : require(__dirname + '/plugins/azure/containerregistry/acrAdminUser.js'), - 'acrHasTags' : require(__dirname + '/plugins/azure/containerregistry/acrHasTags.js'), - 'acrTrustedServiceEnabled' : require(__dirname + '/plugins/azure/containerregistry/acrTrustedServiceEnabled.js'), - 'acrManagedIdentityEnabled' : require(__dirname + '/plugins/azure/containerregistry/acrManagedIdentityEnabled.js'), - 'acrPublicAccess' : require(__dirname + '/plugins/azure/containerregistry/acrPublicAccess.js'), - 'acrCMKEncryption' : require(__dirname + '/plugins/azure/containerregistry/acrCMKEncryption.js'), - 'acrLogAnalyticsEnabled' : require(__dirname + '/plugins/azure/containerregistry/acrLogAnalyticsEnabled.js'), - 'acrAnonymousPullAccessEnabled' : require(__dirname + '/plugins/azure/containerregistry/acrAnonymousPullAccessEnabled.js'), - 'acrContentTrustEnabled' : require(__dirname + '/plugins/azure/containerregistry/acrContentTrustEnabled.js'), - - 'endpointLoggingEnabled' : require(__dirname + '/plugins/azure/cdnprofiles/endpointLoggingEnabled.js'), - 'detectInsecureCustomOrigin' : require(__dirname + '/plugins/azure/cdnprofiles/detectInsecureCustomOrigin.js'), - - 'passwordRequiresLowercase' : require(__dirname + '/plugins/azure/entraid/passwordRequiresLowercase.js'), - 'passwordRequiresNumbers' : require(__dirname + '/plugins/azure/entraid/passwordRequiresNumbers.js'), - 'passwordRequiresSymbols' : require(__dirname + '/plugins/azure/entraid/passwordRequiresSymbols.js'), - 'passwordRequiresUppercase' : require(__dirname + '/plugins/azure/entraid/passwordRequiresUppercase.js'), - 'minPasswordLength' : require(__dirname + '/plugins/azure/entraid/minPasswordLength.js'), - 'ensureNoGuestUser' : require(__dirname + '/plugins/azure/entraid/ensureNoGuestUser.js'), - 'noCustomOwnerRoles' : require(__dirname + '/plugins/azure/entraid/noCustomOwnerRoles.js'), - 'appOrgnaizationalDirectoryAccess' : require(__dirname + '/plugins/azure/entraid/appOrgnaizationalDirectoryAccess.js'), - - 'dbAuditingEnabled' : require(__dirname + '/plugins/azure/sqldatabases/dbAuditingEnabled.js'), - 'dbDataMaskingEnabled' : require(__dirname + '/plugins/azure/sqldatabases/dbDataMaskingEnabled.js'), - 'sqlDbMultiAz' : require(__dirname + '/plugins/azure/sqldatabases/sqlDbMultiAz.js'), - 'dbDiagnosticLoggingEnabled' : require(__dirname + '/plugins/azure/sqldatabases/dbDiagnosticLoggingEnabled.js'), - 'dbRestorable' : require(__dirname + '/plugins/azure/sqldatabases/dbRestorable.js'), - 'dbLedgerDigestStorageEnabled' : require(__dirname + '/plugins/azure/sqldatabases/dbLedgerDigestStorageEnabled.js'), - 'pitrBackupEnabled' : require(__dirname + '/plugins/azure/sqldatabases/pitrBackupEnabled.js'), - 'dbSyncGroupPrivateLink' : require(__dirname + '/plugins/azure/sqldatabases/dbSyncGroupPrivateLink.js'), - 'dbTDEEnabled' : require(__dirname + '/plugins/azure/sqldatabases/dbTDEEnabled.js'), - 'dbLedgerEnabled' : require(__dirname + '/plugins/azure/sqldatabases/dbLedgerEnabled.js'), - 'dbEnableSecureEnclaves' : require(__dirname + '/plugins/azure/sqldatabases/dbEnableSecureEnclaves.js'), - 'dbDataDiscoveryClassification' : require(__dirname + '/plugins/azure/sqldatabases/dbDataDiscoveryClassification.js'), - - 'lbHttpsOnly' : require(__dirname + '/plugins/azure/loadbalancer/lbHttpsOnly.js'), - 'lbNoInstances' : require(__dirname + '/plugins/azure/loadbalancer/lbNoInstances.js'), - 'lbHasTags' : require(__dirname + '/plugins/azure/loadbalancer/lbHasTags.js'), - 'lbPublicIp' : require(__dirname + '/plugins/azure/loadbalancer/lbPublicIp.js'), - 'lbLogAnalyticsEnabled' : require(__dirname + '/plugins/azure/loadbalancer/lbLogAnalyticsEnabled.js'), - - 'kvRecoveryEnabled' : require(__dirname + '/plugins/azure/keyvaults/kvRecoveryEnabled.js'), - 'keyExpirationEnabled' : require(__dirname + '/plugins/azure/keyvaults/keyExpirationEnabled.js'), - 'secretExpirationEnabled' : require(__dirname + '/plugins/azure/keyvaults/secretExpirationEnabled.js'), - 'databaseTierCmkInUse' : require(__dirname + '/plugins/azure/keyvaults/databaseTierCmkInUse.js'), - 'sslCertificateAutoRenewal' : require(__dirname + '/plugins/azure/keyvaults/sslCertificateAutoRenewal.js'), - 'manageKeyAccessAndPermissions' : require(__dirname + '/plugins/azure/keyvaults/manageKeyAccessAndPermissions.js'), - 'rsaCertificateKeySize' : require(__dirname + '/plugins/azure/keyvaults/rsaCertificateKeySize.js'), - 'keyVaultSecretExpiry' : require(__dirname + '/plugins/azure/keyvaults/keyVaultSecretExpiry.js'), - 'keyVaultSecretExpiryNonRbac' : require(__dirname + '/plugins/azure/keyvaults/keyVaultSecretExpiryNonRbac.js'), - 'keyVaultKeyExpiry' : require(__dirname + '/plugins/azure/keyvaults/keyVaultKeyExpiry.js'), - 'keyVaultKeyExpiryNonRbac' : require(__dirname + '/plugins/azure/keyvaults/keyVaultKeyExpiryNonRbac.js'), - 'allowedCertificateKeyTypes' : require(__dirname + '/plugins/azure/keyvaults/allowedCertificateKeyTypes.js'), - 'appTierCmkInUse' : require(__dirname + '/plugins/azure/keyvaults/appTierCmkInUse.js'), - 'keyVaultInUse' : require(__dirname + '/plugins/azure/keyvaults/keyVaultInUse.js'), - 'restrictDefaultNetworkAccess' : require(__dirname + '/plugins/azure/keyvaults/restrictDefaultNetworkAccess.js'), - 'trustedServicesEnabled' : require(__dirname + '/plugins/azure/keyvaults/trustedServicesEnabled.js'), - 'keyVaultHasTags' : require(__dirname + '/plugins/azure/keyvaults/keyVaultHasTags.js'), - 'keyVaultsPrivateEndpoint' : require(__dirname + '/plugins/azure/keyvaults/keyVaultsPrivateEndpoint.js'), - 'kvLogAnalyticsEnabled' : require(__dirname + '/plugins/azure/keyvaults/kvLogAnalyticsEnabled.js'), - 'keyVaultPublicAccess' : require(__dirname + '/plugins/azure/keyvaults/keyVaultPublicAccess.js'), - - 'advancedThreatProtection' : require(__dirname + '/plugins/azure/cosmosdb/advancedThreatProtection.js'), - 'cosmosdbDiagnosticLogs' : require(__dirname + '/plugins/azure/cosmosdb/cosmosdbDiagnosticLogs.js'), - 'cosmosPublicAccessDisabled' : require(__dirname + '/plugins/azure/cosmosdb/cosmosPublicAccessDisabled.js'), - 'automaticFailoverEnabled' : require(__dirname + '/plugins/azure/cosmosdb/automaticFailoverEnabled.js'), - 'cosmosdbHasTags' : require(__dirname + '/plugins/azure/cosmosdb/cosmosdbHasTags.js'), - 'cosmosdbManagedIdentity' : require(__dirname + '/plugins/azure/cosmosdb/cosmosdbManagedIdentity.js'), - 'cosmosdbLocalAuth' : require(__dirname + '/plugins/azure/cosmosdb/cosmosdbLocalAuth.js'), - - 'checkAdvisorRecommendations' : require(__dirname + '/plugins/azure/advisor/checkAdvisorRecommendations.js'), - - 'enableDefenderForStorage' : require(__dirname + '/plugins/azure/defender/enableDefenderForStorage.js'), - 'enableDefenderForContainers' : require(__dirname + '/plugins/azure/defender/enableDefenderForContainers.js'), - 'enableDefenderForSqlServers' : require(__dirname + '/plugins/azure/defender/enableDefenderForSqlServers.js'), - 'enableDefenderForOSRD' : require(__dirname + '/plugins/azure/defender/enableDefenderForOSRD.js'), - 'enableEndpointIntegration' : require(__dirname + '/plugins/azure/defender/enableEndpointIntegration.js'), - 'enableDefenderForDNS' : require(__dirname + '/plugins/azure/defender/enableDefenderForDNS.js'), - 'enableDefenderForKeyVaults' : require(__dirname + '/plugins/azure/defender/enableDefenderForKeyVaults.js'), - 'enableDefenderForVMs' : require(__dirname + '/plugins/azure/defender/enableDefenderForVMs.js'), - 'enableDefenderForAppService' : require(__dirname + '/plugins/azure/defender/enableDefenderForAppService.js'), - 'enableDefenderForCSPM' : require(__dirname + '/plugins/azure/defender/enableDefenderForCSPM.js'), - 'enableDefenderForARM' : require(__dirname + '/plugins/azure/defender/enableDefenderForARM.js'), - 'enableDefenderForAPIs' : require(__dirname + '/plugins/azure/defender/enableDefenderForAPIs.js'), - 'enableDefenderForCosmosDB' : require(__dirname + '/plugins/azure/defender/enableDefenderForCosmosDB.js'), + 'sqlServerManagedIdentity': require(__dirname + '/plugins/azure/sqlserver/sqlServerManagedIdentity.js'), + + 'javaVersion': require(__dirname + '/plugins/azure/appservice/javaVersion.js'), + 'phpVersion': require(__dirname + '/plugins/azure/appservice/phpVersion.js'), + 'pythonVersion': require(__dirname + '/plugins/azure/appservice/pythonVersion.js'), + 'clientCertEnabled': require(__dirname + '/plugins/azure/appservice/clientCertEnabled.js'), + 'netFrameworkVersion': require(__dirname + '/plugins/azure/appservice/netFrameworkVersion.js'), + 'nodeJsVersion': require(__dirname + '/plugins/azure/appservice/nodeJsVersion.js'), + 'authEnabled': require(__dirname + '/plugins/azure/appservice/authEnabled.js'), + 'identityEnabled': require(__dirname + '/plugins/azure/appservice/identityEnabled.js'), + 'http20Enabled': require(__dirname + '/plugins/azure/appservice/http20Enabled.js'), + 'httpsOnlyEnabled': require(__dirname + '/plugins/azure/appservice/httpsOnlyEnabled.js'), + 'tlsVersionCheck': require(__dirname + '/plugins/azure/appservice/tlsVersionCheck.js'), + 'remoteDebuggingDisabled': require(__dirname + '/plugins/azure/appservice/remoteDebuggingDisabled.js'), + 'alwaysOnEnabled': require(__dirname + '/plugins/azure/appservice/alwaysOnEnabled.js'), + 'vnetIntegrated': require(__dirname + '/plugins/azure/appservice/vnetIntegrated.js'), + 'certificateExpiry': require(__dirname + '/plugins/azure/appservice/certificateExpiry.js'), + 'scmSiteAccessRestriction': require(__dirname + '/plugins/azure/appservice/scmSiteAccessRestriction.js'), + 'secureHttptriggerFunction': require(__dirname + '/plugins/azure/appservice/secureHttptriggerFunction.js'), + 'appServiceAccessRestriction': require(__dirname + '/plugins/azure/appservice/appServiceAccessRestriction.js'), + 'webAppsADEnabled': require(__dirname + '/plugins/azure/appservice/webAppsADEnabled.js'), + 'securityLogsEnabled': require(__dirname + '/plugins/azure/appservice/securityLogsEnabled.js'), + 'appInsightsEnabled': require(__dirname + '/plugins/azure/appservice/appInsightsEnabled.js'), + 'automatedBackupsEnabled': require(__dirname + '/plugins/azure/appservice/automatedBackupsEnabled.js'), + 'ftpsOnlyAccessEnabled': require(__dirname + '/plugins/azure/appservice/ftpsOnlyAccessEnabled.js'), + 'backupRetentionPeriod': require(__dirname + '/plugins/azure/appservice/backupRetentionPeriod.js'), + 'privateEndpointsEnabled': require(__dirname + '/plugins/azure/appservice/privateEndpointsEnabled.js'), + 'disableFTPDeployments': require(__dirname + '/plugins/azure/appservice/disableFTPDeployments.js'), + 'accessControlAllowCredential': require(__dirname + '/plugins/azure/appservice/accessControlAllowCredential.js'), + 'appServiceDiagnosticLogs': require(__dirname + '/plugins/azure/appservice/appServiceDiagnosticLogs.js'), + 'functionPrivilegeAnalysis': require(__dirname + '/plugins/azure/appservice/functionPrivilegeAnalysis.js'), + 'functionAppNetworkExposure': require(__dirname + '/plugins/azure/appservice/functionAppNetworkExposure.js'), + 'appServicePublicAccess': require(__dirname + '/plugins/azure/appservice/appServicePublicAccess.js'), + + 'rbacEnabled': require(__dirname + '/plugins/azure/kubernetesservice/rbacEnabled.js'), + 'aksManagedIdentity': require(__dirname + '/plugins/azure/kubernetesservice/aksManagedIdentity.js'), + 'aksLatestVersion': require(__dirname + '/plugins/azure/kubernetesservice/aksLatestVersion.js'), + 'aksAgentVersion': require(__dirname + '/plugins/azure/kubernetesservice/aksAgentVersion.js'), + 'aksClusterHasTags': require(__dirname + '/plugins/azure/kubernetesservice/aksClusterHasTags.js'), + 'aksEncryptionAtRestWithCMK': require(__dirname + '/plugins/azure/kubernetesservice/aksEncryptionAtRestWithCMK'), + 'aksPrivateCluster': require(__dirname + '/plugins/azure/kubernetesservice/aksPrivateCluster.js'), + 'aksDiagnosticLogsEnabled': require(__dirname + '/plugins/azure/kubernetesservice/aksDiagnosticLogsEnabled.js'), + 'aksHostBasedEncryption': require(__dirname + '/plugins/azure/kubernetesservice/aksHostBasedEncryption.js'), + 'aksApiAuthorizedIpRanges': require(__dirname + '/plugins/azure/kubernetesservice/aksApiAuthorizedIpRanges.js'), + 'aksNetworkExposure': require(__dirname + '/plugins/azure/kubernetesservice/aksNetworkExposure.js'), + 'aksPrivilegeAnalysis': require(__dirname + '/plugins/azure/kubernetesservice/aksPrivilegeAnalysis.js'), + + 'acrAdminUser': require(__dirname + '/plugins/azure/containerregistry/acrAdminUser.js'), + 'acrHasTags': require(__dirname + '/plugins/azure/containerregistry/acrHasTags.js'), + 'acrTrustedServiceEnabled': require(__dirname + '/plugins/azure/containerregistry/acrTrustedServiceEnabled.js'), + 'acrManagedIdentityEnabled': require(__dirname + '/plugins/azure/containerregistry/acrManagedIdentityEnabled.js'), + 'acrPublicAccess': require(__dirname + '/plugins/azure/containerregistry/acrPublicAccess.js'), + 'acrCMKEncryption': require(__dirname + '/plugins/azure/containerregistry/acrCMKEncryption.js'), + 'acrLogAnalyticsEnabled': require(__dirname + '/plugins/azure/containerregistry/acrLogAnalyticsEnabled.js'), + 'acrAnonymousPullAccessEnabled': require(__dirname + '/plugins/azure/containerregistry/acrAnonymousPullAccessEnabled.js'), + 'acrContentTrustEnabled': require(__dirname + '/plugins/azure/containerregistry/acrContentTrustEnabled.js'), + + 'endpointLoggingEnabled': require(__dirname + '/plugins/azure/cdnprofiles/endpointLoggingEnabled.js'), + 'detectInsecureCustomOrigin': require(__dirname + '/plugins/azure/cdnprofiles/detectInsecureCustomOrigin.js'), + + 'passwordRequiresLowercase': require(__dirname + '/plugins/azure/entraid/passwordRequiresLowercase.js'), + 'passwordRequiresNumbers': require(__dirname + '/plugins/azure/entraid/passwordRequiresNumbers.js'), + 'passwordRequiresSymbols': require(__dirname + '/plugins/azure/entraid/passwordRequiresSymbols.js'), + 'passwordRequiresUppercase': require(__dirname + '/plugins/azure/entraid/passwordRequiresUppercase.js'), + 'minPasswordLength': require(__dirname + '/plugins/azure/entraid/minPasswordLength.js'), + 'ensureNoGuestUser': require(__dirname + '/plugins/azure/entraid/ensureNoGuestUser.js'), + 'noCustomOwnerRoles': require(__dirname + '/plugins/azure/entraid/noCustomOwnerRoles.js'), + 'appOrgnaizationalDirectoryAccess': require(__dirname + '/plugins/azure/entraid/appOrgnaizationalDirectoryAccess.js'), + + 'dbAuditingEnabled': require(__dirname + '/plugins/azure/sqldatabases/dbAuditingEnabled.js'), + 'dbDataMaskingEnabled': require(__dirname + '/plugins/azure/sqldatabases/dbDataMaskingEnabled.js'), + 'sqlDbMultiAz': require(__dirname + '/plugins/azure/sqldatabases/sqlDbMultiAz.js'), + 'dbDiagnosticLoggingEnabled': require(__dirname + '/plugins/azure/sqldatabases/dbDiagnosticLoggingEnabled.js'), + 'dbRestorable': require(__dirname + '/plugins/azure/sqldatabases/dbRestorable.js'), + 'dbLedgerDigestStorageEnabled': require(__dirname + '/plugins/azure/sqldatabases/dbLedgerDigestStorageEnabled.js'), + 'pitrBackupEnabled': require(__dirname + '/plugins/azure/sqldatabases/pitrBackupEnabled.js'), + 'dbSyncGroupPrivateLink': require(__dirname + '/plugins/azure/sqldatabases/dbSyncGroupPrivateLink.js'), + 'dbTDEEnabled': require(__dirname + '/plugins/azure/sqldatabases/dbTDEEnabled.js'), + 'dbLedgerEnabled': require(__dirname + '/plugins/azure/sqldatabases/dbLedgerEnabled.js'), + 'dbEnableSecureEnclaves': require(__dirname + '/plugins/azure/sqldatabases/dbEnableSecureEnclaves.js'), + 'dbDataDiscoveryClassification': require(__dirname + '/plugins/azure/sqldatabases/dbDataDiscoveryClassification.js'), + + 'lbHttpsOnly': require(__dirname + '/plugins/azure/loadbalancer/lbHttpsOnly.js'), + 'lbNoInstances': require(__dirname + '/plugins/azure/loadbalancer/lbNoInstances.js'), + 'lbHasTags': require(__dirname + '/plugins/azure/loadbalancer/lbHasTags.js'), + 'lbPublicIp': require(__dirname + '/plugins/azure/loadbalancer/lbPublicIp.js'), + 'lbLogAnalyticsEnabled': require(__dirname + '/plugins/azure/loadbalancer/lbLogAnalyticsEnabled.js'), + + 'kvRecoveryEnabled': require(__dirname + '/plugins/azure/keyvaults/kvRecoveryEnabled.js'), + 'keyExpirationEnabled': require(__dirname + '/plugins/azure/keyvaults/keyExpirationEnabled.js'), + 'secretExpirationEnabled': require(__dirname + '/plugins/azure/keyvaults/secretExpirationEnabled.js'), + 'databaseTierCmkInUse': require(__dirname + '/plugins/azure/keyvaults/databaseTierCmkInUse.js'), + 'sslCertificateAutoRenewal': require(__dirname + '/plugins/azure/keyvaults/sslCertificateAutoRenewal.js'), + 'manageKeyAccessAndPermissions': require(__dirname + '/plugins/azure/keyvaults/manageKeyAccessAndPermissions.js'), + 'rsaCertificateKeySize': require(__dirname + '/plugins/azure/keyvaults/rsaCertificateKeySize.js'), + 'keyVaultSecretExpiry': require(__dirname + '/plugins/azure/keyvaults/keyVaultSecretExpiry.js'), + 'keyVaultSecretExpiryNonRbac': require(__dirname + '/plugins/azure/keyvaults/keyVaultSecretExpiryNonRbac.js'), + 'keyVaultKeyExpiry': require(__dirname + '/plugins/azure/keyvaults/keyVaultKeyExpiry.js'), + 'keyVaultKeyExpiryNonRbac': require(__dirname + '/plugins/azure/keyvaults/keyVaultKeyExpiryNonRbac.js'), + 'allowedCertificateKeyTypes': require(__dirname + '/plugins/azure/keyvaults/allowedCertificateKeyTypes.js'), + 'appTierCmkInUse': require(__dirname + '/plugins/azure/keyvaults/appTierCmkInUse.js'), + 'keyVaultInUse': require(__dirname + '/plugins/azure/keyvaults/keyVaultInUse.js'), + 'restrictDefaultNetworkAccess': require(__dirname + '/plugins/azure/keyvaults/restrictDefaultNetworkAccess.js'), + 'trustedServicesEnabled': require(__dirname + '/plugins/azure/keyvaults/trustedServicesEnabled.js'), + 'keyVaultHasTags': require(__dirname + '/plugins/azure/keyvaults/keyVaultHasTags.js'), + 'keyVaultsPrivateEndpoint': require(__dirname + '/plugins/azure/keyvaults/keyVaultsPrivateEndpoint.js'), + 'kvLogAnalyticsEnabled': require(__dirname + '/plugins/azure/keyvaults/kvLogAnalyticsEnabled.js'), + 'keyVaultPublicAccess': require(__dirname + '/plugins/azure/keyvaults/keyVaultPublicAccess.js'), + + 'advancedThreatProtection': require(__dirname + '/plugins/azure/cosmosdb/advancedThreatProtection.js'), + 'cosmosdbDiagnosticLogs': require(__dirname + '/plugins/azure/cosmosdb/cosmosdbDiagnosticLogs.js'), + 'cosmosPublicAccessDisabled': require(__dirname + '/plugins/azure/cosmosdb/cosmosPublicAccessDisabled.js'), + 'automaticFailoverEnabled': require(__dirname + '/plugins/azure/cosmosdb/automaticFailoverEnabled.js'), + 'cosmosdbHasTags': require(__dirname + '/plugins/azure/cosmosdb/cosmosdbHasTags.js'), + 'cosmosdbManagedIdentity': require(__dirname + '/plugins/azure/cosmosdb/cosmosdbManagedIdentity.js'), + 'cosmosdbLocalAuth': require(__dirname + '/plugins/azure/cosmosdb/cosmosdbLocalAuth.js'), + + 'checkAdvisorRecommendations': require(__dirname + '/plugins/azure/advisor/checkAdvisorRecommendations.js'), + + 'enableDefenderForStorage': require(__dirname + '/plugins/azure/defender/enableDefenderForStorage.js'), + 'enableDefenderForContainers': require(__dirname + '/plugins/azure/defender/enableDefenderForContainers.js'), + 'enableDefenderForSqlServers': require(__dirname + '/plugins/azure/defender/enableDefenderForSqlServers.js'), + 'enableDefenderForOSRD': require(__dirname + '/plugins/azure/defender/enableDefenderForOSRD.js'), + 'enableEndpointIntegration': require(__dirname + '/plugins/azure/defender/enableEndpointIntegration.js'), + 'enableDefenderForDNS': require(__dirname + '/plugins/azure/defender/enableDefenderForDNS.js'), + 'enableDefenderForKeyVaults': require(__dirname + '/plugins/azure/defender/enableDefenderForKeyVaults.js'), + 'enableDefenderForVMs': require(__dirname + '/plugins/azure/defender/enableDefenderForVMs.js'), + 'enableDefenderForAppService': require(__dirname + '/plugins/azure/defender/enableDefenderForAppService.js'), + 'enableDefenderForCSPM': require(__dirname + '/plugins/azure/defender/enableDefenderForCSPM.js'), + 'enableDefenderForARM': require(__dirname + '/plugins/azure/defender/enableDefenderForARM.js'), + 'enableDefenderForAPIs': require(__dirname + '/plugins/azure/defender/enableDefenderForAPIs.js'), + 'enableDefenderForCosmosDB': require(__dirname + '/plugins/azure/defender/enableDefenderForCosmosDB.js'), 'enableDefenderForSqlServersVMs': require(__dirname + '/plugins/azure/defender/enableDefenderForSqlServersVMs.js'), - 'highSeverityAlertsEnabled' : require(__dirname + '/plugins/azure/defender/highSeverityAlertsEnabled.js'), - 'standardPricingEnabled' : require(__dirname + '/plugins/azure/defender/standardPricingEnabled.js'), - 'monitorExternalAccounts' : require(__dirname + '/plugins/azure/defender/monitorExternalAccounts.js'), - 'monitorIpForwarding' : require(__dirname + '/plugins/azure/defender/monitorIpForwarding.js'), - 'monitorNextGenerationFirewall' : require(__dirname + '/plugins/azure/defender/monitorNextGenerationFirewall.js'), - 'monitorSubscriptionOwners' : require(__dirname + '/plugins/azure/defender/monitorSubscriptionOwners.js'), + 'highSeverityAlertsEnabled': require(__dirname + '/plugins/azure/defender/highSeverityAlertsEnabled.js'), + 'standardPricingEnabled': require(__dirname + '/plugins/azure/defender/standardPricingEnabled.js'), + 'monitorExternalAccounts': require(__dirname + '/plugins/azure/defender/monitorExternalAccounts.js'), + 'monitorIpForwarding': require(__dirname + '/plugins/azure/defender/monitorIpForwarding.js'), + 'monitorNextGenerationFirewall': require(__dirname + '/plugins/azure/defender/monitorNextGenerationFirewall.js'), + 'monitorSubscriptionOwners': require(__dirname + '/plugins/azure/defender/monitorSubscriptionOwners.js'), 'securityContactAdditionalEmail': require(__dirname + '/plugins/azure/defender/securityContactAdditionalEmail.js'), - 'securityContactRoleSetToOwner' : require(__dirname + '/plugins/azure/defender/securityContactRoleSetToOwner.js'), - 'appWhitelistingEnabled' : require(__dirname + '/plugins/azure/defender/appWhitelistingEnabled.js'), - 'securityConfigMonitoring' : require(__dirname + '/plugins/azure/defender/securityConfigMonitoring.js'), - 'autoProvisioningEnabled' : require(__dirname + '/plugins/azure/defender/autoProvisioningEnabled.js'), - 'monitorSystemUpdates' : require(__dirname + '/plugins/azure/defender/monitorSystemUpdates.js'), - 'monitorEndpointProtection' : require(__dirname + '/plugins/azure/defender/monitorEndpointProtection.js'), - 'monitorJitNetworkAccess' : require(__dirname + '/plugins/azure/defender/monitorJitNetworkAccess.js'), - 'securityContactsEnabled' : require(__dirname + '/plugins/azure/defender/securityContactsEnabled.js'), - - 'agWafEnabled' : require(__dirname + '/plugins/azure/applicationGateway/agWafEnabled'), - 'applicationGatewayHasTags' : require(__dirname + '/plugins/azure/applicationGateway/applicationGatewayHasTags.js'), - 'agSecurityLoggingEnabled' : require(__dirname + '/plugins/azure/applicationGateway/agSecurityLoggingEnabled.js'), - 'agSslPolicy' : require(__dirname + '/plugins/azure/applicationGateway/agSslPolicy'), - 'agPreventionModeEnabled' : require(__dirname + '/plugins/azure/applicationGateway/agPreventionModeEnabled.js'), - 'agRequestBodyInspection' : require(__dirname + '/plugins/azure/applicationGateway/agRequestBodyInspection'), - 'agRequestBodySize' : require(__dirname + '/plugins/azure/applicationGateway/agRequestBodySize.js'), - 'agHttpsListenerOnly' : require(__dirname + '/plugins/azure/applicationGateway/agHttpsListenerOnly.js'), - - 'subscriptionHasTags' : require(__dirname + '/plugins/azure/subscription/subscriptionHasTags.js'), - - 'rgHasTags' : require(__dirname + '/plugins/azure/resourceGroup/rgHasTags.js'), - - 'wafPolicyHasTags' : require(__dirname + '/plugins/azure/waf/wafPolicyHasTags.js'), - - 'recoveryVaultByokEncrypted' : require(__dirname + '/plugins/azure/recoveryService/recoveryVaultByokEncrypted.js'), - 'recoveryVaultLoggingEnabled' : require(__dirname + '/plugins/azure/recoveryService/recoveryVaultLoggingEnabled.js'), - - 'domainPublicAccessEnabled' : require(__dirname + '/plugins/azure/eventGrid/domainPublicAccess.js'), - 'domainMinimumTlsVersion' : require(__dirname + '/plugins/azure/eventGrid/domainMinimumTlsVersion.js'), - 'domainDiagnosticLogs' : require(__dirname + '/plugins/azure/eventGrid/domainDiagnosticLogs.js'), - 'domainLocalAuthDisabled' : require(__dirname + '/plugins/azure/eventGrid/domainLocalAuthDisabled.js'), - 'domainManagedIdentity' : require(__dirname + '/plugins/azure/eventGrid/domainManagedIdentity.js'), - - 'eventHubMinimumTLSversion' : require(__dirname + '/plugins/azure/eventhub/eventHubMinimumTLSversion.js'), - 'eventHubNamespaceHasTags' : require(__dirname + '/plugins/azure/eventhub/eventHubNamespaceHasTags.js'), - 'eventHubNamespaceAutoInflate' : require(__dirname + '/plugins/azure/eventhub/eventHubNamespaceAutoInflate.js'), - 'eventHubLocalAuthDisabled' : require(__dirname + '/plugins/azure/eventhub/eventHubLocalAuthDisabled.js'), - 'eventHubPublicAccess' : require(__dirname + '/plugins/azure/eventhub/eventHubPublicAccess.js'), - 'eventHubNamespaceCmkEncrypted' : require(__dirname + '/plugins/azure/eventhub/eventHubNamespaceCmkEncrypted.js'), - 'eventHubDiagnosticLogs' : require(__dirname + '/plugins/azure/eventhub/eventHubDiagnosticLogs.js'), - 'eventHubManagedIdentity' : require(__dirname + '/plugins/azure/eventhub/eventHubManagedIdentity.js'), - - 'accessLogsEnabled' : require(__dirname + '/plugins/azure/frontdoor/accessLogsEnabled.js'), - 'frontDoorMinimumTlsVersion' : require(__dirname + '/plugins/azure/frontdoor/frontDoorMinimumTlsVersion.js'), - 'afdSecurityLoggingEnabled' : require(__dirname + '/plugins/azure/frontdoor/afdSecurityLoggingEnabled.js'), - 'frontDoorWafDefaultRateLimit' : require(__dirname + '/plugins/azure/frontdoor/frontDoorWafDefaultRateLimit.js'), - 'frontDoorAzureManagedDomain' : require(__dirname + '/plugins/azure/frontdoor/frontDoorAzureManagedDomain.js'), - 'frontDoorWafDetectionMode' : require(__dirname + '/plugins/azure/frontdoor/frontDoorWafDetectionMode.js'), + 'securityContactRoleSetToOwner': require(__dirname + '/plugins/azure/defender/securityContactRoleSetToOwner.js'), + 'appWhitelistingEnabled': require(__dirname + '/plugins/azure/defender/appWhitelistingEnabled.js'), + 'securityConfigMonitoring': require(__dirname + '/plugins/azure/defender/securityConfigMonitoring.js'), + 'autoProvisioningEnabled': require(__dirname + '/plugins/azure/defender/autoProvisioningEnabled.js'), + 'monitorSystemUpdates': require(__dirname + '/plugins/azure/defender/monitorSystemUpdates.js'), + 'monitorEndpointProtection': require(__dirname + '/plugins/azure/defender/monitorEndpointProtection.js'), + 'monitorJitNetworkAccess': require(__dirname + '/plugins/azure/defender/monitorJitNetworkAccess.js'), + 'securityContactsEnabled': require(__dirname + '/plugins/azure/defender/securityContactsEnabled.js'), + + 'agWafEnabled': require(__dirname + '/plugins/azure/applicationGateway/agWafEnabled'), + 'applicationGatewayHasTags': require(__dirname + '/plugins/azure/applicationGateway/applicationGatewayHasTags.js'), + 'agSecurityLoggingEnabled': require(__dirname + '/plugins/azure/applicationGateway/agSecurityLoggingEnabled.js'), + 'agSslPolicy': require(__dirname + '/plugins/azure/applicationGateway/agSslPolicy'), + 'agPreventionModeEnabled': require(__dirname + '/plugins/azure/applicationGateway/agPreventionModeEnabled.js'), + 'agRequestBodyInspection': require(__dirname + '/plugins/azure/applicationGateway/agRequestBodyInspection'), + 'agRequestBodySize': require(__dirname + '/plugins/azure/applicationGateway/agRequestBodySize.js'), + 'agHttpsListenerOnly': require(__dirname + '/plugins/azure/applicationGateway/agHttpsListenerOnly.js'), + + 'subscriptionHasTags': require(__dirname + '/plugins/azure/subscription/subscriptionHasTags.js'), + + 'rgHasTags': require(__dirname + '/plugins/azure/resourceGroup/rgHasTags.js'), + + 'wafPolicyHasTags': require(__dirname + '/plugins/azure/waf/wafPolicyHasTags.js'), + + 'recoveryVaultByokEncrypted': require(__dirname + '/plugins/azure/recoveryService/recoveryVaultByokEncrypted.js'), + 'recoveryVaultLoggingEnabled': require(__dirname + '/plugins/azure/recoveryService/recoveryVaultLoggingEnabled.js'), + + 'domainPublicAccessEnabled': require(__dirname + '/plugins/azure/eventGrid/domainPublicAccess.js'), + 'domainMinimumTlsVersion': require(__dirname + '/plugins/azure/eventGrid/domainMinimumTlsVersion.js'), + 'domainDiagnosticLogs': require(__dirname + '/plugins/azure/eventGrid/domainDiagnosticLogs.js'), + 'domainLocalAuthDisabled': require(__dirname + '/plugins/azure/eventGrid/domainLocalAuthDisabled.js'), + 'domainManagedIdentity': require(__dirname + '/plugins/azure/eventGrid/domainManagedIdentity.js'), + + 'eventHubMinimumTLSversion': require(__dirname + '/plugins/azure/eventhub/eventHubMinimumTLSversion.js'), + 'eventHubNamespaceHasTags': require(__dirname + '/plugins/azure/eventhub/eventHubNamespaceHasTags.js'), + 'eventHubNamespaceAutoInflate': require(__dirname + '/plugins/azure/eventhub/eventHubNamespaceAutoInflate.js'), + 'eventHubLocalAuthDisabled': require(__dirname + '/plugins/azure/eventhub/eventHubLocalAuthDisabled.js'), + 'eventHubPublicAccess': require(__dirname + '/plugins/azure/eventhub/eventHubPublicAccess.js'), + 'eventHubNamespaceCmkEncrypted': require(__dirname + '/plugins/azure/eventhub/eventHubNamespaceCmkEncrypted.js'), + 'eventHubDiagnosticLogs': require(__dirname + '/plugins/azure/eventhub/eventHubDiagnosticLogs.js'), + 'eventHubManagedIdentity': require(__dirname + '/plugins/azure/eventhub/eventHubManagedIdentity.js'), + + 'accessLogsEnabled': require(__dirname + '/plugins/azure/frontdoor/accessLogsEnabled.js'), + 'frontDoorMinimumTlsVersion': require(__dirname + '/plugins/azure/frontdoor/frontDoorMinimumTlsVersion.js'), + 'afdSecurityLoggingEnabled': require(__dirname + '/plugins/azure/frontdoor/afdSecurityLoggingEnabled.js'), + 'frontDoorWafDefaultRateLimit': require(__dirname + '/plugins/azure/frontdoor/frontDoorWafDefaultRateLimit.js'), + 'frontDoorAzureManagedDomain': require(__dirname + '/plugins/azure/frontdoor/frontDoorAzureManagedDomain.js'), + 'frontDoorWafDetectionMode': require(__dirname + '/plugins/azure/frontdoor/frontDoorWafDetectionMode.js'), 'frontDoorRequestBodyInspection': require(__dirname + '/plugins/azure/frontdoor/frontDoorRequestBodyInspection.js'), - 'frontDoorWafEnabled' : require(__dirname + '/plugins/azure/frontdoor/frontDoorWafEnabled.js'), - 'frontDoorHttpsOnly' : require(__dirname + '/plugins/azure/frontdoor/frontDoorHttpsOnly.js'), - 'botProtectionEnabled' : require(__dirname + '/plugins/azure/frontdoor/botProtectionEnabled.js'), - 'frontDoorManagedIdentity' : require(__dirname + '/plugins/azure/frontdoor/frontDoorManagedIdentity.js'), - 'frontDoorWafDefaultRuleSet' : require(__dirname + '/plugins/azure/frontdoor/frontDoorWafDefaultRuleSet.js'), - - 'namespaceEncryptionAtRest' : require(__dirname + '/plugins/azure/servicebus/namespaceEncryptionAtRest.js'), - 'namespaceTlsVersion' : require(__dirname + '/plugins/azure/servicebus/namespaceTlsVersion.js'), - 'namespaceManagedIdentity' : require(__dirname + '/plugins/azure/servicebus/namespaceManagedIdentity.js'), - 'namespaceLocalAuth' : require(__dirname + '/plugins/azure/servicebus/namespaceLocalAuth.js'), - 'namespaceHasTags' : require(__dirname + '/plugins/azure/servicebus/namespaceHasTags.js'), - 'namespaceLoggingEnabled' : require(__dirname + '/plugins/azure/servicebus/namespaceLoggingEnabled.js'), - 'namespacePublicAccess' : require(__dirname + '/plugins/azure/servicebus/namespacePublicAccess.js'), - 'namespaceInfraEncryption' : require(__dirname + '/plugins/azure/servicebus/namespaceInfraEncryption.js'), - - 'amsStorageAccountIdentity' : require(__dirname + '/plugins/azure/mediaServices/amsStorageAccountIdentity.js'), - 'amsDiagnosticLogsEnabled' : require(__dirname + '/plugins/azure/mediaServices/amsDiagnosticLogsEnabled.js'), - 'amsPublicAccessDisabled' : require(__dirname + '/plugins/azure/mediaServices/amsPublicAccessDisabled.js'), - 'amsManagedIdentityEnabled' : require(__dirname + '/plugins/azure/mediaServices/amsManagedIdentityEnabled.js'), - 'amsClassicApiDisabled' : require(__dirname + '/plugins/azure/mediaServices/amsClassicApiDisabled.js'), - 'amsContentKeyPolicy' : require(__dirname + '/plugins/azure/mediaServices/amsContentKeyPolicy.js'), - - 'scaleSetMultiAz' : require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetMultiAz.js'), - 'scaleSetAutoscaleEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetAutoscaleEnabled.js'), - 'scaleSetHealthMonitoring' : require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetHealthMonitoring.js'), - 'vmScaleSetHasTags' : require(__dirname + '/plugins/azure/virtualmachinescaleset/vmScaleSetHasTags.js'), - 'noEmptyScaleSets' : require(__dirname + '/plugins/azure/virtualmachinescaleset/noEmptyScaleSets.js'), - 'autoscaleNotificationsEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/autoscaleNotificationsEnabled.js'), - 'autoOsUpgradesEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/autoOsUpgradesEnabled.js'), - 'autoInstanceRepairsEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/autoInstanceRepairsEnabled.js'), - 'vmssTrustedLaunchEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssTrustedLaunchEnabled.js'), - 'scaleSetAdAuthEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetAdAuthEnabled.js'), - 'vmssManagedIdentityEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssManagedIdentityEnabled.js'), - 'scalesetVTPMEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/scalesetVTPMEnabled.js'), - 'scalesetSecureBootEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/scalesetSecureBootEnabled.js'), - 'vmssApprovedExtensions' : require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssApprovedExtensions'), + 'frontDoorWafEnabled': require(__dirname + '/plugins/azure/frontdoor/frontDoorWafEnabled.js'), + 'frontDoorHttpsOnly': require(__dirname + '/plugins/azure/frontdoor/frontDoorHttpsOnly.js'), + 'botProtectionEnabled': require(__dirname + '/plugins/azure/frontdoor/botProtectionEnabled.js'), + 'frontDoorManagedIdentity': require(__dirname + '/plugins/azure/frontdoor/frontDoorManagedIdentity.js'), + 'frontDoorWafDefaultRuleSet': require(__dirname + '/plugins/azure/frontdoor/frontDoorWafDefaultRuleSet.js'), + + 'namespaceEncryptionAtRest': require(__dirname + '/plugins/azure/servicebus/namespaceEncryptionAtRest.js'), + 'namespaceTlsVersion': require(__dirname + '/plugins/azure/servicebus/namespaceTlsVersion.js'), + 'namespaceManagedIdentity': require(__dirname + '/plugins/azure/servicebus/namespaceManagedIdentity.js'), + 'namespaceLocalAuth': require(__dirname + '/plugins/azure/servicebus/namespaceLocalAuth.js'), + 'namespaceHasTags': require(__dirname + '/plugins/azure/servicebus/namespaceHasTags.js'), + 'namespaceLoggingEnabled': require(__dirname + '/plugins/azure/servicebus/namespaceLoggingEnabled.js'), + 'namespacePublicAccess': require(__dirname + '/plugins/azure/servicebus/namespacePublicAccess.js'), + 'namespaceInfraEncryption': require(__dirname + '/plugins/azure/servicebus/namespaceInfraEncryption.js'), + + 'amsStorageAccountIdentity': require(__dirname + '/plugins/azure/mediaServices/amsStorageAccountIdentity.js'), + 'amsDiagnosticLogsEnabled': require(__dirname + '/plugins/azure/mediaServices/amsDiagnosticLogsEnabled.js'), + 'amsPublicAccessDisabled': require(__dirname + '/plugins/azure/mediaServices/amsPublicAccessDisabled.js'), + 'amsManagedIdentityEnabled': require(__dirname + '/plugins/azure/mediaServices/amsManagedIdentityEnabled.js'), + 'amsClassicApiDisabled': require(__dirname + '/plugins/azure/mediaServices/amsClassicApiDisabled.js'), + 'amsContentKeyPolicy': require(__dirname + '/plugins/azure/mediaServices/amsContentKeyPolicy.js'), + + 'scaleSetMultiAz': require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetMultiAz.js'), + 'scaleSetAutoscaleEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetAutoscaleEnabled.js'), + 'scaleSetHealthMonitoring': require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetHealthMonitoring.js'), + 'vmScaleSetHasTags': require(__dirname + '/plugins/azure/virtualmachinescaleset/vmScaleSetHasTags.js'), + 'noEmptyScaleSets': require(__dirname + '/plugins/azure/virtualmachinescaleset/noEmptyScaleSets.js'), + 'autoscaleNotificationsEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/autoscaleNotificationsEnabled.js'), + 'autoOsUpgradesEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/autoOsUpgradesEnabled.js'), + 'autoInstanceRepairsEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/autoInstanceRepairsEnabled.js'), + 'vmssTrustedLaunchEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssTrustedLaunchEnabled.js'), + 'scaleSetAdAuthEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/scaleSetAdAuthEnabled.js'), + 'vmssManagedIdentityEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssManagedIdentityEnabled.js'), + 'scalesetVTPMEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/scalesetVTPMEnabled.js'), + 'scalesetSecureBootEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/scalesetSecureBootEnabled.js'), + 'vmssApprovedExtensions': require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssApprovedExtensions'), 'healthMonitoringExtensionHttps': require(__dirname + '/plugins/azure/virtualmachinescaleset/healthMonitoringExtensionHttps.js'), - 'vmssBootDiagnosticsEnabled' : require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssBootDiagnosticsEnabled'), - 'vmssWindowsAntiMalwareExt' : require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssWindowsAntiMalwareExt'), + 'vmssBootDiagnosticsEnabled': require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssBootDiagnosticsEnabled'), + 'vmssWindowsAntiMalwareExt': require(__dirname + '/plugins/azure/virtualmachinescaleset/vmssWindowsAntiMalwareExt'), - 'appConfigManagedIdentity' : require(__dirname + '/plugins/azure/appConfigurations/appConfigManagedIdentity.js'), + 'appConfigManagedIdentity': require(__dirname + '/plugins/azure/appConfigurations/appConfigManagedIdentity.js'), 'appConfigurationDiagnosticLogs': require(__dirname + '/plugins/azure/appConfigurations/appConfigurationDiagnosticLogs.js'), - 'appConfigurationPublicAccess' : require(__dirname + '/plugins/azure/appConfigurations/appConfigurationPublicAccess.js'), - 'appConfigurationCmkEncrypted' : require(__dirname + '/plugins/azure/appConfigurations/appConfigurationCmkEncrypted.js'), - 'appConfigHasTags' : require(__dirname + '/plugins/azure/appConfigurations/appConfigHasTags.js'), + 'appConfigurationPublicAccess': require(__dirname + '/plugins/azure/appConfigurations/appConfigurationPublicAccess.js'), + 'appConfigurationCmkEncrypted': require(__dirname + '/plugins/azure/appConfigurations/appConfigurationCmkEncrypted.js'), + 'appConfigHasTags': require(__dirname + '/plugins/azure/appConfigurations/appConfigHasTags.js'), 'appConfigAccessKeyAuthDisabled': require(__dirname + '/plugins/azure/appConfigurations/appConfigAccessKeyAuthDisabled.js'), - 'automationAcctDiagnosticLogs' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctDiagnosticLogs.js'), - 'automationAcctManagedIdentity' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctManagedIdentity.js'), - 'automationAcctApprovedCerts' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctApprovedCerts.js'), - 'automationAcctEncryptedVars' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctEncryptedVars.js'), - 'automationAcctPublicAccess' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctPublicAccess.js'), - 'automationAcctExpiredWebhooks' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctExpiredWebhooks.js'), + 'automationAcctDiagnosticLogs': require(__dirname + '/plugins/azure/automationAccounts/automationAcctDiagnosticLogs.js'), + 'automationAcctManagedIdentity': require(__dirname + '/plugins/azure/automationAccounts/automationAcctManagedIdentity.js'), + 'automationAcctApprovedCerts': require(__dirname + '/plugins/azure/automationAccounts/automationAcctApprovedCerts.js'), + 'automationAcctEncryptedVars': require(__dirname + '/plugins/azure/automationAccounts/automationAcctEncryptedVars.js'), + 'automationAcctPublicAccess': require(__dirname + '/plugins/azure/automationAccounts/automationAcctPublicAccess.js'), + 'automationAcctExpiredWebhooks': require(__dirname + '/plugins/azure/automationAccounts/automationAcctExpiredWebhooks.js'), 'automationAcctPrivateEndpoints': require(__dirname + '/plugins/azure/automationAccounts/automationAcctPrivateEndpoints.js'), - 'automationAcctHasTags' : require(__dirname + '/plugins/azure/automationAccounts/automationAcctHasTags.js'), - 'validSourceControls' : require(__dirname + '/plugins/azure/automationAccounts/validSourceControls.js'), - - 'batchAccountCmkEncrypted' : require(__dirname + '/plugins/azure/batchAccounts/batchAccountCmkEncrypted.js'), - 'batchAccountDiagnosticLogs' : require(__dirname + '/plugins/azure/batchAccounts/batchAccountDiagnosticLogs.js'), - 'batchAccountsAADEnabled' : require(__dirname + '/plugins/azure/batchAccounts/batchAccountsAADEnabled.js'), - 'batchAccountsHasTags' : require(__dirname + '/plugins/azure/batchAccounts/batchAccountsHasTags.js'), - 'batchAccountsPublicAccess' : require(__dirname + '/plugins/azure/batchAccounts/batchAccountsPublicAccess.js'), - 'batchAccountsManagedIdentity' : require(__dirname + '/plugins/azure/batchAccounts/batchAccountsManagedIdentity.js'), - - 'accountCMKEncrypted' : require(__dirname + '/plugins/azure/openai/accountCMKEncrypted.js'), - 'accountManagedIdentity' : require(__dirname + '/plugins/azure/openai/accountManagedIdentity.js'), - 'accountDiagnosticLogging' : require(__dirname + '/plugins/azure/openai/accountDiagnosticLogging.js'), - 'accountHasTags' : require(__dirname + '/plugins/azure/openai/accountHasTags.js'), - 'accountPublicAccessDisabled' : require(__dirname + '/plugins/azure/openai/accountPublicAccessDisabled.js'), - - 'workspaceDbfsInfraEncryption' : require(__dirname + '/plugins/azure/databricks/workspaceDbfsInfraEncryption.js'), - 'workspaceSecureCluster' : require(__dirname + '/plugins/azure/databricks/workspaceSecureCluster.js'), - 'workspaceDiagnosticLogs' : require(__dirname + '/plugins/azure/databricks/workspaceDiagnosticLogs.js'), - 'workspaceManagedServicesCmk' : require(__dirname + '/plugins/azure/databricks/workspaceManagedServicesCmk.js'), - 'workspaceManagedDiskCmk' : require(__dirname + '/plugins/azure/databricks/workspaceManagedDiskCmk.js'), - 'workspaceHasTags' : require(__dirname + '/plugins/azure/databricks/workspaceHasTags.js'), - - 'workspaceManagedIdentity' : require(__dirname + '/plugins/azure/synapse/workspaceManagedIdentity.js'), - 'synapseWorkspaceAdAuthEnabled' : require(__dirname + '/plugins/azure/synapse/synapseWorkspaceAdAuthEnabled.js'), + 'automationAcctHasTags': require(__dirname + '/plugins/azure/automationAccounts/automationAcctHasTags.js'), + 'validSourceControls': require(__dirname + '/plugins/azure/automationAccounts/validSourceControls.js'), + + 'batchAccountCmkEncrypted': require(__dirname + '/plugins/azure/batchAccounts/batchAccountCmkEncrypted.js'), + 'batchAccountDiagnosticLogs': require(__dirname + '/plugins/azure/batchAccounts/batchAccountDiagnosticLogs.js'), + 'batchAccountsAADEnabled': require(__dirname + '/plugins/azure/batchAccounts/batchAccountsAADEnabled.js'), + 'batchAccountsHasTags': require(__dirname + '/plugins/azure/batchAccounts/batchAccountsHasTags.js'), + 'batchAccountsPublicAccess': require(__dirname + '/plugins/azure/batchAccounts/batchAccountsPublicAccess.js'), + 'batchAccountsManagedIdentity': require(__dirname + '/plugins/azure/batchAccounts/batchAccountsManagedIdentity.js'), + + 'accountCMKEncrypted': require(__dirname + '/plugins/azure/openai/accountCMKEncrypted.js'), + 'accountManagedIdentity': require(__dirname + '/plugins/azure/openai/accountManagedIdentity.js'), + 'accountDiagnosticLogging': require(__dirname + '/plugins/azure/openai/accountDiagnosticLogging.js'), + 'accountHasTags': require(__dirname + '/plugins/azure/openai/accountHasTags.js'), + 'accountPublicAccessDisabled': require(__dirname + '/plugins/azure/openai/accountPublicAccessDisabled.js'), + + 'workspaceDbfsInfraEncryption': require(__dirname + '/plugins/azure/databricks/workspaceDbfsInfraEncryption.js'), + 'workspaceSecureCluster': require(__dirname + '/plugins/azure/databricks/workspaceSecureCluster.js'), + 'workspaceDiagnosticLogs': require(__dirname + '/plugins/azure/databricks/workspaceDiagnosticLogs.js'), + 'workspaceManagedServicesCmk': require(__dirname + '/plugins/azure/databricks/workspaceManagedServicesCmk.js'), + 'workspaceManagedDiskCmk': require(__dirname + '/plugins/azure/databricks/workspaceManagedDiskCmk.js'), + 'workspaceHasTags': require(__dirname + '/plugins/azure/databricks/workspaceHasTags.js'), + + 'workspaceManagedIdentity': require(__dirname + '/plugins/azure/synapse/workspaceManagedIdentity.js'), + 'synapseWorkspaceAdAuthEnabled': require(__dirname + '/plugins/azure/synapse/synapseWorkspaceAdAuthEnabled.js'), 'synapseWorkspacPrivateEndpoint': require(__dirname + '/plugins/azure/synapse/synapseWorkspacPrivateEndpoint.js'), - 'synapseWorkspaceHasTags' : require(__dirname + '/plugins/azure/synapse/synapseWorkspaceHasTags.js'), + 'synapseWorkspaceHasTags': require(__dirname + '/plugins/azure/synapse/synapseWorkspaceHasTags.js'), 'workspaceDiagnosticLogsEnabled': require(__dirname + '/plugins/azure/synapse/workspaceDiagnosticLogsEnabled.js'), - 'workspaceDoubleEncryption' : require(__dirname + '/plugins/azure/synapse/workspaceDoubleEncryption.js'), + 'workspaceDoubleEncryption': require(__dirname + '/plugins/azure/synapse/workspaceDoubleEncryption.js'), - 'apiInstanceManagedIdentity' : require(__dirname + '/plugins/azure/apiManagement/apiInstanceManagedIdentity.js'), - 'apiInstanceHasTags' : require(__dirname + '/plugins/azure/apiManagement/apiInstanceHasTags.js'), + 'apiInstanceManagedIdentity': require(__dirname + '/plugins/azure/apiManagement/apiInstanceManagedIdentity.js'), + 'apiInstanceHasTags': require(__dirname + '/plugins/azure/apiManagement/apiInstanceHasTags.js'), }, github: { - 'publicKeysRotated' : require(__dirname + '/plugins/github/users/publicKeysRotated.js'), - 'gpgKeysRotated' : require(__dirname + '/plugins/github/users/gpgKeysRotated.js'), - 'userMfaEnabled' : require(__dirname + '/plugins/github/users/userMfaEnabled.js'), - 'userPrivateEmails' : require(__dirname + '/plugins/github/users/userPrivateEmails.js'), - 'orgPlanLimit' : require(__dirname + '/plugins/github/orgs/orgPlanLimit.js'), - 'orgDefaultPermission' : require(__dirname + '/plugins/github/orgs/orgDefaultPermission.js'), - 'orgMfaRequired' : require(__dirname + '/plugins/github/orgs/orgMfaRequired.js'), - 'orgExcessiveOwners' : require(__dirname + '/plugins/github/orgs/orgExcessiveOwners.js'), - 'repoDeployKeysRotated' : require(__dirname + '/plugins/github/repos/repoDeployKeysRotated.js'), - 'repoOutsideCollaborators' : require(__dirname + '/plugins/github/repos/repoOutsideCollaborators.js') + 'publicKeysRotated': require(__dirname + '/plugins/github/users/publicKeysRotated.js'), + 'gpgKeysRotated': require(__dirname + '/plugins/github/users/gpgKeysRotated.js'), + 'userMfaEnabled': require(__dirname + '/plugins/github/users/userMfaEnabled.js'), + 'userPrivateEmails': require(__dirname + '/plugins/github/users/userPrivateEmails.js'), + 'orgPlanLimit': require(__dirname + '/plugins/github/orgs/orgPlanLimit.js'), + 'orgDefaultPermission': require(__dirname + '/plugins/github/orgs/orgDefaultPermission.js'), + 'orgMfaRequired': require(__dirname + '/plugins/github/orgs/orgMfaRequired.js'), + 'orgExcessiveOwners': require(__dirname + '/plugins/github/orgs/orgExcessiveOwners.js'), + 'repoDeployKeysRotated': require(__dirname + '/plugins/github/repos/repoDeployKeysRotated.js'), + 'repoOutsideCollaborators': require(__dirname + '/plugins/github/repos/repoOutsideCollaborators.js'), + 'secretScanningEnabled': require(__dirname + '/plugins/github/repos/secretScanningEnabled.js'), + 'repoPublicAccess': require(__dirname + '/plugins/github/repos/repoPublicAccess.js') }, oracle: { - 'instanceMonitoringEnabled' : require(__dirname + '/plugins/oracle/compute/instanceMonitoringEnabled.js'), - 'autoscaleEnabled' : require(__dirname + '/plugins/oracle/compute/autoscaleEnabled.js'), - 'instancePoolMultiAD' : require(__dirname + '/plugins/oracle/compute/instancePoolMultiAD.js'), - 'instanceMaxCount' : require(__dirname + '/plugins/oracle/compute/instanceMaxCount.js'), - 'bootVolumeTransitEncryption' : require(__dirname + '/plugins/oracle/compute/bootVolumeTransitEncryption.js'), - 'bootVolumeRestorable' : require(__dirname + '/plugins/oracle/compute/bootVolumeRestorable.js'), - 'bootVolumeBackupEnabled' : require(__dirname + '/plugins/oracle/compute/bootVolumeBackupEnabled.js'), - 'instancePolicyProtection' : require(__dirname + '/plugins/oracle/compute/instancePolicyProtection.js'), - 'bootVolumeCMKEncryption' : require(__dirname + '/plugins/oracle/compute/bootVolumeCMKEncryption.js'), - 'legacyEndpointDisabled' : require(__dirname + '/plugins/oracle/compute/legacyEndpointDisabled.js'), - - 'usersMfaEnabled' : require(__dirname + '/plugins/oracle/identity/usersMfaEnabled.js'), - 'passwordRequiresLowercase' : require(__dirname + '/plugins/oracle/identity/passwordRequiresLowercase.js'), - 'passwordRequiresNumbers' : require(__dirname + '/plugins/oracle/identity/passwordRequiresNumbers.js'), - 'passwordRequiresSymbols' : require(__dirname + '/plugins/oracle/identity/passwordRequiresSymbols.js'), - 'passwordRequiresUppercase' : require(__dirname + '/plugins/oracle/identity/passwordRequiresUppercase.js'), - 'minPasswordLength' : require(__dirname + '/plugins/oracle/identity/minPasswordLength.js'), - 'emptyGroups' : require(__dirname + '/plugins/oracle/identity/emptyGroups.js'), - 'excessivePolicies' : require(__dirname + '/plugins/oracle/identity/excessivePolicies.js'), - 'excessivePolicyStatements' : require(__dirname + '/plugins/oracle/identity/excessivePolicyStatements.js'), - 'policyLeastPrivilege' : require(__dirname + '/plugins/oracle/identity/policyLeastPrivilege.js'), - 'usersEmailVerified' : require(__dirname + '/plugins/oracle/identity/usersEmailVerified.js'), - 'adminUserAPIKeys' : require(__dirname + '/plugins/oracle/identity/adminUserAPIKeys.js'), - 'userAuthTokenRotated' : require(__dirname + '/plugins/oracle/identity/userAuthTokenRotated.js'), - 'userCustomerSecretKeysRotated' : require(__dirname + '/plugins/oracle/identity/userCustomerSecretKeysRotated.js'), - 'userAPIKeysRotated' : require(__dirname + '/plugins/oracle/identity/userAPIKeysRotated.js'), - 'usersPasswordLastUsed' : require(__dirname + '/plugins/oracle/identity/usersPasswordLastUsed.js'), - 'defaultTagsForResources' : require(__dirname + '/plugins/oracle/identity/defaultTagsForResources.js'), - 'notificationTopicSubscription' : require(__dirname + '/plugins/oracle/identity/notificationTopicSubscription.js'), - 'identityProviderChanges' : require(__dirname + '/plugins/oracle/identity/identityProviderChanges.js'), - 'idpGroupMappingChanges' : require(__dirname + '/plugins/oracle/identity/idpGroupMappingChanges.js'), - 'iamGroupChanges' : require(__dirname + '/plugins/oracle/identity/iamGroupChanges.js'), - 'iamPolicyChanges' : require(__dirname + '/plugins/oracle/identity/iamPolicyChanges.js'), - 'userChanges' : require(__dirname + '/plugins/oracle/identity/userChanges.js'), - - 'openSSH' : require(__dirname + '/plugins/oracle/networking/openSSH.js'), - 'openOracleAutoDataWarehouse' : require(__dirname + '/plugins/oracle/networking/openOracleAutoDataWarehouse.js'), - 'openAllPortsProtocols' : require(__dirname + '/plugins/oracle/networking/openAllPortsProtocols.js'), - 'openRPC' : require(__dirname + '/plugins/oracle/networking/openRPC.js'), - 'openRDP' : require(__dirname + '/plugins/oracle/networking/openRDP.js'), - 'openVNCServer' : require(__dirname + '/plugins/oracle/networking/openVNCServer.js'), - 'openVNCClient' : require(__dirname + '/plugins/oracle/networking/openVNCClient.js'), - 'openTelnet' : require(__dirname + '/plugins/oracle/networking/openTelnet.js'), - 'openSMBoTCP' : require(__dirname + '/plugins/oracle/networking/openSMBoTCP.js'), - 'openOracle' : require(__dirname + '/plugins/oracle/networking/openOracle.js'), - 'openPostgreSQL' : require(__dirname + '/plugins/oracle/networking/openPostgreSQL.js'), - 'openNetBIOS' : require(__dirname + '/plugins/oracle/networking/openNetBIOS.js'), - 'openMySQL' : require(__dirname + '/plugins/oracle/networking/openMySQL.js'), - 'openFTP' : require(__dirname + '/plugins/oracle/networking/openFTP.js'), - 'openCIFS' : require(__dirname + '/plugins/oracle/networking/openCIFS.js'), - 'openDNS' : require(__dirname + '/plugins/oracle/networking/openDNS.js'), - 'openDocker' : require(__dirname + '/plugins/oracle/networking/openDocker.js'), - 'openSQLServer' : require(__dirname + '/plugins/oracle/networking/openSQLServer.js'), - 'openHadoopNameNode' : require(__dirname + '/plugins/oracle/networking/openHadoopNameNode.js'), - 'openHadoopNameNodeWebUI' : require(__dirname + '/plugins/oracle/networking/openHadoopNameNodeWebUI.js'), - 'openKibana' : require(__dirname + '/plugins/oracle/networking/openKibana.js'), - 'openSalt' : require(__dirname + '/plugins/oracle/networking/openSalt.js'), - 'openSMTP' : require(__dirname + '/plugins/oracle/networking/openSMTP.js'), - 'flowLogsEnabled' : require(__dirname + '/plugins/oracle/networking/flowLogsEnabled.js'), - 'vcnChanges' : require(__dirname + '/plugins/oracle/networking/vcnChanges.js'), - 'routeTableChanges' : require(__dirname + '/plugins/oracle/networking/routeTableChanges.js'), - 'securityListChanges' : require(__dirname + '/plugins/oracle/networking/securityListChanges.js'), - 'securityGroupChanges' : require(__dirname + '/plugins/oracle/networking/securityGroupChanges.js'), - 'networkGatewayChanges' : require(__dirname + '/plugins/oracle/networking/networkGatewayChanges.js'), - 'statelessSecurityRules' : require(__dirname + '/plugins/oracle/networking/statelessSecurityRules.js'), - 'defaultSecurityList' : require(__dirname + '/plugins/oracle/networking/defaultSecurityList.js'), - 'excessiveSecurityLists' : require(__dirname + '/plugins/oracle/networking/excessiveSecurityLists.js'), - 'lbHttpsOnly' : require(__dirname + '/plugins/oracle/networking/lbHttpsOnly.js'), - 'lbNSGEnabled' : require(__dirname + '/plugins/oracle/networking/lbNSGEnabled.js'), - 'lbNoInstances' : require(__dirname + '/plugins/oracle/networking/lbNoInstances.js'), - 'wafPublicIpEnabled' : require(__dirname + '/plugins/oracle/networking/wafPublicIpEnabled.js'), - 'inboundSecurityLists' : require(__dirname + '/plugins/oracle/networking/inboundSecurityLists.js'), - 'multipleSubnets' : require(__dirname + '/plugins/oracle/networking/multipleSubnets.js'), - 'subnetMultiAd' : require(__dirname + '/plugins/oracle/networking/subnetMultiAd.js'), - 'openHTTP' : require(__dirname + '/plugins/oracle/networking/openHTTP.js'), - - 'bucketPublicAccessType' : require(__dirname + '/plugins/oracle/objectstore/bucketPublicAccessType.js'), - 'preAuthRequestsExpiry' : require(__dirname + '/plugins/oracle/objectstore/preAuthRequestsExpiry.js'), - 'preAuthRequestsAccess' : require(__dirname + '/plugins/oracle/objectstore/preAuthRequestsAccess.js'), - 'objectPolicyProtection' : require(__dirname + '/plugins/oracle/objectstore/objectPolicyProtection.js'), - 'bucketCMKEncryption' : require(__dirname + '/plugins/oracle/objectstore/bucketCMKEncryption.js'), - 'bucketVersioning' : require(__dirname + '/plugins/oracle/objectstore/bucketVersioning.js'), - 'bucketObjectEvents' : require(__dirname + '/plugins/oracle/objectstore/bucketObjectEvents.js'), - 'bucketWriteLogsEnabled' : require(__dirname + '/plugins/oracle/objectstore/bucketWriteLogsEnabled.js'), - - 'nfsPublicAccess' : require(__dirname + '/plugins/oracle/filestorage/nfsPublicAccess.js'), - 'nfsPolicyProtection' : require(__dirname + '/plugins/oracle/filestorage/nfsPolicyProtection.js'), - 'fileSystemsCMKEncryption' : require(__dirname + '/plugins/oracle/filestorage/fileSystemsCMKEncryption.js'), - - 'dbBackupEnabled' : require(__dirname + '/plugins/oracle/database/dbBackupEnabled.js'), - 'dbPrivateSubnetOnly' : require(__dirname + '/plugins/oracle/database/dbPrivateSubnetOnly.js'), - 'dbNSGEnabled' : require(__dirname + '/plugins/oracle/database/dbNSGEnabled.js'), - 'dbPolicyProtection' : require(__dirname + '/plugins/oracle/database/dbPolicyProtection.js'), - - 'blockVolumeRestorable' : require(__dirname + '/plugins/oracle/blockstorage/blockVolumeRestorable.js'), - 'blockVolumeBackupEnabled' : require(__dirname + '/plugins/oracle/blockstorage/blockVolumeBackupEnabled.js'), - 'volumeGroupsRestorable' : require(__dirname + '/plugins/oracle/blockstorage/volumeGroupsRestorable.js'), - 'blockPolicyProtection' : require(__dirname + '/plugins/oracle/blockstorage/blockPolicyProtection.js'), - 'blockVolumeCMKEncryption' : require(__dirname + '/plugins/oracle/blockstorage/blockVolumeCMKEncryption.js'), - - 'logRetentionPeriod' : require(__dirname + '/plugins/oracle/audit/logRetentionPeriod.js'), - - 'okePrivateEndpoint' : require(__dirname + '/plugins/oracle/oke/okePrivateEndpoint.js'), - 'okeSecretsEncrypted' : require(__dirname + '/plugins/oracle/oke/okeSecretsEncrypted.js'), - 'okeSecurityGroups' : require(__dirname + '/plugins/oracle/oke/okeSecurityGroups.js'), - - 'cloudguardEnabled' : require(__dirname + '/plugins/oracle/cloudguard/cloudguardEnabled.js'), - - 'keyRotation' : require(__dirname + '/plugins/oracle/vaults/keyRotation.js'), + 'instanceMonitoringEnabled': require(__dirname + '/plugins/oracle/compute/instanceMonitoringEnabled.js'), + 'autoscaleEnabled': require(__dirname + '/plugins/oracle/compute/autoscaleEnabled.js'), + 'instancePoolMultiAD': require(__dirname + '/plugins/oracle/compute/instancePoolMultiAD.js'), + 'instanceMaxCount': require(__dirname + '/plugins/oracle/compute/instanceMaxCount.js'), + 'bootVolumeTransitEncryption': require(__dirname + '/plugins/oracle/compute/bootVolumeTransitEncryption.js'), + 'bootVolumeRestorable': require(__dirname + '/plugins/oracle/compute/bootVolumeRestorable.js'), + 'bootVolumeBackupEnabled': require(__dirname + '/plugins/oracle/compute/bootVolumeBackupEnabled.js'), + 'instancePolicyProtection': require(__dirname + '/plugins/oracle/compute/instancePolicyProtection.js'), + 'bootVolumeCMKEncryption': require(__dirname + '/plugins/oracle/compute/bootVolumeCMKEncryption.js'), + 'legacyEndpointDisabled': require(__dirname + '/plugins/oracle/compute/legacyEndpointDisabled.js'), + + 'usersMfaEnabled': require(__dirname + '/plugins/oracle/identity/usersMfaEnabled.js'), + 'passwordRequiresLowercase': require(__dirname + '/plugins/oracle/identity/passwordRequiresLowercase.js'), + 'passwordRequiresNumbers': require(__dirname + '/plugins/oracle/identity/passwordRequiresNumbers.js'), + 'passwordRequiresSymbols': require(__dirname + '/plugins/oracle/identity/passwordRequiresSymbols.js'), + 'passwordRequiresUppercase': require(__dirname + '/plugins/oracle/identity/passwordRequiresUppercase.js'), + 'minPasswordLength': require(__dirname + '/plugins/oracle/identity/minPasswordLength.js'), + 'emptyGroups': require(__dirname + '/plugins/oracle/identity/emptyGroups.js'), + 'excessivePolicies': require(__dirname + '/plugins/oracle/identity/excessivePolicies.js'), + 'excessivePolicyStatements': require(__dirname + '/plugins/oracle/identity/excessivePolicyStatements.js'), + 'policyLeastPrivilege': require(__dirname + '/plugins/oracle/identity/policyLeastPrivilege.js'), + 'usersEmailVerified': require(__dirname + '/plugins/oracle/identity/usersEmailVerified.js'), + 'adminUserAPIKeys': require(__dirname + '/plugins/oracle/identity/adminUserAPIKeys.js'), + 'userAuthTokenRotated': require(__dirname + '/plugins/oracle/identity/userAuthTokenRotated.js'), + 'userCustomerSecretKeysRotated': require(__dirname + '/plugins/oracle/identity/userCustomerSecretKeysRotated.js'), + 'userAPIKeysRotated': require(__dirname + '/plugins/oracle/identity/userAPIKeysRotated.js'), + 'usersPasswordLastUsed': require(__dirname + '/plugins/oracle/identity/usersPasswordLastUsed.js'), + 'defaultTagsForResources': require(__dirname + '/plugins/oracle/identity/defaultTagsForResources.js'), + 'notificationTopicSubscription': require(__dirname + '/plugins/oracle/identity/notificationTopicSubscription.js'), + 'identityProviderChanges': require(__dirname + '/plugins/oracle/identity/identityProviderChanges.js'), + 'idpGroupMappingChanges': require(__dirname + '/plugins/oracle/identity/idpGroupMappingChanges.js'), + 'iamGroupChanges': require(__dirname + '/plugins/oracle/identity/iamGroupChanges.js'), + 'iamPolicyChanges': require(__dirname + '/plugins/oracle/identity/iamPolicyChanges.js'), + 'userChanges': require(__dirname + '/plugins/oracle/identity/userChanges.js'), + + 'openSSH': require(__dirname + '/plugins/oracle/networking/openSSH.js'), + 'openOracleAutoDataWarehouse': require(__dirname + '/plugins/oracle/networking/openOracleAutoDataWarehouse.js'), + 'openAllPortsProtocols': require(__dirname + '/plugins/oracle/networking/openAllPortsProtocols.js'), + 'openRPC': require(__dirname + '/plugins/oracle/networking/openRPC.js'), + 'openRDP': require(__dirname + '/plugins/oracle/networking/openRDP.js'), + 'openVNCServer': require(__dirname + '/plugins/oracle/networking/openVNCServer.js'), + 'openVNCClient': require(__dirname + '/plugins/oracle/networking/openVNCClient.js'), + 'openTelnet': require(__dirname + '/plugins/oracle/networking/openTelnet.js'), + 'openSMBoTCP': require(__dirname + '/plugins/oracle/networking/openSMBoTCP.js'), + 'openOracle': require(__dirname + '/plugins/oracle/networking/openOracle.js'), + 'openPostgreSQL': require(__dirname + '/plugins/oracle/networking/openPostgreSQL.js'), + 'openNetBIOS': require(__dirname + '/plugins/oracle/networking/openNetBIOS.js'), + 'openMySQL': require(__dirname + '/plugins/oracle/networking/openMySQL.js'), + 'openFTP': require(__dirname + '/plugins/oracle/networking/openFTP.js'), + 'openCIFS': require(__dirname + '/plugins/oracle/networking/openCIFS.js'), + 'openDNS': require(__dirname + '/plugins/oracle/networking/openDNS.js'), + 'openDocker': require(__dirname + '/plugins/oracle/networking/openDocker.js'), + 'openSQLServer': require(__dirname + '/plugins/oracle/networking/openSQLServer.js'), + 'openHadoopNameNode': require(__dirname + '/plugins/oracle/networking/openHadoopNameNode.js'), + 'openHadoopNameNodeWebUI': require(__dirname + '/plugins/oracle/networking/openHadoopNameNodeWebUI.js'), + 'openKibana': require(__dirname + '/plugins/oracle/networking/openKibana.js'), + 'openSalt': require(__dirname + '/plugins/oracle/networking/openSalt.js'), + 'openSMTP': require(__dirname + '/plugins/oracle/networking/openSMTP.js'), + 'flowLogsEnabled': require(__dirname + '/plugins/oracle/networking/flowLogsEnabled.js'), + 'vcnChanges': require(__dirname + '/plugins/oracle/networking/vcnChanges.js'), + 'routeTableChanges': require(__dirname + '/plugins/oracle/networking/routeTableChanges.js'), + 'securityListChanges': require(__dirname + '/plugins/oracle/networking/securityListChanges.js'), + 'securityGroupChanges': require(__dirname + '/plugins/oracle/networking/securityGroupChanges.js'), + 'networkGatewayChanges': require(__dirname + '/plugins/oracle/networking/networkGatewayChanges.js'), + 'statelessSecurityRules': require(__dirname + '/plugins/oracle/networking/statelessSecurityRules.js'), + 'defaultSecurityList': require(__dirname + '/plugins/oracle/networking/defaultSecurityList.js'), + 'excessiveSecurityLists': require(__dirname + '/plugins/oracle/networking/excessiveSecurityLists.js'), + 'lbHttpsOnly': require(__dirname + '/plugins/oracle/networking/lbHttpsOnly.js'), + 'lbNSGEnabled': require(__dirname + '/plugins/oracle/networking/lbNSGEnabled.js'), + 'lbNoInstances': require(__dirname + '/plugins/oracle/networking/lbNoInstances.js'), + 'wafPublicIpEnabled': require(__dirname + '/plugins/oracle/networking/wafPublicIpEnabled.js'), + 'inboundSecurityLists': require(__dirname + '/plugins/oracle/networking/inboundSecurityLists.js'), + 'multipleSubnets': require(__dirname + '/plugins/oracle/networking/multipleSubnets.js'), + 'subnetMultiAd': require(__dirname + '/plugins/oracle/networking/subnetMultiAd.js'), + 'openHTTP': require(__dirname + '/plugins/oracle/networking/openHTTP.js'), + + 'bucketPublicAccessType': require(__dirname + '/plugins/oracle/objectstore/bucketPublicAccessType.js'), + 'preAuthRequestsExpiry': require(__dirname + '/plugins/oracle/objectstore/preAuthRequestsExpiry.js'), + 'preAuthRequestsAccess': require(__dirname + '/plugins/oracle/objectstore/preAuthRequestsAccess.js'), + 'objectPolicyProtection': require(__dirname + '/plugins/oracle/objectstore/objectPolicyProtection.js'), + 'bucketCMKEncryption': require(__dirname + '/plugins/oracle/objectstore/bucketCMKEncryption.js'), + 'bucketVersioning': require(__dirname + '/plugins/oracle/objectstore/bucketVersioning.js'), + 'bucketObjectEvents': require(__dirname + '/plugins/oracle/objectstore/bucketObjectEvents.js'), + 'bucketWriteLogsEnabled': require(__dirname + '/plugins/oracle/objectstore/bucketWriteLogsEnabled.js'), + + 'nfsPublicAccess': require(__dirname + '/plugins/oracle/filestorage/nfsPublicAccess.js'), + 'nfsPolicyProtection': require(__dirname + '/plugins/oracle/filestorage/nfsPolicyProtection.js'), + 'fileSystemsCMKEncryption': require(__dirname + '/plugins/oracle/filestorage/fileSystemsCMKEncryption.js'), + + 'dbBackupEnabled': require(__dirname + '/plugins/oracle/database/dbBackupEnabled.js'), + 'dbPrivateSubnetOnly': require(__dirname + '/plugins/oracle/database/dbPrivateSubnetOnly.js'), + 'dbNSGEnabled': require(__dirname + '/plugins/oracle/database/dbNSGEnabled.js'), + 'dbPolicyProtection': require(__dirname + '/plugins/oracle/database/dbPolicyProtection.js'), + + 'blockVolumeRestorable': require(__dirname + '/plugins/oracle/blockstorage/blockVolumeRestorable.js'), + 'blockVolumeBackupEnabled': require(__dirname + '/plugins/oracle/blockstorage/blockVolumeBackupEnabled.js'), + 'volumeGroupsRestorable': require(__dirname + '/plugins/oracle/blockstorage/volumeGroupsRestorable.js'), + 'blockPolicyProtection': require(__dirname + '/plugins/oracle/blockstorage/blockPolicyProtection.js'), + 'blockVolumeCMKEncryption': require(__dirname + '/plugins/oracle/blockstorage/blockVolumeCMKEncryption.js'), + + 'logRetentionPeriod': require(__dirname + '/plugins/oracle/audit/logRetentionPeriod.js'), + + 'okePrivateEndpoint': require(__dirname + '/plugins/oracle/oke/okePrivateEndpoint.js'), + 'okeSecretsEncrypted': require(__dirname + '/plugins/oracle/oke/okeSecretsEncrypted.js'), + 'okeSecurityGroups': require(__dirname + '/plugins/oracle/oke/okeSecurityGroups.js'), + + 'cloudguardEnabled': require(__dirname + '/plugins/oracle/cloudguard/cloudguardEnabled.js'), + + 'keyRotation': require(__dirname + '/plugins/oracle/vaults/keyRotation.js'), }, google: { - 'excessiveFirewallRules' : require(__dirname + '/plugins/google/vpcnetwork/excessiveFirewallRules.js'), - 'openCassandra' : require(__dirname + '/plugins/google/vpcnetwork/openCassandra.js'), - 'openDNS' : require(__dirname + '/plugins/google/vpcnetwork/openDNS.js'), - 'openDocker' : require(__dirname + '/plugins/google/vpcnetwork/openDocker.js'), - 'openSSH' : require(__dirname + '/plugins/google/vpcnetwork/openSSH.js'), - 'openCIFS' : require(__dirname + '/plugins/google/vpcnetwork/openCIFS.js'), - 'openAllPorts' : require(__dirname + '/plugins/google/vpcnetwork/openAllPorts.js'), - 'openFTP' : require(__dirname + '/plugins/google/vpcnetwork/openFTP.js'), - 'openHadoopNameNode' : require(__dirname + '/plugins/google/vpcnetwork/openHadoopNameNode.js'), - 'openHadoopNameNodeWebUI' : require(__dirname + '/plugins/google/vpcnetwork/openHadoopNameNodeWebUI.js'), - 'openKibana' : require(__dirname + '/plugins/google/vpcnetwork/openKibana.js'), - 'openMongo' : require(__dirname + '/plugins/google/vpcnetwork/openMongo.js'), - 'openMsSQL' : require(__dirname + '/plugins/google/vpcnetwork/openMsSQL.js'), - 'openMySQL' : require(__dirname + '/plugins/google/vpcnetwork/openMySQL.js'), - 'openNetBIOS' : require(__dirname + '/plugins/google/vpcnetwork/openNetBIOS.js'), - 'openOracle' : require(__dirname + '/plugins/google/vpcnetwork/openOracle.js'), - 'openPostgreSQL' : require(__dirname + '/plugins/google/vpcnetwork/openPostgreSQL.js'), - 'openRDP' : require(__dirname + '/plugins/google/vpcnetwork/openRDP.js'), - 'openRedis' : require(__dirname + '/plugins/google/vpcnetwork/openRedis.js'), - 'openRPC' : require(__dirname + '/plugins/google/vpcnetwork/openRPC.js'), - 'openSalt' : require(__dirname + '/plugins/google/vpcnetwork/openSalt.js'), - 'openSMBoTCP' : require(__dirname + '/plugins/google/vpcnetwork/openSMBoTCP.js'), - 'openSMTP' : require(__dirname + '/plugins/google/vpcnetwork/openSMTP.js'), - 'openSQLServer' : require(__dirname + '/plugins/google/vpcnetwork/openSQLServer.js'), - 'openTelnet' : require(__dirname + '/plugins/google/vpcnetwork/openTelnet.js'), - 'openVNCClient' : require(__dirname + '/plugins/google/vpcnetwork/openVNCClient.js'), - 'openVNCServer' : require(__dirname + '/plugins/google/vpcnetwork/openVNCServer.js'), - 'openOracleAutoDataWarehouse' : require(__dirname + '/plugins/google/vpcnetwork/openOracleAutoDataWarehouse.js'), - 'multipleSubnets' : require(__dirname + '/plugins/google/vpcnetwork/multipleSubnets.js'), - 'defaultVpcInUse' : require(__dirname + '/plugins/google/vpcnetwork/defaultVpcInUse.js'), - 'flowLogsEnabled' : require(__dirname + '/plugins/google/vpcnetwork/flowLogsEnabled.js'), - 'privateAccessEnabled' : require(__dirname + '/plugins/google/vpcnetwork/privateAccessEnabled.js'), - 'dnsLoggingEnabled' : require(__dirname + '/plugins/google/vpcnetwork/dnsLoggingEnabled.js'), - 'openCustomPorts' : require(__dirname + '/plugins/google/vpcnetwork/openCustomPorts.js'), - 'firewallLoggingMetadata' : require(__dirname + '/plugins/google/vpcnetwork/firewallLoggingMetadata.js'), - 'openInternalWeb' : require(__dirname + '/plugins/google/vpcnetwork/openInternalWeb.js'), - 'openLDAPS' : require(__dirname + '/plugins/google/vpcnetwork/openLDAPS.js'), - 'openMemcached' : require(__dirname + '/plugins/google/vpcnetwork/openMemcached.js'), - 'openSNMP' : require(__dirname + '/plugins/google/vpcnetwork/openSNMP.js'), - 'openLDAP' : require(__dirname + '/plugins/google/vpcnetwork/openLDAP.js'), - 'openElasticsearch' : require(__dirname + '/plugins/google/vpcnetwork/openElasticsearch.js'), - 'openCassandraClient' : require(__dirname + '/plugins/google/vpcnetwork/openCassandraClient.js'), - 'openCassandraMonitoring' : require(__dirname + '/plugins/google/vpcnetwork/openCassandraMonitoring.js'), - 'openCassandraThrift' : require(__dirname + '/plugins/google/vpcnetwork/openCassandraThrift.js'), - 'openCassandraInternode' : require(__dirname + '/plugins/google/vpcnetwork/openCassandraInternode.js'), - 'legacyNetworksExist' : require(__dirname + '/plugins/google/vpcnetwork/legacyNetworksExist.js'), - 'defaultVPCExists' : require(__dirname + '/plugins/google/vpcnetwork/defaultVPCExists.js'), - 'openHTTP' : require(__dirname + '/plugins/google/vpcnetwork/openHTTP.js'), - 'instanceDefaultNetwork' : require(__dirname + '/plugins/google/vpcnetwork/instanceDefaultNetwork.js'), - 'openAllPortsEgress' : require(__dirname + '/plugins/google/vpcnetwork/openAllPortsEgress.js'), - - 'instanceMaxCount' : require(__dirname + '/plugins/google/compute/instanceMaxCount.js'), - 'instancesMultiAz' : require(__dirname + '/plugins/google/compute/instancesMultiAz.js'), - 'autoscaleEnabled' : require(__dirname + '/plugins/google/compute/autoscaleEnabled.js'), - 'instanceLevelSSHOnly' : require(__dirname + '/plugins/google/compute/instanceLevelSSHOnly.js'), - 'instanceLeastPrivilege' : require(__dirname + '/plugins/google/compute/instanceLeastPrivilege.js'), - 'ipForwardingDisabled' : require(__dirname + '/plugins/google/compute/ipForwardingDisabled.js'), - 'connectSerialPortsDisabled' : require(__dirname + '/plugins/google/compute/connectSerialPortsDisabled.js'), - 'csekEncryptionEnabled' : require(__dirname + '/plugins/google/compute/csekEncryptionEnabled.js'), - 'osLoginEnabled' : require(__dirname + '/plugins/google/compute/osLoginEnabled.js'), - 'instancePublicAccess' : require(__dirname + '/plugins/google/compute/instancePublicAccess.js'), - 'instanceDefaultServiceAccount' : require(__dirname + '/plugins/google/compute/instanceDefaultServiceAccount.js'), - 'shieldedVmEnabled' : require(__dirname + '/plugins/google/compute/shieldedVmEnabled.js'), - 'instanceDeletionProtection' : require(__dirname + '/plugins/google/compute/instanceDeletionProtection.js'), - 'autoscaleMinCpuUtilization' : require(__dirname + '/plugins/google/compute/autoscaleMinCpuUtilization.js'), - 'instanceDesiredMachineTypes' : require(__dirname + '/plugins/google/compute/instanceDesiredMachineTypes.js'), - 'automaticRestartEnabled' : require(__dirname + '/plugins/google/compute/automaticRestartEnabled.js'), - 'instanceTemplateMachineTypes' : require(__dirname + '/plugins/google/compute/instanceTemplateMachineTypes.js'), - 'diskMultiAz' : require(__dirname + '/plugins/google/compute/diskMultiAz.js'), - 'persistentDisksAutoDelete' : require(__dirname + '/plugins/google/compute/persistentDisksAutoDelete.js'), - 'VMDisksCMKEncrypted' : require(__dirname + '/plugins/google/compute/VMDisksCMKEncrypted.js'), - 'instanceMaintenanceBehavior' : require(__dirname + '/plugins/google/compute/instanceMaintenanceBehavior.js'), - 'instancePreemptibility' : require(__dirname + '/plugins/google/compute/instancePreemptibility.js'), - 'diskInUse' : require(__dirname + '/plugins/google/compute/diskInUse.js'), - 'osLogin2FAEnabled' : require(__dirname + '/plugins/google/compute/osLogin2FAEnabled.js'), - 'diskAutomaticBackupEnabled' : require(__dirname + '/plugins/google/compute/diskAutomaticBackupEnabled.js'), - 'diskOldSnapshots' : require(__dirname + '/plugins/google/compute/diskOldSnapshots.js'), - 'frequentlyUsedSnapshots' : require(__dirname + '/plugins/google/compute/frequentlyUsedSnapshots.js'), + 'excessiveFirewallRules': require(__dirname + '/plugins/google/vpcnetwork/excessiveFirewallRules.js'), + 'openCassandra': require(__dirname + '/plugins/google/vpcnetwork/openCassandra.js'), + 'openDNS': require(__dirname + '/plugins/google/vpcnetwork/openDNS.js'), + 'openDocker': require(__dirname + '/plugins/google/vpcnetwork/openDocker.js'), + 'openSSH': require(__dirname + '/plugins/google/vpcnetwork/openSSH.js'), + 'openCIFS': require(__dirname + '/plugins/google/vpcnetwork/openCIFS.js'), + 'openAllPorts': require(__dirname + '/plugins/google/vpcnetwork/openAllPorts.js'), + 'openFTP': require(__dirname + '/plugins/google/vpcnetwork/openFTP.js'), + 'openHadoopNameNode': require(__dirname + '/plugins/google/vpcnetwork/openHadoopNameNode.js'), + 'openHadoopNameNodeWebUI': require(__dirname + '/plugins/google/vpcnetwork/openHadoopNameNodeWebUI.js'), + 'openKibana': require(__dirname + '/plugins/google/vpcnetwork/openKibana.js'), + 'openMongo': require(__dirname + '/plugins/google/vpcnetwork/openMongo.js'), + 'openMsSQL': require(__dirname + '/plugins/google/vpcnetwork/openMsSQL.js'), + 'openMySQL': require(__dirname + '/plugins/google/vpcnetwork/openMySQL.js'), + 'openNetBIOS': require(__dirname + '/plugins/google/vpcnetwork/openNetBIOS.js'), + 'openOracle': require(__dirname + '/plugins/google/vpcnetwork/openOracle.js'), + 'openPostgreSQL': require(__dirname + '/plugins/google/vpcnetwork/openPostgreSQL.js'), + 'openRDP': require(__dirname + '/plugins/google/vpcnetwork/openRDP.js'), + 'openRedis': require(__dirname + '/plugins/google/vpcnetwork/openRedis.js'), + 'openRPC': require(__dirname + '/plugins/google/vpcnetwork/openRPC.js'), + 'openSalt': require(__dirname + '/plugins/google/vpcnetwork/openSalt.js'), + 'openSMBoTCP': require(__dirname + '/plugins/google/vpcnetwork/openSMBoTCP.js'), + 'openSMTP': require(__dirname + '/plugins/google/vpcnetwork/openSMTP.js'), + 'openSQLServer': require(__dirname + '/plugins/google/vpcnetwork/openSQLServer.js'), + 'openTelnet': require(__dirname + '/plugins/google/vpcnetwork/openTelnet.js'), + 'openVNCClient': require(__dirname + '/plugins/google/vpcnetwork/openVNCClient.js'), + 'openVNCServer': require(__dirname + '/plugins/google/vpcnetwork/openVNCServer.js'), + 'openOracleAutoDataWarehouse': require(__dirname + '/plugins/google/vpcnetwork/openOracleAutoDataWarehouse.js'), + 'multipleSubnets': require(__dirname + '/plugins/google/vpcnetwork/multipleSubnets.js'), + 'defaultVpcInUse': require(__dirname + '/plugins/google/vpcnetwork/defaultVpcInUse.js'), + 'flowLogsEnabled': require(__dirname + '/plugins/google/vpcnetwork/flowLogsEnabled.js'), + 'privateAccessEnabled': require(__dirname + '/plugins/google/vpcnetwork/privateAccessEnabled.js'), + 'dnsLoggingEnabled': require(__dirname + '/plugins/google/vpcnetwork/dnsLoggingEnabled.js'), + 'openCustomPorts': require(__dirname + '/plugins/google/vpcnetwork/openCustomPorts.js'), + 'firewallLoggingMetadata': require(__dirname + '/plugins/google/vpcnetwork/firewallLoggingMetadata.js'), + 'openInternalWeb': require(__dirname + '/plugins/google/vpcnetwork/openInternalWeb.js'), + 'openLDAPS': require(__dirname + '/plugins/google/vpcnetwork/openLDAPS.js'), + 'openMemcached': require(__dirname + '/plugins/google/vpcnetwork/openMemcached.js'), + 'openSNMP': require(__dirname + '/plugins/google/vpcnetwork/openSNMP.js'), + 'openLDAP': require(__dirname + '/plugins/google/vpcnetwork/openLDAP.js'), + 'openElasticsearch': require(__dirname + '/plugins/google/vpcnetwork/openElasticsearch.js'), + 'openCassandraClient': require(__dirname + '/plugins/google/vpcnetwork/openCassandraClient.js'), + 'openCassandraMonitoring': require(__dirname + '/plugins/google/vpcnetwork/openCassandraMonitoring.js'), + 'openCassandraThrift': require(__dirname + '/plugins/google/vpcnetwork/openCassandraThrift.js'), + 'openCassandraInternode': require(__dirname + '/plugins/google/vpcnetwork/openCassandraInternode.js'), + 'legacyNetworksExist': require(__dirname + '/plugins/google/vpcnetwork/legacyNetworksExist.js'), + 'defaultVPCExists': require(__dirname + '/plugins/google/vpcnetwork/defaultVPCExists.js'), + 'openHTTP': require(__dirname + '/plugins/google/vpcnetwork/openHTTP.js'), + 'instanceDefaultNetwork': require(__dirname + '/plugins/google/vpcnetwork/instanceDefaultNetwork.js'), + 'openAllPortsEgress': require(__dirname + '/plugins/google/vpcnetwork/openAllPortsEgress.js'), + + 'instanceMaxCount': require(__dirname + '/plugins/google/compute/instanceMaxCount.js'), + 'instancesMultiAz': require(__dirname + '/plugins/google/compute/instancesMultiAz.js'), + 'autoscaleEnabled': require(__dirname + '/plugins/google/compute/autoscaleEnabled.js'), + 'instanceLevelSSHOnly': require(__dirname + '/plugins/google/compute/instanceLevelSSHOnly.js'), + 'instanceLeastPrivilege': require(__dirname + '/plugins/google/compute/instanceLeastPrivilege.js'), + 'ipForwardingDisabled': require(__dirname + '/plugins/google/compute/ipForwardingDisabled.js'), + 'connectSerialPortsDisabled': require(__dirname + '/plugins/google/compute/connectSerialPortsDisabled.js'), + 'csekEncryptionEnabled': require(__dirname + '/plugins/google/compute/csekEncryptionEnabled.js'), + 'osLoginEnabled': require(__dirname + '/plugins/google/compute/osLoginEnabled.js'), + 'instancePublicAccess': require(__dirname + '/plugins/google/compute/instancePublicAccess.js'), + 'instanceDefaultServiceAccount': require(__dirname + '/plugins/google/compute/instanceDefaultServiceAccount.js'), + 'shieldedVmEnabled': require(__dirname + '/plugins/google/compute/shieldedVmEnabled.js'), + 'instanceDeletionProtection': require(__dirname + '/plugins/google/compute/instanceDeletionProtection.js'), + 'autoscaleMinCpuUtilization': require(__dirname + '/plugins/google/compute/autoscaleMinCpuUtilization.js'), + 'instanceDesiredMachineTypes': require(__dirname + '/plugins/google/compute/instanceDesiredMachineTypes.js'), + 'automaticRestartEnabled': require(__dirname + '/plugins/google/compute/automaticRestartEnabled.js'), + 'instanceTemplateMachineTypes': require(__dirname + '/plugins/google/compute/instanceTemplateMachineTypes.js'), + 'diskMultiAz': require(__dirname + '/plugins/google/compute/diskMultiAz.js'), + 'persistentDisksAutoDelete': require(__dirname + '/plugins/google/compute/persistentDisksAutoDelete.js'), + 'VMDisksCMKEncrypted': require(__dirname + '/plugins/google/compute/VMDisksCMKEncrypted.js'), + 'instanceMaintenanceBehavior': require(__dirname + '/plugins/google/compute/instanceMaintenanceBehavior.js'), + 'instancePreemptibility': require(__dirname + '/plugins/google/compute/instancePreemptibility.js'), + 'diskInUse': require(__dirname + '/plugins/google/compute/diskInUse.js'), + 'osLogin2FAEnabled': require(__dirname + '/plugins/google/compute/osLogin2FAEnabled.js'), + 'diskAutomaticBackupEnabled': require(__dirname + '/plugins/google/compute/diskAutomaticBackupEnabled.js'), + 'diskOldSnapshots': require(__dirname + '/plugins/google/compute/diskOldSnapshots.js'), + 'frequentlyUsedSnapshots': require(__dirname + '/plugins/google/compute/frequentlyUsedSnapshots.js'), 'applicationConsistentSnapshots': require(__dirname + '/plugins/google/compute/applicationConsistentSnapshots.js'), - 'deprecatedImages' : require(__dirname + '/plugins/google/compute/deprecatedImages.js'), - 'enableUsageExport' : require(__dirname + '/plugins/google/compute/enableUsageExport.js'), - 'instanceGroupAutoHealing' : require(__dirname + '/plugins/google/compute/instanceGroupAutoHealing.js'), - 'publicDiskImages' : require(__dirname + '/plugins/google/compute/publicDiskImages.js'), - 'snapshotLabelsAdded' : require(__dirname + '/plugins/google/compute/snapshotLabelsAdded.js'), - 'diskLabelsAdded' : require(__dirname + '/plugins/google/compute/diskLabelsAdded.js'), - 'imageLabelsAdded' : require(__dirname + '/plugins/google/compute/imageLabelsAdded.js'), - 'instanceLabelsAdded' : require(__dirname + '/plugins/google/compute/instanceLabelsAdded.js'), - 'confidentialComputingEnabled' : require(__dirname + '/plugins/google/compute/confidentialComputingEnabled.js'), - 'imagesCMKEncrypted' : require(__dirname + '/plugins/google/compute/imagesCMKEncrypted.js'), - 'snapshotEncryption' : require(__dirname + '/plugins/google/compute/snapshotEncryption.js'), - 'instanceNetworkExposure' : require(__dirname + '/plugins/google/compute/instanceNetworkExposure.js'), - 'computePrivilegeAnalysis' : require(__dirname + '/plugins/google/compute/computePrivilegeAnalysis.js'), - 'keyRotation' : require(__dirname + '/plugins/google/cryptographickeys/keyRotation.js'), - 'keyProtectionLevel' : require(__dirname + '/plugins/google/cryptographickeys/keyProtectionLevel.js'), - 'kmsPublicAccess' : require(__dirname + '/plugins/google/cryptographickeys/kmsPublicAccess.js'), - - 'dbRestorable' : require(__dirname + '/plugins/google/sql/dbRestorable.js'), - 'dbAutomatedBackups' : require(__dirname + '/plugins/google/sql/dbAutomatedBackups.js'), - 'dbMultiAz' : require(__dirname + '/plugins/google/sql/dbMultiAz.js'), - 'dbPubliclyAccessible' : require(__dirname + '/plugins/google/sql/dbPubliclyAccessible.js'), - 'dbSSLEnabled' : require(__dirname + '/plugins/google/sql/dbSSLEnabled.js'), - 'anyHostRootAccess' : require(__dirname + '/plugins/google/sql/anyHostRootAccess.js'), - 'postgresqlLogMinError' : require(__dirname + '/plugins/google/sql/postgresqlLogMinError.js'), - 'postgresqlLogTempFiles' : require(__dirname + '/plugins/google/sql/postgresqlLogTempFiles.js'), - 'postgresqlLogMinDuration' : require(__dirname + '/plugins/google/sql/postgresqlLogMinDuration.js'), - 'postgresqlLogLockWaits' : require(__dirname + '/plugins/google/sql/postgresqlLogLockWaits.js'), - 'mysqlLocalInfile' : require(__dirname + '/plugins/google/sql/mysqlLocalInfile.js'), - 'postgresqlLogConnections' : require(__dirname + '/plugins/google/sql/postgresqlLogConnections.js'), - 'postgresqlLogDisconnections' : require(__dirname + '/plugins/google/sql/postgresqlLogDisconnections.js'), - 'postgresqlLogCheckpoints' : require(__dirname + '/plugins/google/sql/postgresqlLogCheckpoints.js'), - 'sqlNoPublicIps' : require(__dirname + '/plugins/google/sql/sqlNoPublicIps.js'), - 'sqlCrossDbOwnership' : require(__dirname + '/plugins/google/sql/sqlCrossDbOwnership.js'), - 'sqlContainedDatabaseAuth' : require(__dirname + '/plugins/google/sql/sqlContainedDatabaseAuth.js'), - 'postgresqlMaxConnections' : require(__dirname + '/plugins/google/sql/postgresqlMaxConnections.js'), - 'mysqlSlowQueryLog' : require(__dirname + '/plugins/google/sql/mysqlSlowQueryLog.js'), - 'storageAutoIncreaseEnabled' : require(__dirname + '/plugins/google/sql/storageAutoIncreaseEnabled.js'), - 'serverCertificateRotation' : require(__dirname + '/plugins/google/sql/serverCertificateRotation.js'), - 'sqlCMKEncryption' : require(__dirname + '/plugins/google/sql/sqlCMKEncryption.js'), - 'mysqlLatestVersion' : require(__dirname + '/plugins/google/sql/mysqlLatestVersion.js'), - 'postgresqlLatestVersion' : require(__dirname + '/plugins/google/sql/postgresqlLatestVersion.js'), - 'sqlInstanceLabelsAdded' : require(__dirname + '/plugins/google/sql/sqlInstanceLabelsAdded.js'), - 'mysqlSkipShowDatabase' : require(__dirname + '/plugins/google/sql/mysqlSkipShowDatabase.js'), - 'postgresqlLogHostname' : require(__dirname + '/plugins/google/sql/postgresqlLogHostname.js'), - 'postgresqlPgAuditEnabled' : require(__dirname + '/plugins/google/sql/postgresqlPgAuditEnabled.js'), - 'sqlServerExternalScripts' : require(__dirname + '/plugins/google/sql/sqlServerExternalScripts.js'), - 'sqlServerRemoteAccessDisabled' : require(__dirname + '/plugins/google/sql/sqlServerRemoteAccessDisabled.js'), - 'sqlServerTraceFlagDisabled' : require(__dirname + '/plugins/google/sql/sqlServerTraceFlagDisabled.js'), - 'sqlServerContainedDBAuth' : require(__dirname + '/plugins/google/sql/sqlServerContainedDBAuth.js'), - 'postgresqlLogMinMessages' : require(__dirname + '/plugins/google/sql/postgresqlLogMinMessages.js'), - 'postgresqlLogStatement' : require(__dirname + '/plugins/google/sql/postgresqlLogStatement.js'), - 'sqlServerUserOptionsDisabled' : require(__dirname + '/plugins/google/sql/sqlServerUserOptionsDisabled.js'), - 'sqlServerUserConnections' : require(__dirname + '/plugins/google/sql/sqlServerUserConnections.js'), - 'postgresqlLogErrorVerbosity' : require(__dirname + '/plugins/google/sql/postgresqlLogErrorVerbosity.js'), - 'postgresqlLogExecutorStats' : require(__dirname + '/plugins/google/sql/postgresqlLogExecutorStats.js'), - 'postgresqlLogParserStats' : require(__dirname + '/plugins/google/sql/postgresqlLogParserStats.js'), - 'postgresqlLogPlannerStats' : require(__dirname + '/plugins/google/sql/postgresqlLogPlannerStats.js'), - - 'bucketVersioning' : require(__dirname + '/plugins/google/storage/bucketVersioning.js'), - 'bucketLogging' : require(__dirname + '/plugins/google/storage/bucketLogging.js'), - 'bucketAllUsersPolicy' : require(__dirname + '/plugins/google/storage/bucketAllUsersPolicy.js'), - 'bucketRetentionPolicy' : require(__dirname + '/plugins/google/storage/bucketRetentionPolicy.js'), - 'bucketUniformAccess' : require(__dirname + '/plugins/google/storage/bucketUniformAccess.js'), - 'bucketLifecycleConfigured' : require(__dirname + '/plugins/google/storage/bucketLifecycleConfigured.js'), - 'bucketEncryption' : require(__dirname + '/plugins/google/storage/bucketEncryption.js'), - 'bucketLabelsAdded' : require(__dirname + '/plugins/google/storage/bucketLabelsAdded.js'), - - 'clbHttpsOnly' : require(__dirname + '/plugins/google/clb/clbHttpsOnly.js'), - 'clbNoInstances' : require(__dirname + '/plugins/google/clb/clbNoInstances.js'), - 'clbSecurityPolicyEnabled' : require(__dirname + '/plugins/google/clb/clbSecurityPolicyEnabled.js'), - 'clbCDNEnabled' : require(__dirname + '/plugins/google/clb/clbCDNEnabled.js'), - 'clbLoggingEnabled' : require(__dirname + '/plugins/google/clb/clbLoggingEnabled.js'), - - 'serviceLimits' : require(__dirname + '/plugins/google/iam/serviceLimits.js'), - 'serviceAccountAdmin' : require(__dirname + '/plugins/google/iam/serviceAccountAdmin.js'), - 'serviceAccountUser' : require(__dirname + '/plugins/google/iam/serviceAccountUser.js'), - 'serviceAccountSeparation' : require(__dirname + '/plugins/google/iam/serviceAccountSeparation.js'), - 'kmsUserSeparation' : require(__dirname + '/plugins/google/iam/kmsUserSeparation.js'), - 'serviceAccountKeyRotation' : require(__dirname + '/plugins/google/iam/serviceAccountKeyRotation.js'), - 'serviceAccountManagedKeys' : require(__dirname + '/plugins/google/iam/serviceAccountManagedKeys.js'), - 'corporateEmailsOnly' : require(__dirname + '/plugins/google/iam/corporateEmailsOnly.js'), - - 'serviceAccountTokenCreator' : require(__dirname + '/plugins/google/iam/serviceAccountTokenCreator.js'), - 'memberAdmin' : require(__dirname + '/plugins/google/iam/memberAdmin.js'), - 'serviceAccountRole' : require(__dirname + '/plugins/google/iam/serviceAccountRole.js'), - 'bigtableAdmin' : require(__dirname + '/plugins/google/iam/bigtableAdmin.js'), - 'bigqueryAdmin' : require(__dirname + '/plugins/google/iam/bigqueryAdmin.js'), - 'pubsubAdmin' : require(__dirname + '/plugins/google/iam/pubsubAdmin.js'), - - - 'apiKeyRotation' : require(__dirname + '/plugins/google/api/apiKeyRotation.js'), - 'apiKeyApplicationRestriction' : require(__dirname + '/plugins/google/api/apiKeyApplicationRestriction.js'), - 'apiKeyActiveServices' : require(__dirname + '/plugins/google/api/apiKeyActiveServices.js'), - 'projectAPIKeys' : require(__dirname + '/plugins/google/api/projectAPIKeys.js'), - 'apiKeyAPIRestriction' : require(__dirname + '/plugins/google/api/apiKeyAPIRestriction.js'), - - 'privateEndpoint' : require(__dirname + '/plugins/google/kubernetes/privateEndpoint.js'), - 'monitoringEnabled' : require(__dirname + '/plugins/google/kubernetes/monitoringEnabled.js'), - 'clusterLeastPrivilege' : require(__dirname + '/plugins/google/kubernetes/clusterLeastPrivilege.js'), - 'loggingEnabled' : require(__dirname + '/plugins/google/kubernetes/loggingEnabled.js'), - 'aliasIpRangesEnabled' : require(__dirname + '/plugins/google/kubernetes/aliasIpRangesEnabled.js'), - 'legacyAuthorizationDisabled' : require(__dirname + '/plugins/google/kubernetes/legacyAuthorizationDisabled.js'), - 'masterAuthorizedNetwork' : require(__dirname + '/plugins/google/kubernetes/masterAuthorizedNetwork.js'), - 'clusterLabelsAdded' : require(__dirname + '/plugins/google/kubernetes/clusterLabelsAdded.js'), - 'webDashboardDisabled' : require(__dirname + '/plugins/google/kubernetes/webDashboardDisabled.js'), - 'defaultServiceAccount' : require(__dirname + '/plugins/google/kubernetes/defaultServiceAccount.js'), - 'cosImageEnabled' : require(__dirname + '/plugins/google/kubernetes/cosImageEnabled.js'), - 'autoNodeRepairEnabled' : require(__dirname + '/plugins/google/kubernetes/autoNodeRepairEnabled.js'), - 'autoNodeUpgradesEnabled' : require(__dirname + '/plugins/google/kubernetes/autoNodeUpgradesEnabled.js'), - 'networkPolicyEnabled' : require(__dirname + '/plugins/google/kubernetes/networkPolicyEnabled.js'), - 'privateClusterEnabled' : require(__dirname + '/plugins/google/kubernetes/privateClusterEnabled.js'), - 'basicAuthenticationDisabled' : require(__dirname + '/plugins/google/kubernetes/basicAuthenticationDisabled.js'), - 'kubernetesAlphaDisabled' : require(__dirname + '/plugins/google/kubernetes/kubernetesAlphaDisabled.js'), - 'shieldedNodes' : require(__dirname + '/plugins/google/kubernetes/shieldedNodes.js'), - 'integrityMonitoringEnabled' : require(__dirname + '/plugins/google/kubernetes/integrityMonitoringEnabled.js'), - 'secureBootEnabled' : require(__dirname + '/plugins/google/kubernetes/secureBootEnabled.js'), - 'nodeEncryption' : require(__dirname + '/plugins/google/kubernetes/nodeEncryption.js'), - 'clusterEncryption' : require(__dirname + '/plugins/google/kubernetes/clusterEncryption.js'), - 'binaryAuthorizationEnabled' : require(__dirname + '/plugins/google/kubernetes/binaryAuthorizationEnabled.js'), - 'clientCertificateDisabled' : require(__dirname + '/plugins/google/kubernetes/clientCertificateDisabled.js'), - 'clusterNetworkExposure' : require(__dirname + '/plugins/google/kubernetes/clusterNetworkExposure.js'), - 'kubernetesPrivilegeAnalysis' : require(__dirname + '/plugins/google/kubernetes/kubernetesPrivilegeAnalysis.js'), - 'dnsSecEnabled' : require(__dirname + '/plugins/google/dns/dnsSecEnabled.js'), - 'dnsSecSigningAlgorithm' : require(__dirname + '/plugins/google/dns/dnsSecSigningAlgorithm.js'), - 'dnsZoneLabelsAdded' : require(__dirname + '/plugins/google/dns/dnsZoneLabelsAdded.js'), - - 'auditLoggingEnabled' : require(__dirname + '/plugins/google/logging/auditLoggingEnabled.js'), - 'projectOwnershipLogging' : require(__dirname + '/plugins/google/logging/projectOwnershipLogging.js'), - 'storagePermissionsLogging' : require(__dirname + '/plugins/google/logging/storagePermissionsLogging.js'), - 'sqlConfigurationLogging' : require(__dirname + '/plugins/google/logging/sqlConfigurationLogging.js'), - 'auditConfigurationLogging' : require(__dirname + '/plugins/google/logging/auditConfigurationLogging.js'), - 'customRoleLogging' : require(__dirname + '/plugins/google/logging/customRoleLogging.js'), - 'vpcFirewallRuleLogging' : require(__dirname + '/plugins/google/logging/vpcFirewallRuleLogging.js'), - 'vpcNetworkRouteLogging' : require(__dirname + '/plugins/google/logging/vpcNetworkRouteLogging.js'), - 'vpcNetworkLogging' : require(__dirname + '/plugins/google/logging/vpcNetworkLogging.js'), - 'logSinksEnabled' : require(__dirname + '/plugins/google/logging/logSinksEnabled.js'), - - 'datasetAllUsersPolicy' : require(__dirname + '/plugins/google/bigquery/datasetAllUsersPolicy.js'), - 'tablesCMKEncrypted' : require(__dirname + '/plugins/google/bigquery/tablesCMKEncrypted.js'), - 'datasetLabelsAdded' : require(__dirname + '/plugins/google/bigquery/datasetLabelsAdded.js'), - 'datasetsCMKEncrypted' : require(__dirname + '/plugins/google/bigquery/datasetsCMKEncrypted.js'), - - 'topicEncryption' : require(__dirname + '/plugins/google/pubsub/topicEncryption.js'), - 'deadLetteringEnabled' : require(__dirname + '/plugins/google/pubsub/deadLetteringEnabled.js'), - 'topicLabelsAdded' : require(__dirname + '/plugins/google/pubsub/topicLabelsAdded.js'), - 'topicAllUsersPolicy' : require(__dirname + '/plugins/google/pubsub/topicAllUsersPolicy.js'), - - 'dataflowHangedJobs' : require(__dirname + '/plugins/google/dataflow/dataflowHangedJobs.js'), - 'dataflowJobsEncryption' : require(__dirname + '/plugins/google/dataflow/dataflowJobsEncryption.js'), - - 'deleteExpiredDeployments' : require(__dirname + '/plugins/google/deploymentmanager/deleteExpiredDeployments.js'), - - 'instanceNodeCount' : require(__dirname + '/plugins/google/spanner/instanceNodeCount.js'), - - 'httpTriggerRequireHttps' : require(__dirname + '/plugins/google/cloudfunctions/httpTriggerRequireHttps.js'), - 'functionDefaultServiceAccount' : require(__dirname + '/plugins/google/cloudfunctions/functionDefaultServiceAccount.js'), - 'ingressAllTrafficDisabled' : require(__dirname + '/plugins/google/cloudfunctions/ingressAllTrafficDisabled.js'), - 'cloudFunctionLabelsAdded' : require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionLabelsAdded.js'), - 'cloudFunctionOldRuntime' : require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionOldRuntime.js'), - 'functionAllUsersPolicy' : require(__dirname + '/plugins/google/cloudfunctions/functionAllUsersPolicy.js'), - 'serverlessVPCAccess' : require(__dirname + '/plugins/google/cloudfunctions/serverlessVPCAccess.js'), - 'cloudFunctionNetworkExposure' : require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionNetworkExposure.js'), + 'deprecatedImages': require(__dirname + '/plugins/google/compute/deprecatedImages.js'), + 'enableUsageExport': require(__dirname + '/plugins/google/compute/enableUsageExport.js'), + 'instanceGroupAutoHealing': require(__dirname + '/plugins/google/compute/instanceGroupAutoHealing.js'), + 'publicDiskImages': require(__dirname + '/plugins/google/compute/publicDiskImages.js'), + 'snapshotLabelsAdded': require(__dirname + '/plugins/google/compute/snapshotLabelsAdded.js'), + 'diskLabelsAdded': require(__dirname + '/plugins/google/compute/diskLabelsAdded.js'), + 'imageLabelsAdded': require(__dirname + '/plugins/google/compute/imageLabelsAdded.js'), + 'instanceLabelsAdded': require(__dirname + '/plugins/google/compute/instanceLabelsAdded.js'), + 'confidentialComputingEnabled': require(__dirname + '/plugins/google/compute/confidentialComputingEnabled.js'), + 'imagesCMKEncrypted': require(__dirname + '/plugins/google/compute/imagesCMKEncrypted.js'), + 'snapshotEncryption': require(__dirname + '/plugins/google/compute/snapshotEncryption.js'), + 'instanceNetworkExposure': require(__dirname + '/plugins/google/compute/instanceNetworkExposure.js'), + 'computePrivilegeAnalysis': require(__dirname + '/plugins/google/compute/computePrivilegeAnalysis.js'), + 'keyRotation': require(__dirname + '/plugins/google/cryptographickeys/keyRotation.js'), + 'keyProtectionLevel': require(__dirname + '/plugins/google/cryptographickeys/keyProtectionLevel.js'), + 'kmsPublicAccess': require(__dirname + '/plugins/google/cryptographickeys/kmsPublicAccess.js'), + + 'dbRestorable': require(__dirname + '/plugins/google/sql/dbRestorable.js'), + 'dbAutomatedBackups': require(__dirname + '/plugins/google/sql/dbAutomatedBackups.js'), + 'dbMultiAz': require(__dirname + '/plugins/google/sql/dbMultiAz.js'), + 'dbPubliclyAccessible': require(__dirname + '/plugins/google/sql/dbPubliclyAccessible.js'), + 'dbSSLEnabled': require(__dirname + '/plugins/google/sql/dbSSLEnabled.js'), + 'anyHostRootAccess': require(__dirname + '/plugins/google/sql/anyHostRootAccess.js'), + 'postgresqlLogMinError': require(__dirname + '/plugins/google/sql/postgresqlLogMinError.js'), + 'postgresqlLogTempFiles': require(__dirname + '/plugins/google/sql/postgresqlLogTempFiles.js'), + 'postgresqlLogMinDuration': require(__dirname + '/plugins/google/sql/postgresqlLogMinDuration.js'), + 'postgresqlLogLockWaits': require(__dirname + '/plugins/google/sql/postgresqlLogLockWaits.js'), + 'mysqlLocalInfile': require(__dirname + '/plugins/google/sql/mysqlLocalInfile.js'), + 'postgresqlLogConnections': require(__dirname + '/plugins/google/sql/postgresqlLogConnections.js'), + 'postgresqlLogDisconnections': require(__dirname + '/plugins/google/sql/postgresqlLogDisconnections.js'), + 'postgresqlLogCheckpoints': require(__dirname + '/plugins/google/sql/postgresqlLogCheckpoints.js'), + 'sqlNoPublicIps': require(__dirname + '/plugins/google/sql/sqlNoPublicIps.js'), + 'sqlCrossDbOwnership': require(__dirname + '/plugins/google/sql/sqlCrossDbOwnership.js'), + 'sqlContainedDatabaseAuth': require(__dirname + '/plugins/google/sql/sqlContainedDatabaseAuth.js'), + 'postgresqlMaxConnections': require(__dirname + '/plugins/google/sql/postgresqlMaxConnections.js'), + 'mysqlSlowQueryLog': require(__dirname + '/plugins/google/sql/mysqlSlowQueryLog.js'), + 'storageAutoIncreaseEnabled': require(__dirname + '/plugins/google/sql/storageAutoIncreaseEnabled.js'), + 'serverCertificateRotation': require(__dirname + '/plugins/google/sql/serverCertificateRotation.js'), + 'sqlCMKEncryption': require(__dirname + '/plugins/google/sql/sqlCMKEncryption.js'), + 'mysqlLatestVersion': require(__dirname + '/plugins/google/sql/mysqlLatestVersion.js'), + 'postgresqlLatestVersion': require(__dirname + '/plugins/google/sql/postgresqlLatestVersion.js'), + 'sqlInstanceLabelsAdded': require(__dirname + '/plugins/google/sql/sqlInstanceLabelsAdded.js'), + 'mysqlSkipShowDatabase': require(__dirname + '/plugins/google/sql/mysqlSkipShowDatabase.js'), + 'postgresqlLogHostname': require(__dirname + '/plugins/google/sql/postgresqlLogHostname.js'), + 'postgresqlPgAuditEnabled': require(__dirname + '/plugins/google/sql/postgresqlPgAuditEnabled.js'), + 'sqlServerExternalScripts': require(__dirname + '/plugins/google/sql/sqlServerExternalScripts.js'), + 'sqlServerRemoteAccessDisabled': require(__dirname + '/plugins/google/sql/sqlServerRemoteAccessDisabled.js'), + 'sqlServerTraceFlagDisabled': require(__dirname + '/plugins/google/sql/sqlServerTraceFlagDisabled.js'), + 'sqlServerContainedDBAuth': require(__dirname + '/plugins/google/sql/sqlServerContainedDBAuth.js'), + 'postgresqlLogMinMessages': require(__dirname + '/plugins/google/sql/postgresqlLogMinMessages.js'), + 'postgresqlLogStatement': require(__dirname + '/plugins/google/sql/postgresqlLogStatement.js'), + 'sqlServerUserOptionsDisabled': require(__dirname + '/plugins/google/sql/sqlServerUserOptionsDisabled.js'), + 'sqlServerUserConnections': require(__dirname + '/plugins/google/sql/sqlServerUserConnections.js'), + 'postgresqlLogErrorVerbosity': require(__dirname + '/plugins/google/sql/postgresqlLogErrorVerbosity.js'), + 'postgresqlLogExecutorStats': require(__dirname + '/plugins/google/sql/postgresqlLogExecutorStats.js'), + 'postgresqlLogParserStats': require(__dirname + '/plugins/google/sql/postgresqlLogParserStats.js'), + 'postgresqlLogPlannerStats': require(__dirname + '/plugins/google/sql/postgresqlLogPlannerStats.js'), + + 'bucketVersioning': require(__dirname + '/plugins/google/storage/bucketVersioning.js'), + 'bucketLogging': require(__dirname + '/plugins/google/storage/bucketLogging.js'), + 'bucketAllUsersPolicy': require(__dirname + '/plugins/google/storage/bucketAllUsersPolicy.js'), + 'bucketRetentionPolicy': require(__dirname + '/plugins/google/storage/bucketRetentionPolicy.js'), + 'bucketUniformAccess': require(__dirname + '/plugins/google/storage/bucketUniformAccess.js'), + 'bucketLifecycleConfigured': require(__dirname + '/plugins/google/storage/bucketLifecycleConfigured.js'), + 'bucketEncryption': require(__dirname + '/plugins/google/storage/bucketEncryption.js'), + 'bucketLabelsAdded': require(__dirname + '/plugins/google/storage/bucketLabelsAdded.js'), + + 'clbHttpsOnly': require(__dirname + '/plugins/google/clb/clbHttpsOnly.js'), + 'clbNoInstances': require(__dirname + '/plugins/google/clb/clbNoInstances.js'), + 'clbSecurityPolicyEnabled': require(__dirname + '/plugins/google/clb/clbSecurityPolicyEnabled.js'), + 'clbCDNEnabled': require(__dirname + '/plugins/google/clb/clbCDNEnabled.js'), + 'clbLoggingEnabled': require(__dirname + '/plugins/google/clb/clbLoggingEnabled.js'), + + 'serviceLimits': require(__dirname + '/plugins/google/iam/serviceLimits.js'), + 'serviceAccountAdmin': require(__dirname + '/plugins/google/iam/serviceAccountAdmin.js'), + 'serviceAccountUser': require(__dirname + '/plugins/google/iam/serviceAccountUser.js'), + 'serviceAccountSeparation': require(__dirname + '/plugins/google/iam/serviceAccountSeparation.js'), + 'kmsUserSeparation': require(__dirname + '/plugins/google/iam/kmsUserSeparation.js'), + 'serviceAccountKeyRotation': require(__dirname + '/plugins/google/iam/serviceAccountKeyRotation.js'), + 'serviceAccountManagedKeys': require(__dirname + '/plugins/google/iam/serviceAccountManagedKeys.js'), + 'corporateEmailsOnly': require(__dirname + '/plugins/google/iam/corporateEmailsOnly.js'), + + 'serviceAccountTokenCreator': require(__dirname + '/plugins/google/iam/serviceAccountTokenCreator.js'), + 'memberAdmin': require(__dirname + '/plugins/google/iam/memberAdmin.js'), + 'serviceAccountRole': require(__dirname + '/plugins/google/iam/serviceAccountRole.js'), + 'bigtableAdmin': require(__dirname + '/plugins/google/iam/bigtableAdmin.js'), + 'bigqueryAdmin': require(__dirname + '/plugins/google/iam/bigqueryAdmin.js'), + 'pubsubAdmin': require(__dirname + '/plugins/google/iam/pubsubAdmin.js'), + + + 'apiKeyRotation': require(__dirname + '/plugins/google/api/apiKeyRotation.js'), + 'apiKeyApplicationRestriction': require(__dirname + '/plugins/google/api/apiKeyApplicationRestriction.js'), + 'apiKeyActiveServices': require(__dirname + '/plugins/google/api/apiKeyActiveServices.js'), + 'projectAPIKeys': require(__dirname + '/plugins/google/api/projectAPIKeys.js'), + 'apiKeyAPIRestriction': require(__dirname + '/plugins/google/api/apiKeyAPIRestriction.js'), + + 'privateEndpoint': require(__dirname + '/plugins/google/kubernetes/privateEndpoint.js'), + 'monitoringEnabled': require(__dirname + '/plugins/google/kubernetes/monitoringEnabled.js'), + 'clusterLeastPrivilege': require(__dirname + '/plugins/google/kubernetes/clusterLeastPrivilege.js'), + 'loggingEnabled': require(__dirname + '/plugins/google/kubernetes/loggingEnabled.js'), + 'aliasIpRangesEnabled': require(__dirname + '/plugins/google/kubernetes/aliasIpRangesEnabled.js'), + 'legacyAuthorizationDisabled': require(__dirname + '/plugins/google/kubernetes/legacyAuthorizationDisabled.js'), + 'masterAuthorizedNetwork': require(__dirname + '/plugins/google/kubernetes/masterAuthorizedNetwork.js'), + 'clusterLabelsAdded': require(__dirname + '/plugins/google/kubernetes/clusterLabelsAdded.js'), + 'webDashboardDisabled': require(__dirname + '/plugins/google/kubernetes/webDashboardDisabled.js'), + 'defaultServiceAccount': require(__dirname + '/plugins/google/kubernetes/defaultServiceAccount.js'), + 'cosImageEnabled': require(__dirname + '/plugins/google/kubernetes/cosImageEnabled.js'), + 'autoNodeRepairEnabled': require(__dirname + '/plugins/google/kubernetes/autoNodeRepairEnabled.js'), + 'autoNodeUpgradesEnabled': require(__dirname + '/plugins/google/kubernetes/autoNodeUpgradesEnabled.js'), + 'networkPolicyEnabled': require(__dirname + '/plugins/google/kubernetes/networkPolicyEnabled.js'), + 'privateClusterEnabled': require(__dirname + '/plugins/google/kubernetes/privateClusterEnabled.js'), + 'basicAuthenticationDisabled': require(__dirname + '/plugins/google/kubernetes/basicAuthenticationDisabled.js'), + 'kubernetesAlphaDisabled': require(__dirname + '/plugins/google/kubernetes/kubernetesAlphaDisabled.js'), + 'shieldedNodes': require(__dirname + '/plugins/google/kubernetes/shieldedNodes.js'), + 'integrityMonitoringEnabled': require(__dirname + '/plugins/google/kubernetes/integrityMonitoringEnabled.js'), + 'secureBootEnabled': require(__dirname + '/plugins/google/kubernetes/secureBootEnabled.js'), + 'nodeEncryption': require(__dirname + '/plugins/google/kubernetes/nodeEncryption.js'), + 'clusterEncryption': require(__dirname + '/plugins/google/kubernetes/clusterEncryption.js'), + 'binaryAuthorizationEnabled': require(__dirname + '/plugins/google/kubernetes/binaryAuthorizationEnabled.js'), + 'clientCertificateDisabled': require(__dirname + '/plugins/google/kubernetes/clientCertificateDisabled.js'), + 'clusterNetworkExposure': require(__dirname + '/plugins/google/kubernetes/clusterNetworkExposure.js'), + 'kubernetesPrivilegeAnalysis': require(__dirname + '/plugins/google/kubernetes/kubernetesPrivilegeAnalysis.js'), + 'dnsSecEnabled': require(__dirname + '/plugins/google/dns/dnsSecEnabled.js'), + 'dnsSecSigningAlgorithm': require(__dirname + '/plugins/google/dns/dnsSecSigningAlgorithm.js'), + 'dnsZoneLabelsAdded': require(__dirname + '/plugins/google/dns/dnsZoneLabelsAdded.js'), + + 'auditLoggingEnabled': require(__dirname + '/plugins/google/logging/auditLoggingEnabled.js'), + 'projectOwnershipLogging': require(__dirname + '/plugins/google/logging/projectOwnershipLogging.js'), + 'storagePermissionsLogging': require(__dirname + '/plugins/google/logging/storagePermissionsLogging.js'), + 'sqlConfigurationLogging': require(__dirname + '/plugins/google/logging/sqlConfigurationLogging.js'), + 'auditConfigurationLogging': require(__dirname + '/plugins/google/logging/auditConfigurationLogging.js'), + 'customRoleLogging': require(__dirname + '/plugins/google/logging/customRoleLogging.js'), + 'vpcFirewallRuleLogging': require(__dirname + '/plugins/google/logging/vpcFirewallRuleLogging.js'), + 'vpcNetworkRouteLogging': require(__dirname + '/plugins/google/logging/vpcNetworkRouteLogging.js'), + 'vpcNetworkLogging': require(__dirname + '/plugins/google/logging/vpcNetworkLogging.js'), + 'logSinksEnabled': require(__dirname + '/plugins/google/logging/logSinksEnabled.js'), + + 'datasetAllUsersPolicy': require(__dirname + '/plugins/google/bigquery/datasetAllUsersPolicy.js'), + 'tablesCMKEncrypted': require(__dirname + '/plugins/google/bigquery/tablesCMKEncrypted.js'), + 'datasetLabelsAdded': require(__dirname + '/plugins/google/bigquery/datasetLabelsAdded.js'), + 'datasetsCMKEncrypted': require(__dirname + '/plugins/google/bigquery/datasetsCMKEncrypted.js'), + + 'topicEncryption': require(__dirname + '/plugins/google/pubsub/topicEncryption.js'), + 'deadLetteringEnabled': require(__dirname + '/plugins/google/pubsub/deadLetteringEnabled.js'), + 'topicLabelsAdded': require(__dirname + '/plugins/google/pubsub/topicLabelsAdded.js'), + 'topicAllUsersPolicy': require(__dirname + '/plugins/google/pubsub/topicAllUsersPolicy.js'), + + 'dataflowHangedJobs': require(__dirname + '/plugins/google/dataflow/dataflowHangedJobs.js'), + 'dataflowJobsEncryption': require(__dirname + '/plugins/google/dataflow/dataflowJobsEncryption.js'), + + 'deleteExpiredDeployments': require(__dirname + '/plugins/google/deploymentmanager/deleteExpiredDeployments.js'), + + 'instanceNodeCount': require(__dirname + '/plugins/google/spanner/instanceNodeCount.js'), + + 'httpTriggerRequireHttps': require(__dirname + '/plugins/google/cloudfunctions/httpTriggerRequireHttps.js'), + 'functionDefaultServiceAccount': require(__dirname + '/plugins/google/cloudfunctions/functionDefaultServiceAccount.js'), + 'ingressAllTrafficDisabled': require(__dirname + '/plugins/google/cloudfunctions/ingressAllTrafficDisabled.js'), + 'cloudFunctionLabelsAdded': require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionLabelsAdded.js'), + 'cloudFunctionOldRuntime': require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionOldRuntime.js'), + 'functionAllUsersPolicy': require(__dirname + '/plugins/google/cloudfunctions/functionAllUsersPolicy.js'), + 'serverlessVPCAccess': require(__dirname + '/plugins/google/cloudfunctions/serverlessVPCAccess.js'), + 'cloudFunctionNetworkExposure': require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionNetworkExposure.js'), 'cloudFunctionsPrivilegeAnalysis': require(__dirname + '/plugins/google/cloudfunctions/cloudFunctionsPrivilegeAnalysis.js'), - - 'cloudFunctionV2HttpsOnly' : require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2HttpsOnly.js'), + 'cfEnvSecrets': require(__dirname + '/plugins/google/cloudfunctions/cfEnvSecrets.js'), + + 'cloudFunctionV2HttpsOnly': require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2HttpsOnly.js'), 'functionV2DefaultServiceAccount': require(__dirname + '/plugins/google/cloudfunctionsv2/functionV2DefaultServiceAccount.js'), 'cloudFunctionV2IngressSettings': require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2IngressSettings.js'), - 'cloudFunctionV2LabelsAdded' : require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2LabelsAdded.js'), - 'cloudFunctionV2OldRuntime' : require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2OldRuntime.js'), - 'cloudFunctionV2VPCConnector' : require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2VPCConnector.js'), - - 'computeAllowedExternalIPs' : require(__dirname + '/plugins/google/cloudresourcemanager/computeAllowedExternalIPs.js'), - 'disableAutomaticIAMGrants' : require(__dirname + '/plugins/google/cloudresourcemanager/disableAutomaticIAMGrants.js'), - 'disableGuestAttributes' : require(__dirname + '/plugins/google/cloudresourcemanager/disableGuestAttributes.js'), - 'disableSerialPortAccess' : require(__dirname + '/plugins/google/cloudresourcemanager/disableSerialPortAccess.js'), - 'disableKeyCreation' : require(__dirname + '/plugins/google/cloudresourcemanager/disableKeyCreation.js'), - 'disableKeyUpload' : require(__dirname + '/plugins/google/cloudresourcemanager/disableKeyUpload.js'), + 'cloudFunctionV2LabelsAdded': require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2LabelsAdded.js'), + 'cloudFunctionV2OldRuntime': require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2OldRuntime.js'), + 'cloudFunctionV2VPCConnector': require(__dirname + '/plugins/google/cloudfunctionsv2/cloudFunctionV2VPCConnector.js'), + + 'computeAllowedExternalIPs': require(__dirname + '/plugins/google/cloudresourcemanager/computeAllowedExternalIPs.js'), + 'disableAutomaticIAMGrants': require(__dirname + '/plugins/google/cloudresourcemanager/disableAutomaticIAMGrants.js'), + 'disableGuestAttributes': require(__dirname + '/plugins/google/cloudresourcemanager/disableGuestAttributes.js'), + 'disableSerialPortAccess': require(__dirname + '/plugins/google/cloudresourcemanager/disableSerialPortAccess.js'), + 'disableKeyCreation': require(__dirname + '/plugins/google/cloudresourcemanager/disableKeyCreation.js'), + 'disableKeyUpload': require(__dirname + '/plugins/google/cloudresourcemanager/disableKeyUpload.js'), 'disableIdentityClusterCreation': require(__dirname + '/plugins/google/cloudresourcemanager/disableIdentityClusterCreation.js'), - 'detailedAuditLoggingMode' : require(__dirname + '/plugins/google/cloudresourcemanager/detailedAuditLoggingMode.js'), - 'uniformBucketLevelAccess' : require(__dirname + '/plugins/google/cloudresourcemanager/uniformBucketLevelAccess.js'), - 'requireOsLogin' : require(__dirname + '/plugins/google/cloudresourcemanager/requireOsLogin.js'), - 'restrictAuthorizedNetworks' : require(__dirname + '/plugins/google/cloudresourcemanager/restrictAuthorizedNetworks.js'), - 'disableDefaultEncryption' : require(__dirname + '/plugins/google/cloudresourcemanager/disableDefaultEncryption.js'), - 'restrictLoadBalancerCreation' : require(__dirname + '/plugins/google/cloudresourcemanager/restrictLoadBalancerCreation.js'), - 'restrictSharedVPCSubnetworks' : require(__dirname + '/plugins/google/cloudresourcemanager/restrictSharedVPCSubnetworks.js'), - 'restrictVPCPeering' : require(__dirname + '/plugins/google/cloudresourcemanager/restrictVPCPeering.js'), - 'restrictVPNPeerIPs' : require(__dirname + '/plugins/google/cloudresourcemanager/restrictVPNPeerIPs.js'), - 'disableVMIPForwarding' : require(__dirname + '/plugins/google/cloudresourcemanager/disableVMIPForwarding.js'), - 'trustedImageProjects' : require(__dirname + '/plugins/google/cloudresourcemanager/trustedImageProjects.js'), - 'skipDefaultNetworkCreation' : require(__dirname + '/plugins/google/cloudresourcemanager/skipDefaultNetworkCreation.js'), - 'locationBasedRestriction' : require(__dirname + '/plugins/google/cloudresourcemanager/locationBasedRestriction.js'), - 'disableServiceAccountCreation' : require(__dirname + '/plugins/google/cloudresourcemanager/disableServiceAccountCreation.js'), - 'essentialContactsConfigured' : require(__dirname + '/plugins/google/cloudresourcemanager/essentialContactsConfigured.js'), - - 'dataprocClusterLabelsAdded' : require(__dirname + '/plugins/google/dataproc/dataprocClusterLabelsAdded.js'), - 'hadoopSecureModeEnabled' : require(__dirname + '/plugins/google/dataproc/hadoopSecureModeEnabled.js'), - 'dataprocClusterEncryption' : require(__dirname + '/plugins/google/dataproc/dataprocClusterEncryption.js'), - - 'bigtableInstanceLabelsAdded' : require(__dirname + '/plugins/google/bigtable/bigtableInstanceLabelsAdded.js'), - - 'assetInventoryEnabled' : require(__dirname + '/plugins/google/serviceusage/assetInventoryEnabled.js'), - - 'accessApprovalEnabled' : require(__dirname + '/plugins/google/security/accessApprovalEnabled.js'), - - 'commentControlEnabled' : require(__dirname + '/plugins/google/cloudbuild/commentControlEnabled.js'), - 'userApprovalEnabled' : require(__dirname + '/plugins/google/cloudbuild/userApprovalEnabled.js'), - 'specificSourceBranch' : require(__dirname + '/plugins/google/cloudbuild/specificSourceBranch.js'), - 'triggerHasTags' : require(__dirname + '/plugins/google/cloudbuild/triggerHasTags.js'), - - 'environmentLabelsAdded' : require(__dirname + '/plugins/google/composer/environmentLabelsAdded.js'), - 'environmentEncryption' : require(__dirname + '/plugins/google/composer/environmentEncryption.js'), - 'envDefaultServiceAccount' : require(__dirname + '/plugins/google/composer/envDefaultServiceAccount.js'), - 'webserverPublicAccess' : require(__dirname + '/plugins/google/composer/webserverPublicAccess.js'), - - 'vertexAIDatasetLabels' : require(__dirname + '/plugins/google/vertexai/vertexAIDatasetLabels.js'), - 'vertexAIDatasetEncryption' : require(__dirname + '/plugins/google/vertexai/vertexAIDatasetEncryption.js'), - 'modelLabelsAdded' : require(__dirname + '/plugins/google/vertexai/modelLabelsAdded.js'), - 'modelEncryption' : require(__dirname + '/plugins/google/vertexai/modelEncryption.js'), + 'detailedAuditLoggingMode': require(__dirname + '/plugins/google/cloudresourcemanager/detailedAuditLoggingMode.js'), + 'uniformBucketLevelAccess': require(__dirname + '/plugins/google/cloudresourcemanager/uniformBucketLevelAccess.js'), + 'requireOsLogin': require(__dirname + '/plugins/google/cloudresourcemanager/requireOsLogin.js'), + 'restrictAuthorizedNetworks': require(__dirname + '/plugins/google/cloudresourcemanager/restrictAuthorizedNetworks.js'), + 'disableDefaultEncryption': require(__dirname + '/plugins/google/cloudresourcemanager/disableDefaultEncryption.js'), + 'restrictLoadBalancerCreation': require(__dirname + '/plugins/google/cloudresourcemanager/restrictLoadBalancerCreation.js'), + 'restrictSharedVPCSubnetworks': require(__dirname + '/plugins/google/cloudresourcemanager/restrictSharedVPCSubnetworks.js'), + 'restrictVPCPeering': require(__dirname + '/plugins/google/cloudresourcemanager/restrictVPCPeering.js'), + 'restrictVPNPeerIPs': require(__dirname + '/plugins/google/cloudresourcemanager/restrictVPNPeerIPs.js'), + 'disableVMIPForwarding': require(__dirname + '/plugins/google/cloudresourcemanager/disableVMIPForwarding.js'), + 'trustedImageProjects': require(__dirname + '/plugins/google/cloudresourcemanager/trustedImageProjects.js'), + 'skipDefaultNetworkCreation': require(__dirname + '/plugins/google/cloudresourcemanager/skipDefaultNetworkCreation.js'), + 'locationBasedRestriction': require(__dirname + '/plugins/google/cloudresourcemanager/locationBasedRestriction.js'), + 'disableServiceAccountCreation': require(__dirname + '/plugins/google/cloudresourcemanager/disableServiceAccountCreation.js'), + 'essentialContactsConfigured': require(__dirname + '/plugins/google/cloudresourcemanager/essentialContactsConfigured.js'), + + 'dataprocClusterLabelsAdded': require(__dirname + '/plugins/google/dataproc/dataprocClusterLabelsAdded.js'), + 'hadoopSecureModeEnabled': require(__dirname + '/plugins/google/dataproc/hadoopSecureModeEnabled.js'), + 'dataprocClusterEncryption': require(__dirname + '/plugins/google/dataproc/dataprocClusterEncryption.js'), + + 'bigtableInstanceLabelsAdded': require(__dirname + '/plugins/google/bigtable/bigtableInstanceLabelsAdded.js'), + + 'assetInventoryEnabled': require(__dirname + '/plugins/google/serviceusage/assetInventoryEnabled.js'), + + 'accessApprovalEnabled': require(__dirname + '/plugins/google/security/accessApprovalEnabled.js'), + + 'commentControlEnabled': require(__dirname + '/plugins/google/cloudbuild/commentControlEnabled.js'), + 'userApprovalEnabled': require(__dirname + '/plugins/google/cloudbuild/userApprovalEnabled.js'), + 'specificSourceBranch': require(__dirname + '/plugins/google/cloudbuild/specificSourceBranch.js'), + 'triggerHasTags': require(__dirname + '/plugins/google/cloudbuild/triggerHasTags.js'), + + 'environmentLabelsAdded': require(__dirname + '/plugins/google/composer/environmentLabelsAdded.js'), + 'environmentEncryption': require(__dirname + '/plugins/google/composer/environmentEncryption.js'), + 'envDefaultServiceAccount': require(__dirname + '/plugins/google/composer/envDefaultServiceAccount.js'), + 'webserverPublicAccess': require(__dirname + '/plugins/google/composer/webserverPublicAccess.js'), + + 'vertexAIDatasetLabels': require(__dirname + '/plugins/google/vertexai/vertexAIDatasetLabels.js'), + 'vertexAIDatasetEncryption': require(__dirname + '/plugins/google/vertexai/vertexAIDatasetEncryption.js'), + 'modelLabelsAdded': require(__dirname + '/plugins/google/vertexai/modelLabelsAdded.js'), + 'modelEncryption': require(__dirname + '/plugins/google/vertexai/modelEncryption.js'), }, alibaba: { - 'passwordMinLength' : require(__dirname + '/plugins/alibaba/ram/passwordMinLength.js'), - 'passwordRequiresNumbers' : require(__dirname + '/plugins/alibaba/ram/passwordRequiresNumbers.js'), - 'passwordRequiresSymbols' : require(__dirname + '/plugins/alibaba/ram/passwordRequiresSymbols.js'), - 'passwordRequiresLowercase' : require(__dirname + '/plugins/alibaba/ram/passwordRequiresLowercase.js'), - 'inactiveUserDisabled' : require(__dirname + '/plugins/alibaba/ram/inactiveUserDisabled.js'), - 'passwordRequiresUppercase' : require(__dirname + '/plugins/alibaba/ram/passwordRequiresUppercase.js'), - 'usersMfaEnabled' : require(__dirname + '/plugins/alibaba/ram/usersMfaEnabled.js'), - 'accessKeysRotation' : require(__dirname + '/plugins/alibaba/ram/accessKeysRotation.js'), - 'passwordNoReuse' : require(__dirname + '/plugins/alibaba/ram/passwordNoReuse.js'), - 'passwordExpiry' : require(__dirname + '/plugins/alibaba/ram/passwordExpiry.js'), - 'passwordBlockLogon' : require(__dirname + '/plugins/alibaba/ram/passwordBlockLogon.js'), - 'ramPolicyAttachments' : require(__dirname + '/plugins/alibaba/ram/ramPolicyAttachments.js'), - 'ramAdminPolicy' : require(__dirname + '/plugins/alibaba/ram/ramAdminPolicy.js'), - - 'openSSH' : require(__dirname + '/plugins/alibaba/ecs/openSSH.js'), - 'openRDP' : require(__dirname + '/plugins/alibaba/ecs/openRDP.js'), - 'openDNS' : require(__dirname + '/plugins/alibaba/ecs/openDNS.js'), - 'openCIFS' : require(__dirname + '/plugins/alibaba/ecs/openCIFS.js'), - 'openDocker' : require(__dirname + '/plugins/alibaba/ecs/openDocker.js'), - 'openPostgreSQL' : require(__dirname + '/plugins/alibaba/ecs/openPostgreSQL.js'), - 'openElasticsearch' : require(__dirname + '/plugins/alibaba/ecs/openElasticsearch.js'), - 'openFTP' : require(__dirname + '/plugins/alibaba/ecs/openFTP.js'), - 'openHadoopNameNode' : require(__dirname + '/plugins/alibaba/ecs/openHadoopNameNode.js'), - 'openHadoopNameNodeWebUI' : require(__dirname + '/plugins/alibaba/ecs/openHadoopNameNodeWebUI.js'), - 'openKibana' : require(__dirname + '/plugins/alibaba/ecs/openKibana.js'), - 'openMySQL' : require(__dirname + '/plugins/alibaba/ecs/openMySQL.js'), - 'openNetBIOS' : require(__dirname + '/plugins/alibaba/ecs/openNetBIOS.js'), - 'openOracle' : require(__dirname + '/plugins/alibaba/ecs/openOracle.js'), - 'dataDisksEncrypted' : require(__dirname + '/plugins/alibaba/ecs/dataDisksEncrypted.js'), - 'openCustomPorts' : require(__dirname + '/plugins/alibaba/ecs/openCustomPorts.js'), - 'openOracleAutoDataWarehouse' : require(__dirname + '/plugins/alibaba/ecs/openOracleAutoDataWarehouse.js'), - 'openSalt' : require(__dirname + '/plugins/alibaba/ecs/openSalt.js'), - 'openSMTP' : require(__dirname + '/plugins/alibaba/ecs/openSMTP.js'), - 'openSMBoTCP' : require(__dirname + '/plugins/alibaba/ecs/openSMBoTCP.js'), - 'openSQLServer' : require(__dirname + '/plugins/alibaba/ecs/openSQLServer.js'), - 'openTelnet' : require(__dirname + '/plugins/alibaba/ecs/openTelnet.js'), - 'openVNCClient' : require(__dirname + '/plugins/alibaba/ecs/openVNCClient.js'), - 'openVNCServer' : require(__dirname + '/plugins/alibaba/ecs/openVNCServer.js'), - 'openAllPortsProtocols' : require(__dirname + '/plugins/alibaba/ecs/openAllPortsProtocols.js'), - 'systemDisksEncrypted' : require(__dirname + '/plugins/alibaba/ecs/systemDisksEncrypted.js'), - - 'bucketLoggingEnabled' : require(__dirname + '/plugins/alibaba/oss/bucketLoggingEnabled.js'), - 'bucketPayByRequester' : require(__dirname + '/plugins/alibaba/oss/bucketPayByRequester.js'), - 'ossBucketPrivate' : require(__dirname + '/plugins/alibaba/oss/ossBucketPrivate.js'), - 'ossBucketLifecycle' : require(__dirname + '/plugins/alibaba/oss/ossBucketLifecycle.js'), - 'bucketCmkEncrypted' : require(__dirname + '/plugins/alibaba/oss/bucketCmkEncrypted.js'), - 'ossBucketVersioning' : require(__dirname + '/plugins/alibaba/oss/ossBucketVersioning.js'), - 'ossBucketTransferAcceleration' : require(__dirname + '/plugins/alibaba/oss/ossBucketTransferAcceleration.js'), - 'bucketCrossRegionReplication' : require(__dirname + '/plugins/alibaba/oss/bucketCrossRegionReplication.js'), - - 'ossBucketIpRestriction' : require(__dirname + '/plugins/alibaba/oss/ossBucketIpRestriction.js'), - 'ossBucketSecureTransport' : require(__dirname + '/plugins/alibaba/oss/ossBucketSecureTransport.js'), - - 'rdsLogDuration' : require(__dirname + '/plugins/alibaba/rds/rdsLogDuration.js'), - 'rdsSslEncryptionEnabled' : require(__dirname + '/plugins/alibaba/rds/rdsSslEncryptionEnabled.js'), - 'rdsAuditingEnabled' : require(__dirname + '/plugins/alibaba/rds/rdsAuditingEnabled.js'), - 'rdsPublicAccess' : require(__dirname + '/plugins/alibaba/rds/rdsPublicAccess.js'), - 'rdsLogConnectionEnabled' : require(__dirname + '/plugins/alibaba/rds/rdsLogConnectionEnabled.js'), - 'rdsLogDisconnectionsEnabled' : require(__dirname + '/plugins/alibaba/rds/rdsLogDisconnectionsEnabled.js'), - 'rdsSqlAuditRetentionPeriod' : require(__dirname + '/plugins/alibaba/rds/rdsSqlAuditRetentionPeriod.js'), - 'rdsTdeEnabled' : require(__dirname + '/plugins/alibaba/rds/rdsTdeEnabled.js'), - - 'actiontrailGlobalExportLogs' : require(__dirname + '/plugins/alibaba/actiontrail/actiontrailGlobalExportLogs.js'), - 'actiontrailBucketPrivate' : require(__dirname + '/plugins/alibaba/actiontrail/actiontrailBucketPrivate.js'), - - 'apiProtocol' : require(__dirname + '/plugins/alibaba/apigateway/apiProtocol.js'), - 'apiGroupTlsVersion' : require(__dirname + '/plugins/alibaba/apigateway/apiGroupTlsVersion.js'), - - 'webDashboardDisabled' : require(__dirname + '/plugins/alibaba/ack/webDashboardDisabled.js'), - 'multipleIPmode' : require(__dirname + '/plugins/alibaba/ack/multipleIPmode.js'), - 'ackPrivateClusterEnabled' : require(__dirname + '/plugins/alibaba/ack/ackPrivateClusterEnabled.js'), - 'networkPolicyEnabled' : require(__dirname + '/plugins/alibaba/ack/networkPolicyEnabled.js'), - 'logServiceEnabled' : require(__dirname + '/plugins/alibaba/ack/logServiceEnabled.js'), - 'cloudMonitorEnabled' : require(__dirname + '/plugins/alibaba/ack/cloudMonitorEnabled.js'), - - 'securityCenterEdition' : require(__dirname + '/plugins/alibaba/securitycenter/securityCenterEdition.js'), - 'securityAgentInstalled' : require(__dirname + '/plugins/alibaba/securitycenter/securityAgentInstalled.js'), - 'securityNotificationsEnabled' : require(__dirname + '/plugins/alibaba/securitycenter/securityNotificationsEnabled.js'), - 'vulnerabilityScanEnabled' : require(__dirname + '/plugins/alibaba/securitycenter/vulnerabilityScanEnabled.js') + 'passwordMinLength': require(__dirname + '/plugins/alibaba/ram/passwordMinLength.js'), + 'passwordRequiresNumbers': require(__dirname + '/plugins/alibaba/ram/passwordRequiresNumbers.js'), + 'passwordRequiresSymbols': require(__dirname + '/plugins/alibaba/ram/passwordRequiresSymbols.js'), + 'passwordRequiresLowercase': require(__dirname + '/plugins/alibaba/ram/passwordRequiresLowercase.js'), + 'inactiveUserDisabled': require(__dirname + '/plugins/alibaba/ram/inactiveUserDisabled.js'), + 'passwordRequiresUppercase': require(__dirname + '/plugins/alibaba/ram/passwordRequiresUppercase.js'), + 'usersMfaEnabled': require(__dirname + '/plugins/alibaba/ram/usersMfaEnabled.js'), + 'accessKeysRotation': require(__dirname + '/plugins/alibaba/ram/accessKeysRotation.js'), + 'passwordNoReuse': require(__dirname + '/plugins/alibaba/ram/passwordNoReuse.js'), + 'passwordExpiry': require(__dirname + '/plugins/alibaba/ram/passwordExpiry.js'), + 'passwordBlockLogon': require(__dirname + '/plugins/alibaba/ram/passwordBlockLogon.js'), + 'ramPolicyAttachments': require(__dirname + '/plugins/alibaba/ram/ramPolicyAttachments.js'), + 'ramAdminPolicy': require(__dirname + '/plugins/alibaba/ram/ramAdminPolicy.js'), + + 'openSSH': require(__dirname + '/plugins/alibaba/ecs/openSSH.js'), + 'openRDP': require(__dirname + '/plugins/alibaba/ecs/openRDP.js'), + 'openDNS': require(__dirname + '/plugins/alibaba/ecs/openDNS.js'), + 'openCIFS': require(__dirname + '/plugins/alibaba/ecs/openCIFS.js'), + 'openDocker': require(__dirname + '/plugins/alibaba/ecs/openDocker.js'), + 'openPostgreSQL': require(__dirname + '/plugins/alibaba/ecs/openPostgreSQL.js'), + 'openElasticsearch': require(__dirname + '/plugins/alibaba/ecs/openElasticsearch.js'), + 'openFTP': require(__dirname + '/plugins/alibaba/ecs/openFTP.js'), + 'openHadoopNameNode': require(__dirname + '/plugins/alibaba/ecs/openHadoopNameNode.js'), + 'openHadoopNameNodeWebUI': require(__dirname + '/plugins/alibaba/ecs/openHadoopNameNodeWebUI.js'), + 'openKibana': require(__dirname + '/plugins/alibaba/ecs/openKibana.js'), + 'openMySQL': require(__dirname + '/plugins/alibaba/ecs/openMySQL.js'), + 'openNetBIOS': require(__dirname + '/plugins/alibaba/ecs/openNetBIOS.js'), + 'openOracle': require(__dirname + '/plugins/alibaba/ecs/openOracle.js'), + 'dataDisksEncrypted': require(__dirname + '/plugins/alibaba/ecs/dataDisksEncrypted.js'), + 'openCustomPorts': require(__dirname + '/plugins/alibaba/ecs/openCustomPorts.js'), + 'openOracleAutoDataWarehouse': require(__dirname + '/plugins/alibaba/ecs/openOracleAutoDataWarehouse.js'), + 'openSalt': require(__dirname + '/plugins/alibaba/ecs/openSalt.js'), + 'openSMTP': require(__dirname + '/plugins/alibaba/ecs/openSMTP.js'), + 'openSMBoTCP': require(__dirname + '/plugins/alibaba/ecs/openSMBoTCP.js'), + 'openSQLServer': require(__dirname + '/plugins/alibaba/ecs/openSQLServer.js'), + 'openTelnet': require(__dirname + '/plugins/alibaba/ecs/openTelnet.js'), + 'openVNCClient': require(__dirname + '/plugins/alibaba/ecs/openVNCClient.js'), + 'openVNCServer': require(__dirname + '/plugins/alibaba/ecs/openVNCServer.js'), + 'openAllPortsProtocols': require(__dirname + '/plugins/alibaba/ecs/openAllPortsProtocols.js'), + 'systemDisksEncrypted': require(__dirname + '/plugins/alibaba/ecs/systemDisksEncrypted.js'), + + 'bucketLoggingEnabled': require(__dirname + '/plugins/alibaba/oss/bucketLoggingEnabled.js'), + 'bucketPayByRequester': require(__dirname + '/plugins/alibaba/oss/bucketPayByRequester.js'), + 'ossBucketPrivate': require(__dirname + '/plugins/alibaba/oss/ossBucketPrivate.js'), + 'ossBucketLifecycle': require(__dirname + '/plugins/alibaba/oss/ossBucketLifecycle.js'), + 'bucketCmkEncrypted': require(__dirname + '/plugins/alibaba/oss/bucketCmkEncrypted.js'), + 'ossBucketVersioning': require(__dirname + '/plugins/alibaba/oss/ossBucketVersioning.js'), + 'ossBucketTransferAcceleration': require(__dirname + '/plugins/alibaba/oss/ossBucketTransferAcceleration.js'), + 'bucketCrossRegionReplication': require(__dirname + '/plugins/alibaba/oss/bucketCrossRegionReplication.js'), + + 'ossBucketIpRestriction': require(__dirname + '/plugins/alibaba/oss/ossBucketIpRestriction.js'), + 'ossBucketSecureTransport': require(__dirname + '/plugins/alibaba/oss/ossBucketSecureTransport.js'), + + 'rdsLogDuration': require(__dirname + '/plugins/alibaba/rds/rdsLogDuration.js'), + 'rdsSslEncryptionEnabled': require(__dirname + '/plugins/alibaba/rds/rdsSslEncryptionEnabled.js'), + 'rdsAuditingEnabled': require(__dirname + '/plugins/alibaba/rds/rdsAuditingEnabled.js'), + 'rdsPublicAccess': require(__dirname + '/plugins/alibaba/rds/rdsPublicAccess.js'), + 'rdsLogConnectionEnabled': require(__dirname + '/plugins/alibaba/rds/rdsLogConnectionEnabled.js'), + 'rdsLogDisconnectionsEnabled': require(__dirname + '/plugins/alibaba/rds/rdsLogDisconnectionsEnabled.js'), + 'rdsSqlAuditRetentionPeriod': require(__dirname + '/plugins/alibaba/rds/rdsSqlAuditRetentionPeriod.js'), + 'rdsTdeEnabled': require(__dirname + '/plugins/alibaba/rds/rdsTdeEnabled.js'), + + 'actiontrailGlobalExportLogs': require(__dirname + '/plugins/alibaba/actiontrail/actiontrailGlobalExportLogs.js'), + 'actiontrailBucketPrivate': require(__dirname + '/plugins/alibaba/actiontrail/actiontrailBucketPrivate.js'), + + 'apiProtocol': require(__dirname + '/plugins/alibaba/apigateway/apiProtocol.js'), + 'apiGroupTlsVersion': require(__dirname + '/plugins/alibaba/apigateway/apiGroupTlsVersion.js'), + + 'webDashboardDisabled': require(__dirname + '/plugins/alibaba/ack/webDashboardDisabled.js'), + 'multipleIPmode': require(__dirname + '/plugins/alibaba/ack/multipleIPmode.js'), + 'ackPrivateClusterEnabled': require(__dirname + '/plugins/alibaba/ack/ackPrivateClusterEnabled.js'), + 'networkPolicyEnabled': require(__dirname + '/plugins/alibaba/ack/networkPolicyEnabled.js'), + 'logServiceEnabled': require(__dirname + '/plugins/alibaba/ack/logServiceEnabled.js'), + 'cloudMonitorEnabled': require(__dirname + '/plugins/alibaba/ack/cloudMonitorEnabled.js'), + + 'securityCenterEdition': require(__dirname + '/plugins/alibaba/securitycenter/securityCenterEdition.js'), + 'securityAgentInstalled': require(__dirname + '/plugins/alibaba/securitycenter/securityAgentInstalled.js'), + 'securityNotificationsEnabled': require(__dirname + '/plugins/alibaba/securitycenter/securityNotificationsEnabled.js'), + 'vulnerabilityScanEnabled': require(__dirname + '/plugins/alibaba/securitycenter/vulnerabilityScanEnabled.js') } }; diff --git a/helpers/azure/api.js b/helpers/azure/api.js index 2f71d0678..19de82fa8 100644 --- a/helpers/azure/api.js +++ b/helpers/azure/api.js @@ -45,14 +45,14 @@ These fields should be according to the user and product manager, what they want var serviceMap = { 'Redis Cache': - { - enabled: true, isSingleSource: true, InvAsset: 'redisCaches', InvService: 'redisCaches', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Redis Cache', BridgeServiceName: 'rediscaches', - BridgePluginCategoryName: 'Redis Cache', BridgeProvider: 'Azure', BridgeCall: 'listBySubscription', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'Redis', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Redis Cache', - BridgeCollectionService: 'rediscaches', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'redisCaches', InvService: 'redisCaches', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Redis Cache', BridgeServiceName: 'rediscaches', + BridgePluginCategoryName: 'Redis Cache', BridgeProvider: 'Azure', BridgeCall: 'listBySubscription', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'Redis', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Redis Cache', + BridgeCollectionService: 'rediscaches', DataIdentifier: 'data', + }, 'CDN Profiles': [ { enabled: true, isSingleSource: true, InvAsset: 'cdnProfiles', InvService: 'cdnProfiles', @@ -72,60 +72,60 @@ var serviceMap = { } ], 'Cosmos DB': - { - enabled: true, isSingleSource: true, InvAsset: 'cosmosdb', InvService: 'cosmosDB', - InvResourceCategory: 'database', InvResourceType: 'cosmos_DB', BridgeServiceName: 'databaseaccounts', - BridgePluginCategoryName: 'Cosmos DB', BridgeProvider: 'Azure', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'databaseAccounts', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Cosmos DB', - BridgeCollectionService: 'databaseaccounts', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'cosmosdb', InvService: 'cosmosDB', + InvResourceCategory: 'database', InvResourceType: 'cosmos_DB', BridgeServiceName: 'databaseaccounts', + BridgePluginCategoryName: 'Cosmos DB', BridgeProvider: 'Azure', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'databaseAccounts', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Cosmos DB', + BridgeCollectionService: 'databaseaccounts', DataIdentifier: 'data', + }, 'Key Vaults': - { - enabled: true, isSingleSource: true, InvAsset: 'vaults', InvService: 'keyVaults', - InvResourceCategory: 'cloud_resources', InvResourceType: 'key vaults', BridgeServiceName: 'vaults', - BridgePluginCategoryName: 'Key Vaults', BridgeProvider: 'Azure', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'vaults', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Key Vaults', - BridgeCollectionService: 'vaults', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'vaults', InvService: 'keyVaults', + InvResourceCategory: 'cloud_resources', InvResourceType: 'key vaults', BridgeServiceName: 'vaults', + BridgePluginCategoryName: 'Key Vaults', BridgeProvider: 'Azure', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'vaults', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Key Vaults', + BridgeCollectionService: 'vaults', DataIdentifier: 'data', + }, 'Load Balancer': - { - enabled: true, isSingleSource: true, InvAsset: 'loadBalancer', InvService: 'loadBalancer', - InvResourceCategory: 'cloud_resources', InvResourceType: 'load_balancer', BridgeServiceName: 'loadbalancers', - BridgePluginCategoryName: 'Load Balancer', BridgeProvider: 'Azure', BridgeCall: 'listAll', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'loadBalancers', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Load Balancer', - BridgeCollectionService: 'loadbalancers', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'loadBalancer', InvService: 'loadBalancer', + InvResourceCategory: 'cloud_resources', InvResourceType: 'load_balancer', BridgeServiceName: 'loadbalancers', + BridgePluginCategoryName: 'Load Balancer', BridgeProvider: 'Azure', BridgeCall: 'listAll', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'loadBalancers', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Load Balancer', + BridgeCollectionService: 'loadbalancers', DataIdentifier: 'data', + }, 'Log Alerts': - { - enabled: true, isSingleSource: true, InvAsset: 'logAlerts', InvService: 'logAlerts', - InvResourceCategory: 'cloud_resources', InvResourceType: 'log alerts', BridgeServiceName: 'activitylogalerts', - BridgePluginCategoryName: 'Log Alerts', BridgeProvider: 'Azure', BridgeCall: 'listBySubscriptionId', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'activityLogAlerts', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Log Alerts', - BridgeCollectionService: 'activitylogalerts', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'logAlerts', InvService: 'logAlerts', + InvResourceCategory: 'cloud_resources', InvResourceType: 'log alerts', BridgeServiceName: 'activitylogalerts', + BridgePluginCategoryName: 'Log Alerts', BridgeProvider: 'Azure', BridgeCall: 'listBySubscriptionId', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'activityLogAlerts', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Log Alerts', + BridgeCollectionService: 'activitylogalerts', DataIdentifier: 'data', + }, 'Network Watcher': - { - enabled: true, isSingleSource: true, InvAsset: 'networkWatcher', InvService: 'networkWatcher', - InvResourceCategory: 'cloud_resources', InvResourceType: 'network_watcher', BridgeServiceName: 'networkwatchers', - BridgePluginCategoryName: 'Network Watcher', BridgeProvider: 'Azure', BridgeCall: 'listAll', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'networkWatchers', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Network Watcher', - BridgeCollectionService: 'networkwatchers', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'networkWatcher', InvService: 'networkWatcher', + InvResourceCategory: 'cloud_resources', InvResourceType: 'network_watcher', BridgeServiceName: 'networkwatchers', + BridgePluginCategoryName: 'Network Watcher', BridgeProvider: 'Azure', BridgeCall: 'listAll', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'networkWatchers', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Network Watcher', + BridgeCollectionService: 'networkwatchers', DataIdentifier: 'data', + }, 'Azure Policy': - { - enabled: true, isSingleSource: true, InvAsset: 'azurePolicy', InvService: 'azurePolicy', - InvResourceCategory: 'cloud_resources', InvResourceType: 'azure_policy', BridgeServiceName: 'policyassignments', - BridgePluginCategoryName: 'Azure Policy', BridgeProvider: 'Azure', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'policyAssignments', - BridgeResourceNameIdentifier: 'displayName', BridgeExecutionService: 'Azure Policy', - BridgeCollectionService: 'policyassignments', DataIdentifier: 'data', - }, - 'Virtual Networks':[ + { + enabled: true, isSingleSource: true, InvAsset: 'azurePolicy', InvService: 'azurePolicy', + InvResourceCategory: 'cloud_resources', InvResourceType: 'azure_policy', BridgeServiceName: 'policyassignments', + BridgePluginCategoryName: 'Azure Policy', BridgeProvider: 'Azure', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'policyAssignments', + BridgeResourceNameIdentifier: 'displayName', BridgeExecutionService: 'Azure Policy', + BridgeCollectionService: 'policyassignments', DataIdentifier: 'data', + }, + 'Virtual Networks': [ { enabled: true, isSingleSource: true, InvAsset: 'virtual_network', InvService: 'virtual_network', InvResourceCategory: 'cloud_resources', InvResourceType: 'Virtual Network', BridgeServiceName: 'virtualnetworks', @@ -144,86 +144,86 @@ var serviceMap = { } ], 'Queue Service': - { - enabled: true, isSingleSource: true, InvAsset: 'queueService', InvService: 'queueService', - InvResourceCategory: 'storage', InvResourceType: 'queue_service', BridgeServiceName: 'queueservice', - BridgePluginCategoryName: 'Queue Service', BridgeProvider: 'Azure', BridgeCall: 'getQueueAcl', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'queueService', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Queue Service', - BridgeCollectionService: 'queueservice', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'queueService', InvService: 'queueService', + InvResourceCategory: 'storage', InvResourceType: 'queue_service', BridgeServiceName: 'queueservice', + BridgePluginCategoryName: 'Queue Service', BridgeProvider: 'Azure', BridgeCall: 'getQueueAcl', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'queueService', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Queue Service', + BridgeCollectionService: 'queueservice', DataIdentifier: 'data', + }, 'Table Service': - { - enabled: true, isSingleSource: true, InvAsset: 'tableService', InvService: 'tableService', - InvResourceCategory: 'storage', InvResourceType: 'table_service', BridgeServiceName: 'tableservice', - BridgePluginCategoryName: 'Table Service', BridgeProvider: 'Azure', BridgeCall: 'getTableAcl', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'tableService', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Table Service', - BridgeCollectionService: 'tableservice', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'tableService', InvService: 'tableService', + InvResourceCategory: 'storage', InvResourceType: 'table_service', BridgeServiceName: 'tableservice', + BridgePluginCategoryName: 'Table Service', BridgeProvider: 'Azure', BridgeCall: 'getTableAcl', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'tableService', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Table Service', + BridgeCollectionService: 'tableservice', DataIdentifier: 'data', + }, 'File Service': - { - enabled: true, isSingleSource: true, InvAsset: 'fileService', InvService: 'fileService', - InvResourceCategory: 'storage', InvResourceType: 'file_service', BridgeServiceName: 'fileservice', - BridgePluginCategoryName: 'File Service', BridgeProvider: 'Azure', BridgeCall: 'listSharesSegmented', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'fileService', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'File Service', - BridgeCollectionService: 'fileservice', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'fileService', InvService: 'fileService', + InvResourceCategory: 'storage', InvResourceType: 'file_service', BridgeServiceName: 'fileservice', + BridgePluginCategoryName: 'File Service', BridgeProvider: 'Azure', BridgeCall: 'listSharesSegmented', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'fileService', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'File Service', + BridgeCollectionService: 'fileservice', DataIdentifier: 'data', + }, 'SQL Databases': - { - enabled: true, isSingleSource: true, InvAsset: 'database', InvService: 'sql', - InvResourceCategory: 'database', InvResourceType: 'sql_database', BridgeServiceName: 'databases', - BridgePluginCategoryName: 'SQL Databases', BridgeProvider: 'Azure', BridgeCall: 'listByServer', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'databases', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'SQL Databases', - BridgeCollectionService: 'databases', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'database', InvService: 'sql', + InvResourceCategory: 'database', InvResourceType: 'sql_database', BridgeServiceName: 'databases', + BridgePluginCategoryName: 'SQL Databases', BridgeProvider: 'Azure', BridgeCall: 'listByServer', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'databases', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'SQL Databases', + BridgeCollectionService: 'databases', DataIdentifier: 'data', + }, 'AI & ML': - { - enabled: true, isSingleSource: true, InvAsset: 'account', InvService: 'openAI', - InvResourceCategory: 'ai&ml', InvResourceType: 'OpenAI Accounts', BridgeProvider: 'Azure', - BridgeServiceName: 'openAI', BridgePluginCategoryName: 'AI & ML', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'accounts', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'AI & ML', - BridgeCollectionService: 'openai', BridgeCall: 'listAccounts', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'account', InvService: 'openAI', + InvResourceCategory: 'ai&ml', InvResourceType: 'OpenAI Accounts', BridgeProvider: 'Azure', + BridgeServiceName: 'openAI', BridgePluginCategoryName: 'AI & ML', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'accounts', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'AI & ML', + BridgeCollectionService: 'openai', BridgeCall: 'listAccounts', DataIdentifier: 'data', + }, 'Blob Service': - { - enabled: true, isSingleSource: true, InvAsset: 'blob_container', InvService: 'blobservice', - InvResourceCategory: 'cloud_resources', InvResourceType: 'blob_container', BridgeServiceName: 'blobcontainers', - BridgePluginCategoryName: 'Blob Service', BridgeProvider: 'Azure', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'containers', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Blob Service', - BridgeCollectionService: 'blobcontainers', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'blob_container', InvService: 'blobservice', + InvResourceCategory: 'cloud_resources', InvResourceType: 'blob_container', BridgeServiceName: 'blobcontainers', + BridgePluginCategoryName: 'Blob Service', BridgeProvider: 'Azure', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'containers', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Blob Service', + BridgeCollectionService: 'blobcontainers', DataIdentifier: 'data', + }, 'Virtual Machines': - { - enabled: true, isSingleSource: true, InvAsset: 'vm_scaleset', InvService: 'virtualmachines', - InvResourceCategory: 'cloud_resources', InvResourceType: 'VM_ScaleSet', BridgeServiceName: 'virtualmachinescalesets', - BridgePluginCategoryName: 'Virtual Machines', BridgeProvider: 'Azure', BridgeCall: 'listAll', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'virtualMachineScaleSets', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Virtual Machines', - BridgeCollectionService: 'virtualmachinescalesets', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'vm_scaleset', InvService: 'virtualmachines', + InvResourceCategory: 'cloud_resources', InvResourceType: 'VM_ScaleSet', BridgeServiceName: 'virtualmachinescalesets', + BridgePluginCategoryName: 'Virtual Machines', BridgeProvider: 'Azure', BridgeCall: 'listAll', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'virtualMachineScaleSets', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Virtual Machines', + BridgeCollectionService: 'virtualmachinescalesets', DataIdentifier: 'data', + }, 'Event Grid': - { - enabled: true, isSingleSource: true, InvAsset: 'domain', InvService: 'eventgrid', - InvResourceCategory: 'cloud_resources', InvResourceType: 'EventGrid Domain', BridgeServiceName: 'eventgrid', - BridgePluginCategoryName: 'Event Grid', BridgeProvider: 'Azure', BridgeCall: 'listDomains', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'domains', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Event Grid', - BridgeCollectionService: 'eventgrid', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'domain', InvService: 'eventgrid', + InvResourceCategory: 'cloud_resources', InvResourceType: 'EventGrid Domain', BridgeServiceName: 'eventgrid', + BridgePluginCategoryName: 'Event Grid', BridgeProvider: 'Azure', BridgeCall: 'listDomains', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'domains', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Event Grid', + BridgeCollectionService: 'eventgrid', DataIdentifier: 'data', + }, 'Event Hubs': - { - enabled: true, isSingleSource: true, InvAsset: 'namespace', InvService: 'eventhubs', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Eventhubs Namespace', BridgeServiceName: 'eventhub', - BridgePluginCategoryName: 'Event Hubs', BridgeProvider: 'Azure', BridgeCall: 'listEventHub', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'namespaces', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Event Hubs', - BridgeCollectionService: 'eventhub', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'namespace', InvService: 'eventhubs', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Eventhubs Namespace', BridgeServiceName: 'eventhub', + BridgePluginCategoryName: 'Event Hubs', BridgeProvider: 'Azure', BridgeCall: 'listEventHub', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'namespaces', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'Event Hubs', + BridgeCollectionService: 'eventhub', DataIdentifier: 'data', + }, 'Defender': [ { enabled: true, isSingleSource: true, InvAsset: 'defender', InvService: 'defender', @@ -309,7 +309,7 @@ var calls = { rateLimit: 3000 } }, - containerApps:{ + containerApps: { list: { url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.App/containerApps?api-version=2023-05-01' } @@ -577,7 +577,7 @@ var calls = { url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DBforMySQL/servers?api-version=2017-12-01' }, listMysqlFlexibleServer: { - url : 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DBforMySQL/flexibleServers?api-version=2023-12-30' + url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DBforMySQL/flexibleServers?api-version=2023-12-30' }, listPostgres: { url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DBforPostgreSQL/servers?api-version=2017-12-01' @@ -588,7 +588,7 @@ var calls = { }, databaseAccounts: { list: { - url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DocumentDB/databaseAccounts?api-version=2020-06-01-preview' + url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.DocumentDB/databaseAccounts?api-version=2025-10-15' }, sendIntegration: serviceMap['Cosmos DB'] }, @@ -630,7 +630,7 @@ var calls = { url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.ServiceBus/namespaces?api-version=2022-10-01-preview' } }, - mediaServices:{ + mediaServices: { listAll: { url: 'https://management.azure.com/subscriptions/{subscriptionId}/providers/Microsoft.Media/mediaservices?api-version=2023-01-01' } @@ -716,7 +716,7 @@ var postcalls = { sendIntegration: { enabled: true, integrationReliesOn: { - serviceName: ['roleDefinitions','users','groups','servicePrincipals'] + serviceName: ['roleDefinitions', 'users', 'groups', 'servicePrincipals'] } } }, @@ -741,7 +741,7 @@ var postcalls = { url: 'https://management.azure.com/{id}/variables?api-version=2023-11-01' } }, - availabilitySets:{ + availabilitySets: { listByResourceGroup: { reliesOnPath: 'resourceGroups.list', properties: ['id'], @@ -774,7 +774,7 @@ var postcalls = { url: 'https://management.azure.com/{id}/sourceControls?api-version=2023-11-01' } }, - automationAccounts:{ + automationAccounts: { get: { reliesOnPath: 'automationAccounts.list', properties: ['id'], @@ -1021,7 +1021,7 @@ var postcalls = { } }, containerApps: { - getAuthSettings : { + getAuthSettings: { reliesOnPath: 'containerApps.list', properties: ['id'], url: 'https://management.azure.com/{id}/authConfigs?api-version=2023-05-01', @@ -1203,7 +1203,7 @@ var postcalls = { sendIntegration: { enabled: true, integrationReliesOn: { - serviceName: ['privateEndpoints','firewallRules', 'virtualNetworkRules', + serviceName: ['privateEndpoints', 'firewallRules', 'virtualNetworkRules', 'networkInterfaces', 'failoverGroups', 'outboundFirewallRules'] } } @@ -1270,6 +1270,13 @@ var postcalls = { properties: ['id'], url: 'https://management.azure.com/{id}/networkRuleSets/default?api-version=2022-10-01-preview' } + }, + serviceBus: { + getNamespaceNetworkRuleSet: { + reliesOnPath: 'serviceBus.listNamespacesBySubscription', + properties: ['id'], + url: 'https://management.azure.com/{id}/networkRuleSets/default?api-version=2021-11-01' + } } }; @@ -1425,7 +1432,7 @@ var tertiarycalls = { properties: ['id'], url: 'https://management.azure.com/{id}/providers/microsoft.insights/diagnosticSettings?api-version=2021-05-01-preview' }, - listByEventHubs:{ + listByEventHubs: { reliesOnPath: 'eventHub.listEventHub', properties: ['id'], url: 'https://management.azure.com/{id}/providers/microsoft.insights/diagnosticSettings?api-version=2021-05-01-preview' diff --git a/helpers/azure/functions.js b/helpers/azure/functions.js index 1a390e58a..5c9363d26 100644 --- a/helpers/azure/functions.js +++ b/helpers/azure/functions.js @@ -119,12 +119,12 @@ function findOpenPorts(ngs, protocols, service, location, results, checkAllPorts ` port ` + ports + ` open to ` + sourceFilter; if (strings.indexOf(string) === -1) strings.push(string); } else { - for (let portRange of securityRule.properties['destinationPortRanges']){ + for (let portRange of securityRule.properties['destinationPortRanges']) { if (portRange.toString().indexOf("-") > -1) { portRange = portRange.split("-"); let startPort = portRange[0]; let endPort = portRange[1]; - if (parseInt(startPort) <= port && parseInt(endPort) >= port){ + if (parseInt(startPort) <= port && parseInt(endPort) >= port) { var string = `Security Rule "` + securityRule['name'] + `": ` + (protocol === '*' ? `All protocols` : protocol.toUpperCase()) + ` port ` + ports + ` open to ` + sourceFilter; strings.push(string); @@ -151,7 +151,7 @@ function findOpenPorts(ngs, protocols, service, location, results, checkAllPorts for (const key in protocols) { strings.push(`${key.toUpperCase()}:${protocols[key]}`); } - if (strings.length){ + if (strings.length) { addResult(results, 0, `Security group:( ${sGroups.name}) does not have ${strings.join(', ')} open *`, location, resource); @@ -197,7 +197,7 @@ function checkPolicyAssignment(policyAssignments, param, text, results, location if (policyAssignment.parameters && Object.keys(policyAssignment.parameters).length) { policyAssignmentStatus = (policyAssignment.parameters && policyAssignment.parameters[param] && policyAssignment.parameters[param].value) || defualtPolicyAssignments[param] || ''; } else { - policyAssignmentStatus = defualtPolicyAssignments[param] + policyAssignmentStatus = defualtPolicyAssignments[param] } if (!policyAssignmentStatus || !policyAssignmentStatus.length) { @@ -335,7 +335,7 @@ function checkServerConfigs(servers, cache, source, location, results, serverTyp return; } - servers.data.forEach(function(server) { + servers.data.forEach(function (server) { const configurations = shared.addSource(cache, source, ['configurations', 'listByServer', location, server.id]); @@ -370,7 +370,7 @@ function checkFlexibleServerConfigs(servers, cache, source, location, results, s return; } - servers.data.forEach(function(server) { + servers.data.forEach(function (server) { const configurations = shared.addSource(cache, source, ['flexibleServersConfigurations', 'listByPostgresServer', location, server.id]); @@ -391,7 +391,7 @@ function checkFlexibleServerConfigs(servers, cache, source, location, results, s }); } -function checkMicrosoftDefender(pricings, serviceName, serviceDisplayName, results, location ) { +function checkMicrosoftDefender(pricings, serviceName, serviceDisplayName, results, location) { let pricingData = pricings.data.find((pricing) => pricing.name.toLowerCase() === serviceName); if (pricingData) { @@ -418,7 +418,7 @@ function processCall(config, method, body, baseUrl, resource, callback) { auth.call(params, callback); } -function remediateOpenPortsHelper( putCall, pluginName, protocols, ports, config, cache, settings, resource, remediation_file, baseUrl, method, actions, errors, callback) { +function remediateOpenPortsHelper(putCall, pluginName, protocols, ports, config, cache, settings, resource, remediation_file, baseUrl, method, actions, errors, callback) { var params = { properties: { securityRules: [] @@ -431,7 +431,7 @@ function remediateOpenPortsHelper( putCall, pluginName, protocols, ports, config async.each(protocols, function (protocol, ocb) { async.eachOf(ports, function (port, p, cb) { //var protocol = protocols[p]; - remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, settings, resource, remediation_file, baseUrl, method, params,function (error, action) { + remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, settings, resource, remediation_file, baseUrl, method, params, function (error, action) { if (error && (error.length || Object.keys(error).length)) { errors.push(error); } else if (action && (action.length || Object.keys(action).length)) { @@ -439,7 +439,7 @@ function remediateOpenPortsHelper( putCall, pluginName, protocols, ports, config } cb(); }); - }, function() { + }, function () { ocb(); }); }, function () { @@ -468,7 +468,7 @@ function remediateOpenPortsHelper( putCall, pluginName, protocols, ports, config } function remediatePlugin(config, method, body, baseUrl, resource, remediation_file, putCall, pluginName, callback) { - processCall(config, method, body, baseUrl, resource, function(err) { + processCall(config, method, body, baseUrl, resource, function (err) { if (err) { remediation_file['remediate']['actions'][pluginName]['error'] = err; return callback(err, null); @@ -486,7 +486,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, var sgName; if (resource && resource.length) { var sgNameArr = resource.split('/'); - sgName = sgNameArr[sgNameArr.length -1]; + sgName = sgNameArr[sgNameArr.length - 1]; config.region = settings.regions[resource]; params.location = config.region; } else { @@ -519,7 +519,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, let portRange = portToCheck.split("-"); let startPort = portRange[0]; let endPort = portRange[1]; - if (parseInt(startPort) <= port && parseInt(endPort) >= port && protocolToCheck && (protocolToCheck === protocol || protocol === '*')) { + if (parseInt(startPort) <= port && parseInt(endPort) >= port && protocolToCheck && (protocolToCheck === protocol || protocol === '*')) { if (passingPermission) { passingPermission = false; } @@ -530,7 +530,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, } } else if (portToCheck && portToCheck.toString().indexOf(port.toString()) > -1) { - if (portToCheck <= port && portToCheck >= port && protocolToCheck && (protocolToCheck === protocol || protocol === '*' )) { + if (portToCheck <= port && portToCheck >= port && protocolToCheck && (protocolToCheck === protocol || protocol === '*')) { if (passingPermission) { passingPermission = false; } @@ -562,10 +562,10 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, passingSecurityRules.push(rule); } }); - if (passingSecurityRules.length){ - for ( var i in passingSecurityRules){ + if (passingSecurityRules.length) { + for (var i in passingSecurityRules) { var foundPass = params.properties.securityRules.findIndex(rule => rule.name === passingSecurityRules[i].name); - if (foundPass === -1){ + if (foundPass === -1) { params.properties.securityRules.push(passingSecurityRules[i]); } } @@ -584,7 +584,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, var publicIpv6Strings = ['/0', '::/0', '::']; // changed this to an async function to avoid the callback already called error(was forEach loop before) - async.each(failingPermissions,function(failingPermission, fpCb) { + async.each(failingPermissions, function (failingPermission, fpCb) { var spliced = false; var openIpRange = false; var openIpv6Range = false; @@ -599,7 +599,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, // I had to parse > stringify because it was using the final state instead of the current state of failingPermission.properties remediation_file['pre_remediate']['actions'][pluginName][resource].push(JSON.parse(JSON.stringify(failingPermission.properties))); - if ( failingPermission.properties.sourceAddressPrefixes ) { + if (failingPermission.properties.sourceAddressPrefixes) { sourceAddressArr = failingPermission.properties.sourceAddressPrefixes; } if (failingPermission.properties.sourceAddressPrefix) sourceAddressArr.push(failingPermission.properties.sourceAddressPrefix); @@ -621,7 +621,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, } else if ((!settings.input || !settings.input[inputKey]) && (failingRulePortIndex[failingPermission.name]) && !spliced) { spliced = true; failingPermission.properties['destinationPortRanges'].splice([failingRulePortIndex[failingPermission.name]], 1); - if ( failingPermission.properties['destinationPortRanges'].length === 0 ){ + if (failingPermission.properties['destinationPortRanges'].length === 0) { sourceAddressArr = []; } // this is if there is no input and the failing port is not an array,we will remove the public @@ -669,7 +669,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, if (sourceAddressArr && sourceAddressArr.length && sourceAddressArr.length === 1) { failingPermission.properties.sourceAddressPrefix = sourceAddressArr.join(', '); if (failingPermission.properties.sourceAddressPrefixes) delete failingPermission.properties.sourceAddressPrefixes; - if (found > -1){ + if (found > -1) { // remove the previous one and add the latest one with new adjustments params.properties.securityRules.splice(found, 1); } @@ -677,14 +677,14 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, } else if (sourceAddressArr && sourceAddressArr.length && sourceAddressArr.length > 1) { failingPermission.properties.sourceAddressPrefixes = sourceAddressArr if (failingPermission.properties.sourceAddressPrefix) delete failingPermission.properties.sourceAddressPrefix; - if (found > -1){ + if (found > -1) { // remove the previous one and add the latest one with new adjustments. params.properties.securityRules.splice(found, 1); } params.properties.securityRules.push(failingPermission); } else { // we are here means there are no source ips at all,remove the rule from the params. It will be deleted. - if (found > -1){ + if (found > -1) { params.properties.securityRules.splice(found, 1); } } @@ -714,7 +714,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, 'action': 'ADDED' }); - } else if (openIpRange && localIpExists && settings.input && settings.input[ipv4InputKey]){ + } else if (openIpRange && localIpExists && settings.input && settings.input[ipv4InputKey]) { remediation_file['remediate']['actions'][pluginName][resource]['steps'].push({ 'inboundRule': settings.input[ipv4InputKey], 'action': 'Already Exists' @@ -730,7 +730,7 @@ function remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, actions.push(params); fpCb(); - }, function(err) { + }, function (err) { if (errors && errors.length) { cb(errors.join(', ')); } else if (err) { @@ -764,18 +764,18 @@ function checkSecurityGroup(securityGroups) { for (const rule of sortedRules) { if (rule.properties.direction === "Inbound" && openPrefix.includes(rule.properties.sourceAddressPrefix)) { if (rule.properties.access === "Deny") { - return {exposed: false}; + return { exposed: false }; } if (rule.properties.access === "Allow") { - return {exposed: true, nsg: rule.nsgName}; + return { exposed: true, nsg: rule.nsgName }; } } } - return {exposed: true}; + return { exposed: true }; } -function checkNetworkExposure(cache, source, networkInterfaces, securityGroups, location, results, attachedResources, resource) { +function checkNetworkExposure(cache, source, networkInterfaces, securityGroups, location, results, attachedResources, resource) { let exposedPath = ''; const isFunctionApp = resource && resource.kind && @@ -855,6 +855,16 @@ function checkNetworkExposure(cache, source, networkInterfaces, securityGroups, return exposedPath; } + +function isOpenCidrRange(cidr) { + if (!cidr || typeof cidr !== 'string') return false; + + const trimmed = cidr.trim(); + return trimmed === '0.0.0.0/0' || + trimmed === '::/0' || + trimmed === '0.0.0.0'; +} + module.exports = { addResult: addResult, findOpenPorts: findOpenPorts, @@ -867,8 +877,9 @@ module.exports = { remediateOpenPorts: remediateOpenPorts, remediateOpenPortsHelper: remediateOpenPortsHelper, checkMicrosoftDefender: checkMicrosoftDefender, - checkFlexibleServerConfigs:checkFlexibleServerConfigs, - checkNetworkExposure: checkNetworkExposure + checkFlexibleServerConfigs: checkFlexibleServerConfigs, + checkNetworkExposure: checkNetworkExposure, + isOpenCidrRange: isOpenCidrRange }; diff --git a/helpers/google/api.js b/helpers/google/api.js index 31c467b61..10793d1cc 100644 --- a/helpers/google/api.js +++ b/helpers/google/api.js @@ -48,176 +48,176 @@ These fields should be according to the user and product manager, what they want var serviceMap = { 'Pub/Sub': - { - enabled: true, isSingleSource: true, InvAsset: 'Pub/Sub', InvService: 'Pub/Sub', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Pub/Sub', BridgeServiceName: 'topics', - BridgePluginCategoryName: 'gcp-Pub/Sub', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'topics', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Pub/Sub', - BridgeCollectionService: 'gcp-topics', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Pub/Sub', InvService: 'Pub/Sub', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Pub/Sub', BridgeServiceName: 'topics', + BridgePluginCategoryName: 'gcp-Pub/Sub', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'topics', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Pub/Sub', + BridgeCollectionService: 'gcp-topics', DataIdentifier: 'data', + }, 'DNS': - { - enabled: true, isSingleSource: true, InvAsset: 'Managed Zone', InvService: 'DNS', - InvResourceCategory: 'cloud_resources', InvResourceType: 'DNS', BridgeServiceName: 'managedzones', - BridgePluginCategoryName: 'gcp-DNS', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/zones/{name}', - BridgeResourceType: 'zones', BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-DNS', - BridgeCollectionService: 'gcp-managedZones', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Managed Zone', InvService: 'DNS', + InvResourceCategory: 'cloud_resources', InvResourceType: 'DNS', BridgeServiceName: 'managedzones', + BridgePluginCategoryName: 'gcp-DNS', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/zones/{name}', + BridgeResourceType: 'zones', BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-DNS', + BridgeCollectionService: 'gcp-managedZones', DataIdentifier: 'data', + }, 'VPC Network': - { - enabled: true, isSingleSource: true, InvAsset: 'VPC Network', InvService: 'VPC Network', - InvResourceCategory: 'cloud_resources', InvResourceType: 'VPC Network', BridgeServiceName: 'networks', - BridgePluginCategoryName: 'gcp-VPC Network', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'networks', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-VPC Network', - BridgeCollectionService: 'gcp-networks', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'VPC Network', InvService: 'VPC Network', + InvResourceCategory: 'cloud_resources', InvResourceType: 'VPC Network', BridgeServiceName: 'networks', + BridgePluginCategoryName: 'gcp-VPC Network', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'networks', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-VPC Network', + BridgeCollectionService: 'gcp-networks', DataIdentifier: 'data', + }, 'Cryptographic Keys': - { - enabled: true, isSingleSource: true, InvAsset: 'Cryptographic Key', InvService: 'Cryptographic Keys', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Cryptographic Key', BridgeServiceName: 'cryptokeys', - BridgePluginCategoryName: 'gcp-Cryptographic Keys', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'cryptoKeys', - BridgeResourceNameIdentifier: '', BridgeExecutionService: 'gcp-Cryptographic Keys', - BridgeCollectionService: 'gcp-cryptoKeys', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Cryptographic Key', InvService: 'Cryptographic Keys', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Cryptographic Key', BridgeServiceName: 'cryptokeys', + BridgePluginCategoryName: 'gcp-Cryptographic Keys', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'cryptoKeys', + BridgeResourceNameIdentifier: '', BridgeExecutionService: 'gcp-Cryptographic Keys', + BridgeCollectionService: 'gcp-cryptoKeys', DataIdentifier: 'data', + }, 'CLB': - { - enabled: true, isSingleSource: true, InvAsset: 'Url Map', InvService: 'CLB', - InvResourceCategory: 'cloud_resources', InvResourceType: 'CLB', BridgeServiceName: 'urlmaps', - BridgePluginCategoryName: 'gcp-CLB', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'urlMaps', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-CLB', - BridgeCollectionService: 'gcp-urlMaps', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Url Map', InvService: 'CLB', + InvResourceCategory: 'cloud_resources', InvResourceType: 'CLB', BridgeServiceName: 'urlmaps', + BridgePluginCategoryName: 'gcp-CLB', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'urlMaps', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-CLB', + BridgeCollectionService: 'gcp-urlMaps', DataIdentifier: 'data', + }, 'Deployment Manager': - { - enabled: true, isSingleSource: true, InvAsset: 'Deployment', InvService: 'Deployment Manager', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Deployment Manager', BridgeServiceName: 'deployments', - BridgePluginCategoryName: 'gcp-Deployment Manager', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'deployments', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Deployment Manager', - BridgeCollectionService: 'gcp-deployments', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Deployment', InvService: 'Deployment Manager', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Deployment Manager', BridgeServiceName: 'deployments', + BridgePluginCategoryName: 'gcp-Deployment Manager', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'deployments', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Deployment Manager', + BridgeCollectionService: 'gcp-deployments', DataIdentifier: 'data', + }, 'Logging': - { - enabled: true, isSingleSource: true, InvAsset: 'Alert Policy', InvService: 'Logging', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Logging', BridgeServiceName: 'alertpolicies', - BridgePluginCategoryName: 'gcp-Logging', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'alertPolicies', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Logging', - BridgeCollectionService: 'gcp-alertPolicies', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Alert Policy', InvService: 'Logging', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Logging', BridgeServiceName: 'alertpolicies', + BridgePluginCategoryName: 'gcp-Logging', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'alertPolicies', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Logging', + BridgeCollectionService: 'gcp-alertPolicies', DataIdentifier: 'data', + }, 'Dataproc': - { - enabled: true, isSingleSource: true, InvAsset: 'Cluster', InvService: 'Dataproc', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Dataproc', BridgeServiceName: 'dataproc', - BridgePluginCategoryName: 'gcp-Dataproc', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/regions/{region}/clusters/{name}', - BridgeResourceType: 'clusters', BridgeResourceNameIdentifier: 'clusterName', BridgeExecutionService: 'gcp-Dataproc', - BridgeCollectionService: 'gcp-dataproc', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Cluster', InvService: 'Dataproc', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Dataproc', BridgeServiceName: 'dataproc', + BridgePluginCategoryName: 'gcp-Dataproc', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/regions/{region}/clusters/{name}', + BridgeResourceType: 'clusters', BridgeResourceNameIdentifier: 'clusterName', BridgeExecutionService: 'gcp-Dataproc', + BridgeCollectionService: 'gcp-dataproc', DataIdentifier: 'data', + }, 'Dataflow': - { - enabled: true, isSingleSource: true, InvAsset: 'job', InvService: 'Dataflow', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Dataflow Job', BridgeServiceName: 'jobs', - BridgePluginCategoryName: 'gcp-Dataflow', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/jobs/{id}', BridgeResourceType: 'jobs', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Dataflow', - BridgeCollectionService: 'gcp-jobs', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'job', InvService: 'Dataflow', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Dataflow Job', BridgeServiceName: 'jobs', + BridgePluginCategoryName: 'gcp-Dataflow', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/jobs/{id}', BridgeResourceType: 'jobs', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Dataflow', + BridgeCollectionService: 'gcp-jobs', DataIdentifier: 'data', + }, 'API': - { - enabled: true, isSingleSource: true, InvAsset: 'API', InvService: 'API', - InvResourceCategory: 'cloud_resources', InvResourceType: 'API', BridgeServiceName: 'apikeys', - BridgePluginCategoryName: 'gcp-API', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'keys', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-API', - BridgeCollectionService: 'gcp-apiKeys', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'API', InvService: 'API', + InvResourceCategory: 'cloud_resources', InvResourceType: 'API', BridgeServiceName: 'apikeys', + BridgePluginCategoryName: 'gcp-API', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'keys', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-API', + BridgeCollectionService: 'gcp-apiKeys', DataIdentifier: 'data', + }, 'BigQuery': - { - enabled: true, isSingleSource: true, InvAsset: 'dataset', InvService: 'BigQuery', - InvResourceCategory: 'database', InvResourceType: 'BigQuery', BridgeServiceName: 'datasets', - BridgePluginCategoryName: 'gcp-BigQuery', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/datasets/{name}', BridgeResourceType: 'datasets', - BridgeResourceNameIdentifier: 'datasetId', BridgeExecutionService: 'gcp-BigQuery', - BridgeCollectionService: 'gcp-datasets', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'dataset', InvService: 'BigQuery', + InvResourceCategory: 'database', InvResourceType: 'BigQuery', BridgeServiceName: 'datasets', + BridgePluginCategoryName: 'gcp-BigQuery', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/datasets/{name}', BridgeResourceType: 'datasets', + BridgeResourceNameIdentifier: 'datasetId', BridgeExecutionService: 'gcp-BigQuery', + BridgeCollectionService: 'gcp-datasets', DataIdentifier: 'data', + }, 'BigTable': - { - enabled: true, isSingleSource: true, InvAsset: 'Instance', InvService: 'BigTable', - InvResourceCategory: 'database', InvResourceType: 'BigTable', BridgeServiceName: 'bigtable', - BridgePluginCategoryName: 'gcp-BigTable', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'instances', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-BigTable', - BridgeCollectionService: 'gcp-bigtable', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Instance', InvService: 'BigTable', + InvResourceCategory: 'database', InvResourceType: 'BigTable', BridgeServiceName: 'bigtable', + BridgePluginCategoryName: 'gcp-BigTable', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'instances', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-BigTable', + BridgeCollectionService: 'gcp-bigtable', DataIdentifier: 'data', + }, 'Spanner': - { - enabled: true, isSingleSource: true, InvAsset: 'Instance', InvService: 'Spanner', - InvResourceCategory: 'database', InvResourceType: 'Spanner', BridgeServiceName: 'spanner', - BridgePluginCategoryName: 'gcp-Spanner', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'instances', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Spanner', - BridgeCollectionService: 'gcp-spanner', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'Instance', InvService: 'Spanner', + InvResourceCategory: 'database', InvResourceType: 'Spanner', BridgeServiceName: 'spanner', + BridgePluginCategoryName: 'gcp-Spanner', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'instances', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Spanner', + BridgeCollectionService: 'gcp-spanner', DataIdentifier: 'data', + }, 'SQL': - { - enabled: true, isSingleSource: true, InvAsset: 'sql', InvService: 'sql', - InvResourceCategory: 'database', InvResourceType: 'sql', BridgeServiceName: 'sql', - BridgePluginCategoryName: 'gcp-SQL', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'instances', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-SQL', - BridgeCollectionService: 'gcp-sql', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'sql', InvService: 'sql', + InvResourceCategory: 'database', InvResourceType: 'sql', BridgeServiceName: 'sql', + BridgePluginCategoryName: 'gcp-SQL', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'instances', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-SQL', + BridgeCollectionService: 'gcp-sql', DataIdentifier: 'data', + }, 'Storage': - { - enabled: true, isSingleSource: true, InvAsset: 'storage', InvService: 'storage', - InvResourceCategory: 'storage', InvResourceType: 'bucket', BridgeServiceName: 'buckets', - BridgePluginCategoryName: 'gcp-Storage', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'b', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Storage', - BridgeCollectionService: 'gcp-buckets', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'storage', InvService: 'storage', + InvResourceCategory: 'storage', InvResourceType: 'bucket', BridgeServiceName: 'buckets', + BridgePluginCategoryName: 'gcp-Storage', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'b', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Storage', + BridgeCollectionService: 'gcp-buckets', DataIdentifier: 'data', + }, 'AI & ML': - { - enabled: true, isSingleSource: true, InvAsset: 'models', InvService: 'vertexAI', - InvResourceCategory: 'ai&ml', InvResourceType: 'VertexAI models', BridgeServiceName: 'vertexAI', - BridgePluginCategoryName: 'gcp-AI & ML', BridgeProvider: 'Google', BridgeCall: 'listModels', - BridgeArnIdentifier: '', BridgeIdTemplate: '{name}', BridgeResourceType: 'models', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-AI & ML', - BridgeCollectionService: 'gcp-vertexai', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'models', InvService: 'vertexAI', + InvResourceCategory: 'ai&ml', InvResourceType: 'VertexAI models', BridgeServiceName: 'vertexAI', + BridgePluginCategoryName: 'gcp-AI & ML', BridgeProvider: 'Google', BridgeCall: 'listModels', + BridgeArnIdentifier: '', BridgeIdTemplate: '{name}', BridgeResourceType: 'models', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-AI & ML', + BridgeCollectionService: 'gcp-vertexai', DataIdentifier: 'data', + }, 'CloudBuild': - { - enabled: true, isSingleSource: true, InvAsset: 'trigger', InvService: 'CloudBuild', - InvResourceCategory: 'cloud_resources', InvResourceType: 'trigger', BridgeServiceName: 'cloudbuild', - BridgePluginCategoryName: 'gcp-CloudBuild', BridgeProvider: 'Google', BridgeCall: 'triggers', - BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/locations/{region}/triggers/{name}', BridgeResourceType: 'triggers', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-CloudBuild', - BridgeCollectionService: 'gcp-cloudbuild', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'trigger', InvService: 'CloudBuild', + InvResourceCategory: 'cloud_resources', InvResourceType: 'trigger', BridgeServiceName: 'cloudbuild', + BridgePluginCategoryName: 'gcp-CloudBuild', BridgeProvider: 'Google', BridgeCall: 'triggers', + BridgeArnIdentifier: '', BridgeIdTemplate: 'projects/{cloudAccount}/locations/{region}/triggers/{name}', BridgeResourceType: 'triggers', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-CloudBuild', + BridgeCollectionService: 'gcp-cloudbuild', DataIdentifier: 'data', + }, 'Cloud Composer': - { - enabled: true, isSingleSource: true, InvAsset: 'environment', InvService: 'Cloud Composer', - InvResourceCategory: 'cloud_resources', InvResourceType: 'composer_environment', BridgeServiceName: 'composer', - BridgePluginCategoryName: 'gcp-Cloud Composer', BridgeProvider: 'Google', BridgeCall: 'environments', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'environments', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Cloud Composer', - BridgeCollectionService: 'gcp-composer', DataIdentifier: 'data', - }, + { + enabled: true, isSingleSource: true, InvAsset: 'environment', InvService: 'Cloud Composer', + InvResourceCategory: 'cloud_resources', InvResourceType: 'composer_environment', BridgeServiceName: 'composer', + BridgePluginCategoryName: 'gcp-Cloud Composer', BridgeProvider: 'Google', BridgeCall: 'environments', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'environments', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Cloud Composer', + BridgeCollectionService: 'gcp-composer', DataIdentifier: 'data', + }, 'Resource Manager': - { - enabled: true, isSingleSource: true, InvAsset: 'organization', InvService: 'Resource Manager', - InvResourceCategory: 'cloud_resources', InvResourceType: 'Organization', BridgeServiceName: 'organizations', - BridgePluginCategoryName: 'gcp-Resource Manager', BridgeProvider: 'Google', BridgeCall: 'list', - BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'organizations', - BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Resource Manager', - BridgeCollectionService: 'gcp-organizations', DataIdentifier: 'data', - } + { + enabled: true, isSingleSource: true, InvAsset: 'organization', InvService: 'Resource Manager', + InvResourceCategory: 'cloud_resources', InvResourceType: 'Organization', BridgeServiceName: 'organizations', + BridgePluginCategoryName: 'gcp-Resource Manager', BridgeProvider: 'Google', BridgeCall: 'list', + BridgeArnIdentifier: '', BridgeIdTemplate: '', BridgeResourceType: 'organizations', + BridgeResourceNameIdentifier: 'name', BridgeExecutionService: 'gcp-Resource Manager', + BridgeCollectionService: 'gcp-organizations', DataIdentifier: 'data', + } }; var calls = { disks: { @@ -364,7 +364,7 @@ var calls = { location: null, pagination: true }, - list : { + list: { url: 'https://compute.googleapis.com/compute/v1/projects/{projectId}/zones/{locationId}/instanceGroups', location: 'zone', pagination: true, @@ -380,7 +380,7 @@ var calls = { } }, functions: { - list : { + list: { url: 'https://cloudfunctions.googleapis.com/v1/projects/{projectId}/locations/{locationId}/functions', location: 'region', paginationKey: 'pageSize', @@ -392,11 +392,11 @@ var calls = { }, functionsv2: { list: { - url: 'https://cloudfunctions.googleapis.com/v2/projects/{projectId}/locations/{locationId}/functions', + url: 'https://run.googleapis.com/v2/projects/{projectId}/locations/{locationId}/services', location: 'region', paginationKey: 'pageSize', pagination: true, - dataFilterKey: 'functions' + dataFilterKey: 'services' }, sendIntegration: { enabled: true @@ -486,7 +486,7 @@ var calls = { } }, projects: { - list:{ + list: { url: 'https://cloudresourcemanager.googleapis.com/v1/projects', pagination: true, }, @@ -499,7 +499,7 @@ var calls = { location: null, method: 'POST', pagination: false, - body: {options:{requestedPolicyVersion: 3}} + body: { options: { requestedPolicyVersion: 3 } } }, getWithNumber: { url: 'https://cloudresourcemanager.googleapis.com/v1/projects/{projectId}' @@ -626,7 +626,7 @@ var calls = { }, sendIntegration: serviceMap['Deployment Manager'] }, - organizations:{ // https://cloudresourcemanager.googleapis.com/v1beta1/organizations + organizations: { // https://cloudresourcemanager.googleapis.com/v1beta1/organizations list: { url: 'https://cloudresourcemanager.googleapis.com/v1beta1/organizations', pagination: false @@ -666,7 +666,7 @@ var calls = { paginationKey: 'pageSize' } }, - networkRoutes:{ + networkRoutes: { list: { url: 'https://compute.googleapis.com/compute/v1/projects/{projectId}/global/routes', location: null, @@ -854,7 +854,7 @@ var postcalls = { } }, functions: { - getIamPolicy : { + getIamPolicy: { url: 'https://cloudfunctions.googleapis.com/v1/{name}:getIamPolicy', location: null, reliesOnService: ['functions'], @@ -864,7 +864,7 @@ var postcalls = { }, functionsv2: { getIamPolicy: { - url: 'https://cloudfunctions.googleapis.com/v2/{name}:getIamPolicy', + url: 'https://run.googleapis.com/v2/{name}:getIamPolicy', location: null, method: 'POST', reliesOnService: ['functionsv2'], @@ -889,21 +889,21 @@ var postcalls = { method: 'POST', reliesOnService: ['instanceGroups'], reliesOnCall: ['aggregatedList'], - properties: ['location','name'], + properties: ['location', 'name'], filterObjKey: 'instanceGroups' }, get: { url: 'https://compute.googleapis.com/compute/v1/projects/{projectId}/{location}/instanceGroups/{name}', reliesOnService: ['instanceGroups'], reliesOnCall: ['aggregatedList'], - properties: ['location','name'], + properties: ['location', 'name'], filterObjKey: 'instanceGroups' } }, organizations: { //https://cloudresourcemanager.googleapis.com/v1beta1/{resource=organizations/*}:getIamPolicy getIamPolicy: { - url:'https://cloudresourcemanager.googleapis.com/v1/organizations/{organizationId}:getIamPolicy', + url: 'https://cloudresourcemanager.googleapis.com/v1/organizations/{organizationId}:getIamPolicy', reliesOnService: ['organizations'], reliesOnCall: ['list'], properties: ['organizationId'], @@ -944,7 +944,7 @@ var postcalls = { }, sendIntegration: serviceMap['Resource Manager'] }, - folders:{ // https://cloudresourcemanager.googleapis.com/v2/folders + folders: { // https://cloudresourcemanager.googleapis.com/v2/folders list: { url: 'https://cloudresourcemanager.googleapis.com/v2/folders?parent=organizations/{organizationId}', reliesOnService: ['organizations'], @@ -995,7 +995,7 @@ var postcalls = { }, policies: { getProjectDenyPolicies: {// GET https://iam.googleapis.com/v2/policies/cloudresourcemanager.googleapis.com%252Fprojects%2projectId/denypolicies/policyId - url:'https://iam.googleapis.com/v2/{name}', + url: 'https://iam.googleapis.com/v2/{name}', reliesOnService: ['policies'], reliesOnCall: ['projectDenyPolicies'], properties: ['name'], @@ -1157,12 +1157,12 @@ var specialcalls = { iam: { list: { pagination: true, - reliesOnService: ['projects','folders','organizations','memberships','policies'], - reliesOnCall: ['getIamPolicy','getProjectDenyPolicies','getOrgDenyPolicies','getFolderDenyPolicies'] + reliesOnService: ['projects', 'folders', 'organizations', 'memberships', 'policies'], + reliesOnCall: ['getIamPolicy', 'getProjectDenyPolicies', 'getOrgDenyPolicies', 'getFolderDenyPolicies'] }, sendIntegration: { integrationReliesOn: { - serviceName: ['roles','projects','folders','organizations','memberships','policies'] + serviceName: ['roles', 'projects', 'folders', 'organizations', 'memberships', 'policies'] }, enabled: true } @@ -1174,6 +1174,6 @@ module.exports = { postcalls: postcalls, tertiarycalls: tertiarycalls, specialcalls: specialcalls, - additionalCalls:additionalCalls, + additionalCalls: additionalCalls, serviceMap: serviceMap }; diff --git a/helpers/google/index.js b/helpers/google/index.js index 7654dec0f..bf14f862f 100644 --- a/helpers/google/index.js +++ b/helpers/google/index.js @@ -1,10 +1,10 @@ -var shared = require(__dirname + '/../shared.js'); -var functions = require('./functions.js'); -var regRegions = require('./regions.js'); +var shared = require(__dirname + '/../shared.js'); +var functions = require('./functions.js'); +var regRegions = require('./regions.js'); -const {JWT} = require('google-auth-library'); +const { JWT } = require('google-auth-library'); -var async = require('async'); +var async = require('async'); var regions = function() { return regRegions; @@ -57,7 +57,7 @@ var processCall = function(GoogleConfig, collection, settings, regions, call, se async.eachLimit(regions[service], 5, function(region, regionCb) { if (callObj.location == 'zone') { - async.eachLimit(regions.zones[region], 5,function(zone, zoneCb) { + async.eachLimit(regions.zones[region], 5, function(zone, zoneCb) { run(GoogleConfig, collection, settings, service, callObj, callKey, zone, zoneCb, client); }, function() { regionCb(); @@ -92,7 +92,7 @@ var run = function(GoogleConfig, collection, settings, service, callObj, callKey callObj.auth = client; var options = { - params : {} + params: {} }; var records; @@ -140,7 +140,7 @@ var run = function(GoogleConfig, collection, settings, service, callObj, callKey collection[service][callKey][region] = {}; collection[service][callKey][region].data = []; } - let collectionItems = collection[service][callKey][region]; + let collectionItems = collection[service][callKey][region]; if (callObj.reliesOnService && !callObj.reliesOnSubService) { if (!callObj.reliesOnService.length) { @@ -177,14 +177,14 @@ var run = function(GoogleConfig, collection, settings, service, callObj, callKey } } }); - records = callObjData; + records = callObjData; } if (callObj.subObj) records = records.filter(record => !!record[callObj.subObj]); async.eachLimit(records, callObj.maxLimit ? 35 : 10, function(record, recordCb) { callObj.urlToCall = callObj.url; for (var property in callObj.properties) { - let data = !callObj.subObj ? record[callObj.properties[property]] : record[callObj.subObj][callObj.properties[property]]; - if (callObj.encodeProperty){ + let data = !callObj.subObj ? record[callObj.properties[property]] : record[callObj.subObj][callObj.properties[property]]; + if (callObj.encodeProperty) { data = encodeURIComponent(data); } callObj.urlToCall = callObj.urlToCall.replace(`{${callObj.properties[property]}}`, data); @@ -217,11 +217,11 @@ var run = function(GoogleConfig, collection, settings, service, callObj, callKey async.eachLimit(records, 10, function(record, recordCb) { callObj.urlToCall = callObj.url; for (var property in callObj.properties) { - callObj.urlToCall = callObj.urlToCall.replace(`{${callObj.properties[property]}}`, !callObj.subObj ? record[callObj.properties[property]] : record[callObj.subObj][callObj.properties[property]]); + callObj.urlToCall = callObj.urlToCall.replace(`{${callObj.properties[property]}}`, !callObj.subObj ? record[callObj.properties[property]] : record[callObj.subObj][callObj.properties[property]]); } if (!callObj.maxLimit || (callObj.maxLimit && collectionItems.data && collectionItems.data.length < callObj.maxLimit)) { execute(LocalGoogleConfig, collection, service, callObj, callKey, region, recordCb, client, options); - } else { + } else { recordCb(); } }, function() { @@ -301,26 +301,26 @@ var execute = async function(LocalGoogleConfig, collection, service, callObj, ca collectionItems = myEngine ? collection[service][myEngine][callKey][region] : collection[service][callKey][region]; let set = true; if (data.data.items) { - resultItems = setData(collectionItems, data.data.items, postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data.items, postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (callObj.dataKey && data.data[callObj.dataKey]) { - resultItems = setData(collectionItems, data.data[callObj.dataKey], postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data[callObj.dataKey], postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (data.data.clusters && ['kubernetes', 'dataproc'].includes(service)) { - resultItems = setData(collectionItems, data.data['clusters'], postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data['clusters'], postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (callObj.dataKey && data.data && data.data.length && callObj.isDataArray) { - resultItems = setData(collectionItems, data.data[0][callObj.dataKey], postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data[0][callObj.dataKey], postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (callObj.dataFilterKey && data.data[callObj.dataFilterKey]) { - resultItems = setData(collectionItems, data.data[callObj.dataFilterKey], postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data[callObj.dataFilterKey], postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (data.data[service]) { - resultItems = setData(collectionItems, data.data[service], postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data[service], postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (!myEngine && data.data.accounts) { - resultItems = setData(collectionItems, data.data.accounts, postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data.accounts, postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (!myEngine && data.data.keys) { - resultItems = setData(collectionItems, data.data.keys, postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collectionItems, data.data.keys, postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else if (callObj.ignoreMiscData) { set = false; myEngine ? collection[service][myEngine][callKey][region].data = [] : collection[service][callKey][region].data = []; } else if (!myEngine && data.data) { - resultItems = setData(collection[service][callKey][region], data.data, postCall, parent, {'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit}); + resultItems = setData(collection[service][callKey][region], data.data, postCall, parent, { 'service': service, 'callKey': callKey, maxLimit: callObj.maxLimit }); } else { set = false; myEngine ? collection[service][myEngine][callKey][region].data = [] : collection[service][callKey][region].data = []; @@ -354,28 +354,69 @@ var execute = async function(LocalGoogleConfig, collection, service, callObj, ca } else if (callObj.location && callObj.location == 'region') { url = url.replace(/{locationId}/g, callObj.params.region); } - makeApiCall(client, url, executorCb, null, {method: callObj.method, isPostCall, parentRecord, pagination: callObj.pagination, paginationKey: callObj.paginationKey, reqParams: callObj.reqParams, dataKey: callObj.dataKey, body: callObj.body}); + makeApiCall(client, url, executorCb, null, { method: callObj.method, isPostCall, parentRecord, pagination: callObj.pagination, paginationKey: callObj.paginationKey, reqParams: callObj.reqParams, dataKey: callObj.dataKey, body: callObj.body }); } }; var isRateError = function(err) { let isError = false; - var rateError = {message: 'rate', statusCode: 429}; - if (err && err.code && rateError.statusCode == err.code){ + var rateError = { message: 'rate', statusCode: 429 }; + if (err && err.code && rateError.statusCode == err.code) { isError = true; } else if (err && rateError && rateError.message && err.message && - err.message.toLowerCase().indexOf(rateError.message.toLowerCase()) > -1){ + err.message.toLowerCase().indexOf(rateError.message.toLowerCase()) > -1) { isError = true; } return isError; }; +var isQuotaError = function(err) { + if (!err) return false; + + // Check status code (429 is used for both rate limits and quota limits) + let statusCode = err.code || (err.response && err.response.status) || (err.response && err.response.statusCode); + + // Check for RESOURCE_EXHAUSTED status code or quota-related error messages + if (statusCode === 429 || statusCode === 'RESOURCE_EXHAUSTED' || err.code === 'RESOURCE_EXHAUSTED') { + // Check error message for quota-related keywords + let errorMessage = ''; + if (err.message) { + errorMessage = err.message.toLowerCase(); + } else if (err.response && err.response.data && err.response.data.error) { + if (typeof err.response.data.error === 'string') { + errorMessage = err.response.data.error.toLowerCase(); + } else if (err.response.data.error.message) { + errorMessage = err.response.data.error.message.toLowerCase(); + } else if (err.response.data.error.status) { + errorMessage = err.response.data.error.status.toLowerCase(); + } + } + + // Check for quota-related keywords (quota limit errors typically mention "quota", "exceeded limit", or "resource_exhausted") + if (errorMessage.indexOf('quota') > -1 || + errorMessage.indexOf('resource_exhausted') > -1 || + errorMessage.indexOf('quota limit') > -1 || + errorMessage.indexOf('exceeded limit') > -1) { + return true; + } + + // Also check if status is RESOURCE_EXHAUSTED in response data + if (err.response && err.response.data && err.response.data.error && + err.response.data.error.status === 'RESOURCE_EXHAUSTED') { + return true; + } + } + + return false; +}; + function makeApiCall(client, originalUrl, callCb, nextToken, config) { let retries = []; var apiRetryAttempts = 3; var apiRetryBackoff = 500; var apiRetryCap = 1000; + var quotaRetryDelay = 60000; // 60 seconds (1 minute) for quota limit errors let url = originalUrl; let queryParams = ''; @@ -386,21 +427,35 @@ function makeApiCall(client, originalUrl, callCb, nextToken, config) { queryParams = queryParams ? `${queryParams}&${config.reqParams}` : `?${config.reqParams}`; } url = `${originalUrl}${queryParams}`; + + // Track the last error to determine retry strategy + let lastError = null; + async.retry({ times: apiRetryAttempts, - interval: function(retryCount){ + interval: function(retryCount) { + // Check if last error was a quota error - apply 1 minute delay for all quota errors + if (lastError && isQuotaError(lastError)) { + console.log(`[Quota Limit] Detected quota limit error. Retrying after ${quotaRetryDelay / 1000} seconds...`); + retries.push({ seconds: quotaRetryDelay / 1000, type: 'quota_limit' }); + return quotaRetryDelay; + } + + // Default exponential backoff for rate limit errors let retryExponential = 3; let retryLeveler = 3; let timestamp = parseInt(((new Date()).getTime()).toString().slice(-1)); let retry_temp = Math.min(apiRetryCap, (apiRetryBackoff * (retryExponential + timestamp) ** retryCount)); - let retry_seconds = Math.round(retry_temp/retryLeveler + Math.random(0, retry_temp) * 5000); + let retry_seconds = Math.round(retry_temp / retryLeveler + Math.random(0, retry_temp) * 5000); - console.log(`Trying again in: ${retry_seconds/1000} seconds`); - retries.push({seconds: Math.round(retry_seconds/1000)}); + console.log(`Trying again in: ${retry_seconds / 1000} seconds`); + retries.push({ seconds: Math.round(retry_seconds / 1000) }); return retry_seconds; }, errorFilter: function(err) { - return isRateError(err); + lastError = err; + // Retry on rate errors or quota errors (for all API calls) + return isRateError(err) || isQuotaError(err); } }, function(cb) { @@ -418,7 +473,7 @@ function makeApiCall(client, originalUrl, callCb, nextToken, config) { callCb(null, res, originalUrl, config.isPostCall, config.parentRecord); } }); - }, function(err, data){ + }, function(err, data) { callCb(err, data); }); } @@ -524,4 +579,4 @@ var helpers = { for (var s in shared) helpers[s] = shared[s]; for (var f in functions) helpers[f] = functions[f]; -module.exports = helpers; +module.exports = helpers; \ No newline at end of file diff --git a/index.js b/index.js index 05a994c11..ee7ff7e89 100755 --- a/index.js +++ b/index.js @@ -7,9 +7,9 @@ const engine = require('./engine'); console.log(` ________ _______ __ _ __ / ____/ /___ __ ______/ / ___/____ / /___ (_) /_ - / / / / __ \/ / / / __ /\__ \/ __ \/ / __ \/ / __/ + / / / / __ / / / / __ /__ / __ / / __ / / __/ / /___/ / /_/ / /_/ / /_/ /___/ / /_/ / / /_/ / / /_ -\____/_/\____/\__,_/\__,_//____/ .___/_/\____/_/\__/ +____/_/____/__,_/__,_//____/ .___/____/_/__/ /_/ ☁️ CloudExploit by KhulnaSoft Security, Ltd. @@ -79,6 +79,97 @@ parser.add_argument('--run-asl', { help: 'When set, it will execute custom plugins.', action: 'store_false' }); +parser.add_argument('--sync', { + help: 'Enable syncing with the hosted SaaS platform.', + action: 'store_true' +}); +parser.add_argument('--saas-key', { + help: 'The API Key for authenticating with the SaaS platform (overrides KHULNASOFT_SAAS_KEY environment variable).' +}); +parser.add_argument('--saas-account-id', { + help: 'The Cloud Account Identifier on the SaaS platform (overrides KHULNASOFT_SAAS_ACCOUNT_ID environment variable).' +}); +parser.add_argument('--saas-url', { + help: 'Override the SaaS API endpoint URL (overrides KHULNASOFT_SAAS_URL environment variable).' +}); + +function initializeSaasSync(cloudConfig, settings, config) { + const saasEnabled = settings.sync || (config && config.saas && config.saas.enabled) || process.env.KHULNASOFT_SAAS_SYNC === 'true'; + if (saasEnabled) { + const saasKey = settings.saas_key || process.env.KHULNASOFT_SAAS_KEY || (config && config.saas && config.saas.api_key); + const saasAccountId = settings.saas_account_id || process.env.KHULNASOFT_SAAS_ACCOUNT_ID || (config && config.saas && config.saas.account_id); + const saasUrl = settings.saas_url || process.env.KHULNASOFT_SAAS_URL || (config && config.saas && config.saas.url) || 'https://cloud.khulnasoft.com/api/v1/sync'; + + if (!saasKey) { + console.error('ERROR: SaaS syncing is enabled but no SaaS API key was provided. Specify via --saas-key, KHULNASOFT_SAAS_KEY environment variable, or config.js.'); + process.exit(1); + } + + // Auto-detect SaaS account ID if not provided + let detectedAccountId = saasAccountId; + if (!detectedAccountId && settings.cloud) { + const cloudType = Array.isArray(settings.cloud) ? settings.cloud[0] : settings.cloud; + if (cloudType === 'google' && cloudConfig.project) { + detectedAccountId = cloudConfig.project; + } else if (cloudType === 'azure' && cloudConfig.SubscriptionID) { + detectedAccountId = cloudConfig.SubscriptionID; + } else if (cloudType === 'oracle' && cloudConfig.tenancyId) { + detectedAccountId = cloudConfig.tenancyId; + } + } + + if (!detectedAccountId) { + console.log('WARNING: SaaS Account ID was not specified and could not be auto-detected. SaaS sync will use a default identifier.'); + detectedAccountId = 'default-account'; + } + + settings.identifier = { + cloud_account_identifier: detectedAccountId + }; + + // HTTPS/HTTP post integration function + settings.integration = function(localEvent, callback) { + const postData = JSON.stringify(localEvent); + const url = require('url'); + const parsedUrl = url.parse(saasUrl); + const http = parsedUrl.protocol === 'https:' ? require('https') : require('http'); + + const options = { + hostname: parsedUrl.hostname, + port: parsedUrl.port || (parsedUrl.protocol === 'https:' ? 443 : 80), + path: parsedUrl.path, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Khulnasoft-Saas-Key': saasKey, + 'Authorization': `Bearer ${saasKey}`, + 'Content-Length': Buffer.byteLength(postData) + } + }; + + const req = http.request(options, (res) => { + let data = ''; + res.on('data', (chunk) => { data += chunk; }); + res.on('end', () => { + if (res.statusCode >= 200 && res.statusCode < 300) { + console.log(`INFO: SaaS Sync: Successfully synced service metadata for ${localEvent.cloud_account_identifier || 'unknown'} (${settings.identifier.service})`); + } else { + console.error(`ERROR: SaaS Sync: Failed to sync service metadata for ${localEvent.cloud_account_identifier || 'unknown'} (${settings.identifier.service}). Status: ${res.statusCode}. Response: ${data}`); + } + callback(); + }); + }); + + req.on('error', (err) => { + console.error(`ERROR: SaaS Sync: Request error for ${settings.identifier.service}: ${err.message}`); + callback(); + }); + + req.write(postData); + req.end(); + }; + } +} let settings = parser.parse_args(); let cloudConfig = {}; @@ -88,6 +179,7 @@ if (!settings.config) { settings.cloud = 'aws'; // AWS will handle the default credential chain without needing a credential file console.log('INFO: No config file provided, using default AWS credential chain.'); + initializeSaasSync(cloudConfig, settings, null); return engine(cloudConfig, settings); } @@ -276,4 +368,5 @@ if (settings.remediate && settings.remediate.length) { } // Now execute the scans using the defined configuration information. +initializeSaasSync(cloudConfig, settings, config); engine(cloudConfig, settings); \ No newline at end of file diff --git a/plugins/alibaba/securitycenter/securityNotificationsEnabled.js b/plugins/alibaba/securitycenter/securityNotificationsEnabled.js index 737622078..d89d369a4 100644 --- a/plugins/alibaba/securitycenter/securityNotificationsEnabled.js +++ b/plugins/alibaba/securitycenter/securityNotificationsEnabled.js @@ -8,12 +8,12 @@ module.exports = { severity: 'Medium', description: 'Ensure that notifications are enabled for all risk items in Vulnerability, Baseline Risks, Alerts and Accesskey Leak event detection categories.', more_info: 'Alibaba Cloud sends notification via email, SMS or internal message whenever security events happen. ' + - 'Enable notifications for security aletrs in order to receive notifications as soon as security events happens.', + 'Enable notifications for security alerts in order to receive notifications as soon as security events happens.', link: 'https://www.alibabacloud.com/help/doc-detail/111648.htm', recommended_action: 'Enable email, SMS or internal message notifications under Security Center settings.', apis: ['TDS:DescribeNoticeConfig'], - run: function(cache, settings, callback) { + run: function (cache, settings, callback) { var results = []; var source = {}; var regions = helpers.regions(settings); @@ -34,7 +34,7 @@ module.exports = { var emailOnlyAlerts = ['yundun_IP_Blocking', 'yundun_sas_cloud_native_firewall', 'yundun_sas_cloud_native_firewall_Defense']; - async.each(regions.tds, function(region, rcb) { + async.each(regions.tds, function (region, rcb) { var describeNoticeConfig = helpers.addSource(cache, source, ['tds', 'DescribeNoticeConfig', region]); @@ -70,7 +70,7 @@ module.exports = { } rcb(); - }, function(){ + }, function () { callback(null, results, source); }); } diff --git a/plugins/aws/ec2/ec2PrivilegeAnalysis.js b/plugins/aws/ec2/ec2PrivilegeAnalysis.js index 0c4d73b4c..33b5f67ff 100644 --- a/plugins/aws/ec2/ec2PrivilegeAnalysis.js +++ b/plugins/aws/ec2/ec2PrivilegeAnalysis.js @@ -8,6 +8,7 @@ module.exports = { link: 'https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Security.html', recommended_action: 'Secure EC2 instances by restricting access with properly configured security groups and NACLs.', realtime_triggers: ['ec2:RunInstances','ec2:TerminateInstances'], + apis: [], run: function(cache, settings, callback) { var results = []; diff --git a/plugins/aws/ec2/openCIFS.js b/plugins/aws/ec2/openCIFS.js index 45272ace8..aa8ccb77f 100644 --- a/plugins/aws/ec2/openCIFS.js +++ b/plugins/aws/ec2/openCIFS.js @@ -6,10 +6,10 @@ module.exports = { category: 'EC2', domain: 'Compute', severity: 'High', - description: 'Determine if UDP port 445 for CIFS is open to the public', + description: 'Determine if TCP or UDP port 445 for CIFS is open to the public', more_info: 'While some ports such as HTTP and HTTPS are required to be open to the public to function properly, more sensitive services such as CIFS should be restricted to known IP addresses.', link: 'http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/authorizing-access-to-an-instance.html', - recommended_action: 'Restrict UDP port 445 to known IP addresses', + recommended_action: 'Restrict TCP and UDP port 445 to known IP addresses', apis: ['EC2:describeSecurityGroups', 'EC2:describeNetworkInterfaces', 'Lambda:listFunctions'], settings: { ec2_skip_unused_groups: { @@ -43,16 +43,16 @@ module.exports = { } }, actions: { - remediate: ['EC2:authorizeSecurityGroupIngress','EC2:revokeSecurityGroupIngress'], + remediate: ['EC2:authorizeSecurityGroupIngress', 'EC2:revokeSecurityGroupIngress'], rollback: ['EC2:authorizeSecurityGroupIngress'] }, permissions: { - remediate: ['ec2:AuthorizeSecurityGroupIngress','ec2:RevokeSecurityGroupIngress'], - rollback:['ec2:AuthorizeSecurityGroupIngress'] + remediate: ['ec2:AuthorizeSecurityGroupIngress', 'ec2:RevokeSecurityGroupIngress'], + rollback: ['ec2:AuthorizeSecurityGroupIngress'] }, - realtime_triggers: ['ec2:CreateSecurityGroup','ec2:AuthorizeSecurityGroupIngress','ec2:ModifySecurityGroupRules','ec2:RevokeSecurityGroupIngress', 'ec2:DeleteSecurityGroup'], + realtime_triggers: ['ec2:CreateSecurityGroup', 'ec2:AuthorizeSecurityGroupIngress', 'ec2:ModifySecurityGroupRules', 'ec2:RevokeSecurityGroupIngress', 'ec2:DeleteSecurityGroup'], - run: function(cache, settings, callback) { + run: function (cache, settings, callback) { var config = { ec2_skip_unused_groups: settings.ec2_skip_unused_groups || this.settings.ec2_skip_unused_groups.default, check_network_interface: settings.check_network_interface || this.settings.check_network_interface.default, @@ -60,18 +60,19 @@ module.exports = { config.ec2_skip_unused_groups = (config.ec2_skip_unused_groups == 'true'); config.check_network_interface = (config.check_network_interface == 'true'); - + var results = []; var source = {}; var regions = helpers.regions(settings); var ports = { + 'tcp': [445], 'udp': [445] }; var service = 'CIFS'; - async.each(regions.ec2, function(region, rcb){ + async.each(regions.ec2, function (region, rcb) { var describeSecurityGroups = helpers.addSource(cache, source, ['ec2', 'describeSecurityGroups', region]); @@ -91,18 +92,18 @@ module.exports = { helpers.findOpenPorts(describeSecurityGroups.data, ports, service, region, results, cache, config, rcb, settings); rcb(); - }, function(){ + }, function () { callback(null, results, source); }); }, - remediate: function(config, cache, settings, resource, callback) { + remediate: function (config, cache, settings, resource, callback) { var remediation_file = settings.remediation_file; var putCall = this.actions.remediate; var pluginName = 'openCIFS'; var protocol = 'udp'; var port = 445; - helpers.remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, settings, resource, remediation_file, function(error, action) { + helpers.remediateOpenPorts(putCall, pluginName, protocol, port, config, cache, settings, resource, remediation_file, function (error, action) { if (error && (error.length || Object.keys(error).length)) { remediation_file['post_remediate']['actions'][pluginName]['error'] = error; settings.remediation_file = remediation_file; @@ -114,4 +115,4 @@ module.exports = { } }); } -}; +}; \ No newline at end of file diff --git a/plugins/aws/ec2/openCIFS.spec.js b/plugins/aws/ec2/openCIFS.spec.js index 5acf3ee44..ed3373f9f 100644 --- a/plugins/aws/ec2/openCIFS.spec.js +++ b/plugins/aws/ec2/openCIFS.spec.js @@ -17,7 +17,7 @@ const describeSecurityGroups = [ "IpPermissions": [ { "FromPort": 0, - "IpProtocol": "udp", + "IpProtocol": "tcp", "IpRanges": [ { "CidrIp": "0.0.0.0/0" @@ -63,6 +63,29 @@ const describeSecurityGroups = [ } ], "VpcId": "vpc-99de2fe4" + }, + { + "Description": "CIFS UDP", + "GroupName": "CIFS-UDP-Access", + "IpPermissions": [ + { + "FromPort": 445, + "IpProtocol": "udp", + "IpRanges": [ + { + "CidrIp": "0.0.0.0/0" + } + ], + "Ipv6Ranges": [], + "PrefixListIds": [], + "ToPort": 445, + "UserIdGroupPairs": [] + } + ], + "OwnerId": "111122223333", + "GroupId": "sg-00263f564442dfec", + "IpPermissionsEgress": [], + "VpcId": "vpc-99de2fe4" } ]; @@ -71,14 +94,14 @@ const describeNetworkInterfaces = [ "AvailabilityZone": "us-east-1b", "Description": "RDSNetworkInterface", "Groups": [ - { - "GroupName": "default", - "GroupId": "sg-aa941691" - }, - { - "GroupName": "HTTP-Access", - "GroupId": "sg-02e2c70cd463dca29" - }, + { + "GroupName": "default", + "GroupId": "sg-aa941691" + }, + { + "GroupName": "HTTP-Access", + "GroupId": "sg-02e2c70cd463dca29" + }, ], "InterfaceType": "interface", "Ipv6Addresses": [], @@ -88,11 +111,11 @@ const describeNetworkInterfaces = [ "PrivateDnsName": "ip-172-31-93-52.ec2.internal", "PrivateIpAddress": "172.31.93.52", "PrivateIpAddresses": [ - { - "Primary": true, - "PrivateDnsName": "ip-172-31-93-52.ec2.internal", - "PrivateIpAddress": "172.31.93.52" - } + { + "Primary": true, + "PrivateDnsName": "ip-172-31-93-52.ec2.internal", + "PrivateIpAddress": "172.31.93.52" + } ], "Ipv4Prefixes": [], "Ipv6Prefixes": [], @@ -156,7 +179,7 @@ const listFunctions = [ const createCache = (securityGroups, networkInterfaces, functions, securityGroupsErr, networkInterfacesErr, functionsErr) => { return { - ec2:{ + ec2: { describeSecurityGroups: { 'us-east-1': { err: securityGroupsErr, @@ -183,7 +206,7 @@ const createCache = (securityGroups, networkInterfaces, functions, securityGroup const createNullCache = () => { return { - ec2:{ + ec2: { describeSecurityGroups: { 'us-east-1': null, }, @@ -212,14 +235,14 @@ describe('openCIFS', function () { it('should WARN if security group is unused', function (done) { const cache = createCache([describeSecurityGroups[1]], [describeNetworkInterfaces[0]], []); - openCIFS.run(cache, {ec2_skip_unused_groups: 'true'}, (err, results) => { + openCIFS.run(cache, { ec2_skip_unused_groups: 'true' }, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(1); done(); }); }); - it('should FAIL if security group has CIFS UDP port open to public', function (done) { + it('should FAIL if security group has CIFS TCP port open to public', function (done) { const cache = createCache([describeSecurityGroups[1]], [describeNetworkInterfaces[0]], [listFunctions[0]]); openCIFS.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); @@ -228,6 +251,15 @@ describe('openCIFS', function () { }); }); + it('should FAIL if security group has CIFS UDP port open to public', function (done) { + const cache = createCache([describeSecurityGroups[2]], [describeNetworkInterfaces[0]], [listFunctions[0]]); + openCIFS.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + done(); + }); + }); + it('should PASS if no security groups found', function (done) { const cache = createCache([]); openCIFS.run(cache, {}, (err, results) => { @@ -238,7 +270,7 @@ describe('openCIFS', function () { }); it('should UNKNWON unable to describe security groups', function (done) { - const cache = createCache(null, { message: 'Unable to describe security groups'}); + const cache = createCache(null, { message: 'Unable to describe security groups' }); openCIFS.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(3); @@ -256,7 +288,7 @@ describe('openCIFS', function () { it('should PASS if open port security group attached to the network interface has no public IP associated', function (done) { const cache = createCache([describeSecurityGroups[0]], [describeNetworkInterfaces[0]], [listFunctions[0]]); - openCIFS.run(cache, {check_network_interface:'true'}, (err, results) => { + openCIFS.run(cache, { check_network_interface: 'true' }, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(0); done(); @@ -264,4 +296,4 @@ describe('openCIFS', function () { }); }); -}); +}); \ No newline at end of file diff --git a/plugins/aws/ec2/subnetAutoAssignPublicIp.js b/plugins/aws/ec2/subnetAutoAssignPublicIp.js new file mode 100644 index 000000000..8157aae44 --- /dev/null +++ b/plugins/aws/ec2/subnetAutoAssignPublicIp.js @@ -0,0 +1,58 @@ +var async = require('async'); +var helpers = require('../../../helpers/aws'); + +module.exports = { + title: 'VPC Subnet Auto-Assign Public IP Disabled', + category: 'EC2', + domain: 'Compute', + severity: 'Medium', + description: 'Ensure VPC subnets do not have auto-assign public IP enabled by default.', + more_info: 'Subnets with auto-assign public IP enabled automatically assign public IP addresses to any EC2 instance launched inside them. This increases the threat surface and the risk of unintentional internet exposure for private instances.', + recommended_action: 'Modify the subnet settings to disable the auto-assign public IP option.', + link: 'https://docs.aws.amazon.com/vpc/latest/userguide/vpc-ip-addressing.html#subnet-public-ip', + apis: ['EC2:describeSubnets'], + realtime_triggers: ['ec2:CreateSubnet', 'ec2:ModifySubnetAttribute'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var regions = helpers.regions(settings); + + async.each(regions.ec2, function(region, rcb) { // using standard EC2 regions mapped under regions loop + var describeSubnets = helpers.addSource(cache, source, + ['ec2', 'describeSubnets', region]); + + if (!describeSubnets) return rcb(); + + if (describeSubnets.err) { + helpers.addResult(results, 3, + 'Unable to query subnets: ' + helpers.addError(describeSubnets), region); + return rcb(); + } + + if (!describeSubnets.data || !describeSubnets.data.length) { + helpers.addResult(results, 0, 'No subnets found', region); + return rcb(); + } + + describeSubnets.data.forEach(function(subnet) { + var subnetId = subnet.SubnetId; + var subnetArn = subnet.SubnetArn || subnetId; + + if (subnet.MapPublicIpOnLaunch) { + helpers.addResult(results, 2, + 'Subnet: ' + subnetId + ' has auto-assign public IP enabled', + region, subnetArn); + } else { + helpers.addResult(results, 0, + 'Subnet: ' + subnetId + ' has auto-assign public IP disabled', + region, subnetArn); + } + }); + + rcb(); + }, function() { + callback(null, results, source); + }); + } +}; diff --git a/plugins/aws/ec2/subnetAutoAssignPublicIp.spec.js b/plugins/aws/ec2/subnetAutoAssignPublicIp.spec.js new file mode 100644 index 000000000..86a598268 --- /dev/null +++ b/plugins/aws/ec2/subnetAutoAssignPublicIp.spec.js @@ -0,0 +1,101 @@ +const expect = require('chai').expect; +var subnetAutoAssignPublicIp = require('./subnetAutoAssignPublicIp'); + +const subnets = [ + { + "SubnetId": "subnet-0123456789abcdef0", + "SubnetArn": "arn:aws:ec2:us-east-1:000011112222:subnet/subnet-0123456789abcdef0", + "MapPublicIpOnLaunch": false + }, + { + "SubnetId": "subnet-0123456789abcdef1", + "SubnetArn": "arn:aws:ec2:us-east-1:000011112222:subnet/subnet-0123456789abcdef1", + "MapPublicIpOnLaunch": true + } +]; + +const createCache = (subnetsList) => { + return { + ec2: { + describeSubnets: { + 'us-east-1': { + data: subnetsList + } + } + } + }; +}; + +const createErrorCache = () => { + return { + ec2: { + describeSubnets: { + 'us-east-1': { + err: { message: 'error listing subnets' } + } + } + } + }; +}; + +const createNullCache = () => { + return { + ec2: { + describeSubnets: { + 'us-east-1': null + } + } + }; +}; + +describe('subnetAutoAssignPublicIp', function () { + describe('run', function () { + + it('should PASS if subnet does not have auto-assign public IP enabled', function (done) { + const cache = createCache([subnets[0]]); + subnetAutoAssignPublicIp.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('has auto-assign public IP disabled'); + done(); + }); + }); + + it('should FAIL if subnet has auto-assign public IP enabled', function (done) { + const cache = createCache([subnets[1]]); + subnetAutoAssignPublicIp.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('has auto-assign public IP enabled'); + done(); + }); + }); + + it('should PASS if no subnets are found', function (done) { + const cache = createCache([]); + subnetAutoAssignPublicIp.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('No subnets found'); + done(); + }); + }); + + it('should UNKNOWN if querying subnets fails', function (done) { + const cache = createErrorCache(); + subnetAutoAssignPublicIp.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + done(); + }); + }); + + it('should not return anything if response cache is null', function (done) { + const cache = createNullCache(); + subnetAutoAssignPublicIp.run(cache, {}, (err, results) => { + expect(results.length).to.equal(0); + done(); + }); + }); + }); +}); diff --git a/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.js b/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.js new file mode 100644 index 000000000..4e18191e9 --- /dev/null +++ b/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.js @@ -0,0 +1,129 @@ +var async = require('async'); +var helpers = require('../../../helpers/aws'); + +module.exports = { + title: 'VPC Peering Least Access Routes', + category: 'EC2', + domain: 'Compute', + severity: 'Medium', + description: 'Ensures routing tables for VPC peering are least access.', + more_info: 'Routing traffic to the entire peered VPC exposes all resources in that network. VPC peering routes should only allow access to the subnets that are actually needed.', + link: 'https://docs.aws.amazon.com/vpc/latest/peering/vpc-peering-routing.html', + recommended_action: 'Replace broad VPC peering routes with more specific destination CIDR blocks', + apis: ['EC2:describeRouteTables', 'EC2:describeVpcPeeringConnections', 'STS:getCallerIdentity'], + realtime_triggers: ['ec2:CreateRoute', 'ec2:ReplaceRoute', 'ec2:DeleteRoute', 'ec2:CreateVpcPeeringConnection', 'ec2:DeleteVpcPeeringConnection'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + + var regions = helpers.regions(settings); + var acctRegion = helpers.defaultRegion(settings); + var awsOrGov = helpers.defaultPartition(settings); + var accountId = helpers.addSource(cache, source, ['sts', 'getCallerIdentity', acctRegion, 'data']); + + async.each(regions.ec2, function(region, rcb) { + var describeRouteTables = helpers.addSource(cache, source, ['ec2', 'describeRouteTables', region]); + var describeVpcPeeringConnections = helpers.addSource(cache, source, ['ec2', 'describeVpcPeeringConnections', region]); + + if (!describeRouteTables || !describeVpcPeeringConnections) return rcb(); + + if (describeRouteTables.err || !describeRouteTables.data) { + helpers.addResult(results, 3, + 'Unable to query for route tables: ' + helpers.addError(describeRouteTables), region); + return rcb(); + } + + if (describeVpcPeeringConnections.err || !describeVpcPeeringConnections.data) { + helpers.addResult(results, 3, + 'Unable to query for VPC peering connections: ' + helpers.addError(describeVpcPeeringConnections), region); + return rcb(); + } + + var peeringById = {}; + describeVpcPeeringConnections.data.forEach(function(peering) { + peeringById[peering.VpcPeeringConnectionId] = peering; + }); + + var peeringRouteTables = 0; + + describeRouteTables.data.forEach(function(routeTable) { + var peeringRoutes = getPeeringRoutes(routeTable.Routes); + if (!peeringRoutes.length) return; + + peeringRouteTables++; + var resource = `arn:${awsOrGov}:ec2:${region}:${accountId}:route-table/${routeTable.RouteTableId}`; + var violations = []; + + peeringRoutes.forEach(function(route) { + var peeringId = route.VpcPeeringConnectionId || route.GatewayId; + var peerCidrs = getPeerCidrs(peeringById[peeringId], routeTable.VpcId); + var destinations = []; + + if (route.DestinationCidrBlock) destinations.push(route.DestinationCidrBlock); + if (route.DestinationIpv6CidrBlock) destinations.push(route.DestinationIpv6CidrBlock); + + destinations.forEach(function(destination) { + if (peerCidrs.indexOf(destination.toLowerCase()) > -1) { + violations.push(`${destination} via ${peeringId}: routes full peer VPC CIDR`); + } + }); + }); + + if (violations.length) { + helpers.addResult(results, 2, + `Route table "${routeTable.RouteTableId}" has non-compliant VPC peering routes: ${violations.join('; ')}`, + region, resource); + } else { + helpers.addResult(results, 0, + `Route table "${routeTable.RouteTableId}" uses least-access VPC peering routes`, + region, resource); + } + }); + + if (!peeringRouteTables) { + helpers.addResult(results, 0, 'No VPC peering routes found', region); + } + + rcb(); + }, function() { + callback(null, results, source); + }); + } +}; + +function getPeeringRoutes(routes) { + if (!routes || !routes.length) return []; + + return routes.filter(function(route) { + return route.VpcPeeringConnectionId || + (route.GatewayId && route.GatewayId.indexOf('pcx-') === 0); + }); +} + +function getPeerCidrs(peering, localVpcId) { + var cidrs = []; + + if (!peering || !localVpcId) return cidrs; + + var requester = peering.RequesterVpcInfo || {}; + var accepter = peering.AccepterVpcInfo || {}; + var peerInfo; + + if (requester.VpcId === localVpcId) peerInfo = accepter; + else if (accepter.VpcId === localVpcId) peerInfo = requester; + + if (!peerInfo) return cidrs; + + if (peerInfo.CidrBlock) cidrs.push(peerInfo.CidrBlock.toLowerCase()); + + if (peerInfo.CidrBlockSet && peerInfo.CidrBlockSet.length) { + peerInfo.CidrBlockSet.forEach(function(block) { + if (block.CidrBlock && cidrs.indexOf(block.CidrBlock.toLowerCase()) === -1) { + cidrs.push(block.CidrBlock.toLowerCase()); + } + }); + } + + return cidrs; +} \ No newline at end of file diff --git a/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.spec.js b/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.spec.js new file mode 100644 index 000000000..19ea9f12f --- /dev/null +++ b/plugins/aws/ec2/vpcPeeringLeastAccessRoutes.spec.js @@ -0,0 +1,185 @@ +var expect = require('chai').expect; +const vpcPeeringLeastAccessRoutes = require('./vpcPeeringLeastAccessRoutes'); + +const describeVpcPeeringConnections = [ + { + VpcPeeringConnectionId: 'pcx-abc123', + RequesterVpcInfo: { + VpcId: 'vpc-local', + CidrBlock: '10.0.0.0/16' + }, + AccepterVpcInfo: { + VpcId: 'vpc-peer', + CidrBlock: '10.1.0.0/16' + } + } +]; + +const describeRouteTables = [ + { + RouteTableId: 'rtb-1', + VpcId: 'vpc-local', + Routes: [ + { + DestinationCidrBlock: '0.0.0.0/0', + GatewayId: 'igw-123' + } + ] + }, + { + RouteTableId: 'rtb-1', + VpcId: 'vpc-local', + Routes: [ + { + DestinationCidrBlock: '10.1.0.0/16', + VpcPeeringConnectionId: 'pcx-abc123' + } + ] + }, + { + RouteTableId: 'rtb-1', + VpcId: 'vpc-local', + Routes: [ + { + DestinationCidrBlock: '10.1.2.0/24', + VpcPeeringConnectionId: 'pcx-abc123' + } + ] + }, + { + RouteTableId: 'rtb-1', + VpcId: 'vpc-local', + Routes: [ + { + DestinationCidrBlock: '10.1.2.5/32', + VpcPeeringConnectionId: 'pcx-abc123' + } + ] + } +]; + +const createCache = (routeTables, peerings) => { + return { + sts: { + getCallerIdentity: { + 'us-east-1': { + data: '111122223333' + } + } + }, + ec2: { + describeRouteTables: { + 'us-east-1': { + data: routeTables + }, + }, + describeVpcPeeringConnections: { + 'us-east-1': { + data: peerings + }, + }, + }, + }; +}; + +const createErrorCache = () => { + return { + ec2: { + describeRouteTables: { + 'us-east-1': { + err: { + message: 'error describing route tables' + }, + }, + }, + describeVpcPeeringConnections: { + 'us-east-1': { + data: [], + }, + }, + }, + }; +}; + +const createNullCache = () => { + return { + ec2: { + describeRouteTables: { + 'us-east-1': null, + }, + }, + }; +}; + +describe('vpcPeeringLeastAccessRoutes', function () { + describe('run', function () { + it('should PASS when no VPC peering routes exist', function (done) { + const cache = createCache([describeRouteTables[0]], describeVpcPeeringConnections); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should FAIL when peering route uses full peer VPC CIDR', function (done) { + const cache = createCache([describeRouteTables[1]], describeVpcPeeringConnections); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + done(); + }); + }); + + it('should PASS when peering route is more specific than peer VPC CIDR', function (done) { + const cache = createCache([describeRouteTables[2]], describeVpcPeeringConnections); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should PASS when peering route targets a single host', function (done) { + const cache = createCache([describeRouteTables[3]], describeVpcPeeringConnections); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should PASS if no route tables found', function (done) { + const cache = createCache([], describeVpcPeeringConnections); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should UNKNOWN if unable to query for route tables', function (done) { + const cache = createErrorCache(); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + done(); + }); + }); + + it('should not return any results if describe route tables response not found', function (done) { + const cache = createNullCache(); + + vpcPeeringLeastAccessRoutes.run(cache, {}, (err, results) => { + expect(results.length).to.equal(0); + done(); + }); + }); + }); +}); \ No newline at end of file diff --git a/plugins/aws/eks/eksKubernetesVersion.js b/plugins/aws/eks/eksKubernetesVersion.js index 26d362c82..d0cce48c2 100644 --- a/plugins/aws/eks/eksKubernetesVersion.js +++ b/plugins/aws/eks/eksKubernetesVersion.js @@ -45,7 +45,9 @@ module.exports = { '1.29': '2025-03-23', '1.30': '2025-07-23', '1.31': '2025-11-26', - '1.32': '2026-03-23' + '1.32': '2026-03-23', + '1.33': '2027-03-23', + '1.34': '2028-03-23' }; var outdatedVersions = { diff --git a/plugins/aws/eks/eksKubernetesVersion.spec.js b/plugins/aws/eks/eksKubernetesVersion.spec.js index 3d36ed45d..1329ce925 100644 --- a/plugins/aws/eks/eksKubernetesVersion.spec.js +++ b/plugins/aws/eks/eksKubernetesVersion.spec.js @@ -82,7 +82,7 @@ describe('eksKubernetesVersion', function () { "cluster": { "name": "mycluster", "arn": "arn:aws:eks:us-east-1:012345678911:cluster/mycluster", - "version": "1.32", + "version": "1.34", } } ); diff --git a/plugins/aws/eks/eksPrivilegeAnalysis.js b/plugins/aws/eks/eksPrivilegeAnalysis.js index 4550ef04d..682ed5e59 100644 --- a/plugins/aws/eks/eksPrivilegeAnalysis.js +++ b/plugins/aws/eks/eksPrivilegeAnalysis.js @@ -9,6 +9,7 @@ module.exports = { link: 'https://docs.aws.amazon.com/eks/latest/userguide/cluster-endpoint.html', recommended_action: 'Audit the IAM roles and policies associated with your EKS cluster. Restrict access to the minimum necessary permissions and configure security groups and endpoint access control appropriately.', realtime_triggers: ['eks:CreateCluster', 'eks:updateClusterConfig', 'eks:DeleteCluster'], + apis: [], run: function(cache, settings, callback) { var results = []; diff --git a/plugins/aws/iam/cloudShellFullAccess.js b/plugins/aws/iam/cloudShellFullAccess.js new file mode 100644 index 000000000..64a6921f9 --- /dev/null +++ b/plugins/aws/iam/cloudShellFullAccess.js @@ -0,0 +1,100 @@ +var helpers = require('../../../helpers/aws'); + +module.exports = { + title: 'CloudShell Full Access Restricted', + category: 'IAM', + domain: 'Identity and Access Management', + severity: 'High', + description: 'Ensures that access to AWSCloudShellFullAccess is restricted.', + more_info: 'Access to the AWSCloudShellFullAccess policy should be restricted, as it presents a potential channel for data exfiltration by privileged users.', + link: 'https://docs.aws.amazon.com/cloudshell/latest/userguide/sec-auth-with-identities.html', + recommended_action: 'Detach the AWSCloudShellFullAccess policy from all IAM users, groups, and roles, and replace with a more restrictive policy if CloudShell access is required.', + apis: ['IAM:listUsers', 'IAM:listAttachedUserPolicies', 'IAM:listGroups', + 'IAM:listAttachedGroupPolicies', 'IAM:listRoles', 'IAM:listAttachedRolePolicies'], + realtime_triggers: ['iam:AttachUserPolicy', 'iam:DetachUserPolicy', 'iam:AttachGroupPolicy', 'iam:DetachGroupPolicy', 'iam:AttachRolePolicy', 'iam:DetachRolePolicy'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var region = helpers.defaultRegion(settings); + var awsOrGov = helpers.defaultPartition(settings); + var cloudShellPolicyArn = `arn:${awsOrGov}:iam::aws:policy/AWSCloudShellFullAccess`; + + function isPolicyAttached(attachedPolicies) { + return attachedPolicies && attachedPolicies.some(p => p.PolicyArn === cloudShellPolicyArn); + } + + // Check users + var listUsers = helpers.addSource(cache, source, ['iam', 'listUsers', region]); + + if (!listUsers) return callback(null, results, source); + + if (listUsers.err || !listUsers.data) { + helpers.addResult(results, 3, + 'Unable to query for IAM users: ' + helpers.addError(listUsers)); + return callback(null, results, source); + } + + for (var user of listUsers.data) { + if (!user.UserName) continue; + + var listAttachedUserPolicies = helpers.addSource(cache, source, + ['iam', 'listAttachedUserPolicies', region, user.UserName]); + + if (!listAttachedUserPolicies || listAttachedUserPolicies.err) continue; + + if (isPolicyAttached(listAttachedUserPolicies.data && listAttachedUserPolicies.data.AttachedPolicies)) { + helpers.addResult(results, 2, + 'AWSCloudShellFullAccess policy is attached to user: ' + user.UserName, + 'global', user.Arn); + } + } + + // Check groups + var listGroups = helpers.addSource(cache, source, ['iam', 'listGroups', region]); + + if (listGroups && !listGroups.err && listGroups.data) { + for (var group of listGroups.data) { + if (!group.GroupName) continue; + + var listAttachedGroupPolicies = helpers.addSource(cache, source, + ['iam', 'listAttachedGroupPolicies', region, group.GroupName]); + + if (!listAttachedGroupPolicies || listAttachedGroupPolicies.err) continue; + + if (isPolicyAttached(listAttachedGroupPolicies.data && listAttachedGroupPolicies.data.AttachedPolicies)) { + helpers.addResult(results, 2, + 'AWSCloudShellFullAccess policy is attached to group: ' + group.GroupName, + 'global', group.Arn); + } + } + } + + // Check roles + var listRoles = helpers.addSource(cache, source, ['iam', 'listRoles', region]); + + if (listRoles && !listRoles.err && listRoles.data) { + for (var role of listRoles.data) { + if (!role.RoleName) continue; + + var listAttachedRolePolicies = helpers.addSource(cache, source, + ['iam', 'listAttachedRolePolicies', region, role.RoleName]); + + if (!listAttachedRolePolicies || listAttachedRolePolicies.err) continue; + + if (isPolicyAttached(listAttachedRolePolicies.data && listAttachedRolePolicies.data.AttachedPolicies)) { + helpers.addResult(results, 2, + 'AWSCloudShellFullAccess policy is attached to role: ' + role.RoleName, + 'global', role.Arn); + } + } + } + + if (!results.length) { + helpers.addResult(results, 0, + 'AWSCloudShellFullAccess policy is not attached to any user, group, or role', 'global'); + } + + callback(null, results, source); + } +}; \ No newline at end of file diff --git a/plugins/aws/iam/cloudShellFullAccess.spec.js b/plugins/aws/iam/cloudShellFullAccess.spec.js new file mode 100644 index 000000000..64a2bd712 --- /dev/null +++ b/plugins/aws/iam/cloudShellFullAccess.spec.js @@ -0,0 +1,252 @@ +var expect = require('chai').expect; +const cloudShellFullAccess = require('./cloudShellFullAccess'); + +const cloudShellPolicyArn = 'arn:aws:iam::aws:policy/AWSCloudShellFullAccess'; +const otherPolicyArn = 'arn:aws:iam::aws:policy/ReadOnlyAccess'; + +const listUsers = [ + { + 'Path': '/', + 'UserName': 'dev-user', + 'UserId': 'AIDAYE32SRU57PAYVNPEI', + 'Arn': 'arn:aws:iam::111111111111:user/dev-user', + 'CreateDate': '2020-09-12T16:58:32Z' + } +]; + +const listGroups = [ + { + 'Path': '/', + 'GroupName': 'dev-group', + 'GroupId': 'AGPAYE32SRU5WTVWZJGNX', + 'Arn': 'arn:aws:iam::111111111111:group/dev-group', + 'CreateDate': '2020-08-30T14:24:48.000Z' + } +]; + +const listRoles = [ + { + 'Path': '/', + 'RoleName': 'dev-role', + 'RoleId': 'AROAYE32SRU5VIMXXL3BH', + 'Arn': 'arn:aws:iam::111111111111:role/dev-role', + 'CreateDate': '2020-11-21T23:56:33Z' + } +]; + +const listAttachedUserPolicies = [ + { + 'AttachedPolicies': [ + { + 'PolicyName': 'ReadOnlyAccess', + 'PolicyArn': otherPolicyArn + } + ] + }, + { + 'AttachedPolicies': [ + { + 'PolicyName': 'AWSCloudShellFullAccess', + 'PolicyArn': cloudShellPolicyArn + } + ] + }, + { + 'AttachedPolicies': [] + } +]; + +const listAttachedGroupPolicies = [ + { + 'AttachedPolicies': [] + }, + { + 'AttachedPolicies': [ + { + 'PolicyName': 'AWSCloudShellFullAccess', + 'PolicyArn': cloudShellPolicyArn + } + ] + } +]; + +const listAttachedRolePolicies = [ + { + 'AttachedPolicies': [] + }, + { + 'AttachedPolicies': [ + { + 'PolicyName': 'AWSCloudShellFullAccess', + 'PolicyArn': cloudShellPolicyArn + } + ] + } +]; + +const createCache = (users, attachedUserPolicies, groups, attachedGroupPolicies, roles, attachedRolePolicies) => { + var username = (users && users.length) ? users[0].UserName : null; + var groupName = (groups && groups.length) ? groups[0].GroupName : null; + var roleName = (roles && roles.length) ? roles[0].RoleName : null; + + return { + iam: { + listUsers: { + 'us-east-1': { + data: users + }, + }, + listAttachedUserPolicies: { + 'us-east-1': { + [username]: { + data: attachedUserPolicies + }, + }, + }, + listGroups: { + 'us-east-1': { + data: groups, + }, + }, + listAttachedGroupPolicies: { + 'us-east-1': { + [groupName]: { + data: attachedGroupPolicies + }, + }, + }, + listRoles: { + 'us-east-1': { + data: roles, + }, + }, + listAttachedRolePolicies: { + 'us-east-1': { + [roleName]: { + data: attachedRolePolicies + }, + }, + }, + }, + }; +}; + +const createErrorCache = () => { + return { + iam: { + listUsers: { + 'us-east-1': { + err: { + message: 'error listing IAM users' + } + } + } + } + }; +}; + +const createNullCache = () => { + return { + iam: { + listUsers: { + 'us-east-1': null + } + } + }; +}; + +describe('cloudShellFullAccess', function () { + describe('run', function () { + it('should PASS if AWSCloudShellFullAccess is not attached to any entity', function (done) { + const cache = createCache( + [listUsers[0]], listAttachedUserPolicies[0], + [listGroups[0]], listAttachedGroupPolicies[0], + [listRoles[0]], listAttachedRolePolicies[0] + ); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should PASS if no entities exist', function (done) { + const cache = createCache([], null, [], null, [], null); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should FAIL if AWSCloudShellFullAccess is attached to a user', function (done) { + const cache = createCache( + [listUsers[0]], listAttachedUserPolicies[1], + [], null, [], null + ); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('user: dev-user'); + done(); + }); + }); + + it('should FAIL if AWSCloudShellFullAccess is attached to a group', function (done) { + const cache = createCache( + [], null, + [listGroups[0]], listAttachedGroupPolicies[1], + [], null + ); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('group: dev-group'); + done(); + }); + }); + + it('should FAIL if AWSCloudShellFullAccess is attached to a role', function (done) { + const cache = createCache( + [], null, [], null, + [listRoles[0]], listAttachedRolePolicies[1] + ); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('role: dev-role'); + done(); + }); + }); + + it('should FAIL if AWSCloudShellFullAccess is attached to multiple entities', function (done) { + const cache = createCache( + [listUsers[0]], listAttachedUserPolicies[1], + [listGroups[0]], listAttachedGroupPolicies[1], + [listRoles[0]], listAttachedRolePolicies[1] + ); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(3); + results.forEach(r => expect(r.status).to.equal(2)); + done(); + }); + }); + + it('should UNKNOWN if unable to query for IAM users', function (done) { + const cache = createErrorCache(); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + done(); + }); + }); + + it('should not return any results if unable to query for IAM users', function (done) { + const cache = createNullCache(); + cloudShellFullAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(0); + done(); + }); + }); + }); +}); \ No newline at end of file diff --git a/plugins/aws/lambda/lambdaEnvSecrets.js b/plugins/aws/lambda/lambdaEnvSecrets.js new file mode 100644 index 000000000..5a9c6fa7b --- /dev/null +++ b/plugins/aws/lambda/lambdaEnvSecrets.js @@ -0,0 +1,112 @@ +var async = require('async'); +var helpers = require('../../../helpers/aws'); + +module.exports = { + title: 'Lambda Environment Secrets', + category: 'Lambda', + domain: 'Compute', + severity: 'High', + description: 'Ensure Lambda function environment variables do not contain plaintext secrets or credentials.', + more_info: 'Storing sensitive credentials like API keys, database passwords, or private keys in plaintext environment variables exposes them to anyone with read access to the Lambda function and increases the risk of credential theft.', + recommended_action: 'Store sensitive values in AWS Secrets Manager or Systems Manager Parameter Store, and reference them securely.', + link: 'https://docs.aws.amazon.com/lambda/latest/dg/configuration-envvars.html#configuration-envvars-encryption', + apis: ['Lambda:listFunctions'], + realtime_triggers: ['lambda:CreateFunction', 'lambda:UpdateFunctionConfiguration'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var regions = helpers.regions(settings); + + const secretRegexes = [ + /AKIA[0-9A-Z]{16}/, // AWS Access Key ID + /-----BEGIN[ A-Z0-9_]*PRIVATE KEY-----/, // Private Key block + /^(mongodb(\+srv)?|postgres|mysql|redis):\/\//i // DB connection URIs + ]; + + function isPlaintextSecret(name, value) { + if (typeof value !== 'string') return false; + + // Check regex patterns first + for (let regex of secretRegexes) { + if (regex.test(value)) return true; + } + + // Check if variable name indicates a secret and value length/pattern is suspicious + const nameLower = name.toLowerCase(); + if (nameLower.includes('password') || + nameLower.includes('secret') || + nameLower.includes('pwd') || + nameLower.includes('token') || + nameLower.includes('credential') || + nameLower.includes('api_key') || + nameLower.includes('apikey') || + nameLower.includes('auth')) { + + // Exclude placeholders, KMS ciphertexts, SSM/Secrets Manager references + if (value.startsWith('arn:aws:secretsmanager:') || + value.startsWith('arn:aws:ssm:') || + value.startsWith('{{resolve:secretsmanager:') || + value.startsWith('{{resolve:ssm:') || + value.startsWith('AQICAH') || // AWS KMS encrypted ciphertext + value.toLowerCase().includes('placeholder') || + value.toLowerCase().includes('dummy') || + value.toLowerCase().includes('mock') || + value.toLowerCase().includes('test-') || + value.length < 8) { + return false; + } + return true; + } + return false; + } + + async.each(regions.lambda, function(region, rcb) { + var listFunctions = helpers.addSource(cache, source, + ['lambda', 'listFunctions', region]); + + if (!listFunctions) return rcb(); + + if (listFunctions.err) { + helpers.addResult(results, 3, + 'Unable to query Lambda functions: ' + helpers.addError(listFunctions), region); + return rcb(); + } + + if (!listFunctions.data || !listFunctions.data.length) { + helpers.addResult(results, 0, 'No Lambda functions found', region); + return rcb(); + } + + listFunctions.data.forEach(function(fn) { + var functionArn = fn.FunctionArn; + var hasSecrets = false; + var exposedVars = []; + + if (fn.Environment && fn.Environment.Variables) { + for (var key in fn.Environment.Variables) { + var val = fn.Environment.Variables[key]; + if (isPlaintextSecret(key, val)) { + hasSecrets = true; + exposedVars.push(key); + } + } + } + + if (hasSecrets) { + helpers.addResult(results, 2, + 'Lambda function environment variables contain plaintext secrets: ' + exposedVars.join(', '), + region, functionArn); + } else { + helpers.addResult(results, 0, + 'Lambda function environment variables do not contain plaintext secrets', + region, functionArn); + } + }); + + rcb(); + }, function() { + callback(null, results, source); + }); + } +}; diff --git a/plugins/aws/lambda/lambdaEnvSecrets.spec.js b/plugins/aws/lambda/lambdaEnvSecrets.spec.js new file mode 100644 index 000000000..3c83e7620 --- /dev/null +++ b/plugins/aws/lambda/lambdaEnvSecrets.spec.js @@ -0,0 +1,157 @@ +const expect = require('chai').expect; +var lambdaEnvSecrets = require('./lambdaEnvSecrets'); + +const listFunctions = [ + { + "FunctionName": "secure-lambda", + "FunctionArn": "arn:aws:lambda:us-east-1:000011112222:function:secure-lambda", + "Environment": { + "Variables": { + "DATABASE_URL": "arn:aws:secretsmanager:us-east-1:000011112222:secret:db", + "API_KEY": "AQICAHgYvhTIHqe+Awrx6K5feBosORFD4FbhQ/XEyM9ERVB+yAF+yJdS1QYRvl9adezS+RnyAAAAaDBm", // KMS ciphertext + "DEBUG": "true", + "PORT": "8080" + } + } + }, + { + "FunctionName": "vulnerable-lambda-aws-key", + "FunctionArn": "arn:aws:lambda:us-east-1:000011112222:function:vulnerable-lambda-aws-key", + "Environment": { + "Variables": { + "AWS_ACCESS_KEY_ID": "AKIAIOSFODNN7EXAMPLE", // Plaintext AWS Key + "ENV": "production" + } + } + }, + { + "FunctionName": "vulnerable-lambda-db-uri", + "FunctionArn": "arn:aws:lambda:us-east-1:000011112222:function:vulnerable-lambda-db-uri", + "Environment": { + "Variables": { + "DB_CONNECTION": "mongodb://user:pass@localhost:27017/prod" // Plaintext DB URI + } + } + }, + { + "FunctionName": "vulnerable-lambda-custom-secret", + "FunctionArn": "arn:aws:lambda:us-east-1:000011112222:function:vulnerable-lambda-custom-secret", + "Environment": { + "Variables": { + "GITHUB_SECRET_TOKEN": "my-extremely-sensitive-github-token-123456" // Plaintext token + } + } + }, + { + "FunctionName": "no-env-lambda", + "FunctionArn": "arn:aws:lambda:us-east-1:000011112222:function:no-env-lambda" + } +]; + +const createCache = (listFunctions) => { + return { + lambda: { + listFunctions: { + 'us-east-1': { + data: listFunctions + } + } + } + }; +}; + +const createErrorCache = () => { + return { + lambda: { + listFunctions: { + 'us-east-1': { + err: { + message: 'error listing Lambda functions' + } + } + } + } + }; +}; + +const createNullCache = () => { + return { + lambda: { + listFunctions: { + 'us-east-1': null + } + } + }; +}; + +describe('lambdaEnvSecrets', function () { + describe('run', function () { + + it('should PASS if function environment variables do not contain plaintext secrets', function (done) { + const cache = createCache([listFunctions[0], listFunctions[4]]); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(2); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('do not contain plaintext secrets'); + expect(results[1].status).to.equal(0); + done(); + }); + }); + + it('should FAIL if function environment variables contain plaintext AWS Access Key ID', function (done) { + const cache = createCache([listFunctions[1]]); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('contain plaintext secrets: AWS_ACCESS_KEY_ID'); + done(); + }); + }); + + it('should FAIL if function environment variables contain plaintext Database URI', function (done) { + const cache = createCache([listFunctions[2]]); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('contain plaintext secrets: DB_CONNECTION'); + done(); + }); + }); + + it('should FAIL if function environment variables contain plaintext Custom Secret Token', function (done) { + const cache = createCache([listFunctions[3]]); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('contain plaintext secrets: GITHUB_SECRET_TOKEN'); + done(); + }); + }); + + it('should PASS if no functions are found', function (done) { + const cache = createCache([]); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + done(); + }); + }); + + it('should UNKNOWN if listing functions fails', function (done) { + const cache = createErrorCache(); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + done(); + }); + }); + + it('should not return anything if response cache is null', function (done) { + const cache = createNullCache(); + lambdaEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(0); + done(); + }); + }); + }); +}); diff --git a/plugins/aws/lambda/lambdaPrivilegeAnalysis.js b/plugins/aws/lambda/lambdaPrivilegeAnalysis.js index 783ff52f6..5de658afd 100644 --- a/plugins/aws/lambda/lambdaPrivilegeAnalysis.js +++ b/plugins/aws/lambda/lambdaPrivilegeAnalysis.js @@ -8,6 +8,7 @@ module.exports = { link: 'https://docs.aws.amazon.com/lambda/latest/dg/lambda-permissions.html', recommended_action: 'Modify IAM role attached with Lambda function to provide the minimal amount of access required to perform its tasks', realtime_triggers: ['lambda:CreateFunction','lambda:UpdateFunctionConfiguration', 'lambda:DeleteFunction'], + apis: [], run: function(cache, settings, callback) { var results = []; diff --git a/plugins/aws/s3/s3Encryption.js b/plugins/aws/s3/s3Encryption.js index 35ebea1df..823680cac 100644 --- a/plugins/aws/s3/s3Encryption.js +++ b/plugins/aws/s3/s3Encryption.js @@ -1,4 +1,4 @@ -var minimatch = require('minimatch'); +var { minimatch } = require('minimatch'); var helpers = require('../../../helpers/aws'); const encryptionLevelMap = { diff --git a/plugins/azure/appservice/appServicePublicAccess.js b/plugins/azure/appservice/appServicePublicAccess.js index 246ca91c2..8c873cbe2 100644 --- a/plugins/azure/appservice/appServicePublicAccess.js +++ b/plugins/azure/appservice/appServicePublicAccess.js @@ -50,14 +50,37 @@ module.exports = { var config = webConfigs.data[0]; - if (config.publicNetworkAccess && config.publicNetworkAccess.toLowerCase() === 'disabled') { + if (config.publicNetworkAccess && + config.publicNetworkAccess.toLowerCase() === 'disabled') { helpers.addResult(results, 0, 'App Service has public network access disabled', location, webApp.id); + return; } else { - helpers.addResult(results, 2, - 'App Service does not have public network access disabled', - location, webApp.id); + let hasOpenCidr = false; + + if (config.ipSecurityRestrictions && config.ipSecurityRestrictions.length) { + for (let rule of config.ipSecurityRestrictions) { + if (helpers.isOpenCidrRange(rule.ipAddress)) { + hasOpenCidr = true; + break; + } + } + } + + const restricted = + config.ipSecurityRestrictionsDefaultAction && + config.ipSecurityRestrictionsDefaultAction.toLowerCase() === 'deny' && !hasOpenCidr; + + if (restricted) { + helpers.addResult(results, 0, + 'App Service has public network access disabled', + location, webApp.id); + } else { + helpers.addResult(results, 2, + 'App Service does not have public network access disabled', + location, webApp.id); + } } }); diff --git a/plugins/azure/appservice/appServicePublicAccess.spec.js b/plugins/azure/appservice/appServicePublicAccess.spec.js index cd732733d..f7a516822 100644 --- a/plugins/azure/appservice/appServicePublicAccess.spec.js +++ b/plugins/azure/appservice/appServicePublicAccess.spec.js @@ -147,5 +147,51 @@ describe('appServicePublicAccess', function () { done(); }); }); + + it('should give passing result if public access is enabled but restricted by IP restrictions', function (done) { + const config = [{ + 'id': '/subscriptions/123/resourceGroups/test-rg/providers/Microsoft.Web/sites/test-app-1/config/web', + 'name': 'web', + 'publicNetworkAccess': 'Enabled', + 'ipSecurityRestrictionsDefaultAction': 'Deny', + 'ipSecurityRestrictions': [ + { + 'ipAddress': '1.2.3.4/32', + 'action': 'Allow' + } + ] + }]; + const cache = createCache([webApps[0]], config); + appServicePublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('App Service has public network access disabled'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give failing result if public access is enabled and IP restrictions allow open range', function (done) { + const config = [{ + 'id': '/subscriptions/123/resourceGroups/test-rg/providers/Microsoft.Web/sites/test-app-1/config/web', + 'name': 'web', + 'publicNetworkAccess': 'Enabled', + 'ipSecurityRestrictionsDefaultAction': 'Deny', + 'ipSecurityRestrictions': [ + { + 'ipAddress': '0.0.0.0/0', + 'action': 'Allow' + } + ] + }]; + const cache = createCache([webApps[0]], config); + appServicePublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('App Service does not have public network access disabled'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); }); }); \ No newline at end of file diff --git a/plugins/azure/appservice/functionAppNetworkExposure.js b/plugins/azure/appservice/functionAppNetworkExposure.js index 77fec5e94..8cc0e4069 100644 --- a/plugins/azure/appservice/functionAppNetworkExposure.js +++ b/plugins/azure/appservice/functionAppNetworkExposure.js @@ -57,7 +57,7 @@ module.exports = { for (let functionApp of webApps.data) { let internetExposed = ''; - if (functionApp.publicNetworkAccess && functionApp.publicNetworkAccess === 'Enabled') { + if (functionApp.publicNetworkAccess && functionApp.publicNetworkAccess.toLowerCase() === 'enabled') { internetExposed = 'public network access'; } else { let attachedResources = { diff --git a/plugins/azure/appservice/functionPrivilegeAnalysis.js b/plugins/azure/appservice/functionPrivilegeAnalysis.js index b796354f4..8e68a23d5 100644 --- a/plugins/azure/appservice/functionPrivilegeAnalysis.js +++ b/plugins/azure/appservice/functionPrivilegeAnalysis.js @@ -4,9 +4,10 @@ module.exports = { domain: 'Web Apps', severity: 'Info', description: 'Ensures that no Azure Functions in your environment have excessive permissions.', - more_info: 'Azure Functions that use managed identities or service principals with excessive Azure AD permissions may pose security risks. It is a best practice to assign only the necessary permissions to the identities attached to functions.', + more_info: 'Azure Function Apps that use managed identities with excessive Azure AD permissions may pose security risks. It is a best practice to assign only the necessary permissions to the managed identities attached to function apps.', link: 'https://docs.microsoft.com/en-us/azure/app-service/overview-managed-identity', - recommended_action: 'Review and restrict the Azure AD roles associated with managed identities used by Azure Functions to follow the principle of least privilege.', + recommended_action: 'Review and restrict the Azure AD roles associated with managed identities used by function apps to follow the principle of least privilege.', + apis: [], realtime_triggers: [ 'Microsoft.Web/sites/write', 'Microsoft.Web/sites/delete', diff --git a/plugins/azure/eventGrid/domainPublicAccess.js b/plugins/azure/eventGrid/domainPublicAccess.js index 3db87c8cc..fedfed66b 100644 --- a/plugins/azure/eventGrid/domainPublicAccess.js +++ b/plugins/azure/eventGrid/domainPublicAccess.js @@ -39,7 +39,21 @@ module.exports = { if (!domain.id) continue; if (domain.publicNetworkAccess && domain.publicNetworkAccess.toLowerCase() === 'enabled') { - helpers.addResult(results, 2, 'Event Grid domain has public network access enabled', location, domain.id); + let hasOpenCidr = false; + if (domain.properties && domain.properties.inboundIpRules && domain.properties.inboundIpRules.length) { + for (let rule of domain.properties.inboundIpRules) { + if (helpers.isOpenCidrRange(rule.ipMask)) { + hasOpenCidr = true; + break; + } + } + } + + if (domain.properties && domain.properties.inboundIpRules && domain.properties.inboundIpRules.length && !hasOpenCidr) { + helpers.addResult(results, 0, 'Event Grid domain has public network access enabled but restricted by IP rules', location, domain.id); + } else { + helpers.addResult(results, 2, 'Event Grid domain has public network access enabled', location, domain.id); + } } else { helpers.addResult(results, 0, 'Event Grid domain does not have public network access enabled', location, domain.id); } diff --git a/plugins/azure/eventGrid/domainPublicAccess.spec.js b/plugins/azure/eventGrid/domainPublicAccess.spec.js index fcd6be09d..f6f81b57d 100644 --- a/plugins/azure/eventGrid/domainPublicAccess.spec.js +++ b/plugins/azure/eventGrid/domainPublicAccess.spec.js @@ -21,6 +21,38 @@ const domains = [ "location": "westus2", "name": "exampledomain1", "publicNetworkAccess": "Disabled" + }, + { + "properties": { + "endpoint": "https://exampledomain1.westus2-1.eventgrid.azure.net/api/events", + "provisioningState": "Succeeded", + "inboundIpRules": [ + { + "ipMask": "1.2.3.4", + "action": "Allow" + } + ] + }, + "id": "/subscriptions/8f6b6269-84f2-4d09-9e31-1127efcd1e40/resourceGroups/examplerg/providers/Microsoft.EventGrid/domains/exampledomain3", + "location": "westus2", + "name": "exampledomain3", + "publicNetworkAccess": "Enabled" + }, + { + "properties": { + "endpoint": "https://exampledomain1.westus2-1.eventgrid.azure.net/api/events", + "provisioningState": "Succeeded", + "inboundIpRules": [ + { + "ipMask": "0.0.0.0/0", + "action": "Allow" + } + ] + }, + "id": "/subscriptions/8f6b6269-84f2-4d09-9e31-1127efcd1e40/resourceGroups/examplerg/providers/Microsoft.EventGrid/domains/exampledomain4", + "location": "westus2", + "name": "exampledomain4", + "publicNetworkAccess": "Enabled" } ] const createCache = (data) => { @@ -80,5 +112,27 @@ describe("domainPublicAccess", function () { done(); }); }); + + it('should give passing result if public access is enabled but restricted by IP rules', function (done) { + const cache = createCache([domains[2]]); + domainPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include("Event Grid domain has public network access enabled but restricted by IP rules"); + expect(results[0].region).to.equal("eastus"); + done(); + }); + }); + + it('should give failing result if public access is enabled and inbound IP rules are wide open', function (done) { + const cache = createCache([domains[3]]); + domainPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include("Event Grid domain has public network access enabled"); + expect(results[0].region).to.equal("eastus"); + done(); + }); + }); }); }); diff --git a/plugins/azure/eventhub/eventHubPublicAccess.js b/plugins/azure/eventhub/eventHubPublicAccess.js index 7b0717b8f..f09f5a613 100644 --- a/plugins/azure/eventhub/eventHubPublicAccess.js +++ b/plugins/azure/eventhub/eventHubPublicAccess.js @@ -61,7 +61,18 @@ module.exports = { 'Unable to query Event Hubs network rule set: ' + helpers.addError(listNetworkRuleSet), location, eventHub.id); continue; } - if ((listNetworkRuleSet.data.ipRules && listNetworkRuleSet.data.ipRules.length > 0) || (listNetworkRuleSet.data.virtualNetworkRules && listNetworkRuleSet.data.virtualNetworkRules.length > 0)) { + let hasOpenCidr = false; + if (listNetworkRuleSet.data.ipRules && listNetworkRuleSet.data.ipRules.length) { + for (let rule of listNetworkRuleSet.data.ipRules) { + if (helpers.isOpenCidrRange(rule.ipMask)) { + hasOpenCidr = true; + break; + } + } + } + + if ((listNetworkRuleSet.data.ipRules && listNetworkRuleSet.data.ipRules.length > 0 && !hasOpenCidr) || + (listNetworkRuleSet.data.virtualNetworkRules && listNetworkRuleSet.data.virtualNetworkRules.length > 0)) { helpers.addResult(results, 0, 'Event Hubs namespace is not publicly accessible', location, eventHub.id); } else { diff --git a/plugins/azure/eventhub/eventHubPublicAccess.spec.js b/plugins/azure/eventhub/eventHubPublicAccess.spec.js index 0043cddfb..4444582e5 100644 --- a/plugins/azure/eventhub/eventHubPublicAccess.spec.js +++ b/plugins/azure/eventhub/eventHubPublicAccess.spec.js @@ -145,6 +145,21 @@ const networkRuleSets = [ ipRules: [ ], }, + { + id: "/subscriptions/123/resourceGroups/test-rg/providers/Microsoft.EventHub/namespaces/testHub/networkrulesets/default", + name: "default", + type: "Microsoft.EventHub/Namespaces/NetworkRuleSets", + location: "eastus", + publicNetworkAccess: "Enabled", + defaultAction: "Allow", + virtualNetworkRules: [], + ipRules: [ + { + ipMask: "0.0.0.0/0", + action: "Allow", + }, + ], + }, ]; const createCache = (eventHub, networkRuleSet) => { @@ -348,5 +363,24 @@ describe("eventHubPublicAccess", function () { eventHubPublicAccess.run(cache, {}, callback); }); + it("should give failing result when check_selected_networks is enabled but IP rules allow open range", function (done) { + const callback = (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include( + "Event Hubs namespace is publicly accessible" + ); + expect(results[0].region).to.equal("eastus"); + done(); + }; + + const cache = createCache([eventHubs[3]], networkRuleSets[3]); + eventHubPublicAccess.run( + cache, + { check_selected_networks: true }, + callback + ); + }); + }); }); diff --git a/plugins/azure/keyvaults/keyVaultPublicAccess.js b/plugins/azure/keyvaults/keyVaultPublicAccess.js index 1e0459769..22037c110 100644 --- a/plugins/azure/keyvaults/keyVaultPublicAccess.js +++ b/plugins/azure/keyvaults/keyVaultPublicAccess.js @@ -88,7 +88,7 @@ module.exports = { hasPublicAccess = true; publicAccessFound.push(rule.value); } - } else if (rule.value === '0.0.0.0/0' || rule.value === '0.0.0.0') { + } else if (helpers.isOpenCidrRange(rule.value)) { hasPublicAccess = true; publicAccessFound.push(rule.value); } diff --git a/plugins/azure/keyvaults/keyVaultPublicAccess.spec.js b/plugins/azure/keyvaults/keyVaultPublicAccess.spec.js index e79bdbee4..c9772c4d7 100644 --- a/plugins/azure/keyvaults/keyVaultPublicAccess.spec.js +++ b/plugins/azure/keyvaults/keyVaultPublicAccess.spec.js @@ -70,6 +70,20 @@ const vaults = [ ] } + }, + { + "id": "/subscriptions/123/resourceGroups/test/providers/Microsoft.KeyVault/vaults/test8", + "name": "test8", + "type": "Microsoft.KeyVault/vaults", + "publicNetworkAccess": "Enabled", + "networkAcls": { + "defaultAction": "Deny", + "ipRules": [ + { + "value": "::/0" + } + ] + } } ]; @@ -188,5 +202,16 @@ describe('keyVaultPublicAccess', function () { done(); }); }); + + it('should give failing result if IPv6 public access is allowed', function (done) { + const cache = createCache([vaults[6]]); // the 7th element (index 6) has the open ::/0 rule + keyVaultPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('Key Vault is open to outside traffic through IP rules: ::/0'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); }); }); \ No newline at end of file diff --git a/plugins/azure/kubernetesservice/aksPrivilegeAnalysis.js b/plugins/azure/kubernetesservice/aksPrivilegeAnalysis.js index 4206e57c8..0508fc397 100644 --- a/plugins/azure/kubernetesservice/aksPrivilegeAnalysis.js +++ b/plugins/azure/kubernetesservice/aksPrivilegeAnalysis.js @@ -4,9 +4,10 @@ module.exports = { domain: 'Containers', severity: 'Info', description: 'Ensures that AKS clusters and workloads are not granted excessive permissions.', - more_info: 'AKS clusters often use managed identities to interact with Azure resources. Over-privileged identities can lead to privilege escalation or lateral movement within the cluster or the Azure environment. Following the principle of least privilege helps minimize potential attack surfaces.', - link: 'https://docs.microsoft.com/en-us/azure/aks/use-managed-identity', - recommended_action: 'Review and minimize Azure AD permissions granted to AKS managed identities and workload identities. Use Azure RBAC and Kubernetes RBAC best practices to ensure only required access is permitted.', + more_info: 'Azure Kubernetes Service (AKS) clusters that use service principals or managed identities with excessive Azure AD permissions may pose security risks. It is a best practice to assign only the necessary permissions to the service principals or managed identities used by AKS clusters.', + link: 'https://docs.microsoft.com/en-us/azure/aks/concepts-identity', + recommended_action: 'Review and restrict the Azure AD roles associated with service principals or managed identities used by AKS clusters to follow the principle of least privilege.', + apis: [], realtime_triggers: [ 'Microsoft.ContainerService/managedClusters/write', 'Microsoft.ContainerService/managedClusters/delete', diff --git a/plugins/azure/mysqlserver/mysqlFlexibleServerPublicAccess.js b/plugins/azure/mysqlserver/mysqlFlexibleServerPublicAccess.js index 68d5f4d83..2fcc8d49b 100644 --- a/plugins/azure/mysqlserver/mysqlFlexibleServerPublicAccess.js +++ b/plugins/azure/mysqlserver/mysqlFlexibleServerPublicAccess.js @@ -80,7 +80,7 @@ module.exports = { if (startIpAddr && startIpAddr.toString().indexOf('0.0.0.0') > -1) { if (checkAllowedIps) { - if (endIpAddr && allowedIps.includes(endIpAddr.toString())) { + if (endIpAddr && !allowedIps.includes(endIpAddr.toString())) { publicAccess = true; } } else { diff --git a/plugins/azure/openai/accountPublicAccessDisabled.js b/plugins/azure/openai/accountPublicAccessDisabled.js index e5ab13c2c..008237e86 100644 --- a/plugins/azure/openai/accountPublicAccessDisabled.js +++ b/plugins/azure/openai/accountPublicAccessDisabled.js @@ -40,8 +40,30 @@ module.exports = { if (account.properties && account.properties.publicNetworkAccess && account.properties.publicNetworkAccess.toLowerCase() == 'enabled') { - helpers.addResult(results, 2, - 'OpenAI Account is publicly accessible', location, account.id); + let hasOpenCidr = false; + let hasDenyAction = false; + if (account.properties.networkAcls) { + const defaultAction = account.properties.networkAcls.defaultAction; + if (defaultAction && defaultAction.toLowerCase() === 'deny') { + hasDenyAction = true; + if (account.properties.networkAcls.ipRules && account.properties.networkAcls.ipRules.length) { + for (let rule of account.properties.networkAcls.ipRules) { + if (helpers.isOpenCidrRange(rule.value)) { + hasOpenCidr = true; + break; + } + } + } + } + } + + if (hasDenyAction && !hasOpenCidr) { + helpers.addResult(results, 0, + 'OpenAI Account has public network access enabled but restricted by IP rules', location, account.id); + } else { + helpers.addResult(results, 2, + 'OpenAI Account is publicly accessible', location, account.id); + } } else { helpers.addResult(results, 0, 'OpenAI Account is not publicly accessible', location, account.id); diff --git a/plugins/azure/openai/accountPublicAccessDisabled.spec.js b/plugins/azure/openai/accountPublicAccessDisabled.spec.js index 28c74f3ea..33b590ece 100644 --- a/plugins/azure/openai/accountPublicAccessDisabled.spec.js +++ b/plugins/azure/openai/accountPublicAccessDisabled.spec.js @@ -20,8 +20,40 @@ const accounts = [ "publicNetworkAccess": 'Enabled' } }, - - + { + "id": "/subscriptions/12424/resourceGroups/bvttest/providers/Microsoft.CognitiveServices/accounts/acc3", + "name": "acc3", + "type": "Microsoft.CognitiveServices/accounts", + "location": "eastus", + "properties": { + "publicNetworkAccess": 'Enabled', + "networkAcls": { + "defaultAction": "Deny", + "ipRules": [ + { + "value": "1.2.3.4" + } + ] + } + } + }, + { + "id": "/subscriptions/12424/resourceGroups/bvttest/providers/Microsoft.CognitiveServices/accounts/acc4", + "name": "acc4", + "type": "Microsoft.CognitiveServices/accounts", + "location": "eastus", + "properties": { + "publicNetworkAccess": 'Enabled', + "networkAcls": { + "defaultAction": "Deny", + "ipRules": [ + { + "value": "0.0.0.0/0" + } + ] + } + } + } ]; const createCache = (accounts) => { @@ -93,5 +125,26 @@ describe('accountPublicAccessDisabled', function() { }); }); + it('should give passing result if openai account public access is enabled but restricted by IP rules', function(done) { + const cache = createCache([accounts[2]]); + accountPublicAccessDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('OpenAI Account has public network access enabled but restricted by IP rules'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give failing result if openai account public access is enabled and allows open IP range', function(done) { + const cache = createCache([accounts[3]]); + accountPublicAccessDisabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('OpenAI Account is publicly accessible'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); }); }); \ No newline at end of file diff --git a/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.js b/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.js index 4e8f89633..085a259db 100644 --- a/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.js +++ b/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.js @@ -76,7 +76,7 @@ module.exports = { if (startIpAddr && startIpAddr.toString().indexOf('0.0.0.0') > -1) { if (checkAllowedIps) { - if (endIpAddr && allowedIps.includes(endIpAddr.toString())) { + if (endIpAddr && !allowedIps.includes(endIpAddr.toString())) { publicAccess = true; } } else { diff --git a/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.spec.js b/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.spec.js index e8a9ab94b..9ad8224d9 100644 --- a/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.spec.js +++ b/plugins/azure/postgresqlserver/postgresqlServerPublicAccess.spec.js @@ -269,11 +269,11 @@ describe('postgresqlServerPublicAccess', function() { postgresqlServerPublicAccess.run(cache, {}, callback); }); - it('should give failing result if server has firewall rule with customer defined IP as end address', function(done) { + it('should give passing result if server has firewall rule with customer defined IP as end address', function(done) { const callback = (err, results) => { expect(results.length).to.equal(1); - expect(results[0].status).to.equal(2); - expect(results[0].message).to.include('The PostgreSQL server is open to outside traffic'); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('The PostgreSQL server is protected from outside traffic'); expect(results[0].region).to.equal('eastus'); done(); }; @@ -282,11 +282,11 @@ describe('postgresqlServerPublicAccess', function() { postgresqlServerPublicAccess.run(cache, {postgresql_server_allowed_ips: '10.0.0.1'}, callback); }); - it('should give passing result if server has firewall rule with customer defined IP but not matching allowed IPs', function(done) { + it('should give failing result if server has firewall rule with customer defined IP but not matching allowed IPs', function(done) { const callback = (err, results) => { expect(results.length).to.equal(1); - expect(results[0].status).to.equal(0); - expect(results[0].message).to.include('The PostgreSQL server is protected from outside traffic'); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('The PostgreSQL server is open to outside traffic'); expect(results[0].region).to.equal('eastus'); done(); }; diff --git a/plugins/azure/servicebus/namespacePublicAccess.js b/plugins/azure/servicebus/namespacePublicAccess.js index dcf210591..77b17643c 100644 --- a/plugins/azure/servicebus/namespacePublicAccess.js +++ b/plugins/azure/servicebus/namespacePublicAccess.js @@ -10,7 +10,15 @@ module.exports = { more_info: 'Using private endpoints for Azure Service Bus namespace improve security by enabling private network access, encrypting communication, and enhancing performance. They seamlessly integrate with virtual networks, ensuring compliance and suitability for hybrid cloud scenarios.', recommended_action: 'Ensure that Azure Service Bus namespaces are only accessible through private endpoints.', link: 'https://learn.microsoft.com/en-us/azure/service-bus-messaging/private-link-service', - apis: ['serviceBus:listNamespacesBySubscription'], + apis: ['serviceBus:listNamespacesBySubscription', 'serviceBus:getNamespaceNetworkRuleSet'], + settings: { + check_selected_networks: { + name: 'Evaluate Selected Networks', + description: 'Checks if specific IP addresses or virtual networks are set to restrict Service Bus access.', + regex: '^(true|false)$', + default: 'false', + } + }, realtime_triggers: ['microsoftservicebus:namespaces:write','microsoftservicebus:namespaces:delete'], run: function(cache, settings, callback) { @@ -18,13 +26,17 @@ module.exports = { const source = {}; const locations = helpers.locations(settings.govcloud); + var config = { + check_selected_networks: settings.check_selected_networks || this.settings.check_selected_networks.default + }; + var checkSelectedNetworks = (config.check_selected_networks === 'true' || config.check_selected_networks === true); + async.each(locations.serviceBus, function(location, rcb) { const namespaces = helpers.addSource(cache, source, ['serviceBus', 'listNamespacesBySubscription', location]); if (!namespaces) return rcb(); - if (namespaces.err || !namespaces.data) { helpers.addResult(results, 3, 'Unable to query Service Bus namespaces: ' + helpers.addError(namespaces), location); return rcb(); @@ -36,10 +48,40 @@ module.exports = { } for (let namespace of namespaces.data) { + if (!namespace.id) continue; + if (namespace.sku && namespace.sku.tier && namespace.sku.tier.toLowerCase() !== 'premium') { helpers.addResult(results, 0, 'Service Bus Namespace is not a premium namespace', location, namespace.id); } else if (namespace.publicNetworkAccess && namespace.publicNetworkAccess.toLowerCase() === 'enabled') { - helpers.addResult(results, 2, 'Service bus namespace is publicly accessible', location, namespace.id); + if (checkSelectedNetworks) { + const getNetworkRuleSet = helpers.addSource(cache, source, + ['serviceBus', 'getNamespaceNetworkRuleSet', location, namespace.id]); + + if (!getNetworkRuleSet || getNetworkRuleSet.err || !getNetworkRuleSet.data) { + helpers.addResult(results, 3, + 'Unable to query Service Bus network rule set: ' + helpers.addError(getNetworkRuleSet), location, namespace.id); + continue; + } + + let hasOpenCidr = false; + if (getNetworkRuleSet.data.ipRules && getNetworkRuleSet.data.ipRules.length) { + for (let rule of getNetworkRuleSet.data.ipRules) { + if (helpers.isOpenCidrRange(rule.ipMask)) { + hasOpenCidr = true; + break; + } + } + } + + if ((getNetworkRuleSet.data.ipRules && getNetworkRuleSet.data.ipRules.length > 0 && !hasOpenCidr) || + (getNetworkRuleSet.data.virtualNetworkRules && getNetworkRuleSet.data.virtualNetworkRules.length > 0)) { + helpers.addResult(results, 0, 'Service bus namespace is not publicly accessible', location, namespace.id); + } else { + helpers.addResult(results, 2, 'Service bus namespace is publicly accessible', location, namespace.id); + } + } else { + helpers.addResult(results, 2, 'Service bus namespace is publicly accessible', location, namespace.id); + } } else { helpers.addResult(results, 0, 'Service bus namespace is only accessible through private endpoints', location, namespace.id); } diff --git a/plugins/azure/servicebus/namespacePublicAccess.spec.js b/plugins/azure/servicebus/namespacePublicAccess.spec.js index 4caed1c4e..50745ef42 100644 --- a/plugins/azure/servicebus/namespacePublicAccess.spec.js +++ b/plugins/azure/servicebus/namespacePublicAccess.spec.js @@ -22,16 +22,12 @@ const namespaces = [ publicNetworkAccess: 'Disabled', disableLocalAuth: true, provisioningState: 'Succeeded', - status: 'Active', - encryption: { - keySource: 'Microsoft.KeyVault', - requireInfrastructureEncryption: false - }, + status: 'Active' }, { sku: { name: 'Basic', tier: 'Basic' }, id: '/subscriptions/234/myrg/providers/Microsoft.ServiceBus/namespaces/test3', - name: 'test2', + name: 'test3', type: 'Microsoft.ServiceBus/Namespaces', location: 'East US', publicNetworkAccess: 'Enabled', @@ -41,19 +37,31 @@ const namespaces = [ }, ]; - -const createCache = (namespaces, err) => { - - return { +const createCache = (namespaces, networkRuleSet, err, rulesSetErr) => { + const cache = { serviceBus: { listNamespacesBySubscription: { 'eastus': { data: namespaces, err: err } + }, + getNamespaceNetworkRuleSet: { + 'eastus': {} } } }; + + if (namespaces && namespaces.length && networkRuleSet) { + namespaces.forEach(ns => { + cache.serviceBus.getNamespaceNetworkRuleSet.eastus[ns.id] = { + data: networkRuleSet, + err: rulesSetErr || null + }; + }); + } + + return cache; }; describe('namespacePublicAccess', function () { @@ -71,7 +79,7 @@ describe('namespacePublicAccess', function () { }); it('should give unknown result if unable to query for Service Bus namespaces', function (done) { - const cache = createCache(null, ['error']); + const cache = createCache(null, null, ['error']); namespacePublicAccess.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); expect(results[0].status).to.equal(3); @@ -81,7 +89,6 @@ describe('namespacePublicAccess', function () { }); }); - it('should give passing result if namespace is not using premium tier', function (done) { const cache = createCache([namespaces[2]], null); namespacePublicAccess.run(cache, {}, (err, results) => { @@ -93,7 +100,7 @@ describe('namespacePublicAccess', function () { }); }); - it('should give passing result if namespace is not publicly accessible', function (done) { + it('should give passing result if namespace is not publicly accessible (Disabled)', function (done) { const cache = createCache([namespaces[1]], null); namespacePublicAccess.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); @@ -104,7 +111,7 @@ describe('namespacePublicAccess', function () { }); }); - it('should give failing result if namespace is publicly accessible', function (done) { + it('should give failing result if namespace is publicly accessible (Enabled) and check_selected_networks is false', function (done) { const cache = createCache([namespaces[0]], null); namespacePublicAccess.run(cache, {}, (err, results) => { expect(results.length).to.equal(1); @@ -114,5 +121,47 @@ describe('namespacePublicAccess', function () { done(); }); }); + + it('should give passing result if namespace is enabled but restricted by firewall IP rules', function (done) { + const cache = createCache([namespaces[0]], { + ipRules: [{ ipMask: '1.2.3.4', action: 'Allow' }], + virtualNetworkRules: [] + }); + namespacePublicAccess.run(cache, { check_selected_networks: 'true' }, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('Service bus namespace is not publicly accessible'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give failing result if namespace is enabled but IP rules allow open range', function (done) { + const cache = createCache([namespaces[0]], { + ipRules: [{ ipMask: '0.0.0.0/0', action: 'Allow' }], + virtualNetworkRules: [] + }); + namespacePublicAccess.run(cache, { check_selected_networks: 'true' }, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('Service bus namespace is publicly accessible'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); + + it('should give passing result if namespace is enabled but restricted by virtual network rules', function (done) { + const cache = createCache([namespaces[0]], { + ipRules: [], + virtualNetworkRules: [{ subnet: { id: 'subnet-1' }, ignoreMissingVnetServiceEndpoint: false }] + }); + namespacePublicAccess.run(cache, { check_selected_networks: 'true' }, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('Service bus namespace is not publicly accessible'); + expect(results[0].region).to.equal('eastus'); + done(); + }); + }); }); }); \ No newline at end of file diff --git a/plugins/azure/sqlserver/noPublicAccess.js b/plugins/azure/sqlserver/noPublicAccess.js index 63b253096..79827199d 100644 --- a/plugins/azure/sqlserver/noPublicAccess.js +++ b/plugins/azure/sqlserver/noPublicAccess.js @@ -51,7 +51,7 @@ module.exports = { servers.data.forEach(function(server) { - if (server.publicNetworkAccess && server.publicNetworkAccess === 'Disabled') { + if (server.publicNetworkAccess && server.publicNetworkAccess.toLowerCase() === 'disabled') { helpers.addResult(results, 0, 'The SQL server has public network access disabled', location, server.id); } else { diff --git a/plugins/azure/virtualmachines/vmPrivilegeAnalysis.js b/plugins/azure/virtualmachines/vmPrivilegeAnalysis.js index 55fd81db0..db59b8589 100644 --- a/plugins/azure/virtualmachines/vmPrivilegeAnalysis.js +++ b/plugins/azure/virtualmachines/vmPrivilegeAnalysis.js @@ -7,6 +7,7 @@ module.exports = { more_info: 'Virtual machines that use managed identities with excessive Azure AD permissions may pose security risks. It is a best practice to assign only the necessary permissions to the managed identities attached to virtual machines.', link: 'https://docs.microsoft.com/en-us/azure/active-directory/managed-identities-azure-resources/how-to-use-vm-token', recommended_action: 'Review and restrict the Azure AD roles associated with managed identities used by virtual machines to follow the principle of least privilege.', + apis: [], realtime_triggers: [ 'Microsoft.Compute/virtualMachines/write', 'Microsoft.Compute/virtualMachines/delete', diff --git a/plugins/github/repos/repoPublicAccess.js b/plugins/github/repos/repoPublicAccess.js new file mode 100644 index 000000000..222a0df2a --- /dev/null +++ b/plugins/github/repos/repoPublicAccess.js @@ -0,0 +1,50 @@ +var async = require('async'); +var helpers = require('../../../helpers/github'); + +module.exports = { + title: 'Repository Public Access', + category: 'Repos', + domain: 'Integrations', + severity: 'Medium', + description: 'Ensure repositories containing sensitive or proprietary code are not publicly accessible.', + more_info: 'Public repositories can be viewed and cloned by anyone on the internet. Proprietary, sensitive, or internal codebases should be set to private to prevent unauthorized intellectual property exposure.', + recommended_action: 'Change the repository visibility to Private in the Repository Settings under the Danger Zone.', + link: 'https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/managing-repository-settings/setting-repository-visibility', + apis: ['apps:listRepos'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var custom = helpers.isCustom(settings, this.settings); + + var listRepos = helpers.addSource(cache, source, + ['apps', 'listRepos']); + + if (!listRepos || !listRepos.data || listRepos.err) { + helpers.addResult(results, 3, + 'Unable to query for repositories: ' + helpers.addError(listRepos)); + return callback(null, results, source); + } + + if (!listRepos.data.length) { + helpers.addResult(results, 0, 'No repositories found.'); + return callback(null, results, source); + } + + listRepos.data.forEach(function(repo) { + var resource = helpers.getResource(repo); + + if (repo.private === false || repo.visibility === 'public') { + helpers.addResult(results, 2, + 'Repository: ' + repo.full_name + ' is publicly accessible', + 'global', resource, custom); + } else { + helpers.addResult(results, 0, + 'Repository: ' + repo.full_name + ' is private', + 'global', resource, custom); + } + }); + + return callback(null, results, source); + } +}; diff --git a/plugins/github/repos/repoPublicAccess.spec.js b/plugins/github/repos/repoPublicAccess.spec.js new file mode 100644 index 000000000..1de9be408 --- /dev/null +++ b/plugins/github/repos/repoPublicAccess.spec.js @@ -0,0 +1,83 @@ +const expect = require('chai').expect; +var repoPublicAccess = require('./repoPublicAccess'); + +const listRepos = [ + { + "id": 100001, + "name": "public-repo", + "full_name": "my-org/public-repo", + "private": false, + "html_url": "https://github.com/my-org/public-repo" + }, + { + "id": 100002, + "name": "private-repo", + "full_name": "my-org/private-repo", + "private": true, + "html_url": "https://github.com/my-org/private-repo" + } +]; + +const createCache = (repos) => { + return { + apps: { + listRepos: { + data: repos + } + } + }; +}; + +const createErrorCache = () => { + return { + apps: { + listRepos: { + err: { message: 'error listing repos' } + } + } + }; +}; + +describe('repoPublicAccess', function () { + describe('run', function () { + + it('should FAIL if repository is public', function (done) { + const cache = createCache([listRepos[0]]); + repoPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('is publicly accessible'); + done(); + }); + }); + + it('should PASS if repository is private', function (done) { + const cache = createCache([listRepos[1]]); + repoPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('is private'); + done(); + }); + }); + + it('should PASS if no repositories are found', function (done) { + const cache = createCache([]); + repoPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('No repositories found'); + done(); + }); + }); + + it('should UNKNOWN if listing repositories fails', function (done) { + const cache = createErrorCache(); + repoPublicAccess.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + done(); + }); + }); + }); +}); diff --git a/plugins/github/repos/secretScanningEnabled.js b/plugins/github/repos/secretScanningEnabled.js new file mode 100644 index 000000000..32c48f523 --- /dev/null +++ b/plugins/github/repos/secretScanningEnabled.js @@ -0,0 +1,57 @@ +var async = require('async'); +var helpers = require('../../../helpers/github'); + +module.exports = { + title: 'Secret Scanning Enabled', + category: 'Repos', + domain: 'Integrations', + severity: 'High', + description: 'Ensure Advanced Security Secret Scanning is enabled for GitHub repositories.', + more_info: 'GitHub Secret Scanning detects secrets and credentials (like API keys, passwords, and tokens) leaked in your repository history, preventing unauthorized access to your environments.', + recommended_action: 'Enable Secret Scanning in the Repository Settings under Security & Analysis.', + link: 'https://docs.github.com/en/code-security/secret-scanning/about-secret-scanning', + apis: ['apps:listRepos'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var custom = helpers.isCustom(settings, this.settings); + + var listRepos = helpers.addSource(cache, source, + ['apps', 'listRepos']); + + if (!listRepos || !listRepos.data || listRepos.err) { + helpers.addResult(results, 3, + 'Unable to query for repositories: ' + helpers.addError(listRepos)); + return callback(null, results, source); + } + + if (!listRepos.data.length) { + helpers.addResult(results, 0, 'No repositories found.'); + return callback(null, results, source); + } + + listRepos.data.forEach(function(repo) { + var resource = helpers.getResource(repo); + + if (repo.private === false) { + // Public repositories have secret scanning enabled by default on GitHub + helpers.addResult(results, 0, + 'Secret scanning is enabled by default for public repository: ' + repo.full_name, + 'global', resource, custom); + } else if (repo.security_and_analysis && + repo.security_and_analysis.secret_scanning && + repo.security_and_analysis.secret_scanning.status === 'enabled') { + helpers.addResult(results, 0, + 'Secret scanning is enabled for repository: ' + repo.full_name, + 'global', resource, custom); + } else { + helpers.addResult(results, 2, + 'Secret scanning is disabled for repository: ' + repo.full_name, + 'global', resource, custom); + } + }); + + return callback(null, results, source); + } +}; diff --git a/plugins/github/repos/secretScanningEnabled.spec.js b/plugins/github/repos/secretScanningEnabled.spec.js new file mode 100644 index 000000000..0449f4bde --- /dev/null +++ b/plugins/github/repos/secretScanningEnabled.spec.js @@ -0,0 +1,110 @@ +const expect = require('chai').expect; +var secretScanningEnabled = require('./secretScanningEnabled'); + +const listRepos = [ + { + "id": 100001, + "name": "public-repo", + "full_name": "my-org/public-repo", + "private": false, + "html_url": "https://github.com/my-org/public-repo" + }, + { + "id": 100002, + "name": "secure-private-repo", + "full_name": "my-org/secure-private-repo", + "private": true, + "html_url": "https://github.com/my-org/secure-private-repo", + "security_and_analysis": { + "secret_scanning": { + "status": "enabled" + } + } + }, + { + "id": 100003, + "name": "vulnerable-private-repo", + "full_name": "my-org/vulnerable-private-repo", + "private": true, + "html_url": "https://github.com/my-org/vulnerable-private-repo", + "security_and_analysis": { + "secret_scanning": { + "status": "disabled" + } + } + } +]; + +const createCache = (repos) => { + return { + apps: { + listRepos: { + data: repos + } + } + }; +}; + +const createErrorCache = () => { + return { + apps: { + listRepos: { + err: { message: 'error listing repos' } + } + } + }; +}; + +describe('secretScanningEnabled', function () { + describe('run', function () { + + it('should PASS if repository is public (enabled by default)', function (done) { + const cache = createCache([listRepos[0]]); + secretScanningEnabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('Secret scanning is enabled by default for public repository'); + done(); + }); + }); + + it('should PASS if private repository has secret scanning enabled', function (done) { + const cache = createCache([listRepos[1]]); + secretScanningEnabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('Secret scanning is enabled for repository'); + done(); + }); + }); + + it('should FAIL if private repository has secret scanning disabled', function (done) { + const cache = createCache([listRepos[2]]); + secretScanningEnabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('Secret scanning is disabled for repository'); + done(); + }); + }); + + it('should PASS if no repositories are found', function (done) { + const cache = createCache([]); + secretScanningEnabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('No repositories found'); + done(); + }); + }); + + it('should UNKNOWN if listing repositories fails', function (done) { + const cache = createErrorCache(); + secretScanningEnabled.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(3); + done(); + }); + }); + }); +}); diff --git a/plugins/google/cloudfunctions/cfEnvSecrets.js b/plugins/google/cloudfunctions/cfEnvSecrets.js new file mode 100644 index 000000000..0341b8d75 --- /dev/null +++ b/plugins/google/cloudfunctions/cfEnvSecrets.js @@ -0,0 +1,163 @@ +var async = require('async'); +var helpers = require('../../../helpers/google'); + +module.exports = { + title: 'Cloud Function Environment Secrets', + category: 'Cloud Functions', + domain: 'Compute', + severity: 'High', + description: 'Ensure that Google Cloud Functions do not have plaintext secrets or credentials in their environment variables.', + more_info: 'Storing database passwords, private keys, API keys, or cloud credentials in plaintext environment variables is highly insecure, as anyone with read access to the function configuration can view them.', + recommended_action: 'Use Google Secret Manager to store secrets securely, and load them as mounted volumes or env variables at runtime.', + link: 'https://cloud.google.com/functions/docs/configuring/secrets', + apis: ['functions:list', 'functionsv2:list'], + realtime_triggers: ['functions.CloudFunctionsService.CreateFunction', 'functions.CloudFunctionsService.UpdateFunction'], + + run: function(cache, settings, callback) { + var results = []; + var source = {}; + var regions = helpers.regions(); + + const secretRegexes = [ + /AKIA[0-9A-Z]{16}/, // AWS Access Key ID + /-----BEGIN[ A-Z0-9_]*PRIVATE KEY-----/, // Private Key block + /^(mongodb(\+srv)?|postgres|mysql|redis):\/\//i // DB connection URIs + ]; + + function isPlaintextSecret(name, value) { + if (typeof value !== 'string') return false; + + // Check regex patterns first + for (let regex of secretRegexes) { + if (regex.test(value)) return true; + } + + // Check if variable name indicates a secret and value is suspicious + const nameLower = name.toLowerCase(); + if (nameLower.includes('password') || + nameLower.includes('secret') || + nameLower.includes('pwd') || + nameLower.includes('token') || + nameLower.includes('credential') || + nameLower.includes('api_key') || + nameLower.includes('apikey') || + nameLower.includes('auth')) { + + // Exclude references, placeholders, short values + if (value.startsWith('projects/') && value.includes('/secrets/') || // Google Secret Manager reference + value.toLowerCase().includes('placeholder') || + value.toLowerCase().includes('dummy') || + value.toLowerCase().includes('mock') || + value.toLowerCase().includes('test-') || + value.length < 8) { + return false; + } + return true; + } + return false; + } + + async.series([ + function(cb) { + // Scan Cloud Functions v1 + async.each(regions.functions, function(region, rcb) { + var functionsList = helpers.addSource(cache, source, + ['functions', 'list', region]); + + if (!functionsList) return rcb(); + + if (functionsList.err) { + helpers.addResult(results, 3, + 'Unable to query Cloud Functions (v1): ' + helpers.addError(functionsList), region); + return rcb(); + } + + if (!functionsList.data || !functionsList.data.length) { + return rcb(); + } + + functionsList.data.forEach(function(fn) { + if (!fn.name) return; + var hasSecrets = false; + var exposedVars = []; + + if (fn.environmentVariables) { + for (var key in fn.environmentVariables) { + var val = fn.environmentVariables[key]; + if (isPlaintextSecret(key, val)) { + hasSecrets = true; + exposedVars.push(key); + } + } + } + + if (hasSecrets) { + helpers.addResult(results, 2, + 'Cloud Function environment variables contain plaintext secrets: ' + exposedVars.join(', '), + region, fn.name); + } else { + helpers.addResult(results, 0, + 'Cloud Function environment variables do not contain plaintext secrets', + region, fn.name); + } + }); + + rcb(); + }, cb); + }, + function(cb) { + // Scan Cloud Functions v2 + async.each(regions.functions, function(region, rcb) { + var functionsV2List = helpers.addSource(cache, source, + ['functionsv2', 'list', region]); + + if (!functionsV2List) return rcb(); + + if (functionsV2List.err) { + helpers.addResult(results, 3, + 'Unable to query Cloud Functions (v2): ' + helpers.addError(functionsV2List), region); + return rcb(); + } + + if (!functionsV2List.data || !functionsV2List.data.length) { + return rcb(); + } + + functionsV2List.data.forEach(function(fn) { + if (!fn.name) return; + var hasSecrets = false; + var exposedVars = []; + + if (fn.serviceConfig && fn.serviceConfig.environmentVariables) { + for (var key in fn.serviceConfig.environmentVariables) { + var val = fn.serviceConfig.environmentVariables[key]; + if (isPlaintextSecret(key, val)) { + hasSecrets = true; + exposedVars.push(key); + } + } + } + + if (hasSecrets) { + helpers.addResult(results, 2, + 'Cloud Function (v2) environment variables contain plaintext secrets: ' + exposedVars.join(', '), + region, fn.name); + } else { + helpers.addResult(results, 0, + 'Cloud Function (v2) environment variables do not contain plaintext secrets', + region, fn.name); + } + }); + + rcb(); + }, cb); + } + ], function() { + // If no functions were found in both v1 and v2 across all scanned regions + if (!results.length) { + helpers.addResult(results, 0, 'No Google Cloud functions found', 'global'); + } + callback(null, results, source); + }); + } +}; diff --git a/plugins/google/cloudfunctions/cfEnvSecrets.spec.js b/plugins/google/cloudfunctions/cfEnvSecrets.spec.js new file mode 100644 index 000000000..95a9f5655 --- /dev/null +++ b/plugins/google/cloudfunctions/cfEnvSecrets.spec.js @@ -0,0 +1,132 @@ +const expect = require('chai').expect; +var cfEnvSecrets = require('./cfEnvSecrets'); + +const v1Functions = [ + { + "name": "projects/my-project/locations/us-central1/functions/secure-v1-fn", + "environmentVariables": { + "DB_PASS": "projects/my-project/secrets/db-pass/versions/latest", // Ref to secret manager + "PORT": "8080" + } + }, + { + "name": "projects/my-project/locations/us-central1/functions/vulnerable-v1-fn", + "environmentVariables": { + "DB_PASSWORD": "plaintext-super-secret-password-123" + } + } +]; + +const v2Functions = [ + { + "name": "projects/my-project/locations/us-central1/functions/secure-v2-fn", + "serviceConfig": { + "environmentVariables": { + "API_TOKEN": "projects/my-project/secrets/api-token/versions/latest" + } + } + }, + { + "name": "projects/my-project/locations/us-central1/functions/vulnerable-v2-fn", + "serviceConfig": { + "environmentVariables": { + "REDIS_URL": "redis://:authpassword@localhost:6379" + } + } + } +]; + +const createCache = (v1List, v2List) => { + return { + functions: { + list: { + 'us-central1': { + data: v1List + } + } + }, + functionsv2: { + list: { + 'us-central1': { + data: v2List + } + } + } + }; +}; + +const createErrorCache = () => { + return { + functions: { + list: { + 'us-central1': { + err: { message: 'error listing v1 functions' } + } + } + }, + functionsv2: { + list: { + 'us-central1': { + err: { message: 'error listing v2 functions' } + } + } + } + }; +}; + +describe('cfEnvSecrets', function () { + describe('run', function () { + + it('should PASS if v1 and v2 functions do not have plaintext secrets', function (done) { + const cache = createCache([v1Functions[0]], [v2Functions[0]]); + cfEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(2); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('do not contain plaintext secrets'); + expect(results[1].status).to.equal(0); + done(); + }); + }); + + it('should FAIL if v1 function has plaintext secrets', function (done) { + const cache = createCache([v1Functions[1]], [v2Functions[0]]); + cfEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(2); + expect(results[0].status).to.equal(2); + expect(results[0].message).to.include('contain plaintext secrets: DB_PASSWORD'); + expect(results[1].status).to.equal(0); + done(); + }); + }); + + it('should FAIL if v2 function has plaintext secrets', function (done) { + const cache = createCache([v1Functions[0]], [v2Functions[1]]); + cfEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(2); + expect(results[0].status).to.equal(0); + expect(results[1].status).to.equal(2); + expect(results[1].message).to.include('contain plaintext secrets: REDIS_URL'); + done(); + }); + }); + + it('should PASS if no functions found anywhere', function (done) { + const cache = createCache([], []); + cfEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.equal(1); + expect(results[0].status).to.equal(0); + expect(results[0].message).to.include('No Google Cloud functions found'); + done(); + }); + }); + + it('should UNKNOWN if listing functions fails', function (done) { + const cache = createErrorCache(); + cfEnvSecrets.run(cache, {}, (err, results) => { + expect(results.length).to.be.above(0); + expect(results[0].status).to.equal(3); + done(); + }); + }); + }); +}); diff --git a/plugins/google/cloudfunctions/cloudFunctionsPrivilegeAnalysis.js b/plugins/google/cloudfunctions/cloudFunctionsPrivilegeAnalysis.js index 53f5138e1..0d3c94ee8 100644 --- a/plugins/google/cloudfunctions/cloudFunctionsPrivilegeAnalysis.js +++ b/plugins/google/cloudfunctions/cloudFunctionsPrivilegeAnalysis.js @@ -7,6 +7,7 @@ module.exports = { more_info: 'Cloud Functions that use service accounts with excessive IAM permissions may pose security risks. It is a best practice to assign only the necessary permissions to the service accounts attached to functions.', link: 'https://cloud.google.com/functions/docs/securing/authenticating', recommended_action: 'Review and restrict the IAM roles associated with service accounts used by Cloud Functions to follow the principle of least privilege.', + apis: ['functions:list'], realtime_triggers: [ 'functions.CloudFunctionsService.UpdateFunction', 'functions.CloudFunctionsService.CreateFunction', diff --git a/plugins/google/compute/computePrivilegeAnalysis.js b/plugins/google/compute/computePrivilegeAnalysis.js index 42e3fce9c..1964c861c 100644 --- a/plugins/google/compute/computePrivilegeAnalysis.js +++ b/plugins/google/compute/computePrivilegeAnalysis.js @@ -4,10 +4,11 @@ module.exports = { domain: 'Compute', severity: 'Info', description: 'Ensures that no compute instances in your cloud has excessive permissions.', - more_info: 'Compute instances having service account attached with excessive permissions can lead to security risks. Compute instances should have restrictive permissions assigned through service accounts for security best practices.', - link: 'https://cloud.google.com/compute/docs/access/iam', - recommended_action: 'Make sure that compute instances are using service account with only required permissions.', - realtime_triggers: ['compute.instances.insert', 'compute.instances.delete'], + more_info: 'Compute Engine instances that use service accounts with excessive permissions may pose security risks. It is a best practice to assign only the necessary permissions to the service accounts attached to compute instances.', + link: 'https://cloud.google.com/compute/docs/access/service-accounts', + recommended_action: 'Review and restrict the IAM roles associated with service accounts used by Compute Engine instances to follow the principle of least privilege.', + apis: [], + realtime_triggers: ['compute.instances.insert', 'compute.instances.delete', 'compute.instances.setServiceAccount'], run: function(cache, settings, callback) { var results = []; diff --git a/plugins/google/kubernetes/kubernetesPrivilegeAnalysis.js b/plugins/google/kubernetes/kubernetesPrivilegeAnalysis.js index 9e6242672..90c3a7dbc 100644 --- a/plugins/google/kubernetes/kubernetesPrivilegeAnalysis.js +++ b/plugins/google/kubernetes/kubernetesPrivilegeAnalysis.js @@ -7,6 +7,7 @@ module.exports = { more_info: 'Kubernetes workloads often use service accounts to interact with the Kubernetes API and other GCP resources. Over-privileged service accounts can lead to privilege escalation or lateral movement within the cluster or the cloud environment. Following the principle of least privilege helps minimize potential attack surfaces.', link: 'https://cloud.google.com/kubernetes-engine/docs/how-to/iam', recommended_action: 'Review and minimize IAM permissions granted to Kubernetes service accounts and workload identities. Use role-based access control (RBAC) and GCP IAM best practices to ensure only required access is permitted.', + apis: [], realtime_triggers: [ 'container.projects.updateCluster', 'container.projects.createCluster', diff --git a/tests/sync.spec.js b/tests/sync.spec.js new file mode 100644 index 000000000..1dd363cfd --- /dev/null +++ b/tests/sync.spec.js @@ -0,0 +1,219 @@ +const assert = require('assert'); +const http = require('http'); +const url = require('url'); +const collectData = require('../helpers/shared.js'); + +describe('SaaS Sync Integration', function() { + let server; + let serverPort; + let receivedRequests = []; + + before(function(done) { + // Spawn a local mock SaaS sync HTTP server + server = http.createServer((req, res) => { + let body = ''; + req.on('data', chunk => { + body += chunk; + }); + req.on('end', () => { + receivedRequests.push({ + method: req.method, + url: req.url, + headers: req.headers, + body: body ? JSON.parse(body) : null + }); + + if (req.url === '/error') { + res.writeHead(500, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ error: 'Internal Server Error' })); + } else { + res.writeHead(200, { 'Content-Type': 'application/json' }); + res.end(JSON.stringify({ status: 'ok' })); + } + }); + }); + + server.listen(0, '127.0.0.1', () => { + serverPort = server.address().port; + console.log(`Mock SaaS Server listening on port ${serverPort}`); + done(); + }); + }); + + after(function(done) { + server.close(done); + }); + + beforeEach(function() { + receivedRequests = []; + }); + + it('should successfully deliver sync payload with custom headers', function(done) { + const saasKey = 'test-api-key-123'; + const saasUrl = `http://127.0.0.1:${serverPort}/api/v1/sync`; + const saasAccountId = 'test-gcp-project-123'; + + // Recreate the integration function exactly as defined in index.js + const settings = { + sync: true, + saas_key: saasKey, + saas_account_id: saasAccountId, + saas_url: saasUrl, + identifier: { + cloud_account_identifier: saasAccountId + } + }; + + settings.integration = function(localEvent, callback) { + const postData = JSON.stringify(localEvent); + const parsedUrl = url.parse(saasUrl); + const httpModule = parsedUrl.protocol === 'https:' ? require('https') : require('http'); + + const options = { + hostname: parsedUrl.hostname, + port: parsedUrl.port || 80, + path: parsedUrl.path, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Khulnasoft-Saas-Key': saasKey, + 'Authorization': `Bearer ${saasKey}`, + 'Content-Length': Buffer.byteLength(postData) + } + }; + + const req = httpModule.request(options, (res) => { + let data = ''; + res.on('data', (chunk) => { data += chunk; }); + res.on('end', () => { + assert.strictEqual(res.statusCode, 200); + callback(); + }); + }); + + req.on('error', (err) => { + callback(err); + }); + + req.write(postData); + req.end(); + }; + + // Construct mock collection data + const mockCollection = { + appservice: { + listwebapps: { + 'global': { + data: [{ id: 'app1', name: 'my-app' }] + } + } + } + }; + + const calls = { + AppService: { + listWebApps: { + property: 'value', + sendIntegration: { + enabled: true + } + } + } + }; + + // Invoke processIntegration to trigger the sync pipeline + collectData.processIntegration('AppService', settings, mockCollection, calls, [], false, function(err) { + if (err) return done(err); + + assert.strictEqual(receivedRequests.length, 1); + const reqObj = receivedRequests[0]; + + assert.strictEqual(reqObj.method, 'POST'); + assert.strictEqual(reqObj.url, '/api/v1/sync'); + assert.strictEqual(reqObj.headers['x-khulnasoft-saas-key'], saasKey); + assert.strictEqual(reqObj.headers['authorization'], `Bearer ${saasKey}`); + assert.strictEqual(reqObj.body.cloud_account_identifier, saasAccountId); + assert.deepStrictEqual(reqObj.body.collection.appservice, mockCollection.appservice); + done(); + }); + }); + + it('should handle API endpoint error response codes gracefully', function(done) { + const saasKey = 'test-api-key-err'; + const saasUrl = `http://127.0.0.1:${serverPort}/error`; + const saasAccountId = 'test-err-account'; + + const settings = { + sync: true, + saas_key: saasKey, + saas_account_id: saasAccountId, + saas_url: saasUrl, + identifier: { + cloud_account_identifier: saasAccountId + } + }; + + settings.integration = function(localEvent, callback) { + const postData = JSON.stringify(localEvent); + const parsedUrl = url.parse(saasUrl); + const httpModule = parsedUrl.protocol === 'https:' ? require('https') : require('http'); + + const options = { + hostname: parsedUrl.hostname, + port: parsedUrl.port || 80, + path: parsedUrl.path, + method: 'POST', + headers: { + 'Content-Type': 'application/json', + 'X-Khulnasoft-Saas-Key': saasKey, + 'Authorization': `Bearer ${saasKey}`, + 'Content-Length': Buffer.byteLength(postData) + } + }; + + const req = httpModule.request(options, (res) => { + let data = ''; + res.on('data', (chunk) => { data += chunk; }); + res.on('end', () => { + assert.strictEqual(res.statusCode, 500); + callback(); + }); + }); + + req.on('error', (err) => { + callback(err); + }); + + req.write(postData); + req.end(); + }; + + const mockCollection = { + appservice: { + listwebapps: { + 'global': { + data: [{ id: 'app1' }] + } + } + } + }; + + const calls = { + AppService: { + listWebApps: { + sendIntegration: { + enabled: true + } + } + } + }; + + collectData.processIntegration('AppService', settings, mockCollection, calls, [], false, function(err) { + if (err) return done(err); + + assert.strictEqual(receivedRequests.length, 1); + assert.strictEqual(receivedRequests[0].url, '/error'); + done(); + }); + }); +}); diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 000000000..2ffa637d0 --- /dev/null +++ b/yarn.lock @@ -0,0 +1,5741 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@alicloud/pop-core@^1.7.10": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@alicloud/pop-core/-/pop-core-1.8.0.tgz#df5d4ce581fd15f964c5e00afe3ad2e417ee47a4" + integrity sha512-ef6vIVigtr9n8Lw6Ld2GZ9jVUD0+ReHviaQaMqZDPI2HwdpVvrq1Rvn2tBnFToe0tdTpovz9N7XFSf/C274OtA== + dependencies: + debug "^3.1.0" + httpx "^2.1.2" + json-bigint "^1.0.0" + kitx "^1.2.1" + xml2js "^0.5.0" + +"@azure/abort-controller@^2.0.0", "@azure/abort-controller@^2.1.2": + version "2.1.2" + resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" + integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== + dependencies: + tslib "^2.6.2" + +"@azure/core-auth@^1.10.0", "@azure/core-auth@^1.9.0": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.10.1.tgz#68a17fa861ebd14f6fd314055798355ef6bedf1b" + integrity sha512-ykRMW8PjVAn+RS6ww5cmK9U2CyH9p4Q88YJwvUslfuMmN98w/2rdGRLPqJYObapBCdzBVeDgYWdJnFPFb7qzpg== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-util" "^1.13.0" + tslib "^2.6.2" + +"@azure/core-client@^1.9.2", "@azure/core-client@^1.9.3": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.10.1.tgz#83d78f97d647ab22e6811a7a68bb4223e7a1d019" + integrity sha512-Nh5PhEOeY6PrnxNPsEHRr9eimxLwgLlpmguQaHKBinFYA/RU9+kOYVOQqOrTsCL+KSxrLLl1gD8Dk5BFW/7l/w== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.10.0" + "@azure/core-rest-pipeline" "^1.22.0" + "@azure/core-tracing" "^1.3.0" + "@azure/core-util" "^1.13.0" + "@azure/logger" "^1.3.0" + tslib "^2.6.2" + +"@azure/core-http-compat@^2.0.0", "@azure/core-http-compat@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@azure/core-http-compat/-/core-http-compat-2.4.0.tgz#28322f317eb46d625d7d18bb0eb02c2654f5de1b" + integrity sha512-f1P96IB399YiN2ARYHP7EpZi3Bf3wH4SN2lGzrw7JVwm7bbsVYtf2iKSBwTywD2P62NOPZGHFSZi+6jjb75JuA== + dependencies: + "@azure/abort-controller" "^2.1.2" + +"@azure/core-lro@^2.2.0": + version "2.7.2" + resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.7.2.tgz#787105027a20e45c77651a98b01a4d3b01b75a08" + integrity sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw== + dependencies: + "@azure/abort-controller" "^2.0.0" + "@azure/core-util" "^1.2.0" + "@azure/logger" "^1.0.0" + tslib "^2.6.2" + +"@azure/core-paging@^1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7" + integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA== + dependencies: + tslib "^2.6.2" + +"@azure/core-rest-pipeline@^1.19.0", "@azure/core-rest-pipeline@^1.19.1", "@azure/core-rest-pipeline@^1.22.0": + version "1.23.0" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.23.0.tgz#35f16e1c180ca9545c260ac124b751be1da9c08c" + integrity sha512-Evs1INHo+jUjwHi1T6SG6Ua/LHOQBCLuKEEE6efIpt4ZOoNonaT1kP32GoOcdNDbfqsD2445CPri3MubBy5DEQ== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.10.0" + "@azure/core-tracing" "^1.3.0" + "@azure/core-util" "^1.13.0" + "@azure/logger" "^1.3.0" + "@typespec/ts-http-runtime" "^0.3.4" + tslib "^2.6.2" + +"@azure/core-tracing@^1.2.0", "@azure/core-tracing@^1.3.0": + version "1.3.1" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.3.1.tgz#e971045c901ea9c110616b0e1db272507781d5f6" + integrity sha512-9MWKevR7Hz8kNzzPLfX4EAtGM2b8mr50HPDBvio96bURP/9C+HjdH3sBlLSNNrvRAr5/k/svoH457gB5IKpmwQ== + dependencies: + tslib "^2.6.2" + +"@azure/core-util@^1.11.0", "@azure/core-util@^1.13.0", "@azure/core-util@^1.2.0": + version "1.13.1" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.13.1.tgz#6dff2ff6d3c9c6430c6f4d3b3e65de531f10bafe" + integrity sha512-XPArKLzsvl0Hf0CaGyKHUyVgF7oDnhKoP85Xv6M4StF/1AhfORhZudHtOyf2s+FcbuQ9dPRAjB8J2KvRRMUK2A== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@typespec/ts-http-runtime" "^0.3.0" + tslib "^2.6.2" + +"@azure/core-xml@^1.4.3", "@azure/core-xml@^1.4.4", "@azure/core-xml@^1.4.5": + version "1.5.1" + resolved "https://registry.yarnpkg.com/@azure/core-xml/-/core-xml-1.5.1.tgz#5528aef8e561ee97c605d0080b8803a21d2be783" + integrity sha512-xcNRHqCoSp4AunOALEae6A8f3qATb83gSrm31Iqb01OzblvC3/W/bfXozcq78EzIdzZzuH1bZ2NvRR0TdX709w== + dependencies: + fast-xml-parser "^5.5.9" + tslib "^2.8.1" + +"@azure/data-tables@^13.2.2": + version "13.3.2" + resolved "https://registry.yarnpkg.com/@azure/data-tables/-/data-tables-13.3.2.tgz#335128c93b7c73bf9bfff3db29117ec778b4a12d" + integrity sha512-PZ8e4SnCpTQEbQ1P+CK6NR7Vhb86Jw1S1qJi2IcF1ij4qiPX2b4vIemwNPkYg/gZGMqKbxkPvGRpRmEbBYdXuA== + dependencies: + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.2" + "@azure/core-paging" "^1.6.2" + "@azure/core-rest-pipeline" "^1.19.0" + "@azure/core-tracing" "^1.2.0" + "@azure/core-util" "^1.11.0" + "@azure/core-xml" "^1.4.4" + "@azure/logger" "^1.1.4" + tslib "^2.8.1" + +"@azure/logger@^1.0.0", "@azure/logger@^1.1.4", "@azure/logger@^1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.3.0.tgz#5501cf85d4f52630602a8cc75df76568c969a827" + integrity sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA== + dependencies: + "@typespec/ts-http-runtime" "^0.3.0" + tslib "^2.6.2" + +"@azure/storage-blob@^12.14.0": + version "12.31.0" + resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.31.0.tgz#97b09be2bf6ab59739b862edd8124798362ce720" + integrity sha512-DBgNv10aCSxopt92DkTDD0o9xScXeBqPKGmR50FPZQaEcH4JLQ+GEOGEDv19V5BMkB7kxr+m4h6il/cCDPvmHg== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.3" + "@azure/core-http-compat" "^2.2.0" + "@azure/core-lro" "^2.2.0" + "@azure/core-paging" "^1.6.2" + "@azure/core-rest-pipeline" "^1.19.1" + "@azure/core-tracing" "^1.2.0" + "@azure/core-util" "^1.11.0" + "@azure/core-xml" "^1.4.5" + "@azure/logger" "^1.1.4" + "@azure/storage-common" "^12.3.0" + events "^3.0.0" + tslib "^2.8.1" + +"@azure/storage-common@^12.2.0", "@azure/storage-common@^12.3.0": + version "12.3.0" + resolved "https://registry.yarnpkg.com/@azure/storage-common/-/storage-common-12.3.0.tgz#5bf257383836e67a426c91d7e9678479afe802a9" + integrity sha512-/OFHhy86aG5Pe8dP5tsp+BuJ25JOAl9yaMU3WZbkeoiFMHFtJ7tu5ili7qEdBXNW9G5lDB19trwyI6V49F/8iQ== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.9.0" + "@azure/core-http-compat" "^2.2.0" + "@azure/core-rest-pipeline" "^1.19.1" + "@azure/core-tracing" "^1.2.0" + "@azure/core-util" "^1.11.0" + "@azure/logger" "^1.1.4" + events "^3.3.0" + tslib "^2.8.1" + +"@azure/storage-file-share@^12.14.0": + version "12.30.0" + resolved "https://registry.yarnpkg.com/@azure/storage-file-share/-/storage-file-share-12.30.0.tgz#cf19fbf915665fb8a543c76ee8b6e612cb26cfd7" + integrity sha512-OSpZQv/zPvvuSMh/pr9qTrvZYYOlmG4dxesc8ferElrjvADxw1vNId9tEa0rsxPF3kGyuAR5PZuDDdCae37Nag== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.3" + "@azure/core-http-compat" "^2.0.0" + "@azure/core-paging" "^1.6.2" + "@azure/core-rest-pipeline" "^1.19.1" + "@azure/core-tracing" "^1.2.0" + "@azure/core-util" "^1.11.0" + "@azure/core-xml" "^1.4.3" + "@azure/logger" "^1.1.4" + "@azure/storage-common" "^12.2.0" + events "^3.0.0" + tslib "^2.8.1" + +"@azure/storage-queue@^12.13.0": + version "12.29.0" + resolved "https://registry.yarnpkg.com/@azure/storage-queue/-/storage-queue-12.29.0.tgz#2aabe5ab494d05f9f0b1617d7684b920b9b43827" + integrity sha512-p02H+TbPQWSI/SQ4CG+luoDvpenM+4837NARmOE4oPNOR5vAq7qRyeX72ffyYL2YLnkcyxETh28/bp/TiVIM+g== + dependencies: + "@azure/abort-controller" "^2.1.2" + "@azure/core-auth" "^1.9.0" + "@azure/core-client" "^1.9.3" + "@azure/core-http-compat" "^2.0.0" + "@azure/core-paging" "^1.6.2" + "@azure/core-rest-pipeline" "^1.19.1" + "@azure/core-tracing" "^1.2.0" + "@azure/core-util" "^1.11.0" + "@azure/core-xml" "^1.4.3" + "@azure/logger" "^1.1.4" + "@azure/storage-common" "^12.2.0" + tslib "^2.8.1" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.28.6", "@babel/code-frame@^7.29.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.29.0.tgz#7cd7a59f15b3cc0dcd803038f7792712a7d0b15c" + integrity sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw== + dependencies: + "@babel/helper-validator-identifier" "^7.28.5" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/generator@^7.29.0", "@babel/generator@^7.4.0": + version "7.29.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.29.1.tgz#d09876290111abbb00ef962a7b83a5307fba0d50" + integrity sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw== + dependencies: + "@babel/parser" "^7.29.0" + "@babel/types" "^7.29.0" + "@jridgewell/gen-mapping" "^0.3.12" + "@jridgewell/trace-mapping" "^0.3.28" + jsesc "^3.0.2" + +"@babel/helper-globals@^7.28.0": + version "7.28.0" + resolved "https://registry.yarnpkg.com/@babel/helper-globals/-/helper-globals-7.28.0.tgz#b9430df2aa4e17bc28665eadeae8aa1d985e6674" + integrity sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw== + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.28.5": + version "7.28.5" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz#010b6938fab7cb7df74aa2bbc06aa503b8fe5fb4" + integrity sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q== + +"@babel/parser@^7.28.6", "@babel/parser@^7.29.0", "@babel/parser@^7.4.3": + version "7.29.3" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.29.3.tgz#116f70a77958307fceac27747573032f8a62f88e" + integrity sha512-b3ctpQwp+PROvU/cttc4OYl4MzfJUWy6FZg+PMXfzmt/+39iHVF0sDfqay8TQM3JA2EUOyKcFZt75jWriQijsA== + dependencies: + "@babel/types" "^7.29.0" + +"@babel/template@^7.28.6", "@babel/template@^7.4.0": + version "7.28.6" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.28.6.tgz#0e7e56ecedb78aeef66ce7972b082fce76a23e57" + integrity sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ== + dependencies: + "@babel/code-frame" "^7.28.6" + "@babel/parser" "^7.28.6" + "@babel/types" "^7.28.6" + +"@babel/traverse@^7.4.3": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.29.0.tgz#f323d05001440253eead3c9c858adbe00b90310a" + integrity sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA== + dependencies: + "@babel/code-frame" "^7.29.0" + "@babel/generator" "^7.29.0" + "@babel/helper-globals" "^7.28.0" + "@babel/parser" "^7.29.0" + "@babel/template" "^7.28.6" + "@babel/types" "^7.29.0" + debug "^4.3.1" + +"@babel/types@^7.28.6", "@babel/types@^7.29.0", "@babel/types@^7.4.0": + version "7.29.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.29.0.tgz#9f5b1e838c446e72cf3cd4b918152b8c605e37c7" + integrity sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.28.5" + +"@jridgewell/gen-mapping@^0.3.12": + version "0.3.13" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz#6342a19f44347518c93e43b1ac69deb3c4656a1f" + integrity sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.14", "@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.5" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz#6912b00d2c631c0d15ce1a7ab57cd657f2a8f8ba" + integrity sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og== + +"@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.28": + version "0.3.31" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz#db15d6781c931f3a251a3dac39501c98a6082fd0" + integrity sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@nodable/entities@^2.1.0": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@nodable/entities/-/entities-2.1.0.tgz#f543e5c6446720d4cf9e498a83019dd159973bc2" + integrity sha512-nyT7T3nbMyBI/lvr6L5TyWbFJAI9FTgVRakNoBqCD+PmID8DzFrrNdLLtHMwMszOtqZa8PAOV24ZqDnQrhQINA== + +"@octokit/auth-app@^6.0.3": + version "6.1.4" + resolved "https://registry.yarnpkg.com/@octokit/auth-app/-/auth-app-6.1.4.tgz#e27c14e9c3b9815da4b8d13d97159b94159f9be8" + integrity sha512-QkXkSOHZK4dA5oUqY5Dk3S+5pN2s1igPjEASNQV8/vgJgW034fQWR16u7VsNOK/EljA00eyjYF5mWNxWKWhHRQ== + dependencies: + "@octokit/auth-oauth-app" "^7.1.0" + "@octokit/auth-oauth-user" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.1.0" + deprecation "^2.3.1" + lru-cache "npm:@wolfy1339/lru-cache@^11.0.2-patch.1" + universal-github-app-jwt "^1.1.2" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-app@^7.1.0": + version "7.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-app/-/auth-oauth-app-7.1.0.tgz#d0f74e19ebd5a4829cb780c107cedd6c894f20fc" + integrity sha512-w+SyJN/b0l/HEb4EOPRudo7uUOSW51jcK1jwLa+4r7PA8FPFpoxEnHBHMITqCsc/3Vo2qqFjgQfz/xUUvsSQnA== + dependencies: + "@octokit/auth-oauth-device" "^6.1.0" + "@octokit/auth-oauth-user" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/types" "^13.0.0" + "@types/btoa-lite" "^1.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-device@^6.1.0": + version "6.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-device/-/auth-oauth-device-6.1.0.tgz#f868213a3db05fe27e68d1fc607502a322379dd9" + integrity sha512-FNQ7cb8kASufd6Ej4gnJ3f1QB5vJitkoV1O0/g6e6lUsQ7+VsSNRHRmFScN2tV4IgKA12frrr/cegUs0t+0/Lw== + dependencies: + "@octokit/oauth-methods" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-oauth-user@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-oauth-user/-/auth-oauth-user-4.1.0.tgz#32e5529f8bd961af9839a1f8c6ab0c8ad2184eee" + integrity sha512-FrEp8mtFuS/BrJyjpur+4GARteUCrPeR/tZJzD8YourzoVhRics7u7we/aDcKv+yywRNwNi/P4fRi631rG/OyQ== + dependencies: + "@octokit/auth-oauth-device" "^6.1.0" + "@octokit/oauth-methods" "^4.1.0" + "@octokit/request" "^8.3.1" + "@octokit/types" "^13.0.0" + btoa-lite "^1.0.0" + universal-user-agent "^6.0.0" + +"@octokit/auth-token@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-4.0.0.tgz#40d203ea827b9f17f42a29c6afb93b7745ef80c7" + integrity sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA== + +"@octokit/core@^5.0.2": + version "5.2.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-5.2.2.tgz#252805732de9b4e8e4f658d34b80c4c9b2534761" + integrity sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg== + dependencies: + "@octokit/auth-token" "^4.0.0" + "@octokit/graphql" "^7.1.0" + "@octokit/request" "^8.4.1" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.0.0" + before-after-hook "^2.2.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^9.0.6": + version "9.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-9.0.6.tgz#114d912108fe692d8b139cfe7fc0846dfd11b6c0" + integrity sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw== + dependencies: + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^7.1.0": + version "7.1.1" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-7.1.1.tgz#79d9f3d0c96a8fd13d64186fe5c33606d48b79cc" + integrity sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g== + dependencies: + "@octokit/request" "^8.4.1" + "@octokit/types" "^13.0.0" + universal-user-agent "^6.0.0" + +"@octokit/oauth-authorization-url@^6.0.2": + version "6.0.2" + resolved "https://registry.yarnpkg.com/@octokit/oauth-authorization-url/-/oauth-authorization-url-6.0.2.tgz#cc82ca29cc5e339c9921672f39f2b3f5c8eb6ef2" + integrity sha512-CdoJukjXXxqLNK4y/VOiVzQVjibqoj/xHgInekviUJV73y/BSIcwvJ/4aNHPBPKcPWFnd4/lO9uqRV65jXhcLA== + +"@octokit/oauth-methods@^4.1.0": + version "4.1.0" + resolved "https://registry.yarnpkg.com/@octokit/oauth-methods/-/oauth-methods-4.1.0.tgz#1403ac9c4d4e277922fddc4c89fa8a782f8f791b" + integrity sha512-4tuKnCRecJ6CG6gr0XcEXdZtkTDbfbnD5oaHBmLERTjTMZNi2CbfEHZxPU41xXLDG4DfKf+sonu00zvKI9NSbw== + dependencies: + "@octokit/oauth-authorization-url" "^6.0.2" + "@octokit/request" "^8.3.1" + "@octokit/request-error" "^5.1.0" + "@octokit/types" "^13.0.0" + btoa-lite "^1.0.0" + +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== + +"@octokit/plugin-paginate-rest@11.4.4-cjs.2": + version "11.4.4-cjs.2" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz#979a10d577bce7a393e8e65953887e42b0a05000" + integrity sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw== + dependencies: + "@octokit/types" "^13.7.0" + +"@octokit/plugin-request-log@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz#98a3ca96e0b107380664708111864cb96551f958" + integrity sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA== + +"@octokit/plugin-rest-endpoint-methods@13.3.2-cjs.1": + version "13.3.2-cjs.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz#d0a142ff41d8f7892b6ccef45979049f51ecaa8d" + integrity sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ== + dependencies: + "@octokit/types" "^13.8.0" + +"@octokit/request-error@^5.1.0", "@octokit/request-error@^5.1.1": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-5.1.1.tgz#b9218f9c1166e68bb4d0c89b638edc62c9334805" + integrity sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g== + dependencies: + "@octokit/types" "^13.1.0" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^8.1.6", "@octokit/request@^8.3.1", "@octokit/request@^8.4.1": + version "8.4.1" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-8.4.1.tgz#715a015ccf993087977ea4365c44791fc4572486" + integrity sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw== + dependencies: + "@octokit/endpoint" "^9.0.6" + "@octokit/request-error" "^5.1.1" + "@octokit/types" "^13.1.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^20.0.2": + version "20.1.2" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-20.1.2.tgz#1d74d0c72ade0d64f7c5416448d5c885f5e3ccc4" + integrity sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA== + dependencies: + "@octokit/core" "^5.0.2" + "@octokit/plugin-paginate-rest" "11.4.4-cjs.2" + "@octokit/plugin-request-log" "^4.0.0" + "@octokit/plugin-rest-endpoint-methods" "13.3.2-cjs.1" + +"@octokit/types@^13.0.0", "@octokit/types@^13.1.0", "@octokit/types@^13.7.0", "@octokit/types@^13.8.0": + version "13.10.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== + dependencies: + "@octokit/openapi-types" "^24.2.0" + +"@types/btoa-lite@^1.0.0": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@types/btoa-lite/-/btoa-lite-1.0.2.tgz#82bb6aab00abf7cff3ca2825abe010c0cd536ae5" + integrity sha512-ZYbcE2x7yrvNFJiU7xJGrpF/ihpkM7zKgw8bha3LNJSesvTtUNxbpzaT7WXBIryf6jovisrxTBvymxMeLLj1Mg== + +"@types/jsonwebtoken@^9.0.0": + version "9.0.10" + resolved "https://registry.yarnpkg.com/@types/jsonwebtoken/-/jsonwebtoken-9.0.10.tgz#a7932a47177dcd4283b6146f3bd5c26d82647f09" + integrity sha512-asx5hIG9Qmf/1oStypjanR7iKTv0gXQ1Ov/jfrX6kS/EO0OFni8orbmGCn0672NHR3kXHwpAwR+B368ZGN/2rA== + dependencies: + "@types/ms" "*" + "@types/node" "*" + +"@types/ms@*": + version "2.1.0" + resolved "https://registry.yarnpkg.com/@types/ms/-/ms-2.1.0.tgz#052aa67a48eccc4309d7f0191b7e41434b90bb78" + integrity sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA== + +"@types/node@*": + version "25.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-25.9.0.tgz#4823e66e0f486bfd8d9019fb445fbbb9e6f77348" + integrity sha512-AOQwYUNolgy3VosiRqXrACUXTN8nJUtPl7FJXMqZVyxiiCLhQuG3jXKvCS1ALr+Y2OmZhzzLVlYPEqJaiqkaJQ== + dependencies: + undici-types ">=7.24.0 <7.24.7" + +"@types/node@^20": + version "20.19.41" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.19.41.tgz#bb266a1e0aaa2f4537d14ae8ebf238dd9ca73ce6" + integrity sha512-ECymXOukMnOoVkC2bb1Vc/w/836DXncOg5m8Xj1RH7xSHZJWNYY6Zh7EH477vcnD5egKNNfy2RpNOmuChhFPgQ== + dependencies: + undici-types "~6.21.0" + +"@typespec/ts-http-runtime@^0.3.0", "@typespec/ts-http-runtime@^0.3.4": + version "0.3.5" + resolved "https://registry.yarnpkg.com/@typespec/ts-http-runtime/-/ts-http-runtime-0.3.5.tgz#ccc9b35464aa8da90982d00553d49a5c591d95f3" + integrity sha512-yURCknZhvywvQItHMMmFSo+fq5arCUIyz/CVk7jD89MSai7dkaX8ufjCWp3NttLojoTVbcE72ri+be/TnEbMHw== + dependencies: + http-proxy-agent "^7.0.0" + https-proxy-agent "^7.0.0" + tslib "^2.6.2" + +"@xmldom/xmldom@^0.8.3": + version "0.8.13" + resolved "https://registry.yarnpkg.com/@xmldom/xmldom/-/xmldom-0.8.13.tgz#00d1dd940b218dff2e49309d410d8bb212159225" + integrity sha512-KRYzxepc14G/CEpEGc3Yn+JKaAeT63smlDr+vjB8jRfgTBBI9wRj/nkQEO+ucV8p8I9bfKLWp37uHgFrbntPvw== + +acorn-jsx@^5.2.0: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn@^7.1.1: + version "7.4.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.4.1.tgz#feaed255973d2e77555b83dbc08851a6c63520fa" + integrity sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A== + +adal-node@^0.2.2: + version "0.2.4" + resolved "https://registry.yarnpkg.com/adal-node/-/adal-node-0.2.4.tgz#881beed9d493b76a86706ad5c8dc6f60eff04520" + integrity sha512-zIcvbwQFKMUtKxxj8YMHeTT1o/TPXfVNsTXVgXD8sxwV6h4AFQgK77dRciGhuEF9/Sdm3UQPJVPc/6XxrccSeA== + dependencies: + "@xmldom/xmldom" "^0.8.3" + async "^2.6.3" + axios "^0.21.1" + date-utils "*" + jws "3.x.x" + underscore ">= 1.3.1" + uuid "^3.1.0" + xpath.js "~1.1.0" + +address@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.4" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.4.tgz#e3cd76d4c548ee895d3c3fd8dc1f6c5b9032e7a8" + integrity sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ== + +agentkeepalive@^3.4.1: + version "3.5.3" + resolved "https://registry.yarnpkg.com/agentkeepalive/-/agentkeepalive-3.5.3.tgz#c210afce942b4287e2df2fbfe6c0d57eda2ce634" + integrity sha512-yqXL+k5rr8+ZRpOAntkaaRgWgE5o8ESAj5DyRmVTCSoZxXmqemb9Dd7T4i5UzwuERdLAJUy6XzR9zFVuf0kzkw== + dependencies: + humanize-ms "^1.2.1" + +ajv@6.12.3: + version "6.12.3" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.3.tgz#18c5af38a111ddeb4f2697bd78d68abc1cabd706" + integrity sha512-4K0cK3L1hsqk9xIb2z9vs/XU+PGJZ9PNpJRDS9YLzmNdX6jmVPfamLvTJr0aDAusnHyCHO6MjzlkAsgtqp9teA== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ajv@^6.10.0, ajv@^6.10.2, ajv@^6.12.3: + version "6.15.0" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.15.0.tgz#07e982c74626167aa7a2495c53817892d7139492" + integrity sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ali-oss@^6.15.2: + version "6.23.0" + resolved "https://registry.yarnpkg.com/ali-oss/-/ali-oss-6.23.0.tgz#0bb236428307986ece0bf9243d77d7029d7b6ed2" + integrity sha512-FipRmyd16Pr/tEey/YaaQ/24Pc3HEpLM9S1DRakEuXlSLXNIJnu1oJtHM53eVYpvW3dXapSjrip3xylZUTIZVQ== + dependencies: + address "^1.2.2" + agentkeepalive "^3.4.1" + bowser "^1.6.0" + copy-to "^2.0.1" + dateformat "^2.0.0" + debug "^4.3.4" + destroy "^1.0.4" + end-or-error "^1.0.1" + get-ready "^1.0.0" + humanize-ms "^1.2.0" + is-type-of "^1.4.0" + js-base64 "^2.5.2" + jstoxml "^2.0.0" + lodash "^4.17.21" + merge-descriptors "^1.0.1" + mime "^2.4.5" + platform "^1.3.1" + pump "^3.0.0" + qs "^6.4.0" + sdk-base "^2.0.1" + stream-http "2.8.2" + stream-wormhole "^1.0.4" + urllib "^2.44.0" + utility "^1.18.0" + xml2js "^0.6.2" + +ansi-align@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-2.0.0.tgz#c36aeccba563b89ceb556f3690f0b1d9e3547f7f" + integrity sha512-TdlOggdA/zURfMYa7ABC66j+oqfMew58KpJMbUlH3bcZP1b+cBHIHDDn5uH9INsxrHBPjsqM0tDB4jPTF/vgJA== + dependencies: + string-width "^2.0.0" + +ansi-colors@3.2.3: + version "3.2.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-3.2.3.tgz#57d35b8686e851e2cc04c403f1c00203976a1813" + integrity sha512-LEHHyuhlPY3TmuUYMh2oz89lTShfvgbmzaBcxve9t/9Wuy7Dwf4yoAKcND7KFT1HAQfqZ12qtc+DUrBMeKF9nw== + +ansi-escapes@^4.2.1: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.1.tgz#164daac87ab2d6f6db3a29875e2d1766582dabed" + integrity sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.0, ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +any-promise@^1.0.0, any-promise@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/any-promise/-/any-promise-1.3.0.tgz#abc6afeedcea52e809cdc0376aed3ce39635d17f" + integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== + +anymatch@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" + integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== + dependencies: + micromatch "^3.1.4" + normalize-path "^2.1.1" + +append-transform@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" + integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== + dependencies: + default-require-extensions "^2.0.0" + +archy@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" + integrity sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +arr-diff@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" + integrity sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA== + +arr-flatten@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" + integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== + +arr-union@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" + integrity sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q== + +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== + dependencies: + call-bound "^1.0.3" + is-array-buffer "^3.0.5" + +array-unique@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" + integrity sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ== + +array.prototype.flat@^1.2.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" + +array.prototype.reduce@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/array.prototype.reduce/-/array.prototype.reduce-1.0.8.tgz#42f97f5078daedca687d4463fd3c05cbfd83da57" + integrity sha512-DwuEqgXFBwbmZSRqt3BpQigWNUoqw9Ml2dTWdF3B2zQlQX4OeUE0zyuzX0fX0IbTvjdkZbcBTU3idgpO78qkTw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.4" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-array-method-boxes-properly "^1.0.0" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + is-string "^1.1.1" + +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== + dependencies: + array-buffer-byte-length "^1.0.1" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + is-array-buffer "^3.0.4" + +arrify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" + integrity sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +assign-symbols@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" + integrity sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw== + +astral-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" + integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== + +async-each@^1.0.1: + version "1.0.6" + resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.6.tgz#52f1d9403818c179b7561e11a5d1b77eb2160e77" + integrity sha512-c646jH1avxr+aVpndVMeAfYw7wAa6idufrlN3LPA4PmKS0QEGp6PIC9nwz0WQkkvBGAMEki3pFdtxaF39J9vvg== + +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + +async@^2.6.1, async@^2.6.3, async@^2.6.4: + version "2.6.4" + resolved "https://registry.yarnpkg.com/async/-/async-2.6.4.tgz#706b7ff6084664cd7eae713f6f965433b5504221" + integrity sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA== + dependencies: + lodash "^4.17.14" + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + +available-typed-arrays@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz#a5cc375d6a03c2efc87a553f3e0b1522def14846" + integrity sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ== + dependencies: + possible-typed-array-names "^1.0.0" + +aws-sdk@^2.1506.0: + version "2.1693.0" + resolved "https://registry.yarnpkg.com/aws-sdk/-/aws-sdk-2.1693.0.tgz#fda38671af3dc5fa8117e9aa09cf6ce37e34010e" + integrity sha512-cJmb8xEnVLT+R6fBS5sn/EFJiX7tUnDaPtOPZ1vFbOJtd0fnZn/Ky2XGgsvvoeliWeH7mL3TWSX5zXXGSQV6gQ== + dependencies: + buffer "4.9.2" + events "1.1.1" + ieee754 "1.1.13" + jmespath "0.16.0" + querystring "0.2.0" + sax "1.2.1" + url "0.10.3" + util "^0.12.4" + uuid "8.0.0" + xml2js "0.6.2" + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +axios@^0.21.1: + version "0.21.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-0.21.4.tgz#c67b90dc0568e5c1cf2b0b858c43ba28e2eda575" + integrity sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg== + dependencies: + follow-redirects "^1.14.0" + +azure-storage@^2.10.3: + version "2.10.7" + resolved "https://registry.yarnpkg.com/azure-storage/-/azure-storage-2.10.7.tgz#50290ac638d1b709b89d961f333cc1c1a6722a05" + integrity sha512-4oeFGtn3Ziw/fGs/zkoIpKKtygnCVIcZwzJ7UQzKTxhkGQqVCByOFbYqMGYR3L+wOsunX9lNfD0jc51SQuKSSA== + dependencies: + browserify-mime "^1.2.9" + extend "^3.0.2" + json-edm-parser "~0.1.2" + json-schema "~0.4.0" + md5.js "^1.3.4" + readable-stream "^2.0.0" + request "^2.86.0" + underscore "^1.12.1" + uuid "^3.0.0" + validator "^13.7.0" + xml2js "~0.2.8" + xmlbuilder "^9.0.7" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +balanced-match@^4.0.2: + version "4.0.4" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-4.0.4.tgz#bfb10662feed8196a2c62e7c68e17720c274179a" + integrity sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA== + +base64-js@^1.0.2, base64-js@^1.3.0: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +base@^0.11.1: + version "0.11.2" + resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" + integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== + dependencies: + cache-base "^1.0.1" + class-utils "^0.3.5" + component-emitter "^1.2.1" + define-property "^1.0.0" + isobject "^3.0.1" + mixin-deep "^1.2.0" + pascalcase "^0.1.1" + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +before-after-hook@^2.2.0: + version "2.2.3" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" + integrity sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ== + +bignumber.js@^9.0.0: + version "9.3.1" + resolved "https://registry.yarnpkg.com/bignumber.js/-/bignumber.js-9.3.1.tgz#759c5aaddf2ffdc4f154f7b493e1c8770f88c4d7" + integrity sha512-Ko0uX15oIUS7wJ3Rb30Fs6SkVbLmPBAKdlm7q9+ak9bbIeFf0MwuBsQV6z7+X768/cHsfg+WlysDWJcmthjsjQ== + +binary-extensions@^1.0.0: + version "1.13.1" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" + integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== + +bindings@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" + integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== + dependencies: + file-uri-to-path "1.0.0" + +bowser@^1.6.0: + version "1.9.4" + resolved "https://registry.yarnpkg.com/bowser/-/bowser-1.9.4.tgz#890c58a2813a9d3243704334fa81b96a5c150c9a" + integrity sha512-9IdMmj2KjigRq6oWhmwv1W36pDuA4STQZ8q6YO9um+x07xgYNCD3Oou+WP/3L1HNz7iqythGet3/p4wvc8AAwQ== + +boxen@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-1.3.0.tgz#55c6c39a8ba58d9c61ad22cd877532deb665a20b" + integrity sha512-TNPjfTr432qx7yOjQyaXm3dSR0MH9vXp7eT1BFSl/C51g+EFnOR9hTg1IreahGBmDNCehscshe45f+C1TBZbLw== + dependencies: + ansi-align "^2.0.0" + camelcase "^4.0.0" + chalk "^2.0.1" + cli-boxes "^1.0.0" + string-width "^2.0.0" + term-size "^1.2.0" + widest-line "^2.0.0" + +brace-expansion@^1.1.7: + version "1.1.14" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.14.tgz#d9de602370d91347cd9ddad1224d4fd701eb348b" + integrity sha512-MWPGfDxnyzKU7rNOW9SP/c50vi3xrmrua/+6hfPbCS2ABNWfx24vPidzvC7krjU/RTo235sV776ymlsMtGKj8g== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^5.0.5: + version "5.0.6" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-5.0.6.tgz#ec68fe0a641a29d8711579caf641d05bae1f2285" + integrity sha512-kLpxurY4Z4r9sgMsyG0Z9uzsBlgiU/EFKhj/h91/8yHu0edo7XuixOIH3VcJ8kkxs6/jPzoI6U9Vj3WqbMQ94g== + dependencies: + balanced-match "^4.0.2" + +braces@^2.3.1, braces@^2.3.2: + version "2.3.2" + resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" + integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== + dependencies: + arr-flatten "^1.1.0" + array-unique "^0.3.2" + extend-shallow "^2.0.1" + fill-range "^4.0.0" + isobject "^3.0.1" + repeat-element "^1.1.2" + snapdragon "^0.8.1" + snapdragon-node "^2.0.1" + split-string "^3.0.2" + to-regex "^3.0.1" + +breakword@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.6.tgz#242506e7b871b7fad1bce8dc05cb0f2a129c12bd" + integrity sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw== + dependencies: + wcwidth "^1.0.1" + +browser-stdout@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-mime@^1.2.9: + version "1.2.9" + resolved "https://registry.yarnpkg.com/browserify-mime/-/browserify-mime-1.2.9.tgz#aeb1af28de6c0d7a6a2ce40adb68ff18422af31f" + integrity sha512-uz+ItyJXBLb6wgon1ELEiVowJBEsy03PUWGRQU7cxxx9S+DW2hujPp+DaMYEOClRPzsn7NB99NtJ6pGnt8y+CQ== + +btoa-lite@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" + integrity sha512-gvW7InbIyF8AicrqWoptdW08pUxuhq8BEgowNajy9RhiE86fmGAGl+bLKo6oB8QP0CkqHLowfN0oJdKC/J6LbA== + +buffer-equal-constant-time@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer@4.9.2: + version "4.9.2" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-4.9.2.tgz#230ead344002988644841ab0244af8c44bbe3ef8" + integrity sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg== + dependencies: + base64-js "^1.0.2" + ieee754 "^1.1.4" + isarray "^1.0.0" + +builtin-status-codes@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" + integrity sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ== + +cache-base@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" + integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== + dependencies: + collection-visit "^1.0.0" + component-emitter "^1.2.1" + get-value "^2.0.6" + has-value "^1.0.0" + isobject "^3.0.1" + set-value "^2.0.0" + to-object-path "^0.3.0" + union-value "^1.0.0" + unset-value "^1.0.0" + +caching-transform@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" + integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== + dependencies: + hasha "^3.0.0" + make-dir "^2.0.0" + package-hash "^3.0.0" + write-file-atomic "^2.4.2" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8, call-bind@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.9.tgz#39a644700c80bc7d0ca9102fc6d1d43b2fd7eee7" + integrity sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + get-intrinsic "^1.3.0" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" + integrity sha512-FxAv7HpHrXbh3aPo4o2qxHay2lkLY3x5Mw3KeE4KQE8ysVfziWeRZDwcjauvwBSGEC/nXUPzZy8zeh4HokqOnw== + +camelcase@^5.0.0: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +capture-stack-trace@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.2.tgz#1c43f6b059d4249e7f3f8724f15f048b927d3a8a" + integrity sha512-X/WM2UQs6VMHUtjUDnZTRI+i1crWteJySFzr9UpGoQa4WQffXVTTXuekjl7TjZRlcF2XfjgITT0HxZ9RnxeT0w== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chai@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.2.0.tgz#760aa72cf20e3795e84b12877ce0e83737aa29e5" + integrity sha512-XQU3bhBukrOsQCuwZndwGcCVQHyZi53fQ6Ys1Fym7E4olpIqqZZhhoFJoaKVvV17lWQoXYwgWN2nF5crA8J2jw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.2" + deep-eql "^3.0.1" + get-func-name "^2.0.0" + pathval "^1.1.0" + type-detect "^4.0.5" + +chalk@^2.0.1, chalk@^2.1.0: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +check-error@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@^2.1.8: + version "2.1.8" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" + integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== + dependencies: + anymatch "^2.0.0" + async-each "^1.0.1" + braces "^2.3.2" + glob-parent "^3.1.0" + inherits "^2.0.3" + is-binary-path "^1.0.0" + is-glob "^4.0.0" + normalize-path "^3.0.0" + path-is-absolute "^1.0.0" + readdirp "^2.2.1" + upath "^1.1.1" + optionalDependencies: + fsevents "^1.2.7" + +ci-info@^1.5.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-1.6.0.tgz#2ca20dbb9ceb32d4524a683303313f0304b1e497" + integrity sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A== + +class-utils@^0.3.5: + version "0.3.6" + resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" + integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== + dependencies: + arr-union "^3.1.0" + define-property "^0.2.5" + isobject "^3.0.0" + static-extend "^0.1.1" + +cli-boxes@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-1.0.0.tgz#4fa917c3e59c94a004cd61f8ee509da651687143" + integrity sha512-3Fo5wu8Ytle8q9iCzS4D2MWVL2X7JVWRiS1BnXbTFDhS9c/REkM9vd1AmabsoZoY5/dGi5TT9iKL8Kb6DeBRQg== + +cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-width@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-3.0.0.tgz#a2f48437a2caa9a22436e794bf071ec9e61cedf6" + integrity sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw== + +cliui@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-5.0.0.tgz#deefcfdb2e800784aa34f46fa08e06851c7bbbc5" + integrity sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA== + dependencies: + string-width "^3.1.0" + strip-ansi "^5.2.0" + wrap-ansi "^5.1.0" + +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +collection-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" + integrity sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw== + dependencies: + map-visit "^1.0.0" + object-visit "^1.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +combined-stream@^1.0.6, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commondir@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" + integrity sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg== + +component-emitter@^1.2.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.1.tgz#ef1d5796f7d93f135ee6fb684340b26403c97d17" + integrity sha512-T0+barUSQRTUQASh8bx02dl+DhF54GtIDY13Y3m9oWTklKbb3Wv974meRpeZ3lp1JpLVECWWNHC4vaG2XHXouQ== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +configstore@^3.0.0: + version "3.1.5" + resolved "https://registry.yarnpkg.com/configstore/-/configstore-3.1.5.tgz#e9af331fadc14dabd544d3e7e76dc446a09a530f" + integrity sha512-nlOhI4+fdzoK5xmJ+NY+1gZK56bwEaWZr8fYuXohZ9Vkc1o3a4T/R3M+yE/w7x/ZVJ1zF8c+oaOvF0dztdUgmA== + dependencies: + dot-prop "^4.2.1" + graceful-fs "^4.1.2" + make-dir "^1.0.0" + unique-string "^1.0.0" + write-file-atomic "^2.0.0" + xdg-basedir "^3.0.0" + +content-type@^1.0.2: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +convert-source-map@^1.6.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" + integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== + +copy-descriptor@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" + integrity sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw== + +copy-to@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/copy-to/-/copy-to-2.0.1.tgz#2680fbb8068a48d08656b6098092bdafc906f4a5" + integrity sha512-3DdaFaU/Zf1AnpLiFDeNCD4TOWe3Zl2RZaTzUvWiIk5ERzcCodOE20Vqq4fzCbNoHURFHT4/us/Lfq+S2zyY4w== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@^1.0.2, core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cp-file@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/cp-file/-/cp-file-6.2.0.tgz#40d5ea4a1def2a9acdd07ba5c0b0246ef73dc10d" + integrity sha512-fmvV4caBnofhPe8kOcitBwSn2f39QLjnAnGq3gO9dfd75mUytzKNZB1hde6QHunW2Rt+OwuBOMc3i1tNElbszA== + dependencies: + graceful-fs "^4.1.2" + make-dir "^2.0.0" + nested-error-stacks "^2.0.0" + pify "^4.0.1" + safe-buffer "^5.0.1" + +create-error-class@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" + integrity sha512-gYTKKexFO3kh200H1Nit76sRwRtOY32vQd3jpAQKpLtZqyNsSQNfI4N7o3eP2wUjV35pTWKRYqFUDBvUha/Pkw== + dependencies: + capture-stack-trace "^1.0.0" + +cross-spawn@^4: + version "4.0.2" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" + integrity sha512-yAXz/pA1tD8Gtg2S98Ekf/sewp3Lcp3YoFKJ4Hkp5h5yLWnKVTDU0kwjKJ8NDCYcfTLfyGkzTikst+jWypT1iA== + dependencies: + lru-cache "^4.0.1" + which "^1.2.9" + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^6.0.5: + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== + dependencies: + nice-try "^1.0.4" + path-key "^2.0.1" + semver "^5.5.0" + shebang-command "^1.2.0" + which "^1.2.9" + +crypto-random-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-1.0.0.tgz#a230f64f568310e1498009940790ec99545bca7e" + integrity sha512-GsVpkFPlycH7/fRR7Dhcmnoii54gV1nz7y4CWyeFS14N+JVBBhY+r8amRHE4BwSYal7BPTDp8isvAlCxyFt3Hg== + +csv-generate@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff" + integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw== + +csv-parse@^4.16.3: + version "4.16.3" + resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7" + integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg== + +csv-stringify@^5.6.5: + version "5.6.5" + resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00" + integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A== + +csv-write-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/csv-write-stream/-/csv-write-stream-2.0.0.tgz#fc2da21a48d6ea5f8c17fde39cfb911e4f0292b0" + integrity sha512-QTraH6FOYfM5f+YGwx71hW1nR9ZjlWri67/D4CWtiBkdce0UAa91Vc0yyHg0CjC0NeEGnvO/tBSJkA1XF9D9GQ== + dependencies: + argparse "^1.0.7" + generate-object-property "^1.0.0" + ndjson "^1.3.0" + +csv@^5.5.3: + version "5.5.3" + resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d" + integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g== + dependencies: + csv-generate "^3.4.3" + csv-parse "^4.16.3" + csv-stringify "^5.6.5" + stream-transform "^2.1.3" + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-data-view "^1.0.2" + +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-data-view "^1.0.1" + +date-utils@*: + version "1.2.21" + resolved "https://registry.yarnpkg.com/date-utils/-/date-utils-1.2.21.tgz#61fb16cdc1274b3c9acaaffe9fc69df8720a2b64" + integrity sha512-wJMBjqlwXR0Iv0wUo/lFbhSQ7MmG1hl36iuxuE91kW+5b5sWbase73manEqNH9sOLFAMG83B4ffNKq9/Iq0FVA== + +dateformat@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" + integrity sha512-GODcnWq3YGoTnygPfi02ygEiRxqUxpJwuRHjdhJYuxpcZmDq4rjBiXYmbCCzStxo176ixfLT6i4NPwQooRySnw== + +debug@3.2.6: + version "3.2.6" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" + integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== + dependencies: + ms "^2.1.1" + +debug@4, debug@^4.0.1, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: + version "4.4.3" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.3.tgz#c6ae432d9bd9662582fce08709b038c58e9e3d6a" + integrity sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA== + dependencies: + ms "^2.1.3" + +debug@^2.2.0, debug@^2.3.3: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^3.1.0, debug@^3.2.6: + version "3.2.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" + integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== + dependencies: + ms "^2.1.1" + +decamelize@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decode-uri-component@^0.2.0: + version "0.2.2" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.2.tgz#e69dbe25d37941171dd540e024c444cd5188e1e9" + integrity sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ== + +deep-eql@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-3.0.1.tgz#dfc9404400ad1c8fe023e7da1df1c147c4b444df" + integrity sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw== + dependencies: + type-detect "^4.0.0" + +deep-extend@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +default-require-extensions@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" + integrity sha512-B0n2zDIXpzLzKeoEozorDSa1cHc1t0NjmxP0zuAxbizNU2MBqYJJKYXrrFdKuQliojXynrxgd7l4ahfg/+aA5g== + dependencies: + strip-bom "^3.0.0" + +default-user-agent@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/default-user-agent/-/default-user-agent-1.0.0.tgz#16c46efdcaba3edc45f24f2bd4868b01b7c2adc6" + integrity sha512-bDF7bg6OSNcSwFWPu4zYKpVkJZQYVrAANMYB8bc9Szem1D0yKdm4sa/rOCs2aC9+2GMqQ7KnwtZRvDhmLF0dXw== + dependencies: + os-name "~1.0.3" + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +define-data-property@^1.0.1, define-data-property@^1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" + integrity sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A== + dependencies: + es-define-property "^1.0.0" + es-errors "^1.3.0" + gopd "^1.0.1" + +define-properties@^1.1.2, define-properties@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" + integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== + dependencies: + define-data-property "^1.0.1" + has-property-descriptors "^1.0.0" + object-keys "^1.1.1" + +define-property@^0.2.5: + version "0.2.5" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" + integrity sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA== + dependencies: + is-descriptor "^0.1.0" + +define-property@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" + integrity sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA== + dependencies: + is-descriptor "^1.0.0" + +define-property@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" + integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== + dependencies: + is-descriptor "^1.0.2" + isobject "^3.0.1" + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + +destroy@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +diff@3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" + integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== + +digest-header@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/digest-header/-/digest-header-1.1.0.tgz#e16ab6cf4545bc4eea878c8c35acd1b89664d800" + integrity sha512-glXVh42vz40yZb9Cq2oMOt70FIoWiv+vxNvdKdU8CwjLad25qHM3trLxhl9bVjdr6WaslIXhWpn0NO8T/67Qjg== + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +dot-prop@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-4.2.1.tgz#45884194a71fc2cda71cbb4bceb3a4dd2f433ba4" + integrity sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ== + dependencies: + is-obj "^1.0.0" + +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexer3@^0.1.4: + version "0.1.5" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.5.tgz#0b5e4d7bad5de8901ea4440624c8e1d20099217e" + integrity sha512-1A8za6ws41LQgv9HrE/66jyC5yuSjQ3L/KOpFtoBilsAK2iA2wuS5rTt1OCzIvtS2V7nVmedsUU+DGRcjBmOYA== + +duplexer@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" + integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11, ecdsa-sig-formatter@^1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +emoji-regex@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" + integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +end-of-stream@^1.1.0: + version "1.4.5" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.5.tgz#7344d711dea40e0b74abc2ed49778743ccedb08c" + integrity sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg== + dependencies: + once "^1.4.0" + +end-or-error@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/end-or-error/-/end-or-error-1.0.1.tgz#dc7a6210fe78d372fee24a8b4899dbd155414dcb" + integrity sha512-OclLMSug+k2A0JKuf494im25ANRBVW8qsjmwbgX7lQ8P82H21PQ1PWkoYwb9y5yMBS69BPlwtzdIFClo3+7kOQ== + +error-ex@^1.3.1: + version "1.3.4" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.4.tgz#b3a8d8bb6f92eecc1629e3e27d3c8607a8a32414" + integrity sha512-sqQamAnR14VgCr1A618A3sGrygcpK+HEbenA/HiEAkkUwcZIIB/tgWqHFxWgOyDh4nB4JCRimh79dR5Ywc9MDQ== + dependencies: + is-arrayish "^0.2.1" + +es-abstract@^1.23.5, es-abstract@^1.23.9, es-abstract@^1.24.0: + version "1.24.2" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.24.2.tgz#2dbd38c180735ee983f77585140a2706a963ed9a" + integrity sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg== + dependencies: + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.3.0" + get-proto "^1.0.1" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" + has-property-descriptors "^1.0.2" + has-proto "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" + is-callable "^1.2.7" + is-data-view "^1.0.2" + is-negative-zero "^2.0.3" + is-regex "^1.2.1" + is-set "^2.0.3" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.1" + math-intrinsics "^1.1.0" + object-inspect "^1.13.4" + object-keys "^1.1.1" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.4" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + stop-iteration-iterator "^1.1.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" + string.prototype.trimstart "^1.0.8" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.19" + +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA== + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +es-shim-unscopables@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== + dependencies: + hasown "^2.0.2" + +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== + dependencies: + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" + +es6-error@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +eslint-scope@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" + integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw== + dependencies: + esrecurse "^4.3.0" + estraverse "^4.1.1" + +eslint-utils@^1.4.3: + version "1.4.3" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" + integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== + dependencies: + eslint-visitor-keys "^1.1.0" + +eslint-visitor-keys@^1.1.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz#30ebd1ef7c2fdff01c3a4f151044af25fab0523e" + integrity sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ== + +eslint@^6.8.0: + version "6.8.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-6.8.0.tgz#62262d6729739f9275723824302fb227c8c93ffb" + integrity sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig== + dependencies: + "@babel/code-frame" "^7.0.0" + ajv "^6.10.0" + chalk "^2.1.0" + cross-spawn "^6.0.5" + debug "^4.0.1" + doctrine "^3.0.0" + eslint-scope "^5.0.0" + eslint-utils "^1.4.3" + eslint-visitor-keys "^1.1.0" + espree "^6.1.2" + esquery "^1.0.1" + esutils "^2.0.2" + file-entry-cache "^5.0.1" + functional-red-black-tree "^1.0.1" + glob-parent "^5.0.0" + globals "^12.1.0" + ignore "^4.0.6" + import-fresh "^3.0.0" + imurmurhash "^0.1.4" + inquirer "^7.0.0" + is-glob "^4.0.0" + js-yaml "^3.13.1" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.3.0" + lodash "^4.17.14" + minimatch "^3.0.4" + mkdirp "^0.5.1" + natural-compare "^1.4.0" + optionator "^0.8.3" + progress "^2.0.0" + regexpp "^2.0.1" + semver "^6.1.2" + strip-ansi "^5.2.0" + strip-json-comments "^3.0.1" + table "^5.2.3" + text-table "^0.2.0" + v8-compile-cache "^2.0.3" + +espree@^6.1.2: + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== + dependencies: + acorn "^7.1.1" + acorn-jsx "^5.2.0" + eslint-visitor-keys "^1.1.0" + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.0.1: + version "1.7.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.7.0.tgz#08d048f261f0ddedb5bae95f46809463d9c9496d" + integrity sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^4.1.1: + version "4.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" + integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +events@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/events/-/events-1.1.1.tgz#9ebdb7635ad099c70dcc4c2a1f5004288e8bd924" + integrity sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw== + +events@^3.0.0, events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +expand-brackets@^2.1.4: + version "2.1.4" + resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" + integrity sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA== + dependencies: + debug "^2.3.3" + define-property "^0.2.5" + extend-shallow "^2.0.1" + posix-character-classes "^0.1.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extend-shallow@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" + integrity sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug== + dependencies: + is-extendable "^0.1.0" + +extend-shallow@^3.0.0, extend-shallow@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" + integrity sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q== + dependencies: + assign-symbols "^1.0.0" + is-extendable "^1.0.1" + +extend@^3.0.2, extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extglob@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" + integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== + dependencies: + array-unique "^0.3.2" + define-property "^1.0.0" + expand-brackets "^2.1.4" + extend-shallow "^2.0.1" + fragment-cache "^0.2.1" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-deep-equal@^3.1.1: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-json-stable-stringify@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-safe-stringify@^2.0.6: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-text-encoding@^1.0.0: + version "1.0.6" + resolved "https://registry.yarnpkg.com/fast-text-encoding/-/fast-text-encoding-1.0.6.tgz#0aa25f7f638222e3396d72bf936afcf1d42d6867" + integrity sha512-VhXlQgj9ioXCqGstD37E/HBeqEGV/qOD/kmbVG8h5xKBYvM1L3lR1Zn4555cQ8GkYbJa8aJSipLPndE1k6zK2w== + +fast-xml-builder@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/fast-xml-builder/-/fast-xml-builder-1.2.0.tgz#abd2363145a7625d9789ad96da375fabe3cff28c" + integrity sha512-00aAWieqff+ZJhsXA4g1g7M8k+7AYoMUUHF+/zFb5U6Uv/P0Vl4QZo84/IcufzYalLuEj9928bXN9PbbFzMF0Q== + dependencies: + path-expression-matcher "^1.5.0" + xml-naming "^0.1.0" + +fast-xml-parser@^5.5.9: + version "5.8.0" + resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-5.8.0.tgz#64d71f0f8d4bf23621dffd762aef7e98c1884fc1" + integrity sha512-6bIM7fsJxeo3uXv7OncQYsBAMPJ7V16Slahl/6M98C/i2q+vB1+4a0MtrvYwDFEUrwDSbAmeLDRXsOBwrL7yAg== + dependencies: + "@nodable/entities" "^2.1.0" + fast-xml-builder "^1.2.0" + path-expression-matcher "^1.5.0" + strnum "^2.3.0" + xml-naming "^0.1.0" + +figures@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" + integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== + dependencies: + flat-cache "^2.0.1" + +file-uri-to-path@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" + integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== + +fill-range@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" + integrity sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ== + dependencies: + extend-shallow "^2.0.1" + is-number "^3.0.0" + repeat-string "^1.6.1" + to-regex-range "^2.1.0" + +find-cache-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" + integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== + dependencies: + commondir "^1.0.1" + make-dir "^2.0.0" + pkg-dir "^3.0.0" + +find-up@3.0.0, find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + +find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +flat-cache@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" + integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== + dependencies: + flatted "^2.0.0" + rimraf "2.6.3" + write "1.0.3" + +flat@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/flat/-/flat-4.1.1.tgz#a392059cc382881ff98642f5da4dde0a959f309b" + integrity sha512-FmTtBsHskrU6FJ2VxCnsDb84wu9zhmO3cUX2kGFb5tuwhfXxGciiT0oRY+cck35QmG+NmGh5eLz6lLCpWTqwpA== + dependencies: + is-buffer "~2.0.3" + +flatted@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.2.tgz#4575b21e2bcee7434aa9be662f4b7b5f9c2b5138" + integrity sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA== + +follow-redirects@^1.14.0: + version "1.16.0" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.16.0.tgz#28474a159d3b9d11ef62050a14ed60e4df6d61bc" + integrity sha512-y5rN/uOsadFT/JfYwhxRS5R7Qce+g3zG97+JrtFZlC9klX/W5hD7iiLzScI4nZqUS7DNUdhPgw4xI8W2LuXlUw== + +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== + dependencies: + is-callable "^1.2.7" + +for-in@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" + integrity sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ== + +foreground-child@^1.5.6: + version "1.5.6" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" + integrity sha512-3TOY+4TKV0Ml83PXJQY+JFQaHNV38lzQDIzzXYg1kWdBLenGgoZhAs0CKgzI31vi2pWEpQMq/Yi4bpKwCPkw7g== + dependencies: + cross-spawn "^4" + signal-exit "^3.0.0" + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" + integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + +formstream@^1.1.0: + version "1.5.2" + resolved "https://registry.yarnpkg.com/formstream/-/formstream-1.5.2.tgz#81f282571665b8afd82e0df39399862cb2527c6d" + integrity sha512-NASf0lgxC1AyKNXQIrXTEYkiX99LhCEXTkiGObXAkpBui86a4u8FjH1o2bGb3PpqI3kafC+yw4zWeK6l6VHTgg== + dependencies: + destroy "^1.0.4" + mime "^2.5.2" + node-hex "^1.0.1" + pause-stream "~0.0.11" + +fragment-cache@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" + integrity sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA== + dependencies: + map-cache "^0.2.2" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^1.2.7: + version "1.2.13" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.13.tgz#f325cb0455592428bcf11b383370ef70e3bfcc38" + integrity sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw== + dependencies: + bindings "^1.5.0" + nan "^2.12.1" + +function-bind@^1.1.1, function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" + +functional-red-black-tree@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" + integrity sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g== + +functions-have-names@^1.2.3: + version "1.2.3" + resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" + integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== + +gaxios@^5.0.0, gaxios@^5.0.1: + version "5.1.3" + resolved "https://registry.yarnpkg.com/gaxios/-/gaxios-5.1.3.tgz#f7fa92da0fe197c846441e5ead2573d4979e9013" + integrity sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA== + dependencies: + extend "^3.0.2" + https-proxy-agent "^5.0.0" + is-stream "^2.0.0" + node-fetch "^2.6.9" + +gcp-metadata@^5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/gcp-metadata/-/gcp-metadata-5.3.0.tgz#6f45eb473d0cb47d15001476b48b663744d25408" + integrity sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w== + dependencies: + gaxios "^5.0.0" + json-bigint "^1.0.0" + +generate-object-property@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" + integrity sha512-TuOwZWgJ2VAMEGJvAyPWvpqxSANF0LDpmyHauMjFYzaACvn+QTT/AZomvPCzVBV7yDN3OmwHQ5OvHaeLKre3JQ== + dependencies: + is-property "^1.0.0" + +generator-function@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/generator-function/-/generator-function-2.0.1.tgz#0e75dd410d1243687a0ba2e951b94eedb8f737a2" + integrity sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g== + +get-caller-file@^2.0.1, get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.0, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-ready@^1.0.0, get-ready@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/get-ready/-/get-ready-1.0.0.tgz#f91817f1e9adecfea13a562adfc8de883ab34782" + integrity sha512-mFXCZPJIlcYcth+N8267+mghfYN9h3EhsDa6JSnbA3Wrhh/XFpuowviFcsDeYZtKspQyWyJqfs4O6P8CHeTwzw== + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + +get-value@^2.0.3, get-value@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" + integrity sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +glob-parent@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" + integrity sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA== + dependencies: + is-glob "^3.1.0" + path-dirname "^1.0.0" + +glob-parent@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.3: + version "7.1.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.3.tgz#3960832d3f1574108342dafd3a67b332c0969df1" + integrity sha512-vcfuiIxogLV4DlGBHIUOwI0IbrJ8HWPc4MU7HzviGeNho/UJDfi6B5p3sHeWIQ0KGIU0Jpxi5ZHxemQfLkkAwQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +globals@^12.1.0: + version "12.4.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-12.4.0.tgz#a18813576a41b00a24a97e7f815918c2e19925f8" + integrity sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg== + dependencies: + type-fest "^0.8.1" + +globalthis@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" + integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== + dependencies: + define-properties "^1.2.1" + gopd "^1.0.1" + +google-auth-library@^8.1.1: + version "8.9.0" + resolved "https://registry.yarnpkg.com/google-auth-library/-/google-auth-library-8.9.0.tgz#15a271eb2ec35d43b81deb72211bd61b1ef14dd0" + integrity sha512-f7aQCJODJFmYWN6PeNKzgvy9LI2tYmXnzpNDHEjG5sDNPgGb2FXQyTBnXeSH+PAtpKESFD+LmHw3Ox3mN7e1Fg== + dependencies: + arrify "^2.0.0" + base64-js "^1.3.0" + ecdsa-sig-formatter "^1.0.11" + fast-text-encoding "^1.0.0" + gaxios "^5.0.0" + gcp-metadata "^5.3.0" + gtoken "^6.1.0" + jws "^4.0.0" + lru-cache "^6.0.0" + +google-p12-pem@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/google-p12-pem/-/google-p12-pem-4.0.1.tgz#82841798253c65b7dc2a4e5fe9df141db670172a" + integrity sha512-WPkN4yGtz05WZ5EhtlxNDWPhC4JIic6G8ePitwUWy4l+XPVYec+a0j0Ts47PDtW59y3RwAhUd9/h9ZZ63px6RQ== + dependencies: + node-forge "^1.3.1" + +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^6.7.1: + version "6.7.1" + resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" + integrity sha512-Y/K3EDuiQN9rTZhBvPRWMLXIKdeD1Rj0nzunfoi0Yyn5WBEbzxXKU9Ub2X41oZBagVWOBU3MuDonFMgPWQFnwg== + dependencies: + create-error-class "^3.0.0" + duplexer3 "^0.1.4" + get-stream "^3.0.0" + is-redirect "^1.0.0" + is-retry-allowed "^1.0.0" + is-stream "^1.0.0" + lowercase-keys "^1.0.0" + safe-buffer "^5.0.1" + timed-out "^4.0.0" + unzip-response "^2.0.1" + url-parse-lax "^1.0.0" + +graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +grapheme-splitter@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e" + integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ== + +growl@1.10.5: + version "1.10.5" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e" + integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA== + +gtoken@^6.1.0: + version "6.1.2" + resolved "https://registry.yarnpkg.com/gtoken/-/gtoken-6.1.2.tgz#aeb7bdb019ff4c3ba3ac100bbe7b6e74dce0e8bc" + integrity sha512-4ccGpzz7YAr7lxrT2neugmXQ3hP9ho2gcaityLVkiUecAiwiy60Ii8gRbZeOsXV19fYaRjgBSshs8kXw+NKCPQ== + dependencies: + gaxios "^5.0.1" + google-p12-pem "^4.0.0" + jws "^4.0.0" + +har-schema@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" + integrity sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q== + +har-validator@~5.1.3: + version "5.1.5" + resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd" + integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w== + dependencies: + ajv "^6.12.3" + har-schema "^2.0.0" + +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz#963ed7d071dc7bf5f084c5bfbe0d1b6222586854" + integrity sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg== + dependencies: + es-define-property "^1.0.0" + +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" + +has-symbols@^1.0.0, has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +has-value@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" + integrity sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q== + dependencies: + get-value "^2.0.3" + has-values "^0.1.4" + isobject "^2.0.0" + +has-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" + integrity sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw== + dependencies: + get-value "^2.0.6" + has-values "^1.0.0" + isobject "^3.0.0" + +has-values@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" + integrity sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ== + +has-values@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" + integrity sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ== + dependencies: + is-number "^3.0.0" + kind-of "^4.0.0" + +hash-base@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.2.tgz#79d72def7611c3f6e3c3b5730652638001b10a74" + integrity sha512-Bb33KbowVTIj5s7Ked1OsqHUeCpz//tPwR+E2zJgJKo9Z5XolZ9b6bdUgjmYlwnWhoOQKoTd1TYToZGn5mAYOg== + dependencies: + inherits "^2.0.4" + readable-stream "^2.3.8" + safe-buffer "^5.2.1" + to-buffer "^1.2.1" + +hasha@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" + integrity sha512-w0Kz8lJFBoyaurBiNrIvxPqr/gJ6fOfSkpAPOepN3oECqGJag37xPbOv57izi/KP8auHgNYxn5fXtAb+1LsJ6w== + dependencies: + is-stream "^1.0.1" + +hasown@^2.0.0, hasown@^2.0.2, hasown@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.3.tgz#5e5c2b15b60370a4c7930c383dfb76bf17bc403c" + integrity sha512-ej4AhfhfL2Q2zpMmLo7U1Uv9+PyhIZpgQLGT1F9miIGmiCJIoCgSmczFdrc97mWT4kVY72KA+WnnhJ5pghSvSg== + dependencies: + function-bind "^1.1.2" + +he@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-proxy-agent@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" + integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== + dependencies: + agent-base "^7.1.0" + debug "^4.3.4" + +http-signature@1.3.6: + version "1.3.6" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" + integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.14.1" + +http-signature@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" + integrity sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ== + dependencies: + assert-plus "^1.0.0" + jsprim "^1.2.2" + sshpk "^1.7.0" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +https-proxy-agent@^7.0.0: + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== + dependencies: + agent-base "^7.1.2" + debug "4" + +httpx@^2.1.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/httpx/-/httpx-2.3.3.tgz#353d3d9161b7cc2be4c638873f2fe6b319354c89" + integrity sha512-k1qv94u1b6e+XKCxVbLgYlOypVP9MPGpnN5G/vxFf6tDO4V3xpz3d6FUOY/s8NtPgaq5RBVVgSB+7IHpVxMYzw== + dependencies: + "@types/node" "^20" + debug "^4.1.1" + +humanize-ms@^1.2.0, humanize-ms@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" + integrity sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ== + dependencies: + ms "^2.0.0" + +iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@1.1.13: + version "1.1.13" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" + integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== + +ieee754@^1.1.4: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore-by-default@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/ignore-by-default/-/ignore-by-default-1.0.1.tgz#48ca6d72f6c6a3af00a9ad4ae6876be3889e2b09" + integrity sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA== + +ignore@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" + integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== + +import-fresh@^3.0.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-lazy@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-2.1.0.tgz#05698e3d45c88e8d7e9d92cb0584e77f096f3e43" + integrity sha512-m7ZEHgtw69qOGw+jwxXkHlrlIPdTGkyh66zXZ1ajZbxkDBNjSY/LGbmjc7h0s2ELsUDTAhFr55TrPSSqJGPG0A== + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4, ini@~1.3.0: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +inquirer@^7.0.0: + version "7.3.3" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.3.3.tgz#04d176b2af04afc157a83fd7c100e98ee0aad003" + integrity sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA== + dependencies: + ansi-escapes "^4.2.1" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-width "^3.0.0" + external-editor "^3.0.3" + figures "^3.0.0" + lodash "^4.17.19" + mute-stream "0.0.8" + run-async "^2.4.0" + rxjs "^6.6.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + through "^2.3.6" + +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== + dependencies: + es-errors "^1.3.0" + hasown "^2.0.2" + side-channel "^1.1.0" + +is-accessor-descriptor@^1.0.1, is-accessor-descriptor@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.2.tgz#fff67ca43f7acc57edbc557335c2e2c62b98e41e" + integrity sha512-AIbwAcazqP3R65dGvqk1V+a+vE5Fg1yu/ZKMOiBWSUIXXiwQkYmXQcVa2O0nh0tSDKDFKxG2mY7dB1Sr4hEP1g== + dependencies: + hasown "^2.0.3" + +is-arguments@^1.0.4: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.2.0.tgz#ad58c6aecf563b78ef2bf04df540da8f5d7d8e1b" + integrity sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== + dependencies: + has-bigints "^1.0.2" + +is-binary-path@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" + integrity sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q== + dependencies: + binary-extensions "^1.0.0" + +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-buffer@^1.1.5, is-buffer@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" + integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== + +is-buffer@~2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.5.tgz#ebc252e400d22ff8d77fa09888821a24a658c191" + integrity sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ== + +is-callable@^1.2.7: + version "1.2.7" + resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" + integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== + +is-ci@^1.0.10: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.2.1.tgz#e3779c8ee17fccf428488f6e281187f2e632841c" + integrity sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg== + dependencies: + ci-info "^1.5.0" + +is-class-hotfix@~0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/is-class-hotfix/-/is-class-hotfix-0.0.6.tgz#a527d31fb23279281dde5f385c77b5de70a72435" + integrity sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ== + +is-core-module@^2.16.1: + version "2.16.2" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.2.tgz#3e07450a8080ebce3fbf0cac494f4d2ab324e082" + integrity sha512-evOr8xfXKxE6qSR0hSXL2r3sd7ALj8+7jQEUvPYcm5sgZFdJ+AYzT6yNmJenvIYQBgIGwfwz08sL8zoL7yq2BA== + dependencies: + hasown "^2.0.3" + +is-data-descriptor@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.1.tgz#2109164426166d32ea38c405c1e0945d9e6a4eeb" + integrity sha512-bc4NlCDiCr28U4aEsQ3Qs2491gVq4V8G7MQyws968ImqjKuYtTJXrl7Vq7jsN7Ly/C3xj5KWFrY7sHNeDkAzXw== + dependencies: + hasown "^2.0.0" + +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== + dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + is-typed-array "^1.1.13" + +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== + dependencies: + call-bound "^1.0.2" + has-tostringtag "^1.0.2" + +is-descriptor@^0.1.0: + version "0.1.8" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.8.tgz#c1ea9d2fb20cd51e812e438a455a7f78443a5a17" + integrity sha512-SceYGWXvdqlWa/OnQ5FQuV+NxvNmMRhMw/w9AHkH71hTzveND4BTYgvp16g+oITK47qbOl/3D0bl0iygehWAWQ== + dependencies: + is-accessor-descriptor "^1.0.1" + is-data-descriptor "^1.0.1" + +is-descriptor@^1.0.0, is-descriptor@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.4.tgz#7934d74f609d0dbe754b80186d501026a78739b5" + integrity sha512-bv5z95W0dDtLfKwDfkTNxaRxmISBD3eQBKJeVxv2AQ7MjuUnDNG7cIQqvFtMOUYhsILWHhMayWdoGqNqYYYjww== + dependencies: + is-accessor-descriptor "^1.0.2" + is-data-descriptor "^1.0.1" + +is-extendable@^0.1.0, is-extendable@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" + integrity sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw== + +is-extendable@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" + integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== + dependencies: + is-plain-object "^2.0.4" + +is-extglob@^2.1.0, is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-function@^1.0.10, is-generator-function@^1.0.7: + version "1.1.2" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.2.tgz#ae3b61e3d5ea4e4839b90bad22b02335051a17d5" + integrity sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA== + dependencies: + call-bound "^1.0.4" + generator-function "^2.0.0" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-glob@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" + integrity sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw== + dependencies: + is-extglob "^2.1.0" + +is-glob@^4.0.0, is-glob@^4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-installed-globally@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.1.0.tgz#0dfd98f5a9111716dd535dda6492f67bf3d25a80" + integrity sha512-ERNhMg+i/XgDwPIPF3u24qpajVreaiSuvpb1Uu0jugw7KKcxGyCX8cgp8P5fwTmAuXku6beDHHECdKArjlg7tw== + dependencies: + global-dirs "^0.1.0" + is-path-inside "^1.0.0" + +is-map@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== + +is-negative-zero@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" + integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + +is-npm@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-1.0.0.tgz#f2fb63a65e4905b406c86072765a1a4dc793b9f4" + integrity sha512-9r39FIr3d+KD9SbX0sfMsHzb5PP3uimOiwr3YupUaUFG4W0l1U57Rx3utpttV7qz5U3jmrO5auUa04LU9pyHsg== + +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-number@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" + integrity sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg== + dependencies: + kind-of "^3.0.2" + +is-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" + integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== + +is-path-inside@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.1.tgz#8ef5b7de50437a3fdca6b4e865ef7aa55cb48036" + integrity sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g== + dependencies: + path-is-inside "^1.0.1" + +is-plain-object@^2.0.3, is-plain-object@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" + integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== + dependencies: + isobject "^3.0.1" + +is-property@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" + integrity sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g== + +is-redirect@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" + integrity sha512-cr/SlUEe5zOGmzvj9bUyC4LVvkNVAXu4GytXLNMr1pny+a65MpQ9IJzFHD5vi7FyJgb4qt27+eS3TuQnqB+RQw== + +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== + dependencies: + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +is-retry-allowed@^1.0.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" + integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== + +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== + dependencies: + call-bound "^1.0.3" + +is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== + dependencies: + call-bound "^1.0.3" + has-tostringtag "^1.0.2" + +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== + dependencies: + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" + +is-type-of@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/is-type-of/-/is-type-of-1.4.0.tgz#3ed175a0eee888b1da4983332e7714feb8a8fb2b" + integrity sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ== + dependencies: + core-util-is "^1.0.2" + is-class-hotfix "~0.0.6" + isstream "~0.1.2" + +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15, is-typed-array@^1.1.3: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== + dependencies: + which-typed-array "^1.1.16" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== + dependencies: + call-bound "^1.0.3" + +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== + dependencies: + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-windows@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" + integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== + +isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isarray@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" + integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isobject@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" + integrity sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA== + dependencies: + isarray "1.0.0" + +isobject@^3.0.0, isobject@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" + integrity sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" + integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== + +istanbul-lib-hook@^2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" + integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== + dependencies: + append-transform "^1.0.0" + +istanbul-lib-instrument@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" + integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== + dependencies: + "@babel/generator" "^7.4.0" + "@babel/parser" "^7.4.3" + "@babel/template" "^7.4.0" + "@babel/traverse" "^7.4.3" + "@babel/types" "^7.4.0" + istanbul-lib-coverage "^2.0.5" + semver "^6.0.0" + +istanbul-lib-report@^2.0.8: + version "2.0.8" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" + integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== + dependencies: + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + supports-color "^6.1.0" + +istanbul-lib-source-maps@^3.0.6: + version "3.0.6" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" + integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^2.0.5" + make-dir "^2.1.0" + rimraf "^2.6.3" + source-map "^0.6.1" + +istanbul-reports@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" + integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== + dependencies: + html-escaper "^2.0.0" + +jmespath@0.16.0: + version "0.16.0" + resolved "https://registry.yarnpkg.com/jmespath/-/jmespath-0.16.0.tgz#b15b0a85dfd4d930d43e69ed605943c802785076" + integrity sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw== + +js-base64@^2.5.2: + version "2.6.4" + resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.6.4.tgz#f4e686c5de1ea1f867dbcad3d46d969428df98c4" + integrity sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ== + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@3.13.1: + version "3.13.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" + integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^3.13.1: + version "3.14.2" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.2.tgz#77485ce1dd7f33c061fd1b16ecea23b55fcb04b0" + integrity sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +json-bigint@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-bigint/-/json-bigint-1.0.0.tgz#ae547823ac0cad8398667f8cd9ef4730f5b01ff1" + integrity sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ== + dependencies: + bignumber.js "^9.0.0" + +json-edm-parser@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/json-edm-parser/-/json-edm-parser-0.1.2.tgz#1e60b0fef1bc0af67bc0d146dfdde5486cd615b4" + integrity sha512-J1U9mk6lf8dPULcaMwALXB6yel3cJyyhk9Z8FQ4sMwiazNwjaUhegIcpZyZFNMvLRtnXwh+TkCjX9uYUObBBYA== + dependencies: + jsonparse "~1.2.0" + +json-parse-better-errors@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" + integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema@0.4.0, json-schema@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +jsonparse@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.2.0.tgz#5c0c5685107160e72fe7489bddea0b44c2bc67bd" + integrity sha512-LkDEYtKnPFI9hQ/IURETe6F1dUH80cbRkaF6RaViSwoSNPwaxQpi6TgJGvJKyLQ2/9pQW+XCxK3hBoR44RAjkg== + +jsonwebtoken@^9.0.2: + version "9.0.3" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.3.tgz#6cd57ab01e9b0ac07cb847d53d3c9b6ee31f7ae2" + integrity sha512-MT/xP0CrubFRNLNKvxJ2BYfy53Zkm++5bX9dtuPbqAeQpTVe0MQTFhao8+Cp//EmJp244xt6Drw/GVEGCUj40g== + dependencies: + jws "^4.0.1" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jsprim@^1.2.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.2.tgz#712c65533a15c878ba59e9ed5f0e26d5b77c5feb" + integrity sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jstoxml@^2.0.0: + version "2.2.9" + resolved "https://registry.yarnpkg.com/jstoxml/-/jstoxml-2.2.9.tgz#2eebd5e55383fe66a375022ca0aa88f77bc4fb84" + integrity sha512-OYWlK0j+roh+eyaMROlNbS5cd5R25Y+IUpdl7cNdB8HNrkgwQzIS7L9MegxOiWNBj9dQhA/yAxiMwCC5mwNoBw== + +jwa@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.2.tgz#16011ac6db48de7b102777e57897901520eec7b9" + integrity sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw== + dependencies: + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jwa@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.1.tgz#bf8176d1ad0cd72e0f3f58338595a13e110bc804" + integrity sha512-hRF04fqJIP8Abbkq5NKGN0Bbr3JxlQ+qhZufXVr0DvujKy93ZCbXZMHDL4EOtodSbCWxOqR8MS1tXA5hwqCXDg== + dependencies: + buffer-equal-constant-time "^1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@3.x.x: + version "3.2.3" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.3.tgz#5ac0690b460900a27265de24520526853c0b8ca1" + integrity sha512-byiJ0FLRdLdSVSReO/U4E7RoEyOCKnEnEPMjq3HxWtvzLsV08/i5RQKsFVNkCldrCaPr2vDNAOMsfs8T/Hze7g== + dependencies: + jwa "^1.4.2" + safe-buffer "^5.0.1" + +jws@^4.0.0, jws@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.1.tgz#07edc1be8fac20e677b283ece261498bd38f0690" + integrity sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA== + dependencies: + jwa "^2.0.1" + safe-buffer "^5.0.1" + +kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" + integrity sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ== + dependencies: + is-buffer "^1.1.5" + +kind-of@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" + integrity sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw== + dependencies: + is-buffer "^1.1.5" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kitx@^1.2.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/kitx/-/kitx-1.3.0.tgz#ab3ee7c598d2b1d629fd55568f868c4440c200ea" + integrity sha512-fhBqFlXd0GkKTB+8ayLfpzPUw+LHxZlPAukPNBD1Om7JMeInT+/PxCAf1yLagvD+VKoyWhXtJR68xQkX/a0wOQ== + +kleur@^4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +latest-version@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/latest-version/-/latest-version-3.1.0.tgz#a205383fea322b33b5ae3b18abee0dc2f356ee15" + integrity sha512-Be1YRHWWlZaSsrz2U+VInk+tO0EwLIyV+23RhWLINJYwg/UIikxjlj3MhH37/6/EDCAusjajvMkMMUXRaMWl/w== + dependencies: + package-json "^4.0.0" + +levn@^0.3.0, levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +load-json-file@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" + integrity sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw== + dependencies: + graceful-fs "^4.1.2" + parse-json "^4.0.0" + pify "^3.0.0" + strip-bom "^3.0.0" + +locate-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" + integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== + dependencies: + p-locate "^3.0.0" + path-exists "^3.0.0" + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.19, lodash@^4.17.21: + version "4.18.1" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c" + integrity sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q== + +log-symbols@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + +lowercase-keys@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +"lru-cache@npm:@wolfy1339/lru-cache@^11.0.2-patch.1": + version "11.0.2-patch.1" + resolved "https://registry.yarnpkg.com/@wolfy1339/lru-cache/-/lru-cache-11.0.2-patch.1.tgz#bb648b660478099c9022ee71a00b80603daf7294" + integrity sha512-BgYZfL2ADCXKOw2wJtkM3slhHotawWkgIRRxq4wEybnZQPjvAp71SPX35xepMykTw8gXlzWcWPTY31hlbnRsDA== + +make-dir@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" + integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== + dependencies: + pify "^3.0.0" + +make-dir@^2.0.0, make-dir@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" + integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== + dependencies: + pify "^4.0.1" + semver "^5.6.0" + +map-cache@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" + integrity sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg== + +map-visit@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" + integrity sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w== + dependencies: + object-visit "^1.0.0" + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +merge-descriptors@^1.0.1: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge-source-map@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" + integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== + dependencies: + source-map "^0.6.1" + +micromatch@^3.1.10, micromatch@^3.1.4: + version "3.1.10" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" + integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + braces "^2.3.1" + define-property "^2.0.2" + extend-shallow "^3.0.2" + extglob "^2.0.4" + fragment-cache "^0.2.1" + kind-of "^6.0.2" + nanomatch "^1.2.9" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.2" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@~2.1.19: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@^2.4.5, mime@^2.5.2: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +minimatch@3.0.4: + version "3.0.4" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" + integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^10.2.2: + version "10.2.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.2.5.tgz#bd48687a0be38ed2961399105600f832095861d1" + integrity sha512-MULkVLfKGYDFYejP07QOurDLLQpcjk7Fw+7jXS2R2czRQzR56yHRveU5NDJEOviH+hETZKSkIk5c+T23GjFUMg== + dependencies: + brace-expansion "^5.0.5" + +minimatch@^3.0.4, minimatch@^3.1.1: + version "3.1.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.5.tgz#580c88f8d5445f2bd6aa8f3cadefa0de79fbd69e" + integrity sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w== + dependencies: + brace-expansion "^1.1.7" + +minimist@^1.1.0, minimist@^1.2.0, minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mixin-deep@^1.2.0: + version "1.3.2" + resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" + integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== + dependencies: + for-in "^1.0.2" + is-extendable "^1.0.1" + +mixme@^0.5.1: + version "0.5.10" + resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.10.tgz#d653b2984b75d9018828f1ea333e51717ead5f51" + integrity sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q== + +mkdirp@0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" + integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== + dependencies: + minimist "^1.2.5" + +mkdirp@^0.5.0, mkdirp@^0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mocha@^6.1.4: + version "6.2.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-6.2.3.tgz#e648432181d8b99393410212664450a4c1e31912" + integrity sha512-0R/3FvjIGH3eEuG17ccFPk117XL2rWxatr81a57D+r/x2uTYZRbdZ4oVidEUMh2W2TJDa7MdAb12Lm2/qrKajg== + dependencies: + ansi-colors "3.2.3" + browser-stdout "1.3.1" + debug "3.2.6" + diff "3.5.0" + escape-string-regexp "1.0.5" + find-up "3.0.0" + glob "7.1.3" + growl "1.10.5" + he "1.2.0" + js-yaml "3.13.1" + log-symbols "2.2.0" + minimatch "3.0.4" + mkdirp "0.5.4" + ms "2.1.1" + node-environment-flags "1.0.5" + object.assign "4.1.0" + strip-json-comments "2.0.1" + supports-color "6.0.0" + which "1.3.1" + wide-align "1.1.3" + yargs "13.3.2" + yargs-parser "13.1.2" + yargs-unparser "1.6.0" + +moment@^2.21.0: + version "2.30.1" + resolved "https://registry.yarnpkg.com/moment/-/moment-2.30.1.tgz#f8c91c07b7a786e30c59926df530b4eac96974ae" + integrity sha512-uEmtNhbDOrWPFS+hdjFCBfy9f2YoyzRpwcl+DqpC6taX21FzsTLQVbMV/W7PzNSX6x/bhC1zA3c2UQ5NzH6how== + +ms-rest-azure@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/ms-rest-azure/-/ms-rest-azure-3.0.2.tgz#9cf05358485a51f1ac207f6691217a043b069483" + integrity sha512-6bPqcMw1gAGhMZzLJDdxdz78HctzEX9qKRDJf4zWmDAYC4KwajoGApK5EtuSuu3+ysysFEORvDSD4sOuzYvCIQ== + dependencies: + adal-node "^0.2.2" + async "^2.6.4" + ms-rest "^2.3.2" + request "^2.88.0" + uuid "^3.2.1" + +ms-rest@^2.3.2: + version "2.5.6" + resolved "https://registry.yarnpkg.com/ms-rest/-/ms-rest-2.5.6.tgz#14de759426438ea038c3eb278b664740ae60d6d9" + integrity sha512-3Scy/pF43wqPEPeJxhOsLs16m6Rt+9zqf+jKdg+guuonytKmFSxerQM2exlQIDTqFVTsLXrPEGFWTGSwivRRkA== + dependencies: + ajv "6.12.3" + duplexer "^0.1.1" + http-signature "1.3.6" + is-buffer "^1.1.6" + is-stream "^1.1.0" + moment "^2.21.0" + request "^2.88.2" + through "^2.3.8" + tunnel "0.0.5" + uuid "^3.2.1" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" + integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== + +ms@^2.0.0, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" + integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== + +mz@^2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/mz/-/mz-2.7.0.tgz#95008057a56cafadc2bc63dde7f9ff6955948e32" + integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== + dependencies: + any-promise "^1.0.0" + object-assign "^4.0.1" + thenify-all "^1.0.0" + +nan@^2.12.1: + version "2.27.0" + resolved "https://registry.yarnpkg.com/nan/-/nan-2.27.0.tgz#804e389f4c0e39b729a17eca85c80ebc4355c4c4" + integrity sha512-hC+0LidcL3XE4rp1C4H54KujgXKzbfyTngZTwBByQxsOxCEKZT0MPQ4hOKUH2jU1OYstqdDH4onyHPDzcV0XdQ== + +nanomatch@^1.2.9: + version "1.2.13" + resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" + integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== + dependencies: + arr-diff "^4.0.0" + array-unique "^0.3.2" + define-property "^2.0.2" + extend-shallow "^3.0.2" + fragment-cache "^0.2.1" + is-windows "^1.0.2" + kind-of "^6.0.2" + object.pick "^1.3.0" + regex-not "^1.0.0" + snapdragon "^0.8.1" + to-regex "^3.0.1" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ndjson@^1.3.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-1.5.0.tgz#ae603b36b134bcec347b452422b0bf98d5832ec8" + integrity sha512-hUPLuaziboGjNF7wHngkgVc0FOclR8dDk/HfEvTtDr/iUrqBWiRcRSTK3/nLOqKH33th714BrMmTPtObI9gZxQ== + dependencies: + json-stringify-safe "^5.0.1" + minimist "^1.2.0" + split2 "^2.1.0" + through2 "^2.0.3" + +nested-error-stacks@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/nested-error-stacks/-/nested-error-stacks-2.1.1.tgz#26c8a3cee6cc05fbcf1e333cd2fc3e003326c0b5" + integrity sha512-9iN1ka/9zmX1ZvLV9ewJYEk9h7RyRRtqdK0woXcqohu8EWIerfPUjYJPg0ULy0UqP7cslmdGc8xKDJcojlKiaw== + +nice-try@^1.0.4: + version "1.0.5" + resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" + integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== + +node-environment-flags@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/node-environment-flags/-/node-environment-flags-1.0.5.tgz#fa930275f5bf5dae188d6192b24b4c8bbac3d76a" + integrity sha512-VNYPRfGfmZLx0Ye20jWzHUjyTW/c+6Wq+iLhDzUI4XmhrDd9l/FozXV3F2xOaXjvp0co0+v1YSR3CMP6g+VvLQ== + dependencies: + object.getownpropertydescriptors "^2.0.3" + semver "^5.7.0" + +node-fetch@^2.6.9: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + +node-forge@^1.3.1: + version "1.4.0" + resolved "https://registry.yarnpkg.com/node-forge/-/node-forge-1.4.0.tgz#1c7b7d8bdc2d078739f58287d589d903a11b2fc2" + integrity sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ== + +node-hex@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/node-hex/-/node-hex-1.0.1.tgz#606208e91f9c02b9b81531b692b9f1da4860fb24" + integrity sha512-iwpZdvW6Umz12ICmu9IYPRxg0tOLGmU3Tq2tKetejCj3oZd7b2nUXwP3a7QA5M9glWy8wlPS1G3RwM/CdsUbdQ== + +nodemon@^1.19.4: + version "1.19.4" + resolved "https://registry.yarnpkg.com/nodemon/-/nodemon-1.19.4.tgz#56db5c607408e0fdf8920d2b444819af1aae0971" + integrity sha512-VGPaqQBNk193lrJFotBU8nvWZPqEZY2eIzymy2jjY0fJ9qIsxA0sxQ8ATPl0gZC645gijYEc1jtZvpS8QWzJGQ== + dependencies: + chokidar "^2.1.8" + debug "^3.2.6" + ignore-by-default "^1.0.1" + minimatch "^3.0.4" + pstree.remy "^1.1.7" + semver "^5.7.1" + supports-color "^5.5.0" + touch "^3.1.0" + undefsafe "^2.0.2" + update-notifier "^2.5.0" + +normalize-package-data@^2.3.2: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-path@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" + integrity sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w== + dependencies: + remove-trailing-separator "^1.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +nyc@^14.1.1: + version "14.1.1" + resolved "https://registry.yarnpkg.com/nyc/-/nyc-14.1.1.tgz#151d64a6a9f9f5908a1b73233931e4a0a3075eeb" + integrity sha512-OI0vm6ZGUnoGZv/tLdZ2esSVzDwUC88SNs+6JoSOMVxA+gKMB8Tk7jBwgemLx4O40lhhvZCVw1C+OYLOBOPXWw== + dependencies: + archy "^1.0.0" + caching-transform "^3.0.2" + convert-source-map "^1.6.0" + cp-file "^6.2.0" + find-cache-dir "^2.1.0" + find-up "^3.0.0" + foreground-child "^1.5.6" + glob "^7.1.3" + istanbul-lib-coverage "^2.0.5" + istanbul-lib-hook "^2.0.7" + istanbul-lib-instrument "^3.3.0" + istanbul-lib-report "^2.0.8" + istanbul-lib-source-maps "^3.0.6" + istanbul-reports "^2.2.4" + js-yaml "^3.13.1" + make-dir "^2.1.0" + merge-source-map "^1.1.0" + resolve-from "^4.0.0" + rimraf "^2.6.3" + signal-exit "^3.0.2" + spawn-wrap "^1.4.2" + test-exclude "^5.2.3" + uuid "^3.3.2" + yargs "^13.2.2" + yargs-parser "^13.0.0" + +oauth-sign@~0.9.0: + version "0.9.0" + resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" + integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== + +object-assign@^4.0.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-copy@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" + integrity sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ== + dependencies: + copy-descriptor "^0.1.0" + define-property "^0.2.5" + kind-of "^3.0.3" + +object-inspect@^1.13.3, object-inspect@^1.13.4: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +object-keys@^1.0.11, object-keys@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +object-visit@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" + integrity sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA== + dependencies: + isobject "^3.0.0" + +object.assign@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" + integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== + dependencies: + define-properties "^1.1.2" + function-bind "^1.1.1" + has-symbols "^1.0.0" + object-keys "^1.0.11" + +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" + object-keys "^1.1.1" + +object.getownpropertydescriptors@^2.0.3: + version "2.1.9" + resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.9.tgz#bf9e7520f14d50de88dee2b9c9eca841166322dc" + integrity sha512-mt8YM6XwsTTovI+kdZdHSxoyF2DI59up034orlC9NfweclcWOt7CVascNNLp6U+bjFVCVCIh9PwS76tDM/rH8g== + dependencies: + array.prototype.reduce "^1.0.8" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.24.0" + es-object-atoms "^1.1.1" + gopd "^1.2.0" + safe-array-concat "^1.1.3" + +object.pick@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" + integrity sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ== + dependencies: + isobject "^3.0.1" + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +optionator@^0.8.3: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +os-homedir@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ== + +os-name@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/os-name/-/os-name-1.0.3.tgz#1b379f64835af7c5a7f498b357cb95215c159edf" + integrity sha512-f5estLO2KN8vgtTRaILIgEGBoBrMnZ3JQ7W9TMZCnOIGwHe8TRGSpcagnWDo+Dfhd/z08k9Xe75hvciJJ8Qaew== + dependencies: + osx-release "^1.0.0" + win-release "^1.0.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +osx-release@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/osx-release/-/osx-release-1.1.0.tgz#f217911a28136949af1bf9308b241e2737d3cd6c" + integrity sha512-ixCMMwnVxyHFQLQnINhmIpWqXIfS2YOXchwQrk+OFzmo6nDjQ0E4KXAyyUh0T0MZgV4bUhkRrAbVqlE4yLVq4A== + dependencies: + minimist "^1.1.0" + +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.0.0, p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-locate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" + integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== + dependencies: + p-limit "^2.0.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +package-hash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" + integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== + dependencies: + graceful-fs "^4.1.15" + hasha "^3.0.0" + lodash.flattendeep "^4.4.0" + release-zalgo "^1.0.0" + +package-json@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/package-json/-/package-json-4.0.1.tgz#8869a0401253661c4c4ca3da6c2121ed555f5eed" + integrity sha512-q/R5GrMek0vzgoomq6rm9OX+3PQve8sLwTirmK30YB3Cu0Bbt9OX9M/SIUnroN5BGJkzwGsFwDaRGD9EwBOlCA== + dependencies: + got "^6.7.1" + registry-auth-token "^3.0.1" + registry-url "^3.0.3" + semver "^5.1.0" + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" + integrity sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw== + dependencies: + error-ex "^1.3.1" + json-parse-better-errors "^1.0.1" + +pascalcase@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" + integrity sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw== + +path-dirname@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" + integrity sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q== + +path-exists@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" + integrity sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-expression-matcher@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/path-expression-matcher/-/path-expression-matcher-1.5.0.tgz#3b98545dc88ffebb593e2d8458d0929da9275f4a" + integrity sha512-cbrerZV+6rvdQrrD+iGMcZFEiiSrbv9Tfdkvnusy6y0x0GKBXREFg/Y65GhIfm0tnLntThhzCnfKwp1WRjeCyQ== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-is-inside@^1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" + integrity sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w== + +path-key@^2.0.0, path-key@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" + integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== + dependencies: + pify "^3.0.0" + +pathval@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pause-stream@~0.0.11: + version "0.0.11" + resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" + integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== + dependencies: + through "~2.3" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +pkg-dir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" + integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== + dependencies: + find-up "^3.0.0" + +platform@^1.3.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.6.tgz#48b4ce983164b209c2d45a107adb31f473a6e7a7" + integrity sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg== + +posix-character-classes@^0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" + integrity sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg== + +possible-typed-array-names@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prepend-http@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" + integrity sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +progress@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.28: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +pstree.remy@^1.1.7: + version "1.1.8" + resolved "https://registry.yarnpkg.com/pstree.remy/-/pstree.remy-1.1.8.tgz#c242224f4a67c21f686839bbdb4ac282b8373d3a" + integrity sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w== + +pump@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.4.tgz#1f313430527fa8b905622ebd22fe1444e757ab3c" + integrity sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +punycode@1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" + integrity sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw== + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +qs@^6.4.0: + version "6.15.2" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.15.2.tgz#fd55426d710403ddccc45e0f9eab16db7727ece9" + integrity sha512-Rzq0KEyX/w/tEybncDgdkZrJgVUsUMk3xjh3t5bv3S1HTAtg+uOYt72+ZfwiQwKdysThkTBdL/rTi6HDmX9Ddw== + dependencies: + side-channel "^1.1.0" + +qs@~6.5.2: + version "6.5.5" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.5.tgz#7c9442fc3f1c58bb52ac57ad09db63ba68916395" + integrity sha512-mzR4sElr1bfCaPJe7m8ilJ6ZXdDaGoObcYR0ZHSsktM/Lt21MVHj5De30GQH2eiZ1qGRTO7LCAzQsUeXTNexWQ== + +querystring@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" + integrity sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g== + +rc@^1.0.1, rc@^1.1.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" + integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== + dependencies: + deep-extend "^0.6.0" + ini "~1.3.0" + minimist "^1.2.0" + strip-json-comments "~2.0.1" + +read-pkg-up@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" + integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== + dependencies: + find-up "^3.0.0" + read-pkg "^3.0.0" + +read-pkg@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" + integrity sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA== + dependencies: + load-json-file "^4.0.0" + normalize-package-data "^2.3.2" + path-type "^3.0.0" + +readable-stream@^2.0.0, readable-stream@^2.0.2, readable-stream@^2.3.6, readable-stream@^2.3.8, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" + integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== + dependencies: + graceful-fs "^4.1.11" + micromatch "^3.1.10" + readable-stream "^2.0.2" + +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regex-not@^1.0.0, regex-not@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" + integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== + dependencies: + extend-shallow "^3.0.2" + safe-regex "^1.1.0" + +regexp.prototype.flags@^1.5.4: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-errors "^1.3.0" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" + +regexpp@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" + integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== + +registry-auth-token@^3.0.1: + version "3.4.0" + resolved "https://registry.yarnpkg.com/registry-auth-token/-/registry-auth-token-3.4.0.tgz#d7446815433f5d5ed6431cd5dca21048f66b397e" + integrity sha512-4LM6Fw8eBQdwMYcES4yTnn2TqIasbXuwDx3um+QRs7S55aMKCBKBxvPXl2RiUjHwuJLTyYfxSpmfSAjQpcuP+A== + dependencies: + rc "^1.1.6" + safe-buffer "^5.0.1" + +registry-url@^3.0.3: + version "3.1.0" + resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-3.1.0.tgz#3d4ef870f73dde1d77f0cf9a381432444e174942" + integrity sha512-ZbgR5aZEdf4UKZVBPYIgaglBmSF2Hi94s2PcIHhRGFjKYu+chjJdYfHn4rt3hB6eCKLJ8giVIIfgMa1ehDfZKA== + dependencies: + rc "^1.0.1" + +release-zalgo@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" + integrity sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA== + dependencies: + es6-error "^4.0.1" + +remove-trailing-separator@^1.0.1: + version "1.1.0" + resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" + integrity sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw== + +repeat-element@^1.1.2: + version "1.1.4" + resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.4.tgz#be681520847ab58c7568ac75fbfad28ed42d39e9" + integrity sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ== + +repeat-string@^1.6.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" + integrity sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w== + +request@^2.86.0, request@^2.88.0, request@^2.88.2: + version "2.88.2" + resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" + integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~2.3.2" + har-validator "~5.1.3" + http-signature "~1.2.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + oauth-sign "~0.9.0" + performance-now "^2.1.0" + qs "~6.5.2" + safe-buffer "^5.1.2" + tough-cookie "~2.5.0" + tunnel-agent "^0.6.0" + uuid "^3.3.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-main-filename@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" + integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-url@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" + integrity sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg== + +resolve@^1.10.0: + version "1.22.12" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.12.tgz#f5b2a680897c69c238a13cd16b15671f8b73549f" + integrity sha512-TyeJ1zif53BPfHootBGwPRYT1RUt6oGWsaQr8UyZW/eAm9bKoijtvruSDEmZHm92CwS9nj7/fWttqPCgzep8CA== + dependencies: + es-errors "^1.3.0" + is-core-module "^2.16.1" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +ret@~0.1.10: + version "0.1.15" + resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" + integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== + +rimraf@2.6.3: + version "2.6.3" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" + integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== + dependencies: + glob "^7.1.3" + +rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + +run-async@^2.4.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.1.tgz#8440eccf99ea3e70bd409d49aab88e10c189a455" + integrity sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ== + +rxjs@^6.6.0: + version "6.6.7" + resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.6.7.tgz#90ac018acabf491bf65044235d5863c4dab804c9" + integrity sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ== + dependencies: + tslib "^1.9.0" + +safe-array-concat@^1.1.3: + version "1.1.4" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.4.tgz#a54cc9b61a57f33b42abad3cbdda3a2b38cc5719" + integrity sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg== + dependencies: + call-bind "^1.0.9" + call-bound "^1.0.4" + get-intrinsic "^1.3.0" + has-symbols "^1.1.0" + isarray "^2.0.5" + +safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== + dependencies: + es-errors "^1.3.0" + isarray "^2.0.5" + +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +safe-regex@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" + integrity sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg== + dependencies: + ret "~0.1.10" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sax@0.5.x: + version "0.5.8" + resolved "https://registry.yarnpkg.com/sax/-/sax-0.5.8.tgz#d472db228eb331c2506b0e8c15524adb939d12c1" + integrity sha512-c0YL9VcSfcdH3F1Qij9qpYJFpKFKMXNOkLWFssBL3RuF7ZS8oZhllR2rWlCRjDTJsfq3R6wbSsaRU6o0rkEdNw== + +sax@1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.1.tgz#7b8e656190b228e81a66aea748480d828cd2d37a" + integrity sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA== + +sax@>=0.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/sax/-/sax-1.6.0.tgz#da59637629307b97e7c4cb28e080a7bc38560d5b" + integrity sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA== + +sdk-base@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/sdk-base/-/sdk-base-2.0.1.tgz#ba40289e8bdf272ed11dd9ea97eaf98e036d24c6" + integrity sha512-eeG26wRwhtwYuKGCDM3LixCaxY27Pa/5lK4rLKhQa7HBjJ3U3Y+f81MMZQRsDw/8SC2Dao/83yJTXJ8aULuN8Q== + dependencies: + get-ready "~1.0.0" + +semver-diff@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/semver-diff/-/semver-diff-2.1.0.tgz#4bbb8437c8d37e4b0cf1a68fd726ec6d645d6d36" + integrity sha512-gL8F8L4ORwsS0+iQ34yCYv///jsOq0ZL7WP55d1HnJ32o7tyFYEFQZQA22mrLIacZdU6xecaBBZ+uEiffGNyXw== + dependencies: + semver "^5.0.3" + +"semver@2 || 3 || 4 || 5", semver@^5.0.1, semver@^5.0.3, semver@^5.1.0, semver@^5.5.0, semver@^5.6.0, semver@^5.7.0, semver@^5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.0.0, semver@^6.1.2: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.5.4: + version "7.8.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.8.0.tgz#ed0661039fcbcda2ce71f01fa6adbefaa77040df" + integrity sha512-AcM7dV/5ul4EekoQ29Agm5vri8JNqRyj39o0qpX6vDF2GZrtutZl5RwgD1XnZjiTAfncsJhMI48QQH3sN87YNA== + +set-blocking@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" + integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw== + +set-function-length@^1.2.2: + version "1.2.2" + resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" + integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + function-bind "^1.1.2" + get-intrinsic "^1.2.4" + gopd "^1.0.1" + has-property-descriptors "^1.0.2" + +set-function-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" + integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== + dependencies: + define-data-property "^1.1.4" + es-errors "^1.3.0" + functions-have-names "^1.2.3" + has-property-descriptors "^1.0.2" + +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + +set-value@^2.0.0, set-value@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" + integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== + dependencies: + extend-shallow "^2.0.1" + is-extendable "^0.1.1" + is-plain-object "^2.0.3" + split-string "^3.0.1" + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +side-channel-list@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.1.tgz#c2e0b5a14a540aebee3bbc6c3f8666cc9b509127" + integrity sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.4" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +slice-ansi@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" + integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== + dependencies: + ansi-styles "^3.2.0" + astral-regex "^1.0.0" + is-fullwidth-code-point "^2.0.0" + +smartwrap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4" + integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA== + dependencies: + array.prototype.flat "^1.2.3" + breakword "^1.0.5" + grapheme-splitter "^1.0.4" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + yargs "^15.1.0" + +snapdragon-node@^2.0.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" + integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== + dependencies: + define-property "^1.0.0" + isobject "^3.0.0" + snapdragon-util "^3.0.1" + +snapdragon-util@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" + integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== + dependencies: + kind-of "^3.2.0" + +snapdragon@^0.8.1: + version "0.8.2" + resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" + integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== + dependencies: + base "^0.11.1" + debug "^2.2.0" + define-property "^0.2.5" + extend-shallow "^2.0.1" + map-cache "^0.2.2" + source-map "^0.5.6" + source-map-resolve "^0.5.0" + use "^3.1.0" + +source-map-resolve@^0.5.0: + version "0.5.3" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" + integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + resolve-url "^0.2.1" + source-map-url "^0.4.0" + urix "^0.1.0" + +source-map-url@^0.4.0: + version "0.4.1" + resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" + integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== + +source-map@^0.5.6: + version "0.5.7" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" + integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== + +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +spawn-wrap@^1.4.2: + version "1.4.3" + resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" + integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== + dependencies: + foreground-child "^1.5.6" + mkdirp "^0.5.0" + os-homedir "^1.0.1" + rimraf "^2.6.2" + signal-exit "^3.0.2" + which "^1.3.0" + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.23" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.23.tgz#b069e687b1291a32f126893ed76a27a745ee2133" + integrity sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw== + +split-string@^3.0.1, split-string@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" + integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== + dependencies: + extend-shallow "^3.0.0" + +split2@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-2.2.0.tgz#186b2575bcf83e85b7d18465756238ee4ee42493" + integrity sha512-RAb22TG39LhI31MbreBgIuKiIKhVsawfTgEGqKHTK87aG+ul/PB8Sqoi3I7kVdRWiCfrKxK3uo4/YUkpNvhPbw== + dependencies: + through2 "^2.0.2" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.14.1, sshpk@^1.7.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +static-extend@^0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" + integrity sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g== + dependencies: + define-property "^0.2.5" + object-copy "^0.1.0" + +statuses@^1.3.1: + version "1.5.0" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" + integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== + +stop-iteration-iterator@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz#f481ff70a548f6124d0312c3aa14cbfa7aa542ad" + integrity sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ== + dependencies: + es-errors "^1.3.0" + internal-slot "^1.1.0" + +stream-http@2.8.2: + version "2.8.2" + resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-2.8.2.tgz#4126e8c6b107004465918aa2fc35549e77402c87" + integrity sha512-QllfrBhqF1DPcz46WxKTs6Mz1Bpc+8Qm6vbqOpVav5odAXwbyzwnEczoWqtxrsmlO+cJqtPrp/8gWKWjaKLLlA== + dependencies: + builtin-status-codes "^3.0.0" + inherits "^2.0.1" + readable-stream "^2.3.6" + to-arraybuffer "^1.0.0" + xtend "^4.0.0" + +stream-transform@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3" + integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ== + dependencies: + mixme "^0.5.1" + +stream-wormhole@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/stream-wormhole/-/stream-wormhole-1.1.0.tgz#300aff46ced553cfec642a05251885417693c33d" + integrity sha512-gHFfL3px0Kctd6Po0M8TzEvt3De/xu6cnRrjlfYNhwbhLPLwigI2t1nc6jrzNuaYg5C4YF78PPFuQPzRiqn9ew== + +"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^3.0.0, string-width@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" + integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== + dependencies: + emoji-regex "^7.0.1" + is-fullwidth-code-point "^2.0.0" + strip-ansi "^5.1.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" + +string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== + dependencies: + call-bind "^1.0.8" + call-bound "^1.0.2" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string.prototype.trimstart@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz#7ee834dda8c7c17eff3118472bb35bfedaa34dde" + integrity sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg== + dependencies: + call-bind "^1.0.7" + define-properties "^1.2.1" + es-object-atoms "^1.0.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-json-comments@2.0.1, strip-json-comments@~2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" + integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ== + +strip-json-comments@^3.0.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strnum@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/strnum/-/strnum-2.3.0.tgz#81bfbfef53db8c3217ea62a98c026886ec4a2761" + integrity sha512-ums3KNd42PGyx5xaoVTO1mjU1bH3NpY4vsrVlnv9PNGqQj8wd7rJ6nEypLrJ7z5vxK5RP0yMLo6J/Gsm62DI5Q== + +supports-color@6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.0.0.tgz#76cfe742cf1f41bb9b1c29ad03068c05b4c0e40a" + integrity sha512-on9Kwidc1IUQo+bQdhi8+Tijpo0e1SS6RoGo2guUwn5vdaxw8RXOF9Vb2ws+ihWOmh4JnCJOvaziZWP1VABaLg== + dependencies: + has-flag "^3.0.0" + +supports-color@^5.3.0, supports-color@^5.5.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" + integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +table@^5.2.3: + version "5.4.6" + resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" + integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== + dependencies: + ajv "^6.10.2" + lodash "^4.17.14" + slice-ansi "^2.1.0" + string-width "^3.0.0" + +term-size@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/term-size/-/term-size-1.2.0.tgz#458b83887f288fc56d6fffbfad262e26638efa69" + integrity sha512-7dPUZQGy/+m3/wjVz3ZW5dobSoD/02NxJpoXUX0WIyjfVS3l0c+b/+9phIDFA7FHzkYtwtMFgeGZ/Y8jVTeqQQ== + dependencies: + execa "^0.7.0" + +test-exclude@^5.2.3: + version "5.2.3" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" + integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== + dependencies: + glob "^7.1.3" + minimatch "^3.0.4" + read-pkg-up "^4.0.0" + require-main-filename "^2.0.0" + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thenify-all@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/thenify-all/-/thenify-all-1.6.0.tgz#1a1918d402d8fc3f98fbf234db0bcc8cc10e9726" + integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== + dependencies: + thenify ">= 3.1.0 < 4" + +"thenify@>= 3.1.0 < 4": + version "3.3.1" + resolved "https://registry.yarnpkg.com/thenify/-/thenify-3.3.1.tgz#8932e686a4066038a016dd9e2ca46add9838a95f" + integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== + dependencies: + any-promise "^1.0.0" + +through2@^2.0.2, through2@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through@^2.3.6, through@^2.3.8, through@~2.3: + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +timed-out@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" + integrity sha512-G7r3AhovYtr5YKOWQkta8RKAPb+J9IsO4uVmzjl8AZwfhs8UcUwTiD6gcJYSgOtzyjvQKrKYn41syHbUWMkafA== + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-arraybuffer@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz#7d229b1fcc637e466ca081180836a7aabff83f43" + integrity sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA== + +to-buffer@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.2.2.tgz#ffe59ef7522ada0a2d1cb5dfe03bb8abc3cdc133" + integrity sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw== + dependencies: + isarray "^2.0.5" + safe-buffer "^5.2.1" + typed-array-buffer "^1.0.3" + +to-object-path@^0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" + integrity sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg== + dependencies: + kind-of "^3.0.2" + +to-regex-range@^2.1.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" + integrity sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg== + dependencies: + is-number "^3.0.0" + repeat-string "^1.6.1" + +to-regex@^3.0.1, to-regex@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" + integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== + dependencies: + define-property "^2.0.2" + extend-shallow "^3.0.2" + regex-not "^1.0.2" + safe-regex "^1.1.0" + +touch@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/touch/-/touch-3.1.1.tgz#097a23d7b161476435e5c1344a95c0f75b4a5694" + integrity sha512-r0eojU4bI8MnHr8c5bNo7lJDdI2qXlWWJk6a9EAFG7vbhTjElYhBVS3/miuE0uOuoLdb8Mc/rVfsmm6eo5o9GA== + +tough-cookie@~2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" + integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== + dependencies: + psl "^1.1.28" + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +tslib@^1.9.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tslib@^2.6.2, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tty-table@^4.1.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.2.3.tgz#e33eb4007a0a9c976c97c37fa13ba66329a5c515" + integrity sha512-Fs15mu0vGzCrj8fmJNP7Ynxt5J7praPXqFN0leZeZBXJwkMxv9cb2D454k1ltrtUSJbZ4yH4e0CynsHLxmUfFA== + dependencies: + chalk "^4.1.2" + csv "^5.5.3" + kleur "^4.1.5" + smartwrap "^2.0.2" + strip-ansi "^6.0.1" + wcwidth "^1.0.1" + yargs "^17.7.1" + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tunnel@0.0.5: + version "0.0.5" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.5.tgz#d1532254749ed36620fcd1010865495a1fa9d0ae" + integrity sha512-gj5sdqherx4VZKMcBA4vewER7zdK25Td+z1npBqpbDys4eJrLx+SlYjJvq1bDXs2irkuJM5pf8ktaEQVipkrbA== + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.0.5: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== + dependencies: + call-bound "^1.0.3" + es-errors "^1.3.0" + is-typed-array "^1.1.14" + +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== + dependencies: + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" + +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + for-each "^0.3.3" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" + +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== + dependencies: + call-bind "^1.0.7" + for-each "^0.3.3" + gopd "^1.0.1" + is-typed-array "^1.1.13" + possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" + +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== + dependencies: + call-bound "^1.0.3" + has-bigints "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" + +undefsafe@^2.0.2: + version "2.0.5" + resolved "https://registry.yarnpkg.com/undefsafe/-/undefsafe-2.0.5.tgz#38733b9327bdcd226db889fb723a6efd162e6e2c" + integrity sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA== + +"underscore@>= 1.3.1", underscore@^1.12.1: + version "1.13.8" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.8.tgz#a93a21186c049dbf0e847496dba72b7bd8c1e92b" + integrity sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ== + +"undici-types@>=7.24.0 <7.24.7": + version "7.24.6" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-7.24.6.tgz#61275b485d7fd4e9d269c7cf04ec2873c9cc0f91" + integrity sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +unescape@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/unescape/-/unescape-1.0.1.tgz#956e430f61cad8a4d57d82c518f5e6cc5d0dda96" + integrity sha512-O0+af1Gs50lyH1nUu3ZyYS1cRh01Q/kUKatTOkSs7jukXE6/NebucDVxyiDsA9AQ4JC1V1jUH9EO8JX2nMDgGQ== + dependencies: + extend-shallow "^2.0.1" + +union-value@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" + integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== + dependencies: + arr-union "^3.1.0" + get-value "^2.0.6" + is-extendable "^0.1.1" + set-value "^2.0.1" + +unique-string@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unique-string/-/unique-string-1.0.0.tgz#9e1057cca851abb93398f8b33ae187b99caec11a" + integrity sha512-ODgiYu03y5g76A1I9Gt0/chLCzQjvzDy7DsZGsLOE/1MrF6wriEskSncj1+/C58Xk/kPZDppSctDybCwOSaGAg== + dependencies: + crypto-random-string "^1.0.0" + +universal-github-app-jwt@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/universal-github-app-jwt/-/universal-github-app-jwt-1.2.0.tgz#1314cf2b2aff69d7ae998e8bff90d55a651d2949" + integrity sha512-dncpMpnsKBk0eetwfN8D8OUHGfiDhhJ+mtsbMl+7PfW7mYjiH8LIcqRmYMtzYLgSh47HjfdBtrBwIQ/gizKR3g== + dependencies: + "@types/jsonwebtoken" "^9.0.0" + jsonwebtoken "^9.0.2" + +universal-user-agent@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.1.tgz#15f20f55da3c930c57bddbf1734c6654d5fd35aa" + integrity sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ== + +unset-value@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" + integrity sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ== + dependencies: + has-value "^0.3.1" + isobject "^3.0.0" + +unzip-response@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" + integrity sha512-N0XH6lqDtFH84JxptQoZYmloF4nzrQqqrAymNj+/gW60AO2AZgOcf4O/nUXJcYfyQkqvMo9lSupBZmmgvuVXlw== + +upath@^1.1.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" + integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== + +update-notifier@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/update-notifier/-/update-notifier-2.5.0.tgz#d0744593e13f161e406acb1d9408b72cad08aff6" + integrity sha512-gwMdhgJHGuj/+wHJJs9e6PcCszpxR1b236igrOkUofGhqJuG+amlIKwApH1IW1WWl7ovZxsX49lMBWLxSdm5Dw== + dependencies: + boxen "^1.2.1" + chalk "^2.0.1" + configstore "^3.0.0" + import-lazy "^2.1.0" + is-ci "^1.0.10" + is-installed-globally "^0.1.0" + is-npm "^1.0.0" + latest-version "^3.0.0" + semver-diff "^2.0.0" + xdg-basedir "^3.0.0" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +urix@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" + integrity sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg== + +url-parse-lax@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" + integrity sha512-BVA4lR5PIviy2PMseNd2jbFQ+jwSwQGdJejf5ctd1rEXt0Ypd7yanUK9+lYechVlN5VaTJGsu2U/3MDDu6KgBA== + dependencies: + prepend-http "^1.0.1" + +url@0.10.3: + version "0.10.3" + resolved "https://registry.yarnpkg.com/url/-/url-0.10.3.tgz#021e4d9c7705f21bbf37d03ceb58767402774c64" + integrity sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ== + dependencies: + punycode "1.3.2" + querystring "0.2.0" + +urllib@^2.44.0: + version "2.44.0" + resolved "https://registry.yarnpkg.com/urllib/-/urllib-2.44.0.tgz#0da4b037550bdc03eb9a408de498fb4025ddc0b4" + integrity sha512-zRCJqdfYllRDA9bXUtx+vccyRqtJPKsw85f44zH7zPD28PIvjMqIgw9VwoTLV7xTBWZsbebUFVHU5ghQcWku2A== + dependencies: + any-promise "^1.3.0" + content-type "^1.0.2" + default-user-agent "^1.0.0" + digest-header "^1.0.0" + ee-first "~1.1.1" + formstream "^1.1.0" + humanize-ms "^1.2.0" + iconv-lite "^0.6.3" + pump "^3.0.0" + qs "^6.4.0" + statuses "^1.3.1" + utility "^1.16.1" + +use@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" + integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== + +util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +util@^0.12.4: + version "0.12.5" + resolved "https://registry.yarnpkg.com/util/-/util-0.12.5.tgz#5f17a6059b73db61a875668781a1c2b136bd6fbc" + integrity sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA== + dependencies: + inherits "^2.0.3" + is-arguments "^1.0.4" + is-generator-function "^1.0.7" + is-typed-array "^1.1.3" + which-typed-array "^1.1.2" + +utility@^1.16.1, utility@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/utility/-/utility-1.18.0.tgz#af55f62e6d5a272e0cb02b0ab3e7f37c46435f36" + integrity sha512-PYxZDA+6QtvRvm//++aGdmKG/cI07jNwbROz0Ql+VzFV1+Z0Dy55NI4zZ7RHc9KKpBePNFwoErqIuqQv/cjiTA== + dependencies: + copy-to "^2.0.1" + escape-html "^1.0.3" + mkdirp "^0.5.1" + mz "^2.7.0" + unescape "^1.0.1" + +uuid@8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.0.0.tgz#bc6ccf91b5ff0ac07bbcdbf1c7c4e150db4dbb6c" + integrity sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw== + +uuid@^3.0.0, uuid@^3.1.0, uuid@^3.2.1, uuid@^3.3.2: + version "3.4.0" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" + integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== + +v8-compile-cache@^2.0.3: + version "2.4.0" + resolved "https://registry.yarnpkg.com/v8-compile-cache/-/v8-compile-cache-2.4.0.tgz#cdada8bec61e15865f05d097c5f4fd30e94dc128" + integrity sha512-ocyWc3bAHBB/guyqJQVI5o4BZkPhznPYUG2ea80Gond/BgNWpap8TOmLSeeQG7bnh2KMISxskdADG59j7zruhw== + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validator@^13.7.0: + version "13.15.35" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.15.35.tgz#81cf455c51f15b69d8d340be5914f3fab00dbf7f" + integrity sha512-TQ5pAGhd5whStmqWvYF4OjQROlmv9SMFVt37qoCBdqRffuuklWYQlCNnEs2ZaIBD1kZRNnikiZOS1eqgkar0iw== + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== + dependencies: + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" + +which-module@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409" + integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ== + +which-typed-array@^1.1.16, which-typed-array@^1.1.19, which-typed-array@^1.1.2: + version "1.1.20" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.20.tgz#3fdb7adfafe0ea69157b1509f3a1cd892bd1d122" + integrity sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg== + dependencies: + available-typed-arrays "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + +which@1.3.1, which@^1.2.9, which@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +wide-align@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" + integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== + dependencies: + string-width "^1.0.2 || 2" + +widest-line@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-2.0.1.tgz#7438764730ec7ef4381ce4df82fb98a53142a3fc" + integrity sha512-Ba5m9/Fa4Xt9eb2ELXt77JxVDV8w7qQrH0zS/TWSJdLyAwQjWoOzpzj5lwVftDz6n/EOu3tNACS84v509qwnJA== + dependencies: + string-width "^2.1.1" + +win-release@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/win-release/-/win-release-1.1.1.tgz#5fa55e02be7ca934edfc12665632e849b72e5209" + integrity sha512-iCRnKVvGxOQdsKhcQId2PXV1vV3J/sDPXKA4Oe9+Eti2nb2ESEsYHRYls/UjoUW3bIc5ZDO8dTH50A/5iVN+bw== + dependencies: + semver "^5.0.1" + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wrap-ansi@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09" + integrity sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q== + dependencies: + ansi-styles "^3.2.0" + string-width "^3.0.0" + strip-ansi "^5.0.0" + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^2.0.0, write-file-atomic@^2.4.2: + version "2.4.3" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" + integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== + dependencies: + graceful-fs "^4.1.11" + imurmurhash "^0.1.4" + signal-exit "^3.0.2" + +write@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" + integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== + dependencies: + mkdirp "^0.5.1" + +xdg-basedir@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/xdg-basedir/-/xdg-basedir-3.0.0.tgz#496b2cc109eca8dbacfe2dc72b603c17c5870ad4" + integrity sha512-1Dly4xqlulvPD3fZUQJLY+FUIeqN3N2MM3uqe4rCJftAvOjFa3jFGfctOgluGx4ahPbUCsZkmJILiP0Vi4T6lQ== + +xml-naming@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/xml-naming/-/xml-naming-0.1.0.tgz#8ab7106c5b8d23caa2fabac1cadf17136379fbd8" + integrity sha512-k8KO9hrMyNk6tUWqUfkTEZbezRRpONVOzUTnc97VnCvyj6Tf9lyUR9EDAIeiVLv56jsMcoXEwjW8Kv5yPY52lw== + +xml2js@0.6.2, xml2js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.6.2.tgz#dd0b630083aa09c161e25a4d0901e2b2a929b499" + integrity sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xml2js@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" + integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== + dependencies: + sax ">=0.6.0" + xmlbuilder "~11.0.0" + +xml2js@~0.2.8: + version "0.2.8" + resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.2.8.tgz#9b81690931631ff09d1957549faf54f4f980b3c2" + integrity sha512-ZHZBIAO55GHCn2jBYByVPHvHS+o3j8/a/qmpEe6kxO3cTnTCWC3Htq9RYJ5G4XMwMMClD2QkXA9SNdPadLyn3Q== + dependencies: + sax "0.5.x" + +xmlbuilder@^9.0.7: + version "9.0.7" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-9.0.7.tgz#132ee63d2ec5565c557e20f4c22df9aca686b10d" + integrity sha512-7YXTQc3P2l9+0rjaUbLwMKRhtmwg1M1eDf6nag7urC7pIPYLD9W/jmzQ4ptRSUbodw5S0jfoGTflLemQibSpeQ== + +xmlbuilder@~11.0.0: + version "11.0.1" + resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" + integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== + +xpath.js@~1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/xpath.js/-/xpath.js-1.1.0.tgz#3816a44ed4bb352091083d002a383dd5104a5ff1" + integrity sha512-jg+qkfS4K8E7965sqaUl8mRngXiKb3WZGfONgE18pr03FUQiuSV6G+Ej4tS55B+rIQSFEIw3phdVAQ4pPqNWfQ== + +xtend@^4.0.0, xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf" + integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yargs-parser@13.1.2, yargs-parser@^13.0.0, yargs-parser@^13.1.2: + version "13.1.2" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-13.1.2.tgz#130f09702ebaeef2650d54ce6e3e5706f7a4fb38" + integrity sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + +yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-unparser@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-1.6.0.tgz#ef25c2c769ff6bd09e4b0f9d7c605fb27846ea9f" + integrity sha512-W9tKgmSn0DpSatfri0nx52Joq5hVXgeLiqR/5G0sZNDoLZFOr/xjBUDcShCOGNsBnEMNo1KAMBkTej1Hm62HTw== + dependencies: + flat "^4.1.0" + lodash "^4.17.15" + yargs "^13.3.0" + +yargs@13.3.2, yargs@^13.2.2, yargs@^13.3.0: + version "13.3.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.3.2.tgz#ad7ffefec1aa59565ac915f82dccb38a9c31a2dd" + integrity sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw== + dependencies: + cliui "^5.0.0" + find-up "^3.0.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^3.0.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^13.1.2" + +yargs@^15.1.0: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + +yargs@^17.7.1: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" From 721a1dcd3ddd9976f2699af8d2a7229d38cc7730 Mon Sep 17 00:00:00 2001 From: xeondesk Date: Tue, 11 Aug 2026 02:21:19 +0600 Subject: [PATCH 2/2] Replace fake KMS ciphertext in test with low-entropy placeholder --- plugins/aws/lambda/lambdaEnvSecrets.spec.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/aws/lambda/lambdaEnvSecrets.spec.js b/plugins/aws/lambda/lambdaEnvSecrets.spec.js index 3c83e7620..31a6d58f6 100644 --- a/plugins/aws/lambda/lambdaEnvSecrets.spec.js +++ b/plugins/aws/lambda/lambdaEnvSecrets.spec.js @@ -8,7 +8,7 @@ const listFunctions = [ "Environment": { "Variables": { "DATABASE_URL": "arn:aws:secretsmanager:us-east-1:000011112222:secret:db", - "API_KEY": "AQICAHgYvhTIHqe+Awrx6K5feBosORFD4FbhQ/XEyM9ERVB+yAF+yJdS1QYRvl9adezS+RnyAAAAaDBm", // KMS ciphertext + "API_KEY": "AQICAHkms-ciphertext-placeholder-value", // KMS ciphertext "DEBUG": "true", "PORT": "8080" }