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.
- package/.gitlab-ci-linux.yml +50 -0
- package/.gitlab-ci-mac.yml +29 -0
- package/.gitlab-ci-windows.yml +29 -0
- package/.gitlab-ci.yml +63 -0
- package/build/3nstorage/resources/store.d.ts +2 -2
- package/build/3nstorage/resources/store.js +1 -1
- package/build/3nstorage/resources/users.d.ts +3 -3
- package/build/3nstorage/resources/users.js +1 -1
- package/build/3nstorage/resources/utils.d.ts +6 -0
- package/build/3nstorage/resources/utils.js +41 -0
- package/build/3nstorage/routes/owner/archive-obj-version.js +8 -10
- package/build/3nstorage/routes/owner/cancel-trans.js +5 -4
- package/build/3nstorage/routes/owner/delete-obj.js +7 -8
- package/build/3nstorage/routes/owner/get-archived-obj-ver.js +11 -13
- package/build/3nstorage/routes/owner/get-current-obj.js +7 -6
- package/build/3nstorage/routes/owner/get-obj-status.js +8 -8
- package/build/3nstorage/routes/owner/put-current-obj.js +25 -55
- package/build/3nstorage/routes/owner/session-params.js +2 -0
- package/build/asmail/resources/utils.d.ts +6 -0
- package/build/asmail/resources/utils.js +36 -0
- package/build/asmail/routes/delivery/finalize-delivery.js +3 -2
- package/build/asmail/routes/delivery/pre-flight.js +9 -26
- package/build/asmail/routes/delivery/provide-recipient-pubkey.js +4 -3
- package/build/asmail/routes/delivery/put-metadata.js +13 -21
- package/build/asmail/routes/delivery/put-obj.js +19 -25
- package/build/asmail/routes/delivery/restart-session.d.ts +4 -8
- package/build/asmail/routes/delivery/restart-session.js +10 -23
- package/build/asmail/routes/delivery/sender-authorization.js +5 -5
- package/build/asmail/routes/delivery/start-session.js +9 -24
- package/build/asmail/routes/retrieval/get-message-meta.js +4 -7
- package/build/asmail/routes/retrieval/get-message-obj.js +10 -7
- package/build/asmail/routes/retrieval/list-messages.js +4 -4
- package/build/asmail/routes/retrieval/remove-message.js +3 -2
- package/build/mock/tls-options.js +46 -44
- package/build/tests/admin-proto/signup.d.ts +1 -0
- package/build/tests/admin-proto/signup.js +235 -0
- package/build/tests/jasmine.d.ts +1 -0
- package/build/tests/jasmine.js +32 -0
- package/build/tests/libs-for-tests/3nstorage.d.ts +22 -0
- package/build/tests/libs-for-tests/3nstorage.js +123 -0
- package/build/tests/libs-for-tests/asmail.d.ts +22 -0
- package/build/tests/libs-for-tests/asmail.js +179 -0
- package/build/tests/libs-for-tests/assert.d.ts +1 -0
- package/build/tests/libs-for-tests/assert.js +26 -0
- package/build/tests/libs-for-tests/async-jasmine.d.ts +7 -0
- package/build/tests/libs-for-tests/async-jasmine.js +77 -0
- package/build/tests/libs-for-tests/bytes-equal.d.ts +1 -0
- package/build/tests/libs-for-tests/bytes-equal.js +34 -0
- package/build/tests/libs-for-tests/json-copy.d.ts +1 -0
- package/build/tests/libs-for-tests/json-copy.js +45 -0
- package/build/tests/libs-for-tests/json-equal.d.ts +4 -0
- package/build/tests/libs-for-tests/json-equal.js +67 -0
- package/build/tests/libs-for-tests/mailerid.d.ts +13 -0
- package/build/tests/libs-for-tests/mailerid.js +114 -0
- package/build/tests/libs-for-tests/pkl.d.ts +28 -0
- package/build/tests/libs-for-tests/pkl.js +89 -0
- package/build/tests/libs-for-tests/server-components/3nstorage.d.ts +20 -0
- package/build/tests/libs-for-tests/server-components/3nstorage.js +200 -0
- package/build/tests/libs-for-tests/server-components/admin.d.ts +6 -0
- package/build/tests/libs-for-tests/server-components/admin.js +43 -0
- package/build/tests/libs-for-tests/server-components/asmail.d.ts +16 -0
- package/build/tests/libs-for-tests/server-components/asmail.js +143 -0
- package/build/tests/libs-for-tests/server-components/component.d.ts +13 -0
- package/build/tests/libs-for-tests/server-components/component.js +77 -0
- package/build/tests/libs-for-tests/server-components/mailerid.d.ts +10 -0
- package/build/tests/libs-for-tests/server-components/mailerid.js +103 -0
- package/build/tests/libs-for-tests/server-runner.d.ts +15 -0
- package/build/tests/libs-for-tests/server-runner.js +69 -0
- package/build/tests/libs-for-tests/spec-assembly.d.ts +6 -0
- package/build/tests/libs-for-tests/spec-assembly.js +55 -0
- package/build/tests/libs-for-tests/ws-utils.d.ts +3 -0
- package/build/tests/libs-for-tests/ws-utils.js +59 -0
- package/build/tests/libs-for-tests/xhr-utils.d.ts +61 -0
- package/build/tests/libs-for-tests/xhr-utils.js +154 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-obj-ver.js +84 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/archive-root-ver.js +78 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.js +83 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.js +77 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-obj.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/delete-obj.js +75 -0
- package/build/tests/protocols/3nstorage/owner/specs/events.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/events.js +91 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-obj.js +269 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-root.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-current-root.js +262 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-obj-status.js +79 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-root-status.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/get-root-status.js +72 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-obj.js +287 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-root.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/put-current-root.js +274 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel-root.js +73 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.d.ts +2 -0
- package/build/tests/protocols/3nstorage/owner/specs/trans-cancel.js +72 -0
- package/build/tests/protocols/3nstorage/owner/test-utils.d.ts +14 -0
- package/build/tests/protocols/3nstorage/owner/test-utils.js +54 -0
- package/build/tests/protocols/3nstorage/owner.d.ts +1 -0
- package/build/tests/protocols/3nstorage/owner.js +138 -0
- package/build/tests/protocols/asmail/config.d.ts +1 -0
- package/build/tests/protocols/asmail/config.js +117 -0
- package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/finalize-delivery.js +60 -0
- package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.js +68 -0
- package/build/tests/protocols/asmail/delivery/specs/put-metadata.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/put-metadata.js +83 -0
- package/build/tests/protocols/asmail/delivery/specs/put-obj.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/put-obj.js +123 -0
- package/build/tests/protocols/asmail/delivery/specs/restart-session.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/restart-session.js +79 -0
- package/build/tests/protocols/asmail/delivery/specs/start-session.d.ts +2 -0
- package/build/tests/protocols/asmail/delivery/specs/start-session.js +64 -0
- package/build/tests/protocols/asmail/delivery/test-utils.d.ts +16 -0
- package/build/tests/protocols/asmail/delivery/test-utils.js +46 -0
- package/build/tests/protocols/asmail/delivery.d.ts +1 -0
- package/build/tests/protocols/asmail/delivery.js +46 -0
- package/build/tests/protocols/asmail/retrieval/specs/events.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/events.js +62 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-meta.js +70 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/get-message-obj.js +166 -0
- package/build/tests/protocols/asmail/retrieval/specs/list-messages.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/list-messages.js +96 -0
- package/build/tests/protocols/asmail/retrieval/specs/remove-message.d.ts +2 -0
- package/build/tests/protocols/asmail/retrieval/specs/remove-message.js +66 -0
- package/build/tests/protocols/asmail/retrieval/test-utils.d.ts +17 -0
- package/build/tests/protocols/asmail/retrieval/test-utils.js +46 -0
- package/build/tests/protocols/asmail/retrieval.d.ts +1 -0
- package/build/tests/protocols/asmail/retrieval.js +92 -0
- package/build/tests/protocols/mailerid.d.ts +1 -0
- package/build/tests/protocols/mailerid.js +210 -0
- package/build/tests/shared-checks/check-mid-login.d.ts +2 -0
- package/build/tests/shared-checks/check-mid-login.js +131 -0
- package/build/tests/shared-checks/requests.d.ts +20 -0
- package/build/tests/shared-checks/requests.js +123 -0
- package/package.json +1 -1
- package/packing/create-deb.sh +57 -0
- package/packing/deb/lib/systemd/system/3nweb.service +11 -0
- package/packing/deb/postinst +44 -0
- package/packing/deb/usr/share/doc/3nweb-server/conf-for-postinstall.yaml +19 -0
- package/packing/deb/usr/share/doc/3nweb-server/copyright +22 -0
- package/publish-task.sh +10 -0
- package/push-to-github.sh +105 -0
- package/ts-code/3nstorage/3nstorage-app.ts +99 -0
- package/ts-code/3nstorage/owner.ts +178 -0
- package/ts-code/3nstorage/resources/sessions.ts +37 -0
- package/ts-code/3nstorage/resources/store.ts +896 -0
- package/ts-code/3nstorage/resources/users.ts +258 -0
- package/ts-code/3nstorage/resources/utils.ts +45 -0
- package/ts-code/3nstorage/routes/owner/archive-obj-version.ts +71 -0
- package/ts-code/3nstorage/routes/owner/cancel-trans.ts +60 -0
- package/ts-code/3nstorage/routes/owner/delete-obj.ts +99 -0
- package/ts-code/3nstorage/routes/owner/get-archived-obj-ver.ts +109 -0
- package/ts-code/3nstorage/routes/owner/get-current-obj.ts +124 -0
- package/ts-code/3nstorage/routes/owner/get-obj-status.ts +55 -0
- package/ts-code/3nstorage/routes/owner/param-getter.ts +51 -0
- package/ts-code/3nstorage/routes/owner/param-setter.ts +50 -0
- package/ts-code/3nstorage/routes/owner/put-current-obj.ts +257 -0
- package/ts-code/3nstorage/routes/owner/session-params.ts +50 -0
- package/ts-code/3nstorage/shared.ts +43 -0
- package/ts-code/asmail/asmail-app.ts +91 -0
- package/ts-code/asmail/config.ts +96 -0
- package/ts-code/asmail/delivery.ts +94 -0
- package/ts-code/asmail/resources/delivery-sessions.ts +118 -0
- package/ts-code/asmail/resources/inbox.ts +696 -0
- package/ts-code/asmail/resources/recipients.ts +495 -0
- package/ts-code/asmail/resources/sessions.ts +37 -0
- package/ts-code/asmail/resources/utils.ts +41 -0
- package/ts-code/asmail/retrieval.ts +96 -0
- package/ts-code/asmail/routes/config/param-getter.ts +49 -0
- package/ts-code/asmail/routes/config/param-setter.ts +49 -0
- package/ts-code/asmail/routes/delivery/finalize-delivery.ts +51 -0
- package/ts-code/asmail/routes/delivery/pre-flight.ts +118 -0
- package/ts-code/asmail/routes/delivery/provide-recipient-pubkey.ts +58 -0
- package/ts-code/asmail/routes/delivery/put-metadata.ts +85 -0
- package/ts-code/asmail/routes/delivery/put-obj.ts +152 -0
- package/ts-code/asmail/routes/delivery/restart-session.ts +117 -0
- package/ts-code/asmail/routes/delivery/sender-authorization.ts +81 -0
- package/ts-code/asmail/routes/delivery/start-session.ts +136 -0
- package/ts-code/asmail/routes/retrieval/get-message-meta.ts +50 -0
- package/ts-code/asmail/routes/retrieval/get-message-obj.ts +106 -0
- package/ts-code/asmail/routes/retrieval/list-messages.ts +68 -0
- package/ts-code/asmail/routes/retrieval/remove-message.ts +48 -0
- package/ts-code/cli/index.ts +82 -0
- package/ts-code/cli/run-cmd.ts +81 -0
- package/ts-code/cli/show-sample-config.ts +78 -0
- package/ts-code/cli/signup-cmd.ts +229 -0
- package/ts-code/cli/user-cmd.ts +68 -0
- package/ts-code/cli/utils.ts +105 -0
- package/ts-code/config/default-confs.ts +22 -0
- package/ts-code/config/from-yaml.ts +35 -0
- package/ts-code/config/letsencrypt.ts +77 -0
- package/ts-code/config/signup.ts +137 -0
- package/ts-code/lib-common/admin-api/signup.ts +120 -0
- package/ts-code/lib-common/assert.ts +22 -0
- package/ts-code/lib-common/async-fs-node.ts +656 -0
- package/ts-code/lib-common/buffer-utils.ts +124 -0
- package/ts-code/lib-common/byte-streaming/common.ts +166 -0
- package/ts-code/lib-common/bytes-equal.ts +25 -0
- package/ts-code/lib-common/canonical-address.ts +92 -0
- package/ts-code/lib-common/exceptions/error.ts +44 -0
- package/ts-code/lib-common/exceptions/file.ts +84 -0
- package/ts-code/lib-common/exceptions/http.ts +69 -0
- package/ts-code/lib-common/ipc/generic-ipc.ts +750 -0
- package/ts-code/lib-common/ipc/ws-ipc.ts +117 -0
- package/ts-code/lib-common/json-equal.ts +55 -0
- package/ts-code/lib-common/json-utils.ts +130 -0
- package/ts-code/lib-common/jwkeys.ts +246 -0
- package/ts-code/lib-common/map-of-sets.ts +60 -0
- package/ts-code/lib-common/mid-sigs-NaCl-Ed.ts +677 -0
- package/ts-code/lib-common/objs-on-disk/file-layout.ts +480 -0
- package/ts-code/lib-common/objs-on-disk/obj-file.ts +325 -0
- package/ts-code/lib-common/objs-on-disk/utils.ts +201 -0
- package/ts-code/lib-common/objs-on-disk/v1-obj-file-format.ts +329 -0
- package/ts-code/lib-common/processes.ts +501 -0
- package/ts-code/lib-common/random-node.ts +79 -0
- package/ts-code/lib-common/service-api/3nstorage/owner.ts +559 -0
- package/ts-code/lib-common/service-api/3nstorage/root-route.ts +22 -0
- package/ts-code/lib-common/service-api/asmail/config.ts +144 -0
- package/ts-code/lib-common/service-api/asmail/delivery.ts +250 -0
- package/ts-code/lib-common/service-api/asmail/retrieval.ts +238 -0
- package/ts-code/lib-common/service-api/asmail/root-route.ts +22 -0
- package/ts-code/lib-common/service-api/ipc-api.ts +44 -0
- package/ts-code/lib-common/service-api/locker.ts +44 -0
- package/ts-code/lib-common/service-api/mailer-id/login.ts +80 -0
- package/ts-code/lib-common/service-api/mailer-id/provisioning.ts +64 -0
- package/ts-code/lib-common/service-api/mailer-id/root-route.ts +25 -0
- package/ts-code/lib-common/service-api/pub-key-login.ts +75 -0
- package/ts-code/lib-common/service-api/web-socket-base.ts +87 -0
- package/ts-code/lib-common/session-encryptor.ts +54 -0
- package/ts-code/lib-common/time-window-cache.ts +74 -0
- package/ts-code/lib-common/transferable.d.ts +30 -0
- package/ts-code/lib-server/conf-util.ts +35 -0
- package/ts-code/lib-server/mid-access.ts +45 -0
- package/ts-code/lib-server/middleware/body-parsers.ts +248 -0
- package/ts-code/lib-server/middleware/error-handler.ts +79 -0
- package/ts-code/lib-server/pkl-access.ts +46 -0
- package/ts-code/lib-server/resources/dns.ts +151 -0
- package/ts-code/lib-server/resources/mailerid-authorizer.ts +115 -0
- package/ts-code/lib-server/resources/mem-backed-sessions-factory.ts +132 -0
- package/ts-code/lib-server/resources/server-data-folders.ts +160 -0
- package/ts-code/lib-server/resources/server-key-for-pkl-challenge.ts +41 -0
- package/ts-code/lib-server/resources/sessions.ts +232 -0
- package/ts-code/lib-server/resources/user-files.ts +147 -0
- package/ts-code/lib-server/routes/pub-key-login/complete-exchange.ts +63 -0
- package/ts-code/lib-server/routes/pub-key-login/start-exchange.ts +189 -0
- package/ts-code/lib-server/routes/sessions/close.ts +27 -0
- package/ts-code/lib-server/routes/sessions/mid-auth.ts +77 -0
- package/ts-code/lib-server/routes/sessions/start.ts +116 -0
- package/ts-code/lib-server/web-sockets/app.ts +339 -0
- package/ts-code/lib-server/web-sockets/server-events.ts +63 -0
- package/ts-code/lib.ts +29 -0
- package/ts-code/locker/locker-app.ts +60 -0
- package/ts-code/locker/resources/lockers.ts +17 -0
- package/ts-code/locker/resources/sessions.ts +37 -0
- package/ts-code/locker/routes/create-locker.ts +47 -0
- package/ts-code/mailerId/mailerId-app.ts +107 -0
- package/ts-code/mailerId/resources/certifier.ts +181 -0
- package/ts-code/mailerId/resources/sessions.ts +44 -0
- package/ts-code/mailerId/resources/users.ts +88 -0
- package/ts-code/mailerId/routes/certify.ts +68 -0
- package/ts-code/main.ts +304 -0
- package/ts-code/mock/dns.ts +106 -0
- package/ts-code/mock/mock-as-child-proc.ts +130 -0
- package/ts-code/mock/node-child-ipc.ts +69 -0
- package/ts-code/mock/run-in-proc.ts +111 -0
- package/ts-code/mock/tls-options.ts +73 -0
- package/ts-code/services.ts +138 -0
- package/ts-code/signup/resources/users.ts +429 -0
- package/ts-code/signup/routes/add.ts +65 -0
- package/ts-code/signup/routes/get-available-addresses.ts +49 -0
- package/ts-code/signup/routes/get-available-domains.ts +45 -0
- package/ts-code/signup/signup-app.ts +54 -0
- package/ts-code/signup/signup-tokens.ts +148 -0
- package/ts-code/tests/admin-proto/signup.ts +277 -0
- package/ts-code/tests/jasmine.ts +37 -0
- package/ts-code/tests/libs-for-tests/3nstorage.ts +144 -0
- package/ts-code/tests/libs-for-tests/asmail.ts +220 -0
- package/ts-code/tests/libs-for-tests/assert.ts +22 -0
- package/ts-code/tests/libs-for-tests/async-jasmine.ts +89 -0
- package/ts-code/tests/libs-for-tests/bytes-equal.ts +25 -0
- package/ts-code/tests/libs-for-tests/json-copy.ts +38 -0
- package/ts-code/tests/libs-for-tests/json-equal.ts +55 -0
- package/ts-code/tests/libs-for-tests/mailerid.ts +123 -0
- package/ts-code/tests/libs-for-tests/pkl.ts +127 -0
- package/ts-code/tests/libs-for-tests/server-components/3nstorage.ts +206 -0
- package/ts-code/tests/libs-for-tests/server-components/admin.ts +49 -0
- package/ts-code/tests/libs-for-tests/server-components/asmail.ts +152 -0
- package/ts-code/tests/libs-for-tests/server-components/component.ts +90 -0
- package/ts-code/tests/libs-for-tests/server-components/mailerid.ts +114 -0
- package/ts-code/tests/libs-for-tests/server-runner.ts +82 -0
- package/ts-code/tests/libs-for-tests/spec-assembly.ts +60 -0
- package/ts-code/tests/libs-for-tests/ws-utils.ts +61 -0
- package/ts-code/tests/libs-for-tests/xhr-utils.ts +179 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/archive-obj-ver.ts +100 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/archive-root-ver.ts +91 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-obj-ver.ts +99 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/delete-archive-root-ver.ts +90 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/delete-obj.ts +84 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/events.ts +125 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-obj.ts +298 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-current-root.ts +290 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-obj-status.ts +88 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/get-root-status.ts +80 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-obj.ts +366 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/put-current-root.ts +329 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel-root.ts +86 -0
- package/ts-code/tests/protocols/3nstorage/owner/specs/trans-cancel.ts +86 -0
- package/ts-code/tests/protocols/3nstorage/owner/test-utils.ts +72 -0
- package/ts-code/tests/protocols/3nstorage/owner.ts +198 -0
- package/ts-code/tests/protocols/asmail/config.ts +172 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/finalize-delivery.ts +69 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/provide-recipient-pubkey.ts +88 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/put-metadata.ts +102 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/put-obj.ts +156 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/restart-session.ts +97 -0
- package/ts-code/tests/protocols/asmail/delivery/specs/start-session.ts +79 -0
- package/ts-code/tests/protocols/asmail/delivery/test-utils.ts +64 -0
- package/ts-code/tests/protocols/asmail/delivery.ts +56 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/events.ts +78 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-meta.ts +80 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/get-message-obj.ts +197 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/list-messages.ts +110 -0
- package/ts-code/tests/protocols/asmail/retrieval/specs/remove-message.ts +74 -0
- package/ts-code/tests/protocols/asmail/retrieval/test-utils.ts +60 -0
- package/ts-code/tests/protocols/asmail/retrieval.ts +115 -0
- package/ts-code/tests/protocols/mailerid.ts +271 -0
- package/ts-code/tests/shared-checks/check-mid-login.ts +164 -0
- package/ts-code/tests/shared-checks/requests.ts +135 -0
- package/ts-code/tsconfig.json +11 -0
- package/ts-code/web3n.d.ts +1068 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2015 - 2017, 2020, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import { Express } from 'express';
|
|
19
|
+
import { AppWithWSs } from '../lib-server/web-sockets/app';
|
|
20
|
+
import { DeliverySessions } from './resources/delivery-sessions';
|
|
21
|
+
import { makeSessionFactory } from './resources/sessions';
|
|
22
|
+
import { makeRecipients } from './resources/recipients';
|
|
23
|
+
import { MidAuthorizer } from '../lib-server/routes/sessions/mid-auth';
|
|
24
|
+
import { ErrLogger, makeErrHandler } from '../lib-server/middleware/error-handler';
|
|
25
|
+
import { makeApp as makeConfApp } from './config';
|
|
26
|
+
import { makeApp as makeDeliveryApp } from './delivery';
|
|
27
|
+
import { makeApp as makeRetrievalApp } from './retrieval';
|
|
28
|
+
import { ASMailRootRoute } from '../lib-common/service-api/asmail/root-route';
|
|
29
|
+
|
|
30
|
+
const PATHS = {
|
|
31
|
+
delivery: '/delivery/',
|
|
32
|
+
retrieval: '/retrieval/',
|
|
33
|
+
config: '/config/'
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
function setupStaticEntryRoute(app: Express): void {
|
|
37
|
+
|
|
38
|
+
app.route('/')
|
|
39
|
+
.get((req, res) => {
|
|
40
|
+
let path = req.originalUrl;
|
|
41
|
+
if (path[path.length-1] !== '/') {
|
|
42
|
+
path = path+'/';
|
|
43
|
+
}
|
|
44
|
+
const json: ASMailRootRoute = {
|
|
45
|
+
delivery: path+PATHS.delivery.substring(1),
|
|
46
|
+
retrieval: path+PATHS.retrieval.substring(1),
|
|
47
|
+
config: path+PATHS.config.substring(1)
|
|
48
|
+
};
|
|
49
|
+
// the following implicitly sets content type application/json
|
|
50
|
+
res.status(200).json(json);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
export function makeASMailApp(
|
|
56
|
+
rootFolder: string, domain: string, midAuthorizer: MidAuthorizer,
|
|
57
|
+
errLogger?: ErrLogger
|
|
58
|
+
): AppWithWSs {
|
|
59
|
+
|
|
60
|
+
const app = new AppWithWSs();
|
|
61
|
+
const mailDeliverySessions = DeliverySessions.make(5*60);
|
|
62
|
+
const recipientsSessions = makeSessionFactory(10*60);
|
|
63
|
+
const userSettingSessions = makeSessionFactory(10*60);
|
|
64
|
+
const recipients = makeRecipients(rootFolder);
|
|
65
|
+
|
|
66
|
+
setupStaticEntryRoute(app.http);
|
|
67
|
+
|
|
68
|
+
app.http.use(PATHS.delivery,
|
|
69
|
+
makeDeliveryApp(
|
|
70
|
+
domain, mailDeliverySessions, recipients.delivery, midAuthorizer
|
|
71
|
+
)
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
app.use(PATHS.retrieval,
|
|
75
|
+
makeRetrievalApp(
|
|
76
|
+
domain, recipientsSessions, recipients.retrieval, midAuthorizer
|
|
77
|
+
)
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
app.http.use(PATHS.config,
|
|
81
|
+
makeConfApp(
|
|
82
|
+
domain, userSettingSessions, recipients.config, midAuthorizer
|
|
83
|
+
)
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
app.http.use(makeErrHandler(errLogger));
|
|
87
|
+
|
|
88
|
+
return app;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
Object.freeze(exports);
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2015 - 2016, 2024 - 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as express from 'express';
|
|
19
|
+
import { json as parseJSON, emptyBody } from '../lib-server/middleware/body-parsers';
|
|
20
|
+
import { SessionsFactory } from './resources/sessions';
|
|
21
|
+
import { ASMailServiceConfig } from './resources/recipients';
|
|
22
|
+
import { MidAuthorizer } from '../lib-server/routes/sessions/mid-auth';
|
|
23
|
+
import { closeSession } from '../lib-server/routes/sessions/close';
|
|
24
|
+
import { getParam } from './routes/config/param-getter';
|
|
25
|
+
import { setParam } from './routes/config/param-setter';
|
|
26
|
+
import * as api from '../lib-common/service-api/asmail/config';
|
|
27
|
+
import { addMailerIdLoginRoutes } from '../lib-server/mid-access';
|
|
28
|
+
|
|
29
|
+
export function makeApp(
|
|
30
|
+
domain: string, sessions: SessionsFactory, recipients: ASMailServiceConfig,
|
|
31
|
+
midAuthorizer: MidAuthorizer
|
|
32
|
+
): express.Express {
|
|
33
|
+
|
|
34
|
+
const app = express();
|
|
35
|
+
app.disable('etag');
|
|
36
|
+
|
|
37
|
+
// Login
|
|
38
|
+
addMailerIdLoginRoutes(
|
|
39
|
+
app, domain, '/'+api.midLogin.URL_PART,
|
|
40
|
+
sessions, recipients.exists, midAuthorizer
|
|
41
|
+
);
|
|
42
|
+
|
|
43
|
+
// *** Require authorized session for everything below ***
|
|
44
|
+
app.use(sessions.ensureAuthorizedSession());
|
|
45
|
+
|
|
46
|
+
app.post('/'+api.closeSession.URL_END,
|
|
47
|
+
emptyBody(),
|
|
48
|
+
closeSession()
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
app.route('/'+api.p.initPubKey.URL_END)
|
|
52
|
+
.get(getParam(recipients.getPubKey))
|
|
53
|
+
.put(parseJSON('4kb', true),
|
|
54
|
+
setParam(recipients.setPubKey)
|
|
55
|
+
);
|
|
56
|
+
|
|
57
|
+
app.route('/'+api.p.anonSenderPolicy.URL_END)
|
|
58
|
+
.get(getParam(recipients.getAnonSenderPolicy))
|
|
59
|
+
.put(parseJSON('40kb'),
|
|
60
|
+
setParam(recipients.setAnonSenderPolicy)
|
|
61
|
+
);
|
|
62
|
+
|
|
63
|
+
app.route('/'+api.p.anonSenderInvites.URL_END)
|
|
64
|
+
.get(getParam(recipients.getAnonSenderInvites))
|
|
65
|
+
.put(parseJSON('40kb'),
|
|
66
|
+
setParam(recipients.setAnonSenderInvites)
|
|
67
|
+
);
|
|
68
|
+
|
|
69
|
+
app.route('/'+api.p.authSenderPolicy.URL_END)
|
|
70
|
+
.get(getParam(recipients.getAuthSenderPolicy))
|
|
71
|
+
.put(parseJSON('4kb'),
|
|
72
|
+
setParam(recipients.setAuthSenderPolicy)
|
|
73
|
+
);
|
|
74
|
+
|
|
75
|
+
app.route('/'+api.p.authSenderInvites.URL_END)
|
|
76
|
+
.get(getParam(recipients.getAuthSenderInvites))
|
|
77
|
+
.put(parseJSON('40kb'),
|
|
78
|
+
setParam(recipients.setAuthSenderInvites)
|
|
79
|
+
);
|
|
80
|
+
|
|
81
|
+
app.route('/'+api.p.authSenderWhitelist.URL_END)
|
|
82
|
+
.get(getParam(recipients.getAuthSenderWhitelist))
|
|
83
|
+
.put(parseJSON('40kb'),
|
|
84
|
+
setParam(recipients.setAuthSenderWhitelist)
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
app.route('/'+api.p.authSenderBlacklist.URL_END)
|
|
88
|
+
.get(getParam(recipients.getAuthSenderBlacklist))
|
|
89
|
+
.put(parseJSON('40kb'),
|
|
90
|
+
setParam(recipients.setAuthSenderBlacklist)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
return app;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
Object.freeze(exports);
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2015 - 2017, 2025 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
import * as express from 'express';
|
|
19
|
+
import { json as parseJSON, emptyBody } from '../lib-server/middleware/body-parsers';
|
|
20
|
+
import { SessionsFactory } from './resources/delivery-sessions';
|
|
21
|
+
import { MsgDelivery } from './resources/recipients';
|
|
22
|
+
import { startSession } from './routes/delivery/start-session';
|
|
23
|
+
import { preFlight } from './routes/delivery/pre-flight';
|
|
24
|
+
import { restartSession } from './routes/delivery/restart-session';
|
|
25
|
+
import { IMidAuthorizer, authorize } from './routes/delivery/sender-authorization';
|
|
26
|
+
import { getRecipientPubKey } from './routes/delivery/provide-recipient-pubkey';
|
|
27
|
+
import { saveMetadata } from './routes/delivery/put-metadata';
|
|
28
|
+
import { saveMsgObj } from './routes/delivery/put-obj';
|
|
29
|
+
import { finalizeDelivery } from './routes/delivery/finalize-delivery';
|
|
30
|
+
|
|
31
|
+
import * as api from '../lib-common/service-api/asmail/delivery';
|
|
32
|
+
|
|
33
|
+
const MAX_CHUNK_SIZE = '0.5mb';
|
|
34
|
+
|
|
35
|
+
export function makeApp(
|
|
36
|
+
domain: string, sessions: SessionsFactory, recipients: MsgDelivery,
|
|
37
|
+
midAuthorizer: IMidAuthorizer
|
|
38
|
+
): express.Express {
|
|
39
|
+
|
|
40
|
+
const app = express();
|
|
41
|
+
app.disable('etag');
|
|
42
|
+
|
|
43
|
+
app.post('/'+api.sessionStart.URL_END,
|
|
44
|
+
sessions.checkSession(),
|
|
45
|
+
parseJSON('1kb'),
|
|
46
|
+
startSession(recipients.allowedMaxMsgSize, sessions.generate)
|
|
47
|
+
);
|
|
48
|
+
|
|
49
|
+
app.post('/'+api.preFlight.URL_END,
|
|
50
|
+
sessions.checkSession(),
|
|
51
|
+
parseJSON('1kb'),
|
|
52
|
+
preFlight(recipients.allowedMaxMsgSize)
|
|
53
|
+
);
|
|
54
|
+
|
|
55
|
+
app.post('/'+api.sessionRestart.URL_END,
|
|
56
|
+
sessions.checkSession(),
|
|
57
|
+
parseJSON('1kb'),
|
|
58
|
+
restartSession(
|
|
59
|
+
sessions.generate, sessions.getSessionForMsg,
|
|
60
|
+
recipients.incompleteMsgDeliveryParams, MAX_CHUNK_SIZE
|
|
61
|
+
)
|
|
62
|
+
);
|
|
63
|
+
|
|
64
|
+
app.post('/'+api.authSender.URL_END,
|
|
65
|
+
sessions.ensureOpenedSession(),
|
|
66
|
+
parseJSON('4kb'),
|
|
67
|
+
authorize(domain, midAuthorizer)
|
|
68
|
+
);
|
|
69
|
+
|
|
70
|
+
// *** Require authorized session for everything below ***
|
|
71
|
+
app.use(sessions.ensureAuthorizedSession());
|
|
72
|
+
|
|
73
|
+
app.get('/'+api.initPubKey.URL_END,
|
|
74
|
+
getRecipientPubKey(recipients.getPubKey)
|
|
75
|
+
);
|
|
76
|
+
|
|
77
|
+
app.put('/'+api.msgMeta.URL_END,
|
|
78
|
+
parseJSON('16kb'),
|
|
79
|
+
saveMetadata(recipients.setMsgStorage, MAX_CHUNK_SIZE)
|
|
80
|
+
);
|
|
81
|
+
|
|
82
|
+
app.put('/'+api.msgObj.EXPRESS_URL_END,
|
|
83
|
+
saveMsgObj(recipients.saveObj, MAX_CHUNK_SIZE)
|
|
84
|
+
);
|
|
85
|
+
|
|
86
|
+
app.post('/'+api.completion.URL_END,
|
|
87
|
+
emptyBody(),
|
|
88
|
+
finalizeDelivery(recipients.finalizeDelivery)
|
|
89
|
+
);
|
|
90
|
+
|
|
91
|
+
return app;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
Object.freeze(exports);
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Copyright (C) 2017 3NSoft Inc.
|
|
3
|
+
|
|
4
|
+
This program is free software: you can redistribute it and/or modify it under
|
|
5
|
+
the terms of the GNU General Public License as published by the Free Software
|
|
6
|
+
Foundation, either version 3 of the License, or (at your option) any later
|
|
7
|
+
version.
|
|
8
|
+
|
|
9
|
+
This program is distributed in the hope that it will be useful, but
|
|
10
|
+
WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
11
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
12
|
+
See the GNU General Public License for more details.
|
|
13
|
+
|
|
14
|
+
You should have received a copy of the GNU General Public License along with
|
|
15
|
+
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
16
|
+
*/
|
|
17
|
+
|
|
18
|
+
/**
|
|
19
|
+
* This module constructs memory-backed sessions factories.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import { InMemorySessions } from '../../lib-server/resources/mem-backed-sessions-factory';
|
|
23
|
+
import { Request as Req, Factory, Session, GenerateSession as GenSession, wrapFactory } from '../../lib-server/resources/sessions';
|
|
24
|
+
|
|
25
|
+
export interface SessionParams {
|
|
26
|
+
recipient: string;
|
|
27
|
+
sender: string|undefined;
|
|
28
|
+
invite: string|undefined;
|
|
29
|
+
maxMsgLength: number;
|
|
30
|
+
currentMsgLength: number;
|
|
31
|
+
msgId: string;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export type Request = Req<SessionParams>;
|
|
35
|
+
export type GenerateSession = GenSession<SessionParams>;
|
|
36
|
+
export type GetSessionForMsg = (recipient: string, msgId: string) =>
|
|
37
|
+
Promise<Session<SessionParams>|undefined>;
|
|
38
|
+
|
|
39
|
+
export interface SessionsFactory extends Factory<SessionParams> {
|
|
40
|
+
getSessionForMsg: GetSessionForMsg;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class DeliverySessions extends InMemorySessions<SessionParams>
|
|
44
|
+
implements SessionsFactory {
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Keys of this map identify messages, and format is 'recipient:msgId'.
|
|
48
|
+
* Values are respective session ids.
|
|
49
|
+
*/
|
|
50
|
+
private msgToSessionMap = new Map<string, string>();
|
|
51
|
+
|
|
52
|
+
private constructor(timeoutSecs: number) {
|
|
53
|
+
super(timeoutSecs, sessionId => this.makeSessionParams(sessionId));
|
|
54
|
+
Object.seal(this);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
private makeSessionParams(sessionId: string): SessionParams {
|
|
58
|
+
const factory = this;
|
|
59
|
+
let msgId: string = (undefined as any);
|
|
60
|
+
const sParams: SessionParams = {
|
|
61
|
+
recipient: (undefined as any),
|
|
62
|
+
currentMsgLength: 0,
|
|
63
|
+
maxMsgLength: (undefined as any),
|
|
64
|
+
invite: undefined,
|
|
65
|
+
sender: undefined,
|
|
66
|
+
get msgId(): string {
|
|
67
|
+
return msgId;
|
|
68
|
+
},
|
|
69
|
+
set msgId(id: string) {
|
|
70
|
+
if (msgId) { throw new Error(`Message is is already set`); }
|
|
71
|
+
if (typeof sParams.recipient !== 'string') {
|
|
72
|
+
throw new Error(`Recipient should be set in session before setting message id`); }
|
|
73
|
+
msgId = id;
|
|
74
|
+
factory.msgToSessionMap.set(
|
|
75
|
+
`${sParams.recipient}:${msgId}`, sessionId);
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
return Object.seal(sParams);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
protected async remove(s: Session<SessionParams>): Promise<void> {
|
|
82
|
+
await super.remove(s);
|
|
83
|
+
this.msgToSessionMap.delete(`${s.params.recipient}:${s.params.msgId}`);
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
async getSessionForMsg(
|
|
87
|
+
recipient: string, msgId: string
|
|
88
|
+
): Promise<Session<SessionParams>|undefined> {
|
|
89
|
+
const sessionId = this.msgToSessionMap.get(`${recipient}:${msgId}`);
|
|
90
|
+
if (sessionId) {
|
|
91
|
+
const session = await this.get(sessionId);
|
|
92
|
+
if (session) {
|
|
93
|
+
session.lastAccessedAt = Date.now();
|
|
94
|
+
return session;
|
|
95
|
+
} else {
|
|
96
|
+
console.warn(`Inconsistency in session factory state: session to msg mapping exists, while session doesn't exist.`);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
/**
|
|
103
|
+
* This returns factory, that works properly in a single process application,
|
|
104
|
+
* clearing up sessions that past given timeout.
|
|
105
|
+
* @param timeout is a session timeout in seconds
|
|
106
|
+
*/
|
|
107
|
+
static make(timeout: number): SessionsFactory {
|
|
108
|
+
const factory = new DeliverySessions(timeout);
|
|
109
|
+
const wrap = wrapFactory(factory) as SessionsFactory;
|
|
110
|
+
wrap.getSessionForMsg = factory.getSessionForMsg.bind(factory);
|
|
111
|
+
return Object.freeze(wrap);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
}
|
|
115
|
+
Object.freeze(DeliverySessions.prototype);
|
|
116
|
+
Object.freeze(DeliverySessions);
|
|
117
|
+
|
|
118
|
+
Object.freeze(exports);
|