spec-3nweb-server 1.7.7 → 1.7.9
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/build/asmail/asmail-app.js +5 -5
- package/build/asmail/config.d.ts +2 -2
- package/build/asmail/config.js +6 -6
- package/build/asmail/delivery.d.ts +2 -2
- package/build/asmail/delivery.js +1 -1
- package/build/asmail/resources/inbox.d.ts +9 -10
- package/build/asmail/resources/inbox.js +73 -107
- package/build/asmail/resources/recipients.d.ts +91 -104
- package/build/asmail/resources/recipients.js +28 -16
- package/build/asmail/retrieval.d.ts +2 -2
- package/build/asmail/retrieval.js +1 -1
- package/build/asmail/routes/config/param-getter.d.ts +3 -1
- package/build/asmail/routes/config/param-getter.js +1 -4
- package/build/asmail/routes/config/param-setter.d.ts +3 -1
- package/build/asmail/routes/config/param-setter.js +1 -5
- package/build/asmail/routes/delivery/finalize-delivery.d.ts +2 -2
- package/build/asmail/routes/delivery/finalize-delivery.js +1 -4
- package/build/asmail/routes/delivery/pre-flight.d.ts +2 -2
- package/build/asmail/routes/delivery/pre-flight.js +1 -7
- package/build/asmail/routes/delivery/provide-recipient-pubkey.d.ts +2 -2
- package/build/asmail/routes/delivery/provide-recipient-pubkey.js +1 -4
- package/build/asmail/routes/delivery/put-metadata.d.ts +2 -2
- package/build/asmail/routes/delivery/put-metadata.js +1 -5
- package/build/asmail/routes/delivery/put-obj.d.ts +2 -2
- package/build/asmail/routes/delivery/put-obj.js +1 -4
- package/build/asmail/routes/delivery/restart-session.d.ts +2 -2
- package/build/asmail/routes/delivery/restart-session.js +1 -13
- package/build/asmail/routes/delivery/sender-authorization.js +0 -3
- package/build/asmail/routes/delivery/start-session.d.ts +4 -3
- package/build/asmail/routes/delivery/start-session.js +3 -11
- package/build/asmail/routes/retrieval/get-message-meta.d.ts +2 -2
- package/build/asmail/routes/retrieval/get-message-meta.js +1 -4
- package/build/asmail/routes/retrieval/get-message-obj.d.ts +2 -2
- package/build/asmail/routes/retrieval/get-message-obj.js +3 -10
- package/build/asmail/routes/retrieval/list-messages.d.ts +2 -2
- package/build/asmail/routes/retrieval/list-messages.js +1 -4
- package/build/asmail/routes/retrieval/remove-message.d.ts +2 -2
- package/build/asmail/routes/retrieval/remove-message.js +0 -3
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2017, 2020 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2017, 2020, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -51,11 +51,11 @@ function makeASMailApp(rootFolder, domain, midAuthorizer, errLogger) {
|
|
|
51
51
|
const mailDeliverySessions = delivery_sessions_1.DeliverySessions.make(5 * 60);
|
|
52
52
|
const recipientsSessions = (0, sessions_1.makeSessionFactory)(10 * 60);
|
|
53
53
|
const userSettingSessions = (0, sessions_1.makeSessionFactory)(10 * 60);
|
|
54
|
-
const recipients = (0, recipients_1.
|
|
54
|
+
const recipients = (0, recipients_1.makeRecipients)(rootFolder);
|
|
55
55
|
setupStaticEntryRoute(app.http);
|
|
56
|
-
app.http.use(PATHS.delivery, (0, delivery_1.makeApp)(domain, mailDeliverySessions, recipients, midAuthorizer));
|
|
57
|
-
app.use(PATHS.retrieval, (0, retrieval_1.makeApp)(domain, recipientsSessions, recipients, midAuthorizer));
|
|
58
|
-
app.http.use(PATHS.config, (0, config_1.makeApp)(domain, userSettingSessions, recipients, midAuthorizer));
|
|
56
|
+
app.http.use(PATHS.delivery, (0, delivery_1.makeApp)(domain, mailDeliverySessions, recipients.delivery, midAuthorizer));
|
|
57
|
+
app.use(PATHS.retrieval, (0, retrieval_1.makeApp)(domain, recipientsSessions, recipients.retrieval, midAuthorizer));
|
|
58
|
+
app.http.use(PATHS.config, (0, config_1.makeApp)(domain, userSettingSessions, recipients.config, midAuthorizer));
|
|
59
59
|
app.http.use((0, error_handler_1.makeErrHandler)(errLogger));
|
|
60
60
|
return app;
|
|
61
61
|
}
|
package/build/asmail/config.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as express from 'express';
|
|
2
2
|
import { SessionsFactory } from './resources/sessions';
|
|
3
|
-
import {
|
|
3
|
+
import { ASMailServiceConfig } from './resources/recipients';
|
|
4
4
|
import { MidAuthorizer } from '../lib-server/routes/sessions/mid-auth';
|
|
5
|
-
export declare function makeApp(domain: string, sessions: SessionsFactory, recipients:
|
|
5
|
+
export declare function makeApp(domain: string, sessions: SessionsFactory, recipients: ASMailServiceConfig, midAuthorizer: MidAuthorizer): express.Express;
|
package/build/asmail/config.js
CHANGED
|
@@ -37,22 +37,22 @@ function makeApp(domain, sessions, recipients, midAuthorizer) {
|
|
|
37
37
|
.put((0, body_parsers_1.json)('4kb', true), (0, param_setter_1.setParam)(recipients.setPubKey));
|
|
38
38
|
app.route('/' + api.p.anonSenderPolicy.URL_END)
|
|
39
39
|
.get((0, param_getter_1.getParam)(recipients.getAnonSenderPolicy))
|
|
40
|
-
.put((0, body_parsers_1.json)('40kb'
|
|
40
|
+
.put((0, body_parsers_1.json)('40kb'), (0, param_setter_1.setParam)(recipients.setAnonSenderPolicy));
|
|
41
41
|
app.route('/' + api.p.anonSenderInvites.URL_END)
|
|
42
42
|
.get((0, param_getter_1.getParam)(recipients.getAnonSenderInvites))
|
|
43
|
-
.put((0, body_parsers_1.json)('40kb'
|
|
43
|
+
.put((0, body_parsers_1.json)('40kb'), (0, param_setter_1.setParam)(recipients.setAnonSenderInvites));
|
|
44
44
|
app.route('/' + api.p.authSenderPolicy.URL_END)
|
|
45
45
|
.get((0, param_getter_1.getParam)(recipients.getAuthSenderPolicy))
|
|
46
|
-
.put((0, body_parsers_1.json)('4kb'
|
|
46
|
+
.put((0, body_parsers_1.json)('4kb'), (0, param_setter_1.setParam)(recipients.setAuthSenderPolicy));
|
|
47
47
|
app.route('/' + api.p.authSenderInvites.URL_END)
|
|
48
48
|
.get((0, param_getter_1.getParam)(recipients.getAuthSenderInvites))
|
|
49
|
-
.put((0, body_parsers_1.json)('40kb'
|
|
49
|
+
.put((0, body_parsers_1.json)('40kb'), (0, param_setter_1.setParam)(recipients.setAuthSenderInvites));
|
|
50
50
|
app.route('/' + api.p.authSenderWhitelist.URL_END)
|
|
51
51
|
.get((0, param_getter_1.getParam)(recipients.getAuthSenderWhitelist))
|
|
52
|
-
.put((0, body_parsers_1.json)('40kb'
|
|
52
|
+
.put((0, body_parsers_1.json)('40kb'), (0, param_setter_1.setParam)(recipients.setAuthSenderWhitelist));
|
|
53
53
|
app.route('/' + api.p.authSenderBlacklist.URL_END)
|
|
54
54
|
.get((0, param_getter_1.getParam)(recipients.getAuthSenderBlacklist))
|
|
55
|
-
.put((0, body_parsers_1.json)('40kb'
|
|
55
|
+
.put((0, body_parsers_1.json)('40kb'), (0, param_setter_1.setParam)(recipients.setAuthSenderBlacklist));
|
|
56
56
|
return app;
|
|
57
57
|
}
|
|
58
58
|
exports.makeApp = makeApp;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as express from 'express';
|
|
2
2
|
import { SessionsFactory } from './resources/delivery-sessions';
|
|
3
|
-
import {
|
|
3
|
+
import { MsgDelivery } from './resources/recipients';
|
|
4
4
|
import { IMidAuthorizer } from './routes/delivery/sender-authorization';
|
|
5
|
-
export declare function makeApp(domain: string, sessions: SessionsFactory, recipients:
|
|
5
|
+
export declare function makeApp(domain: string, sessions: SessionsFactory, recipients: MsgDelivery, midAuthorizer: IMidAuthorizer): express.Express;
|
package/build/asmail/delivery.js
CHANGED
|
@@ -5,6 +5,7 @@ import * as configApi from '../../lib-common/service-api/asmail/config';
|
|
|
5
5
|
import * as retrievalApi from '../../lib-common/service-api/asmail/retrieval';
|
|
6
6
|
import { UserFiles, ObjReader } from '../../lib-server/resources/user-files';
|
|
7
7
|
export { ObjPipe, ObjReader } from '../../lib-server/resources/user-files';
|
|
8
|
+
type InitPubKey = configApi.p.initPubKey.Certs;
|
|
8
9
|
type AnonSenderPolicy = configApi.p.anonSenderPolicy.Policy;
|
|
9
10
|
export type AuthSenderPolicy = configApi.p.authSenderPolicy.Policy;
|
|
10
11
|
type Whitelist = configApi.p.authSenderWhitelist.List;
|
|
@@ -23,7 +24,7 @@ export declare const SC: {
|
|
|
23
24
|
OBJ_FILE_INCOMPLETE: string;
|
|
24
25
|
};
|
|
25
26
|
export interface InboxParams {
|
|
26
|
-
"pubkey":
|
|
27
|
+
"pubkey": InitPubKey | null;
|
|
27
28
|
"anonymous/policy": AnonSenderPolicy;
|
|
28
29
|
"anonymous/invites": AnonSenderInvites;
|
|
29
30
|
"authenticated/policy": AuthSenderPolicy;
|
|
@@ -107,16 +108,14 @@ export declare class Inbox extends UserFiles<InboxParams> {
|
|
|
107
108
|
getObj(msgId: string, objId: string, header: boolean, segsOfs: number, segsLimit: number | undefined): Promise<ObjReader>;
|
|
108
109
|
/**
|
|
109
110
|
* @param initKeyCerts
|
|
110
|
-
* @param setDefault when it is true, sets default values -- null --
|
|
111
|
-
* in place of an object with certs.
|
|
112
111
|
* @return a promise, resolvable to true, when certs are set, or
|
|
113
112
|
* resolvable to false, when given certs do not pass sanitization.
|
|
114
113
|
*/
|
|
115
|
-
setPubKey(initKeyCerts:
|
|
116
|
-
setAnonSenderPolicy(policy: AnonSenderPolicy
|
|
117
|
-
setAnonSenderInvites(invites: AnonSenderInvites
|
|
118
|
-
setAuthSenderPolicy(policy: AuthSenderPolicy
|
|
119
|
-
setAuthSenderBlacklist(
|
|
120
|
-
setAuthSenderWhitelist(
|
|
121
|
-
setAuthSenderInvites(invites: AuthSenderInvites
|
|
114
|
+
setPubKey(initKeyCerts: InitPubKey | null): Promise<boolean>;
|
|
115
|
+
setAnonSenderPolicy(policy: AnonSenderPolicy): Promise<boolean>;
|
|
116
|
+
setAnonSenderInvites(invites: AnonSenderInvites): Promise<boolean>;
|
|
117
|
+
setAuthSenderPolicy(policy: AuthSenderPolicy): Promise<boolean>;
|
|
118
|
+
setAuthSenderBlacklist(lst: Blacklist): Promise<boolean>;
|
|
119
|
+
setAuthSenderWhitelist(lst: Whitelist): Promise<boolean>;
|
|
120
|
+
setAuthSenderInvites(invites: AuthSenderInvites): Promise<boolean>;
|
|
122
121
|
}
|
|
@@ -330,148 +330,114 @@ class Inbox extends user_files_1.UserFiles {
|
|
|
330
330
|
}
|
|
331
331
|
/**
|
|
332
332
|
* @param initKeyCerts
|
|
333
|
-
* @param setDefault when it is true, sets default values -- null --
|
|
334
|
-
* in place of an object with certs.
|
|
335
333
|
* @return a promise, resolvable to true, when certs are set, or
|
|
336
334
|
* resolvable to false, when given certs do not pass sanitization.
|
|
337
335
|
*/
|
|
338
|
-
async setPubKey(initKeyCerts
|
|
339
|
-
if (
|
|
340
|
-
|
|
336
|
+
async setPubKey(initKeyCerts) {
|
|
337
|
+
if ((initKeyCerts === null) || isValidIntroPKeyCerts(initKeyCerts)) {
|
|
338
|
+
await this.setParam('pubkey', initKeyCerts);
|
|
339
|
+
return true;
|
|
341
340
|
}
|
|
342
341
|
else {
|
|
343
|
-
|
|
344
|
-
(0, jwkeys_1.isLikeSignedKeyCert)(initKeyCerts.pkeyCert) &&
|
|
345
|
-
(0, jwkeys_1.isLikeSignedKeyCert)(initKeyCerts.userCert) &&
|
|
346
|
-
(0, jwkeys_1.isLikeSignedKeyCert)(initKeyCerts.provCert);
|
|
347
|
-
if (!isOK) {
|
|
348
|
-
return false;
|
|
349
|
-
}
|
|
342
|
+
return false;
|
|
350
343
|
}
|
|
351
|
-
await this.setParam('pubkey', initKeyCerts);
|
|
352
|
-
return true;
|
|
353
344
|
}
|
|
354
|
-
async setAnonSenderPolicy(policy
|
|
355
|
-
if (
|
|
356
|
-
policy
|
|
357
|
-
|
|
358
|
-
acceptWithInvitesOnly: false,
|
|
359
|
-
defaultMsgSize: 1024 * 1024
|
|
360
|
-
};
|
|
345
|
+
async setAnonSenderPolicy(policy) {
|
|
346
|
+
if (isValidAnonSenderPolicy(policy)) {
|
|
347
|
+
await this.setParam('anonymous/policy', policy);
|
|
348
|
+
return true;
|
|
361
349
|
}
|
|
362
350
|
else {
|
|
363
|
-
|
|
364
|
-
('boolean' === typeof policy.accept) &&
|
|
365
|
-
('boolean' === typeof policy.acceptWithInvitesOnly) &&
|
|
366
|
-
('number' === typeof policy.defaultMsgSize) &&
|
|
367
|
-
(policy.defaultMsgSize > 500);
|
|
368
|
-
if (!isOK) {
|
|
369
|
-
false;
|
|
370
|
-
}
|
|
351
|
+
return false;
|
|
371
352
|
}
|
|
372
|
-
await this.setParam('anonymous/policy', policy);
|
|
373
|
-
return true;
|
|
374
353
|
}
|
|
375
|
-
async setAnonSenderInvites(invites
|
|
376
|
-
if (
|
|
377
|
-
invites
|
|
354
|
+
async setAnonSenderInvites(invites) {
|
|
355
|
+
if (isValidListWithMsgMaxSizes(invites)) {
|
|
356
|
+
await this.setParam('anonymous/invites', invites);
|
|
357
|
+
return true;
|
|
378
358
|
}
|
|
379
359
|
else {
|
|
380
|
-
|
|
381
|
-
if (!isOK) {
|
|
382
|
-
return false;
|
|
383
|
-
}
|
|
384
|
-
for (var invite in invites) {
|
|
385
|
-
const msgMaxSize = invites[invite];
|
|
386
|
-
const isOK = ('number' === typeof msgMaxSize) && (msgMaxSize > 500);
|
|
387
|
-
if (!isOK) {
|
|
388
|
-
return false;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
360
|
+
return false;
|
|
391
361
|
}
|
|
392
|
-
await this.setParam('anonymous/invites', invites);
|
|
393
|
-
return true;
|
|
394
362
|
}
|
|
395
|
-
async setAuthSenderPolicy(policy
|
|
396
|
-
if (
|
|
397
|
-
policy
|
|
398
|
-
|
|
399
|
-
acceptFromWhiteListOnly: false,
|
|
400
|
-
applyBlackList: true,
|
|
401
|
-
defaultMsgSize: 100 * 1024 * 1024,
|
|
402
|
-
};
|
|
363
|
+
async setAuthSenderPolicy(policy) {
|
|
364
|
+
if (isValidAuthSenderPolicy(policy)) {
|
|
365
|
+
await this.setParam('authenticated/policy', policy);
|
|
366
|
+
return true;
|
|
403
367
|
}
|
|
404
368
|
else {
|
|
405
|
-
|
|
406
|
-
('boolean' === typeof policy.applyBlackList) &&
|
|
407
|
-
('boolean' === typeof policy.acceptFromWhiteListOnly) &&
|
|
408
|
-
('boolean' === typeof policy.acceptWithInvitesOnly) &&
|
|
409
|
-
('number' === typeof policy.defaultMsgSize) &&
|
|
410
|
-
(policy.defaultMsgSize > 500);
|
|
411
|
-
if (!isOK) {
|
|
412
|
-
return false;
|
|
413
|
-
}
|
|
369
|
+
return false;
|
|
414
370
|
}
|
|
415
|
-
await this.setParam('authenticated/policy', policy);
|
|
416
|
-
return true;
|
|
417
371
|
}
|
|
418
|
-
async setAuthSenderBlacklist(
|
|
419
|
-
if (
|
|
420
|
-
|
|
372
|
+
async setAuthSenderBlacklist(lst) {
|
|
373
|
+
if (isValidBalacklist(lst)) {
|
|
374
|
+
await this.setParam('authenticated/blacklist', lst);
|
|
375
|
+
return true;
|
|
421
376
|
}
|
|
422
377
|
else {
|
|
423
|
-
|
|
424
|
-
if (!isOK) {
|
|
425
|
-
return false;
|
|
426
|
-
}
|
|
378
|
+
return false;
|
|
427
379
|
}
|
|
428
|
-
await this.setParam('authenticated/blacklist', list);
|
|
429
|
-
return true;
|
|
430
380
|
}
|
|
431
|
-
async setAuthSenderWhitelist(
|
|
432
|
-
if (
|
|
433
|
-
|
|
381
|
+
async setAuthSenderWhitelist(lst) {
|
|
382
|
+
if (isValidListWithMsgMaxSizes(lst)) {
|
|
383
|
+
await this.setParam('authenticated/whitelist', lst);
|
|
384
|
+
return true;
|
|
434
385
|
}
|
|
435
386
|
else {
|
|
436
|
-
|
|
437
|
-
if (!isOK) {
|
|
438
|
-
return false;
|
|
439
|
-
}
|
|
440
|
-
for (var addr in list) {
|
|
441
|
-
const msgMaxSize = list[addr];
|
|
442
|
-
const isOK = ('number' === typeof msgMaxSize) && (msgMaxSize > 500);
|
|
443
|
-
if (!isOK) {
|
|
444
|
-
return false;
|
|
445
|
-
}
|
|
446
|
-
}
|
|
387
|
+
return false;
|
|
447
388
|
}
|
|
448
|
-
await this.setParam('authenticated/whitelist', list);
|
|
449
|
-
return true;
|
|
450
389
|
}
|
|
451
|
-
async setAuthSenderInvites(invites
|
|
452
|
-
if (
|
|
453
|
-
invites
|
|
390
|
+
async setAuthSenderInvites(invites) {
|
|
391
|
+
if (isValidListWithMsgMaxSizes(invites)) {
|
|
392
|
+
await this.setParam('authenticated/invites', invites);
|
|
393
|
+
return true;
|
|
454
394
|
}
|
|
455
395
|
else {
|
|
456
|
-
|
|
457
|
-
if (!isOK) {
|
|
458
|
-
return false;
|
|
459
|
-
}
|
|
460
|
-
for (var invite in invites) {
|
|
461
|
-
const msgMaxSize = invites[invite];
|
|
462
|
-
const isOK = ('number' === typeof msgMaxSize) && (msgMaxSize > 500);
|
|
463
|
-
if (!isOK) {
|
|
464
|
-
return false;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
396
|
+
return false;
|
|
467
397
|
}
|
|
468
|
-
await this.setParam('authenticated/invites', invites);
|
|
469
|
-
return true;
|
|
470
398
|
}
|
|
471
399
|
}
|
|
472
400
|
exports.Inbox = Inbox;
|
|
473
401
|
Object.freeze(Inbox.prototype);
|
|
474
402
|
Object.freeze(Inbox);
|
|
403
|
+
function isValidIntroPKeyCerts(pkeyCerts) {
|
|
404
|
+
return ((typeof pkeyCerts === 'object') && !!pkeyCerts &&
|
|
405
|
+
(0, jwkeys_1.isLikeSignedKeyCert)(pkeyCerts.pkeyCert) &&
|
|
406
|
+
(0, jwkeys_1.isLikeSignedKeyCert)(pkeyCerts.userCert) &&
|
|
407
|
+
(0, jwkeys_1.isLikeSignedKeyCert)(pkeyCerts.provCert));
|
|
408
|
+
}
|
|
409
|
+
function isValidAnonSenderPolicy(policy) {
|
|
410
|
+
return (('object' === typeof policy) && !!policy &&
|
|
411
|
+
('boolean' === typeof policy.accept) &&
|
|
412
|
+
('boolean' === typeof policy.acceptWithInvitesOnly) &&
|
|
413
|
+
('number' === typeof policy.defaultMsgSize) &&
|
|
414
|
+
(policy.defaultMsgSize > 500));
|
|
415
|
+
}
|
|
416
|
+
function isValidAuthSenderPolicy(policy) {
|
|
417
|
+
return (('object' === typeof policy) && !!policy &&
|
|
418
|
+
('boolean' === typeof policy.applyBlackList) &&
|
|
419
|
+
('boolean' === typeof policy.acceptFromWhiteListOnly) &&
|
|
420
|
+
('boolean' === typeof policy.acceptWithInvitesOnly) &&
|
|
421
|
+
('number' === typeof policy.defaultMsgSize) &&
|
|
422
|
+
(policy.defaultMsgSize > 500));
|
|
423
|
+
}
|
|
424
|
+
function isValidListWithMsgMaxSizes(lst) {
|
|
425
|
+
const isOK = ('object' === typeof lst) && !!lst;
|
|
426
|
+
if (!isOK) {
|
|
427
|
+
return false;
|
|
428
|
+
}
|
|
429
|
+
for (const inviteOrAddr in lst) {
|
|
430
|
+
const msgMaxSize = lst[inviteOrAddr];
|
|
431
|
+
const isOK = ('number' === typeof msgMaxSize) && (msgMaxSize > 500);
|
|
432
|
+
if (!isOK) {
|
|
433
|
+
return false;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
return true;
|
|
437
|
+
}
|
|
438
|
+
function isValidBalacklist(lst) {
|
|
439
|
+
return ('object' === typeof lst) && !!lst;
|
|
440
|
+
}
|
|
475
441
|
class ObjFiles {
|
|
476
442
|
constructor(cachePeriodMillis, deliveryFolder, readyMsgsFolder) {
|
|
477
443
|
this.deliveryFolder = deliveryFolder;
|
|
@@ -5,110 +5,97 @@ import * as deliveryApi from '../../lib-common/service-api/asmail/delivery';
|
|
|
5
5
|
import * as retrievalApi from '../../lib-common/service-api/asmail/retrieval';
|
|
6
6
|
export { SC } from './inbox';
|
|
7
7
|
export declare const BIN_TYPE = "application/octet-stream";
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
* either to true, when given user id is known, or to false, when it is not.
|
|
11
|
-
*/
|
|
12
|
-
export type UserExists = (userId: string) => Promise<boolean>;
|
|
13
|
-
/**
|
|
14
|
-
* This tells what is an allowable maximum message size for a given recipient,
|
|
15
|
-
* for a given sender and/or under a given invitation token.
|
|
16
|
-
* Function returns a promise, resolvable to
|
|
17
|
-
* (1) zero (0), if leaving mail is forbidden,
|
|
18
|
-
* (2) greater than zero maximum message length, and
|
|
19
|
-
* (3) -1 (less than zero), if mail cannot be accepted due to full mail
|
|
20
|
-
* box.
|
|
21
|
-
*/
|
|
22
|
-
export type AllowedMaxMsgSize = (recipient: string, sender: string | undefined, invitation: string | undefined) => Promise<number>;
|
|
23
|
-
/**
|
|
24
|
-
* This allocates storage for a message returning a promise, resolvable to
|
|
25
|
-
* (1) message id, when a folder for new message has been created,
|
|
26
|
-
* (2) undefined, if recipient is unknown.
|
|
27
|
-
*/
|
|
28
|
-
export type SetMsgStorage = (recipient: string, msgMeta: deliveryApi.msgMeta.Request, authSender: string | undefined, invite: string | undefined, maxMsgLength: number) => Promise<string>;
|
|
29
|
-
/**
|
|
30
|
-
* This saves object's bytes, returning a promise, resolvable when saving
|
|
31
|
-
* is OK, otherwise, promise rejects with string error code from SC.
|
|
32
|
-
*/
|
|
33
|
-
export type SaveObj = (recipient: string, msgId: string, objId: string, fstReq: deliveryApi.PutObjFirstQueryOpts | undefined, sndReq: deliveryApi.PutObjSecondQueryOpts | undefined, bytesLen: number, bytes: Readable) => Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* This finalizes delivery of a message, returning a promise.
|
|
36
|
-
* Rejected promise may have a string error code from SC.
|
|
37
|
-
*/
|
|
38
|
-
export type FinalizeDelivery = (recipient: string, msgId: string) => Promise<void>;
|
|
39
|
-
/**
|
|
40
|
-
* This returns a promise, resolvable to array with ids of available messages.
|
|
41
|
-
* Rejected promise may have a string error code from SC.
|
|
42
|
-
*/
|
|
43
|
-
export type GetMsgIds = (userId: string) => Promise<retrievalApi.listMsgs.Reply>;
|
|
44
|
-
/**
|
|
45
|
-
* This returns a promise, resolvable to message meta.
|
|
46
|
-
* Rejected promise may have a string error code from SC.
|
|
47
|
-
*/
|
|
48
|
-
export type GetMsgMeta = (userId: string, msgId: string) => Promise<retrievalApi.MsgMeta>;
|
|
49
|
-
/**
|
|
50
|
-
* This deletes a message returning a promise, resolvable when message is
|
|
51
|
-
* removed.
|
|
52
|
-
* Rejected promise may have a string error code from SC.
|
|
53
|
-
*/
|
|
54
|
-
export type DeleteMsg = (userId: string, msgId: string) => Promise<void>;
|
|
55
|
-
/**
|
|
56
|
-
* This returns parameter of a message that is still in delivery, identified
|
|
57
|
-
* by given recipient and message id. If message is unknown, or if it has
|
|
58
|
-
* already been delivered, error code is thrown.
|
|
59
|
-
* Rejected promise may have a string error code from SC.
|
|
60
|
-
*/
|
|
61
|
-
export type IncompleteMsgDeliveryParams = (recipient: string, msgId: string) => Promise<{
|
|
62
|
-
maxMsgLength: number;
|
|
63
|
-
currentMsgLength: number;
|
|
64
|
-
}>;
|
|
65
|
-
/**
|
|
66
|
-
* This returns a promise, resolvable to readable stream of object bytes.
|
|
67
|
-
* Rejected promise may be passing string error code from SC.
|
|
68
|
-
*/
|
|
69
|
-
export type GetObj = (userId: string, msgId: string, objId: string, header: boolean, segsOffset: number, segsLimit: number | undefined) => Promise<ObjReader>;
|
|
70
|
-
type GetParam<P extends keyof InboxParams> = (userId: string) => Promise<InboxParams[P]>;
|
|
71
|
-
type SetParam<P extends keyof InboxParams> = (userId: string, param: InboxParams[P]) => Promise<boolean>;
|
|
72
|
-
export type GetPubKey = GetParam<'pubkey'>;
|
|
73
|
-
export type SetPubKey = SetParam<'pubkey'>;
|
|
74
|
-
export type GetAnonSenderPolicy = GetParam<'anonymous/policy'>;
|
|
75
|
-
export type SetAnonSenderPolicy = SetParam<'anonymous/policy'>;
|
|
76
|
-
export type GetAnonSenderInvites = GetParam<'anonymous/invites'>;
|
|
77
|
-
export type SetAnonSenderInvites = SetParam<'anonymous/invites'>;
|
|
78
|
-
export type GetAuthSenderPolicy = GetParam<'authenticated/policy'>;
|
|
79
|
-
export type SetAuthSenderPolicy = SetParam<'authenticated/policy'>;
|
|
80
|
-
export type GetAuthSenderInvites = GetParam<'authenticated/invites'>;
|
|
81
|
-
export type SetAuthSenderInvites = SetParam<'authenticated/invites'>;
|
|
82
|
-
export type GetAuthSenderBlacklist = GetParam<'authenticated/blacklist'>;
|
|
83
|
-
export type SetAuthSenderBlacklist = SetParam<'authenticated/blacklist'>;
|
|
84
|
-
export type GetAuthSenderWhitelist = GetParam<'authenticated/whitelist'>;
|
|
85
|
-
export type SetAuthSenderWhitelist = SetParam<'authenticated/whitelist'>;
|
|
8
|
+
export type GetParam<P extends keyof InboxParams> = (userId: string) => Promise<InboxParams[P]>;
|
|
9
|
+
export type SetParam<P extends keyof InboxParams> = (userId: string, param: InboxParams[P]) => Promise<boolean>;
|
|
86
10
|
export type EventsSink = MailEventsSink;
|
|
87
|
-
export interface
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
11
|
+
export interface Recipients {
|
|
12
|
+
config: ASMailServiceConfig;
|
|
13
|
+
delivery: MsgDelivery;
|
|
14
|
+
retrieval: MsgRetrieval;
|
|
15
|
+
}
|
|
16
|
+
export interface ASMailServiceConfig {
|
|
17
|
+
/**
|
|
18
|
+
* This checks existence of a given user, returning a promise, resolvable
|
|
19
|
+
* either to true, when given user id is known, or to false, when it is not.
|
|
20
|
+
*/
|
|
21
|
+
exists: (userId: string) => Promise<boolean>;
|
|
22
|
+
getPubKey: GetParam<'pubkey'>;
|
|
23
|
+
setPubKey: SetParam<'pubkey'>;
|
|
24
|
+
getAnonSenderPolicy: GetParam<'anonymous/policy'>;
|
|
25
|
+
setAnonSenderPolicy: SetParam<'anonymous/policy'>;
|
|
26
|
+
getAnonSenderInvites: GetParam<'anonymous/invites'>;
|
|
27
|
+
setAnonSenderInvites: SetParam<'anonymous/invites'>;
|
|
28
|
+
getAuthSenderPolicy: GetParam<'authenticated/policy'>;
|
|
29
|
+
setAuthSenderPolicy: SetParam<'authenticated/policy'>;
|
|
30
|
+
getAuthSenderInvites: GetParam<'authenticated/invites'>;
|
|
31
|
+
setAuthSenderInvites: SetParam<'authenticated/invites'>;
|
|
32
|
+
getAuthSenderBlacklist: GetParam<'authenticated/blacklist'>;
|
|
33
|
+
setAuthSenderBlacklist: SetParam<'authenticated/blacklist'>;
|
|
34
|
+
getAuthSenderWhitelist: GetParam<'authenticated/whitelist'>;
|
|
35
|
+
setAuthSenderWhitelist: SetParam<'authenticated/whitelist'>;
|
|
36
|
+
}
|
|
37
|
+
export interface MsgDelivery {
|
|
38
|
+
getPubKey: ASMailServiceConfig['getPubKey'];
|
|
39
|
+
/**
|
|
40
|
+
* This tells what is an allowable maximum message size for a given
|
|
41
|
+
* recipient, for a given sender and/or under a given invitation token.
|
|
42
|
+
* Function returns a promise, resolvable to
|
|
43
|
+
* (1) zero (0), if leaving mail is forbidden,
|
|
44
|
+
* (2) greater than zero maximum message length, and
|
|
45
|
+
* (3) -1 (less than zero), if mail cannot be accepted due to full mail
|
|
46
|
+
* box.
|
|
47
|
+
*/
|
|
48
|
+
allowedMaxMsgSize: (recipient: string, sender: string | undefined, invitation: string | undefined) => Promise<number>;
|
|
49
|
+
/**
|
|
50
|
+
* This allocates storage for a message returning a promise, resolvable to
|
|
51
|
+
* (1) message id, when a folder for new message has been created,
|
|
52
|
+
* (2) undefined, if recipient is unknown.
|
|
53
|
+
*/
|
|
54
|
+
setMsgStorage: (recipient: string, msgMeta: deliveryApi.msgMeta.Request, authSender: string | undefined, invite: string | undefined, maxMsgLength: number) => Promise<string>;
|
|
55
|
+
/**
|
|
56
|
+
* This saves object's bytes, returning a promise, resolvable when saving
|
|
57
|
+
* is OK, otherwise, promise rejects with string error code from SC.
|
|
58
|
+
*/
|
|
59
|
+
saveObj: (recipient: string, msgId: string, objId: string, fstReq: deliveryApi.PutObjFirstQueryOpts | undefined, sndReq: deliveryApi.PutObjSecondQueryOpts | undefined, bytesLen: number, bytes: Readable) => Promise<void>;
|
|
60
|
+
/**
|
|
61
|
+
* This returns parameter of a message that is still in delivery, identified
|
|
62
|
+
* by given recipient and message id. If message is unknown, or if it has
|
|
63
|
+
* already been delivered, error code is thrown.
|
|
64
|
+
* Rejected promise may have a string error code from SC.
|
|
65
|
+
*/
|
|
66
|
+
incompleteMsgDeliveryParams: (recipient: string, msgId: string) => Promise<{
|
|
67
|
+
maxMsgLength: number;
|
|
68
|
+
currentMsgLength: number;
|
|
69
|
+
}>;
|
|
70
|
+
/**
|
|
71
|
+
* This finalizes delivery of a message, returning a promise.
|
|
72
|
+
* Rejected promise may have a string error code from SC.
|
|
73
|
+
*/
|
|
74
|
+
finalizeDelivery: (recipient: string, msgId: string) => Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
export interface MsgRetrieval {
|
|
77
|
+
exists: ASMailServiceConfig['exists'];
|
|
78
|
+
/**
|
|
79
|
+
* This returns a promise, resolvable to array with ids of available
|
|
80
|
+
* messages. Rejected promise may have a string error code from SC.
|
|
81
|
+
*/
|
|
82
|
+
getMsgIds: (userId: string) => Promise<retrievalApi.listMsgs.Reply>;
|
|
83
|
+
/**
|
|
84
|
+
* This returns a promise, resolvable to message meta.
|
|
85
|
+
* Rejected promise may have a string error code from SC.
|
|
86
|
+
*/
|
|
87
|
+
getMsgMeta: (userId: string, msgId: string) => Promise<retrievalApi.MsgMeta>;
|
|
88
|
+
/**
|
|
89
|
+
* This deletes a message returning a promise, resolvable when message is
|
|
90
|
+
* removed.
|
|
91
|
+
* Rejected promise may have a string error code from SC.
|
|
92
|
+
*/
|
|
93
|
+
deleteMsg: (userId: string, msgId: string) => Promise<void>;
|
|
94
|
+
/**
|
|
95
|
+
* This returns a promise, resolvable to readable stream of object bytes.
|
|
96
|
+
* Rejected promise may be passing string error code from SC.
|
|
97
|
+
*/
|
|
98
|
+
getObj: (userId: string, msgId: string, objId: string, header: boolean, segsOffset: number, segsLimit: number | undefined) => Promise<ObjReader>;
|
|
98
99
|
setMailEventsSink(sink: EventsSink): void;
|
|
99
|
-
getPubKey: GetPubKey;
|
|
100
|
-
setPubKey: SetPubKey;
|
|
101
|
-
getAnonSenderPolicy: GetAnonSenderPolicy;
|
|
102
|
-
setAnonSenderPolicy: SetAnonSenderPolicy;
|
|
103
|
-
getAnonSenderInvites: GetAnonSenderInvites;
|
|
104
|
-
setAnonSenderInvites: SetAnonSenderInvites;
|
|
105
|
-
getAuthSenderPolicy: GetAuthSenderPolicy;
|
|
106
|
-
setAuthSenderPolicy: SetAuthSenderPolicy;
|
|
107
|
-
getAuthSenderInvites: GetAuthSenderInvites;
|
|
108
|
-
setAuthSenderInvites: SetAuthSenderInvites;
|
|
109
|
-
getAuthSenderBlacklist: GetAuthSenderBlacklist;
|
|
110
|
-
setAuthSenderBlacklist: SetAuthSenderBlacklist;
|
|
111
|
-
getAuthSenderWhitelist: GetAuthSenderWhitelist;
|
|
112
|
-
setAuthSenderWhitelist: SetAuthSenderWhitelist;
|
|
113
100
|
}
|
|
114
|
-
export declare function
|
|
101
|
+
export declare function makeRecipients(rootFolder: string, writeBufferSize?: string | number, readBufferSize?: string | number): Recipients;
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
this program. If not, see <http://www.gnu.org/licenses/>.
|
|
17
17
|
*/
|
|
18
18
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
-
exports.
|
|
19
|
+
exports.makeRecipients = exports.BIN_TYPE = exports.SC = void 0;
|
|
20
20
|
const inbox_1 = require("./inbox");
|
|
21
21
|
const server_data_folders_1 = require("../../lib-server/resources/server-data-folders");
|
|
22
22
|
var inbox_2 = require("./inbox");
|
|
@@ -144,7 +144,7 @@ async function allowedMsgSizeForAuthSender(inbox, sender, invitation) {
|
|
|
144
144
|
}
|
|
145
145
|
return adaptToFreeSpaceLeft(inbox, policy.defaultMsgSize);
|
|
146
146
|
}
|
|
147
|
-
function
|
|
147
|
+
function makeRecipients(rootFolder, writeBufferSize, readBufferSize) {
|
|
148
148
|
const boxes = new Map();
|
|
149
149
|
let mailEventsSink = undefined;
|
|
150
150
|
async function getInbox(userId) {
|
|
@@ -169,7 +169,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
169
169
|
return inbox;
|
|
170
170
|
}
|
|
171
171
|
}
|
|
172
|
-
const
|
|
172
|
+
const config = {
|
|
173
173
|
exists: async (userId) => {
|
|
174
174
|
try {
|
|
175
175
|
await getInbox(userId);
|
|
@@ -188,7 +188,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
188
188
|
},
|
|
189
189
|
setPubKey: async (userId, pkey) => {
|
|
190
190
|
const inbox = await getInbox(userId);
|
|
191
|
-
return inbox.setPubKey(pkey
|
|
191
|
+
return inbox.setPubKey(pkey);
|
|
192
192
|
},
|
|
193
193
|
getAnonSenderPolicy: async (recipient) => {
|
|
194
194
|
const inbox = await getInbox(recipient);
|
|
@@ -196,7 +196,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
196
196
|
},
|
|
197
197
|
setAnonSenderPolicy: async (userId, policy) => {
|
|
198
198
|
const inbox = await getInbox(userId);
|
|
199
|
-
return inbox.setAnonSenderPolicy(policy
|
|
199
|
+
return inbox.setAnonSenderPolicy(policy);
|
|
200
200
|
},
|
|
201
201
|
getAnonSenderInvites: async (recipient) => {
|
|
202
202
|
const inbox = await getInbox(recipient);
|
|
@@ -204,7 +204,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
204
204
|
},
|
|
205
205
|
setAnonSenderInvites: async (userId, invites) => {
|
|
206
206
|
const inbox = await getInbox(userId);
|
|
207
|
-
return inbox.setAnonSenderInvites(invites
|
|
207
|
+
return inbox.setAnonSenderInvites(invites);
|
|
208
208
|
},
|
|
209
209
|
getAuthSenderPolicy: async (recipient) => {
|
|
210
210
|
const inbox = await getInbox(recipient);
|
|
@@ -212,7 +212,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
212
212
|
},
|
|
213
213
|
setAuthSenderPolicy: async (userId, policy) => {
|
|
214
214
|
const inbox = await getInbox(userId);
|
|
215
|
-
return inbox.setAuthSenderPolicy(policy
|
|
215
|
+
return inbox.setAuthSenderPolicy(policy);
|
|
216
216
|
},
|
|
217
217
|
getAuthSenderInvites: async (recipient) => {
|
|
218
218
|
const inbox = await getInbox(recipient);
|
|
@@ -220,7 +220,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
220
220
|
},
|
|
221
221
|
setAuthSenderInvites: async (userId, invites) => {
|
|
222
222
|
const inbox = await getInbox(userId);
|
|
223
|
-
return inbox.setAnonSenderInvites(invites
|
|
223
|
+
return inbox.setAnonSenderInvites(invites);
|
|
224
224
|
},
|
|
225
225
|
getAuthSenderBlacklist: async (recipient) => {
|
|
226
226
|
const inbox = await getInbox(recipient);
|
|
@@ -228,7 +228,7 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
228
228
|
},
|
|
229
229
|
setAuthSenderBlacklist: async (userId, list) => {
|
|
230
230
|
const inbox = await getInbox(userId);
|
|
231
|
-
return inbox.setAuthSenderBlacklist(list
|
|
231
|
+
return inbox.setAuthSenderBlacklist(list);
|
|
232
232
|
},
|
|
233
233
|
getAuthSenderWhitelist: async (recipient) => {
|
|
234
234
|
const inbox = await getInbox(recipient);
|
|
@@ -236,8 +236,12 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
236
236
|
},
|
|
237
237
|
setAuthSenderWhitelist: async (userId, list) => {
|
|
238
238
|
const inbox = await getInbox(userId);
|
|
239
|
-
return inbox.setAuthSenderWhitelist(list
|
|
240
|
-
}
|
|
239
|
+
return inbox.setAuthSenderWhitelist(list);
|
|
240
|
+
}
|
|
241
|
+
};
|
|
242
|
+
Object.freeze(config);
|
|
243
|
+
const delivery = {
|
|
244
|
+
getPubKey: config.getPubKey,
|
|
241
245
|
allowedMaxMsgSize: async (recipient, sender, invitation) => {
|
|
242
246
|
const inbox = await getInbox(recipient);
|
|
243
247
|
// XXX move these two functions into inbox
|
|
@@ -268,6 +272,14 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
268
272
|
const inbox = await getInbox(recipient);
|
|
269
273
|
return inbox.completeMsgDelivery(msgId);
|
|
270
274
|
},
|
|
275
|
+
incompleteMsgDeliveryParams: async (recipient, msgId) => {
|
|
276
|
+
const inbox = await getInbox(recipient);
|
|
277
|
+
return inbox.getIncompleteMsgParams(msgId);
|
|
278
|
+
}
|
|
279
|
+
};
|
|
280
|
+
Object.freeze(delivery);
|
|
281
|
+
const retrieval = {
|
|
282
|
+
exists: config.exists,
|
|
271
283
|
getMsgIds: async (userId) => {
|
|
272
284
|
const inbox = await getInbox(userId);
|
|
273
285
|
return inbox.getMsgIds();
|
|
@@ -280,10 +292,6 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
280
292
|
const inbox = await getInbox(userId);
|
|
281
293
|
return inbox.rmMsg(msgId);
|
|
282
294
|
},
|
|
283
|
-
incompleteMsgDeliveryParams: async (recipient, msgId) => {
|
|
284
|
-
const inbox = await getInbox(recipient);
|
|
285
|
-
return inbox.getIncompleteMsgParams(msgId);
|
|
286
|
-
},
|
|
287
295
|
getObj: async (userId, msgId, objId, header, segsOffset, segsLimit) => {
|
|
288
296
|
const inbox = await getInbox(userId);
|
|
289
297
|
return inbox.getObj(msgId, objId, header, segsOffset, segsLimit);
|
|
@@ -295,8 +303,12 @@ function makeFactory(rootFolder, writeBufferSize, readBufferSize) {
|
|
|
295
303
|
mailEventsSink = sink;
|
|
296
304
|
}
|
|
297
305
|
};
|
|
306
|
+
Object.freeze(retrieval);
|
|
307
|
+
const recipients = {
|
|
308
|
+
config, delivery, retrieval
|
|
309
|
+
};
|
|
298
310
|
Object.freeze(recipients);
|
|
299
311
|
return recipients;
|
|
300
312
|
}
|
|
301
|
-
exports.
|
|
313
|
+
exports.makeRecipients = makeRecipients;
|
|
302
314
|
Object.freeze(exports);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { AppWithWSs } from '../lib-server/web-sockets/app';
|
|
2
2
|
import { SessionsFactory } from './resources/sessions';
|
|
3
|
-
import {
|
|
3
|
+
import { MsgRetrieval } from './resources/recipients';
|
|
4
4
|
import { MidAuthorizer } from '../lib-server/routes/sessions/mid-auth';
|
|
5
|
-
export declare function makeApp(domain: string, sessions: SessionsFactory, recipients:
|
|
5
|
+
export declare function makeApp(domain: string, sessions: SessionsFactory, recipients: MsgRetrieval, midAuthorizer: MidAuthorizer): AppWithWSs;
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
|
|
2
|
+
import { GetParam } from '../../resources/recipients';
|
|
3
|
+
import { InboxParams } from '../../resources/inbox';
|
|
4
|
+
export declare function getParam<P extends keyof InboxParams>(paramGetter: GetParam<P>): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -20,9 +20,6 @@ exports.getParam = void 0;
|
|
|
20
20
|
const recipients_1 = require("../../resources/recipients");
|
|
21
21
|
const config_1 = require("../../../lib-common/service-api/asmail/config");
|
|
22
22
|
function getParam(paramGetter) {
|
|
23
|
-
if ('function' !== typeof paramGetter) {
|
|
24
|
-
throw new TypeError("Given argument 'paramGetter' must be function, but is not.");
|
|
25
|
-
}
|
|
26
23
|
return async (req, res, next) => {
|
|
27
24
|
const session = req.session;
|
|
28
25
|
const userId = session.params.userId;
|
|
@@ -1,2 +1,4 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
|
|
2
|
+
import { SetParam } from '../../resources/recipients';
|
|
3
|
+
import { InboxParams } from '../../resources/inbox';
|
|
4
|
+
export declare function setParam<P extends keyof InboxParams>(paramSetter: SetParam<P>): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -20,9 +20,6 @@ exports.setParam = void 0;
|
|
|
20
20
|
const recipients_1 = require("../../resources/recipients");
|
|
21
21
|
const config_1 = require("../../../lib-common/service-api/asmail/config");
|
|
22
22
|
function setParam(paramSetter) {
|
|
23
|
-
if ('function' !== typeof paramSetter) {
|
|
24
|
-
throw new TypeError("Given argument 'paramSetter' must be function, but is not.");
|
|
25
|
-
}
|
|
26
23
|
return async (req, res, next) => {
|
|
27
24
|
const session = req.session;
|
|
28
25
|
const userId = session.params.userId;
|
|
@@ -48,4 +45,3 @@ function setParam(paramSetter) {
|
|
|
48
45
|
};
|
|
49
46
|
}
|
|
50
47
|
exports.setParam = setParam;
|
|
51
|
-
;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function finalizeDelivery(finDelivFunc:
|
|
2
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
3
|
+
export declare function finalizeDelivery(finDelivFunc: MsgDelivery['finalizeDelivery']): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -20,9 +20,6 @@ exports.finalizeDelivery = void 0;
|
|
|
20
20
|
const recipients_1 = require("../../resources/recipients");
|
|
21
21
|
const delivery_1 = require("../../../lib-common/service-api/asmail/delivery");
|
|
22
22
|
function finalizeDelivery(finDelivFunc) {
|
|
23
|
-
if ('function' !== typeof finDelivFunc) {
|
|
24
|
-
throw new TypeError("Given argument 'finDelivFunc' must be function, but is not.");
|
|
25
|
-
}
|
|
26
23
|
return async (req, res, next) => {
|
|
27
24
|
const session = req.session;
|
|
28
25
|
const recipient = session.params.recipient;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
3
3
|
import { Redirect } from './start-session';
|
|
4
4
|
/**
|
|
5
5
|
* This creates a pre-flight route handler.
|
|
@@ -13,4 +13,4 @@ import { Redirect } from './start-session';
|
|
|
13
13
|
* (1) string with URI for ASMail service, which is serving given recipient,
|
|
14
14
|
* (2) undefined, if it is this server should service given recipient.
|
|
15
15
|
*/
|
|
16
|
-
export declare function preFlight(allowedMsgSizeFunc:
|
|
16
|
+
export declare function preFlight(allowedMsgSizeFunc: MsgDelivery['allowedMaxMsgSize'], redirectFunc?: Redirect): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2017 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2017, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -33,12 +33,6 @@ const canonical_address_1 = require("../../../lib-common/canonical-address");
|
|
|
33
33
|
* (2) undefined, if it is this server should service given recipient.
|
|
34
34
|
*/
|
|
35
35
|
function preFlight(allowedMsgSizeFunc, redirectFunc) {
|
|
36
|
-
if (typeof allowedMsgSizeFunc !== 'function') {
|
|
37
|
-
throw new TypeError(`Given argument 'allowedMsgSizeFunc' must be function, but is not.`);
|
|
38
|
-
}
|
|
39
|
-
if ((redirectFunc !== undefined) && (typeof redirectFunc !== 'function')) {
|
|
40
|
-
throw new TypeError(`Given argument 'redirectFunc' must either be function, or be undefined, but it is neither.`);
|
|
41
|
-
}
|
|
42
36
|
async function serveRequestHere(recipient, sender, invitation, res) {
|
|
43
37
|
const msgSize = await allowedMsgSizeFunc(recipient, sender, invitation);
|
|
44
38
|
if (msgSize > 0) {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
3
3
|
/**
|
|
4
4
|
* This creates a get-init-pub-key route handler.
|
|
5
5
|
* @param pkeyProvidingFunc is a function that provides recipient's public key
|
|
6
6
|
* for use in this communication.
|
|
7
7
|
*/
|
|
8
|
-
export declare function getRecipientPubKey(pkeyProvidingFunc:
|
|
8
|
+
export declare function getRecipientPubKey(pkeyProvidingFunc: MsgDelivery['getPubKey']): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -25,9 +25,6 @@ const delivery_1 = require("../../../lib-common/service-api/asmail/delivery");
|
|
|
25
25
|
* for use in this communication.
|
|
26
26
|
*/
|
|
27
27
|
function getRecipientPubKey(pkeyProvidingFunc) {
|
|
28
|
-
if ('function' !== typeof pkeyProvidingFunc) {
|
|
29
|
-
throw new TypeError("Given argument 'pkeyProvidingFunc' must be function, but is not.");
|
|
30
|
-
}
|
|
31
28
|
return async (req, res, next) => {
|
|
32
29
|
const session = req.session;
|
|
33
30
|
try {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function saveMetadata(setMsgStorageFunc:
|
|
2
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
3
|
+
export declare function saveMetadata(setMsgStorageFunc: MsgDelivery['setMsgStorage'], maxChunk: string | number): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -44,10 +44,6 @@ function findProblemWithObjIds(ids) {
|
|
|
44
44
|
return;
|
|
45
45
|
}
|
|
46
46
|
function saveMetadata(setMsgStorageFunc, maxChunk) {
|
|
47
|
-
if ('function' !== typeof setMsgStorageFunc) {
|
|
48
|
-
throw new TypeError("Given argument 'setMsgStorageFunc' must " +
|
|
49
|
-
"be function, but is not.");
|
|
50
|
-
}
|
|
51
47
|
const maxChunkSize = confUtil.stringToNumOfBytes(maxChunk);
|
|
52
48
|
return async (req, res, next) => {
|
|
53
49
|
const session = req.session;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function saveMsgObj(saveObjFunc:
|
|
2
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
3
|
+
export declare function saveMsgObj(saveObjFunc: MsgDelivery['saveObj'], chunkLimit: string | number): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2017, 2019 - 2020 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2017, 2019 - 2020, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -22,9 +22,6 @@ const delivery_1 = require("../../../lib-common/service-api/asmail/delivery");
|
|
|
22
22
|
const confUtil = require("../../../lib-server/conf-util");
|
|
23
23
|
const body_parsers_1 = require("../../../lib-server/middleware/body-parsers");
|
|
24
24
|
function saveMsgObj(saveObjFunc, chunkLimit) {
|
|
25
|
-
if ('function' !== typeof saveObjFunc) {
|
|
26
|
-
throw new TypeError("Given argument 'saveObjFunc' must be function, but is not.");
|
|
27
|
-
}
|
|
28
25
|
const maxChunkSize = confUtil.stringToNumOfBytes(chunkLimit);
|
|
29
26
|
return async (req, res, next) => {
|
|
30
27
|
if (!req.is(recipients_1.BIN_TYPE)) {
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
2
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
3
3
|
import { GenerateSession, GetSessionForMsg } from '../../resources/delivery-sessions';
|
|
4
4
|
import { Redirect } from './start-session';
|
|
5
5
|
/**
|
|
@@ -15,4 +15,4 @@ import { Redirect } from './start-session';
|
|
|
15
15
|
* (1) string with URI for ASMail service, which is serving given recipient,
|
|
16
16
|
* (2) undefined, if it is this server should service given recipient.
|
|
17
17
|
*/
|
|
18
|
-
export declare function restartSession(sessionGenFunc: GenerateSession, sessionForMsgFunc: GetSessionForMsg, incompleteMsgFunc:
|
|
18
|
+
export declare function restartSession(sessionGenFunc: GenerateSession, sessionForMsgFunc: GetSessionForMsg, incompleteMsgFunc: MsgDelivery['incompleteMsgDeliveryParams'], maxChunk: string | number, redirectFunc?: Redirect): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2017 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2017, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -35,18 +35,6 @@ const confUtil = require("../../../lib-server/conf-util");
|
|
|
35
35
|
* (2) undefined, if it is this server should service given recipient.
|
|
36
36
|
*/
|
|
37
37
|
function restartSession(sessionGenFunc, sessionForMsgFunc, incompleteMsgFunc, maxChunk, redirectFunc) {
|
|
38
|
-
if (typeof sessionGenFunc !== 'function') {
|
|
39
|
-
throw new TypeError(`Given argument 'sessionGenFunc' must be function, but is not.`);
|
|
40
|
-
}
|
|
41
|
-
if (typeof sessionForMsgFunc !== 'function') {
|
|
42
|
-
throw new TypeError(`Given argument 'sessionForMsgFunc' must be function, but is not.`);
|
|
43
|
-
}
|
|
44
|
-
if (typeof incompleteMsgFunc !== 'function') {
|
|
45
|
-
throw new TypeError(`Given argument 'incompleteMsgFunc' must be function, but is not.`);
|
|
46
|
-
}
|
|
47
|
-
if ((redirectFunc !== undefined) && (typeof redirectFunc !== 'function')) {
|
|
48
|
-
throw new TypeError(`Given argument 'redirectFunc' must either be function, or be undefined, but it is neither.`);
|
|
49
|
-
}
|
|
50
38
|
const maxChunkSize = confUtil.stringToNumOfBytes(maxChunk);
|
|
51
39
|
async function serveRequestHere(recipient, msgId, res) {
|
|
52
40
|
let session = await sessionForMsgFunc(recipient, msgId);
|
|
@@ -26,9 +26,6 @@ const delivery_1 = require("../../../lib-common/service-api/asmail/delivery");
|
|
|
26
26
|
* and false for failed authorization.
|
|
27
27
|
*/
|
|
28
28
|
function authorize(relyingPartyDomain, midAuthorizingFunc) {
|
|
29
|
-
if ('function' !== typeof midAuthorizingFunc) {
|
|
30
|
-
throw new TypeError("Given argument 'midAuthorizingFunc' must be function, but is not.");
|
|
31
|
-
}
|
|
32
29
|
return async (req, res, next) => {
|
|
33
30
|
if (req.session.isAuthorized) {
|
|
34
31
|
res.status(delivery_1.ERR_SC.duplicateReq).send("This protocol request has already been served.");
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
2
|
import { GenerateSession } from '../../resources/delivery-sessions';
|
|
3
|
-
import {
|
|
3
|
+
import { MsgDelivery } from '../../resources/recipients';
|
|
4
4
|
export type Redirect = (userId: string) => Promise<string>;
|
|
5
5
|
/**
|
|
6
6
|
* This creates a start-session route handler.
|
|
7
|
-
* @param allowedMsgSizeFunc is a function returning promises, that
|
|
7
|
+
* @param allowedMsgSizeFunc is a function returning promises, that
|
|
8
|
+
* may resolve to
|
|
8
9
|
* (1) undefined, if recipient is unknown,
|
|
9
10
|
* (2) zero (0), if leaving mail is forbidden,
|
|
10
11
|
* (3) greater than zero maximum message length, and
|
|
@@ -16,4 +17,4 @@ export type Redirect = (userId: string) => Promise<string>;
|
|
|
16
17
|
* (1) string with URI for ASMail service, which is serving given recipient,
|
|
17
18
|
* (2) undefined, if it is this server should service given recipient.
|
|
18
19
|
*/
|
|
19
|
-
export declare function startSession(allowedMsgSizeFunc:
|
|
20
|
+
export declare function startSession(allowedMsgSizeFunc: MsgDelivery['allowedMaxMsgSize'], sessionGenFunc: GenerateSession, redirectFunc?: Redirect): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -22,7 +22,8 @@ const delivery_1 = require("../../../lib-common/service-api/asmail/delivery");
|
|
|
22
22
|
const canonical_address_1 = require("../../../lib-common/canonical-address");
|
|
23
23
|
/**
|
|
24
24
|
* This creates a start-session route handler.
|
|
25
|
-
* @param allowedMsgSizeFunc is a function returning promises, that
|
|
25
|
+
* @param allowedMsgSizeFunc is a function returning promises, that
|
|
26
|
+
* may resolve to
|
|
26
27
|
* (1) undefined, if recipient is unknown,
|
|
27
28
|
* (2) zero (0), if leaving mail is forbidden,
|
|
28
29
|
* (3) greater than zero maximum message length, and
|
|
@@ -35,15 +36,6 @@ const canonical_address_1 = require("../../../lib-common/canonical-address");
|
|
|
35
36
|
* (2) undefined, if it is this server should service given recipient.
|
|
36
37
|
*/
|
|
37
38
|
function startSession(allowedMsgSizeFunc, sessionGenFunc, redirectFunc) {
|
|
38
|
-
if (typeof allowedMsgSizeFunc !== 'function') {
|
|
39
|
-
throw new TypeError(`Given argument 'allowedMsgSizeFunc' must be function, but is not.`);
|
|
40
|
-
}
|
|
41
|
-
if (typeof sessionGenFunc !== 'function') {
|
|
42
|
-
throw new TypeError(`Given argument 'sessionGenFunc' must be function, but is not.`);
|
|
43
|
-
}
|
|
44
|
-
if ((redirectFunc !== undefined) && (typeof redirectFunc !== 'function')) {
|
|
45
|
-
throw new TypeError(`Given argument 'redirectFunc' must either be function, or be undefined, but it is neither.`);
|
|
46
|
-
}
|
|
47
39
|
async function serveRequestHere(recipient, sender, invitation, res) {
|
|
48
40
|
const msgSize = await allowedMsgSizeFunc(recipient, sender, invitation);
|
|
49
41
|
if (msgSize > 0) {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function getMsgMeta(getMsgMetaFunc:
|
|
2
|
+
import { MsgRetrieval } from '../../resources/recipients';
|
|
3
|
+
export declare function getMsgMeta(getMsgMetaFunc: MsgRetrieval['getMsgMeta']): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -20,9 +20,6 @@ exports.getMsgMeta = void 0;
|
|
|
20
20
|
const recipients_1 = require("../../resources/recipients");
|
|
21
21
|
const retrieval_1 = require("../../../lib-common/service-api/asmail/retrieval");
|
|
22
22
|
function getMsgMeta(getMsgMetaFunc) {
|
|
23
|
-
if ('function' !== typeof getMsgMetaFunc) {
|
|
24
|
-
throw new TypeError("Given argument 'getMsgMetaFunc' must be function, but is not.");
|
|
25
|
-
}
|
|
26
23
|
return async (req, res, next) => {
|
|
27
24
|
const userId = req.session.params.userId;
|
|
28
25
|
const msgId = req.params.msgId;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function getMsgObj(getMsgObjFunc:
|
|
2
|
+
import { MsgRetrieval } from '../../resources/recipients';
|
|
3
|
+
export declare function getMsgObj(getMsgObjFunc: MsgRetrieval['getObj']): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2017 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2017, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -26,25 +26,18 @@ function extractQueryOptions(req) {
|
|
|
26
26
|
const query = req.query;
|
|
27
27
|
const header = (query.header === 'true');
|
|
28
28
|
const ofs = (query.ofs ? parseInt(query.ofs) : 0);
|
|
29
|
-
if (isNaN(ofs) ||
|
|
30
|
-
(ofs < 0) ||
|
|
31
|
-
(header && (ofs > 0))) {
|
|
29
|
+
if (isNaN(ofs) || (ofs < 0) || (header && (ofs > 0))) {
|
|
32
30
|
return;
|
|
33
31
|
}
|
|
34
32
|
const limit = (query.limit ? parseInt(query.limit) : undefined);
|
|
35
33
|
if (limit !== undefined) {
|
|
36
|
-
if (isNaN(limit) ||
|
|
37
|
-
(limit < 0) ||
|
|
38
|
-
(!header && (limit === 0))) {
|
|
34
|
+
if (isNaN(limit) || (limit < 0) || (!header && (limit === 0))) {
|
|
39
35
|
return;
|
|
40
36
|
}
|
|
41
37
|
}
|
|
42
38
|
return { header, limit, ofs };
|
|
43
39
|
}
|
|
44
40
|
function getMsgObj(getMsgObjFunc) {
|
|
45
|
-
if ('function' !== typeof getMsgObjFunc) {
|
|
46
|
-
throw new TypeError("Given argument 'getMsgObjFunc' must be function, but is not.");
|
|
47
|
-
}
|
|
48
41
|
return async (req, res, next) => {
|
|
49
42
|
const userId = req.session.params.userId;
|
|
50
43
|
const msgId = req.params.msgId;
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function listMsgIds(listMsgIdsFunc:
|
|
2
|
+
import { MsgRetrieval } from '../../resources/recipients';
|
|
3
|
+
export declare function listMsgIds(listMsgIdsFunc: MsgRetrieval['getMsgIds']): RequestHandler;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
/*
|
|
3
|
-
Copyright (C) 2015 - 2016 3NSoft Inc.
|
|
3
|
+
Copyright (C) 2015 - 2016, 2025 3NSoft Inc.
|
|
4
4
|
|
|
5
5
|
This program is free software: you can redistribute it and/or modify it under
|
|
6
6
|
the terms of the GNU General Public License as published by the Free Software
|
|
@@ -20,9 +20,6 @@ exports.listMsgIds = void 0;
|
|
|
20
20
|
const recipients_1 = require("../../resources/recipients");
|
|
21
21
|
const retrieval_1 = require("../../../lib-common/service-api/asmail/retrieval");
|
|
22
22
|
function listMsgIds(listMsgIdsFunc) {
|
|
23
|
-
if ('function' !== typeof listMsgIdsFunc) {
|
|
24
|
-
throw new TypeError("Given argument 'listMsgIdsFunc' must be function, but is not.");
|
|
25
|
-
}
|
|
26
23
|
return async (req, res, next) => {
|
|
27
24
|
const userId = req.session.params.userId;
|
|
28
25
|
try {
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { RequestHandler } from 'express';
|
|
2
|
-
import {
|
|
3
|
-
export declare function deleteMsg(delMsgFunc:
|
|
2
|
+
import { MsgRetrieval } from '../../resources/recipients';
|
|
3
|
+
export declare function deleteMsg(delMsgFunc: MsgRetrieval['deleteMsg']): RequestHandler;
|
|
@@ -20,9 +20,6 @@ exports.deleteMsg = void 0;
|
|
|
20
20
|
const recipients_1 = require("../../resources/recipients");
|
|
21
21
|
const retrieval_1 = require("../../../lib-common/service-api/asmail/retrieval");
|
|
22
22
|
function deleteMsg(delMsgFunc) {
|
|
23
|
-
if ('function' !== typeof delMsgFunc) {
|
|
24
|
-
throw new TypeError("Given argument 'delMsgFunc' must be function, but is not.");
|
|
25
|
-
}
|
|
26
23
|
return async (req, res, next) => {
|
|
27
24
|
const userId = req.session.params.userId;
|
|
28
25
|
const msgId = req.params.msgId;
|