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,124 @@
1
+ /*
2
+ Copyright (C) 2016, 2018 - 2019 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ export const EMPTY_BUFFER = Buffer.alloc(0);
19
+
20
+ /**
21
+ * Buffer and Uint8Array are intimately linked in Node, starting with some
22
+ * version. As a result, Uint8Array can be efficiently turned into Buffer,
23
+ * or Buffer can be used as Uint8Array.
24
+ * This function checks if given argument is a Buffer, and, if not, does
25
+ * proper enveloping.
26
+ * @param bytes that we need to have as a Buffer
27
+ * @return Buffer with given bytes.
28
+ */
29
+ export function toBuffer(bytes: Uint8Array): Buffer {
30
+ if (Buffer.isBuffer(bytes)) { return bytes; }
31
+ if (bytes.length === 0) { return EMPTY_BUFFER; }
32
+ return Buffer.from(bytes.buffer as ArrayBuffer, bytes.byteOffset, bytes.length);
33
+ }
34
+
35
+ /**
36
+ * Node's JSON.stringify turns Buffer into a particular json.
37
+ * This function turns this json back to Buffer.
38
+ * @param json of a Buffer
39
+ * @return a Buffer reconstructed from a given json.
40
+ */
41
+ export function bufFromJson(json: any): Buffer {
42
+ if ((json.type !== 'Buffer') || !Array.isArray(json.data)) { throw new Error(
43
+ 'Given argument is not a buffer json.'); }
44
+ return Buffer.from(json.data);
45
+ }
46
+
47
+ export namespace base64 {
48
+
49
+ export function pack(bytes: Uint8Array): string {
50
+ const buf = toBuffer(bytes);
51
+ return buf.toString('base64');
52
+ }
53
+
54
+ export function open(str: string): Uint8Array {
55
+ return Buffer.from(str, 'base64');
56
+ }
57
+
58
+ }
59
+ Object.freeze(base64);
60
+
61
+ export namespace base64urlSafe {
62
+
63
+ export function pack(bytes: Uint8Array): string {
64
+ const str = base64.pack(bytes);
65
+ return str
66
+ .replace(/\+/g, '-')
67
+ .replace(/\//g, '_');
68
+ }
69
+
70
+ export function open(str: string): Uint8Array {
71
+ str = str
72
+ .replace(/-/g, '+')
73
+ .replace(/_/g, '/');
74
+ return base64.open(str);
75
+ }
76
+
77
+ export function allCharsFromAlphabet(str: string): boolean {
78
+ for (let i=0; i<str.length; i+=1) {
79
+ const cp = str.codePointAt(i)!;
80
+ // small letters
81
+ if ((0x61 <= cp) && (cp <= 0x7A)) { continue; }
82
+ // capital letters
83
+ if ((0x41 <= cp) && (cp <= 0x5A)) { continue; }
84
+ // digits
85
+ if ((0x30 <= cp) && (cp <= 0x39)) { continue; }
86
+ // underscore and hyphen
87
+ if ((cp === 0x5F) || (cp === 0x2D)) { continue; }
88
+ return false;
89
+ }
90
+ return true;
91
+ }
92
+
93
+ }
94
+ Object.freeze(base64);
95
+
96
+ export namespace utf8 {
97
+
98
+ export function pack(str: string): Uint8Array {
99
+ return Buffer.from(str, 'utf8');
100
+ }
101
+
102
+ export function open(bytes: Uint8Array): string {
103
+ const buf = toBuffer(bytes);
104
+ return buf.toString('utf8');
105
+ }
106
+
107
+ }
108
+ Object.freeze(utf8);
109
+
110
+ export function joinByteArrs(arrs: Uint8Array[]): Uint8Array {
111
+ let totalLen = 0;
112
+ for (const arr of arrs) {
113
+ totalLen += arr.length;
114
+ }
115
+ const allBytes = Buffer.allocUnsafe(totalLen);
116
+ let ofs = 0;
117
+ for (const arr of arrs) {
118
+ allBytes.set(arr, ofs);
119
+ ofs += arr.length;
120
+ }
121
+ return allBytes;
122
+ }
123
+
124
+ Object.freeze(exports);
@@ -0,0 +1,166 @@
1
+ /*
2
+ Copyright (C) 2015 - 2016, 2019 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+
19
+ export type ByteSource = web3n.ByteSource;
20
+
21
+ type Transferable = web3n.implementation.Transferable;
22
+
23
+ export function wrapByteSourceImplementation(src: ByteSource): ByteSource {
24
+ const wrap: ByteSource = {
25
+ read: src.read.bind(src),
26
+ getSize: src.getSize.bind(src)
27
+ };
28
+ if (src.seek) {
29
+ wrap.seek = src.seek.bind(src);
30
+ wrap.getPosition = src.getPosition!.bind(src);
31
+ }
32
+ (wrap as any as Transferable).$_transferrable_type_id_$ = 'ByteSource';
33
+ return wrap;
34
+ }
35
+
36
+ export type ByteSink = web3n.ByteSink;
37
+
38
+ export function wrapByteSinkImplementation(sink: ByteSink): ByteSink {
39
+ const wrap: ByteSink = {
40
+ setSize: sink.setSize.bind(sink),
41
+ write: sink.write.bind(sink),
42
+ getSize: sink.getSize.bind(sink)
43
+ };
44
+ if (sink.seek) {
45
+ wrap.seek = sink.seek.bind(sink);
46
+ wrap.getPosition = sink.getPosition!.bind(sink);
47
+ }
48
+ (wrap as any as Transferable).$_transferrable_type_id_$ = 'ByteSink';
49
+ return wrap;
50
+ }
51
+
52
+ export class BytesFIFOBuffer {
53
+
54
+ private queue: Uint8Array[] = [];
55
+ private bytesLen = 0;
56
+ get length(): number {
57
+ return this.bytesLen;
58
+ }
59
+ get queueLength(): number {
60
+ return this.queue.length;
61
+ }
62
+
63
+ constructor() {
64
+ Object.seal(this);
65
+ }
66
+
67
+ clear(): void {
68
+ this.queue = [];
69
+ this.bytesLen = 0;
70
+ }
71
+
72
+ push(bytes: Uint8Array): void {
73
+ if (bytes.length === 0) { return; }
74
+ this.queue.push(bytes);
75
+ this.bytesLen += bytes.length;
76
+ }
77
+
78
+ /**
79
+ * @param extractLen is number of bytes to extract. It must always be less,
80
+ * or equal to current length of queue.
81
+ * @return requested bytes
82
+ */
83
+ private extractSomeBytesFrom(extractLen: number): Uint8Array|undefined {
84
+ if (this.queue.length === 0) { return undefined; }
85
+ const extract = new Uint8Array(extractLen);
86
+ let offset = 0;
87
+ while (offset < extractLen) {
88
+ const chunk = this.queue[0];
89
+ if ((offset + chunk.length) <= extractLen) {
90
+ extract.set(chunk, offset);
91
+ offset += chunk.length;
92
+ this.queue.shift();
93
+ } else {
94
+ extract.set(chunk.subarray(0, extractLen-offset), offset);
95
+ this.queue[0] = chunk.subarray(extractLen-offset);
96
+ break;
97
+ }
98
+ }
99
+ return extract;
100
+ }
101
+
102
+ private extractAllBytesFrom(): Uint8Array|undefined {
103
+ return this.extractSomeBytesFrom(this.bytesLen);
104
+ }
105
+
106
+ /**
107
+ * @param len is a number of bytes to get.
108
+ * If undefined is given, all bytes should be returned.
109
+ * @return an array of bytes, or undefined, if there are not enough bytes.
110
+ */
111
+ getBytes(len: number|undefined, canBeLess = false): Uint8Array|undefined {
112
+ let extract: Uint8Array|undefined;
113
+ if (typeof len !== 'number') {
114
+ extract = this.extractAllBytesFrom();
115
+ } else {
116
+ if (len < 1) { throw new Error('Length parameter is illegal: '+len); }
117
+ if (this.queue.length === 0) { return undefined; }
118
+ if (this.bytesLen < len) {
119
+ if (canBeLess) {
120
+ extract = this.extractAllBytesFrom();
121
+ } else {
122
+ return undefined;
123
+ }
124
+ } else {
125
+ extract = this.extractSomeBytesFrom(len);
126
+ }
127
+ }
128
+ if (extract) {
129
+ this.bytesLen -= extract.length;
130
+ }
131
+ return extract;
132
+ }
133
+
134
+ }
135
+ Object.freeze(BytesFIFOBuffer.prototype);
136
+ Object.freeze(BytesFIFOBuffer);
137
+
138
+ /**
139
+ * @param bytes
140
+ * @return a seekable byte source, based on a given byte array.
141
+ */
142
+ export function sourceFromArray(bytes: Uint8Array): ByteSource {
143
+ let pos = 0;
144
+ const src: ByteSource = {
145
+ getPosition: async (): Promise<number> => { return pos; },
146
+ getSize: async (): Promise<number> => { return bytes.length; },
147
+ read: async (len: number|undefined): Promise<Uint8Array|undefined> => {
148
+ if (len === undefined) { return bytes.subarray(pos); }
149
+ if ((typeof len !== 'number') || (len < 0)) { throw new TypeError(
150
+ `Illegal length parameter given: ${len}`); }
151
+ const chunk = bytes.subarray(pos, pos+len);
152
+ pos += chunk.length;
153
+ return ((chunk.length === 0) ? undefined : chunk);
154
+ },
155
+ seek: async (newPos: number): Promise<void> => {
156
+ if ((typeof newPos !== 'number') || (newPos < 0)) {
157
+ throw new TypeError(`Illegal position given: ${newPos}`); }
158
+ if (newPos > bytes.length) { throw new Error(
159
+ `Position parameter is out of bound`); }
160
+ pos = newPos;
161
+ }
162
+ };
163
+ return src;
164
+ }
165
+
166
+ Object.freeze(exports);
@@ -0,0 +1,25 @@
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
+
18
+ export function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {
19
+ if (a.BYTES_PER_ELEMENT !== b.BYTES_PER_ELEMENT) { return false; }
20
+ if (a.length !== b.length) { return false; }
21
+ for (let i=0; i<a.length; i+=1) {
22
+ if (a[i] !== b[i]) { return false; }
23
+ }
24
+ return true;
25
+ }
@@ -0,0 +1,92 @@
1
+ /*
2
+ Copyright (C) 2016, 2020 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 { toASCII } from 'punycode';
19
+
20
+ /**
21
+ * @param address
22
+ * @return a canonical form of a given address.
23
+ * If given address is not ok, exception is thrown.
24
+ */
25
+ export function toCanonicalAddress(address: string): string {
26
+ const indOfAt = address.indexOf('@');
27
+ let user: string;
28
+ let domain: string;
29
+ if (indOfAt < 0) {
30
+ domain = address;
31
+ user = '';
32
+ } else {
33
+ domain = address.substring(indOfAt+1);
34
+ user = address.substring(0, indOfAt).replace(whiteSpace, '');
35
+ }
36
+ checkDomainString(domain, address);
37
+ return (user+'@'+domain).toLowerCase();
38
+ }
39
+
40
+ const whiteSpace = /\s/g;
41
+ const invalidInDomain = /[^a-zA-Z0-9\-\.]/;
42
+
43
+ function checkDomainString(d: string, addrForErrMsg: string): void {
44
+ if (d.length === 0) { throw makeParseExc(addrForErrMsg, `Domain is empty`); }
45
+ if (d.startsWith('xn--')) { throw makeParseExc(addrForErrMsg,
46
+ `Domain can't be in puny code`); }
47
+ let ascii: string;
48
+ try {
49
+ ascii = toASCII(d);
50
+ } catch (err) {
51
+ throw makeParseExc(addrForErrMsg, err);
52
+ }
53
+ if (invalidInDomain.test(ascii)) {
54
+ throw makeParseExc(addrForErrMsg);
55
+ }
56
+ }
57
+
58
+ function makeParseExc(address: string, cause?: any): UserIdParseException {
59
+ return {
60
+ runtimeException: true,
61
+ type: 'user-id-parse',
62
+ address,
63
+ message: `Can't parse given address as valid user id`,
64
+ cause
65
+ };
66
+ }
67
+
68
+ export interface UserIdParseException extends web3n.RuntimeException {
69
+ type: 'user-id-parse';
70
+ address: string;
71
+ }
72
+
73
+ export function areAddressesEqual(a: string, b: string): boolean {
74
+ const canonicalA = toCanonicalAddress(a);
75
+ if (!canonicalA) { return false; }
76
+ const canonicalB = toCanonicalAddress(b);
77
+ if (!canonicalB) { return false; }
78
+ return (canonicalA === canonicalB);
79
+ }
80
+
81
+ /**
82
+ * @param address
83
+ * @return if given address is ok, its canonical form is returned.
84
+ * Otherwise, undefined is returned.
85
+ */
86
+ export function checkAndTransformAddress(address: string): string|undefined {
87
+ try {
88
+ return toCanonicalAddress(address);
89
+ } catch (err) { }
90
+ }
91
+
92
+ Object.freeze(exports);
@@ -0,0 +1,44 @@
1
+ /*
2
+ Copyright (C) 2016 - 2017 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ export interface ErrorWithCause extends Error {
19
+ cause: any;
20
+ }
21
+
22
+ export function errWithCause(cause: any, message: string): ErrorWithCause {
23
+ const err = <ErrorWithCause> new Error(message);
24
+ err.cause = cause;
25
+ return err;
26
+ }
27
+
28
+ export function stringifyErr(err: any): string {
29
+ if ((err as web3n.RuntimeException).runtimeException || !err
30
+ || (typeof err !== 'object')) {
31
+ return `${JSON.stringify(err, null, ' ')}
32
+ `;
33
+ } else {
34
+ return `Error message: ${err.message}
35
+ Error stack: ${err.stack}${
36
+ ((err as ErrorWithCause).cause ? `
37
+ Caused by:
38
+ ${stringifyErr((err as ErrorWithCause).cause)}` :
39
+ '')}
40
+ `;
41
+ }
42
+ }
43
+
44
+ Object.freeze(exports);
@@ -0,0 +1,84 @@
1
+ /*
2
+ Copyright (C) 2015 - 2017 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ export const fileExceptionType = 'file';
19
+
20
+ export const Code: web3n.files.exceptionCode = {
21
+ notFound: 'ENOENT',
22
+ alreadyExists: 'EEXIST',
23
+ notDirectory: 'ENOTDIR',
24
+ notFile: 'ENOTFILE',
25
+ notLink: 'not-link',
26
+ isDirectory: 'EISDIR',
27
+ notEmpty: 'ENOTEMPTY',
28
+ endOfFile: 'EEOF',
29
+ concurrentUpdate: 'concurrent-update'
30
+ };
31
+ Object.freeze(Code);
32
+
33
+ export type FileException = web3n.files.FileException;
34
+
35
+ export function makeFileException(code: string|undefined, path: string,
36
+ cause?: any): FileException {
37
+ const err: FileException = {
38
+ runtimeException: true,
39
+ type: fileExceptionType,
40
+ code,
41
+ path,
42
+ cause
43
+ };
44
+ if (code === Code.alreadyExists) {
45
+ err.alreadyExists = true;
46
+ } else if (code === Code.notFound) {
47
+ err.notFound = true;
48
+ } else if (code === Code.isDirectory) {
49
+ err.isDirectory = true;
50
+ } else if (code === Code.notDirectory) {
51
+ err.notDirectory = true;
52
+ } else if (code === Code.notFile) {
53
+ err.notFile = true;
54
+ } else if (code === Code.notLink) {
55
+ err.notLink = true;
56
+ } else if (code === Code.endOfFile) {
57
+ err.endOfFile = true;
58
+ } else if (code === Code.notEmpty) {
59
+ err.notEmpty = true;
60
+ } else if (code === Code.concurrentUpdate) {
61
+ err.concurrentUpdate = true;
62
+ }
63
+ return err;
64
+ }
65
+
66
+ export function maskPathInExc(pathPrefixMaskLen: number, exc: any):
67
+ FileException {
68
+ if (exc.runtimeException || !exc.code) { return exc; }
69
+ if (typeof exc.path === 'string') {
70
+ exc.path = exc.path.substring(pathPrefixMaskLen);
71
+ }
72
+ return exc;
73
+ }
74
+
75
+ export function ensureCorrectFS(fs: web3n.files.FS, type: web3n.files.FSType,
76
+ writable: boolean): void {
77
+ if (!fs) { throw new Error("No file system given."); }
78
+ if (fs.type !== type) { throw new Error(
79
+ `Expected ${type} file system, instead got ${fs.type} type.`); }
80
+ if (fs.writable !== writable) { throw new Error(
81
+ `Given file system is ${fs.writable ? '' : 'not'} writable, while it is expected to be ${writable ? '' : 'not'} writable`); }
82
+ }
83
+
84
+ Object.freeze(exports);
@@ -0,0 +1,69 @@
1
+ /*
2
+ Copyright (C) 2015 3NSoft Inc.
3
+
4
+ This program is free software: you can redistribute it and/or modify it under
5
+ the terms of the GNU General Public License as published by the Free Software
6
+ Foundation, either version 3 of the License, or (at your option) any later
7
+ version.
8
+
9
+ This program is distributed in the hope that it will be useful, but
10
+ WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12
+ See the GNU General Public License for more details.
13
+
14
+ You should have received a copy of the GNU General Public License along with
15
+ this program. If not, see <http://www.gnu.org/licenses/>.
16
+ */
17
+
18
+ /**
19
+ * This module contains some code and type declarations that are common for
20
+ * both main and worker processes.
21
+ */
22
+
23
+ interface HTTPErrorDetails extends web3n.RuntimeException {
24
+ url: string;
25
+ method: string;
26
+ message?: string;
27
+ }
28
+
29
+ export interface ConnectException extends HTTPErrorDetails {
30
+ type: 'http-connect';
31
+ }
32
+
33
+ export interface HTTPException extends HTTPErrorDetails {
34
+ type: 'http-request';
35
+ status: number;
36
+ }
37
+
38
+ export function makeConnectionException(url: string|undefined,
39
+ method: string|undefined, msg?: string, cause?: any): ConnectException {
40
+ const exc: ConnectException = {
41
+ runtimeException: true,
42
+ type: 'http-connect',
43
+ url: url!,
44
+ method: method!,
45
+ cause
46
+ };
47
+ if (msg) {
48
+ exc.message = msg;
49
+ }
50
+ return exc;
51
+ }
52
+
53
+ export function makeHTTPException(url: string, method: string, status: number,
54
+ msg?: string, cause?: any): HTTPException {
55
+ const exc: HTTPException = {
56
+ runtimeException: true,
57
+ type: 'http-request',
58
+ url: url,
59
+ method: method,
60
+ status: status,
61
+ cause
62
+ };
63
+ if (msg) {
64
+ exc.message = msg;
65
+ }
66
+ return exc;
67
+ }
68
+
69
+ Object.freeze(exports);