blockmine 1.25.0 → 1.27.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.
Files changed (165) hide show
  1. package/CHANGELOG.md +46 -1
  2. package/backend/cli.js +1 -1
  3. package/backend/package.json +2 -2
  4. package/backend/prisma/migrations/20260328173000_add_plugin_source_ref/migration.sql +2 -0
  5. package/backend/prisma/migrations/migration_lock.toml +2 -2
  6. package/backend/prisma/schema.prisma +2 -0
  7. package/backend/src/api/routes/apiKeys.js +8 -0
  8. package/backend/src/api/routes/bots.js +258 -9
  9. package/backend/src/api/routes/eventGraphs.js +151 -1
  10. package/backend/src/api/routes/health.js +38 -0
  11. package/backend/src/api/routes/nodeRegistry.js +63 -0
  12. package/backend/src/api/routes/plugins.js +254 -29
  13. package/backend/src/container.js +11 -8
  14. package/backend/src/core/BotCommandLoader.js +161 -0
  15. package/backend/src/core/BotConnection.js +125 -0
  16. package/backend/src/core/BotEventHandlers.js +234 -0
  17. package/backend/src/core/BotIPCHandler.js +445 -0
  18. package/backend/src/core/BotManager.js +15 -7
  19. package/backend/src/core/BotProcess.js +75 -142
  20. package/backend/src/core/EventGraphManager.js +7 -3
  21. package/backend/src/core/GraphDebugHandler.js +229 -0
  22. package/backend/src/core/GraphDebugIPC.js +117 -0
  23. package/backend/src/core/GraphExecutionEngine.js +545 -978
  24. package/backend/src/core/GraphTraversal.js +80 -0
  25. package/backend/src/core/GraphValidation.js +73 -0
  26. package/backend/src/core/NodeDefinition.js +138 -0
  27. package/backend/src/core/NodeRegistry.js +153 -141
  28. package/backend/src/core/PluginManager.js +272 -31
  29. package/backend/src/core/RewindSignal.js +9 -0
  30. package/backend/src/core/config/ConfigValidator.js +72 -0
  31. package/backend/src/core/config/FeatureFlags.js +52 -0
  32. package/backend/src/core/config/__tests__/ConfigValidator.test.js +232 -0
  33. package/backend/src/core/domain/entities/Bot.js +39 -0
  34. package/backend/src/core/domain/entities/Command.js +41 -0
  35. package/backend/src/core/domain/entities/EventGraph.js +39 -0
  36. package/backend/src/core/domain/entities/Plugin.js +45 -0
  37. package/backend/src/core/domain/entities/User.js +40 -0
  38. package/backend/src/core/domain/services/DependencyResolver.js +168 -0
  39. package/backend/src/core/domain/services/GraphValidator.js +117 -0
  40. package/backend/src/core/domain/services/PermissionChecker.js +34 -0
  41. package/backend/src/core/domain/services/__tests__/DependencyResolver.test.js +126 -0
  42. package/backend/src/core/domain/valueObjects/BotConfig.js +27 -0
  43. package/backend/src/core/domain/valueObjects/DependencyGraph.js +86 -0
  44. package/backend/src/core/domain/valueObjects/PluginManifest.js +36 -0
  45. package/backend/src/core/errors/BaseError.js +29 -0
  46. package/backend/src/core/errors/ErrorHandler.js +81 -0
  47. package/backend/src/core/errors/__tests__/ErrorHandler.test.js +188 -0
  48. package/backend/src/core/errors/index.js +68 -0
  49. package/backend/src/core/infrastructure/BatchingUtility.js +66 -0
  50. package/backend/src/core/infrastructure/CircuitBreaker.js +103 -0
  51. package/backend/src/core/infrastructure/ConnectionPool.js +81 -0
  52. package/backend/src/core/infrastructure/RateLimiter.js +64 -0
  53. package/backend/src/core/infrastructure/__tests__/BatchingUtility.test.js +86 -0
  54. package/backend/src/core/infrastructure/__tests__/CircuitBreaker.test.js +156 -0
  55. package/backend/src/core/infrastructure/__tests__/ConnectionPool.test.js +146 -0
  56. package/backend/src/core/infrastructure/__tests__/RateLimiter.test.js +171 -0
  57. package/backend/src/core/ipc/botApiFactory.js +72 -0
  58. package/backend/src/core/ipc/ipcMessageTypes.js +115 -0
  59. package/backend/src/core/logging/AuditLogger.js +61 -0
  60. package/backend/src/core/logging/StructuredLogger.js +80 -0
  61. package/backend/src/core/logging/__tests__/StructuredLogger.test.js +213 -0
  62. package/backend/src/core/logging/index.js +7 -0
  63. package/backend/src/core/metrics/MetricsCollector.js +104 -0
  64. package/backend/src/core/metrics/__tests__/MetricsCollector.test.js +131 -0
  65. package/backend/src/core/node-registries/actionsNodes.js +191 -0
  66. package/backend/src/core/node-registries/arraysNodes.js +152 -0
  67. package/backend/src/core/node-registries/botNodes.js +48 -0
  68. package/backend/src/core/node-registries/containerNodes.js +141 -0
  69. package/backend/src/core/node-registries/dataNodes.js +284 -0
  70. package/backend/src/core/node-registries/debugNodes.js +23 -0
  71. package/backend/src/core/node-registries/eventsNodes.js +223 -0
  72. package/backend/src/core/node-registries/flowNodes.js +151 -0
  73. package/backend/src/core/node-registries/furnaceNodes.js +123 -0
  74. package/backend/src/core/node-registries/index.js +108 -0
  75. package/backend/src/core/node-registries/inventory.js +102 -106
  76. package/backend/src/core/node-registries/logicNodes.js +54 -0
  77. package/backend/src/core/node-registries/mathNodes.js +38 -0
  78. package/backend/src/core/node-registries/navigationNodes.js +109 -0
  79. package/backend/src/core/node-registries/objectsNodes.js +90 -0
  80. package/backend/src/core/node-registries/stringsNodes.js +165 -0
  81. package/backend/src/core/node-registries/timeNodes.js +105 -0
  82. package/backend/src/core/node-registries/typeNodes.js +22 -0
  83. package/backend/src/core/node-registries/usersNodes.js +126 -0
  84. package/backend/src/core/nodes/arrays/shuffle.js +14 -0
  85. package/backend/src/core/nodes/bot/get_name.js +8 -0
  86. package/backend/src/core/nodes/bot/stop_bot.js +5 -0
  87. package/backend/src/core/nodes/container/open.js +101 -111
  88. package/backend/src/core/nodes/data/store_read.js +26 -0
  89. package/backend/src/core/nodes/data/store_write.js +23 -0
  90. package/backend/src/core/nodes/event/call_event.js +31 -0
  91. package/backend/src/core/nodes/event/custom_event.js +8 -0
  92. package/backend/src/core/nodes/flow/timer.js +35 -0
  93. package/backend/src/core/nodes/inventory/drop.js +73 -65
  94. package/backend/src/core/nodes/inventory/equip.js +54 -45
  95. package/backend/src/core/nodes/inventory/select_slot.js +48 -46
  96. package/backend/src/core/nodes/navigation/follow.js +54 -51
  97. package/backend/src/core/nodes/navigation/go_to.js +41 -53
  98. package/backend/src/core/nodes/navigation/go_to_entity.js +65 -69
  99. package/backend/src/core/nodes/navigation/go_to_player.js +65 -70
  100. package/backend/src/core/nodes/navigation/stop.js +17 -26
  101. package/backend/src/core/nodes/users/add_to_group.js +24 -0
  102. package/backend/src/core/nodes/users/check_permission.js +26 -0
  103. package/backend/src/core/nodes/users/remove_from_group.js +24 -0
  104. package/backend/src/core/services/BotIPCMessageRouter.js +337 -0
  105. package/backend/src/core/services/BotLifecycleService.js +41 -632
  106. package/backend/src/core/services/CacheManager.js +83 -23
  107. package/backend/src/core/services/CrashRestartManager.js +42 -0
  108. package/backend/src/core/services/DebugSessionManager.js +114 -12
  109. package/backend/src/core/services/EventGraphService.js +69 -0
  110. package/backend/src/core/services/MinecraftBotManager.js +9 -1
  111. package/backend/src/core/services/PluginManagementService.js +84 -0
  112. package/backend/src/core/services/TestModeContext.js +65 -0
  113. package/backend/src/core/services/__tests__/CacheManager.test.js +168 -0
  114. package/backend/src/core/services.js +1 -11
  115. package/backend/src/core/validation/InputValidator.js +167 -0
  116. package/backend/src/core/validation/__tests__/InputValidator.test.js +296 -0
  117. package/backend/src/real-time/botApi/index.js +1 -1
  118. package/backend/src/real-time/socketHandler.js +26 -0
  119. package/backend/src/server.js +10 -5
  120. package/frontend/dist/assets/{browser-ponyfill-DN7pwmHT.js → browser-ponyfill-D8y0Ty7C.js} +1 -1
  121. package/frontend/dist/assets/index-CFJLS0dk.css +32 -0
  122. package/frontend/dist/assets/{index-LSy71uwm.js → index-D91UGNMG.js} +1880 -1881
  123. package/frontend/dist/index.html +2 -2
  124. package/frontend/dist/locales/en/bots.json +4 -1
  125. package/frontend/dist/locales/en/common.json +7 -1
  126. package/frontend/dist/locales/en/login.json +2 -0
  127. package/frontend/dist/locales/en/management.json +79 -1
  128. package/frontend/dist/locales/en/nodes.json +59 -4
  129. package/frontend/dist/locales/en/plugin-detail.json +24 -4
  130. package/frontend/dist/locales/en/plugins.json +226 -7
  131. package/frontend/dist/locales/en/setup.json +2 -0
  132. package/frontend/dist/locales/en/sidebar.json +171 -3
  133. package/frontend/dist/locales/en/visual-editor.json +230 -31
  134. package/frontend/dist/locales/ru/bots.json +4 -1
  135. package/frontend/dist/locales/ru/login.json +2 -0
  136. package/frontend/dist/locales/ru/management.json +79 -1
  137. package/frontend/dist/locales/ru/minecraft-viewer.json +3 -0
  138. package/frontend/dist/locales/ru/nodes.json +105 -51
  139. package/frontend/dist/locales/ru/plugins.json +103 -4
  140. package/frontend/dist/locales/ru/setup.json +2 -0
  141. package/frontend/dist/locales/ru/sidebar.json +171 -3
  142. package/frontend/dist/locales/ru/visual-editor.json +232 -33
  143. package/frontend/package.json +2 -0
  144. package/nul +12 -0
  145. package/package.json +3 -3
  146. package/scripts/postinstall.js +38 -0
  147. package/backend/package-lock.json +0 -6801
  148. package/backend/src/core/node-registries/actions.js +0 -202
  149. package/backend/src/core/node-registries/arrays.js +0 -155
  150. package/backend/src/core/node-registries/bot.js +0 -23
  151. package/backend/src/core/node-registries/container.js +0 -162
  152. package/backend/src/core/node-registries/data.js +0 -290
  153. package/backend/src/core/node-registries/debug.js +0 -26
  154. package/backend/src/core/node-registries/events.js +0 -201
  155. package/backend/src/core/node-registries/flow.js +0 -139
  156. package/backend/src/core/node-registries/furnace.js +0 -143
  157. package/backend/src/core/node-registries/logic.js +0 -62
  158. package/backend/src/core/node-registries/math.js +0 -42
  159. package/backend/src/core/node-registries/navigation.js +0 -111
  160. package/backend/src/core/node-registries/objects.js +0 -98
  161. package/backend/src/core/node-registries/strings.js +0 -187
  162. package/backend/src/core/node-registries/time.js +0 -113
  163. package/backend/src/core/node-registries/type.js +0 -25
  164. package/backend/src/core/node-registries/users.js +0 -79
  165. package/frontend/dist/assets/index-SfhKxI4-.css +0 -32
