spec-3nweb-server 1.8.5 → 1.8.7

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 (340) 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/resources/store.d.ts +2 -2
  6. package/build/3nstorage/resources/store.js +1 -1
  7. package/build/3nstorage/resources/users.d.ts +3 -3
  8. package/build/3nstorage/resources/users.js +1 -1
  9. package/build/3nstorage/resources/utils.d.ts +6 -0
  10. package/build/3nstorage/resources/utils.js +41 -0
  11. package/build/3nstorage/routes/owner/archive-obj-version.js +8 -10
  12. package/build/3nstorage/routes/owner/cancel-trans.js +5 -4
  13. package/build/3nstorage/routes/owner/delete-obj.js +7 -8
  14. package/build/3nstorage/routes/owner/get-archived-obj-ver.js +11 -13
  15. package/build/3nstorage/routes/owner/get-current-obj.js +7 -6
  16. package/build/3nstorage/routes/owner/get-obj-status.js +8 -8
  17. package/build/3nstorage/routes/owner/put-current-obj.js +25 -55
  18. package/build/3nstorage/routes/owner/session-params.js +2 -0
  19. package/build/asmail/resources/utils.d.ts +6 -0
  20. package/build/asmail/resources/utils.js +36 -0
  21. package/build/asmail/routes/delivery/finalize-delivery.js +3 -2
  22. package/build/asmail/routes/delivery/pre-flight.js +9 -26
  23. package/build/asmail/routes/delivery/provide-recipient-pubkey.js +4 -3
  24. package/build/asmail/routes/delivery/put-metadata.js +13 -21
  25. package/build/asmail/routes/delivery/put-obj.js +19 -25
  26. package/build/asmail/routes/delivery/restart-session.d.ts +4 -8
  27. package/build/asmail/routes/delivery/restart-session.js +10 -23
  28. package/build/asmail/routes/delivery/sender-authorization.js +5 -5
  29. package/build/asmail/routes/delivery/start-session.js +9 -24
  30. package/build/asmail/routes/retrieval/get-message-meta.js +4 -7
  31. package/build/asmail/routes/retrieval/get-message-obj.js +10 -7
  32. package/build/asmail/routes/retrieval/list-messages.js +4 -4
  33. package/build/asmail/routes/retrieval/remove-message.js +3 -2
  34. package/build/mock/tls-options.js +46 -44
  35. package/build/tests/admin-proto/signup.d.ts +1 -0
  36. package/build/tests/admin-proto/signup.js +235 -0
  37. package/build/tests/jasmine.d.ts +1 -0
  38. package/build/tests/jasmine.js +32 -0
  39. package/build/tests/libs-for-tests/3nstorage.d.ts +22 -0
  40. package/build/tests/libs-for-tests/3nstorage.js +123 -0
  41. package/build/tests/libs-for-tests/asmail.d.ts +22 -0
  42. package/build/tests/libs-for-tests/asmail.js +179 -0
  43. package/build/tests/libs-for-tests/assert.d.ts +1 -0
  44. package/build/tests/libs-for-tests/assert.js +26 -0
  45. package/build/tests/libs-for-tests/async-jasmine.d.ts +7 -0
  46. package/build/tests/libs-for-tests/async-jasmine.js +77 -0
  47. package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
  48. package/build/tests/libs-for-tests/bytes-equal.js +34 -0
  49. package/build/tests/libs-for-tests/json-copy.d.ts +1 -0
  50. package/build/tests/libs-for-tests/json-copy.js +45 -0
  51. package/build/tests/libs-for-tests/json-equal.d.ts +4 -0
  52. package/build/tests/libs-for-tests/json-equal.js +67 -0
  53. package/build/tests/libs-for-tests/mailerid.d.ts +13 -0
  54. package/build/tests/libs-for-tests/mailerid.js +114 -0
  55. package/build/tests/libs-for-tests/pkl.d.ts +28 -0
  56. package/build/tests/libs-for-tests/pkl.js +89 -0
  57. package/build/tests/libs-for-tests/server-components/3nstorage.d.ts +20 -0
  58. package/build/tests/libs-for-tests/server-components/3nstorage.js +200 -0
  59. package/build/tests/libs-for-tests/server-components/admin.d.ts +6 -0
  60. package/build/tests/libs-for-tests/server-components/admin.js +43 -0
  61. package/build/tests/libs-for-tests/server-components/asmail.d.ts +16 -0
  62. package/build/tests/libs-for-tests/server-components/asmail.js +143 -0
  63. package/build/tests/libs-for-tests/server-components/component.d.ts +13 -0
  64. package/build/tests/libs-for-tests/server-components/component.js +77 -0
  65. package/build/tests/libs-for-tests/server-components/mailerid.d.ts +10 -0
  66. package/build/tests/libs-for-tests/server-components/mailerid.js +103 -0
  67. package/build/tests/libs-for-tests/server-runner.d.ts +15 -0
  68. package/build/tests/libs-for-tests/server-runner.js +69 -0
  69. package/build/tests/libs-for-tests/spec-assembly.d.ts +6 -0
  70. package/build/tests/libs-for-tests/spec-assembly.js +55 -0
  71. package/build/tests/libs-for-tests/ws-utils.d.ts +3 -0
  72. package/build/tests/libs-for-tests/ws-utils.js +59 -0
  73. package/build/tests/libs-for-tests/xhr-utils.d.ts +61 -0
  74. package/build/tests/libs-for-tests/xhr-utils.js +154 -0
  75. package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.d.ts +2 -0
  76. package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.js +84 -0
  77. package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.d.ts +2 -0
  78. package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.js +78 -0
  79. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.d.ts +2 -0
  80. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.js +83 -0
  81. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.d.ts +2 -0
  82. package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.js +77 -0
  83. package/build/tests/protocols/3nstorage/owner/specs/delete-obj.d.ts +2 -0
  84. package/build/tests/protocols/3nstorage/owner/specs/delete-obj.js +75 -0
  85. package/build/tests/protocols/3nstorage/owner/specs/events.d.ts +2 -0
  86. package/build/tests/protocols/3nstorage/owner/specs/events.js +91 -0
  87. package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.d.ts +2 -0
  88. package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.js +269 -0
  89. package/build/tests/protocols/3nstorage/owner/specs/get-current-root.d.ts +2 -0
  90. package/build/tests/protocols/3nstorage/owner/specs/get-current-root.js +262 -0
  91. package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.d.ts +2 -0
  92. package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.js +79 -0
  93. package/build/tests/protocols/3nstorage/owner/specs/get-root-status.d.ts +2 -0
  94. package/build/tests/protocols/3nstorage/owner/specs/get-root-status.js +72 -0
  95. package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.d.ts +2 -0
  96. package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.js +287 -0
  97. package/build/tests/protocols/3nstorage/owner/specs/put-current-root.d.ts +2 -0
  98. package/build/tests/protocols/3nstorage/owner/specs/put-current-root.js +274 -0
  99. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.d.ts +2 -0
  100. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.js +73 -0
  101. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.d.ts +2 -0
  102. package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.js +72 -0
  103. package/build/tests/protocols/3nstorage/owner/test-utils.d.ts +14 -0
  104. package/build/tests/protocols/3nstorage/owner/test-utils.js +54 -0
  105. package/build/tests/protocols/3nstorage/owner.d.ts +1 -0
  106. package/build/tests/protocols/3nstorage/owner.js +138 -0
  107. package/build/tests/protocols/asmail/config.d.ts +1 -0
  108. package/build/tests/protocols/asmail/config.js +117 -0
  109. package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.d.ts +2 -0
  110. package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.js +60 -0
  111. package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.d.ts +2 -0
  112. package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.js +68 -0
  113. package/build/tests/protocols/asmail/delivery/specs/put-metadata.d.ts +2 -0
  114. package/build/tests/protocols/asmail/delivery/specs/put-metadata.js +83 -0
  115. package/build/tests/protocols/asmail/delivery/specs/put-obj.d.ts +2 -0
  116. package/build/tests/protocols/asmail/delivery/specs/put-obj.js +123 -0
  117. package/build/tests/protocols/asmail/delivery/specs/restart-session.d.ts +2 -0
  118. package/build/tests/protocols/asmail/delivery/specs/restart-session.js +79 -0
  119. package/build/tests/protocols/asmail/delivery/specs/start-session.d.ts +2 -0
  120. package/build/tests/protocols/asmail/delivery/specs/start-session.js +64 -0
  121. package/build/tests/protocols/asmail/delivery/test-utils.d.ts +16 -0
  122. package/build/tests/protocols/asmail/delivery/test-utils.js +46 -0
  123. package/build/tests/protocols/asmail/delivery.d.ts +1 -0
  124. package/build/tests/protocols/asmail/delivery.js +46 -0
  125. package/build/tests/protocols/asmail/retrieval/specs/events.d.ts +2 -0
  126. package/build/tests/protocols/asmail/retrieval/specs/events.js +62 -0
  127. package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.d.ts +2 -0
  128. package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.js +70 -0
  129. package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.d.ts +2 -0
  130. package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.js +166 -0
  131. package/build/tests/protocols/asmail/retrieval/specs/list-messages.d.ts +2 -0
  132. package/build/tests/protocols/asmail/retrieval/specs/list-messages.js +96 -0
  133. package/build/tests/protocols/asmail/retrieval/specs/remove-message.d.ts +2 -0
  134. package/build/tests/protocols/asmail/retrieval/specs/remove-message.js +66 -0
  135. package/build/tests/protocols/asmail/retrieval/test-utils.d.ts +17 -0
  136. package/build/tests/protocols/asmail/retrieval/test-utils.js +46 -0
  137. package/build/tests/protocols/asmail/retrieval.d.ts +1 -0
  138. package/build/tests/protocols/asmail/retrieval.js +92 -0
  139. package/build/tests/protocols/mailerid.d.ts +1 -0
  140. package/build/tests/protocols/mailerid.js +210 -0
  141. package/build/tests/shared-checks/check-mid-login.d.ts +2 -0
  142. package/build/tests/shared-checks/check-mid-login.js +131 -0
  143. package/build/tests/shared-checks/requests.d.ts +20 -0
  144. package/build/tests/shared-checks/requests.js +123 -0
  145. package/package.json +1 -1
  146. package/packing/create-deb.sh +57 -0
  147. package/packing/deb/lib/systemd/system/3nweb.service +11 -0
  148. package/packing/deb/postinst +44 -0
  149. package/packing/deb/usr/share/doc/3nweb-server/conf-for-postinstall.yaml +19 -0
  150. package/packing/deb/usr/share/doc/3nweb-server/copyright +22 -0
  151. package/publish-task.sh +10 -0
  152. package/push-to-github.sh +105 -0
  153. package/ts-code/3nstorage/3nstorage-app.ts +99 -0
  154. package/ts-code/3nstorage/owner.ts +178 -0
  155. package/ts-code/3nstorage/resources/sessions.ts +37 -0
  156. package/ts-code/3nstorage/resources/store.ts +896 -0
  157. package/ts-code/3nstorage/resources/users.ts +258 -0
  158. package/ts-code/3nstorage/resources/utils.ts +45 -0
  159. package/ts-code/3nstorage/routes/owner/archive-obj-version.ts +71 -0
  160. package/ts-code/3nstorage/routes/owner/cancel-trans.ts +60 -0
  161. package/ts-code/3nstorage/routes/owner/delete-obj.ts +99 -0
  162. package/ts-code/3nstorage/routes/owner/get-archived-obj-ver.ts +109 -0
  163. package/ts-code/3nstorage/routes/owner/get-current-obj.ts +124 -0
  164. package/ts-code/3nstorage/routes/owner/get-obj-status.ts +55 -0
  165. package/ts-code/3nstorage/routes/owner/param-getter.ts +51 -0
  166. package/ts-code/3nstorage/routes/owner/param-setter.ts +50 -0
  167. package/ts-code/3nstorage/routes/owner/put-current-obj.ts +257 -0
  168. package/ts-code/3nstorage/routes/owner/session-params.ts +50 -0
  169. package/ts-code/3nstorage/shared.ts +43 -0
  170. package/ts-code/asmail/asmail-app.ts +91 -0
  171. package/ts-code/asmail/config.ts +96 -0
  172. package/ts-code/asmail/delivery.ts +94 -0
  173. package/ts-code/asmail/resources/delivery-sessions.ts +118 -0
  174. package/ts-code/asmail/resources/inbox.ts +696 -0
  175. package/ts-code/asmail/resources/recipients.ts +495 -0
  176. package/ts-code/asmail/resources/sessions.ts +37 -0
  177. package/ts-code/asmail/resources/utils.ts +41 -0
  178. package/ts-code/asmail/retrieval.ts +96 -0
  179. package/ts-code/asmail/routes/config/param-getter.ts +49 -0
  180. package/ts-code/asmail/routes/config/param-setter.ts +49 -0
  181. package/ts-code/asmail/routes/delivery/finalize-delivery.ts +51 -0
  182. package/ts-code/asmail/routes/delivery/pre-flight.ts +118 -0
  183. package/ts-code/asmail/routes/delivery/provide-recipient-pubkey.ts +58 -0
  184. package/ts-code/asmail/routes/delivery/put-metadata.ts +85 -0
  185. package/ts-code/asmail/routes/delivery/put-obj.ts +152 -0
  186. package/ts-code/asmail/routes/delivery/restart-session.ts +117 -0
  187. package/ts-code/asmail/routes/delivery/sender-authorization.ts +81 -0
  188. package/ts-code/asmail/routes/delivery/start-session.ts +136 -0
  189. package/ts-code/asmail/routes/retrieval/get-message-meta.ts +50 -0
  190. package/ts-code/asmail/routes/retrieval/get-message-obj.ts +106 -0
  191. package/ts-code/asmail/routes/retrieval/list-messages.ts +68 -0
  192. package/ts-code/asmail/routes/retrieval/remove-message.ts +48 -0
  193. package/ts-code/cli/index.ts +82 -0
  194. package/ts-code/cli/run-cmd.ts +81 -0
  195. package/ts-code/cli/show-sample-config.ts +78 -0
  196. package/ts-code/cli/signup-cmd.ts +229 -0
  197. package/ts-code/cli/user-cmd.ts +68 -0
  198. package/ts-code/cli/utils.ts +105 -0
  199. package/ts-code/config/default-confs.ts +22 -0
  200. package/ts-code/config/from-yaml.ts +35 -0
  201. package/ts-code/config/letsencrypt.ts +77 -0
  202. package/ts-code/config/signup.ts +137 -0
  203. package/ts-code/lib-common/admin-api/signup.ts +120 -0
  204. package/ts-code/lib-common/assert.ts +22 -0
  205. package/ts-code/lib-common/async-fs-node.ts +656 -0
  206. package/ts-code/lib-common/buffer-utils.ts +124 -0
  207. package/ts-code/lib-common/byte-streaming/common.ts +166 -0
  208. package/ts-code/lib-common/bytes-equal.ts +25 -0
  209. package/ts-code/lib-common/canonical-address.ts +92 -0
  210. package/ts-code/lib-common/exceptions/error.ts +44 -0
  211. package/ts-code/lib-common/exceptions/file.ts +84 -0
  212. package/ts-code/lib-common/exceptions/http.ts +69 -0
  213. package/ts-code/lib-common/ipc/generic-ipc.ts +750 -0
  214. package/ts-code/lib-common/ipc/ws-ipc.ts +117 -0
  215. package/ts-code/lib-common/json-equal.ts +55 -0
  216. package/ts-code/lib-common/json-utils.ts +130 -0
  217. package/ts-code/lib-common/jwkeys.ts +246 -0
  218. package/ts-code/lib-common/map-of-sets.ts +60 -0
  219. package/ts-code/lib-common/mid-sigs-NaCl-Ed.ts +677 -0
  220. package/ts-code/lib-common/objs-on-disk/file-layout.ts +480 -0
  221. package/ts-code/lib-common/objs-on-disk/obj-file.ts +325 -0
  222. package/ts-code/lib-common/objs-on-disk/utils.ts +201 -0
  223. package/ts-code/lib-common/objs-on-disk/v1-obj-file-format.ts +329 -0
  224. package/ts-code/lib-common/processes.ts +501 -0
  225. package/ts-code/lib-common/random-node.ts +79 -0
  226. package/ts-code/lib-common/service-api/3nstorage/owner.ts +559 -0
  227. package/ts-code/lib-common/service-api/3nstorage/root-route.ts +22 -0
  228. package/ts-code/lib-common/service-api/asmail/config.ts +144 -0
  229. package/ts-code/lib-common/service-api/asmail/delivery.ts +250 -0
  230. package/ts-code/lib-common/service-api/asmail/retrieval.ts +238 -0
  231. package/ts-code/lib-common/service-api/asmail/root-route.ts +22 -0
  232. package/ts-code/lib-common/service-api/ipc-api.ts +44 -0
  233. package/ts-code/lib-common/service-api/locker.ts +44 -0
  234. package/ts-code/lib-common/service-api/mailer-id/login.ts +80 -0
  235. package/ts-code/lib-common/service-api/mailer-id/provisioning.ts +64 -0
  236. package/ts-code/lib-common/service-api/mailer-id/root-route.ts +25 -0
  237. package/ts-code/lib-common/service-api/pub-key-login.ts +75 -0
  238. package/ts-code/lib-common/service-api/web-socket-base.ts +87 -0
  239. package/ts-code/lib-common/session-encryptor.ts +54 -0
  240. package/ts-code/lib-common/time-window-cache.ts +74 -0
  241. package/ts-code/lib-common/transferable.d.ts +30 -0
  242. package/ts-code/lib-server/conf-util.ts +35 -0
  243. package/ts-code/lib-server/mid-access.ts +45 -0
  244. package/ts-code/lib-server/middleware/body-parsers.ts +248 -0
  245. package/ts-code/lib-server/middleware/error-handler.ts +79 -0
  246. package/ts-code/lib-server/pkl-access.ts +46 -0
  247. package/ts-code/lib-server/resources/dns.ts +151 -0
  248. package/ts-code/lib-server/resources/mailerid-authorizer.ts +115 -0
  249. package/ts-code/lib-server/resources/mem-backed-sessions-factory.ts +132 -0
  250. package/ts-code/lib-server/resources/server-data-folders.ts +160 -0
  251. package/ts-code/lib-server/resources/server-key-for-pkl-challenge.ts +41 -0
  252. package/ts-code/lib-server/resources/sessions.ts +232 -0
  253. package/ts-code/lib-server/resources/user-files.ts +147 -0
  254. package/ts-code/lib-server/routes/pub-key-login/complete-exchange.ts +63 -0
  255. package/ts-code/lib-server/routes/pub-key-login/start-exchange.ts +189 -0
  256. package/ts-code/lib-server/routes/sessions/close.ts +27 -0
  257. package/ts-code/lib-server/routes/sessions/mid-auth.ts +77 -0
  258. package/ts-code/lib-server/routes/sessions/start.ts +116 -0
  259. package/ts-code/lib-server/web-sockets/app.ts +339 -0
  260. package/ts-code/lib-server/web-sockets/server-events.ts +63 -0
  261. package/ts-code/lib.ts +29 -0
  262. package/ts-code/locker/locker-app.ts +60 -0
  263. package/ts-code/locker/resources/lockers.ts +17 -0
  264. package/ts-code/locker/resources/sessions.ts +37 -0
  265. package/ts-code/locker/routes/create-locker.ts +47 -0
  266. package/ts-code/mailerId/mailerId-app.ts +107 -0
  267. package/ts-code/mailerId/resources/certifier.ts +181 -0
  268. package/ts-code/mailerId/resources/sessions.ts +44 -0
  269. package/ts-code/mailerId/resources/users.ts +88 -0
  270. package/ts-code/mailerId/routes/certify.ts +68 -0
  271. package/ts-code/main.ts +304 -0
  272. package/ts-code/mock/dns.ts +106 -0
  273. package/ts-code/mock/mock-as-child-proc.ts +130 -0
  274. package/ts-code/mock/node-child-ipc.ts +69 -0
  275. package/ts-code/mock/run-in-proc.ts +111 -0
  276. package/ts-code/mock/tls-options.ts +73 -0
  277. package/ts-code/services.ts +138 -0
  278. package/ts-code/signup/resources/users.ts +429 -0
  279. package/ts-code/signup/routes/add.ts +65 -0
  280. package/ts-code/signup/routes/get-available-addresses.ts +49 -0
  281. package/ts-code/signup/routes/get-available-domains.ts +45 -0
  282. package/ts-code/signup/signup-app.ts +54 -0
  283. package/ts-code/signup/signup-tokens.ts +148 -0
  284. package/ts-code/tests/admin-proto/signup.ts +277 -0
  285. package/ts-code/tests/jasmine.ts +37 -0
  286. package/ts-code/tests/libs-for-tests/3nstorage.ts +144 -0
  287. package/ts-code/tests/libs-for-tests/asmail.ts +220 -0
  288. package/ts-code/tests/libs-for-tests/assert.ts +22 -0
  289. package/ts-code/tests/libs-for-tests/async-jasmine.ts +89 -0
  290. package/ts-code/tests/libs-for-tests/bytes-equal.ts +25 -0
  291. package/ts-code/tests/libs-for-tests/json-copy.ts +38 -0
  292. package/ts-code/tests/libs-for-tests/json-equal.ts +55 -0
  293. package/ts-code/tests/libs-for-tests/mailerid.ts +123 -0
  294. package/ts-code/tests/libs-for-tests/pkl.ts +127 -0
  295. package/ts-code/tests/libs-for-tests/server-components/3nstorage.ts +206 -0
  296. package/ts-code/tests/libs-for-tests/server-components/admin.ts +49 -0
  297. package/ts-code/tests/libs-for-tests/server-components/asmail.ts +152 -0
  298. package/ts-code/tests/libs-for-tests/server-components/component.ts +90 -0
  299. package/ts-code/tests/libs-for-tests/server-components/mailerid.ts +114 -0
  300. package/ts-code/tests/libs-for-tests/server-runner.ts +82 -0
  301. package/ts-code/tests/libs-for-tests/spec-assembly.ts +60 -0
  302. package/ts-code/tests/libs-for-tests/ws-utils.ts +61 -0
  303. package/ts-code/tests/libs-for-tests/xhr-utils.ts +179 -0
  304. package/ts-code/tests/protocols/3nstorage/owner/specs/archive-obj-ver.ts +100 -0
  305. package/ts-code/tests/protocols/3nstorage/owner/specs/archive-root-ver.ts +91 -0
  306. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.ts +99 -0
  307. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.ts +90 -0
  308. package/ts-code/tests/protocols/3nstorage/owner/specs/delete-obj.ts +84 -0
  309. package/ts-code/tests/protocols/3nstorage/owner/specs/events.ts +125 -0
  310. package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-obj.ts +298 -0
  311. package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-root.ts +290 -0
  312. package/ts-code/tests/protocols/3nstorage/owner/specs/get-obj-status.ts +88 -0
  313. package/ts-code/tests/protocols/3nstorage/owner/specs/get-root-status.ts +80 -0
  314. package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-obj.ts +366 -0
  315. package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-root.ts +329 -0
  316. package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel-root.ts +86 -0
  317. package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel.ts +86 -0
  318. package/ts-code/tests/protocols/3nstorage/owner/test-utils.ts +72 -0
  319. package/ts-code/tests/protocols/3nstorage/owner.ts +198 -0
  320. package/ts-code/tests/protocols/asmail/config.ts +172 -0
  321. package/ts-code/tests/protocols/asmail/delivery/specs/finalize-delivery.ts +69 -0
  322. package/ts-code/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.ts +88 -0
  323. package/ts-code/tests/protocols/asmail/delivery/specs/put-metadata.ts +102 -0
  324. package/ts-code/tests/protocols/asmail/delivery/specs/put-obj.ts +156 -0
  325. package/ts-code/tests/protocols/asmail/delivery/specs/restart-session.ts +97 -0
  326. package/ts-code/tests/protocols/asmail/delivery/specs/start-session.ts +79 -0
  327. package/ts-code/tests/protocols/asmail/delivery/test-utils.ts +64 -0
  328. package/ts-code/tests/protocols/asmail/delivery.ts +56 -0
  329. package/ts-code/tests/protocols/asmail/retrieval/specs/events.ts +78 -0
  330. package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-meta.ts +80 -0
  331. package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-obj.ts +197 -0
  332. package/ts-code/tests/protocols/asmail/retrieval/specs/list-messages.ts +110 -0
  333. package/ts-code/tests/protocols/asmail/retrieval/specs/remove-message.ts +74 -0
  334. package/ts-code/tests/protocols/asmail/retrieval/test-utils.ts +60 -0
  335. package/ts-code/tests/protocols/asmail/retrieval.ts +115 -0
  336. package/ts-code/tests/protocols/mailerid.ts +271 -0
  337. package/ts-code/tests/shared-checks/check-mid-login.ts +164 -0
  338. package/ts-code/tests/shared-checks/requests.ts +135 -0
  339. package/ts-code/tsconfig.json +11 -0
  340. package/ts-code/web3n.d.ts +1068 -0
