@strapi/email 0.0.0-next.f0a0bc26f5ef0693aaea2a616bc6b816cfee54b6 → 0.0.0-next.f0f36e3df4b18f167036dcbca529dcb933bf4e1d

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 (293) hide show
  1. package/dist/admin/constants.js +17 -0
  2. package/dist/admin/constants.js.map +1 -0
  3. package/dist/admin/constants.mjs +15 -0
  4. package/dist/admin/constants.mjs.map +1 -0
  5. package/dist/admin/index.js +91 -3
  6. package/dist/admin/index.js.map +1 -1
  7. package/dist/admin/index.mjs +86 -3
  8. package/dist/admin/index.mjs.map +1 -1
  9. package/dist/admin/pages/Settings.js +366 -0
  10. package/dist/admin/pages/Settings.js.map +1 -0
  11. package/dist/admin/pages/Settings.mjs +345 -0
  12. package/dist/admin/pages/Settings.mjs.map +1 -0
  13. package/dist/admin/translations/ar.json.js +6 -0
  14. package/dist/admin/translations/ar.json.js.map +1 -0
  15. package/dist/admin/translations/ar.json.mjs +4 -0
  16. package/dist/admin/translations/ar.json.mjs.map +1 -0
  17. package/dist/admin/translations/cs.json.js +6 -0
  18. package/dist/admin/translations/cs.json.js.map +1 -0
  19. package/dist/admin/translations/cs.json.mjs +4 -0
  20. package/dist/admin/translations/cs.json.mjs.map +1 -0
  21. package/dist/admin/translations/de.json.js +6 -0
  22. package/dist/admin/translations/de.json.js.map +1 -0
  23. package/dist/admin/translations/de.json.mjs +4 -0
  24. package/dist/admin/translations/de.json.mjs.map +1 -0
  25. package/dist/admin/translations/dk.json.js +27 -0
  26. package/dist/admin/translations/dk.json.js.map +1 -0
  27. package/dist/admin/translations/dk.json.mjs +25 -0
  28. package/dist/admin/translations/dk.json.mjs.map +1 -0
  29. package/dist/admin/translations/en.json.js +32 -0
  30. package/dist/admin/translations/en.json.js.map +1 -0
  31. package/dist/admin/translations/en.json.mjs +27 -0
  32. package/dist/admin/translations/en.json.mjs.map +1 -0
  33. package/dist/admin/translations/es.json.js +27 -0
  34. package/dist/admin/translations/es.json.js.map +1 -0
  35. package/dist/admin/translations/es.json.mjs +25 -0
  36. package/dist/admin/translations/es.json.mjs.map +1 -0
  37. package/dist/admin/translations/fr.json.js +6 -0
  38. package/dist/admin/translations/fr.json.js.map +1 -0
  39. package/dist/admin/translations/fr.json.mjs +4 -0
  40. package/dist/admin/translations/fr.json.mjs.map +1 -0
  41. package/dist/admin/translations/id.json.js +6 -0
  42. package/dist/admin/translations/id.json.js.map +1 -0
  43. package/dist/admin/translations/id.json.mjs +4 -0
  44. package/dist/admin/translations/id.json.mjs.map +1 -0
  45. package/dist/admin/translations/it.json.js +6 -0
  46. package/dist/admin/translations/it.json.js.map +1 -0
  47. package/dist/admin/translations/it.json.mjs +4 -0
  48. package/dist/admin/translations/it.json.mjs.map +1 -0
  49. package/dist/admin/translations/ja.json.js +27 -0
  50. package/dist/admin/translations/ja.json.js.map +1 -0
  51. package/dist/admin/translations/ja.json.mjs +25 -0
  52. package/dist/admin/translations/ja.json.mjs.map +1 -0
  53. package/dist/admin/translations/ko.json.js +27 -0
  54. package/dist/admin/translations/ko.json.js.map +1 -0
  55. package/dist/admin/translations/ko.json.mjs +25 -0
  56. package/dist/admin/translations/ko.json.mjs.map +1 -0
  57. package/dist/admin/translations/ms.json.js +6 -0
  58. package/dist/admin/translations/ms.json.js.map +1 -0
  59. package/dist/admin/translations/ms.json.mjs +4 -0
  60. package/dist/admin/translations/ms.json.mjs.map +1 -0
  61. package/dist/admin/translations/nl.json.js +6 -0
  62. package/dist/admin/translations/nl.json.js.map +1 -0
  63. package/dist/admin/translations/nl.json.mjs +4 -0
  64. package/dist/admin/translations/nl.json.mjs.map +1 -0
  65. package/dist/admin/translations/pl.json.js +27 -0
  66. package/dist/admin/translations/pl.json.js.map +1 -0
  67. package/dist/admin/translations/pl.json.mjs +25 -0
  68. package/dist/admin/translations/pl.json.mjs.map +1 -0
  69. package/dist/admin/translations/pt-BR.json.js +6 -0
  70. package/dist/admin/translations/pt-BR.json.js.map +1 -0
  71. package/dist/admin/translations/pt-BR.json.mjs +4 -0
  72. package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
  73. package/dist/admin/translations/pt.json.js +32 -0
  74. package/dist/admin/translations/pt.json.js.map +1 -0
  75. package/dist/admin/translations/pt.json.mjs +27 -0
  76. package/dist/admin/translations/pt.json.mjs.map +1 -0
  77. package/dist/admin/translations/ru.json.js +32 -0
  78. package/dist/admin/translations/ru.json.js.map +1 -0
  79. package/dist/admin/translations/ru.json.mjs +27 -0
  80. package/dist/admin/translations/ru.json.mjs.map +1 -0
  81. package/dist/admin/translations/sk.json.js +6 -0
  82. package/dist/admin/translations/sk.json.js.map +1 -0
  83. package/dist/admin/translations/sk.json.mjs +4 -0
  84. package/dist/admin/translations/sk.json.mjs.map +1 -0
  85. package/dist/admin/translations/th.json.js +6 -0
  86. package/dist/admin/translations/th.json.js.map +1 -0
  87. package/dist/admin/translations/th.json.mjs +4 -0
  88. package/dist/admin/translations/th.json.mjs.map +1 -0
  89. package/dist/admin/translations/tr.json.js +32 -0
  90. package/dist/admin/translations/tr.json.js.map +1 -0
  91. package/dist/admin/translations/tr.json.mjs +27 -0
  92. package/dist/admin/translations/tr.json.mjs.map +1 -0
  93. package/dist/admin/translations/uk.json.js +32 -0
  94. package/dist/admin/translations/uk.json.js.map +1 -0
  95. package/dist/admin/translations/uk.json.mjs +27 -0
  96. package/dist/admin/translations/uk.json.mjs.map +1 -0
  97. package/dist/admin/translations/vi.json.js +6 -0
  98. package/dist/admin/translations/vi.json.js.map +1 -0
  99. package/dist/admin/translations/vi.json.mjs +4 -0
  100. package/dist/admin/translations/vi.json.mjs.map +1 -0
  101. package/dist/admin/translations/zh-Hans.json.js +24 -0
  102. package/dist/admin/translations/zh-Hans.json.js.map +1 -0
  103. package/dist/admin/translations/zh-Hans.json.mjs +19 -0
  104. package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
  105. package/dist/admin/translations/zh.json.js +32 -0
  106. package/dist/admin/translations/zh.json.js.map +1 -0
  107. package/dist/admin/translations/zh.json.mjs +27 -0
  108. package/dist/admin/translations/zh.json.mjs.map +1 -0
  109. package/dist/admin/utils/getYupInnerErrors.js +23 -0
  110. package/dist/admin/utils/getYupInnerErrors.js.map +1 -0
  111. package/dist/admin/utils/getYupInnerErrors.mjs +21 -0
  112. package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -0
  113. package/dist/admin/utils/prefixPluginTranslations.js +11 -0
  114. package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
  115. package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
  116. package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
  117. package/dist/admin/utils/schema.js +30 -0
  118. package/dist/admin/utils/schema.js.map +1 -0
  119. package/dist/admin/utils/schema.mjs +9 -0
  120. package/dist/admin/utils/schema.mjs.map +1 -0
  121. package/dist/server/bootstrap.js +44 -0
  122. package/dist/server/bootstrap.js.map +1 -0
  123. package/dist/server/bootstrap.mjs +42 -0
  124. package/dist/server/bootstrap.mjs.map +1 -0
  125. package/dist/server/config.js +15 -0
  126. package/dist/server/config.js.map +1 -0
  127. package/dist/server/config.mjs +13 -0
  128. package/dist/server/config.mjs.map +1 -0
  129. package/dist/server/controllers/email.js +66 -0
  130. package/dist/server/controllers/email.js.map +1 -0
  131. package/dist/server/controllers/email.mjs +64 -0
  132. package/dist/server/controllers/email.mjs.map +1 -0
  133. package/dist/server/controllers/index.js +10 -0
  134. package/dist/server/controllers/index.js.map +1 -0
  135. package/dist/server/controllers/index.mjs +8 -0
  136. package/dist/server/controllers/index.mjs.map +1 -0
  137. package/dist/server/index.js +18 -207
  138. package/dist/server/index.js.map +1 -1
  139. package/dist/server/index.mjs +17 -190
  140. package/dist/server/index.mjs.map +1 -1
  141. package/dist/server/middlewares/index.js +13 -0
  142. package/dist/server/middlewares/index.js.map +1 -0
  143. package/dist/server/middlewares/index.mjs +8 -0
  144. package/dist/server/middlewares/index.mjs.map +1 -0
  145. package/dist/server/middlewares/rateLimit.js +37 -0
  146. package/dist/server/middlewares/rateLimit.js.map +1 -0
  147. package/dist/server/middlewares/rateLimit.mjs +35 -0
  148. package/dist/server/middlewares/rateLimit.mjs.map +1 -0
  149. package/dist/server/routes/admin.js +56 -0
  150. package/dist/server/routes/admin.js.map +1 -0
  151. package/dist/server/routes/admin.mjs +54 -0
  152. package/dist/server/routes/admin.mjs.map +1 -0
  153. package/dist/server/routes/content-api.js +24 -0
  154. package/dist/server/routes/content-api.js.map +1 -0
  155. package/dist/server/routes/content-api.mjs +22 -0
  156. package/dist/server/routes/content-api.mjs.map +1 -0
  157. package/dist/server/routes/index.js +12 -0
  158. package/dist/server/routes/index.js.map +1 -0
  159. package/dist/server/routes/index.mjs +10 -0
  160. package/dist/server/routes/index.mjs.map +1 -0
  161. package/dist/server/routes/validation/email.js +46 -0
  162. package/dist/server/routes/validation/email.js.map +1 -0
  163. package/dist/server/routes/validation/email.mjs +25 -0
  164. package/dist/server/routes/validation/email.mjs.map +1 -0
  165. package/dist/server/services/email.js +63 -0
  166. package/dist/server/services/email.js.map +1 -0
  167. package/dist/server/services/email.mjs +42 -0
  168. package/dist/server/services/email.mjs.map +1 -0
  169. package/dist/server/services/index.js +10 -0
  170. package/dist/server/services/index.js.map +1 -0
  171. package/dist/server/services/index.mjs +8 -0
  172. package/dist/server/services/index.mjs.map +1 -0
  173. package/dist/server/src/bootstrap.d.ts.map +1 -1
  174. package/dist/server/src/index.d.ts +8 -7
  175. package/dist/server/src/index.d.ts.map +1 -1
  176. package/dist/server/src/middlewares/index.d.ts +9 -0
  177. package/dist/server/src/middlewares/index.d.ts.map +1 -0
  178. package/dist/server/src/middlewares/rateLimit.d.ts +7 -0
  179. package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -0
  180. package/dist/server/src/routes/content-api.d.ts +5 -8
  181. package/dist/server/src/routes/content-api.d.ts.map +1 -1
  182. package/dist/server/src/routes/index.d.ts +3 -7
  183. package/dist/server/src/routes/index.d.ts.map +1 -1
  184. package/dist/server/src/routes/validation/email.d.ts +18 -0
  185. package/dist/server/src/routes/validation/email.d.ts.map +1 -0
  186. package/dist/server/src/routes/validation/index.d.ts +2 -0
  187. package/dist/server/src/routes/validation/index.d.ts.map +1 -0
  188. package/dist/shared/types.d.ts +0 -1
  189. package/package.json +21 -17
  190. package/dist/_chunks/Settings-B67D6mio.mjs +0 -281
  191. package/dist/_chunks/Settings-B67D6mio.mjs.map +0 -1
  192. package/dist/_chunks/Settings-BYRUbwrJ.js +0 -300
  193. package/dist/_chunks/Settings-BYRUbwrJ.js.map +0 -1
  194. package/dist/_chunks/ar-Bf9XlLLo.mjs +0 -5
  195. package/dist/_chunks/ar-Bf9XlLLo.mjs.map +0 -1
  196. package/dist/_chunks/ar-C_tQu1XS.js +0 -5
  197. package/dist/_chunks/ar-C_tQu1XS.js.map +0 -1
  198. package/dist/_chunks/cs-B0QZJTah.mjs +0 -5
  199. package/dist/_chunks/cs-B0QZJTah.mjs.map +0 -1
  200. package/dist/_chunks/cs-CPKIUWLp.js +0 -5
  201. package/dist/_chunks/cs-CPKIUWLp.js.map +0 -1
  202. package/dist/_chunks/de-B9kiAC-s.mjs +0 -5
  203. package/dist/_chunks/de-B9kiAC-s.mjs.map +0 -1
  204. package/dist/_chunks/de-K6IYQk2d.js +0 -5
  205. package/dist/_chunks/de-K6IYQk2d.js.map +0 -1
  206. package/dist/_chunks/dk-31mOPYpI.js +0 -26
  207. package/dist/_chunks/dk-31mOPYpI.js.map +0 -1
  208. package/dist/_chunks/dk-DqrbgSkv.mjs +0 -26
  209. package/dist/_chunks/dk-DqrbgSkv.mjs.map +0 -1
  210. package/dist/_chunks/en-BCu4d6-o.js +0 -29
  211. package/dist/_chunks/en-BCu4d6-o.js.map +0 -1
  212. package/dist/_chunks/en-DF4KtAAC.mjs +0 -29
  213. package/dist/_chunks/en-DF4KtAAC.mjs.map +0 -1
  214. package/dist/_chunks/es-BNo7eLLJ.mjs +0 -26
  215. package/dist/_chunks/es-BNo7eLLJ.mjs.map +0 -1
  216. package/dist/_chunks/es-Dl2HVmwz.js +0 -26
  217. package/dist/_chunks/es-Dl2HVmwz.js.map +0 -1
  218. package/dist/_chunks/fr-C8Qw4iPZ.js +0 -5
  219. package/dist/_chunks/fr-C8Qw4iPZ.js.map +0 -1
  220. package/dist/_chunks/fr-hkSxFuzl.mjs +0 -5
  221. package/dist/_chunks/fr-hkSxFuzl.mjs.map +0 -1
  222. package/dist/_chunks/id-CHtAzAUz.mjs +0 -5
  223. package/dist/_chunks/id-CHtAzAUz.mjs.map +0 -1
  224. package/dist/_chunks/id-CvE5f0zz.js +0 -5
  225. package/dist/_chunks/id-CvE5f0zz.js.map +0 -1
  226. package/dist/_chunks/index-C3dnHLzx.mjs +0 -78
  227. package/dist/_chunks/index-C3dnHLzx.mjs.map +0 -1
  228. package/dist/_chunks/index-DAM_gUwc.js +0 -77
  229. package/dist/_chunks/index-DAM_gUwc.js.map +0 -1
  230. package/dist/_chunks/it-C7z82V3g.mjs +0 -5
  231. package/dist/_chunks/it-C7z82V3g.mjs.map +0 -1
  232. package/dist/_chunks/it-DYpuAHa5.js +0 -5
  233. package/dist/_chunks/it-DYpuAHa5.js.map +0 -1
  234. package/dist/_chunks/ja-CiekkoEN.mjs +0 -26
  235. package/dist/_chunks/ja-CiekkoEN.mjs.map +0 -1
  236. package/dist/_chunks/ja-PL3WilO7.js +0 -26
  237. package/dist/_chunks/ja-PL3WilO7.js.map +0 -1
  238. package/dist/_chunks/ko-CJBkZ375.mjs +0 -26
  239. package/dist/_chunks/ko-CJBkZ375.mjs.map +0 -1
  240. package/dist/_chunks/ko-CL2BB_w_.js +0 -26
  241. package/dist/_chunks/ko-CL2BB_w_.js.map +0 -1
  242. package/dist/_chunks/ms-BGlHkuJz.js +0 -5
  243. package/dist/_chunks/ms-BGlHkuJz.js.map +0 -1
  244. package/dist/_chunks/ms-C1wNkEQw.mjs +0 -5
  245. package/dist/_chunks/ms-C1wNkEQw.mjs.map +0 -1
  246. package/dist/_chunks/nl-BuofSsmb.js +0 -5
  247. package/dist/_chunks/nl-BuofSsmb.js.map +0 -1
  248. package/dist/_chunks/nl-C79CwB4e.mjs +0 -5
  249. package/dist/_chunks/nl-C79CwB4e.mjs.map +0 -1
  250. package/dist/_chunks/pl-DXcJCevg.mjs +0 -26
  251. package/dist/_chunks/pl-DXcJCevg.mjs.map +0 -1
  252. package/dist/_chunks/pl-DdtXf3SH.js +0 -26
  253. package/dist/_chunks/pl-DdtXf3SH.js.map +0 -1
  254. package/dist/_chunks/pt-BR-B_ii8U63.js +0 -5
  255. package/dist/_chunks/pt-BR-B_ii8U63.js.map +0 -1
  256. package/dist/_chunks/pt-BR-DjINUWGk.mjs +0 -5
  257. package/dist/_chunks/pt-BR-DjINUWGk.mjs.map +0 -1
  258. package/dist/_chunks/pt-CzRDvk6c.js +0 -29
  259. package/dist/_chunks/pt-CzRDvk6c.js.map +0 -1
  260. package/dist/_chunks/pt-DEVCt2mt.mjs +0 -29
  261. package/dist/_chunks/pt-DEVCt2mt.mjs.map +0 -1
  262. package/dist/_chunks/ru-C_7wBr9e.mjs +0 -5
  263. package/dist/_chunks/ru-C_7wBr9e.mjs.map +0 -1
  264. package/dist/_chunks/ru-Dc-rSPqb.js +0 -5
  265. package/dist/_chunks/ru-Dc-rSPqb.js.map +0 -1
  266. package/dist/_chunks/sk-Cnpb4YOK.js +0 -5
  267. package/dist/_chunks/sk-Cnpb4YOK.js.map +0 -1
  268. package/dist/_chunks/sk-i1gQKUBN.mjs +0 -5
  269. package/dist/_chunks/sk-i1gQKUBN.mjs.map +0 -1
  270. package/dist/_chunks/th-BXTLF08M.js +0 -5
  271. package/dist/_chunks/th-BXTLF08M.js.map +0 -1
  272. package/dist/_chunks/th-D-MxpWKr.mjs +0 -5
  273. package/dist/_chunks/th-D-MxpWKr.mjs.map +0 -1
  274. package/dist/_chunks/tr-BXu41MLY.mjs +0 -29
  275. package/dist/_chunks/tr-BXu41MLY.mjs.map +0 -1
  276. package/dist/_chunks/tr-DwBySNgJ.js +0 -29
  277. package/dist/_chunks/tr-DwBySNgJ.js.map +0 -1
  278. package/dist/_chunks/uk-C_1qrLRM.mjs +0 -5
  279. package/dist/_chunks/uk-C_1qrLRM.mjs.map +0 -1
  280. package/dist/_chunks/uk-CxIePjBD.js +0 -5
  281. package/dist/_chunks/uk-CxIePjBD.js.map +0 -1
  282. package/dist/_chunks/vi-B4uqmjm6.js +0 -5
  283. package/dist/_chunks/vi-B4uqmjm6.js.map +0 -1
  284. package/dist/_chunks/vi-BfZkgFxI.mjs +0 -5
  285. package/dist/_chunks/vi-BfZkgFxI.mjs.map +0 -1
  286. package/dist/_chunks/zh-BS-XJCSt.mjs +0 -29
  287. package/dist/_chunks/zh-BS-XJCSt.mjs.map +0 -1
  288. package/dist/_chunks/zh-DsMIjTgu.js +0 -29
  289. package/dist/_chunks/zh-DsMIjTgu.js.map +0 -1
  290. package/dist/_chunks/zh-Hans-BLEEaLoN.mjs +0 -21
  291. package/dist/_chunks/zh-Hans-BLEEaLoN.mjs.map +0 -1
  292. package/dist/_chunks/zh-Hans-CmL3sY9o.js +0 -21
  293. package/dist/_chunks/zh-Hans-CmL3sY9o.js.map +0 -1
