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.
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2020 - 2023 3NSoft Inc.
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
- exposeStaticService(name: string, exp: ExposedFn | ExposedObj<any>): void;
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
- const ref = {
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
- exposeStaticService(name, exp) {
191
- this.objs.set(name, {
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
- exposeStaticService(name: string, exp: ExposedFn | ExposedObj<any>): void;
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(exp: ExposedFn | ExposedObj<any>): void;
30
+ exposeW3NService: ServicesImpl['exposeW3NService'];
28
31
  listObj: ServicesImpl['listObj'];
29
32
  getObjForTransfer: ServicesImpl['getObjForTransfer'];
30
33
  findRefIfAlreadyExposed: ServicesImpl['findRefIfAlreadyExposed'];
31
34
  }
32
- export interface CoreSide {
33
- exposedServices: CoreSideServices;
34
- close: (err?: any) => void;
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 ClientSide {
37
- caller: Caller;
38
- close: (err?: any) => void;
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 = undefined;
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, exposeStaticService, findRefIfAlreadyExposed, getObjForTransfer, getOriginalObj, listObj } = connector.services.exposedServices();
70
- let w3nIsSet = false;
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
- exposeW3NService: exp => {
75
- if (w3nIsSet) {
76
- throw new Error(`${exports.W3N_NAME} object has already been added`);
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "core-3nweb-client-lib",
3
- "version": "0.32.1",
3
+ "version": "0.33.0",
4
4
  "description": "3NWeb client core library, embeddable into different environments",
5
5
  "main": "build/lib-index.js",
6
6
  "types": "build/lib-index.d.ts",