@@ -0,0 +1,198 @@
1
+ /*
2
+ Copyright (C) 2016, 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 { afterAllAsync, beforeAllAsync, itAsync } from '../../libs-for-tests/async-jasmine';
19
+ import { StorageComponent } from '../../libs-for-tests/server-components/3nstorage';
20
+ import { User, doMailerIdLogin } from '../../libs-for-tests/mailerid';
21
+ import { midLoginSpecs } from '../../shared-checks/check-mid-login';
22
+ import { resolve as resolveUrl } from 'url';
23
+ import * as api from '../../../lib-common/service-api/3nstorage/owner';
24
+ import { RequestOpts, doBodylessRequest, doJsonRequest } from '../../libs-for-tests/xhr-utils';
25
+ import { expectNonAcceptanceOfBadSessionId, expectNonAcceptanceOfNonEmptyBody, expectNonAcceptanceOfBadJsonRequest } from '../../shared-checks/requests';
26
+ import { startSession } from './owner/test-utils';
27
+ import { join as joinPaths } from 'path';
28
+ import { addSpecsFrom } from '../../libs-for-tests/spec-assembly';
29
+ import { deepEqual } from '../../libs-for-tests/json-equal';
30
+
31
+ const SPECS_FOLDER = joinPaths(__dirname, './owner/specs');
32
+
33
+ describe('3NStorage owner service', () => {
34
+
35
+ let storageServer: StorageComponent;
36
+ const midServiceDomain = 'localhost';
37
+ const signupDomains = [ 'company.inc', 'personal.net' ];
38
+ let user: User;
39
+
40
+ beforeAllAsync(async () => {
41
+ storageServer = new StorageComponent(signupDomains, midServiceDomain);
42
+ await storageServer.start();
43
+ user = await storageServer.addUser(
44
+ `Bob Johnson @${signupDomains[0]}`);
45
+ await storageServer.stop(false);
46
+ });
47
+
48
+ afterAllAsync(async () => {
49
+ if (storageServer.isRunning()) {
50
+ await storageServer.stop();
51
+ } else {
52
+ await storageServer.clean();
53
+ }
54
+ storageServer = (undefined as any);
55
+ });
56
+
57
+ describe('session', () => {
58
+
59
+ beforeAllAsync(async () => {
60
+ await storageServer.restart();
61
+ });
62
+
63
+ describe('MailerId login', midLoginSpecs(
64
+ () => resolveUrl(user.storageOwnerUrl, api.midLogin.URL_PART),
65
+ () => user
66
+ ));
67
+
68
+ itAsync('closing', async () => {
69
+ const sessionId = await startSession(user);
70
+
71
+ const reqOpts: RequestOpts = {
72
+ url: resolveUrl(user.storageOwnerUrl, api.closeSession.URL_END),
73
+ method: 'POST',
74
+ sessionId
75
+ };
76
+
77
+ // normal closing of a session
78
+ let rep = await doBodylessRequest<void>(reqOpts);
79
+ expect(rep.status).withContext('status for successful closing of session').toBe(200);
80
+
81
+ // repeated call should see invalid session respose
82
+ rep = await doBodylessRequest<void>(reqOpts);
83
+ expect(rep.status).toBe(api.ERR_SC.needAuth);
84
+
85
+ reqOpts.sessionId = await doMailerIdLogin(
86
+ resolveUrl(user.storageOwnerUrl, api.midLogin.URL_PART),
87
+ user
88
+ );
89
+
90
+ await expectNonAcceptanceOfNonEmptyBody(reqOpts);
91
+
92
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
93
+
94
+ });
95
+
96
+ itAsync('dictates parameters to client side', async () => {
97
+ const ownerUrl = user.storageOwnerUrl;
98
+ const sessionId = await startSession(user);
99
+
100
+ const reqOpts: RequestOpts = {
101
+ url: resolveUrl(ownerUrl, api.sessionParams.URL_END),
102
+ method: 'GET',
103
+ responseType: 'json',
104
+ sessionId
105
+ };
106
+
107
+ const rep = await doBodylessRequest<api.sessionParams.Reply>(reqOpts);
108
+ expect(rep.status).withContext('for successful getting of session parameters').toBe(200);
109
+ expect(typeof rep.data.maxChunkSize).toBe('number');
110
+ expect(rep.data.maxChunkSize).not.toBeLessThan(64*1024);
111
+
112
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
113
+
114
+ });
115
+
116
+ });
117
+
118
+ function checkParamRoutes(
119
+ paramUrlPart: string, goodValues: any[], badValues: any[],
120
+ maxBodyLen: number
121
+ ): () => void {
122
+ return () => {
123
+
124
+ let sessionId: string;
125
+
126
+ beforeAllAsync(async () => {
127
+ sessionId = await startSession(user);
128
+ });
129
+
130
+ itAsync('is readable', async () => {
131
+
132
+ const reqOpts: RequestOpts = {
133
+ url: resolveUrl(user.storageOwnerUrl, paramUrlPart),
134
+ method: 'GET',
135
+ responseType: 'json',
136
+ sessionId
137
+ };
138
+
139
+ const rep = await doBodylessRequest<any>(reqOpts);
140
+ expect(rep.status).withContext('status for reading parameter').toBe(api.PARAM_SC.ok);
141
+
142
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
143
+
144
+ });
145
+
146
+ async function getParam(): Promise<any> {
147
+ const reqOpts: RequestOpts = {
148
+ url: resolveUrl(user.storageOwnerUrl, paramUrlPart),
149
+ method: 'GET',
150
+ responseType: 'json',
151
+ sessionId
152
+ };
153
+ const rep = await doBodylessRequest<any>(reqOpts);
154
+ expect(rep.status).toBe(api.PARAM_SC.ok);
155
+ return rep.data;
156
+ }
157
+
158
+ itAsync('is writable', async () => {
159
+
160
+ const initValue = await getParam();
161
+
162
+ const reqOpts: RequestOpts = {
163
+ url: resolveUrl(user.storageOwnerUrl, paramUrlPart),
164
+ method: 'PUT',
165
+ sessionId
166
+ };
167
+
168
+ for (const paramVal of goodValues) {
169
+
170
+ const rep = await doJsonRequest<void>(reqOpts, paramVal);
171
+ expect(rep.status).withContext('status for successful parameter value update').toBe(api.PARAM_SC.ok);
172
+
173
+ const paramOnServer = await getParam();
174
+ expect(deepEqual(paramVal, paramOnServer)).withContext('parameter value on the server should be set to new value').toBe(true);
175
+
176
+ }
177
+
178
+ await expectNonAcceptanceOfBadJsonRequest(
179
+ reqOpts, maxBodyLen, badValues
180
+ );
181
+
182
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
183
+
184
+ });
185
+
186
+ }
187
+ }
188
+
189
+ describe(`user's key derivation parameters`, checkParamRoutes(
190
+ api.keyDerivParams.URL_END,
191
+ [],
192
+ [ 1, undefined, 'string', [ 1, 2 ], [] ],
193
+ 1024
194
+ ));
195
+
196
+ addSpecsFrom(SPECS_FOLDER, () => ({ user, storageServer }));
197
+
198
+ });
@@ -0,0 +1,172 @@
1
+ /*
2
+ Copyright (C) 2016, 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 { afterAllAsync, beforeAllAsync, itAsync } from '../../libs-for-tests/async-jasmine';
19
+ import { ASMailComponent } from '../../libs-for-tests/server-components/asmail';
20
+ import { User, doMailerIdLogin } from '../../libs-for-tests/mailerid';
21
+ import { midLoginSpecs } from '../../shared-checks/check-mid-login';
22
+ import * as api from '../../../lib-common/service-api/asmail/config';
23
+ import { doJsonRequest, RequestOpts, doBodylessRequest } from '../../libs-for-tests/xhr-utils';
24
+ import { expectNonAcceptanceOfBadJsonRequest, expectNonAcceptanceOfNonEmptyBody, expectNonAcceptanceOfBadSessionId } from '../../shared-checks/requests';
25
+ import { resolve as resolveUrl } from 'url';
26
+ import { deepEqual } from '../../libs-for-tests/json-equal';
27
+
28
+ describe('ASMail configuration', () => {
29
+
30
+ let asmailServer: ASMailComponent;
31
+ const midServiceDomain = 'localhost';
32
+ const signupDomains = [ 'company.inc', 'personal.net' ];
33
+ let user1: User;
34
+ let confUrl: string;
35
+
36
+ beforeAllAsync(async () => {
37
+ asmailServer = new ASMailComponent(signupDomains, midServiceDomain);
38
+ await asmailServer.start();
39
+ confUrl = await asmailServer.getConfUrl();
40
+ if (!confUrl.endsWith('/')) { confUrl += '/'; }
41
+ user1 = await asmailServer.addUser(`Bob Johnson @${signupDomains[0]}`);
42
+ });
43
+
44
+ afterAllAsync(async () => {
45
+ await asmailServer.stop();
46
+ asmailServer = (undefined as any);
47
+ });
48
+
49
+ describe('MailerId login', midLoginSpecs(
50
+ () => resolveUrl(confUrl, api.midLogin.URL_PART),
51
+ () => user1
52
+ ));
53
+
54
+ async function startSession(user: User): Promise<string> {
55
+ return await doMailerIdLogin(
56
+ resolveUrl(confUrl, api.midLogin.URL_PART),
57
+ user
58
+ );
59
+ }
60
+
61
+ function checkParamRoutes(
62
+ paramUrlPart: string, goodValues: any[], badValues: any[],
63
+ maxBodyLen: number
64
+ ): () => void {
65
+ return () => {
66
+
67
+ let sessionId: string;
68
+
69
+ beforeAllAsync(async () => {
70
+ sessionId = await startSession(user1);
71
+ });
72
+
73
+ itAsync('is readable', async () => {
74
+
75
+ const reqOpts: RequestOpts = {
76
+ url: resolveUrl(confUrl, paramUrlPart),
77
+ method: 'GET',
78
+ responseType: 'json',
79
+ sessionId
80
+ };
81
+
82
+ const rep = await doBodylessRequest<any>(reqOpts);
83
+ expect(rep.status).withContext('status for reading parameter').toBe(api.PARAM_SC.ok);
84
+
85
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
86
+
87
+ });
88
+
89
+ async function getParam(): Promise<any> {
90
+ const reqOpts: RequestOpts = {
91
+ url: resolveUrl(confUrl, paramUrlPart),
92
+ method: 'GET',
93
+ responseType: 'json',
94
+ sessionId
95
+ };
96
+ const rep = await doBodylessRequest<any>(reqOpts);
97
+ expect(rep.status).toBe(api.PARAM_SC.ok);
98
+ return rep.data;
99
+ }
100
+
101
+ itAsync('is writable', async () => {
102
+
103
+ const reqOpts: RequestOpts = {
104
+ url: resolveUrl(confUrl, paramUrlPart),
105
+ method: 'PUT',
106
+ sessionId
107
+ };
108
+
109
+ for (const paramVal of goodValues) {
110
+
111
+ const rep = await doJsonRequest<void>(reqOpts, paramVal);
112
+ expect(rep.status).withContext('status for successful parameter value update').toBe(api.PARAM_SC.ok);
113
+
114
+ const paramOnServer = await getParam();
115
+ expect(deepEqual(paramVal, paramOnServer)).withContext('parameter value on the server should be set to new value').toBe(true);
116
+
117
+ }
118
+
119
+ await expectNonAcceptanceOfBadJsonRequest(
120
+ reqOpts, maxBodyLen, badValues
121
+ );
122
+
123
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
124
+
125
+ });
126
+
127
+ }
128
+ }
129
+
130
+ // TODO add route checking for other parameters,
131
+ // write stricter good/bad values that go into the check
132
+
133
+ describe(`user's initial public key`, checkParamRoutes(
134
+ api.p.initPubKey.URL_END,
135
+ [],
136
+ [ 1, undefined, 'string', [ 1, 2 ], [] ],
137
+ 4*1024
138
+ ));
139
+
140
+ describe(`invites for anonymous senders`, checkParamRoutes(
141
+ api.p.anonSenderInvites.URL_END,
142
+ [ {} ],
143
+ [ 1, null, undefined, 'string' ],
144
+ 40*1024
145
+ ));
146
+
147
+ itAsync(`closing session`, async () => {
148
+ const sessionId = await startSession(user1);
149
+
150
+ const reqOpts: RequestOpts = {
151
+ url: resolveUrl(confUrl, api.closeSession.URL_END),
152
+ method: 'POST',
153
+ sessionId
154
+ };
155
+
156
+ // normal closing of a session
157
+ let rep = await doBodylessRequest<void>(reqOpts);
158
+ expect(rep.status).withContext('status for successful closing of session').toBe(200);
159
+
160
+ // repeated call should see invalid session respose
161
+ rep = await doBodylessRequest<void>(reqOpts);
162
+ expect(rep.status).toBe(api.ERR_SC.needAuth);
163
+
164
+ reqOpts.sessionId = await startSession(user1);
165
+
166
+ await expectNonAcceptanceOfNonEmptyBody(reqOpts);
167
+
168
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
169
+
170
+ });
171
+
172
+ });
@@ -0,0 +1,69 @@
1
+ /*
2
+ Copyright (C) 2016 - 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 { beforeEachAsync, itAsync } from '../../../../libs-for-tests/async-jasmine';
19
+ import { SpecDescribe, TestSetup, User, msg, ASMailComponent, startSessionAndSendMsgObjs } from '../test-utils';
20
+ import { doBodylessRequest, RequestOpts } from '../../../../libs-for-tests/xhr-utils';
21
+ import { resolve as resolveUrl } from 'url';
22
+ import { completion as api } from '../../../../../lib-common/service-api/asmail/delivery';
23
+ import { expectNonAcceptanceOfBadSessionId, expectNonAcceptanceOfNonEmptyBody, UNAUTHORIZED_STATUS } from '../../../../shared-checks/requests';
24
+ import { DeliveryInfo } from '../../../../libs-for-tests/asmail';
25
+
26
+ export const specs: SpecDescribe = {
27
+ description: `Request to complete message delivery`
28
+ };
29
+
30
+ specs.definition = (setup: () => TestSetup) => (() => {
31
+
32
+ let user2: User;
33
+ let deliveryUrl: string;
34
+ let asmailServer: ASMailComponent;
35
+ let sessInfo: DeliveryInfo;
36
+ let reqOpts: RequestOpts;
37
+
38
+ beforeEachAsync(async () => {
39
+ user2 = setup().user2;
40
+ asmailServer = setup().asmailServer;
41
+ deliveryUrl = await asmailServer.getDeliveryUrl();
42
+ sessInfo = await startSessionAndSendMsgObjs(deliveryUrl, user2.id, msg);
43
+ reqOpts = {
44
+ url: resolveUrl(deliveryUrl, api.URL_END),
45
+ method: 'POST',
46
+ sessionId: sessInfo.sessionId
47
+ };
48
+ });
49
+
50
+ itAsync(`marks message as completely delivered`, async () => {
51
+ expect(await asmailServer.msgExists(user2.id, sessInfo.msgId, false)).withContext('message is known to be in delivery').toBeTruthy();
52
+
53
+ let rep = await doBodylessRequest<void>(reqOpts);
54
+ expect(rep.status).withContext('normal end of message delivering session').toBe(api.SC.ok);
55
+ expect(await asmailServer.msgExists(user2.id, sessInfo.msgId, true, msg)).withContext('message must now be delivered').toBeTruthy();
56
+
57
+ // duplicate should not work, as session is already closed
58
+ rep = await doBodylessRequest<void>(reqOpts);
59
+ expect(rep.status).toBe(UNAUTHORIZED_STATUS);
60
+ });
61
+
62
+ itAsync('adequately responds to fuzzing', async () => {
63
+ await expectNonAcceptanceOfNonEmptyBody(reqOpts);
64
+ await expectNonAcceptanceOfBadSessionId(reqOpts);
65
+ });
66
+
67
+ });
68
+
69
+ Object.freeze(exports);
@@ -0,0 +1,88 @@
1
+ /*
2
+ Copyright (C) 2016 - 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 { beforeAllAsync, itAsync } from '../../../../libs-for-tests/async-jasmine';
19
+ import { SpecDescribe, TestSetup, User } from '../test-utils';
20
+ import { doBodylessRequest, RequestOpts } from '../../../../libs-for-tests/xhr-utils';
21
+ import { resolve as resolveUrl } from 'url';
22
+ import { initPubKey as api } from '../../../../../lib-common/service-api/asmail/delivery';
23
+ import { expectNonAcceptanceOfBadSessionId, UNAUTHORIZED_STATUS } from '../../../../shared-checks/requests';
24
+ import { startMsgDeliverySession } from '../../../../libs-for-tests/asmail';
25
+ import { copy } from '../../../../libs-for-tests/json-copy';
26
+
27
+ export const specs: SpecDescribe = {
28
+ description: `Request to get recipient's registered initial key`
29
+ };
30
+
31
+ specs.definition = (setup: () => TestSetup) => (() => {
32
+
33
+ let deliveryUrl: string;
34
+ let user1: User;
35
+ let user2: User;
36
+ let baseReqOpts: RequestOpts;
37
+
38
+ beforeAllAsync(async () => {
39
+ user1 = setup().user1;
40
+ user2 = setup().user2;
41
+ deliveryUrl = await setup().asmailServer.getDeliveryUrl();
42
+ baseReqOpts = {
43
+ url: resolveUrl(deliveryUrl, api.URL_END),
44
+ method: 'GET',
45
+ responseType: 'json'
46
+ };
47
+ });
48
+
49
+ itAsync(`returns certificates, registered by recipient`, async () => {
50
+
51
+ const sessInfo = await startMsgDeliverySession(
52
+ deliveryUrl, { recipient: user2.id });
53
+ const reqOpts = copy(baseReqOpts);
54
+ reqOpts.sessionId = sessInfo.sessionId;
55
+
56
+ const rep = await doBodylessRequest<api.Reply>(reqOpts);
57
+ expect(rep.status).withContext('status for successfully getting a key').toBe(api.SC.ok);
58
+
59
+ // TODO add check of certs, together with adding check in setting pkey
60
+
61
+ });
62
+
63
+ itAsync(`returns error, when recipient registered no certs`, async () => {
64
+
65
+ // recipient doesn't have initial public key registered
66
+ const sessInfo = await startMsgDeliverySession(
67
+ deliveryUrl, { recipient: user1.id });
68
+ const reqOpts = copy(baseReqOpts);
69
+ reqOpts.sessionId = sessInfo.sessionId;
70
+
71
+ let rep = await doBodylessRequest<api.Reply>(reqOpts);
72
+ expect(rep.status).withContext('status for no key registered with server').toBe(api.SC.pkeyNotRegistered);
73
+
74
+ // session is closed, when there is no key, so repeat request is denied
75
+ rep = await doBodylessRequest<api.Reply>(reqOpts);
76
+ expect(rep.status).withContext('status for closed session').toBe(UNAUTHORIZED_STATUS);
77
+
78
+ });
79
+
80
+ itAsync('adequately responds to fuzzing', async () => {
81
+
82
+ await expectNonAcceptanceOfBadSessionId(baseReqOpts);
83
+
84
+ });
85
+
86
+ });
87
+
88
+ Object.freeze(exports);
@@ -0,0 +1,102 @@
1
+ /*
2
+ Copyright (C) 2016 - 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 { beforeEachAsync, itAsync } from '../../../../libs-for-tests/async-jasmine';
19
+ import { SpecDescribe, ASMailComponent, TestSetup, User, msg } from '../test-utils';
20
+ import { doJsonRequest, RequestOpts } from '../../../../libs-for-tests/xhr-utils';
21
+ import { resolve as resolveUrl } from 'url';
22
+ import { msgMeta as api, ERR_SC } from '../../../../../lib-common/service-api/asmail/delivery';
23
+ import { expectNonAcceptanceOfBadSessionId, expectNonAcceptanceOfBadJsonRequest } from '../../../../shared-checks/requests';
24
+ import { startMsgDeliverySession } from '../../../../libs-for-tests/asmail';
25
+
26
+ export const specs: SpecDescribe = {
27
+ description: `Request to put message's metadata`
28
+ };
29
+
30
+ specs.definition = (setup: () => TestSetup) => (() => {
31
+
32
+ let user2: User;
33
+ let reqOpts: RequestOpts;
34
+ let asmailServer: ASMailComponent;
35
+
36
+ beforeEachAsync(async () => {
37
+ user2 = setup().user2;
38
+ asmailServer = setup().asmailServer;
39
+ const deliveryUrl = await asmailServer.getDeliveryUrl();
40
+ const sessInfo = await startMsgDeliverySession(
41
+ deliveryUrl, { recipient: user2.id });
42
+ reqOpts = {
43
+ url: resolveUrl(deliveryUrl, api.URL_END),
44
+ method: 'PUT',
45
+ responseType: 'json',
46
+ sessionId: sessInfo.sessionId
47
+ };
48
+ });
49
+
50
+ itAsync('starts actual message delivery, returning message id', async () => {
51
+
52
+ const req: api.Request = {
53
+ pid: msg.cryptoMeta.pid,
54
+ objIds: [ msg.msgObjs[0].objId, msg.msgObjs[1].objId ]
55
+ };
56
+
57
+ const rep = await doJsonRequest<api.Reply>(reqOpts, req);
58
+ expect(rep.status).withContext('status for normal meta acceptance and issue of a corresponding message id').toBe(api.SC.ok);
59
+ expect(typeof rep.data.msgId).toBe('string');
60
+ const msgId = rep.data.msgId;
61
+ expect(msgId.length).toBeGreaterThan(0);
62
+ expect(typeof rep.data.maxChunkSize).toBe('number');
63
+ expect(rep.data.maxChunkSize).not.toBeLessThan(64*1024);
64
+ expect(await asmailServer.msgExists(user2.id, msgId, false)).withContext('message is known to be in delivery').toBeTruthy();
65
+
66
+ });
67
+
68
+ itAsync('is not allowing message with object ids that are either same, or have chars not from base64 url-safe alphabet', async () => {
69
+
70
+ // request with object ids, exact to letter case
71
+ const req: api.Request = {
72
+ pid: msg.cryptoMeta.pid,
73
+ objIds: [ msg.msgObjs[0].objId, msg.msgObjs[0].objId.toLowerCase() ]
74
+ };
75
+
76
+ let rep = await doJsonRequest<api.Reply>(reqOpts, req);
77
+ expect(rep.status).withContext('same object ids are not allowed').toBe(ERR_SC.malformed);
78
+
79
+ req.objIds = [ msg.msgObjs[0].objId, msg.msgObjs[0].objId+'+as' ];
80
+ rep = await doJsonRequest<api.Reply>(reqOpts, req);
81
+ expect(rep.status).withContext('object ids, equal to letter case, are not allowed').toBe(ERR_SC.malformed);
82
+
83
+ });
84
+
85
+ itAsync('adequately responds to fuzzing', async () => {
86
+
87
+ // bad JSON's
88
+ const REQ_SIZE_LIMIT = 16*1024;
89
+ const badJSONs: any[] = [ null, undefined, 1, 'string',
90
+ // XXX add meta checks to screen out these
91
+ // [1,2], [], { a:1, b:2 }
92
+ ];
93
+ await expectNonAcceptanceOfBadJsonRequest(reqOpts, REQ_SIZE_LIMIT,
94
+ badJSONs);
95
+
96
+ await expectNonAcceptanceOfBadSessionId(reqOpts, true);
97
+
98
+ });
99
+
100
+ });
101
+
102
+ Object.freeze(exports);