@adonis-agora/authkit-server 1.0.0-rc.15 → 1.0.0-rc.17

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 (46) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/build/index.d.ts +3 -3
  3. package/build/index.js +2 -1
  4. package/build/src/audit/audit_sink.d.ts +26 -19
  5. package/build/src/audit/lucid_audit_sink.js +99 -28
  6. package/build/src/commands/expire_scan_command.js +0 -2
  7. package/build/src/dev_tools/tools.js +10 -12
  8. package/build/src/host/account_export_service.js +0 -2
  9. package/build/src/host/admin_api/api_clients_controller.d.ts +6 -1
  10. package/build/src/host/admin_api/api_clients_controller.js +9 -5
  11. package/build/src/host/admin_api/api_misc_controller.d.ts +17 -7
  12. package/build/src/host/admin_api/api_misc_controller.js +10 -8
  13. package/build/src/host/admin_api/api_orgs_controller.d.ts +5 -1
  14. package/build/src/host/admin_api/api_orgs_controller.js +10 -8
  15. package/build/src/host/admin_api/api_users_controller.d.ts +15 -8
  16. package/build/src/host/admin_api/api_users_controller.js +11 -9
  17. package/build/src/host/admin_console/console_audit_controller.d.ts +14 -7
  18. package/build/src/host/admin_console/console_audit_controller.js +7 -8
  19. package/build/src/host/admin_console/console_clients_controller.d.ts +2 -1
  20. package/build/src/host/admin_console/console_clients_controller.js +5 -5
  21. package/build/src/host/admin_console/console_orgs_controller.d.ts +2 -1
  22. package/build/src/host/admin_console/console_orgs_controller.js +6 -2
  23. package/build/src/host/admin_console/console_overview_controller.d.ts +1 -1
  24. package/build/src/host/admin_console/console_overview_controller.js +4 -6
  25. package/build/src/host/admin_console/console_personal_agents_controller.d.ts +17 -20
  26. package/build/src/host/admin_console/console_personal_agents_controller.js +29 -8
  27. package/build/src/host/admin_console/console_sessions_controller.d.ts +11 -10
  28. package/build/src/host/admin_console/console_sessions_controller.js +41 -18
  29. package/build/src/host/admin_console/console_users_controller.d.ts +12 -8
  30. package/build/src/host/admin_console/console_users_controller.js +7 -12
  31. package/build/src/host/admin_stats_service.js +4 -4
  32. package/build/src/host/bearer_account.d.ts +8 -0
  33. package/build/src/host/bearer_account.js +11 -0
  34. package/build/src/host/list_api.d.ts +118 -0
  35. package/build/src/host/list_api.js +236 -0
  36. package/build/src/host/login_attempt.js +0 -2
  37. package/build/src/host/login_notify.js +1 -2
  38. package/build/src/host/session_context.js +1 -2
  39. package/build/src/host/ui-dist/assets/index-SteA4yAA.js +67 -0
  40. package/build/src/host/ui-dist/index.html +1 -1
  41. package/build/src/pagination.d.ts +5 -31
  42. package/build/src/pagination.js +5 -12
  43. package/build/src/provider/oidc_service.d.ts +8 -0
  44. package/build/src/provider/oidc_service.js +11 -0
  45. package/package.json +4 -3
  46. package/build/src/host/ui-dist/assets/index-Dq3dJVBv.js +0 -67
@@ -8,7 +8,7 @@
8
8
  <link rel="preconnect" href="https://fonts.googleapis.com">
9
9
  <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
10
10
  <link href="https://fonts.googleapis.com/css2?family=Sora:wght@400;500;600;700&family=JetBrains+Mono:ital,wght@0,400;0,500;0,600;1,400&display=swap" rel="stylesheet">
11
- <script type="module" crossorigin src="/__AUTHKIT_BASE__/assets/index-Dq3dJVBv.js"></script>
11
+ <script type="module" crossorigin src="/__AUTHKIT_BASE__/assets/index-SteA4yAA.js"></script>
12
12
  <link rel="stylesheet" crossorigin href="/__AUTHKIT_BASE__/assets/index-WNIyCEPA.css">
