import type { JsonObject, JsonValue } from '../common/artifactGeneration'; import type { AwsPublicArtifactEnvelope } from './publicArtifacts'; import type { AwsPortalAiAudience } from './portalPublicArtifactHistoryTypes'; import type { AwsPortalBillingBenefitCoverage, AwsPortalBillingBenefitCoverageWarning, AwsPortalBillingCommitmentSpend, AwsPortalBillingCostView, AwsPortalRecommendationLatestActionExecution, AwsPortalRecommendationSavingsVerification, AwsPortalRecommendationTemplateProvenanceSource } from './portalPublicArtifactNestedEvidence'; import { AWS_PORTAL_COMMITMENTS_PLANNING_LOGICAL_NAME } from './portalCommitmentsPlanningPublicArtifacts'; import { AWS_PORTAL_RELATIONSHIP_LOGICAL_NAME } from './portalRelationshipPublicArtifacts'; export declare const AWS_PORTAL_PUBLIC_ARTIFACT_SCHEMA_VERSION: 1; export declare const AWS_PORTAL_RESOURCE_COLLECTION_LOGICAL_NAME: "resources.json.gz"; export declare const AWS_PORTAL_ACCOUNT_SUMMARY_LOGICAL_NAME: "account-summary.json.gz"; export declare const AWS_PORTAL_ACCOUNT_SUMMARY_AI_COST_SUMMARY_LOGICAL_NAME: "account-summary-ai-cost-summary.json.gz"; export type AwsPortalHistorySha256 = string; export type AwsPortalResourceCollectionHistoryLogicalName = `resources-history--${string}.json.gz`; export type AwsPortalAccountSummaryHistoryLogicalName = `account-summary-history--${string}.json.gz`; export type AwsPortalPublicLogicalName = typeof AWS_PORTAL_RESOURCE_COLLECTION_LOGICAL_NAME | typeof AWS_PORTAL_ACCOUNT_SUMMARY_LOGICAL_NAME | typeof AWS_PORTAL_ACCOUNT_SUMMARY_AI_COST_SUMMARY_LOGICAL_NAME | typeof AWS_PORTAL_COMMITMENTS_PLANNING_LOGICAL_NAME | typeof AWS_PORTAL_RELATIONSHIP_LOGICAL_NAME | AwsPortalResourceCollectionHistoryLogicalName | AwsPortalAccountSummaryHistoryLogicalName; export declare function buildAwsPortalResourceCollectionHistoryLogicalName(identitySha256: AwsPortalHistorySha256): AwsPortalResourceCollectionHistoryLogicalName; export declare function buildAwsPortalAccountSummaryHistoryLogicalName(identitySha256: AwsPortalHistorySha256): AwsPortalAccountSummaryHistoryLogicalName; export interface AwsPortalBillingPeriod { start: string; end: string; } export type AwsPortalBillingScope = { source: 'cur'; reportName: string; billingPeriod: AwsPortalBillingPeriod; } | { source: 'cur-2.0-data-exports'; exportName: string; billingPeriod: AwsPortalBillingPeriod; }; export interface AwsPortalMetricTimeWindow { start: string; end: string; } export interface AwsPortalResourceCollectionScope { provider: 'aws'; accountId: AccountId; billing: AwsPortalBillingScope; resourceRegions: string[]; metricTimeWindow: AwsPortalMetricTimeWindow; tagRuleScope?: { companyId: string; }; } export interface AwsPortalAccountSummaryScope { provider: 'aws'; accountId: AccountId; billing: AwsPortalBillingScope; comparisonBillingPeriod?: AwsPortalBillingPeriod; resourceRegions: string[]; metricTimeWindow: AwsPortalMetricTimeWindow; } export declare function buildAwsPortalResourceCollectionHistoryIdentityKey(scope: AwsPortalResourceCollectionScope, generatedAt: string): string; export declare function buildAwsPortalResourceCollectionHistoryLogicalNameForScope(scope: AwsPortalResourceCollectionScope, generatedAt: string): AwsPortalResourceCollectionHistoryLogicalName; export declare function buildAwsPortalAccountSummaryHistoryIdentityKey(scope: Omit): string; export declare function buildAwsPortalAccountSummaryHistoryLogicalNameForScope(scope: Omit): AwsPortalAccountSummaryHistoryLogicalName; export declare function buildAwsPortalAccountSummaryTargetKey(scope: AwsPortalAccountSummaryScope): string; export declare function buildAwsPortalAccountSummaryAiCostSummaryTargetKey(scope: AwsPortalAccountSummaryScope, audience: AwsPortalAiAudience): string; export type AwsPortalDiscoveryFamily = 'ec2-instance' | 'ebs-volume' | 'efs-file-system' | 'lambda-function' | 'elasticache-cache-cluster' | 'elasticache-serverless-cache' | 'vpc' | 'subnet' | 'route-table' | 'internet-gateway' | 'nat-gateway' | 'network-interface' | 'virtual-private-gateway' | 'load-balancer-v2' | 'classic-load-balancer' | 'security-group' | 'rds-db-cluster' | 'rds-db-instance'; export type AwsPortalMetricFamily = 'ec2-core-utilization' | 'ebs-volume-performance' | 'lambda-function-performance' | 'load-balancer-v2-network-traffic' | 'load-balancer-v2-application-traffic' | 'rds-db-instance-utilization'; export type AwsPortalRecommendationSource = 'custom' | 'compute-optimizer' | 'cost-optimization-hub' | 'resilience-hub' | 'security-hub' | 'trusted-advisor' | 'well-architected'; export interface AwsPortalFreshness { lastSuccessfulRefreshAt?: string; hasSuccessfulRefresh: boolean; } export interface AwsPortalBillingFreshness { lastSuccessfulImportAt?: string; hasSuccessfulImport: boolean; } export interface AwsPortalBillingEvidenceScope { provider: 'aws'; source: 'cur' | 'cur-2.0-data-exports'; scope: 'account'; accountId: AccountId; reportName: string; billingPeriod: AwsPortalBillingPeriod; } export interface AwsPortalBillingSummary { totalPersistedExpenseCount: number; emptyScope: boolean; metadataFound: boolean; metadataMatchesRequestedBillingPeriod: boolean; } /** * The rolling window a billing evidence block measures. * * AWS-only. `scope.billingPeriod` names the anchor period the window was * resolved from; a run-anchored rolling 30 days routinely begins inside the * preceding period, so the block states the window and the adjacent persisted * periods that actually backed it rather than letting the anchor imply a * single-period read it never made. */ export interface AwsPortalBillingWindow { kind: 'last-30-days'; dayCount: 30; startDateInclusive: string; endDateExclusive: string; } /** * `partial-billing-period-coverage` means the window is real but only the * periods in `contributingBillingPeriods` backed it — an account whose * preceding month was never imported, for instance. */ export type AwsPortalBillingWindowCoverage = 'complete' | 'partial-billing-period-coverage'; export interface AwsPortalBillingCostAggregate { currency: string; expenseCount: number; baseCostAmount: number; amortizedCostAmount?: number; amortizedExpenseCount?: number; } export interface AwsPortalBillingGroupedResult { totalGroupCount: number; returnedGroupCount: number; truncated: boolean; items: Item[]; } export type AwsPortalBillingLabeledCost