core-3nweb-client-lib 0.43.20 → 0.44.1

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 (42) hide show
  1. package/build/api-defs/files.d.ts +233 -160
  2. package/build/core/index.d.ts +1 -0
  3. package/build/core/index.js +3 -2
  4. package/build/core/storage/index.d.ts +1 -0
  5. package/build/core/storage/index.js +4 -1
  6. package/build/core/storage/synced/storage.d.ts +1 -0
  7. package/build/core/storage/synced/storage.js +4 -1
  8. package/build/core-ipc/file.d.ts +47 -0
  9. package/build/core-ipc/file.js +121 -2
  10. package/build/core-ipc/fs.js +55 -62
  11. package/build/lib-client/asmail/recipient.js +4 -2
  12. package/build/lib-client/cryptor/cryptor-wasm.js +1 -1
  13. package/build/lib-client/cryptor/cryptor.wasm +0 -0
  14. package/build/lib-client/fs-utils/files.js +5 -1
  15. package/build/lib-client/ws-utils.js +2 -7
  16. package/build/lib-client/xsp-fs/common.d.ts +2 -0
  17. package/build/lib-client/xsp-fs/common.js +2 -1
  18. package/build/lib-client/xsp-fs/exceptions.js +1 -1
  19. package/build/lib-client/xsp-fs/file-node.d.ts +3 -0
  20. package/build/lib-client/xsp-fs/file-node.js +55 -3
  21. package/build/lib-client/xsp-fs/file.d.ts +3 -0
  22. package/build/lib-client/xsp-fs/file.js +5 -1
  23. package/build/lib-client/xsp-fs/folder-node.d.ts +5 -4
  24. package/build/lib-client/xsp-fs/folder-node.js +257 -368
  25. package/build/lib-client/xsp-fs/fs.d.ts +6 -2
  26. package/build/lib-client/xsp-fs/fs.js +33 -2
  27. package/build/lib-client/xsp-fs/link-node.js +1 -1
  28. package/build/lib-client/xsp-fs/node-in-fs.d.ts +21 -0
  29. package/build/lib-client/xsp-fs/node-in-fs.js +172 -3
  30. package/build/lib-common/exceptions/file.d.ts +1 -1
  31. package/build/lib-common/exceptions/file.js +3 -2
  32. package/build/lib-common/ipc/generic-ipc.js +33 -28
  33. package/build/lib-common/ipc/ws-ipc.d.ts +2 -0
  34. package/build/lib-common/ipc/ws-ipc.js +35 -8
  35. package/build/lib-common/map-of-sets.d.ts +1 -0
  36. package/build/lib-common/map-of-sets.js +3 -0
  37. package/build/protos/asmail.proto.js +3315 -883
  38. package/build/protos/file.proto.js +1974 -0
  39. package/build/protos/fs.proto.js +3301 -869
  40. package/package.json +1 -1
  41. package/protos/file.proto +44 -0
  42. package/protos/fs.proto +42 -27
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2020, 2022, 2025 3NSoft Inc.
3
+ Copyright (C) 2020, 2022, 2025 - 2026 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
@@ -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.vListVersions = exports.vsUpload = exports.vsStartUpload = exports.vsStartDownload = exports.vGetByteSink = exports.updateXAttrs = exports.vGetByteSource = exports.vReadJSON = exports.vReadTxt = exports.vReadBytes = exports.vListXAttrs = exports.vGetXAttr = exports.vStat = exports.readBytes = exports.fileMsgType = void 0;
19
+ exports.vsDiffCurrentAndRemoteVersions = exports.vListVersions = exports.vsUpload = exports.vsStartUpload = exports.vsStartDownload = exports.vGetByteSink = exports.updateXAttrs = exports.vGetByteSource = exports.vReadJSON = exports.vReadTxt = exports.vReadBytes = exports.vListXAttrs = exports.vGetXAttr = exports.vStat = exports.readBytes = exports.fileMsgType = void 0;
20
20
  exports.makeFileCaller = makeFileCaller;
21
21
  exports.exposeFileService = exposeFileService;
22
22
  exports.packStats = packStats;
@@ -37,6 +37,10 @@ exports.optionsToUploadLocalToMsg = optionsToUploadLocalToMsg;
37
37
  exports.optionsToUploadLocalFromMsg = optionsToUploadLocalFromMsg;
