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.
Files changed (212) hide show
  1. package/.eslintignore +5 -0
  2. package/.eslintrc.json +30 -0
  3. package/dist/DBEventsManager.js +1 -1
  4. package/dist/DBEventsManager.js.map +1 -1
  5. package/dist/DBSchemaBuilder.d.ts.map +1 -1
  6. package/dist/DBSchemaBuilder.js +6 -6
  7. package/dist/DBSchemaBuilder.js.map +1 -1
  8. package/dist/DboBuilder/QueryBuilder/Functions.js +9 -9
  9. package/dist/DboBuilder/QueryBuilder/Functions.js.map +1 -1
  10. package/dist/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  11. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
  12. package/dist/DboBuilder/QueryBuilder/QueryBuilder.js.map +1 -1
  13. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
  14. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
  15. package/dist/DboBuilder/QueryBuilder/makeSelectQuery.js.map +1 -1
  16. package/dist/DboBuilder/TableHandler.d.ts.map +1 -1
  17. package/dist/DboBuilder/TableHandler.js +18 -20
  18. package/dist/DboBuilder/TableHandler.js.map +1 -1
  19. package/dist/DboBuilder/ViewHandler.d.ts +0 -10
  20. package/dist/DboBuilder/ViewHandler.d.ts.map +1 -1
  21. package/dist/DboBuilder/ViewHandler.js +50 -63
  22. package/dist/DboBuilder/ViewHandler.js.map +1 -1
  23. package/dist/DboBuilder/delete.js +0 -1
  24. package/dist/DboBuilder/delete.js.map +1 -1
  25. package/dist/DboBuilder/getColumns.js +5 -4
  26. package/dist/DboBuilder/getColumns.js.map +1 -1
  27. package/dist/DboBuilder/getCondition.d.ts.map +1 -1
  28. package/dist/DboBuilder/getCondition.js +6 -6
  29. package/dist/DboBuilder/getCondition.js.map +1 -1
  30. package/dist/DboBuilder/insert.js +15 -16
  31. package/dist/DboBuilder/insert.js.map +1 -1
  32. package/dist/DboBuilder/insertDataParse.d.ts.map +1 -1
  33. package/dist/DboBuilder/insertDataParse.js +9 -10
  34. package/dist/DboBuilder/insertDataParse.js.map +1 -1
  35. package/dist/DboBuilder/parseUpdateRules.js +2 -2
  36. package/dist/DboBuilder/parseUpdateRules.js.map +1 -1
  37. package/dist/DboBuilder/runSQL.d.ts.map +1 -1
  38. package/dist/DboBuilder/runSQL.js +5 -5
  39. package/dist/DboBuilder/runSQL.js.map +1 -1
  40. package/dist/DboBuilder/subscribe.js +3 -3
  41. package/dist/DboBuilder/subscribe.js.map +1 -1
  42. package/dist/DboBuilder/update.js +5 -6
  43. package/dist/DboBuilder/update.js.map +1 -1
  44. package/dist/DboBuilder/uploadFile.d.ts.map +1 -1
  45. package/dist/DboBuilder/uploadFile.js +1 -1
  46. package/dist/DboBuilder/uploadFile.js.map +1 -1
  47. package/dist/DboBuilder.d.ts.map +1 -1
  48. package/dist/DboBuilder.js +13 -14
  49. package/dist/DboBuilder.js.map +1 -1
  50. package/dist/FileManager.d.ts.map +1 -1
  51. package/dist/FileManager.js +3 -5
  52. package/dist/FileManager.js.map +1 -1
  53. package/dist/Filtering.js +7 -7
  54. package/dist/Filtering.js.map +1 -1
  55. package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
  56. package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
  57. package/dist/JSONBValidation/validate_jsonb_schema_sql.js +295 -0
  58. package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -0
  59. package/dist/JSONBValidation/validation.d.ts +108 -0
  60. package/dist/JSONBValidation/validation.d.ts.map +1 -0
  61. package/dist/JSONBValidation/validation.js +222 -0
  62. package/dist/JSONBValidation/validation.js.map +1 -0
  63. package/dist/PostgresNotifListenManager.js +1 -1
  64. package/dist/PostgresNotifListenManager.js.map +1 -1
  65. package/dist/Prostgles.d.ts.map +1 -1
  66. package/dist/Prostgles.js +20 -20
  67. package/dist/Prostgles.js.map +1 -1
  68. package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
  69. package/dist/PubSubManager/initPubSubManager.js +10 -7
  70. package/dist/PubSubManager/initPubSubManager.js.map +1 -1
  71. package/dist/PublishParser.d.ts.map +1 -1
  72. package/dist/PublishParser.js +122 -125
  73. package/dist/PublishParser.js.map +1 -1
  74. package/dist/SyncReplication.d.ts.map +1 -1
  75. package/dist/SyncReplication.js +19 -16
  76. package/dist/SyncReplication.js.map +1 -1
  77. package/dist/TableConfig.d.ts +9 -5
  78. package/dist/TableConfig.d.ts.map +1 -1
  79. package/dist/TableConfig.js +33 -12
  80. package/dist/TableConfig.js.map +1 -1
  81. package/dist/index.js +1 -1
  82. package/dist/index.js.map +1 -1
  83. package/dist/shortestPath.js +11 -11
  84. package/dist/shortestPath.js.map +1 -1
  85. package/dist/validation.d.ts +50 -24
  86. package/dist/validation.d.ts.map +1 -1
  87. package/dist/validation.js +177 -53
  88. package/dist/validation.js.map +1 -1
  89. package/lib/AuthHandler.d.ts +11 -11
  90. package/lib/AuthHandler.d.ts.map +1 -1
  91. package/lib/DBEventsManager.js +1 -1
  92. package/lib/DBEventsManager.ts +1 -1
  93. package/lib/DBSchemaBuilder.d.ts +3 -3
  94. package/lib/DBSchemaBuilder.d.ts.map +1 -1
  95. package/lib/DBSchemaBuilder.js +6 -6
  96. package/lib/DBSchemaBuilder.ts +10 -12
  97. package/lib/DboBuilder/QueryBuilder/Functions.d.ts +3 -3
  98. package/lib/DboBuilder/QueryBuilder/Functions.d.ts.map +1 -1
  99. package/lib/DboBuilder/QueryBuilder/Functions.js +9 -9
  100. package/lib/DboBuilder/QueryBuilder/Functions.ts +13 -13
  101. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts +3 -3
  102. package/lib/DboBuilder/QueryBuilder/QueryBuilder.d.ts.map +1 -1
  103. package/lib/DboBuilder/QueryBuilder/QueryBuilder.js +8 -7
  104. package/lib/DboBuilder/QueryBuilder/QueryBuilder.ts +12 -12
  105. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.d.ts.map +1 -1
  106. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.js +4 -4
  107. package/lib/DboBuilder/QueryBuilder/makeSelectQuery.ts +5 -5
  108. package/lib/DboBuilder/TableHandler.d.ts +1 -1
  109. package/lib/DboBuilder/TableHandler.d.ts.map +1 -1
  110. package/lib/DboBuilder/TableHandler.js +18 -20
  111. package/lib/DboBuilder/TableHandler.ts +21 -20
  112. package/lib/DboBuilder/ViewHandler.d.ts +1 -11
  113. package/lib/DboBuilder/ViewHandler.d.ts.map +1 -1
  114. package/lib/DboBuilder/ViewHandler.js +50 -63
  115. package/lib/DboBuilder/ViewHandler.ts +68 -97
  116. package/lib/DboBuilder/delete.js +0 -1
  117. package/lib/DboBuilder/delete.ts +1 -1
  118. package/lib/DboBuilder/getColumns.js +5 -4
  119. package/lib/DboBuilder/getColumns.ts +5 -5
  120. package/lib/DboBuilder/getCondition.d.ts.map +1 -1
  121. package/lib/DboBuilder/getCondition.js +6 -6
  122. package/lib/DboBuilder/getCondition.ts +7 -7
  123. package/lib/DboBuilder/insert.js +15 -16
  124. package/lib/DboBuilder/insert.ts +18 -18
  125. package/lib/DboBuilder/insertDataParse.d.ts.map +1 -1
  126. package/lib/DboBuilder/insertDataParse.js +9 -10
  127. package/lib/DboBuilder/insertDataParse.ts +42 -43
  128. package/lib/DboBuilder/parseUpdateRules.js +2 -2
  129. package/lib/DboBuilder/parseUpdateRules.ts +2 -2
  130. package/lib/DboBuilder/runSQL.d.ts.map +1 -1
  131. package/lib/DboBuilder/runSQL.js +5 -5
  132. package/lib/DboBuilder/runSQL.ts +6 -6
  133. package/lib/DboBuilder/subscribe.d.ts +1 -1
  134. package/lib/DboBuilder/subscribe.d.ts.map +1 -1
  135. package/lib/DboBuilder/subscribe.js +3 -3
  136. package/lib/DboBuilder/subscribe.ts +3 -3
  137. package/lib/DboBuilder/update.js +5 -6
  138. package/lib/DboBuilder/update.ts +6 -6
  139. package/lib/DboBuilder/uploadFile.d.ts.map +1 -1
  140. package/lib/DboBuilder/uploadFile.js +1 -1
  141. package/lib/DboBuilder/uploadFile.ts +2 -2
  142. package/lib/DboBuilder.d.ts +22 -22
  143. package/lib/DboBuilder.d.ts.map +1 -1
  144. package/lib/DboBuilder.js +13 -14
  145. package/lib/DboBuilder.ts +19 -19
  146. package/lib/FileManager.d.ts +6 -6
  147. package/lib/FileManager.d.ts.map +1 -1
  148. package/lib/FileManager.js +3 -5
  149. package/lib/FileManager.ts +7 -6
  150. package/lib/Filtering.d.ts +1 -1
  151. package/lib/Filtering.d.ts.map +1 -1
  152. package/lib/Filtering.js +7 -7
  153. package/lib/Filtering.ts +7 -7
  154. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +3 -0
  155. package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -0
  156. package/lib/JSONBValidation/validate_jsonb_schema_sql.js +294 -0
  157. package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +293 -0
  158. package/lib/JSONBValidation/validation.d.ts +108 -0
  159. package/lib/JSONBValidation/validation.d.ts.map +1 -0
  160. package/lib/JSONBValidation/validation.js +221 -0
  161. package/lib/JSONBValidation/validation.ts +332 -0
  162. package/lib/PostgresNotifListenManager.d.ts +1 -1
  163. package/lib/PostgresNotifListenManager.d.ts.map +1 -1
  164. package/lib/PostgresNotifListenManager.js +1 -1
  165. package/lib/PostgresNotifListenManager.ts +1 -1
  166. package/lib/Prostgles.d.ts +14 -14
  167. package/lib/Prostgles.d.ts.map +1 -1
  168. package/lib/Prostgles.js +20 -20
  169. package/lib/Prostgles.ts +22 -21
  170. package/lib/PubSubManager/PubSubManager.d.ts +7 -7
  171. package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
  172. package/lib/PubSubManager/initPubSubManager.d.ts.map +1 -1
  173. package/lib/PubSubManager/initPubSubManager.js +10 -7
  174. package/lib/PubSubManager/initPubSubManager.ts +12 -7
  175. package/lib/PublishParser.d.ts +32 -32
  176. package/lib/PublishParser.d.ts.map +1 -1
  177. package/lib/PublishParser.js +121 -124
  178. package/lib/PublishParser.ts +125 -127
  179. package/lib/SchemaWatch.d.ts +1 -1
  180. package/lib/SchemaWatch.d.ts.map +1 -1
  181. package/lib/SyncReplication.d.ts +5 -5
  182. package/lib/SyncReplication.d.ts.map +1 -1
  183. package/lib/SyncReplication.js +19 -16
  184. package/lib/SyncReplication.ts +470 -471
  185. package/lib/TableConfig.d.ts +28 -24
  186. package/lib/TableConfig.d.ts.map +1 -1
  187. package/lib/TableConfig.js +33 -12
  188. package/lib/TableConfig.ts +55 -21
  189. package/lib/index.js +1 -1
  190. package/lib/index.ts +1 -1
  191. package/lib/shortestPath.d.ts +1 -1
  192. package/lib/shortestPath.d.ts.map +1 -1
  193. package/lib/shortestPath.js +11 -11
  194. package/lib/shortestPath.ts +11 -11
  195. package/package.json +10 -6
  196. package/tests/client/PID.txt +1 -1
  197. package/tests/client/package-lock.json +53 -31
  198. package/tests/client/package.json +4 -1
  199. package/tests/isomorphic_queries.d.ts +4 -1
  200. package/tests/isomorphic_queries.d.ts.map +1 -1
  201. package/tests/isomorphic_queries.js +38 -30
  202. package/tests/isomorphic_queries.ts +40 -33
  203. package/tests/server/DBoGenerated.d.ts +1 -1
  204. package/tests/server/index.js +8 -7
  205. package/tests/server/index.ts +10 -8
  206. package/tests/server/package-lock.json +76 -58
  207. package/tests/server/package.json +2 -2
  208. package/tests/server/server.ts +2 -3
  209. package/lib/validation.d.ts +0 -100
  210. package/lib/validation.d.ts.map +0 -1
  211. package/lib/validation.js +0 -280
  212. package/lib/validation.ts +0 -360
