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,235 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2016, 2020 - 2021, 2025 3NSoft Inc.
4
+
5
+ This program is free software: you can redistribute it and/or modify it under
6
+ the terms of the GNU General Public License as published by the Free Software
7
+ Foundation, either version 3 of the License, or (at your option) any later
8
+ version.
9
+
10
+ This program is distributed in the hope that it will be useful, but
11
+ WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ See the GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along with
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ const async_jasmine_1 = require("../libs-for-tests/async-jasmine");
20
+ const admin_1 = require("../libs-for-tests/server-components/admin");
21
+ const xhr_utils_1 = require("../libs-for-tests/xhr-utils");
22
+ const signupApi = require("../../lib-common/admin-api/signup");
23
+ const requests_1 = require("../shared-checks/requests");
24
+ const jwkeys_1 = require("../../lib-common/jwkeys");
25
+ const ecma_nacl_1 = require("ecma-nacl");
26
+ describe('Admin', () => {
27
+ describe('signup subsystem', () => {
28
+ let admin;
29
+ const signupDomains = ['first.org', 'second.org'];
30
+ (0, async_jasmine_1.beforeEachAsync)(async () => {
31
+ admin = new admin_1.AdminComponent(signupDomains);
32
+ await admin.start();
33
+ });
34
+ (0, async_jasmine_1.afterEachAsync)(async () => {
35
+ await admin.stop();
36
+ admin = undefined;
37
+ });
38
+ (0, async_jasmine_1.itAsync)('tells available addresses for a given name', async () => {
39
+ const REQ_SIZE_LIMIT = 1024;
40
+ const name = 'Bob Marley ';
41
+ const reqOpts = {
42
+ url: admin.signupUrl + signupApi.availableAddressesForName.URL_END,
43
+ method: 'POST',
44
+ responseType: 'json'
45
+ };
46
+ // request with ok name
47
+ let req = { name };
48
+ const rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
49
+ expect(rep.status).withContext('status code for OK reply').toBe(signupApi.availableAddressesForName.SC.ok);
50
+ expect(Array.isArray(rep.data)).withContext('OK reply is an array').toBe(true);
51
+ expect(rep.data.length).withContext('with no users, all domains should used as options for available addresses').toBe(signupDomains.length);
52
+ for (const domain of signupDomains) {
53
+ expect(rep.data).toContain(name + '@' + domain);
54
+ }
55
+ // requests with bad names and with bad json's
56
+ const badNames = [name + '@something',
57
+ 5, null, undefined, {}]; // non-strings
58
+ const badJSONs = [name, 5, null, undefined, [name],
59
+ { a: 1 }];
60
+ for (const badName of badNames) {
61
+ req = { name: badName };
62
+ badJSONs.push(req);
63
+ }
64
+ await (0, requests_1.expectNonAcceptanceOfBadJsonRequest)(reqOpts, REQ_SIZE_LIMIT, badJSONs);
65
+ });
66
+ (0, async_jasmine_1.itAsync)('tells available domains', async () => {
67
+ const REQ_SIZE_LIMIT = 1024;
68
+ const reqOpts = {
69
+ url: admin.signupUrl + signupApi.availableDomains.URL_END,
70
+ method: 'POST',
71
+ responseType: 'json'
72
+ };
73
+ const req = {};
74
+ const rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
75
+ expect(rep.status).withContext('status code for OK reply').toBe(signupApi.availableDomains.SC.ok);
76
+ expect(Array.isArray(rep.data)).withContext('OK reply is an array').toBe(true);
77
+ expect(rep.data.length).withContext('with no token, all domains should be given as options').toBe(signupDomains.length);
78
+ for (const domain of signupDomains) {
79
+ expect(rep.data).toContain(domain);
80
+ }
81
+ // requests with bad json's
82
+ const badJSONs = [{ signupToken: 4 }];
83
+ await (0, requests_1.expectNonAcceptanceOfBadJsonRequest)(reqOpts, REQ_SIZE_LIMIT, badJSONs);
84
+ });
85
+ async function getAvailableAddressesFor(name) {
86
+ const reqOpts = {
87
+ url: admin.signupUrl + signupApi.availableAddressesForName.URL_END,
88
+ method: 'POST',
89
+ responseType: 'json'
90
+ };
91
+ const req = { name };
92
+ const rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
93
+ expect(rep.status).toBe(signupApi.availableAddressesForName.SC.ok);
94
+ return rep.data;
95
+ }
96
+ function makeAddUserReq(userId, signupToken) {
97
+ return {
98
+ userId,
99
+ storage: {
100
+ kdParams: {}
101
+ },
102
+ mailerId: {
103
+ defaultPKey: {
104
+ pkey: {
105
+ alg: ecma_nacl_1.box.JWK_ALG_NAME,
106
+ kid: (Buffer.alloc(12)).toString('base64'),
107
+ use: jwkeys_1.use.MID_PKLOGIN,
108
+ k: (Buffer.alloc(ecma_nacl_1.box.KEY_LENGTH)).toString('base64')
109
+ },
110
+ kdParams: {}
111
+ },
112
+ otherPKeys: [{
113
+ alg: ecma_nacl_1.box.JWK_ALG_NAME,
114
+ kid: (Buffer.alloc(12)).toString('base64'),
115
+ use: jwkeys_1.use.MID_PKLOGIN,
116
+ k: (Buffer.alloc(ecma_nacl_1.box.KEY_LENGTH)).toString('base64')
117
+ }]
118
+ },
119
+ signupToken
120
+ };
121
+ }
122
+ function makeBadAddUserReq(goodId) {
123
+ const name = 'Bob Marley';
124
+ const badJSONs = [name, 5, null, undefined, [name],
125
+ { a: 1 }];
126
+ const badIds = ['bad domain str',
127
+ '', ' ', '\t', '\n',
128
+ 5, null, undefined, {}]; // non-strings
129
+ for (const id of badIds) {
130
+ const req = makeAddUserReq(id);
131
+ badJSONs.push(req);
132
+ }
133
+ let req = makeAddUserReq(goodId);
134
+ delete req.userId;
135
+ badJSONs.push(req);
136
+ req = makeAddUserReq(goodId);
137
+ delete req.storage;
138
+ badJSONs.push(req);
139
+ req = makeAddUserReq(goodId);
140
+ delete req.storage.kdParams;
141
+ badJSONs.push(req);
142
+ req = makeAddUserReq(goodId);
143
+ delete req.mailerId;
144
+ badJSONs.push(req);
145
+ req = makeAddUserReq(goodId);
146
+ delete req.mailerId.defaultPKey;
147
+ badJSONs.push(req);
148
+ req = makeAddUserReq(goodId);
149
+ delete req.mailerId.defaultPKey.pkey.alg;
150
+ badJSONs.push(req);
151
+ req = makeAddUserReq(goodId);
152
+ delete req.mailerId.defaultPKey.pkey.k;
153
+ badJSONs.push(req);
154
+ req = makeAddUserReq(goodId);
155
+ delete req.mailerId.defaultPKey.pkey.kid;
156
+ badJSONs.push(req);
157
+ req = makeAddUserReq(goodId);
158
+ delete req.mailerId.defaultPKey.pkey.use;
159
+ badJSONs.push(req);
160
+ req = makeAddUserReq(goodId);
161
+ delete req.mailerId.defaultPKey.kdParams;
162
+ badJSONs.push(req);
163
+ req = makeAddUserReq(goodId);
164
+ delete req.mailerId.otherPKeys;
165
+ badJSONs.push(req);
166
+ req = makeAddUserReq(goodId);
167
+ req.mailerId.otherPKeys.shift();
168
+ badJSONs.push(req);
169
+ req = makeAddUserReq(goodId);
170
+ delete req.mailerId.otherPKeys[0].alg;
171
+ badJSONs.push(req);
172
+ req = makeAddUserReq(goodId);
173
+ delete req.mailerId.otherPKeys[0].k;
174
+ badJSONs.push(req);
175
+ req = makeAddUserReq(goodId);
176
+ delete req.mailerId.otherPKeys[0].kid;
177
+ badJSONs.push(req);
178
+ req = makeAddUserReq(goodId);
179
+ delete req.mailerId.otherPKeys[0].use;
180
+ badJSONs.push(req);
181
+ return badJSONs;
182
+ }
183
+ async function addNewUser(userId, signupToken) {
184
+ const reqOpts = {
185
+ url: admin.signupUrl + signupApi.addUser.URL_END,
186
+ method: 'POST'
187
+ };
188
+ const req = makeAddUserReq(userId, signupToken);
189
+ let rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
190
+ expect(rep.status).withContext('status when user is added').toBe(signupApi.addUser.SC.ok);
191
+ rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
192
+ expect(rep.status).withContext('status when user already exists').toBe(signupApi.addUser.SC.userAlreadyExists);
193
+ }
194
+ (0, async_jasmine_1.itAsync)('adds new user', async () => {
195
+ const REQ_SIZE_LIMIT = 4 * 1024;
196
+ const reqOpts = {
197
+ url: admin.signupUrl + signupApi.addUser.URL_END,
198
+ method: 'POST'
199
+ };
200
+ const name = 'Bob Marley ';
201
+ let addresses = await getAvailableAddressesFor(name);
202
+ let numOfAvailableAddresses = addresses.length;
203
+ expect(numOfAvailableAddresses).toBe(signupDomains.length);
204
+ // requests with bad json's
205
+ const badJSONs = makeBadAddUserReq(addresses[0]);
206
+ await (0, requests_1.expectNonAcceptanceOfBadJsonRequest)(reqOpts, REQ_SIZE_LIMIT, badJSONs);
207
+ // normal adding users
208
+ for (const userId of addresses) {
209
+ expect(addresses).toContain(userId);
210
+ await addNewUser(userId);
211
+ numOfAvailableAddresses -= 1;
212
+ addresses = await getAvailableAddressesFor(name);
213
+ expect(addresses.length).toBe(numOfAvailableAddresses);
214
+ expect(addresses).not.toContain(userId);
215
+ }
216
+ });
217
+ (0, async_jasmine_1.itAsync)(`adds new user with token`, async () => {
218
+ const reqOpts = {
219
+ url: admin.signupUrl + signupApi.addUser.URL_END,
220
+ method: 'POST'
221
+ };
222
+ // note that new id has other domain that isn't set anywhere
223
+ const userId = 'Pink Floyd @home.town';
224
+ // let's try to do this without any token
225
+ let req = makeAddUserReq(userId);
226
+ let rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
227
+ expect(rep.status).withContext('status when no token given').toBe(signupApi.addUser.SC.unauthorized);
228
+ // create token, here setup code uses spec-server specific code
229
+ const token = await admin.createSingleUserSignupTokenFor(userId);
230
+ req = makeAddUserReq(userId, token);
231
+ rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
232
+ expect(rep.status).withContext('status when user is added').toBe(signupApi.addUser.SC.ok);
233
+ });
234
+ });
235
+ });
@@ -0,0 +1 @@
1
+ declare const jas: any;
@@ -0,0 +1,32 @@
1
+ /*
2
+ Copyright (C) 2016 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
+ // NOTE: due to bad definition file, typescript below is not very type-strict.
18
+ const jas = new (require('jasmine'))();
19
+ jas.loadConfig({
20
+ spec_dir: 'build/tests',
21
+ spec_files: [
22
+ 'admin-proto/**/*.js',
23
+ 'protocols/mailerid.js',
24
+ 'protocols/3nstorage/*.js',
25
+ 'protocols/asmail/*.js',
26
+ ],
27
+ random: false
28
+ });
29
+ jas.configureDefaultReporter({
30
+ showColors: true
31
+ });
32
+ jas.execute();
@@ -0,0 +1,22 @@
1
+ import * as api from '../../lib-common/service-api/3nstorage/owner';
2
+ export declare function get3NStorageServiceUrl(storageUrl: string, service: 'owner' | 'shared'): Promise<string>;
3
+ export interface BaseObj {
4
+ objId: string;
5
+ header: Uint8Array;
6
+ segs: Uint8Array;
7
+ }
8
+ export interface Obj extends BaseObj {
9
+ version: number;
10
+ diff?: api.DiffInfo;
11
+ }
12
+ export declare function cancelTransaction(ownerUrl: string, sessionId: string, objId: string, transactionId: string): Promise<void>;
13
+ export declare function getSessionParams(ownerUrl: string, sessionId: string): Promise<api.sessionParams.Reply>;
14
+ /**
15
+ * @param user
16
+ * @param objId is object's id. Null stands for root object.
17
+ * @param ver
18
+ * @param obj
19
+ * @return a promise, resolvable object is writen.
20
+ */
21
+ export declare function saveObj(ownerUrl: string, sessionId: string, objId: string | null, ver: number, obj: Obj): Promise<void>;
22
+ export declare function removeObj(ownerUrl: string, sessionId: string, objId: string): Promise<void>;
@@ -0,0 +1,123 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2016, 2019 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.removeObj = exports.saveObj = exports.getSessionParams = exports.cancelTransaction = exports.get3NStorageServiceUrl = void 0;
20
+ const xhr_utils_1 = require("./xhr-utils");
21
+ const url_1 = require("url");
22
+ const api = require("../../lib-common/service-api/3nstorage/owner");
23
+ const buffer_utils_1 = require("../../lib-common/buffer-utils");
24
+ const assert_1 = require("./assert");
25
+ async function get3NStorageServiceUrl(storageUrl, service) {
26
+ let reqOpts = {
27
+ url: storageUrl,
28
+ method: 'GET',
29
+ responseType: 'json'
30
+ };
31
+ let rep = await (0, xhr_utils_1.doBodylessRequest)(reqOpts);
32
+ (0, assert_1.assert)(rep.status === 200);
33
+ let serviceUrl = rep.data[service];
34
+ (0, assert_1.assert)(typeof serviceUrl === 'string');
35
+ return (0, url_1.resolve)(storageUrl, serviceUrl);
36
+ }
37
+ exports.get3NStorageServiceUrl = get3NStorageServiceUrl;
38
+ async function cancelTransaction(ownerUrl, sessionId, objId, transactionId) {
39
+ let url = (0, url_1.resolve)(ownerUrl, ((objId === null) ?
40
+ api.cancelRootTransaction.getReqUrlEnd(transactionId) :
41
+ api.cancelTransaction.getReqUrlEnd(objId, transactionId)));
42
+ let reqOpts = {
43
+ url,
44
+ method: 'POST',
45
+ sessionId
46
+ };
47
+ let rep = await (0, xhr_utils_1.doBodylessRequest)(reqOpts);
48
+ (0, assert_1.assert)(rep.status === api.cancelTransaction.SC.ok, `Obj transaction isn't canceled: server status ${rep.status} instead of expected ${api.cancelTransaction.SC.ok}`);
49
+ }
50
+ exports.cancelTransaction = cancelTransaction;
51
+ async function getSessionParams(ownerUrl, sessionId) {
52
+ let reqOpts = {
53
+ url: (0, url_1.resolve)(ownerUrl, api.sessionParams.URL_END),
54
+ method: 'GET',
55
+ responseType: 'json',
56
+ sessionId
57
+ };
58
+ let rep = await (0, xhr_utils_1.doBodylessRequest)(reqOpts);
59
+ (0, assert_1.assert)(rep.status === 200);
60
+ return rep.data;
61
+ }
62
+ exports.getSessionParams = getSessionParams;
63
+ /**
64
+ * @param user
65
+ * @param objId is object's id. Null stands for root object.
66
+ * @param ver
67
+ * @param obj
68
+ * @return a promise, resolvable object is writen.
69
+ */
70
+ async function saveObj(ownerUrl, sessionId, objId, ver, obj) {
71
+ const header = obj.header.length;
72
+ const diffBytes = (obj.diff ?
73
+ buffer_utils_1.utf8.pack(JSON.stringify(obj.diff)) : undefined);
74
+ const diff = (diffBytes ? diffBytes.length : undefined);
75
+ const opts = {
76
+ method: 'PUT',
77
+ responseType: 'json',
78
+ sessionId
79
+ };
80
+ if (diffBytes) {
81
+ const urlEnd = (objId ?
82
+ api.currentObj.firstPutReqUrlEnd(objId, { ver, diff, header }) :
83
+ api.currentRootObj.firstPutReqUrlEnd({ ver, diff, header }));
84
+ opts.url = (0, url_1.resolve)(ownerUrl, urlEnd);
85
+ const rep = await (0, xhr_utils_1.doBinaryRequest)(opts, [diffBytes, obj.header]);
86
+ (0, assert_1.assert)(rep.status === api.currentObj.SC.okPut, `Obj header isn't saved: server status ${rep.status} instead of expected ${api.currentObj.SC.okPut}`);
87
+ const trans = rep.data.transactionId;
88
+ let ofs = 0;
89
+ for (const [isNew, dOfs, len] of obj.diff.sections) {
90
+ const last = ((dOfs + len) === obj.segs.length);
91
+ if (isNew === 1) {
92
+ const urlEnd = (objId ?
93
+ api.currentObj.secondPutReqUrlEnd(objId, { ofs, trans, last }) :
94
+ api.currentRootObj.secondPutReqUrlEnd({ ofs, trans, last }));
95
+ opts.url = (0, url_1.resolve)(ownerUrl, urlEnd);
96
+ const rep = await (0, xhr_utils_1.doBinaryRequest)(opts, obj.segs.subarray(dOfs, dOfs + len));
97
+ (0, assert_1.assert)(rep.status === api.currentObj.SC.okPut, `Obj segments sections isn't saved: server status ${rep.status} instead of expected ${api.currentObj.SC.okPut}`);
98
+ }
99
+ ofs += len;
100
+ }
101
+ }
102
+ else {
103
+ const urlOpts = { ver, header, last: true };
104
+ const urlEnd = (objId ?
105
+ api.currentObj.firstPutReqUrlEnd(objId, urlOpts) :
106
+ api.currentRootObj.firstPutReqUrlEnd(urlOpts));
107
+ opts.url = (0, url_1.resolve)(ownerUrl, urlEnd);
108
+ const rep = await (0, xhr_utils_1.doBinaryRequest)(opts, [obj.header, obj.segs]);
109
+ (0, assert_1.assert)(rep.status === api.currentObj.SC.okPut, `Complete obj isn't saved: server status ${rep.status} instead of expected ${api.currentObj.SC.okPut}`);
110
+ }
111
+ }
112
+ exports.saveObj = saveObj;
113
+ async function removeObj(ownerUrl, sessionId, objId) {
114
+ const opts = {
115
+ url: (0, url_1.resolve)(ownerUrl, api.currentObj.getReqUrlEnd(objId)),
116
+ method: 'DELETE',
117
+ sessionId
118
+ };
119
+ const rep = await (0, xhr_utils_1.doBodylessRequest)(opts);
120
+ (0, assert_1.assert)(rep.status === api.currentObj.SC.okDelete, `Obj isn't removed: server status ${rep.status} instead of expected ${api.currentObj.SC.okDelete}`);
121
+ }
122
+ exports.removeObj = removeObj;
123
+ Object.freeze(exports);
@@ -0,0 +1,22 @@
1
+ import { User } from './mailerid';
2
+ import { p } from '../../lib-common/service-api/asmail/config';
3
+ import * as deliveryApi from '../../lib-common/service-api/asmail/delivery';
4
+ import { BaseObj as Obj } from './3nstorage';
5
+ export { BaseObj as Obj } from './3nstorage';
6
+ export declare function getASMailServiceUrl(asmailUrl: string, service: 'delivery' | 'retrieval' | 'config'): Promise<string>;
7
+ export declare function setInboxParams(asmailUrl: string, user: User, params: {
8
+ [pUrl: string]: any;
9
+ }): Promise<void>;
10
+ export declare const PUBLIC_KEY_USE = "asmail-pub-key";
11
+ export declare function generateInitPubKey(midUrl: string, user: User): Promise<p.initPubKey.Certs>;
12
+ export declare function startMsgDeliverySession(deliveryUrl: string, req: deliveryApi.sessionStart.Request): Promise<deliveryApi.sessionStart.Reply>;
13
+ export interface DeliveryInfo extends deliveryApi.msgMeta.Reply, deliveryApi.sessionStart.Reply {
14
+ }
15
+ export declare function startMsgDelivery(deliveryUrl: string, firstReq: deliveryApi.sessionStart.Request, metaReq: deliveryApi.msgMeta.Request): Promise<DeliveryInfo>;
16
+ export declare function sendMsgObj(deliveryUrl: string, sessionId: string, obj: Obj, chunkLimit: number | undefined): Promise<void>;
17
+ export interface Msg {
18
+ cryptoMeta: deliveryApi.msgMeta.CryptoInfo;
19
+ msgObjs: Obj[];
20
+ }
21
+ export declare function sendMsg(deliveryUrl: string, recipient: string, msg: Msg): Promise<string>;
22
+ export declare function msgSendingSteps(deliveryUrl: string, recipient: string, msg: Msg): AsyncGenerator<string, string, unknown>;
@@ -0,0 +1,179 @@
1
+ "use strict";
2
+ /*
3
+ Copyright (C) 2016, 2019, 2022 3NSoft Inc.
4
+
5
+ This program is free software: you can redistribute it and/or modify it under
6
+ the terms of the GNU General Public License as published by the Free Software
7
+ Foundation, either version 3 of the License, or (at your option) any later
8
+ version.
9
+
10
+ This program is distributed in the hope that it will be useful, but
11
+ WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
13
+ See the GNU General Public License for more details.
14
+
15
+ You should have received a copy of the GNU General Public License along with
16
+ this program. If not, see <http://www.gnu.org/licenses/>.
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.msgSendingSteps = exports.sendMsg = exports.sendMsgObj = exports.startMsgDelivery = exports.startMsgDeliverySession = exports.generateInitPubKey = exports.PUBLIC_KEY_USE = exports.setInboxParams = exports.getASMailServiceUrl = void 0;
20
+ const mailerid_1 = require("./mailerid");
21
+ const xhr_utils_1 = require("./xhr-utils");
22
+ const url_1 = require("url");
23
+ const config_1 = require("../../lib-common/service-api/asmail/config");
24
+ const random = require("../../lib-common/random-node");
25
+ const buffer_utils_1 = require("../../lib-common/buffer-utils");
26
+ const ecma_nacl_1 = require("ecma-nacl");
27
+ const deliveryApi = require("../../lib-common/service-api/asmail/delivery");
28
+ const assert_1 = require("./assert");
29
+ async function getASMailServiceUrl(asmailUrl, service) {
30
+ const reqOpts = {
31
+ url: asmailUrl,
32
+ method: 'GET',
33
+ responseType: 'json'
34
+ };
35
+ const rep = await (0, xhr_utils_1.doBodylessRequest)(reqOpts);
36
+ expect(rep.status).toBe(200);
37
+ const serviceUrl = rep.data[service];
38
+ expect(typeof serviceUrl).toBe('string');
39
+ return (0, url_1.resolve)(asmailUrl, serviceUrl);
40
+ }
41
+ exports.getASMailServiceUrl = getASMailServiceUrl;
42
+ async function setInboxParams(asmailUrl, user, params) {
43
+ const confUrl = await getASMailServiceUrl(asmailUrl, 'config');
44
+ const sessionId = await (0, mailerid_1.doMailerIdLogin)((0, url_1.resolve)(confUrl, config_1.midLogin.URL_PART), user);
45
+ for (const pUrl of Object.keys(params)) {
46
+ const reqOpts = {
47
+ url: (0, url_1.resolve)(confUrl, pUrl),
48
+ method: 'PUT',
49
+ sessionId
50
+ };
51
+ const rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, params[pUrl]);
52
+ expect(rep.status).toBe(config_1.PARAM_SC.ok);
53
+ }
54
+ }
55
+ exports.setInboxParams = setInboxParams;
56
+ exports.PUBLIC_KEY_USE = 'asmail-pub-key';
57
+ async function generateInitPubKey(midUrl, user) {
58
+ const midSigner = await (0, mailerid_1.provisionMidSigner)(midUrl, user);
59
+ const skeyBytes = await random.bytes(ecma_nacl_1.box.KEY_LENGTH);
60
+ const pkeyBytes = ecma_nacl_1.box.generate_pubkey(skeyBytes);
61
+ const pkey = {
62
+ use: exports.PUBLIC_KEY_USE,
63
+ alg: ecma_nacl_1.box.JWK_ALG_NAME,
64
+ kid: await random.stringOfB64Chars(10),
65
+ k: buffer_utils_1.base64.pack(pkeyBytes)
66
+ };
67
+ const pkeyCert = midSigner.certifyPublicKey(pkey, 30 * 24 * 60 * 60);
68
+ const certs = {
69
+ pkeyCert,
70
+ provCert: midSigner.providerCert,
71
+ userCert: midSigner.userCert
72
+ };
73
+ return certs;
74
+ }
75
+ exports.generateInitPubKey = generateInitPubKey;
76
+ async function startMsgDeliverySession(deliveryUrl, req) {
77
+ const reqOpts = {
78
+ url: (0, url_1.resolve)(deliveryUrl, deliveryApi.sessionStart.URL_END),
79
+ method: 'POST',
80
+ responseType: 'json'
81
+ };
82
+ const rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, req);
83
+ expect(rep.status).toBe(deliveryApi.sessionStart.SC.ok);
84
+ return rep.data;
85
+ }
86
+ exports.startMsgDeliverySession = startMsgDeliverySession;
87
+ async function startMsgDelivery(deliveryUrl, firstReq, metaReq) {
88
+ const info = (await startMsgDeliverySession(deliveryUrl, firstReq));
89
+ const reqOpts = {
90
+ url: (0, url_1.resolve)(deliveryUrl, deliveryApi.msgMeta.URL_END),
91
+ method: 'PUT',
92
+ responseType: 'json',
93
+ sessionId: info.sessionId
94
+ };
95
+ const rep = await (0, xhr_utils_1.doJsonRequest)(reqOpts, metaReq);
96
+ expect(rep.status).toBe(deliveryApi.msgMeta.SC.ok);
97
+ for (const field of Object.keys(rep.data)) {
98
+ info[field] = rep.data[field];
99
+ }
100
+ return info;
101
+ }
102
+ exports.startMsgDelivery = startMsgDelivery;
103
+ async function sendMsgObj(deliveryUrl, sessionId, obj, chunkLimit) {
104
+ if (!obj.objId) {
105
+ throw new Error(`Message object doesn't have an id`);
106
+ }
107
+ if (!chunkLimit) {
108
+ chunkLimit = 512 * 1024;
109
+ }
110
+ let ofs = 0;
111
+ const segsLen = obj.segs.length;
112
+ while (ofs < segsLen) {
113
+ const reqOpts = { url: '', method: 'PUT', sessionId };
114
+ let bytesToSend;
115
+ if (ofs === 0) {
116
+ // first request starts with header
117
+ const header = obj.header.length;
118
+ const segsChunk = obj.segs.subarray(0, chunkLimit - header);
119
+ const last = (segsChunk.length === obj.segs.length);
120
+ bytesToSend = [obj.header, segsChunk];
121
+ reqOpts.url = (0, url_1.resolve)(deliveryUrl, deliveryApi.msgObj.firstPutReqUrlEnd(obj.objId, { header, last }));
122
+ ofs += segsChunk.length;
123
+ }
124
+ else {
125
+ // second request(s) send bytes
126
+ bytesToSend = obj.segs.subarray(ofs, ofs + chunkLimit);
127
+ const last = ((ofs + bytesToSend.length) === obj.segs.length);
128
+ reqOpts.url = (0, url_1.resolve)(deliveryUrl, deliveryApi.msgObj.secondPutReqUrlEnd(obj.objId, { ofs, last }));
129
+ ofs += bytesToSend.length;
130
+ }
131
+ const rep = await (0, xhr_utils_1.doBinaryRequest)(reqOpts, bytesToSend);
132
+ (0, assert_1.assert)(rep.status === deliveryApi.msgObj.SC.ok, `Msg obj isn't saved: server status ${rep.status} instead of expected ${deliveryApi.msgObj.SC.ok}`);
133
+ }
134
+ }
135
+ exports.sendMsgObj = sendMsgObj;
136
+ async function sendMsg(deliveryUrl, recipient, msg) {
137
+ const stepsIter = msgSendingSteps(deliveryUrl, recipient, msg);
138
+ const fstStep = await stepsIter.next();
139
+ expect(fstStep.done).toBeFalsy();
140
+ expect(fstStep.value).toBeDefined();
141
+ const msgId = fstStep.value;
142
+ let done;
143
+ do {
144
+ done = !!(await stepsIter.next()).done;
145
+ } while (!done);
146
+ return msgId;
147
+ }
148
+ exports.sendMsg = sendMsg;
149
+ async function* msgSendingSteps(deliveryUrl, recipient, msg) {
150
+ const meta = makeMetaFor(msg);
151
+ const sessInfo = await startMsgDelivery(deliveryUrl, { recipient }, meta);
152
+ yield sessInfo.msgId;
153
+ for (const msgObj of msg.msgObjs) {
154
+ await sendMsgObj(deliveryUrl, sessInfo.sessionId, msgObj, sessInfo.maxChunkSize);
155
+ yield sessInfo.msgId;
156
+ }
157
+ const reqOpts = {
158
+ url: (0, url_1.resolve)(deliveryUrl, deliveryApi.completion.URL_END),
159
+ method: 'POST',
160
+ sessionId: sessInfo.sessionId
161
+ };
162
+ const rep = await (0, xhr_utils_1.doBodylessRequest)(reqOpts);
163
+ expect(rep.status).toBe(deliveryApi.completion.SC.ok);
164
+ return sessInfo.msgId;
165
+ }
166
+ exports.msgSendingSteps = msgSendingSteps;
167
+ function makeMetaFor(msg) {
168
+ const meta = msg.cryptoMeta;
169
+ meta.objIds = [];
170
+ for (let i = 0; i < msg.msgObjs.length; i += 1) {
171
+ const objId = msg.msgObjs[i].objId;
172
+ if (!objId) {
173
+ throw new Error(`Message object #${i} doesn't have an id`);
174
+ }
175
+ meta.objIds[i] = objId;
176
+ }
177
+ return meta;
178
+ }
179
+ Object.freeze(exports);
@@ -0,0 +1 @@
1
+ export declare function assert(ok: boolean, errMsg?: string): void;
@@ -0,0 +1,26 @@
1
+ "use strict";
2
+ /*
3
+ Copyright(c) 2018 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.assert = void 0;
20
+ function assert(ok, errMsg) {
21
+ if (!ok) {
22
+ throw new Error(errMsg);
23
+ }
24
+ }
25
+ exports.assert = assert;
26
+ Object.freeze(exports);
@@ -0,0 +1,7 @@
1
+ export declare function itAsync(expectation: string, assertion?: () => Promise<void>, timeout?: number): void;
2
+ export declare function xitAsync(expectation: string, assertion?: () => Promise<void>, timeout?: number): void;
3
+ export declare function fitAsync(expectation: string, assertion?: () => Promise<void>, timeout?: number): void;
4
+ export declare function beforeAllAsync(action: () => Promise<void>, timeout?: number): void;
5
+ export declare function afterAllAsync(action: () => Promise<void>, timeout?: number): void;
6
+ export declare function beforeEachAsync(action: () => Promise<void>, timeout?: number): void;
7
+ export declare function afterEachAsync(action: () => Promise<void>, timeout?: number): void;