@spottoai/types-package 1.0.2-beta.426 → 1.0.2-beta.428

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 (64) hide show
  1. package/dist/azure/payloads.d.ts +7 -7
  2. package/dist/azure/payloads.d.ts.map +1 -1
  3. package/dist/azure/payloads.js +22 -23
  4. package/dist/azure/payloads.js.map +1 -1
  5. package/dist/azure/reportEvidence.d.ts +21 -1
  6. package/dist/azure/reportEvidence.d.ts.map +1 -1
  7. package/dist/azure/reportEvidenceValidationHelpers.d.ts.map +1 -1
  8. package/dist/azure/reportEvidenceValidationHelpers.js +5 -1
  9. package/dist/azure/reportEvidenceValidationHelpers.js.map +1 -1
  10. package/dist/esm/azure/payloads.js +19 -20
  11. package/dist/esm/azure/reportEvidenceValidationHelpers.js +5 -1
  12. package/dist/esm/index.js +0 -3
  13. package/dist/esm/scheduler/index.js +2 -1
  14. package/dist/esm/scheduler/resourceStrategyCapabilityValidation.js +4 -20
  15. package/dist/esm/scheduler/resourceStrategyContracts.js +4 -2
  16. package/dist/esm/scheduler/resourceStrategyScheduleValidation.js +109 -4
  17. package/dist/esm/scheduler/schedulerValidation.js +363 -0
  18. package/dist/index.d.ts +0 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +0 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/scheduler/index.d.ts +2 -1
  23. package/dist/scheduler/index.d.ts.map +1 -1
  24. package/dist/scheduler/index.js +2 -1
  25. package/dist/scheduler/index.js.map +1 -1
  26. package/dist/scheduler/resourceStrategyCapabilityValidation.d.ts.map +1 -1
  27. package/dist/scheduler/resourceStrategyCapabilityValidation.js +4 -20
  28. package/dist/scheduler/resourceStrategyCapabilityValidation.js.map +1 -1
  29. package/dist/scheduler/resourceStrategyContracts.d.ts +26 -9
  30. package/dist/scheduler/resourceStrategyContracts.d.ts.map +1 -1
  31. package/dist/scheduler/resourceStrategyContracts.js +4 -2
  32. package/dist/scheduler/resourceStrategyContracts.js.map +1 -1
  33. package/dist/scheduler/resourceStrategyScheduleValidation.d.ts +3 -1
  34. package/dist/scheduler/resourceStrategyScheduleValidation.d.ts.map +1 -1
  35. package/dist/scheduler/resourceStrategyScheduleValidation.js +110 -4
  36. package/dist/scheduler/resourceStrategyScheduleValidation.js.map +1 -1
  37. package/dist/scheduler/schedulerContracts.d.ts +178 -0
  38. package/dist/scheduler/schedulerContracts.d.ts.map +1 -0
  39. package/dist/scheduler/{bastionSchedule.js → schedulerContracts.js} +1 -1
  40. package/dist/scheduler/schedulerContracts.js.map +1 -0
  41. package/dist/scheduler/schedulerValidation.d.ts +14 -0
  42. package/dist/scheduler/schedulerValidation.d.ts.map +1 -0
  43. package/dist/scheduler/schedulerValidation.js +378 -0
  44. package/dist/scheduler/schedulerValidation.js.map +1 -0
  45. package/package.json +4 -3
  46. package/dist/esm/scheduler/bastionScheduleProfile.js +0 -206
  47. package/dist/esm/scheduler/bastionScheduleValidation.js +0 -399
  48. package/dist/esm/scheduler/scheduler.js +0 -1
  49. package/dist/scheduler/bastionSchedule.d.ts +0 -113
  50. package/dist/scheduler/bastionSchedule.d.ts.map +0 -1
  51. package/dist/scheduler/bastionSchedule.js.map +0 -1
  52. package/dist/scheduler/bastionScheduleProfile.d.ts +0 -24
  53. package/dist/scheduler/bastionScheduleProfile.d.ts.map +0 -1
  54. package/dist/scheduler/bastionScheduleProfile.js +0 -210
  55. package/dist/scheduler/bastionScheduleProfile.js.map +0 -1
  56. package/dist/scheduler/bastionScheduleValidation.d.ts +0 -10
  57. package/dist/scheduler/bastionScheduleValidation.d.ts.map +0 -1
  58. package/dist/scheduler/bastionScheduleValidation.js +0 -410
  59. package/dist/scheduler/bastionScheduleValidation.js.map +0 -1
  60. package/dist/scheduler/scheduler.d.ts +0 -267
  61. package/dist/scheduler/scheduler.d.ts.map +0 -1
  62. package/dist/scheduler/scheduler.js +0 -3
  63. package/dist/scheduler/scheduler.js.map +0 -1
  64. /package/dist/esm/scheduler/{bastionSchedule.js → schedulerContracts.js} +0 -0
@@ -25,7 +25,6 @@ export function isResourceSchedulingCapabilityProjection(value) {
25
25
  'automation',
26
26
  'dependencies',
27
27
  'acknowledgement',
28
- 'evidence',
29
28
  ];
30
29
  if (!hasOnlyKeys(value, allowed))
31
30
  return false;