13
13
  </head>
14
14
  <body>
@@ -11,7 +11,9 @@
11
11
  * - `page` é 1-based; default {@link LIST_FIRST_PAGE}.
12
12
  * - `size` é o tamanho da página; default {@link ADMIN_LIST_DEFAULT_SIZE} nas
13
13
  * varreduras programáticas e {@link ADMIN_LIST_HTTP_DEFAULT_SIZE} na wire HTTP.
14
- * - Na wire HTTP os parâmetros são `?page=1&size=25`.
14
+ * - Na wire HTTP, a leitura dos parâmetros (`page`/`size`, `after`/`before` +
15
+ * `first`/`last`, `filter[...]`, `sort`) e o envelope de resposta são os de
16
+ * `@adonis-agora/filter` — ver `src/host/list_api.ts`.
15
17
  */
16
18
  /** Primeira página. A paginação é 1-based, como em `@adonis-agora/filter`. */
17
19
  export declare const LIST_FIRST_PAGE = 1;
@@ -27,9 +29,8 @@ export declare const ADMIN_LIST_DEFAULT_SIZE = 100;
27
29
  export declare const ADMIN_LIST_HTTP_DEFAULT_SIZE = 20;
28
30
  /**
29
31
  * Teto de `size` aceito de um caller NÃO CONFIÁVEL — ou seja, de query params
30
- * HTTP ({@link parseListSize}). Antes não havia teto nenhum no console admin
31
- * nem na Admin API além de um `Math.min` solto por controller; agora é um só
32
- * número, para que um `?size=100000` não vire um scan de tabela inteira.
32
+ * HTTP (`src/host/list_api.ts`), para que um `?size=100000` não vire um scan de
33
+ * tabela inteira.
33
34
  *
34
35
  * NÃO é aplicado a chamadas programáticas de dentro da lib (ex.: o export
35
36
  * LGPD/GDPR lê 1000 eventos de auditoria de uma vez): essas são confiáveis e
@@ -48,30 +49,3 @@ export declare function normalizeListSize(size: number | undefined, fallback?: n
48
49
  * Use em TODA borda que recebe `size` de fora do processo.
49
50
  */
50
51
  export declare function clampListSize(size: number | undefined, fallback?: number): number;
51
- /** {@link resolveListPage} a partir do valor cru de um query param. */
52
- export declare function parseListPage(raw: unknown): number;
53
- /** {@link clampListSize} a partir do valor cru de um query param. */
54
- export declare function parseListSize(raw: unknown, fallback?: number): number;
55
- /**
56
- * Envelope de METADADOS de uma listagem paginada — a chave `meta` de toda
57
- * resposta paginada do authkit (`{ meta, data }`).
58
- *
59
- * O nome `meta` e a co-locação de `{ page, size }` dentro dele são a convenção
60
- * do `.paginate()` do Lucid (`{ meta, data }`) — que é onde o caminho por
61
- * offset de `@adonis-agora/filter` desemboca — e por isso a convenção adotada
62
- * por TODO o ecossistema `@adonis-agora/*`. Antes o authkit achatava
63
- * `total`/`page`/`size` ao lado de `data`, sem envelope.
64
- */
65
- export interface ListMeta {
66
- /** Página devolvida (1-based). */
67
- page: number;
68
- /** Tamanho de página efetivamente aplicado (já normalizado/limitado). */
69
- size: number;
70
- /** Total absoluto de itens que casam com o filtro, através de todas as páginas. */
71
- total: number;
72
- }
73
- /** Resposta paginada padrão: `{ meta, data }`, na ordem do `.paginate()` do Lucid. */
74
- export interface PaginatedResponse<T> {
75
- meta: ListMeta;
76
- data: T[];
77
- }
@@ -11,7 +11,9 @@
11
11
  * - `page` é 1-based; default {@link LIST_FIRST_PAGE}.
