From b4ad24e0cf0aad1644535c421b6a7a974a032655 Mon Sep 17 00:00:00 2001 From: tonyrewin Date: Mon, 30 Jan 2023 18:10:27 +0300 Subject: [PATCH] feedback-newsletter-bump-wip --- api/feedback.js | 9 +--- api/newsletter.ts | 47 ++++++++++--------- package.json | 4 +- pnpm-lock.yaml | 37 ++++++--------- src/components/Discours/Subscribe.tsx | 5 +- src/components/Pages/about/TermsOfUsePage.tsx | 1 + src/graphql/privateGraphQLClient.ts | 6 +-- vercel.json | 8 ++++ 8 files changed, 60 insertions(+), 57 deletions(-) diff --git a/api/feedback.js b/api/feedback.js index b33e47d6..5da6919f 100644 --- a/api/feedback.js +++ b/api/feedback.js @@ -9,7 +9,7 @@ const mgOptions = { const messageData = (subject, text) => { return { - from: 'Feedback Robot ', + from: 'Discours Feedback Robot ', to: 'welcome@discours.io', subject, text @@ -19,12 +19,7 @@ export default async function handler(req, res) { const { contact, subject, message } = req.query try { const mailgun = new MG(fd) - const client = mailgun.client({ - username: mgOptions.username, - key: mgOptions.key - //url?: string; - //public_key?: string; - }) + const client = mailgun.client(mgOptions) const data = messageData(`${contact}: ${subject}`, message) client.messages.create(mgOptions.domain, data).then(console.log).catch(console.error) } catch (error) { diff --git a/api/newsletter.ts b/api/newsletter.ts index 7467f8fd..9ad0ae07 100644 --- a/api/newsletter.ts +++ b/api/newsletter.ts @@ -1,27 +1,32 @@ -/* eslint-disable unicorn/no-empty-file */ -/* import MG from 'mailgun.js' +import fd from 'form-data' -const mailgun = new MG({}) -const options = { - apiKey: process.env.MAILGUN_API_KEY, - domain: process.env.MAILGUN_DOMAIN +const mgOptions = { + key: process.env.MAILGUN_API_KEY, + domain: process.env.MAILGUN_DOMAIN, + username: 'discoursio' // FIXME } -const list = mailgun.lists(process.env.MAILGUN_LIST_ID) // 'services@discours.io' -export default async function handler(req, res) { - const { email } = req.body.data - list.members().create({ subscribed: true, address: email }, (err, data) => { - if (err) { - console.error('[newsletter ] error', err) - res.status(500) - } else { - res.status(200).json(data) - } - }) -} -*/ +export default async (req, res) => { + const { email } = req.query + const mailgun = new MG(fd) + const client = mailgun.client(mgOptions) -export const handler = (req, res) => { - return 'WIP' + try { + const response = await client.lists.members.createMember(mgOptions.domain, { + address: email, + subscribed: true, + upsert: 'yes' + }) + + return res.status(200).json({ + success: true, + message: 'Email added to newsletter list' + }) + } catch (error) { + return res.status(400).json({ + success: false, + message: error.message + }) + } } diff --git a/package.json b/package.json index 166dc7ec..f85deba1 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "preview": "astro preview", "server": "node server/server.mjs", "start": "astro dev", + "start:dev": "cross-env PUBLIC_API_URL=http://127.0.0.1:8080 vercel dev", "start:local": "cross-env PUBLIC_API_URL=http://127.0.0.1:8080 astro dev", "start:production": "cross-env PUBLIC_API_URL=https://v2.discours.io astro dev", "start:staging": "cross-env PUBLIC_API_URL=https://testapi.discours.io astro dev", @@ -51,6 +52,7 @@ "@nanostores/solid": "^0.3.2", "@popperjs/core": "^2.11.6", "@solid-primitives/memo": "^1.1.3", + "@solid-primitives/share": "^2.0.1", "@solid-primitives/storage": "^1.3.4", "@solid-primitives/upload": "^0.0.105", "@types/express": "^4.17.15", @@ -63,6 +65,7 @@ "@urql/exchange-graphcache": "^5.0.8", "astro": "^2.0.2", "astro-eslint-parser": "^0.11.0", + "astro-seo-meta": "^2.0.0", "bcryptjs": "^2.4.3", "bootstrap": "^5.2.3", "clsx": "^1.2.1", @@ -120,7 +123,6 @@ "solid-js": "^1.6.9", "solid-js-form": "^0.1.8", "solid-jsx": "^0.9.1", - "solid-social": "^0.9.6", "solid-utils": "^0.8.1", "sort-package-json": "^2.3.0", "stylelint": "^14.16.1", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 7da4bdd6..7c3d031a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,6 +16,7 @@ specifiers: '@nanostores/solid': ^0.3.2 '@popperjs/core': ^2.11.6 '@solid-primitives/memo': ^1.1.3 + '@solid-primitives/share': ^2.0.1 '@solid-primitives/storage': ^1.3.4 '@solid-primitives/upload': ^0.0.105 '@types/express': ^4.17.15 @@ -28,6 +29,7 @@ specifiers: '@urql/exchange-graphcache': ^5.0.8 astro: ^2.0.2 astro-eslint-parser: ^0.11.0 + astro-seo-meta: ^2.0.0 bcryptjs: ^2.4.3 bootstrap: ^5.2.3 clsx: ^1.2.1 @@ -86,7 +88,6 @@ specifiers: solid-js: ^1.6.9 solid-js-form: ^0.1.8 solid-jsx: ^0.9.1 - solid-social: ^0.9.6 solid-utils: ^0.8.1 sort-package-json: ^2.3.0 stylelint: ^14.16.1 @@ -127,6 +128,7 @@ devDependencies: '@nanostores/solid': 0.3.2_p2ovwnslwwhnyqciy4vyx3xhn4 '@popperjs/core': 2.11.6 '@solid-primitives/memo': 1.1.3_solid-js@1.6.9 + '@solid-primitives/share': 2.0.1_solid-js@1.6.9 '@solid-primitives/storage': 1.3.4_solid-js@1.6.9 '@solid-primitives/upload': 0.0.105_solid-js@1.6.9 '@types/express': 4.17.15 @@ -139,6 +141,7 @@ devDependencies: '@urql/exchange-graphcache': 5.0.8_graphql@16.6.0 astro: 2.0.2_2t5zzertvgx7nxfmkolltgmm7i astro-eslint-parser: 0.11.0 + astro-seo-meta: 2.0.0_astro@2.0.2 bcryptjs: 2.4.3 bootstrap: 5.2.3_@popperjs+core@2.11.6 clsx: 1.2.1 @@ -196,7 +199,6 @@ devDependencies: solid-js: 1.6.9 solid-js-form: 0.1.8 solid-jsx: 0.9.1_solid-js@1.6.9 - solid-social: 0.9.6_solid-js@1.6.9 solid-utils: 0.8.1_solid-js@1.6.9 sort-package-json: 2.3.0 stylelint: 14.16.1 @@ -2361,15 +2363,6 @@ packages: '@sinonjs/commons': 1.8.6 dev: true - /@solid-primitives/intersection-observer/2.0.4_solid-js@1.6.9: - resolution: {integrity: sha512-QGDgmg2X+buJi4V0h1ajpHnZxTxc+ZUuGTyOLgjHq/EE5HCsPlefXcd5cfk2oiuBca38zQ+NxGZB/5/4fcY6dw==} - peerDependencies: - solid-js: ^1.6.0 - dependencies: - '@solid-primitives/utils': 4.0.1_solid-js@1.6.9 - solid-js: 1.6.9 - dev: true - /@solid-primitives/memo/1.1.3_solid-js@1.6.9: resolution: {integrity: sha512-cVe4kThn/IduZue3C2cbB8TjPbCuhrmpY3DYEqeDktXAhUep4qzqkiAiaJXqTNg1kRV3JNapdr2v8wS3K1PVrw==} peerDependencies: @@ -2388,8 +2381,8 @@ packages: solid-js: 1.6.9 dev: true - /@solid-primitives/script-loader/1.1.3_solid-js@1.6.9: - resolution: {integrity: sha512-ROr6vjYSGZtJ+qrTRumn+a4GwfWQFEq8S7UphRc3bV3z7JcinEL49mEus7XBuBnswGebx5ofANdp91Iv+GtssA==} + /@solid-primitives/share/2.0.1_solid-js@1.6.9: + resolution: {integrity: sha512-qLiqiVPTVPrhFzCneicDBwlgiuQwqPX2ktfdHjLXjgJsxtyT4nHpTrq6WJV5sBIUt2eb9+dxBKlM6z5Djs1RDw==} peerDependencies: solid-js: ^1.6.0 dependencies: @@ -3138,6 +3131,14 @@ packages: - supports-color dev: true + /astro-seo-meta/2.0.0_astro@2.0.2: + resolution: {integrity: sha512-T/c1nQQvmYz0Ub04UooYo6JLZux7OaVwYeolWDf9L7RhpaqyWX80lOczSIt19/9mNKZq1hNYRcJBXWOArI36ug==} + peerDependencies: + astro: ^2.0.0 + dependencies: + astro: 2.0.2_2t5zzertvgx7nxfmkolltgmm7i + dev: true + /astro/2.0.2_2t5zzertvgx7nxfmkolltgmm7i: resolution: {integrity: sha512-47N1jLWNxSri7kWfIfgcEnQJZWTvd0gXhNC3P2ZHiiurl4nOxFC5ULsW5MDDTjTzQ1S7y1RoaL9XxYm+Rury7w==} engines: {node: '>=16.12.0', npm: '>=6.14.0'} @@ -9211,16 +9212,6 @@ packages: solid-js: 1.6.9 dev: true - /solid-social/0.9.6_solid-js@1.6.9: - resolution: {integrity: sha512-3ZEu5dQR/8kqI7jpCbxErr0SBxTwIWQBbNgab8gNv9mNRWabQ0e2pGT32wpnWUnt50HoSx+hVIRpo/ZY94uxWw==} - peerDependencies: - solid-js: ^1.3.0 - dependencies: - '@solid-primitives/intersection-observer': 2.0.4_solid-js@1.6.9 - '@solid-primitives/script-loader': 1.1.3_solid-js@1.6.9 - solid-js: 1.6.9 - dev: true - /solid-utils/0.8.1_solid-js@1.6.9: resolution: {integrity: sha512-LLeO7Hr99OLFY+Zfx8U7Hw5VZOaFT8qWoLWGfnq3kDmo7KAGdIoq44ijy7mdYj88e+2cWPdkyhItsS3FGjeS6g==} peerDependencies: diff --git a/src/components/Discours/Subscribe.tsx b/src/components/Discours/Subscribe.tsx index 20cdaee4..a7f3837b 100644 --- a/src/components/Discours/Subscribe.tsx +++ b/src/components/Discours/Subscribe.tsx @@ -8,13 +8,14 @@ export default () => { const [title, setTitle] = createSignal('') const subscribe = async () => { setTitle(t('...subscribing')) - const r = await fetch(`/maillist?email=${emailElement?.value}`) + const r = await fetch(`/api/newsletter?email=${emailElement?.value}`) setTitle(r.ok ? t('You are subscribed') : '') } return (
- + +