38
38
  exports.remoteAdoptionOptsToMsg = remoteAdoptionOptsToMsg;
39
39
  exports.remoteAdoptionOptsFromMsg = remoteAdoptionOptsFromMsg;
40
+ exports.commonDiffToMsg = commonDiffToMsg;
41
+ exports.commonDiffFromMsg = commonDiffFromMsg;
42
+ exports.fileDiffToMsg = fileDiffToMsg;
43
+ exports.fileDiffFromMsg = fileDiffFromMsg;
40
44
  const protobuf_msg_1 = require("../ipc-via-protobuf/protobuf-msg");
41
45
  const protobuf_type_1 = require("../lib-client/protobuf-type");
42
46
  const file_proto_1 = require("../protos/file.proto");
@@ -100,6 +104,7 @@ function makeFileCaller(caller, fileMsg) {
100
104
  isRemoteVersionOnDisk: vsIsRemoteVersionOnDisk.makeCaller(caller, vsPath),
101
105
  startDownload: vsStartDownload.makeCaller(caller, vsPath),
102
106
  adoptRemote: vsAdoptRemote.makeCaller(caller, vsPath),
107
+ diffCurrentAndRemoteVersions: vsDiffCurrentAndRemoteVersions.makeCaller(caller, vsPath)
103
108
  };
104
109
  if (file.writable) {
105
110
  file.v.sync.startUpload = vsStartUpload.makeCaller(caller, vsPath);
@@ -155,6 +160,7 @@ function exposeFileService(file, expServices) {
155
160
  isRemoteVersionOnDisk: vsIsRemoteVersionOnDisk.wrapService(file.v.sync.isRemoteVersionOnDisk),
156
161
  startDownload: vsStartDownload.wrapService(file.v.sync.startDownload),
157
162
  adoptRemote: vsAdoptRemote.wrapService(file.v.sync.adoptRemote),
163
+ diffCurrentAndRemoteVersions: vsDiffCurrentAndRemoteVersions.wrapService(file.v.sync.diffCurrentAndRemoteVersions),
158
164
  };
159
165
  if (file.writable) {
160
166
  implExp.v.sync.startedUpload = vsStartUpload.wrapService(file.v.sync.startUpload);
@@ -1320,4 +1326,117 @@ var vArchiveCurrent;
1320
1326
  vArchiveCurrent.makeCaller = makeCaller;
1321
1327
  })(vArchiveCurrent || (vArchiveCurrent = {}));
1322
1328
  Object.freeze(vArchiveCurrent);
