prostgles-server 4.2.187 → 4.2.188
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/.eslintignore +2 -1
- package/.eslintrc.json +2 -0
- package/dist/Auth/AuthHandler.d.ts +18 -11
- package/dist/Auth/AuthHandler.d.ts.map +1 -1
- package/dist/Auth/AuthHandler.js +94 -120
- package/dist/Auth/AuthHandler.js.map +1 -1
- package/dist/Auth/AuthTypes.d.ts +78 -71
- package/dist/Auth/AuthTypes.d.ts.map +1 -1
- package/dist/Auth/{setEmailProvider.d.ts → authProviders/setEmailProvider.d.ts} +1 -1
- package/dist/Auth/authProviders/setEmailProvider.d.ts.map +1 -0
- package/dist/Auth/authProviders/setEmailProvider.js +27 -0
- package/dist/Auth/authProviders/setEmailProvider.js.map +1 -0
- package/dist/Auth/authProviders/setOAuthProviders.d.ts +5 -0
- package/dist/Auth/authProviders/setOAuthProviders.d.ts.map +1 -0
- package/dist/Auth/authProviders/setOAuthProviders.js +78 -0
- package/dist/Auth/authProviders/setOAuthProviders.js.map +1 -0
- package/dist/Auth/endpoints/getConfirmEmailRequestHandler.d.ts +7 -0
- package/dist/Auth/endpoints/getConfirmEmailRequestHandler.d.ts.map +1 -0
- package/dist/Auth/endpoints/getConfirmEmailRequestHandler.js +29 -0
- package/dist/Auth/endpoints/getConfirmEmailRequestHandler.js.map +1 -0
- package/dist/Auth/endpoints/getRegisterRequestHandler.d.ts +7 -0
- package/dist/Auth/endpoints/getRegisterRequestHandler.d.ts.map +1 -0
- package/dist/Auth/endpoints/getRegisterRequestHandler.js +74 -0
- package/dist/Auth/endpoints/getRegisterRequestHandler.js.map +1 -0
- package/dist/Auth/setAuthProviders.d.ts.map +1 -1
- package/dist/Auth/setAuthProviders.js +4 -74
- package/dist/Auth/setAuthProviders.js.map +1 -1
- package/dist/Auth/setupAuthRoutes.d.ts.map +1 -1
- package/dist/Auth/setupAuthRoutes.js +23 -33
- package/dist/Auth/setupAuthRoutes.js.map +1 -1
- package/dist/Auth/utils/checkDmarc.d.ts +2 -0
- package/dist/Auth/utils/checkDmarc.d.ts.map +1 -0
- package/dist/Auth/utils/checkDmarc.js +22 -0
- package/dist/Auth/utils/checkDmarc.js.map +1 -0
- package/dist/Auth/utils/getClientRequestIPsInfo.d.ts +3 -0
- package/dist/Auth/utils/getClientRequestIPsInfo.d.ts.map +1 -0
- package/dist/Auth/utils/getClientRequestIPsInfo.js +29 -0
- package/dist/Auth/utils/getClientRequestIPsInfo.js.map +1 -0
- package/dist/Auth/utils/getReturnUrl.d.ts +3 -0
- package/dist/Auth/utils/getReturnUrl.d.ts.map +1 -0
- package/dist/Auth/utils/getReturnUrl.js +15 -0
- package/dist/Auth/utils/getReturnUrl.js.map +1 -0
- package/dist/Auth/utils/getSafeReturnURL.d.ts.map +1 -0
- package/dist/Auth/utils/getSafeReturnURL.js.map +1 -0
- package/dist/DBEventsManager.d.ts.map +1 -1
- package/dist/DBEventsManager.js +4 -5
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.js +1 -1
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilder.d.ts +0 -1
- package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilder.js +3 -12
- package/dist/DboBuilder/DboBuilder.js.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.d.ts +4 -4
- package/dist/DboBuilder/DboBuilderTypes.d.ts.map +1 -1
- package/dist/DboBuilder/DboBuilderTypes.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.js +38 -76
- package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +4 -12
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js +23 -33
- package/dist/DboBuilder/QueryBuilder/getNewQuery.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js +6 -6
- package/dist/DboBuilder/QueryBuilder/getSelectQuery.js.map +1 -1
- package/dist/DboBuilder/QueryStreamer.d.ts.map +1 -1
- package/dist/DboBuilder/QueryStreamer.js +13 -19
- package/dist/DboBuilder/QueryStreamer.js.map +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.d.ts +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/DataValidator.js +7 -16
- package/dist/DboBuilder/TableHandler/DataValidator.js.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/TableHandler.js +7 -5
- package/dist/DboBuilder/TableHandler/TableHandler.js.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/delete.js +5 -8
- package/dist/DboBuilder/TableHandler/delete.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insert.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/insert.js +10 -15
- package/dist/DboBuilder/TableHandler/insert.js.map +1 -1
- package/dist/DboBuilder/TableHandler/insertTest.js +1 -1
- package/dist/DboBuilder/TableHandler/insertTest.js.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js +1 -1
- package/dist/DboBuilder/TableHandler/runInsertUpdateQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler/update.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/update.js +5 -9
- package/dist/DboBuilder/TableHandler/update.js.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.d.ts +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/updateFile.js +7 -9
- package/dist/DboBuilder/TableHandler/updateFile.js.map +1 -1
- package/dist/DboBuilder/TableHandler/upsert.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler/upsert.js +1 -1
- package/dist/DboBuilder/TableHandler/upsert.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/ViewHandler.js +11 -13
- package/dist/DboBuilder/ViewHandler/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/count.js +1 -1
- package/dist/DboBuilder/ViewHandler/count.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/find.js +20 -27
- package/dist/DboBuilder/ViewHandler/find.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js +4 -10
- package/dist/DboBuilder/ViewHandler/getExistsCondition.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getInfo.js +2 -2
- package/dist/DboBuilder/ViewHandler/getInfo.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js +6 -22
- package/dist/DboBuilder/ViewHandler/getTableJoinQuery.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.js +6 -10
- package/dist/DboBuilder/ViewHandler/parseFieldFilter.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseJoinPath.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/parseJoinPath.js +8 -11
- package/dist/DboBuilder/ViewHandler/parseJoinPath.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareSortItems.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareSortItems.js +7 -12
- package/dist/DboBuilder/ViewHandler/prepareSortItems.js.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler/prepareWhere.js +6 -10
- package/dist/DboBuilder/ViewHandler/prepareWhere.js.map +1 -1
- package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
- package/dist/DboBuilder/dboBuilderUtils.js +8 -23
- package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
- package/dist/DboBuilder/getColumns.d.ts.map +1 -1
- package/dist/DboBuilder/getColumns.js +19 -26
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +7 -9
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/getSubscribeRelatedTables.js +2 -2
- package/dist/DboBuilder/getSubscribeRelatedTables.js.map +1 -1
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.d.ts.map +1 -1
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js +14 -15
- package/dist/DboBuilder/getTablesForSchemaPostgresSQL.js.map +1 -1
- package/dist/DboBuilder/insertNestedRecords.d.ts.map +1 -1
- package/dist/DboBuilder/insertNestedRecords.js +26 -40
- package/dist/DboBuilder/insertNestedRecords.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +1 -1
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.d.ts.map +1 -1
- package/dist/DboBuilder/prepareShortestJoinPaths.js +12 -18
- package/dist/DboBuilder/prepareShortestJoinPaths.js.map +1 -1
- package/dist/DboBuilder/runSQL.d.ts +1 -1
- package/dist/DboBuilder/runSQL.d.ts.map +1 -1
- package/dist/DboBuilder/runSQL.js +14 -27
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder/uploadFile.d.ts +1 -1
- package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/uploadFile.js +4 -11
- package/dist/DboBuilder/uploadFile.js.map +1 -1
- package/dist/FileManager/FileManager.d.ts.map +1 -1
- package/dist/FileManager/FileManager.js +11 -13
- package/dist/FileManager/FileManager.js.map +1 -1
- package/dist/FileManager/initFileManager.d.ts.map +1 -1
- package/dist/FileManager/initFileManager.js +60 -62
- package/dist/FileManager/initFileManager.js.map +1 -1
- package/dist/FileManager/uploadStream.js +2 -2
- package/dist/FileManager/uploadStream.js.map +1 -1
- package/dist/Filtering.d.ts +1 -1
- package/dist/Filtering.d.ts.map +1 -1
- package/dist/Filtering.js +12 -35
- package/dist/Filtering.js.map +1 -1
- package/dist/JSONBValidation/validation.d.ts.map +1 -1
- package/dist/JSONBValidation/validation.js +20 -26
- package/dist/JSONBValidation/validation.js.map +1 -1
- package/dist/Logging.d.ts +1 -0
- package/dist/Logging.d.ts.map +1 -1
- package/dist/PostgresNotifListenManager.d.ts.map +1 -1
- package/dist/PostgresNotifListenManager.js +1 -5
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +18 -33
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +8 -13
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/addSub.d.ts.map +1 -1
- package/dist/PubSubManager/addSub.js +1 -1
- package/dist/PubSubManager/addSub.js.map +1 -1
- package/dist/PubSubManager/addSync.d.ts.map +1 -1
- package/dist/PubSubManager/addSync.js +4 -7
- package/dist/PubSubManager/addSync.js.map +1 -1
- package/dist/PubSubManager/getCreatePubSubManagerError.js +6 -6
- package/dist/PubSubManager/getCreatePubSubManagerError.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +2 -3
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/PubSubManager/pushSubData.d.ts.map +1 -1
- package/dist/PubSubManager/pushSubData.js +0 -2
- package/dist/PubSubManager/pushSubData.js.map +1 -1
- package/dist/PublishParser/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser/PublishParser.js +8 -13
- package/dist/PublishParser/PublishParser.js.map +1 -1
- package/dist/PublishParser/getFileTableRules.js +1 -1
- package/dist/PublishParser/getFileTableRules.js.map +1 -1
- package/dist/PublishParser/getSchemaFromPublish.d.ts.map +1 -1
- package/dist/PublishParser/getSchemaFromPublish.js +6 -13
- package/dist/PublishParser/getSchemaFromPublish.js.map +1 -1
- package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts.map +1 -1
- package/dist/PublishParser/getTableRulesWithoutFileTable.js +14 -19
- package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
- package/dist/RestApi.d.ts +1 -1
- package/dist/RestApi.d.ts.map +1 -1
- package/dist/RestApi.js +2 -2
- package/dist/RestApi.js.map +1 -1
- package/dist/SchemaWatch/SchemaWatch.d.ts.map +1 -1
- package/dist/SchemaWatch/SchemaWatch.js +2 -2
- package/dist/SchemaWatch/SchemaWatch.js.map +1 -1
- package/dist/SyncReplication.d.ts.map +1 -1
- package/dist/SyncReplication.js +31 -41
- package/dist/SyncReplication.js.map +1 -1
- package/dist/TableConfig/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig/TableConfig.js +7 -9
- package/dist/TableConfig/TableConfig.js.map +1 -1
- package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
- package/dist/TableConfig/getConstraintDefinitionQueries.js +1 -6
- package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
- package/dist/TableConfig/getFutureTableSchema.d.ts.map +1 -1
- package/dist/TableConfig/getFutureTableSchema.js +16 -28
- package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
- package/dist/TableConfig/getTableColumnQueries.d.ts.map +1 -1
- package/dist/TableConfig/getTableColumnQueries.js +5 -9
- package/dist/TableConfig/getTableColumnQueries.js.map +1 -1
- package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
- package/dist/TableConfig/initTableConfig.js +22 -25
- package/dist/TableConfig/initTableConfig.js.map +1 -1
- package/dist/initProstgles.js +1 -1
- package/dist/initProstgles.js.map +1 -1
- package/dist/onSocketConnected.d.ts.map +1 -1
- package/dist/onSocketConnected.js +2 -4
- package/dist/onSocketConnected.js.map +1 -1
- package/dist/runClientRequest.d.ts.map +1 -1
- package/dist/runClientRequest.js +14 -13
- package/dist/runClientRequest.js.map +1 -1
- package/lib/Auth/AuthHandler.ts +117 -137
- package/lib/Auth/AuthTypes.ts +97 -81
- package/lib/Auth/authProviders/setEmailProvider.ts +29 -0
- package/lib/Auth/authProviders/setOAuthProviders.ts +97 -0
- package/lib/Auth/endpoints/getConfirmEmailRequestHandler.ts +39 -0
- package/lib/Auth/endpoints/getRegisterRequestHandler.ts +83 -0
- package/lib/Auth/setAuthProviders.ts +8 -111
- package/lib/Auth/setupAuthRoutes.ts +105 -148
- package/lib/Auth/utils/checkDmarc.ts +19 -0
- package/lib/Auth/utils/getClientRequestIPsInfo.ts +25 -0
- package/lib/Auth/utils/getReturnUrl.ts +13 -0
- package/lib/DBEventsManager.ts +12 -26
- package/lib/DBSchemaBuilder.ts +1 -1
- package/lib/DboBuilder/DboBuilder.ts +23 -52
- package/lib/DboBuilder/DboBuilderTypes.ts +9 -23
- package/lib/DboBuilder/QueryBuilder/Functions.ts +86 -188
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +11 -36
- package/lib/DboBuilder/QueryBuilder/getNewQuery.ts +102 -129
- package/lib/DboBuilder/QueryBuilder/getSelectQuery.ts +14 -27
- package/lib/DboBuilder/QueryStreamer.ts +26 -57
- package/lib/DboBuilder/TableHandler/DataValidator.ts +58 -90
- package/lib/DboBuilder/TableHandler/TableHandler.ts +19 -45
- package/lib/DboBuilder/TableHandler/delete.ts +9 -18
- package/lib/DboBuilder/TableHandler/insert.ts +18 -31
- package/lib/DboBuilder/TableHandler/insertTest.ts +1 -1
- package/lib/DboBuilder/TableHandler/runInsertUpdateQuery.ts +8 -19
- package/lib/DboBuilder/TableHandler/update.ts +17 -46
- package/lib/DboBuilder/TableHandler/updateFile.ts +18 -21
- package/lib/DboBuilder/TableHandler/upsert.ts +7 -24
- package/lib/DboBuilder/ViewHandler/ViewHandler.ts +13 -15
- package/lib/DboBuilder/ViewHandler/count.ts +1 -1
- package/lib/DboBuilder/ViewHandler/find.ts +28 -35
- package/lib/DboBuilder/ViewHandler/getExistsCondition.ts +8 -30
- package/lib/DboBuilder/ViewHandler/getInfo.ts +2 -2
- package/lib/DboBuilder/ViewHandler/getTableJoinQuery.ts +16 -32
- package/lib/DboBuilder/ViewHandler/parseFieldFilter.ts +9 -16
- package/lib/DboBuilder/ViewHandler/parseJoinPath.ts +26 -44
- package/lib/DboBuilder/ViewHandler/prepareSortItems.ts +58 -82
- package/lib/DboBuilder/ViewHandler/prepareWhere.ts +14 -27
- package/lib/DboBuilder/dboBuilderUtils.ts +19 -46
- package/lib/DboBuilder/getColumns.ts +24 -46
- package/lib/DboBuilder/getCondition.ts +18 -30
- package/lib/DboBuilder/getSubscribeRelatedTables.ts +2 -2
- package/lib/DboBuilder/getTablesForSchemaPostgresSQL.ts +44 -62
- package/lib/DboBuilder/insertNestedRecords.ts +67 -135
- package/lib/DboBuilder/parseUpdateRules.ts +1 -1
- package/lib/DboBuilder/prepareShortestJoinPaths.ts +23 -58
- package/lib/DboBuilder/runSQL.ts +41 -76
- package/lib/DboBuilder/uploadFile.ts +26 -37
- package/lib/FileManager/FileManager.ts +27 -58
- package/lib/FileManager/initFileManager.ts +68 -76
- package/lib/FileManager/uploadStream.ts +2 -2
- package/lib/Filtering.ts +30 -87
- package/lib/JSONBValidation/validation.ts +36 -75
- package/lib/Logging.ts +1 -1
- package/lib/PostgresNotifListenManager.ts +11 -35
- package/lib/Prostgles.ts +42 -100
- package/lib/PubSubManager/PubSubManager.ts +30 -66
- package/lib/PubSubManager/addSub.ts +11 -18
- package/lib/PubSubManager/addSync.ts +5 -12
- package/lib/PubSubManager/getCreatePubSubManagerError.ts +9 -9
- package/lib/PubSubManager/initPubSubManager.ts +7 -13
- package/lib/PubSubManager/pushSubData.ts +1 -7
- package/lib/PublishParser/PublishParser.ts +8 -12
- package/lib/PublishParser/getFileTableRules.ts +1 -1
- package/lib/PublishParser/getSchemaFromPublish.ts +26 -42
- package/lib/PublishParser/getTableRulesWithoutFileTable.ts +22 -37
- package/lib/RestApi.ts +4 -12
- package/lib/SchemaWatch/SchemaWatch.ts +11 -24
- package/lib/SyncReplication.ts +96 -190
- package/lib/TableConfig/TableConfig.ts +16 -38
- package/lib/TableConfig/getConstraintDefinitionQueries.ts +2 -8
- package/lib/TableConfig/getFutureTableSchema.ts +20 -34
- package/lib/TableConfig/getTableColumnQueries.ts +13 -35
- package/lib/TableConfig/initTableConfig.ts +40 -64
- package/lib/initProstgles.ts +1 -1
- package/lib/onSocketConnected.ts +8 -12
- package/lib/runClientRequest.ts +31 -54
- package/package.json +2 -2
- package/dist/Auth/getSafeReturnURL.d.ts.map +0 -1
- package/dist/Auth/getSafeReturnURL.js.map +0 -1
- package/dist/Auth/setEmailProvider.d.ts.map +0 -1
- package/dist/Auth/setEmailProvider.js +0 -133
- package/dist/Auth/setEmailProvider.js.map +0 -1
- package/dist/DboBuilder/runTransaction.d.ts +0 -9
- package/dist/DboBuilder/runTransaction.d.ts.map +0 -1
- package/dist/DboBuilder/runTransaction.js +0 -49
- package/dist/DboBuilder/runTransaction.js.map +0 -1
- package/lib/Auth/setEmailProvider.ts +0 -132
- package/lib/DboBuilder/QueryBuilder/prepareHaving.ts +0 -27
- package/lib/DboBuilder/runTransaction.ts +0 -61
- package/lib/SchemaWatch/createSchemaWatchEventTrigger.ts +0 -3
- /package/dist/Auth/{getSafeReturnURL.d.ts → utils/getSafeReturnURL.d.ts} +0 -0
- /package/dist/Auth/{getSafeReturnURL.js → utils/getSafeReturnURL.js} +0 -0
- /package/lib/Auth/{getSafeReturnURL.ts → utils/getSafeReturnURL.ts} +0 -0
|
@@ -13,10 +13,7 @@ import { VoidFunction } from "../SchemaWatch/SchemaWatch";
|
|
|
13
13
|
import { DB } from "../initProstgles";
|
|
14
14
|
import { DboBuilder } from "./DboBuilder";
|
|
15
15
|
import { PRGLIOSocket } from "./DboBuilderTypes";
|
|
16
|
-
import {
|
|
17
|
-
getErrorAsObject,
|
|
18
|
-
getSerializedClientErrorFromPGError,
|
|
19
|
-
} from "./dboBuilderUtils";
|
|
16
|
+
import { getErrorAsObject, getSerializedClientErrorFromPGError } from "./dboBuilderUtils";
|
|
20
17
|
import { getDetailedFieldInfo } from "./runSQL";
|
|
21
18
|
const Cursor: typeof CursorType = require("pg-cursor");
|
|
22
19
|
|
|
@@ -62,27 +59,19 @@ export class QueryStreamer {
|
|
|
62
59
|
};
|
|
63
60
|
this.adminClient = this.getConnection(
|
|
64
61
|
(error) => {
|
|
65
|
-
if (
|
|
66
|
-
error.message?.includes("database") &&
|
|
67
|
-
error.message?.includes("does not exist")
|
|
68
|
-
)
|
|
62
|
+
if (error.message?.includes("database") && error.message?.includes("does not exist"))
|
|
69
63
|
return;
|
|
70
64
|
console.log("Admin client error. Reconnecting...", error);
|
|
71
65
|
setAdminClient();
|
|
72
66
|
},
|
|
73
|
-
{ keepAlive: true }
|
|
67
|
+
{ keepAlive: true }
|
|
74
68
|
);
|
|
75
69
|
this.adminClient.connect();
|
|
76
70
|
}
|
|
77
71
|
|
|
78
|
-
getConnection = (
|
|
79
|
-
onError: ((err: any) => void) | undefined,
|
|
80
|
-
extraOptions?: pg.ClientConfig,
|
|
81
|
-
) => {
|
|
72
|
+
getConnection = (onError: ((err: any) => void) | undefined, extraOptions?: pg.ClientConfig) => {
|
|
82
73
|
const connectionInfo =
|
|
83
|
-
typeof this.db.$cn === "string"
|
|
84
|
-
? { connectionString: this.db.$cn }
|
|
85
|
-
: (this.db.$cn as any);
|
|
74
|
+
typeof this.db.$cn === "string" ? { connectionString: this.db.$cn } : (this.db.$cn as any);
|
|
86
75
|
const client = new pg.Client({ ...connectionInfo, ...extraOptions });
|
|
87
76
|
client.on("error", (err) => {
|
|
88
77
|
onError?.(err);
|
|
@@ -100,9 +89,7 @@ export class QueryStreamer {
|
|
|
100
89
|
delete this.socketQueries[socketId];
|
|
101
90
|
};
|
|
102
91
|
|
|
103
|
-
create = async (
|
|
104
|
-
query: ClientStreamedRequest,
|
|
105
|
-
): Promise<SocketSQLStreamServer> => {
|
|
92
|
+
create = async (query: ClientStreamedRequest): Promise<SocketSQLStreamServer> => {
|
|
106
93
|
const { socket, persistConnection } = query;
|
|
107
94
|
const socketId = socket.id;
|
|
108
95
|
const id = getSetShortSocketId(socketId);
|
|
@@ -123,10 +110,10 @@ export class QueryStreamer {
|
|
|
123
110
|
if (errored) return;
|
|
124
111
|
errored = true;
|
|
125
112
|
|
|
126
|
-
const errorWithoutQuery = getSerializedClientErrorFromPGError(
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
);
|
|
113
|
+
const errorWithoutQuery = getSerializedClientErrorFromPGError(rawError, {
|
|
114
|
+
type: "sql",
|
|
115
|
+
localParams: { socket },
|
|
116
|
+
});
|
|
130
117
|
// For some reason query is not present on the error object from sql stream mode
|
|
131
118
|
const error = { ...errorWithoutQuery, query: query.query };
|
|
132
119
|
socket.emit(channel, {
|
|
@@ -135,14 +122,12 @@ export class QueryStreamer {
|
|
|
135
122
|
} satisfies SocketSQLStreamPacket);
|
|
136
123
|
},
|
|
137
124
|
};
|
|
125
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
138
126
|
this.socketQueries[socketId]![id] ??= socketQuery;
|
|
139
127
|
let processID = -1;
|
|
140
128
|
let streamState: "started" | "ended" | "errored" | undefined;
|
|
141
129
|
|
|
142
|
-
const startStream = async (
|
|
143
|
-
client: pg.Client | undefined,
|
|
144
|
-
query: ClientStreamedRequest,
|
|
145
|
-
) => {
|
|
130
|
+
const startStream = async (client: pg.Client | undefined, query: ClientStreamedRequest) => {
|
|
146
131
|
const socketQuery = this.socketQueries[socketId]?.[id];
|
|
147
132
|
if (!socketQuery) {
|
|
148
133
|
throw "socket query not found";
|
|
@@ -157,10 +142,8 @@ export class QueryStreamer {
|
|
|
157
142
|
}:
|
|
158
143
|
| { reachedEnd: true; rows: any[]; info: Info }
|
|
159
144
|
| { reachedEnd: false; rows: any[]; info: Omit<Info, "command"> }) => {
|
|
160
|
-
if (!info
|
|
161
|
-
const fields = getDetailedFieldInfo.bind(this.dboBuilder)(
|
|
162
|
-
info.fields as any,
|
|
163
|
-
);
|
|
145
|
+
if (!(info as any).fields) throw "No fields";
|
|
146
|
+
const fields = getDetailedFieldInfo.bind(this.dboBuilder)(info.fields as any);
|
|
164
147
|
const packet: SocketSQLStreamPacket = {
|
|
165
148
|
type: "data",
|
|
166
149
|
rows,
|
|
@@ -193,16 +176,14 @@ export class QueryStreamer {
|
|
|
193
176
|
|
|
194
177
|
if (
|
|
195
178
|
query.options?.streamLimit &&
|
|
196
|
-
(!Number.isInteger(query.options.streamLimit) ||
|
|
197
|
-
query.options.streamLimit < 0)
|
|
179
|
+
(!Number.isInteger(query.options.streamLimit) || query.options.streamLimit < 0)
|
|
198
180
|
) {
|
|
199
181
|
throw "streamLimit must be a positive integer";
|
|
200
182
|
}
|
|
201
|
-
const batchSize =
|
|
202
|
-
? Math.min(1e3, query.options
|
|
203
|
-
: 1e3;
|
|
183
|
+
const batchSize =
|
|
184
|
+
query.options?.streamLimit ? Math.min(1e3, query.options.streamLimit) : 1e3;
|
|
204
185
|
const cursor = currentClient.query(
|
|
205
|
-
new Cursor(query.query, undefined, { rowMode: "array" })
|
|
186
|
+
new Cursor(query.query, undefined, { rowMode: "array" })
|
|
206
187
|
);
|
|
207
188
|
this.socketQueries[socketId]![id]!.cursor = cursor;
|
|
208
189
|
let streamLimitReached = false;
|
|
@@ -221,8 +202,7 @@ export class QueryStreamer {
|
|
|
221
202
|
]) as Info;
|
|
222
203
|
rowsSent += rowChunk.length;
|
|
223
204
|
streamLimitReached = Boolean(
|
|
224
|
-
query.options?.streamLimit &&
|
|
225
|
-
rowsSent >= query.options.streamLimit,
|
|
205
|
+
query.options?.streamLimit && rowsSent >= query.options.streamLimit
|
|
226
206
|
);
|
|
227
207
|
reachedEnd = rowChunk.length < batchSize;
|
|
228
208
|
emit({
|
|
@@ -241,14 +221,11 @@ export class QueryStreamer {
|
|
|
241
221
|
cursor.close();
|
|
242
222
|
} catch (error: any) {
|
|
243
223
|
streamState = "errored";
|
|
244
|
-
if (
|
|
245
|
-
error.message ===
|
|
246
|
-
"cannot insert multiple commands into a prepared statement"
|
|
247
|
-
) {
|
|
224
|
+
if (error.message === "cannot insert multiple commands into a prepared statement") {
|
|
248
225
|
this.dboBuilder.dbo.sql!(
|
|
249
226
|
query.query,
|
|
250
227
|
{},
|
|
251
|
-
{ returnType: "arrayMode", hasParams: false }
|
|
228
|
+
{ returnType: "arrayMode", hasParams: false }
|
|
252
229
|
)
|
|
253
230
|
.then((res) => {
|
|
254
231
|
emit({
|
|
@@ -276,10 +253,7 @@ export class QueryStreamer {
|
|
|
276
253
|
socket.removeAllListeners(channel);
|
|
277
254
|
delete this.socketQueries[socketId]?.[id];
|
|
278
255
|
};
|
|
279
|
-
const stop = async (
|
|
280
|
-
opts: { terminate?: boolean } | undefined,
|
|
281
|
-
cb: BasicCallback,
|
|
282
|
-
) => {
|
|
256
|
+
const stop = async (opts: { terminate?: boolean } | undefined, cb: BasicCallback) => {
|
|
283
257
|
const { client: queryClient } = this.socketQueries[socketId]?.[id] ?? {};
|
|
284
258
|
if (!queryClient) return;
|
|
285
259
|
if (opts?.terminate) {
|
|
@@ -288,12 +262,10 @@ export class QueryStreamer {
|
|
|
288
262
|
}, 4e3);
|
|
289
263
|
}
|
|
290
264
|
try {
|
|
291
|
-
const stopFunction = opts?.terminate
|
|
292
|
-
? "pg_terminate_backend"
|
|
293
|
-
: "pg_cancel_backend";
|
|
265
|
+
const stopFunction = opts?.terminate ? "pg_terminate_backend" : "pg_cancel_backend";
|
|
294
266
|
const rows = await this.adminClient.query(
|
|
295
267
|
`SELECT ${stopFunction}(pid), pid, state, query FROM pg_stat_activity WHERE pid = $1`,
|
|
296
|
-
[processID]
|
|
268
|
+
[processID]
|
|
297
269
|
);
|
|
298
270
|
cleanup();
|
|
299
271
|
cb({ processID, info: rows.rows[0] });
|
|
@@ -313,10 +285,7 @@ export class QueryStreamer {
|
|
|
313
285
|
socket.removeAllListeners(channel);
|
|
314
286
|
socket.on(
|
|
315
287
|
channel,
|
|
316
|
-
async (
|
|
317
|
-
_data: { query: string; params: any } | undefined,
|
|
318
|
-
cb: BasicCallback,
|
|
319
|
-
) => {
|
|
288
|
+
async (_data: { query: string; params: any } | undefined, cb: BasicCallback) => {
|
|
320
289
|
if (streamState === "started") {
|
|
321
290
|
return cb(processID, "Already started");
|
|
322
291
|
}
|
|
@@ -340,7 +309,7 @@ export class QueryStreamer {
|
|
|
340
309
|
cb(processID, getErrorAsObject(err) ?? "Something went wrong");
|
|
341
310
|
}
|
|
342
311
|
runCount++;
|
|
343
|
-
}
|
|
312
|
+
}
|
|
344
313
|
);
|
|
345
314
|
|
|
346
315
|
/** If not started within 5 seconds then assume it will never happen */
|
|
@@ -2,21 +2,19 @@ import {
|
|
|
2
2
|
AnyObject,
|
|
3
3
|
ColumnInfo,
|
|
4
4
|
FieldFilter,
|
|
5
|
-
ValidatedColumnInfo,
|
|
6
5
|
asName,
|
|
7
6
|
getKeys,
|
|
8
7
|
isEmpty,
|
|
9
8
|
isObject,
|
|
10
9
|
pickKeys,
|
|
11
|
-
unpatchText,
|
|
12
10
|
} from "prostgles-types/dist";
|
|
13
|
-
import { ValidateRowBasic } from "../../PublishParser/PublishParser";
|
|
14
11
|
import { DBHandlerServer } from "../../Prostgles";
|
|
12
|
+
import { ValidateRowBasic } from "../../PublishParser/PublishParser";
|
|
15
13
|
import { asValue } from "../../PubSubManager/PubSubManager";
|
|
16
14
|
import { LocalParams, TableSchemaColumn, pgp } from "../DboBuilder";
|
|
17
|
-
import { TableHandler, ValidatedParams } from "./TableHandler";
|
|
18
15
|
import { parseFunctionObject } from "../QueryBuilder/QueryBuilder";
|
|
19
16
|
import { validateObj } from "../ViewHandler/ViewHandler";
|
|
17
|
+
import { TableHandler, ValidatedParams } from "./TableHandler";
|
|
20
18
|
|
|
21
19
|
type RowFieldDataPlain = {
|
|
22
20
|
type: "plain";
|
|
@@ -58,10 +56,7 @@ export class DataValidator {
|
|
|
58
56
|
|
|
59
57
|
parse = async (args: ParseDataArgs) => {
|
|
60
58
|
const { command } = args;
|
|
61
|
-
const rowFieldData = await getValidatedRowFieldData(
|
|
62
|
-
args,
|
|
63
|
-
this.tableHandler,
|
|
64
|
-
);
|
|
59
|
+
const rowFieldData = await getValidatedRowFieldData(args, this.tableHandler);
|
|
65
60
|
const parsedRowFieldData = await getParsedRowFieldData(rowFieldData, args);
|
|
66
61
|
if (command === "update") {
|
|
67
62
|
if (rowFieldData.some((rowParts) => rowParts.length === 0)) {
|
|
@@ -71,8 +66,7 @@ export class DataValidator {
|
|
|
71
66
|
|
|
72
67
|
return {
|
|
73
68
|
parsedRowFieldData,
|
|
74
|
-
getQuery: () =>
|
|
75
|
-
getQuery(command, parsedRowFieldData, this.tableHandler.escapedName),
|
|
69
|
+
getQuery: () => getQuery(command, parsedRowFieldData, this.tableHandler.escapedName),
|
|
76
70
|
};
|
|
77
71
|
};
|
|
78
72
|
}
|
|
@@ -80,23 +74,20 @@ export class DataValidator {
|
|
|
80
74
|
const getQuery = (
|
|
81
75
|
type: "insert" | "update",
|
|
82
76
|
parsedRowFieldData: ParsedRowFieldData[][],
|
|
83
|
-
escapedTableName: string
|
|
77
|
+
escapedTableName: string
|
|
84
78
|
): string => {
|
|
85
79
|
if (type === "insert") {
|
|
86
80
|
const uniqueColumns = Array.from(
|
|
87
|
-
new Set(
|
|
88
|
-
parsedRowFieldData.flatMap((row) => row.map((r) => r.escapedCol)),
|
|
89
|
-
),
|
|
81
|
+
new Set(parsedRowFieldData.flatMap((row) => row.map((r) => r.escapedCol)))
|
|
90
82
|
);
|
|
91
83
|
const values = parsedRowFieldData
|
|
92
84
|
.map(
|
|
93
85
|
(row) =>
|
|
94
|
-
`(${uniqueColumns.map((colName) => row.find((r) => r.escapedCol === colName)?.escapedVal ?? "DEFAULT")})
|
|
86
|
+
`(${uniqueColumns.map((colName) => row.find((r) => r.escapedCol === colName)?.escapedVal ?? "DEFAULT")})`
|
|
95
87
|
)
|
|
96
88
|
.join(",\n");
|
|
97
|
-
const whatToInsert =
|
|
98
|
-
? "DEFAULT VALUES"
|
|
99
|
-
: `(${uniqueColumns}) VALUES ${values}`;
|
|
89
|
+
const whatToInsert =
|
|
90
|
+
!uniqueColumns.length ? "DEFAULT VALUES" : `(${uniqueColumns}) VALUES ${values}`;
|
|
100
91
|
return `INSERT INTO ${escapedTableName} ${whatToInsert} `;
|
|
101
92
|
} else {
|
|
102
93
|
const query =
|
|
@@ -104,9 +95,7 @@ const getQuery = (
|
|
|
104
95
|
.map((rowParts) => {
|
|
105
96
|
return (
|
|
106
97
|
`UPDATE ${escapedTableName} SET ` +
|
|
107
|
-
rowParts
|
|
108
|
-
.map((r) => `${r.escapedCol} = ${r.escapedVal} `)
|
|
109
|
-
.join(",\n")
|
|
98
|
+
rowParts.map((r) => `${r.escapedCol} = ${r.escapedVal} `).join(",\n")
|
|
110
99
|
);
|
|
111
100
|
})
|
|
112
101
|
.join(";\n") + " ";
|
|
@@ -142,10 +131,7 @@ const getValidatedRow = ({
|
|
|
142
131
|
if (!column_names.length) {
|
|
143
132
|
throw "table column_names mising";
|
|
144
133
|
}
|
|
145
|
-
const validatedAllowedColumns = tableHandler.parseFieldFilter(
|
|
146
|
-
allowedCols,
|
|
147
|
-
false,
|
|
148
|
-
);
|
|
134
|
+
const validatedAllowedColumns = tableHandler.parseFieldFilter(allowedCols, false);
|
|
149
135
|
|
|
150
136
|
let finalRow = { ...row };
|
|
151
137
|
if (removeDisallowedFields && !isEmpty(finalRow)) {
|
|
@@ -179,7 +165,7 @@ export const prepareNewData = async ({
|
|
|
179
165
|
tableConfigurator,
|
|
180
166
|
tableHandler,
|
|
181
167
|
}: ValidatedParams) => {
|
|
182
|
-
const synced_field = (tableRules ?? {})
|
|
168
|
+
const synced_field = (tableRules ?? {}).sync?.synced_field;
|
|
183
169
|
|
|
184
170
|
/* Update synced_field if sync is on and missing */
|
|
185
171
|
if (synced_field && !row[synced_field]) {
|
|
@@ -201,16 +187,8 @@ export const prepareNewData = async ({
|
|
|
201
187
|
col,
|
|
202
188
|
value: data[col],
|
|
203
189
|
});
|
|
204
|
-
const colConfig = tableConfigurator?.getColumnConfig(
|
|
205
|
-
|
|
206
|
-
col,
|
|
207
|
-
);
|
|
208
|
-
if (
|
|
209
|
-
colConfig &&
|
|
210
|
-
isObject(colConfig) &&
|
|
211
|
-
"isText" in colConfig &&
|
|
212
|
-
data[col]
|
|
213
|
-
) {
|
|
190
|
+
const colConfig = tableConfigurator?.getColumnConfig(tableHandler.name, col);
|
|
191
|
+
if (colConfig && isObject(colConfig) && "isText" in colConfig && data[col]) {
|
|
214
192
|
if (colConfig.lowerCased) {
|
|
215
193
|
data[col] = data[col].toString().toLowerCase();
|
|
216
194
|
}
|
|
@@ -235,7 +213,7 @@ export const prepareNewData = async ({
|
|
|
235
213
|
*/
|
|
236
214
|
const getValidatedRowFieldData = async (
|
|
237
215
|
{ allowedCols, rows, validationOptions, dbTx, command }: ParseDataArgs,
|
|
238
|
-
tableHandler: TableHandler
|
|
216
|
+
tableHandler: TableHandler
|
|
239
217
|
) => {
|
|
240
218
|
if (!allowedCols.length && command === "update") {
|
|
241
219
|
throw "allowedColumns cannot be empty";
|
|
@@ -255,7 +233,7 @@ const getValidatedRowFieldData = async (
|
|
|
255
233
|
});
|
|
256
234
|
}
|
|
257
235
|
const keysAddedDuringValidate = Object.keys(row).filter(
|
|
258
|
-
(newKey) => !initialRowKeys.includes(newKey)
|
|
236
|
+
(newKey) => !initialRowKeys.includes(newKey)
|
|
259
237
|
);
|
|
260
238
|
|
|
261
239
|
const getColumn = (fieldName: string) => {
|
|
@@ -269,44 +247,42 @@ const getValidatedRowFieldData = async (
|
|
|
269
247
|
return column;
|
|
270
248
|
};
|
|
271
249
|
|
|
272
|
-
const rowPartValues = Object.entries(row).map(
|
|
273
|
-
(
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
} satisfies RowFieldData;
|
|
298
|
-
}
|
|
250
|
+
const rowPartValues = Object.entries(row).map(([fieldName, fieldValue]) => {
|
|
251
|
+
const column = getColumn(fieldName);
|
|
252
|
+
if (isObject(fieldValue)) {
|
|
253
|
+
// const textPatch = getTextPatch(column, fieldValue);
|
|
254
|
+
// if(textPatch){
|
|
255
|
+
// return {
|
|
256
|
+
// type: "plain",
|
|
257
|
+
// column,
|
|
258
|
+
// fieldValue: textPatch,
|
|
259
|
+
// } satisfies RowFieldData;
|
|
260
|
+
// }
|
|
261
|
+
|
|
262
|
+
const [firstKey, ...otherkeys] = Object.keys(fieldValue);
|
|
263
|
+
const func =
|
|
264
|
+
firstKey && !otherkeys.length ?
|
|
265
|
+
convertionFuncs.some((f) => `$${f.name}` === firstKey)
|
|
266
|
+
: undefined;
|
|
267
|
+
if (func) {
|
|
268
|
+
const { funcName, args } = parseFunctionObject(fieldValue);
|
|
269
|
+
return {
|
|
270
|
+
type: "function",
|
|
271
|
+
column,
|
|
272
|
+
funcName,
|
|
273
|
+
args,
|
|
274
|
+
} satisfies RowFieldData;
|
|
299
275
|
}
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
}
|
|
306
|
-
);
|
|
276
|
+
}
|
|
277
|
+
return {
|
|
278
|
+
type: "plain",
|
|
279
|
+
column: getColumn(fieldName),
|
|
280
|
+
fieldValue,
|
|
281
|
+
} satisfies RowFieldData;
|
|
282
|
+
});
|
|
307
283
|
|
|
308
284
|
return rowPartValues;
|
|
309
|
-
})
|
|
285
|
+
})
|
|
310
286
|
);
|
|
311
287
|
|
|
312
288
|
return rowFieldData;
|
|
@@ -320,7 +296,7 @@ const getTextPatch = async (c: TableSchemaColumn, fieldValue: any) => {
|
|
|
320
296
|
!["from", "to"].find((key) => typeof fieldValue[key] !== "number")
|
|
321
297
|
) {
|
|
322
298
|
const unrecProps = Object.keys(fieldValue).filter(
|
|
323
|
-
(k) => !["from", "to", "text", "md5"].includes(k)
|
|
299
|
+
(k) => !["from", "to", "text", "md5"].includes(k)
|
|
324
300
|
);
|
|
325
301
|
if (unrecProps.length) {
|
|
326
302
|
throw "Unrecognised params in textPatch field: " + unrecProps.join(", ");
|
|
@@ -352,7 +328,7 @@ const getTextPatch = async (c: TableSchemaColumn, fieldValue: any) => {
|
|
|
352
328
|
|
|
353
329
|
const getParsedRowFieldDataFunction = async (
|
|
354
330
|
rowPart: RowFieldDataFunction,
|
|
355
|
-
args: ParseDataArgs
|
|
331
|
+
args: ParseDataArgs
|
|
356
332
|
) => {
|
|
357
333
|
const func = convertionFuncs.find((f) => `$${f.name}` === rowPart.funcName);
|
|
358
334
|
if (!func) {
|
|
@@ -364,10 +340,7 @@ const getParsedRowFieldDataFunction = async (
|
|
|
364
340
|
return func.getQuery(rowPart);
|
|
365
341
|
};
|
|
366
342
|
|
|
367
|
-
const getParsedRowFieldData = async (
|
|
368
|
-
rowFieldData: RowFieldData[][],
|
|
369
|
-
args: ParseDataArgs,
|
|
370
|
-
) => {
|
|
343
|
+
const getParsedRowFieldData = async (rowFieldData: RowFieldData[][], args: ParseDataArgs) => {
|
|
371
344
|
const parsedRowFieldData = Promise.all(
|
|
372
345
|
rowFieldData.map((rowParts) => {
|
|
373
346
|
return Promise.all(
|
|
@@ -377,12 +350,8 @@ const getParsedRowFieldData = async (
|
|
|
377
350
|
escapedVal = await getParsedRowFieldDataFunction(rowPart, args);
|
|
378
351
|
} else {
|
|
379
352
|
/** Prevent pg-promise formatting jsonb */
|
|
380
|
-
const colIsJSON = ["json", "jsonb"].includes(
|
|
381
|
-
|
|
382
|
-
);
|
|
383
|
-
escapedVal = pgp.as.format(colIsJSON ? "$1:json" : "$1", [
|
|
384
|
-
rowPart.fieldValue,
|
|
385
|
-
]);
|
|
353
|
+
const colIsJSON = ["json", "jsonb"].includes(rowPart.column.data_type);
|
|
354
|
+
escapedVal = pgp.as.format(colIsJSON ? "$1:json" : "$1", [rowPart.fieldValue]);
|
|
386
355
|
}
|
|
387
356
|
|
|
388
357
|
/**
|
|
@@ -394,9 +363,9 @@ const getParsedRowFieldData = async (
|
|
|
394
363
|
escapedCol: asName(rowPart.column.name),
|
|
395
364
|
escapedVal,
|
|
396
365
|
};
|
|
397
|
-
})
|
|
366
|
+
})
|
|
398
367
|
);
|
|
399
|
-
})
|
|
368
|
+
})
|
|
400
369
|
);
|
|
401
370
|
|
|
402
371
|
return parsedRowFieldData;
|
|
@@ -426,12 +395,11 @@ const convertionFuncs: ConvertionFunc[] = [
|
|
|
426
395
|
const argList = args.map((arg) => asValue(arg)).join(", ");
|
|
427
396
|
return `${name}(${argList})`;
|
|
428
397
|
},
|
|
429
|
-
}) satisfies ConvertionFunc
|
|
398
|
+
}) satisfies ConvertionFunc
|
|
430
399
|
),
|
|
431
400
|
{
|
|
432
401
|
name: "to_timestamp",
|
|
433
|
-
getQuery: ({ args }) =>
|
|
434
|
-
`to_timestamp(${asValue(args[0])}::BIGINT/1000.0)::timestamp`,
|
|
402
|
+
getQuery: ({ args }) => `to_timestamp(${asValue(args[0])}::BIGINT/1000.0)::timestamp`,
|
|
435
403
|
},
|
|
436
404
|
{
|
|
437
405
|
name: "merge",
|
|
@@ -48,7 +48,7 @@ export class TableHandler extends ViewHandler {
|
|
|
48
48
|
tableOrViewInfo: TableSchema,
|
|
49
49
|
dboBuilder: DboBuilder,
|
|
50
50
|
tx?: { t: pgPromise.ITask<{}>; dbTX: TableHandlers },
|
|
51
|
-
joinPaths?: JoinPaths
|
|
51
|
+
joinPaths?: JoinPaths
|
|
52
52
|
) {
|
|
53
53
|
super(db, tableOrViewInfo, dboBuilder, tx, joinPaths);
|
|
54
54
|
|
|
@@ -76,20 +76,14 @@ export class TableHandler extends ViewHandler {
|
|
|
76
76
|
param2?: InsertParams,
|
|
77
77
|
param3_unused?: undefined,
|
|
78
78
|
tableRules?: TableRule,
|
|
79
|
-
_localParams?: LocalParams
|
|
79
|
+
_localParams?: LocalParams
|
|
80
80
|
): Promise<any | any[] | boolean> {
|
|
81
|
-
return insert.bind(this)(
|
|
82
|
-
rowOrRows,
|
|
83
|
-
param2,
|
|
84
|
-
param3_unused,
|
|
85
|
-
tableRules,
|
|
86
|
-
_localParams,
|
|
87
|
-
);
|
|
81
|
+
return insert.bind(this)(rowOrRows, param2, param3_unused, tableRules, _localParams);
|
|
88
82
|
}
|
|
89
83
|
|
|
90
84
|
prepareReturning = async (
|
|
91
85
|
returning: Select | undefined,
|
|
92
|
-
allowedFields: string[]
|
|
86
|
+
allowedFields: string[]
|
|
93
87
|
): Promise<SelectItem[]> => {
|
|
94
88
|
const result: SelectItem[] = [];
|
|
95
89
|
if (returning) {
|
|
@@ -98,9 +92,7 @@ export class TableHandler extends ViewHandler {
|
|
|
98
92
|
allowedFields,
|
|
99
93
|
allowedOrderByFields: allowedFields,
|
|
100
94
|
computedFields: COMPUTED_FIELDS,
|
|
101
|
-
functions: FUNCTIONS.filter(
|
|
102
|
-
(f) => f.type === "function" && f.singleColArg,
|
|
103
|
-
),
|
|
95
|
+
functions: FUNCTIONS.filter((f) => f.type === "function" && f.singleColArg),
|
|
104
96
|
isView: this.is_view,
|
|
105
97
|
columns: this.columns,
|
|
106
98
|
});
|
|
@@ -122,15 +114,9 @@ export class TableHandler extends ViewHandler {
|
|
|
122
114
|
params?: DeleteParams,
|
|
123
115
|
param3_unused?: undefined,
|
|
124
116
|
table_rules?: TableRule,
|
|
125
|
-
localParams?: LocalParams
|
|
117
|
+
localParams?: LocalParams
|
|
126
118
|
): Promise<any> {
|
|
127
|
-
return _delete.bind(this)(
|
|
128
|
-
filter,
|
|
129
|
-
params,
|
|
130
|
-
param3_unused,
|
|
131
|
-
table_rules,
|
|
132
|
-
localParams,
|
|
133
|
-
);
|
|
119
|
+
return _delete.bind(this)(filter, params, param3_unused, table_rules, localParams);
|
|
134
120
|
}
|
|
135
121
|
|
|
136
122
|
remove(
|
|
@@ -138,7 +124,7 @@ export class TableHandler extends ViewHandler {
|
|
|
138
124
|
params?: UpdateParams,
|
|
139
125
|
param3_unused?: undefined,
|
|
140
126
|
tableRules?: TableRule,
|
|
141
|
-
localParams?: LocalParams
|
|
127
|
+
localParams?: LocalParams
|
|
142
128
|
) {
|
|
143
129
|
return this.delete(filter, params, param3_unused, tableRules, localParams);
|
|
144
130
|
}
|
|
@@ -151,7 +137,7 @@ export class TableHandler extends ViewHandler {
|
|
|
151
137
|
params: { select?: FieldFilter },
|
|
152
138
|
param3_unused: undefined,
|
|
153
139
|
table_rules: TableRule,
|
|
154
|
-
localParams: LocalParams
|
|
140
|
+
localParams: LocalParams
|
|
155
141
|
) {
|
|
156
142
|
const start = Date.now();
|
|
157
143
|
try {
|
|
@@ -159,50 +145,38 @@ export class TableHandler extends ViewHandler {
|
|
|
159
145
|
throw "Cannot subscribe. PubSubManager not initiated";
|
|
160
146
|
}
|
|
161
147
|
|
|
148
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
162
149
|
if (!localParams) throw "Sync not allowed within the server code";
|
|
163
150
|
const { socket } = localParams;
|
|
164
151
|
if (!socket) throw "socket missing";
|
|
165
152
|
|
|
153
|
+
// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
|
|
166
154
|
if (!table_rules || !table_rules.sync || !table_rules.select)
|
|
167
155
|
throw "sync or select table rules missing";
|
|
168
156
|
|
|
169
157
|
if (this.tx) throw "Sync not allowed within transactions";
|
|
170
158
|
|
|
171
159
|
const ALLOWED_PARAMS = ["select"];
|
|
172
|
-
const invalidParams = Object.keys(params
|
|
173
|
-
(k) => !ALLOWED_PARAMS.includes(k),
|
|
174
|
-
);
|
|
160
|
+
const invalidParams = Object.keys(params).filter((k) => !ALLOWED_PARAMS.includes(k));
|
|
175
161
|
if (invalidParams.length)
|
|
176
|
-
throw (
|
|
177
|
-
"Invalid or dissallowed params found: " + invalidParams.join(", ")
|
|
178
|
-
);
|
|
162
|
+
throw "Invalid or dissallowed params found: " + invalidParams.join(", ");
|
|
179
163
|
|
|
180
164
|
const { synced_field, allow_delete }: SyncRule = table_rules.sync;
|
|
181
165
|
|
|
182
166
|
if (!table_rules.sync.id_fields.length || !synced_field) {
|
|
183
|
-
const err =
|
|
184
|
-
"INTERNAL ERROR: id_fields OR synced_field missing from publish";
|
|
167
|
+
const err = "INTERNAL ERROR: id_fields OR synced_field missing from publish";
|
|
185
168
|
console.error(err);
|
|
186
169
|
throw err;
|
|
187
170
|
}
|
|
188
171
|
|
|
189
|
-
const id_fields = this.parseFieldFilter(
|
|
190
|
-
table_rules.sync.id_fields,
|
|
191
|
-
false,
|
|
192
|
-
);
|
|
172
|
+
const id_fields = this.parseFieldFilter(table_rules.sync.id_fields, false);
|
|
193
173
|
const syncFields = [...id_fields, synced_field];
|
|
194
174
|
|
|
195
|
-
const allowedSelect = this.parseFieldFilter(
|
|
196
|
-
table_rules?.select.fields ?? false,
|
|
197
|
-
);
|
|
175
|
+
const allowedSelect = this.parseFieldFilter(table_rules.select.fields);
|
|
198
176
|
if (syncFields.find((f) => !allowedSelect.includes(f))) {
|
|
199
177
|
throw `INTERNAL ERROR: sync field missing from publish.${this.name}.select.fields`;
|
|
200
178
|
}
|
|
201
|
-
const select = this.getAllowedSelectFields(
|
|
202
|
-
params?.select ?? "*",
|
|
203
|
-
allowedSelect,
|
|
204
|
-
false,
|
|
205
|
-
);
|
|
179
|
+
const select = this.getAllowedSelectFields(params.select ?? "*", allowedSelect, false);
|
|
206
180
|
if (!select.length) throw "Empty select not allowed";
|
|
207
181
|
|
|
208
182
|
/* Add sync fields if missing */
|
|
@@ -216,9 +190,9 @@ export class TableHandler extends ViewHandler {
|
|
|
216
190
|
{ select, limit: 0 },
|
|
217
191
|
undefined,
|
|
218
192
|
table_rules,
|
|
219
|
-
localParams
|
|
193
|
+
localParams
|
|
220
194
|
).then(async (_isValid) => {
|
|
221
|
-
const { filterFields, forcedFilter } = table_rules
|
|
195
|
+
const { filterFields, forcedFilter } = table_rules.select || {};
|
|
222
196
|
const condition = (
|
|
223
197
|
await this.prepareWhere({
|
|
224
198
|
select: undefined,
|