@@ -42,8 +42,8 @@
42
42
  <meta name="msapplication-TileColor" content="#da532c">
43
43
  <meta name="theme-color" content="#ffffff">
44
44
 
45
- <script type="module" crossorigin src="/assets/index-LSy71uwm.js"></script>
46
- <link rel="stylesheet" crossorigin href="/assets/index-SfhKxI4-.css">
45
+ <script type="module" crossorigin src="/assets/index-D91UGNMG.js"></script>
46
+ <link rel="stylesheet" crossorigin href="/assets/index-CFJLS0dk.css">
47
47
  </head>
48
48
  <body>
49
49
  <div id="root"></div>
@@ -21,7 +21,10 @@
21
21
  },
22
22
  "status": {
23
23
  "running": "Running",
24
- "stopped": "Stopped"
24
+ "stopped": "Stopped",
25
+ "starting": "Starting",
26
+ "stopping": "Stopping",
27
+ "restarting": "Restarting"
25
28
  },
26
29
  "deleteDialog": {
27
30
  "title": "Delete bot {{username}}?",
@@ -36,7 +36,13 @@
36
36
  "error": "An error occurred",
37
37
  "saved": "Saved",
38
38
  "deleted": "Deleted",
39
- "copied": "Copied"
39
+ "copied": "Copied",
40
+ "networkTitle": "Network error",
41
+ "networkDescription": "Unable to connect to the server",
42
+ "authError": "Authorization error",
43
+ "downloadError": "Failed to download file.",
44
+ "downloadErrorWithStatus": "Failed to download file: {{status}}",
45
+ "serverError": "An unknown server error occurred"
40
46
  },
