@spottoai/types-package 1.0.2-beta.356 → 1.0.2-beta.357

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.
Files changed (55) hide show
  1. package/README.md +26 -0
  2. package/dist/azure/billingArtifactCanonicalization.d.ts +28 -0
  3. package/dist/azure/billingArtifactCanonicalization.d.ts.map +1 -0
  4. package/dist/azure/billingArtifactCanonicalization.js +291 -0
  5. package/dist/azure/billingArtifactCanonicalization.js.map +1 -0
  6. package/dist/azure/billingArtifactEvidence.d.ts +39 -0
  7. package/dist/azure/billingArtifactEvidence.d.ts.map +1 -0
  8. package/dist/azure/billingArtifactEvidence.js +29 -0
  9. package/dist/azure/billingArtifactEvidence.js.map +1 -0
  10. package/dist/azure/billingArtifactGeneration.d.ts +114 -0
  11. package/dist/azure/billingArtifactGeneration.d.ts.map +1 -0
  12. package/dist/azure/billingArtifactGeneration.js +238 -0
  13. package/dist/azure/billingArtifactGeneration.js.map +1 -0
  14. package/dist/azure/billingPlots.d.ts +22 -0
  15. package/dist/azure/billingPlots.d.ts.map +1 -1
  16. package/dist/azure/billingPlots.js +186 -0
  17. package/dist/azure/billingPlots.js.map +1 -1
  18. package/dist/azure/views.d.ts +62 -1
  19. package/dist/azure/views.d.ts.map +1 -1
  20. package/dist/azure/views.js +152 -1
  21. package/dist/azure/views.js.map +1 -1
  22. package/dist/common/artifactControlData.d.ts +12 -0
  23. package/dist/common/artifactControlData.d.ts.map +1 -0
  24. package/dist/common/artifactControlData.js +102 -0
  25. package/dist/common/artifactControlData.js.map +1 -0
  26. package/dist/common/artifactEvidence.d.ts +144 -0
  27. package/dist/common/artifactEvidence.d.ts.map +1 -0
  28. package/dist/common/artifactEvidence.js +181 -0
  29. package/dist/common/artifactEvidence.js.map +1 -0
  30. package/dist/common/artifactEvidenceValidation.d.ts +16 -0
  31. package/dist/common/artifactEvidenceValidation.d.ts.map +1 -0
  32. package/dist/common/artifactEvidenceValidation.js +31 -0
  33. package/dist/common/artifactEvidenceValidation.js.map +1 -0
  34. package/dist/common/artifactGeneration.d.ts +4 -2
  35. package/dist/common/artifactGeneration.d.ts.map +1 -1
  36. package/dist/common/artifactGeneration.js.map +1 -1
  37. package/dist/common/capabilityPassport.d.ts +6 -11
  38. package/dist/common/capabilityPassport.d.ts.map +1 -1
  39. package/dist/common/capabilityPassport.js +2 -10
  40. package/dist/common/capabilityPassport.js.map +1 -1
  41. package/dist/esm/azure/billingArtifactCanonicalization.js +281 -0
  42. package/dist/esm/azure/billingArtifactEvidence.js +23 -0
  43. package/dist/esm/azure/billingArtifactGeneration.js +229 -0
  44. package/dist/esm/azure/billingPlots.js +184 -1
  45. package/dist/esm/azure/views.js +149 -0
  46. package/dist/esm/common/artifactControlData.js +95 -0
  47. package/dist/esm/common/artifactEvidence.js +173 -0
  48. package/dist/esm/common/artifactEvidenceValidation.js +24 -0
  49. package/dist/esm/common/capabilityPassport.js +2 -10
  50. package/dist/esm/index.js +3 -0
  51. package/dist/index.d.ts +3 -0
  52. package/dist/index.d.ts.map +1 -1
  53. package/dist/index.js +3 -0
  54. package/dist/index.js.map +1 -1
  55. package/package.json +3 -2
