core-3nweb-client-lib 0.44.12 → 0.45.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (209) 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/doh.d.ts +2 -0
  10. package/build/lib-client/doh.js +68 -0
  11. package/build/lib-client/key-derivation.d.ts +1 -1
  12. package/build/lib-client/request-utils.js +1 -1
  13. package/build/lib-client/service-checks.js +3 -11
  14. package/build/lib-client/service-locator.d.ts +10 -2
  15. package/build/lib-client/service-locator.js +40 -27
  16. package/build/lib-client/xsp-fs/node-persistence.js +1 -1
  17. package/build/lib-index.d.ts +1 -0
  18. package/build/lib-index.js +3 -1
  19. package/build/tests/caps-api/asmail/specs/events.d.ts +2 -0
  20. package/build/tests/caps-api/asmail/specs/events.js +63 -0
  21. package/build/tests/caps-api/asmail/specs/send-to-wrong-address.d.ts +2 -0
  22. package/build/tests/caps-api/asmail/specs/send-to-wrong-address.js +68 -0
  23. package/build/tests/caps-api/asmail/specs/send-with-attacment-from-storage.d.ts +2 -0
  24. package/build/tests/caps-api/asmail/specs/send-with-attacment-from-storage.js +259 -0
  25. package/build/tests/caps-api/asmail/specs/send-without-attachments.d.ts +2 -0
  26. package/build/tests/caps-api/asmail/specs/send-without-attachments.js +90 -0
  27. package/build/tests/caps-api/asmail/test-utils.d.ts +12 -0
  28. package/build/tests/caps-api/asmail/test-utils.js +60 -0
  29. package/build/tests/caps-api/asmail.js +86 -0
  30. package/build/tests/caps-api/file-sink-checks/different-cases.d.ts +2 -0
  31. package/build/tests/caps-api/file-sink-checks/different-cases.js +47 -0
  32. package/build/tests/caps-api/file-sink-checks/splice.d.ts +2 -0
  33. package/build/tests/caps-api/file-sink-checks/splice.js +122 -0
  34. package/build/tests/caps-api/file-sink-checks/truncate.d.ts +2 -0
  35. package/build/tests/caps-api/file-sink-checks/truncate.js +122 -0
  36. package/build/tests/caps-api/fs-checks/local-to-synced-linking/link.d.ts +2 -0
  37. package/build/tests/caps-api/fs-checks/local-to-synced-linking/link.js +82 -0
  38. package/build/tests/caps-api/fs-checks/local-to-synced-linking/reversed-linking.d.ts +2 -0
  39. package/build/tests/caps-api/fs-checks/local-to-synced-linking/reversed-linking.js +50 -0
  40. package/build/tests/caps-api/fs-checks/not-versioned/deleteFile.d.ts +2 -0
  41. package/build/tests/caps-api/fs-checks/not-versioned/deleteFile.js +73 -0
  42. package/build/tests/caps-api/fs-checks/not-versioned/deleteFolder.d.ts +2 -0
  43. package/build/tests/caps-api/fs-checks/not-versioned/deleteFolder.js +75 -0
  44. package/build/tests/caps-api/fs-checks/not-versioned/getByteSink.d.ts +2 -0
  45. package/build/tests/caps-api/fs-checks/not-versioned/getByteSink.js +96 -0
  46. package/build/tests/caps-api/fs-checks/not-versioned/getByteSource.d.ts +2 -0
  47. package/build/tests/caps-api/fs-checks/not-versioned/getByteSource.js +67 -0
  48. package/build/tests/caps-api/fs-checks/not-versioned/getXAttr.d.ts +2 -0
  49. package/build/tests/caps-api/fs-checks/not-versioned/getXAttr.js +77 -0
  50. package/build/tests/caps-api/fs-checks/not-versioned/link.d.ts +2 -0
  51. package/build/tests/caps-api/fs-checks/not-versioned/link.js +115 -0
  52. package/build/tests/caps-api/fs-checks/not-versioned/listFolder.d.ts +2 -0
  53. package/build/tests/caps-api/fs-checks/not-versioned/listFolder.js +129 -0
  54. package/build/tests/caps-api/fs-checks/not-versioned/listXAttrs.d.ts +2 -0
  55. package/build/tests/caps-api/fs-checks/not-versioned/listXAttrs.js +73 -0
  56. package/build/tests/caps-api/fs-checks/not-versioned/makeFolder.d.ts +2 -0
  57. package/build/tests/caps-api/fs-checks/not-versioned/makeFolder.js +95 -0
  58. package/build/tests/caps-api/fs-checks/not-versioned/move.d.ts +2 -0
  59. package/build/tests/caps-api/fs-checks/not-versioned/move.js +127 -0
  60. package/build/tests/caps-api/fs-checks/not-versioned/readBytes.d.ts +2 -0
  61. package/build/tests/caps-api/fs-checks/not-versioned/readBytes.js +80 -0
  62. package/build/tests/caps-api/fs-checks/not-versioned/readJSONFile.d.ts +2 -0
  63. package/build/tests/caps-api/fs-checks/not-versioned/readJSONFile.js +59 -0
  64. package/build/tests/caps-api/fs-checks/not-versioned/readLink.d.ts +2 -0
  65. package/build/tests/caps-api/fs-checks/not-versioned/readLink.js +39 -0
  66. package/build/tests/caps-api/fs-checks/not-versioned/readTxtFile.d.ts +2 -0
  67. package/build/tests/caps-api/fs-checks/not-versioned/readTxtFile.js +54 -0
  68. package/build/tests/caps-api/fs-checks/not-versioned/readonlyFile.d.ts +2 -0
  69. package/build/tests/caps-api/fs-checks/not-versioned/readonlyFile.js +55 -0
  70. package/build/tests/caps-api/fs-checks/not-versioned/readonlySubRoot.d.ts +2 -0
  71. package/build/tests/caps-api/fs-checks/not-versioned/readonlySubRoot.js +55 -0
  72. package/build/tests/caps-api/fs-checks/not-versioned/select.d.ts +2 -0
  73. package/build/tests/caps-api/fs-checks/not-versioned/select.js +119 -0
  74. package/build/tests/caps-api/fs-checks/not-versioned/stat.d.ts +2 -0
  75. package/build/tests/caps-api/fs-checks/not-versioned/stat.js +96 -0
  76. package/build/tests/caps-api/fs-checks/not-versioned/updateXAttrs.d.ts +2 -0
  77. package/build/tests/caps-api/fs-checks/not-versioned/updateXAttrs.js +126 -0
  78. package/build/tests/caps-api/fs-checks/not-versioned/writableFile.d.ts +2 -0
  79. package/build/tests/caps-api/fs-checks/not-versioned/writableFile.js +79 -0
  80. package/build/tests/caps-api/fs-checks/not-versioned/writableSubRoot.d.ts +2 -0
  81. package/build/tests/caps-api/fs-checks/not-versioned/writableSubRoot.js +90 -0
  82. package/build/tests/caps-api/fs-checks/not-versioned/writeBytes.d.ts +2 -0
  83. package/build/tests/caps-api/fs-checks/not-versioned/writeBytes.js +137 -0
  84. package/build/tests/caps-api/fs-checks/not-versioned/writeJSONFile.d.ts +2 -0
  85. package/build/tests/caps-api/fs-checks/not-versioned/writeJSONFile.js +101 -0
  86. package/build/tests/caps-api/fs-checks/not-versioned/writeTxtFile.d.ts +2 -0
  87. package/build/tests/caps-api/fs-checks/not-versioned/writeTxtFile.js +100 -0
  88. package/build/tests/caps-api/fs-checks/sync-on-one-dev/startUpload.d.ts +2 -0
  89. package/build/tests/caps-api/fs-checks/sync-on-one-dev/startUpload.js +187 -0
  90. package/build/tests/caps-api/fs-checks/sync-on-one-dev/stat.d.ts +2 -0
  91. package/build/tests/caps-api/fs-checks/sync-on-one-dev/stat.js +70 -0
  92. package/build/tests/caps-api/fs-checks/sync-on-one-dev/status.d.ts +2 -0
  93. package/build/tests/caps-api/fs-checks/sync-on-one-dev/status.js +53 -0
  94. package/build/tests/caps-api/fs-checks/sync-on-one-dev/upload.d.ts +2 -0
  95. package/build/tests/caps-api/fs-checks/sync-on-one-dev/upload.js +194 -0
  96. package/build/tests/caps-api/fs-checks/sync-with-two-devs/conflicts.d.ts +2 -0
  97. package/build/tests/caps-api/fs-checks/sync-with-two-devs/conflicts.js +396 -0
  98. package/build/tests/caps-api/fs-checks/sync-with-two-devs/update-propagation.d.ts +2 -0
  99. package/build/tests/caps-api/fs-checks/sync-with-two-devs/update-propagation.js +229 -0
  100. package/build/tests/caps-api/fs-checks/test-utils.d.ts +34 -0
  101. package/build/tests/caps-api/fs-checks/test-utils.js +95 -0
  102. package/build/tests/caps-api/fs-checks/versioned/archiveCurrent.d.ts +2 -0
  103. package/build/tests/caps-api/fs-checks/versioned/archiveCurrent.js +73 -0
  104. package/build/tests/caps-api/fs-checks/versioned/getByteSink.d.ts +2 -0
  105. package/build/tests/caps-api/fs-checks/versioned/getByteSink.js +122 -0
  106. package/build/tests/caps-api/fs-checks/versioned/getByteSource.d.ts +2 -0
  107. package/build/tests/caps-api/fs-checks/versioned/getByteSource.js +71 -0
  108. package/build/tests/caps-api/fs-checks/versioned/listFolder.d.ts +2 -0
  109. package/build/tests/caps-api/fs-checks/versioned/listFolder.js +109 -0
  110. package/build/tests/caps-api/fs-checks/versioned/listVersions.d.ts +2 -0
  111. package/build/tests/caps-api/fs-checks/versioned/listVersions.js +48 -0
  112. package/build/tests/caps-api/fs-checks/versioned/readBytes.d.ts +2 -0
  113. package/build/tests/caps-api/fs-checks/versioned/readBytes.js +90 -0
  114. package/build/tests/caps-api/fs-checks/versioned/readJSONFile.d.ts +2 -0
  115. package/build/tests/caps-api/fs-checks/versioned/readJSONFile.js +60 -0
  116. package/build/tests/caps-api/fs-checks/versioned/readTxtFile.d.ts +2 -0
  117. package/build/tests/caps-api/fs-checks/versioned/readTxtFile.js +56 -0
  118. package/build/tests/caps-api/fs-checks/versioned/stat.d.ts +2 -0
  119. package/build/tests/caps-api/fs-checks/versioned/stat.js +80 -0
  120. package/build/tests/caps-api/fs-checks/versioned/watchFile.d.ts +2 -0
  121. package/build/tests/caps-api/fs-checks/versioned/watchFile.js +64 -0
  122. package/build/tests/caps-api/fs-checks/versioned/writeBytes.d.ts +2 -0
  123. package/build/tests/caps-api/fs-checks/versioned/writeBytes.js +128 -0
  124. package/build/tests/caps-api/fs-checks/versioned/writeJSONFile.d.ts +2 -0
  125. package/build/tests/caps-api/fs-checks/versioned/writeJSONFile.js +111 -0
  126. package/build/tests/caps-api/fs-checks/versioned/writeTxtFile.d.ts +2 -0
  127. package/build/tests/caps-api/fs-checks/versioned/writeTxtFile.js +107 -0
  128. package/build/tests/caps-api/fs-checks/with-core-restarts/xattrs.d.ts +2 -0
  129. package/build/tests/caps-api/fs-checks/with-core-restarts/xattrs.js +50 -0
  130. package/build/tests/caps-api/keyrings.js +69 -0
  131. package/build/tests/caps-api/mailerid.d.ts +1 -0
  132. package/build/tests/caps-api/mailerid.js +59 -0
  133. package/build/tests/caps-api/startup/signin-empty-cache.d.ts +1 -0
  134. package/build/tests/caps-api/startup/signin-empty-cache.js +108 -0
  135. package/build/tests/caps-api/startup/signin-with-cache.d.ts +1 -0
  136. package/build/tests/caps-api/startup/signin-with-cache.js +83 -0
  137. package/build/tests/caps-api/startup/signup-with-token.d.ts +1 -0
  138. package/build/tests/caps-api/startup/signup-with-token.js +53 -0
  139. package/build/tests/caps-api/startup/signup.d.ts +1 -0
  140. package/build/tests/caps-api/startup/signup.js +86 -0
  141. package/build/tests/caps-api/storage.d.ts +1 -0
  142. package/build/tests/caps-api/storage.js +225 -0
  143. package/build/tests/computer.3nweb.core/id-manager.d.ts +1 -0
  144. package/build/tests/computer.3nweb.core/id-manager.js +78 -0
  145. package/build/tests/computer.3nweb.core/inbox/msg-indexing.d.ts +1 -0
  146. package/build/tests/computer.3nweb.core/inbox/msg-indexing.js +145 -0
  147. package/build/tests/computer.3nweb.core/keyrings.d.ts +1 -0
  148. package/build/tests/computer.3nweb.core/keyrings.js +64 -0
  149. package/build/tests/computer.3nweb.core/test-utils.d.ts +21 -0
  150. package/build/tests/computer.3nweb.core/test-utils.js +92 -0
  151. package/build/tests/jasmine.d.ts +1 -0
  152. package/build/tests/jasmine.js +45 -0
  153. package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
  154. package/build/tests/libs-for-tests/bytes-equal.js +32 -0
  155. package/build/tests/libs-for-tests/caps-ipc-wrap.d.ts +11 -0
  156. package/build/tests/libs-for-tests/caps-ipc-wrap.js +55 -0
  157. package/build/tests/libs-for-tests/core-runner.d.ts +39 -0
  158. package/build/tests/libs-for-tests/core-runner.js +231 -0
  159. package/build/tests/libs-for-tests/jasmine-utils.d.ts +13 -0
  160. package/build/tests/libs-for-tests/jasmine-utils.js +110 -0
  161. package/build/tests/libs-for-tests/json-equal.d.ts +1 -0
  162. package/build/tests/libs-for-tests/json-equal.js +78 -0
  163. package/build/tests/libs-for-tests/services-runner.d.ts +18 -0
  164. package/build/tests/libs-for-tests/services-runner.js +64 -0
  165. package/build/tests/libs-for-tests/setups.d.ts +51 -0
  166. package/build/tests/libs-for-tests/setups.js +305 -0
  167. package/build/tests/libs-for-tests/spec-module.d.ts +16 -0
  168. package/build/tests/libs-for-tests/spec-module.js +92 -0
  169. package/build/tests/libs-for-tests/startup.d.ts +1 -0
  170. package/build/tests/libs-for-tests/startup.js +29 -0
  171. package/build/tests/libs-for-tests/watching.d.ts +7 -0
  172. package/build/tests/libs-for-tests/watching.js +33 -0
  173. package/build/tests/units/canonical-address.d.ts +1 -0
  174. package/build/tests/units/canonical-address.js +41 -0
  175. package/build/tests/units/device-fs.d.ts +1 -0
  176. package/build/tests/units/device-fs.js +70 -0
  177. package/build/tests/units/folder-node-serialization.d.ts +1 -0
  178. package/build/tests/units/folder-node-serialization.js +74 -0
  179. package/build/tests/units/mid-sigs-NaCl-Ed.d.ts +1 -0
  180. package/build/tests/units/mid-sigs-NaCl-Ed.js +123 -0
  181. package/build/tests/units/number-line.d.ts +1 -0
  182. package/build/tests/units/number-line.js +63 -0
  183. package/build/tests/units/obj-folders.d.ts +1 -0
  184. package/build/tests/units/obj-folders.js +152 -0
  185. package/package.json +11 -3
  186. package/postinstall.js +1 -1
  187. package/build/cryptors.d.ts +0 -1
  188. package/build/cryptors.js +0 -34
  189. package/build/lib-client/cryptor/cryptor-in-worker.d.ts +0 -20
  190. package/build/lib-client/cryptor/cryptor-in-worker.js +0 -357
  191. package/build/lib-client/cryptor/cryptor-wasm.js +0 -1
  192. package/build/lib-client/cryptor/cryptor.d.ts +0 -30
  193. package/build/lib-client/cryptor/cryptor.js +0 -44
  194. package/build/lib-client/cryptor/cryptor.wasm +0 -0
  195. package/build/lib-client/cryptor/in-proc-js.d.ts +0 -2
  196. package/build/lib-client/cryptor/in-proc-js.js +0 -57
  197. package/build/lib-client/cryptor/in-proc-wasm.d.ts +0 -2
  198. package/build/lib-client/cryptor/in-proc-wasm.js +0 -176
  199. package/build/lib-client/cryptor/serialization-for-wasm.d.ts +0 -35
  200. package/build/lib-client/cryptor/serialization-for-wasm.js +0 -57
  201. package/build/lib-client/cryptor/wasm-mp1-modules.d.ts +0 -5
  202. package/build/lib-client/cryptor/wasm-mp1-modules.js +0 -78
  203. package/build/lib-client/cryptor/worker-js.js +0 -131
  204. package/build/lib-client/cryptor/worker-wasm.js +0 -37
  205. package/build/protos/cryptor.proto.js +0 -1804
  206. /package/build/lib-client/{cryptor/cryptor-work-labels.d.ts → cryptor-work-labels.d.ts} +0 -0
  207. /package/build/lib-client/{cryptor/cryptor-work-labels.js → cryptor-work-labels.js} +0 -0
  208. /package/build/{lib-client/cryptor/worker-js.d.ts → tests/caps-api/asmail.d.ts} +0 -0
  209. /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;