1329
+ function diffTStoMsg(diffTS) {
1330
+ return (diffTS ? {
1331
+ current: diffTS.current.valueOf(),
1332
+ remote: diffTS.remote.valueOf(),
1333
+ synced: diffTS.synced.valueOf(),
1334
+ } : undefined);
1335
+ }
1336
+ function diffTSfromMsg(msg) {
1337
+ return (msg ? {
1338
+ current: new Date((0, protobuf_msg_1.fixInt)(msg.current)),
1339
+ remote: new Date((0, protobuf_msg_1.fixInt)(msg.remote)),
1340
+ synced: new Date((0, protobuf_msg_1.fixInt)(msg.synced)),
1341
+ } : undefined);
1342
+ }
1343
+ function commonDiffToMsg(diff) {
1344
+ return {
1345
+ remoteVersion: (0, protobuf_msg_1.toOptVal)(diff.remoteVersion),
1346
+ currentVersion: diff.currentVersion,
1347
+ syncedVersion: (0, protobuf_msg_1.toOptVal)(diff.syncedVersion),
1348
+ isCurrentLocal: diff.isCurrentLocal,
1349
+ isRemoteRemoved: diff.isRemoteRemoved,
1350
+ ctime: diffTStoMsg((diff.ctime)),
1351
+ mtime: diffTStoMsg(diff.mtime),
1352
+ xattrs: (diff.xattrs ? Object.entries(diff.xattrs).map(([name, { addedIn, changedIn, removedIn }]) => ({
1353
+ name,
1354
+ addedIn: (0, protobuf_msg_1.toOptVal)(addedIn),
1355
+ changedIn: (0, protobuf_msg_1.toOptVal)(changedIn),
1356
+ removedIn: (0, protobuf_msg_1.toOptVal)(removedIn)
1357
+ })) : undefined)
1358
+ };
1359
+ }
1360
+ function commonDiffFromMsg(msg) {
1361
+ let xattrs = undefined;
1362
+ if (msg.xattrs && (msg.xattrs.length > 0)) {
1363
+ xattrs = {};
1364
+ for (const { name, addedIn, changedIn, removedIn } of msg.xattrs) {
1365
+ xattrs[name] = {
1366
+ addedIn: (0, protobuf_msg_1.valOfOpt)(addedIn),
1367
+ changedIn: (0, protobuf_msg_1.valOfOpt)(changedIn),
1368
+ removedIn: (0, protobuf_msg_1.valOfOpt)(removedIn),
1369
+ };
1370
+ }
1371
+ }
1372
+ return {
1373
+ remoteVersion: (0, protobuf_msg_1.valOfOptInt)(msg.remoteVersion),
1374
+ currentVersion: (0, protobuf_msg_1.fixInt)(msg.currentVersion),
1375
+ syncedVersion: (0, protobuf_msg_1.valOfOptInt)(msg.syncedVersion),
1376
+ isCurrentLocal: msg.isCurrentLocal,
1377
+ isRemoteRemoved: msg.isRemoteRemoved,
1378
+ ctime: diffTSfromMsg(msg.ctime),
1379
+ mtime: diffTSfromMsg(msg.mtime),
1380
+ xattrs
1381
+ };
1382
+ }
1383
+ function fileDiffToMsg(diff) {
1384
+ if (!diff) {
1385
+ return;
1386
+ }
1387
+ return {
1388
+ ...commonDiffToMsg(diff),
1389
+ areContentsSame: diff.areContentsSame,
1390
+ size: diff.size
1391
+ };
1392
+ }
1393
+ function fileDiffFromMsg(msg) {
1394
+ if (!msg) {
1395
+ return;
1396
+ }
1397
+ return {
1398
+ ...commonDiffFromMsg(msg),
1399
+ areContentsSame: msg.areContentsSame,
1400
+ size: (msg.size ? {
1401
+ current: (0, protobuf_msg_1.fixInt)(msg.size.current),
1402
+ remote: (0, protobuf_msg_1.fixInt)(msg.size.remote)
1403
+ } : undefined)
1404
+ };
1405
+ }
1406
+ var vsDiffCurrentAndRemoteVersions;
1407
+ (function (vsDiffCurrentAndRemoteVersions) {
1408
+ function optsFromMsg(opts) {
1409
+ return (opts ? {
1410
+ remoteVersion: (0, protobuf_msg_1.valOfOptInt)(opts.remoteVersion),
1411
+ compareContentIfSameMTime: (0, protobuf_msg_1.valOfOpt)(opts.compareContentIfSameMTime)
1412
+ } : undefined);
1413
+ }
1414
+ vsDiffCurrentAndRemoteVersions.optsFromMsg = optsFromMsg;
1415
+ function optsToMsg(opts) {
1416
+ return (opts ? {
1417
+ remoteVersion: (0, protobuf_msg_1.toOptVal)(opts.remoteVersion),
1418
+ compareContentIfSameMTime: (0, protobuf_msg_1.toOptVal)(opts.compareContentIfSameMTime)
1419
+ } : undefined);
1420
+ }
1421
+ vsDiffCurrentAndRemoteVersions.optsToMsg = optsToMsg;
1422
+ const requestType = protobuf_type_1.ProtoType.for(file_proto_1.file.DiffCurrentAndRemoteRequestBody);
1423
+ vsDiffCurrentAndRemoteVersions.replyType = protobuf_type_1.ProtoType.for(file_proto_1.file.DiffCurrentAndRemoteReplyBody);
1424
+ function wrapService(fn) {
1425
+ return buf => {
1426
+ const { opts } = requestType.unpack(buf);
1427
+ const promise = fn(optsFromMsg(opts))
1428
+ .then(diff => vsDiffCurrentAndRemoteVersions.replyType.pack({ diff: fileDiffToMsg(diff) }));
1429
+ return { promise };
1430
+ };
1431
+ }
1432
+ vsDiffCurrentAndRemoteVersions.wrapService = wrapService;
1433
+ function makeCaller(caller, objPath) {
1434
+ const ipcPath = (0, protobuf_msg_1.methodPathFor)(objPath, 'diffCurrentAndRemoteVersions');
1435
+ return opts => caller
1436
+ .startPromiseCall(ipcPath, requestType.pack({ opts: optsToMsg(opts) }))
1437
+ .then(buf => fileDiffFromMsg(vsDiffCurrentAndRemoteVersions.replyType.unpack(buf).diff));
1438
+ }
1439
+ vsDiffCurrentAndRemoteVersions.makeCaller = makeCaller;
1440
+ })(vsDiffCurrentAndRemoteVersions || (exports.vsDiffCurrentAndRemoteVersions = vsDiffCurrentAndRemoteVersions = {}));
1441
+ Object.freeze(vsDiffCurrentAndRemoteVersions);
1323
1442
  Object.freeze(exports);
