core-3nweb-client-lib 0.27.1 → 0.27.3

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 (56) hide show
  1. package/build/api-defs/files.d.ts +4 -7
  2. package/build/core/asmail/inbox/attachments/fs.d.ts +2 -1
  3. package/build/core/asmail/inbox/attachments/fs.js +4 -3
  4. package/build/core/asmail/inbox/index.js +1 -1
  5. package/build/core/id-manager/index.d.ts +43 -0
  6. package/build/core/{id-manager.js → id-manager/index.js} +33 -114
  7. package/build/core/id-manager/key-storage.d.ts +21 -0
  8. package/build/core/id-manager/key-storage.js +96 -0
  9. package/build/core/index.js +21 -23
  10. package/build/core/sign-in.d.ts +1 -2
  11. package/build/core/sign-in.js +4 -13
  12. package/build/core/sign-up.d.ts +2 -0
  13. package/build/core/sign-up.js +2 -1
  14. package/build/core/storage/index.d.ts +4 -2
  15. package/build/core/storage/index.js +36 -57
  16. package/build/core/storage/local/storage.d.ts +1 -1
  17. package/build/core/storage/synced/obj-files-gc.d.ts +1 -4
  18. package/build/core/storage/synced/obj-files-gc.js +1 -18
  19. package/build/core/storage/synced/obj-files.d.ts +9 -1
  20. package/build/core/storage/synced/obj-files.js +41 -33
  21. package/build/core/storage/synced/obj-status.d.ts +18 -7
  22. package/build/core/storage/synced/obj-status.js +148 -83
  23. package/build/core/storage/synced/storage.d.ts +7 -2
  24. package/build/core/storage/synced/storage.js +50 -10
  25. package/build/core/storage/synced/upsyncer.d.ts +4 -4
  26. package/build/core/storage/synced/upsyncer.js +12 -6
  27. package/build/lib-client/3nstorage/exceptions.d.ts +13 -1
  28. package/build/lib-client/3nstorage/exceptions.js +9 -3
  29. package/build/lib-client/3nstorage/service.d.ts +6 -1
  30. package/build/lib-client/3nstorage/service.js +31 -15
  31. package/build/lib-client/3nstorage/util/file-based-json.js +2 -1
  32. package/build/lib-client/3nstorage/util/for-arrays.d.ts +1 -0
  33. package/build/lib-client/3nstorage/util/for-arrays.js +32 -0
  34. package/build/lib-client/3nstorage/xsp-fs/common.d.ts +5 -4
  35. package/build/lib-client/3nstorage/xsp-fs/common.js +1 -0
  36. package/build/lib-client/3nstorage/xsp-fs/file.js +2 -2
  37. package/build/lib-client/3nstorage/xsp-fs/folder-node.d.ts +11 -5
  38. package/build/lib-client/3nstorage/xsp-fs/folder-node.js +232 -68
  39. package/build/lib-client/3nstorage/xsp-fs/fs.js +15 -19
  40. package/build/lib-client/3nstorage/xsp-fs/node-in-fs.d.ts +4 -9
  41. package/build/lib-client/3nstorage/xsp-fs/node-in-fs.js +16 -17
  42. package/build/lib-client/3nstorage/xsp-fs/xsp-payload-v1.js +1 -1
  43. package/build/lib-client/cryptor/cryptor-wasm.js +1 -1
  44. package/build/lib-client/cryptor/cryptor.wasm +0 -0
  45. package/build/lib-client/local-files/device-fs.js +11 -11
  46. package/build/lib-client/user-with-mid-session.d.ts +2 -1
  47. package/build/lib-client/user-with-mid-session.js +7 -1
  48. package/build/lib-common/async-fs-node.js +8 -8
  49. package/build/lib-common/exceptions/file.d.ts +4 -2
  50. package/build/lib-common/exceptions/file.js +24 -58
  51. package/build/lib-common/ipc/generic-ipc.js +5 -4
  52. package/build/lib-common/objs-on-disk/utils.js +1 -1
  53. package/build/lib-common/service-api/3nstorage/owner.d.ts +8 -5
  54. package/build/lib-common/service-api/3nstorage/owner.js +2 -1
  55. package/package.json +3 -2
  56. package/build/core/id-manager.d.ts +0 -46
@@ -28,23 +28,39 @@ const keyGen = require("../key-derivation");
28
28
  const exceptions_1 = require("./exceptions");
29
29
  const ws_ipc_1 = require("../../lib-common/ipc/ws-ipc");
30
30
  const assert_1 = require("../../lib-common/assert");
