prostgles-server 4.2.346 → 4.2.348

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 (86) hide show
  1. package/dist/Auth/endpoints/setOAuthRequestHandlers.d.ts.map +1 -1
  2. package/dist/Auth/endpoints/setOAuthRequestHandlers.js +3 -1
  3. package/dist/Auth/endpoints/setOAuthRequestHandlers.js.map +1 -1
  4. package/dist/DboBuilder/DboBuilder.d.ts +2 -0
  5. package/dist/DboBuilder/DboBuilder.d.ts.map +1 -1
  6. package/dist/DboBuilder/DboBuilder.js +5 -1
  7. package/dist/DboBuilder/DboBuilder.js.map +1 -1
  8. package/dist/DboBuilder/QueryStreamer.d.ts.map +1 -1
  9. package/dist/DboBuilder/QueryStreamer.js +1 -1
  10. package/dist/DboBuilder/QueryStreamer.js.map +1 -1
  11. package/dist/DboBuilder/dboBuilderUtils.d.ts +1 -1
  12. package/dist/DboBuilder/dboBuilderUtils.d.ts.map +1 -1
  13. package/dist/DboBuilder/dboBuilderUtils.js +5 -27
  14. package/dist/DboBuilder/dboBuilderUtils.js.map +1 -1
  15. package/dist/DboBuilder/runSQL.d.ts +1 -1
  16. package/dist/Prostgles.d.ts.map +1 -1
  17. package/dist/Prostgles.js +4 -2
  18. package/dist/Prostgles.js.map +1 -1
  19. package/dist/ProstglesTypes.d.ts +2 -2
  20. package/dist/ProstglesTypes.d.ts.map +1 -1
  21. package/dist/ProstglesTypes.js.map +1 -1
  22. package/dist/PublishParser/PublishParser.d.ts +1 -3
  23. package/dist/PublishParser/PublishParser.d.ts.map +1 -1
  24. package/dist/PublishParser/PublishParser.js +6 -3
  25. package/dist/PublishParser/PublishParser.js.map +1 -1
  26. package/dist/PublishParser/getTableRulesWithoutFileTable.d.ts.map +1 -1
  27. package/dist/PublishParser/getTableRulesWithoutFileTable.js +1 -1
  28. package/dist/PublishParser/getTableRulesWithoutFileTable.js.map +1 -1
  29. package/dist/TableConfig/fetchTableConstraints.d.ts +19 -0
  30. package/dist/TableConfig/fetchTableConstraints.d.ts.map +1 -0
  31. package/dist/TableConfig/fetchTableConstraints.js +38 -0
  32. package/dist/TableConfig/fetchTableConstraints.js.map +1 -0
  33. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts +0 -18
  34. package/dist/TableConfig/getConstraintDefinitionQueries.d.ts.map +1 -1
  35. package/dist/TableConfig/getConstraintDefinitionQueries.js +1 -36
  36. package/dist/TableConfig/getConstraintDefinitionQueries.js.map +1 -1
  37. package/dist/TableConfig/getCreateSchemaQueries.js +2 -2
  38. package/dist/TableConfig/getCreateSchemaQueries.js.map +1 -1
  39. package/dist/TableConfig/getFutureTableSchema.d.ts +3 -2
  40. package/dist/TableConfig/getFutureTableSchema.d.ts.map +1 -1
  41. package/dist/TableConfig/getFutureTableSchema.js +2 -2
  42. package/dist/TableConfig/getFutureTableSchema.js.map +1 -1
  43. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts +1 -1
  44. package/dist/TableConfig/getTableConfigSchemaQueries.d.ts.map +1 -1
  45. package/dist/TableConfig/initTableConfig.d.ts.map +1 -1
  46. package/dist/TableConfig/initTableConfig.js +5 -5
  47. package/dist/TableConfig/initTableConfig.js.map +1 -1
  48. package/dist/TableConfig/runMigrations.js +2 -2
  49. package/dist/TableConfig/runMigrations.js.map +1 -1
  50. package/dist/TableConfig/tableConfigSchemaUtils.d.ts.map +1 -1
  51. package/dist/TableConfig/tableConfigSchemaUtils.js +2 -2
  52. package/dist/TableConfig/tableConfigSchemaUtils.js.map +1 -1
  53. package/dist/WebsocketAPI/getClientSchema.js +1 -1
  54. package/dist/WebsocketAPI/getClientSchema.js.map +1 -1
  55. package/dist/WebsocketAPI/onSocketConnected.d.ts.map +1 -1
  56. package/dist/WebsocketAPI/onSocketConnected.js +2 -2
  57. package/dist/WebsocketAPI/onSocketConnected.js.map +1 -1
  58. package/dist/initProstgles.js +0 -3
  59. package/dist/initProstgles.js.map +1 -1
  60. package/dist/runClientRequest.d.ts +9 -9
  61. package/dist/runClientRequest.d.ts.map +1 -1
  62. package/dist/runClientRequest.js +34 -8
  63. package/dist/runClientRequest.js.map +1 -1
  64. package/dist/shortestPath.js +1 -1
  65. package/dist/shortestPath.js.map +1 -1
  66. package/lib/Auth/endpoints/setOAuthRequestHandlers.ts +5 -2
  67. package/lib/DboBuilder/DboBuilder.ts +6 -1
  68. package/lib/DboBuilder/QueryStreamer.ts +3 -10
  69. package/lib/DboBuilder/dboBuilderUtils.ts +6 -32
  70. package/lib/Prostgles.ts +8 -3
  71. package/lib/ProstglesTypes.ts +5 -6
  72. package/lib/PublishParser/PublishParser.ts +10 -9
  73. package/lib/PublishParser/getTableRulesWithoutFileTable.ts +3 -5
  74. package/lib/TableConfig/fetchTableConstraints.ts +53 -0
  75. package/lib/TableConfig/getConstraintDefinitionQueries.ts +0 -56
  76. package/lib/TableConfig/getCreateSchemaQueries.ts +2 -2
  77. package/lib/TableConfig/getFutureTableSchema.ts +5 -5
  78. package/lib/TableConfig/initTableConfig.ts +8 -9
  79. package/lib/TableConfig/runMigrations.ts +2 -2
  80. package/lib/TableConfig/tableConfigSchemaUtils.ts +2 -3
  81. package/lib/WebsocketAPI/getClientSchema.ts +1 -1
  82. package/lib/WebsocketAPI/onSocketConnected.ts +4 -3
  83. package/lib/initProstgles.ts +0 -4
  84. package/lib/runClientRequest.ts +57 -19
  85. package/lib/shortestPath.ts +1 -1
  86. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"runClientRequest.d.ts","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,UAAU,EAED,MAAM,iBAAiB,CAAC;AACnC,OAAO,EAGL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AA0B5E,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;IACZ,MAAM,EAAE,GAAG,CAAC;CACb,CAAC;AAUF,eAAO,MAAM,gBAAgB,SACrB,SAAS,QACT,IAAI,aACC,iBAAiB,SACrB,eAAe,GAAG,SAAS,mCA2EnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,SAC3B,SAAS,aACJ,iBAAiB;;;;;;;;EAgB7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,SACxB,SAAS,WACN,UAAU,aACR,iBAAiB,mOAS7B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB,CAAC;AACF,eAAO,MAAM,eAAe,SACpB,SAAS,WACN,UAAU,aACR,iBAAiB,iBAmB7B,CAAC"}
