@spottoai/types-package 1.0.2-dev1138.12 → 1.0.2-dev1138.14

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 (453) hide show
  1. package/README.md +3 -0
  2. package/dist/accounts/accounts.d.ts +13 -0
  3. package/dist/accounts/accounts.d.ts.map +1 -1
  4. package/dist/accounts/azureSpSetup.d.ts +5 -0
  5. package/dist/accounts/azureSpSetup.d.ts.map +1 -1
  6. package/dist/accounts/azureSpSetup.js.map +1 -1
  7. package/dist/accounts/index.d.ts +1 -0
  8. package/dist/accounts/index.d.ts.map +1 -1
  9. package/dist/accounts/index.js +1 -0
  10. package/dist/accounts/index.js.map +1 -1
  11. package/dist/accounts/subscriptionWriteAccess.d.ts +76 -0
  12. package/dist/accounts/subscriptionWriteAccess.d.ts.map +1 -0
  13. package/dist/accounts/subscriptionWriteAccess.js +119 -0
  14. package/dist/accounts/subscriptionWriteAccess.js.map +1 -0
  15. package/dist/accounts/writePermissions.d.ts +17 -1
  16. package/dist/accounts/writePermissions.d.ts.map +1 -1
  17. package/dist/accounts/writePermissions.js +47 -1
  18. package/dist/accounts/writePermissions.js.map +1 -1
  19. package/dist/ai/followUps.d.ts +16 -0
  20. package/dist/ai/followUps.d.ts.map +1 -0
  21. package/dist/ai/followUps.js +21 -0
  22. package/dist/ai/followUps.js.map +1 -0
  23. package/dist/ai/grounding.d.ts +42 -5
  24. package/dist/ai/grounding.d.ts.map +1 -1
  25. package/dist/ai/grounding.js +76 -8
  26. package/dist/ai/grounding.js.map +1 -1
  27. package/dist/ai/index.d.ts +4 -0
  28. package/dist/ai/index.d.ts.map +1 -1
  29. package/dist/ai/index.js +1 -0
  30. package/dist/ai/index.js.map +1 -1
  31. package/dist/aws/commitments-planning.d.ts +1 -1
  32. package/dist/aws/commitments-planning.d.ts.map +1 -1
  33. package/dist/aws/commitments-planning.js +1 -0
  34. package/dist/aws/commitments-planning.js.map +1 -1
  35. package/dist/aws/commitmentsPlanningValidation.d.ts +1 -1
  36. package/dist/aws/commitmentsPlanningValidation.d.ts.map +1 -1
  37. package/dist/aws/commitmentsPlanningValidation.js +26 -25
  38. package/dist/aws/commitmentsPlanningValidation.js.map +1 -1
  39. package/dist/aws/commitmentsPlanningView.d.ts +49 -0
  40. package/dist/aws/commitmentsPlanningView.d.ts.map +1 -0
  41. package/dist/aws/{pluginPublicArtifactEvidence.js → commitmentsPlanningView.js} +1 -1
  42. package/dist/aws/commitmentsPlanningView.js.map +1 -0
  43. package/dist/aws/index.d.ts +2 -14
  44. package/dist/aws/index.d.ts.map +1 -1
  45. package/dist/aws/index.js +2 -13
  46. package/dist/aws/index.js.map +1 -1
  47. package/dist/aws/organizationCommitments.d.ts +2 -1
  48. package/dist/aws/organizationCommitments.d.ts.map +1 -1
  49. package/dist/aws/organizationCommitments.js +2 -2
  50. package/dist/aws/organizationCommitments.js.map +1 -1
  51. package/dist/aws/organizationCommitmentsApiValidation.d.ts.map +1 -1
  52. package/dist/aws/organizationCommitmentsApiValidation.js +64 -64
  53. package/dist/aws/organizationCommitmentsApiValidation.js.map +1 -1
  54. package/dist/aws/organizationCommitmentsValidation.d.ts.map +1 -1
  55. package/dist/aws/organizationCommitmentsValidation.js +45 -44
  56. package/dist/aws/organizationCommitmentsValidation.js.map +1 -1
  57. package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.d.ts.map +1 -1
  58. package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +79 -76
  59. package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js.map +1 -1
  60. package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts +1 -2
  61. package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.d.ts.map +1 -1
  62. package/dist/aws/portalOrganizationCommitmentsPlanningPublicArtifacts.js.map +1 -1
  63. package/dist/aws/publicArtifacts.d.ts +2 -37
  64. package/dist/aws/publicArtifacts.d.ts.map +1 -1
  65. package/dist/aws/publicArtifacts.js +3 -1
  66. package/dist/aws/publicArtifacts.js.map +1 -1
  67. package/dist/aws/relationships.d.ts +5 -3
  68. package/dist/aws/relationships.d.ts.map +1 -1
  69. package/dist/aws/relationships.js +18 -3
  70. package/dist/aws/relationships.js.map +1 -1
  71. package/dist/aws/requests.d.ts +35 -3
  72. package/dist/aws/requests.d.ts.map +1 -1
  73. package/dist/aws/requests.js +5 -3
  74. package/dist/aws/requests.js.map +1 -1
  75. package/dist/aws/resourceGraph.d.ts +14 -0
  76. package/dist/aws/resourceGraph.d.ts.map +1 -0
  77. package/dist/aws/resourceGraph.js +68 -0
  78. package/dist/aws/resourceGraph.js.map +1 -0
  79. package/dist/aws/validationHelpers.d.ts +8 -0
  80. package/dist/aws/validationHelpers.d.ts.map +1 -0
  81. package/dist/aws/validationHelpers.js +54 -0
  82. package/dist/aws/validationHelpers.js.map +1 -0
  83. package/dist/azure/commitmentsPlanning.d.ts +15 -46
  84. package/dist/azure/commitmentsPlanning.d.ts.map +1 -1
  85. package/dist/azure/commitmentsPlanning.js +9 -0
  86. package/dist/azure/commitmentsPlanning.js.map +1 -1
  87. package/dist/azure/commitmentsPlanningValidation.d.ts +18 -0
  88. package/dist/azure/commitmentsPlanningValidation.d.ts.map +1 -0
  89. package/dist/azure/commitmentsPlanningValidation.js +50 -0
  90. package/dist/azure/commitmentsPlanningValidation.js.map +1 -0
  91. package/dist/azure/dataProtection.d.ts +40 -0
  92. package/dist/azure/dataProtection.d.ts.map +1 -1
  93. package/dist/azure/governance.d.ts +5 -0
  94. package/dist/azure/governance.d.ts.map +1 -1
  95. package/dist/azure/metrics.d.ts +2 -27
  96. package/dist/azure/metrics.d.ts.map +1 -1
  97. package/dist/azure/payloads.d.ts +24 -0
  98. package/dist/azure/payloads.d.ts.map +1 -1
  99. package/dist/azure/payloads.js +87 -0
  100. package/dist/azure/payloads.js.map +1 -1
  101. package/dist/azure/recommendationTracks.d.ts +1 -1
  102. package/dist/azure/recommendationTracks.d.ts.map +1 -1
  103. package/dist/azure/reportEvidence.d.ts +192 -11
  104. package/dist/azure/reportEvidence.d.ts.map +1 -1
  105. package/dist/azure/reportEvidence.js +9 -1
  106. package/dist/azure/reportEvidence.js.map +1 -1
  107. package/dist/azure/reportEvidenceValidation.d.ts.map +1 -1
  108. package/dist/azure/reportEvidenceValidation.js +201 -5
  109. package/dist/azure/reportEvidenceValidation.js.map +1 -1
  110. package/dist/azure/reportEvidenceValidationHelpers.d.ts +3 -16
  111. package/dist/azure/reportEvidenceValidationHelpers.d.ts.map +1 -1
  112. package/dist/azure/reportEvidenceValidationHelpers.js +80 -92
  113. package/dist/azure/reportEvidenceValidationHelpers.js.map +1 -1
  114. package/dist/azure/resilienceFacts.d.ts +100 -0
  115. package/dist/azure/resilienceFacts.d.ts.map +1 -0
  116. package/dist/azure/resilienceFacts.js +20 -0
  117. package/dist/azure/resilienceFacts.js.map +1 -0
  118. package/dist/azure/resilienceFactsValidation.d.ts +4 -0
  119. package/dist/azure/resilienceFactsValidation.d.ts.map +1 -0
  120. package/dist/azure/resilienceFactsValidation.js +70 -0
  121. package/dist/azure/resilienceFactsValidation.js.map +1 -0
  122. package/dist/azure/savings.d.ts +4 -2
  123. package/dist/azure/savings.d.ts.map +1 -1
  124. package/dist/azure/serviceRetirement.d.ts +21 -2
  125. package/dist/azure/serviceRetirement.d.ts.map +1 -1
  126. package/dist/azure/views.d.ts +24 -1
  127. package/dist/azure/views.d.ts.map +1 -1
  128. package/dist/azure/views.js.map +1 -1
  129. package/dist/common/boundedRows.d.ts +7 -0
  130. package/dist/common/boundedRows.d.ts.map +1 -0
  131. package/dist/{scheduler/scheduler.js → common/boundedRows.js} +1 -1
  132. package/dist/common/boundedRows.js.map +1 -0
  133. package/dist/common/index.d.ts +3 -0
  134. package/dist/common/index.d.ts.map +1 -1
  135. package/dist/common/index.js +3 -0
  136. package/dist/common/index.js.map +1 -1
  137. package/dist/common/metricStats.d.ts +29 -0
  138. package/dist/common/metricStats.d.ts.map +1 -0
  139. package/dist/{scheduler/bastionSchedule.js → common/metricStats.js} +1 -1
  140. package/dist/common/metricStats.js.map +1 -0
  141. package/dist/common/provider.d.ts +2 -0
  142. package/dist/common/provider.d.ts.map +1 -1
  143. package/dist/common/relationships.d.ts +3 -3
  144. package/dist/common/relationships.d.ts.map +1 -1
  145. package/dist/common/resourceGraph.d.ts +137 -0
  146. package/dist/common/resourceGraph.d.ts.map +1 -0
  147. package/dist/common/resourceGraph.js +17 -0
  148. package/dist/common/resourceGraph.js.map +1 -0
  149. package/dist/common/resourceGraphValidation.d.ts +30 -0
  150. package/dist/common/resourceGraphValidation.d.ts.map +1 -0
  151. package/dist/common/resourceGraphValidation.js +369 -0
  152. package/dist/common/resourceGraphValidation.js.map +1 -0
  153. package/dist/common/resourceIdentity.d.ts +28 -0
  154. package/dist/common/resourceIdentity.d.ts.map +1 -0
  155. package/dist/common/resourceIdentity.js +35 -0
  156. package/dist/common/resourceIdentity.js.map +1 -0
  157. package/dist/common/sha256.d.ts +2 -0
  158. package/dist/common/sha256.d.ts.map +1 -1
  159. package/dist/common/sha256.js +3 -0
  160. package/dist/common/sha256.js.map +1 -1
  161. package/dist/common/utilizationStories.d.ts +695 -0
  162. package/dist/common/utilizationStories.d.ts.map +1 -0
  163. package/dist/common/utilizationStories.js +21 -0
  164. package/dist/common/utilizationStories.js.map +1 -0
  165. package/dist/common/utilizationStoriesValidation.d.ts +60 -0
  166. package/dist/common/utilizationStoriesValidation.d.ts.map +1 -0
  167. package/dist/common/utilizationStoriesValidation.js +762 -0
  168. package/dist/common/utilizationStoriesValidation.js.map +1 -0
  169. package/dist/common/validationHelpers.d.ts +37 -0
  170. package/dist/common/validationHelpers.d.ts.map +1 -0
  171. package/dist/common/validationHelpers.js +147 -0
  172. package/dist/common/validationHelpers.js.map +1 -0
  173. package/dist/esm/accounts/index.js +1 -0
  174. package/dist/esm/accounts/subscriptionWriteAccess.js +112 -0
  175. package/dist/esm/accounts/writePermissions.js +46 -0
  176. package/dist/esm/ai/followUps.js +16 -0
  177. package/dist/esm/ai/grounding.js +74 -7
  178. package/dist/esm/ai/index.js +1 -0
  179. package/dist/esm/aws/commitments-planning.js +1 -0
  180. package/dist/esm/aws/commitmentsPlanningValidation.js +2 -1
  181. package/dist/esm/aws/index.js +2 -13
  182. package/dist/esm/aws/organizationCommitments.js +2 -2
  183. package/dist/esm/aws/organizationCommitmentsApiValidation.js +5 -5
  184. package/dist/esm/aws/organizationCommitmentsValidation.js +2 -1
  185. package/dist/esm/aws/portalOrganizationCommitmentsPlanningPublicArtifactValidation.js +8 -5
  186. package/dist/esm/aws/publicArtifacts.js +2 -0
  187. package/dist/esm/aws/relationships.js +4 -1
  188. package/dist/esm/aws/requests.js +4 -2
  189. package/dist/esm/aws/resourceGraph.js +63 -0
  190. package/dist/esm/aws/validationHelpers.js +46 -0
  191. package/dist/esm/azure/commitmentsPlanning.js +8 -1
  192. package/dist/esm/azure/commitmentsPlanningValidation.js +39 -0
  193. package/dist/esm/azure/payloads.js +84 -1
  194. package/dist/esm/azure/reportEvidence.js +8 -0
  195. package/dist/esm/azure/reportEvidenceValidation.js +202 -6
  196. package/dist/esm/azure/reportEvidenceValidationHelpers.js +7 -19
  197. package/dist/esm/azure/resilienceFacts.js +16 -0
  198. package/dist/esm/azure/resilienceFactsValidation.js +64 -0
  199. package/dist/esm/common/index.js +3 -0
  200. package/dist/esm/common/resourceGraph.js +13 -0
  201. package/dist/esm/common/resourceGraphValidation.js +365 -0
  202. package/dist/esm/common/resourceIdentity.js +24 -0
  203. package/dist/esm/common/sha256.js +2 -0
  204. package/dist/esm/common/utilizationStories.js +17 -0
  205. package/dist/esm/common/utilizationStoriesValidation.js +718 -0
  206. package/dist/esm/common/validationHelpers.js +115 -0
  207. package/dist/esm/entries/relationships.js +2 -2
  208. package/dist/esm/index.js +5 -0
  209. package/dist/esm/index.vite.js +1 -0
  210. package/dist/esm/reporting/jobs/index.js +13 -0
  211. package/dist/esm/reporting/jobs/reportJobIdentity.js +76 -0
  212. package/dist/esm/reporting/jobs/reportJobMessages.js +47 -0
  213. package/dist/esm/reporting/jobs/reportJobRow.js +264 -0
  214. package/dist/esm/reporting/jobs/reportJobSpec.js +295 -0
  215. package/dist/esm/reporting/jobs/reportJobStatus.js +87 -0
  216. package/dist/esm/reporting/shared/reportTableEntities.js +41 -0
  217. package/dist/esm/reporting/shared/reportingDigest.js +57 -0
  218. package/dist/esm/reporting/shared/reportingIds.js +88 -0
  219. package/dist/esm/reporting/shared/reportingPaths.js +23 -0
  220. package/dist/esm/scheduler/index.js +4 -4
  221. package/dist/esm/scheduler/resourceStrategy.js +2 -0
  222. package/dist/esm/scheduler/resourceStrategyCapabilityValidation.js +265 -0
  223. package/dist/esm/scheduler/resourceStrategyContracts.js +20 -0
  224. package/dist/esm/scheduler/resourceStrategyFinancialValidation.js +145 -0
  225. package/dist/esm/scheduler/resourceStrategyPermissionValidation.js +190 -0
  226. package/dist/esm/scheduler/resourceStrategyScheduleValidation.js +506 -0
  227. package/dist/esm/scheduler/resourceStrategyValidation.js +4 -0
  228. package/dist/esm/scheduler/resourceStrategyValidationShared.js +261 -0
  229. package/dist/esm/scheduler/schedulerValidation.js +372 -0
  230. package/dist/esm/scheduler/weeklyAvailabilityFixtures.js +140 -0
  231. package/dist/index.d.ts +5 -0
  232. package/dist/index.d.ts.map +1 -1
  233. package/dist/index.js +5 -0
  234. package/dist/index.js.map +1 -1
  235. package/dist/index.vite.d.ts +1 -0
  236. package/dist/index.vite.d.ts.map +1 -1
  237. package/dist/index.vite.js +1 -0
  238. package/dist/index.vite.js.map +1 -1
  239. package/dist/reporting/jobs/index.d.ts +14 -0
  240. package/dist/reporting/jobs/index.d.ts.map +1 -0
  241. package/dist/reporting/jobs/index.js +45 -0
  242. package/dist/reporting/jobs/index.js.map +1 -0
  243. package/dist/reporting/jobs/reportJobIdentity.d.ts +44 -0
  244. package/dist/reporting/jobs/reportJobIdentity.d.ts.map +1 -0
  245. package/dist/reporting/jobs/reportJobIdentity.js +88 -0
  246. package/dist/reporting/jobs/reportJobIdentity.js.map +1 -0
  247. package/dist/reporting/jobs/reportJobMessages.d.ts +30 -0
  248. package/dist/reporting/jobs/reportJobMessages.d.ts.map +1 -0
  249. package/dist/reporting/jobs/reportJobMessages.js +54 -0
  250. package/dist/reporting/jobs/reportJobMessages.js.map +1 -0
  251. package/dist/reporting/jobs/reportJobRow.d.ts +98 -0
  252. package/dist/reporting/jobs/reportJobRow.d.ts.map +1 -0
  253. package/dist/reporting/jobs/reportJobRow.js +270 -0
  254. package/dist/reporting/jobs/reportJobRow.js.map +1 -0
  255. package/dist/reporting/jobs/reportJobSpec.d.ts +92 -0
  256. package/dist/reporting/jobs/reportJobSpec.d.ts.map +1 -0
  257. package/dist/reporting/jobs/reportJobSpec.js +304 -0
  258. package/dist/reporting/jobs/reportJobSpec.js.map +1 -0
  259. package/dist/reporting/jobs/reportJobStatus.d.ts +60 -0
  260. package/dist/reporting/jobs/reportJobStatus.d.ts.map +1 -0
  261. package/dist/reporting/jobs/reportJobStatus.js +98 -0
  262. package/dist/reporting/jobs/reportJobStatus.js.map +1 -0
  263. package/dist/reporting/shared/reportTableEntities.d.ts +23 -0
  264. package/dist/reporting/shared/reportTableEntities.d.ts.map +1 -0
  265. package/dist/reporting/shared/reportTableEntities.js +47 -0
  266. package/dist/reporting/shared/reportTableEntities.js.map +1 -0
  267. package/dist/reporting/shared/reportingDigest.d.ts +6 -0
  268. package/dist/reporting/shared/reportingDigest.d.ts.map +1 -0
  269. package/dist/reporting/shared/reportingDigest.js +63 -0
  270. package/dist/reporting/shared/reportingDigest.js.map +1 -0
  271. package/dist/reporting/shared/reportingIds.d.ts +34 -0
  272. package/dist/reporting/shared/reportingIds.d.ts.map +1 -0
  273. package/dist/reporting/shared/reportingIds.js +102 -0
  274. package/dist/reporting/shared/reportingIds.js.map +1 -0
  275. package/dist/reporting/shared/reportingPaths.d.ts +14 -0
  276. package/dist/reporting/shared/reportingPaths.d.ts.map +1 -0
  277. package/dist/reporting/shared/reportingPaths.js +29 -0
  278. package/dist/reporting/shared/reportingPaths.js.map +1 -0
  279. package/dist/scheduler/index.d.ts +4 -4
  280. package/dist/scheduler/index.d.ts.map +1 -1
  281. package/dist/scheduler/index.js +4 -4
  282. package/dist/scheduler/index.js.map +1 -1
  283. package/dist/scheduler/resourceStrategy.d.ts +3 -0
  284. package/dist/scheduler/resourceStrategy.d.ts.map +1 -0
  285. package/dist/scheduler/resourceStrategy.js +19 -0
  286. package/dist/scheduler/resourceStrategy.js.map +1 -0
  287. package/dist/scheduler/resourceStrategyCapabilityValidation.d.ts +4 -0
  288. package/dist/scheduler/resourceStrategyCapabilityValidation.d.ts.map +1 -0
  289. package/dist/scheduler/resourceStrategyCapabilityValidation.js +270 -0
  290. package/dist/scheduler/resourceStrategyCapabilityValidation.js.map +1 -0
  291. package/dist/scheduler/resourceStrategyContracts.d.ts +466 -0
  292. package/dist/scheduler/resourceStrategyContracts.d.ts.map +1 -0
  293. package/dist/scheduler/resourceStrategyContracts.js +24 -0
  294. package/dist/scheduler/resourceStrategyContracts.js.map +1 -0
  295. package/dist/scheduler/resourceStrategyFinancialValidation.d.ts +5 -0
  296. package/dist/scheduler/resourceStrategyFinancialValidation.d.ts.map +1 -0
  297. package/dist/scheduler/resourceStrategyFinancialValidation.js +151 -0
  298. package/dist/scheduler/resourceStrategyFinancialValidation.js.map +1 -0
  299. package/dist/scheduler/resourceStrategyPermissionValidation.d.ts +4 -0
  300. package/dist/scheduler/resourceStrategyPermissionValidation.d.ts.map +1 -0
  301. package/dist/scheduler/resourceStrategyPermissionValidation.js +195 -0
  302. package/dist/scheduler/resourceStrategyPermissionValidation.js.map +1 -0
  303. package/dist/scheduler/resourceStrategyScheduleValidation.d.ts +14 -0
  304. package/dist/scheduler/resourceStrategyScheduleValidation.d.ts.map +1 -0
  305. package/dist/scheduler/resourceStrategyScheduleValidation.js +519 -0
  306. package/dist/scheduler/resourceStrategyScheduleValidation.js.map +1 -0
  307. package/dist/scheduler/resourceStrategyValidation.d.ts +5 -0
  308. package/dist/scheduler/resourceStrategyValidation.d.ts.map +1 -0
  309. package/dist/scheduler/resourceStrategyValidation.js +21 -0
  310. package/dist/scheduler/resourceStrategyValidation.js.map +1 -0
  311. package/dist/scheduler/resourceStrategyValidationShared.d.ts +19 -0
  312. package/dist/scheduler/resourceStrategyValidationShared.d.ts.map +1 -0
  313. package/dist/scheduler/resourceStrategyValidationShared.js +281 -0
  314. package/dist/scheduler/resourceStrategyValidationShared.js.map +1 -0
  315. package/dist/scheduler/schedulerContracts.d.ts +184 -0
  316. package/dist/scheduler/schedulerContracts.d.ts.map +1 -0
  317. package/dist/{aws/portalPublicArtifactNestedEvidence.js → scheduler/schedulerContracts.js} +1 -1
  318. package/dist/scheduler/schedulerContracts.js.map +1 -0
  319. package/dist/scheduler/schedulerValidation.d.ts +15 -0
  320. package/dist/scheduler/schedulerValidation.d.ts.map +1 -0
  321. package/dist/scheduler/schedulerValidation.js +388 -0
  322. package/dist/scheduler/schedulerValidation.js.map +1 -0
  323. package/dist/scheduler/weeklyAvailabilityFixtures.d.ts +26 -0
  324. package/dist/scheduler/weeklyAvailabilityFixtures.d.ts.map +1 -0
  325. package/dist/scheduler/weeklyAvailabilityFixtures.js +144 -0
  326. package/dist/scheduler/weeklyAvailabilityFixtures.js.map +1 -0
  327. package/package.json +26 -7
  328. package/dist/aws/pluginPublicArtifactBodyValidation.d.ts +0 -10
  329. package/dist/aws/pluginPublicArtifactBodyValidation.d.ts.map +0 -1
  330. package/dist/aws/pluginPublicArtifactBodyValidation.js +0 -225
  331. package/dist/aws/pluginPublicArtifactBodyValidation.js.map +0 -1
  332. package/dist/aws/pluginPublicArtifactEvidence.d.ts +0 -161
  333. package/dist/aws/pluginPublicArtifactEvidence.d.ts.map +0 -1
  334. package/dist/aws/pluginPublicArtifactEvidence.js.map +0 -1
  335. package/dist/aws/pluginPublicArtifactManifestValidation.d.ts +0 -4
  336. package/dist/aws/pluginPublicArtifactManifestValidation.d.ts.map +0 -1
  337. package/dist/aws/pluginPublicArtifactManifestValidation.js +0 -259
  338. package/dist/aws/pluginPublicArtifactManifestValidation.js.map +0 -1
  339. package/dist/aws/pluginPublicArtifactSectionValidation.d.ts +0 -6
  340. package/dist/aws/pluginPublicArtifactSectionValidation.d.ts.map +0 -1
  341. package/dist/aws/pluginPublicArtifactSectionValidation.js +0 -471
  342. package/dist/aws/pluginPublicArtifactSectionValidation.js.map +0 -1
  343. package/dist/aws/pluginPublicArtifactValidation.d.ts +0 -3
  344. package/dist/aws/pluginPublicArtifactValidation.d.ts.map +0 -1
  345. package/dist/aws/pluginPublicArtifactValidation.js +0 -9
  346. package/dist/aws/pluginPublicArtifactValidation.js.map +0 -1
  347. package/dist/aws/pluginPublicArtifactValidationHelpers.d.ts +0 -23
  348. package/dist/aws/pluginPublicArtifactValidationHelpers.d.ts.map +0 -1
  349. package/dist/aws/pluginPublicArtifactValidationHelpers.js +0 -240
  350. package/dist/aws/pluginPublicArtifactValidationHelpers.js.map +0 -1
  351. package/dist/aws/pluginPublicArtifacts.d.ts +0 -253
  352. package/dist/aws/pluginPublicArtifacts.d.ts.map +0 -1
  353. package/dist/aws/pluginPublicArtifacts.js +0 -51
  354. package/dist/aws/pluginPublicArtifacts.js.map +0 -1
  355. package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.d.ts +0 -4
  356. package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.d.ts.map +0 -1
  357. package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.js +0 -513
  358. package/dist/aws/portalCommitmentsPlanningPublicArtifactValidation.js.map +0 -1
  359. package/dist/aws/portalCommitmentsPlanningPublicArtifacts.d.ts +0 -13
  360. package/dist/aws/portalCommitmentsPlanningPublicArtifacts.d.ts.map +0 -1
  361. package/dist/aws/portalCommitmentsPlanningPublicArtifacts.js +0 -5
  362. package/dist/aws/portalCommitmentsPlanningPublicArtifacts.js.map +0 -1
  363. package/dist/aws/portalPublicArtifactCurrentValidation.d.ts +0 -4
  364. package/dist/aws/portalPublicArtifactCurrentValidation.d.ts.map +0 -1
  365. package/dist/aws/portalPublicArtifactCurrentValidation.js +0 -333
  366. package/dist/aws/portalPublicArtifactCurrentValidation.js.map +0 -1
  367. package/dist/aws/portalPublicArtifactEvidenceValidation.d.ts +0 -6
  368. package/dist/aws/portalPublicArtifactEvidenceValidation.d.ts.map +0 -1
  369. package/dist/aws/portalPublicArtifactEvidenceValidation.js +0 -301
  370. package/dist/aws/portalPublicArtifactEvidenceValidation.js.map +0 -1
  371. package/dist/aws/portalPublicArtifactHistoryAiValidation.d.ts +0 -8
  372. package/dist/aws/portalPublicArtifactHistoryAiValidation.d.ts.map +0 -1
  373. package/dist/aws/portalPublicArtifactHistoryAiValidation.js +0 -377
  374. package/dist/aws/portalPublicArtifactHistoryAiValidation.js.map +0 -1
  375. package/dist/aws/portalPublicArtifactHistoryTypes.d.ts +0 -178
  376. package/dist/aws/portalPublicArtifactHistoryTypes.d.ts.map +0 -1
  377. package/dist/aws/portalPublicArtifactHistoryTypes.js +0 -44
  378. package/dist/aws/portalPublicArtifactHistoryTypes.js.map +0 -1
  379. package/dist/aws/portalPublicArtifactNestedEvidence.d.ts +0 -127
  380. package/dist/aws/portalPublicArtifactNestedEvidence.d.ts.map +0 -1
  381. package/dist/aws/portalPublicArtifactNestedEvidence.js.map +0 -1
  382. package/dist/aws/portalPublicArtifactNestedEvidenceValidation.d.ts +0 -6
  383. package/dist/aws/portalPublicArtifactNestedEvidenceValidation.d.ts.map +0 -1
  384. package/dist/aws/portalPublicArtifactNestedEvidenceValidation.js +0 -405
  385. package/dist/aws/portalPublicArtifactNestedEvidenceValidation.js.map +0 -1
  386. package/dist/aws/portalPublicArtifactValidation.d.ts +0 -3
  387. package/dist/aws/portalPublicArtifactValidation.d.ts.map +0 -1
  388. package/dist/aws/portalPublicArtifactValidation.js +0 -14
  389. package/dist/aws/portalPublicArtifactValidation.js.map +0 -1
  390. package/dist/aws/portalPublicArtifactValidationCommon.d.ts +0 -30
  391. package/dist/aws/portalPublicArtifactValidationCommon.d.ts.map +0 -1
  392. package/dist/aws/portalPublicArtifactValidationCommon.js +0 -167
  393. package/dist/aws/portalPublicArtifactValidationCommon.js.map +0 -1
  394. package/dist/aws/portalPublicArtifacts.d.ts +0 -400
  395. package/dist/aws/portalPublicArtifacts.d.ts.map +0 -1
  396. package/dist/aws/portalPublicArtifacts.js +0 -85
  397. package/dist/aws/portalPublicArtifacts.js.map +0 -1
  398. package/dist/aws/portalRelationshipPublicArtifactValidation.d.ts +0 -4
  399. package/dist/aws/portalRelationshipPublicArtifactValidation.d.ts.map +0 -1
  400. package/dist/aws/portalRelationshipPublicArtifactValidation.js +0 -338
  401. package/dist/aws/portalRelationshipPublicArtifactValidation.js.map +0 -1
  402. package/dist/aws/portalRelationshipPublicArtifacts.d.ts +0 -196
  403. package/dist/aws/portalRelationshipPublicArtifacts.d.ts.map +0 -1
  404. package/dist/aws/portalRelationshipPublicArtifacts.js +0 -63
  405. package/dist/aws/portalRelationshipPublicArtifacts.js.map +0 -1
  406. package/dist/aws/portalRelationshipResourceNodeTypes.d.ts +0 -269
  407. package/dist/aws/portalRelationshipResourceNodeTypes.d.ts.map +0 -1
  408. package/dist/aws/portalRelationshipResourceNodeTypes.js +0 -3
  409. package/dist/aws/portalRelationshipResourceNodeTypes.js.map +0 -1
  410. package/dist/aws/portalRelationshipResourceNodeValidation.d.ts +0 -2
  411. package/dist/aws/portalRelationshipResourceNodeValidation.d.ts.map +0 -1
  412. package/dist/aws/portalRelationshipResourceNodeValidation.js +0 -372
  413. package/dist/aws/portalRelationshipResourceNodeValidation.js.map +0 -1
  414. package/dist/esm/aws/pluginPublicArtifactBodyValidation.js +0 -217
  415. package/dist/esm/aws/pluginPublicArtifactManifestValidation.js +0 -255
  416. package/dist/esm/aws/pluginPublicArtifactSectionValidation.js +0 -464
  417. package/dist/esm/aws/pluginPublicArtifactValidation.js +0 -2
  418. package/dist/esm/aws/pluginPublicArtifactValidationHelpers.js +0 -216
  419. package/dist/esm/aws/pluginPublicArtifacts.js +0 -44
  420. package/dist/esm/aws/portalCommitmentsPlanningPublicArtifactValidation.js +0 -509
  421. package/dist/esm/aws/portalCommitmentsPlanningPublicArtifacts.js +0 -1
  422. package/dist/esm/aws/portalPublicArtifactCurrentValidation.js +0 -328
  423. package/dist/esm/aws/portalPublicArtifactEvidenceValidation.js +0 -294
  424. package/dist/esm/aws/portalPublicArtifactHistoryAiValidation.js +0 -368
  425. package/dist/esm/aws/portalPublicArtifactHistoryTypes.js +0 -40
  426. package/dist/esm/aws/portalPublicArtifactNestedEvidenceValidation.js +0 -397
  427. package/dist/esm/aws/portalPublicArtifactValidation.js +0 -2
  428. package/dist/esm/aws/portalPublicArtifactValidationCommon.js +0 -139
  429. package/dist/esm/aws/portalPublicArtifacts.js +0 -73
  430. package/dist/esm/aws/portalRelationshipPublicArtifactValidation.js +0 -334
  431. package/dist/esm/aws/portalRelationshipPublicArtifacts.js +0 -59
  432. package/dist/esm/aws/portalRelationshipResourceNodeValidation.js +0 -368
  433. package/dist/esm/scheduler/bastionScheduleProfile.js +0 -206
  434. package/dist/esm/scheduler/bastionScheduleValidation.js +0 -401
  435. package/dist/esm/scheduler/scheduler.js +0 -1
  436. package/dist/scheduler/bastionSchedule.d.ts +0 -113
  437. package/dist/scheduler/bastionSchedule.d.ts.map +0 -1
  438. package/dist/scheduler/bastionSchedule.js.map +0 -1
  439. package/dist/scheduler/bastionScheduleProfile.d.ts +0 -24
  440. package/dist/scheduler/bastionScheduleProfile.d.ts.map +0 -1
  441. package/dist/scheduler/bastionScheduleProfile.js +0 -210
  442. package/dist/scheduler/bastionScheduleProfile.js.map +0 -1
  443. package/dist/scheduler/bastionScheduleValidation.d.ts +0 -10
  444. package/dist/scheduler/bastionScheduleValidation.d.ts.map +0 -1
  445. package/dist/scheduler/bastionScheduleValidation.js +0 -412
  446. package/dist/scheduler/bastionScheduleValidation.js.map +0 -1
  447. package/dist/scheduler/scheduler.d.ts +0 -267
  448. package/dist/scheduler/scheduler.d.ts.map +0 -1
  449. package/dist/scheduler/scheduler.js.map +0 -1
  450. /package/dist/esm/aws/{pluginPublicArtifactEvidence.js → commitmentsPlanningView.js} +0 -0
  451. /package/dist/esm/{aws/portalPublicArtifactNestedEvidence.js → common/boundedRows.js} +0 -0
  452. /package/dist/esm/{aws/portalRelationshipResourceNodeTypes.js → common/metricStats.js} +0 -0
  453. /package/dist/esm/scheduler/{bastionSchedule.js → schedulerContracts.js} +0 -0
