@strapi/email 0.0.0-next.39c0188c3aa01bec7b64b948211571d5159e811d → 0.0.0-next.3a1d87a9c3b1d4d89f741c6ecd7f501230fd8d76

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/_chunks/Settings-DKhINVfQ.mjs +281 -0
  2. package/dist/_chunks/Settings-DKhINVfQ.mjs.map +1 -0
  3. package/dist/_chunks/Settings-DzVN5TCM.js +299 -0
  4. package/dist/_chunks/Settings-DzVN5TCM.js.map +1 -0
  5. package/dist/_chunks/ar-Bf9XlLLo.mjs +5 -0
  6. package/dist/_chunks/ar-Bf9XlLLo.mjs.map +1 -0
  7. package/dist/_chunks/ar-C_tQu1XS.js +5 -0
  8. package/dist/_chunks/ar-C_tQu1XS.js.map +1 -0
  9. package/dist/_chunks/cs-B0QZJTah.mjs +5 -0
  10. package/dist/_chunks/cs-B0QZJTah.mjs.map +1 -0
  11. package/dist/_chunks/cs-CPKIUWLp.js +5 -0
  12. package/dist/_chunks/cs-CPKIUWLp.js.map +1 -0
  13. package/dist/_chunks/de-B9kiAC-s.mjs +5 -0
  14. package/dist/_chunks/de-B9kiAC-s.mjs.map +1 -0
  15. package/dist/_chunks/de-K6IYQk2d.js +5 -0
  16. package/dist/_chunks/de-K6IYQk2d.js.map +1 -0
  17. package/dist/_chunks/dk-31mOPYpI.js +26 -0
  18. package/dist/_chunks/dk-31mOPYpI.js.map +1 -0
  19. package/dist/_chunks/dk-DqrbgSkv.mjs +26 -0
  20. package/dist/_chunks/dk-DqrbgSkv.mjs.map +1 -0
  21. package/dist/_chunks/en-BCu4d6-o.js +29 -0
  22. package/dist/_chunks/en-BCu4d6-o.js.map +1 -0
  23. package/dist/_chunks/en-DF4KtAAC.mjs +29 -0
  24. package/dist/_chunks/en-DF4KtAAC.mjs.map +1 -0
  25. package/dist/_chunks/es-BNo7eLLJ.mjs +26 -0
  26. package/dist/_chunks/es-BNo7eLLJ.mjs.map +1 -0
  27. package/dist/_chunks/es-Dl2HVmwz.js +26 -0
  28. package/dist/_chunks/es-Dl2HVmwz.js.map +1 -0
  29. package/dist/_chunks/fr-C8Qw4iPZ.js +5 -0
  30. package/dist/_chunks/fr-C8Qw4iPZ.js.map +1 -0
  31. package/dist/_chunks/fr-hkSxFuzl.mjs +5 -0
  32. package/dist/_chunks/fr-hkSxFuzl.mjs.map +1 -0
  33. package/dist/_chunks/id-CHtAzAUz.mjs +5 -0
  34. package/dist/_chunks/id-CHtAzAUz.mjs.map +1 -0
  35. package/dist/_chunks/id-CvE5f0zz.js +5 -0
  36. package/dist/_chunks/id-CvE5f0zz.js.map +1 -0
  37. package/dist/_chunks/index-BcbwpIZL.js +84 -0
  38. package/dist/_chunks/index-BcbwpIZL.js.map +1 -0
  39. package/dist/_chunks/index-D0n2_0zm.mjs +85 -0
  40. package/dist/_chunks/index-D0n2_0zm.mjs.map +1 -0
  41. package/dist/_chunks/it-C7z82V3g.mjs +5 -0
  42. package/dist/_chunks/it-C7z82V3g.mjs.map +1 -0
  43. package/dist/_chunks/it-DYpuAHa5.js +5 -0
  44. package/dist/_chunks/it-DYpuAHa5.js.map +1 -0
  45. package/dist/_chunks/ja-CiekkoEN.mjs +26 -0
  46. package/dist/_chunks/ja-CiekkoEN.mjs.map +1 -0
  47. package/dist/_chunks/ja-PL3WilO7.js +26 -0
  48. package/dist/_chunks/ja-PL3WilO7.js.map +1 -0
  49. package/dist/_chunks/ko-CJBkZ375.mjs +26 -0
  50. package/dist/_chunks/ko-CJBkZ375.mjs.map +1 -0
  51. package/dist/_chunks/ko-CL2BB_w_.js +26 -0
  52. package/dist/_chunks/ko-CL2BB_w_.js.map +1 -0
  53. package/dist/_chunks/ms-BGlHkuJz.js +5 -0
  54. package/dist/_chunks/ms-BGlHkuJz.js.map +1 -0
  55. package/dist/_chunks/ms-C1wNkEQw.mjs +5 -0
  56. package/dist/_chunks/ms-C1wNkEQw.mjs.map +1 -0
  57. package/dist/_chunks/nl-BuofSsmb.js +5 -0
  58. package/dist/_chunks/nl-BuofSsmb.js.map +1 -0
  59. package/dist/_chunks/nl-C79CwB4e.mjs +5 -0
  60. package/dist/_chunks/nl-C79CwB4e.mjs.map +1 -0
  61. package/dist/_chunks/pl-DXcJCevg.mjs +26 -0
  62. package/dist/_chunks/pl-DXcJCevg.mjs.map +1 -0
  63. package/dist/_chunks/pl-DdtXf3SH.js +26 -0
  64. package/dist/_chunks/pl-DdtXf3SH.js.map +1 -0
  65. package/dist/_chunks/pt-BR-B_ii8U63.js +5 -0
  66. package/dist/_chunks/pt-BR-B_ii8U63.js.map +1 -0
  67. package/dist/_chunks/pt-BR-DjINUWGk.mjs +5 -0
  68. package/dist/_chunks/pt-BR-DjINUWGk.mjs.map +1 -0
  69. package/dist/_chunks/pt-CzRDvk6c.js +29 -0
  70. package/dist/_chunks/pt-CzRDvk6c.js.map +1 -0
  71. package/dist/_chunks/pt-DEVCt2mt.mjs +29 -0
  72. package/dist/_chunks/pt-DEVCt2mt.mjs.map +1 -0
  73. package/dist/_chunks/ru-C_7wBr9e.mjs +5 -0
  74. package/dist/_chunks/ru-C_7wBr9e.mjs.map +1 -0
  75. package/dist/_chunks/ru-Dc-rSPqb.js +5 -0
  76. package/dist/_chunks/ru-Dc-rSPqb.js.map +1 -0
  77. package/dist/_chunks/sk-Cnpb4YOK.js +5 -0
  78. package/dist/_chunks/sk-Cnpb4YOK.js.map +1 -0
  79. package/dist/_chunks/sk-i1gQKUBN.mjs +5 -0
  80. package/dist/_chunks/sk-i1gQKUBN.mjs.map +1 -0
  81. package/dist/_chunks/th-BXTLF08M.js +5 -0
  82. package/dist/_chunks/th-BXTLF08M.js.map +1 -0
  83. package/dist/_chunks/th-D-MxpWKr.mjs +5 -0
  84. package/dist/_chunks/th-D-MxpWKr.mjs.map +1 -0
  85. package/dist/_chunks/tr-BXu41MLY.mjs +29 -0
  86. package/dist/_chunks/tr-BXu41MLY.mjs.map +1 -0
  87. package/dist/_chunks/tr-DwBySNgJ.js +29 -0
  88. package/dist/_chunks/tr-DwBySNgJ.js.map +1 -0
  89. package/dist/_chunks/uk-C_1qrLRM.mjs +5 -0
  90. package/dist/_chunks/uk-C_1qrLRM.mjs.map +1 -0
  91. package/dist/_chunks/uk-CxIePjBD.js +5 -0
  92. package/dist/_chunks/uk-CxIePjBD.js.map +1 -0
  93. package/dist/_chunks/vi-B4uqmjm6.js +5 -0
  94. package/dist/_chunks/vi-B4uqmjm6.js.map +1 -0
  95. package/dist/_chunks/vi-BfZkgFxI.mjs +5 -0
  96. package/dist/_chunks/vi-BfZkgFxI.mjs.map +1 -0
  97. package/dist/_chunks/zh-BS-XJCSt.mjs +29 -0
  98. package/dist/_chunks/zh-BS-XJCSt.mjs.map +1 -0
  99. package/dist/_chunks/zh-DsMIjTgu.js +29 -0
  100. package/dist/_chunks/zh-DsMIjTgu.js.map +1 -0
  101. package/dist/_chunks/zh-Hans-BLEEaLoN.mjs +21 -0
  102. package/dist/_chunks/zh-Hans-BLEEaLoN.mjs.map +1 -0
  103. package/dist/_chunks/zh-Hans-CmL3sY9o.js +21 -0
  104. package/dist/_chunks/zh-Hans-CmL3sY9o.js.map +1 -0
  105. package/dist/admin/index.js +2 -6
  106. package/dist/admin/index.js.map +1 -1
  107. package/dist/admin/index.mjs +4 -1
  108. package/dist/admin/index.mjs.map +1 -1
  109. package/dist/server/index.js +180 -226
  110. package/dist/server/index.js.map +1 -1
  111. package/dist/server/index.mjs +173 -215
  112. package/dist/server/index.mjs.map +1 -1
  113. package/dist/shared/types.d.ts +1 -0
  114. package/package.json +8 -11
  115. package/dist/admin/chunks/Settings-D8WJjMq7.js +0 -383
  116. package/dist/admin/chunks/Settings-D8WJjMq7.js.map +0 -1
  117. package/dist/admin/chunks/Settings-DE939EJl.js +0 -362
  118. package/dist/admin/chunks/Settings-DE939EJl.js.map +0 -1
  119. package/dist/admin/chunks/ar-BDHMRt_b.js +0 -6
  120. package/dist/admin/chunks/ar-BDHMRt_b.js.map +0 -1
  121. package/dist/admin/chunks/ar-JWJKrFM-.js +0 -4
  122. package/dist/admin/chunks/ar-JWJKrFM-.js.map +0 -1
  123. package/dist/admin/chunks/cs-BZCMeXgq.js +0 -4
  124. package/dist/admin/chunks/cs-BZCMeXgq.js.map +0 -1
  125. package/dist/admin/chunks/cs-DrOn3eR2.js +0 -6
  126. package/dist/admin/chunks/cs-DrOn3eR2.js.map +0 -1
  127. package/dist/admin/chunks/de-BlqtkWR3.js +0 -6
  128. package/dist/admin/chunks/de-BlqtkWR3.js.map +0 -1
  129. package/dist/admin/chunks/de-CGlAhulB.js +0 -4
  130. package/dist/admin/chunks/de-CGlAhulB.js.map +0 -1
  131. package/dist/admin/chunks/dk-B5IuEReS.js +0 -25
  132. package/dist/admin/chunks/dk-B5IuEReS.js.map +0 -1
  133. package/dist/admin/chunks/dk-DW7WecjY.js +0 -27
  134. package/dist/admin/chunks/dk-DW7WecjY.js.map +0 -1
  135. package/dist/admin/chunks/en-DacnIsXb.js +0 -30
  136. package/dist/admin/chunks/en-DacnIsXb.js.map +0 -1
  137. package/dist/admin/chunks/en-Dxg2wKLN.js +0 -27
  138. package/dist/admin/chunks/en-Dxg2wKLN.js.map +0 -1
  139. package/dist/admin/chunks/es-DxWi6BKM.js +0 -27
  140. package/dist/admin/chunks/es-DxWi6BKM.js.map +0 -1
  141. package/dist/admin/chunks/es-fdc21M_E.js +0 -25
  142. package/dist/admin/chunks/es-fdc21M_E.js.map +0 -1
  143. package/dist/admin/chunks/fr-BsENAPSS.js +0 -6
  144. package/dist/admin/chunks/fr-BsENAPSS.js.map +0 -1
  145. package/dist/admin/chunks/fr-DZjvYp6C.js +0 -4
  146. package/dist/admin/chunks/fr-DZjvYp6C.js.map +0 -1
  147. package/dist/admin/chunks/id-BORUwKHm.js +0 -6
  148. package/dist/admin/chunks/id-BORUwKHm.js.map +0 -1
  149. package/dist/admin/chunks/id-C1eDxX9W.js +0 -4
  150. package/dist/admin/chunks/id-C1eDxX9W.js.map +0 -1
  151. package/dist/admin/chunks/index-Ce7DMTUO.js +0 -105
  152. package/dist/admin/chunks/index-Ce7DMTUO.js.map +0 -1
  153. package/dist/admin/chunks/index-HXXlrjit.js +0 -108
  154. package/dist/admin/chunks/index-HXXlrjit.js.map +0 -1
  155. package/dist/admin/chunks/it-DVlJ2EhA.js +0 -4
  156. package/dist/admin/chunks/it-DVlJ2EhA.js.map +0 -1
  157. package/dist/admin/chunks/it-eAGyIQ1x.js +0 -6
  158. package/dist/admin/chunks/it-eAGyIQ1x.js.map +0 -1
  159. package/dist/admin/chunks/ja-CVosbw2M.js +0 -25
  160. package/dist/admin/chunks/ja-CVosbw2M.js.map +0 -1
  161. package/dist/admin/chunks/ja-DdOPbVbe.js +0 -27
  162. package/dist/admin/chunks/ja-DdOPbVbe.js.map +0 -1
  163. package/dist/admin/chunks/ko-B8SR--vZ.js +0 -25
  164. package/dist/admin/chunks/ko-B8SR--vZ.js.map +0 -1
  165. package/dist/admin/chunks/ko-CaWqWfC8.js +0 -27
  166. package/dist/admin/chunks/ko-CaWqWfC8.js.map +0 -1
  167. package/dist/admin/chunks/ms-CrRuDILn.js +0 -6
  168. package/dist/admin/chunks/ms-CrRuDILn.js.map +0 -1
  169. package/dist/admin/chunks/ms-DLngEN2_.js +0 -4
  170. package/dist/admin/chunks/ms-DLngEN2_.js.map +0 -1
  171. package/dist/admin/chunks/nl-B6Q0VF48.js +0 -4
  172. package/dist/admin/chunks/nl-B6Q0VF48.js.map +0 -1
  173. package/dist/admin/chunks/nl-BMsBb10t.js +0 -6
  174. package/dist/admin/chunks/nl-BMsBb10t.js.map +0 -1
  175. package/dist/admin/chunks/pl-Bve39qfV.js +0 -25
  176. package/dist/admin/chunks/pl-Bve39qfV.js.map +0 -1
  177. package/dist/admin/chunks/pl-CO-R08qV.js +0 -27
  178. package/dist/admin/chunks/pl-CO-R08qV.js.map +0 -1
  179. package/dist/admin/chunks/pt-BR-CBzJhkyg.js +0 -6
  180. package/dist/admin/chunks/pt-BR-CBzJhkyg.js.map +0 -1
  181. package/dist/admin/chunks/pt-BR-DPqDE4wA.js +0 -4
  182. package/dist/admin/chunks/pt-BR-DPqDE4wA.js.map +0 -1
  183. package/dist/admin/chunks/pt-BzFac2P5.js +0 -30
  184. package/dist/admin/chunks/pt-BzFac2P5.js.map +0 -1
  185. package/dist/admin/chunks/pt-DLqF-Sb4.js +0 -27
  186. package/dist/admin/chunks/pt-DLqF-Sb4.js.map +0 -1
  187. package/dist/admin/chunks/ru-DnqOAZDX.js +0 -6
  188. package/dist/admin/chunks/ru-DnqOAZDX.js.map +0 -1
  189. package/dist/admin/chunks/ru-rmFYdvwh.js +0 -4
  190. package/dist/admin/chunks/ru-rmFYdvwh.js.map +0 -1
  191. package/dist/admin/chunks/sk-DDJmUHcx.js +0 -4
  192. package/dist/admin/chunks/sk-DDJmUHcx.js.map +0 -1
  193. package/dist/admin/chunks/sk-N47IGfwH.js +0 -6
  194. package/dist/admin/chunks/sk-N47IGfwH.js.map +0 -1
  195. package/dist/admin/chunks/th-BqTCSpUc.js +0 -4
  196. package/dist/admin/chunks/th-BqTCSpUc.js.map +0 -1
  197. package/dist/admin/chunks/th-OW3_QVEZ.js +0 -6
  198. package/dist/admin/chunks/th-OW3_QVEZ.js.map +0 -1
  199. package/dist/admin/chunks/tr-BmrcZCoj.js +0 -27
  200. package/dist/admin/chunks/tr-BmrcZCoj.js.map +0 -1
  201. package/dist/admin/chunks/tr-n7J_y4Bh.js +0 -30
  202. package/dist/admin/chunks/tr-n7J_y4Bh.js.map +0 -1
  203. package/dist/admin/chunks/uk-CQim5OiT.js +0 -4
  204. package/dist/admin/chunks/uk-CQim5OiT.js.map +0 -1
  205. package/dist/admin/chunks/uk-nM0yP_CK.js +0 -6
  206. package/dist/admin/chunks/uk-nM0yP_CK.js.map +0 -1
  207. package/dist/admin/chunks/vi-CO9gCtmD.js +0 -4
  208. package/dist/admin/chunks/vi-CO9gCtmD.js.map +0 -1
  209. package/dist/admin/chunks/vi-DjJBc-ms.js +0 -6
  210. package/dist/admin/chunks/vi-DjJBc-ms.js.map +0 -1
  211. package/dist/admin/chunks/zh-9wNbbqde.js +0 -30
  212. package/dist/admin/chunks/zh-9wNbbqde.js.map +0 -1
  213. package/dist/admin/chunks/zh-CZQ4DV5L.js +0 -27
  214. package/dist/admin/chunks/zh-CZQ4DV5L.js.map +0 -1
  215. package/dist/admin/chunks/zh-Hans-ChWc00HT.js +0 -19
  216. package/dist/admin/chunks/zh-Hans-ChWc00HT.js.map +0 -1
  217. package/dist/admin/chunks/zh-Hans-D0bb9tfC.js +0 -22
  218. package/dist/admin/chunks/zh-Hans-D0bb9tfC.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":""}