@@ -0,0 +1,238 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isBillingAnalysisCurrentPointerV1 = exports.isBillingAnalyzerOutputManifestV2 = exports.isBillingAnalyzerRequestV2 = exports.isBillingAnalyzerInputCurrentPointerV1 = exports.isBillingAnalyzerInputManifestV2 = void 0;
4
+ const artifactEvidence_js_1 = require("../common/artifactEvidence.js");
5
+ const artifactEvidenceValidation_js_1 = require("../common/artifactEvidenceValidation.js");
6
+ const artifactControlData_js_1 = require("../common/artifactControlData.js");
7
+ const billingArtifactEvidence_js_1 = require("./billingArtifactEvidence.js");
8
+ const BILLING_BASES = new Set(['actual', 'amortized']);
9
+ const COVERAGE_VERDICTS = new Set(['complete', 'partial', 'none', 'unknown']);
10
+ const DATE_BASES = new Set(['utc', 'billing-calendar', 'company-local']);
11
+ const CONTENT_ENCODINGS = new Set(['identity', 'gzip']);
12
+ const SHA256_PATTERN = /^[a-f0-9]{64}$/;
13
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ const isNonEmptyString = (value) => typeof value === 'string' && value.trim() === value && value.length > 0;
15
+ const isPositiveInteger = (value) => Number.isSafeInteger(value) && Number(value) > 0;
16
+ const isNonNegativeInteger = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
17
+ const isFiniteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
18
+ const isStringIn = (value, values) => typeof value === 'string' && values.has(value);
19
+ const hasUniqueValues = (values) => new Set(values).size === values.length;
20
+ const publicationDecisionReferencesDigest = (value, digests) => isRecord(value) &&
21
+ Array.isArray(value.dependencies) &&
22
+ value.dependencies.some(dependency => isRecord(dependency) && typeof dependency.digest === 'string' && digests.has(dependency.digest));
23
+ const isCanonicalIsoTimestamp = (value) => {
24
+ if (!isNonEmptyString(value))
25
+ return false;
26
+ const timestamp = Date.parse(value);
27
+ return Number.isFinite(timestamp) && new Date(timestamp).toISOString() === value;
28
+ };
29
+ const hasControlCharacters = (value) => Array.from(value).some(character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);
30
+ const allowedDescriptorPaths = (descriptors) => Array.isArray(descriptors) ? descriptors.flatMap(descriptor => (0, artifactControlData_js_1.allowedArtifactReferenceField)(descriptor, 'path')) : [];
31
+ const isPathSegment = (value) => isNonEmptyString(value) && !/[\\/?#%]/.test(value) && !hasControlCharacters(value) && value !== '.' && value !== '..';
32
+ const inputGenerationPrefix = (subscriptionId, generationId) => `subscriptions/${subscriptionId}/history/billing/analyzer-inputs/generations/${generationId}/`;
33
+ const inputManifestPath = (subscriptionId, generationId) => `${inputGenerationPrefix(subscriptionId, generationId)}manifest.json`;
34
+ const outputGenerationPrefix = (subscriptionId, generationId) => `subscriptions/${subscriptionId}/billing/generations/${generationId}/`;
35
+ const outputManifestPath = (subscriptionId, generationId) => `${outputGenerationPrefix(subscriptionId, generationId)}manifest.json`;
36
+ const isGenerationPath = (value, prefix, forbiddenExactPath) => (0, artifactEvidenceValidation_js_1.isStrictLogicalArtifactReference)(value) && value.startsWith(prefix) && value.length > prefix.length && value !== forbiddenExactPath;
37
+ const hasMatchingIdentity = (subscriptionId, generationId, ownership, revision, enforceable) => {
38
+ if (!isPathSegment(subscriptionId) ||
39
+ !isPathSegment(generationId) ||
40
+ !(0, artifactEvidence_js_1.isArtifactOwnershipBinding)(ownership) ||
41
+ !(0, artifactEvidenceValidation_js_1.isArtifactRevisionVector)(revision)) {
42
+ return false;
43
+ }
44
+ if (ownership.provider !== 'azure' || ownership.accountId !== subscriptionId)
45
+ return false;
46
+ if (ownership.ownershipEpochRevision !== revision.ownershipEpochRevision)
47
+ return false;
48
+ return !enforceable || (0, artifactEvidence_js_1.isEnforceableArtifactOwnershipBinding)(ownership);
49
+ };
50
+ const isSha256 = (value) => typeof value === 'string' && SHA256_PATTERN.test(value);
51
+ const isRequestedPeriod = (value) => {
52
+ if (!isRecord(value) ||
53
+ !isCanonicalIsoTimestamp(value.fromInclusive) ||
54
+ !isCanonicalIsoTimestamp(value.throughExclusive) ||
55
+ Date.parse(value.throughExclusive) <= Date.parse(value.fromInclusive) ||
56
+ !isStringIn(value.dateBasis, DATE_BASES) ||
57
+ !isStringIn(value.basis, BILLING_BASES)) {
58
+ return false;
59
+ }
60
+ return value.timeZone === undefined || isNonEmptyString(value.timeZone);
61
+ };
62
+ const isInputObjectDescriptor = (value, subscriptionId, generationId) => {
63
+ if (!isRecord(value))
64
+ return false;
65
+ const prefix = inputGenerationPrefix(subscriptionId, generationId);
66
+ return (isGenerationPath(value.path, prefix, inputManifestPath(subscriptionId, generationId)) &&
67
+ (value.versionId === undefined || isNonEmptyString(value.versionId)) &&
68
+ isNonEmptyString(value.etag) &&
69
+ isSha256(value.sha256) &&
70
+ isPositiveInteger(value.byteCount) &&
71
+ isNonNegativeInteger(value.rowCount) &&
72
+ isStringIn(value.basis, BILLING_BASES) &&
73
+ (value.currencyCode === undefined || isNonEmptyString(value.currencyCode)) &&
74
+ isStringIn(value.coverage, COVERAGE_VERDICTS));
75
+ };
76
+ const isOutputArtifactDescriptor = (value, subscriptionId, generationId) => {
77
+ if (!isRecord(value))
78
+ return false;
79
+ const prefix = outputGenerationPrefix(subscriptionId, generationId);
80
+ return (isGenerationPath(value.path, prefix, outputManifestPath(subscriptionId, generationId)) &&
81
+ isNonEmptyString(value.name) &&
82
+ value.mediaType === 'application/json' &&
83
+ isStringIn(value.contentEncoding, CONTENT_ENCODINGS) &&
84
+ isNonNegativeInteger(value.byteLength) &&
85
+ isSha256(value.sha256));
86
+ };
87
+ const isJsonMetadata = (value) => {
88
+ if (!isRecord(value))
89
+ return false;
90
+ const visit = (candidate) => {
91
+ if (candidate === null || typeof candidate === 'string' || typeof candidate === 'boolean')
92
+ return true;
93
+ if (isFiniteNumber(candidate))
94
+ return true;
95
+ if (Array.isArray(candidate))
96
+ return candidate.every(visit);
97
+ return isRecord(candidate) && Object.getPrototypeOf(candidate) === Object.prototype && Object.values(candidate).every(visit);
98
+ };
99
+ return visit(value);
100
+ };
101
+ /** Validates one immutable billing analyzer input manifest without performing I/O. */
102
+ const isBillingAnalyzerInputManifestV2 = (value) => {
103
+ if (!isRecord(value) ||
104
+ (0, artifactControlData_js_1.containsForbiddenArtifactControlData)(value, [...(0, artifactControlData_js_1.allowedArtifactIdentityField)(value, 'publicationKey'), ...allowedDescriptorPaths(value.inputs)])) {
105
+ return false;
106
+ }
107
+ if (value.schemaVersion !== 2 || value.status !== 'completed')
108
+ return false;
109
+ if (!hasMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision, false))
110
+ return false;
111
+ if (!isNonEmptyString(value.publicationKey) || !isSha256(value.coveragePlanDigest) || !isSha256(value.manifestDigest))
112
+ return false;
113
+ if (!isCanonicalIsoTimestamp(value.asOfUtc) || !isCanonicalIsoTimestamp(value.stableCutoffUtc) || !isCanonicalIsoTimestamp(value.completedAt)) {
114
+ return false;
115
+ }
116
+ if (Date.parse(value.stableCutoffUtc) > Date.parse(value.asOfUtc) || Date.parse(value.completedAt) < Date.parse(value.asOfUtc))
117
+ return false;
118
+ if (!Array.isArray(value.requestedPeriods) || value.requestedPeriods.length === 0 || !value.requestedPeriods.every(isRequestedPeriod))
119
+ return false;
120
+ const periodKeys = value.requestedPeriods.map(period => `${period.fromInclusive}\n${period.throughExclusive}\n${period.dateBasis}\n${period.timeZone ?? ''}\n${period.basis}`);
121
+ if (!hasUniqueValues(periodKeys))
122
+ return false;
123
+ if (!Array.isArray(value.inputs) || value.inputs.length === 0)
124
+ return false;
125
+ if (!value.inputs.every(input => isInputObjectDescriptor(input, value.subscriptionId, value.generationId)))
126
+ return false;
127
+ return hasUniqueValues(value.inputs.map(input => input.path));
128
+ };
129
+ exports.isBillingAnalyzerInputManifestV2 = isBillingAnalyzerInputManifestV2;
130
+ /** Validates the enforceable current pointer for one published analyzer input generation. */
131
+ const isBillingAnalyzerInputCurrentPointerV1 = (value) => {
132
+ if (!isRecord(value) || (0, artifactControlData_js_1.containsForbiddenArtifactControlData)(value, (0, artifactControlData_js_1.allowedArtifactReferenceField)(value, 'manifestPath')))
133
+ return false;
134
+ if (value.schemaVersion !== 1 || value.status !== 'completed')
135
+ return false;
136
+ if (!hasMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision, true))
137
+ return false;
138
+ return ((0, artifactEvidenceValidation_js_1.isStrictLogicalArtifactReference)(value.manifestPath) &&
139
+ value.manifestPath === inputManifestPath(value.subscriptionId, value.generationId) &&
140
+ isSha256(value.manifestDigest) &&
141
+ isCanonicalIsoTimestamp(value.completedAt));
142
+ };
143
+ exports.isBillingAnalyzerInputCurrentPointerV1 = isBillingAnalyzerInputCurrentPointerV1;
144
+ /** Validates the V2 queue envelope and its immutable input-manifest binding. */
145
+ const isBillingAnalyzerRequestV2 = (value) => {
146
+ if (!isRecord(value) || (0, artifactControlData_js_1.containsForbiddenArtifactControlData)(value, (0, artifactControlData_js_1.allowedArtifactReferenceField)(value, 'inputManifestPath')))
147
+ return false;
148
+ if (value.schemaVersion !== 2 || (value.publicationMode !== 'observe' && value.publicationMode !== 'enforce'))
149
+ return false;
150
+ const enforceable = value.publicationMode === 'enforce';
151
+ if (!hasMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision, enforceable))
152
+ return false;
153
+ if (![value.eventId, value.correlationId].every(isNonEmptyString) || !isSha256(value.messageId) || !isSha256(value.idempotencyKey))
154
+ return false;
155
+ if (value.idempotencyKey !== value.messageId || !isCanonicalIsoTimestamp(value.occurredAt))
156
+ return false;
157
+ if (!(0, artifactEvidenceValidation_js_1.isStrictLogicalArtifactReference)(value.inputManifestPath) ||
158
+ value.inputManifestPath !== inputManifestPath(value.subscriptionId, value.generationId)) {
159
+ return false;
160
+ }
161
+ if (!isSha256(value.inputManifestDigest))
162
+ return false;
163
+ return value.displayMetadata === undefined || isJsonMetadata(value.displayMetadata);
164
+ };
165
+ exports.isBillingAnalyzerRequestV2 = isBillingAnalyzerRequestV2;
166
+ /** Validates an immutable analyzer output manifest and its exact input binding. */
167
+ const isBillingAnalyzerOutputManifestV2 = (value) => {
168
+ if (!isRecord(value) ||
169
+ (0, artifactControlData_js_1.containsForbiddenArtifactControlData)(value, [
170
+ ...(0, artifactControlData_js_1.allowedArtifactReferenceField)(value, 'inputManifestPath'),
171
+ ...allowedDescriptorPaths(value.artifacts),
172
+ ])) {
173
+ return false;
174
+ }
175
+ if (value.schemaVersion !== 2 || value.status !== 'completed')
176
+ return false;
177
+ if (!hasMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision, false))
178
+ return false;
179
+ if (!(0, artifactEvidenceValidation_js_1.isStrictLogicalArtifactReference)(value.inputManifestPath) ||
180
+ value.inputManifestPath !== inputManifestPath(value.subscriptionId, value.generationId)) {
181
+ return false;
182
+ }
183
+ if (!isSha256(value.inputManifestDigest) || !isSha256(value.outputBindingDigest) || !isSha256(value.manifestDigest))
184
+ return false;
185
+ if (!Array.isArray(value.artifacts) || value.artifacts.length === 0)
186
+ return false;
187
+ if (!value.artifacts.every(artifact => isOutputArtifactDescriptor(artifact, value.subscriptionId, value.generationId))) {
188
+ return false;
189
+ }
190
+ if (!hasUniqueValues(value.artifacts.map(artifact => artifact.path)) || !hasUniqueValues(value.artifacts.map(artifact => artifact.name)))
191
+ return false;
192
+ const outputDerivedDigests = new Set([
193
+ value.inputManifestDigest,
194
+ value.outputBindingDigest,
195
+ value.manifestDigest,
196
+ ...value.artifacts.map(artifact => artifact.sha256),
197
+ ]);
198
+ if (value.outputBindingDigest === value.inputManifestDigest ||
199
+ value.outputBindingDigest === value.manifestDigest ||
200
+ value.artifacts.some(artifact => artifact.sha256 === value.outputBindingDigest || artifact.sha256 === value.manifestDigest) ||
201
+ publicationDecisionReferencesDigest(value.publicationDecision, new Set([...outputDerivedDigests].filter(digest => digest !== value.inputManifestDigest)))) {
202
+ return false;
203
+ }
204
+ if (!value.artifacts.some(artifact => artifact.path === `${outputGenerationPrefix(value.subscriptionId, value.generationId)}metadata.json`)) {
205
+ return false;
206
+ }
207
+ return ((0, billingArtifactEvidence_js_1.isBillingCompletedArtifactPublicationDecision)(value.publicationDecision, value.generationId, value.inputManifestDigest) &&
208
+ isCanonicalIsoTimestamp(value.completedAt));
209
+ };
210
+ exports.isBillingAnalyzerOutputManifestV2 = isBillingAnalyzerOutputManifestV2;
211
+ /** Validates the sole promoted authority pointer for completed billing analysis. */
212
+ const isBillingAnalysisCurrentPointerV1 = (value) => {
213
+ if (!isRecord(value) ||
214
+ (0, artifactControlData_js_1.containsForbiddenArtifactControlData)(value, [
215
+ ...(0, artifactControlData_js_1.allowedArtifactReferenceField)(value, 'inputManifestPath'),
216
+ ...(0, artifactControlData_js_1.allowedArtifactReferenceField)(value, 'outputManifestPath'),
217
+ ])) {
218
+ return false;
219
+ }
220
+ if (value.schemaVersion !== 1 || value.status !== 'completed')
221
+ return false;
222
+ if (!hasMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision, true))
223
+ return false;
224
+ if (!(0, artifactEvidenceValidation_js_1.isStrictLogicalArtifactReference)(value.inputManifestPath) ||
225
+ value.inputManifestPath !== inputManifestPath(value.subscriptionId, value.generationId)) {
226
+ return false;
227
+ }
228
+ if (!(0, artifactEvidenceValidation_js_1.isStrictLogicalArtifactReference)(value.outputManifestPath) ||
229
+ value.outputManifestPath !== outputManifestPath(value.subscriptionId, value.generationId)) {
230
+ return false;
231
+ }
232
+ if (!isSha256(value.inputManifestDigest) || !isSha256(value.outputManifestDigest))
233
+ return false;
234
+ return ((0, billingArtifactEvidence_js_1.isBillingCompletedArtifactPublicationDecision)(value.publicationDecision, value.generationId, value.inputManifestDigest) &&
235
+ isCanonicalIsoTimestamp(value.completedAt));
236
+ };
237
+ exports.isBillingAnalysisCurrentPointerV1 = isBillingAnalysisCurrentPointerV1;
238
+ //# sourceMappingURL=billingArtifactGeneration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"billingArtifactGeneration.js","sourceRoot":"","sources":["../../src/azure/billingArtifactGeneration.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  /**
2
2
  * Billing cost analysis types for Azure cost visualization.
