@adonis-agora/authkit-server 0.65.3 → 0.66.1
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/build/host/views/account/apps.edge +2 -2
- package/build/host/views/account/confirm.edge +1 -1
- package/build/host/views/account/login.edge +2 -2
- package/build/host/views/account/mfa.edge +5 -5
- package/build/host/views/account/security.edge +17 -17
- package/build/host/views/account/tokens.edge +3 -3
- package/build/host/views/forgot.edge +1 -1
- package/build/host/views/login.edge +2 -2
- package/build/host/views/maintenance.edge +1 -1
- package/build/host/views/mfa-challenge.edge +2 -2
- package/build/host/views/otp-unlock.edge +1 -1
- package/build/host/views/partials/styles.edge +2 -1
- package/build/host/views/reset.edge +1 -1
- package/build/host/views/signup.edge +3 -3
- package/build/index.d.ts +2 -0
- package/build/index.js +1 -0
- package/build/src/accounts/account_store.d.ts +14 -3
- package/build/src/accounts/lucid_store/core.js +5 -4
- package/build/src/audit/audit_sink.d.ts +14 -3
- package/build/src/audit/lucid_audit_sink.js +5 -4
- package/build/src/commands/expire_scan_command.js +9 -8
- package/build/src/host/account_export_service.js +4 -3
- package/build/src/host/admin_api/admin_orgs_service.js +6 -5
- package/build/src/host/admin_api/admin_users_service.d.ts +3 -3
- package/build/src/host/admin_api/admin_users_service.js +8 -7
- package/build/src/host/admin_api/api_misc_controller.d.ts +6 -4
- package/build/src/host/admin_api/api_misc_controller.js +6 -5
- package/build/src/host/admin_api/api_users_controller.d.ts +6 -4
- package/build/src/host/admin_api/api_users_controller.js +6 -6
- package/build/src/host/admin_console/console_audit_controller.d.ts +6 -4
- package/build/src/host/admin_console/console_audit_controller.js +6 -5
- package/build/src/host/admin_console/console_overview_controller.js +4 -1
- package/build/src/host/admin_console/console_users_controller.d.ts +6 -4
- package/build/src/host/admin_console/console_users_controller.js +6 -6
- package/build/src/host/admin_stats_service.js +7 -5
- package/build/src/host/assets/webauthn.js +2 -2
- package/build/src/host/login_attempt.js +3 -2
- package/build/src/host/login_notify.js +3 -2
- package/build/src/host/session_context.js +3 -2
- package/build/src/host/ui-dist/assets/{index-Dp__4wlB.js → index-CkCQ94la.js} +3 -3
- package/build/src/host/ui-dist/index.html +1 -1
- package/build/src/pagination.d.ts +77 -0
- package/build/src/pagination.js +66 -0
- package/package.json +14 -14
|
@@ -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-
|
|
11
|
+
<script type="module" crossorigin src="/__AUTHKIT_BASE__/assets/index-CkCQ94la.js"></script>
|
|
12
12
|
<link rel="stylesheet" crossorigin href="/__AUTHKIT_BASE__/assets/index-DTSmD4RU.css">
|
|
13
13
|
</head>
|
|
14
14
|
<body>
|
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convenções de paginação por OFFSET compartilhadas por TODAS as listagens
|
|
3
|
+
* paginadas do authkit (contas, log de auditoria, console admin e Admin API).
|
|
4
|
+
*
|
|
5
|
+
* O shape `{ page, size }` espelha INTENCIONALMENTE o de `@adonis-agora/filter`
|
|
6
|
+
* (`FilterInput.page` / `FilterInput.size` → `ResolvedPagination { page, size }`),
|
|
7
|
+
* para que todos os pacotes `@adonis-agora/*` exponham a MESMA interface de
|
|
8
|
+
* paginação. O casamento é ESTRUTURAL de propósito: NÃO dependemos de
|
|
9
|
+
* `@adonis-agora/filter` — só seguimos o mesmo contrato.
|
|
10
|
+
*
|
|
11
|
+
* - `page` é 1-based; default {@link LIST_FIRST_PAGE}.
|
|
12
|
+
* - `size` é o tamanho da página; default {@link ADMIN_LIST_DEFAULT_SIZE} nas
|
|
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`.
|
|
15
|
+
*/
|
|
16
|
+
/** Primeira página. A paginação é 1-based, como em `@adonis-agora/filter`. */
|
|
17
|
+
export declare const LIST_FIRST_PAGE = 1;
|
|
18
|
+
/**
|
|
19
|
+
* Tamanho de página default das varreduras programáticas internas (ex.: contagem
|
|
20
|
+
* de admins e agregação de orgs, que paginam o `accountStore` até o fim).
|
|
21
|
+
*/
|
|
22
|
+
export declare const ADMIN_LIST_DEFAULT_SIZE = 100;
|
|
23
|
+
/**
|
|
24
|
+
* Tamanho de página default quando a request HTTP não manda `?size=`. Menor que
|
|
25
|
+
* {@link ADMIN_LIST_DEFAULT_SIZE} porque é o que a UI do console renderiza por página.
|
|
26
|
+
*/
|
|
27
|
+
export declare const ADMIN_LIST_HTTP_DEFAULT_SIZE = 20;
|
|
28
|
+
/**
|
|
29
|
+
* 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.
|
|
33
|
+
*
|
|
34
|
+
* NÃO é aplicado a chamadas programáticas de dentro da lib (ex.: o export
|
|
35
|
+
* LGPD/GDPR lê 1000 eventos de auditoria de uma vez): essas são confiáveis e
|
|
36
|
+
* usam {@link normalizeListSize}.
|
|
37
|
+
*/
|
|
38
|
+
export declare const ADMIN_LIST_MAX_SIZE = 200;
|
|
39
|
+
/** Normaliza um `page` arbitrário para um inteiro 1-based válido. */
|
|
40
|
+
export declare function resolveListPage(page: number | undefined): number;
|
|
41
|
+
/**
|
|
42
|
+
* Normaliza um `size` de caller CONFIÁVEL para um inteiro `>= 1`, caindo em
|
|
43
|
+
* `fallback` quando ausente/inválido. Sem teto — veja {@link clampListSize}.
|
|
44
|
+
*/
|
|
45
|
+
export declare function normalizeListSize(size: number | undefined, fallback?: number): number;
|
|
46
|
+
/**
|
|
47
|
+
* Idem {@link normalizeListSize}, mas limitado a {@link ADMIN_LIST_MAX_SIZE}.
|
|
48
|
+
* Use em TODA borda que recebe `size` de fora do processo.
|
|
49
|
+
*/
|
|
50
|
+
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
|
+
}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convenções de paginação por OFFSET compartilhadas por TODAS as listagens
|
|
3
|
+
* paginadas do authkit (contas, log de auditoria, console admin e Admin API).
|
|
4
|
+
*
|
|
5
|
+
* O shape `{ page, size }` espelha INTENCIONALMENTE o de `@adonis-agora/filter`
|
|
6
|
+
* (`FilterInput.page` / `FilterInput.size` → `ResolvedPagination { page, size }`),
|
|
7
|
+
* para que todos os pacotes `@adonis-agora/*` exponham a MESMA interface de
|
|
8
|
+
* paginação. O casamento é ESTRUTURAL de propósito: NÃO dependemos de
|
|
9
|
+
* `@adonis-agora/filter` — só seguimos o mesmo contrato.
|
|
10
|
+
*
|
|
11
|
+
* - `page` é 1-based; default {@link LIST_FIRST_PAGE}.
|
|
12
|
+
* - `size` é o tamanho da página; default {@link ADMIN_LIST_DEFAULT_SIZE} nas
|
|
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`.
|
|
15
|
+
*/
|
|
16
|
+
/** Primeira página. A paginação é 1-based, como em `@adonis-agora/filter`. */
|
|
17
|
+
export const LIST_FIRST_PAGE = 1;
|
|
18
|
+
/**
|
|
19
|
+
* Tamanho de página default das varreduras programáticas internas (ex.: contagem
|
|
20
|
+
* de admins e agregação de orgs, que paginam o `accountStore` até o fim).
|
|
21
|
+
*/
|
|
22
|
+
export const ADMIN_LIST_DEFAULT_SIZE = 100;
|
|
23
|
+
/**
|
|
24
|
+
* Tamanho de página default quando a request HTTP não manda `?size=`. Menor que
|
|
25
|
+
* {@link ADMIN_LIST_DEFAULT_SIZE} porque é o que a UI do console renderiza por página.
|
|
26
|
+
*/
|
|
27
|
+
export const ADMIN_LIST_HTTP_DEFAULT_SIZE = 20;
|
|
28
|
+
/**
|
|
29
|
+
* 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.
|
|
33
|
+
*
|
|
34
|
+
* NÃO é aplicado a chamadas programáticas de dentro da lib (ex.: o export
|
|
35
|
+
* LGPD/GDPR lê 1000 eventos de auditoria de uma vez): essas são confiáveis e
|
|
36
|
+
* usam {@link normalizeListSize}.
|
|
37
|
+
*/
|
|
38
|
+
export const ADMIN_LIST_MAX_SIZE = 200;
|
|
39
|
+
/** Normaliza um `page` arbitrário para um inteiro 1-based válido. */
|
|
40
|
+
export function resolveListPage(page) {
|
|
41
|
+
const n = Math.trunc(Number(page));
|
|
42
|
+
return Number.isFinite(n) && n >= LIST_FIRST_PAGE ? n : LIST_FIRST_PAGE;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Normaliza um `size` de caller CONFIÁVEL para um inteiro `>= 1`, caindo em
|
|
46
|
+
* `fallback` quando ausente/inválido. Sem teto — veja {@link clampListSize}.
|
|
47
|
+
*/
|
|
48
|
+
export function normalizeListSize(size, fallback = ADMIN_LIST_DEFAULT_SIZE) {
|
|
49
|
+
const n = Math.trunc(Number(size));
|
|
50
|
+
return Number.isFinite(n) && n >= 1 ? n : Math.max(1, fallback);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Idem {@link normalizeListSize}, mas limitado a {@link ADMIN_LIST_MAX_SIZE}.
|
|
54
|
+
* Use em TODA borda que recebe `size` de fora do processo.
|
|
55
|
+
*/
|
|
56
|
+
export function clampListSize(size, fallback = ADMIN_LIST_DEFAULT_SIZE) {
|
|
57
|
+
return Math.min(ADMIN_LIST_MAX_SIZE, normalizeListSize(size, fallback));
|
|
58
|
+
}
|
|
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
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@adonis-agora/authkit-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.66.1",
|
|
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",
|
|
@@ -103,42 +103,43 @@
|
|
|
103
103
|
},
|
|
104
104
|
"dependencies": {
|
|
105
105
|
"@adonis-agora/authkit-core": "0.8.0",
|
|
106
|
-
"@simplewebauthn/browser": "
|
|
107
|
-
"@simplewebauthn/server": "
|
|
108
|
-
"jose": "6.2.
|
|
106
|
+
"@simplewebauthn/browser": "14.0.0",
|
|
107
|
+
"@simplewebauthn/server": "14.0.1",
|
|
108
|
+
"jose": "6.2.12",
|
|
109
109
|
"koa": "3.2.1",
|
|
110
110
|
"koa-mount": "4.2.0",
|
|
111
|
-
"oidc-provider": "9.12.
|
|
111
|
+
"oidc-provider": "9.12.2",
|
|
112
112
|
"otplib": "13.5.0",
|
|
113
113
|
"qrcode": "1.5.4"
|
|
114
114
|
},
|
|
115
115
|
"devDependencies": {
|
|
116
|
-
"@adonis-agora/authkit-react": "0.
|
|
117
|
-
"@adonis-agora/durable": "0.
|
|
118
|
-
"@adonis-agora/telescope": "0.
|
|
116
|
+
"@adonis-agora/authkit-react": "0.21.0",
|
|
117
|
+
"@adonis-agora/durable": "0.39.0",
|
|
118
|
+
"@adonis-agora/telescope": "0.20.0",
|
|
119
119
|
"@adonisjs/ally": "6.3.0",
|
|
120
120
|
"@adonisjs/auth": "10.1.0",
|
|
121
121
|
"@adonisjs/core": "7.5.0",
|
|
122
122
|
"@adonisjs/drive": "4.0.0",
|
|
123
123
|
"@adonisjs/lucid": "22.4.2",
|
|
124
|
-
"@adonisjs/redis": "
|
|
124
|
+
"@adonisjs/redis": "11.0.0",
|
|
125
125
|
"@adonisjs/session": "8.1.0",
|
|
126
126
|
"@adonisjs/shield": "9.0.0",
|
|
127
127
|
"@adonisjs/tsconfig": "2.0.0",
|
|
128
128
|
"@japa/assert": "4.2.0",
|
|
129
129
|
"@japa/runner": "5.3.0",
|
|
130
130
|
"@poppinss/ts-exec": "1.4.4",
|
|
131
|
-
"@
|
|
131
|
+
"@tailwindcss/cli": "4.3.3",
|
|
132
|
+
"@tanstack/intent": "^0.4.0",
|
|
132
133
|
"@tanstack/react-query": "5.102.8",
|
|
133
134
|
"@types/better-sqlite3": "9.6.0",
|
|
134
135
|
"@types/ioredis-mock": "8.2.8",
|
|
135
136
|
"@types/koa": "3.0.3",
|
|
136
137
|
"@types/koa-mount": "4.0.5",
|
|
137
138
|
"@types/luxon": "3.7.5",
|
|
138
|
-
"@types/node": "26.
|
|
139
|
+
"@types/node": "26.5.0",
|
|
139
140
|
"@types/qrcode": "1.5.6",
|
|
140
141
|
"@types/react": "19.2.18",
|
|
141
|
-
"@types/react-dom": "19.2.
|
|
142
|
+
"@types/react-dom": "19.2.7",
|
|
142
143
|
"@vinejs/vine": "4.4.0",
|
|
143
144
|
"@vitejs/plugin-react": "6.1.1",
|
|
144
145
|
"better-sqlite3": "13.0.3",
|
|
@@ -150,9 +151,8 @@
|
|
|
150
151
|
"nuqs": "2.10.1",
|
|
151
152
|
"react": "19.2.8",
|
|
152
153
|
"react-dom": "19.2.8",
|
|
153
|
-
"react-error-boundary": "6.1.
|
|
154
|
+
"react-error-boundary": "6.1.5",
|
|
154
155
|
"recharts": "3.10.1",
|
|
155
|
-
"tailwindcss": "3.4.19",
|
|
156
156
|
"typescript": "7.0.2",
|
|
157
157
|
"vite": "8.2.2"
|
|
158
158
|
},
|