omegga 0.1.85 → 1.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 (467) hide show
  1. package/README.md +142 -62
  2. package/bin/omegga +10 -4
  3. package/dist/brickadia/config.d.ts +3 -0
  4. package/dist/brickadia/config.d.ts.map +1 -0
  5. package/dist/brickadia/config.js +61 -0
  6. package/dist/brickadia/config.js.map +1 -0
  7. package/dist/brickadia/presets.d.ts +65 -0
  8. package/dist/brickadia/presets.js +3 -0
  9. package/dist/brickadia/presets.js.map +1 -0
  10. package/dist/brickadia/server.d.ts +20 -0
  11. package/dist/brickadia/server.d.ts.map +1 -0
  12. package/dist/brickadia/server.js +188 -0
  13. package/dist/brickadia/server.js.map +1 -0
  14. package/dist/brickadia/types.d.ts +45 -0
  15. package/dist/brickadia/types.d.ts.map +1 -0
  16. package/dist/brickadia/types.js +3 -0
  17. package/dist/brickadia/types.js.map +1 -0
  18. package/dist/cli/auth.d.ts +20 -0
  19. package/dist/cli/auth.d.ts.map +1 -0
  20. package/dist/cli/auth.js +115 -0
  21. package/dist/cli/auth.js.map +1 -0
  22. package/dist/cli/config.d.ts +10 -0
  23. package/dist/cli/config.d.ts.map +1 -0
  24. package/dist/cli/config.js +72 -0
  25. package/dist/cli/config.js.map +1 -0
  26. package/dist/cli/index.d.ts +20 -0
  27. package/dist/cli/index.d.ts.map +1 -0
  28. package/dist/cli/index.js +15 -0
  29. package/dist/cli/index.js.map +1 -0
  30. package/dist/cli/installer.d.ts +1 -0
  31. package/dist/cli/installer.d.ts.map +1 -0
  32. package/dist/cli/installer.js +55 -0
  33. package/dist/cli/installer.js.map +1 -0
  34. package/dist/cli/plugin.d.ts +11 -0
  35. package/dist/cli/plugin.d.ts.map +1 -0
  36. package/dist/cli/plugin.js +598 -0
  37. package/dist/cli/plugin.js.map +1 -0
  38. package/dist/cli/terminal.d.ts +34 -0
  39. package/dist/cli/terminal.d.ts.map +1 -0
  40. package/dist/cli/terminal.js +395 -0
  41. package/dist/cli/terminal.js.map +1 -0
  42. package/dist/config/authorizer.d.ts +2 -0
  43. package/dist/config/authorizer.d.ts.map +1 -0
  44. package/dist/config/authorizer.js +38 -0
  45. package/dist/config/authorizer.js.map +1 -0
  46. package/dist/config/formats/format_js.d.ts +3 -0
  47. package/dist/config/formats/format_js.d.ts.map +1 -0
  48. package/dist/config/formats/format_js.js +10 -0
  49. package/dist/config/formats/format_js.js.map +1 -0
  50. package/dist/config/formats/format_yml.d.ts +3 -0
  51. package/dist/config/formats/format_yml.d.ts.map +1 -0
  52. package/dist/config/formats/format_yml.js +14 -0
  53. package/dist/config/formats/format_yml.js.map +1 -0
  54. package/dist/config/index.d.ts +18 -0
  55. package/dist/config/index.d.ts.map +1 -0
  56. package/dist/config/index.js +86 -0
  57. package/dist/config/index.js.map +1 -0
  58. package/dist/config/reader.d.ts +3 -0
  59. package/dist/config/reader.d.ts.map +1 -0
  60. package/dist/config/reader.js +30 -0
  61. package/dist/config/reader.js.map +1 -0
  62. package/dist/config/types.d.ts +37 -0
  63. package/dist/config/types.d.ts.map +1 -0
  64. package/dist/config/types.js +3 -0
  65. package/dist/config/types.js.map +1 -0
  66. package/dist/config/validator.d.ts +6 -0
  67. package/dist/config/validator.d.ts.map +1 -0
  68. package/dist/config/validator.js +26 -0
  69. package/dist/config/validator.js.map +1 -0
  70. package/dist/config/writer.d.ts +3 -0
  71. package/dist/config/writer.d.ts.map +1 -0
  72. package/dist/config/writer.js +25 -0
  73. package/dist/config/writer.js.map +1 -0
  74. package/dist/index.d.ts +22 -0
  75. package/dist/index.js +55 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/info/default_commands.json +28 -0
  78. package/dist/lib.d.ts +21 -0
  79. package/dist/lib.d.ts.map +1 -0
  80. package/dist/lib.js +54 -0
  81. package/dist/lib.js.map +1 -0
  82. package/dist/logger.d.ts +41 -0
  83. package/dist/logger.js +67 -0
  84. package/dist/logger.js.map +1 -0
  85. package/dist/main.d.ts +1 -0
  86. package/dist/main.d.ts.map +1 -0
  87. package/dist/main.js +284 -0
  88. package/dist/main.js.map +1 -0
  89. package/dist/omegga/auth.d.ts +6 -0
  90. package/dist/omegga/auth.d.ts.map +1 -0
  91. package/dist/omegga/auth.js +139 -0
  92. package/dist/omegga/auth.js.map +1 -0
  93. package/dist/omegga/commandInjector.d.ts +35 -0
  94. package/dist/omegga/commandInjector.d.ts.map +1 -0
  95. package/dist/omegga/commandInjector.js +234 -0
  96. package/dist/omegga/commandInjector.js.map +1 -0
  97. package/dist/omegga/index.d.ts +7 -0
  98. package/dist/omegga/index.d.ts.map +1 -0
  99. package/dist/omegga/index.js +43 -0
  100. package/dist/omegga/index.js.map +1 -0
  101. package/dist/omegga/logWrangler.d.ts +32 -0
  102. package/dist/omegga/logWrangler.d.ts.map +1 -0
  103. package/dist/omegga/logWrangler.js +279 -0
  104. package/dist/omegga/logWrangler.js.map +1 -0
  105. package/dist/omegga/matchers/auth.d.ts +9 -0
  106. package/dist/omegga/matchers/auth.d.ts.map +1 -0
  107. package/dist/omegga/matchers/auth.js +53 -0
  108. package/dist/omegga/matchers/auth.js.map +1 -0
  109. package/dist/omegga/matchers/chat.d.ts +9 -0
  110. package/dist/omegga/matchers/chat.d.ts.map +1 -0
  111. package/dist/omegga/matchers/chat.js +68 -0
  112. package/dist/omegga/matchers/chat.js.map +1 -0
  113. package/dist/omegga/matchers/command.d.ts +7 -0
  114. package/dist/omegga/matchers/command.d.ts.map +1 -0
  115. package/dist/omegga/matchers/command.js +39 -0
  116. package/dist/omegga/matchers/command.js.map +1 -0
  117. package/dist/omegga/matchers/exit.d.ts +3 -0
  118. package/dist/omegga/matchers/exit.d.ts.map +1 -0
  119. package/dist/omegga/matchers/exit.js +21 -0
  120. package/dist/omegga/matchers/exit.js.map +1 -0
  121. package/dist/omegga/matchers/index.d.ts +3 -0
  122. package/dist/omegga/matchers/index.d.ts.map +1 -0
  123. package/dist/omegga/matchers/index.js +39 -0
  124. package/dist/omegga/matchers/index.js.map +1 -0
  125. package/dist/omegga/matchers/init.d.ts +3 -0
  126. package/dist/omegga/matchers/init.d.ts.map +1 -0
  127. package/dist/omegga/matchers/init.js +26 -0
  128. package/dist/omegga/matchers/init.js.map +1 -0
  129. package/dist/omegga/matchers/interact.d.ts +4 -0
  130. package/dist/omegga/matchers/interact.js +39 -0
  131. package/dist/omegga/matchers/interact.js.map +1 -0
  132. package/dist/omegga/matchers/join.d.ts +4 -0
  133. package/dist/omegga/matchers/join.d.ts.map +1 -0
  134. package/dist/omegga/matchers/join.js +95 -0
  135. package/dist/omegga/matchers/join.js.map +1 -0
  136. package/dist/omegga/matchers/leave.d.ts +4 -0
  137. package/dist/omegga/matchers/leave.d.ts.map +1 -0
  138. package/dist/omegga/matchers/leave.js +59 -0
  139. package/dist/omegga/matchers/leave.js.map +1 -0
  140. package/dist/omegga/matchers/mapChange.d.ts +3 -0
  141. package/dist/omegga/matchers/mapChange.d.ts.map +1 -0
  142. package/dist/omegga/matchers/mapChange.js +38 -0
  143. package/dist/omegga/matchers/mapChange.js.map +1 -0
  144. package/dist/omegga/matchers/types.d.ts +5 -0
  145. package/dist/omegga/matchers/types.d.ts.map +1 -0
  146. package/dist/omegga/matchers/types.js +7 -0
  147. package/dist/omegga/matchers/types.js.map +1 -0
  148. package/dist/omegga/matchers/version.d.ts +3 -0
  149. package/dist/omegga/matchers/version.d.ts.map +1 -0
  150. package/dist/omegga/matchers/version.js +45 -0
  151. package/dist/omegga/matchers/version.js.map +1 -0
  152. package/dist/omegga/player.d.ts +71 -0
  153. package/dist/omegga/player.d.ts.map +1 -0
  154. package/dist/omegga/player.js +442 -0
  155. package/dist/omegga/player.js.map +1 -0
  156. package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +23 -0
  157. package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts.map +1 -0
  158. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +441 -0
  159. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -0
  160. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +129 -0
  161. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts.map +1 -0
  162. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +260 -0
  163. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -0
  164. package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +1 -0
  165. package/dist/omegga/plugin/plugin_node_safe/worker.d.ts.map +1 -0
  166. package/dist/omegga/plugin/plugin_node_safe/worker.js +289 -0
  167. package/dist/omegga/plugin/plugin_node_safe/worker.js.map +1 -0
  168. package/dist/omegga/plugin/plugin_node_safe.d.ts +24 -0
  169. package/dist/omegga/plugin/plugin_node_safe.d.ts.map +1 -0
  170. package/dist/omegga/plugin/plugin_node_safe.js +397 -0
  171. package/dist/omegga/plugin/plugin_node_safe.js.map +1 -0
  172. package/dist/omegga/plugin/plugin_node_unsafe.d.ts +13 -0
  173. package/dist/omegga/plugin/plugin_node_unsafe.d.ts.map +1 -0
  174. package/dist/omegga/plugin/plugin_node_unsafe.js +178 -0
  175. package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -0
  176. package/dist/omegga/plugin.d.ts +86 -0
  177. package/dist/omegga/plugin.d.ts.map +1 -0
  178. package/dist/omegga/plugin.js +458 -0
  179. package/dist/omegga/plugin.js.map +1 -0
  180. package/dist/omegga/server.d.ts +149 -0
  181. package/dist/omegga/server.d.ts.map +1 -0
  182. package/dist/omegga/server.js +601 -0
  183. package/dist/omegga/server.js.map +1 -0
  184. package/dist/omegga/types.d.ts +48 -0
  185. package/dist/omegga/types.d.ts.map +1 -0
  186. package/dist/omegga/types.js +3 -0
  187. package/dist/omegga/types.js.map +1 -0
  188. package/dist/omegga/wrapper.d.ts +22 -0
  189. package/dist/omegga/wrapper.d.ts.map +1 -0
  190. package/dist/omegga/wrapper.js +75 -0
  191. package/dist/omegga/wrapper.js.map +1 -0
  192. package/dist/omeggaplugin.d.ts +1 -0
  193. package/dist/omeggaplugin.js +4 -0
  194. package/dist/omeggaplugin.js.map +1 -0
  195. package/dist/plugin.d.ts +781 -0
  196. package/dist/plugin.js +41 -0
  197. package/dist/plugin.js.map +1 -0
  198. package/dist/softconfig.d.ts +51 -0
  199. package/dist/softconfig.d.ts.map +1 -0
  200. package/dist/softconfig.js +82 -0
  201. package/dist/softconfig.js.map +1 -0
  202. package/dist/util/brick/checkBounds.d.ts +8 -0
  203. package/dist/util/brick/checkBounds.d.ts.map +1 -0
  204. package/dist/util/brick/checkBounds.js +22 -0
  205. package/dist/util/brick/checkBounds.js.map +1 -0
  206. package/dist/util/brick/constants.d.ts +18 -0
  207. package/dist/util/brick/constants.d.ts.map +1 -0
  208. package/dist/util/brick/constants.js +184 -0
  209. package/dist/util/brick/constants.js.map +1 -0
  210. package/dist/util/brick/getBounds.d.ts +4 -0
  211. package/dist/util/brick/getBounds.d.ts.map +1 -0
  212. package/dist/util/brick/getBounds.js +39 -0
  213. package/dist/util/brick/getBounds.js.map +1 -0
  214. package/dist/util/brick/getBrickSize.d.ts +3 -0
  215. package/dist/util/brick/getBrickSize.d.ts.map +1 -0
  216. package/dist/util/brick/getBrickSize.js +12 -0
  217. package/dist/util/brick/getBrickSize.js.map +1 -0
  218. package/dist/util/brick/getScaleAxis.d.ts +3 -0
  219. package/dist/util/brick/getScaleAxis.d.ts.map +1 -0
  220. package/dist/util/brick/getScaleAxis.js +38 -0
  221. package/dist/util/brick/getScaleAxis.js.map +1 -0
  222. package/dist/util/brick/index.d.ts +13 -0
  223. package/dist/util/brick/index.d.ts.map +1 -0
  224. package/dist/util/brick/index.js +29 -0
  225. package/dist/util/brick/index.js.map +1 -0
  226. package/dist/util/brick/rotate.d.ts +17 -0
  227. package/dist/util/brick/rotate.d.ts.map +1 -0
  228. package/dist/util/brick/rotate.js +38 -0
  229. package/dist/util/brick/rotate.js.map +1 -0
  230. package/dist/util/brick/setOwnership.d.ts +12 -0
  231. package/dist/util/brick/setOwnership.d.ts.map +1 -0
  232. package/dist/util/brick/setOwnership.js +21 -0
  233. package/dist/util/brick/setOwnership.js.map +1 -0
  234. package/dist/util/chat.d.ts +23 -0
  235. package/dist/util/chat.d.ts.map +1 -0
  236. package/dist/util/chat.js +50 -0
  237. package/dist/util/chat.js.map +1 -0
  238. package/dist/util/color.d.ts +13 -0
  239. package/dist/util/color.d.ts.map +1 -0
  240. package/dist/util/color.js +130 -0
  241. package/dist/util/color.js.map +1 -0
  242. package/dist/util/file.d.ts +5 -0
  243. package/dist/util/file.d.ts.map +1 -0
  244. package/dist/util/file.js +114 -0
  245. package/dist/util/file.js.map +1 -0
  246. package/dist/util/index.d.ts +162 -0
  247. package/dist/util/index.d.ts.map +1 -0
  248. package/dist/util/index.js +92 -0
  249. package/dist/util/index.js.map +1 -0
  250. package/dist/util/map.d.ts +6 -0
  251. package/dist/util/map.d.ts.map +1 -0
  252. package/dist/util/map.js +26 -0
  253. package/dist/util/map.js.map +1 -0
  254. package/dist/util/pattern.d.ts +1 -0
  255. package/dist/util/pattern.d.ts.map +1 -0
  256. package/dist/util/pattern.js +11 -0
  257. package/dist/util/pattern.js.map +1 -0
  258. package/dist/util/time.d.ts +4 -0
  259. package/dist/util/time.d.ts.map +1 -0
  260. package/dist/util/time.js +41 -0
  261. package/dist/util/time.js.map +1 -0
  262. package/dist/util/uuid.d.ts +2 -0
  263. package/dist/util/uuid.d.ts.map +1 -0
  264. package/dist/util/uuid.js +8 -0
  265. package/dist/util/uuid.js.map +1 -0
  266. package/dist/util/wsl.d.ts +1 -0
  267. package/dist/util/wsl.d.ts.map +1 -0
  268. package/dist/util/wsl.js +14 -0
  269. package/dist/util/wsl.js.map +1 -0
  270. package/dist/webserver/backend/api.d.ts +3 -0
  271. package/dist/webserver/backend/api.d.ts.map +1 -0
  272. package/dist/webserver/backend/api.js +685 -0
  273. package/dist/webserver/backend/api.js.map +1 -0
  274. package/dist/webserver/backend/calendar.d.ts +5 -0
  275. package/dist/webserver/backend/calendar.d.ts.map +1 -0
  276. package/dist/webserver/backend/calendar.js +21 -0
  277. package/dist/webserver/backend/calendar.js.map +1 -0
  278. package/dist/webserver/backend/database.d.ts +149 -0
  279. package/dist/webserver/backend/database.d.ts.map +1 -0
  280. package/dist/webserver/backend/database.js +575 -0
  281. package/dist/webserver/backend/database.js.map +1 -0
  282. package/dist/webserver/backend/index.d.ts +31 -0
  283. package/dist/webserver/backend/index.d.ts.map +1 -0
  284. package/dist/webserver/backend/index.js +189 -0
  285. package/dist/webserver/backend/index.js.map +1 -0
  286. package/dist/webserver/backend/metrics.d.ts +3 -0
  287. package/dist/webserver/backend/metrics.d.ts.map +1 -0
  288. package/dist/webserver/backend/metrics.js +203 -0
  289. package/dist/webserver/backend/metrics.js.map +1 -0
  290. package/dist/webserver/backend/types.d.ts +115 -0
  291. package/dist/webserver/backend/types.d.ts.map +1 -0
  292. package/dist/webserver/backend/types.js +3 -0
  293. package/dist/webserver/backend/types.js.map +1 -0
  294. package/dist/webserver/backend/util.d.ts +2 -0
  295. package/dist/webserver/backend/util.d.ts.map +1 -0
  296. package/dist/webserver/backend/util.js +78 -0
  297. package/dist/webserver/backend/util.js.map +1 -0
  298. package/dist/webserver/index.d.ts +2 -0
  299. package/dist/webserver/index.d.ts.map +1 -0
  300. package/dist/webserver/index.js +9 -0
  301. package/dist/webserver/index.js.map +1 -0
  302. package/{src/webserver/frontend → frontend}/app.html +0 -0
  303. package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceBold.ttf +0 -0
  304. package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceItalic.otf +0 -0
  305. package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceMedium.otf +0 -0
  306. package/{src/webserver/frontend → frontend}/assets/fonts/GlacialIndifferenceRegular.ttf +0 -0
  307. package/{src/webserver/frontend → frontend}/assets/fonts/RobotoBold.ttf +0 -0
  308. package/{src/webserver/frontend → frontend}/assets/fonts/RobotoItalic.ttf +0 -0
  309. package/{src/webserver/frontend → frontend}/assets/fonts/RobotoRegular.ttf +0 -0
  310. package/{src/webserver/frontend → frontend}/assets/img/auth_bg.webp +0 -0
  311. package/{src/webserver/frontend → frontend}/assets/img/dark_bg.webp +0 -0
  312. package/{src/webserver/frontend → frontend}/assets/img/turkey.webp +0 -0
  313. package/{src/webserver/frontend → frontend}/auth.html +0 -0
  314. package/index.js +10 -2
  315. package/package.json +44 -16
  316. package/public/app.bundle.js +537 -73
  317. package/public/app.bundle.js.map +1 -1
  318. package/public/app.css +727 -2
  319. package/public/app.css.map +1 -1
  320. package/public/auth.bundle.js +18 -18
  321. package/public/auth.bundle.js.map +1 -1
  322. package/public/auth.css +364 -2
  323. package/public/auth.css.map +1 -1
  324. package/templates/rpc/README.md +29 -0
  325. package/templates/rpc/doc.json +7 -0
  326. package/templates/rpc/omegga_plugin +0 -0
  327. package/templates/rpc/plugin.json +4 -0
  328. package/templates/rpc/setup.sh +3 -0
  329. package/templates/safe/README.md +29 -0
  330. package/templates/safe/access.json +1 -0
  331. package/templates/safe/doc.json +7 -0
  332. package/templates/safe/omegga.plugin.js +20 -0
  333. package/templates/safe/plugin.json +4 -0
  334. package/templates/safe/setup.sh +4 -0
  335. package/templates/safe-ts/.gitignore.rename +3 -0
  336. package/templates/safe-ts/README.md +29 -0
  337. package/templates/safe-ts/access.json +1 -0
  338. package/templates/safe-ts/doc.json +7 -0
  339. package/templates/safe-ts/omegga.d.ts +1311 -0
  340. package/templates/safe-ts/omegga.plugin.ts +29 -0
  341. package/templates/safe-ts/plugin.json +4 -0
  342. package/templates/safe-ts/setup.sh +4 -0
  343. package/templates/safe-ts/tsconfig.json +10 -0
  344. package/templates/unsafe/README.md +29 -0
  345. package/templates/unsafe/doc.json +7 -0
  346. package/templates/unsafe/omegga.main.js +15 -0
  347. package/templates/unsafe/plugin.json +4 -0
  348. package/templates/unsafe/setup.sh +4 -0
  349. package/.babelrc.json +0 -5
  350. package/.github/workflows/lint.yml +0 -26
  351. package/.prettierrc +0 -7
  352. package/.vscode/extensions.json +0 -5
  353. package/src/OMEGGA_LEGACY_INSTALL +0 -44
  354. package/src/brickadia/config.js +0 -42
  355. package/src/brickadia/server.js +0 -227
  356. package/src/cli/auth.js +0 -104
  357. package/src/cli/config.js +0 -77
  358. package/src/cli/index.js +0 -6
  359. package/src/cli/installer.js +0 -65
  360. package/src/cli/plugin.js +0 -575
  361. package/src/cli/terminal.js +0 -466
  362. package/src/config/authorizer.js +0 -37
  363. package/src/config/formats/format_js.js +0 -6
  364. package/src/config/formats/format_yml.js +0 -8
  365. package/src/config/index.js +0 -81
  366. package/src/config/reader.js +0 -27
  367. package/src/config/validator.js +0 -32
  368. package/src/config/writer.js +0 -20
  369. package/src/info/default_commands.json +0 -26
  370. package/src/lib.js +0 -23
  371. package/src/main.js +0 -332
  372. package/src/omegga/auth.js +0 -138
  373. package/src/omegga/commandInjector.js +0 -228
  374. package/src/omegga/index.js +0 -22
  375. package/src/omegga/logWrangler.js +0 -323
  376. package/src/omegga/matchers/auth.js +0 -49
  377. package/src/omegga/matchers/chat.js +0 -73
  378. package/src/omegga/matchers/command.js +0 -39
  379. package/src/omegga/matchers/exit.js +0 -19
  380. package/src/omegga/matchers/init.js +0 -23
  381. package/src/omegga/matchers/join.js +0 -115
  382. package/src/omegga/matchers/leave.js +0 -58
  383. package/src/omegga/matchers/mapChange.js +0 -37
  384. package/src/omegga/matchers/version.js +0 -45
  385. package/src/omegga/player.js +0 -585
  386. package/src/omegga/plugin/plugin_jsonrpc_stdio.js +0 -526
  387. package/src/omegga/plugin/plugin_node_safe/proxyOmegga.js +0 -117
  388. package/src/omegga/plugin/plugin_node_safe/worker.js +0 -238
  389. package/src/omegga/plugin/plugin_node_safe.js +0 -473
  390. package/src/omegga/plugin/plugin_node_unsafe.js +0 -177
  391. package/src/omegga/plugin.js +0 -565
  392. package/src/omegga/server.js +0 -658
  393. package/src/omegga/wrapper.js +0 -62
  394. package/src/softconfig.js +0 -64
  395. package/src/util/brick/checkBounds.js +0 -22
  396. package/src/util/brick/constants.js +0 -185
  397. package/src/util/brick/getBounds.js +0 -36
  398. package/src/util/brick/getBrickSize.js +0 -9
  399. package/src/util/brick/getScaleAxis.js +0 -31
  400. package/src/util/brick/index.js +0 -9
  401. package/src/util/brick/rotate.js +0 -43
  402. package/src/util/brick/setOwnership.js +0 -20
  403. package/src/util/chat.js +0 -28
  404. package/src/util/color.js +0 -143
  405. package/src/util/file.js +0 -119
  406. package/src/util/index.js +0 -28
  407. package/src/util/map.js +0 -28
  408. package/src/util/pattern.js +0 -14
  409. package/src/util/time.js +0 -46
  410. package/src/util/uuid.js +0 -8
  411. package/src/util/wsl.js +0 -9
  412. package/src/webserver/backend/api.js +0 -795
  413. package/src/webserver/backend/calendar.js +0 -15
  414. package/src/webserver/backend/database.js +0 -725
  415. package/src/webserver/backend/index.js +0 -206
  416. package/src/webserver/backend/metrics.js +0 -148
  417. package/src/webserver/backend/util.js +0 -75
  418. package/src/webserver/frontend/.eslintrc.yml +0 -26
  419. package/src/webserver/frontend/app.js +0 -78
  420. package/src/webserver/frontend/auth.js +0 -16
  421. package/src/webserver/frontend/components/Background.vue +0 -83
  422. package/src/webserver/frontend/components/Button.vue +0 -105
  423. package/src/webserver/frontend/components/ChatEntry.vue +0 -107
  424. package/src/webserver/frontend/components/ChatTime.vue +0 -40
  425. package/src/webserver/frontend/components/Dimmer.vue +0 -43
  426. package/src/webserver/frontend/components/Dropdown.vue +0 -145
  427. package/src/webserver/frontend/components/Footer.vue +0 -29
  428. package/src/webserver/frontend/components/Header.vue +0 -27
  429. package/src/webserver/frontend/components/InfiniteScroll.vue +0 -51
  430. package/src/webserver/frontend/components/Input.vue +0 -93
  431. package/src/webserver/frontend/components/ListInput.vue +0 -105
  432. package/src/webserver/frontend/components/Loader.vue +0 -98
  433. package/src/webserver/frontend/components/MainMenuButton.vue +0 -83
  434. package/src/webserver/frontend/components/Modal.vue +0 -44
  435. package/src/webserver/frontend/components/NavBar.vue +0 -24
  436. package/src/webserver/frontend/components/PlayerDropdown.vue +0 -210
  437. package/src/webserver/frontend/components/PopoutContent.vue +0 -32
  438. package/src/webserver/frontend/components/RoleDropdown.vue +0 -157
  439. package/src/webserver/frontend/components/Scroll.vue +0 -33
  440. package/src/webserver/frontend/components/Toggle.vue +0 -91
  441. package/src/webserver/frontend/components/index.js +0 -33
  442. package/src/webserver/frontend/css/font.scss +0 -53
  443. package/src/webserver/frontend/css/mixins.scss +0 -49
  444. package/src/webserver/frontend/css/style.scss +0 -166
  445. package/src/webserver/frontend/css/theme.scss +0 -64
  446. package/src/webserver/frontend/partials/NavHeader.vue +0 -55
  447. package/src/webserver/frontend/partials/Page.vue +0 -40
  448. package/src/webserver/frontend/partials/PageContent.vue +0 -31
  449. package/src/webserver/frontend/partials/SideNav.vue +0 -115
  450. package/src/webserver/frontend/partials/index.js +0 -4
  451. package/src/webserver/frontend/router.js +0 -83
  452. package/src/webserver/frontend/views/Auth.vue +0 -190
  453. package/src/webserver/frontend/views/History.vue +0 -462
  454. package/src/webserver/frontend/views/Home.vue +0 -251
  455. package/src/webserver/frontend/views/Main.vue +0 -69
  456. package/src/webserver/frontend/views/NotFound.vue +0 -10
  457. package/src/webserver/frontend/views/Players.vue +0 -425
  458. package/src/webserver/frontend/views/PlayersInspector.vue +0 -538
  459. package/src/webserver/frontend/views/Plugins.vue +0 -217
  460. package/src/webserver/frontend/views/PluginsInspector.vue +0 -418
  461. package/src/webserver/frontend/views/Server.vue +0 -167
  462. package/src/webserver/frontend/views/Users.vue +0 -538
  463. package/src/webserver/frontend/widgets/Chat.vue +0 -124
  464. package/src/webserver/frontend/widgets/Status.vue +0 -91
  465. package/src/webserver/frontend/widgets/index.js +0 -2
  466. package/src/webserver/frontend/widgets/tooltip.js +0 -108
  467. package/src/webserver/index.js +0 -4
