core-3nweb-client-lib 0.25.3 → 0.26.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.
Files changed (113) hide show
  1. package/README.md +2 -2
  2. package/build/api-defs/files.d.ts +23 -20
  3. package/build/core/asmail/config/common.js +2 -2
  4. package/build/core/asmail/delivery/index.js +4 -3
  5. package/build/core/asmail/delivery/msg.js +5 -4
  6. package/build/core/asmail/delivery/per-recipient-wip.js +2 -2
  7. package/build/core/asmail/inbox/attachments/fs.js +6 -0
  8. package/build/core/asmail/inbox/cached-msgs.js +2 -2
  9. package/build/core/asmail/inbox/inbox-events.js +2 -1
  10. package/build/core/asmail/inbox/index.js +2 -2
  11. package/build/core/asmail/inbox/msg-downloader.js +2 -2
  12. package/build/core/asmail/inbox/msg-indexing.js +3 -3
  13. package/build/core/asmail/inbox/msg-on-disk.js +2 -2
  14. package/build/core/asmail/keyring/keyring-storage.js +2 -2
  15. package/build/core/asmail/sending-params/own-params.js +2 -2
  16. package/build/core/asmail/sending-params/params-from-others.js +2 -2
  17. package/build/core/id-manager.js +2 -2
  18. package/build/core/sign-in.d.ts +5 -4
  19. package/build/core/sign-in.js +9 -11
  20. package/build/core/sign-up.d.ts +1 -0
  21. package/build/core/sign-up.js +7 -3
  22. package/build/core/storage/common/json-saving.d.ts +21 -0
  23. package/build/core/storage/common/json-saving.js +82 -0
  24. package/build/core/storage/common/obj-info-file.d.ts +43 -0
  25. package/build/core/storage/common/obj-info-file.js +119 -3
  26. package/build/core/storage/index.js +1 -1
  27. package/build/core/storage/local/obj-files-gc.js +8 -6
  28. package/build/core/storage/local/obj-files.d.ts +3 -3
  29. package/build/core/storage/local/obj-files.js +9 -9
  30. package/build/core/storage/local/obj-status.d.ts +9 -25
  31. package/build/core/storage/local/obj-status.js +28 -110
  32. package/build/core/storage/local/storage.d.ts +8 -1
  33. package/build/core/storage/local/storage.js +10 -2
  34. package/build/core/storage/synced/downloader.js +6 -5
  35. package/build/core/storage/synced/obj-files-gc.d.ts +1 -0
  36. package/build/core/storage/synced/obj-files-gc.js +44 -5
  37. package/build/core/storage/synced/obj-files.d.ts +13 -20
  38. package/build/core/storage/synced/obj-files.js +70 -48
  39. package/build/core/storage/synced/obj-status.d.ts +74 -15
  40. package/build/core/storage/synced/obj-status.js +291 -107
  41. package/build/core/storage/synced/remote-events.js +32 -26
  42. package/build/core/storage/synced/storage.d.ts +11 -1
  43. package/build/core/storage/synced/storage.js +28 -3
  44. package/build/core/storage/synced/upsyncer.d.ts +8 -7
  45. package/build/core/storage/synced/upsyncer.js +211 -163
  46. package/build/ipc-via-protobuf/asmail-cap.js +17 -34
  47. package/build/ipc-via-protobuf/connector-clients-side.js +2 -2
  48. package/build/ipc-via-protobuf/file.js +26 -18
  49. package/build/ipc-via-protobuf/fs.js +33 -35
  50. package/build/ipc-via-protobuf/mailerid.js +3 -2
  51. package/build/ipc-via-protobuf/protobuf-msg.d.ts +2 -0
  52. package/build/ipc-via-protobuf/protobuf-msg.js +11 -1
  53. package/build/ipc-via-protobuf/startup-cap.js +5 -5
  54. package/build/lib-client/3nstorage/exceptions.d.ts +9 -8
  55. package/build/lib-client/3nstorage/exceptions.js +18 -9
  56. package/build/lib-client/3nstorage/service.js +10 -6
  57. package/build/lib-client/3nstorage/xsp-fs/common.d.ts +18 -4
  58. package/build/lib-client/3nstorage/xsp-fs/common.js +6 -1
  59. package/build/lib-client/3nstorage/xsp-fs/file-node.js +3 -3
  60. package/build/lib-client/3nstorage/xsp-fs/file.js +4 -1
  61. package/build/lib-client/3nstorage/xsp-fs/folder-node.js +27 -13
  62. package/build/lib-client/3nstorage/xsp-fs/fs.d.ts +11 -6
  63. package/build/lib-client/3nstorage/xsp-fs/fs.js +189 -58
  64. package/build/lib-client/3nstorage/xsp-fs/node-in-fs.d.ts +4 -0
  65. package/build/lib-client/3nstorage/xsp-fs/node-in-fs.js +51 -24
  66. package/build/lib-client/3nstorage/xsp-fs/node-persistence.js +2 -2
  67. package/build/lib-client/3nstorage/xsp-fs/xsp-payload-v1.js +2 -2
  68. package/build/lib-client/3nstorage/xsp-fs/xsp-payload-v2.js +3 -3
  69. package/build/lib-client/cryptor/cryptor-in-worker.js +4 -4
  70. package/build/lib-client/cryptor/cryptor-wasm.js +1 -1
  71. package/build/lib-client/cryptor/cryptor.wasm +0 -0
  72. package/build/lib-client/cryptor/in-proc-wasm.js +2 -2
  73. package/build/lib-client/files.js +2 -0
  74. package/build/lib-client/fs-collection.js +3 -2
  75. package/build/lib-client/logging/log-to-file.js +6 -14
  76. package/build/lib-client/objs-on-disk/file-writing-proc.js +2 -2
  77. package/build/lib-client/objs-on-disk/obj-folders.d.ts +12 -1
  78. package/build/lib-client/objs-on-disk/obj-folders.js +26 -19
  79. package/build/lib-client/request-utils.js +2 -2
  80. package/build/lib-client/server-events.js +4 -3
  81. package/build/lib-client/ws-utils.js +2 -2
  82. package/build/lib-common/async-fs-node.d.ts +6 -0
  83. package/build/lib-common/async-fs-node.js +28 -4
  84. package/build/lib-common/byte-streaming/wrapping.js +17 -17
  85. package/build/lib-common/exceptions/file.js +6 -1
  86. package/build/lib-common/ipc/generic-ipc.js +2 -2
  87. package/build/lib-common/json-utils.js +2 -1
  88. package/build/lib-common/objs-on-disk/obj-file.js +4 -3
  89. package/build/lib-common/objs-on-disk/utils.js +2 -2
  90. package/build/lib-common/processes/deferred.d.ts +6 -0
  91. package/build/lib-common/processes/deferred.js +30 -0
  92. package/build/lib-common/processes/labelled-exec-pools.d.ts +33 -0
  93. package/build/lib-common/processes/labelled-exec-pools.js +141 -0
  94. package/build/lib-common/processes/pressure.d.ts +7 -0
  95. package/build/lib-common/processes/pressure.js +56 -0
  96. package/build/lib-common/processes/sleep.d.ts +1 -0
  97. package/build/lib-common/processes/sleep.js +26 -0
  98. package/build/lib-common/{processes.d.ts → processes/synced.d.ts} +0 -40
  99. package/build/lib-common/{processes.js → processes/synced.js} +187 -204
  100. package/build/lib-common/processes/timeout.d.ts +1 -0
  101. package/build/lib-common/processes/timeout.js +51 -0
  102. package/build/lib-common/service-api/3nstorage/owner.d.ts +5 -4
  103. package/build/lib-common/service-api/3nstorage/owner.js +3 -2
  104. package/build/lib-common/utils-for-observables.d.ts +15 -1
  105. package/build/lib-common/utils-for-observables.js +68 -17
  106. package/build/protos/asmail.proto.js +404 -78
  107. package/build/protos/file.proto.js +370 -44
  108. package/build/protos/fs.proto.js +404 -78
  109. package/package.json +4 -4
  110. package/protos/file.proto +10 -2
  111. package/protos/fs.proto +2 -2
  112. package/build/core/storage/synced/upsync-status.d.ts +0 -41
  113. package/build/core/storage/synced/upsync-status.js +0 -158
