prostgles-server 4.2.142 → 4.2.144
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/Auth/AuthHandler.js +2 -2
- package/dist/Auth/AuthHandler.js.map +1 -1
- package/dist/Auth/setAuthProviders.d.ts +5 -0
- package/dist/Auth/setAuthProviders.d.ts.map +1 -1
- package/dist/Auth/setAuthProviders.js +10 -2
- package/dist/Auth/setAuthProviders.js.map +1 -1
- package/dist/Auth/setupAuthRoutes.d.ts.map +1 -1
- package/dist/Auth/setupAuthRoutes.js +3 -2
- package/dist/Auth/setupAuthRoutes.js.map +1 -1
- package/dist/FileManager/FileManager.d.ts +1 -0
- package/dist/FileManager/FileManager.d.ts.map +1 -1
- package/dist/FileManager/FileManager.js +12 -1
- package/dist/FileManager/FileManager.js.map +1 -1
- package/dist/Prostgles.d.ts.map +1 -1
- package/dist/Prostgles.js +3 -77
- package/dist/Prostgles.js.map +1 -1
- package/dist/RestApi.d.ts +7 -0
- package/dist/RestApi.d.ts.map +1 -1
- package/dist/RestApi.js.map +1 -1
- package/dist/initProstgles.d.ts +2 -1
- package/dist/initProstgles.d.ts.map +1 -1
- package/dist/initProstgles.js +13 -2
- package/dist/initProstgles.js.map +1 -1
- package/dist/onSocketConnected.d.ts +6 -0
- package/dist/onSocketConnected.d.ts.map +1 -0
- package/dist/onSocketConnected.js +85 -0
- package/dist/onSocketConnected.js.map +1 -0
- package/lib/Auth/AuthHandler.ts +2 -2
- package/lib/Auth/setAuthProviders.ts +12 -1
- package/lib/Auth/setupAuthRoutes.ts +5 -3
- package/lib/FileManager/FileManager.ts +11 -0
- package/lib/Prostgles.ts +3 -97
- package/lib/RestApi.ts +7 -0
- package/lib/initProstgles.ts +17 -3
- package/lib/onSocketConnected.ts +102 -0
- package/package.json +1 -1
- package/tests/client/hooks.spec.ts +9 -10
- package/tests/server/package-lock.json +1 -1
package/dist/initProstgles.js
CHANGED
|
@@ -9,6 +9,7 @@ const Prostgles_1 = require("./Prostgles");
|
|
|
9
9
|
const PublishParser_1 = require("./PublishParser/PublishParser");
|
|
10
10
|
const SchemaWatch_1 = require("./SchemaWatch/SchemaWatch");
|
|
11
11
|
const utils_1 = require("./utils");
|
|
12
|
+
const clientOnlyUpdateKeys = ["auth"];
|
|
12
13
|
const initProstgles = async function (onReady, reason) {
|
|
13
14
|
this.loaded = false;
|
|
14
15
|
if (!this.db) {
|
|
@@ -63,8 +64,9 @@ const initProstgles = async function (onReady, reason) {
|
|
|
63
64
|
await this.initRestApi();
|
|
64
65
|
this.schemaWatch = await SchemaWatch_1.SchemaWatch.create(this.dboBuilder);
|
|
65
66
|
if (this.opts.publish) {
|
|
66
|
-
if (!this.opts.io)
|
|
67
|
+
if (!this.opts.io) {
|
|
67
68
|
console.warn("IO missing. Publish has no effect without io");
|
|
69
|
+
}
|
|
68
70
|
/* 3.9 Check auth config */
|
|
69
71
|
this.authHandler = new AuthHandler_1.AuthHandler(this);
|
|
70
72
|
await this.authHandler.init();
|
|
@@ -125,7 +127,16 @@ const initProstgles = async function (onReady, reason) {
|
|
|
125
127
|
this.authHandler = new AuthHandler_1.AuthHandler(this);
|
|
126
128
|
await this.authHandler.init();
|
|
127
129
|
}
|
|
128
|
-
if (
|
|
130
|
+
if ((0, prostgles_types_1.isEmpty)(newOpts))
|
|
131
|
+
return;
|
|
132
|
+
/**
|
|
133
|
+
* Some of these changes require clients to reconnect
|
|
134
|
+
* While others also affect the server and onReady should be called
|
|
135
|
+
*/
|
|
136
|
+
if ((0, prostgles_types_1.getKeys)(newOpts).every(updatedKey => clientOnlyUpdateKeys.includes(updatedKey))) {
|
|
137
|
+
await this.setSocketEvents();
|
|
138
|
+
}
|
|
139
|
+
else {
|
|
129
140
|
await this.init(onReady, { type: "prgl.update", newOpts });
|
|
130
141
|
}
|
|
131
142
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"initProstgles.js","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":";;;AAAA,wCAAwC;AAExC,qDAAmD;AACnD,oDAAiD;AACjD,uDAAoD;AAEpD,2CAAyE;AAEzE,iEAA2E;AAC3E,2DAAwD;AACxD,mCAAgC;
|
|
1
|
+
{"version":3,"file":"initProstgles.js","sourceRoot":"","sources":["../lib/initProstgles.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { AnyObject } from "prostgles-types";
|
|
2
|
+
import type { Prostgles } from "./Prostgles";
|
|
3
|
+
import { PRGLIOSocket } from "./DboBuilder/DboBuilderTypes";
|
|
4
|
+
export declare function onSocketConnected(this: Prostgles, socket: PRGLIOSocket): Promise<void>;
|
|
5
|
+
export declare function makeSocketError(cb: (err: AnyObject) => void, err: any): void;
|
|
6
|
+
//# sourceMappingURL=onSocketConnected.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onSocketConnected.d.ts","sourceRoot":"","sources":["../lib/onSocketConnected.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAY,MAAM,iBAAiB,CAAC;AACtD,OAAO,KAAK,EAAE,SAAS,EAAiB,MAAM,aAAa,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAI5D,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,YAAY,iBA8E5E;AAGD,wBAAgB,eAAe,CAAC,EAAE,EAAE,CAAC,GAAG,EAAE,SAAS,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,QAErE"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.makeSocketError = exports.onSocketConnected = void 0;
|
|
4
|
+
const prostgles_types_1 = require("prostgles-types");
|
|
5
|
+
const runClientRequest_1 = require("./runClientRequest");
|
|
6
|
+
const dboBuilderUtils_1 = require("./DboBuilder/dboBuilderUtils");
|
|
7
|
+
async function onSocketConnected(socket) {
|
|
8
|
+
if (this.destroyed) {
|
|
9
|
+
console.log("Socket connected to destroyed instance");
|
|
10
|
+
socket.disconnect();
|
|
11
|
+
return;
|
|
12
|
+
}
|
|
13
|
+
this.connectedSockets.push(socket);
|
|
14
|
+
try {
|
|
15
|
+
await this.opts.onLog?.({
|
|
16
|
+
type: "connect",
|
|
17
|
+
sid: this.authHandler?.getSID({ socket }),
|
|
18
|
+
socketId: socket.id,
|
|
19
|
+
connectedSocketIds: this.connectedSockets.map(s => s.id)
|
|
20
|
+
});
|
|
21
|
+
if (!this.db || !this.dbo)
|
|
22
|
+
throw new Error("db/dbo missing");
|
|
23
|
+
const { dbo, db } = this;
|
|
24
|
+
if (this.opts.onSocketConnect) {
|
|
25
|
+
try {
|
|
26
|
+
const getUser = async () => { return await this.authHandler?.getClientInfo({ socket }); };
|
|
27
|
+
await this.opts.onSocketConnect({ socket, dbo: dbo, db, getUser });
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
const connectionError = error instanceof Error ? error.message : typeof error === "string" ? error : JSON.stringify(error);
|
|
31
|
+
socket.emit(prostgles_types_1.CHANNELS.CONNECTION, { connectionError });
|
|
32
|
+
socket.disconnect();
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
socket.removeAllListeners(prostgles_types_1.CHANNELS.DEFAULT);
|
|
37
|
+
socket.on(prostgles_types_1.CHANNELS.DEFAULT, async (args, cb = (..._callback) => { }) => {
|
|
38
|
+
runClientRequest_1.runClientRequest.bind(this)({ ...args, type: "socket", socket })
|
|
39
|
+
.then(res => {
|
|
40
|
+
cb(null, res);
|
|
41
|
+
}).catch(err => {
|
|
42
|
+
cb(err);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
socket.on("disconnect", () => {
|
|
46
|
+
this.dbEventsManager?.removeNotice(socket);
|
|
47
|
+
this.dbEventsManager?.removeNotify(undefined, socket);
|
|
48
|
+
this.connectedSockets = this.connectedSockets.filter(s => s.id !== socket.id);
|
|
49
|
+
this.dboBuilder.queryStreamer.onDisconnect(socket.id);
|
|
50
|
+
this.opts.onLog?.({
|
|
51
|
+
type: "disconnect",
|
|
52
|
+
sid: this.authHandler?.getSID({ socket }),
|
|
53
|
+
socketId: socket.id,
|
|
54
|
+
connectedSocketIds: this.connectedSockets.map(s => s.id)
|
|
55
|
+
});
|
|
56
|
+
if (this.opts.onSocketDisconnect) {
|
|
57
|
+
const getUser = async () => { return await this.authHandler?.getClientInfo({ socket }); };
|
|
58
|
+
this.opts.onSocketDisconnect({ socket, dbo: dbo, db, getUser });
|
|
59
|
+
}
|
|
60
|
+
});
|
|
61
|
+
socket.removeAllListeners(prostgles_types_1.CHANNELS.METHOD);
|
|
62
|
+
socket.on(prostgles_types_1.CHANNELS.METHOD, async ({ method, params }, cb = (..._callback) => { }) => {
|
|
63
|
+
runClientRequest_1.runClientMethod.bind(this)({
|
|
64
|
+
type: "socket",
|
|
65
|
+
socket,
|
|
66
|
+
method,
|
|
67
|
+
params
|
|
68
|
+
}).then(res => {
|
|
69
|
+
cb(null, res);
|
|
70
|
+
}).catch(err => {
|
|
71
|
+
makeSocketError(cb, err);
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
this.pushSocketSchema(socket);
|
|
75
|
+
}
|
|
76
|
+
catch (e) {
|
|
77
|
+
console.trace("setSocketEvents: ", e);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
exports.onSocketConnected = onSocketConnected;
|
|
81
|
+
function makeSocketError(cb, err) {
|
|
82
|
+
cb((0, dboBuilderUtils_1.getErrorAsObject)(err));
|
|
83
|
+
}
|
|
84
|
+
exports.makeSocketError = makeSocketError;
|
|
85
|
+
//# sourceMappingURL=onSocketConnected.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"onSocketConnected.js","sourceRoot":"","sources":["../lib/onSocketConnected.ts"],"names":[],"mappings":"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"}
|
package/lib/Auth/AuthHandler.ts
CHANGED
|
@@ -160,8 +160,8 @@ export class AuthHandler {
|
|
|
160
160
|
|
|
161
161
|
destroy = () => {
|
|
162
162
|
const app = this.opts?.expressConfig?.app;
|
|
163
|
-
const { login, logoutGetPath, magicLinksExpressRoute, catchAll, loginWithProvider } = AUTH_ROUTES_AND_PARAMS;
|
|
164
|
-
removeExpressRoute(app, [login, logoutGetPath, magicLinksExpressRoute, catchAll, loginWithProvider]);
|
|
163
|
+
const { login, logoutGetPath, magicLinksExpressRoute, catchAll, loginWithProvider, emailSignup, magicLinksRoute } = AUTH_ROUTES_AND_PARAMS;
|
|
164
|
+
removeExpressRoute(app, [login, logoutGetPath, magicLinksExpressRoute, catchAll, loginWithProvider, emailSignup, magicLinksRoute]);
|
|
165
165
|
}
|
|
166
166
|
|
|
167
167
|
throttledFunc = <T>(func: () => Promise<T>, throttle = 500): Promise<T> => {
|
|
@@ -7,6 +7,17 @@ import { Strategy as MicrosoftStrategy } from "passport-microsoft";
|
|
|
7
7
|
import { Strategy as FacebookStrategy } from "passport-facebook";
|
|
8
8
|
import { AuthSocketSchema, getKeys, isDefined, isEmpty } from "prostgles-types";
|
|
9
9
|
import { AUTH_ROUTES_AND_PARAMS, AuthHandler } from "./AuthHandler";
|
|
10
|
+
import type e from "express";
|
|
11
|
+
import { RequestHandler } from "express";
|
|
12
|
+
import { removeExpressRouteByName } from "../FileManager/FileManager";
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
export const upsertNamedExpressMiddleware = (app: e.Express, handler: RequestHandler, name: string) => {
|
|
16
|
+
const funcName = name;
|
|
17
|
+
Object.defineProperty(handler, "name", { value: funcName });
|
|
18
|
+
removeExpressRouteByName(app, name);
|
|
19
|
+
app.use(handler);
|
|
20
|
+
}
|
|
10
21
|
|
|
11
22
|
export function setAuthProviders (this: AuthHandler, { registrations, app }: Required<Auth>["expressConfig"]) {
|
|
12
23
|
if(!registrations) return;
|
|
@@ -23,7 +34,7 @@ export function setAuthProviders (this: AuthHandler, { registrations, app }: Req
|
|
|
23
34
|
}
|
|
24
35
|
|
|
25
36
|
if(!isEmpty(providers)){
|
|
26
|
-
app
|
|
37
|
+
upsertNamedExpressMiddleware(app, passport.initialize(), "prostglesPassportMiddleware");
|
|
27
38
|
}
|
|
28
39
|
|
|
29
40
|
([
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
+
import { RequestHandler } from "express";
|
|
1
2
|
import { DBOFullyTyped } from "../DBSchemaBuilder";
|
|
2
3
|
import { AUTH_ROUTES_AND_PARAMS, AuthHandler, getLoginClientInfo, HTTPCODES } from "./AuthHandler";
|
|
3
4
|
import { AuthClientRequest, ExpressReq, ExpressRes } from "./AuthTypes";
|
|
4
|
-
import { setAuthProviders } from "./setAuthProviders";
|
|
5
|
+
import { setAuthProviders, upsertNamedExpressMiddleware } from "./setAuthProviders";
|
|
5
6
|
|
|
6
7
|
export async function setupAuthRoutes(this: AuthHandler) {
|
|
7
8
|
if (!this.opts) return;
|
|
@@ -29,7 +30,7 @@ export async function setupAuthRoutes(this: AuthHandler) {
|
|
|
29
30
|
setAuthProviders.bind(this)(expressConfig);
|
|
30
31
|
|
|
31
32
|
if(use){
|
|
32
|
-
|
|
33
|
+
const prostglesUseMiddleware: RequestHandler = (req, res, next) => {
|
|
33
34
|
use({
|
|
34
35
|
req,
|
|
35
36
|
res,
|
|
@@ -38,7 +39,8 @@ export async function setupAuthRoutes(this: AuthHandler) {
|
|
|
38
39
|
dbo: this.dbo as DBOFullyTyped,
|
|
39
40
|
db: this.db,
|
|
40
41
|
})
|
|
41
|
-
}
|
|
42
|
+
};
|
|
43
|
+
upsertNamedExpressMiddleware(app, prostglesUseMiddleware, "prostglesUseMiddleware");
|
|
42
44
|
}
|
|
43
45
|
|
|
44
46
|
if (magicLinks) {
|
|
@@ -293,6 +293,17 @@ export const removeExpressRoute = (app: ExpressApp | undefined, routePaths: (str
|
|
|
293
293
|
}
|
|
294
294
|
}
|
|
295
295
|
|
|
296
|
+
export const removeExpressRouteByName = (app: ExpressApp | undefined, name: string) => {
|
|
297
|
+
const routes = app?._router?.stack;
|
|
298
|
+
if(routes){
|
|
299
|
+
routes.forEach((route, i) => {
|
|
300
|
+
if(route.name === name){
|
|
301
|
+
routes.splice(i, 1);
|
|
302
|
+
}
|
|
303
|
+
})
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
|
|
296
307
|
export const getFileTypeFromFilename = (fileName: string): { mime: ALLOWED_CONTENT_TYPE; ext: ALLOWED_EXTENSION | string } | undefined => {
|
|
297
308
|
|
|
298
309
|
const nameParts = fileName.split(".");
|
package/lib/Prostgles.ts
CHANGED
|
@@ -8,7 +8,8 @@ import { AuthHandler } from "./Auth/AuthHandler";
|
|
|
8
8
|
import { FileManager } from "./FileManager/FileManager";
|
|
9
9
|
import { SchemaWatch } from "./SchemaWatch/SchemaWatch";
|
|
10
10
|
import { OnInitReason, initProstgles } from "./initProstgles";
|
|
11
|
-
import {
|
|
11
|
+
import { makeSocketError, onSocketConnected } from "./onSocketConnected";
|
|
12
|
+
import { clientCanRunSqlRequest, runClientSqlRequest } from "./runClientRequest";
|
|
12
13
|
import pg = require('pg-promise/typescript/pg-subset');
|
|
13
14
|
const { version } = require('../package.json');
|
|
14
15
|
|
|
@@ -21,7 +22,6 @@ export { DBHandlerServer };
|
|
|
21
22
|
export type PGP = pgPromise.IMain<{}, pg.IClient>;
|
|
22
23
|
|
|
23
24
|
import {
|
|
24
|
-
AnyObject,
|
|
25
25
|
CHANNELS,
|
|
26
26
|
ClientSchema,
|
|
27
27
|
DBSchemaTable,
|
|
@@ -357,85 +357,7 @@ export class Prostgles {
|
|
|
357
357
|
this.opts.io?.sockets.sockets.forEach(socket => this.onSocketConnected(socket))
|
|
358
358
|
}
|
|
359
359
|
|
|
360
|
-
onSocketConnected =
|
|
361
|
-
if (this.destroyed) {
|
|
362
|
-
console.log("Socket connected to destroyed instance");
|
|
363
|
-
socket.disconnect();
|
|
364
|
-
return
|
|
365
|
-
}
|
|
366
|
-
this.connectedSockets.push(socket);
|
|
367
|
-
|
|
368
|
-
try {
|
|
369
|
-
await this.opts.onLog?.({
|
|
370
|
-
type: "connect",
|
|
371
|
-
sid: this.authHandler?.getSID({ socket }),
|
|
372
|
-
socketId: socket.id,
|
|
373
|
-
connectedSocketIds: this.connectedSockets.map(s => s.id)
|
|
374
|
-
});
|
|
375
|
-
|
|
376
|
-
if (!this.db || !this.dbo) throw new Error("db/dbo missing");
|
|
377
|
-
const { dbo, db } = this;
|
|
378
|
-
|
|
379
|
-
if (this.opts.onSocketConnect) {
|
|
380
|
-
try {
|
|
381
|
-
const getUser = async () => { return await this.authHandler?.getClientInfo({ socket }); }
|
|
382
|
-
await this.opts.onSocketConnect({ socket, dbo: dbo as any, db, getUser });
|
|
383
|
-
} catch(error) {
|
|
384
|
-
const connectionError = error instanceof Error? error.message : typeof error === "string"? error : JSON.stringify(error);
|
|
385
|
-
socket.emit(CHANNELS.CONNECTION, { connectionError });
|
|
386
|
-
socket.disconnect();
|
|
387
|
-
return;
|
|
388
|
-
}
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
socket.removeAllListeners(CHANNELS.DEFAULT)
|
|
392
|
-
socket.on(CHANNELS.DEFAULT, async (args: SocketRequestParams, cb = (..._callback: any[]) => { /* Empty */}) => {
|
|
393
|
-
runClientRequest.bind(this)({ ...args, type: "socket", socket })
|
|
394
|
-
.then(res => {
|
|
395
|
-
cb(null, res)
|
|
396
|
-
}).catch(err => {
|
|
397
|
-
cb(err);
|
|
398
|
-
});
|
|
399
|
-
});
|
|
400
|
-
|
|
401
|
-
socket.on("disconnect", () => {
|
|
402
|
-
|
|
403
|
-
this.dbEventsManager?.removeNotice(socket);
|
|
404
|
-
this.dbEventsManager?.removeNotify(undefined, socket);
|
|
405
|
-
this.connectedSockets = this.connectedSockets.filter(s => s.id !== socket.id);
|
|
406
|
-
this.dboBuilder.queryStreamer.onDisconnect(socket.id);
|
|
407
|
-
this.opts.onLog?.({
|
|
408
|
-
type: "disconnect",
|
|
409
|
-
sid: this.authHandler?.getSID({ socket }),
|
|
410
|
-
socketId: socket.id,
|
|
411
|
-
connectedSocketIds: this.connectedSockets.map(s => s.id)
|
|
412
|
-
});
|
|
413
|
-
|
|
414
|
-
if (this.opts.onSocketDisconnect) {
|
|
415
|
-
const getUser = async () => { return await this.authHandler?.getClientInfo({ socket }); }
|
|
416
|
-
this.opts.onSocketDisconnect({ socket, dbo: dbo as any, db, getUser });
|
|
417
|
-
}
|
|
418
|
-
});
|
|
419
|
-
|
|
420
|
-
socket.removeAllListeners(CHANNELS.METHOD)
|
|
421
|
-
socket.on(CHANNELS.METHOD, async ({ method, params }: SocketMethodRequest, cb = (..._callback: any) => { /* Empty */ }) => {
|
|
422
|
-
runClientMethod.bind(this)({
|
|
423
|
-
type: "socket",
|
|
424
|
-
socket,
|
|
425
|
-
method,
|
|
426
|
-
params
|
|
427
|
-
}).then(res => {
|
|
428
|
-
cb(null, res)
|
|
429
|
-
}).catch(err => {
|
|
430
|
-
makeSocketError(cb, err)
|
|
431
|
-
});
|
|
432
|
-
});
|
|
433
|
-
|
|
434
|
-
this.pushSocketSchema(socket);
|
|
435
|
-
} catch (e) {
|
|
436
|
-
console.trace("setSocketEvents: ", e)
|
|
437
|
-
}
|
|
438
|
-
}
|
|
360
|
+
onSocketConnected = onSocketConnected.bind(this);
|
|
439
361
|
|
|
440
362
|
getClientSchema = async (clientReq: Pick<LocalParams, "socket" | "httpReq">) => {
|
|
441
363
|
|
|
@@ -551,22 +473,6 @@ export class Prostgles {
|
|
|
551
473
|
}
|
|
552
474
|
}
|
|
553
475
|
|
|
554
|
-
function makeSocketError(cb: (err: AnyObject) => void, err: any) {
|
|
555
|
-
cb(getErrorAsObject(err));
|
|
556
|
-
}
|
|
557
|
-
|
|
558
|
-
type SocketRequestParams = {
|
|
559
|
-
tableName: string;
|
|
560
|
-
command: typeof TABLE_METHODS[number];
|
|
561
|
-
param1: any;
|
|
562
|
-
param2: any;
|
|
563
|
-
param3: any;
|
|
564
|
-
}
|
|
565
|
-
type SocketMethodRequest = {
|
|
566
|
-
method: string;
|
|
567
|
-
params: any;
|
|
568
|
-
}
|
|
569
|
-
|
|
570
476
|
|
|
571
477
|
export async function getIsSuperUser(db: DB): Promise<boolean> {
|
|
572
478
|
return db.oneOrNone("select usesuper from pg_user where usename = CURRENT_USER;").then(r => r.usesuper);
|
package/lib/RestApi.ts
CHANGED
|
@@ -11,11 +11,18 @@ const jsonParser = bodyParser.json();
|
|
|
11
11
|
export type ExpressApp = {
|
|
12
12
|
_router?: {
|
|
13
13
|
stack?: {
|
|
14
|
+
name: string;
|
|
14
15
|
handle: VoidFunction;
|
|
15
16
|
path: undefined,
|
|
16
17
|
keys?: any[];
|
|
17
18
|
route?: {
|
|
18
19
|
path?: string;
|
|
20
|
+
methods?: {
|
|
21
|
+
get?: boolean;
|
|
22
|
+
post?: boolean;
|
|
23
|
+
put?: boolean;
|
|
24
|
+
delete?: boolean;
|
|
25
|
+
};
|
|
19
26
|
}
|
|
20
27
|
}[]
|
|
21
28
|
}
|
package/lib/initProstgles.ts
CHANGED
|
@@ -25,7 +25,7 @@ export type OnInitReason =
|
|
|
25
25
|
}
|
|
26
26
|
| {
|
|
27
27
|
type: "prgl.update";
|
|
28
|
-
newOpts: UpdateableOptions
|
|
28
|
+
newOpts: Omit<UpdateableOptions, typeof clientOnlyUpdateKeys[number]>;
|
|
29
29
|
}
|
|
30
30
|
| {
|
|
31
31
|
type: "init" | "prgl.restart" | "TableConfig"
|
|
@@ -61,6 +61,8 @@ export type InitResult = {
|
|
|
61
61
|
options: ProstglesInitOptions;
|
|
62
62
|
}
|
|
63
63
|
|
|
64
|
+
const clientOnlyUpdateKeys = ["auth"] as const satisfies (keyof UpdateableOptions)[];
|
|
65
|
+
|
|
64
66
|
export const initProstgles = async function(this: Prostgles, onReady: OnReadyCallbackBasic, reason: OnInitReason): Promise<InitResult> {
|
|
65
67
|
this.loaded = false;
|
|
66
68
|
|
|
@@ -123,7 +125,9 @@ export const initProstgles = async function(this: Prostgles, onReady: OnReadyCal
|
|
|
123
125
|
|
|
124
126
|
if (this.opts.publish) {
|
|
125
127
|
|
|
126
|
-
if (!this.opts.io)
|
|
128
|
+
if (!this.opts.io) {
|
|
129
|
+
console.warn("IO missing. Publish has no effect without io");
|
|
130
|
+
}
|
|
127
131
|
|
|
128
132
|
/* 3.9 Check auth config */
|
|
129
133
|
this.authHandler = new AuthHandler(this as any);
|
|
@@ -174,6 +178,7 @@ export const initProstgles = async function(this: Prostgles, onReady: OnReadyCal
|
|
|
174
178
|
this.opts[k] = newOpts[k];
|
|
175
179
|
});
|
|
176
180
|
|
|
181
|
+
|
|
177
182
|
if("fileTable" in newOpts){
|
|
178
183
|
await this.initFileTable();
|
|
179
184
|
}
|
|
@@ -193,7 +198,16 @@ export const initProstgles = async function(this: Prostgles, onReady: OnReadyCal
|
|
|
193
198
|
this.authHandler = new AuthHandler(this as any);
|
|
194
199
|
await this.authHandler.init();
|
|
195
200
|
}
|
|
196
|
-
|
|
201
|
+
|
|
202
|
+
if(isEmpty(newOpts)) return;
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Some of these changes require clients to reconnect
|
|
206
|
+
* While others also affect the server and onReady should be called
|
|
207
|
+
*/
|
|
208
|
+
if(getKeys(newOpts).every(updatedKey => clientOnlyUpdateKeys.includes(updatedKey as any))){
|
|
209
|
+
await this.setSocketEvents();
|
|
210
|
+
} else {
|
|
197
211
|
await this.init(onReady, { type: "prgl.update", newOpts });
|
|
198
212
|
}
|
|
199
213
|
},
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { AnyObject, CHANNELS } from "prostgles-types";
|
|
2
|
+
import type { Prostgles, TABLE_METHODS } from "./Prostgles";
|
|
3
|
+
import { PRGLIOSocket } from "./DboBuilder/DboBuilderTypes";
|
|
4
|
+
import { runClientMethod, runClientRequest } from "./runClientRequest";
|
|
5
|
+
import { getErrorAsObject } from "./DboBuilder/dboBuilderUtils";
|
|
6
|
+
|
|
7
|
+
export async function onSocketConnected(this: Prostgles, socket: PRGLIOSocket) {
|
|
8
|
+
if (this.destroyed) {
|
|
9
|
+
console.log("Socket connected to destroyed instance");
|
|
10
|
+
socket.disconnect();
|
|
11
|
+
return
|
|
12
|
+
}
|
|
13
|
+
this.connectedSockets.push(socket);
|
|
14
|
+
|
|
15
|
+
try {
|
|
16
|
+
await this.opts.onLog?.({
|
|
17
|
+
type: "connect",
|
|
18
|
+
sid: this.authHandler?.getSID({ socket }),
|
|
19
|
+
socketId: socket.id,
|
|
20
|
+
connectedSocketIds: this.connectedSockets.map(s => s.id)
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
if (!this.db || !this.dbo) throw new Error("db/dbo missing");
|
|
24
|
+
const { dbo, db } = this;
|
|
25
|
+
|
|
26
|
+
if (this.opts.onSocketConnect) {
|
|
27
|
+
try {
|
|
28
|
+
const getUser = async () => { return await this.authHandler?.getClientInfo({ socket }); }
|
|
29
|
+
await this.opts.onSocketConnect({ socket, dbo: dbo as any, db, getUser });
|
|
30
|
+
} catch(error) {
|
|
31
|
+
const connectionError = error instanceof Error? error.message : typeof error === "string"? error : JSON.stringify(error);
|
|
32
|
+
socket.emit(CHANNELS.CONNECTION, { connectionError });
|
|
33
|
+
socket.disconnect();
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
socket.removeAllListeners(CHANNELS.DEFAULT)
|
|
39
|
+
socket.on(CHANNELS.DEFAULT, async (args: SocketRequestParams, cb = (..._callback: any[]) => { /* Empty */}) => {
|
|
40
|
+
runClientRequest.bind(this)({ ...args, type: "socket", socket })
|
|
41
|
+
.then(res => {
|
|
42
|
+
cb(null, res)
|
|
43
|
+
}).catch(err => {
|
|
44
|
+
cb(err);
|
|
45
|
+
});
|
|
46
|
+
});
|
|
47
|
+
|
|
48
|
+
socket.on("disconnect", () => {
|
|
49
|
+
|
|
50
|
+
this.dbEventsManager?.removeNotice(socket);
|
|
51
|
+
this.dbEventsManager?.removeNotify(undefined, socket);
|
|
52
|
+
this.connectedSockets = this.connectedSockets.filter(s => s.id !== socket.id);
|
|
53
|
+
this.dboBuilder.queryStreamer.onDisconnect(socket.id);
|
|
54
|
+
this.opts.onLog?.({
|
|
55
|
+
type: "disconnect",
|
|
56
|
+
sid: this.authHandler?.getSID({ socket }),
|
|
57
|
+
socketId: socket.id,
|
|
58
|
+
connectedSocketIds: this.connectedSockets.map(s => s.id)
|
|
59
|
+
});
|
|
60
|
+
|
|
61
|
+
if (this.opts.onSocketDisconnect) {
|
|
62
|
+
const getUser = async () => { return await this.authHandler?.getClientInfo({ socket }); }
|
|
63
|
+
this.opts.onSocketDisconnect({ socket, dbo: dbo as any, db, getUser });
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
socket.removeAllListeners(CHANNELS.METHOD)
|
|
68
|
+
socket.on(CHANNELS.METHOD, async ({ method, params }: SocketMethodRequest, cb = (..._callback: any) => { /* Empty */ }) => {
|
|
69
|
+
runClientMethod.bind(this)({
|
|
70
|
+
type: "socket",
|
|
71
|
+
socket,
|
|
72
|
+
method,
|
|
73
|
+
params
|
|
74
|
+
}).then(res => {
|
|
75
|
+
cb(null, res)
|
|
76
|
+
}).catch(err => {
|
|
77
|
+
makeSocketError(cb, err)
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
|
|
81
|
+
this.pushSocketSchema(socket);
|
|
82
|
+
} catch (e) {
|
|
83
|
+
console.trace("setSocketEvents: ", e)
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
export function makeSocketError(cb: (err: AnyObject) => void, err: any) {
|
|
89
|
+
cb(getErrorAsObject(err));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
type SocketRequestParams = {
|
|
93
|
+
tableName: string;
|
|
94
|
+
command: typeof TABLE_METHODS[number];
|
|
95
|
+
param1: any;
|
|
96
|
+
param2: any;
|
|
97
|
+
param3: any;
|
|
98
|
+
}
|
|
99
|
+
type SocketMethodRequest = {
|
|
100
|
+
method: string;
|
|
101
|
+
params: any;
|
|
102
|
+
}
|
package/package.json
CHANGED
|
@@ -122,9 +122,7 @@ export const clientHooks = async (db: DBHandlerClient, getSocketOptions: (watchS
|
|
|
122
122
|
'$update': 1,
|
|
123
123
|
};
|
|
124
124
|
const plane0 = {
|
|
125
|
-
flight_number: '{"from":0,"to":0,"text":"","md5":"fb91aad2efe3387d09399beb97262d8d"}',
|
|
126
125
|
id: 0,
|
|
127
|
-
last_updated: '1711882317229',
|
|
128
126
|
x: 20,
|
|
129
127
|
y: 0
|
|
130
128
|
}
|
|
@@ -152,17 +150,18 @@ export const clientHooks = async (db: DBHandlerClient, getSocketOptions: (watchS
|
|
|
152
150
|
{ data: undefined, isLoading: true, error: undefined }
|
|
153
151
|
);
|
|
154
152
|
/** This fails from time to time */
|
|
155
|
-
assert.deepStrictEqual(
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
);
|
|
159
|
-
const
|
|
153
|
+
// assert.deepStrictEqual(
|
|
154
|
+
// results[1],
|
|
155
|
+
// { data: [], error: undefined, isLoading: false },
|
|
156
|
+
// );
|
|
157
|
+
const lastResult = results.at(-1);
|
|
158
|
+
assert.equal(lastResult?.isLoading, false);
|
|
159
|
+
const lastData = lastResult?.data;
|
|
160
160
|
assert.equal(lastData.length, 1);
|
|
161
161
|
const lastDataItem = lastData[0];
|
|
162
|
-
const staticPropNames = ["id", "x", "y"];
|
|
163
162
|
assert.deepStrictEqual(
|
|
164
|
-
pickKeys(lastDataItem,
|
|
165
|
-
|
|
163
|
+
pickKeys(lastDataItem, Object.keys(plane0)),
|
|
164
|
+
plane0
|
|
166
165
|
);
|
|
167
166
|
|
|
168
167
|
// Update item
|