@@ -0,0 +1,2 @@
1
+ import { DnsResolver } from "./service-locator";
2
+ export declare function dohAt(dohServerUrl: string): DnsResolver;
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2026 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.dohAt = dohAt;
20
+ const https = require("https");
21
+ const request_utils_1 = require("./request-utils");
22
+ const service_locator_1 = require("./service-locator");
23
+ function dohAt(dohServerUrl) {
24
+ async function resolveTxt(domain) {
25
+ const answer = await sendDohQuestion(dohServerUrl, domain, 'TXT');
26
+ let txt = [];
27
+ for (const { data: line } of answer) {
28
+ txt.push([line]);
29
+ }
30
+ return txt;
31
+ }
32
+ return { resolveTxt };
33
+ }
34
+ async function sendDohQuestion(serverUrl, domain, type) {
35
+ const opts = {
36
+ method: 'GET',
37
+ url: `${serverUrl}?name=${domain}&type=${type}`,
38
+ responseType: 'json'
39
+ };
40
+ const httpsOpts = (0, request_utils_1.formHttpsReqOpts)(opts);
41
+ httpsOpts.headers.accept = 'application/dns-json';
42
+ const reply = await (0, request_utils_1.processRequest)(opts => https.request(opts), httpsOpts, opts, undefined)
43
+ .catch((exc) => {
44
+ if (exc.type === 'connect') {
45
+ throw { code: service_locator_1.DNS_ERR_CODE.ECONNREFUSED, hostname: domain, cause: exc };
46
+ }
47
+ else {
48
+ throw { code: service_locator_1.DNS_ERR_CODE.ESERVFAIL, hostname: domain, cause: exc };
49
+ }
50
+ });
51
+ const { status, data } = reply;
52
+ if (status !== 200) {
53
+ throw {
54
+ code: service_locator_1.DNS_ERR_CODE.ESERVFAIL, hostname: domain,
55
+ message: `status ${reply.status} from DoH server`
56
+ };
57
+ }
58
+ if (data.Status !== 0) {
59
+ throw { code: service_locator_1.DNS_ERR_CODE.NOTFOUND, hostname: domain };
60
+ }
61
+ if (data.Answer) {
62
+ return data.Answer;
63
+ }
64
+ else {
65
+ throw { code: service_locator_1.DNS_ERR_CODE.NODATA, hostname: domain };
66
+ }
67
+ }
68
+ Object.freeze(exports);
@@ -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;
@@ -94,7 +94,7 @@ async function attachRequestReaders(clReq, opts) {
94
94
  }
