@oktis-works/api 0.8.2 → 0.10.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.js CHANGED
@@ -9,7 +9,7 @@ import { bootstrap, getEventBus, registerEventAuditLog, getRegisteredPluginRoute
9
9
  import { CMS_VERSION } from '@oktis-works/validation';
10
10
  import { loadConfig } from '@oktis-works/config';
11
11
  import { traceMiddleware } from './middleware/trace.js';
12
- import { rateLimitMiddleware } from './middleware/rate-limit.js';
12
+ import { rateLimitMiddleware, loginRateLimitMiddleware } from './middleware/rate-limit.js';
13
13
  import { csrfMiddleware } from './middleware/csrf.js';
14
14
  import { auditMiddleware } from './middleware/audit.js';
15
15
  import authRouter from './routes/auth/index.js';
@@ -29,6 +29,7 @@ import pluginsRouter from './routes/plugins/index.js';
29
29
  import themesRouter from './routes/themes/index.js';
30
30
  import buildsRouter from './routes/builds/index.js';
31
31
  import webhooksRouter from './routes/webhooks/index.js';
32
+ import apiKeysRouter from './routes/api-keys/index.js';
32
33
  import contentTypesRouter from './routes/content-types/index.js';
33
34
  import taxonomiesRouter from './routes/taxonomies/index.js';
34
35
  import fieldGroupsRouter from './routes/field-groups/index.js';
@@ -86,7 +87,12 @@ async function main() {
86
87
  credentials: true,
87
88
  }));
88
89
  app.use('*', prettyJSON());
89
- // rest-api-003: rate limiting global (429 + Retry-After); probes isentos
90
+ // rest-api-003: rate limiting por classe de tráfego (429 + Retry-After).
91
+ // Credenciais primeiro: o brute force recebe 429 próprio (por IP e por
92
+ // e-mail) em vez de esvaziar o orçamento dos clientes legítimos. Depois o
93
+ // limiter global — anônimo por IP real, autenticado por user id da sessão.
94
+ app.use('/api/v1/auth/login', loginRateLimitMiddleware());
95
+ app.use('/api/v1/auth/api-key-login', loginRateLimitMiddleware());
90
96
  app.use('*', rateLimitMiddleware());
91
97
  app.use('/api/*', csrfMiddleware);
92
98
  app.use('/api/*', auditMiddleware);
