@pagopa/dx-savemoney 0.5.0 → 0.6.2

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 (134) hide show
  1. package/README.md +48 -0
  2. package/dist/azure/analyzer.d.ts.map +1 -1
  3. package/dist/azure/analyzer.js +30 -0
  4. package/dist/azure/analyzer.js.map +1 -1
  5. package/dist/azure/analyzers/advisor.d.ts.map +1 -1
  6. package/dist/azure/analyzers/advisor.js.map +1 -1
  7. package/dist/azure/azqr.d.ts +136 -0
  8. package/dist/azure/azqr.d.ts.map +1 -0
  9. package/dist/azure/azqr.js +235 -0
  10. package/dist/azure/azqr.js.map +1 -0
  11. package/dist/azure/config.d.ts.map +1 -1
  12. package/dist/azure/config.js +1 -0
  13. package/dist/azure/config.js.map +1 -1
  14. package/dist/azure/pricing/pricing-service.d.ts.map +1 -1
  15. package/dist/azure/pricing/pricing-service.js +6 -1
  16. package/dist/azure/pricing/pricing-service.js.map +1 -1
  17. package/dist/azure/pricing/schema.d.ts.map +1 -1
  18. package/dist/azure/pricing/schema.js +22 -14
  19. package/dist/azure/pricing/schema.js.map +1 -1
  20. package/dist/azure/resources/app-service.d.ts.map +1 -1
  21. package/dist/azure/resources/app-service.js +2 -2
  22. package/dist/azure/resources/app-service.js.map +1 -1
  23. package/dist/azure/resources/container-app.d.ts.map +1 -1
  24. package/dist/azure/resources/container-app.js +1 -1
  25. package/dist/azure/resources/container-app.js.map +1 -1
  26. package/dist/azure/resources/disk.js +3 -1
  27. package/dist/azure/resources/disk.js.map +1 -1
  28. package/dist/azure/resources/nic.js +3 -1
  29. package/dist/azure/resources/nic.js.map +1 -1
  30. package/dist/azure/resources/private-endpoint.d.ts.map +1 -1
  31. package/dist/azure/resources/private-endpoint.js +1 -1
  32. package/dist/azure/resources/private-endpoint.js.map +1 -1
  33. package/dist/azure/resources/public-ip.js +4 -2
  34. package/dist/azure/resources/public-ip.js.map +1 -1
  35. package/dist/azure/resources/static-web-app.d.ts.map +1 -1
  36. package/dist/azure/resources/static-web-app.js +1 -1
  37. package/dist/azure/resources/static-web-app.js.map +1 -1
  38. package/dist/azure/resources/vm.js +6 -2
  39. package/dist/azure/resources/vm.js.map +1 -1
  40. package/dist/azure/types.d.ts +8 -0
  41. package/dist/azure/types.d.ts.map +1 -1
  42. package/dist/azure/utils.d.ts.map +1 -1
  43. package/dist/azure/utils.js +7 -2
  44. package/dist/azure/utils.js.map +1 -1
  45. package/dist/finding.d.ts +2 -1
  46. package/dist/finding.d.ts.map +1 -1
  47. package/dist/finding.js.map +1 -1
  48. package/dist/schema.d.ts +1 -0
  49. package/dist/schema.d.ts.map +1 -1
  50. package/dist/schema.js +6 -0
  51. package/dist/schema.js.map +1 -1
  52. package/package.json +8 -15
  53. package/src/azure/__tests__/azqr.test.ts +238 -0
  54. package/src/azure/__tests__/config.test.ts +2 -0
  55. package/src/azure/__tests__/fixtures/full-override.yaml +1 -0
  56. package/src/azure/analyzer.ts +47 -0
  57. package/src/azure/analyzers/advisor.ts +1 -2
  58. package/src/azure/azqr.ts +270 -0
  59. package/src/azure/config.ts +1 -0
  60. package/src/azure/pricing/__tests__/schema.test.ts +30 -0
  61. package/src/azure/pricing/pricing-service.ts +6 -3
  62. package/src/azure/pricing/schema.ts +22 -14
  63. package/src/azure/resources/app-service.ts +4 -2
  64. package/src/azure/resources/container-app.ts +2 -1
  65. package/src/azure/resources/disk.ts +3 -3
  66. package/src/azure/resources/nic.ts +3 -3
  67. package/src/azure/resources/private-endpoint.ts +2 -1
  68. package/src/azure/resources/public-ip.ts +6 -6
  69. package/src/azure/resources/static-web-app.ts +2 -1
  70. package/src/azure/resources/vm.ts +6 -6
  71. package/src/azure/types.ts +8 -0
  72. package/src/azure/utils.ts +8 -2
  73. package/src/finding.ts +3 -6
  74. package/src/schema.ts +6 -0
  75. package/dist/__tests__/finding.test.d.ts +0 -17
  76. package/dist/__tests__/finding.test.d.ts.map +0 -1
  77. package/dist/__tests__/finding.test.js +0 -146
  78. package/dist/__tests__/finding.test.js.map +0 -1
  79. package/dist/azure/__tests__/analyzer-tags.test.d.ts +0 -8
  80. package/dist/azure/__tests__/analyzer-tags.test.d.ts.map +0 -1
  81. package/dist/azure/__tests__/analyzer-tags.test.js +0 -70
  82. package/dist/azure/__tests__/analyzer-tags.test.js.map +0 -1
  83. package/dist/azure/__tests__/config.test.d.ts +0 -9
  84. package/dist/azure/__tests__/config.test.d.ts.map +0 -1
  85. package/dist/azure/__tests__/config.test.js +0 -100
  86. package/dist/azure/__tests__/config.test.js.map +0 -1
  87. package/dist/azure/__tests__/report.test.d.ts +0 -9
  88. package/dist/azure/__tests__/report.test.d.ts.map +0 -1
  89. package/dist/azure/__tests__/report.test.js +0 -191
  90. package/dist/azure/__tests__/report.test.js.map +0 -1
  91. package/dist/azure/__tests__/utils.test.d.ts +0 -15
  92. package/dist/azure/__tests__/utils.test.d.ts.map +0 -1
  93. package/dist/azure/__tests__/utils.test.js +0 -181
  94. package/dist/azure/__tests__/utils.test.js.map +0 -1
  95. package/dist/azure/analyzers/__tests__/advisor.test.d.ts +0 -9
  96. package/dist/azure/analyzers/__tests__/advisor.test.d.ts.map +0 -1
  97. package/dist/azure/analyzers/__tests__/advisor.test.js +0 -314
  98. package/dist/azure/analyzers/__tests__/advisor.test.js.map +0 -1
  99. package/dist/azure/pricing/__tests__/cache.test.d.ts +0 -8
  100. package/dist/azure/pricing/__tests__/cache.test.d.ts.map +0 -1
  101. package/dist/azure/pricing/__tests__/cache.test.js +0 -56
  102. package/dist/azure/pricing/__tests__/cache.test.js.map +0 -1
  103. package/dist/azure/pricing/__tests__/client.test.d.ts +0 -9
  104. package/dist/azure/pricing/__tests__/client.test.d.ts.map +0 -1
  105. package/dist/azure/pricing/__tests__/client.test.js +0 -181
  106. package/dist/azure/pricing/__tests__/client.test.js.map +0 -1
  107. package/dist/azure/pricing/__tests__/pricing-service.test.d.ts +0 -6
  108. package/dist/azure/pricing/__tests__/pricing-service.test.d.ts.map +0 -1
  109. package/dist/azure/pricing/__tests__/pricing-service.test.js +0 -283
  110. package/dist/azure/pricing/__tests__/pricing-service.test.js.map +0 -1
  111. package/dist/azure/pricing/resolvers/__tests__/app-service.test.d.ts +0 -5
  112. package/dist/azure/pricing/resolvers/__tests__/app-service.test.d.ts.map +0 -1
  113. package/dist/azure/pricing/resolvers/__tests__/app-service.test.js +0 -137
  114. package/dist/azure/pricing/resolvers/__tests__/app-service.test.js.map +0 -1
  115. package/dist/azure/pricing/resolvers/__tests__/disk.test.d.ts +0 -5
  116. package/dist/azure/pricing/resolvers/__tests__/disk.test.d.ts.map +0 -1
  117. package/dist/azure/pricing/resolvers/__tests__/disk.test.js +0 -160
  118. package/dist/azure/pricing/resolvers/__tests__/disk.test.js.map +0 -1
  119. package/dist/azure/pricing/resolvers/__tests__/public-ip.test.d.ts +0 -5
  120. package/dist/azure/pricing/resolvers/__tests__/public-ip.test.d.ts.map +0 -1
  121. package/dist/azure/pricing/resolvers/__tests__/public-ip.test.js +0 -113
  122. package/dist/azure/pricing/resolvers/__tests__/public-ip.test.js.map +0 -1
  123. package/dist/azure/pricing/resolvers/__tests__/vm.test.d.ts +0 -9
  124. package/dist/azure/pricing/resolvers/__tests__/vm.test.d.ts.map +0 -1
  125. package/dist/azure/pricing/resolvers/__tests__/vm.test.js +0 -204
  126. package/dist/azure/pricing/resolvers/__tests__/vm.test.js.map +0 -1
  127. package/dist/azure/resources/__tests__/app-service.test.d.ts +0 -5
  128. package/dist/azure/resources/__tests__/app-service.test.d.ts.map +0 -1
  129. package/dist/azure/resources/__tests__/app-service.test.js +0 -105
  130. package/dist/azure/resources/__tests__/app-service.test.js.map +0 -1
  131. package/dist/azure/resources/__tests__/storage.test.d.ts +0 -11
  132. package/dist/azure/resources/__tests__/storage.test.d.ts.map +0 -1
  133. package/dist/azure/resources/__tests__/storage.test.js +0 -99
  134. package/dist/azure/resources/__tests__/storage.test.js.map +0 -1
