@apexops/contracts 0.10.0-next.0

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 (101) hide show
  1. package/dist/.tsbuildinfo +1 -0
  2. package/dist/artifacts.d.ts +60 -0
  3. package/dist/artifacts.d.ts.map +1 -0
  4. package/dist/artifacts.js +46 -0
  5. package/dist/artifacts.js.map +1 -0
  6. package/dist/common.d.ts +22 -0
  7. package/dist/common.d.ts.map +1 -0
  8. package/dist/common.js +23 -0
  9. package/dist/common.js.map +1 -0
  10. package/dist/deployment.d.ts +100 -0
  11. package/dist/deployment.d.ts.map +1 -0
  12. package/dist/deployment.js +108 -0
  13. package/dist/deployment.js.map +1 -0
  14. package/dist/evidence.d.ts +256 -0
  15. package/dist/evidence.d.ts.map +1 -0
  16. package/dist/evidence.js +382 -0
  17. package/dist/evidence.js.map +1 -0
  18. package/dist/export-schemas.d.ts +2 -0
  19. package/dist/export-schemas.d.ts.map +1 -0
  20. package/dist/export-schemas.js +53 -0
  21. package/dist/export-schemas.js.map +1 -0
  22. package/dist/improvement.d.ts +92 -0
  23. package/dist/improvement.d.ts.map +1 -0
  24. package/dist/improvement.js +119 -0
  25. package/dist/improvement.js.map +1 -0
  26. package/dist/index.d.ts +983 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +128 -0
  29. package/dist/index.js.map +1 -0
  30. package/dist/onboarding.d.ts +15 -0
  31. package/dist/onboarding.d.ts.map +1 -0
  32. package/dist/onboarding.js +17 -0
  33. package/dist/onboarding.js.map +1 -0
  34. package/dist/pricing.d.ts +130 -0
  35. package/dist/pricing.d.ts.map +1 -0
  36. package/dist/pricing.js +355 -0
  37. package/dist/pricing.js.map +1 -0
  38. package/dist/runtime.d.ts +284 -0
  39. package/dist/runtime.d.ts.map +1 -0
  40. package/dist/runtime.js +196 -0
  41. package/dist/runtime.js.map +1 -0
  42. package/dist/schema-export.d.ts +15 -0
  43. package/dist/schema-export.d.ts.map +1 -0
  44. package/dist/schema-export.js +49 -0
  45. package/dist/schema-export.js.map +1 -0
  46. package/dist/targets.d.ts +359 -0
  47. package/dist/targets.d.ts.map +1 -0
  48. package/dist/targets.js +394 -0
  49. package/dist/targets.js.map +1 -0
  50. package/dist/test/contracts.test.d.ts +2 -0
  51. package/dist/test/contracts.test.d.ts.map +1 -0
  52. package/dist/test/contracts.test.js +867 -0
  53. package/dist/test/contracts.test.js.map +1 -0
  54. package/package.json +45 -0
  55. package/schemas/approval-evidence-v1.schema.json +172 -0
  56. package/schemas/architecture-availability-v1.schema.json +155 -0
  57. package/schemas/architecture-v1.schema.json +107 -0
  58. package/schemas/capability-pack-manifest-v1.schema.json +59 -0
  59. package/schemas/client-outcome-comparison-v1.schema.json +195 -0
  60. package/schemas/client-outcome-qualification-v1.schema.json +190 -0
  61. package/schemas/client-outcome-v1.schema.json +513 -0
  62. package/schemas/contract-metadata.json +232 -0
  63. package/schemas/cost-estimate-v1.schema.json +165 -0
  64. package/schemas/customization-lock-v1.schema.json +63 -0
  65. package/schemas/deployment-preview-v1.schema.json +180 -0
  66. package/schemas/diagnosis-v1.schema.json +111 -0
  67. package/schemas/environment-inputs-v1.schema.json +106 -0
  68. package/schemas/event-v1.schema.json +74 -0
  69. package/schemas/evidence-manifest-v1.schema.json +111 -0
  70. package/schemas/execution-plan-attestation-v1.schema.json +145 -0
  71. package/schemas/governance-constraints-v1.schema.json +103 -0
  72. package/schemas/iac-binding-v1.schema.json +74 -0
  73. package/schemas/iac-handoff-v1.schema.json +83 -0
  74. package/schemas/implementation-intent-v1.schema.json +89 -0
  75. package/schemas/improvement-decision-v1.schema.json +62 -0
  76. package/schemas/improvement-observation-v1.schema.json +166 -0
  77. package/schemas/improvement-policy-v1.schema.json +204 -0
  78. package/schemas/improvement-proposal-v1.schema.json +144 -0
  79. package/schemas/improvement-recurrence-v1.schema.json +130 -0
  80. package/schemas/input-request-v1.schema.json +242 -0
  81. package/schemas/input-submission-v1.schema.json +205 -0
  82. package/schemas/live-qualification-v1.schema.json +295 -0
  83. package/schemas/logical-resource-manifest-v1.schema.json +123 -0
  84. package/schemas/onboarding-config-v1.schema.json +59 -0
  85. package/schemas/operation-record-v1.schema.json +112 -0
  86. package/schemas/policy-property-map-v1.schema.json +108 -0
  87. package/schemas/pricing-evidence-v1.schema.json +628 -0
  88. package/schemas/pricing-request-v1.schema.json +424 -0
  89. package/schemas/project-config-v1.schema.json +43 -0
  90. package/schemas/quality-measurements-v1.schema.json +54 -0
  91. package/schemas/quality-report-v1.schema.json +114 -0
  92. package/schemas/quality-scorecard-v1.schema.json +109 -0
  93. package/schemas/requirements-v1.schema.json +108 -0
  94. package/schemas/resource-inventory-v1.schema.json +74 -0
  95. package/schemas/review-findings-v1.schema.json +126 -0
  96. package/schemas/run-config-v1.schema.json +133 -0
  97. package/schemas/runtime-bundle-lock-v1.schema.json +59 -0
  98. package/schemas/scenario-v1.schema.json +55 -0
  99. package/schemas/task-envelope-v1.schema.json +122 -0
  100. package/schemas/telemetry-v1.schema.json +117 -0
  101. package/schemas/workload-decision-manifest-v1.schema.json +320 -0
