@happyvertical/smrt-reports 0.55.6 → 0.55.8
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/AGENTS.md +34 -0
- package/README.md +16 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +995 -4
- package/dist/index.js.map +1 -1
- package/dist/manifest.json +444 -14
- package/dist/recipes.d.ts +28 -0
- package/dist/recipes.d.ts.map +1 -0
- package/dist/refresh.d.ts +3 -0
- package/dist/refresh.d.ts.map +1 -1
- package/dist/refresh.js +1 -1
- package/dist/refresh.js.map +1 -1
- package/dist/runtime-compiler.d.ts +142 -0
- package/dist/runtime-compiler.d.ts.map +1 -0
- package/dist/runtime-report.d.ts +105 -0
- package/dist/runtime-report.d.ts.map +1 -0
- package/dist/runtime-spec.d.ts +126 -0
- package/dist/runtime-spec.d.ts.map +1 -0
- package/dist/smrt-knowledge.json +328 -19
- package/dist/state.d.ts.map +1 -1
- package/dist/state.js +26 -13
- package/dist/state.js.map +1 -1
- package/package.json +8 -7
package/dist/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","names":["tenantId"],"sources":["../src/state.ts"],"sourcesContent":["import {\n field,\n SmrtCollection,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport type { ReportRefreshMode, ReportRefreshTrigger } from './types.js';\n\nexport const REPORT_RUNS_TABLE = '_smrt_report_runs';\nexport const REPORT_WATERMARKS_TABLE = '_smrt_report_watermarks';\nexport const REPORT_LOCKS_TABLE = '_smrt_report_locks';\nexport const REPORT_SCHEDULES_TABLE = '_smrt_report_schedules';\nexport const REPORT_REFRESH_TASKS_TABLE = '_smrt_report_refresh_tasks';\n\nexport const REPORT_RUNTIME_TABLES = [\n REPORT_RUNS_TABLE,\n REPORT_WATERMARKS_TABLE,\n REPORT_LOCKS_TABLE,\n] as const;\n\nexport const REPORT_SCHEDULER_TABLES = [\n REPORT_SCHEDULES_TABLE,\n REPORT_REFRESH_TASKS_TABLE,\n] as const;\n\nexport type ReportRunStatus = 'running' | 'success' | 'failed' | 'skipped';\nexport type ReportScheduleStatus = 'active' | 'paused' | 'disabled' | 'error';\n\nexport function scopeKeyForTenant(tenantId: string | null | undefined): string {\n return tenantId ? `tenant:${tenantId}` : 'global';\n}\n\nexport async function assertReportTablesReady(\n db: DatabaseInterface,\n tables: readonly string[] = REPORT_RUNTIME_TABLES,\n): Promise<void> {\n for (const table of tables) {\n const ready = await db.tableExists(table);\n if (!ready) {\n throw new Error(\n `Report runtime table '${table}' does not exist. ` +\n 'Run smrt db:migrate before refreshing reports.',\n );\n }\n }\n}\n\nconst INTERNAL_SURFACE = {\n api: false,\n cli: {\n include: ['list', 'get'],\n skipApiCheck: true,\n http: false,\n },\n mcp: false,\n};\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_runs',\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportRun extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', required: true })\n sourceClass: string = '';\n\n @field({ type: 'text', required: true })\n mode: ReportRefreshMode = 'rebuild';\n\n @field({ type: 'text', required: true })\n trigger: ReportRefreshTrigger = 'manual';\n\n @field({ type: 'text', required: true })\n status: ReportRunStatus = 'running';\n\n @field({ type: 'datetime', required: true })\n startedAt: Date = new Date();\n\n @field({ type: 'datetime', nullable: true })\n completedAt: Date | null = null;\n\n @field({ type: 'integer', required: true })\n rowCount: number = 0;\n\n @field({ type: 'integer', required: true })\n changedGroupCount: number = 0;\n\n @field({ type: 'text', nullable: true })\n watermarkBefore: string | null = null;\n\n @field({ type: 'text', nullable: true })\n watermarkAfter: string | null = null;\n\n @field({ type: 'text', nullable: true })\n error: string | null = null;\n\n @field({ type: 'json' })\n metadata: Record<string, unknown> = {};\n}\n\nexport class SmrtReportRunCollection extends SmrtCollection<SmrtReportRun> {\n static readonly _itemClass = SmrtReportRun;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_watermarks',\n conflictColumns: [\n 'report_class',\n 'scope_key',\n 'source_class',\n 'watermark_column',\n ],\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportWatermark extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', required: true })\n sourceClass: string = '';\n\n @field({ type: 'text', required: true })\n watermarkColumn: string = '';\n\n @field({ type: 'text', nullable: true })\n watermarkValue: string | null = null;\n\n @field({ type: 'text', nullable: true })\n lastRunId: string | null = null;\n}\n\nexport class SmrtReportWatermarkCollection extends SmrtCollection<SmrtReportWatermark> {\n static readonly _itemClass = SmrtReportWatermark;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_locks',\n conflictColumns: ['report_class', 'scope_key'],\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportLock extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', nullable: true })\n ownerId: string | null = null;\n\n @field({ type: 'datetime', nullable: true })\n acquiredAt: Date | null = null;\n\n @field({ type: 'datetime', nullable: true })\n heartbeatAt: Date | null = null;\n\n @field({ type: 'datetime', nullable: true })\n expiresAt: Date | null = null;\n}\n\nexport class SmrtReportLockCollection extends SmrtCollection<SmrtReportLock> {\n static readonly _itemClass = SmrtReportLock;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_schedules',\n conflictColumns: ['report_class', 'scope_key', 'cron', 'mode'],\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportSchedule extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', required: true })\n cron: string = '';\n\n @field({ type: 'text', required: true })\n trigger: ReportRefreshTrigger = 'schedule';\n\n @field({ type: 'text', required: true })\n mode: ReportRefreshMode = 'incremental';\n\n @field({ type: 'boolean', required: true })\n enabled: boolean = true;\n\n @field({ type: 'text', required: true })\n status: ReportScheduleStatus = 'active';\n\n @field({ type: 'datetime', nullable: true })\n nextRun: Date | null = null;\n\n @field({ type: 'datetime', nullable: true })\n lastRun: Date | null = null;\n\n @field({ type: 'text', nullable: true })\n lastStatus: 'success' | 'failed' | null = null;\n\n @field({ type: 'text', nullable: true })\n lastError: string | null = null;\n\n @field({ type: 'integer', required: true })\n runCount: number = 0;\n\n @field({ type: 'integer', required: true })\n successCount: number = 0;\n\n @field({ type: 'integer', required: true })\n failureCount: number = 0;\n\n @field({ type: 'integer', required: true })\n runningCount: number = 0;\n\n @field({ type: 'integer', required: true })\n maxConcurrent: number = 1;\n\n @field({ type: 'text', required: true })\n queue: string = 'reports';\n\n @field({ type: 'integer', required: true })\n priority: number = 70;\n\n @field({ type: 'integer', required: true })\n timeout: number = 3600000;\n}\n\nexport class SmrtReportScheduleCollection extends SmrtCollection<SmrtReportSchedule> {\n static readonly _itemClass = SmrtReportSchedule;\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"state.js","names":["tenantId"],"sources":["../src/state.ts"],"sourcesContent":["import {\n field,\n SmrtCollection,\n SmrtObject,\n smrt,\n} from '@happyvertical/smrt-core';\nimport { TenantScoped, tenantId } from '@happyvertical/smrt-tenancy';\nimport type { DatabaseInterface } from '@happyvertical/sql';\nimport type { ReportRefreshMode, ReportRefreshTrigger } from './types.js';\n\nexport const REPORT_RUNS_TABLE = '_smrt_report_runs';\nexport const REPORT_WATERMARKS_TABLE = '_smrt_report_watermarks';\nexport const REPORT_LOCKS_TABLE = '_smrt_report_locks';\nexport const REPORT_SCHEDULES_TABLE = '_smrt_report_schedules';\nexport const REPORT_REFRESH_TASKS_TABLE = '_smrt_report_refresh_tasks';\n\nexport const REPORT_RUNTIME_TABLES = [\n REPORT_RUNS_TABLE,\n REPORT_WATERMARKS_TABLE,\n REPORT_LOCKS_TABLE,\n] as const;\n\nexport const REPORT_SCHEDULER_TABLES = [\n REPORT_SCHEDULES_TABLE,\n REPORT_REFRESH_TASKS_TABLE,\n] as const;\n\nexport type ReportRunStatus = 'running' | 'success' | 'failed' | 'skipped';\nexport type ReportScheduleStatus = 'active' | 'paused' | 'disabled' | 'error';\n\nexport function scopeKeyForTenant(tenantId: string | null | undefined): string {\n return tenantId ? `tenant:${tenantId}` : 'global';\n}\n\nexport async function assertReportTablesReady(\n db: DatabaseInterface,\n tables: readonly string[] = REPORT_RUNTIME_TABLES,\n): Promise<void> {\n for (const table of tables) {\n const ready = await db.tableExists(table);\n if (!ready) {\n throw new Error(\n `Report runtime table '${table}' does not exist. ` +\n 'Run smrt db:migrate before refreshing reports.',\n );\n }\n }\n}\n\nconst INTERNAL_SURFACE = {\n api: false,\n cli: {\n include: ['list', 'get'],\n skipApiCheck: true,\n http: false,\n },\n mcp: false,\n};\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_runs',\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportRun extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', required: true })\n sourceClass: string = '';\n\n @field({ type: 'text', required: true })\n mode: ReportRefreshMode = 'rebuild';\n\n @field({ type: 'text', required: true })\n trigger: ReportRefreshTrigger = 'manual';\n\n @field({\n type: 'text',\n required: true,\n description:\n 'Whether the refresh is running, finished, failed or was skipped.',\n })\n status: ReportRunStatus = 'running';\n\n @field({\n type: 'datetime',\n required: true,\n description: 'When the refresh began.',\n })\n startedAt: Date = new Date();\n\n @field({\n type: 'datetime',\n nullable: true,\n description: 'When the refresh finished. Empty while it is still running.',\n })\n completedAt: Date | null = null;\n\n @field({\n type: 'integer',\n required: true,\n description: 'How many rows the report held after the refresh.',\n })\n rowCount: number = 0;\n\n @field({ type: 'integer', required: true })\n changedGroupCount: number = 0;\n\n @field({ type: 'text', nullable: true })\n watermarkBefore: string | null = null;\n\n @field({ type: 'text', nullable: true })\n watermarkAfter: string | null = null;\n\n @field({\n type: 'text',\n nullable: true,\n description: 'Why the refresh failed. Empty when it worked.',\n })\n error: string | null = null;\n\n @field({ type: 'json' })\n metadata: Record<string, unknown> = {};\n}\n\nexport class SmrtReportRunCollection extends SmrtCollection<SmrtReportRun> {\n static readonly _itemClass = SmrtReportRun;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_watermarks',\n conflictColumns: [\n 'report_class',\n 'scope_key',\n 'source_class',\n 'watermark_column',\n ],\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportWatermark extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', required: true })\n sourceClass: string = '';\n\n @field({ type: 'text', required: true })\n watermarkColumn: string = '';\n\n @field({ type: 'text', nullable: true })\n watermarkValue: string | null = null;\n\n @field({ type: 'text', nullable: true })\n lastRunId: string | null = null;\n}\n\nexport class SmrtReportWatermarkCollection extends SmrtCollection<SmrtReportWatermark> {\n static readonly _itemClass = SmrtReportWatermark;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_locks',\n conflictColumns: ['report_class', 'scope_key'],\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportLock extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({ type: 'text', nullable: true })\n ownerId: string | null = null;\n\n @field({ type: 'datetime', nullable: true })\n acquiredAt: Date | null = null;\n\n @field({ type: 'datetime', nullable: true })\n heartbeatAt: Date | null = null;\n\n @field({ type: 'datetime', nullable: true })\n expiresAt: Date | null = null;\n}\n\nexport class SmrtReportLockCollection extends SmrtCollection<SmrtReportLock> {\n static readonly _itemClass = SmrtReportLock;\n}\n\n@TenantScoped({ mode: 'optional' })\n@smrt({\n tableName: '_smrt_report_schedules',\n conflictColumns: ['report_class', 'scope_key', 'cron', 'mode'],\n ...INTERNAL_SURFACE,\n})\nexport class SmrtReportSchedule extends SmrtObject { static __smrtPackage__ = \"@happyvertical/smrt-reports\";\n @tenantId({ nullable: true })\n tenantId: string | null = null;\n\n @field({ type: 'text', required: true })\n scopeKey: string = 'global';\n\n @field({ type: 'text', required: true })\n reportClass: string = '';\n\n @field({\n type: 'text',\n required: true,\n description:\n 'When the report refreshes, as a cron schedule such as 0 6 * * * for 6 am daily.',\n })\n cron: string = '';\n\n @field({ type: 'text', required: true })\n trigger: ReportRefreshTrigger = 'schedule';\n\n @field({\n type: 'text',\n required: true,\n description:\n 'Rebuild recomputes the whole report. Incremental updates only what changed.',\n })\n mode: ReportRefreshMode = 'incremental';\n\n @field({\n type: 'boolean',\n required: true,\n description: 'Turn off to stop refreshing without deleting the schedule.',\n })\n enabled: boolean = true;\n\n @field({\n type: 'text',\n required: true,\n description:\n 'Whether the schedule is active, paused, disabled or in error.',\n })\n status: ReportScheduleStatus = 'active';\n\n @field({\n type: 'datetime',\n nullable: true,\n description: 'When the report is next due to refresh.',\n })\n nextRun: Date | null = null;\n\n @field({\n type: 'datetime',\n nullable: true,\n description: 'When the report last started a scheduled refresh.',\n })\n lastRun: Date | null = null;\n\n @field({\n type: 'text',\n nullable: true,\n description: 'Whether the last scheduled refresh worked or failed.',\n })\n lastStatus: 'success' | 'failed' | null = null;\n\n @field({\n type: 'text',\n nullable: true,\n description: 'Why the last scheduled refresh failed. Empty when it worked.',\n })\n lastError: string | null = null;\n\n @field({ type: 'integer', required: true })\n runCount: number = 0;\n\n @field({ type: 'integer', required: true })\n successCount: number = 0;\n\n @field({ type: 'integer', required: true })\n failureCount: number = 0;\n\n @field({ type: 'integer', required: true })\n runningCount: number = 0;\n\n @field({ type: 'integer', required: true })\n maxConcurrent: number = 1;\n\n @field({ type: 'text', required: true })\n queue: string = 'reports';\n\n @field({ type: 'integer', required: true })\n priority: number = 70;\n\n @field({ type: 'integer', required: true })\n timeout: number = 3600000;\n}\n\nexport class SmrtReportScheduleCollection extends SmrtCollection<SmrtReportSchedule> {\n static readonly _itemClass = SmrtReportSchedule;\n}\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@happyvertical/smrt-reports",
|
|
3
|
-
"version": "0.55.
|
|
3
|
+
"version": "0.55.8",
|
|
4
4
|
"description": "Materialized aggregate report models for SMRT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -43,14 +43,15 @@
|
|
|
43
43
|
"./manifest.json": "./dist/manifest.json"
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
|
-
"@happyvertical/smrt-core": "0.55.
|
|
47
|
-
"@happyvertical/smrt-jobs": "0.55.
|
|
48
|
-
"@happyvertical/smrt-types": "0.55.
|
|
49
|
-
"@happyvertical/smrt-tenancy": "0.55.
|
|
50
|
-
"@happyvertical/sql": "^0.
|
|
46
|
+
"@happyvertical/smrt-core": "0.55.8",
|
|
47
|
+
"@happyvertical/smrt-jobs": "0.55.8",
|
|
48
|
+
"@happyvertical/smrt-types": "0.55.8",
|
|
49
|
+
"@happyvertical/smrt-tenancy": "0.55.8",
|
|
50
|
+
"@happyvertical/sql": "^0.103.1"
|
|
51
51
|
},
|
|
52
52
|
"devDependencies": {
|
|
53
|
-
"@happyvertical/smrt-
|
|
53
|
+
"@happyvertical/smrt-scanner": "0.55.8",
|
|
54
|
+
"@happyvertical/smrt-vitest": "0.55.8",
|
|
54
55
|
"@types/node": "24.13.6",
|
|
55
56
|
"typescript": "6.0.3",
|
|
56
57
|
"vite": "8.1.4",
|