@@ -24,6 +24,7 @@ const connector_1 = require("./connector");
24
24
  const rxjs_1 = require("rxjs");
25
25
  const operators_1 = require("rxjs/operators");
26
26
  const fs_1 = require("./fs");
27
+ const utils_for_observables_1 = require("../lib-common/utils-for-observables");
27
28
  function exposeASMailCAP(cap, expServices) {
28
29
  const out = cap.delivery;
29
30
  const box = cap.inbox;
@@ -75,7 +76,7 @@ var getUserId;
75
76
  function wrapService(fn) {
76
77
  return () => {
77
78
  const promise = fn()
78
- .then(userId => Buffer.from(userId, 'utf8'));
79
+ .then(userId => protobuf_msg_1.encodeToUtf8(userId));
79
80
  return { promise };
80
81
  };
81
82
  }
@@ -87,7 +88,7 @@ var getUserId;
87
88
  if (!buf) {
88
89
  throw connector_1.makeIPCException({ missingBodyBytes: true });
89
90
  }
90
- return buf.toString('utf8');
91
+ return protobuf_msg_1.decodeFromUtf8(buf);
91
92
  });
92
93
  }
93
94
  getUserId.makeCaller = makeCaller;
@@ -222,15 +223,9 @@ var inboxSubscribe;
222
223
  return (event, obs) => {
223
224
  const s = new rxjs_1.Subject();
224
225
  const unsub = caller.startObservableCall(path, requestType.pack({ event }), s);
225
- s.subscribe({
226
- next: buf => {
227
- if (obs.next) {
228
- obs.next(unpackIncomingMessage(buf, caller));
229
- }
230
- },
231
- complete: obs.complete,
232
- error: obs.error
233
- });
226
+ s.asObservable()
227
+ .pipe(operators_1.map(buf => unpackIncomingMessage(buf, caller)))
228
+ .subscribe(utils_for_observables_1.toRxObserver(obs));
234
229
  return unsub;
235
230
  };