@@ -1,8 +1,10 @@
1
1
  import { isCompactRecommendation, isInventoryCatalogueResource } from './reportEvidenceCatalogueValidation.js';
2
2
  import { isReportDailySpend } from './reportDailySpendValidation.js';
3
3
  import { isReportSavingsBasis, isReportSpendProjection } from './reportSpendValidation.js';
4
- import { REPORT_EVIDENCE_LIMITS, } from './reportEvidence.js';
4
+ import { isCommitmentsFreshnessEntry, isCommitmentsFreshnessStatus } from './commitmentsPlanningValidation.js';
5
+ import { REPORT_EVIDENCE_LIMITS, REPORT_PRINCIPAL_TYPES, } from './reportEvidence.js';
5
6
  import { countTotal, hasOptionalNumbers, hasOptionalStrings, hasRequiredRecords, isBoundedRows, isCommitmentExpirySummary, isCostSummary, isCount, isCountRecord, isDateTime, isEvidenceReference, isFiniteNumber, isOptionalBoolean, isOptionalFiniteNumber, isOptionalString, isProjectionRows, isRecommendationSummary, isRecord, isResourceSummary, isRetirementSummary, isSourceFileStatus, isString, isStringArray, isTagCoverage, } from './reportEvidenceValidationHelpers.js';