@@ -0,0 +1,189 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || function (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ var __importDefault = (this && this.__importDefault) || function (mod) {
26
+ return (mod && mod.__esModule) ? mod : { "default": mod };
27
+ };
28
+ Object.defineProperty(exports, "__esModule", { value: true });
29
+ const logger_1 = __importDefault(require("../../logger"));
30
+ const softconfig_1 = __importDefault(require("../../softconfig"));
31
+ const server_1 = __importDefault(require("../../omegga/server"));
32
+ const body_parser_1 = __importDefault(require("body-parser"));
33
+ const express_1 = __importDefault(require("express"));
34
+ const express_session_1 = __importDefault(require("express-session"));
35
+ const http_1 = __importDefault(require("http"));
36
+ const https_1 = __importDefault(require("https"));
37
+ const nedb_promises_session_store_1 = __importDefault(require("nedb-promises-session-store"));
38
+ const path_1 = __importDefault(require("path"));
39
+ const socket_io_1 = require("socket.io");
40
+ const api_1 = __importDefault(require("./api"));
41
+ const database_1 = __importDefault(require("./database"));
42
+ const metrics_1 = __importDefault(require("./metrics"));
43
+ const util = __importStar(require("./util"));
44
+ // path to frontend directory
45
+ const FRONTEND_PATH = path_1.default.join(__dirname, '../../../frontend');
46
+ // path to assets folder
47
+ const ASSET_PATH = path_1.default.join(FRONTEND_PATH, 'assets');
48
+ // path to webpacked data
49
+ const PUBLIC_PATH = path_1.default.join(__dirname, '../../../public');
50
+ const log = (...args) => logger_1.default.log(...args);
51
+ const error = (...args) => logger_1.default.error(...args);
52
+ // the webserver servers an authenticated
53
+ class Webserver {
54
+ // create a webserver
55
+ constructor(options, omegga) {
56
+ this.port = Number(options.port || process.env.PORT || softconfig_1.default.DEFAULT_PORT);
57
+ this.options = options;
58
+ this.omegga = omegga;
59
+ this.dataPath = path_1.default.join(omegga.path, softconfig_1.default.DATA_PATH);
60
+ // the database provides omegga with metrics, chat logs, and more
61
+ // to help administrators keep track of their users and server
62
+ this.database = new database_1.default(options, omegga);
63
+ // https status of the server
64
+ this.https = false;
65
+ // started status of the server
66
+ this.started = false;
67
+ this.created = this.createServer();
68
+ }
69
+ // create the webserver
70
+ async createServer() {
71
+ const hasOpenSSL = require('hasbin').sync('openssl');
72
+ // let the database do migrations
73
+ await this.database.doMigrations();
74
+ // create express app
75
+ this.app = (0, express_1.default)();
76
+ // create a server with https if applicable
77
+ const pickProtocol = async () => {
78
+ if (this.options.https) {
79
+ if (hasOpenSSL) {
80
+ const certFile = await util.getSSLKeys(this.dataPath);
81
+ if (certFile) {
82
+ // handy notification of generated ssl certs
83
+ if (certFile.new)
84
+ log('>>'.green, 'Generated new SSL certificate');
85
+ this.https = true;
86
+ return https_1.default.createServer({
87
+ key: certFile.keys.serviceKey,
88
+ cert: certFile.keys.certificate,
89
+ }, this.app);
90
+ }
91
+ else {
92
+ error('!>'.red, 'Error generating SSL certificate - falling back to http');
93
+ }
94
+ }
95
+ // warn the user
96
+ log(':>'.yellow, 'Running web server with http - install ', 'openssl'.yellow.underline, ' for https (more secure)');
97
+ }
98
+ // fallback to http
99
+ return new http_1.default.Server(this.app);
100
+ };
101
+ // create http(s) server based on openssl availability
102
+ this.server = await pickProtocol();
103
+ this.app.set('trust proxy', 1);
104
+ const session = (0, express_session_1.default)({
105
+ secret: util.getSessionSecret(this.dataPath),
106
+ resave: false,
107
+ saveUninitialized: false,
108
+ cookie: {
109
+ path: '/',
110
+ secure: this.https,
111
+ maxAge: 365 * 24 * 60 * 60 * 1000, // 1 year
112
+ },
113
+ // use a nedb database for session store
114
+ store: (0, nedb_promises_session_store_1.default)({
115
+ filename: path_1.default.join(this.dataPath, softconfig_1.default.SESSION_STORE),
116
+ connect: express_session_1.default,
117
+ }),
118
+ });
119
+ this.app.use(session);
120
+ // setup routes and webserver
121
+ await this.initWebUI(session);
122
+ return true;
123
+ }
124
+ // setup the web ui routes
125
+ async initWebUI(session) {
126
+ this.io = new socket_io_1.Server(this.server);
127
+ await this.database.getInstanceId();
128
+ // use the session middleware
129
+ this.io.use((socket, next) => {
130
+ const req = socket.request;
131
+ const res = req.res;
132
+ session(req, res, async () => {
133
+ // check if user is authenticated
134
+ const user = await this.database.findUserById(req.session.userId);
135
+ if (user && !user.isBanned) {
136
+ socket.data.user = user;
137
+ await this.database.stores.users.update({ _id: user._id }, { $set: { lastOnline: Date.now() } });
138
+ next();
139
+ }
140
+ else {
141
+ next(new Error('unauthorized'));
142
+ }
143
+ });
144
+ });
145
+ // provide assets in the /public path
146
+ this.app.use('/public', express_1.default.static(PUBLIC_PATH));
147
+ this.app.use('/public', express_1.default.static(ASSET_PATH));
148
+ this.app.use(body_parser_1.default.json());
149
+ this.rooms = ['chat', 'status', 'plugins', 'server'];
150
+ // setup the api
151
+ (0, api_1.default)(this, this.io);
152
+ // setup metrics and tracking
153
+ (0, metrics_1.default)(this, this.io);
154
+ // every request goes through the index file (frontend handles 404s)
155
+ this.app.use(async (req, res) => {
156
+ const user = await this.database.findUserById(req.session.userId);
157
+ const isAuth = user && !user.isBanned;
158
+ if (isAuth) {
159
+ res.sendFile(path_1.default.join(FRONTEND_PATH, 'app.html'));
160
+ }
161
+ else {
162
+ res.sendFile(path_1.default.join(FRONTEND_PATH, 'auth.html'));
163
+ }
164
+ });
165
+ }
166
+ // start the webserver
167
+ async start() {
168
+ if (this.started)
169
+ return;
170
+ await this.created;
171
+ return await new Promise(resolve => {
172
+ this.server.listen(this.port, () => {
173
+ log(`${'>>'.green} Web UI available at`, `http${this.https ? 's' : ''}://127.0.0.1:${this.port}`.green);
174
+ this.started = true;
175
+ this.database.addChatLog('server', {}, 'Server started');
176
+ resolve();
177
+ });
178
+ });
179
+ }
180
+ // stop the webserver
181
+ stop() {
182
+ this.database.addChatLog('server', {}, 'Server stopped');
183
+ this.server.close();
184
+ this.started = false;
185
+ clearInterval(this.serverStatusInterval);
186
+ }
187
+ }
188
+ exports.default = Webserver;
189
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/webserver/backend/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type Webserver from './index';
2
+ import { OmeggaSocketIo } from './types';
3
+ export default function (server: Webserver, io: OmeggaSocketIo): void;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.d.ts","sourceRoot":"","sources":["../../../src/webserver/backend/metrics.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,SAAS,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAIzC,MAAM,CAAC,OAAO,WAAW,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE,cAAc,QA+I7D"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const logger_1 = __importDefault(require("../../logger"));
7
+ const softconfig_1 = __importDefault(require("../../softconfig"));
8
+ const error = (...args) => logger_1.default.error(...args);
9
+ let lastRestart = 0;
10
+ const sleep = t => new Promise(resolve => setTimeout(resolve, t));
11
+ function default_1(server, io) {
12
+ const { database, omegga } = server;
13
+ // server status is checked every minute
14
+ clearInterval(server.serverStatusInterval);
15
+ // heartbeat happens every 60 seconds
16
+ let empties = 0;
17
+ // last heartbeat hour
18
+ let lastHour = -1;
19
+ // players that have joined in the last hour
20
+ let hourlyPlayers = [];
21
+ const exitOnStop = () => {
22
+ if (omegga.stopping || !omegga.started)
23
+ throw new Error('Omegga is already closing');
24
+ };
25
+ async function restartServer(config) {
26
+ lastRestart = Date.now();
27
+ const iconfig = {
28
+ players: config.playersEnabled,
29
+ bricks: config.bricksEnabled,
30
+ announcement: config.announcementEnabled,
31
+ minigames: config.minigamesEnabled,
32
+ environment: config.environmentEnabled,
33
+ };
34
+ omegga.emit('autorestart', iconfig);
35
+ await sleep(1000);
36
+ exitOnStop();
37
+ if (config.announcementEnabled) {
38
+ database.addChatLog('server', {}, 'Restarting in 30 seconds...');
39
+ logger_1.default.logp('Restarting in 30 seconds...');
40
+ const announce = (t) => omegga.broadcast(`<size="20">Server restart in <b><color="ffffbb">${t} second${t !== 1 ? 's' : ''}</></></>`);
41
+ announce(30);
42
+ await sleep(15000);
43
+ announce(15);
44
+ await sleep(10000);
45
+ announce(5);
46
+ await sleep(1000);
47
+ announce(4);
48
+ await sleep(1000);
49
+ announce(3);
50
+ await sleep(1000);
51
+ announce(2);
52
+ await sleep(1000);
53
+ announce(1);
54
+ await sleep(1000);
55
+ }
56
+ exitOnStop();
57
+ await omegga.saveServer(iconfig);
58
+ logger_1.default.logp('Restarting...');
59
+ database.addChatLog('server', {}, 'Restarting server...');
60
+ omegga.once('mapchange', () => {
61
+ omegga.restoreServer();
62
+ });
63
+ omegga.changeMap(omegga.currentMap);
64
+ }
65
+ async function checkAutoRestart(status) {
66
+ const now = new Date();
67
+ const currHour = now.getHours();
68
+ const currMinute = now.getMinutes();
69
+ logger_1.default.verbose('Autorestart check');
70
+ /// skip restart check if we sent restart command within 5 minutes
71
+ if (lastRestart > now.getTime() - 5 * 60 * 1000) {
72
+ logger_1.default.verbose('Skipping autorestart');
73
+ return;
74
+ }
75
+ const config = await database.getAutoRestartConfig();
76
+ const uptimeMinutes = Math.floor(status.time / 1000 / 60);
77
+ const uptimeHours = Math.floor(uptimeMinutes / 60);
78
+ if (config.maxUptimeEnabled && uptimeHours >= config.maxUptime) {
79
+ logger_1.default.verbose('Restarting due to max uptime');
80
+ return await restartServer(config);
81
+ }
82
+ if (config.emptyUptimeEnabled &&
83
+ uptimeHours >= config.emptyUptime &&
84
+ status.players.length === 0) {
85
+ logger_1.default.verbose('Restarting due to max empty uptime');
86
+ return await restartServer(config);
87
+ }
88
+ if (config.dailyHourEnabled &&
89
+ currHour === config.dailyHour &&
90
+ uptimeMinutes > currMinute) {
91
+ logger_1.default.verbose('Restarting due to daily schedule');
92
+ return await restartServer(config);
93
+ }
94
+ }
95
+ server.lastReportedStatus = null;
96
+ server.serverStatusInterval = setInterval(async () => {
97
+ if (!omegga.started)
98
+ return;
99
+ try {
100
+ // get the server status
101
+ const status = await omegga.getServerStatus();
102
+ if (!status)
103
+ return;
104
+ try {
105
+ await checkAutoRestart(status);
106
+ }
107
+ catch (err) {
108
+ error('Error in autorestart check', err);
109
+ }
110
+ // get players by id
111
+ const players = status.players.map(p => p.id);
112
+ // send the unaltered status to the frontend
113
+ server.lastReportedStatus = status;
114
+ io.to('status').emit('server.status', status);
115
+ try {
116
+ omegga.emit('metrics:heartbeat', status);
117
+ }
118
+ catch (e) {
119
+ // prevent the omegga callback handlers from crashing this
120
+ error('Error in heartbeat emit', e);
121
+ }
122
+ // stop recording metrics after 3 empty server statuses
123
+ if (players.length === 0 &&
124
+ ++empties > softconfig_1.default.METRIC_EMPTIES_BEFORE_PAUSE) {
125
+ return;
126
+ }
127
+ const now = new Date();
128
+ const hour = now.getUTCHours();
129
+ // check if it's a new hour (for punchcard unique player tracking)
130
+ if (hour !== lastHour) {
131
+ lastHour = hour;
132
+ hourlyPlayers = [];
133
+ }
134
+ // find all the players unique to this hour
135
+ const newPlayers = players.filter(p => !hourlyPlayers.includes(p));
136
+ if (newPlayers.length > 0) {
137
+ // update the punchcard
138
+ await database.updatePlayerPunchcard(newPlayers.length);
139
+ // mark those players as previously joined players
140
+ hourlyPlayers.push(...newPlayers);
141
+ }
142
+ // server is not empty, reset the counter
143
+ empties = 0;
144
+ const data = {
145
+ // number of bricks
146
+ bricks: status.bricks,
147
+ // unique players by id
148
+ players: players.filter((p, i) => players.indexOf(p) === i),
149
+ // addresses by player id
150
+ ips: Object.fromEntries(status.players.map(p => [p.id, p.address])),
151
+ };
152
+ // hand the server status off to the database
153
+ await database.addHeartbeat(data);
154
+ }
155
+ catch (e) {
156
+ // probably an issue getting server status
157
+ error('Server Not Responding...');
158
+ }
159
+ }, softconfig_1.default.METRIC_HEARTBEAT_INTERVAL);
160
+ // chat events
161
+ omegga.on('chat', async (name, message) => {
162
+ const p = omegga.getPlayer(name);
163
+ const user = {
164
+ id: p.id,
165
+ name,
166
+ color: p.getNameColor(),
167
+ };
168
+ // tell web users about a chat message
169
+ io.to('chat').emit('chat', await database.addChatLog('msg', user, message));
170
+ });
171
+ // player leave events
172
+ omegga.on('leave', async ({ id, name }) => {
173
+ // tell web users a player left
174
+ io.to('chat').emit('chat', await database.addChatLog('leave', { id, name }));
175
+ });
176
+ // player join events
177
+ omegga.on('join', async ({ id, name }) => {
178
+ // add the visit to the database
179
+ const isFirst = await database.addVisit({ id, name });
180
+ // tell web users a player joined (and if it's their first time joining)
181
+ io.to('chat').emit('chat', await database.addChatLog('join', Object.assign({ id,
182
+ name }, (isFirst ? { isFirst } : {}))));
183
+ });
184
+ // tell web users plugin status
185
+ omegga.on('plugin:status', (shortPath, info) => {
186
+ io.to('plugins').emit('plugin', shortPath, info);
187
+ });
188
+ // server status events
189
+ omegga.on('start', () => io
190
+ .to('server')
191
+ .emit('status', { started: true, starting: false, stopping: false }));
192
+ omegga.on('server:starting', () => io
193
+ .to('server')
194
+ .emit('status', { started: false, starting: true, stopping: false }));
195
+ omegga.on('server:stopped', () => io
196
+ .to('server')
197
+ .emit('status', { started: false, starting: false, stopping: false }));
198
+ omegga.on('server:stopping', () => io
199
+ .to('server')
200
+ .emit('status', { started: true, starting: false, stopping: true }));
201
+ }
202
+ exports.default = default_1;
203
+ //# sourceMappingURL=metrics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"metrics.js","sourceRoot":"","sources":["../../../src/webserver/backend/metrics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,115 @@
1
+ import { Server as SocketIo } from 'socket.io';
2
+ import { DefaultEventsMap } from 'socket.io/dist/typed-events';
3
+ declare module 'express-session' {
4
+ interface SessionData {
5
+ userId: string;
6
+ }
7
+ }
8
+ export declare type OmeggaSocketIo = SocketIo<DefaultEventsMap, DefaultEventsMap, DefaultEventsMap, {
9
+ user: IStoreUser & {
10
+ _id: string;
11
+ };
12
+ }>;
13
+ export interface IPlayer {
14
+ id?: string;
15
+ name?: string;
16
+ }
17
+ export interface IStoreVersion {
18
+ type: 'storeVersion';
19
+ version: number;
20
+ }
21
+ export interface IStoreServerInstance {
22
+ type: 'app:start';
23
+ date: number;
24
+ }
25
+ export interface IStoreAutoRestartConfig {
26
+ type: 'autoRestartConfig';
27
+ maxUptime: number;
28
+ maxUptimeEnabled: boolean;
29
+ emptyUptime: number;
30
+ emptyUptimeEnabled: boolean;
31
+ dailyHour: number;
32
+ dailyHourEnabled: boolean;
33
+ announcementEnabled: boolean;
34
+ playersEnabled: boolean;
35
+ bricksEnabled: boolean;
36
+ minigamesEnabled: boolean;
37
+ environmentEnabled: boolean;
38
+ }
39
+ export interface IStoreChat {
40
+ type: 'chat';
41
+ created: number;
42
+ instanceId: string;
43
+ action: 'msg' | 'server' | 'leave' | 'join';
44
+ user: Partial<IPlayer>;
45
+ message?: string;
46
+ }
47
+ export interface IStoreBanHistory {
48
+ type: 'banHistory';
49
+ banned: string;
50
+ bannerId: string | null;
51
+ created: any;
52
+ expires: any;
53
+ reason: string;
54
+ }
55
+ export interface IFrontendBanEntry {
56
+ bannerId: string;
57
+ reason: string;
58
+ created: number;
59
+ expires: number;
60
+ duration: number;
61
+ remainingTime: number;
62
+ bannerName: string;
63
+ }
64
+ export interface IStoreKickHistory {
65
+ type: 'kickHistory';
66
+ kicked: string;
67
+ kickerId: string | null;
68
+ created: any;
69
+ reason: string;
70
+ }
71
+ export interface IUserHistory {
72
+ type: 'userHistory';
73
+ id: string;
74
+ name: string;
75
+ nameHistory: {
76
+ name: string;
77
+ date: number;
78
+ }[];
79
+ ips: string[];
80
+ created: number;
81
+ lastSeen: number;
82
+ lastInstanceId: string;
83
+ heartbeats: number;
84
+ sessions: number;
85
+ instances: number;
86
+ }
87
+ export interface IUserAgo {
88
+ seenAgo?: number;
89
+ createdAgo?: number;
90
+ }
91
+ export interface IUserNote {
92
+ type: 'note';
93
+ id: string;
94
+ note: string;
95
+ }
96
+ export interface IStoreUser {
97
+ type: 'user';
98
+ created: number;
99
+ lastOnline: number;
100
+ username: string;
101
+ hash: string;
102
+ isOwner: boolean;
103
+ roles: string[];
104
+ playerId: string;
105
+ isBanned?: boolean;
106
+ }
107
+ export interface IPunchcard {
108
+ type: 'punchcard';
109
+ kind: 'playerCount';
110
+ created: number;
111
+ updated: number;
112
+ month: number;
113
+ year: number;
114
+ punchcard: number[][];
115
+ }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/webserver/backend/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/webserver/backend/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export declare function getSSLKeys(dataPath: string): Promise<any>;
2
+ export declare function getSessionSecret(dataPath: string): any;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../src/webserver/backend/util.ts"],"names":[],"mappings":"AAYA,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,gBAkChD;AAGD,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,OA0BhD"}
@@ -0,0 +1,78 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.getSessionSecret = exports.getSSLKeys = void 0;
7
+ const crypto_1 = __importDefault(require("crypto"));
8
+ const fs_1 = __importDefault(require("fs"));
9
+ const path_1 = __importDefault(require("path"));
10
+ const pem_1 = __importDefault(require("pem"));
11
+ const util_1 = require("util");
12
+ const softconfig_1 = __importDefault(require("../../softconfig"));
13
+ const createCertificate = (0, util_1.promisify)(pem_1.default.createCertificate);
14
+ // generate SSL certs for the https server
15
+ async function getSSLKeys(dataPath) {
16
+ const certsPath = path_1.default.join(dataPath, softconfig_1.default.WEB_CERTS_DATA);
17
+ let certData;
18
+ const now = Date.now();
19
+ // read cert data from json file
20
+ if (fs_1.default.existsSync(certsPath)) {
21
+ try {
22
+ certData = JSON.parse(fs_1.default.readFileSync(certsPath, 'utf8'));
23
+ // make sure the cert is not expired
24
+ if (certData.expires < now)
25
+ certData = undefined;
26
+ }
27
+ catch (e) {
28
+ // nothing to do here - probably bad json
29
+ }
30
+ }
31
+ // otherwise generate it
32
+ if (!certData) {
33
+ // expires in half the real duration time
34
+ const days = 360;
35
+ const expires = now + (days / 2) * 24 * 60 * 60 * 1000;
36
+ try {
37
+ const keys = await createCertificate({ days, selfSigned: true });
38
+ certData = { keys, expires, new: false };
39
+ fs_1.default.writeFileSync(certsPath, JSON.stringify(certData));
40
+ certData.new = true;
41
+ }
42
+ catch (e) {
43
+ // probably missing openssl or something
44
+ }
45
+ }
46
+ return certData;
47
+ }
48
+ exports.getSSLKeys = getSSLKeys;
49
+ // generate a session secret for the cookies
50
+ function getSessionSecret(dataPath) {
51
+ const tokenPath = path_1.default.join(dataPath, softconfig_1.default.WEB_SESSION_TOKEN);
52
+ const secretSize = 64;
53
+ let secret;
54
+ // read secret from file
55
+ if (fs_1.default.existsSync(tokenPath)) {
56
+ try {
57
+ secret = fs_1.default.readFileSync(tokenPath, 'utf8');
58
+ }
59
+ catch (e) {
60
+ // nothing to do here - probably file is a folder or something
61
+ }
62
+ }
63
+ if (!secret) {
64
+ // generate a new secret
65
+ const buf = Buffer.alloc(secretSize);
66
+ secret = crypto_1.default.randomFillSync(buf).toString('hex');
67
+ try {
68
+ // write secret to file
69
+ fs_1.default.writeFileSync(tokenPath, secret);
70
+ }
71
+ catch (e) {
72
+ // nothing to do here - maybe missing perms?
73
+ }
74
+ }
75
+ return secret;
76
+ }
77
+ exports.getSessionSecret = getSessionSecret;
78
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/webserver/backend/util.ts"],"names":[],"mappings":";;;;;;AAAA,oDAA4B;AAC5B,4CAAoB;AACpB,gDAAwB;AACxB,8CAAsB;AACtB,+BAAiC;AACjC,kEAAgC;AAEhC,MAAM,iBAAiB,GAEuB,IAAA,gBAAS,EAAC,aAAG,CAAC,iBAAiB,CAAC,CAAC;AAE/E,0CAA0C;AACnC,KAAK,UAAU,UAAU,CAAC,QAAgB;IAC/C,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAI,CAAC,cAAc,CAAC,CAAC;IAC3D,IAAI,QAAQ,CAAC;IACb,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEvB,gCAAgC;IAChC,IAAI,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC5B,IAAI;YACF,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;YAE1D,oCAAoC;YACpC,IAAI,QAAQ,CAAC,OAAO,GAAG,GAAG;gBAAE,QAAQ,GAAG,SAAS,CAAC;SAClD;QAAC,OAAO,CAAC,EAAE;YACV,yCAAyC;SAC1C;KACF;IAED,wBAAwB;IACxB,IAAI,CAAC,QAAQ,EAAE;QACb,yCAAyC;QACzC,MAAM,IAAI,GAAG,GAAG,CAAC;QACjB,MAAM,OAAO,GAAG,GAAG,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;QACvD,IAAI;YACF,MAAM,IAAI,GAAG,MAAM,iBAAiB,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;YACjE,QAAQ,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;YAEzC,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtD,QAAQ,CAAC,GAAG,GAAG,IAAI,CAAC;SACrB;QAAC,OAAO,CAAC,EAAE;YACV,wCAAwC;SACzC;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAlCD,gCAkCC;AAED,4CAA4C;AAC5C,SAAgB,gBAAgB,CAAC,QAAgB;IAC/C,MAAM,SAAS,GAAG,cAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,oBAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9D,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,IAAI,MAAM,CAAC;IACX,wBAAwB;IACxB,IAAI,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;QAC5B,IAAI;YACF,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SAC7C;QAAC,OAAO,CAAC,EAAE;YACV,8DAA8D;SAC/D;KACF;IAED,IAAI,CAAC,MAAM,EAAE;QACX,wBAAwB;QACxB,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QACrC,MAAM,GAAG,gBAAM,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACpD,IAAI;YACF,uBAAuB;YACvB,YAAE,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;SACrC;QAAC,OAAO,CAAC,EAAE;YACV,4CAA4C;SAC7C;KACF;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AA1BD,4CA0BC"}
@@ -0,0 +1,2 @@
1
+ import Backend from './backend';
2
+ export declare const Webserver: typeof Backend;
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/webserver/index.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,WAAW,CAAC;AAEhC,eAAO,MAAM,SAAS,gBAAU,CAAC"}