aimeat 1.4.8 → 1.6.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/dist/.env.example +15 -0
- package/dist/bin/aimeat.js +0 -0
- package/dist/locales/en.json +139 -6
- package/dist/locales/fi.json +139 -6
- package/dist/public/css/views/admin.css +97 -0
- package/dist/public/css/views/profile.css +37 -0
- package/dist/public/js/services/admin.js +12 -1
- package/dist/public/js/services/boards.js +6 -3
- package/dist/public/js/services/memory.js +10 -0
- package/dist/public/views/admin/federation-tab.js +153 -7
- package/dist/public/views/admin/ghii-tab.js +2 -0
- package/dist/public/views/admin/stats-tab.js +480 -187
- package/dist/public/views/admin.js +1 -1
- package/dist/public/views/profile/access-tab.js +161 -58
- package/dist/public/views/profile/agents-tab.js +13 -1
- package/dist/public/views/profile/boards-tab.js +12 -0
- package/dist/public/views/profile/data-wallet-tab.js +29 -2
- package/dist/public/views/profile/knowledge-tab.js +64 -2
- package/dist/public/views/profile/landing-page.js +9 -6
- package/dist/public/views/profile/memory-tab.js +92 -4
- package/dist/src/auth/jwt.d.ts +6 -0
- package/dist/src/auth/jwt.d.ts.map +1 -1
- package/dist/src/auth/jwt.js +6 -0
- package/dist/src/auth/jwt.js.map +1 -1
- package/dist/src/auth/middleware.d.ts +7 -0
- package/dist/src/auth/middleware.d.ts.map +1 -1
- package/dist/src/auth/middleware.js +20 -0
- package/dist/src/auth/middleware.js.map +1 -1
- package/dist/src/auth/node-keys.d.ts.map +1 -1
- package/dist/src/auth/node-keys.js +3 -0
- package/dist/src/auth/node-keys.js.map +1 -1
- package/dist/src/config.d.ts +13 -0
- package/dist/src/config.d.ts.map +1 -1
- package/dist/src/config.js +14 -0
- package/dist/src/config.js.map +1 -1
- package/dist/src/index.js +41 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/extensions.js +1 -1
- package/dist/src/mcp/extensions.js.map +1 -1
- package/dist/src/middleware/federation-proxy.d.ts +35 -0
- package/dist/src/middleware/federation-proxy.d.ts.map +1 -0
- package/dist/src/middleware/federation-proxy.js +92 -0
- package/dist/src/middleware/federation-proxy.js.map +1 -0
- package/dist/src/middleware/rate-limit.d.ts.map +1 -1
- package/dist/src/middleware/rate-limit.js +4 -1
- package/dist/src/middleware/rate-limit.js.map +1 -1
- package/dist/src/models/schemas.d.ts +45 -0
- package/dist/src/models/schemas.d.ts.map +1 -1
- package/dist/src/models/schemas.js +37 -1
- package/dist/src/models/schemas.js.map +1 -1
- package/dist/src/routes/actions.d.ts.map +1 -1
- package/dist/src/routes/actions.js +8 -2
- package/dist/src/routes/actions.js.map +1 -1
- package/dist/src/routes/admin-agents.d.ts.map +1 -1
- package/dist/src/routes/admin-agents.js +1 -0
- package/dist/src/routes/admin-agents.js.map +1 -1
- package/dist/src/routes/admin-features.d.ts.map +1 -1
- package/dist/src/routes/admin-features.js +2 -0
- package/dist/src/routes/admin-features.js.map +1 -1
- package/dist/src/routes/admin-monitoring.d.ts.map +1 -1
- package/dist/src/routes/admin-monitoring.js +7 -0
- package/dist/src/routes/admin-monitoring.js.map +1 -1
- package/dist/src/routes/admin.d.ts.map +1 -1
- package/dist/src/routes/admin.js +33 -15
- package/dist/src/routes/admin.js.map +1 -1
- package/dist/src/routes/agents.d.ts.map +1 -1
- package/dist/src/routes/agents.js +38 -5
- package/dist/src/routes/agents.js.map +1 -1
- package/dist/src/routes/apps.d.ts.map +1 -1
- package/dist/src/routes/apps.js +5 -1
- package/dist/src/routes/apps.js.map +1 -1
- package/dist/src/routes/auth.d.ts.map +1 -1
- package/dist/src/routes/auth.js +19 -1
- package/dist/src/routes/auth.js.map +1 -1
- package/dist/src/routes/boards.d.ts.map +1 -1
- package/dist/src/routes/boards.js +14 -7
- package/dist/src/routes/boards.js.map +1 -1
- package/dist/src/routes/consent.d.ts.map +1 -1
- package/dist/src/routes/consent.js +2 -1
- package/dist/src/routes/consent.js.map +1 -1
- package/dist/src/routes/disputes.js +4 -4
- package/dist/src/routes/disputes.js.map +1 -1
- package/dist/src/routes/extensions.d.ts.map +1 -1
- package/dist/src/routes/extensions.js +72 -21
- package/dist/src/routes/extensions.js.map +1 -1
- package/dist/src/routes/federation-auth.d.ts +15 -0
- package/dist/src/routes/federation-auth.d.ts.map +1 -0
- package/dist/src/routes/federation-auth.js +122 -0
- package/dist/src/routes/federation-auth.js.map +1 -0
- package/dist/src/routes/federation-genesis.d.ts +2 -1
- package/dist/src/routes/federation-genesis.d.ts.map +1 -1
- package/dist/src/routes/federation-genesis.js +58 -2
- package/dist/src/routes/federation-genesis.js.map +1 -1
- package/dist/src/routes/federation-peer.d.ts.map +1 -1
- package/dist/src/routes/federation-peer.js +91 -2
- package/dist/src/routes/federation-peer.js.map +1 -1
- package/dist/src/routes/federation-sync.d.ts.map +1 -1
- package/dist/src/routes/federation-sync.js +14 -1
- package/dist/src/routes/federation-sync.js.map +1 -1
- package/dist/src/routes/federation.d.ts +2 -1
- package/dist/src/routes/federation.d.ts.map +1 -1
- package/dist/src/routes/federation.js +4 -2
- package/dist/src/routes/federation.js.map +1 -1
- package/dist/src/routes/flags.d.ts.map +1 -1
- package/dist/src/routes/flags.js +2 -1
- package/dist/src/routes/flags.js.map +1 -1
- package/dist/src/routes/foundry.d.ts.map +1 -1
- package/dist/src/routes/foundry.js +2 -2
- package/dist/src/routes/foundry.js.map +1 -1
- package/dist/src/routes/generator.d.ts.map +1 -1
- package/dist/src/routes/generator.js +2 -2
- package/dist/src/routes/generator.js.map +1 -1
- package/dist/src/routes/ghii.d.ts +2 -1
- package/dist/src/routes/ghii.d.ts.map +1 -1
- package/dist/src/routes/ghii.js +154 -34
- package/dist/src/routes/ghii.js.map +1 -1
- package/dist/src/routes/libs.js +42 -10
- package/dist/src/routes/libs.js.map +1 -1
- package/dist/src/routes/memory.d.ts.map +1 -1
- package/dist/src/routes/memory.js +164 -0
- package/dist/src/routes/memory.js.map +1 -1
- package/dist/src/routes/owners.d.ts.map +1 -1
- package/dist/src/routes/owners.js +104 -8
- package/dist/src/routes/owners.js.map +1 -1
- package/dist/src/routes/packages.js +1 -1
- package/dist/src/routes/packages.js.map +1 -1
- package/dist/src/routes/stats.d.ts +13 -0
- package/dist/src/routes/stats.d.ts.map +1 -1
- package/dist/src/routes/stats.js +54 -4
- package/dist/src/routes/stats.js.map +1 -1
- package/dist/src/routes/storage-files.d.ts.map +1 -1
- package/dist/src/routes/storage-files.js +5 -1
- package/dist/src/routes/storage-files.js.map +1 -1
- package/dist/src/routes/upload.js +2 -2
- package/dist/src/routes/upload.js.map +1 -1
- package/dist/src/routes/wallet.d.ts.map +1 -1
- package/dist/src/routes/wallet.js +2 -1
- package/dist/src/routes/wallet.js.map +1 -1
- package/dist/src/routes/work.d.ts.map +1 -1
- package/dist/src/routes/work.js +2 -1
- package/dist/src/routes/work.js.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts +3 -1
- package/dist/src/server-bootstrap/routes-loader.d.ts.map +1 -1
- package/dist/src/server-bootstrap/routes-loader.js +10 -7
- package/dist/src/server-bootstrap/routes-loader.js.map +1 -1
- package/dist/src/server-bootstrap/service-init.d.ts +2 -0
- package/dist/src/server-bootstrap/service-init.d.ts.map +1 -1
- package/dist/src/server-bootstrap/service-init.js +10 -1
- package/dist/src/server-bootstrap/service-init.js.map +1 -1
- package/dist/src/server-bootstrap/static-files.d.ts.map +1 -1
- package/dist/src/server-bootstrap/static-files.js +10 -7
- package/dist/src/server-bootstrap/static-files.js.map +1 -1
- package/dist/src/server.d.ts.map +1 -1
- package/dist/src/server.js +5 -2
- package/dist/src/server.js.map +1 -1
- package/dist/src/services/capability-invoke.d.ts.map +1 -1
- package/dist/src/services/capability-invoke.js +5 -18
- package/dist/src/services/capability-invoke.js.map +1 -1
- package/dist/src/services/config-schema.d.ts.map +1 -1
- package/dist/src/services/config-schema.js +13 -0
- package/dist/src/services/config-schema.js.map +1 -1
- package/dist/src/services/consent.d.ts.map +1 -1
- package/dist/src/services/consent.js +1 -10
- package/dist/src/services/consent.js.map +1 -1
- package/dist/src/services/directory.d.ts.map +1 -1
- package/dist/src/services/directory.js +10 -4
- package/dist/src/services/directory.js.map +1 -1
- package/dist/src/services/email.d.ts +17 -4
- package/dist/src/services/email.d.ts.map +1 -1
- package/dist/src/services/email.js +30 -12
- package/dist/src/services/email.js.map +1 -1
- package/dist/src/services/extension-runtime.d.ts.map +1 -1
- package/dist/src/services/extension-runtime.js +5 -0
- package/dist/src/services/extension-runtime.js.map +1 -1
- package/dist/src/services/federation.d.ts +8 -6
- package/dist/src/services/federation.d.ts.map +1 -1
- package/dist/src/services/federation.js +53 -1
- package/dist/src/services/federation.js.map +1 -1
- package/dist/src/services/mailbox-notification.d.ts +17 -0
- package/dist/src/services/mailbox-notification.d.ts.map +1 -1
- package/dist/src/services/mailbox-notification.js +25 -0
- package/dist/src/services/mailbox-notification.js.map +1 -1
- package/dist/src/services/memory-replication.d.ts.map +1 -1
- package/dist/src/services/memory-replication.js +3 -0
- package/dist/src/services/memory-replication.js.map +1 -1
- package/dist/src/services/morsel.d.ts.map +1 -1
- package/dist/src/services/morsel.js +10 -9
- package/dist/src/services/morsel.js.map +1 -1
- package/dist/src/services/password.d.ts +1 -6
- package/dist/src/services/password.d.ts.map +1 -1
- package/dist/src/services/password.js +19 -10
- package/dist/src/services/password.js.map +1 -1
- package/dist/src/services/push.d.ts +16 -0
- package/dist/src/services/push.d.ts.map +1 -1
- package/dist/src/services/push.js +20 -0
- package/dist/src/services/push.js.map +1 -1
- package/dist/src/services/quota.d.ts.map +1 -1
- package/dist/src/services/quota.js +2 -1
- package/dist/src/services/quota.js.map +1 -1
- package/dist/src/services/scheduler.d.ts.map +1 -1
- package/dist/src/services/scheduler.js +17 -1
- package/dist/src/services/scheduler.js.map +1 -1
- package/dist/src/services/stats.d.ts +42 -2
- package/dist/src/services/stats.d.ts.map +1 -1
- package/dist/src/services/stats.js +176 -1
- package/dist/src/services/stats.js.map +1 -1
- package/dist/src/services/totp.js +2 -2
- package/dist/src/storage/interface.d.ts +15 -2
- package/dist/src/storage/interface.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.d.ts +12 -1
- package/dist/src/storage/providers/mongodb/index.d.ts.map +1 -1
- package/dist/src/storage/providers/mongodb/index.js +110 -10
- package/dist/src/storage/providers/mongodb/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/index.d.ts +12 -1
- package/dist/src/storage/providers/sqlite/index.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/index.js +118 -19
- package/dist/src/storage/providers/sqlite/index.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/action.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/action.js +5 -4
- package/dist/src/storage/providers/sqlite/repos/action.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/agent.js +5 -4
- package/dist/src/storage/providers/sqlite/repos/agent.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/board.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/board.js +3 -2
- package/dist/src/storage/providers/sqlite/repos/board.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/consent.d.ts +1 -0
- package/dist/src/storage/providers/sqlite/repos/consent.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/consent.js +4 -0
- package/dist/src/storage/providers/sqlite/repos/consent.js.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/storage-file.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/repos/storage-file.js +4 -2
- package/dist/src/storage/providers/sqlite/repos/storage-file.js.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.d.ts.map +1 -1
- package/dist/src/storage/providers/sqlite/schema.js +29 -0
- package/dist/src/storage/providers/sqlite/schema.js.map +1 -1
- package/dist/src/storage/repositories/board.repository.d.ts +1 -1
- package/dist/src/storage/repositories/board.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/consent.repository.d.ts +1 -0
- package/dist/src/storage/repositories/consent.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/device-auth.repository.d.ts +1 -0
- package/dist/src/storage/repositories/device-auth.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/extension-instance.repository.d.ts +1 -0
- package/dist/src/storage/repositories/extension-instance.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/federation.repository.d.ts +1 -0
- package/dist/src/storage/repositories/federation.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/index.d.ts +1 -0
- package/dist/src/storage/repositories/index.d.ts.map +1 -1
- package/dist/src/storage/repositories/knowledge.repository.d.ts +2 -0
- package/dist/src/storage/repositories/knowledge.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/moderation.repository.d.ts +1 -0
- package/dist/src/storage/repositories/moderation.repository.d.ts.map +1 -1
- package/dist/src/storage/repositories/stats.repository.d.ts +12 -0
- package/dist/src/storage/repositories/stats.repository.d.ts.map +1 -0
- package/dist/src/storage/repositories/stats.repository.js +7 -0
- package/dist/src/storage/repositories/stats.repository.js.map +1 -0
- package/dist/src/storage/storage-factory.js +1 -0
- package/dist/src/storage/storage-factory.js.map +1 -1
- package/dist/src/utils/password-validation.d.ts +8 -0
- package/dist/src/utils/password-validation.d.ts.map +1 -0
- package/dist/src/utils/password-validation.js +25 -0
- package/dist/src/utils/password-validation.js.map +1 -0
- package/dist/src/utils/service-summary.d.ts +70 -0
- package/dist/src/utils/service-summary.d.ts.map +1 -0
- package/dist/src/utils/service-summary.js +105 -0
- package/dist/src/utils/service-summary.js.map +1 -0
- package/package.json +97 -75
- package/prisma/schema.prisma +30 -6
package/dist/.env.example
CHANGED
|
@@ -34,6 +34,21 @@ AIMEAT_PORT=40050
|
|
|
34
34
|
# CORS: comma-separated list of allowed origins, or * for all (default: *)
|
|
35
35
|
# AIMEAT_CORS_ALLOWED_ORIGINS=*
|
|
36
36
|
# AIMEAT_CORS_ALLOWED_ORIGINS=https://portal.aimeat.fi,https://my-app.example.com
|
|
37
|
+
# ── Security Limits ────────────────────────────────────────────
|
|
38
|
+
# AIMEAT_LOGIN_RATE_LIMIT_MAX=15 # Max login attempts per window (default: 15)
|
|
39
|
+
# AIMEAT_LOGIN_RATE_LIMIT_WINDOW_MS=60000 # Login rate limit window in ms (default: 60s)
|
|
40
|
+
# AIMEAT_REGISTRATION_RATE_LIMIT_MAX=5 # Max registrations per window (default: 5)
|
|
41
|
+
# AIMEAT_REGISTRATION_RATE_LIMIT_WINDOW_MS=60000
|
|
42
|
+
# AIMEAT_ADMIN_AUTH_RATE_LIMIT_MAX=5 # Max admin auth attempts per window (default: 5)
|
|
43
|
+
# AIMEAT_ADMIN_AUTH_RATE_LIMIT_WINDOW_MS=60000
|
|
44
|
+
# AIMEAT_PASSWORD_LOCKOUT_ATTEMPTS=5 # Failed attempts before lockout (default: 5)
|
|
45
|
+
# AIMEAT_PASSWORD_LOCKOUT_MINUTES=15 # Lockout duration in minutes (default: 15)
|
|
46
|
+
# AIMEAT_JSON_BODY_LIMIT_MB=5 # Default JSON body limit (default: 5MB)
|
|
47
|
+
# AIMEAT_JSON_BODY_LIMIT_LARGE_MB=15 # Large body limit for apps/extensions (default: 15MB)
|
|
48
|
+
# AIMEAT_EXT_MAX_DEBIT=100 # Max morsels per extension wallet.consume() call
|
|
49
|
+
# AIMEAT_FEDERATION_AUTH_POLICY=disabled # disabled | all_peers | specific_peers
|
|
50
|
+
# AIMEAT_FEDERATION_DEFAULT_SCOPES=memory:read,catalogue:read
|
|
51
|
+
|
|
37
52
|
# ── Auth & Tokens ──────────────────────────────────────────────
|
|
38
53
|
# AIMEAT_JWT_TTL=3600 # JWT lifetime in seconds (default: 1h)
|
|
39
54
|
# AIMEAT_OTK_TTL_MS=300000 # OTK expiry in ms (default: 5min)
|
package/dist/bin/aimeat.js
CHANGED
|
File without changes
|
package/dist/locales/en.json
CHANGED
|
@@ -213,6 +213,10 @@
|
|
|
213
213
|
"close": "Close",
|
|
214
214
|
"error": "Error",
|
|
215
215
|
"unknownError": "Unknown error",
|
|
216
|
+
"federate": "Federate",
|
|
217
|
+
"federateTooltip": "Make visible across the federation network",
|
|
218
|
+
"federated": "Federated",
|
|
219
|
+
"notFederated": "Local only",
|
|
216
220
|
"stats": {
|
|
217
221
|
"agents": "Agents",
|
|
218
222
|
"morsels": "Morsels",
|
|
@@ -535,7 +539,17 @@
|
|
|
535
539
|
"noAgents": "No agents registered yet. When you connect an AI assistant via MCP, its memory entries will appear here.",
|
|
536
540
|
"setupMcp": "Set up MCP →",
|
|
537
541
|
"agent": "Agent",
|
|
538
|
-
"defaultAgent": "Default agent"
|
|
542
|
+
"defaultAgent": "Default agent",
|
|
543
|
+
"pullFromHome": "Copy from home",
|
|
544
|
+
"pushToHome": "Save to home",
|
|
545
|
+
"pullSuccess": "Entry copied from home node",
|
|
546
|
+
"pushSuccess": "Entry saved to home node",
|
|
547
|
+
"federatedSession": "Federated session. Some entries may be on your home node.",
|
|
548
|
+
"syncedToFederation": "Synced",
|
|
549
|
+
"shareToFederation": "Share",
|
|
550
|
+
"stopSharing": "Unshare",
|
|
551
|
+
"shareSuccess": "Shared to federation",
|
|
552
|
+
"unshareSuccess": "Removed from federation"
|
|
539
553
|
},
|
|
540
554
|
"files": {
|
|
541
555
|
"title": "Stored Files",
|
|
@@ -724,7 +738,9 @@
|
|
|
724
738
|
"error": "Could not load federation info.",
|
|
725
739
|
"peers": "Connected Peers",
|
|
726
740
|
"online": "Online",
|
|
727
|
-
"offline": "Offline"
|
|
741
|
+
"offline": "Offline",
|
|
742
|
+
"statusConnected": "Connected to {count} nodes",
|
|
743
|
+
"statusStandalone": "Standalone"
|
|
728
744
|
},
|
|
729
745
|
"access": {
|
|
730
746
|
"title": "Access Codes & Tokens",
|
|
@@ -744,7 +760,17 @@
|
|
|
744
760
|
"keepSafe": "Keep this safe — it's your owner recovery key.",
|
|
745
761
|
"keyCopied": "Key copied to clipboard!",
|
|
746
762
|
"mcpEndpoint": "MCP Endpoint",
|
|
747
|
-
"mcpDesc": "Use this URL to connect MCP-compatible AI platforms to your node."
|
|
763
|
+
"mcpDesc": "Use this URL to connect MCP-compatible AI platforms to your node.",
|
|
764
|
+
"fedTitle": "Federation Access",
|
|
765
|
+
"fedDesc": "Control which federation nodes can verify your identity for remote login.",
|
|
766
|
+
"fedAddNode": "Add Node",
|
|
767
|
+
"fedNodeId": "Node ID",
|
|
768
|
+
"fedAllowAll": "Allow all federation nodes",
|
|
769
|
+
"fedAllowAllWarn": "Any node can verify your identity",
|
|
770
|
+
"fedNoConsents": "No federation login access granted.",
|
|
771
|
+
"fedRemove": "Remove",
|
|
772
|
+
"fedGranted": "Auth access granted",
|
|
773
|
+
"fedRevoked": "Auth access revoked"
|
|
748
774
|
},
|
|
749
775
|
"nodes": {
|
|
750
776
|
"title": "Personal Nodes",
|
|
@@ -2203,7 +2229,8 @@
|
|
|
2203
2229
|
"errUserShort": "Username must be at least 3 characters",
|
|
2204
2230
|
"errPassShort": "Password must be at least 4 characters",
|
|
2205
2231
|
"errWrongPass": "Wrong password for that username.",
|
|
2206
|
-
"
|
|
2232
|
+
"connectingHome": "Connecting to home node...",
|
|
2233
|
+
"errFederatedLogin": "Could not reach home node {remoteNode} for federated login.",
|
|
2207
2234
|
"loggedIn": "logged in",
|
|
2208
2235
|
"logoutBtn": "Logout",
|
|
2209
2236
|
"usernameLabel": "Username",
|
|
@@ -2315,6 +2342,7 @@
|
|
|
2315
2342
|
"created": "Created",
|
|
2316
2343
|
"trust": "Trust",
|
|
2317
2344
|
"lastSeen": "Last Seen",
|
|
2345
|
+
"lastLogin": "Last Login",
|
|
2318
2346
|
"morselSupply": "Morsel Supply",
|
|
2319
2347
|
"todayActivity": "Today's Activity",
|
|
2320
2348
|
"morselPolicy": "Morsel Policy",
|
|
@@ -2966,6 +2994,63 @@
|
|
|
2966
2994
|
"pushUnsubscribeBtn": "Unsubscribe",
|
|
2967
2995
|
"pushNoBrowserSupport": "This browser does not support push notifications",
|
|
2968
2996
|
|
|
2997
|
+
"blocked": "Blocked",
|
|
2998
|
+
"blockedCooldown": "Cooldown",
|
|
2999
|
+
"blockedDisabled": "Disabled",
|
|
3000
|
+
"blockedQuietHours": "Quiet Hours",
|
|
3001
|
+
"breakdownFailed": "Failed",
|
|
3002
|
+
"breakdownRetried": "Retried",
|
|
3003
|
+
"breakdownSent": "Sent",
|
|
3004
|
+
"breakdownType": "Type",
|
|
3005
|
+
"channelEmail": "Email",
|
|
3006
|
+
"channelPush": "Push",
|
|
3007
|
+
"channels": "Channels",
|
|
3008
|
+
"emailDelivery": "Email Delivery",
|
|
3009
|
+
"emailType": {
|
|
3010
|
+
"group_send": "Group Send",
|
|
3011
|
+
"magic_link": "Magic Link",
|
|
3012
|
+
"match_suggestion": "Match Suggestion",
|
|
3013
|
+
"notification": "Notification",
|
|
3014
|
+
"verification": "Verification"
|
|
3015
|
+
},
|
|
3016
|
+
"emailsFailed": "Emails Failed",
|
|
3017
|
+
"emailsRetried": "Emails Retried",
|
|
3018
|
+
"emailsSent": "Emails Sent",
|
|
3019
|
+
"expiredSubs": "Expired Subs",
|
|
3020
|
+
"live": "live",
|
|
3021
|
+
"mailboxNotifBlocked": "Mailbox Blocked",
|
|
3022
|
+
"mailboxNotifFailed": "Mailbox Failed",
|
|
3023
|
+
"mailboxNotifSent": "Mailbox Sent",
|
|
3024
|
+
"mailboxNotifications": "Mailbox Notifications",
|
|
3025
|
+
"period30Days": "30 Days",
|
|
3026
|
+
"period7Days": "7 Days",
|
|
3027
|
+
"periodAll": "All",
|
|
3028
|
+
"periodApply": "Apply",
|
|
3029
|
+
"periodCustom": "Custom",
|
|
3030
|
+
"periodFrom": "From",
|
|
3031
|
+
"periodLabel": "Period",
|
|
3032
|
+
"periodThisWeek": "This Week",
|
|
3033
|
+
"periodTo": "To",
|
|
3034
|
+
"periodToday": "Today",
|
|
3035
|
+
"weekMon": "Mon",
|
|
3036
|
+
"weekTue": "Tue",
|
|
3037
|
+
"weekWed": "Wed",
|
|
3038
|
+
"weekThu": "Thu",
|
|
3039
|
+
"weekFri": "Fri",
|
|
3040
|
+
"weekSat": "Sat",
|
|
3041
|
+
"weekSun": "Sun",
|
|
3042
|
+
"pushDelivery": "Push Notifications",
|
|
3043
|
+
"pushFailed": "Push Failed",
|
|
3044
|
+
"pushSent": "Push Sent",
|
|
3045
|
+
"pushType": {
|
|
3046
|
+
"board": "Board",
|
|
3047
|
+
"federation": "Federation",
|
|
3048
|
+
"general": "General",
|
|
3049
|
+
"organism": "Organism",
|
|
3050
|
+
"test": "Test",
|
|
3051
|
+
"work": "Work"
|
|
3052
|
+
},
|
|
3053
|
+
|
|
2969
3054
|
"totalEntries": "Total Entries",
|
|
2970
3055
|
"cities": "Cities",
|
|
2971
3056
|
"categories": "Categories",
|
|
@@ -3181,6 +3266,32 @@
|
|
|
3181
3266
|
"fedDepeeringExplain": "These peers are in the grace period before permanent removal. In-flight work can still complete.",
|
|
3182
3267
|
"fedDepeeringGrace": "Grace ends",
|
|
3183
3268
|
|
|
3269
|
+
"fedShareCatalogue": "Share Catalogue",
|
|
3270
|
+
"fedReplicateMemory": "Replicate Memory",
|
|
3271
|
+
"fedAllowRouting": "Allow Routing",
|
|
3272
|
+
"fedAllowAuth": "Allow Federated Login",
|
|
3273
|
+
"fedAuthPolicyTitle": "Federation Auth Policy",
|
|
3274
|
+
"fedAuthPolicyDesc": "Control whether users from other nodes can log in here and what they can do.",
|
|
3275
|
+
"fedAuthDisabled": "Disabled (no federated logins)",
|
|
3276
|
+
"fedAuthAllPeers": "All peers (any active peer's users can log in)",
|
|
3277
|
+
"fedAuthSpecificPeers": "Specific peers (per-peer control)",
|
|
3278
|
+
"fedDefaultScopes": "Default scopes for federated users:",
|
|
3279
|
+
"fedPeerMode": "Peer Mode",
|
|
3280
|
+
"fedPeerModeFederation": "Federation",
|
|
3281
|
+
"fedPeerModePrivate": "Private P2P",
|
|
3282
|
+
"fedPolicyUpdated": "Peer policy updated",
|
|
3283
|
+
"fedPolicySectionTitle": "Policy",
|
|
3284
|
+
|
|
3285
|
+
"fedNetworkDirectoryTitle": "Network Directory",
|
|
3286
|
+
"fedNetworkDirectoryDesc": "Services and data available across the federation network.",
|
|
3287
|
+
"fedNetworkDirType": "Type",
|
|
3288
|
+
"fedNetworkDirName": "Name",
|
|
3289
|
+
"fedNetworkDirNode": "Node",
|
|
3290
|
+
"fedNetworkDirCategory": "Category",
|
|
3291
|
+
"fedNetworkDirPrice": "Price",
|
|
3292
|
+
"fedNetworkDirEmpty": "No federated services discovered yet. Services appear when peers share their catalogue.",
|
|
3293
|
+
"fedNetworkDirSearch": "Search services...",
|
|
3294
|
+
|
|
3184
3295
|
"genesisExplain": "Genesis peers are the founding nodes of a federation cluster. The genesis node is the first node that creates the federation, and it manages peer approvals, key exchange, and cluster policies.",
|
|
3185
3296
|
"genesisHelpTitle": "What are genesis peers?",
|
|
3186
3297
|
"genesisHelpDetail": "When you create a new federation, your node becomes the genesis (origin) node. Other nodes request to join, and you approve or reject them here. Genesis peers have special privileges: they can set cluster-wide policies, approve new members, and suspend misbehaving nodes. Approved peers can exchange data according to federation rules.",
|
|
@@ -3211,6 +3322,17 @@
|
|
|
3211
3322
|
"cfgGroup_totp": "TOTP",
|
|
3212
3323
|
"cfgGroup_matching": "Matching",
|
|
3213
3324
|
"cfgGroup_extensions": "Extensions",
|
|
3325
|
+
"cfgGroup_security": "Security",
|
|
3326
|
+
"cfg_security_login_rate_limit_max": "Login rate limit (max per window)",
|
|
3327
|
+
"cfg_security_login_rate_limit_window_ms": "Login rate limit window (ms)",
|
|
3328
|
+
"cfg_security_registration_rate_limit_max": "Registration rate limit (max per window)",
|
|
3329
|
+
"cfg_security_registration_rate_limit_window_ms": "Registration rate limit window (ms)",
|
|
3330
|
+
"cfg_security_admin_auth_rate_limit_max": "Admin auth rate limit (max per window)",
|
|
3331
|
+
"cfg_security_admin_auth_rate_limit_window_ms": "Admin auth rate limit window (ms)",
|
|
3332
|
+
"cfg_security_password_lockout_attempts": "Password lockout after N failures",
|
|
3333
|
+
"cfg_security_password_lockout_minutes": "Password lockout duration (minutes)",
|
|
3334
|
+
"cfg_security_json_body_limit_mb": "JSON body size limit (MB)",
|
|
3335
|
+
"cfg_security_json_body_limit_large_mb": "Large body size limit for apps/extensions (MB)",
|
|
3214
3336
|
"cfgGroup_marketplace": "Marketplace",
|
|
3215
3337
|
"cfgGroup_push": "Push",
|
|
3216
3338
|
"cfgGroup_eudiw": "EUDIW",
|
|
@@ -3841,7 +3963,8 @@
|
|
|
3841
3963
|
"errUserShort": "Username must be at least 3 characters",
|
|
3842
3964
|
"errPassShort": "Password must be at least 4 characters",
|
|
3843
3965
|
"errWrongPass": "Wrong password for that username.",
|
|
3844
|
-
"
|
|
3966
|
+
"connectingHome": "Connecting to home node...",
|
|
3967
|
+
"errFederatedLogin": "Could not reach home node {remoteNode} for federated login.",
|
|
3845
3968
|
"loggedIn": "logged in",
|
|
3846
3969
|
"logoutBtn": "Logout",
|
|
3847
3970
|
"whyTitle": "✨ What do you get?",
|
|
@@ -3911,7 +4034,12 @@
|
|
|
3911
4034
|
"revoke": "Revoke",
|
|
3912
4035
|
"never": "Never",
|
|
3913
4036
|
"revoking": "Revoking...",
|
|
3914
|
-
"revoked": "Consent revoked"
|
|
4037
|
+
"revoked": "Consent revoked",
|
|
4038
|
+
"scopeFederation": "Federation",
|
|
4039
|
+
"scopeAuth": "Login Access",
|
|
4040
|
+
"filterAll": "All",
|
|
4041
|
+
"filterFederation": "Federation",
|
|
4042
|
+
"filterAuth": "Login Access"
|
|
3915
4043
|
},
|
|
3916
4044
|
"audit": {
|
|
3917
4045
|
"title": "Audit Report",
|
|
@@ -4280,6 +4408,11 @@
|
|
|
4280
4408
|
"owner": "My Agents",
|
|
4281
4409
|
"shared": "My Agents"
|
|
4282
4410
|
},
|
|
4411
|
+
"federate": "Federate",
|
|
4412
|
+
"federated": "Federated",
|
|
4413
|
+
"notFederated": "Local only",
|
|
4414
|
+
"federateSuccess": "Package shared to federation",
|
|
4415
|
+
"unfederateSuccess": "Package removed from federation",
|
|
4283
4416
|
"operator": {
|
|
4284
4417
|
"tabLabel": "Knowledge",
|
|
4285
4418
|
"review": "Review",
|
package/dist/locales/fi.json
CHANGED
|
@@ -213,6 +213,10 @@
|
|
|
213
213
|
"close": "Sulje",
|
|
214
214
|
"error": "Virhe",
|
|
215
215
|
"unknownError": "Tuntematon virhe",
|
|
216
|
+
"federate": "Federoi",
|
|
217
|
+
"federateTooltip": "Tee näkyväksi federaatioverkossa",
|
|
218
|
+
"federated": "Federoitu",
|
|
219
|
+
"notFederated": "Vain paikallinen",
|
|
216
220
|
"stats": {
|
|
217
221
|
"agents": "Agentit",
|
|
218
222
|
"morsels": "Muruset",
|
|
@@ -535,7 +539,17 @@
|
|
|
535
539
|
"noAgents": "Ei rekisteröityjä agentteja. Kun yhdistät AI-assistentin MCP:llä, sen muistimerkinnät näkyvät täällä.",
|
|
536
540
|
"setupMcp": "Aseta MCP →",
|
|
537
541
|
"agent": "Agentti",
|
|
538
|
-
"defaultAgent": "Oletusagentti"
|
|
542
|
+
"defaultAgent": "Oletusagentti",
|
|
543
|
+
"pullFromHome": "Kopioi kotisolmulta",
|
|
544
|
+
"pushToHome": "Tallenna kotisolmulle",
|
|
545
|
+
"pullSuccess": "Merkinta kopioitu kotisolmulta",
|
|
546
|
+
"pushSuccess": "Merkinta tallennettu kotisolmulle",
|
|
547
|
+
"federatedSession": "Federoitu istunto. Osa merkinnoista voi olla kotisolmullasi.",
|
|
548
|
+
"syncedToFederation": "Synkronoitu",
|
|
549
|
+
"shareToFederation": "Jaa",
|
|
550
|
+
"stopSharing": "Lopeta jakaminen",
|
|
551
|
+
"shareSuccess": "Jaettu federaatioon",
|
|
552
|
+
"unshareSuccess": "Poistettu federaatiosta"
|
|
539
553
|
},
|
|
540
554
|
"files": {
|
|
541
555
|
"title": "Tallennetut tiedostot",
|
|
@@ -724,7 +738,9 @@
|
|
|
724
738
|
"error": "Federaatiotietojen lataus epäonnistui.",
|
|
725
739
|
"peers": "Yhdistetyt vertaiset",
|
|
726
740
|
"online": "Online",
|
|
727
|
-
"offline": "Offline"
|
|
741
|
+
"offline": "Offline",
|
|
742
|
+
"statusConnected": "Yhdistetty {count} solmuun",
|
|
743
|
+
"statusStandalone": "Itsenäinen"
|
|
728
744
|
},
|
|
729
745
|
"access": {
|
|
730
746
|
"title": "Pääsykoodit & tokenit",
|
|
@@ -744,7 +760,17 @@
|
|
|
744
760
|
"keepSafe": "Pidä tämä turvassa — se on palautusavaimesi.",
|
|
745
761
|
"keyCopied": "Avain kopioitu leikepöydälle!",
|
|
746
762
|
"mcpEndpoint": "MCP-päätepiste",
|
|
747
|
-
"mcpDesc": "Käytä tätä URL:iä yhdistääksesi MCP-yhteensopivat AI-alustat solmuusi."
|
|
763
|
+
"mcpDesc": "Käytä tätä URL:iä yhdistääksesi MCP-yhteensopivat AI-alustat solmuusi.",
|
|
764
|
+
"fedTitle": "Federaatioyhteys",
|
|
765
|
+
"fedDesc": "Hallinnoi mitkä solmut voivat todentaa henkilöllisyytesi etäkirjautumista varten.",
|
|
766
|
+
"fedAddNode": "Lisää solmu",
|
|
767
|
+
"fedNodeId": "Solmun ID",
|
|
768
|
+
"fedAllowAll": "Salli kaikki federaatiosolmut",
|
|
769
|
+
"fedAllowAllWarn": "Mikä tahansa solmu voi todentaa henkilöllisyytesi",
|
|
770
|
+
"fedNoConsents": "Federaatiokirjautumista ei myönnetty.",
|
|
771
|
+
"fedRemove": "Poista",
|
|
772
|
+
"fedGranted": "Todennusoikeus myönnetty",
|
|
773
|
+
"fedRevoked": "Todennusoikeus peruutettu"
|
|
748
774
|
},
|
|
749
775
|
"nodes": {
|
|
750
776
|
"title": "Henkilökohtaiset solmut",
|
|
@@ -2203,7 +2229,8 @@
|
|
|
2203
2229
|
"errUserShort": "Käyttäjänimen tulee olla vähintään 3 merkkiä",
|
|
2204
2230
|
"errPassShort": "Salasanan tulee olla vähintään 4 merkkiä",
|
|
2205
2231
|
"errWrongPass": "Väärä salasana tälle käyttäjänimelle.",
|
|
2206
|
-
"
|
|
2232
|
+
"connectingHome": "Yhdistetään kotisolmuun...",
|
|
2233
|
+
"errFederatedLogin": "Kotisolmuun {remoteNode} ei saatu yhteyttä federoitua kirjautumista varten.",
|
|
2207
2234
|
"loggedIn": "kirjautuneena",
|
|
2208
2235
|
"logoutBtn": "Kirjaudu ulos",
|
|
2209
2236
|
"usernameLabel": "Käyttäjänimi",
|
|
@@ -2315,6 +2342,7 @@
|
|
|
2315
2342
|
"created": "Luotu",
|
|
2316
2343
|
"trust": "Luottamus",
|
|
2317
2344
|
"lastSeen": "Viimeksi nähty",
|
|
2345
|
+
"lastLogin": "Viimeisin kirjautuminen",
|
|
2318
2346
|
"morselSupply": "Murusten tarjonta",
|
|
2319
2347
|
"todayActivity": "Päivän aktiviteetti",
|
|
2320
2348
|
"morselPolicy": "Muruspolitiikka",
|
|
@@ -2966,6 +2994,63 @@
|
|
|
2966
2994
|
"pushUnsubscribeBtn": "Peru tilaus",
|
|
2967
2995
|
"pushNoBrowserSupport": "Tämä selain ei tue push-ilmoituksia",
|
|
2968
2996
|
|
|
2997
|
+
"blocked": "Estetyt",
|
|
2998
|
+
"blockedCooldown": "Jäähdytys",
|
|
2999
|
+
"blockedDisabled": "Pois käytöstä",
|
|
3000
|
+
"blockedQuietHours": "Hiljaiset tunnit",
|
|
3001
|
+
"breakdownFailed": "Epäonnistuneet",
|
|
3002
|
+
"breakdownRetried": "Uudelleenyritykset",
|
|
3003
|
+
"breakdownSent": "Lähetetyt",
|
|
3004
|
+
"breakdownType": "Tyyppi",
|
|
3005
|
+
"channelEmail": "Sähköposti",
|
|
3006
|
+
"channelPush": "Push",
|
|
3007
|
+
"channels": "Kanavat",
|
|
3008
|
+
"emailDelivery": "Sähköpostin toimitus",
|
|
3009
|
+
"emailType": {
|
|
3010
|
+
"group_send": "Ryhmälähetys",
|
|
3011
|
+
"magic_link": "Kirjautumislinkki",
|
|
3012
|
+
"match_suggestion": "Ehdotus",
|
|
3013
|
+
"notification": "Ilmoitus",
|
|
3014
|
+
"verification": "Vahvistus"
|
|
3015
|
+
},
|
|
3016
|
+
"emailsFailed": "Epäonnistuneet",
|
|
3017
|
+
"emailsRetried": "Uudelleenyritykset",
|
|
3018
|
+
"emailsSent": "Lähetetyt",
|
|
3019
|
+
"expiredSubs": "Vanhentuneet",
|
|
3020
|
+
"live": "live",
|
|
3021
|
+
"mailboxNotifBlocked": "Postilaatikko estetyt",
|
|
3022
|
+
"mailboxNotifFailed": "Postilaatikko epäonn.",
|
|
3023
|
+
"mailboxNotifSent": "Postilaatikko lähet.",
|
|
3024
|
+
"mailboxNotifications": "Postilaatikkoilmoitukset",
|
|
3025
|
+
"period30Days": "30 päivää",
|
|
3026
|
+
"period7Days": "7 päivää",
|
|
3027
|
+
"periodAll": "Kaikki",
|
|
3028
|
+
"periodApply": "Hae",
|
|
3029
|
+
"periodCustom": "Mukautettu",
|
|
3030
|
+
"periodFrom": "Alkaen",
|
|
3031
|
+
"periodLabel": "Ajanjakso",
|
|
3032
|
+
"periodThisWeek": "Tämä viikko",
|
|
3033
|
+
"periodTo": "Asti",
|
|
3034
|
+
"periodToday": "Tänään",
|
|
3035
|
+
"weekMon": "Ma",
|
|
3036
|
+
"weekTue": "Ti",
|
|
3037
|
+
"weekWed": "Ke",
|
|
3038
|
+
"weekThu": "To",
|
|
3039
|
+
"weekFri": "Pe",
|
|
3040
|
+
"weekSat": "La",
|
|
3041
|
+
"weekSun": "Su",
|
|
3042
|
+
"pushDelivery": "Push-ilmoitukset",
|
|
3043
|
+
"pushFailed": "Epäonnistuneet",
|
|
3044
|
+
"pushSent": "Lähetetyt",
|
|
3045
|
+
"pushType": {
|
|
3046
|
+
"board": "Keskustelu",
|
|
3047
|
+
"federation": "Federaatio",
|
|
3048
|
+
"general": "Yleinen",
|
|
3049
|
+
"organism": "Organismi",
|
|
3050
|
+
"test": "Testi",
|
|
3051
|
+
"work": "Työ"
|
|
3052
|
+
},
|
|
3053
|
+
|
|
2969
3054
|
"totalEntries": "Merkintöjä yhteensä",
|
|
2970
3055
|
"cities": "Kaupungit",
|
|
2971
3056
|
"categories": "Kategoriat",
|
|
@@ -3181,6 +3266,32 @@
|
|
|
3181
3266
|
"fedDepeeringExplain": "Nämä vertaiset ovat armonaikajaksolla ennen lopullista poistamista. Keskeneräiset työt voivat vielä valmistua.",
|
|
3182
3267
|
"fedDepeeringGrace": "Armonaika päättyy",
|
|
3183
3268
|
|
|
3269
|
+
"fedShareCatalogue": "Jaa katalogi",
|
|
3270
|
+
"fedReplicateMemory": "Replikoi muisti",
|
|
3271
|
+
"fedAllowRouting": "Salli reititys",
|
|
3272
|
+
"fedAllowAuth": "Salli federaatiokirjautuminen",
|
|
3273
|
+
"fedAuthPolicyTitle": "Federaation todennuspolitiikka",
|
|
3274
|
+
"fedAuthPolicyDesc": "Hallitse voivatko muiden solmujen kayttajat kirjautua tanne ja mita he voivat tehda.",
|
|
3275
|
+
"fedAuthDisabled": "Pois kaytosta (ei federaatiokirjautumisia)",
|
|
3276
|
+
"fedAuthAllPeers": "Kaikki vertaiset (kaikkien aktiivisten vertaisten kayttajat voivat kirjautua)",
|
|
3277
|
+
"fedAuthSpecificPeers": "Tietyt vertaiset (vertaiskohtainen hallinta)",
|
|
3278
|
+
"fedDefaultScopes": "Oletuslaajuudet federoiduille kayttajille:",
|
|
3279
|
+
"fedPeerMode": "Vertaistila",
|
|
3280
|
+
"fedPeerModeFederation": "Federaatio",
|
|
3281
|
+
"fedPeerModePrivate": "Yksityinen P2P",
|
|
3282
|
+
"fedPolicyUpdated": "Vertaispolitiikka päivitetty",
|
|
3283
|
+
"fedPolicySectionTitle": "Politiikka",
|
|
3284
|
+
|
|
3285
|
+
"fedNetworkDirectoryTitle": "Verkkohakemisto",
|
|
3286
|
+
"fedNetworkDirectoryDesc": "Palvelut ja data saatavilla federaatioverkossa.",
|
|
3287
|
+
"fedNetworkDirType": "Tyyppi",
|
|
3288
|
+
"fedNetworkDirName": "Nimi",
|
|
3289
|
+
"fedNetworkDirNode": "Solmu",
|
|
3290
|
+
"fedNetworkDirCategory": "Kategoria",
|
|
3291
|
+
"fedNetworkDirPrice": "Hinta",
|
|
3292
|
+
"fedNetworkDirEmpty": "Federoituja palveluita ei vielä löydetty. Palvelut näkyvät kun vertaissolmut jakavat kataloginsa.",
|
|
3293
|
+
"fedNetworkDirSearch": "Hae palveluita...",
|
|
3294
|
+
|
|
3184
3295
|
"genesisExplain": "Genesis-vertaiset ovat federaatioklusterin perustajasolmuja. Genesis-solmu on ensimmäinen solmu, joka luo federaation, ja se hallinnoi vertaishyväksyntöjä, avainten vaihtoa ja klusterikäytäntöjä.",
|
|
3185
3296
|
"genesisHelpTitle": "Mitä genesis-vertaiset ovat?",
|
|
3186
3297
|
"genesisHelpDetail": "Kun luot uuden federaation, solmustasi tulee genesis-solmu (alkuperä). Muut solmut pyytävät liittymistä, ja hyväksyt tai hylkäät ne täällä. Genesis-vertaisilla on erityisoikeuksia: ne voivat asettaa klusterinlaajuisia käytäntöjä, hyväksyä uusia jäseniä ja keskeyttää väärin käyttäytyvät solmut. Hyväksytyt vertaiset voivat vaihtaa dataa federaatiosääntöjen mukaisesti.",
|
|
@@ -3211,6 +3322,17 @@
|
|
|
3211
3322
|
"cfgGroup_totp": "TOTP",
|
|
3212
3323
|
"cfgGroup_matching": "Matchaus",
|
|
3213
3324
|
"cfgGroup_extensions": "Laajennukset",
|
|
3325
|
+
"cfgGroup_security": "Turvallisuus",
|
|
3326
|
+
"cfg_security_login_rate_limit_max": "Kirjautumisen nopeusrajoitus (max per ikkuna)",
|
|
3327
|
+
"cfg_security_login_rate_limit_window_ms": "Kirjautumisen nopeusrajoitusikkuna (ms)",
|
|
3328
|
+
"cfg_security_registration_rate_limit_max": "Rekisteroinnin nopeusrajoitus (max per ikkuna)",
|
|
3329
|
+
"cfg_security_registration_rate_limit_window_ms": "Rekisteroinnin nopeusrajoitusikkuna (ms)",
|
|
3330
|
+
"cfg_security_admin_auth_rate_limit_max": "Admin-todennuksen nopeusrajoitus (max per ikkuna)",
|
|
3331
|
+
"cfg_security_admin_auth_rate_limit_window_ms": "Admin-todennuksen nopeusrajoitusikkuna (ms)",
|
|
3332
|
+
"cfg_security_password_lockout_attempts": "Salasanalukitus N epaonnistumisen jalkeen",
|
|
3333
|
+
"cfg_security_password_lockout_minutes": "Salasanalukituksen kesto (minuuttia)",
|
|
3334
|
+
"cfg_security_json_body_limit_mb": "JSON-sisallon kokoraja (Mt)",
|
|
3335
|
+
"cfg_security_json_body_limit_large_mb": "Suuri kokoraja sovelluksille/laajennuksille (Mt)",
|
|
3214
3336
|
"cfgGroup_marketplace": "Kauppapaikka",
|
|
3215
3337
|
"cfgGroup_push": "Push-ilmoitukset",
|
|
3216
3338
|
"cfgGroup_eudiw": "EUDIW",
|
|
@@ -3841,7 +3963,8 @@
|
|
|
3841
3963
|
"errUserShort": "Käyttäjänimen tulee olla vähintään 3 merkkiä",
|
|
3842
3964
|
"errPassShort": "Salasanan tulee olla vähintään 4 merkkiä",
|
|
3843
3965
|
"errWrongPass": "Väärä salasana tälle käyttäjänimelle.",
|
|
3844
|
-
"
|
|
3966
|
+
"connectingHome": "Yhdistetään kotisolmuun...",
|
|
3967
|
+
"errFederatedLogin": "Kotisolmuun {remoteNode} ei saatu yhteyttä federoitua kirjautumista varten.",
|
|
3845
3968
|
"loggedIn": "kirjautuneena",
|
|
3846
3969
|
"logoutBtn": "Kirjaudu ulos",
|
|
3847
3970
|
"whyTitle": "✨ Mitä saat?",
|
|
@@ -3911,7 +4034,12 @@
|
|
|
3911
4034
|
"revoke": "Peru",
|
|
3912
4035
|
"never": "Ei koskaan",
|
|
3913
4036
|
"revoking": "Perutaan...",
|
|
3914
|
-
"revoked": "Suostumus peruttu"
|
|
4037
|
+
"revoked": "Suostumus peruttu",
|
|
4038
|
+
"scopeFederation": "Federaatio",
|
|
4039
|
+
"scopeAuth": "Kirjautumisoikeus",
|
|
4040
|
+
"filterAll": "Kaikki",
|
|
4041
|
+
"filterFederation": "Federaatio",
|
|
4042
|
+
"filterAuth": "Kirjautumisoikeus"
|
|
3915
4043
|
},
|
|
3916
4044
|
"audit": {
|
|
3917
4045
|
"title": "Auditointiraportti",
|
|
@@ -4280,6 +4408,11 @@
|
|
|
4280
4408
|
"owner": "Omat agentit",
|
|
4281
4409
|
"shared": "Omat agentit"
|
|
4282
4410
|
},
|
|
4411
|
+
"federate": "Federoi",
|
|
4412
|
+
"federated": "Federoitu",
|
|
4413
|
+
"notFederated": "Vain paikallinen",
|
|
4414
|
+
"federateSuccess": "Paketti jaettu federaatioon",
|
|
4415
|
+
"unfederateSuccess": "Paketti poistettu federaatiosta",
|
|
4283
4416
|
"operator": {
|
|
4284
4417
|
"tabLabel": "Tietopankki",
|
|
4285
4418
|
"review": "Arvioi",
|
|
@@ -111,6 +111,7 @@
|
|
|
111
111
|
/* Cards */
|
|
112
112
|
.adm-grid { display: grid; gap: 16px; margin-bottom: 20px; }
|
|
113
113
|
.adm-grid-4 { grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); }
|
|
114
|
+
.adm-grid-3 { grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); }
|
|
114
115
|
.adm-grid-2 { grid-template-columns: repeat(auto-fit, minmax(340px, 1fr)); }
|
|
115
116
|
.adm-card {
|
|
116
117
|
background: var(--glass-bg, #FFFFFF);
|
|
@@ -575,3 +576,99 @@
|
|
|
575
576
|
.adm-member-add { display: flex; gap: 8px; align-items: center; }
|
|
576
577
|
.adm-member-add .adm-input { flex: 1; font-size: .85rem; }
|
|
577
578
|
.adm-font-mono { font-family: 'JetBrains Mono', monospace; }
|
|
579
|
+
|
|
580
|
+
/* ── Stats Time Range Selector ── */
|
|
581
|
+
.adm-time-range {
|
|
582
|
+
display: flex;
|
|
583
|
+
flex-wrap: wrap;
|
|
584
|
+
align-items: center;
|
|
585
|
+
gap: 8px;
|
|
586
|
+
margin-bottom: 20px;
|
|
587
|
+
padding: 12px 16px;
|
|
588
|
+
background: var(--glass-bg, #FFFFFF);
|
|
589
|
+
border: 1px solid var(--glass-border, #E5E7EB);
|
|
590
|
+
border-radius: 8px;
|
|
591
|
+
}
|
|
592
|
+
.adm-time-range-label {
|
|
593
|
+
font-size: 0.8rem;
|
|
594
|
+
color: var(--text-dim);
|
|
595
|
+
margin-right: 4px;
|
|
596
|
+
}
|
|
597
|
+
.adm-time-btn {
|
|
598
|
+
padding: 4px 12px;
|
|
599
|
+
font-size: 0.75rem;
|
|
600
|
+
border: 1px solid var(--glass-border, #E5E7EB);
|
|
601
|
+
border-radius: 6px;
|
|
602
|
+
background: transparent;
|
|
603
|
+
color: #1A1A2E;
|
|
604
|
+
cursor: pointer;
|
|
605
|
+
font-family: inherit;
|
|
606
|
+
transition: all 0.15s;
|
|
607
|
+
}
|
|
608
|
+
.adm-time-btn:hover { border-color: var(--accent); color: var(--accent); }
|
|
609
|
+
.adm-time-btn.active { background: var(--accent); color: #fff; border-color: var(--accent); }
|
|
610
|
+
.adm-time-custom {
|
|
611
|
+
display: flex;
|
|
612
|
+
align-items: center;
|
|
613
|
+
gap: 6px;
|
|
614
|
+
margin-left: auto;
|
|
615
|
+
}
|
|
616
|
+
.adm-time-custom input[type="date"] {
|
|
617
|
+
padding: 3px 8px;
|
|
618
|
+
font-size: 0.75rem;
|
|
619
|
+
border: 1px solid var(--glass-border, #E5E7EB);
|
|
620
|
+
border-radius: 4px;
|
|
621
|
+
background: #FAFAF8;
|
|
622
|
+
color: #1A1A2E;
|
|
623
|
+
font-family: inherit;
|
|
624
|
+
}
|
|
625
|
+
|
|
626
|
+
/* ── Stats Breakdown Table ── */
|
|
627
|
+
.adm-breakdown-table {
|
|
628
|
+
width: 100%;
|
|
629
|
+
border-collapse: collapse;
|
|
630
|
+
font-size: 0.78rem;
|
|
631
|
+
margin-top: 8px;
|
|
632
|
+
}
|
|
633
|
+
.adm-breakdown-table th {
|
|
634
|
+
text-align: left;
|
|
635
|
+
padding: 6px 10px;
|
|
636
|
+
color: var(--text-dim);
|
|
637
|
+
border-bottom: 1px solid var(--glass-border, #E5E7EB);
|
|
638
|
+
font-weight: 500;
|
|
639
|
+
}
|
|
640
|
+
.adm-breakdown-table td {
|
|
641
|
+
padding: 5px 10px;
|
|
642
|
+
border-bottom: 1px solid #F3F4F6;
|
|
643
|
+
}
|
|
644
|
+
.adm-breakdown-table td.num {
|
|
645
|
+
text-align: right;
|
|
646
|
+
font-variant-numeric: tabular-nums;
|
|
647
|
+
}
|
|
648
|
+
|
|
649
|
+
/* ── Stats Section Header Colors ── */
|
|
650
|
+
.adm-section-purple { color: #a855f7; }
|
|
651
|
+
.adm-section-cyan { color: #06b6d4; }
|
|
652
|
+
.adm-section-violet { color: #8b5cf6; }
|
|
653
|
+
.adm-section-amber { color: #f59e0b; }
|
|
654
|
+
.adm-section-red { color: #ef4444; }
|
|
655
|
+
|
|
656
|
+
/* ── Breakdown Table ── */
|
|
657
|
+
.adm-breakdown-table th.num { text-align: right; }
|
|
658
|
+
|
|
659
|
+
/* ── Stats Inline Breakdown ── */
|
|
660
|
+
.adm-date-separator { color: var(--text-dim); }
|
|
661
|
+
.adm-mailbox-inline { padding: 10px 16px; }
|
|
662
|
+
.adm-blocked-reasons { margin-bottom: 6px; color: var(--text-dim); }
|
|
663
|
+
.adm-channels-summary { color: var(--text-dim); }
|
|
664
|
+
|
|
665
|
+
.adm-badge-live {
|
|
666
|
+
display: inline-block;
|
|
667
|
+
font-size: 0.6rem;
|
|
668
|
+
padding: 1px 6px;
|
|
669
|
+
border-radius: 4px;
|
|
670
|
+
background: var(--accent);
|
|
671
|
+
color: #fff;
|
|
672
|
+
vertical-align: middle;
|
|
673
|
+
margin-left: 6px;
|
|
674
|
+
}
|
|
@@ -1240,6 +1240,7 @@
|
|
|
1240
1240
|
.pf .access-warn-text { font-size: .75rem; color: var(--warn); margin-top: .5rem; }
|
|
1241
1241
|
.pf .access-mcp-url { font-family: monospace; font-size: .85rem; color: var(--love3); }
|
|
1242
1242
|
.pf .access-mcp-desc { font-size: .75rem; color: var(--muted); margin-top: .3rem; }
|
|
1243
|
+
.pf .access-fed-add { margin-top: .5rem; }
|
|
1243
1244
|
|
|
1244
1245
|
/* ── Wallet tab ── */
|
|
1245
1246
|
.pf .wl-val-success { color: var(--success, #22c55e); }
|
|
@@ -1742,6 +1743,42 @@
|
|
|
1742
1743
|
color: var(--danger, #ef4444);
|
|
1743
1744
|
}
|
|
1744
1745
|
|
|
1746
|
+
/* --- Federation toggle (knowledge-tab) --- */
|
|
1747
|
+
.pf .kpkg-fed-toggle {
|
|
1748
|
+
cursor: pointer;
|
|
1749
|
+
border: none;
|
|
1750
|
+
font-size: .7rem;
|
|
1751
|
+
padding: .15rem .5rem;
|
|
1752
|
+
border-radius: 6px;
|
|
1753
|
+
font-weight: 700;
|
|
1754
|
+
letter-spacing: .03em;
|
|
1755
|
+
}
|
|
1756
|
+
.pf .kpkg-fed-toggle:disabled { opacity: .5; cursor: wait; }
|
|
1757
|
+
|
|
1758
|
+
/* --- Data Wallet scope filter buttons --- */
|
|
1759
|
+
.pf .dw-scope-filters {
|
|
1760
|
+
display: flex;
|
|
1761
|
+
gap: 4px;
|
|
1762
|
+
flex-shrink: 0;
|
|
1763
|
+
}
|
|
1764
|
+
.pf .dw-filter-row {
|
|
1765
|
+
flex-wrap: wrap;
|
|
1766
|
+
gap: 6px;
|
|
1767
|
+
}
|
|
1768
|
+
|
|
1769
|
+
/* --- Memory federation badge --- */
|
|
1770
|
+
.pf .pf-fed-badge {
|
|
1771
|
+
font-size: .65rem;
|
|
1772
|
+
padding: .1rem .4rem;
|
|
1773
|
+
margin-left: 4px;
|
|
1774
|
+
}
|
|
1775
|
+
|
|
1776
|
+
/* --- Federation standalone variant --- */
|
|
1777
|
+
.pf .pf-federation-standalone {
|
|
1778
|
+
color: var(--text-dim, #6B7280);
|
|
1779
|
+
background: var(--bg-dim, #f5f5f5);
|
|
1780
|
+
}
|
|
1781
|
+
|
|
1745
1782
|
.pf-gen-test-component.pf-gen-test-skipped .pf-gen-test-badge {
|
|
1746
1783
|
background: var(--bg-dim);
|
|
1747
1784
|
color: var(--text-muted);
|