@webiny/api-mailer 6.3.0 → 6.4.0-beta.0
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/constants.js +2 -1
- package/constants.js.map +1 -1
- package/domain/CodeMailerSettings/abstractions.js +2 -1
- package/domain/CodeMailerSettings/abstractions.js.map +1 -1
- package/domain/MailTransport/abstractions.js +4 -3
- package/domain/MailTransport/abstractions.js.map +1 -1
- package/domain/MailerService/abstractions.js +2 -1
- package/domain/MailerService/abstractions.js.map +1 -1
- package/domain/MailerService/errors.js +22 -24
- package/domain/MailerService/errors.js.map +1 -1
- package/domain/errors.js +40 -44
- package/domain/errors.js.map +1 -1
- package/exports/api/mailer.js +3 -5
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.js +14 -13
- package/features/CodeMailerSettings/CodeMailerSettingsImpl.js.map +1 -1
- package/features/CodeMailerSettings/feature.js +6 -5
- package/features/CodeMailerSettings/feature.js.map +1 -1
- package/features/DummyTransport/DummyMailTransport.js +11 -9
- package/features/DummyTransport/DummyMailTransport.js.map +1 -1
- package/features/DummyTransport/DummyMailTransportFactory.js +10 -7
- package/features/DummyTransport/DummyMailTransportFactory.js.map +1 -1
- package/features/DummyTransport/feature.js +6 -5
- package/features/DummyTransport/feature.js.map +1 -1
- package/features/GetSettings/GetSettingsRepository.js +41 -45
- package/features/GetSettings/GetSettingsRepository.js.map +1 -1
- package/features/GetSettings/GetSettingsUseCase.js +13 -10
- package/features/GetSettings/GetSettingsUseCase.js.map +1 -1
- package/features/GetSettings/abstractions.js +3 -2
- package/features/GetSettings/abstractions.js.map +1 -1
- package/features/GetSettings/feature.js +7 -6
- package/features/GetSettings/feature.js.map +1 -1
- package/features/GetSettings/index.js +1 -3
- package/features/MailerService/ActiveTransport.js +18 -14
- package/features/MailerService/ActiveTransport.js.map +1 -1
- package/features/MailerService/MailerService.js +38 -42
- package/features/MailerService/MailerService.js.map +1 -1
- package/features/MailerService/feature.js +7 -6
- package/features/MailerService/feature.js.map +1 -1
- package/features/SaveSettings/SaveSettingsRepository.js +29 -45
- package/features/SaveSettings/SaveSettingsRepository.js.map +1 -1
- package/features/SaveSettings/SaveSettingsUseCase.js +38 -56
- package/features/SaveSettings/SaveSettingsUseCase.js.map +1 -1
- package/features/SaveSettings/abstractions.js +5 -17
- package/features/SaveSettings/abstractions.js.map +1 -1
- package/features/SaveSettings/events.js +16 -11
- package/features/SaveSettings/events.js.map +1 -1
- package/features/SaveSettings/feature.js +7 -6
- package/features/SaveSettings/feature.js.map +1 -1
- package/features/SaveSettings/index.js +1 -3
- package/features/SaveSettings/validation.d.ts +1 -1
- package/features/SaveSettings/validation.js +11 -14
- package/features/SaveSettings/validation.js.map +1 -1
- package/features/SendMail/SendMailUseCase.js +40 -47
- package/features/SendMail/SendMailUseCase.js.map +1 -1
- package/features/SendMail/abstractions.js +5 -8
- package/features/SendMail/abstractions.js.map +1 -1
- package/features/SendMail/events.js +23 -16
- package/features/SendMail/events.js.map +1 -1
- package/features/SendMail/feature.js +6 -5
- package/features/SendMail/feature.js.map +1 -1
- package/features/SendMail/index.js +1 -3
- package/features/SmtpTransport/SmtpConfig.js +20 -24
- package/features/SmtpTransport/SmtpConfig.js.map +1 -1
- package/features/SmtpTransport/SmtpMailTransport.js +47 -61
- package/features/SmtpTransport/SmtpMailTransport.js.map +1 -1
- package/features/SmtpTransport/SmtpMailTransportFactory.js +10 -7
- package/features/SmtpTransport/SmtpMailTransportFactory.js.map +1 -1
- package/features/SmtpTransport/feature.js +6 -5
- package/features/SmtpTransport/feature.js.map +1 -1
- package/graphql/settings.js +54 -74
- package/graphql/settings.js.map +1 -1
- package/index.js +11 -15
- package/index.js.map +1 -1
- package/package.json +17 -17
- package/types.js +0 -3
- package/utils/isMailboxAddress.js +3 -10
- package/utils/isMailboxAddress.js.map +1 -1
- package/exports/api/mailer.js.map +0 -1
- package/features/GetSettings/index.js.map +0 -1
- package/features/SaveSettings/index.js.map +0 -1
- package/features/SendMail/index.js.map +0 -1
- package/types.js.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/SmtpTransport/SmtpMailTransport.js","sources":["../../../src/features/SmtpTransport/SmtpMailTransport.ts"],"sourcesContent":["import type { Transporter } from \"nodemailer\";\nimport nodemailer from \"nodemailer\";\nimport type SMTPTransport from \"nodemailer/lib/smtp-transport\";\nimport { MailTransport } from \"~/domain/MailTransport/abstractions.js\";\n\nexport class SmtpMailTransport implements MailTransport.Interface {\n public readonly name = \"Mailer/SmtpTransport\";\n private readonly transporter: Transporter<SMTPTransport.SentMessageInfo>;\n\n constructor(config: SMTPTransport.Options) {\n this.transporter = nodemailer.createTransport(config);\n }\n\n async send(params: MailTransport.SendParams) {\n const { replyTo, text, html, to, bcc, cc, from, subject } = params;\n\n try {\n const result = await this.transporter.sendMail({\n replyTo,\n bcc,\n cc,\n from,\n text,\n html,\n to,\n subject\n });\n\n if (result.messageId) {\n return {\n result: result.response,\n error: null\n };\n }\n\n return {\n result: null,\n error: {\n message:\n \"nodemailer.sendMail does not have a messageId in the result. Something went wrong...\",\n code: \"MAILER_ERROR\",\n data: {\n ...result\n }\n }\n };\n } catch (ex: any) {\n // Allow-list specific nodemailer/SMTP error fields. Spreading `ex`\n // or `ex.data` blindly would risk surfacing the transporter's auth\n // config (or anything else a future nodemailer version stamps onto\n // its errors) in error responses.\n return {\n result: null,\n error: {\n message: ex.message,\n code: ex.code,\n data: {\n ...params,\n command: ex.command,\n response: ex.response,\n responseCode: ex.responseCode\n }\n }\n };\n }\n }\n}\n"],"names":["SmtpMailTransport","config","nodemailer","params","replyTo","text","html","to","bcc","cc","from","subject","result","ex"],"mappings":";AAKO,MAAMA;IAIT,YAAYC,MAA6B,CAAE;aAH3B,IAAI,GAAG;QAInB,IAAI,CAAC,WAAW,GAAGC,WAAW,eAAe,CAACD;IAClD;IAEA,MAAM,KAAKE,MAAgC,EAAE;QACzC,MAAM,EAAEC,OAAO,EAAEC,IAAI,EAAEC,IAAI,EAAEC,EAAE,EAAEC,GAAG,EAAEC,EAAE,EAAEC,IAAI,EAAEC,OAAO,EAAE,GAAGR;QAE5D,IAAI;YACA,MAAMS,SAAS,MAAM,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC;gBAC3CR;gBACAI;gBACAC;gBACAC;gBACAL;gBACAC;gBACAC;gBACAI;YACJ;YAEA,IAAIC,OAAO,SAAS,EAChB,OAAO;gBACH,QAAQA,OAAO,QAAQ;gBACvB,OAAO;YACX;YAGJ,OAAO;gBACH,QAAQ;gBACR,OAAO;oBACH,SACI;oBACJ,MAAM;oBACN,MAAM;wBACF,GAAGA,MAAM;oBACb;gBACJ;YACJ;QACJ,EAAE,OAAOC,IAAS;YAKd,OAAO;gBACH,QAAQ;gBACR,OAAO;oBACH,SAASA,GAAG,OAAO;oBACnB,MAAMA,GAAG,IAAI;oBACb,MAAM;wBACF,GAAGV,MAAM;wBACT,SAASU,GAAG,OAAO;wBACnB,UAAUA,GAAG,QAAQ;wBACrB,cAAcA,GAAG,YAAY;oBACjC;gBACJ;YACJ;QACJ;IACJ;AACJ"}
|
|
@@ -2,14 +2,17 @@ import { MailTransportFactory } from "../../domain/MailTransport/abstractions.js
|
|
|
2
2
|
import { SmtpMailTransport } from "./SmtpMailTransport.js";
|
|
3
3
|
import { SmtpConfig } from "./SmtpConfig.js";
|
|
4
4
|
class SmtpMailTransportFactoryImpl {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
5
|
+
async createTransport(settings) {
|
|
6
|
+
return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));
|
|
7
|
+
}
|
|
8
|
+
constructor(){
|
|
9
|
+
this.name = "Mailer/SmtpTransport";
|
|
10
|
+
}
|
|
9
11
|
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
const SmtpMailTransportFactory = MailTransportFactory.createImplementation({
|
|
13
|
+
implementation: SmtpMailTransportFactoryImpl,
|
|
14
|
+
dependencies: []
|
|
13
15
|
});
|
|
16
|
+
export { SmtpMailTransportFactory };
|
|
14
17
|
|
|
15
18
|
//# sourceMappingURL=SmtpMailTransportFactory.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/SmtpTransport/SmtpMailTransportFactory.js","sources":["../../../src/features/SmtpTransport/SmtpMailTransportFactory.ts"],"sourcesContent":["import { MailTransportFactory } from \"~/domain/MailTransport/abstractions.js\";\nimport type { TransportSettings } from \"~/types.js\";\nimport { SmtpMailTransport } from \"~/features/SmtpTransport/SmtpMailTransport.js\";\nimport { SmtpConfig } from \"~/features/SmtpTransport/SmtpConfig.js\";\n\nclass SmtpMailTransportFactoryImpl implements MailTransportFactory.Interface {\n public readonly name = \"Mailer/SmtpTransport\";\n\n async createTransport(settings: TransportSettings): MailTransportFactory.Return {\n return new SmtpMailTransport(SmtpConfig.fromTransportSettings(settings));\n }\n}\n\nexport const SmtpMailTransportFactory = MailTransportFactory.createImplementation({\n implementation: SmtpMailTransportFactoryImpl,\n dependencies: []\n});\n"],"names":["SmtpMailTransportFactoryImpl","settings","SmtpMailTransport","SmtpConfig","SmtpMailTransportFactory","MailTransportFactory"],"mappings":";;;AAKA,MAAMA;IAGF,MAAM,gBAAgBC,QAA2B,EAA+B;QAC5E,OAAO,IAAIC,kBAAkBC,WAAW,qBAAqB,CAACF;IAClE;;aAJgB,IAAI,GAAG;;AAK3B;AAEO,MAAMG,2BAA2BC,qBAAqB,oBAAoB,CAAC;IAC9E,gBAAgBL;IAChB,cAAc,EAAE;AACpB"}
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { createFeature } from "@webiny/feature/api";
|
|
2
2
|
import { SmtpMailTransportFactory } from "./SmtpMailTransportFactory.js";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const SmtpTransportFeature = createFeature({
|
|
4
|
+
name: "SmtpTransport",
|
|
5
|
+
register (container) {
|
|
6
|
+
container.register(SmtpMailTransportFactory).inSingletonScope();
|
|
7
|
+
}
|
|
8
8
|
});
|
|
9
|
+
export { SmtpTransportFeature };
|
|
9
10
|
|
|
10
11
|
//# sourceMappingURL=feature.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"features/SmtpTransport/feature.js","sources":["../../../src/features/SmtpTransport/feature.ts"],"sourcesContent":["import { createFeature } from \"@webiny/feature/api\";\nimport { SmtpMailTransportFactory } from \"./SmtpMailTransportFactory.js\";\n\nexport const SmtpTransportFeature = createFeature({\n name: \"SmtpTransport\",\n register(container) {\n container.register(SmtpMailTransportFactory).inSingletonScope();\n }\n});\n"],"names":["SmtpTransportFeature","createFeature","container","SmtpMailTransportFactory"],"mappings":";;AAGO,MAAMA,uBAAuBC,cAAc;IAC9C,MAAM;IACN,UAASC,SAAS;QACdA,UAAU,QAAQ,CAACC,0BAA0B,gBAAgB;IACjE;AACJ"}
|
package/graphql/settings.js
CHANGED
|
@@ -2,30 +2,17 @@ import { ErrorResponse, GraphQLSchemaPlugin } from "@webiny/handler-graphql";
|
|
|
2
2
|
import { GetSettingsUseCase } from "../features/GetSettings/abstractions.js";
|
|
3
3
|
import { SaveSettingsUseCase } from "../features/SaveSettings/abstractions.js";
|
|
4
4
|
import { ActiveTransport } from "../domain/MailTransport/abstractions.js";
|
|
5
|
-
const emptyResolver = ()
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (!settings) {
|
|
14
|
-
return null;
|
|
15
|
-
}
|
|
16
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
17
|
-
const {
|
|
18
|
-
password: _password,
|
|
19
|
-
...publicSettings
|
|
20
|
-
} = settings;
|
|
21
|
-
return {
|
|
22
|
-
...publicSettings,
|
|
23
|
-
source
|
|
24
|
-
};
|
|
5
|
+
const emptyResolver = ()=>({});
|
|
6
|
+
const toPublicSettings = (settings, source)=>{
|
|
7
|
+
if (!settings) return null;
|
|
8
|
+
const { password: _password, ...publicSettings } = settings;
|
|
9
|
+
return {
|
|
10
|
+
...publicSettings,
|
|
11
|
+
source
|
|
12
|
+
};
|
|
25
13
|
};
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
typeDefs: `
|
|
14
|
+
const createSettingsGraphQL = ()=>new GraphQLSchemaPlugin({
|
|
15
|
+
typeDefs: `
|
|
29
16
|
type MailerTransportSettingsError {
|
|
30
17
|
message: String!
|
|
31
18
|
code: String
|
|
@@ -70,58 +57,51 @@ export const createSettingsGraphQL = () => {
|
|
|
70
57
|
mailer: MailerMutation
|
|
71
58
|
}
|
|
72
59
|
`,
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
60
|
+
resolvers: {
|
|
61
|
+
Query: {
|
|
62
|
+
mailer: emptyResolver
|
|
63
|
+
},
|
|
64
|
+
MailerQuery: {
|
|
65
|
+
getSettings: async (_, __, context)=>{
|
|
66
|
+
try {
|
|
67
|
+
const activeTransport = context.container.resolve(ActiveTransport);
|
|
68
|
+
const transportName = activeTransport.name();
|
|
69
|
+
if (!transportName) return {
|
|
70
|
+
data: null,
|
|
71
|
+
error: null
|
|
72
|
+
};
|
|
73
|
+
const getSettings = context.container.resolve(GetSettingsUseCase);
|
|
74
|
+
const result = await getSettings.execute(transportName);
|
|
75
|
+
const { settings, source } = result.value;
|
|
76
|
+
return {
|
|
77
|
+
data: toPublicSettings(settings, source),
|
|
78
|
+
error: null
|
|
79
|
+
};
|
|
80
|
+
} catch (ex) {
|
|
81
|
+
return new ErrorResponse(ex);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
},
|
|
85
|
+
Mutation: {
|
|
86
|
+
mailer: emptyResolver
|
|
87
|
+
},
|
|
88
|
+
MailerMutation: {
|
|
89
|
+
saveSettings: async (_, args, context)=>{
|
|
90
|
+
try {
|
|
91
|
+
const saveSettings = context.container.resolve(SaveSettingsUseCase);
|
|
92
|
+
const result = await saveSettings.execute(args.data);
|
|
93
|
+
if (result.isFail()) return new ErrorResponse(result.error);
|
|
94
|
+
return {
|
|
95
|
+
data: toPublicSettings(result.value, "storage"),
|
|
96
|
+
error: null
|
|
97
|
+
};
|
|
98
|
+
} catch (ex) {
|
|
99
|
+
return new ErrorResponse(ex);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
113
102
|
}
|
|
114
|
-
return {
|
|
115
|
-
data: toPublicSettings(result.value, "storage"),
|
|
116
|
-
error: null
|
|
117
|
-
};
|
|
118
|
-
} catch (ex) {
|
|
119
|
-
return new ErrorResponse(ex);
|
|
120
|
-
}
|
|
121
103
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
});
|
|
125
|
-
};
|
|
104
|
+
});
|
|
105
|
+
export { createSettingsGraphQL };
|
|
126
106
|
|
|
127
107
|
//# sourceMappingURL=settings.js.map
|
package/graphql/settings.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"graphql/settings.js","sources":["../../src/graphql/settings.ts"],"sourcesContent":["import { ErrorResponse, GraphQLSchemaPlugin } from \"@webiny/handler-graphql\";\nimport { GetSettingsUseCase } from \"~/features/GetSettings/abstractions.js\";\nimport { SaveSettingsUseCase } from \"~/features/SaveSettings/abstractions.js\";\nimport { ActiveTransport } from \"~/domain/MailTransport/abstractions.js\";\nimport type { MailerSettingsSource } from \"~/features/GetSettings/abstractions.js\";\nimport type { Context } from \"@webiny/api/types.js\";\nimport type { TransportSettings } from \"~/types.js\";\n\nconst emptyResolver = () => ({});\n\n// Strip `password` before the settings leave the server and tack on `source`\n// so the admin UI can branch on code-vs-storage. Accepts both the full\n// `TransportSettings` (from getSettings) and the already-stripped\n// `Omit<TransportSettings, \"password\">` (from saveSettings) — defense in depth\n// even when the input type carries no password to begin with.\nconst toPublicSettings = (\n settings: TransportSettings | Omit<TransportSettings, \"password\"> | null,\n source: MailerSettingsSource\n): (Omit<TransportSettings, \"password\"> & { source: MailerSettingsSource }) | null => {\n if (!settings) {\n return null;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { password: _password, ...publicSettings } = settings as TransportSettings;\n return { ...publicSettings, source };\n};\n\nexport const createSettingsGraphQL = () => {\n return new GraphQLSchemaPlugin<Context>({\n typeDefs: `\n type MailerTransportSettingsError {\n message: String!\n code: String\n data: JSON\n }\n\n type MailerTransportSettings {\n host: String\n port: Number\n user: String\n from: String\n replyTo: String\n source: String\n }\n\n type MailerTransportSettingsResponse {\n data: MailerTransportSettings\n error: MailerTransportSettingsError\n }\n\n type MailerQuery {\n getSettings: MailerTransportSettingsResponse!\n }\n\n input MailerTransportSettingsInput {\n host: String!\n port: Number\n user: String!\n password: String\n from: String!\n replyTo: String\n }\n\n type MailerMutation {\n saveSettings(data: MailerTransportSettingsInput!): MailerTransportSettingsResponse!\n }\n\n extend type Query {\n mailer: MailerQuery\n }\n extend type Mutation {\n mailer: MailerMutation\n }\n `,\n resolvers: {\n Query: {\n mailer: emptyResolver\n },\n MailerQuery: {\n getSettings: async (_, __, context) => {\n try {\n const activeTransport = context.container.resolve(ActiveTransport);\n const transportName = activeTransport.name();\n\n if (!transportName) {\n return { data: null, error: null };\n }\n\n const getSettings = context.container.resolve(GetSettingsUseCase);\n const result = await getSettings.execute(transportName);\n\n const { settings, source } = result.value;\n\n return {\n data: toPublicSettings(settings, source),\n error: null\n };\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n },\n Mutation: {\n mailer: emptyResolver\n },\n MailerMutation: {\n saveSettings: async (_, args: any, context) => {\n try {\n const saveSettings = context.container.resolve(SaveSettingsUseCase);\n const result = await saveSettings.execute(args.data);\n\n if (result.isFail()) {\n return new ErrorResponse(result.error);\n }\n\n return {\n data: toPublicSettings(result.value, \"storage\"),\n error: null\n };\n } catch (ex) {\n return new ErrorResponse(ex);\n }\n }\n }\n }\n });\n};\n"],"names":["emptyResolver","toPublicSettings","settings","source","_password","publicSettings","createSettingsGraphQL","GraphQLSchemaPlugin","_","__","context","activeTransport","ActiveTransport","transportName","getSettings","GetSettingsUseCase","result","ex","ErrorResponse","args","saveSettings","SaveSettingsUseCase"],"mappings":";;;;AAQA,MAAMA,gBAAgB,IAAO,EAAC;AAO9B,MAAMC,mBAAmB,CACrBC,UACAC;IAEA,IAAI,CAACD,UACD,OAAO;IAGX,MAAM,EAAE,UAAUE,SAAS,EAAE,GAAGC,gBAAgB,GAAGH;IACnD,OAAO;QAAE,GAAGG,cAAc;QAAEF;IAAO;AACvC;AAEO,MAAMG,wBAAwB,IAC1B,IAAIC,oBAA6B;QACpC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;QA4CX,CAAC;QACD,WAAW;YACP,OAAO;gBACH,QAAQP;YACZ;YACA,aAAa;gBACT,aAAa,OAAOQ,GAAGC,IAAIC;oBACvB,IAAI;wBACA,MAAMC,kBAAkBD,QAAQ,SAAS,CAAC,OAAO,CAACE;wBAClD,MAAMC,gBAAgBF,gBAAgB,IAAI;wBAE1C,IAAI,CAACE,eACD,OAAO;4BAAE,MAAM;4BAAM,OAAO;wBAAK;wBAGrC,MAAMC,cAAcJ,QAAQ,SAAS,CAAC,OAAO,CAACK;wBAC9C,MAAMC,SAAS,MAAMF,YAAY,OAAO,CAACD;wBAEzC,MAAM,EAAEX,QAAQ,EAAEC,MAAM,EAAE,GAAGa,OAAO,KAAK;wBAEzC,OAAO;4BACH,MAAMf,iBAAiBC,UAAUC;4BACjC,OAAO;wBACX;oBACJ,EAAE,OAAOc,IAAI;wBACT,OAAO,IAAIC,cAAcD;oBAC7B;gBACJ;YACJ;YACA,UAAU;gBACN,QAAQjB;YACZ;YACA,gBAAgB;gBACZ,cAAc,OAAOQ,GAAGW,MAAWT;oBAC/B,IAAI;wBACA,MAAMU,eAAeV,QAAQ,SAAS,CAAC,OAAO,CAACW;wBAC/C,MAAML,SAAS,MAAMI,aAAa,OAAO,CAACD,KAAK,IAAI;wBAEnD,IAAIH,OAAO,MAAM,IACb,OAAO,IAAIE,cAAcF,OAAO,KAAK;wBAGzC,OAAO;4BACH,MAAMf,iBAAiBe,OAAO,KAAK,EAAE;4BACrC,OAAO;wBACX;oBACJ,EAAE,OAAOC,IAAI;wBACT,OAAO,IAAIC,cAAcD;oBAC7B;gBACJ;YACJ;QACJ;IACJ"}
|
package/index.js
CHANGED
|
@@ -7,21 +7,17 @@ import { SmtpTransportFeature } from "./features/SmtpTransport/feature.js";
|
|
|
7
7
|
import { MailerServiceFeature } from "./features/MailerService/feature.js";
|
|
8
8
|
import { SendMailFeature } from "./features/SendMail/feature.js";
|
|
9
9
|
import { createSettingsGraphQL } from "./graphql/settings.js";
|
|
10
|
+
const createMailerContext = ()=>createContextPlugin((context)=>{
|
|
11
|
+
CodeMailerSettingsFeature.register(context.container);
|
|
12
|
+
DummyTransportFeature.register(context.container);
|
|
13
|
+
SmtpTransportFeature.register(context.container);
|
|
14
|
+
GetSettingsFeature.register(context.container);
|
|
15
|
+
SaveSettingsFeature.register(context.container);
|
|
16
|
+
MailerServiceFeature.register(context.container);
|
|
17
|
+
SendMailFeature.register(context.container);
|
|
18
|
+
});
|
|
19
|
+
const createMailerGraphQL = ()=>createSettingsGraphQL();
|
|
10
20
|
export { MailerService } from "./domain/MailerService/abstractions.js";
|
|
11
|
-
export
|
|
12
|
-
return createContextPlugin(context => {
|
|
13
|
-
// Register all features.
|
|
14
|
-
CodeMailerSettingsFeature.register(context.container);
|
|
15
|
-
DummyTransportFeature.register(context.container);
|
|
16
|
-
SmtpTransportFeature.register(context.container);
|
|
17
|
-
GetSettingsFeature.register(context.container);
|
|
18
|
-
SaveSettingsFeature.register(context.container);
|
|
19
|
-
MailerServiceFeature.register(context.container);
|
|
20
|
-
SendMailFeature.register(context.container);
|
|
21
|
-
});
|
|
22
|
-
};
|
|
23
|
-
export const createMailerGraphQL = () => {
|
|
24
|
-
return createSettingsGraphQL();
|
|
25
|
-
};
|
|
21
|
+
export { createMailerContext, createMailerGraphQL };
|
|
26
22
|
|
|
27
23
|
//# sourceMappingURL=index.js.map
|
package/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../src/index.ts"],"sourcesContent":["import { createContextPlugin } from \"@webiny/api\";\nimport { CodeMailerSettingsFeature } from \"~/features/CodeMailerSettings/feature.js\";\nimport { GetSettingsFeature } from \"~/features/GetSettings/feature.js\";\nimport { SaveSettingsFeature } from \"~/features/SaveSettings/feature.js\";\nimport { DummyTransportFeature } from \"~/features/DummyTransport/feature.js\";\nimport { SmtpTransportFeature } from \"~/features/SmtpTransport/feature.js\";\nimport { MailerServiceFeature } from \"~/features/MailerService/feature.js\";\nimport { SendMailFeature } from \"~/features/SendMail/feature.js\";\nimport { createSettingsGraphQL } from \"~/graphql/settings.js\";\n\nexport { MailerService } from \"./domain/MailerService/abstractions.js\";\nexport type { IMailerService, IMailerServiceErrors } from \"./domain/MailerService/abstractions.js\";\n\nexport const createMailerContext = () => {\n return createContextPlugin(context => {\n // Register all features.\n CodeMailerSettingsFeature.register(context.container);\n DummyTransportFeature.register(context.container);\n SmtpTransportFeature.register(context.container);\n GetSettingsFeature.register(context.container);\n SaveSettingsFeature.register(context.container);\n MailerServiceFeature.register(context.container);\n SendMailFeature.register(context.container);\n });\n};\n\nexport const createMailerGraphQL = () => {\n return createSettingsGraphQL();\n};\n"],"names":["createMailerContext","createContextPlugin","context","CodeMailerSettingsFeature","DummyTransportFeature","SmtpTransportFeature","GetSettingsFeature","SaveSettingsFeature","MailerServiceFeature","SendMailFeature","createMailerGraphQL","createSettingsGraphQL"],"mappings":";;;;;;;;;AAaO,MAAMA,sBAAsB,IACxBC,oBAAoBC,CAAAA;QAEvBC,0BAA0B,QAAQ,CAACD,QAAQ,SAAS;QACpDE,sBAAsB,QAAQ,CAACF,QAAQ,SAAS;QAChDG,qBAAqB,QAAQ,CAACH,QAAQ,SAAS;QAC/CI,mBAAmB,QAAQ,CAACJ,QAAQ,SAAS;QAC7CK,oBAAoB,QAAQ,CAACL,QAAQ,SAAS;QAC9CM,qBAAqB,QAAQ,CAACN,QAAQ,SAAS;QAC/CO,gBAAgB,QAAQ,CAACP,QAAQ,SAAS;IAC9C;AAGG,MAAMQ,sBAAsB,IACxBC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@webiny/api-mailer",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0-beta.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"exports": {
|
|
6
6
|
".": "./index.js",
|
|
@@ -18,33 +18,33 @@
|
|
|
18
18
|
"description": "The API to send e-mails.",
|
|
19
19
|
"license": "MIT",
|
|
20
20
|
"dependencies": {
|
|
21
|
-
"@webiny/api": "6.
|
|
22
|
-
"@webiny/api-headless-cms": "6.
|
|
23
|
-
"@webiny/feature": "6.
|
|
24
|
-
"@webiny/handler-graphql": "6.
|
|
25
|
-
"@webiny/plugins": "6.
|
|
21
|
+
"@webiny/api": "6.4.0-beta.0",
|
|
22
|
+
"@webiny/api-headless-cms": "6.4.0-beta.0",
|
|
23
|
+
"@webiny/feature": "6.4.0-beta.0",
|
|
24
|
+
"@webiny/handler-graphql": "6.4.0-beta.0",
|
|
25
|
+
"@webiny/plugins": "6.4.0-beta.0",
|
|
26
26
|
"email-addresses": "5.0.0",
|
|
27
27
|
"nodemailer": "8.0.7",
|
|
28
|
-
"zod": "4.3
|
|
28
|
+
"zod": "4.4.3"
|
|
29
29
|
},
|
|
30
30
|
"devDependencies": {
|
|
31
31
|
"@types/nodemailer": "8.0.0",
|
|
32
|
-
"@webiny/api-core": "6.
|
|
33
|
-
"@webiny/build-tools": "6.
|
|
34
|
-
"@webiny/db-dynamodb": "6.
|
|
35
|
-
"@webiny/handler": "6.
|
|
36
|
-
"@webiny/handler-aws": "6.
|
|
37
|
-
"@webiny/handler-db": "6.
|
|
38
|
-
"@webiny/project-utils": "6.
|
|
39
|
-
"graphql": "16.
|
|
32
|
+
"@webiny/api-core": "6.4.0-beta.0",
|
|
33
|
+
"@webiny/build-tools": "6.4.0-beta.0",
|
|
34
|
+
"@webiny/db-dynamodb": "6.4.0-beta.0",
|
|
35
|
+
"@webiny/handler": "6.4.0-beta.0",
|
|
36
|
+
"@webiny/handler-aws": "6.4.0-beta.0",
|
|
37
|
+
"@webiny/handler-db": "6.4.0-beta.0",
|
|
38
|
+
"@webiny/project-utils": "6.4.0-beta.0",
|
|
39
|
+
"graphql": "16.14.0",
|
|
40
40
|
"jest-dynalite": "3.6.1",
|
|
41
41
|
"rimraf": "6.1.3",
|
|
42
42
|
"typescript": "6.0.3",
|
|
43
|
-
"vitest": "4.1.
|
|
43
|
+
"vitest": "4.1.6"
|
|
44
44
|
},
|
|
45
45
|
"publishConfig": {
|
|
46
46
|
"access": "public",
|
|
47
47
|
"directory": "dist"
|
|
48
48
|
},
|
|
49
|
-
"gitHead": "
|
|
49
|
+
"gitHead": "a545d7529828af07d08d49c3da1bcb967483b9ce"
|
|
50
50
|
}
|
package/types.js
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
* RFC 5322 mailbox validator. Accepts both addr-spec ("addr@domain") and
|
|
5
|
-
* name-addr ("Display Name <addr@domain>") forms — both are valid SMTP
|
|
6
|
-
* From / Reply-To inputs that nodemailer and most providers accept.
|
|
7
|
-
*/
|
|
8
|
-
export const isMailboxAddress = value => {
|
|
9
|
-
return emailAddresses.parseOneAddress(value) !== null;
|
|
10
|
-
};
|
|
1
|
+
import email_addresses from "email-addresses";
|
|
2
|
+
const isMailboxAddress = (value)=>null !== email_addresses.parseOneAddress(value);
|
|
3
|
+
export { isMailboxAddress };
|
|
11
4
|
|
|
12
5
|
//# sourceMappingURL=isMailboxAddress.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"file":"utils/isMailboxAddress.js","sources":["../../src/utils/isMailboxAddress.ts"],"sourcesContent":["import emailAddresses from \"email-addresses\";\n\n/**\n * RFC 5322 mailbox validator. Accepts both addr-spec (\"addr@domain\") and\n * name-addr (\"Display Name <addr@domain>\") forms — both are valid SMTP\n * From / Reply-To inputs that nodemailer and most providers accept.\n */\nexport const isMailboxAddress = (value: string): boolean => {\n return emailAddresses.parseOneAddress(value) !== null;\n};\n"],"names":["isMailboxAddress","value","emailAddresses"],"mappings":";AAOO,MAAMA,mBAAmB,CAACC,QACtBC,AAA0C,SAA1CA,gBAAAA,eAA8B,CAACD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["SendMailUseCase","MailSendErrorEventHandler","MailBeforeSendEventHandler","MailAfterSendEventHandler","GetSettingsUseCase","GetSettingsRepository","SaveSettingsUseCase","SaveSettingsRepository","MailerSettingsAfterSaveEventHandler","MailerSettingsBeforeSaveEventHandler","MailerService"],"sources":["mailer.ts"],"sourcesContent":["export {\n SendMailUseCase,\n MailSendErrorEventHandler,\n MailBeforeSendEventHandler,\n MailAfterSendEventHandler\n} from \"~/features/SendMail/index.js\";\nexport { GetSettingsUseCase, GetSettingsRepository } from \"~/features/GetSettings/index.js\";\nexport {\n SaveSettingsUseCase,\n SaveSettingsRepository,\n MailerSettingsAfterSaveEventHandler,\n MailerSettingsBeforeSaveEventHandler\n} from \"~/features/SaveSettings/index.js\";\nexport { MailerService } from \"~/domain/MailerService/abstractions.js\";\n"],"mappings":"AAAA,SACIA,eAAe,EACfC,yBAAyB,EACzBC,0BAA0B,EAC1BC,yBAAyB;AAE7B,SAASC,kBAAkB,EAAEC,qBAAqB;AAClD,SACIC,mBAAmB,EACnBC,sBAAsB,EACtBC,mCAAmC,EACnCC,oCAAoC;AAExC,SAASC,aAAa","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["GetSettingsUseCase","GetSettingsRepository"],"sources":["index.ts"],"sourcesContent":["export { GetSettingsUseCase, GetSettingsRepository } from \"./abstractions.js\";\n"],"mappings":"AAAA,SAASA,kBAAkB,EAAEC,qBAAqB","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["SaveSettingsUseCase","SaveSettingsRepository","MailerSettingsAfterSaveEventHandler","MailerSettingsBeforeSaveEventHandler"],"sources":["index.ts"],"sourcesContent":["export {\n SaveSettingsUseCase,\n SaveSettingsRepository,\n MailerSettingsAfterSaveEventHandler,\n MailerSettingsBeforeSaveEventHandler\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,mBAAmB,EACnBC,sBAAsB,EACtBC,mCAAmC,EACnCC,oCAAoC","ignoreList":[]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["SendMailUseCase","MailAfterSendEventHandler","MailBeforeSendEventHandler","MailSendErrorEventHandler"],"sources":["index.ts"],"sourcesContent":["export {\n SendMailUseCase,\n MailAfterSendEventHandler,\n MailBeforeSendEventHandler,\n MailSendErrorEventHandler\n} from \"./abstractions.js\";\n"],"mappings":"AAAA,SACIA,eAAe,EACfC,yBAAyB,EACzBC,0BAA0B,EAC1BC,yBAAyB","ignoreList":[]}
|
package/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":[],"sources":["types.ts"],"sourcesContent":["// TODO: place types into appropriate domain abstractions\n\n/**\n * Interface to implement the actual mailer.\n */\nexport interface TransportSendResponse<T = any> {\n result: T | null;\n error: {\n message: string;\n code: string;\n data?: {\n [key: string]: any;\n };\n } | null;\n}\n\ninterface TransportSendToData {\n to: string[];\n}\ninterface TransportSendCcData {\n cc: string[];\n}\ninterface TransportSendBccData {\n bcc: string[];\n}\n\ninterface BaseTransportSendData {\n to?: string[];\n cc?: string[];\n bcc?: string[];\n from?: string;\n subject: string;\n text?: string;\n html?: string;\n replyTo?: string;\n}\n\nexport type TransportSendData = BaseTransportSendData &\n (TransportSendToData | TransportSendBccData | TransportSendCcData);\n\nexport interface TransportSettings {\n host: string;\n port: number;\n user: string;\n password: string;\n from: string;\n replyTo?: string;\n}\n"],"mappings":"","ignoreList":[]}
|