@oktis-works/api 0.0.0-stage → 0.1.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.
Files changed (154) hide show
  1. package/dist/index.d.ts +3 -0
  2. package/dist/index.d.ts.map +1 -0
  3. package/dist/index.js +170 -0
  4. package/dist/index.js.map +1 -0
  5. package/dist/middleware/auth.d.ts +8 -0
  6. package/dist/middleware/auth.d.ts.map +1 -0
  7. package/dist/middleware/auth.js +32 -0
  8. package/dist/middleware/auth.js.map +1 -0
  9. package/dist/middleware/csrf.d.ts +13 -0
  10. package/dist/middleware/csrf.d.ts.map +1 -0
  11. package/dist/middleware/csrf.js +64 -0
  12. package/dist/middleware/csrf.js.map +1 -0
  13. package/dist/middleware/csrf.test.d.ts +2 -0
  14. package/dist/middleware/csrf.test.d.ts.map +1 -0
  15. package/dist/middleware/csrf.test.js +94 -0
  16. package/dist/middleware/csrf.test.js.map +1 -0
  17. package/dist/middleware/rate-limit.d.ts +18 -0
  18. package/dist/middleware/rate-limit.d.ts.map +1 -0
  19. package/dist/middleware/rate-limit.js +58 -0
  20. package/dist/middleware/rate-limit.js.map +1 -0
  21. package/dist/middleware/rate-limit.test.d.ts +2 -0
  22. package/dist/middleware/rate-limit.test.d.ts.map +1 -0
  23. package/dist/middleware/rate-limit.test.js +58 -0
  24. package/dist/middleware/rate-limit.test.js.map +1 -0
  25. package/dist/middleware/trace.d.ts +7 -0
  26. package/dist/middleware/trace.d.ts.map +1 -0
  27. package/dist/middleware/trace.js +14 -0
  28. package/dist/middleware/trace.js.map +1 -0
  29. package/dist/middleware/trace.test.d.ts +2 -0
  30. package/dist/middleware/trace.test.d.ts.map +1 -0
  31. package/dist/middleware/trace.test.js +27 -0
  32. package/dist/middleware/trace.test.js.map +1 -0
  33. package/dist/routes/audit-logs/index.d.ts +4 -0
  34. package/dist/routes/audit-logs/index.d.ts.map +1 -0
  35. package/dist/routes/audit-logs/index.js +19 -0
  36. package/dist/routes/audit-logs/index.js.map +1 -0
  37. package/dist/routes/auth/index.d.ts +4 -0
  38. package/dist/routes/auth/index.d.ts.map +1 -0
  39. package/dist/routes/auth/index.js +84 -0
  40. package/dist/routes/auth/index.js.map +1 -0
  41. package/dist/routes/auth/me.d.ts +4 -0
  42. package/dist/routes/auth/me.d.ts.map +1 -0
  43. package/dist/routes/auth/me.js +16 -0
  44. package/dist/routes/auth/me.js.map +1 -0
  45. package/dist/routes/categories/index.d.ts +4 -0
  46. package/dist/routes/categories/index.d.ts.map +1 -0
  47. package/dist/routes/categories/index.js +53 -0
  48. package/dist/routes/categories/index.js.map +1 -0
  49. package/dist/routes/content/index.d.ts +4 -0
  50. package/dist/routes/content/index.d.ts.map +1 -0
  51. package/dist/routes/content/index.js +83 -0
  52. package/dist/routes/content/index.js.map +1 -0
  53. package/dist/routes/content-types/index.d.ts +4 -0
  54. package/dist/routes/content-types/index.d.ts.map +1 -0
  55. package/dist/routes/content-types/index.js +70 -0
  56. package/dist/routes/content-types/index.js.map +1 -0
  57. package/dist/routes/deployments/index.d.ts +4 -0
  58. package/dist/routes/deployments/index.d.ts.map +1 -0
  59. package/dist/routes/deployments/index.js +52 -0
  60. package/dist/routes/deployments/index.js.map +1 -0
  61. package/dist/routes/docs/index.d.ts +4 -0
  62. package/dist/routes/docs/index.d.ts.map +1 -0
  63. package/dist/routes/docs/index.js +120 -0
  64. package/dist/routes/docs/index.js.map +1 -0
  65. package/dist/routes/events/index.d.ts +4 -0
  66. package/dist/routes/events/index.d.ts.map +1 -0
  67. package/dist/routes/events/index.js +28 -0
  68. package/dist/routes/events/index.js.map +1 -0
  69. package/dist/routes/field-groups/index.d.ts +4 -0
  70. package/dist/routes/field-groups/index.d.ts.map +1 -0
  71. package/dist/routes/field-groups/index.js +77 -0
  72. package/dist/routes/field-groups/index.js.map +1 -0
  73. package/dist/routes/field-types/index.d.ts +4 -0
  74. package/dist/routes/field-types/index.d.ts.map +1 -0
  75. package/dist/routes/field-types/index.js +21 -0
  76. package/dist/routes/field-types/index.js.map +1 -0
  77. package/dist/routes/health/index.d.ts +4 -0
  78. package/dist/routes/health/index.d.ts.map +1 -0
  79. package/dist/routes/health/index.js +32 -0
  80. package/dist/routes/health/index.js.map +1 -0
  81. package/dist/routes/hooks/index.d.ts +4 -0
  82. package/dist/routes/hooks/index.d.ts.map +1 -0
  83. package/dist/routes/hooks/index.js +11 -0
  84. package/dist/routes/hooks/index.js.map +1 -0
  85. package/dist/routes/media/index.d.ts +4 -0
  86. package/dist/routes/media/index.d.ts.map +1 -0
  87. package/dist/routes/media/index.js +51 -0
  88. package/dist/routes/media/index.js.map +1 -0
  89. package/dist/routes/menus/index.d.ts +4 -0
  90. package/dist/routes/menus/index.d.ts.map +1 -0
  91. package/dist/routes/menus/index.js +58 -0
  92. package/dist/routes/menus/index.js.map +1 -0
  93. package/dist/routes/metrics/index.d.ts +4 -0
  94. package/dist/routes/metrics/index.d.ts.map +1 -0
  95. package/dist/routes/metrics/index.js +31 -0
  96. package/dist/routes/metrics/index.js.map +1 -0
  97. package/dist/routes/metrics/index.test.d.ts +2 -0
  98. package/dist/routes/metrics/index.test.d.ts.map +1 -0
  99. package/dist/routes/metrics/index.test.js +64 -0
  100. package/dist/routes/metrics/index.test.js.map +1 -0
  101. package/dist/routes/pages/index.d.ts +3 -0
  102. package/dist/routes/pages/index.d.ts.map +1 -0
  103. package/dist/routes/pages/index.js +6 -0
  104. package/dist/routes/pages/index.js.map +1 -0
  105. package/dist/routes/plugins/index.d.ts +4 -0
  106. package/dist/routes/plugins/index.d.ts.map +1 -0
  107. package/dist/routes/plugins/index.js +65 -0
  108. package/dist/routes/plugins/index.js.map +1 -0
  109. package/dist/routes/posts/index.d.ts +3 -0
  110. package/dist/routes/posts/index.d.ts.map +1 -0
  111. package/dist/routes/posts/index.js +6 -0
  112. package/dist/routes/posts/index.js.map +1 -0
  113. package/dist/routes/posts/revisions.test.d.ts +2 -0
  114. package/dist/routes/posts/revisions.test.d.ts.map +1 -0
  115. package/dist/routes/posts/revisions.test.js +57 -0
  116. package/dist/routes/posts/revisions.test.js.map +1 -0
  117. package/dist/routes/roles/index.d.ts +4 -0
  118. package/dist/routes/roles/index.d.ts.map +1 -0
  119. package/dist/routes/roles/index.js +56 -0
  120. package/dist/routes/roles/index.js.map +1 -0
  121. package/dist/routes/settings/index.d.ts +4 -0
  122. package/dist/routes/settings/index.d.ts.map +1 -0
  123. package/dist/routes/settings/index.js +29 -0
  124. package/dist/routes/settings/index.js.map +1 -0
  125. package/dist/routes/shared/content-collection.d.ts +9 -0
  126. package/dist/routes/shared/content-collection.d.ts.map +1 -0
  127. package/dist/routes/shared/content-collection.js +104 -0
  128. package/dist/routes/shared/content-collection.js.map +1 -0
  129. package/dist/routes/tags/index.d.ts +4 -0
  130. package/dist/routes/tags/index.d.ts.map +1 -0
  131. package/dist/routes/tags/index.js +32 -0
  132. package/dist/routes/tags/index.js.map +1 -0
  133. package/dist/routes/taxonomies/index.d.ts +4 -0
  134. package/dist/routes/taxonomies/index.d.ts.map +1 -0
  135. package/dist/routes/taxonomies/index.js +114 -0
  136. package/dist/routes/taxonomies/index.js.map +1 -0
  137. package/dist/routes/tenants/index.d.ts +4 -0
  138. package/dist/routes/tenants/index.d.ts.map +1 -0
  139. package/dist/routes/tenants/index.js +66 -0
  140. package/dist/routes/tenants/index.js.map +1 -0
  141. package/dist/routes/themes/index.d.ts +4 -0
  142. package/dist/routes/themes/index.d.ts.map +1 -0
  143. package/dist/routes/themes/index.js +54 -0
  144. package/dist/routes/themes/index.js.map +1 -0
  145. package/dist/routes/users/index.d.ts +4 -0
  146. package/dist/routes/users/index.d.ts.map +1 -0
  147. package/dist/routes/users/index.js +66 -0
  148. package/dist/routes/users/index.js.map +1 -0
  149. package/dist/routes/webhooks/index.d.ts +4 -0
  150. package/dist/routes/webhooks/index.d.ts.map +1 -0
  151. package/dist/routes/webhooks/index.js +30 -0
  152. package/dist/routes/webhooks/index.js.map +1 -0
  153. package/package.json +43 -4
  154. package/README.md +0 -3