1
+ {"version":3,"file":"index.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -1,254 +1,208 @@
1
- 'use strict';
2
-
3
- var _ = require('lodash');
4
- var utils = require('@strapi/utils');
5
- var fp = require('lodash/fp');
6
-
7
- function _interopNamespaceDefault(e) {
8
- var n = Object.create(null);
1
+ "use strict";
2
+ const _ = require("lodash");
3
+ const utils = require("@strapi/utils");
4
+ const fp = require("lodash/fp");
5
+ function _interopNamespace(e) {
6
+ if (e && e.__esModule) return e;
7
+ const n = Object.create(null, { [Symbol.toStringTag]: { value: "Module" } });
9
8
  if (e) {
10
- Object.keys(e).forEach(function (k) {
11
- if (k !== 'default') {
12
- var d = Object.getOwnPropertyDescriptor(e, k);
9
+ for (const k in e) {
10
+ if (k !== "default") {
11
+ const d = Object.getOwnPropertyDescriptor(e, k);
13
12
  Object.defineProperty(n, k, d.get ? d : {
14
13
  enumerable: true,
15
- get: function () { return e[k]; }
14
+ get: () => e[k]
16
15
  });
17
16
  }
18
- });
17
+ }
19
18
  }
20
19
  n.default = e;
21
20
  return Object.freeze(n);
22
21
  }
23
-
24
- var ___namespace = /*#__PURE__*/_interopNamespaceDefault(_);
25
-
26
- const createProvider = (emailConfig)=>{
27
- const providerName = emailConfig.provider.toLowerCase();
28
- let provider;
29
- let modulePath;
30
- try {
31
- modulePath = require.resolve(`@strapi/provider-email-${providerName}`);
32
- } catch (error) {
33
- if (error !== null && typeof error === 'object' && 'code' in error && error.code === 'MODULE_NOT_FOUND') {
34
- modulePath = providerName;
35
- } else {
36
- throw error;
37
- }
22
+ const ___namespace = /* @__PURE__ */ _interopNamespace(_);
23
+ const createProvider = (emailConfig) => {
24
+ const providerName = emailConfig.provider.toLowerCase();
25
+ let provider;
26
+ let modulePath;
27
+ try {
28
+ modulePath = require.resolve(`@strapi/provider-email-${providerName}`);
29
+ } catch (error) {
30
+ if (error !== null && typeof error === "object" && "code" in error && error.code === "MODULE_NOT_FOUND") {
31
+ modulePath = providerName;
32
+ } else {
33
+ throw error;
38
34
  }
39
- try {
40
- provider = require(modulePath);
41
- } catch (err) {
42
- throw new Error(`Could not load email provider "${providerName}".`);
43
- }
44
- return provider.init(emailConfig.providerOptions, emailConfig.settings);
45
- };
46
- const bootstrap = async ({ strapi })=>{
47
- const emailConfig = strapi.config.get('plugin::email');
48
- strapi.plugin('email').provider = createProvider(emailConfig);
49
- // Add permissions
50
- const actions = [
51
- {
52
- section: 'settings',
53
- category: 'email',
54
- displayName: 'Access the Email Settings page',
55
- uid: 'settings.read',
56
- pluginName: 'email'
57
- }
58
- ];
59
- await strapi.service('admin::permission').actionProvider.registerMany(actions);
35
+ }
36
+ try {
37
+ provider = require(modulePath);
38
+ } catch (err) {
39
+ throw new Error(`Could not load email provider "${providerName}".`);
40
+ }
41
+ return provider.init(emailConfig.providerOptions, emailConfig.settings);
60
42
  };
61
-
62
- const { createStrictInterpolationRegExp } = utils.template;
63
- const getProviderSettings = ()=>strapi.config.get('plugin::email');
64
- const send = async (options)=>strapi.plugin('email').provider.send(options);
65
- /**
66
- * fill subject, text and html using lodash template
67
- * @param {object} emailOptions - to, from and replyto...
68
- * @param {object} emailTemplate - object containing attributes to fill
69
- * @param {object} data - data used to fill the template
70
- * @returns {{ subject, text, subject }}
71
- */ const sendTemplatedEmail = (emailOptions, emailTemplate, data)=>{
72
- const attributes = [
73
- 'subject',
74
- 'text',
75
- 'html'
76
- ];
77
- const missingAttributes = ___namespace.difference(attributes, Object.keys(emailTemplate));
78
- if (missingAttributes.length > 0) {
79
- throw new Error(`Following attributes are missing from your email template : ${missingAttributes.join(', ')}`);
43
+ const bootstrap = async ({ strapi: strapi2 }) => {
44
+ const emailConfig = strapi2.config.get("plugin::email");
45
+ strapi2.plugin("email").provider = createProvider(emailConfig);
46
+ const actions = [
47
+ {
48
+ section: "settings",
49
+ category: "email",
50
+ displayName: "Access the Email Settings page",
51
+ uid: "settings.read",
52
+ pluginName: "email"
80
53
  }
81
- const allowedInterpolationVariables = utils.objects.keysDeep(data);
82
- const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');
83
- const templatedAttributes = attributes.reduce((compiled, attribute)=>emailTemplate[attribute] ? Object.assign(compiled, {
84
- [attribute]: ___namespace.template(emailTemplate[attribute], {
85
- interpolate
86
- })(data)
87
- }) : compiled, {});
88
- return strapi.plugin('email').provider.send({
89
- ...emailOptions,
90
- ...templatedAttributes
91
- });
54
+ ];
55
+ await strapi2.service("admin::permission").actionProvider.registerMany(actions);
92
56
  };
93
- const emailService = ()=>({
94
- getProviderSettings,
95
- send,
96
- sendTemplatedEmail
97
- });
98
-
99
- const services = {
100
- email: emailService
57
+ const { createStrictInterpolationRegExp } = utils.template;
58
+ const getProviderSettings = () => strapi.config.get("plugin::email");
59
+ const send = async (options) => strapi.plugin("email").provider.send(options);
60
+ const sendTemplatedEmail = (emailOptions, emailTemplate, data) => {
61
+ const attributes = ["subject", "text", "html"];
62
+ const missingAttributes = ___namespace.difference(attributes, Object.keys(emailTemplate));
63
+ if (missingAttributes.length > 0) {
64
+ throw new Error(
65
+ `Following attributes are missing from your email template : ${missingAttributes.join(", ")}`
66
+ );
67
+ }
68
+ const allowedInterpolationVariables = utils.objects.keysDeep(data);
69
+ const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, "g");
70
+ const templatedAttributes = attributes.reduce(
71
+ (compiled, attribute) => emailTemplate[attribute] ? Object.assign(compiled, {
72
+ [attribute]: ___namespace.template(emailTemplate[attribute], {
73
+ interpolate
74
+ })(data)
75
+ }) : compiled,
76
+ {}
77
+ );
78
+ return strapi.plugin("email").provider.send({ ...emailOptions, ...templatedAttributes });
101
79
  };
102
-
103
- var admin = {
104
- type: 'admin',
105
- routes: [
106
- {
107
- method: 'POST',
108
- path: '/',
109
- handler: 'email.send',
110
- config: {
111
- policies: [
112
- 'admin::isAuthenticatedAdmin'
113
- ]
114
- }
115
- },
116
- {
117
- method: 'POST',
118
- path: '/test',
119
- handler: 'email.test',
120
- config: {
121
- policies: [
122
- 'admin::isAuthenticatedAdmin',
123
- {
124
- name: 'admin::hasPermissions',
125
- config: {
126
- actions: [
127
- 'plugin::email.settings.read'
128
- ]
129
- }
130
- }
131
- ]
132
- }
133
- },
134
- {
135
- method: 'GET',
136
- path: '/settings',
137
- handler: 'email.getSettings',
138
- config: {
139
- policies: [
140
- 'admin::isAuthenticatedAdmin',
141
- {
142
- name: 'admin::hasPermissions',
143
- config: {
144
- actions: [
145
- 'plugin::email.settings.read'
146
- ]
147
- }
148
- }
149
- ]
150
- }
151
- }
152
- ]
80
+ const emailService = () => ({
81
+ getProviderSettings,
82
+ send,
83
+ sendTemplatedEmail
84
+ });
85
+ const services = { email: emailService };
86
+ const admin = {
87
+ type: "admin",
88
+ routes: [
89
+ {
90
+ method: "POST",
91
+ path: "/",
92
+ handler: "email.send",
93
+ config: {
94
+ policies: ["admin::isAuthenticatedAdmin"]
95
+ }
96
+ },
97
+ {
98
+ method: "POST",
99
+ path: "/test",
100
+ handler: "email.test",
101
+ config: {
102
+ policies: [
103
+ "admin::isAuthenticatedAdmin",
104
+ { name: "admin::hasPermissions", config: { actions: ["plugin::email.settings.read"] } }
105
+ ]
106
+ }
107
+ },
108
+ {
109
+ method: "GET",
110
+ path: "/settings",
111
+ handler: "email.getSettings",
112
+ config: {
113
+ policies: [
114
+ "admin::isAuthenticatedAdmin",
115
+ { name: "admin::hasPermissions", config: { actions: ["plugin::email.settings.read"] } }
116
+ ]
117
+ }
118
+ }
119
+ ]
153
120
  };
154
-
155
- var contentApi = {
156
- type: 'content-api',
157
- routes: [
158
- {
159
- method: 'POST',
160
- path: '/',
161
- handler: 'email.send'
162
- }
163
- ]
121
+ const contentApi = {
122
+ type: "content-api",
123
+ routes: [
124
+ {
125
+ method: "POST",
126
+ path: "/",
127
+ handler: "email.send"
128
+ }
129
+ ]
164
130
  };
165
-
166
131
  const routes = {
167
- admin,
168
- 'content-api': contentApi
132
+ admin,
133
+ "content-api": contentApi
169
134
  };
170
-
171
135
  const { ApplicationError } = utils.errors;
172
- /**
173
- * Email.js controller
174
- *
175
- * @description: A set of functions called "actions" of the `email` plugin.
176
- */ const emailController = {
177
- async send (ctx) {
178
- const options = ctx.request.body;
179
- try {
180
- await strapi.plugin('email').service('email').send(options);
181
- } catch (error) {
182
- if (error instanceof Error) {
183
- if ('statusCode' in error && error.statusCode === 400) {
184
- throw new ApplicationError(error.message);
185
- } else {
186
- throw new Error(`Couldn't send email: ${error.message}.`);
187
- }
188
- }
189
- }
190
- // Send 200 `ok`
191
- ctx.send({});
192
- },
193
- async test (ctx) {
194
- const { to } = ctx.request.body;
195
- if (!to) {
196
- throw new ApplicationError('No recipient(s) are given');
136
+ const emailController = {
137
+ async send(ctx) {
138
+ const options = ctx.request.body;
139
+ try {
140
+ await strapi.plugin("email").service("email").send(options);
141
+ } catch (error) {
142
+ if (error instanceof Error) {
143
+ if ("statusCode" in error && error.statusCode === 400) {
144
+ throw new ApplicationError(error.message);
145
+ } else {
146
+ throw new Error(`Couldn't send email: ${error.message}.`);
197
147
  }
198
- const email = {
199
- to,
200
- subject: `Strapi test mail to: ${to}`,
201
- 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`
202
- };
203
- try {
204
- await strapi.plugin('email').service('email').send(email);
205
- } catch (error) {
206
- if (error instanceof Error) {
207
- if ('statusCode' in error && error.statusCode === 400) {
208
- throw new ApplicationError(error.message);
209
- } else {
210
- throw new Error(`Couldn't send test email: ${error.message}.`);
211
- }
212
- }
148
+ }
149
+ }
150
+ ctx.send({});
151
+ },
152
+ async test(ctx) {
153
+ const { to } = ctx.request.body;
154
+ if (!to) {
155
+ throw new ApplicationError("No recipient(s) are given");
156
+ }
157
+ const email = {
158
+ to,
159
+ subject: `Strapi test mail to: ${to}`,
160
+ text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get(
161
+ "plugin::email.provider"
162
+ )} provider. \r
163
+ For documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`
164
+ };
165
+ try {
166
+ await strapi.plugin("email").service("email").send(email);
167
+ } catch (error) {
168
+ if (error instanceof Error) {
169
+ if ("statusCode" in error && error.statusCode === 400) {
170
+ throw new ApplicationError(error.message);
171
+ } else {
172
+ throw new Error(`Couldn't send test email: ${error.message}.`);
213
173
  }
214
- // Send 200 `ok`
215
- ctx.send({});
216
- },
217
- async getSettings (ctx) {
218
- const config = strapi.plugin('email').service('email').getProviderSettings();
219
- ctx.send({
220
- config: fp.pick([
221
- 'provider',
222
- 'settings.defaultFrom',
223
- 'settings.defaultReplyTo',
224
- 'settings.testAddress'
225
- ], config)
226
- });
174
+ }
227
175
  }
176
+ ctx.send({});
177
+ },
178
+ async getSettings(ctx) {
179
+ const config2 = strapi.plugin("email").service("email").getProviderSettings();
180
+ ctx.send({
181
+ config: fp.pick(
182
+ ["provider", "settings.defaultFrom", "settings.defaultReplyTo", "settings.testAddress"],
183
+ config2
184
+ )
185
+ });
186
+ }
228
187
  };
229
-
230
- const controllers = {
231
- email: emailController
232
- };
233
-
188
+ const controllers = { email: emailController };
234
189
  const config = {
235
- default: {
236
- provider: 'sendmail',
237
- providerOptions: {},
238
- settings: {
239
- defaultFrom: 'Strapi <no-reply@strapi.io>'
240
- }
241
- },
242
- validator () {}
190
+ default: {
191
+ provider: "sendmail",
192
+ providerOptions: {},
193
+ settings: {
194
+ defaultFrom: "Strapi <no-reply@strapi.io>"
195
+ }
196
+ },
197
+ validator() {
198
+ }
243
199
  };
244
-
245
- var index = {
246
- bootstrap,
247
- services,
248
- routes,
249
- controllers,
250
- config
200
+ const index = {
201
+ bootstrap,
202
+ services,
203
+ routes,
204
+ controllers,
205
+ config
251
206
  };
252
-
253
207
  module.exports = index;
254
208
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","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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"}
1
+ {"version":3,"file":"index.js","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","template","_","objects","email","errors","config","pick"],"mappings":"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"}