236
231
  }
@@ -496,19 +491,14 @@ var observeAllDeliveries;
496
491
  return obs => {
497
492
  const s = new rxjs_1.Subject();
498
493
  const unsub = caller.startObservableCall(path, undefined, s);
499
- s.subscribe({
500
- next: buf => {
501
- if (obs.next) {
502
- const { id, progress } = notifType.unpack(buf);
503
- obs.next({
504
- id,
505
- progress: unpackDeliveryProgress(progress)
506
- });
507
- }
508
- },
509
- complete: obs.complete,
510
- error: obs.error
511
- });
494
+ s.asObservable()
495
+ .pipe(operators_1.map(buf => {
496
+ const { id, progress } = notifType.unpack(buf);
497
+ return {
498
+ id, progress: unpackDeliveryProgress(progress)
499
+ };
500
+ }))
501
+ .subscribe(utils_for_observables_1.toRxObserver(obs));
512
502
  return unsub;
513
503
  };
514
504
  }
@@ -533,16 +523,9 @@ var observeDelivery;
533
523
  return (id, obs) => {
534
524
  const s = new rxjs_1.Subject();
535
525
  const unsub = caller.startObservableCall(path, requestType.pack({ id }), s);
536
- s.subscribe({
537
- next: buf => {
538
- if (obs.next) {
539
- const msg = deliveryProgressMsgType.unpack(buf);
540
- obs.next(unpackDeliveryProgress(msg));
541
- }
542
- },
543
- complete: obs.complete,
544
- error: obs.error
545
- });
526
+ s.asObservable()
527
+ .pipe(operators_1.map(buf => unpackDeliveryProgress(deliveryProgressMsgType.unpack(buf))))
528
+ .subscribe(utils_for_observables_1.toRxObserver(obs));
546
529
  return unsub;
547
530
  };
548
531
  }
@@ -18,7 +18,7 @@
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.ClientsSideImpl = void 0;
20
20
  const protobuf_msg_1 = require("./protobuf-msg");
21
- const processes_1 = require("../lib-common/processes");
21
+ const deferred_1 = require("../lib-common/processes/deferred");
22
22
  const weakref_1 = require("../lib-common/weakref");
23
23
  const connector_1 = require("./connector");
24
24
  // XXX can have an optimized use of WeakRef and FinalizationRegistry, when
@@ -151,7 +151,7 @@ class ClientsSideImpl {
151
151
  });
152
152
  }