@@ -0,0 +1,355 @@
1
+ import { createHash } from "node:crypto";
2
+ import { Type } from "@sinclair/typebox";
3
+ import { Value } from "@sinclair/typebox/value";
4
+ import { ContractVersionSchema, IsoDateTimeSchema, ProjectIdSchema, RunIdSchema, SECRET_FIELD_PATTERN, SECRET_VALUE_PATTERN, Sha256Schema, registerContractFormats, } from "./common.js";
5
+ import { CurrencySchema } from "./targets.js";
6
+ export const PRICING_PARITY_SCENARIO_IDS = [
7
+ "PRICING-001-retail",
8
+ "PRICING-002-meter-aware",
9
+ "PRICING-003-bulk",
10
+ "PRICING-004-regional",
11
+ "PRICING-005-commitments",
12
+ "PRICING-006-negotiated",
13
+ "PRICING-007-ambiguity",
14
+ "PRICING-008-uncertainty",
15
+ "PRICING-009-throttling",
16
+ "PRICING-010-provenance",
17
+ ];
18
+ const ScenarioIdSchema = Type.Union(PRICING_PARITY_SCENARIO_IDS.map((id) => Type.Literal(id)));
19
+ const IdentifierSchema = Type.String({ pattern: "^[A-Za-z0-9][A-Za-z0-9 ._()/-]{0,127}$", maxLength: 128 });
20
+ const RegionSchema = Type.String({ pattern: "^[a-z][a-z0-9-]{1,31}$", maxLength: 32 });
21
+ const CodeSchema = Type.String({ pattern: "^[A-Z][A-Z0-9_]{0,63}$", maxLength: 64 });
22
+ const UnitDimensionSchema = Type.Union([
23
+ Type.Literal("hour"),
24
+ Type.Literal("day"),
25
+ Type.Literal("month"),
26
+ Type.Literal("second"),
27
+ Type.Literal("gb-month"),
28
+ Type.Literal("gb"),
29
+ Type.Literal("transactions"),
30
+ ]);
31
+ const CommitmentSchema = Type.Object({
32
+ kind: Type.Union([Type.Literal("none"), Type.Literal("reservation"), Type.Literal("savings-plan")]),
33
+ termMonths: Type.Optional(Type.Union([Type.Literal(12), Type.Literal(36)])),
34
+ priceBasis: Type.Optional(Type.Union([Type.Literal("hourly"), Type.Literal("total")])),
35
+ }, { additionalProperties: false });
36
+ const TargetSchema = Type.Object({
37
+ serviceName: IdentifierSchema,
38
+ skuName: Type.Optional(IdentifierSchema),
39
+ regions: Type.Array(RegionSchema, { minItems: 1, maxItems: 16, uniqueItems: true }),
40
+ currency: CurrencySchema,
41
+ }, { additionalProperties: false });
42
+ const UsageSchema = Type.Object({
43
+ dimension: UnitDimensionSchema,
44
+ quantity: Type.Number({ minimum: 0, maximum: 1_000_000_000 }),
45
+ }, { additionalProperties: false });
46
+ const MeterSchema = Type.Object({
47
+ meterId: IdentifierSchema,
48
+ unitDimension: UnitDimensionSchema,
49
+ unitQuantity: Type.Number({ exclusiveMinimum: 0, maximum: 1_000_000_000 }),
50
+ }, { additionalProperties: false });
51
+ export const PricingRequestV1Schema = Type.Object({
52
+ schemaVersion: ContractVersionSchema,
53
+ projectId: ProjectIdSchema,
54
+ runId: RunIdSchema,
55
+ scenarioId: ScenarioIdSchema,
56
+ target: TargetSchema,
57
+ usage: UsageSchema,
58
+ meter: Type.Optional(MeterSchema),
59
+ bulkItems: Type.Optional(Type.Array(Type.Object({
60
+ specId: IdentifierSchema,
61
+ target: TargetSchema,
62
+ usage: UsageSchema,
63
+ meter: Type.Optional(MeterSchema),
64
+ }, { additionalProperties: false }), { minItems: 2, maxItems: 256 })),
65
+ commitment: Type.Optional(CommitmentSchema),
66
+ requestedAt: IsoDateTimeSchema,
67
+ requestId: Sha256Schema,
68
+ }, { $id: "https://schemas.apexops.dev/pricing-request-v1.json", additionalProperties: false });
69
+ const PriceRecordSchema = Type.Object({
70
+ specId: Type.Optional(IdentifierSchema),
71
+ priceId: IdentifierSchema,
72
+ meterId: IdentifierSchema,
73
+ serviceName: IdentifierSchema,
74
+ skuName: IdentifierSchema,
75
+ region: RegionSchema,
76
+ currency: CurrencySchema,
77
+ priceType: Type.Union([
78
+ Type.Literal("consumption"),
79
+ Type.Literal("reservation"),
80
+ Type.Literal("savings-plan"),
81
+ Type.Literal("negotiated"),
82
+ ]),
83
+ unitDimension: UnitDimensionSchema,
84
+ unitQuantity: Type.Number({ exclusiveMinimum: 0, maximum: 1_000_000_000 }),
85
+ unitPrice: Type.Number({ minimum: 0, maximum: 1_000_000_000 }),
86
+ usageQuantity: Type.Number({ minimum: 0, maximum: 1_000_000_000 }),
87
+ projectedAmount: Type.Number({ minimum: 0, maximum: 1_000_000_000_000 }),
88
+ commitment: CommitmentSchema,
89
+ uncertainty: Type.Object({
90
+ lowerAmount: Type.Number({ minimum: 0, maximum: 1_000_000_000_000 }),
91
+ upperAmount: Type.Number({ minimum: 0, maximum: 1_000_000_000_000 }),
92
+ confidence: Type.Union([Type.Literal("low"), Type.Literal("medium"), Type.Literal("high")]),
93
+ reasonCodes: Type.Array(CodeSchema, { maxItems: 16, uniqueItems: true }),
94
+ }, { additionalProperties: false }),
95
+ }, { additionalProperties: false });
96
+ const ProvenanceSchema = Type.Object({
97
+ provider: Type.Literal("azure-resource-manager-mcp"),
98
+ endpointId: IdentifierSchema,
99
+ toolName: IdentifierSchema,
100
+ toolVersion: Type.String({ pattern: "^[0-9]+(?:\\.[0-9]+){1,3}(?:-[0-9A-Za-z.-]+)?$", maxLength: 32 }),
101
+ toolchainHash: Sha256Schema,
102
+ toolsListHash: Sha256Schema,
103
+ rawSourceDigest: Sha256Schema,
104
+ rawSourceBytes: Type.Integer({ minimum: 1, maximum: 16_777_216 }),
105
+ contentCapture: Type.Literal(false),
106
+ }, { additionalProperties: false });
107
+ const NextActionCodeSchema = Type.Union([
108
+ Type.Literal("SELECT_CANDIDATE"),
109
+ Type.Literal("RETRY_LATER"),
110
+ Type.Literal("RETRY_WITH_ATTESTED_SOURCE"),
111
+ Type.Literal("REFRESH_TOOL_BINDING"),
112
+ Type.Literal("REQUEST_AUTHORIZATION"),
113
+ ]);
114
+ export const PricingEvidenceV1Schema = Type.Object({
115
+ schemaVersion: ContractVersionSchema,
116
+ projectId: ProjectIdSchema,
117
+ runId: RunIdSchema,
118
+ scenarioId: ScenarioIdSchema,
119
+ requestId: Sha256Schema,
120
+ requestHash: Sha256Schema,
121
+ evidenceId: Sha256Schema,
122
+ provenance: ProvenanceSchema,
123
+ collectedAt: IsoDateTimeSchema,
124
+ expiresAt: IsoDateTimeSchema,
125
+ result: Type.Union([
126
+ Type.Object({
127
+ status: Type.Literal("matched"),
128
+ records: Type.Array(PriceRecordSchema, { minItems: 1, maxItems: 256 }),
129
+ totalAmount: Type.Number({ minimum: 0, maximum: 1_000_000_000_000 }),
130
+ paginationStatus: Type.Union([Type.Literal("complete"), Type.Literal("partial")]),
131
+ continuationCursorHash: Type.Optional(Sha256Schema),
132
+ bulk: Type.Optional(Type.Object({
133
+ deduplicatedSpecs: Type.Integer({ minimum: 1, maximum: 256 }),
134
+ successful: Type.Integer({ minimum: 0, maximum: 256 }),
135
+ failed: Type.Integer({ minimum: 0, maximum: 256 }),
136
+ partialFailures: Type.Array(Type.Object({ specId: IdentifierSchema, reasonCode: CodeSchema }, { additionalProperties: false }), { maxItems: 256 }),
137
+ }, { additionalProperties: false })),
138
+ regionalUnavailable: Type.Optional(Type.Array(RegionSchema, { maxItems: 16, uniqueItems: true })),
139
+ }, { additionalProperties: false }),
140
+ Type.Object({
141
+ status: Type.Literal("ambiguous"),
142
+ reasonCode: CodeSchema,
143
+ candidateIds: Type.Array(IdentifierSchema, { minItems: 2, maxItems: 32, uniqueItems: true }),
144
+ nextActionCode: NextActionCodeSchema,
145
+ }, { additionalProperties: false }),
146
+ Type.Object({
147
+ status: Type.Literal("unavailable"),
148
+ reasonCode: Type.Union([
149
+ Type.Literal("NO_MATCH"),
150
+ Type.Literal("THROTTLED"),
151
+ Type.Literal("TIMEOUT"),
152
+ Type.Literal("AUTHORIZATION_DENIED"),
153
+ Type.Literal("TOOL_DRIFT"),
154
+ Type.Literal("MALFORMED_SOURCE"),
155
+ Type.Literal("NEGOTIATED_PRICE_UNAVAILABLE"),
156
+ ]),
157
+ attemptCount: Type.Integer({ minimum: 1, maximum: 16 }),
158
+ retryAt: Type.Optional(IsoDateTimeSchema),
159
+ nextActionCode: NextActionCodeSchema,
160
+ }, { additionalProperties: false }),
161
+ ]),
162
+ qualifiesGate: Type.Literal(false),
163
+ }, { $id: "https://schemas.apexops.dev/pricing-evidence-v1.json", additionalProperties: false });
164
+ const MAX_EVIDENCE_LIFETIME_MS = 24 * 60 * 60 * 1_000;
165
+ function canonicalValue(value) {
166
+ if (Array.isArray(value))
167
+ return value.map(canonicalValue);
168
+ if (value !== null && typeof value === "object" && Object.getPrototypeOf(value) === Object.prototype) {
169
+ return Object.fromEntries(Object.entries(value)
170
+ .sort(([left], [right]) => left.localeCompare(right))
171
+ .map(([key, child]) => [key, canonicalValue(child)]));
172
+ }
173
+ if (value === null ||
174
+ typeof value === "string" ||
175
+ typeof value === "boolean" ||
176
+ (typeof value === "number" && Number.isFinite(value))) {
177
+ return value;
178
+ }
179
+ throw new TypeError("PRICING_NON_JSON_VALUE");
180
+ }
181
+ function contentHash(value) {
182
+ return createHash("sha256")
183
+ .update(JSON.stringify(canonicalValue(value)))
184
+ .digest("hex");
185
+ }
186
+ function containsSecret(value) {
187
+ if (Array.isArray(value))
188
+ return value.some(containsSecret);
189
+ if (value !== null && typeof value === "object") {
190
+ return Object.entries(value).some(([key, child]) => SECRET_FIELD_PATTERN.test(key) || containsSecret(child));
191
+ }
192
+ return typeof value === "string" && SECRET_VALUE_PATTERN.test(value);
193
+ }
194
+ function amountsEqual(left, right) {
195
+ return Math.abs(left - right) <= Number.EPSILON * Math.max(1, Math.abs(left), Math.abs(right)) * 16;
196
+ }
197
+ function isExactDateTime(value) {
198
+ return (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/.test(value) &&
199
+ Number.isFinite(Date.parse(value)));
200
+ }
201
+ export function calculatePricingRequestId(request) {
202
+ return contentHash(request);
203
+ }
204
+ export function calculatePricingEvidenceId(evidence) {
205
+ return contentHash(evidence);
206
+ }
207
+ export function hasValidPricingEvidence(request, evidence, evaluatedAt = Date.now()) {
208
+ try {
209
+ registerContractFormats();
210
+ return validatePricingEvidence(request, evidence, evaluatedAt);
211
+ }
212
+ catch {
213
+ return false;
214
+ }
215
+ }
216
+ function validatePricingEvidence(request, evidence, evaluatedAt) {
217
+ if (!Value.Check(PricingRequestV1Schema, request) || !Value.Check(PricingEvidenceV1Schema, evidence))
218
+ return false;
219
+ if (containsSecret(request) || containsSecret(evidence))
220
+ return false;
221
+ const validCommitment = (commitment) => commitment === undefined ||
222
+ (commitment.kind === "none"
223
+ ? commitment.termMonths === undefined && commitment.priceBasis === undefined
224
+ : (commitment.termMonths === 12 || commitment.termMonths === 36) && commitment.priceBasis !== undefined);
225
+ if (!validCommitment(request.commitment))
226
+ return false;
227
+ if ((request.scenarioId === "PRICING-003-bulk") !== (request.bulkItems !== undefined) ||
228
+ (request.scenarioId === "PRICING-005-commitments"
229
+ ? request.commitment === undefined || request.commitment.kind === "none"
230
+ : request.commitment !== undefined && request.commitment.kind !== "none")) {
231
+ return false;
232
+ }
233
+ const { requestId: _requestId, ...requestContent } = request;
234
+ const { evidenceId: _evidenceId, ...evidenceContent } = evidence;
235
+ const evaluationTime = typeof evaluatedAt === "number" ? evaluatedAt : Date.parse(evaluatedAt);
236
+ if (!Number.isFinite(evaluationTime) ||
237
+ !isExactDateTime(request.requestedAt) ||
238
+ !isExactDateTime(evidence.collectedAt) ||
239
+ !isExactDateTime(evidence.expiresAt) ||
240
+ request.requestId !== calculatePricingRequestId(requestContent) ||
241
+ evidence.evidenceId !== calculatePricingEvidenceId(evidenceContent) ||
242
+ evidence.requestId !== request.requestId ||
243
+ evidence.requestHash !== request.requestId ||
244
+ evidence.projectId !== request.projectId ||
245
+ evidence.runId !== request.runId ||
246
+ evidence.scenarioId !== request.scenarioId ||
247
+ Date.parse(evidence.collectedAt) < Date.parse(request.requestedAt) ||
248
+ Date.parse(evidence.collectedAt) > evaluationTime ||
249
+ Date.parse(evidence.expiresAt) <= Date.parse(evidence.collectedAt) ||
250
+ Date.parse(evidence.expiresAt) - Date.parse(evidence.collectedAt) > MAX_EVIDENCE_LIFETIME_MS ||
251
+ Date.parse(evidence.expiresAt) <= evaluationTime) {
252
+ return false;
253
+ }
254
+ const expectedDisposition = request.scenarioId === "PRICING-007-ambiguity"
255
+ ? "ambiguous"
256
+ : request.scenarioId === "PRICING-006-negotiated" || request.scenarioId === "PRICING-009-throttling"
257
+ ? "unavailable"
258
+ : "matched";
259
+ if (evidence.result.status !== expectedDisposition)
260
+ return false;
261
+ if (evidence.result.status === "ambiguous") {
262
+ return request.scenarioId === "PRICING-007-ambiguity" && evidence.result.nextActionCode === "SELECT_CANDIDATE";
263
+ }
264
+ if (evidence.result.status === "unavailable") {
265
+ return ((request.scenarioId === "PRICING-006-negotiated" &&
266
+ evidence.result.reasonCode === "NEGOTIATED_PRICE_UNAVAILABLE" &&
267
+ evidence.result.nextActionCode === "RETRY_WITH_ATTESTED_SOURCE") ||
268
+ (request.scenarioId === "PRICING-009-throttling" &&
269
+ evidence.result.reasonCode === "THROTTLED" &&
270
+ evidence.result.retryAt !== undefined &&
271
+ isExactDateTime(evidence.result.retryAt) &&
272
+ Date.parse(evidence.result.retryAt) > Date.parse(evidence.collectedAt) &&
273
+ evidence.result.nextActionCode === "RETRY_LATER"));
274
+ }
275
+ const matchedResult = evidence.result;
276
+ const total = matchedResult.records.reduce((sum, record) => sum + record.projectedAmount, 0);
277
+ const requestCommitment = request.commitment ?? {
278
+ kind: "none",
279
+ };
280
+ const recordMatchesInputs = (record, target, usage, meter, commitment) => record.serviceName === target.serviceName &&
281
+ (target.skuName === undefined || record.skuName === target.skuName) &&
282
+ target.regions.includes(record.region) &&
283
+ record.currency === target.currency &&
284
+ record.unitDimension === usage.dimension &&
285
+ record.usageQuantity === usage.quantity &&
286
+ (meter === undefined ||
287
+ (record.meterId === meter.meterId &&
288
+ record.unitDimension === meter.unitDimension &&
289
+ record.unitQuantity === meter.unitQuantity)) &&
290
+ record.commitment.kind === commitment.kind &&
291
+ record.commitment.termMonths === commitment.termMonths &&
292
+ record.commitment.priceBasis === commitment.priceBasis &&
293
+ (commitment.kind === "none" ? record.priceType === "consumption" : record.priceType === commitment.kind);
294
+ const recordMatchesRequest = (record) => {
295
+ if (request.scenarioId !== "PRICING-003-bulk") {
296
+ return (record.specId === undefined &&
297
+ recordMatchesInputs(record, request.target, request.usage, request.meter, requestCommitment));
298
+ }
299
+ const item = request.bulkItems?.find(({ specId }) => specId === record.specId);
300
+ return item !== undefined && recordMatchesInputs(record, item.target, item.usage, item.meter, { kind: "none" });
301
+ };
302
+ const firstRecord = matchedResult.records[0];
303
+ if (firstRecord === undefined)
304
+ return false;
305
+ const paginationValid = matchedResult.paginationStatus === "complete"
306
+ ? matchedResult.continuationCursorHash === undefined
307
+ : matchedResult.continuationCursorHash !== undefined;
308
+ const bulkSpecIds = request.bulkItems?.map(({ specId }) => specId) ?? [];
309
+ const bulkRecordIds = matchedResult.records.flatMap(({ specId }) => (specId === undefined ? [] : [specId]));
310
+ const bulkFailureIds = matchedResult.bulk?.partialFailures.map(({ specId }) => specId) ?? [];
311
+ const scenarioSemanticsValid = (request.scenarioId === "PRICING-003-bulk" ? matchedResult.bulk !== undefined : matchedResult.bulk === undefined) &&
312
+ (request.scenarioId === "PRICING-004-regional"
313
+ ? matchedResult.regionalUnavailable !== undefined
314
+ : matchedResult.regionalUnavailable === undefined) &&
315
+ (request.scenarioId !== "PRICING-002-meter-aware" || request.meter !== undefined) &&
316
+ (request.scenarioId !== "PRICING-003-bulk" ||
317
+ (request.bulkItems !== undefined &&
318
+ new Set(bulkSpecIds).size === bulkSpecIds.length &&
319
+ matchedResult.bulk !== undefined &&
320
+ matchedResult.bulk.deduplicatedSpecs === bulkSpecIds.length &&
321
+ matchedResult.bulk.successful === bulkRecordIds.length &&
322
+ matchedResult.bulk.failed === bulkFailureIds.length &&
323
+ matchedResult.bulk.successful + matchedResult.bulk.failed === matchedResult.bulk.deduplicatedSpecs &&
324
+ new Set([...bulkRecordIds, ...bulkFailureIds]).size === bulkSpecIds.length &&
325
+ [...bulkRecordIds, ...bulkFailureIds].every((specId) => bulkSpecIds.includes(specId)))) &&
326
+ (request.scenarioId !== "PRICING-004-regional" ||
327
+ (request.target.regions.length >= 2 &&
328
+ request.target.regions.every((region) => matchedResult.records.some((record) => record.region === region) ||
329
+ matchedResult.regionalUnavailable?.includes(region)) &&
330
+ matchedResult.records.every((record) => record.skuName === firstRecord.skuName &&
331
+ record.currency === firstRecord.currency &&
332
+ record.meterId === firstRecord.meterId &&
333
+ record.unitDimension === firstRecord.unitDimension &&
334
+ record.unitQuantity === firstRecord.unitQuantity &&
335
+ record.priceType === firstRecord.priceType) &&
336
+ (matchedResult.regionalUnavailable ?? []).every((region) => request.target.regions.includes(region) &&
337
+ !matchedResult.records.some((record) => record.region === region)))) &&
338
+ (request.scenarioId !== "PRICING-005-commitments" || requestCommitment.kind !== "none") &&
339
+ (request.scenarioId !== "PRICING-008-uncertainty" ||
340
+ matchedResult.records.every((record) => record.uncertainty.lowerAmount < record.projectedAmount &&
341
+ record.uncertainty.upperAmount > record.projectedAmount &&
342
+ record.uncertainty.confidence !== "high" &&
343
+ record.uncertainty.reasonCodes.length > 0));
344
+ return (amountsEqual(total, matchedResult.totalAmount) &&
345
+ paginationValid &&
346
+ scenarioSemanticsValid &&
347
+ matchedResult.records.every((record) => validCommitment(record.commitment) &&
348
+ recordMatchesRequest(record) &&
349
+ amountsEqual(record.projectedAmount, record.commitment.priceBasis === "total"
350
+ ? record.unitPrice
351
+ : (record.unitPrice * record.usageQuantity) / record.unitQuantity) &&
352
+ record.uncertainty.lowerAmount <= record.projectedAmount &&
353
+ record.uncertainty.upperAmount >= record.projectedAmount));
354
+ }
355
+ //# sourceMappingURL=pricing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}