@lssm/example.analytics-dashboard 0.0.0-canary-20251206160926

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 (121) hide show
  1. package/README.md +267 -0
  2. package/dist/contracts/index.d.ts +1114 -0
  3. package/dist/contracts/index.js +1 -0
  4. package/dist/entities/index.d.ts +219 -0
  5. package/dist/entities/index.js +1 -0
  6. package/dist/events.d.ts +324 -0
  7. package/dist/events.js +1 -0
  8. package/dist/feature.d.ts +1206 -0
  9. package/dist/feature.js +1 -0
  10. package/dist/handlers/index.d.ts +77 -0
  11. package/dist/handlers/index.js +1 -0
  12. package/dist/index.d.ts +8 -0
  13. package/dist/index.js +1 -0
  14. package/dist/libs/contracts/dist/capabilities/openbanking.js +1 -0
  15. package/dist/libs/contracts/dist/client/index.js +1 -0
  16. package/dist/libs/contracts/dist/client/react/feature-render.js +1 -0
  17. package/dist/libs/contracts/dist/client/react/form-render.js +1 -0
  18. package/dist/libs/contracts/dist/client/react/index.js +1 -0
  19. package/dist/libs/contracts/dist/events.js +1 -0
  20. package/dist/libs/contracts/dist/experiments/evaluator.js +1 -0
  21. package/dist/libs/contracts/dist/graphql-federation/dist/index.js +1 -0
  22. package/dist/libs/contracts/dist/index.js +1 -0
  23. package/dist/libs/contracts/dist/install.js +1 -0
  24. package/dist/libs/contracts/dist/integrations/contracts.js +1 -0
  25. package/dist/libs/contracts/dist/integrations/index.js +1 -0
  26. package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +1 -0
  27. package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +1 -0
  28. package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +1 -0
  29. package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +1 -0
  30. package/dist/libs/contracts/dist/integrations/openbanking/models.js +1 -0
  31. package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +1 -0
  32. package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +1 -0
  33. package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +1 -0
  34. package/dist/libs/contracts/dist/integrations/providers/gmail.js +1 -0
  35. package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +1 -0
  36. package/dist/libs/contracts/dist/integrations/providers/impls/elevenlabs-voice.js +1 -0
  37. package/dist/libs/contracts/dist/integrations/providers/impls/gcs-storage.js +1 -0
  38. package/dist/libs/contracts/dist/integrations/providers/impls/gmail-inbound.js +1 -0
  39. package/dist/libs/contracts/dist/integrations/providers/impls/gmail-outbound.js +1 -0
  40. package/dist/libs/contracts/dist/integrations/providers/impls/google-calendar.js +1 -0
  41. package/dist/libs/contracts/dist/integrations/providers/impls/index.js +1 -0
  42. package/dist/libs/contracts/dist/integrations/providers/impls/mistral-embedding.js +1 -0
  43. package/dist/libs/contracts/dist/integrations/providers/impls/mistral-llm.js +1 -0
  44. package/dist/libs/contracts/dist/integrations/providers/impls/postmark-email.js +1 -0
  45. package/dist/libs/contracts/dist/integrations/providers/impls/powens-client.js +1 -0
  46. package/dist/libs/contracts/dist/integrations/providers/impls/powens-openbanking.js +1 -0
  47. package/dist/libs/contracts/dist/integrations/providers/impls/provider-factory.js +1 -0
  48. package/dist/libs/contracts/dist/integrations/providers/impls/qdrant-vector.js +1 -0
  49. package/dist/libs/contracts/dist/integrations/providers/impls/stripe-payments.js +1 -0
  50. package/dist/libs/contracts/dist/integrations/providers/impls/twilio-sms.js +1 -0
  51. package/dist/libs/contracts/dist/integrations/providers/index.js +1 -0
  52. package/dist/libs/contracts/dist/integrations/providers/mistral.js +1 -0
  53. package/dist/libs/contracts/dist/integrations/providers/postmark.js +1 -0
  54. package/dist/libs/contracts/dist/integrations/providers/powens.js +1 -0
  55. package/dist/libs/contracts/dist/integrations/providers/qdrant.js +1 -0
  56. package/dist/libs/contracts/dist/integrations/providers/stripe.js +1 -0
  57. package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +1 -0
  58. package/dist/libs/contracts/dist/integrations/runtime.js +1 -0
  59. package/dist/libs/contracts/dist/integrations/secrets/env-secret-provider.js +1 -0
  60. package/dist/libs/contracts/dist/integrations/secrets/gcp-secret-manager.js +1 -0
  61. package/dist/libs/contracts/dist/integrations/secrets/index.js +1 -0
  62. package/dist/libs/contracts/dist/integrations/secrets/manager.js +1 -0
  63. package/dist/libs/contracts/dist/integrations/secrets/provider.js +1 -0
  64. package/dist/libs/contracts/dist/jsonschema.js +1 -0
  65. package/dist/libs/contracts/dist/knowledge/contracts.js +1 -0
  66. package/dist/libs/contracts/dist/knowledge/index.js +1 -0
  67. package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +1 -0
  68. package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +1 -0
  69. package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +1 -0
  70. package/dist/libs/contracts/dist/knowledge/spaces/index.js +1 -0
  71. package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +1 -0
  72. package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +1 -0
  73. package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +1 -0
  74. package/dist/libs/contracts/dist/onboarding-base.js +1 -0
  75. package/dist/libs/contracts/dist/ownership.js +1 -0
  76. package/dist/libs/contracts/dist/presentations.js +1 -0
  77. package/dist/libs/contracts/dist/presentations.v2.js +1 -0
  78. package/dist/libs/contracts/dist/prompt.js +1 -0
  79. package/dist/libs/contracts/dist/promptRegistry.js +1 -0
  80. package/dist/libs/contracts/dist/regenerator/index.js +1 -0
  81. package/dist/libs/contracts/dist/regenerator/service.js +1 -0
  82. package/dist/libs/contracts/dist/registry.js +1 -0
  83. package/dist/libs/contracts/dist/resources.js +1 -0
  84. package/dist/libs/contracts/dist/schema/dist/EnumType.js +1 -0
  85. package/dist/libs/contracts/dist/schema/dist/FieldType.js +1 -0
  86. package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +1 -0
  87. package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +1 -0
  88. package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +1 -0
  89. package/dist/libs/contracts/dist/schema/dist/entity/index.js +1 -0
  90. package/dist/libs/contracts/dist/schema/dist/entity/types.js +1 -0
  91. package/dist/libs/contracts/dist/schema/dist/index.js +1 -0
  92. package/dist/libs/contracts/dist/server/graphql-pothos.js +1 -0
  93. package/dist/libs/contracts/dist/server/graphql-schema-export.js +1 -0
  94. package/dist/libs/contracts/dist/server/index.js +1 -0
  95. package/dist/libs/contracts/dist/server/provider-mcp.js +1 -0
  96. package/dist/libs/contracts/dist/server/rest-elysia.js +1 -0
  97. package/dist/libs/contracts/dist/server/rest-express.js +1 -0
  98. package/dist/libs/contracts/dist/server/rest-generic.js +1 -0
  99. package/dist/libs/contracts/dist/server/rest-next-app.js +1 -0
  100. package/dist/libs/contracts/dist/server/rest-next-pages.js +1 -0
  101. package/dist/libs/contracts/dist/spec.js +1 -0
  102. package/dist/libs/contracts/dist/telemetry/index.js +1 -0
  103. package/dist/libs/contracts/dist/telemetry/tracker.js +1 -0
  104. package/dist/libs/contracts/dist/tests/index.js +1 -0
  105. package/dist/libs/contracts/dist/tests/runner.js +1 -0
  106. package/dist/libs/contracts/dist/workflow/index.js +1 -0
  107. package/dist/libs/contracts/dist/workflow/runner.js +1 -0
  108. package/dist/libs/schema/dist/EnumType.js +1 -0
  109. package/dist/libs/schema/dist/FieldType.js +1 -0
  110. package/dist/libs/schema/dist/ScalarTypeEnum.js +1 -0
  111. package/dist/libs/schema/dist/SchemaModel.js +1 -0
  112. package/dist/libs/schema/dist/entity/defineEntity.js +1 -0
  113. package/dist/libs/schema/dist/entity/index.js +1 -0
  114. package/dist/libs/schema/dist/entity/types.js +1 -0
  115. package/dist/libs/schema/dist/index.js +1 -0
  116. package/dist/presentations/index.d.ts +473 -0
  117. package/dist/presentations/index.js +1 -0
  118. package/dist/query-engine/index.d.ts +105 -0
  119. package/dist/query-engine/index.js +1 -0
  120. package/dist/tsconfig.tsbuildinfo +1 -0
  121. package/package.json +64 -0
