prostgles-server 3.0.99 → 3.0.100
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/dist/AuthHandler.js +6 -6
- package/dist/AuthHandler.js.map +1 -1
- package/dist/DboBuilder/ViewHandler.js +0 -1
- package/dist/DboBuilder/ViewHandler.js.map +1 -1
- package/dist/DboBuilder/subscribe.d.ts.map +1 -1
- package/dist/DboBuilder/subscribe.js +0 -17
- package/dist/DboBuilder/subscribe.js.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js +8 -2
- package/dist/JSONBValidation/validate_jsonb_schema_sql.js.map +1 -1
- package/dist/PubSubManager/PubSubManager.d.ts +4 -7
- package/dist/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/PubSubManager.js +13 -19
- package/dist/PubSubManager/PubSubManager.js.map +1 -1
- package/dist/PubSubManager/getInitQuery.d.ts +9 -0
- package/dist/PubSubManager/getInitQuery.d.ts.map +1 -0
- package/dist/PubSubManager/getInitQuery.js +537 -0
- package/dist/PubSubManager/getInitQuery.js.map +1 -0
- package/dist/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/dist/PubSubManager/initPubSubManager.js +46 -577
- package/dist/PubSubManager/initPubSubManager.js.map +1 -1
- package/dist/SchemaWatch.js +1 -0
- package/dist/SchemaWatch.js.map +1 -1
- package/lib/AuthHandler.js +6 -6
- package/lib/AuthHandler.ts +7 -7
- package/lib/DboBuilder/ViewHandler.js +0 -1
- package/lib/DboBuilder/ViewHandler.ts +1 -1
- package/lib/DboBuilder/subscribe.d.ts.map +1 -1
- package/lib/DboBuilder/subscribe.js +0 -17
- package/lib/DboBuilder/subscribe.ts +0 -25
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts +1 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.d.ts.map +1 -1
- package/lib/JSONBValidation/validate_jsonb_schema_sql.js +8 -2
- package/lib/JSONBValidation/validate_jsonb_schema_sql.ts +8 -2
- package/lib/PubSubManager/PubSubManager.d.ts +4 -7
- package/lib/PubSubManager/PubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/PubSubManager.js +16 -19
- package/lib/PubSubManager/PubSubManager.ts +18 -20
- package/lib/PubSubManager/getInitQuery.d.ts +9 -0
- package/lib/PubSubManager/getInitQuery.d.ts.map +1 -0
- package/lib/PubSubManager/getInitQuery.js +536 -0
- package/lib/PubSubManager/getInitQuery.ts +537 -0
- package/lib/PubSubManager/initPubSubManager.d.ts.map +1 -1
- package/lib/PubSubManager/initPubSubManager.js +46 -577
- package/lib/PubSubManager/initPubSubManager.ts +48 -585
- package/lib/SchemaWatch.js +1 -0
- package/lib/SchemaWatch.ts +1 -1
- package/package.json +3 -3
- package/tests/client/PID.txt +1 -1
- package/tests/server/package-lock.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initPubSubManager.js","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":";;;AAAA,8EAA2E;AAC3E,mDAA8D;AAC9D,MAAM,4BAA4B,GAAG,kEAA2E,CAAC;
|
|
1
|
+
{"version":3,"file":"initPubSubManager.js","sourceRoot":"","sources":["../../lib/PubSubManager/initPubSubManager.ts"],"names":[],"mappings":"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"}
|
package/dist/SchemaWatch.js
CHANGED
package/dist/SchemaWatch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SchemaWatch.js","sourceRoot":"","sources":["../lib/SchemaWatch.ts"],"names":[],"mappings":";;;AAAA,qDAA2C;AAC3C,6CAA0C;AAI1C,MAAa,WAAW;IAItB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAsF;QAFpL,WAAM,GAAG,KAAK,CAAC;QAGb,IAAG,CAAC,WAAW;YAAE,OAAO;QAExB,IAAI,WAAW,KAAK,eAAe,IAAI,CAAC,mBAAmB,EAAE;YAC3D,MAAM,8EAA8E,CAAC;SAEtF;aAAM,IACL,IAAA,0BAAQ,EAAC,eAAe,CAAC;YACzB,qBAAqB,IAAI,eAAe;YACxC,OAAO,eAAe,CAAC,mBAAmB,KAAK,QAAQ,EACvD;YAEA,IAAI,IAAI,CAAC,0BAA0B,EAAE;gBACnC,aAAa,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;aAChD;YACD,IAAI,CAAC,0BAA0B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;gBACvD,IAAG,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACxB,MAAM,QAAQ,GAAG,MAAM,uBAAU,CAAC,MAAM,CAAC,IAAW,CAAC,CAAC;gBACtD,IAAI,QAAQ,CAAC,iBAAiB,KAAK,YAAY,CAAC,iBAAiB,EAAE;oBACjE,eAAe,EAAE,CAAC;iBACnB;YACH,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;SAEzC;aAAM,IAAG,eAAe,KAAK,aAAa,EAAC;
|
|
1
|
+
{"version":3,"file":"SchemaWatch.js","sourceRoot":"","sources":["../lib/SchemaWatch.ts"],"names":[],"mappings":";;;AAAA,qDAA2C;AAC3C,6CAA0C;AAI1C,MAAa,WAAW;IAItB,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,mBAAmB,EAAE,YAAY,EAAE,eAAe,EAAsF;QAFpL,WAAM,GAAG,KAAK,CAAC;QAGb,IAAG,CAAC,WAAW;YAAE,OAAO;QAExB,IAAI,WAAW,KAAK,eAAe,IAAI,CAAC,mBAAmB,EAAE;YAC3D,MAAM,8EAA8E,CAAC;SAEtF;aAAM,IACL,IAAA,0BAAQ,EAAC,eAAe,CAAC;YACzB,qBAAqB,IAAI,eAAe;YACxC,OAAO,eAAe,CAAC,mBAAmB,KAAK,QAAQ,EACvD;YAEA,IAAI,IAAI,CAAC,0BAA0B,EAAE;gBACnC,aAAa,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;aAChD;YACD,IAAI,CAAC,0BAA0B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;gBACvD,IAAG,CAAC,IAAI,CAAC,MAAM;oBAAE,OAAO;gBACxB,MAAM,QAAQ,GAAG,MAAM,uBAAU,CAAC,MAAM,CAAC,IAAW,CAAC,CAAC;gBACtD,IAAI,QAAQ,CAAC,iBAAiB,KAAK,YAAY,CAAC,iBAAiB,EAAE;oBACjE,eAAe,EAAE,CAAC;iBACnB;YACH,CAAC,EAAE,eAAe,CAAC,mBAAmB,CAAC,CAAC;SAEzC;aAAM,IAAG,eAAe,KAAK,aAAa,EAAC;YAC1C,iBAAiB;SAClB;IAEH,CAAC;CAGF;AAlCD,kCAkCC"}
|
package/lib/AuthHandler.js
CHANGED
|
@@ -250,11 +250,11 @@ class AuthHandler {
|
|
|
250
250
|
};
|
|
251
251
|
throttledFunc = (func, throttle = 500) => {
|
|
252
252
|
return new Promise(async (resolve, reject) => {
|
|
253
|
-
let
|
|
253
|
+
let result, error, finished = false;
|
|
254
254
|
/**
|
|
255
255
|
* Throttle response times to prevent timing attacks
|
|
256
256
|
*/
|
|
257
|
-
interval = setInterval(() => {
|
|
257
|
+
const interval = setInterval(() => {
|
|
258
258
|
if (finished) {
|
|
259
259
|
clearInterval(interval);
|
|
260
260
|
if (error) {
|
|
@@ -280,7 +280,7 @@ class AuthHandler {
|
|
|
280
280
|
throw "Auth login config missing";
|
|
281
281
|
const { responseThrottle = 500 } = this.opts;
|
|
282
282
|
return this.throttledFunc(async () => {
|
|
283
|
-
|
|
283
|
+
const result = await this.opts?.login?.(params, this.dbo, this.db, client);
|
|
284
284
|
const err = {
|
|
285
285
|
msg: "Bad login result type. \nExpecting: undefined | null | { sid: string; expires: number } but got: " + JSON.stringify(result)
|
|
286
286
|
};
|
|
@@ -402,11 +402,11 @@ class AuthHandler {
|
|
|
402
402
|
makeSocketAuth = async (socket) => {
|
|
403
403
|
if (!this.opts)
|
|
404
404
|
return {};
|
|
405
|
-
|
|
405
|
+
const auth = {};
|
|
406
406
|
if (this.opts.expressConfig?.publicRoutes && !this.opts.expressConfig?.disableSocketAuthGuard) {
|
|
407
407
|
auth.pathGuard = true;
|
|
408
408
|
socket.removeAllListeners(prostgles_types_1.CHANNELS.AUTHGUARD);
|
|
409
|
-
socket.on(prostgles_types_1.CHANNELS.AUTHGUARD, async (params, cb = (
|
|
409
|
+
socket.on(prostgles_types_1.CHANNELS.AUTHGUARD, async (params, cb = (_err, _res) => { }) => {
|
|
410
410
|
try {
|
|
411
411
|
const { pathname, origin } = typeof params === "string" ? JSON.parse(params) : (params || {});
|
|
412
412
|
if (pathname && typeof pathname !== "string") {
|
|
@@ -442,7 +442,7 @@ class AuthHandler {
|
|
|
442
442
|
handlers.map(({ func, ch, name }) => {
|
|
443
443
|
auth[name] = true;
|
|
444
444
|
socket.removeAllListeners(ch);
|
|
445
|
-
socket.on(ch, async (params, cb = (...
|
|
445
|
+
socket.on(ch, async (params, cb = (..._callback) => { }) => {
|
|
446
446
|
try {
|
|
447
447
|
if (!socket)
|
|
448
448
|
throw "socket missing??!!";
|
package/lib/AuthHandler.ts
CHANGED
|
@@ -241,7 +241,7 @@ export default class AuthHandler {
|
|
|
241
241
|
httpOnly: true, // The cookie only accessible by the web server
|
|
242
242
|
//signed: true // Indicates if the cookie should be signed
|
|
243
243
|
secure: true,
|
|
244
|
-
sameSite: "strict" as
|
|
244
|
+
sameSite: "strict" as const,
|
|
245
245
|
...(this.opts?.expressConfig?.cookieOptions || {})
|
|
246
246
|
};
|
|
247
247
|
const cookieData = sid;
|
|
@@ -437,12 +437,12 @@ export default class AuthHandler {
|
|
|
437
437
|
|
|
438
438
|
return new Promise(async (resolve, reject) => {
|
|
439
439
|
|
|
440
|
-
let
|
|
440
|
+
let result: any, error: any, finished = false;
|
|
441
441
|
|
|
442
442
|
/**
|
|
443
443
|
* Throttle response times to prevent timing attacks
|
|
444
444
|
*/
|
|
445
|
-
interval = setInterval(() => {
|
|
445
|
+
const interval = setInterval(() => {
|
|
446
446
|
if (finished) {
|
|
447
447
|
clearInterval(interval);
|
|
448
448
|
if (error) {
|
|
@@ -470,7 +470,7 @@ export default class AuthHandler {
|
|
|
470
470
|
const { responseThrottle = 500 } = this.opts;
|
|
471
471
|
|
|
472
472
|
return this.throttledFunc(async () => {
|
|
473
|
-
|
|
473
|
+
const result = await this.opts?.login?.(params, this.dbo, this.db, client);
|
|
474
474
|
const err = {
|
|
475
475
|
msg: "Bad login result type. \nExpecting: undefined | null | { sid: string; expires: number } but got: " + JSON.stringify(result)
|
|
476
476
|
}
|
|
@@ -603,14 +603,14 @@ export default class AuthHandler {
|
|
|
603
603
|
makeSocketAuth = async (socket: PRGLIOSocket): Promise<{ auth: AuthSocketSchema; userData: AuthResult; } | Record<string, never>> => {
|
|
604
604
|
if (!this.opts) return {};
|
|
605
605
|
|
|
606
|
-
|
|
606
|
+
const auth: Partial<Record<keyof Omit<AuthSocketSchema, "user">, boolean | undefined>> & { user?: AnyObject | undefined } = {};
|
|
607
607
|
|
|
608
608
|
if (this.opts.expressConfig?.publicRoutes && !this.opts.expressConfig?.disableSocketAuthGuard) {
|
|
609
609
|
|
|
610
610
|
auth.pathGuard = true;
|
|
611
611
|
|
|
612
612
|
socket.removeAllListeners(CHANNELS.AUTHGUARD)
|
|
613
|
-
socket.on(CHANNELS.AUTHGUARD, async (params: AuthGuardLocation, cb = (
|
|
613
|
+
socket.on(CHANNELS.AUTHGUARD, async (params: AuthGuardLocation, cb = (_err: any, _res?: AuthGuardLocationResponse) => { /** EMPTY */ }) => {
|
|
614
614
|
|
|
615
615
|
try {
|
|
616
616
|
|
|
@@ -660,7 +660,7 @@ export default class AuthHandler {
|
|
|
660
660
|
auth[name] = true;
|
|
661
661
|
|
|
662
662
|
socket.removeAllListeners(ch)
|
|
663
|
-
socket.on(ch, async (params: any, cb = (...
|
|
663
|
+
socket.on(ch, async (params: any, cb = (..._callback: any) => { /** Empty */ }) => {
|
|
664
664
|
|
|
665
665
|
try {
|
|
666
666
|
if (!socket) throw "socket missing??!!";
|
|
@@ -373,7 +373,7 @@ export class ViewHandler {
|
|
|
373
373
|
|
|
374
374
|
/* Get join options */
|
|
375
375
|
const jo = this.joins.find(j => j.tables.includes(t1) && j.tables.includes(t2));
|
|
376
|
-
if (!jo) throw `Joining ${t1} <-> ${t2} dissallowed or missing
|
|
376
|
+
if (!jo) throw `Joining ${t1} <-> ${t2} dissallowed or missing`;
|
|
377
377
|
|
|
378
378
|
const on: [string, string][][] = [];
|
|
379
379
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAoC,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC;AAEpD,iBAAe,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,GAAG,CAAA;CAAE,CAAC,CAAA;AAC/I,iBAAe,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"subscribe.d.ts","sourceRoot":"","sources":["subscribe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAU,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACrE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAoC,MAAM,eAAe,CAAC;AACtF,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,MAAM,MAAM,SAAS,GAAG,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,GAAG,CAAC;AAEpD,iBAAe,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,GAAG,CAAA;CAAE,CAAC,CAAA;AAC/I,iBAAe,SAAS,CAAC,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,SAAS,EAAE,WAAW,EAAE,SAAS,GAAG,SAAS,EAAE,WAAW,EAAE,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;AAmMzL,OAAO,EAAE,SAAS,EAAE,CAAA"}
|
|
@@ -170,20 +170,3 @@ async function subscribe(filter, params, localFunc, table_rules, localParams) {
|
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
172
|
exports.subscribe = subscribe;
|
|
173
|
-
async function _subscribe(localFunc, table_rules, localParams) {
|
|
174
|
-
if (localFunc && !localParams) {
|
|
175
|
-
return {
|
|
176
|
-
unsubscribe: () => { }
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
if (localParams) {
|
|
180
|
-
return "";
|
|
181
|
-
}
|
|
182
|
-
return {
|
|
183
|
-
unsubscribe: () => { }
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
const d = async () => {
|
|
187
|
-
const res = await _subscribe(() => { });
|
|
188
|
-
const res2 = await _subscribe(undefined, {}, {});
|
|
189
|
-
};
|
|
@@ -202,29 +202,4 @@ async function subscribe(this: ViewHandler, filter: Filter, params: SubscribePar
|
|
|
202
202
|
}
|
|
203
203
|
}
|
|
204
204
|
|
|
205
|
-
|
|
206
|
-
async function _subscribe(localFunc: LocalFunc): Promise<string>
|
|
207
|
-
async function _subscribe(localFunc: undefined, table_rules: TableRule, localParams: LocalParams): Promise<{ unsubscribe: () => any }>
|
|
208
|
-
async function _subscribe(localFunc: LocalFunc | undefined, table_rules?: TableRule, localParams?: LocalParams): Promise<{ unsubscribe: () => any } | string> {
|
|
209
|
-
if(localFunc && !localParams){
|
|
210
|
-
return {
|
|
211
|
-
unsubscribe: () => {}
|
|
212
|
-
}
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
if(localParams){
|
|
216
|
-
return ""
|
|
217
|
-
}
|
|
218
|
-
|
|
219
|
-
return {
|
|
220
|
-
unsubscribe: () => {}
|
|
221
|
-
}
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
const d = async () => {
|
|
225
|
-
|
|
226
|
-
const res = await _subscribe(()=>{})
|
|
227
|
-
const res2 = await _subscribe(undefined, {}, {})
|
|
228
|
-
}
|
|
229
|
-
|
|
230
205
|
export { subscribe }
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validate_jsonb_schema_sql.d.ts","sourceRoot":"","sources":["validate_jsonb_schema_sql.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"validate_jsonb_schema_sql.d.ts","sourceRoot":"","sources":["validate_jsonb_schema_sql.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,wBAAwB,yBAAmC,CAAC;AACzE,eAAO,MAAM,yBAAyB,QA+VrC,CAAC"}
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.validate_jsonb_schema_sql = exports.VALIDATE_SCHEMA_FUNCNAME = void 0;
|
|
4
|
-
|
|
4
|
+
const PubSubManager_1 = require("../PubSubManager/PubSubManager");
|
|
5
|
+
exports.VALIDATE_SCHEMA_FUNCNAME = "validate_jsonb_schema";
|
|
5
6
|
exports.validate_jsonb_schema_sql = `
|
|
6
7
|
|
|
8
|
+
/*
|
|
9
|
+
* ${PubSubManager_1.PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
10
|
+
*/
|
|
11
|
+
|
|
7
12
|
DROP FUNCTION IF EXISTS ${exports.VALIDATE_SCHEMA_FUNCNAME}(jsonb_schema text, data jsonb, checked_path text[]);
|
|
8
13
|
|
|
9
14
|
CREATE OR REPLACE FUNCTION ${exports.VALIDATE_SCHEMA_FUNCNAME}(jsonb_schema TEXT, data JSONB, checked_path TEXT[] DEFAULT ARRAY[]::TEXT[]) RETURNS boolean AS
|
|
@@ -281,7 +286,8 @@ END;
|
|
|
281
286
|
$f$ LANGUAGE 'plpgsql' IMMUTABLE;
|
|
282
287
|
|
|
283
288
|
COMMENT ON FUNCTION ${exports.VALIDATE_SCHEMA_FUNCNAME}
|
|
284
|
-
IS $$
|
|
289
|
+
IS $$prostgles-server internal function used in column CHECK conditions to validate jsonb data against a column schema specified in tableConfig.
|
|
290
|
+
Example usage:
|
|
285
291
|
validate_jsonb_schema(
|
|
286
292
|
'{ "type": { "a": "number[]" } }',
|
|
287
293
|
'{ "a": [2] }'
|
|
@@ -1,8 +1,13 @@
|
|
|
1
|
+
import { PubSubManager } from "../PubSubManager/PubSubManager";
|
|
1
2
|
|
|
2
3
|
|
|
3
|
-
export const VALIDATE_SCHEMA_FUNCNAME = "
|
|
4
|
+
export const VALIDATE_SCHEMA_FUNCNAME = "validate_jsonb_schema" as const;
|
|
4
5
|
export const validate_jsonb_schema_sql = `
|
|
5
6
|
|
|
7
|
+
/*
|
|
8
|
+
* ${PubSubManager.EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID}
|
|
9
|
+
*/
|
|
10
|
+
|
|
6
11
|
DROP FUNCTION IF EXISTS ${VALIDATE_SCHEMA_FUNCNAME}(jsonb_schema text, data jsonb, checked_path text[]);
|
|
7
12
|
|
|
8
13
|
CREATE OR REPLACE FUNCTION ${VALIDATE_SCHEMA_FUNCNAME}(jsonb_schema TEXT, data JSONB, checked_path TEXT[] DEFAULT ARRAY[]::TEXT[]) RETURNS boolean AS
|
|
@@ -280,7 +285,8 @@ END;
|
|
|
280
285
|
$f$ LANGUAGE 'plpgsql' IMMUTABLE;
|
|
281
286
|
|
|
282
287
|
COMMENT ON FUNCTION ${VALIDATE_SCHEMA_FUNCNAME}
|
|
283
|
-
IS $$
|
|
288
|
+
IS $$prostgles-server internal function used in column CHECK conditions to validate jsonb data against a column schema specified in tableConfig.
|
|
289
|
+
Example usage:
|
|
284
290
|
validate_jsonb_schema(
|
|
285
291
|
'{ "type": { "a": "number[]" } }',
|
|
286
292
|
'{ "a": [2] }'
|
|
@@ -114,6 +114,9 @@ export declare class PubSubManager {
|
|
|
114
114
|
preffix: string;
|
|
115
115
|
getFull: (appID?: string) => string;
|
|
116
116
|
};
|
|
117
|
+
/**
|
|
118
|
+
* Used facilitate concurrent prostgles connections to the same database
|
|
119
|
+
*/
|
|
117
120
|
appID?: string;
|
|
118
121
|
appCheckFrequencyMS: number;
|
|
119
122
|
appCheck?: ReturnType<typeof setInterval>;
|
|
@@ -128,12 +131,6 @@ export declare class PubSubManager {
|
|
|
128
131
|
canContinue: () => boolean;
|
|
129
132
|
appChecking: boolean;
|
|
130
133
|
init: any;
|
|
131
|
-
DB_OBJ_NAMES: {
|
|
132
|
-
readonly trigger_add_remove_func: "prostgles.trigger_add_remove_func";
|
|
133
|
-
readonly data_watch_func: "prostgles.prostgles_trigger_function";
|
|
134
|
-
readonly schema_watch_func: "prostgles.schema_watch_func";
|
|
135
|
-
readonly schema_watch_trigger: "prostgles_schema_watch_trigger_new";
|
|
136
|
-
};
|
|
137
134
|
static SCHEMA_ALTERING_QUERIES: string[];
|
|
138
135
|
static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID: string;
|
|
139
136
|
prepareTriggers: () => Promise<boolean>;
|
|
@@ -144,7 +141,7 @@ export declare class PubSubManager {
|
|
|
144
141
|
payload: string;
|
|
145
142
|
}) => Promise<void>;
|
|
146
143
|
pushSubData(sub: SubscriptionParams, err?: any): true | Promise<unknown>;
|
|
147
|
-
upsertSocket(socket: any
|
|
144
|
+
upsertSocket(socket: any): void;
|
|
148
145
|
syncTimeout?: ReturnType<typeof setTimeout>;
|
|
149
146
|
syncData(sync: SyncParams, clientData: ClientExpressData | undefined, source: "trigger" | "client"): Promise<void>;
|
|
150
147
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["PubSubManager.ts"],"names":[],"mappings":";AAKA,OAAO,EAAE,0BAA0B,EAAE,MAAM,+BAA+B,CAAC;AAE3E,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAc,MAAM,eAAe,CAAC;AAClH,OAAO,EAAE,EAAE,EAAe,MAAM,cAAc,CAAC;AAO/C,OAAO,EAAE,YAAY,EAAE,WAAW,EAAU,GAAG,EAAW,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE7F,OAAO,EAAE,iBAAiB,EAAY,MAAM,oBAAoB,CAAC;AACjE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"PubSubManager.d.ts","sourceRoot":"","sources":["PubSubManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -37,6 +37,7 @@ const pgPromise = __importStar(require("pg-promise"));
|
|
|
37
37
|
const prostgles_types_1 = require("prostgles-types");
|
|
38
38
|
const SyncReplication_1 = require("../SyncReplication");
|
|
39
39
|
const util_1 = require("prostgles-types/dist/util");
|
|
40
|
+
const getInitQuery_1 = require("./getInitQuery");
|
|
40
41
|
const pgp = pgPromise({
|
|
41
42
|
promiseLib: Bluebird
|
|
42
43
|
});
|
|
@@ -66,7 +67,7 @@ class PubSubManager {
|
|
|
66
67
|
onSchemaChange = undefined;
|
|
67
68
|
postgresNotifListenManager;
|
|
68
69
|
constructor(options) {
|
|
69
|
-
const { wsChannelNamePrefix,
|
|
70
|
+
const { wsChannelNamePrefix, onSchemaChange, dboBuilder } = options;
|
|
70
71
|
if (!dboBuilder.db || !dboBuilder.dbo) {
|
|
71
72
|
throw 'MISSING: db_pg, db';
|
|
72
73
|
}
|
|
@@ -91,6 +92,9 @@ class PubSubManager {
|
|
|
91
92
|
return this.NOTIF_CHANNEL.preffix + finalAppId;
|
|
92
93
|
}
|
|
93
94
|
};
|
|
95
|
+
/**
|
|
96
|
+
* Used facilitate concurrent prostgles connections to the same database
|
|
97
|
+
*/
|
|
94
98
|
appID;
|
|
95
99
|
appCheckFrequencyMS = 10 * 1000;
|
|
96
100
|
appCheck;
|
|
@@ -123,11 +127,9 @@ class PubSubManager {
|
|
|
123
127
|
clearInterval(this.appCheck);
|
|
124
128
|
}
|
|
125
129
|
this.onSocketDisconnected();
|
|
126
|
-
|
|
127
|
-
// this.postgresNotifListenManager.stopListening();
|
|
128
|
-
// }
|
|
129
|
-
if (!this.postgresNotifListenManager)
|
|
130
|
+
if (!this.postgresNotifListenManager) {
|
|
130
131
|
throw "this.postgresNotifListenManager missing";
|
|
132
|
+
}
|
|
131
133
|
this.postgresNotifListenManager.destroy();
|
|
132
134
|
};
|
|
133
135
|
canContinue = () => {
|
|
@@ -139,12 +141,6 @@ class PubSubManager {
|
|
|
139
141
|
};
|
|
140
142
|
appChecking = false;
|
|
141
143
|
init = initPubSubManager_1.initPubSubManager.bind(this);
|
|
142
|
-
DB_OBJ_NAMES = {
|
|
143
|
-
trigger_add_remove_func: "prostgles.trigger_add_remove_func",
|
|
144
|
-
data_watch_func: "prostgles.prostgles_trigger_function",
|
|
145
|
-
schema_watch_func: "prostgles.schema_watch_func",
|
|
146
|
-
schema_watch_trigger: "prostgles_schema_watch_trigger_new"
|
|
147
|
-
};
|
|
148
144
|
static SCHEMA_ALTERING_QUERIES = ['CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
|
|
149
145
|
static EXCLUDE_QUERY_FROM_SCHEMA_WATCH_ID = "prostgles internal query that should be excluded from ";
|
|
150
146
|
prepareTriggers = async () => {
|
|
@@ -189,6 +185,7 @@ class PubSubManager {
|
|
|
189
185
|
);
|
|
190
186
|
|
|
191
187
|
is_super_user := EXISTS (select 1 from pg_user where usename = CURRENT_USER AND usesuper IS TRUE);
|
|
188
|
+
|
|
192
189
|
/**
|
|
193
190
|
* Delete stale app records
|
|
194
191
|
* */
|
|
@@ -210,7 +207,7 @@ class PubSubManager {
|
|
|
210
207
|
ev_trg_needed := EXISTS (SELECT 1 FROM prostgles.apps WHERE watching_schema IS TRUE);
|
|
211
208
|
ev_trg_exists := EXISTS (
|
|
212
209
|
SELECT 1 FROM pg_catalog.pg_event_trigger
|
|
213
|
-
WHERE evtname = ${(0, exports.asValue)(
|
|
210
|
+
WHERE evtname = ${(0, exports.asValue)(getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
|
|
214
211
|
);
|
|
215
212
|
|
|
216
213
|
-- RAISE NOTICE ' ev_trg_needed %, ev_trg_exists %', ev_trg_needed, ev_trg_exists;
|
|
@@ -222,7 +219,7 @@ class PubSubManager {
|
|
|
222
219
|
|
|
223
220
|
SELECT format(
|
|
224
221
|
$$ DROP EVENT TRIGGER IF EXISTS %I ; $$
|
|
225
|
-
, ${(0, exports.asValue)(
|
|
222
|
+
, ${(0, exports.asValue)(getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger)}
|
|
226
223
|
)
|
|
227
224
|
INTO q;
|
|
228
225
|
|
|
@@ -239,11 +236,11 @@ class PubSubManager {
|
|
|
239
236
|
AND ev_trg_exists IS FALSE
|
|
240
237
|
THEN
|
|
241
238
|
|
|
242
|
-
DROP EVENT TRIGGER IF EXISTS ${
|
|
243
|
-
CREATE EVENT TRIGGER ${
|
|
239
|
+
DROP EVENT TRIGGER IF EXISTS ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger};
|
|
240
|
+
CREATE EVENT TRIGGER ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_trigger} ON ddl_command_end
|
|
244
241
|
WHEN TAG IN ('COMMENT', 'CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO')
|
|
245
242
|
--WHEN TAG IN ('CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE TRIGGER', 'DROP TRIGGER')
|
|
246
|
-
EXECUTE PROCEDURE ${
|
|
243
|
+
EXECUTE PROCEDURE ${getInitQuery_1.DB_OBJ_NAMES.schema_watch_func}();
|
|
247
244
|
|
|
248
245
|
--RAISE NOTICE ' CREATED EVENT TRIGGER %', q;
|
|
249
246
|
END IF;
|
|
@@ -409,7 +406,7 @@ class PubSubManager {
|
|
|
409
406
|
});
|
|
410
407
|
});
|
|
411
408
|
}
|
|
412
|
-
upsertSocket(socket
|
|
409
|
+
upsertSocket(socket) {
|
|
413
410
|
if (socket && !this.sockets[socket.id]) {
|
|
414
411
|
this.sockets[socket.id] = socket;
|
|
415
412
|
socket.on("disconnect", () => this.onSocketDisconnected(socket));
|
|
@@ -431,7 +428,7 @@ class PubSubManager {
|
|
|
431
428
|
const { name: table_name } = table_info, channel_name = `${this.socketChannelPreffix}.${table_name}.${JSON.stringify(filter)}.sync`;
|
|
432
429
|
if (!synced_field)
|
|
433
430
|
throw "synced_field missing from table_rules";
|
|
434
|
-
this.upsertSocket(socket
|
|
431
|
+
this.upsertSocket(socket);
|
|
435
432
|
const upsertSync = () => {
|
|
436
433
|
const newSync = {
|
|
437
434
|
channel_name,
|
|
@@ -529,7 +526,7 @@ class PubSubManager {
|
|
|
529
526
|
validated_throttle = throttle;
|
|
530
527
|
}
|
|
531
528
|
const channel_name = `${this.socketChannelPreffix}.${table_info.name}.${JSON.stringify(filter)}.${JSON.stringify(params)}.${"m"}.sub`;
|
|
532
|
-
this.upsertSocket(socket
|
|
529
|
+
this.upsertSocket(socket);
|
|
533
530
|
const upsertSub = (newSubData, isReadyOverride) => {
|
|
534
531
|
const { table_name, condition: _cond, is_ready = false, parentSubParams } = newSubData, condition = parseCondition(_cond), newSub = {
|
|
535
532
|
socket,
|
|
@@ -18,6 +18,7 @@ import { SelectParams, FieldFilter, asName, WAL, isEmpty, AnyObject } from "pros
|
|
|
18
18
|
import { ClientExpressData, syncData } from "../SyncReplication";
|
|
19
19
|
import { TableRule } from "../PublishParser";
|
|
20
20
|
import { find } from "prostgles-types/dist/util";
|
|
21
|
+
import { DB_OBJ_NAMES } from "./getInitQuery";
|
|
21
22
|
|
|
22
23
|
|
|
23
24
|
type PGP = pgPromise.IMain<{}, pg.IClient>;
|
|
@@ -138,7 +139,7 @@ export class PubSubManager {
|
|
|
138
139
|
postgresNotifListenManager?: PostgresNotifListenManager;
|
|
139
140
|
|
|
140
141
|
private constructor(options: PubSubManagerOptions) {
|
|
141
|
-
const { wsChannelNamePrefix,
|
|
142
|
+
const { wsChannelNamePrefix, onSchemaChange, dboBuilder } = options;
|
|
142
143
|
if (!dboBuilder.db || !dboBuilder.dbo) {
|
|
143
144
|
throw 'MISSING: db_pg, db';
|
|
144
145
|
}
|
|
@@ -167,6 +168,9 @@ export class PubSubManager {
|
|
|
167
168
|
}
|
|
168
169
|
}
|
|
169
170
|
|
|
171
|
+
/**
|
|
172
|
+
* Used facilitate concurrent prostgles connections to the same database
|
|
173
|
+
*/
|
|
170
174
|
appID?: string;
|
|
171
175
|
|
|
172
176
|
appCheckFrequencyMS = 10 * 1000;
|
|
@@ -207,11 +211,10 @@ export class PubSubManager {
|
|
|
207
211
|
if (this.appCheck) {
|
|
208
212
|
clearInterval(this.appCheck);
|
|
209
213
|
}
|
|
210
|
-
this.onSocketDisconnected();
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
if (!this.postgresNotifListenManager) throw "this.postgresNotifListenManager missing"
|
|
214
|
+
this.onSocketDisconnected();
|
|
215
|
+
if (!this.postgresNotifListenManager) {
|
|
216
|
+
throw "this.postgresNotifListenManager missing"
|
|
217
|
+
}
|
|
215
218
|
this.postgresNotifListenManager.destroy();
|
|
216
219
|
}
|
|
217
220
|
|
|
@@ -226,12 +229,6 @@ export class PubSubManager {
|
|
|
226
229
|
appChecking = false;
|
|
227
230
|
init = initPubSubManager.bind(this);
|
|
228
231
|
|
|
229
|
-
DB_OBJ_NAMES = {
|
|
230
|
-
trigger_add_remove_func: "prostgles.trigger_add_remove_func",
|
|
231
|
-
data_watch_func: "prostgles.prostgles_trigger_function",
|
|
232
|
-
schema_watch_func: "prostgles.schema_watch_func",
|
|
233
|
-
schema_watch_trigger: "prostgles_schema_watch_trigger_new"
|
|
234
|
-
} as const;
|
|
235
232
|
|
|
236
233
|
static SCHEMA_ALTERING_QUERIES = ['CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO'];
|
|
237
234
|
|
|
@@ -279,6 +276,7 @@ export class PubSubManager {
|
|
|
279
276
|
);
|
|
280
277
|
|
|
281
278
|
is_super_user := EXISTS (select 1 from pg_user where usename = CURRENT_USER AND usesuper IS TRUE);
|
|
279
|
+
|
|
282
280
|
/**
|
|
283
281
|
* Delete stale app records
|
|
284
282
|
* */
|
|
@@ -300,7 +298,7 @@ export class PubSubManager {
|
|
|
300
298
|
ev_trg_needed := EXISTS (SELECT 1 FROM prostgles.apps WHERE watching_schema IS TRUE);
|
|
301
299
|
ev_trg_exists := EXISTS (
|
|
302
300
|
SELECT 1 FROM pg_catalog.pg_event_trigger
|
|
303
|
-
WHERE evtname = ${asValue(
|
|
301
|
+
WHERE evtname = ${asValue(DB_OBJ_NAMES.schema_watch_trigger)}
|
|
304
302
|
);
|
|
305
303
|
|
|
306
304
|
-- RAISE NOTICE ' ev_trg_needed %, ev_trg_exists %', ev_trg_needed, ev_trg_exists;
|
|
@@ -312,7 +310,7 @@ export class PubSubManager {
|
|
|
312
310
|
|
|
313
311
|
SELECT format(
|
|
314
312
|
$$ DROP EVENT TRIGGER IF EXISTS %I ; $$
|
|
315
|
-
, ${asValue(
|
|
313
|
+
, ${asValue(DB_OBJ_NAMES.schema_watch_trigger)}
|
|
316
314
|
)
|
|
317
315
|
INTO q;
|
|
318
316
|
|
|
@@ -329,11 +327,11 @@ export class PubSubManager {
|
|
|
329
327
|
AND ev_trg_exists IS FALSE
|
|
330
328
|
THEN
|
|
331
329
|
|
|
332
|
-
DROP EVENT TRIGGER IF EXISTS ${
|
|
333
|
-
CREATE EVENT TRIGGER ${
|
|
330
|
+
DROP EVENT TRIGGER IF EXISTS ${DB_OBJ_NAMES.schema_watch_trigger};
|
|
331
|
+
CREATE EVENT TRIGGER ${DB_OBJ_NAMES.schema_watch_trigger} ON ddl_command_end
|
|
334
332
|
WHEN TAG IN ('COMMENT', 'CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE VIEW', 'DROP VIEW', 'ALTER VIEW', 'CREATE TABLE AS', 'SELECT INTO')
|
|
335
333
|
--WHEN TAG IN ('CREATE TABLE', 'ALTER TABLE', 'DROP TABLE', 'CREATE TRIGGER', 'DROP TRIGGER')
|
|
336
|
-
EXECUTE PROCEDURE ${
|
|
334
|
+
EXECUTE PROCEDURE ${DB_OBJ_NAMES.schema_watch_func}();
|
|
337
335
|
|
|
338
336
|
--RAISE NOTICE ' CREATED EVENT TRIGGER %', q;
|
|
339
337
|
END IF;
|
|
@@ -540,7 +538,7 @@ export class PubSubManager {
|
|
|
540
538
|
});
|
|
541
539
|
}
|
|
542
540
|
|
|
543
|
-
upsertSocket(socket: any
|
|
541
|
+
upsertSocket(socket: any) {
|
|
544
542
|
if (socket && !this.sockets[socket.id]) {
|
|
545
543
|
this.sockets[socket.id] = socket;
|
|
546
544
|
socket.on("disconnect", () => this.onSocketDisconnected(socket));
|
|
@@ -572,7 +570,7 @@ export class PubSubManager {
|
|
|
572
570
|
|
|
573
571
|
if (!synced_field) throw "synced_field missing from table_rules";
|
|
574
572
|
|
|
575
|
-
this.upsertSocket(socket
|
|
573
|
+
this.upsertSocket(socket);
|
|
576
574
|
|
|
577
575
|
const upsertSync = () => {
|
|
578
576
|
const newSync = {
|
|
@@ -692,7 +690,7 @@ export class PubSubManager {
|
|
|
692
690
|
|
|
693
691
|
const channel_name = `${this.socketChannelPreffix}.${table_info.name}.${JSON.stringify(filter)}.${JSON.stringify(params)}.${"m"}.sub`;
|
|
694
692
|
|
|
695
|
-
this.upsertSocket(socket
|
|
693
|
+
this.upsertSocket(socket);
|
|
696
694
|
|
|
697
695
|
const upsertSub = (newSubData: { table_name: string; condition: string; is_ready: boolean; parentSubParams: SubscriptionParams["parentSubParams"] }, isReadyOverride: boolean | undefined) => {
|
|
698
696
|
const { table_name, condition: _cond, is_ready = false, parentSubParams } = newSubData,
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { PubSubManager } from "./PubSubManager";
|
|
2
|
+
export declare const DB_OBJ_NAMES: {
|
|
3
|
+
readonly trigger_add_remove_func: "prostgles.trigger_add_remove_func";
|
|
4
|
+
readonly data_watch_func: "prostgles.prostgles_trigger_function";
|
|
5
|
+
readonly schema_watch_func: "prostgles.schema_watch_func";
|
|
6
|
+
readonly schema_watch_trigger: "prostgles_schema_watch_trigger_new";
|
|
7
|
+
};
|
|
8
|
+
export declare const getInitQuery: (this: PubSubManager) => Promise<string>;
|
|
9
|
+
//# sourceMappingURL=getInitQuery.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getInitQuery.d.ts","sourceRoot":"","sources":["getInitQuery.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG9D,eAAO,MAAM,YAAY;;;;;CAKf,CAAC;AAEX,eAAO,MAAM,YAAY,SAAwB,aAAa,KAAG,QAAQ,MAAM,CA6gB9E,CAAA"}
|