41
47
  "plurals": {
42
48
  "bot_one": "{{count}} bot",
@@ -3,6 +3,8 @@
3
3
  "description": "Enter your credentials to access the panel.",
4
4
  "username": "Username",
5
5
  "password": "Password",
6
+ "showPassword": "Show password",
7
+ "hidePassword": "Hide password",
6
8
  "submit": "Sign in",
7
9
  "forgotPassword": "Forgot password?",
8
10
  "loginError": "Failed to sign in.",
@@ -12,7 +12,85 @@
12
12
  "error": "Error",
13
13
  "commandCreated": "Command \"{{name}}\" created successfully.",
14
14
  "commandCreateError": "Failed to create command",
15
- "loadError": "Failed to load management data."
15
+ "loadError": "Failed to load management data.",
16
+ "criticalError": "Critical error"
17
+ },
18
+ "dynamicInput": {
19
+ "placeholder": "Add item...",
20
+ "add": "Add"
21
+ },
22
+ "users": {
23
+ "title": "Users",
24
+ "description": "List of all users who interacted with the bot.",
25
+ "searchPlaceholder": "Search by nickname...",
26
+ "blacklisted": "Blacklisted",
27
+ "table": {
28
+ "username": "Username",
29
+ "groups": "Groups",
30
+ "status": "Status",
31
+ "actions": "Actions",
32
+ "loading": "Loading..."
33
+ },
34
+ "pagination": {
35
+ "showing": "Showing {{from}} - {{to}} of {{total}} users",
36
+ "previous": "Previous",
37
+ "next": "Next",
38
+ "page": "Page {{page}} of {{totalPages}}"
39
+ },
40
+ "toast": {
41
+ "updated": "User {{name}} updated."
42
+ }
43
+ },
44
+ "groups": {
45
+ "title": "Groups",
46
+ "description": "List of all groups and their permissions for this bot.",
47
+ "create": "Create group",
48
+ "table": {
49
+ "name": "Name",
50
+ "permissions": "Permissions",
51
+ "actions": "Actions",
52
+ "loading": "Loading..."
53
+ },
54
+ "toast": {
55
+ "saved": "Group successfully {{action}}.",
56
+ "deleted": "Group deleted."
57
+ },
58
+ "actions": {
59
+ "created": "created",
60
+ "updated": "updated"
61
+ },
62
+ "errors": {
63
+ "missingBotId": "Failed to determine bot ID.",
64
+ "deleteSource": "Cannot delete a group with source \"{{owner}}\"."
65
+ },
66
+ "deleteDialog": {
67
+ "title": "Delete group \"{{name}}\"?",
68
+ "description": "This action cannot be undone. Users in this group will lose the corresponding permissions.",
69
+ "confirm": "Yes, delete group"
70
+ }
71
+ },
72
+ "permissionsSection": {
73
+ "title": "Permissions",
74
+ "description": "Complete list of all permissions registered for this bot.",
75
+ "create": "Create permission",
76
+ "table": {
77
+ "permission": "Permission",
78
+ "description": "Description",
79
+ "source": "Source",
80
+ "loading": "Loading..."
81
+ },
82
+ "toast": {
83
+ "created": "New permission created successfully."
84
+ },
85
+ "createDialog": {
86
+ "title": "Create new permission",
87
+ "description": "Permissions are used for fine-grained access control to commands.",
88
+ "nameLabel": "Permission name (for example, plugin.name.action)",
89
+ "descriptionLabel": "Description",
90
+ "cancel": "Cancel",
91
+ "create": "Create",
92
+ "creating": "Creating..."
93
+ }
16
94
  },
