omegga 1.2.8 → 1.3.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 (255) hide show
  1. package/README.md +20 -1
  2. package/dist/brickadia/config.js +26 -90
  3. package/dist/brickadia/config.js.map +1 -1
  4. package/dist/brickadia/server.js +294 -293
  5. package/dist/brickadia/server.js.map +1 -1
  6. package/dist/cli/auth.js +149 -177
  7. package/dist/cli/auth.js.map +1 -1
  8. package/dist/cli/config.js +64 -66
  9. package/dist/cli/config.js.map +1 -1
  10. package/dist/cli/index.js +14 -14
  11. package/dist/cli/index.js.map +1 -1
  12. package/dist/cli/installer.js +37 -43
  13. package/dist/cli/installer.js.map +1 -1
  14. package/dist/cli/plugin.js +651 -682
  15. package/dist/cli/plugin.js.map +1 -1
  16. package/dist/cli/terminal.js +811 -733
  17. package/dist/cli/terminal.js.map +1 -1
  18. package/dist/config/formats/format_js.js +6 -6
  19. package/dist/config/formats/format_js.js.map +1 -1
  20. package/dist/config/formats/format_yml.js +7 -10
  21. package/dist/config/formats/format_yml.js.map +1 -1
  22. package/dist/config/index.js +46 -68
  23. package/dist/config/index.js.map +1 -1
  24. package/dist/config/reader.js +16 -27
  25. package/dist/config/reader.js.map +1 -1
  26. package/dist/config/validator.js +23 -25
  27. package/dist/config/validator.js.map +1 -1
  28. package/dist/config/writer.js +11 -21
  29. package/dist/config/writer.js.map +1 -1
  30. package/dist/index.js +18 -64
  31. package/dist/index.js.map +1 -1
  32. package/dist/info/default_commands.json.js +39 -0
  33. package/dist/info/default_commands.json.js.map +1 -0
  34. package/dist/logger.js +61 -60
  35. package/dist/logger.js.map +1 -1
  36. package/dist/main.js +424 -471
  37. package/dist/main.js.map +1 -1
  38. package/dist/omegga/auth.js +101 -148
  39. package/dist/omegga/auth.js.map +1 -1
  40. package/dist/omegga/commandInjector.js +261 -251
  41. package/dist/omegga/commandInjector.js.map +1 -1
  42. package/dist/omegga/index.js +14 -52
  43. package/dist/omegga/index.js.map +1 -1
  44. package/dist/omegga/logWrangler.js +224 -275
  45. package/dist/omegga/logWrangler.js.map +1 -1
  46. package/dist/omegga/matchers/auth.js +36 -50
  47. package/dist/omegga/matchers/auth.js.map +1 -1
  48. package/dist/omegga/matchers/chat.js +49 -71
  49. package/dist/omegga/matchers/chat.js.map +1 -1
  50. package/dist/omegga/matchers/command.js +25 -36
  51. package/dist/omegga/matchers/command.js.map +1 -1
  52. package/dist/omegga/matchers/exit.js +15 -18
  53. package/dist/omegga/matchers/exit.js.map +1 -1
  54. package/dist/omegga/matchers/index.js +26 -40
  55. package/dist/omegga/matchers/index.js.map +1 -1
  56. package/dist/omegga/matchers/init.js +20 -23
  57. package/dist/omegga/matchers/init.js.map +1 -1
  58. package/dist/omegga/matchers/interact.js +58 -64
  59. package/dist/omegga/matchers/interact.js.map +1 -1
  60. package/dist/omegga/matchers/join.js +74 -95
  61. package/dist/omegga/matchers/join.js.map +1 -1
  62. package/dist/omegga/matchers/leave.js +43 -56
  63. package/dist/omegga/matchers/leave.js.map +1 -1
  64. package/dist/omegga/matchers/mapChange.js +26 -35
  65. package/dist/omegga/matchers/mapChange.js.map +1 -1
  66. package/dist/omegga/matchers/minigameJoin.js +24 -31
  67. package/dist/omegga/matchers/minigameJoin.js.map +1 -1
  68. package/dist/omegga/matchers/version.js +42 -49
  69. package/dist/omegga/matchers/version.js.map +1 -1
  70. package/dist/omegga/player.js +527 -527
  71. package/dist/omegga/player.js.map +1 -1
  72. package/dist/omegga/plugin/interface.js +91 -98
  73. package/dist/omegga/plugin/interface.js.map +1 -1
  74. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js +524 -429
  75. package/dist/omegga/plugin/plugin_jsonrpc_stdio.js.map +1 -1
  76. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js +282 -294
  77. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.js.map +1 -1
  78. package/dist/omegga/plugin/plugin_node_safe.js +365 -393
  79. package/dist/omegga/plugin/plugin_node_safe.js.map +1 -1
  80. package/dist/omegga/plugin/plugin_node_unsafe.js +119 -179
  81. package/dist/omegga/plugin/plugin_node_unsafe.js.map +1 -1
  82. package/dist/omegga/plugin.js +402 -347
  83. package/dist/omegga/plugin.js.map +1 -1
  84. package/dist/omegga/server.js +742 -774
  85. package/dist/omegga/server.js.map +1 -1
  86. package/dist/omegga/wrapper.js +64 -91
  87. package/dist/omegga/wrapper.js.map +1 -1
  88. package/dist/plugin.js +11 -31
  89. package/dist/plugin.js.map +1 -1
  90. package/dist/softconfig.js +121 -100
  91. package/dist/softconfig.js.map +1 -1
  92. package/dist/updater/steam.js +97 -112
  93. package/dist/updater/steam.js.map +1 -1
  94. package/dist/util/brdb.js +496 -528
  95. package/dist/util/brdb.js.map +1 -1
  96. package/dist/util/brick/checkBounds.js +11 -15
  97. package/dist/util/brick/checkBounds.js.map +1 -1
  98. package/dist/util/brick/constants.js +723 -174
  99. package/dist/util/brick/constants.js.map +1 -1
  100. package/dist/util/brick/displayName.js +204 -211
  101. package/dist/util/brick/displayName.js.map +1 -1
  102. package/dist/util/brick/getBounds.js +29 -41
  103. package/dist/util/brick/getBounds.js.map +1 -1
  104. package/dist/util/brick/getBrickSize.js +6 -7
  105. package/dist/util/brick/getBrickSize.js.map +1 -1
  106. package/dist/util/brick/getScaleAxis.js +24 -30
  107. package/dist/util/brick/getScaleAxis.js.map +1 -1
  108. package/dist/util/brick/index.js +8 -29
  109. package/dist/util/brick/index.js.map +1 -1
  110. package/dist/util/brick/rotate.js +29 -34
  111. package/dist/util/brick/rotate.js.map +1 -1
  112. package/dist/util/brick/setOwnership.js +13 -19
  113. package/dist/util/brick/setOwnership.js.map +1 -1
  114. package/dist/util/chat.js +53 -44
  115. package/dist/util/chat.js.map +1 -1
  116. package/dist/util/color.js +112 -124
  117. package/dist/util/color.js.map +1 -1
  118. package/dist/util/file.js +54 -98
  119. package/dist/util/file.js.map +1 -1
  120. package/dist/util/index.js +84 -106
  121. package/dist/util/index.js.map +1 -1
  122. package/dist/util/map.js +18 -20
  123. package/dist/util/map.js.map +1 -1
  124. package/dist/util/pattern.js +6 -9
  125. package/dist/util/pattern.js.map +1 -1
  126. package/dist/util/time.js +31 -34
  127. package/dist/util/time.js.map +1 -1
  128. package/dist/util/uuid.js +10 -8
  129. package/dist/util/uuid.js.map +1 -1
  130. package/dist/util/wsl.js +19 -25
  131. package/dist/util/wsl.js.map +1 -1
  132. package/dist/version.js +7 -9
  133. package/dist/version.js.map +1 -1
  134. package/dist/webserver/backend/api.js +784 -874
  135. package/dist/webserver/backend/api.js.map +1 -1
  136. package/dist/webserver/backend/calendar.js +14 -17
  137. package/dist/webserver/backend/calendar.js.map +1 -1
  138. package/dist/webserver/backend/database.js +563 -613
  139. package/dist/webserver/backend/database.js.map +1 -1
  140. package/dist/webserver/backend/index.js +153 -191
  141. package/dist/webserver/backend/index.js.map +1 -1
  142. package/dist/webserver/backend/metrics.js +219 -248
  143. package/dist/webserver/backend/metrics.js.map +1 -1
  144. package/dist/webserver/backend/util.js +47 -68
  145. package/dist/webserver/backend/util.js.map +1 -1
  146. package/dist/worker.js +322 -0
  147. package/dist/worker.js.map +1 -0
  148. package/package.json +14 -10
  149. package/templates/safe-ts/omegga.d.ts +2 -2
  150. package/vite.backend.config.mts +46 -0
  151. package/vite.frontend.config.mts +58 -0
  152. package/vitest.backend.config.mts +7 -0
  153. package/dist/brickadia/config.d.ts +0 -3
  154. package/dist/brickadia/presets.d.ts +0 -65
  155. package/dist/brickadia/presets.js +0 -3
  156. package/dist/brickadia/presets.js.map +0 -1
  157. package/dist/brickadia/server.d.ts +0 -36
  158. package/dist/brickadia/types.d.ts +0 -45
  159. package/dist/brickadia/types.js +0 -3
  160. package/dist/brickadia/types.js.map +0 -1
  161. package/dist/cli/auth.d.ts +0 -26
  162. package/dist/cli/config.d.ts +0 -10
  163. package/dist/cli/index.d.ts +0 -30
  164. package/dist/cli/installer.d.ts +0 -1
  165. package/dist/cli/plugin.d.ts +0 -22
  166. package/dist/cli/terminal.d.ts +0 -25
  167. package/dist/config/authorizer.d.ts +0 -2
  168. package/dist/config/authorizer.js +0 -38
  169. package/dist/config/authorizer.js.map +0 -1
  170. package/dist/config/formats/format_js.d.ts +0 -3
  171. package/dist/config/formats/format_yml.d.ts +0 -3
  172. package/dist/config/index.d.ts +0 -18
  173. package/dist/config/reader.d.ts +0 -3
  174. package/dist/config/types.d.ts +0 -50
  175. package/dist/config/types.js +0 -3
  176. package/dist/config/types.js.map +0 -1
  177. package/dist/config/validator.d.ts +0 -6
  178. package/dist/config/writer.d.ts +0 -3
  179. package/dist/index.d.ts +0 -22
  180. package/dist/info/default_commands.json +0 -29
  181. package/dist/logger.d.ts +0 -41
  182. package/dist/main.d.ts +0 -1
  183. package/dist/omegga/auth.d.ts +0 -9
  184. package/dist/omegga/commandInjector.d.ts +0 -35
  185. package/dist/omegga/index.d.ts +0 -7
  186. package/dist/omegga/logWrangler.d.ts +0 -32
  187. package/dist/omegga/matchers/auth.d.ts +0 -10
  188. package/dist/omegga/matchers/chat.d.ts +0 -10
  189. package/dist/omegga/matchers/command.d.ts +0 -7
  190. package/dist/omegga/matchers/exit.d.ts +0 -3
  191. package/dist/omegga/matchers/index.d.ts +0 -3
  192. package/dist/omegga/matchers/init.d.ts +0 -3
  193. package/dist/omegga/matchers/interact.d.ts +0 -4
  194. package/dist/omegga/matchers/join.d.ts +0 -4
  195. package/dist/omegga/matchers/leave.d.ts +0 -4
  196. package/dist/omegga/matchers/mapChange.d.ts +0 -3
  197. package/dist/omegga/matchers/minigameJoin.d.ts +0 -9
  198. package/dist/omegga/matchers/types.d.ts +0 -5
  199. package/dist/omegga/matchers/types.js +0 -3
  200. package/dist/omegga/matchers/types.js.map +0 -1
  201. package/dist/omegga/matchers/version.d.ts +0 -3
  202. package/dist/omegga/player.d.ts +0 -81
  203. package/dist/omegga/plugin/interface.d.ts +0 -30
  204. package/dist/omegga/plugin/plugin_jsonrpc_stdio.d.ts +0 -23
  205. package/dist/omegga/plugin/plugin_node_safe/proxyOmegga.d.ts +0 -145
  206. package/dist/omegga/plugin/plugin_node_safe/worker.d.ts +0 -1
  207. package/dist/omegga/plugin/plugin_node_safe/worker.js +0 -367
  208. package/dist/omegga/plugin/plugin_node_safe/worker.js.map +0 -1
  209. package/dist/omegga/plugin/plugin_node_safe.d.ts +0 -23
  210. package/dist/omegga/plugin/plugin_node_unsafe.d.ts +0 -13
  211. package/dist/omegga/plugin.d.ts +0 -63
  212. package/dist/omegga/server.d.ts +0 -166
  213. package/dist/omegga/types.d.ts +0 -49
  214. package/dist/omegga/types.js +0 -3
  215. package/dist/omegga/types.js.map +0 -1
  216. package/dist/omegga/wrapper.d.ts +0 -32
  217. package/dist/plugin.d.ts +0 -916
  218. package/dist/softconfig.d.ts +0 -67
  219. package/dist/tsconfig.tsbuildinfo +0 -1
  220. package/dist/updater/index.d.ts +0 -1
  221. package/dist/updater/index.js +0 -10
  222. package/dist/updater/index.js.map +0 -1
  223. package/dist/updater/steam.d.ts +0 -52
  224. package/dist/util/brdb.d.ts +0 -31
  225. package/dist/util/brick/checkBounds.d.ts +0 -8
  226. package/dist/util/brick/constants.d.ts +0 -18
  227. package/dist/util/brick/displayName.d.ts +0 -7
  228. package/dist/util/brick/getBounds.d.ts +0 -5
  229. package/dist/util/brick/getBrickSize.d.ts +0 -3
  230. package/dist/util/brick/getScaleAxis.d.ts +0 -3
  231. package/dist/util/brick/index.d.ts +0 -14
  232. package/dist/util/brick/rotate.d.ts +0 -16
  233. package/dist/util/brick/setOwnership.d.ts +0 -12
  234. package/dist/util/chat.d.ts +0 -23
  235. package/dist/util/color.d.ts +0 -13
  236. package/dist/util/file.d.ts +0 -5
  237. package/dist/util/index.d.ts +0 -183
  238. package/dist/util/map.d.ts +0 -6
  239. package/dist/util/pattern.d.ts +0 -1
  240. package/dist/util/time.d.ts +0 -39
  241. package/dist/util/uuid.d.ts +0 -3
  242. package/dist/util/wsl.d.ts +0 -2
  243. package/dist/version.d.ts +0 -2
  244. package/dist/webserver/backend/api.d.ts +0 -115
  245. package/dist/webserver/backend/calendar.d.ts +0 -5
  246. package/dist/webserver/backend/database.d.ts +0 -150
  247. package/dist/webserver/backend/index.d.ts +0 -30
  248. package/dist/webserver/backend/metrics.d.ts +0 -3
  249. package/dist/webserver/backend/types.d.ts +0 -114
  250. package/dist/webserver/backend/types.js +0 -3
  251. package/dist/webserver/backend/types.js.map +0 -1
  252. package/dist/webserver/backend/util.d.ts +0 -2
  253. package/dist/webserver/index.d.ts +0 -2
  254. package/dist/webserver/index.js +0 -9
  255. package/dist/webserver/index.js.map +0 -1
