@spottoai/types-package 1.0.2-dev1138.12 → 1.0.2-dev1138.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +0 -9
- package/dist/accounts/accounts.d.ts +5 -84
- package/dist/accounts/accounts.d.ts.map +1 -1
- package/dist/accounts/accounts.js +1 -2
- package/dist/accounts/accounts.js.map +1 -1
- package/dist/accounts/azureSpSetup.d.ts +31 -142
- package/dist/accounts/azureSpSetup.d.ts.map +1 -1
- package/dist/accounts/azureSpSetup.js +0 -15
- package/dist/accounts/azureSpSetup.js.map +1 -1
- package/dist/accounts/azureSpSetupDurable.d.ts +0 -8
- package/dist/accounts/azureSpSetupDurable.d.ts.map +1 -1
- package/dist/accounts/azureSpSetupDurable.js +0 -28
- package/dist/accounts/azureSpSetupDurable.js.map +1 -1
- package/dist/accounts/index.d.ts +0 -1
- package/dist/accounts/index.d.ts.map +1 -1
- package/dist/accounts/index.js +0 -1
- package/dist/accounts/index.js.map +1 -1
- package/dist/accounts/readPermissions.d.ts +1 -1
- package/dist/accounts/readPermissions.d.ts.map +1 -1
- package/dist/accounts/readPermissions.js.map +1 -1
- package/dist/accounts/validation.d.ts +0 -24
- package/dist/accounts/validation.d.ts.map +1 -1
- package/dist/ai/index.d.ts +6 -302
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +0 -25
- package/dist/ai/index.js.map +1 -1
- package/dist/aws/commitments-planning.d.ts +0 -5
- package/dist/aws/commitments-planning.d.ts.map +1 -1
- package/dist/aws/commitments-planning.js +0 -19
- package/dist/aws/commitments-planning.js.map +1 -1
- package/dist/aws/estates.d.ts +1 -1
- package/dist/aws/estates.d.ts.map +1 -1
- package/dist/aws/estates.js +1 -7
- package/dist/aws/estates.js.map +1 -1
- package/dist/aws/index.d.ts +0 -5
- package/dist/aws/index.d.ts.map +1 -1
- package/dist/aws/index.js +0 -5
- package/dist/aws/index.js.map +1 -1
- package/dist/aws/onboarding.d.ts +0 -3
- package/dist/aws/onboarding.d.ts.map +1 -1
- package/dist/aws/requests.d.ts +2 -13
- package/dist/aws/requests.d.ts.map +1 -1
- package/dist/aws/requests.js +1 -1
- package/dist/aws/requests.js.map +1 -1
- package/dist/azure/activityLogs.d.ts +0 -8
- package/dist/azure/activityLogs.d.ts.map +1 -1
- package/dist/azure/activityLogs.js.map +1 -1
- package/dist/azure/benefits.d.ts +1 -1
- package/dist/azure/benefits.d.ts.map +1 -1
- package/dist/azure/billingPlots.d.ts +1 -7
- package/dist/azure/billingPlots.d.ts.map +1 -1
- package/dist/azure/billingPlots.js +4 -45
- package/dist/azure/billingPlots.js.map +1 -1
- package/dist/azure/commitmentsPlanning.d.ts +2 -8
- package/dist/azure/commitmentsPlanning.d.ts.map +1 -1
- package/dist/azure/common.d.ts +5 -26
- package/dist/azure/common.d.ts.map +1 -1
- package/dist/azure/common.js +0 -30
- package/dist/azure/common.js.map +1 -1
- package/dist/azure/costComposition.d.ts +1 -11
- package/dist/azure/costComposition.d.ts.map +1 -1
- package/dist/azure/costComposition.js +1 -84
- package/dist/azure/costComposition.js.map +1 -1
- package/dist/azure/dataProtection.d.ts +4 -4
- package/dist/azure/dataProtection.d.ts.map +1 -1
- package/dist/azure/financialAnalytics.d.ts +8 -80
- package/dist/azure/financialAnalytics.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDelivery.d.ts +3 -72
- package/dist/azure/financialAnalyticsDelivery.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDelivery.js +1 -7
- package/dist/azure/financialAnalyticsDelivery.js.map +1 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.d.ts +1 -9
- package/dist/azure/financialAnalyticsDeliveryValidation.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsDeliveryValidation.js +10 -190
- package/dist/azure/financialAnalyticsDeliveryValidation.js.map +1 -1
- package/dist/azure/financialAnalyticsValidation.d.ts.map +1 -1
- package/dist/azure/financialAnalyticsValidation.js +19 -101
- package/dist/azure/financialAnalyticsValidation.js.map +1 -1
- package/dist/azure/financialAuthorityView.d.ts +0 -13
- package/dist/azure/financialAuthorityView.d.ts.map +1 -1
- package/dist/azure/financialAuthorityView.js.map +1 -1
- package/dist/azure/financialAuthorityViewValidation.d.ts +1 -3
- package/dist/azure/financialAuthorityViewValidation.d.ts.map +1 -1
- package/dist/azure/financialAuthorityViewValidation.js +2 -273
- package/dist/azure/financialAuthorityViewValidation.js.map +1 -1
- package/dist/azure/financialDataflow.d.ts +2 -45
- package/dist/azure/financialDataflow.d.ts.map +1 -1
- package/dist/azure/financialDataflow.js.map +1 -1
- package/dist/azure/financialDataflowValidation.d.ts +2 -5
- package/dist/azure/financialDataflowValidation.d.ts.map +1 -1
- package/dist/azure/financialDataflowValidation.js +30 -203
- package/dist/azure/financialDataflowValidation.js.map +1 -1
- package/dist/azure/financialEvidenceAssessmentValidation.d.ts.map +1 -1
- package/dist/azure/financialEvidenceAssessmentValidation.js +0 -7
- package/dist/azure/financialEvidenceAssessmentValidation.js.map +1 -1
- package/dist/azure/financialPolicy.d.ts +3 -19
- package/dist/azure/financialPolicy.d.ts.map +1 -1
- package/dist/azure/financialPolicy.js.map +1 -1
- package/dist/azure/financialPolicyDelivery.d.ts +1 -75
- package/dist/azure/financialPolicyDelivery.d.ts.map +1 -1
- package/dist/azure/financialPolicyDelivery.js +1 -5
- package/dist/azure/financialPolicyDelivery.js.map +1 -1
- package/dist/azure/financialPolicyDeliveryValidation.d.ts +2 -16
- package/dist/azure/financialPolicyDeliveryValidation.d.ts.map +1 -1
- package/dist/azure/financialPolicyDeliveryValidation.js +5 -238
- package/dist/azure/financialPolicyDeliveryValidation.js.map +1 -1
- package/dist/azure/financialPolicyValidation.d.ts +0 -1
- package/dist/azure/financialPolicyValidation.d.ts.map +1 -1
- package/dist/azure/financialPolicyValidation.js +16 -111
- package/dist/azure/financialPolicyValidation.js.map +1 -1
- package/dist/azure/financialProjection.d.ts +1 -11
- package/dist/azure/financialProjection.d.ts.map +1 -1
- package/dist/azure/financialProjection.js.map +1 -1
- package/dist/azure/financialProjectionValidation.d.ts.map +1 -1
- package/dist/azure/financialProjectionValidation.js +3 -43
- package/dist/azure/financialProjectionValidation.js.map +1 -1
- package/dist/azure/financialSavingsAuthority.d.ts +4 -68
- package/dist/azure/financialSavingsAuthority.d.ts.map +1 -1
- package/dist/azure/financialSavingsAuthority.js +1 -2
- package/dist/azure/financialSavingsAuthority.js.map +1 -1
- package/dist/azure/financialSavingsAuthorityValidation.d.ts +2 -6
- package/dist/azure/financialSavingsAuthorityValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsAuthorityValidation.js +2 -188
- package/dist/azure/financialSavingsAuthorityValidation.js.map +1 -1
- package/dist/azure/financialSavingsCoordinateValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsCoordinateValidation.js +19 -98
- package/dist/azure/financialSavingsCoordinateValidation.js.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjection.d.ts +3 -82
- package/dist/azure/financialSavingsSurfaceProjection.d.ts.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjection.js +1 -3
- package/dist/azure/financialSavingsSurfaceProjection.js.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjectionValidation.d.ts.map +1 -1
- package/dist/azure/financialSavingsSurfaceProjectionValidation.js +13 -199
- package/dist/azure/financialSavingsSurfaceProjectionValidation.js.map +1 -1
- package/dist/azure/financialScope.d.ts +0 -14
- package/dist/azure/financialScope.d.ts.map +1 -1
- package/dist/azure/financialScope.js +0 -14
- package/dist/azure/financialScope.js.map +1 -1
- package/dist/azure/financialScopeBaseline.d.ts +3 -11
- package/dist/azure/financialScopeBaseline.d.ts.map +1 -1
- package/dist/azure/financialScopeBaseline.js +1 -14
- package/dist/azure/financialScopeBaseline.js.map +1 -1
- package/dist/azure/financialScopeBaselineIdentity.d.ts.map +1 -1
- package/dist/azure/financialScopeBaselineIdentity.js +4 -24
- package/dist/azure/financialScopeBaselineIdentity.js.map +1 -1
- package/dist/azure/financialScopeBaselineValidation.d.ts.map +1 -1
- package/dist/azure/financialScopeBaselineValidation.js +4 -21
- package/dist/azure/financialScopeBaselineValidation.js.map +1 -1
- package/dist/azure/financialScopeEvidence.d.ts +1 -1
- package/dist/azure/financialScopeEvidence.d.ts.map +1 -1
- package/dist/azure/governance.d.ts +0 -145
- package/dist/azure/governance.d.ts.map +1 -1
- package/dist/azure/governance.js +1 -2
- package/dist/azure/governance.js.map +1 -1
- package/dist/azure/metrics.d.ts +2 -2
- package/dist/azure/metrics.d.ts.map +1 -1
- package/dist/azure/payloads.d.ts +1 -55
- package/dist/azure/payloads.d.ts.map +1 -1
- package/dist/azure/prices.d.ts +12 -41
- package/dist/azure/prices.d.ts.map +1 -1
- package/dist/azure/recommendationState.d.ts +1 -1
- package/dist/azure/recommendationState.d.ts.map +1 -1
- package/dist/azure/recommendations.d.ts +5 -141
- package/dist/azure/recommendations.d.ts.map +1 -1
- package/dist/azure/recommendations.js +1 -3
- package/dist/azure/recommendations.js.map +1 -1
- package/dist/azure/relationships.d.ts +1 -1
- package/dist/azure/relationships.d.ts.map +1 -1
- package/dist/azure/reports.d.ts +10 -32
- package/dist/azure/reports.d.ts.map +1 -1
- package/dist/azure/reports.js.map +1 -1
- package/dist/azure/resources.d.ts +12 -24
- package/dist/azure/resources.d.ts.map +1 -1
- package/dist/azure/serviceRetirement.d.ts +2 -33
- package/dist/azure/serviceRetirement.d.ts.map +1 -1
- package/dist/azure/storage-inventory.d.ts +0 -44
- package/dist/azure/storage-inventory.d.ts.map +1 -1
- package/dist/azure/subscriptions.d.ts +11 -57
- package/dist/azure/subscriptions.d.ts.map +1 -1
- package/dist/azure/subscriptions.js +0 -35
- package/dist/azure/subscriptions.js.map +1 -1
- package/dist/azure/views.d.ts +22 -86
- package/dist/azure/views.d.ts.map +1 -1
- package/dist/azure/views.js +1 -8
- package/dist/azure/views.js.map +1 -1
- package/dist/common/provider.d.ts +0 -53
- package/dist/common/provider.d.ts.map +1 -1
- package/dist/common/provider.js.map +1 -1
- package/dist/company/company.d.ts +0 -1
- package/dist/company/company.d.ts.map +1 -1
- package/dist/esm/accounts/accounts.js +0 -1
- package/dist/esm/accounts/azureSpSetup.js +1 -14
- package/dist/esm/accounts/azureSpSetupDurable.js +1 -27
- package/dist/esm/accounts/index.js +0 -1
- package/dist/esm/ai/index.js +1 -10
- package/dist/esm/aws/commitments-planning.js +0 -5
- package/dist/esm/aws/estates.js +1 -7
- package/dist/esm/aws/index.js +0 -5
- package/dist/esm/aws/requests.js +1 -1
- package/dist/esm/azure/billingPlots.js +4 -45
- package/dist/esm/azure/common.js +1 -28
- package/dist/esm/azure/costComposition.js +0 -80
- package/dist/esm/azure/financialAnalyticsDelivery.js +0 -5
- package/dist/esm/azure/financialAnalyticsDeliveryValidation.js +11 -184
- package/dist/esm/azure/financialAnalyticsValidation.js +19 -101
- package/dist/esm/azure/financialAuthorityViewValidation.js +1 -271
- package/dist/esm/azure/financialDataflowValidation.js +29 -199
- package/dist/esm/azure/financialEvidenceAssessmentValidation.js +0 -7
- package/dist/esm/azure/financialPolicyDelivery.js +0 -4
- package/dist/esm/azure/financialPolicyDeliveryValidation.js +7 -227
- package/dist/esm/azure/financialPolicyValidation.js +16 -110
- package/dist/esm/azure/financialProjectionValidation.js +3 -43
- package/dist/esm/azure/financialSavingsAuthority.js +0 -1
- package/dist/esm/azure/financialSavingsAuthorityValidation.js +2 -186
- package/dist/esm/azure/financialSavingsCoordinateValidation.js +19 -98
- package/dist/esm/azure/financialSavingsSurfaceProjection.js +0 -2
- package/dist/esm/azure/financialSavingsSurfaceProjectionValidation.js +13 -199
- package/dist/esm/azure/financialScope.js +0 -14
- package/dist/esm/azure/financialScopeBaseline.js +0 -12
- package/dist/esm/azure/financialScopeBaselineIdentity.js +4 -24
- package/dist/esm/azure/financialScopeBaselineValidation.js +4 -21
- package/dist/esm/azure/governance.js +0 -1
- package/dist/esm/azure/recommendations.js +0 -2
- package/dist/esm/azure/subscriptions.js +1 -33
- package/dist/esm/azure/views.js +1 -8
- package/dist/esm/entries/commitments-planning.js +2 -2
- package/dist/esm/identity/index.js +0 -1
- package/dist/esm/index.js +0 -13
- package/dist/esm/index.vite.js +0 -11
- package/dist/esm/scheduler/index.js +0 -3
- package/dist/events/alertDefinitionRun.d.ts +0 -4
- package/dist/events/alertDefinitionRun.d.ts.map +1 -1
- package/dist/events/baseAlert.d.ts +0 -1
- package/dist/events/baseAlert.d.ts.map +1 -1
- package/dist/events/cost.d.ts +0 -4
- package/dist/events/cost.d.ts.map +1 -1
- package/dist/events/quickAlerts.d.ts +4 -13
- package/dist/events/quickAlerts.d.ts.map +1 -1
- package/dist/events/quickAlerts.js.map +1 -1
- package/dist/features-and-permissions/access.d.ts +0 -79
- package/dist/features-and-permissions/access.d.ts.map +1 -1
- package/dist/identity/index.d.ts +0 -1
- package/dist/identity/index.d.ts.map +1 -1
- package/dist/identity/index.js +0 -1
- package/dist/identity/index.js.map +1 -1
- package/dist/index.d.ts +0 -13
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -19
- package/dist/index.js.map +1 -1
- package/dist/index.vite.d.ts +0 -11
- package/dist/index.vite.d.ts.map +1 -1
- package/dist/index.vite.js +0 -15
- package/dist/index.vite.js.map +1 -1
- package/dist/portfolio/portfolioOperations.d.ts +1 -1
- package/dist/portfolio/portfolioOperations.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +0 -3
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +0 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/scheduler.d.ts +10 -14
- package/dist/scheduler/scheduler.d.ts.map +1 -1
- package/package.json +3 -20
- package/dist/accounts/azureManualOnboarding.d.ts +0 -114
- package/dist/accounts/azureManualOnboarding.d.ts.map +0 -1
- package/dist/accounts/azureManualOnboarding.js +0 -12
- package/dist/accounts/azureManualOnboarding.js.map +0 -1
- package/dist/ai/conversationHistory.d.ts +0 -52
- package/dist/ai/conversationHistory.d.ts.map +0 -1
- package/dist/ai/conversationHistory.js +0 -10
- package/dist/ai/conversationHistory.js.map +0 -1
- package/dist/ai/grounding.d.ts +0 -41
- package/dist/ai/grounding.d.ts.map +0 -1
- package/dist/ai/grounding.js +0 -86
- package/dist/ai/grounding.js.map +0 -1
- package/dist/ai/workspaceArtifacts.d.ts +0 -587
- package/dist/ai/workspaceArtifacts.d.ts.map +0 -1
- package/dist/ai/workspaceArtifacts.js +0 -162
- package/dist/ai/workspaceArtifacts.js.map +0 -1
- package/dist/aws/organizationCommitments.d.ts +0 -260
- package/dist/aws/organizationCommitments.d.ts.map +0 -1
- package/dist/aws/organizationCommitments.js +0 -53
- package/dist/aws/organizationCommitments.js.map +0 -1
- package/dist/aws/organizationCommitmentsApiValidation.d.ts +0 -21
- package/dist/aws/organizationCommitmentsApiValidation.d.ts.map +0 -1
- package/dist/aws/organizationCommitmentsApiValidation.js +0 -226
- package/dist/aws/organizationCommitmentsApiValidation.js.map +0 -1
- package/dist/aws/organizationCommitmentsValidation.d.ts +0 -12
- package/dist/aws/organizationCommitmentsValidation.d.ts.map +0 -1
- package/dist/aws/organizationCommitmentsValidation.js +0 -228
- package/dist/aws/organizationCommitmentsValidation.js.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts +0 -9
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +0 -407
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts +0 -17
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts.map +0 -1
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js +0 -6
- package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js.map +0 -1
- package/dist/azure/activityLogAnalysis.d.ts +0 -320
- package/dist/azure/activityLogAnalysis.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysis.js +0 -70
- package/dist/azure/activityLogAnalysis.js.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidation.d.ts +0 -8
- package/dist/azure/activityLogAnalysisPublicValidation.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidation.js +0 -368
- package/dist/azure/activityLogAnalysisPublicValidation.js.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.d.ts +0 -33
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.js +0 -197
- package/dist/azure/activityLogAnalysisPublicValidationHelpers.js.map +0 -1
- package/dist/azure/activityLogAnalysisValidation.d.ts +0 -5
- package/dist/azure/activityLogAnalysisValidation.d.ts.map +0 -1
- package/dist/azure/activityLogAnalysisValidation.js +0 -376
- package/dist/azure/activityLogAnalysisValidation.js.map +0 -1
- package/dist/azure/financialAnalyticsDisplayKernel.d.ts +0 -12
- package/dist/azure/financialAnalyticsDisplayKernel.d.ts.map +0 -1
- package/dist/azure/financialAnalyticsDisplayKernel.js +0 -144
- package/dist/azure/financialAnalyticsDisplayKernel.js.map +0 -1
- package/dist/azure/financialAuthorityProjectionKernel.d.ts +0 -8
- package/dist/azure/financialAuthorityProjectionKernel.d.ts.map +0 -1
- package/dist/azure/financialAuthorityProjectionKernel.js +0 -269
- package/dist/azure/financialAuthorityProjectionKernel.js.map +0 -1
- package/dist/azure/financialChargeComposition.d.ts +0 -81
- package/dist/azure/financialChargeComposition.d.ts.map +0 -1
- package/dist/azure/financialChargeComposition.js +0 -41
- package/dist/azure/financialChargeComposition.js.map +0 -1
- package/dist/azure/financialChargeCompositionKernel.d.ts +0 -3
- package/dist/azure/financialChargeCompositionKernel.d.ts.map +0 -1
- package/dist/azure/financialChargeCompositionKernel.js +0 -53
- package/dist/azure/financialChargeCompositionKernel.js.map +0 -1
- package/dist/azure/financialChargeCompositionValidation.d.ts +0 -8
- package/dist/azure/financialChargeCompositionValidation.d.ts.map +0 -1
- package/dist/azure/financialChargeCompositionValidation.js +0 -164
- package/dist/azure/financialChargeCompositionValidation.js.map +0 -1
- package/dist/azure/financialChargePolicy.d.ts +0 -215
- package/dist/azure/financialChargePolicy.d.ts.map +0 -1
- package/dist/azure/financialChargePolicy.js +0 -488
- package/dist/azure/financialChargePolicy.js.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjection.d.ts +0 -76
- package/dist/azure/financialCurrentSpendSurfaceProjection.d.ts.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjection.js +0 -6
- package/dist/azure/financialCurrentSpendSurfaceProjection.js.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.d.ts +0 -10
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.d.ts.map +0 -1
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.js +0 -196
- package/dist/azure/financialCurrentSpendSurfaceProjectionValidation.js.map +0 -1
- package/dist/azure/financialDataflowKernel.d.ts +0 -31
- package/dist/azure/financialDataflowKernel.d.ts.map +0 -1
- package/dist/azure/financialDataflowKernel.js +0 -170
- package/dist/azure/financialDataflowKernel.js.map +0 -1
- package/dist/azure/financialEvidenceCoverage.d.ts +0 -36
- package/dist/azure/financialEvidenceCoverage.d.ts.map +0 -1
- package/dist/azure/financialEvidenceCoverage.js +0 -111
- package/dist/azure/financialEvidenceCoverage.js.map +0 -1
- package/dist/azure/financialPolicyKernel.d.ts +0 -38
- package/dist/azure/financialPolicyKernel.d.ts.map +0 -1
- package/dist/azure/financialPolicyKernel.js +0 -232
- package/dist/azure/financialPolicyKernel.js.map +0 -1
- package/dist/azure/financialResourceSurfaceProjection.d.ts +0 -66
- package/dist/azure/financialResourceSurfaceProjection.d.ts.map +0 -1
- package/dist/azure/financialResourceSurfaceProjection.js +0 -6
- package/dist/azure/financialResourceSurfaceProjection.js.map +0 -1
- package/dist/azure/financialResourceSurfaceProjectionValidation.d.ts +0 -16
- package/dist/azure/financialResourceSurfaceProjectionValidation.d.ts.map +0 -1
- package/dist/azure/financialResourceSurfaceProjectionValidation.js +0 -252
- package/dist/azure/financialResourceSurfaceProjectionValidation.js.map +0 -1
- package/dist/azure/financialSavingsChargePolicyKernel.d.ts +0 -12
- package/dist/azure/financialSavingsChargePolicyKernel.d.ts.map +0 -1
- package/dist/azure/financialSavingsChargePolicyKernel.js +0 -34
- package/dist/azure/financialSavingsChargePolicyKernel.js.map +0 -1
- package/dist/azure/financialSavingsPercentageKernel.d.ts +0 -20
- package/dist/azure/financialSavingsPercentageKernel.d.ts.map +0 -1
- package/dist/azure/financialSavingsPercentageKernel.js +0 -49
- package/dist/azure/financialSavingsPercentageKernel.js.map +0 -1
- package/dist/azure/financialSavingsSurfaceProjectionKernel.d.ts +0 -26
- package/dist/azure/financialSavingsSurfaceProjectionKernel.d.ts.map +0 -1
- package/dist/azure/financialSavingsSurfaceProjectionKernel.js +0 -435
- package/dist/azure/financialSavingsSurfaceProjectionKernel.js.map +0 -1
- package/dist/azure/recommendationLifecycleOverlayValidation.d.ts +0 -5
- package/dist/azure/recommendationLifecycleOverlayValidation.d.ts.map +0 -1
- package/dist/azure/recommendationLifecycleOverlayValidation.js +0 -82
- package/dist/azure/recommendationLifecycleOverlayValidation.js.map +0 -1
- package/dist/azure/reportDailySpend.d.ts +0 -48
- package/dist/azure/reportDailySpend.d.ts.map +0 -1
- package/dist/azure/reportDailySpend.js +0 -6
- package/dist/azure/reportDailySpend.js.map +0 -1
- package/dist/azure/reportDailySpendValidation.d.ts +0 -3
- package/dist/azure/reportDailySpendValidation.d.ts.map +0 -1
- package/dist/azure/reportDailySpendValidation.js +0 -72
- package/dist/azure/reportDailySpendValidation.js.map +0 -1
- package/dist/azure/reportEvidence.d.ts +0 -615
- package/dist/azure/reportEvidence.d.ts.map +0 -1
- package/dist/azure/reportEvidence.js +0 -25
- package/dist/azure/reportEvidence.js.map +0 -1
- package/dist/azure/reportEvidenceCatalogueValidation.d.ts +0 -5
- package/dist/azure/reportEvidenceCatalogueValidation.d.ts.map +0 -1
- package/dist/azure/reportEvidenceCatalogueValidation.js +0 -109
- package/dist/azure/reportEvidenceCatalogueValidation.js.map +0 -1
- package/dist/azure/reportEvidenceValidation.d.ts +0 -7
- package/dist/azure/reportEvidenceValidation.d.ts.map +0 -1
- package/dist/azure/reportEvidenceValidation.js +0 -421
- package/dist/azure/reportEvidenceValidation.js.map +0 -1
- package/dist/azure/reportEvidenceValidationHelpers.d.ts +0 -27
- package/dist/azure/reportEvidenceValidationHelpers.d.ts.map +0 -1
- package/dist/azure/reportEvidenceValidationHelpers.js +0 -134
- package/dist/azure/reportEvidenceValidationHelpers.js.map +0 -1
- package/dist/azure/reportSavingsContributionValidation.d.ts +0 -5
- package/dist/azure/reportSavingsContributionValidation.d.ts.map +0 -1
- package/dist/azure/reportSavingsContributionValidation.js +0 -37
- package/dist/azure/reportSavingsContributionValidation.js.map +0 -1
- package/dist/azure/reportSpend.d.ts +0 -87
- package/dist/azure/reportSpend.d.ts.map +0 -1
- package/dist/azure/reportSpend.js +0 -5
- package/dist/azure/reportSpend.js.map +0 -1
- package/dist/azure/reportSpendValidation.d.ts +0 -7
- package/dist/azure/reportSpendValidation.d.ts.map +0 -1
- package/dist/azure/reportSpendValidation.js +0 -197
- package/dist/azure/reportSpendValidation.js.map +0 -1
- package/dist/azure/reportSpendValidationHelpers.d.ts +0 -7
- package/dist/azure/reportSpendValidationHelpers.d.ts.map +0 -1
- package/dist/azure/reportSpendValidationHelpers.js +0 -31
- package/dist/azure/reportSpendValidationHelpers.js.map +0 -1
- package/dist/azure/vmPatchManagement.d.ts +0 -109
- package/dist/azure/vmPatchManagement.d.ts.map +0 -1
- package/dist/azure/vmPatchManagement.js +0 -7
- package/dist/azure/vmPatchManagement.js.map +0 -1
- package/dist/environment/canonicalization.d.ts +0 -12
- package/dist/environment/canonicalization.d.ts.map +0 -1
- package/dist/environment/canonicalization.js +0 -40
- package/dist/environment/canonicalization.js.map +0 -1
- package/dist/environment/contracts.d.ts +0 -472
- package/dist/environment/contracts.d.ts.map +0 -1
- package/dist/environment/contracts.js +0 -73
- package/dist/environment/contracts.js.map +0 -1
- package/dist/environment/index.d.ts +0 -6
- package/dist/environment/index.d.ts.map +0 -1
- package/dist/environment/index.js +0 -22
- package/dist/environment/index.js.map +0 -1
- package/dist/environment/internal.d.ts +0 -21
- package/dist/environment/internal.d.ts.map +0 -1
- package/dist/environment/internal.js +0 -113
- package/dist/environment/internal.js.map +0 -1
- package/dist/environment/references.d.ts +0 -24
- package/dist/environment/references.d.ts.map +0 -1
- package/dist/environment/references.js +0 -243
- package/dist/environment/references.js.map +0 -1
- package/dist/environment/tenant.d.ts +0 -128
- package/dist/environment/tenant.d.ts.map +0 -1
- package/dist/environment/tenant.js +0 -203
- package/dist/environment/tenant.js.map +0 -1
- package/dist/environment/validation.d.ts +0 -34
- package/dist/environment/validation.d.ts.map +0 -1
- package/dist/environment/validation.js +0 -655
- package/dist/environment/validation.js.map +0 -1
- package/dist/esm/accounts/azureManualOnboarding.js +0 -8
- package/dist/esm/ai/conversationHistory.js +0 -6
- package/dist/esm/ai/grounding.js +0 -80
- package/dist/esm/ai/workspaceArtifacts.js +0 -158
- package/dist/esm/aws/organizationCommitments.js +0 -48
- package/dist/esm/aws/organizationCommitmentsApiValidation.js +0 -220
- package/dist/esm/aws/organizationCommitmentsValidation.js +0 -224
- package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +0 -402
- package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js +0 -2
- package/dist/esm/azure/activityLogAnalysis.js +0 -64
- package/dist/esm/azure/activityLogAnalysisPublicValidation.js +0 -360
- package/dist/esm/azure/activityLogAnalysisPublicValidationHelpers.js +0 -172
- package/dist/esm/azure/activityLogAnalysisValidation.js +0 -365
- package/dist/esm/azure/financialAnalyticsDisplayKernel.js +0 -139
- package/dist/esm/azure/financialAuthorityProjectionKernel.js +0 -263
- package/dist/esm/azure/financialChargeComposition.js +0 -36
- package/dist/esm/azure/financialChargeCompositionKernel.js +0 -48
- package/dist/esm/azure/financialChargeCompositionValidation.js +0 -155
- package/dist/esm/azure/financialChargePolicy.js +0 -473
- package/dist/esm/azure/financialCurrentSpendSurfaceProjection.js +0 -2
- package/dist/esm/azure/financialCurrentSpendSurfaceProjectionValidation.js +0 -184
- package/dist/esm/azure/financialDataflowKernel.js +0 -164
- package/dist/esm/azure/financialEvidenceCoverage.js +0 -106
- package/dist/esm/azure/financialPolicyKernel.js +0 -225
- package/dist/esm/azure/financialResourceSurfaceProjection.js +0 -2
- package/dist/esm/azure/financialResourceSurfaceProjectionValidation.js +0 -243
- package/dist/esm/azure/financialSavingsChargePolicyKernel.js +0 -29
- package/dist/esm/azure/financialSavingsPercentageKernel.js +0 -44
- package/dist/esm/azure/financialSavingsSurfaceProjectionKernel.js +0 -427
- package/dist/esm/azure/recommendationLifecycleOverlayValidation.js +0 -75
- package/dist/esm/azure/reportDailySpend.js +0 -2
- package/dist/esm/azure/reportDailySpendValidation.js +0 -67
- package/dist/esm/azure/reportEvidence.js +0 -21
- package/dist/esm/azure/reportEvidenceCatalogueValidation.js +0 -103
- package/dist/esm/azure/reportEvidenceValidation.js +0 -413
- package/dist/esm/azure/reportEvidenceValidationHelpers.js +0 -106
- package/dist/esm/azure/reportSavingsContributionValidation.js +0 -30
- package/dist/esm/azure/reportSpend.js +0 -1
- package/dist/esm/azure/reportSpendValidation.js +0 -189
- package/dist/esm/azure/reportSpendValidationHelpers.js +0 -22
- package/dist/esm/azure/vmPatchManagement.js +0 -3
- package/dist/esm/entries/environment.js +0 -3
- package/dist/esm/environment/canonicalization.js +0 -34
- package/dist/esm/environment/contracts.js +0 -69
- package/dist/esm/environment/index.js +0 -5
- package/dist/esm/environment/internal.js +0 -97
- package/dist/esm/environment/references.js +0 -230
- package/dist/esm/environment/tenant.js +0 -190
- package/dist/esm/environment/validation.js +0 -635
- package/dist/esm/identity/microsoftSignInAdminConsent.js +0 -1
- package/dist/esm/scheduler/bastionSchedule.js +0 -1
- package/dist/esm/scheduler/bastionScheduleProfile.js +0 -206
- package/dist/esm/scheduler/bastionScheduleValidation.js +0 -401
- package/dist/identity/microsoftSignInAdminConsent.d.ts +0 -59
- package/dist/identity/microsoftSignInAdminConsent.d.ts.map +0 -1
- package/dist/identity/microsoftSignInAdminConsent.js +0 -3
- package/dist/identity/microsoftSignInAdminConsent.js.map +0 -1
- package/dist/scheduler/bastionSchedule.d.ts +0 -113
- package/dist/scheduler/bastionSchedule.d.ts.map +0 -1
- package/dist/scheduler/bastionSchedule.js +0 -3
- package/dist/scheduler/bastionSchedule.js.map +0 -1
- package/dist/scheduler/bastionScheduleProfile.d.ts +0 -24
- package/dist/scheduler/bastionScheduleProfile.d.ts.map +0 -1
- package/dist/scheduler/bastionScheduleProfile.js +0 -210
- package/dist/scheduler/bastionScheduleProfile.js.map +0 -1
- package/dist/scheduler/bastionScheduleValidation.d.ts +0 -10
- package/dist/scheduler/bastionScheduleValidation.d.ts.map +0 -1
- package/dist/scheduler/bastionScheduleValidation.js +0 -412
- package/dist/scheduler/bastionScheduleValidation.js.map +0 -1
|
@@ -1,64 +0,0 @@
|
|
|
1
|
-
export const ACTIVITY_LOG_TAXONOMY_VERSION = 'v1';
|
|
2
|
-
export const ACTIVITY_LOG_ANALYSIS_VERSION = 'v1';
|
|
3
|
-
export const CONFORMED_ACTIVITY_ANALYSIS_SCHEMA_VERSION = 1;
|
|
4
|
-
export const PORTAL_ACTIVITY_ANALYSIS_RESPONSE_SCHEMA_VERSION = 1;
|
|
5
|
-
export const CONFORMED_ACTIVITY_ANALYSIS_LIMITS_V1 = Object.freeze({
|
|
6
|
-
sourceShardFingerprintCodeUnits: 512 * 1024,
|
|
7
|
-
});
|
|
8
|
-
export const PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1 = Object.freeze({
|
|
9
|
-
tagAssignmentsPerEvent: 32,
|
|
10
|
-
facetTagRows: 64,
|
|
11
|
-
facetOperationRows: 4096,
|
|
12
|
-
facetProviderRows: 512,
|
|
13
|
-
facetResourceTypeRows: 4096,
|
|
14
|
-
facetResultRows: 256,
|
|
15
|
-
facetOperationEffectRows: 8,
|
|
16
|
-
facetExecutionOriginRows: 8,
|
|
17
|
-
activitySeries: 10000,
|
|
18
|
-
resourceSummaries: 10000,
|
|
19
|
-
operationSummaries: 4096,
|
|
20
|
-
securitySensitive: 4096,
|
|
21
|
-
powerPatterns: 4096,
|
|
22
|
-
operationCountsPerItem: 256,
|
|
23
|
-
resultCountsPerItem: 256,
|
|
24
|
-
tagCountsPerItem: 64,
|
|
25
|
-
executionOriginCountsPerItem: 8,
|
|
26
|
-
evidenceIdsPerItem: 20,
|
|
27
|
-
reasonCodesPerItem: 32,
|
|
28
|
-
resourceIdCodeUnits: 2048,
|
|
29
|
-
operationCodeUnits: 512,
|
|
30
|
-
providerCodeUnits: 256,
|
|
31
|
-
resourceTypeCodeUnits: 512,
|
|
32
|
-
resourceNameCodeUnits: 512,
|
|
33
|
-
reasonCodeUnits: 128,
|
|
34
|
-
responseUtf8Bytes: 33554432,
|
|
35
|
-
});
|
|
36
|
-
export const ACTIVITY_LOG_TAG_IDS = [
|
|
37
|
-
'actor.manual',
|
|
38
|
-
'actor.workload-automation',
|
|
39
|
-
'actor.azure-platform',
|
|
40
|
-
'actor.unknown',
|
|
41
|
-
'change.material',
|
|
42
|
-
'intent.credential-access',
|
|
43
|
-
'intent.remote-execution',
|
|
44
|
-
'intent.power-control',
|
|
45
|
-
'security.sensitive-operation',
|
|
46
|
-
'security.credential-access',
|
|
47
|
-
'security.remote-execution',
|
|
48
|
-
'security.privileged-access-change',
|
|
49
|
-
'security.security-boundary-change',
|
|
50
|
-
'security.protection-control-change',
|
|
51
|
-
'security.destructive-action',
|
|
52
|
-
'scheduler.power-operation',
|
|
53
|
-
];
|
|
54
|
-
const CANONICAL_MONTH = /^\d{4}-(0[1-9]|1[0-2])$/;
|
|
55
|
-
const CONFORMED_ACTIVITY_ANALYSIS_NAME = /^activity-logs\/activity_analysis-(\d{4}-(?:0[1-9]|1[0-2]))\.json$/;
|
|
56
|
-
export function buildConformedActivityAnalysisLogicalName(month) {
|
|
57
|
-
if (!CANONICAL_MONTH.test(month)) {
|
|
58
|
-
throw new Error('Activity Analysis month must use canonical YYYY-MM format.');
|
|
59
|
-
}
|
|
60
|
-
return `activity-logs/activity_analysis-${month}.json`;
|
|
61
|
-
}
|
|
62
|
-
export function parseConformedActivityAnalysisLogicalName(logicalName) {
|
|
63
|
-
return CONFORMED_ACTIVITY_ANALYSIS_NAME.exec(logicalName)?.[1];
|
|
64
|
-
}
|
|
@@ -1,360 +0,0 @@
|
|
|
1
|
-
import { PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1, PORTAL_ACTIVITY_ANALYSIS_RESPONSE_SCHEMA_VERSION, } from './activityLogAnalysis.js';
|
|
2
|
-
import { CONFIDENCES, EFFECTS, LIMITATIONS, MONTH, ORIGINS, POWER_SUFFICIENCY, TAG_IDS, countRowsTotal, hasExactKeys, hasValidTimes, isChronologicalCountRows, isCount, isCountRows, isDate, isEvidenceIds, isGroupIds, isPortalActivityAnalysisGroupId, isPortalActivityEvidenceId, isPortalActivityLogClassification, isPositiveCount, isReasons, isRecord, isScope, isSortedUniqueStrings, isText, isTimestamp, isTags, utf8ByteLength, } from './activityLogAnalysisPublicValidationHelpers.js';
|
|
3
|
-
export { isPortalActivityAnalysisGroupId, isPortalActivityEvidenceId, isPortalActivityLogClassification };
|
|
4
|
-
const isSeries = (value, subscriptionId, resourceId, requestedMonths) => {
|
|
5
|
-
if (!hasExactKeys(value, [
|
|
6
|
-
'seriesId',
|
|
7
|
-
'scope',
|
|
8
|
-
'operation',
|
|
9
|
-
'result',
|
|
10
|
-
'executionOrigin',
|
|
11
|
-
'operationEffect',
|
|
12
|
-
'tagIds',
|
|
13
|
-
'eventCount',
|
|
14
|
-
'firstTimestamp',
|
|
15
|
-
'lastTimestamp',
|
|
16
|
-
'monthCounts',
|
|
17
|
-
'dailyCounts',
|
|
18
|
-
'utcWeekdayHourDistribution',
|
|
19
|
-
'confidence',
|
|
20
|
-
'evidenceIds',
|
|
21
|
-
'evidenceTruncated',
|
|
22
|
-
]) ||
|
|
23
|
-
!isPortalActivityAnalysisGroupId(value.seriesId) ||
|
|
24
|
-
!isScope(value.scope, subscriptionId, resourceId) ||
|
|
25
|
-
!isText(value.operation, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationCodeUnits) ||
|
|
26
|
-
!isText(value.result, 256) ||
|
|
27
|
-
typeof value.executionOrigin !== 'string' ||
|
|
28
|
-
!ORIGINS.has(value.executionOrigin) ||
|
|
29
|
-
typeof value.operationEffect !== 'string' ||
|
|
30
|
-
!EFFECTS.has(value.operationEffect) ||
|
|
31
|
-
!isTags(value.tagIds) ||
|
|
32
|
-
!isPositiveCount(value.eventCount) ||
|
|
33
|
-
!hasValidTimes(value) ||
|
|
34
|
-
!isChronologicalCountRows(value.monthCounts, month => MONTH.test(month) && requestedMonths.has(month)) ||
|
|
35
|
-
!Array.isArray(value.dailyCounts) ||
|
|
36
|
-
!Array.isArray(value.utcWeekdayHourDistribution) ||
|
|
37
|
-
typeof value.confidence !== 'string' ||
|
|
38
|
-
!CONFIDENCES.has(value.confidence) ||
|
|
39
|
-
!isEvidenceIds(value.evidenceIds) ||
|
|
40
|
-
typeof value.evidenceTruncated !== 'boolean')
|
|
41
|
-
return false;
|
|
42
|
-
let dailyTotal = 0;
|
|
43
|
-
for (let index = 0; index < value.dailyCounts.length; index += 1) {
|
|
44
|
-
const row = value.dailyCounts[index];
|
|
45
|
-
if (!hasExactKeys(row, ['date', 'count']) ||
|
|
46
|
-
!isDate(row.date) ||
|
|
47
|
-
!isPositiveCount(row.count) ||
|
|
48
|
-
(index > 0 && value.dailyCounts[index - 1].date >= row.date))
|
|
49
|
-
return false;
|
|
50
|
-
if (!requestedMonths.has(row.date.slice(0, 7)))
|
|
51
|
-
return false;
|
|
52
|
-
dailyTotal += row.count;
|
|
53
|
-
}
|
|
54
|
-
let timeTotal = 0;
|
|
55
|
-
let previousBucket = -1;
|
|
56
|
-
for (const row of value.utcWeekdayHourDistribution) {
|
|
57
|
-
if (!hasExactKeys(row, ['weekday', 'hour', 'count']) ||
|
|
58
|
-
!isCount(row.weekday) ||
|
|
59
|
-
row.weekday > 6 ||
|
|
60
|
-
!isCount(row.hour) ||
|
|
61
|
-
row.hour > 23 ||
|
|
62
|
-
!isPositiveCount(row.count))
|
|
63
|
-
return false;
|
|
64
|
-
const bucket = row.weekday * 24 + row.hour;
|
|
65
|
-
if (bucket <= previousBucket)
|
|
66
|
-
return false;
|
|
67
|
-
previousBucket = bucket;
|
|
68
|
-
timeTotal += row.count;
|
|
69
|
-
}
|
|
70
|
-
return countRowsTotal(value.monthCounts) === value.eventCount && dailyTotal === value.eventCount && timeTotal === value.eventCount;
|
|
71
|
-
};
|
|
72
|
-
const isResource = (value, subscriptionId, resourceId) => {
|
|
73
|
-
if (!hasExactKeys(value, [
|
|
74
|
-
'scope',
|
|
75
|
-
'eventCount',
|
|
76
|
-
'firstTimestamp',
|
|
77
|
-
'lastTimestamp',
|
|
78
|
-
'operationCounts',
|
|
79
|
-
'resultCounts',
|
|
80
|
-
'tagCounts',
|
|
81
|
-
'executionOriginCounts',
|
|
82
|
-
'relatedGroupIds',
|
|
83
|
-
'confidence',
|
|
84
|
-
]) ||
|
|
85
|
-
!isScope(value.scope, subscriptionId, resourceId) ||
|
|
86
|
-
value.scope.level !== 'resource' ||
|
|
87
|
-
!isPositiveCount(value.eventCount) ||
|
|
88
|
-
!hasValidTimes(value) ||
|
|
89
|
-
!isCountRows(value.operationCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationCountsPerItem, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationCodeUnits) ||
|
|
90
|
-
!isCountRows(value.resultCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resultCountsPerItem, 256) ||
|
|
91
|
-
!isCountRows(value.tagCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.tagCountsPerItem, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.reasonCodeUnits, TAG_IDS) ||
|
|
92
|
-
!isCountRows(value.executionOriginCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.executionOriginCountsPerItem, 32, ORIGINS) ||
|
|
93
|
-
!isGroupIds(value.relatedGroupIds) ||
|
|
94
|
-
typeof value.confidence !== 'string' ||
|
|
95
|
-
!CONFIDENCES.has(value.confidence))
|
|
96
|
-
return false;
|
|
97
|
-
return (countRowsTotal(value.operationCounts) === value.eventCount &&
|
|
98
|
-
countRowsTotal(value.resultCounts) === value.eventCount &&
|
|
99
|
-
countRowsTotal(value.executionOriginCounts) === value.eventCount);
|
|
100
|
-
};
|
|
101
|
-
const DERIVED_BASE_KEYS = [
|
|
102
|
-
'scope',
|
|
103
|
-
'eventCount',
|
|
104
|
-
'firstTimestamp',
|
|
105
|
-
'lastTimestamp',
|
|
106
|
-
'confidence',
|
|
107
|
-
'tagIds',
|
|
108
|
-
'reasons',
|
|
109
|
-
'evidenceIds',
|
|
110
|
-
'evidenceTruncated',
|
|
111
|
-
];
|
|
112
|
-
const isDerivedBase = (value, subscriptionId, resourceId) => isScope(value.scope, subscriptionId, resourceId) &&
|
|
113
|
-
isPositiveCount(value.eventCount) &&
|
|
114
|
-
hasValidTimes(value) &&
|
|
115
|
-
typeof value.confidence === 'string' &&
|
|
116
|
-
CONFIDENCES.has(value.confidence) &&
|
|
117
|
-
isTags(value.tagIds) &&
|
|
118
|
-
isReasons(value.reasons) &&
|
|
119
|
-
isEvidenceIds(value.evidenceIds) &&
|
|
120
|
-
typeof value.evidenceTruncated === 'boolean';
|
|
121
|
-
const isDerived = (value, subscriptionId, resourceId) => {
|
|
122
|
-
if (!isRecord(value) || typeof value.derivedType !== 'string')
|
|
123
|
-
return false;
|
|
124
|
-
if (value.derivedType === 'operationSummary') {
|
|
125
|
-
return (hasExactKeys(value, ['groupId', 'derivedType', ...DERIVED_BASE_KEYS, 'operation', 'operationEffect', 'executionOrigin', 'distinctResourceCount', 'resultCounts'], ['provider', 'resourceType']) &&
|
|
126
|
-
isPortalActivityAnalysisGroupId(value.groupId) &&
|
|
127
|
-
isDerivedBase(value, subscriptionId, resourceId) &&
|
|
128
|
-
isText(value.operation, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationCodeUnits) &&
|
|
129
|
-
(value.provider === undefined || isText(value.provider, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.providerCodeUnits)) &&
|
|
130
|
-
(value.resourceType === undefined || isText(value.resourceType, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceTypeCodeUnits)) &&
|
|
131
|
-
typeof value.operationEffect === 'string' &&
|
|
132
|
-
EFFECTS.has(value.operationEffect) &&
|
|
133
|
-
typeof value.executionOrigin === 'string' &&
|
|
134
|
-
ORIGINS.has(value.executionOrigin) &&
|
|
135
|
-
isCount(value.distinctResourceCount) &&
|
|
136
|
-
value.distinctResourceCount <= value.eventCount &&
|
|
137
|
-
isCountRows(value.resultCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resultCountsPerItem, 256) &&
|
|
138
|
-
countRowsTotal(value.resultCounts) === value.eventCount);
|
|
139
|
-
}
|
|
140
|
-
if (value.derivedType === 'securitySensitiveActivity') {
|
|
141
|
-
return (hasExactKeys(value, ['groupId', 'derivedType', ...DERIVED_BASE_KEYS, 'capabilityTag', 'operation', 'executionOrigin', 'resultCounts']) &&
|
|
142
|
-
isPortalActivityAnalysisGroupId(value.groupId) &&
|
|
143
|
-
isDerivedBase(value, subscriptionId, resourceId) &&
|
|
144
|
-
typeof value.capabilityTag === 'string' &&
|
|
145
|
-
value.capabilityTag.startsWith('security.') &&
|
|
146
|
-
value.capabilityTag !== 'security.sensitive-operation' &&
|
|
147
|
-
TAG_IDS.has(value.capabilityTag) &&
|
|
148
|
-
value.tagIds.includes(value.capabilityTag) &&
|
|
149
|
-
isText(value.operation, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationCodeUnits) &&
|
|
150
|
-
typeof value.executionOrigin === 'string' &&
|
|
151
|
-
ORIGINS.has(value.executionOrigin) &&
|
|
152
|
-
isCountRows(value.resultCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resultCountsPerItem, 256) &&
|
|
153
|
-
countRowsTotal(value.resultCounts) === value.eventCount);
|
|
154
|
-
}
|
|
155
|
-
return isPowerPattern(value, subscriptionId, resourceId);
|
|
156
|
-
};
|
|
157
|
-
const isPowerPattern = (value, subscriptionId, resourceId) => {
|
|
158
|
-
if (!hasExactKeys(value, [
|
|
159
|
-
'patternId',
|
|
160
|
-
'derivedType',
|
|
161
|
-
...DERIVED_BASE_KEYS,
|
|
162
|
-
'startCount',
|
|
163
|
-
'stopCount',
|
|
164
|
-
'opposingPairCount',
|
|
165
|
-
'utcActiveDayCount',
|
|
166
|
-
'utcHourDistribution',
|
|
167
|
-
'executionOriginCounts',
|
|
168
|
-
'resultCounts',
|
|
169
|
-
'dataSufficiency',
|
|
170
|
-
]) ||
|
|
171
|
-
value.derivedType !== 'powerPatternEvidence' ||
|
|
172
|
-
!isPortalActivityAnalysisGroupId(value.patternId) ||
|
|
173
|
-
!isDerivedBase(value, subscriptionId, resourceId) ||
|
|
174
|
-
value.scope.level !== 'resource' ||
|
|
175
|
-
!isCount(value.startCount) ||
|
|
176
|
-
!isCount(value.stopCount) ||
|
|
177
|
-
value.startCount + value.stopCount !== value.eventCount ||
|
|
178
|
-
!isCount(value.opposingPairCount) ||
|
|
179
|
-
value.opposingPairCount !== Math.min(value.startCount, value.stopCount) ||
|
|
180
|
-
!isPositiveCount(value.utcActiveDayCount) ||
|
|
181
|
-
value.utcActiveDayCount > value.eventCount ||
|
|
182
|
-
!Array.isArray(value.utcHourDistribution) ||
|
|
183
|
-
!isCountRows(value.executionOriginCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.executionOriginCountsPerItem, 32, ORIGINS) ||
|
|
184
|
-
!isCountRows(value.resultCounts, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resultCountsPerItem, 256) ||
|
|
185
|
-
typeof value.dataSufficiency !== 'string' ||
|
|
186
|
-
!POWER_SUFFICIENCY.has(value.dataSufficiency))
|
|
187
|
-
return false;
|
|
188
|
-
let total = 0;
|
|
189
|
-
let previousHour = -1;
|
|
190
|
-
for (const row of value.utcHourDistribution) {
|
|
191
|
-
if (!hasExactKeys(row, ['hour', 'count']) || !isCount(row.hour) || row.hour > 23 || row.hour <= previousHour || !isPositiveCount(row.count))
|
|
192
|
-
return false;
|
|
193
|
-
previousHour = row.hour;
|
|
194
|
-
total += row.count;
|
|
195
|
-
}
|
|
196
|
-
return (total === value.eventCount &&
|
|
197
|
-
countRowsTotal(value.executionOriginCounts) === value.eventCount &&
|
|
198
|
-
countRowsTotal(value.resultCounts) === value.eventCount);
|
|
199
|
-
};
|
|
200
|
-
const isCollection = (value, maximum, validator) => hasExactKeys(value, ['totalCount', 'returnedCount', 'truncated', 'items']) &&
|
|
201
|
-
isCount(value.totalCount) &&
|
|
202
|
-
isCount(value.returnedCount) &&
|
|
203
|
-
typeof value.truncated === 'boolean' &&
|
|
204
|
-
Array.isArray(value.items) &&
|
|
205
|
-
value.items.length <= maximum &&
|
|
206
|
-
value.returnedCount === value.items.length &&
|
|
207
|
-
value.totalCount >= value.returnedCount &&
|
|
208
|
-
value.truncated === value.totalCount > value.returnedCount &&
|
|
209
|
-
value.items.every(validator);
|
|
210
|
-
const isRanked = (items, key) => items.every((item, index) => {
|
|
211
|
-
if (index === 0)
|
|
212
|
-
return true;
|
|
213
|
-
const previous = items[index - 1];
|
|
214
|
-
return (previous.eventCount > item.eventCount ||
|
|
215
|
-
(previous.eventCount === item.eventCount &&
|
|
216
|
-
(previous.lastTimestamp > item.lastTimestamp || (previous.lastTimestamp === item.lastTimestamp && key(previous) < key(item)))));
|
|
217
|
-
});
|
|
218
|
-
const isFacets = (value) => {
|
|
219
|
-
if (!hasExactKeys(value, ['tags', 'operations', 'providers', 'resourceTypes', 'results', 'operationEffects', 'executionOrigins']))
|
|
220
|
-
return false;
|
|
221
|
-
const facet = (candidate, maximum, textMaximum, allowed) => isCollection(candidate, maximum, (row) => isCountRows([row], 1, textMaximum, allowed));
|
|
222
|
-
return (facet(value.tags, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetTagRows, 128, TAG_IDS) &&
|
|
223
|
-
facet(value.operations, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetOperationRows, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationCodeUnits) &&
|
|
224
|
-
facet(value.providers, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetProviderRows, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.providerCodeUnits) &&
|
|
225
|
-
facet(value.resourceTypes, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetResourceTypeRows, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceTypeCodeUnits) &&
|
|
226
|
-
facet(value.results, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetResultRows, 256) &&
|
|
227
|
-
facet(value.operationEffects, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetOperationEffectRows, 32, EFFECTS) &&
|
|
228
|
-
facet(value.executionOrigins, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.facetExecutionOriginRows, 32, ORIGINS) &&
|
|
229
|
-
Object.values(value).every(collection => {
|
|
230
|
-
const items = collection.items;
|
|
231
|
-
return (new Set(items.map(row => row.value)).size === items.length &&
|
|
232
|
-
items.every((row, index) => index === 0 || items[index - 1].count > row.count || (items[index - 1].count === row.count && items[index - 1].value < row.value)));
|
|
233
|
-
}));
|
|
234
|
-
};
|
|
235
|
-
const isMonthList = (value) => isSortedUniqueStrings(value, 1200, month => MONTH.test(month));
|
|
236
|
-
const containsOnly = (values, parent) => values.every(value => parent.has(value));
|
|
237
|
-
const areDisjoint = (left, right) => left.every(value => !right.includes(value));
|
|
238
|
-
const isContiguousRange = (months, from, to) => {
|
|
239
|
-
if (months.length === 0 || months[0] !== from || months[months.length - 1] !== to)
|
|
240
|
-
return false;
|
|
241
|
-
for (let index = 1; index < months.length; index += 1) {
|
|
242
|
-
const [year, month] = months[index - 1].split('-').map(Number);
|
|
243
|
-
const next = new Date(Date.UTC(year, month, 1)).toISOString().slice(0, 7);
|
|
244
|
-
if (months[index] !== next)
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
return true;
|
|
248
|
-
};
|
|
249
|
-
/** Validates the exact, bounded, consumer-safe V1 Activity Analysis response. */
|
|
250
|
-
export const isPortalActivityAnalysisResponse = (value) => {
|
|
251
|
-
if (!hasExactKeys(value, [
|
|
252
|
-
'schemaVersion',
|
|
253
|
-
'generatedAt',
|
|
254
|
-
'subscriptionId',
|
|
255
|
-
'fromMonth',
|
|
256
|
-
'toMonth',
|
|
257
|
-
'requestedMonths',
|
|
258
|
-
'availableMonths',
|
|
259
|
-
'missingMonths',
|
|
260
|
-
'partialMonths',
|
|
261
|
-
'staleMonths',
|
|
262
|
-
'freshnessUnknownMonths',
|
|
263
|
-
'analysisVersions',
|
|
264
|
-
'taxonomyVersions',
|
|
265
|
-
'facets',
|
|
266
|
-
'activitySeries',
|
|
267
|
-
'resources',
|
|
268
|
-
'operationSummaries',
|
|
269
|
-
'securitySensitive',
|
|
270
|
-
'powerPatterns',
|
|
271
|
-
'limitations',
|
|
272
|
-
], ['resourceId']) ||
|
|
273
|
-
value.schemaVersion !== PORTAL_ACTIVITY_ANALYSIS_RESPONSE_SCHEMA_VERSION ||
|
|
274
|
-
!isTimestamp(value.generatedAt) ||
|
|
275
|
-
!isText(value.subscriptionId, 2048) ||
|
|
276
|
-
typeof value.fromMonth !== 'string' ||
|
|
277
|
-
!MONTH.test(value.fromMonth) ||
|
|
278
|
-
typeof value.toMonth !== 'string' ||
|
|
279
|
-
!MONTH.test(value.toMonth) ||
|
|
280
|
-
!isMonthList(value.requestedMonths) ||
|
|
281
|
-
!isContiguousRange(value.requestedMonths, value.fromMonth, value.toMonth) ||
|
|
282
|
-
!isMonthList(value.availableMonths) ||
|
|
283
|
-
!isMonthList(value.missingMonths) ||
|
|
284
|
-
!isMonthList(value.partialMonths) ||
|
|
285
|
-
!isMonthList(value.staleMonths) ||
|
|
286
|
-
!isMonthList(value.freshnessUnknownMonths) ||
|
|
287
|
-
!isSortedUniqueStrings(value.analysisVersions, 32, item => isText(item, 64)) ||
|
|
288
|
-
!isSortedUniqueStrings(value.taxonomyVersions, 32, item => isText(item, 64)) ||
|
|
289
|
-
(value.resourceId !== undefined && !isText(value.resourceId, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceIdCodeUnits)) ||
|
|
290
|
-
!isFacets(value.facets))
|
|
291
|
-
return false;
|
|
292
|
-
const requested = new Set(value.requestedMonths);
|
|
293
|
-
const available = new Set(value.availableMonths);
|
|
294
|
-
if (!containsOnly(value.availableMonths, requested) ||
|
|
295
|
-
!containsOnly(value.missingMonths, requested) ||
|
|
296
|
-
!areDisjoint(value.availableMonths, value.missingMonths) ||
|
|
297
|
-
value.availableMonths.length + value.missingMonths.length !== value.requestedMonths.length ||
|
|
298
|
-
!containsOnly(value.partialMonths, available) ||
|
|
299
|
-
!containsOnly(value.staleMonths, available) ||
|
|
300
|
-
!containsOnly(value.freshnessUnknownMonths, available) ||
|
|
301
|
-
!areDisjoint(value.staleMonths, value.freshnessUnknownMonths))
|
|
302
|
-
return false;
|
|
303
|
-
const subscriptionId = value.subscriptionId;
|
|
304
|
-
const resourceId = value.resourceId;
|
|
305
|
-
if (!isCollection(value.activitySeries, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.activitySeries, (item) => isSeries(item, subscriptionId, resourceId, available)) ||
|
|
306
|
-
!isCollection(value.resources, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceSummaries, (item) => isResource(item, subscriptionId, resourceId)) ||
|
|
307
|
-
!isCollection(value.operationSummaries, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.operationSummaries, (item) => isDerived(item, subscriptionId, resourceId) && item.derivedType === 'operationSummary') ||
|
|
308
|
-
!isCollection(value.securitySensitive, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.securitySensitive, (item) => isDerived(item, subscriptionId, resourceId) && item.derivedType === 'securitySensitiveActivity') ||
|
|
309
|
-
!isCollection(value.powerPatterns, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.powerPatterns, (item) => isDerived(item, subscriptionId, resourceId) && item.derivedType === 'powerPatternEvidence'))
|
|
310
|
-
return false;
|
|
311
|
-
if (!isRanked(value.activitySeries.items, item => item.seriesId) ||
|
|
312
|
-
!isRanked(value.resources.items, item => item.scope.resourceId) ||
|
|
313
|
-
!isRanked(value.operationSummaries.items, item => item.groupId) ||
|
|
314
|
-
!isRanked(value.securitySensitive.items, item => item.groupId) ||
|
|
315
|
-
!isRanked(value.powerPatterns.items, item => item.patternId))
|
|
316
|
-
return false;
|
|
317
|
-
const publicIds = [
|
|
318
|
-
...value.activitySeries.items.map(item => item.seriesId),
|
|
319
|
-
...value.operationSummaries.items.map(item => item.groupId),
|
|
320
|
-
...value.securitySensitive.items.map(item => item.groupId),
|
|
321
|
-
...value.powerPatterns.items.map(item => item.patternId),
|
|
322
|
-
];
|
|
323
|
-
if (new Set(publicIds).size !== publicIds.length)
|
|
324
|
-
return false;
|
|
325
|
-
if (!isSortedUniqueStrings(value.limitations, LIMITATIONS.size, item => LIMITATIONS.has(item)))
|
|
326
|
-
return false;
|
|
327
|
-
const limitations = new Set(value.limitations);
|
|
328
|
-
const facetTruncated = Object.values(value.facets).some(collection => collection.truncated);
|
|
329
|
-
const responseTruncated = facetTruncated ||
|
|
330
|
-
value.activitySeries.truncated ||
|
|
331
|
-
value.resources.truncated ||
|
|
332
|
-
value.operationSummaries.truncated ||
|
|
333
|
-
value.securitySensitive.truncated ||
|
|
334
|
-
value.powerPatterns.truncated ||
|
|
335
|
-
limitations.has('nested-values-truncated');
|
|
336
|
-
if (limitations.has('response-truncated') !== responseTruncated ||
|
|
337
|
-
limitations.has('facet-values-truncated') !== facetTruncated ||
|
|
338
|
-
limitations.has('resource-summaries-truncated') !== value.resources.truncated ||
|
|
339
|
-
limitations.has('operation-summaries-truncated') !== value.operationSummaries.truncated ||
|
|
340
|
-
limitations.has('security-sensitive-truncated') !== value.securitySensitive.truncated ||
|
|
341
|
-
limitations.has('power-patterns-truncated') !== value.powerPatterns.truncated ||
|
|
342
|
-
limitations.has('month-missing') !== value.missingMonths.length > 0 ||
|
|
343
|
-
limitations.has('month-partial') !== value.partialMonths.length > 0 ||
|
|
344
|
-
limitations.has('month-stale') !== value.staleMonths.length > 0 ||
|
|
345
|
-
limitations.has('month-freshness-unknown') !== value.freshnessUnknownMonths.length > 0 ||
|
|
346
|
-
limitations.has('mixed-analysis-versions') !== value.analysisVersions.length > 1 ||
|
|
347
|
-
limitations.has('mixed-taxonomy-versions') !== value.taxonomyVersions.length > 1)
|
|
348
|
-
return false;
|
|
349
|
-
try {
|
|
350
|
-
return utf8ByteLength(JSON.stringify(value)) <= PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.responseUtf8Bytes;
|
|
351
|
-
}
|
|
352
|
-
catch {
|
|
353
|
-
return false;
|
|
354
|
-
}
|
|
355
|
-
};
|
|
356
|
-
/** Throws when a value is not the exact public V1 Activity Analysis response. */
|
|
357
|
-
export function assertPortalActivityAnalysisResponse(value) {
|
|
358
|
-
if (!isPortalActivityAnalysisResponse(value))
|
|
359
|
-
throw new Error('Invalid Portal Activity Analysis response.');
|
|
360
|
-
}
|
|
@@ -1,172 +0,0 @@
|
|
|
1
|
-
import { ACTIVITY_LOG_TAG_IDS, ACTIVITY_LOG_TAXONOMY_VERSION, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1, } from './activityLogAnalysis.js';
|
|
2
|
-
export const MONTH = /^\d{4}-(0[1-9]|1[0-2])$/;
|
|
3
|
-
const TIMESTAMP = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
4
|
-
const EVIDENCE_ID = /^aev1_[a-f0-9]{64}$/;
|
|
5
|
-
const GROUP_ID = /^aag1_[a-f0-9]{64}$/;
|
|
6
|
-
export const TAG_IDS = new Set(ACTIVITY_LOG_TAG_IDS);
|
|
7
|
-
export const ORIGINS = new Set(['manual', 'workloadAutomation', 'azurePlatform', 'unknown']);
|
|
8
|
-
export const EFFECTS = new Set(['write', 'delete', 'action', 'read', 'other']);
|
|
9
|
-
export const CONFIDENCES = new Set(['high', 'medium', 'low']);
|
|
10
|
-
export const POWER_SUFFICIENCY = new Set(['oneSided', 'oneOff', 'sameDayRepeat', 'repeated']);
|
|
11
|
-
export const LIMITATIONS = new Set([
|
|
12
|
-
'source-coverage-partial',
|
|
13
|
-
'unclassified-events',
|
|
14
|
-
'facet-values-truncated',
|
|
15
|
-
'resource-summaries-truncated',
|
|
16
|
-
'operation-summaries-truncated',
|
|
17
|
-
'security-sensitive-truncated',
|
|
18
|
-
'power-patterns-truncated',
|
|
19
|
-
'artifact-size-budget',
|
|
20
|
-
'month-missing',
|
|
21
|
-
'month-partial',
|
|
22
|
-
'month-stale',
|
|
23
|
-
'month-freshness-unknown',
|
|
24
|
-
'nested-values-truncated',
|
|
25
|
-
'mixed-analysis-versions',
|
|
26
|
-
'mixed-taxonomy-versions',
|
|
27
|
-
'response-truncated',
|
|
28
|
-
]);
|
|
29
|
-
const SCOPE_LEVELS = new Set(['subscription', 'resourceGroup', 'resource', 'unknown']);
|
|
30
|
-
const RESERVED_KEYS = new Set(['__proto__', 'prototype', 'constructor']);
|
|
31
|
-
export const isRecord = (value) => {
|
|
32
|
-
if (value === null || typeof value !== 'object' || Array.isArray(value))
|
|
33
|
-
return false;
|
|
34
|
-
const prototype = Object.getPrototypeOf(value);
|
|
35
|
-
return prototype === Object.prototype || prototype === null;
|
|
36
|
-
};
|
|
37
|
-
export const hasExactKeys = (value, required, optional = []) => {
|
|
38
|
-
if (!isRecord(value))
|
|
39
|
-
return false;
|
|
40
|
-
const allowed = new Set([...required, ...optional]);
|
|
41
|
-
const keys = Object.keys(value);
|
|
42
|
-
return required.every(key => Object.prototype.hasOwnProperty.call(value, key)) && keys.every(key => allowed.has(key) && !RESERVED_KEYS.has(key));
|
|
43
|
-
};
|
|
44
|
-
export const isText = (value, maximum) => typeof value === 'string' && value.length > 0 && value.length <= maximum && value.trim() === value;
|
|
45
|
-
export const isCount = (value) => Number.isSafeInteger(value) && value >= 0;
|
|
46
|
-
export const isPositiveCount = (value) => isCount(value) && value > 0;
|
|
47
|
-
export const isTimestamp = (value) => {
|
|
48
|
-
if (typeof value !== 'string' || !TIMESTAMP.test(value))
|
|
49
|
-
return false;
|
|
50
|
-
const milliseconds = Date.parse(value);
|
|
51
|
-
return Number.isFinite(milliseconds) && new Date(milliseconds).toISOString() === value;
|
|
52
|
-
};
|
|
53
|
-
export const isDate = (value) => {
|
|
54
|
-
if (typeof value !== 'string' || !/^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])$/.test(value))
|
|
55
|
-
return false;
|
|
56
|
-
return new Date(`${value}T00:00:00.000Z`).toISOString().slice(0, 10) === value;
|
|
57
|
-
};
|
|
58
|
-
export const isSortedUniqueStrings = (value, maximum, predicate) => Array.isArray(value) &&
|
|
59
|
-
value.length <= maximum &&
|
|
60
|
-
value.every((item, index) => typeof item === 'string' && predicate(item) && (index === 0 || value[index - 1] < item));
|
|
61
|
-
export const countRowsTotal = (rows) => {
|
|
62
|
-
let total = 0;
|
|
63
|
-
for (const row of rows) {
|
|
64
|
-
total += row.count;
|
|
65
|
-
if (!Number.isSafeInteger(total))
|
|
66
|
-
return undefined;
|
|
67
|
-
}
|
|
68
|
-
return total;
|
|
69
|
-
};
|
|
70
|
-
export const isCountRows = (value, maximum, valueMaximum, allowed) => {
|
|
71
|
-
if (!Array.isArray(value) || value.length > maximum)
|
|
72
|
-
return false;
|
|
73
|
-
for (let index = 0; index < value.length; index += 1) {
|
|
74
|
-
const row = value[index];
|
|
75
|
-
if (!hasExactKeys(row, ['value', 'count']) || !isText(row.value, valueMaximum) || !isPositiveCount(row.count))
|
|
76
|
-
return false;
|
|
77
|
-
if (allowed && !allowed.has(row.value))
|
|
78
|
-
return false;
|
|
79
|
-
const previous = value[index - 1];
|
|
80
|
-
if (previous && (previous.count < row.count || (previous.count === row.count && previous.value >= row.value)))
|
|
81
|
-
return false;
|
|
82
|
-
}
|
|
83
|
-
return true;
|
|
84
|
-
};
|
|
85
|
-
export const isChronologicalCountRows = (value, predicate) => Array.isArray(value) &&
|
|
86
|
-
value.every((row, index) => hasExactKeys(row, ['value', 'count']) &&
|
|
87
|
-
typeof row.value === 'string' &&
|
|
88
|
-
predicate(row.value) &&
|
|
89
|
-
isPositiveCount(row.count) &&
|
|
90
|
-
(index === 0 || value[index - 1].value < row.value));
|
|
91
|
-
export const isScope = (value, subscriptionId, resourceId) => {
|
|
92
|
-
if (!hasExactKeys(value, ['subscriptionId', 'level'], ['resourceId', 'resourceGroup', 'provider', 'resourceType', 'resourceName']) ||
|
|
93
|
-
value.subscriptionId !== subscriptionId ||
|
|
94
|
-
typeof value.level !== 'string' ||
|
|
95
|
-
!SCOPE_LEVELS.has(value.level))
|
|
96
|
-
return false;
|
|
97
|
-
if (value.resourceId !== undefined && !isText(value.resourceId, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceIdCodeUnits))
|
|
98
|
-
return false;
|
|
99
|
-
if (value.resourceGroup !== undefined && !isText(value.resourceGroup, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceNameCodeUnits))
|
|
100
|
-
return false;
|
|
101
|
-
if (value.provider !== undefined && !isText(value.provider, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.providerCodeUnits))
|
|
102
|
-
return false;
|
|
103
|
-
if (value.resourceType !== undefined && !isText(value.resourceType, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceTypeCodeUnits))
|
|
104
|
-
return false;
|
|
105
|
-
if (value.resourceName !== undefined && !isText(value.resourceName, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.resourceNameCodeUnits))
|
|
106
|
-
return false;
|
|
107
|
-
if (value.level === 'resource' && typeof value.resourceId !== 'string')
|
|
108
|
-
return false;
|
|
109
|
-
if (value.level === 'resource') {
|
|
110
|
-
const scopedSubscriptionId = /^\/subscriptions\/([^/]+)\//i.exec(value.resourceId)?.[1];
|
|
111
|
-
if (!scopedSubscriptionId || scopedSubscriptionId.toLowerCase() !== subscriptionId.toLowerCase())
|
|
112
|
-
return false;
|
|
113
|
-
}
|
|
114
|
-
if (value.level === 'resourceGroup' && typeof value.resourceGroup !== 'string')
|
|
115
|
-
return false;
|
|
116
|
-
if (value.level === 'subscription' && (value.resourceId !== undefined || value.resourceGroup !== undefined))
|
|
117
|
-
return false;
|
|
118
|
-
return resourceId === undefined || value.resourceId === resourceId;
|
|
119
|
-
};
|
|
120
|
-
/** Validates the exact additive classification carried by one Portal Activity Log entry. */
|
|
121
|
-
export const isPortalActivityLogClassification = (value) => {
|
|
122
|
-
if (!hasExactKeys(value, ['taxonomyVersion', 'executionOrigin', 'operationEffect', 'scope', 'tags']) ||
|
|
123
|
-
value.taxonomyVersion !== ACTIVITY_LOG_TAXONOMY_VERSION ||
|
|
124
|
-
typeof value.executionOrigin !== 'string' ||
|
|
125
|
-
!ORIGINS.has(value.executionOrigin) ||
|
|
126
|
-
typeof value.operationEffect !== 'string' ||
|
|
127
|
-
!EFFECTS.has(value.operationEffect) ||
|
|
128
|
-
!isRecord(value.scope) ||
|
|
129
|
-
typeof value.scope.subscriptionId !== 'string' ||
|
|
130
|
-
!isScope(value.scope, value.scope.subscriptionId) ||
|
|
131
|
-
!Array.isArray(value.tags) ||
|
|
132
|
-
value.tags.length > PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.tagAssignmentsPerEvent)
|
|
133
|
-
return false;
|
|
134
|
-
const tags = value.tags;
|
|
135
|
-
return tags.every((tag, index) => {
|
|
136
|
-
if (!hasExactKeys(tag, ['tagId', 'dimension', 'confidence']) ||
|
|
137
|
-
typeof tag.tagId !== 'string' ||
|
|
138
|
-
!TAG_IDS.has(tag.tagId) ||
|
|
139
|
-
tag.dimension !== tag.tagId.slice(0, tag.tagId.indexOf('.')) ||
|
|
140
|
-
typeof tag.confidence !== 'string' ||
|
|
141
|
-
!CONFIDENCES.has(tag.confidence))
|
|
142
|
-
return false;
|
|
143
|
-
return index === 0 || tags[index - 1].tagId < tag.tagId;
|
|
144
|
-
});
|
|
145
|
-
};
|
|
146
|
-
/** Validates the opaque V1 public Activity Log evidence ID syntax. */
|
|
147
|
-
export const isPortalActivityEvidenceId = (value) => typeof value === 'string' && EVIDENCE_ID.test(value);
|
|
148
|
-
/** Validates the opaque V1 public Activity Analysis group ID syntax. */
|
|
149
|
-
export const isPortalActivityAnalysisGroupId = (value) => typeof value === 'string' && GROUP_ID.test(value);
|
|
150
|
-
export const isEvidenceIds = (value) => Array.isArray(value) &&
|
|
151
|
-
value.length <= PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.evidenceIdsPerItem &&
|
|
152
|
-
value.every(isPortalActivityEvidenceId) &&
|
|
153
|
-
new Set(value).size === value.length;
|
|
154
|
-
export const isGroupIds = (value) => isSortedUniqueStrings(value, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.evidenceIdsPerItem, isPortalActivityAnalysisGroupId);
|
|
155
|
-
export const isTags = (value) => isSortedUniqueStrings(value, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.tagCountsPerItem, tag => TAG_IDS.has(tag));
|
|
156
|
-
export const isReasons = (value) => isSortedUniqueStrings(value, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.reasonCodesPerItem, reason => {
|
|
157
|
-
if (!isText(reason, PORTAL_ACTIVITY_ANALYSIS_LIMITS_V1.reasonCodeUnits))
|
|
158
|
-
return false;
|
|
159
|
-
return (reason === 'derived.operation-summary' ||
|
|
160
|
-
reason === 'derived.security-sensitive-activity' ||
|
|
161
|
-
reason === 'derived.power-pattern-evidence' ||
|
|
162
|
-
(reason.startsWith('tag.') && TAG_IDS.has(reason.slice(4))));
|
|
163
|
-
});
|
|
164
|
-
export const hasValidTimes = (value) => isTimestamp(value.firstTimestamp) && isTimestamp(value.lastTimestamp) && value.firstTimestamp <= value.lastTimestamp;
|
|
165
|
-
export const utf8ByteLength = (value) => {
|
|
166
|
-
let bytes = 0;
|
|
167
|
-
for (const character of value) {
|
|
168
|
-
const codePoint = character.codePointAt(0);
|
|
169
|
-
bytes += codePoint <= 0x7f ? 1 : codePoint <= 0x7ff ? 2 : codePoint <= 0xffff ? 3 : 4;
|
|
170
|
-
}
|
|
171
|
-
return bytes;
|
|
172
|
-
};
|