@spottoai/types-package 1.0.2-beta.30 → 1.0.2-beta.301

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 (325) hide show
  1. package/LICENSE +18 -40
  2. package/README.md +4 -13
  3. package/dist/accounts/accounts.d.ts +450 -3
  4. package/dist/accounts/accounts.d.ts.map +1 -1
  5. package/dist/accounts/accounts.js +123 -0
  6. package/dist/accounts/accounts.js.map +1 -1
  7. package/dist/accounts/azureSpSetup.d.ts +297 -0
  8. package/dist/accounts/azureSpSetup.d.ts.map +1 -0
  9. package/dist/accounts/azureSpSetup.js +3 -0
  10. package/dist/accounts/azureSpSetup.js.map +1 -0
  11. package/dist/accounts/index.d.ts +3 -0
  12. package/dist/accounts/index.d.ts.map +1 -1
  13. package/dist/accounts/index.js +3 -0
  14. package/dist/accounts/index.js.map +1 -1
  15. package/dist/accounts/readPermissions.d.ts +76 -0
  16. package/dist/accounts/readPermissions.d.ts.map +1 -0
  17. package/dist/accounts/readPermissions.js +202 -0
  18. package/dist/accounts/readPermissions.js.map +1 -0
  19. package/dist/accounts/validation.d.ts +91 -0
  20. package/dist/accounts/validation.d.ts.map +1 -0
  21. package/dist/accounts/validation.js +3 -0
  22. package/dist/accounts/validation.js.map +1 -0
  23. package/dist/accounts/writePermissions.d.ts +34 -0
  24. package/dist/accounts/writePermissions.d.ts.map +1 -0
  25. package/dist/accounts/writePermissions.js +37 -0
  26. package/dist/accounts/writePermissions.js.map +1 -0
  27. package/dist/ai/index.d.ts +1002 -9
  28. package/dist/ai/index.d.ts.map +1 -1
  29. package/dist/ai/index.js +1 -1
  30. package/dist/ai/index.js.map +1 -1
  31. package/dist/assessments/artifact.d.ts +84 -0
  32. package/dist/assessments/artifact.d.ts.map +1 -0
  33. package/dist/assessments/artifact.js +3 -0
  34. package/dist/assessments/artifact.js.map +1 -0
  35. package/dist/assessments/catalogue.d.ts +53 -0
  36. package/dist/assessments/catalogue.d.ts.map +1 -0
  37. package/dist/assessments/catalogue.js +16 -0
  38. package/dist/assessments/catalogue.js.map +1 -0
  39. package/dist/assessments/common.d.ts +27 -0
  40. package/dist/assessments/common.d.ts.map +1 -0
  41. package/dist/assessments/common.js +3 -0
  42. package/dist/assessments/common.js.map +1 -0
  43. package/dist/assessments/evidence.d.ts +78 -0
  44. package/dist/assessments/evidence.d.ts.map +1 -0
  45. package/dist/assessments/evidence.js +3 -0
  46. package/dist/assessments/evidence.js.map +1 -0
  47. package/dist/assessments/export.d.ts +27 -0
  48. package/dist/assessments/export.d.ts.map +1 -0
  49. package/dist/assessments/export.js +3 -0
  50. package/dist/assessments/export.js.map +1 -0
  51. package/dist/assessments/index.d.ts +11 -0
  52. package/dist/assessments/index.d.ts.map +1 -0
  53. package/dist/assessments/index.js +27 -0
  54. package/dist/assessments/index.js.map +1 -0
  55. package/dist/assessments/queue.d.ts +20 -0
  56. package/dist/assessments/queue.d.ts.map +1 -0
  57. package/dist/assessments/queue.js +6 -0
  58. package/dist/assessments/queue.js.map +1 -0
  59. package/dist/assessments/review.d.ts +36 -0
  60. package/dist/assessments/review.d.ts.map +1 -0
  61. package/dist/assessments/review.js +3 -0
  62. package/dist/assessments/review.js.map +1 -0
  63. package/dist/assessments/run.d.ts +62 -0
  64. package/dist/assessments/run.d.ts.map +1 -0
  65. package/dist/assessments/run.js +3 -0
  66. package/dist/assessments/run.js.map +1 -0
  67. package/dist/assessments/sow.d.ts +30 -0
  68. package/dist/assessments/sow.d.ts.map +1 -0
  69. package/dist/assessments/sow.js +3 -0
  70. package/dist/assessments/sow.js.map +1 -0
  71. package/dist/assessments/status.d.ts +27 -0
  72. package/dist/assessments/status.d.ts.map +1 -0
  73. package/dist/assessments/status.js +27 -0
  74. package/dist/assessments/status.js.map +1 -0
  75. package/dist/azure/activityLogs.d.ts +65 -0
  76. package/dist/azure/activityLogs.d.ts.map +1 -0
  77. package/dist/azure/activityLogs.js +6 -0
  78. package/dist/azure/activityLogs.js.map +1 -0
  79. package/dist/azure/advisorScore.d.ts +39 -0
  80. package/dist/azure/advisorScore.d.ts.map +1 -0
  81. package/dist/azure/advisorScore.js +3 -0
  82. package/dist/azure/advisorScore.js.map +1 -0
  83. package/dist/azure/benefits.d.ts +161 -0
  84. package/dist/azure/benefits.d.ts.map +1 -0
  85. package/dist/azure/benefits.js +3 -0
  86. package/dist/azure/benefits.js.map +1 -0
  87. package/dist/azure/billingPlots.d.ts +249 -0
  88. package/dist/azure/billingPlots.d.ts.map +1 -0
  89. package/dist/azure/billingPlots.js +6 -0
  90. package/dist/azure/billingPlots.js.map +1 -0
  91. package/dist/azure/budgets.d.ts +4 -0
  92. package/dist/azure/budgets.d.ts.map +1 -1
  93. package/dist/azure/commitmentsPlanning.d.ts +590 -0
  94. package/dist/azure/commitmentsPlanning.d.ts.map +1 -0
  95. package/dist/azure/commitmentsPlanning.js +3 -0
  96. package/dist/azure/commitmentsPlanning.js.map +1 -0
  97. package/dist/azure/common.d.ts +44 -0
  98. package/dist/azure/common.d.ts.map +1 -1
  99. package/dist/azure/configs.d.ts +75 -2
  100. package/dist/azure/configs.d.ts.map +1 -1
  101. package/dist/azure/costEstimation.d.ts +78 -0
  102. package/dist/azure/costEstimation.d.ts.map +1 -0
  103. package/dist/azure/costEstimation.js +3 -0
  104. package/dist/azure/costEstimation.js.map +1 -0
  105. package/dist/azure/dataProtection.d.ts +229 -0
  106. package/dist/azure/dataProtection.d.ts.map +1 -0
  107. package/dist/azure/dataProtection.js +9 -0
  108. package/dist/azure/dataProtection.js.map +1 -0
  109. package/dist/azure/governance.d.ts +942 -0
  110. package/dist/azure/governance.d.ts.map +1 -0
  111. package/dist/azure/governance.js +18 -0
  112. package/dist/azure/governance.js.map +1 -0
  113. package/dist/azure/licensing.d.ts +370 -0
  114. package/dist/azure/licensing.d.ts.map +1 -0
  115. package/dist/azure/licensing.js +3 -0
  116. package/dist/azure/licensing.js.map +1 -0
  117. package/dist/azure/metrics.d.ts +81 -4
  118. package/dist/azure/metrics.d.ts.map +1 -1
  119. package/dist/azure/payloads.d.ts +293 -1
  120. package/dist/azure/payloads.d.ts.map +1 -1
  121. package/dist/azure/portalArtifacts.d.ts +16 -0
  122. package/dist/azure/portalArtifacts.d.ts.map +1 -0
  123. package/dist/azure/portalArtifacts.js +5 -0
  124. package/dist/azure/portalArtifacts.js.map +1 -0
  125. package/dist/azure/prices.d.ts +230 -0
  126. package/dist/azure/prices.d.ts.map +1 -1
  127. package/dist/azure/publicIpAddresses.d.ts +171 -0
  128. package/dist/azure/publicIpAddresses.d.ts.map +1 -0
  129. package/dist/azure/publicIpAddresses.js +6 -0
  130. package/dist/azure/publicIpAddresses.js.map +1 -0
  131. package/dist/azure/recommendationAudit.d.ts +113 -0
  132. package/dist/azure/recommendationAudit.d.ts.map +1 -0
  133. package/dist/azure/recommendationAudit.js +10 -0
  134. package/dist/azure/recommendationAudit.js.map +1 -0
  135. package/dist/azure/recommendationState.d.ts +93 -4
  136. package/dist/azure/recommendationState.d.ts.map +1 -1
  137. package/dist/azure/recommendationWorkflow.d.ts +124 -0
  138. package/dist/azure/recommendationWorkflow.d.ts.map +1 -0
  139. package/dist/azure/recommendationWorkflow.js +15 -0
  140. package/dist/azure/recommendationWorkflow.js.map +1 -0
  141. package/dist/azure/recommendations.d.ts +548 -7
  142. package/dist/azure/recommendations.d.ts.map +1 -1
  143. package/dist/azure/recommendations.js.map +1 -1
  144. package/dist/azure/relationships.d.ts +193 -0
  145. package/dist/azure/relationships.d.ts.map +1 -0
  146. package/dist/azure/relationships.js +6 -0
  147. package/dist/azure/relationships.js.map +1 -0
  148. package/dist/azure/reportingTemplates.d.ts +70 -0
  149. package/dist/azure/reportingTemplates.d.ts.map +1 -0
  150. package/dist/azure/reportingTemplates.js +5 -0
  151. package/dist/azure/reportingTemplates.js.map +1 -0
  152. package/dist/azure/reports.d.ts +280 -2
  153. package/dist/azure/reports.d.ts.map +1 -1
  154. package/dist/azure/reports.js +13 -0
  155. package/dist/azure/reports.js.map +1 -1
  156. package/dist/azure/resourceHealth.d.ts +264 -0
  157. package/dist/azure/resourceHealth.d.ts.map +1 -0
  158. package/dist/azure/resourceHealth.js +16 -0
  159. package/dist/azure/resourceHealth.js.map +1 -0
  160. package/dist/azure/resources.d.ts +80 -0
  161. package/dist/azure/resources.d.ts.map +1 -1
  162. package/dist/azure/reviewChecklist.d.ts +139 -0
  163. package/dist/azure/reviewChecklist.d.ts.map +1 -0
  164. package/dist/azure/reviewChecklist.js +3 -0
  165. package/dist/azure/reviewChecklist.js.map +1 -0
  166. package/dist/azure/security.d.ts +11 -1
  167. package/dist/azure/security.d.ts.map +1 -1
  168. package/dist/azure/serviceRetirement.d.ts +28 -0
  169. package/dist/azure/serviceRetirement.d.ts.map +1 -0
  170. package/dist/azure/serviceRetirement.js +3 -0
  171. package/dist/azure/serviceRetirement.js.map +1 -0
  172. package/dist/azure/serviceRetirementState.d.ts +22 -0
  173. package/dist/azure/serviceRetirementState.d.ts.map +1 -0
  174. package/dist/azure/serviceRetirementState.js +3 -0
  175. package/dist/azure/serviceRetirementState.js.map +1 -0
  176. package/dist/azure/storage-inventory.d.ts +241 -0
  177. package/dist/azure/storage-inventory.d.ts.map +1 -0
  178. package/dist/azure/storage-inventory.js +3 -0
  179. package/dist/azure/storage-inventory.js.map +1 -0
  180. package/dist/azure/subscriptions.d.ts +74 -17
  181. package/dist/azure/subscriptions.d.ts.map +1 -1
  182. package/dist/azure/views.d.ts +639 -6
  183. package/dist/azure/views.d.ts.map +1 -1
  184. package/dist/common/index.d.ts +1 -0
  185. package/dist/common/index.d.ts.map +1 -1
  186. package/dist/common/index.js +1 -0
  187. package/dist/common/index.js.map +1 -1
  188. package/dist/common/pagination.d.ts +3 -0
  189. package/dist/common/pagination.d.ts.map +1 -1
  190. package/dist/common/provider.d.ts +9 -0
  191. package/dist/common/provider.d.ts.map +1 -0
  192. package/dist/common/provider.js +9 -0
  193. package/dist/common/provider.js.map +1 -0
  194. package/dist/company/billingAccount.d.ts +30 -0
  195. package/dist/company/billingAccount.d.ts.map +1 -0
  196. package/dist/company/billingAccount.js +3 -0
  197. package/dist/company/billingAccount.js.map +1 -0
  198. package/dist/company/company.d.ts +71 -1
  199. package/dist/company/company.d.ts.map +1 -1
  200. package/dist/company/companyHierarchy.d.ts +53 -0
  201. package/dist/company/companyHierarchy.d.ts.map +1 -0
  202. package/dist/company/companyHierarchy.js +3 -0
  203. package/dist/company/companyHierarchy.js.map +1 -0
  204. package/dist/company/companyNotes.d.ts +288 -0
  205. package/dist/company/companyNotes.d.ts.map +1 -0
  206. package/dist/company/companyNotes.js +42 -0
  207. package/dist/company/companyNotes.js.map +1 -0
  208. package/dist/company/index.d.ts +3 -0
  209. package/dist/company/index.d.ts.map +1 -1
  210. package/dist/company/index.js +3 -0
  211. package/dist/company/index.js.map +1 -1
  212. package/dist/company/notification.d.ts +34 -1
  213. package/dist/company/notification.d.ts.map +1 -1
  214. package/dist/company/notification.js +27 -12
  215. package/dist/company/notification.js.map +1 -1
  216. package/dist/company/survey.d.ts +3 -0
  217. package/dist/company/survey.d.ts.map +1 -1
  218. package/dist/events/alertDefinitionRun.d.ts +23 -0
  219. package/dist/events/alertDefinitionRun.d.ts.map +1 -0
  220. package/dist/events/alertDefinitionRun.js +3 -0
  221. package/dist/events/alertDefinitionRun.js.map +1 -0
  222. package/dist/events/baseAlert.d.ts +138 -0
  223. package/dist/events/baseAlert.d.ts.map +1 -0
  224. package/dist/events/baseAlert.js +3 -0
  225. package/dist/events/baseAlert.js.map +1 -0
  226. package/dist/events/cost.d.ts +371 -0
  227. package/dist/events/cost.d.ts.map +1 -0
  228. package/dist/events/cost.js +3 -0
  229. package/dist/events/cost.js.map +1 -0
  230. package/dist/events/costAnomalies.d.ts +47 -0
  231. package/dist/events/costAnomalies.d.ts.map +1 -0
  232. package/dist/events/costAnomalies.js +3 -0
  233. package/dist/events/costAnomalies.js.map +1 -0
  234. package/dist/events/costViews.d.ts +25 -0
  235. package/dist/events/costViews.d.ts.map +1 -0
  236. package/dist/events/costViews.js +3 -0
  237. package/dist/events/costViews.js.map +1 -0
  238. package/dist/events/eventStatus.d.ts +67 -0
  239. package/dist/events/eventStatus.d.ts.map +1 -0
  240. package/dist/events/eventStatus.js +3 -0
  241. package/dist/events/eventStatus.js.map +1 -0
  242. package/dist/events/index.d.ts +8 -0
  243. package/dist/events/index.d.ts.map +1 -0
  244. package/dist/events/index.js +24 -0
  245. package/dist/events/index.js.map +1 -0
  246. package/dist/events/quickAlerts.d.ts +67 -0
  247. package/dist/events/quickAlerts.d.ts.map +1 -0
  248. package/dist/events/quickAlerts.js +7 -0
  249. package/dist/events/quickAlerts.js.map +1 -0
  250. package/dist/features-and-permissions/access.d.ts +137 -0
  251. package/dist/features-and-permissions/access.d.ts.map +1 -0
  252. package/dist/features-and-permissions/access.js +3 -0
  253. package/dist/features-and-permissions/access.js.map +1 -0
  254. package/dist/features-and-permissions/index.d.ts +2 -0
  255. package/dist/features-and-permissions/index.d.ts.map +1 -0
  256. package/dist/features-and-permissions/index.js +18 -0
  257. package/dist/features-and-permissions/index.js.map +1 -0
  258. package/dist/feedbacks/feedback.d.ts +9 -0
  259. package/dist/feedbacks/feedback.d.ts.map +1 -1
  260. package/dist/identity/apikey.d.ts +84 -0
  261. package/dist/identity/apikey.d.ts.map +1 -0
  262. package/dist/identity/apikey.js +3 -0
  263. package/dist/identity/apikey.js.map +1 -0
  264. package/dist/identity/index.d.ts +2 -0
  265. package/dist/identity/index.d.ts.map +1 -0
  266. package/dist/identity/index.js +18 -0
  267. package/dist/identity/index.js.map +1 -0
  268. package/dist/index.d.ts +28 -0
  269. package/dist/index.d.ts.map +1 -1
  270. package/dist/index.js +28 -1
  271. package/dist/index.js.map +1 -1
  272. package/dist/index.vite.d.ts +48 -0
  273. package/dist/index.vite.d.ts.map +1 -0
  274. package/dist/index.vite.js +64 -0
  275. package/dist/index.vite.js.map +1 -0
  276. package/dist/integrations/autotask.d.ts +90 -0
  277. package/dist/integrations/autotask.d.ts.map +1 -0
  278. package/dist/integrations/autotask.js +3 -0
  279. package/dist/integrations/autotask.js.map +1 -0
  280. package/dist/integrations/azureDevOps.d.ts +130 -0
  281. package/dist/integrations/azureDevOps.d.ts.map +1 -0
  282. package/dist/integrations/azureDevOps.js +3 -0
  283. package/dist/integrations/azureDevOps.js.map +1 -0
  284. package/dist/integrations/github.d.ts +96 -0
  285. package/dist/integrations/github.d.ts.map +1 -0
  286. package/dist/integrations/github.js +3 -0
  287. package/dist/integrations/github.js.map +1 -0
  288. package/dist/integrations/halo.d.ts +76 -0
  289. package/dist/integrations/halo.d.ts.map +1 -0
  290. package/dist/integrations/halo.js +3 -0
  291. package/dist/integrations/halo.js.map +1 -0
  292. package/dist/integrations/index.d.ts +6 -0
  293. package/dist/integrations/index.d.ts.map +1 -0
  294. package/dist/integrations/index.js +22 -0
  295. package/dist/integrations/index.js.map +1 -0
  296. package/dist/integrations/integrationTickets.d.ts +67 -0
  297. package/dist/integrations/integrationTickets.d.ts.map +1 -0
  298. package/dist/integrations/integrationTickets.js +3 -0
  299. package/dist/integrations/integrationTickets.js.map +1 -0
  300. package/dist/scheduler/index.d.ts +2 -0
  301. package/dist/scheduler/index.d.ts.map +1 -0
  302. package/dist/scheduler/index.js +18 -0
  303. package/dist/scheduler/index.js.map +1 -0
  304. package/dist/scheduler/scheduler.d.ts +263 -0
  305. package/dist/scheduler/scheduler.d.ts.map +1 -0
  306. package/dist/scheduler/scheduler.js +3 -0
  307. package/dist/scheduler/scheduler.js.map +1 -0
  308. package/dist/tags/index.d.ts +2 -0
  309. package/dist/tags/index.d.ts.map +1 -0
  310. package/dist/tags/index.js +18 -0
  311. package/dist/tags/index.js.map +1 -0
  312. package/dist/tags/tags.d.ts +37 -0
  313. package/dist/tags/tags.d.ts.map +1 -0
  314. package/dist/tags/tags.js +10 -0
  315. package/dist/tags/tags.js.map +1 -0
  316. package/dist/unknown/services.d.ts +12 -0
  317. package/dist/unknown/services.d.ts.map +1 -0
  318. package/dist/unknown/services.js +3 -0
  319. package/dist/unknown/services.js.map +1 -0
  320. package/dist/users/companyUser.d.ts +12 -0
  321. package/dist/users/companyUser.d.ts.map +1 -1
  322. package/dist/users/companyUser.js.map +1 -1
  323. package/dist/users/user.d.ts +18 -1
  324. package/dist/users/user.d.ts.map +1 -1
  325. package/package.json +5 -4
