omegga 1.2.9 → 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 +1 -1
  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 +1 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../../../src/webserver/backend/api.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api.js","sources":["../../../src/webserver/backend/api.ts"],"sourcesContent":["import Logger from '@/logger';\nimport { IPluginDocumentation } from '@/plugin';\nimport { steamcmdDownloadGame } from '@/updater';\nimport { getLastSteamUpdateCheck, hasSteamUpdate } from '@/updater/steam';\nimport { VERSION } from '@/version';\nimport Player from '@omegga/player';\nimport { parseLinks, sanitize } from '@util/chat';\nimport { rgbToHex } from '@util/color';\nimport { parseBrickadiaTime } from '@util/time';\nimport * as uuid from '@util/uuid';\nimport express from 'express';\nimport {\n JSONRPCClient,\n JSONRPCServer,\n JSONRPCServerAndClient,\n} from 'json-rpc-2.0';\nimport _ from 'lodash';\nimport Database from './database';\nimport type Webserver from './index';\nimport {\n IFrontendBanEntry,\n IPlayer,\n IStoreAutoRestartConfig,\n IStoreBanHistory,\n IStoreKickHistory,\n IStoreUser,\n IUserAgo,\n IUserHistory,\n IUserNote,\n OmeggaSocketIo,\n} from './types';\nimport { Plugin } from '@omegga/plugin/interface';\nimport { readBrdbMeta } from '@util/brdb';\n\nexport type OmeggaSocketData = {\n roles: { type: 'role'; name: string }[];\n version: string;\n brickadiaVersion: number | null;\n canLogOut: boolean;\n now: number;\n userless: boolean;\n isSteam: boolean;\n update: {\n canCheck: boolean;\n lastCheck: boolean | null;\n };\n user: {\n username: string;\n isOwner: boolean;\n roles: string[];\n };\n};\n\nexport type GetPlayersRes = {\n pages: number;\n total: number;\n players: (IUserHistory & IUserAgo & { ban?: IFrontendBanEntry })[];\n};\n\nexport type GetPlayerRes = Omit<IUserHistory, 'nameHistory'> & {\n banHistory: (IStoreBanHistory & {\n duration?: number;\n bannerName?: string;\n })[];\n kickHistory: (IStoreKickHistory & {\n kickerName?: string;\n })[];\n notes: IUserNote[];\n nameHistory: {\n name: string;\n displayName: string;\n date: number;\n ago?: number;\n }[];\n} & IUserAgo & {\n isHost: boolean;\n isOnline: boolean;\n currentBan: IFrontendBanEntry | null;\n roles: { name: string; color: string }[];\n };\n\nexport type GetPluginsRes = {\n name: string;\n documentation: IPluginDocumentation;\n path: string;\n isLoaded: boolean;\n isEnabled: boolean;\n}[];\n\nexport type GetPluginRes = {\n name: string;\n format: string;\n info: Record<string, unknown>;\n documentation: IPluginDocumentation;\n config: Record<string, unknown>;\n defaultConfig: Record<string, unknown>;\n objCount: number;\n path: string;\n isLoaded: boolean;\n isEnabled: boolean;\n};\n\nexport type GetUsersRes = {\n pages: number;\n total: number;\n users: (IStoreUser & IUserAgo)[];\n};\n\nexport type HistoryRes = Awaited<ReturnType<Database['getChats']>>;\n\nexport type WorldRevisionsRes = {\n index: number;\n date: number;\n note: string;\n}[];\n\nexport type WorldMetaRes = {\n meta: {\n world: {\n environment: string;\n };\n bundle: {\n type: 'World';\n iD: string;\n name: string;\n version: string;\n tags: string[];\n authors: string[];\n createdAt: string;\n updatedAt: string;\n description: string;\n dependencies: string[];\n };\n };\n owners: {\n id: string;\n name: string;\n display_name: string;\n entity_count: number;\n brick_count: number;\n component_count: number;\n wire_count: number;\n }[];\n};\n\nexport default function (server: Webserver, io: OmeggaSocketIo) {\n const { database, omegga } = server;\n\n // open API is accessible without auth\n const openApi = express.Router();\n const api = express.Router();\n\n // check if this is the first user in the database\n openApi.get('/first', async (req, res) =>\n res.json(await database.isFirstUser()),\n );\n\n // login / create admin user route\n openApi.post('/auth', async (req, res) => {\n // body is username and password\n if (\n typeof req.body !== 'object' ||\n typeof req.body.username !== 'string' ||\n typeof req.body.password !== 'string'\n ) {\n return res.status(422).json({ message: 'invalid body' });\n }\n const { username, password } = req.body;\n\n // username regex\n if (!username.match(/^\\w{0,32}$/)) {\n return res.status(422).json({ message: 'invalid body' });\n }\n\n // if this is the first user, create it as the admin user\n const isFirst = await database.isFirstUser();\n let user;\n if (isFirst) {\n user = await database.createAdminUser(\n username,\n username === '' ? '' : password,\n );\n } else {\n user = await database.authUser(username, password);\n }\n\n if (user) {\n req.session.userId = user._id;\n req.session.save();\n res.status(200).json({});\n } else {\n res.status(404).json({ message: 'no user found' });\n }\n });\n\n // kill a session\n api.get('/logout', (req, res) => {\n req.session.destroy(e => {\n res.status(e ? 500 : 200).json({});\n });\n });\n\n // authentication middleware for api\n api.all('*', (req, _res, next) => {\n (async () => {\n const user = await database.findUserById(req.session.userId);\n if (!user || user.isBanned) return next(new Error('unauthorized'));\n // req.user = user;\n\n next();\n })();\n });\n\n // websocket data\n io.on('connection', socket => {\n // let this user receive messages directed to this user\n socket.join('user:' + socket.data.user._id);\n\n database.getRoles().then(roles => {\n socket.emit('data', {\n roles,\n version: VERSION,\n brickadiaVersion: omegga.version ?? null,\n canLogOut: socket.data.user.username !== '',\n now: Date.now(), // this can be used for the frontend to anticipate drift\n userless: !socket.data.user.username,\n user: {\n username: socket.data.user.username || 'Admin',\n isOwner: socket.data.user.isOwner,\n roles: socket.data.user.roles,\n },\n isSteam: Boolean(omegga.config.__STEAM),\n update: {\n canCheck: omegga.config.__STEAM && !omegga.config.server?.steambeta,\n lastCheck: getLastSteamUpdateCheck()?.result ?? null,\n },\n } satisfies OmeggaSocketData);\n });\n\n // logging for this user in the console for web ui actions\n const usernameText = `[${\n (socket.data.user.username || 'Admin').brightMagenta\n }]`;\n const log = (...args: any[]) => Logger.logp(usernameText, ...args);\n const error = (...args: any[]) => Logger.errorp(usernameText, ...args);\n\n // rpc connection\n const rpcServer = new JSONRPCServer();\n const rpcClient = new JSONRPCClient(async (data: any) => {\n socket.emit('rpc', data);\n });\n const rpc = new JSONRPCServerAndClient(rpcServer, rpcClient);\n socket.on('rpc', data => {\n if (data && typeof data === 'object') {\n try {\n rpc.receiveAndSend(data);\n } catch (e) {\n // silently discard broken rpc requests\n }\n }\n });\n\n // send chat message from web ui\n // TODO: check if this user has a role with permission to chat\n rpc.addMethod('chat', async ([message]: [string]) => {\n if (typeof message !== 'string') return;\n if (message.length > 140) message = message.slice(0, 140);\n\n // create fake user\n const user = {\n name: socket.data.user.username || 'Admin',\n id: socket.data.user.playerId,\n color: 'ff00ff',\n web: true,\n };\n\n // create database entry, send to web ui\n io.to('chat').emit(\n 'chat',\n await database.addChatLog('msg', user, message),\n );\n\n // broadcast to chat\n omegga.broadcast(\n `\"[<b><color=\\\\\"ff00ff\\\\\">${user.name}</></>]: ${parseLinks(\n sanitize(message),\n )}\"`,\n );\n\n // broadcast to terminal\n Logger.log(`[${user.name.brightMagenta.underline}]: ${message}`);\n\n return 'ok';\n });\n\n // read recent chat messages\n // TODO: add permission check\n rpc.addMethod('chat.recent', () => {\n return database.getChats({ sameServer: true });\n });\n\n // find chat messages after a certain time\n // TODO: add permission check\n rpc.addMethod(\n 'chat.history',\n ([{ after, before }]: [{ after?: number; before?: number }] = [{}]) => {\n return database.getChats({ after, before });\n },\n );\n\n // see what days chat messages were sent\n // TODO: add permission check\n rpc.addMethod('chat.calendar', () => {\n return database.calendar.years;\n });\n\n // get the list of plugins\n // TODO: add permission check\n rpc.addMethod('plugins.list', () => {\n return _.sortBy(\n omegga.pluginLoader.plugins.map(p => ({\n name: p.getName(),\n documentation: p.getDocumentation(),\n path: p.shortPath,\n isLoaded: p.isLoaded(),\n isEnabled: p.isEnabled(),\n })),\n p => p.name.toLowerCase(),\n ) satisfies GetPluginsRes;\n });\n\n // get information on a specific plugin\n // TODO: add permission check\n rpc.addMethod('plugin.get', async ([shortPath]: [string]) => {\n const plugin = omegga.pluginLoader.plugins.find(\n p => p.shortPath === shortPath,\n );\n if (!plugin) return null;\n\n // get the plugin configs\n const [defaultConfig, config, objCount] = await Promise.all([\n plugin.storage.getDefaultConfig(),\n plugin.storage.getConfig(),\n plugin.storage.count(),\n ]);\n\n return {\n name: plugin.getName(),\n format: (plugin.constructor as typeof Plugin).getFormat(),\n info: plugin.getInfo(),\n documentation: plugin.getDocumentation(),\n config,\n defaultConfig,\n objCount,\n path: plugin.shortPath,\n isLoaded: plugin.isLoaded(),\n isEnabled: plugin.isEnabled(),\n } satisfies GetPluginRes;\n });\n\n // get a paginated list of players\n // TODO: add permission check\n rpc.addMethod(\n 'players.list',\n async ([\n {\n page = 0,\n search = '',\n sort = 'name',\n direction = '1',\n filter = '',\n } = {},\n ]: [\n {\n page?: number;\n search?: string;\n sort?: string;\n direction?: string;\n filter?: string;\n },\n ]) => {\n const banList = (omegga.getBanList() || { banList: {} }).banList;\n\n // get the ban list\n const now = Date.now();\n\n let limitId;\n\n // if the filter is set to banned players only, limit player results by ids in the current ban list\n if (filter === 'banned') {\n limitId = Object.keys(banList).filter(\n b =>\n banList[b].expires <= banList[b].created ||\n parseBrickadiaTime(banList[b].expires) > Date.now(),\n );\n }\n\n const resp: GetPlayersRes = await database.getPlayers({\n page,\n search,\n sort,\n direction,\n limitId,\n });\n\n for (const player of resp.players) {\n player.seenAgo = now - player.lastSeen;\n player.createdAgo = now - player.created;\n\n const foundBan = banList[player.id];\n if (foundBan) {\n const created = parseBrickadiaTime(foundBan.created);\n const expires = parseBrickadiaTime(foundBan.expires);\n\n // create a clone of the object\n let currentBan: IFrontendBanEntry = {\n ...foundBan,\n // parse the times in the current ban\n created,\n expires,\n duration: expires - created,\n remainingTime: expires - now,\n\n // lookup banner name\n bannerName: _.get(\n omegga.getNameCache(),\n ['savedPlayerNames', foundBan.bannerId],\n '',\n ),\n };\n\n // if the ban is expired, it should not be listed\n if (currentBan.expires < now && currentBan.duration > 0)\n currentBan = null;\n player.ban = currentBan;\n }\n }\n return resp;\n },\n );\n\n // get a specific player's info\n // TODO: add permission check\n rpc.addMethod('player.get', async ([id]: [string]) => {\n const entry: Omit<IUserHistory, 'nameHistory'> & {\n banHistory: (IStoreBanHistory & {\n duration?: number;\n bannerName?: string;\n })[];\n kickHistory: (IStoreKickHistory & { kickerName?: string })[];\n notes: IUserNote[];\n nameHistory: {\n name: string;\n displayName: string;\n date: number;\n ago?: number;\n }[];\n } & IUserAgo = await database.getPlayer(id);\n if (!entry) return null;\n const now = Date.now();\n\n entry.seenAgo = now - entry.lastSeen;\n entry.createdAgo = now - entry.created;\n for (const n of entry.nameHistory) n.ago = now - n.date;\n\n // combine player roles with server roles\n const playerRoles = Player.getRoles(omegga, id) || [];\n const { roles: serverRoles = [] } = omegga.getRoleSetup() ?? {};\n\n // Get banner name and duration from list of bans\n for (const b of entry.banHistory) {\n b.duration = b.expires - b.created;\n // lookup banner name\n b.bannerName = _.get(\n omegga.getNameCache(),\n ['savedPlayerNames', b.bannerId],\n '',\n );\n }\n\n // Get kicker name from list of kicks\n for (const b of entry.kickHistory) {\n // lookup banner name\n b.kickerName = _.get(\n omegga.getNameCache(),\n ['savedPlayerNames', b.kickerId],\n '',\n );\n }\n\n const foundBan = (omegga.getBanList() || { banList: {} }).banList[id];\n let currentBan: IFrontendBanEntry = null;\n\n if (foundBan) {\n // parse the times in the current ban\n const created = parseBrickadiaTime(foundBan.created);\n const expires = parseBrickadiaTime(foundBan.expires);\n // create a clone of the object\n currentBan = {\n ...foundBan,\n created,\n expires,\n duration: expires - created,\n remainingTime: expires - now,\n // lookup banner name\n bannerName: _.get(\n omegga.getNameCache(),\n ['savedPlayerNames', foundBan.bannerId],\n '',\n ),\n };\n\n // if the ban is expired, it should not be listed\n if (currentBan.expires < now && currentBan.duration > 0)\n currentBan = null;\n }\n\n return {\n // database results\n ...entry,\n\n // player is host\n isHost: omegga.getHostId() === id,\n\n isOnline: omegga.players.some(p => p.id === id),\n\n // player's current ban state\n currentBan,\n\n // all player's roles w/ colors\n roles: playerRoles.map(r => {\n // default role color is white\n let color = 'ffffff';\n\n // find the role (if it exists) and get the color\n const role = serverRoles.find(\n sr => sr.name.toLowerCase() === r.toLowerCase(),\n );\n if (role && role.bHasColor) color = rgbToHex(role.color);\n\n return {\n name: r,\n color: color,\n };\n }),\n } satisfies GetPlayerRes;\n });\n\n rpc.addMethod(\n 'player.ban',\n async ([id, duration = -1, reason = 'No Reason']: [\n id: string,\n duration: number,\n reason: string,\n ]) => {\n // validate inputs\n if (typeof duration !== 'number') return false;\n if (typeof id !== 'string' || !uuid.match(id)) return false;\n if (typeof reason !== 'string' || reason.length > 128) return false;\n reason = reason.replace(/\\n/g, ' ').replace(/\"/g, \"'\");\n log(\n 'Banning player',\n omegga.getNameCache()?.savedPlayerNames?.[id].yellow ??\n 'with id ' + id.yellow,\n );\n // ban the user\n omegga.writeln(`Chat.Command /Ban \"${id}\" ${duration} \"${reason}\"`);\n let listener;\n\n // wait for the ban to update\n const ok = await Promise.race([\n new Promise(resolve => {\n database.on(\n 'update.bans',\n (listener = () => {\n const banList = (omegga.getBanList() || { banList: {} })\n .banList;\n if (banList[id]) {\n const entry: IStoreBanHistory = {\n type: 'banHistory',\n banned: id,\n bannerId: null,\n created: parseBrickadiaTime(banList[id].created),\n expires: parseBrickadiaTime(banList[id].expires),\n reason: banList[id].reason,\n };\n\n database.stores.players.update(\n entry,\n { $set: entry },\n { upsert: true },\n );\n\n resolve(true);\n }\n }),\n );\n }),\n new Promise(resolve => setTimeout(() => resolve(false), 5000)),\n ]);\n database.off('update.bans', listener);\n return ok;\n },\n );\n\n rpc.addMethod(\n 'player.kick',\n async ([id, reason = 'No Reason']: [id: string, reason: string]) => {\n // validate inputs\n if (typeof id !== 'string' || !uuid.match(id)) return false;\n if (typeof reason !== 'string' || reason.length > 128) return false;\n reason = reason.replace(/\\n/g, ' ').replace(/\"/g, \"'\");\n\n // ensure player exists\n const player = omegga.players.find(p => p.id === id);\n if (!player) return false;\n\n log('Kicking player', player.name.yellow);\n\n // kick the user\n omegga.writeln(`Chat.Command /Kick \"${id}\" \"${reason}\"`);\n\n // wait for the player to disconnect\n const ok = await Promise.race([\n new Promise(resolve => {\n omegga.once('leave', async (leavingPlayer: IPlayer) => {\n if (leavingPlayer.id === id) {\n resolve(true);\n\n // add kick to database\n const entry: IStoreKickHistory = {\n type: 'kickHistory',\n kicked: id,\n kickerId: null,\n created: Date.now(),\n reason,\n };\n\n await database.stores.players.update(\n entry,\n { $set: entry },\n { upsert: true },\n );\n }\n });\n }),\n new Promise(resolve => setTimeout(() => resolve(false), 5000)),\n ]);\n\n return ok;\n },\n );\n\n rpc.addMethod('player.unban', async ([id]: [id: string]) => {\n // validate inputs\n if (typeof id !== 'string' || !uuid.match(id)) return false;\n\n // check if user is banned\n const banList = (omegga.getBanList() || { banList: {} }).banList;\n if (!banList[id]) return false;\n\n log(\n 'Unbanning player',\n omegga.getNameCache()?.savedPlayerNames?.[id].yellow ??\n 'with id ' + id.yellow,\n );\n\n // unban the user\n omegga.writeln(`Chat.Command /Unban \"${id}\"`);\n let listener;\n\n // wait for the ban to update\n const ok = await Promise.race([\n new Promise(resolve => {\n database.on(\n 'update.bans',\n (listener = () => {\n const banList = (omegga.getBanList() || { banList: {} }).banList;\n if (\n !banList[id] ||\n parseBrickadiaTime(banList[id].expires) < Date.now()\n )\n resolve(true);\n }),\n );\n }),\n new Promise(resolve => setTimeout(() => resolve(false), 5000)),\n ]);\n database.off('update.bans', listener);\n return ok;\n });\n\n rpc.addMethod('player.clearbricks', async ([id]: [id: string]) => {\n // validate inputs\n if (typeof id !== 'string' || !uuid.match(id)) return false;\n\n log(\n 'Clearing bricks for player',\n omegga.getNameCache()?.savedPlayerNames?.[id]?.yellow ??\n 'with id ' + id.yellow,\n );\n\n // unban the user\n omegga.writeln(`Bricks.Clear \"${id}\"`);\n return true;\n });\n\n // set plugin config\n // TODO: add permission check\n rpc.addMethod(\n 'plugin.config',\n async ([shortPath, config]: [string, Record<string, unknown>]) => {\n const plugin = omegga.pluginLoader.plugins.find(\n p => p.shortPath === shortPath,\n );\n if (!plugin) return null;\n\n await plugin.storage.setConfig(config);\n // TODO: validate configs\n return true;\n },\n );\n\n // reload all plugins (and scan for new ones)\n // TODO: add permission check\n rpc.addMethod('plugins.reload', async () => {\n if (!omegga.pluginLoader) {\n error('Omegga is not using plugins');\n return false;\n }\n\n log('Unloading current plugins');\n let success = await omegga.pluginLoader.unload();\n if (!success) {\n error('Could not unload all plugins');\n return false;\n }\n\n log('Scanning for new plugins');\n success = await omegga.pluginLoader.scan();\n if (!success) {\n error('Could not scan for plugins');\n return false;\n }\n\n log('Starting plugins');\n success = await omegga.pluginLoader.reload();\n if (success) {\n const plugins = omegga.pluginLoader.plugins\n .filter(p => p.isLoaded())\n .map(p => p.getName());\n log('Loaded', (plugins.length + '').yellow, 'plugins:', plugins);\n return true;\n } else {\n error('Could not load all plugins');\n return false;\n }\n });\n\n // unload a plugin\n // TODO: add permission check\n rpc.addMethod('plugin.unload', async ([shortPath]: [string]) => {\n const plugin = omegga.pluginLoader.plugins.find(\n p => p.shortPath === shortPath,\n );\n if (!plugin) return false;\n if (!plugin.isLoaded()) return false;\n log('Unloading'.red, 'plugin', plugin.getName().yellow);\n return await plugin.unload();\n });\n\n // load a plugin\n // TODO: add permission check\n rpc.addMethod('plugin.load', async ([shortPath]: [string]) => {\n const plugin = omegga.pluginLoader.plugins.find(\n p => p.shortPath === shortPath,\n );\n if (!plugin) return false;\n if (plugin.isLoaded() || !plugin.isEnabled()) return false;\n log('Loading'.green, 'plugin', plugin.getName().yellow);\n return await plugin.load();\n });\n\n // enable/disable a plugin\n // TODO: add permission check\n rpc.addMethod(\n 'plugin.toggle',\n ([shortPath, enabled]: [string, boolean]) => {\n if (typeof enabled !== 'boolean') return;\n const plugin = omegga.pluginLoader.plugins.find(\n p => p.shortPath === shortPath,\n );\n if (!plugin) return false;\n try {\n plugin.setEnabled(enabled);\n log(\n enabled ? 'Enabled'.green : 'Disabled'.red,\n 'plugin',\n plugin.getName().yellow,\n );\n return true;\n } catch (e) {\n error(\n 'Error',\n enabled ? 'enabling'.green : 'disabling'.red,\n 'plugin',\n plugin.getName().yellow,\n );\n return false;\n }\n },\n );\n\n // get a list of roles\n // TODO: add permission check\n rpc.addMethod('roles.list', () => {\n return _.sortBy(omegga.getRoleSetup()?.roles ?? [], p =>\n p.name.toLowerCase(),\n );\n });\n\n // get a paginated list of users\n // TODO: add permission check\n rpc.addMethod(\n 'users.list',\n async ([{ page = 0, search = '', sort = 'name', direction = '1' } = {}]: [\n {\n page?: number;\n search?: string;\n sort?: string;\n direction?: string;\n },\n ]) => {\n const resp: GetUsersRes = await database.getUsers({\n page,\n search,\n sort,\n direction,\n });\n const now = Date.now();\n resp.users = resp.users.map(({ hash: _, ...user }) => ({\n ...user,\n hash: '',\n seenAgo: user.lastOnline ? now - user.lastOnline : Infinity,\n createdAgo: now - user.created,\n }));\n return resp;\n },\n );\n\n // create a new user (host only at the moment)\n // TODO: add permission check\n rpc.addMethod(\n 'users.create',\n async ([username, password]: [string, string]) => {\n if (!socket.data.user.isOwner) return 'missing permission';\n\n // body is username and password\n if (typeof username !== 'string' || typeof password !== 'string')\n return 'username/password not a string';\n\n // validate username\n if (!username.match(/^\\w{0,32}$/)) return 'username is not allowed';\n\n // this validation is here for _those_ people\n if (password.length === 0 || password.length > 128)\n return 'invalid password size';\n\n // set owner's credential as the first user\n if (socket.data.user.isOwner && socket.data.user.username === '') {\n // set the owner's username and password\n try {\n await database.stores.users.update(\n { _id: socket.data.user._id },\n {\n username,\n hash: await database.hash(password),\n },\n );\n } catch (e) {\n error('error setting owner password', e);\n return 'error setting owner password';\n }\n\n log(`created account as \"${username.yellow}\"`);\n\n // update\n return '';\n }\n\n // check if user exists\n if (await database.userExists(username)) return 'user already exists';\n\n try {\n await database.createUser(username, password);\n } catch (e) {\n error('error creating new user', e);\n return 'error creating new user';\n }\n\n log(`created new user \"${username.yellow}\"`);\n\n return '';\n },\n );\n\n // change a user's password\n // TODO: add permission check\n rpc.addMethod(\n 'users.passwd',\n async ([username, password]: [string, string]) => {\n // the owner can change names and the user can change their own name\n if (!socket.data.user.isOwner && username !== socket.data.user.username)\n return 'missing permission';\n\n // body is username and password\n if (typeof username !== 'string' || typeof password !== 'string')\n return 'username/password not a string';\n\n // validate username\n if (!username.match(/^\\w{0,32}$/)) return 'username is not allowed';\n\n // check if user exists\n if (!(await database.userExists(username)))\n return 'user does not exist';\n\n try {\n await database.userPasswd(username, password);\n } catch (e) {\n error('error setting user password', e);\n return \"error setting user's password\";\n }\n\n log(`changed password for \"${username.yellow}\"`);\n\n return '';\n },\n );\n\n rpc.addMethod('server.autorestart.get', async () => {\n return await database.getAutoRestartConfig();\n });\n\n const autorestartConfigFields: Record<\n keyof IStoreAutoRestartConfig,\n string\n > = {\n type: 'string',\n maxUptime: 'number',\n maxUptimeEnabled: 'boolean',\n emptyUptime: 'number',\n emptyUptimeEnabled: 'boolean',\n dailyHour: 'number',\n dailyHourEnabled: 'boolean',\n announcementEnabled: 'boolean',\n playersEnabled: 'boolean',\n saveWorld: 'boolean',\n autoUpdateEnabled: 'boolean',\n autoUpdateIntervalMins: 'number',\n };\n\n rpc.addMethod(\n 'server.autorestart.set',\n async ([config]: [IStoreAutoRestartConfig]) => {\n // validate the autorestart config\n if (\n typeof config !== 'object' ||\n !Object.entries(autorestartConfigFields).every(\n ([k, v]) =>\n k in config && typeof config[k] === v && !Number.isNaN(v),\n ) ||\n config.type !== 'autoRestartConfig'\n )\n return false;\n await database.setAutoRestartConfig(config);\n return true;\n },\n );\n\n // send server status at request\n // TODO: server status permission check\n rpc.addMethod('server.status', () => {\n return server.lastReportedStatus;\n });\n\n // get server run status\n // TODO: server status permission check\n rpc.addMethod('server.started', () => {\n return {\n started: omegga.started,\n starting: omegga.starting,\n stopping: omegga.stopping,\n };\n });\n\n // start the server if it's not already started\n // TODO: server status permission check\n rpc.addMethod('server.start', async () => {\n if (omegga.starting || omegga.stopping || omegga.started) return;\n log('Starting server...');\n await omegga.start();\n });\n\n // stop the server if it's not already stopped\n // TODO: server status permission check\n rpc.addMethod('server.stop', async () => {\n if (omegga.starting || omegga.stopping || !omegga.started) return;\n log('Stopping server...');\n await omegga.stop();\n });\n\n // restart the server if it's running, start the server if it's stopped\n // TODO: server status permission check\n rpc.addMethod('server.restart', async () => {\n if (omegga.starting || omegga.stopping) return;\n\n try {\n const config = await database.getAutoRestartConfig();\n await omegga.saveServer({\n players: config.playersEnabled,\n saveWorld: config.saveWorld ?? true,\n announcement: config.announcementEnabled,\n });\n } catch (err) {\n error('Error while saving server setup', err);\n }\n database.addChatLog('server', {}, 'Restarting in 5 seconds...');\n Logger.logp('Restarting in 5 seconds...');\n omegga.broadcast(\n `<size=\"20\">Server restart in <b><color=\"ffffbb\">${5} seconds</></></>`,\n );\n await new Promise(resolve => setTimeout(resolve, 5000));\n await omegga.restartServer();\n });\n\n // check if the server has a steam update available\n rpc.addMethod('server.updatecheck', async () => {\n if (!omegga.config.__STEAM) return null;\n const lastUpdate = getLastSteamUpdateCheck();\n if (Date.now() - lastUpdate.attempt < 1000 * 5) {\n Logger.verbose('[rpc] Using cached steam update check');\n return lastUpdate.result;\n }\n Logger.verbose('[rpc] Checking for steam update');\n return await hasSteamUpdate(omegga.config.server?.steambeta);\n });\n\n // check if the server has a steam update available\n rpc.addMethod('server.update', async () => {\n if (!omegga.config.__STEAM) return false;\n if (omegga.stopping || omegga.starting) return false;\n const wasStarted = omegga.started;\n if (wasStarted) {\n log('Stopping server to update...');\n await omegga.stop();\n }\n log('Updating server...');\n let ok = false;\n try {\n steamcmdDownloadGame({\n steambeta: omegga.config.server?.steambeta,\n steambetaPassword: omegga.config.server?.steambetaPassword,\n });\n ok = true;\n log('Server updated successfully');\n } catch (err) {\n error('Error updating server', err);\n }\n if (wasStarted) {\n log('Starting server...');\n await omegga.start();\n }\n\n return ok;\n });\n\n // list available worlds\n rpc.addMethod('world.list', async () => {\n const prefix = omegga.worldPath + '/';\n return omegga\n .getWorlds()\n .map(world => world.replace(prefix, '').replace(/\\.brdb$/, ''));\n });\n\n // list a world's revisions (while the server is running)\n rpc.addMethod('world.revisions', async ([world]: [string]) => {\n try {\n return (await omegga.getWorldRevisions(world))?.map(\n ({ date, ...r }) => ({ ...r, date: date.getTime() }),\n ) satisfies WorldRevisionsRes;\n } catch (_err) {\n return null;\n }\n });\n\n rpc.addMethod('world.meta', async ([world]: [string]) => {\n try {\n const path = omegga.getWorldPath(world);\n if (!path) return null;\n return readBrdbMeta(path) satisfies WorldMetaRes;\n } catch (err) {\n error('Error while getting world meta', err);\n return null;\n }\n });\n\n // get the next world to load\n rpc.addMethod('world.next', async () => {\n return omegga.getNextWorld();\n });\n\n // get the configured default world\n rpc.addMethod('world.active', async () => {\n return omegga.getActiveWorld();\n });\n\n // load a world or revision of a world\n rpc.addMethod(\n 'world.load',\n async ([world, revision]: [string, number?]) => {\n try {\n let res = false;\n if (revision) {\n log('Loading world revision', revision, 'of', world.yellow);\n res = await omegga.loadWorldRevision(world, revision);\n } else {\n log('Loading world', world.yellow);\n res = await omegga.loadWorld(world);\n }\n if (res) {\n log('World loaded successfully');\n } else {\n log('World load failed');\n }\n return res;\n } catch (err) {\n error('Error while loading world', err);\n return false;\n }\n },\n );\n\n /// set or clear the default world\n rpc.addMethod('world.use', async ([world]: [string?]) => {\n try {\n const ok = omegga.setActiveWorld(world || null);\n if (ok) {\n log('Set default world to', (world || 'none').yellow);\n }\n return ok;\n } catch (err) {\n error('Error while using world', err);\n return false;\n }\n });\n\n // create a new world\n rpc.addMethod(\n 'world.create',\n async ([name, level]: [\n string,\n ('Plate' | 'Space' | 'Studio' | 'Peaks')?,\n ]) => {\n try {\n log(\n 'Creating new world',\n name.yellow,\n 'with level',\n level?.yellow || 'Plate',\n );\n const res = await omegga.createEmptyWorld(name, level);\n if (res) {\n log('World created successfully');\n } else {\n log('World creation failed');\n }\n return res;\n } catch (err) {\n error('Error while creating world', err);\n return false;\n }\n },\n );\n\n // save a world or save as a world\n rpc.addMethod('world.save', async ([name]: [string?]) => {\n try {\n let res = false;\n if (name) {\n log('Saving world as', name.yellow);\n res = await omegga.saveWorldAs(name);\n } else {\n log('Saving current world');\n res = await omegga.saveWorld();\n }\n if (res) {\n log('World saved successfully');\n } else {\n log('World save failed');\n }\n return res;\n } catch (err) {\n error('Error while saving world', err);\n return false;\n }\n });\n\n // subscribe and unsubscribe to events\n socket.on('subscribe', room => {\n // TODO: permission check for certain rooms\n if (server.rooms.includes(room)) {\n socket.join(room);\n }\n });\n socket.on('unsubscribe', room => {\n if (server.rooms.includes(room)) socket.leave(room);\n });\n\n socket.on('disconnect', () => {});\n });\n\n // register routes\n server.app.use('/api/v1', openApi);\n server.app.use('/api/v1', api);\n}\n"],"names":["VERSION","getLastSteamUpdateCheck","Logger","JSONRPCServer","JSONRPCClient","JSONRPCServerAndClient","parseLinks","sanitize","parseBrickadiaTime","player","Player","color","rgbToHex","uuid.match","banList","_","hasSteamUpdate","steamcmdDownloadGame","readBrdbMeta"],"mappings":"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"}
@@ -1,21 +1,18 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
2
+ Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
3
3
  class Calendar {
4
- constructor() {
5
- this.years = {};
6
- }
7
- addDate(d) {
8
- const date = new Date(d);
9
- const day = date.getUTCDate();
10
- const month = date.getUTCMonth();
11
- const year = date.getUTCFullYear();
12
- if (!this.years[year])
13
- this.years[year] = {};
14
- if (!this.years[year][month])
15
- this.years[year][month] = {};
16
- if (!this.years[year][month][day])
17
- this.years[year][month][day] = true;
18
- }
4
+ constructor() {
5
+ this.years = {};
6
+ }
7
+ addDate(d) {
8
+ const date = new Date(d);
9
+ const day = date.getUTCDate();
10
+ const month = date.getUTCMonth();
11
+ const year = date.getUTCFullYear();
12
+ if (!this.years[year]) this.years[year] = {};
13
+ if (!this.years[year][month]) this.years[year][month] = {};
14
+ if (!this.years[year][month][day]) this.years[year][month][day] = true;
15
+ }
19
16
  }
20
17
  exports.default = Calendar;
21
- //# sourceMappingURL=calendar.js.map
18
+ //# sourceMappingURL=calendar.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"calendar.js","sourceRoot":"","sources":["../../../src/webserver/backend/calendar.ts"],"names":[],"mappings":";;AAAA,MAAqB,QAAQ;IAG3B;QACE,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,CAAyB;QAC/B,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QACnC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7C,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;QAC3D,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC;YAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACzE,CAAC;CACF;AAhBD,2BAgBC"}
1
+ {"version":3,"file":"calendar.js","sources":["../../../src/webserver/backend/calendar.ts"],"sourcesContent":["export default class Calendar {\n years: Record<number, Record<number, Record<number, boolean>>>;\n\n constructor() {\n this.years = {};\n }\n\n addDate(d: string | number | Date) {\n const date = new Date(d);\n const day = date.getUTCDate();\n const month = date.getUTCMonth();\n const year = date.getUTCFullYear();\n if (!this.years[year]) this.years[year] = {};\n if (!this.years[year][month]) this.years[year][month] = {};\n if (!this.years[year][month][day]) this.years[year][month][day] = true;\n }\n}\n"],"names":[],"mappings":";;AAAA,MAAqB,SAAS;AAAA,EAG5B,cAAc;AACZ,SAAK,QAAQ,CAAA;AAAA,EACf;AAAA,EAEA,QAAQ,GAA2B;AACjC,UAAM,OAAO,IAAI,KAAK,CAAC;AACvB,UAAM,MAAM,KAAK,WAAA;AACjB,UAAM,QAAQ,KAAK,YAAA;AACnB,UAAM,OAAO,KAAK,eAAA;AAClB,QAAI,CAAC,KAAK,MAAM,IAAI,EAAG,MAAK,MAAM,IAAI,IAAI,CAAA;AAC1C,QAAI,CAAC,KAAK,MAAM,IAAI,EAAE,KAAK,EAAG,MAAK,MAAM,IAAI,EAAE,KAAK,IAAI,CAAA;AACxD,QAAI,CAAC,KAAK,MAAM,IAAI,EAAE,KAAK,EAAE,GAAG,EAAG,MAAK,MAAM,IAAI,EAAE,KAAK,EAAE,GAAG,IAAI;AAAA,EACpE;AACF;;"}