core-3nweb-client-lib 0.32.1 → 0.33.0
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/build/ipc-via-protobuf/connector-clients-side.js +1 -5
- package/build/ipc-via-protobuf/connector-services-side.d.ts +3 -1
- package/build/ipc-via-protobuf/connector-services-side.js +20 -6
- package/build/ipc-via-protobuf/connector.d.ts +32 -16
- package/build/ipc-via-protobuf/connector.js +14 -14
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2020 -
|
|
3
|
+
Copyright (C) 2020 - 2024 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -32,10 +32,6 @@ class ClientsSideImpl {
|
|
|
32
32
|
this.weakSrvByRefs = new Map();
|
|
33
33
|
this.srvFinalRegistry = new FinalizationRegistry(this.doOnClientObjDrop.bind(this));
|
|
34
34
|
this.isStopped = false;
|
|
35
|
-
if ((this.asyncReqToListObj && this.syncReqToListObj)
|
|
36
|
-
|| (!this.asyncReqToListObj && !this.syncReqToListObj)) {
|
|
37
|
-
throw new Error(`Expect either sync or async obj listing function.`);
|
|
38
|
-
}
|
|
39
35
|
Object.seal(this);
|
|
40
36
|
}
|
|
41
37
|
stop(exc) {
|
|
@@ -18,10 +18,12 @@ export declare class ExposedObjs {
|
|
|
18
18
|
private readonly objs;
|
|
19
19
|
private readonly objToRefs;
|
|
20
20
|
exposeDroppableService<T extends string>(objType: T, exp: ExposedFn | ExposedObj<any>, original: any): ObjectReference<T>;
|
|
21
|
+
private newRef;
|
|
21
22
|
getOriginalObj<T>(ref: ObjectReference<any>): T;
|
|
22
23
|
getObjForTransfer<T extends string>(ref: ObjectReference<T>): TransferableObj<T>;
|
|
23
24
|
findRefIfAlreadyExposed(o: any): ObjectReference<any> | undefined;
|
|
24
|
-
|
|
25
|
+
exposeW3NService(exp: ExposedFn | ExposedObj<any>): void;
|
|
26
|
+
exposeStaticService<T extends string>(objType: T, exp: ExposedFn | ExposedObj<any>): ObjectReference<T>;
|
|
25
27
|
drop(name: string): void;
|
|
26
28
|
find(path: string[] | undefined): ExposedFn | ExposedObj<any> | undefined;
|
|
27
29
|
findFn(path: string[] | undefined): ExposedFn;
|
|
@@ -132,6 +132,7 @@ class ServicesSideImpl {
|
|
|
132
132
|
const expSrv = {
|
|
133
133
|
exposeDroppableService: this.exposedObjs.exposeDroppableService.bind(this.exposedObjs),
|
|
134
134
|
exposeStaticService: this.exposedObjs.exposeStaticService.bind(this.exposedObjs),
|
|
135
|
+
exposeW3NService: this.exposedObjs.exposeW3NService.bind(this.exposedObjs),
|
|
135
136
|
getOriginalObj: this.exposedObjs.getOriginalObj.bind(this.exposedObjs),
|
|
136
137
|
listObj: path => {
|
|
137
138
|
const obj = this.exposedObjs.find(path);
|
|
@@ -152,16 +153,19 @@ class ExposedObjs {
|
|
|
152
153
|
this.objToRefs = new Map();
|
|
153
154
|
}
|
|
154
155
|
exposeDroppableService(objType, exp, original) {
|
|
156
|
+
const ref = this.newRef(objType);
|
|
157
|
+
this.objs.set(ref.path[0], { exp, original, objType });
|
|
158
|
+
this.objToRefs.set(original, ref);
|
|
159
|
+
return ref;
|
|
160
|
+
}
|
|
161
|
+
newRef(objType) {
|
|
155
162
|
let id;
|
|
156
163
|
do {
|
|
157
164
|
id = (0, random_node_1.stringOfB64CharsSync)(20);
|
|
158
165
|
} while (this.objs.has(id));
|
|
159
|
-
|
|
166
|
+
return {
|
|
160
167
|
objType, path: [id]
|
|
161
168
|
};
|
|
162
|
-
this.objs.set(id, { exp, original, objType });
|
|
163
|
-
this.objToRefs.set(original, ref);
|
|
164
|
-
return ref;
|
|
165
169
|
}
|
|
166
170
|
getOriginalObj(ref) {
|
|
167
171
|
const o = this.objs.get(ref.path[0]);
|
|
@@ -187,11 +191,21 @@ class ExposedObjs {
|
|
|
187
191
|
findRefIfAlreadyExposed(o) {
|
|
188
192
|
return this.objToRefs.get(o);
|
|
189
193
|
}
|
|
190
|
-
|
|
191
|
-
this.objs.
|
|
194
|
+
exposeW3NService(exp) {
|
|
195
|
+
if (this.objs.has(connector_1.W3N_NAME)) {
|
|
196
|
+
throw new Error(`${connector_1.W3N_NAME} object has already been added`);
|
|
197
|
+
}
|
|
198
|
+
this.objs.set(connector_1.W3N_NAME, {
|
|
192
199
|
exp, original: undefined, objType: 'non-transferable'
|
|
193
200
|
});
|
|
194
201
|
}
|
|
202
|
+
exposeStaticService(objType, exp) {
|
|
203
|
+
const ref = this.newRef(objType);
|
|
204
|
+
this.objs.set(ref.path[0], {
|
|
205
|
+
exp, original: undefined, objType
|
|
206
|
+
});
|
|
207
|
+
return ref;
|
|
208
|
+
}
|
|
195
209
|
drop(name) {
|
|
196
210
|
if (name !== connector_1.W3N_NAME) {
|
|
197
211
|
const o = this.objs.get(name);
|
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
import { Observer, SubjectLike, Subscribable } from "rxjs";
|
|
2
2
|
import { ObjectReference, Value } from "./protobuf-msg";
|
|
3
3
|
import { ProtoType } from '../lib-client/protobuf-type';
|
|
4
|
+
export interface ClientSide {
|
|
5
|
+
caller: Caller;
|
|
6
|
+
exposedServices: ClientSideServices;
|
|
7
|
+
close: (err?: any) => void;
|
|
8
|
+
}
|
|
9
|
+
export interface CoreSide {
|
|
10
|
+
caller: CallerToClient;
|
|
11
|
+
exposedServices: CoreSideServices;
|
|
12
|
+
close: (err?: any) => void;
|
|
13
|
+
}
|
|
4
14
|
export interface ServicesImpl {
|
|
5
15
|
exposeDroppableService<T extends string>(objType: T, exp: ExposedFn | ExposedObj<any>, original: any): ObjectReference<T>;
|
|
16
|
+
exposeStaticService<T extends string>(objType: T, exp: ExposedFn | ExposedObj<any>): ObjectReference<T>;
|
|
6
17
|
getOriginalObj<T>(ref: ObjectReference<any>): T;
|
|
7
|
-
|
|
18
|
+
exposeW3NService(exp: ExposedFn | ExposedObj<any>): void;
|
|
8
19
|
listObj(path: string[]): string[] | null;
|
|
9
20
|
getObjForTransfer<T extends string>(ref: ObjectReference<T>): TransferableObj<T>;
|
|
10
21
|
findRefIfAlreadyExposed(o: any): ObjectReference<any> | undefined;
|
|
@@ -13,29 +24,26 @@ export interface TransferableObj<T extends string> {
|
|
|
13
24
|
type: T;
|
|
14
25
|
o: any;
|
|
15
26
|
}
|
|
16
|
-
export interface ServicesSide {
|
|
17
|
-
exposedServices(): ServicesImpl;
|
|
18
|
-
processCallStart(fnCallNum: number, path: string[] | undefined, body: EnvelopeBody): void;
|
|
19
|
-
processCallCancelation(fnCallNum: number): void;
|
|
20
|
-
processListObj(fnCallNum: number, path: string[] | undefined): void;
|
|
21
|
-
processObjectDrop(path: string[] | undefined): void;
|
|
22
|
-
stop(): void;
|
|
23
|
-
}
|
|
24
27
|
export interface CoreSideServices {
|
|
25
28
|
exposeDroppableService: ServicesImpl['exposeDroppableService'];
|
|
26
29
|
getOriginalObj: ServicesImpl['getOriginalObj'];
|
|
27
|
-
exposeW3NService
|
|
30
|
+
exposeW3NService: ServicesImpl['exposeW3NService'];
|
|
28
31
|
listObj: ServicesImpl['listObj'];
|
|
29
32
|
getObjForTransfer: ServicesImpl['getObjForTransfer'];
|
|
30
33
|
findRefIfAlreadyExposed: ServicesImpl['findRefIfAlreadyExposed'];
|
|
31
34
|
}
|
|
32
|
-
export interface
|
|
33
|
-
|
|
34
|
-
|
|
35
|
+
export interface ClientSideServices {
|
|
36
|
+
exposeDroppableService: ServicesImpl['exposeDroppableService'];
|
|
37
|
+
getOriginalObj: ServicesImpl['getOriginalObj'];
|
|
38
|
+
exposeStaticService: ServicesImpl['exposeStaticService'];
|
|
39
|
+
getObjForTransfer: ServicesImpl['getObjForTransfer'];
|
|
40
|
+
findRefIfAlreadyExposed: ServicesImpl['findRefIfAlreadyExposed'];
|
|
35
41
|
}
|
|
36
|
-
export interface
|
|
37
|
-
|
|
38
|
-
|
|
42
|
+
export interface CallerToClient {
|
|
43
|
+
startPromiseCall: Caller['startPromiseCall'];
|
|
44
|
+
startObservableCall: Caller['startObservableCall'];
|
|
45
|
+
registerClientDrop: Caller['registerClientDrop'];
|
|
46
|
+
srvRefOf: Caller['srvRefOf'];
|
|
39
47
|
}
|
|
40
48
|
export interface Caller {
|
|
41
49
|
startPromiseCall(path: string[], req: EnvelopeBody): Promise<EnvelopeBody>;
|
|
@@ -52,6 +60,14 @@ export interface Caller {
|
|
|
52
60
|
export interface ObjectFromCore {
|
|
53
61
|
_isObjectFromCore: true;
|
|
54
62
|
}
|
|
63
|
+
export interface ServicesSide {
|
|
64
|
+
exposedServices(): ServicesImpl;
|
|
65
|
+
processCallStart(fnCallNum: number, path: string[] | undefined, body: EnvelopeBody): void;
|
|
66
|
+
processCallCancelation(fnCallNum: number): void;
|
|
67
|
+
processListObj(fnCallNum: number, path: string[] | undefined): void;
|
|
68
|
+
processObjectDrop(path: string[] | undefined): void;
|
|
69
|
+
stop(): void;
|
|
70
|
+
}
|
|
55
71
|
export interface ClientsSide {
|
|
56
72
|
caller(): Caller;
|
|
57
73
|
processInterimCallReply(fnCallNum: number, body: EnvelopeBody): void;
|
|
@@ -51,7 +51,7 @@ class ObjectsConnector {
|
|
|
51
51
|
switch (side) {
|
|
52
52
|
case 'core':
|
|
53
53
|
this.services = makeServicesSide(sendMsg);
|
|
54
|
-
this.clients = undefined;
|
|
54
|
+
this.clients = makeClientsSide(sendMsg, undefined, undefined);
|
|
55
55
|
break;
|
|
56
56
|
case "client":
|
|
57
57
|
if ((!listObj && !listObjAsync)
|
|
@@ -59,35 +59,35 @@ class ObjectsConnector {
|
|
|
59
59
|
throw new Error(`Client side needs either listObj, or listObjAsync argument`);
|
|
60
60
|
}
|
|
61
61
|
this.clients = makeClientsSide(sendMsg, listObj, listObjAsync);
|
|
62
|
-
this.services =
|
|
62
|
+
this.services = makeServicesSide(sendMsg);
|
|
63
63
|
break;
|
|
64
64
|
}
|
|
65
65
|
Object.seal(this);
|
|
66
66
|
}
|
|
67
67
|
static makeCoreSide(fromCore, toCore) {
|
|
68
68
|
const connector = new ObjectsConnector('core', fromCore, toCore);
|
|
69
|
-
const { exposeDroppableService,
|
|
70
|
-
|
|
69
|
+
const { exposeDroppableService, exposeW3NService, findRefIfAlreadyExposed, getObjForTransfer, getOriginalObj, listObj } = connector.services.exposedServices();
|
|
70
|
+
const { registerClientDrop, srvRefOf, startObservableCall, startPromiseCall } = connector.clients.caller();
|
|
71
71
|
return {
|
|
72
72
|
exposedServices: {
|
|
73
|
-
exposeDroppableService,
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
exposeStaticService(exports.W3N_NAME, exp);
|
|
79
|
-
w3nIsSet = true;
|
|
80
|
-
},
|
|
81
|
-
findRefIfAlreadyExposed, getObjForTransfer,
|
|
82
|
-
getOriginalObj, listObj
|
|
73
|
+
exposeDroppableService, exposeW3NService, findRefIfAlreadyExposed,
|
|
74
|
+
getObjForTransfer, getOriginalObj, listObj
|
|
75
|
+
},
|
|
76
|
+
caller: {
|
|
77
|
+
registerClientDrop, srvRefOf, startObservableCall, startPromiseCall
|
|
83
78
|
},
|
|
84
79
|
close: err => connector.close(err)
|
|
85
80
|
};
|
|
86
81
|
}
|
|
87
82
|
static makeClientSide(fromClient, toClient, listObj, listObjAsync) {
|
|
88
83
|
const connector = new ObjectsConnector('client', fromClient, toClient, listObj, listObjAsync);
|
|
84
|
+
const { exposeDroppableService, findRefIfAlreadyExposed, getObjForTransfer, getOriginalObj, exposeStaticService } = connector.services.exposedServices();
|
|
89
85
|
return {
|
|
90
86
|
caller: connector.clients.caller(),
|
|
87
|
+
exposedServices: {
|
|
88
|
+
exposeDroppableService, findRefIfAlreadyExposed, getObjForTransfer,
|
|
89
|
+
getOriginalObj, exposeStaticService
|
|
90
|
+
},
|
|
91
91
|
close: err => connector.close(err)
|
|
92
92
|
};
|
|
93
93
|
}
|