@spottoai/types-package 1.0.2-beta.366 → 1.0.2-beta.367

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.
@@ -83,6 +83,11 @@ const hasMatchingIdentity = (subscriptionId, generationId, ownership, revision,
83
83
  return false;
84
84
  return !enforceable || isEnforceableArtifactOwnershipBinding(ownership);
85
85
  };
86
+ const hasEpochFreeMatchingIdentity = (subscriptionId, generationId, ownership, revision) => hasMatchingIdentity(subscriptionId, generationId, ownership, revision, false) &&
87
+ isRecord(ownership) &&
88
+ isRecord(revision) &&
89
+ !Object.prototype.hasOwnProperty.call(ownership, 'ownershipEpochRevision') &&
90
+ !Object.prototype.hasOwnProperty.call(revision, 'ownershipEpochRevision');
86
91
  const isSha256 = (value) => typeof value === 'string' && SHA256_PATTERN.test(value);
87
92
  const hasDiagnosticObservationDiscriminant = (value) => value.authority === 'diagnostic-only' ||
88
93
  (value.publicationMode === 'observe' &&
@@ -226,6 +231,22 @@ export const isBillingAnalyzerInputCurrentPointerV1 = (value) => {
226
231
  isSha256(value.manifestDigest) &&
227
232
  isCanonicalIsoTimestamp(value.completedAt));
228
233
  };
234
+ /** Validates the latest epoch-free current pointer for one analyzer input generation. */
235
+ export const isBillingAnalyzerInputCurrentPointerV2 = (value) => {
236
+ if (!isRecord(value) ||
237
+ hasDiagnosticObservationDiscriminant(value) ||
238
+ containsForbiddenBillingArtifactControlData(value, allowedArtifactReferenceField(value, 'manifestPath'))) {
239
+ return false;
240
+ }
241
+ if (value.schemaVersion !== 2 || value.status !== 'completed')
242
+ return false;
243
+ if (!hasEpochFreeMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision))
244
+ return false;
245
+ return (isStrictLogicalArtifactReference(value.manifestPath) &&
246
+ value.manifestPath === inputManifestPath(value.subscriptionId, value.generationId) &&
247
+ isSha256(value.manifestDigest) &&
248
+ isCanonicalIsoTimestamp(value.completedAt));
249
+ };
229
250
  /** Validates the V2 queue envelope and its immutable input-manifest binding. */
230
251
  export const isBillingAnalyzerRequestV2 = (value) => {
231
252
  if (!isRecord(value) || containsForbiddenBillingArtifactControlData(value, allowedArtifactReferenceField(value, 'inputManifestPath')))
@@ -247,6 +268,29 @@ export const isBillingAnalyzerRequestV2 = (value) => {
247
268
  return false;
248
269
  return value.displayMetadata === undefined || isJsonMetadata(value.displayMetadata);
249
270
  };
271
+ /** Validates the latest-only V3 queue envelope and immutable input-manifest binding. */
272
+ export const isBillingAnalyzerRequestV3 = (value) => {
273
+ if (!isRecord(value) ||
274
+ Object.prototype.hasOwnProperty.call(value, 'publicationMode') ||
275
+ containsForbiddenBillingArtifactControlData(value, allowedArtifactReferenceField(value, 'inputManifestPath'))) {
276
+ return false;
277
+ }
278
+ if (value.schemaVersion !== 3)
279
+ return false;
280
+ if (!hasEpochFreeMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision))
281
+ return false;
282
+ if (![value.eventId, value.correlationId].every(isNonEmptyString) || !isSha256(value.messageId) || !isSha256(value.idempotencyKey))
283
+ return false;
284
+ if (value.idempotencyKey !== value.messageId || !isCanonicalIsoTimestamp(value.occurredAt))
285
+ return false;
286
+ if (!isStrictLogicalArtifactReference(value.inputManifestPath) ||
287
+ value.inputManifestPath !== inputManifestPath(value.subscriptionId, value.generationId)) {
288
+ return false;
289
+ }
290
+ if (!isSha256(value.inputManifestDigest))
291
+ return false;
292
+ return value.displayMetadata === undefined || isJsonMetadata(value.displayMetadata);
293
+ };
250
294
  /** Validates a diagnostic-only latest-enqueued pointer; it is never customer authority. */