@@ -106,6 +106,7 @@ function makeFSCaller(caller, fsMsg) {
106
106
  startDownload: vsDownload.makeCaller(caller, vsPath),
107
107
  adoptRemote: vsAdoptRemote.makeCaller(caller, vsPath),
108
108
  diffCurrentAndRemoteFolderVersions: vsDiffCurrentAndRemoteFolderVersions.makeCaller(caller, vsPath),
109
+ diffCurrentAndRemoteFileVersions: vsDiffCurrentAndRemoteFileVersions.makeCaller(caller, vsPath),
109
110
  statRemoteItem: vsStatRemoteItem.makeCaller(caller, vsPath),
110
111
  listRemoteFolderItem: vsListRemoteFolderItem.makeCaller(caller, vsPath),
111
112
  getRemoteFileItem: vsGetRemoteFileItem.makeCaller(caller, vsPath),
@@ -115,7 +116,7 @@ function makeFSCaller(caller, fsMsg) {
115
116
  fs.v.sync.startUpload = vsStartUpload.makeCaller(caller, vsPath);
116
117
  fs.v.sync.upload = vsUpload.makeCaller(caller, vsPath);
117
118
  fs.v.sync.adoptRemoteFolderItem = vsAdoptRemoteFolderItem.makeCaller(caller, vsPath);
118
- fs.v.sync.adoptAllRemoteItems = vsAdoptAllRemoteItems.makeCaller(caller, vsPath);
119
+ fs.v.sync.mergeFolderCurrentAndRemoteVersions = vsMergeFolderCurrentAndRemoteVersions.makeCaller(caller, vsPath);
119
120
  }
120
121
  }
121
122
  }
@@ -193,13 +194,14 @@ function exposeFSService(fs, expServices) {
193
194
  listRemoteFolderItem: vsListRemoteFolderItem.wrapService(fs.v.sync.listRemoteFolderItem),
194
195
  getRemoteFileItem: vsGetRemoteFileItem.wrapService(fs.v.sync.getRemoteFileItem, expServices),
195
196
  getRemoteFolderItem: vsGetRemoteFolderItem.wrapService(fs.v.sync.getRemoteFolderItem, expServices),
196
- diffCurrentAndRemoteFolderVersions: vsDiffCurrentAndRemoteFolderVersions.wrapService(fs.v.sync.diffCurrentAndRemoteFolderVersions)
197
+ diffCurrentAndRemoteFolderVersions: vsDiffCurrentAndRemoteFolderVersions.wrapService(fs.v.sync.diffCurrentAndRemoteFolderVersions),
198
+ diffCurrentAndRemoteFileVersions: vsDiffCurrentAndRemoteFileVersions.wrapService(fs.v.sync.diffCurrentAndRemoteFileVersions)
197
199
  };
198
200
  if (fs.writable) {
199
201
  implExp.v.sync.startUpload = vsStartUpload.wrapService(fs.v.sync.startUpload);
200
202
  implExp.v.sync.upload = vsUpload.wrapService(fs.v.sync.upload);
201
203
  implExp.v.sync.adoptRemoteFolderItem = vsAdoptRemoteFolderItem.wrapService(fs.v.sync.adoptRemoteFolderItem);
202
- implExp.v.sync.adoptAllRemoteItems = vsAdoptAllRemoteItems.wrapService(fs.v.sync.adoptAllRemoteItems);
204
+ implExp.v.sync.mergeFolderCurrentAndRemoteVersions = vsMergeFolderCurrentAndRemoteVersions.wrapService(fs.v.sync.mergeFolderCurrentAndRemoteVersions);
203
205
  }