12
12
  * - `size` é o tamanho da página; default {@link ADMIN_LIST_DEFAULT_SIZE} nas
13
13
  * varreduras programáticas e {@link ADMIN_LIST_HTTP_DEFAULT_SIZE} na wire HTTP.
14
- * - Na wire HTTP os parâmetros são `?page=1&size=25`.
14
+ * - Na wire HTTP, a leitura dos parâmetros (`page`/`size`, `after`/`before` +
15
+ * `first`/`last`, `filter[...]`, `sort`) e o envelope de resposta são os de
16
+ * `@adonis-agora/filter` — ver `src/host/list_api.ts`.
15
17
  */
16
18
  /** Primeira página. A paginação é 1-based, como em `@adonis-agora/filter`. */
17
19
  export const LIST_FIRST_PAGE = 1;
@@ -27,9 +29,8 @@ export const ADMIN_LIST_DEFAULT_SIZE = 100;
27
29
  export const ADMIN_LIST_HTTP_DEFAULT_SIZE = 20;
28
30
  /**
29
31
  * Teto de `size` aceito de um caller NÃO CONFIÁVEL — ou seja, de query params
30
- * HTTP ({@link parseListSize}). Antes não havia teto nenhum no console admin
31
- * nem na Admin API além de um `Math.min` solto por controller; agora é um só
32
- * número, para que um `?size=100000` não vire um scan de tabela inteira.
32
+ * HTTP (`src/host/list_api.ts`), para que um `?size=100000` não vire um scan de
33
+ * tabela inteira.
33
34
  *
34
35
  * NÃO é aplicado a chamadas programáticas de dentro da lib (ex.: o export
35
36
  * LGPD/GDPR lê 1000 eventos de auditoria de uma vez): essas são confiáveis e
@@ -56,11 +57,3 @@ export function normalizeListSize(size, fallback = ADMIN_LIST_DEFAULT_SIZE) {
56
57
  export function clampListSize(size, fallback = ADMIN_LIST_DEFAULT_SIZE) {
57
58
  return Math.min(ADMIN_LIST_MAX_SIZE, normalizeListSize(size, fallback));
58
59
  }
59
- /** {@link resolveListPage} a partir do valor cru de um query param. */
60
- export function parseListPage(raw) {
61
- return resolveListPage(Number.parseInt(String(raw ?? ''), 10));
62
- }
63
- /** {@link clampListSize} a partir do valor cru de um query param. */
64
- export function parseListSize(raw, fallback = ADMIN_LIST_HTTP_DEFAULT_SIZE) {
65
- return clampListSize(Number.parseInt(String(raw ?? ''), 10), fallback);
66
- }
@@ -104,4 +104,12 @@ export declare class OidcService {
104
104
  * é um detalhe interno acessível via o helper `weak_cache` do próprio provider.
105
105
  */
106
106
  evictDynamicClientCache(): Promise<void>;
107
+ /**
108
+ * Vincula a conta de um access token que você verificou FORA do guard bearer do
109
+ * AuthKit (ex.: o endpoint MCP do `@adonis-agora/agent`) a esta request:
110
+ * `getAccountId(ctx)` e `realAccountId(ctx)` passam a devolver `accountId`, e
111
+ * `impersonationState(ctx)` responde "sem impersonation". Uma sessão de console
112
+ * na mesma request continua ganhando.
113
+ */
114
+ bindBearerAccount(ctx: object, accountId: string): void;
107
115
  }
@@ -4,6 +4,7 @@ import Koa from 'koa';
4
4
  import mount from 'koa-mount';
5
5
  import { ProviderIdentities } from '../accounts/provider_identities.js';
6
6
  import { normalizeActiveOrg, readActiveOrgFromKoaCtx, verifyActiveOrgMembership, } from '../host/active_org_cookie.js';
7
+ import { bindBearerAccount } from '../host/bearer_account.js';
7
8
  import { isFirstPartyClient } from '../host/branding.js';