@@ -1,105 +1,126 @@
1
1
  "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- var _a;
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.METRIC_EMPTIES_BEFORE_PAUSE = exports.METRIC_HEARTBEAT_INTERVAL = exports.WEB_SESSION_TOKEN = exports.WEB_CERTS_DATA = exports.ACTIVE_WORLD_FILE = exports.SESSION_STORE = exports.SERVER_STORE = exports.USER_STORE = exports.STATUS_STORE = exports.PLUGIN_STORE = exports.PLAYER_STORE = exports.CHAT_STORE = exports.PLUGIN_POSTINSTALL = exports.PLUGIN_FILE = exports.PLUGIN_PATH = exports.DATA_PATH = exports.TEMP_DIR_NAME = exports.BRICKADIA_AUTH_FILES = exports.CONFIG_SAVED_DIR = exports.CONFIG_AUTH_DIR = exports.LOCAL_LAUNCHER = exports.GAME_BIN_PATH = exports.GAME_INSTALL_DIR = exports.STEAM_APP_ID = exports.GAME_DIRNAME = exports.STEAMCMD_PATH = exports.STEAM_DIR = exports.OVERRIDE_GAME_DIR = exports.BRICKADIA_INSTALLS = exports.CONFIG_FILENAMES = exports.DEFAULT_PORT = exports.GLOBAL_TOKEN = exports.CONFIG_HOME = exports.PROJECT_NAME = void 0;
8
- const os_1 = __importDefault(require("os"));
9
- const path_1 = __importDefault(require("path"));
10
- // home directory for omegga config
11
- exports.PROJECT_NAME = 'omegga';
12
- exports.CONFIG_HOME = path_1.default.join(os_1.default.homedir(), '.config/' + exports.PROJECT_NAME);
13
- exports.GLOBAL_TOKEN = path_1.default.join(exports.CONFIG_HOME, 'global_auth_token');
14
- exports.DEFAULT_PORT = 8080;
15
- // filenames that omegga searches for
16
- // extensions are added based on the available config formats
17
- exports.CONFIG_FILENAMES = [
18
- 'omegga-config',
19
- 'omegga',
20
- '.omegga-config',
21
- '.omegga',
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
+ const os = require("os");
4
+ const path = require("path");
5
+ const PROJECT_NAME = "omegga";
6
+ const CONFIG_HOME = path.join(os.homedir(), ".config/" + PROJECT_NAME);
7
+ const GLOBAL_TOKEN = path.join(CONFIG_HOME, "global_auth_token");
8
+ const DEFAULT_PORT = 8080;
9
+ const CONFIG_FILENAMES = [
10
+ "omegga-config",
11
+ "omegga",
12
+ ".omegga-config",
13
+ ".omegga"
22
14
  ];
23
- exports.BRICKADIA_INSTALLS = path_1.default.join(os_1.default.homedir(), '.local/share/brickadia-launcher/brickadia-installs');
24
- let GAME_DIR = 'Brickadia';
25
- let INSTALL_DIR = path_1.default.join(exports.CONFIG_HOME, 'steam_installs');
26
- if (process.env.STEAM_GAME_DIR)
27
- GAME_DIR = process.env.STEAM_GAME_DIR;
15
+ const BRICKADIA_INSTALLS = path.join(
16
+ os.homedir(),
17
+ ".local/share/brickadia-launcher/brickadia-installs"
18
+ );
19
+ let GAME_DIR = "Brickadia";
20
+ let INSTALL_DIR = path.join(CONFIG_HOME, "steam_installs");
21
+ if (process.env.STEAM_GAME_DIR) GAME_DIR = process.env.STEAM_GAME_DIR;
28
22
  if (process.env.STEAM_INSTALLS_DIR)
29
- INSTALL_DIR = process.env.STEAM_INSTALLS_DIR;
30
- exports.OVERRIDE_GAME_DIR = process.env.BRICKADIA_DIR;
31
- exports.STEAM_DIR = path_1.default.join(exports.CONFIG_HOME, 'steam');
32
- exports.STEAMCMD_PATH = path_1.default.join(exports.STEAM_DIR, 'steamcmd.sh');
33
- exports.GAME_DIRNAME = (_a = process.env.STEAM_GAME_DIR) !== null && _a !== void 0 ? _a : GAME_DIR;
34
- exports.STEAM_APP_ID = '3017590'; // Brickadia app ID
35
- exports.GAME_INSTALL_DIR = INSTALL_DIR;
36
- exports.GAME_BIN_PATH = 'Binaries/Linux/BrickadiaServer-Linux-Shipping';
37
- exports.LOCAL_LAUNCHER = path_1.default.join(exports.CONFIG_HOME, 'launcher/brickadia-launcher/main-brickadia-launcher');
38
- // path to auth files
39
- exports.CONFIG_AUTH_DIR = 'Auth';
40
- exports.CONFIG_SAVED_DIR = 'Saved';
41
- // files in Brickadia/Saved/Auth
42
- exports.BRICKADIA_AUTH_FILES = [
43
- 'OfflinePayload.bin',
44
- 'OfflineSignature.bin',
45
- 'SessionToken.bin',
23
+ INSTALL_DIR = process.env.STEAM_INSTALLS_DIR;
24
+ const OVERRIDE_GAME_DIR = process.env.BRICKADIA_DIR;
25
+ const STEAM_DIR = path.join(CONFIG_HOME, "steam");
26
+ const STEAMCMD_PATH = path.join(STEAM_DIR, "steamcmd.sh");
27
+ const GAME_DIRNAME = process.env.STEAM_GAME_DIR ?? GAME_DIR;
28
+ const STEAM_APP_ID = "3017590";
29
+ const GAME_INSTALL_DIR = INSTALL_DIR;
30
+ const GAME_BIN_PATH = "Binaries/Linux/BrickadiaServer-Linux-Shipping";
31
+ const LOCAL_LAUNCHER = path.join(
32
+ CONFIG_HOME,
33
+ "launcher/brickadia-launcher/main-brickadia-launcher"
34
+ );
35
+ const CONFIG_AUTH_DIR = "Auth";
36
+ const CONFIG_SAVED_DIR = "Saved";
37
+ const BRICKADIA_AUTH_FILES = [
38
+ "OfflinePayload.bin",
39
+ "OfflineSignature.bin",
40
+ "SessionToken.bin"
46
41
  ];
47
- // temporary install for generating auth files
48
- exports.TEMP_DIR_NAME = '.omegga-temp-data';
49
- // path to certain info folders
50
- exports.DATA_PATH = './data';
51
- exports.PLUGIN_PATH = './plugins';
52
- // plugin data
53
- exports.PLUGIN_FILE = './plugin.json';
54
- // post install file
55
- exports.PLUGIN_POSTINSTALL = './setup.sh';
56
- // databases
57
- exports.CHAT_STORE = 'chat.db';
58
- exports.PLAYER_STORE = 'players.db';
59
- exports.PLUGIN_STORE = 'plugins.db';
60
- exports.STATUS_STORE = 'status.db';
61
- exports.USER_STORE = 'users.db';
62
- exports.SERVER_STORE = 'store.db';
63
- exports.SESSION_STORE = 'session.db';
64
- exports.ACTIVE_WORLD_FILE = 'active_world';
65
- // website config
66
- exports.WEB_CERTS_DATA = 'web_certs.json';
67
- exports.WEB_SESSION_TOKEN = 'web_session_token';
68
- // how often server status is requested in a heartbeat
69
- exports.METRIC_HEARTBEAT_INTERVAL = 60 * 1000;
70
- // the number of empty server statuses before metric logging is paused
71
- exports.METRIC_EMPTIES_BEFORE_PAUSE = 3;
72
- // rexport as default
73
- exports.default = {
74
- PROJECT_NAME: exports.PROJECT_NAME,
75
- CONFIG_HOME: exports.CONFIG_HOME,
76
- DEFAULT_PORT: exports.DEFAULT_PORT,
77
- CONFIG_FILENAMES: exports.CONFIG_FILENAMES,
78
- BRICKADIA_INSTALLS: exports.BRICKADIA_INSTALLS,
79
- LOCAL_LAUNCHER: exports.LOCAL_LAUNCHER,
80
- CONFIG_AUTH_DIR: exports.CONFIG_AUTH_DIR,
81
- CONFIG_SAVED_DIR: exports.CONFIG_SAVED_DIR,
82
- BRICKADIA_AUTH_FILES: exports.BRICKADIA_AUTH_FILES,
83
- TEMP_DIR_NAME: exports.TEMP_DIR_NAME,
84
- DATA_PATH: exports.DATA_PATH,
85
- PLUGIN_PATH: exports.PLUGIN_PATH,
86
- PLUGIN_FILE: exports.PLUGIN_FILE,
87
- PLUGIN_POSTINSTALL: exports.PLUGIN_POSTINSTALL,
88
- CHAT_STORE: exports.CHAT_STORE,
89
- PLAYER_STORE: exports.PLAYER_STORE,
90
- PLUGIN_STORE: exports.PLUGIN_STORE,
91
- STATUS_STORE: exports.STATUS_STORE,
92
- USER_STORE: exports.USER_STORE,
93
- SERVER_STORE: exports.SERVER_STORE,
94
- SESSION_STORE: exports.SESSION_STORE,
95
- WEB_CERTS_DATA: exports.WEB_CERTS_DATA,
96
- WEB_SESSION_TOKEN: exports.WEB_SESSION_TOKEN,
97
- METRIC_HEARTBEAT_INTERVAL: exports.METRIC_HEARTBEAT_INTERVAL,
98
- METRIC_EMPTIES_BEFORE_PAUSE: exports.METRIC_EMPTIES_BEFORE_PAUSE,
99
- STEAM_DIR: exports.STEAM_DIR,
100
- STEAMCMD_PATH: exports.STEAMCMD_PATH,
101
- STEAM_INSTALLS_DIR: exports.GAME_INSTALL_DIR,
102
- STEAM_BRICKADIA_PATH: exports.GAME_BIN_PATH,
103
- GLOBAL_TOKEN: exports.GLOBAL_TOKEN,
42
+ const TEMP_DIR_NAME = ".omegga-temp-data";
43
+ const DATA_PATH = "./data";
44
+ const PLUGIN_PATH = "./plugins";
45
+ const PLUGIN_FILE = "./plugin.json";
46
+ const PLUGIN_POSTINSTALL = "./setup.sh";
47
+ const CHAT_STORE = "chat.db";
48
+ const PLAYER_STORE = "players.db";
49
+ const PLUGIN_STORE = "plugins.db";
50
+ const STATUS_STORE = "status.db";
51
+ const USER_STORE = "users.db";
52
+ const SERVER_STORE = "store.db";
53
+ const SESSION_STORE = "session.db";
54
+ const ACTIVE_WORLD_FILE = "active_world";
55
+ const WEB_CERTS_DATA = "web_certs.json";
56
+ const WEB_SESSION_TOKEN = "web_session_token";
57
+ const METRIC_HEARTBEAT_INTERVAL = 60 * 1e3;
58
+ const METRIC_EMPTIES_BEFORE_PAUSE = 3;
59
+ const soft = {
60
+ PROJECT_NAME,
61
+ CONFIG_HOME,
62
+ DEFAULT_PORT,
63
+ CONFIG_FILENAMES,
64
+ BRICKADIA_INSTALLS,
65
+ LOCAL_LAUNCHER,
66
+ CONFIG_AUTH_DIR,
67
+ CONFIG_SAVED_DIR,
68
+ BRICKADIA_AUTH_FILES,
69
+ TEMP_DIR_NAME,
70
+ DATA_PATH,
71
+ PLUGIN_PATH,
72
+ PLUGIN_FILE,
73
+ PLUGIN_POSTINSTALL,
74
+ CHAT_STORE,
75
+ PLAYER_STORE,
76
+ PLUGIN_STORE,
77
+ STATUS_STORE,
78
+ USER_STORE,
79
+ SERVER_STORE,
80
+ SESSION_STORE,
81
+ WEB_CERTS_DATA,
82
+ WEB_SESSION_TOKEN,
83
+ METRIC_HEARTBEAT_INTERVAL,
84
+ METRIC_EMPTIES_BEFORE_PAUSE,
85
+ STEAM_DIR,
86
+ STEAMCMD_PATH,
87
+ STEAM_INSTALLS_DIR: GAME_INSTALL_DIR,
88
+ STEAM_BRICKADIA_PATH: GAME_BIN_PATH,
89
+ GLOBAL_TOKEN
104
90
  };
105
- //# sourceMappingURL=softconfig.js.map
91
+ exports.ACTIVE_WORLD_FILE = ACTIVE_WORLD_FILE;
92
+ exports.BRICKADIA_AUTH_FILES = BRICKADIA_AUTH_FILES;
93
+ exports.BRICKADIA_INSTALLS = BRICKADIA_INSTALLS;
94
+ exports.CHAT_STORE = CHAT_STORE;
95
+ exports.CONFIG_AUTH_DIR = CONFIG_AUTH_DIR;
96
+ exports.CONFIG_FILENAMES = CONFIG_FILENAMES;
97
+ exports.CONFIG_HOME = CONFIG_HOME;
98
+ exports.CONFIG_SAVED_DIR = CONFIG_SAVED_DIR;
99
+ exports.DATA_PATH = DATA_PATH;
100
+ exports.DEFAULT_PORT = DEFAULT_PORT;
101
+ exports.GAME_BIN_PATH = GAME_BIN_PATH;
102
+ exports.GAME_DIRNAME = GAME_DIRNAME;
103
+ exports.GAME_INSTALL_DIR = GAME_INSTALL_DIR;
104
+ exports.GLOBAL_TOKEN = GLOBAL_TOKEN;
105
+ exports.LOCAL_LAUNCHER = LOCAL_LAUNCHER;
106
+ exports.METRIC_EMPTIES_BEFORE_PAUSE = METRIC_EMPTIES_BEFORE_PAUSE;
107
+ exports.METRIC_HEARTBEAT_INTERVAL = METRIC_HEARTBEAT_INTERVAL;
108
+ exports.OVERRIDE_GAME_DIR = OVERRIDE_GAME_DIR;
109
+ exports.PLAYER_STORE = PLAYER_STORE;
110
+ exports.PLUGIN_FILE = PLUGIN_FILE;
111
+ exports.PLUGIN_PATH = PLUGIN_PATH;
112
+ exports.PLUGIN_POSTINSTALL = PLUGIN_POSTINSTALL;
113
+ exports.PLUGIN_STORE = PLUGIN_STORE;
114
+ exports.PROJECT_NAME = PROJECT_NAME;
115
+ exports.SERVER_STORE = SERVER_STORE;
116
+ exports.SESSION_STORE = SESSION_STORE;
117
+ exports.STATUS_STORE = STATUS_STORE;
118
+ exports.STEAMCMD_PATH = STEAMCMD_PATH;
119
+ exports.STEAM_APP_ID = STEAM_APP_ID;
120
+ exports.STEAM_DIR = STEAM_DIR;
121
+ exports.TEMP_DIR_NAME = TEMP_DIR_NAME;
122
+ exports.USER_STORE = USER_STORE;
123
+ exports.WEB_CERTS_DATA = WEB_CERTS_DATA;
124
+ exports.WEB_SESSION_TOKEN = WEB_SESSION_TOKEN;
125
+ exports.default = soft;
126
+ //# sourceMappingURL=softconfig.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"softconfig.js","sourceRoot":"","sources":["../src/softconfig.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"softconfig.js","sources":["../src/softconfig.ts"],"sourcesContent":["import os from 'os';\nimport path from 'path';\n\n// home directory for omegga config\nexport const PROJECT_NAME = 'omegga';\nexport const CONFIG_HOME = path.join(os.homedir(), '.config/' + PROJECT_NAME);\nexport const GLOBAL_TOKEN = path.join(CONFIG_HOME, 'global_auth_token');\n\nexport const DEFAULT_PORT = 8080;\n\n// filenames that omegga searches for\n// extensions are added based on the available config formats\nexport const CONFIG_FILENAMES = [\n 'omegga-config',\n 'omegga',\n '.omegga-config',\n '.omegga',\n];\n\nexport const BRICKADIA_INSTALLS = path.join(\n os.homedir(),\n '.local/share/brickadia-launcher/brickadia-installs',\n);\n\nlet GAME_DIR = 'Brickadia';\nlet INSTALL_DIR = path.join(CONFIG_HOME, 'steam_installs');\nif (process.env.STEAM_GAME_DIR) GAME_DIR = process.env.STEAM_GAME_DIR;\nif (process.env.STEAM_INSTALLS_DIR)\n INSTALL_DIR = process.env.STEAM_INSTALLS_DIR;\n\nexport const OVERRIDE_GAME_DIR = process.env.BRICKADIA_DIR;\nexport const STEAM_DIR = path.join(CONFIG_HOME, 'steam');\nexport const STEAMCMD_PATH = path.join(STEAM_DIR, 'steamcmd.sh');\nexport const GAME_DIRNAME = process.env.STEAM_GAME_DIR ?? GAME_DIR;\nexport const STEAM_APP_ID = '3017590'; // Brickadia app ID\nexport const GAME_INSTALL_DIR = INSTALL_DIR;\nexport const GAME_BIN_PATH = 'Binaries/Linux/BrickadiaServer-Linux-Shipping';\n\nexport const LOCAL_LAUNCHER = path.join(\n CONFIG_HOME,\n 'launcher/brickadia-launcher/main-brickadia-launcher',\n);\n\n// path to auth files\nexport const CONFIG_AUTH_DIR = 'Auth';\nexport const CONFIG_SAVED_DIR = 'Saved';\n// files in Brickadia/Saved/Auth\nexport const BRICKADIA_AUTH_FILES = [\n 'OfflinePayload.bin',\n 'OfflineSignature.bin',\n 'SessionToken.bin',\n];\n\n// temporary install for generating auth files\nexport const TEMP_DIR_NAME = '.omegga-temp-data';\n\n// path to certain info folders\nexport const DATA_PATH = './data';\nexport const PLUGIN_PATH = './plugins';\n\n// plugin data\nexport const PLUGIN_FILE = './plugin.json';\n// post install file\nexport const PLUGIN_POSTINSTALL = './setup.sh';\n\n// databases\nexport const CHAT_STORE = 'chat.db';\nexport const PLAYER_STORE = 'players.db';\nexport const PLUGIN_STORE = 'plugins.db';\nexport const STATUS_STORE = 'status.db';\nexport const USER_STORE = 'users.db';\nexport const SERVER_STORE = 'store.db';\nexport const SESSION_STORE = 'session.db';\nexport const ACTIVE_WORLD_FILE = 'active_world';\n\n// website config\nexport const WEB_CERTS_DATA = 'web_certs.json';\nexport const WEB_SESSION_TOKEN = 'web_session_token';\n\n// how often server status is requested in a heartbeat\nexport const METRIC_HEARTBEAT_INTERVAL = 60 * 1000;\n// the number of empty server statuses before metric logging is paused\nexport const METRIC_EMPTIES_BEFORE_PAUSE = 3;\n\n// rexport as default\nexport default {\n PROJECT_NAME,\n CONFIG_HOME,\n DEFAULT_PORT,\n CONFIG_FILENAMES,\n BRICKADIA_INSTALLS,\n LOCAL_LAUNCHER,\n CONFIG_AUTH_DIR,\n CONFIG_SAVED_DIR,\n BRICKADIA_AUTH_FILES,\n TEMP_DIR_NAME,\n DATA_PATH,\n PLUGIN_PATH,\n PLUGIN_FILE,\n PLUGIN_POSTINSTALL,\n CHAT_STORE,\n PLAYER_STORE,\n PLUGIN_STORE,\n STATUS_STORE,\n USER_STORE,\n SERVER_STORE,\n SESSION_STORE,\n WEB_CERTS_DATA,\n WEB_SESSION_TOKEN,\n METRIC_HEARTBEAT_INTERVAL,\n METRIC_EMPTIES_BEFORE_PAUSE,\n STEAM_DIR,\n STEAMCMD_PATH,\n STEAM_INSTALLS_DIR: GAME_INSTALL_DIR,\n STEAM_BRICKADIA_PATH: GAME_BIN_PATH,\n GLOBAL_TOKEN,\n};\n"],"names":[],"mappings":";;;;AAIO,MAAM,eAAe;AACrB,MAAM,cAAc,KAAK,KAAK,GAAG,QAAA,GAAW,aAAa,YAAY;AACrE,MAAM,eAAe,KAAK,KAAK,aAAa,mBAAmB;AAE/D,MAAM,eAAe;AAIrB,MAAM,mBAAmB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,MAAM,qBAAqB,KAAK;AAAA,EACrC,GAAG,QAAA;AAAA,EACH;AACF;AAEA,IAAI,WAAW;AACf,IAAI,cAAc,KAAK,KAAK,aAAa,gBAAgB;AACzD,IAAI,QAAQ,IAAI,eAAgB,YAAW,QAAQ,IAAI;AACvD,IAAI,QAAQ,IAAI;AACd,gBAAc,QAAQ,IAAI;AAErB,MAAM,oBAAoB,QAAQ,IAAI;AACtC,MAAM,YAAY,KAAK,KAAK,aAAa,OAAO;AAChD,MAAM,gBAAgB,KAAK,KAAK,WAAW,aAAa;AACxD,MAAM,eAAe,QAAQ,IAAI,kBAAkB;AACnD,MAAM,eAAe;AACrB,MAAM,mBAAmB;AACzB,MAAM,gBAAgB;AAEtB,MAAM,iBAAiB,KAAK;AAAA,EACjC;AAAA,EACA;AACF;AAGO,MAAM,kBAAkB;AACxB,MAAM,mBAAmB;AAEzB,MAAM,uBAAuB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF;AAGO,MAAM,gBAAgB;AAGtB,MAAM,YAAY;AAClB,MAAM,cAAc;AAGpB,MAAM,cAAc;AAEpB,MAAM,qBAAqB;AAG3B,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,eAAe;AACrB,MAAM,eAAe;AACrB,MAAM,aAAa;AACnB,MAAM,eAAe;AACrB,MAAM,gBAAgB;AACtB,MAAM,oBAAoB;AAG1B,MAAM,iBAAiB;AACvB,MAAM,oBAAoB;AAG1B,MAAM,4BAA4B,KAAK;AAEvC,MAAM,8BAA8B;AAG3C,MAAA,OAAe;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,oBAAoB;AAAA,EACpB,sBAAsB;AAAA,EACtB;AACF;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -1,139 +1,124 @@
1
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"));
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const logger = require("../logger.js");
4
+ const softconfig = require("../softconfig.js");
5
+ const node_child_process = require("node:child_process");
6
+ const fs = require("node:fs");
7
+ const path = require("node:path");
8
+ const acfParser = require("steam-acf2json");
19
9
  function getAppId() {
20
- var _a;
21
- return (_a = process.env.STEAM_APP_ID) !== null && _a !== void 0 ? _a : softconfig_1.STEAM_APP_ID;
10
+ return process.env.STEAM_APP_ID ?? softconfig.STEAM_APP_ID;
22
11
  }
23
12
  function steamcmdDownloadSelf() {
24
- (0, child_process_1.execSync)(path_1.default.join(__dirname, '../../tools/install_steamcmd.sh'), {
25
- stdio: 'inherit',
26
- });
13
+ node_child_process.execSync(path.join(__dirname, "../../tools/install_steamcmd.sh"), {
14
+ stdio: "inherit"
15
+ });
27
16
  }
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' });
17
+ function steamcmdDownloadGame({
18
+ steambeta,
19
+ steambetaPassword
20
+ } = {}) {
21
+ const args = [
22
+ `+force_install_dir ${path.join(softconfig.GAME_INSTALL_DIR, steambeta ?? "main")}`,
23
+ `+login anonymous`,
24
+ `+app_update ${getAppId()}`,
25
+ steambeta ? `-beta ${steambeta}` : null,
26
+ steambeta && steambetaPassword ? `-betapassword ${steambetaPassword}` : null,
27
+ "+quit"
28
+ ].filter(Boolean);
29
+ node_child_process.execSync(`${softconfig.STEAMCMD_PATH} ${args.join(" ")}`, { stdio: "inherit" });
40
30
  }
41
31
  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;
32
+ const appId = getAppId();
33
+ const res = await fetch("https://api.steamcmd.net/v1/info/" + appId);
34
+ const json = await res.json();
35
+ return json;
46
36
  }
47
37
  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
- }
38
+ const appId = getAppId();
39
+ const installDir = path.join(softconfig.GAME_INSTALL_DIR, steambeta ?? "main");
40
+ const acfPath = path.join(
41
+ installDir,
42
+ "steamapps",
43
+ `appmanifest_${appId}.acf`
44
+ );
45
+ if (!fs.existsSync(acfPath)) {
46
+ logger.default.verbose(`File not found: ${acfPath}`);
47
+ return null;
48
+ }
49
+ try {
50
+ const plaintext = fs.readFileSync(acfPath, "utf-8");
51
+ const json = acfParser.decode(plaintext);
52
+ return json;
53
+ } catch (err) {
54
+ logger.default.error(`Error parsing ACF file ${acfPath}:`, err);
55
+ return null;
56
+ }
64
57
  }