153
153
  startPromiseCall(path, req) {
154
- const deferred = processes_1.defer();
154
+ const deferred = deferred_1.defer();
155
155
  const fnCallNum = this.nextFnCallNum();
156
156
  this.fnCalls.set(fnCallNum, { deferred });
157
157
  try {
@@ -25,6 +25,7 @@ const error_1 = require("../lib-common/exceptions/error");
25
25
  const bytes_1 = require("./bytes");
26
26
  const rxjs_1 = require("rxjs");
27
27
  const operators_1 = require("rxjs/operators");
28
+ const utils_for_observables_1 = require("../lib-common/utils-for-observables");
28
29
  function makeFileCaller(caller, fileMsg) {
29
30
  connector_1.checkRefObjTypeIs('FileImpl', fileMsg.impl);
30
31
  const objPath = fileMsg.impl.path;
@@ -131,7 +132,14 @@ function packStats(s) {
131
132
  ctime: (s.ctime ? protobuf_msg_1.toVal(s.ctime.valueOf()) : undefined),
132
133
  mtime: (s.mtime ? protobuf_msg_1.toVal(s.mtime.valueOf()) : undefined),
133
134
  size: protobuf_msg_1.toOptVal(s.size),
134
- version: protobuf_msg_1.toOptVal(s.version)
135
+ version: protobuf_msg_1.toOptVal(s.version),
136
+ sync: (s.sync ? {
137
+ state: s.sync.state,
138
+ conflictingRemote: s.sync.conflictingRemote,
139
+ deletedOnRemote: protobuf_msg_1.toOptVal(s.sync.deletedOnRemote),
140
+ latest: protobuf_msg_1.toOptVal(s.sync.latest),
141
+ remote: protobuf_msg_1.toOptVal(s.sync.remote)
142
+ } : undefined)
135
143
  };
136
144
  return statsMsgType.pack(msg);
137
145
  }
@@ -147,6 +155,14 @@ function unpackStats(buf) {
147
155
  version: protobuf_msg_1.valOfOptInt(m.version),
148
156
  ctime: (m.ctime ? new Date(protobuf_msg_1.valOfOptInt(m.ctime)) : undefined),
149
157
  mtime: (m.mtime ? new Date(protobuf_msg_1.valOfOptInt(m.mtime)) : undefined),
158
+ sync: (m.sync ? {
159
+ state: m.sync.state,
160
+ conflictingRemote: ((m.sync.conflictingRemote.length > 0) ?
161
+ m.sync.conflictingRemote.map(protobuf_msg_1.fixInt) : undefined),
162
+ deletedOnRemote: !!protobuf_msg_1.valOfOpt(m.sync.deletedOnRemote) || undefined,
163
+ latest: protobuf_msg_1.valOfOptInt(m.sync.latest),
164
+ remote: protobuf_msg_1.valOfOptInt(m.sync.remote)
165
+ } : undefined),
150
166
  };
151
167
  }
152
168
  exports.unpackStats = unpackStats;
@@ -276,7 +292,7 @@ var readTxt;
276
292
  function wrapService(fn) {
277
293
  return () => {
278
294
  const promise = fn()
279
- .then(txt => Buffer.from(txt, 'utf8'));
295
+ .then(txt => protobuf_msg_1.encodeToUtf8(txt));
280
296
  return { promise };
281
297
  };
282
298
  }
@@ -285,13 +301,13 @@ var readTxt;
285
301
  const path = objPath.concat('readTxt');
286
302
  return () => caller
287
303
  .startPromiseCall(path, undefined)
288
- .then(buf => (buf ? buf.toString('utf8') : ''));
304
+ .then(buf => (buf ? protobuf_msg_1.decodeFromUtf8(buf) : ''));
289
305
  }
290
306
  readTxt.makeCaller = makeCaller;
291
307
  })(readTxt || (readTxt = {}));
292
308
  Object.freeze(readTxt);
293
309
  function packJSON(json) {
294
- return Buffer.from(JSON.stringify(json), 'utf8');
310
+ return protobuf_msg_1.encodeToUtf8(JSON.stringify(json));
295
311
  }
296
312
  exports.packJSON = packJSON;
297
313
  function unpackJSON(buf) {
@@ -299,7 +315,7 @@ function unpackJSON(buf) {
299
315
  throw connector_1.makeIPCException({ missingBodyBytes: true });
300
316
  }
301
317
  try {
302
- return JSON.parse(buf.toString('utf8'));
318
+ return JSON.parse(protobuf_msg_1.decodeFromUtf8(buf));
303
319
  }
304
320
  catch (err) {
305
321
  throw error_1.errWithCause(err, `Can't parse ipc reply as json`);
@@ -358,8 +374,7 @@ function packFileEvent(e) {
358
374
  isRemote: protobuf_msg_1.toOptVal(e.isRemote),
359
375
  newVersion: protobuf_msg_1.toOptVal(e.newVersion),
360
376
  current: protobuf_msg_1.toOptVal(e.current),
361
- lastSynced: protobuf_msg_1.toOptVal(e.lastSynced),
362
- remoteVersion: protobuf_msg_1.toOptVal(e.remoteVersion)
377
+ uploaded: protobuf_msg_1.toOptVal(e.uploaded)
363
378
  };
364
379
  return fileEventType.pack(msg);
365
380
  }
@@ -372,8 +387,7 @@ function unpackFileEvent(buf) {
372
387
  isRemote: protobuf_msg_1.valOfOpt(m.isRemote),
373
388
  newVersion: protobuf_msg_1.valOfOptInt(m.newVersion),
374
389
  current: protobuf_msg_1.valOfOptInt(m.current),
375
- lastSynced: protobuf_msg_1.valOfOptInt(m.lastSynced),
376
- remoteVersion: protobuf_msg_1.valOfOptInt(m.remoteVersion)
390
+ uploaded: protobuf_msg_1.valOfOptInt(m.uploaded),
377
391
  };
378
392
  }
379
393
  exports.unpackFileEvent = unpackFileEvent;
@@ -393,15 +407,9 @@ var watch;
393
407
  return obs => {
394
408
  const s = new rxjs_1.Subject();
395
409
  const unsub = caller.startObservableCall(path, undefined, s);
396
- s.subscribe({
397
- next: buf => {
398
- if (obs.next) {
399
- obs.next(unpackFileEvent(buf));
400
- }
401
- },
402
- complete: obs.complete,
403
- error: obs.error
404
- });
410
+ s.asObservable()
411
+ .pipe(operators_1.map(unpackFileEvent))
412
+ .subscribe(utils_for_observables_1.toRxObserver(obs));
405
413
  return unsub;
406
414
  };