@@ -37,7 +36,6 @@ export function isResourceSchedulingCapabilityProjection(value) {
37
36
  const restore = value.restore;
38
37
  const automation = value.automation;
39
38
  const dependencies = value.dependencies;
40
- const evidence = value.evidence;
41
39
  if (!isCapabilityRef(value.capability) ||
42
40
  !isBoundedString(value.contentHash, 200) ||
43
41
  !isIsoTimestamp(value.publishedAtUtc) ||
@@ -59,7 +57,6 @@ export function isResourceSchedulingCapabilityProjection(value) {
59
57
  !isRecord(restore) ||
60
58
  !isRecord(automation) ||
61
59
  !isRecord(dependencies) ||
62
- !isRecord(evidence) ||
63
60
  !hasOnlyKeys(executionPolicy, ['authoring', 'reduce', 'restore', 'disableReason', 'supersededBy']) ||
64
61
  !hasOnlyKeys(baseline, ['policy', 'mutationDomains', 'coupledValueLabels', 'driftPolicy']) ||
65
62
  !hasOnlyKeys(cost, [
@@ -80,8 +77,7 @@ export function isResourceSchedulingCapabilityProjection(value) {
80
77
  !hasOnlyKeys(disruption, ['reversibility', 'risk', 'affectedScopeLabel', 'expectedDowntimeMinutes', 'supportedBusyPolicies']) ||
81
78
  !hasOnlyKeys(restore, ['restoreLeadMinutes', 'capacityReturnRisk', 'retryPolicyLabel', 'escalationClass']) ||
82
79
  !hasOnlyKeys(automation, ['ownership', 'conflictingControllerLabels']) ||
83
- !hasOnlyKeys(dependencies, ['hasDependencies', 'summary', 'mutableIdentityRisk']) ||
84
- !hasOnlyKeys(evidence, ['sourceUrls', 'labResult', 'verifiedAtUtc', 'expiresAtUtc'])) {
80
+ !hasOnlyKeys(dependencies, ['hasDependencies', 'summary', 'mutableIdentityRisk'])) {
85
81
  return false;
86
82
  }
87
83
  if (!['allowed', 'blocked'].includes(String(executionPolicy.authoring)) ||
@@ -166,27 +162,15 @@ export function isResourceSchedulingCapabilityProjection(value) {
166
162
  executionPolicy.restore === 'blocked';
167
163
  if (requiresDisableReason && !isBoundedString(executionPolicy.disableReason, 500))
168
164
  return false;
165
+ if (executionPolicy.reduce === 'allowed' && executionPolicy.restore !== 'allowed')
166
+ return false;
169
167
  if (cost.billingClass === 'C-no-material-saving' && (executionPolicy.authoring !== 'blocked' || executionPolicy.reduce !== 'blocked'))
170
168
  return false;
171
169
  if (value.strategy === 'recreate') {
172
170
  if (!isRecord(value.acknowledgement) || value.acknowledgement.severity !== 'destructive')
173
171
  return false;
174
172
  }
175
- if (!isBoundedStringArray(evidence.sourceUrls, RESOURCE_STRATEGY_CONTRACT_LIMITS.evidenceReferences) ||
176
- !['not-run', 'failed', 'passed'].includes(String(evidence.labResult)) ||
177
- !(evidence.verifiedAtUtc === null || isIsoTimestamp(evidence.verifiedAtUtc)) ||
178
- !(evidence.expiresAtUtc === null || isIsoTimestamp(evidence.expiresAtUtc))) {
179
- return false;
180
- }
181
- if (evidence.labResult === 'passed' && evidence.verifiedAtUtc === null)
182
- return false;
183
- const allowsAuthoringOrReduce = executionPolicy.authoring === 'allowed' || executionPolicy.reduce === 'allowed';
184
- if (allowsAuthoringOrReduce && (evidence.labResult !== 'passed' || evidence.verifiedAtUtc === null || evidence.sourceUrls.length === 0)) {
185
- return false;
186
- }
187
- return !(typeof evidence.verifiedAtUtc === 'string' &&
188
- typeof evidence.expiresAtUtc === 'string' &&
189
- Date.parse(evidence.expiresAtUtc) < Date.parse(evidence.verifiedAtUtc));
173
+ return true;
190
174
  }
191
175
  const readinessStates = new Set([
192
176
  'ready',
@@ -9,10 +9,12 @@ export const RESOURCE_STRATEGY_CONTRACT_LIMITS = {
9
9
  grantGroups: 128,
10
10
  permissionOperations: 8192,
11
11
  listResults: 100,
12
- dryRunChecks: 8,
12
+ dryRunChecks: 7,
13
13
  dryRunReasonCodes: 32,
14
14
  dryRunDtoBytes: 16384,
15
- dryRunMaxTtlMs: 5 * 60000,
15
+ // Stable readiness evidence may remain current for 24 hours. Transient
16
+ // verdicts still publish their shorter dependency expiry (normally 5 min).
17
+ dryRunMaxTtlMs: 24 * 60 * 60000,
16
18
  parameterBytes: 32768,
17
19
  publicDtoBytes: 262144,
18
20
  };
@@ -181,7 +181,6 @@ const RESOURCE_SCHEDULE_DRY_RUN_CHECK_NAMES = [
181
181
  'busy-policy',
182
182
  'blackout',
183
183
  'admission-budgets',
184
- 'evidence-freshness',
185
184
  'notification-routing',
186
185
  ];
187
186
  function isResourceScheduleDryRunCheckProjection(value) {
@@ -240,6 +239,110 @@ export function isResourceScheduleDryRunProjection(value) {
240
239
  }
241
240
  return value.status === (value.checks.every(check => check.status === 'ready') ? 'ready' : 'blocked');
242
241
  }
242
+ /** Validates durable progress for exactly one schedule revision dry-run evaluation. */
243
+ export function isResourceScheduleDryRunEvaluationProjection(value) {
244
+ if (!isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) ||
245
+ !isRecord(value) ||
246
+ containsForbiddenKey(value) ||
247
+ !hasOnlyKeys(value, [
248
+ 'scheduleId',
249
+ 'definitionRevision',
250
+ 'controlGeneration',
251
+ 'evaluationId',
252
+ 'status',
253
+ 'queuedAtUtc',
254
+ 'startedAtUtc',
255
+ 'updatedAtUtc',
256
+ 'completedAtUtc',
257
+ 'attemptCount',
258
+ 'nextAttemptAtUtc',
259
+ 'result',
260
+ 'error',
261
+ ]) ||
262
+ !isBoundedString(value.scheduleId, 200) ||
263
+ !isPositiveInteger(value.definitionRevision) ||
264
+ !isPositiveInteger(value.controlGeneration) ||
265
+ !isBoundedString(value.evaluationId, 500) ||
266
+ !['queued', 'running', 'retrying', 'ready', 'blocked', 'failed'].includes(String(value.status)) ||
267
+ !isIsoTimestamp(value.queuedAtUtc) ||
268
+ !isIsoTimestamp(value.updatedAtUtc) ||
269
+ Date.parse(value.updatedAtUtc) < Date.parse(value.queuedAtUtc) ||
270
+ !isNonNegativeInteger(value.attemptCount)) {
271
+ return false;
272
+ }
273
+ const startedAtUtc = value.startedAtUtc;
274
+ if (startedAtUtc !== undefined &&
275
+ (!isIsoTimestamp(startedAtUtc) ||
276
+ Date.parse(startedAtUtc) < Date.parse(value.queuedAtUtc) ||
277
+ Date.parse(startedAtUtc) > Date.parse(value.updatedAtUtc))) {
278
+ return false;
279
+ }
280
+ const completedAtUtc = value.completedAtUtc;
281
+ if (completedAtUtc !== undefined &&
282
+ (!isIsoTimestamp(completedAtUtc) ||
283
+ startedAtUtc === undefined ||
284
+ Date.parse(completedAtUtc) < Date.parse(startedAtUtc) ||
285
+ Date.parse(completedAtUtc) > Date.parse(value.updatedAtUtc))) {
286
+ return false;
287
+ }
288
+ const nextAttemptAtUtc = value.nextAttemptAtUtc;
289
+ if (nextAttemptAtUtc !== undefined && (!isIsoTimestamp(nextAttemptAtUtc) || Date.parse(nextAttemptAtUtc) < Date.parse(value.updatedAtUtc))) {
290
+ return false;
291
+ }
292
+ const result = value.result;
293
+ if (result !== undefined &&
294
+ (!isResourceScheduleDryRunProjection(result) ||
295
+ result.scheduleId !== value.scheduleId ||
296
+ result.definitionRevision !== value.definitionRevision ||
297
+ result.controlGeneration !== value.controlGeneration)) {
298
+ return false;
299
+ }
300
+ const error = value.error;
301
+ if (error !== undefined &&
302
+ (!isRecord(error) || !hasOnlyKeys(error, ['code', 'message']) || !isBoundedString(error.code, 200) || !isBoundedString(error.message))) {
303
+ return false;
304
+ }
305
+ switch (value.status) {
306
+ case 'queued':
307
+ return (value.attemptCount === 0 &&
308
+ startedAtUtc === undefined &&
309
+ completedAtUtc === undefined &&
310
+ nextAttemptAtUtc === undefined &&
311
+ result === undefined &&
312
+ error === undefined);
313
+ case 'running':
314
+ return (value.attemptCount > 0 &&
315
+ startedAtUtc !== undefined &&
316
+ completedAtUtc === undefined &&
317
+ nextAttemptAtUtc === undefined &&
318
+ result === undefined &&
319
+ error === undefined);
320
+ case 'retrying':
321
+ return (value.attemptCount > 0 &&
322
+ startedAtUtc !== undefined &&
323
+ completedAtUtc === undefined &&
324
+ nextAttemptAtUtc !== undefined &&
325
+ result === undefined &&
326
+ error === undefined);
327
+ case 'ready':
328
+ case 'blocked':
329
+ return (value.attemptCount > 0 &&
330
+ startedAtUtc !== undefined &&
331
+ completedAtUtc !== undefined &&
332
+ nextAttemptAtUtc === undefined &&
333
+ result !== undefined &&
334
+ result.status === value.status &&
335
+ error === undefined);
336
+ case 'failed':
337
+ return (value.attemptCount > 0 &&
338
+ startedAtUtc !== undefined &&
339
+ completedAtUtc !== undefined &&
340
+ nextAttemptAtUtc === undefined &&
341
+ result === undefined &&
342
+ error !== undefined);
343
+ }
344
+ return false;
345
+ }
243
346
  function isManifestRef(value) {
244
347
  return (isRecord(value) &&
245
348
  hasOnlyKeys(value, ['version', 'contentHash']) &&
@@ -336,9 +439,9 @@ export function isResourceSchedulingExecutionProjection(value) {
336
439
  isOptionalBoundedString(value.activeRecoveryCycleId, 200) &&
337
440
  typeof value.restoreOwed === 'boolean' &&
338
441
  Array.isArray(value.allowedCommands) &&
339
- value.allowedCommands.length <= 4 &&
442
+ value.allowedCommands.length <= 5 &&
340
443
  new Set(value.allowedCommands).size === value.allowedCommands.length &&
341
- value.allowedCommands.every(command => ['pause', 'resume', 'restore-now', 'leave-current-state'].includes(String(command))) &&
444
+ value.allowedCommands.every(command => typeof command === 'string' && ['pause', 'resume', 'restore-now', 'restore-and-delete', 'leave-current-state'].includes(command)) &&
342
445
  isIsoTimestamp(value.updatedAtUtc));
343
446
  }
344
447
  function isResourceSchedulingExecutionHistoryItem(value) {
@@ -384,7 +487,9 @@ export function isResourceStrategyScheduleCommand(value) {
384
487
  }
385
488
  if (value.command === 'leave-current-state')
386
489
  return isBoundedString(value.acknowledgement, 2000);
387
- return ['pause', 'resume', 'rerun-dry-run', 'restore-now'].includes(String(value.command)) && value.acknowledgement === undefined;
490
+ return (typeof value.command === 'string' &&
491
+ ['pause', 'resume', 'rerun-dry-run', 'restore-now', 'restore-and-delete'].includes(value.command) &&
492
+ value.acknowledgement === undefined);
388
493
  }
389
494
  export function isResourceStrategyWeeklyScheduleListResponse(value) {
390
495
  return (isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) &&
@@ -0,0 +1,363 @@
1
+ import { RESOURCE_STRATEGY_CONTRACT_LIMITS } from './resourceStrategyContracts.js';
2
+ import { isResourceStrategyScheduleCommand, isResourceStrategyWeeklyScheduleProjection, isResourceStrategyWeeklyScheduleWriteRequest, } from './resourceStrategyScheduleValidation.js';
3
+ import { isResourceSchedulingCapabilityProjection, isResourceSchedulingReadinessProjection } from './resourceStrategyCapabilityValidation.js';
4
+ import { isResourceSchedulePreviewRequest, isResourceSchedulePreviewResponse } from './resourceStrategyFinancialValidation.js';
5
+ import { hasOnlyKeys, isBoundedParameters, isBoundedString, isIanaTimezone, isIsoTimestamp, isOptionalBoundedString, isPositiveInteger, isRecord, isWithinJsonByteLimit, } from './resourceStrategyValidationShared.js';
6
+ import { isScheduledResourceTransitionV1 } from './resourceStrategyScheduleValidation.js';
7
+ const LOCAL_DATE_TIME = /^\d{4}-\d{2}-\d{2}T(?:[01]\d|2[0-3]):[0-5]\d$/u;
8
+ function isLocalDateTime(value) {
9
+ if (typeof value !== 'string' || !LOCAL_DATE_TIME.test(value))
10
+ return false;
11
+ const parsed = new Date(`${value}:00.000Z`);
12
+ return Number.isFinite(parsed.getTime()) && parsed.toISOString().slice(0, 16) === value;
13
+ }
14
+ function isFiveFieldCronExpression(value) {
15
+ return isBoundedString(value, 500) && value.trim() === value && value.split(/\s+/u).length === 5;
16
+ }
17
+ function isRecommendationActionScheduleTarget(value) {
18
+ if (!isRecord(value))
19
+ return false;
20
+ if (value.selectorType === 'single-resource') {
21
+ return hasOnlyKeys(value, ['selectorType', 'resourceId']) && isBoundedString(value.resourceId, 2000);
22
+ }
23
+ if (value.selectorType === 'selected-resources') {
24
+ return (hasOnlyKeys(value, ['selectorType', 'resourceIds']) &&
25
+ Array.isArray(value.resourceIds) &&
26
+ value.resourceIds.length > 0 &&
27
+ value.resourceIds.length <= 100 &&
28
+ new Set(value.resourceIds).size === value.resourceIds.length &&
29
+ value.resourceIds.every(resourceId => isBoundedString(resourceId, 2000)));
30
+ }
31
+ return value.selectorType === 'provider-scope' && hasOnlyKeys(value, ['selectorType']);
32
+ }
33
+ export function isRecommendationActionScheduleWriteRequest(value) {
34
+ try {
35
+ if (!isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) || !isRecord(value))
36
+ return false;
37
+ if (!hasOnlyKeys(value, [
38
+ 'definitionType',
39
+ 'name',
40
+ 'timezone',
41
+ 'trigger',
42
+ 'providerScopeId',
43
+ 'cloudAccountId',
44
+ 'recommendationId',
45
+ 'operation',
46
+ 'target',
47
+ 'initialMode',
48
+ 'notes',
49
+ 'configuration',
50
+ ]) ||
51
+ value.definitionType !== 'recommendation-action' ||
52
+ !isBoundedString(value.name, 500) ||
53
+ !isIanaTimezone(value.timezone) ||
54
+ !isBoundedString(value.providerScopeId, 500) ||
55
+ !isOptionalBoundedString(value.cloudAccountId, 500) ||
56
+ !isBoundedString(value.recommendationId, 500) ||
57
+ value.operation !== 'implement' ||
58
+ !isRecommendationActionScheduleTarget(value.target) ||
59
+ (value.initialMode !== 'active' && value.initialMode !== 'paused') ||
60
+ !isOptionalBoundedString(value.notes, 4000) ||
61
+ (value.configuration !== undefined && !isBoundedParameters(value.configuration)) ||
62
+ !isRecord(value.trigger)) {
63
+ return false;
64
+ }
65
+ if (value.trigger.triggerType === 'once') {
66
+ return hasOnlyKeys(value.trigger, ['triggerType', 'localDateTime']) && isLocalDateTime(value.trigger.localDateTime);
67
+ }
68
+ return (value.trigger.triggerType === 'recurring' &&
69
+ hasOnlyKeys(value.trigger, ['triggerType', 'cronExpression']) &&
70
+ isFiveFieldCronExpression(value.trigger.cronExpression));
71
+ }
72
+ catch {
73
+ return false;
74
+ }
75
+ }
76
+ export function isScheduleWriteRequest(value) {
77
+ return isResourceStrategyWeeklyScheduleWriteRequest(value) || isRecommendationActionScheduleWriteRequest(value);
78
+ }
79
+ export function isRecommendationActionScheduleCommand(value) {
80
+ return (isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) &&
81
+ isRecord(value) &&
82
+ hasOnlyKeys(value, ['command', 'idempotencyKey']) &&
83
+ (value.command === 'pause' || value.command === 'resume') &&
84
+ isBoundedString(value.idempotencyKey, 200));
85
+ }
86
+ export function isScheduleCommand(value) {
87
+ return isRecommendationActionScheduleCommand(value) || isResourceStrategyScheduleCommand(value);
88
+ }
89
+ export function isRecommendationActionScheduleProjection(value) {
90
+ try {
91
+ if (!isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) || !isRecord(value))
92
+ return false;
93
+ return (hasOnlyKeys(value, [
94
+ 'scheduleId',
95
+ 'definitionRevision',
96
+ 'controlGeneration',
97
+ 'etag',
98
+ 'status',
99
+ 'definition',
100
+ 'nextOccurrenceAtUtc',
101
+ 'lastOccurrenceAtUtc',
102
+ 'lastOccurrenceOutcome',
103
+ 'createdAtUtc',
104
+ 'createdBy',
105
+ 'updatedAtUtc',
106
+ 'updatedBy',
107
+ ]) &&
108
+ isBoundedString(value.scheduleId, 500) &&
109
+ isPositiveInteger(value.definitionRevision) &&
110
+ isPositiveInteger(value.controlGeneration) &&
111
+ isBoundedString(value.etag, 2000) &&
112
+ ['active', 'paused', 'completed'].includes(String(value.status)) &&
113
+ isRecommendationActionScheduleWriteRequest(value.definition) &&
114
+ (value.nextOccurrenceAtUtc === undefined || isIsoTimestamp(value.nextOccurrenceAtUtc)) &&
115
+ (value.lastOccurrenceAtUtc === undefined || isIsoTimestamp(value.lastOccurrenceAtUtc)) &&
116
+ (value.lastOccurrenceOutcome === undefined || ['succeeded', 'failed', 'skipped'].includes(String(value.lastOccurrenceOutcome))) &&
117
+ (value.lastOccurrenceAtUtc === undefined) === (value.lastOccurrenceOutcome === undefined) &&
118
+ isIsoTimestamp(value.createdAtUtc) &&
119
+ isBoundedString(value.createdBy, 500) &&
120
+ isIsoTimestamp(value.updatedAtUtc) &&
121
+ isBoundedString(value.updatedBy, 500));
122
+ }
123
+ catch {
124
+ return false;
125
+ }
126
+ }
127
+ export function isScheduleProjection(value) {
128
+ return isResourceStrategyWeeklyScheduleProjection(value) || isRecommendationActionScheduleProjection(value);
129
+ }
130
+ export function isScheduleListResponse(value) {
131
+ return (isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) &&
132
+ isRecord(value) &&
133
+ hasOnlyKeys(value, ['results', 'continuation']) &&
134
+ Array.isArray(value.results) &&
135
+ value.results.length <= RESOURCE_STRATEGY_CONTRACT_LIMITS.listResults &&
136
+ value.results.every(isScheduleProjection) &&
137
+ (value.continuation === undefined ||
138
+ (isRecord(value.continuation) && hasOnlyKeys(value.continuation, ['cursor']) && isBoundedString(value.continuation.cursor, 2000))));
139
+ }
140
+ export function isScheduledRecommendationActionV1(value) {
141
+ try {
142
+ return (isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) &&
143
+ isRecord(value) &&
144
+ hasOnlyKeys(value, [
145
+ 'schemaVersion',
146
+ 'definitionType',
147
+ 'companyId',
148
+ 'providerScopeId',
149
+ 'cloudAccountId',
150
+ 'scheduleId',
151
+ 'definitionRevision',
152
+ 'controlGeneration',
153
+ 'occurrenceKey',
154
+ 'scheduleRunId',
155
+ 'dueAtUtc',
156
+ 'recommendationId',
157
+ 'operation',
158
+ 'target',
159
+ 'configuration',
160
+ 'correlationId',
161
+ ]) &&
162
+ value.schemaVersion === 1 &&
163
+ value.definitionType === 'recommendation-action' &&
164
+ isBoundedString(value.companyId, 500) &&
165
+ isBoundedString(value.providerScopeId, 500) &&
166
+ isOptionalBoundedString(value.cloudAccountId, 500) &&
167
+ isBoundedString(value.scheduleId, 500) &&
168
+ isPositiveInteger(value.definitionRevision) &&
169
+ isPositiveInteger(value.controlGeneration) &&
170
+ isBoundedString(value.occurrenceKey, 2000) &&
171
+ isBoundedString(value.scheduleRunId, 500) &&
172
+ isIsoTimestamp(value.dueAtUtc) &&
173
+ isBoundedString(value.recommendationId, 500) &&
174
+ value.operation === 'implement' &&
175
+ isRecommendationActionScheduleTarget(value.target) &&
176
+ isBoundedParameters(value.configuration) &&
177
+ isBoundedString(value.correlationId, 500));
178
+ }
179
+ catch {
180
+ return false;
181
+ }
182
+ }
183
+ export function isScheduledOccurrenceV1(value) {
184
+ return isScheduledResourceTransitionV1(value) || isScheduledRecommendationActionV1(value);
185
+ }
186
+ const schedulerOperationTypes = new Set([
187
+ 'refresh-capabilities',
188
+ 'create-schedule',
189
+ 'update-schedule',
190
+ 'delete-schedule',
191
+ 'apply-schedule-command',
192
+ 'refresh-readiness',
193
+ 'preview-resource-schedule',
194
+ ]);
195
+ function isEmptyOrBoundedString(value, maxLength) {
196
+ return typeof value === 'string' && value.length <= maxLength;
197
+ }
198
+ function isSchedulerControlCommandV1(value) {
199
+ if (!isRecord(value) || typeof value.commandType !== 'string' || !schedulerOperationTypes.has(value.commandType)) {
200
+ return false;
201
+ }
202
+ switch (value.commandType) {
203
+ case 'refresh-capabilities':
204
+ return hasOnlyKeys(value, ['commandType']);
205
+ case 'create-schedule':
206
+ return (hasOnlyKeys(value, ['commandType', 'definition', 'idempotencyKey']) &&
207
+ isScheduleWriteRequest(value.definition) &&
208
+ isBoundedString(value.idempotencyKey, 200));
209
+ case 'update-schedule':
210
+ return (hasOnlyKeys(value, ['commandType', 'scheduleId', 'definition', 'expectedEtag', 'idempotencyKey']) &&
211
+ isBoundedString(value.scheduleId, 500) &&
212
+ isScheduleWriteRequest(value.definition) &&
213
+ isBoundedString(value.expectedEtag, 2000) &&
214
+ isBoundedString(value.idempotencyKey, 200));
215
+ case 'delete-schedule':
216
+ return (hasOnlyKeys(value, ['commandType', 'scheduleId', 'expectedEtag', 'idempotencyKey']) &&
217
+ isBoundedString(value.scheduleId, 500) &&
218
+ isBoundedString(value.expectedEtag, 2000) &&
219
+ isBoundedString(value.idempotencyKey, 200));
220
+ case 'apply-schedule-command':
221
+ return (hasOnlyKeys(value, ['commandType', 'scheduleId', 'expectedEtag', 'scheduleCommand']) &&
222
+ isBoundedString(value.scheduleId, 500) &&
223
+ isBoundedString(value.expectedEtag, 2000) &&
224
+ isScheduleCommand(value.scheduleCommand));
225
+ case 'refresh-readiness':
226
+ return (hasOnlyKeys(value, ['commandType', 'cloudAccountId', 'providerScopeId', 'resourceId', 'capability']) &&
227
+ isBoundedString(value.cloudAccountId, 500) &&
228
+ isBoundedString(value.providerScopeId, 500) &&
229
+ isBoundedString(value.resourceId, 2000) &&
230
+ isRecord(value.capability) &&
231
+ hasOnlyKeys(value.capability, ['capabilityId', 'capabilityVersion']) &&
232
+ isBoundedString(value.capability.capabilityId, 200) &&
233
+ isPositiveInteger(value.capability.capabilityVersion));
234
+ case 'preview-resource-schedule':
235
+ return hasOnlyKeys(value, ['commandType', 'request']) && isResourceSchedulePreviewRequest(value.request);
236
+ }
237
+ return false;
238
+ }
239
+ export function isSchedulerControlRequestMessageV1(value) {
240
+ try {
241
+ return (isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) &&
242
+ isRecord(value) &&
243
+ hasOnlyKeys(value, [
244
+ 'schemaVersion',
245
+ 'entity',
246
+ 'action',
247
+ 'companyId',
248
+ 'cloudAccountId',
249
+ 'tenantId',
250
+ 'clientId',
251
+ 'operationId',
252
+ 'requestedAtUtc',
253
+ 'actorId',
254
+ 'correlationId',
255
+ 'command',
256
+ ]) &&
257
+ value.schemaVersion === 1 &&
258
+ value.entity === 'scheduler' &&
259
+ value.action === 'control' &&
260
+ isBoundedString(value.companyId, 500) &&
261
+ isEmptyOrBoundedString(value.cloudAccountId, 500) &&
262
+ isEmptyOrBoundedString(value.tenantId, 500) &&
263
+ isEmptyOrBoundedString(value.clientId, 500) &&
264
+ isBoundedString(value.operationId, 200) &&
265
+ isIsoTimestamp(value.requestedAtUtc) &&
266
+ isBoundedString(value.actorId, 500) &&
267
+ isBoundedString(value.correlationId, 500) &&
268
+ isSchedulerControlCommandV1(value.command));
269
+ }
270
+ catch {
271
+ return false;
272
+ }
273
+ }
274
+ export function isSchedulerOperationAcceptedResponse(value) {
275
+ return (isRecord(value) &&
276
+ hasOnlyKeys(value, ['schemaVersion', 'operationId', 'status', 'submittedAtUtc']) &&
277
+ value.schemaVersion === 1 &&
278
+ isBoundedString(value.operationId, 200) &&
279
+ value.status === 'accepted' &&
280
+ isIsoTimestamp(value.submittedAtUtc));
281
+ }
282
+ function isSchedulerOperationResult(value, operationType) {
283
+ if (!isRecord(value) || typeof value.resultType !== 'string')
284
+ return false;
285
+ if (value.resultType === 'capabilities') {
286
+ return (operationType === 'refresh-capabilities' &&
287
+ hasOnlyKeys(value, ['resultType', 'capabilities']) &&
288
+ Array.isArray(value.capabilities) &&
289
+ value.capabilities.every(isResourceSchedulingCapabilityProjection));
290
+ }
291
+ if (value.resultType === 'schedule') {
292
+ return (['create-schedule', 'update-schedule', 'apply-schedule-command'].includes(operationType) &&
293
+ hasOnlyKeys(value, ['resultType', 'schedule']) &&
294
+ isScheduleProjection(value.schedule));
295
+ }
296
+ if (value.resultType === 'deleted') {
297
+ return operationType === 'delete-schedule' && hasOnlyKeys(value, ['resultType']);
298
+ }
299
+ if (value.resultType === 'readiness') {
300
+ return (operationType === 'refresh-readiness' &&
301
+ hasOnlyKeys(value, ['resultType', 'readiness']) &&
302
+ isResourceSchedulingReadinessProjection(value.readiness));
303
+ }
304
+ return (value.resultType === 'preview' &&
305
+ operationType === 'preview-resource-schedule' &&
306
+ hasOnlyKeys(value, ['resultType', 'preview']) &&
307
+ isResourceSchedulePreviewResponse(value.preview));
308
+ }
309
+ export function isSchedulerOperationProjection(value) {
310
+ try {
311
+ if (!isWithinJsonByteLimit(value, RESOURCE_STRATEGY_CONTRACT_LIMITS.publicDtoBytes) ||
312
+ !isRecord(value) ||
313
+ value.schemaVersion !== 1 ||
314
+ !isBoundedString(value.companyId, 500) ||
315
+ !isBoundedString(value.operationId, 200) ||
316
+ typeof value.operationType !== 'string' ||
317
+ !schedulerOperationTypes.has(value.operationType) ||
318
+ !isIsoTimestamp(value.submittedAtUtc) ||
319
+ !isIsoTimestamp(value.updatedAtUtc)) {
320
+ return false;
321
+ }
322
+ const operationType = value.operationType;
323
+ if (value.status === 'pending') {
324
+ return hasOnlyKeys(value, ['schemaVersion', 'companyId', 'operationId', 'operationType', 'status', 'submittedAtUtc', 'updatedAtUtc']);
325
+ }
326
+ if (value.status === 'succeeded') {
327
+ return (hasOnlyKeys(value, [
328
+ 'schemaVersion',
329
+ 'companyId',
330
+ 'operationId',
331
+ 'operationType',
332
+ 'status',
333
+ 'submittedAtUtc',
334
+ 'updatedAtUtc',
335
+ 'completedAtUtc',
336
+ 'result',
337
+ ]) &&
338
+ isIsoTimestamp(value.completedAtUtc) &&
339
+ isSchedulerOperationResult(value.result, operationType));
340
+ }
341
+ return (value.status === 'failed' &&
342
+ hasOnlyKeys(value, [
343
+ 'schemaVersion',
344
+ 'companyId',
345
+ 'operationId',
346
+ 'operationType',
347
+ 'status',
348
+ 'submittedAtUtc',
349
+ 'updatedAtUtc',
350
+ 'completedAtUtc',
351
+ 'error',
352
+ ]) &&
353
+ isIsoTimestamp(value.completedAtUtc) &&
354
+ isRecord(value.error) &&
355
+ hasOnlyKeys(value.error, ['code', 'message', 'retryable']) &&
356
+ isBoundedString(value.error.code, 100) &&
357
+ isBoundedString(value.error.message, 500) &&
358
+ typeof value.error.retryable === 'boolean');
359
+ }
360
+ catch {
361
+ return false;
362
+ }
363
+ }
package/dist/index.d.ts CHANGED
@@ -63,9 +63,6 @@ export * from './common/artifactEvidence';
63
63
  export * from './company';
64
64
  export * from './customProperties';
65
65
  export * from './scheduler';
66
- export * from './scheduler/bastionSchedule';
67
- export * from './scheduler/bastionScheduleProfile';
68
- export * from './scheduler/bastionScheduleValidation';
69
66
  export * from './ai';
70
67
  export * from './environment';
71
68
  export * from './events';
@@ -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,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uCAAuC,CAAC;AACtD,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,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACpH,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,OAAO,EAAE,oCAAoC,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAC5H,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,2BAA2B,CAAC;AAC1C,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,6BAA6B,CAAC;AAC5C,cAAc,oCAAoC,CAAC;AACnD,cAAc,uCAAuC,CAAC;AACtD,cAAc,MAAM,CAAC;AACrB,cAAc,eAAe,CAAC;AAC9B,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,+BAA+B,CAAC;AAC9C,cAAc,sBAAsB,CAAC;AACrC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,uCAAuC,CAAC;AACtD,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,wBAAwB,CAAC;AACvC,cAAc,kCAAkC,CAAC;AACjD,cAAc,0BAA0B,CAAC;AACzC,cAAc,oCAAoC,CAAC;AACnD,cAAc,qBAAqB,CAAC;AACpC,OAAO,EAAE,oBAAoB,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AACpH,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,OAAO,EAAE,oCAAoC,EAAE,uBAAuB,EAAE,MAAM,6CAA6C,CAAC;AAC5H,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,2BAA2B,CAAC;AAC1C,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,eAAe,CAAC;AAC9B,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
@@ -85,9 +85,6 @@ __exportStar(require("./common/artifactEvidence"), exports);
85
85
  __exportStar(require("./company"), exports);
86
86
  __exportStar(require("./customProperties"), exports);
87
87
  __exportStar(require("./scheduler"), exports);
88
- __exportStar(require("./scheduler/bastionSchedule"), exports);
89
- __exportStar(require("./scheduler/bastionScheduleProfile"), exports);
90
- __exportStar(require("./scheduler/bastionScheduleValidation"), exports);
91
88
  __exportStar(require("./ai"), exports);
92
89
  __exportStar(require("./environment"), exports);
93
90
  __exportStar(require("./events"), 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,gEAA8C;AAC9C,uDAAqC;AACrC,8DAA4C;AAC5C,wEAAsD;AACtD,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,yDAAuC;AACvC,mEAAiD;AACjD,2DAAyC;AACzC,qEAAmD;AACnD,sDAAoC;AACpC,uEAAoH;AAA3G,6HAAA,oBAAoB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAAE,6HAAA,oBAAoB,OAAA;AAC5E,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,mGAA4H;AAAnH,2JAAA,oCAAoC,OAAA;AAAE,8IAAA,uBAAuB,OAAA;AACtE,4DAA0C;AAC1C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,4DAA0C;AAC1C,qDAAmC;AACnC,4DAA0C;AAC1C,yDAAuC;AACvC,4DAA0C;AAC1C,wCAAsB;AACtB,6CAA2B;AAC3B,gDAA8B;AAC9B,0CAAwB;AACxB,2CAAyB;AACzB,4DAA0C;AAC1C,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,8DAA4C;AAC5C,qEAAmD;AACnD,wEAAsD;AACtD,uCAAqB;AACrB,gDAA8B;AAC9B,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,gEAA8C;AAC9C,uDAAqC;AACrC,8DAA4C;AAC5C,wEAAsD;AACtD,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,yDAAuC;AACvC,mEAAiD;AACjD,2DAAyC;AACzC,qEAAmD;AACnD,sDAAoC;AACpC,uEAAoH;AAA3G,6HAAA,oBAAoB,OAAA;AAAE,gIAAA,uBAAuB,OAAA;AAAE,6HAAA,oBAAoB,OAAA;AAC5E,6DAA2C;AAC3C,0DAAwC;AACxC,uDAAqC;AACrC,yDAAuC;AACvC,wDAAsC;AACtC,gDAA8B;AAC9B,mDAAiC;AACjC,kDAAgC;AAChC,mGAA4H;AAAnH,2JAAA,oCAAoC,OAAA;AAAE,8IAAA,uBAAuB,OAAA;AACtE,4DAA0C;AAC1C,iEAA+C;AAC/C,0EAAwD;AACxD,+DAA6C;AAC7C,4DAA0C;AAC1C,qDAAmC;AACnC,4DAA0C;AAC1C,yDAAuC;AACvC,4DAA0C;AAC1C,wCAAsB;AACtB,6CAA2B;AAC3B,gDAA8B;AAC9B,0CAAwB;AACxB,2CAAyB;AACzB,4DAA0C;AAC1C,4CAA0B;AAC1B,qDAAmC;AACnC,8CAA4B;AAC5B,uCAAqB;AACrB,gDAA8B;AAC9B,2CAAyB;AACzB,iDAA+B;AAC/B,6CAA2B;AAC3B,6DAA2C;AAC3C,yCAAuB;AACvB,8CAA4B"}
@@ -1,4 +1,5 @@
1
- export * from './scheduler';
1
+ export * from './schedulerContracts';
2
+ export * from './schedulerValidation';
2
3
  export * from './resourceStrategy';
3
4
  export * from './weeklyAvailabilityFixtures';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":"AAAA,cAAc,sBAAsB,CAAC;AACrC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,8BAA8B,CAAC"}
@@ -14,7 +14,8 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./scheduler"), exports);
17
+ __exportStar(require("./schedulerContracts"), exports);
18
+ __exportStar(require("./schedulerValidation"), exports);
18
19
  __exportStar(require("./resourceStrategy"), exports);
19
20
  __exportStar(require("./weeklyAvailabilityFixtures"), exports);
20
21
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8CAA4B;AAC5B,qDAAmC;AACnC,+DAA6C"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/scheduler/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,uDAAqC;AACrC,wDAAsC;AACtC,qDAAmC;AACnC,+DAA6C"}