spec-3nweb-server 1.8.4 → 1.8.6

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 (324) hide show
  1. package/.gitlab-ci-linux.yml +50 -0
  2. package/.gitlab-ci-mac.yml +29 -0
  3. package/.gitlab-ci-windows.yml +29 -0
  4. package/.gitlab-ci.yml +63 -0
  5. package/build/3nstorage/routes/owner/archive-obj-version.js +2 -2
  6. package/build/3nstorage/routes/owner/cancel-trans.js +2 -2
  7. package/build/3nstorage/routes/owner/delete-obj.js +2 -2
  8. package/build/3nstorage/routes/owner/get-current-obj.js +3 -4
  9. package/build/3nstorage/routes/owner/param-setter.js +2 -6
  10. package/build/asmail/routes/config/param-setter.js +2 -2
  11. package/build/asmail/routes/delivery/finalize-delivery.js +2 -2
  12. package/build/asmail/routes/delivery/put-obj.js +2 -2
  13. package/build/asmail/routes/delivery/sender-authorization.js +2 -2
  14. package/build/asmail/routes/retrieval/remove-message.js +2 -2
  15. package/build/cli/signup-cmd.js +0 -1
  16. package/build/lib-server/routes/sessions/close.js +2 -2
  17. package/build/lib-server/routes/sessions/mid-auth.js +2 -5
  18. package/build/main.js +12 -15
  19. package/build/mock/tls-options.js +46 -44
  20. package/build/signup/routes/add.js +4 -4
  21. package/build/tests/admin-proto/signup.d.ts +1 -0
  22. package/build/tests/admin-proto/signup.js +235 -0
  23. package/build/tests/jasmine.d.ts +1 -0
  24. package/build/tests/jasmine.js +32 -0
  25. package/build/tests/libs-for-tests/3nstorage.d.ts +22 -0
  26. package/build/tests/libs-for-tests/3nstorage.js +123 -0
  27. package/build/tests/libs-for-tests/asmail.d.ts +22 -0
  28. package/build/tests/libs-for-tests/asmail.js +179 -0
  29. package/build/tests/libs-for-tests/assert.d.ts +1 -0
  30. package/build/tests/libs-for-tests/assert.js +26 -0
  31. package/build/tests/libs-for-tests/async-jasmine.d.ts +7 -0
  32. package/build/tests/libs-for-tests/async-jasmine.js +77 -0
  33. package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
  34. package/build/tests/libs-for-tests/bytes-equal.js +34 -0
  35. package/build/tests/libs-for-tests/json-copy.d.ts +1 -0
  36. package/build/tests/libs-for-tests/json-copy.js +45 -0
  37. package/build/tests/libs-for-tests/json-equal.d.ts +4 -0
  38. package/build/tests/libs-for-tests/json-equal.js +67 -0
  39. package/build/tests/libs-for-tests/mailerid.d.ts +13 -0
  40. package/build/tests/libs-for-tests/mailerid.js +114 -0
  41. package/build/tests/libs-for-tests/pkl.d.ts +28 -0
  42. package/build/tests/libs-for-tests/pkl.js +89 -0
  43. package/build/tests/libs-for-tests/server-components/3nstorage.d.ts +20 -0
  44. package/build/tests/libs-for-tests/server-components/3nstorage.js +200 -0
  45. package/build/tests/libs-for-tests/server-components/admin.d.ts +6 -0
  46. package/build/tests/libs-for-tests/server-components/admin.js +43 -0
  47. package/build/tests/libs-for-tests/server-components/asmail.d.ts +16 -0
  48. package/build/tests/libs-for-tests/server-components/asmail.js +143 -0
  49. package/build/tests/libs-for-tests/server-components/component.d.ts +13 -0
  50. package/build/tests/libs-for-tests/server-components/component.js +77 -0
  51. package/build/tests/libs-for-tests/server-components/mailerid.d.ts +10 -0
  52. package/build/tests/libs-for-tests/server-components/mailerid.js +103 -0
  53. package/build/tests/libs-for-tests/server-runner.d.ts +15 -0
  54. package/build/tests/libs-for-tests/server-runner.js +69 -0
  55. package/build/tests/libs-for-tests/spec-assembly.d.ts +6 -0
  56. package/build/tests/libs-for-tests/spec-assembly.js +55 -0
  57. package/build/tests/libs-for-tests/ws-utils.d.ts +3 -0
  58. package/build/tests/libs-for-tests/ws-utils.js +59 -0
  59. package/build/tests/libs-for-tests/xhr-utils.d.ts +61 -0
  60. package/build/tests/libs-for-tests/xhr-utils.js +154 -0
  61. package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.d.ts +2 -0
  62. package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.js +84 -0
  63. package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.d.ts +2 -0
  64. package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.js +78 -0
  65. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.d.ts +2 -0
  66. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.js +83 -0
  67. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.d.ts +2 -0
  68. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.js +77 -0
  69. package/build/tests/protocols/3nstorage/owner/specs/delete-obj.d.ts +2 -0
  70. package/build/tests/protocols/3nstorage/owner/specs/delete-obj.js +75 -0
  71. package/build/tests/protocols/3nstorage/owner/specs/events.d.ts +2 -0
  72. package/build/tests/protocols/3nstorage/owner/specs/events.js +91 -0
  73. package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.d.ts +2 -0
  74. package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.js +269 -0
  75. package/build/tests/protocols/3nstorage/owner/specs/get-current-root.d.ts +2 -0
  76. package/build/tests/protocols/3nstorage/owner/specs/get-current-root.js +262 -0
  77. package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.d.ts +2 -0
  78. package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.js +79 -0
  79. package/build/tests/protocols/3nstorage/owner/specs/get-root-status.d.ts +2 -0
  80. package/build/tests/protocols/3nstorage/owner/specs/get-root-status.js +72 -0
  81. package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.d.ts +2 -0
  82. package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.js +287 -0
  83. package/build/tests/protocols/3nstorage/owner/specs/put-current-root.d.ts +2 -0
  84. package/build/tests/protocols/3nstorage/owner/specs/put-current-root.js +274 -0
  85. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.d.ts +2 -0
  86. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.js +73 -0
  87. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.d.ts +2 -0
  88. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.js +72 -0
  89. package/build/tests/protocols/3nstorage/owner/test-utils.d.ts +14 -0
  90. package/build/tests/protocols/3nstorage/owner/test-utils.js +54 -0
  91. package/build/tests/protocols/3nstorage/owner.d.ts +1 -0
  92. package/build/tests/protocols/3nstorage/owner.js +138 -0
  93. package/build/tests/protocols/asmail/config.d.ts +1 -0
  94. package/build/tests/protocols/asmail/config.js +117 -0
  95. package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.d.ts +2 -0
  96. package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.js +60 -0
  97. package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.d.ts +2 -0
  98. package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.js +68 -0
  99. package/build/tests/protocols/asmail/delivery/specs/put-metadata.d.ts +2 -0
  100. package/build/tests/protocols/asmail/delivery/specs/put-metadata.js +83 -0
  101. package/build/tests/protocols/asmail/delivery/specs/put-obj.d.ts +2 -0
  102. package/build/tests/protocols/asmail/delivery/specs/put-obj.js +123 -0
  103. package/build/tests/protocols/asmail/delivery/specs/restart-session.d.ts +2 -0
  104. package/build/tests/protocols/asmail/delivery/specs/restart-session.js +79 -0
  105. package/build/tests/protocols/asmail/delivery/specs/start-session.d.ts +2 -0
  106. package/build/tests/protocols/asmail/delivery/specs/start-session.js +64 -0
  107. package/build/tests/protocols/asmail/delivery/test-utils.d.ts +16 -0
  108. package/build/tests/protocols/asmail/delivery/test-utils.js +46 -0
  109. package/build/tests/protocols/asmail/delivery.d.ts +1 -0
  110. package/build/tests/protocols/asmail/delivery.js +46 -0
  111. package/build/tests/protocols/asmail/retrieval/specs/events.d.ts +2 -0
  112. package/build/tests/protocols/asmail/retrieval/specs/events.js +62 -0
  113. package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.d.ts +2 -0
  114. package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.js +70 -0
  115. package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.d.ts +2 -0
  116. package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.js +166 -0
  117. package/build/tests/protocols/asmail/retrieval/specs/list-messages.d.ts +2 -0
  118. package/build/tests/protocols/asmail/retrieval/specs/list-messages.js +96 -0
  119. package/build/tests/protocols/asmail/retrieval/specs/remove-message.d.ts +2 -0
  120. package/build/tests/protocols/asmail/retrieval/specs/remove-message.js +66 -0
  121. package/build/tests/protocols/asmail/retrieval/test-utils.d.ts +17 -0
  122. package/build/tests/protocols/asmail/retrieval/test-utils.js +46 -0
  123. package/build/tests/protocols/asmail/retrieval.d.ts +1 -0
  124. package/build/tests/protocols/asmail/retrieval.js +92 -0
  125. package/build/tests/protocols/mailerid.d.ts +1 -0
  126. package/build/tests/protocols/mailerid.js +210 -0
  127. package/build/tests/shared-checks/check-mid-login.d.ts +2 -0
  128. package/build/tests/shared-checks/check-mid-login.js +131 -0
  129. package/build/tests/shared-checks/requests.d.ts +20 -0
  130. package/build/tests/shared-checks/requests.js +123 -0
  131. package/package.json +1 -1
  132. package/packing/create-deb.sh +57 -0
  133. package/packing/deb/lib/systemd/system/3nweb.service +11 -0
  134. package/packing/deb/postinst +44 -0
  135. package/packing/deb/usr/share/doc/3nweb-server/conf-for-postinstall.yaml +19 -0
  136. package/packing/deb/usr/share/doc/3nweb-server/copyright +22 -0
  137. package/publish-task.sh +10 -0
  138. package/push-to-github.sh +105 -0
  139. package/ts-code/3nstorage/3nstorage-app.ts +99 -0
  140. package/ts-code/3nstorage/owner.ts +178 -0
  141. package/ts-code/3nstorage/resources/sessions.ts +37 -0
  142. package/ts-code/3nstorage/resources/store.ts +896 -0
  143. package/ts-code/3nstorage/resources/users.ts +258 -0
  144. package/ts-code/3nstorage/routes/owner/archive-obj-version.ts +73 -0
  145. package/ts-code/3nstorage/routes/owner/cancel-trans.ts +58 -0
  146. package/ts-code/3nstorage/routes/owner/delete-obj.ts +103 -0
  147. package/ts-code/3nstorage/routes/owner/get-archived-obj-ver.ts +111 -0
  148. package/ts-code/3nstorage/routes/owner/get-current-obj.ts +122 -0
  149. package/ts-code/3nstorage/routes/owner/get-obj-status.ts +55 -0
  150. package/ts-code/3nstorage/routes/owner/param-getter.ts +51 -0
  151. package/ts-code/3nstorage/routes/owner/param-setter.ts +50 -0
  152. package/ts-code/3nstorage/routes/owner/put-current-obj.ts +284 -0
  153. package/ts-code/3nstorage/routes/owner/session-params.ts +49 -0
  154. package/ts-code/3nstorage/shared.ts +43 -0
  155. package/ts-code/asmail/asmail-app.ts +91 -0
  156. package/ts-code/asmail/config.ts +96 -0
  157. package/ts-code/asmail/delivery.ts +94 -0
  158. package/ts-code/asmail/resources/delivery-sessions.ts +118 -0
  159. package/ts-code/asmail/resources/inbox.ts +696 -0
  160. package/ts-code/asmail/resources/recipients.ts +495 -0
  161. package/ts-code/asmail/resources/sessions.ts +37 -0
  162. package/ts-code/asmail/retrieval.ts +96 -0
  163. package/ts-code/asmail/routes/config/param-getter.ts +49 -0
  164. package/ts-code/asmail/routes/config/param-setter.ts +49 -0
  165. package/ts-code/asmail/routes/delivery/finalize-delivery.ts +50 -0
  166. package/ts-code/asmail/routes/delivery/pre-flight.ts +132 -0
  167. package/ts-code/asmail/routes/delivery/provide-recipient-pubkey.ts +58 -0
  168. package/ts-code/asmail/routes/delivery/put-metadata.ts +94 -0
  169. package/ts-code/asmail/routes/delivery/put-obj.ts +166 -0
  170. package/ts-code/asmail/routes/delivery/restart-session.ts +130 -0
  171. package/ts-code/asmail/routes/delivery/sender-authorization.ts +81 -0
  172. package/ts-code/asmail/routes/delivery/start-session.ts +151 -0
  173. package/ts-code/asmail/routes/retrieval/get-message-meta.ts +53 -0
  174. package/ts-code/asmail/routes/retrieval/get-message-obj.ts +109 -0
  175. package/ts-code/asmail/routes/retrieval/list-messages.ts +70 -0
  176. package/ts-code/asmail/routes/retrieval/remove-message.ts +47 -0
  177. package/ts-code/cli/index.ts +82 -0
  178. package/ts-code/cli/run-cmd.ts +81 -0
  179. package/ts-code/cli/show-sample-config.ts +78 -0
  180. package/ts-code/cli/signup-cmd.ts +229 -0
  181. package/ts-code/cli/user-cmd.ts +68 -0
  182. package/ts-code/cli/utils.ts +105 -0
  183. package/ts-code/config/default-confs.ts +22 -0
  184. package/ts-code/config/from-yaml.ts +35 -0
  185. package/ts-code/config/letsencrypt.ts +77 -0
  186. package/ts-code/config/signup.ts +137 -0
  187. package/ts-code/lib-common/admin-api/signup.ts +120 -0
  188. package/ts-code/lib-common/assert.ts +22 -0
  189. package/ts-code/lib-common/async-fs-node.ts +656 -0
  190. package/ts-code/lib-common/buffer-utils.ts +124 -0
  191. package/ts-code/lib-common/byte-streaming/common.ts +166 -0
  192. package/ts-code/lib-common/bytes-equal.ts +25 -0
  193. package/ts-code/lib-common/canonical-address.ts +92 -0
  194. package/ts-code/lib-common/exceptions/error.ts +44 -0
  195. package/ts-code/lib-common/exceptions/file.ts +84 -0
  196. package/ts-code/lib-common/exceptions/http.ts +69 -0
  197. package/ts-code/lib-common/ipc/generic-ipc.ts +750 -0
  198. package/ts-code/lib-common/ipc/ws-ipc.ts +117 -0
  199. package/ts-code/lib-common/json-equal.ts +55 -0
  200. package/ts-code/lib-common/json-utils.ts +130 -0
  201. package/ts-code/lib-common/jwkeys.ts +246 -0
  202. package/ts-code/lib-common/map-of-sets.ts +60 -0
  203. package/ts-code/lib-common/mid-sigs-NaCl-Ed.ts +677 -0
  204. package/ts-code/lib-common/objs-on-disk/file-layout.ts +480 -0
  205. package/ts-code/lib-common/objs-on-disk/obj-file.ts +325 -0
  206. package/ts-code/lib-common/objs-on-disk/utils.ts +201 -0
  207. package/ts-code/lib-common/objs-on-disk/v1-obj-file-format.ts +329 -0
  208. package/ts-code/lib-common/processes.ts +501 -0
  209. package/ts-code/lib-common/random-node.ts +79 -0
  210. package/ts-code/lib-common/service-api/3nstorage/owner.ts +559 -0
  211. package/ts-code/lib-common/service-api/3nstorage/root-route.ts +22 -0
  212. package/ts-code/lib-common/service-api/asmail/config.ts +144 -0
  213. package/ts-code/lib-common/service-api/asmail/delivery.ts +250 -0
  214. package/ts-code/lib-common/service-api/asmail/retrieval.ts +238 -0
  215. package/ts-code/lib-common/service-api/asmail/root-route.ts +22 -0
  216. package/ts-code/lib-common/service-api/ipc-api.ts +44 -0
  217. package/ts-code/lib-common/service-api/locker.ts +44 -0
  218. package/ts-code/lib-common/service-api/mailer-id/login.ts +80 -0
  219. package/ts-code/lib-common/service-api/mailer-id/provisioning.ts +64 -0
  220. package/ts-code/lib-common/service-api/mailer-id/root-route.ts +25 -0
  221. package/ts-code/lib-common/service-api/pub-key-login.ts +75 -0
  222. package/ts-code/lib-common/service-api/web-socket-base.ts +87 -0
  223. package/ts-code/lib-common/session-encryptor.ts +54 -0
  224. package/ts-code/lib-common/time-window-cache.ts +74 -0
  225. package/ts-code/lib-common/transferable.d.ts +30 -0
  226. package/ts-code/lib-server/conf-util.ts +35 -0
  227. package/ts-code/lib-server/mid-access.ts +45 -0
  228. package/ts-code/lib-server/middleware/body-parsers.ts +248 -0
  229. package/ts-code/lib-server/middleware/error-handler.ts +79 -0
  230. package/ts-code/lib-server/pkl-access.ts +46 -0
  231. package/ts-code/lib-server/resources/dns.ts +151 -0
  232. package/ts-code/lib-server/resources/mailerid-authorizer.ts +115 -0
  233. package/ts-code/lib-server/resources/mem-backed-sessions-factory.ts +132 -0
  234. package/ts-code/lib-server/resources/server-data-folders.ts +160 -0
  235. package/ts-code/lib-server/resources/server-key-for-pkl-challenge.ts +41 -0
  236. package/ts-code/lib-server/resources/sessions.ts +232 -0
  237. package/ts-code/lib-server/resources/user-files.ts +147 -0
  238. package/ts-code/lib-server/routes/pub-key-login/complete-exchange.ts +63 -0
  239. package/ts-code/lib-server/routes/pub-key-login/start-exchange.ts +189 -0
  240. package/ts-code/lib-server/routes/sessions/close.ts +27 -0
  241. package/ts-code/lib-server/routes/sessions/mid-auth.ts +77 -0
  242. package/ts-code/lib-server/routes/sessions/start.ts +116 -0
  243. package/ts-code/lib-server/web-sockets/app.ts +339 -0
  244. package/ts-code/lib-server/web-sockets/server-events.ts +63 -0
  245. package/ts-code/lib.ts +29 -0
  246. package/ts-code/locker/locker-app.ts +60 -0
  247. package/ts-code/locker/resources/lockers.ts +17 -0
  248. package/ts-code/locker/resources/sessions.ts +37 -0
  249. package/ts-code/locker/routes/create-locker.ts +47 -0
  250. package/ts-code/mailerId/mailerId-app.ts +107 -0
  251. package/ts-code/mailerId/resources/certifier.ts +181 -0
  252. package/ts-code/mailerId/resources/sessions.ts +44 -0
  253. package/ts-code/mailerId/resources/users.ts +88 -0
  254. package/ts-code/mailerId/routes/certify.ts +68 -0
  255. package/ts-code/main.ts +304 -0
  256. package/ts-code/mock/dns.ts +106 -0
  257. package/ts-code/mock/mock-as-child-proc.ts +130 -0
  258. package/ts-code/mock/node-child-ipc.ts +69 -0
  259. package/ts-code/mock/run-in-proc.ts +111 -0
  260. package/ts-code/mock/tls-options.ts +73 -0
  261. package/ts-code/services.ts +138 -0
  262. package/ts-code/signup/resources/users.ts +429 -0
  263. package/ts-code/signup/routes/add.ts +65 -0
  264. package/ts-code/signup/routes/get-available-addresses.ts +49 -0
  265. package/ts-code/signup/routes/get-available-domains.ts +45 -0
  266. package/ts-code/signup/signup-app.ts +54 -0
  267. package/ts-code/signup/signup-tokens.ts +148 -0
  268. package/ts-code/tests/admin-proto/signup.ts +277 -0
  269. package/ts-code/tests/jasmine.ts +37 -0
  270. package/ts-code/tests/libs-for-tests/3nstorage.ts +144 -0
  271. package/ts-code/tests/libs-for-tests/asmail.ts +220 -0
  272. package/ts-code/tests/libs-for-tests/assert.ts +22 -0
  273. package/ts-code/tests/libs-for-tests/async-jasmine.ts +89 -0
  274. package/ts-code/tests/libs-for-tests/bytes-equal.ts +25 -0
  275. package/ts-code/tests/libs-for-tests/json-copy.ts +38 -0
  276. package/ts-code/tests/libs-for-tests/json-equal.ts +55 -0
  277. package/ts-code/tests/libs-for-tests/mailerid.ts +123 -0
  278. package/ts-code/tests/libs-for-tests/pkl.ts +127 -0
  279. package/ts-code/tests/libs-for-tests/server-components/3nstorage.ts +206 -0
  280. package/ts-code/tests/libs-for-tests/server-components/admin.ts +49 -0
  281. package/ts-code/tests/libs-for-tests/server-components/asmail.ts +152 -0
  282. package/ts-code/tests/libs-for-tests/server-components/component.ts +90 -0
  283. package/ts-code/tests/libs-for-tests/server-components/mailerid.ts +114 -0
  284. package/ts-code/tests/libs-for-tests/server-runner.ts +82 -0
  285. package/ts-code/tests/libs-for-tests/spec-assembly.ts +60 -0
  286. package/ts-code/tests/libs-for-tests/ws-utils.ts +61 -0
  287. package/ts-code/tests/libs-for-tests/xhr-utils.ts +179 -0
  288. package/ts-code/tests/protocols/3nstorage/owner/specs/archive-obj-ver.ts +100 -0
  289. package/ts-code/tests/protocols/3nstorage/owner/specs/archive-root-ver.ts +91 -0
  290. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.ts +99 -0
  291. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.ts +90 -0
  292. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-obj.ts +84 -0
  293. package/ts-code/tests/protocols/3nstorage/owner/specs/events.ts +125 -0
  294. package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-obj.ts +298 -0
  295. package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-root.ts +290 -0
  296. package/ts-code/tests/protocols/3nstorage/owner/specs/get-obj-status.ts +88 -0
  297. package/ts-code/tests/protocols/3nstorage/owner/specs/get-root-status.ts +80 -0
  298. package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-obj.ts +366 -0
  299. package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-root.ts +329 -0
  300. package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel-root.ts +86 -0
  301. package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel.ts +86 -0
  302. package/ts-code/tests/protocols/3nstorage/owner/test-utils.ts +72 -0
  303. package/ts-code/tests/protocols/3nstorage/owner.ts +198 -0
  304. package/ts-code/tests/protocols/asmail/config.ts +172 -0
  305. package/ts-code/tests/protocols/asmail/delivery/specs/finalize-delivery.ts +69 -0
  306. package/ts-code/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.ts +88 -0
  307. package/ts-code/tests/protocols/asmail/delivery/specs/put-metadata.ts +102 -0
  308. package/ts-code/tests/protocols/asmail/delivery/specs/put-obj.ts +156 -0
  309. package/ts-code/tests/protocols/asmail/delivery/specs/restart-session.ts +97 -0
  310. package/ts-code/tests/protocols/asmail/delivery/specs/start-session.ts +79 -0
  311. package/ts-code/tests/protocols/asmail/delivery/test-utils.ts +64 -0
  312. package/ts-code/tests/protocols/asmail/delivery.ts +56 -0
  313. package/ts-code/tests/protocols/asmail/retrieval/specs/events.ts +78 -0
  314. package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-meta.ts +80 -0
  315. package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-obj.ts +197 -0
  316. package/ts-code/tests/protocols/asmail/retrieval/specs/list-messages.ts +110 -0
  317. package/ts-code/tests/protocols/asmail/retrieval/specs/remove-message.ts +74 -0
  318. package/ts-code/tests/protocols/asmail/retrieval/test-utils.ts +60 -0
  319. package/ts-code/tests/protocols/asmail/retrieval.ts +115 -0
  320. package/ts-code/tests/protocols/mailerid.ts +271 -0
  321. package/ts-code/tests/shared-checks/check-mid-login.ts +164 -0
  322. package/ts-code/tests/shared-checks/requests.ts +135 -0
  323. package/ts-code/tsconfig.json +11 -0
  324. package/ts-code/web3n.d.ts +1068 -0
