strapi-plugin-magic-sessionmanager 4.0.0 → 4.0.2

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 (68) hide show
  1. package/README.md +2 -2
  2. package/admin/src/components/LicenseGuard.jsx +6 -6
  3. package/admin/src/components/OnlineUsersWidget.jsx +11 -7
  4. package/admin/src/components/SessionDetailModal.jsx +45 -41
  5. package/admin/src/components/SessionInfoCard.jsx +3 -3
  6. package/admin/src/components/SessionInfoPanel.jsx +31 -21
  7. package/admin/src/index.js +9 -0
  8. package/admin/src/pages/Analytics.jsx +2 -2
  9. package/admin/src/pages/HomePage.jsx +129 -165
  10. package/admin/src/pages/License.jsx +5 -5
  11. package/admin/src/pages/Settings.jsx +148 -144
  12. package/admin/src/pages/SettingsNew.jsx +21 -21
  13. package/admin/src/pages/UpgradePage.jsx +448 -0
  14. package/admin/src/pluginId.js +1 -0
  15. package/admin/src/translations/de.json +294 -15
  16. package/admin/src/translations/en.json +293 -14
  17. package/admin/src/translations/es.json +284 -18
  18. package/admin/src/translations/fr.json +284 -18
  19. package/admin/src/translations/pt.json +284 -18
  20. package/admin/src/utils/parseUserAgent.js +6 -6
  21. package/admin/src/utils/theme.js +85 -0
  22. package/dist/_chunks/{Analytics-mYu_uGwU.mjs → Analytics-DTE_zmRV.mjs} +4 -4
  23. package/dist/_chunks/{Analytics-ioaeEh-E.js → Analytics-lw_JaOVy.js} +4 -4
  24. package/dist/_chunks/{App-DdnUYWbC.js → App-DDKYCjKw.js} +221 -216
  25. package/dist/_chunks/{App-BXpIS12l.mjs → App-DJW1ZNl5.mjs} +221 -216
  26. package/dist/_chunks/{License-C03C2j9P.mjs → License-DaOFuImm.mjs} +6 -10
  27. package/dist/_chunks/{License-DZYrOgcx.js → License-Tk-6UfPl.js} +6 -10
  28. package/dist/_chunks/{OnlineUsersWidget-B8JS1xZu.js → OnlineUsersWidget-C1qTpsws.js} +11 -7
  29. package/dist/_chunks/{OnlineUsersWidget-ArMl0nen.mjs → OnlineUsersWidget-CADphbXG.mjs} +11 -7
  30. package/dist/_chunks/{Settings-0ocB3qHk.mjs → Settings-C9xvckgq.mjs} +200 -188
  31. package/dist/_chunks/{Settings-C6_CqpCC.js → Settings-DyEAuTNQ.js} +200 -188
  32. package/dist/_chunks/UpgradePage-Dssk8A0Z.js +354 -0
  33. package/dist/_chunks/UpgradePage-cINvE9zY.mjs +352 -0
  34. package/dist/_chunks/de-CDA1V0rF.mjs +292 -0
  35. package/dist/_chunks/de-I-Q-pWqu.js +292 -0
  36. package/dist/_chunks/en-Bd7_h-4e.js +292 -0
  37. package/dist/_chunks/en-DzmOCyzQ.mjs +292 -0
  38. package/dist/_chunks/es-BcAx18XG.js +277 -0
  39. package/dist/_chunks/es-Cx-SN6qV.mjs +277 -0
  40. package/dist/_chunks/fr-DCzYMuJ-.js +277 -0
  41. package/dist/_chunks/fr-DXlXE5Eo.mjs +277 -0
  42. package/dist/_chunks/{index-DC8Y0qxx.js → index-CWcvrfXc.js} +52 -49
  43. package/dist/_chunks/{index-DBRS3kt5.mjs → index-DQO9bNP7.mjs} +52 -49
  44. package/dist/_chunks/pt-21-MAb72.js +277 -0
  45. package/dist/_chunks/pt-zsdTSjba.mjs +277 -0
  46. package/dist/_chunks/{useLicense-qgGfMvse.js → useLicense-DtvJOszr.js} +1 -1
  47. package/dist/_chunks/{useLicense-DSLL9n3Y.mjs → useLicense-DxbD4Wf8.mjs} +1 -1
  48. package/dist/admin/index.js +1 -1
  49. package/dist/admin/index.mjs +1 -1
  50. package/dist/server/index.js +142 -33
  51. package/dist/server/index.mjs +142 -33
  52. package/package.json +1 -1
  53. package/server/src/bootstrap.js +76 -4
  54. package/server/src/controllers/session.js +59 -9
  55. package/server/src/middlewares/last-seen.js +5 -4
  56. package/server/src/routes/content-api.js +11 -2
  57. package/server/src/services/notifications.js +10 -10
  58. package/server/src/services/session.js +24 -4
  59. package/dist/_chunks/de-BxFx1pwE.js +0 -23
  60. package/dist/_chunks/de-CdO3s01z.mjs +0 -23
  61. package/dist/_chunks/en-CsPpPJL3.mjs +0 -23
  62. package/dist/_chunks/en-RqmpDHdS.js +0 -23
  63. package/dist/_chunks/es-CuLHazN1.js +0 -23
  64. package/dist/_chunks/es-Dkmjhy9c.mjs +0 -23
  65. package/dist/_chunks/fr-BAJp2yhI.js +0 -23
  66. package/dist/_chunks/fr-Bssg_3UF.mjs +0 -23
  67. package/dist/_chunks/pt-BAP9cKs3.js +0 -23
  68. package/dist/_chunks/pt-BVNoNcuY.mjs +0 -23
