@takaro/db 0.0.0-next.0da151e

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 (667) hide show
  1. package/README.md +1 -0
  2. package/dist/TakaroModel.d.ts +16 -0
  3. package/dist/TakaroModel.d.ts.map +1 -0
  4. package/dist/TakaroModel.js +25 -0
  5. package/dist/TakaroModel.js.map +1 -0
  6. package/dist/config.d.ts +120 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +99 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/encryption.d.ts +5 -0
  11. package/dist/encryption.d.ts.map +1 -0
  12. package/dist/encryption.js +23 -0
  13. package/dist/encryption.js.map +1 -0
  14. package/dist/errorTypeGuards.d.ts +3 -0
  15. package/dist/errorTypeGuards.d.ts.map +1 -0
  16. package/dist/errorTypeGuards.js +11 -0
  17. package/dist/errorTypeGuards.js.map +1 -0
  18. package/dist/knex.d.ts +9 -0
  19. package/dist/knex.d.ts.map +1 -0
  20. package/dist/knex.js +50 -0
  21. package/dist/knex.js.map +1 -0
  22. package/dist/main.d.ts +9 -0
  23. package/dist/main.d.ts.map +1 -0
  24. package/dist/main.js +9 -0
  25. package/dist/main.js.map +1 -0
  26. package/dist/migrations/index.d.ts +3 -0
  27. package/dist/migrations/index.d.ts.map +1 -0
  28. package/dist/migrations/index.js +59 -0
  29. package/dist/migrations/index.js.map +1 -0
  30. package/dist/migrations/sql/20220827191938_init.d.ts +4 -0
  31. package/dist/migrations/sql/20220827191938_init.d.ts.map +1 -0
  32. package/dist/migrations/sql/20220827191938_init.js +155 -0
  33. package/dist/migrations/sql/20220827191938_init.js.map +1 -0
  34. package/dist/migrations/sql/20221019173729_settings.d.ts +4 -0
  35. package/dist/migrations/sql/20221019173729_settings.d.ts.map +1 -0
  36. package/dist/migrations/sql/20221019173729_settings.js +61 -0
  37. package/dist/migrations/sql/20221019173729_settings.js.map +1 -0
  38. package/dist/migrations/sql/20221029103554_refactor_function_assignments.d.ts +4 -0
  39. package/dist/migrations/sql/20221029103554_refactor_function_assignments.d.ts.map +1 -0
  40. package/dist/migrations/sql/20221029103554_refactor_function_assignments.js +33 -0
  41. package/dist/migrations/sql/20221029103554_refactor_function_assignments.js.map +1 -0
  42. package/dist/migrations/sql/20221102190532_commands.d.ts +4 -0
  43. package/dist/migrations/sql/20221102190532_commands.d.ts.map +1 -0
  44. package/dist/migrations/sql/20221102190532_commands.js +58 -0
  45. package/dist/migrations/sql/20221102190532_commands.js.map +1 -0
  46. package/dist/migrations/sql/20221203135001-builtin_modules.d.ts +4 -0
  47. package/dist/migrations/sql/20221203135001-builtin_modules.d.ts.map +1 -0
  48. package/dist/migrations/sql/20221203135001-builtin_modules.js +44 -0
  49. package/dist/migrations/sql/20221203135001-builtin_modules.js.map +1 -0
  50. package/dist/migrations/sql/20230308183400-persistent-variables.d.ts +4 -0
  51. package/dist/migrations/sql/20230308183400-persistent-variables.d.ts.map +1 -0
  52. package/dist/migrations/sql/20230308183400-persistent-variables.js +63 -0
  53. package/dist/migrations/sql/20230308183400-persistent-variables.js.map +1 -0
  54. package/dist/migrations/sql/20230314183400-auth-ory.d.ts +4 -0
  55. package/dist/migrations/sql/20230314183400-auth-ory.d.ts.map +1 -0
  56. package/dist/migrations/sql/20230314183400-auth-ory.js +23 -0
  57. package/dist/migrations/sql/20230314183400-auth-ory.js.map +1 -0
  58. package/dist/migrations/sql/20230325156123_command-arguments.d.ts +4 -0
  59. package/dist/migrations/sql/20230325156123_command-arguments.d.ts.map +1 -0
  60. package/dist/migrations/sql/20230325156123_command-arguments.js +19 -0
  61. package/dist/migrations/sql/20230325156123_command-arguments.js.map +1 -0
  62. package/dist/migrations/sql/20230407132022-module-descriptions.d.ts +4 -0
  63. package/dist/migrations/sql/20230407132022-module-descriptions.d.ts.map +1 -0
  64. package/dist/migrations/sql/20230407132022-module-descriptions.js +11 -0
  65. package/dist/migrations/sql/20230407132022-module-descriptions.js.map +1 -0
  66. package/dist/migrations/sql/20230407143733-module-json-schema-config.d.ts +4 -0
  67. package/dist/migrations/sql/20230407143733-module-json-schema-config.d.ts.map +1 -0
  68. package/dist/migrations/sql/20230407143733-module-json-schema-config.js +14 -0
  69. package/dist/migrations/sql/20230407143733-module-json-schema-config.js.map +1 -0
  70. package/dist/migrations/sql/20230407173055-hook-regex-optional.d.ts +4 -0
  71. package/dist/migrations/sql/20230407173055-hook-regex-optional.d.ts.map +1 -0
  72. package/dist/migrations/sql/20230407173055-hook-regex-optional.js +11 -0
  73. package/dist/migrations/sql/20230407173055-hook-regex-optional.js.map +1 -0
  74. package/dist/migrations/sql/20230415154935-cronjob-configs.d.ts +4 -0
  75. package/dist/migrations/sql/20230415154935-cronjob-configs.d.ts.map +1 -0
  76. package/dist/migrations/sql/20230415154935-cronjob-configs.js +16 -0
  77. package/dist/migrations/sql/20230415154935-cronjob-configs.js.map +1 -0
  78. package/dist/migrations/sql/20230503132906-variables-extra-meta.d.ts +4 -0
  79. package/dist/migrations/sql/20230503132906-variables-extra-meta.d.ts.map +1 -0
  80. package/dist/migrations/sql/20230503132906-variables-extra-meta.js +26 -0
  81. package/dist/migrations/sql/20230503132906-variables-extra-meta.js.map +1 -0
  82. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.d.ts +4 -0
  83. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.d.ts.map +1 -0
  84. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.js +8 -0
  85. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.js.map +1 -0
  86. package/dist/migrations/sql/20230617081049-discordId-for-users.d.ts +4 -0
  87. package/dist/migrations/sql/20230617081049-discordId-for-users.d.ts.map +1 -0
  88. package/dist/migrations/sql/20230617081049-discordId-for-users.js +14 -0
  89. package/dist/migrations/sql/20230617081049-discordId-for-users.js.map +1 -0
  90. package/dist/migrations/sql/20230618053611-discord-funtionality.d.ts +4 -0
  91. package/dist/migrations/sql/20230618053611-discord-funtionality.d.ts.map +1 -0
  92. package/dist/migrations/sql/20230618053611-discord-funtionality.js +26 -0
  93. package/dist/migrations/sql/20230618053611-discord-funtionality.js.map +1 -0
  94. package/dist/migrations/sql/20230622192402-discord-hooks.d.ts +4 -0
  95. package/dist/migrations/sql/20230622192402-discord-hooks.d.ts.map +1 -0
  96. package/dist/migrations/sql/20230622192402-discord-hooks.js +14 -0
  97. package/dist/migrations/sql/20230622192402-discord-hooks.js.map +1 -0
  98. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.d.ts +4 -0
  99. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.d.ts.map +1 -0
  100. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.js +19 -0
  101. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.js.map +1 -0
  102. package/dist/migrations/sql/20230710174340-events.d.ts +4 -0
  103. package/dist/migrations/sql/20230710174340-events.d.ts.map +1 -0
  104. package/dist/migrations/sql/20230710174340-events.js +16 -0
  105. package/dist/migrations/sql/20230710174340-events.js.map +1 -0
  106. package/dist/migrations/sql/20230712061220-roles-permissions-extension.d.ts +4 -0
  107. package/dist/migrations/sql/20230712061220-roles-permissions-extension.d.ts.map +1 -0
  108. package/dist/migrations/sql/20230712061220-roles-permissions-extension.js +43 -0
  109. package/dist/migrations/sql/20230712061220-roles-permissions-extension.js.map +1 -0
  110. package/dist/migrations/sql/20230713184927-variables-modulescoped.d.ts +4 -0
  111. package/dist/migrations/sql/20230713184927-variables-modulescoped.d.ts.map +1 -0
  112. package/dist/migrations/sql/20230713184927-variables-modulescoped.js +27 -0
  113. package/dist/migrations/sql/20230713184927-variables-modulescoped.js.map +1 -0
  114. package/dist/migrations/sql/20230714045136-domain-index.d.ts +4 -0
  115. package/dist/migrations/sql/20230714045136-domain-index.d.ts.map +1 -0
  116. package/dist/migrations/sql/20230714045136-domain-index.js +37 -0
  117. package/dist/migrations/sql/20230714045136-domain-index.js.map +1 -0
  118. package/dist/migrations/sql/20230714045727-events-index.d.ts +4 -0
  119. package/dist/migrations/sql/20230714045727-events-index.d.ts.map +1 -0
  120. package/dist/migrations/sql/20230714045727-events-index.js +17 -0
  121. package/dist/migrations/sql/20230714045727-events-index.js.map +1 -0
  122. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.d.ts +4 -0
  123. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.d.ts.map +1 -0
  124. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.js +32 -0
  125. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.js.map +1 -0
  126. package/dist/migrations/sql/20230724062109-roles-constraints.d.ts +4 -0
  127. package/dist/migrations/sql/20230724062109-roles-constraints.d.ts.map +1 -0
  128. package/dist/migrations/sql/20230724062109-roles-constraints.js +14 -0
  129. package/dist/migrations/sql/20230724062109-roles-constraints.js.map +1 -0
  130. package/dist/migrations/sql/20230811095701-userId-on-events.d.ts +4 -0
  131. package/dist/migrations/sql/20230811095701-userId-on-events.d.ts.map +1 -0
  132. package/dist/migrations/sql/20230811095701-userId-on-events.js +12 -0
  133. package/dist/migrations/sql/20230811095701-userId-on-events.js.map +1 -0
  134. package/dist/migrations/sql/20230921123717-count-for-permissions.d.ts +4 -0
  135. package/dist/migrations/sql/20230921123717-count-for-permissions.d.ts.map +1 -0
  136. package/dist/migrations/sql/20230921123717-count-for-permissions.js +84 -0
  137. package/dist/migrations/sql/20230921123717-count-for-permissions.js.map +1 -0
  138. package/dist/migrations/sql/20231111102812-details-system-permissions.d.ts +37 -0
  139. package/dist/migrations/sql/20231111102812-details-system-permissions.d.ts.map +1 -0
  140. package/dist/migrations/sql/20231111102812-details-system-permissions.js +179 -0
  141. package/dist/migrations/sql/20231111102812-details-system-permissions.js.map +1 -0
  142. package/dist/migrations/sql/20231114151343-system-roles.d.ts +4 -0
  143. package/dist/migrations/sql/20231114151343-system-roles.d.ts.map +1 -0
  144. package/dist/migrations/sql/20231114151343-system-roles.js +41 -0
  145. package/dist/migrations/sql/20231114151343-system-roles.js.map +1 -0
  146. package/dist/migrations/sql/20231118082301-add-new-permissions.d.ts +37 -0
  147. package/dist/migrations/sql/20231118082301-add-new-permissions.d.ts.map +1 -0
  148. package/dist/migrations/sql/20231118082301-add-new-permissions.js +186 -0
  149. package/dist/migrations/sql/20231118082301-add-new-permissions.js.map +1 -0
  150. package/dist/migrations/sql/20231119115037-timedRoles.d.ts +4 -0
  151. package/dist/migrations/sql/20231119115037-timedRoles.d.ts.map +1 -0
  152. package/dist/migrations/sql/20231119115037-timedRoles.js +19 -0
  153. package/dist/migrations/sql/20231119115037-timedRoles.js.map +1 -0
  154. package/dist/migrations/sql/20231123150854-economy-base.d.ts +4 -0
  155. package/dist/migrations/sql/20231123150854-economy-base.d.ts.map +1 -0
  156. package/dist/migrations/sql/20231123150854-economy-base.js +13 -0
  157. package/dist/migrations/sql/20231123150854-economy-base.js.map +1 -0
  158. package/dist/migrations/sql/20231123171611-economy-settings.d.ts +4 -0
  159. package/dist/migrations/sql/20231123171611-economy-settings.d.ts.map +1 -0
  160. package/dist/migrations/sql/20231123171611-economy-settings.js +13 -0
  161. package/dist/migrations/sql/20231123171611-economy-settings.js.map +1 -0
  162. package/dist/migrations/sql/20231124140441-json-module-assignments.d.ts +4 -0
  163. package/dist/migrations/sql/20231124140441-json-module-assignments.d.ts.map +1 -0
  164. package/dist/migrations/sql/20231124140441-json-module-assignments.js +25 -0
  165. package/dist/migrations/sql/20231124140441-json-module-assignments.js.map +1 -0
  166. package/dist/migrations/sql/20231208114507-settings-refactor.d.ts +4 -0
  167. package/dist/migrations/sql/20231208114507-settings-refactor.d.ts.map +1 -0
  168. package/dist/migrations/sql/20231208114507-settings-refactor.js +95 -0
  169. package/dist/migrations/sql/20231208114507-settings-refactor.js.map +1 -0
  170. package/dist/migrations/sql/20231208171234-game-items.d.ts +4 -0
  171. package/dist/migrations/sql/20231208171234-game-items.d.ts.map +1 -0
  172. package/dist/migrations/sql/20231208171234-game-items.js +18 -0
  173. package/dist/migrations/sql/20231208171234-game-items.js.map +1 -0
  174. package/dist/migrations/sql/20231216100720-player-inventory.d.ts +4 -0
  175. package/dist/migrations/sql/20231216100720-player-inventory.d.ts.map +1 -0
  176. package/dist/migrations/sql/20231216100720-player-inventory.js +14 -0
  177. package/dist/migrations/sql/20231216100720-player-inventory.js.map +1 -0
  178. package/dist/migrations/sql/20231222180438-steam-data.d.ts +4 -0
  179. package/dist/migrations/sql/20231222180438-steam-data.d.ts.map +1 -0
  180. package/dist/migrations/sql/20231222180438-steam-data.js +25 -0
  181. package/dist/migrations/sql/20231222180438-steam-data.js.map +1 -0
  182. package/dist/migrations/sql/20231223132631-pog-online.d.ts +4 -0
  183. package/dist/migrations/sql/20231223132631-pog-online.d.ts.map +1 -0
  184. package/dist/migrations/sql/20231223132631-pog-online.js +11 -0
  185. package/dist/migrations/sql/20231223132631-pog-online.js.map +1 -0
  186. package/dist/migrations/sql/20231223212031-unique-index-item-def.d.ts +4 -0
  187. package/dist/migrations/sql/20231223212031-unique-index-item-def.d.ts.map +1 -0
  188. package/dist/migrations/sql/20231223212031-unique-index-item-def.js +24 -0
  189. package/dist/migrations/sql/20231223212031-unique-index-item-def.js.map +1 -0
  190. package/dist/migrations/sql/20231224135126-gameserver-online-status.d.ts +4 -0
  191. package/dist/migrations/sql/20231224135126-gameserver-online-status.d.ts.map +1 -0
  192. package/dist/migrations/sql/20231224135126-gameserver-online-status.js +11 -0
  193. package/dist/migrations/sql/20231224135126-gameserver-online-status.js.map +1 -0
  194. package/dist/migrations/sql/20231224155226-unique-pog.d.ts +4 -0
  195. package/dist/migrations/sql/20231224155226-unique-pog.d.ts.map +1 -0
  196. package/dist/migrations/sql/20231224155226-unique-pog.js +24 -0
  197. package/dist/migrations/sql/20231224155226-unique-pog.js.map +1 -0
  198. package/dist/migrations/sql/20231225140650-extra-ip-info.d.ts +4 -0
  199. package/dist/migrations/sql/20231225140650-extra-ip-info.d.ts.map +1 -0
  200. package/dist/migrations/sql/20231225140650-extra-ip-info.js +23 -0
  201. package/dist/migrations/sql/20231225140650-extra-ip-info.js.map +1 -0
  202. package/dist/migrations/sql/20231227144315-unique-constraints-player.d.ts +4 -0
  203. package/dist/migrations/sql/20231227144315-unique-constraints-player.d.ts.map +1 -0
  204. package/dist/migrations/sql/20231227144315-unique-constraints-player.js +67 -0
  205. package/dist/migrations/sql/20231227144315-unique-constraints-player.js.map +1 -0
  206. package/dist/migrations/sql/20231229144707-more-player-constraints.d.ts +4 -0
  207. package/dist/migrations/sql/20231229144707-more-player-constraints.d.ts.map +1 -0
  208. package/dist/migrations/sql/20231229144707-more-player-constraints.js +17 -0
  209. package/dist/migrations/sql/20231229144707-more-player-constraints.js.map +1 -0
  210. package/dist/migrations/sql/20240101162751-add-settings-constraint.d.ts +4 -0
  211. package/dist/migrations/sql/20240101162751-add-settings-constraint.d.ts.map +1 -0
  212. package/dist/migrations/sql/20240101162751-add-settings-constraint.js +34 -0
  213. package/dist/migrations/sql/20240101162751-add-settings-constraint.js.map +1 -0
  214. package/dist/migrations/sql/20240105130846-remove-some-module-perms.d.ts +4 -0
  215. package/dist/migrations/sql/20240105130846-remove-some-module-perms.d.ts.map +1 -0
  216. package/dist/migrations/sql/20240105130846-remove-some-module-perms.js +80 -0
  217. package/dist/migrations/sql/20240105130846-remove-some-module-perms.js.map +1 -0
  218. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.d.ts +4 -0
  219. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.d.ts.map +1 -0
  220. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.js +11 -0
  221. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.js.map +1 -0
  222. package/dist/migrations/sql/20240119152426-remove-hook-check.d.ts +4 -0
  223. package/dist/migrations/sql/20240119152426-remove-hook-check.d.ts.map +1 -0
  224. package/dist/migrations/sql/20240119152426-remove-hook-check.js +14 -0
  225. package/dist/migrations/sql/20240119152426-remove-hook-check.js.map +1 -0
  226. package/dist/migrations/sql/20240121142329-move-ip-history.d.ts +4 -0
  227. package/dist/migrations/sql/20240121142329-move-ip-history.d.ts.map +1 -0
  228. package/dist/migrations/sql/20240121142329-move-ip-history.js +44 -0
  229. package/dist/migrations/sql/20240121142329-move-ip-history.js.map +1 -0
  230. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.d.ts +4 -0
  231. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.d.ts.map +1 -0
  232. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.js +13 -0
  233. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.js.map +1 -0
  234. package/dist/migrations/sql/20240216120143-domain-state.d.ts +4 -0
  235. package/dist/migrations/sql/20240216120143-domain-state.d.ts.map +1 -0
  236. package/dist/migrations/sql/20240216120143-domain-state.js +11 -0
  237. package/dist/migrations/sql/20240216120143-domain-state.js.map +1 -0
  238. package/dist/migrations/sql/20240229141340-looser-fks-events.d.ts +4 -0
  239. package/dist/migrations/sql/20240229141340-looser-fks-events.d.ts.map +1 -0
  240. package/dist/migrations/sql/20240229141340-looser-fks-events.js +18 -0
  241. package/dist/migrations/sql/20240229141340-looser-fks-events.js.map +1 -0
  242. package/dist/migrations/sql/20240301063505-module-functions.d.ts +4 -0
  243. package/dist/migrations/sql/20240301063505-module-functions.d.ts.map +1 -0
  244. package/dist/migrations/sql/20240301063505-module-functions.js +14 -0
  245. package/dist/migrations/sql/20240301063505-module-functions.js.map +1 -0
  246. package/dist/migrations/sql/20240613175009-lastseen-users-pog.d.ts +4 -0
  247. package/dist/migrations/sql/20240613175009-lastseen-users-pog.d.ts.map +1 -0
  248. package/dist/migrations/sql/20240613175009-lastseen-users-pog.js +17 -0
  249. package/dist/migrations/sql/20240613175009-lastseen-users-pog.js.map +1 -0
  250. package/dist/migrations/sql/20240614143517-shop.d.ts +4 -0
  251. package/dist/migrations/sql/20240614143517-shop.d.ts.map +1 -0
  252. package/dist/migrations/sql/20240614143517-shop.js +29 -0
  253. package/dist/migrations/sql/20240614143517-shop.js.map +1 -0
  254. package/dist/migrations/sql/20240615145045-user-player-link.d.ts +4 -0
  255. package/dist/migrations/sql/20240615145045-user-player-link.d.ts.map +1 -0
  256. package/dist/migrations/sql/20240615145045-user-player-link.js +17 -0
  257. package/dist/migrations/sql/20240615145045-user-player-link.js.map +1 -0
  258. package/dist/migrations/sql/20240622132552-fix-ip-history-fk.d.ts +4 -0
  259. package/dist/migrations/sql/20240622132552-fix-ip-history-fk.d.ts.map +1 -0
  260. package/dist/migrations/sql/20240622132552-fix-ip-history-fk.js +11 -0
  261. package/dist/migrations/sql/20240622132552-fix-ip-history-fk.js.map +1 -0
  262. package/dist/migrations/sql/20240626200803-player-inventory-idx.d.ts +4 -0
  263. package/dist/migrations/sql/20240626200803-player-inventory-idx.d.ts.map +1 -0
  264. package/dist/migrations/sql/20240626200803-player-inventory-idx.js +11 -0
  265. package/dist/migrations/sql/20240626200803-player-inventory-idx.js.map +1 -0
  266. package/dist/migrations/sql/20240628174914-shop-orders.d.ts +4 -0
  267. package/dist/migrations/sql/20240628174914-shop-orders.d.ts.map +1 -0
  268. package/dist/migrations/sql/20240628174914-shop-orders.js +16 -0
  269. package/dist/migrations/sql/20240628174914-shop-orders.js.map +1 -0
  270. package/dist/migrations/sql/20240705140358-teleports-public-refactor.d.ts +4 -0
  271. package/dist/migrations/sql/20240705140358-teleports-public-refactor.d.ts.map +1 -0
  272. package/dist/migrations/sql/20240705140358-teleports-public-refactor.js +26 -0
  273. package/dist/migrations/sql/20240705140358-teleports-public-refactor.js.map +1 -0
  274. package/dist/migrations/sql/20240710181429-events-name-idx.d.ts +4 -0
  275. package/dist/migrations/sql/20240710181429-events-name-idx.d.ts.map +1 -0
  276. package/dist/migrations/sql/20240710181429-events-name-idx.js +11 -0
  277. package/dist/migrations/sql/20240710181429-events-name-idx.js.map +1 -0
  278. package/dist/migrations/sql/20240711181423-shop-orders-multi-listing.d.ts +4 -0
  279. package/dist/migrations/sql/20240711181423-shop-orders-multi-listing.d.ts.map +1 -0
  280. package/dist/migrations/sql/20240711181423-shop-orders-multi-listing.js +26 -0
  281. package/dist/migrations/sql/20240711181423-shop-orders-multi-listing.js.map +1 -0
  282. package/dist/migrations/sql/20240718121004-delete-read-gameservers-perm.d.ts +4 -0
  283. package/dist/migrations/sql/20240718121004-delete-read-gameservers-perm.d.ts.map +1 -0
  284. package/dist/migrations/sql/20240718121004-delete-read-gameservers-perm.js +7 -0
  285. package/dist/migrations/sql/20240718121004-delete-read-gameservers-perm.js.map +1 -0
  286. package/dist/migrations/sql/20240718150807-listing-deleted-and-draft-status.d.ts +4 -0
  287. package/dist/migrations/sql/20240718150807-listing-deleted-and-draft-status.d.ts.map +1 -0
  288. package/dist/migrations/sql/20240718150807-listing-deleted-and-draft-status.js +13 -0
  289. package/dist/migrations/sql/20240718150807-listing-deleted-and-draft-status.js.map +1 -0
  290. package/dist/migrations/sql/20240720135010-acting-user-and-module.d.ts +4 -0
  291. package/dist/migrations/sql/20240720135010-acting-user-and-module.d.ts.map +1 -0
  292. package/dist/migrations/sql/20240720135010-acting-user-and-module.js +19 -0
  293. package/dist/migrations/sql/20240720135010-acting-user-and-module.js.map +1 -0
  294. package/dist/migrations/sql/20240811061243-domain-rate-limit-setting.d.ts +4 -0
  295. package/dist/migrations/sql/20240811061243-domain-rate-limit-setting.d.ts.map +1 -0
  296. package/dist/migrations/sql/20240811061243-domain-rate-limit-setting.js +14 -0
  297. package/dist/migrations/sql/20240811061243-domain-rate-limit-setting.js.map +1 -0
  298. package/dist/migrations/sql/20240814133931-domain-ext-ref.d.ts +4 -0
  299. package/dist/migrations/sql/20240814133931-domain-ext-ref.d.ts.map +1 -0
  300. package/dist/migrations/sql/20240814133931-domain-ext-ref.js +16 -0
  301. package/dist/migrations/sql/20240814133931-domain-ext-ref.js.map +1 -0
  302. package/dist/migrations/sql/20240816171220-player-steam-level.d.ts +4 -0
  303. package/dist/migrations/sql/20240816171220-player-steam-level.d.ts.map +1 -0
  304. package/dist/migrations/sql/20240816171220-player-steam-level.js +11 -0
  305. package/dist/migrations/sql/20240816171220-player-steam-level.js.map +1 -0
  306. package/dist/migrations/sql/20240830081157-variable-expiry.d.ts +4 -0
  307. package/dist/migrations/sql/20240830081157-variable-expiry.d.ts.map +1 -0
  308. package/dist/migrations/sql/20240830081157-variable-expiry.js +11 -0
  309. package/dist/migrations/sql/20240830081157-variable-expiry.js.map +1 -0
  310. package/dist/migrations/sql/20240906125101-gameserver-enable.d.ts +4 -0
  311. package/dist/migrations/sql/20240906125101-gameserver-enable.d.ts.map +1 -0
  312. package/dist/migrations/sql/20240906125101-gameserver-enable.js +11 -0
  313. package/dist/migrations/sql/20240906125101-gameserver-enable.js.map +1 -0
  314. package/dist/migrations/sql/20240908185212-domain-name-not-unique.d.ts +4 -0
  315. package/dist/migrations/sql/20240908185212-domain-name-not-unique.d.ts.map +1 -0
  316. package/dist/migrations/sql/20240908185212-domain-name-not-unique.js +9 -0
  317. package/dist/migrations/sql/20240908185212-domain-name-not-unique.js.map +1 -0
  318. package/dist/migrations/sql/20240922110414-player-playtime.d.ts +4 -0
  319. package/dist/migrations/sql/20240922110414-player-playtime.d.ts.map +1 -0
  320. package/dist/migrations/sql/20240922110414-player-playtime.js +11 -0
  321. package/dist/migrations/sql/20240922110414-player-playtime.js.map +1 -0
  322. package/dist/migrations/sql/20240922133738-add-bans.d.ts +4 -0
  323. package/dist/migrations/sql/20240922133738-add-bans.d.ts.map +1 -0
  324. package/dist/migrations/sql/20240922133738-add-bans.js +20 -0
  325. package/dist/migrations/sql/20240922133738-add-bans.js.map +1 -0
  326. package/dist/migrations/sql/20240929090313-global-playtime.d.ts +4 -0
  327. package/dist/migrations/sql/20240929090313-global-playtime.d.ts.map +1 -0
  328. package/dist/migrations/sql/20240929090313-global-playtime.js +11 -0
  329. package/dist/migrations/sql/20240929090313-global-playtime.js.map +1 -0
  330. package/dist/migrations/sql/20240929143849-player-name-null.d.ts +4 -0
  331. package/dist/migrations/sql/20240929143849-player-name-null.d.ts.map +1 -0
  332. package/dist/migrations/sql/20240929143849-player-name-null.js +11 -0
  333. package/dist/migrations/sql/20240929143849-player-name-null.js.map +1 -0
  334. package/dist/migrations/sql/20241012183754-shop-orders-belong-to-player.d.ts +4 -0
  335. package/dist/migrations/sql/20241012183754-shop-orders-belong-to-player.d.ts.map +1 -0
  336. package/dist/migrations/sql/20241012183754-shop-orders-belong-to-player.js +38 -0
  337. package/dist/migrations/sql/20241012183754-shop-orders-belong-to-player.js.map +1 -0
  338. package/dist/migrations/sql/20241013173159-add-indexen-for-moduleId.d.ts +4 -0
  339. package/dist/migrations/sql/20241013173159-add-indexen-for-moduleId.d.ts.map +1 -0
  340. package/dist/migrations/sql/20241013173159-add-indexen-for-moduleId.js +52 -0
  341. package/dist/migrations/sql/20241013173159-add-indexen-for-moduleId.js.map +1 -0
  342. package/dist/migrations/sql/20241020133133-make-listing-name-required.d.ts +4 -0
  343. package/dist/migrations/sql/20241020133133-make-listing-name-required.d.ts.map +1 -0
  344. package/dist/migrations/sql/20241020133133-make-listing-name-required.js +13 -0
  345. package/dist/migrations/sql/20241020133133-make-listing-name-required.js.map +1 -0
  346. package/dist/migrations/sql/20241024164331-events-fk-fix.d.ts +4 -0
  347. package/dist/migrations/sql/20241024164331-events-fk-fix.d.ts.map +1 -0
  348. package/dist/migrations/sql/20241024164331-events-fk-fix.js +14 -0
  349. package/dist/migrations/sql/20241024164331-events-fk-fix.js.map +1 -0
  350. package/dist/migrations/sql/20241030130613-index-for-roleId.d.ts +4 -0
  351. package/dist/migrations/sql/20241030130613-index-for-roleId.d.ts.map +1 -0
  352. package/dist/migrations/sql/20241030130613-index-for-roleId.js +25 -0
  353. package/dist/migrations/sql/20241030130613-index-for-roleId.js.map +1 -0
  354. package/dist/migrations/sql/20241205201123-gameserver-deletedAt.d.ts +4 -0
  355. package/dist/migrations/sql/20241205201123-gameserver-deletedAt.d.ts.map +1 -0
  356. package/dist/migrations/sql/20241205201123-gameserver-deletedAt.js +11 -0
  357. package/dist/migrations/sql/20241205201123-gameserver-deletedAt.js.map +1 -0
  358. package/dist/migrations/sql/20241330200212-module-versions.d.ts +4 -0
  359. package/dist/migrations/sql/20241330200212-module-versions.d.ts.map +1 -0
  360. package/dist/migrations/sql/20241330200212-module-versions.js +329 -0
  361. package/dist/migrations/sql/20241330200212-module-versions.js.map +1 -0
  362. package/dist/migrations/sql/20250112102308-generic-gameserver.d.ts +4 -0
  363. package/dist/migrations/sql/20250112102308-generic-gameserver.d.ts.map +1 -0
  364. package/dist/migrations/sql/20250112102308-generic-gameserver.js +47 -0
  365. package/dist/migrations/sql/20250112102308-generic-gameserver.js.map +1 -0
  366. package/dist/migrations/sql/20250128200529-version-fixes.d.ts +4 -0
  367. package/dist/migrations/sql/20250128200529-version-fixes.d.ts.map +1 -0
  368. package/dist/migrations/sql/20250128200529-version-fixes.js +11 -0
  369. package/dist/migrations/sql/20250128200529-version-fixes.js.map +1 -0
  370. package/dist/migrations/sql/20250131183251-domain-settings.d.ts +4 -0
  371. package/dist/migrations/sql/20250131183251-domain-settings.d.ts.map +1 -0
  372. package/dist/migrations/sql/20250131183251-domain-settings.js +45 -0
  373. package/dist/migrations/sql/20250131183251-domain-settings.js.map +1 -0
  374. package/dist/migrations/sql/20250221130042-variable-length.d.ts +17 -0
  375. package/dist/migrations/sql/20250221130042-variable-length.d.ts.map +1 -0
  376. package/dist/migrations/sql/20250221130042-variable-length.js +30 -0
  377. package/dist/migrations/sql/20250221130042-variable-length.js.map +1 -0
  378. package/dist/migrations/sql/20250221193144-versions-perf-improvements.d.ts +10 -0
  379. package/dist/migrations/sql/20250221193144-versions-perf-improvements.d.ts.map +1 -0
  380. package/dist/migrations/sql/20250221193144-versions-perf-improvements.js +61 -0
  381. package/dist/migrations/sql/20250221193144-versions-perf-improvements.js.map +1 -0
  382. package/dist/migrations/sql/20250223143705-fix-ban-constraint.d.ts +4 -0
  383. package/dist/migrations/sql/20250223143705-fix-ban-constraint.d.ts.map +1 -0
  384. package/dist/migrations/sql/20250223143705-fix-ban-constraint.js +37 -0
  385. package/dist/migrations/sql/20250223143705-fix-ban-constraint.js.map +1 -0
  386. package/dist/migrations/sql/20250305210650-more-module-metadata.d.ts +4 -0
  387. package/dist/migrations/sql/20250305210650-more-module-metadata.d.ts.map +1 -0
  388. package/dist/migrations/sql/20250305210650-more-module-metadata.js +37 -0
  389. package/dist/migrations/sql/20250305210650-more-module-metadata.js.map +1 -0
  390. package/dist/migrations/sql/20250307162855-default-systemconfig.d.ts +4 -0
  391. package/dist/migrations/sql/20250307162855-default-systemconfig.d.ts.map +1 -0
  392. package/dist/migrations/sql/20250307162855-default-systemconfig.js +11 -0
  393. package/dist/migrations/sql/20250307162855-default-systemconfig.js.map +1 -0
  394. package/dist/migrations/sql/20250312184104-unique-external-reference.d.ts +4 -0
  395. package/dist/migrations/sql/20250312184104-unique-external-reference.d.ts.map +1 -0
  396. package/dist/migrations/sql/20250312184104-unique-external-reference.js +11 -0
  397. package/dist/migrations/sql/20250312184104-unique-external-reference.js.map +1 -0
  398. package/dist/migrations/sql/20250314185501-root-users-not-dashboard-user.d.ts +4 -0
  399. package/dist/migrations/sql/20250314185501-root-users-not-dashboard-user.d.ts.map +1 -0
  400. package/dist/migrations/sql/20250314185501-root-users-not-dashboard-user.js +15 -0
  401. package/dist/migrations/sql/20250314185501-root-users-not-dashboard-user.js.map +1 -0
  402. package/dist/migrations/sql/20250315191707-fix-constraint-module-items.d.ts +8 -0
  403. package/dist/migrations/sql/20250315191707-fix-constraint-module-items.d.ts.map +1 -0
  404. package/dist/migrations/sql/20250315191707-fix-constraint-module-items.js +17 -0
  405. package/dist/migrations/sql/20250315191707-fix-constraint-module-items.js.map +1 -0
  406. package/dist/migrations/sql/20250519185149-add-item-indexes.d.ts +13 -0
  407. package/dist/migrations/sql/20250519185149-add-item-indexes.d.ts.map +1 -0
  408. package/dist/migrations/sql/20250519185149-add-item-indexes.js +40 -0
  409. package/dist/migrations/sql/20250519185149-add-item-indexes.js.map +1 -0
  410. package/dist/migrations/sql/20250524054924-tracking.d.ts +4 -0
  411. package/dist/migrations/sql/20250524054924-tracking.d.ts.map +1 -0
  412. package/dist/migrations/sql/20250524054924-tracking.js +75 -0
  413. package/dist/migrations/sql/20250524054924-tracking.js.map +1 -0
  414. package/dist/migrations/sql/20250525135204-ban-reason-length.d.ts +4 -0
  415. package/dist/migrations/sql/20250525135204-ban-reason-length.d.ts.map +1 -0
  416. package/dist/migrations/sql/20250525135204-ban-reason-length.js +30 -0
  417. package/dist/migrations/sql/20250525135204-ban-reason-length.js.map +1 -0
  418. package/dist/migrations/sql/20250605201140-shop-permissions-missing.d.ts +4 -0
  419. package/dist/migrations/sql/20250605201140-shop-permissions-missing.d.ts.map +1 -0
  420. package/dist/migrations/sql/20250605201140-shop-permissions-missing.js +18 -0
  421. package/dist/migrations/sql/20250605201140-shop-permissions-missing.js.map +1 -0
  422. package/dist/migrations/sql/20250606060546-inventory-tracking.d.ts +4 -0
  423. package/dist/migrations/sql/20250606060546-inventory-tracking.d.ts.map +1 -0
  424. package/dist/migrations/sql/20250606060546-inventory-tracking.js +82 -0
  425. package/dist/migrations/sql/20250606060546-inventory-tracking.js.map +1 -0
  426. package/dist/migrations/sql/20250613110835-add-platform-id-to-players.d.ts +4 -0
  427. package/dist/migrations/sql/20250613110835-add-platform-id-to-players.d.ts.map +1 -0
  428. package/dist/migrations/sql/20250613110835-add-platform-id-to-players.js +43 -0
  429. package/dist/migrations/sql/20250613110835-add-platform-id-to-players.js.map +1 -0
  430. package/dist/migrations/sql/20250613203142-add-dimension-to-position.d.ts +4 -0
  431. package/dist/migrations/sql/20250613203142-add-dimension-to-position.d.ts.map +1 -0
  432. package/dist/migrations/sql/20250613203142-add-dimension-to-position.js +21 -0
  433. package/dist/migrations/sql/20250613203142-add-dimension-to-position.js.map +1 -0
  434. package/dist/migrations/sql/20250614113157-entities.d.ts +4 -0
  435. package/dist/migrations/sql/20250614113157-entities.d.ts.map +1 -0
  436. package/dist/migrations/sql/20250614113157-entities.js +36 -0
  437. package/dist/migrations/sql/20250614113157-entities.js.map +1 -0
  438. package/dist/migrations/sql/20250629090822-player-query-performance-indices.d.ts +4 -0
  439. package/dist/migrations/sql/20250629090822-player-query-performance-indices.d.ts.map +1 -0
  440. package/dist/migrations/sql/20250629090822-player-query-performance-indices.js +31 -0
  441. package/dist/migrations/sql/20250629090822-player-query-performance-indices.js.map +1 -0
  442. package/dist/migrations/sql/20250701-command-query-performance-indices.d.ts +4 -0
  443. package/dist/migrations/sql/20250701-command-query-performance-indices.d.ts.map +1 -0
  444. package/dist/migrations/sql/20250701-command-query-performance-indices.js +42 -0
  445. package/dist/migrations/sql/20250701-command-query-performance-indices.js.map +1 -0
  446. package/dist/migrations/sql/20250702181214-platform-id-and-pog-indexes.d.ts +4 -0
  447. package/dist/migrations/sql/20250702181214-platform-id-and-pog-indexes.d.ts.map +1 -0
  448. package/dist/migrations/sql/20250702181214-platform-id-and-pog-indexes.js +27 -0
  449. package/dist/migrations/sql/20250702181214-platform-id-and-pog-indexes.js.map +1 -0
  450. package/dist/migrations/sql/20250703175326-add-ip-to-player-on-gameserver.d.ts +4 -0
  451. package/dist/migrations/sql/20250703175326-add-ip-to-player-on-gameserver.d.ts.map +1 -0
  452. package/dist/migrations/sql/20250703175326-add-ip-to-player-on-gameserver.js +11 -0
  453. package/dist/migrations/sql/20250703175326-add-ip-to-player-on-gameserver.js.map +1 -0
  454. package/dist/migrations/sql/20250707205720-items-permissions-missing.d.ts +4 -0
  455. package/dist/migrations/sql/20250707205720-items-permissions-missing.d.ts.map +1 -0
  456. package/dist/migrations/sql/20250707205720-items-permissions-missing.js +18 -0
  457. package/dist/migrations/sql/20250707205720-items-permissions-missing.js.map +1 -0
  458. package/dist/migrations/sql/20250708095623-command-required-permissions.d.ts +4 -0
  459. package/dist/migrations/sql/20250708095623-command-required-permissions.d.ts.map +1 -0
  460. package/dist/migrations/sql/20250708095623-command-required-permissions.js +11 -0
  461. package/dist/migrations/sql/20250708095623-command-required-permissions.js.map +1 -0
  462. package/dist/migrations/sql/20250710131445-add-shop-categories.d.ts +4 -0
  463. package/dist/migrations/sql/20250710131445-add-shop-categories.d.ts.map +1 -0
  464. package/dist/migrations/sql/20250710131445-add-shop-categories.js +80 -0
  465. package/dist/migrations/sql/20250710131445-add-shop-categories.js.map +1 -0
  466. package/dist/migrations/sql/20250718-fix-player-inventory-history-pk.d.ts +4 -0
  467. package/dist/migrations/sql/20250718-fix-player-inventory-history-pk.d.ts.map +1 -0
  468. package/dist/migrations/sql/20250718-fix-player-inventory-history-pk.js +150 -0
  469. package/dist/migrations/sql/20250718-fix-player-inventory-history-pk.js.map +1 -0
  470. package/dist/migrations/sql/20250719160409-add-module-author-supportedgames.d.ts +8 -0
  471. package/dist/migrations/sql/20250719160409-add-module-author-supportedgames.d.ts.map +1 -0
  472. package/dist/migrations/sql/20250719160409-add-module-author-supportedgames.js +26 -0
  473. package/dist/migrations/sql/20250719160409-add-module-author-supportedgames.js.map +1 -0
  474. package/dist/migrations/sql/20250719175542-add-discord-permissions.d.ts +4 -0
  475. package/dist/migrations/sql/20250719175542-add-discord-permissions.d.ts.map +1 -0
  476. package/dist/migrations/sql/20250719175542-add-discord-permissions.js +18 -0
  477. package/dist/migrations/sql/20250719175542-add-discord-permissions.js.map +1 -0
  478. package/dist/migrations/sql/20250726000000-discord-role-sync.d.ts +4 -0
  479. package/dist/migrations/sql/20250726000000-discord-role-sync.d.ts.map +1 -0
  480. package/dist/migrations/sql/20250726000000-discord-role-sync.js +13 -0
  481. package/dist/migrations/sql/20250726000000-discord-role-sync.js.map +1 -0
  482. package/dist/migrations/sql/20250727092719-add-quality-to-inventory.d.ts +4 -0
  483. package/dist/migrations/sql/20250727092719-add-quality-to-inventory.d.ts.map +1 -0
  484. package/dist/migrations/sql/20250727092719-add-quality-to-inventory.js +11 -0
  485. package/dist/migrations/sql/20250727092719-add-quality-to-inventory.js.map +1 -0
  486. package/dist/migrations/sql/20250802124307-add-playeriphistory-composite-index.d.ts +4 -0
  487. package/dist/migrations/sql/20250802124307-add-playeriphistory-composite-index.d.ts.map +1 -0
  488. package/dist/migrations/sql/20250802124307-add-playeriphistory-composite-index.js +11 -0
  489. package/dist/migrations/sql/20250802124307-add-playeriphistory-composite-index.js.map +1 -0
  490. package/dist/migrations/sql/20250809122020-add-player-name-history.d.ts +4 -0
  491. package/dist/migrations/sql/20250809122020-add-player-name-history.d.ts.map +1 -0
  492. package/dist/migrations/sql/20250809122020-add-player-name-history.js +26 -0
  493. package/dist/migrations/sql/20250809122020-add-player-name-history.js.map +1 -0
  494. package/dist/migrations/sql/20250812163648-add-kpi-performance-indexes.d.ts +4 -0
  495. package/dist/migrations/sql/20250812163648-add-kpi-performance-indexes.d.ts.map +1 -0
  496. package/dist/migrations/sql/20250812163648-add-kpi-performance-indexes.js +17 -0
  497. package/dist/migrations/sql/20250812163648-add-kpi-performance-indexes.js.map +1 -0
  498. package/dist/migrations/sql/20250814163747-shop-order-cascade-delete.d.ts +4 -0
  499. package/dist/migrations/sql/20250814163747-shop-order-cascade-delete.d.ts.map +1 -0
  500. package/dist/migrations/sql/20250814163747-shop-order-cascade-delete.js +23 -0
  501. package/dist/migrations/sql/20250814163747-shop-order-cascade-delete.js.map +1 -0
  502. package/dist/migrations/sql/20250815120000-optimize-shop-analytics-indexes.d.ts +4 -0
  503. package/dist/migrations/sql/20250815120000-optimize-shop-analytics-indexes.d.ts.map +1 -0
  504. package/dist/migrations/sql/20250815120000-optimize-shop-analytics-indexes.js +40 -0
  505. package/dist/migrations/sql/20250815120000-optimize-shop-analytics-indexes.js.map +1 -0
  506. package/dist/migrations/sql/20251014120000-shop-order-auto-cancel-on-listing-delete.d.ts +4 -0
  507. package/dist/migrations/sql/20251014120000-shop-order-auto-cancel-on-listing-delete.d.ts.map +1 -0
  508. package/dist/migrations/sql/20251014120000-shop-order-auto-cancel-on-listing-delete.js +70 -0
  509. package/dist/migrations/sql/20251014120000-shop-order-auto-cancel-on-listing-delete.js.map +1 -0
  510. package/dist/migrations/sql/20251101000000-add-deleted-domain-state.d.ts +4 -0
  511. package/dist/migrations/sql/20251101000000-add-deleted-domain-state.d.ts.map +1 -0
  512. package/dist/migrations/sql/20251101000000-add-deleted-domain-state.js +33 -0
  513. package/dist/migrations/sql/20251101000000-add-deleted-domain-state.js.map +1 -0
  514. package/dist/migrations/sql/20251108214824-unique-player-per-server.d.ts +4 -0
  515. package/dist/migrations/sql/20251108214824-unique-player-per-server.d.ts.map +1 -0
  516. package/dist/migrations/sql/20251108214824-unique-player-per-server.js +27 -0
  517. package/dist/migrations/sql/20251108214824-unique-player-per-server.js.map +1 -0
  518. package/dist/migrations/util/alterEnum.d.ts +2 -0
  519. package/dist/migrations/util/alterEnum.d.ts.map +1 -0
  520. package/dist/migrations/util/alterEnum.js +8 -0
  521. package/dist/migrations/util/alterEnum.js.map +1 -0
  522. package/dist/queryBuilder.d.ts +43 -0
  523. package/dist/queryBuilder.d.ts.map +1 -0
  524. package/dist/queryBuilder.js +224 -0
  525. package/dist/queryBuilder.js.map +1 -0
  526. package/dist/redis.d.ts +21 -0
  527. package/dist/redis.d.ts.map +1 -0
  528. package/dist/redis.js +50 -0
  529. package/dist/redis.js.map +1 -0
  530. package/package.json +16 -0
  531. package/src/TakaroModel.ts +33 -0
  532. package/src/__tests__/encryption.integration.test.ts +57 -0
  533. package/src/__tests__/queryBuilder.integration.test.ts +208 -0
  534. package/src/config.ts +122 -0
  535. package/src/encryption.ts +26 -0
  536. package/src/errorTypeGuards.ts +11 -0
  537. package/src/knex.ts +59 -0
  538. package/src/main.ts +15 -0
  539. package/src/migrations/index.ts +70 -0
  540. package/src/migrations/sql/20220827191938_init.ts +183 -0
  541. package/src/migrations/sql/20221019173729_settings.ts +70 -0
  542. package/src/migrations/sql/20221029103554_refactor_function_assignments.ts +41 -0
  543. package/src/migrations/sql/20221102190532_commands.ts +66 -0
  544. package/src/migrations/sql/20221203135001-builtin_modules.ts +56 -0
  545. package/src/migrations/sql/20230308183400-persistent-variables.ts +74 -0
  546. package/src/migrations/sql/20230314183400-auth-ory.ts +27 -0
  547. package/src/migrations/sql/20230325156123_command-arguments.ts +24 -0
  548. package/src/migrations/sql/20230407132022-module-descriptions.ts +13 -0
  549. package/src/migrations/sql/20230407143733-module-json-schema-config.ts +16 -0
  550. package/src/migrations/sql/20230407173055-hook-regex-optional.ts +13 -0
  551. package/src/migrations/sql/20230415154935-cronjob-configs.ts +18 -0
  552. package/src/migrations/sql/20230503132906-variables-extra-meta.ts +31 -0
  553. package/src/migrations/sql/20230604130951-fix-hook-eventtypes.ts +12 -0
  554. package/src/migrations/sql/20230617081049-discordId-for-users.ts +16 -0
  555. package/src/migrations/sql/20230618053611-discord-funtionality.ts +34 -0
  556. package/src/migrations/sql/20230622192402-discord-hooks.ts +20 -0
  557. package/src/migrations/sql/20230707081218-playerOnGameServerExtension.ts +21 -0
  558. package/src/migrations/sql/20230710174340-events.ts +21 -0
  559. package/src/migrations/sql/20230712061220-roles-permissions-extension.ts +50 -0
  560. package/src/migrations/sql/20230713184927-variables-modulescoped.ts +32 -0
  561. package/src/migrations/sql/20230714045136-domain-index.ts +40 -0
  562. package/src/migrations/sql/20230714045727-events-index.ts +19 -0
  563. package/src/migrations/sql/20230715102519-module-permissions-extra-fields.ts +38 -0
  564. package/src/migrations/sql/20230724062109-roles-constraints.ts +16 -0
  565. package/src/migrations/sql/20230811095701-userId-on-events.ts +14 -0
  566. package/src/migrations/sql/20230921123717-count-for-permissions.ts +101 -0
  567. package/src/migrations/sql/20231111102812-details-system-permissions.ts +192 -0
  568. package/src/migrations/sql/20231114151343-system-roles.ts +46 -0
  569. package/src/migrations/sql/20231118082301-add-new-permissions.ts +200 -0
  570. package/src/migrations/sql/20231119115037-timedRoles.ts +23 -0
  571. package/src/migrations/sql/20231123150854-economy-base.ts +15 -0
  572. package/src/migrations/sql/20231123171611-economy-settings.ts +15 -0
  573. package/src/migrations/sql/20231124140441-json-module-assignments.ts +29 -0
  574. package/src/migrations/sql/20231208114507-settings-refactor.ts +114 -0
  575. package/src/migrations/sql/20231208171234-game-items.ts +20 -0
  576. package/src/migrations/sql/20231216100720-player-inventory.ts +16 -0
  577. package/src/migrations/sql/20231222180438-steam-data.ts +27 -0
  578. package/src/migrations/sql/20231223132631-pog-online.ts +13 -0
  579. package/src/migrations/sql/20231223212031-unique-index-item-def.ts +27 -0
  580. package/src/migrations/sql/20231224135126-gameserver-online-status.ts +13 -0
  581. package/src/migrations/sql/20231224155226-unique-pog.ts +27 -0
  582. package/src/migrations/sql/20231225140650-extra-ip-info.ts +27 -0
  583. package/src/migrations/sql/20231227144315-unique-constraints-player.ts +74 -0
  584. package/src/migrations/sql/20231229144707-more-player-constraints.ts +20 -0
  585. package/src/migrations/sql/20240101162751-add-settings-constraint.ts +39 -0
  586. package/src/migrations/sql/20240105130846-remove-some-module-perms.ts +104 -0
  587. package/src/migrations/sql/20240116141936-add-ui-schema-to-module.ts +13 -0
  588. package/src/migrations/sql/20240119152426-remove-hook-check.ts +18 -0
  589. package/src/migrations/sql/20240121142329-move-ip-history.ts +53 -0
  590. package/src/migrations/sql/20240202101208-rename-economy-to-economyUtils.ts +15 -0
  591. package/src/migrations/sql/20240216120143-domain-state.ts +13 -0
  592. package/src/migrations/sql/20240229141340-looser-fks-events.ts +20 -0
  593. package/src/migrations/sql/20240301063505-module-functions.ts +17 -0
  594. package/src/migrations/sql/20240613175009-lastseen-users-pog.ts +21 -0
  595. package/src/migrations/sql/20240614143517-shop.ts +39 -0
  596. package/src/migrations/sql/20240615145045-user-player-link.ts +20 -0
  597. package/src/migrations/sql/20240622132552-fix-ip-history-fk.ts +13 -0
  598. package/src/migrations/sql/20240626200803-player-inventory-idx.ts +13 -0
  599. package/src/migrations/sql/20240628174914-shop-orders.ts +20 -0
  600. package/src/migrations/sql/20240705140358-teleports-public-refactor.ts +31 -0
  601. package/src/migrations/sql/20240710181429-events-name-idx.ts +13 -0
  602. package/src/migrations/sql/20240711181423-shop-orders-multi-listing.ts +34 -0
  603. package/src/migrations/sql/20240718121004-delete-read-gameservers-perm.ts +9 -0
  604. package/src/migrations/sql/20240718150807-listing-deleted-and-draft-status.ts +15 -0
  605. package/src/migrations/sql/20240720135010-acting-user-and-module.ts +24 -0
  606. package/src/migrations/sql/20240811061243-domain-rate-limit-setting.ts +16 -0
  607. package/src/migrations/sql/20240814133931-domain-ext-ref.ts +24 -0
  608. package/src/migrations/sql/20240816171220-player-steam-level.ts +14 -0
  609. package/src/migrations/sql/20240830081157-variable-expiry.ts +14 -0
  610. package/src/migrations/sql/20240906125101-gameserver-enable.ts +14 -0
  611. package/src/migrations/sql/20240908185212-domain-name-not-unique.ts +12 -0
  612. package/src/migrations/sql/20240922110414-player-playtime.ts +13 -0
  613. package/src/migrations/sql/20240922133738-add-bans.ts +25 -0
  614. package/src/migrations/sql/20240929090313-global-playtime.ts +13 -0
  615. package/src/migrations/sql/20240929143849-player-name-null.ts +13 -0
  616. package/src/migrations/sql/20241012183754-shop-orders-belong-to-player.ts +44 -0
  617. package/src/migrations/sql/20241013173159-add-indexen-for-moduleId.ts +57 -0
  618. package/src/migrations/sql/20241020133133-make-listing-name-required.ts +16 -0
  619. package/src/migrations/sql/20241024164331-events-fk-fix.ts +16 -0
  620. package/src/migrations/sql/20241030130613-index-for-roleId.ts +31 -0
  621. package/src/migrations/sql/20241205201123-gameserver-deletedAt.ts +13 -0
  622. package/src/migrations/sql/20241330200212-module-versions.ts +384 -0
  623. package/src/migrations/sql/20250112102308-generic-gameserver.ts +55 -0
  624. package/src/migrations/sql/20250128200529-version-fixes.ts +13 -0
  625. package/src/migrations/sql/20250131183251-domain-settings.ts +55 -0
  626. package/src/migrations/sql/20250221130042-variable-length.ts +35 -0
  627. package/src/migrations/sql/20250221193144-versions-perf-improvements.ts +79 -0
  628. package/src/migrations/sql/20250223143705-fix-ban-constraint.ts +43 -0
  629. package/src/migrations/sql/20250305210650-more-module-metadata.ts +49 -0
  630. package/src/migrations/sql/20250307162855-default-systemconfig.ts +13 -0
  631. package/src/migrations/sql/20250312184104-unique-external-reference.ts +13 -0
  632. package/src/migrations/sql/20250314185501-root-users-not-dashboard-user.ts +17 -0
  633. package/src/migrations/sql/20250315191707-fix-constraint-module-items.ts +26 -0
  634. package/src/migrations/sql/20250519185149-add-item-indexes.ts +42 -0
  635. package/src/migrations/sql/20250524054924-tracking.ts +79 -0
  636. package/src/migrations/sql/20250525135204-ban-reason-length.ts +35 -0
  637. package/src/migrations/sql/20250605201140-shop-permissions-missing.ts +20 -0
  638. package/src/migrations/sql/20250606060546-inventory-tracking.ts +96 -0
  639. package/src/migrations/sql/20250613110835-add-platform-id-to-players.ts +51 -0
  640. package/src/migrations/sql/20250613203142-add-dimension-to-position.ts +25 -0
  641. package/src/migrations/sql/20250614113157-entities.ts +40 -0
  642. package/src/migrations/sql/20250629090822-player-query-performance-indices.ts +38 -0
  643. package/src/migrations/sql/20250701-command-query-performance-indices.ts +53 -0
  644. package/src/migrations/sql/20250702181214-platform-id-and-pog-indexes.ts +31 -0
  645. package/src/migrations/sql/20250703175326-add-ip-to-player-on-gameserver.ts +13 -0
  646. package/src/migrations/sql/20250707205720-items-permissions-missing.ts +20 -0
  647. package/src/migrations/sql/20250708095623-command-required-permissions.ts +13 -0
  648. package/src/migrations/sql/20250710131445-add-shop-categories.ts +98 -0
  649. package/src/migrations/sql/20250718-fix-player-inventory-history-pk.ts +161 -0
  650. package/src/migrations/sql/20250719160409-add-module-author-supportedgames.ts +31 -0
  651. package/src/migrations/sql/20250719175542-add-discord-permissions.ts +20 -0
  652. package/src/migrations/sql/20250726000000-discord-role-sync.ts +15 -0
  653. package/src/migrations/sql/20250727092719-add-quality-to-inventory.ts +13 -0
  654. package/src/migrations/sql/20250802124307-add-playeriphistory-composite-index.ts +13 -0
  655. package/src/migrations/sql/20250809122020-add-player-name-history.ts +31 -0
  656. package/src/migrations/sql/20250812163648-add-kpi-performance-indexes.ts +20 -0
  657. package/src/migrations/sql/20250814163747-shop-order-cascade-delete.ts +27 -0
  658. package/src/migrations/sql/20250815120000-optimize-shop-analytics-indexes.ts +46 -0
  659. package/src/migrations/sql/20251014120000-shop-order-auto-cancel-on-listing-delete.ts +75 -0
  660. package/src/migrations/sql/20251101000000-add-deleted-domain-state.ts +43 -0
  661. package/src/migrations/sql/20251108214824-unique-player-per-server.ts +30 -0
  662. package/src/migrations/util/alterEnum.ts +9 -0
  663. package/src/queryBuilder.ts +263 -0
  664. package/src/redis.ts +59 -0
  665. package/tsconfig.build.json +9 -0
  666. package/tsconfig.json +8 -0
  667. package/typedoc.json +3 -0
