@strapi/email 5.9.0 → 5.10.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.
Files changed (218) hide show
  1. package/dist/admin/chunks/Settings-D8WJjMq7.js +383 -0
  2. package/dist/admin/chunks/Settings-D8WJjMq7.js.map +1 -0
  3. package/dist/admin/chunks/Settings-DIQi_hxN.mjs +362 -0
  4. package/dist/admin/chunks/Settings-DIQi_hxN.mjs.map +1 -0
  5. package/dist/admin/chunks/ar-BDHMRt_b.js +6 -0
  6. package/dist/admin/chunks/ar-BDHMRt_b.js.map +1 -0
  7. package/dist/admin/chunks/ar-JWJKrFM-.mjs +4 -0
  8. package/dist/admin/chunks/ar-JWJKrFM-.mjs.map +1 -0
  9. package/dist/admin/chunks/cs-BZCMeXgq.mjs +4 -0
  10. package/dist/admin/chunks/cs-BZCMeXgq.mjs.map +1 -0
  11. package/dist/admin/chunks/cs-DrOn3eR2.js +6 -0
  12. package/dist/admin/chunks/cs-DrOn3eR2.js.map +1 -0
  13. package/dist/admin/chunks/de-BlqtkWR3.js +6 -0
  14. package/dist/admin/chunks/de-BlqtkWR3.js.map +1 -0
  15. package/dist/admin/chunks/de-CGlAhulB.mjs +4 -0
  16. package/dist/admin/chunks/de-CGlAhulB.mjs.map +1 -0
  17. package/dist/admin/chunks/dk-B5IuEReS.mjs +25 -0
  18. package/dist/admin/chunks/dk-B5IuEReS.mjs.map +1 -0
  19. package/dist/admin/chunks/dk-DW7WecjY.js +27 -0
  20. package/dist/admin/chunks/dk-DW7WecjY.js.map +1 -0
  21. package/dist/admin/chunks/en-DacnIsXb.js +30 -0
  22. package/dist/admin/chunks/en-DacnIsXb.js.map +1 -0
  23. package/dist/admin/chunks/en-Dxg2wKLN.mjs +27 -0
  24. package/dist/admin/chunks/en-Dxg2wKLN.mjs.map +1 -0
  25. package/dist/admin/chunks/es-DxWi6BKM.js +27 -0
  26. package/dist/admin/chunks/es-DxWi6BKM.js.map +1 -0
  27. package/dist/admin/chunks/es-fdc21M_E.mjs +25 -0
  28. package/dist/admin/chunks/es-fdc21M_E.mjs.map +1 -0
  29. package/dist/admin/chunks/fr-BsENAPSS.js +6 -0
  30. package/dist/admin/chunks/fr-BsENAPSS.js.map +1 -0
  31. package/dist/admin/chunks/fr-DZjvYp6C.mjs +4 -0
  32. package/dist/admin/chunks/fr-DZjvYp6C.mjs.map +1 -0
  33. package/dist/admin/chunks/id-BORUwKHm.js +6 -0
  34. package/dist/admin/chunks/id-BORUwKHm.js.map +1 -0
  35. package/dist/admin/chunks/id-C1eDxX9W.mjs +4 -0
  36. package/dist/admin/chunks/id-C1eDxX9W.mjs.map +1 -0
  37. package/dist/admin/chunks/index-HXXlrjit.js +108 -0
  38. package/dist/admin/chunks/index-HXXlrjit.js.map +1 -0
  39. package/dist/admin/chunks/index-f_JAHN1f.mjs +105 -0
  40. package/dist/admin/chunks/index-f_JAHN1f.mjs.map +1 -0
  41. package/dist/admin/chunks/it-DVlJ2EhA.mjs +4 -0
  42. package/dist/admin/chunks/it-DVlJ2EhA.mjs.map +1 -0
  43. package/dist/admin/chunks/it-eAGyIQ1x.js +6 -0
  44. package/dist/admin/chunks/it-eAGyIQ1x.js.map +1 -0
  45. package/dist/admin/chunks/ja-CVosbw2M.mjs +25 -0
  46. package/dist/admin/chunks/ja-CVosbw2M.mjs.map +1 -0
  47. package/dist/admin/chunks/ja-DdOPbVbe.js +27 -0
  48. package/dist/admin/chunks/ja-DdOPbVbe.js.map +1 -0
  49. package/dist/admin/chunks/ko-B8SR--vZ.mjs +25 -0
  50. package/dist/admin/chunks/ko-B8SR--vZ.mjs.map +1 -0
  51. package/dist/admin/chunks/ko-CaWqWfC8.js +27 -0
  52. package/dist/admin/chunks/ko-CaWqWfC8.js.map +1 -0
  53. package/dist/admin/chunks/ms-CrRuDILn.js +6 -0
  54. package/dist/admin/chunks/ms-CrRuDILn.js.map +1 -0
  55. package/dist/admin/chunks/ms-DLngEN2_.mjs +4 -0
  56. package/dist/admin/chunks/ms-DLngEN2_.mjs.map +1 -0
  57. package/dist/admin/chunks/nl-B6Q0VF48.mjs +4 -0
  58. package/dist/admin/chunks/nl-B6Q0VF48.mjs.map +1 -0
  59. package/dist/admin/chunks/nl-BMsBb10t.js +6 -0
  60. package/dist/admin/chunks/nl-BMsBb10t.js.map +1 -0
  61. package/dist/admin/chunks/pl-Bve39qfV.mjs +25 -0
  62. package/dist/admin/chunks/pl-Bve39qfV.mjs.map +1 -0
  63. package/dist/admin/chunks/pl-CO-R08qV.js +27 -0
  64. package/dist/admin/chunks/pl-CO-R08qV.js.map +1 -0
  65. package/dist/admin/chunks/pt-BR-CBzJhkyg.js +6 -0
  66. package/dist/admin/chunks/pt-BR-CBzJhkyg.js.map +1 -0
  67. package/dist/admin/chunks/pt-BR-DPqDE4wA.mjs +4 -0
  68. package/dist/admin/chunks/pt-BR-DPqDE4wA.mjs.map +1 -0
  69. package/dist/admin/chunks/pt-BzFac2P5.js +30 -0
  70. package/dist/admin/chunks/pt-BzFac2P5.js.map +1 -0
  71. package/dist/admin/chunks/pt-DLqF-Sb4.mjs +27 -0
  72. package/dist/admin/chunks/pt-DLqF-Sb4.mjs.map +1 -0
  73. package/dist/admin/chunks/ru-DnqOAZDX.js +6 -0
  74. package/dist/admin/chunks/ru-DnqOAZDX.js.map +1 -0
  75. package/dist/admin/chunks/ru-rmFYdvwh.mjs +4 -0
  76. package/dist/admin/chunks/ru-rmFYdvwh.mjs.map +1 -0
  77. package/dist/admin/chunks/sk-DDJmUHcx.mjs +4 -0
  78. package/dist/admin/chunks/sk-DDJmUHcx.mjs.map +1 -0
  79. package/dist/admin/chunks/sk-N47IGfwH.js +6 -0
  80. package/dist/admin/chunks/sk-N47IGfwH.js.map +1 -0
  81. package/dist/admin/chunks/th-BqTCSpUc.mjs +4 -0
  82. package/dist/admin/chunks/th-BqTCSpUc.mjs.map +1 -0
  83. package/dist/admin/chunks/th-OW3_QVEZ.js +6 -0
  84. package/dist/admin/chunks/th-OW3_QVEZ.js.map +1 -0
  85. package/dist/admin/chunks/tr-BmrcZCoj.mjs +27 -0
  86. package/dist/admin/chunks/tr-BmrcZCoj.mjs.map +1 -0
  87. package/dist/admin/chunks/tr-n7J_y4Bh.js +30 -0
  88. package/dist/admin/chunks/tr-n7J_y4Bh.js.map +1 -0
  89. package/dist/admin/chunks/uk-CQim5OiT.mjs +4 -0
  90. package/dist/admin/chunks/uk-CQim5OiT.mjs.map +1 -0
  91. package/dist/admin/chunks/uk-nM0yP_CK.js +6 -0
  92. package/dist/admin/chunks/uk-nM0yP_CK.js.map +1 -0
  93. package/dist/admin/chunks/vi-CO9gCtmD.mjs +4 -0
  94. package/dist/admin/chunks/vi-CO9gCtmD.mjs.map +1 -0
  95. package/dist/admin/chunks/vi-DjJBc-ms.js +6 -0
  96. package/dist/admin/chunks/vi-DjJBc-ms.js.map +1 -0
  97. package/dist/admin/chunks/zh-9wNbbqde.js +30 -0
  98. package/dist/admin/chunks/zh-9wNbbqde.js.map +1 -0
  99. package/dist/admin/chunks/zh-CZQ4DV5L.mjs +27 -0
  100. package/dist/admin/chunks/zh-CZQ4DV5L.mjs.map +1 -0
  101. package/dist/admin/chunks/zh-Hans-ChWc00HT.mjs +19 -0
  102. package/dist/admin/chunks/zh-Hans-ChWc00HT.mjs.map +1 -0
  103. package/dist/admin/chunks/zh-Hans-D0bb9tfC.js +22 -0
  104. package/dist/admin/chunks/zh-Hans-D0bb9tfC.js.map +1 -0
  105. package/dist/admin/index.js +6 -2
  106. package/dist/admin/index.js.map +1 -1
  107. package/dist/admin/index.mjs +1 -4
  108. package/dist/admin/index.mjs.map +1 -1
  109. package/dist/server/index.js +226 -180
  110. package/dist/server/index.js.map +1 -1
  111. package/dist/server/index.mjs +215 -173
  112. package/dist/server/index.mjs.map +1 -1
  113. package/dist/shared/types.d.ts +0 -1
  114. package/package.json +13 -10
  115. package/dist/_chunks/Settings-DKhINVfQ.mjs +0 -281
  116. package/dist/_chunks/Settings-DKhINVfQ.mjs.map +0 -1
  117. package/dist/_chunks/Settings-DzVN5TCM.js +0 -299
  118. package/dist/_chunks/Settings-DzVN5TCM.js.map +0 -1
  119. package/dist/_chunks/ar-Bf9XlLLo.mjs +0 -5
  120. package/dist/_chunks/ar-Bf9XlLLo.mjs.map +0 -1
  121. package/dist/_chunks/ar-C_tQu1XS.js +0 -5
  122. package/dist/_chunks/ar-C_tQu1XS.js.map +0 -1
  123. package/dist/_chunks/cs-B0QZJTah.mjs +0 -5
  124. package/dist/_chunks/cs-B0QZJTah.mjs.map +0 -1
  125. package/dist/_chunks/cs-CPKIUWLp.js +0 -5
  126. package/dist/_chunks/cs-CPKIUWLp.js.map +0 -1
  127. package/dist/_chunks/de-B9kiAC-s.mjs +0 -5
  128. package/dist/_chunks/de-B9kiAC-s.mjs.map +0 -1
  129. package/dist/_chunks/de-K6IYQk2d.js +0 -5
  130. package/dist/_chunks/de-K6IYQk2d.js.map +0 -1
  131. package/dist/_chunks/dk-31mOPYpI.js +0 -26
  132. package/dist/_chunks/dk-31mOPYpI.js.map +0 -1
  133. package/dist/_chunks/dk-DqrbgSkv.mjs +0 -26
  134. package/dist/_chunks/dk-DqrbgSkv.mjs.map +0 -1
  135. package/dist/_chunks/en-BCu4d6-o.js +0 -29
  136. package/dist/_chunks/en-BCu4d6-o.js.map +0 -1
  137. package/dist/_chunks/en-DF4KtAAC.mjs +0 -29
  138. package/dist/_chunks/en-DF4KtAAC.mjs.map +0 -1
  139. package/dist/_chunks/es-BNo7eLLJ.mjs +0 -26
  140. package/dist/_chunks/es-BNo7eLLJ.mjs.map +0 -1
  141. package/dist/_chunks/es-Dl2HVmwz.js +0 -26
  142. package/dist/_chunks/es-Dl2HVmwz.js.map +0 -1
  143. package/dist/_chunks/fr-C8Qw4iPZ.js +0 -5
  144. package/dist/_chunks/fr-C8Qw4iPZ.js.map +0 -1
  145. package/dist/_chunks/fr-hkSxFuzl.mjs +0 -5
  146. package/dist/_chunks/fr-hkSxFuzl.mjs.map +0 -1
  147. package/dist/_chunks/id-CHtAzAUz.mjs +0 -5
  148. package/dist/_chunks/id-CHtAzAUz.mjs.map +0 -1
  149. package/dist/_chunks/id-CvE5f0zz.js +0 -5
  150. package/dist/_chunks/id-CvE5f0zz.js.map +0 -1
  151. package/dist/_chunks/index-BcbwpIZL.js +0 -84
  152. package/dist/_chunks/index-BcbwpIZL.js.map +0 -1
  153. package/dist/_chunks/index-D0n2_0zm.mjs +0 -85
  154. package/dist/_chunks/index-D0n2_0zm.mjs.map +0 -1
  155. package/dist/_chunks/it-C7z82V3g.mjs +0 -5
  156. package/dist/_chunks/it-C7z82V3g.mjs.map +0 -1
  157. package/dist/_chunks/it-DYpuAHa5.js +0 -5
  158. package/dist/_chunks/it-DYpuAHa5.js.map +0 -1
  159. package/dist/_chunks/ja-CiekkoEN.mjs +0 -26
  160. package/dist/_chunks/ja-CiekkoEN.mjs.map +0 -1
  161. package/dist/_chunks/ja-PL3WilO7.js +0 -26
  162. package/dist/_chunks/ja-PL3WilO7.js.map +0 -1
  163. package/dist/_chunks/ko-CJBkZ375.mjs +0 -26
  164. package/dist/_chunks/ko-CJBkZ375.mjs.map +0 -1
  165. package/dist/_chunks/ko-CL2BB_w_.js +0 -26
  166. package/dist/_chunks/ko-CL2BB_w_.js.map +0 -1
  167. package/dist/_chunks/ms-BGlHkuJz.js +0 -5
  168. package/dist/_chunks/ms-BGlHkuJz.js.map +0 -1
  169. package/dist/_chunks/ms-C1wNkEQw.mjs +0 -5
  170. package/dist/_chunks/ms-C1wNkEQw.mjs.map +0 -1
  171. package/dist/_chunks/nl-BuofSsmb.js +0 -5
  172. package/dist/_chunks/nl-BuofSsmb.js.map +0 -1
  173. package/dist/_chunks/nl-C79CwB4e.mjs +0 -5
  174. package/dist/_chunks/nl-C79CwB4e.mjs.map +0 -1
  175. package/dist/_chunks/pl-DXcJCevg.mjs +0 -26
  176. package/dist/_chunks/pl-DXcJCevg.mjs.map +0 -1
  177. package/dist/_chunks/pl-DdtXf3SH.js +0 -26
  178. package/dist/_chunks/pl-DdtXf3SH.js.map +0 -1
  179. package/dist/_chunks/pt-BR-B_ii8U63.js +0 -5
  180. package/dist/_chunks/pt-BR-B_ii8U63.js.map +0 -1
  181. package/dist/_chunks/pt-BR-DjINUWGk.mjs +0 -5
  182. package/dist/_chunks/pt-BR-DjINUWGk.mjs.map +0 -1
  183. package/dist/_chunks/pt-CzRDvk6c.js +0 -29
  184. package/dist/_chunks/pt-CzRDvk6c.js.map +0 -1
  185. package/dist/_chunks/pt-DEVCt2mt.mjs +0 -29
  186. package/dist/_chunks/pt-DEVCt2mt.mjs.map +0 -1
  187. package/dist/_chunks/ru-C_7wBr9e.mjs +0 -5
  188. package/dist/_chunks/ru-C_7wBr9e.mjs.map +0 -1
  189. package/dist/_chunks/ru-Dc-rSPqb.js +0 -5
  190. package/dist/_chunks/ru-Dc-rSPqb.js.map +0 -1
  191. package/dist/_chunks/sk-Cnpb4YOK.js +0 -5
  192. package/dist/_chunks/sk-Cnpb4YOK.js.map +0 -1
  193. package/dist/_chunks/sk-i1gQKUBN.mjs +0 -5
  194. package/dist/_chunks/sk-i1gQKUBN.mjs.map +0 -1
  195. package/dist/_chunks/th-BXTLF08M.js +0 -5
  196. package/dist/_chunks/th-BXTLF08M.js.map +0 -1
  197. package/dist/_chunks/th-D-MxpWKr.mjs +0 -5
  198. package/dist/_chunks/th-D-MxpWKr.mjs.map +0 -1
  199. package/dist/_chunks/tr-BXu41MLY.mjs +0 -29
  200. package/dist/_chunks/tr-BXu41MLY.mjs.map +0 -1
  201. package/dist/_chunks/tr-DwBySNgJ.js +0 -29
  202. package/dist/_chunks/tr-DwBySNgJ.js.map +0 -1
  203. package/dist/_chunks/uk-C_1qrLRM.mjs +0 -5
  204. package/dist/_chunks/uk-C_1qrLRM.mjs.map +0 -1
  205. package/dist/_chunks/uk-CxIePjBD.js +0 -5
  206. package/dist/_chunks/uk-CxIePjBD.js.map +0 -1
  207. package/dist/_chunks/vi-B4uqmjm6.js +0 -5
  208. package/dist/_chunks/vi-B4uqmjm6.js.map +0 -1
  209. package/dist/_chunks/vi-BfZkgFxI.mjs +0 -5
  210. package/dist/_chunks/vi-BfZkgFxI.mjs.map +0 -1
  211. package/dist/_chunks/zh-BS-XJCSt.mjs +0 -29
  212. package/dist/_chunks/zh-BS-XJCSt.mjs.map +0 -1
  213. package/dist/_chunks/zh-DsMIjTgu.js +0 -29
  214. package/dist/_chunks/zh-DsMIjTgu.js.map +0 -1
  215. package/dist/_chunks/zh-Hans-BLEEaLoN.mjs +0 -21
  216. package/dist/_chunks/zh-Hans-BLEEaLoN.mjs.map +0 -1
  217. package/dist/_chunks/zh-Hans-CmL3sY9o.js +0 -21
  218. package/dist/_chunks/zh-Hans-CmL3sY9o.js.map +0 -1