251
295
  export const isBillingAnalyzerInputObservationPointerV1 = (value) => {
252
296
  if (!isRecord(value) || containsForbiddenBillingArtifactControlData(value, allowedArtifactReferenceField(value, 'inputManifestPath')))
@@ -338,6 +382,33 @@ export const isBillingAnalysisCurrentPointerV1 = (value) => {
338
382
  return (isBillingCompletedArtifactPublicationDecision(value.publicationDecision, value.generationId, value.inputManifestDigest) &&
339
383
  isCanonicalIsoTimestamp(value.completedAt));
340
384
  };
385
+ /** Validates the latest epoch-free promoted authority pointer for completed billing analysis. */
386
+ export const isBillingAnalysisCurrentPointerV2 = (value) => {
387
+ if (!isRecord(value) ||
388
+ hasDiagnosticObservationDiscriminant(value) ||
389
+ containsForbiddenBillingArtifactControlData(value, [
390
+ ...allowedArtifactReferenceField(value, 'inputManifestPath'),
391
+ ...allowedArtifactReferenceField(value, 'outputManifestPath'),
392
+ ])) {
393
+ return false;
394
+ }
395
+ if (value.schemaVersion !== 2 || value.status !== 'completed')
396
+ return false;
397
+ if (!hasEpochFreeMatchingIdentity(value.subscriptionId, value.generationId, value.ownership, value.revision))
398
+ return false;
399
+ if (!isStrictLogicalArtifactReference(value.inputManifestPath) ||
400
+ value.inputManifestPath !== inputManifestPath(value.subscriptionId, value.generationId)) {
401
+ return false;
402
+ }
403
+ if (!isStrictLogicalArtifactReference(value.outputManifestPath) ||
404
+ value.outputManifestPath !== outputManifestPath(value.subscriptionId, value.generationId)) {
405
+ return false;
406
+ }
407
+ if (!isSha256(value.inputManifestDigest) || !isSha256(value.outputManifestDigest))
408
+ return false;
409
+ return (isBillingCompletedArtifactPublicationDecision(value.publicationDecision, value.generationId, value.inputManifestDigest) &&
410
+ isCanonicalIsoTimestamp(value.completedAt));
411
+ };
341
412
  /** Validates an immutable diagnostic-only promotion evaluation. */
342
413
  export const isBillingAnalysisPromotionObservationV1 = (value) => {
343
414
  if (!isRecord(value) ||
@@ -1,6 +1,7 @@
1
- import { allowedArtifactReferenceField, allowedArtifactTraversalField, containsForbiddenArtifactControlData, } from '../common/artifactControlData.js';
1
+ import { allowedArtifactIdentityField, allowedArtifactReferenceField, allowedArtifactTraversalField, containsForbiddenArtifactControlData, } from '../common/artifactControlData.js';
2
2
  import { isArtifactOwnershipBinding, isArtifactPublicationDecision, isEnforceableArtifactOwnershipBinding, } from '../common/artifactEvidence.js';
3
3
  import { isArtifactRevisionVector, isStrictLogicalArtifactReference } from '../common/artifactEvidenceValidation.js';
4
+ import { encodeArtifactRunReferenceV1, isRawArtifactRunIdV1 } from './artifactRunReference.js';
4
5
  export const PUBLISHED_VIEW_OBJECT_LIMITS_V1 = {
5
6
  maxArtifacts: 512,
6
7
  maxClaims: 128,
@@ -52,6 +53,34 @@ const allowedViewArtifactPaths = (artifacts) => Array.isArray(artifacts) ? artif
52
53
  const containsForbiddenViewArtifactControlData = (value, allowedReferenceFields = []) => containsForbiddenArtifactControlData(value, allowedReferenceFields, {
53
54
  requireAllowedFieldTraversalContext: true,
54
55
  });
56
+ const allowedPublicationDecisionIdentityFields = (decision) => {
57
+ if (!isRecord(decision))
58
+ return [];
59
+ const dependencies = Array.isArray(decision.dependencies) ? decision.dependencies : [];
60
+ return [
61
+ ...allowedArtifactTraversalField(decision, 'dependencies'),
62
+ ...dependencies.flatMap(dependency => allowedArtifactIdentityField(dependency, 'generationId')),
63
+ ];
64
+ };
65
+ const allowedPublishedCostSavingsIdentityFields = (manifest) => {
66
+ if (!isRecord(manifest) || !isRecord(manifest.costSavings))
67
+ return [];
68
+ const costSavings = manifest.costSavings;
69
+ const diagnostics = costSavings.stableWholeResourceDeletionBackfill;
70
+ return [
71
+ ...allowedArtifactTraversalField(manifest, 'costSavings'),
72
+ ...allowedArtifactTraversalField(costSavings, 'stableWholeResourceDeletionBackfill'),
73
+ ...(isRecord(diagnostics)
74
+ ? [
75
+ {
76
+ object: diagnostics,
77
+ key: 'missingStableSpendResourceSamples',
78
+ allowUriSchemeInStringArray: true,
79
+ },
80
+ ]
81
+ : []),
82
+ ];
83
+ };
55
84
  const isSafePathSegment = (value) => isStrictNonEmptyString(value) && !/[\\/?#%]/.test(value) && value !== '.' && value !== '..';
56
85
  const isStrictCanonicalIsoTimestamp = (value) => {
57
86
  if (!isStrictNonEmptyString(value))
@@ -71,10 +100,15 @@ const hasMatchingViewOwnership = (subscriptionId, ownership, revision, enforceab
71
100
  return false;
72
101
  return ownership.ownershipEpochRevision === revision.ownershipEpochRevision;
73
102
  };
74
- const isViewArtifactDescriptor = (value, runId) => isRecord(value) &&
103
+ const isEpochFreeAzureViewOwnership = (value) => isArtifactOwnershipBinding(value) && value.provider === 'azure' && !Object.prototype.hasOwnProperty.call(value, 'ownershipEpochRevision');
104
+ const isEpochFreeViewRevision = (value) => isArtifactRevisionVector(value) && !Object.prototype.hasOwnProperty.call(value, 'ownershipEpochRevision');
105
+ const hasEpochFreeMatchingViewOwnership = (subscriptionId, ownership, revision) => isEpochFreeAzureViewOwnership(ownership) &&
106
+ isEpochFreeViewRevision(revision) &&
107
+ hasMatchingViewOwnership(subscriptionId, ownership, revision, false);
108
+ const isViewArtifactDescriptor = (value, runId, runReference = runId) => isRecord(value) &&
75
109
  isStrictLogicalArtifactReference(value.path) &&
76
- value.path.startsWith(`runs/${runId}/`) &&
77
- value.path.length > `runs/${runId}/`.length &&
110
+ value.path.startsWith(`runs/${runReference}/`) &&
111
+ value.path.length > `runs/${runReference}/`.length &&
78
112
  isStrictNonEmptyString(value.name) &&
79
113
  value.mediaType === 'application/json' &&
80
114
  typeof value.contentEncoding === 'string' &&
@@ -137,9 +171,10 @@ const hasUnambiguousPublishedClaimSections = (decision) => {
137
171
  return true;
138
172
  };
139
173
  const isPublishedViewArtifactDescriptor = (value, runId) => {
140
- if (!isViewArtifactDescriptor(value, runId) || !isRecord(value))
174
+ const runReference = encodeArtifactRunReferenceV1(runId);
175
+ if (!isViewArtifactDescriptor(value, runId, runReference) || !isRecord(value))
141
176
  return false;
142
- const runPrefix = `runs/${runId}/`;
177
+ const runPrefix = `runs/${runReference}/`;
143
178
  if (value.name !== value.path.slice(runPrefix.length))
144
179
  return false;
145
180
  if (!Array.isArray(value.claimBindings) ||
@@ -286,18 +321,26 @@ const isPublishedDecisionForCoverage = (decision, coverage) => {
286
321
  }
287
322
  return (decision.publication === 'partial' && decision.evidence === 'partial' && completedClaimCount > 0 && completedClaimCount < decision.claims.length);
288
323
  };
289
- /** Validates a claim-projected portal or plugin generation, including observe-mode epoch-free manifests. */
324
+ /** Validates a claim-projected portal or plugin generation under the latest epoch-free authority contract. */
290
325
  export const isPublishedViewManifestV4 = (value) => {
291
- if (!isRecord(value) ||
292
- containsForbiddenViewArtifactControlData(value, [
326
+ const allowedReferences = isRecord(value)
327
+ ? [
328
+ ...allowedArtifactIdentityField(value, 'runId'),
329
+ ...allowedArtifactTraversalField(value, 'artifactGeneration'),
330
+ ...allowedArtifactIdentityField(value.artifactGeneration, 'runId'),
293
331
  ...allowedArtifactTraversalField(value, 'artifacts'),
294
332
  ...allowedViewArtifactPaths(value.artifacts),
295
- ])) {
333
+ ...allowedArtifactTraversalField(value, 'publicationDecision'),
334
+ ...allowedPublicationDecisionIdentityFields(value.publicationDecision),
335
+ ...allowedPublishedCostSavingsIdentityFields(value),
336
+ ]
337
+ : [];
338
+ if (!isRecord(value) || containsForbiddenViewArtifactControlData(value, allowedReferences)) {
296
339
  return false;
297
340
  }
298
341
  if (value.schemaVersion !== 4 || value.status !== 'published' || !isPublishedViewCoverage(value.coverage))
299
342
  return false;
300
- if (!isSafePathSegment(value.runId) || !hasMatchingViewOwnership(value.subscriptionId, value.ownership, value.revision, false))
343
+ if (!isRawArtifactRunIdV1(value.runId) || !hasEpochFreeMatchingViewOwnership(value.subscriptionId, value.ownership, value.revision))
301
344
  return false;
302
345
  if (!isRecord(value.artifactGeneration) ||
303
346
  value.artifactGeneration.runId !== value.runId ||
@@ -355,15 +398,17 @@ const isViewSetV2SurfaceReference = (value, surface, subscriptionId, ownership,
355
398
  isStrictCanonicalIsoTimestamp(value.completedAt));
356
399
  };
357
400
  const isPublishedViewSetV3SurfaceReference = (value, surface, subscriptionId, ownership, revision, compositeDependencyDigest) => {
358
- if (!isRecord(value) || !isSafePathSegment(value.runId) || !isPublishedViewCoverage(value.coverage))
401
+ if (!isRecord(value) || !isRawArtifactRunIdV1(value.runId) || !isPublishedViewCoverage(value.coverage))
359
402
  return false;
360
403
  const expectedManifestName = surface === 'portal' ? 'published-view-manifest.json' : 'published-plugin-generation.json';
361
- if (value.manifestPath !== `runs/${value.runId}/${expectedManifestName}` || !isStrictLogicalArtifactReference(value.manifestPath))
362
- return false;
363
- if (!isEnforceableAzureOwnershipBinding(value.ownership) || !isArtifactRevisionVector(value.revision))
404
+ const runReference = encodeArtifactRunReferenceV1(value.runId);
405
+ if (value.manifestPath !== `runs/${runReference}/${expectedManifestName}` || !isStrictLogicalArtifactReference(value.manifestPath))
364
406
  return false;
365
- if (!hasMatchingViewOwnership(subscriptionId, value.ownership, value.revision, true))
407
+ if (!isEpochFreeAzureViewOwnership(value.ownership) ||
408
+ !isEpochFreeViewRevision(value.revision) ||
409
+ !hasEpochFreeMatchingViewOwnership(subscriptionId, value.ownership, value.revision)) {
366
410
  return false;
411
+ }
367
412
  if (!hasSameOwnership(ownership, value.ownership) || !hasSameRevision(revision, value.revision))
368
413
  return false;
369
414
  return (isSha256(value.manifestDigest) &&
@@ -417,10 +462,15 @@ export const isCompletedAzureViewSetV2 = (value) => {
417
462
  export const isPublishedAzureViewSetV3 = (value) => {
418
463
  const allowedReferences = isRecord(value)
419
464
  ? [
465
+ ...allowedArtifactIdentityField(value, 'publicationId'),
420
466
  ...allowedArtifactTraversalField(value, 'portal'),
421
467
  ...allowedArtifactTraversalField(value, 'plugin'),
468
+ ...allowedArtifactIdentityField(value.portal, 'runId'),
469
+ ...allowedArtifactIdentityField(value.plugin, 'runId'),
422
470
  ...allowedArtifactReferenceField(value.portal, 'manifestPath'),
423
471
  ...allowedArtifactReferenceField(value.plugin, 'manifestPath'),
472
+ ...allowedArtifactTraversalField(value, 'publicationDecision'),
473
+ ...allowedPublicationDecisionIdentityFields(value.publicationDecision),
424
474
  ]
425
475
  : [];
426
476
  if (!isRecord(value) || containsForbiddenViewArtifactControlData(value, allowedReferences))
@@ -429,9 +479,9 @@ export const isPublishedAzureViewSetV3 = (value) => {
429
479
  return false;
430
480
  if (!isSafePathSegment(value.subscriptionId) ||
431
481
  !isStrictNonEmptyString(value.publicationId) ||
432
- !isEnforceableAzureOwnershipBinding(value.ownership) ||
433
- !isArtifactRevisionVector(value.revision) ||
434
- !hasMatchingViewOwnership(value.subscriptionId, value.ownership, value.revision, true)) {
482
+ !isEpochFreeAzureViewOwnership(value.ownership) ||
483
+ !isEpochFreeViewRevision(value.revision) ||
484
+ !hasEpochFreeMatchingViewOwnership(value.subscriptionId, value.ownership, value.revision)) {
435
485
  return false;
436
486
  }
437
487
  if (!isSha256(value.compositeDependencyDigest) || !isStrictCanonicalIsoTimestamp(value.completedAt))
@@ -171,3 +171,28 @@ export const compareArtifactRevisionVector = (left, right) => {
171
171
  return 'older';
172
172
  return 'incomparable';
173
173
  };
174
+ /**
175
+ * Compares latest epoch-free authority revisions under a fixed policy revision.
176
+ * A policy mismatch is intentionally incomparable so a policy rollout cannot
177
+ * silently reuse source ordering without a separate contract decision.
178
+ */
179
+ export const compareEpochFreeArtifactRevisionVector = (left, right) => {
180
+ if (left.ownershipEpochRevision !== undefined || right.ownershipEpochRevision !== undefined)
181
+ return 'incomparable';
182
+ if (!Number.isSafeInteger(left.sourceRevision) ||
183
+ left.sourceRevision < 1 ||
184
+ !Number.isSafeInteger(right.sourceRevision) ||
185
+ right.sourceRevision < 1 ||
186
+ !Number.isSafeInteger(left.policyRevision) ||
187
+ left.policyRevision < 1 ||
188
+ !Number.isSafeInteger(right.policyRevision) ||
189
+ right.policyRevision < 1 ||
190
+ left.policyRevision !== right.policyRevision) {
191
+ return 'incomparable';
192
+ }
193
+ if (left.sourceRevision > right.sourceRevision)
194
+ return 'newer';
195
+ if (left.sourceRevision < right.sourceRevision)
196
+ return 'older';
197
+ return 'equal';
198
+ };
package/dist/esm/index.js CHANGED
@@ -7,6 +7,7 @@ export * from './azure/billingGeneration.js';
7
7
  export * from './azure/billingArtifactGeneration.js';
8
8
  export * from './azure/billingArtifactLimits.js';
9
9
  export * from './azure/billingArtifactCanonicalization.js';
10
+ export * from './azure/artifactRunReference.js';
10
11
  export * from './azure/billingPlots.js';
11
12
  export * from './azure/benefits.js';
12
13
  export * from './azure/commitmentsPlanning.js';
package/dist/index.d.ts CHANGED
@@ -7,6 +7,7 @@ export * from './azure/billingGeneration';
7
7
  export * from './azure/billingArtifactGeneration';
8
8
  export * from './azure/billingArtifactLimits';
9
9
  export * from './azure/billingArtifactCanonicalization';
10
+ export * from './azure/artifactRunReference';
10
11
  export * from './azure/billingPlots';
11
12
  export * from './azure/benefits';
12
13
  export * from './azure/commitmentsPlanning';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,iEAAiE;AACjE,cAAc,gBAAgB,CAAC;AAC/B,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,mCAAmC,CAAC;AAClD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,yCAAyC,CAAC;AACxD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,wBAAwB,CAAC;AACvC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,yBAAyB,CAAC;AACxC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,6BAA6B,CAAC;AAC5C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,iBAAiB,CAAC;AAChC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,yBAAyB,CAAC;AACxC,cAAc,sBAAsB,CAAC;AACrC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,iBAAiB,CAAC;AAChC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,gCAAgC,CAAC;AAC/C,cAAc,yCAAyC,CAAC;AACxD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,2BAA2B,CAAC;AAC1C,cAAc,oBAAoB,CAAC;AACnC,cAAc,2BAA2B,CAAC;AAC1C,cAAc,wBAAwB,CAAC;AACvC,cAAc,OAAO,CAAC;AACtB,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,UAAU,CAAC;AACzB,cAAc,2BAA2B,CAAC;AAC1C,cAAc,WAAW,CAAC;AAC1B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,MAAM,CAAC;AACrB,cAAc,UAAU,CAAC;AACzB,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,QAAQ,CAAC;AACvB,cAAc,aAAa,CAAC"}
package/dist/index.js CHANGED
@@ -23,6 +23,7 @@ __exportStar(require("./azure/billingGeneration"), exports);
23
23
  __exportStar(require("./azure/billingArtifactGeneration"), exports);
24
24
  __exportStar(require("./azure/billingArtifactLimits"), exports);
25
25
  __exportStar(require("./azure/billingArtifactCanonicalization"), exports);
26
+ __exportStar(require("./azure/artifactRunReference"), exports);
26
27
  __exportStar(require("./azure/billingPlots"), exports);
27
28
  __exportStar(require("./azure/benefits"), exports);
28
29
  __exportStar(require("./azure/commitmentsPlanning"), exports);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAAiE;AACjE,iDAA+B;AAC/B,0DAAwC;AACxC,uDAAqC;AACrC,kDAAgC;AAChC,4DAA0C;AAC1C,oEAAkD;AAClD,gEAA8C;AAC9C,0EAAwD;AACxD,uDAAqC;AACrC,mDAAiC;AACjC,8DAA4C;AAC5C,oDAAkC;AAClC,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,0DAAwC;AACxC,yDAAuC;AACvC,iDAA+B;AAC/B,wDAAsC;AACtC,0DAAwC;AACxC,+DAA6C;AAC7C,8DAA4C;AAC5C,iEAA+C;AAC/C,8DAA4C;AAC5C,+DAA6C;AAC7C,oDAAkC;AAClC,kDAAgC;AAChC,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,4DAA0C;AAC1C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,4DAA0C;AAC1C,qDAAmC;AACnC,4DAA0C;AAC1C,yDAAuC;AACvC,wCAAsB;AACtB,6CAA2B;AAC3B,gDAA8B;AAC9B,0CAAwB;AACxB,2CAAyB;AACzB,4DAA0C;AAC1C,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,uCAAqB;AACrB,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,6DAA2C;AAC3C,yCAAuB;AACvB,8CAA4B"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,iEAAiE;AACjE,iDAA+B;AAC/B,0DAAwC;AACxC,uDAAqC;AACrC,kDAAgC;AAChC,4DAA0C;AAC1C,oEAAkD;AAClD,gEAA8C;AAC9C,0EAAwD;AACxD,+DAA6C;AAC7C,uDAAqC;AACrC,mDAAiC;AACjC,8DAA4C;AAC5C,oDAAkC;AAClC,kDAAgC;AAChC,kDAAgC;AAChC,mDAAiC;AACjC,0DAAwC;AACxC,yDAAuC;AACvC,iDAA+B;AAC/B,wDAAsC;AACtC,0DAAwC;AACxC,+DAA6C;AAC7C,8DAA4C;AAC5C,iEAA+C;AAC/C,8DAA4C;AAC5C,+DAA6C;AAC7C,oDAAkC;AAClC,kDAAgC;AAChC,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,4DAA0C;AAC1C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,4DAA0C;AAC1C,qDAAmC;AACnC,4DAA0C;AAC1C,yDAAuC;AACvC,wCAAsB;AACtB,6CAA2B;AAC3B,gDAA8B;AAC9B,0CAAwB;AACxB,2CAAyB;AACzB,4DAA0C;AAC1C,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,uCAAqB;AACrB,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,6DAA2C;AAC3C,yCAAuB;AACvB,8CAA4B"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@spottoai/types-package",
3
- "version": "1.0.2-beta.366",
3
+ "version": "1.0.2-beta.367",
4
4
  "description": "Shared TypeScript interfaces for SpottoAI",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -73,10 +73,11 @@
73
73
  "check:portal-public-artifacts": "node scripts/check-portal-public-artifacts.mjs",
74
74
  "check:relationship-public-artifacts": "node scripts/check-relationship-public-artifacts.mjs",
75
75
  "check:azure-view-set-contracts": "node scripts/check-azure-view-set-contracts.mjs",
76
+ "check:dev-1135-latest-contracts": "node scripts/check-dev-1135-latest-contracts.mjs",
76
77
  "check:capability-passport-contracts": "node scripts/check-capability-passport-contracts.mjs",
77
78
  "check:commitments-planning": "node scripts/check-commitments-planning.mjs",
78
79
  "prepublishOnly": "npm run clean && npm run build && npm test",
79
- "test": "npm run build && npm run check:artifact-evidence-contracts && npm run check:billing-artifact-object-boundaries && npm run check:billing-cost-analysis-read-responses && npm run check:aws-examples && npm run check:plugin-public-artifacts && npm run check:portal-public-artifacts && npm run check:relationship-public-artifacts && npm run check:azure-view-set-contracts && npm run check:capability-passport-contracts && npm run check:commitments-planning && npm run check:packed-exports",
80
+ "test": "npm run build && npm run check:artifact-evidence-contracts && npm run check:billing-artifact-object-boundaries && npm run check:billing-cost-analysis-read-responses && npm run check:aws-examples && npm run check:plugin-public-artifacts && npm run check:portal-public-artifacts && npm run check:relationship-public-artifacts && npm run check:azure-view-set-contracts && npm run check:dev-1135-latest-contracts && npm run check:capability-passport-contracts && npm run check:commitments-planning && npm run check:packed-exports",
80
81
  "lint": "eslint src --ext .ts",
81
82
  "lint:fix": "eslint src --ext .ts --fix",
82
83
  "format": "prettier --write \"src/**/*.{ts,js,json}\"",