8
9
  import { listKeyInfos, signingKeyAgeDays, toPublicJwks, } from '../keys/keystore.js';
9
10
  import { wireProviderEvents } from '../observability/wire_provider_events.js';
@@ -338,4 +339,14 @@ export class OidcService {
338
339
  // imediata da entrada órfã. Best-effort — não propaga erro pro caminho da request.
339
340
  }
340
341
  }
342
+ /**
343
+ * Vincula a conta de um access token que você verificou FORA do guard bearer do
344
+ * AuthKit (ex.: o endpoint MCP do `@adonis-agora/agent`) a esta request:
345
+ * `getAccountId(ctx)` e `realAccountId(ctx)` passam a devolver `accountId`, e
346
+ * `impersonationState(ctx)` responde "sem impersonation". Uma sessão de console
347
+ * na mesma request continua ganhando.
348
+ */
349
+ bindBearerAccount(ctx, accountId) {
350
+ bindBearerAccount(ctx, accountId);
351
+ }
341
352
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@adonis-agora/authkit-server",
3
- "version": "1.0.0-rc.15",
3
+ "version": "1.0.0-rc.17",
4
4
  "description": "AdonisJS OIDC/OAuth2 provider (Identity Provider) toolkit: ejectable auth server with sessions, rate-limiting, MFA/TOTP, audit log, federated logout and OpenTelemetry metrics.",
5
5
  "license": "MIT",
6
6
  "author": "dudousxd",
@@ -109,6 +109,7 @@
109
109
  },
110
110
  "dependencies": {
111
111
  "@adonis-agora/authkit-core": "1.0.0-rc.2",
112
+ "@adonis-agora/filter": "^1.0.0-rc.5",
112
113
  "@simplewebauthn/browser": "14.0.0",
113
114
  "@simplewebauthn/server": "14.1.0",
114
115
  "jose": "6.2.16",
@@ -119,7 +120,7 @@
119
120
  "qrcode": "1.5.4"
120
121
  },
121
122
  "devDependencies": {
122
- "@adonis-agora/authkit-react": "1.0.0-rc.5",
123
+ "@adonis-agora/authkit-react": "1.0.0-rc.6",
123
124
  "@adonis-agora/durable": "0.60.0",
124
125
  "@adonis-agora/telescope": "0.27.1",
125
126
  "@adonisjs/ally": "6.3.2",
@@ -165,7 +166,7 @@
165
166
  "tempura": "0.4.1",
166
167
  "testcontainers": "12.2.1",
167
168
  "typescript": "7.0.2",
168
- "vite": "8.3.6"
169
+ "vite": "8.3.7"
169
170
  },
170
171
  "scripts": {
171
172
  "build": "node scripts/build_host_css.mjs && node scripts/build_webauthn.mjs && node scripts/build_ui.mjs && node -e \"const fs=require('node:fs');for(const d of ['build/stubs','build/host/views'])fs.rmSync(d,{recursive:true,force:true})\" && tsc && node -e \"require('node:fs').cpSync('src/host/assets','build/src/host/assets',{recursive:true})\" && node -e \"require('node:fs').cpSync('stubs','build/stubs',{recursive:true,filter:(s)=>!s.endsWith('.ts')})\" && node -e \"const fs=require('node:fs');if(fs.existsSync('assets'))fs.cpSync('assets','build/assets',{recursive:true})\" && node -e \"require('node:fs').cpSync('src/host/views','build/host/views',{recursive:true})\" && node -e \"const fs=require('node:fs');fs.mkdirSync('build/host/ui',{recursive:true});fs.readdirSync('src/host/ui').filter(f=>f.endsWith('.html')).forEach(f=>fs.copyFileSync('src/host/ui/'+f,'build/host/ui/'+f))\" && node -e \"require('node:fs').copyFileSync('commands/commands.json','build/commands/commands.json')\" && node -e \"const fs=require('node:fs');fs.mkdirSync('build/src/password',{recursive:true});fs.copyFileSync('src/password/common_passwords.txt','build/src/password/common_passwords.txt')\"",