407
415
  }
@@ -26,8 +26,9 @@ const file = require("./file");
26
26
  const assert_1 = require("../lib-common/assert");
27
27
  const bytes_1 = require("./bytes");
28
28
  const rxjs_1 = require("rxjs");
29
- const processes_1 = require("../lib-common/processes");
29
+ const deferred_1 = require("../lib-common/processes/deferred");
30
30
  const operators_1 = require("rxjs/operators");
31
+ const utils_for_observables_1 = require("../lib-common/utils-for-observables");
31
32
  function makeFSCaller(caller, fsMsg) {
32
33
  connector_1.checkRefObjTypeIs('FSImpl', fsMsg.impl);
33
34
  const objPath = fsMsg.impl.path;
@@ -356,10 +357,10 @@ function packFSEvent(e) {
356
357
  oldName: protobuf_msg_1.toOptVal(e.oldName),
357
358
  newName: protobuf_msg_1.toOptVal(e.newName),
358
359
  entry: (e.entry ?
359
- protobuf_msg_1.toVal(lsEntryToMsg(e.entry)) : undefined),
360
+ lsEntryToMsg(e.entry) : undefined),
360
361
  current: protobuf_msg_1.toOptVal(e.current),
361
- lastSynced: protobuf_msg_1.toOptVal(e.lastSynced),
362
- remoteVersion: protobuf_msg_1.toOptVal(e.remoteVersion)
362
+ uploaded: protobuf_msg_1.toOptVal(e.uploaded),
363
+ moveLabel: protobuf_msg_1.toOptVal(e.moveLabel)
363
364
  };
364
365
  return fsEventMsgType.pack(m);
365
366
  }
@@ -373,10 +374,10 @@ function unpackFSEvent(buf) {
373
374
  name: protobuf_msg_1.valOfOpt(m.name),
374
375
  oldName: protobuf_msg_1.valOfOpt(m.oldName),
375
376
  newName: protobuf_msg_1.valOfOpt(m.newName),
376
- entry: (m.entry ? lsEntryFromMsg(m.entry.value) : undefined),
377
+ entry: (m.entry ? lsEntryFromMsg(m.entry) : undefined),
377
378
  current: protobuf_msg_1.valOfOptInt(m.current),
378
- lastSynced: protobuf_msg_1.valOfOptInt(m.lastSynced),
379
- remoteVersion: protobuf_msg_1.valOfOptInt(m.remoteVersion)
379
+ uploaded: protobuf_msg_1.valOfOptInt(m.uploaded),
380
+ moveLabel: protobuf_msg_1.valOfOptInt(m.moveLabel)
380
381
  };
381
382
  return event;
382
383
  }
@@ -389,12 +390,21 @@ function lsEntryToMsg(e) {
389
390
  };
390
391
  }
391
392
  function lsEntryFromMsg(m) {
392
- return {
393
- name: m.name,
394
- isFile: protobuf_msg_1.valOfOpt(m.isFile),
395
- isFolder: protobuf_msg_1.valOfOpt(m.isFolder),
396
- isLink: protobuf_msg_1.valOfOpt(m.isLink)
397
- };
393
+ const name = m.name;
394
+ if (protobuf_msg_1.valOfOpt(m.isFile)) {
395
+ return { name, isFile: true };
396
+ }
397
+ else if (protobuf_msg_1.valOfOpt(m.isFolder)) {
398
+ return { name, isFolder: true };
399
+ }
400
+ else if (protobuf_msg_1.valOfOpt(m.isLink)) {
401
+ return { name, isLink: true };
402
+ }
403
+ else {
404
+ throw connector_1.makeIPCException({
405
+ badReply: true, message: `Missing fs entry type flag`
406
+ });
407
+ }
398
408
  }
399
409
  var watch;
400
410
  (function (watch) {
@@ -412,15 +422,9 @@ var watch;
412
422
  return (path, obs) => {
413
423
  const s = new rxjs_1.Subject();
414
424
  const unsub = caller.startObservableCall(ipcPath, reqWithPathType.pack({ path }), s);
415
- s.subscribe({
416
- next: buf => {
417
- if (obs.next) {
418
- obs.next(unpackEvent(buf));
419
- }
420
- },
421
- complete: obs.complete,
422
- error: obs.error
423
- });
425
+ s.asObservable()
426
+ .pipe(operators_1.map(unpackEvent))
427
+ .subscribe(utils_for_observables_1.toRxObserver(obs));
424
428
  return unsub;
425
429
  };
426
430
  }
@@ -531,7 +535,7 @@ var readTxtFile;
531
535
  return buf => {
532
536
  const { path } = reqWithPathType.unpack(buf);
533
537
  const promise = fn(path)
534
- .then(txt => Buffer.from(txt, 'utf8'));
538
+ .then(txt => protobuf_msg_1.encodeToUtf8(txt));
535
539
  return { promise };
536
540
  };
537
541
  }