@@ -1,191 +1,233 @@
1
- import * as _ from "lodash";
2
- import { objects, template, errors } from "@strapi/utils";
3
- import { pick } from "lodash/fp";
4
- const createProvider = (emailConfig) => {
5
- const providerName = emailConfig.provider.toLowerCase();
6
- let provider;
7
- let modulePath;
8
- try {
9
- modulePath = require.resolve(`@strapi/provider-email-${providerName}`);
10
- } catch (error) {
11
- if (error !== null && typeof error === "object" && "code" in error && error.code === "MODULE_NOT_FOUND") {
12
- modulePath = providerName;
13
- } else {
14
- throw error;
1
+ import * as _ from 'lodash';
2
+ import { objects, template, errors } from '@strapi/utils';
3
+ import { pick } from 'lodash/fp';
4
+
5
+ const createProvider = (emailConfig)=>{
6
+ const providerName = emailConfig.provider.toLowerCase();
7
+ let provider;
8
+ let modulePath;
9
+ try {
10
+ modulePath = require.resolve(`@strapi/provider-email-${providerName}`);
11
+ } catch (error) {
12
+ if (error !== null && typeof error === 'object' && 'code' in error && error.code === 'MODULE_NOT_FOUND') {
13
+ modulePath = providerName;
14
+ } else {
15
+ throw error;
16
+ }
15
17
  }
16
- }
17
- try {
18
- provider = require(modulePath);
19
- } catch (err) {
20
- throw new Error(`Could not load email provider "${providerName}".`);
21
- }
22
- return provider.init(emailConfig.providerOptions, emailConfig.settings);
23
- };
24
- const bootstrap = async ({ strapi: strapi2 }) => {
25
- const emailConfig = strapi2.config.get("plugin::email");
26
- strapi2.plugin("email").provider = createProvider(emailConfig);
27
- const actions = [
28
- {
29
- section: "settings",
30
- category: "email",
31
- displayName: "Access the Email Settings page",
32
- uid: "settings.read",
33
- pluginName: "email"
18
+ try {
19
+ provider = require(modulePath);
20
+ } catch (err) {
21
+ throw new Error(`Could not load email provider "${providerName}".`);
34
22
  }
35
- ];
36
- await strapi2.service("admin::permission").actionProvider.registerMany(actions);
23
+ return provider.init(emailConfig.providerOptions, emailConfig.settings);
37
24
  };
38
- const { createStrictInterpolationRegExp } = template;
39
- const getProviderSettings = () => strapi.config.get("plugin::email");
40
- const send = async (options) => strapi.plugin("email").provider.send(options);
41
- const sendTemplatedEmail = (emailOptions, emailTemplate, data) => {
42
- const attributes = ["subject", "text", "html"];
43
- const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));
44
- if (missingAttributes.length > 0) {
45
- throw new Error(
46
- `Following attributes are missing from your email template : ${missingAttributes.join(", ")}`
47
- );
48
- }
49
- const allowedInterpolationVariables = objects.keysDeep(data);
50
- const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, "g");
51
- const templatedAttributes = attributes.reduce(
52
- (compiled, attribute) => emailTemplate[attribute] ? Object.assign(compiled, {
53
- [attribute]: _.template(emailTemplate[attribute], {
54
- interpolate
55
- })(data)
56
- }) : compiled,
57
- {}
58
- );
59
- return strapi.plugin("email").provider.send({ ...emailOptions, ...templatedAttributes });
25
+ const bootstrap = async ({ strapi })=>{
26
+ const emailConfig = strapi.config.get('plugin::email');
27
+ strapi.plugin('email').provider = createProvider(emailConfig);
28
+ // Add permissions
29
+ const actions = [
30
+ {
31
+ section: 'settings',
32
+ category: 'email',
33
+ displayName: 'Access the Email Settings page',
34
+ uid: 'settings.read',
35
+ pluginName: 'email'
36
+ }
37
+ ];
38
+ await strapi.service('admin::permission').actionProvider.registerMany(actions);
60
39
  };
61
- const emailService = () => ({
62
- getProviderSettings,
63
- send,
64
- sendTemplatedEmail
65
- });
66
- const services = { email: emailService };
67
- const admin = {
68
- type: "admin",
69
- routes: [
70
- {
71
- method: "POST",
72
- path: "/",
73
- handler: "email.send",
74
- config: {
75
- policies: ["admin::isAuthenticatedAdmin"]
76
- }
77
- },
78
- {
79
- method: "POST",
80
- path: "/test",
81
- handler: "email.test",
82
- config: {
83
- policies: [
84
- "admin::isAuthenticatedAdmin",
85
- { name: "admin::hasPermissions", config: { actions: ["plugin::email.settings.read"] } }
86
- ]
87
- }
88
- },
89
- {
90
- method: "GET",
91
- path: "/settings",
92
- handler: "email.getSettings",
93
- config: {
94
- policies: [
95
- "admin::isAuthenticatedAdmin",
96
- { name: "admin::hasPermissions", config: { actions: ["plugin::email.settings.read"] } }
97
- ]
98
- }
40
+
41
+ const { createStrictInterpolationRegExp } = template;
42
+ const getProviderSettings = ()=>strapi.config.get('plugin::email');
43
+ const send = async (options)=>strapi.plugin('email').provider.send(options);
44
+ /**
45
+ * fill subject, text and html using lodash template
46
+ * @param {object} emailOptions - to, from and replyto...
47
+ * @param {object} emailTemplate - object containing attributes to fill
48
+ * @param {object} data - data used to fill the template
49
+ * @returns {{ subject, text, subject }}
50
+ */ const sendTemplatedEmail = (emailOptions, emailTemplate, data)=>{
51
+ const attributes = [
52
+ 'subject',
53
+ 'text',
54
+ 'html'
55
+ ];
56
+ const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));
57
+ if (missingAttributes.length > 0) {
58
+ throw new Error(`Following attributes are missing from your email template : ${missingAttributes.join(', ')}`);
99
59
  }
100
- ]
60
+ const allowedInterpolationVariables = objects.keysDeep(data);
61
+ const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');
62
+ const templatedAttributes = attributes.reduce((compiled, attribute)=>emailTemplate[attribute] ? Object.assign(compiled, {
63
+ [attribute]: _.template(emailTemplate[attribute], {
64
+ interpolate
65
+ })(data)
66
+ }) : compiled, {});
67
+ return strapi.plugin('email').provider.send({
68
+ ...emailOptions,
69
+ ...templatedAttributes
70
+ });
101
71
  };
102
- const contentApi = {
103
- type: "content-api",
104
- routes: [
105
- {
106
- method: "POST",
107
- path: "/",
108
- handler: "email.send"
109
- }
110
- ]
72
+ const emailService = ()=>({
73
+ getProviderSettings,
74
+ send,
75
+ sendTemplatedEmail
76
+ });
77
+
78
+ const services = {
79
+ email: emailService
80
+ };
81
+
82
+ var admin = {
83
+ type: 'admin',
84
+ routes: [
85
+ {
86
+ method: 'POST',
87
+ path: '/',
88
+ handler: 'email.send',
89
+ config: {
90
+ policies: [
91
+ 'admin::isAuthenticatedAdmin'
92
+ ]
93
+ }
94
+ },
95
+ {
96
+ method: 'POST',
97
+ path: '/test',
98
+ handler: 'email.test',
99
+ config: {
100
+ policies: [
101
+ 'admin::isAuthenticatedAdmin',
102
+ {
103
+ name: 'admin::hasPermissions',
104
+ config: {
105
+ actions: [
106
+ 'plugin::email.settings.read'
107
+ ]
108
+ }
109
+ }
110
+ ]
111
+ }
112
+ },
113
+ {
114
+ method: 'GET',
115
+ path: '/settings',
116
+ handler: 'email.getSettings',
117
+ config: {
118
+ policies: [
119
+ 'admin::isAuthenticatedAdmin',
120
+ {
121
+ name: 'admin::hasPermissions',
122
+ config: {
123
+ actions: [
124
+ 'plugin::email.settings.read'
125
+ ]
126
+ }
127
+ }
128
+ ]
129
+ }
130
+ }
131
+ ]
132
+ };
133
+
134
+ var contentApi = {
135
+ type: 'content-api',
136
+ routes: [
137
+ {
138
+ method: 'POST',
139
+ path: '/',
140
+ handler: 'email.send'
141
+ }
142
+ ]
111
143
  };
144
+
112
145
  const routes = {
113
- admin,
114
- "content-api": contentApi
146
+ admin,
147
+ 'content-api': contentApi
115
148
  };
149
+
116
150
  const { ApplicationError } = errors;
117
- const emailController = {
118
- async send(ctx) {
119
- const options = ctx.request.body;
120
- try {
121
- await strapi.plugin("email").service("email").send(options);
122
- } catch (error) {
123
- if (error instanceof Error) {
124
- if ("statusCode" in error && error.statusCode === 400) {
125
- throw new ApplicationError(error.message);
126
- } else {
127
- throw new Error(`Couldn't send email: ${error.message}.`);
151
+ /**
152
+ * Email.js controller
153
+ *
154
+ * @description: A set of functions called "actions" of the `email` plugin.
155
+ */ const emailController = {
156
+ async send (ctx) {
157
+ const options = ctx.request.body;
158
+ try {
159
+ await strapi.plugin('email').service('email').send(options);
160
+ } catch (error) {
161
+ if (error instanceof Error) {
162
+ if ('statusCode' in error && error.statusCode === 400) {
163
+ throw new ApplicationError(error.message);
164
+ } else {
165
+ throw new Error(`Couldn't send email: ${error.message}.`);
166
+ }
167
+ }
128
168
  }
129
- }
130
- }
131
- ctx.send({});
132
- },
133
- async test(ctx) {
134
- const { to } = ctx.request.body;
135
- if (!to) {
136
- throw new ApplicationError("No recipient(s) are given");
137
- }
138
- const email = {
139
- to,
140
- subject: `Strapi test mail to: ${to}`,
141
- text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get(
142
- "plugin::email.provider"
143
- )} provider. \r
144
- For documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`
145
- };
146
- try {
147
- await strapi.plugin("email").service("email").send(email);
148
- } catch (error) {
149
- if (error instanceof Error) {
150
- if ("statusCode" in error && error.statusCode === 400) {
151
- throw new ApplicationError(error.message);
152
- } else {
153
- throw new Error(`Couldn't send test email: ${error.message}.`);
169
+ // Send 200 `ok`
170
+ ctx.send({});
171
+ },
172
+ async test (ctx) {
173
+ const { to } = ctx.request.body;
174
+ if (!to) {
175
+ throw new ApplicationError('No recipient(s) are given');
154
176
  }
155
- }
177
+ const email = {
178
+ to,
179
+ subject: `Strapi test mail to: ${to}`,
180
+ text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get('plugin::email.provider')} provider. \r\nFor documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`
181
+ };
182
+ try {
183
+ await strapi.plugin('email').service('email').send(email);
184
+ } catch (error) {
185
+ if (error instanceof Error) {
186
+ if ('statusCode' in error && error.statusCode === 400) {
187
+ throw new ApplicationError(error.message);
188
+ } else {
189
+ throw new Error(`Couldn't send test email: ${error.message}.`);
190
+ }
191
+ }
192
+ }
193
+ // Send 200 `ok`
194
+ ctx.send({});
195
+ },
196
+ async getSettings (ctx) {
197
+ const config = strapi.plugin('email').service('email').getProviderSettings();
198
+ ctx.send({
199
+ config: pick([
200
+ 'provider',
201
+ 'settings.defaultFrom',
202
+ 'settings.defaultReplyTo',
203
+ 'settings.testAddress'
204
+ ], config)
205
+ });
156
206
  }
157
- ctx.send({});
158
- },
159
- async getSettings(ctx) {
160
- const config2 = strapi.plugin("email").service("email").getProviderSettings();
161
- ctx.send({
162
- config: pick(
163
- ["provider", "settings.defaultFrom", "settings.defaultReplyTo", "settings.testAddress"],
164
- config2
165
- )
166
- });
167
- }
168
207
  };