95
95
  catch (exc) {
96
96
  if (exc.cause === TIMEOUT_FLAG) {
97
- clReq.abort();
97
+ clReq.destroy();
98
98
  }
99
99
  throw exc;
100
100
  }
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  /*
3
- Copyright (C) 2025 3NSoft Inc.
3
+ Copyright (C) 2025 - 2026 3NSoft Inc.
4
4
 
5
5
  This program is free software: you can redistribute it and/or modify it under
6
6
  the terms of the GNU General Public License as published by the Free Software
@@ -18,6 +18,7 @@
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
19
  exports.checkServicesStartingFromSignup = checkServicesStartingFromSignup;
20
20
  const _3nweb_signup_1 = require("./3nweb-signup");
21
+ const doh_1 = require("./doh");
21
22
  const service_locator_1 = require("./service-locator");
22
23
  const dns_1 = require("dns");
23
24
  async function checkServicesStartingFromSignup(client, signupUrl, signupToken, progress) {
@@ -126,16 +127,7 @@ async function checkSignup(client, signupURL, signupToken) {
126
127
  };
127
128
  }
128
129
  }
129
- const srvLocator = (0, service_locator_1.makeServiceLocator)({
130
- resolveTxt: domain => new Promise((resolve, reject) => (0, dns_1.resolveTxt)(domain, (err, texts) => {
131
- if (err) {
132
- reject(err);
133
- }
134
- else {
135
- resolve(texts);
136
- }
137
- }))
138
- });
130
+ const srvLocator = (0, service_locator_1.makeServiceLocator)({ resolveTxt: dns_1.promises.resolveTxt }, (0, doh_1.dohAt)(`https://cloudflare-dns.com/dns-query`), (0, doh_1.dohAt)(`https://dns.google/resolve`));
139
131
  async function checkUserDomainDNS(service, domain) {
140
132
  try {
141
133
  const serviceUrl = await (srvLocator(service))(`u@${domain}`);
@@ -26,12 +26,20 @@ export declare function mailerIdInfoAt(client: NetClient, url: string): Promise<
26
26
  * @param url
27
27
  */