3
3
  */
4
+ import { type ArtifactOwnershipBinding, type ArtifactRevisionVector, type BillingArtifactReadState } from '../common/artifactEvidence.js';
5
+ import { type BillingCompletedArtifactPublicationDecision, type BillingPartialArtifactPublicationDecision } from './billingArtifactEvidence.js';
6
+ export type { BillingArtifactPublicationDecision, BillingCompletedArtifactPublicationDecision, BillingPartialArtifactPublicationDecision, } from './billingArtifactEvidence.js';
4
7
  /** Named cost chart windows emitted by the Azure billing analyzer. */
5
8
  export type BillingChartViewKey = '7_days' | '30_days' | '90_days' | '12_months' | 'forecast_90_days' | (string & {});
6
9
  /** Supported billing chart aggregation categories. */
@@ -246,6 +249,25 @@ export interface BillingCostAnalysisMetadata {
246
249
  /** Forecast amount at the end of the current period. */
247
250
  forecastPeriodEnd?: number;
248
251
  }
252
+ type BillingCostAnalysisDocumentState = Exclude<BillingArtifactReadState, 'suppressed' | 'unavailable'>;
253
+ type BillingCompletedCostAnalysisDocumentState = Exclude<BillingCostAnalysisDocumentState, 'partial'>;
254
+ /** Immutable billing metadata with an explicit evidence and read-state binding. */
255
+ interface BillingCostAnalysisMetadataV2Base extends BillingCostAnalysisMetadata {
256
+ schemaVersion: 2;
257
+ ownership: ArtifactOwnershipBinding<'azure'>;
258
+ revision: ArtifactRevisionVector;
259
+ inputManifestDigest: string;
260
+ outputBindingDigest: string;
261
+ }
262
+ export type BillingCostAnalysisMetadataV2 = BillingCostAnalysisMetadataV2Base & ({
263
+ artifactState: BillingCompletedCostAnalysisDocumentState;
264
+ artifactEvidence: BillingCompletedArtifactPublicationDecision;
265
+ } | {
266
+ artifactState: 'partial';
267
+ artifactEvidence: BillingPartialArtifactPublicationDecision;
268
+ });
269
+ /** Dependency-free validator for customer-readable V2 billing metadata. */
270
+ export declare const isBillingCostAnalysisMetadataV2: (value: unknown) => value is BillingCostAnalysisMetadataV2;
249
271
  /** @deprecated Use BillingCostAnalysisMetadata. */