169
- const controllers = { email: emailController };
170
- const config = {
171
- default: {
172
- provider: "sendmail",
173
- providerOptions: {},
174
- settings: {
175
- defaultFrom: "Strapi <no-reply@strapi.io>"
176
- }
177
- },
178
- validator() {
179
- }
208
+
209
+ const controllers = {
210
+ email: emailController
180
211
  };
181
- const index = {
182
- bootstrap,
183
- services,
184
- routes,
185
- controllers,
186
- config
212
+
213
+ const config = {
214
+ default: {
215
+ provider: 'sendmail',
216
+ providerOptions: {},
217
+ settings: {
218
+ defaultFrom: 'Strapi <no-reply@strapi.io>'
219
+ }
220
+ },
221
+ validator () {}
187
222
  };
188
- export {
189
- index as default
223
+
224
+ var index = {
225
+ bootstrap,
226
+ services,
227
+ routes,
228
+ controllers,
229
+ config
190
230
  };
231
+
232
+ export { index as default };
191
233
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":["../../server/src/bootstrap.ts","../../server/src/services/email.ts","../../server/src/services/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/content-api.ts","../../server/src/routes/index.ts","../../server/src/controllers/email.ts","../../server/src/controllers/index.ts","../../server/src/config.ts","../../server/src/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { EmailConfig, SendOptions } from './types';\n\ninterface EmailProvider {\n send: (options: SendOptions) => Promise<any>;\n}\n\ninterface EmailProviderModule {\n init: (\n options: EmailConfig['providerOptions'],\n settings: EmailConfig['settings']\n ) => EmailProvider;\n name?: string;\n provider?: string;\n}\n\nconst createProvider = (emailConfig: EmailConfig) => {\n const providerName = emailConfig.provider.toLowerCase();\n let provider: EmailProviderModule;\n\n let modulePath: string;\n try {\n modulePath = require.resolve(`@strapi/provider-email-${providerName}`);\n } catch (error) {\n if (\n error !== null &&\n typeof error === 'object' &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n throw new Error(`Could not load email provider \"${providerName}\".`);\n }\n\n return provider.init(emailConfig.providerOptions, emailConfig.settings);\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n const emailConfig: EmailConfig = strapi.config.get('plugin::email');\n strapi.plugin('email').provider = createProvider(emailConfig);\n\n // Add permissions\n const actions = [\n {\n section: 'settings',\n category: 'email',\n displayName: 'Access the Email Settings page',\n uid: 'settings.read',\n pluginName: 'email',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n};\n","import * as _ from 'lodash';\nimport { objects, template } from '@strapi/utils';\n\nimport type {\n EmailConfig,\n EmailOptions,\n EmailTemplate,\n EmailTemplateData,\n SendOptions,\n} from '../types';\n\nconst { createStrictInterpolationRegExp } = template;\n\nconst getProviderSettings = (): EmailConfig => strapi.config.get('plugin::email');\n\nconst send = async (options: SendOptions) => strapi.plugin('email').provider.send(options);\n\n/**\n * fill subject, text and html using lodash template\n * @param {object} emailOptions - to, from and replyto...\n * @param {object} emailTemplate - object containing attributes to fill\n * @param {object} data - data used to fill the template\n * @returns {{ subject, text, subject }}\n */\nconst sendTemplatedEmail = (\n emailOptions: EmailOptions,\n emailTemplate: EmailTemplate,\n data: EmailTemplateData\n) => {\n const attributes = ['subject', 'text', 'html'];\n const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));\n\n if (missingAttributes.length > 0) {\n throw new Error(\n `Following attributes are missing from your email template : ${missingAttributes.join(', ')}`\n );\n }\n\n const allowedInterpolationVariables = objects.keysDeep(data);\n const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');\n\n const templatedAttributes = attributes.reduce(\n (compiled, attribute) =>\n emailTemplate[attribute]\n ? Object.assign(compiled, {\n [attribute]: _.template(emailTemplate[attribute], {\n interpolate,\n })(data),\n })\n : compiled,\n {}\n );\n\n return strapi.plugin('email').provider.send({ ...emailOptions, ...templatedAttributes });\n};\n\nconst emailService = () => ({\n getProviderSettings,\n send,\n sendTemplatedEmail,\n});\n\nexport default emailService;\n","import email from './email';\n\nexport const services = { email };\n","export default {\n type: 'admin',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/test',\n handler: 'email.test',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['plugin::email.settings.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/settings',\n handler: 'email.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['plugin::email.settings.read'] } },\n ],\n },\n },\n ],\n};\n","export default {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n },\n ],\n};\n","import admin from './admin';\nimport contentApi from './content-api';\n\nexport const routes = {\n admin,\n 'content-api': contentApi,\n};\n","import { pick } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\nimport type { EmailConfig, SendOptions } from '../types';\n\nconst { ApplicationError } = errors;\n\n/**\n * Email.js controller\n *\n * @description: A set of functions called \"actions\" of the `email` plugin.\n */\nconst emailController = {\n async send(ctx: Koa.Context) {\n const options = ctx.request.body as SendOptions;\n\n try {\n await strapi.plugin('email').service('email').send(options);\n } catch (error) {\n if (error instanceof Error) {\n if ('statusCode' in error && error.statusCode === 400) {\n throw new ApplicationError(error.message);\n } else {\n throw new Error(`Couldn't send email: ${error.message}.`);\n }\n }\n }\n\n // Send 200 `ok`\n ctx.send({});\n },\n\n async test(ctx: Koa.Context) {\n const { to } = ctx.request.body as Pick<SendOptions, 'to'>;\n\n if (!to) {\n throw new ApplicationError('No recipient(s) are given');\n }\n\n const email: SendOptions = {\n to,\n subject: `Strapi test mail to: ${to}`,\n text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get(\n 'plugin::email.provider'\n )} provider. \\r\\nFor documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`,\n };\n\n try {\n await strapi.plugin('email').service('email').send(email);\n } catch (error) {\n if (error instanceof Error) {\n if ('statusCode' in error && error.statusCode === 400) {\n throw new ApplicationError(error.message);\n } else {\n throw new Error(`Couldn't send test email: ${error.message}.`);\n }\n }\n }\n\n // Send 200 `ok`\n ctx.send({});\n },\n\n async getSettings(ctx: Koa.Context) {\n const config: EmailConfig = strapi.plugin('email').service('email').getProviderSettings();\n\n ctx.send({\n config: pick(\n ['provider', 'settings.defaultFrom', 'settings.defaultReplyTo', 'settings.testAddress'],\n config\n ),\n });\n },\n};\n\nexport default emailController;\n","import email from './email';\n\nexport const controllers = { email };\n","import type { StrapiConfig } from './types';\n\nexport const config: StrapiConfig = {\n default: {\n provider: 'sendmail',\n providerOptions: {},\n settings: {\n defaultFrom: 'Strapi <no-reply@strapi.io>',\n },\n },\n validator() {},\n};\n","import { bootstrap } from './bootstrap';\nimport { services } from './services';\nimport { routes } from './routes';\nimport { controllers } from './controllers';\nimport { config } from './config';\n\nexport default {\n bootstrap,\n services,\n routes,\n controllers,\n config,\n};\n"],"names":["strapi","email","config"],"mappings":";;;AAgBA,MAAM,iBAAiB,CAAC,gBAA6B;AAC7C,QAAA,eAAe,YAAY,SAAS,YAAY;AAClD,MAAA;AAEA,MAAA;AACA,MAAA;AACF,iBAAa,QAAQ,QAAQ,0BAA0B,YAAY,EAAE;AAAA,WAC9D,OAAO;AAEZ,QAAA,UAAU,QACV,OAAO,UAAU,YACjB,UAAU,SACV,MAAM,SAAS,oBACf;AACa,mBAAA;AAAA,IAAA,OACR;AACC,YAAA;AAAA,IAAA;AAAA,EACR;AAGE,MAAA;AACF,eAAW,QAAQ,UAAU;AAAA,WACtB,KAAK;AACZ,UAAM,IAAI,MAAM,kCAAkC,YAAY,IAAI;AAAA,EAAA;AAGpE,SAAO,SAAS,KAAK,YAAY,iBAAiB,YAAY,QAAQ;AACxE;AAEO,MAAM,YAAY,OAAO,EAAE,QAAAA,cAAsC;AACtE,QAAM,cAA2BA,QAAO,OAAO,IAAI,eAAe;AAClE,EAAAA,QAAO,OAAO,OAAO,EAAE,WAAW,eAAe,WAAW;AAG5D,QAAM,UAAU;AAAA,IACd;AAAA,MACE,SAAS;AAAA,MACT,UAAU;AAAA,MACV,aAAa;AAAA,MACb,KAAK;AAAA,MACL,YAAY;AAAA,IAAA;AAAA,EAEhB;AAEA,QAAMA,QAAO,QAAQ,mBAAmB,EAAE,eAAe,aAAa,OAAO;AAC/E;AClDA,MAAM,EAAE,gCAAoC,IAAA;AAE5C,MAAM,sBAAsB,MAAmB,OAAO,OAAO,IAAI,eAAe;AAEhF,MAAM,OAAO,OAAO,YAAyB,OAAO,OAAO,OAAO,EAAE,SAAS,KAAK,OAAO;AASzF,MAAM,qBAAqB,CACzB,cACA,eACA,SACG;AACH,QAAM,aAAa,CAAC,WAAW,QAAQ,MAAM;AAC7C,QAAM,oBAAoB,EAAE,WAAW,YAAY,OAAO,KAAK,aAAa,CAAC;AAEzE,MAAA,kBAAkB,SAAS,GAAG;AAChC,UAAM,IAAI;AAAA,MACR,+DAA+D,kBAAkB,KAAK,IAAI,CAAC;AAAA,IAC7F;AAAA,EAAA;AAGI,QAAA,gCAAgC,QAAQ,SAAS,IAAI;AACrD,QAAA,cAAc,gCAAgC,+BAA+B,GAAG;AAEtF,QAAM,sBAAsB,WAAW;AAAA,IACrC,CAAC,UAAU,cACT,cAAc,SAAS,IACnB,OAAO,OAAO,UAAU;AAAA,MACtB,CAAC,SAAS,GAAG,EAAE,SAAS,cAAc,SAAS,GAAG;AAAA,QAChD;AAAA,MACD,CAAA,EAAE,IAAI;AAAA,IACR,CAAA,IACD;AAAA,IACN,CAAA;AAAA,EACF;AAEO,SAAA,OAAO,OAAO,OAAO,EAAE,SAAS,KAAK,EAAE,GAAG,cAAc,GAAG,qBAAqB;AACzF;AAEA,MAAM,eAAe,OAAO;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF;AC1Da,MAAA,WAAW,EAAEC,OAAAA,aAAM;ACFhC,MAAe,QAAA;AAAA,EACb,MAAM;AAAA,EACN,QAAQ;AAAA,IACN;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,UAAU,CAAC,6BAA6B;AAAA,MAAA;AAAA,IAE5C;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,UAAU;AAAA,UACR;AAAA,UACA,EAAE,MAAM,yBAAyB,QAAQ,EAAE,SAAS,CAAC,6BAA6B,EAAI,EAAA;AAAA,QAAA;AAAA,MACxF;AAAA,IAEJ;AAAA,IACA;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,MACT,QAAQ;AAAA,QACN,UAAU;AAAA,UACR;AAAA,UACA,EAAE,MAAM,yBAAyB,QAAQ,EAAE,SAAS,CAAC,6BAA6B,EAAI,EAAA;AAAA,QAAA;AAAA,MACxF;AAAA,IACF;AAAA,EACF;AAEJ;AClCA,MAAe,aAAA;AAAA,EACb,MAAM;AAAA,EACN,QAAQ;AAAA,IACN;AAAA,MACE,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,SAAS;AAAA,IAAA;AAAA,EACX;AAEJ;ACNO,MAAM,SAAS;AAAA,EACpB;AAAA,EACA,eAAe;AACjB;ACCA,MAAM,EAAE,iBAAqB,IAAA;AAO7B,MAAM,kBAAkB;AAAA,EACtB,MAAM,KAAK,KAAkB;AACrB,UAAA,UAAU,IAAI,QAAQ;AAExB,QAAA;AACI,YAAA,OAAO,OAAO,OAAO,EAAE,QAAQ,OAAO,EAAE,KAAK,OAAO;AAAA,aACnD,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,YAAI,gBAAgB,SAAS,MAAM,eAAe,KAAK;AAC/C,gBAAA,IAAI,iBAAiB,MAAM,OAAO;AAAA,QAAA,OACnC;AACL,gBAAM,IAAI,MAAM,wBAAwB,MAAM,OAAO,GAAG;AAAA,QAAA;AAAA,MAC1D;AAAA,IACF;AAIE,QAAA,KAAK,EAAE;AAAA,EACb;AAAA,EAEA,MAAM,KAAK,KAAkB;AAC3B,UAAM,EAAE,GAAA,IAAO,IAAI,QAAQ;AAE3B,QAAI,CAAC,IAAI;AACD,YAAA,IAAI,iBAAiB,2BAA2B;AAAA,IAAA;AAGxD,UAAM,QAAqB;AAAA,MACzB;AAAA,MACA,SAAS,wBAAwB,EAAE;AAAA,MACnC,MAAM,yEAAyE,OAAO,OAAO;AAAA,QAC3F;AAAA,MAAA,CACD;AAAA;AAAA,IACH;AAEI,QAAA;AACI,YAAA,OAAO,OAAO,OAAO,EAAE,QAAQ,OAAO,EAAE,KAAK,KAAK;AAAA,aACjD,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,YAAI,gBAAgB,SAAS,MAAM,eAAe,KAAK;AAC/C,gBAAA,IAAI,iBAAiB,MAAM,OAAO;AAAA,QAAA,OACnC;AACL,gBAAM,IAAI,MAAM,6BAA6B,MAAM,OAAO,GAAG;AAAA,QAAA;AAAA,MAC/D;AAAA,IACF;AAIE,QAAA,KAAK,EAAE;AAAA,EACb;AAAA,EAEA,MAAM,YAAY,KAAkB;AAC5B,UAAAC,UAAsB,OAAO,OAAO,OAAO,EAAE,QAAQ,OAAO,EAAE,oBAAoB;AAExF,QAAI,KAAK;AAAA,MACP,QAAQ;AAAA,QACN,CAAC,YAAY,wBAAwB,2BAA2B,sBAAsB;AAAA,QACtFA;AAAA,MAAA;AAAA,IACF,CACD;AAAA,EAAA;AAEL;ACzEa,MAAA,cAAc,EAAED,OAAAA,gBAAM;ACA5B,MAAM,SAAuB;AAAA,EAClC,SAAS;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB,CAAC;AAAA,IAClB,UAAU;AAAA,MACR,aAAa;AAAA,IAAA;AAAA,EAEjB;AAAA,EACA,YAAY;AAAA,EAAA;AACd;ACLA,MAAe,QAAA;AAAA,EACb;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;"}
1
+ {"version":3,"file":"index.mjs","sources":["../../server/src/bootstrap.ts","../../server/src/services/email.ts","../../server/src/services/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/content-api.ts","../../server/src/routes/index.ts","../../server/src/controllers/email.ts","../../server/src/controllers/index.ts","../../server/src/config.ts","../../server/src/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { EmailConfig, SendOptions } from './types';\n\ninterface EmailProvider {\n send: (options: SendOptions) => Promise<any>;\n}\n\ninterface EmailProviderModule {\n init: (\n options: EmailConfig['providerOptions'],\n settings: EmailConfig['settings']\n ) => EmailProvider;\n name?: string;\n provider?: string;\n}\n\nconst createProvider = (emailConfig: EmailConfig) => {\n const providerName = emailConfig.provider.toLowerCase();\n let provider: EmailProviderModule;\n\n let modulePath: string;\n try {\n modulePath = require.resolve(`@strapi/provider-email-${providerName}`);\n } catch (error) {\n if (\n error !== null &&\n typeof error === 'object' &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n throw new Error(`Could not load email provider \"${providerName}\".`);\n }\n\n return provider.init(emailConfig.providerOptions, emailConfig.settings);\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n const emailConfig: EmailConfig = strapi.config.get('plugin::email');\n strapi.plugin('email').provider = createProvider(emailConfig);\n\n // Add permissions\n const actions = [\n {\n section: 'settings',\n category: 'email',\n displayName: 'Access the Email Settings page',\n uid: 'settings.read',\n pluginName: 'email',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n};\n","import * as _ from 'lodash';\nimport { objects, template } from '@strapi/utils';\n\nimport type {\n EmailConfig,\n EmailOptions,\n EmailTemplate,\n EmailTemplateData,\n SendOptions,\n} from '../types';\n\nconst { createStrictInterpolationRegExp } = template;\n\nconst getProviderSettings = (): EmailConfig => strapi.config.get('plugin::email');\n\nconst send = async (options: SendOptions) => strapi.plugin('email').provider.send(options);\n\n/**\n * fill subject, text and html using lodash template\n * @param {object} emailOptions - to, from and replyto...\n * @param {object} emailTemplate - object containing attributes to fill\n * @param {object} data - data used to fill the template\n * @returns {{ subject, text, subject }}\n */\nconst sendTemplatedEmail = (\n emailOptions: EmailOptions,\n emailTemplate: EmailTemplate,\n data: EmailTemplateData\n) => {\n const attributes = ['subject', 'text', 'html'];\n const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));\n\n if (missingAttributes.length > 0) {\n throw new Error(\n `Following attributes are missing from your email template : ${missingAttributes.join(', ')}`\n );\n }\n\n const allowedInterpolationVariables = objects.keysDeep(data);\n const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');\n\n const templatedAttributes = attributes.reduce(\n (compiled, attribute) =>\n emailTemplate[attribute]\n ? Object.assign(compiled, {\n [attribute]: _.template(emailTemplate[attribute], {\n interpolate,\n })(data),\n })\n : compiled,\n {}\n );\n\n return strapi.plugin('email').provider.send({ ...emailOptions, ...templatedAttributes });\n};\n\nconst emailService = () => ({\n getProviderSettings,\n send,\n sendTemplatedEmail,\n});\n\nexport default emailService;\n","import email from './email';\n\nexport const services = { email };\n","export default {\n type: 'admin',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/test',\n handler: 'email.test',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['plugin::email.settings.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/settings',\n handler: 'email.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['plugin::email.settings.read'] } },\n ],\n },\n },\n ],\n};\n","export default {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n },\n ],\n};\n","import admin from './admin';\nimport contentApi from './content-api';\n\nexport const routes = {\n admin,\n 'content-api': contentApi,\n};\n","import { pick } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\nimport type { EmailConfig, SendOptions } from '../types';\n\nconst { ApplicationError } = errors;\n\n/**\n * Email.js controller\n *\n * @description: A set of functions called \"actions\" of the `email` plugin.\n */\nconst emailController = {\n async send(ctx: Koa.Context) {\n const options = ctx.request.body as SendOptions;\n\n try {\n await strapi.plugin('email').service('email').send(options);\n } catch (error) {\n if (error instanceof Error) {\n if ('statusCode' in error && error.statusCode === 400) {\n throw new ApplicationError(error.message);\n } else {\n throw new Error(`Couldn't send email: ${error.message}.`);\n }\n }\n }\n\n // Send 200 `ok`\n ctx.send({});\n },\n\n async test(ctx: Koa.Context) {\n const { to } = ctx.request.body as Pick<SendOptions, 'to'>;\n\n if (!to) {\n throw new ApplicationError('No recipient(s) are given');\n }\n\n const email: SendOptions = {\n to,\n subject: `Strapi test mail to: ${to}`,\n text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get(\n 'plugin::email.provider'\n )} provider. \\r\\nFor documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`,\n };\n\n try {\n await strapi.plugin('email').service('email').send(email);\n } catch (error) {\n if (error instanceof Error) {\n if ('statusCode' in error && error.statusCode === 400) {\n throw new ApplicationError(error.message);\n } else {\n throw new Error(`Couldn't send test email: ${error.message}.`);\n }\n }\n }\n\n // Send 200 `ok`\n ctx.send({});\n },\n\n async getSettings(ctx: Koa.Context) {\n const config: EmailConfig = strapi.plugin('email').service('email').getProviderSettings();\n\n ctx.send({\n config: pick(\n ['provider', 'settings.defaultFrom', 'settings.defaultReplyTo', 'settings.testAddress'],\n config\n ),\n });\n },\n};\n\nexport default emailController;\n","import email from './email';\n\nexport const controllers = { email };\n","import type { StrapiConfig } from './types';\n\nexport const config: StrapiConfig = {\n default: {\n provider: 'sendmail',\n providerOptions: {},\n settings: {\n defaultFrom: 'Strapi <no-reply@strapi.io>',\n },\n },\n validator() {},\n};\n","import { bootstrap } from './bootstrap';\nimport { services } from './services';\nimport { routes } from './routes';\nimport { controllers } from './controllers';\nimport { config } from './config';\n\nexport default {\n bootstrap,\n services,\n routes,\n controllers,\n config,\n};\n"],"names":["createProvider","emailConfig","providerName","provider","toLowerCase","modulePath","require","resolve","error","code","err","Error","init","providerOptions","settings","bootstrap","strapi","config","get","plugin","actions","section","category","displayName","uid","pluginName","service","actionProvider","registerMany","createStrictInterpolationRegExp","template","getProviderSettings","send","options","sendTemplatedEmail","emailOptions","emailTemplate","data","attributes","missingAttributes","_","difference","Object","keys","length","join","allowedInterpolationVariables","objects","keysDeep","interpolate","templatedAttributes","reduce","compiled","attribute","assign","emailService","services","email","type","routes","method","path","handler","policies","name","admin","contentApi","ApplicationError","errors","emailController","ctx","request","body","statusCode","message","test","to","subject","text","getSettings","pick","controllers","default","defaultFrom","validator"],"mappings":"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"}
@@ -8,4 +8,3 @@ export interface ConfigSettings {
8
8
  defaultReplyTo: string;
9
9
  };
10
10
  }
11
- //# sourceMappingURL=types.d.ts.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@strapi/email",
3
- "version": "5.9.0",
3
+ "version": "5.10.0",
4
4
  "description": "Easily configure your Strapi application to send emails.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -41,7 +41,11 @@
41
41
  "strapi-server.js"
42
42
  ],
43
43
  "scripts": {
44
- "build": "pack-up build",
44
+ "build": "run -T npm-run-all clean --parallel build:code build:types",
45
+ "build:code": "run -T rollup -c",
46
+ "build:types": "run -T run-p build:types:server build:types:admin",
47
+ "build:types:server": "run -T tsc -p server/tsconfig.build.json --emitDeclarationOnly",
48
+ "build:types:admin": "run -T tsc -p admin/tsconfig.build.json --emitDeclarationOnly",
45
49
  "clean": "run -T rimraf ./dist",
46
50
  "lint": "run -T eslint .",
47
51
  "test:front": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js",
@@ -49,22 +53,21 @@
49
53
  "test:front:watch": "run -T cross-env IS_EE=true jest --config ./jest.config.front.js --watchAll",
50
54
  "test:front:watch:ce": "run -T cross-env IS_EE=false jest --config ./jest.config.front.js --watchAll",
51
55
  "test:ts:front": "run -T tsc -p admin/tsconfig.json",
52
- "watch": "pack-up watch"
56
+ "watch": "run -T rollup -c -w"
53
57
  },
54
58
  "dependencies": {
55
- "@strapi/design-system": "2.0.0-rc.14",
56
- "@strapi/icons": "2.0.0-rc.14",
57
- "@strapi/provider-email-sendmail": "5.9.0",
58
- "@strapi/utils": "5.9.0",
59
+ "@strapi/design-system": "2.0.0-rc.16",
60
+ "@strapi/icons": "2.0.0-rc.16",
61
+ "@strapi/provider-email-sendmail": "5.10.0",
62
+ "@strapi/utils": "5.10.0",
59
63
  "lodash": "4.17.21",
60
64
  "react-intl": "6.6.2",
61
65
  "react-query": "3.39.3",
62
66
  "yup": "0.32.9"
63
67
  },
64
68
  "devDependencies": {
65
- "@strapi/admin": "5.9.0",
66
- "@strapi/pack-up": "5.0.2",
67
- "@strapi/types": "5.9.0",
69
+ "@strapi/admin": "5.10.0",
70
+ "@strapi/types": "5.10.0",
68
71
  "@testing-library/react": "15.0.7",
69
72
  "@types/koa": "2.13.4",
70
73
  "@types/lodash": "^4.14.191",