7
+ import { isReportingStories, isStoryFingerprintRows } from '../common/utilizationStoriesValidation.js';
6
8
  export const isReportSecureScoreEvidence = (value) => {
7
9
  if (!isRecord(value) || !['available', 'unavailable', 'stale'].includes(value.status))
8
10
  return false;
@@ -22,6 +24,54 @@ const isCostSavingsCategory = (value) => isRecord(value) &&
22
24
  isCount(value.recommendationCount) &&
23
25
  isCount(value.resourceCount) &&
24
26
  ['currentMonthlyCost', 'potentialMonthlyCost', 'minimumMonthlySavings', 'maximumMonthlySavings'].every(key => isFiniteNumber(value[key]));
27
+ const REPORT_COST_CHANGE_LEVELS = new Set(['service', 'resource-group', 'resource', 'meter']);
28
+ const REPORT_COST_CHANGE_TYPES = new Set(['increase', 'decrease', 'no_change', 'new_resource', 'removed_resource']);
29
+ const REPORT_COST_CHANGE_REASON_TYPES = new Set([
30
+ 'new_resource',
31
+ 'removed_resource',
32
+ 'quantity_increase',
33
+ 'quantity_decrease',
34
+ 'rate_change',
35
+ 'sku_change',
36
+ 'new_meter',
37
+ 'removed_meter',
38
+ ]);
39
+ const isStringOrFiniteNumber = (value) => isString(value) || isFiniteNumber(value);
40
+ const isCostChangeReason = (value) => isRecord(value) &&
41
+ isString(value.type) &&
42
+ REPORT_COST_CHANGE_REASON_TYPES.has(value.type) &&
43
+ isFiniteNumber(value.impact) &&
44
+ isOptionalFiniteNumber(value.impactPercent) &&
45
+ isString(value.description) &&
46
+ (value.oldValue === undefined || isStringOrFiniteNumber(value.oldValue)) &&
47
+ (value.newValue === undefined || isStringOrFiniteNumber(value.newValue));
48
+ const isCostChangeDriver = (value) => isRecord(value) &&
49
+ isString(value.key) &&
50
+ isString(value.level) &&
51
+ REPORT_COST_CHANGE_LEVELS.has(value.level) &&
52
+ isString(value.label) &&
53
+ isOptionalString(value.resourceId) &&
54
+ isFiniteNumber(value.currentCost) &&
55
+ isFiniteNumber(value.previousCost) &&
56
+ isFiniteNumber(value.change) &&
57
+ isOptionalFiniteNumber(value.changePercent) &&
58
+ isString(value.changeType) &&
59
+ REPORT_COST_CHANGE_TYPES.has(value.changeType) &&
60
+ isOptionalString(value.summary) &&
61
+ isBoundedRows(value.reasons, REPORT_EVIDENCE_LIMITS.costChangeReasons, isCostChangeReason);
62
+ const isCostChangePeriod = (value) => isRecord(value) &&
63
+ isString(value.period) &&
64
+ /^\d{4}-(0[1-9]|1[0-2])$/u.test(value.period) &&
65
+ isString(value.previousPeriod) &&
66
+ /^\d{4}-(0[1-9]|1[0-2])$/u.test(value.previousPeriod) &&
67
+ value.previousPeriod < value.period &&
68
+ isString(value.currency) &&
69
+ /^[A-Z]{3}$/u.test(value.currency) &&
70
+ isFiniteNumber(value.currentCost) &&
71
+ isFiniteNumber(value.previousCost) &&
72
+ isFiniteNumber(value.change) &&
73
+ isOptionalFiniteNumber(value.changePercent) &&
74
+ isBoundedRows(value.drivers, REPORT_EVIDENCE_LIMITS.costChangeDrivers, isCostChangeDriver);
25
75
  const hasRequiredCountKeys = (value, keys) => isCountRecord(value) && keys.every(key => Object.prototype.hasOwnProperty.call(value, key));
26
76
  const isRecommendationPortfolio = (value) => {
27
77
  if (!isRecord(value))
@@ -114,6 +164,8 @@ const isPrivilegedAccess = (value) => isRecord(value) &&
114
164
  isString(value.principalId) &&
115
165
  isString(value.displayName) &&
116
166
  isString(value.roleName) &&
167
+ (value.principalType === undefined ||
168
+ (typeof value.principalType === 'string' && REPORT_PRINCIPAL_TYPES.includes(value.principalType))) &&
117
169
  hasOptionalStrings(value, ['userPrincipalName', 'scope', 'scopeType', 'lastLogonDate', 'mfaStatus']);
118
170
  const isGovernance = (value) => isRecord(value) &&
119
171
  isOptionalString(value.generatedAt) &&
@@ -142,13 +194,61 @@ const isCommitments = (value) => {
142
194
  return false;
143
195
  }
144
196
  if (value.inventorySummary.totalCount !== value.inventory.totalCount ||
145
- countTotal(value.inventorySummary.statusCounts) !== value.inventorySummary.totalCount) {
197
+ countTotal(value.inventorySummary.statusCounts) !== value.inventorySummary.totalCount ||
198
+ (value.inventorySummary.benefitTypeCounts !== undefined &&
199
+ (!isCountRecord(value.inventorySummary.benefitTypeCounts) ||
200
+ countTotal(value.inventorySummary.benefitTypeCounts) !== value.inventorySummary.totalCount))) {
146
201
  return false;
147
202
  }
148
203
  if (value.resourceCoverage !== undefined && !isProjectionRows(value.resourceCoverage))
149
204
  return false;
205
+ if (value.freshness !== undefined && !isReportCommitmentsFreshness(value.freshness))
206
+ return false;
150
207
  return ['coverage', 'obsoleteCandidates', 'reallocationOpportunities', 'purchaseRecommendations', 'renewals'].every(key => isProjectionRows(value[key]));
151
208
  };
209
+ /** Status and generatedAt appear together; without them the projection carries no entries. Older packs omit entries. */
210
+ const isReportCommitmentsFreshness = (value) => isRecord(value) &&
211
+ (value.status === undefined) === (value.generatedAt === undefined) &&
212
+ (value.status === undefined || (isCommitmentsFreshnessStatus(value.status) && isDateTime(value.generatedAt))) &&
213
+ (value.entries === undefined ||
214
+ (Array.isArray(value.entries) &&
215
+ value.entries.length <= REPORT_EVIDENCE_LIMITS.commitmentsFreshnessEntries &&
216
+ (value.status !== undefined || value.entries.length === 0) &&
217
+ value.entries.every(isCommitmentsFreshnessEntry))) &&
218
+ (value.warnings === undefined || (isStringArray(value.warnings) && value.warnings.length <= REPORT_EVIDENCE_LIMITS.commitmentsFreshnessWarnings));
219
+ const isDataProtectionCostSummary = (value) => isRecord(value) &&
220
+ hasOptionalStrings(value, ['currencyCode', 'currencySymbol']) &&
221
+ (value.billingWindow === undefined || isRecord(value.billingWindow)) &&
222
+ (value.totals === undefined ||
223
+ (isRecord(value.totals) &&
224
+ hasOptionalNumbers(value.totals, [
225
+ 'actualCostLast30Days',
226
+ 'actualAmortizedCostLast30Days',
227
+ 'allocatedCostLast30Days',
228
+ 'estimatedMonthlyCostForUnprotected',
229
+ ])));
230
+ const isResourceHealthEvent = (value) => isRecord(value) &&
231
+ hasOptionalStrings(value, [
232
+ 'id',
233
+ 'trackingId',
234
+ 'eventType',
235
+ 'status',
236
+ 'level',
237
+ 'title',
238
+ 'summary',
239
+ 'impactStartTime',
240
+ 'impactMitigationTime',
241
+ 'lastUpdateTime',
242
+ ]) &&
243
+ isOptionalFiniteNumber(value.priority) &&
244
+ (value.durationSeconds === undefined || (isFiniteNumber(value.durationSeconds) && value.durationSeconds >= 0)) &&
245
+ (value.impactedResourceCount === undefined || isCount(value.impactedResourceCount)) &&
246
+ (value.impactedServices === undefined || isStringArray(value.impactedServices)) &&
247
+ (value.impactedRegions === undefined || isStringArray(value.impactedRegions));
248
+ const isCommitmentUtilization = (value) => isRecord(value) &&
249
+ (value.sevenDay !== undefined || value.thirtyDay !== undefined) &&
250
+ ['sevenDay', 'thirtyDay'].every(key => value[key] === undefined || (isFiniteNumber(value[key]) && value[key] >= 0)) &&
251
+ (value.source === undefined || ['aggregate', 'usage', 'reservation-summary'].includes(value.source));
152
252
  function isCommitmentInventoryRow(value) {
153
253
  return (isRecord(value) &&
154
254
  hasOptionalStrings(value, [
@@ -165,6 +265,7 @@ function isCommitmentInventoryRow(value) {
165
265
  ]) &&
166
266
  hasOptionalNumbers(value, ['daysToExpiry', 'reservedQuantity']) &&
167
267
  isOptionalBoolean(value.renew) &&
268
+ (value.utilization === undefined || isCommitmentUtilization(value.utilization)) &&
168
269
  (value.annualCommittedCost === undefined || isRecord(value.annualCommittedCost)) &&
169
270
  (value.doNotRenewAnnualImpact === undefined || isRecord(value.doNotRenewAnnualImpact)));
170
271
  }
@@ -175,6 +276,13 @@ const isReportingProjection = (value) => {
175
276
  return false;
176
277
  if (value.spend !== undefined && !isReportSpendProjection(value.spend))
177
278
  return false;
279
+ if (value.stories !== undefined && !isReportingStories(value.stories))
280
+ return false;
281
+ if (value.costChangePeriods !== undefined &&
282
+ (!isBoundedRows(value.costChangePeriods, REPORT_EVIDENCE_LIMITS.costChangePeriods, isCostChangePeriod) ||
283
+ new Set(value.costChangePeriods.rows.map(period => period.period)).size !== value.costChangePeriods.rows.length)) {
284
+ return false;
285
+ }
178
286
  const subscription = isRecord(value.dashboard.subscription) ? value.dashboard.subscription : undefined;
179
287
  const properties = subscription && isRecord(subscription.properties) ? subscription.properties : undefined;
180
288
  if (properties?.secureScoreEvidence !== undefined && !isReportSecureScoreEvidence(properties.secureScoreEvidence))
@@ -186,6 +294,11 @@ const isReportingProjection = (value) => {
186
294
  (!isBoundedRows(value.recommendationCatalogue, REPORT_EVIDENCE_LIMITS.recommendationCatalogue, isCompactRecommendation) ||
187
295
  value.recommendationCatalogue.totalCount !== value.recommendationPortfolio.activeRecommendationCount)) ||
188
296
  !isProjectionRows(value.serviceRetirements) ||
297
+ (value.credentialDeadlines !== undefined &&
298
+ (!isRecord(value.credentialDeadlines) ||
299
+ !isDateTime(value.credentialDeadlines.asOf) ||
300
+ !isCount(value.credentialDeadlines.overdueCount) ||
301
+ !isCount(value.credentialDeadlines.upcomingSixMonthsCount))) ||
189
302
  !isInventory(value.inventory) ||
190
303
  !isGovernance(value.governance) ||
191
304
  !isCommitments(value.commitmentsPlanning)) {
@@ -205,13 +318,14 @@ const isReportingProjection = (value) => {
205
318
  return (isRecord(patch) &&
206
319
  isProjectionRows(patch.machines) &&
207
320
  isRecord(protection) &&
321
+ (protection.costSummary === undefined || isDataProtectionCostSummary(protection.costSummary)) &&
208
322
  isProjectionRows(protection.items) &&
209
323
  isProjectionRows(protection.issues) &&
210
324
  isRecord(health) &&
211
- (health.eventCatalogue === undefined || isBoundedRows(health.eventCatalogue, REPORT_EVIDENCE_LIMITS.healthCatalogue, isRecord)) &&
325
+ (health.eventCatalogue === undefined || isBoundedRows(health.eventCatalogue, REPORT_EVIDENCE_LIMITS.healthCatalogue, isResourceHealthEvent)) &&
212
326
  (health.availabilityCatalogue === undefined || isBoundedRows(health.availabilityCatalogue, REPORT_EVIDENCE_LIMITS.healthCatalogue, isRecord)) &&
213
327
  isRecord(health.events) &&
214
- isProjectionRows(health.events.events) &&
328
+ isBoundedRows(health.events.events, REPORT_EVIDENCE_LIMITS.detailRows, isResourceHealthEvent) &&
215
329
  (health.eventCatalogue === undefined || health.eventCatalogue.totalCount === health.events.events.totalCount) &&
216
330
  isRecord(health.availabilityStatuses) &&
217
331
  isProjectionRows(health.availabilityStatuses.statuses) &&
@@ -229,10 +343,13 @@ const isReportingProjection = (value) => {
229
343
  (isBoundedRows(activity.dailySummary, REPORT_EVIDENCE_LIMITS.activityDays, isActivityDailySummary) &&
230
344
  new Set(activity.dailySummary.rows.map(row => row.date)).size === activity.dailySummary.rows.length)) &&
231
345
  (activity.undatedSummary === undefined || isActivityCounts(activity.undatedSummary)) &&
346
+ isActivityMonthEvidence(activity.verifiedMonths, activity.monthCoverage) &&
232
347
  ['changes', 'security', 'health', 'suppressed'].every(key => isProjectionRows(activity[key])));
233
348
  };
234
349
  const isActivityCounts = (value) => isRecord(value) &&
235
350
  ['visibleEvents', 'materialChanges', 'securitySensitive', 'healthEvents', 'failedEvents', 'highFindingCount'].every(key => isCount(value[key])) &&
351
+ (value.automatedSnapshotEvents === undefined ||
352
+ (isCount(value.automatedSnapshotEvents) && value.automatedSnapshotEvents <= value.materialChanges)) &&
236
353
  ['materialChanges', 'securitySensitive', 'healthEvents', 'failedEvents'].every(key => value[key] <= value.visibleEvents);
237
354
  const isActivityMonthlyFindings = (value) => isRecord(value) &&
238
355
  isString(value.month) &&
@@ -245,6 +362,64 @@ const isActivityMonthlyFindings = (value) => isRecord(value) &&
245
362
  ((typeof row.importance === 'string' && row.importance.toLowerCase() === 'high') ||
246
363
  row.isSecuritySensitive === true ||
247
364
  (typeof row.status === 'string' && row.status.toLowerCase() === 'failed')));
365
+ const MONTH_PATTERN = /^\d{4}-(0[1-9]|1[0-2])$/;
366
+ const DATE_PATTERN = /^\d{4}-\d{2}-\d{2}$/;
367
+ const DAY_MS = 86400000;
368
+ const daysInMonth = (month) => new Date(Date.UTC(Number(month.slice(0, 4)), Number(month.slice(5, 7)), 0)).getUTCDate();
369
+ const isCalendarDateInMonth = (value, month) => typeof value === 'string' &&
370
+ DATE_PATTERN.test(value) &&
371
+ value.slice(0, 7) === month &&
372
+ Number.isFinite(Date.parse(value)) &&
373
+ new Date(value).toISOString().slice(0, 10) === value;
374
+ const isActivityMonthCoverage = (value) => {
375
+ if (!isRecord(value) ||
376
+ typeof value.month !== 'string' ||
377
+ !MONTH_PATTERN.test(value.month) ||
378
+ !['complete', 'partial', 'unavailable'].includes(value.status) ||
379
+ !['monthly-archive', 'rolling-feed'].includes(value.source) ||
380
+ !isCount(value.coveredDayCount) ||
381
+ !isCount(value.expectedDayCount) ||
382
+ value.expectedDayCount !== daysInMonth(value.month) ||
383
+ value.coveredDayCount > value.expectedDayCount) {
384
+ return false;
385
+ }
386
+ const covered = value.coveredDayCount;
387
+ const statusMatches = value.status === 'complete'
388
+ ? covered === value.expectedDayCount
389
+ : value.status === 'unavailable'
390
+ ? covered === 0
391
+ : covered > 0 && covered < value.expectedDayCount;
392
+ if (!statusMatches)
393
+ return false;
394
+ if (value.coveredFrom === undefined && value.coveredTo === undefined)
395
+ return true;
396
+ return (covered > 0 &&
397
+ isCalendarDateInMonth(value.coveredFrom, value.month) &&
398
+ isCalendarDateInMonth(value.coveredTo, value.month) &&
399
+ value.coveredFrom <= value.coveredTo &&
400
+ (Date.parse(value.coveredTo) - Date.parse(value.coveredFrom)) / DAY_MS + 1 >= covered);
401
+ };
402
+ /** Verified months are unique YYYY-MM values; any verified month listed in coverage is complete, and untruncated coverage lists every verified month. */
403
+ const isActivityMonthEvidence = (verifiedMonths, monthCoverage) => {
404
+ if (verifiedMonths !== undefined &&
405
+ (!Array.isArray(verifiedMonths) ||
406
+ verifiedMonths.length > REPORT_EVIDENCE_LIMITS.activityMonths ||
407
+ !verifiedMonths.every(month => typeof month === 'string' && MONTH_PATTERN.test(month)) ||
408
+ new Set(verifiedMonths).size !== verifiedMonths.length)) {
409
+ return false;
410
+ }
411
+ if (monthCoverage === undefined)
412
+ return true;
413
+ if (!isBoundedRows(monthCoverage, REPORT_EVIDENCE_LIMITS.activityMonths, isActivityMonthCoverage) ||
414
+ new Set(monthCoverage.rows.map(row => row.month)).size !== monthCoverage.rows.length) {
415
+ return false;
416
+ }
417
+ const coverageByMonth = new Map(monthCoverage.rows.map(row => [row.month, row.status]));
418
+ return (verifiedMonths ?? []).every(month => {
419
+ const status = coverageByMonth.get(month);
420
+ return status === undefined ? monthCoverage.omittedCount > 0 : status === 'complete';
421
+ });
422
+ };
248
423
  const isActivityDailySummary = (value) => isActivityCounts(value) &&
249
424
  isRecord(value) &&
250
425
  isString(value.date) &&
@@ -324,6 +499,12 @@ const isHistoryMetrics = (value) => isRecord(value) &&
324
499
  value.securityRecommendationCount <= value.recommendationCount &&
325
500
  value.securityImpactedResourceCount <= value.impactedResourceCount &&
326
501
  isOptionalFiniteNumber(value.maximumMonthlySavings);
502
+ const isUniqueIdentityRows = (value, itemValidator = isString) => isBoundedRows(value, REPORT_EVIDENCE_LIMITS.historyComparisonIdentities, itemValidator) &&
503
+ new Set(value.rows).size === value.rows.length;
504
+ const isHistoryComparisonIdentities = (value) => isRecord(value) &&
505
+ isUniqueIdentityRows(value.costRecommendationIds) &&
506
+ isUniqueIdentityRows(value.undersizedResourceIds) &&
507
+ isUniqueIdentityRows(value.regulatoryAssessmentKeys, (item) => isString(item) && /^[a-f0-9]{64}$/u.test(item));
327
508
  export const isSubscriptionReportHistory = (value) => {
328
509
  if (!isRecord(value) ||
329
510
  !isString(value.subscriptionId) ||
@@ -343,7 +524,9 @@ export const isSubscriptionReportHistory = (value) => {
343
524
  !isString(period.sourceRunId) ||
344
525
  !isDateTime(period.sourceGeneratedAt) ||
345
526
  !isHistoryMetrics(period.metrics) ||
346
- !isBoundedRows(period.recommendations, REPORT_EVIDENCE_LIMITS.historyRecommendations, isRecommendationFingerprint)) {
527
+ !isBoundedRows(period.recommendations, REPORT_EVIDENCE_LIMITS.historyRecommendations, isRecommendationFingerprint) ||
528
+ (period.comparisonIdentities !== undefined && !isHistoryComparisonIdentities(period.comparisonIdentities)) ||
529
+ (period.stories !== undefined && !isStoryFingerprintRows(period.stories))) {
347
530
  return false;
348
531
  }
349
532
  if (period.recommendations.omittedCount === 0 &&
@@ -383,6 +566,7 @@ const isTenantCoverage = (value) => isRecord(value) &&
383
566
  (section.requiredPermissions === undefined || isStringArray(section.requiredPermissions)) &&
384
567
  (!Array.isArray(section.requiredPermissions) || section.requiredPermissions.length <= 10) &&
385
568
  isOptionalFiniteNumber(section.maximumSourceLagHours));
569
+ const isTenantSignInCoverage = (value) => isRecord(value) && ['complete', 'partial', 'unavailable', 'skipped'].includes(value.state);
386
570
  const isTenantPrincipal = (value) => isRecord(value) &&
387
571
  isString(value.principalId) &&
388
572
  isString(value.principalType) &&
@@ -392,7 +576,11 @@ const isTenantPrincipal = (value) => isRecord(value) &&
392
576
  typeof value.isPimBacked === 'boolean' &&
393
577
  isString(value.lastActivatedEvidence) &&
394
578
  hasOptionalStrings(value, ['displayName', 'userPrincipalName', 'mfaStatus', 'lastActivatedAt']) &&
395
- isOptionalBoolean(value.accountEnabled);
579
+ isOptionalBoolean(value.accountEnabled) &&
580
+ ((value.lastSignInAt === undefined && value.lastSignInEvidence === undefined) ||
581
+ (value.lastSignInAt === undefined && value.lastSignInEvidence === 'unavailable') ||
582
+ (isDateTime(value.lastSignInAt) &&
583
+ (value.lastSignInEvidence === 'last-successful-sign-in' || value.lastSignInEvidence === 'last-interactive-sign-in')));
396
584
  export const isTenantReportEvidencePack = (value) => {
397
585
  if (!isRecord(value) ||
398
586
  !isDateTime(value.generatedAt) ||
@@ -409,5 +597,13 @@ export const isTenantReportEvidencePack = (value) => {
409
597
  !isBoundedRows(value.globalAdmins.principals, REPORT_EVIDENCE_LIMITS.tenantGlobalAdministrators, isTenantPrincipal)) {
410
598
  return false;
411
599
  }
600
+ const signInCoverage = value.globalAdmins.coverage.userSignInActivity;
601
+ if (signInCoverage !== undefined && !isTenantSignInCoverage(signInCoverage))
602
+ return false;
603
+ if (isRecord(signInCoverage) &&
604
+ (signInCoverage.state === 'unavailable' || signInCoverage.state === 'skipped') &&
605
+ value.globalAdmins.principals.rows.some(principal => principal.lastSignInAt !== undefined)) {
606
+ return false;
607
+ }
412
608
  return true;
413
609
  };
@@ -1,22 +1,6 @@
1
1
  import { REPORT_EVIDENCE_LIMITS } from './reportEvidence.js';
2
- export const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
3
- export const isString = (value) => typeof value === 'string' && value.trim().length > 0;
4
- export const isOptionalString = (value) => value === undefined || isString(value);
5
- export const isFiniteNumber = (value) => typeof value === 'number' && Number.isFinite(value);
6
- export const isOptionalFiniteNumber = (value) => value === undefined || isFiniteNumber(value);
7
- export const isOptionalBoolean = (value) => value === undefined || typeof value === 'boolean';
8
- export const isCount = (value) => isFiniteNumber(value) && Number.isInteger(value) && value >= 0;
9
- export const isDateTime = (value) => isString(value) && Number.isFinite(Date.parse(value));
10
- export const isStringArray = (value) => Array.isArray(value) && value.every(isString);
11
- export const isCountRecord = (value) => isRecord(value) && Object.values(value).every(isCount);
12
- export const countTotal = (value) => Object.values(value).reduce((total, count) => total + count, 0);
13
- export const hasOptionalStrings = (value, keys) => keys.every(key => isOptionalString(value[key]));
14
- export const hasOptionalNumbers = (value, keys) => keys.every(key => isOptionalFiniteNumber(value[key]));
15
- export const isBoundedRows = (value, limit, isRow) => {
16
- if (!isRecord(value) || !isCount(value.totalCount) || !isCount(value.omittedCount) || !Array.isArray(value.rows))
17
- return false;
18
- return value.rows.length <= limit && value.rows.every(isRow) && value.totalCount === value.rows.length + value.omittedCount;
19
- };
2
+ import { isBoundedRows, isCount, isCountRecord, isFiniteNumber, isOptionalFiniteNumber, isOptionalString, isRecord, isString, isStringArray, hasOptionalNumbers, hasOptionalStrings, } from '../common/validationHelpers.js';
3
+ export { isRecord, isString, isOptionalString, isFiniteNumber, isOptionalFiniteNumber, isOptionalBoolean, isCount, isDateTime, isStringArray, isCountRecord, countTotal, hasOptionalStrings, hasOptionalNumbers, isBoundedRows, } from '../common/validationHelpers.js';
20
4
  export const isProjectionRows = (value, limit = REPORT_EVIDENCE_LIMITS.detailRows) => isBoundedRows(value, limit, isRecord);
21
5
  export const hasRequiredRecords = (value, keys) => keys.every(key => isRecord(value[key]));
22
6
  export const isSourceFileStatus = (value) => isRecord(value) &&
@@ -52,12 +36,16 @@ export const isResourceSummary = (value) => isRecord(value) &&
52
36
  Array.isArray(value.topSpendResources) &&
53
37
  value.topSpendResources.length <= REPORT_EVIDENCE_LIMITS.summaryRows &&
54
38
  value.topSpendResources.every(isTopSpendResource);
39
+ const isReportBudgetProjection = (value) => isRecord(value) &&
40
+ hasOptionalStrings(value, ['name', 'startDate', 'endDate', 'timeGrain', 'category', 'currencyCode']) &&
41
+ hasOptionalNumbers(value, ['amount', 'currentSpend', 'forecastedSpend']) &&
42
+ (value.filter === undefined || isRecord(value.filter));
55
43
  export const isCostSummary = (value) => {
56
44
  if (!isRecord(value) || !isRecord(value.sourceMetadata) || !Array.isArray(value.topSpendResources))
57
45
  return false;
58
46
  if (!hasOptionalStrings(value, ['currency', 'currencySymbol']) ||
59
47
  !hasOptionalNumbers(value, ['spend30Days', 'spend30DaysAmortized', 'totalRetailCost', 'miscCost', 'rollingCostRecordCount']) ||
60
- (value.budget !== undefined && !isRecord(value.budget)) ||
48
+ (value.budget !== undefined && !isReportBudgetProjection(value.budget)) ||
61
49
  !isString(value.sourceMetadata.spend30DaysSource) ||
62
50
  !isString(value.sourceMetadata.spend30DaysAmortizedSource) ||
63
51
  !isString(value.sourceMetadata.totalRetailCostSource) ||
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Resilience facts: the small per-resource property reads the resilience story needs that no other collection
3
+ * carries — storage blob-service data-protection settings and lifecycle management, Azure SQL database backup
4
+ * retention and failover groups. Collected in the reliability component beside the data-protection posture and
5
+ * published as `azure-portal/subscriptions/{id}/resilience-facts.json`. Consumed by the cloud-engine
6
+ * `ProtectionProfileBuilder` (`data-protection:<selector>` capability sources) and available to the resilience story page.
7
+ *
8
+ * Spec: `Specs/reporting/utilization-stories-types-package.md` (parent: core `specs/reporting/utilization-stories.md`).
9
+ * Additive: consumers tolerate unknown fields. Field semantics: `undefined` = not read (the request failed, was not
10
+ * applicable or was skipped) and resolves to an `unknown` capability; `null` = read and absent/disabled. A failed
11
+ * read must never be presented as "disabled".
12
+ */
13
+ export const RESILIENCE_FACTS_SCHEMA_VERSION = 1;
14
+ export const RESILIENCE_FACTS_SOURCE = 'AzureResilienceFacts';
15
+ export const RESILIENCE_FACTS_PORTAL_FILE = 'resilience-facts.json';
16
+ export const RESILIENCE_FACTS_RAW_FILE = 'data-protection/resilience-facts.json.gz';
@@ -0,0 +1,64 @@
1
+ import { isCount, isDateTime, isFiniteNumber, isRecord, isString, isStringArray } from '../common/validationHelpers.js';
2
+ import { RESILIENCE_FACTS_SCHEMA_VERSION, RESILIENCE_FACTS_SOURCE, } from './resilienceFacts.js';
3
+ const STATUSES = new Set(['collected', 'partial', 'failed', 'not-applicable']);
4
+ const isNullableBoolean = (value) => value === null || typeof value === 'boolean';
5
+ const isNullableNumber = (value) => value === null || isFiniteNumber(value);
6
+ const isOptionalNullableNumber = (value) => value === undefined || isNullableNumber(value);
7
+ const isOptionalNullableString = (value) => value === undefined || value === null || isString(value);
8
+ const isRetention = (value) => value === undefined || value === null || (isRecord(value) && typeof value.enabled === 'boolean' && isOptionalNullableNumber(value.days));
9
+ const isOptionalNullableBoolean = (value) => value === undefined || isNullableBoolean(value);
10
+ const isStorageFacts = (value) => isRecord(value) &&
11
+ isRetention(value.blobSoftDelete) &&
12
+ isRetention(value.containerSoftDelete) &&
13
+ isOptionalNullableBoolean(value.versioning) &&
14
+ isRetention(value.changeFeed) &&
15
+ isRetention(value.pointInTimeRestore) &&
16
+ isOptionalNullableString(value.kind) &&
17
+ (value.managementPolicy === undefined ||
18
+ value.managementPolicy === null ||
19
+ (isRecord(value.managementPolicy) &&
20
+ typeof value.managementPolicy.present === 'boolean' &&
21
+ (value.managementPolicy.ruleCount === undefined || isCount(value.managementPolicy.ruleCount))));
22
+ const isSqlFacts = (value) => isRecord(value) &&
23
+ isOptionalNullableNumber(value.shortTermRetentionDays) &&
24
+ isOptionalNullableNumber(value.diffBackupIntervalHours) &&
25
+ (value.longTermRetention === undefined ||
26
+ value.longTermRetention === null ||
27
+ (isRecord(value.longTermRetention) &&
28
+ typeof value.longTermRetention.enabled === 'boolean' &&
29
+ isOptionalNullableString(value.longTermRetention.weekly) &&
30
+ isOptionalNullableString(value.longTermRetention.monthly) &&
31
+ isOptionalNullableString(value.longTermRetention.yearly) &&
32
+ isOptionalNullableNumber(value.longTermRetention.weekOfYear))) &&
33
+ (value.failoverGroup === undefined ||
34
+ value.failoverGroup === null ||
35
+ (isRecord(value.failoverGroup) &&
36
+ isString(value.failoverGroup.id) &&
37
+ isString(value.failoverGroup.name) &&
38
+ isStringArray(value.failoverGroup.partnerServers) &&
39
+ isOptionalNullableString(value.failoverGroup.readWriteFailoverPolicy) &&
40
+ isOptionalNullableString(value.failoverGroup.role))) &&
41
+ isOptionalNullableString(value.backupStorageRedundancy);
42
+ export const isResilienceFactsItem = (value) => isRecord(value) &&
43
+ isString(value.resourceId) &&
44
+ isString(value.resourceType) &&
45
+ isString(value.status) &&
46
+ STATUSES.has(value.status) &&
47
+ isDateTime(value.observedAt) &&
48
+ isCount(value.requestCount) &&
49
+ (value.errors === undefined || isStringArray(value.errors)) &&
50
+ (value.storage === undefined || isStorageFacts(value.storage)) &&
51
+ (value.sql === undefined || isSqlFacts(value.sql));
52
+ export const isResilienceFactsProjection = (value) => isRecord(value) &&
53
+ value.schemaVersion === RESILIENCE_FACTS_SCHEMA_VERSION &&
54
+ value.source === RESILIENCE_FACTS_SOURCE &&
55
+ isString(value.subscriptionId) &&
56
+ (value.tenantId === undefined || isString(value.tenantId)) &&
57
+ isDateTime(value.generatedAt) &&
58
+ isRecord(value.summary) &&
59
+ (value.summary.notApplicable === undefined || isCount(value.summary.notApplicable)) &&
60
+ ['storageAccounts', 'sqlDatabases', 'sqlServers', 'collected', 'partial', 'failed', 'requestCount'].every(key => isCount(value.summary[key])) &&
61
+ Array.isArray(value.items) &&
62
+ value.items.every(isResilienceFactsItem) &&
63
+ Array.isArray(value.issues) &&
64
+ value.issues.every(issue => isRecord(issue) && (issue.severity === 'warning' || issue.severity === 'error') && isString(issue.code) && isString(issue.message));
@@ -4,6 +4,9 @@ export * from './pagination.js';
4
4
  export * from './provider.js';
5
5
  export * from './providerSyncProgress.js';
6
6
  export * from './relationships.js';
7
+ export * from './resourceGraph.js';
8
+ export * from './resourceGraphValidation.js';
9
+ export * from './resourceIdentity.js';
7
10
  export * from './syncProgress.js';
8
11
  export * from './sha256.js';
9
12
  export * from './exactDecimal.js';
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Provider-neutral resource relationship graph published for one provider
3
+ * account. Families, relationship types, and synthetic types are open
4
+ * identifiers: a new provider service needs no package change.
5
+ */
6
+ export const RESOURCE_GRAPH_SCHEMA_VERSION = 1;
7
+ /** Package-owned logical artifact name; storage paths remain producer-owned. */
8
+ export const RESOURCE_GRAPH_LOGICAL_NAME = 'relationships.json.gz';
9
+ export const RESOURCE_GRAPH_NODE_KINDS = ['scope', 'region', 'zone', 'group', 'resource', 'synthetic'];
10
+ export const RESOURCE_GRAPH_NODE_ROLES = ['network-baseline', 'topology', 'workload'];
11
+ export const RESOURCE_GRAPH_EDGE_KINDS = ['contains', 'depends_on'];
12
+ export const RESOURCE_GRAPH_EDGE_CONFIDENCES = ['high', 'medium', 'low'];
13
+ export const RESOURCE_GRAPH_EVIDENCE_METHODS = ['field-derived', 'field-reference', 'persisted-inventory', 'request-scope'];