@takaro/db 0.0.1

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 (263) hide show
  1. package/README.md +1 -0
  2. package/dist/TakaroModel.d.ts +15 -0
  3. package/dist/TakaroModel.js +23 -0
  4. package/dist/TakaroModel.js.map +1 -0
  5. package/dist/config.d.ts +98 -0
  6. package/dist/config.js +81 -0
  7. package/dist/config.js.map +1 -0
  8. package/dist/encryption.d.ts +4 -0
  9. package/dist/encryption.js +24 -0
  10. package/dist/encryption.js.map +1 -0
  11. package/dist/errorTypeGuards.d.ts +2 -0
  12. package/dist/errorTypeGuards.js +11 -0
  13. package/dist/errorTypeGuards.js.map +1 -0
  14. package/dist/knex.d.ts +16 -0
  15. package/dist/knex.js +46 -0
  16. package/dist/knex.js.map +1 -0
  17. package/dist/main.d.ts +8 -0
  18. package/dist/main.js +9 -0
  19. package/dist/main.js.map +1 -0
  20. package/dist/migrations/index.d.ts +2 -0
  21. package/dist/migrations/index.js +59 -0
  22. package/dist/migrations/index.js.map +1 -0
  23. package/dist/migrations/sql/20220827191938_init.d.ts +3 -0
  24. package/dist/migrations/sql/20220827191938_init.js +155 -0
  25. package/dist/migrations/sql/20220827191938_init.js.map +1 -0
  26. package/dist/migrations/sql/20221019173729_settings.d.ts +3 -0
  27. package/dist/migrations/sql/20221019173729_settings.js +61 -0
  28. package/dist/migrations/sql/20221019173729_settings.js.map +1 -0
  29. package/dist/migrations/sql/20221029103554_refactor_function_assignments.d.ts +3 -0
  30. package/dist/migrations/sql/20221029103554_refactor_function_assignments.js +33 -0
  31. package/dist/migrations/sql/20221029103554_refactor_function_assignments.js.map +1 -0
  32. package/dist/migrations/sql/20221102190532_commands.d.ts +3 -0
  33. package/dist/migrations/sql/20221102190532_commands.js +58 -0
  34. package/dist/migrations/sql/20221102190532_commands.js.map +1 -0
  35. package/dist/migrations/sql/20221203135001-builtin_modules.d.ts +3 -0
  36. package/dist/migrations/sql/20221203135001-builtin_modules.js +44 -0
  37. package/dist/migrations/sql/20221203135001-builtin_modules.js.map +1 -0
  38. package/dist/migrations/sql/20230308183400-persistent-variables.d.ts +3 -0
  39. package/dist/migrations/sql/20230308183400-persistent-variables.js +63 -0
  40. package/dist/migrations/sql/20230308183400-persistent-variables.js.map +1 -0
  41. package/dist/migrations/sql/20230314183400-auth-ory.d.ts +3 -0
  42. package/dist/migrations/sql/20230314183400-auth-ory.js +23 -0
  43. package/dist/migrations/sql/20230314183400-auth-ory.js.map +1 -0
  44. package/dist/migrations/sql/20230325156123_command-arguments.d.ts +3 -0
  45. package/dist/migrations/sql/20230325156123_command-arguments.js +19 -0
  46. package/dist/migrations/sql/20230325156123_command-arguments.js.map +1 -0
  47. package/dist/migrations/sql/20230407132022-module-descriptions.d.ts +3 -0
  48. package/dist/migrations/sql/20230407132022-module-descriptions.js +11 -0
  49. package/dist/migrations/sql/20230407132022-module-descriptions.js.map +1 -0
  50. package/dist/migrations/sql/20230407143733-module-json-schema-config.d.ts +3 -0
  51. package/dist/migrations/sql/20230407143733-module-json-schema-config.js +14 -0
  52. package/dist/migrations/sql/20230407143733-module-json-schema-config.js.map +1 -0
  53. package/dist/migrations/sql/20230407173055-hook-regex-optional.d.ts +3 -0
  54. package/dist/migrations/sql/20230407173055-hook-regex-optional.js +11 -0
  55. package/dist/migrations/sql/20230407173055-hook-regex-optional.js.map +1 -0
  56. package/dist/migrations/sql/20230415154935-cronjob-configs.d.ts +3 -0
  57. package/dist/migrations/sql/20230415154935-cronjob-configs.js +16 -0
  58. package/dist/migrations/sql/20230415154935-cronjob-configs.js.map +1 -0
  59. package/dist/migrations/sql/20230503132906-variables-extra-meta.d.ts +3 -0
  60. package/dist/migrations/sql/20230503132906-variables-extra-meta.js +26 -0
  61. package/dist/migrations/sql/20230503132906-variables-extra-meta.js.map +1 -0
  62. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.d.ts +3 -0
  63. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.js +8 -0
  64. package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.js.map +1 -0
  65. package/dist/migrations/sql/20230617081049-discordId-for-users.d.ts +3 -0
  66. package/dist/migrations/sql/20230617081049-discordId-for-users.js +14 -0
  67. package/dist/migrations/sql/20230617081049-discordId-for-users.js.map +1 -0
  68. package/dist/migrations/sql/20230618053611-discord-funtionality.d.ts +3 -0
  69. package/dist/migrations/sql/20230618053611-discord-funtionality.js +26 -0
  70. package/dist/migrations/sql/20230618053611-discord-funtionality.js.map +1 -0
  71. package/dist/migrations/sql/20230622192402-discord-hooks.d.ts +3 -0
  72. package/dist/migrations/sql/20230622192402-discord-hooks.js +14 -0
  73. package/dist/migrations/sql/20230622192402-discord-hooks.js.map +1 -0
  74. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.d.ts +3 -0
  75. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.js +19 -0
  76. package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.js.map +1 -0
  77. package/dist/migrations/sql/20230710174340-events.d.ts +3 -0
  78. package/dist/migrations/sql/20230710174340-events.js +16 -0
  79. package/dist/migrations/sql/20230710174340-events.js.map +1 -0
  80. package/dist/migrations/sql/20230712061220-roles-permissions-extension.d.ts +3 -0
  81. package/dist/migrations/sql/20230712061220-roles-permissions-extension.js +43 -0
  82. package/dist/migrations/sql/20230712061220-roles-permissions-extension.js.map +1 -0
  83. package/dist/migrations/sql/20230713184927-variables-modulescoped.d.ts +3 -0
  84. package/dist/migrations/sql/20230713184927-variables-modulescoped.js +27 -0
  85. package/dist/migrations/sql/20230713184927-variables-modulescoped.js.map +1 -0
  86. package/dist/migrations/sql/20230714045136-domain-index.d.ts +3 -0
  87. package/dist/migrations/sql/20230714045136-domain-index.js +37 -0
  88. package/dist/migrations/sql/20230714045136-domain-index.js.map +1 -0
  89. package/dist/migrations/sql/20230714045727-events-index.d.ts +3 -0
  90. package/dist/migrations/sql/20230714045727-events-index.js +17 -0
  91. package/dist/migrations/sql/20230714045727-events-index.js.map +1 -0
  92. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.d.ts +3 -0
  93. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.js +32 -0
  94. package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.js.map +1 -0
  95. package/dist/migrations/sql/20230724062109-roles-constraints.d.ts +3 -0
  96. package/dist/migrations/sql/20230724062109-roles-constraints.js +14 -0
  97. package/dist/migrations/sql/20230724062109-roles-constraints.js.map +1 -0
  98. package/dist/migrations/sql/20230811095701-userId-on-events.d.ts +3 -0
  99. package/dist/migrations/sql/20230811095701-userId-on-events.js +12 -0
  100. package/dist/migrations/sql/20230811095701-userId-on-events.js.map +1 -0
  101. package/dist/migrations/sql/20230921123717-count-for-permissions.d.ts +3 -0
  102. package/dist/migrations/sql/20230921123717-count-for-permissions.js +84 -0
  103. package/dist/migrations/sql/20230921123717-count-for-permissions.js.map +1 -0
  104. package/dist/migrations/sql/20231111102812-details-system-permissions.d.ts +36 -0
  105. package/dist/migrations/sql/20231111102812-details-system-permissions.js +179 -0
  106. package/dist/migrations/sql/20231111102812-details-system-permissions.js.map +1 -0
  107. package/dist/migrations/sql/20231114151343-system-roles.d.ts +3 -0
  108. package/dist/migrations/sql/20231114151343-system-roles.js +41 -0
  109. package/dist/migrations/sql/20231114151343-system-roles.js.map +1 -0
  110. package/dist/migrations/sql/20231118082301-add-new-permissions.d.ts +36 -0
  111. package/dist/migrations/sql/20231118082301-add-new-permissions.js +186 -0
  112. package/dist/migrations/sql/20231118082301-add-new-permissions.js.map +1 -0
  113. package/dist/migrations/sql/20231119115037-timedRoles.d.ts +3 -0
  114. package/dist/migrations/sql/20231119115037-timedRoles.js +19 -0
  115. package/dist/migrations/sql/20231119115037-timedRoles.js.map +1 -0
  116. package/dist/migrations/sql/20231123150854-economy-base.d.ts +3 -0
  117. package/dist/migrations/sql/20231123150854-economy-base.js +13 -0
  118. package/dist/migrations/sql/20231123150854-economy-base.js.map +1 -0
  119. package/dist/migrations/sql/20231123171611-economy-settings.d.ts +3 -0
  120. package/dist/migrations/sql/20231123171611-economy-settings.js +13 -0
  121. package/dist/migrations/sql/20231123171611-economy-settings.js.map +1 -0
  122. package/dist/migrations/sql/20231124140441-json-module-assignments.d.ts +3 -0
  123. package/dist/migrations/sql/20231124140441-json-module-assignments.js +25 -0
  124. package/dist/migrations/sql/20231124140441-json-module-assignments.js.map +1 -0
  125. package/dist/migrations/sql/20231208114507-settings-refactor.d.ts +3 -0
  126. package/dist/migrations/sql/20231208114507-settings-refactor.js +95 -0
  127. package/dist/migrations/sql/20231208114507-settings-refactor.js.map +1 -0
  128. package/dist/migrations/sql/20231208171234-game-items.d.ts +3 -0
  129. package/dist/migrations/sql/20231208171234-game-items.js +18 -0
  130. package/dist/migrations/sql/20231208171234-game-items.js.map +1 -0
  131. package/dist/migrations/sql/20231216100720-player-inventory.d.ts +3 -0
  132. package/dist/migrations/sql/20231216100720-player-inventory.js +14 -0
  133. package/dist/migrations/sql/20231216100720-player-inventory.js.map +1 -0
  134. package/dist/migrations/sql/20231222180438-steam-data.d.ts +3 -0
  135. package/dist/migrations/sql/20231222180438-steam-data.js +25 -0
  136. package/dist/migrations/sql/20231222180438-steam-data.js.map +1 -0
  137. package/dist/migrations/sql/20231223132631-pog-online.d.ts +3 -0
  138. package/dist/migrations/sql/20231223132631-pog-online.js +11 -0
  139. package/dist/migrations/sql/20231223132631-pog-online.js.map +1 -0
  140. package/dist/migrations/sql/20231223212031-unique-index-item-def.d.ts +3 -0
  141. package/dist/migrations/sql/20231223212031-unique-index-item-def.js +24 -0
  142. package/dist/migrations/sql/20231223212031-unique-index-item-def.js.map +1 -0
  143. package/dist/migrations/sql/20231224135126-gameserver-online-status.d.ts +3 -0
  144. package/dist/migrations/sql/20231224135126-gameserver-online-status.js +11 -0
  145. package/dist/migrations/sql/20231224135126-gameserver-online-status.js.map +1 -0
  146. package/dist/migrations/sql/20231224155226-unique-pog.d.ts +3 -0
  147. package/dist/migrations/sql/20231224155226-unique-pog.js +24 -0
  148. package/dist/migrations/sql/20231224155226-unique-pog.js.map +1 -0
  149. package/dist/migrations/sql/20231225140650-extra-ip-info.d.ts +3 -0
  150. package/dist/migrations/sql/20231225140650-extra-ip-info.js +23 -0
  151. package/dist/migrations/sql/20231225140650-extra-ip-info.js.map +1 -0
  152. package/dist/migrations/sql/20231227144315-unique-constraints-player.d.ts +3 -0
  153. package/dist/migrations/sql/20231227144315-unique-constraints-player.js +67 -0
  154. package/dist/migrations/sql/20231227144315-unique-constraints-player.js.map +1 -0
  155. package/dist/migrations/sql/20231229144707-more-player-constraints.d.ts +3 -0
  156. package/dist/migrations/sql/20231229144707-more-player-constraints.js +17 -0
  157. package/dist/migrations/sql/20231229144707-more-player-constraints.js.map +1 -0
  158. package/dist/migrations/sql/20240101162751-add-settings-constraint.d.ts +3 -0
  159. package/dist/migrations/sql/20240101162751-add-settings-constraint.js +34 -0
  160. package/dist/migrations/sql/20240101162751-add-settings-constraint.js.map +1 -0
  161. package/dist/migrations/sql/20240105130846-remove-some-module-perms.d.ts +3 -0
  162. package/dist/migrations/sql/20240105130846-remove-some-module-perms.js +80 -0
  163. package/dist/migrations/sql/20240105130846-remove-some-module-perms.js.map +1 -0
  164. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.d.ts +3 -0
  165. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.js +11 -0
  166. package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.js.map +1 -0
  167. package/dist/migrations/sql/20240119152426-remove-hook-check.d.ts +3 -0
  168. package/dist/migrations/sql/20240119152426-remove-hook-check.js +14 -0
  169. package/dist/migrations/sql/20240119152426-remove-hook-check.js.map +1 -0
  170. package/dist/migrations/sql/20240121142329-move-ip-history.d.ts +3 -0
  171. package/dist/migrations/sql/20240121142329-move-ip-history.js +44 -0
  172. package/dist/migrations/sql/20240121142329-move-ip-history.js.map +1 -0
  173. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.d.ts +3 -0
  174. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.js +13 -0
  175. package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.js.map +1 -0
  176. package/dist/migrations/sql/20240216120143-domain-state.d.ts +3 -0
  177. package/dist/migrations/sql/20240216120143-domain-state.js +11 -0
  178. package/dist/migrations/sql/20240216120143-domain-state.js.map +1 -0
  179. package/dist/migrations/sql/20240229141340-looser-fks-events.d.ts +3 -0
  180. package/dist/migrations/sql/20240229141340-looser-fks-events.js +18 -0
  181. package/dist/migrations/sql/20240229141340-looser-fks-events.js.map +1 -0
  182. package/dist/migrations/sql/20240301063505-module-functions.d.ts +3 -0
  183. package/dist/migrations/sql/20240301063505-module-functions.js +14 -0
  184. package/dist/migrations/sql/20240301063505-module-functions.js.map +1 -0
  185. package/dist/migrations/util/alterEnum.d.ts +1 -0
  186. package/dist/migrations/util/alterEnum.js +9 -0
  187. package/dist/migrations/util/alterEnum.js.map +1 -0
  188. package/dist/queryBuilder.d.ts +28 -0
  189. package/dist/queryBuilder.js +132 -0
  190. package/dist/queryBuilder.js.map +1 -0
  191. package/dist/redis.d.ts +20 -0
  192. package/dist/redis.js +49 -0
  193. package/dist/redis.js.map +1 -0
  194. package/package.json +29 -0
  195. package/src/TakaroModel.ts +32 -0
  196. package/src/__tests__/encryption.integration.test.ts +56 -0
  197. package/src/__tests__/queryBuilder.integration.test.ts +202 -0
  198. package/src/config.ts +101 -0
  199. package/src/encryption.ts +27 -0
  200. package/src/errorTypeGuards.ts +11 -0
  201. package/src/knex.ts +54 -0
  202. package/src/main.ts +15 -0
  203. package/src/migrations/index.ts +70 -0
  204. package/src/migrations/sql/20220827191938_init.ts +183 -0
  205. package/src/migrations/sql/20221019173729_settings.ts +70 -0
  206. package/src/migrations/sql/20221029103554_refactor_function_assignments.ts +41 -0
  207. package/src/migrations/sql/20221102190532_commands.ts +66 -0
  208. package/src/migrations/sql/20221203135001-builtin_modules.ts +56 -0
  209. package/src/migrations/sql/20230308183400-persistent-variables.ts +74 -0
  210. package/src/migrations/sql/20230314183400-auth-ory.ts +27 -0
  211. package/src/migrations/sql/20230325156123_command-arguments.ts +24 -0
  212. package/src/migrations/sql/20230407132022-module-descriptions.ts +13 -0
  213. package/src/migrations/sql/20230407143733-module-json-schema-config.ts +16 -0
  214. package/src/migrations/sql/20230407173055-hook-regex-optional.ts +13 -0
  215. package/src/migrations/sql/20230415154935-cronjob-configs.ts +18 -0
  216. package/src/migrations/sql/20230503132906-variables-extra-meta.ts +31 -0
  217. package/src/migrations/sql/20230604130951-fix-hook-eventtypes.ts +12 -0
  218. package/src/migrations/sql/20230617081049-discordId-for-users.ts +16 -0
  219. package/src/migrations/sql/20230618053611-discord-funtionality.ts +34 -0
  220. package/src/migrations/sql/20230622192402-discord-hooks.ts +20 -0
  221. package/src/migrations/sql/20230707081218-playerOnGameServerExtension.ts +21 -0
  222. package/src/migrations/sql/20230710174340-events.ts +21 -0
  223. package/src/migrations/sql/20230712061220-roles-permissions-extension.ts +50 -0
  224. package/src/migrations/sql/20230713184927-variables-modulescoped.ts +32 -0
  225. package/src/migrations/sql/20230714045136-domain-index.ts +40 -0
  226. package/src/migrations/sql/20230714045727-events-index.ts +19 -0
  227. package/src/migrations/sql/20230715102519-module-permissions-extra-fields.ts +38 -0
  228. package/src/migrations/sql/20230724062109-roles-constraints.ts +16 -0
  229. package/src/migrations/sql/20230811095701-userId-on-events.ts +14 -0
  230. package/src/migrations/sql/20230921123717-count-for-permissions.ts +101 -0
  231. package/src/migrations/sql/20231111102812-details-system-permissions.ts +192 -0
  232. package/src/migrations/sql/20231114151343-system-roles.ts +46 -0
  233. package/src/migrations/sql/20231118082301-add-new-permissions.ts +200 -0
  234. package/src/migrations/sql/20231119115037-timedRoles.ts +23 -0
  235. package/src/migrations/sql/20231123150854-economy-base.ts +15 -0
  236. package/src/migrations/sql/20231123171611-economy-settings.ts +15 -0
  237. package/src/migrations/sql/20231124140441-json-module-assignments.ts +29 -0
  238. package/src/migrations/sql/20231208114507-settings-refactor.ts +114 -0
  239. package/src/migrations/sql/20231208171234-game-items.ts +20 -0
  240. package/src/migrations/sql/20231216100720-player-inventory.ts +16 -0
  241. package/src/migrations/sql/20231222180438-steam-data.ts +27 -0
  242. package/src/migrations/sql/20231223132631-pog-online.ts +13 -0
  243. package/src/migrations/sql/20231223212031-unique-index-item-def.ts +27 -0
  244. package/src/migrations/sql/20231224135126-gameserver-online-status.ts +13 -0
  245. package/src/migrations/sql/20231224155226-unique-pog.ts +27 -0
  246. package/src/migrations/sql/20231225140650-extra-ip-info.ts +27 -0
  247. package/src/migrations/sql/20231227144315-unique-constraints-player.ts +74 -0
  248. package/src/migrations/sql/20231229144707-more-player-constraints.ts +20 -0
  249. package/src/migrations/sql/20240101162751-add-settings-constraint.ts +39 -0
  250. package/src/migrations/sql/20240105130846-remove-some-module-perms.ts +104 -0
  251. package/src/migrations/sql/20240116141936-add-ui-schema-to-module.ts +13 -0
  252. package/src/migrations/sql/20240119152426-remove-hook-check.ts +18 -0
  253. package/src/migrations/sql/20240121142329-move-ip-history.ts +53 -0
  254. package/src/migrations/sql/20240202101208-rename-economy-to-economyUtils.ts +15 -0
  255. package/src/migrations/sql/20240216120143-domain-state.ts +13 -0
  256. package/src/migrations/sql/20240229141340-looser-fks-events.ts +20 -0
  257. package/src/migrations/sql/20240301063505-module-functions.ts +17 -0
  258. package/src/migrations/util/alterEnum.ts +10 -0
  259. package/src/queryBuilder.ts +133 -0
  260. package/src/redis.ts +58 -0
  261. package/tsconfig.build.json +9 -0
  262. package/tsconfig.json +8 -0
  263. package/typedoc.json +3 -0