@@ -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":"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"}
1
+ {"version":3,"file":"index.mjs","sources":["../../server/src/index.ts"],"sourcesContent":["import { bootstrap } from './bootstrap';\nimport { services } from './services';\nimport { routes } from './routes';\nimport { controllers } from './controllers';\nimport { config } from './config';\nimport middlewares from './middlewares';\n\nexport default {\n bootstrap,\n services,\n routes,\n controllers,\n config,\n middlewares,\n};\n"],"names":["bootstrap","services","routes","controllers","config","middlewares"],"mappings":";;;;;;;AAOA,YAAe;AACbA,IAAAA,SAAAA;AACAC,IAAAA,QAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA,WAAAA;AACAC,IAAAA,MAAAA;AACAC,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,13 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var rateLimit = require('./rateLimit.js');
6
+
7
+ var middlewares = {
8
+ rateLimit
9
+ };
10
+
11
+ exports.rateLimit = rateLimit;
12
+ exports.default = middlewares;
13
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/middlewares/index.ts"],"sourcesContent":["import rateLimit from './rateLimit';\n\nexport { default as rateLimit } from './rateLimit';\n\nexport default {\n rateLimit,\n};\n"],"names":["rateLimit"],"mappings":";;;;;;AAIA,kBAAe;AACbA,IAAAA;AACF,CAAE;;;;;"}
@@ -0,0 +1,8 @@
1
+ import rateLimit from './rateLimit.mjs';
2
+
3
+ var middlewares = {
4
+ rateLimit
5
+ };
6
+
7
+ export { middlewares as default, rateLimit };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/middlewares/index.ts"],"sourcesContent":["import rateLimit from './rateLimit';\n\nexport { default as rateLimit } from './rateLimit';\n\nexport default {\n rateLimit,\n};\n"],"names":["rateLimit"],"mappings":";;AAIA,kBAAe;AACbA,IAAAA;AACF,CAAE;;;;"}
@@ -0,0 +1,37 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var fp = require('lodash/fp');
5
+
6
+ const { RateLimitError } = utils.errors;
7
+ var rateLimit = ((config, { strapi })=>async (ctx, next)=>{
8
+ const pluginConfig = strapi.config.get('plugin::email');
9
+ const rateLimitConfig = {
10
+ enabled: true,
11
+ ...pluginConfig.ratelimit || {}
12
+ };
13
+ if (rateLimitConfig.enabled === true) {
14
+ // TODO: TS - Do the dynamic import
15
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
16
+ const rateLimit = require('koa2-ratelimit').RateLimit;
17
+ const requestEmail = fp.get('request.body.email')(ctx);
18
+ const userEmail = fp.isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';
19
+ const loadConfig = {
20
+ interval: {
21
+ min: 5
22
+ },
23
+ max: 5,
24
+ prefixKey: `${userEmail}`,
25
+ handler () {
26
+ throw new RateLimitError();
27
+ },
28
+ ...rateLimitConfig,
29
+ ...config
30
+ };
31
+ return rateLimit.middleware(loadConfig)(ctx, next);
32
+ }
33
+ return next();
34
+ });
35
+
36
+ module.exports = rateLimit;
37
+ //# sourceMappingURL=rateLimit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimit.js","sources":["../../../server/src/middlewares/rateLimit.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport utils from '@strapi/utils';\nimport { isString, get } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nconst { RateLimitError } = utils.errors;\n\nexport default (config: any, { strapi }: { strapi: Core.Strapi }) =>\n async (ctx: Context, next: Next) => {\n const pluginConfig = strapi.config.get('plugin::email') as any;\n const rateLimitConfig = {\n enabled: true,\n ...(pluginConfig.ratelimit || {}),\n };\n\n if (rateLimitConfig.enabled === true) {\n // TODO: TS - Do the dynamic import\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const rateLimit = require('koa2-ratelimit').RateLimit;\n\n const requestEmail = get('request.body.email')(ctx);\n const userEmail = isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';\n\n const loadConfig = {\n interval: { min: 5 },\n max: 5,\n prefixKey: `${userEmail}`,\n handler() {\n throw new RateLimitError();\n },\n ...rateLimitConfig,\n ...config,\n };\n\n return rateLimit.middleware(loadConfig)(ctx, next);\n }\n\n return next();\n };\n"],"names":["RateLimitError","utils","errors","config","strapi","ctx","next","pluginConfig","get","rateLimitConfig","enabled","ratelimit","rateLimit","require","RateLimit","requestEmail","userEmail","isString","toLowerCase","loadConfig","interval","min","max","prefixKey","handler","middleware"],"mappings":";;;;;AAKA,MAAM,EAAEA,cAAc,EAAE,GAAGC,MAAMC,MAAM;AAEvC,gBAAe,CAAA,CAACC,MAAa,EAAA,EAAEC,MAAM,EAA2B,GAC9D,OAAOC,GAAcC,EAAAA,IAAAA,GAAAA;AACnB,QAAA,MAAMC,YAAeH,GAAAA,MAAAA,CAAOD,MAAM,CAACK,GAAG,CAAC,eAAA,CAAA;AACvC,QAAA,MAAMC,eAAkB,GAAA;YACtBC,OAAS,EAAA,IAAA;AACT,YAAA,GAAIH,YAAaI,CAAAA,SAAS,IAAI;AAChC,SAAA;QAEA,IAAIF,eAAAA,CAAgBC,OAAO,KAAK,IAAM,EAAA;;;YAGpC,MAAME,SAAAA,GAAYC,OAAQ,CAAA,gBAAA,CAAA,CAAkBC,SAAS;YAErD,MAAMC,YAAAA,GAAeP,OAAI,oBAAsBH,CAAAA,CAAAA,GAAAA,CAAAA;AAC/C,YAAA,MAAMW,SAAYC,GAAAA,WAAAA,CAASF,YAAgBA,CAAAA,GAAAA,YAAAA,CAAaG,WAAW,EAAK,GAAA,cAAA;AAExE,YAAA,MAAMC,UAAa,GAAA;gBACjBC,QAAU,EAAA;oBAAEC,GAAK,EAAA;AAAE,iBAAA;gBACnBC,GAAK,EAAA,CAAA;AACLC,gBAAAA,SAAAA,EAAW,GAAGP,SAAW,CAAA,CAAA;AACzBQ,gBAAAA,OAAAA,CAAAA,GAAAA;AACE,oBAAA,MAAM,IAAIxB,cAAAA,EAAAA;AACZ,iBAAA;AACA,gBAAA,GAAGS,eAAe;AAClB,gBAAA,GAAGN;AACL,aAAA;AAEA,YAAA,OAAOS,SAAUa,CAAAA,UAAU,CAACN,UAAAA,CAAAA,CAAYd,GAAKC,EAAAA,IAAAA,CAAAA;AAC/C;QAEA,OAAOA,IAAAA,EAAAA;AACT,KAAA;;;;"}
@@ -0,0 +1,35 @@
1
+ import utils from '@strapi/utils';
2
+ import { get, isString } from 'lodash/fp';
3
+
4
+ const { RateLimitError } = utils.errors;
5
+ var rateLimit = ((config, { strapi })=>async (ctx, next)=>{
6
+ const pluginConfig = strapi.config.get('plugin::email');
7
+ const rateLimitConfig = {
8
+ enabled: true,
9
+ ...pluginConfig.ratelimit || {}
10
+ };
11
+ if (rateLimitConfig.enabled === true) {
12
+ // TODO: TS - Do the dynamic import
13
+ // eslint-disable-next-line @typescript-eslint/no-var-requires
14
+ const rateLimit = require('koa2-ratelimit').RateLimit;
15
+ const requestEmail = get('request.body.email')(ctx);
16
+ const userEmail = isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';
17
+ const loadConfig = {
18
+ interval: {
19
+ min: 5
20
+ },
21
+ max: 5,
22
+ prefixKey: `${userEmail}`,
23
+ handler () {
24
+ throw new RateLimitError();
25
+ },
26
+ ...rateLimitConfig,
27
+ ...config
28
+ };
29
+ return rateLimit.middleware(loadConfig)(ctx, next);
30
+ }
31
+ return next();
32
+ });
33
+
34
+ export { rateLimit as default };
35
+ //# sourceMappingURL=rateLimit.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rateLimit.mjs","sources":["../../../server/src/middlewares/rateLimit.ts"],"sourcesContent":["import type { Context, Next } from 'koa';\nimport utils from '@strapi/utils';\nimport { isString, get } from 'lodash/fp';\nimport type { Core } from '@strapi/types';\n\nconst { RateLimitError } = utils.errors;\n\nexport default (config: any, { strapi }: { strapi: Core.Strapi }) =>\n async (ctx: Context, next: Next) => {\n const pluginConfig = strapi.config.get('plugin::email') as any;\n const rateLimitConfig = {\n enabled: true,\n ...(pluginConfig.ratelimit || {}),\n };\n\n if (rateLimitConfig.enabled === true) {\n // TODO: TS - Do the dynamic import\n // eslint-disable-next-line @typescript-eslint/no-var-requires\n const rateLimit = require('koa2-ratelimit').RateLimit;\n\n const requestEmail = get('request.body.email')(ctx);\n const userEmail = isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';\n\n const loadConfig = {\n interval: { min: 5 },\n max: 5,\n prefixKey: `${userEmail}`,\n handler() {\n throw new RateLimitError();\n },\n ...rateLimitConfig,\n ...config,\n };\n\n return rateLimit.middleware(loadConfig)(ctx, next);\n }\n\n return next();\n };\n"],"names":["RateLimitError","utils","errors","config","strapi","ctx","next","pluginConfig","get","rateLimitConfig","enabled","ratelimit","rateLimit","require","RateLimit","requestEmail","userEmail","isString","toLowerCase","loadConfig","interval","min","max","prefixKey","handler","middleware"],"mappings":";;;AAKA,MAAM,EAAEA,cAAc,EAAE,GAAGC,MAAMC,MAAM;AAEvC,gBAAe,CAAA,CAACC,MAAa,EAAA,EAAEC,MAAM,EAA2B,GAC9D,OAAOC,GAAcC,EAAAA,IAAAA,GAAAA;AACnB,QAAA,MAAMC,YAAeH,GAAAA,MAAAA,CAAOD,MAAM,CAACK,GAAG,CAAC,eAAA,CAAA;AACvC,QAAA,MAAMC,eAAkB,GAAA;YACtBC,OAAS,EAAA,IAAA;AACT,YAAA,GAAIH,YAAaI,CAAAA,SAAS,IAAI;AAChC,SAAA;QAEA,IAAIF,eAAAA,CAAgBC,OAAO,KAAK,IAAM,EAAA;;;YAGpC,MAAME,SAAAA,GAAYC,OAAQ,CAAA,gBAAA,CAAA,CAAkBC,SAAS;YAErD,MAAMC,YAAAA,GAAeP,IAAI,oBAAsBH,CAAAA,CAAAA,GAAAA,CAAAA;AAC/C,YAAA,MAAMW,SAAYC,GAAAA,QAAAA,CAASF,YAAgBA,CAAAA,GAAAA,YAAAA,CAAaG,WAAW,EAAK,GAAA,cAAA;AAExE,YAAA,MAAMC,UAAa,GAAA;gBACjBC,QAAU,EAAA;oBAAEC,GAAK,EAAA;AAAE,iBAAA;gBACnBC,GAAK,EAAA,CAAA;AACLC,gBAAAA,SAAAA,EAAW,GAAGP,SAAW,CAAA,CAAA;AACzBQ,gBAAAA,OAAAA,CAAAA,GAAAA;AACE,oBAAA,MAAM,IAAIxB,cAAAA,EAAAA;AACZ,iBAAA;AACA,gBAAA,GAAGS,eAAe;AAClB,gBAAA,GAAGN;AACL,aAAA;AAEA,YAAA,OAAOS,SAAUa,CAAAA,UAAU,CAACN,UAAAA,CAAAA,CAAYd,GAAKC,EAAAA,IAAAA,CAAAA;AAC/C;QAEA,OAAOA,IAAAA,EAAAA;AACT,KAAA;;;;"}
@@ -0,0 +1,56 @@
1
+ 'use strict';
2
+
3
+ var admin = {
4
+ type: 'admin',
5
+ routes: [
6
+ {
7
+ method: 'POST',
8
+ path: '/',
9
+ handler: 'email.send',
10
+ config: {
11
+ policies: [
12
+ 'admin::isAuthenticatedAdmin'
13
+ ]
14
+ }
15
+ },
16
+ {
17
+ method: 'POST',
18
+ path: '/test',
19
+ handler: 'email.test',
20
+ config: {
21
+ policies: [
22
+ 'admin::isAuthenticatedAdmin',
23
+ {
24
+ name: 'admin::hasPermissions',
25
+ config: {
26
+ actions: [
27
+ 'plugin::email.settings.read'
28
+ ]
29
+ }
30
+ }
31
+ ]
32
+ }
33
+ },
34
+ {
35
+ method: 'GET',
36
+ path: '/settings',
37
+ handler: 'email.getSettings',
38
+ config: {
39
+ policies: [
40
+ 'admin::isAuthenticatedAdmin',
41
+ {
42
+ name: 'admin::hasPermissions',
43
+ config: {
44
+ actions: [
45
+ 'plugin::email.settings.read'
46
+ ]
47
+ }
48
+ }
49
+ ]
50
+ }
51
+ }
52
+ ]
53
+ };
54
+
55
+ module.exports = admin;
56
+ //# sourceMappingURL=admin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.js","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["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"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":";;AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA,YAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,OAAA;YACNC,OAAS,EAAA,YAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBAAEC,IAAM,EAAA,uBAAA;wBAAyBF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA8B;AAAC;AAAE;AACvF;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,mBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBAAEC,IAAM,EAAA,uBAAA;wBAAyBF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA8B;AAAC;AAAE;AACvF;AACH;AACF;AACD;AACH,CAAE;;;;"}
@@ -0,0 +1,54 @@
1
+ var admin = {
2
+ type: 'admin',
3
+ routes: [
4
+ {
5
+ method: 'POST',
6
+ path: '/',
7
+ handler: 'email.send',
8
+ config: {
9
+ policies: [
10
+ 'admin::isAuthenticatedAdmin'
11
+ ]
12
+ }
13
+ },
14
+ {
15
+ method: 'POST',
16
+ path: '/test',
17
+ handler: 'email.test',
18
+ config: {
19
+ policies: [
20
+ 'admin::isAuthenticatedAdmin',
21
+ {
22
+ name: 'admin::hasPermissions',
23
+ config: {
24
+ actions: [
25
+ 'plugin::email.settings.read'
26
+ ]
27
+ }
28
+ }
29
+ ]
30
+ }
31
+ },
32
+ {
33
+ method: 'GET',
34
+ path: '/settings',
35
+ handler: 'email.getSettings',
36
+ config: {
37
+ policies: [
38
+ 'admin::isAuthenticatedAdmin',
39
+ {
40
+ name: 'admin::hasPermissions',
41
+ config: {
42
+ actions: [
43
+ 'plugin::email.settings.read'
44
+ ]
45
+ }
46
+ }
47
+ ]
48
+ }
49
+ }
50
+ ]
51
+ };
52
+
53
+ export { admin as default };
54
+ //# sourceMappingURL=admin.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"admin.mjs","sources":["../../../server/src/routes/admin.ts"],"sourcesContent":["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"],"names":["type","routes","method","path","handler","config","policies","name","actions"],"mappings":"AAAA,YAAe;IACbA,IAAM,EAAA,OAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA,YAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AAAC,oBAAA;AAA8B;AAC3C;AACF,SAAA;AACA,QAAA;YACEJ,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,OAAA;YACNC,OAAS,EAAA,YAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBAAEC,IAAM,EAAA,uBAAA;wBAAyBF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA8B;AAAC;AAAE;AACvF;AACH;AACF,SAAA;AACA,QAAA;YACEN,MAAQ,EAAA,KAAA;YACRC,IAAM,EAAA,WAAA;YACNC,OAAS,EAAA,mBAAA;YACTC,MAAQ,EAAA;gBACNC,QAAU,EAAA;AACR,oBAAA,6BAAA;AACA,oBAAA;wBAAEC,IAAM,EAAA,uBAAA;wBAAyBF,MAAQ,EAAA;4BAAEG,OAAS,EAAA;AAAC,gCAAA;AAA8B;AAAC;AAAE;AACvF;AACH;AACF;AACD;AACH,CAAE;;;;"}
@@ -0,0 +1,24 @@
1
+ 'use strict';
2
+
3
+ var utils = require('@strapi/utils');
4
+ var email = require('./validation/email.js');
5
+
6
+ const createRoutes = utils.createContentApiRoutesFactory(()=>{
7
+ const validator = new email.EmailRouteValidator(strapi);
8
+ return [
9
+ {
10
+ method: 'POST',
11
+ path: '/',
12
+ handler: 'email.send',
13
+ request: {
14
+ body: {
15
+ 'application/json': validator.sendEmailInput
16
+ }
17
+ },
18
+ response: validator.emailResponse
19
+ }
20
+ ];
21
+ });
22
+
23
+ module.exports = createRoutes;
24
+ //# sourceMappingURL=content-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-api.js","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { createContentApiRoutesFactory } from '@strapi/utils';\nimport { EmailRouteValidator } from './validation';\n\nconst createRoutes = createContentApiRoutesFactory((): Core.RouterInput['routes'] => {\n const validator = new EmailRouteValidator(strapi);\n\n return [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n request: {\n body: { 'application/json': validator.sendEmailInput },\n },\n response: validator.emailResponse,\n },\n ];\n});\n\nexport default createRoutes;\n"],"names":["createRoutes","createContentApiRoutesFactory","validator","EmailRouteValidator","strapi","method","path","handler","request","body","sendEmailInput","response","emailResponse"],"mappings":";;;;;AAIA,MAAMA,eAAeC,mCAA8B,CAAA,IAAA;IACjD,MAAMC,SAAAA,GAAY,IAAIC,yBAAoBC,CAAAA,MAAAA,CAAAA;IAE1C,OAAO;AACL,QAAA;YACEC,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA,YAAA;YACTC,OAAS,EAAA;gBACPC,IAAM,EAAA;AAAE,oBAAA,kBAAA,EAAoBP,UAAUQ;AAAe;AACvD,aAAA;AACAC,YAAAA,QAAAA,EAAUT,UAAUU;AACtB;AACD,KAAA;AACH,CAAA;;;;"}
@@ -0,0 +1,22 @@
1
+ import { createContentApiRoutesFactory } from '@strapi/utils';
2
+ import { EmailRouteValidator } from './validation/email.mjs';
3
+
4
+ const createRoutes = createContentApiRoutesFactory(()=>{
5
+ const validator = new EmailRouteValidator(strapi);
6
+ return [
7
+ {
8
+ method: 'POST',
9
+ path: '/',
10
+ handler: 'email.send',
11
+ request: {
12
+ body: {
13
+ 'application/json': validator.sendEmailInput
14
+ }
15
+ },
16
+ response: validator.emailResponse
17
+ }
18
+ ];
19
+ });
20
+
21
+ export { createRoutes as default };
22
+ //# sourceMappingURL=content-api.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content-api.mjs","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport { createContentApiRoutesFactory } from '@strapi/utils';\nimport { EmailRouteValidator } from './validation';\n\nconst createRoutes = createContentApiRoutesFactory((): Core.RouterInput['routes'] => {\n const validator = new EmailRouteValidator(strapi);\n\n return [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n request: {\n body: { 'application/json': validator.sendEmailInput },\n },\n response: validator.emailResponse,\n },\n ];\n});\n\nexport default createRoutes;\n"],"names":["createRoutes","createContentApiRoutesFactory","validator","EmailRouteValidator","strapi","method","path","handler","request","body","sendEmailInput","response","emailResponse"],"mappings":";;;AAIA,MAAMA,eAAeC,6BAA8B,CAAA,IAAA;IACjD,MAAMC,SAAAA,GAAY,IAAIC,mBAAoBC,CAAAA,MAAAA,CAAAA;IAE1C,OAAO;AACL,QAAA;YACEC,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA,YAAA;YACTC,OAAS,EAAA;gBACPC,IAAM,EAAA;AAAE,oBAAA,kBAAA,EAAoBP,UAAUQ;AAAe;AACvD,aAAA;AACAC,YAAAA,QAAAA,EAAUT,UAAUU;AACtB;AACD,KAAA;AACH,CAAA;;;;"}
@@ -0,0 +1,12 @@
1
+ 'use strict';
2
+
3
+ var admin = require('./admin.js');
4
+ var contentApi = require('./content-api.js');
5
+
6
+ const routes = {
7
+ admin,
8
+ 'content-api': contentApi
9
+ };
10
+
11
+ exports.routes = routes;
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import admin from './admin';\nimport contentApi from './content-api';\n\nexport const routes = {\n admin,\n 'content-api': contentApi,\n};\n"],"names":["routes","admin","contentApi"],"mappings":";;;;;MAGaA,MAAS,GAAA;AACpBC,IAAAA,KAAAA;IACA,aAAeC,EAAAA;AACjB;;;;"}
@@ -0,0 +1,10 @@
1
+ import admin from './admin.mjs';
2
+ import createRoutes from './content-api.mjs';
3
+
4
+ const routes = {
5
+ admin,
6
+ 'content-api': createRoutes
7
+ };
8
+
9
+ export { routes };
10
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/routes/index.ts"],"sourcesContent":["import admin from './admin';\nimport contentApi from './content-api';\n\nexport const routes = {\n admin,\n 'content-api': contentApi,\n};\n"],"names":["routes","admin","contentApi"],"mappings":";;;MAGaA,MAAS,GAAA;AACpBC,IAAAA,KAAAA;IACA,aAAeC,EAAAA;AACjB;;;;"}
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ var z = require('zod/v4');
4
+
5
+ function _interopNamespaceDefault(e) {
6
+ var n = Object.create(null);
7
+ if (e) {
8
+ Object.keys(e).forEach(function (k) {
9
+ if (k !== 'default') {
10
+ var d = Object.getOwnPropertyDescriptor(e, k);
11
+ Object.defineProperty(n, k, d.get ? d : {
12
+ enumerable: true,
13
+ get: function () { return e[k]; }
14
+ });
15
+ }
16
+ });
17
+ }
18
+ n.default = e;
19
+ return Object.freeze(n);
20
+ }
21
+
22
+ var z__namespace = /*#__PURE__*/_interopNamespaceDefault(z);
23
+
24
+ class EmailRouteValidator {
25
+ get sendEmailInput() {
26
+ return z__namespace.object({
27
+ from: z__namespace.string().optional(),
28
+ to: z__namespace.string(),
29
+ cc: z__namespace.string().optional(),
30
+ bcc: z__namespace.string().optional(),
31
+ replyTo: z__namespace.string().optional(),
32
+ subject: z__namespace.string(),
33
+ text: z__namespace.string(),
34
+ html: z__namespace.string().optional()
35
+ }).catchall(z__namespace.string());
36
+ }
37
+ get emailResponse() {
38
+ return z__namespace.object({});
39
+ }
40
+ constructor(strapi){
41
+ this._strapi = strapi;
42
+ }
43
+ }
44
+
45
+ exports.EmailRouteValidator = EmailRouteValidator;
46
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sources":["../../../../server/src/routes/validation/email.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport * as z from 'zod/v4';\n\nexport class EmailRouteValidator {\n protected readonly _strapi: Core.Strapi;\n\n public constructor(strapi: Core.Strapi) {\n this._strapi = strapi;\n }\n\n get sendEmailInput() {\n return z\n .object({\n from: z.string().optional(),\n to: z.string(),\n cc: z.string().optional(),\n bcc: z.string().optional(),\n replyTo: z.string().optional(),\n subject: z.string(),\n text: z.string(),\n html: z.string().optional(),\n })\n .catchall(z.string());\n }\n\n get emailResponse() {\n return z.object({});\n }\n}\n"],"names":["EmailRouteValidator","sendEmailInput","z","object","from","string","optional","to","cc","bcc","replyTo","subject","text","html","catchall","emailResponse","strapi","_strapi"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;AAGO,MAAMA,mBAAAA,CAAAA;AAOX,IAAA,IAAIC,cAAiB,GAAA;QACnB,OAAOC,YAAAA,CACJC,MAAM,CAAC;YACNC,IAAMF,EAAAA,YAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACzBC,YAAAA,EAAAA,EAAIL,aAAEG,MAAM,EAAA;YACZG,EAAIN,EAAAA,YAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;YACvBG,GAAKP,EAAAA,YAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;YACxBI,OAASR,EAAAA,YAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BK,YAAAA,OAAAA,EAAST,aAAEG,MAAM,EAAA;AACjBO,YAAAA,IAAAA,EAAMV,aAAEG,MAAM,EAAA;YACdQ,IAAMX,EAAAA,YAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ;SAE1BQ,CAAAA,CAAAA,QAAQ,CAACZ,YAAAA,CAAEG,MAAM,EAAA,CAAA;AACtB;AAEA,IAAA,IAAIU,aAAgB,GAAA;QAClB,OAAOb,YAAAA,CAAEC,MAAM,CAAC,EAAC,CAAA;AACnB;AArBA,IAAA,WAAA,CAAmBa,MAAmB,CAAE;QACtC,IAAI,CAACC,OAAO,GAAGD,MAAAA;AACjB;AAoBF;;;;"}
@@ -0,0 +1,25 @@
1
+ import * as z from 'zod/v4';
2
+
3
+ class EmailRouteValidator {
4
+ get sendEmailInput() {
5
+ return z.object({
6
+ from: z.string().optional(),
7
+ to: z.string(),
8
+ cc: z.string().optional(),
9
+ bcc: z.string().optional(),
10
+ replyTo: z.string().optional(),
11
+ subject: z.string(),
12
+ text: z.string(),
13
+ html: z.string().optional()
14
+ }).catchall(z.string());
15
+ }
16
+ get emailResponse() {
17
+ return z.object({});
18
+ }
19
+ constructor(strapi){
20
+ this._strapi = strapi;
21
+ }
22
+ }
23
+
24
+ export { EmailRouteValidator };
25
+ //# sourceMappingURL=email.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.mjs","sources":["../../../../server/src/routes/validation/email.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport * as z from 'zod/v4';\n\nexport class EmailRouteValidator {\n protected readonly _strapi: Core.Strapi;\n\n public constructor(strapi: Core.Strapi) {\n this._strapi = strapi;\n }\n\n get sendEmailInput() {\n return z\n .object({\n from: z.string().optional(),\n to: z.string(),\n cc: z.string().optional(),\n bcc: z.string().optional(),\n replyTo: z.string().optional(),\n subject: z.string(),\n text: z.string(),\n html: z.string().optional(),\n })\n .catchall(z.string());\n }\n\n get emailResponse() {\n return z.object({});\n }\n}\n"],"names":["EmailRouteValidator","sendEmailInput","z","object","from","string","optional","to","cc","bcc","replyTo","subject","text","html","catchall","emailResponse","strapi","_strapi"],"mappings":";;AAGO,MAAMA,mBAAAA,CAAAA;AAOX,IAAA,IAAIC,cAAiB,GAAA;QACnB,OAAOC,CAAAA,CACJC,MAAM,CAAC;YACNC,IAAMF,EAAAA,CAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;AACzBC,YAAAA,EAAAA,EAAIL,EAAEG,MAAM,EAAA;YACZG,EAAIN,EAAAA,CAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;YACvBG,GAAKP,EAAAA,CAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;YACxBI,OAASR,EAAAA,CAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ,EAAA;AAC5BK,YAAAA,OAAAA,EAAST,EAAEG,MAAM,EAAA;AACjBO,YAAAA,IAAAA,EAAMV,EAAEG,MAAM,EAAA;YACdQ,IAAMX,EAAAA,CAAAA,CAAEG,MAAM,EAAA,CAAGC,QAAQ;SAE1BQ,CAAAA,CAAAA,QAAQ,CAACZ,CAAAA,CAAEG,MAAM,EAAA,CAAA;AACtB;AAEA,IAAA,IAAIU,aAAgB,GAAA;QAClB,OAAOb,CAAAA,CAAEC,MAAM,CAAC,EAAC,CAAA;AACnB;AArBA,IAAA,WAAA,CAAmBa,MAAmB,CAAE;QACtC,IAAI,CAACC,OAAO,GAAGD,MAAAA;AACjB;AAoBF;;;;"}
@@ -0,0 +1,63 @@
1
+ 'use strict';
2
+
3
+ var _ = require('lodash');
4
+ var utils = require('@strapi/utils');
5
+
6
+ function _interopNamespaceDefault(e) {
7
+ var n = Object.create(null);
8
+ if (e) {
9
+ Object.keys(e).forEach(function (k) {
10
+ if (k !== 'default') {
11
+ var d = Object.getOwnPropertyDescriptor(e, k);
12
+ Object.defineProperty(n, k, d.get ? d : {
13
+ enumerable: true,
14
+ get: function () { return e[k]; }
15
+ });
16
+ }
17
+ });
18
+ }
19
+ n.default = e;
20
+ return Object.freeze(n);
21
+ }
22
+
23
+ var ___namespace = /*#__PURE__*/_interopNamespaceDefault(_);
24
+
25
+ const { createStrictInterpolationRegExp } = utils.template;
26
+ const getProviderSettings = ()=>strapi.config.get('plugin::email');
27
+ const send = async (options)=>strapi.plugin('email').provider.send(options);
28
+ /**
29
+ * fill subject, text and html using lodash template
30
+ * @param {object} emailOptions - to, from and replyto...
31
+ * @param {object} emailTemplate - object containing attributes to fill
32
+ * @param {object} data - data used to fill the template
33
+ * @returns {{ subject, text, subject }}
34
+ */ const sendTemplatedEmail = (emailOptions, emailTemplate, data)=>{
35
+ const attributes = [
36
+ 'subject',
37
+ 'text',
38
+ 'html'
39
+ ];
40
+ const missingAttributes = ___namespace.difference(attributes, Object.keys(emailTemplate));
41
+ if (missingAttributes.length > 0) {
42
+ throw new Error(`Following attributes are missing from your email template : ${missingAttributes.join(', ')}`);
43
+ }
44
+ const allowedInterpolationVariables = utils.objects.keysDeep(data);
45
+ const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');
46
+ const templatedAttributes = attributes.reduce((compiled, attribute)=>emailTemplate[attribute] ? Object.assign(compiled, {
47
+ [attribute]: ___namespace.template(emailTemplate[attribute], {
48
+ interpolate
49
+ })(data)
50
+ }) : compiled, {});
51
+ return strapi.plugin('email').provider.send({
52
+ ...emailOptions,
53
+ ...templatedAttributes
54
+ });
55
+ };
56
+ const emailService = ()=>({
57
+ getProviderSettings,
58
+ send,
59
+ sendTemplatedEmail
60
+ });
61
+
62
+ module.exports = emailService;
63
+ //# sourceMappingURL=email.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.js","sources":["../../../server/src/services/email.ts"],"sourcesContent":["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"],"names":["createStrictInterpolationRegExp","template","getProviderSettings","strapi","config","get","send","options","plugin","provider","sendTemplatedEmail","emailOptions","emailTemplate","data","attributes","missingAttributes","_","difference","Object","keys","length","Error","join","allowedInterpolationVariables","objects","keysDeep","interpolate","templatedAttributes","reduce","compiled","attribute","assign","emailService"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;AAWA,MAAM,EAAEA,+BAA+B,EAAE,GAAGC,cAAAA;AAE5C,MAAMC,sBAAsB,IAAmBC,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AAEjE,MAAMC,IAAAA,GAAO,OAAOC,OAAAA,GAAyBJ,MAAOK,CAAAA,MAAM,CAAC,OAASC,CAAAA,CAAAA,QAAQ,CAACH,IAAI,CAACC,OAAAA,CAAAA;AAElF;;;;;;AAMC,IACD,MAAMG,kBAAAA,GAAqB,CACzBC,YAAAA,EACAC,aACAC,EAAAA,IAAAA,GAAAA;AAEA,IAAA,MAAMC,UAAa,GAAA;AAAC,QAAA,SAAA;AAAW,QAAA,MAAA;AAAQ,QAAA;AAAO,KAAA;AAC9C,IAAA,MAAMC,oBAAoBC,YAAEC,CAAAA,UAAU,CAACH,UAAYI,EAAAA,MAAAA,CAAOC,IAAI,CAACP,aAAAA,CAAAA,CAAAA;IAE/D,IAAIG,iBAAAA,CAAkBK,MAAM,GAAG,CAAG,EAAA;QAChC,MAAM,IAAIC,MACR,CAAC,4DAA4D,EAAEN,iBAAkBO,CAAAA,IAAI,CAAC,IAAO,CAAA,CAAA,CAAA,CAAA;AAEjG;IAEA,MAAMC,6BAAAA,GAAgCC,aAAQC,CAAAA,QAAQ,CAACZ,IAAAA,CAAAA;IACvD,MAAMa,WAAAA,GAAc1B,gCAAgCuB,6BAA+B,EAAA,GAAA,CAAA;AAEnF,IAAA,MAAMI,mBAAsBb,GAAAA,UAAAA,CAAWc,MAAM,CAC3C,CAACC,QAAUC,EAAAA,SAAAA,GACTlB,aAAa,CAACkB,SAAU,CAAA,GACpBZ,MAAOa,CAAAA,MAAM,CAACF,QAAU,EAAA;YACtB,CAACC,SAAAA,GAAYd,YAAEf,CAAAA,QAAQ,CAACW,aAAa,CAACkB,UAAU,EAAE;AAChDJ,gBAAAA;aACCb,CAAAA,CAAAA,IAAAA;AACL,SAAA,CAAA,GACAgB,UACN,EAAC,CAAA;AAGH,IAAA,OAAO1B,OAAOK,MAAM,CAAC,SAASC,QAAQ,CAACH,IAAI,CAAC;AAAE,QAAA,GAAGK,YAAY;AAAE,QAAA,GAAGgB;AAAoB,KAAA,CAAA;AACxF,CAAA;AAEMK,MAAAA,YAAAA,GAAe,KAAO;AAC1B9B,QAAAA,mBAAAA;AACAI,QAAAA,IAAAA;AACAI,QAAAA;KACF;;;;"}
@@ -0,0 +1,42 @@
1
+ import * as _ from 'lodash';
2
+ import { objects, template } from '@strapi/utils';
3
+
4
+ const { createStrictInterpolationRegExp } = template;
5
+ const getProviderSettings = ()=>strapi.config.get('plugin::email');
6
+ const send = async (options)=>strapi.plugin('email').provider.send(options);
7
+ /**
8
+ * fill subject, text and html using lodash template
9
+ * @param {object} emailOptions - to, from and replyto...
10
+ * @param {object} emailTemplate - object containing attributes to fill
11
+ * @param {object} data - data used to fill the template
12
+ * @returns {{ subject, text, subject }}
13
+ */ const sendTemplatedEmail = (emailOptions, emailTemplate, data)=>{
14
+ const attributes = [
15
+ 'subject',
16
+ 'text',
17
+ 'html'
18
+ ];
19
+ const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));
20
+ if (missingAttributes.length > 0) {
21
+ throw new Error(`Following attributes are missing from your email template : ${missingAttributes.join(', ')}`);
22
+ }
23
+ const allowedInterpolationVariables = objects.keysDeep(data);
24
+ const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');
25
+ const templatedAttributes = attributes.reduce((compiled, attribute)=>emailTemplate[attribute] ? Object.assign(compiled, {
26
+ [attribute]: _.template(emailTemplate[attribute], {
27
+ interpolate
28
+ })(data)
29
+ }) : compiled, {});
30
+ return strapi.plugin('email').provider.send({
31
+ ...emailOptions,
32
+ ...templatedAttributes
33
+ });
34
+ };
35
+ const emailService = ()=>({
36
+ getProviderSettings,
37
+ send,
38
+ sendTemplatedEmail
39
+ });
40
+
41
+ export { emailService as default };
42
+ //# sourceMappingURL=email.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.mjs","sources":["../../../server/src/services/email.ts"],"sourcesContent":["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"],"names":["createStrictInterpolationRegExp","template","getProviderSettings","strapi","config","get","send","options","plugin","provider","sendTemplatedEmail","emailOptions","emailTemplate","data","attributes","missingAttributes","_","difference","Object","keys","length","Error","join","allowedInterpolationVariables","objects","keysDeep","interpolate","templatedAttributes","reduce","compiled","attribute","assign","emailService"],"mappings":";;;AAWA,MAAM,EAAEA,+BAA+B,EAAE,GAAGC,QAAAA;AAE5C,MAAMC,sBAAsB,IAAmBC,MAAAA,CAAOC,MAAM,CAACC,GAAG,CAAC,eAAA,CAAA;AAEjE,MAAMC,IAAAA,GAAO,OAAOC,OAAAA,GAAyBJ,MAAOK,CAAAA,MAAM,CAAC,OAASC,CAAAA,CAAAA,QAAQ,CAACH,IAAI,CAACC,OAAAA,CAAAA;AAElF;;;;;;AAMC,IACD,MAAMG,kBAAAA,GAAqB,CACzBC,YAAAA,EACAC,aACAC,EAAAA,IAAAA,GAAAA;AAEA,IAAA,MAAMC,UAAa,GAAA;AAAC,QAAA,SAAA;AAAW,QAAA,MAAA;AAAQ,QAAA;AAAO,KAAA;AAC9C,IAAA,MAAMC,oBAAoBC,CAAEC,CAAAA,UAAU,CAACH,UAAYI,EAAAA,MAAAA,CAAOC,IAAI,CAACP,aAAAA,CAAAA,CAAAA;IAE/D,IAAIG,iBAAAA,CAAkBK,MAAM,GAAG,CAAG,EAAA;QAChC,MAAM,IAAIC,MACR,CAAC,4DAA4D,EAAEN,iBAAkBO,CAAAA,IAAI,CAAC,IAAO,CAAA,CAAA,CAAA,CAAA;AAEjG;IAEA,MAAMC,6BAAAA,GAAgCC,OAAQC,CAAAA,QAAQ,CAACZ,IAAAA,CAAAA;IACvD,MAAMa,WAAAA,GAAc1B,gCAAgCuB,6BAA+B,EAAA,GAAA,CAAA;AAEnF,IAAA,MAAMI,mBAAsBb,GAAAA,UAAAA,CAAWc,MAAM,CAC3C,CAACC,QAAUC,EAAAA,SAAAA,GACTlB,aAAa,CAACkB,SAAU,CAAA,GACpBZ,MAAOa,CAAAA,MAAM,CAACF,QAAU,EAAA;YACtB,CAACC,SAAAA,GAAYd,CAAEf,CAAAA,QAAQ,CAACW,aAAa,CAACkB,UAAU,EAAE;AAChDJ,gBAAAA;aACCb,CAAAA,CAAAA,IAAAA;AACL,SAAA,CAAA,GACAgB,UACN,EAAC,CAAA;AAGH,IAAA,OAAO1B,OAAOK,MAAM,CAAC,SAASC,QAAQ,CAACH,IAAI,CAAC;AAAE,QAAA,GAAGK,YAAY;AAAE,QAAA,GAAGgB;AAAoB,KAAA,CAAA;AACxF,CAAA;AAEMK,MAAAA,YAAAA,GAAe,KAAO;AAC1B9B,QAAAA,mBAAAA;AACAI,QAAAA,IAAAA;AACAI,QAAAA;KACF;;;;"}
@@ -0,0 +1,10 @@
1
+ 'use strict';
2
+
3
+ var email = require('./email.js');
4
+
5
+ const services = {
6
+ email
7
+ };
8
+
9
+ exports.services = services;
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import email from './email';\n\nexport const services = { email };\n"],"names":["services","email"],"mappings":";;;;MAEaA,QAAW,GAAA;AAAEC,IAAAA;AAAM;;;;"}
@@ -0,0 +1,8 @@
1
+ import emailService from './email.mjs';
2
+
3
+ const services = {
4
+ email: emailService
5
+ };
6
+
7
+ export { services };
8
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","sources":["../../../server/src/services/index.ts"],"sourcesContent":["import email from './email';\n\nexport const services = { email };\n"],"names":["services","email"],"mappings":";;MAEaA,QAAW,GAAA;AAAEC,WAAAA;AAAM;;;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AA6C1C,eAAO,MAAM,SAAS,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAgBlE,CAAC"}
1
+ {"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../../../server/src/bootstrap.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAiD1C,eAAO,MAAM,SAAS,eAAsB;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,kBAgBlE,CAAC"}