@webda/core 1.5.2 → 1.6.0-beta.3
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/lib/application.d.ts +0 -7
- package/lib/application.js +33 -27
- package/lib/application.js.map +1 -1
- package/lib/application.spec.js +23 -2
- package/lib/application.spec.js.map +1 -1
- package/lib/core.d.ts +20 -2
- package/lib/core.js +74 -34
- package/lib/core.js.map +1 -1
- package/lib/core.spec.js +5 -5
- package/lib/core.spec.js.map +1 -1
- package/lib/index.d.ts +12 -7
- package/lib/index.js +12 -7
- package/lib/index.js.map +1 -1
- package/lib/models/aclmodel.d.ts +63 -5
- package/lib/models/aclmodel.js +115 -12
- package/lib/models/aclmodel.js.map +1 -1
- package/lib/models/aclmodel.spec.js +65 -19
- package/lib/models/aclmodel.spec.js.map +1 -1
- package/lib/models/coremodel.d.ts +22 -6
- package/lib/models/coremodel.js +14 -6
- package/lib/models/coremodel.js.map +1 -1
- package/lib/models/coremodel.spec.js +0 -1
- package/lib/models/coremodel.spec.js.map +1 -1
- package/lib/models/ident.d.ts +5 -0
- package/lib/models/ident.js +6 -0
- package/lib/models/ident.js.map +1 -1
- package/lib/models/ident.spec.js +3 -0
- package/lib/models/ident.spec.js.map +1 -1
- package/lib/models/ownermodel.js +1 -2
- package/lib/models/ownermodel.js.map +1 -1
- package/lib/models/user.d.ts +30 -0
- package/lib/models/user.js +34 -2
- package/lib/models/user.js.map +1 -1
- package/lib/models/user.spec.js +18 -0
- package/lib/models/user.spec.js.map +1 -1
- package/lib/queues/memoryqueue.spec.js +0 -1
- package/lib/queues/memoryqueue.spec.js.map +1 -1
- package/lib/queues/pubsubservice.d.ts +27 -0
- package/lib/queues/pubsubservice.js +21 -0
- package/lib/queues/pubsubservice.js.map +1 -0
- package/lib/queues/queueservice.d.ts +3 -16
- package/lib/queues/queueservice.js +2 -13
- package/lib/queues/queueservice.js.map +1 -1
- package/lib/router.js +1 -1
- package/lib/router.js.map +1 -1
- package/lib/router.spec.js +1 -1
- package/lib/router.spec.js.map +1 -1
- package/lib/services/authentication.d.ts +35 -1
- package/lib/services/authentication.js +55 -5
- package/lib/services/authentication.js.map +1 -1
- package/lib/services/authentication.spec.js +9 -0
- package/lib/services/authentication.spec.js.map +1 -1
- package/lib/services/binary.js +15 -10
- package/lib/services/binary.js.map +1 -1
- package/lib/services/binary.spec.d.ts +1 -1
- package/lib/services/configuration.d.ts +9 -0
- package/lib/services/configuration.js +27 -2
- package/lib/services/configuration.js.map +1 -1
- package/lib/services/configuration.spec.js +19 -2
- package/lib/services/configuration.spec.js.map +1 -1
- package/lib/services/cron.spec.js +2 -2
- package/lib/services/cron.spec.js.map +1 -1
- package/lib/services/debugmailer.d.ts +10 -3
- package/lib/services/debugmailer.js +18 -4
- package/lib/services/debugmailer.js.map +1 -1
- package/lib/services/debugmailer.spec.js +1 -0
- package/lib/services/debugmailer.spec.js.map +1 -1
- package/lib/services/filebinary.spec.js +0 -1
- package/lib/services/filebinary.spec.js.map +1 -1
- package/lib/services/fileconfiguration.d.ts +7 -1
- package/lib/services/fileconfiguration.js +9 -0
- package/lib/services/fileconfiguration.js.map +1 -1
- package/lib/services/fileconfiguration.spec.js +81 -2
- package/lib/services/fileconfiguration.spec.js.map +1 -1
- package/lib/services/invitationservice.d.ts +196 -0
- package/lib/services/invitationservice.js +441 -0
- package/lib/services/invitationservice.js.map +1 -0
- package/lib/services/invitationservice.spec.d.ts +1 -0
- package/lib/services/invitationservice.spec.js +516 -0
- package/lib/services/invitationservice.spec.js.map +1 -0
- package/lib/services/kubernetesconfiguration.d.ts +6 -0
- package/lib/services/kubernetesconfiguration.js +13 -0
- package/lib/services/kubernetesconfiguration.js.map +1 -1
- package/lib/services/kubernetesconfiguration.spec.js +31 -7
- package/lib/services/kubernetesconfiguration.spec.js.map +1 -1
- package/lib/services/mailer.d.ts +93 -3
- package/lib/services/mailer.js +55 -11
- package/lib/services/mailer.js.map +1 -1
- package/lib/services/mailer.spec.js +30 -1
- package/lib/services/mailer.spec.js.map +1 -1
- package/lib/services/notificationservice.d.ts +74 -0
- package/lib/services/notificationservice.js +89 -0
- package/lib/services/notificationservice.js.map +1 -0
- package/lib/services/notificationservice.spec.d.ts +1 -0
- package/lib/services/notificationservice.spec.js +104 -0
- package/lib/services/notificationservice.spec.js.map +1 -0
- package/lib/services/oauth.spec.js +7 -10
- package/lib/services/oauth.spec.js.map +1 -1
- package/lib/services/service.d.ts +20 -4
- package/lib/services/service.js +35 -5
- package/lib/services/service.js.map +1 -1
- package/lib/services/service.spec.js +26 -0
- package/lib/services/service.spec.js.map +1 -1
- package/lib/stores/aggregator.d.ts +43 -0
- package/lib/stores/aggregator.js +106 -0
- package/lib/stores/aggregator.js.map +1 -0
- package/lib/stores/file.d.ts +1 -1
- package/lib/stores/file.js +5 -5
- package/lib/stores/file.js.map +1 -1
- package/lib/stores/file.spec.d.ts +3 -1
- package/lib/stores/file.spec.js +48 -19
- package/lib/stores/file.spec.js.map +1 -1
- package/lib/stores/mapper.d.ts +151 -0
- package/lib/stores/mapper.js +320 -0
- package/lib/stores/mapper.js.map +1 -0
- package/lib/stores/mapper.spec.d.ts +1 -0
- package/lib/stores/mapper.spec.js +174 -0
- package/lib/stores/mapper.spec.js.map +1 -0
- package/lib/stores/memory.js +0 -3
- package/lib/stores/memory.js.map +1 -1
- package/lib/stores/memory.spec.d.ts +3 -1
- package/lib/stores/memory.spec.js +12 -0
- package/lib/stores/memory.spec.js.map +1 -1
- package/lib/stores/store.d.ts +30 -109
- package/lib/stores/store.js +57 -285
- package/lib/stores/store.js.map +1 -1
- package/lib/stores/store.spec.d.ts +10 -0
- package/lib/stores/store.spec.js +41 -14
- package/lib/stores/store.spec.js.map +1 -1
- package/lib/test.d.ts +2 -1
- package/lib/test.js +21 -3
- package/lib/test.js.map +1 -1
- package/lib/utils/context.d.ts +12 -1
- package/lib/utils/context.js +21 -5
- package/lib/utils/context.js.map +1 -1
- package/lib/utils/context.spec.js +6 -1
- package/lib/utils/context.spec.js.map +1 -1
- package/lib/utils/cookie.d.ts +12 -0
- package/lib/utils/cookie.js +29 -19
- package/lib/utils/cookie.js.map +1 -1
- package/lib/utils/cookie.spec.js +0 -1
- package/lib/utils/cookie.spec.js.map +1 -1
- package/package.json +9 -7
- package/test/config-file-no-reload.json +70 -0
- package/test/config-file-reload.json +7 -1
- package/test/config-invitation.json +63 -0
- package/test/config-kube-reload.json +7 -1
- package/test/config.json +35 -23
- package/test/config.old-default.json +0 -16
- package/test/config.old.json +0 -16
|
@@ -23,6 +23,7 @@ const path = require("path");
|
|
|
23
23
|
const yaml = require("yaml");
|
|
24
24
|
const fs_1 = require("fs");
|
|
25
25
|
const __1 = require("..");
|
|
26
|
+
const sinon_1 = require("sinon");
|
|
26
27
|
class AbstractKubernetesConfigurationServiceTest extends test_1.WebdaTest {
|
|
27
28
|
constructor() {
|
|
28
29
|
super(...arguments);
|
|
@@ -30,7 +31,14 @@ class AbstractKubernetesConfigurationServiceTest extends test_1.WebdaTest {
|
|
|
30
31
|
this.content = {
|
|
31
32
|
"webda.json": JSON.stringify({
|
|
32
33
|
services: {
|
|
33
|
-
|
|
34
|
+
Authentication: {
|
|
35
|
+
providers: {
|
|
36
|
+
email: {
|
|
37
|
+
text: "Plop1"
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
"Authentication.providers.email.text2": "Plop6"
|
|
34
42
|
}
|
|
35
43
|
}, undefined, 2),
|
|
36
44
|
other: "test",
|
|
@@ -91,31 +99,47 @@ let KubernetesConfigurationServiceTest = class KubernetesConfigurationServiceTes
|
|
|
91
99
|
assert.rejects(() => serv.init(), /Need a source for KubernetesConfigurationService/);
|
|
92
100
|
serv.getParameters().source = "/notexisting";
|
|
93
101
|
assert.rejects(() => serv.init(), /Need a source for KubernetesConfigurationService/);
|
|
102
|
+
let mock = (0, sinon_1.stub)(serv, "loadAndStoreConfiguration").callsFake(() => { });
|
|
103
|
+
yield serv.initConfiguration();
|
|
104
|
+
assert.strictEqual(mock.callCount, 1);
|
|
94
105
|
});
|
|
95
106
|
}
|
|
96
107
|
updatedConfigMap() {
|
|
97
108
|
return __awaiter(this, void 0, void 0, function* () {
|
|
98
|
-
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "
|
|
109
|
+
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop1");
|
|
110
|
+
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text2, "Plop6");
|
|
99
111
|
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
|
|
100
112
|
yield new Promise(resolve => {
|
|
101
113
|
this.webda.getService("KubernetesConfigurationService").on("Configuration.Applied", resolve);
|
|
102
114
|
this.updateConfigMap(Object.assign(Object.assign({}, this.content), { "webda.json": JSON.stringify({
|
|
103
115
|
services: {
|
|
104
|
-
|
|
116
|
+
Authentication: {
|
|
117
|
+
providers: {
|
|
118
|
+
email: {
|
|
119
|
+
text: "Plop2"
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
105
123
|
}
|
|
106
124
|
}) }));
|
|
107
125
|
});
|
|
108
|
-
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "
|
|
126
|
+
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop2");
|
|
109
127
|
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
|
|
110
128
|
yield new Promise(resolve => {
|
|
111
129
|
this.webda.getService("KubernetesConfigurationService").on("Configuration.Applied", resolve);
|
|
112
130
|
this.updateConfigMap(Object.assign(Object.assign({}, this.content), { "webda.json": JSON.stringify({
|
|
113
131
|
services: {
|
|
114
|
-
|
|
132
|
+
Authentication: {
|
|
133
|
+
providers: {
|
|
134
|
+
email: {
|
|
135
|
+
text: "Plop3"
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
115
139
|
}
|
|
116
140
|
}) }));
|
|
117
141
|
});
|
|
118
|
-
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "
|
|
142
|
+
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop3");
|
|
119
143
|
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
|
|
120
144
|
});
|
|
121
145
|
}
|
|
@@ -132,7 +156,7 @@ KubernetesConfigurationServiceTest = __decorate([
|
|
|
132
156
|
let EmptyKubernetesConfigurationServiceTest = class EmptyKubernetesConfigurationServiceTest extends AbstractKubernetesConfigurationServiceTest {
|
|
133
157
|
unmountedConfigMap() {
|
|
134
158
|
return __awaiter(this, void 0, void 0, function* () {
|
|
135
|
-
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "
|
|
159
|
+
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.text, "Plop0");
|
|
136
160
|
assert.strictEqual(this.webda.getConfiguration().services.Authentication.providers.email.mailer, "DefinedMailer");
|
|
137
161
|
});
|
|
138
162
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"kubernetesconfiguration.spec.js","sourceRoot":"","sources":["../../src/services/kubernetesconfiguration.spec.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,iCAAiC;AACjC,2CAA8C;AAC9C,kCAAoC;AACpC,uCAA2E;AAC3E,6BAA6B;AAC7B,6BAA6B;AAC7B,2BAA2C;AAC3C,0BAAoD;
|
|
1
|
+
{"version":3,"file":"kubernetesconfiguration.spec.js","sourceRoot":"","sources":["../../src/services/kubernetesconfiguration.spec.ts"],"names":[],"mappings":"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"}
|
package/lib/services/mailer.d.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { Ident, User } from "..";
|
|
1
2
|
import { ModdaDefinition } from "../core";
|
|
3
|
+
import { NotificationService } from "./notificationservice";
|
|
2
4
|
import { Service, ServiceParameters } from "./service";
|
|
3
5
|
interface IEmailTemplate {
|
|
4
6
|
renderAll(file: string, options: any): any;
|
|
@@ -6,6 +8,55 @@ interface IEmailTemplate {
|
|
|
6
8
|
interface TemplatesMap {
|
|
7
9
|
[key: string]: IEmailTemplate;
|
|
8
10
|
}
|
|
11
|
+
/**
|
|
12
|
+
* Represent a mailer service
|
|
13
|
+
*/
|
|
14
|
+
export interface MailerService extends NotificationService {
|
|
15
|
+
/**
|
|
16
|
+
*
|
|
17
|
+
* @params options Options to pass to the sendMail option of the nodemailer module
|
|
18
|
+
* @params callback to pass to the sendMail
|
|
19
|
+
*/
|
|
20
|
+
send(options: MailerSendOptions, callback: () => void): Promise<any>;
|
|
21
|
+
}
|
|
22
|
+
interface MailerSendOptions {
|
|
23
|
+
/**
|
|
24
|
+
* Sender of the email
|
|
25
|
+
*
|
|
26
|
+
* @default parameters.sender
|
|
27
|
+
*/
|
|
28
|
+
from?: string;
|
|
29
|
+
/**
|
|
30
|
+
* Destination of the email
|
|
31
|
+
*/
|
|
32
|
+
to: string;
|
|
33
|
+
/**
|
|
34
|
+
* Template to user
|
|
35
|
+
*/
|
|
36
|
+
template?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Replacements for the template
|
|
39
|
+
*/
|
|
40
|
+
replacements?: any;
|
|
41
|
+
/**
|
|
42
|
+
* Subject of the email
|
|
43
|
+
*
|
|
44
|
+
* Can be overriden by the template
|
|
45
|
+
*/
|
|
46
|
+
subject?: string;
|
|
47
|
+
/**
|
|
48
|
+
* HTML of the email
|
|
49
|
+
*
|
|
50
|
+
* Can be overriden by the template
|
|
51
|
+
*/
|
|
52
|
+
html?: string;
|
|
53
|
+
/**
|
|
54
|
+
* Text of the email
|
|
55
|
+
*
|
|
56
|
+
* Can be overriden by the template
|
|
57
|
+
*/
|
|
58
|
+
text?: string;
|
|
59
|
+
}
|
|
9
60
|
export declare class MailerParameters extends ServiceParameters {
|
|
10
61
|
/**
|
|
11
62
|
* Specify which foldeer contains templates
|
|
@@ -23,8 +74,40 @@ export declare class MailerParameters extends ServiceParameters {
|
|
|
23
74
|
* Define the default sender
|
|
24
75
|
*/
|
|
25
76
|
sender: string;
|
|
77
|
+
/**
|
|
78
|
+
* @see https://www.npmjs.com/package/email-templates
|
|
79
|
+
*/
|
|
80
|
+
emailTemplateOptions?: any;
|
|
81
|
+
/**
|
|
82
|
+
* Define the type of transport to use
|
|
83
|
+
*/
|
|
84
|
+
transport?: string;
|
|
85
|
+
/**
|
|
86
|
+
* SES AWS Bean if transport === "ses"
|
|
87
|
+
*/
|
|
88
|
+
SES: any;
|
|
26
89
|
constructor(params: any);
|
|
27
90
|
}
|
|
91
|
+
export declare abstract class AbstractMailer<T extends ServiceParameters = ServiceParameters> extends Service<T> implements MailerService {
|
|
92
|
+
/**
|
|
93
|
+
* @inheritdoc
|
|
94
|
+
*/
|
|
95
|
+
abstract send(options: MailerSendOptions, callback?: () => void): Promise<any>;
|
|
96
|
+
/**
|
|
97
|
+
* @inheritdoc
|
|
98
|
+
*/
|
|
99
|
+
abstract hasNotification(notification: string): any;
|
|
100
|
+
/**
|
|
101
|
+
* If user has an email
|
|
102
|
+
* @param user
|
|
103
|
+
* @returns
|
|
104
|
+
*/
|
|
105
|
+
handleNotificationFor(user: User | Ident): Promise<boolean>;
|
|
106
|
+
/**
|
|
107
|
+
* @override
|
|
108
|
+
*/
|
|
109
|
+
sendNotification(user: User | Ident, notification: string, replacements: any): Promise<void>;
|
|
110
|
+
}
|
|
28
111
|
/**
|
|
29
112
|
* A basic Mailer based on the nodemailer module
|
|
30
113
|
*
|
|
@@ -36,7 +119,7 @@ export declare class MailerParameters extends ServiceParameters {
|
|
|
36
119
|
* config: { ... }
|
|
37
120
|
* @category CoreServices
|
|
38
121
|
*/
|
|
39
|
-
declare class Mailer<T extends MailerParameters = MailerParameters> extends
|
|
122
|
+
declare class Mailer<T extends MailerParameters = MailerParameters> extends AbstractMailer<T> {
|
|
40
123
|
_transporter: any;
|
|
41
124
|
_templates: TemplatesMap;
|
|
42
125
|
/**
|
|
@@ -56,13 +139,20 @@ declare class Mailer<T extends MailerParameters = MailerParameters> extends Serv
|
|
|
56
139
|
* @param name
|
|
57
140
|
* @returns
|
|
58
141
|
*/
|
|
59
|
-
_getTemplate(name:
|
|
142
|
+
_getTemplate(name: string): IEmailTemplate;
|
|
143
|
+
/**
|
|
144
|
+
* Check if the email template exists
|
|
145
|
+
*
|
|
146
|
+
* @param name
|
|
147
|
+
* @returns
|
|
148
|
+
*/
|
|
149
|
+
hasNotification(name: string): boolean;
|
|
60
150
|
/**
|
|
61
151
|
*
|
|
62
152
|
* @params options Options to pass to the sendMail option of the nodemailer module
|
|
63
153
|
* @params callback to pass to the sendMail
|
|
64
154
|
*/
|
|
65
|
-
send(options:
|
|
155
|
+
send(options: MailerSendOptions, callback?: any): Promise<any>;
|
|
66
156
|
/**
|
|
67
157
|
* @inheritdoc
|
|
68
158
|
*/
|
package/lib/services/mailer.js
CHANGED
|
@@ -9,20 +9,58 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
|
|
|
9
9
|
});
|
|
10
10
|
};
|
|
11
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
-
exports.Mailer = exports.MailerParameters = void 0;
|
|
12
|
+
exports.Mailer = exports.AbstractMailer = exports.MailerParameters = void 0;
|
|
13
13
|
const Email = require("email-templates");
|
|
14
14
|
const fs = require("fs");
|
|
15
15
|
const nodemailer = require("nodemailer");
|
|
16
|
+
const path = require("path");
|
|
16
17
|
const service_1 = require("./service");
|
|
17
18
|
class MailerParameters extends service_1.ServiceParameters {
|
|
18
19
|
constructor(params) {
|
|
19
|
-
var _a, _b;
|
|
20
|
+
var _a, _b, _c, _d, _e, _f;
|
|
21
|
+
var _g, _h, _j;
|
|
20
22
|
super(params);
|
|
21
23
|
(_a = this.templates) !== null && _a !== void 0 ? _a : (this.templates = "./templates");
|
|
24
|
+
if (!this.templates.endsWith("/")) {
|
|
25
|
+
this.templates += "/";
|
|
26
|
+
}
|
|
22
27
|
(_b = this.templatesEngine) !== null && _b !== void 0 ? _b : (this.templatesEngine = "mustache");
|
|
28
|
+
(_c = this.emailTemplateOptions) !== null && _c !== void 0 ? _c : (this.emailTemplateOptions = {});
|
|
29
|
+
(_d = (_g = this.emailTemplateOptions).juiceResources) !== null && _d !== void 0 ? _d : (_g.juiceResources = {});
|
|
30
|
+
(_e = (_h = this.emailTemplateOptions.juiceResources).webResources) !== null && _e !== void 0 ? _e : (_h.webResources = {});
|
|
31
|
+
(_f = (_j = this.emailTemplateOptions.juiceResources.webResources).relativeTo) !== null && _f !== void 0 ? _f : (_j.relativeTo = path.resolve(this.templates));
|
|
23
32
|
}
|
|
24
33
|
}
|
|
25
34
|
exports.MailerParameters = MailerParameters;
|
|
35
|
+
class AbstractMailer extends service_1.Service {
|
|
36
|
+
/**
|
|
37
|
+
* If user has an email
|
|
38
|
+
* @param user
|
|
39
|
+
* @returns
|
|
40
|
+
*/
|
|
41
|
+
handleNotificationFor(user) {
|
|
42
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
43
|
+
return user.getEmail() !== null;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* @override
|
|
48
|
+
*/
|
|
49
|
+
sendNotification(user, notification, replacements) {
|
|
50
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
51
|
+
let email = user.getEmail();
|
|
52
|
+
if (!email) {
|
|
53
|
+
throw new Error(`Cannot find a valid email for ${user.__type} '${user.getUuid()}'`);
|
|
54
|
+
}
|
|
55
|
+
return this.send({
|
|
56
|
+
template: notification,
|
|
57
|
+
replacements: Object.assign({}, replacements),
|
|
58
|
+
to: email
|
|
59
|
+
});
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
exports.AbstractMailer = AbstractMailer;
|
|
26
64
|
/**
|
|
27
65
|
* A basic Mailer based on the nodemailer module
|
|
28
66
|
*
|
|
@@ -34,7 +72,7 @@ exports.MailerParameters = MailerParameters;
|
|
|
34
72
|
* config: { ... }
|
|
35
73
|
* @category CoreServices
|
|
36
74
|
*/
|
|
37
|
-
class Mailer extends
|
|
75
|
+
class Mailer extends AbstractMailer {
|
|
38
76
|
constructor() {
|
|
39
77
|
super(...arguments);
|
|
40
78
|
this._templates = {};
|
|
@@ -71,23 +109,29 @@ class Mailer extends service_1.Service {
|
|
|
71
109
|
*/
|
|
72
110
|
_getTemplate(name) {
|
|
73
111
|
if (!this._templates[name]) {
|
|
74
|
-
|
|
75
|
-
let templateDir = this.parameters.templates + "/";
|
|
76
|
-
if (!fs.existsSync(templateDir + name)) {
|
|
112
|
+
if (!this.hasNotification(name)) {
|
|
77
113
|
this._webda.log("WARN", "No template found for", name);
|
|
78
114
|
return;
|
|
79
115
|
}
|
|
80
|
-
this._templates[name] = new Email({
|
|
81
|
-
|
|
82
|
-
root: templateDir,
|
|
116
|
+
this._templates[name] = new Email(Object.assign(Object.assign({}, this.parameters.emailTemplateOptions), { views: {
|
|
117
|
+
root: this.parameters.templates,
|
|
83
118
|
options: {
|
|
84
119
|
extension: this.parameters.templatesEngine
|
|
85
120
|
}
|
|
86
|
-
}
|
|
87
|
-
});
|
|
121
|
+
} }));
|
|
88
122
|
}
|
|
89
123
|
return this._templates[name];
|
|
90
124
|
}
|
|
125
|
+
/**
|
|
126
|
+
* Check if the email template exists
|
|
127
|
+
*
|
|
128
|
+
* @param name
|
|
129
|
+
* @returns
|
|
130
|
+
*/
|
|
131
|
+
hasNotification(name) {
|
|
132
|
+
// Load template
|
|
133
|
+
return fs.existsSync(this.parameters.templates + name);
|
|
134
|
+
}
|
|
91
135
|
/**
|
|
92
136
|
*
|
|
93
137
|
* @params options Options to pass to the sendMail option of the nodemailer module
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailer.js","sourceRoot":"","sources":["../../src/services/mailer.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;AACb,yCAAyC;AACzC,yBAAyB;AACzB,yCAAyC;
|
|
1
|
+
{"version":3,"file":"mailer.js","sourceRoot":"","sources":["../../src/services/mailer.ts"],"names":[],"mappings":"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"}
|
|
@@ -20,6 +20,7 @@ const mocha_1 = require("@testdeck/mocha");
|
|
|
20
20
|
const test_1 = require("../test");
|
|
21
21
|
const __1 = require("..");
|
|
22
22
|
const mailer_1 = require("./mailer");
|
|
23
|
+
const sinon = require("sinon");
|
|
23
24
|
let MailerTest = class MailerTest extends test_1.WebdaTest {
|
|
24
25
|
before() {
|
|
25
26
|
const _super = Object.create(null, {
|
|
@@ -46,7 +47,7 @@ let MailerTest = class MailerTest extends test_1.WebdaTest {
|
|
|
46
47
|
}
|
|
47
48
|
params() {
|
|
48
49
|
let params = new __1.MailerParameters({ templates: "ts", templatesEngine: "b" });
|
|
49
|
-
assert.strictEqual(params.templates, "ts");
|
|
50
|
+
assert.strictEqual(params.templates, "ts/");
|
|
50
51
|
assert.strictEqual(params.templatesEngine, "b");
|
|
51
52
|
}
|
|
52
53
|
unknownTemplate() {
|
|
@@ -117,6 +118,28 @@ let MailerTest = class MailerTest extends test_1.WebdaTest {
|
|
|
117
118
|
}), /Cannot send email as no transporter is defined/);
|
|
118
119
|
});
|
|
119
120
|
}
|
|
121
|
+
handleNotificationFor() {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
123
|
+
const user = new __1.User();
|
|
124
|
+
assert.strictEqual(yield this.mailer.handleNotificationFor(user), false);
|
|
125
|
+
user.load({ email: "test@test.com" });
|
|
126
|
+
assert.strictEqual(yield this.mailer.handleNotificationFor(user), true);
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
sendNotification() {
|
|
130
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
131
|
+
let stub = sinon.stub(this.mailer, "send").callsFake(() => __awaiter(this, void 0, void 0, function* () { }));
|
|
132
|
+
try {
|
|
133
|
+
const user = new __1.User();
|
|
134
|
+
assert.rejects(() => this.mailer.sendNotification(user, "", undefined, undefined), /Cannot find a valid email for user/);
|
|
135
|
+
user.load({ email: "test@test.com" });
|
|
136
|
+
yield this.mailer.sendNotification(user, "", undefined, undefined);
|
|
137
|
+
}
|
|
138
|
+
finally {
|
|
139
|
+
stub.restore();
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
120
143
|
};
|
|
121
144
|
__decorate([
|
|
122
145
|
mocha_1.test
|
|
@@ -142,6 +165,12 @@ __decorate([
|
|
|
142
165
|
__decorate([
|
|
143
166
|
mocha_1.test
|
|
144
167
|
], MailerTest.prototype, "noTransporter", null);
|
|
168
|
+
__decorate([
|
|
169
|
+
mocha_1.test
|
|
170
|
+
], MailerTest.prototype, "handleNotificationFor", null);
|
|
171
|
+
__decorate([
|
|
172
|
+
mocha_1.test
|
|
173
|
+
], MailerTest.prototype, "sendNotification", null);
|
|
145
174
|
MailerTest = __decorate([
|
|
146
175
|
mocha_1.suite
|
|
147
176
|
], MailerTest);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mailer.spec.js","sourceRoot":"","sources":["../../src/services/mailer.spec.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;AAEb,iCAAiC;AACjC,2CAA8C;AAC9C,kCAAoC;AAEpC,
|
|
1
|
+
{"version":3,"file":"mailer.spec.js","sourceRoot":"","sources":["../../src/services/mailer.spec.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;;;;;;;;;;;;;;;;;AAEb,iCAAiC;AACjC,2CAA8C;AAC9C,kCAAoC;AAEpC,0BAA4C;AAC5C,qCAAkC;AAClC,+BAA+B;AAG/B,IAAM,UAAU,GAAhB,MAAM,UAAW,SAAQ,gBAAS;IAO1B,MAAM;;;;;YACV,MAAM,OAAM,MAAM,WAAE,CAAC;YACrB,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,YAAY,GAAG,SAAS,CAAC;YAClF,IAAI,CAAC,GAAG,GAAG,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC;YACnC,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAC5C,0BAA0B;YAC1B,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,EAAE;gBACxD,IAAI,CAAC,WAAW,GAAG,OAAO,CAAC;gBAC3B,IAAI,CAAC,YAAY,GAAG,QAAQ,CAAC;gBAC7B,OAAO,OAAO,CAAC,OAAO,EAAE,CAAC;YAC3B,CAAC,CAAC;YACF,qBAAqB;YACrB,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC,KAAK,EAAE,GAAG,IAAI,EAAE,EAAE;gBAC1C,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;gBACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC;YACvB,CAAC,CAAC;QACJ,CAAC;KAAA;IAGD,MAAM;QACJ,IAAI,MAAM,GAAG,IAAI,oBAAgB,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,eAAe,EAAE,GAAG,EAAE,CAAC,CAAC;QAC7E,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,eAAe,EAAE,GAAG,CAAC,CAAC;IAClD,CAAC;IAGK,eAAe;;YACnB,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;YACjC,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC3C,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,uBAAuB,CAAC,CAAC;YAC9D,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;YAC7C,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,MAAM;gBAChB,IAAI,EAAE,eAAe;gBACrB,YAAY,EAAE,EAAE;aACjB,CAAC,EACJ,uBAAuB,CACxB,CAAC;QACJ,CAAC;KAAA;IAED,aAAa;QACX,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC9C,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,yBAAyB,CAAC,CAAC;QACpD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,CAAC;IAEK,mBAAmB;;YACvB,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACrB,QAAQ,EAAE,yBAAyB;aACpC,CAAC,CAAC;YACH,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAC3D,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;YACxD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC;KAAA;IAGK,UAAU;;YACd,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QACvD,CAAC;KAAA;IAGK,gBAAgB;;YACpB,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,GAAG,EAAE;gBAC9B,OAAO;oBACL,SAAS,EAAE,GAAS,EAAE;wBACpB,OAAO,EAAE,CAAC;oBACZ,CAAC,CAAA;iBACF,CAAC;YACJ,CAAC,CAAC;YACF,MAAM,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;YACnD,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAC1D,CAAC;KAAA;IAGD,iBAAiB;QACf,IAAI,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QACxE,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3B,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;QAC3D,MAAM,CAAC,iBAAiB,EAAE,CAAC;QAC3B,MAAM,GAAG,IAAI,eAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,CAAC;QAC/D,MAAM,CAAC,iBAAiB,EAAE,CAAC;IAC7B,CAAC;IAGK,aAAa;;YACjB,IAAI,CAAC,MAAM,CAAC,YAAY,GAAG,SAAS,CAAC;YACrC,MAAM,MAAM,CAAC,OAAO,CAClB,GAAG,EAAE,CACH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;gBACf,QAAQ,EAAE,yBAAyB;gBACnC,IAAI,EAAE,eAAe;aACtB,CAAC,EACJ,gDAAgD,CACjD,CAAC;QACJ,CAAC;KAAA;IAGK,qBAAqB;;YACzB,MAAM,IAAI,GAAG,IAAI,QAAI,EAAE,CAAC;YACxB,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC;YACzE,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;QAC1E,CAAC;KAAA;IAGK,gBAAgB;;YACpB,IAAI,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,GAAS,EAAE,gDAAE,CAAC,CAAA,CAAC,CAAC;YACrE,IAAI;gBACF,MAAM,IAAI,GAAG,IAAI,QAAI,EAAE,CAAC;gBACxB,MAAM,CAAC,OAAO,CACZ,GAAG,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,EAClE,oCAAoC,CACrC,CAAC;gBACF,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC,CAAC;gBACtC,MAAM,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;aACpE;oBAAS;gBACR,IAAI,CAAC,OAAO,EAAE,CAAC;aAChB;QACH,CAAC;KAAA;CACF,CAAA;AA3GC;IADC,YAAI;wCAKJ;AAGD;IADC,YAAI;iDAeJ;AAED;IADC,YAAI;+CAMJ;AAED;IADC,YAAI;qDASJ;AAGD;IADC,YAAI;4CAKJ;AAGD;IADC,YAAI;kDAYJ;AAGD;IADC,YAAI;mDAQJ;AAGD;IADC,YAAI;+CAWJ;AAGD;IADC,YAAI;uDAMJ;AAGD;IADC,YAAI;kDAcJ;AArIG,UAAU;IADf,aAAK;GACA,UAAU,CAsIf"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { Ident } from "../models/ident";
|
|
2
|
+
import { User } from "../models/user";
|
|
3
|
+
import { Service, ServiceParameters } from "./service";
|
|
4
|
+
/**
|
|
5
|
+
* Define a service that can notify a user based on his info
|
|
6
|
+
* It can use email or SMS or any other media
|
|
7
|
+
*/
|
|
8
|
+
export interface NotificationService {
|
|
9
|
+
/**
|
|
10
|
+
* Check if this type of notification is available
|
|
11
|
+
*/
|
|
12
|
+
hasNotification(notification: string): Promise<boolean>;
|
|
13
|
+
/**
|
|
14
|
+
* Check if the service can deliver notification to this user
|
|
15
|
+
* @param user
|
|
16
|
+
*/
|
|
17
|
+
handleNotificationFor(userOrIdent: User | Ident): Promise<boolean>;
|
|
18
|
+
/**
|
|
19
|
+
* Send the notification to the user
|
|
20
|
+
* @param user
|
|
21
|
+
* @param notification
|
|
22
|
+
* @param replacements
|
|
23
|
+
*/
|
|
24
|
+
sendNotification(user: User | Ident, notification: string, replacements: any): Promise<void>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Parameters for multi notification service
|
|
28
|
+
*/
|
|
29
|
+
export declare class MultiNotificationParameters extends ServiceParameters {
|
|
30
|
+
/**
|
|
31
|
+
* Notification service that will send
|
|
32
|
+
* The order of the array is important if multiple is false
|
|
33
|
+
* When multiple is `false` the first available NotificationService will
|
|
34
|
+
* be used, otherwise every available NotificationService will be used
|
|
35
|
+
*/
|
|
36
|
+
senders: string[];
|
|
37
|
+
/**
|
|
38
|
+
* Define if it sends one or several notification per user
|
|
39
|
+
* @default false
|
|
40
|
+
*/
|
|
41
|
+
multiple?: boolean;
|
|
42
|
+
/**
|
|
43
|
+
* @override
|
|
44
|
+
*/
|
|
45
|
+
constructor(params: any);
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Allow an aggregation of Notification to send via multiple media
|
|
49
|
+
* like SMS and Email
|
|
50
|
+
*/
|
|
51
|
+
export default class MultiNotificationService<T extends MultiNotificationParameters = MultiNotificationParameters> extends Service<T> implements NotificationService {
|
|
52
|
+
senders: NotificationService[];
|
|
53
|
+
/**
|
|
54
|
+
* @override
|
|
55
|
+
*/
|
|
56
|
+
loadParameters(params: any): MultiNotificationParameters;
|
|
57
|
+
/**
|
|
58
|
+
* @override
|
|
59
|
+
*/
|
|
60
|
+
resolve(): void;
|
|
61
|
+
/**
|
|
62
|
+
* @override
|
|
63
|
+
*/
|
|
64
|
+
sendNotification(user: User | Ident, notification: string, replacements: any): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* @override
|
|
67
|
+
*/
|
|
68
|
+
handleNotificationFor(user: User | Ident): Promise<boolean>;
|
|
69
|
+
/**
|
|
70
|
+
* @override
|
|
71
|
+
*/
|
|
72
|
+
hasNotification(notification: string): Promise<boolean>;
|
|
73
|
+
}
|
|
74
|
+
export { MultiNotificationService };
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.MultiNotificationService = exports.MultiNotificationParameters = void 0;
|
|
13
|
+
const service_1 = require("./service");
|
|
14
|
+
/**
|
|
15
|
+
* Parameters for multi notification service
|
|
16
|
+
*/
|
|
17
|
+
class MultiNotificationParameters extends service_1.ServiceParameters {
|
|
18
|
+
/**
|
|
19
|
+
* @override
|
|
20
|
+
*/
|
|
21
|
+
constructor(params) {
|
|
22
|
+
var _a;
|
|
23
|
+
super(params);
|
|
24
|
+
(_a = this.senders) !== null && _a !== void 0 ? _a : (this.senders = []);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
exports.MultiNotificationParameters = MultiNotificationParameters;
|
|
28
|
+
/**
|
|
29
|
+
* Allow an aggregation of Notification to send via multiple media
|
|
30
|
+
* like SMS and Email
|
|
31
|
+
*/
|
|
32
|
+
class MultiNotificationService extends service_1.Service {
|
|
33
|
+
/**
|
|
34
|
+
* @override
|
|
35
|
+
*/
|
|
36
|
+
loadParameters(params) {
|
|
37
|
+
return new MultiNotificationParameters(params);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* @override
|
|
41
|
+
*/
|
|
42
|
+
resolve() {
|
|
43
|
+
this.senders = this.parameters.senders.map(s => {
|
|
44
|
+
let service = this.getService(s);
|
|
45
|
+
if (!service) {
|
|
46
|
+
throw new Error(`Unknown service '${s}'`);
|
|
47
|
+
}
|
|
48
|
+
return service;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* @override
|
|
53
|
+
*/
|
|
54
|
+
sendNotification(user, notification, replacements) {
|
|
55
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
56
|
+
const selectedSenders = (yield Promise.all(this.senders.map((s) => __awaiter(this, void 0, void 0, function* () {
|
|
57
|
+
if ((yield s.hasNotification(notification)) && (yield s.handleNotificationFor(user))) {
|
|
58
|
+
return s;
|
|
59
|
+
}
|
|
60
|
+
})))).filter(s => s !== undefined);
|
|
61
|
+
if (!selectedSenders.length) {
|
|
62
|
+
return;
|
|
63
|
+
}
|
|
64
|
+
if (!this.parameters.multiple) {
|
|
65
|
+
return selectedSenders.shift().sendNotification(user, notification, replacements);
|
|
66
|
+
}
|
|
67
|
+
yield Promise.all(selectedSenders.map(s => s.sendNotification(user, notification, replacements)));
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* @override
|
|
72
|
+
*/
|
|
73
|
+
handleNotificationFor(user) {
|
|
74
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
75
|
+
return (yield Promise.all(this.senders.map(s => s.handleNotificationFor(user)))).some(s => s);
|
|
76
|
+
});
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* @override
|
|
80
|
+
*/
|
|
81
|
+
hasNotification(notification) {
|
|
82
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
83
|
+
return (yield Promise.all(this.senders.map(s => s.hasNotification(notification)))).some(s => s);
|
|
84
|
+
});
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
exports.default = MultiNotificationService;
|
|
88
|
+
exports.MultiNotificationService = MultiNotificationService;
|
|
89
|
+
//# sourceMappingURL=notificationservice.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notificationservice.js","sourceRoot":"","sources":["../../src/services/notificationservice.ts"],"names":[],"mappings":";;;;;;;;;;;;AAEA,uCAAuD;AAyBvD;;GAEG;AACH,MAAa,2BAA4B,SAAQ,2BAAiB;IAchE;;OAEG;IACH,YAAY,MAAW;;QACrB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,MAAA,IAAI,CAAC,OAAO,oCAAZ,IAAI,CAAC,OAAO,GAAK,EAAE,EAAC;IACtB,CAAC;CACF;AArBD,kEAqBC;AAED;;;GAGG;AACH,MAAqB,wBACnB,SAAQ,iBAAU;IAKlB;;OAEG;IACH,cAAc,CAAC,MAAW;QACxB,OAAO,IAAI,2BAA2B,CAAC,MAAM,CAAC,CAAC;IACjD,CAAC;IAED;;OAEG;IACH,OAAO;QACL,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;YAC7C,IAAI,OAAO,GAAkC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAE,CAAC;YACjE,IAAI,CAAC,OAAO,EAAE;gBACZ,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,GAAG,CAAC,CAAC;aAC3C;YACD,OAAO,OAAO,CAAC;QACjB,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACG,gBAAgB,CAAC,IAAkB,EAAE,YAAoB,EAAE,YAAiB;;YAChF,MAAM,eAAe,GAAG,CACtB,MAAM,OAAO,CAAC,GAAG,CACf,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAM,CAAC,EAAC,EAAE;gBACzB,IAAI,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE;oBACpF,OAAO,CAAC,CAAC;iBACV;YACH,CAAC,CAAA,CAAC,CACH,CACF,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;YAC/B,IAAI,CAAC,eAAe,CAAC,MAAM,EAAE;gBAC3B,OAAO;aACR;YACD,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,EAAE;gBAC7B,OAAO,eAAe,CAAC,KAAK,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC;aACnF;YACD,MAAM,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;QACpG,CAAC;KAAA;IAED;;OAEG;IACG,qBAAqB,CAAC,IAAkB;;YAC5C,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChG,CAAC;KAAA;IAED;;OAEG;IACG,eAAe,CAAC,YAAoB;;YACxC,OAAO,CAAC,MAAM,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAClG,CAAC;KAAA;CACF;AA7DD,2CA6DC;AAEQ,4DAAwB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|