package/README.md CHANGED
@@ -102,6 +102,7 @@ The tool analyzes the following Azure resource types with specific detection met
102
102
  | **Storage Accounts** | Metrics | 🟡 Medium | Very low transaction count (<10 per days in timespan) |
103
103
  | **Static Web Apps** | Metrics | 🟢 Low | No traffic data available, Very low site hits (<100 requests in 30 days), Very low data transfer (<1MB in 30 days) |
104
104
  | **Azure Advisor** | Advisor API | ⚪ Varies | Reserved Instance and Savings Plan opportunities, right-sizing suggestions, and other Cost recommendations — with estimated monthly savings where available |
105
+ | **AZQR report** | `--azqr-report` JSON | ⚪ Varies | Optional. Billable orphans (cost) and free orphaned resources such as empty subnets or unattached NSGs (cleanup candidates) parsed from an AZQR scan |
105
106
 
106
107
  #### Pricing Coverage
107
108
 
@@ -160,6 +161,7 @@ The tool requires the following configuration:
160
161
  | `verbose` | `boolean` | ❌ | `false` | Enable detailed logging for each resource analyzed |
161
162
  | `filterTags` | `Record<string, string>` | ❌ | - | Only analyze resources matching **all** the specified tag key-value pairs |
162
163
  | `thresholds` | `Thresholds` | ❌ | see below | Override the default numeric thresholds used during analysis |
