medusa-stats 1.0.5

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 (180) hide show
  1. package/.medusa/server/src/admin/composite.png +0 -0
  2. package/.medusa/server/src/admin/index.js +10512 -0
  3. package/.medusa/server/src/admin/index.mjs +10510 -0
  4. package/.medusa/server/src/admin/params.png +0 -0
  5. package/.medusa/server/src/admin/view.png +0 -0
  6. package/.medusa/server/src/admin/visualizations.png +0 -0
  7. package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.d.ts +6 -0
  8. package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.js +18 -0
  9. package/.medusa/server/src/api/admin/statistics/alert-logs/route.d.ts +6 -0
  10. package/.medusa/server/src/api/admin/statistics/alert-logs/route.js +33 -0
  11. package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.d.ts +6 -0
  12. package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.js +23 -0
  13. package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.d.ts +17 -0
  14. package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.js +64 -0
  15. package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.d.ts +6 -0
  16. package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.js +18 -0
  17. package/.medusa/server/src/api/admin/statistics/alerts/route.d.ts +12 -0
  18. package/.medusa/server/src/api/admin/statistics/alerts/route.js +94 -0
  19. package/.medusa/server/src/api/admin/statistics/charts/[id]/route.d.ts +17 -0
  20. package/.medusa/server/src/api/admin/statistics/charts/[id]/route.js +50 -0
  21. package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.d.ts +15 -0
  22. package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.js +40 -0
  23. package/.medusa/server/src/api/admin/statistics/charts/route.d.ts +4 -0
  24. package/.medusa/server/src/api/admin/statistics/charts/route.js +55 -0
  25. package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.d.ts +7 -0
  26. package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.js +23 -0
  27. package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.d.ts +7 -0
  28. package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.js +15 -0
  29. package/.medusa/server/src/api/admin/statistics/options/[id]/route.d.ts +17 -0
  30. package/.medusa/server/src/api/admin/statistics/options/[id]/route.js +69 -0
  31. package/.medusa/server/src/api/admin/statistics/options/route.d.ts +12 -0
  32. package/.medusa/server/src/api/admin/statistics/options/route.js +87 -0
  33. package/.medusa/server/src/api/admin/statistics/providers/[id]/route.d.ts +6 -0
  34. package/.medusa/server/src/api/admin/statistics/providers/[id]/route.js +18 -0
  35. package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.d.ts +6 -0
  36. package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.js +18 -0
  37. package/.medusa/server/src/api/admin/statistics/providers/route.d.ts +7 -0
  38. package/.medusa/server/src/api/admin/statistics/providers/route.js +57 -0
  39. package/.medusa/server/src/api/admin/statistics/utils/option-graph.d.ts +3 -0
  40. package/.medusa/server/src/api/admin/statistics/utils/option-graph.js +34 -0
  41. package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.d.ts +7 -0
  42. package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.js +21 -0
  43. package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.d.ts +7 -0
  44. package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.js +21 -0
  45. package/.medusa/server/src/api/admin/statistics/views/[id]/route.d.ts +17 -0
  46. package/.medusa/server/src/api/admin/statistics/views/[id]/route.js +71 -0
  47. package/.medusa/server/src/api/admin/statistics/views/route.d.ts +12 -0
  48. package/.medusa/server/src/api/admin/statistics/views/route.js +74 -0
  49. package/.medusa/server/src/api/middlewares.d.ts +2 -0
  50. package/.medusa/server/src/api/middlewares.js +194 -0
  51. package/.medusa/server/src/api/validation/statistics/schemas.d.ts +1013 -0
  52. package/.medusa/server/src/api/validation/statistics/schemas.js +288 -0
  53. package/.medusa/server/src/index.d.ts +1 -0
  54. package/.medusa/server/src/index.js +18 -0
  55. package/.medusa/server/src/jobs/evaluate-statistics-alerts.d.ts +6 -0
  56. package/.medusa/server/src/jobs/evaluate-statistics-alerts.js +110 -0
  57. package/.medusa/server/src/links/statistics-alert-user.d.ts +2 -0
  58. package/.medusa/server/src/links/statistics-alert-user.js +16 -0
  59. package/.medusa/server/src/links/statistics-option-user.d.ts +2 -0
  60. package/.medusa/server/src/links/statistics-option-user.js +16 -0
  61. package/.medusa/server/src/loaders/statistics/index.d.ts +5 -0
  62. package/.medusa/server/src/loaders/statistics/index.js +47 -0
  63. package/.medusa/server/src/modules/statistics/index.d.ts +107 -0
  64. package/.medusa/server/src/modules/statistics/index.js +32 -0
  65. package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.d.ts +5 -0
  66. package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.js +57 -0
  67. package/.medusa/server/src/modules/statistics/models/alert-log.d.ts +74 -0
  68. package/.medusa/server/src/modules/statistics/models/alert-log.js +16 -0
  69. package/.medusa/server/src/modules/statistics/models/alert.d.ts +74 -0
  70. package/.medusa/server/src/modules/statistics/models/alert.js +24 -0
  71. package/.medusa/server/src/modules/statistics/models/chart.d.ts +81 -0
  72. package/.medusa/server/src/modules/statistics/models/chart.js +28 -0
  73. package/.medusa/server/src/modules/statistics/models/index.d.ts +7 -0
  74. package/.medusa/server/src/modules/statistics/models/index.js +24 -0
  75. package/.medusa/server/src/modules/statistics/models/option-input.d.ts +135 -0
  76. package/.medusa/server/src/modules/statistics/models/option-input.js +27 -0
  77. package/.medusa/server/src/modules/statistics/models/option.d.ts +78 -0
  78. package/.medusa/server/src/modules/statistics/models/option.js +41 -0
  79. package/.medusa/server/src/modules/statistics/models/provider.d.ts +75 -0
  80. package/.medusa/server/src/modules/statistics/models/provider.js +15 -0
  81. package/.medusa/server/src/modules/statistics/models/view.d.ts +79 -0
  82. package/.medusa/server/src/modules/statistics/models/view.js +30 -0
  83. package/.medusa/server/src/modules/statistics/providers/index.d.ts +1 -0
  84. package/.medusa/server/src/modules/statistics/providers/index.js +18 -0
  85. package/.medusa/server/src/modules/statistics/providers/provider.d.ts +254 -0
  86. package/.medusa/server/src/modules/statistics/providers/provider.js +307 -0
  87. package/.medusa/server/src/modules/statistics/service.d.ts +953 -0
  88. package/.medusa/server/src/modules/statistics/service.js +190 -0
  89. package/.medusa/server/src/modules/statistics/utils/dependency-option-map.d.ts +13 -0
  90. package/.medusa/server/src/modules/statistics/utils/dependency-option-map.js +67 -0
  91. package/.medusa/server/src/modules/statistics/utils/period-utils.d.ts +23 -0
  92. package/.medusa/server/src/modules/statistics/utils/period-utils.js +78 -0
  93. package/.medusa/server/src/modules/statistics/utils/time-series-utils.d.ts +6 -0
  94. package/.medusa/server/src/modules/statistics/utils/time-series-utils.js +8 -0
  95. package/.medusa/server/src/providers/common/index.d.ts +2 -0
  96. package/.medusa/server/src/providers/common/index.js +1232 -0
  97. package/.medusa/server/src/providers/composite/index.d.ts +2 -0
  98. package/.medusa/server/src/providers/composite/index.js +147 -0
  99. package/.medusa/server/src/workflows/statistics/calculate-single-statistic.d.ts +15 -0
  100. package/.medusa/server/src/workflows/statistics/calculate-single-statistic.js +28 -0
  101. package/.medusa/server/src/workflows/statistics/calculate-statistics.d.ts +20 -0
  102. package/.medusa/server/src/workflows/statistics/calculate-statistics.js +15 -0
  103. package/.medusa/server/src/workflows/statistics/calculate-view.d.ts +31 -0
  104. package/.medusa/server/src/workflows/statistics/calculate-view.js +30 -0
  105. package/.medusa/server/src/workflows/statistics/clone-view.d.ts +227 -0
  106. package/.medusa/server/src/workflows/statistics/clone-view.js +10 -0
  107. package/.medusa/server/src/workflows/statistics/create-alert.d.ts +139 -0
  108. package/.medusa/server/src/workflows/statistics/create-alert.js +12 -0
  109. package/.medusa/server/src/workflows/statistics/create-chart.d.ts +122 -0
  110. package/.medusa/server/src/workflows/statistics/create-chart.js +14 -0
  111. package/.medusa/server/src/workflows/statistics/create-view-with-options.d.ts +1342 -0
  112. package/.medusa/server/src/workflows/statistics/create-view-with-options.js +29 -0
  113. package/.medusa/server/src/workflows/statistics/delete-chart.d.ts +10 -0
  114. package/.medusa/server/src/workflows/statistics/delete-chart.js +14 -0
  115. package/.medusa/server/src/workflows/statistics/evaluate-alerts.d.ts +28 -0
  116. package/.medusa/server/src/workflows/statistics/evaluate-alerts.js +67 -0
  117. package/.medusa/server/src/workflows/statistics/get-available-statistics.d.ts +5 -0
  118. package/.medusa/server/src/workflows/statistics/get-available-statistics.js +10 -0
  119. package/.medusa/server/src/workflows/statistics/index.d.ts +14 -0
  120. package/.medusa/server/src/workflows/statistics/index.js +31 -0
  121. package/.medusa/server/src/workflows/statistics/manage-chart-statistics.d.ts +12 -0
  122. package/.medusa/server/src/workflows/statistics/manage-chart-statistics.js +14 -0
  123. package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.d.ts +37 -0
  124. package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.js +222 -0
  125. package/.medusa/server/src/workflows/statistics/steps/clone-view.d.ts +227 -0
  126. package/.medusa/server/src/workflows/statistics/steps/clone-view.js +39 -0
  127. package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.d.ts +17 -0
  128. package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.js +50 -0
  129. package/.medusa/server/src/workflows/statistics/steps/create-alert.d.ts +120 -0
  130. package/.medusa/server/src/workflows/statistics/steps/create-alert.js +21 -0
  131. package/.medusa/server/src/workflows/statistics/steps/create-chart.d.ts +118 -0
  132. package/.medusa/server/src/workflows/statistics/steps/create-chart.js +19 -0
  133. package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.d.ts +117 -0
  134. package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.js +16 -0
  135. package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.d.ts +119 -0
  136. package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.js +16 -0
  137. package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.d.ts +22 -0
  138. package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.js +64 -0
  139. package/.medusa/server/src/workflows/statistics/steps/delete-chart.d.ts +6 -0
  140. package/.medusa/server/src/workflows/statistics/steps/delete-chart.js +17 -0
  141. package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.d.ts +17 -0
  142. package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.js +41 -0
  143. package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.d.ts +15 -0
  144. package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.js +109 -0
  145. package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.d.ts +12 -0
  146. package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.js +86 -0
  147. package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.d.ts +112 -0
  148. package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.js +16 -0
  149. package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.d.ts +4 -0
  150. package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.js +39 -0
  151. package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.d.ts +112 -0
  152. package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.js +11 -0
  153. package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.d.ts +112 -0
  154. package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.js +20 -0
  155. package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.d.ts +8 -0
  156. package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.js +26 -0
  157. package/.medusa/server/src/workflows/statistics/steps/update-chart.d.ts +117 -0
  158. package/.medusa/server/src/workflows/statistics/steps/update-chart.js +32 -0
  159. package/.medusa/server/src/workflows/statistics/steps/update-view.d.ts +120 -0
  160. package/.medusa/server/src/workflows/statistics/steps/update-view.js +18 -0
  161. package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.d.ts +1 -0
  162. package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.js +34 -0
  163. package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.d.ts +21 -0
  164. package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.js +43 -0
  165. package/.medusa/server/src/workflows/statistics/steps/validate-view-input.d.ts +10 -0
  166. package/.medusa/server/src/workflows/statistics/steps/validate-view-input.js +15 -0
  167. package/.medusa/server/src/workflows/statistics/update-chart.d.ts +120 -0
  168. package/.medusa/server/src/workflows/statistics/update-chart.js +13 -0
  169. package/.medusa/server/src/workflows/statistics/update-view-configuration.d.ts +128 -0
  170. package/.medusa/server/src/workflows/statistics/update-view-configuration.js +18 -0
  171. package/.medusa/server/src/workflows/statistics/utils/cache-utils.d.ts +60 -0
  172. package/.medusa/server/src/workflows/statistics/utils/cache-utils.js +66 -0
  173. package/.medusa/server/src/workflows/statistics/utils/dependency-graph.d.ts +51 -0
  174. package/.medusa/server/src/workflows/statistics/utils/dependency-graph.js +131 -0
  175. package/.medusa/server/src/workflows/statistics/utils/parameter-utils.d.ts +54 -0
  176. package/.medusa/server/src/workflows/statistics/utils/parameter-utils.js +147 -0
  177. package/.medusa/server/src/workflows/statistics/validate-option-configuration.d.ts +9 -0
  178. package/.medusa/server/src/workflows/statistics/validate-option-configuration.js +35 -0
  179. package/README.md +310 -0
  180. package/package.json +87 -0