1
+ {"version":3,"file":"runClientRequest.d.ts","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAA0B,MAAM,iBAAiB,CAAC;AAC1E,OAAO,EAIL,KAAK,SAAS,EACf,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAK1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C,OAAO,EAAE,KAAK,eAAe,EAAE,MAAM,sCAAsC,CAAC;AA0B5E,KAAK,IAAI,GAAG;IACV,SAAS,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAUF,eAAO,MAAM,gBAAgB,SACrB,SAAS,oBACG,IAAI,aACX,iBAAiB,SACrB,eAAe,GAAG,SAAS,mCA0FnC,CAAC;AAEF,eAAO,MAAM,sBAAsB,SAC3B,SAAS,aACJ,iBAAiB;;;;;;;;EAgB7B,CAAC;AAEF,eAAO,MAAM,mBAAmB,SACxB,SAAS,mBACE,UAAU,aAChB,iBAAiB,iBAsB7B,CAAC;AAEF,KAAK,UAAU,GAAG;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC;CAChB,CAAC;AACF,eAAO,MAAM,eAAe,SACpB,SAAS,mBACE,UAAU,aAChB,iBAAiB,iBA+B7B,CAAC"}
@@ -26,20 +26,29 @@ const SOCKET_ONLY_COMMANDS = [
26
26
  "subscribeOne",
27
27
  "sync",
28
28
  ];