204
206
  }
205
207
  }
@@ -1975,9 +1977,9 @@ var vsAdoptRemoteFolderItem;
1975
1977
  vsAdoptRemoteFolderItem.makeCaller = makeCaller;
1976
1978
  })(vsAdoptRemoteFolderItem || (vsAdoptRemoteFolderItem = {}));
1977
1979
  Object.freeze(vsAdoptRemoteFolderItem);
1978
- var vsAdoptAllRemoteItems;
1979
- (function (vsAdoptAllRemoteItems) {
1980
- const requestType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.AdoptAllRemoteFolderItemsRequestBody);
1980
+ var vsMergeFolderCurrentAndRemoteVersions;
1981
+ (function (vsMergeFolderCurrentAndRemoteVersions) {
1982
+ const requestType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.MergeFolderCurrentAndRemoteVersionsRequestBody);
1981
1983
  function optionsFromMsg(msg) {
1982
1984
  if (!msg) {
1983
1985
  return;
@@ -1998,7 +2000,7 @@ var vsAdoptAllRemoteItems;
1998
2000
  postfixForNameOverlaps: (0, protobuf_msg_1.toOptVal)(opts.postfixForNameOverlaps),
1999
2001
  };
2000
2002
  }
2001
- const replyType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.AdoptAllRemoteFolderItemsReplyBody);
2003
+ const replyType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.MergeFolderCurrentAndRemoteVersionsReplyBody);
2002
2004
  function wrapService(fn) {
2003
2005
  return buf => {
2004
2006
  const { path, opts } = requestType.unpack(buf);
@@ -2007,16 +2009,16 @@ var vsAdoptAllRemoteItems;
2007
2009
  return { promise };
2008
2010
  };
2009
2011
  }
2010
- vsAdoptAllRemoteItems.wrapService = wrapService;
2012
+ vsMergeFolderCurrentAndRemoteVersions.wrapService = wrapService;
2011
2013
  function makeCaller(caller, objPath) {
2012
- const ipcPath = (0, protobuf_msg_1.methodPathFor)(objPath, 'adoptAllRemoteItems');
2014
+ const ipcPath = (0, protobuf_msg_1.methodPathFor)(objPath, 'mergeFolderCurrentAndRemoteVersions');
2013
2015
  return (path, opts) => caller
2014
2016
  .startPromiseCall(ipcPath, requestType.pack({ path, opts: optionsToMsg(opts) }))
2015
2017
  .then(buf => (0, protobuf_msg_1.valOfOptInt)(replyType.unpack(buf).newVersion));
2016
2018
  }
2017
- vsAdoptAllRemoteItems.makeCaller = makeCaller;
2018
- })(vsAdoptAllRemoteItems || (vsAdoptAllRemoteItems = {}));
2019
- Object.freeze(vsAdoptAllRemoteItems);
2019
+ vsMergeFolderCurrentAndRemoteVersions.makeCaller = makeCaller;
2020
+ })(vsMergeFolderCurrentAndRemoteVersions || (vsMergeFolderCurrentAndRemoteVersions = {}));
2021
+ Object.freeze(vsMergeFolderCurrentAndRemoteVersions);
2020
2022
  var vsAdoptRemote;
2021
2023
  (function (vsAdoptRemote) {
2022
2024
  const requestType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.AdoptRemoteRequestBody);
@@ -2181,35 +2183,45 @@ var vArchiveCurrent;
2181
2183
  vArchiveCurrent.makeCaller = makeCaller;
2182
2184
  })(vArchiveCurrent || (vArchiveCurrent = {}));
2183
2185
  Object.freeze(vArchiveCurrent);