@@ -0,0 +1,501 @@
1
+ /*
2
+ Copyright (C) 2015, 2017, 2019 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ import { errWithCause } from "./exceptions/error";
19
+
20
+ export function sleep(millis: number): Promise<void> {
21
+ return new Promise<void>((resolve) => {
22
+ setTimeout(resolve, millis).unref();
23
+ });
24
+ }
25
+
26
+ /**
27
+ * Standard Promise has no finally() method, when all respected libraries do.
28
+ * Inside of an async function one may use try-finally clause. But, when we
29
+ * work with raw promises, we need a compact finalization routine. And this is
30
+ * it for synchronous completion.
31
+ * @param promise
32
+ * @param fin is a synchronous function that performs necessary
33
+ * finalization/cleanup. Use finalizeAsync, when finalization is asynchronous.
34
+ * @return a finalized promise
35
+ */
36
+ export function finalize<T>(promise: Promise<T>, fin: () => void): Promise<T> {
37
+ return promise
38
+ .then((res) => {
39
+ fin();
40
+ return res;
41
+ }, (err) => {
42
+ fin();
43
+ throw err;
44
+ })
45
+ }
46
+
47
+ /**
48
+ * Standard Promise has no finally() method, when all respected libraries do.
49
+ * Inside of an async function one may use try-finally clause. But, when we
50
+ * work with raw promises, we need a compact finalization routine. And this is
51
+ * it for an asynchronous completion.
52
+ * @param promise
53
+ * @param fin is an asynchronous function that performs necessary
54
+ * finalization/cleanup. Use finalize, when finalization is synchronous
55
+ * (is not returning promise).
56
+ * @return a finalized promise
57
+ */
58
+ export function finalizeAsync<T>(promise: Promise<T>, fin: () => Promise<void>):
59
+ Promise<T> {
60
+ return promise
61
+ .then((res) => {
62
+ return fin()
63
+ .then(() => { return res; });
64
+ }, (err) => {
65
+ return fin()
66
+ .then(() => { throw err; });
67
+ })
68
+ }
69
+
70
+ /**
71
+ * This represents a function that will create a promise, potentially starting
72
+ * some background process, only when it is called. Such wrap of code is needed
73
+ * for scheduling, as very often any start of an action must be postponed till
74
+ * later time. Scheduler needs a not-yet-started activity, as scheduler has
75
+ * control action's start.
76
+ */
77
+ export type Action<T> = () => Promise<T>;
78
+
79
+ /**
80
+ * This is a container of processes, labeled by some ids. It allows to track if
81
+ * there is a process already in progress with a given id. And, it allows to
82
+ * chain process, when needed.
83
+ *
84
+ * Common use of such class is to reuse getting of some expensive resource(s).
85
+ */
86
+ export class NamedProcs {
87
+
88
+ private promises = new Map<string, Promise<any>>();
89
+
90
+ constructor() {
91
+ Object.freeze(this);
92
+ }
93
+
94
+ /**
95
+ * @param id is a string key of a process
96
+ * @return a promise of a process' completion, or undefined, if process with
97
+ * given id is unknown.
98
+ */
99
+ getP<T>(id: string): Promise<T> | undefined {
100
+ return this.promises.get(id);
101
+ }
102
+
103
+ private insertPromise<T>(id: string, promise: Promise<T>): Promise<T> {
104
+ promise = finalize(promise, () => {
105
+ if (this.promises.get(id) === promise) {
106
+ this.promises.delete(id);
107
+ }
108
+ });
109
+ this.promises.set(id, promise);
110
+ return promise;
111
+ }
112
+
113
+ /**
114
+ * This method will add a promise of an already started process.
115
+ * @param id is a string key of a process
116
+ * @param promise of an already started process
117
+ * @return a promise of a process' completion.
118
+ */
119
+ addStarted<T>(id: string, promise: Promise<T>): Promise<T> {
120
+ if (this.promises.has(id)) { throw new Error(
121
+ 'Process with id "'+id+'" is already in progress.'); }
122
+ return this.insertPromise(id, promise);
123
+ }
124
+
125
+ /**
126
+ * This method will start a given action only, if a process with a given id
127
+ * is not running.
128
+ * @param id is a string key of a process
129
+ * @param action is a function that starts some process
130
+ * @return a promise of a process' completion.
131
+ */
132
+ start<T>(id: string, action: Action<T>): Promise<T> {
133
+ if (this.promises.has(id)) { throw new Error(
134
+ 'Process with id "'+id+'" is already in progress.'); }
135
+ return this.insertPromise(id, action());
136
+ }
137
+
138
+ /**
139
+ * This method will chain a given action to an already running process, or,
140
+ * if identified process is not running, this will start given action under
141
+ * a given id.
142
+ * @param id is a string key of a process
143
+ * @param action is a function that starts some process
144
+ * @return a promise of a process' completion.
145
+ */
146
+ startOrChain<T>(id: string, action: Action<T>): Promise<T> {
147
+ const promise = this.promises.get(id);
148
+ if (promise) {
149
+ const next = promise.then(() => { return action(); });
150
+ return this.insertPromise(id, next);
151
+ } else {
152
+ return this.insertPromise(id, action());
153
+ }
154
+ }
155
+
156
+ }
157
+ Object.freeze(NamedProcs.prototype);
158
+ Object.freeze(NamedProcs);
159
+
160
+ /**
161
+ * This is a container of process. It allows to track if a process is already
162
+ * in progress. It also allows to chain process, when needed.
163
+ *
164
+ * Common use of such class is to reuse getting of some expensive resource, or
165
+ * do ning something as an exclusive process.
166
+ */
167
+ export class SingleProc {
168
+
169
+ private promise: Promise<any>|undefined = undefined;
170
+
171
+ constructor() {
172
+ Object.seal(this);
173
+ }
174
+
175
+ private insertPromise<T>(promise: Promise<T>): Promise<T> {
176
+ promise = finalize(promise, () => {
177
+ if (this.promise === promise) {
178
+ this.promise = undefined;
179
+ }
180
+ });
181
+ this.promise = promise;
182
+ return promise;
183
+ }
184
+
185
+ getP<T>(): Promise<T>|undefined {
186
+ return this.promise;
187
+ }
188
+
189
+ addStarted<T>(promise: Promise<T>): Promise<T> {
190
+ if (this.promise) { throw new Error('Process is already in progress.'); }
191
+ return this.insertPromise(promise);
192
+ }
193
+
194
+ start<T>(action: Action<T>): Promise<T> {
195
+ if (this.promise) { throw new Error('Process is already in progress.'); }
196
+ return this.insertPromise(action());
197
+ }
198
+
199
+ startOrChain<T>(action: Action<T>): Promise<T> {
200
+ if (this.promise) {
201
+ const next = this.promise.then(() => { return action(); });
202
+ return this.insertPromise(next);
203
+ } else {
204
+ return this.insertPromise(action());
205
+ }
206
+ }
207
+
208
+ }
209
+ Object.freeze(SingleProc.prototype);
210
+ Object.freeze(SingleProc);
211
+
212
+ /**
213
+ * This wraps given function/method into syncing wrap.
214
+ */
215
+ export function makeSyncedFunc<T extends Function>(
216
+ syncProc: SingleProc, thisArg: any, func: T): T {
217
+ return ((...args) => syncProc.startOrChain(() => func.apply(thisArg, args))) as any as T;
218
+ }
219
+
220
+ /**
221
+ * This is a cycling process, that ensures single execution.
222
+ * It cycles while given "while" predicate returns true. When predicate returns
223
+ * false, process goes to idle. Pushing this process into action is done via
224
+ * startIfIdle() method.
225
+ */
226
+ export class SingleCyclicProc {
227
+
228
+ private proc: Promise<void>|undefined = undefined;
229
+
230
+ /**
231
+ * @param cycleWhile is a "while" predicate. When it returns true, process
232
+ * continues to cycle, and when it returns false, process goes to idle.
233
+ * @param action is an async cycle body to run at each iteration.
234
+ */
235
+ constructor(
236
+ private cycleWhile: () => boolean,
237
+ private action: () => Promise<void>) {
238
+ Object.seal(this);
239
+ }
240
+
241
+ /**
242
+ * This starts process, if it is idle.
243
+ */
244
+ startIfIdle(): void {
245
+ if (this.proc) { return; }
246
+ this.proc = this.action();
247
+ this.proc.then(this.cycleOrIdle);
248
+ }
249
+
250
+ private cycleOrIdle = () => {
251
+ if (this.cycleWhile()) {
252
+ this.proc = this.action();
253
+ } else {
254
+ this.proc = undefined;
255
+ }
256
+ };
257
+
258
+ isRunning(): boolean {
259
+ return !!this.proc;
260
+ }
261
+
262
+ /**
263
+ * This makes process unusable and unstartable. Waiting on a return promise,
264
+ * awaits the completion of the last iteration this process is in (if any).
265
+ */
266
+ async close(): Promise<void> {
267
+ this.cycleWhile = () => false;
268
+ this.action = () => {
269
+ throw new Error('This cyclic process has already been closed');
270
+ };
271
+ await this.proc;
272
+ }
273
+
274
+ }
275
+ Object.freeze(SingleCyclicProc.prototype);
276
+ Object.freeze(SingleCyclicProc);
277
+
278
+ function oneTimeCaller(f: () => void): () => void {
279
+ let hasBeenCalled = false;
280
+ return function(): void {
281
+ if (hasBeenCalled) { return; }
282
+ hasBeenCalled = true;
283
+ f();
284
+ }
285
+ }
286
+
287
+ /**
288
+ * Lock allows for exclusive process flow.
289
+ * Locking is done by calling a lock function that returns an unlocker. Unlocker
290
+ * must be called when lock can be released, preferably in a finally clause.
291
+ * @return a lock function.
292
+ * CAUTION: Lock is not re-entrant.
293
+ */
294
+ export function makeLock(): () => Promise<() => void> {
295
+
296
+ let isLocked = false;
297
+ const queue: ((unlock: () => void) => void)[] = [];
298
+
299
+ function unlock(): void {
300
+ if (queue.length === 0) {
301
+ isLocked = false;
302
+ } else {
303
+ const next = queue.shift();
304
+ if (!next) { return; }
305
+ next(oneTimeCaller(unlock));
306
+ }
307
+ }
308
+
309
+ async function lock(): Promise<() => void> {
310
+ if (isLocked) {
311
+ return await new Promise<() => void>((resolve) => {
312
+ queue.push(resolve);
313
+ });
314
+ } else {
315
+ isLocked = true;
316
+ return oneTimeCaller(unlock);
317
+ }
318
+ }
319
+
320
+ return lock;
321
+ }
322
+
323
+ /**
324
+ * Read-write lock allows reads to occur concurrently, while writes exclude
325
+ * both reads and other writes. Implementation uses fair locking policy.
326
+ * Locking is done by calling proper function that returns an unlocker. Unlocker
327
+ * must be called when lock can be released, preferably in finally clause.
328
+ * CAUTION: Lock is not re-entrant.
329
+ */
330
+ export interface ReadWriteLock {
331
+
332
+ /**
333
+ * This method acquires lock for reading. This excludes writes, but does
334
+ * allows other reads, unless they have to be scheduled after an already
335
+ * waiting write (as per fair policy).
336
+ * @return a promise, resolvable to unlocking function.
337
+ */
338
+ lockForRead(): Promise<() => void>;
339
+
340
+ /**
341
+ * This method acquires lock for writing. This excludes both reads and other
342
+ * writes.
343
+ * @return a promise, resolvable to unlocking function.
344
+ */
345
+ lockForWrite(): Promise<() => void>;
346
+
347
+ }
348
+
349
+ /**
350
+ * @return new read-write lock
351
+ */
352
+ export function makeReadWriteLock(): ReadWriteLock {
353
+
354
+ interface Queued {
355
+ isWrite: boolean;
356
+ write?: (unlock: () => void) => void;
357
+ reads?: ((unlock: () => void) => void)[];
358
+ }
359
+
360
+ let isLockedForWrite = false;
361
+ let isLockedForRead = false;
362
+ const queue: Queued[] = [];
363
+ let readsInProgress = 0;
364
+
365
+ async function lockForWrite(): Promise<() => void> {
366
+ if (isLockedForRead || isLockedForWrite) {
367
+ return await new Promise<() => void>((resolve) => {
368
+ queue.push({
369
+ isWrite: true,
370
+ write: resolve
371
+ });
372
+ });
373
+ } else {
374
+ isLockedForWrite = true;
375
+ return oneTimeCaller(unlockAfterWrite);
376
+ }
377
+ }
378
+
379
+ function unlockAfterWrite(): void {
380
+ if (queue.length === 0) {
381
+ isLockedForWrite = false;
382
+ return;
383
+ }
384
+ const next = queue.shift();
385
+ if (!next) { return; }
386
+ if (next.isWrite) {
387
+ next.write!(oneTimeCaller(unlockAfterWrite));
388
+ } else {
389
+ isLockedForWrite = false;
390
+ isLockedForRead = true;
391
+ readsInProgress = next.reads!.length;
392
+ for (const read of next.reads!) {
393
+ read(oneTimeCaller(unlockAfterRead));
394
+ }
395
+ }
396
+ }
397
+
398
+ async function lockForRead(): Promise<() => void> {
399
+ if (isLockedForRead) {
400
+ if (queue.length === 0) {
401
+ readsInProgress += 1;
402
+ return oneTimeCaller(unlockAfterRead);
403
+ } else {
404
+ return await queueRead();
405
+ }
406
+ } else if (isLockedForWrite) {
407
+ return await queueRead();
408
+ } else {
409
+ isLockedForRead = true;
410
+ readsInProgress = 1; // no plus, as it is the first read
411
+ return oneTimeCaller(unlockAfterRead);
412
+ }
413
+ }
414
+
415
+ async function queueRead(): Promise<() => void> {
416
+ const last = queue[queue.length-1];
417
+ if (!last || last.isWrite) {
418
+ return await new Promise<() => void>((resolve) => {
419
+ queue.push({
420
+ isWrite: false,
421
+ reads: [ resolve ]
422
+ });
423
+ });
424
+ } else {
425
+ return await new Promise<() => void>((resolve) => {
426
+ last.reads!.push(resolve);
427
+ });
428
+ }
429
+ }
430
+
431
+ function unlockAfterRead(): void {
432
+ readsInProgress -= 1;
433
+ if (readsInProgress > 0) { return; }
434
+ if (queue.length === 0) {
435
+ isLockedForRead = false;
436
+ return;
437
+ }
438
+ const next = queue.shift();
439
+ if (!next) { return; }
440
+ if (next.isWrite) {
441
+ isLockedForWrite = true;
442
+ isLockedForRead = false;
443
+ next.write!(oneTimeCaller(unlockAfterWrite));
444
+ } else {
445
+ throw new Error('Read locking is incorrectly queued');
446
+ }
447
+ }
448
+
449
+ return { lockForRead, lockForWrite };
450
+ }
451
+
452
+ export interface Deferred<T> {
453
+ promise: Promise<T>;
454
+ resolve: (result?: T|PromiseLike<T>) => void;
455
+ reject: (err: any) => void;
456
+ }
457
+
458
+ export function defer<T>(): Deferred<T> {
459
+ const d = <Deferred<T>> {};
460
+ d.promise = new Promise<T>((resolve, reject) => {
461
+ d.resolve = resolve;
462
+ d.reject = reject;
463
+ });
464
+ Object.freeze(d);
465
+ return d;
466
+ }
467
+
468
+ export class PressureValve {
469
+
470
+ private stopper: Deferred<void>|undefined = undefined;
471
+
472
+ constructor() {
473
+ Object.seal(this);
474
+ }
475
+
476
+ toggle(flag: boolean): void {
477
+ if (flag) {
478
+ if (this.stopper) { return; }
479
+ this.stopper = defer();
480
+ } else {
481
+ if (!this.stopper) { return; }
482
+ this.stopper.resolve();
483
+ this.stopper = undefined;
484
+ }
485
+ }
486
+
487
+ pressWithError(err: any): void {
488
+ this.toggle(true);
489
+ this.stopper!.reject(errWithCause(err, `Backpressure error`));
490
+ }
491
+
492
+ readonly pressure = async (): Promise<void> => {
493
+ if (!this.stopper) { return; }
494
+ await this.stopper.promise;
495
+ }
496
+
497
+ }
498
+ Object.freeze(PressureValve.prototype);
499
+ Object.freeze(PressureValve);
500
+
501
+ Object.freeze(exports);
@@ -0,0 +1,79 @@
1
+ /*
2
+ Copyright (C) 2015 - 2017 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ import { base64urlSafe } from './buffer-utils';
19
+ import { randomBytes } from 'crypto';
20
+
21
+ export function bytesSync(numOfBytes: number): Uint8Array {
22
+ return randomBytes(numOfBytes);
23
+ }
24
+
25
+ export function bytes(numOfBytes: number): Promise<Uint8Array> {
26
+ return new Promise((res, rej) => randomBytes(numOfBytes, (err, buf) => {
27
+ if (err) { rej(err); }
28
+ else { res(buf); }
29
+ }));
30
+ }
31
+
32
+ export function uint8Sync(): number {
33
+ return randomBytes(1)[0];
34
+ }
35
+
36
+ export async function uint8(): Promise<number> {
37
+ return (await randomBytes(1))[0];
38
+ }
39
+
40
+ export function uint48Sync(): number {
41
+ const b = randomBytes(6);
42
+ const l = b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
43
+ const h = b[4] + (b[5] << 8);
44
+ return h*0x100000000 + l;
45
+ }
46
+
47
+ export async function uint48(): Promise<number> {
48
+ const b = await bytes(6);
49
+ const l = b[0] + (b[1] << 8) + (b[2] << 16) + (b[3] << 24);
50
+ const h = b[4] + (b[5] << 8);
51
+ return h*0x100000000 + l;
52
+ }
53
+
54
+ export function stringOfB64UrlSafeCharsSync(numOfChars: number): string {
55
+ const numOfbytes = 3*(1 + Math.floor(numOfChars/4));
56
+ const byteArr = randomBytes(numOfbytes);
57
+ return base64urlSafe.pack(byteArr).substring(0, numOfChars);
58
+ }
59
+
60
+ export function stringOfB64CharsSync(numOfChars: number): string {
61
+ const numOfbytes = 3*(1 + Math.floor(numOfChars/4));
62
+ return randomBytes(numOfbytes).toString('base64').substring(0, numOfChars);
63
+ }
64
+
65
+ export async function stringOfB64UrlSafeChars(numOfChars: number):
66
+ Promise<string> {
67
+ const numOfbytes = 3*(1 + Math.floor(numOfChars/4));
68
+ const byteArr = await bytes(numOfbytes);
69
+ return base64urlSafe.pack(byteArr).substring(0, numOfChars);
70
+ }
71
+
72
+ export async function stringOfB64Chars(numOfChars: number):
73
+ Promise<string> {
74
+ const numOfbytes = 3*(1 + Math.floor(numOfChars/4));
75
+ const byteArr = await bytes(numOfbytes);
76
+ return (byteArr as Buffer).toString('base64').substring(0, numOfChars);
77
+ }
78
+
79
+ Object.freeze(exports);