17
95
  "commandEdit": {
18
96
  "title": "Edit command: {{name}}",
@@ -529,17 +529,71 @@
529
529
 
530
530
  "action:create_command": {
531
531
  "label": "Create Command",
532
- "description": "Creates new command"
532
+ "description": "Creates new command",
533
+ "pins": {
534
+ "exec": "Execute",
535
+ "name": "Command Name",
536
+ "description": "Description",
537
+ "aliases": "Aliases",
538
+ "cooldown": "Cooldown (sec)",
539
+ "allowedChatTypes": "Chat Types",
540
+ "permissionName": "Permission Name",
541
+ "temporary": "Temporary?",
542
+ "commandId": "Command ID",
543
+ "success": "Success?"
544
+ },
545
+ "placeholders": {
546
+ "name": "mycommand",
547
+ "description": "Command description",
548
+ "aliases": "[\"alias1\", \"alias2\"]",
549
+ "cooldown": "0",
550
+ "allowedChatTypes": "[\"chat\", \"private\"]",
551
+ "permissionName": "moderator"
552
+ },
553
+ "options": {
554
+ "temporary": {
555
+ "false": "Permanent",
556
+ "true": "Temporary"
557
+ }
558
+ }
533
559
  },
534
560
 
535
561
  "action:update_command": {
536
562
  "label": "Update Command",
537
- "description": "Updates existing command"
563
+ "description": "Updates existing command",
564
+ "pins": {
565
+ "exec": "Execute",
566
+ "commandName": "Command Name",
567
+ "newName": "New Name",
568
+ "description": "Description",
569
+ "aliases": "Aliases",
570
+ "cooldown": "Cooldown (sec)",
571
+ "allowedChatTypes": "Chat Types",
572
+ "permissionName": "Permission Name",
573
+ "success": "Success?"
574
+ },
575
+ "placeholders": {
576
+ "commandName": "mycommand",
577
+ "newName": "newcommand",
578
+ "description": "New description",
579
+ "aliases": "[\"alias1\", \"alias2\"]",
580
+ "cooldown": "0",
581
+ "allowedChatTypes": "[\"chat\", \"private\"]",
582
+ "permissionName": "moderator"
583
+ }
538
584
  },
539
585
 
540
586
  "action:delete_command": {
541
587
  "label": "Delete Command",
542
- "description": "Deletes command"
588
+ "description": "Deletes command",
589
+ "pins": {
590
+ "exec": "Execute",
591
+ "commandName": "Command Name",
592
+ "success": "Success?"
593
+ },
594
+ "placeholders": {
595
+ "commandName": "mycommand"
596
+ }
543
597
  },
544
598
 
545
599
  "time:datetime_literal": {
@@ -648,11 +702,12 @@
648
702
  "label": "On Command",
649
703
  "description": "Starting point for command graph",
650
704
  "pins": {
705
+ "exec": "Execute",
651
706
  "command_name": "Command Name",
652
707
  "user": "User",
653
708
  "args": "Arguments",
654
709
  "chat_type": "Chat Type",
655
- "success": "Success",
710
+ "success": "Success?",
656
711
  "success_desc": "Returns true if command executed without errors"
657
712
  }
658
713
  },
@@ -10,11 +10,20 @@
10
10
  "installing": "Installing...",
11
11
  "installed": "Installed",
12
12
  "install": "Install",
13
- "fork": "Fork"
13
+ "fork": "Fork",
14
+ "settings": "Settings",
15
+ "delete": "Delete"
16
+ },
17
+ "status": {
18
+ "enabled": "Enabled",
19
+ "disabled": "Disabled",
20
+ "title": "Plugin status"
14
21
  },
