core-3nweb-client-lib 0.31.8 → 0.32.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,5 +1,5 @@
1
- import { ExposedObj, Caller, ExposedServices } from '../../ipc-via-protobuf/connector';
1
+ import { ExposedObj, Caller, CoreSideServices } from '../../ipc-via-protobuf/connector';
2
2
  type ASMailService = web3n.asmail.Service;
3
- export declare function exposeASMailCAP(cap: ASMailService, expServices: ExposedServices): ExposedObj<ASMailService>;
3
+ export declare function exposeASMailCAP(cap: ASMailService, expServices: CoreSideServices): ExposedObj<ASMailService>;
4
4
  export declare function makeASMailCaller(caller: Caller, objPath: string[]): ASMailService;
5
5
  export {};
@@ -1,6 +1,6 @@
1
- import { ExposedObj, Caller, ExposedServices } from '../../ipc-via-protobuf/connector';
1
+ import { ExposedObj, Caller, CoreSideServices } from '../../ipc-via-protobuf/connector';
2
2
  type Storage = web3n.storage.Service;
3
- export declare function exposeStorageCAP(cap: Storage, expServices: ExposedServices): ExposedObj<Storage>;
3
+ export declare function exposeStorageCAP(cap: Storage, expServices: CoreSideServices): ExposedObj<Storage>;
4
4
  export declare function makeStorageCaller(caller: Caller, objPath: string[]): Storage;
5
5
  export declare function promiseStorageCaller(caller: Caller, objPath: string[]): Promise<Storage>;
6
6
  export {};
@@ -1,9 +1,9 @@
1
1
  import { ObjectReference } from '../ipc-via-protobuf/protobuf-msg';
2
- import { ExposedServices, Caller } from '../ipc-via-protobuf/connector';
2
+ import { CoreSideServices, Caller } from '../ipc-via-protobuf/connector';
3
3
  type FileByteSink = web3n.files.FileByteSink;
4
4
  type FileByteSource = web3n.files.FileByteSource;
5
5
  export declare function makeSinkCaller(caller: Caller, ref: ObjectReference<'FileByteSink'>): FileByteSink;
6
- export declare function exposeSinkService(sink: FileByteSink, expServices: ExposedServices): ObjectReference<'FileByteSink'>;
6
+ export declare function exposeSinkService(sink: FileByteSink, expServices: CoreSideServices): ObjectReference<'FileByteSink'>;
7
7
  export declare function makeSrcCaller(caller: Caller, ref: ObjectReference<'FileByteSource'>): FileByteSource;
8
- export declare function exposeSrcService(src: FileByteSource, expServices: ExposedServices): ObjectReference<'FileByteSource'>;
8
+ export declare function exposeSrcService(src: FileByteSource, expServices: CoreSideServices): ObjectReference<'FileByteSource'>;
9
9
  export {};
@@ -1,7 +1,7 @@
1
- import { Caller, ExposedServices } from "../ipc-via-protobuf/connector";
1
+ import { Caller, CoreSideServices } 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: ExposedServices, w3n: T, extraCAPs?: CAPsExposures<TypeDifference<T, W3N>>): void;
4
+ export declare function exposeW3N<T extends W3N>(coreSide: CoreSideServices, w3n: T, extraCAPs?: CAPsExposures<TypeDifference<T, W3N>>): void;
5
5
  export declare function makeW3Nclient<T extends W3N>(clientSide: Caller, extraCAPs?: ClientCAPsWraps<TypeDifference<T, W3N>>): T;
6
6
  export declare function promiseW3Nclient<T extends W3N>(clientSide: Caller, extraCAPs?: ClientCAPsWraps<TypeDifference<T, W3N>>): Promise<T>;
7
7
  export {};
@@ -1,6 +1,6 @@
1
1
  import { ObjectReference, Value } from "../ipc-via-protobuf/protobuf-msg";
2
2
  import { ProtoType } from '../lib-client/protobuf-type';
3
- import { ExposedFn, EnvelopeBody, Caller, ExposedServices } from "../ipc-via-protobuf/connector";
3
+ import { ExposedFn, EnvelopeBody, Caller, CoreSideServices } from "../ipc-via-protobuf/connector";
4
4
  type ReadonlyFile = web3n.files.ReadonlyFile;