@@ -0,0 +1,31 @@
1
+ import { Knex } from 'knex';
2
+
3
+ /**
4
+ * This migration adds author and supportedGames fields to the modules table
5
+ * @param knex
6
+ */
7
+
8
+ export async function up(knex: Knex): Promise<void> {
9
+ // Add author column
10
+ await knex.schema.alterTable('modules', (table) => {
11
+ table.string('author').nullable();
12
+ });
13
+
14
+ // Add supportedGames column as JSON array
15
+ await knex.schema.alterTable('modules', (table) => {
16
+ table.json('supportedGames').defaultTo('["all"]');
17
+ });
18
+
19
+ // Update existing modules to have default values
20
+ await knex('modules').update({
21
+ author: 'Unknown',
22
+ supportedGames: JSON.stringify(['all']),
23
+ });
24
+ }
25
+
26
+ export async function down(knex: Knex): Promise<void> {
27
+ await knex.schema.alterTable('modules', (table) => {
28
+ table.dropColumn('author');
29
+ table.dropColumn('supportedGames');
30
+ });
31
+ }
@@ -0,0 +1,20 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex('permission').insert([
5
+ {
6
+ permission: 'VIEW_DISCORD_INFO',
7
+ description: 'Can view Discord guild information including channels and roles',
8
+ friendlyName: 'View Discord Info',
9
+ },
10
+ {
11
+ permission: 'SEND_DISCORD_MESSAGE',
12
+ description: 'Can send messages to Discord channels',
13
+ friendlyName: 'Send Discord Messages',
14
+ },
15
+ ]);
16
+ }
17
+
18
+ export async function down(knex: Knex): Promise<void> {
19
+ await knex('permission').whereIn('permission', ['VIEW_DISCORD_INFO', 'SEND_DISCORD_MESSAGE']).del();
20
+ }
@@ -0,0 +1,15 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // Add linkedDiscordRoleId to roles table
5
+ await knex.schema.alterTable('roles', (table) => {
6
+ table.string('linkedDiscordRoleId').nullable();
7
+ table.index('linkedDiscordRoleId');
8
+ });
9
+ }
10
+
11
+ export async function down(knex: Knex): Promise<void> {
12
+ await knex.schema.alterTable('roles', (table) => {
13
+ table.dropColumn('linkedDiscordRoleId');
14
+ });
15
+ }
@@ -0,0 +1,13 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('playerInventoryHistory', (table) => {
5
+ table.string('quality').nullable();
6
+ });
7
+ }
8
+
9
+ export async function down(knex: Knex): Promise<void> {
10
+ await knex.schema.alterTable('playerInventoryHistory', (table) => {
11
+ table.dropColumn('quality');
12
+ });
13
+ }
@@ -0,0 +1,13 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('playerIpHistory', (table) => {
5
+ table.index(['domain', 'playerId', 'createdAt'], 'idx_playeriphistory_domain_playerid_createdat');
6
+ });
7
+ }
8
+
9
+ export async function down(knex: Knex): Promise<void> {
10
+ await knex.schema.alterTable('playerIpHistory', (table) => {
11
+ table.dropIndex([], 'idx_playeriphistory_domain_playerid_createdat');
12
+ });
13
+ }
@@ -0,0 +1,31 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable('playerNameHistory', (table) => {
5
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
6
+ table.timestamps(true, true, true);
7
+ table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
8
+ table.uuid('playerId').references('players.id').onDelete('CASCADE').notNullable();
9
+ table.uuid('gameServerId').references('gameservers.id').onDelete('SET NULL').nullable();
10
+ table.string('name').notNullable();
11
+
12
+ // Indexes for performance
13
+ table.index(['playerId', 'createdAt'], 'idx_player_name_history_player_created');
14
+ table.index('name', 'idx_player_name_history_name');
15
+ });
16
+ }
17
+
18
+ export async function down(knex: Knex): Promise<void> {
19
+ // Update players table with latest name from history before dropping
20
+ const latestNames = await knex('playerNameHistory')
21
+ .select('playerId', 'name')
22
+ .distinctOn('playerId')
23
+ .orderBy('playerId')
24
+ .orderBy('createdAt', 'desc');
25
+
26
+ for (const record of latestNames) {
27
+ await knex('players').where('id', record.playerId).update({ name: record.name });
28
+ }
29
+
30
+ await knex.schema.dropTable('playerNameHistory');
31
+ }
@@ -0,0 +1,20 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // Add index for playerOnGameServer activity queries (DAU/WAU/MAU)
5
+ await knex.schema.raw(`
6
+ CREATE INDEX IF NOT EXISTS idx_pog_domain_lastseen
7
+ ON "playerOnGameServer"(domain, "lastSeen" DESC)
8
+ `);
9
+
10
+ // Add index for user activity queries
11
+ await knex.schema.raw(`
12
+ CREATE INDEX IF NOT EXISTS idx_users_domain_lastseen
13
+ ON users(domain, "lastSeen" DESC)
14
+ `);
15
+ }
16
+
17
+ export async function down(knex: Knex): Promise<void> {
18
+ await knex.schema.raw('DROP INDEX IF EXISTS idx_pog_domain_lastseen');
19
+ await knex.schema.raw('DROP INDEX IF EXISTS idx_users_domain_lastseen');
20
+ }
@@ -0,0 +1,27 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.raw(`
5
+ ALTER TABLE "shopOrder"
6
+ DROP CONSTRAINT IF EXISTS shoporder_playerid_foreign;
7
+ `);
8
+
9
+ await knex.raw(`
10
+ ALTER TABLE "shopOrder"
11
+ ADD CONSTRAINT shoporder_playerid_foreign
12
+ FOREIGN KEY ("playerId") REFERENCES players(id) ON DELETE CASCADE;
13
+ `);
14
+ }
15
+
16
+ export async function down(knex: Knex): Promise<void> {
17
+ await knex.raw(`
18
+ ALTER TABLE "shopOrder"
19
+ DROP CONSTRAINT IF EXISTS shoporder_playerid_foreign;
20
+ `);
21
+
22
+ await knex.raw(`
23
+ ALTER TABLE "shopOrder"
24
+ ADD CONSTRAINT shoporder_playerid_foreign
25
+ FOREIGN KEY ("playerId") REFERENCES players(id) ON DELETE NO ACTION;
26
+ `);
27
+ }
@@ -0,0 +1,46 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // Index for filtering orders by domain, status, and date range
5
+ await knex.raw(`
6
+ CREATE INDEX IF NOT EXISTS idx_shoporder_analytics
7
+ ON "shopOrder" (domain, status, "createdAt")
8
+ WHERE status IN ('COMPLETED', 'PAID')
9
+ `);
10
+
11
+ // Index for joining orders with listings and filtering by date
12
+ await knex.raw(`
13
+ CREATE INDEX IF NOT EXISTS idx_shoporder_listing_date
14
+ ON "shopOrder" ("listingId", "createdAt")
15
+ WHERE status IN ('COMPLETED', 'PAID')
16
+ `);
17
+
18
+ // Index for customer analytics (unique players)
19
+ await knex.raw(`
20
+ CREATE INDEX IF NOT EXISTS idx_shoporder_player_analytics
21
+ ON "shopOrder" (domain, "playerId", "createdAt")
22
+ WHERE status IN ('COMPLETED', 'PAID')
23
+ `);
24
+
25
+ // Composite index for shop listings to speed up joins
26
+ await knex.raw(`
27
+ CREATE INDEX IF NOT EXISTS idx_shoplisting_composite
28
+ ON "shopListing" (id, "gameServerId", price)
29
+ WHERE "deletedAt" IS NULL AND draft = false
30
+ `);
31
+
32
+ // Index for filtering listings by game server and active status
33
+ await knex.raw(`
34
+ CREATE INDEX IF NOT EXISTS idx_shoplisting_active
35
+ ON "shopListing" (domain, "gameServerId")
36
+ WHERE "deletedAt" IS NULL AND draft = false
37
+ `);
38
+ }
39
+
40
+ export async function down(knex: Knex): Promise<void> {
41
+ await knex.raw('DROP INDEX IF EXISTS idx_shoporder_analytics');
42
+ await knex.raw('DROP INDEX IF EXISTS idx_shoporder_listing_date');
43
+ await knex.raw('DROP INDEX IF EXISTS idx_shoporder_player_analytics');
44
+ await knex.raw('DROP INDEX IF EXISTS idx_shoplisting_composite');
45
+ await knex.raw('DROP INDEX IF EXISTS idx_shoplisting_active');
46
+ }
@@ -0,0 +1,75 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // Step 1: Create trigger function that auto-cancels orders when listing is deleted
5
+ await knex.raw(`
6
+ CREATE OR REPLACE FUNCTION cancel_orders_on_listing_delete()
7
+ RETURNS TRIGGER AS $$
8
+ BEGIN
9
+ -- Only proceed if deletedAt changed from NULL to a value (soft-delete)
10
+ IF OLD."deletedAt" IS NULL AND NEW."deletedAt" IS NOT NULL THEN
11
+ -- Cancel all PAID orders for this listing and refund currency
12
+ -- Aggregate refunds by player to handle multiple orders correctly
13
+ WITH orders_to_cancel AS (
14
+ SELECT
15
+ so.id AS order_id,
16
+ so."playerId",
17
+ NEW."gameServerId",
18
+ NEW.domain AS domain,
19
+ NEW.price * so.amount AS refund_amount
20
+ FROM "shopOrder" so
21
+ WHERE so."listingId" = NEW.id
22
+ AND so.status = 'PAID'
23
+ ),
24
+ aggregated_refunds AS (
25
+ SELECT
26
+ "playerId",
27
+ "gameServerId",
28
+ domain,
29
+ SUM(refund_amount) AS total_refund
30
+ FROM orders_to_cancel
31
+ GROUP BY "playerId", "gameServerId", domain
32
+ )
33
+ -- Update playerOnGameServer currency with aggregated total
34
+ UPDATE "playerOnGameServer" pogs
35
+ SET currency = pogs.currency + ar.total_refund
36
+ FROM aggregated_refunds ar
37
+ WHERE pogs."playerId" = ar."playerId"
38
+ AND pogs."gameServerId" = ar."gameServerId"
39
+ AND pogs.domain = ar.domain;
40
+
41
+ -- Update order status to CANCELED
42
+ UPDATE "shopOrder"
43
+ SET status = 'CANCELED'
44
+ WHERE "listingId" = NEW.id
45
+ AND status = 'PAID';
46
+ END IF;
47
+
48
+ RETURN NEW;
49
+ END;
50
+ $$ LANGUAGE plpgsql;
51
+ `);
52
+
53
+ // Step 2: Create trigger on shopListing table
54
+ await knex.raw(`
55
+ CREATE TRIGGER auto_cancel_orders_on_listing_delete
56
+ AFTER UPDATE ON "shopListing"
57
+ FOR EACH ROW
58
+ WHEN (OLD."deletedAt" IS NULL AND NEW."deletedAt" IS NOT NULL)
59
+ EXECUTE FUNCTION cancel_orders_on_listing_delete();
60
+ `);
61
+ }
62
+
63
+ export async function down(knex: Knex): Promise<void> {
64
+ // Drop trigger
65
+ await knex.raw(`
66
+ DROP TRIGGER IF EXISTS auto_cancel_orders_on_listing_delete ON "shopListing";
67
+ `);
68
+
69
+ // Drop function
70
+ await knex.raw(`
71
+ DROP FUNCTION IF EXISTS cancel_orders_on_listing_delete();
72
+ `);
73
+
74
+ // Note: We don't reverse the data cleanup since those were genuinely bad orders
75
+ }
@@ -0,0 +1,43 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // PostgreSQL requires a multi-step process to update enum constraints
5
+ // 1. Add a temporary column with the new enum values
6
+ // 2. Copy data from old column to new column
7
+ // 3. Drop old column
8
+ // 4. Rename new column to old column name
9
+
10
+ await knex.schema.alterTable('domains', (table) => {
11
+ table.enum('state_new', ['ACTIVE', 'DISABLED', 'MAINTENANCE', 'DELETED']).notNullable().defaultTo('ACTIVE');
12
+ });
13
+
14
+ await knex.raw(`UPDATE domains SET state_new = state::text::varchar`);
15
+
16
+ await knex.schema.alterTable('domains', (table) => {
17
+ table.dropColumn('state');
18
+ });
19
+
20
+ await knex.schema.alterTable('domains', (table) => {
21
+ table.renameColumn('state_new', 'state');
22
+ });
23
+ }
24
+
25
+ export async function down(knex: Knex): Promise<void> {
26
+ // Revert to the original enum values (removing DELETED)
27
+ // First, ensure no domains are in DELETED state (or this will fail)
28
+ await knex.raw(`DELETE FROM domains WHERE state = 'DELETED'`);
29
+
30
+ await knex.schema.alterTable('domains', (table) => {
31
+ table.enum('state_new', ['ACTIVE', 'DISABLED', 'MAINTENANCE']).notNullable().defaultTo('ACTIVE');
32
+ });
33
+
34
+ await knex.raw(`UPDATE domains SET state_new = state::text::varchar`);
35
+
36
+ await knex.schema.alterTable('domains', (table) => {
37
+ table.dropColumn('state');
38
+ });
39
+
40
+ await knex.schema.alterTable('domains', (table) => {
41
+ table.renameColumn('state_new', 'state');
42
+ });
43
+ }
@@ -0,0 +1,30 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // Delete duplicate rows where the same playerId has multiple different gameIds on the same server
5
+ // This violates the business rule that each player should have exactly one POG per server
6
+ // Keep the oldest POG (lowest id) for each (playerId, gameServerId) pair
7
+ await knex.raw(`
8
+ DELETE FROM "playerOnGameServer"
9
+ WHERE id IN (
10
+ SELECT id
11
+ FROM (
12
+ SELECT id,
13
+ ROW_NUMBER() OVER (PARTITION BY "playerId", "gameServerId" ORDER BY id) as rnk
14
+ FROM "playerOnGameServer"
15
+ ) t
16
+ WHERE t.rnk > 1
17
+ )
18
+ `);
19
+
20
+ // Add unique constraint to prevent one player from having multiple POGs on the same server
21
+ await knex.schema.alterTable('playerOnGameServer', (table) => {
22
+ table.unique(['playerId', 'gameServerId']);
23
+ });
24
+ }
25
+
26
+ export async function down(knex: Knex): Promise<void> {
27
+ await knex.schema.alterTable('playerOnGameServer', (table) => {
28
+ table.dropUnique(['playerId', 'gameServerId']);
29
+ });
30
+ }
@@ -0,0 +1,9 @@
1
+ export function formatAlterTableEnumSql(tableName: string, columnName: string, enums: string[]) {
2
+ const constraintName = `${tableName}_${columnName}_check`;
3
+ return [
4
+ `ALTER TABLE "${tableName}" DROP CONSTRAINT IF EXISTS "${constraintName}";`,
5
+ `ALTER TABLE "${tableName}" ADD CONSTRAINT "${constraintName}" CHECK ("${columnName}" = ANY (ARRAY['${enums.join(
6
+ "'::text, '",
7
+ )}'::text]));`,
8
+ ].join('\n');
9
+ }
@@ -0,0 +1,263 @@
1
+ import { IsEnum, IsNumber, IsOptional, IsString } from 'class-validator';
2
+ import { errors } from '@takaro/util';
3
+ import {
4
+ QueryBuilder as ObjectionQueryBuilder,
5
+ Model as ObjectionModel,
6
+ Page,
7
+ AnyQueryBuilder,
8
+ Expression,
9
+ PrimitiveValue,
10
+ } from 'objection';
11
+ import { getKnex, isDbAvailable } from './knex.js';
12
+
13
+ export class ITakaroQuery<T> {
14
+ @IsOptional()
15
+ filters?: {
16
+ [key: string]: unknown[] | string[] | boolean | null | undefined;
17
+ };
18
+
19
+ @IsOptional()
20
+ search?: {
21
+ [key: string]: unknown[] | string[] | boolean | null | undefined;
22
+ };
23
+
24
+ @IsOptional()
25
+ greaterThan?: {
26
+ [key in keyof T]?: unknown;
27
+ };
28
+
29
+ @IsOptional()
30
+ lessThan?: {
31
+ [key in keyof T]?: unknown;
32
+ };
33
+
34
+ @IsOptional()
35
+ @IsNumber()
36
+ page?: number;
37
+
38
+ @IsOptional()
39
+ @IsNumber()
40
+ limit?: number;
41
+
42
+ @IsOptional()
43
+ @IsString()
44
+ sortBy?: string;
45
+
46
+ @IsOptional()
47
+ @IsString()
48
+ @IsEnum(['asc', 'desc'])
49
+ sortDirection?: SortDirection;
50
+
51
+ @IsOptional()
52
+ @IsString({ each: true })
53
+ extend?: string[];
54
+ }
55
+
56
+ export enum SortDirection {
57
+ asc = 'asc',
58
+ desc = 'desc',
59
+ }
60
+
61
+ const modelColumns = new Map<string, string[]>();
62
+
63
+ export async function populateModelColumns() {
64
+ if (await isDbAvailable()) {
65
+ const knex = await getKnex();
66
+ // Find all tables
67
+ const tables = await knex.raw(
68
+ "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_type = 'BASE TABLE'",
69
+ );
70
+ // For each table, store the columns
71
+ for (const table of tables.rows) {
72
+ const tableName = table.table_name;
73
+ const columns = await knex(tableName).columnInfo();
74
+ modelColumns.set(tableName, Object.keys(columns));
75
+ }
76
+ }
77
+ }
78
+
79
+ await populateModelColumns();
80
+
81
+ export class QueryBuilder<Model extends ObjectionModel, OutputDTO> {
82
+ private query: ITakaroQuery<OutputDTO>;
83
+ constructor(rawQuery: ITakaroQuery<OutputDTO> = new ITakaroQuery()) {
84
+ this.query = JSON.parse(JSON.stringify(rawQuery));
85
+ this.validateArrayFilters();
86
+ }
87
+
88
+ private validateArrayFilters() {
89
+ // Validate filters
90
+ if (this.query.filters) {
91
+ for (const [key, value] of Object.entries(this.query.filters)) {
92
+ if (value !== null && value !== undefined && !Array.isArray(value) && typeof value !== 'boolean') {
93
+ throw new errors.BadRequestError(
94
+ `Filter values must be arrays or boolean. Found invalid value for '${key}': '${value}'. Example: { ${key}: ["${value}"] }`,
95
+ );
96
+ }
97
+ }
98
+ }
99
+
100
+ // Validate search
101
+ if (this.query.search) {
102
+ for (const [key, value] of Object.entries(this.query.search)) {
103
+ if (value !== null && value !== undefined && !Array.isArray(value) && typeof value !== 'boolean') {
104
+ throw new errors.BadRequestError(
105
+ `Search values must be arrays or boolean. Found invalid value for '${key}': '${value}'. Example: { ${key}: ["${value}"] }`,
106
+ );
107
+ }
108
+ }
109
+ }
110
+ }
111
+
112
+ /**
113
+ * Our custom query builder can only handle columns that exist in the table
114
+ * However, we might want to do complex/relational logic in higher layers
115
+ * To make sure we don't error out here, we filter out any columns that don't exist in the current table
116
+ */
117
+ private cleanQueryObject(tableName: string) {
118
+ const columns = modelColumns.get(tableName) ?? [];
119
+
120
+ for (const key in this.query.filters) {
121
+ if (Object.prototype.hasOwnProperty.call(this.query.filters, key)) {
122
+ if (!columns.includes(key)) {
123
+ if (this.query.filters) {
124
+ // Preserve boolean values, only clear arrays
125
+ if (typeof this.query.filters[key] !== 'boolean') {
126
+ this.query.filters[key] = [];
127
+ }
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ for (const key in this.query.search) {
134
+ if (Object.prototype.hasOwnProperty.call(this.query.search, key)) {
135
+ if (!columns.includes(key)) {
136
+ if (this.query.search) {
137
+ // Preserve boolean values, only clear arrays
138
+ if (typeof this.query.search[key] !== 'boolean') {
139
+ this.query.search[key] = [];
140
+ }
141
+ }
142
+ }
143
+ }
144
+ }
145
+
146
+ return this.query;
147
+ }
148
+
149
+ build(queryBuilder: ObjectionQueryBuilder<Model, Model[]>): ObjectionQueryBuilder<Model, Page<Model>> {
150
+ const tableName = queryBuilder.modelClass().tableName;
151
+ this.cleanQueryObject(tableName);
152
+
153
+ const pagination = this.pagination();
154
+ const sorting = this.sorting();
155
+
156
+ let qry = queryBuilder.page(pagination.page, pagination.limit).orderBy(sorting.sortBy, sorting.sortDirection);
157
+
158
+ qry = this.filters(tableName, qry);
159
+ qry = this.greaterThan(tableName, qry);
160
+ qry = this.lessThan(tableName, qry);
161
+
162
+ if (this.query.search) {
163
+ qry.where((builder) => {
164
+ for (const search in this.query.search) {
165
+ if (Object.prototype.hasOwnProperty.call(this.query.search, search)) {
166
+ const searchVal = this.query.search[search];
167
+ if (Array.isArray(searchVal)) {
168
+ searchVal.forEach((val) => {
169
+ if (val) {
170
+ builder.orWhere(`${tableName}.${search}`, 'ilike', `%${val}%`);
171
+ }
172
+ });
173
+ }
174
+ }
175
+ }
176
+ });
177
+ }
178
+
179
+ for (const extend of this.query.extend ?? []) {
180
+ qry.withGraphFetched(extend);
181
+ }
182
+
183
+ return qry;
184
+ }
185
+
186
+ private filters(
187
+ tableName: string,
188
+ query: ObjectionQueryBuilder<Model, Page<Model>>,
189
+ ): ObjectionQueryBuilder<Model, Page<Model>> {
190
+ for (const filter in this.query.filters) {
191
+ if (Object.prototype.hasOwnProperty.call(this.query.filters, filter)) {
192
+ const searchVal = this.query.filters[filter];
193
+
194
+ if (typeof searchVal === 'boolean') {
195
+ query.where(`${tableName}.${filter}`, searchVal);
196
+ } else if (searchVal && Array.isArray(searchVal)) {
197
+ if (searchVal.includes('null')) {
198
+ query.whereNull(`${tableName}.${filter}`);
199
+ continue;
200
+ }
201
+
202
+ if (searchVal.length) {
203
+ query.whereIn(`${tableName}.${filter}`, searchVal.filter(Boolean) as unknown as AnyQueryBuilder);
204
+ }
205
+ }
206
+ }
207
+ }
208
+
209
+ return query;
210
+ }
211
+
212
+ private greaterThan(
213
+ tableName: string,
214
+ query: ObjectionQueryBuilder<Model, Page<Model>>,
215
+ ): ObjectionQueryBuilder<Model, Page<Model>> {
216
+ for (const filter in this.query.greaterThan) {
217
+ if (Object.prototype.hasOwnProperty.call(this.query.greaterThan, filter)) {
218
+ const searchVal = this.query.greaterThan[filter];
219
+ if (searchVal) {
220
+ query.where(`${tableName}.${filter}`, '>=', searchVal as unknown as Expression<PrimitiveValue>);
221
+ }
222
+ }
223
+ }
224
+
225
+ return query;
226
+ }
227
+
228
+ private lessThan(
229
+ tableName: string,
230
+ query: ObjectionQueryBuilder<Model, Page<Model>>,
231
+ ): ObjectionQueryBuilder<Model, Page<Model>> {
232
+ for (const filter in this.query.lessThan) {
233
+ if (Object.prototype.hasOwnProperty.call(this.query.lessThan, filter)) {
234
+ const searchVal = this.query.lessThan[filter];
235
+ if (searchVal) {
236
+ query.where(`${tableName}.${filter}`, '<=', searchVal as unknown as Expression<PrimitiveValue>);
237
+ }
238
+ }
239
+ }
240
+
241
+ return query;
242
+ }
243
+
244
+ private sorting(): { sortBy: string; sortDirection: SortDirection } {
245
+ if (!this.query.sortBy) {
246
+ return {
247
+ sortBy: 'id',
248
+ sortDirection: SortDirection.asc,
249
+ };
250
+ }
251
+ return {
252
+ sortBy: this.query.sortBy,
253
+ sortDirection: this.query.sortDirection ?? SortDirection.asc,
254
+ };
255
+ }
256
+
257
+ private pagination() {
258
+ return {
259
+ page: this.query.page ?? 0,
260
+ limit: this.query.limit ?? 100,
261
+ };
262
+ }
263
+ }