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,601 @@
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 default_commands_json_1 = __importDefault(require("../info/default_commands.json"));
7
+ const logger_1 = __importDefault(require("../logger"));
8
+ const softconfig_1 = require("../softconfig");
9
+ const _util_1 = require("../util");
10
+ const file_1 = require("../util/file");
11
+ const backend_1 = __importDefault(require("../webserver/backend"));
12
+ const brs_js_1 = require("brs-js");
13
+ require("colors");
14
+ const fs_1 = require("fs");
15
+ const glob_1 = require("glob");
16
+ const path_1 = require("path");
17
+ const commandInjector_1 = __importDefault(require("./commandInjector"));
18
+ const matchers_1 = __importDefault(require("./matchers"));
19
+ const plugin_1 = require("./plugin");
20
+ const wrapper_1 = __importDefault(require("./wrapper"));
21
+ const MISSING_CMD = '"Command not found. Type <color=\\"ffff00\\">/help</> for a list of commands or <color=\\"ffff00\\">/plugins</> for plugin information."';
22
+ // TODO: safe broadcast parsing
23
+ class Omegga extends wrapper_1.default {
24
+ /**
25
+ * Omegga instance
26
+ */
27
+ constructor(serverPath, cfg, options = {}) {
28
+ super(serverPath, cfg);
29
+ /** The save counter prevents omegga from saving over the same file */
30
+ this._tempCounter = { save: 0, environment: 0 };
31
+ /** The save prefix is prepended to all temporary saves */
32
+ this._tempSavePrefix = 'omegga_temp_';
33
+ // pluginloader is not private so plugins can potentially add more formats
34
+ this.pluginLoader = undefined;
35
+ this.verbose = logger_1.default.VERBOSE;
36
+ // inject commands
37
+ logger_1.default.verbose('Setting up command injector');
38
+ (0, commandInjector_1.default)(this, this.logWrangler);
39
+ // launch options (disabling webserver)
40
+ this.options = options;
41
+ // path to save files
42
+ this.savePath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Builds');
43
+ this.presetPath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Presets');
44
+ // path to config files
45
+ this.configPath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Server');
46
+ // create dir folders
47
+ logger_1.default.verbose('Creating directories');
48
+ (0, file_1.mkdir)(this.savePath);
49
+ (0, file_1.mkdir)(this.configPath);
50
+ // ignore auth file copy
51
+ if (!options.noauth) {
52
+ logger_1.default.verbose('Copying auth files');
53
+ this.copyAuthFiles();
54
+ }
55
+ // create the webserver if it's enabled
56
+ // the web interface provides access to server information while the server is running
57
+ // and lets you view chat logs, disable plugins, etc
58
+ if (!options.noweb) {
59
+ logger_1.default.verbose('Creating webserver');
60
+ this.webserver = new backend_1.default(cfg.omegga, this);
61
+ }
62
+ if (!options.noplugin) {
63
+ logger_1.default.verbose('Creating plugin loader');
64
+ // create the pluginloader
65
+ this.pluginLoader = new plugin_1.PluginLoader((0, path_1.join)(this.path, softconfig_1.PLUGIN_PATH), this);
66
+ logger_1.default.verbose('Creating loading plugins');
67
+ // load all the plugin formats in
68
+ this.pluginLoader.loadFormats((0, path_1.join)(__dirname, 'plugin'));
69
+ }
70
+ /** @type {Array<Player>}list of online players */
71
+ this.players = [];
72
+ /** host player info `{id: uuid, name: player name}` */
73
+ this.host = undefined;
74
+ /** @type {String} current game version - may later be turned into CL#### versions */
75
+ this.version = -1;
76
+ /** @type {Boolean} whether server has started */
77
+ this.started = false;
78
+ /** @type {Boolean} whether server is starting up */
79
+ this.starting = false;
80
+ /** @type {String} current map */
81
+ this.currentMap = '';
82
+ // add all the matchers to the server
83
+ logger_1.default.verbose('Adding matchers');
84
+ for (const matcher of matchers_1.default) {
85
+ const { pattern, callback } = matcher(this);
86
+ this.addMatcher(pattern, callback);
87
+ }
88
+ process.on('uncaughtException', async (err) => {
89
+ var _a, _b;
90
+ logger_1.default.verbose('Uncaught exception', err);
91
+ this.emit('error', err);
92
+ // publish stop to database
93
+ (_b = (_a = this.webserver) === null || _a === void 0 ? void 0 : _a.database) === null || _b === void 0 ? void 0 : _b.addChatLog('server', {}, 'Server error');
94
+ try {
95
+ await this.stop();
96
+ }
97
+ catch (e) {
98
+ logger_1.default.error(e);
99
+ }
100
+ process.exit();
101
+ });
102
+ // when brickadia starts, mark the server as started
103
+ this.on('start', ({ map }) => {
104
+ this.started = true;
105
+ this.starting = false;
106
+ this.currentMap = map;
107
+ this.writeln('Chat.MessageForUnknownCommands 0');
108
+ this.restoreServer();
109
+ });
110
+ // when brickadia exits, stop omegga
111
+ this.on('exit', () => {
112
+ this.stop();
113
+ });
114
+ // when the process closes, emit the exit signal and stop
115
+ this.on('closed', () => {
116
+ if (this.started)
117
+ this.emit('exit');
118
+ if (!this.stopping)
119
+ this.stop();
120
+ });
121
+ // detect when a missing command is sent
122
+ this.on('cmd', (cmd, name) => {
123
+ // if it's not in the default commands and it's not registered to a plugin,
124
+ // it's okay to send the missing command message
125
+ if (!default_commands_json_1.default.includes(cmd) &&
126
+ (!this.pluginLoader || !this.pluginLoader.isCommand(cmd))) {
127
+ this.whisper(name, MISSING_CMD);
128
+ }
129
+ });
130
+ }
131
+ /** attempt to save server state */
132
+ async saveServer(config) {
133
+ if (config.players && this.players.length > 0) {
134
+ logger_1.default.logp('Getting player positions...');
135
+ const players = await this.getAllPlayerPositions();
136
+ logger_1.default.logp(`Saving ${players.length} player positions...`);
137
+ const data = players
138
+ .filter(p => !p.isDead && p.pos)
139
+ .map(p => ({ position: p.pos, id: p.player.id }));
140
+ if (players.length > 0)
141
+ (0, fs_1.writeFileSync)((0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'omegga_temp_players.json'), JSON.stringify(data));
142
+ }
143
+ if (config.minigames) {
144
+ try {
145
+ logger_1.default.logp('Getting minigames...');
146
+ const minigames = await this.listMinigames();
147
+ logger_1.default.logp(`Saving ${minigames.length} minigames...`);
148
+ for (const minigame of minigames) {
149
+ logger_1.default.log(` - Saved "${minigame.name}" as omegga_temp_${minigame.index}`);
150
+ this.saveMinigame(minigame.index, 'omegga_temp_' + minigame.index);
151
+ }
152
+ }
153
+ catch (err) {
154
+ logger_1.default.errorp('Error getting minigames...', err);
155
+ }
156
+ }
157
+ if (config.environment) {
158
+ logger_1.default.logp('Saving environment...');
159
+ this.saveEnvironment('omegga_temp');
160
+ }
161
+ if (config.bricks) {
162
+ logger_1.default.logp('Saving bricks...');
163
+ await this.saveBricksAsync('omegga_temp');
164
+ }
165
+ }
166
+ /** attempt to restore the server's state */
167
+ async restoreServer() {
168
+ try {
169
+ const tempPlayersFile = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'omegga_temp_players.json');
170
+ if ((0, fs_1.existsSync)(tempPlayersFile)) {
171
+ logger_1.default.logp('Loading previous player positions...');
172
+ // player positions are an array to address multi-clienting
173
+ const players = JSON.parse((0, fs_1.readFileSync)(tempPlayersFile).toString());
174
+ // restore player position on join
175
+ const callback = (player) => {
176
+ const index = players.findIndex(p => p.id === player.id);
177
+ if (index > -1) {
178
+ const { position } = players[index];
179
+ this.writeln(`Chat.Command /TP "${player.name}" ${position.join(' ')} 0`);
180
+ // remove the entry
181
+ players[index] = players[players.length - 1];
182
+ players.pop();
183
+ }
184
+ };
185
+ this.on('join', callback);
186
+ setTimeout(() => {
187
+ try {
188
+ this.off('join', callback);
189
+ (0, fs_1.unlinkSync)(tempPlayersFile);
190
+ }
191
+ catch (err) {
192
+ logger_1.default.error('Error removing omegga_temp_players.json', err);
193
+ }
194
+ }, 10000);
195
+ }
196
+ const minigames = this.getMinigamePresets().filter(s => s.startsWith('omegga_temp_'));
197
+ if (minigames.length > 0) {
198
+ logger_1.default.logp('Loading previous minigames...');
199
+ for (const minigame of minigames) {
200
+ this.loadMinigame(minigame);
201
+ setTimeout(() => {
202
+ try {
203
+ (0, fs_1.unlinkSync)((0, path_1.join)(this.presetPath, 'Minigame', minigame + '.bp'));
204
+ }
205
+ catch (err) {
206
+ logger_1.default.error(`Error removing minigame ${minigame}`, err);
207
+ }
208
+ }, 10000);
209
+ }
210
+ }
211
+ const tempEnvironment = (0, path_1.join)(this.presetPath, 'Environment', 'omegga_temp.bp');
212
+ if ((0, fs_1.existsSync)(tempEnvironment)) {
213
+ logger_1.default.logp('Loading previous environment...');
214
+ this.loadEnvironment('omegga_temp');
215
+ setTimeout(() => {
216
+ try {
217
+ (0, fs_1.unlinkSync)(tempEnvironment);
218
+ }
219
+ catch (err) {
220
+ logger_1.default.error('Error removing environment omegga_temp.bp', err);
221
+ }
222
+ }, 10000);
223
+ }
224
+ const tempSave = this.getSavePath('omegga_temp');
225
+ if (tempSave) {
226
+ logger_1.default.logp('Loading previous bricks...');
227
+ this.loadBricks('omegga_temp');
228
+ setTimeout(() => {
229
+ try {
230
+ (0, fs_1.unlinkSync)(tempSave);
231
+ }
232
+ catch (err) {
233
+ logger_1.default.error('Error removing omegga_temp.brs', err);
234
+ }
235
+ }, 10000);
236
+ }
237
+ }
238
+ catch (err) {
239
+ logger_1.default.error('Error restoring previous server state', err);
240
+ }
241
+ }
242
+ /**
243
+ * start webserver, load plugins, start the brickadia server
244
+ * this should not be called by a plugin
245
+ */
246
+ //
247
+ async start() {
248
+ this.starting = true;
249
+ if (this.webserver)
250
+ await this.webserver.start();
251
+ if (this.pluginLoader) {
252
+ // scan for plugins
253
+ logger_1.default.verbose('Scanning for plugins');
254
+ await this.pluginLoader.scan();
255
+ // load the plugins
256
+ logger_1.default.verbose('Loading plugins');
257
+ await this.pluginLoader.reload();
258
+ }
259
+ logger_1.default.verbose('Starting Brickadia');
260
+ super.start();
261
+ this.emit('server:starting');
262
+ }
263
+ /**
264
+ * unload plugins and stop the server
265
+ * this should not be called by a plugin
266
+ */
267
+ async stop() {
268
+ if (!this.started && !this.starting) {
269
+ logger_1.default.verbose("Stop called while server wasn't started or was starting");
270
+ return;
271
+ }
272
+ if (this.stopping) {
273
+ logger_1.default.verbose('Stop called while server was starting');
274
+ return;
275
+ }
276
+ this.stopping = true;
277
+ this.emit('server:stopping');
278
+ if (this.pluginLoader) {
279
+ logger_1.default.verbose('Unloading plugins');
280
+ await this.pluginLoader.unload();
281
+ }
282
+ logger_1.default.verbose('Stopping server');
283
+ super.stop();
284
+ if (this.stopping)
285
+ this.emit('server:stopped');
286
+ this.stopping = false;
287
+ this.started = false;
288
+ this.starting = false;
289
+ this.players = [];
290
+ }
291
+ /**
292
+ * Copies auth files from home config dir
293
+ * this should never be called by a plugin
294
+ */
295
+ copyAuthFiles() {
296
+ const authPath = (0, path_1.join)(this.path, softconfig_1.DATA_PATH, 'Saved/Auth');
297
+ const homeAuthPath = (0, path_1.join)(softconfig_1.CONFIG_HOME, softconfig_1.CONFIG_AUTH_DIR);
298
+ (0, file_1.copyFiles)(homeAuthPath, authPath, softconfig_1.BRICKADIA_AUTH_FILES);
299
+ }
300
+ // TODO: split messages that longer than 512 characters
301
+ // TODO: delete characters that are known to crash the game
302
+ broadcast(...messages) {
303
+ messages
304
+ .flatMap(m => m.toString().split('\n'))
305
+ .filter(m => m.length < 512)
306
+ .forEach(m => this.writeln(`Chat.Broadcast ${m}`));
307
+ }
308
+ whisper(target, ...messages) {
309
+ // find the target player
310
+ if (typeof target !== 'object')
311
+ target = this.getPlayer(target);
312
+ // whisper the messages to that player
313
+ messages
314
+ .flatMap(m => m.toString().split('\n'))
315
+ .filter(m => m.length < 512)
316
+ .forEach(m => this.writeln(`Chat.Whisper "${target.name}" ${m}`));
317
+ }
318
+ middlePrint(target, message) {
319
+ // find the target player
320
+ if (typeof target !== 'object')
321
+ target = this.getPlayer(target);
322
+ // whisper the messages to that player
323
+ if (message.length > 512)
324
+ return;
325
+ this.writeln(`Chat.StatusMessage "${target.name}" ${message}`);
326
+ }
327
+ getPlayers() {
328
+ return this.players.map(p => (Object.assign({}, p)));
329
+ }
330
+ getRoleSetup() {
331
+ return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'RoleSetup.json'));
332
+ }
333
+ getRoleAssignments() {
334
+ return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'RoleAssignments.json'));
335
+ }
336
+ getBanList() {
337
+ return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'BanList.json'));
338
+ }
339
+ getNameCache() {
340
+ return (0, file_1.readWatchedJSON)((0, path_1.join)(this.configPath, 'PlayerNameCache.json'));
341
+ }
342
+ getPlayer(target) {
343
+ return this.players.find(p => p.name === target ||
344
+ p.id === target ||
345
+ p.controller === target ||
346
+ p.state === target);
347
+ }
348
+ findPlayerByName(name) {
349
+ name = name.toLowerCase();
350
+ const exploded = _util_1.pattern.explode(name);
351
+ return (this.players.find(p => p.name === name) || // find by exact match
352
+ this.players.find(p => p.name.indexOf(name) > -1) || // find by rough match
353
+ this.players.find(p => p.name.match(exploded))); // find by exploded regex match (ck finds cake, tbp finds TheBlackParrot)
354
+ }
355
+ getHostId() {
356
+ var _a, _b;
357
+ return (_b = (_a = this.host) === null || _a === void 0 ? void 0 : _a.id) !== null && _b !== void 0 ? _b : '';
358
+ }
359
+ saveMinigame(index, name) {
360
+ this.writeln(`Server.Minigames.SavePreset ${index} "${name}"`);
361
+ }
362
+ deleteMinigame(index) {
363
+ this.writeln(`Server.Minigames.Delete ${index}`);
364
+ }
365
+ resetMinigame(index) {
366
+ this.writeln(`Server.Minigames.Reset ${index}`);
367
+ }
368
+ nextRoundMinigame(index) {
369
+ this.writeln(`Server.Minigames.NextRound ${index}`);
370
+ }
371
+ loadMinigame(presetName, owner = '') {
372
+ this.writeln(`Server.Minigames.LoadPreset "${presetName}" ${owner ? `"${owner}"` : ''}`);
373
+ }
374
+ getMinigamePresets() {
375
+ const presetPath = (0, path_1.join)(this.presetPath, 'Minigame');
376
+ return (0, fs_1.existsSync)(presetPath)
377
+ ? (0, glob_1.sync)(presetPath + '/**/*.bp').map(f => (0, path_1.basename)(f).replace(/\.bp$/, ''))
378
+ : [];
379
+ }
380
+ resetEnvironment() {
381
+ this.writeln(`Server.Environment.Reset`);
382
+ }
383
+ saveEnvironment(presetName) {
384
+ this.writeln(`Server.Environment.SavePreset "${presetName}"`);
385
+ }
386
+ loadEnvironment(presetName) {
387
+ this.writeln(`Server.Environment.LoadPreset ${presetName}`);
388
+ }
389
+ loadEnvironmentData(preset) {
390
+ if ('data' in preset)
391
+ preset = preset.data.groups;
392
+ const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.environment++;
393
+ const path = (0, path_1.join)(this.presetPath, 'Environment', saveFile + '.bp');
394
+ (0, fs_1.writeFileSync)(path, JSON.stringify({
395
+ formatVersion: '1',
396
+ presetVersion: '1',
397
+ type: 'Environment',
398
+ data: {
399
+ groups: Object.assign({}, preset),
400
+ },
401
+ }));
402
+ this.loadEnvironment(saveFile);
403
+ // this is lazy, but environments should load much faster than builds
404
+ // do, so it's not really worth keeping track of logs for this
405
+ setTimeout(() => (0, fs_1.unlinkSync)(path), 5000);
406
+ }
407
+ getEnvironmentPresets() {
408
+ const presetPath = (0, path_1.join)(this.presetPath, 'Environment');
409
+ return (0, fs_1.existsSync)(presetPath)
410
+ ? (0, glob_1.sync)(presetPath + '/**/*.bp').map(f => (0, path_1.basename)(f).replace(/\.bp$/, ''))
411
+ : [];
412
+ }
413
+ clearBricks(target, quiet = false) {
414
+ // target is a player object, just use that id
415
+ if (typeof target === 'object' && target.id)
416
+ target = target.id;
417
+ // if the target isn't a uuid already, find the player by name or controller and use that uuid
418
+ else if (typeof target === 'string' && !_util_1.uuid.match(target)) {
419
+ // only set the target if the player exists
420
+ const player = this.getPlayer(target);
421
+ target = player && player.id;
422
+ }
423
+ if (!target)
424
+ return;
425
+ this.writeln(`Bricks.Clear ${target} ${quiet ? 1 : ''}`);
426
+ }
427
+ clearRegion(region, options) {
428
+ let target = '';
429
+ // target is a player object, just use that id
430
+ if (options && typeof options.target === 'object')
431
+ target = ' ' + options.target.id;
432
+ // if the target isn't a uuid already, find the player by name or controller and use that uuid
433
+ if (typeof target === 'string' && !_util_1.uuid.match(target)) {
434
+ // only set the target if the player exists
435
+ const player = this.getPlayer(target);
436
+ if (player)
437
+ target = ' ' + player.id;
438
+ }
439
+ this.writeln(`Bricks.ClearRegion ${region.center.join(' ')} ${region.extent.join(' ')}${target}`);
440
+ }
441
+ clearAllBricks(quiet = false) {
442
+ this.writeln(`Bricks.ClearAll ${quiet ? 1 : ''}`);
443
+ }
444
+ saveBricks(saveName, region) {
445
+ if (!saveName)
446
+ return;
447
+ // add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
448
+ if (!(saveName.startsWith('"') && saveName.endsWith('"')))
449
+ saveName = `"${saveName}"`;
450
+ if ((region === null || region === void 0 ? void 0 : region.center) && (region === null || region === void 0 ? void 0 : region.extent))
451
+ this.writeln(`Bricks.SaveRegion ${saveName} ${region.center.join(' ')} ${region.extent.join(' ')}`);
452
+ else
453
+ this.writeln(`Bricks.Save ${saveName}`);
454
+ }
455
+ async saveBricksAsync(saveName, region) {
456
+ if (!saveName)
457
+ return;
458
+ let saveNameClean = saveName;
459
+ // add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
460
+ if (!(saveName.startsWith('"') && saveName.endsWith('"')))
461
+ saveNameClean = `"${saveName}"`;
462
+ const command = (region === null || region === void 0 ? void 0 : region.center) && (region === null || region === void 0 ? void 0 : region.extent)
463
+ ? `Bricks.SaveRegion ${saveNameClean} ${region.center.join(' ')} ${region.extent.join(' ')}`
464
+ : `Bricks.Save ${saveNameClean}`;
465
+ // wait for the server to save the file
466
+ await this.watchLogChunk(command, /^(LogBrickSerializer|LogTemp): (.+)$/, {
467
+ first: match => match[0].endsWith(saveName + '.brs...'),
468
+ last: match => Boolean(match[2].match(/Saved .+ bricks and .+ components from .+ owners|Error: No bricks in grid!|Error: No bricks selected to save!/)),
469
+ afterMatchDelay: 0,
470
+ timeoutDelay: 30000,
471
+ });
472
+ }
473
+ loadBricks(saveName, { offX = 0, offY = 0, offZ = 0, quiet = false, correctPalette = false, correctCustom = false, } = {}) {
474
+ // add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
475
+ if (!(saveName.startsWith('"') && saveName.endsWith('"')))
476
+ saveName = `"${saveName}"`;
477
+ this.writeln(`Bricks.Load ${saveName} ${offX} ${offY} ${offZ} ${quiet ? 1 : 0} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0}`);
478
+ }
479
+ loadBricksOnPlayer(saveName, player, { offX = 0, offY = 0, offZ = 0, correctPalette = false, correctCustom = false, } = {}) {
480
+ player = typeof player === 'string' ? this.getPlayer(player) : player;
481
+ if (!player)
482
+ return;
483
+ // add quotes around the filename if it doesn't have them (backwards compat w/ plugins)
484
+ if (!(saveName.startsWith('"') && saveName.endsWith('"')))
485
+ saveName = `"${saveName}"`;
486
+ this.writeln(`Bricks.LoadTemplate ${saveName} ${offX} ${offY} ${offZ} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0} "${player.name}"`);
487
+ }
488
+ getSaves() {
489
+ return (0, fs_1.existsSync)(this.savePath) ? (0, glob_1.sync)(this.savePath + '/**/*.brs') : [];
490
+ }
491
+ getSavePath(saveName) {
492
+ const file = (0, path_1.join)(this.savePath, saveName.endsWith('.brs') ? saveName : saveName + '.brs');
493
+ return (0, fs_1.existsSync)(file) ? file : undefined;
494
+ }
495
+ writeSaveData(saveName, saveData) {
496
+ if (typeof saveName !== 'string')
497
+ throw 'expected name argument for writeSaveData';
498
+ const file = (0, path_1.join)(this.savePath, saveName + '.brs');
499
+ if (!file.startsWith(this.savePath))
500
+ throw 'save file not in Saved/Builds directory';
501
+ (0, fs_1.writeFileSync)(file, new Uint8Array((0, brs_js_1.write)(saveData)));
502
+ }
503
+ readSaveData(saveName, nobricks = false) {
504
+ if (typeof saveName !== 'string')
505
+ throw 'expected name argument for readSaveData';
506
+ const file = this.getSavePath(saveName);
507
+ if (!file || !file.startsWith(this.savePath))
508
+ throw 'save file not in Saved/Builds directory';
509
+ if (file)
510
+ return (0, brs_js_1.read)((0, fs_1.readFileSync)(file), {
511
+ preview: false,
512
+ bricks: !nobricks,
513
+ });
514
+ }
515
+ async loadSaveData(saveData, { offX = 0, offY = 0, offZ = 0, quiet = false, correctPalette = false, correctCustom = false, } = {}) {
516
+ const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.save++;
517
+ // write savedata to file
518
+ this.writeSaveData(saveFile, saveData);
519
+ // wait for the server to finish reading the save
520
+ await this.watchLogChunk(`Bricks.Load "${saveFile}" ${offX} ${offY} ${offZ} ${quiet ? 1 : 0} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0}`, /^LogBrickSerializer: (.+)$/, {
521
+ first: match => match[0].endsWith(saveFile + '.brs...'),
522
+ last: match => Boolean(match[1].match(/Read .+ bricks/)),
523
+ afterMatchDelay: 0,
524
+ timeoutDelay: 30000,
525
+ });
526
+ // delete the save file after we're done
527
+ const savePath = this.getSavePath(saveFile);
528
+ if (savePath) {
529
+ (0, fs_1.unlinkSync)(savePath);
530
+ }
531
+ }
532
+ async loadSaveDataOnPlayer(saveData, player, { offX = 0, offY = 0, offZ = 0, correctPalette = false, correctCustom = false, } = {}) {
533
+ player = typeof player === 'string' ? this.getPlayer(player) : player;
534
+ if (!player)
535
+ return;
536
+ const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.save++;
537
+ // write savedata to file
538
+ this.writeSaveData(saveFile, saveData);
539
+ // wait for the server to finish reading the save
540
+ await this.watchLogChunk(`Bricks.LoadTemplate "${saveFile}" ${offX} ${offY} ${offZ} ${correctPalette ? 1 : 0} ${correctCustom ? 1 : 0} ${player.name}`, /^LogBrickSerializer: (.+)$/, {
541
+ first: match => match[0].endsWith(saveFile + '.brs...'),
542
+ last: match => Boolean(match[1].match(/Read .+ bricks/)),
543
+ afterMatchDelay: 0,
544
+ timeoutDelay: 30000,
545
+ });
546
+ // delete the save file after we're done
547
+ const savePath = this.getSavePath(saveFile);
548
+ if (savePath) {
549
+ (0, fs_1.unlinkSync)(savePath);
550
+ }
551
+ }
552
+ async getSaveData(region) {
553
+ const saveFile = this._tempSavePrefix + Date.now() + '_' + this._tempCounter.save++;
554
+ await this.saveBricksAsync(saveFile, region);
555
+ // read the save file
556
+ const savePath = this.getSavePath(saveFile);
557
+ if (savePath) {
558
+ // read and parse the save file
559
+ const saveData = (0, brs_js_1.read)((0, fs_1.readFileSync)(savePath));
560
+ // delete the save file after we're done reading it
561
+ (0, fs_1.unlinkSync)(savePath);
562
+ // return the parsed save
563
+ return saveData;
564
+ }
565
+ return undefined;
566
+ }
567
+ async changeMap(map) {
568
+ if (!map)
569
+ return;
570
+ // ServerTravel requires /Game/Maps/Plate/Plate instead of Plate
571
+ const brName = _util_1.map.n2brn(map);
572
+ // wait for the server to change maps
573
+ const match = await this.addWatcher(/^.*(LogLoad: Took .+ seconds to LoadMap\((?<map>.+)\))|(ERROR: The map .+)$/, {
574
+ timeoutDelay: 30000,
575
+ exec: () => this.writeln(`ServerTravel ${brName}`),
576
+ });
577
+ const success = !!(match &&
578
+ match[0] &&
579
+ match[0].groups &&
580
+ match[0].groups.map);
581
+ return success;
582
+ }
583
+ async getPlugin(name) {
584
+ const plugin = this.pluginLoader.plugins.find(p => p.getName() === name);
585
+ if (plugin) {
586
+ return {
587
+ name,
588
+ documentation: plugin.getDocumentation(),
589
+ loaded: plugin.isLoaded(),
590
+ emitPlugin: (event, ...args) => {
591
+ return plugin.emitPlugin(event, 'unsafe', args);
592
+ },
593
+ };
594
+ }
595
+ else {
596
+ return null;
597
+ }
598
+ }
599
+ }
600
+ exports.default = Omegga;
601
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../../src/omegga/server.ts"],"names":[],"mappings":"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"}