5
5
  type ReadonlyFileVersionedAPI = web3n.files.ReadonlyFileVersionedAPI;
6
6
  type WritableFile = web3n.files.WritableFile;
@@ -15,7 +15,7 @@ type OptionsToAdopteRemote = web3n.files.OptionsToAdopteRemote;
15
15
  type OptionsToUploadLocal = web3n.files.OptionsToUploadLocal;
16
16
  type VersionedReadFlags = web3n.files.VersionedReadFlags;
17
17
  export declare function makeFileCaller(caller: Caller, fileMsg: FileMsg): File;
18
- export declare function exposeFileService(file: File, expServices: ExposedServices): FileMsg;
18
+ export declare function exposeFileService(file: File, expServices: CoreSideServices): FileMsg;
19
19
  export interface FileMsg {
20
20
  writable: boolean;
21
21
  isVersioned: boolean;
@@ -107,7 +107,7 @@ export declare namespace vGetByteSource {
107
107
  src: ObjectReference<'FileByteSource'>;
108
108
  }
109
109
  const replyType: ProtoType<Reply>;
110
- function wrapService(fn: ReadonlyFileVersionedAPI['getByteSource'], expServices: ExposedServices): ExposedFn;
110
+ function wrapService(fn: ReadonlyFileVersionedAPI['getByteSource'], expServices: CoreSideServices): ExposedFn;
111
111
  function makeCaller(caller: Caller, objPath: string[]): ReadonlyFileVersionedAPI['getByteSource'];
112
112
  }
113
113
  export interface XAttrMsg {
@@ -141,7 +141,7 @@ export declare namespace vGetByteSink {
141
141
  sink: ObjectReference<'FileByteSink'>;
142
142
  }
143
143
  const replyType: ProtoType<Reply>;
144
- function wrapService(fn: WritableFileVersionedAPI['getByteSink'], expServices: ExposedServices): ExposedFn;
144
+ function wrapService(fn: WritableFileVersionedAPI['getByteSink'], expServices: CoreSideServices): ExposedFn;
145
145
  function makeCaller(caller: Caller, objPath: string[]): WritableFileVersionedAPI['getByteSink'];
146
146
  }
147
147
  export interface OptionsToUploadLocalMsg {
@@ -1,12 +1,12 @@
1
1
  import { ObjectReference, Value } from "../ipc-via-protobuf/protobuf-msg";
2
2
  import { ProtoType } from '../lib-client/protobuf-type';
3
- import { Caller, ExposedServices } from "../ipc-via-protobuf/connector";
3
+ import { Caller, CoreSideServices } from "../ipc-via-protobuf/connector";
4
4
  import { FileMsg } from "./file";
5
5
  type FS = web3n.files.FS;
6
6
  type FSItem = web3n.files.FSItem;
7
7
  type OptionsToAdoptRemoteItem = web3n.files.OptionsToAdoptRemoteItem;
8
8
  export declare function makeFSCaller(caller: Caller, fsMsg: FSMsg): FS;
9
- export declare function exposeFSService(fs: FS, expServices: ExposedServices): FSMsg;
9
+ export declare function exposeFSService(fs: FS, expServices: CoreSideServices): FSMsg;
10
10
  export interface FSMsg {
11
11
  type: string;
12
12
  isVersioned: boolean;
@@ -35,7 +35,7 @@ export declare namespace fsItem {
35
35
  };
36
36
  }
37
37
  const msgType: ProtoType<FSItemMsg>;
38
- function exposeFSItem(expServices: ExposedServices, item: FSItem): FSItemMsg;
38
+ function exposeFSItem(expServices: CoreSideServices, item: FSItem): FSItemMsg;
39
39
  function fsItemFromMsg(caller: Caller, msg: FSItemMsg): FSItem;
40
40
  }
