core-3nweb-client-lib 0.32.1 → 0.34.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/core-ipc/common-caps.d.ts +4 -4
- package/build/core-ipc/common-caps.js +1 -1
- package/build/core-ipc/generic.d.ts +6 -6
- package/build/core-ipc/generic.js +14 -14
- package/build/core-ipc/startup-caps.d.ts +3 -3
- 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,7 +1,7 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CoreSide, ClientSide } from "../ipc-via-protobuf/connector";
|
|
2
2
|
import { ClientCAPsWraps, CAPsExposures, TypeDifference } from "./generic";
|
|
3
3
|
type W3N = web3n.caps.common.W3N;
|
|
4
|
-
export declare function exposeW3N<T extends W3N>(coreSide:
|
|
5
|
-
export declare function makeW3Nclient<T extends W3N>(clientSide:
|
|
6
|
-
export declare function promiseW3Nclient<T extends W3N>(clientSide:
|
|
4
|
+
export declare function exposeW3N<T extends W3N>(coreSide: CoreSide, w3n: T, extraCAPs?: CAPsExposures<TypeDifference<T, W3N>>): void;
|
|
5
|
+
export declare function makeW3Nclient<T extends W3N>(clientSide: ClientSide, extraCAPs?: ClientCAPsWraps<TypeDifference<T, W3N>>): T;
|
|
6
|
+
export declare function promiseW3Nclient<T extends W3N>(clientSide: ClientSide, extraCAPs?: ClientCAPsWraps<TypeDifference<T, W3N>>): Promise<T>;
|
|
7
7
|
export {};
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2020 - 2021, 2023 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2020 - 2021, 2023 - 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
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { ExposedObj, ExposedFn, CoreSideServices, Caller } from "../ipc-via-protobuf/connector";
|
|
1
|
+
import { ExposedObj, ExposedFn, CoreSideServices, Caller, CoreSide, CallerToClient, ClientSideServices, ClientSide } from "../ipc-via-protobuf/connector";
|
|
2
2
|
export type CAPsExposures<T> = {
|
|
3
|
-
[cap in keyof Required<T>]: (cap: any, coreSide: CoreSideServices) => ExposedObj<any> | ExposedFn;
|
|
3
|
+
[cap in keyof Required<T>]: (cap: any, coreSide: CoreSideServices, callerToClient: CallerToClient) => ExposedObj<any> | ExposedFn;
|
|
4
4
|
};
|
|
5
5
|
export type TypeDifference<T extends TExc, TExc extends object> = {
|
|
6
6
|
[cap in Exclude<keyof T, keyof TExc>]: T[cap];
|
|
7
7
|
};
|
|
8
|
-
export declare function exposeCAPs<T extends W3N, W3N extends object>(coreSide:
|
|
9
|
-
export type MakeCapClient = (clientSide: Caller, objPath: string[]) => any;
|
|
8
|
+
export declare function exposeCAPs<T extends W3N, W3N extends object>(coreSide: CoreSide, w3n: T, mainCAPs: CAPsExposures<W3N>, extraCAPs: CAPsExposures<TypeDifference<T, W3N>> | undefined): void;
|
|
9
|
+
export type MakeCapClient = (clientSide: Caller, objPath: string[], expServices: ClientSideServices) => any;
|
|
10
10
|
export type ClientCAPsWraps<T> = {
|
|
11
11
|
[cap in keyof Required<T>]: MakeCapClient;
|
|
12
12
|
};
|
|
13
|
-
export declare function makeClientSide<T extends W3N, W3N extends object>(
|
|
14
|
-
export declare function promiseClientSide<T extends W3N, W3N extends object>(
|
|
13
|
+
export declare function makeClientSide<T extends W3N, W3N extends object>({ caller, exposedServices }: ClientSide, mainCAPs: ClientCAPsWraps<W3N>, extraCAPs: ClientCAPsWraps<TypeDifference<T, W3N>> | undefined): T;
|
|
14
|
+
export declare function promiseClientSide<T extends W3N, W3N extends object>({ caller, exposedServices }: ClientSide, mainCAPs: ClientCAPsWraps<W3N>, extraCAPs: ClientCAPsWraps<TypeDifference<T, W3N>> | undefined): Promise<T>;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2021 - 2022 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2021 - 2022, 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
|
|
@@ -27,55 +27,55 @@ function exposeCAPs(coreSide, w3n, mainCAPs, extraCAPs) {
|
|
|
27
27
|
if (extraCAPs) {
|
|
28
28
|
addCAPsInExposure(expW3N, coreSide, w3n, extraCAPs);
|
|
29
29
|
}
|
|
30
|
-
coreSide.exposeW3NService(expW3N);
|
|
30
|
+
coreSide.exposedServices.exposeW3NService(expW3N);
|
|
31
31
|
}
|
|
32
|
-
function addCAPsInExposure(expW3N,
|
|
32
|
+
function addCAPsInExposure(expW3N, { exposedServices, caller: callerToClient }, w3n, capExposures) {
|
|
33
33
|
for (const capName in capExposures) {
|
|
34
34
|
const expose = capExposures[capName];
|
|
35
35
|
(0, assert_1.assert)(typeof expose === 'function');
|
|
36
36
|
(0, assert_1.assert)(!expW3N[capName], `Capability ${capName} is already exposed, and we specifically have no shadowing.`);
|
|
37
37
|
const cap = w3n[capName];
|
|
38
38
|
if (cap) {
|
|
39
|
-
expW3N[capName] = expose(cap,
|
|
39
|
+
expW3N[capName] = expose(cap, exposedServices, callerToClient);
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
}
|
|
43
|
-
function makeClientSide(
|
|
44
|
-
(0, assert_1.assert)(!!
|
|
43
|
+
function makeClientSide({ caller, exposedServices }, mainCAPs, extraCAPs) {
|
|
44
|
+
(0, assert_1.assert)(!!caller.listObj);
|
|
45
45
|
const objPath = [connector_1.W3N_NAME];
|
|
46
|
-
const lstOfCAPs =
|
|
46
|
+
const lstOfCAPs = caller.listObj(objPath);
|
|
47
47
|
const w3n = {};
|
|
48
48
|
for (const cap of lstOfCAPs) {
|
|
49
49
|
const capObjPath = objPath.concat(cap);
|
|
50
50
|
if (mainCAPs[cap]) {
|
|
51
51
|
const makeCap = mainCAPs[cap];
|
|
52
52
|
(0, assert_1.assert)(typeof makeCap === 'function');
|
|
53
|
-
w3n[cap] = makeCap(
|
|
53
|
+
w3n[cap] = makeCap(caller, capObjPath, exposedServices);
|
|
54
54
|
}
|
|
55
55
|
else if (extraCAPs) {
|
|
56
56
|
const makeCap = extraCAPs[cap];
|
|
57
57
|
(0, assert_1.assert)(typeof makeCap === 'function');
|
|
58
|
-
w3n[cap] = makeCap(
|
|
58
|
+
w3n[cap] = makeCap(caller, capObjPath, exposedServices);
|
|
59
59
|
}
|
|
60
60
|
}
|
|
61
61
|
return w3n;
|
|
62
62
|
}
|
|
63
|
-
async function promiseClientSide(
|
|
64
|
-
(0, assert_1.assert)(!!
|
|
63
|
+
async function promiseClientSide({ caller, exposedServices }, mainCAPs, extraCAPs) {
|
|
64
|
+
(0, assert_1.assert)(!!caller.listObjAsync);
|
|
65
65
|
const objPath = [connector_1.W3N_NAME];
|
|
66
|
-
const lstOfCAPs = (await
|
|
66
|
+
const lstOfCAPs = (await caller.listObjAsync(objPath));
|
|
67
67
|
const w3n = {};
|
|
68
68
|
for (const cap of lstOfCAPs) {
|
|
69
69
|
const capObjPath = objPath.concat(cap);
|
|
70
70
|
if (mainCAPs[cap]) {
|
|
71
71
|
const makeCap = mainCAPs[cap];
|
|
72
72
|
(0, assert_1.assert)(typeof makeCap === 'function');
|
|
73
|
-
w3n[cap] = await makeCap(
|
|
73
|
+
w3n[cap] = await makeCap(caller, capObjPath, exposedServices);
|
|
74
74
|
}
|
|
75
75
|
else if (extraCAPs) {
|
|
76
76
|
const makeCap = extraCAPs[cap];
|
|
77
77
|
(0, assert_1.assert)(typeof makeCap === 'function');
|
|
78
|
-
w3n[cap] = await makeCap(
|
|
78
|
+
w3n[cap] = await makeCap(caller, capObjPath, exposedServices);
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
return w3n;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CoreSide, ClientSide } from "../ipc-via-protobuf/connector";
|
|
2
2
|
import { ClientCAPsWraps, CAPsExposures, TypeDifference } from "./generic";
|
|
3
3
|
type W3N = web3n.startup.W3N;
|
|
4
|
-
export declare function exposeStartupW3N<T extends W3N>(coreSide:
|
|
5
|
-
export declare function makeStartupW3Nclient<T extends W3N>(clientSide:
|
|
4
|
+
export declare function exposeStartupW3N<T extends W3N>(coreSide: CoreSide, w3n: T, extraCAPs?: CAPsExposures<TypeDifference<T, W3N>>): void;
|
|
5
|
+
export declare function makeStartupW3Nclient<T extends W3N>(clientSide: ClientSide, extraCAPs?: ClientCAPsWraps<TypeDifference<T, W3N>>): W3N;
|
|
6
6
|
export {};
|
|
@@ -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
|
}
|