spec-3nweb-server 1.8.5 → 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 (309) 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/mock/tls-options.js +46 -44
  6. package/build/tests/admin-proto/signup.d.ts +1 -0
  7. package/build/tests/admin-proto/signup.js +235 -0
  8. package/build/tests/jasmine.d.ts +1 -0
  9. package/build/tests/jasmine.js +32 -0
  10. package/build/tests/libs-for-tests/3nstorage.d.ts +22 -0
  11. package/build/tests/libs-for-tests/3nstorage.js +123 -0
  12. package/build/tests/libs-for-tests/asmail.d.ts +22 -0
  13. package/build/tests/libs-for-tests/asmail.js +179 -0
  14. package/build/tests/libs-for-tests/assert.d.ts +1 -0
  15. package/build/tests/libs-for-tests/assert.js +26 -0
  16. package/build/tests/libs-for-tests/async-jasmine.d.ts +7 -0
  17. package/build/tests/libs-for-tests/async-jasmine.js +77 -0
  18. package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
  19. package/build/tests/libs-for-tests/bytes-equal.js +34 -0
  20. package/build/tests/libs-for-tests/json-copy.d.ts +1 -0
  21. package/build/tests/libs-for-tests/json-copy.js +45 -0
  22. package/build/tests/libs-for-tests/json-equal.d.ts +4 -0
  23. package/build/tests/libs-for-tests/json-equal.js +67 -0
  24. package/build/tests/libs-for-tests/mailerid.d.ts +13 -0
  25. package/build/tests/libs-for-tests/mailerid.js +114 -0
  26. package/build/tests/libs-for-tests/pkl.d.ts +28 -0
  27. package/build/tests/libs-for-tests/pkl.js +89 -0
  28. package/build/tests/libs-for-tests/server-components/3nstorage.d.ts +20 -0
  29. package/build/tests/libs-for-tests/server-components/3nstorage.js +200 -0
  30. package/build/tests/libs-for-tests/server-components/admin.d.ts +6 -0
  31. package/build/tests/libs-for-tests/server-components/admin.js +43 -0
  32. package/build/tests/libs-for-tests/server-components/asmail.d.ts +16 -0
  33. package/build/tests/libs-for-tests/server-components/asmail.js +143 -0
  34. package/build/tests/libs-for-tests/server-components/component.d.ts +13 -0
  35. package/build/tests/libs-for-tests/server-components/component.js +77 -0
  36. package/build/tests/libs-for-tests/server-components/mailerid.d.ts +10 -0
  37. package/build/tests/libs-for-tests/server-components/mailerid.js +103 -0
  38. package/build/tests/libs-for-tests/server-runner.d.ts +15 -0
  39. package/build/tests/libs-for-tests/server-runner.js +69 -0
  40. package/build/tests/libs-for-tests/spec-assembly.d.ts +6 -0
  41. package/build/tests/libs-for-tests/spec-assembly.js +55 -0
  42. package/build/tests/libs-for-tests/ws-utils.d.ts +3 -0
  43. package/build/tests/libs-for-tests/ws-utils.js +59 -0
  44. package/build/tests/libs-for-tests/xhr-utils.d.ts +61 -0
  45. package/build/tests/libs-for-tests/xhr-utils.js +154 -0
  46. package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.d.ts +2 -0
  47. package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.js +84 -0
  48. package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.d.ts +2 -0
  49. package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.js +78 -0
  50. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.d.ts +2 -0
  51. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.js +83 -0
  52. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.d.ts +2 -0
  53. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.js +77 -0
  54. package/build/tests/protocols/3nstorage/owner/specs/delete-obj.d.ts +2 -0
  55. package/build/tests/protocols/3nstorage/owner/specs/delete-obj.js +75 -0
  56. package/build/tests/protocols/3nstorage/owner/specs/events.d.ts +2 -0
  57. package/build/tests/protocols/3nstorage/owner/specs/events.js +91 -0
  58. package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.d.ts +2 -0
  59. package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.js +269 -0
  60. package/build/tests/protocols/3nstorage/owner/specs/get-current-root.d.ts +2 -0
  61. package/build/tests/protocols/3nstorage/owner/specs/get-current-root.js +262 -0
  62. package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.d.ts +2 -0
  63. package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.js +79 -0
  64. package/build/tests/protocols/3nstorage/owner/specs/get-root-status.d.ts +2 -0
  65. package/build/tests/protocols/3nstorage/owner/specs/get-root-status.js +72 -0
  66. package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.d.ts +2 -0
  67. package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.js +287 -0
  68. package/build/tests/protocols/3nstorage/owner/specs/put-current-root.d.ts +2 -0
  69. package/build/tests/protocols/3nstorage/owner/specs/put-current-root.js +274 -0
  70. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.d.ts +2 -0
  71. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.js +73 -0
  72. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.d.ts +2 -0
  73. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.js +72 -0
  74. package/build/tests/protocols/3nstorage/owner/test-utils.d.ts +14 -0
  75. package/build/tests/protocols/3nstorage/owner/test-utils.js +54 -0
  76. package/build/tests/protocols/3nstorage/owner.d.ts +1 -0
  77. package/build/tests/protocols/3nstorage/owner.js +138 -0
  78. package/build/tests/protocols/asmail/config.d.ts +1 -0
  79. package/build/tests/protocols/asmail/config.js +117 -0
  80. package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.d.ts +2 -0
  81. package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.js +60 -0
  82. package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.d.ts +2 -0
  83. package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.js +68 -0
  84. package/build/tests/protocols/asmail/delivery/specs/put-metadata.d.ts +2 -0
  85. package/build/tests/protocols/asmail/delivery/specs/put-metadata.js +83 -0
  86. package/build/tests/protocols/asmail/delivery/specs/put-obj.d.ts +2 -0
  87. package/build/tests/protocols/asmail/delivery/specs/put-obj.js +123 -0
  88. package/build/tests/protocols/asmail/delivery/specs/restart-session.d.ts +2 -0
  89. package/build/tests/protocols/asmail/delivery/specs/restart-session.js +79 -0
  90. package/build/tests/protocols/asmail/delivery/specs/start-session.d.ts +2 -0
  91. package/build/tests/protocols/asmail/delivery/specs/start-session.js +64 -0
  92. package/build/tests/protocols/asmail/delivery/test-utils.d.ts +16 -0
  93. package/build/tests/protocols/asmail/delivery/test-utils.js +46 -0
  94. package/build/tests/protocols/asmail/delivery.d.ts +1 -0
  95. package/build/tests/protocols/asmail/delivery.js +46 -0
  96. package/build/tests/protocols/asmail/retrieval/specs/events.d.ts +2 -0
  97. package/build/tests/protocols/asmail/retrieval/specs/events.js +62 -0
  98. package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.d.ts +2 -0
  99. package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.js +70 -0
  100. package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.d.ts +2 -0
  101. package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.js +166 -0
  102. package/build/tests/protocols/asmail/retrieval/specs/list-messages.d.ts +2 -0
  103. package/build/tests/protocols/asmail/retrieval/specs/list-messages.js +96 -0
  104. package/build/tests/protocols/asmail/retrieval/specs/remove-message.d.ts +2 -0
  105. package/build/tests/protocols/asmail/retrieval/specs/remove-message.js +66 -0
  106. package/build/tests/protocols/asmail/retrieval/test-utils.d.ts +17 -0
  107. package/build/tests/protocols/asmail/retrieval/test-utils.js +46 -0
  108. package/build/tests/protocols/asmail/retrieval.d.ts +1 -0
  109. package/build/tests/protocols/asmail/retrieval.js +92 -0
  110. package/build/tests/protocols/mailerid.d.ts +1 -0
  111. package/build/tests/protocols/mailerid.js +210 -0
  112. package/build/tests/shared-checks/check-mid-login.d.ts +2 -0
  113. package/build/tests/shared-checks/check-mid-login.js +131 -0
  114. package/build/tests/shared-checks/requests.d.ts +20 -0
  115. package/build/tests/shared-checks/requests.js +123 -0
  116. package/package.json +1 -1
  117. package/packing/create-deb.sh +57 -0
  118. package/packing/deb/lib/systemd/system/3nweb.service +11 -0
  119. package/packing/deb/postinst +44 -0
  120. package/packing/deb/usr/share/doc/3nweb-server/conf-for-postinstall.yaml +19 -0
  121. package/packing/deb/usr/share/doc/3nweb-server/copyright +22 -0
  122. package/publish-task.sh +10 -0
  123. package/push-to-github.sh +105 -0
  124. package/ts-code/3nstorage/3nstorage-app.ts +99 -0
  125. package/ts-code/3nstorage/owner.ts +178 -0
  126. package/ts-code/3nstorage/resources/sessions.ts +37 -0
  127. package/ts-code/3nstorage/resources/store.ts +896 -0
  128. package/ts-code/3nstorage/resources/users.ts +258 -0
  129. package/ts-code/3nstorage/routes/owner/archive-obj-version.ts +73 -0
  130. package/ts-code/3nstorage/routes/owner/cancel-trans.ts +58 -0
  131. package/ts-code/3nstorage/routes/owner/delete-obj.ts +103 -0
  132. package/ts-code/3nstorage/routes/owner/get-archived-obj-ver.ts +111 -0
  133. package/ts-code/3nstorage/routes/owner/get-current-obj.ts +122 -0
  134. package/ts-code/3nstorage/routes/owner/get-obj-status.ts +55 -0
  135. package/ts-code/3nstorage/routes/owner/param-getter.ts +51 -0
  136. package/ts-code/3nstorage/routes/owner/param-setter.ts +50 -0
  137. package/ts-code/3nstorage/routes/owner/put-current-obj.ts +284 -0
  138. package/ts-code/3nstorage/routes/owner/session-params.ts +49 -0
  139. package/ts-code/3nstorage/shared.ts +43 -0
  140. package/ts-code/asmail/asmail-app.ts +91 -0
  141. package/ts-code/asmail/config.ts +96 -0
  142. package/ts-code/asmail/delivery.ts +94 -0
  143. package/ts-code/asmail/resources/delivery-sessions.ts +118 -0
  144. package/ts-code/asmail/resources/inbox.ts +696 -0
  145. package/ts-code/asmail/resources/recipients.ts +495 -0
  146. package/ts-code/asmail/resources/sessions.ts +37 -0
  147. package/ts-code/asmail/retrieval.ts +96 -0
  148. package/ts-code/asmail/routes/config/param-getter.ts +49 -0
  149. package/ts-code/asmail/routes/config/param-setter.ts +49 -0
  150. package/ts-code/asmail/routes/delivery/finalize-delivery.ts +50 -0
  151. package/ts-code/asmail/routes/delivery/pre-flight.ts +132 -0
  152. package/ts-code/asmail/routes/delivery/provide-recipient-pubkey.ts +58 -0
  153. package/ts-code/asmail/routes/delivery/put-metadata.ts +94 -0
  154. package/ts-code/asmail/routes/delivery/put-obj.ts +166 -0
  155. package/ts-code/asmail/routes/delivery/restart-session.ts +130 -0
  156. package/ts-code/asmail/routes/delivery/sender-authorization.ts +81 -0
  157. package/ts-code/asmail/routes/delivery/start-session.ts +151 -0
  158. package/ts-code/asmail/routes/retrieval/get-message-meta.ts +53 -0
  159. package/ts-code/asmail/routes/retrieval/get-message-obj.ts +109 -0
  160. package/ts-code/asmail/routes/retrieval/list-messages.ts +70 -0
  161. package/ts-code/asmail/routes/retrieval/remove-message.ts +47 -0
  162. package/ts-code/cli/index.ts +82 -0
  163. package/ts-code/cli/run-cmd.ts +81 -0
  164. package/ts-code/cli/show-sample-config.ts +78 -0
  165. package/ts-code/cli/signup-cmd.ts +229 -0
  166. package/ts-code/cli/user-cmd.ts +68 -0
  167. package/ts-code/cli/utils.ts +105 -0
  168. package/ts-code/config/default-confs.ts +22 -0
  169. package/ts-code/config/from-yaml.ts +35 -0
  170. package/ts-code/config/letsencrypt.ts +77 -0
  171. package/ts-code/config/signup.ts +137 -0
  172. package/ts-code/lib-common/admin-api/signup.ts +120 -0
  173. package/ts-code/lib-common/assert.ts +22 -0
  174. package/ts-code/lib-common/async-fs-node.ts +656 -0
  175. package/ts-code/lib-common/buffer-utils.ts +124 -0
  176. package/ts-code/lib-common/byte-streaming/common.ts +166 -0
  177. package/ts-code/lib-common/bytes-equal.ts +25 -0
  178. package/ts-code/lib-common/canonical-address.ts +92 -0
  179. package/ts-code/lib-common/exceptions/error.ts +44 -0
  180. package/ts-code/lib-common/exceptions/file.ts +84 -0
  181. package/ts-code/lib-common/exceptions/http.ts +69 -0
  182. package/ts-code/lib-common/ipc/generic-ipc.ts +750 -0
  183. package/ts-code/lib-common/ipc/ws-ipc.ts +117 -0
  184. package/ts-code/lib-common/json-equal.ts +55 -0
  185. package/ts-code/lib-common/json-utils.ts +130 -0
  186. package/ts-code/lib-common/jwkeys.ts +246 -0
  187. package/ts-code/lib-common/map-of-sets.ts +60 -0
  188. package/ts-code/lib-common/mid-sigs-NaCl-Ed.ts +677 -0
  189. package/ts-code/lib-common/objs-on-disk/file-layout.ts +480 -0
  190. package/ts-code/lib-common/objs-on-disk/obj-file.ts +325 -0
  191. package/ts-code/lib-common/objs-on-disk/utils.ts +201 -0
  192. package/ts-code/lib-common/objs-on-disk/v1-obj-file-format.ts +329 -0
  193. package/ts-code/lib-common/processes.ts +501 -0
  194. package/ts-code/lib-common/random-node.ts +79 -0
  195. package/ts-code/lib-common/service-api/3nstorage/owner.ts +559 -0
  196. package/ts-code/lib-common/service-api/3nstorage/root-route.ts +22 -0
  197. package/ts-code/lib-common/service-api/asmail/config.ts +144 -0
  198. package/ts-code/lib-common/service-api/asmail/delivery.ts +250 -0
  199. package/ts-code/lib-common/service-api/asmail/retrieval.ts +238 -0
  200. package/ts-code/lib-common/service-api/asmail/root-route.ts +22 -0
  201. package/ts-code/lib-common/service-api/ipc-api.ts +44 -0
  202. package/ts-code/lib-common/service-api/locker.ts +44 -0
  203. package/ts-code/lib-common/service-api/mailer-id/login.ts +80 -0
  204. package/ts-code/lib-common/service-api/mailer-id/provisioning.ts +64 -0
  205. package/ts-code/lib-common/service-api/mailer-id/root-route.ts +25 -0
  206. package/ts-code/lib-common/service-api/pub-key-login.ts +75 -0
  207. package/ts-code/lib-common/service-api/web-socket-base.ts +87 -0
  208. package/ts-code/lib-common/session-encryptor.ts +54 -0
  209. package/ts-code/lib-common/time-window-cache.ts +74 -0
  210. package/ts-code/lib-common/transferable.d.ts +30 -0
  211. package/ts-code/lib-server/conf-util.ts +35 -0
  212. package/ts-code/lib-server/mid-access.ts +45 -0
  213. package/ts-code/lib-server/middleware/body-parsers.ts +248 -0
  214. package/ts-code/lib-server/middleware/error-handler.ts +79 -0
  215. package/ts-code/lib-server/pkl-access.ts +46 -0
  216. package/ts-code/lib-server/resources/dns.ts +151 -0
  217. package/ts-code/lib-server/resources/mailerid-authorizer.ts +115 -0
  218. package/ts-code/lib-server/resources/mem-backed-sessions-factory.ts +132 -0
  219. package/ts-code/lib-server/resources/server-data-folders.ts +160 -0
  220. package/ts-code/lib-server/resources/server-key-for-pkl-challenge.ts +41 -0
  221. package/ts-code/lib-server/resources/sessions.ts +232 -0
  222. package/ts-code/lib-server/resources/user-files.ts +147 -0
  223. package/ts-code/lib-server/routes/pub-key-login/complete-exchange.ts +63 -0
  224. package/ts-code/lib-server/routes/pub-key-login/start-exchange.ts +189 -0
  225. package/ts-code/lib-server/routes/sessions/close.ts +27 -0
  226. package/ts-code/lib-server/routes/sessions/mid-auth.ts +77 -0
  227. package/ts-code/lib-server/routes/sessions/start.ts +116 -0
  228. package/ts-code/lib-server/web-sockets/app.ts +339 -0
  229. package/ts-code/lib-server/web-sockets/server-events.ts +63 -0
  230. package/ts-code/lib.ts +29 -0
  231. package/ts-code/locker/locker-app.ts +60 -0
  232. package/ts-code/locker/resources/lockers.ts +17 -0
  233. package/ts-code/locker/resources/sessions.ts +37 -0
  234. package/ts-code/locker/routes/create-locker.ts +47 -0
  235. package/ts-code/mailerId/mailerId-app.ts +107 -0
  236. package/ts-code/mailerId/resources/certifier.ts +181 -0
  237. package/ts-code/mailerId/resources/sessions.ts +44 -0
  238. package/ts-code/mailerId/resources/users.ts +88 -0
  239. package/ts-code/mailerId/routes/certify.ts +68 -0
  240. package/ts-code/main.ts +304 -0
  241. package/ts-code/mock/dns.ts +106 -0
  242. package/ts-code/mock/mock-as-child-proc.ts +130 -0
  243. package/ts-code/mock/node-child-ipc.ts +69 -0
  244. package/ts-code/mock/run-in-proc.ts +111 -0
  245. package/ts-code/mock/tls-options.ts +73 -0
  246. package/ts-code/services.ts +138 -0
  247. package/ts-code/signup/resources/users.ts +429 -0
  248. package/ts-code/signup/routes/add.ts +65 -0
  249. package/ts-code/signup/routes/get-available-addresses.ts +49 -0
  250. package/ts-code/signup/routes/get-available-domains.ts +45 -0
  251. package/ts-code/signup/signup-app.ts +54 -0
  252. package/ts-code/signup/signup-tokens.ts +148 -0
  253. package/ts-code/tests/admin-proto/signup.ts +277 -0
  254. package/ts-code/tests/jasmine.ts +37 -0
  255. package/ts-code/tests/libs-for-tests/3nstorage.ts +144 -0
  256. package/ts-code/tests/libs-for-tests/asmail.ts +220 -0
  257. package/ts-code/tests/libs-for-tests/assert.ts +22 -0
  258. package/ts-code/tests/libs-for-tests/async-jasmine.ts +89 -0
  259. package/ts-code/tests/libs-for-tests/bytes-equal.ts +25 -0
  260. package/ts-code/tests/libs-for-tests/json-copy.ts +38 -0
  261. package/ts-code/tests/libs-for-tests/json-equal.ts +55 -0
  262. package/ts-code/tests/libs-for-tests/mailerid.ts +123 -0
  263. package/ts-code/tests/libs-for-tests/pkl.ts +127 -0
  264. package/ts-code/tests/libs-for-tests/server-components/3nstorage.ts +206 -0
  265. package/ts-code/tests/libs-for-tests/server-components/admin.ts +49 -0
  266. package/ts-code/tests/libs-for-tests/server-components/asmail.ts +152 -0
  267. package/ts-code/tests/libs-for-tests/server-components/component.ts +90 -0
  268. package/ts-code/tests/libs-for-tests/server-components/mailerid.ts +114 -0
  269. package/ts-code/tests/libs-for-tests/server-runner.ts +82 -0
  270. package/ts-code/tests/libs-for-tests/spec-assembly.ts +60 -0
  271. package/ts-code/tests/libs-for-tests/ws-utils.ts +61 -0
  272. package/ts-code/tests/libs-for-tests/xhr-utils.ts +179 -0
  273. package/ts-code/tests/protocols/3nstorage/owner/specs/archive-obj-ver.ts +100 -0
  274. package/ts-code/tests/protocols/3nstorage/owner/specs/archive-root-ver.ts +91 -0
  275. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.ts +99 -0
  276. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.ts +90 -0
  277. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-obj.ts +84 -0
  278. package/ts-code/tests/protocols/3nstorage/owner/specs/events.ts +125 -0
  279. package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-obj.ts +298 -0
  280. package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-root.ts +290 -0
  281. package/ts-code/tests/protocols/3nstorage/owner/specs/get-obj-status.ts +88 -0
  282. package/ts-code/tests/protocols/3nstorage/owner/specs/get-root-status.ts +80 -0
  283. package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-obj.ts +366 -0
  284. package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-root.ts +329 -0
  285. package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel-root.ts +86 -0
  286. package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel.ts +86 -0
  287. package/ts-code/tests/protocols/3nstorage/owner/test-utils.ts +72 -0
  288. package/ts-code/tests/protocols/3nstorage/owner.ts +198 -0
  289. package/ts-code/tests/protocols/asmail/config.ts +172 -0
  290. package/ts-code/tests/protocols/asmail/delivery/specs/finalize-delivery.ts +69 -0
  291. package/ts-code/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.ts +88 -0
  292. package/ts-code/tests/protocols/asmail/delivery/specs/put-metadata.ts +102 -0
  293. package/ts-code/tests/protocols/asmail/delivery/specs/put-obj.ts +156 -0
  294. package/ts-code/tests/protocols/asmail/delivery/specs/restart-session.ts +97 -0
  295. package/ts-code/tests/protocols/asmail/delivery/specs/start-session.ts +79 -0
  296. package/ts-code/tests/protocols/asmail/delivery/test-utils.ts +64 -0
  297. package/ts-code/tests/protocols/asmail/delivery.ts +56 -0
  298. package/ts-code/tests/protocols/asmail/retrieval/specs/events.ts +78 -0
  299. package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-meta.ts +80 -0
  300. package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-obj.ts +197 -0
  301. package/ts-code/tests/protocols/asmail/retrieval/specs/list-messages.ts +110 -0
  302. package/ts-code/tests/protocols/asmail/retrieval/specs/remove-message.ts +74 -0
  303. package/ts-code/tests/protocols/asmail/retrieval/test-utils.ts +60 -0
  304. package/ts-code/tests/protocols/asmail/retrieval.ts +115 -0
  305. package/ts-code/tests/protocols/mailerid.ts +271 -0
  306. package/ts-code/tests/shared-checks/check-mid-login.ts +164 -0
  307. package/ts-code/tests/shared-checks/requests.ts +135 -0
  308. package/ts-code/tsconfig.json +11 -0
  309. package/ts-code/web3n.d.ts +1068 -0