65
58
  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
- };
59
+ const appId = getAppId();
60
+ const depot = info.data[appId]?.depots?.branches?.[!branch || branch === "main" ? "public" : branch];
61
+ if (!depot || typeof depot !== "object" || !("buildid" in depot) || !("timeupdated" in depot))
62
+ return null;
63
+ return {
64
+ buildId: depot.buildid,
65
+ timeUpdated: Number(depot.timeupdated)
66
+ };
78
67
  }
79
68
  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
- };
69
+ const appId = getAppId();
70
+ const appState = acf.AppState;
71
+ if (!appState || typeof appState !== "object" || appState.appid !== appId || !("buildid" in appState) || !("lastupdated" in appState))
72
+ return null;
73
+ return {
74
+ buildId: appState.buildid,
75
+ timeUpdated: Number(appState.lastupdated)
76
+ };
92
77
  }
93
78
  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;
79
+ const acf = getSteamAcf(steambeta);
80
+ if (!acf) return null;
81
+ const depot = getSteamAcfDepot(acf);
82
+ if (!depot) return null;
83
+ return depot;
101
84
  }
102
85
  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;
86
+ const info = await fetchSteamInfo();
87
+ if (!info || !info.data) {
88
+ return null;
89
+ }
90
+ const depot = getSteamDepot(info, steambeta);
91
+ if (!depot) return null;
92
+ return depot;
111
93
  }