@@ -0,0 +1,473 @@
1
+ //#region src/presentations/index.d.ts
2
+ /**
3
+ * Analytics Dashboard Presentation Descriptors
4
+ *
5
+ * These presentation descriptors define how analytics dashboards
6
+ * and widgets should be rendered across different surfaces.
7
+ */
8
+ declare const DashboardListPresentation: {
9
+ name: string;
10
+ type: "list";
11
+ description: string;
12
+ layout: {
13
+ header: {
14
+ title: string;
15
+ actions: string[];
16
+ };
17
+ filters: string[];
18
+ list: {
19
+ itemType: string;
20
+ pagination: boolean;
21
+ itemsPerPage: number;
22
+ };
23
+ };
24
+ dataSource: {
25
+ query: string;
26
+ defaultParams: {
27
+ status: undefined;
28
+ limit: number;
29
+ offset: number;
30
+ };
31
+ };
32
+ actions: {
33
+ create_dashboard: {
34
+ label: string;
35
+ icon: string;
36
+ command: string;
37
+ };
38
+ };
39
+ };
40
+ declare const DashboardViewPresentation: {
41
+ name: string;
42
+ type: "dashboard";
43
+ description: string;
44
+ layout: {
45
+ header: {
46
+ title: string;
47
+ breadcrumbs: string[];
48
+ actions: string[];
49
+ };
50
+ toolbar: {
51
+ dateRangePicker: boolean;
52
+ filters: boolean;
53
+ refreshInterval: boolean;
54
+ };
55
+ grid: {
56
+ type: string;
57
+ columns: number;
58
+ rowHeight: number;
59
+ margin: number;
60
+ };
61
+ widgets: {
62
+ dragEnabled: string;
63
+ resizeEnabled: string;
64
+ };
65
+ };
66
+ dataSource: {
67
+ query: string;
68
+ params: {
69
+ dashboardId: string;
70
+ slug: string;
71
+ };
72
+ };
73
+ actions: {
74
+ edit: {
75
+ label: string;
76
+ icon: string;
77
+ toggleState: string;
78
+ requiresPermission: string;
79
+ };
80
+ share: {
81
+ label: string;
82
+ icon: string;
83
+ openModal: string;
84
+ };
85
+ refresh: {
86
+ label: string;
87
+ icon: string;
88
+ action: string;
89
+ };
90
+ export: {
91
+ label: string;
92
+ icon: string;
93
+ openMenu: string[];
94
+ };
95
+ };
96
+ };
97
+ declare const DashboardEditorPresentation: {
98
+ name: string;
99
+ type: "editor";
100
+ description: string;
101
+ layout: {
102
+ header: {
103
+ title: string;
104
+ actions: string[];
105
+ };
106
+ sidebar: {
107
+ widgetPalette: boolean;
108
+ queryBuilder: boolean;
109
+ settings: boolean;
110
+ };
111
+ main: {
112
+ type: string;
113
+ columns: number;
114
+ rowHeight: number;
115
+ snapToGrid: boolean;
116
+ };
117
+ footer: {
118
+ statusBar: boolean;
119
+ lastSaved: boolean;
120
+ };
121
+ };
122
+ widgetPalette: {
123
+ categories: {
124
+ name: string;
125
+ widgets: string[];
126
+ }[];
127
+ };
128
+ actions: {
129
+ save: {
130
+ label: string;
131
+ icon: string;
132
+ command: string;
133
+ primary: boolean;
134
+ };
135
+ preview: {
136
+ label: string;
137
+ icon: string;
138
+ toggleState: string;
139
+ };
140
+ discard: {
141
+ label: string;
142
+ icon: string;
143
+ confirmMessage: string;
144
+ action: string;
145
+ };
146
+ };
147
+ };
148
+ declare const WidgetConfigurationPresentation: {
149
+ name: string;
150
+ type: "modal";
151
+ description: string;
152
+ layout: {
153
+ tabs: string[];
154
+ };
155
+ tabs: {
156
+ data: {
157
+ label: string;
158
+ sections: {
159
+ name: string;
160
+ fields: string[];
161
+ }[];
162
+ };
163
+ visualization: {
164
+ label: string;
165
+ sections: {
166
+ name: string;
167
+ fields: string[];
168
+ }[];
169
+ };
170
+ formatting: {
171
+ label: string;
172
+ sections: {
173
+ name: string;
174
+ fields: string[];
175
+ }[];
176
+ };
177
+ };
178
+ };
179
+ declare const QueryBuilderPresentation: {
180
+ name: string;
181
+ type: "builder";
182
+ description: string;
183
+ layout: {
184
+ header: {
185
+ title: string;
186
+ actions: string[];
187
+ };
188
+ main: {
189
+ queryTypeSelector: boolean;
190
+ builderArea: boolean;
191
+ preview: boolean;
192
+ };
193
+ footer: {
194
+ executionStats: boolean;
195
+ };
196
+ };
197
+ queryTypes: {
198
+ metric: {
199
+ label: string;
200
+ icon: string;
201
+ description: string;
202
+ };
203
+ aggregation: {
204
+ label: string;
205
+ icon: string;
206
+ description: string;
207
+ };
208
+ sql: {
209
+ label: string;
210
+ icon: string;
211
+ description: string;
212
+ };
213
+ };
214
+ builderComponents: {
215
+ metricSelector: {
216
+ type: string;
217
+ source: string;
218
+ };
219
+ measureBuilder: {
220
+ type: string;
221
+ fields: string[];
222
+ };
223
+ dimensionBuilder: {
224
+ type: string;
225
+ fields: string[];
226
+ };
227
+ filterBuilder: {
228
+ type: string;
229
+ operators: string[];
230
+ };
231
+ sqlEditor: {
232
+ type: string;
233
+ language: string;
234
+ autoComplete: boolean;
235
+ formatOnSave: boolean;
236
+ };
237
+ };
238
+ };
239
+ declare const AnalyticsDashboardPresentations: {
240
+ DashboardListPresentation: {
241
+ name: string;
242
+ type: "list";
243
+ description: string;
244
+ layout: {
245
+ header: {
246
+ title: string;
247
+ actions: string[];
248
+ };
249
+ filters: string[];
250
+ list: {
251
+ itemType: string;
252
+ pagination: boolean;
253
+ itemsPerPage: number;
254
+ };
255
+ };
256
+ dataSource: {
257
+ query: string;
258
+ defaultParams: {
259
+ status: undefined;
260
+ limit: number;
261
+ offset: number;
262
+ };
263
+ };
264
+ actions: {
265
+ create_dashboard: {
266
+ label: string;
267
+ icon: string;
268
+ command: string;
269
+ };
270
+ };
271
+ };
272
+ DashboardViewPresentation: {
273
+ name: string;
274
+ type: "dashboard";
275
+ description: string;
276
+ layout: {
277
+ header: {
278
+ title: string;
279
+ breadcrumbs: string[];
280
+ actions: string[];
281
+ };
282
+ toolbar: {
283
+ dateRangePicker: boolean;
284
+ filters: boolean;
285
+ refreshInterval: boolean;
286
+ };
287
+ grid: {
288
+ type: string;
289
+ columns: number;
290
+ rowHeight: number;
291
+ margin: number;
292
+ };
293
+ widgets: {
294
+ dragEnabled: string;
295
+ resizeEnabled: string;
296
+ };
297
+ };
298
+ dataSource: {
299
+ query: string;
300
+ params: {
301
+ dashboardId: string;
302
+ slug: string;
303
+ };
304
+ };
305
+ actions: {
306
+ edit: {
307
+ label: string;
308
+ icon: string;
309
+ toggleState: string;
310
+ requiresPermission: string;
311
+ };
312
+ share: {
313
+ label: string;
314
+ icon: string;
315
+ openModal: string;
316
+ };
317
+ refresh: {
318
+ label: string;
319
+ icon: string;
320
+ action: string;
321
+ };
322
+ export: {
323
+ label: string;
324
+ icon: string;
325
+ openMenu: string[];
326
+ };
327
+ };
328
+ };
329
+ DashboardEditorPresentation: {
330
+ name: string;
331
+ type: "editor";
332
+ description: string;
333
+ layout: {
334
+ header: {
335
+ title: string;
336
+ actions: string[];
337
+ };
338
+ sidebar: {
339
+ widgetPalette: boolean;
340
+ queryBuilder: boolean;
341
+ settings: boolean;
342
+ };
343
+ main: {
344
+ type: string;
345
+ columns: number;
346
+ rowHeight: number;
347
+ snapToGrid: boolean;
348
+ };
349
+ footer: {
350
+ statusBar: boolean;
351
+ lastSaved: boolean;
352
+ };
353
+ };
354
+ widgetPalette: {
355
+ categories: {
356
+ name: string;
357
+ widgets: string[];
358
+ }[];
359
+ };
360
+ actions: {
361
+ save: {
362
+ label: string;
363
+ icon: string;
364
+ command: string;
365
+ primary: boolean;
366
+ };
367
+ preview: {
368
+ label: string;
369
+ icon: string;
370
+ toggleState: string;
371
+ };
372
+ discard: {
373
+ label: string;
374
+ icon: string;
375
+ confirmMessage: string;
376
+ action: string;
377
+ };
378
+ };
379
+ };
380
+ WidgetConfigurationPresentation: {
381
+ name: string;
382
+ type: "modal";
383
+ description: string;
384
+ layout: {
385
+ tabs: string[];
386
+ };
387
+ tabs: {
388
+ data: {
389
+ label: string;
390
+ sections: {
391
+ name: string;
392
+ fields: string[];
393
+ }[];
394
+ };
395
+ visualization: {
396
+ label: string;
397
+ sections: {
398
+ name: string;
399
+ fields: string[];
400
+ }[];
401
+ };
402
+ formatting: {
403
+ label: string;
404
+ sections: {
405
+ name: string;
406
+ fields: string[];
407
+ }[];
408
+ };
409
+ };
410
+ };
411
+ QueryBuilderPresentation: {
412
+ name: string;
413
+ type: "builder";
414
+ description: string;
415
+ layout: {
416
+ header: {
417
+ title: string;
418
+ actions: string[];
419
+ };
420
+ main: {
421
+ queryTypeSelector: boolean;
422
+ builderArea: boolean;
423
+ preview: boolean;
424
+ };
425
+ footer: {
426
+ executionStats: boolean;
427
+ };
428
+ };
429
+ queryTypes: {
430
+ metric: {
431
+ label: string;
432
+ icon: string;
433
+ description: string;
434
+ };
435
+ aggregation: {
436
+ label: string;
437
+ icon: string;
438
+ description: string;
439
+ };
440
+ sql: {
441
+ label: string;
442
+ icon: string;
443
+ description: string;
444
+ };
445
+ };
446
+ builderComponents: {
447
+ metricSelector: {
448
+ type: string;
449
+ source: string;
450
+ };
451
+ measureBuilder: {
452
+ type: string;
453
+ fields: string[];
454
+ };
455
+ dimensionBuilder: {
456
+ type: string;
457
+ fields: string[];
458
+ };
459
+ filterBuilder: {
460
+ type: string;
461
+ operators: string[];
462
+ };
463
+ sqlEditor: {
464
+ type: string;
465
+ language: string;
466
+ autoComplete: boolean;
467
+ formatOnSave: boolean;
468
+ };
469
+ };
470
+ };
471
+ };
472
+ //#endregion
473
+ export { AnalyticsDashboardPresentations, DashboardEditorPresentation, DashboardListPresentation, DashboardViewPresentation, QueryBuilderPresentation, WidgetConfigurationPresentation };
@@ -0,0 +1 @@
1
+ const e={name:`analytics.dashboards.list`,type:`list`,description:`Dashboard listing page with search and filters`,layout:{header:{title:`Analytics Dashboards`,actions:[`create_dashboard`]},filters:[`status`,`search`],list:{itemType:`dashboard_card`,pagination:!0,itemsPerPage:20}},dataSource:{query:`analytics.dashboard.list`,defaultParams:{status:void 0,limit:20,offset:0}},actions:{create_dashboard:{label:`New Dashboard`,icon:`plus`,command:`analytics.dashboard.create`}}},t={name:`analytics.dashboard.view`,type:`dashboard`,description:`Dashboard viewing/editing interface`,layout:{header:{title:`{{dashboard.name}}`,breadcrumbs:[`Dashboards`,`{{dashboard.name}}`],actions:[`edit`,`share`,`refresh`,`export`]},toolbar:{dateRangePicker:!0,filters:!0,refreshInterval:!0},grid:{type:`responsive`,columns:12,rowHeight:100,margin:16},widgets:{dragEnabled:`{{isEditing}}`,resizeEnabled:`{{isEditing}}`}},dataSource:{query:`analytics.dashboard.get`,params:{dashboardId:`{{params.dashboardId}}`,slug:`{{params.slug}}`}},actions:{edit:{label:`Edit`,icon:`edit`,toggleState:`isEditing`,requiresPermission:`dashboard:edit`},share:{label:`Share`,icon:`share`,openModal:`share_dashboard`},refresh:{label:`Refresh`,icon:`refresh`,action:`refreshAllWidgets`},export:{label:`Export`,icon:`download`,openMenu:[`export_pdf`,`export_png`,`export_csv`]}}},n={name:`analytics.dashboard.editor`,type:`editor`,description:`Dashboard editing interface with widget palette`,layout:{header:{title:`Edit: {{dashboard.name}}`,actions:[`save`,`preview`,`discard`]},sidebar:{widgetPalette:!0,queryBuilder:!0,settings:!0},main:{type:`grid_editor`,columns:12,rowHeight:100,snapToGrid:!0},footer:{statusBar:!0,lastSaved:!0}},widgetPalette:{categories:[{name:`Charts`,widgets:[`line_chart`,`bar_chart`,`pie_chart`,`area_chart`,`scatter_plot`]},{name:`Data`,widgets:[`metric`,`table`,`funnel`]},{name:`Visualization`,widgets:[`heatmap`,`map`,`text`,`embed`]}]},actions:{save:{label:`Save`,icon:`save`,command:`analytics.dashboard.update`,primary:!0},preview:{label:`Preview`,icon:`eye`,toggleState:`previewMode`},discard:{label:`Discard Changes`,icon:`x`,confirmMessage:`Discard unsaved changes?`,action:`discardChanges`}}},r={name:`analytics.widget.configure`,type:`modal`,description:`Widget configuration panel`,layout:{tabs:[`data`,`visualization`,`formatting`]},tabs:{data:{label:`Data`,sections:[{name:`Query`,fields:[`queryId`,`createNewQuery`]},{name:`Filters`,fields:[`inheritDashboardFilters`,`additionalFilters`]}]},visualization:{label:`Visualization`,sections:[{name:`Chart Type`,fields:[`chartType`,`chartVariant`]},{name:`Axes`,fields:[`xAxis`,`yAxis`,`secondaryYAxis`]},{name:`Legend`,fields:[`showLegend`,`legendPosition`]}]},formatting:{label:`Formatting`,sections:[{name:`Title`,fields:[`title`,`subtitle`,`titleAlignment`]},{name:`Colors`,fields:[`colorScheme`,`customColors`]},{name:`Numbers`,fields:[`numberFormat`,`decimals`,`prefix`,`suffix`]}]}}},i={name:`analytics.query.builder`,type:`builder`,description:`Visual query builder interface`,layout:{header:{title:`Query Builder`,actions:[`run`,`save`,`clear`]},main:{queryTypeSelector:!0,builderArea:!0,preview:!0},footer:{executionStats:!0}},queryTypes:{metric:{label:`Metric Query`,icon:`hash`,description:`Query usage metrics`},aggregation:{label:`Aggregation`,icon:`layers`,description:`Aggregate data with measures and dimensions`},sql:{label:`SQL`,icon:`code`,description:`Write custom SQL query`}},builderComponents:{metricSelector:{type:`multi_select`,source:`metering.metrics.list`},measureBuilder:{type:`field_list`,fields:[`name`,`field`,`aggregation`,`format`]},dimensionBuilder:{type:`field_list`,fields:[`name`,`field`,`type`,`granularity`]},filterBuilder:{type:`condition_builder`,operators:[`eq`,`neq`,`gt`,`gte`,`lt`,`lte`,`in`,`contains`,`between`]},sqlEditor:{type:`code_editor`,language:`sql`,autoComplete:!0,formatOnSave:!0}}},a={DashboardListPresentation:e,DashboardViewPresentation:t,DashboardEditorPresentation:n,WidgetConfigurationPresentation:r,QueryBuilderPresentation:i};export{a as AnalyticsDashboardPresentations,n as DashboardEditorPresentation,e as DashboardListPresentation,t as DashboardViewPresentation,i as QueryBuilderPresentation,r as WidgetConfigurationPresentation};
@@ -0,0 +1,105 @@
1
+ //#region src/query-engine/index.d.ts
2
+ /**
3
+ * Analytics Query Engine
4
+ *
5
+ * Provides query execution and caching for analytics dashboards.
6
+ */
7
+ interface QueryDefinition {
8
+ type: 'SQL' | 'METRIC' | 'AGGREGATION' | 'CUSTOM';
9
+ sql?: string;
10
+ metricIds?: string[];
11
+ aggregation?: AggregationDefinition;
12
+ custom?: CustomQueryDefinition;
13
+ }
14
+ interface AggregationDefinition {
15
+ source: string;
16
+ measures: MeasureDefinition[];
17
+ dimensions: DimensionDefinition[];
18
+ filters?: FilterDefinition[];
19
+ orderBy?: OrderByDefinition[];
20
+ limit?: number;
21
+ }
22
+ interface MeasureDefinition {
23
+ name: string;
24
+ field: string;
25
+ aggregation: 'COUNT' | 'SUM' | 'AVG' | 'MIN' | 'MAX' | 'COUNT_DISTINCT';
26
+ format?: string;
27
+ }
28
+ interface DimensionDefinition {
29
+ name: string;
30
+ field: string;
31
+ type?: 'TIME' | 'STRING' | 'NUMBER';
32
+ granularity?: 'HOUR' | 'DAY' | 'WEEK' | 'MONTH' | 'YEAR';
33
+ }
34
+ interface FilterDefinition {
35
+ field: string;
36
+ operator: 'eq' | 'neq' | 'gt' | 'gte' | 'lt' | 'lte' | 'in' | 'nin' | 'contains' | 'between';
37
+ value: unknown;
38
+ }
39
+ interface OrderByDefinition {
40
+ field: string;
41
+ direction: 'ASC' | 'DESC';
42
+ }
43
+ interface CustomQueryDefinition {
44
+ handler: string;
45
+ parameters: Record<string, unknown>;
46
+ }
47
+ interface QueryParameters {
48
+ dateRange?: {
49
+ start: Date;
50
+ end: Date;
51
+ granularity?: string;
52
+ };
53
+ filters?: FilterDefinition[];
54
+ parameters?: Record<string, unknown>;
55
+ }
56
+ interface QueryResult {
57
+ data: Record<string, unknown>[];
58
+ columns: ColumnDefinition[];
59
+ rowCount: number;
60
+ executionTimeMs: number;
61
+ cached: boolean;
62
+ cachedAt?: Date;
63
+ error?: string;
64
+ }
65
+ interface ColumnDefinition {
66
+ name: string;
67
+ type: 'STRING' | 'NUMBER' | 'DATE' | 'BOOLEAN';
68
+ label?: string;
69
+ format?: string;
70
+ }
71
+ interface IQueryEngine {
72
+ execute(definition: QueryDefinition, params: QueryParameters): Promise<QueryResult>;
73
+ validateQuery(definition: QueryDefinition): {
74
+ valid: boolean;
75
+ errors: string[];
76
+ };
77
+ }
78
+ interface IQueryCache {
79
+ get(key: string): Promise<QueryResult | null>;
80
+ set(key: string, result: QueryResult, ttlSeconds: number): Promise<void>;
81
+ invalidate(pattern: string): Promise<void>;
82
+ }
83
+ declare class InMemoryQueryCache implements IQueryCache {
84
+ private cache;
85
+ get(key: string): Promise<QueryResult | null>;
86
+ set(key: string, result: QueryResult, ttlSeconds: number): Promise<void>;
87
+ invalidate(pattern: string): Promise<void>;
88
+ }
89
+ declare class BasicQueryEngine implements IQueryEngine {
90
+ private cache;
91
+ constructor(cache?: IQueryCache);
92
+ execute(definition: QueryDefinition, params: QueryParameters): Promise<QueryResult>;
93
+ validateQuery(definition: QueryDefinition): {
94
+ valid: boolean;
95
+ errors: string[];
96
+ };
97
+ private buildCacheKey;
98
+ private executeAggregation;
99
+ private executeMetric;
100
+ private executeSql;
101
+ private generateMockData;
102
+ }
103
+ declare function createQueryEngine(cache?: IQueryCache): IQueryEngine;
104
+ //#endregion
105
+ export { AggregationDefinition, BasicQueryEngine, ColumnDefinition, CustomQueryDefinition, DimensionDefinition, FilterDefinition, IQueryCache, IQueryEngine, InMemoryQueryCache, MeasureDefinition, OrderByDefinition, QueryDefinition, QueryParameters, QueryResult, createQueryEngine };
@@ -0,0 +1 @@
1
+ var e=class{cache=new Map;async get(e){let t=this.cache.get(e);return t?t.expiresAt<new Date?(this.cache.delete(e),null):{...t.result,cached:!0,cachedAt:t.expiresAt}:null}async set(e,t,n){let r=new Date(Date.now()+n*1e3);this.cache.set(e,{result:t,expiresAt:r})}async invalidate(e){let t=new RegExp(e);for(let e of this.cache.keys())t.test(e)&&this.cache.delete(e)}},t=class{cache;constructor(t){this.cache=t??new e}async execute(e,t){let n=Date.now(),r=this.validateQuery(e);if(!r.valid)return{data:[],columns:[],rowCount:0,executionTimeMs:Date.now()-n,cached:!1,error:r.errors.join(`, `)};let i=this.buildCacheKey(e,t),a=await this.cache.get(i);if(a)return a;let o;switch(e.type){case`AGGREGATION`:o=await this.executeAggregation(e.aggregation,t);break;case`METRIC`:o=await this.executeMetric(e.metricIds,t);break;case`SQL`:o=await this.executeSql(e.sql,t);break;default:o={data:[],columns:[],rowCount:0,executionTimeMs:Date.now()-n,cached:!1,error:`Unknown query type: ${e.type}`}}return o.executionTimeMs=Date.now()-n,o.cached=!1,await this.cache.set(i,o,300),o}validateQuery(e){let t=[];switch(e.type||t.push(`Query type is required`),e.type){case`SQL`:e.sql||t.push(`SQL query is required for SQL type`);break;case`METRIC`:(!e.metricIds||e.metricIds.length===0)&&t.push(`Metric IDs are required for METRIC type`);break;case`AGGREGATION`:e.aggregation?(e.aggregation.source||t.push(`Aggregation source is required`),(!e.aggregation.measures||e.aggregation.measures.length===0)&&t.push(`At least one measure is required`)):t.push(`Aggregation definition is required for AGGREGATION type`);break}return{valid:t.length===0,errors:t}}buildCacheKey(e,t){return JSON.stringify({definition:e,params:t})}async executeAggregation(e,t){let n=[...e.dimensions.map(e=>({name:e.name,type:e.type===`NUMBER`?`NUMBER`:e.type===`TIME`?`DATE`:`STRING`,label:e.name})),...e.measures.map(e=>({name:e.name,type:`NUMBER`,label:e.name,format:e.format}))],r=this.generateMockData(e,t);return{data:r,columns:n,rowCount:r.length,executionTimeMs:0,cached:!1}}async executeMetric(e,t){let n=e.map(e=>({metricId:e,value:Math.random()*1e3,change:(Math.random()-.5)*20}));return{data:n,columns:[{name:`metricId`,type:`STRING`},{name:`value`,type:`NUMBER`},{name:`change`,type:`NUMBER`}],rowCount:n.length,executionTimeMs:0,cached:!1}}async executeSql(e,t){return{data:[],columns:[],rowCount:0,executionTimeMs:0,cached:!1,error:`SQL execution not implemented in demo`}}generateMockData(e,t){let n=[],r=e.dimensions.find(e=>e.type===`TIME`);for(let i=0;i<10;i++){let a={};for(let n of e.dimensions)if(n.type===`TIME`){let e=new Date(t.dateRange?.start??new Date);e.setDate(e.getDate()+i),a[n.name]=e.toISOString().split(`T`)[0]}else a[n.name]=`${n.name}_${i%5}`;for(let t of e.measures){let e=r?100+i*10:Math.random()*1e3,n=(Math.random()-.5)*20;a[t.name]=Math.round((e+n)*100)/100}n.push(a)}return n}};function n(e){return new t(e)}export{t as BasicQueryEngine,e as InMemoryQueryCache,n as createQueryEngine};