prostgles-server 3.0.87 → 3.0.89
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 +5 -0
- package/.eslintrc.json +30 -0
- package/dist/DBEventsManager.js +1 -1
- package/dist/DBEventsManager.js.map +1 -1
- package/dist/DBSchemaBuilder.d.ts.map +1 -1
- package/dist/DBSchemaBuilder.js +6 -6
- package/dist/DBSchemaBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/Functions.js +9 -9
- 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 +8 -7
- package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
- package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -1
- package/dist/DboBuilder/TableHandler.d.ts.map +1 -1
- package/dist/DboBuilder/TableHandler.js +18 -20
- package/dist/DboBuilder/TableHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler.d.ts +0 -10
- package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/dist/DboBuilder/ViewHandler.js +50 -63
- package/dist/DboBuilder/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/delete.js +0 -1
- package/dist/DboBuilder/delete.js.map +1 -1
- package/dist/DboBuilder/getColumns.js +5 -4
- package/dist/DboBuilder/getColumns.js.map +1 -1
- package/dist/DboBuilder/getCondition.d.ts.map +1 -1
- package/dist/DboBuilder/getCondition.js +6 -6
- package/dist/DboBuilder/getCondition.js.map +1 -1
- package/dist/DboBuilder/insert.js +15 -16
- package/dist/DboBuilder/insert.js.map +1 -1
- package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/dist/DboBuilder/insertDataParse.js +9 -10
- package/dist/DboBuilder/insertDataParse.js.map +1 -1
- package/dist/DboBuilder/parseUpdateRules.js +2 -2
- package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
- package/dist/DboBuilder/runSQL.d.ts.map +1 -1
- package/dist/DboBuilder/runSQL.js +5 -5
- package/dist/DboBuilder/runSQL.js.map +1 -1
- package/dist/DboBuilder/subscribe.js +3 -3
- package/dist/DboBuilder/subscribe.js.map +1 -1
- package/dist/DboBuilder/update.js +5 -6
- package/dist/DboBuilder/update.js.map +1 -1
- package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
- package/dist/DboBuilder/uploadFile.js +1 -1
- package/dist/DboBuilder/uploadFile.js.map +1 -1
- package/dist/DboBuilder.d.ts.map +1 -1
- package/dist/DboBuilder.js +13 -14
- package/dist/DboBuilder.js.map +1 -1
- package/dist/FileManager.d.ts.map +1 -1
- package/dist/FileManager.js +3 -5
- package/dist/FileManager.js.map +1 -1
- package/dist/Filtering.js +7 -7
- package/dist/Filtering.js.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js +295 -0
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -0
- package/dist/JSONBValidation/validation.d.ts +108 -0
- package/dist/JSONBValidation/validation.d.ts.map +1 -0
- package/dist/JSONBValidation/validation.js +222 -0
- package/dist/JSONBValidation/validation.js.map +1 -0
- package/dist/PostgresNotifListenManager.js +1 -1
- package/dist/PostgresNotifListenManager.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +20 -20
- package/dist/Prostgles.js.map +1 -1
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +10 -7
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/PublishParser.d.ts.map +1 -1
- package/dist/PublishParser.js +122 -125
- package/dist/PublishParser.js.map +1 -1
- package/dist/SyncReplication.d.ts.map +1 -1
- package/dist/SyncReplication.js +19 -16
- package/dist/SyncReplication.js.map +1 -1
- package/dist/TableConfig.d.ts +9 -5
- package/dist/TableConfig.d.ts.map +1 -1
- package/dist/TableConfig.js +33 -12
- package/dist/TableConfig.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/shortestPath.js +11 -11
- package/dist/shortestPath.js.map +1 -1
- package/dist/validation.d.ts +50 -24
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +177 -53
- package/dist/validation.js.map +1 -1
- package/lib/AuthHandler.d.ts +11 -11
- package/lib/AuthHandler.d.ts.map +1 -1
- package/lib/DBEventsManager.js +1 -1
- package/lib/DBEventsManager.ts +1 -1
- package/lib/DBSchemaBuilder.d.ts +3 -3
- package/lib/DBSchemaBuilder.d.ts.map +1 -1
- package/lib/DBSchemaBuilder.js +6 -6
- package/lib/DBSchemaBuilder.ts +10 -12
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts +3 -3
- package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/Functions.js +9 -9
- package/lib/DboBuilder/QueryBuilder/Functions.ts +13 -13
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +3 -3
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
- package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +12 -12
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
- package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +5 -5
- package/lib/DboBuilder/TableHandler.d.ts +1 -1
- package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
- package/lib/DboBuilder/TableHandler.js +18 -20
- package/lib/DboBuilder/TableHandler.ts +21 -20
- package/lib/DboBuilder/ViewHandler.d.ts +1 -11
- package/lib/DboBuilder/ViewHandler.d.ts.map +1 -1
- package/lib/DboBuilder/ViewHandler.js +50 -63
- package/lib/DboBuilder/ViewHandler.ts +68 -97
- package/lib/DboBuilder/delete.js +0 -1
- package/lib/DboBuilder/delete.ts +1 -1
- package/lib/DboBuilder/getColumns.js +5 -4
- package/lib/DboBuilder/getColumns.ts +5 -5
- package/lib/DboBuilder/getCondition.d.ts.map +1 -1
- package/lib/DboBuilder/getCondition.js +6 -6
- package/lib/DboBuilder/getCondition.ts +7 -7
- package/lib/DboBuilder/insert.js +15 -16
- package/lib/DboBuilder/insert.ts +18 -18
- package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
- package/lib/DboBuilder/insertDataParse.js +9 -10
- package/lib/DboBuilder/insertDataParse.ts +42 -43
- package/lib/DboBuilder/parseUpdateRules.js +2 -2
- package/lib/DboBuilder/parseUpdateRules.ts +2 -2
- package/lib/DboBuilder/runSQL.d.ts.map +1 -1
- package/lib/DboBuilder/runSQL.js +5 -5
- package/lib/DboBuilder/runSQL.ts +6 -6
- package/lib/DboBuilder/subscribe.d.ts +1 -1
- package/lib/DboBuilder/subscribe.d.ts.map +1 -1
- package/lib/DboBuilder/subscribe.js +3 -3
- package/lib/DboBuilder/subscribe.ts +3 -3
- package/lib/DboBuilder/update.js +5 -6
- package/lib/DboBuilder/update.ts +6 -6
- package/lib/DboBuilder/uploadFile.d.ts.map +1 -1
- package/lib/DboBuilder/uploadFile.js +1 -1
- package/lib/DboBuilder/uploadFile.ts +2 -2
- package/lib/DboBuilder.d.ts +22 -22
- package/lib/DboBuilder.d.ts.map +1 -1
- package/lib/DboBuilder.js +13 -14
- package/lib/DboBuilder.ts +19 -19
- package/lib/FileManager.d.ts +6 -6
- package/lib/FileManager.d.ts.map +1 -1
- package/lib/FileManager.js +3 -5
- package/lib/FileManager.ts +7 -6
- package/lib/Filtering.d.ts +1 -1
- package/lib/Filtering.d.ts.map +1 -1
- package/lib/Filtering.js +7 -7
- package/lib/Filtering.ts +7 -7
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +294 -0
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +293 -0
- package/lib/JSONBValidation/validation.d.ts +108 -0
- package/lib/JSONBValidation/validation.d.ts.map +1 -0
- package/lib/JSONBValidation/validation.js +221 -0
- package/lib/JSONBValidation/validation.ts +332 -0
- package/lib/PostgresNotifListenManager.d.ts +1 -1
- package/lib/PostgresNotifListenManager.d.ts.map +1 -1
- package/lib/PostgresNotifListenManager.js +1 -1
- package/lib/PostgresNotifListenManager.ts +1 -1
- package/lib/Prostgles.d.ts +14 -14
- package/lib/Prostgles.d.ts.map +1 -1
- package/lib/Prostgles.js +20 -20
- package/lib/Prostgles.ts +22 -21
- package/lib/PubSubManager/PubSubManager.d.ts +7 -7
- package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/initPubSubManager.js +10 -7
- package/lib/PubSubManager/initPubSubManager.ts +12 -7
- package/lib/PublishParser.d.ts +32 -32
- package/lib/PublishParser.d.ts.map +1 -1
- package/lib/PublishParser.js +121 -124
- package/lib/PublishParser.ts +125 -127
- package/lib/SchemaWatch.d.ts +1 -1
- package/lib/SchemaWatch.d.ts.map +1 -1
- package/lib/SyncReplication.d.ts +5 -5
- package/lib/SyncReplication.d.ts.map +1 -1
- package/lib/SyncReplication.js +19 -16
- package/lib/SyncReplication.ts +470 -471
- package/lib/TableConfig.d.ts +28 -24
- package/lib/TableConfig.d.ts.map +1 -1
- package/lib/TableConfig.js +33 -12
- package/lib/TableConfig.ts +55 -21
- package/lib/index.js +1 -1
- package/lib/index.ts +1 -1
- package/lib/shortestPath.d.ts +1 -1
- package/lib/shortestPath.d.ts.map +1 -1
- package/lib/shortestPath.js +11 -11
- package/lib/shortestPath.ts +11 -11
- package/package.json +10 -6
- package/tests/client/PID.txt +1 -1
- package/tests/client/package-lock.json +53 -31
- package/tests/client/package.json +4 -1
- package/tests/isomorphic_queries.d.ts +4 -1
- package/tests/isomorphic_queries.d.ts.map +1 -1
- package/tests/isomorphic_queries.js +38 -30
- package/tests/isomorphic_queries.ts +40 -33
- package/tests/server/DBoGenerated.d.ts +1 -1
- package/tests/server/index.js +8 -7
- package/tests/server/index.ts +10 -8
- package/tests/server/package-lock.json +76 -58
- package/tests/server/package.json +2 -2
- package/tests/server/server.ts +2 -3
- package/lib/validation.d.ts +0 -100
- package/lib/validation.d.ts.map +0 -1
- package/lib/validation.js +0 -280
- package/lib/validation.ts +0 -360
package/lib/PublishParser.js
CHANGED
|
@@ -112,7 +112,7 @@ class PublishParser {
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
async getAllowedMethods(socket, userData) {
|
|
115
|
-
|
|
115
|
+
const methods = {};
|
|
116
116
|
const publishParams = await this.getPublishParams({ socket }, userData);
|
|
117
117
|
const _methods = await applyParamsIfFunc(this.publishMethods, publishParams);
|
|
118
118
|
if (_methods && Object.keys(_methods).length) {
|
|
@@ -136,9 +136,9 @@ class PublishParser {
|
|
|
136
136
|
*/
|
|
137
137
|
async getPublish(localParams, clientInfo) {
|
|
138
138
|
const publishParams = await this.getPublishParams(localParams, clientInfo);
|
|
139
|
-
|
|
139
|
+
const _publish = await applyParamsIfFunc(this.publish, publishParams);
|
|
140
140
|
if (_publish === "*") {
|
|
141
|
-
|
|
141
|
+
const publish = {};
|
|
142
142
|
this.prostgles.dboBuilder.tablesOrViews?.map(tov => {
|
|
143
143
|
publish[tov.name] = "*";
|
|
144
144
|
});
|
|
@@ -155,7 +155,7 @@ class PublishParser {
|
|
|
155
155
|
throw "INTERNAL ERROR: dbo is missing";
|
|
156
156
|
if (!command || !tableName)
|
|
157
157
|
throw "command OR tableName are missing";
|
|
158
|
-
|
|
158
|
+
const rtm = RULE_TO_METHODS.find(rtms => rtms.methods.includes(command));
|
|
159
159
|
if (!rtm) {
|
|
160
160
|
throw "Invalid command: " + command;
|
|
161
161
|
}
|
|
@@ -173,7 +173,7 @@ class PublishParser {
|
|
|
173
173
|
const schm = localParams?.socket?.prostgles?.schema?.[tableName]?.[command];
|
|
174
174
|
if (schm && schm.err)
|
|
175
175
|
throw schm.err;
|
|
176
|
-
|
|
176
|
+
const table_rule = await this.getTableRules({ tableName, localParams }, clientInfo);
|
|
177
177
|
if (!table_rule)
|
|
178
178
|
throw { stack: ["getValidatedRequestRule()"], message: "Invalid or disallowed table: " + tableName };
|
|
179
179
|
if (command === "upsert") {
|
|
@@ -188,143 +188,140 @@ class PublishParser {
|
|
|
188
188
|
throw { stack: ["getValidatedRequestRule()"], message: `Invalid or disallowed command: ${tableName}.${command}` };
|
|
189
189
|
}
|
|
190
190
|
async getTableRules({ tableName, localParams }, clientInfo) {
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
191
|
+
if (!localParams || !tableName)
|
|
192
|
+
throw { stack: ["getTableRules()"], message: "publish OR socket OR dbo OR tableName are missing" };
|
|
193
|
+
const _publish = await this.getPublish(localParams, clientInfo);
|
|
194
|
+
const raw_table_rules = _publish[tableName];
|
|
195
|
+
if (!raw_table_rules || (0, prostgles_types_1.isObject)(raw_table_rules) && Object.values(raw_table_rules).every(v => !v)) {
|
|
196
|
+
return undefined;
|
|
197
|
+
}
|
|
198
|
+
let parsed_table = {};
|
|
199
|
+
/* Get view or table specific rules */
|
|
200
|
+
const tHandler = this.dbo[tableName];
|
|
201
|
+
const is_view = tHandler.is_view;
|
|
202
|
+
const canSubscribe = (!is_view || tHandler.columns.some(c => c.references));
|
|
203
|
+
if (!tHandler) {
|
|
204
|
+
throw { stack: ["getTableRules()"], message: `${tableName} could not be found in dbo` };
|
|
205
|
+
}
|
|
206
|
+
const MY_RULES = RULE_TO_METHODS.filter(r => {
|
|
207
|
+
/** Check PG User privileges */
|
|
208
|
+
const pgUserIsAllowedThis = tHandler.tableOrViewInfo.privileges[r.sqlRule];
|
|
209
|
+
let result = (!is_view || !r.table_only) && pgUserIsAllowedThis;
|
|
210
|
+
if (!pgUserIsAllowedThis && (0, DboBuilder_1.isPlainObject)(raw_table_rules) && raw_table_rules[r.sqlRule]) {
|
|
211
|
+
throw `Your postgres user is not allowed ${r.sqlRule} on table ${tableName}`;
|
|
212
|
+
}
|
|
213
|
+
if ((r.rule === "subscribe" || r.rule === "sync") && !this.prostgles.isSuperUser) {
|
|
214
|
+
result = false;
|
|
215
|
+
if ((0, DboBuilder_1.isPlainObject)(raw_table_rules) && raw_table_rules[r.rule]) {
|
|
216
|
+
throw `Cannot publish realtime rule ${tableName}.${r.rule}. Superuser is required for this`;
|
|
217
|
+
}
|
|
198
218
|
}
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
const tHandler = this.dbo[tableName];
|
|
202
|
-
const is_view = tHandler.is_view;
|
|
203
|
-
const canSubscribe = (!is_view || tHandler.columns.some(c => c.references));
|
|
204
|
-
if (!tHandler) {
|
|
205
|
-
throw { stack: ["getTableRules()"], message: `${tableName} could not be found in dbo` };
|
|
219
|
+
if (r.rule === "subscribe" && !canSubscribe) {
|
|
220
|
+
result = false;
|
|
206
221
|
}
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
222
|
+
return result;
|
|
223
|
+
});
|
|
224
|
+
/* All methods allowed. Add no limits for table rules */
|
|
225
|
+
if ([true, "*"].includes(raw_table_rules)) {
|
|
226
|
+
parsed_table = {};
|
|
227
|
+
MY_RULES.filter(r => r.no_limits).forEach(r => {
|
|
228
|
+
parsed_table[r.rule] = { ...r.no_limits };
|
|
229
|
+
});
|
|
230
|
+
/** Specific rules allowed */
|
|
231
|
+
}
|
|
232
|
+
else if ((0, DboBuilder_1.isPlainObject)(raw_table_rules) && (0, prostgles_types_1.getKeys)(raw_table_rules).length) {
|
|
233
|
+
const allRuleKeys = (0, prostgles_types_1.getKeys)(raw_table_rules);
|
|
234
|
+
const dissallowedRuleKeys = allRuleKeys.filter(m => !raw_table_rules[m]);
|
|
235
|
+
MY_RULES.map(r => {
|
|
236
|
+
/** Unless specifically disabled these are allowed */
|
|
237
|
+
if (["getInfo", "getColumns"].includes(r.rule) && !dissallowedRuleKeys.includes(r.rule)) {
|
|
238
|
+
parsed_table[r.rule] = r.no_limits;
|
|
239
|
+
return;
|
|
213
240
|
}
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
}
|
|
241
|
+
/** Add no_limit values for implied/ fully allowed methods */
|
|
242
|
+
if ([true, "*"].includes(raw_table_rules[r.rule]) && r.no_limits) {
|
|
243
|
+
parsed_table[r.rule] = Object.assign({}, r.no_limits);
|
|
244
|
+
/** Carry over detailed config */
|
|
219
245
|
}
|
|
220
|
-
if (r.rule
|
|
221
|
-
|
|
246
|
+
else if ((0, DboBuilder_1.isPlainObject)(raw_table_rules[r.rule])) {
|
|
247
|
+
parsed_table[r.rule] = raw_table_rules[r.rule];
|
|
222
248
|
}
|
|
223
|
-
return result;
|
|
224
249
|
});
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
MY_RULES.
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
else if ((0, DboBuilder_1.isPlainObject)(raw_table_rules) && (0, prostgles_types_1.getKeys)(raw_table_rules).length) {
|
|
234
|
-
const allRuleKeys = (0, prostgles_types_1.getKeys)(raw_table_rules);
|
|
235
|
-
const dissallowedRuleKeys = allRuleKeys.filter(m => !raw_table_rules[m]);
|
|
236
|
-
MY_RULES.map(r => {
|
|
237
|
-
/** Unless specifically disabled these are allowed */
|
|
238
|
-
if (["getInfo", "getColumns"].includes(r.rule) && !dissallowedRuleKeys.includes(r.rule)) {
|
|
239
|
-
parsed_table[r.rule] = r.no_limits;
|
|
240
|
-
return;
|
|
250
|
+
allRuleKeys.filter(m => parsed_table[m])
|
|
251
|
+
.forEach((method) => {
|
|
252
|
+
const rule = parsed_table[method];
|
|
253
|
+
const rm = MY_RULES.find(r => r.rule === method || r.methods.includes(method));
|
|
254
|
+
if (!rm) {
|
|
255
|
+
let extraInfo = "";
|
|
256
|
+
if (is_view && RULE_TO_METHODS.find(r => !is_view && r.rule === method || r.methods.includes(method))) {
|
|
257
|
+
extraInfo = "You've specified table rules to a view\n";
|
|
241
258
|
}
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
259
|
+
throw `Invalid rule in publish.${tableName} -> ${method} \n${extraInfo}Expecting any of: ${MY_RULES.flatMap(r => [r.rule, ...r.methods]).join(", ")}`;
|
|
260
|
+
}
|
|
261
|
+
/* Check RULES for invalid params */
|
|
262
|
+
/* Methods do not have params -> They use them from rules */
|
|
263
|
+
if (method === rm.rule && (0, prostgles_types_1.isObject)(rule)) {
|
|
264
|
+
const method_params = (0, prostgles_types_1.getKeys)(rule);
|
|
265
|
+
const iparam = method_params.find(p => !rm?.allowed_params.includes(p));
|
|
266
|
+
if (iparam) {
|
|
267
|
+
throw `Invalid setting in publish.${tableName}.${method} -> ${iparam}. \n Expecting any of: ${rm.allowed_params.join(", ")}`;
|
|
246
268
|
}
|
|
247
|
-
|
|
248
|
-
|
|
269
|
+
}
|
|
270
|
+
/* Add default params (if missing) */
|
|
271
|
+
if (method === "sync") {
|
|
272
|
+
if ([true, "*"].includes(parsed_table[method])) {
|
|
273
|
+
throw "Invalid sync rule. Expecting { id_fields: string[], synced_field: string } ";
|
|
249
274
|
}
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
.forEach((method) => {
|
|
253
|
-
const rule = parsed_table[method];
|
|
254
|
-
let rm = MY_RULES.find(r => r.rule === method || r.methods.includes(method));
|
|
255
|
-
if (!rm) {
|
|
256
|
-
let extraInfo = "";
|
|
257
|
-
if (is_view && RULE_TO_METHODS.find(r => !is_view && r.rule === method || r.methods.includes(method))) {
|
|
258
|
-
extraInfo = "You've specified table rules to a view\n";
|
|
259
|
-
}
|
|
260
|
-
throw `Invalid rule in publish.${tableName} -> ${method} \n${extraInfo}Expecting any of: ${MY_RULES.flatMap(r => [r.rule, ...r.methods]).join(", ")}`;
|
|
275
|
+
if (typeof parsed_table[method]?.throttle !== "number") {
|
|
276
|
+
parsed_table[method].throttle = 100;
|
|
261
277
|
}
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
if (method === rm.rule && (0, prostgles_types_1.isObject)(rule)) {
|
|
265
|
-
let method_params = (0, prostgles_types_1.getKeys)(rule);
|
|
266
|
-
let iparam = method_params.find(p => !rm?.allowed_params.includes(p));
|
|
267
|
-
if (iparam) {
|
|
268
|
-
throw `Invalid setting in publish.${tableName}.${method} -> ${iparam}. \n Expecting any of: ${rm.allowed_params.join(", ")}`;
|
|
269
|
-
}
|
|
278
|
+
if (typeof parsed_table[method]?.batch_size !== "number") {
|
|
279
|
+
parsed_table[method].batch_size = PubSubManager_1.DEFAULT_SYNC_BATCH_SIZE;
|
|
270
280
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
281
|
+
}
|
|
282
|
+
/* Enable subscribe if not explicitly disabled OR if VIEW with referenced tables */
|
|
283
|
+
const subKey = "subscribe";
|
|
284
|
+
if (method === "select" && !dissallowedRuleKeys.includes(subKey)) {
|
|
285
|
+
const sr = MY_RULES.find(r => r.rule === subKey);
|
|
286
|
+
if (sr && canSubscribe) {
|
|
287
|
+
parsed_table[subKey] = { ...sr.no_limits };
|
|
288
|
+
parsed_table.subscribeOne = { ...sr.no_limits };
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
});
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
throw "Unexpected publish";
|
|
295
|
+
}
|
|
296
|
+
const getImpliedMethods = (tableRules) => {
|
|
297
|
+
const res = { ...tableRules };
|
|
298
|
+
/* Add implied methods if not specifically dissallowed */
|
|
299
|
+
MY_RULES.map(r => {
|
|
300
|
+
/** THIS IS A MESS -> some methods cannot be dissallowed (unsync, unsubscribe...) */
|
|
301
|
+
r.methods.forEach(method => {
|
|
302
|
+
const isAllowed = tableRules[r.rule] && tableRules[method] === undefined;
|
|
303
|
+
if (isAllowed) {
|
|
304
|
+
if (method === "updateBatch" && !tableRules.update) {
|
|
305
|
+
// not allowed
|
|
278
306
|
}
|
|
279
|
-
if (
|
|
280
|
-
|
|
307
|
+
else if (method === "upsert" && (!tableRules.update || !tableRules.insert)) {
|
|
308
|
+
// not allowed
|
|
281
309
|
}
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
const subKey = "subscribe";
|
|
285
|
-
if (method === "select" && !dissallowedRuleKeys.includes(subKey)) {
|
|
286
|
-
const sr = MY_RULES.find(r => r.rule === subKey);
|
|
287
|
-
if (sr && canSubscribe) {
|
|
288
|
-
parsed_table[subKey] = { ...sr.no_limits };
|
|
289
|
-
parsed_table.subscribeOne = { ...sr.no_limits };
|
|
310
|
+
else {
|
|
311
|
+
res[method] ??= true;
|
|
290
312
|
}
|
|
291
313
|
}
|
|
292
314
|
});
|
|
293
|
-
}
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
let res = { ...tableRules };
|
|
299
|
-
/* Add implied methods if not specifically dissallowed */
|
|
300
|
-
MY_RULES.map(r => {
|
|
301
|
-
/** THIS IS A MESS -> some methods cannot be dissallowed (unsync, unsubscribe...) */
|
|
302
|
-
r.methods.forEach(method => {
|
|
303
|
-
const isAllowed = tableRules[r.rule] && tableRules[method] === undefined;
|
|
304
|
-
if (isAllowed) {
|
|
305
|
-
if (method === "updateBatch" && !tableRules.update) {
|
|
306
|
-
}
|
|
307
|
-
else if (method === "upsert" && (!tableRules.update || !tableRules.insert)) {
|
|
308
|
-
}
|
|
309
|
-
else {
|
|
310
|
-
res[method] ??= true;
|
|
311
|
-
}
|
|
312
|
-
}
|
|
313
|
-
});
|
|
314
|
-
});
|
|
315
|
-
return res;
|
|
316
|
-
};
|
|
317
|
-
parsed_table = getImpliedMethods(parsed_table);
|
|
318
|
-
return parsed_table;
|
|
319
|
-
}
|
|
320
|
-
catch (e) {
|
|
321
|
-
throw e;
|
|
322
|
-
}
|
|
315
|
+
});
|
|
316
|
+
return res;
|
|
317
|
+
};
|
|
318
|
+
parsed_table = getImpliedMethods(parsed_table);
|
|
319
|
+
return parsed_table;
|
|
323
320
|
}
|
|
324
321
|
/* Prepares schema for client. Only allowed views and commands will be present */
|
|
325
322
|
async getSchemaFromPublish(socket, userData) {
|
|
326
|
-
|
|
327
|
-
|
|
323
|
+
const schema = {};
|
|
324
|
+
const tables = [];
|
|
328
325
|
try {
|
|
329
326
|
/* Publish tables and views based on socket */
|
|
330
327
|
const clientInfo = userData ?? await this.prostgles.authHandler?.getClientInfo({ socket });
|
|
@@ -381,7 +378,7 @@ class PublishParser {
|
|
|
381
378
|
}
|
|
382
379
|
}
|
|
383
380
|
if (method === "getInfo" || method === "getColumns") {
|
|
384
|
-
|
|
381
|
+
const tableRules = await this.getValidatedRequestRule({ tableName, command: method, localParams: { socket } }, clientInfo);
|
|
385
382
|
const res = await this.dbo[tableName][method](undefined, undefined, undefined, tableRules, { socket, isRemoteRequest: true });
|
|
386
383
|
if (method === "getInfo") {
|
|
387
384
|
tableInfo = res;
|