@strav/devtools 0.2.2 → 0.2.4
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/package.json +1 -1
- package/src/dashboard/routes.ts +35 -17
- package/src/devtools_manager.ts +7 -0
- package/src/types.ts +11 -0
package/package.json
CHANGED
package/src/dashboard/routes.ts
CHANGED
|
@@ -7,7 +7,7 @@ import { PERIODS } from '../storage/aggregate_store.ts'
|
|
|
7
7
|
/**
|
|
8
8
|
* Register the devtools dashboard routes on a router.
|
|
9
9
|
*
|
|
10
|
-
*
|
|
10
|
+
* Uses route aliases from the devtools configuration for named routes.
|
|
11
11
|
*
|
|
12
12
|
* @example
|
|
13
13
|
* import { registerDashboard } from '@strav/devtools/dashboard/routes'
|
|
@@ -15,31 +15,49 @@ import { PERIODS } from '../storage/aggregate_store.ts'
|
|
|
15
15
|
*
|
|
16
16
|
* // With custom auth guard
|
|
17
17
|
* registerDashboard(router, (ctx) => ctx.get('user')?.isAdmin)
|
|
18
|
+
*
|
|
19
|
+
* // After registration, use named routes:
|
|
20
|
+
* const dashboardUrl = routeUrl('devtools.dashboard.home')
|
|
21
|
+
* const apiResponse = await route('devtools.api.entries', { params: { limit: 50 } })
|
|
18
22
|
*/
|
|
19
23
|
export function registerDashboard(
|
|
20
24
|
router: Router,
|
|
21
25
|
guard?: (ctx: Context) => boolean | Promise<boolean>
|
|
22
26
|
): void {
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
27
|
+
const config = DevtoolsManager.config
|
|
28
|
+
const dashboardAlias = config.routes.aliases.dashboard
|
|
29
|
+
const apiAlias = config.routes.aliases.api
|
|
30
|
+
const subdomain = config.routes.subdomain
|
|
26
31
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
r.
|
|
30
|
-
r.get('/api/entries/:uuid/batch', showBatch)
|
|
31
|
-
r.get('/api/entries/tag/:tag', entriesByTag)
|
|
32
|
+
router.group({ prefix: '/_devtools', middleware: [dashboardAuth(guard)], subdomain }, r => {
|
|
33
|
+
// ---- Dashboard routes ----
|
|
34
|
+
r.group({}, dashboardRoutes).as(dashboardAlias)
|
|
32
35
|
|
|
33
|
-
// ---- API
|
|
34
|
-
r.
|
|
35
|
-
|
|
36
|
+
// ---- API routes ----
|
|
37
|
+
r.group({ prefix: '/api' }, apiRoutes).as(apiAlias)
|
|
38
|
+
})
|
|
36
39
|
|
|
37
|
-
|
|
38
|
-
r.get('
|
|
40
|
+
function dashboardRoutes(r: Router): void {
|
|
41
|
+
r.get('', serveDashboard).as('home')
|
|
42
|
+
}
|
|
39
43
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
44
|
+
function apiRoutes(r: Router): void {
|
|
45
|
+
// ---- Entries (Inspector) ----
|
|
46
|
+
r.get('/entries', listEntries).as('entries')
|
|
47
|
+
r.get('/entries/:uuid', showEntry).as('entry')
|
|
48
|
+
r.get('/entries/:uuid/batch', showBatch).as('entry_batch')
|
|
49
|
+
r.get('/entries/tag/:tag', entriesByTag).as('entries_by_tag')
|
|
50
|
+
|
|
51
|
+
// ---- Aggregates (Metrics) ----
|
|
52
|
+
r.get('/metrics/:type', queryMetrics).as('metrics')
|
|
53
|
+
r.get('/metrics/:type/top', topKeys).as('metrics_top')
|
|
54
|
+
|
|
55
|
+
// ---- Stats ----
|
|
56
|
+
r.get('/stats', stats).as('stats')
|
|
57
|
+
|
|
58
|
+
// ---- Prune ----
|
|
59
|
+
r.delete('/entries', pruneEntries).as('prune_entries')
|
|
60
|
+
}
|
|
43
61
|
}
|
|
44
62
|
|
|
45
63
|
// ---------------------------------------------------------------------------
|
package/src/devtools_manager.ts
CHANGED
|
@@ -47,6 +47,13 @@ export default class DevtoolsManager {
|
|
|
47
47
|
|
|
48
48
|
DevtoolsManager._config = {
|
|
49
49
|
enabled: config.get('devtools.enabled', true) as boolean,
|
|
50
|
+
routes: {
|
|
51
|
+
aliases: {
|
|
52
|
+
dashboard: config.get('devtools.routes.aliases.dashboard', 'devtools.dashboard') as string,
|
|
53
|
+
api: config.get('devtools.routes.aliases.api', 'devtools.api') as string,
|
|
54
|
+
},
|
|
55
|
+
subdomain: config.get('devtools.routes.subdomain') as string | undefined,
|
|
56
|
+
},
|
|
50
57
|
storage: {
|
|
51
58
|
pruneAfter: config.get('devtools.storage.pruneAfter', 24) as number,
|
|
52
59
|
},
|
package/src/types.ts
CHANGED
|
@@ -51,6 +51,17 @@ export interface AggregateRecord {
|
|
|
51
51
|
/** Configuration shape for the devtools package. */
|
|
52
52
|
export interface DevtoolsConfig {
|
|
53
53
|
enabled: boolean
|
|
54
|
+
routes: {
|
|
55
|
+
/** Route group aliases for devtools endpoints */
|
|
56
|
+
aliases: {
|
|
57
|
+
/** Dashboard frontend routes */
|
|
58
|
+
dashboard: string
|
|
59
|
+
/** API endpoints for dashboard data */
|
|
60
|
+
api: string
|
|
61
|
+
}
|
|
62
|
+
/** Optional subdomain for devtools routes */
|
|
63
|
+
subdomain?: string
|
|
64
|
+
}
|
|
54
65
|
storage: {
|
|
55
66
|
pruneAfter: number
|
|
56
67
|
}
|