31
+ function toInitServiceUriGetter(net, mainUrlGetter) {
32
+ return async () => {
33
+ const serviceUrl = await mainUrlGetter();
34
+ const info = await (0, service_locator_1.storageInfoAt)(net, serviceUrl);
35
+ if (!info.owner) {
36
+ throw new Error(`Missing owner service url in 3NStorage information at ${serviceUrl}`);
37
+ }
38
+ return info.owner;
39
+ };
40
+ }
31
41
  class StorageOwner extends user_with_mid_session_1.ServiceUser {
32
- constructor(user, getSigner, mainUrlGetter, net) {
42
+ constructor(user, getSigner, getInitServiceURI, net) {
33
43
  super(user, {
34
44
  login: api.midLogin.MID_URL_PART,
35
45
  logout: api.closeSession.URL_END,
36
46
  canBeRedirected: true
37
- }, getSigner, async () => {
38
- const serviceUrl = await mainUrlGetter();
39
- const info = await (0, service_locator_1.storageInfoAt)(this.net, serviceUrl);
40
- if (!info.owner) {
41
- throw new Error(`Missing owner service url in 3NStorage information at ${serviceUrl}`);
42
- }
43
- return info.owner;
44
- }, net);
47
+ }, getSigner, getInitServiceURI, net);
45
48
  this.maxChunkSize = undefined;
46
49
  Object.seal(this);
47
50
  }
