@hed-hog/core 0.0.368 → 0.0.371
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/LICENSE.md +21 -0
- package/README.md +2 -0
- package/dist/ai/ai.service.d.ts.map +1 -1
- package/dist/ai/ai.service.js +10 -7
- package/dist/ai/ai.service.js.map +1 -1
- package/dist/app-command/app-command.module.d.ts +3 -0
- package/dist/app-command/app-command.module.d.ts.map +1 -0
- package/dist/app-command/app-command.module.js +22 -0
- package/dist/app-command/app-command.module.js.map +1 -0
- package/dist/app-command/app-command.registry.d.ts +22 -0
- package/dist/app-command/app-command.registry.d.ts.map +1 -0
- package/dist/{webhook-integration/webhook-command.registry.js → app-command/app-command.registry.js} +6 -6
- package/dist/app-command/app-command.registry.js.map +1 -0
- package/dist/auth/auth.controller.d.ts +2 -2
- package/dist/auth/auth.controller.d.ts.map +1 -1
- package/dist/auth/auth.controller.js +20 -7
- package/dist/auth/auth.controller.js.map +1 -1
- package/dist/auth/auth.service.d.ts +3 -3
- package/dist/auth/auth.service.d.ts.map +1 -1
- package/dist/auth/auth.service.js +10 -36
- package/dist/auth/auth.service.js.map +1 -1
- package/dist/auth/dto/forget.dto.d.ts +1 -0
- package/dist/auth/dto/forget.dto.d.ts.map +1 -1
- package/dist/auth/dto/forget.dto.js +5 -0
- package/dist/auth/dto/forget.dto.js.map +1 -1
- package/dist/auth/guards/auth.guard.d.ts.map +1 -1
- package/dist/auth/guards/auth.guard.js +4 -1
- package/dist/auth/guards/auth.guard.js.map +1 -1
- package/dist/challenge/challenge.service.d.ts +8 -7
- package/dist/challenge/challenge.service.d.ts.map +1 -1
- package/dist/challenge/challenge.service.js +27 -19
- package/dist/challenge/challenge.service.js.map +1 -1
- package/dist/file/dto/upload.dto.d.ts +3 -0
- package/dist/file/dto/upload.dto.d.ts.map +1 -1
- package/dist/file/dto/upload.dto.js +22 -0
- package/dist/file/dto/upload.dto.js.map +1 -1
- package/dist/file/file.controller.d.ts +2 -1
- package/dist/file/file.controller.d.ts.map +1 -1
- package/dist/file/file.controller.js +29 -16
- package/dist/file/file.controller.js.map +1 -1
- package/dist/file/file.service.d.ts +51 -1
- package/dist/file/file.service.d.ts.map +1 -1
- package/dist/file/file.service.js +250 -18
- package/dist/file/file.service.js.map +1 -1
- package/dist/file/image-optimization.service.d.ts +17 -4
- package/dist/file/image-optimization.service.d.ts.map +1 -1
- package/dist/file/image-optimization.service.js +101 -46
- package/dist/file/image-optimization.service.js.map +1 -1
- package/dist/file/provider/s3.provider.d.ts.map +1 -1
- package/dist/file/provider/s3.provider.js +15 -7
- package/dist/file/provider/s3.provider.js.map +1 -1
- package/dist/file/provider/spaces.provider.d.ts.map +1 -1
- package/dist/file/provider/spaces.provider.js +18 -8
- package/dist/file/provider/spaces.provider.js.map +1 -1
- package/dist/index.d.ts +4 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -1
- package/dist/index.js.map +1 -1
- package/dist/integration/services/event-subscriber.registry.d.ts +5 -0
- package/dist/integration/services/event-subscriber.registry.d.ts.map +1 -1
- package/dist/integration/services/event-subscriber.registry.js +15 -0
- package/dist/integration/services/event-subscriber.registry.js.map +1 -1
- package/dist/integration/services/outbox.processor.d.ts.map +1 -1
- package/dist/integration/services/outbox.processor.js +2 -4
- package/dist/integration/services/outbox.processor.js.map +1 -1
- package/dist/integration/services/outbox.service.d.ts +4 -2
- package/dist/integration/services/outbox.service.d.ts.map +1 -1
- package/dist/integration/services/outbox.service.js +26 -15
- package/dist/integration/services/outbox.service.js.map +1 -1
- package/dist/integration-profile/integration-credential-crypto.service.d.ts +43 -0
- package/dist/integration-profile/integration-credential-crypto.service.d.ts.map +1 -0
- package/dist/integration-profile/integration-credential-crypto.service.js +142 -0
- package/dist/integration-profile/integration-credential-crypto.service.js.map +1 -0
- package/dist/integration-profile/integration-profile.controller.d.ts +6 -7
- package/dist/integration-profile/integration-profile.controller.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.controller.js +4 -3
- package/dist/integration-profile/integration-profile.controller.js.map +1 -1
- package/dist/integration-profile/integration-profile.module.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.module.js +5 -2
- package/dist/integration-profile/integration-profile.module.js.map +1 -1
- package/dist/integration-profile/integration-profile.secrets.d.ts +16 -0
- package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -0
- package/dist/integration-profile/integration-profile.secrets.js +56 -0
- package/dist/integration-profile/integration-profile.secrets.js.map +1 -0
- package/dist/integration-profile/integration-profile.service.d.ts +125 -8
- package/dist/integration-profile/integration-profile.service.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.service.js +257 -68
- package/dist/integration-profile/integration-profile.service.js.map +1 -1
- package/dist/integration-profile/integration-profile.utils.d.ts +17 -0
- package/dist/integration-profile/integration-profile.utils.d.ts.map +1 -1
- package/dist/integration-profile/integration-profile.utils.js +31 -0
- package/dist/integration-profile/integration-profile.utils.js.map +1 -1
- package/dist/language/en.json +178 -0
- package/dist/language/pt.json +178 -0
- package/dist/mail/mail.controller.d.ts.map +1 -1
- package/dist/mail/mail.controller.js +5 -28
- package/dist/mail/mail.controller.js.map +1 -1
- package/dist/mail/mail.module.js +18 -18
- package/dist/mail/mail.module.js.map +1 -1
- package/dist/mail/mail.service.d.ts +13 -2
- package/dist/mail/mail.service.d.ts.map +1 -1
- package/dist/mail/mail.service.js +25 -15
- package/dist/mail/mail.service.js.map +1 -1
- package/dist/mcp-chat/mcp-chat.service.js +6 -5
- package/dist/mcp-chat/mcp-chat.service.js.map +1 -1
- package/dist/oauth/providers/facebook.provider.js +5 -5
- package/dist/oauth/providers/facebook.provider.js.map +1 -1
- package/dist/oauth/providers/github.provider.js +5 -5
- package/dist/oauth/providers/github.provider.js.map +1 -1
- package/dist/oauth/providers/google.provider.js +5 -5
- package/dist/oauth/providers/google.provider.js.map +1 -1
- package/dist/oauth/providers/microsoft-entra-id.provider.js +5 -5
- package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
- package/dist/oauth/providers/microsoft.provider.js +5 -5
- package/dist/oauth/providers/microsoft.provider.js.map +1 -1
- package/dist/pdf/pdf.service.d.ts +4 -0
- package/dist/pdf/pdf.service.d.ts.map +1 -1
- package/dist/pdf/pdf.service.js +16 -9
- package/dist/pdf/pdf.service.js.map +1 -1
- package/dist/profile/profile.controller.d.ts +7 -7
- package/dist/profile/profile.controller.d.ts.map +1 -1
- package/dist/profile/profile.controller.js +28 -21
- package/dist/profile/profile.controller.js.map +1 -1
- package/dist/profile/profile.service.d.ts +7 -7
- package/dist/profile/profile.service.d.ts.map +1 -1
- package/dist/profile/profile.service.js +21 -25
- package/dist/profile/profile.service.js.map +1 -1
- package/dist/setting/setting.service.d.ts +1 -0
- package/dist/setting/setting.service.d.ts.map +1 -1
- package/dist/setting/setting.service.js +15 -2
- package/dist/setting/setting.service.js.map +1 -1
- package/dist/token/token.service.d.ts.map +1 -1
- package/dist/token/token.service.js +2 -1
- package/dist/token/token.service.js.map +1 -1
- package/dist/user/user.controller.d.ts +9 -0
- package/dist/user/user.controller.d.ts.map +1 -1
- package/dist/user/user.controller.js +13 -0
- package/dist/user/user.controller.js.map +1 -1
- package/dist/user/user.service.d.ts +7 -0
- package/dist/user/user.service.d.ts.map +1 -1
- package/dist/user/user.service.js +19 -0
- package/dist/user/user.service.js.map +1 -1
- package/dist/utils/webauthn-origin.d.ts +11 -0
- package/dist/utils/webauthn-origin.d.ts.map +1 -0
- package/dist/utils/webauthn-origin.js +37 -0
- package/dist/utils/webauthn-origin.js.map +1 -0
- package/dist/webhook-integration/webhook-integration.controller.d.ts +13 -0
- package/dist/webhook-integration/webhook-integration.controller.d.ts.map +1 -1
- package/dist/webhook-integration/webhook-integration.controller.js +29 -0
- package/dist/webhook-integration/webhook-integration.controller.js.map +1 -1
- package/dist/webhook-integration/webhook-integration.module.js +3 -3
- package/dist/webhook-integration/webhook-integration.module.js.map +1 -1
- package/dist/webhook-integration/webhook-integration.service.d.ts +18 -2
- package/dist/webhook-integration/webhook-integration.service.d.ts.map +1 -1
- package/dist/webhook-integration/webhook-integration.service.js +110 -6
- package/dist/webhook-integration/webhook-integration.service.js.map +1 -1
- package/hedhog/data/integration_event_catalog.yaml +118 -118
- package/hedhog/data/integration_provider.yaml +9 -0
- package/hedhog/data/integration_type.yaml +6 -0
- package/hedhog/data/menu.yaml +6 -0
- package/hedhog/data/role.yaml +7 -0
- package/hedhog/data/route.yaml +192 -207
- package/hedhog/data/setting_group.yaml +119 -13
- package/hedhog/frontend/app/access-log/page.tsx.ejs +35 -3
- package/hedhog/frontend/app/account/components/active-sessions.tsx.ejs +36 -3
- package/hedhog/frontend/app/account/components/mcp-tokens.tsx.ejs +39 -4
- package/hedhog/frontend/app/account/components/tokens.tsx.ejs +39 -4
- package/hedhog/frontend/app/ai_agent/page.tsx.ejs +35 -2
- package/hedhog/frontend/app/configurations/[slug]/components/byte-size-input.tsx.ejs +160 -0
- package/hedhog/frontend/app/configurations/[slug]/components/duration-input.tsx.ejs +157 -0
- package/hedhog/frontend/app/configurations/[slug]/components/setting-field.tsx.ejs +244 -63
- package/hedhog/frontend/app/dashboard/[slug]/dashboard-content.tsx.ejs +33 -1
- package/hedhog/frontend/app/dashboard/management/tabs/component-roles-tab.tsx.ejs +35 -3
- package/hedhog/frontend/app/dashboard/management/tabs/components-tab.tsx.ejs +36 -4
- package/hedhog/frontend/app/dashboard/management/tabs/dashboard-roles-tab.tsx.ejs +35 -3
- package/hedhog/frontend/app/dashboard/management/tabs/dashboards-tab.tsx.ejs +36 -4
- package/hedhog/frontend/app/dashboard/management/tabs/items-tab.tsx.ejs +35 -3
- package/hedhog/frontend/app/integration/profiles/page.tsx.ejs +141 -29
- package/hedhog/frontend/app/integrations-webhooks/page.tsx.ejs +118 -11
- package/hedhog/frontend/app/mail/log/page.tsx.ejs +37 -4
- package/hedhog/frontend/app/menu/page.tsx.ejs +34 -2
- package/hedhog/frontend/app/preferences/page.tsx.ejs +77 -0
- package/hedhog/frontend/app/roles/menus.tsx.ejs +35 -3
- package/hedhog/frontend/app/roles/page.tsx.ejs +34 -2
- package/hedhog/frontend/app/roles/routes.tsx.ejs +36 -4
- package/hedhog/frontend/app/roles/users.tsx.ejs +36 -4
- package/hedhog/frontend/app/routes/page.tsx.ejs +34 -2
- package/hedhog/frontend/app/setting-list/page.tsx.ejs +34 -2
- package/hedhog/frontend/app/users/page.tsx.ejs +51 -21
- package/hedhog/frontend/messages/en.json +69 -4
- package/hedhog/frontend/messages/pt.json +69 -4
- package/hedhog/table/event_webhook.yaml +55 -55
- package/hedhog/table/event_webhook_delivery_log.yaml +66 -66
- package/hedhog/table/event_webhook_event.yaml +26 -26
- package/hedhog/table/integration_event_catalog.yaml +41 -41
- package/hedhog/table/mcp_conversation.yaml +12 -12
- package/hedhog/table/mcp_conversation_message.yaml +23 -23
- package/hedhog/table/mcp_tool_call_log.yaml +22 -22
- package/hedhog/table/route.yaml +33 -33
- package/hedhog/table/setting.yaml +2 -0
- package/hedhog/table/webhook_call_log.yaml +3 -0
- package/hedhog/table/webhook_integration.yaml +43 -43
- package/package.json +9 -4
- package/src/ai/ai.service.ts +9 -6
- package/src/app-command/app-command.module.ts +9 -0
- package/src/{webhook-integration/webhook-command.registry.ts → app-command/app-command.registry.ts} +9 -9
- package/src/auth/auth.controller.ts +20 -4
- package/src/auth/auth.service.ts +10 -36
- package/src/auth/dto/forget.dto.ts +5 -1
- package/src/auth/guards/auth.guard.ts +4 -1
- package/src/challenge/challenge.service.ts +30 -19
- package/src/file/dto/upload.dto.ts +25 -1
- package/src/file/file.controller.ts +31 -18
- package/src/file/file.service.ts +341 -16
- package/src/file/image-optimization.service.ts +111 -46
- package/src/file/provider/s3.provider.ts +16 -7
- package/src/file/provider/spaces.provider.ts +15 -5
- package/src/index.ts +4 -1
- package/src/integration/services/event-subscriber.registry.ts +15 -0
- package/src/integration/services/outbox.processor.ts +2 -5
- package/src/integration/services/outbox.service.ts +35 -17
- package/src/integration/types/event.types.ts +4 -4
- package/src/integration-profile/integration-credential-crypto.service.ts +146 -0
- package/src/integration-profile/integration-profile.controller.ts +2 -0
- package/src/integration-profile/integration-profile.module.ts +5 -2
- package/src/integration-profile/integration-profile.secrets.ts +51 -0
- package/src/integration-profile/integration-profile.service.ts +335 -54
- package/src/integration-profile/integration-profile.utils.ts +56 -0
- package/src/language/en.json +5 -1
- package/src/language/pt.json +5 -1
- package/src/mail/mail.controller.ts +5 -29
- package/src/mail/mail.module.ts +5 -5
- package/src/mail/mail.service.ts +37 -13
- package/src/mcp/decorators/mcp-tool.decorator.ts +7 -7
- package/src/mcp/guards/mcp-permission.guard.ts +51 -51
- package/src/mcp/interfaces/mcp-tool-definition.interface.ts +6 -6
- package/src/mcp/mcp-server.service.ts +87 -87
- package/src/mcp/types/mcp-context.type.ts +6 -6
- package/src/mcp-chat/dto/create-conversation.dto.ts +7 -7
- package/src/mcp-chat/dto/send-message.dto.ts +7 -7
- package/src/mcp-chat/mcp-chat.service.ts +5 -5
- package/src/notification/events/notification-stale-progress-check.event.ts +5 -5
- package/src/oauth/oauth-callback-coordinator.service.spec.ts +159 -0
- package/src/oauth/providers/facebook.provider.ts +3 -3
- package/src/oauth/providers/github.provider.ts +3 -3
- package/src/oauth/providers/google.provider.ts +3 -3
- package/src/oauth/providers/microsoft-entra-id.provider.ts +3 -3
- package/src/oauth/providers/microsoft.provider.ts +3 -3
- package/src/pdf/pdf.service.ts +19 -6
- package/src/profile/profile.controller.ts +21 -14
- package/src/profile/profile.service.ts +23 -20
- package/src/route/dto/create.dto.ts +32 -32
- package/src/route/dto/update.dto.ts +31 -31
- package/src/security/security.service.spec.ts +222 -0
- package/src/setting/setting.service.ts +15 -2
- package/src/token/token.service.ts +2 -1
- package/src/user/user.controller.ts +26 -16
- package/src/user/user.service.ts +25 -0
- package/src/utils/webauthn-origin.ts +38 -0
- package/src/webhook-integration/integration-event-catalog.controller.ts +50 -50
- package/src/webhook-integration/integration-event-catalog.service.ts +117 -117
- package/src/webhook-integration/webhook-integration.controller.ts +23 -0
- package/src/webhook-integration/webhook-integration.module.ts +3 -3
- package/src/webhook-integration/webhook-integration.service.ts +115 -5
- package/dist/webhook-integration/webhook-command.registry.d.ts +0 -22
- package/dist/webhook-integration/webhook-command.registry.d.ts.map +0 -1
- package/dist/webhook-integration/webhook-command.registry.js.map +0 -1
- package/src/menu/menu.service.spec.ts +0 -247
- package/src/route/route.service.spec.ts +0 -300
- package/src/screen/screen.service.spec.ts +0 -298
- package/src/user/user.service.spec.ts +0 -294
|
@@ -62,6 +62,20 @@
|
|
|
62
62
|
subgroup_id:
|
|
63
63
|
where:
|
|
64
64
|
slug: general-system
|
|
65
|
+
- slug: app-urls
|
|
66
|
+
type: array
|
|
67
|
+
component: input-tags
|
|
68
|
+
name:
|
|
69
|
+
en: App URLs
|
|
70
|
+
pt: URLs dos Aplicativos
|
|
71
|
+
description:
|
|
72
|
+
en: 'Base URLs for specific apps, formatted as "app=https://example.com" (one per tag). Used in transactional email links (e.g. password reset) when the request comes from that app, falling back to System URL otherwise.'
|
|
73
|
+
pt: 'URLs base de apps específicos, no formato "app=https://exemplo.com" (uma por tag). Usadas em links de e-mails transacionais (ex.: redefinição de senha) quando a solicitação vem desse app, usando a URL do Sistema como alternativa.'
|
|
74
|
+
value: '["training=http://localhost:3001"]'
|
|
75
|
+
user_override: false
|
|
76
|
+
subgroup_id:
|
|
77
|
+
where:
|
|
78
|
+
slug: general-system
|
|
65
79
|
- slug: installed
|
|
66
80
|
type: boolean
|
|
67
81
|
component: switch
|
|
@@ -229,7 +243,7 @@
|
|
|
229
243
|
where:
|
|
230
244
|
slug: mail-configuration
|
|
231
245
|
- slug: mail-integration-profile-id
|
|
232
|
-
type:
|
|
246
|
+
type: string
|
|
233
247
|
component: entity-picker
|
|
234
248
|
name:
|
|
235
249
|
en: Mail Profile
|
|
@@ -237,13 +251,13 @@
|
|
|
237
251
|
description:
|
|
238
252
|
en: Select the mail profile to use for sending system notifications
|
|
239
253
|
pt: Selecione o perfil de email a usar para enviar notificações do sistema
|
|
240
|
-
value: '
|
|
254
|
+
value: ''
|
|
241
255
|
user_override: false
|
|
242
256
|
subgroup_id:
|
|
243
257
|
where:
|
|
244
258
|
slug: mail-configuration
|
|
245
259
|
- slug: ai-openai-profile-id
|
|
246
|
-
type:
|
|
260
|
+
type: string
|
|
247
261
|
component: entity-picker
|
|
248
262
|
name:
|
|
249
263
|
en: OpenAI Profile
|
|
@@ -257,7 +271,7 @@
|
|
|
257
271
|
where:
|
|
258
272
|
slug: ai-configuration
|
|
259
273
|
- slug: ai-gemini-profile-id
|
|
260
|
-
type:
|
|
274
|
+
type: string
|
|
261
275
|
component: entity-picker
|
|
262
276
|
name:
|
|
263
277
|
en: Gemini Profile
|
|
@@ -285,7 +299,7 @@
|
|
|
285
299
|
where:
|
|
286
300
|
slug: mcp-configuration
|
|
287
301
|
- slug: mcp-ai-profile-id
|
|
288
|
-
type:
|
|
302
|
+
type: string
|
|
289
303
|
component: entity-picker
|
|
290
304
|
name:
|
|
291
305
|
en: AI Profile
|
|
@@ -712,7 +726,7 @@
|
|
|
712
726
|
where:
|
|
713
727
|
slug: oauth-general
|
|
714
728
|
- slug: oauth-google-profile-id
|
|
715
|
-
type:
|
|
729
|
+
type: string
|
|
716
730
|
component: entity-picker
|
|
717
731
|
name:
|
|
718
732
|
en: Google OAuth Profile
|
|
@@ -762,7 +776,7 @@
|
|
|
762
776
|
where:
|
|
763
777
|
slug: google
|
|
764
778
|
- slug: oauth-facebook-profile-id
|
|
765
|
-
type:
|
|
779
|
+
type: string
|
|
766
780
|
component: entity-picker
|
|
767
781
|
name:
|
|
768
782
|
en: Facebook OAuth Profile
|
|
@@ -816,7 +830,7 @@
|
|
|
816
830
|
where:
|
|
817
831
|
slug: facebook
|
|
818
832
|
- slug: oauth-github-profile-id
|
|
819
|
-
type:
|
|
833
|
+
type: string
|
|
820
834
|
component: entity-picker
|
|
821
835
|
name:
|
|
822
836
|
en: GitHub OAuth Profile
|
|
@@ -864,7 +878,7 @@
|
|
|
864
878
|
where:
|
|
865
879
|
slug: github
|
|
866
880
|
- slug: oauth-microsoft-profile-id
|
|
867
|
-
type:
|
|
881
|
+
type: string
|
|
868
882
|
component: entity-picker
|
|
869
883
|
name:
|
|
870
884
|
en: Microsoft OAuth Profile
|
|
@@ -918,7 +932,7 @@
|
|
|
918
932
|
where:
|
|
919
933
|
slug: microsoft
|
|
920
934
|
- slug: oauth-microsoft-entra-id-profile-id
|
|
921
|
-
type:
|
|
935
|
+
type: string
|
|
922
936
|
component: entity-picker
|
|
923
937
|
name:
|
|
924
938
|
en: Microsoft Entra ID OAuth Profile
|
|
@@ -1519,6 +1533,56 @@
|
|
|
1519
1533
|
subgroup_id:
|
|
1520
1534
|
where:
|
|
1521
1535
|
slug: theme-customization
|
|
1536
|
+
- slug: theme-spacing
|
|
1537
|
+
type: string
|
|
1538
|
+
name:
|
|
1539
|
+
en: Spacing Density
|
|
1540
|
+
pt: Densidade de Espaçamento
|
|
1541
|
+
description:
|
|
1542
|
+
en: Global spacing scale applied to paddings, gaps and component sizes
|
|
1543
|
+
pt: Escala de espaçamento global aplicada a paddings, gaps e tamanhos de componentes
|
|
1544
|
+
value: comfortable
|
|
1545
|
+
component: combobox
|
|
1546
|
+
user_override: true
|
|
1547
|
+
relations:
|
|
1548
|
+
setting_list:
|
|
1549
|
+
- value: compact
|
|
1550
|
+
order: 0
|
|
1551
|
+
- value: comfortable
|
|
1552
|
+
order: 1
|
|
1553
|
+
- value: spacious
|
|
1554
|
+
order: 2
|
|
1555
|
+
subgroup_id:
|
|
1556
|
+
where:
|
|
1557
|
+
slug: theme-customization
|
|
1558
|
+
- slug: theme-zoom
|
|
1559
|
+
type: string
|
|
1560
|
+
name:
|
|
1561
|
+
en: Interface Zoom
|
|
1562
|
+
pt: Zoom da Interface
|
|
1563
|
+
description:
|
|
1564
|
+
en: Global zoom level applied to the whole interface (like browser zoom)
|
|
1565
|
+
pt: Nível de zoom global aplicado a toda a interface (como o zoom do navegador)
|
|
1566
|
+
value: 100%
|
|
1567
|
+
component: combobox
|
|
1568
|
+
user_override: true
|
|
1569
|
+
relations:
|
|
1570
|
+
setting_list:
|
|
1571
|
+
- value: 80%
|
|
1572
|
+
order: 0
|
|
1573
|
+
- value: 90%
|
|
1574
|
+
order: 1
|
|
1575
|
+
- value: 100%
|
|
1576
|
+
order: 2
|
|
1577
|
+
- value: 110%
|
|
1578
|
+
order: 3
|
|
1579
|
+
- value: 125%
|
|
1580
|
+
order: 4
|
|
1581
|
+
- value: 150%
|
|
1582
|
+
order: 5
|
|
1583
|
+
subgroup_id:
|
|
1584
|
+
where:
|
|
1585
|
+
slug: theme-customization
|
|
1522
1586
|
- slug: menu-width
|
|
1523
1587
|
type: string
|
|
1524
1588
|
name:
|
|
@@ -1592,7 +1656,7 @@
|
|
|
1592
1656
|
relations:
|
|
1593
1657
|
setting:
|
|
1594
1658
|
- slug: file-storage-profile-id
|
|
1595
|
-
type:
|
|
1659
|
+
type: string
|
|
1596
1660
|
component: entity-picker
|
|
1597
1661
|
name:
|
|
1598
1662
|
en: Storage Profile
|
|
@@ -1682,7 +1746,7 @@
|
|
|
1682
1746
|
description:
|
|
1683
1747
|
en: Automatically compress uploaded images to reduce file size
|
|
1684
1748
|
pt: Comprime automaticamente imagens enviadas para reduzir o tamanho do arquivo
|
|
1685
|
-
value: '
|
|
1749
|
+
value: 'true'
|
|
1686
1750
|
user_override: false
|
|
1687
1751
|
subgroup_id:
|
|
1688
1752
|
where:
|
|
@@ -1736,7 +1800,7 @@
|
|
|
1736
1800
|
description:
|
|
1737
1801
|
en: Automatically convert uploaded images to WebP format for better compression and web performance
|
|
1738
1802
|
pt: Converte automaticamente imagens enviadas para formato WebP para melhor compressão e performance web
|
|
1739
|
-
value: '
|
|
1803
|
+
value: 'true'
|
|
1740
1804
|
user_override: false
|
|
1741
1805
|
subgroup_id:
|
|
1742
1806
|
where:
|
|
@@ -1767,6 +1831,48 @@
|
|
|
1767
1831
|
order: 3
|
|
1768
1832
|
- value: image/tiff
|
|
1769
1833
|
order: 4
|
|
1834
|
+
- slug: image-max-dimension
|
|
1835
|
+
type: number
|
|
1836
|
+
component: input-number
|
|
1837
|
+
name:
|
|
1838
|
+
en: Max Image Dimension (px)
|
|
1839
|
+
pt: Dimensão Máxima da Imagem (px)
|
|
1840
|
+
description:
|
|
1841
|
+
en: Largest allowed width/height for uploaded images without a specific target size. Bigger images are scaled down keeping aspect ratio. 0 disables this cap (default 1920)
|
|
1842
|
+
pt: Maior largura/altura permitida para imagens enviadas sem tamanho-alvo específico. Imagens maiores são reduzidas mantendo a proporção. 0 desativa este limite (padrão 1920)
|
|
1843
|
+
value: 1920
|
|
1844
|
+
user_override: false
|
|
1845
|
+
subgroup_id:
|
|
1846
|
+
where:
|
|
1847
|
+
slug: image-optimization
|
|
1848
|
+
- slug: image-cache-ttl-seconds
|
|
1849
|
+
type: number
|
|
1850
|
+
component: input-number
|
|
1851
|
+
name:
|
|
1852
|
+
en: Image Cache Duration (seconds)
|
|
1853
|
+
pt: Duração do Cache de Imagens (segundos)
|
|
1854
|
+
description:
|
|
1855
|
+
en: How long browsers cache images served by the dedicated image endpoint (in seconds). Default 2592000 = 30 days
|
|
1856
|
+
pt: Por quanto tempo os navegadores armazenam em cache as imagens servidas pelo endpoint dedicado de imagens (em segundos). Padrão 2592000 = 30 dias
|
|
1857
|
+
value: 2592000
|
|
1858
|
+
user_override: false
|
|
1859
|
+
subgroup_id:
|
|
1860
|
+
where:
|
|
1861
|
+
slug: image-optimization
|
|
1862
|
+
- slug: file-cache-ttl-seconds
|
|
1863
|
+
type: number
|
|
1864
|
+
component: input-number
|
|
1865
|
+
name:
|
|
1866
|
+
en: File Cache Duration (seconds)
|
|
1867
|
+
pt: Duração do Cache de Arquivos (segundos)
|
|
1868
|
+
description:
|
|
1869
|
+
en: How long browsers cache generic files served by the open endpoint (in seconds). Default 86400 = 1 day
|
|
1870
|
+
pt: Por quanto tempo os navegadores armazenam em cache os arquivos genéricos servidos pelo endpoint de abertura (em segundos). Padrão 86400 = 1 dia
|
|
1871
|
+
value: 86400
|
|
1872
|
+
user_override: false
|
|
1873
|
+
subgroup_id:
|
|
1874
|
+
where:
|
|
1875
|
+
slug: image-optimization
|
|
1770
1876
|
- slug: integration
|
|
1771
1877
|
icon: webhook
|
|
1772
1878
|
name:
|
|
@@ -104,6 +104,8 @@ function MethodBadge({ method }: { method: string | null }) {
|
|
|
104
104
|
);
|
|
105
105
|
}
|
|
106
106
|
|
|
107
|
+
const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
|
|
108
|
+
|
|
107
109
|
export default function AccessLogPage() {
|
|
108
110
|
const t = useTranslations('core.AccessLog');
|
|
109
111
|
const { request, getSettingValue } = useApp();
|
|
@@ -121,10 +123,40 @@ export default function AccessLogPage() {
|
|
|
121
123
|
const [viewMode, setViewMode] = useState<ViewMode>('table');
|
|
122
124
|
const [isLive, setIsLive] = useState(true);
|
|
123
125
|
const [page, setPage] = useState(1);
|
|
126
|
+
const { data: generalSettings } = useQuery<{
|
|
127
|
+
data: Array<{ slug: string; value: string }>;
|
|
128
|
+
}>({
|
|
129
|
+
queryKey: ['setting-group-general'],
|
|
130
|
+
queryFn: async () => {
|
|
131
|
+
const response = await request<{
|
|
132
|
+
data: Array<{ slug: string; value: string }>;
|
|
133
|
+
}>({ url: '/setting/group/general', method: 'GET' });
|
|
134
|
+
return response.data;
|
|
135
|
+
},
|
|
136
|
+
staleTime: 5 * 60 * 1000,
|
|
137
|
+
});
|
|
138
|
+
|
|
139
|
+
const pageSizeOptions = useMemo(() => {
|
|
140
|
+
const setting = generalSettings?.data?.find(
|
|
141
|
+
(s) => s.slug === 'pagination-page-sizes'
|
|
142
|
+
);
|
|
143
|
+
if (!setting?.value) return DEFAULT_PAGE_SIZES;
|
|
144
|
+
try {
|
|
145
|
+
const parsed = JSON.parse(setting.value) as string[];
|
|
146
|
+
const sizes = parsed
|
|
147
|
+
.map(Number)
|
|
148
|
+
.filter((n) => !isNaN(n) && n > 0)
|
|
149
|
+
.sort((a, b) => a - b);
|
|
150
|
+
return sizes.length > 0 ? sizes : DEFAULT_PAGE_SIZES;
|
|
151
|
+
} catch {
|
|
152
|
+
return DEFAULT_PAGE_SIZES;
|
|
153
|
+
}
|
|
154
|
+
}, [generalSettings]);
|
|
155
|
+
|
|
124
156
|
const [pageSize, setPageSize] = usePersistedPageSize({
|
|
125
157
|
storageKey: 'pagination:global:pageSize',
|
|
126
|
-
defaultValue:
|
|
127
|
-
allowedValues:
|
|
158
|
+
defaultValue: 12,
|
|
159
|
+
allowedValues: pageSizeOptions,
|
|
128
160
|
});
|
|
129
161
|
|
|
130
162
|
const debouncedSearch = useDebounce(searchTerm);
|
|
@@ -731,7 +763,7 @@ export default function AccessLogPage() {
|
|
|
731
763
|
setPageSize(s);
|
|
732
764
|
setPage(1);
|
|
733
765
|
}}
|
|
734
|
-
pageSizeOptions={
|
|
766
|
+
pageSizeOptions={pageSizeOptions}
|
|
735
767
|
/>
|
|
736
768
|
|
|
737
769
|
{selectedLog && (
|
|
@@ -32,12 +32,14 @@ import { usePagination } from '@/hooks/use-pagination';
|
|
|
32
32
|
import { formatDate, formatDateTime } from '@/lib/format-date';
|
|
33
33
|
import { parseBrowser, parseDeviceType, parseOS } from '@/lib/session';
|
|
34
34
|
import { UserSession } from '@hed-hog/api-types';
|
|
35
|
-
import { useApp } from '@hed-hog/next-app-provider';
|
|
35
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
36
36
|
import { Calendar, Clock, LogOut, MapPin } from 'lucide-react';
|
|
37
37
|
import { useTranslations } from 'next-intl';
|
|
38
|
-
import { useState } from 'react';
|
|
38
|
+
import { useMemo, useState } from 'react';
|
|
39
39
|
import { toast } from 'sonner';
|
|
40
40
|
|
|
41
|
+
const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
|
|
42
|
+
|
|
41
43
|
export function ActiveSessions() {
|
|
42
44
|
const { request, logout, currentLocaleCode, getSettingValue } = useApp();
|
|
43
45
|
const t = useTranslations('core.ActiveSessions');
|
|
@@ -45,6 +47,36 @@ export function ActiveSessions() {
|
|
|
45
47
|
const [revokeAllSessions, setRevokeAllSessions] = useState(false);
|
|
46
48
|
const [revokeAllOtherSessions, setRevokeAllOtherSessions] = useState(false);
|
|
47
49
|
|
|
50
|
+
const { data: generalSettings } = useQuery<{
|
|
51
|
+
data: Array<{ slug: string; value: string }>;
|
|
52
|
+
}>({
|
|
53
|
+
queryKey: ['setting-group-general'],
|
|
54
|
+
queryFn: async () => {
|
|
55
|
+
const response = await request<{
|
|
56
|
+
data: Array<{ slug: string; value: string }>;
|
|
57
|
+
}>({ url: '/setting/group/general', method: 'GET' });
|
|
58
|
+
return response.data;
|
|
59
|
+
},
|
|
60
|
+
staleTime: 5 * 60 * 1000,
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const pageSizeOptions = useMemo(() => {
|
|
64
|
+
const setting = generalSettings?.data?.find(
|
|
65
|
+
(s) => s.slug === 'pagination-page-sizes'
|
|
66
|
+
);
|
|
67
|
+
if (!setting?.value) return DEFAULT_PAGE_SIZES;
|
|
68
|
+
try {
|
|
69
|
+
const parsed = JSON.parse(setting.value) as string[];
|
|
70
|
+
const sizes = parsed
|
|
71
|
+
.map(Number)
|
|
72
|
+
.filter((n) => !isNaN(n) && n > 0)
|
|
73
|
+
.sort((a, b) => a - b);
|
|
74
|
+
return sizes.length > 0 ? sizes : DEFAULT_PAGE_SIZES;
|
|
75
|
+
} catch {
|
|
76
|
+
return DEFAULT_PAGE_SIZES;
|
|
77
|
+
}
|
|
78
|
+
}, [generalSettings]);
|
|
79
|
+
|
|
48
80
|
const {
|
|
49
81
|
items: sessions,
|
|
50
82
|
refetch,
|
|
@@ -55,6 +87,7 @@ export function ActiveSessions() {
|
|
|
55
87
|
setPageSize,
|
|
56
88
|
} = usePagination({
|
|
57
89
|
url: `/sessions/user`,
|
|
90
|
+
paginationOptions: { pageSizeOptions },
|
|
58
91
|
});
|
|
59
92
|
|
|
60
93
|
const handleRevokeSession = async (sessionId: number) => {
|
|
@@ -159,7 +192,7 @@ export function ActiveSessions() {
|
|
|
159
192
|
setPageSize(newSize);
|
|
160
193
|
setPage(1);
|
|
161
194
|
}}
|
|
162
|
-
pageSizeOptions={
|
|
195
|
+
pageSizeOptions={pageSizeOptions}
|
|
163
196
|
/>
|
|
164
197
|
</div>
|
|
165
198
|
</>
|
|
@@ -39,10 +39,10 @@ import {
|
|
|
39
39
|
} from '@/components/ui/table';
|
|
40
40
|
import { usePagination } from '@/hooks/use-pagination';
|
|
41
41
|
import { formatDateTime } from '@/lib/format-date';
|
|
42
|
-
import { useApp } from '@hed-hog/next-app-provider';
|
|
42
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
43
43
|
import { Check, Copy, KeyRound, Plus, Trash2 } from 'lucide-react';
|
|
44
44
|
import { useTranslations } from 'next-intl';
|
|
45
|
-
import { useState } from 'react';
|
|
45
|
+
import { useMemo, useState } from 'react';
|
|
46
46
|
import { toast } from 'sonner';
|
|
47
47
|
|
|
48
48
|
type McpApiKey = {
|
|
@@ -54,6 +54,8 @@ type McpApiKey = {
|
|
|
54
54
|
created_at: string;
|
|
55
55
|
};
|
|
56
56
|
|
|
57
|
+
const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
|
|
58
|
+
|
|
57
59
|
export function McpTokens() {
|
|
58
60
|
const { request, getSettingValue } = useApp();
|
|
59
61
|
const t = useTranslations('core.McpTokens');
|
|
@@ -64,6 +66,36 @@ export function McpTokens() {
|
|
|
64
66
|
const [createdToken, setCreatedToken] = useState<string | null>(null);
|
|
65
67
|
const [isCopied, setIsCopied] = useState(false);
|
|
66
68
|
const [isCopiedUrl, setIsCopiedUrl] = useState(false);
|
|
69
|
+
const { data: generalSettings } = useQuery<{
|
|
70
|
+
data: Array<{ slug: string; value: string }>;
|
|
71
|
+
}>({
|
|
72
|
+
queryKey: ['setting-group-general'],
|
|
73
|
+
queryFn: async () => {
|
|
74
|
+
const response = await request<{
|
|
75
|
+
data: Array<{ slug: string; value: string }>;
|
|
76
|
+
}>({ url: '/setting/group/general', method: 'GET' });
|
|
77
|
+
return response.data;
|
|
78
|
+
},
|
|
79
|
+
staleTime: 5 * 60 * 1000,
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
const pageSizeOptions = useMemo(() => {
|
|
83
|
+
const setting = generalSettings?.data?.find(
|
|
84
|
+
(s) => s.slug === 'pagination-page-sizes'
|
|
85
|
+
);
|
|
86
|
+
if (!setting?.value) return DEFAULT_PAGE_SIZES;
|
|
87
|
+
try {
|
|
88
|
+
const parsed = JSON.parse(setting.value) as string[];
|
|
89
|
+
const sizes = parsed
|
|
90
|
+
.map(Number)
|
|
91
|
+
.filter((n) => !isNaN(n) && n > 0)
|
|
92
|
+
.sort((a, b) => a - b);
|
|
93
|
+
return sizes.length > 0 ? sizes : DEFAULT_PAGE_SIZES;
|
|
94
|
+
} catch {
|
|
95
|
+
return DEFAULT_PAGE_SIZES;
|
|
96
|
+
}
|
|
97
|
+
}, [generalSettings]);
|
|
98
|
+
|
|
67
99
|
const {
|
|
68
100
|
items: keys,
|
|
69
101
|
refetch,
|
|
@@ -72,7 +104,10 @@ export function McpTokens() {
|
|
|
72
104
|
totalItems,
|
|
73
105
|
pageSize,
|
|
74
106
|
setPageSize,
|
|
75
|
-
} = usePagination({
|
|
107
|
+
} = usePagination({
|
|
108
|
+
url: '/mcp/api-keys',
|
|
109
|
+
paginationOptions: { pageSizeOptions },
|
|
110
|
+
});
|
|
76
111
|
|
|
77
112
|
const apiUrl = getSettingValue('api-url') as string | null;
|
|
78
113
|
const mcpUrl = apiUrl ? `${apiUrl.replace(/\/$/, '')}/mcp` : '/mcp';
|
|
@@ -202,7 +237,7 @@ export function McpTokens() {
|
|
|
202
237
|
setPageSize(newSize);
|
|
203
238
|
setPage(1);
|
|
204
239
|
}}
|
|
205
|
-
pageSizeOptions={
|
|
240
|
+
pageSizeOptions={pageSizeOptions}
|
|
206
241
|
/>
|
|
207
242
|
</CardContent>
|
|
208
243
|
</Card>
|
|
@@ -39,10 +39,10 @@ import {
|
|
|
39
39
|
} from '@/components/ui/table';
|
|
40
40
|
import { ResizableSheetContent } from '@/components/ui/resizable-sheet-content';
|
|
41
41
|
import { usePagination } from '@/hooks/use-pagination';
|
|
42
|
-
import { useApp } from '@hed-hog/next-app-provider';
|
|
42
|
+
import { useApp, useQuery } from '@hed-hog/next-app-provider';
|
|
43
43
|
import { Check, Copy, KeyRound, Plus, Trash2 } from 'lucide-react';
|
|
44
44
|
import { useTranslations } from 'next-intl';
|
|
45
|
-
import { useState } from 'react';
|
|
45
|
+
import { useMemo, useState } from 'react';
|
|
46
46
|
import { toast } from 'sonner';
|
|
47
47
|
|
|
48
48
|
type ApiToken = {
|
|
@@ -95,6 +95,8 @@ function CodeRow({ label, value }: { label: string; value: string }) {
|
|
|
95
95
|
);
|
|
96
96
|
}
|
|
97
97
|
|
|
98
|
+
const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
|
|
99
|
+
|
|
98
100
|
export function Tokens() {
|
|
99
101
|
const { request, getSettingValue } = useApp();
|
|
100
102
|
const t = useTranslations('core.Tokens');
|
|
@@ -105,6 +107,36 @@ export function Tokens() {
|
|
|
105
107
|
const [newKeyType, setNewKeyType] = useState<'mcp' | 'api'>('mcp');
|
|
106
108
|
const [createdToken, setCreatedToken] = useState<string | null>(null);
|
|
107
109
|
const [isCopied, setIsCopied] = useState(false);
|
|
110
|
+
const { data: generalSettings } = useQuery<{
|
|
111
|
+
data: Array<{ slug: string; value: string }>;
|
|
112
|
+
}>({
|
|
113
|
+
queryKey: ['setting-group-general'],
|
|
114
|
+
queryFn: async () => {
|
|
115
|
+
const response = await request<{
|
|
116
|
+
data: Array<{ slug: string; value: string }>;
|
|
117
|
+
}>({ url: '/setting/group/general', method: 'GET' });
|
|
118
|
+
return response.data;
|
|
119
|
+
},
|
|
120
|
+
staleTime: 5 * 60 * 1000,
|
|
121
|
+
});
|
|
122
|
+
|
|
123
|
+
const pageSizeOptions = useMemo(() => {
|
|
124
|
+
const setting = generalSettings?.data?.find(
|
|
125
|
+
(s) => s.slug === 'pagination-page-sizes'
|
|
126
|
+
);
|
|
127
|
+
if (!setting?.value) return DEFAULT_PAGE_SIZES;
|
|
128
|
+
try {
|
|
129
|
+
const parsed = JSON.parse(setting.value) as string[];
|
|
130
|
+
const sizes = parsed
|
|
131
|
+
.map(Number)
|
|
132
|
+
.filter((n) => !isNaN(n) && n > 0)
|
|
133
|
+
.sort((a, b) => a - b);
|
|
134
|
+
return sizes.length > 0 ? sizes : DEFAULT_PAGE_SIZES;
|
|
135
|
+
} catch {
|
|
136
|
+
return DEFAULT_PAGE_SIZES;
|
|
137
|
+
}
|
|
138
|
+
}, [generalSettings]);
|
|
139
|
+
|
|
108
140
|
const {
|
|
109
141
|
items: keys,
|
|
110
142
|
refetch,
|
|
@@ -113,7 +145,10 @@ export function Tokens() {
|
|
|
113
145
|
totalItems,
|
|
114
146
|
pageSize,
|
|
115
147
|
setPageSize,
|
|
116
|
-
} = usePagination({
|
|
148
|
+
} = usePagination({
|
|
149
|
+
url: '/mcp/api-keys',
|
|
150
|
+
paginationOptions: { pageSizeOptions },
|
|
151
|
+
});
|
|
117
152
|
|
|
118
153
|
const apiUrl = (getSettingValue('api-url') as string | null)?.replace(/\/$/, '') ?? '';
|
|
119
154
|
const mcpUrl = apiUrl ? `${apiUrl}/mcp` : '/mcp';
|
|
@@ -239,7 +274,7 @@ export function Tokens() {
|
|
|
239
274
|
setPageSize(newSize);
|
|
240
275
|
setPage(1);
|
|
241
276
|
}}
|
|
242
|
-
pageSizeOptions={
|
|
277
|
+
pageSizeOptions={pageSizeOptions}
|
|
243
278
|
/>
|
|
244
279
|
</CardContent>
|
|
245
280
|
</Card>
|
|
@@ -124,6 +124,8 @@ function getErrorMessage(error: unknown, fallback: string) {
|
|
|
124
124
|
return fallback;
|
|
125
125
|
}
|
|
126
126
|
|
|
127
|
+
const DEFAULT_PAGE_SIZES = [6, 12, 24, 48, 96] as const;
|
|
128
|
+
|
|
127
129
|
export default function AiAgentPage() {
|
|
128
130
|
const { request, currentLocaleCode, getSettingValue } = useApp();
|
|
129
131
|
const t = useTranslations('core.AiAgentPage');
|
|
@@ -133,11 +135,41 @@ export default function AiAgentPage() {
|
|
|
133
135
|
model: z.string().optional(),
|
|
134
136
|
instructions: z.string().optional(),
|
|
135
137
|
});
|
|
138
|
+
const { data: generalSettings } = useQuery<{
|
|
139
|
+
data: Array<{ slug: string; value: string }>;
|
|
140
|
+
}>({
|
|
141
|
+
queryKey: ['setting-group-general'],
|
|
142
|
+
queryFn: async () => {
|
|
143
|
+
const response = await request<{
|
|
144
|
+
data: Array<{ slug: string; value: string }>;
|
|
145
|
+
}>({ url: '/setting/group/general', method: 'GET' });
|
|
146
|
+
return response.data;
|
|
147
|
+
},
|
|
148
|
+
staleTime: 5 * 60 * 1000,
|
|
149
|
+
});
|
|
150
|
+
|
|
151
|
+
const pageSizeOptions = useMemo(() => {
|
|
152
|
+
const setting = generalSettings?.data?.find(
|
|
153
|
+
(s) => s.slug === 'pagination-page-sizes'
|
|
154
|
+
);
|
|
155
|
+
if (!setting?.value) return DEFAULT_PAGE_SIZES;
|
|
156
|
+
try {
|
|
157
|
+
const parsed = JSON.parse(setting.value) as string[];
|
|
158
|
+
const sizes = parsed
|
|
159
|
+
.map(Number)
|
|
160
|
+
.filter((n) => !isNaN(n) && n > 0)
|
|
161
|
+
.sort((a, b) => a - b);
|
|
162
|
+
return sizes.length > 0 ? sizes : DEFAULT_PAGE_SIZES;
|
|
163
|
+
} catch {
|
|
164
|
+
return DEFAULT_PAGE_SIZES;
|
|
165
|
+
}
|
|
166
|
+
}, [generalSettings]);
|
|
167
|
+
|
|
136
168
|
const [page, setPage] = useState(1);
|
|
137
169
|
const [pageSize, setPageSize] = usePersistedPageSize({
|
|
138
170
|
storageKey: 'pagination:global:pageSize',
|
|
139
|
-
defaultValue:
|
|
140
|
-
allowedValues:
|
|
171
|
+
defaultValue: 12,
|
|
172
|
+
allowedValues: pageSizeOptions,
|
|
141
173
|
});
|
|
142
174
|
const [searchQuery, setSearchQuery] = useState('');
|
|
143
175
|
const debouncedSearch = useDebounce(searchQuery, 400);
|
|
@@ -440,6 +472,7 @@ export default function AiAgentPage() {
|
|
|
440
472
|
setPageSize(value);
|
|
441
473
|
setPage(1);
|
|
442
474
|
}}
|
|
475
|
+
pageSizeOptions={pageSizeOptions}
|
|
443
476
|
/>
|
|
444
477
|
|
|
445
478
|
<Sheet
|