@@ -540,7 +544,7 @@ var readTxtFile;
540
544
  const ipcPath = objPath.concat('readTxtFile');
541
545
  return path => caller
542
546
  .startPromiseCall(ipcPath, reqWithPathType.pack({ path }))
543
- .then(buf => (buf ? buf.toString('utf8') : ''));
547
+ .then(buf => (buf ? protobuf_msg_1.decodeFromUtf8(buf) : ''));
544
548
  }
545
549
  readTxtFile.makeCaller = makeCaller;
546
550
  })(readTxtFile || (readTxtFile = {}));
@@ -687,14 +691,14 @@ var select;
687
691
  const req = { path, criteria: criteriaToMsg(criteria) };
688
692
  const s = new rxjs_1.Subject();
689
693
  caller.startObservableCall(ipcPath, requestType.pack(req), s);
690
- const reply = processes_1.defer();
694
+ const reply = deferred_1.defer();
691
695
  let completion = undefined;
692
696
  s.subscribe({
693
697
  next: buf => {
694
698
  const ref = protobuf_msg_1.objRefType.unpack(buf);
695
699
  const collection = fsCollection.makeCollectionCaller(ref, caller);
696
700
  reply.resolve(collection);
697
- completion = processes_1.defer();
701
+ completion = deferred_1.defer();
698
702
  },
699
703
  complete: () => {
700
704
  if (completion) {
@@ -927,15 +931,9 @@ var fsCollection;
927
931
  return obs => {
928
932
  const s = new rxjs_1.Subject();
929
933
  const unsub = caller.startObservableCall(path, undefined, s);
930
- s.subscribe({
931
- next: buf => {
932
- if (obs.next) {
933
- obs.next(unpackEvent(buf, caller));
934
- }
935
- },
936
- complete: obs.complete,
937
- error: obs.error
938
- });
934
+ s.asObservable()
935
+ .pipe(operators_1.map(buf => unpackEvent(buf, caller)))
936
+ .subscribe(utils_for_observables_1.toRxObserver(obs));
939
937
  return unsub;
940
938
  };
941
939
  }
@@ -20,6 +20,7 @@ exports.makeMailerIdCaller = exports.exposeMailerIdCAP = void 0;
20
20
  const connector_1 = require("./connector");
21
21
  const protobuf_type_1 = require("../lib-client/protobuf-type");
22
22
  const mailerid_proto_1 = require("../protos/mailerid.proto");
23
+ const protobuf_msg_1 = require("./protobuf-msg");
23
24
  function exposeMailerIdCAP(cap) {
24
25
  return {
25
26
  getUserId: getUserId.wrapService(cap.getUserId),
@@ -39,7 +40,7 @@ var getUserId;
39
40
  function wrapService(fn) {
40
41
  return () => {
41
42
  const promise = fn()
42
- .then(userId => Buffer.from(userId, 'utf8'));
43
+ .then(userId => protobuf_msg_1.encodeToUtf8(userId));
43
44
  return { promise };
44
45
  };
45
46
  }
@@ -51,7 +52,7 @@ var getUserId;
51
52
  if (!buf) {
52
53
  throw connector_1.makeIPCException({ missingBodyBytes: true });
53
54
  }
54
- return buf.toString('utf8');
55
+ return protobuf_msg_1.decodeFromUtf8(buf);
55
56
  });
56
57
  }
57
58
  getUserId.makeCaller = makeCaller;
@@ -42,4 +42,6 @@ export interface AnyValue {
42
42
  }
43
43
  export declare function toOptAny(value: any | undefined): AnyValue | undefined;
44
44
  export declare function valOfOptAny(valObj: AnyValue | undefined): any | undefined;
45
+ export declare function encodeToUtf8(str: string): Uint8Array;
46
+ export declare function decodeFromUtf8(bytes: Uint8Array): string;
45
47
  export {};
@@ -16,7 +16,7 @@
16
16
  this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
- exports.valOfOptAny = exports.toOptAny = exports.toOptJson = exports.valOfOptJson = exports.valOfOpt = exports.valOf = exports.toOptVal = exports.toVal = exports.errFromMsg = exports.errToMsg = exports.errBodyType = exports.unpackInt = exports.packInt = exports.valOfOptInt = exports.fixInt = exports.fixArray = exports.strArrValType = exports.boolValType = exports.objRefType = void 0;
19
+ exports.decodeFromUtf8 = exports.encodeToUtf8 = exports.valOfOptAny = exports.toOptAny = exports.toOptJson = exports.valOfOptJson = exports.valOfOpt = exports.valOf = exports.toOptVal = exports.toVal = exports.errFromMsg = exports.errToMsg = exports.errBodyType = exports.unpackInt = exports.packInt = exports.valOfOptInt = exports.fixInt = exports.fixArray = exports.strArrValType = exports.boolValType = exports.objRefType = void 0;
20
20
  const connector_1 = require("./connector");
21
21
  const error_1 = require("../lib-common/exceptions/error");
22
22
  const buffer_utils_1 = require("../lib-common/buffer-utils");
@@ -152,4 +152,14 @@ function valOfOptAny(valObj) {
152
152
  }
153
153
  }
154
154
  exports.valOfOptAny = valOfOptAny;
155
+ function encodeToUtf8(str) {
156
+ const enc = new TextEncoder();
157
+ return enc.encode(str);
158
+ }
159
+ exports.encodeToUtf8 = encodeToUtf8;
160
+ function decodeFromUtf8(bytes) {
161
+ const dec = new TextDecoder();
162
+ return dec.decode(bytes);
163
+ }
164
+ exports.decodeFromUtf8 = decodeFromUtf8;
155
165
  Object.freeze(exports);
@@ -20,7 +20,7 @@ exports.makeSignUpCaller = exports.wrapSignUpCAP = exports.makeSignInCaller = ex
20
20
  const protobuf_msg_1 = require("./protobuf-msg");
21
21
  const rxjs_1 = require("rxjs");
22
22
  const operators_1 = require("rxjs/operators");
23
- const processes_1 = require("../lib-common/processes");
23
+ const deferred_1 = require("../lib-common/processes/deferred");
24
24
  const protobuf_type_1 = require("../lib-client/protobuf-type");
25
25
  const startup_proto_1 = require("../protos/startup.proto");
26
26
  function wrapSignInCAP(cap) {
@@ -140,7 +140,7 @@ var createUserParams;
140
140
  const path = objPath.concat('createUserParams');
141
141
  return (pass, progressCB) => {
142
142
  const s = new rxjs_1.Subject();
143
- const completion = processes_1.defer();
143
+ const completion = deferred_1.defer();
144
144
  s.subscribe({
145
145
  next: buf => {
146
146
  const { p } = progressValueType.unpack(buf);
@@ -217,8 +217,8 @@ var completeLoginAndLocalSetup;
217
217
  const path = objPath.concat('completeLoginAndLocalSetup');
218
218
  return (pass, progressCB) => {
219
219
  const s = new rxjs_1.Subject();
220
- const completion = processes_1.defer();
221
- s.asObservable().subscribe({
220
+ const completion = deferred_1.defer();
221
+ s.subscribe({
222
222
  next: buf => {
223
223
  const { decrResult, p } = progressValueType.unpack(buf);
224
224
  if (typeof protobuf_msg_1.valOfOpt(decrResult) === 'boolean') {
@@ -259,7 +259,7 @@ var useExistingStorage;
259
259
  const path = objPath.concat('useExistingStorage');
260
260
  return (address, pass, progressCB) => {
261
261
  const s = new rxjs_1.Subject();
262
- const completion = processes_1.defer();
262
+ const completion = deferred_1.defer();
263
263
  s.subscribe({
264
264
  next: buf => {
265
265
  const { decrResult, p } = progressValueType.unpack(buf);
@@ -1,19 +1,20 @@
1
1
  import { ObjId } from "./xsp-fs/common";
2
2
  export interface StorageException extends web3n.RuntimeException {
3
3
  type: 'storage';
4
+ remoteStorage?: true;
4
5
  objId?: ObjId;
5
6
  version?: number;
6
- objNotFound?: boolean;
7
- objExists?: boolean;
8
- concurrentTransaction?: boolean;
9
- unknownTransaction?: boolean;
10
- versionMismatch?: boolean;
7
+ objNotFound?: true;
8
+ objExists?: true;
9
+ concurrentTransaction?: true;
10
+ unknownTransaction?: true;
11
+ versionMismatch?: true;
11
12
  currentVersion?: number;
12
- storageIsClosed?: boolean;
13
+ storageIsClosed?: true;
13
14
  }
14
15
  export declare function makeStorageException(fields: Partial<StorageException>): StorageException;
15
- export declare function makeObjNotFoundExc(objId: ObjId, version?: number): StorageException;
16
- export declare function makeObjExistsExc(objId: ObjId, version?: number): StorageException;
16
+ export declare function makeObjNotFoundExc(objId: ObjId, version?: number, remoteStorage?: true): StorageException;
17
+ export declare function makeObjExistsExc(objId: ObjId, version?: number, remoteStorage?: true): StorageException;
17
18
  export declare function makeConcurrentTransExc(objId: ObjId): StorageException;
18
19
  export declare function makeUnknownTransactionExc(objId: ObjId): StorageException;
19
20
  export declare function makeVersionMismatchExc(objId: ObjId, currentVersion: number): StorageException;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2016, 2019 3NSoft Inc.
3
+ Copyright (C) 2015 - 2016, 2019, 2022 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
@@ -13,7 +13,8 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.makeStorageIsClosedExc = exports.makeVersionMismatchExc = exports.makeUnknownTransactionExc = exports.makeConcurrentTransExc = exports.makeObjExistsExc = exports.makeObjNotFoundExc = exports.makeStorageException = void 0;
19
20
  function makeStorageException(fields) {
@@ -27,25 +28,33 @@ function makeStorageException(fields) {
27
28
  return exc;
28
29
  }
29
30
  exports.makeStorageException = makeStorageException;
30
- function makeObjNotFoundExc(objId, version) {
31
- return makeStorageException({ objId, version, objNotFound: true });
31
+ function makeObjNotFoundExc(objId, version, remoteStorage) {
32
+ return makeStorageException({
33
+ objId, version, objNotFound: true, remoteStorage
34
+ });
32
35
  }
33
36
  exports.makeObjNotFoundExc = makeObjNotFoundExc;
34
- function makeObjExistsExc(objId, version) {
35
- return makeStorageException({ objId, version, objExists: true });
37
+ function makeObjExistsExc(objId, version, remoteStorage) {
38
+ return makeStorageException({
39
+ objId, version, objExists: true, remoteStorage
40
+ });
36
41
  }
37
42
  exports.makeObjExistsExc = makeObjExistsExc;
38
43
  function makeConcurrentTransExc(objId) {
39
- return makeStorageException({ objId, concurrentTransaction: true });
44
+ return makeStorageException({
45
+ objId, concurrentTransaction: true, remoteStorage: true
46
+ });
40
47
  }
41
48
  exports.makeConcurrentTransExc = makeConcurrentTransExc;
42
49
  function makeUnknownTransactionExc(objId) {
43
- return makeStorageException({ objId, unknownTransaction: true });
50
+ return makeStorageException({
51
+ objId, unknownTransaction: true, remoteStorage: true
52
+ });
44
53
  }
45
54
  exports.makeUnknownTransactionExc = makeUnknownTransactionExc;
46
55
  function makeVersionMismatchExc(objId, currentVersion) {
47
56
  return makeStorageException({
48
- objId, versionMismatch: true, currentVersion
57
+ objId, versionMismatch: true, currentVersion, remoteStorage: true
49
58
  });
50
59
  }
51
60
  exports.makeVersionMismatchExc = makeVersionMismatchExc;
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2015 - 2017, 2020 3NSoft Inc.
3
+ Copyright (C) 2015 - 2017, 2020, 2022 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
@@ -13,7 +13,8 @@
13
13
  See the GNU General Public License for more details.
14
14
 
15
15
  You should have received a copy of the GNU General Public License along with
16
- this program. If not, see <http://www.gnu.org/licenses/>. */
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
17
18
  Object.defineProperty(exports, "__esModule", { value: true });
18
19
  exports.StorageOwner = void 0;
19
20
  /**
@@ -142,7 +143,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
142
143
  };
143
144
  }
144
145
  else if (rep.status === api.currentObj.SC.unknownObj) {
145
- throw exceptions_1.makeObjNotFoundExc(objId);
146
+ throw exceptions_1.makeObjNotFoundExc(objId, undefined, true);
146
147
  }
147
148
  else {
148
149
  throw request_utils_1.makeException(rep, 'Unexpected status');
@@ -177,7 +178,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
177
178
  return rep.data;
178
179
  }
179
180
  else if (rep.status === api.currentObj.SC.unknownObj) {
180
- throw exceptions_1.makeObjNotFoundExc(objId);
181
+ throw exceptions_1.makeObjNotFoundExc(objId, undefined, true);
181
182
  }
182
183
  else {
183
184
  throw request_utils_1.makeException(rep, 'Unexpected status');
@@ -212,8 +213,11 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
212
213
  if (rep.status === api.currentObj.SC.okPut) {
213
214
  return rep.data.transactionId;
214
215
  }
216
+ else if (rep.status === api.currentObj.SC.objAlreadyExists) {
217
+ throw exceptions_1.makeObjExistsExc(objId, undefined, true);
218
+ }
215
219
  else if (rep.status === api.currentObj.SC.unknownObj) {
216
- throw exceptions_1.makeObjNotFoundExc(objId);
220
+ throw exceptions_1.makeObjNotFoundExc(objId, undefined, true);
217
221
  }
218
222
  else if (rep.status === api.currentObj.SC.concurrentTransaction) {
219
223
  throw exceptions_1.makeConcurrentTransExc(objId);
@@ -251,7 +255,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
251
255
  throw exceptions_1.makeConcurrentTransExc(objId);
252
256
  }
253
257
  else if (rep.status === api.currentObj.SC.unknownObj) {
254
- throw exceptions_1.makeObjNotFoundExc(objId);
258
+ throw exceptions_1.makeObjNotFoundExc(objId, undefined, true);
255
259
  }
256
260
  else {
257
261
  throw request_utils_1.makeException(rep, 'Unexpected status');