core-3nweb-client-lib 0.44.11 → 0.45.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 (206) hide show
  1. package/build/core/asmail/msg/opener.js +1 -1
  2. package/build/core/asmail/msg/packer.js +1 -1
  3. package/build/core/index.d.ts +2 -2
  4. package/build/core/keyring/correspondent-keys.js +1 -1
  5. package/build/core/keyring/index.js +1 -1
  6. package/build/core/startup/sign-in.d.ts +1 -1
  7. package/build/core/startup/sign-up.d.ts +1 -1
  8. package/build/core/storage/index.d.ts +1 -1
  9. package/build/lib-client/key-derivation.d.ts +1 -1
  10. package/build/lib-client/xsp-fs/attrs.d.ts +3 -2
  11. package/build/lib-client/xsp-fs/attrs.js +7 -6
  12. package/build/lib-client/xsp-fs/folder-node.js +1 -1
  13. package/build/lib-client/xsp-fs/node-in-fs.js +1 -0
  14. package/build/lib-client/xsp-fs/node-persistence.js +1 -1
  15. package/build/lib-client/xsp-fs/xsp-payload-v2.js +1 -1
  16. package/build/tests/caps-api/asmail/specs/events.d.ts +2 -0
  17. package/build/tests/caps-api/asmail/specs/events.js +63 -0
  18. package/build/tests/caps-api/asmail/specs/send-to-wrong-address.d.ts +2 -0
  19. package/build/tests/caps-api/asmail/specs/send-to-wrong-address.js +68 -0
  20. package/build/tests/caps-api/asmail/specs/send-with-attacment-from-storage.d.ts +2 -0
  21. package/build/tests/caps-api/asmail/specs/send-with-attacment-from-storage.js +259 -0
  22. package/build/tests/caps-api/asmail/specs/send-without-attachments.d.ts +2 -0
  23. package/build/tests/caps-api/asmail/specs/send-without-attachments.js +90 -0
  24. package/build/tests/caps-api/asmail/test-utils.d.ts +12 -0
  25. package/build/tests/caps-api/asmail/test-utils.js +60 -0
  26. package/build/tests/caps-api/asmail.js +86 -0
  27. package/build/tests/caps-api/file-sink-checks/different-cases.d.ts +2 -0
  28. package/build/tests/caps-api/file-sink-checks/different-cases.js +47 -0
  29. package/build/tests/caps-api/file-sink-checks/splice.d.ts +2 -0
  30. package/build/tests/caps-api/file-sink-checks/splice.js +122 -0
  31. package/build/tests/caps-api/file-sink-checks/truncate.d.ts +2 -0
  32. package/build/tests/caps-api/file-sink-checks/truncate.js +122 -0
  33. package/build/tests/caps-api/fs-checks/local-to-synced-linking/link.d.ts +2 -0
  34. package/build/tests/caps-api/fs-checks/local-to-synced-linking/link.js +82 -0
  35. package/build/tests/caps-api/fs-checks/local-to-synced-linking/reversed-linking.d.ts +2 -0
  36. package/build/tests/caps-api/fs-checks/local-to-synced-linking/reversed-linking.js +50 -0
  37. package/build/tests/caps-api/fs-checks/not-versioned/deleteFile.d.ts +2 -0
  38. package/build/tests/caps-api/fs-checks/not-versioned/deleteFile.js +73 -0
  39. package/build/tests/caps-api/fs-checks/not-versioned/deleteFolder.d.ts +2 -0
  40. package/build/tests/caps-api/fs-checks/not-versioned/deleteFolder.js +75 -0
  41. package/build/tests/caps-api/fs-checks/not-versioned/getByteSink.d.ts +2 -0
  42. package/build/tests/caps-api/fs-checks/not-versioned/getByteSink.js +96 -0
  43. package/build/tests/caps-api/fs-checks/not-versioned/getByteSource.d.ts +2 -0
  44. package/build/tests/caps-api/fs-checks/not-versioned/getByteSource.js +67 -0
  45. package/build/tests/caps-api/fs-checks/not-versioned/getXAttr.d.ts +2 -0
  46. package/build/tests/caps-api/fs-checks/not-versioned/getXAttr.js +77 -0
  47. package/build/tests/caps-api/fs-checks/not-versioned/link.d.ts +2 -0
  48. package/build/tests/caps-api/fs-checks/not-versioned/link.js +115 -0
  49. package/build/tests/caps-api/fs-checks/not-versioned/listFolder.d.ts +2 -0
  50. package/build/tests/caps-api/fs-checks/not-versioned/listFolder.js +129 -0
  51. package/build/tests/caps-api/fs-checks/not-versioned/listXAttrs.d.ts +2 -0
  52. package/build/tests/caps-api/fs-checks/not-versioned/listXAttrs.js +73 -0
  53. package/build/tests/caps-api/fs-checks/not-versioned/makeFolder.d.ts +2 -0
  54. package/build/tests/caps-api/fs-checks/not-versioned/makeFolder.js +95 -0
  55. package/build/tests/caps-api/fs-checks/not-versioned/move.d.ts +2 -0
  56. package/build/tests/caps-api/fs-checks/not-versioned/move.js +127 -0
  57. package/build/tests/caps-api/fs-checks/not-versioned/readBytes.d.ts +2 -0
  58. package/build/tests/caps-api/fs-checks/not-versioned/readBytes.js +80 -0
  59. package/build/tests/caps-api/fs-checks/not-versioned/readJSONFile.d.ts +2 -0
  60. package/build/tests/caps-api/fs-checks/not-versioned/readJSONFile.js +59 -0
  61. package/build/tests/caps-api/fs-checks/not-versioned/readLink.d.ts +2 -0
  62. package/build/tests/caps-api/fs-checks/not-versioned/readLink.js +39 -0
  63. package/build/tests/caps-api/fs-checks/not-versioned/readTxtFile.d.ts +2 -0
  64. package/build/tests/caps-api/fs-checks/not-versioned/readTxtFile.js +54 -0
  65. package/build/tests/caps-api/fs-checks/not-versioned/readonlyFile.d.ts +2 -0
  66. package/build/tests/caps-api/fs-checks/not-versioned/readonlyFile.js +55 -0
  67. package/build/tests/caps-api/fs-checks/not-versioned/readonlySubRoot.d.ts +2 -0
  68. package/build/tests/caps-api/fs-checks/not-versioned/readonlySubRoot.js +55 -0
  69. package/build/tests/caps-api/fs-checks/not-versioned/select.d.ts +2 -0
  70. package/build/tests/caps-api/fs-checks/not-versioned/select.js +119 -0
  71. package/build/tests/caps-api/fs-checks/not-versioned/stat.d.ts +2 -0
  72. package/build/tests/caps-api/fs-checks/not-versioned/stat.js +96 -0
  73. package/build/tests/caps-api/fs-checks/not-versioned/updateXAttrs.d.ts +2 -0
  74. package/build/tests/caps-api/fs-checks/not-versioned/updateXAttrs.js +126 -0
  75. package/build/tests/caps-api/fs-checks/not-versioned/writableFile.d.ts +2 -0
  76. package/build/tests/caps-api/fs-checks/not-versioned/writableFile.js +79 -0
  77. package/build/tests/caps-api/fs-checks/not-versioned/writableSubRoot.d.ts +2 -0
  78. package/build/tests/caps-api/fs-checks/not-versioned/writableSubRoot.js +90 -0
  79. package/build/tests/caps-api/fs-checks/not-versioned/writeBytes.d.ts +2 -0
  80. package/build/tests/caps-api/fs-checks/not-versioned/writeBytes.js +137 -0
  81. package/build/tests/caps-api/fs-checks/not-versioned/writeJSONFile.d.ts +2 -0
  82. package/build/tests/caps-api/fs-checks/not-versioned/writeJSONFile.js +101 -0
  83. package/build/tests/caps-api/fs-checks/not-versioned/writeTxtFile.d.ts +2 -0
  84. package/build/tests/caps-api/fs-checks/not-versioned/writeTxtFile.js +100 -0
  85. package/build/tests/caps-api/fs-checks/sync-on-one-dev/startUpload.d.ts +2 -0
  86. package/build/tests/caps-api/fs-checks/sync-on-one-dev/startUpload.js +187 -0
  87. package/build/tests/caps-api/fs-checks/sync-on-one-dev/stat.d.ts +2 -0
  88. package/build/tests/caps-api/fs-checks/sync-on-one-dev/stat.js +70 -0
  89. package/build/tests/caps-api/fs-checks/sync-on-one-dev/status.d.ts +2 -0
  90. package/build/tests/caps-api/fs-checks/sync-on-one-dev/status.js +53 -0
  91. package/build/tests/caps-api/fs-checks/sync-on-one-dev/upload.d.ts +2 -0
  92. package/build/tests/caps-api/fs-checks/sync-on-one-dev/upload.js +194 -0
  93. package/build/tests/caps-api/fs-checks/sync-with-two-devs/conflicts.d.ts +2 -0
  94. package/build/tests/caps-api/fs-checks/sync-with-two-devs/conflicts.js +396 -0
  95. package/build/tests/caps-api/fs-checks/sync-with-two-devs/update-propagation.d.ts +2 -0
  96. package/build/tests/caps-api/fs-checks/sync-with-two-devs/update-propagation.js +229 -0
  97. package/build/tests/caps-api/fs-checks/test-utils.d.ts +34 -0
  98. package/build/tests/caps-api/fs-checks/test-utils.js +95 -0
  99. package/build/tests/caps-api/fs-checks/versioned/archiveCurrent.d.ts +2 -0
  100. package/build/tests/caps-api/fs-checks/versioned/archiveCurrent.js +73 -0
  101. package/build/tests/caps-api/fs-checks/versioned/getByteSink.d.ts +2 -0
  102. package/build/tests/caps-api/fs-checks/versioned/getByteSink.js +122 -0
  103. package/build/tests/caps-api/fs-checks/versioned/getByteSource.d.ts +2 -0
  104. package/build/tests/caps-api/fs-checks/versioned/getByteSource.js +71 -0
  105. package/build/tests/caps-api/fs-checks/versioned/listFolder.d.ts +2 -0
  106. package/build/tests/caps-api/fs-checks/versioned/listFolder.js +109 -0
  107. package/build/tests/caps-api/fs-checks/versioned/listVersions.d.ts +2 -0
  108. package/build/tests/caps-api/fs-checks/versioned/listVersions.js +48 -0
  109. package/build/tests/caps-api/fs-checks/versioned/readBytes.d.ts +2 -0
  110. package/build/tests/caps-api/fs-checks/versioned/readBytes.js +90 -0
  111. package/build/tests/caps-api/fs-checks/versioned/readJSONFile.d.ts +2 -0
  112. package/build/tests/caps-api/fs-checks/versioned/readJSONFile.js +60 -0
  113. package/build/tests/caps-api/fs-checks/versioned/readTxtFile.d.ts +2 -0
  114. package/build/tests/caps-api/fs-checks/versioned/readTxtFile.js +56 -0
  115. package/build/tests/caps-api/fs-checks/versioned/stat.d.ts +2 -0
  116. package/build/tests/caps-api/fs-checks/versioned/stat.js +80 -0
  117. package/build/tests/caps-api/fs-checks/versioned/watchFile.d.ts +2 -0
  118. package/build/tests/caps-api/fs-checks/versioned/watchFile.js +64 -0
  119. package/build/tests/caps-api/fs-checks/versioned/writeBytes.d.ts +2 -0
  120. package/build/tests/caps-api/fs-checks/versioned/writeBytes.js +128 -0
  121. package/build/tests/caps-api/fs-checks/versioned/writeJSONFile.d.ts +2 -0
  122. package/build/tests/caps-api/fs-checks/versioned/writeJSONFile.js +111 -0
  123. package/build/tests/caps-api/fs-checks/versioned/writeTxtFile.d.ts +2 -0
  124. package/build/tests/caps-api/fs-checks/versioned/writeTxtFile.js +107 -0
  125. package/build/tests/caps-api/fs-checks/with-core-restarts/xattrs.d.ts +2 -0
  126. package/build/tests/caps-api/fs-checks/with-core-restarts/xattrs.js +50 -0
  127. package/build/tests/caps-api/keyrings.js +69 -0
  128. package/build/tests/caps-api/mailerid.d.ts +1 -0
  129. package/build/tests/caps-api/mailerid.js +59 -0
  130. package/build/tests/caps-api/startup/signin-empty-cache.d.ts +1 -0
  131. package/build/tests/caps-api/startup/signin-empty-cache.js +108 -0
  132. package/build/tests/caps-api/startup/signin-with-cache.d.ts +1 -0
  133. package/build/tests/caps-api/startup/signin-with-cache.js +83 -0
  134. package/build/tests/caps-api/startup/signup-with-token.d.ts +1 -0
  135. package/build/tests/caps-api/startup/signup-with-token.js +53 -0
  136. package/build/tests/caps-api/startup/signup.d.ts +1 -0
  137. package/build/tests/caps-api/startup/signup.js +86 -0
  138. package/build/tests/caps-api/storage.d.ts +1 -0
  139. package/build/tests/caps-api/storage.js +225 -0
  140. package/build/tests/computer.3nweb.core/id-manager.d.ts +1 -0
  141. package/build/tests/computer.3nweb.core/id-manager.js +78 -0
  142. package/build/tests/computer.3nweb.core/inbox/msg-indexing.d.ts +1 -0
  143. package/build/tests/computer.3nweb.core/inbox/msg-indexing.js +145 -0
  144. package/build/tests/computer.3nweb.core/keyrings.d.ts +1 -0
  145. package/build/tests/computer.3nweb.core/keyrings.js +64 -0
  146. package/build/tests/computer.3nweb.core/test-utils.d.ts +21 -0
  147. package/build/tests/computer.3nweb.core/test-utils.js +92 -0
  148. package/build/tests/jasmine.d.ts +1 -0
  149. package/build/tests/jasmine.js +45 -0
  150. package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
  151. package/build/tests/libs-for-tests/bytes-equal.js +32 -0
  152. package/build/tests/libs-for-tests/caps-ipc-wrap.d.ts +11 -0
  153. package/build/tests/libs-for-tests/caps-ipc-wrap.js +55 -0
  154. package/build/tests/libs-for-tests/core-runner.d.ts +39 -0
  155. package/build/tests/libs-for-tests/core-runner.js +231 -0
  156. package/build/tests/libs-for-tests/jasmine-utils.d.ts +13 -0
  157. package/build/tests/libs-for-tests/jasmine-utils.js +110 -0
  158. package/build/tests/libs-for-tests/json-equal.d.ts +1 -0
  159. package/build/tests/libs-for-tests/json-equal.js +78 -0
  160. package/build/tests/libs-for-tests/services-runner.d.ts +18 -0
  161. package/build/tests/libs-for-tests/services-runner.js +64 -0
  162. package/build/tests/libs-for-tests/setups.d.ts +51 -0
  163. package/build/tests/libs-for-tests/setups.js +305 -0
  164. package/build/tests/libs-for-tests/spec-module.d.ts +16 -0
  165. package/build/tests/libs-for-tests/spec-module.js +92 -0
  166. package/build/tests/libs-for-tests/startup.d.ts +1 -0
  167. package/build/tests/libs-for-tests/startup.js +29 -0
  168. package/build/tests/libs-for-tests/watching.d.ts +7 -0
  169. package/build/tests/libs-for-tests/watching.js +33 -0
  170. package/build/tests/units/canonical-address.d.ts +1 -0
  171. package/build/tests/units/canonical-address.js +41 -0
  172. package/build/tests/units/device-fs.d.ts +1 -0
  173. package/build/tests/units/device-fs.js +70 -0
  174. package/build/tests/units/folder-node-serialization.d.ts +1 -0
  175. package/build/tests/units/folder-node-serialization.js +74 -0
  176. package/build/tests/units/mid-sigs-NaCl-Ed.d.ts +1 -0
  177. package/build/tests/units/mid-sigs-NaCl-Ed.js +123 -0
  178. package/build/tests/units/number-line.d.ts +1 -0
  179. package/build/tests/units/number-line.js +63 -0
  180. package/build/tests/units/obj-folders.d.ts +1 -0
  181. package/build/tests/units/obj-folders.js +152 -0
  182. package/package.json +11 -3
  183. package/postinstall.js +1 -1
  184. package/build/cryptors.d.ts +0 -1
  185. package/build/cryptors.js +0 -34
  186. package/build/lib-client/cryptor/cryptor-in-worker.d.ts +0 -20
  187. package/build/lib-client/cryptor/cryptor-in-worker.js +0 -357
  188. package/build/lib-client/cryptor/cryptor-wasm.js +0 -1
  189. package/build/lib-client/cryptor/cryptor.d.ts +0 -30
  190. package/build/lib-client/cryptor/cryptor.js +0 -44
  191. package/build/lib-client/cryptor/cryptor.wasm +0 -0
  192. package/build/lib-client/cryptor/in-proc-js.d.ts +0 -2
  193. package/build/lib-client/cryptor/in-proc-js.js +0 -57
  194. package/build/lib-client/cryptor/in-proc-wasm.d.ts +0 -2
  195. package/build/lib-client/cryptor/in-proc-wasm.js +0 -176
  196. package/build/lib-client/cryptor/serialization-for-wasm.d.ts +0 -35
  197. package/build/lib-client/cryptor/serialization-for-wasm.js +0 -57
  198. package/build/lib-client/cryptor/wasm-mp1-modules.d.ts +0 -5
  199. package/build/lib-client/cryptor/wasm-mp1-modules.js +0 -78
  200. package/build/lib-client/cryptor/worker-js.js +0 -131
  201. package/build/lib-client/cryptor/worker-wasm.js +0 -37
  202. package/build/protos/cryptor.proto.js +0 -1804
  203. /package/build/lib-client/{cryptor/cryptor-work-labels.d.ts → cryptor-work-labels.d.ts} +0 -0
  204. /package/build/lib-client/{cryptor/cryptor-work-labels.js → cryptor-work-labels.js} +0 -0
  205. /package/build/{lib-client/cryptor/worker-js.d.ts → tests/caps-api/asmail.d.ts} +0 -0
  206. /package/build/{lib-client/cryptor/worker-wasm.d.ts → tests/caps-api/keyrings.d.ts} +0 -0