@@ -0,0 +1,29 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createViewWithOptionsWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const validate_view_input_1 = require("./steps/validate-view-input");
6
+ const create_statistics_view_1 = require("./steps/create-statistics-view");
7
+ const fetch_available_statistics_1 = require("./steps/fetch-available-statistics");
8
+ const validate_option_parameters_1 = require("./steps/validate-option-parameters");
9
+ const create_statistics_options_1 = require("./steps/create-statistics-options");
10
+ exports.createViewWithOptionsWorkflow = (0, workflows_sdk_1.createWorkflow)("create-view-with-options", (input) => {
11
+ (0, validate_view_input_1.validateViewInputStep)(input.view);
12
+ const view = (0, create_statistics_view_1.createStatisticsViewStep)(input.view);
13
+ const providerIds = (0, workflows_sdk_1.transform)(input.options, (input) => {
14
+ return [...new Set(input.map(opt => opt.provider_id))];
15
+ });
16
+ const availableStatistics = (0, fetch_available_statistics_1.fetchAvailableStatisticsStep)({});
17
+ (0, validate_option_parameters_1.validateOptionParametersStep)({
18
+ options: input.options,
19
+ availableStatistics
20
+ });
21
+ const createdOptions = (0, create_statistics_options_1.createStatisticsOptionsStep)({
22
+ options: input.options
23
+ });
24
+ return new workflows_sdk_1.WorkflowResponse({
25
+ view,
26
+ options: createdOptions
27
+ });
28
+ });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLXZpZXctd2l0aC1vcHRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGF0aXN0aWNzL2NyZWF0ZS12aWV3LXdpdGgtb3B0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBZ0c7QUFDaEcscUVBQW9FO0FBQ3BFLDJFQUEwRTtBQUMxRSxtRkFBa0Y7QUFDbEYsbUZBQWtGO0FBQ2xGLGlGQUFnRjtBQXFCbkUsUUFBQSw2QkFBNkIsR0FBRyxJQUFBLDhCQUFjLEVBQ3ZELDBCQUEwQixFQUMxQixDQUFDLEtBQWlDLEVBQUUsRUFBRTtJQUVsQyxJQUFBLDJDQUFxQixFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUdsQyxNQUFNLElBQUksR0FBRyxJQUFBLGlEQUF3QixFQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUdsRCxNQUFNLFdBQVcsR0FBRyxJQUFBLHlCQUFTLEVBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDLEtBQUssRUFBRSxFQUFFO1FBQ25ELE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQzNELENBQUMsQ0FBQyxDQUFDO0lBRUgsTUFBTSxtQkFBbUIsR0FBRyxJQUFBLHlEQUE0QixFQUFDLEVBQUUsQ0FBQyxDQUFDO0lBRzdELElBQUEseURBQTRCLEVBQUM7UUFDekIsT0FBTyxFQUFFLEtBQUssQ0FBQyxPQUFPO1FBQ3RCLG1CQUFtQjtLQUN0QixDQUFDLENBQUM7SUFHSCxNQUFNLGNBQWMsR0FBRyxJQUFBLHVEQUEyQixFQUFDO1FBQy9DLE9BQU8sRUFBRSxLQUFLLENBQUMsT0FBTztLQUN6QixDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksZ0NBQWdCLENBQUM7UUFDeEIsSUFBSTtRQUNKLE9BQU8sRUFBRSxjQUFjO0tBQzFCLENBQUMsQ0FBQztBQUNQLENBQUMsQ0FDSixDQUFDIn0=
@@ -0,0 +1,10 @@
1
+ export interface DeleteChartInput {
2
+ id: string;
3
+ }
4
+ /**
5
+ * Deletes a chart.
6
+ * Associated statistics (series) are not deleted, only unlinked from the chart.
7
+ */
8
+ export declare const deleteChartWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<DeleteChartInput, {
9
+ success: boolean;
10
+ }, []>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deleteChartWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const delete_chart_1 = require("./steps/delete-chart");
6
+ /**
7
+ * Deletes a chart.
8
+ * Associated statistics (series) are not deleted, only unlinked from the chart.
9
+ */
10
+ exports.deleteChartWorkflow = (0, workflows_sdk_1.createWorkflow)("delete-chart", (input) => {
11
+ const result = (0, delete_chart_1.deleteChartStep)(input);
12
+ return new workflows_sdk_1.WorkflowResponse(result);
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVsZXRlLWNoYXJ0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGF0aXN0aWNzL2RlbGV0ZS1jaGFydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUY7QUFDckYsdURBQXVEO0FBTXZEOzs7R0FHRztBQUNVLFFBQUEsbUJBQW1CLEdBQUcsSUFBQSw4QkFBYyxFQUM3QyxjQUFjLEVBQ2QsQ0FBQyxLQUF1QixFQUFFLEVBQUU7SUFDeEIsTUFBTSxNQUFNLEdBQUcsSUFBQSw4QkFBZSxFQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXRDLE9BQU8sSUFBSSxnQ0FBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQ0osQ0FBQyJ9
@@ -0,0 +1,28 @@
1
+ export interface EvaluateAlertsInput {
2
+ option_id: string;
3
+ calculated_value: any;
4
+ evaluation_scope?: {
5
+ periodStart?: Date;
6
+ periodEnd?: Date;
7
+ interval?: number;
8
+ };
9
+ }
10
+ /**
11
+ * Workflow: Evaluate Alerts After Calculation
12
+ *
13
+ * Purpose: Check alert conditions after statistic calculation and trigger notifications
14
+ *
15
+ * Steps:
16
+ * - fetch-active-alerts-for-option - Get all enabled alerts for calculated option
17
+ * - extract-alert-values - Extract current and reference values from calculated result
18
+ * - evaluate-each-condition - Check if alert conditions are met
19
+ * - check-cooldown-period - Verify alert hasn't fired recently (rate limiting)
20
+ * - emit-alert-triggered-events - Emit events for each triggered alert
21
+ * - create-alert-log-entries - Record alert triggers and delivery status
22
+ */
23
+ export declare const evaluateAlertsWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<EvaluateAlertsInput, {
24
+ alerts_evaluated: number;
25
+ alerts_triggered: number;
26
+ alert_logs: any[];
27
+ events_emitted: number;
28
+ }, []>;
@@ -0,0 +1,67 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluateAlertsWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const fetch_active_alerts_for_option_1 = require("./steps/fetch-active-alerts-for-option");
6
+ const extract_alert_values_1 = require("./steps/extract-alert-values");
7
+ const evaluate_each_condition_1 = require("./steps/evaluate-each-condition");
8
+ const dedupe_alerts_1 = require("./steps/dedupe-alerts");
9
+ const create_alert_log_entries_1 = require("./steps/create-alert-log-entries");
10
+ const emit_alert_events_1 = require("./steps/emit-alert-events");
11
+ /**
12
+ * Workflow: Evaluate Alerts After Calculation
13
+ *
14
+ * Purpose: Check alert conditions after statistic calculation and trigger notifications
15
+ *
16
+ * Steps:
17
+ * - fetch-active-alerts-for-option - Get all enabled alerts for calculated option
18
+ * - extract-alert-values - Extract current and reference values from calculated result
19
+ * - evaluate-each-condition - Check if alert conditions are met
20
+ * - check-cooldown-period - Verify alert hasn't fired recently (rate limiting)
21
+ * - emit-alert-triggered-events - Emit events for each triggered alert
22
+ * - create-alert-log-entries - Record alert triggers and delivery status
23
+ */
24
+ exports.evaluateAlertsWorkflow = (0, workflows_sdk_1.createWorkflow)("evaluate-alerts", (input) => {
25
+ const alerts = (0, fetch_active_alerts_for_option_1.fetchActiveAlertsForOptionStep)({ option_id: input.option_id });
26
+ const shouldContinue = (0, workflows_sdk_1.transform)({ alerts }, (data) => {
27
+ return data.alerts && data.alerts.length > 0;
28
+ });
29
+ const current_values = (0, workflows_sdk_1.transform)({ input }, (data) => {
30
+ return { [data.input.option_id]: data.input.calculated_value };
31
+ });
32
+ const extracted_values = (0, extract_alert_values_1.extractAlertValuesStep)({
33
+ alerts,
34
+ current_values
35
+ });
36
+ const evaluation_results = (0, evaluate_each_condition_1.evaluateEachConditionStep)({
37
+ alerts,
38
+ extracted_values
39
+ });
40
+ const allowed_alerts = (0, dedupe_alerts_1.dedupeAlertsStep)({
41
+ alerts,
42
+ evaluation_results,
43
+ evaluation_scope: input.evaluation_scope,
44
+ });
45
+ const emitted_event_ids = (0, emit_alert_events_1.emitAlertEventsStep)({
46
+ alerts,
47
+ evaluation_results,
48
+ allowed_alerts,
49
+ extracted_values
50
+ });
51
+ const alert_logs = (0, create_alert_log_entries_1.createAlertLogEntriesStep)({
52
+ alerts,
53
+ evaluation_results,
54
+ allowed_alerts,
55
+ extracted_values
56
+ });
57
+ const summary = (0, workflows_sdk_1.transform)({ alerts, allowed_alerts, alert_logs, emitted_event_ids }, (data) => {
58
+ return {
59
+ alerts_evaluated: data.alerts?.length || 0,
60
+ alerts_triggered: data.allowed_alerts?.length || 0,
61
+ alert_logs: data.alert_logs,
62
+ events_emitted: data.emitted_event_ids?.length || 0
63
+ };
64
+ });
65
+ return new workflows_sdk_1.WorkflowResponse(summary);
66
+ });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGUtYWxlcnRzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGF0aXN0aWNzL2V2YWx1YXRlLWFsZXJ0cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBc0c7QUFDdEcsMkZBQXdGO0FBQ3hGLHVFQUFzRTtBQUN0RSw2RUFBNEU7QUFDNUUseURBQXlEO0FBQ3pELCtFQUE2RTtBQUM3RSxpRUFBZ0U7QUFZaEU7Ozs7Ozs7Ozs7OztHQVlHO0FBQ1UsUUFBQSxzQkFBc0IsR0FBRyxJQUFBLDhCQUFjLEVBQ2hELGlCQUFpQixFQUNqQixDQUFDLEtBQTBCLEVBQUUsRUFBRTtJQUUzQixNQUFNLE1BQU0sR0FBRyxJQUFBLCtEQUE4QixFQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDO0lBRzlFLE1BQU0sY0FBYyxHQUFHLElBQUEseUJBQVMsRUFBQyxFQUFFLE1BQU0sRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztJQUdILE1BQU0sY0FBYyxHQUFHLElBQUEseUJBQVMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDakQsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFDbkUsQ0FBQyxDQUFDLENBQUM7SUFFSCxNQUFNLGdCQUFnQixHQUFHLElBQUEsNkNBQXNCLEVBQUM7UUFDNUMsTUFBTTtRQUNOLGNBQWM7S0FDakIsQ0FBQyxDQUFDO0lBR0gsTUFBTSxrQkFBa0IsR0FBRyxJQUFBLG1EQUF5QixFQUFDO1FBQ2pELE1BQU07UUFDTixnQkFBZ0I7S0FDbkIsQ0FBQyxDQUFDO0lBR0gsTUFBTSxjQUFjLEdBQUcsSUFBQSxnQ0FBZ0IsRUFBQztRQUNwQyxNQUFNO1FBQ04sa0JBQWtCO1FBQ2xCLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxnQkFBZ0I7S0FDM0MsQ0FBQyxDQUFDO0lBSUgsTUFBTSxpQkFBaUIsR0FBRyxJQUFBLHVDQUFtQixFQUFDO1FBQzFDLE1BQU07UUFDTixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGdCQUFnQjtLQUNuQixDQUFDLENBQUM7SUFHSCxNQUFNLFVBQVUsR0FBRyxJQUFBLG9EQUF5QixFQUFDO1FBQ3pDLE1BQU07UUFDTixrQkFBa0I7UUFDbEIsY0FBYztRQUNkLGdCQUFnQjtLQUNuQixDQUFDLENBQUM7SUFFSCxNQUFNLE9BQU8sR0FBRyxJQUFBLHlCQUFTLEVBQUMsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxpQkFBaUIsRUFBRSxFQUFFLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDMUYsT0FBTztZQUNILGdCQUFnQixFQUFFLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxJQUFJLENBQUM7WUFDMUMsZ0JBQWdCLEVBQUUsSUFBSSxDQUFDLGNBQWMsRUFBRSxNQUFNLElBQUksQ0FBQztZQUNsRCxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVU7WUFDM0IsY0FBYyxFQUFFLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxNQUFNLElBQUksQ0FBQztTQUN0RCxDQUFDO0lBQ04sQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLElBQUksZ0NBQWdCLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDekMsQ0FBQyxDQUNKLENBQUMifQ==
@@ -0,0 +1,5 @@
1
+ export interface GetAvailableStatisticsInput {
2
+ provider_id?: string;
3
+ sales_channel_id?: string;
4
+ }
5
+ export declare const getAvailableStatisticsWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<GetAvailableStatisticsInput, Record<string, any[]>, []>;
@@ -0,0 +1,10 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getAvailableStatisticsWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const fetch_available_statistics_1 = require("./steps/fetch-available-statistics");
6
+ exports.getAvailableStatisticsWorkflow = (0, workflows_sdk_1.createWorkflow)("get-available-statistics", (input) => {
7
+ const result = (0, fetch_available_statistics_1.fetchAvailableStatisticsStep)(input);
8
+ return new workflows_sdk_1.WorkflowResponse(result);
9
+ });
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2V0LWF2YWlsYWJsZS1zdGF0aXN0aWNzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9zdGF0aXN0aWNzL2dldC1hdmFpbGFibGUtc3RhdGlzdGljcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFBcUY7QUFDckYsbUZBQWtGO0FBT3JFLFFBQUEsOEJBQThCLEdBQUcsSUFBQSw4QkFBYyxFQUN4RCwwQkFBMEIsRUFDMUIsQ0FBQyxLQUFrQyxFQUFFLEVBQUU7SUFDbkMsTUFBTSxNQUFNLEdBQUcsSUFBQSx5REFBNEIsRUFBQyxLQUFLLENBQUMsQ0FBQztJQUVuRCxPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDeEMsQ0FBQyxDQUNKLENBQUMifQ==
@@ -0,0 +1,14 @@
1
+ export * from "./create-view-with-options";
2
+ export * from "./calculate-view";
3
+ export * from "./calculate-statistics";
4
+ export * from "./calculate-single-statistic";
5
+ export * from "./update-view-configuration";
6
+ export * from "./validate-option-configuration";
7
+ export * from "./clone-view";
8
+ export * from "./create-alert";
9
+ export * from "./get-available-statistics";
10
+ export * from "./evaluate-alerts";
11
+ export * from "./create-chart";
12
+ export * from "./update-chart";
13
+ export * from "./delete-chart";
14
+ export * from "./manage-chart-statistics";
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
+ };
16
+ Object.defineProperty(exports, "__esModule", { value: true });
17
+ __exportStar(require("./create-view-with-options"), exports);
18
+ __exportStar(require("./calculate-view"), exports);
19
+ __exportStar(require("./calculate-statistics"), exports);
20
+ __exportStar(require("./calculate-single-statistic"), exports);
21
+ __exportStar(require("./update-view-configuration"), exports);
22
+ __exportStar(require("./validate-option-configuration"), exports);
23
+ __exportStar(require("./clone-view"), exports);
24
+ __exportStar(require("./create-alert"), exports);
25
+ __exportStar(require("./get-available-statistics"), exports);
26
+ __exportStar(require("./evaluate-alerts"), exports);
27
+ __exportStar(require("./create-chart"), exports);
28
+ __exportStar(require("./update-chart"), exports);
29
+ __exportStar(require("./delete-chart"), exports);
30
+ __exportStar(require("./manage-chart-statistics"), exports);
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0YXRpc3RpY3MvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDZEQUEyQztBQUMzQyxtREFBaUM7QUFDakMseURBQXVDO0FBQ3ZDLCtEQUE2QztBQUM3Qyw4REFBNEM7QUFDNUMsa0VBQWdEO0FBQ2hELCtDQUE2QjtBQUM3QixpREFBK0I7QUFDL0IsNkRBQTJDO0FBQzNDLG9EQUFrQztBQUNsQyxpREFBK0I7QUFDL0IsaURBQStCO0FBQy9CLGlEQUErQjtBQUMvQiw0REFBMEMifQ==
@@ -0,0 +1,12 @@
1
+ export interface ManageChartStatisticsInput {
2
+ chart_id: string;
3
+ add_statistic_ids?: string[];
4
+ remove_statistic_ids?: string[];
5
+ }
6
+ /**
7
+ * Manages statistics (series) in a chart.
8
+ * Can add and/or remove statistics in a single operation.
9
+ */
10
+ export declare const manageChartStatisticsWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<ManageChartStatisticsInput, {
11
+ success: boolean;
12
+ }, []>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.manageChartStatisticsWorkflow = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const manage_chart_statistics_1 = require("./steps/manage-chart-statistics");
6
+ /**
7
+ * Manages statistics (series) in a chart.
8
+ * Can add and/or remove statistics in a single operation.
9
+ */
10
+ exports.manageChartStatisticsWorkflow = (0, workflows_sdk_1.createWorkflow)("manage-chart-statistics", (input) => {
11
+ const result = (0, manage_chart_statistics_1.manageChartStatisticsStep)(input);
12
+ return new workflows_sdk_1.WorkflowResponse(result);
13
+ });
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFuYWdlLWNoYXJ0LXN0YXRpc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0YXRpc3RpY3MvbWFuYWdlLWNoYXJ0LXN0YXRpc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQXFGO0FBQ3JGLDZFQUE0RTtBQVE1RTs7O0dBR0c7QUFDVSxRQUFBLDZCQUE2QixHQUFHLElBQUEsOEJBQWMsRUFDdkQseUJBQXlCLEVBQ3pCLENBQUMsS0FBaUMsRUFBRSxFQUFFO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLElBQUEsbURBQXlCLEVBQUMsS0FBSyxDQUFDLENBQUM7SUFFaEQsT0FBTyxJQUFJLGdDQUFnQixDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3hDLENBQUMsQ0FDSixDQUFDIn0=
@@ -0,0 +1,37 @@
1
+ type OptionInput = {
2
+ id: string;
3
+ provider?: {
4
+ id: string;
5
+ };
6
+ provider_option_name?: string;
7
+ local_option_name?: string;
8
+ data?: Record<string, any>;
9
+ cache_options?: Record<string, any> | null;
10
+ input_dependencies?: any[];
11
+ parameter_config?: Record<string, any> | null;
12
+ };
13
+ export interface CalculateStatisticsInput {
14
+ options: Array<OptionInput | {
15
+ id: string;
16
+ }>;
17
+ sharedStatsData?: Record<string, any> | null;
18
+ sharedCacheOptions?: Record<string, any> | null;
19
+ runtimeParameters?: Record<string, any>;
20
+ periodStart: Date;
21
+ periodEnd: Date;
22
+ interval: number;
23
+ }
24
+ export declare const calculateStatisticsStep: import("@medusajs/framework/workflows-sdk").StepFunction<CalculateStatisticsInput, {
25
+ results: Record<string, any>;
26
+ errors: Record<string, string> | undefined;
27
+ definitions: {
28
+ [k: string]: any[];
29
+ };
30
+ metadata: Record<string, {
31
+ fromCache: boolean;
32
+ cachedAt?: string;
33
+ calculationTime: number;
34
+ }>;
35
+ duration: number;
36
+ }>;
37
+ export {};
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.calculateStatisticsStep = void 0;
4
+ const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
5
+ const statistics_1 = require("../../../modules/statistics");
6
+ const utils_1 = require("@medusajs/framework/utils");
7
+ const framework_1 = require("@medusajs/framework");
8
+ const parameter_utils_1 = require("../utils/parameter-utils");
9
+ const cache_utils_1 = require("../utils/cache-utils");
10
+ const dependency_graph_1 = require("../utils/dependency-graph");
11
+ exports.calculateStatisticsStep = (0, workflows_sdk_1.createStep)("calculate-statistics", async (input, { container }) => {
12
+ const statisticsService = container.resolve(statistics_1.STATISTICS_MODULE);
13
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
14
+ let cacheService;
15
+ try {
16
+ cacheService = container.resolve(utils_1.Modules.CACHING);
17
+ }
18
+ catch {
19
+ cacheService = undefined;
20
+ }
21
+ const { options: inputOptions, sharedStatsData, sharedCacheOptions, runtimeParameters = {}, periodStart, periodEnd, interval, } = input;
22
+ const operationStartTime = Date.now();
23
+ const results = {};
24
+ const errors = {};
25
+ const metadata = {};
26
+ const providerStatsMap = new Map();
27
+ for (const optionInput of inputOptions || []) {
28
+ const optionId = optionInput?.id;
29
+ if (!optionId) {
30
+ continue;
31
+ }
32
+ try {
33
+ const statStartTime = Date.now();
34
+ const fullOption = await statisticsService.retrieveStatisticsOption(optionId, {
35
+ relations: ["provider", "input_dependencies"],
36
+ });
37
+ const hasDependencies = !!fullOption.input_dependencies &&
38
+ fullOption.input_dependencies.length > 0;
39
+ if (hasDependencies) {
40
+ const dependencyTree = await dependency_graph_1.DependencyGraphUtils.buildDependencyTree(fullOption.id, statisticsService);
41
+ const calculationOrder = dependency_graph_1.DependencyGraphUtils.getCalculationOrder(dependencyTree);
42
+ const calculatedResults = new Map();
43
+ let finalFromCache = false;
44
+ let finalCachedAt;
45
+ for (const depOptionId of calculationOrder) {
46
+ if (calculatedResults.has(depOptionId)) {
47
+ continue;
48
+ }
49
+ const depOption = await statisticsService.retrieveStatisticsOption(depOptionId, {
50
+ relations: ["provider", "input_dependencies"],
51
+ });
52
+ if (!depOption.provider) {
53
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Statistics option ${depOptionId} has no associated provider`);
54
+ }
55
+ const providerInstance = statisticsService.getProvider(depOption.provider.id, query);
56
+ let availableStats = providerStatsMap.get(depOption.provider.id);
57
+ if (!availableStats) {
58
+ availableStats = await providerInstance.getAvailableStatistics();
59
+ providerStatsMap.set(depOption.provider.id, availableStats);
60
+ }
61
+ const statDefinition = availableStats.find(s => s.id === depOption.provider_option_name);
62
+ if (!statDefinition) {
63
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Statistic definition not found: ${depOption.provider_option_name}`);
64
+ }
65
+ let parameters = (0, parameter_utils_1.mergeParameters)(depOption.data || {}, sharedStatsData || {}, runtimeParameters, depOption.local_option_name, depOption.provider_option_name, depOption.provider.id);
66
+ if (depOption.input_dependencies && depOption.input_dependencies.length > 0) {
67
+ const dependencyResults = {};
68
+ for (const dep of depOption.input_dependencies) {
69
+ const inputId = dep.input_option?.id || dep.input_option_id;
70
+ const paramName = dep.parameter_name;
71
+ const value = calculatedResults.get(inputId);
72
+ if (value === undefined) {
73
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Dependency result not found for ${inputId}`);
74
+ }
75
+ dependencyResults[paramName] = value;
76
+ }
77
+ if (depOption.parameter_config) {
78
+ for (const [paramName, config] of Object.entries(depOption.parameter_config)) {
79
+ if (config.locked) {
80
+ parameters[paramName] = config.value;
81
+ }
82
+ }
83
+ }
84
+ parameters = { ...parameters, ...dependencyResults };
85
+ }
86
+ const validatedParameters = (0, parameter_utils_1.validateParameters)(parameters, statDefinition.parameters.fields);
87
+ const cachingEnabled = !!cacheService && (0, cache_utils_1.isCachingEnabled)(depOption.cache_options, sharedCacheOptions);
88
+ let value = null;
89
+ let cacheKey = null;
90
+ if (cachingEnabled) {
91
+ cacheKey = await (0, cache_utils_1.generateStatisticCacheKey)(cacheService, {
92
+ option_id: depOption.id,
93
+ periodStart,
94
+ periodEnd,
95
+ interval,
96
+ parameters: validatedParameters,
97
+ });
98
+ const cached = await cacheService.get({ key: cacheKey });
99
+ if (cached) {
100
+ value = cached.data || cached;
101
+ if (depOption.id === optionId) {
102
+ finalFromCache = true;
103
+ finalCachedAt = cached.cachedAt || new Date().toISOString();
104
+ }
105
+ }
106
+ }
107
+ if (value === null) {
108
+ value = await providerInstance.calculateStatistic({
109
+ id: depOption.provider_option_name,
110
+ parameters: validatedParameters,
111
+ fields: statDefinition.parameters.fields,
112
+ periodStart: new Date(periodStart),
113
+ periodEnd: new Date(periodEnd),
114
+ interval
115
+ });
116
+ if (cachingEnabled && cacheKey) {
117
+ const effectiveTTL = (0, cache_utils_1.getEffectiveCacheTTL)(depOption.cache_options, sharedCacheOptions);
118
+ const cachedAt = new Date().toISOString();
119
+ await cacheService.set({
120
+ key: cacheKey,
121
+ data: {
122
+ data: value,
123
+ cachedAt
124
+ },
125
+ ttl: effectiveTTL
126
+ });
127
+ }
128
+ }
129
+ calculatedResults.set(depOption.id, value);
130
+ }
131
+ const finalValue = calculatedResults.get(optionId);
132
+ if (finalValue === undefined) {
133
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Failed to calculate composite statistic ${optionId}`);
134
+ }
135
+ results[optionId] = finalValue;
136
+ metadata[optionId] = {
137
+ fromCache: finalFromCache,
138
+ cachedAt: finalCachedAt,
139
+ calculationTime: Date.now() - statStartTime,
140
+ };
141
+ continue;
142
+ }
143
+ if (!fullOption.provider) {
144
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Statistics option ${optionId} has no associated provider`);
145
+ }
146
+ const providerInstance = statisticsService.getProvider(fullOption.provider.id, query);
147
+ let availableStats = providerStatsMap.get(fullOption.provider.id);
148
+ if (!availableStats) {
149
+ availableStats = await providerInstance.getAvailableStatistics();
150
+ providerStatsMap.set(fullOption.provider.id, availableStats);
151
+ }
152
+ const statDefinition = availableStats.find(s => s.id === fullOption.provider_option_name);
153
+ if (!statDefinition) {
154
+ throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, `Statistic definition not found: ${fullOption.provider_option_name}`);
155
+ }
156
+ const mergedParameters = (0, parameter_utils_1.mergeParameters)(fullOption.data || {}, sharedStatsData || {}, runtimeParameters, fullOption.local_option_name, fullOption.provider_option_name, fullOption.provider.id);
157
+ const validatedParameters = (0, parameter_utils_1.validateParameters)(mergedParameters, statDefinition.parameters.fields);
158
+ const cachingEnabled = !!cacheService && (0, cache_utils_1.isCachingEnabled)(fullOption.cache_options, sharedCacheOptions);
159
+ let cachedResult = null;
160
+ let cacheKey = null;
161
+ if (cachingEnabled) {
162
+ cacheKey = await (0, cache_utils_1.generateStatisticCacheKey)(cacheService, {
163
+ option_id: fullOption.id,
164
+ periodStart,
165
+ periodEnd,
166
+ interval,
167
+ parameters: validatedParameters
168
+ });
169
+ cachedResult = await cacheService.get({
170
+ key: cacheKey
171
+ });
172
+ if (cachedResult) {
173
+ results[fullOption.id] = cachedResult.data || cachedResult;
174
+ metadata[fullOption.id] = {
175
+ fromCache: true,
176
+ cachedAt: cachedResult.cachedAt || new Date().toISOString(),
177
+ calculationTime: Date.now() - statStartTime
178
+ };
179
+ continue;
180
+ }
181
+ }
182
+ const result = await providerInstance.calculateStatistic({
183
+ id: fullOption.provider_option_name,
184
+ parameters: validatedParameters,
185
+ fields: statDefinition.parameters.fields,
186
+ periodStart: new Date(periodStart),
187
+ periodEnd: new Date(periodEnd),
188
+ interval
189
+ });
190
+ const statCalculationTime = Date.now() - statStartTime;
191
+ metadata[fullOption.id] = {
192
+ fromCache: false,
193
+ calculationTime: statCalculationTime
194
+ };
195
+ if (cachingEnabled && cacheKey) {
196
+ const effectiveTTL = (0, cache_utils_1.getEffectiveCacheTTL)(fullOption.cache_options, sharedCacheOptions);
197
+ const cachedAt = new Date().toISOString();
198
+ await cacheService.set({
199
+ key: cacheKey,
200
+ data: {
201
+ data: result,
202
+ cachedAt
203
+ },
204
+ ttl: effectiveTTL
205
+ });
206
+ }
207
+ results[fullOption.id] = result;
208
+ }
209
+ catch (error) {
210
+ framework_1.logger.error(`Error calculating statistic for option ${optionId}: ${error}`);
211
+ }
212
+ }
213
+ const totalDuration = (Date.now() - operationStartTime) / 1000;
214
+ return new workflows_sdk_1.StepResponse({
215
+ results,
216
+ errors: Object.keys(errors).length > 0 ? errors : undefined,
217
+ definitions: Object.fromEntries(providerStatsMap.entries()),
218
+ metadata,
219
+ duration: totalDuration
220
+ });
221
+ });
222
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FsY3VsYXRlLXN0YXRpc3RpY3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL3N0YXRpc3RpY3Mvc3RlcHMvY2FsY3VsYXRlLXN0YXRpc3RpY3MudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscUVBQTZFO0FBQzdFLDREQUFnRTtBQUVoRSxxREFBNEY7QUFDNUYsbURBQW9EO0FBQ3BELDhEQUFnRztBQUNoRyxzREFBeUc7QUFDekcsZ0VBQWlFO0FBd0JwRCxRQUFBLHVCQUF1QixHQUFHLElBQUEsMEJBQVUsRUFDN0Msc0JBQXNCLEVBQ3RCLEtBQUssRUFBRSxLQUErQixFQUFFLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRTtJQUNyRCxNQUFNLGlCQUFpQixHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQW9CLDhCQUFpQixDQUFDLENBQUM7SUFDbEYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBUSxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN4RSxJQUFJLFlBQTZCLENBQUM7SUFFbEMsSUFBSSxDQUFDO1FBQ0QsWUFBWSxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3RELENBQUM7SUFBQyxNQUFNLENBQUM7UUFDTCxZQUFZLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxNQUFNLEVBQ0YsT0FBTyxFQUFFLFlBQVksRUFDckIsZUFBZSxFQUNmLGtCQUFrQixFQUNsQixpQkFBaUIsR0FBRyxFQUFFLEVBQ3RCLFdBQVcsRUFDWCxTQUFTLEVBQ1QsUUFBUSxHQUNYLEdBQUcsS0FBSyxDQUFDO0lBRVYsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdEMsTUFBTSxPQUFPLEdBQXdCLEVBQUUsQ0FBQztJQUN4QyxNQUFNLE1BQU0sR0FBMkIsRUFBRSxDQUFDO0lBQzFDLE1B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