prostgles-client 4.0.138 → 4.0.139
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.d.ts +41 -0
- package/dist/Auth.d.ts.map +1 -0
- package/dist/Auth.js +63 -0
- package/dist/FunctionQueuer.d.ts +11 -0
- package/dist/FunctionQueuer.d.ts.map +1 -0
- package/dist/FunctionQueuer.js +63 -0
- package/dist/SQL.d.ts +25 -0
- package/dist/SQL.d.ts.map +1 -0
- package/dist/SQL.js +172 -0
- package/dist/SyncedTable/SyncedTable.d.ts +3 -2
- package/dist/SyncedTable/SyncedTable.d.ts.map +1 -1
- package/dist/SyncedTable/SyncedTable.js +33 -33
- package/dist/SyncedTable/getMultiSyncSubscription.d.ts +2 -2
- package/dist/SyncedTable/getMultiSyncSubscription.d.ts.map +1 -1
- package/dist/SyncedTable/getMultiSyncSubscription.js +2 -1
- package/dist/index.js +1 -2
- package/dist/index.no-sync.js +1 -2
- package/dist/prostgles.d.ts +4 -2
- package/dist/prostgles.d.ts.map +1 -1
- package/dist/prostgles.js +13 -262
- package/dist/useProstglesClient.d.ts +3 -2
- package/dist/useProstglesClient.d.ts.map +1 -1
- package/lib/Auth.ts +90 -0
- package/lib/FunctionQueuer.ts +71 -0
- package/lib/SQL.ts +178 -0
- package/lib/SyncedTable/SyncedTable.ts +44 -39
- package/lib/SyncedTable/getMultiSyncSubscription.ts +5 -5
- package/lib/prostgles.ts +16 -289
- package/lib/useProstglesClient.ts +2 -1
- package/package.json +6 -6
- package/tests/package-lock.json +6 -6
- package/tsconfig.json +0 -2
- package/dist/index.js.LICENSE.txt +0 -9
- package/dist/index.no-sync.js.LICENSE.txt +0 -9
package/dist/prostgles.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { AnyObject, ClientSyncHandles, DBSchema, DBSchemaTable, DbJoinMaker, EqualityFilter, FullFilter, GetSelectReturnType, MethodHandler, SQLHandler, SQLResult, SelectParams, SubscribeParams, TableHandler, ViewHandler } from "prostgles-types";
|
|
2
2
|
import { asName } from "prostgles-types";
|
|
3
|
-
import type { SyncDataItem, SyncOneOptions, SyncOptions, SyncedTable
|
|
3
|
+
import type { Sync, SyncDataItem, SyncOne, SyncOneOptions, SyncOptions, SyncedTable } from "./SyncedTable/SyncedTable";
|
|
4
|
+
import { type AuthHandler } from "./Auth";
|
|
5
|
+
export declare const hasWnd: boolean;
|
|
4
6
|
export declare const debug: any;
|
|
5
7
|
export { MethodHandler, SQLResult, asName };
|
|
6
8
|
export * from "./react-hooks";
|
|
@@ -106,7 +108,7 @@ export type InitOptions<DBSchema = void> = {
|
|
|
106
108
|
* true by default
|
|
107
109
|
*/
|
|
108
110
|
onSchemaChange?: false | (() => void);
|
|
109
|
-
onReady: (dbo: DBHandlerClient<DBSchema>, methods: MethodHandler | undefined, tableSchema: DBSchemaTable[] | undefined, auth:
|
|
111
|
+
onReady: (dbo: DBHandlerClient<DBSchema>, methods: MethodHandler | undefined, tableSchema: DBSchemaTable[] | undefined, auth: AuthHandler, isReconnect: boolean) => any;
|
|
110
112
|
/**
|
|
111
113
|
* If not provided will fire onReady
|
|
112
114
|
*/
|
package/dist/prostgles.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prostgles.d.ts","sourceRoot":"","sources":["../lib/prostgles.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EACV,SAAS,EAIT,iBAAiB,
|
|
1
|
+
{"version":3,"file":"prostgles.d.ts","sourceRoot":"","sources":["../lib/prostgles.ts"],"names":[],"mappings":"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"}
|
package/dist/prostgles.js
CHANGED
|
@@ -18,14 +18,17 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
18
18
|
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
19
19
|
};
|
|
20
20
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
-
exports.prostgles = exports.asName = exports.debug = void 0;
|
|
21
|
+
exports.prostgles = exports.asName = exports.debug = exports.hasWnd = void 0;
|
|
22
22
|
const prostgles_types_1 = require("prostgles-types");
|
|
23
23
|
Object.defineProperty(exports, "asName", { enumerable: true, get: function () { return prostgles_types_1.asName; } });
|
|
24
24
|
const react_hooks_1 = require("./react-hooks");
|
|
25
|
+
const SQL_1 = require("./SQL");
|
|
26
|
+
const FunctionQueuer_1 = require("./FunctionQueuer");
|
|
27
|
+
const Auth_1 = require("./Auth");
|
|
25
28
|
const DEBUG_KEY = "DEBUG_SYNCEDTABLE";
|
|
26
|
-
|
|
29
|
+
exports.hasWnd = typeof window !== "undefined";
|
|
27
30
|
const debug = function (...args) {
|
|
28
|
-
if (hasWnd && window[DEBUG_KEY]) {
|
|
31
|
+
if (exports.hasWnd && window[DEBUG_KEY]) {
|
|
29
32
|
window[DEBUG_KEY](...args);
|
|
30
33
|
}
|
|
31
34
|
};
|
|
@@ -49,72 +52,8 @@ function prostgles(initOpts, syncedTable) {
|
|
|
49
52
|
const subscriptions = {};
|
|
50
53
|
let syncedTables = {};
|
|
51
54
|
let syncs = {};
|
|
52
|
-
const notifSubs = {};
|
|
53
|
-
const removeNotifListener = (listener, conf) => {
|
|
54
|
-
const channelSubs = notifSubs[conf.notifChannel];
|
|
55
|
-
if (channelSubs) {
|
|
56
|
-
channelSubs.listeners = channelSubs.listeners.filter(nl => nl !== listener);
|
|
57
|
-
if (!channelSubs.listeners.length && channelSubs.config.socketUnsubChannel && socket) {
|
|
58
|
-
socket.emit(channelSubs.config.socketUnsubChannel, {});
|
|
59
|
-
delete notifSubs[conf.notifChannel];
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
const addNotifListener = (listener, conf) => {
|
|
64
|
-
var _a;
|
|
65
|
-
const channelSubs = notifSubs[conf.notifChannel];
|
|
66
|
-
if (!channelSubs) {
|
|
67
|
-
notifSubs[conf.notifChannel] = {
|
|
68
|
-
config: conf,
|
|
69
|
-
listeners: [listener]
|
|
70
|
-
};
|
|
71
|
-
socket.removeAllListeners(conf.socketChannel);
|
|
72
|
-
socket.on(conf.socketChannel, (notif) => {
|
|
73
|
-
var _a, _b;
|
|
74
|
-
if ((_a = notifSubs[conf.notifChannel]) === null || _a === void 0 ? void 0 : _a.listeners.length) {
|
|
75
|
-
notifSubs[conf.notifChannel].listeners.map(l => {
|
|
76
|
-
l(notif);
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
else {
|
|
80
|
-
socket.emit((_b = notifSubs[conf.notifChannel]) === null || _b === void 0 ? void 0 : _b.config.socketUnsubChannel, {});
|
|
81
|
-
}
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
(_a = notifSubs[conf.notifChannel]) === null || _a === void 0 ? void 0 : _a.listeners.push(listener);
|
|
86
|
-
}
|
|
87
|
-
};
|
|
88
|
-
let noticeSubs;
|
|
89
|
-
const removeNoticeListener = (listener) => {
|
|
90
|
-
if (noticeSubs) {
|
|
91
|
-
noticeSubs.listeners = noticeSubs.listeners.filter(nl => nl !== listener);
|
|
92
|
-
if (!noticeSubs.listeners.length && noticeSubs.config.socketUnsubChannel && socket) {
|
|
93
|
-
socket.emit(noticeSubs.config.socketUnsubChannel, {});
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
};
|
|
97
|
-
const addNoticeListener = (listener, conf) => {
|
|
98
|
-
noticeSubs !== null && noticeSubs !== void 0 ? noticeSubs : (noticeSubs = {
|
|
99
|
-
config: conf,
|
|
100
|
-
listeners: []
|
|
101
|
-
});
|
|
102
|
-
if (!noticeSubs.listeners.length) {
|
|
103
|
-
socket.removeAllListeners(conf.socketChannel);
|
|
104
|
-
socket.on(conf.socketChannel, (notice) => {
|
|
105
|
-
if (noticeSubs && noticeSubs.listeners.length) {
|
|
106
|
-
noticeSubs.listeners.map(l => {
|
|
107
|
-
l(notice);
|
|
108
|
-
});
|
|
109
|
-
}
|
|
110
|
-
else {
|
|
111
|
-
socket.emit(conf.socketUnsubChannel, {});
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
}
|
|
115
|
-
noticeSubs.listeners.push(listener);
|
|
116
|
-
};
|
|
117
55
|
let state;
|
|
56
|
+
const sql = new SQL_1.SQL();
|
|
118
57
|
const destroySyncs = async () => {
|
|
119
58
|
(0, exports.debug)("destroySyncs", { subscriptions, syncedTables });
|
|
120
59
|
await Promise.all(Object.values(subscriptions).map(s => s.destroy()));
|
|
@@ -205,7 +144,7 @@ function prostgles(initOpts, syncedTable) {
|
|
|
205
144
|
});
|
|
206
145
|
});
|
|
207
146
|
}
|
|
208
|
-
const addSyncQueuer = new FunctionQueuer(_addSync, ([{ tableName }]) => tableName);
|
|
147
|
+
const addSyncQueuer = new FunctionQueuer_1.FunctionQueuer(_addSync, ([{ tableName }]) => tableName);
|
|
209
148
|
async function addSync(params, triggers) {
|
|
210
149
|
return addSyncQueuer.run([params, triggers]);
|
|
211
150
|
}
|
|
@@ -302,7 +241,7 @@ function prostgles(initOpts, syncedTable) {
|
|
|
302
241
|
/**
|
|
303
242
|
* Can be used concurrently
|
|
304
243
|
*/
|
|
305
|
-
const addSubQueuer = new FunctionQueuer(_addSub, ([_, { tableName }]) => tableName);
|
|
244
|
+
const addSubQueuer = new FunctionQueuer_1.FunctionQueuer(_addSub, ([_, { tableName }]) => tableName);
|
|
306
245
|
async function addSub(dbo, params, onChange, _onError) {
|
|
307
246
|
return addSubQueuer.run([dbo, params, onChange, _onError]);
|
|
308
247
|
}
|
|
@@ -421,7 +360,7 @@ function prostgles(initOpts, syncedTable) {
|
|
|
421
360
|
}
|
|
422
361
|
/* Schema = published schema */
|
|
423
362
|
socket.on(prostgles_types_1.CHANNELS.SCHEMA, async ({ joinTables = [], ...clientSchema }) => {
|
|
424
|
-
const { schema, methods, tableSchema, auth, rawSQL, err } = clientSchema;
|
|
363
|
+
const { schema, methods, tableSchema, auth: authConfig, rawSQL, err } = clientSchema;
|
|
425
364
|
/** Only destroy existing syncs if schema changed */
|
|
426
365
|
const schemaDidNotChange = (schemaAge === null || schemaAge === void 0 ? void 0 : schemaAge.clientSchema) && (0, react_hooks_1.isEqual)(schemaAge.clientSchema, clientSchema);
|
|
427
366
|
if (!schemaDidNotChange) {
|
|
@@ -447,42 +386,7 @@ function prostgles(initOpts, syncedTable) {
|
|
|
447
386
|
const dbo = JSON.parse(JSON.stringify(schema));
|
|
448
387
|
const _methods = JSON.parse(JSON.stringify(methods));
|
|
449
388
|
let methodsObj = {};
|
|
450
|
-
|
|
451
|
-
if (auth) {
|
|
452
|
-
if (auth.pathGuard && hasWnd) {
|
|
453
|
-
const doReload = (res) => {
|
|
454
|
-
if (res === null || res === void 0 ? void 0 : res.shouldReload) {
|
|
455
|
-
if (onReload)
|
|
456
|
-
onReload();
|
|
457
|
-
else if (typeof window !== "undefined") {
|
|
458
|
-
window.location.reload();
|
|
459
|
-
}
|
|
460
|
-
}
|
|
461
|
-
};
|
|
462
|
-
socket.emit(prostgles_types_1.CHANNELS.AUTHGUARD, JSON.stringify(window.location), (err, res) => {
|
|
463
|
-
doReload(res);
|
|
464
|
-
});
|
|
465
|
-
socket.removeAllListeners(prostgles_types_1.CHANNELS.AUTHGUARD);
|
|
466
|
-
socket.on(prostgles_types_1.CHANNELS.AUTHGUARD, (res) => {
|
|
467
|
-
doReload(res);
|
|
468
|
-
});
|
|
469
|
-
}
|
|
470
|
-
_auth = { ...auth };
|
|
471
|
-
[prostgles_types_1.CHANNELS.LOGIN, prostgles_types_1.CHANNELS.LOGOUT, prostgles_types_1.CHANNELS.REGISTER].map(funcName => {
|
|
472
|
-
if (auth[funcName]) {
|
|
473
|
-
_auth[funcName] = function (params) {
|
|
474
|
-
return new Promise((resolve, reject) => {
|
|
475
|
-
socket.emit(preffix + funcName, params, (err, res) => {
|
|
476
|
-
if (err)
|
|
477
|
-
reject(err);
|
|
478
|
-
else
|
|
479
|
-
resolve(res);
|
|
480
|
-
});
|
|
481
|
-
});
|
|
482
|
-
};
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
|
-
}
|
|
389
|
+
const auth = (0, Auth_1.setupAuth)({ authData: authConfig, socket, onReload });
|
|
486
390
|
_methods.map(method => {
|
|
487
391
|
/** New method def */
|
|
488
392
|
const isBasic = typeof method === "string";
|
|
@@ -505,101 +409,7 @@ function prostgles(initOpts, syncedTable) {
|
|
|
505
409
|
});
|
|
506
410
|
methodsObj = Object.freeze(methodsObj);
|
|
507
411
|
if (rawSQL) {
|
|
508
|
-
|
|
509
|
-
return new Promise((resolve, reject) => {
|
|
510
|
-
socket.emit(prostgles_types_1.CHANNELS.SQL, { query, params, options }, (err, res) => {
|
|
511
|
-
if (err)
|
|
512
|
-
reject(err);
|
|
513
|
-
else {
|
|
514
|
-
if ((options === null || options === void 0 ? void 0 : options.returnType) === "stream") {
|
|
515
|
-
const { channel, unsubChannel } = res;
|
|
516
|
-
const start = (listener) => new Promise((resolveStart, rejectStart) => {
|
|
517
|
-
socket.on(channel, listener);
|
|
518
|
-
socket.emit(channel, {}, (pid, err) => {
|
|
519
|
-
if (err) {
|
|
520
|
-
rejectStart(err);
|
|
521
|
-
socket.removeAllListeners(channel);
|
|
522
|
-
}
|
|
523
|
-
else {
|
|
524
|
-
resolveStart({
|
|
525
|
-
pid,
|
|
526
|
-
run: (query, params) => {
|
|
527
|
-
return new Promise((resolveRun, rejectRun) => {
|
|
528
|
-
socket.emit(channel, { query, params }, (data, _err) => {
|
|
529
|
-
if (_err) {
|
|
530
|
-
rejectRun(_err);
|
|
531
|
-
}
|
|
532
|
-
else {
|
|
533
|
-
resolveRun(data);
|
|
534
|
-
}
|
|
535
|
-
});
|
|
536
|
-
});
|
|
537
|
-
},
|
|
538
|
-
stop: (terminate) => {
|
|
539
|
-
return new Promise((resolveStop, rejectStop) => {
|
|
540
|
-
socket.emit(unsubChannel, { terminate }, (data, _err) => {
|
|
541
|
-
if (_err) {
|
|
542
|
-
rejectStop(_err);
|
|
543
|
-
}
|
|
544
|
-
else {
|
|
545
|
-
resolveStop(data);
|
|
546
|
-
}
|
|
547
|
-
});
|
|
548
|
-
});
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
}
|
|
552
|
-
});
|
|
553
|
-
});
|
|
554
|
-
const streamHandlers = {
|
|
555
|
-
channel,
|
|
556
|
-
unsubChannel,
|
|
557
|
-
start,
|
|
558
|
-
};
|
|
559
|
-
return resolve(streamHandlers);
|
|
560
|
-
}
|
|
561
|
-
else if (options &&
|
|
562
|
-
(options.returnType === "noticeSubscription") &&
|
|
563
|
-
res &&
|
|
564
|
-
Object.keys(res).sort().join() === ["socketChannel", "socketUnsubChannel"].sort().join() &&
|
|
565
|
-
!Object.values(res).find(v => typeof v !== "string")) {
|
|
566
|
-
const sockInfo = res;
|
|
567
|
-
const addListener = (listener) => {
|
|
568
|
-
addNoticeListener(listener, sockInfo);
|
|
569
|
-
return {
|
|
570
|
-
...sockInfo,
|
|
571
|
-
removeListener: () => removeNoticeListener(listener)
|
|
572
|
-
};
|
|
573
|
-
};
|
|
574
|
-
const handle = {
|
|
575
|
-
...sockInfo,
|
|
576
|
-
addListener
|
|
577
|
-
};
|
|
578
|
-
// @ts-ignore
|
|
579
|
-
resolve(handle);
|
|
580
|
-
}
|
|
581
|
-
else if ((!options || !options.returnType || options.returnType !== "statement") &&
|
|
582
|
-
res &&
|
|
583
|
-
Object.keys(res).sort().join() === ["socketChannel", "socketUnsubChannel", "notifChannel"].sort().join() &&
|
|
584
|
-
!Object.values(res).find(v => typeof v !== "string")) {
|
|
585
|
-
const sockInfo = res;
|
|
586
|
-
const addListener = (listener) => {
|
|
587
|
-
addNotifListener(listener, sockInfo);
|
|
588
|
-
return {
|
|
589
|
-
...res,
|
|
590
|
-
removeListener: () => removeNotifListener(listener, sockInfo)
|
|
591
|
-
};
|
|
592
|
-
};
|
|
593
|
-
const handle = { ...res, addListener };
|
|
594
|
-
resolve(handle);
|
|
595
|
-
}
|
|
596
|
-
else {
|
|
597
|
-
resolve(res);
|
|
598
|
-
}
|
|
599
|
-
}
|
|
600
|
-
});
|
|
601
|
-
});
|
|
602
|
-
};
|
|
412
|
+
sql.setup({ dbo, socket });
|
|
603
413
|
}
|
|
604
414
|
/* Building DBO object */
|
|
605
415
|
const checkSubscriptionArgs = (basicFilter, options, onChange, onError) => {
|
|
@@ -758,7 +568,7 @@ function prostgles(initOpts, syncedTable) {
|
|
|
758
568
|
});
|
|
759
569
|
(async () => {
|
|
760
570
|
try {
|
|
761
|
-
await onReady(dbo, methodsObj, tableSchema,
|
|
571
|
+
await onReady(dbo, methodsObj, tableSchema, auth, isReconnect);
|
|
762
572
|
}
|
|
763
573
|
catch (err) {
|
|
764
574
|
console.error("Prostgles: Error within onReady: \n", err);
|
|
@@ -770,62 +580,3 @@ function prostgles(initOpts, syncedTable) {
|
|
|
770
580
|
});
|
|
771
581
|
}
|
|
772
582
|
exports.prostgles = prostgles;
|
|
773
|
-
class FunctionQueuer {
|
|
774
|
-
constructor(func, groupBy) {
|
|
775
|
-
this.queue = [];
|
|
776
|
-
this.isRunning = false;
|
|
777
|
-
this.func = func;
|
|
778
|
-
this.groupBy = groupBy;
|
|
779
|
-
}
|
|
780
|
-
async run(args) {
|
|
781
|
-
const result = new Promise((resolve, reject) => {
|
|
782
|
-
const item = { arguments: args, onResult: resolve, onFail: reject };
|
|
783
|
-
this.queue.push(item);
|
|
784
|
-
});
|
|
785
|
-
const startQueueJob = async () => {
|
|
786
|
-
if (this.isRunning) {
|
|
787
|
-
return;
|
|
788
|
-
}
|
|
789
|
-
this.isRunning = true;
|
|
790
|
-
const runItem = async (item) => {
|
|
791
|
-
if (item) {
|
|
792
|
-
try {
|
|
793
|
-
const result = await this.func(...item.arguments);
|
|
794
|
-
item.onResult(result);
|
|
795
|
-
}
|
|
796
|
-
catch (error) {
|
|
797
|
-
item.onFail(error);
|
|
798
|
-
}
|
|
799
|
-
}
|
|
800
|
-
};
|
|
801
|
-
if (!this.groupBy) {
|
|
802
|
-
const item = this.queue.shift();
|
|
803
|
-
await runItem(item);
|
|
804
|
-
/** Run items in parallel for each group */
|
|
805
|
-
}
|
|
806
|
-
else {
|
|
807
|
-
const groups = [];
|
|
808
|
-
const items = [];
|
|
809
|
-
this.queue.forEach(async (item, index) => {
|
|
810
|
-
const group = this.groupBy(item.arguments);
|
|
811
|
-
if (!groups.includes(group)) {
|
|
812
|
-
groups.push(group);
|
|
813
|
-
items.push({ index, item });
|
|
814
|
-
}
|
|
815
|
-
});
|
|
816
|
-
items.slice(0).reverse().forEach((item) => {
|
|
817
|
-
this.queue.splice(item.index, 1);
|
|
818
|
-
});
|
|
819
|
-
await Promise.all(items.map(item => {
|
|
820
|
-
return runItem(item.item);
|
|
821
|
-
}));
|
|
822
|
-
}
|
|
823
|
-
this.isRunning = false;
|
|
824
|
-
if (this.queue.length) {
|
|
825
|
-
startQueueJob();
|
|
826
|
-
}
|
|
827
|
-
};
|
|
828
|
-
startQueueJob();
|
|
829
|
-
return result;
|
|
830
|
-
}
|
|
831
|
-
}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
import { type DBSchema, type DBSchemaTable, type MethodHandler } from "prostgles-types";
|
|
2
2
|
import type { ManagerOptions, Socket, SocketOptions } from "socket.io-client";
|
|
3
|
-
import { type
|
|
3
|
+
import { type DBHandlerClient, type InitOptions } from "./prostgles";
|
|
4
|
+
import type { AuthHandler } from "./Auth";
|
|
4
5
|
type OnReadyParams<DBSchema> = {
|
|
5
6
|
dbo: DBHandlerClient<DBSchema>;
|
|
6
7
|
methods: MethodHandler | undefined;
|
|
7
8
|
tableSchema: DBSchemaTable[] | undefined;
|
|
8
|
-
auth:
|
|
9
|
+
auth: AuthHandler | undefined;
|
|
9
10
|
isReconnect: boolean;
|
|
10
11
|
socket: Socket;
|
|
11
12
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useProstglesClient.d.ts","sourceRoot":"","sources":["../lib/useProstglesClient.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,
|
|
1
|
+
{"version":3,"file":"useProstglesClient.d.ts","sourceRoot":"","sources":["../lib/useProstglesClient.ts"],"names":[],"mappings":"AAMA,OAAO,EAEL,KAAK,QAAQ,EACb,KAAK,aAAa,EAClB,KAAK,aAAa,EACnB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAE9E,OAAO,EAAwB,KAAK,eAAe,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,QAAQ,CAAC;AAE1C,KAAK,aAAa,CAAC,QAAQ,IAAI;IAC7B,GAAG,EAAE,eAAe,CAAC,QAAQ,CAAC,CAAC;IAC/B,OAAO,EAAE,aAAa,GAAG,SAAS,CAAC;IACnC,WAAW,EAAE,aAAa,EAAE,GAAG,SAAS,CAAC;IACzC,IAAI,EAAE,WAAW,GAAG,SAAS,CAAC;IAC9B,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB,CAAA;AACD,KAAK,YAAY,GAAG,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC,GAAG;IACtE,aAAa,CAAC,EAAE,OAAO,CAAC,cAAc,GAAG,aAAa,CAAC,GAAG;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;KAAE,CAAC;IAC5E,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,CAAC;AACF,KAAK,oBAAoB,CAAC,GAAG,IAC3B;IAAE,SAAS,EAAE,IAAI,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAAE,GACvC;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAAE,GAAG,GAAG,GAC9C;IAAE,SAAS,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,KAAK,GAAG,MAAM,CAAC;CAAE,CAAC;AAE/C,eAAO,MAAM,kBAAkB,sDAAoD,YAAY,oDAmD9F,CAAA"}
|
package/lib/Auth.ts
ADDED
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
import { type AnyObject, type AuthGuardLocation, type AuthGuardLocationResponse, type AuthSocketSchema, CHANNELS, type IdentityProvider, type EmailAuthType } from "prostgles-types";
|
|
2
|
+
import { hasWnd } from "./prostgles";
|
|
3
|
+
|
|
4
|
+
type Args = {
|
|
5
|
+
socket: any;
|
|
6
|
+
authData: AuthSocketSchema | undefined;
|
|
7
|
+
onReload: VoidFunction | undefined;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
type AuthStateLoggedOut = {
|
|
11
|
+
isLoggedin: false;
|
|
12
|
+
user?: undefined;
|
|
13
|
+
prefferedLogin: string;
|
|
14
|
+
login?: {
|
|
15
|
+
withEmailAndPassword?: (params: { email: string; password: string }) => Promise<any>;
|
|
16
|
+
withMagicLink?: (params: { email: string; }) => Promise<any>;
|
|
17
|
+
withProvider?: (provider: IdentityProvider) => void;
|
|
18
|
+
};
|
|
19
|
+
register?: {
|
|
20
|
+
withPassword: (params: { email: string; password: string }) => Promise<any>;
|
|
21
|
+
} | {
|
|
22
|
+
magicLink: (params: { email: string; }) => Promise<any>;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
type AuthStateLoggedIn = {
|
|
26
|
+
isLoggedin: true;
|
|
27
|
+
user: AnyObject;
|
|
28
|
+
prefferedLogin: string;
|
|
29
|
+
logout: VoidFunction;
|
|
30
|
+
}
|
|
31
|
+
export type AuthHandler =
|
|
32
|
+
| AuthStateLoggedOut
|
|
33
|
+
| AuthStateLoggedIn;
|
|
34
|
+
|
|
35
|
+
export const setupAuth = ({ authData: authConfig, socket, onReload }: Args): AuthHandler => {
|
|
36
|
+
|
|
37
|
+
const emit = (channel: string, params: any) => {
|
|
38
|
+
return new Promise((resolve, reject) => {
|
|
39
|
+
socket.emit(channel, params, (err, res) => {
|
|
40
|
+
if (err) reject(err);
|
|
41
|
+
else resolve(res);
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
if(!authConfig?.user){
|
|
47
|
+
return {
|
|
48
|
+
isLoggedin: false,
|
|
49
|
+
user: undefined,
|
|
50
|
+
prefferedLogin: "",
|
|
51
|
+
login: {
|
|
52
|
+
withEmailAndPassword: (params) => emit(CHANNELS.LOGIN, { type: "withPassword" satisfies EmailAuthType, params }),
|
|
53
|
+
withMagicLink: (params) => emit(CHANNELS.LOGIN, { type: "magicLink" satisfies EmailAuthType, params }),
|
|
54
|
+
withProvider: (provider) => {
|
|
55
|
+
const url = authConfig?.providers?.[provider]?.url;
|
|
56
|
+
if(!url) throw new Error(`Provider ${provider} not enabled`);
|
|
57
|
+
window.location.assign(url);
|
|
58
|
+
}
|
|
59
|
+
},
|
|
60
|
+
register: authConfig?.register? {
|
|
61
|
+
[authConfig.register]: (params) => emit(CHANNELS.REGISTER, { type: authConfig.register, params })
|
|
62
|
+
} as any : undefined
|
|
63
|
+
} satisfies AuthStateLoggedOut;
|
|
64
|
+
}
|
|
65
|
+
if (authConfig.pathGuard && hasWnd) {
|
|
66
|
+
const doReload = (res?: AuthGuardLocationResponse) => {
|
|
67
|
+
if (res?.shouldReload) {
|
|
68
|
+
if (onReload) onReload();
|
|
69
|
+
else if (hasWnd) {
|
|
70
|
+
window.location.reload();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
socket.emit(CHANNELS.AUTHGUARD, JSON.stringify(window.location as AuthGuardLocation), (err: any, res: AuthGuardLocationResponse) => {
|
|
75
|
+
doReload(res)
|
|
76
|
+
});
|
|
77
|
+
|
|
78
|
+
socket.removeAllListeners(CHANNELS.AUTHGUARD);
|
|
79
|
+
socket.on(CHANNELS.AUTHGUARD, (res: AuthGuardLocationResponse) => {
|
|
80
|
+
doReload(res);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
isLoggedin: true,
|
|
86
|
+
user: authConfig.user,
|
|
87
|
+
logout: () => emit(CHANNELS.LOGOUT, {}),
|
|
88
|
+
prefferedLogin: "",
|
|
89
|
+
} satisfies AuthStateLoggedIn;
|
|
90
|
+
}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
|
|
2
|
+
type Func = (...args: any[]) => any;
|
|
3
|
+
export class FunctionQueuer<F extends Func> {
|
|
4
|
+
private queue: { arguments: Parameters<F>; onResult: (result: ReturnType<F>) => void; onFail: (error: any) => void }[] = [];
|
|
5
|
+
private func: F;
|
|
6
|
+
private groupBy?: (args: Parameters<F>) => string;
|
|
7
|
+
constructor(func: F, groupBy?: ((args: Parameters<F>) => string)) {
|
|
8
|
+
this.func = func;
|
|
9
|
+
this.groupBy = groupBy;
|
|
10
|
+
}
|
|
11
|
+
private isRunning = false;
|
|
12
|
+
async run(args: Parameters<F>): Promise<ReturnType<F>> {
|
|
13
|
+
|
|
14
|
+
const result = new Promise<ReturnType<F>>((resolve, reject) => {
|
|
15
|
+
const item = { arguments: args, onResult: resolve, onFail: reject }
|
|
16
|
+
this.queue.push(item);
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
const startQueueJob = async () => {
|
|
20
|
+
if (this.isRunning) {
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
this.isRunning = true;
|
|
24
|
+
|
|
25
|
+
const runItem = async (item: undefined | typeof this.queue[number]) => {
|
|
26
|
+
if (item) {
|
|
27
|
+
try {
|
|
28
|
+
const result = await this.func(...item.arguments);
|
|
29
|
+
item.onResult(result);
|
|
30
|
+
} catch(error) {
|
|
31
|
+
item.onFail(error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if(!this.groupBy){
|
|
37
|
+
const item = this.queue.shift();
|
|
38
|
+
await runItem(item);
|
|
39
|
+
|
|
40
|
+
/** Run items in parallel for each group */
|
|
41
|
+
} else {
|
|
42
|
+
type Item = typeof this.queue[number];
|
|
43
|
+
const groups: string[] = [];
|
|
44
|
+
const items: { index: number; item: Item; }[] = [];
|
|
45
|
+
this.queue.forEach(async (item, index) => {
|
|
46
|
+
const group = this.groupBy!(item.arguments);
|
|
47
|
+
if(!groups.includes(group)){
|
|
48
|
+
groups.push(group);
|
|
49
|
+
items.push({ index, item });
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
items.slice(0).reverse().forEach((item) => {
|
|
53
|
+
this.queue.splice(item.index, 1);
|
|
54
|
+
});
|
|
55
|
+
await Promise.all(items.map(item => {
|
|
56
|
+
return runItem(item.item);
|
|
57
|
+
}));
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
this.isRunning = false;
|
|
61
|
+
if (this.queue.length) {
|
|
62
|
+
startQueueJob();
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
startQueueJob();
|
|
67
|
+
|
|
68
|
+
return result;
|
|
69
|
+
|
|
70
|
+
}
|
|
71
|
+
}
|