@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.
- package/README.md +267 -0
- package/dist/contracts/index.d.ts +1114 -0
- package/dist/contracts/index.js +1 -0
- package/dist/entities/index.d.ts +219 -0
- package/dist/entities/index.js +1 -0
- package/dist/events.d.ts +324 -0
- package/dist/events.js +1 -0
- package/dist/feature.d.ts +1206 -0
- package/dist/feature.js +1 -0
- package/dist/handlers/index.d.ts +77 -0
- package/dist/handlers/index.js +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.js +1 -0
- package/dist/libs/contracts/dist/capabilities/openbanking.js +1 -0
- package/dist/libs/contracts/dist/client/index.js +1 -0
- package/dist/libs/contracts/dist/client/react/feature-render.js +1 -0
- package/dist/libs/contracts/dist/client/react/form-render.js +1 -0
- package/dist/libs/contracts/dist/client/react/index.js +1 -0
- package/dist/libs/contracts/dist/events.js +1 -0
- package/dist/libs/contracts/dist/experiments/evaluator.js +1 -0
- package/dist/libs/contracts/dist/graphql-federation/dist/index.js +1 -0
- package/dist/libs/contracts/dist/index.js +1 -0
- package/dist/libs/contracts/dist/install.js +1 -0
- package/dist/libs/contracts/dist/integrations/contracts.js +1 -0
- package/dist/libs/contracts/dist/integrations/index.js +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/accounts.js +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/balances.js +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/index.js +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/contracts/transactions.js +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/models.js +1 -0
- package/dist/libs/contracts/dist/integrations/openbanking/telemetry.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/elevenlabs.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/gcs-storage.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/gmail.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/google-calendar.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/elevenlabs-voice.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/gcs-storage.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/gmail-inbound.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/gmail-outbound.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/google-calendar.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/index.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/mistral-embedding.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/mistral-llm.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/postmark-email.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/powens-client.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/powens-openbanking.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/provider-factory.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/qdrant-vector.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/stripe-payments.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/impls/twilio-sms.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/index.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/mistral.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/postmark.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/powens.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/qdrant.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/stripe.js +1 -0
- package/dist/libs/contracts/dist/integrations/providers/twilio-sms.js +1 -0
- package/dist/libs/contracts/dist/integrations/runtime.js +1 -0
- package/dist/libs/contracts/dist/integrations/secrets/env-secret-provider.js +1 -0
- package/dist/libs/contracts/dist/integrations/secrets/gcp-secret-manager.js +1 -0
- package/dist/libs/contracts/dist/integrations/secrets/index.js +1 -0
- package/dist/libs/contracts/dist/integrations/secrets/manager.js +1 -0
- package/dist/libs/contracts/dist/integrations/secrets/provider.js +1 -0
- package/dist/libs/contracts/dist/jsonschema.js +1 -0
- package/dist/libs/contracts/dist/knowledge/contracts.js +1 -0
- package/dist/libs/contracts/dist/knowledge/index.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/email-threads.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/financial-docs.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/financial-overview.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/index.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/product-canon.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/support-faq.js +1 -0
- package/dist/libs/contracts/dist/knowledge/spaces/uploaded-docs.js +1 -0
- package/dist/libs/contracts/dist/onboarding-base.js +1 -0
- package/dist/libs/contracts/dist/ownership.js +1 -0
- package/dist/libs/contracts/dist/presentations.js +1 -0
- package/dist/libs/contracts/dist/presentations.v2.js +1 -0
- package/dist/libs/contracts/dist/prompt.js +1 -0
- package/dist/libs/contracts/dist/promptRegistry.js +1 -0
- package/dist/libs/contracts/dist/regenerator/index.js +1 -0
- package/dist/libs/contracts/dist/regenerator/service.js +1 -0
- package/dist/libs/contracts/dist/registry.js +1 -0
- package/dist/libs/contracts/dist/resources.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/EnumType.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/FieldType.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/ScalarTypeEnum.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/SchemaModel.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/entity/defineEntity.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/entity/index.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/entity/types.js +1 -0
- package/dist/libs/contracts/dist/schema/dist/index.js +1 -0
- package/dist/libs/contracts/dist/server/graphql-pothos.js +1 -0
- package/dist/libs/contracts/dist/server/graphql-schema-export.js +1 -0
- package/dist/libs/contracts/dist/server/index.js +1 -0
- package/dist/libs/contracts/dist/server/provider-mcp.js +1 -0
- package/dist/libs/contracts/dist/server/rest-elysia.js +1 -0
- package/dist/libs/contracts/dist/server/rest-express.js +1 -0
- package/dist/libs/contracts/dist/server/rest-generic.js +1 -0
- package/dist/libs/contracts/dist/server/rest-next-app.js +1 -0
- package/dist/libs/contracts/dist/server/rest-next-pages.js +1 -0
- package/dist/libs/contracts/dist/spec.js +1 -0
- package/dist/libs/contracts/dist/telemetry/index.js +1 -0
- package/dist/libs/contracts/dist/telemetry/tracker.js +1 -0
- package/dist/libs/contracts/dist/tests/index.js +1 -0
- package/dist/libs/contracts/dist/tests/runner.js +1 -0
- package/dist/libs/contracts/dist/workflow/index.js +1 -0
- package/dist/libs/contracts/dist/workflow/runner.js +1 -0
- package/dist/libs/schema/dist/EnumType.js +1 -0
- package/dist/libs/schema/dist/FieldType.js +1 -0
- package/dist/libs/schema/dist/ScalarTypeEnum.js +1 -0
- package/dist/libs/schema/dist/SchemaModel.js +1 -0
- package/dist/libs/schema/dist/entity/defineEntity.js +1 -0
- package/dist/libs/schema/dist/entity/index.js +1 -0
- package/dist/libs/schema/dist/entity/types.js +1 -0
- package/dist/libs/schema/dist/index.js +1 -0
- package/dist/presentations/index.d.ts +473 -0
- package/dist/presentations/index.js +1 -0
- package/dist/query-engine/index.d.ts +105 -0
- package/dist/query-engine/index.js +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +64 -0
package/README.md
ADDED
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
# @lssm/example.analytics-dashboard
|
|
2
|
+
|
|
3
|
+
> Analytics Dashboard Example - Comprehensive data visualization and reporting solution
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
This example demonstrates a full-featured analytics and dashboarding system built with ContractSpec, showcasing:
|
|
8
|
+
|
|
9
|
+
- **Customizable Dashboards** - Drag-and-drop widget layouts
|
|
10
|
+
- **Visual Query Builder** - Build queries without writing SQL
|
|
11
|
+
- **Multiple Widget Types** - Charts, metrics, tables, maps
|
|
12
|
+
- **Scheduled Reports** - Automated report generation and delivery
|
|
13
|
+
- **Public Sharing** - Share dashboards with external stakeholders
|
|
14
|
+
|
|
15
|
+
## Entities
|
|
16
|
+
|
|
17
|
+
### Dashboard
|
|
18
|
+
|
|
19
|
+
Main container for widgets and visualizations.
|
|
20
|
+
|
|
21
|
+
| Field | Type | Description |
|
|
22
|
+
|-------|------|-------------|
|
|
23
|
+
| id | string | Unique identifier |
|
|
24
|
+
| organizationId | string | Organization owner |
|
|
25
|
+
| name | string | Dashboard name |
|
|
26
|
+
| slug | string | URL-friendly identifier |
|
|
27
|
+
| description | string? | Dashboard description |
|
|
28
|
+
| status | DashboardStatus | DRAFT, PUBLISHED, ARCHIVED |
|
|
29
|
+
| refreshInterval | RefreshInterval | Auto-refresh frequency |
|
|
30
|
+
| defaultDateRange | TimeRange | Default time filter |
|
|
31
|
+
| isPublic | boolean | Public visibility |
|
|
32
|
+
| shareToken | string? | Public access token |
|
|
33
|
+
|
|
34
|
+
### Widget
|
|
35
|
+
|
|
36
|
+
Individual visualization component on a dashboard.
|
|
37
|
+
|
|
38
|
+
| Field | Type | Description |
|
|
39
|
+
|-------|------|-------------|
|
|
40
|
+
| id | string | Unique identifier |
|
|
41
|
+
| dashboardId | string | Parent dashboard |
|
|
42
|
+
| name | string | Widget title |
|
|
43
|
+
| type | WidgetType | LINE_CHART, BAR_CHART, PIE_CHART, METRIC, TABLE, etc. |
|
|
44
|
+
| gridX, gridY | number | Grid position |
|
|
45
|
+
| gridWidth, gridHeight | number | Grid dimensions |
|
|
46
|
+
| queryId | string? | Linked query |
|
|
47
|
+
| config | JSON | Widget-specific configuration |
|
|
48
|
+
|
|
49
|
+
### Query
|
|
50
|
+
|
|
51
|
+
Reusable data query definition.
|
|
52
|
+
|
|
53
|
+
| Field | Type | Description |
|
|
54
|
+
|-------|------|-------------|
|
|
55
|
+
| id | string | Unique identifier |
|
|
56
|
+
| name | string | Query name |
|
|
57
|
+
| type | QueryType | SQL, METRIC, AGGREGATION, CUSTOM |
|
|
58
|
+
| definition | JSON | Query definition |
|
|
59
|
+
| sql | string? | Raw SQL for SQL type |
|
|
60
|
+
| metricIds | string[] | Metrics for METRIC type |
|
|
61
|
+
| cacheTtlSeconds | number | Cache duration |
|
|
62
|
+
| isShared | boolean | Shared across org |
|
|
63
|
+
|
|
64
|
+
### Report
|
|
65
|
+
|
|
66
|
+
Scheduled report definition.
|
|
67
|
+
|
|
68
|
+
| Field | Type | Description |
|
|
69
|
+
|-------|------|-------------|
|
|
70
|
+
| id | string | Unique identifier |
|
|
71
|
+
| dashboardId | string | Source dashboard |
|
|
72
|
+
| name | string | Report name |
|
|
73
|
+
| schedule | string | Cron expression |
|
|
74
|
+
| format | ReportFormat | PDF, PNG, CSV |
|
|
75
|
+
| recipients | string[] | Email addresses |
|
|
76
|
+
| lastRunAt | DateTime? | Last execution time |
|
|
77
|
+
|
|
78
|
+
## Contracts
|
|
79
|
+
|
|
80
|
+
### Dashboard Management
|
|
81
|
+
|
|
82
|
+
```typescript
|
|
83
|
+
// Create a new dashboard
|
|
84
|
+
CreateDashboardContract
|
|
85
|
+
Input: { name, slug, description?, refreshInterval? }
|
|
86
|
+
Output: Dashboard
|
|
87
|
+
|
|
88
|
+
// Add widget to dashboard
|
|
89
|
+
AddWidgetContract
|
|
90
|
+
Input: { dashboardId, name, type, gridX?, gridY?, queryId?, config? }
|
|
91
|
+
Output: Widget
|
|
92
|
+
|
|
93
|
+
// Get dashboard with widgets
|
|
94
|
+
GetDashboardContract
|
|
95
|
+
Input: { dashboardId? | slug? | shareToken? }
|
|
96
|
+
Output: Dashboard (with widgets)
|
|
97
|
+
|
|
98
|
+
// List user's dashboards
|
|
99
|
+
ListDashboardsContract
|
|
100
|
+
Input: { status?, search?, limit?, offset? }
|
|
101
|
+
Output: { dashboards, total }
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
### Query Management
|
|
105
|
+
|
|
106
|
+
```typescript
|
|
107
|
+
// Create a query
|
|
108
|
+
CreateQueryContract
|
|
109
|
+
Input: { name, type, definition, sql?, metricIds?, cacheTtlSeconds? }
|
|
110
|
+
Output: Query
|
|
111
|
+
|
|
112
|
+
// Execute query
|
|
113
|
+
ExecuteQueryContract
|
|
114
|
+
Input: { queryId, parameters?, dateRange?, filters?, forceRefresh? }
|
|
115
|
+
Output: { data, columns, rowCount, executionTimeMs, cached }
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Events
|
|
119
|
+
|
|
120
|
+
| Event | Description |
|
|
121
|
+
|-------|-------------|
|
|
122
|
+
| `analytics.dashboard.created` | Dashboard created |
|
|
123
|
+
| `analytics.dashboard.published` | Dashboard published |
|
|
124
|
+
| `analytics.widget.added` | Widget added to dashboard |
|
|
125
|
+
| `analytics.query.created` | Query created |
|
|
126
|
+
| `analytics.query.executed` | Query executed |
|
|
127
|
+
| `analytics.dashboard.viewed` | Dashboard viewed |
|
|
128
|
+
| `analytics.report.generated` | Scheduled report generated |
|
|
129
|
+
|
|
130
|
+
## Widget Types
|
|
131
|
+
|
|
132
|
+
- **Line Chart** - Time series data
|
|
133
|
+
- **Bar Chart** - Categorical comparisons
|
|
134
|
+
- **Pie Chart** - Part-to-whole relationships
|
|
135
|
+
- **Area Chart** - Stacked time series
|
|
136
|
+
- **Scatter Plot** - Correlation analysis
|
|
137
|
+
- **Metric** - Single KPI display
|
|
138
|
+
- **Table** - Tabular data
|
|
139
|
+
- **Heatmap** - Density visualization
|
|
140
|
+
- **Funnel** - Conversion analysis
|
|
141
|
+
- **Map** - Geographic data
|
|
142
|
+
- **Text** - Markdown content
|
|
143
|
+
- **Embed** - External iframe
|
|
144
|
+
|
|
145
|
+
## Query Types
|
|
146
|
+
|
|
147
|
+
### Metric Query
|
|
148
|
+
|
|
149
|
+
Query usage metrics from the metering system.
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"type": "METRIC",
|
|
154
|
+
"metricIds": ["active_users", "api_calls", "storage_used"]
|
|
155
|
+
}
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### Aggregation Query
|
|
159
|
+
|
|
160
|
+
Build aggregations with measures and dimensions.
|
|
161
|
+
|
|
162
|
+
```json
|
|
163
|
+
{
|
|
164
|
+
"type": "AGGREGATION",
|
|
165
|
+
"source": "events",
|
|
166
|
+
"measures": [
|
|
167
|
+
{ "name": "total_count", "field": "id", "aggregation": "COUNT" }
|
|
168
|
+
],
|
|
169
|
+
"dimensions": [
|
|
170
|
+
{ "name": "date", "field": "created_at", "type": "TIME", "granularity": "DAY" }
|
|
171
|
+
],
|
|
172
|
+
"filters": [
|
|
173
|
+
{ "field": "event_type", "operator": "eq", "value": "page_view" }
|
|
174
|
+
]
|
|
175
|
+
}
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
### SQL Query
|
|
179
|
+
|
|
180
|
+
Write custom SQL (requires feature flag).
|
|
181
|
+
|
|
182
|
+
```json
|
|
183
|
+
{
|
|
184
|
+
"type": "SQL",
|
|
185
|
+
"sql": "SELECT date_trunc('day', created_at) as day, count(*) FROM events GROUP BY 1"
|
|
186
|
+
}
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
## Usage
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
import {
|
|
193
|
+
AnalyticsDashboardFeature,
|
|
194
|
+
CreateDashboardContract,
|
|
195
|
+
AddWidgetContract,
|
|
196
|
+
createQueryEngine,
|
|
197
|
+
} from '@lssm/example.analytics-dashboard';
|
|
198
|
+
|
|
199
|
+
// Create a dashboard
|
|
200
|
+
const dashboard = await execute(CreateDashboardContract, {
|
|
201
|
+
name: 'Sales Overview',
|
|
202
|
+
slug: 'sales-overview',
|
|
203
|
+
description: 'Key sales metrics and trends',
|
|
204
|
+
refreshInterval: 'FIFTEEN_MINUTES',
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
// Add a metric widget
|
|
208
|
+
const widget = await execute(AddWidgetContract, {
|
|
209
|
+
dashboardId: dashboard.id,
|
|
210
|
+
name: 'Total Revenue',
|
|
211
|
+
type: 'METRIC',
|
|
212
|
+
gridX: 0,
|
|
213
|
+
gridY: 0,
|
|
214
|
+
gridWidth: 3,
|
|
215
|
+
gridHeight: 2,
|
|
216
|
+
queryId: revenueQueryId,
|
|
217
|
+
config: {
|
|
218
|
+
format: 'currency',
|
|
219
|
+
prefix: '$',
|
|
220
|
+
showChange: true,
|
|
221
|
+
},
|
|
222
|
+
});
|
|
223
|
+
|
|
224
|
+
// Execute a query
|
|
225
|
+
const queryEngine = createQueryEngine();
|
|
226
|
+
const result = await queryEngine.execute(
|
|
227
|
+
{ type: 'METRIC', metricIds: ['daily_revenue'] },
|
|
228
|
+
{ dateRange: { start: new Date('2024-01-01'), end: new Date() } }
|
|
229
|
+
);
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
## Dependencies
|
|
233
|
+
|
|
234
|
+
- `@lssm/lib.schema` - Entity definitions
|
|
235
|
+
- `@lssm/lib.contracts` - Contract definitions
|
|
236
|
+
- `@lssm/lib.identity-rbac` - Access control
|
|
237
|
+
- `@lssm/lib.metering` - Usage metrics integration
|
|
238
|
+
- `@lssm/modules.audit-trail` - Change tracking
|
|
239
|
+
- `@lssm/modules.notifications` - Report delivery
|
|
240
|
+
|
|
241
|
+
## Feature Flags
|
|
242
|
+
|
|
243
|
+
| Flag | Description | Default |
|
|
244
|
+
|------|-------------|---------|
|
|
245
|
+
| `ANALYTICS_SQL_QUERIES` | Enable SQL query support | false |
|
|
246
|
+
| `ANALYTICS_SCHEDULED_REPORTS` | Enable scheduled reports | true |
|
|
247
|
+
| `ANALYTICS_PUBLIC_DASHBOARDS` | Allow public sharing | false |
|
|
248
|
+
| `ANALYTICS_ADVANCED_WIDGETS` | Enable maps, funnels | true |
|
|
249
|
+
| `ANALYTICS_QUERY_CACHING` | Enable result caching | true |
|
|
250
|
+
|
|
251
|
+
## Permissions
|
|
252
|
+
|
|
253
|
+
| Permission | Description | Default Roles |
|
|
254
|
+
|------------|-------------|---------------|
|
|
255
|
+
| `dashboard:view` | View dashboards | viewer, analyst, admin |
|
|
256
|
+
| `dashboard:create` | Create dashboards | analyst, admin |
|
|
257
|
+
| `dashboard:edit` | Edit dashboards | analyst, admin |
|
|
258
|
+
| `dashboard:delete` | Delete dashboards | admin |
|
|
259
|
+
| `dashboard:share` | Share externally | analyst, admin |
|
|
260
|
+
| `query:create` | Create queries | analyst, admin |
|
|
261
|
+
| `query:execute` | Execute queries | viewer, analyst, admin |
|
|
262
|
+
| `report:schedule` | Schedule reports | analyst, admin |
|
|
263
|
+
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
|
|
267
|
+
|