112
94
  let lastUpdateCheck = 0;
113
95
  let lastUpdateAvailable = 0;
114
96
  let lastUpdateResult = false;
115
97
  const getLastSteamUpdateCheck = () => ({
116
- attempt: lastUpdateCheck,
117
- available: lastUpdateAvailable,
118
- result: lastUpdateResult,
98
+ attempt: lastUpdateCheck,
99
+ available: lastUpdateAvailable,
100
+ result: lastUpdateResult
119
101
  });
120
- exports.getLastSteamUpdateCheck = getLastSteamUpdateCheck;
121
102
  const clearLastSteamUpdateCheck = () => {
122
- lastUpdateResult = false;
103
+ lastUpdateResult = false;
123
104
  };
124
- exports.clearLastSteamUpdateCheck = clearLastSteamUpdateCheck;
125
105
  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;
106
+ lastUpdateCheck = Date.now();
107
+ const localDepot = getLocalSteamDepot(steambeta);
108
+ if (!localDepot) return false;
109
+ const remoteDepot = await getRemoteSteamDepot(steambeta);
110
+ if (!remoteDepot) return false;
111
+ lastUpdateAvailable = Date.now();
112
+ const res = localDepot.buildId !== remoteDepot.buildId || localDepot.timeUpdated < remoteDepot.timeUpdated;
113
+ lastUpdateResult = res;
114
+ return res;
138
115
  }
