@strapi/email 0.0.0-next.2a1c7a281f8080296033541146ea489dcd441daa → 0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f
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/chunks/{Settings-D8WJjMq7.js → Settings-BBq0I4Nx.js} +2 -2
- package/dist/admin/chunks/{Settings-D8WJjMq7.js.map → Settings-BBq0I4Nx.js.map} +1 -1
- package/dist/admin/chunks/{Settings-DIQi_hxN.mjs → Settings-PuQuVXHu.mjs} +2 -2
- package/dist/admin/chunks/{Settings-DIQi_hxN.mjs.map → Settings-PuQuVXHu.mjs.map} +1 -1
- package/dist/admin/chunks/{index-f_JAHN1f.mjs → index-BPAZGe7V.mjs} +3 -3
- package/dist/admin/chunks/{index-f_JAHN1f.mjs.map → index-BPAZGe7V.mjs.map} +1 -1
- package/dist/admin/chunks/{index-HXXlrjit.js → index-uY5sPjIN.js} +3 -3
- package/dist/admin/chunks/{index-HXXlrjit.js.map → index-uY5sPjIN.js.map} +1 -1
- package/dist/admin/chunks/uk-DWA4QHtk.js +30 -0
- package/dist/admin/chunks/uk-DWA4QHtk.js.map +1 -0
- package/dist/admin/chunks/uk-Dsq-0GyK.mjs +27 -0
- package/dist/admin/chunks/uk-Dsq-0GyK.mjs.map +1 -0
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +36 -1
- package/dist/server/index.js.map +1 -1
- package/dist/server/index.mjs +38 -3
- package/dist/server/index.mjs.map +1 -1
- package/dist/server/src/index.d.ts +5 -0
- package/dist/server/src/index.d.ts.map +1 -1
- package/dist/server/src/middlewares/index.d.ts +9 -0
- package/dist/server/src/middlewares/index.d.ts.map +1 -0
- package/dist/server/src/middlewares/rateLimit.d.ts +7 -0
- package/dist/server/src/middlewares/rateLimit.d.ts.map +1 -0
- package/package.json +9 -8
- package/dist/admin/chunks/uk-CQim5OiT.mjs +0 -4
- package/dist/admin/chunks/uk-CQim5OiT.mjs.map +0 -1
- package/dist/admin/chunks/uk-nM0yP_CK.js +0 -6
- package/dist/admin/chunks/uk-nM0yP_CK.js.map +0 -1
|
@@ -9,7 +9,7 @@ var reactIntl = require('react-intl');
|
|
|
9
9
|
var reactQuery = require('react-query');
|
|
10
10
|
var styledComponents = require('styled-components');
|
|
11
11
|
var yup = require('yup');
|
|
12
|
-
var index = require('./index-
|
|
12
|
+
var index = require('./index-uY5sPjIN.js');
|
|
13
13
|
|
|
14
14
|
function _interopNamespaceDefault(e) {
|
|
15
15
|
var n = Object.create(null);
|
|
@@ -380,4 +380,4 @@ const SettingsPage = ()=>{
|
|
|
380
380
|
};
|
|
381
381
|
|
|
382
382
|
exports.ProtectedSettingsPage = ProtectedSettingsPage;
|
|
383
|
-
//# sourceMappingURL=Settings-
|
|
383
|
+
//# sourceMappingURL=Settings-BBq0I4Nx.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings-D8WJjMq7.js","sources":["../../../admin/src/utils/getYupInnerErrors.ts","../../../admin/src/utils/schema.ts","../../../admin/src/pages/Settings.tsx"],"sourcesContent":["import type { MessageDescriptor, PrimitiveType } from 'react-intl';\nimport type { ValidationError } from 'yup';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst extractValuesFromYupError = (\n errorType?: string | undefined,\n errorParams?: Record<string, any> | undefined\n) => {\n if (!errorType || !errorParams) {\n return {};\n }\n\n return {\n [errorType]: errorParams[errorType],\n };\n};\n\nconst getYupInnerErrors = (error: ValidationError) =>\n (error?.inner || []).reduce<Record<string, TranslationMessage>>((acc, currentError) => {\n if (currentError.path) {\n acc[currentError.path.split('[').join('.').split(']').join('')] = {\n id: currentError.message,\n defaultMessage: currentError.message,\n values: extractValuesFromYupError(currentError?.type, currentError?.params),\n };\n }\n\n return acc;\n }, {});\n\nexport { getYupInnerErrors };\n","import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nexport const schema = yup.object().shape({\n email: yup.string().email(translatedErrors.email.id).required(translatedErrors.required.id),\n});\n","import * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n Grid,\n SingleSelectOption,\n SingleSelect,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Mail } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useQuery, useMutation } from 'react-query';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { PERMISSIONS } from '../constants';\nimport { getYupInnerErrors } from '../utils/getYupInnerErrors';\nimport { schema } from '../utils/schema';\n\nimport type { EmailSettings } from '../../../shared/types';\n\nconst DocumentationLink = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\ninterface MutationBody {\n to: string;\n}\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n\nconst SettingsPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n\n const [testAddress, setTestAddress] = React.useState('');\n const [isTestAddressValid, setIsTestAddressValid] = React.useState(false);\n\n // TODO: I'm not sure how to type this. I think it should be Record<string, TranslationMessage> but that type is defined in the helper-plugin\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [formErrors, setFormErrors] = React.useState<Record<string, any>>({});\n\n const { data, isLoading } = useQuery(['email', 'settings'], async () => {\n const res = await get<EmailSettings>('/email/settings');\n const {\n data: { config },\n } = res;\n\n return config;\n });\n\n const mutation = useMutation<void, Error, MutationBody>(\n async (body) => {\n await post('/email/test', body);\n },\n {\n onError() {\n toggleNotification!({\n type: 'danger',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.error',\n defaultMessage: 'Failed to send a test mail to {to}',\n },\n { to: testAddress }\n ),\n });\n },\n onSuccess() {\n toggleNotification!({\n type: 'success',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.success',\n defaultMessage: 'Email test succeeded, check the {to} mailbox',\n },\n { to: testAddress }\n ),\n });\n },\n retry: false,\n }\n );\n\n React.useEffect(() => {\n schema\n .validate({ email: testAddress }, { abortEarly: false })\n .then(() => setIsTestAddressValid(true))\n .catch(() => setIsTestAddressValid(false));\n }, [testAddress]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setTestAddress(() => event.target.value);\n };\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n try {\n await schema.validate({ email: testAddress }, { abortEarly: false });\n } catch (error) {\n if (error instanceof ValidationError) {\n setFormErrors(getYupInnerErrors(error));\n }\n }\n\n mutation.mutate({ to: testAddress });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main labelledBy=\"title\" aria-busy={isLoading || mutation.isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n id=\"title\"\n title={formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n })}\n subtitle={formatMessage({\n id: 'email.Settings.email.plugin.subTitle',\n defaultMessage: 'Test the settings for the Email plugin',\n })}\n />\n\n <Layouts.Content>\n {data && (\n <form onSubmit={handleSubmit}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.config',\n defaultMessage: 'Configuration',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'email.Settings.email.plugin.text.configuration',\n defaultMessage:\n 'The plugin is configured through the {file} file, checkout this {link} for the documentation.',\n },\n {\n file: './config/plugins.js',\n link: (\n <DocumentationLink\n href=\"https://docs.strapi.io/developer-docs/latest/plugins/email.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'email.link',\n defaultMessage: 'Link',\n })}\n </DocumentationLink>\n ),\n }\n )}\n </Typography>\n </Flex>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"shipper-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultFrom',\n defaultMessage: 'Default sender email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultFrom',\n defaultMessage: \"ex: Strapi No-Reply '<'no-reply@strapi.io'>'\",\n })}\n disabled\n value={data.settings.defaultFrom}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"response-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultReplyTo',\n defaultMessage: 'Default response email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultReplyTo',\n defaultMessage: `ex: Strapi '<'example@strapi.io'>'`,\n })}\n disabled\n value={data.settings.defaultReplyTo}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"email-provider\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.provider',\n defaultMessage: 'Email provider',\n })}\n </Field.Label>\n <SingleSelect disabled value={data.provider}>\n <SingleSelectOption value={data.provider}>\n {data.provider}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={4}\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.test',\n defaultMessage: 'Test email delivery',\n })}\n </Typography>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"test-address\"\n error={\n formErrors.email?.id &&\n formatMessage({\n id: `email.${formErrors.email?.id}`,\n defaultMessage: 'This is not a valid email',\n })\n }\n >\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.testAddress',\n defaultMessage: 'Recipient email',\n })}\n </Field.Label>\n <TextInput\n onChange={handleChange}\n value={testAddress}\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.testAddress',\n defaultMessage: 'ex: developer@example.com',\n })}\n />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={7} s={12} direction=\"column\" alignItems=\"start\">\n <Button\n loading={mutation.isLoading}\n disabled={!isTestAddressValid}\n type=\"submit\"\n startIcon={<Mail />}\n >\n {formatMessage({\n id: 'email.Settings.email.plugin.button.test-email',\n defaultMessage: 'Send test email',\n })}\n </Button>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Flex>\n </form>\n )}\n </Layouts.Content>\n </Page.Main>\n );\n};\n"],"names":["extractValuesFromYupError","errorType","errorParams","getYupInnerErrors","error","inner","reduce","acc","currentError","path","split","join","id","message","defaultMessage","values","type","params","schema","yup","object","shape","email","string","translatedErrors","required","DocumentationLink","styled","a","theme","colors","primary600","ProtectedSettingsPage","_jsx","Page","Protect","permissions","PERMISSIONS","settings","SettingsPage","toggleNotification","useNotification","formatMessage","useIntl","get","post","useFetchClient","testAddress","setTestAddress","React","useState","isTestAddressValid","setIsTestAddressValid","formErrors","setFormErrors","data","isLoading","useQuery","res","config","mutation","useMutation","body","onError","to","onSuccess","retry","useEffect","validate","abortEarly","then","catch","handleChange","event","target","value","handleSubmit","preventDefault","ValidationError","mutate","Loading","_jsxs","Main","labelledBy","aria-busy","Title","name","Layouts","Header","title","subtitle","Content","form","onSubmit","Flex","direction","alignItems","gap","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Typography","variant","tag","file","link","href","rel","Grid","Root","Item","col","s","Field","Label","TextInput","placeholder","disabled","defaultFrom","defaultReplyTo","SingleSelect","provider","SingleSelectOption","onChange","Button","loading","startIcon","Mail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Settings-BBq0I4Nx.js","sources":["../../../admin/src/utils/getYupInnerErrors.ts","../../../admin/src/utils/schema.ts","../../../admin/src/pages/Settings.tsx"],"sourcesContent":["import type { MessageDescriptor, PrimitiveType } from 'react-intl';\nimport type { ValidationError } from 'yup';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst extractValuesFromYupError = (\n errorType?: string | undefined,\n errorParams?: Record<string, any> | undefined\n) => {\n if (!errorType || !errorParams) {\n return {};\n }\n\n return {\n [errorType]: errorParams[errorType],\n };\n};\n\nconst getYupInnerErrors = (error: ValidationError) =>\n (error?.inner || []).reduce<Record<string, TranslationMessage>>((acc, currentError) => {\n if (currentError.path) {\n acc[currentError.path.split('[').join('.').split(']').join('')] = {\n id: currentError.message,\n defaultMessage: currentError.message,\n values: extractValuesFromYupError(currentError?.type, currentError?.params),\n };\n }\n\n return acc;\n }, {});\n\nexport { getYupInnerErrors };\n","import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nexport const schema = yup.object().shape({\n email: yup.string().email(translatedErrors.email.id).required(translatedErrors.required.id),\n});\n","import * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n Grid,\n SingleSelectOption,\n SingleSelect,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Mail } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useQuery, useMutation } from 'react-query';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { PERMISSIONS } from '../constants';\nimport { getYupInnerErrors } from '../utils/getYupInnerErrors';\nimport { schema } from '../utils/schema';\n\nimport type { EmailSettings } from '../../../shared/types';\n\nconst DocumentationLink = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\ninterface MutationBody {\n to: string;\n}\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n\nconst SettingsPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n\n const [testAddress, setTestAddress] = React.useState('');\n const [isTestAddressValid, setIsTestAddressValid] = React.useState(false);\n\n // TODO: I'm not sure how to type this. I think it should be Record<string, TranslationMessage> but that type is defined in the helper-plugin\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [formErrors, setFormErrors] = React.useState<Record<string, any>>({});\n\n const { data, isLoading } = useQuery(['email', 'settings'], async () => {\n const res = await get<EmailSettings>('/email/settings');\n const {\n data: { config },\n } = res;\n\n return config;\n });\n\n const mutation = useMutation<void, Error, MutationBody>(\n async (body) => {\n await post('/email/test', body);\n },\n {\n onError() {\n toggleNotification!({\n type: 'danger',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.error',\n defaultMessage: 'Failed to send a test mail to {to}',\n },\n { to: testAddress }\n ),\n });\n },\n onSuccess() {\n toggleNotification!({\n type: 'success',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.success',\n defaultMessage: 'Email test succeeded, check the {to} mailbox',\n },\n { to: testAddress }\n ),\n });\n },\n retry: false,\n }\n );\n\n React.useEffect(() => {\n schema\n .validate({ email: testAddress }, { abortEarly: false })\n .then(() => setIsTestAddressValid(true))\n .catch(() => setIsTestAddressValid(false));\n }, [testAddress]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setTestAddress(() => event.target.value);\n };\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n try {\n await schema.validate({ email: testAddress }, { abortEarly: false });\n } catch (error) {\n if (error instanceof ValidationError) {\n setFormErrors(getYupInnerErrors(error));\n }\n }\n\n mutation.mutate({ to: testAddress });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main labelledBy=\"title\" aria-busy={isLoading || mutation.isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n id=\"title\"\n title={formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n })}\n subtitle={formatMessage({\n id: 'email.Settings.email.plugin.subTitle',\n defaultMessage: 'Test the settings for the Email plugin',\n })}\n />\n\n <Layouts.Content>\n {data && (\n <form onSubmit={handleSubmit}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.config',\n defaultMessage: 'Configuration',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'email.Settings.email.plugin.text.configuration',\n defaultMessage:\n 'The plugin is configured through the {file} file, checkout this {link} for the documentation.',\n },\n {\n file: './config/plugins.js',\n link: (\n <DocumentationLink\n href=\"https://docs.strapi.io/developer-docs/latest/plugins/email.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'email.link',\n defaultMessage: 'Link',\n })}\n </DocumentationLink>\n ),\n }\n )}\n </Typography>\n </Flex>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"shipper-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultFrom',\n defaultMessage: 'Default sender email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultFrom',\n defaultMessage: \"ex: Strapi No-Reply '<'no-reply@strapi.io'>'\",\n })}\n disabled\n value={data.settings.defaultFrom}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"response-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultReplyTo',\n defaultMessage: 'Default response email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultReplyTo',\n defaultMessage: `ex: Strapi '<'example@strapi.io'>'`,\n })}\n disabled\n value={data.settings.defaultReplyTo}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"email-provider\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.provider',\n defaultMessage: 'Email provider',\n })}\n </Field.Label>\n <SingleSelect disabled value={data.provider}>\n <SingleSelectOption value={data.provider}>\n {data.provider}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={4}\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.test',\n defaultMessage: 'Test email delivery',\n })}\n </Typography>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"test-address\"\n error={\n formErrors.email?.id &&\n formatMessage({\n id: `email.${formErrors.email?.id}`,\n defaultMessage: 'This is not a valid email',\n })\n }\n >\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.testAddress',\n defaultMessage: 'Recipient email',\n })}\n </Field.Label>\n <TextInput\n onChange={handleChange}\n value={testAddress}\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.testAddress',\n defaultMessage: 'ex: developer@example.com',\n })}\n />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={7} s={12} direction=\"column\" alignItems=\"start\">\n <Button\n loading={mutation.isLoading}\n disabled={!isTestAddressValid}\n type=\"submit\"\n startIcon={<Mail />}\n >\n {formatMessage({\n id: 'email.Settings.email.plugin.button.test-email',\n defaultMessage: 'Send test email',\n })}\n </Button>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Flex>\n </form>\n )}\n </Layouts.Content>\n </Page.Main>\n );\n};\n"],"names":["extractValuesFromYupError","errorType","errorParams","getYupInnerErrors","error","inner","reduce","acc","currentError","path","split","join","id","message","defaultMessage","values","type","params","schema","yup","object","shape","email","string","translatedErrors","required","DocumentationLink","styled","a","theme","colors","primary600","ProtectedSettingsPage","_jsx","Page","Protect","permissions","PERMISSIONS","settings","SettingsPage","toggleNotification","useNotification","formatMessage","useIntl","get","post","useFetchClient","testAddress","setTestAddress","React","useState","isTestAddressValid","setIsTestAddressValid","formErrors","setFormErrors","data","isLoading","useQuery","res","config","mutation","useMutation","body","onError","to","onSuccess","retry","useEffect","validate","abortEarly","then","catch","handleChange","event","target","value","handleSubmit","preventDefault","ValidationError","mutate","Loading","_jsxs","Main","labelledBy","aria-busy","Title","name","Layouts","Header","title","subtitle","Content","form","onSubmit","Flex","direction","alignItems","gap","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Typography","variant","tag","file","link","href","rel","Grid","Root","Item","col","s","Field","Label","TextInput","placeholder","disabled","defaultFrom","defaultReplyTo","SingleSelect","provider","SingleSelectOption","onChange","Button","loading","startIcon","Mail"],"mappings":"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"}
|
|
@@ -8,7 +8,7 @@ import { useQuery, useMutation } from 'react-query';
|
|
|
8
8
|
import { styled } from 'styled-components';
|
|
9
9
|
import * as yup from 'yup';
|
|
10
10
|
import { ValidationError } from 'yup';
|
|
11
|
-
import { P as PERMISSIONS } from './index-
|
|
11
|
+
import { P as PERMISSIONS } from './index-BPAZGe7V.mjs';
|
|
12
12
|
|
|
13
13
|
const extractValuesFromYupError = (errorType, errorParams)=>{
|
|
14
14
|
if (!errorType || !errorParams) {
|
|
@@ -359,4 +359,4 @@ const SettingsPage = ()=>{
|
|
|
359
359
|
};
|
|
360
360
|
|
|
361
361
|
export { ProtectedSettingsPage };
|
|
362
|
-
//# sourceMappingURL=Settings-
|
|
362
|
+
//# sourceMappingURL=Settings-PuQuVXHu.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Settings-DIQi_hxN.mjs","sources":["../../../admin/src/utils/getYupInnerErrors.ts","../../../admin/src/utils/schema.ts","../../../admin/src/pages/Settings.tsx"],"sourcesContent":["import type { MessageDescriptor, PrimitiveType } from 'react-intl';\nimport type { ValidationError } from 'yup';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst extractValuesFromYupError = (\n errorType?: string | undefined,\n errorParams?: Record<string, any> | undefined\n) => {\n if (!errorType || !errorParams) {\n return {};\n }\n\n return {\n [errorType]: errorParams[errorType],\n };\n};\n\nconst getYupInnerErrors = (error: ValidationError) =>\n (error?.inner || []).reduce<Record<string, TranslationMessage>>((acc, currentError) => {\n if (currentError.path) {\n acc[currentError.path.split('[').join('.').split(']').join('')] = {\n id: currentError.message,\n defaultMessage: currentError.message,\n values: extractValuesFromYupError(currentError?.type, currentError?.params),\n };\n }\n\n return acc;\n }, {});\n\nexport { getYupInnerErrors };\n","import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nexport const schema = yup.object().shape({\n email: yup.string().email(translatedErrors.email.id).required(translatedErrors.required.id),\n});\n","import * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n Grid,\n SingleSelectOption,\n SingleSelect,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Mail } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useQuery, useMutation } from 'react-query';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { PERMISSIONS } from '../constants';\nimport { getYupInnerErrors } from '../utils/getYupInnerErrors';\nimport { schema } from '../utils/schema';\n\nimport type { EmailSettings } from '../../../shared/types';\n\nconst DocumentationLink = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\ninterface MutationBody {\n to: string;\n}\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n\nconst SettingsPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n\n const [testAddress, setTestAddress] = React.useState('');\n const [isTestAddressValid, setIsTestAddressValid] = React.useState(false);\n\n // TODO: I'm not sure how to type this. I think it should be Record<string, TranslationMessage> but that type is defined in the helper-plugin\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [formErrors, setFormErrors] = React.useState<Record<string, any>>({});\n\n const { data, isLoading } = useQuery(['email', 'settings'], async () => {\n const res = await get<EmailSettings>('/email/settings');\n const {\n data: { config },\n } = res;\n\n return config;\n });\n\n const mutation = useMutation<void, Error, MutationBody>(\n async (body) => {\n await post('/email/test', body);\n },\n {\n onError() {\n toggleNotification!({\n type: 'danger',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.error',\n defaultMessage: 'Failed to send a test mail to {to}',\n },\n { to: testAddress }\n ),\n });\n },\n onSuccess() {\n toggleNotification!({\n type: 'success',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.success',\n defaultMessage: 'Email test succeeded, check the {to} mailbox',\n },\n { to: testAddress }\n ),\n });\n },\n retry: false,\n }\n );\n\n React.useEffect(() => {\n schema\n .validate({ email: testAddress }, { abortEarly: false })\n .then(() => setIsTestAddressValid(true))\n .catch(() => setIsTestAddressValid(false));\n }, [testAddress]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setTestAddress(() => event.target.value);\n };\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n try {\n await schema.validate({ email: testAddress }, { abortEarly: false });\n } catch (error) {\n if (error instanceof ValidationError) {\n setFormErrors(getYupInnerErrors(error));\n }\n }\n\n mutation.mutate({ to: testAddress });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main labelledBy=\"title\" aria-busy={isLoading || mutation.isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n id=\"title\"\n title={formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n })}\n subtitle={formatMessage({\n id: 'email.Settings.email.plugin.subTitle',\n defaultMessage: 'Test the settings for the Email plugin',\n })}\n />\n\n <Layouts.Content>\n {data && (\n <form onSubmit={handleSubmit}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.config',\n defaultMessage: 'Configuration',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'email.Settings.email.plugin.text.configuration',\n defaultMessage:\n 'The plugin is configured through the {file} file, checkout this {link} for the documentation.',\n },\n {\n file: './config/plugins.js',\n link: (\n <DocumentationLink\n href=\"https://docs.strapi.io/developer-docs/latest/plugins/email.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'email.link',\n defaultMessage: 'Link',\n })}\n </DocumentationLink>\n ),\n }\n )}\n </Typography>\n </Flex>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"shipper-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultFrom',\n defaultMessage: 'Default sender email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultFrom',\n defaultMessage: \"ex: Strapi No-Reply '<'no-reply@strapi.io'>'\",\n })}\n disabled\n value={data.settings.defaultFrom}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"response-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultReplyTo',\n defaultMessage: 'Default response email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultReplyTo',\n defaultMessage: `ex: Strapi '<'example@strapi.io'>'`,\n })}\n disabled\n value={data.settings.defaultReplyTo}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"email-provider\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.provider',\n defaultMessage: 'Email provider',\n })}\n </Field.Label>\n <SingleSelect disabled value={data.provider}>\n <SingleSelectOption value={data.provider}>\n {data.provider}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={4}\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.test',\n defaultMessage: 'Test email delivery',\n })}\n </Typography>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"test-address\"\n error={\n formErrors.email?.id &&\n formatMessage({\n id: `email.${formErrors.email?.id}`,\n defaultMessage: 'This is not a valid email',\n })\n }\n >\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.testAddress',\n defaultMessage: 'Recipient email',\n })}\n </Field.Label>\n <TextInput\n onChange={handleChange}\n value={testAddress}\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.testAddress',\n defaultMessage: 'ex: developer@example.com',\n })}\n />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={7} s={12} direction=\"column\" alignItems=\"start\">\n <Button\n loading={mutation.isLoading}\n disabled={!isTestAddressValid}\n type=\"submit\"\n startIcon={<Mail />}\n >\n {formatMessage({\n id: 'email.Settings.email.plugin.button.test-email',\n defaultMessage: 'Send test email',\n })}\n </Button>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Flex>\n </form>\n )}\n </Layouts.Content>\n </Page.Main>\n );\n};\n"],"names":["extractValuesFromYupError","errorType","errorParams","getYupInnerErrors","error","inner","reduce","acc","currentError","path","split","join","id","message","defaultMessage","values","type","params","schema","yup","object","shape","email","string","translatedErrors","required","DocumentationLink","styled","a","theme","colors","primary600","ProtectedSettingsPage","_jsx","Page","Protect","permissions","PERMISSIONS","settings","SettingsPage","toggleNotification","useNotification","formatMessage","useIntl","get","post","useFetchClient","testAddress","setTestAddress","React","useState","isTestAddressValid","setIsTestAddressValid","formErrors","setFormErrors","data","isLoading","useQuery","res","config","mutation","useMutation","body","onError","to","onSuccess","retry","useEffect","validate","abortEarly","then","catch","handleChange","event","target","value","handleSubmit","preventDefault","ValidationError","mutate","Loading","_jsxs","Main","labelledBy","aria-busy","Title","name","Layouts","Header","title","subtitle","Content","form","onSubmit","Flex","direction","alignItems","gap","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Typography","variant","tag","file","link","href","rel","Grid","Root","Item","col","s","Field","Label","TextInput","placeholder","disabled","defaultFrom","defaultReplyTo","SingleSelect","provider","SingleSelectOption","onChange","Button","loading","startIcon","Mail"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Settings-PuQuVXHu.mjs","sources":["../../../admin/src/utils/getYupInnerErrors.ts","../../../admin/src/utils/schema.ts","../../../admin/src/pages/Settings.tsx"],"sourcesContent":["import type { MessageDescriptor, PrimitiveType } from 'react-intl';\nimport type { ValidationError } from 'yup';\n\ninterface TranslationMessage extends MessageDescriptor {\n values?: Record<string, PrimitiveType>;\n}\n\nconst extractValuesFromYupError = (\n errorType?: string | undefined,\n errorParams?: Record<string, any> | undefined\n) => {\n if (!errorType || !errorParams) {\n return {};\n }\n\n return {\n [errorType]: errorParams[errorType],\n };\n};\n\nconst getYupInnerErrors = (error: ValidationError) =>\n (error?.inner || []).reduce<Record<string, TranslationMessage>>((acc, currentError) => {\n if (currentError.path) {\n acc[currentError.path.split('[').join('.').split(']').join('')] = {\n id: currentError.message,\n defaultMessage: currentError.message,\n values: extractValuesFromYupError(currentError?.type, currentError?.params),\n };\n }\n\n return acc;\n }, {});\n\nexport { getYupInnerErrors };\n","import { translatedErrors } from '@strapi/admin/strapi-admin';\nimport * as yup from 'yup';\n\nexport const schema = yup.object().shape({\n email: yup.string().email(translatedErrors.email.id).required(translatedErrors.required.id),\n});\n","import * as React from 'react';\n\nimport { Page, useNotification, useFetchClient, Layouts } from '@strapi/admin/strapi-admin';\nimport {\n Box,\n Button,\n Flex,\n Grid,\n SingleSelectOption,\n SingleSelect,\n TextInput,\n Typography,\n Field,\n} from '@strapi/design-system';\nimport { Mail } from '@strapi/icons';\nimport { useIntl } from 'react-intl';\nimport { useQuery, useMutation } from 'react-query';\nimport { styled } from 'styled-components';\nimport { ValidationError } from 'yup';\n\nimport { PERMISSIONS } from '../constants';\nimport { getYupInnerErrors } from '../utils/getYupInnerErrors';\nimport { schema } from '../utils/schema';\n\nimport type { EmailSettings } from '../../../shared/types';\n\nconst DocumentationLink = styled.a`\n color: ${({ theme }) => theme.colors.primary600};\n`;\n\ninterface MutationBody {\n to: string;\n}\n\nexport const ProtectedSettingsPage = () => (\n <Page.Protect permissions={PERMISSIONS.settings}>\n <SettingsPage />\n </Page.Protect>\n);\n\nconst SettingsPage = () => {\n const { toggleNotification } = useNotification();\n const { formatMessage } = useIntl();\n const { get, post } = useFetchClient();\n\n const [testAddress, setTestAddress] = React.useState('');\n const [isTestAddressValid, setIsTestAddressValid] = React.useState(false);\n\n // TODO: I'm not sure how to type this. I think it should be Record<string, TranslationMessage> but that type is defined in the helper-plugin\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const [formErrors, setFormErrors] = React.useState<Record<string, any>>({});\n\n const { data, isLoading } = useQuery(['email', 'settings'], async () => {\n const res = await get<EmailSettings>('/email/settings');\n const {\n data: { config },\n } = res;\n\n return config;\n });\n\n const mutation = useMutation<void, Error, MutationBody>(\n async (body) => {\n await post('/email/test', body);\n },\n {\n onError() {\n toggleNotification!({\n type: 'danger',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.error',\n defaultMessage: 'Failed to send a test mail to {to}',\n },\n { to: testAddress }\n ),\n });\n },\n onSuccess() {\n toggleNotification!({\n type: 'success',\n message: formatMessage(\n {\n id: 'email.Settings.email.plugin.notification.test.success',\n defaultMessage: 'Email test succeeded, check the {to} mailbox',\n },\n { to: testAddress }\n ),\n });\n },\n retry: false,\n }\n );\n\n React.useEffect(() => {\n schema\n .validate({ email: testAddress }, { abortEarly: false })\n .then(() => setIsTestAddressValid(true))\n .catch(() => setIsTestAddressValid(false));\n }, [testAddress]);\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n setTestAddress(() => event.target.value);\n };\n\n const handleSubmit = async (event: React.FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n\n try {\n await schema.validate({ email: testAddress }, { abortEarly: false });\n } catch (error) {\n if (error instanceof ValidationError) {\n setFormErrors(getYupInnerErrors(error));\n }\n }\n\n mutation.mutate({ to: testAddress });\n };\n\n if (isLoading) {\n return <Page.Loading />;\n }\n\n return (\n <Page.Main labelledBy=\"title\" aria-busy={isLoading || mutation.isLoading}>\n <Page.Title>\n {formatMessage(\n { id: 'Settings.PageTitle', defaultMessage: 'Settings - {name}' },\n {\n name: formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n }),\n }\n )}\n </Page.Title>\n <Layouts.Header\n id=\"title\"\n title={formatMessage({\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Configuration',\n })}\n subtitle={formatMessage({\n id: 'email.Settings.email.plugin.subTitle',\n defaultMessage: 'Test the settings for the Email plugin',\n })}\n />\n\n <Layouts.Content>\n {data && (\n <form onSubmit={handleSubmit}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={7}>\n <Box\n background=\"neutral0\"\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Flex direction=\"column\" alignItems=\"stretch\" gap={4}>\n <Flex direction=\"column\" alignItems=\"stretch\" gap={1}>\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.config',\n defaultMessage: 'Configuration',\n })}\n </Typography>\n <Typography>\n {formatMessage(\n {\n id: 'email.Settings.email.plugin.text.configuration',\n defaultMessage:\n 'The plugin is configured through the {file} file, checkout this {link} for the documentation.',\n },\n {\n file: './config/plugins.js',\n link: (\n <DocumentationLink\n href=\"https://docs.strapi.io/developer-docs/latest/plugins/email.html\"\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n >\n {formatMessage({\n id: 'email.link',\n defaultMessage: 'Link',\n })}\n </DocumentationLink>\n ),\n }\n )}\n </Typography>\n </Flex>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"shipper-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultFrom',\n defaultMessage: 'Default sender email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultFrom',\n defaultMessage: \"ex: Strapi No-Reply '<'no-reply@strapi.io'>'\",\n })}\n disabled\n value={data.settings.defaultFrom}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"response-email\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.defaultReplyTo',\n defaultMessage: 'Default response email',\n })}\n </Field.Label>\n <TextInput\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.defaultReplyTo',\n defaultMessage: `ex: Strapi '<'example@strapi.io'>'`,\n })}\n disabled\n value={data.settings.defaultReplyTo}\n />\n </Field.Root>\n </Grid.Item>\n\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root name=\"email-provider\">\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.provider',\n defaultMessage: 'Email provider',\n })}\n </Field.Label>\n <SingleSelect disabled value={data.provider}>\n <SingleSelectOption value={data.provider}>\n {data.provider}\n </SingleSelectOption>\n </SingleSelect>\n </Field.Root>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Box>\n\n <Flex\n alignItems=\"stretch\"\n background=\"neutral0\"\n direction=\"column\"\n gap={4}\n hasRadius\n shadow=\"filterShadow\"\n paddingTop={6}\n paddingBottom={6}\n paddingLeft={7}\n paddingRight={7}\n >\n <Typography variant=\"delta\" tag=\"h2\">\n {formatMessage({\n id: 'email.Settings.email.plugin.title.test',\n defaultMessage: 'Test email delivery',\n })}\n </Typography>\n\n <Grid.Root gap={5}>\n <Grid.Item col={6} s={12} direction=\"column\" alignItems=\"stretch\">\n <Field.Root\n name=\"test-address\"\n error={\n formErrors.email?.id &&\n formatMessage({\n id: `email.${formErrors.email?.id}`,\n defaultMessage: 'This is not a valid email',\n })\n }\n >\n <Field.Label>\n {formatMessage({\n id: 'email.Settings.email.plugin.label.testAddress',\n defaultMessage: 'Recipient email',\n })}\n </Field.Label>\n <TextInput\n onChange={handleChange}\n value={testAddress}\n placeholder={formatMessage({\n id: 'email.Settings.email.plugin.placeholder.testAddress',\n defaultMessage: 'ex: developer@example.com',\n })}\n />\n </Field.Root>\n </Grid.Item>\n <Grid.Item col={7} s={12} direction=\"column\" alignItems=\"start\">\n <Button\n loading={mutation.isLoading}\n disabled={!isTestAddressValid}\n type=\"submit\"\n startIcon={<Mail />}\n >\n {formatMessage({\n id: 'email.Settings.email.plugin.button.test-email',\n defaultMessage: 'Send test email',\n })}\n </Button>\n </Grid.Item>\n </Grid.Root>\n </Flex>\n </Flex>\n </form>\n )}\n </Layouts.Content>\n </Page.Main>\n );\n};\n"],"names":["extractValuesFromYupError","errorType","errorParams","getYupInnerErrors","error","inner","reduce","acc","currentError","path","split","join","id","message","defaultMessage","values","type","params","schema","yup","object","shape","email","string","translatedErrors","required","DocumentationLink","styled","a","theme","colors","primary600","ProtectedSettingsPage","_jsx","Page","Protect","permissions","PERMISSIONS","settings","SettingsPage","toggleNotification","useNotification","formatMessage","useIntl","get","post","useFetchClient","testAddress","setTestAddress","React","useState","isTestAddressValid","setIsTestAddressValid","formErrors","setFormErrors","data","isLoading","useQuery","res","config","mutation","useMutation","body","onError","to","onSuccess","retry","useEffect","validate","abortEarly","then","catch","handleChange","event","target","value","handleSubmit","preventDefault","ValidationError","mutate","Loading","_jsxs","Main","labelledBy","aria-busy","Title","name","Layouts","Header","title","subtitle","Content","form","onSubmit","Flex","direction","alignItems","gap","Box","background","hasRadius","shadow","paddingTop","paddingBottom","paddingLeft","paddingRight","Typography","variant","tag","file","link","href","rel","Grid","Root","Item","col","s","Field","Label","TextInput","placeholder","disabled","defaultFrom","defaultReplyTo","SingleSelect","provider","SingleSelectOption","onChange","Button","loading","startIcon","Mail"],"mappings":"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"}
|
|
@@ -40,7 +40,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
|
40
40
|
case './translations/sk.json': return import('./sk-DDJmUHcx.mjs');
|
|
41
41
|
case './translations/th.json': return import('./th-BqTCSpUc.mjs');
|
|
42
42
|
case './translations/tr.json': return import('./tr-BmrcZCoj.mjs');
|
|
43
|
-
case './translations/uk.json': return import('./uk-
|
|
43
|
+
case './translations/uk.json': return import('./uk-Dsq-0GyK.mjs');
|
|
44
44
|
case './translations/vi.json': return import('./vi-CO9gCtmD.mjs');
|
|
45
45
|
case './translations/zh-Hans.json': return import('./zh-Hans-ChWc00HT.mjs');
|
|
46
46
|
case './translations/zh.json': return import('./zh-CZQ4DV5L.mjs');
|
|
@@ -70,7 +70,7 @@ const admin = {
|
|
|
70
70
|
},
|
|
71
71
|
id: 'settings',
|
|
72
72
|
to: 'email',
|
|
73
|
-
Component: ()=>import('./Settings-
|
|
73
|
+
Component: ()=>import('./Settings-PuQuVXHu.mjs').then((mod)=>({
|
|
74
74
|
default: mod.ProtectedSettingsPage
|
|
75
75
|
})),
|
|
76
76
|
permissions: PERMISSIONS.settings
|
|
@@ -102,4 +102,4 @@ const admin = {
|
|
|
102
102
|
};
|
|
103
103
|
|
|
104
104
|
export { PERMISSIONS as P, admin as a };
|
|
105
|
-
//# sourceMappingURL=index-
|
|
105
|
+
//# sourceMappingURL=index-BPAZGe7V.mjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-BPAZGe7V.mjs","sources":["../../../admin/src/constants.ts","../../../admin/src/utils/prefixPluginTranslations.ts","../../../admin/src/index.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n settings: [{ action: 'plugin::email.settings.read', subject: null }],\n};\n","type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nexport { prefixPluginTranslations };\n","import { PERMISSIONS } from './constants';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n // TODO typing app in strapi/types as every plugin needs it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(app: any) {\n // Create the email settings section\n app.createSettingSection(\n {\n id: 'email',\n intlLabel: { id: 'email.SettingsNav.section-label', defaultMessage: 'Email Plugin' },\n },\n [\n {\n intlLabel: {\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Settings',\n },\n id: 'settings',\n to: 'email',\n Component: () =>\n import('./pages/Settings').then((mod) => ({\n default: mod.ProtectedSettingsPage,\n })),\n permissions: PERMISSIONS.settings,\n },\n ]\n );\n app.registerPlugin({\n id: 'email',\n name: 'email',\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'email'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["PERMISSIONS","settings","action","subject","prefixPluginTranslations","trad","pluginId","Object","keys","reduce","acc","current","admin","register","app","createSettingSection","id","intlLabel","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","registerPlugin","name","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","catch","resolve"],"mappings":"MAAaA,WAAc,GAAA;;;;;IAKzBC,QAAU,EAAA;AAAC,QAAA;YAAEC,MAAQ,EAAA,6BAAA;YAA+BC,OAAS,EAAA;AAAK;AAAE;AACtE;;ACJA,MAAMC,wBAAAA,GAA2B,CAACC,IAAmBC,EAAAA,QAAAA,GAAAA;AAInD,IAAA,OAAOC,OAAOC,IAAI,CAACH,MAAMI,MAAM,CAAC,CAACC,GAAKC,EAAAA,OAAAA,GAAAA;AACpCD,QAAAA,GAAG,CAAC,CAAC,EAAEJ,QAAAA,CAAS,CAAC,EAAEK,OAAQ,CAAA,CAAC,CAAC,GAAGN,IAAI,CAACM,OAAQ,CAAA;QAC7C,OAAOD,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA,MAAME,KAAkC,GAAA;;;AAGtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAQ,EAAA;;AAEfA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAI,EAAA,OAAA;YACJC,SAAW,EAAA;gBAAED,EAAI,EAAA,iCAAA;gBAAmCE,cAAgB,EAAA;AAAe;SAErF,EAAA;AACE,YAAA;gBACED,SAAW,EAAA;oBACTD,EAAI,EAAA,mCAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;gBACAF,EAAI,EAAA,UAAA;gBACJG,EAAI,EAAA,OAAA;gBACJC,SAAW,EAAA,IACT,OAAO,yBAAA,CAAA,CAAoBC,IAAI,CAAC,CAACC,OAAS;AACxCC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFC,gBAAAA,WAAAA,EAAazB,YAAYC;AAC3B;AACD,SAAA,CAAA;AAEHa,QAAAA,GAAAA,CAAIY,cAAc,CAAC;YACjBV,EAAI,EAAA,OAAA;YACJW,IAAM,EAAA;AACR,SAAA,CAAA;AACF,KAAA;;IAEAC,SAAa,CAAA,GAAA,EAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAQC,CAAAA,GAAG,CACrCH,OAAQI,CAAAA,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAO,CAAA,KAAK,CAAC,CAAA,CAC1Cd,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAASa,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMhC,yBAAyBgC,IAAM,EAAA,OAAA,CAAA;AACrCD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA,CACCE,KAAK,CAAC,IAAA;gBACL,OAAO;AACLD,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA;AACJ,SAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQM,OAAO,CAACP,aAAAA,CAAAA;AACzB;AACF;;;;"}
|
|
@@ -42,7 +42,7 @@ function __variableDynamicImportRuntime1__(path) {
|
|
|
42
42
|
case './translations/sk.json': return Promise.resolve().then(function () { return require('./sk-N47IGfwH.js'); });
|
|
43
43
|
case './translations/th.json': return Promise.resolve().then(function () { return require('./th-OW3_QVEZ.js'); });
|
|
44
44
|
case './translations/tr.json': return Promise.resolve().then(function () { return require('./tr-n7J_y4Bh.js'); });
|
|
45
|
-
case './translations/uk.json': return Promise.resolve().then(function () { return require('./uk-
|
|
45
|
+
case './translations/uk.json': return Promise.resolve().then(function () { return require('./uk-DWA4QHtk.js'); });
|
|
46
46
|
case './translations/vi.json': return Promise.resolve().then(function () { return require('./vi-DjJBc-ms.js'); });
|
|
47
47
|
case './translations/zh-Hans.json': return Promise.resolve().then(function () { return require('./zh-Hans-D0bb9tfC.js'); });
|
|
48
48
|
case './translations/zh.json': return Promise.resolve().then(function () { return require('./zh-9wNbbqde.js'); });
|
|
@@ -72,7 +72,7 @@ const admin = {
|
|
|
72
72
|
},
|
|
73
73
|
id: 'settings',
|
|
74
74
|
to: 'email',
|
|
75
|
-
Component: ()=>Promise.resolve().then(function () { return require('./Settings-
|
|
75
|
+
Component: ()=>Promise.resolve().then(function () { return require('./Settings-BBq0I4Nx.js'); }).then((mod)=>({
|
|
76
76
|
default: mod.ProtectedSettingsPage
|
|
77
77
|
})),
|
|
78
78
|
permissions: PERMISSIONS.settings
|
|
@@ -105,4 +105,4 @@ const admin = {
|
|
|
105
105
|
|
|
106
106
|
exports.PERMISSIONS = PERMISSIONS;
|
|
107
107
|
exports.admin = admin;
|
|
108
|
-
//# sourceMappingURL=index-
|
|
108
|
+
//# sourceMappingURL=index-uY5sPjIN.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-uY5sPjIN.js","sources":["../../../admin/src/constants.ts","../../../admin/src/utils/prefixPluginTranslations.ts","../../../admin/src/index.ts"],"sourcesContent":["export const PERMISSIONS = {\n // This permission regards the main component (App) and is used to tell\n // If the plugin link should be displayed in the menu\n // And also if the plugin is accessible. This use case is found when a user types the url of the\n // plugin directly in the browser\n settings: [{ action: 'plugin::email.settings.read', subject: null }],\n};\n","type TradOptions = Record<string, string>;\n\nconst prefixPluginTranslations = (trad: TradOptions, pluginId: string): TradOptions => {\n if (!pluginId) {\n throw new TypeError(\"pluginId can't be empty\");\n }\n return Object.keys(trad).reduce((acc, current) => {\n acc[`${pluginId}.${current}`] = trad[current];\n return acc;\n }, {} as TradOptions);\n};\n\nexport { prefixPluginTranslations };\n","import { PERMISSIONS } from './constants';\nimport { prefixPluginTranslations } from './utils/prefixPluginTranslations';\n\nimport type { Plugin } from '@strapi/types';\n\nconst admin: Plugin.Config.AdminInput = {\n // TODO typing app in strapi/types as every plugin needs it\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n register(app: any) {\n // Create the email settings section\n app.createSettingSection(\n {\n id: 'email',\n intlLabel: { id: 'email.SettingsNav.section-label', defaultMessage: 'Email Plugin' },\n },\n [\n {\n intlLabel: {\n id: 'email.Settings.email.plugin.title',\n defaultMessage: 'Settings',\n },\n id: 'settings',\n to: 'email',\n Component: () =>\n import('./pages/Settings').then((mod) => ({\n default: mod.ProtectedSettingsPage,\n })),\n permissions: PERMISSIONS.settings,\n },\n ]\n );\n app.registerPlugin({\n id: 'email',\n name: 'email',\n });\n },\n // eslint-disable-next-line @typescript-eslint/no-empty-function\n bootstrap() {},\n async registerTrads({ locales }: { locales: string[] }) {\n const importedTrads = await Promise.all(\n locales.map((locale) => {\n return import(`./translations/${locale}.json`)\n .then(({ default: data }) => {\n return {\n data: prefixPluginTranslations(data, 'email'),\n locale,\n };\n })\n .catch(() => {\n return {\n data: {},\n locale,\n };\n });\n })\n );\n\n return Promise.resolve(importedTrads);\n },\n};\n\n// eslint-disable-next-line import/no-default-export\nexport default admin;\n"],"names":["PERMISSIONS","settings","action","subject","prefixPluginTranslations","trad","pluginId","Object","keys","reduce","acc","current","admin","register","app","createSettingSection","id","intlLabel","defaultMessage","to","Component","then","mod","default","ProtectedSettingsPage","permissions","registerPlugin","name","bootstrap","registerTrads","locales","importedTrads","Promise","all","map","locale","data","catch","resolve"],"mappings":";;MAAaA,WAAc,GAAA;;;;;IAKzBC,QAAU,EAAA;AAAC,QAAA;YAAEC,MAAQ,EAAA,6BAAA;YAA+BC,OAAS,EAAA;AAAK;AAAE;AACtE;;ACJA,MAAMC,wBAAAA,GAA2B,CAACC,IAAmBC,EAAAA,QAAAA,GAAAA;AAInD,IAAA,OAAOC,OAAOC,IAAI,CAACH,MAAMI,MAAM,CAAC,CAACC,GAAKC,EAAAA,OAAAA,GAAAA;AACpCD,QAAAA,GAAG,CAAC,CAAC,EAAEJ,QAAAA,CAAS,CAAC,EAAEK,OAAQ,CAAA,CAAC,CAAC,GAAGN,IAAI,CAACM,OAAQ,CAAA;QAC7C,OAAOD,GAAAA;AACT,KAAA,EAAG,EAAC,CAAA;AACN,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACLA,MAAME,KAAkC,GAAA;;;AAGtCC,IAAAA,QAAAA,CAAAA,CAASC,GAAQ,EAAA;;AAEfA,QAAAA,GAAAA,CAAIC,oBAAoB,CACtB;YACEC,EAAI,EAAA,OAAA;YACJC,SAAW,EAAA;gBAAED,EAAI,EAAA,iCAAA;gBAAmCE,cAAgB,EAAA;AAAe;SAErF,EAAA;AACE,YAAA;gBACED,SAAW,EAAA;oBACTD,EAAI,EAAA,mCAAA;oBACJE,cAAgB,EAAA;AAClB,iBAAA;gBACAF,EAAI,EAAA,UAAA;gBACJG,EAAI,EAAA,OAAA;gBACJC,SAAW,EAAA,IACT,oDAAO,wBAAA,KAAA,CAAoBC,IAAI,CAAC,CAACC,OAAS;AACxCC,4BAAAA,OAAAA,EAASD,IAAIE;yBACf,CAAA,CAAA;AACFC,gBAAAA,WAAAA,EAAazB,YAAYC;AAC3B;AACD,SAAA,CAAA;AAEHa,QAAAA,GAAAA,CAAIY,cAAc,CAAC;YACjBV,EAAI,EAAA,OAAA;YACJW,IAAM,EAAA;AACR,SAAA,CAAA;AACF,KAAA;;IAEAC,SAAa,CAAA,GAAA,EAAA;IACb,MAAMC,aAAAA,CAAAA,CAAc,EAAEC,OAAO,EAAyB,EAAA;QACpD,MAAMC,aAAAA,GAAgB,MAAMC,OAAQC,CAAAA,GAAG,CACrCH,OAAQI,CAAAA,GAAG,CAAC,CAACC,MAAAA,GAAAA;AACX,YAAA,OAAO,iCAAM,CAAC,CAAC,eAAe,EAAEA,MAAO,CAAA,KAAK,CAAC,CAAA,CAC1Cd,IAAI,CAAC,CAAC,EAAEE,OAAAA,EAASa,IAAI,EAAE,GAAA;gBACtB,OAAO;AACLA,oBAAAA,IAAAA,EAAMhC,yBAAyBgC,IAAM,EAAA,OAAA,CAAA;AACrCD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA,CACCE,KAAK,CAAC,IAAA;gBACL,OAAO;AACLD,oBAAAA,IAAAA,EAAM,EAAC;AACPD,oBAAAA;AACF,iBAAA;AACF,aAAA,CAAA;AACJ,SAAA,CAAA,CAAA;QAGF,OAAOH,OAAAA,CAAQM,OAAO,CAACP,aAAAA,CAAAA;AACzB;AACF;;;;;"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var link = "Посилання";
|
|
4
|
+
var uk = {
|
|
5
|
+
link: link,
|
|
6
|
+
"Settings.email.plugin.button.test-email": "Надіслати тестовий лист",
|
|
7
|
+
"Settings.email.plugin.label.defaultFrom": "Електронна пошта відправника за замовчуванням",
|
|
8
|
+
"Settings.email.plugin.label.defaultReplyTo": "Електронна пошта для відповіді за замовчуванням",
|
|
9
|
+
"Settings.email.plugin.label.provider": "Постачальник електронної пошти",
|
|
10
|
+
"Settings.email.plugin.label.testAddress": "Електронна адреса отримувача",
|
|
11
|
+
"Settings.email.plugin.notification.config.error": "Не вдалося отримати конфігурацію електронної пошти",
|
|
12
|
+
"Settings.email.plugin.notification.data.loaded": "Дані налаштувань електронної пошти завантажено",
|
|
13
|
+
"Settings.email.plugin.notification.test.error": "Не вдалося відправити тестовий лист на {to}",
|
|
14
|
+
"Settings.email.plugin.notification.test.success": "Тест електронної пошти успішно виконано, перевірте поштову скриньку {to}",
|
|
15
|
+
"Settings.email.plugin.placeholder.defaultFrom": "нп: Strapi No-Reply <no-reply@strapi.io>",
|
|
16
|
+
"Settings.email.plugin.placeholder.defaultReplyTo": "нп: Strapi <example@strapi.io>",
|
|
17
|
+
"Settings.email.plugin.placeholder.testAddress": "нп: developer@example.com",
|
|
18
|
+
"Settings.email.plugin.subTitle": "Перевірте налаштування плаґіна електронної пошти",
|
|
19
|
+
"Settings.email.plugin.text.configuration": "Плаґін налаштовано через файл {file}, перегляньте це посилання {link} для документації.",
|
|
20
|
+
"Settings.email.plugin.title": "Конфігурація",
|
|
21
|
+
"Settings.email.plugin.title.config": "Конфігурація",
|
|
22
|
+
"Settings.email.plugin.title.test": "Тест доставки електронної пошти",
|
|
23
|
+
"SettingsNav.link.settings": "Налаштування",
|
|
24
|
+
"SettingsNav.section-label": "Плаґін електронної пошти",
|
|
25
|
+
"components.Input.error.validation.email": "Це неправильна електронна адреса"
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
exports.default = uk;
|
|
29
|
+
exports.link = link;
|
|
30
|
+
//# sourceMappingURL=uk-DWA4QHtk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uk-DWA4QHtk.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
var link = "Посилання";
|
|
2
|
+
var uk = {
|
|
3
|
+
link: link,
|
|
4
|
+
"Settings.email.plugin.button.test-email": "Надіслати тестовий лист",
|
|
5
|
+
"Settings.email.plugin.label.defaultFrom": "Електронна пошта відправника за замовчуванням",
|
|
6
|
+
"Settings.email.plugin.label.defaultReplyTo": "Електронна пошта для відповіді за замовчуванням",
|
|
7
|
+
"Settings.email.plugin.label.provider": "Постачальник електронної пошти",
|
|
8
|
+
"Settings.email.plugin.label.testAddress": "Електронна адреса отримувача",
|
|
9
|
+
"Settings.email.plugin.notification.config.error": "Не вдалося отримати конфігурацію електронної пошти",
|
|
10
|
+
"Settings.email.plugin.notification.data.loaded": "Дані налаштувань електронної пошти завантажено",
|
|
11
|
+
"Settings.email.plugin.notification.test.error": "Не вдалося відправити тестовий лист на {to}",
|
|
12
|
+
"Settings.email.plugin.notification.test.success": "Тест електронної пошти успішно виконано, перевірте поштову скриньку {to}",
|
|
13
|
+
"Settings.email.plugin.placeholder.defaultFrom": "нп: Strapi No-Reply <no-reply@strapi.io>",
|
|
14
|
+
"Settings.email.plugin.placeholder.defaultReplyTo": "нп: Strapi <example@strapi.io>",
|
|
15
|
+
"Settings.email.plugin.placeholder.testAddress": "нп: developer@example.com",
|
|
16
|
+
"Settings.email.plugin.subTitle": "Перевірте налаштування плаґіна електронної пошти",
|
|
17
|
+
"Settings.email.plugin.text.configuration": "Плаґін налаштовано через файл {file}, перегляньте це посилання {link} для документації.",
|
|
18
|
+
"Settings.email.plugin.title": "Конфігурація",
|
|
19
|
+
"Settings.email.plugin.title.config": "Конфігурація",
|
|
20
|
+
"Settings.email.plugin.title.test": "Тест доставки електронної пошти",
|
|
21
|
+
"SettingsNav.link.settings": "Налаштування",
|
|
22
|
+
"SettingsNav.section-label": "Плаґін електронної пошти",
|
|
23
|
+
"components.Input.error.validation.email": "Це неправильна електронна адреса"
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export { uk as default, link };
|
|
27
|
+
//# sourceMappingURL=uk-Dsq-0GyK.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uk-Dsq-0GyK.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|
package/dist/admin/index.js
CHANGED
package/dist/admin/index.mjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export { a as default } from './chunks/index-
|
|
1
|
+
export { a as default } from './chunks/index-BPAZGe7V.mjs';
|
|
2
2
|
//# sourceMappingURL=index.mjs.map
|
package/dist/server/index.js
CHANGED
|
@@ -242,12 +242,47 @@ const config = {
|
|
|
242
242
|
validator () {}
|
|
243
243
|
};
|
|
244
244
|
|
|
245
|
+
const { RateLimitError } = utils.errors;
|
|
246
|
+
var rateLimit = ((config, { strapi })=>async (ctx, next)=>{
|
|
247
|
+
const pluginConfig = strapi.config.get('plugin::email');
|
|
248
|
+
const rateLimitConfig = {
|
|
249
|
+
enabled: true,
|
|
250
|
+
...pluginConfig.ratelimit || {}
|
|
251
|
+
};
|
|
252
|
+
if (rateLimitConfig.enabled === true) {
|
|
253
|
+
// TODO: TS - Do the dynamic import
|
|
254
|
+
// eslint-disable-next-line @typescript-eslint/no-var-requires
|
|
255
|
+
const rateLimit = require('koa2-ratelimit').RateLimit;
|
|
256
|
+
const requestEmail = fp.get('request.body.email')(ctx);
|
|
257
|
+
const userEmail = fp.isString(requestEmail) ? requestEmail.toLowerCase() : 'unknownEmail';
|
|
258
|
+
const loadConfig = {
|
|
259
|
+
interval: {
|
|
260
|
+
min: 5
|
|
261
|
+
},
|
|
262
|
+
max: 5,
|
|
263
|
+
prefixKey: `${userEmail}`,
|
|
264
|
+
handler () {
|
|
265
|
+
throw new RateLimitError();
|
|
266
|
+
},
|
|
267
|
+
...rateLimitConfig,
|
|
268
|
+
...config
|
|
269
|
+
};
|
|
270
|
+
return rateLimit.middleware(loadConfig)(ctx, next);
|
|
271
|
+
}
|
|
272
|
+
return next();
|
|
273
|
+
});
|
|
274
|
+
|
|
275
|
+
var middlewares = {
|
|
276
|
+
rateLimit
|
|
277
|
+
};
|
|
278
|
+
|
|
245
279
|
var index = {
|
|
246
280
|
bootstrap,
|
|
247
281
|
services,
|
|
248
282
|
routes,
|
|
249
283
|
controllers,
|
|
250
|
-
config
|
|
284
|
+
config,
|
|
285
|
+
middlewares
|
|
251
286
|
};
|
|
252
287
|
|
|
253
288
|
module.exports = index;
|
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/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/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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"}
|
package/dist/server/index.mjs
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import * as _ from 'lodash';
|
|
2
|
-
import { objects, template, errors } from '@strapi/utils';
|
|
3
|
-
import { pick } from 'lodash/fp';
|
|
2
|
+
import utils, { objects, template, errors } from '@strapi/utils';
|
|
3
|
+
import { pick, get, isString } from 'lodash/fp';
|
|
4
4
|
|
|
5
5
|
const createProvider = (emailConfig)=>{
|
|
6
6
|
const providerName = emailConfig.provider.toLowerCase();
|
|
@@ -221,12 +221,47 @@ const config = {
|
|
|
221
221
|
validator () {}
|
|
222
222
|
};
|
|
223
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
|
+
};
|
|
257
|
+
|
|
224
258
|
var index = {
|
|
225
259
|
bootstrap,
|
|
226
260
|
services,
|
|
227
261
|
routes,
|
|
228
262
|
controllers,
|
|
229
|
-
config
|
|
263
|
+
config,
|
|
264
|
+
middlewares
|
|
230
265
|
};
|
|
231
266
|
|
|
232
267
|
export { index as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","sources":["../../server/src/bootstrap.ts","../../server/src/services/email.ts","../../server/src/services/index.ts","../../server/src/routes/admin.ts","../../server/src/routes/content-api.ts","../../server/src/routes/index.ts","../../server/src/controllers/email.ts","../../server/src/controllers/index.ts","../../server/src/config.ts","../../server/src/index.ts"],"sourcesContent":["import type { Core } from '@strapi/types';\nimport type { EmailConfig, SendOptions } from './types';\n\ninterface EmailProvider {\n send: (options: SendOptions) => Promise<any>;\n}\n\ninterface EmailProviderModule {\n init: (\n options: EmailConfig['providerOptions'],\n settings: EmailConfig['settings']\n ) => EmailProvider;\n name?: string;\n provider?: string;\n}\n\nconst createProvider = (emailConfig: EmailConfig) => {\n const providerName = emailConfig.provider.toLowerCase();\n let provider: EmailProviderModule;\n\n let modulePath: string;\n try {\n modulePath = require.resolve(`@strapi/provider-email-${providerName}`);\n } catch (error) {\n if (\n error !== null &&\n typeof error === 'object' &&\n 'code' in error &&\n error.code === 'MODULE_NOT_FOUND'\n ) {\n modulePath = providerName;\n } else {\n throw error;\n }\n }\n\n try {\n provider = require(modulePath);\n } catch (err) {\n throw new Error(`Could not load email provider \"${providerName}\".`);\n }\n\n return provider.init(emailConfig.providerOptions, emailConfig.settings);\n};\n\nexport const bootstrap = async ({ strapi }: { strapi: Core.Strapi }) => {\n const emailConfig: EmailConfig = strapi.config.get('plugin::email');\n strapi.plugin('email').provider = createProvider(emailConfig);\n\n // Add permissions\n const actions = [\n {\n section: 'settings',\n category: 'email',\n displayName: 'Access the Email Settings page',\n uid: 'settings.read',\n pluginName: 'email',\n },\n ];\n\n await strapi.service('admin::permission').actionProvider.registerMany(actions);\n};\n","import * as _ from 'lodash';\nimport { objects, template } from '@strapi/utils';\n\nimport type {\n EmailConfig,\n EmailOptions,\n EmailTemplate,\n EmailTemplateData,\n SendOptions,\n} from '../types';\n\nconst { createStrictInterpolationRegExp } = template;\n\nconst getProviderSettings = (): EmailConfig => strapi.config.get('plugin::email');\n\nconst send = async (options: SendOptions) => strapi.plugin('email').provider.send(options);\n\n/**\n * fill subject, text and html using lodash template\n * @param {object} emailOptions - to, from and replyto...\n * @param {object} emailTemplate - object containing attributes to fill\n * @param {object} data - data used to fill the template\n * @returns {{ subject, text, subject }}\n */\nconst sendTemplatedEmail = (\n emailOptions: EmailOptions,\n emailTemplate: EmailTemplate,\n data: EmailTemplateData\n) => {\n const attributes = ['subject', 'text', 'html'];\n const missingAttributes = _.difference(attributes, Object.keys(emailTemplate));\n\n if (missingAttributes.length > 0) {\n throw new Error(\n `Following attributes are missing from your email template : ${missingAttributes.join(', ')}`\n );\n }\n\n const allowedInterpolationVariables = objects.keysDeep(data);\n const interpolate = createStrictInterpolationRegExp(allowedInterpolationVariables, 'g');\n\n const templatedAttributes = attributes.reduce(\n (compiled, attribute) =>\n emailTemplate[attribute]\n ? Object.assign(compiled, {\n [attribute]: _.template(emailTemplate[attribute], {\n interpolate,\n })(data),\n })\n : compiled,\n {}\n );\n\n return strapi.plugin('email').provider.send({ ...emailOptions, ...templatedAttributes });\n};\n\nconst emailService = () => ({\n getProviderSettings,\n send,\n sendTemplatedEmail,\n});\n\nexport default emailService;\n","import email from './email';\n\nexport const services = { email };\n","export default {\n type: 'admin',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n config: {\n policies: ['admin::isAuthenticatedAdmin'],\n },\n },\n {\n method: 'POST',\n path: '/test',\n handler: 'email.test',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['plugin::email.settings.read'] } },\n ],\n },\n },\n {\n method: 'GET',\n path: '/settings',\n handler: 'email.getSettings',\n config: {\n policies: [\n 'admin::isAuthenticatedAdmin',\n { name: 'admin::hasPermissions', config: { actions: ['plugin::email.settings.read'] } },\n ],\n },\n },\n ],\n};\n","export default {\n type: 'content-api',\n routes: [\n {\n method: 'POST',\n path: '/',\n handler: 'email.send',\n },\n ],\n};\n","import admin from './admin';\nimport contentApi from './content-api';\n\nexport const routes = {\n admin,\n 'content-api': contentApi,\n};\n","import { pick } from 'lodash/fp';\nimport { errors } from '@strapi/utils';\n\nimport type Koa from 'koa';\nimport type {} from 'koa-body';\nimport type { EmailConfig, SendOptions } from '../types';\n\nconst { ApplicationError } = errors;\n\n/**\n * Email.js controller\n *\n * @description: A set of functions called \"actions\" of the `email` plugin.\n */\nconst emailController = {\n async send(ctx: Koa.Context) {\n const options = ctx.request.body as SendOptions;\n\n try {\n await strapi.plugin('email').service('email').send(options);\n } catch (error) {\n if (error instanceof Error) {\n if ('statusCode' in error && error.statusCode === 400) {\n throw new ApplicationError(error.message);\n } else {\n throw new Error(`Couldn't send email: ${error.message}.`);\n }\n }\n }\n\n // Send 200 `ok`\n ctx.send({});\n },\n\n async test(ctx: Koa.Context) {\n const { to } = ctx.request.body as Pick<SendOptions, 'to'>;\n\n if (!to) {\n throw new ApplicationError('No recipient(s) are given');\n }\n\n const email: SendOptions = {\n to,\n subject: `Strapi test mail to: ${to}`,\n text: `Great! You have correctly configured the Strapi email plugin with the ${strapi.config.get(\n 'plugin::email.provider'\n )} provider. \\r\\nFor documentation on how to use the email plugin checkout: https://docs.strapi.io/developer-docs/latest/plugins/email.html`,\n };\n\n try {\n await strapi.plugin('email').service('email').send(email);\n } catch (error) {\n if (error instanceof Error) {\n if ('statusCode' in error && error.statusCode === 400) {\n throw new ApplicationError(error.message);\n } else {\n throw new Error(`Couldn't send test email: ${error.message}.`);\n }\n }\n }\n\n // Send 200 `ok`\n ctx.send({});\n },\n\n async getSettings(ctx: Koa.Context) {\n const config: EmailConfig = strapi.plugin('email').service('email').getProviderSettings();\n\n ctx.send({\n config: pick(\n ['provider', 'settings.defaultFrom', 'settings.defaultReplyTo', 'settings.testAddress'],\n config\n ),\n });\n },\n};\n\nexport default emailController;\n","import email from './email';\n\nexport const controllers = { email };\n","import type { StrapiConfig } from './types';\n\nexport const config: StrapiConfig = {\n default: {\n provider: 'sendmail',\n providerOptions: {},\n settings: {\n defaultFrom: 'Strapi <no-reply@strapi.io>',\n },\n },\n validator() {},\n};\n","import { bootstrap } from './bootstrap';\nimport { services } from './services';\nimport { routes } from './routes';\nimport { controllers } from './controllers';\nimport { config } from './config';\n\nexport default {\n bootstrap,\n services,\n routes,\n controllers,\n config,\n};\n"],"names":["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.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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"}
|
|
@@ -44,6 +44,11 @@ declare const _default: {
|
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
46
|
config: import("./types").StrapiConfig;
|
|
47
|
+
middlewares: {
|
|
48
|
+
rateLimit: (config: any, { strapi }: {
|
|
49
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
50
|
+
}) => (ctx: import("koa").Context, next: import("koa").Next) => Promise<any>;
|
|
51
|
+
};
|
|
47
52
|
};
|
|
48
53
|
export default _default;
|
|
49
54
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../server/src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,wBAOE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/// <reference types="koa" />
|
|
2
|
+
export { default as rateLimit } from './rateLimit';
|
|
3
|
+
declare const _default: {
|
|
4
|
+
rateLimit: (config: any, { strapi }: {
|
|
5
|
+
strapi: import("@strapi/types/dist/core").Strapi;
|
|
6
|
+
}) => (ctx: import("koa").Context, next: import("koa").Next) => Promise<any>;
|
|
7
|
+
};
|
|
8
|
+
export default _default;
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../server/src/middlewares/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,aAAa,CAAC;;;;;;AAEnD,wBAEE"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Context, Next } from 'koa';
|
|
2
|
+
import type { Core } from '@strapi/types';
|
|
3
|
+
declare const _default: (config: any, { strapi }: {
|
|
4
|
+
strapi: Core.Strapi;
|
|
5
|
+
}) => (ctx: Context, next: Next) => Promise<any>;
|
|
6
|
+
export default _default;
|
|
7
|
+
//# sourceMappingURL=rateLimit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rateLimit.d.ts","sourceRoot":"","sources":["../../../../server/src/middlewares/rateLimit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAGzC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;iCAIlB,GAAG,cAAc;IAAE,MAAM,EAAE,KAAK,MAAM,CAAA;CAAE,WAClD,OAAO,QAAQ,IAAI;AADjC,wBA+BI"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@strapi/email",
|
|
3
|
-
"version": "0.0.0-next.
|
|
3
|
+
"version": "0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f",
|
|
4
4
|
"description": "Easily configure your Strapi application to send emails.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -56,22 +56,23 @@
|
|
|
56
56
|
"watch": "run -T rollup -c -w"
|
|
57
57
|
},
|
|
58
58
|
"dependencies": {
|
|
59
|
-
"@strapi/design-system": "2.0.0-rc.
|
|
60
|
-
"@strapi/icons": "2.0.0-rc.
|
|
61
|
-
"@strapi/provider-email-sendmail": "0.0.0-next.
|
|
62
|
-
"@strapi/utils": "0.0.0-next.
|
|
59
|
+
"@strapi/design-system": "2.0.0-rc.18",
|
|
60
|
+
"@strapi/icons": "2.0.0-rc.18",
|
|
61
|
+
"@strapi/provider-email-sendmail": "0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f",
|
|
62
|
+
"@strapi/utils": "0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f",
|
|
63
|
+
"koa2-ratelimit": "^1.1.3",
|
|
63
64
|
"lodash": "4.17.21",
|
|
64
65
|
"react-intl": "6.6.2",
|
|
65
66
|
"react-query": "3.39.3",
|
|
66
67
|
"yup": "0.32.9"
|
|
67
68
|
},
|
|
68
69
|
"devDependencies": {
|
|
69
|
-
"@strapi/admin": "0.0.0-next.
|
|
70
|
-
"@strapi/types": "0.0.0-next.
|
|
70
|
+
"@strapi/admin": "0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f",
|
|
71
|
+
"@strapi/types": "0.0.0-next.2c83a77afa7fccd559dd22ce09acee5c216d070f",
|
|
71
72
|
"@testing-library/react": "15.0.7",
|
|
72
73
|
"@types/koa": "2.13.4",
|
|
73
74
|
"@types/lodash": "^4.14.191",
|
|
74
|
-
"koa": "2.15.
|
|
75
|
+
"koa": "2.15.4",
|
|
75
76
|
"koa-body": "6.0.1",
|
|
76
77
|
"msw": "1.3.0",
|
|
77
78
|
"react": "18.3.1",
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uk-CQim5OiT.mjs","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uk-nM0yP_CK.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;"}
|