@@ -0,0 +1,120 @@
1
+ // @oktis-works/api - OpenAPI 3.1 document (rest-api-004 / maintainability-003)
2
+ import { Hono } from 'hono';
3
+ import { CMS_VERSION } from '@oktis-works/validation';
4
+ const router = new Hono();
5
+ const RESOURCES = [
6
+ ['auth', 'Autenticação e sessões'],
7
+ ['users', 'Usuários'],
8
+ ['tenants', 'Tenants (multi-tenant isolation)'],
9
+ ['roles', 'Papéis e permissões (RBAC)'],
10
+ ['media', 'Biblioteca de mídia'],
11
+ ['content', 'Conteúdo polimórfico'],
12
+ ['posts', 'Posts'],
13
+ ['pages', 'Páginas'],
14
+ ['categories', 'Categorias'],
15
+ ['tags', 'Tags'],
16
+ ['menus', 'Menus de navegação'],
17
+ ['settings', 'Configurações agrupadas'],
18
+ ['plugins', 'Plugins — ciclo de vida'],
19
+ ['themes', 'Temas — ciclo de vida'],
20
+ ['deployments', 'Deployments (build & deploy)'],
21
+ ['events', 'Eventos de domínio'],
22
+ ['webhooks', 'Webhooks assináveis'],
23
+ ['content-types', 'Content Types'],
24
+ ['taxonomies', 'Taxonomias'],
25
+ ['field-groups', 'Field Groups + location rules'],
26
+ ['field-types', 'Field Types do builder'],
27
+ ['health', 'Health checks'],
28
+ ['metrics', 'Métricas Prometheus'],
29
+ ['audit-logs', 'Trilha de auditoria imutável'],
30
+ ];
31
+ function buildOpenApiDocument(origin) {
32
+ const paths = {
33
+ '/api/v1/docs': {
34
+ get: {
35
+ summary: 'Este documento (OpenAPI 3.1)',
36
+ tags: ['meta'],
37
+ responses: { '200': { description: 'Documento OpenAPI' } },
38
+ },
39
+ },
40
+ '/api/v1/hooks/catalog': {
41
+ get: {
42
+ summary: 'Catálogo de hooks gerado a partir do registry',
43
+ tags: ['meta'],
44
+ responses: { '200': { description: 'Lista de hooks conhecidos e registrados' } },
45
+ },
46
+ },
47
+ };
48
+ for (const [resource, description] of RESOURCES) {
49
+ paths[`/api/v1/${resource}`] = {
50
+ get: {
51
+ summary: `Listar ${description}`,
52
+ tags: [resource],
53
+ parameters: [
54
+ { name: 'X-Tenant-ID', in: 'header', schema: { type: 'string' }, description: 'Escopo multi-tenant' },
55
+ ],
56
+ responses: {
57
+ '200': { description: 'Coleção retornada' },
58
+ '401': { description: 'Não autenticado' },
59
+ '429': { description: 'Rate limit excedido (Retry-After)' },
60
+ },
61
+ },
62
+ post: {
63
+ summary: `Criar em ${resource}`,
64
+ tags: [resource],
65
+ security: [{ bearerAuth: [] }],
66
+ responses: {
67
+ '201': { description: 'Criado' },
68
+ '403': { description: 'Sem permissão ou CSRF inválido' },
69
+ '429': { description: 'Rate limit excedido' },
70
+ },
71
+ },
72
+ };
73
+ paths[`/api/v1/${resource}/{id}`] = {
74
+ parameters: [{ name: 'id', in: 'path', required: true, schema: { type: 'string' } }],
75
+ get: {
76
+ summary: `Detalhar ${description}`,
77
+ tags: [resource],
78
+ responses: { '200': { description: 'Registro' }, '404': { description: 'Não encontrado' } },
79
+ },
80
+ put: {
81
+ summary: `Substituir registro em ${resource}`,
82
+ tags: [resource],
83
+ security: [{ bearerAuth: [] }],
84
+ responses: { '200': { description: 'Atualizado' }, '403': { description: 'Proibido' } },
85
+ },
86
+ delete: {
87
+ summary: `Remover registro em ${resource}`,
88
+ tags: [resource],
89
+ security: [{ bearerAuth: [] }],
90
+ responses: { '204': { description: 'Removido' }, '403': { description: 'Proibido' } },
91
+ },
92
+ };
93
+ }
94
+ return {
95
+ openapi: '3.1.0',
96
+ info: {
97
+ title: 'BlackLotus CMS API',
98
+ version: CMS_VERSION,
99
+ description: 'CMS híbrido, modular e API-first. Autenticação JWT Bearer; clientes browser também devem enviar o par CSRF (cookie bl_csrf + header X-CSRF-Token). Rate limit padrão: 300 req/min por tenant+IP.',
100
+ },
101
+ servers: [{ url: origin }],
102
+ components: {
103
+ securitySchemes: {
104
+ bearerAuth: { type: 'http', scheme: 'bearer', bearerFormat: 'JWT' },
105
+ csrfHeader: { type: 'apiKey', in: 'header', name: 'X-CSRF-Token' },
106
+ },
107
+ },
108
+ tags: [
109
+ ...RESOURCES.map(([resource, description]) => ({ name: resource, description })),
110
+ { name: 'meta', description: 'Descoberta (docs, catálogo de hooks)' },
111
+ ],
112
+ paths,
113
+ };
114
+ }
115
+ router.get('/', (c) => {
116
+ const origin = new URL(c.req.url).origin;
117
+ return c.json(buildOpenApiDocument(origin));
118
+ });
119
+ export default router;
120
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AA8B1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,28 @@
1
+ import { Hono } from 'hono';
2
+ import { getConnection } from '@oktis-works/database';
3
+ import { authMiddleware } from '../../middleware/auth.js';
4
+ const router = new Hono();
5
+ router.use('*', authMiddleware);
6
+ router.get('/', async (c) => {
7
+ const page = Number(c.req.query('page') ?? 1);
8
+ const limit = Number(c.req.query('limit') ?? 50);
9
+ const type = c.req.query('type') || undefined;
10
+ const offset = (page - 1) * limit;
11
+ const sql = getConnection();
12
+ let whereClause = 'WHERE 1=1';
13
+ const params = [];
14
+ if (type) {
15
+ whereClause += ` AND type = $${params.length + 1}`;
16
+ params.push(type);
17
+ }
18
+ const [data, countData] = await Promise.all([
19
+ sql.unsafe(`SELECT * FROM events ${whereClause} ORDER BY created_at DESC LIMIT ${limit} OFFSET ${offset}`, params),
20
+ sql.unsafe(`SELECT COUNT(*) as total FROM events ${whereClause}`, params),
21
+ ]);
22
+ return c.json({
23
+ data,
24
+ total: Number(countData[0]?.['total'] ?? 0),
25
+ });
26
+ });
27
+ export default router;
28
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/events/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1B,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAC9C,MAAM,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IAElC,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;IAE5B,IAAI,WAAW,GAAG,WAAW,CAAC;IAC9B,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,IAAI,IAAI,EAAE,CAAC;QACT,WAAW,IAAI,gBAAgB,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC1C,GAAG,CAAC,MAAM,CAAC,wBAAwB,WAAW,mCAAmC,KAAK,WAAW,MAAM,EAAE,EAAE,MAAM,CAAC;QAClH,GAAG,CAAC,MAAM,CAAC,wCAAwC,WAAW,EAAE,EAAE,MAAM,CAAC;KAC1E,CAAC,CAAC;IAEH,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,IAAI;QACJ,KAAK,EAAE,MAAM,CAAE,SAAS,CAAC,CAAC,CAA6B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;KACzE,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/field-groups/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AAyE1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,77 @@
1
+ // @oktis-works/api - Field Groups Routes (Builder + Location Rules)
2
+ import { Hono } from 'hono';
3
+ import { fieldGroupService } from '@oktis-works/core';
4
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
5
+ const router = new Hono();
6
+ router.use('*', authMiddleware);
7
+ router.get('/', requirePermission('read', 'content'), async (c) => {
8
+ const type = c.req.query('type');
9
+ if (type) {
10
+ const resolved = await fieldGroupService.resolveGroupsByLocation({
11
+ contentType: type,
12
+ taxonomy: c.req.query('taxonomy') || undefined,
13
+ termSlug: c.req.query('term') || undefined,
14
+ userRole: c.req.query('userRole') || undefined,
15
+ pageTemplate: c.req.query('template') || undefined,
16
+ postStatus: c.req.query('status') || undefined,
17
+ });
18
+ return c.json(resolved);
19
+ }
20
+ const result = await fieldGroupService.list();
21
+ return c.json(result);
22
+ });
23
+ router.get('/:id', requirePermission('read', 'content'), async (c) => {
24
+ const id = c.req.param('id');
25
+ const result = await fieldGroupService.getById(id);
26
+ if (!result)
27
+ return c.json({ error: 'Field group not found' }, 404);
28
+ return c.json(result);
29
+ });
30
+ router.post('/', requirePermission('create', 'content'), async (c) => {
31
+ try {
32
+ const body = await c.req.json();
33
+ const result = await fieldGroupService.create({
34
+ title: body.title,
35
+ key: body.key,
36
+ locationRules: body.locationRules,
37
+ position: body.position,
38
+ displayStyle: body.displayStyle,
39
+ active: body.active,
40
+ fields: body.fields,
41
+ });
42
+ return c.json(result, 201);
43
+ }
44
+ catch (error) {
45
+ const message = error instanceof Error ? error.message : 'Failed to create field group';
46
+ return c.json({ error: message }, 400);
47
+ }
48
+ });
49
+ router.put('/:id', requirePermission('update', 'content'), async (c) => {
50
+ try {
51
+ const id = c.req.param('id');
52
+ const body = await c.req.json();
53
+ const result = await fieldGroupService.update(id, {
54
+ title: body.title,
55
+ locationRules: body.locationRules,
56
+ position: body.position,
57
+ displayStyle: body.displayStyle,
58
+ active: body.active,
59
+ });
60
+ if (!result)
61
+ return c.json({ error: 'Field group not found' }, 404);
62
+ return c.json(result);
63
+ }
64
+ catch (error) {
65
+ const message = error instanceof Error ? error.message : 'Failed to update field group';
66
+ return c.json({ error: message }, 400);
67
+ }
68
+ });
69
+ router.delete('/:id', requirePermission('delete', 'content'), async (c) => {
70
+ const id = c.req.param('id');
71
+ const deleted = await fieldGroupService.delete(id);
72
+ if (!deleted)
73
+ return c.json({ error: 'Field group not found' }, 404);
74
+ return c.json({ success: true });
75
+ });
76
+ export default router;
77
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/field-groups/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/field-types/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AAoB1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,21 @@
1
+ // @oktis-works/api - Field Types Catalog Routes
2
+ import { Hono } from 'hono';
3
+ import { listFieldTypes, listFieldTypesByCategory, FIELD_TYPE_CATEGORIES } from '@oktis-works/core';
4
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
5
+ const router = new Hono();
6
+ router.use('*', authMiddleware);
7
+ router.get('/', requirePermission('read', 'content'), async (c) => {
8
+ const category = c.req.query('category');
9
+ if (category) {
10
+ const grouped = listFieldTypesByCategory();
11
+ const key = category;
12
+ return c.json(grouped[key] ?? []);
13
+ }
14
+ const types = listFieldTypes();
15
+ return c.json({
16
+ categories: FIELD_TYPE_CATEGORIES,
17
+ types,
18
+ });
19
+ });
20
+ export default router;
21
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/field-types/index.ts"],"names":[],"mappings":"AAAA,gDAAgD;AAEhD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,MAAM,mBAAmB,CAAC;AACpG,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChE,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAEzC,IAAI,QAAQ,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,wBAAwB,EAAE,CAAC;QAC3C,MAAM,GAAG,GAAG,QAAgC,CAAC;QAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,KAAK,GAAG,cAAc,EAAE,CAAC;IAC/B,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,UAAU,EAAE,qBAAqB;QACjC,KAAK;KACN,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const healthRouter: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default healthRouter;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/health/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,YAAY,iEAAa,CAAC;AAmChC,eAAe,YAAY,CAAC"}
@@ -0,0 +1,32 @@
1
+ // @oktis-works/api - Health Check Route
2
+ import { Hono } from 'hono';
3
+ import { healthCheck } from '@oktis-works/database';
4
+ const healthRouter = new Hono();
5
+ // GET /health
6
+ healthRouter.get('/', async (c) => {
7
+ const dbHealthy = await healthCheck();
8
+ const status = dbHealthy ? 'healthy' : 'degraded';
9
+ const statusCode = dbHealthy ? 200 : 503;
10
+ return c.json({
11
+ status,
12
+ timestamp: new Date().toISOString(),
13
+ uptime: process.uptime(),
14
+ checks: {
15
+ database: dbHealthy ? 'ok' : 'error',
16
+ },
17
+ }, statusCode);
18
+ });
19
+ // GET /health/ready
20
+ healthRouter.get('/ready', async (c) => {
21
+ const dbHealthy = await healthCheck();
22
+ if (!dbHealthy) {
23
+ return c.json({ ready: false }, 503);
24
+ }
25
+ return c.json({ ready: true });
26
+ });
27
+ // GET /health/live
28
+ healthRouter.get('/live', async (c) => {
29
+ return c.json({ alive: true });
30
+ });
31
+ export default healthRouter;
32
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/health/index.ts"],"names":[],"mappings":"AAAA,wCAAwC;AAExC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,YAAY,GAAG,IAAI,IAAI,EAAE,CAAC;AAEhC,cAAc;AACd,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE;IACzC,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;IAEtC,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC;IAClD,MAAM,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;IAEzC,OAAO,CAAC,CAAC,IAAI,CAAC;QACZ,MAAM;QACN,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE;QACxB,MAAM,EAAE;YACN,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO;SACrC;KACF,EAAE,UAAU,CAAC,CAAC;AACjB,CAAC,CAAC,CAAC;AAEH,oBAAoB;AACpB,YAAY,CAAC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE;IAC9C,MAAM,SAAS,GAAG,MAAM,WAAW,EAAE,CAAC;IAEtC,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,GAAG,CAAC,CAAC;IACvC,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,mBAAmB;AACnB,YAAY,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,CAAU,EAAE,EAAE;IAC7C,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AACjC,CAAC,CAAC,CAAC;AAEH,eAAe,YAAY,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/hooks/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AAQ1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,11 @@
1
+ // @oktis-works/api - Catálogo de hooks (REQU-035-002)
2
+ import { Hono } from 'hono';
3
+ import { getHookCatalog } from '@oktis-works/core';
4
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
5
+ const router = new Hono();
6
+ router.use('*', authMiddleware);
7
+ router.get('/', requirePermission('read', 'system'), async (c) => {
8
+ return c.json(getHookCatalog());
9
+ });
10
+ export default router;
11
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/hooks/index.ts"],"names":[],"mappings":"AAAA,sDAAsD;AAEtD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;AAClC,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/media/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AAmD1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,51 @@
1
+ import { Hono } from 'hono';
2
+ import { mediaService } from '@oktis-works/core';
3
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
4
+ const router = new Hono();
5
+ router.use('*', authMiddleware);
6
+ router.get('/', requirePermission('read', 'media'), async (c) => {
7
+ const page = Number(c.req.query('page') ?? 1);
8
+ const limit = Number(c.req.query('limit') ?? 20);
9
+ const mimeType = c.req.query('mimeType') || undefined;
10
+ const search = c.req.query('search') || undefined;
11
+ const result = await mediaService.list({ page, limit, mimeType, search });
12
+ return c.json(result);
13
+ });
14
+ router.post('/', requirePermission('upload', 'media'), async (c) => {
15
+ try {
16
+ const body = await c.req.json();
17
+ const userId = c.get('userId');
18
+ const result = await mediaService.create({
19
+ filename: body.filename,
20
+ mimeType: body.mimeType,
21
+ size: body.size,
22
+ path: body.path,
23
+ url: body.url,
24
+ alt: body.alt,
25
+ caption: body.caption,
26
+ metadata: body.metadata,
27
+ uploadedBy: userId,
28
+ });
29
+ return c.json(result, 201);
30
+ }
31
+ catch (error) {
32
+ const message = error instanceof Error ? error.message : 'Failed to upload media';
33
+ return c.json({ error: message }, 400);
34
+ }
35
+ });
36
+ router.get('/:id', requirePermission('read', 'media'), async (c) => {
37
+ const id = c.req.param('id');
38
+ const result = await mediaService.getById(id);
39
+ if (!result)
40
+ return c.json({ error: 'Media not found' }, 404);
41
+ return c.json(result);
42
+ });
43
+ router.delete('/:id', requirePermission('delete', 'media'), async (c) => {
44
+ const id = c.req.param('id');
45
+ const deleted = await mediaService.delete(id);
46
+ if (!deleted)
47
+ return c.json({ error: 'Media not found' }, 404);
48
+ return c.json({ success: true });
49
+ });
50
+ export default router;
51
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/media/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/menus/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AAuD1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { Hono } from 'hono';
2
+ import { menuService } from '@oktis-works/core';
3
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
4
+ const router = new Hono();
5
+ router.use('*', authMiddleware);
6
+ router.get('/', requirePermission('read', 'menu'), async (c) => {
7
+ const result = await menuService.list();
8
+ return c.json(result);
9
+ });
10
+ router.post('/', requirePermission('create', 'menu'), async (c) => {
11
+ try {
12
+ const body = await c.req.json();
13
+ const result = await menuService.create({
14
+ name: body.name,
15
+ slug: body.slug,
16
+ items: body.items,
17
+ });
18
+ return c.json(result, 201);
19
+ }
20
+ catch (error) {
21
+ const message = error instanceof Error ? error.message : 'Failed to create menu';
22
+ return c.json({ error: message }, 400);
23
+ }
24
+ });
25
+ router.get('/:id', requirePermission('read', 'menu'), async (c) => {
26
+ const id = c.req.param('id');
27
+ const result = await menuService.getById(id);
28
+ if (!result)
29
+ return c.json({ error: 'Menu not found' }, 404);
30
+ return c.json(result);
31
+ });
32
+ router.put('/:id', requirePermission('update', 'menu'), async (c) => {
33
+ try {
34
+ const id = c.req.param('id');
35
+ const body = await c.req.json();
36
+ const result = await menuService.update(id, {
37
+ name: body.name,
38
+ slug: body.slug,
39
+ items: body.items,
40
+ });
41
+ if (!result)
42
+ return c.json({ error: 'Menu not found' }, 404);
43
+ return c.json(result);
44
+ }
45
+ catch (error) {
46
+ const message = error instanceof Error ? error.message : 'Failed to update menu';
47
+ return c.json({ error: message }, 400);
48
+ }
49
+ });
50
+ router.delete('/:id', requirePermission('delete', 'menu'), async (c) => {
51
+ const id = c.req.param('id');
52
+ const deleted = await menuService.delete(id);
53
+ if (!deleted)
54
+ return c.json({ error: 'Menu not found' }, 404);
55
+ return c.json({ success: true });
56
+ });
57
+ export default router;
58
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/menus/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEhC,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC7D,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,CAAC;IACxC,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChE,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC;YACtC,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IAC7B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QACjF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAChE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,MAAM;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAClE,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;QACvC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,EAAE;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SAClB,CAAC,CAAC;QACH,IAAI,CAAC,MAAM;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,uBAAuB,CAAC;QACjF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrE,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC7C,IAAI,CAAC,OAAO;QAAE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,CAAC;IAC9D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
3
+ export default router;
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/metrics/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAI5B,QAAA,MAAM,MAAM,iEAAa,CAAC;AAkC1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,31 @@
1
+ // @oktis-works/api - Metrics endpoint (REQ-observability-003)
2
+ import { Hono } from 'hono';
3
+ import { metrics } from '@oktis-works/core';
4
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
5
+ const router = new Hono();
6
+ router.use('*', authMiddleware);
7
+ const prometheusEscape = (value) => value.replace(/\\/g, '\\\\').replace(/"/g, '\\"');
8
+ const labelString = (labels) => Object.entries(labels)
9
+ .map(([k, v]) => `${k}="${prometheusEscape(v)}"`)
10
+ .join(',');
11
+ const toPrometheus = (snapshot) => {
12
+ const lines = [];
13
+ for (const counter of snapshot.counters) {
14
+ const labels = labelString(counter.labels);
15
+ lines.push(`# TYPE ${counter.name} counter`, `${counter.name}{${labels}} ${counter.value}`);
16
+ }
17
+ for (const gauge of snapshot.gauges) {
18
+ const labels = labelString(gauge.labels);
19
+ lines.push(`# TYPE ${gauge.name} gauge`, `${gauge.name}{${labels}} ${gauge.value}`);
20
+ }
21
+ return lines.join('\n') + '\n';
22
+ };
23
+ router.get('/', requirePermission('read', 'system'), async (c) => {
24
+ const snapshot = metrics.snapshot();
25
+ if (c.req.query('format') === 'json') {
26
+ return c.json(snapshot);
27
+ }
28
+ return c.text(toPrometheus(snapshot), 200, { 'Content-Type': 'text/plain; version=0.0.4' });
29
+ });
30
+ export default router;
31
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/metrics/index.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAE9D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;AAE1B,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEhC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAEtG,MAAM,WAAW,GAAG,CAAC,MAA8B,EAAU,EAAE,CAC7D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;KACnB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,KAAK,gBAAgB,CAAC,CAAC,CAAC,GAAG,CAAC;KAChD,IAAI,CAAC,GAAG,CAAC,CAAC;AAEf,MAAM,YAAY,GAAG,CAAC,QAA6C,EAAU,EAAE;IAC7E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,OAAO,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3C,KAAK,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,IAAI,UAAU,EAAE,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,KAAK,OAAO,CAAC,KAAK,EAAE,CAAC,CAAC;IAC9F,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QACpC,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,KAAK,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,QAAQ,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;IAEpC,IAAI,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,MAAM,EAAE,CAAC;QACrC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC1B,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,EAAE,GAAG,EAAE,EAAE,cAAc,EAAE,2BAA2B,EAAE,CAAC,CAAC;AAC9F,CAAC,CAAC,CAAC;AAEH,eAAe,MAAM,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.test.d.ts","sourceRoot":"","sources":["../../../src/routes/metrics/index.test.ts"],"names":[],"mappings":""}