28
28
  export declare function storageInfoAt(client: NetClient, url: string): Promise<StorageRootRoute>;
29
+ export declare const DNS_ERR_CODE: {
30
+ NODATA: string;
31
+ NOTFOUND: string;
32
+ ESERVFAIL: string;
33
+ ECONNREFUSED: string;
34
+ ETIMEOUT: string;
35
+ };
29
36
  export type ServiceTypeDNSLabel = 'mailerid' | 'asmail' | '3nstorage';
30
37
  export type ServiceLocatorMaker = (serviceLabel: ServiceTypeDNSLabel) => ServiceLocator;
31
38
  export type ServiceLocator = (address: string) => Promise<string>;
32
- export declare function makeServiceLocator(resolver: {
39
+ export interface DnsResolver {
33
40
  resolveTxt: (typeof dnsPromises)['resolveTxt'];
34
- }): ServiceLocatorMaker;
41
+ }
42
+ export declare function makeServiceLocator(...resolvers: DnsResolver[]): ServiceLocatorMaker;
35
43
  /**
36
44
  * @param resolver
37
45
  * @param address
@@ -16,6 +16,7 @@
16
16
  this program. If not, see <http://www.gnu.org/licenses/>.
17
17
  */
18
18
  Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.DNS_ERR_CODE = void 0;
