omegga 1.1.2 → 1.2.0

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 (137) hide show
  1. package/README.md +10 -1
  2. package/dist/brickadia/server.d.ts +17 -0
  3. package/dist/brickadia/server.js +81 -4
  4. package/dist/brickadia/server.js.map +1 -1
  5. package/dist/cli/auth.js +1 -1
  6. package/dist/cli/auth.js.map +1 -1
  7. package/dist/cli/terminal.js +99 -6
  8. package/dist/cli/terminal.js.map +1 -1
  9. package/dist/config/reader.js.map +1 -1
  10. package/dist/config/types.d.ts +5 -0
  11. package/dist/main.js +43 -47
  12. package/dist/main.js.map +1 -1
  13. package/dist/omegga/player.js +4 -2
  14. package/dist/omegga/player.js.map +1 -1
  15. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -1
  16. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +5 -5
  17. package/dist/omegga/plugin.d.ts +2 -2
  18. package/dist/omegga/server.d.ts +6 -5
  19. package/dist/omegga/server.js +128 -84
  20. package/dist/omegga/server.js.map +1 -1
  21. package/dist/omegga/wrapper.d.ts +11 -0
  22. package/dist/omegga/wrapper.js +16 -0
  23. package/dist/omegga/wrapper.js.map +1 -1
  24. package/dist/plugin.d.ts +7 -9
  25. package/dist/plugin.js.map +1 -1
  26. package/dist/softconfig.d.ts +1 -0
  27. package/dist/softconfig.js +2 -1
  28. package/dist/softconfig.js.map +1 -1
  29. package/dist/tsconfig.tsbuildinfo +1 -1
  30. package/dist/updater/index.d.ts +1 -0
  31. package/dist/updater/index.js +10 -0
  32. package/dist/updater/index.js.map +1 -0
  33. package/dist/updater/steam.d.ts +52 -0
  34. package/dist/updater/steam.js +139 -0
  35. package/dist/updater/steam.js.map +1 -0
  36. package/dist/util/color.js +7 -7
  37. package/dist/util/color.js.map +1 -1
  38. package/dist/util/time.js +1 -1
  39. package/dist/util/time.js.map +1 -1
  40. package/dist/webserver/backend/api.d.ts +83 -1
  41. package/dist/webserver/backend/api.js +174 -15
  42. package/dist/webserver/backend/api.js.map +1 -1
  43. package/dist/webserver/backend/database.js +10 -3
  44. package/dist/webserver/backend/database.js.map +1 -1
  45. package/dist/webserver/backend/index.js +5 -9
  46. package/dist/webserver/backend/index.js.map +1 -1
  47. package/dist/webserver/backend/metrics.js +58 -11
  48. package/dist/webserver/backend/metrics.js.map +1 -1
  49. package/eslint.config.mjs +53 -0
  50. package/package.json +37 -29
  51. package/public/app.html +1865 -0
  52. package/public/assets/IconArrowRight-CA5_cccJ.js +7 -0
  53. package/public/assets/IconArrowRight-CA5_cccJ.js.map +1 -0
  54. package/public/assets/IconCheck-Dyq5qyY1.js +17 -0
  55. package/public/assets/IconCheck-Dyq5qyY1.js.map +1 -0
  56. package/public/assets/IconLockOpen-D95XLORK.js +7 -0
  57. package/public/assets/IconLockOpen-D95XLORK.js.map +1 -0
  58. package/public/assets/IconWorld-DtARpBKX.js +72 -0
  59. package/public/assets/IconWorld-DtARpBKX.js.map +1 -0
  60. package/public/assets/IconWorldPlus-CMeE6oOX.js +182 -0
  61. package/public/assets/IconWorldPlus-CMeE6oOX.js.map +1 -0
  62. package/public/assets/IconX-SYtbnYKI.js +12 -0
  63. package/public/assets/IconX-SYtbnYKI.js.map +1 -0
  64. package/public/assets/_commonjsHelpers-CE1G-McA.js +2 -0
  65. package/public/assets/_commonjsHelpers-CE1G-McA.js.map +1 -0
  66. package/public/assets/app-CRu25Om6.js +6 -0
  67. package/public/assets/app-CRu25Om6.js.map +1 -0
  68. package/public/assets/auth-DdQ5DJ5h.js +2 -0
  69. package/public/assets/auth-DdQ5DJ5h.js.map +1 -0
  70. package/public/assets/client-C5T7_OK9.js +26 -0
  71. package/public/assets/client-C5T7_OK9.js.map +1 -0
  72. package/public/assets/index-CJ4e7_2M.js +2 -0
  73. package/public/assets/index-CJ4e7_2M.js.map +1 -0
  74. package/public/assets/index-CRRRLlCc.js +10 -0
  75. package/public/assets/index-CRRRLlCc.js.map +1 -0
  76. package/public/assets/index-CSV4ZXsq.js +2 -0
  77. package/public/assets/index-CSV4ZXsq.js.map +1 -0
  78. package/public/assets/index-CtY8r8rg.js +9 -0
  79. package/public/assets/index-CtY8r8rg.js.map +1 -0
  80. package/public/assets/index-DaWNRjkx.js +2 -0
  81. package/public/assets/index-DaWNRjkx.js.map +1 -0
  82. package/public/assets/index-DqHVrEeL.js +10 -0
  83. package/public/assets/index-DqHVrEeL.js.map +1 -0
  84. package/public/assets/index-c0qeY2gs.js +10 -0
  85. package/public/assets/index-c0qeY2gs.js.map +1 -0
  86. package/public/assets/index-i4mjW0og.js +2 -0
  87. package/public/assets/index-i4mjW0og.js.map +1 -0
  88. package/public/assets/jsx-runtime-Bw5QeaCk.js +10 -0
  89. package/public/assets/jsx-runtime-Bw5QeaCk.js.map +1 -0
  90. package/public/assets/jsx-runtime-DoEZbXM1.js +2 -0
  91. package/public/assets/jsx-runtime-DoEZbXM1.js.map +1 -0
  92. package/public/assets/shared/@components-BiaBe0jO.js +2 -0
  93. package/public/assets/shared/@components-BiaBe0jO.js.map +1 -0
  94. package/public/assets/shared/@hooks-DfTzYBIL.js +2 -0
  95. package/public/assets/shared/@hooks-DfTzYBIL.js.map +1 -0
  96. package/public/assets/shared/@nanostores_react-HTG3s0lp.js +2 -0
  97. package/public/assets/shared/@nanostores_react-HTG3s0lp.js.map +1 -0
  98. package/public/assets/shared/@tabler_icons-react-DwfGvIVr.js +29458 -0
  99. package/public/assets/shared/@tabler_icons-react-DwfGvIVr.js.map +1 -0
  100. package/public/assets/shared/@utils-BQyGUOvP.js +2 -0
  101. package/public/assets/shared/@utils-BQyGUOvP.js.map +1 -0
  102. package/public/assets/shared/nanostores-BFqqIY_c.js +2 -0
  103. package/public/assets/shared/nanostores-BFqqIY_c.js.map +1 -0
  104. package/public/assets/shared/react-CR6vSpIu.js +2 -0
  105. package/public/assets/shared/react-CR6vSpIu.js.map +1 -0
  106. package/public/assets/shared/react-dom-BznoGTRX.js +2 -0
  107. package/public/assets/shared/react-dom-BznoGTRX.js.map +1 -0
  108. package/public/assets/shared/react_jsx-runtime-C15Zu6_p.js +2 -0
  109. package/public/assets/shared/react_jsx-runtime-C15Zu6_p.js.map +1 -0
  110. package/public/assets/shared/wouter-DbmGxXTo.js +2 -0
  111. package/public/assets/shared/wouter-DbmGxXTo.js.map +1 -0
  112. package/public/auth.html +1206 -0
  113. package/templates/rust/src/main.rs +25 -0
  114. package/templates/safe-ts/omegga.d.ts +7 -9
  115. package/tools/install_steamcmd.sh +1 -1
  116. package/.prettierignore +0 -6
  117. package/frontend/app.html +0 -14
  118. package/frontend/auth.html +0 -14
  119. package/omegga-config.yml +0 -7
  120. package/public/app.bundle.js +0 -54537
  121. package/public/app.bundle.js.map +0 -1
  122. package/public/app.css +0 -6345
  123. package/public/app.css.map +0 -1
  124. package/public/auth.bundle.js +0 -17789
  125. package/public/auth.bundle.js.map +0 -1
  126. package/public/auth.css +0 -3313
  127. package/public/auth.css.map +0 -1
  128. /package/{frontend/assets/fonts/GlacialIndifferenceBold.ttf → public/assets/GlacialIndifferenceBold-DhenBmgZ.ttf} +0 -0
  129. /package/{frontend/assets/fonts/GlacialIndifferenceItalic.otf → public/assets/GlacialIndifferenceItalic-BApAEtVA.otf} +0 -0
  130. /package/{frontend/assets/fonts/GlacialIndifferenceMedium.otf → public/assets/GlacialIndifferenceMedium-CALcoUYm.otf} +0 -0
  131. /package/{frontend/assets/fonts/GlacialIndifferenceRegular.ttf → public/assets/GlacialIndifferenceRegular-DynFsoUc.ttf} +0 -0
  132. /package/{frontend/assets/fonts/RobotoBold.ttf → public/assets/RobotoBold-DB1hqCFM.ttf} +0 -0
  133. /package/{frontend/assets/fonts/RobotoItalic.ttf → public/assets/RobotoItalic-DIrf6xfk.ttf} +0 -0
  134. /package/{frontend/assets/fonts/RobotoRegular.ttf → public/assets/RobotoRegular-CGSfnFoJ.ttf} +0 -0
  135. /package/{frontend/assets/img/auth_bg.webp → public/assets/auth_bg-DJZN1T-H.webp} +0 -0
  136. /package/{frontend/assets/img/dark_bg.webp → public/assets/dark_bg-uu5tZDxN.webp} +0 -0
  137. /package/{frontend/assets/img/turkey.webp → public/assets/turkey-BW4gu-4u.webp} +0 -0