51
+ static make(user, getSigner, mainUrlGetter, net) {
52
+ const srvUriGetter = toInitServiceUriGetter(net, mainUrlGetter);
53
+ const remote = new StorageOwner(user, getSigner, srvUriGetter, net);
54
+ return remote;
55
+ }
56
+ static makeBeforeMidSetup(user, mainUrlGetter, net) {
57
+ const srvUriGetter = toInitServiceUriGetter(net, mainUrlGetter);
58
+ const remote = new StorageOwner(user, undefined, srvUriGetter, net);
59
+ return {
60
+ remote,
61
+ setMid: getSigner => remote.setGetterOfSigner(getSigner)
62
+ };
63
+ }
48
64
  async getKeyDerivParams() {
49
65
  const rep = await this.doBodylessSessionRequest({
50
66
  appPath: api.keyDerivParams.URL_END,
@@ -144,7 +160,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
144
160
  };
145
161
  }
146
162
  else if (rep.status === api.currentObj.SC.unknownObj) {
147
- throw (0, exceptions_1.makeObjNotFoundExc)(objId, undefined, true);
163
+ throw (0, exceptions_1.makeObjNotFoundExc)(objId, true);
148
164
  }
149
165
  else {
150
166
  throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
@@ -179,7 +195,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
179
195
  return rep.data;
180
196
  }
181
197
  else if (rep.status === api.currentObj.SC.unknownObj) {
182
- throw (0, exceptions_1.makeObjNotFoundExc)(objId, undefined, true);
198
+ throw (0, exceptions_1.makeObjNotFoundExc)(objId, true);
183
199
  }
184
200
  else {
185
201
  throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
@@ -246,7 +262,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
246
262
  throw (0, exceptions_1.makeObjExistsExc)(objId, undefined, true);
247
263
  }
248
264
  else if (rep.status === api.currentObj.SC.unknownObj) {
249
- throw (0, exceptions_1.makeObjNotFoundExc)(objId, undefined, true);
265
+ throw (0, exceptions_1.makeObjNotFoundExc)(objId, true);
250
266
  }
251
267
  else if (rep.status === api.currentObj.SC.concurrentTransaction) {
252
268
  throw (0, exceptions_1.makeConcurrentTransExc)(objId);
@@ -276,10 +292,10 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
276
292
  return;
277
293
  }
278
294
  else if (rep.status === api.currentObj.SC.unknownObj) {
279
- throw (0, exceptions_1.makeObjNotFoundExc)(objId, undefined, true);
295
+ throw (0, exceptions_1.makeObjNotFoundExc)(objId, true);
280
296
  }
281
297
  else if (rep.status === api.currentObj.SC.unknownObjVer) {
282
- throw (0, exceptions_1.makeObjNotFoundExc)(objId, currentVer, true);
298
+ throw (0, exceptions_1.makeObjVersionNotFoundExc)(objId, currentVer, true);
283
299
  }
284
300
  else {
285
301
  throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
@@ -298,7 +314,7 @@ class StorageOwner extends user_with_mid_session_1.ServiceUser {
298
314
  return rep.data;
299
315
  }
300
316
  else if (rep.status === api.objStatus.SC.unknownObj) {
301
- throw (0, exceptions_1.makeObjNotFoundExc)(objId, undefined, true);
317
+ throw (0, exceptions_1.makeObjNotFoundExc)(objId, true);
302
318
  }
303
319
  else {
304
320
  throw (0, request_utils_1.makeException)(rep, 'Unexpected status');
@@ -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.JsonFileProc = void 0;
19
20
  const rxjs_1 = require("rxjs");
@@ -0,0 +1 @@
1
+ export declare function appendArray<T>(arr: T[], elems: T[] | T | undefined): T[];
@@ -0,0 +1,32 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2022 3NSoft Inc.
4
+
5
+ This program is free software: you can redistribute it and/or modify it under
6
+ the terms of the GNU General Public License as published by the Free Software
7
+ Foundation, either version 3 of the License, or (at your option) any later
8
+ version.
9
+
10
+ This program is distributed in the hope that it will be useful, but
11
+ WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ See the GNU General Public License for more details.
14
+
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/>.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.appendArray = void 0;
20
+ function appendArray(arr, elems) {
21
+ if (elems !== undefined) {
22
+ if (Array.isArray(elems)) {
23
+ arr.push(...elems);
24
+ }
25
+ else {
26
+ arr.push(elems);
27
+ }
28
+ }
29
+ return arr;
30
+ }
31
+ exports.appendArray = appendArray;
32
+ Object.freeze(exports);
@@ -1,6 +1,7 @@
1
1
  import { ScryptGenParams } from '../../key-derivation';
2
2
  import { AsyncSBoxCryptor, Subscribe, ObjSource } from 'xsp-files';
3
3
  import { Observable } from 'rxjs';
4
+ import { LogError } from '../../logging/log-to-file';
4
5
  export { AsyncSBoxCryptor } from 'xsp-files';
5
6
  export { FolderInJSON } from './folder-node';
6
7
  declare type StorageType = web3n.files.FSType;
@@ -16,7 +17,6 @@ export interface Node {
16
17
  objId: string;
17
18
  name: string;
18
19
  type: NodeType;
19
- removeObj(src?: FSChangeSrc): Promise<void>;
20
20
  }
21
21
  export declare type NodeType = 'file' | 'link' | 'folder';
22
22
  export declare type ObjId = string | null;
@@ -58,6 +58,7 @@ export interface Storage {
58
58
  readonly versioned: boolean;
59
59
  readonly cryptor: AsyncSBoxCryptor;
60
60
  readonly nodes: NodesContainer;
61
+ readonly logError: LogError;
61
62
  getNodeEvents(): Observable<NodeEvent>;
62
63
  broadcastNodeEvent(objId: ObjId, parentObjId: ObjId | undefined, childObjId: ObjId | undefined, ev: NodeEvent['event']): void;
63
64
  /**
@@ -73,10 +74,8 @@ export interface Storage {
73
74
  generateNewObjId(): Promise<string>;
74
75
  /**
75
76
  * This returns a promise, resolvable to source for a requested object.
76
- * @param objId
77
- * @param version
78
77
  */
79
- getObjSrc(objId: ObjId, version?: number): Promise<ObjSource>;
78
+ getObjSrc(objId: ObjId, version?: number, allowArchived?: boolean): Promise<ObjSource>;
80
79
  /**
81
80
  * This saves given object, asynchronously.
82
81
  * @param objId
@@ -114,6 +113,7 @@ export interface SyncedStorage extends Storage {
114
113
  getRootKeyDerivParamsFromServer(): Promise<ScryptGenParams>;
115
114
  adoptRemote(objId: ObjId, opts: OptionsToAdopteRemote | undefined): Promise<number | undefined>;
116
115
  updateStatusInfo(objId: ObjId): Promise<SyncStatus>;
116
+ isObjOnDisk(objId: ObjId): Promise<boolean>;
117
117
  isRemoteVersionOnDisk(objId: ObjId, version: number): Promise<'partial' | 'complete' | 'none'>;
118
118
  download(objId: ObjId, version: number): Promise<void>;
119
119
  upload(objId: ObjId, localVersion: number, uploadVersion: number, uploadHeader: UploadHeaderChange | undefined, createOnRemote: boolean): Promise<void>;
@@ -124,6 +124,7 @@ export interface SyncedStorage extends Storage {
124
124
  export interface SyncedObjStatus extends LocalObjStatus {
125
125
  syncStatus(): SyncStatus;
126
126
  neverUploaded(): boolean;
127
+ versionBeforeUnsyncedRemoval(): number | undefined;
127
128
  }
128
129
  export interface UploadHeaderChange {
129
130
  localVersion: number;
@@ -98,6 +98,7 @@ function wrapStorageImplementation(impl) {
98
98
  type: impl.type,
99
99
  versioned: impl.versioned,
100
100
  nodes: impl.nodes,
101
+ logError: impl.logError,
101
102
  getNodeEvents: impl.getNodeEvents.bind(impl),
102
103
  broadcastNodeEvent: impl.broadcastNodeEvent.bind(impl),
103
104
  storageForLinking: impl.storageForLinking.bind(impl),
@@ -178,7 +178,7 @@ class V {
178
178
  }
179
179
  async getByteSource() {
180
180
  if (!this.node) {
181
- throw (0, file_1.makeFileException)(file_1.Code.notFound, this.name);
181
+ throw (0, file_1.makeFileException)('notFound', this.name);
182
182
  }
183
183
  return this.node.readSrc();
184
184
  }
@@ -196,7 +196,7 @@ class V {
196
196
  }
197
197
  async readBytes(start, end) {
198
198
  if (!this.node) {
199
- throw (0, file_1.makeFileException)(file_1.Code.notFound, this.name);
199
+ throw (0, file_1.makeFileException)('notFound', this.name);
200
200
  }
201
201
  return await this.node.readBytes(start, end);
202
202
  }
@@ -1,4 +1,4 @@
1
- import { Storage, Node, NodeType, FSChangeSrc } from './common';
1
+ import { Storage, NodeType } from './common';
2
2
  import { NodeInFS } from './node-in-fs';
3
3
  import { FileNode } from './file-node';
4
4
  import { LinkNode } from './link-node';
@@ -58,6 +58,7 @@ declare class FolderPersistance extends NodePersistance {
58
58
  attrs: CommonAttrs;
59
59
  xattrs?: XAttrs;
60
60
  }>;
61
+ static readFolderContent(objId: string | null, key: Uint8Array, src: ObjSource, cryptor: AsyncSBoxCryptor): Promise<FolderInfo>;
61
62
  }
62
63
  export interface FolderLinkParams {
63
64
  folderName: string;
@@ -74,15 +75,15 @@ export declare class FolderNode extends NodeInFS<FolderPersistance> {
74
75
  static rootFromJSON(storage: Storage, name: string | undefined, folderJson: FolderInJSON): FolderNode;
75
76
  protected setCurrentStateFrom(src: ObjSource): Promise<void>;
76
77
  adoptRemote(opts: OptionsToAdopteRemote | undefined): Promise<void>;
78
+ private callRemoveObjOn;
77
79
  list(): {
78
80
  lst: ListingEntry[];
79
81
  version: number;
80
82
  };
81
83
  childExistsInSyncedVersion(childObjId: string): Promise<boolean>;
82
- listFolders(): string[];
83
84
  getNodeInfo(name: string, undefOnMissing?: boolean): NodeInfo | undefined;
84
85
  hasChild(childName: string, throwIfMissing?: boolean): boolean;
85
- getNode<T extends Node>(type: NodeType | undefined, name: string, undefOnMissing?: boolean): Promise<T | undefined>;
86
+ getNode<T extends NodeInFS<any>>(type: NodeType | undefined, name: string, undefOnMissing?: boolean): Promise<T | undefined>;
86
87
  private getOrMakeChildNodeForInfo;
87
88
  getFolder(name: string, undefOnMissing?: boolean): Promise<FolderNode | undefined>;
88
89
  getFile(name: string, undefOnMissing?: boolean): Promise<FileNode | undefined>;
@@ -131,17 +132,22 @@ export declare class FolderNode extends NodeInFS<FolderPersistance> {
131
132
  */
132
133
  isEmpty(): boolean;
133
134
  private getAllNodes;
134
- protected delete(src: FSChangeSrc): Promise<void>;
135
+ private removeFolderObj;
136
+ private callRemoveObjOnAll;
137
+ private removeChildrenObjsInSyncedStorage;
138
+ private uploadRemovalOfObjs;
135
139
  getParamsForLink(): LinkParameters<FolderLinkParams>;
136
140
  upload(opts: OptionsToUploadLocal | undefined): Promise<void>;
141
+ private uploadRemovalOf;
142
+ private listRemovedInTreeToUploadRm;
137
143
  protected needUpload(localVersion: number | undefined): Promise<{
138
144
  localVersion: number;
139
145
  uploadVersion: number;
140
146
  createOnRemote: boolean;
141
147
  } | undefined>;
148
+ private getNodesRemovedBetweenVersions;
142
149
  adoptRemoteFolderItem(itemName: string, opts: OptionsToAdoptRemoteItem | undefined): Promise<number>;
143
150
  private addRemoteChild;
144
- private setRemoteNodeInfo;
145
151
  private replaceLocalChildWithRemote;
146
152
  diffCurrentAndRemote(remoteVersion: number | undefined): Promise<FolderDiff | undefined>;
147
153
  private diffWithArchivedRemote;