250
272
  export type BillingPlotsMetadata = BillingCostAnalysisMetadata;
251
273
  //# sourceMappingURL=billingPlots.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"billingPlots.d.ts","sourceRoot":"","sources":["../../src/azure/billingPlots.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"billingPlots.d.ts","sourceRoot":"","sources":["../../src/azure/billingPlots.ts"],"names":[],"mappings":"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"}
@@ -3,4 +3,190 @@
3
3
  * Billing cost analysis types for Azure cost visualization.
4
4
  */
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.isBillingCostAnalysisMetadataV2 = void 0;
7
+ const artifactEvidence_js_1 = require("../common/artifactEvidence.js");
8
+ const artifactControlData_js_1 = require("../common/artifactControlData.js");
9
+ const artifactEvidenceValidation_js_1 = require("../common/artifactEvidenceValidation.js");
10
+ const billingArtifactEvidence_js_1 = require("./billingArtifactEvidence.js");
11
+ const BILLING_DOCUMENT_STATES = new Set(['current', 'stale', 'partial', 'fallback', 'complete-empty']);
12
+ const SHA256_PATTERN = /^[a-f0-9]{64}$/;
13
+ const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
14
+ const isNonEmptyString = (value) => typeof value === 'string' && value.trim() === value && value.length > 0;
15
+ const isFiniteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
16
+ const isOptionalFiniteNumber = (value) => value === undefined || isFiniteNumber(value);
17
+ const isNullableFiniteNumber = (value) => value === null || isFiniteNumber(value);
18
+ const isNonNegativeInteger = (value) => Number.isSafeInteger(value) && Number(value) >= 0;
19
+ const isPositiveInteger = (value) => Number.isSafeInteger(value) && Number(value) > 0;
20
+ const isStringArray = (value) => Array.isArray(value) && value.every(isNonEmptyString);
21
+ const hasControlCharacters = (value) => Array.from(value).some(character => character.charCodeAt(0) < 32 || character.charCodeAt(0) === 127);
22
+ const isPathSegment = (value) => isNonEmptyString(value) && !/[\\/?#%]/.test(value) && !hasControlCharacters(value) && value !== '.' && value !== '..';
23
+ const publicationDecisionReferencesDigest = (value, digest) => isRecord(value) && Array.isArray(value.dependencies) && value.dependencies.some(dependency => isRecord(dependency) && dependency.digest === digest);
24
+ const isTrend = (value) => isRecord(value) && isNonEmptyString(value.method) && isFiniteNumber(value.slope) && isFiniteNumber(value.intercept);
25
+ const isDailyPoint = (value) => isRecord(value) &&
26
+ isNonEmptyString(value.date) &&
27
+ isFiniteNumber(value.timestamp) &&
28
+ isFiniteNumber(value.cost) &&
29
+ typeof value.isAnomaly === 'boolean' &&
30
+ isNonNegativeInteger(value.anomalyVotes) &&
31
+ isOptionalFiniteNumber(value.trendCost) &&
32
+ (value.anomalyMethods === undefined || isStringArray(value.anomalyMethods));
33
+ const isForecastPoint = (value) => isRecord(value) &&
34
+ isNonEmptyString(value.date) &&
35
+ isFiniteNumber(value.timestamp) &&
36
+ isFiniteNumber(value.cost) &&
37
+ isOptionalFiniteNumber(value.trendCost);
38
+ const isMonthlyPoint = (value) => isRecord(value) &&
39
+ /^\d{4}-\d{2}$/.test(String(value.month)) &&
40
+ isFiniteNumber(value.startDate) &&
41
+ isFiniteNumber(value.endDate) &&
42
+ isFiniteNumber(value.cost) &&
43
+ isFiniteNumber(value.averageDailyCost) &&
44
+ isNonNegativeInteger(value.anomalyCount) &&
45
+ isOptionalFiniteNumber(value.trendCost) &&
46
+ (value.anomalyDates === undefined || (Array.isArray(value.anomalyDates) && value.anomalyDates.every(isFiniteNumber)));
47
+ const hasCommonChartViewFields = (value) => isFiniteNumber(value.startDate) &&
48
+ isFiniteNumber(value.endDate) &&
49
+ isFiniteNumber(value.averageDailyCost) &&
50
+ isFiniteNumber(value.totalCost) &&
51
+ (value.trend === undefined || isTrend(value.trend));
52
+ const isChartView = (value) => {
53
+ if (!isRecord(value) || (value.trend !== undefined && !isTrend(value.trend)))
54
+ return false;
55
+ if (value.forecastMethod !== undefined) {
56
+ return (value.aggregation === 'daily' &&
57
+ isNonEmptyString(value.forecastMethod) &&
58
+ [value.startDate, value.endDate, value.actualTotalCost, value.forecastRemaining, value.forecastMonthTotal].every(isFiniteNumber) &&
59
+ Array.isArray(value.actualPoints) &&
60
+ value.actualPoints.every(isDailyPoint) &&
61
+ Array.isArray(value.forecastPoints) &&
62
+ value.forecastPoints.every(isForecastPoint) &&
63
+ Array.isArray(value.fittedPoints) &&
64
+ value.fittedPoints.every(isForecastPoint));
65
+ }
66
+ if (!hasCommonChartViewFields(value) || !Array.isArray(value.points))
67
+ return false;
68
+ if (value.aggregation === 'daily')
69
+ return value.points.every(isDailyPoint);
70
+ if (value.aggregation === 'monthly')
71
+ return value.points.every(isMonthlyPoint);
72
+ return false;
73
+ };
74
+ const isChartData = (value) => {
75
+ if (!isRecord(value) || !isPositiveInteger(value.schemaVersion) || !isNonEmptyString(value.source))
76
+ return false;
77
+ if (!isRecord(value.dataWindow) ||
78
+ !isFiniteNumber(value.dataWindow.startDate) ||
79
+ !isFiniteNumber(value.dataWindow.endDate) ||
80
+ !isNonNegativeInteger(value.dataWindow.pointCount)) {
81
+ return false;
82
+ }
83
+ if (!isRecord(value.views) || !Object.values(value.views).every(view => view === undefined || isChartView(view)))
84
+ return false;
85
+ if (!isRecord(value.detectors) || !isFiniteNumber(value.detectors.threshold) || !Array.isArray(value.detectors.methods))
86
+ return false;
87
+ return value.detectors.methods.every(method => isRecord(method) &&
88
+ isNonEmptyString(method.name) &&
89
+ (method.status === undefined || isNonEmptyString(method.status)) &&
90
+ (method.error === undefined || method.error === null || typeof method.error === 'string') &&
91
+ Array.isArray(method.triggeredDates) &&
92
+ method.triggeredDates.every(isFiniteNumber));
93
+ };
94
+ const isDriverResource = (value) => isRecord(value) &&
95
+ isNonEmptyString(value.name) &&
96
+ (value.resourceScope === undefined || isNonEmptyString(value.resourceScope)) &&
97
+ (value.resourceId === undefined || isNonEmptyString(value.resourceId)) &&
98
+ (value.isSubscriptionLevel === undefined || typeof value.isSubscriptionLevel === 'boolean') &&
99
+ isFiniteNumber(value.cost) &&
100
+ isNullableFiniteNumber(value.baseline) &&
101
+ isFiniteNumber(value.delta) &&
102
+ isNullableFiniteNumber(value.percentChange) &&
103
+ typeof value.isNew === 'boolean' &&
104
+ isNonEmptyString(value.summary);
105
+ const isAnomaly = (value) => {
106
+ if (!isRecord(value) || !isFiniteNumber(value.date) || !isNonEmptyString(value.summary) || !isNonEmptyString(value.confidence))
107
+ return false;
108
+ if (!isStringArray(value.notes) || !isRecord(value.impact) || !Array.isArray(value.drivers))
109
+ return false;
110
+ const impact = value.impact;
111
+ const impactRequired = ['cost', 'delta', 'monthToDateCost'];
112
+ const impactNullable = [
113
+ 'baseline7Day',
114
+ 'baseline30Day',
115
+ 'percentChange',
116
+ 'previousDayCost',
117
+ 'previousDayDelta',
118
+ 'monthToDateBaseline',
119
+ 'monthToDateDelta',
120
+ 'monthToDatePercentChange',
121
+ ];
122
+ if (!impactRequired.every(field => isFiniteNumber(impact[field])) || !impactNullable.every(field => isNullableFiniteNumber(impact[field]))) {
123
+ return false;
124
+ }
125
+ return value.drivers.every(driver => isRecord(driver) &&
126
+ isNonEmptyString(driver.type) &&
127
+ isNonEmptyString(driver.name) &&
128
+ isNonEmptyString(driver.summary) &&
129
+ isFiniteNumber(driver.cost) &&
130
+ isFiniteNumber(driver.delta) &&
131
+ isNullableFiniteNumber(driver.baseline) &&
132
+ isNullableFiniteNumber(driver.percentChange) &&
133
+ isFiniteNumber(driver.shareOfImpactPercent) &&
134
+ typeof driver.isNew === 'boolean' &&
135
+ Array.isArray(driver.resources) &&
136
+ driver.resources.every(isDriverResource));
137
+ };
138
+ const hasValidMetadataEvidenceState = (state, evidence, billingGenerationId, inputManifestDigest, chartData, anomalies) => {
139
+ if (state === 'partial')
140
+ return (0, billingArtifactEvidence_js_1.isBillingPartialArtifactPublicationDecision)(evidence, billingGenerationId, inputManifestDigest);
141
+ if (!(0, billingArtifactEvidence_js_1.isBillingCompletedArtifactPublicationDecision)(evidence, billingGenerationId, inputManifestDigest))
142
+ return false;
143
+ if (state !== 'complete-empty')
144
+ return true;
145
+ const billingHistory = evidence.dependencies.find(dependency => dependency.name === 'billing-history');
146
+ const dataWindow = chartData.dataWindow;
147
+ const views = chartData.views;
148
+ return (billingHistory?.emptyEvidence === 'complete-empty' &&
149
+ billingHistory.acceptedRowCount === 0 &&
150
+ isNonEmptyString(billingHistory.emptyProofRef) &&
151
+ isRecord(dataWindow) &&
152
+ dataWindow.pointCount === 0 &&
153
+ isRecord(views) &&
154
+ Object.values(views).every(view => view === undefined) &&
155
+ anomalies.length === 0);
156
+ };
157
+ /** Dependency-free validator for customer-readable V2 billing metadata. */
158
+ const isBillingCostAnalysisMetadataV2 = (value) => {
159
+ if (!isRecord(value) || (0, artifactControlData_js_1.containsForbiddenArtifactControlData)(value) || value.schemaVersion !== 2)
160
+ return false;
161
+ if (Object.prototype.hasOwnProperty.call(value, 'outputManifestDigest'))
162
+ return false;
163
+ if (!isPathSegment(value.subscriptionId) || !isPathSegment(value.billingGenerationId))
164
+ return false;
165
+ if (!(0, artifactEvidence_js_1.isArtifactOwnershipBinding)(value.ownership) || value.ownership.provider !== 'azure' || value.ownership.accountId !== value.subscriptionId)
166
+ return false;
167
+ if (!(0, artifactEvidenceValidation_js_1.isArtifactRevisionVector)(value.revision) || value.ownership.ownershipEpochRevision !== value.revision.ownershipEpochRevision) {
168
+ return false;
169
+ }
170
+ if (typeof value.artifactState !== 'string' || !BILLING_DOCUMENT_STATES.has(value.artifactState))
171
+ return false;
172
+ if (typeof value.inputManifestDigest !== 'string' || !SHA256_PATTERN.test(value.inputManifestDigest))
173
+ return false;
174
+ if (typeof value.outputBindingDigest !== 'string' || !SHA256_PATTERN.test(value.outputBindingDigest))
175
+ return false;
176
+ if (value.outputBindingDigest === value.inputManifestDigest ||
177
+ publicationDecisionReferencesDigest(value.artifactEvidence, value.outputBindingDigest)) {
178
+ return false;
179
+ }
180
+ if (!isChartData(value.chartData) || !Array.isArray(value.anomalies) || !value.anomalies.every(isAnomaly))
181
+ return false;
182
+ if (!hasValidMetadataEvidenceState(value.artifactState, value.artifactEvidence, value.billingGenerationId, value.inputManifestDigest, value.chartData, value.anomalies)) {
183
+ return false;
184
+ }
185
+ if (!isNonEmptyString(value.currencyCode) || !isNonEmptyString(value.currencySymbol))
186
+ return false;
187
+ if (value.forecastMethod !== undefined && !isNonEmptyString(value.forecastMethod))
188
+ return false;
189
+ return [value.forecastMonthTotal, value.forecastRemaining, value.forecastPeriodEnd].every(isOptionalFiniteNumber);
190
+ };
191
+ exports.isBillingCostAnalysisMetadataV2 = isBillingCostAnalysisMetadataV2;
6
192
  //# sourceMappingURL=billingPlots.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"billingPlots.js","sourceRoot":"","sources":["../../src/azure/billingPlots.ts"],"names":[],"mappings":";AAAA;;GAEG"}
1
+ {"version":3,"file":"billingPlots.js","sourceRoot":"","sources":["../../src/azure/billingPlots.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,uEAKuC;AACvC,6EAAwF;AACxF,2FAAmF;AACnF,6EAKsC;AA0StC,MAAM,uBAAuB,GAAG,IAAI,GAAG,CAAS,CAAC,SAAS,EAAE,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC,CAAC;AAC/G,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAExC,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAoC,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5I,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,KAAK,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AACtI,MAAM,cAAc,GAAG,CAAC,KAAc,EAAmB,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAChH,MAAM,sBAAsB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;AACzG,MAAM,sBAAsB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,KAAK,KAAK,IAAI,IAAI,cAAc,CAAC,KAAK,CAAC,CAAC;AACpG,MAAM,oBAAoB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;AAC5G,MAAM,iBAAiB,GAAG,CAAC,KAAc,EAAW,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACxG,MAAM,aAAa,GAAG,CAAC,KAAc,EAAqB,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;AACnH,MAAM,oBAAoB,GAAG,CAAC,KAAa,EAAW,EAAE,CACtD,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC;AACvG,MAAM,aAAa,GAAG,CAAC,KAAc,EAAmB,EAAE,CACxD,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,KAAK,IAAI,CAAC;AACxH,MAAM,mCAAmC,GAAG,CAAC,KAAc,EAAE,MAAc,EAAW,EAAE,CACtF,QAAQ,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC;AAEtJ,MAAM,OAAO,GAAG,CAAC,KAAc,EAAW,EAAE,CAC1C,QAAQ,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAEtH,MAAM,YAAY,GAAG,CAAC,KAAc,EAAW,EAAE,CAC/C,QAAQ,CAAC,KAAK,CAAC;IACf,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,OAAO,KAAK,CAAC,SAAS,KAAK,SAAS;IACpC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC;IACxC,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;IACvC,CAAC,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC;AAE9E,MAAM,eAAe,GAAG,CAAC,KAAc,EAAW,EAAE,CAClD,QAAQ,CAAC,KAAK,CAAC;IACf,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAE1C,MAAM,cAAc,GAAG,CAAC,KAAc,EAAW,EAAE,CACjD,QAAQ,CAAC,KAAK,CAAC;IACf,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IACzC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;IAC7B,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACtC,oBAAoB,CAAC,KAAK,CAAC,YAAY,CAAC;IACxC,sBAAsB,CAAC,KAAK,CAAC,SAAS,CAAC;IACvC,CAAC,KAAK,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC;AAExH,MAAM,wBAAwB,GAAG,CAAC,KAA8B,EAAW,EAAE,CAC3E,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC;IAC7B,cAAc,CAAC,KAAK,CAAC,gBAAgB,CAAC;IACtC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC;IAC/B,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;AAEtD,MAAM,WAAW,GAAG,CAAC,KAAc,EAAW,EAAE;IAC9C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC3F,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;QACvC,OAAO,CACL,KAAK,CAAC,WAAW,KAAK,OAAO;YAC7B,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC;YACtC,CAAC,KAAK,CAAC,SAAS,EAAE,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,kBAAkB,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC;YAChI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YACjC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,YAAY,CAAC;YACtC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,cAAc,CAAC;YACnC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,eAAe,CAAC;YAC3C,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,YAAY,CAAC;YACjC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,eAAe,CAAC,CAC1C,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACnF,IAAI,KAAK,CAAC,WAAW,KAAK,OAAO;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;IAC3E,IAAI,KAAK,CAAC,WAAW,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAc,EAAoC,EAAE;IACvE,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,aAAa,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,MAAM,CAAC;QAAE,OAAO,KAAK,CAAC;IACjH,IACE,CAAC,QAAQ,CAAC,KAAK,CAAC,UAAU,CAAC;QAC3B,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC;QAC3C,CAAC,cAAc,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC;QACzC,CAAC,oBAAoB,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAClD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/H,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IACtI,OAAO,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAClC,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,MAAM,CAAC;QAChB,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7B,CAAC,MAAM,CAAC,MAAM,KAAK,SAAS,IAAI,gBAAgB,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAChE,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,IAAI,MAAM,CAAC,KAAK,KAAK,IAAI,IAAI,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC;QACzF,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,cAAc,CAAC;QACpC,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,cAAc,CAAC,CAC9C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAAW,EAAE,CACnD,QAAQ,CAAC,KAAK,CAAC;IACf,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;IAC5B,CAAC,KAAK,CAAC,aAAa,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;IAC5E,CAAC,KAAK,CAAC,UAAU,KAAK,SAAS,IAAI,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IACtE,CAAC,KAAK,CAAC,mBAAmB,KAAK,SAAS,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,SAAS,CAAC;IAC3F,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;IAC1B,sBAAsB,CAAC,KAAK,CAAC,QAAQ,CAAC;IACtC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC;IAC3B,sBAAsB,CAAC,KAAK,CAAC,aAAa,CAAC;IAC3C,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS;IAChC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAElC,MAAM,SAAS,GAAG,CAAC,KAAc,EAAW,EAAE;IAC5C,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7I,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC;QAAE,OAAO,KAAK,CAAC;IAC1G,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5B,MAAM,cAAc,GAAG,CAAC,MAAM,EAAE,OAAO,EAAE,iBAAiB,CAAC,CAAC;IAC5D,MAAM,cAAc,GAAG;QACrB,cAAc;QACd,eAAe;QACf,eAAe;QACf,iBAAiB;QACjB,kBAAkB;QAClB,qBAAqB;QACrB,kBAAkB;QAClB,0BAA0B;KAC3B,CAAC;IACF,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3I,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CACxB,MAAM,CAAC,EAAE,CACP,QAAQ,CAAC,MAAM,CAAC;QAChB,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7B,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC;QAC7B,gBAAgB,CAAC,MAAM,CAAC,OAAO,CAAC;QAChC,cAAc,CAAC,MAAM,CAAC,IAAI,CAAC;QAC3B,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC;QAC5B,sBAAsB,CAAC,MAAM,CAAC,QAAQ,CAAC;QACvC,sBAAsB,CAAC,MAAM,CAAC,aAAa,CAAC;QAC5C,cAAc,CAAC,MAAM,CAAC,oBAAoB,CAAC;QAC3C,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS;QACjC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC;QAC/B,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAC3C,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,6BAA6B,GAAG,CACpC,KAAc,EACd,QAAiB,EACjB,mBAA2B,EAC3B,mBAA2B,EAC3B,SAAkC,EAClC,SAAoB,EACX,EAAE;IACX,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,IAAA,wEAA2C,EAAC,QAAQ,EAAE,mBAAmB,EAAE,mBAAmB,CAAC,CAAC;IAChI,IAAI,CAAC,IAAA,0EAA6C,EAAC,QAAQ,EAAE,mBAAmB,EAAE,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACrH,IAAI,KAAK,KAAK,gBAAgB;QAAE,OAAO,IAAI,CAAC;IAC5C,MAAM,cAAc,GAAG,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC;IACvG,MAAM,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC;IACxC,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;IAC9B,OAAO,CACL,cAAc,EAAE,aAAa,KAAK,gBAAgB;QAClD,cAAc,CAAC,gBAAgB,KAAK,CAAC;QACrC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC;QAC9C,QAAQ,CAAC,UAAU,CAAC;QACpB,UAAU,CAAC,UAAU,KAAK,CAAC;QAC3B,QAAQ,CAAC,KAAK,CAAC;QACf,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,SAAS,CAAC;QACtD,SAAS,CAAC,MAAM,KAAK,CAAC,CACvB,CAAC;AACJ,CAAC,CAAC;AAEF,2EAA2E;AACpE,MAAM,+BAA+B,GAAG,CAAC,KAAc,EAA0C,EAAE;IACxG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAA,6DAAoC,EAAC,KAAK,CAAC,IAAI,KAAK,CAAC,aAAa,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/G,IAAI,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,sBAAsB,CAAC;QAAE,OAAO,KAAK,CAAC;IACtF,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACpG,IAAI,CAAC,IAAA,gDAA0B,EAAC,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,QAAQ,KAAK,OAAO,IAAI,KAAK,CAAC,SAAS,CAAC,SAAS,KAAK,KAAK,CAAC,cAAc;QAC5I,OAAO,KAAK,CAAC;IACf,IAAI,CAAC,IAAA,wDAAwB,EAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,SAAS,CAAC,sBAAsB,KAAK,KAAK,CAAC,QAAQ,CAAC,sBAAsB,EAAE,CAAC;QAClI,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,OAAO,KAAK,CAAC,aAAa,KAAK,QAAQ,IAAI,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/G,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACnH,IAAI,OAAO,KAAK,CAAC,mBAAmB,KAAK,QAAQ,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,mBAAmB,CAAC;QAAE,OAAO,KAAK,CAAC;IACnH,IACE,KAAK,CAAC,mBAAmB,KAAK,KAAK,CAAC,mBAAmB;QACvD,mCAAmC,CAAC,KAAK,CAAC,gBAAgB,EAAE,KAAK,CAAC,mBAAmB,CAAC,EACtF,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,SAAS,CAAC;QAAE,OAAO,KAAK,CAAC;IACxH,IACE,CAAC,6BAA6B,CAC5B,KAAK,CAAC,aAAa,EACnB,KAAK,CAAC,gBAAgB,EACtB,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,mBAAmB,EACzB,KAAK,CAAC,SAAS,EACf,KAAK,CAAC,SAAS,CAChB,EACD,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IACnG,IAAI,KAAK,CAAC,cAAc,KAAK,SAAS,IAAI,CAAC,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC;QAAE,OAAO,KAAK,CAAC;IAChG,OAAO,CAAC,KAAK,CAAC,kBAAkB,EAAE,KAAK,CAAC,iBAAiB,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;AACpH,CAAC,CAAC;AAlCW,QAAA,+BAA+B,mCAkC1C"}
@@ -10,6 +10,8 @@ import type { AdvisorScoreSummary } from './advisorScore.js';
10
10
  import type { AzurePortalArtifactGeneration, AzurePortalVersionedArtifact } from './portalArtifacts.js';
11
11
  import type { AzurePortalHealthEventsSummary, AzureResourceHealthAvailabilityStatusSummary } from './resourceHealth.js';
12
12
  import type { CostComposition, EstimateLens } from './costComposition.js';
13
+ import { type ArtifactOwnershipBinding, type ArtifactPublicationDecision, type ArtifactRevisionVector } from '../common/artifactEvidence.js';
14
+ import type { ArtifactDescriptor } from '../common/artifactGeneration.js';
13
15
  export interface AzureDashboardView extends AzurePortalVersionedArtifact {
14
16
  subscription: SubscriptionSummary;
15
17
  timestamp: string;
@@ -796,7 +798,27 @@ export type CompletedViewManifestV2 = CompletedViewManifestV2Base & ((CompletedV
796
798
  startedAt?: string;
797
799
  completedAt: string;
798
800
  }));
799
- export type AnyCompletedViewManifest = CompletedViewManifest | CompletedViewManifestV2;
801
+ interface CompletedViewArtifactDescriptor extends ArtifactDescriptor {
802
+ path: string;
803
+ }
804
+ /** Completed, evidence-aware portal or plugin generation for reader-first enforcement. */
805
+ export interface CompletedViewManifestV3 extends CompletedViewManifestV2RequestedCounts {
806
+ schemaVersion: 3;
807
+ status: 'completed';
808
+ runId: string;
809
+ subscriptionId: string;
810
+ artifacts: [CompletedViewArtifactDescriptor, ...CompletedViewArtifactDescriptor[]];
811
+ artifactGeneration: CompletedViewArtifactGeneration;
812
+ costSavings?: CompletedViewCostSavingsManifest;
813
+ failedArtifactCount: 0;
814
+ failedResourceCount: 0;
815
+ ownership: ArtifactOwnershipBinding<'azure'>;
816
+ revision: ArtifactRevisionVector;
817
+ compositeDependencyDigest: string;
818
+ publicationDecision: ArtifactPublicationDecision;
819
+ completedAt: string;
820
+ }
821
+ export type AnyCompletedViewManifest = CompletedViewManifest | CompletedViewManifestV2 | CompletedViewManifestV3;
800
822
  export interface AzureViewSetSurfaceReference {
801
823
  /** Immutable generation run ID declared by the surface completed manifest. */
802
824
  runId: string;
@@ -818,6 +840,40 @@ export interface CompletedAzureViewSetV1 {
818
840
  };
819
841
  completedAt: string;
820
842
  }
843
+ type CompletedArtifactPublicationDecision = Extract<ArtifactPublicationDecision, {
844
+ publication: 'completed';
845
+ }>;
846
+ interface AzureViewSetV2SurfaceReference {
847
+ runId: string;
848
+ manifestPath: string;
849
+ manifestDigest: string;
850
+ ownership: ArtifactOwnershipBinding<'azure'> & {
851
+ ownershipEpochRevision: number;
852
+ };
853
+ revision: ArtifactRevisionVector & {
854
+ ownershipEpochRevision: number;
855
+ };
856
+ compositeDependencyDigest: string;
857
+ completedAt: string;
858
+ }
859
+ /** Sole promoted authority for one evidence-enforced portal/plugin generation pair. */
860
+ export interface CompletedAzureViewSetV2 {
861
+ schemaVersion: 2;
862
+ status: 'completed';
863
+ subscriptionId: string;
864
+ publicationId: string;
865
+ ownership: ArtifactOwnershipBinding<'azure'> & {
866
+ ownershipEpochRevision: number;
867
+ };
868
+ revision: ArtifactRevisionVector & {
869
+ ownershipEpochRevision: number;
870
+ };
871
+ portal: AzureViewSetV2SurfaceReference;
872
+ plugin: AzureViewSetV2SurfaceReference;
873
+ compositeDependencyDigest: string;
874
+ publicationDecision: CompletedArtifactPublicationDecision;
875
+ completedAt: string;
876
+ }
821
877
  export interface AzureRecommendationResourceEvidenceEntry {
822
878
  recommendationId: string;
823
879
  /** Full presentation evidence, retained even when no active aggregate entry exists. */
@@ -835,4 +891,9 @@ export interface AzureRecommendationResourceEvidenceDocument {
835
891
  }
836
892
  /** Dependency-free rejection boundary for customer-readable cross-surface pointers. */
837
893
  export declare const isCompletedAzureViewSetV1: (value: unknown) => value is CompletedAzureViewSetV1;
894
+ /** Validates an evidence-aware completed portal or plugin generation manifest. */
895
+ export declare const isCompletedViewManifestV3: (value: unknown) => value is CompletedViewManifestV3;
896
+ /** Validates the promoted pointer for an evidence-enforced portal/plugin view pair. */
897
+ export declare const isCompletedAzureViewSetV2: (value: unknown) => value is CompletedAzureViewSetV2;
898
+ export {};
838
899
  //# sourceMappingURL=views.d.ts.map