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.
- package/.medusa/server/src/admin/composite.png +0 -0
- package/.medusa/server/src/admin/index.js +10512 -0
- package/.medusa/server/src/admin/index.mjs +10510 -0
- package/.medusa/server/src/admin/params.png +0 -0
- package/.medusa/server/src/admin/view.png +0 -0
- package/.medusa/server/src/admin/visualizations.png +0 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/[id]/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alert-logs/route.js +33 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/logs/route.js +23 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/route.js +64 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/alerts/[id]/toggle/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/alerts/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/statistics/alerts/route.js +94 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.d.ts +15 -0
- package/.medusa/server/src/api/admin/statistics/charts/[id]/statistics/route.js +40 -0
- package/.medusa/server/src/api/admin/statistics/charts/route.d.ts +4 -0
- package/.medusa/server/src/api/admin/statistics/charts/route.js +55 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/calculate/route.js +23 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/clone/route.js +15 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/options/[id]/route.js +69 -0
- package/.medusa/server/src/api/admin/statistics/options/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/statistics/options/route.js +87 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/statistics/providers/[id]/statistics/route.js +18 -0
- package/.medusa/server/src/api/admin/statistics/providers/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/providers/route.js +57 -0
- package/.medusa/server/src/api/admin/statistics/utils/option-graph.d.ts +3 -0
- package/.medusa/server/src/api/admin/statistics/utils/option-graph.js +34 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/calculate/route.js +21 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/clone/route.js +21 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/route.d.ts +17 -0
- package/.medusa/server/src/api/admin/statistics/views/[id]/route.js +71 -0
- package/.medusa/server/src/api/admin/statistics/views/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/statistics/views/route.js +74 -0
- package/.medusa/server/src/api/middlewares.d.ts +2 -0
- package/.medusa/server/src/api/middlewares.js +194 -0
- package/.medusa/server/src/api/validation/statistics/schemas.d.ts +1013 -0
- package/.medusa/server/src/api/validation/statistics/schemas.js +288 -0
- package/.medusa/server/src/index.d.ts +1 -0
- package/.medusa/server/src/index.js +18 -0
- package/.medusa/server/src/jobs/evaluate-statistics-alerts.d.ts +6 -0
- package/.medusa/server/src/jobs/evaluate-statistics-alerts.js +110 -0
- package/.medusa/server/src/links/statistics-alert-user.d.ts +2 -0
- package/.medusa/server/src/links/statistics-alert-user.js +16 -0
- package/.medusa/server/src/links/statistics-option-user.d.ts +2 -0
- package/.medusa/server/src/links/statistics-option-user.js +16 -0
- package/.medusa/server/src/loaders/statistics/index.d.ts +5 -0
- package/.medusa/server/src/loaders/statistics/index.js +47 -0
- package/.medusa/server/src/modules/statistics/index.d.ts +107 -0
- package/.medusa/server/src/modules/statistics/index.js +32 -0
- package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.d.ts +5 -0
- package/.medusa/server/src/modules/statistics/migrations/Migration20260223131741.js +57 -0
- package/.medusa/server/src/modules/statistics/models/alert-log.d.ts +74 -0
- package/.medusa/server/src/modules/statistics/models/alert-log.js +16 -0
- package/.medusa/server/src/modules/statistics/models/alert.d.ts +74 -0
- package/.medusa/server/src/modules/statistics/models/alert.js +24 -0
- package/.medusa/server/src/modules/statistics/models/chart.d.ts +81 -0
- package/.medusa/server/src/modules/statistics/models/chart.js +28 -0
- package/.medusa/server/src/modules/statistics/models/index.d.ts +7 -0
- package/.medusa/server/src/modules/statistics/models/index.js +24 -0
- package/.medusa/server/src/modules/statistics/models/option-input.d.ts +135 -0
- package/.medusa/server/src/modules/statistics/models/option-input.js +27 -0
- package/.medusa/server/src/modules/statistics/models/option.d.ts +78 -0
- package/.medusa/server/src/modules/statistics/models/option.js +41 -0
- package/.medusa/server/src/modules/statistics/models/provider.d.ts +75 -0
- package/.medusa/server/src/modules/statistics/models/provider.js +15 -0
- package/.medusa/server/src/modules/statistics/models/view.d.ts +79 -0
- package/.medusa/server/src/modules/statistics/models/view.js +30 -0
- package/.medusa/server/src/modules/statistics/providers/index.d.ts +1 -0
- package/.medusa/server/src/modules/statistics/providers/index.js +18 -0
- package/.medusa/server/src/modules/statistics/providers/provider.d.ts +254 -0
- package/.medusa/server/src/modules/statistics/providers/provider.js +307 -0
- package/.medusa/server/src/modules/statistics/service.d.ts +953 -0
- package/.medusa/server/src/modules/statistics/service.js +190 -0
- package/.medusa/server/src/modules/statistics/utils/dependency-option-map.d.ts +13 -0
- package/.medusa/server/src/modules/statistics/utils/dependency-option-map.js +67 -0
- package/.medusa/server/src/modules/statistics/utils/period-utils.d.ts +23 -0
- package/.medusa/server/src/modules/statistics/utils/period-utils.js +78 -0
- package/.medusa/server/src/modules/statistics/utils/time-series-utils.d.ts +6 -0
- package/.medusa/server/src/modules/statistics/utils/time-series-utils.js +8 -0
- package/.medusa/server/src/providers/common/index.d.ts +2 -0
- package/.medusa/server/src/providers/common/index.js +1232 -0
- package/.medusa/server/src/providers/composite/index.d.ts +2 -0
- package/.medusa/server/src/providers/composite/index.js +147 -0
- package/.medusa/server/src/workflows/statistics/calculate-single-statistic.d.ts +15 -0
- package/.medusa/server/src/workflows/statistics/calculate-single-statistic.js +28 -0
- package/.medusa/server/src/workflows/statistics/calculate-statistics.d.ts +20 -0
- package/.medusa/server/src/workflows/statistics/calculate-statistics.js +15 -0
- package/.medusa/server/src/workflows/statistics/calculate-view.d.ts +31 -0
- package/.medusa/server/src/workflows/statistics/calculate-view.js +30 -0
- package/.medusa/server/src/workflows/statistics/clone-view.d.ts +227 -0
- package/.medusa/server/src/workflows/statistics/clone-view.js +10 -0
- package/.medusa/server/src/workflows/statistics/create-alert.d.ts +139 -0
- package/.medusa/server/src/workflows/statistics/create-alert.js +12 -0
- package/.medusa/server/src/workflows/statistics/create-chart.d.ts +122 -0
- package/.medusa/server/src/workflows/statistics/create-chart.js +14 -0
- package/.medusa/server/src/workflows/statistics/create-view-with-options.d.ts +1342 -0
- package/.medusa/server/src/workflows/statistics/create-view-with-options.js +29 -0
- package/.medusa/server/src/workflows/statistics/delete-chart.d.ts +10 -0
- package/.medusa/server/src/workflows/statistics/delete-chart.js +14 -0
- package/.medusa/server/src/workflows/statistics/evaluate-alerts.d.ts +28 -0
- package/.medusa/server/src/workflows/statistics/evaluate-alerts.js +67 -0
- package/.medusa/server/src/workflows/statistics/get-available-statistics.d.ts +5 -0
- package/.medusa/server/src/workflows/statistics/get-available-statistics.js +10 -0
- package/.medusa/server/src/workflows/statistics/index.d.ts +14 -0
- package/.medusa/server/src/workflows/statistics/index.js +31 -0
- package/.medusa/server/src/workflows/statistics/manage-chart-statistics.d.ts +12 -0
- package/.medusa/server/src/workflows/statistics/manage-chart-statistics.js +14 -0
- package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.d.ts +37 -0
- package/.medusa/server/src/workflows/statistics/steps/calculate-statistics.js +222 -0
- package/.medusa/server/src/workflows/statistics/steps/clone-view.d.ts +227 -0
- package/.medusa/server/src/workflows/statistics/steps/clone-view.js +39 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.d.ts +17 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert-log-entries.js +50 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert.d.ts +120 -0
- package/.medusa/server/src/workflows/statistics/steps/create-alert.js +21 -0
- package/.medusa/server/src/workflows/statistics/steps/create-chart.d.ts +118 -0
- package/.medusa/server/src/workflows/statistics/steps/create-chart.js +19 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.d.ts +117 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-options.js +16 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.d.ts +119 -0
- package/.medusa/server/src/workflows/statistics/steps/create-statistics-view.js +16 -0
- package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.d.ts +22 -0
- package/.medusa/server/src/workflows/statistics/steps/dedupe-alerts.js +64 -0
- package/.medusa/server/src/workflows/statistics/steps/delete-chart.d.ts +6 -0
- package/.medusa/server/src/workflows/statistics/steps/delete-chart.js +17 -0
- package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.d.ts +17 -0
- package/.medusa/server/src/workflows/statistics/steps/emit-alert-events.js +41 -0
- package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.d.ts +15 -0
- package/.medusa/server/src/workflows/statistics/steps/evaluate-each-condition.js +109 -0
- package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.d.ts +12 -0
- package/.medusa/server/src/workflows/statistics/steps/extract-alert-values.js +86 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.d.ts +112 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-active-alerts-for-option.js +16 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.d.ts +4 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-available-statistics.js +39 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.d.ts +112 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-option-with-relations.js +11 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.d.ts +112 -0
- package/.medusa/server/src/workflows/statistics/steps/fetch-view-with-options.js +20 -0
- package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.d.ts +8 -0
- package/.medusa/server/src/workflows/statistics/steps/manage-chart-statistics.js +26 -0
- package/.medusa/server/src/workflows/statistics/steps/update-chart.d.ts +117 -0
- package/.medusa/server/src/workflows/statistics/steps/update-chart.js +32 -0
- package/.medusa/server/src/workflows/statistics/steps/update-view.d.ts +120 -0
- package/.medusa/server/src/workflows/statistics/steps/update-view.js +18 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.d.ts +1 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-alert-input.js +34 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.d.ts +21 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-option-parameters.js +43 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-view-input.d.ts +10 -0
- package/.medusa/server/src/workflows/statistics/steps/validate-view-input.js +15 -0
- package/.medusa/server/src/workflows/statistics/update-chart.d.ts +120 -0
- package/.medusa/server/src/workflows/statistics/update-chart.js +13 -0
- package/.medusa/server/src/workflows/statistics/update-view-configuration.d.ts +128 -0
- package/.medusa/server/src/workflows/statistics/update-view-configuration.js +18 -0
- package/.medusa/server/src/workflows/statistics/utils/cache-utils.d.ts +60 -0
- package/.medusa/server/src/workflows/statistics/utils/cache-utils.js +66 -0
- package/.medusa/server/src/workflows/statistics/utils/dependency-graph.d.ts +51 -0
- package/.medusa/server/src/workflows/statistics/utils/dependency-graph.js +131 -0
- package/.medusa/server/src/workflows/statistics/utils/parameter-utils.d.ts +54 -0
- package/.medusa/server/src/workflows/statistics/utils/parameter-utils.js +147 -0
- package/.medusa/server/src/workflows/statistics/validate-option-configuration.d.ts +9 -0
- package/.medusa/server/src/workflows/statistics/validate-option-configuration.js +35 -0
- package/README.md +310 -0
- 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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
|