19
20
  exports.asmailInfoAt = asmailInfoAt;
20
21
  exports.mailerIdInfoAt = mailerIdInfoAt;
21
22
  exports.storageInfoAt = storageInfoAt;
@@ -215,43 +216,55 @@ function getRecordAtStartOf(txt) {
215
216
  value: txt
216
217
  };
217
218
  }
218
- const DNS_ERR_CODE = {
219
+ exports.DNS_ERR_CODE = {
219
220
  NODATA: 'ENODATA',
220
221
  NOTFOUND: 'ENOTFOUND',
221
222
  ESERVFAIL: 'ESERVFAIL',
222
223
  ECONNREFUSED: 'ECONNREFUSED',
223
224
  ETIMEOUT: 'ETIMEOUT'
224
225
  };
225
- Object.freeze(DNS_ERR_CODE);
226
- function makeServiceLocator(resolver) {
226
+ Object.freeze(exports.DNS_ERR_CODE);
227
+ function makeServiceLocator(...resolvers) {
228
+ if (resolvers.length === 0) {
229
+ throw Error(`no DNS resolvers given`);
230
+ }
227
231
  return serviceLabel => async (address) => {
228
- try {
229
- const domain = domainOfAddress(address);
230
- const txtRecords = await resolver.resolveTxt(domain);
231
- const recValue = extractPair(txtRecords, serviceLabel);
232
- if (!recValue) {
233
- throw noServiceRecordExc(address);
234
- }
235
- const url = checkAndPrepareURL(recValue);
236
- return url;
237
- }
238
- catch (err) {
239
- const { code, hostname, message } = err;
240
- if (code === DNS_ERR_CODE.NODATA) {
241
- throw noServiceRecordExc(address);
242
- }
243
- else if ((code === DNS_ERR_CODE.ESERVFAIL)
244
- || (code === DNS_ERR_CODE.ECONNREFUSED)
245
- || (code === DNS_ERR_CODE.ETIMEOUT)) {
246
- throw noConnectionExc({ code, hostname, message });
247
- }
248
- else if (hostname) {
249
- throw domainNotFoundExc(address, { code, hostname, message });
232
+ const domain = domainOfAddress(address);
233
+ let prevConnectionExc = undefined;
234
+ for (const resolver of resolvers) {
235
+ try {
236
+ const txtRecords = await resolver.resolveTxt(domain);
237
+ const recValue = extractPair(txtRecords, serviceLabel);
238
+ if (!recValue) {
239
+ throw noServiceRecordExc(address);
240
+ }
241
+ const url = checkAndPrepareURL(recValue);
242
+ return url;
250
243
  }
251
- else {
252
- throw err;
244
+ catch (err) {
245
+ const { code, hostname, message } = err;
246
+ if (code === exports.DNS_ERR_CODE.NODATA) {
247
+ throw noServiceRecordExc(address);
248
+ }
249
+ else if ((code === exports.DNS_ERR_CODE.ESERVFAIL)
250
+ || (code === exports.DNS_ERR_CODE.ECONNREFUSED)
251
+ || (code === exports.DNS_ERR_CODE.ETIMEOUT)) {
252
+ if (!prevConnectionExc) {
253
+ prevConnectionExc = noConnectionExc({ code, hostname, message });
254
+ }
255
+ }
256
+ else if ((code === exports.DNS_ERR_CODE.NOTFOUND) || hostname) {
257
+ throw domainNotFoundExc(address, { code, hostname, message });
258
+ }
259
+ else {
260
+ if (!prevConnectionExc) {
261
+ prevConnectionExc = err;
262
+ }
263
+ throw err;
264
+ }
253
265
  }
254
266
  }
267
+ throw prevConnectionExc;
255
268
  };
256
269
  }
257
270
  /**
@@ -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
@@ -13,3 +13,4 @@ export { DeviceFS } from './lib-client/local-files/device-fs';
13
13
  export { makeLogger } from './lib-client/logging/log-to-file';
14
14
  export declare const SYSTEM_DOMAIN = "3nweb.computer";
15
15
  export { checkServicesStartingFromSignup } from './lib-client/service-checks';
16
+ export { dohAt } from './lib-client/doh';
@@ -30,7 +30,7 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
30
30
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
31
31
  };
32
32
  Object.defineProperty(exports, "__esModule", { value: true });
33
- exports.checkServicesStartingFromSignup = exports.SYSTEM_DOMAIN = exports.makeLogger = exports.DeviceFS = exports.sysFolders = exports.appDirs = exports.makeNetClient = exports.makeServiceLocator = exports.ASMail = exports.SignIn = exports.reverseDomain = exports.Storages = exports.IdManager = exports.SignUp = void 0;
33
+ exports.dohAt = exports.checkServicesStartingFromSignup = exports.SYSTEM_DOMAIN = exports.makeLogger = exports.DeviceFS = exports.sysFolders = exports.appDirs = exports.makeNetClient = exports.makeServiceLocator = exports.ASMail = exports.SignIn = exports.reverseDomain = exports.Storages = exports.IdManager = exports.SignUp = void 0;
34
34
  __exportStar(require("./core"), exports);
35
35
  var sign_up_1 = require("./core/startup/sign-up");
36
36
  Object.defineProperty(exports, "SignUp", { enumerable: true, get: function () { return sign_up_1.SignUp; } });
@@ -58,4 +58,6 @@ Object.defineProperty(exports, "makeLogger", { enumerable: true, get: function (
58
58
  exports.SYSTEM_DOMAIN = '3nweb.computer';
59
59
  var service_checks_1 = require("./lib-client/service-checks");
60
60
  Object.defineProperty(exports, "checkServicesStartingFromSignup", { enumerable: true, get: function () { return service_checks_1.checkServicesStartingFromSignup; } });
61
+ var doh_1 = require("./lib-client/doh");
62
+ Object.defineProperty(exports, "dohAt", { enumerable: true, get: function () { return doh_1.dohAt; } });
61
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,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;