2186
+ var vsDiffCurrentAndRemoteFileVersions;
2187
+ (function (vsDiffCurrentAndRemoteFileVersions) {
2188
+ const requestType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.DiffCurrentAndRemoteFileVersionsRequestBody);
2189
+ const replyType = file.vsDiffCurrentAndRemoteVersions.replyType;
2190
+ function wrapService(fn) {
2191
+ return buf => {
2192
+ const { path, opts } = requestType.unpack(buf);
2193
+ const promise = fn(path, file.vsDiffCurrentAndRemoteVersions.optsFromMsg(opts))
2194
+ .then(diff => replyType.pack({ diff: file.fileDiffToMsg(diff) }));
2195
+ return { promise };
2196
+ };
2197
+ }
2198
+ vsDiffCurrentAndRemoteFileVersions.wrapService = wrapService;
2199
+ function makeCaller(caller, objPath) {
2200
+ const ipcPath = (0, protobuf_msg_1.methodPathFor)(objPath, 'diffCurrentAndRemoteFileVersions');
2201
+ return (path, opts) => caller
2202
+ .startPromiseCall(ipcPath, requestType.pack({
2203
+ path, opts: file.vsDiffCurrentAndRemoteVersions.optsToMsg(opts)
2204
+ }))
2205
+ .then(buf => file.fileDiffFromMsg(replyType.unpack(buf).diff));
2206
+ }
2207
+ vsDiffCurrentAndRemoteFileVersions.makeCaller = makeCaller;
2208
+ })(vsDiffCurrentAndRemoteFileVersions || (vsDiffCurrentAndRemoteFileVersions = {}));
2209
+ Object.freeze(vsDiffCurrentAndRemoteFileVersions);
2184
2210
  function folderDiffToMsg(diff) {
2185
- var _a, _b, _c, _d;
2186
2211
  if (!diff) {
2187
2212
  return;
2188
2213
  }
2189
2214
  return {
2190
- remoteVersion: (0, protobuf_msg_1.toOptVal)(diff.remoteVersion),
2191
- currentVersion: diff.currentVersion,
2192
- isCurrentLocal: diff.isCurrentLocal,
2193
- isRemoteRemoved: diff.isRemoteRemoved,
2194
- inCurrent: (_a = diff.inCurrent) === null || _a === void 0 ? void 0 : _a.map(lsEntryToMsg),
2195
- inRemote: (_b = diff.inRemote) === null || _b === void 0 ? void 0 : _b.map(lsEntryToMsg),
2196
- nameOverlaps: diff.nameOverlaps,
2197
- differentKeys: diff.differentKeys,
2198
- differentNames: diff.differentNames,
2199
- ctime: diffTStoMsg(diff.ctime),
2200
- mtime: diffTStoMsg(diff.mtime),
2201
- xattrs: (diff.xattrs ? {
2202
- inCurrent: (_c = diff.xattrs.inCurrent) === null || _c === void 0 ? void 0 : _c.map(({ name, value }) => file.xattrToMsg(name, value)),
2203
- inRemote: (_d = diff.xattrs.inRemote) === null || _d === void 0 ? void 0 : _d.map(({ name, value }) => file.xattrToMsg(name, value)),
2204
- nameOverlaps: diff.xattrs.nameOverlaps
2205
- } : undefined)
2206
- };
2207
- }
2208
- function diffTStoMsg(diffTS) {
2209
- var _a;
2210
- return {
2211
- current: diffTS.current.valueOf(),
2212
- remote: (0, protobuf_msg_1.toOptVal)((_a = diffTS.remote) === null || _a === void 0 ? void 0 : _a.valueOf())
2215
+ ...file.commonDiffToMsg(diff),
2216
+ added: (diff.added && (diff.added.length > 0) ?
2217
+ diff.added.map(({ name, addedIn }) => ({ name, addedIn })) : undefined),
2218
+ removed: (diff.removed && (diff.removed.length > 0) ?
2219
+ diff.removed.map(({ name, removedIn }) => ({ name, removedIn })) : undefined),
2220
+ renamed: (diff.renamed && (diff.renamed.length > 0) ?
2221
+ diff.renamed.map(({ local, remote, renamedIn }) => ({ local, remote, renamedIn })) : undefined),
2222
+ rekeyed: (diff.rekeyed && (diff.rekeyed.length > 0) ?
2223
+ diff.rekeyed.map(({ local, remote, rekeyedIn }) => ({ local, remote, rekeyedIn })) : undefined),
2224
+ nameOverlaps: (diff.nameOverlaps && (diff.nameOverlaps.length > 0) ? diff.nameOverlaps.concat() : undefined)
2213
2225
  };
2214
2226
  }