139
- //# sourceMappingURL=steam.js.map
116
+ exports.clearLastSteamUpdateCheck = clearLastSteamUpdateCheck;
117
+ exports.getAppId = getAppId;
118
+ exports.getLastSteamUpdateCheck = getLastSteamUpdateCheck;
119
+ exports.getLocalSteamDepot = getLocalSteamDepot;
120
+ exports.getRemoteSteamDepot = getRemoteSteamDepot;
121
+ exports.hasSteamUpdate = hasSteamUpdate;
122
+ exports.steamcmdDownloadGame = steamcmdDownloadGame;
123
+ exports.steamcmdDownloadSelf = steamcmdDownloadSelf;
124
+ //# sourceMappingURL=steam.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"steam.js","sourceRoot":"","sources":["../../src/updater/steam.ts"],"names":[],"mappings":";;;;;;AAOA,4BAEC;AAED,oDAIC;AAED,oDAmBC;AA2GD,gDAMC;AAED,kDAQC;AAgBD,wCAeC;AA9LD,uDAA8B;AAC9B,8CAA6E;AAC7E,iDAAyC;AACzC,2BAA8C;AAC9C,gDAAwB;AACxB,oEAAuC;AAEvC,SAAgB,QAAQ;;IACtB,OAAO,MAAA,OAAO,CAAC,GAAG,CAAC,YAAY,mCAAI,yBAAY,CAAC;AAClD,CAAC;AAED,SAAgB,oBAAoB;IAClC,IAAA,wBAAQ,EAAC,cAAI,CAAC,IAAI,CAAC,SAAS,EAAE,iCAAiC,CAAC,EAAE;QAChE,KAAK,EAAE,SAAS;KACjB,CAAC,CAAC;AACL,CAAC;AAED,SAAgB,oBAAoB,CAAC,EACnC,SAAS,EACT,iBAAiB,MAIf,EAAE;IACJ,MAAM,IAAI,GAAG;QACX,sBAAsB,cAAI,CAAC,IAAI,CAAC,6BAAgB,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,MAAM,CAAC,EAAE;QACxE,kBAAkB;QAClB,eAAe,QAAQ,EAAE,EAAE;QAC3B,SAAS,CAAC,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,CAAC,CAAC,IAAI;QACvC,SAAS,IAAI,iBAAiB;YAC5B,CAAC,CAAC,iBAAiB,iBAAiB,EAAE;YACtC,CAAC,CAAC,IAAI;QACR,OAAO;KACR,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAElB,IAAA,wBAAQ,EAAC,GAAG,0BAAa,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;AACvE,CAAC;AAkCD,KAAK,UAAU,cAAc;IAC3B,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,mCAAmC,GAAG,KAAK,CAAC,CAAC;IACrE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,OAAO,IAAiB,CAAC;AAC3B,CAAC;AAUD,SAAS,WAAW,CAAC,SAAkB;IACrC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,UAAU,GAAG,cAAI,CAAC,IAAI,CAAC,6BAAgB,EAAE,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,MAAM,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,cAAI,CAAC,IAAI,CACvB,UAAU,EACV,WAAW,EACX,eAAe,KAAK,MAAM,CAC3B,CAAC;IACF,IAAI,CAAC,IAAA,eAAU,EAAC,OAAO,CAAC,EAAE,CAAC;QACzB,gBAAM,CAAC,OAAO,CAAC,mBAAmB,OAAO,EAAE,CAAC,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,IAAA,iBAAY,EAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,wBAAS,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACzC,OAAO,IAAgB,CAAC;IAC1B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,gBAAM,CAAC,KAAK,CAAC,0BAA0B,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,IAAe,EAAE,MAAe;;IACrD,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,KAAK,GACT,MAAA,MAAA,MAAA,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,0CAAE,MAAM,0CAAE,QAAQ,0CAChC,CAAC,MAAM,IAAI,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CACjD,CAAC;IACJ,IACE,CAAC,KAAK;QACN,OAAO,KAAK,KAAK,QAAQ;QACzB,CAAC,CAAC,SAAS,IAAI,KAAK,CAAC;QACrB,CAAC,CAAC,aAAa,IAAI,KAAK,CAAC;QAEzB,OAAO,IAAI,CAAC;IACd,OAAO;QACL,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,WAAW,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;KACvC,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,GAAa;IACrC,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;IAC9B,IACE,CAAC,QAAQ;QACT,OAAO,QAAQ,KAAK,QAAQ;QAC5B,QAAQ,CAAC,KAAK,KAAK,KAAK;QACxB,CAAC,CAAC,SAAS,IAAI,QAAQ,CAAC;QACxB,CAAC,CAAC,aAAa,IAAI,QAAQ,CAAC;QAE5B,OAAO,IAAI,CAAC;IACd,OAAO;QACL,OAAO,EAAE,QAAQ,CAAC,OAAO;QACzB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC;KAC1C,CAAC;AACJ,CAAC;AAED,SAAgB,kBAAkB,CAAC,SAAkB;IACnD,MAAM,GAAG,GAAG,WAAW,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,MAAM,KAAK,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACpC,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC;AAEM,KAAK,UAAU,mBAAmB,CAAC,SAAkB;IAC1D,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;IACpC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACxB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,CAAC;AACf,CAAC;AAED,IAAI,eAAe,GAAG,CAAC,CAAC;AACxB,IAAI,mBAAmB,GAAG,CAAC,CAAC;AAC5B,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAEtB,MAAM,uBAAuB,GAAG,GAAG,EAAE,CAAC,CAAC;IAC5C,OAAO,EAAE,eAAe;IACxB,SAAS,EAAE,mBAAmB;IAC9B,MAAM,EAAE,gBAAgB;CACzB,CAAC,CAAC;AAJU,QAAA,uBAAuB,2BAIjC;AAEI,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,gBAAgB,GAAG,KAAK,CAAC;AAC3B,CAAC,CAAC;AAFW,QAAA,yBAAyB,6BAEpC;AAEK,KAAK,UAAU,cAAc,CAAC,SAAkB;IACrD,eAAe,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC7B,MAAM,UAAU,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACjD,IAAI,CAAC,UAAU;QAAE,OAAO,KAAK,CAAC;IAE9B,MAAM,WAAW,GAAG,MAAM,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACzD,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAE/B,mBAAmB,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACjC,MAAM,GAAG,GACP,UAAU,CAAC,OAAO,KAAK,WAAW,CAAC,OAAO;QAC1C,UAAU,CAAC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC;IACnD,gBAAgB,GAAG,GAAG,CAAC;IAEvB,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"steam.js","sources":["../../src/updater/steam.ts"],"sourcesContent":["import Logger from '@/logger';\nimport { GAME_INSTALL_DIR, STEAM_APP_ID, STEAMCMD_PATH } from '@/softconfig';\nimport { execSync } from 'node:child_process';\nimport { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport acfParser from 'steam-acf2json';\n\nexport function getAppId() {\n return process.env.STEAM_APP_ID ?? STEAM_APP_ID;\n}\n\nexport function steamcmdDownloadSelf() {\n execSync(path.join(__dirname, '../../tools/install_steamcmd.sh'), {\n stdio: 'inherit',\n });\n}\n\nexport function steamcmdDownloadGame({\n steambeta,\n steambetaPassword,\n}: {\n steambeta?: string;\n steambetaPassword?: string;\n} = {}) {\n const args = [\n `+force_install_dir ${path.join(GAME_INSTALL_DIR, steambeta ?? 'main')}`,\n `+login anonymous`,\n `+app_update ${getAppId()}`,\n steambeta ? `-beta ${steambeta}` : null,\n steambeta && steambetaPassword\n ? `-betapassword ${steambetaPassword}`\n : null,\n '+quit',\n ].filter(Boolean);\n\n execSync(`${STEAMCMD_PATH} ${args.join(' ')}`, { stdio: 'inherit' });\n}\n\nexport type SteamInfo = {\n data: Record<\n string,\n {\n _change_number: number;\n _missing_token: boolean;\n _sha: string;\n _size: number;\n appid: number;\n common: unknown;\n config: unknown;\n depots: Record<\n string,\n {\n config: { oslist: 'linux' | 'windows' | 'macos' };\n }\n > & {\n branches: Record<\n string,\n {\n buildid: string;\n timeupdated: string;\n description?: string;\n }\n >;\n privatebranches: '1';\n };\n }\n >;\n status: 'success';\n};\n\nasync function fetchSteamInfo() {\n const appId = getAppId();\n const res = await fetch('https://api.steamcmd.net/v1/info/' + appId);\n const json = await res.json();\n return json as SteamInfo;\n}\n\nexport type SteamAcf = {\n AppState: {\n appid: string;\n buildid: string;\n lastupdated: string;\n };\n};\n\nfunction getSteamAcf(steambeta?: string) {\n const appId = getAppId();\n const installDir = path.join(GAME_INSTALL_DIR, steambeta ?? 'main');\n const acfPath = path.join(\n installDir,\n 'steamapps',\n `appmanifest_${appId}.acf`,\n );\n if (!existsSync(acfPath)) {\n Logger.verbose(`File not found: ${acfPath}`);\n return null;\n }\n try {\n const plaintext = readFileSync(acfPath, 'utf-8');\n const json = acfParser.decode(plaintext);\n return json as SteamAcf;\n } catch (err) {\n Logger.error(`Error parsing ACF file ${acfPath}:`, err);\n return null;\n }\n}\n\nfunction getSteamDepot(info: SteamInfo, branch?: string) {\n const appId = getAppId();\n const depot =\n info.data[appId]?.depots?.branches?.[\n !branch || branch === 'main' ? 'public' : branch\n ];\n if (\n !depot ||\n typeof depot !== 'object' ||\n !('buildid' in depot) ||\n !('timeupdated' in depot)\n )\n return null;\n return {\n buildId: depot.buildid,\n timeUpdated: Number(depot.timeupdated),\n };\n}\n\nfunction getSteamAcfDepot(acf: SteamAcf) {\n const appId = getAppId();\n const appState = acf.AppState;\n if (\n !appState ||\n typeof appState !== 'object' ||\n appState.appid !== appId ||\n !('buildid' in appState) ||\n !('lastupdated' in appState)\n )\n return null;\n return {\n buildId: appState.buildid,\n timeUpdated: Number(appState.lastupdated),\n };\n}\n\nexport function getLocalSteamDepot(steambeta?: string) {\n const acf = getSteamAcf(steambeta);\n if (!acf) return null;\n const depot = getSteamAcfDepot(acf);\n if (!depot) return null;\n return depot;\n}\n\nexport async function getRemoteSteamDepot(steambeta?: string) {\n const info = await fetchSteamInfo();\n if (!info || !info.data) {\n return null;\n }\n const depot = getSteamDepot(info, steambeta);\n if (!depot) return null;\n return depot;\n}\n\nlet lastUpdateCheck = 0;\nlet lastUpdateAvailable = 0;\nlet lastUpdateResult = false;\n\nexport const getLastSteamUpdateCheck = () => ({\n attempt: lastUpdateCheck,\n available: lastUpdateAvailable,\n result: lastUpdateResult,\n});\n\nexport const clearLastSteamUpdateCheck = () => {\n lastUpdateResult = false;\n};\n\nexport async function hasSteamUpdate(steambeta?: string) {\n lastUpdateCheck = Date.now();\n const localDepot = getLocalSteamDepot(steambeta);\n if (!localDepot) return false;\n\n const remoteDepot = await getRemoteSteamDepot(steambeta);\n if (!remoteDepot) return false;\n\n lastUpdateAvailable = Date.now();\n const res =\n localDepot.buildId !== remoteDepot.buildId ||\n localDepot.timeUpdated < remoteDepot.timeUpdated;\n lastUpdateResult = res;\n\n return res;\n}\n"],"names":["STEAM_APP_ID","execSync","GAME_INSTALL_DIR","STEAMCMD_PATH","existsSync","Logger","readFileSync"],"mappings":"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"}