@@ -21,7 +21,7 @@ exports.openMsg = openMsg;
21
21
  const buffer_utils_1 = require("../../../lib-common/buffer-utils");
22
22
  const error_1 = require("../../../lib-common/exceptions/error");
23
23
  const xsp_files_1 = require("xsp-files");
24
- const cryptor_work_labels_1 = require("../../../lib-client/cryptor/cryptor-work-labels");
24
+ const cryptor_work_labels_1 = require("../../../lib-client/cryptor-work-labels");
25
25
  class OpenedMsg {
26
26
  constructor(msgId, main) {
27
27
  this.msgId = msgId;
@@ -24,7 +24,7 @@ const buffer_utils_1 = require("../../../lib-common/buffer-utils");
24
24
  const folder_node_serialization_1 = require("../../../lib-client/xsp-fs/folder-node-serialization");
25
25
  const json_utils_1 = require("../../../lib-common/json-utils");
26
26
  const attachments_container_1 = require("./attachments-container");
27
- const cryptor_work_labels_1 = require("../../../lib-client/cryptor/cryptor-work-labels");
27
+ const cryptor_work_labels_1 = require("../../../lib-client/cryptor-work-labels");
28
28
  function turnKeysToB64(obj) {
29
29
  obj.key = buffer_utils_1.base64.pack(obj.key);
30
30
  if (!obj.folder) {
@@ -1,7 +1,8 @@
1
1
  import { FactoryOfFSs } from './storage';
2
- import { makeCryptor } from '../lib-client/cryptor/cryptor';
3
2
  import { NetClient } from '../lib-client/request-utils';
4
3
  import { ServiceLocatorMaker } from '../lib-client/service-locator';
4
+ import type { makeCryptor } from 'ecma-nacl-cryptors';
5
+ export type { makeCryptor } from 'ecma-nacl-cryptors';
5
6
  type RequestedCAPs = web3n.caps.common.RequestedCAPs;
6
7
  type W3N = web3n.caps.common.W3N;
7
8
  type ProgressCB = web3n.startup.ProgressCB;
@@ -58,4 +59,3 @@ export declare class Core {
58
59
  storage$: import("rxjs").Observable<import("./storage/synced/remote-events").StorageConnectionStatus>;
59
60
  };
60
61
  }
61
- export {};
@@ -27,7 +27,7 @@ const ecma_nacl_1 = require("ecma-nacl");
27
27
  const buffer_utils_1 = require("../../lib-common/buffer-utils");
28
28
  const error_1 = require("../../lib-common/exceptions/error");
29
29
  const async_cryptor_wrap_1 = require("../../lib-common/async-cryptor-wrap");
30
- const cryptor_work_labels_1 = require("../../lib-client/cryptor/cryptor-work-labels");
30
+ const cryptor_work_labels_1 = require("../../lib-client/cryptor-work-labels");
31
31
  function generatePids() {
32
32
  const pids = [];
33
33
  for (let i = 0; i < 5; i += 1) {
@@ -27,7 +27,7 @@ const buffer_utils_1 = require("../../lib-common/buffer-utils");
27
27
  const canonical_address_1 = require("../../lib-common/canonical-address");
28
28
  const common_2 = require("../asmail/delivery/common");
29
29
  const keyring_storage_1 = require("./keyring-storage");
30
- const cryptor_work_labels_1 = require("../../lib-client/cryptor/cryptor-work-labels");
30
+ const cryptor_work_labels_1 = require("../../lib-client/cryptor-work-labels");
31
31
  const published_intro_key_1 = require("./published-intro-key");
32
32
  var common_3 = require("./common");
33
33
  Object.defineProperty(exports, "KEY_USE", { enumerable: true, get: function () { return common_3.KEY_USE; } });
@@ -1,7 +1,7 @@
1
1
  import { ScryptGenParams } from '../../lib-client/key-derivation';
2
2
  import type { GetUsersOnDisk } from '../app-files';
3
- import { Cryptor } from '../../lib-client/cryptor/cryptor';
4
3
  import { LogError } from '../../lib-client/logging/log-to-file';
4
+ import type { Cryptor } from 'ecma-nacl-cryptors';
5
5
  export type GenerateKey = (derivParams: ScryptGenParams) => Promise<Uint8Array>;
6
6
  export type StartInitWithoutCache = (address: string) => Promise<CompleteInitWithoutCache | undefined>;
7
7
  export type CompleteInitWithoutCache = (midLoginKey: GenerateKey, storageKey: GenerateKey) => Promise<boolean>;
@@ -1,8 +1,8 @@
1
1
  import { NetClient } from '../../lib-client/request-utils';
2
2
  import * as keyDeriv from '../../lib-client/key-derivation';
3
3
  import type { GetUsersOnDisk } from '../app-files';
4
- import { Cryptor } from '../../lib-client/cryptor/cryptor';
5
4
  import { LogError } from '../../lib-client/logging/log-to-file';
5
+ import type { Cryptor } from 'ecma-nacl-cryptors';
6
6
  type JsonKey = web3n.keys.JsonKey;
7
7
  export interface ScryptGenParams {
8
8
  logN: number;
@@ -7,7 +7,7 @@ import { AsyncSBoxCryptor } from 'xsp-files';
7
7
  import { StoragePathForUser } from '../app-files';
8
8
  import { LogError } from '../../lib-client/logging/log-to-file';
9
9
  import { MakeNet } from '..';
10
- import { Cryptor } from '../../cryptors';
10
+ import type { Cryptor } from 'ecma-nacl-cryptors';
11
11
  type WritableFS = web3n.files.WritableFS;
12
12
  type StorageType = web3n.storage.StorageType;
13
13
  type FSItem = web3n.files.FSItem;
@@ -1,4 +1,4 @@
1
- import { Cryptor } from './cryptor/cryptor';
1
+ import type { Cryptor } from 'ecma-nacl-cryptors';
2
2
  type JsonKey = web3n.keys.JsonKey;
3
3
  export interface ScryptGenParams {
4
4
  logN: number;
@@ -2,11 +2,12 @@ import { Attrs } from "./node-persistence";
2
2
  export declare class CommonAttrs {
3
3
  ctime: number;
4
4
  mtime: number;
5
- constructor(ctime: number, mtime: number);
5
+ size: number;
6
+ constructor(ctime: number, mtime: number, size: number);
6
7
  static makeForTimeNow(): CommonAttrs;
7
8
  static fromAttrs(attrs: Attrs): CommonAttrs;
8
9
  static readonly PACK_LEN: number;
9
- static parse(bytes: Uint8Array): CommonAttrs;
10
+ static parse(bytes: Uint8Array, entitySize: any): CommonAttrs;
10
11
  pack(): Buffer;
11
12
  copy(): CommonAttrs;
12
13
  updateMTime(): void;
@@ -22,25 +22,26 @@ const buffer_utils_1 = require("../../lib-common/buffer-utils");
22
22
  const big_endian_1 = require("../../lib-common/big-endian");
23
23
  const runtime_1 = require("../../lib-common/exceptions/runtime");
24
24
  class CommonAttrs {
25
- constructor(ctime, mtime) {
25
+ constructor(ctime, mtime, size) {
26
26
  this.ctime = ctime;
27
27
  this.mtime = mtime;
28
+ this.size = size;
28
29
  Object.seal(this);
29
30
  }
30
31
  static makeForTimeNow() {
31
32
  const now = Date.now();
32
- return new CommonAttrs(now, now);
33
+ return new CommonAttrs(now, now, 0);
33
34
  }
34
35
  static fromAttrs(attrs) {
35
- return new CommonAttrs(attrs.ctime, attrs.mtime);
36
+ return new CommonAttrs(attrs.ctime, attrs.mtime, attrs.size);
36
37
  }
37
- static parse(bytes) {
38
+ static parse(bytes, entitySize) {
38
39
  if (bytes.length < CommonAttrs.PACK_LEN) {
39
40
  throw parsingException(`byte array is too short`);
40
41
  }
41
42
  const ctime = (0, big_endian_1.uintFrom6Bytes)(bytes, 0);
42
43
  const mtime = (0, big_endian_1.uintFrom6Bytes)(bytes, 6);
43
- return new CommonAttrs(ctime, mtime);
44
+ return new CommonAttrs(ctime, mtime, entitySize);
44
45
  }
45
46
  pack() {
46
47
  const bytes = Buffer.allocUnsafe(CommonAttrs.PACK_LEN);
@@ -49,7 +50,7 @@ class CommonAttrs {
49
50
  return bytes;
50
51
  }
51
52
  copy() {
52
- return new CommonAttrs(this.ctime, this.mtime);
53
+ return new CommonAttrs(this.ctime, this.mtime, this.size);
53
54
  }
54
55
  updateMTime() {
55
56
  this.mtime = Date.now();
@@ -46,7 +46,7 @@ function jsonToInfoAndAttrs(json) {
46
46
  node.key = buffer_utils_1.base64.open(node.key);
47
47
  }
48
48
  checkFolderInfo(folderInfo);
49
- const attrs = new attrs_1.CommonAttrs(json.ctime, json.ctime);
49
+ const attrs = new attrs_1.CommonAttrs(json.ctime, json.ctime, 4096);
50
50
  return { attrs, folderInfo };
51
51
  }
52
52
  class FolderPersistance extends node_persistence_1.NodePersistance {
@@ -165,6 +165,7 @@ class NodeInFS {
165
165
  ctime: new Date(attrs.ctime),
166
166
  mtime: new Date(attrs.mtime),
167
167
  version,
168
+ size: attrs.size,
168
169
  writable: false,
169
170
  };
170
171
  switch (this.type) {
@@ -25,7 +25,7 @@ const xsp_files_1 = require("xsp-files");
25
25
  const buffer_utils_1 = require("../../lib-common/buffer-utils");
26
26
  const deferred_1 = require("../../lib-common/processes/deferred");
27
27
  const random = require("../../lib-common/random-node");
28
- const cryptor_work_labels_1 = require("../cryptor/cryptor-work-labels");
28
+ const cryptor_work_labels_1 = require("../cryptor-work-labels");
29
29
  const pv1 = require("./xsp-payload-v1");
30
30
  const pv2 = require("./xsp-payload-v2");
31
31
  const SEG_SIZE = 16; // in 256-byte blocks = 4K in bytes
@@ -839,7 +839,7 @@ var payloadV2;
839
839
  const layoutBytes = await sureReadOfBytesFrom(src, sectionsEnd, layoutLen);
840
840
  let ofs = 0;
841
841
  // - parse common attrs
842
- const attrs = attrs_1.CommonAttrs.parse(layoutBytes);
842
+ const attrs = attrs_1.CommonAttrs.parse(layoutBytes, srcLen);
843
843
  ofs += attrs_1.CommonAttrs.PACK_LEN;
844
844
  // - parse sections
845
845
  const { contentSections, xattrsSections } = parseSections(layoutBytes, ofs);
@@ -0,0 +1,2 @@
1
+ import { SpecDescribe } from '../../../libs-for-tests/spec-module';
2
+ export declare const specs: SpecDescribe;
@@ -0,0 +1,63 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2017 - 2018, 2020 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.specs = void 0;
20
+ const test_utils_1 = require("../test-utils");
21
+ exports.specs = {
22
+ description: '.subscribe',
23
+ its: []
24
+ };
25
+ const it = {
26
+ expectation: `delivers new messages to listeners of event 'message'`
27
+ };
28
+ it.func = async function (s) {
29
+ const u1_w3n = s.testAppCapsByUserIndex(0);
30
+ const u2 = s.users[1];
31
+ const u2_w3n = s.testAppCapsByUser(u2);
32
+ // user 2 starts listening for events, collecting 'em into an array
33
+ const incomingMsgs = [];
34
+ const receptionPromise = new Promise((resolve, reject) => {
35
+ u2_w3n.mail.inbox.subscribe('message', {
36
+ next: (msg) => {
37
+ incomingMsgs.push(msg);
38
+ // promise will resolve when at least two messages come
39
+ if (incomingMsgs.length >= 2) {
40
+ resolve(incomingMsgs);
41
+ }
42
+ },
43
+ error: reject
44
+ });
45
+ });
46
+ const txtBody1 = 'Some text\nBlah-blah-blah';
47
+ const txtBody2 = 'Another text message';
48
+ // user 1 sends messages to user 2
49
+ const msgId1 = await (0, test_utils_1.sendTxtMsg)(u1_w3n, u2.userId, txtBody1);
50
+ expect(msgId1).toBeTruthy();
51
+ const msgId2 = await (0, test_utils_1.sendTxtMsg)(u1_w3n, u2.userId, txtBody2);
52
+ expect(msgId2).toBeTruthy();
53
+ // user 2 gets incoming message
54
+ await receptionPromise;
55
+ [[msgId1, txtBody1], [msgId2, txtBody2]]
56
+ .forEach(([msgId, txtBody]) => {
57
+ const msg = incomingMsgs.find(m => (m.msgId === msgId));
58
+ expect(msg).withContext(`message ${msgId} should be present in a list of all messages`).toBeTruthy();
59
+ expect(msg.plainTxtBody).toBe(txtBody);
60
+ });
61
+ };
62
+ exports.specs.its.push(it);
63
+ Object.freeze(exports);
@@ -0,0 +1,2 @@
1
+ import { SpecDescribe } from '../../../libs-for-tests/spec-module';
2
+ export declare const specs: SpecDescribe;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2016 - 2018, 2020, 2024 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.specs = void 0;
20
+ exports.specs = {
21
+ description: '.sendMsg',
22
+ its: []
23
+ };
24
+ const it = {
25
+ expectation: 'send message to unknown user'
26
+ };
27
+ it.func = async function (s) {
28
+ const u = s.users[0];
29
+ const w3n = s.testAppCapsByUser(u);
30
+ const txtBody = 'Some text\nBlah-blah-blah';
31
+ const recipient = `Unknown ${u.userId}`;
32
+ // user 1 sends message to user 2
33
+ const msg = {
34
+ msgType: 'mail',
35
+ plainTxtBody: txtBody
36
+ };
37
+ // start sending
38
+ const idForSending = 'q2w3e';
39
+ await w3n.mail.delivery.addMsg([recipient], msg, idForSending);
40
+ // register delivery progress callback
41
+ const notifs = [];
42
+ // observe, while waiting for delivery completion
43
+ const observation = new Promise(async (resolve, reject) => {
44
+ const observer = {
45
+ next: (p) => { notifs.push(p); },
46
+ complete: resolve, error: reject
47
+ };
48
+ const cbDetach = w3n.mail.delivery.observeDelivery(idForSending, observer);
49
+ expect(typeof cbDetach).toBe('function');
50
+ });
51
+ expect(await w3n.mail.delivery.currentState(idForSending)).toBeTruthy();
52
+ // notifications should have something
53
+ await observation;
54
+ // test on localhost may complete requestbefore observation start
55
+ if (notifs.length > 0) {
56
+ const lastInfo = notifs[notifs.length - 1];
57
+ expect(lastInfo).withContext('There has to be at least one event fired').toBeTruthy();
58
+ // it has to be an error
59
+ expect(typeof lastInfo.recipients[recipient].err).toBe('object');
60
+ const exc = lastInfo.recipients[recipient].err;
61
+ expect(exc.unknownRecipient).toBe(true);
62
+ expect(typeof lastInfo.recipients[recipient].idOnDelivery).toBe('undefined');
63
+ }
64
+ await w3n.mail.delivery.rmMsg(idForSending);
65
+ expect(await w3n.mail.delivery.currentState(idForSending)).toBeFalsy();
66
+ };
67
+ exports.specs.its.push(it);
68
+ Object.freeze(exports);
@@ -0,0 +1,2 @@
1
+ import { SpecDescribe } from '../../../libs-for-tests/spec-module';
2
+ export declare const specs: SpecDescribe;
@@ -0,0 +1,259 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2016 - 2018, 2020, 2025 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.specs = void 0;
20
+ const random_node_1 = require("../../../../lib-common/random-node");
21
+ const test_utils_1 = require("../test-utils");
22
+ const sleep_1 = require("../../../../lib-common/processes/sleep");
23
+ const random_node_2 = require("../../../../lib-common/random-node");
24
+ const files = [{
25
+ content: 'This is file content for file #1',
26
+ name: 'file1'
27
+ }, {
28
+ content: 'Content for file #2 (longer file)\n' + (0, random_node_1.stringOfB64CharsSync)(100000),
29
+ name: 'file2'
30
+ }];
31
+ const folder = {
32
+ name: 'parent folder',
33
+ files: [files[0]],
34
+ folders: [{
35
+ name: 'child folder 1',
36
+ files: [files[0]],
37
+ folders: []
38
+ }, {
39
+ name: 'child folder 2',
40
+ files: [files[1]],
41
+ folders: []
42
+ }]
43
+ };
44
+ exports.specs = {
45
+ description: '.sendMsg',
46
+ its: []
47
+ };
48
+ let it = {
49
+ expectation: 'sending and getting message with attachments from synced fs'
50
+ };
51
+ it.func = async function (s) {
52
+ const u1_w3n = s.testAppCapsByUserIndex(0);
53
+ const u2 = s.users[1];
54
+ const txtBody = 'Some text\nBlah-blah-blah';
55
+ // user 1 sends message to user 2
56
+ const recipient = u2.userId;
57
+ // make fs objects for attachment
58
+ const appFS = await u1_w3n.storage.getAppSyncedFS('app.3nweb.test');
59
+ const filesToAttach = [];
60
+ for (const fp of files) {
61
+ const path = fp.name;
62
+ await appFS.writeTxtFile(path, fp.content);
63
+ const file = await appFS.readonlyFile(path);
64
+ filesToAttach.push(file);
65
+ }
66
+ const makeFolderIn = async (parent, folder) => {
67
+ const fs = await parent.writableSubRoot(folder.name);
68
+ for (const fp of folder.files) {
69
+ await fs.writeTxtFile(fp.name, fp.content);
70
+ }
71
+ for (const fp of folder.folders) {
72
+ await makeFolderIn(fs, fp);
73
+ }
74
+ return fs;
75
+ };
76
+ const folderToAttach = await makeFolderIn(appFS, folder);
77
+ // put together and send message
78
+ const outMsg = {
79
+ msgType: 'mail',
80
+ plainTxtBody: txtBody
81
+ };
82
+ outMsg.attachments = { files: {}, folders: {} };
83
+ for (const file of filesToAttach) {
84
+ outMsg.attachments.files[file.name] = file;
85
+ }
86
+ outMsg.attachments.folders[folderToAttach.name] = folderToAttach;
87
+ const idForSending = 'a1b2';
88
+ await u1_w3n.mail.delivery.addMsg([recipient], outMsg, idForSending);
89
+ expect(await u1_w3n.mail.delivery.currentState(idForSending)).toBeTruthy();
90
+ const notifs = [];
91
+ await new Promise((resolve, reject) => {
92
+ const observer = {
93
+ next: (p) => { notifs.push(p); },
94
+ complete: resolve, error: reject
95
+ };
96
+ const cbDetach = u1_w3n.mail.delivery.observeDelivery(idForSending, observer);
97
+ expect(typeof cbDetach).toBe('function');
98
+ });
99
+ expect(notifs.length).toBeGreaterThan(0);
100
+ const lastInfo = notifs[notifs.length - 1];
101
+ expect(typeof lastInfo).toBe('object');
102
+ expect(lastInfo.allDone).toBe('all-ok');
103
+ (0, test_utils_1.throwDeliveryErrorFrom)(lastInfo);
104
+ await u1_w3n.mail.delivery.rmMsg(idForSending);
105
+ expect(await u1_w3n.mail.delivery.currentState(idForSending)).toBeFalsy();
106
+ const recInfo = lastInfo.recipients[recipient];
107
+ expect(typeof recInfo.idOnDelivery).toBe('string');
108
+ const msgId = recInfo.idOnDelivery;
109
+ expect(msgId).toBeTruthy();
110
+ // user 2 gets incoming message after some delay
111
+ await (0, sleep_1.sleep)(500);
112
+ const u2_w3n = s.testAppCapsByUser(u2);
113
+ // check message
114
+ const msgs = await u2_w3n.mail.inbox.listMsgs();
115
+ const msgInfo = msgs.find(m => (m.msgId === msgId));
116
+ expect(msgInfo).withContext(`message ${msgId} should be present in a list of all messages`).toBeTruthy();
117
+ const inMsg = await u2_w3n.mail.inbox.getMsg(msgId);
118
+ expect(inMsg).toBeTruthy();
119
+ expect(inMsg.plainTxtBody).toBe(txtBody);
120
+ // check attachments presence
121
+ expect(inMsg.attachments).withContext(`attachments should be present in message ${msgId}`).toBeDefined();
122
+ const attachments = inMsg.attachments;
123
+ if (!attachments) {
124
+ throw new Error(`skipping further checks`);
125
+ }
126
+ expect(attachments.writable).toBeFalse();
127
+ // check files in attachments
128
+ for (const fp of files) {
129
+ expect(await attachments.readTxtFile(fp.name)).withContext(`file content should be exactly what has been sent`).toBe(fp.content);
130
+ await (0, sleep_1.sleep)(10);
131
+ const file = await attachments.readonlyFile(fp.name);
132
+ expect(file.writable).toBeFalse();
133
+ expect(await file.readTxt()).toBe(fp.content);
134
+ }
135
+ // check folder in attachments
136
+ const checkFolderIn = async (parent, params) => {
137
+ expect(await parent.checkFolderPresence(params.name)).withContext(`folder ${params.name} should be present in ${parent.name}`).toBe(true);
138
+ const fs = await parent.readonlySubRoot(params.name);
139
+ expect(fs.writable).toBeFalse();
140
+ for (const fp of params.files) {
141
+ expect(await fs.readTxtFile(fp.name)).withContext(`file content should be exactly what has been sent`).toBe(fp.content);
142
+ }
143
+ for (const fp of params.folders) {
144
+ await checkFolderIn(fs, fp);
145
+ }
146
+ };
147
+ await checkFolderIn(attachments, folder);
148
+ };
149
+ exports.specs.its.push(it);
150
+ async function doRoundTripSendingToEstablishInvites(u1, u1_w3n, u2, u2_w3n) {
151
+ // send message from 1 to 2
152
+ await (0, test_utils_1.sendTxtMsg)(u1_w3n, u2.userId, 'some text');
153
+ // read message from 1, and send reply, which establishes channel with invite
154
+ await u2_w3n.mail.inbox.listMsgs();
155
+ const msg = {
156
+ msgType: 'mail',
157
+ plainTxtBody: 'some text'
158
+ };
159
+ const idForSending = 'h3j4k5';
160
+ await u2_w3n.mail.delivery.addMsg([u1.userId], msg, idForSending);
161
+ await new Promise((resolve, reject) => {
162
+ u2_w3n.mail.delivery.observeDelivery(idForSending, { complete: resolve, error: reject });
163
+ });
164
+ await u2_w3n.mail.delivery.rmMsg(idForSending);
165
+ // read message from 2, to pick up established channel with invite
166
+ await u1_w3n.mail.inbox.listMsgs();
167
+ }
168
+ it = {
169
+ expectation: 'sending and getting message with MBs attachment'
170
+ };
171
+ it.func = async function (s) {
172
+ // XXX While this runs, storage call gets stopFromOtherSide=true ipc exception.
173
+ // And it isn't clear why. It looks like stop comes from an afterAll
174
+ // cleanup.
175
+ // On windows in vm this fail happens consistently.
176
+ const u1 = s.users[0];
177
+ const u1_w3n = s.testAppCapsByUser(u1, false);
178
+ const u2 = s.users[1];
179
+ const u2_w3n = s.testAppCapsByUser(u2, false);
180
+ // send small messages to establish trusted channel, else we hit a limit
181
+ // for a message from an unknown sender
182
+ await doRoundTripSendingToEstablishInvites(u1, u1_w3n, u2, u2_w3n);
183
+ // this text body will be used as a known end of long attachment, which
184
+ // recipient will check.
185
+ const txtBody = (0, random_node_1.stringOfB64CharsSync)(1000);
186
+ const fileName = 'big file';
187
+ // user 1 sends message to user 2
188
+ const recipient = u2.userId;
189
+ // make big file for attachment
190
+ const appFS = await u1_w3n.storage.getAppSyncedFS('app.3nweb.test');
191
+ // fingerprint bytes at the end
192
+ const endBytes = new Uint8Array(txtBody.split('').map(char => char.charCodeAt(0)));
193
+ const bytesToFile = new Uint8Array(3000000 + endBytes.length);
194
+ const rand = await (0, random_node_2.bytes)(1000);
195
+ for (let ofs = 0; ofs < 3000000; ofs += 1000) {
196
+ bytesToFile.set(rand, 1000);
197
+ }
198
+ bytesToFile.set(endBytes, 3000000);
199
+ await appFS.writeBytes(fileName, bytesToFile, { create: true });
200
+ // put together and send message
201
+ const outMsg = {
202
+ msgType: 'mail',
203
+ plainTxtBody: txtBody
204
+ };
205
+ outMsg.attachments = { files: {} };
206
+ outMsg.attachments.files[fileName] = await appFS.readonlyFile(fileName);
207
+ const idForSending = 'q2w3e4';
208
+ await u1_w3n.mail.delivery.addMsg([recipient], outMsg, idForSending);
209
+ expect(await u1_w3n.mail.delivery.currentState(idForSending)).toBeTruthy();
210
+ const notifs = [];
211
+ await new Promise((resolve, reject) => {
212
+ const observer = {
213
+ next: (p) => { notifs.push(p); },
214
+ complete: resolve, error: reject
215
+ };
216
+ const cbDetach = u1_w3n.mail.delivery.observeDelivery(idForSending, observer);
217
+ expect(typeof cbDetach).toBe('function');
218
+ });
219
+ expect(notifs.length).toBeGreaterThan(0);
220
+ const lastInfo = notifs[notifs.length - 1];
221
+ expect(typeof lastInfo).toBe('object');
222
+ expect(lastInfo.allDone).toBe('all-ok');
223
+ (0, test_utils_1.throwDeliveryErrorFrom)(lastInfo);
224
+ await u1_w3n.mail.delivery.rmMsg(idForSending);
225
+ expect(await u1_w3n.mail.delivery.currentState(idForSending)).toBeFalsy();
226
+ const recInfo = lastInfo.recipients[recipient];
227
+ expect(typeof recInfo.idOnDelivery).toBe('string');
228
+ const msgId = recInfo.idOnDelivery;
229
+ expect(msgId).toBeTruthy();
230
+ // user 2 gets incoming message, after a little wait
231
+ await (0, sleep_1.sleep)(500);
232
+ // check message
233
+ const msgs = await u2_w3n.mail.inbox.listMsgs();
234
+ const msgInfo = msgs.find(m => (m.msgId === msgId));
235
+ expect(msgInfo).withContext(`message ${msgId} should be present in a list of all messages`).toBeTruthy();
236
+ const inMsg = await u2_w3n.mail.inbox.getMsg(msgId);
237
+ expect(inMsg).toBeTruthy();
238
+ expect(inMsg.plainTxtBody).toBe(txtBody);
239
+ // check attachments presence
240
+ expect(!!inMsg.attachments).withContext(`attachments should be present in message ${msgId}`).toBe(true);
241
+ const attachments = inMsg.attachments;
242
+ if (!attachments) {
243
+ throw new Error(`skipping further checks`);
244
+ }
245
+ // check file attachment
246
+ const fileBytes = await attachments.readBytes(fileName);
247
+ // fingerprint bytes at the end
248
+ const receivedEndBytes = new Uint8Array(txtBody.split('').map(char => char.charCodeAt(0)));
249
+ const fileEnd = fileBytes.subarray(fileBytes.length - receivedEndBytes.length);
250
+ for (let i = 0; i < fileEnd.length; i += 1) {
251
+ if (fileEnd[i] !== receivedEndBytes[i]) {
252
+ throw new Error(`Byte at position ${i} in the end part of an attachment is not as expected`);
253
+ }
254
+ }
255
+ };
256
+ it.timeout = 15 * 1000;
257
+ // XXX skip this, till we capture described above error
258
+ // specs.its.push(it);
259
+ Object.freeze(exports);
@@ -0,0 +1,2 @@
1
+ import { SpecDescribe } from '../../../libs-for-tests/spec-module';
2
+ export declare const specs: SpecDescribe;