29
- const runClientRequest = async function (args, clientReq, scope) {
29
+ const runClientRequest = async function (nonValidatedArgs, clientReq, scope) {
30
30
  /* Channel name will only include client-sent params so we ignore table_rules enforced params */
31
31
  if (!this.publishParser || !this.dbo) {
32
32
  throw "socket/httpReq or authhandler missing";
33
33
  }
34
- const { tableName, command: nonValidatedCommand, param1, param2, param3 } = args;
35
- if (!TABLE_METHODS_KEYS.some((v) => v === nonValidatedCommand)) {
36
- throw `Invalid command: ${nonValidatedCommand}. Expecting one of: ${TABLE_METHODS_KEYS.join(", ")};`;
34
+ const validation = (0, prostgles_types_1.getJSONBObjectSchemaValidationError)({
35
+ tableName: { type: "string" },
36
+ command: { enum: TABLE_METHODS_KEYS },
37
+ param1: { type: "any", optional: true },
38
+ param2: { type: "any", optional: true },
39
+ param3: { type: "any", optional: true },
40
+ }, nonValidatedArgs, "tableName");
41
+ if (validation.error !== undefined) {
42
+ throw validation.error;
37
43
  }
38
- const command = nonValidatedCommand;
44
+ const { tableName, command, param1, param2, param3 } = validation.data;
39
45
  if (!clientReq.socket && SOCKET_ONLY_COMMANDS.some((v) => v === command)) {
40
46
  throw ("The following commands cannot be completed over a non-websocket connection: " +
41
47
  SOCKET_ONLY_COMMANDS.join(", "));
42
48
  }
49
+ if (!this.dboBuilder.dboMap.has(tableName)) {
50
+ throw `tableName ${tableName} is invalid or not allowed`;
51
+ }
43
52
  const clientInfo = await this.authHandler?.getSidAndUserFromRequest(clientReq);
44
53
  if (clientInfo === "new-session-redirect") {
45
54
  throw clientInfo;
@@ -98,21 +107,38 @@ const clientCanRunSqlRequest = async function (clientReq) {
98
107
  return { allowed, reqInfo: clientReq };
99
108
  };
100
109
  exports.clientCanRunSqlRequest = clientCanRunSqlRequest;
101
- const runClientSqlRequest = async function (reqData, clientReq) {
110
+ const runClientSqlRequest = async function (unvalidatedArgs, clientReq) {
102
111
  const { allowed } = await exports.clientCanRunSqlRequest.bind(this)(clientReq);
103
112
  if (!allowed) {
104
113
  throw "Not allowed to execute sql";
105
114
  }
106
115
  if (!this.dbo?.sql)
107
116
  throw "Internal error: sql handler missing";
117
+ const validation = (0, prostgles_types_1.getJSONBObjectSchemaValidationError)({
118
+ query: { type: "string" },
119
+ params: { type: "any", optional: true },
120
+ options: { type: "any", optional: true },
121
+ }, unvalidatedArgs, "query");
122
+ if (validation.error !== undefined) {
123
+ throw validation.error;
124
+ }
125
+ const reqData = validation.data;
108
126
  const { query, params, options } = reqData;
109
127
  return this.dbo.sql(query, params, options, { clientReq });
110
128
  };
111
129
  exports.runClientSqlRequest = runClientSqlRequest;
112
- const runClientMethod = async function (reqArgs, clientReq) {
130
+ const runClientMethod = async function (unvalidatedArgs, clientReq) {
131
+ const validation = (0, prostgles_types_1.getJSONBObjectSchemaValidationError)({
132
+ method: { type: "string" },
133
+ params: { type: "any[]", optional: true },
134
+ }, unvalidatedArgs, "method");
135
+ if (validation.error !== undefined) {
136
+ throw validation.error;
137
+ }
138
+ const reqArgs = validation.data;
113
139
  const { method, params = [] } = reqArgs;
114
140
  const methods = await this.publishParser?.getAllowedMethods(clientReq, undefined);
115
- const methodDef = methods?.[method];
141
+ const methodDef = methods?.get(method);
116
142
  if (!methods || !methodDef) {
117
143
  throw "Disallowed/missing method " + JSON.stringify(method);
118
144
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runClientRequest.js","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runClientRequest.js","sourceRoot":"","sources":["../lib/runClientRequest.ts"],"names":[],"mappings":"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"}
@@ -15,7 +15,7 @@ const findShortestPath = (graph, startNode, endNode) => {
15
15
  // establish object for recording distances from the start node
16
16
  let distances = {};
17
17
  distances[endNode] = "Infinity";
18
- distances = Object.assign(distances, graph[startNode]);
18
+ distances = { ...distances, ...graph[startNode] };
19
19
  // track paths
20
20
  const parents = { endNode: null };
21
21
  for (const child in graph[startNode]) {
@@ -1 +1 @@
1
- {"version":3,"file":"shortestPath.js","sourceRoot":"","sources":["../lib/shortestPath.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"shortestPath.js","sourceRoot":"","sources":["../lib/shortestPath.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ import { Strategy as MicrosoftStrategy } from "passport-microsoft";
7
7
  import { getObjectEntries, isEmpty } from "prostgles-types";
8
8
  import { getErrorAsObject } from "../../DboBuilder/dboBuilderUtils";
9
9
  import type { DBOFullyTyped } from "../../DBSchemaBuilder/DBSchemaBuilder";
10
- import type { AuthHandler} from "../AuthHandler";
10
+ import type { AuthHandler } from "../AuthHandler";
11
11
  import { AUTH_ROUTES_AND_PARAMS, HTTP_FAIL_CODES } from "../AuthHandler";
12
12
  import type { AuthProviderUserData, LoginWithOAuthConfig } from "../AuthTypes";
13
13
  import { getClientRequestIPsInfo } from "../utils/getClientRequestIPsInfo";
@@ -89,7 +89,10 @@ export function setOAuthRequestHandlers(
89
89
  type: "OAuth",
90
90
  provider: providerName as "customOAuth",
91
91
  }).catch((e: any) => {
92
- res.status(HTTP_FAIL_CODES.INTERNAL_SERVER_ERROR).json(getErrorAsObject(e));
92
+ res.status(HTTP_FAIL_CODES.INTERNAL_SERVER_ERROR).json(
93
+ //@ts-ignore
94
+ getErrorAsObject(e)
95
+ );
93
96
  });
94
97
  }
95
98
  }
@@ -78,6 +78,8 @@ export class DboBuilder {
78
78
 
79
79
  dbo: DBHandlerServer;
80
80
 
81
+ dboMap: Map<string, TableHandler | ViewHandler> = new Map();
82
+
81
83
  /**
82
84
  * Undefined if cannot create table triggers
83
85
  */
@@ -151,6 +153,7 @@ export class DboBuilder {
151
153
  if (!this.prostgles.db) throw "db missing";
152
154
  this.db = this.prostgles.db;
153
155
  this.dbo = {} as unknown as DBHandlerServer;
156
+ this.dboMap = new Map();
154
157
  this.queryStreamer = new QueryStreamer(this);
155
158
  }
156
159
 
@@ -259,13 +262,15 @@ export class DboBuilder {
259
262
  Alternatively you can rename the table column\n`;
260
263
  }
261
264
 
262
- this.dbo[tov.escaped_identifier] = new (tov.is_view ? ViewHandler : TableHandler)(
265
+ const tableHandler = new (tov.is_view ? ViewHandler : TableHandler)(
263
266
  this.db,
264
267
  tov,
265
268
  this,
266
269
  undefined,
267
270
  this.shortestJoinPaths
268
271
  );
272
+ this.dbo[tov.escaped_identifier] = tableHandler;
273
+ this.dboMap.set(tov.name, tableHandler);
269
274
 
270
275
  if (this.shortestJoinPaths.find((jp) => [jp.t1, jp.t2].includes(tov.name))) {
271
276
  const table = tov.name;
@@ -1,14 +1,7 @@
1
1
  import * as pg from "pg";
2
2
  import type CursorType from "pg-cursor";
3
- import type {
4
- SQLOptions,
5
- SocketSQLStreamPacket,
6
- SocketSQLStreamServer} from "prostgles-types";
7
- import {
8
- CHANNELS,
9
- omitKeys,
10
- pickKeys,
11
- } from "prostgles-types";
3
+ import type { SQLOptions, SocketSQLStreamPacket, SocketSQLStreamServer } from "prostgles-types";
4
+ import { CHANNELS, omitKeys, pickKeys } from "prostgles-types";
12
5
  import type { BasicCallback } from "../PubSubManager/PubSubManager";
13
6
  import type { VoidFunction } from "../SchemaWatch/SchemaWatch";
14
7
  import type { DB } from "../initProstgles";
@@ -307,7 +300,7 @@ export class QueryStreamer {
307
300
  cb(processID);
308
301
  } catch (err) {
309
302
  console.error(err);
310
- cb(processID, getErrorAsObject(err) ?? "Something went wrong");
303
+ cb(processID, getErrorAsObject(err));
311
304
  }
312
305
  runCount++;
313
306
  }
@@ -5,7 +5,7 @@
5
5
 
6
6
  import type { AnyObject, ProstglesError } from "prostgles-types";
7
7
  import { asNameAlias } from "../utils/asNameAlias";
8
- import { isObject, omitKeys, pickKeys } from "prostgles-types";
8
+ import { getSerialisableError, isObject, omitKeys, pickKeys } from "prostgles-types";
9
9
  import type { DB } from "../Prostgles";
10
10
  import type { LocalParams, SortItem } from "./DboBuilderTypes";
11
11
  import { pgp } from "./DboBuilderTypes";
@@ -16,38 +16,12 @@ import type { ProstglesInitOptions } from "../ProstglesTypes";
16
16
  import { sqlErrCodeToMsg } from "./sqlErrCodeToMsg";
17
17
  import type { TableHandler } from "./TableHandler/TableHandler";
18
18
 
19
- const safeStringify = (obj: AnyObject) => {
20
- const seen = new WeakSet();
21
- return JSON.stringify(obj, (key, value: any) => {
22
- if (typeof value === "object" && value !== null) {
23
- if (seen.has(value)) {
24
- return "[Circular]";
25
- }
26
- seen.add(value);
27
- }
28
- return value;
29
- });
30
- };
31
- export const getErrorAsObject = (rawError: any, includeStack = false) => {
32
- if (["string", "boolean", "number"].includes(typeof rawError)) {
33
- return { message: rawError };
19
+ export const getErrorAsObject = (rawError: any) => {
20
+ const serializedError = getSerialisableError(rawError);
21
+ if (isObject(serializedError) && !Array.isArray(serializedError)) {
22
+ return omitKeys(serializedError, ["stack"]);
34
23
  }
35
- if (rawError instanceof Error) {
36
- const errorObj = Object.getOwnPropertyNames(rawError).reduce(
37
- (acc, key) => ({
38
- ...acc,
39
- [key]: (rawError as AnyObject)[key],
40
- }),
41
- {} as AnyObject
42
- );
43
- const result = JSON.parse(safeStringify(errorObj));
44
- if (!includeStack) {
45
- return omitKeys(result, ["stack"]);
46
- }
47
- return result;
48
- }
49
-
50
- return rawError;
24
+ return { message: serializedError };
51
25
  };
52
26
 
53
27
  const circularError = new Error("Circular error data");
package/lib/Prostgles.ts CHANGED
@@ -6,7 +6,7 @@
6
6
  import type * as pgPromise from "pg-promise";
7
7
  import { AuthHandler } from "./Auth/AuthHandler";
8
8
  import { FileManager } from "./FileManager/FileManager";
9
- import type { OnInitReason} from "./initProstgles";
9
+ import type { OnInitReason } from "./initProstgles";
10
10
  import { initProstgles } from "./initProstgles";
11
11
  import type { SchemaWatch } from "./SchemaWatch/SchemaWatch";
12
12
  import { getClientSchema } from "./WebsocketAPI/getClientSchema";
@@ -148,7 +148,7 @@ export class Prostgles {
148
148
  console.error(`Unrecognised ProstglesInitOptions params: ${unknownParams.join()}`);
149
149
  }
150
150
 
151
- Object.assign(this.opts, params);
151
+ this.opts = { ...this.opts, ...params };
152
152
 
153
153
  /* set defaults */
154
154
  if (this.opts.fileTable) {
@@ -164,7 +164,12 @@ export class Prostgles {
164
164
  destroyed = false;
165
165
 
166
166
  checkDb() {
167
- if (!this.db || !(this.db as any).connect) throw "something went wrong getting a db connection";
167
+ if (
168
+ !this.db ||
169
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
170
+ !this.db.connect
171
+ )
172
+ throw "something went wrong getting a db connection";
168
173
  }
169
174
 
170
175
  getTSFileName() {
@@ -6,7 +6,7 @@ import type { DbConnection, OnReadyCallback } from "./initProstgles";
6
6
  import type { EventInfo } from "./Logging";
7
7
  import type { ExpressApp, RestApiConfig } from "./RestApi";
8
8
  import type { OnSchemaChangeCallback } from "./SchemaWatch/SchemaWatch";
9
- import type { ColConstraint } from "./TableConfig/getConstraintDefinitionQueries";
9
+ import type { PGConstraint } from "./TableConfig/fetchTableConstraints";
10
10
  import type { TableConfig } from "./TableConfig/TableConfig";
11
11
  import type { Express } from "express";
12
12
 
@@ -20,10 +20,9 @@ import type {
20
20
  Awaitable,
21
21
  Publish,
22
22
  PublishMethods,
23
- PublishParams} from "./PublishParser/PublishParser";
24
- import {
25
- type PublishMethodsV2,
23
+ PublishParams,
26
24
  } from "./PublishParser/PublishParser";
25
+ import { type PublishMethodsV2 } from "./PublishParser/PublishParser";
27
26
 
28
27
  /**
29
28
  * Allows uploading and downloading files.
@@ -345,6 +344,6 @@ type OnMigrate = (args: {
345
344
  getConstraints: (
346
345
  table: string,
347
346
  column?: string,
348
- types?: ColConstraint["type"][]
349
- ) => Promise<ColConstraint[]>;
347
+ types?: PGConstraint["type"][]
348
+ ) => Promise<PGConstraint[]>;
350
349
  }) => void | Promise<void>;
@@ -1,4 +1,4 @@
1
- import type { Method} from "prostgles-types";
1
+ import type { Method } from "prostgles-types";
2
2
  import { getObjectEntries, isObject } from "prostgles-types";
3
3
  import type { AuthClientRequest, AuthResultWithSID, SessionUser } from "../Auth/AuthTypes";
4
4
  import type { DBOFullyTyped } from "../DBSchemaBuilder/DBSchemaBuilder";
@@ -14,7 +14,8 @@ import type {
14
14
  DboTableCommand,
15
15
  ParsedTableRule,
16
16
  PublishMethods,
17
- PublishParams} from "./publishTypesAndUtils";
17
+ PublishParams,
18
+ } from "./publishTypesAndUtils";
18
19
  import {
19
20
  RULE_TO_METHODS,
20
21
  parsePublishTableRule,
@@ -72,18 +73,15 @@ export class PublishParser {
72
73
  return getV2Methods(publishMethods);
73
74
  }
74
75
 
75
- async getAllowedMethods(
76
- clientReq: AuthClientRequest,
77
- userData: AuthResultWithSID | undefined
78
- ): Promise<{ [key: string]: Method }> {
79
- const methods: { [key: string]: Method } = {};
76
+ async getAllowedMethods(clientReq: AuthClientRequest, userData: AuthResultWithSID | undefined) {
77
+ const methods: Map<string, Method> = new Map();
80
78
 
81
79
  const publishParams = await this.getPublishParams(clientReq, userData);
82
80
  const v2Methods = this.publishMethodsV2;
83
81
  if (v2Methods) {
84
82
  for (const [name, method] of Object.entries(v2Methods)) {
85
83
  if (await method.isAllowed(publishParams)) {
86
- methods[name] = method;
84
+ methods.set(name, method);
87
85
  }
88
86
  }
89
87
  return methods;
@@ -92,6 +90,9 @@ export class PublishParser {
92
90
  const _methods = await applyParamsIfFunc(this.publishMethods, publishParams);
93
91
  if (!_methods) return methods;
94
92
  getObjectEntries(_methods).map(([key, method]) => {
93
+ if (typeof key !== "string") {
94
+ throw `invalid publishMethods key -> ${String(key)} \n Expecting a string`;
95
+ }
95
96
  const isFuncLike = (maybeFunc: VoidFunction | Promise<void> | Promise<any>) =>
96
97
  typeof maybeFunc === "function" || typeof maybeFunc.then === "function";
97
98
  if (
@@ -99,7 +100,7 @@ export class PublishParser {
99
100
  // @ts-ignore
100
101
  (isObject(method) && isFuncLike(method.run))
101
102
  ) {
102
- methods[key] = _methods[key]!;
103
+ methods.set(key, method);
103
104
  } else {
104
105
  throw `invalid publishMethods item -> ${key} \n Expecting a function or promise`;
105
106
  }
@@ -9,11 +9,9 @@ import type {
9
9
  ParsedPublishTable,
10
10
  PublishTableRule,
11
11
  PublishViewRule,
12
- SubscribeRule} from "./publishTypesAndUtils";
13
- import {
14
- type PublishObject,
15
- RULE_TO_METHODS
12
+ SubscribeRule,
16
13
  } from "./publishTypesAndUtils";
14
+ import { type PublishObject, RULE_TO_METHODS } from "./publishTypesAndUtils";
17
15
 
18
16
  export async function getTableRulesWithoutFileTable(
19
17
  this: PublishParser,
@@ -21,7 +19,7 @@ export async function getTableRulesWithoutFileTable(
21
19
  clientInfo: AuthResultWithSID | undefined,
22
20
  overridenPublish?: PublishObject
23
21
  ): Promise<ParsedPublishTable | undefined> {
24
- if (!tableName) throw new Error("publish OR socket OR dbo OR tableName are missing");
22
+ if (!tableName) throw new Error("tableName is missing in getTableRules");
25
23
 
26
24
  const publish =
27
25
  overridenPublish ?? (clientReq && (await this.getPublishAsObject(clientReq, clientInfo)));
@@ -0,0 +1,53 @@
1
+ import type pgPromise from "pg-promise";
2
+ import type { DB } from "../Prostgles";
3
+ import { asValue } from "../PubSubManager/PubSubManagerUtils";
4
+
5
+ export type PGConstraint = {
6
+ name: string;
7
+ table: string;
8
+ type: "c" | "p" | "u" | "f";
9
+ cols: Array<string>;
10
+ definition: string;
11
+ schema: string;
12
+ };
13
+ export const fetchTableConstraints = ({
14
+ db,
15
+ column,
16
+ table,
17
+ types,
18
+ }: ColConstraintsArgs): Promise<PGConstraint[]> => {
19
+ return db.manyOrNone(getColConstraintsQuery({ column, table, types }));
20
+ };
21
+
22
+ type ColConstraintsArgs = {
23
+ db: DB | pgPromise.ITask<{}>;
24
+ table?: string;
25
+ column?: string;
26
+ types?: PGConstraint["type"][];
27
+ };
28
+ const getColConstraintsQuery = ({ column, table, types }: Omit<ColConstraintsArgs, "db">) => {
29
+ let query = `
30
+ SELECT *
31
+ FROM (
32
+ SELECT distinct c.conname as name, c.contype as type,
33
+ pg_get_constraintdef(c.oid) as definition,
34
+ nsp.nspname as schema,
35
+ (SELECT r.relname from pg_class r where r.oid = c.conrelid) as "table",
36
+ (SELECT array_agg(attname::text) from pg_attribute
37
+ where attrelid = c.conrelid and ARRAY[attnum] <@ c.conkey) as cols
38
+ -- (SELECT array_agg(attname::text) from pg_attribute
39
+ -- where attrelid = c.confrelid and ARRAY[attnum] <@ c.confkey) as fcols,
40
+ -- (SELECT r.relname from pg_class r where r.oid = c.confrelid) as ftable
41
+ FROM pg_catalog.pg_constraint c
42
+ INNER JOIN pg_catalog.pg_class rel
43
+ ON rel.oid = c.conrelid
44
+ INNER JOIN pg_catalog.pg_namespace nsp
45
+ ON nsp.oid = connamespace
46
+ ) t
47
+ WHERE TRUE
48
+ `;
49
+ if (table) query += `\nAND "table" = ${asValue(table)}`;
50
+ if (column) query += `\nAND cols @> ARRAY[${asValue(column)}]`;
51
+ if (types?.length) query += `\nAND type IN (${types.map((v) => asValue(v)).join(", ")})`;
52
+ return query;
53
+ };
@@ -1,7 +1,4 @@
1
- import type pgPromise from "pg-promise";
2
1
  import { asName } from "prostgles-types";
3
- import type { DB } from "../Prostgles";
4
- import { asValue } from "../PubSubManager/PubSubManagerUtils";
5
2
  import type { TableConfig } from "./TableConfig";
6
3
 
7
4
  type Args = {
@@ -50,56 +47,3 @@ export const getConstraintDefinitionQueries = ({
50
47
  }
51
48
  }
52
49
  };
53
-
54
- export type ColConstraint = {
55
- name: string;
56
- table: string;
57
- type: "c" | "p" | "u" | "f";
58
- cols: Array<string>;
59
- definition: string;
60
- schema: string;
61
- };
62
- type ColConstraintsArgs = {
63
- db: DB | pgPromise.ITask<{}>;
64
- table?: string;
65
- column?: string;
66
- types?: ColConstraint["type"][];
67
- };
68
- export const getColConstraintsQuery = ({
69
- column,
70
- table,
71
- types,
72
- }: Omit<ColConstraintsArgs, "db">) => {
73
- let query = `
74
- SELECT *
75
- FROM (
76
- SELECT distinct c.conname as name, c.contype as type,
77
- pg_get_constraintdef(c.oid) as definition,
78
- nsp.nspname as schema,
79
- (SELECT r.relname from pg_class r where r.oid = c.conrelid) as "table",
80
- (SELECT array_agg(attname::text) from pg_attribute
81
- where attrelid = c.conrelid and ARRAY[attnum] <@ c.conkey) as cols
82
- -- (SELECT array_agg(attname::text) from pg_attribute
83
- -- where attrelid = c.confrelid and ARRAY[attnum] <@ c.confkey) as fcols,
84
- -- (SELECT r.relname from pg_class r where r.oid = c.confrelid) as ftable
85
- FROM pg_catalog.pg_constraint c
86
- INNER JOIN pg_catalog.pg_class rel
87
- ON rel.oid = c.conrelid
88
- INNER JOIN pg_catalog.pg_namespace nsp
89
- ON nsp.oid = connamespace
90
- ) t
91
- WHERE TRUE
92
- `;
93
- if (table) query += `\nAND "table" = ${asValue(table)}`;
94
- if (column) query += `\nAND cols @> ARRAY[${asValue(column)}]`;
95
- if (types?.length) query += `\nAND type IN (${types.map((v) => asValue(v)).join(", ")})`;
96
- return query;
97
- };
98
- export const getColConstraints = ({
99
- db,
100
- column,
101
- table,
102
- types,
103
- }: ColConstraintsArgs): Promise<ColConstraint[]> => {
104
- return db.manyOrNone(getColConstraintsQuery({ column, table, types }));
105
- };
@@ -2,7 +2,7 @@ import type pgPromise from "pg-promise";
2
2
  import { asName } from "prostgles-types";
3
3
  import type { DB } from "../initProstgles";
4
4
  import type { ProstglesInitOptions, TableConfigMigrations } from "../ProstglesTypes";
5
- import { getColConstraints } from "./getConstraintDefinitionQueries";
5
+ import { fetchTableConstraints } from "./fetchTableConstraints";
6
6
  import type { TableConfig } from "./TableConfig";
7
7
  export type RequiredUndefined<T> = {
8
8
  [K in keyof Required<T>]: T[K];
@@ -115,7 +115,7 @@ const getMigration = async (
115
115
  db: t,
116
116
  oldVersion: latestVersion,
117
117
  getConstraints: (table, col, types) =>
118
- getColConstraints({ db: t, table, column: col, types }),
118
+ fetchTableConstraints({ db: t, table, column: col, types }),
119
119
  });
120
120
 
121
121
  return {
@@ -3,8 +3,8 @@ import { pgp } from "../DboBuilder/DboBuilder";
3
3
  import type { DB } from "../Prostgles";
4
4
  import type { ColumnMinimalInfo } from "./getColumnSQLDefinitionQuery";
5
5
  import { getTableColumns } from "./getColumnSQLDefinitionQuery";
6
- import type { ColConstraint, ConstraintDef } from "./getConstraintDefinitionQueries";
7
- import { getColConstraints } from "./getConstraintDefinitionQueries";
6
+ import type { ConstraintDef } from "./getConstraintDefinitionQueries";
7
+ import { type PGConstraint, fetchTableConstraints } from "./fetchTableConstraints";
8
8
 
9
9
  type Args = {
10
10
  db: DB;
@@ -23,12 +23,12 @@ export const getFutureTableSchema = async ({
23
23
  constraintDefs = [],
24
24
  db,
25
25
  }: Args): Promise<{
26
- constraints: ColConstraint[];
26
+ constraints: PGConstraint[];
27
27
  cols: ColumnMinimalInfo[];
28
28
  }> => {
29
29
  const { TransactionMode, isolationLevel } = pgp.txMode;
30
30
 
31
- let constraints: ColConstraint[] = [];
31
+ let constraints: PGConstraint[] = [];
32
32
  let cols: ColumnMinimalInfo[] = [];
33
33
  const txMode = new TransactionMode({
34
34
  tiLevel: isolationLevel.serializable,
@@ -56,7 +56,7 @@ export const getFutureTableSchema = async ({
56
56
 
57
57
  await t.any(query);
58
58
 
59
- constraints = await getColConstraints({ db: t, table: tableName });
59
+ constraints = await fetchTableConstraints({ db: t, table: tableName });
60
60
  cols = await getTableColumns({ db: t, table: tableName });
61
61
 
62
62
  return t.any("ROLLBACK");
@@ -6,10 +6,8 @@ import {
6
6
  } from "../PubSubManager/PubSubManagerUtils";
7
7
  import type { OnReadyCallbackBasic } from "../initProstgles";
8
8
  import type TableConfigurator from "./TableConfig";
9
- import {
10
- getColConstraints,
11
- getConstraintDefinitionQueries,
12
- } from "./getConstraintDefinitionQueries";
9
+ import { getConstraintDefinitionQueries } from "./getConstraintDefinitionQueries";
10
+ import { fetchTableConstraints } from "./fetchTableConstraints";
13
11
  import { getFutureTableSchema } from "./getFutureTableSchema";
14
12
  import { getPGIndexes } from "./getPGIndexes";
15
13
  import { getTableColumnQueries } from "./getTableColumnQueries";
@@ -83,13 +81,14 @@ export const initTableConfig = async function (this: TableConfigurator) {
83
81
  throw "pgp missing";
84
82
  }
85
83
 
86
- const MAX_IDENTIFIER_LENGTH = +(await this.db.one("SHOW max_identifier_length;"))
87
- .max_identifier_length;
84
+ const MAX_IDENTIFIER_LENGTH = +(
85
+ await this.db.one<{ max_identifier_length: number }>("SHOW max_identifier_length;")
86
+ ).max_identifier_length;
88
87
  if (!Number.isFinite(MAX_IDENTIFIER_LENGTH))
89
88
  throw `Could not obtain a valid max_identifier_length`;
90
89
  const asName = (v: string) => {
91
- if (v.length > MAX_IDENTIFIER_LENGTH - 1) {
92
- throw `The identifier name provided (${v}) is longer than the allowed limit (max_identifier_length - 1 = ${MAX_IDENTIFIER_LENGTH - 1} characters )\n Longest allowed: ${_asName(v.slice(0, MAX_IDENTIFIER_LENGTH - 1))} `;
90
+ if (v.length > MAX_IDENTIFIER_LENGTH) {
91
+ throw `The identifier name provided (${v}) is longer than the allowed limit (max_identifier_length = ${MAX_IDENTIFIER_LENGTH} characters )\n Longest allowed: ${_asName(v.slice(0, MAX_IDENTIFIER_LENGTH))} `;
93
92
  }
94
93
 
95
94
  return _asName(v);
@@ -198,7 +197,7 @@ export const initTableConfig = async function (this: TableConfigurator) {
198
197
 
199
198
  /** Run this first to ensure any dropped cols drop their constraints as well */
200
199
  await runQueries(queries);
201
- const currCons = await getColConstraints({
200
+ const currCons = await fetchTableConstraints({
202
201
  db: this.db,
203
202
  table: tableName,
204
203
  });
@@ -1,7 +1,7 @@
1
1
  import type pgPromise from "pg-promise";
2
2
  import type { ProstglesInitOptions } from "../ProstglesTypes";
3
3
  import { EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID } from "../PubSubManager/PubSubManagerUtils";
4
- import { getColConstraints } from "./getConstraintDefinitionQueries";
4
+ import { fetchTableConstraints } from "./fetchTableConstraints";
5
5
 
6
6
  export async function runMigrations(
7
7
  t: pgPromise.ITask<{}>,
@@ -43,7 +43,7 @@ export async function runMigrations(
43
43
  db: t,
44
44
  oldVersion: latestVersion,
45
45
  getConstraints: (table, col, types) =>
46
- getColConstraints({ db: t, table, column: col, types }),
46
+ fetchTableConstraints({ db: t, table, column: col, types }),
47
47
  });
48
48
  }
49
49