@@ -1,5 +1,15 @@
1
- import { Comment, RecommendationHistory } from './recommendationState';
2
- import { SecurityAssessmentStatus, SecurityImpact } from './security';
1
+ import type { Comment, CommentScope, RecommendationHistory } from './recommendationState';
2
+ import type { ProviderScope } from '../common/provider';
3
+ import { SecurityAssessmentStatus, SecurityImpact, SubscriptionSecurityStatus } from './security';
4
+ import { SubscriptionSummaryLite } from './subscriptions';
5
+ import type { CostSavingsAggregationPolicy, CostSavingsSummary, CurrencySavingsGroup, SavingsPotential, VmPricePerformanceInsights } from './views';
6
+ import type { HaloRoutingOverrides } from '../integrations/halo';
7
+ import type { AutotaskShareOverrides } from '../integrations/autotask';
8
+ import type { AzureDevOpsShareOverrides } from '../integrations/azureDevOps';
9
+ import type { GitHubShareOverrides } from '../integrations/github';
10
+ import type { Tags } from '../tags';
11
+ import type { AzurePortalVersionedArtifact } from './portalArtifacts';
12
+ import type { LicensingRecommendationRenderData } from './licensing';
3
13
  export declare enum RecommendationCategory {
4
14
  Cost = "Cost",
5
15
  Performance = "Performance",
@@ -9,14 +19,212 @@ export declare enum RecommendationCategory {
9
19
  OperationalExcellence = "OperationalExcellence",
10
20
  OperationalExcellenceAlternative = "Operational Excellence"
11
21
  }
22
+ export type RecommendationPriorityTier = 'must_do' | 'normal';
23
+ export type RecommendationCostImpactUnit = 'percent';
24
+ export type EffortEstimateProfileName = 'clickops' | 'devops' | 'enterprise';
25
+ export interface RecommendationBaseScores {
26
+ cost_optimization: number;
27
+ security: number;
28
+ performance: number;
29
+ reliability: number;
30
+ compliance: number;
31
+ operational_excellence: number;
32
+ }
33
+ export interface RecommendationEffortEstimateBreakdown {
34
+ discovery: number;
35
+ implementation: number;
36
+ validation: number;
37
+ rollbackPlanning: number;
38
+ coordination: number;
39
+ }
40
+ export interface RecommendationEffortEstimateProfile {
41
+ effortHours: number;
42
+ breakdown: RecommendationEffortEstimateBreakdown;
43
+ reason: string;
44
+ }
45
+ export interface RecommendationEffortEstimateProfiles {
46
+ clickops: RecommendationEffortEstimateProfile;
47
+ devops: RecommendationEffortEstimateProfile;
48
+ enterprise: RecommendationEffortEstimateProfile;
49
+ }
50
+ export interface RecommendationBulkEffortEstimateProfile {
51
+ setupHours: number;
52
+ perResourceHours: number;
53
+ validationHours: number;
54
+ }
55
+ export interface RecommendationBulkEffortEstimateProfiles {
56
+ clickops: RecommendationBulkEffortEstimateProfile;
57
+ devops: RecommendationBulkEffortEstimateProfile;
58
+ enterprise: RecommendationBulkEffortEstimateProfile;
59
+ }
60
+ export interface RecommendationBulkEffortEstimates {
61
+ supported: boolean;
62
+ threshold: number;
63
+ profiles: RecommendationBulkEffortEstimateProfiles;
64
+ }
65
+ export interface RecommendationEffortEstimates {
66
+ profiles: RecommendationEffortEstimateProfiles;
67
+ bulk: RecommendationBulkEffortEstimates;
68
+ overridden?: boolean;
69
+ lastUpdatedAt?: string;
70
+ notes?: string;
71
+ }
72
+ export interface RecommendationActionImpactAssessment {
73
+ downtime: string;
74
+ dataLoss: string;
75
+ accessImpact: string;
76
+ dependencies: string;
77
+ }
78
+ export type RecommendationActionRiskLevel = 'low' | 'medium' | 'high';
79
+ export interface RecommendationActionRollback {
80
+ supported: boolean;
81
+ description: string;
82
+ limitations: string[];
83
+ }
84
+ export interface RecommendationActionCheck {
85
+ label: string;
86
+ description: string;
87
+ }
88
+ export interface RecommendationActionLink {
89
+ label: string;
90
+ url: string;
91
+ }
92
+ export interface RecommendationActionPostValidation {
93
+ label: string;
94
+ description: string;
95
+ expectedResult: string;
96
+ links?: RecommendationActionLink[];
97
+ }
98
+ export type RecommendationActionPermissionProvider = 'azure-rbac';
99
+ export type RecommendationActionPermissionScope = 'targetResource' | 'resourceGroup' | 'subscription' | 'tenant';
100
+ export interface RecommendationActionPermissionRequirement {
101
+ label: string;
102
+ name: string;
103
+ reason: string;
104
+ links?: RecommendationActionLink[];
105
+ }
106
+ export interface RecommendationActionLeastPrivilegeRole {
107
+ label: string;
108
+ description: string;
109
+ }
110
+ export interface RecommendationActionSuggestedRole {
111
+ label: string;
112
+ roleName: string;
113
+ roleDefinitionId?: string;
114
+ reason: string;
115
+ }
116
+ export interface RecommendationActionRequiredPermissions {
117
+ provider: RecommendationActionPermissionProvider;
118
+ scope: RecommendationActionPermissionScope;
119
+ actions: RecommendationActionPermissionRequirement[];
120
+ dataActions: RecommendationActionPermissionRequirement[];
121
+ leastPrivilegeRole?: RecommendationActionLeastPrivilegeRole;
122
+ suggestedRoles?: RecommendationActionSuggestedRole[];
123
+ }
124
+ export interface RecommendationActionDefinition {
125
+ verified: boolean;
126
+ actionDefinitionId?: string;
127
+ title: string;
128
+ description: string;
129
+ estimatedDuration: string;
130
+ riskLevel: RecommendationActionRiskLevel;
131
+ requiredPermissions?: RecommendationActionRequiredPermissions;
132
+ impactAssessment: RecommendationActionImpactAssessment;
133
+ rollback: RecommendationActionRollback;
134
+ humanPreChecks: RecommendationActionCheck[];
135
+ postValidation: RecommendationActionPostValidation[];
136
+ }
137
+ export type RecommendationActionMetadata = RecommendationActionDefinition;
138
+ export type RecommendationImplementActionImpactAssessment = RecommendationActionImpactAssessment;
139
+ export type RecommendationImplementAction = RecommendationActionMetadata;
12
140
  export interface RecommendationResources {
13
141
  recommendation: CustomAzureRecommendation;
14
142
  resourceIds: string[];
15
143
  }
144
+ export type HddSsdMigrationTargetTier = 'standardSsd' | 'premiumSsd';
145
+ export type HddDiskPricingRedundancy = 'LRS' | 'ZRS';
146
+ export interface HddOsRetirementCurrentDiskPricing {
147
+ storageTier: 'standardHdd';
148
+ skuName: string;
149
+ pricingRedundancy?: HddDiskPricingRedundancy;
150
+ sizeGiB: number;
151
+ monthlyActual: number;
152
+ monthlyRetail: number;
153
+ }
154
+ export interface HddOsRetirementTargetDiskPricing {
155
+ storageTier: HddSsdMigrationTargetTier;
156
+ skuName: string;
157
+ pricingRedundancy?: HddDiskPricingRedundancy;
158
+ sizeGiB: number;
159
+ monthlyRetail: number;
160
+ }
161
+ export interface HddOsRetirementDiskRenderItem {
162
+ resourceId: string;
163
+ resourceName: string;
164
+ resourceType: string;
165
+ /** Canonical location key used for pricing lookup, e.g. "westus". */
166
+ pricingLocation?: string;
167
+ current: HddOsRetirementCurrentDiskPricing;
168
+ standardSsd: HddOsRetirementTargetDiskPricing & {
169
+ storageTier: 'standardSsd';
170
+ };
171
+ premiumSsd: HddOsRetirementTargetDiskPricing & {
172
+ storageTier: 'premiumSsd';
173
+ };
174
+ defaultSelection?: HddSsdMigrationTargetTier;
175
+ }
176
+ export interface HddOsRetirementRenderStrategyPayload {
177
+ retirementDate: string;
178
+ retirementLink: string;
179
+ currencyCode?: string;
180
+ currencySymbol?: string;
181
+ defaultTargetTier?: HddSsdMigrationTargetTier;
182
+ impactedDiskCount: number;
183
+ currentMonthlyActual: number;
184
+ currentMonthlyRetail: number;
185
+ standardSsdMonthlyRetail: number;
186
+ premiumSsdMonthlyRetail: number;
187
+ standardSsdMonthlyDelta: number;
188
+ premiumSsdMonthlyDelta: number;
189
+ disks: HddOsRetirementDiskRenderItem[];
190
+ }
191
+ export type RecommendationKnownRenderData = HddOsRetirementRenderStrategyPayload | VmPricePerformanceInsights | LicensingRecommendationRenderData;
192
+ export type AnyRecommendationRenderData = Record<string, unknown>;
193
+ export type RecommendationDecisionRelationshipKind = 'review_first' | 'alternative' | 'trade_off' | 'follow_up' | 'unlocks' | 'conflicts_with';
194
+ export type RecommendationDecisionContextRole = 'primary' | 'alternative' | 'trade_off' | 'follow_up' | 'supporting';
195
+ export type RecommendationDecisionReviewPriority = 'review_first' | 'normal';
196
+ /**
197
+ * Resource-specific relationship from one recommendation to another.
198
+ * Used by UIs to explain alternatives and follow-ups without changing recommendation state.
199
+ */
200
+ export interface RecommendationDecisionLink {
201
+ recommendationId: string;
202
+ kind: RecommendationDecisionRelationshipKind;
203
+ label?: string;
204
+ reason?: string;
205
+ condition?: string;
206
+ }
207
+ /**
208
+ * Resource-specific decision context for an existing recommendation.
209
+ * The recommendation remains independently visible and actionable by recommendationId.
210
+ */
211
+ export interface RecommendationDecisionContext {
212
+ recommendationId: string;
213
+ role?: RecommendationDecisionContextRole;
214
+ reviewPriority?: RecommendationDecisionReviewPriority;
215
+ groupId?: string;
216
+ title?: string;
217
+ explanation?: string;
218
+ links: RecommendationDecisionLink[];
219
+ }
16
220
  export interface Recommendation {
221
+ /** Business identity of a recommendation record (routing/state/sharing/dedupe). */
17
222
  id: string;
18
223
  name: string;
19
224
  category: RecommendationCategory;
225
+ subCategory?: string;
226
+ aggregateDescription?: string;
227
+ /** custom */
20
228
  type?: string;
21
229
  description?: string;
22
230
  remediation?: string;
@@ -27,33 +235,90 @@ export interface Recommendation {
27
235
  url: string;
28
236
  }[];
29
237
  considerations?: string;
238
+ currency?: string;
30
239
  potentialBenefits?: string;
240
+ potentialMonthlySavings?: number;
31
241
  effort?: string;
32
242
  effortReason?: string;
243
+ /** e.g. 10 hours */
244
+ effortHours?: number;
245
+ /** Detailed implementation estimates by delivery profile and bulk rollout mode. */
246
+ effortEstimates?: RecommendationEffortEstimates;
33
247
  risk?: string;
34
248
  riskReason?: string;
249
+ severity?: string;
250
+ /** Relative cost percentage, e.g. -40 means a 40% reduction. Never a currency amount. */
35
251
  costImpact?: number;
252
+ /** Explicit discriminator for new payloads while legacy percentage-only payloads remain readable. */
253
+ costImpactUnit?: RecommendationCostImpactUnit;
36
254
  costImpactReason?: string;
37
- costImpactDetails?: CostImpactDetails;
255
+ /*** costImpactDetails is deprecated **/
38
256
  performanceImpact?: number;
39
257
  performanceImpactReason?: string;
40
258
  confidencePercentage?: number;
41
259
  confidenceReason?: string;
260
+ /** array of resources that have this recommendation */
42
261
  resources?: ResourceReference[];
262
+ /** Compact resource references for resource-specific detail payloads. */
263
+ resourceIds?: string[];
264
+ /** Total affected resources when resourceIds is trimmed or sampled. */
265
+ resourcesCount?: number;
266
+ /** only for security recommendations */
43
267
  securityImpactDetails?: SecurityImpact;
268
+ /** whether the recommendation has been resolved or not, eg, Security Assessment is "Healthy" should be true */
44
269
  resolved?: boolean;
45
270
  securityAssessmentStatuses?: SecurityAssessmentStatus[];
46
- subcategory?: string;
271
+ /** Deprecated fields, kept for compatibility */
47
272
  solution?: string;
48
273
  source?: string;
49
274
  service?: string;
275
+ /**
276
+ * Stored as string to allow JSON persistence.
277
+ * Uses a different name to avoid conflict with RecommendationWithState.createdAt.
278
+ */
50
279
  createdTime?: string;
280
+ /** Avoids conflict with RecommendationWithState.updatedAt */
51
281
  lastUpdatedTime?: string;
282
+ /** Business story properties */
283
+ title?: string;
284
+ headline?: string;
285
+ bottomLine?: string;
286
+ plainSummary?: string;
287
+ quickSteps?: string[];
288
+ businessOwner?: string;
289
+ keyConstraint?: string;
290
+ validationEvidence?: string;
291
+ read?: boolean;
292
+ /** Technical playbook (only for multi-step implementations) */
293
+ technicalPlaybook?: string;
294
+ /** Static recommendation scoring metadata (library-level). */
295
+ baseScores?: RecommendationBaseScores;
296
+ overallBaseScore?: number;
297
+ overallBaseReason?: string;
298
+ priorityTier?: RecommendationPriorityTier;
299
+ /** Runtime scoring metadata (per company/tenant). */
300
+ adjustedScore?: number;
301
+ objectiveMultiplier?: number;
302
+ finalScore?: number;
303
+ /** UI display-only normalized score (0-100). */
304
+ normalizedScore?: number;
305
+ /** Cross-feature linkage IDs used for deep links and related views. */
306
+ linkingIds?: RecommendationLinkingIds;
307
+ /** Optional UI render payload consumed by recommendation-specific components. */
308
+ renderData?: RecommendationKnownRenderData | AnyRecommendationRenderData;
309
+ /** Optional action definition for implement-capable recommendations. */
310
+ action?: RecommendationActionMetadata;
52
311
  }
312
+ export interface RecommendationLinkingIds {
313
+ serviceRetirementIds?: string[];
314
+ }
315
+ /** Deprecated **/
53
316
  export interface CostImpactDetails {
317
+ /** e.g. "Saving Plan", "Reserved Instance", "Windows migration to Linux" */
54
318
  name: string;
55
319
  monthlySavings?: number;
56
320
  currentSpend?: number;
321
+ /** e.g. 20 for 20% */
57
322
  savingPercentage?: number;
58
323
  minMonthlySavings?: number;
59
324
  maxMonthlySavings?: number;
@@ -67,17 +332,77 @@ export interface RecommendationSummary {
67
332
  }
68
333
  export interface RecommendationWithResources {
69
334
  recommendation: Recommendation;
335
+ /** Total affected resources when the resources array is trimmed or sampled. */
336
+ resourcesCount?: number;
70
337
  resources: RecommendationResource[];
338
+ /** Homogeneous-currency savings only. Omit for mixed-currency projections. */
339
+ savings?: SavingsPotential;
340
+ /** Canonical monetary values when present; `savings` must not contain mixed-currency amounts. */
341
+ savingsByCurrency?: CurrencySavingsGroup[];
342
+ /** Canonical resource ID that owns this recommendation savings amount for aggregation */
343
+ savingsOwnerResourceId?: string;
344
+ /** Resource IDs that may display this recommendation savings amount as context */
345
+ savingsDisplayResourceIds?: string[];
346
+ /** Billable component key used with the owner ID to prevent double counting */
347
+ billableComponentKey?: string;
348
+ /** Aggregation rule for this recommendation savings amount */
349
+ savingsAggregationPolicy?: CostSavingsAggregationPolicy;
350
+ }
351
+ /**
352
+ * Contextual links from one recommendation row to other resources.
353
+ * Used to model "this disk belongs to that VM" style associations
354
+ * without changing which resource owns savings totals.
355
+ */
356
+ export interface RecommendationResourceAssociation {
357
+ id: string;
358
+ name?: string;
359
+ type?: string;
360
+ relationship?: ResourceRelationship;
71
361
  }
72
362
  export interface RecommendationResource {
73
363
  id: string;
74
364
  name: string;
75
365
  type: string;
366
+ resourceGroup?: string;
367
+ location?: string;
368
+ subscriptionId?: string;
369
+ subscriptionName?: string;
370
+ tags?: Record<string, string>;
371
+ spottoTags?: Tags;
372
+ createdTime?: string;
373
+ typeInfo?: {
374
+ name: string;
375
+ icon: string;
376
+ description: string;
377
+ product: string;
378
+ aliases?: string[];
379
+ };
76
380
  spend: number;
77
381
  spendAmortized: number;
382
+ savings?: SavingsPotential;
383
+ /** Canonical resource ID that owns this resource savings amount for aggregation */
384
+ savingsOwnerResourceId?: string;
385
+ /** Resource IDs that may display this resource savings amount as context */
386
+ savingsDisplayResourceIds?: string[];
387
+ /** Billable component key used with the owner ID to prevent double counting */
388
+ billableComponentKey?: string;
389
+ /** Aggregation rule for this resource savings amount */
390
+ savingsAggregationPolicy?: CostSavingsAggregationPolicy;
391
+ currency?: string;
392
+ currencySymbol?: string;
393
+ relationship?: ResourceRelationship;
394
+ associations?: RecommendationResourceAssociation[];
78
395
  }
79
- export interface RecommendationsView {
396
+ export interface RecommendationsView extends AzurePortalVersionedArtifact {
80
397
  recommendations: RecommendationWithResources[];
398
+ securityImpactDetails?: SecurityImpact[];
399
+ subscriptionSecurityStatus?: SubscriptionSecurityStatus;
400
+ /** Homogeneous-currency savings only. Omit for mixed-currency projections. */
401
+ savings?: SavingsPotential;
402
+ /** Canonical monetary values when present; `savings` must not contain mixed-currency amounts. */
403
+ savingsByCurrency?: CurrencySavingsGroup[];
404
+ subscription: SubscriptionSummaryLite;
405
+ costSavingsSummary?: CostSavingsSummary;
81
406
  }
82
407
  export interface ResourceId {
83
408
  id: string;
@@ -85,7 +410,20 @@ export interface ResourceId {
85
410
  export interface ResourceReference {
86
411
  id: string;
87
412
  name: string;
413
+ type?: string;
414
+ subscriptionName?: string;
415
+ savings?: SavingsPotential;
416
+ currency?: string;
417
+ currencySymbol?: string;
418
+ relationship?: ResourceRelationship;
419
+ associations?: RecommendationResourceAssociation[];
88
420
  }
421
+ export type ResourceRelationship = {
422
+ role?: 'primary' | 'related';
423
+ type?: string;
424
+ allocationId?: string;
425
+ metadata?: Record<string, string>;
426
+ };
89
427
  export interface ReliabilityRecommendation extends Recommendation {
90
428
  referenceID: string;
91
429
  resourceType: string;
@@ -93,7 +431,6 @@ export interface ReliabilityRecommendation extends Recommendation {
93
431
  service: string;
94
432
  }
95
433
  export interface CustomAzureRecommendation extends Recommendation {
96
- subcategory: string;
97
434
  service: string;
98
435
  source: string;
99
436
  fileName: string;
@@ -103,6 +440,7 @@ export interface RecommendationCollection {
103
440
  results: ResourceId[];
104
441
  }
105
442
  export interface AzureRecommendationLite {
443
+ /** e.g. Cost, Performance, Reliability, Security, Compliance, OperationalExcellence, Operational Excellence, HighAvailability */
106
444
  category: string;
107
445
  total: number;
108
446
  high: number;
@@ -110,13 +448,18 @@ export interface AzureRecommendationLite {
110
448
  low: number;
111
449
  }
112
450
  export interface RecommendationStats {
451
+ /** total number of recommendations in the subscription */
113
452
  total: number;
453
+ /** total number of high recommendations in the subscription */
114
454
  high: number;
455
+ /** total number of medium recommendations in the subscription */
115
456
  medium: number;
457
+ /** total number of low recommendations in the subscription */
116
458
  low: number;
117
459
  }
460
+ /** Recommendation with state information, name "ExtendedRecommendation" in the portal at the moment */
118
461
  export interface RecommendationWithState extends Recommendation {
119
- status?: 'Active' | 'Prioritized' | 'Postponed' | 'Dismissed' | 'Completed' | 'Archived';
462
+ status?: 'Active' | 'Prioritized' | 'Postponed' | 'Dismissed' | 'Completed' | 'Archived' | 'Implementing' | 'Implemented' | 'Failed';
120
463
  read?: boolean;
121
464
  scheduledAt?: Date;
122
465
  createdAt?: Date;
@@ -125,4 +468,202 @@ export interface RecommendationWithState extends Recommendation {
125
468
  comments?: Comment[];
126
469
  history?: RecommendationHistory[];
127
470
  }
471
+ export interface DismissRecommendationRequest extends RecommendationActionRequest {
472
+ dismissReason: string;
473
+ }
474
+ export interface ShareRecommendationRequest extends RecommendationActionRequest {
475
+ shareType: 'email' | 'slack' | 'teams' | 'jira' | 'halo' | 'connectwise' | 'autotask' | 'azuredevops' | 'github';
476
+ email?: string;
477
+ halo?: HaloRoutingOverrides;
478
+ connectwise?: ConnectWiseRoutingFields;
479
+ autotask?: AutotaskShareOverrides;
480
+ azuredevops?: AzureDevOpsShareOverrides;
481
+ github?: GitHubShareOverrides;
482
+ }
483
+ export type RecommendationActionTargetSelection = 'selectedResources' | 'allAffectedResources';
484
+ export interface RecommendationActionRequest extends ProviderScope {
485
+ /** `providerScope` maps to subscription identity for Azure providers. */
486
+ scope?: CommentScope;
487
+ /** Optional cloud-account identity enriched by trusted server-side callers before queue publish. */
488
+ cloudAccountId?: string;
489
+ /** Optional user-provided reason for queue-backed actions such as implement. */
490
+ reason?: string;
491
+ /** Optional action permission metadata passed into API preflight before queue publish. */
492
+ requiredPermissions?: RecommendationActionRequiredPermissions;
493
+ recommendationId: string;
494
+ recommendationTitle?: string;
495
+ resourceIds: string[];
496
+ /** Whether resourceIds are the exact selected targets or a sampled display subset for an all-affected action. */
497
+ targetSelection?: RecommendationActionTargetSelection;
498
+ resourceGroupName?: string;
499
+ companyId: string;
500
+ byUserId?: string;
501
+ byUserDisplayName?: string;
502
+ }
503
+ export interface RecommendationActionResponse {
504
+ success: boolean;
505
+ message?: string;
506
+ affectedResources?: string[];
507
+ eventId?: string;
508
+ }
509
+ export type RecommendationActionPermissionFailureStatus = 'missing' | 'unknown' | 'unsupported';
510
+ export interface RecommendationActionPermissionFailure {
511
+ resourceId: string;
512
+ azureScope: string;
513
+ status: RecommendationActionPermissionFailureStatus;
514
+ message: string;
515
+ missingActions: string[];
516
+ missingDataActions: string[];
517
+ }
518
+ export interface RecommendationActionPermissionErrorResponse {
519
+ error: 'AzurePermissionMissing';
520
+ message: string;
521
+ action: 'implement';
522
+ providerName: string;
523
+ providerScopeId: string;
524
+ failures: RecommendationActionPermissionFailure[];
525
+ }
526
+ export interface ServiceRetirementRecommendation {
527
+ Id: string;
528
+ ServiceName: string;
529
+ RetiringFeature: string;
530
+ RetirementDate: string;
531
+ Link: string;
532
+ effort: string;
533
+ effortHours: number;
534
+ effortReason: string;
535
+ risk: string;
536
+ riskReason: string;
537
+ considerations: string;
538
+ confidencePercentage: number;
539
+ confidenceReason: string;
540
+ lastProcessedAt: string;
541
+ /** Related recommendation IDs for cross-navigation from retirement tracker. */
542
+ linkedRecommendationIds?: string[];
543
+ }
544
+ export interface JiraShareDetails {
545
+ projectKey?: string;
546
+ epicKey?: string;
547
+ label?: string;
548
+ }
549
+ export interface JiraIntegrationRequestBase {
550
+ siteUrl: string;
551
+ email: string;
552
+ secret?: string;
553
+ useStoredSecret?: boolean;
554
+ }
555
+ export interface JiraIntegrationTestPayload extends JiraIntegrationRequestBase {
556
+ projectKey?: string;
557
+ }
558
+ export interface JiraIntegrationEpicsPayload extends JiraIntegrationRequestBase {
559
+ projectKey: string;
560
+ maxResults?: number;
561
+ }
562
+ export interface JiraIntegrationProjectsPayload extends JiraIntegrationRequestBase {
563
+ maxResults?: number;
564
+ }
565
+ export interface JiraIntegrationLabelsPayload extends JiraIntegrationRequestBase {
566
+ projectKey: string;
567
+ maxResults?: number;
568
+ searchQuery?: string;
569
+ }
570
+ export interface JiraEntity {
571
+ id: string;
572
+ key: string;
573
+ name: string;
574
+ }
575
+ export interface JiraLabel {
576
+ name: string;
577
+ }
578
+ export interface ConnectWiseIntegrationRequestBase {
579
+ siteUrl: string;
580
+ companyId: string;
581
+ publicKey: string;
582
+ secret?: string;
583
+ useStoredSecret?: boolean;
584
+ credentialOwnerCompanyId?: string;
585
+ }
586
+ export type ConnectWiseId = string | number;
587
+ export interface ConnectWiseRoutingFields {
588
+ boardId?: ConnectWiseId;
589
+ boardName?: string;
590
+ statusId?: ConnectWiseId;
591
+ statusName?: string;
592
+ customerId?: ConnectWiseId;
593
+ customerName?: string;
594
+ projectId?: ConnectWiseId;
595
+ projectName?: string;
596
+ typeId?: ConnectWiseId;
597
+ typeName?: string;
598
+ subTypeId?: ConnectWiseId;
599
+ subTypeName?: string;
600
+ itemId?: ConnectWiseId;
601
+ itemName?: string;
602
+ priorityId?: ConnectWiseId;
603
+ priorityName?: string;
604
+ contactId?: ConnectWiseId;
605
+ contactName?: string;
606
+ agreementId?: ConnectWiseId;
607
+ agreementName?: string;
608
+ slaId?: ConnectWiseId;
609
+ slaName?: string;
610
+ source?: string;
611
+ }
612
+ export interface ConnectWiseIntegrationTestPayload extends ConnectWiseIntegrationRequestBase, ConnectWiseRoutingFields {
613
+ }
614
+ export type ConnectWiseBoardsPayload = ConnectWiseIntegrationRequestBase;
615
+ export type ConnectWiseCompaniesPayload = ConnectWiseIntegrationRequestBase;
616
+ export type ConnectWiseProjectsPayload = ConnectWiseIntegrationRequestBase;
617
+ export interface ConnectWiseStatusesPayload extends ConnectWiseIntegrationRequestBase {
618
+ boardId?: string;
619
+ boardName?: string;
620
+ }
621
+ export interface ConnectWiseTypesPayload extends ConnectWiseIntegrationRequestBase {
622
+ boardId?: string;
623
+ boardName?: string;
624
+ }
625
+ export interface ConnectWiseSubTypesPayload extends ConnectWiseIntegrationRequestBase {
626
+ boardId?: string;
627
+ boardName?: string;
628
+ typeId?: string;
629
+ typeName?: string;
630
+ }
631
+ export interface ConnectWiseItemsPayload extends ConnectWiseIntegrationRequestBase {
632
+ boardId?: string;
633
+ boardName?: string;
634
+ typeId?: string;
635
+ typeName?: string;
636
+ subTypeId?: string;
637
+ subTypeName?: string;
638
+ }
639
+ export interface ConnectWiseTypeSubTypeItemAssociationsPayload extends ConnectWiseIntegrationRequestBase {
640
+ boardId?: string;
641
+ boardName?: string;
642
+ }
643
+ export interface ConnectWisePrioritiesPayload extends ConnectWiseIntegrationRequestBase {
644
+ boardId?: string;
645
+ boardName?: string;
646
+ }
647
+ export interface ConnectWiseContactsPayload extends ConnectWiseIntegrationRequestBase {
648
+ searchQuery?: string;
649
+ }
650
+ export type ConnectWiseSourcesPayload = ConnectWiseIntegrationRequestBase;
651
+ export type ConnectWiseAgreementsPayload = ConnectWiseIntegrationRequestBase;
652
+ export type ConnectWiseSlasPayload = ConnectWiseIntegrationRequestBase;
653
+ export interface ConnectWiseEntity {
654
+ id: string | number;
655
+ name: string;
656
+ }
657
+ export interface ConnectWiseTypeSubTypeItemAssociation {
658
+ type?: ConnectWiseEntity;
659
+ subType?: ConnectWiseEntity;
660
+ item?: ConnectWiseEntity;
661
+ }
662
+ export interface ConnectWiseContact extends ConnectWiseEntity {
663
+ email?: string;
664
+ }
665
+ export interface ConnectWiseTicketMetadata extends ConnectWiseRoutingFields {
666
+ ticketId: ConnectWiseId;
667
+ ticketUrl?: string;
668
+ }
128
669
  //# sourceMappingURL=recommendations.d.ts.map