core-3nweb-client-lib 0.25.6 → 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.
- package/README.md +2 -2
- package/build/api-defs/files.d.ts +23 -20
- package/build/core/asmail/config/common.js +2 -2
- package/build/core/asmail/delivery/index.js +4 -3
- package/build/core/asmail/delivery/msg.js +5 -4
- package/build/core/asmail/delivery/per-recipient-wip.js +2 -2
- package/build/core/asmail/inbox/attachments/fs.js +6 -0
- package/build/core/asmail/inbox/cached-msgs.js +2 -2
- package/build/core/asmail/inbox/inbox-events.js +2 -1
- package/build/core/asmail/inbox/index.js +2 -2
- package/build/core/asmail/inbox/msg-downloader.js +2 -2
- package/build/core/asmail/inbox/msg-indexing.js +3 -3
- package/build/core/asmail/inbox/msg-on-disk.js +2 -2
- package/build/core/asmail/keyring/keyring-storage.js +2 -2
- package/build/core/asmail/sending-params/own-params.js +2 -2
- package/build/core/asmail/sending-params/params-from-others.js +2 -2
- package/build/core/id-manager.js +2 -2
- package/build/core/sign-in.d.ts +5 -4
- package/build/core/sign-in.js +9 -11
- package/build/core/sign-up.d.ts +1 -0
- package/build/core/sign-up.js +7 -3
- package/build/core/storage/common/json-saving.d.ts +21 -0
- package/build/core/storage/common/json-saving.js +82 -0
- package/build/core/storage/common/obj-info-file.d.ts +43 -0
- package/build/core/storage/common/obj-info-file.js +119 -3
- package/build/core/storage/index.js +1 -1
- package/build/core/storage/local/obj-files-gc.js +8 -6
- package/build/core/storage/local/obj-files.d.ts +3 -3
- package/build/core/storage/local/obj-files.js +9 -9
- package/build/core/storage/local/obj-status.d.ts +9 -25
- package/build/core/storage/local/obj-status.js +28 -110
- package/build/core/storage/local/storage.d.ts +8 -1
- package/build/core/storage/local/storage.js +10 -2
- package/build/core/storage/synced/downloader.js +6 -5
- package/build/core/storage/synced/obj-files-gc.d.ts +1 -0
- package/build/core/storage/synced/obj-files-gc.js +44 -5
- package/build/core/storage/synced/obj-files.d.ts +13 -20
- package/build/core/storage/synced/obj-files.js +70 -48
- package/build/core/storage/synced/obj-status.d.ts +74 -15
- package/build/core/storage/synced/obj-status.js +291 -107
- package/build/core/storage/synced/remote-events.js +32 -26
- package/build/core/storage/synced/storage.d.ts +11 -1
- package/build/core/storage/synced/storage.js +28 -3
- package/build/core/storage/synced/upsyncer.d.ts +8 -7
- package/build/core/storage/synced/upsyncer.js +211 -163
- package/build/ipc-via-protobuf/asmail-cap.js +15 -32
- package/build/ipc-via-protobuf/connector-clients-side.js +2 -2
- package/build/ipc-via-protobuf/file.js +22 -14
- package/build/ipc-via-protobuf/fs.js +31 -33
- package/build/ipc-via-protobuf/startup-cap.js +5 -5
- package/build/lib-client/3nstorage/exceptions.d.ts +9 -8
- package/build/lib-client/3nstorage/exceptions.js +18 -9
- package/build/lib-client/3nstorage/service.js +10 -6
- package/build/lib-client/3nstorage/xsp-fs/common.d.ts +18 -4
- package/build/lib-client/3nstorage/xsp-fs/common.js +6 -1
- package/build/lib-client/3nstorage/xsp-fs/file-node.js +3 -3
- package/build/lib-client/3nstorage/xsp-fs/file.js +4 -1
- package/build/lib-client/3nstorage/xsp-fs/folder-node.js +27 -13
- package/build/lib-client/3nstorage/xsp-fs/fs.d.ts +11 -6
- package/build/lib-client/3nstorage/xsp-fs/fs.js +189 -58
- package/build/lib-client/3nstorage/xsp-fs/node-in-fs.d.ts +4 -0
- package/build/lib-client/3nstorage/xsp-fs/node-in-fs.js +51 -24
- package/build/lib-client/3nstorage/xsp-fs/node-persistence.js +2 -2
- package/build/lib-client/3nstorage/xsp-fs/xsp-payload-v1.js +2 -2
- package/build/lib-client/3nstorage/xsp-fs/xsp-payload-v2.js +3 -3
- package/build/lib-client/cryptor/cryptor-in-worker.js +4 -4
- package/build/lib-client/cryptor/cryptor-wasm.js +1 -1
- package/build/lib-client/cryptor/cryptor.wasm +0 -0
- package/build/lib-client/cryptor/in-proc-wasm.js +2 -2
- package/build/lib-client/files.js +2 -0
- package/build/lib-client/fs-collection.js +3 -2
- package/build/lib-client/logging/log-to-file.js +4 -4
- package/build/lib-client/objs-on-disk/file-writing-proc.js +2 -2
- package/build/lib-client/objs-on-disk/obj-folders.js +2 -2
- package/build/lib-client/request-utils.js +2 -2
- package/build/lib-client/server-events.js +4 -3
- package/build/lib-client/ws-utils.js +2 -2
- package/build/lib-common/async-fs-node.js +4 -3
- package/build/lib-common/byte-streaming/wrapping.js +17 -17
- package/build/lib-common/exceptions/file.js +6 -1
- package/build/lib-common/ipc/generic-ipc.js +2 -2
- package/build/lib-common/json-utils.js +2 -1
- package/build/lib-common/objs-on-disk/obj-file.js +4 -3
- package/build/lib-common/objs-on-disk/utils.js +2 -2
- package/build/lib-common/processes/deferred.d.ts +6 -0
- package/build/lib-common/processes/deferred.js +30 -0
- package/build/lib-common/processes/labelled-exec-pools.d.ts +33 -0
- package/build/lib-common/processes/labelled-exec-pools.js +141 -0
- package/build/lib-common/processes/pressure.d.ts +7 -0
- package/build/lib-common/processes/pressure.js +56 -0
- package/build/lib-common/processes/sleep.d.ts +1 -0
- package/build/lib-common/processes/sleep.js +26 -0
- package/build/lib-common/{processes.d.ts → processes/synced.d.ts} +0 -40
- package/build/lib-common/{processes.js → processes/synced.js} +187 -204
- package/build/lib-common/processes/timeout.d.ts +1 -0
- package/build/lib-common/processes/timeout.js +51 -0
- package/build/lib-common/service-api/3nstorage/owner.d.ts +5 -4
- package/build/lib-common/service-api/3nstorage/owner.js +3 -2
- package/build/lib-common/utils-for-observables.d.ts +15 -1
- package/build/lib-common/utils-for-observables.js +68 -17
- package/build/protos/asmail.proto.js +404 -78
- package/build/protos/file.proto.js +370 -44
- package/build/protos/fs.proto.js +404 -78
- package/package.json +4 -4
- package/protos/file.proto +10 -2
- package/protos/fs.proto +2 -2
- package/build/core/storage/synced/upsync-status.d.ts +0 -41
- 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;
|
|
@@ -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.
|
|
226
|
-
|
|
227
|
-
|
|
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.
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
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.
|
|
537
|
-
|
|
538
|
-
|
|
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
|
|
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 =
|
|
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;
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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.
|
|
397
|
-
|
|
398
|
-
|
|
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
|
|
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
|
-
|
|
360
|
+
lsEntryToMsg(e.entry) : undefined),
|
|
360
361
|
current: protobuf_msg_1.toOptVal(e.current),
|
|
361
|
-
|
|
362
|
-
|
|
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
|
|
377
|
+
entry: (m.entry ? lsEntryFromMsg(m.entry) : undefined),
|
|
377
378
|
current: protobuf_msg_1.valOfOptInt(m.current),
|
|
378
|
-
|
|
379
|
-
|
|
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
|
-
|
|
393
|
-
|
|
394
|
-
isFile:
|
|
395
|
-
|
|
396
|
-
|
|
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.
|
|
416
|
-
|
|
417
|
-
|
|
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
|
}
|
|
@@ -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 =
|
|
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 =
|
|
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.
|
|
931
|
-
|
|
932
|
-
|
|
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,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
|
|
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 =
|
|
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 =
|
|
221
|
-
s.
|
|
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 =
|
|
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?:
|
|
7
|
-
objExists?:
|
|
8
|
-
concurrentTransaction?:
|
|
9
|
-
unknownTransaction?:
|
|
10
|
-
versionMismatch?:
|
|
7
|
+
objNotFound?: true;
|
|
8
|
+
objExists?: true;
|
|
9
|
+
concurrentTransaction?: true;
|
|
10
|
+
unknownTransaction?: true;
|
|
11
|
+
versionMismatch?: true;
|
|
11
12
|
currentVersion?: number;
|
|
12
|
-
storageIsClosed?:
|
|
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({
|
|
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({
|
|
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({
|
|
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({
|
|
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');
|
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import { ScryptGenParams } from '../../key-derivation';
|
|
2
2
|
import { AsyncSBoxCryptor, Subscribe, ObjSource } from 'xsp-files';
|
|
3
3
|
import { objChanged, objRemoved } from '../../../lib-common/service-api/3nstorage/owner';
|
|
4
|
+
import { Observable } from 'rxjs';
|
|
5
|
+
import { UpSyncTaskInfo } from '../../../core/storage/synced/obj-status';
|
|
4
6
|
export { AsyncSBoxCryptor } from 'xsp-files';
|
|
5
7
|
export { FolderInJSON } from './folder-node';
|
|
6
8
|
declare type StorageType = web3n.files.FSType;
|
|
9
|
+
declare type FolderEvent = web3n.files.FolderEvent;
|
|
10
|
+
declare type FileEvent = web3n.files.FileEvent;
|
|
11
|
+
declare type Stats = web3n.files.Stats;
|
|
7
12
|
export interface RemoteObjRemovalEvent extends objRemoved.Event {
|
|
8
13
|
type: 'remote-delete';
|
|
9
14
|
}
|
|
@@ -16,6 +21,7 @@ export interface Node {
|
|
|
16
21
|
name: string;
|
|
17
22
|
type: NodeType;
|
|
18
23
|
processRemoteEvent: (event: RemoteEvent) => Promise<void>;
|
|
24
|
+
broadcastUpSyncEvent(task: UpSyncTaskInfo): void;
|
|
19
25
|
localDelete(): Promise<void>;
|
|
20
26
|
}
|
|
21
27
|
export declare type NodeType = 'file' | 'link' | 'folder';
|
|
@@ -47,11 +53,18 @@ export declare class NodesContainer {
|
|
|
47
53
|
reserveId(objId: string): boolean;
|
|
48
54
|
clear(): void;
|
|
49
55
|
}
|
|
56
|
+
export interface NodeEvent {
|
|
57
|
+
objId: ObjId;
|
|
58
|
+
parentObjId?: ObjId;
|
|
59
|
+
event: FolderEvent | FileEvent;
|
|
60
|
+
}
|
|
50
61
|
export interface Storage {
|
|
51
62
|
readonly type: StorageType;
|
|
52
63
|
readonly versioned: boolean;
|
|
53
64
|
readonly cryptor: AsyncSBoxCryptor;
|
|
54
65
|
readonly nodes: NodesContainer;
|
|
66
|
+
getNodeEvents(): Observable<NodeEvent>;
|
|
67
|
+
broadcastNodeEvent(objId: ObjId, parentObjId: ObjId | undefined, ev: FolderEvent | FileEvent): void;
|
|
55
68
|
/**
|
|
56
69
|
* This returns a storage of another type, for use by link functionality.
|
|
57
70
|
* @param type is a type of a requested storage.
|
|
@@ -67,20 +80,20 @@ export interface Storage {
|
|
|
67
80
|
* This returns a promise, resolvable to source for a requested object.
|
|
68
81
|
* @param objId
|
|
69
82
|
*/
|
|
70
|
-
getObj(objId:
|
|
83
|
+
getObj(objId: ObjId): Promise<ObjSource>;
|
|
71
84
|
/**
|
|
72
85
|
* This saves given object, asynchronously.
|
|
73
86
|
* @param objId
|
|
74
87
|
* @param version
|
|
75
88
|
* @param sinkSub is a sink subscribe function
|
|
76
89
|
*/
|
|
77
|
-
saveObj(objId:
|
|
90
|
+
saveObj(objId: ObjId, version: number, sinkSub: Subscribe): Promise<void>;
|
|
78
91
|
/**
|
|
79
92
|
* This asynchronously removes an object. Note that it does not remove
|
|
80
93
|
* archived version, only current one.
|
|
81
94
|
* @param objId
|
|
82
95
|
*/
|
|
83
|
-
removeObj(objId:
|
|
96
|
+
removeObj(objId: ObjId): Promise<void>;
|
|
84
97
|
/**
|
|
85
98
|
* This asynchronously runs closing cleanup.
|
|
86
99
|
*/
|
|
@@ -93,6 +106,7 @@ export interface SyncedStorage extends Storage {
|
|
|
93
106
|
* This returns a promise, resolvable to root key generation parameters.
|
|
94
107
|
*/
|
|
95
108
|
getRootKeyDerivParamsFromServer(): Promise<ScryptGenParams>;
|
|
96
|
-
getRemoteConflictObjVersion(objId:
|
|
109
|
+
getRemoteConflictObjVersion(objId: ObjId, version: number): Promise<ObjSource>;
|
|
110
|
+
getObjSyncInfo(objId: ObjId): Promise<Stats['sync']>;
|
|
97
111
|
}
|
|
98
112
|
export declare function wrapSyncStorageImplementation(impl: SyncedStorage): SyncedStorage;
|
|
@@ -98,6 +98,8 @@ function wrapStorageImplementation(impl) {
|
|
|
98
98
|
type: impl.type,
|
|
99
99
|
versioned: impl.versioned,
|
|
100
100
|
nodes: impl.nodes,
|
|
101
|
+
getNodeEvents: impl.getNodeEvents.bind(impl),
|
|
102
|
+
broadcastNodeEvent: impl.broadcastNodeEvent.bind(impl),
|
|
101
103
|
storageForLinking: impl.storageForLinking.bind(impl),
|
|
102
104
|
generateNewObjId: impl.generateNewObjId.bind(impl),
|
|
103
105
|
getObj: impl.getObj.bind(impl),
|
|
@@ -119,11 +121,14 @@ function wrapSyncStorageImplementation(impl) {
|
|
|
119
121
|
generateNewObjId: storageWrap.generateNewObjId,
|
|
120
122
|
getObj: storageWrap.getObj,
|
|
121
123
|
nodes: storageWrap.nodes,
|
|
124
|
+
getNodeEvents: storageWrap.getNodeEvents,
|
|
125
|
+
broadcastNodeEvent: storageWrap.broadcastNodeEvent,
|
|
122
126
|
removeObj: storageWrap.removeObj,
|
|
123
127
|
saveObj: storageWrap.saveObj,
|
|
124
128
|
storageForLinking: storageWrap.storageForLinking,
|
|
125
129
|
getRootKeyDerivParamsFromServer: impl.getRootKeyDerivParamsFromServer.bind(impl),
|
|
126
|
-
getRemoteConflictObjVersion: impl.getRemoteConflictObjVersion.bind(impl)
|
|
130
|
+
getRemoteConflictObjVersion: impl.getRemoteConflictObjVersion.bind(impl),
|
|
131
|
+
getObjSyncInfo: impl.getObjSyncInfo.bind(impl)
|
|
127
132
|
};
|
|
128
133
|
return Object.freeze(wrap);
|
|
129
134
|
}
|
|
@@ -23,7 +23,7 @@ exports.FileNode = void 0;
|
|
|
23
23
|
*/
|
|
24
24
|
const node_in_fs_1 = require("./node-in-fs");
|
|
25
25
|
const buffer_utils_1 = require("../../../lib-common/buffer-utils");
|
|
26
|
-
const
|
|
26
|
+
const deferred_1 = require("../../../lib-common/processes/deferred");
|
|
27
27
|
const xsp_files_1 = require("xsp-files");
|
|
28
28
|
const assert_1 = require("../../../lib-common/assert");
|
|
29
29
|
const attrs_1 = require("./attrs");
|
|
@@ -177,8 +177,8 @@ class FileNode extends node_in_fs_1.NodeInFS {
|
|
|
177
177
|
}
|
|
178
178
|
}
|
|
179
179
|
async writeSink(truncate, currentVersion, changes) {
|
|
180
|
-
const deferredSink =
|
|
181
|
-
const newSize =
|
|
180
|
+
const deferredSink = deferred_1.defer();
|
|
181
|
+
const newSize = deferred_1.defer();
|
|
182
182
|
let version = 0; // need to set any value to satisfy compiler
|
|
183
183
|
const completion = this.doChange(false, async () => {
|
|
184
184
|
const { attrs, xattrs, newVersion, sinkPromise, sub } = await this.startMakingSinkInsideChange(truncate, currentVersion, changes);
|
|
@@ -26,6 +26,7 @@ const files_1 = require("../../files");
|
|
|
26
26
|
const file_node_1 = require("./file-node");
|
|
27
27
|
const buffer_utils_1 = require("../../../lib-common/buffer-utils");
|
|
28
28
|
const pipe_1 = require("../../../lib-common/byte-streaming/pipe");
|
|
29
|
+
const utils_for_observables_1 = require("../../../lib-common/utils-for-observables");
|
|
29
30
|
class FileObject {
|
|
30
31
|
constructor(name, isNew, node, makeOrGetNode, writable) {
|
|
31
32
|
this.name = name;
|
|
@@ -60,11 +61,13 @@ class FileObject {
|
|
|
60
61
|
if (!this.v.node) {
|
|
61
62
|
throw file_1.makeFileException(file_1.Code.notFound, this.name);
|
|
62
63
|
}
|
|
64
|
+
const sync = await this.v.node.sync();
|
|
63
65
|
const attrs = this.v.node.getAttrs();
|
|
64
66
|
const stat = {
|
|
65
67
|
writable: this.writable,
|
|
66
68
|
size: this.v.node.size,
|
|
67
69
|
version: this.v.node.version,
|
|
70
|
+
sync,
|
|
68
71
|
isFile: true,
|
|
69
72
|
ctime: new Date(attrs.ctime),
|
|
70
73
|
mtime: new Date(attrs.mtime),
|
|
@@ -87,7 +90,7 @@ class FileObject {
|
|
|
87
90
|
throw new Error(`Node for file ${this.name} is not yet initialized`);
|
|
88
91
|
}
|
|
89
92
|
const sub = this.v.node.event$
|
|
90
|
-
.subscribe(observer);
|
|
93
|
+
.subscribe(utils_for_observables_1.toRxObserver(observer));
|
|
91
94
|
return () => sub.unsubscribe();
|
|
92
95
|
}
|
|
93
96
|
async readBytes(start, end) {
|