@@ -0,0 +1,27 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('users', async (table) => {
5
+ table.dropColumn('password');
6
+ table.dropColumn('email');
7
+ table.string('idpId').notNullable().unique();
8
+ });
9
+
10
+ await knex.schema.renameTable('capabilityOnRole', 'permissionOnRole');
11
+ await knex.schema.table('permissionOnRole', async (table) => {
12
+ table.renameColumn('capability', 'permission');
13
+ });
14
+ }
15
+
16
+ export async function down(knex: Knex): Promise<void> {
17
+ await knex.schema.alterTable('users', async (table) => {
18
+ table.string('password');
19
+ table.string('email').unique();
20
+ table.dropColumn('idpId');
21
+ });
22
+
23
+ await knex.schema.renameTable('permissionOnRole', 'capabilityOnRole');
24
+ await knex.schema.table('capabilityOnRole', async (table) => {
25
+ table.renameColumn('permission', 'capability');
26
+ });
27
+ }
@@ -0,0 +1,24 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable('commandArguments', async (table) => {
5
+ table.timestamps(true, true, true);
6
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
7
+ table.string('name').notNullable();
8
+ table.string('type').defaultTo('string').notNullable();
9
+ table.string('helpText');
10
+ table.string('defaultValue');
11
+ table.smallint('position').notNullable();
12
+
13
+ table.uuid('commandId').references('commands.id').onDelete('CASCADE').notNullable();
14
+
15
+ table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
16
+
17
+ table.unique(['name', 'commandId', 'domain']);
18
+ table.unique(['position', 'commandId', 'domain']);
19
+ });
20
+ }
21
+
22
+ export async function down(knex: Knex): Promise<void> {
23
+ await knex.schema.dropTable('commandArguments');
24
+ }
@@ -0,0 +1,13 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('modules', (table) => {
5
+ table.text('description').notNullable().defaultTo('No description provided.');
6
+ });
7
+ }
8
+
9
+ export async function down(knex: Knex): Promise<void> {
10
+ await knex.schema.alterTable('modules', (table) => {
11
+ table.dropColumn('description');
12
+ });
13
+ }
@@ -0,0 +1,16 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('modules', (table) => {
5
+ table
6
+ .text('configSchema')
7
+ .defaultTo('{"$schema": "http://json-schema.org/draft-07/schema#","type": "object","additionalProperties": true}')
8
+ .notNullable();
9
+ });
10
+ }
11
+
12
+ export async function down(knex: Knex): Promise<void> {
13
+ await knex.schema.alterTable('modules', (table) => {
14
+ table.dropColumn('configSchema');
15
+ });
16
+ }
@@ -0,0 +1,13 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('hooks', (table) => {
5
+ table.string('regex').nullable().alter();
6
+ });
7
+ }
8
+
9
+ export async function down(knex: Knex): Promise<void> {
10
+ await knex.schema.alterTable('modules', (table) => {
11
+ table.string('regex').notNullable().alter();
12
+ });
13
+ }
@@ -0,0 +1,18 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('moduleAssignments', (table) => {
5
+ // Set a value for all existing rows
6
+ table.json('systemConfig').notNullable().defaultTo('{}');
7
+ // Make the column not nullable
8
+ table.json('systemConfig').notNullable().alter();
9
+ table.renameColumn('config', 'userConfig');
10
+ });
11
+ }
12
+
13
+ export async function down(knex: Knex): Promise<void> {
14
+ await knex.schema.alterTable('moduleAssignments', (table) => {
15
+ table.dropColumn('systemConfig');
16
+ table.renameColumn('userConfig', 'config');
17
+ });
18
+ }
@@ -0,0 +1,31 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('variables', (table) => {
5
+ table.uuid('gameServerId').references('gameservers.id').onDelete('CASCADE').nullable();
6
+ table.uuid('playerId').references('players.id').onDelete('CASCADE').nullable();
7
+ // drop the old key, domain constraint
8
+ table.dropUnique(['key', 'domain']);
9
+ });
10
+
11
+ // key should be unique per domain, gameServerId and playerId
12
+ await knex.raw(`
13
+ ALTER TABLE variables
14
+ ADD CONSTRAINT variables_key_domain_gameServerId_playerId_unique
15
+ UNIQUE NULLS NOT DISTINCT (key, domain, "gameServerId", "playerId");
16
+ `);
17
+ }
18
+
19
+ export async function down(knex: Knex): Promise<void> {
20
+ await knex.raw(`
21
+ ALTER TABLE variables
22
+ DROP CONSTRAINT variables_key_domain_gameServerId_playerId_unique;
23
+ `);
24
+
25
+ await knex.schema.alterTable('variables', (table) => {
26
+ table.dropForeign(['gameServerId']);
27
+ table.dropForeign(['playerId']);
28
+
29
+ table.unique(['key', 'domain']);
30
+ });
31
+ }
@@ -0,0 +1,12 @@
1
+ import { Knex } from 'knex';
2
+ import { formatAlterTableEnumSql } from '../util/alterEnum.js';
3
+
4
+ export async function up(knex: Knex): Promise<void> {
5
+ await knex.raw(
6
+ formatAlterTableEnumSql('hooks', 'eventType', ['log', 'player-connected', 'player-disconnected', 'chat-message'])
7
+ );
8
+ }
9
+
10
+ export async function down(knex: Knex): Promise<void> {
11
+ await knex.raw(formatAlterTableEnumSql('hooks', 'eventType', ['log', 'player-connected', 'player-disconnected']));
12
+ }
@@ -0,0 +1,16 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('users', (table) => {
5
+ table.string('discordId').nullable();
6
+ // Should be unique per domain, not globally
7
+ table.unique(['discordId', 'domain']);
8
+ });
9
+ }
10
+
11
+ export async function down(knex: Knex): Promise<void> {
12
+ await knex.schema.alterTable('users', (table) => {
13
+ table.dropUnique(['discordId', 'domain']);
14
+ table.dropColumn('discordId');
15
+ });
16
+ }
@@ -0,0 +1,34 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable('discordGuilds', (table) => {
5
+ table.timestamps(true, true, true);
6
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
7
+ table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
8
+
9
+ table.string('discordId').notNullable();
10
+ table.string('name').notNullable();
11
+ table.string('icon');
12
+ table.boolean('takaroEnabled').defaultTo(false);
13
+
14
+ table.unique(['discordId', 'domain']);
15
+ });
16
+
17
+ await knex.schema.createTable('userOnDiscordGuild', (table) => {
18
+ table.timestamps(true, true, true);
19
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
20
+ table.uuid('userId').references('id').inTable('users').onDelete('CASCADE');
21
+ table.uuid('discordGuildId').references('id').inTable('discordGuilds').onDelete('CASCADE');
22
+
23
+ table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
24
+
25
+ table.unique(['userId', 'discordGuildId']);
26
+
27
+ table.boolean('hasManageServer').defaultTo(false);
28
+ });
29
+ }
30
+
31
+ export async function down(knex: Knex): Promise<void> {
32
+ await knex.schema.dropTable('userOnDiscordGuild');
33
+ await knex.schema.dropTable('discordGuilds');
34
+ }
@@ -0,0 +1,20 @@
1
+ import { Knex } from 'knex';
2
+ import { formatAlterTableEnumSql } from '../util/alterEnum.js';
3
+
4
+ export async function up(knex: Knex): Promise<void> {
5
+ await knex.raw(
6
+ formatAlterTableEnumSql('hooks', 'eventType', [
7
+ 'log',
8
+ 'player-connected',
9
+ 'player-disconnected',
10
+ 'chat-message',
11
+ 'discord-message',
12
+ ])
13
+ );
14
+ }
15
+
16
+ export async function down(knex: Knex): Promise<void> {
17
+ await knex.raw(
18
+ formatAlterTableEnumSql('hooks', 'eventType', ['log', 'player-connected', 'player-disconnected', 'chat-message'])
19
+ );
20
+ }
@@ -0,0 +1,21 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('playerOnGameServer', (table) => {
5
+ table.integer('positionX').nullable();
6
+ table.integer('positionY').nullable();
7
+ table.integer('positionZ').nullable();
8
+ table.integer('ping').nullable();
9
+ table.specificType('ip', 'inet').nullable();
10
+ });
11
+ }
12
+
13
+ export async function down(knex: Knex): Promise<void> {
14
+ await knex.schema.alterTable('playerOnGameServer', (table) => {
15
+ table.dropColumn('positionX');
16
+ table.dropColumn('positionY');
17
+ table.dropColumn('positionZ');
18
+ table.dropColumn('ping');
19
+ table.dropColumn('ip');
20
+ });
21
+ }
@@ -0,0 +1,21 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.createTable('events', (table) => {
5
+ table.timestamps(true, true, true);
6
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
7
+ table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
8
+
9
+ table.string('eventName').notNullable();
10
+
11
+ table.uuid('playerId').nullable().references('id').inTable('players').onDelete('CASCADE');
12
+ table.uuid('gameserverId').nullable().references('id').inTable('gameservers').onDelete('CASCADE');
13
+ table.uuid('moduleId').nullable().references('id').inTable('modules').onDelete('CASCADE');
14
+
15
+ table.json('meta').nullable();
16
+ });
17
+ }
18
+
19
+ export async function down(knex: Knex): Promise<void> {
20
+ await knex.schema.dropTable('events');
21
+ }
@@ -0,0 +1,50 @@
1
+ import { Knex } from 'knex';
2
+ import { formatAlterTableEnumSql } from '../util/alterEnum.js';
3
+
4
+ export async function up(knex: Knex): Promise<void> {
5
+ await knex.raw('ALTER TABLE "permissionOnRole" DROP CONSTRAINT IF EXISTS "capabilityOnRole_capability_check";');
6
+
7
+ await knex.schema.createTable('roleOnPlayer', (table) => {
8
+ table.timestamps(true, true, true);
9
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
10
+ table.uuid('playerId').references('players.id').onDelete('CASCADE').notNullable();
11
+ table.uuid('roleId').references('roles.id').onDelete('CASCADE').notNullable();
12
+ table.uuid('gameServerId').references('gameservers.id').onDelete('CASCADE').nullable();
13
+ });
14
+
15
+ await knex.schema.createTable('modulePermission', (table) => {
16
+ table.timestamps(true, true, true);
17
+ table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
18
+ table.uuid('moduleId').references('modules.id').onDelete('CASCADE').notNullable();
19
+ table.string('permission').notNullable();
20
+ });
21
+ }
22
+
23
+ export async function down(knex: Knex): Promise<void> {
24
+ await knex.raw(
25
+ formatAlterTableEnumSql('permissionOnRole', 'permission', [
26
+ 'ROOT',
27
+ 'MANAGE_USERS',
28
+ 'READ_USERS',
29
+ 'MANAGE_ROLES',
30
+ 'READ_ROLES',
31
+ 'MANAGE_GAMESERVERS',
32
+ 'READ_GAMESERVERS',
33
+ 'READ_FUNCTIONS',
34
+ 'MANAGE_FUNCTIONS',
35
+ 'READ_CRONJOBS',
36
+ 'MANAGE_CRONJOBS',
37
+ 'READ_HOOKS',
38
+ 'MANAGE_HOOKS',
39
+ 'READ_MODULES',
40
+ 'MANAGE_MODULES',
41
+ 'READ_PLAYERS',
42
+ 'MANAGE_PLAYERS',
43
+ 'MANAGE_SETTINGS',
44
+ 'READ_SETTINGS',
45
+ ])
46
+ );
47
+
48
+ await knex.schema.dropTable('roleOnPlayer');
49
+ await knex.schema.dropTable('modulePermission');
50
+ }
@@ -0,0 +1,32 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ // drop the old 'variables_key_domain_gameServerId_playerId_unique' constraint
5
+ await knex.raw(`
6
+ ALTER TABLE variables
7
+ DROP CONSTRAINT variables_key_domain_gameServerId_playerId_unique;
8
+ `);
9
+
10
+ await knex.schema.alterTable('variables', (table) => {
11
+ table.uuid('moduleId').references('modules.id').onDelete('CASCADE').nullable();
12
+ });
13
+
14
+ await knex.raw(`
15
+ ALTER TABLE variables
16
+ ADD CONSTRAINT variables_key_domain_gameServerId_moduleId_playerId_unique
17
+ UNIQUE NULLS NOT DISTINCT (key, domain, "gameServerId", "playerId", "moduleId");
18
+ `);
19
+ }
20
+
21
+ export async function down(knex: Knex): Promise<void> {
22
+ await knex.schema.alterTable('variables', (table) => {
23
+ table.dropForeign(['moduleId']);
24
+ table.dropUnique(['key', 'domain', 'gameServerId', 'playerId', 'moduleId']);
25
+ });
26
+
27
+ await knex.raw(`
28
+ ALTER TABLE variables
29
+ ADD CONSTRAINT variables_key_domain_gameServerId_playerId_unique
30
+ UNIQUE NULLS NOT DISTINCT (key, domain, "gameServerId", "playerId");
31
+ `);
32
+ }
@@ -0,0 +1,40 @@
1
+ import { Knex } from 'knex';
2
+
3
+ const tablesToIndex = [
4
+ 'roles',
5
+ 'gameservers',
6
+ 'players',
7
+ 'playerOnGameServer',
8
+ 'functions',
9
+ 'settings',
10
+ 'gameServerSettings',
11
+ 'cronJobs',
12
+ 'hooks',
13
+ 'commands',
14
+ 'commandArguments',
15
+ 'modules',
16
+ 'moduleAssignments',
17
+ 'variables',
18
+ 'users',
19
+ 'discordGuilds',
20
+ 'userOnDiscordGuild',
21
+ 'events',
22
+ ];
23
+
24
+ export async function up(knex: Knex): Promise<void> {
25
+ // Add index for domain in all tables
26
+ for (const table of tablesToIndex) {
27
+ await knex.schema.alterTable(table, (t) => {
28
+ t.index('domain');
29
+ });
30
+ }
31
+ }
32
+
33
+ export async function down(knex: Knex): Promise<void> {
34
+ // Remove index for domain in all tables
35
+ for (const table of tablesToIndex) {
36
+ await knex.schema.alterTable(table, (t) => {
37
+ t.dropIndex('domain');
38
+ });
39
+ }
40
+ }
@@ -0,0 +1,19 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('events', (t) => {
5
+ t.index('createdAt');
6
+ t.index('playerId');
7
+ t.index('gameserverId');
8
+ t.index('moduleId');
9
+ });
10
+ }
11
+
12
+ export async function down(knex: Knex): Promise<void> {
13
+ await knex.schema.alterTable('events', (t) => {
14
+ t.dropIndex('createdAt');
15
+ t.dropIndex('playerId');
16
+ t.dropIndex('gameserverId');
17
+ t.dropIndex('moduleId');
18
+ });
19
+ }
@@ -0,0 +1,38 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('modulePermission', (table) => {
5
+ table.string('description').defaultTo('No description provided');
6
+ table.string('friendlyName');
7
+ });
8
+
9
+ await knex.raw(`
10
+ CREATE OR REPLACE FUNCTION set_friendly_name()
11
+ RETURNS TRIGGER AS $$
12
+ BEGIN
13
+ IF NEW."friendlyName" IS NULL THEN
14
+ NEW."friendlyName" := NEW.permission;
15
+ END IF;
16
+ RETURN NEW;
17
+ END;
18
+ $$ LANGUAGE plpgsql;
19
+ `);
20
+
21
+ await knex.raw(`
22
+ CREATE TRIGGER check_friendly_name
23
+ BEFORE INSERT OR UPDATE ON "modulePermission"
24
+ FOR EACH ROW EXECUTE PROCEDURE set_friendly_name();
25
+ `);
26
+
27
+ await knex.raw('ALTER TABLE "permissionOnRole" DROP CONSTRAINT IF EXISTS "capabilityOnRole_capability_check";');
28
+ }
29
+
30
+ export async function down(knex: Knex): Promise<void> {
31
+ await knex.schema.alterTable('modulePermission', (table) => {
32
+ table.dropColumn('description');
33
+ table.dropColumn('friendlyName');
34
+ });
35
+
36
+ await knex.raw('DROP TRIGGER IF EXISTS check_friendly_name ON "modulePermission";');
37
+ await knex.raw('DROP FUNCTION IF EXISTS set_friendly_name();');
38
+ }
@@ -0,0 +1,16 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.raw(`
5
+ ALTER TABLE "roleOnPlayer"
6
+ ADD CONSTRAINT role_on_player_unique_idx
7
+ UNIQUE NULLS NOT DISTINCT ("gameServerId", "playerId", "roleId");
8
+ `);
9
+ }
10
+
11
+ export async function down(knex: Knex): Promise<void> {
12
+ // Removing the unique constraint
13
+ await knex.raw(`
14
+ DROP INDEX role_on_player_unique_idx;
15
+ `);
16
+ }
@@ -0,0 +1,14 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('events', (table) => {
5
+ table.uuid('userId').references('id').inTable('users').onDelete('CASCADE');
6
+ table.index('userId');
7
+ });
8
+ }
9
+
10
+ export async function down(knex: Knex): Promise<void> {
11
+ await knex.schema.alterTable('events', (table) => {
12
+ table.dropColumn('userId');
13
+ });
14
+ }
@@ -0,0 +1,101 @@
1
+ import { Knex } from 'knex';
2
+
3
+ export async function up(knex: Knex): Promise<void> {
4
+ await knex.schema.alterTable('modulePermission', (table) => {
5
+ table.boolean('canHaveCount').defaultTo(false);
6
+ // drop not null constraint
7
+ table.uuid('moduleId').nullable().alter();
8
+ });
9
+
10
+ await knex.schema.renameTable('modulePermission', 'permission');
11
+
12
+ // Create default permissions
13
+ const perms = [
14
+ 'ROOT',
15
+ 'MANAGE_USERS',
16
+ 'READ_USERS',
17
+ 'MANAGE_ROLES',
18
+ 'READ_ROLES',
19
+ 'MANAGE_GAMESERVERS',
20
+ 'READ_GAMESERVERS',
21
+ 'READ_FUNCTIONS',
22
+ 'MANAGE_FUNCTIONS',
23
+ 'READ_CRONJOBS',
24
+ 'MANAGE_CRONJOBS',
25
+ 'READ_HOOKS',
26
+ 'MANAGE_HOOKS',
27
+ 'READ_MODULES',
28
+ 'MANAGE_MODULES',
29
+ 'READ_PLAYERS',
30
+ 'MANAGE_PLAYERS',
31
+ 'MANAGE_SETTINGS',
32
+ 'READ_SETTINGS',
33
+ ];
34
+
35
+ await knex('permission').insert(
36
+ perms.map((perm) => ({
37
+ permission: perm,
38
+ canHaveCount: false,
39
+ }))
40
+ );
41
+
42
+ await knex.schema.createTable('temp_permissiononrole', (table) => {
43
+ table.timestamps(true, true, true);
44
+ table.uuid('id').primary();
45
+ table.uuid('roleId');
46
+ table.string('permission');
47
+ table.string('domain');
48
+ });
49
+
50
+ await knex.raw('INSERT INTO temp_permissiononrole SELECT * FROM "permissionOnRole"');
51
+
52
+ await knex.schema.alterTable('permissionOnRole', (table) => {
53
+ table.integer('count').defaultTo(0);
54
+ table.uuid('permissionId').references('permission.id').onDelete('CASCADE').nullable();
55
+ });
56
+
57
+ await knex.raw(`
58
+ UPDATE "permissionOnRole" AS por
59
+ SET "permissionId" = p.id
60
+ FROM "temp_permissiononrole" AS temp, "permission" AS p
61
+ WHERE temp.id = por.id AND temp.permission = p.permission
62
+ `);
63
+
64
+ await knex.schema.alterTable('permissionOnRole', (table) => {
65
+ table.dropColumn('permission');
66
+ // make permissionId not nullable
67
+ table.uuid('permissionId').notNullable().alter();
68
+ });
69
+
70
+ await knex.schema.dropTable('temp_permissiononrole');
71
+ }
72
+
73
+ export async function down(knex: Knex): Promise<void> {
74
+ // Step 1: Re-create the original 'permission' column in 'permissionOnRole'
75
+ await knex.schema.alterTable('permissionOnRole', (table) => {
76
+ table.string('permission').nullable();
77
+ });
78
+
79
+ // Populate the original 'permission' based on 'permissionId'
80
+ await knex.raw(`
81
+ UPDATE "permissionOnRole" AS por
82
+ SET "permission" = p.permission
83
+ FROM "permission" AS p
84
+ WHERE por."permissionId" = p.id
85
+ `);
86
+
87
+ // Step 2: Drop the new columns and constraints in 'permissionOnRole'
88
+ await knex.schema.alterTable('permissionOnRole', (table) => {
89
+ table.dropColumn('count');
90
+ table.dropColumn('permissionId');
91
+ });
92
+
93
+ // Step 3: Rename the 'permission' table back to 'modulePermission'
94
+ await knex.schema.renameTable('permission', 'modulePermission');
95
+
96
+ // Step 4: Restore the original columns and constraints in 'modulePermission'
97
+ await knex.schema.alterTable('modulePermission', (table) => {
98
+ table.dropColumn('canHaveCount');
99
+ table.uuid('moduleId').notNullable().alter(); // Re-add the NOT NULL constraint
100
+ });
101
+ }