15
22
  "stats": {
16
23
  "totalDownloads": "Total downloads",
17
- "updated": "Updated"
24
+ "updated": "Updated",
25
+ "commands": "Commands",
26
+ "events": "Events"
18
27
  },
19
28
  "dates": {
20
29
  "today": "Today",
@@ -25,14 +34,25 @@
25
34
  },
26
35
  "tabs": {
27
36
  "overview": "Overview",
28
- "changelog": "Changelog"
37
+ "changelog": "Changelog",
38
+ "commands": "Commands"
29
39
  },
30
40
  "overview": {
31
41
  "description": "Description",
32
42
  "noDescription": "No description available.",
33
43
  "info": "Information",
34
44
  "version": "Version",
35
- "dependencies": "Dependencies"
45
+ "dependencies": "Dependencies",
46
+ "supportedServers": "Supported servers"
47
+ },
48
+ "sections": {
49
+ "pluginCommands": "Plugin commands",
50
+ "eventGraphs": "Event graphs"
51
+ },
52
+ "deleteDialog": {
53
+ "title": "Delete plugin \"{{name}}\"?",
54
+ "description": "This action cannot be undone. All plugin files and settings will be removed for this bot.",
55
+ "confirm": "Yes, delete plugin"
36
56
  },
37
57
  "changelog": {
38
58
  "title": "Release notes",
@@ -7,6 +7,7 @@
7
7
  "actions": {
8
8
  "checkUpdates": "Check for updates",
9
9
  "installLocal": "Install locally",
10
+ "installGithub": "Install from GitHub",
10
11
  "createPlugin": "Create plugin",
11
12
  "install": "Install",
12
13
  "uninstall": "Uninstall",
@@ -18,7 +19,9 @@
18
19
  "fork": "Fork",
19
20
  "reload": "Reload",
20
21
  "cancel": "Cancel",
21
- "delete": "Delete"
22
+ "delete": "Delete",
23
+ "open": "Open",
24
+ "unavailable": "Unavailable"
22
25
  },
23
26
  "ui": {
24
27
  "error": "Error",
@@ -71,10 +74,35 @@
71
74
  "deleting": "Deleting..."
72
75
  },
73
76
  "localInstall": {
74
- "title": "Install local plugin",
75
- "description": "Enter the path to the plugin folder on the server",
76
- "pathLabel": "Plugin path",
77
- "pathPlaceholder": "/path/to/plugin/folder",
77
+ "title": "Install plugin locally",
78
+ "description": "Specify the full path to the plugin folder on the server where the panel is running. The folder must contain a valid package.json.",
79
+ "pathLabel": "Plugin folder path",
80
+ "pathPlaceholder": "For example, /home/user/my-bot-plugins/super-plugin",
81
+ "install": "Install"
82
+ },
83
+ "githubInstall": {
84
+ "title": "Install from GitHub",
85
+ "description": "Paste a public GitHub repository link. The repository must contain a valid package.json for the plugin.",
86
+ "previewStepDescription": "Review the repository, choose a version if needed, and install the plugin.",
87
+ "urlLabel": "Repository URL",
88
+ "urlPlaceholder": "https://github.com/owner/repository",
89
+ "urlHint": "Paste a direct link to the GitHub repository. The preview will open on the next step.",
90
+ "loadPreview": "Load preview",
91
+ "loadingPreview": "Loading preview...",
92
+ "continue": "Continue",
93
+ "back": "Back",
94
+ "previewTitle": "Repository preview",
95
+ "defaultBranch": "Default branch",
96
+ "latestRelease": "Latest release",
97
+ "selectVersion": "Version to install",
98
+ "versionLatest": "Latest branch state",
99
+ "versionRelease": "Latest release",
100
+ "versionTagPrefix": "Tag",
101
+ "versionHint": "Leave the latest branch state selected for the default install flow, or pick a release tag.",
102
+ "noTags": "No tags found",
103
+ "readmeTitle": "README",
104
+ "noReadme": "This repository does not expose a README through the GitHub API.",
105
+ "previewHint": "Load the repository preview to choose a release tag before installation.",
78
106
  "install": "Install"
79
107
  },
80
108
  "createDialog": {
@@ -97,14 +125,205 @@
97
125
  "search": "Search plugins...",
98
126
  "categories": "Categories",
99
127
  "all": "All",
100
- "noResults": "No plugins found"
128
+ "noResults": "No plugins found",
129
+ "viewGrid": "Grid view",
130
+ "viewList": "List view",
131
+ "total": "Total: {{count}}",
132
+ "loadingCatalog": "Loading plugin catalog...",
133
+ "emptyTitle": "No plugins found",
134
+ "emptyDescription": "There are no plugins in the \"{{category}}\" category matching \"{{query}}\".",
135
+ "emptyDescriptionNoQuery": "There are no plugins in the \"{{category}}\" category.",
136
+ "resetFilters": "Reset filters",
137
+ "sort": {
138
+ "popular": "Popular",
139
+ "newest": "Newest",
140
+ "alphabetical": "Alphabetical",
141
+ "downloads": "By downloads"
142
+ }
143
+ },
144
+ "categories": {
145
+ "allPlugins": "All plugins",
146
+ "core": "Core",
147
+ "clan": "Clan",
148
+ "chat": "Chat",
149
+ "automation": "Automation",
150
+ "security": "Security",
151
+ "commands": "Commands",
152
+ "utilities": "Utilities",
153
+ "permissions": "Permissions"
154
+ },
155
+ "sources": {
156
+ "github": "GitHub",
157
+ "local": "Local",
158
+ "localIde": "Local IDE"
159
+ },
160
+ "badges": {
161
+ "popular": "Popular",
162
+ "new": "New",
163
+ "update": "Update"
164
+ },
165
+ "labels": {
166
+ "by": "by",
167
+ "unknownAuthor": "Unknown author",
168
+ "noDescription": "No description.",
169
+ "any": "Any",
170
+ "anyServer": "Any server",
171
+ "serversCount": "{{count}} servers",
172
+ "pluginId": "Plugin ID:",
173
+ "totalDownloads": "Total downloads: {{count}}",
174
+ "requiredPlugins": "Required plugins:",
175
+ "requiresDependencies": "Requires {{count}} dependencies",
176
+ "testedOn": "Tested on:",
177
+ "commandsCount": "Commands: {{count}}",
178
+ "eventGraphsCount": "Event graphs: {{count}}",
179
+ "updateAvailable": "Update available"
180
+ },
181
+ "tooltips": {
182
+ "openRepository": "Open repository",
183
+ "editCode": "Edit code",
184
+ "reload": "Reload",
185
+ "reloadFromPackage": "Reload from package.json",
186
+ "makeLocal": "Make local",
187
+ "settings": "Settings",
188
+ "delete": "Delete",
189
+ "updateTo": "Update to {{version}}",
190
+ "updateAvailable": "Update available"
191
+ },
192
+ "dependencyDialog": {
193
+ "title": "Dependency check",
194
+ "description": "Installing {{name}} requires a few additional components.",
195
+ "toInstall": "Need to install:",
196
+ "alreadyInstalled": "Already installed:",
197
+ "installMissing": "Install missing ({{count}})",
198
+ "installing": "Installing..."
199
+ },
200
+ "installed": {
201
+ "filters": {
202
+ "all": "All ({{count}})",
203
+ "enabled": "Enabled ({{count}})",
204
+ "disabled": "Disabled ({{count}})",
205
+ "updates": "Updates ({{count}})",
206
+ "local": "Local ({{count}})",
207
+ "github": "GitHub ({{count}})"
208
+ },
209
+ "searchPlaceholder": "Search...",
210
+ "emptyTitle": "No plugins",
211
+ "emptyAll": "You don't have any installed plugins yet.",
212
+ "emptyFiltered": "No plugins match the selected filter.",
213
+ "showAll": "Show all plugins",
214
+ "confirmDeleteTitle": "Delete plugin \"{{name}}\"?",
215
+ "confirmDeleteDescription": "This action cannot be undone. All plugin files and settings will be removed for this bot.",
216
+ "confirmDeleteAction": "Yes, delete plugin",
217
+ "lastUpdated": {
218
+ "today": "Today",
219
+ "yesterday": "Yesterday",
220
+ "daysAgo": "{{count}} days ago",
221
+ "weeksAgo": "{{count}} weeks ago",
222
+ "monthsAgo": "{{count}} months ago"
223
+ },
224
+ "updateInProgress": "Updating...",
225
+ "updateButton": "Update",
226
+ "updateButtonTo": "Update to v{{version}}"
227
+ },
228
+ "settingsDialog": {
229
+ "title": "Plugin: {{name}}",
230
+ "description": "Manage plugin settings and information",
231
+ "emptySettings": "This plugin has no settings.",
232
+ "clearData": "Clear data",
233
+ "selectPlaceholder": "Select a value",
234
+ "unknownSettingType": "Unknown setting type: {{type}}",
235
+ "confirmClearData": "Are you sure you want to delete all data for plugin \"{{name}}\"? This action cannot be undone.",
236
+ "confirmDeleteKey": "Delete key \"{{key}}\"?",
237
+ "tabs": {
238
+ "settings": "Settings",
239
+ "data": "Data",
240
+ "info": "Information"
241
+ },
242
+ "jsonEditor": {
243
+ "title": "JSON configuration editor",
244
+ "description": "Make changes and save them.",
245
+ "descriptionWithSyntax": "Make changes and save them. The editor will highlight syntax errors.",
246
+ "invalidJson": "Error: Invalid JSON. Check the syntax.",
247
+ "apply": "Apply",
248
+ "applyAndSave": "Apply and save"
249
+ },
250
+ "proxy": {
251
+ "selectPlaceholder": "Select a proxy",
252
+ "none": "No proxy",
253
+ "custom": "Configure manually",
254
+ "host": "Host",
255
+ "port": "Port",
256
+ "type": "Type",
257
+ "username": "Username",
258
+ "password": "Password",
259
+ "optional": "Optional"
260
+ },
261
+ "permissions": {
262
+ "addEntries": "Not enough permissions to add entries",
263
+ "generic": "Not enough permissions",
264
+ "editData": "Not enough permissions to modify data",
265
+ "save": "Not enough permissions to save settings"
266
+ },
267
+ "validation": {
268
+ "emptyKey": "Key cannot be empty",
269
+ "invalidJsonValue": "Value must be valid JSON"
270
+ },
271
+ "data": {
272
+ "searchPlaceholder": "Search by key",
273
+ "refresh": "Refresh",
274
+ "addEntry": "Add entry",
275
+ "empty": "No data",
276
+ "editEntry": "Edit entry",
277
+ "newEntry": "New entry",
278
+ "editEntryDescription": "Change the JSON value and save.",
279
+ "newEntryDescription": "Specify a key and a JSON value.",
280
+ "keyLabel": "Key",
281
+ "keyPlaceholder": "For example, state",
282
+ "jsonValue": "JSON value",
283
+ "columns": {
284
+ "key": "Key",
285
+ "updated": "Updated",
286
+ "actions": "Actions"
287
+ }
288
+ },
289
+ "toasts": {
290
+ "savedSettings": "Plugin settings saved.",
291
+ "clearedData": "Plugin data cleared successfully.",
292
+ "entryDeleted": "Entry deleted.",
293
+ "entrySaved": "Entry saved."
294
+ },
295
+ "loadError": "Failed to load plugin settings."
296
+ },
297
+ "toasts": {
298
+ "statusUpdating": "Updating plugin status...",
299
+ "statusUpdated": "Plugin status updated.",
300
+ "pluginDeleted": "Plugin \"{{name}}\" deleted.",
301
+ "pluginInstalled": "Plugin \"{{name}}\" installed successfully.",
302
+ "updateCheckCompleted": "Update check completed",
303
+ "updateCheckFound": "Updates found: {{count}}",
304
+ "pluginUpdated": "Plugin updated. Restart the bot.",
305
+ "pluginCreated": "Plugin \"{{name}}\" created successfully.",
306
+ "pluginForked": "Plugin \"{{name}}\" was converted to a local plugin.",
307
+ "pluginReloaded": "Plugin reloaded, settings reset."
101
308
  },
102
309
  "details": {
310
+ "title": "Plugin information",
311
+ "name": "Name",
103
312
  "version": "Version",
104
313
  "author": "Author",
105
314
  "description": "Description",
106
315
  "dependencies": "Dependencies",
107
316
  "commands": "Commands",
108
- "events": "Events"
317
+ "events": "Event graphs",
318
+ "source": "Source",
319
+ "status": "Status",
320
+ "visual": "Visual",
321
+ "aliases": "Aliases:",
322
+ "created": "Created:",
323
+ "updated": "Updated:",
324
+ "noCommands": "No commands",
325
+ "noCommandsDescription": "This plugin does not provide commands",
326
+ "noEvents": "No event graphs",
327
+ "noEventsDescription": "This plugin does not provide event graphs"
109
328
  }
110
329
  }
@@ -3,6 +3,8 @@
3
3
  "description": "Create an administrator account for the BlockMine panel.",
4
4
  "username": "Admin username",
5
5
  "password": "Password (min. 4 characters)",
6
+ "showPassword": "Show password",
7
+ "hidePassword": "Hide password",
6
8
  "confirmPassword": "Confirm password",
7
9
  "submit": "Create",
8
10
  "errors": {