164
+ | `azqrReportPath` | `string` | ❌ | - | Path to an AZQR `--json` report to ingest (see AZQR Report Ingestion) |
163
165
 
164
166
  #### Output Formats
165
167
 
@@ -328,6 +330,52 @@ const reports = await azure.analyzeAzureResources(config);
328
330
  await azure.generateReport(reports, "json");
329
331
  ```
330
332
 
333
+ #### AZQR Report Ingestion
334
+
335
+ SaveMoney can enrich a live scan with an [AZQR](https://github.com/Azure/azqr)
336
+ (`azqr scan --json`) report. Provide its path either with the `--azqr-report
337
+ <path>` CLI flag or via the `azure.azqrReportPath` YAML key (the CLI flag takes
338
+ precedence when both are set): the FinOps-relevant resources from the report's
339
+ `impacted` section are merged into the normal output as findings tagged with the
340
+ `[azqr]` source.
341
+
342
+ ```bash
343
+ # Generate the AZQR report first (disable masking so resource IDs match)
344
+ azqr scan --subscription-id <sub-id> --json --mask=false
345
+
346
+ # Feed it into SaveMoney alongside the live scan
347
+ dx savemoney --azqr-report ./azqr_action_plan.json
348
+ ```
349
+
350
+ Or persist the path in the YAML config:
351
+
352
+ ```yaml
353
+ azure:
354
+ subscriptionIds:
355
+ - xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
356
+ azqrReportPath: ./azqr_action_plan.json
357
+ ```
358
+
359
+ Notes:
360
+
361
+ - **Disable masking.** AZQR masks subscription IDs by default
362
+ (`/subscriptions/xxxxxxxx-…/`). Masked IDs cannot be matched to live
363
+ resources, so findings would appear as separate stub entries. SaveMoney logs
364
+ a warning when it detects a masked report; re-run AZQR with `--mask=false`.
365
+ - **Noise reduction.** Rows are classified into two buckets and everything else
366
+ (security, reliability, high-availability best practices) is dropped:
367
+ - **Cost opportunities** (`cost` category): rows AZQR categorises as `Cost`,
368
+ plus orphaned/unassociated **billable** resources (public IPs, NAT gateways,
369
+ application gateways, App Service plans, SQL elastic pools, load balancers,
370
+ DDoS plans, VNet gateways, managed disks/snapshots).
371
+ - **Cleanup candidates** (`operationalExcellence` category, low severity):
372
+ orphaned **free** resources flagged by AZQR's `AOR` (Azure Orphan Resources)
373
+ checks — empty subnets, unattached NSGs, orphan API connections, unconnected
374
+ private endpoints. They carry no direct cost but are worth removing after
375
+ verifying they are unused.
376
+ - AZQR carries no monetary estimate, so these findings have no per-finding
377
+ saving amount; they surface as opportunities to review.
378
+
331
379
  ## AWS (Coming Soon)
332
380
 
333
381
  AWS support is planned for future releases with similar capabilities:
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/azure/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,OAAO,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAKrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAG3E,OAAO,EACL,KAAK,cAAc,EAInB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAiB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM5D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAgHxC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,YAAY,CAAC,eAAe,EACtC,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,YAAY,YAAY,EACtC,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC,CA+CzB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,2BAA2B,EAAE,EACtC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,GACpD,IAAI,CAiCN;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,EACtC,eAAe,EAAE,OAAO,GACvB,OAAO,CAYT"}
1
+ {"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../../src/azure/analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,OAAO,KAAK,YAAY,MAAM,sBAAsB,CAAC;AAKrD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,WAAW,EAAE,2BAA2B,EAAE,MAAM,YAAY,CAAC;AAG3E,OAAO,EACL,KAAK,cAAc,EAInB,KAAK,UAAU,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,KAAK,QAAQ,EAEb,KAAK,YAAY,EAIlB,MAAM,sBAAsB,CAAC;AAM9B,OAAO,EAAiB,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnE,OAAO,EAAe,KAAK,YAAY,EAAE,MAAM,YAAY,CAAC;AAM5D;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,2BAA2B,EAAE,CAAC,CAsHxC;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,YAAY,CAAC,eAAe,EACtC,SAAS,EAAE,QAAQ,EAAE,EACrB,OAAO,EAAE,YAAY,EACrB,YAAY,EAAE,YAAY,YAAY,EACtC,iBAAiB,EAAE,MAAM,EACzB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,UAAU,EACtB,OAAO,UAAQ,EACf,OAAO,CAAC,EAAE,cAAc,GACvB,OAAO,CAAC,cAAc,CAAC,CA+CzB;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,2BAA2B,EAAE,EACtC,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,2BAA2B,CAAC,GACpD,IAAI,CAiCN;AAED,wBAAgB,kCAAkC,CAChD,OAAO,EAAE,OAAO,EAChB,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,EACtC,eAAe,EAAE,OAAO,GACvB,OAAO,CAYT"}
@@ -30,6 +30,7 @@ import pLimit from "p-limit";
30
30
  import { findingsFromAnalysisResult } from "../finding.js";
31
31
  import { DEFAULT_THRESHOLDS, mergeResults, } from "../types.js";
32
32
  import { createDefaultAnalyzers, createDefaultSubscriptionAnalyzers, } from "./analyzers/index.js";
33
+ import { azqrImpactedToFindings, isAzqrReportMasked, loadAzqrReport, } from "./azqr.js";
33
34
  import { PricingClient, PricingService } from "./pricing/index.js";
34
35
  import { matchesTags } from "./utils.js";
35
36
  const DEFAULT_CONCURRENCY = 8;
@@ -134,6 +135,11 @@ export async function analyzeAzureResources(config) {
134
135
  });
135
136
  }
136
137
  }
138
+ // Ingest an AZQR (`azqr scan --json`) report when provided, merging its
139
+ // FinOps-relevant `impacted` rows into the aggregated reports as findings.
140
+ if (config.azqrReportPath) {
141
+ await ingestAzqrReport(config.azqrReportPath, allReports, logger);
142
+ }
137
143
  // Sort to make the output more readable:
138
144
  // - Subscription-scoped findings (Reserved Instances, savings plans, ...)
139
145
  // sink to the bottom: they aggregate many recommendations into a single
@@ -343,6 +349,30 @@ async function collectTaggedResourceIds(args) {
343
349
  function hasTagFilter(filterTags) {
344
350
  return Boolean(filterTags && filterTags.size > 0);
345
351
  }
352
+ /**
353
+ * Loads an AZQR report, filters it down to FinOps opportunities and merges the
354
+ * resulting findings into the aggregated reports. Runs once per invocation
355
+ * (the report is subscription-agnostic), building a global index from every
356
+ * report collected during the live scan so AZQR findings attach to their
357
+ * resource when present or create a stub otherwise.
358
+ *
359
+ * When the report is still masked, findings cannot match live resource IDs, so
360
+ * a warning advises re-running AZQR with `--mask=false`.
361
+ */
362
+ async function ingestAzqrReport(azqrReportPath, reports, logger) {
363
+ const report = await loadAzqrReport(azqrReportPath);
364
+ if (isAzqrReportMasked(report)) {
365
+ logger.warn("AZQR report has masked subscription IDs: findings may not match live" +
366
+ " resources and can appear as separate stub entries. Re-run with" +
367
+ " `azqr scan --mask=false` for accurate merging.");
368
+ }
369
+ const findings = azqrImpactedToFindings(report);
370
+ const reportsById = new Map(reports.map((r) => [(r.resource.id ?? "").toLowerCase(), r]));
371
+ for (const finding of findings) {
372
+ mergeFinding(finding, reports, reportsById);
373
+ }
374
+ logger.info(`AZQR: merged ${findings.length} finding(s) from ${azqrReportPath}`);
375
+ }
346
376
  function isResourceScopedFinding(resourceId) {
347
377
  return /\/providers\//i.test(resourceId);
348
378
  }
@@ -1 +1 @@
1
- {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/azure/analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../../src/azure/analyzer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"advisor.d.ts","sourceRoot":"","sources":["../../../src/azure/analyzers/advisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAOH,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG;IACvB,eAAe,EAAE;QACf,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;KACxE,CAAC;CACH,CAAC;AAEF,qEAAqE;AACrE,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D,CAAC;AAuBF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,CAAC,EAAE;IACpD,KAAK,CACH,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAC7C,cAAc,EAAE,MAAM,GACrB,iBAAiB,CAAC;CACtB,GAAG,oBAAoB,CAwCvB"}
1
+ {"version":3,"file":"advisor.d.ts","sourceRoot":"","sources":["../../../src/azure/analyzers/advisor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAOH,OAAO,KAAK,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,mBAAmB,CAAC;AAE3B,2EAA2E;AAC3E,KAAK,iBAAiB,GAAG;IACvB,eAAe,EAAE;QACf,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,GAAG,aAAa,CAAC,kBAAkB,CAAC,CAAC;KACxE,CAAC;CACH,CAAC;AAEF,qEAAqE;AACrE,KAAK,kBAAkB,GAAG;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC7C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,gBAAgB,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC3C,gBAAgB,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC5D,CAAC;AAuBF;;;;;;GAMG;AACH,wBAAgB,qBAAqB,CAAC,aAAa,CAAC,EAAE;IACpD,KAAK,CACH,UAAU,EAAE,mBAAmB,CAAC,YAAY,CAAC,EAC7C,cAAc,EAAE,MAAM,GACrB,iBAAiB,CAAC;CACtB,GAAG,oBAAoB,CAuCvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"advisor.js","sourceRoot":"","sources":["../../../src/azure/analyzers/advisor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"advisor.js","sourceRoot":"","sources":["../../../src/azure/analyzers/advisor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * AZQR report ingestion.
3
+ *
4
+ * Parses an AZQR (`azqr scan --json`) report and turns its `impacted`
5
+ * resources into the unified `Finding` model (`source: "azqr"`), keeping only
6
+ * the rows that carry FinOps signal so the SaveMoney output is not flooded with
7
+ * security / reliability / high-availability best-practice noise. Promoted rows
8
+ * fall into two classes (see {@link classifyAzqrRow}):
9
+ *
10
+ * - **cost** (`category: "cost"`): billable waste — rows AZQR categorises as
11
+ * `Cost`, or orphaned resources whose type actually incurs cost (public IPs,
12
+ * NAT gateways, application gateways, …).
13
+ * - **cleanup** (`category: "operationalExcellence"`): orphaned *free* resources
14
+ * (empty subnets, unattached NSGs, orphan API connections, …). They carry no
15
+ * direct cost but are cleanup candidates worth investigating.
16
+ *
17
+ * Orphans are detected via AZQR's `AOR` (Azure Orphan Resources) check source
18
+ * rather than fragile recommendation-text matching.
19
+ *
20
+ * The AZQR CLI masks subscription IDs by default (e.g.
21
+ * `/subscriptions/xxxxxxxx-…/`). Masked IDs do not match the real resource IDs
22
+ * produced by a live scan, so masked findings cannot be merged onto their
23
+ * resources — {@link isAzqrReportMasked} lets the orchestrator warn and advise
24
+ * re-running with `azqr scan --mask=false`.
25
+ *
26
+ * Scope note (CES-2192 / Fase 1): only `impacted` rows are ingested, enriched
27
+ * with `inventory` metadata when available. AZQR `advisor` rows are ignored to
28
+ * avoid duplicating SaveMoney's own Azure Advisor cost query.
29
+ */
30
+ import { z } from "zod";
31
+ import { type Finding } from "../finding.js";
32
+ /** A single `impacted` row from an AZQR JSON report (fields we consume). */
33
+ declare const azqrImpactedRowSchema: z.ZodObject<{
34
+ category: z.ZodOptional<z.ZodString>;
35
+ impact: z.ZodOptional<z.ZodString>;
36
+ learn: z.ZodOptional<z.ZodString>;
37
+ recommendation: z.ZodString;
38
+ recommendationId: z.ZodOptional<z.ZodString>;
39
+ resourceGroup: z.ZodOptional<z.ZodString>;
40
+ resourceId: z.ZodString;
41
+ resourceName: z.ZodOptional<z.ZodString>;
42
+ resourceType: z.ZodOptional<z.ZodString>;
43
+ source: z.ZodOptional<z.ZodString>;
44
+ subscriptionId: z.ZodOptional<z.ZodString>;
45
+ subscriptionName: z.ZodOptional<z.ZodString>;
46
+ }, z.core.$strip>;
47
+ /** A single `inventory` row from an AZQR JSON report (used for enrichment). */
48
+ declare const azqrInventoryRowSchema: z.ZodObject<{
49
+ location: z.ZodOptional<z.ZodString>;
50
+ resourceId: z.ZodString;
51
+ resourceName: z.ZodOptional<z.ZodString>;
52
+ resourceType: z.ZodOptional<z.ZodString>;
53
+ skuName: z.ZodOptional<z.ZodString>;
54
+ skuTier: z.ZodOptional<z.ZodString>;
55
+ subscriptionId: z.ZodOptional<z.ZodString>;
56
+ }, z.core.$strip>;
57
+ /**
58
+ * Lenient top-level schema. AZQR reports carry many sections we do not use
59
+ * (`advisor`, `defender`, `recommendations`, …); unknown keys are stripped and
60
+ * missing arrays default to empty so a partial/older report still parses.
61
+ */
62
+ declare const azqrReportSchema: z.ZodObject<{
63
+ impacted: z.ZodDefault<z.ZodArray<z.ZodObject<{
64
+ category: z.ZodOptional<z.ZodString>;
65
+ impact: z.ZodOptional<z.ZodString>;
66
+ learn: z.ZodOptional<z.ZodString>;
67
+ recommendation: z.ZodString;
68
+ recommendationId: z.ZodOptional<z.ZodString>;
69
+ resourceGroup: z.ZodOptional<z.ZodString>;
70
+ resourceId: z.ZodString;
71
+ resourceName: z.ZodOptional<z.ZodString>;
72
+ resourceType: z.ZodOptional<z.ZodString>;
73
+ source: z.ZodOptional<z.ZodString>;
74
+ subscriptionId: z.ZodOptional<z.ZodString>;
75
+ subscriptionName: z.ZodOptional<z.ZodString>;
76
+ }, z.core.$strip>>>;
77
+ inventory: z.ZodDefault<z.ZodArray<z.ZodObject<{
78
+ location: z.ZodOptional<z.ZodString>;
79
+ resourceId: z.ZodString;
80
+ resourceName: z.ZodOptional<z.ZodString>;
81
+ resourceType: z.ZodOptional<z.ZodString>;
82
+ skuName: z.ZodOptional<z.ZodString>;
83
+ skuTier: z.ZodOptional<z.ZodString>;
84
+ subscriptionId: z.ZodOptional<z.ZodString>;
85
+ }, z.core.$strip>>>;
86
+ }, z.core.$strip>;
87
+ export type AzqrImpactedRow = z.infer<typeof azqrImpactedRowSchema>;
88
+ export type AzqrInventoryRow = z.infer<typeof azqrInventoryRowSchema>;
89
+ export type AzqrReport = z.infer<typeof azqrReportSchema>;
90
+ /** How a promoted AZQR row is classified for reporting. */
91
+ export type AzqrOpportunityKind = "cleanup" | "cost";
92
+ /**
93
+ * Converts the promoted `impacted` rows of an AZQR report into findings.
94
+ * AZQR carries no monetary estimate, so `estimatedMonthlySavings` is left
95
+ * unset. Billable rows render as `cost` opportunities (keeping AZQR's impact as
96
+ * severity); orphaned free resources render as low-severity
97
+ * `operationalExcellence` cleanup candidates. All carry an `[azqr]` badge.
98
+ */
99
+ export declare function azqrImpactedToFindings(report: AzqrReport): Finding[];
100
+ /**
101
+ * Classifies an `impacted` row for FinOps reporting, or returns `null` to drop
102
+ * it as noise.
103
+ *
104
+ * - `"cost"` — AZQR categorises the row as a cost item, or it is an orphaned
105
+ * resource of a billable type (real savings potential).
106
+ * - `"cleanup"` — an orphaned resource of a *free* type (empty subnets,
107
+ * unattached NSGs, orphan API connections, …): no direct cost, but a cleanup
108
+ * candidate worth investigating.
109
+ * - `null` — everything else (security, reliability, high-availability and
110
+ * other best-practice rows) is treated as noise and dropped.
111
+ *
112
+ * Orphans are identified by AZQR's `AOR` check source, not by matching the
113
+ * recommendation text.
114
+ */
115
+ export declare function classifyAzqrRow(row: AzqrImpactedRow): AzqrOpportunityKind | null;
116
+ /**
117
+ * Detects whether the report still carries AZQR's default subscription-ID
118
+ * masking. Masked resource IDs cannot be matched against a live scan, so the
119
+ * caller should advise re-running with `azqr scan --mask=false`.
120
+ */
121
+ export declare function isAzqrReportMasked(report: AzqrReport): boolean;
122
+ /**
123
+ * Reads and parses an AZQR JSON report from disk.
124
+ *
125
+ * @throws Error when the file cannot be read or is not valid AZQR JSON; the
126
+ * underlying failure is preserved as `cause`.
127
+ */
128
+ export declare function loadAzqrReport(filePath: string): Promise<AzqrReport>;
129
+ /**
130
+ * Validates and parses an unknown value as an AZQR report.
131
+ *
132
+ * @throws Error (with the zod issue as `cause`) when the shape is invalid.
133
+ */
134
+ export declare function parseAzqrReport(raw: unknown): AzqrReport;
135
+ export {};
136
+ //# sourceMappingURL=azqr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azqr.d.ts","sourceRoot":"","sources":["../../src/azure/azqr.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,eAAe,CAAC;AAE7C,4EAA4E;AAC5E,QAAA,MAAM,qBAAqB;;;;;;;;;;;;;iBAazB,CAAC;AAEH,+EAA+E;AAC/E,QAAA,MAAM,sBAAsB;;;;;;;;iBAQ1B,CAAC;AAEH;;;;GAIG;AACH,QAAA,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;iBAGpB,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC;AACtE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAiC1D,2DAA2D;AAC3D,MAAM,MAAM,mBAAmB,GAAG,SAAS,GAAG,MAAM,CAAC;AAQrD;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,EAAE,CA0BpE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,eAAe,GACnB,mBAAmB,GAAG,IAAI,CAS5B;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,OAAO,CAM9D;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAoB1E;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,OAAO,GAAG,UAAU,CAQxD"}
@@ -0,0 +1,235 @@
1
+ /**
2
+ * AZQR report ingestion.
3
+ *
4
+ * Parses an AZQR (`azqr scan --json`) report and turns its `impacted`
5
+ * resources into the unified `Finding` model (`source: "azqr"`), keeping only
6
+ * the rows that carry FinOps signal so the SaveMoney output is not flooded with
7
+ * security / reliability / high-availability best-practice noise. Promoted rows
8
+ * fall into two classes (see {@link classifyAzqrRow}):
9
+ *
10
+ * - **cost** (`category: "cost"`): billable waste — rows AZQR categorises as
11
+ * `Cost`, or orphaned resources whose type actually incurs cost (public IPs,
12
+ * NAT gateways, application gateways, …).
13
+ * - **cleanup** (`category: "operationalExcellence"`): orphaned *free* resources
14
+ * (empty subnets, unattached NSGs, orphan API connections, …). They carry no
15
+ * direct cost but are cleanup candidates worth investigating.
16
+ *
17
+ * Orphans are detected via AZQR's `AOR` (Azure Orphan Resources) check source
18
+ * rather than fragile recommendation-text matching.
19
+ *
20
+ * The AZQR CLI masks subscription IDs by default (e.g.
21
+ * `/subscriptions/xxxxxxxx-…/`). Masked IDs do not match the real resource IDs
22
+ * produced by a live scan, so masked findings cannot be merged onto their
23
+ * resources — {@link isAzqrReportMasked} lets the orchestrator warn and advise
24
+ * re-running with `azqr scan --mask=false`.
25
+ *
26
+ * Scope note (CES-2192 / Fase 1): only `impacted` rows are ingested, enriched
27
+ * with `inventory` metadata when available. AZQR `advisor` rows are ignored to
28
+ * avoid duplicating SaveMoney's own Azure Advisor cost query.
29
+ */
30
+ import { readFile } from "node:fs/promises";
31
+ import { z } from "zod";
32
+ /** A single `impacted` row from an AZQR JSON report (fields we consume). */
33
+ const azqrImpactedRowSchema = z.object({
34
+ category: z.string().optional(),
35
+ impact: z.string().optional(),
36
+ learn: z.string().optional(),
37
+ recommendation: z.string(),
38
+ recommendationId: z.string().optional(),
39
+ resourceGroup: z.string().optional(),
40
+ resourceId: z.string(),
41
+ resourceName: z.string().optional(),
42
+ resourceType: z.string().optional(),
43
+ source: z.string().optional(),
44
+ subscriptionId: z.string().optional(),
45
+ subscriptionName: z.string().optional(),
46
+ });
47
+ /** A single `inventory` row from an AZQR JSON report (used for enrichment). */
48
+ const azqrInventoryRowSchema = z.object({
49
+ location: z.string().optional(),
50
+ resourceId: z.string(),
51
+ resourceName: z.string().optional(),
52
+ resourceType: z.string().optional(),
53
+ skuName: z.string().optional(),
54
+ skuTier: z.string().optional(),
55
+ subscriptionId: z.string().optional(),
56
+ });
57
+ /**
58
+ * Lenient top-level schema. AZQR reports carry many sections we do not use
59
+ * (`advisor`, `defender`, `recommendations`, …); unknown keys are stripped and
60
+ * missing arrays default to empty so a partial/older report still parses.
61
+ */
62
+ const azqrReportSchema = z.object({
63
+ impacted: z.array(azqrImpactedRowSchema).default([]),
64
+ inventory: z.array(azqrInventoryRowSchema).default([]),
65
+ });
66
+ /**
67
+ * Azure resource types whose orphaned/unassociated instances actually incur
68
+ * cost. AZQR's `AOR` (Azure Orphan Resources) check mixes these billable
69
+ * resources with free config-hygiene ones (NSGs, subnets, orphan API
70
+ * connections, private endpoints, …): the former are classified as `cost`
71
+ * opportunities, the latter as `cleanup` candidates.
72
+ */
73
+ const BILLABLE_ORPHAN_RESOURCE_TYPES = new Set([
74
+ "microsoft.compute/disks",
75
+ "microsoft.compute/snapshots",
76
+ "microsoft.network/applicationgateways",
77
+ "microsoft.network/ddosprotectionplans",
78
+ "microsoft.network/frontdoorwebapplicationfirewallpolicies",
79
+ "microsoft.network/loadbalancers",
80
+ "microsoft.network/natgateways",
81
+ "microsoft.network/publicipaddresses",
82
+ "microsoft.network/virtualnetworkgateways",
83
+ "microsoft.sql/servers/elasticpools",
84
+ "microsoft.web/serverfarms",
85
+ ]);
86
+ /**
87
+ * AZQR's check source for orphaned resources (the Azure Orphan Resources
88
+ * project). Every `impacted` row tagged with it is a provisioned-but-unused
89
+ * resource, so it is a reliable, text-independent orphan marker.
90
+ */
91
+ const ORPHAN_CHECK_SOURCE = "aor";
92
+ /** AZQR masks subscription GUID segments with runs of `x`. */
93
+ const MASK_MARKER = "xxxxxxxx";
94
+ const COST_REMEDIATION = "Review the resource and remove or right-size it if it is no longer needed to stop incurring cost.";
95
+ const CLEANUP_REMEDIATION = "Orphaned resource with no direct cost. Verify it is unused, then remove it to reduce clutter and management overhead.";
96
+ /**
97
+ * Converts the promoted `impacted` rows of an AZQR report into findings.
98
+ * AZQR carries no monetary estimate, so `estimatedMonthlySavings` is left
99
+ * unset. Billable rows render as `cost` opportunities (keeping AZQR's impact as
100
+ * severity); orphaned free resources render as low-severity
101
+ * `operationalExcellence` cleanup candidates. All carry an `[azqr]` badge.
102
+ */
103
+ export function azqrImpactedToFindings(report) {
104
+ const inventoryById = new Map(report.inventory.map((row) => [row.resourceId.toLowerCase(), row]));
105
+ const findings = [];
106
+ for (const row of report.impacted) {
107
+ const kind = classifyAzqrRow(row);
108
+ if (kind === null)
109
+ continue;
110
+ const inventory = inventoryById.get(row.resourceId.toLowerCase());
111
+ const cleanup = kind === "cleanup";
112
+ const remediation = cleanup ? CLEANUP_REMEDIATION : COST_REMEDIATION;
113
+ findings.push({
114
+ category: cleanup ? "operationalExcellence" : "cost",
115
+ code: row.recommendationId
116
+ ? `azqr.${row.recommendationId}`
117
+ : "azqr.impacted",
118
+ reason: buildReason(row, inventory),
119
+ recommendedAction: row.learn
120
+ ? `${remediation} Learn more: ${row.learn}`
121
+ : remediation,
122
+ resourceId: row.resourceId,
123
+ severity: cleanup ? "low" : mapAzqrImpact(row.impact),
124
+ source: "azqr",
125
+ });
126
+ }
127
+ return findings;
128
+ }
129
+ /**
130
+ * Classifies an `impacted` row for FinOps reporting, or returns `null` to drop
131
+ * it as noise.
132
+ *
133
+ * - `"cost"` — AZQR categorises the row as a cost item, or it is an orphaned
134
+ * resource of a billable type (real savings potential).
135
+ * - `"cleanup"` — an orphaned resource of a *free* type (empty subnets,
136
+ * unattached NSGs, orphan API connections, …): no direct cost, but a cleanup
137
+ * candidate worth investigating.
138
+ * - `null` — everything else (security, reliability, high-availability and
139
+ * other best-practice rows) is treated as noise and dropped.
140
+ *
141
+ * Orphans are identified by AZQR's `AOR` check source, not by matching the
142
+ * recommendation text.
143
+ */
144
+ export function classifyAzqrRow(row) {
145
+ if ((row.category ?? "").toLowerCase().includes("cost")) {
146
+ return "cost";
147
+ }
148
+ if ((row.source ?? "").toLowerCase() !== ORPHAN_CHECK_SOURCE) {
149
+ return null;
150
+ }
151
+ const resourceType = (row.resourceType ?? "").toLowerCase();
152
+ return BILLABLE_ORPHAN_RESOURCE_TYPES.has(resourceType) ? "cost" : "cleanup";
153
+ }
154
+ /**
155
+ * Detects whether the report still carries AZQR's default subscription-ID
156
+ * masking. Masked resource IDs cannot be matched against a live scan, so the
157
+ * caller should advise re-running with `azqr scan --mask=false`.
158
+ */
159
+ export function isAzqrReportMasked(report) {
160
+ return report.impacted.some((row) => row.resourceId.includes(MASK_MARKER) ||
161
+ (row.subscriptionId?.includes(MASK_MARKER) ?? false));
162
+ }
163
+ /**
164
+ * Reads and parses an AZQR JSON report from disk.
165
+ *
166
+ * @throws Error when the file cannot be read or is not valid AZQR JSON; the
167
+ * underlying failure is preserved as `cause`.
168
+ */
169
+ export async function loadAzqrReport(filePath) {
170
+ let content;
171
+ try {
172
+ content = await readFile(filePath, "utf8");
173
+ }
174
+ catch (error) {
175
+ throw new Error(`Cannot read AZQR report at "${filePath}"`, {
176
+ cause: error,
177
+ });
178
+ }
179
+ let json;
180
+ try {
181
+ json = JSON.parse(content);
182
+ }
183
+ catch (error) {
184
+ throw new Error(`AZQR report at "${filePath}" is not valid JSON`, {
185
+ cause: error,
186
+ });
187
+ }
188
+ return parseAzqrReport(json);
189
+ }
190
+ /**
191
+ * Validates and parses an unknown value as an AZQR report.
192
+ *
193
+ * @throws Error (with the zod issue as `cause`) when the shape is invalid.
194
+ */
195
+ export function parseAzqrReport(raw) {
196
+ const result = azqrReportSchema.safeParse(raw);
197
+ if (!result.success) {
198
+ throw new Error(`Invalid AZQR report: ${result.error.message}`, {
199
+ cause: result.error,
200
+ });
201
+ }
202
+ return result.data;
203
+ }
204
+ /**
205
+ * Builds the finding reason from the AZQR recommendation, appending SKU / tier
206
+ * / location context from the matching `inventory` row when available.
207
+ */
208
+ function buildReason(row, inventory) {
209
+ const base = row.recommendation.trim();
210
+ const sentence = base.endsWith(".") ? base : `${base}.`;
211
+ const context = [];
212
+ if (inventory?.skuName)
213
+ context.push(inventory.skuName);
214
+ if (inventory?.skuTier && inventory.skuTier !== inventory.skuName) {
215
+ context.push(inventory.skuTier);
216
+ }
217
+ if (inventory?.location)
218
+ context.push(inventory.location);
219
+ return context.length > 0 ? `${sentence} (${context.join(", ")})` : sentence;
220
+ }
221
+ /**
222
+ * Maps AZQR/APRL `impact` (`High` | `Medium` | `Low`) onto the SaveMoney
223
+ * `CostRisk` scale, defaulting to `low` for unknown values.
224
+ */
225
+ function mapAzqrImpact(impact) {
226
+ switch (impact?.toLowerCase()) {
227
+ case "high":
228
+ return "high";
229
+ case "medium":
230
+ return "medium";
231
+ default:
232
+ return "low";
233
+ }
234
+ }
235
+ //# sourceMappingURL=azqr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"azqr.js","sourceRoot":"","sources":["../../src/azure/azqr.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/azure/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAwCtB;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9D"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/azure/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAI9C;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,eAAe,CACnC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,WAAW,CAAC,CAyCtB;AAED;;;;;GAKG;AACH,wBAAsB,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAW9D"}
@@ -35,6 +35,7 @@ export async function loadAzureConfig(configPath) {
35
35
  const rawYaml = yaml.load(raw);
36
36
  const parsed = ConfigSchema.parse(rawYaml);
37
37
  return {
38
+ azqrReportPath: parsed.azure.azqrReportPath,
38
39
  concurrency: parsed.azure.concurrency,
39
40
  preferredLocation: parsed.azure.preferredLocation,
40
41
  sources: parsed.azure.sources,