41
41
  interface OptionsToAdoptRemoteItemMsg {
@@ -1,11 +1,11 @@
1
- import { ExposedObj, ExposedFn, ExposedServices, Caller } from "../ipc-via-protobuf/connector";
1
+ import { ExposedObj, ExposedFn, CoreSideServices, Caller } from "../ipc-via-protobuf/connector";
2
2
  export type CAPsExposures<T> = {
3
- [cap in keyof Required<T>]: (cap: any, coreSide: ExposedServices) => ExposedObj<any> | ExposedFn;
3
+ [cap in keyof Required<T>]: (cap: any, coreSide: CoreSideServices) => 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: ExposedServices, w3n: T, mainCAPs: CAPsExposures<W3N>, extraCAPs: CAPsExposures<TypeDifference<T, W3N>> | undefined): void;
8
+ export declare function exposeCAPs<T extends W3N, W3N extends object>(coreSide: CoreSideServices, w3n: T, mainCAPs: CAPsExposures<W3N>, extraCAPs: CAPsExposures<TypeDifference<T, W3N>> | undefined): void;
9
9
  export type MakeCapClient = (clientSide: Caller, objPath: string[]) => any;
10
10
  export type ClientCAPsWraps<T> = {
11
11
  [cap in keyof Required<T>]: MakeCapClient;
@@ -1,6 +1,6 @@
1
- import { ExposedServices, Caller } from "../ipc-via-protobuf/connector";
1
+ import { CoreSideServices, Caller } 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: ExposedServices, w3n: T, extraCAPs?: CAPsExposures<TypeDifference<T, W3N>>): void;
4
+ export declare function exposeStartupW3N<T extends W3N>(coreSide: CoreSideServices, w3n: T, extraCAPs?: CAPsExposures<TypeDifference<T, W3N>>): void;
5
5
  export declare function makeStartupW3Nclient<T extends W3N>(clientSide: Caller, extraCAPs?: ClientCAPsWraps<TypeDifference<T, W3N>>): W3N;
6
6
  export {};
@@ -1,5 +1,5 @@
1
1
  import { ObjectReference } from "./protobuf-msg";
2
- import { ServicesSide, Envelope, EnvelopeBody, ExposedFn, ExposedObj, ExposedServices, TransferableObj } from "./connector";
2
+ import { ServicesSide, Envelope, EnvelopeBody, ExposedFn, ExposedObj, ServicesImpl, TransferableObj } from "./connector";
3
3
  export declare class ServicesSideImpl implements ServicesSide {
4
4
  private readonly sendMsg;
5
5
  readonly exposedObjs: ExposedObjs;
@@ -12,7 +12,7 @@ export declare class ServicesSideImpl implements ServicesSide {
12
12
  processCallCancelation(fnCallNum: number): void;
13
13
  processObjectDrop(path: string[]): void;
14
14
  processListObj(fnCallNum: number, path: string[]): void;
15
- exposedServices(): ExposedServices;
15
+ exposedServices(): ServicesImpl;
16
16
  }
17
17
  export declare class ExposedObjs {
18
18
  private readonly objs;
@@ -21,7 +21,7 @@ export declare class ExposedObjs {
21
21
  getOriginalObj<T>(ref: ObjectReference<any>): T;
22
22
  getObjForTransfer<T extends string>(ref: ObjectReference<T>): TransferableObj<T>;
23
23
  findRefIfAlreadyExposed(o: any): ObjectReference<any> | undefined;
24
- exposeW3NService(exp: ExposedFn | ExposedObj<any>): void;
24
+ exposeStaticService(name: string, exp: ExposedFn | ExposedObj<any>): void;
25
25
  drop(name: string): void;
26
26
  find(path: string[] | undefined): ExposedFn | ExposedObj<any> | undefined;
27
27
  findFn(path: string[] | undefined): ExposedFn;
@@ -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
@@ -131,7 +131,7 @@ class ServicesSideImpl {
131
131
  exposedServices() {
132
132
  const expSrv = {
133
133
  exposeDroppableService: this.exposedObjs.exposeDroppableService.bind(this.exposedObjs),
134
- exposeW3NService: this.exposedObjs.exposeW3NService.bind(this.exposedObjs),
134
+ exposeStaticService: this.exposedObjs.exposeStaticService.bind(this.exposedObjs),
135
135
  getOriginalObj: this.exposedObjs.getOriginalObj.bind(this.exposedObjs),
136
136
  listObj: path => {
137
137
  const obj = this.exposedObjs.find(path);
@@ -187,11 +187,8 @@ class ExposedObjs {
187
187
  findRefIfAlreadyExposed(o) {
188
188
  return this.objToRefs.get(o);
189
189
  }
190
- exposeW3NService(exp) {
191
- if (this.objs.has(connector_1.W3N_NAME)) {
192
- throw new Error(`${connector_1.W3N_NAME} object has already been added`);
193
- }
194
- this.objs.set(connector_1.W3N_NAME, {
190
+ exposeStaticService(name, exp) {
191
+ this.objs.set(name, {
195
192
  exp, original: undefined, objType: 'non-transferable'
196
193
  });
197
194
  }
@@ -1,10 +1,10 @@
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 ExposedServices {
4
+ export interface ServicesImpl {
5
5
  exposeDroppableService<T extends string>(objType: T, exp: ExposedFn | ExposedObj<any>, original: any): ObjectReference<T>;
6
6
  getOriginalObj<T>(ref: ObjectReference<any>): T;
7
- exposeW3NService(exp: ExposedFn | ExposedObj<any>): void;
7
+ exposeStaticService(name: string, exp: ExposedFn | ExposedObj<any>): void;
8
8
  listObj(path: string[]): string[] | null;
9
9
  getObjForTransfer<T extends string>(ref: ObjectReference<T>): TransferableObj<T>;
10
10
  findRefIfAlreadyExposed(o: any): ObjectReference<any> | undefined;
@@ -14,13 +14,29 @@ export interface TransferableObj<T extends string> {
14
14
  o: any;
15
15
  }
16
16
  export interface ServicesSide {
17
- exposedServices(): ExposedServices;
17
+ exposedServices(): ServicesImpl;
18
18
  processCallStart(fnCallNum: number, path: string[] | undefined, body: EnvelopeBody): void;
19
19
  processCallCancelation(fnCallNum: number): void;
20
20
  processListObj(fnCallNum: number, path: string[] | undefined): void;
21
21
  processObjectDrop(path: string[] | undefined): void;
22
22
  stop(): void;
23
23
  }
24
+ export interface CoreSideServices {
25
+ exposeDroppableService: ServicesImpl['exposeDroppableService'];
26
+ getOriginalObj: ServicesImpl['getOriginalObj'];
27
+ exposeW3NService(exp: ExposedFn | ExposedObj<any>): void;
28
+ listObj: ServicesImpl['listObj'];
29
+ getObjForTransfer: ServicesImpl['getObjForTransfer'];
30
+ findRefIfAlreadyExposed: ServicesImpl['findRefIfAlreadyExposed'];
31
+ }
32
+ export interface CoreSide {
33
+ exposedServices: CoreSideServices;
34
+ close: (err?: any) => void;
35
+ }
36
+ export interface ClientSide {
37
+ caller: Caller;
38
+ close: (err?: any) => void;
39
+ }
24
40
  export interface Caller {
25
41
  startPromiseCall(path: string[], req: EnvelopeBody): Promise<EnvelopeBody>;
26
42
  startObservableCall(path: string[], req: EnvelopeBody, obs: SubjectLike<EnvelopeBody>): () => void;
@@ -48,9 +64,9 @@ export declare class ObjectsConnector {
48
64
  private messagingProc;
49
65
  private readonly services;
50
66
  private readonly clients;
51
- constructor(msgSink: Observer<Envelope>, msgSrc: Subscribable<Envelope>, sides: 'clients' | 'services' | 'clients-and-services', listObj?: Caller['listObj'], listObjAsync?: Caller['listObjAsync']);
52
- get caller(): Caller;
53
- get exposedServices(): ExposedServices;
67
+ private constructor();
68
+ static makeCoreSide(fromCore: Observer<Envelope>, toCore: Subscribable<Envelope>): CoreSide;
69
+ static makeClientSide(fromClient: Observer<Envelope>, toClient: Subscribable<Envelope>, listObj?: Caller['listObj'], listObjAsync?: Caller['listObjAsync']): ClientSide;
54
70
  private stop;
55
71
  close(err?: any): void;
56
72
  private processIncomingMsg;
@@ -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
@@ -23,8 +23,8 @@ const protobuf_msg_1 = require("./protobuf-msg");
23
23
  const protobuf_type_1 = require("../lib-client/protobuf-type");
24
24
  const ipc_proto_1 = require("../protos/ipc.proto");
25
25
  // Note that make_?_Side functions could've been imported normally, but client
26
- // side uses weakrefs, while services side doesn't, and services side is used
27
- // in embedding without weakrefs, needing to hide require points.
26
+ // side uses weakrefs, while services side doesn't, and services side can be
27
+ // used in embedding without weakrefs, needing to hide require points.
28
28
  function makeServicesSide(sendMsg) {
29
29
  const srvClassFn = require('./connector-services-side').ServicesSideImpl;
30
30
  return new srvClassFn(sendMsg);
@@ -34,7 +34,7 @@ function makeClientsSide(sendMsg, syncReqToListObj, asyncReqToListObj) {
34
34
  return new classFn(sendMsg, syncReqToListObj, asyncReqToListObj);
35
35
  }
36
36
  class ObjectsConnector {
37
- constructor(msgSink, msgSrc, sides, listObj, listObjAsync) {
37
+ constructor(side, msgSink, msgSrc, listObj, listObjAsync) {
38
38
  this.msgSink = msgSink;
39
39
  this.messagingProc = undefined;
40
40
  this.messagingProc = msgSrc.subscribe({
@@ -48,31 +48,48 @@ class ObjectsConnector {
48
48
  }
49
49
  this.msgSink.next(msg);
50
50
  };
51
- this.services = (((sides === 'services') || (sides === 'clients-and-services')) ?
52
- makeServicesSide(sendMsg) : undefined);
53
- if ((sides === 'clients') || (sides === 'clients-and-services')) {
54
- if ((!listObj && !listObjAsync)
55
- || (listObj && listObjAsync)) {
56
- throw new Error(`Client side needs either listObj, or listObjAsync argument`);
57
- }
58
- this.clients = makeClientsSide(sendMsg, listObj, listObjAsync);
59
- }
60
- else {
61
- this.clients = undefined;
51
+ switch (side) {
52
+ case 'core':
53
+ this.services = makeServicesSide(sendMsg);
54
+ this.clients = undefined;
55
+ break;
56
+ case "client":
57
+ if ((!listObj && !listObjAsync)
58
+ || (listObj && listObjAsync)) {
59
+ throw new Error(`Client side needs either listObj, or listObjAsync argument`);
60
+ }
61
+ this.clients = makeClientsSide(sendMsg, listObj, listObjAsync);
62
+ this.services = undefined;
63
+ break;
62
64
  }
63
65
  Object.seal(this);
64
66
  }
65
- get caller() {
66
- if (!this.clients) {
67
- throw new Error(`Clients side is not set in this connector`);
68
- }
69
- return this.clients.caller();
67
+ static makeCoreSide(fromCore, toCore) {
68
+ const connector = new ObjectsConnector('core', fromCore, toCore);
69
+ const { exposeDroppableService, exposeStaticService, findRefIfAlreadyExposed, getObjForTransfer, getOriginalObj, listObj } = connector.services.exposedServices();
70
+ let w3nIsSet = false;
71
+ return {
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
83
+ },
84
+ close: () => connector.close()
85
+ };
70
86
  }
71
- get exposedServices() {
72
- if (!this.services) {
73
- throw new Error(`Services side is not set in this connector`);
74
- }
75
- return this.services.exposedServices();
87
+ static makeClientSide(fromClient, toClient, listObj, listObjAsync) {
88
+ const connector = new ObjectsConnector('client', fromClient, toClient, listObj, listObjAsync);
89
+ return {
90
+ caller: connector.clients.caller(),
91
+ close: () => connector.close()
92
+ };
76
93
  }
77
94
  stop(fromRemote, err) {
78
95
  this.messagingProc = undefined;