@x12i/analytix-dashboard 1.0.0

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.
@@ -0,0 +1,51 @@
1
+ import { CataloxCommonFields, AnalytixRunResult, AnalytixError } from "@x12i/analytix-contracts";
2
+ export interface DashboardWidget {
3
+ widgetId: string;
4
+ type: "metric" | "table" | "matrix" | "trend" | "markdown" | "functionOutput" | "reportSection" | "drilldownList";
5
+ title?: string;
6
+ analyticRef?: string;
7
+ staticContent?: string;
8
+ paramsOverride?: Record<string, any>;
9
+ widgetProfileRef?: string;
10
+ failurePolicy: "fail-widget" | "fail-dashboard";
11
+ }
12
+ export interface DashboardDefinition extends CataloxCommonFields {
13
+ dashboardId: string;
14
+ params?: any;
15
+ widgets: DashboardWidget[];
16
+ layout?: Array<{
17
+ widgetId: string;
18
+ x: number;
19
+ y: number;
20
+ w: number;
21
+ h: number;
22
+ }>;
23
+ snapshot: {
24
+ enabled: boolean;
25
+ retentionDays?: number;
26
+ };
27
+ }
28
+ export type DashboardRunResult = {
29
+ dashboardId: string;
30
+ version: number;
31
+ widgets: Array<{
32
+ widgetId: string;
33
+ status: "success" | "error";
34
+ result?: AnalytixRunResult;
35
+ error?: AnalytixError;
36
+ }>;
37
+ meta: {
38
+ startedAt: string;
39
+ finishedAt: string;
40
+ durationMs: number;
41
+ traceId: string;
42
+ failedWidgetCount: number;
43
+ };
44
+ };
45
+ export declare class DashboardRunner {
46
+ static run(definition: DashboardDefinition, params: Record<string, any>, runAnalytic: (ref: string, params: Record<string, any>) => Promise<AnalytixRunResult>, options?: {
47
+ widgetIds?: string[] | null;
48
+ traceId?: string;
49
+ }): Promise<DashboardRunResult>;
50
+ }
51
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEjG,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GAAG,UAAU,GAAG,gBAAgB,GAAG,eAAe,GAAG,eAAe,CAAC;IAClH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACrC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,aAAa,GAAG,gBAAgB,CAAC;CACjD;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,GAAG,CAAC;IACb,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACjF,QAAQ,EAAE;QACR,OAAO,EAAE,OAAO,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;QAC5B,MAAM,CAAC,EAAE,iBAAiB,CAAC;QAC3B,KAAK,CAAC,EAAE,aAAa,CAAC;KACvB,CAAC,CAAC;IACH,IAAI,EAAE;QACJ,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,MAAM,CAAC;QAChB,iBAAiB,EAAE,MAAM,CAAC;KAC3B,CAAC;CACH,CAAC;AAEF,qBAAa,eAAe;WACb,GAAG,CACd,UAAU,EAAE,mBAAmB,EAC/B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAC3B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,OAAO,CAAC,iBAAiB,CAAC,EACrF,OAAO,GAAE;QAAE,SAAS,CAAC,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAO,GAC9D,OAAO,CAAC,kBAAkB,CAAC;CAsF/B"}
package/dist/index.js ADDED
@@ -0,0 +1,84 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DashboardRunner = void 0;
4
+ class DashboardRunner {
5
+ static async run(definition, params, runAnalytic, options = {}) {
6
+ const startedAt = new Date().toISOString();
7
+ const traceId = options.traceId || "trace-id";
8
+ // Filter widgets if widgetIds filter is provided
9
+ const widgetsToRun = options.widgetIds
10
+ ? definition.widgets.filter((w) => options.widgetIds.includes(w.widgetId))
11
+ : definition.widgets;
12
+ const runWidgets = [];
13
+ let failedWidgetCount = 0;
14
+ for (const widget of widgetsToRun) {
15
+ // If it is markdown static type with no analyticRef, return success instantly
16
+ if (widget.type === "markdown" && !widget.analyticRef && widget.staticContent) {
17
+ runWidgets.push({
18
+ widgetId: widget.widgetId,
19
+ status: "success",
20
+ result: {
21
+ analyticId: widget.widgetId,
22
+ analyticType: "trend",
23
+ version: 1,
24
+ status: "active",
25
+ data: widget.staticContent,
26
+ meta: {
27
+ cache: { hit: false, key: "" },
28
+ probes: [],
29
+ execution: { durationMs: 0, startedAt, finishedAt: startedAt, traceId },
30
+ },
31
+ },
32
+ });
33
+ continue;
34
+ }
35
+ if (!widget.analyticRef) {
36
+ continue;
37
+ }
38
+ const mergedParams = { ...params, ...(widget.paramsOverride || {}) };
39
+ try {
40
+ const result = await runAnalytic(widget.analyticRef, mergedParams);
41
+ runWidgets.push({
42
+ widgetId: widget.widgetId,
43
+ status: "success",
44
+ result,
45
+ });
46
+ }
47
+ catch (err) {
48
+ failedWidgetCount++;
49
+ const errObj = {
50
+ error: {
51
+ code: "INTERNAL_ERROR",
52
+ message: err.message || "Widget execution failed",
53
+ httpStatus: 500,
54
+ traceId,
55
+ },
56
+ };
57
+ if (widget.failurePolicy === "fail-dashboard") {
58
+ throw new Error(JSON.stringify(errObj));
59
+ }
60
+ runWidgets.push({
61
+ widgetId: widget.widgetId,
62
+ status: "error",
63
+ error: errObj,
64
+ });
65
+ }
66
+ }
67
+ const finishedAt = new Date().toISOString();
68
+ const durationMs = new Date(finishedAt).getTime() - new Date(startedAt).getTime();
69
+ return {
70
+ dashboardId: definition.dashboardId,
71
+ version: definition.version,
72
+ widgets: runWidgets,
73
+ meta: {
74
+ startedAt,
75
+ finishedAt,
76
+ durationMs,
77
+ traceId,
78
+ failedWidgetCount,
79
+ },
80
+ };
81
+ }
82
+ }
83
+ exports.DashboardRunner = DashboardRunner;
84
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "@x12i/analytix-dashboard",
3
+ "version": "1.0.0",
4
+ "main": "dist/index.js",
5
+ "types": "dist/index.d.ts",
6
+ "dependencies": {
7
+ "@x12i/analytix-contracts": "^1.0.0",
8
+ "@x12i/analytix": "^1.0.0"
9
+ },
10
+ "files": [
11
+ "dist"
12
+ ],
13
+ "publishConfig": {
14
+ "access": "public",
15
+ "registry": "https://registry.npmjs.org/"
16
+ },
17
+ "scripts": {
18
+ "build": "tsc -p tsconfig.json"
19
+ }
20
+ }