@@ -110,6 +116,7 @@ async function main() {
110
116
  app.route('/api/v1/themes', themesRouter);
111
117
  app.route('/api/v1/builds', buildsRouter);
112
118
  app.route('/api/v1/webhooks', webhooksRouter);
119
+ app.route('/api/v1/api-keys', apiKeysRouter);
113
120
  app.route('/api/v1/content-types', contentTypesRouter);
114
121
  app.route('/api/v1/taxonomies', taxonomiesRouter);
115
122
  app.route('/api/v1/field-groups', fieldGroupsRouter);
@@ -142,6 +149,7 @@ async function main() {
142
149
  themes: '/api/v1/themes',
143
150
  builds: '/api/v1/builds',
144
151
  webhooks: '/api/v1/webhooks',
152
+ apiKeys: '/api/v1/api-keys',
145
153
  contentTypes: '/api/v1/content-types',
146
154
  taxonomies: '/api/v1/taxonomies',
147
155
  fieldGroups: '/api/v1/field-groups',
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU1C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAC9C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAE9C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAeD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAyBhD;AAWD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAkDrF"}
1
+ {"version":3,"file":"csrf.d.ts","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAU1C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAC9C,eAAO,MAAM,WAAW,QAAqB,CAAC;AAE9C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAeD,wFAAwF;AACxF,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,OAAO,CAyBhD;AAWD;;;;;;;;GAQG;AACH,wBAAsB,cAAc,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAsDrF"}
@@ -91,7 +91,9 @@ export async function csrfMiddleware(c, next) {
91
91
  // Login ainda não possui sessão para emitir um token CSRF. A validação
92
92
  // estrita de Origin protege contra login-CSRF; as demais mutações exigem o
93
93
  // par cookie + header abaixo.
94
- if (c.req.path === '/api/v1/auth/login' || c.req.path === '/api/v1/auth/register') {
94
+ if (c.req.path === '/api/v1/auth/login' ||
95
+ c.req.path === '/api/v1/auth/register' ||
96
+ c.req.path === '/api/v1/auth/api-key-login') {
95
97
  if (!isSameOrigin(c)) {
96
98
  return c.json({ error: 'CSRF_TOKEN_INVALID', message: 'CSRF validation failed.' }, 403);
97
99
  }
@@ -1 +1 @@
1
- {"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"csrf.js","sourceRoot":"","sources":["../../src/middleware/csrf.ts"],"names":[],"mappings":"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"}
@@ -1,18 +1,63 @@
1
1
  import type { Context, Next } from 'hono';
2
+ import { type RateLimitSettings } from '@oktis-works/config';
2
3
  export interface RateLimitOptions {
4
+ /** Máximo do bucket ANÔNIMO por janela. */
3
5
  max?: number;
6
+ /** Janela (ms) dos buckets anônimo e autenticado. */
4
7
  windowMs?: number;
8
+ /** Máximo do bucket AUTENTICADO por janela. */
9
+ authMax?: number;
10
+ /** Tentativas de login por IP na janela de credenciais. */
11
+ loginMaxPerIp?: number;
12
+ /** Tentativas de login por e-mail na janela de credenciais. */
13
+ loginMax?: number;
14
+ /** Janela (ms) do limiter de credenciais. */
15
+ loginWindowMs?: number;
5
16
  }
6
- export declare function parseRateLimitEnv(env?: Record<string, string | undefined>): {
7
- max: number;
8
- windowMs: number;
9
- };
10
- export declare function clientKey(c: Context): string;
17
+ /** Parser único (delega para @oktis-works/config — mesma fonte do wizard da CLI). */
18
+ export declare function parseRateLimitEnv(env?: Record<string, string | undefined>): RateLimitSettings;
11
19
  /** Reseta os buckets (uso em testes). */
12
20
  export declare function resetRateLimiter(): void;
21
+ /** Observabilidade/testes: quantos buckets estão vivos agora. */
22
+ export declare function rateLimiterStats(): {
23
+ buckets: number;
24
+ };
25
+ /** Remove buckets cuja janela já venceu (uso em testes e em shutdown). */
26
+ export declare function sweepExpiredBuckets(now?: number): number;
27
+ export declare function isTrustedProxy(ip: string | null | undefined): boolean;
28
+ /** IP do par imediato (socket TCP) — a identidade que NUNCA é forjável. */
29
+ export declare function socketPeerIp(c: Context): string | null;
30
+ /** Resolve o IP do cliente final respeitando TRUST_PROXY (true/false/auto). */
31
+ export declare function resolveClientIp(c: Context): string;
32
+ /** User id da sessão, quando o request carrega um access token válido. */
33
+ export declare function authenticatedUserId(c: Context): string | null;
34
+ /**
35
+ * Chave do bucket: `u:<user id>` quando autenticado (orçamento próprio, não
36
+ * disputa com anônimos), senão `ip:<ip real>`. O tenant saiu da chave porque
37
+ * `X-Tenant-ID` é controlado pelo cliente e permitia trocar de balde à vontade.
38
+ */
39
+ export declare function clientKey(c: Context): string;
40
+ /** Leitura é barata; escrita custa 5x para não ser engolida por rajadas de GET. */
41
+ export declare function requestCost(method: string): number;
42
+ /**
43
+ * Rotas que nunca consomem orçamento: probes (/health, /metrics), mídia
44
+ * estática (binário imutável, cache 30d no nginx) e o bootstrap do CSRF
45
+ * (UUID aleatório, não toca o banco) — nenhuma delas é API transacional.
46
+ */
47
+ export declare function isExemptPath(method: string, path: string): boolean;
13
48
  /**
14
- * Janela deslizante simples: 429 + Retry-After quando excede o limite.
15
- * /health e /metrics ficam de fora (probes não devem ser limitados).
49
+ * Limiter global por classe de tráfego: 429 + Retry-After quando a classe
50
+ * estoura o próprio orçamento. Credenciais e probes ficam por conta de
51
+ * `loginRateLimitMiddleware` e das isenções acima.
16
52
  */
17
53
  export declare function rateLimitMiddleware(options?: RateLimitOptions): (c: Context, next: Next) => Promise<Response | undefined>;
54
+ /**
55
+ * Limiter dedicado de credenciais (POST /auth/login).
56
+ *
57
+ * Duas chaves simultâneas: por IP (segura o ataque de um host rotando
58
+ * e-mails) e por e-mail (segura o ataque de muitos hosts mirando uma conta).
59
+ * Fica ANTES do limiter global para que o brute force receba 429 próprio em
60
+ * vez de esvaziar o orçamento dos demais clientes.
61
+ */
62
+ export declare function loginRateLimitMiddleware(options?: RateLimitOptions): (c: Context, next: Next) => Promise<Response | undefined>;
18
63
  //# sourceMappingURL=rate-limit.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAS1C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG;IACxF,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;CAClB,CAOA;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAO5C;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,gBAAqB,OAG/C,OAAO,QAAQ,IAAI,KAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAqCrE"}
1
+ {"version":3,"file":"rate-limit.d.ts","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE1C,OAAO,EAAsC,KAAK,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAejG,MAAM,WAAW,gBAAgB;IAC/B,2CAA2C;IAC3C,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,qDAAqD;IACrD,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,2DAA2D;IAC3D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,6CAA6C;IAC7C,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,qFAAqF;AACrF,wBAAgB,iBAAiB,CAAC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAe,GAAG,iBAAiB,CAE1G;AAED,yCAAyC;AACzC,wBAAgB,gBAAgB,IAAI,IAAI,CAIvC;AAED,iEAAiE;AACjE,wBAAgB,gBAAgB,IAAI;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAEtD;AAED,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAmB,GAAG,MAAM,CAIpE;AAgDD,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,OAAO,CAGrE;AAED,2EAA2E;AAC3E,wBAAgB,YAAY,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAKtD;AAmBD,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CA2BlD;AAuDD,0EAA0E;AAC1E,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,IAAI,CAO7D;AAID;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAG5C;AAED,mFAAmF;AACnF,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAElD;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAMlE;AAsDD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,GAAE,gBAAqB,OAW/C,OAAO,QAAQ,IAAI,KAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAqBrE;AAED;;;;;;;GAOG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,GAAE,gBAAqB,OAOpD,OAAO,QAAQ,IAAI,KAAG,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAyCrE"}
@@ -1,56 +1,387 @@
1
- // @oktis-works/api - Rate limiting por janela deslizante in-memory (REQU-020/rest-api-003)
1
+ // @oktis-works/api - Rate limiting por classe de tráfego (REQU-020/rest-api-003)
2
+ //
3
+ // Três classes, três orçamentos, três chaves:
4
+ //
5
+ // | Classe | Chave | Budget (default) |
6
+ // |--------------|--------------------|--------------------|
7
+ // | Credenciais | login:ip / login:e | 100 e 10 / 5 min |
8
+ // | Autenticado | u:<user id> | 1200 / 60s |
9
+ // | Anônimo | ip:<ip real> | 300 / 60s |
10
+ //
11
+ // Por que não é "300 req/min para todo mundo" (comportamento antigo):
12
+ //
13
+ // * a identidade do cliente vem do IP real (socket, ou X-Forwarded-For
14
+ // apenas quando o par imediato é um proxy de confiança) — nunca mais a
15
+ // chave literal `platform:unknown` que fazia TODOS os clientes dividirem
16
+ // um único balde;
17
+ // * `X-Tenant-ID` e `X-Forwarded-For` não compõem mais a chave: o primeiro
18
+ // é controlado pelo cliente (burlava o limite) e o segundo só vale atrás
19
+ // de proxy confiável;
20
+ // * requisições autenticadas têm balde próprio por usuário, então crawlers
21
+ // e visitantes anônimos do site público não derrubam o admin;
22
+ // * mídia estática (`/api/v1/media/file/...`, já servida com cache
23
+ // imutável) e o bootstrap de CSRF não consomem orçamento;
24
+ // * escritas custam mais que leituras (POST/PUT/PATCH/DELETE = 5), então
25
+ // uma rajada de GETs de miniatura não bloqueia um PUT legítimo;
26
+ // * os buckets expiram por varredura oportunista (nada fica no Map para
27
+ // sempre) e há teto de chaves vivas (vetor de DoS por memória fechado).
28
+ import { createHmac, timingSafeEqual } from 'node:crypto';
29
+ import { loadConfig, parseRateLimitSettings } from '@oktis-works/config';
2
30
  const buckets = new Map();
31
+ /** Teto de chaves vivas: acima disso varre e evita o mais antigo (fecho DoS). */
32
+ const MAX_BUCKETS = 50_000;
33
+ /** Varre buckets expirados a cada N consumos (sem timer — nada segura o processo). */
34
+ const SWEEP_EVERY = 500;
35
+ let operations = 0;
36
+ /** Parser único (delega para @oktis-works/config — mesma fonte do wizard da CLI). */
3
37
  export function parseRateLimitEnv(env = process.env) {
4
- const max = Number(env['RATE_LIMIT_MAX'] ?? 300);
5
- const windowSeconds = Number(env['RATE_LIMIT_WINDOW_SECONDS'] ?? 60);
6
- return {
7
- max: Number.isFinite(max) && max > 0 ? Math.floor(max) : 300,
8
- windowMs: Number.isFinite(windowSeconds) && windowSeconds > 0 ? windowSeconds * 1000 : 60_000,
9
- };
10
- }
11
- export function clientKey(c) {
12
- const tenant = c.req.header('X-Tenant-ID') ?? 'platform';
13
- const ip = c.req.header('X-Forwarded-For')?.split(',')[0]?.trim() ??
14
- c.req.header('X-Real-IP') ??
15
- 'unknown';
16
- return `${tenant}:${ip}`;
38
+ return parseRateLimitSettings(env);
17
39
  }
18
40
  /** Reseta os buckets (uso em testes). */
19
41
  export function resetRateLimiter() {
20
42
  buckets.clear();
43
+ operations = 0;
44
+ jwtSecretCache = null;
45
+ }
46
+ /** Observabilidade/testes: quantos buckets estão vivos agora. */
47
+ export function rateLimiterStats() {
48
+ return { buckets: buckets.size };
49
+ }
50
+ /** Remove buckets cuja janela já venceu (uso em testes e em shutdown). */
51
+ export function sweepExpiredBuckets(now = Date.now()) {
52
+ const before = buckets.size;
53
+ sweep(now);
54
+ return before - buckets.size;
55
+ }
56
+ // ---------------------------------------------------------------- identidade ---
57
+ function readEnv(name) {
58
+ return (process.env[name] ?? '').trim();
59
+ }
60
+ /** Faixas privadas + loopback: o padrão de "proxy de confiança" (nginx/docker/local). */
61
+ function isPrivateOrLoopback(ip) {
62
+ if (ip === '::1' || ip === 'localhost')
63
+ return true;
64
+ if (/^127\./.test(ip))
65
+ return true;
66
+ if (/^10\./.test(ip))
67
+ return true;
68
+ if (/^192\.168\./.test(ip))
69
+ return true;
70
+ if (/^169\.254\./.test(ip))
71
+ return true;
72
+ const second = Number(ip.split('.')[1] ?? NaN);
73
+ if (ip.startsWith('172.') && second >= 16 && second <= 31)
74
+ return true;
75
+ // ULA do IPv6 (fc00::/7) e link-local (fe80::/10)
76
+ if (/^f[cd]/i.test(ip) || /^fe[89ab]/i.test(ip))
77
+ return true;
78
+ return false;
79
+ }
80
+ /** Lista explícita TRUSTED_PROXIES (IPs ou CIDRs, separados por vírgula). */
81
+ function isExplicitlyTrusted(ip) {
82
+ const raw = readEnv('TRUSTED_PROXIES');
83
+ if (!raw)
84
+ return false;
85
+ return raw.split(',').some((entry) => {
86
+ const value = entry.trim();
87
+ if (!value)
88
+ return false;
89
+ if (value === ip)
90
+ return true;
91
+ if (!value.includes('/'))
92
+ return false;
93
+ // CIDR /8 /16 /24 para IPv4 — suficiente para os casos reais de proxy.
94
+ const [base, prefixRaw] = value.split('/');
95
+ const prefix = Number(prefixRaw);
96
+ if (!base || !Number.isInteger(prefix))
97
+ return false;
98
+ const a = ip.split('.').map(Number);
99
+ const b = base.split('.').map(Number);
100
+ if (a.length !== 4 || b.length !== 4 || a.some(Number.isNaN) || b.some(Number.isNaN))
101
+ return false;
102
+ const maskBits = prefix;
103
+ for (let i = 0; i < 4; i++) {
104
+ const bits = Math.min(8, Math.max(0, maskBits - i * 8));
105
+ const mask = bits === 0 ? 0 : (0xff << (8 - bits)) & 0xff;
106
+ if ((a[i] & mask) !== (b[i] & mask))
107
+ return false;
108
+ }
109
+ return true;
110
+ });
111
+ }
112
+ export function isTrustedProxy(ip) {
113
+ if (!ip)
114
+ return false;
115
+ return isExplicitlyTrusted(ip) || isPrivateOrLoopback(ip);
116
+ }
117
+ /** IP do par imediato (socket TCP) — a identidade que NUNCA é forjável. */
118
+ export function socketPeerIp(c) {
119
+ const env = c.env;
120
+ const raw = env?.incoming?.socket?.remoteAddress ?? null;
121
+ if (!raw)
122
+ return null;
123
+ return raw.startsWith('::ffff:') ? raw.slice(7) : raw;
124
+ }
125
+ /**
126
+ * Cliente final a partir de X-Forwarded-For: caminha da DIREITA para a
127
+ * esquerda pulando proxies de confiança e para no primeiro hop que NÃO é
128
+ * proxy — esse é o cliente real. O primeiro valor (o que o antigo código
129
+ * usava) é justamente o mais forjável: qualquer um manda `XFF: 1.2.3.4`.
130
+ */
131
+ function clientFromForwarded(value) {
132
+ const hops = value.split(',').map((s) => s.trim()).filter(Boolean);
133
+ if (hops.length === 0)
134
+ return null;
135
+ for (let i = hops.length - 1; i >= 0; i--) {
136
+ const hop = hops[i];
137
+ if (!isTrustedProxy(hop))
138
+ return hop;
139
+ }
140
+ // Todos os hops são proxies de confiança: o mais externo é o cliente.
141
+ return hops[0] ?? null;
142
+ }
143
+ /** Resolve o IP do cliente final respeitando TRUST_PROXY (true/false/auto). */
144
+ export function resolveClientIp(c) {
145
+ const peer = socketPeerIp(c);
146
+ const forwarded = c.req.header('X-Forwarded-For');
147
+ const realIp = c.req.header('X-Real-IP');
148
+ const trust = readEnv('TRUST_PROXY').toLowerCase();
149
+ const trusted = trust === 'true' || trust === '1' || trust === 'on';
150
+ const distrusted = trust === 'false' || trust === '0' || trust === 'off';
151
+ // TRUST_PROXY=false: header de proxy é ignorado de propósito.
152
+ if (distrusted)
153
+ return peer ?? 'unknown';
154
+ // Sem par TCP identificável (testes, runtimes sem IncomingMessage): o header
155
+ // é a única sinalização de identidade existente e vem do proxy de edge.
156
+ if (!peer) {
157
+ if (forwarded)
158
+ return clientFromForwarded(forwarded) ?? 'unknown';
159
+ return realIp?.trim() || 'unknown';
160
+ }
161
+ // Par não-proxied (exposto direto na internet): só o socket vale. Um
162
+ // atacante direto não consegue trocar de balde mandando XFF forjado.
163
+ if (!trusted && !isTrustedProxy(peer))
164
+ return peer;
165
+ // TRUST_PROXY=true ou par é proxy de confiança → o header descreve o cliente.
166
+ if (forwarded)
167
+ return clientFromForwarded(forwarded) ?? peer;
168
+ if (realIp)
169
+ return realIp.trim() || peer;
170
+ return peer;
21
171
  }
172
+ // ------------------------------------------------------------------- sessão ---
22
173
  /**
23
- * Janela deslizante simples: 429 + Retry-After quando excede o limite.
24
- * /health e /metrics ficam de fora (probes não devem ser limitados).
174
+ * Secret do JWT em cache: `loadConfig()` faz I/O de disco a cada chamada e
175
+ * este caminho roda em TODA requisição autenticada.
176
+ */
177
+ let jwtSecretCache = null;
178
+ function jwtSecret() {
179
+ if (jwtSecretCache === null)
180
+ jwtSecretCache = loadConfig().auth.jwtSecret;
181
+ return jwtSecretCache;
182
+ }
183
+ /**
184
+ * Extrai o user id da sessão verificando a assinatura HS256 do cookie
185
+ * `access_token` — HMAC puro, sem tocar o banco (custo desprezível frente a
186
+ * uma query) e, principalmente, IMPOSSÍVEL de forjar por um cliente.
187
+ */
188
+ function subjectFromAccessToken(token) {
189
+ const parts = token.split('.');
190
+ if (parts.length !== 3)
191
+ return null;
192
+ const [headerPart, payloadPart, signature] = parts;
193
+ if (!headerPart || !payloadPart || !signature)
194
+ return null;
195
+ try {
196
+ const header = JSON.parse(Buffer.from(headerPart, 'base64url').toString('utf8'));
197
+ if (header.alg !== 'HS256')
198
+ return null;
199
+ const expected = createHmac('sha256', jwtSecret()).update(`${headerPart}.${payloadPart}`).digest('base64url');
200
+ const a = Buffer.from(signature);
201
+ const b = Buffer.from(expected);
202
+ if (a.length !== b.length || !timingSafeEqual(a, b))
203
+ return null;
204
+ const payload = JSON.parse(Buffer.from(payloadPart, 'base64url').toString('utf8'));
205
+ if (typeof payload.sub !== 'string' || !payload.sub)
206
+ return null;
207
+ if (typeof payload.exp === 'number' && payload.exp * 1000 <= Date.now())
208
+ return null;
209
+ return payload.sub;
210
+ }
211
+ catch {
212
+ return null;
213
+ }
214
+ }
215
+ function readCookie(cookieHeader, name) {
216
+ if (!cookieHeader)
217
+ return null;
218
+ for (const part of cookieHeader.split(';')) {
219
+ const [key, ...rest] = part.trim().split('=');
220
+ if (key === name)
221
+ return decodeURIComponent(rest.join('='));
222
+ }
223
+ return null;
224
+ }
225
+ /** User id da sessão, quando o request carrega um access token válido. */
226
+ export function authenticatedUserId(c) {
227
+ const cookieToken = readCookie(c.req.header('Cookie'), 'access_token');
228
+ const bearer = c.req.header('Authorization')?.startsWith('Bearer ')
229
+ ? c.req.header('Authorization').slice(7)
230
+ : undefined;
231
+ const token = cookieToken ?? bearer;
232
+ return token ? subjectFromAccessToken(token) : null;
233
+ }
234
+ // ------------------------------------------------------------------- chaves ---
235
+ /**
236
+ * Chave do bucket: `u:<user id>` quando autenticado (orçamento próprio, não
237
+ * disputa com anônimos), senão `ip:<ip real>`. O tenant saiu da chave porque
238
+ * `X-Tenant-ID` é controlado pelo cliente e permitia trocar de balde à vontade.
239
+ */
240
+ export function clientKey(c) {
241
+ const userId = authenticatedUserId(c);
242
+ return userId ? `u:${userId}` : `ip:${resolveClientIp(c)}`;
243
+ }
244
+ /** Leitura é barata; escrita custa 5x para não ser engolida por rajadas de GET. */
245
+ export function requestCost(method) {
246
+ return ['GET', 'HEAD', 'OPTIONS', 'TRACE'].includes(method.toUpperCase()) ? 1 : 5;
247
+ }
248
+ /**
249
+ * Rotas que nunca consomem orçamento: probes (/health, /metrics), mídia
250
+ * estática (binário imutável, cache 30d no nginx) e o bootstrap do CSRF
251
+ * (UUID aleatório, não toca o banco) — nenhuma delas é API transacional.
252
+ */
253
+ export function isExemptPath(method, path) {
254
+ if (path === '/health' || path.startsWith('/api/v1/health') || path === '/metrics')
255
+ return true;
256
+ const get = method.toUpperCase() === 'GET';
257
+ if (get && path.startsWith('/api/v1/media/file/'))
258
+ return true;
259
+ if (get && path === '/api/v1/auth/csrf')
260
+ return true;
261
+ return false;
262
+ }
263
+ // ------------------------------------------------------------------ buckets ---
264
+ function sweep(now) {
265
+ for (const [key, bucket] of buckets) {
266
+ if (bucket.resetAt <= now)
267
+ buckets.delete(key);
268
+ }
269
+ }
270
+ function maybeSweep(now) {
271
+ operations += 1;
272
+ if (buckets.size <= MAX_BUCKETS && operations % SWEEP_EVERY !== 0)
273
+ return;
274
+ sweep(now);
275
+ if (buckets.size <= MAX_BUCKETS)
276
+ return;
277
+ // Estourou o teto mesmo com a varredura: evicta o bucket mais antigo.
278
+ const oldest = [...buckets.entries()].sort((a, b) => a[1].resetAt - b[1].resetAt);
279
+ for (const [key] of oldest.slice(0, buckets.size - MAX_BUCKETS))
280
+ buckets.delete(key);
281
+ }
282
+ /**
283
+ * consome `cost` tokens do bucket da `key`, recriando a janela quando ela
284
+ * expira. Devolve o total consumido na janela corrente e o instante de reset
285
+ * (o caller compara com o max da própria classe).
286
+ */
287
+ function consume(key, cost, windowMs, now) {
288
+ maybeSweep(now);
289
+ let bucket = buckets.get(key);
290
+ if (!bucket || bucket.resetAt <= now) {
291
+ bucket = { count: 0, resetAt: now + windowMs };
292
+ buckets.set(key, bucket);
293
+ }
294
+ bucket.count += cost;
295
+ return { count: bucket.count, resetAt: bucket.resetAt };
296
+ }
297
+ function rateLimitResponse(c, limit, resetAt) {
298
+ const retryAfter = Math.max(1, Math.ceil((resetAt - Date.now()) / 1000));
299
+ c.header('Retry-After', String(retryAfter));
300
+ c.header('X-RateLimit-Limit', String(limit));
301
+ c.header('X-RateLimit-Remaining', '0');
302
+ return c.json({ error: 'TOO_MANY_REQUESTS', message: `Rate limit exceeded. Retry after ${retryAfter}s.` }, 429);
303
+ }
304
+ /**
305
+ * Limiter global por classe de tráfego: 429 + Retry-After quando a classe
306
+ * estoura o próprio orçamento. Credenciais e probes ficam por conta de
307
+ * `loginRateLimitMiddleware` e das isenções acima.
25
308
  */
26
309
  export function rateLimitMiddleware(options = {}) {
27
- const { max, windowMs } = { ...parseRateLimitEnv(), ...options };
310
+ // Garante que o .env do projeto já tenha sido carregado antes do parse
311
+ // (loadConfig faz o load uma única vez e é idempotente).
312
+ loadConfig();
313
+ const settings = parseRateLimitSettings();
314
+ const { max, windowMs, authMax } = {
315
+ max: options.max ?? settings.max,
316
+ windowMs: options.windowMs ?? settings.windowMs,
317
+ authMax: options.authMax ?? settings.authMax,
318
+ };
28
319
  return async (c, next) => {
29
320
  const path = new URL(c.req.url).pathname;
30
- if (path === '/health' || path.startsWith('/api/v1/health') || path.startsWith('/metrics')) {
321
+ if (isExemptPath(c.req.method, path)) {
31
322
  await next();
32
323
  return;
33
324
  }
34
325
  const key = clientKey(c);
326
+ const limit = key.startsWith('u:') ? authMax : max;
35
327
  const now = Date.now();
36
- const bucket = buckets.get(key);
37
- if (!bucket || bucket.resetAt <= now) {
38
- buckets.set(key, { count: 1, resetAt: now + windowMs });
39
- c.header('X-RateLimit-Limit', String(max));
40
- c.header('X-RateLimit-Remaining', String(max - 1));
328
+ const result = consume(key, requestCost(c.req.method), windowMs, now);
329
+ if (result.count > limit) {
330
+ return rateLimitResponse(c, limit, result.resetAt);
331
+ }
332
+ c.header('X-RateLimit-Limit', String(limit));
333
+ c.header('X-RateLimit-Remaining', String(Math.max(0, limit - result.count)));
334
+ await next();
335
+ return;
336
+ };
337
+ }
338
+ /**
339
+ * Limiter dedicado de credenciais (POST /auth/login).
340
+ *
341
+ * Duas chaves simultâneas: por IP (segura o ataque de um host rotando
342
+ * e-mails) e por e-mail (segura o ataque de muitos hosts mirando uma conta).
343
+ * Fica ANTES do limiter global para que o brute force receba 429 próprio em
344
+ * vez de esvaziar o orçamento dos demais clientes.
345
+ */
346
+ export function loginRateLimitMiddleware(options = {}) {
347
+ loadConfig();
348
+ const settings = parseRateLimitSettings();
349
+ const loginMax = options.loginMax ?? settings.loginMax;
350
+ const loginMaxPerIp = options.loginMaxPerIp ?? settings.loginMaxPerIp;
351
+ const windowMs = options.loginWindowMs ?? settings.loginWindowMs;
352
+ return async (c, next) => {
353
+ if (c.req.method.toUpperCase() !== 'POST') {
41
354
  await next();
42
355
  return;
43
356
  }
44
- bucket.count += 1;
45
- if (bucket.count > max) {
46
- const retryAfter = Math.max(1, Math.ceil((bucket.resetAt - now) / 1000));
47
- c.header('Retry-After', String(retryAfter));
48
- c.header('X-RateLimit-Limit', String(max));
49
- c.header('X-RateLimit-Remaining', '0');
50
- return c.json({ error: 'TOO_MANY_REQUESTS', message: `Rate limit exceeded. Retry after ${retryAfter}s.` }, 429);
357
+ const ip = resolveClientIp(c);
358
+ const body = await c.req.json().catch(() => null);
359
+ const email = typeof body?.email === 'string' ? body.email.trim().toLowerCase().slice(0, 254) : '';
360
+ // Login via API key (POST /auth/api-key-login) não tem e-mail; o prefixo
361
+ // (em claro, não é segredo) vira a chave do balde para segurar brute force
362
+ // de uma key específica além do limite por IP.
363
+ const apiKeyPrefix = typeof body?.apiKey === 'string'
364
+ ? (body.apiKey.trim().split('_')[1] ?? '').slice(0, 32)
365
+ : '';
366
+ const now = Date.now();
367
+ const ipKey = `login:ip:${ip}`;
368
+ const ipResult = consume(ipKey, 1, windowMs, now);
369
+ if (ipResult.count > loginMaxPerIp) {
370
+ return rateLimitResponse(c, loginMaxPerIp, ipResult.resetAt);
371
+ }
372
+ if (email) {
373
+ const emailKey = `login:email:${email}`;
374
+ const emailResult = consume(emailKey, 1, windowMs, now);
375
+ if (emailResult.count > loginMax) {
376
+ return rateLimitResponse(c, loginMax, emailResult.resetAt);
377
+ }
378
+ }
379
+ if (apiKeyPrefix) {
380
+ const keyResult = consume(`login:key:${apiKeyPrefix}`, 1, windowMs, now);
381
+ if (keyResult.count > loginMax) {
382
+ return rateLimitResponse(c, loginMax, keyResult.resetAt);
383
+ }
51
384
  }
52
- c.header('X-RateLimit-Limit', String(max));
53
- c.header('X-RateLimit-Remaining', String(Math.max(0, max - bucket.count)));
54
385
  await next();
55
386
  return;
56
387
  };
@@ -1 +1 @@
1
- {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"AAAA,2FAA2F;AAS3F,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAO1C,MAAM,UAAU,iBAAiB,CAAC,MAA0C,OAAO,CAAC,GAAG;IAIrF,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,gBAAgB,CAAC,IAAI,GAAG,CAAC,CAAC;IACjD,MAAM,aAAa,GAAG,MAAM,CAAC,GAAG,CAAC,2BAA2B,CAAC,IAAI,EAAE,CAAC,CAAC;IACrE,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG;QAC5D,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,aAAa,GAAG,CAAC,CAAC,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,CAAC,CAAC,MAAM;KAC9F,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,CAAU;IAClC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,UAAU,CAAC;IACzD,MAAM,EAAE,GACN,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE;QACtD,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,WAAW,CAAC;QACzB,SAAS,CAAC;IACZ,OAAO,GAAG,MAAM,IAAI,EAAE,EAAE,CAAC;AAC3B,CAAC;AAED,yCAAyC;AACzC,MAAM,UAAU,gBAAgB;IAC9B,OAAO,CAAC,KAAK,EAAE,CAAC;AAClB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAA4B,EAAE;IAChE,MAAM,EAAE,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,GAAG,iBAAiB,EAAE,EAAE,GAAG,OAAO,EAAE,CAAC;IAEjE,OAAO,KAAK,EAAE,CAAU,EAAE,IAAU,EAAiC,EAAE;QACrE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QACzC,IAAI,IAAI,KAAK,SAAS,IAAI,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3F,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAEhC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,GAAG,EAAE,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,GAAG,GAAG,QAAQ,EAAE,CAAC,CAAC;YACxD,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC;YACnD,MAAM,IAAI,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;QAElB,IAAI,MAAM,CAAC,KAAK,GAAG,GAAG,EAAE,CAAC;YACvB,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;YACzE,CAAC,CAAC,MAAM,CAAC,aAAa,EAAE,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;YAC5C,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC3C,CAAC,CAAC,MAAM,CAAC,uBAAuB,EAAE,GAAG,CAAC,CAAC;YACvC,OAAO,CAAC,CAAC,IAAI,CACX,EAAE,KAAK,EAAE,mBAAmB,EAAE,OAAO,EAAE,oCAAoC,UAAU,IAAI,EAAE,EAC3F,GAAG,CACJ,CAAC;QACJ,CAAC;QAED,CAAC,CAAC,MAAM,CAAC,mBAAmB,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3C,CAAC,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,IAAI,EAAE,CAAC;QACb,OAAO;IACT,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"rate-limit.js","sourceRoot":"","sources":["../../src/middleware/rate-limit.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { Hono } from 'hono';
2
+ declare const router: Hono<import("hono/types").BlankEnv, 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/api-keys/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,QAAA,MAAM,MAAM,4EAAa,CAAC;AAmG1B,eAAe,MAAM,CAAC"}
@@ -0,0 +1,89 @@
1
+ // @oktis-works/api - API Keys (CRUD + revogação)
2
+ //
3
+ // A key em claro é retornada SOMENTE no POST de criação. Daí em diante só
4
+ // existe o hash; clientes trocam a key por JWT em POST /api/v1/auth/api-key-login.
5
+ import { Hono } from 'hono';
6
+ import { ApiKeyService } from '@oktis-works/auth';
7
+ import { getConnection } from '@oktis-works/database';
8
+ import { authMiddleware, requirePermission } from '../../middleware/auth.js';
9
+ const apiKeyService = new ApiKeyService();
10
+ const router = new Hono();
11
+ router.use('*', authMiddleware);
12
+ /** Shape seguro para respostas — nunca inclui key_hash. */
13
+ function publicApiKey(key) {
14
+ return {
15
+ id: key.id,
16
+ tenant_id: key.tenantId,
17
+ user_id: key.userId,
18
+ name: key.name,
19
+ key_prefix: key.keyPrefix,
20
+ one_time: key.oneTime,
21
+ expires_at: key.expiresAt ?? null,
22
+ last_used_at: key.lastUsedAt ?? null,
23
+ use_count: key.useCount,
24
+ revoked_at: key.revokedAt ?? null,
25
+ created_by: key.createdBy ?? null,
26
+ created_at: key.createdAt,
27
+ };
28
+ }
29
+ router.get('/', requirePermission('read', 'apikey'), async (c) => {
30
+ const tenantId = String(c.get('tenantId') ?? 'default');
31
+ const keys = await apiKeyService.list(tenantId);
32
+ return c.json(keys.map(publicApiKey));
33
+ });
34
+ router.post('/', requirePermission('create', 'apikey'), async (c) => {
35
+ try {
36
+ const body = await c.req.json();
37
+ const sql = getConnection();
38
+ const tenantId = String(c.get('tenantId') ?? 'default');
39
+ const name = typeof body['name'] === 'string' ? body['name'].trim() : '';
40
+ // Identidade que a key assume: padrão é o usuário que está criando.
41
+ const userId = typeof body['userId'] === 'string' && body['userId'].trim()
42
+ ? body['userId'].trim()
43
+ : String(c.get('userId') ?? '');
44
+ const oneTime = body['oneTime'] === true;
45
+ const expiresAtRaw = body['expiresAt'];
46
+ const expiresAt = typeof expiresAtRaw === 'string' && expiresAtRaw.trim()
47
+ ? new Date(expiresAtRaw)
48
+ : null;
49
+ if (!name)
50
+ return c.json({ error: 'Name is required' }, 400);
51
+ if (!userId)
52
+ return c.json({ error: 'User is required' }, 400);
53
+ if (expiresAt && Number.isNaN(expiresAt.getTime())) {
54
+ return c.json({ error: 'Invalid expiresAt' }, 400);
55
+ }
56
+ // O usuário precisa pertencer ao tenant (RLS bloqueia o INSERT de qualquer
57
+ // forma, mas um 400 explícito é uma melhor mensagem).
58
+ const owner = await sql.unsafe(`SELECT u.id FROM users u
59
+ JOIN tenant_users tu ON tu.user_id = u.id
60
+ WHERE u.id = $1 AND tu.tenant_id = $2 AND tu.status = 'ACTIVE'`, [userId, tenantId]);
61
+ if (!owner[0])
62
+ return c.json({ error: 'User does not belong to this tenant' }, 400);
63
+ const created = await apiKeyService.create({
64
+ tenantId,
65
+ userId,
66
+ name,
67
+ oneTime,
68
+ expiresAt,
69
+ createdBy: String(c.get('userId') ?? ''),
70
+ });
71
+ return c.json({ ...publicApiKey(created), plaintext: created.plaintext }, 201);
72
+ }
73
+ catch (error) {
74
+ const message = error instanceof Error ? error.message : 'Failed to create API key';
75
+ return c.json({ error: message }, 400);
76
+ }
77
+ });
78
+ router.delete('/:id', requirePermission('delete', 'apikey'), async (c) => {
79
+ const id = c.req.param('id');
80
+ if (!id)
81
+ return c.json({ error: 'Missing key id' }, 400);
82
+ const tenantId = String(c.get('tenantId') ?? 'default');
83
+ const revoked = await apiKeyService.revoke(id, tenantId);
84
+ if (!revoked)
85
+ return c.json({ error: 'API key not found or already revoked' }, 404);
86
+ return c.json({ success: true });
87
+ });
88
+ export default router;
89
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/api-keys/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsD5B,QAAA,MAAM,UAAU,4EAAa,CAAC;AAgO9B,eAAe,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAsD5B,QAAA,MAAM,UAAU,4EAAa,CAAC;AAwS9B,eAAe,UAAU,CAAC"}
@@ -67,14 +67,36 @@ const REFRESH_OPTS = {
67
67
  path: '/',
68
68
  maxAge: cookieCfg.refreshTokenMaxAge ?? 60 * 60 * 24 * 30, // 30d
69
69
  };
70
+ /**
71
+ * Cookie legível pelo JS com o vencimento do access token.
72
+ *
73
+ * O access token é HttpOnly (inacessível ao JS), então o admin não tem como
74
+ * saber quando ele vence e só descobria no primeiro 401 — quando TODAS as
75
+ * requisições paralelas da página já tinham sido disparadas, gerando o burst
76
+ * de ~40 chamadas que esvaziava o rate limit. Este cookie permite o refresh
77
+ * PROATIVO (antes do 401). Não é sensível: só expõe um timestamp.
78
+ */
79
+ function setSessionExpiryCookie(c) {
80
+ const maxAge = cookieCfg.accessTokenMaxAge ?? 60 * 15;
81
+ setCookie(c, 'session_expires_at', new Date(Date.now() + maxAge * 1000).toISOString(), {
82
+ httpOnly: false,
83
+ secure: cookieSecure,
84
+ sameSite: cookieCfg.sameSite,
85
+ ...(cookieDomain ? { domain: cookieDomain } : {}),
86
+ path: '/',
87
+ maxAge,
88
+ });
89
+ }
70
90
  /** Set-Cookie múltiplo: hono/cookie setCookie appenda corretamente. */
71
91
  function setAuthCookies(c, accessToken, refreshToken) {
72
92
  setCookie(c, 'access_token', accessToken, ACCESS_OPTS);
73
93
  setCookie(c, 'refresh_token', refreshToken, REFRESH_OPTS);
94
+ setSessionExpiryCookie(c);
74
95
  }
75
96
  function clearAuthCookies(c) {
76
97
  deleteCookie(c, 'access_token', { path: '/', ...(cookieDomain ? { domain: cookieDomain } : {}) });
77
98
  deleteCookie(c, 'refresh_token', { path: '/', ...(cookieDomain ? { domain: cookieDomain } : {}) });
99
+ deleteCookie(c, 'session_expires_at', { path: '/', ...(cookieDomain ? { domain: cookieDomain } : {}) });
78
100
  }
79
101
  function isBrowserRequest(c) {
80
102
  return Boolean(c.req.header('Origin') || c.req.header('Sec-Fetch-Site'));
@@ -167,6 +189,46 @@ authRouter.post('/login', async (c) => {
167
189
  return c.json({ error: message }, 401);
168
190
  }
169
191
  });
192
+ // POST /auth/api-key-login — troca uma API key por access JWT + refresh token.
193
+ // Clientes API-first: usam a key UMA vez aqui e depois operam com Bearer +
194
+ // /auth/refresh (rotação e reuse-detection herdam de sessions). Um browser
195
+ // também pode chamar (recebe tokens em cookie, como o /login).
196
+ authRouter.post('/api-key-login', async (c) => {
197
+ try {
198
+ const body = await c.req.json().catch(() => ({}));
199
+ const apiKey = typeof body['apiKey'] === 'string' ? body['apiKey'].trim() : '';
200
+ if (!apiKey) {
201
+ return c.json({ error: 'Missing API key' }, 400);
202
+ }
203
+ const host = c.req.header('host') ?? '';
204
+ const tenant = await resolveTenantFromHost(host);
205
+ if (!tenant) {
206
+ return c.json({ error: 'Tenant not found for this host' }, 404);
207
+ }
208
+ await establishTenantContext(tenant.id);
209
+ c.set('tenantId', tenant.id);
210
+ const result = await authService.loginWithApiKey({
211
+ apiKey,
212
+ tenantId: tenant.id,
213
+ ipAddress: c.req.header('x-forwarded-for') ?? c.req.header('x-real-ip'),
214
+ userAgent: c.req.header('user-agent'),
215
+ });
216
+ if (!result) {
217
+ return c.json({ error: 'Invalid or expired API key' }, 401);
218
+ }
219
+ const userId = result.user.id ?? '';
220
+ if (!userId)
221
+ return c.json({ error: 'User ID not found' }, 500);
222
+ c.set('userId', userId);
223
+ setAuthCookies(c, result.accessToken, result.refreshToken);
224
+ setCsrfCookie(c);
225
+ return c.json(authResponse(c, result));
226
+ }
227
+ catch (error) {
228
+ const message = error instanceof Error ? error.message : 'API key login failed';
229
+ return c.json({ error: message }, 401);
230
+ }
231
+ });
170
232
  // POST /auth/refresh — híbrido: refreshToken do cookie (browser) OU body (API-first);
171
233
  // retorna tokens no body (clientes externos) E seta cookies (browser)
172
234
  authRouter.post('/refresh', async (c) => {
@@ -225,7 +287,10 @@ authRouter.get('/me', async (c) => {
225
287
  return c.json({ error: 'Invalid or expired token' }, 401);
226
288
  }
227
289
  const sql = (await import('@oktis-works/database')).getConnection();
228
- const rows = await sql.unsafe('SELECT id, email, name, avatar, status, last_login_at FROM users WHERE id = $1', [payload.sub]);
290
+ // `locale` vem junto para que o SSR do admin resolva idioma E sessão em
291
+ // UMA requisição server-side (antes eram /auth/me + /users/me/locale +
292
+ // /auth/me de novo no client).
293
+ const rows = await sql.unsafe('SELECT id, email, name, avatar, status, last_login_at, locale FROM users WHERE id = $1', [payload.sub]);
229
294
  if (!rows.length) {
230
295
  return c.json({ error: 'User not found' }, 404);
231
296
  }
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/auth/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/content/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,QAAA,MAAM,aAAa,4EAAa,CAAC;AA0KjC,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/content/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAM5B,QAAA,MAAM,aAAa,4EAAa,CAAC;AA8MjC,eAAe,aAAa,CAAC"}
@@ -1,10 +1,32 @@
1
1
  // @oktis-works/api - Content Routes
2
2
  import { Hono } from 'hono';
3
3
  import { contentService, contentPublisher, enqueueJob } from '@oktis-works/core';
4
- import { resolveTenantId } from '@oktis-works/database';
4
+ import { getConnection, resolveTenantId } from '@oktis-works/database';
5
5
  import { authMiddleware, requirePermission } from '../../middleware/auth.js';
6
6
  const contentRouter = new Hono();
7
7
  contentRouter.use('*', authMiddleware);
8
+ /**
9
+ * Expande o autor de um lote de conteúdo em UMA query (anti N+1).
10
+ * O widget de atividade do dashboard consumia 1 requisição por item para
11
+ * descobrir o autor — 10 itens = 10 chamadas a /content/:id por carregamento.
12
+ */
13
+ async function attachAuthors(items) {
14
+ const ids = [...new Set(items
15
+ .map((item) => (item['author_id'] ?? item['authorId']))
16
+ .filter((id) => typeof id === 'string' && id.length > 0))];
17
+ if (ids.length === 0)
18
+ return;
19
+ const rows = await getConnection().unsafe('SELECT id, name, email, avatar FROM users WHERE id = ANY($1)', [ids]);
20
+ const byId = new Map(rows.map((row) => [String(row['id']), row]));
21
+ for (const item of items) {
22
+ const authorId = (item['author_id'] ?? item['authorId']);
23
+ const row = authorId ? byId.get(authorId) : undefined;
24
+ const record = row;
25
+ item['author'] = record
26
+ ? { id: record['id'], name: record['name'], email: record['email'], avatar: record['avatar'] ?? null }
27
+ : null;
28
+ }
29
+ }
8
30
  contentRouter.get('/singleton/:type', requirePermission('read', 'content'), async (c) => {
9
31
  const type = c.req.param('type');
10
32
  const tenantId = await resolveTenantId(String(c.get('tenantId') ?? 'default'));
@@ -17,7 +39,12 @@ contentRouter.get('/', requirePermission('read', 'content'), async (c) => {
17
39
  const type = c.req.query('type') || undefined;
18
40
  const status = (c.req.query('status') || undefined);
19
41
  const search = c.req.query('search') || undefined;
42
+ // ?include=author → anexa {author} a cada item em uma única query de users.
43
+ const includeAuthor = c.req.query('include') === 'author';
20
44
  const result = await contentService.list({ page, limit, type, status, search });
45
+ if (includeAuthor) {
46
+ await attachAuthors(result.data);
47
+ }
21
48
  return c.json(result);
22
49
  });
23
50
  contentRouter.get('/slug/:slug', requirePermission('read', 'content'), async (c) => {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/content/index.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACjF,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7E,MAAM,aAAa,GAAG,IAAI,IAAI,EAAE,CAAC;AAEjC,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,cAAc,CAAC,CAAC;AAEvC,aAAa,CAAC,GAAG,CAAC,kBAAkB,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACtF,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAW,CAAC;IAC3C,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAmB,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;IACxF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAClE,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvE,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,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,CAA8B,CAAC;IACjF,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC;IAElD,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IAChF,OAAO,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,aAAa,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACjF,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAW,CAAC;IAC3C,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAC9C,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAE3D,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1E,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;IACvC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAEjD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACzB,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,IAAI,CAAC,GAAG,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC1E,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAiB,CAAW,CAAC;QAClD,4EAA4E;QAC5E,MAAM,QAAQ,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,UAAmB,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC;QAExF,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC;YAC1C,GAAG,IAAI;YACP,QAAQ;YACR,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QAEH,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IAC9B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACpF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC5E,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;QAEhC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAEtD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACpF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,iEAAiE;AACjE,sEAAsE;AACtE,6EAA6E;AAC7E,kEAAkE;AAClE,aAAa,CAAC,IAAI,CAAC,cAAc,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACrF,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAiB,CAAW,CAAC;IAClD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAmB,CAAuB,CAAC;IAClE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,WAAW,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAElG,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,iBAAiB,EACjB,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAC1D,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,EAAE,CAC5D,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,GAAG,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;QAChH,CAAC;QACD,sDAAsD;IACxD,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,OAAO,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE1D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC;QACrF,MAAM,MAAM,GAAG,OAAO,KAAK,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,mGAAmG;AACnG,aAAa,CAAC,IAAI,CAAC,gBAAgB,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACvF,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;IACvC,MAAM,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,QAAiB,CAAW,CAAC;IAClD,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,UAAmB,CAAuB,CAAC;IAClE,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;QACrB,MAAM,MAAM,GAAG,MAAM,UAAU,CAC7B,mBAAmB,EACnB,EAAE,SAAS,EAAE,EAAE,EAAE,EACjB,EAAE,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,qBAAqB,EAAE,EAAE,EAAE,CACvD,CAAC;QACF,IAAI,MAAM,EAAE,CAAC;YACX,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;QAE5D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,cAAc,EAAE,MAAM,CAAC,cAAc,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClG,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,6BAA6B,CAAC;QACvF,MAAM,MAAM,GAAG,OAAO,KAAK,mBAAmB,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAC3D,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,MAAM,CAAC,CAAC;IAC5C,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IAC/E,IAAI,CAAC;QACH,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;QACvC,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAEhD,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,EAAE,GAAG,CAAC,CAAC;QACrD,CAAC;QAED,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACpF,OAAO,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,GAAG,CAAC,CAAC;IACzC,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,aAAa,CAAC,GAAG,CAAC,eAAe,EAAE,iBAAiB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE;IACnF,MAAM,EAAE,GAAG,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAW,CAAC;IACvC,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IACtD,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC1B,CAAC,CAAC,CAAC;AAEH,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/content/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,QAAA,MAAM,MAAM,4EAAa,CAAC;AAyH1B,eAAe,MAAM,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAG5B,QAAA,MAAM,MAAM,4EAAa,CAAC;AAoJ1B,eAAe,MAAM,CAAC"}
@@ -19,6 +19,7 @@ const RESOURCES = [
19
19
  ['themes', 'Temas — ciclo de vida'],
20
20
  ['builds', 'Builds (imagens Docker)'],
21
21
  ['webhooks', 'Webhooks assináveis'],
22
+ ['api-keys', 'API keys (login via API para clientes externos)'],
22
23
  ['content-types', 'Content Types'],
23
24
  ['taxonomies', 'Taxonomias'],
24
25
  ['field-groups', 'Field Groups + location rules'],
@@ -43,6 +44,31 @@ function buildOpenApiDocument(origin) {
43
44
  responses: { '200': { description: 'Lista de hooks conhecidos e registrados' } },
44
45
  },
45
46
  },
47
+ '/api/v1/auth/api-key-login': {
48
+ post: {
49
+ summary: 'Troca uma API key por access JWT + refresh token',
50
+ description: 'A API key é usada somente aqui; depois disso o cliente opera com Authorization: Bearer e POST /api/v1/auth/refresh. Keys single-use são revogadas após o primeiro uso.',
51
+ tags: ['auth'],
52
+ requestBody: {
53
+ required: true,
54
+ content: {
55
+ 'application/json': {
56
+ schema: {
57
+ type: 'object',
58
+ required: ['apiKey'],
59
+ properties: { apiKey: { type: 'string', description: 'Valor completo no formato okcms_<prefix>_<secret>' } },
60
+ },
61
+ },
62
+ },
63
+ },
64
+ responses: {
65
+ '200': { description: 'Tokens no body (clientes sem Origin) ou em cookies HttpOnly (browser)' },
66
+ '400': { description: 'Body sem apiKey' },
67
+ '401': { description: 'Key inválida, expirada ou revogada' },
68
+ '429': { description: 'Rate limit de credenciais excedido (Retry-After)' },
69
+ },
70
+ },
71
+ },
46
72
  };
47
73
  for (const [resource, description] of RESOURCES) {
48
74
  paths[`/api/v1/${resource}`] = {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/routes/docs/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oktis-works/api",
3
- "version": "0.8.2",
3
+ "version": "0.10.0",
4
4
  "type": "module",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -18,11 +18,11 @@
18
18
  "clean": "rm -rf dist tsconfig.tsbuildinfo"
19
19
  },
20
20
  "dependencies": {
21
- "@oktis-works/core": "^0.5.12",
22
- "@oktis-works/auth": "^0.5.5",
23
- "@oktis-works/config": "^0.5.5",
24
- "@oktis-works/database": "^0.5.7",
25
- "@oktis-works/types": "^0.5.6",
21
+ "@oktis-works/core": "^0.5.14",
22
+ "@oktis-works/auth": "^0.6.0",
23
+ "@oktis-works/config": "^0.6.1",
24
+ "@oktis-works/database": "^0.6.0",
25
+ "@oktis-works/types": "^0.6.0",
26
26
  "hono": "4.13.12",
27
27
  "@hono/node-server": "1.8.0",
28
28
  "@oktis-works/validation": "^0.6.0"