@@ -0,0 +1,277 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const pt = {
4
+ "plugin.name": "Session Manager",
5
+ "plugin.description": "Rastrear login/logout e atividade de sessões de usuários",
6
+ "settings.section": "Session Manager",
7
+ "settings.sessions": "Sessões Ativas",
8
+ "settings.upgrade": "Atualizar",
9
+ "settings.general": "Geral",
10
+ "settings.analytics": "Análises",
11
+ "settings.license": "Licença",
12
+ "widget.online-users.title": "Usuários Online",
13
+ "widget.stats.onlineNow": "Online agora",
14
+ "widget.stats.offline": "Offline",
15
+ "widget.stats.last15min": "Últimos 15 min",
16
+ "widget.stats.last30min": "Últimos 30 min",
17
+ "widget.stats.totalUsers": "Usuários totais",
18
+ "widget.stats.blocked": "Bloqueados",
19
+ "homepage.title": "Session Manager",
20
+ "homepage.subtitle": "Monitorar e gerenciar sessões de usuários em tempo real",
21
+ "homepage.stats.active": "Ativo",
22
+ "homepage.stats.idle": "Inativo",
23
+ "homepage.stats.loggedOut": "Desconectado",
24
+ "homepage.stats.terminated": "Encerrado",
25
+ "homepage.stats.total": "Total",
26
+ "homepage.export.csv": "Exportar CSV",
27
+ "homepage.export.json": "Exportar JSON",
28
+ "homepage.loading": "Carregando sessões...",
29
+ "homepage.allSessions": "Todas as Sessões",
30
+ "homepage.search.placeholder": "Buscar por usuário, endereço IP ou dispositivo...",
31
+ "homepage.filter.all": "Todas as Sessões",
32
+ "homepage.filter.active": "Ativas (menos de 15 min)",
33
+ "homepage.filter.idle": "Inativas (mais de 15 min)",
34
+ "homepage.filter.loggedout": "Desconectadas",
35
+ "homepage.filter.terminated": "Encerradas",
36
+ "homepage.entries.10": "10 entradas",
37
+ "homepage.entries.25": "25 entradas",
38
+ "homepage.entries.50": "50 entradas",
39
+ "homepage.entries.100": "100 entradas",
40
+ "homepage.showing": "Exibindo {count} de {total} sessões",
41
+ "homepage.showingFiltered": 'Exibindo {count} de {total} sessões (filtrado por "{query}")',
42
+ "homepage.table.status": "Status",
43
+ "homepage.table.user": "Usuário",
44
+ "homepage.table.device": "Dispositivo",
45
+ "homepage.table.ipAddress": "Endereço IP",
46
+ "homepage.table.loginTime": "Hora de Login",
47
+ "homepage.table.lastActive": "Última Atividade",
48
+ "homepage.table.actions": "Ações",
49
+ "homepage.status.active": "Ativo",
50
+ "homepage.status.idle": "Inativo",
51
+ "homepage.status.loggedOut": "Desconectado",
52
+ "homepage.status.terminated": "Encerrado",
53
+ "homepage.user.unknown": "Desconhecido",
54
+ "homepage.time.minAgo": "há {minutes} min",
55
+ "homepage.actions.viewDetails": "Ver Detalhes",
56
+ "homepage.actions.terminate": "Encerrar (Logout)",
57
+ "homepage.actions.alreadyInactive": "Já inativo",
58
+ "homepage.actions.deletePermanently": "Excluir Permanentemente",
59
+ "homepage.empty.title": "Ainda não há sessões",
60
+ "homepage.empty.description": "As sessões aparecerão aqui quando os usuários fizerem login na sua aplicação",
61
+ "homepage.noResults.title": "Nenhuma sessão encontrada",
62
+ "homepage.noResults.description": "Tente ajustar sua consulta de busca ou filtros para encontrar sessões",
63
+ "homepage.confirm.terminate": "Tem certeza de que deseja encerrar esta sessão?\n\nIsso definirá isActive como false (o usuário será desconectado).",
64
+ "homepage.confirm.delete": "[AVISO] Isso EXCLUIRÁ PERMANENTEMENTE esta sessão do banco de dados!\n\nEsta ação não pode ser desfeita.\n\nTem certeza?",
65
+ "modal.title": "Detalhes da Sessão",
66
+ "modal.id": "ID: {id}",
67
+ "modal.status.online": "ONLINE",
68
+ "modal.status.offline": "OFFLINE",
69
+ "modal.section.user": "Usuário",
70
+ "modal.section.device": "Dispositivo",
71
+ "modal.section.timeline": "Linha do Tempo",
72
+ "modal.section.security": "Localização e Segurança",
73
+ "modal.section.technical": "Detalhes Técnicos",
74
+ "modal.user.username": "Nome de usuário",
75
+ "modal.user.email": "E-mail",
76
+ "modal.user.id": "ID do Usuário",
77
+ "modal.user.na": "N/D",
78
+ "modal.device.device": "Dispositivo",
79
+ "modal.device.browser": "Navegador",
80
+ "modal.device.os": "Sistema Operacional",
81
+ "modal.device.ip": "IP",
82
+ "modal.timeline.login": "Login",
83
+ "modal.timeline.lastActive": "Última Atividade",
84
+ "modal.timeline.idleTime": "Tempo Inativo",
85
+ "modal.timeline.logout": "Logout",
86
+ "modal.timeline.minutes": "{minutes} min",
87
+ "modal.security.loading": "Carregando dados de localização...",
88
+ "modal.security.country": "País",
89
+ "modal.security.city": "Cidade",
90
+ "modal.security.timezone": "Fuso horário",
91
+ "modal.security.score": "Segurança",
92
+ "modal.security.vpn": "VPN",
93
+ "modal.security.proxy": "Proxy",
94
+ "modal.security.vpnWarning": "[AVISO] Sim",
95
+ "modal.security.no": "Não",
96
+ "modal.premium.title": "Análise de Localização e Segurança",
97
+ "modal.premium.description": "Desbloqueie recursos premium para obter geolocalização IP, pontuação de segurança e detecção de VPN/Proxy para cada sessão",
98
+ "modal.premium.upgrade": "Atualizar para Premium",
99
+ "modal.technical.show": "Mostrar Detalhes",
100
+ "modal.technical.hide": "Ocultar Detalhes",
101
+ "modal.actions.close": "Fechar",
102
+ "modal.actions.terminate": "Encerrar Sessão",
103
+ "modal.confirm.terminate": "Tem certeza de que deseja encerrar esta sessão?",
104
+ "panel.title": "Info da Sessão",
105
+ "panel.loading": "Carregando...",
106
+ "panel.status.active": "ATIVO",
107
+ "panel.status.offline": "OFFLINE",
108
+ "panel.sessions.count": "{count} sessão(ões) ativa(s)",
109
+ "panel.sessions.title": "Sessões Ativas",
110
+ "panel.sessions.active": "Ativo",
111
+ "panel.sessions.activeNow": "Ativo agora",
112
+ "panel.sessions.activeAgo": "Ativo há {minutes} min",
113
+ "panel.sessions.more": "+{count} sessão(ões) adicional(is)",
114
+ "panel.blocked.title": "Usuário bloqueado",
115
+ "panel.blocked.description": "Autenticação desabilitada",
116
+ "panel.empty.title": "Sem sessões ativas",
117
+ "panel.empty.description": "O usuário ainda não fez login",
118
+ "panel.actions.title": "Ações",
119
+ "panel.actions.terminateAll": "Encerrar Todas as Sessões",
120
+ "panel.actions.blockUser": "Bloquear Usuário",
121
+ "panel.actions.unblockUser": "Desbloquear Usuário",
122
+ "settings.title": "Configurações do Session Manager",
123
+ "settings.subtitle": "Configurar rastreamento de sessões, segurança e notificações por e-mail",
124
+ "settings.save": "Salvar Alterações",
125
+ "settings.saving": "Salvando...",
126
+ "settings.noChanges": "Sem Alterações",
127
+ "settings.reset": "Redefinir",
128
+ "settings.license.title": "Status Atual da Licença",
129
+ "settings.license.premium": "Premium",
130
+ "settings.license.advanced": "Advanced",
131
+ "settings.license.enterprise": "Enterprise",
132
+ "settings.general.title": "Configurações Gerais",
133
+ "settings.general.description": "Configuração básica de rastreamento de sessões",
134
+ "settings.general.timeout.title": "TEMPO LIMITE DE SESSÃO",
135
+ "settings.general.timeout.inactivity": "Tempo Limite de Inatividade",
136
+ "settings.general.timeout.inactivityHint": "Sessões inativas por mais de {minutes} minutos serão marcadas como offline",
137
+ "settings.general.timeout.5min": "5 minutos (Muito rigoroso)",
138
+ "settings.general.timeout.10min": "10 minutos (Rigoroso)",
139
+ "settings.general.timeout.15min": "15 minutos (Recomendado)",
140
+ "settings.general.timeout.30min": "30 minutos (Moderado)",
141
+ "settings.general.timeout.1hour": "1 hora (Relaxado)",
142
+ "settings.general.timeout.2hours": "2 horas (Muito relaxado)",
143
+ "settings.general.rateLimit.title": "Limite de Taxa de Última Vista",
144
+ "settings.general.rateLimit.hint": "Evita gravações excessivas no banco de dados. Atualizações limitadas a uma vez a cada {seconds} segundos",
145
+ "settings.general.rateLimit.10sec": "10 segundos",
146
+ "settings.general.rateLimit.30sec": "30 segundos (Recomendado)",
147
+ "settings.general.rateLimit.1min": "1 minuto",
148
+ "settings.general.rateLimit.2min": "2 minutos",
149
+ "settings.general.rateLimit.5min": "5 minutos",
150
+ "settings.general.cleanup.title": "LIMPEZA E RETENÇÃO AUTOMÁTICAS",
151
+ "settings.general.cleanup.interval": "Intervalo de Limpeza",
152
+ "settings.general.cleanup.intervalHint": "Sessões inativas são automaticamente limpas a cada {minutes} minutos",
153
+ "settings.general.cleanup.15min": "15 minutos",
154
+ "settings.general.cleanup.30min": "30 minutos (Recomendado)",
155
+ "settings.general.cleanup.1hour": "1 hora",
156
+ "settings.general.cleanup.2hours": "2 horas",
157
+ "settings.general.retention.title": "Período de Retenção",
158
+ "settings.general.retention.hint": "Sessões antigas são excluídas após {days}",
159
+ "settings.general.retention.hintNever": "Sessões antigas nunca são excluídas",
160
+ "settings.general.retention.7days": "7 dias",
161
+ "settings.general.retention.30days": "30 dias",
162
+ "settings.general.retention.60days": "60 dias",
163
+ "settings.general.retention.90days": "90 dias (Recomendado)",
164
+ "settings.general.retention.180days": "180 dias",
165
+ "settings.general.retention.1year": "1 ano",
166
+ "settings.general.retention.forever": "Para sempre",
167
+ "settings.general.danger.title": "Zona de Perigo",
168
+ "settings.general.danger.description": "Limpar Todas Inativas: Exclui permanentemente todas as sessões inativas. Isso não pode ser desfeito.",
169
+ "settings.general.danger.cleanNow": "Limpar Agora",
170
+ "settings.general.danger.confirm": "[AVISO] Isso excluirá permanentemente TODAS as sessões inativas.\n\nContinuar?",
171
+ "settings.security.title": "Configurações de Segurança",
172
+ "settings.security.description": "Políticas de segurança e proteção contra ameaças",
173
+ "settings.security.options": "OPÇÕES DE SEGURANÇA",
174
+ "settings.security.encryption.title": "Gerador de Chave de Criptografia JWT",
175
+ "settings.security.encryption.description": "Gere uma chave de criptografia segura de 32 caracteres para armazenamento de tokens JWT. Esta chave é usada para criptografar tokens antes de salvá-los no banco de dados.",
176
+ "settings.security.encryption.important": "Importante",
177
+ "settings.security.encryption.envHint": "Adicione esta chave ao seu arquivo .env como SESSION_ENCRYPTION_KEY para produção.",
178
+ "settings.security.encryption.label": "Chave de Criptografia Gerada",
179
+ "settings.security.encryption.placeholder": "Clique em 'Gerar Chave' para criar uma chave segura",
180
+ "settings.security.encryption.show": "Mostrar",
181
+ "settings.security.encryption.hide": "Ocultar",
182
+ "settings.security.encryption.generate": "Gerar Chave",
183
+ "settings.security.encryption.copy": "Copiar para Área de Transferência",
184
+ "settings.security.encryption.copyEnv": "Copiar para .env",
185
+ "settings.security.encryption.envLabel": "Adicionar ao arquivo .env:",
186
+ "settings.security.blockSuspicious.title": "Bloquear Sessões Suspeitas",
187
+ "settings.security.blockSuspicious.description": "Bloquear automaticamente sessões de VPNs, proxies ou IPs de ameaças",
188
+ "settings.security.geolocation.title": "Geolocalização IP",
189
+ "settings.security.geolocation.description": "Obter dados de localização para cada sessão (Premium)",
190
+ "settings.security.scoring.title": "Pontuação de Segurança",
191
+ "settings.security.scoring.description": "Calcular pontuações de segurança e detectar ameaças (Premium)",
192
+ "settings.security.maxFailed.title": "Máx. Tentativas de Login Falhadas",
193
+ "settings.security.maxFailed.hint": "O usuário será bloqueado após {count} tentativas falhadas",
194
+ "settings.email.title": "Notificações por E-mail (Advanced)",
195
+ "settings.email.description": "Alertas por e-mail para eventos de segurança",
196
+ "settings.email.alerts.title": "ALERTAS POR E-MAIL",
197
+ "settings.email.alerts.subtitle": "Enviar alertas de segurança para usuários por e-mail",
198
+ "settings.email.enable.title": "Habilitar Alertas por E-mail",
199
+ "settings.email.enable.description": "Enviar alertas de segurança para logins suspeitos, novas localizações e uso de VPN/Proxy",
200
+ "settings.email.types.title": "TIPOS DE ALERTA",
201
+ "settings.email.types.suspicious": "Login Suspeito",
202
+ "settings.email.types.newLocation": "Nova Localização",
203
+ "settings.email.types.vpnProxy": "VPN/Proxy",
204
+ "settings.email.templates.title": "MODELOS DE E-MAIL",
205
+ "settings.email.templates.subtitle": "Personalizar modelos de notificação com variáveis dinâmicas",
206
+ "settings.email.templates.subject": "Assunto do E-mail",
207
+ "settings.email.templates.subjectPlaceholder": "Digite o assunto do e-mail...",
208
+ "settings.email.templates.variables": "Variáveis Disponíveis (clique para copiar)",
209
+ "settings.email.templates.html.title": "Modelo HTML",
210
+ "settings.email.templates.html.badge": "Modelo Principal",
211
+ "settings.email.templates.html.description": "Modelo HTML para notificações. Use variáveis como {{user.email}} para conteúdo dinâmico.",
212
+ "settings.email.templates.html.loadDefault": "Carregar Padrão",
213
+ "settings.email.templates.html.copy": "Copiar Modelo",
214
+ "settings.email.templates.html.validate": "Validar",
215
+ "settings.email.templates.html.info": "Info do Modelo",
216
+ "settings.email.templates.text.title": "Modelo de Texto",
217
+ "settings.email.templates.text.badge": "Alternativo",
218
+ "settings.email.templates.text.description": "Versão texto simples (sem HTML) como alternativa para clientes de e-mail antigos",
219
+ "settings.email.templates.text.loadDefault": "Carregar Padrão",
220
+ "settings.email.templates.text.copy": "Copiar Modelo",
221
+ "settings.email.templates.tab.suspicious": "Login Suspeito",
222
+ "settings.email.templates.tab.newLocation": "Nova Localização",
223
+ "settings.email.templates.tab.vpnProxy": "VPN/Proxy",
224
+ "settings.webhooks.title": "Integração de Webhooks (Advanced)",
225
+ "settings.webhooks.description": "Integração com Discord e Slack",
226
+ "settings.webhooks.enable.title": "Habilitar Webhooks",
227
+ "settings.webhooks.enable.description": "Enviar eventos de sessão para Discord, Slack ou endpoints personalizados",
228
+ "settings.webhooks.discord.title": "URL do Webhook do Discord",
229
+ "settings.webhooks.discord.placeholder": "https://discord.com/api/webhooks/123456789/abcdefghijklmnopqrstuvwxyz...",
230
+ "settings.webhooks.discord.hint": "Opcional: Postar alertas de sessão no seu canal do Discord",
231
+ "settings.webhooks.slack.title": "URL do Webhook do Slack",
232
+ "settings.webhooks.slack.placeholder": "https://hooks.slack.com/services/XXXX/XXXX/XXXX",
233
+ "settings.webhooks.slack.hint": "Opcional: Postar alertas de sessão no seu workspace do Slack",
234
+ "settings.webhooks.characters": "{count} caracteres",
235
+ "settings.footer.title": "Configurações Armazenadas no Banco de Dados",
236
+ "settings.footer.description": "Todas as configurações são armazenadas no seu banco de dados Strapi e compartilhadas entre todos os usuários administradores. As alterações entram em vigor imediatamente - não é necessário reiniciar o servidor! Modelos de e-mail, webhooks e opções de segurança são todos gerenciados a partir desta interface.",
237
+ "common.loading": "Carregando...",
238
+ "common.save": "Salvar",
239
+ "common.cancel": "Cancelar",
240
+ "common.close": "Fechar",
241
+ "common.delete": "Excluir",
242
+ "common.confirm": "Confirmar",
243
+ "common.yes": "Sim",
244
+ "common.no": "Não",
245
+ "common.on": "em",
246
+ "common.active": "ATIVO",
247
+ "common.inactive": "INATIVO",
248
+ "notifications.success.saved": "Configurações salvas com sucesso no banco de dados!",
249
+ "notifications.success.deleted": "Sessão excluída permanentemente",
250
+ "notifications.success.terminated": "Sessão encerrada com sucesso",
251
+ "notifications.success.terminatedAll": "Todas as sessões encerradas com sucesso",
252
+ "notifications.success.blocked": "Usuário bloqueado com sucesso",
253
+ "notifications.success.unblocked": "Usuário desbloqueado com sucesso",
254
+ "notifications.success.exported": "{count} sessões exportadas para {format}",
255
+ "notifications.success.cleaned": "{count} sessões inativas excluídas com sucesso!",
256
+ "notifications.success.keyCopied": "Chave de criptografia copiada para a área de transferência!",
257
+ "notifications.success.keyGenerated": "Chave de criptografia de 32 caracteres gerada!",
258
+ "notifications.success.envCopied": "Copiado no formato .env!",
259
+ "notifications.success.templateCopied": "Modelo copiado!",
260
+ "notifications.success.htmlCopied": "Modelo HTML copiado!",
261
+ "notifications.success.textCopied": "Modelo de texto copiado!",
262
+ "notifications.success.defaultLoaded": "Modelo padrão carregado!",
263
+ "notifications.success.variableCopied": "{variable} copiado!",
264
+ "notifications.success.validated": "Modelo válido! {found}/{total} variáveis encontradas.",
265
+ "notifications.warning.premiumRequired": "Licença Premium necessária para função de exportação",
266
+ "notifications.warning.noVariables": "[AVISO] Nenhuma variável encontrada. Adicione pelo menos uma variável.",
267
+ "notifications.warning.settingsLoad": "Não foi possível carregar as configurações do servidor. Usando valores padrão.",
268
+ "notifications.error.terminate": "Falha ao encerrar a sessão",
269
+ "notifications.error.terminateAll": "Falha ao encerrar as sessões",
270
+ "notifications.error.delete": "Falha ao excluir a sessão",
271
+ "notifications.error.block": "Falha ao atualizar o status do usuário",
272
+ "notifications.error.save": "Falha ao salvar as configurações no servidor",
273
+ "notifications.error.clean": "Falha ao excluir as sessões inativas",
274
+ "notifications.error.export": "Falha ao exportar as sessões",
275
+ "notifications.info.templateStats": "O modelo tem {lines} linhas e {chars} caracteres"
276
+ };
277
+ exports.default = pt;
@@ -0,0 +1,277 @@
1
+ const pt = {
2
+ "plugin.name": "Session Manager",
3
+ "plugin.description": "Rastrear login/logout e atividade de sessões de usuários",
4
+ "settings.section": "Session Manager",
5
+ "settings.sessions": "Sessões Ativas",
6
+ "settings.upgrade": "Atualizar",
7
+ "settings.general": "Geral",
8
+ "settings.analytics": "Análises",
9
+ "settings.license": "Licença",
10
+ "widget.online-users.title": "Usuários Online",
11
+ "widget.stats.onlineNow": "Online agora",
12
+ "widget.stats.offline": "Offline",
13
+ "widget.stats.last15min": "Últimos 15 min",
14
+ "widget.stats.last30min": "Últimos 30 min",
15
+ "widget.stats.totalUsers": "Usuários totais",
16
+ "widget.stats.blocked": "Bloqueados",
17
+ "homepage.title": "Session Manager",
18
+ "homepage.subtitle": "Monitorar e gerenciar sessões de usuários em tempo real",
19
+ "homepage.stats.active": "Ativo",
20
+ "homepage.stats.idle": "Inativo",
21
+ "homepage.stats.loggedOut": "Desconectado",
22
+ "homepage.stats.terminated": "Encerrado",
23
+ "homepage.stats.total": "Total",
24
+ "homepage.export.csv": "Exportar CSV",
25
+ "homepage.export.json": "Exportar JSON",
26
+ "homepage.loading": "Carregando sessões...",
27
+ "homepage.allSessions": "Todas as Sessões",
28
+ "homepage.search.placeholder": "Buscar por usuário, endereço IP ou dispositivo...",
29
+ "homepage.filter.all": "Todas as Sessões",
30
+ "homepage.filter.active": "Ativas (menos de 15 min)",
31
+ "homepage.filter.idle": "Inativas (mais de 15 min)",
32
+ "homepage.filter.loggedout": "Desconectadas",
33
+ "homepage.filter.terminated": "Encerradas",
34
+ "homepage.entries.10": "10 entradas",
35
+ "homepage.entries.25": "25 entradas",
36
+ "homepage.entries.50": "50 entradas",
37
+ "homepage.entries.100": "100 entradas",
38
+ "homepage.showing": "Exibindo {count} de {total} sessões",
39
+ "homepage.showingFiltered": 'Exibindo {count} de {total} sessões (filtrado por "{query}")',
40
+ "homepage.table.status": "Status",
41
+ "homepage.table.user": "Usuário",
42
+ "homepage.table.device": "Dispositivo",
43
+ "homepage.table.ipAddress": "Endereço IP",
44
+ "homepage.table.loginTime": "Hora de Login",
45
+ "homepage.table.lastActive": "Última Atividade",
46
+ "homepage.table.actions": "Ações",
47
+ "homepage.status.active": "Ativo",
48
+ "homepage.status.idle": "Inativo",
49
+ "homepage.status.loggedOut": "Desconectado",
50
+ "homepage.status.terminated": "Encerrado",
51
+ "homepage.user.unknown": "Desconhecido",
52
+ "homepage.time.minAgo": "há {minutes} min",
53
+ "homepage.actions.viewDetails": "Ver Detalhes",
54
+ "homepage.actions.terminate": "Encerrar (Logout)",
55
+ "homepage.actions.alreadyInactive": "Já inativo",
56
+ "homepage.actions.deletePermanently": "Excluir Permanentemente",
57
+ "homepage.empty.title": "Ainda não há sessões",
58
+ "homepage.empty.description": "As sessões aparecerão aqui quando os usuários fizerem login na sua aplicação",
59
+ "homepage.noResults.title": "Nenhuma sessão encontrada",
60
+ "homepage.noResults.description": "Tente ajustar sua consulta de busca ou filtros para encontrar sessões",
61
+ "homepage.confirm.terminate": "Tem certeza de que deseja encerrar esta sessão?\n\nIsso definirá isActive como false (o usuário será desconectado).",
62
+ "homepage.confirm.delete": "[AVISO] Isso EXCLUIRÁ PERMANENTEMENTE esta sessão do banco de dados!\n\nEsta ação não pode ser desfeita.\n\nTem certeza?",
63
+ "modal.title": "Detalhes da Sessão",
64
+ "modal.id": "ID: {id}",
65
+ "modal.status.online": "ONLINE",
66
+ "modal.status.offline": "OFFLINE",
67
+ "modal.section.user": "Usuário",
68
+ "modal.section.device": "Dispositivo",
69
+ "modal.section.timeline": "Linha do Tempo",
70
+ "modal.section.security": "Localização e Segurança",
71
+ "modal.section.technical": "Detalhes Técnicos",
72
+ "modal.user.username": "Nome de usuário",
73
+ "modal.user.email": "E-mail",
74
+ "modal.user.id": "ID do Usuário",
75
+ "modal.user.na": "N/D",
76
+ "modal.device.device": "Dispositivo",
77
+ "modal.device.browser": "Navegador",
78
+ "modal.device.os": "Sistema Operacional",
79
+ "modal.device.ip": "IP",
80
+ "modal.timeline.login": "Login",
81
+ "modal.timeline.lastActive": "Última Atividade",
82
+ "modal.timeline.idleTime": "Tempo Inativo",
83
+ "modal.timeline.logout": "Logout",
84
+ "modal.timeline.minutes": "{minutes} min",
85
+ "modal.security.loading": "Carregando dados de localização...",
86
+ "modal.security.country": "País",
87
+ "modal.security.city": "Cidade",
88
+ "modal.security.timezone": "Fuso horário",
89
+ "modal.security.score": "Segurança",
90
+ "modal.security.vpn": "VPN",
91
+ "modal.security.proxy": "Proxy",
92
+ "modal.security.vpnWarning": "[AVISO] Sim",
93
+ "modal.security.no": "Não",
94
+ "modal.premium.title": "Análise de Localização e Segurança",
95
+ "modal.premium.description": "Desbloqueie recursos premium para obter geolocalização IP, pontuação de segurança e detecção de VPN/Proxy para cada sessão",
96
+ "modal.premium.upgrade": "Atualizar para Premium",
97
+ "modal.technical.show": "Mostrar Detalhes",
98
+ "modal.technical.hide": "Ocultar Detalhes",
99
+ "modal.actions.close": "Fechar",
100
+ "modal.actions.terminate": "Encerrar Sessão",
101
+ "modal.confirm.terminate": "Tem certeza de que deseja encerrar esta sessão?",
102
+ "panel.title": "Info da Sessão",
103
+ "panel.loading": "Carregando...",
104
+ "panel.status.active": "ATIVO",
105
+ "panel.status.offline": "OFFLINE",
106
+ "panel.sessions.count": "{count} sessão(ões) ativa(s)",
107
+ "panel.sessions.title": "Sessões Ativas",
108
+ "panel.sessions.active": "Ativo",
109
+ "panel.sessions.activeNow": "Ativo agora",
110
+ "panel.sessions.activeAgo": "Ativo há {minutes} min",
111
+ "panel.sessions.more": "+{count} sessão(ões) adicional(is)",
112
+ "panel.blocked.title": "Usuário bloqueado",
113
+ "panel.blocked.description": "Autenticação desabilitada",
114
+ "panel.empty.title": "Sem sessões ativas",
115
+ "panel.empty.description": "O usuário ainda não fez login",
116
+ "panel.actions.title": "Ações",
117
+ "panel.actions.terminateAll": "Encerrar Todas as Sessões",
118
+ "panel.actions.blockUser": "Bloquear Usuário",
119
+ "panel.actions.unblockUser": "Desbloquear Usuário",
120
+ "settings.title": "Configurações do Session Manager",
121
+ "settings.subtitle": "Configurar rastreamento de sessões, segurança e notificações por e-mail",
122
+ "settings.save": "Salvar Alterações",
123
+ "settings.saving": "Salvando...",
124
+ "settings.noChanges": "Sem Alterações",
125
+ "settings.reset": "Redefinir",
126
+ "settings.license.title": "Status Atual da Licença",
127
+ "settings.license.premium": "Premium",
128
+ "settings.license.advanced": "Advanced",
129
+ "settings.license.enterprise": "Enterprise",
130
+ "settings.general.title": "Configurações Gerais",
131
+ "settings.general.description": "Configuração básica de rastreamento de sessões",
132
+ "settings.general.timeout.title": "TEMPO LIMITE DE SESSÃO",
133
+ "settings.general.timeout.inactivity": "Tempo Limite de Inatividade",
134
+ "settings.general.timeout.inactivityHint": "Sessões inativas por mais de {minutes} minutos serão marcadas como offline",
135
+ "settings.general.timeout.5min": "5 minutos (Muito rigoroso)",
136
+ "settings.general.timeout.10min": "10 minutos (Rigoroso)",
137
+ "settings.general.timeout.15min": "15 minutos (Recomendado)",
138
+ "settings.general.timeout.30min": "30 minutos (Moderado)",
139
+ "settings.general.timeout.1hour": "1 hora (Relaxado)",
140
+ "settings.general.timeout.2hours": "2 horas (Muito relaxado)",
141
+ "settings.general.rateLimit.title": "Limite de Taxa de Última Vista",
142
+ "settings.general.rateLimit.hint": "Evita gravações excessivas no banco de dados. Atualizações limitadas a uma vez a cada {seconds} segundos",
143
+ "settings.general.rateLimit.10sec": "10 segundos",
144
+ "settings.general.rateLimit.30sec": "30 segundos (Recomendado)",
145
+ "settings.general.rateLimit.1min": "1 minuto",
146
+ "settings.general.rateLimit.2min": "2 minutos",
147
+ "settings.general.rateLimit.5min": "5 minutos",
148
+ "settings.general.cleanup.title": "LIMPEZA E RETENÇÃO AUTOMÁTICAS",
149
+ "settings.general.cleanup.interval": "Intervalo de Limpeza",
150
+ "settings.general.cleanup.intervalHint": "Sessões inativas são automaticamente limpas a cada {minutes} minutos",
151
+ "settings.general.cleanup.15min": "15 minutos",
152
+ "settings.general.cleanup.30min": "30 minutos (Recomendado)",
153
+ "settings.general.cleanup.1hour": "1 hora",
154
+ "settings.general.cleanup.2hours": "2 horas",
155
+ "settings.general.retention.title": "Período de Retenção",
156
+ "settings.general.retention.hint": "Sessões antigas são excluídas após {days}",
157
+ "settings.general.retention.hintNever": "Sessões antigas nunca são excluídas",
158
+ "settings.general.retention.7days": "7 dias",
159
+ "settings.general.retention.30days": "30 dias",
160
+ "settings.general.retention.60days": "60 dias",
161
+ "settings.general.retention.90days": "90 dias (Recomendado)",
162
+ "settings.general.retention.180days": "180 dias",
163
+ "settings.general.retention.1year": "1 ano",
164
+ "settings.general.retention.forever": "Para sempre",
165
+ "settings.general.danger.title": "Zona de Perigo",
166
+ "settings.general.danger.description": "Limpar Todas Inativas: Exclui permanentemente todas as sessões inativas. Isso não pode ser desfeito.",
167
+ "settings.general.danger.cleanNow": "Limpar Agora",
168
+ "settings.general.danger.confirm": "[AVISO] Isso excluirá permanentemente TODAS as sessões inativas.\n\nContinuar?",
169
+ "settings.security.title": "Configurações de Segurança",
170
+ "settings.security.description": "Políticas de segurança e proteção contra ameaças",
171
+ "settings.security.options": "OPÇÕES DE SEGURANÇA",
172
+ "settings.security.encryption.title": "Gerador de Chave de Criptografia JWT",
173
+ "settings.security.encryption.description": "Gere uma chave de criptografia segura de 32 caracteres para armazenamento de tokens JWT. Esta chave é usada para criptografar tokens antes de salvá-los no banco de dados.",
174
+ "settings.security.encryption.important": "Importante",
175
+ "settings.security.encryption.envHint": "Adicione esta chave ao seu arquivo .env como SESSION_ENCRYPTION_KEY para produção.",
176
+ "settings.security.encryption.label": "Chave de Criptografia Gerada",
177
+ "settings.security.encryption.placeholder": "Clique em 'Gerar Chave' para criar uma chave segura",
178
+ "settings.security.encryption.show": "Mostrar",
179
+ "settings.security.encryption.hide": "Ocultar",
180
+ "settings.security.encryption.generate": "Gerar Chave",
181
+ "settings.security.encryption.copy": "Copiar para Área de Transferência",
182
+ "settings.security.encryption.copyEnv": "Copiar para .env",
183
+ "settings.security.encryption.envLabel": "Adicionar ao arquivo .env:",
184
+ "settings.security.blockSuspicious.title": "Bloquear Sessões Suspeitas",
185
+ "settings.security.blockSuspicious.description": "Bloquear automaticamente sessões de VPNs, proxies ou IPs de ameaças",
186
+ "settings.security.geolocation.title": "Geolocalização IP",
187
+ "settings.security.geolocation.description": "Obter dados de localização para cada sessão (Premium)",
188
+ "settings.security.scoring.title": "Pontuação de Segurança",
189
+ "settings.security.scoring.description": "Calcular pontuações de segurança e detectar ameaças (Premium)",
190
+ "settings.security.maxFailed.title": "Máx. Tentativas de Login Falhadas",
191
+ "settings.security.maxFailed.hint": "O usuário será bloqueado após {count} tentativas falhadas",
192
+ "settings.email.title": "Notificações por E-mail (Advanced)",
193
+ "settings.email.description": "Alertas por e-mail para eventos de segurança",
194
+ "settings.email.alerts.title": "ALERTAS POR E-MAIL",
195
+ "settings.email.alerts.subtitle": "Enviar alertas de segurança para usuários por e-mail",
196
+ "settings.email.enable.title": "Habilitar Alertas por E-mail",
197
+ "settings.email.enable.description": "Enviar alertas de segurança para logins suspeitos, novas localizações e uso de VPN/Proxy",
198
+ "settings.email.types.title": "TIPOS DE ALERTA",
199
+ "settings.email.types.suspicious": "Login Suspeito",
200
+ "settings.email.types.newLocation": "Nova Localização",
201
+ "settings.email.types.vpnProxy": "VPN/Proxy",
202
+ "settings.email.templates.title": "MODELOS DE E-MAIL",
203
+ "settings.email.templates.subtitle": "Personalizar modelos de notificação com variáveis dinâmicas",
204
+ "settings.email.templates.subject": "Assunto do E-mail",
205
+ "settings.email.templates.subjectPlaceholder": "Digite o assunto do e-mail...",
206
+ "settings.email.templates.variables": "Variáveis Disponíveis (clique para copiar)",
207
+ "settings.email.templates.html.title": "Modelo HTML",
208
+ "settings.email.templates.html.badge": "Modelo Principal",
209
+ "settings.email.templates.html.description": "Modelo HTML para notificações. Use variáveis como {{user.email}} para conteúdo dinâmico.",
210
+ "settings.email.templates.html.loadDefault": "Carregar Padrão",
211
+ "settings.email.templates.html.copy": "Copiar Modelo",
212
+ "settings.email.templates.html.validate": "Validar",
213
+ "settings.email.templates.html.info": "Info do Modelo",
214
+ "settings.email.templates.text.title": "Modelo de Texto",
215
+ "settings.email.templates.text.badge": "Alternativo",
216
+ "settings.email.templates.text.description": "Versão texto simples (sem HTML) como alternativa para clientes de e-mail antigos",
217
+ "settings.email.templates.text.loadDefault": "Carregar Padrão",
218
+ "settings.email.templates.text.copy": "Copiar Modelo",
219
+ "settings.email.templates.tab.suspicious": "Login Suspeito",
220
+ "settings.email.templates.tab.newLocation": "Nova Localização",
221
+ "settings.email.templates.tab.vpnProxy": "VPN/Proxy",
222
+ "settings.webhooks.title": "Integração de Webhooks (Advanced)",
223
+ "settings.webhooks.description": "Integração com Discord e Slack",
224
+ "settings.webhooks.enable.title": "Habilitar Webhooks",
225
+ "settings.webhooks.enable.description": "Enviar eventos de sessão para Discord, Slack ou endpoints personalizados",
226
+ "settings.webhooks.discord.title": "URL do Webhook do Discord",
227
+ "settings.webhooks.discord.placeholder": "https://discord.com/api/webhooks/123456789/abcdefghijklmnopqrstuvwxyz...",
228
+ "settings.webhooks.discord.hint": "Opcional: Postar alertas de sessão no seu canal do Discord",
229
+ "settings.webhooks.slack.title": "URL do Webhook do Slack",
230
+ "settings.webhooks.slack.placeholder": "https://hooks.slack.com/services/XXXX/XXXX/XXXX",
231
+ "settings.webhooks.slack.hint": "Opcional: Postar alertas de sessão no seu workspace do Slack",
232
+ "settings.webhooks.characters": "{count} caracteres",
233
+ "settings.footer.title": "Configurações Armazenadas no Banco de Dados",
234
+ "settings.footer.description": "Todas as configurações são armazenadas no seu banco de dados Strapi e compartilhadas entre todos os usuários administradores. As alterações entram em vigor imediatamente - não é necessário reiniciar o servidor! Modelos de e-mail, webhooks e opções de segurança são todos gerenciados a partir desta interface.",
235
+ "common.loading": "Carregando...",
236
+ "common.save": "Salvar",
237
+ "common.cancel": "Cancelar",
238
+ "common.close": "Fechar",
239
+ "common.delete": "Excluir",
240
+ "common.confirm": "Confirmar",
241
+ "common.yes": "Sim",
242
+ "common.no": "Não",
243
+ "common.on": "em",
244
+ "common.active": "ATIVO",
245
+ "common.inactive": "INATIVO",
246
+ "notifications.success.saved": "Configurações salvas com sucesso no banco de dados!",
247
+ "notifications.success.deleted": "Sessão excluída permanentemente",
248
+ "notifications.success.terminated": "Sessão encerrada com sucesso",
249
+ "notifications.success.terminatedAll": "Todas as sessões encerradas com sucesso",
250
+ "notifications.success.blocked": "Usuário bloqueado com sucesso",
251
+ "notifications.success.unblocked": "Usuário desbloqueado com sucesso",
252
+ "notifications.success.exported": "{count} sessões exportadas para {format}",
253
+ "notifications.success.cleaned": "{count} sessões inativas excluídas com sucesso!",
254
+ "notifications.success.keyCopied": "Chave de criptografia copiada para a área de transferência!",
255
+ "notifications.success.keyGenerated": "Chave de criptografia de 32 caracteres gerada!",
256
+ "notifications.success.envCopied": "Copiado no formato .env!",
257
+ "notifications.success.templateCopied": "Modelo copiado!",
258
+ "notifications.success.htmlCopied": "Modelo HTML copiado!",
259
+ "notifications.success.textCopied": "Modelo de texto copiado!",
260
+ "notifications.success.defaultLoaded": "Modelo padrão carregado!",
261
+ "notifications.success.variableCopied": "{variable} copiado!",
262
+ "notifications.success.validated": "Modelo válido! {found}/{total} variáveis encontradas.",
263
+ "notifications.warning.premiumRequired": "Licença Premium necessária para função de exportação",
264
+ "notifications.warning.noVariables": "[AVISO] Nenhuma variável encontrada. Adicione pelo menos uma variável.",
265
+ "notifications.warning.settingsLoad": "Não foi possível carregar as configurações do servidor. Usando valores padrão.",
266
+ "notifications.error.terminate": "Falha ao encerrar a sessão",
267
+ "notifications.error.terminateAll": "Falha ao encerrar as sessões",
268
+ "notifications.error.delete": "Falha ao excluir a sessão",
269
+ "notifications.error.block": "Falha ao atualizar o status do usuário",
270
+ "notifications.error.save": "Falha ao salvar as configurações no servidor",
271
+ "notifications.error.clean": "Falha ao excluir as sessões inativas",
272
+ "notifications.error.export": "Falha ao exportar as sessões",
273
+ "notifications.info.templateStats": "O modelo tem {lines} linhas e {chars} caracteres"
274
+ };
275
+ export {
276
+ pt as default
277
+ };
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
  const react = require("react");
3
3
  const admin = require("@strapi/strapi/admin");
4
- const index = require("./index-DC8Y0qxx.js");
4
+ const index = require("./index-CWcvrfXc.js");
5
5
  const useLicense = () => {
6
6
  const { get } = admin.useFetchClient();
7
7
  const [isPremium, setIsPremium] = react.useState(false);
@@ -1,6 +1,6 @@
1
1
  import { useState, useEffect } from "react";
2
2
  import { useFetchClient } from "@strapi/strapi/admin";
3
- import { a as pluginId } from "./index-DBRS3kt5.mjs";
3
+ import { a as pluginId } from "./index-DQO9bNP7.mjs";
4
4
  const useLicense = () => {
5
5
  const { get } = useFetchClient();
6
6
  const [isPremium, setIsPremium] = useState(false);
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
- const index = require("../_chunks/index-DC8Y0qxx.js");
2
+ const index = require("../_chunks/index-CWcvrfXc.js");
3
3
  module.exports = index.index;
@@ -1,4 +1,4 @@
1
- import { i } from "../_chunks/index-DBRS3kt5.mjs";
1
+ import { i } from "../_chunks/index-DQO9bNP7.mjs";
2
2
  export {
3
3
  i as default
4
4
  };