@@ -112,7 +112,7 @@ class PublishParser {
112
112
  };
113
113
  }
114
114
  async getAllowedMethods(socket, userData) {
115
- let methods = {};
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
- let _publish = await applyParamsIfFunc(this.publish, publishParams);
139
+ const _publish = await applyParamsIfFunc(this.publish, publishParams);
140
140
  if (_publish === "*") {
141
- let publish = {};
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
- let rtm = RULE_TO_METHODS.find(rtms => rtms.methods.includes(command));
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
- let table_rule = await this.getTableRules({ tableName, localParams }, clientInfo);
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
- try {
192
- if (!localParams || !tableName)
193
- throw { stack: ["getTableRules()"], message: "publish OR socket OR dbo OR tableName are missing" };
194
- let _publish = await this.getPublish(localParams, clientInfo);
195
- const raw_table_rules = _publish[tableName];
196
- if (!raw_table_rules || (0, prostgles_types_1.isObject)(raw_table_rules) && Object.values(raw_table_rules).every(v => !v)) {
197
- return undefined;
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
- let parsed_table = {};
200
- /* Get view or table specific rules */
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
- const MY_RULES = RULE_TO_METHODS.filter(r => {
208
- /** Check PG User privileges */
209
- const pgUserIsAllowedThis = tHandler.tableOrViewInfo.privileges[r.sqlRule];
210
- let result = (!is_view || !r.table_only) && pgUserIsAllowedThis;
211
- if (!pgUserIsAllowedThis && (0, DboBuilder_1.isPlainObject)(raw_table_rules) && raw_table_rules[r.sqlRule]) {
212
- throw `Your postgres user is not allowed ${r.sqlRule} on table ${tableName}`;
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
- if ((r.rule === "subscribe" || r.rule === "sync") && !this.prostgles.isSuperUser) {
215
- result = false;
216
- if ((0, DboBuilder_1.isPlainObject)(raw_table_rules) && raw_table_rules[r.rule]) {
217
- throw `Cannot publish realtime rule ${tableName}.${r.rule}. Superuser is required for this`;
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 === "subscribe" && !canSubscribe) {
221
- result = false;
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
- /* All methods allowed. Add no limits for table rules */
226
- if ([true, "*"].includes(raw_table_rules)) {
227
- parsed_table = {};
228
- MY_RULES.filter(r => r.no_limits).forEach(r => {
229
- parsed_table[r.rule] = { ...r.no_limits };
230
- });
231
- /** Specific rules allowed */
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
- /** Add no_limit values for implied/ fully allowed methods */
243
- if ([true, "*"].includes(raw_table_rules[r.rule]) && r.no_limits) {
244
- parsed_table[r.rule] = Object.assign({}, r.no_limits);
245
- /** Carry over detailed config */
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
- else if ((0, DboBuilder_1.isPlainObject)(raw_table_rules[r.rule])) {
248
- parsed_table[r.rule] = raw_table_rules[r.rule];
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
- allRuleKeys.filter(m => parsed_table[m])
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
- /* Check RULES for invalid params */
263
- /* Methods do not have params -> They use them from rules */
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
- /* Add default params (if missing) */
272
- if (method === "sync") {
273
- if ([true, "*"].includes(parsed_table[method])) {
274
- throw "Invalid sync rule. Expecting { id_fields: string[], synced_field: string } ";
275
- }
276
- if (typeof parsed_table[method]?.throttle !== "number") {
277
- parsed_table[method].throttle = 100;
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 (typeof parsed_table[method]?.batch_size !== "number") {
280
- parsed_table[method].batch_size = PubSubManager_1.DEFAULT_SYNC_BATCH_SIZE;
307
+ else if (method === "upsert" && (!tableRules.update || !tableRules.insert)) {
308
+ // not allowed
281
309
  }
282
- }
283
- /* Enable subscribe if not explicitly disabled OR if VIEW with referenced tables */
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
- else {
295
- throw "Unexpected publish";
296
- }
297
- const getImpliedMethods = (tableRules) => {
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
- let schema = {};
327
- let tables = [];
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
- let tableRules = await this.getValidatedRequestRule({ tableName, command: method, localParams: { socket } }, clientInfo);
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;