2215
2227
  function folderDiffFromMsg(msg) {
@@ -2217,36 +2229,17 @@ function folderDiffFromMsg(msg) {
2217
2229
  return;
2218
2230
  }
2219
2231
  return {
2220
- remoteVersion: (0, protobuf_msg_1.valOfOptInt)(msg.remoteVersion),
2221
- currentVersion: (0, protobuf_msg_1.fixInt)(msg.currentVersion),
2222
- isCurrentLocal: msg.isCurrentLocal,
2223
- isRemoteRemoved: msg.isRemoteRemoved,
2224
- inCurrent: ((msg.inCurrent && (msg.inCurrent.length > 0)) ? msg.inCurrent.map(lsEntryFromMsg) : undefined),
2225
- inRemote: ((msg.inRemote && (msg.inRemote.length > 0)) ? msg.inRemote.map(lsEntryFromMsg) : undefined),
2226
- nameOverlaps: ((msg.nameOverlaps && (msg.nameOverlaps.length > 0)) ? msg.nameOverlaps : undefined),
2227
- differentKeys: ((msg.differentKeys && (msg.differentKeys.length > 0)) ? msg.differentKeys : undefined),
2228
- differentNames: ((msg.differentNames && (msg.differentNames.length > 0)) ? msg.differentNames : undefined),
2229
- ctime: diffTSfromMsg(msg.ctime),
2230
- mtime: diffTSfromMsg(msg.mtime),
2231
- xattrs: (msg.xattrs ? {
2232
- inCurrent: ((msg.xattrs.inCurrent && (msg.xattrs.inCurrent.length > 0)) ?
2233
- msg.xattrs.inCurrent.map(file.xattrFromMsg) : undefined),
2234
- inRemote: ((msg.xattrs.inRemote && (msg.xattrs.inRemote.length > 0)) ?
2235
- msg.xattrs.inRemote.map(file.xattrFromMsg) : undefined),
2236
- nameOverlaps: ((msg.xattrs.nameOverlaps && (msg.xattrs.nameOverlaps.length > 0)) ?
2237
- msg.xattrs.nameOverlaps : undefined)
2238
- } : undefined)
2239
- };
2240
- }
2241
- function diffTSfromMsg(m) {
2242
- return {
2243
- current: new Date((0, protobuf_msg_1.fixInt)(m.current)),
2244
- remote: (m.remote ? new Date((0, protobuf_msg_1.intValOf)(m.remote)) : undefined)
2232
+ ...file.commonDiffFromMsg(msg),
2233
+ added: (msg.added ? msg.added : undefined),
2234
+ removed: (msg.removed ? msg.removed : undefined),
2235
+ renamed: (msg.renamed ? msg.renamed : undefined),
2236
+ rekeyed: (msg.rekeyed ? msg.rekeyed : undefined),
2237
+ nameOverlaps: (msg.nameOverlaps ? msg.nameOverlaps : undefined),
2245
2238
  };
2246
2239
  }
2247
2240
  var vsDiffCurrentAndRemoteFolderVersions;
2248
2241
  (function (vsDiffCurrentAndRemoteFolderVersions) {
2249
- const requestType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.DiffCurrentAndRemoteRequestBody);
2242
+ const requestType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.DiffCurrentAndRemoteFolderVersionsRequestBody);
2250
2243
  const replyType = protobuf_type_1.ProtoType.for(fs_proto_1.fs.DiffCurrentAndRemoteReplyBody);
2251
2244
  function wrapService(fn) {
2252
2245
  return buf => {
@@ -163,8 +163,10 @@ class MailRecipient extends user_with_mid_session_1.ServiceUser {
163
163
  appPath: api.msgObj.genUrlEnd(msgId, objId, opts),
164
164
  method: 'GET',
165
165
  responseType: 'arraybuffer',
166
- responseHeaders: [api.HTTP_HEADER.objSegmentsLength,
167
- api.HTTP_HEADER.objHeaderLength]
166
+ responseHeaders: [
167
+ api.HTTP_HEADER.objSegmentsLength,
168
+ api.HTTP_HEADER.objHeaderLength
169
+ ]
168
170
  });
169
171
  if (rep.status === api.msgObj.SC.ok) {
170
172
  if (!(rep.data instanceof Uint8Array)) {