@strapi/email 5.12.1 → 5.12.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/constants.js +17 -0
- package/dist/admin/constants.js.map +1 -0
- package/dist/admin/constants.mjs +15 -0
- package/dist/admin/constants.mjs.map +1 -0
- package/dist/admin/index.js +86 -2
- package/dist/admin/index.js.map +1 -1
- package/dist/admin/index.mjs +87 -1
- package/dist/admin/index.mjs.map +1 -1
- package/dist/admin/{chunks/Settings-BBq0I4Nx.js → pages/Settings.js} +8 -30
- package/dist/admin/pages/Settings.js.map +1 -0
- package/dist/admin/{chunks/Settings-PuQuVXHu.mjs → pages/Settings.mjs} +5 -27
- package/dist/admin/pages/Settings.mjs.map +1 -0
- package/dist/admin/translations/ar.json.js +6 -0
- package/dist/admin/translations/ar.json.js.map +1 -0
- package/dist/admin/translations/ar.json.mjs +4 -0
- package/dist/admin/translations/ar.json.mjs.map +1 -0
- package/dist/admin/translations/cs.json.js +6 -0
- package/dist/admin/translations/cs.json.js.map +1 -0
- package/dist/admin/translations/cs.json.mjs +4 -0
- package/dist/admin/translations/cs.json.mjs.map +1 -0
- package/dist/admin/translations/de.json.js +6 -0
- package/dist/admin/translations/de.json.js.map +1 -0
- package/dist/admin/translations/de.json.mjs +4 -0
- package/dist/admin/translations/de.json.mjs.map +1 -0
- package/dist/admin/{chunks/dk-DW7WecjY.js → translations/dk.json.js} +2 -2
- package/dist/admin/translations/dk.json.js.map +1 -0
- package/dist/admin/{chunks/dk-B5IuEReS.mjs → translations/dk.json.mjs} +1 -1
- package/dist/admin/translations/dk.json.mjs.map +1 -0
- package/dist/admin/{chunks/en-DacnIsXb.js → translations/en.json.js} +3 -1
- package/dist/admin/translations/en.json.js.map +1 -0
- package/dist/admin/{chunks/en-Dxg2wKLN.mjs → translations/en.json.mjs} +1 -1
- package/dist/admin/translations/en.json.mjs.map +1 -0
- package/dist/admin/{chunks/es-DxWi6BKM.js → translations/es.json.js} +2 -2
- package/dist/admin/translations/es.json.js.map +1 -0
- package/dist/admin/{chunks/es-fdc21M_E.mjs → translations/es.json.mjs} +1 -1
- package/dist/admin/translations/es.json.mjs.map +1 -0
- package/dist/admin/translations/fr.json.js +6 -0
- package/dist/admin/translations/fr.json.js.map +1 -0
- package/dist/admin/translations/fr.json.mjs +4 -0
- package/dist/admin/translations/fr.json.mjs.map +1 -0
- package/dist/admin/translations/id.json.js +6 -0
- package/dist/admin/translations/id.json.js.map +1 -0
- package/dist/admin/translations/id.json.mjs +4 -0
- package/dist/admin/translations/id.json.mjs.map +1 -0
- package/dist/admin/translations/it.json.js +6 -0
- package/dist/admin/translations/it.json.js.map +1 -0
- package/dist/admin/translations/it.json.mjs +4 -0
- package/dist/admin/translations/it.json.mjs.map +1 -0
- package/dist/admin/{chunks/ja-DdOPbVbe.js → translations/ja.json.js} +2 -2
- package/dist/admin/translations/ja.json.js.map +1 -0
- package/dist/admin/{chunks/ja-CVosbw2M.mjs → translations/ja.json.mjs} +1 -1
- package/dist/admin/translations/ja.json.mjs.map +1 -0
- package/dist/admin/{chunks/ko-CaWqWfC8.js → translations/ko.json.js} +2 -2
- package/dist/admin/translations/ko.json.js.map +1 -0
- package/dist/admin/{chunks/ko-B8SR--vZ.mjs → translations/ko.json.mjs} +1 -1
- package/dist/admin/translations/ko.json.mjs.map +1 -0
- package/dist/admin/translations/ms.json.js +6 -0
- package/dist/admin/translations/ms.json.js.map +1 -0
- package/dist/admin/translations/ms.json.mjs +4 -0
- package/dist/admin/translations/ms.json.mjs.map +1 -0
- package/dist/admin/translations/nl.json.js +6 -0
- package/dist/admin/translations/nl.json.js.map +1 -0
- package/dist/admin/translations/nl.json.mjs +4 -0
- package/dist/admin/translations/nl.json.mjs.map +1 -0
- package/dist/admin/{chunks/pl-CO-R08qV.js → translations/pl.json.js} +2 -2
- package/dist/admin/translations/pl.json.js.map +1 -0
- package/dist/admin/{chunks/pl-Bve39qfV.mjs → translations/pl.json.mjs} +1 -1
- package/dist/admin/translations/pl.json.mjs.map +1 -0
- package/dist/admin/translations/pt-BR.json.js +6 -0
- package/dist/admin/translations/pt-BR.json.js.map +1 -0
- package/dist/admin/{chunks/pt-BR-DPqDE4wA.mjs → translations/pt-BR.json.mjs} +1 -1
- package/dist/admin/translations/pt-BR.json.mjs.map +1 -0
- package/dist/admin/{chunks/pt-BzFac2P5.js → translations/pt.json.js} +3 -1
- package/dist/admin/translations/pt.json.js.map +1 -0
- package/dist/admin/{chunks/pt-DLqF-Sb4.mjs → translations/pt.json.mjs} +1 -1
- package/dist/admin/translations/pt.json.mjs.map +1 -0
- package/dist/admin/translations/ru.json.js +6 -0
- package/dist/admin/translations/ru.json.js.map +1 -0
- package/dist/admin/translations/ru.json.mjs +4 -0
- package/dist/admin/translations/ru.json.mjs.map +1 -0
- package/dist/admin/translations/sk.json.js +6 -0
- package/dist/admin/translations/sk.json.js.map +1 -0
- package/dist/admin/translations/sk.json.mjs +4 -0
- package/dist/admin/translations/sk.json.mjs.map +1 -0
- package/dist/admin/translations/th.json.js +6 -0
- package/dist/admin/translations/th.json.js.map +1 -0
- package/dist/admin/translations/th.json.mjs +4 -0
- package/dist/admin/translations/th.json.mjs.map +1 -0
- package/dist/admin/{chunks/tr-n7J_y4Bh.js → translations/tr.json.js} +3 -1
- package/dist/admin/translations/tr.json.js.map +1 -0
- package/dist/admin/{chunks/tr-BmrcZCoj.mjs → translations/tr.json.mjs} +1 -1
- package/dist/admin/translations/tr.json.mjs.map +1 -0
- package/dist/admin/{chunks/uk-DWA4QHtk.js → translations/uk.json.js} +3 -1
- package/dist/admin/translations/uk.json.js.map +1 -0
- package/dist/admin/{chunks/uk-Dsq-0GyK.mjs → translations/uk.json.mjs} +1 -1
- package/dist/admin/translations/uk.json.mjs.map +1 -0
- package/dist/admin/translations/vi.json.js +6 -0
- package/dist/admin/translations/vi.json.js.map +1 -0
- package/dist/admin/translations/vi.json.mjs +4 -0
- package/dist/admin/translations/vi.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-Hans-D0bb9tfC.js → translations/zh-Hans.json.js} +3 -1
- package/dist/admin/translations/zh-Hans.json.js.map +1 -0
- package/dist/admin/{chunks/zh-Hans-ChWc00HT.mjs → translations/zh-Hans.json.mjs} +1 -1
- package/dist/admin/translations/zh-Hans.json.mjs.map +1 -0
- package/dist/admin/{chunks/zh-9wNbbqde.js → translations/zh.json.js} +3 -1
- package/dist/admin/translations/zh.json.js.map +1 -0
- package/dist/admin/{chunks/zh-CZQ4DV5L.mjs → translations/zh.json.mjs} +1 -1
- package/dist/admin/translations/zh.json.mjs.map +1 -0
- package/dist/admin/utils/getYupInnerErrors.js +23 -0
- package/dist/admin/utils/getYupInnerErrors.js.map +1 -0
- package/dist/admin/utils/getYupInnerErrors.mjs +21 -0
- package/dist/admin/utils/getYupInnerErrors.mjs.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.js +11 -0
- package/dist/admin/utils/prefixPluginTranslations.js.map +1 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs +9 -0
- package/dist/admin/utils/prefixPluginTranslations.mjs.map +1 -0
- package/dist/admin/utils/schema.js +30 -0
- package/dist/admin/utils/schema.js.map +1 -0
- package/dist/admin/utils/schema.mjs +9 -0
- package/dist/admin/utils/schema.mjs.map +1 -0
- package/dist/server/bootstrap.js +40 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/bootstrap.mjs +38 -0
- package/dist/server/bootstrap.mjs.map +1 -0
- package/dist/server/config.js +15 -0
- package/dist/server/config.js.map +1 -0
- package/dist/server/config.mjs +13 -0
- package/dist/server/config.mjs.map +1 -0
- package/dist/server/controllers/email.js +66 -0
- package/dist/server/controllers/email.js.map +1 -0
- package/dist/server/controllers/email.mjs +64 -0
- package/dist/server/controllers/email.mjs.map +1 -0
- package/dist/server/controllers/index.js +10 -0
- package/dist/server/controllers/index.js.map +1 -0
- package/dist/server/controllers/index.mjs +8 -0
- package/dist/server/controllers/index.mjs.map +1 -0
- package/dist/server/index.js +12 -281
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +6 -256
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/middlewares/index.js +13 -0
- package/dist/server/middlewares/index.js.map +1 -0
- package/dist/server/middlewares/index.mjs +8 -0
- package/dist/server/middlewares/index.mjs.map +1 -0
- package/dist/server/middlewares/rateLimit.js +37 -0
- package/dist/server/middlewares/rateLimit.js.map +1 -0
- package/dist/server/middlewares/rateLimit.mjs +35 -0
- package/dist/server/middlewares/rateLimit.mjs.map +1 -0
- package/dist/server/routes/admin.js +56 -0
- package/dist/server/routes/admin.js.map +1 -0
- package/dist/server/routes/admin.mjs +54 -0
- package/dist/server/routes/admin.mjs.map +1 -0
- package/dist/server/routes/content-api.js +15 -0
- package/dist/server/routes/content-api.js.map +1 -0
- package/dist/server/routes/content-api.mjs +13 -0
- package/dist/server/routes/content-api.mjs.map +1 -0
- package/dist/server/routes/index.js +12 -0
- package/dist/server/routes/index.js.map +1 -0
- package/dist/server/routes/index.mjs +10 -0
- package/dist/server/routes/index.mjs.map +1 -0
- package/dist/server/services/email.js +63 -0
- package/dist/server/services/email.js.map +1 -0
- package/dist/server/services/email.mjs +42 -0
- package/dist/server/services/email.mjs.map +1 -0
- package/dist/server/services/index.js +10 -0
- package/dist/server/services/index.js.map +1 -0
- package/dist/server/services/index.mjs +8 -0
- package/dist/server/services/index.mjs.map +1 -0
- package/package.json +5 -5
- package/dist/admin/chunks/Settings-BBq0I4Nx.js.map +0 -1
- package/dist/admin/chunks/Settings-PuQuVXHu.mjs.map +0 -1
- package/dist/admin/chunks/ar-BDHMRt_b.js +0 -6
- package/dist/admin/chunks/ar-BDHMRt_b.js.map +0 -1
- package/dist/admin/chunks/ar-JWJKrFM-.mjs +0 -4
- package/dist/admin/chunks/ar-JWJKrFM-.mjs.map +0 -1
- package/dist/admin/chunks/cs-BZCMeXgq.mjs +0 -4
- package/dist/admin/chunks/cs-BZCMeXgq.mjs.map +0 -1
- package/dist/admin/chunks/cs-DrOn3eR2.js +0 -6
- package/dist/admin/chunks/cs-DrOn3eR2.js.map +0 -1
- package/dist/admin/chunks/de-BlqtkWR3.js +0 -6
- package/dist/admin/chunks/de-BlqtkWR3.js.map +0 -1
- package/dist/admin/chunks/de-CGlAhulB.mjs +0 -4
- package/dist/admin/chunks/de-CGlAhulB.mjs.map +0 -1
- package/dist/admin/chunks/dk-B5IuEReS.mjs.map +0 -1
- package/dist/admin/chunks/dk-DW7WecjY.js.map +0 -1
- package/dist/admin/chunks/en-DacnIsXb.js.map +0 -1
- package/dist/admin/chunks/en-Dxg2wKLN.mjs.map +0 -1
- package/dist/admin/chunks/es-DxWi6BKM.js.map +0 -1
- package/dist/admin/chunks/es-fdc21M_E.mjs.map +0 -1
- package/dist/admin/chunks/fr-BsENAPSS.js +0 -6
- package/dist/admin/chunks/fr-BsENAPSS.js.map +0 -1
- package/dist/admin/chunks/fr-DZjvYp6C.mjs +0 -4
- package/dist/admin/chunks/fr-DZjvYp6C.mjs.map +0 -1
- package/dist/admin/chunks/id-BORUwKHm.js +0 -6
- package/dist/admin/chunks/id-BORUwKHm.js.map +0 -1
- package/dist/admin/chunks/id-C1eDxX9W.mjs +0 -4
- package/dist/admin/chunks/id-C1eDxX9W.mjs.map +0 -1
- package/dist/admin/chunks/index-BPAZGe7V.mjs +0 -105
- package/dist/admin/chunks/index-BPAZGe7V.mjs.map +0 -1
- package/dist/admin/chunks/index-uY5sPjIN.js +0 -108
- package/dist/admin/chunks/index-uY5sPjIN.js.map +0 -1
- package/dist/admin/chunks/it-DVlJ2EhA.mjs +0 -4
- package/dist/admin/chunks/it-DVlJ2EhA.mjs.map +0 -1
- package/dist/admin/chunks/it-eAGyIQ1x.js +0 -6
- package/dist/admin/chunks/it-eAGyIQ1x.js.map +0 -1
- package/dist/admin/chunks/ja-CVosbw2M.mjs.map +0 -1
- package/dist/admin/chunks/ja-DdOPbVbe.js.map +0 -1
- package/dist/admin/chunks/ko-B8SR--vZ.mjs.map +0 -1
- package/dist/admin/chunks/ko-CaWqWfC8.js.map +0 -1
- package/dist/admin/chunks/ms-CrRuDILn.js +0 -6
- package/dist/admin/chunks/ms-CrRuDILn.js.map +0 -1
- package/dist/admin/chunks/ms-DLngEN2_.mjs +0 -4
- package/dist/admin/chunks/ms-DLngEN2_.mjs.map +0 -1
- package/dist/admin/chunks/nl-B6Q0VF48.mjs +0 -4
- package/dist/admin/chunks/nl-B6Q0VF48.mjs.map +0 -1
- package/dist/admin/chunks/nl-BMsBb10t.js +0 -6
- package/dist/admin/chunks/nl-BMsBb10t.js.map +0 -1
- package/dist/admin/chunks/pl-Bve39qfV.mjs.map +0 -1
- package/dist/admin/chunks/pl-CO-R08qV.js.map +0 -1
- package/dist/admin/chunks/pt-BR-CBzJhkyg.js +0 -6
- package/dist/admin/chunks/pt-BR-CBzJhkyg.js.map +0 -1
- package/dist/admin/chunks/pt-BR-DPqDE4wA.mjs.map +0 -1
- package/dist/admin/chunks/pt-BzFac2P5.js.map +0 -1
- package/dist/admin/chunks/pt-DLqF-Sb4.mjs.map +0 -1
- package/dist/admin/chunks/ru-DnqOAZDX.js +0 -6
- package/dist/admin/chunks/ru-DnqOAZDX.js.map +0 -1
- package/dist/admin/chunks/ru-rmFYdvwh.mjs +0 -4
- package/dist/admin/chunks/ru-rmFYdvwh.mjs.map +0 -1
- package/dist/admin/chunks/sk-DDJmUHcx.mjs +0 -4
- package/dist/admin/chunks/sk-DDJmUHcx.mjs.map +0 -1
- package/dist/admin/chunks/sk-N47IGfwH.js +0 -6
- package/dist/admin/chunks/sk-N47IGfwH.js.map +0 -1
- package/dist/admin/chunks/th-BqTCSpUc.mjs +0 -4
- package/dist/admin/chunks/th-BqTCSpUc.mjs.map +0 -1
- package/dist/admin/chunks/th-OW3_QVEZ.js +0 -6
- package/dist/admin/chunks/th-OW3_QVEZ.js.map +0 -1
- package/dist/admin/chunks/tr-BmrcZCoj.mjs.map +0 -1
- package/dist/admin/chunks/tr-n7J_y4Bh.js.map +0 -1
- package/dist/admin/chunks/uk-DWA4QHtk.js.map +0 -1
- package/dist/admin/chunks/uk-Dsq-0GyK.mjs.map +0 -1
- package/dist/admin/chunks/vi-CO9gCtmD.mjs +0 -4
- package/dist/admin/chunks/vi-CO9gCtmD.mjs.map +0 -1
- package/dist/admin/chunks/vi-DjJBc-ms.js +0 -6
- package/dist/admin/chunks/vi-DjJBc-ms.js.map +0 -1
- package/dist/admin/chunks/zh-9wNbbqde.js.map +0 -1
- package/dist/admin/chunks/zh-CZQ4DV5L.mjs.map +0 -1
- package/dist/admin/chunks/zh-Hans-ChWc00HT.mjs.map +0 -1
- package/dist/admin/chunks/zh-Hans-D0bb9tfC.js.map +0 -1
package/dist/server/index.js.map
CHANGED
|
@@ -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/middlewares/rateLimit.ts","../../server/src/middlewares/index.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 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","import rateLimit from './rateLimit';\n\nexport { default as rateLimit } from './rateLimit';\n\nexport default {\n rateLimit,\n};\n","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":["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","RateLimitError","utils","next","pluginConfig","rateLimitConfig","enabled","ratelimit","rateLimit","RateLimit","requestEmail","userEmail","isString","loadConfig","interval","min","max","prefixKey","middleware","middlewares"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","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,eAAAA,mBAAAA;AACAC,cAAAA,gBAAAA;AACAC,YAAAA,cAAAA;AACAC,iBAAAA,mBAAAA;AACAC,YAAAA,aAAAA;AACAC,iBAAAA;AACF,CAAE;;;;"}
|
package/dist/server/index.mjs
CHANGED
|
@@ -1,259 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
let provider;
|
|
8
|
-
let modulePath;
|
|
9
|
-
try {
|
|
10
|
-
modulePath = require.resolve(`@strapi/provider-email-${providerName}`);
|
|
11
|
-
} catch (error) {
|
|
12
|
-
if (error !== null && typeof error === 'object' && 'code' in error && error.code === 'MODULE_NOT_FOUND') {
|
|
13
|
-
modulePath = providerName;
|
|
14
|
-
} else {
|
|
15
|
-
throw error;
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
try {
|
|
19
|
-
provider = require(modulePath);
|
|
20
|
-
} catch (err) {
|
|
21
|
-
throw new Error(`Could not load email provider "${providerName}".`);
|
|
22
|
-
}
|
|
23
|
-
return provider.init(emailConfig.providerOptions, emailConfig.settings);
|
|
24
|
-
};
|
|
25
|
-
const bootstrap = async ({ strapi })=>{
|
|
26
|
-
const emailConfig = strapi.config.get('plugin::email');
|
|
27
|
-
strapi.plugin('email').provider = createProvider(emailConfig);
|
|
28
|
-
// Add permissions
|
|
29
|
-
const actions = [
|
|
30
|
-
{
|
|
31
|
-
section: 'settings',
|
|
32
|
-
category: 'email',
|
|
33
|
-
displayName: 'Access the Email Settings page',
|
|
34
|
-
uid: 'settings.read',
|
|
35
|
-
pluginName: 'email'
|
|
36
|
-
}
|
|
37
|
-
];
|
|
38
|
-
await strapi.service('admin::permission').actionProvider.registerMany(actions);
|
|
39
|
-
};
|
|
40
|
-
|
|
41
|
-
const { createStrictInterpolationRegExp } = template;
|
|
42
|
-
const getProviderSettings = ()=>strapi.config.get('plugin::email');
|
|
43
|
-
const send = async (options)=>strapi.plugin('email').provider.send(options);
|
|
44
|
-
/**
|
|
45
|
-
* fill subject, text and html using lodash template
|
|
46
|
-
* @param {object} emailOptions - to, from and replyto...
|
|
47
|
-
* @param {object} emailTemplate - object containing attributes to fill
|
|
48
|
-
* @param {object} data - data used to fill the template
|
|
49
|
-
* @returns {{ subject, text, subject }}
|
|
50
|
-
*/ const sendTemplatedEmail = (emailOptions, emailTemplate, data)=>{
|
|
51
|
-
const attributes = [
|
|
52
|
-
'subject',
|
|
53
|
-
'text',
|
|
54
|
-
'html'
|
|
55
|
-
];
|
|
56
|
-
const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));
|
|
57
|
-
if (missingAttributes.length > 0) {
|
|
58
|
-
throw new Error(`Following attributes are missing from your email template : ${missingAttributes.join(', ')}`);
|
|
59
|
-
}
|
|
60
|
-
const allowedInterpolationVariables = objects.keysDeep(data);
|
|
61
|
-
const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');
|
|
62
|
-
const templatedAttributes = attributes.reduce((compiled, attribute)=>emailTemplate[attribute] ? Object.assign(compiled, {
|
|
63
|
-
[attribute]: _.template(emailTemplate[attribute], {
|
|
64
|
-
interpolate
|
|
65
|
-
})(data)
|
|
66
|
-
}) : compiled, {});
|
|
67
|
-
return strapi.plugin('email').provider.send({
|
|
68
|
-
...emailOptions,
|
|
69
|
-
...templatedAttributes
|
|
70
|
-
});
|
|
71
|
-
};
|
|
72
|
-
const emailService = ()=>({
|
|
73
|
-
getProviderSettings,
|
|
74
|
-
send,
|
|
75
|
-
sendTemplatedEmail
|
|
76
|
-
});
|
|
77
|
-
|
|
78
|
-
const services = {
|
|
79
|
-
email: emailService
|
|
80
|
-
};
|
|
81
|
-
|
|
82
|
-
var admin = {
|
|
83
|
-
type: 'admin',
|
|
84
|
-
routes: [
|
|
85
|
-
{
|
|
86
|
-
method: 'POST',
|
|
87
|
-
path: '/',
|
|
88
|
-
handler: 'email.send',
|
|
89
|
-
config: {
|
|
90
|
-
policies: [
|
|
91
|
-
'admin::isAuthenticatedAdmin'
|
|
92
|
-
]
|
|
93
|
-
}
|
|
94
|
-
},
|
|
95
|
-
{
|
|
96
|
-
method: 'POST',
|
|
97
|
-
path: '/test',
|
|
98
|
-
handler: 'email.test',
|
|
99
|
-
config: {
|
|
100
|
-
policies: [
|
|
101
|
-
'admin::isAuthenticatedAdmin',
|
|
102
|
-
{
|
|
103
|
-
name: 'admin::hasPermissions',
|
|
104
|
-
config: {
|
|
105
|
-
actions: [
|
|
106
|
-
'plugin::email.settings.read'
|
|
107
|
-
]
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
]
|
|
111
|
-
}
|
|
112
|
-
},
|
|
113
|
-
{
|
|
114
|
-
method: 'GET',
|
|
115
|
-
path: '/settings',
|
|
116
|
-
handler: 'email.getSettings',
|
|
117
|
-
config: {
|
|
118
|
-
policies: [
|
|
119
|
-
'admin::isAuthenticatedAdmin',
|
|
120
|
-
{
|
|
121
|
-
name: 'admin::hasPermissions',
|
|
122
|
-
config: {
|
|
123
|
-
actions: [
|
|
124
|
-
'plugin::email.settings.read'
|
|
125
|
-
]
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
]
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
]
|
|
132
|
-
};
|
|
133
|
-
|
|
134
|
-
var contentApi = {
|
|
135
|
-
type: 'content-api',
|
|
136
|
-
routes: [
|
|
137
|
-
{
|
|
138
|
-
method: 'POST',
|
|
139
|
-
path: '/',
|
|
140
|
-
handler: 'email.send'
|
|
141
|
-
}
|
|
142
|
-
]
|
|
143
|
-
};
|
|
144
|
-
|
|
145
|
-
const routes = {
|
|
146
|
-
admin,
|
|
147
|
-
'content-api': contentApi
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
const { ApplicationError } = errors;
|
|
151
|
-
/**
|
|
152
|
-
* Email.js controller
|
|
153
|
-
*
|
|
154
|
-
* @description: A set of functions called "actions" of the `email` plugin.
|
|
155
|
-
*/ const emailController = {
|
|
156
|
-
async send (ctx) {
|
|
157
|
-
const options = ctx.request.body;
|
|
158
|
-
try {
|
|
159
|
-
await strapi.plugin('email').service('email').send(options);
|
|
160
|
-
} catch (error) {
|
|
161
|
-
if (error instanceof Error) {
|
|
162
|
-
if ('statusCode' in error && error.statusCode === 400) {
|
|
163
|
-
throw new ApplicationError(error.message);
|
|
164
|
-
} else {
|
|
165
|
-
throw new Error(`Couldn't send email: ${error.message}.`);
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// Send 200 `ok`
|
|
170
|
-
ctx.send({});
|
|
171
|
-
},
|
|
172
|
-
async test (ctx) {
|
|
173
|
-
const { to } = ctx.request.body;
|
|
174
|
-
if (!to) {
|
|
175
|
-
throw new ApplicationError('No recipient(s) are given');
|
|
176
|
-
}
|
|
177
|
-
const email = {
|
|
178
|
-
to,
|
|
179
|
-
subject: `Strapi test mail to: ${to}`,
|
|
180
|
-
text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get('plugin::email.provider')} provider. \r\nFor documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`
|
|
181
|
-
};
|
|
182
|
-
try {
|
|
183
|
-
await strapi.plugin('email').service('email').send(email);
|
|
184
|
-
} catch (error) {
|
|
185
|
-
if (error instanceof Error) {
|
|
186
|
-
if ('statusCode' in error && error.statusCode === 400) {
|
|
187
|
-
throw new ApplicationError(error.message);
|
|
188
|
-
} else {
|
|
189
|
-
throw new Error(`Couldn't send test email: ${error.message}.`);
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
// Send 200 `ok`
|
|
194
|
-
ctx.send({});
|
|
195
|
-
},
|
|
196
|
-
async getSettings (ctx) {
|
|
197
|
-
const config = strapi.plugin('email').service('email').getProviderSettings();
|
|
198
|
-
ctx.send({
|
|
199
|
-
config: pick([
|
|
200
|
-
'provider',
|
|
201
|
-
'settings.defaultFrom',
|
|
202
|
-
'settings.defaultReplyTo',
|
|
203
|
-
'settings.testAddress'
|
|
204
|
-
], config)
|
|
205
|
-
});
|
|
206
|
-
}
|
|
207
|
-
};
|
|
208
|
-
|
|
209
|
-
const controllers = {
|
|
210
|
-
email: emailController
|
|
211
|
-
};
|
|
212
|
-
|
|
213
|
-
const config = {
|
|
214
|
-
default: {
|
|
215
|
-
provider: 'sendmail',
|
|
216
|
-
providerOptions: {},
|
|
217
|
-
settings: {
|
|
218
|
-
defaultFrom: 'Strapi <no-reply@strapi.io>'
|
|
219
|
-
}
|
|
220
|
-
},
|
|
221
|
-
validator () {}
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
const { RateLimitError } = utils.errors;
|
|
225
|
-
var rateLimit = ((config, { strapi })=>async (ctx, next)=>{
|
|
226
|
-
const pluginConfig = strapi.config.get('plugin::email');
|
|
227
|
-
const rateLimitConfig = {
|
|
228
|
-
enabled: true,
|
|
229
|
-
...pluginConfig.ratelimit || {}
|
|
230
|
-
};
|
|
231
|
-
if (rateLimitConfig.enabled === true) {
|
|
232
|
-
// TODO: TS - Do the dynamic import
|
|
233
|
-
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
234
|
-
const rateLimit = require('koa2-ratelimit').RateLimit;
|
|
235
|
-
const requestEmail = get('request.body.email')(ctx);
|
|
236
|
-
const userEmail = isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';
|
|
237
|
-
const loadConfig = {
|
|
238
|
-
interval: {
|
|
239
|
-
min: 5
|
|
240
|
-
},
|
|
241
|
-
max: 5,
|
|
242
|
-
prefixKey: `${userEmail}`,
|
|
243
|
-
handler () {
|
|
244
|
-
throw new RateLimitError();
|
|
245
|
-
},
|
|
246
|
-
...rateLimitConfig,
|
|
247
|
-
...config
|
|
248
|
-
};
|
|
249
|
-
return rateLimit.middleware(loadConfig)(ctx, next);
|
|
250
|
-
}
|
|
251
|
-
return next();
|
|
252
|
-
});
|
|
253
|
-
|
|
254
|
-
var middlewares = {
|
|
255
|
-
rateLimit
|
|
256
|
-
};
|
|
1
|
+
import { bootstrap } from './bootstrap.mjs';
|
|
2
|
+
import { services } from './services/index.mjs';
|
|
3
|
+
import { routes } from './routes/index.mjs';
|
|
4
|
+
import { controllers } from './controllers/index.mjs';
|
|
5
|
+
import { config } from './config.mjs';
|
|
6
|
+
import middlewares from './middlewares/index.mjs';
|
|
257
7
|
|
|
258
8
|
var index = {
|
|
259
9
|
bootstrap,
|
|
@@ -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/middlewares/rateLimit.ts","../../server/src/middlewares/index.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 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","import rateLimit from './rateLimit';\n\nexport { default as rateLimit } from './rateLimit';\n\nexport default {\n rateLimit,\n};\n","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":["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","RateLimitError","utils","next","pluginConfig","rateLimitConfig","enabled","ratelimit","rateLimit","RateLimit","requestEmail","userEmail","isString","loadConfig","interval","min","max","prefixKey","middleware","middlewares"],"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 @@
|
|
|
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;gBACLC,SAAW,EAAA,CAAC,EAAEP,SAAAA,CAAU,CAAC;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;gBACLC,SAAW,EAAA,CAAC,EAAEP,SAAAA,CAAU,CAAC;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 @@
|
|
|
1
|
+
{"version":3,"file":"content-api.js","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["export default {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n },\n ],\n};\n"],"names":["type","routes","method","path","handler"],"mappings":";;AAAA,iBAAe;IACbA,IAAM,EAAA,aAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA;AACX;AACD;AACH,CAAE;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"content-api.mjs","sources":["../../../server/src/routes/content-api.ts"],"sourcesContent":["export default {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n },\n ],\n};\n"],"names":["type","routes","method","path","handler"],"mappings":"AAAA,iBAAe;IACbA,IAAM,EAAA,aAAA;IACNC,MAAQ,EAAA;AACN,QAAA;YACEC,MAAQ,EAAA,MAAA;YACRC,IAAM,EAAA,GAAA;YACNC,OAAS,EAAA;AACX;AACD;AACH,CAAE;;;;"}
|