@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.
- package/README.md +1 -0
- package/dist/TakaroModel.d.ts +15 -0
- package/dist/TakaroModel.js +23 -0
- package/dist/TakaroModel.js.map +1 -0
- package/dist/config.d.ts +98 -0
- package/dist/config.js +81 -0
- package/dist/config.js.map +1 -0
- package/dist/encryption.d.ts +4 -0
- package/dist/encryption.js +24 -0
- package/dist/encryption.js.map +1 -0
- package/dist/errorTypeGuards.d.ts +2 -0
- package/dist/errorTypeGuards.js +11 -0
- package/dist/errorTypeGuards.js.map +1 -0
- package/dist/knex.d.ts +16 -0
- package/dist/knex.js +46 -0
- package/dist/knex.js.map +1 -0
- package/dist/main.d.ts +8 -0
- package/dist/main.js +9 -0
- package/dist/main.js.map +1 -0
- package/dist/migrations/index.d.ts +2 -0
- package/dist/migrations/index.js +59 -0
- package/dist/migrations/index.js.map +1 -0
- package/dist/migrations/sql/20220827191938_init.d.ts +3 -0
- package/dist/migrations/sql/20220827191938_init.js +155 -0
- package/dist/migrations/sql/20220827191938_init.js.map +1 -0
- package/dist/migrations/sql/20221019173729_settings.d.ts +3 -0
- package/dist/migrations/sql/20221019173729_settings.js +61 -0
- package/dist/migrations/sql/20221019173729_settings.js.map +1 -0
- package/dist/migrations/sql/20221029103554_refactor_function_assignments.d.ts +3 -0
- package/dist/migrations/sql/20221029103554_refactor_function_assignments.js +33 -0
- package/dist/migrations/sql/20221029103554_refactor_function_assignments.js.map +1 -0
- package/dist/migrations/sql/20221102190532_commands.d.ts +3 -0
- package/dist/migrations/sql/20221102190532_commands.js +58 -0
- package/dist/migrations/sql/20221102190532_commands.js.map +1 -0
- package/dist/migrations/sql/20221203135001-builtin_modules.d.ts +3 -0
- package/dist/migrations/sql/20221203135001-builtin_modules.js +44 -0
- package/dist/migrations/sql/20221203135001-builtin_modules.js.map +1 -0
- package/dist/migrations/sql/20230308183400-persistent-variables.d.ts +3 -0
- package/dist/migrations/sql/20230308183400-persistent-variables.js +63 -0
- package/dist/migrations/sql/20230308183400-persistent-variables.js.map +1 -0
- package/dist/migrations/sql/20230314183400-auth-ory.d.ts +3 -0
- package/dist/migrations/sql/20230314183400-auth-ory.js +23 -0
- package/dist/migrations/sql/20230314183400-auth-ory.js.map +1 -0
- package/dist/migrations/sql/20230325156123_command-arguments.d.ts +3 -0
- package/dist/migrations/sql/20230325156123_command-arguments.js +19 -0
- package/dist/migrations/sql/20230325156123_command-arguments.js.map +1 -0
- package/dist/migrations/sql/20230407132022-module-descriptions.d.ts +3 -0
- package/dist/migrations/sql/20230407132022-module-descriptions.js +11 -0
- package/dist/migrations/sql/20230407132022-module-descriptions.js.map +1 -0
- package/dist/migrations/sql/20230407143733-module-json-schema-config.d.ts +3 -0
- package/dist/migrations/sql/20230407143733-module-json-schema-config.js +14 -0
- package/dist/migrations/sql/20230407143733-module-json-schema-config.js.map +1 -0
- package/dist/migrations/sql/20230407173055-hook-regex-optional.d.ts +3 -0
- package/dist/migrations/sql/20230407173055-hook-regex-optional.js +11 -0
- package/dist/migrations/sql/20230407173055-hook-regex-optional.js.map +1 -0
- package/dist/migrations/sql/20230415154935-cronjob-configs.d.ts +3 -0
- package/dist/migrations/sql/20230415154935-cronjob-configs.js +16 -0
- package/dist/migrations/sql/20230415154935-cronjob-configs.js.map +1 -0
- package/dist/migrations/sql/20230503132906-variables-extra-meta.d.ts +3 -0
- package/dist/migrations/sql/20230503132906-variables-extra-meta.js +26 -0
- package/dist/migrations/sql/20230503132906-variables-extra-meta.js.map +1 -0
- package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.d.ts +3 -0
- package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.js +8 -0
- package/dist/migrations/sql/20230604130951-fix-hook-eventtypes.js.map +1 -0
- package/dist/migrations/sql/20230617081049-discordId-for-users.d.ts +3 -0
- package/dist/migrations/sql/20230617081049-discordId-for-users.js +14 -0
- package/dist/migrations/sql/20230617081049-discordId-for-users.js.map +1 -0
- package/dist/migrations/sql/20230618053611-discord-funtionality.d.ts +3 -0
- package/dist/migrations/sql/20230618053611-discord-funtionality.js +26 -0
- package/dist/migrations/sql/20230618053611-discord-funtionality.js.map +1 -0
- package/dist/migrations/sql/20230622192402-discord-hooks.d.ts +3 -0
- package/dist/migrations/sql/20230622192402-discord-hooks.js +14 -0
- package/dist/migrations/sql/20230622192402-discord-hooks.js.map +1 -0
- package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.d.ts +3 -0
- package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.js +19 -0
- package/dist/migrations/sql/20230707081218-playerOnGameServerExtension.js.map +1 -0
- package/dist/migrations/sql/20230710174340-events.d.ts +3 -0
- package/dist/migrations/sql/20230710174340-events.js +16 -0
- package/dist/migrations/sql/20230710174340-events.js.map +1 -0
- package/dist/migrations/sql/20230712061220-roles-permissions-extension.d.ts +3 -0
- package/dist/migrations/sql/20230712061220-roles-permissions-extension.js +43 -0
- package/dist/migrations/sql/20230712061220-roles-permissions-extension.js.map +1 -0
- package/dist/migrations/sql/20230713184927-variables-modulescoped.d.ts +3 -0
- package/dist/migrations/sql/20230713184927-variables-modulescoped.js +27 -0
- package/dist/migrations/sql/20230713184927-variables-modulescoped.js.map +1 -0
- package/dist/migrations/sql/20230714045136-domain-index.d.ts +3 -0
- package/dist/migrations/sql/20230714045136-domain-index.js +37 -0
- package/dist/migrations/sql/20230714045136-domain-index.js.map +1 -0
- package/dist/migrations/sql/20230714045727-events-index.d.ts +3 -0
- package/dist/migrations/sql/20230714045727-events-index.js +17 -0
- package/dist/migrations/sql/20230714045727-events-index.js.map +1 -0
- package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.d.ts +3 -0
- package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.js +32 -0
- package/dist/migrations/sql/20230715102519-module-permissions-extra-fields.js.map +1 -0
- package/dist/migrations/sql/20230724062109-roles-constraints.d.ts +3 -0
- package/dist/migrations/sql/20230724062109-roles-constraints.js +14 -0
- package/dist/migrations/sql/20230724062109-roles-constraints.js.map +1 -0
- package/dist/migrations/sql/20230811095701-userId-on-events.d.ts +3 -0
- package/dist/migrations/sql/20230811095701-userId-on-events.js +12 -0
- package/dist/migrations/sql/20230811095701-userId-on-events.js.map +1 -0
- package/dist/migrations/sql/20230921123717-count-for-permissions.d.ts +3 -0
- package/dist/migrations/sql/20230921123717-count-for-permissions.js +84 -0
- package/dist/migrations/sql/20230921123717-count-for-permissions.js.map +1 -0
- package/dist/migrations/sql/20231111102812-details-system-permissions.d.ts +36 -0
- package/dist/migrations/sql/20231111102812-details-system-permissions.js +179 -0
- package/dist/migrations/sql/20231111102812-details-system-permissions.js.map +1 -0
- package/dist/migrations/sql/20231114151343-system-roles.d.ts +3 -0
- package/dist/migrations/sql/20231114151343-system-roles.js +41 -0
- package/dist/migrations/sql/20231114151343-system-roles.js.map +1 -0
- package/dist/migrations/sql/20231118082301-add-new-permissions.d.ts +36 -0
- package/dist/migrations/sql/20231118082301-add-new-permissions.js +186 -0
- package/dist/migrations/sql/20231118082301-add-new-permissions.js.map +1 -0
- package/dist/migrations/sql/20231119115037-timedRoles.d.ts +3 -0
- package/dist/migrations/sql/20231119115037-timedRoles.js +19 -0
- package/dist/migrations/sql/20231119115037-timedRoles.js.map +1 -0
- package/dist/migrations/sql/20231123150854-economy-base.d.ts +3 -0
- package/dist/migrations/sql/20231123150854-economy-base.js +13 -0
- package/dist/migrations/sql/20231123150854-economy-base.js.map +1 -0
- package/dist/migrations/sql/20231123171611-economy-settings.d.ts +3 -0
- package/dist/migrations/sql/20231123171611-economy-settings.js +13 -0
- package/dist/migrations/sql/20231123171611-economy-settings.js.map +1 -0
- package/dist/migrations/sql/20231124140441-json-module-assignments.d.ts +3 -0
- package/dist/migrations/sql/20231124140441-json-module-assignments.js +25 -0
- package/dist/migrations/sql/20231124140441-json-module-assignments.js.map +1 -0
- package/dist/migrations/sql/20231208114507-settings-refactor.d.ts +3 -0
- package/dist/migrations/sql/20231208114507-settings-refactor.js +95 -0
- package/dist/migrations/sql/20231208114507-settings-refactor.js.map +1 -0
- package/dist/migrations/sql/20231208171234-game-items.d.ts +3 -0
- package/dist/migrations/sql/20231208171234-game-items.js +18 -0
- package/dist/migrations/sql/20231208171234-game-items.js.map +1 -0
- package/dist/migrations/sql/20231216100720-player-inventory.d.ts +3 -0
- package/dist/migrations/sql/20231216100720-player-inventory.js +14 -0
- package/dist/migrations/sql/20231216100720-player-inventory.js.map +1 -0
- package/dist/migrations/sql/20231222180438-steam-data.d.ts +3 -0
- package/dist/migrations/sql/20231222180438-steam-data.js +25 -0
- package/dist/migrations/sql/20231222180438-steam-data.js.map +1 -0
- package/dist/migrations/sql/20231223132631-pog-online.d.ts +3 -0
- package/dist/migrations/sql/20231223132631-pog-online.js +11 -0
- package/dist/migrations/sql/20231223132631-pog-online.js.map +1 -0
- package/dist/migrations/sql/20231223212031-unique-index-item-def.d.ts +3 -0
- package/dist/migrations/sql/20231223212031-unique-index-item-def.js +24 -0
- package/dist/migrations/sql/20231223212031-unique-index-item-def.js.map +1 -0
- package/dist/migrations/sql/20231224135126-gameserver-online-status.d.ts +3 -0
- package/dist/migrations/sql/20231224135126-gameserver-online-status.js +11 -0
- package/dist/migrations/sql/20231224135126-gameserver-online-status.js.map +1 -0
- package/dist/migrations/sql/20231224155226-unique-pog.d.ts +3 -0
- package/dist/migrations/sql/20231224155226-unique-pog.js +24 -0
- package/dist/migrations/sql/20231224155226-unique-pog.js.map +1 -0
- package/dist/migrations/sql/20231225140650-extra-ip-info.d.ts +3 -0
- package/dist/migrations/sql/20231225140650-extra-ip-info.js +23 -0
- package/dist/migrations/sql/20231225140650-extra-ip-info.js.map +1 -0
- package/dist/migrations/sql/20231227144315-unique-constraints-player.d.ts +3 -0
- package/dist/migrations/sql/20231227144315-unique-constraints-player.js +67 -0
- package/dist/migrations/sql/20231227144315-unique-constraints-player.js.map +1 -0
- package/dist/migrations/sql/20231229144707-more-player-constraints.d.ts +3 -0
- package/dist/migrations/sql/20231229144707-more-player-constraints.js +17 -0
- package/dist/migrations/sql/20231229144707-more-player-constraints.js.map +1 -0
- package/dist/migrations/sql/20240101162751-add-settings-constraint.d.ts +3 -0
- package/dist/migrations/sql/20240101162751-add-settings-constraint.js +34 -0
- package/dist/migrations/sql/20240101162751-add-settings-constraint.js.map +1 -0
- package/dist/migrations/sql/20240105130846-remove-some-module-perms.d.ts +3 -0
- package/dist/migrations/sql/20240105130846-remove-some-module-perms.js +80 -0
- package/dist/migrations/sql/20240105130846-remove-some-module-perms.js.map +1 -0
- package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.d.ts +3 -0
- package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.js +11 -0
- package/dist/migrations/sql/20240116141936-add-ui-schema-to-module.js.map +1 -0
- package/dist/migrations/sql/20240119152426-remove-hook-check.d.ts +3 -0
- package/dist/migrations/sql/20240119152426-remove-hook-check.js +14 -0
- package/dist/migrations/sql/20240119152426-remove-hook-check.js.map +1 -0
- package/dist/migrations/sql/20240121142329-move-ip-history.d.ts +3 -0
- package/dist/migrations/sql/20240121142329-move-ip-history.js +44 -0
- package/dist/migrations/sql/20240121142329-move-ip-history.js.map +1 -0
- package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.d.ts +3 -0
- package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.js +13 -0
- package/dist/migrations/sql/20240202101208-rename-economy-to-economyUtils.js.map +1 -0
- package/dist/migrations/sql/20240216120143-domain-state.d.ts +3 -0
- package/dist/migrations/sql/20240216120143-domain-state.js +11 -0
- package/dist/migrations/sql/20240216120143-domain-state.js.map +1 -0
- package/dist/migrations/sql/20240229141340-looser-fks-events.d.ts +3 -0
- package/dist/migrations/sql/20240229141340-looser-fks-events.js +18 -0
- package/dist/migrations/sql/20240229141340-looser-fks-events.js.map +1 -0
- package/dist/migrations/sql/20240301063505-module-functions.d.ts +3 -0
- package/dist/migrations/sql/20240301063505-module-functions.js +14 -0
- package/dist/migrations/sql/20240301063505-module-functions.js.map +1 -0
- package/dist/migrations/util/alterEnum.d.ts +1 -0
- package/dist/migrations/util/alterEnum.js +9 -0
- package/dist/migrations/util/alterEnum.js.map +1 -0
- package/dist/queryBuilder.d.ts +28 -0
- package/dist/queryBuilder.js +132 -0
- package/dist/queryBuilder.js.map +1 -0
- package/dist/redis.d.ts +20 -0
- package/dist/redis.js +49 -0
- package/dist/redis.js.map +1 -0
- package/package.json +29 -0
- package/src/TakaroModel.ts +32 -0
- package/src/__tests__/encryption.integration.test.ts +56 -0
- package/src/__tests__/queryBuilder.integration.test.ts +202 -0
- package/src/config.ts +101 -0
- package/src/encryption.ts +27 -0
- package/src/errorTypeGuards.ts +11 -0
- package/src/knex.ts +54 -0
- package/src/main.ts +15 -0
- package/src/migrations/index.ts +70 -0
- package/src/migrations/sql/20220827191938_init.ts +183 -0
- package/src/migrations/sql/20221019173729_settings.ts +70 -0
- package/src/migrations/sql/20221029103554_refactor_function_assignments.ts +41 -0
- package/src/migrations/sql/20221102190532_commands.ts +66 -0
- package/src/migrations/sql/20221203135001-builtin_modules.ts +56 -0
- package/src/migrations/sql/20230308183400-persistent-variables.ts +74 -0
- package/src/migrations/sql/20230314183400-auth-ory.ts +27 -0
- package/src/migrations/sql/20230325156123_command-arguments.ts +24 -0
- package/src/migrations/sql/20230407132022-module-descriptions.ts +13 -0
- package/src/migrations/sql/20230407143733-module-json-schema-config.ts +16 -0
- package/src/migrations/sql/20230407173055-hook-regex-optional.ts +13 -0
- package/src/migrations/sql/20230415154935-cronjob-configs.ts +18 -0
- package/src/migrations/sql/20230503132906-variables-extra-meta.ts +31 -0
- package/src/migrations/sql/20230604130951-fix-hook-eventtypes.ts +12 -0
- package/src/migrations/sql/20230617081049-discordId-for-users.ts +16 -0
- package/src/migrations/sql/20230618053611-discord-funtionality.ts +34 -0
- package/src/migrations/sql/20230622192402-discord-hooks.ts +20 -0
- package/src/migrations/sql/20230707081218-playerOnGameServerExtension.ts +21 -0
- package/src/migrations/sql/20230710174340-events.ts +21 -0
- package/src/migrations/sql/20230712061220-roles-permissions-extension.ts +50 -0
- package/src/migrations/sql/20230713184927-variables-modulescoped.ts +32 -0
- package/src/migrations/sql/20230714045136-domain-index.ts +40 -0
- package/src/migrations/sql/20230714045727-events-index.ts +19 -0
- package/src/migrations/sql/20230715102519-module-permissions-extra-fields.ts +38 -0
- package/src/migrations/sql/20230724062109-roles-constraints.ts +16 -0
- package/src/migrations/sql/20230811095701-userId-on-events.ts +14 -0
- package/src/migrations/sql/20230921123717-count-for-permissions.ts +101 -0
- package/src/migrations/sql/20231111102812-details-system-permissions.ts +192 -0
- package/src/migrations/sql/20231114151343-system-roles.ts +46 -0
- package/src/migrations/sql/20231118082301-add-new-permissions.ts +200 -0
- package/src/migrations/sql/20231119115037-timedRoles.ts +23 -0
- package/src/migrations/sql/20231123150854-economy-base.ts +15 -0
- package/src/migrations/sql/20231123171611-economy-settings.ts +15 -0
- package/src/migrations/sql/20231124140441-json-module-assignments.ts +29 -0
- package/src/migrations/sql/20231208114507-settings-refactor.ts +114 -0
- package/src/migrations/sql/20231208171234-game-items.ts +20 -0
- package/src/migrations/sql/20231216100720-player-inventory.ts +16 -0
- package/src/migrations/sql/20231222180438-steam-data.ts +27 -0
- package/src/migrations/sql/20231223132631-pog-online.ts +13 -0
- package/src/migrations/sql/20231223212031-unique-index-item-def.ts +27 -0
- package/src/migrations/sql/20231224135126-gameserver-online-status.ts +13 -0
- package/src/migrations/sql/20231224155226-unique-pog.ts +27 -0
- package/src/migrations/sql/20231225140650-extra-ip-info.ts +27 -0
- package/src/migrations/sql/20231227144315-unique-constraints-player.ts +74 -0
- package/src/migrations/sql/20231229144707-more-player-constraints.ts +20 -0
- package/src/migrations/sql/20240101162751-add-settings-constraint.ts +39 -0
- package/src/migrations/sql/20240105130846-remove-some-module-perms.ts +104 -0
- package/src/migrations/sql/20240116141936-add-ui-schema-to-module.ts +13 -0
- package/src/migrations/sql/20240119152426-remove-hook-check.ts +18 -0
- package/src/migrations/sql/20240121142329-move-ip-history.ts +53 -0
- package/src/migrations/sql/20240202101208-rename-economy-to-economyUtils.ts +15 -0
- package/src/migrations/sql/20240216120143-domain-state.ts +13 -0
- package/src/migrations/sql/20240229141340-looser-fks-events.ts +20 -0
- package/src/migrations/sql/20240301063505-module-functions.ts +17 -0
- package/src/migrations/util/alterEnum.ts +10 -0
- package/src/queryBuilder.ts +133 -0
- package/src/redis.ts +58 -0
- package/tsconfig.build.json +9 -0
- package/tsconfig.json +8 -0
- package/typedoc.json +3 -0
package/README.md
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# @takaro/db
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import Objection, { Model } from 'objection';
|
|
2
|
+
export declare class NOT_DOMAIN_SCOPED_TakaroModel extends Model {
|
|
3
|
+
id: string;
|
|
4
|
+
createdAt: string;
|
|
5
|
+
updatedAt: string;
|
|
6
|
+
static get idColumn(): string;
|
|
7
|
+
$beforeInsert(): void;
|
|
8
|
+
$beforeUpdate(): void;
|
|
9
|
+
}
|
|
10
|
+
export declare class TakaroModel extends NOT_DOMAIN_SCOPED_TakaroModel {
|
|
11
|
+
domain: string;
|
|
12
|
+
static get modifiers(): {
|
|
13
|
+
domainScoped(query: Objection.QueryBuilder<Model>, domainId: string): void;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Model } from 'objection';
|
|
2
|
+
export class NOT_DOMAIN_SCOPED_TakaroModel extends Model {
|
|
3
|
+
static get idColumn() {
|
|
4
|
+
return 'id';
|
|
5
|
+
}
|
|
6
|
+
$beforeInsert() {
|
|
7
|
+
this.createdAt = new Date().toISOString();
|
|
8
|
+
}
|
|
9
|
+
$beforeUpdate() {
|
|
10
|
+
this.updatedAt = new Date().toISOString();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class TakaroModel extends NOT_DOMAIN_SCOPED_TakaroModel {
|
|
14
|
+
static get modifiers() {
|
|
15
|
+
return {
|
|
16
|
+
domainScoped(query, domainId) {
|
|
17
|
+
const tableName = query.modelClass().tableName;
|
|
18
|
+
query.where(`${tableName}.domain`, domainId);
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=TakaroModel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TakaroModel.js","sourceRoot":"","sources":["../src/TakaroModel.ts"],"names":[],"mappings":"AAAA,OAAkB,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,OAAO,6BAA8B,SAAQ,KAAK;IAKtD,MAAM,KAAK,QAAQ;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,aAAa;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;IAED,aAAa;QACX,IAAI,CAAC,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC5C,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,6BAA6B;IAG5D,MAAM,KAAK,SAAS;QAClB,OAAO;YACL,YAAY,CAAC,KAAoC,EAAE,QAAgB;gBACjE,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,EAAE,CAAC,SAAS,CAAC;gBAC/C,KAAK,CAAC,KAAK,CAAC,GAAG,SAAS,SAAS,EAAE,QAAQ,CAAC,CAAC;YAC/C,CAAC;SACF,CAAC;IACJ,CAAC;CACF"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
import { Config, IBaseConfig } from '@takaro/config';
|
|
2
|
+
export interface IDbConfig extends IBaseConfig {
|
|
3
|
+
postgres: {
|
|
4
|
+
host: string;
|
|
5
|
+
port: number;
|
|
6
|
+
user: string;
|
|
7
|
+
password: string;
|
|
8
|
+
database: string;
|
|
9
|
+
};
|
|
10
|
+
redis: {
|
|
11
|
+
host: string;
|
|
12
|
+
port: number;
|
|
13
|
+
username: string;
|
|
14
|
+
password: string;
|
|
15
|
+
};
|
|
16
|
+
systemSchema: string;
|
|
17
|
+
baseDomainSchema: string;
|
|
18
|
+
encryptionKey: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const configSchema: {
|
|
21
|
+
postgres: {
|
|
22
|
+
host: {
|
|
23
|
+
doc: string;
|
|
24
|
+
format: StringConstructor;
|
|
25
|
+
default: string;
|
|
26
|
+
env: string;
|
|
27
|
+
};
|
|
28
|
+
port: {
|
|
29
|
+
doc: string;
|
|
30
|
+
format: NumberConstructor;
|
|
31
|
+
default: number;
|
|
32
|
+
env: string;
|
|
33
|
+
};
|
|
34
|
+
user: {
|
|
35
|
+
doc: string;
|
|
36
|
+
format: StringConstructor;
|
|
37
|
+
default: string;
|
|
38
|
+
env: string;
|
|
39
|
+
};
|
|
40
|
+
password: {
|
|
41
|
+
doc: string;
|
|
42
|
+
format: StringConstructor;
|
|
43
|
+
default: string;
|
|
44
|
+
env: string;
|
|
45
|
+
};
|
|
46
|
+
database: {
|
|
47
|
+
doc: string;
|
|
48
|
+
format: StringConstructor;
|
|
49
|
+
default: string;
|
|
50
|
+
env: string;
|
|
51
|
+
};
|
|
52
|
+
};
|
|
53
|
+
redis: {
|
|
54
|
+
host: {
|
|
55
|
+
doc: string;
|
|
56
|
+
format: StringConstructor;
|
|
57
|
+
default: string;
|
|
58
|
+
env: string;
|
|
59
|
+
};
|
|
60
|
+
port: {
|
|
61
|
+
doc: string;
|
|
62
|
+
format: NumberConstructor;
|
|
63
|
+
default: number;
|
|
64
|
+
env: string;
|
|
65
|
+
};
|
|
66
|
+
username: {
|
|
67
|
+
doc: string;
|
|
68
|
+
format: StringConstructor;
|
|
69
|
+
default: string;
|
|
70
|
+
env: string;
|
|
71
|
+
};
|
|
72
|
+
password: {
|
|
73
|
+
doc: string;
|
|
74
|
+
format: StringConstructor;
|
|
75
|
+
default: string;
|
|
76
|
+
env: string;
|
|
77
|
+
};
|
|
78
|
+
};
|
|
79
|
+
systemSchema: {
|
|
80
|
+
doc: string;
|
|
81
|
+
format: StringConstructor;
|
|
82
|
+
default: string;
|
|
83
|
+
env: string;
|
|
84
|
+
};
|
|
85
|
+
baseDomainSchema: {
|
|
86
|
+
doc: string;
|
|
87
|
+
format: StringConstructor;
|
|
88
|
+
default: string;
|
|
89
|
+
env: string;
|
|
90
|
+
};
|
|
91
|
+
encryptionKey: {
|
|
92
|
+
doc: string;
|
|
93
|
+
format: StringConstructor;
|
|
94
|
+
default: null;
|
|
95
|
+
env: string;
|
|
96
|
+
};
|
|
97
|
+
};
|
|
98
|
+
export declare const config: Config<IDbConfig>;
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { Config, baseConfigConvict } from '@takaro/config';
|
|
2
|
+
export const configSchema = {
|
|
3
|
+
postgres: {
|
|
4
|
+
host: {
|
|
5
|
+
doc: 'The Postgres host to connect to',
|
|
6
|
+
format: String,
|
|
7
|
+
default: 'localhost',
|
|
8
|
+
env: 'POSTGRES_HOST',
|
|
9
|
+
},
|
|
10
|
+
port: {
|
|
11
|
+
doc: 'The Postgres port to connect to',
|
|
12
|
+
format: Number,
|
|
13
|
+
default: 5432,
|
|
14
|
+
env: 'POSTGRES_PORT',
|
|
15
|
+
},
|
|
16
|
+
user: {
|
|
17
|
+
doc: 'The Postgres user to connect as',
|
|
18
|
+
format: String,
|
|
19
|
+
default: 'postgres',
|
|
20
|
+
env: 'POSTGRES_USER',
|
|
21
|
+
},
|
|
22
|
+
password: {
|
|
23
|
+
doc: 'The Postgres password to use',
|
|
24
|
+
format: String,
|
|
25
|
+
default: 'postgres',
|
|
26
|
+
env: 'POSTGRES_PASSWORD',
|
|
27
|
+
},
|
|
28
|
+
database: {
|
|
29
|
+
doc: 'The Postgres database to use',
|
|
30
|
+
format: String,
|
|
31
|
+
default: 'postgres',
|
|
32
|
+
env: 'POSTGRES_DB',
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
redis: {
|
|
36
|
+
host: {
|
|
37
|
+
doc: 'The host of the redis server',
|
|
38
|
+
format: String,
|
|
39
|
+
default: 'localhost',
|
|
40
|
+
env: 'REDIS_HOST',
|
|
41
|
+
},
|
|
42
|
+
port: {
|
|
43
|
+
doc: 'The port of the redis server',
|
|
44
|
+
format: Number,
|
|
45
|
+
default: 6379,
|
|
46
|
+
env: 'REDIS_PORT',
|
|
47
|
+
},
|
|
48
|
+
username: {
|
|
49
|
+
doc: 'The username of the redis server',
|
|
50
|
+
format: String,
|
|
51
|
+
default: '',
|
|
52
|
+
env: 'REDIS_USERNAME',
|
|
53
|
+
},
|
|
54
|
+
password: {
|
|
55
|
+
doc: 'The password of the redis server',
|
|
56
|
+
format: String,
|
|
57
|
+
default: '',
|
|
58
|
+
env: 'REDIS_PASSWORD',
|
|
59
|
+
},
|
|
60
|
+
},
|
|
61
|
+
systemSchema: {
|
|
62
|
+
doc: 'The Postgres schema to use for system-related actions (like domain management)',
|
|
63
|
+
format: String,
|
|
64
|
+
default: 'takaro',
|
|
65
|
+
env: 'POSTGRES_SYSTEM_SCHEMA',
|
|
66
|
+
},
|
|
67
|
+
baseDomainSchema: {
|
|
68
|
+
doc: 'String used as base for creating name of domain-scoped schemas',
|
|
69
|
+
format: String,
|
|
70
|
+
default: 'domain_',
|
|
71
|
+
env: 'POSTGRES_BASE_DOMAIN_SCHEMA',
|
|
72
|
+
},
|
|
73
|
+
encryptionKey: {
|
|
74
|
+
doc: 'Encryption key used for encrypting sensitive data',
|
|
75
|
+
format: String,
|
|
76
|
+
default: null,
|
|
77
|
+
env: 'POSTGRES_ENCRYPTION_KEY',
|
|
78
|
+
},
|
|
79
|
+
};
|
|
80
|
+
export const config = new Config([configSchema, baseConfigConvict]);
|
|
81
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAe,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAqBxE,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,QAAQ,EAAE;QACR,IAAI,EAAE;YACJ,GAAG,EAAE,iCAAiC;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,eAAe;SACrB;QACD,IAAI,EAAE;YACJ,GAAG,EAAE,iCAAiC;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,eAAe;SACrB;QACD,IAAI,EAAE;YACJ,GAAG,EAAE,iCAAiC;YACtC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,eAAe;SACrB;QACD,QAAQ,EAAE;YACR,GAAG,EAAE,8BAA8B;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,mBAAmB;SACzB;QACD,QAAQ,EAAE;YACR,GAAG,EAAE,8BAA8B;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,UAAU;YACnB,GAAG,EAAE,aAAa;SACnB;KACF;IACD,KAAK,EAAE;QACL,IAAI,EAAE;YACJ,GAAG,EAAE,8BAA8B;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,WAAW;YACpB,GAAG,EAAE,YAAY;SAClB;QACD,IAAI,EAAE;YACJ,GAAG,EAAE,8BAA8B;YACnC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,YAAY;SAClB;QACD,QAAQ,EAAE;YACR,GAAG,EAAE,kCAAkC;YACvC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,GAAG,EAAE,gBAAgB;SACtB;QACD,QAAQ,EAAE;YACR,GAAG,EAAE,kCAAkC;YACvC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE,EAAE;YACX,GAAG,EAAE,gBAAgB;SACtB;KACF;IACD,YAAY,EAAE;QACZ,GAAG,EAAE,gFAAgF;QACrF,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,QAAQ;QACjB,GAAG,EAAE,wBAAwB;KAC9B;IACD,gBAAgB,EAAE;QAChB,GAAG,EAAE,gEAAgE;QACrE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,SAAS;QAClB,GAAG,EAAE,6BAA6B;KACnC;IACD,aAAa,EAAE;QACb,GAAG,EAAE,mDAAmD;QACxD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,IAAI;QACb,GAAG,EAAE,yBAAyB;KAC/B;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,MAAM,CAAY,CAAC,YAAY,EAAE,iBAAiB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export declare function encrypt(value: string): Promise<string>;
|
|
2
|
+
export declare function decrypt(value: string): Promise<string>;
|
|
3
|
+
export declare function hash(value: string): Promise<string>;
|
|
4
|
+
export declare function compareHashed(value: string, hash: string): Promise<boolean>;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { config } from './config.js';
|
|
2
|
+
import { getKnex } from './knex.js';
|
|
3
|
+
export async function encrypt(value) {
|
|
4
|
+
const knex = await getKnex();
|
|
5
|
+
const res = await knex.raw('SELECT PGP_SYM_ENCRYPT(?,?) AS value', [value, config.get('encryptionKey')]);
|
|
6
|
+
return res.rows[0].value;
|
|
7
|
+
}
|
|
8
|
+
export async function decrypt(value) {
|
|
9
|
+
const knex = await getKnex();
|
|
10
|
+
const res = await knex.raw('SELECT PGP_SYM_DECRYPT(?,?) AS value', [value, config.get('encryptionKey')]);
|
|
11
|
+
return res.rows[0].value;
|
|
12
|
+
}
|
|
13
|
+
export async function hash(value) {
|
|
14
|
+
const knex = await getKnex();
|
|
15
|
+
// eslint-disable-next-line quotes
|
|
16
|
+
const res = await knex.raw("SELECT crypt(?, gen_salt('bf')) as value", [value]);
|
|
17
|
+
return res.rows[0].value;
|
|
18
|
+
}
|
|
19
|
+
export async function compareHashed(value, hash) {
|
|
20
|
+
const knex = await getKnex();
|
|
21
|
+
const res = await knex.raw('SELECT crypt(?, ?) = ? as result', [value, hash, hash]);
|
|
22
|
+
return res.rows[0].result;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=encryption.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.js","sourceRoot":"","sources":["../src/encryption.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa;IACzC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,sCAAsC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,KAAa;IACzC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,sCAAsC,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;IACzG,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAa;IACtC,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,kCAAkC;IAClC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,0CAA0C,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;IAChF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC3B,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,IAAY;IAC7D,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kCAAkC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;IACpF,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { errors } from '@takaro/util';
|
|
2
|
+
export function parseCheckViolationError(error, constraintName) {
|
|
3
|
+
if (!(error instanceof Error)) {
|
|
4
|
+
return null;
|
|
5
|
+
}
|
|
6
|
+
if (error.name === 'CheckViolationError') {
|
|
7
|
+
return new errors.BadRequestError(`Check constraint "${constraintName}" failed`);
|
|
8
|
+
}
|
|
9
|
+
return null;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=errorTypeGuards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errorTypeGuards.js","sourceRoot":"","sources":["../src/errorTypeGuards.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAEtC,MAAM,UAAU,wBAAwB,CAAC,KAAc,EAAE,cAAsB;IAC7E,IAAI,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,KAAK,CAAC,IAAI,KAAK,qBAAqB,EAAE,CAAC;QACzC,OAAO,IAAI,MAAM,CAAC,eAAe,CAAC,qBAAqB,cAAc,UAAU,CAAC,CAAC;IACnF,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/dist/knex.d.ts
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import knexPkg from 'knex';
|
|
2
|
+
import { TakaroModel } from './TakaroModel.js';
|
|
3
|
+
type KnexClient = knexPkg.Knex<TakaroModel, unknown[]>;
|
|
4
|
+
export declare function getKnexOptions(extra?: Record<string, unknown>): {
|
|
5
|
+
client: string;
|
|
6
|
+
connection: {
|
|
7
|
+
host: string;
|
|
8
|
+
port: number;
|
|
9
|
+
user: string;
|
|
10
|
+
password: string;
|
|
11
|
+
database: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
export declare function getKnex(): Promise<KnexClient>;
|
|
15
|
+
export declare function disconnectKnex(): Promise<void>;
|
|
16
|
+
export {};
|
package/dist/knex.js
ADDED
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import knexPkg from 'knex';
|
|
2
|
+
import { config } from './config.js';
|
|
3
|
+
import { logger, health } from '@takaro/util';
|
|
4
|
+
const log = logger('sql');
|
|
5
|
+
const { knex: createKnex } = knexPkg;
|
|
6
|
+
export function getKnexOptions(extra = {}) {
|
|
7
|
+
const opts = {
|
|
8
|
+
client: 'pg',
|
|
9
|
+
connection: {
|
|
10
|
+
host: config.get('postgres.host'),
|
|
11
|
+
port: config.get('postgres.port'),
|
|
12
|
+
user: config.get('postgres.user'),
|
|
13
|
+
password: config.get('postgres.password'),
|
|
14
|
+
database: config.get('postgres.database'),
|
|
15
|
+
},
|
|
16
|
+
...extra,
|
|
17
|
+
};
|
|
18
|
+
return opts;
|
|
19
|
+
}
|
|
20
|
+
let cachedKnex = null;
|
|
21
|
+
export async function getKnex() {
|
|
22
|
+
if (cachedKnex)
|
|
23
|
+
return cachedKnex;
|
|
24
|
+
log.debug('Missed knex cache, creating new client');
|
|
25
|
+
const knex = createKnex(getKnexOptions());
|
|
26
|
+
cachedKnex = knex;
|
|
27
|
+
health.registerHook('db', async () => {
|
|
28
|
+
try {
|
|
29
|
+
await knex.raw('SELECT 1');
|
|
30
|
+
return true;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
log.error(error);
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
return cachedKnex;
|
|
38
|
+
}
|
|
39
|
+
export async function disconnectKnex() {
|
|
40
|
+
if (!cachedKnex)
|
|
41
|
+
return;
|
|
42
|
+
await cachedKnex.destroy();
|
|
43
|
+
cachedKnex = null;
|
|
44
|
+
log.info('Disconnected knex');
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=knex.js.map
|
package/dist/knex.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"knex.js","sourceRoot":"","sources":["../src/knex.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,MAAM,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAG9C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAE1B,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,OAAO,CAAC;AAIrC,MAAM,UAAU,cAAc,CAAC,QAAiC,EAAE;IAChE,MAAM,IAAI,GAAG;QACX,MAAM,EAAE,IAAI;QACZ,UAAU,EAAE;YACV,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;YACjC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;YACjC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,CAAC;YACjC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACzC,QAAQ,EAAE,MAAM,CAAC,GAAG,CAAC,mBAAmB,CAAC;SAC1C;QACD,GAAG,KAAK;KACT,CAAC;IACF,OAAO,IAAI,CAAC;AACd,CAAC;AAED,IAAI,UAAU,GAAsB,IAAI,CAAC;AAEzC,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC;IAElC,GAAG,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1C,UAAU,GAAG,IAAI,CAAC;IAElB,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;QACnC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC3B,OAAO,IAAI,CAAC;QACd,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc;IAClC,IAAI,CAAC,UAAU;QAAE,OAAO;IACxB,MAAM,UAAU,CAAC,OAAO,EAAE,CAAC;IAC3B,UAAU,GAAG,IAAI,CAAC;IAClB,GAAG,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;AAChC,CAAC"}
|
package/dist/main.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { TakaroModel, NOT_DOMAIN_SCOPED_TakaroModel } from './TakaroModel.js';
|
|
2
|
+
export { ITakaroQuery, QueryBuilder, SortDirection } from './queryBuilder.js';
|
|
3
|
+
export { getKnex, disconnectKnex } from './knex.js';
|
|
4
|
+
export { migrate, migrateUndo } from './migrations/index.js';
|
|
5
|
+
export * from './encryption.js';
|
|
6
|
+
export { configSchema, IDbConfig } from './config.js';
|
|
7
|
+
export { Redis } from './redis.js';
|
|
8
|
+
export * from './errorTypeGuards.js';
|
package/dist/main.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { TakaroModel, NOT_DOMAIN_SCOPED_TakaroModel } from './TakaroModel.js';
|
|
2
|
+
export { ITakaroQuery, QueryBuilder, SortDirection } from './queryBuilder.js';
|
|
3
|
+
export { getKnex, disconnectKnex } from './knex.js';
|
|
4
|
+
export { migrate, migrateUndo } from './migrations/index.js';
|
|
5
|
+
export * from './encryption.js';
|
|
6
|
+
export { configSchema } from './config.js';
|
|
7
|
+
export { Redis } from './redis.js';
|
|
8
|
+
export * from './errorTypeGuards.js';
|
|
9
|
+
//# sourceMappingURL=main.js.map
|
package/dist/main.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,6BAA6B,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAEpD,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAE7D,cAAc,iBAAiB,CAAC;AAEhC,OAAO,EAAE,YAAY,EAAa,MAAM,aAAa,CAAC;AAEtD,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEnC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { getKnex } from '../knex.js';
|
|
2
|
+
import { readdir } from 'fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { logger } from '@takaro/util';
|
|
5
|
+
import * as url from 'url';
|
|
6
|
+
const __dirname = url.fileURLToPath(new URL('.', import.meta.url));
|
|
7
|
+
const log = logger('db:migrations');
|
|
8
|
+
class TakaroMigrationSource {
|
|
9
|
+
constructor() {
|
|
10
|
+
// Hack to get around ts compiler/monorepo/dynamic import weirdness
|
|
11
|
+
// See: https://github.com/TypeStrong/ts-node/discussions/1290
|
|
12
|
+
this.dynamicImport = new Function('specifier', 'return import(specifier)');
|
|
13
|
+
}
|
|
14
|
+
async getMigrations() {
|
|
15
|
+
const folderPath = path.join(__dirname, 'sql');
|
|
16
|
+
const files = await readdir(folderPath);
|
|
17
|
+
const migrations = files
|
|
18
|
+
.filter((file) => file.endsWith('.js'))
|
|
19
|
+
.map((file) => {
|
|
20
|
+
return this.dynamicImport(`${folderPath}/${file}`).then((migration) => {
|
|
21
|
+
return {
|
|
22
|
+
name: file,
|
|
23
|
+
up: migration.up,
|
|
24
|
+
down: migration.down,
|
|
25
|
+
};
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
return Promise.all(migrations);
|
|
29
|
+
}
|
|
30
|
+
getMigrationName(migration) {
|
|
31
|
+
return migration.name;
|
|
32
|
+
}
|
|
33
|
+
async getMigration(migration) {
|
|
34
|
+
return migration;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
export async function migrate() {
|
|
38
|
+
const knex = await getKnex();
|
|
39
|
+
knex.on('query', (queryData) => {
|
|
40
|
+
log.debug(queryData.sql);
|
|
41
|
+
});
|
|
42
|
+
await knex.migrate.latest({
|
|
43
|
+
migrationSource: new TakaroMigrationSource(),
|
|
44
|
+
});
|
|
45
|
+
await knex.destroy();
|
|
46
|
+
log.info('Migrations complete');
|
|
47
|
+
}
|
|
48
|
+
export async function migrateUndo() {
|
|
49
|
+
const knex = await getKnex();
|
|
50
|
+
knex.on('query', (queryData) => {
|
|
51
|
+
log.debug(queryData.sql);
|
|
52
|
+
});
|
|
53
|
+
await knex.migrate.down({
|
|
54
|
+
migrationSource: new TakaroMigrationSource(),
|
|
55
|
+
});
|
|
56
|
+
await knex.destroy();
|
|
57
|
+
log.info('Migrations rollback complete');
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/migrations/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAEtC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AACtC,OAAO,KAAK,GAAG,MAAM,KAAK,CAAC;AAC3B,MAAM,SAAS,GAAG,GAAG,CAAC,aAAa,CAAC,IAAI,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEnE,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,CAAC;AAQpC,MAAM,qBAAqB;IAA3B;QACE,mEAAmE;QACnE,8DAA8D;QACtD,kBAAa,GAAG,IAAI,QAAQ,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;IA0BhF,CAAC;IAxBC,KAAK,CAAC,aAAa;QACjB,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,UAAU,GAAG,KAAK;aACrB,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;aACtC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;YACZ,OAAO,IAAI,CAAC,aAAa,CAAC,GAAG,UAAU,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,SAAqB,EAAE,EAAE;gBAChF,OAAO;oBACL,IAAI,EAAE,IAAI;oBACV,EAAE,EAAE,SAAS,CAAC,EAAE;oBAChB,IAAI,EAAE,SAAS,CAAC,IAAI;iBACrB,CAAC;YACJ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QACL,OAAO,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IACjC,CAAC;IAED,gBAAgB,CAAC,SAAqB;QACpC,OAAO,SAAS,CAAC,IAAI,CAAC;IACxB,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAqB;QACtC,OAAO,SAAS,CAAC;IACnB,CAAC;CACF;AAED,MAAM,CAAC,KAAK,UAAU,OAAO;IAC3B,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE;QAC7B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACxB,eAAe,EAAE,IAAI,qBAAqB,EAAE;KAC7C,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrB,GAAG,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,MAAM,IAAI,GAAG,MAAM,OAAO,EAAE,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,SAAS,EAAE,EAAE;QAC7B,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QACtB,eAAe,EAAE,IAAI,qBAAqB,EAAE;KAC7C,CAAC,CAAC;IACH,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACrB,GAAG,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
export async function up(knex) {
|
|
2
|
+
await knex.schema.createTable('domains', (table) => {
|
|
3
|
+
table.timestamps(true, true, true);
|
|
4
|
+
table.string('id').primary();
|
|
5
|
+
table.string('name').unique();
|
|
6
|
+
});
|
|
7
|
+
await knex.schema.createTable('users', (table) => {
|
|
8
|
+
table.timestamps(true, true, true);
|
|
9
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
10
|
+
table.string('name').notNullable();
|
|
11
|
+
table.string('email').unique();
|
|
12
|
+
table.string('password').notNullable();
|
|
13
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
14
|
+
});
|
|
15
|
+
await knex.schema.createTable('roles', (table) => {
|
|
16
|
+
table.timestamps(true, true, true);
|
|
17
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
18
|
+
table.string('name');
|
|
19
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
20
|
+
table.unique(['name', 'domain']);
|
|
21
|
+
});
|
|
22
|
+
await knex.schema.createTable('capabilityOnRole', (table) => {
|
|
23
|
+
table.timestamps(true, true, true);
|
|
24
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
25
|
+
table.uuid('roleId').references('id').inTable('roles').onDelete('CASCADE');
|
|
26
|
+
table
|
|
27
|
+
.enu('capability', [
|
|
28
|
+
'ROOT',
|
|
29
|
+
'MANAGE_USERS',
|
|
30
|
+
'READ_USERS',
|
|
31
|
+
'MANAGE_ROLES',
|
|
32
|
+
'READ_ROLES',
|
|
33
|
+
'MANAGE_GAMESERVERS',
|
|
34
|
+
'READ_GAMESERVERS',
|
|
35
|
+
'READ_FUNCTIONS',
|
|
36
|
+
'MANAGE_FUNCTIONS',
|
|
37
|
+
'READ_CRONJOBS',
|
|
38
|
+
'MANAGE_CRONJOBS',
|
|
39
|
+
'READ_HOOKS',
|
|
40
|
+
'MANAGE_HOOKS',
|
|
41
|
+
'READ_MODULES',
|
|
42
|
+
'MANAGE_MODULES',
|
|
43
|
+
'READ_PLAYERS',
|
|
44
|
+
'MANAGE_PLAYERS',
|
|
45
|
+
])
|
|
46
|
+
.notNullable();
|
|
47
|
+
table.primary(['roleId', 'capability']);
|
|
48
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
49
|
+
});
|
|
50
|
+
await knex.schema.createTable('roleOnUser', (table) => {
|
|
51
|
+
table.timestamps(true, true, true);
|
|
52
|
+
table.uuid('userId').references('users.id').onDelete('CASCADE').notNullable();
|
|
53
|
+
table.uuid('roleId').references('roles.id').onDelete('CASCADE').notNullable();
|
|
54
|
+
table.primary(['userId', 'roleId']);
|
|
55
|
+
});
|
|
56
|
+
await knex.schema.createTable('gameservers', (table) => {
|
|
57
|
+
table.timestamps(true, true, true);
|
|
58
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
59
|
+
table.string('name');
|
|
60
|
+
table.enu('type', ['MOCK', 'SEVENDAYSTODIE', 'RUST']).notNullable();
|
|
61
|
+
table.binary('connectionInfo').notNullable();
|
|
62
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
63
|
+
table.unique(['name', 'domain']);
|
|
64
|
+
});
|
|
65
|
+
await knex.schema.createTable('players', (table) => {
|
|
66
|
+
table.timestamps(true, true, true);
|
|
67
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
68
|
+
table.string('name').notNullable();
|
|
69
|
+
table.string('steamId');
|
|
70
|
+
table.string('xboxLiveId');
|
|
71
|
+
table.string('epicOnlineServicesId');
|
|
72
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
73
|
+
});
|
|
74
|
+
await knex.schema.createTable('playerOnGameServer', (table) => {
|
|
75
|
+
table.timestamps(true, true, true);
|
|
76
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
77
|
+
table.uuid('playerId').references('players.id').onDelete('CASCADE').notNullable();
|
|
78
|
+
table.uuid('gameServerId').references('gameservers.id').onDelete('CASCADE').notNullable();
|
|
79
|
+
table.string('gameId').notNullable();
|
|
80
|
+
table.primary(['playerId', 'gameServerId']);
|
|
81
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
82
|
+
});
|
|
83
|
+
await knex.schema.createTable('functions', (table) => {
|
|
84
|
+
table.timestamps(true, true, true);
|
|
85
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
86
|
+
table.text('code').notNullable();
|
|
87
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
88
|
+
});
|
|
89
|
+
await knex.schema.createTable('modules', (table) => {
|
|
90
|
+
table.timestamps(true, true, true);
|
|
91
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
92
|
+
table.string('name');
|
|
93
|
+
table.boolean('enabled').notNullable().defaultTo(true);
|
|
94
|
+
table.json('config').defaultTo('{}');
|
|
95
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
96
|
+
table.unique(['name', 'domain']);
|
|
97
|
+
});
|
|
98
|
+
await knex.schema.createTable('cronJobs', (table) => {
|
|
99
|
+
table.timestamps(true, true, true);
|
|
100
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
101
|
+
table.string('name');
|
|
102
|
+
table.boolean('enabled').notNullable().defaultTo(true);
|
|
103
|
+
table.string('temporalValue').notNullable();
|
|
104
|
+
table.uuid('moduleId').references('modules.id').onDelete('CASCADE').notNullable();
|
|
105
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
106
|
+
table.unique(['name', 'moduleId']);
|
|
107
|
+
});
|
|
108
|
+
await knex.schema.createTable('hooks', (table) => {
|
|
109
|
+
table.timestamps(true, true, true);
|
|
110
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
111
|
+
table.string('name');
|
|
112
|
+
table.boolean('enabled').notNullable().defaultTo(true);
|
|
113
|
+
table.enu('eventType', ['log', 'player-connected', 'player-disconnected']).notNullable();
|
|
114
|
+
table.string('regex').notNullable();
|
|
115
|
+
table.uuid('moduleId').references('modules.id').onDelete('CASCADE').notNullable();
|
|
116
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
117
|
+
table.unique(['name', 'moduleId']);
|
|
118
|
+
});
|
|
119
|
+
await knex.schema.createTable('commands', (table) => {
|
|
120
|
+
table.timestamps(true, true, true);
|
|
121
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
122
|
+
table.string('name');
|
|
123
|
+
table.boolean('enabled').notNullable().defaultTo(true);
|
|
124
|
+
table.uuid('moduleId').references('modules.id').onDelete('CASCADE').notNullable();
|
|
125
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
126
|
+
table.unique(['name', 'moduleId']);
|
|
127
|
+
});
|
|
128
|
+
await knex.schema.createTable('functionAssignments', (table) => {
|
|
129
|
+
table.timestamps(true, true, true);
|
|
130
|
+
table.uuid('id').primary().defaultTo(knex.raw('gen_random_uuid ()'));
|
|
131
|
+
table.uuid('function').references('functions.id').onDelete('CASCADE').notNullable().unique();
|
|
132
|
+
table.uuid('cronJob').references('cronJobs.id').onDelete('CASCADE');
|
|
133
|
+
table.uuid('hook').references('hooks.id').onDelete('CASCADE');
|
|
134
|
+
table.uuid('command').references('commands.id').onDelete('CASCADE');
|
|
135
|
+
table.check('(?? IS NOT NULL) OR (?? IS NOT NULL) OR (?? IS NOT NULL)', ['cronJob', 'hook', 'command']);
|
|
136
|
+
table.string('domain').references('domains.id').onDelete('CASCADE').notNullable();
|
|
137
|
+
});
|
|
138
|
+
await knex.raw('CREATE EXTENSION IF NOT EXISTS pgcrypto');
|
|
139
|
+
}
|
|
140
|
+
export async function down(knex) {
|
|
141
|
+
await knex.schema.dropTable('domains');
|
|
142
|
+
await knex.schema.dropTable('functionAssignments');
|
|
143
|
+
await knex.schema.dropTable('commands');
|
|
144
|
+
await knex.schema.dropTable('hooks');
|
|
145
|
+
await knex.schema.dropTable('cronJobs');
|
|
146
|
+
await knex.schema.dropTable('modules');
|
|
147
|
+
await knex.schema.dropTable('functions');
|
|
148
|
+
await knex.schema.dropTable('playerOnGameServer');
|
|
149
|
+
await knex.schema.dropTable('players');
|
|
150
|
+
await knex.schema.dropTable('gameservers');
|
|
151
|
+
await knex.schema.dropTable('roleOnUser');
|
|
152
|
+
await knex.schema.dropTable('roles');
|
|
153
|
+
await knex.schema.dropTable('users');
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=20220827191938_init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"20220827191938_init.js","sourceRoot":"","sources":["../../../src/migrations/sql/20220827191938_init.ts"],"names":[],"mappings":"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"}
|