@rawdash/hono 0.21.1 → 0.23.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.
- package/dist/index.d.ts +7 -1
- package/dist/index.js +36 -4
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.d.ts
CHANGED
|
@@ -33,6 +33,12 @@ interface HonoWidgetsRouterOptions extends HonoRouterOptions {
|
|
|
33
33
|
}
|
|
34
34
|
declare function createWidgetsRouter(opts: HonoWidgetsRouterOptions): Hono;
|
|
35
35
|
|
|
36
|
+
interface ConfigValidateRouterOptions {
|
|
37
|
+
connectorRegistry: ConnectorRegistry;
|
|
38
|
+
before?: MiddlewareHandler[];
|
|
39
|
+
}
|
|
40
|
+
declare function createConfigValidateRouter(opts: ConfigValidateRouterOptions): Hono;
|
|
41
|
+
|
|
36
42
|
declare function createRetentionRouter(opts: HonoRouterOptions): Hono;
|
|
37
43
|
interface RetentionLoopOptions {
|
|
38
44
|
getConfig: () => DashboardConfig | Promise<DashboardConfig>;
|
|
@@ -54,4 +60,4 @@ interface MountEngineResult {
|
|
|
54
60
|
}
|
|
55
61
|
declare function mountEngine(config: DashboardConfig, options: MountEngineOptions): MountEngineResult;
|
|
56
62
|
|
|
57
|
-
export { type HonoRouterOptions, type HonoStorageRouterOptions, type HonoWidgetsRouterOptions, type MountEngineOptions, type MountEngineResult, type RetentionLoopOptions, type SyncRouterOptions, createHealthRouter, createRetentionRouter, createSyncRouter, createSyncStateRouter, createWidgetsRouter, mountEngine, startRetentionLoop };
|
|
63
|
+
export { type ConfigValidateRouterOptions, type HonoRouterOptions, type HonoStorageRouterOptions, type HonoWidgetsRouterOptions, type MountEngineOptions, type MountEngineResult, type RetentionLoopOptions, type SyncRouterOptions, createConfigValidateRouter, createHealthRouter, createRetentionRouter, createSyncRouter, createSyncStateRouter, createWidgetsRouter, mountEngine, startRetentionLoop };
|
package/dist/index.js
CHANGED
|
@@ -135,6 +135,33 @@ function createWidgetsRouter(opts) {
|
|
|
135
135
|
return app;
|
|
136
136
|
}
|
|
137
137
|
|
|
138
|
+
// src/config-validate.ts
|
|
139
|
+
import {
|
|
140
|
+
resourcesByConnectorIdFromRegistry,
|
|
141
|
+
validateConfigMetrics
|
|
142
|
+
} from "@rawdash/core";
|
|
143
|
+
import { Hono as Hono4 } from "hono";
|
|
144
|
+
function createConfigValidateRouter(opts) {
|
|
145
|
+
const app = new Hono4();
|
|
146
|
+
applyBefore(app, opts.before);
|
|
147
|
+
const resources = resourcesByConnectorIdFromRegistry(opts.connectorRegistry);
|
|
148
|
+
app.post("/", async (c) => {
|
|
149
|
+
try {
|
|
150
|
+
const body = await c.req.json();
|
|
151
|
+
if (!body || typeof body !== "object" || !Array.isArray(body.connectors) || !body.dashboards || typeof body.dashboards !== "object") {
|
|
152
|
+
return c.json(
|
|
153
|
+
{ error: 'Body must be a config with "connectors" and "dashboards"' },
|
|
154
|
+
400
|
|
155
|
+
);
|
|
156
|
+
}
|
|
157
|
+
return c.json(validateConfigMetrics(body, resources));
|
|
158
|
+
} catch (err) {
|
|
159
|
+
return mapError(c, err);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
return app;
|
|
163
|
+
}
|
|
164
|
+
|
|
138
165
|
// src/retention.ts
|
|
139
166
|
import {
|
|
140
167
|
DEFAULT_RETENTION_INTERVAL_MS,
|
|
@@ -142,9 +169,9 @@ import {
|
|
|
142
169
|
runRetention,
|
|
143
170
|
runRetentionOnce
|
|
144
171
|
} from "@rawdash/server";
|
|
145
|
-
import { Hono as
|
|
172
|
+
import { Hono as Hono5 } from "hono";
|
|
146
173
|
function createRetentionRouter(opts) {
|
|
147
|
-
const app = new
|
|
174
|
+
const app = new Hono5();
|
|
148
175
|
applyBefore(app, opts.before);
|
|
149
176
|
let inFlight = null;
|
|
150
177
|
app.post("/retain", async (c) => {
|
|
@@ -219,13 +246,13 @@ function startRetentionLoop(opts) {
|
|
|
219
246
|
|
|
220
247
|
// src/mount.ts
|
|
221
248
|
import { InMemoryStorage, ROUTES } from "@rawdash/server";
|
|
222
|
-
import { Hono as
|
|
249
|
+
import { Hono as Hono6 } from "hono";
|
|
223
250
|
function mountEngine(config, options) {
|
|
224
251
|
const storage = options.storage ?? new InMemoryStorage();
|
|
225
252
|
const { connectorRegistry, secretsResolver, loggerFactory } = options;
|
|
226
253
|
const getConfig = () => config;
|
|
227
254
|
const getStorage = () => storage;
|
|
228
|
-
const app = new
|
|
255
|
+
const app = new Hono6();
|
|
229
256
|
app.route("/dashboards", createWidgetsRouter({ getConfig, getStorage }));
|
|
230
257
|
app.route(
|
|
231
258
|
ROUTES.sync,
|
|
@@ -238,6 +265,10 @@ function mountEngine(config, options) {
|
|
|
238
265
|
})
|
|
239
266
|
);
|
|
240
267
|
app.route(ROUTES.syncState, createSyncStateRouter({ getStorage }));
|
|
268
|
+
app.route(
|
|
269
|
+
ROUTES.configValidate,
|
|
270
|
+
createConfigValidateRouter({ connectorRegistry })
|
|
271
|
+
);
|
|
241
272
|
app.route("/retention", createRetentionRouter({ getConfig, getStorage }));
|
|
242
273
|
app.route(ROUTES.health, createHealthRouter());
|
|
243
274
|
let stopRetention = null;
|
|
@@ -254,6 +285,7 @@ function mountEngine(config, options) {
|
|
|
254
285
|
};
|
|
255
286
|
}
|
|
256
287
|
export {
|
|
288
|
+
createConfigValidateRouter,
|
|
257
289
|
createHealthRouter,
|
|
258
290
|
createRetentionRouter,
|
|
259
291
|
createSyncRouter,
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/health.ts","../src/sync.ts","../src/shared.ts","../src/widgets.ts","../src/retention.ts","../src/mount.ts"],"sourcesContent":["import { getHealth } from '@rawdash/server';\nimport { Hono } from 'hono';\n\nexport function createHealthRouter(): Hono {\n const app = new Hono();\n app.get('/', (c) => c.json(getHealth()));\n return app;\n}\n","import type { ConnectorRegistry, SecretsResolver } from '@rawdash/core';\nimport type { ConnectorLoggerFactory } from '@rawdash/server';\nimport { getSyncStateHandler, triggerSync } from '@rawdash/server';\nimport type { MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono';\n\nimport type { HonoRouterOptions, HonoStorageRouterOptions } from './shared';\nimport { applyBefore, mapError } from './shared';\n\nexport type SyncRouterOptions =\n | (HonoRouterOptions & {\n mode?: 'in-process';\n connectorRegistry: ConnectorRegistry;\n secretsResolver?: SecretsResolver;\n loggerFactory?: ConnectorLoggerFactory;\n })\n | {\n mode: 'deferred';\n getStorage: HonoRouterOptions['getStorage'];\n getConfig?: HonoRouterOptions['getConfig'];\n before?: MiddlewareHandler[];\n };\n\nexport function createSyncRouter(opts: SyncRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n app.post('/', async (c) => {\n try {\n if (opts.mode === 'deferred') {\n const getConfig = opts.getConfig;\n return c.json(\n await triggerSync(\n {\n getStorage: () => opts.getStorage(c),\n getConfig: getConfig ? () => getConfig(c) : undefined,\n },\n { mode: 'deferred' },\n ),\n );\n }\n return c.json(\n await triggerSync({\n getStorage: () => opts.getStorage(c),\n getConfig: () => opts.getConfig(c),\n connectorRegistry: opts.connectorRegistry,\n secretsResolver: opts.secretsResolver,\n loggerFactory: opts.loggerFactory,\n }),\n );\n } catch (err) {\n return mapError(c, err);\n }\n });\n return app;\n}\n\nexport function createSyncStateRouter(opts: HonoStorageRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n app.get('/', async (c) => {\n try {\n return c.json(\n await getSyncStateHandler({\n getConfig: () => {\n throw new Error('getConfig should not be called by sync-state');\n },\n getStorage: () => opts.getStorage(c),\n }),\n );\n } catch (err) {\n return mapError(c, err);\n }\n });\n return app;\n}\n","import type { EngineContext } from '@rawdash/server';\nimport type { DashboardConfig, ServerStorage } from '@rawdash/server';\nimport { isRawdashError } from '@rawdash/server';\nimport type { Context, MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono';\n\nexport interface HonoRouterOptions {\n getConfig: (c: Context) => DashboardConfig | Promise<DashboardConfig>;\n getStorage: (c: Context) => ServerStorage | Promise<ServerStorage>;\n before?: MiddlewareHandler[];\n}\n\nexport interface HonoStorageRouterOptions {\n getStorage: (c: Context) => ServerStorage | Promise<ServerStorage>;\n before?: MiddlewareHandler[];\n}\n\nexport function makeEngineContext(\n c: Context,\n opts: HonoRouterOptions,\n): EngineContext {\n return {\n getConfig: () => opts.getConfig(c),\n getStorage: () => opts.getStorage(c),\n };\n}\n\nexport function applyBefore(app: Hono, before?: MiddlewareHandler[]): void {\n if (!before) {\n return;\n }\n for (const mw of before) {\n app.use('*', mw);\n }\n}\n\nexport function mapError(c: Context, err: unknown): Response {\n if (isRawdashError(err)) {\n return c.json(\n { error: err.message, code: err.code },\n err.status as Parameters<typeof c.json>[1],\n );\n }\n throw err;\n}\n","import type { WidgetCache } from '@rawdash/server';\nimport { getWidget, listWidgets } from '@rawdash/server';\nimport type { Context } from 'hono';\nimport { Hono } from 'hono';\n\nimport type { HonoRouterOptions } from './shared';\nimport { applyBefore, makeEngineContext, mapError } from './shared';\n\nexport interface HonoWidgetsRouterOptions extends HonoRouterOptions {\n cache?: (c: Context) => WidgetCache;\n}\n\nexport function createWidgetsRouter(opts: HonoWidgetsRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n\n app.get('/:dashboardId/widgets', async (c) => {\n try {\n return c.json(\n await listWidgets(\n makeEngineContext(c, opts),\n c.req.param('dashboardId'),\n opts.cache?.(c),\n ),\n );\n } catch (err) {\n return mapError(c, err);\n }\n });\n\n app.get('/:dashboardId/widgets/:widgetId', async (c) => {\n try {\n const result = await getWidget(\n makeEngineContext(c, opts),\n c.req.param('dashboardId'),\n c.req.param('widgetId'),\n {\n cache: opts.cache?.(c),\n ifNoneMatch: c.req.header('if-none-match'),\n },\n );\n if (result.status === 'not-modified') {\n c.header('ETag', result.etag);\n return c.body(null, 304);\n }\n if (result.etag) {\n c.header('ETag', result.etag);\n }\n return c.json(result.widget);\n } catch (err) {\n return mapError(c, err);\n }\n });\n\n return app;\n}\n","import type { DashboardConfig, ServerStorage } from '@rawdash/server';\nimport {\n DEFAULT_RETENTION_INTERVAL_MS,\n hasPruningPolicy,\n runRetention,\n runRetentionOnce,\n} from '@rawdash/server';\nimport { Hono } from 'hono';\n\nimport type { HonoRouterOptions } from './shared';\nimport { applyBefore, makeEngineContext, mapError } from './shared';\n\nexport function createRetentionRouter(opts: HonoRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n\n let inFlight: Promise<void> | null = null;\n\n app.post('/retain', async (c) => {\n try {\n if (!inFlight) {\n const ctx = makeEngineContext(c, opts);\n inFlight = runRetentionOnce(ctx).finally(() => {\n inFlight = null;\n });\n }\n await inFlight;\n return c.json({ triggered: true });\n } catch (err) {\n console.error('retention run failed', err);\n return mapError(c, err);\n }\n });\n\n return app;\n}\n\nexport interface RetentionLoopOptions {\n getConfig: () => DashboardConfig | Promise<DashboardConfig>;\n getStorage: () => ServerStorage | Promise<ServerStorage>;\n intervalMs?: number;\n}\n\nexport function startRetentionLoop(opts: RetentionLoopOptions): () => void {\n let stopped = false;\n let inFlight: Promise<void> | null = null;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const tick = async (): Promise<void> => {\n if (inFlight || stopped) {\n return;\n }\n try {\n const config = await opts.getConfig();\n if (!config.retention || !hasPruningPolicy(config.retention)) {\n return;\n }\n const storage = await opts.getStorage();\n inFlight = runRetention(config, storage).finally(() => {\n inFlight = null;\n });\n await inFlight;\n } catch (err) {\n console.error('retention run failed', err);\n }\n };\n\n void (async () => {\n try {\n const config = await opts.getConfig();\n if (!config.retention || !hasPruningPolicy(config.retention)) {\n return;\n }\n if (stopped) {\n return;\n }\n const intervalMs =\n opts.intervalMs ??\n config.retention.intervalMs ??\n DEFAULT_RETENTION_INTERVAL_MS;\n const created = setInterval(() => {\n void tick();\n }, intervalMs);\n if (stopped) {\n clearInterval(created);\n } else {\n timer = created;\n }\n } catch (err) {\n console.error('retention loop startup failed', err);\n }\n })();\n\n return () => {\n stopped = true;\n if (timer !== null) {\n clearInterval(timer);\n timer = null;\n }\n };\n}\n","import type {\n ConnectorLoggerFactory,\n ConnectorRegistry,\n DashboardConfig,\n SecretsResolver,\n ServerStorage,\n} from '@rawdash/server';\nimport { InMemoryStorage, ROUTES } from '@rawdash/server';\nimport { Hono } from 'hono';\n\nimport { createHealthRouter } from './health';\nimport { createRetentionRouter, startRetentionLoop } from './retention';\nimport { createSyncRouter, createSyncStateRouter } from './sync';\nimport { createWidgetsRouter } from './widgets';\n\nexport interface MountEngineOptions {\n storage?: ServerStorage;\n connectorRegistry: ConnectorRegistry;\n secretsResolver?: SecretsResolver;\n loggerFactory?: ConnectorLoggerFactory;\n startRetention?: boolean;\n}\n\nexport interface MountEngineResult {\n app: Hono;\n stop(): void;\n}\n\nexport function mountEngine(\n config: DashboardConfig,\n options: MountEngineOptions,\n): MountEngineResult {\n const storage: ServerStorage = options.storage ?? new InMemoryStorage();\n const { connectorRegistry, secretsResolver, loggerFactory } = options;\n const getConfig = (): DashboardConfig => config;\n const getStorage = (): ServerStorage => storage;\n\n const app = new Hono();\n app.route('/dashboards', createWidgetsRouter({ getConfig, getStorage }));\n app.route(\n ROUTES.sync,\n createSyncRouter({\n getConfig,\n getStorage,\n connectorRegistry,\n secretsResolver,\n loggerFactory,\n }),\n );\n app.route(ROUTES.syncState, createSyncStateRouter({ getStorage }));\n app.route('/retention', createRetentionRouter({ getConfig, getStorage }));\n app.route(ROUTES.health, createHealthRouter());\n\n let stopRetention: (() => void) | null = null;\n if (options.startRetention !== false) {\n stopRetention = startRetentionLoop({ getConfig, getStorage });\n }\n\n return {\n app,\n stop() {\n if (stopRetention) {\n stopRetention();\n }\n },\n };\n}\n"],"mappings":"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","names":["Hono","Hono","Hono","Hono","Hono","Hono","Hono","Hono"]}
|
|
1
|
+
{"version":3,"sources":["../src/health.ts","../src/sync.ts","../src/shared.ts","../src/widgets.ts","../src/config-validate.ts","../src/retention.ts","../src/mount.ts"],"sourcesContent":["import { getHealth } from '@rawdash/server';\nimport { Hono } from 'hono';\n\nexport function createHealthRouter(): Hono {\n const app = new Hono();\n app.get('/', (c) => c.json(getHealth()));\n return app;\n}\n","import type { ConnectorRegistry, SecretsResolver } from '@rawdash/core';\nimport type { ConnectorLoggerFactory } from '@rawdash/server';\nimport { getSyncStateHandler, triggerSync } from '@rawdash/server';\nimport type { MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono';\n\nimport type { HonoRouterOptions, HonoStorageRouterOptions } from './shared';\nimport { applyBefore, mapError } from './shared';\n\nexport type SyncRouterOptions =\n | (HonoRouterOptions & {\n mode?: 'in-process';\n connectorRegistry: ConnectorRegistry;\n secretsResolver?: SecretsResolver;\n loggerFactory?: ConnectorLoggerFactory;\n })\n | {\n mode: 'deferred';\n getStorage: HonoRouterOptions['getStorage'];\n getConfig?: HonoRouterOptions['getConfig'];\n before?: MiddlewareHandler[];\n };\n\nexport function createSyncRouter(opts: SyncRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n app.post('/', async (c) => {\n try {\n if (opts.mode === 'deferred') {\n const getConfig = opts.getConfig;\n return c.json(\n await triggerSync(\n {\n getStorage: () => opts.getStorage(c),\n getConfig: getConfig ? () => getConfig(c) : undefined,\n },\n { mode: 'deferred' },\n ),\n );\n }\n return c.json(\n await triggerSync({\n getStorage: () => opts.getStorage(c),\n getConfig: () => opts.getConfig(c),\n connectorRegistry: opts.connectorRegistry,\n secretsResolver: opts.secretsResolver,\n loggerFactory: opts.loggerFactory,\n }),\n );\n } catch (err) {\n return mapError(c, err);\n }\n });\n return app;\n}\n\nexport function createSyncStateRouter(opts: HonoStorageRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n app.get('/', async (c) => {\n try {\n return c.json(\n await getSyncStateHandler({\n getConfig: () => {\n throw new Error('getConfig should not be called by sync-state');\n },\n getStorage: () => opts.getStorage(c),\n }),\n );\n } catch (err) {\n return mapError(c, err);\n }\n });\n return app;\n}\n","import type { EngineContext } from '@rawdash/server';\nimport type { DashboardConfig, ServerStorage } from '@rawdash/server';\nimport { isRawdashError } from '@rawdash/server';\nimport type { Context, MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono';\n\nexport interface HonoRouterOptions {\n getConfig: (c: Context) => DashboardConfig | Promise<DashboardConfig>;\n getStorage: (c: Context) => ServerStorage | Promise<ServerStorage>;\n before?: MiddlewareHandler[];\n}\n\nexport interface HonoStorageRouterOptions {\n getStorage: (c: Context) => ServerStorage | Promise<ServerStorage>;\n before?: MiddlewareHandler[];\n}\n\nexport function makeEngineContext(\n c: Context,\n opts: HonoRouterOptions,\n): EngineContext {\n return {\n getConfig: () => opts.getConfig(c),\n getStorage: () => opts.getStorage(c),\n };\n}\n\nexport function applyBefore(app: Hono, before?: MiddlewareHandler[]): void {\n if (!before) {\n return;\n }\n for (const mw of before) {\n app.use('*', mw);\n }\n}\n\nexport function mapError(c: Context, err: unknown): Response {\n if (isRawdashError(err)) {\n return c.json(\n { error: err.message, code: err.code },\n err.status as Parameters<typeof c.json>[1],\n );\n }\n throw err;\n}\n","import type { WidgetCache } from '@rawdash/server';\nimport { getWidget, listWidgets } from '@rawdash/server';\nimport type { Context } from 'hono';\nimport { Hono } from 'hono';\n\nimport type { HonoRouterOptions } from './shared';\nimport { applyBefore, makeEngineContext, mapError } from './shared';\n\nexport interface HonoWidgetsRouterOptions extends HonoRouterOptions {\n cache?: (c: Context) => WidgetCache;\n}\n\nexport function createWidgetsRouter(opts: HonoWidgetsRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n\n app.get('/:dashboardId/widgets', async (c) => {\n try {\n return c.json(\n await listWidgets(\n makeEngineContext(c, opts),\n c.req.param('dashboardId'),\n opts.cache?.(c),\n ),\n );\n } catch (err) {\n return mapError(c, err);\n }\n });\n\n app.get('/:dashboardId/widgets/:widgetId', async (c) => {\n try {\n const result = await getWidget(\n makeEngineContext(c, opts),\n c.req.param('dashboardId'),\n c.req.param('widgetId'),\n {\n cache: opts.cache?.(c),\n ifNoneMatch: c.req.header('if-none-match'),\n },\n );\n if (result.status === 'not-modified') {\n c.header('ETag', result.etag);\n return c.body(null, 304);\n }\n if (result.etag) {\n c.header('ETag', result.etag);\n }\n return c.json(result.widget);\n } catch (err) {\n return mapError(c, err);\n }\n });\n\n return app;\n}\n","import type { ConnectorRegistry, DashboardConfig } from '@rawdash/core';\nimport {\n resourcesByConnectorIdFromRegistry,\n validateConfigMetrics,\n} from '@rawdash/core';\nimport type { MiddlewareHandler } from 'hono';\nimport { Hono } from 'hono';\n\nimport { applyBefore, mapError } from './shared';\n\nexport interface ConfigValidateRouterOptions {\n connectorRegistry: ConnectorRegistry;\n before?: MiddlewareHandler[];\n}\n\nexport function createConfigValidateRouter(\n opts: ConfigValidateRouterOptions,\n): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n const resources = resourcesByConnectorIdFromRegistry(opts.connectorRegistry);\n app.post('/', async (c) => {\n try {\n const body = (await c.req.json()) as Partial<DashboardConfig>;\n if (\n !body ||\n typeof body !== 'object' ||\n !Array.isArray(body.connectors) ||\n !body.dashboards ||\n typeof body.dashboards !== 'object'\n ) {\n return c.json(\n { error: 'Body must be a config with \"connectors\" and \"dashboards\"' },\n 400,\n );\n }\n return c.json(validateConfigMetrics(body as DashboardConfig, resources));\n } catch (err) {\n return mapError(c, err);\n }\n });\n return app;\n}\n","import type { DashboardConfig, ServerStorage } from '@rawdash/server';\nimport {\n DEFAULT_RETENTION_INTERVAL_MS,\n hasPruningPolicy,\n runRetention,\n runRetentionOnce,\n} from '@rawdash/server';\nimport { Hono } from 'hono';\n\nimport type { HonoRouterOptions } from './shared';\nimport { applyBefore, makeEngineContext, mapError } from './shared';\n\nexport function createRetentionRouter(opts: HonoRouterOptions): Hono {\n const app = new Hono();\n applyBefore(app, opts.before);\n\n let inFlight: Promise<void> | null = null;\n\n app.post('/retain', async (c) => {\n try {\n if (!inFlight) {\n const ctx = makeEngineContext(c, opts);\n inFlight = runRetentionOnce(ctx).finally(() => {\n inFlight = null;\n });\n }\n await inFlight;\n return c.json({ triggered: true });\n } catch (err) {\n console.error('retention run failed', err);\n return mapError(c, err);\n }\n });\n\n return app;\n}\n\nexport interface RetentionLoopOptions {\n getConfig: () => DashboardConfig | Promise<DashboardConfig>;\n getStorage: () => ServerStorage | Promise<ServerStorage>;\n intervalMs?: number;\n}\n\nexport function startRetentionLoop(opts: RetentionLoopOptions): () => void {\n let stopped = false;\n let inFlight: Promise<void> | null = null;\n let timer: ReturnType<typeof setInterval> | null = null;\n\n const tick = async (): Promise<void> => {\n if (inFlight || stopped) {\n return;\n }\n try {\n const config = await opts.getConfig();\n if (!config.retention || !hasPruningPolicy(config.retention)) {\n return;\n }\n const storage = await opts.getStorage();\n inFlight = runRetention(config, storage).finally(() => {\n inFlight = null;\n });\n await inFlight;\n } catch (err) {\n console.error('retention run failed', err);\n }\n };\n\n void (async () => {\n try {\n const config = await opts.getConfig();\n if (!config.retention || !hasPruningPolicy(config.retention)) {\n return;\n }\n if (stopped) {\n return;\n }\n const intervalMs =\n opts.intervalMs ??\n config.retention.intervalMs ??\n DEFAULT_RETENTION_INTERVAL_MS;\n const created = setInterval(() => {\n void tick();\n }, intervalMs);\n if (stopped) {\n clearInterval(created);\n } else {\n timer = created;\n }\n } catch (err) {\n console.error('retention loop startup failed', err);\n }\n })();\n\n return () => {\n stopped = true;\n if (timer !== null) {\n clearInterval(timer);\n timer = null;\n }\n };\n}\n","import type {\n ConnectorLoggerFactory,\n ConnectorRegistry,\n DashboardConfig,\n SecretsResolver,\n ServerStorage,\n} from '@rawdash/server';\nimport { InMemoryStorage, ROUTES } from '@rawdash/server';\nimport { Hono } from 'hono';\n\nimport { createConfigValidateRouter } from './config-validate';\nimport { createHealthRouter } from './health';\nimport { createRetentionRouter, startRetentionLoop } from './retention';\nimport { createSyncRouter, createSyncStateRouter } from './sync';\nimport { createWidgetsRouter } from './widgets';\n\nexport interface MountEngineOptions {\n storage?: ServerStorage;\n connectorRegistry: ConnectorRegistry;\n secretsResolver?: SecretsResolver;\n loggerFactory?: ConnectorLoggerFactory;\n startRetention?: boolean;\n}\n\nexport interface MountEngineResult {\n app: Hono;\n stop(): void;\n}\n\nexport function mountEngine(\n config: DashboardConfig,\n options: MountEngineOptions,\n): MountEngineResult {\n const storage: ServerStorage = options.storage ?? new InMemoryStorage();\n const { connectorRegistry, secretsResolver, loggerFactory } = options;\n const getConfig = (): DashboardConfig => config;\n const getStorage = (): ServerStorage => storage;\n\n const app = new Hono();\n app.route('/dashboards', createWidgetsRouter({ getConfig, getStorage }));\n app.route(\n ROUTES.sync,\n createSyncRouter({\n getConfig,\n getStorage,\n connectorRegistry,\n secretsResolver,\n loggerFactory,\n }),\n );\n app.route(ROUTES.syncState, createSyncStateRouter({ getStorage }));\n app.route(\n ROUTES.configValidate,\n createConfigValidateRouter({ connectorRegistry }),\n );\n app.route('/retention', createRetentionRouter({ getConfig, getStorage }));\n app.route(ROUTES.health, createHealthRouter());\n\n let stopRetention: (() => void) | null = null;\n if (options.startRetention !== false) {\n stopRetention = startRetentionLoop({ getConfig, getStorage });\n }\n\n return {\n app,\n stop() {\n if (stopRetention) {\n stopRetention();\n }\n },\n };\n}\n"],"mappings":"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","names":["Hono","Hono","Hono","Hono","Hono","Hono","Hono","Hono","Hono","Hono"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rawdash/hono",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.23.0",
|
|
4
4
|
"description": "Hono adapter for rawdash — router factories and helpers that mount @rawdash/server handlers onto a Hono app. Runtime-agnostic (Workers, Node, Bun, Deno).",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"type": "module",
|
|
@@ -25,8 +25,8 @@
|
|
|
25
25
|
"hono": "^4.0.0"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {
|
|
28
|
-
"@rawdash/core": "0.
|
|
29
|
-
"@rawdash/server": "0.
|
|
28
|
+
"@rawdash/core": "0.23.0",
|
|
29
|
+
"@rawdash/server": "0.23.0"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
32
|
"hono": "^4.7.7",
|