@@ -0,0 +1,91 @@
1
+ /*
2
+ Copyright (C) 2015 - 2017, 2020, 2025 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 { Express } from 'express';
19
+ import { AppWithWSs } from '../lib-server/web-sockets/app';
20
+ import { DeliverySessions } from './resources/delivery-sessions';
21
+ import { makeSessionFactory } from './resources/sessions';
22
+ import { makeRecipients } from './resources/recipients';
23
+ import { MidAuthorizer } from '../lib-server/routes/sessions/mid-auth';
24
+ import { ErrLogger, makeErrHandler } from '../lib-server/middleware/error-handler';
25
+ import { makeApp as makeConfApp } from './config';
26
+ import { makeApp as makeDeliveryApp } from './delivery';
27
+ import { makeApp as makeRetrievalApp } from './retrieval';
28
+ import { ASMailRootRoute } from '../lib-common/service-api/asmail/root-route';
29
+
30
+ const PATHS = {
31
+ delivery: '/delivery/',
32
+ retrieval: '/retrieval/',
33
+ config: '/config/'
34
+ };
35
+
36
+ function setupStaticEntryRoute(app: Express): void {
37
+
38
+ app.route('/')
39
+ .get((req, res) => {
40
+ let path = req.originalUrl;
41
+ if (path[path.length-1] !== '/') {
42
+ path = path+'/';
43
+ }
44
+ const json: ASMailRootRoute = {
45
+ delivery: path+PATHS.delivery.substring(1),
46
+ retrieval: path+PATHS.retrieval.substring(1),
47
+ config: path+PATHS.config.substring(1)
48
+ };
49
+ // the following implicitly sets content type application/json
50
+ res.status(200).json(json);
51
+ });
52
+
53
+ }
54
+
55
+ export function makeASMailApp(
56
+ rootFolder: string, domain: string, midAuthorizer: MidAuthorizer,
57
+ errLogger?: ErrLogger
58
+ ): AppWithWSs {
59
+
60
+ const app = new AppWithWSs();
61
+ const mailDeliverySessions = DeliverySessions.make(5*60);
62
+ const recipientsSessions = makeSessionFactory(10*60);
63
+ const userSettingSessions = makeSessionFactory(10*60);
64
+ const recipients = makeRecipients(rootFolder);
65
+
66
+ setupStaticEntryRoute(app.http);
67
+
68
+ app.http.use(PATHS.delivery,
69
+ makeDeliveryApp(
70
+ domain, mailDeliverySessions, recipients.delivery, midAuthorizer
71
+ )
72
+ );
73
+
74
+ app.use(PATHS.retrieval,
75
+ makeRetrievalApp(
76
+ domain, recipientsSessions, recipients.retrieval, midAuthorizer
77
+ )
78
+ );
79
+
80
+ app.http.use(PATHS.config,
81
+ makeConfApp(
82
+ domain, userSettingSessions, recipients.config, midAuthorizer
83
+ )
84
+ );
85
+
86
+ app.http.use(makeErrHandler(errLogger));
87
+
88
+ return app;
89
+ }
90
+
91
+ Object.freeze(exports);
@@ -0,0 +1,96 @@
1
+ /*
2
+ Copyright (C) 2015 - 2016, 2024 - 2025 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 * as express from 'express';
19
+ import { json as parseJSON, emptyBody } from '../lib-server/middleware/body-parsers';
20
+ import { SessionsFactory } from './resources/sessions';
21
+ import { ASMailServiceConfig } from './resources/recipients';
22
+ import { MidAuthorizer } from '../lib-server/routes/sessions/mid-auth';
23
+ import { closeSession } from '../lib-server/routes/sessions/close';
24
+ import { getParam } from './routes/config/param-getter';
25
+ import { setParam } from './routes/config/param-setter';
26
+ import * as api from '../lib-common/service-api/asmail/config';
27
+ import { addMailerIdLoginRoutes } from '../lib-server/mid-access';
28
+
29
+ export function makeApp(
30
+ domain: string, sessions: SessionsFactory, recipients: ASMailServiceConfig,
31
+ midAuthorizer: MidAuthorizer
32
+ ): express.Express {
33
+
34
+ const app = express();
35
+ app.disable('etag');
36
+
37
+ // Login
38
+ addMailerIdLoginRoutes(
39
+ app, domain, '/'+api.midLogin.URL_PART,
40
+ sessions, recipients.exists, midAuthorizer
41
+ );
42
+
43
+ // *** Require authorized session for everything below ***
44
+ app.use(sessions.ensureAuthorizedSession());
45
+
46
+ app.post('/'+api.closeSession.URL_END,
47
+ emptyBody(),
48
+ closeSession()
49
+ );
50
+
51
+ app.route('/'+api.p.initPubKey.URL_END)
52
+ .get(getParam(recipients.getPubKey))
53
+ .put(parseJSON('4kb', true),
54
+ setParam(recipients.setPubKey)
55
+ );
56
+
57
+ app.route('/'+api.p.anonSenderPolicy.URL_END)
58
+ .get(getParam(recipients.getAnonSenderPolicy))
59
+ .put(parseJSON('40kb'),
60
+ setParam(recipients.setAnonSenderPolicy)
61
+ );
62
+
63
+ app.route('/'+api.p.anonSenderInvites.URL_END)
64
+ .get(getParam(recipients.getAnonSenderInvites))
65
+ .put(parseJSON('40kb'),
66
+ setParam(recipients.setAnonSenderInvites)
67
+ );
68
+
69
+ app.route('/'+api.p.authSenderPolicy.URL_END)
70
+ .get(getParam(recipients.getAuthSenderPolicy))
71
+ .put(parseJSON('4kb'),
72
+ setParam(recipients.setAuthSenderPolicy)
73
+ );
74
+
75
+ app.route('/'+api.p.authSenderInvites.URL_END)
76
+ .get(getParam(recipients.getAuthSenderInvites))
77
+ .put(parseJSON('40kb'),
78
+ setParam(recipients.setAuthSenderInvites)
79
+ );
80
+
81
+ app.route('/'+api.p.authSenderWhitelist.URL_END)
82
+ .get(getParam(recipients.getAuthSenderWhitelist))
83
+ .put(parseJSON('40kb'),
84
+ setParam(recipients.setAuthSenderWhitelist)
85
+ );
86
+
87
+ app.route('/'+api.p.authSenderBlacklist.URL_END)
88
+ .get(getParam(recipients.getAuthSenderBlacklist))
89
+ .put(parseJSON('40kb'),
90
+ setParam(recipients.setAuthSenderBlacklist)
91
+ );
92
+
93
+ return app;
94
+ }
95
+
96
+ Object.freeze(exports);
@@ -0,0 +1,94 @@
1
+ /*
2
+ Copyright (C) 2015 - 2017, 2025 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 * as express from 'express';
19
+ import { json as parseJSON, emptyBody } from '../lib-server/middleware/body-parsers';
20
+ import { SessionsFactory } from './resources/delivery-sessions';
21
+ import { MsgDelivery } from './resources/recipients';
22
+ import { startSession } from './routes/delivery/start-session';
23
+ import { preFlight } from './routes/delivery/pre-flight';
24
+ import { restartSession } from './routes/delivery/restart-session';
25
+ import { IMidAuthorizer, authorize } from './routes/delivery/sender-authorization';
26
+ import { getRecipientPubKey } from './routes/delivery/provide-recipient-pubkey';
27
+ import { saveMetadata } from './routes/delivery/put-metadata';
28
+ import { saveMsgObj } from './routes/delivery/put-obj';
29
+ import { finalizeDelivery } from './routes/delivery/finalize-delivery';
30
+
31
+ import * as api from '../lib-common/service-api/asmail/delivery';
32
+
33
+ const MAX_CHUNK_SIZE = '0.5mb';
34
+
35
+ export function makeApp(
36
+ domain: string, sessions: SessionsFactory, recipients: MsgDelivery,
37
+ midAuthorizer: IMidAuthorizer
38
+ ): express.Express {
39
+
40
+ const app = express();
41
+ app.disable('etag');
42
+
43
+ app.post('/'+api.sessionStart.URL_END,
44
+ sessions.checkSession(),
45
+ parseJSON('1kb'),
46
+ startSession(recipients.allowedMaxMsgSize, sessions.generate)
47
+ );
48
+
49
+ app.post('/'+api.preFlight.URL_END,
50
+ sessions.checkSession(),
51
+ parseJSON('1kb'),
52
+ preFlight(recipients.allowedMaxMsgSize)
53
+ );
54
+
55
+ app.post('/'+api.sessionRestart.URL_END,
56
+ sessions.checkSession(),
57
+ parseJSON('1kb'),
58
+ restartSession(
59
+ sessions.generate, sessions.getSessionForMsg,
60
+ recipients.incompleteMsgDeliveryParams, MAX_CHUNK_SIZE
61
+ )
62
+ );
63
+
64
+ app.post('/'+api.authSender.URL_END,
65
+ sessions.ensureOpenedSession(),
66
+ parseJSON('4kb'),
67
+ authorize(domain, midAuthorizer)
68
+ );
69
+
70
+ // *** Require authorized session for everything below ***
71
+ app.use(sessions.ensureAuthorizedSession());
72
+
73
+ app.get('/'+api.initPubKey.URL_END,
74
+ getRecipientPubKey(recipients.getPubKey)
75
+ );
76
+
77
+ app.put('/'+api.msgMeta.URL_END,
78
+ parseJSON('16kb'),
79
+ saveMetadata(recipients.setMsgStorage, MAX_CHUNK_SIZE)
80
+ );
81
+
82
+ app.put('/'+api.msgObj.EXPRESS_URL_END,
83
+ saveMsgObj(recipients.saveObj, MAX_CHUNK_SIZE)
84
+ );
85
+
86
+ app.post('/'+api.completion.URL_END,
87
+ emptyBody(),
88
+ finalizeDelivery(recipients.finalizeDelivery)
89
+ );
90
+
91
+ return app;
92
+ }
93
+
94
+ Object.freeze(exports);
@@ -0,0 +1,118 @@
1
+ /*
2
+ Copyright (C) 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
+ /**
19
+ * This module constructs memory-backed sessions factories.
20
+ */
21
+
22
+ import { InMemorySessions } from '../../lib-server/resources/mem-backed-sessions-factory';
23
+ import { Request as Req, Factory, Session, GenerateSession as GenSession, wrapFactory } from '../../lib-server/resources/sessions';
24
+
25
+ export interface SessionParams {
26
+ recipient: string;
27
+ sender: string|undefined;
28
+ invite: string|undefined;
29
+ maxMsgLength: number;
30
+ currentMsgLength: number;
31
+ msgId: string;
32
+ }
33
+
34
+ export type Request = Req<SessionParams>;
35
+ export type GenerateSession = GenSession<SessionParams>;
36
+ export type GetSessionForMsg = (recipient: string, msgId: string) =>
37
+ Promise<Session<SessionParams>|undefined>;
38
+
39
+ export interface SessionsFactory extends Factory<SessionParams> {
40
+ getSessionForMsg: GetSessionForMsg;
41
+ }
42
+
43
+ export class DeliverySessions extends InMemorySessions<SessionParams>
44
+ implements SessionsFactory {
45
+
46
+ /**
47
+ * Keys of this map identify messages, and format is 'recipient:msgId'.
48
+ * Values are respective session ids.
49
+ */
50
+ private msgToSessionMap = new Map<string, string>();
51
+
52
+ private constructor(timeoutSecs: number) {
53
+ super(timeoutSecs, sessionId => this.makeSessionParams(sessionId));
54
+ Object.seal(this);
55
+ }
56
+
57
+ private makeSessionParams(sessionId: string): SessionParams {
58
+ const factory = this;
59
+ let msgId: string = (undefined as any);
60
+ const sParams: SessionParams = {
61
+ recipient: (undefined as any),
62
+ currentMsgLength: 0,
63
+ maxMsgLength: (undefined as any),
64
+ invite: undefined,
65
+ sender: undefined,
66
+ get msgId(): string {
67
+ return msgId;
68
+ },
69
+ set msgId(id: string) {
70
+ if (msgId) { throw new Error(`Message is is already set`); }
71
+ if (typeof sParams.recipient !== 'string') {
72
+ throw new Error(`Recipient should be set in session before setting message id`); }
73
+ msgId = id;
74
+ factory.msgToSessionMap.set(
75
+ `${sParams.recipient}:${msgId}`, sessionId);
76
+ }
77
+ };
78
+ return Object.seal(sParams);
79
+ }
80
+
81
+ protected async remove(s: Session<SessionParams>): Promise<void> {
82
+ await super.remove(s);
83
+ this.msgToSessionMap.delete(`${s.params.recipient}:${s.params.msgId}`);
84
+ }
85
+
86
+ async getSessionForMsg(
87
+ recipient: string, msgId: string
88
+ ): Promise<Session<SessionParams>|undefined> {
89
+ const sessionId = this.msgToSessionMap.get(`${recipient}:${msgId}`);
90
+ if (sessionId) {
91
+ const session = await this.get(sessionId);
92
+ if (session) {
93
+ session.lastAccessedAt = Date.now();
94
+ return session;
95
+ } else {
96
+ console.warn(`Inconsistency in session factory state: session to msg mapping exists, while session doesn't exist.`);
97
+ }
98
+ }
99
+ return;
100
+ }
101
+
102
+ /**
103
+ * This returns factory, that works properly in a single process application,
104
+ * clearing up sessions that past given timeout.
105
+ * @param timeout is a session timeout in seconds
106
+ */
107
+ static make(timeout: number): SessionsFactory {
108
+ const factory = new DeliverySessions(timeout);
109
+ const wrap = wrapFactory(factory) as SessionsFactory;
110
+ wrap.getSessionForMsg = factory.getSessionForMsg.bind(factory);
111
+ return Object.freeze(wrap);
112
+ }
113
+
114
+ }
115
+ Object.freeze(DeliverySessions.prototype);
116
+ Object.freeze(DeliverySessions);
117
+
118
+ Object.freeze(exports);