@@ -0,0 +1,52 @@
1
+ export declare function getAppId(): string;
2
+ export declare function steamcmdDownloadSelf(): void;
3
+ export declare function steamcmdDownloadGame({ steambeta, steambetaPassword, }?: {
4
+ steambeta?: string;
5
+ steambetaPassword?: string;
6
+ }): void;
7
+ export type SteamInfo = {
8
+ data: Record<string, {
9
+ _change_number: number;
10
+ _missing_token: boolean;
11
+ _sha: string;
12
+ _size: number;
13
+ appid: number;
14
+ common: unknown;
15
+ config: unknown;
16
+ depots: Record<string, {
17
+ config: {
18
+ oslist: 'linux' | 'windows' | 'macos';
19
+ };
20
+ }> & {
21
+ branches: Record<string, {
22
+ buildid: string;
23
+ timeupdated: string;
24
+ description?: string;
25
+ }>;
26
+ privatebranches: '1';
27
+ };
28
+ }>;
29
+ status: 'success';
30
+ };
31
+ export type SteamAcf = {
32
+ AppState: {
33
+ appid: string;
34
+ buildid: string;
35
+ lastupdated: string;
36
+ };
37
+ };
38
+ export declare function getLocalSteamDepot(steambeta?: string): {
39
+ buildId: string;
40
+ timeUpdated: number;
41
+ };
42
+ export declare function getRemoteSteamDepot(steambeta?: string): Promise<{
43
+ buildId: string;
44
+ timeUpdated: number;
45
+ }>;
46
+ export declare const getLastSteamUpdateCheck: () => {
47
+ attempt: number;
48
+ available: number;
49
+ result: boolean;
50
+ };
51
+ export declare const clearLastSteamUpdateCheck: () => void;
52
+ export declare function hasSteamUpdate(steambeta?: string): Promise<boolean>;
@@ -0,0 +1,139 @@
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.clearLastSteamUpdateCheck = exports.getLastSteamUpdateCheck = void 0;
7
+ exports.getAppId = getAppId;
8
+ exports.steamcmdDownloadSelf = steamcmdDownloadSelf;
9
+ exports.steamcmdDownloadGame = steamcmdDownloadGame;
10
+ exports.getLocalSteamDepot = getLocalSteamDepot;
11
+ exports.getRemoteSteamDepot = getRemoteSteamDepot;
12
+ exports.hasSteamUpdate = hasSteamUpdate;
13
+ const logger_1 = __importDefault(require("../logger"));
14
+ const softconfig_1 = require("../softconfig");
15
+ const child_process_1 = require("child_process");
16
+ const fs_1 = require("fs");
17
+ const path_1 = __importDefault(require("path"));
18
+ const steam_acf2json_1 = __importDefault(require("steam-acf2json"));
19
+ function getAppId() {
20
+ var _a;
21
+ return (_a = process.env.STEAM_APP_ID) !== null && _a !== void 0 ? _a : softconfig_1.STEAM_APP_ID;
22
+ }
23
+ function steamcmdDownloadSelf() {
24
+ (0, child_process_1.execSync)(path_1.default.join(__dirname, '../../tools/install_steamcmd.sh'), {
25
+ stdio: 'inherit',
26
+ });
27
+ }
28
+ function steamcmdDownloadGame({ steambeta, steambetaPassword, } = {}) {
29
+ const args = [
30
+ `+force_install_dir ${path_1.default.join(softconfig_1.GAME_INSTALL_DIR, steambeta !== null && steambeta !== void 0 ? steambeta : 'main')}`,
31
+ `+login anonymous`,
32
+ `+app_update ${getAppId()}`,
33
+ steambeta ? `-beta ${steambeta}` : null,
34
+ steambeta && steambetaPassword
35
+ ? `-betapassword ${steambetaPassword}`
36
+ : null,
37
+ '+quit',
38
+ ].filter(Boolean);
39
+ (0, child_process_1.execSync)(`${softconfig_1.STEAMCMD_PATH} ${args.join(' ')}`, { stdio: 'inherit' });
40
+ }
41
+ async function fetchSteamInfo() {
42
+ const appId = getAppId();
43
+ const res = await fetch('https://api.steamcmd.net/v1/info/' + appId);
44
+ const json = await res.json();
45
+ return json;
46
+ }
47
+ function getSteamAcf(steambeta) {
48
+ const appId = getAppId();
49
+ const installDir = path_1.default.join(softconfig_1.GAME_INSTALL_DIR, steambeta !== null && steambeta !== void 0 ? steambeta : 'main');
50
+ const acfPath = path_1.default.join(installDir, 'steamapps', `appmanifest_${appId}.acf`);
51
+ if (!(0, fs_1.existsSync)(acfPath)) {
52
+ logger_1.default.verbose(`File not found: ${acfPath}`);
53
+ return null;
54
+ }
55
+ try {
56
+ const plaintext = (0, fs_1.readFileSync)(acfPath, 'utf-8');
57
+ const json = steam_acf2json_1.default.decode(plaintext);
58
+ return json;
59
+ }
60
+ catch (err) {
61
+ logger_1.default.error(`Error parsing ACF file ${acfPath}:`, err);
62
+ return null;
63
+ }
64
+ }
65
+ function getSteamDepot(info, branch) {
66
+ var _a, _b, _c;
67
+ const appId = getAppId();
68
+ const depot = (_c = (_b = (_a = info.data[appId]) === null || _a === void 0 ? void 0 : _a.depots) === null || _b === void 0 ? void 0 : _b.branches) === null || _c === void 0 ? void 0 : _c[!branch || branch === 'main' ? 'public' : branch];
69
+ if (!depot ||
70
+ typeof depot !== 'object' ||
71
+ !('buildid' in depot) ||
72
+ !('timeupdated' in depot))
73
+ return null;
74
+ return {
75
+ buildId: depot.buildid,
76
+ timeUpdated: Number(depot.timeupdated),
77
+ };
78
+ }
79
+ function getSteamAcfDepot(acf) {
80
+ const appId = getAppId();
81
+ const appState = acf.AppState;
82
+ if (!appState ||
83
+ typeof appState !== 'object' ||
84
+ appState.appid !== appId ||
85
+ !('buildid' in appState) ||
86
+ !('lastupdated' in appState))
87
+ return null;
88
+ return {
89
+ buildId: appState.buildid,
90
+ timeUpdated: Number(appState.lastupdated),
91
+ };
92
+ }
93
+ function getLocalSteamDepot(steambeta) {
94
+ const acf = getSteamAcf(steambeta);
95
+ if (!acf)
96
+ return null;
97
+ const depot = getSteamAcfDepot(acf);
98
+ if (!depot)
99
+ return null;
100
+ return depot;
101
+ }
102
+ async function getRemoteSteamDepot(steambeta) {
103
+ const info = await fetchSteamInfo();
104
+ if (!info || !info.data) {
105
+ return null;
106
+ }
107
+ const depot = getSteamDepot(info, steambeta);
108
+ if (!depot)
109
+ return null;
110
+ return depot;
111
+ }
112
+ let lastUpdateCheck = 0;
113
+ let lastUpdateAvailable = 0;
114
+ let lastUpdateResult = false;
115
+ const getLastSteamUpdateCheck = () => ({
116
+ attempt: lastUpdateCheck,
117
+ available: lastUpdateAvailable,
118
+ result: lastUpdateResult,
119
+ });
120
+ exports.getLastSteamUpdateCheck = getLastSteamUpdateCheck;
121
+ const clearLastSteamUpdateCheck = () => {
122
+ lastUpdateResult = false;
123
+ };
124
+ exports.clearLastSteamUpdateCheck = clearLastSteamUpdateCheck;
125
+ async function hasSteamUpdate(steambeta) {
126
+ lastUpdateCheck = Date.now();
127
+ const localDepot = getLocalSteamDepot(steambeta);
128
+ if (!localDepot)
129
+ return false;
130
+ const remoteDepot = await getRemoteSteamDepot(steambeta);
131
+ if (!remoteDepot)
132
+ return false;
133
+ lastUpdateAvailable = Date.now();
134
+ const res = localDepot.buildId !== remoteDepot.buildId ||
135
+ localDepot.timeUpdated < remoteDepot.timeUpdated;
136
+ lastUpdateResult = res;
137
+ return res;
138
+ }
139
+ //# sourceMappingURL=steam.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"steam.js","sourceRoot":"","sources":["../../src/updater/steam.ts"],"names":[],"mappings":"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"}
@@ -10,7 +10,7 @@ exports.hsv = hsv;
10
10
  function hsv(h, s, v) {
11
11
  var r, g, b, i, f, p, q, t;
12
12
  if (arguments.length === 1 && typeof h === 'object') {
13
- (s = h.s), (v = h.v), (h = h.h);
13
+ ((s = h.s), (v = h.v), (h = h.h));
14
14
  }
15
15
  h = h;
16
16
  i = Math.floor(h * 6);
@@ -20,22 +20,22 @@ function hsv(h, s, v) {
20
20
  t = v * (1 - (1 - f) * s);
21
21
  switch (i % 6) {
22
22
  case 0:
23
- (r = v), (g = t), (b = p);
23
+ ((r = v), (g = t), (b = p));
24
24
  break;
25
25
  case 1:
26
- (r = q), (g = v), (b = p);
26
+ ((r = q), (g = v), (b = p));
27
27
  break;
28
28
  case 2:
29
- (r = p), (g = v), (b = t);
29
+ ((r = p), (g = v), (b = t));
30
30
  break;
31
31
  case 3:
32
- (r = p), (g = q), (b = v);
32
+ ((r = p), (g = q), (b = v));
33
33
  break;
34
34
  case 4:
35
- (r = t), (g = p), (b = v);
35
+ ((r = t), (g = p), (b = v));
36
36
  break;
37
37
  case 5:
38
- (r = v), (g = p), (b = q);
38
+ ((r = v), (g = p), (b = q));
39
39
  break;
40
40
  }
41
41
  return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];
@@ -1 +1 @@
1
- {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/util/color.ts"],"names":[],"mappings":"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GAAG,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACd,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;CACf,CAAC"}
1
+ {"version":3,"file":"color.js","sourceRoot":"","sources":["../../src/util/color.ts"],"names":[],"mappings":"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CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACd,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACd,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IAChB,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IACnB,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IAClB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,CAAC;IAClB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACnB,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACf,CAAC,GAAG,EAAE,EAAE,EAAE,CAAC,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IAChB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC;IACpB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;IACjB,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;IACd,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC;CACf,CAAC"}
package/dist/util/time.js CHANGED
@@ -36,6 +36,6 @@ function parseDuration(str) {
36
36
  // parse brickadia's time format (YYYY.MM.DD-HH-MM-SS) into a time object
37
37
  function parseBrickadiaTime(str) {
38
38
  const [date, time] = str.split('-');
39
- return new Date(date.replace(/\./g, '-') + 'T' + time.replace(/\./g, ':')).getTime();
39
+ return new Date(date.replace(/\./g, '-') + 'T' + time.replace(/\./g, ':') + 'Z').getTime();
40
40
  }
41
41
  //# sourceMappingURL=time.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/util/time.ts"],"names":[],"mappings":";;;;;;AA+DA,sCAmBC;AAGD,gDAKC;AA1FD,+DAAwC;AAyC3B,QAAA,QAAQ,GAUQ,kBAAS,CAAC;AAEvC,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,CAAC,EAAE,eAAe;IACtB,CAAC,EAAE,IAAI,EAAE,UAAU;IACnB,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU;IACxB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ;IAC3B,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO;IAC/B,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ;CACrC,CAAC;AAEF,sDAAsD;AACtD,SAAgB,aAAa,CAAC,GAAW;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,+CAA+C;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9B,mBAAmB;IACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,+CAA+C;QAC/C,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAE7D,wBAAwB;QACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,SAAS;QAE3D,sCAAsC;QACtC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAC1D,CAAC,OAAO,EAAE,CAAC;AACd,CAAC"}
1
+ {"version":3,"file":"time.js","sourceRoot":"","sources":["../../src/util/time.ts"],"names":[],"mappings":";;;;;;AA+DA,sCAmBC;AAGD,gDAKC;AA1FD,+DAAwC;AAyC3B,QAAA,QAAQ,GAUQ,kBAAS,CAAC;AAEvC,MAAM,eAAe,GAA2B;IAC9C,EAAE,EAAE,CAAC,EAAE,eAAe;IACtB,CAAC,EAAE,IAAI,EAAE,UAAU;IACnB,CAAC,EAAE,EAAE,GAAG,IAAI,EAAE,UAAU;IACxB,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ;IAC3B,CAAC,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,OAAO;IAC/B,CAAC,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EAAE,QAAQ;CACrC,CAAC;AAEF,sDAAsD;AACtD,SAAgB,aAAa,CAAC,GAAW;IACvC,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,+CAA+C;IAC/C,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAE9B,mBAAmB;IACnB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,+CAA+C;QAC/C,MAAM,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,CAAC;QAE7D,wBAAwB;QACxB,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC;YAAE,SAAS;QAE3D,sCAAsC;QACtC,KAAK,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,yEAAyE;AACzE,SAAgB,kBAAkB,CAAC,GAAW;IAC5C,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IACpC,OAAO,IAAI,IAAI,CACb,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,GAAG,CAChE,CAAC,OAAO,EAAE,CAAC;AACd,CAAC"}
@@ -1,3 +1,85 @@
1
+ import { IPluginDocumentation } from "../../plugin";
2
+ import Database from './database';
1
3
  import type Webserver from './index';
2
- import { OmeggaSocketIo } from './types';
4
+ import { IFrontendBanEntry, IStoreBanHistory, IStoreKickHistory, IStoreUser, IUserAgo, IUserHistory, IUserNote, OmeggaSocketIo } from './types';
5
+ export type OmeggaSocketData = {
6
+ roles: {
7
+ type: 'role';
8
+ name: string;
9
+ }[];
10
+ version: string;
11
+ canLogOut: boolean;
12
+ now: number;
13
+ userless: boolean;
14
+ isSteam: boolean;
15
+ update: {
16
+ canCheck: boolean;
17
+ lastCheck: boolean | null;
18
+ };
19
+ user: {
20
+ username: string;
21
+ isOwner: boolean;
22
+ roles: string[];
23
+ };
24
+ };
25
+ export type GetPlayersRes = {
26
+ pages: number;
27
+ total: number;
28
+ players: (IUserHistory & IUserAgo & {
29
+ ban?: IFrontendBanEntry;
30
+ })[];
31
+ };
32
+ export type GetPlayerRes = Omit<IUserHistory, 'nameHistory'> & {
33
+ banHistory: (IStoreBanHistory & {
34
+ duration?: number;
35
+ bannerName?: string;
36
+ })[];
37
+ kickHistory: (IStoreKickHistory & {
38
+ kickerName?: string;
39
+ })[];
40
+ notes: IUserNote[];
41
+ nameHistory: {
42
+ name: string;
43
+ date: number;
44
+ ago?: number;
45
+ }[];
46
+ } & IUserAgo & {
47
+ isHost: boolean;
48
+ isOnline: boolean;
49
+ currentBan: IFrontendBanEntry | null;
50
+ roles: {
51
+ name: string;
52
+ color: string;
53
+ }[];
54
+ };
55
+ export type GetPluginsRes = {
56
+ name: string;
57
+ documentation: IPluginDocumentation;
58
+ path: string;
59
+ isLoaded: boolean;
60
+ isEnabled: boolean;
61
+ }[];
62
+ export type GetPluginRes = {
63
+ name: string;
64
+ format: string;
65
+ info: Record<string, unknown>;
66
+ documentation: IPluginDocumentation;
67
+ config: Record<string, unknown>;
68
+ defaultConfig: Record<string, unknown>;
69
+ objCount: number;
70
+ path: string;
71
+ isLoaded: boolean;
72
+ isEnabled: boolean;
73
+ };
74
+ export type GetUsersRes = {
75
+ pages: number;
76
+ total: number;
77
+ users: (IStoreUser & IUserAgo)[];
78
+ };
79
+ export type HistoryRes = Awaited<ReturnType<Database['getChats']>>;
80
+ export type WorldRevisionsRes = {
81
+ index: number;
82
+ date: number;
83
+ note: string;
84
+ }[];
3
85
  export default function (server: Webserver, io: OmeggaSocketIo): void;
@@ -38,6 +38,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
38
38
  Object.defineProperty(exports, "__esModule", { value: true });
39
39
  exports.default = default_1;
40
40
  const logger_1 = __importDefault(require("../../logger"));
41
+ const updater_1 = require("../../updater");
42
+ const steam_1 = require("../../updater/steam");
41
43
  const player_1 = __importDefault(require("../../omegga/player"));
42
44
  const chat_1 = require("../../util/chat");
43
45
  const color_1 = require("../../util/color");
@@ -106,6 +108,7 @@ function default_1(server, io) {
106
108
  // let this user receive messages directed to this user
107
109
  socket.join('user:' + socket.data.user._id);
108
110
  database.getRoles().then(roles => {
111
+ var _a, _b, _c;
109
112
  socket.emit('data', {
110
113
  roles,
111
114
  version: pkg.version,
@@ -117,6 +120,11 @@ function default_1(server, io) {
117
120
  isOwner: socket.data.user.isOwner,
118
121
  roles: socket.data.user.roles,
119
122
  },
123
+ isSteam: Boolean(omegga.config.__STEAM),
124
+ update: {
125
+ canCheck: omegga.config.__STEAM && !((_a = omegga.config.server) === null || _a === void 0 ? void 0 : _a.steambeta),
126
+ lastCheck: (_c = (_b = (0, steam_1.getLastSteamUpdateCheck)()) === null || _b === void 0 ? void 0 : _b.result) !== null && _c !== void 0 ? _c : null,
127
+ },
120
128
  });
121
129
  });
122
130
  // logging for this user in the console for web ui actions
@@ -168,7 +176,7 @@ function default_1(server, io) {
168
176
  });
169
177
  // find chat messages after a certain time
170
178
  // TODO: add permission check
171
- rpc.addMethod('chat.history', ([{ after, before }]) => {
179
+ rpc.addMethod('chat.history', ([{ after, before }] = [{}]) => {
172
180
  return database.getChats({ after, before });
173
181
  });
174
182
  // see what days chat messages were sent
@@ -408,7 +416,7 @@ function default_1(server, io) {
408
416
  return false;
409
417
  // check if user is banned
410
418
  const banList = (omegga.getBanList() || { banList: {} }).banList;
411
- if (!banList[id] || (0, time_1.parseBrickadiaTime)(banList[id].expires) < Date.now())
419
+ if (!banList[id])
412
420
  return false;
413
421
  log('Unbanning player', (_c = (_b = (_a = omegga.getNameCache()) === null || _a === void 0 ? void 0 : _a.savedPlayerNames) === null || _b === void 0 ? void 0 : _b[id].yellow) !== null && _c !== void 0 ? _c : 'with id ' + id.yellow);
414
422
  // unban the user
@@ -531,10 +539,16 @@ function default_1(server, io) {
531
539
  // get a paginated list of users
532
540
  // TODO: add permission check
533
541
  rpc.addMethod('users.list', async ([{ page = 0, search = '', sort = 'name', direction = '1' } = {}]) => {
534
- const resp = await database.getUsers({ page, search, sort, direction });
542
+ const resp = await database.getUsers({
543
+ page,
544
+ search,
545
+ sort,
546
+ direction,
547
+ });
535
548
  const now = Date.now();
536
- resp.users = resp.users.map(user => ({
549
+ resp.users = resp.users.map(({ hash: _, ...user }) => ({
537
550
  ...user,
551
+ hash: '',
538
552
  seenAgo: user.lastOnline ? now - user.lastOnline : Infinity,
539
553
  createdAgo: now - user.created,
540
554
  }));
@@ -621,10 +635,10 @@ function default_1(server, io) {
621
635
  dailyHour: 'number',
622
636
  dailyHourEnabled: 'boolean',
623
637
  announcementEnabled: 'boolean',
624
- bricksEnabled: 'boolean',
625
- minigamesEnabled: 'boolean',
626
- environmentEnabled: 'boolean',
627
638
  playersEnabled: 'boolean',
639
+ saveWorld: 'boolean',
640
+ autoUpdateEnabled: 'boolean',
641
+ autoUpdateIntervalMins: 'number',
628
642
  };
629
643
  rpc.addMethod('server.autorestart.set', async ([config]) => {
630
644
  // validate the autorestart config
@@ -668,16 +682,15 @@ function default_1(server, io) {
668
682
  // restart the server if it's running, start the server if it's stopped
669
683
  // TODO: server status permission check
670
684
  rpc.addMethod('server.restart', async () => {
685
+ var _a;
671
686
  if (omegga.starting || omegga.stopping)
672
687
  return;
673
688
  try {
674
689
  const config = await database.getAutoRestartConfig();
675
690
  await omegga.saveServer({
676
691
  players: config.playersEnabled,
677
- bricks: config.bricksEnabled,
692
+ saveWorld: (_a = config.saveWorld) !== null && _a !== void 0 ? _a : true,
678
693
  announcement: config.announcementEnabled,
679
- minigames: config.minigamesEnabled,
680
- environment: config.environmentEnabled,
681
694
  });
682
695
  }
683
696
  catch (err) {
@@ -687,12 +700,158 @@ function default_1(server, io) {
687
700
  logger_1.default.logp('Restarting in 5 seconds...');
688
701
  omegga.broadcast(`<size="20">Server restart in <b><color="ffffbb">${5} seconds</></></>`);
689
702
  await new Promise(resolve => setTimeout(resolve, 5000));
690
- omegga.changeMap(omegga.currentMap);
691
- await new Promise(resolve => setTimeout(resolve, 100));
692
- if (omegga.started)
703
+ await omegga.restartServer();
704
+ });
705
+ // check if the server has a steam update available
706
+ rpc.addMethod('server.updatecheck', async () => {
707
+ var _a;
708
+ if (!omegga.config.__STEAM)
709
+ return null;
710
+ const lastUpdate = (0, steam_1.getLastSteamUpdateCheck)();
711
+ if (Date.now() - lastUpdate.attempt < 1000 * 5) {
712
+ logger_1.default.verbose('[rpc] Using cached steam update check');
713
+ return lastUpdate.result;
714
+ }
715
+ logger_1.default.verbose('[rpc] Checking for steam update');
716
+ return await (0, steam_1.hasSteamUpdate)((_a = omegga.config.server) === null || _a === void 0 ? void 0 : _a.steambeta);
717
+ });
718
+ // check if the server has a steam update available
719
+ rpc.addMethod('server.update', async () => {
720
+ var _a, _b;
721
+ if (!omegga.config.__STEAM)
722
+ return false;
723
+ if (omegga.stopping || omegga.starting)
724
+ return false;
725
+ const wasStarted = omegga.started;
726
+ if (wasStarted) {
727
+ log('Stopping server to update...');
693
728
  await omegga.stop();
694
- await new Promise(resolve => setTimeout(resolve, 1000));
695
- await omegga.start();
729
+ }
730
+ log('Updating server...');
731
+ let ok = false;
732
+ try {
733
+ (0, updater_1.steamcmdDownloadGame)({
734
+ steambeta: (_a = omegga.config.server) === null || _a === void 0 ? void 0 : _a.steambeta,
735
+ steambetaPassword: (_b = omegga.config.server) === null || _b === void 0 ? void 0 : _b.steambetaPassword,
736
+ });
737
+ ok = true;
738
+ log('Server updated successfully');
739
+ }
740
+ catch (err) {
741
+ error('Error updating server', err);
742
+ }
743
+ if (wasStarted) {
744
+ log('Starting server...');
745
+ await omegga.start();
746
+ }
747
+ return ok;
748
+ });
749
+ // list available worlds
750
+ rpc.addMethod('world.list', async () => {
751
+ const prefix = omegga.worldPath + '/';
752
+ return omegga
753
+ .getWorlds()
754
+ .map(world => world.replace(prefix, '').replace(/\.brdb$/, ''));
755
+ });
756
+ // list a world's revisions (while the server is running)
757
+ rpc.addMethod('world.revisions', async ([world]) => {
758
+ var _a;
759
+ try {
760
+ return (_a = (await omegga.getWorldRevisions(world))) === null || _a === void 0 ? void 0 : _a.map(({ date, ...r }) => ({ ...r, date: date.getTime() }));
761
+ }
762
+ catch (_err) {
763
+ return null;
764
+ }
765
+ });
766
+ // get the next world to load
767
+ rpc.addMethod('world.next', async () => {
768
+ return omegga.getNextWorld();
769
+ });
770
+ // get the configured default world
771
+ rpc.addMethod('world.active', async () => {
772
+ return omegga.getActiveWorld();
773
+ });
774
+ // load a world or revision of a world
775
+ rpc.addMethod('world.load', async ([world, revision]) => {
776
+ try {
777
+ let res = false;
778
+ if (revision) {
779
+ log('Loading world revision', revision, 'of', world.yellow);
780
+ res = await omegga.loadWorldRevision(world, revision);
781
+ }
782
+ else {
783
+ log('Loading world', world.yellow);
784
+ res = await omegga.loadWorld(world);
785
+ }
786
+ if (res) {
787
+ log('World loaded successfully');
788
+ }
789
+ else {
790
+ log('World load failed');
791
+ }
792
+ return res;
793
+ }
794
+ catch (err) {
795
+ error('Error while loading world', err);
796
+ return false;
797
+ }
798
+ });
799
+ /// set or clear the default world
800
+ rpc.addMethod('world.use', async ([world]) => {
801
+ try {
802
+ const ok = omegga.setActiveWorld(world || null);
803
+ if (ok) {
804
+ log('Set default world to', (world || 'none').yellow);
805
+ }
806
+ return ok;
807
+ }
808
+ catch (err) {
809
+ error('Error while using world', err);
810
+ return false;
811
+ }
812
+ });
813
+ // create a new world
814
+ rpc.addMethod('world.create', async ([name, level]) => {
815
+ try {
816
+ log('Creating new world', name.yellow, 'with level', (level === null || level === void 0 ? void 0 : level.yellow) || 'Plate');
817
+ const res = await omegga.createEmptyWorld(name, level);
818
+ if (res) {
819
+ log('World created successfully');
820
+ }
821
+ else {
822
+ log('World creation failed');
823
+ }
824
+ return res;
825
+ }
826
+ catch (err) {
827
+ error('Error while creating world', err);
828
+ return false;
829
+ }
830
+ });
831
+ // save a world or save as a world
832
+ rpc.addMethod('world.save', async ([name]) => {
833
+ try {
834
+ let res = false;
835
+ if (name) {
836
+ log('Saving world as', name.yellow);
837
+ res = await omegga.saveWorldAs(name);
838
+ }
839
+ else {
840
+ log('Saving current world');
841
+ res = await omegga.saveWorld();
842
+ }
843
+ if (res) {
844
+ log('World saved successfully');
845
+ }
846
+ else {
847
+ log('World save failed');
848
+ }
849
+ return res;
850
+ }
851
+ catch (err) {
852
+ error('Error while saving world', err);
853
+ return false;
854
+ }
696
855
  });
697
856
  // subscribe and unsubscribe to events
698
857
  socket.on('subscribe', room => {