From 9159248df4e605313ce66100fa282d68be316ada Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Fri, 2 Aug 2024 02:27:02 +0000 Subject: [PATCH 1/7] =?UTF-8?q?refactor(api):=20=E2=9C=A8=20replace=20Brev?= =?UTF-8?q?o=20mail=20sender=20with=20CF=20worker?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The notification feature of the contact form relied on Brevo API but migrated to Cloudflare Pages Functions (Workers) to make it align with other CF services --- functions/api/email.ts | 3 ++ functions/tsconfig.json | 13 ++++++ src/pages/[locale]/api/form.ts | 78 +++++++++++++++++++++------------- src/pages/api/form.ts | 60 +++++++++++++++----------- tsconfig.json | 3 +- worker-configuration.d.ts | 25 +++++------ wrangler.toml | 10 +++++ 7 files changed, 125 insertions(+), 67 deletions(-) create mode 100644 functions/api/email.ts create mode 100644 functions/tsconfig.json diff --git a/functions/api/email.ts b/functions/api/email.ts new file mode 100644 index 00000000..ed6daa3c --- /dev/null +++ b/functions/api/email.ts @@ -0,0 +1,3 @@ +export const onRequestPost: PagesFunction = async (context) => { + return context.env.EMAIL_SENDER.fetch(context.request); +}; diff --git a/functions/tsconfig.json b/functions/tsconfig.json new file mode 100644 index 00000000..e864c8a5 --- /dev/null +++ b/functions/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "lib": [ + "esnext" + ], + "types": [ + "@cloudflare/workers-types", + "../worker-configuration.d.ts" + ] + } +} diff --git a/src/pages/[locale]/api/form.ts b/src/pages/[locale]/api/form.ts index 1d48a2eb..baca1d7f 100644 --- a/src/pages/[locale]/api/form.ts +++ b/src/pages/[locale]/api/form.ts @@ -2,8 +2,8 @@ export const prerender = false; import { getEntry } from 'astro:content'; import { - BREVO_FORM_URL, - CONTACT_NOTIFICATION_SUBJECT, + // BREVO_FORM_URL, + // CONTACT_NOTIFICATION_SUBJECT, FORM_TEXTAREA_MINLENGTH, TURNSTILE_SITE_VERIFICATION_URL, } from '@/lib/consts'; @@ -66,7 +66,7 @@ export const POST: APIRoute = async ({ const curLocale = locale as Language; const t = await getEntry('i18n', `${curLocale}/translation`); - const meta = await getEntry('meta', `${curLocale}/site-data`); + // const meta = await getEntry('meta', `${curLocale}/site-data`); const formSchema = object({ name: pipe(string(), nonEmpty(t.data.contact_form.name.required)), @@ -82,11 +82,6 @@ export const POST: APIRoute = async ({ ), confirmation: pipe( boolean(), - // string(), - // check( - // (input) => input === 'on', - // t.data.contact_form.confirmation.required - // ) check( (input) => input === true, t.data.contact_form.confirmation.required, @@ -130,38 +125,61 @@ export const POST: APIRoute = async ({ ); } - const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; - - const mailContent = { - sender: { email: myEmail, name: meta.data.site.title }, - to: [ - { - email: myEmail, - name: t.data.author_name, - }, - ], - subject: CONTACT_NOTIFICATION_SUBJECT, - textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, - replyTo: { - email: data.email, - name: data.name, - }, - }; - const brevoApiKey = locals.runtime.env.BREVO_API_KEY; + // const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; + + // const mailContent = { + // sender: { email: myEmail, name: meta.data.site.title }, + // to: [ + // { + // email: myEmail, + // name: t.data.author_name, + // }, + // ], + // subject: CONTACT_NOTIFICATION_SUBJECT, + // textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, + // replyTo: { + // email: data.email, + // name: data.name, + // }, + // }; + // const brevoApiKey = locals.runtime.env.BREVO_API_KEY; + + // const response = await fetch(BREVO_FORM_URL, { + // method: 'POST', + // headers: { + // Accept: 'application/json', + // 'Content-Type': 'application/json', + // 'api-key': brevoApiKey, + // }, + // body: JSON.stringify(mailContent), + // }); - const response = await fetch(BREVO_FORM_URL, { + // const response = await fetch(BREVO_FORM_URL, { + // method: 'POST', + // headers: { + // Accept: 'application/json', + // 'Content-Type': 'application/json', + // 'api-key': brevoApiKey, + // }, + // body: JSON.stringify(mailContent), + // }); + + const response = await fetch('api/email', { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', - 'api-key': brevoApiKey, }, - body: JSON.stringify(mailContent), + body: JSON.stringify({ + name: data.name, + email: data.email, + message: data.message, + }), }); if (!response.ok) { return new Response( JSON.stringify({ - message: `Form submission failed: ${response.status} ${response.statusText}`, + message: `Failed to submit form data: ${response.status} ${response.statusText}`, }), { status: 500 }, ); diff --git a/src/pages/api/form.ts b/src/pages/api/form.ts index b775db7f..2e5680b6 100644 --- a/src/pages/api/form.ts +++ b/src/pages/api/form.ts @@ -2,8 +2,8 @@ export const prerender = false; import { getEntry } from 'astro:content'; import { - BREVO_FORM_URL, - CONTACT_NOTIFICATION_SUBJECT, + // BREVO_FORM_URL, + // CONTACT_NOTIFICATION_SUBJECT, FORM_TEXTAREA_MINLENGTH, TURNSTILE_SITE_VERIFICATION_URL, } from '@/lib/consts'; @@ -53,7 +53,7 @@ export const POST: APIRoute = async ({ locals, }: APIContext) => { const t = await getEntry('i18n', `${defaultLang}/translation`); - const meta = await getEntry('meta', `${defaultLang}/site-data`); + // const meta = await getEntry('meta', `${defaultLang}/site-data`); const formSchema = object({ name: pipe(string(), nonEmpty(t.data.contact_form.name.required)), @@ -112,38 +112,50 @@ export const POST: APIRoute = async ({ ); } - const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; + // const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; - const mailContent = { - sender: { email: myEmail, name: meta.data.site.title }, - to: [ - { - email: myEmail, - name: t.data.author_name, - }, - ], - subject: CONTACT_NOTIFICATION_SUBJECT, - textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, - replyTo: { - email: data.email, - name: data.name, - }, - }; - const brevoApiKey = locals.runtime.env.BREVO_API_KEY; + // const mailContent = { + // sender: { email: myEmail, name: meta.data.site.title }, + // to: [ + // { + // email: myEmail, + // name: t.data.author_name, + // }, + // ], + // subject: CONTACT_NOTIFICATION_SUBJECT, + // textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, + // replyTo: { + // email: data.email, + // name: data.name, + // }, + // }; + // const brevoApiKey = locals.runtime.env.BREVO_API_KEY; - const response = await fetch(BREVO_FORM_URL, { + // const response = await fetch(BREVO_FORM_URL, { + // method: 'POST', + // headers: { + // Accept: 'application/json', + // 'Content-Type': 'application/json', + // 'api-key': brevoApiKey, + // }, + // body: JSON.stringify(mailContent), + // }); + const response = await fetch('/api/email', { method: 'POST', headers: { Accept: 'application/json', 'Content-Type': 'application/json', - 'api-key': brevoApiKey, }, - body: JSON.stringify(mailContent), + body: JSON.stringify({ + name: data.name, + email: data.email, + message: data.message, + }), }); if (!response.ok) { return new Response( JSON.stringify({ - message: `Form submission failed: ${response.status} ${response.statusText}`, + message: `Failed to submit form data: ${response.status} ${response.statusText}`, }), { status: 500 }, ); diff --git a/tsconfig.json b/tsconfig.json index d12458e6..cb6e5961 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -15,6 +15,7 @@ }, "exclude": [ "./dist", - "./node_modules" + "./node_modules", + "./functions" ] } diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index 3f3e5420..7fdb43a5 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -1,16 +1,17 @@ -// Generated by Wrangler on Tue Jun 25 2024 10:03:22 GMT+0900 (日本標準時) +// Generated by Wrangler on Fri Aug 02 2024 01:29:02 GMT+0000 (Coordinated Universal Time) // by running `wrangler types` interface Env { - UNSPLASH_API_ACCESS_KEY: string - TURNSTILE_SITE_KEY: string - PUBLIC_TURNSTILE_SITE_KEY: string - TURNSTILE_SECRET_KEY: string - BREVO_API_KEY: string - MY_CUSTOM_EMAIL_ADDRESS: string - CLOUDFLARE_ACCOUNT_ID: string - D1_DB_ID: string - D1_DB_API_TOKEN: string - LOCAL_DB_PATH: string - DB: D1Database + UNSPLASH_API_ACCESS_KEY: string; + TURNSTILE_SITE_KEY: string; + PUBLIC_TURNSTILE_SITE_KEY: string; + TURNSTILE_SECRET_KEY: string; + BREVO_API_KEY: string; + MY_CUSTOM_EMAIL_ADDRESS: string; + CLOUDFLARE_ACCOUNT_ID: string; + D1_DB_ID: string; + D1_DB_API_TOKEN: string; + LOCAL_DB_PATH: string; + DB: D1Database; + EMAIL_SENDER: Fetcher; } diff --git a/wrangler.toml b/wrangler.toml index 1320704f..5e9cd0f8 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -9,3 +9,13 @@ database_name = "younagi_dev_db" database_id = "500cb3d8-68a9-41e1-bf09-1ce81c89e51f" migrations_dir = "./src/db/migrations" preview_database_id = "DB" + +[[services]] +binding = "EMAIL_SENDER" +service = "younagi-contact-worker" +environment = "production" + +[[env.production.services]] +binding = "EMAIL_SENDER" +service = "younagi-contact-worker" +environment = "production" From fd96937ae5f78ecf9ac3019e437b854baf3e2679 Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Fri, 2 Aug 2024 03:18:08 +0000 Subject: [PATCH 2/7] =?UTF-8?q?refactor(config):=20=E2=9C=A8=20tweak=20wra?= =?UTF-8?q?ngler.toml?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Email routing worker's settings modified to allow it to work on a preview stage as well --- wrangler.toml | 6 ------ 1 file changed, 6 deletions(-) diff --git a/wrangler.toml b/wrangler.toml index 5e9cd0f8..04969833 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -13,9 +13,3 @@ preview_database_id = "DB" [[services]] binding = "EMAIL_SENDER" service = "younagi-contact-worker" -environment = "production" - -[[env.production.services]] -binding = "EMAIL_SENDER" -service = "younagi-contact-worker" -environment = "production" From b362bb037a58dfb629fa1a38657847689292f137 Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Fri, 2 Aug 2024 04:25:51 +0000 Subject: [PATCH 3/7] =?UTF-8?q?fix(api):=20=F0=9F=90=9B=20modify=20404=20r?= =?UTF-8?q?es=20error=20occurred=20around=20email=20api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/api/email.ts | 2 +- src/pages/[locale]/api/form.ts | 3 ++- src/pages/api/form.ts | 11 ++++++----- 3 files changed, 9 insertions(+), 7 deletions(-) diff --git a/functions/api/email.ts b/functions/api/email.ts index ed6daa3c..7ee46559 100644 --- a/functions/api/email.ts +++ b/functions/api/email.ts @@ -1,3 +1,3 @@ export const onRequestPost: PagesFunction = async (context) => { - return context.env.EMAIL_SENDER.fetch(context.request); + return context.env.ASSETS.fetch(context.request); }; diff --git a/src/pages/[locale]/api/form.ts b/src/pages/[locale]/api/form.ts index baca1d7f..3ce2cf5d 100644 --- a/src/pages/[locale]/api/form.ts +++ b/src/pages/[locale]/api/form.ts @@ -5,6 +5,7 @@ import { // BREVO_FORM_URL, // CONTACT_NOTIFICATION_SUBJECT, FORM_TEXTAREA_MINLENGTH, + SITE_URL, TURNSTILE_SITE_VERIFICATION_URL, } from '@/lib/consts'; import type { Language } from '@/utils/i18n/data'; @@ -164,7 +165,7 @@ export const POST: APIRoute = async ({ // body: JSON.stringify(mailContent), // }); - const response = await fetch('api/email', { + const response = await fetch(`${SITE_URL}/functions/api/email`, { method: 'POST', headers: { Accept: 'application/json', diff --git a/src/pages/api/form.ts b/src/pages/api/form.ts index 3c9de03e..ec9f6585 100644 --- a/src/pages/api/form.ts +++ b/src/pages/api/form.ts @@ -2,9 +2,10 @@ export const prerender = false; import { getEntry } from 'astro:content'; import { + FORM_TEXTAREA_MINLENGTH, // BREVO_FORM_URL, // CONTACT_NOTIFICATION_SUBJECT, - FORM_TEXTAREA_MINLENGTH, + SITE_URL, TURNSTILE_SITE_VERIFICATION_URL, } from '@/lib/consts'; import { defaultLang } from '@/utils/i18n/data'; @@ -140,18 +141,18 @@ export const POST: APIRoute = async ({ // }, // body: JSON.stringify(mailContent), // }); - const response = await fetch("/api/email", { + const response = await fetch(`${SITE_URL}/functions/api/email`, { method: 'POST', - headers: { + headers: { Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ name: data.name, email: data.email, - message: data.message + message: data.message, }), - }) + }); if (!response.ok) { return new Response( JSON.stringify({ From 211f7807d9e2f62cfb7c87782c49d116bf863150 Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Fri, 2 Aug 2024 06:12:39 +0000 Subject: [PATCH 4/7] =?UTF-8?q?revert(api):=20=F0=9F=94=99=20revert=20chan?= =?UTF-8?q?ges=20made=20around=20form=20mail=20functionality?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- functions/tsconfig.json | 13 ------------- {functions => src/functions}/api/email.ts | 2 +- src/functions/tsconfig.json | 8 ++++++++ src/pages/[locale]/api/form.ts | 1 - src/pages/api/form.ts | 5 ++--- 5 files changed, 11 insertions(+), 18 deletions(-) delete mode 100644 functions/tsconfig.json rename {functions => src/functions}/api/email.ts (55%) create mode 100644 src/functions/tsconfig.json diff --git a/functions/tsconfig.json b/functions/tsconfig.json deleted file mode 100644 index e864c8a5..00000000 --- a/functions/tsconfig.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "lib": [ - "esnext" - ], - "types": [ - "@cloudflare/workers-types", - "../worker-configuration.d.ts" - ] - } -} diff --git a/functions/api/email.ts b/src/functions/api/email.ts similarity index 55% rename from functions/api/email.ts rename to src/functions/api/email.ts index 7ee46559..14bdbf53 100644 --- a/functions/api/email.ts +++ b/src/functions/api/email.ts @@ -1,3 +1,3 @@ export const onRequestPost: PagesFunction = async (context) => { - return context.env.ASSETS.fetch(context.request); + return context.env.EMAIL_SENDER.fetch(context.request); }; diff --git a/src/functions/tsconfig.json b/src/functions/tsconfig.json new file mode 100644 index 00000000..283e5254 --- /dev/null +++ b/src/functions/tsconfig.json @@ -0,0 +1,8 @@ +{ + "compilerOptions": { + "target": "esnext", + "module": "esnext", + "lib": ["esnext"], + "types": ["@cloudflare/workers-types", "../../worker-configuration.d.ts"] + } +} diff --git a/src/pages/[locale]/api/form.ts b/src/pages/[locale]/api/form.ts index 3ce2cf5d..c7d0c6cd 100644 --- a/src/pages/[locale]/api/form.ts +++ b/src/pages/[locale]/api/form.ts @@ -168,7 +168,6 @@ export const POST: APIRoute = async ({ const response = await fetch(`${SITE_URL}/functions/api/email`, { method: 'POST', headers: { - Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ diff --git a/src/pages/api/form.ts b/src/pages/api/form.ts index ec9f6585..d184e306 100644 --- a/src/pages/api/form.ts +++ b/src/pages/api/form.ts @@ -141,10 +141,9 @@ export const POST: APIRoute = async ({ // }, // body: JSON.stringify(mailContent), // }); - const response = await fetch(`${SITE_URL}/functions/api/email`, { + const response = await fetch(`${SITE_URL}/api/email`, { method: 'POST', headers: { - Accept: 'application/json', 'Content-Type': 'application/json', }, body: JSON.stringify({ @@ -156,7 +155,7 @@ export const POST: APIRoute = async ({ if (!response.ok) { return new Response( JSON.stringify({ - message: `Failed to submit form data: ${response.status} ${response.statusText}`, + message: `Failed to submit form data: ${response.status} ${response.statusText} ${response.url}`, }), { status: 500 }, ); From 81823fe8872c9514e143c5ab9b41725d9da4cfe3 Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Fri, 2 Aug 2024 08:32:01 +0000 Subject: [PATCH 5/7] =?UTF-8?q?revert(api):=20=F0=9F=94=99=20revert=20chan?= =?UTF-8?q?ges=20made=20around=20contact=20form=20email?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CF Pages Functions didn't work with the Astro's SSR mode somehow --- .gitignore | 3 ++ src/functions/api/email.ts | 3 -- src/functions/tsconfig.json | 8 ---- src/pages/[locale]/api/form.ts | 73 ++++++++++++---------------------- src/pages/api/form.ts | 60 +++++++++++----------------- tsconfig.json | 2 +- worker-configuration.d.ts | 3 +- wrangler.toml | 4 -- 8 files changed, 54 insertions(+), 102 deletions(-) delete mode 100644 src/functions/api/email.ts delete mode 100644 src/functions/tsconfig.json diff --git a/.gitignore b/.gitignore index cf610ca6..e5a6b091 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ node_modules/ # Wrangler .wrangler/ + +# VSCode +.vscode/ diff --git a/src/functions/api/email.ts b/src/functions/api/email.ts deleted file mode 100644 index 14bdbf53..00000000 --- a/src/functions/api/email.ts +++ /dev/null @@ -1,3 +0,0 @@ -export const onRequestPost: PagesFunction = async (context) => { - return context.env.EMAIL_SENDER.fetch(context.request); -}; diff --git a/src/functions/tsconfig.json b/src/functions/tsconfig.json deleted file mode 100644 index 283e5254..00000000 --- a/src/functions/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "esnext", - "module": "esnext", - "lib": ["esnext"], - "types": ["@cloudflare/workers-types", "../../worker-configuration.d.ts"] - } -} diff --git a/src/pages/[locale]/api/form.ts b/src/pages/[locale]/api/form.ts index c7d0c6cd..32d9ed24 100644 --- a/src/pages/[locale]/api/form.ts +++ b/src/pages/[locale]/api/form.ts @@ -2,10 +2,9 @@ export const prerender = false; import { getEntry } from 'astro:content'; import { - // BREVO_FORM_URL, - // CONTACT_NOTIFICATION_SUBJECT, + BREVO_FORM_URL, + CONTACT_NOTIFICATION_SUBJECT, FORM_TEXTAREA_MINLENGTH, - SITE_URL, TURNSTILE_SITE_VERIFICATION_URL, } from '@/lib/consts'; import type { Language } from '@/utils/i18n/data'; @@ -67,7 +66,7 @@ export const POST: APIRoute = async ({ const curLocale = locale as Language; const t = await getEntry('i18n', `${curLocale}/translation`); - // const meta = await getEntry('meta', `${curLocale}/site-data`); + const meta = await getEntry('meta', `${curLocale}/site-data`); const formSchema = object({ name: pipe(string(), nonEmpty(t.data.contact_form.name.required)), @@ -126,55 +125,33 @@ export const POST: APIRoute = async ({ ); } - // const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; - - // const mailContent = { - // sender: { email: myEmail, name: meta.data.site.title }, - // to: [ - // { - // email: myEmail, - // name: t.data.author_name, - // }, - // ], - // subject: CONTACT_NOTIFICATION_SUBJECT, - // textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, - // replyTo: { - // email: data.email, - // name: data.name, - // }, - // }; - // const brevoApiKey = locals.runtime.env.BREVO_API_KEY; - - // const response = await fetch(BREVO_FORM_URL, { - // method: 'POST', - // headers: { - // Accept: 'application/json', - // 'Content-Type': 'application/json', - // 'api-key': brevoApiKey, - // }, - // body: JSON.stringify(mailContent), - // }); - - // const response = await fetch(BREVO_FORM_URL, { - // method: 'POST', - // headers: { - // Accept: 'application/json', - // 'Content-Type': 'application/json', - // 'api-key': brevoApiKey, - // }, - // body: JSON.stringify(mailContent), - // }); + const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; + + const mailContent = { + sender: { email: myEmail, name: meta.data.site.title }, + to: [ + { + email: myEmail, + name: t.data.author_name, + }, + ], + subject: CONTACT_NOTIFICATION_SUBJECT, + textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, + replyTo: { + email: data.email, + name: data.name, + }, + }; + const brevoApiKey = locals.runtime.env.BREVO_API_KEY; - const response = await fetch(`${SITE_URL}/functions/api/email`, { + const response = await fetch(BREVO_FORM_URL, { method: 'POST', headers: { + Accept: 'application/json', 'Content-Type': 'application/json', + 'api-key': brevoApiKey, }, - body: JSON.stringify({ - name: data.name, - email: data.email, - message: data.message, - }), + body: JSON.stringify(mailContent), }); if (!response.ok) { return new Response( diff --git a/src/pages/api/form.ts b/src/pages/api/form.ts index d184e306..1dfbb3d1 100644 --- a/src/pages/api/form.ts +++ b/src/pages/api/form.ts @@ -2,10 +2,9 @@ export const prerender = false; import { getEntry } from 'astro:content'; import { + BREVO_FORM_URL, + CONTACT_NOTIFICATION_SUBJECT, FORM_TEXTAREA_MINLENGTH, - // BREVO_FORM_URL, - // CONTACT_NOTIFICATION_SUBJECT, - SITE_URL, TURNSTILE_SITE_VERIFICATION_URL, } from '@/lib/consts'; import { defaultLang } from '@/utils/i18n/data'; @@ -54,7 +53,7 @@ export const POST: APIRoute = async ({ locals, }: APIContext) => { const t = await getEntry('i18n', `${defaultLang}/translation`); - // const meta = await getEntry('meta', `${defaultLang}/site-data`); + const meta = await getEntry('meta', `${defaultLang}/site-data`); const formSchema = object({ name: pipe(string(), nonEmpty(t.data.contact_form.name.required)), @@ -113,44 +112,33 @@ export const POST: APIRoute = async ({ ); } - // const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; + const myEmail = locals.runtime.env.MY_CUSTOM_EMAIL_ADDRESS; - // const mailContent = { - // sender: { email: myEmail, name: meta.data.site.title }, - // to: [ - // { - // email: myEmail, - // name: t.data.author_name, - // }, - // ], - // subject: CONTACT_NOTIFICATION_SUBJECT, - // textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, - // replyTo: { - // email: data.email, - // name: data.name, - // }, - // }; - // const brevoApiKey = locals.runtime.env.BREVO_API_KEY; + const mailContent = { + sender: { email: myEmail, name: meta.data.site.title }, + to: [ + { + email: myEmail, + name: t.data.author_name, + }, + ], + subject: CONTACT_NOTIFICATION_SUBJECT, + textContent: `お問い合わせ内容 \n --- \n 名前: ${data.name} \n メールアドレス: ${data.email} \n メッセージ: ${data.message} \n ---`, + replyTo: { + email: data.email, + name: data.name, + }, + }; + const brevoApiKey = locals.runtime.env.BREVO_API_KEY; - // const response = await fetch(BREVO_FORM_URL, { - // method: 'POST', - // headers: { - // Accept: 'application/json', - // 'Content-Type': 'application/json', - // 'api-key': brevoApiKey, - // }, - // body: JSON.stringify(mailContent), - // }); - const response = await fetch(`${SITE_URL}/api/email`, { + const response = await fetch(BREVO_FORM_URL, { method: 'POST', headers: { + Accept: 'application/json', 'Content-Type': 'application/json', + 'api-key': brevoApiKey, }, - body: JSON.stringify({ - name: data.name, - email: data.email, - message: data.message, - }), + body: JSON.stringify(mailContent), }); if (!response.ok) { return new Response( diff --git a/tsconfig.json b/tsconfig.json index cb6e5961..67d3e80a 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -16,6 +16,6 @@ "exclude": [ "./dist", "./node_modules", - "./functions" + "src/functions" ] } diff --git a/worker-configuration.d.ts b/worker-configuration.d.ts index 7fdb43a5..a7622c99 100644 --- a/worker-configuration.d.ts +++ b/worker-configuration.d.ts @@ -1,4 +1,4 @@ -// Generated by Wrangler on Fri Aug 02 2024 01:29:02 GMT+0000 (Coordinated Universal Time) +// Generated by Wrangler on Fri Aug 02 2024 06:25:18 GMT+0000 (Coordinated Universal Time) // by running `wrangler types` interface Env { @@ -13,5 +13,4 @@ interface Env { D1_DB_API_TOKEN: string; LOCAL_DB_PATH: string; DB: D1Database; - EMAIL_SENDER: Fetcher; } diff --git a/wrangler.toml b/wrangler.toml index 04969833..1320704f 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -9,7 +9,3 @@ database_name = "younagi_dev_db" database_id = "500cb3d8-68a9-41e1-bf09-1ce81c89e51f" migrations_dir = "./src/db/migrations" preview_database_id = "DB" - -[[services]] -binding = "EMAIL_SENDER" -service = "younagi-contact-worker" From 9fc273dfb7daa4c1f94852e1a447c268e02efad3 Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Mon, 5 Aug 2024 01:19:05 +0000 Subject: [PATCH 6/7] =?UTF-8?q?chore(dev):=20=F0=9F=A4=96=20tweak=20scopes?= =?UTF-8?q?=20of=20conventional=20commits?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .vscode/extensions.json | 4 +++ .vscode/launch.json | 11 +++++++++ changelog.config.cjs | 55 +++++++++++++++++++++-------------------- 3 files changed, 43 insertions(+), 27 deletions(-) create mode 100644 .vscode/extensions.json create mode 100644 .vscode/launch.json diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 00000000..56f043d3 --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,4 @@ +{ + "recommendations": ["astro-build.astro-vscode", "unifiedjs.vscode-mdx"], + "unwantedRecommendations": [] +} diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..d6422097 --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,11 @@ +{ + "version": "0.2.0", + "configurations": [ + { + "command": "./node_modules/.bin/astro dev", + "name": "Development server", + "request": "launch", + "type": "node-terminal" + } + ] +} diff --git a/changelog.config.cjs b/changelog.config.cjs index 49a2c1c6..a744fe79 100644 --- a/changelog.config.cjs +++ b/changelog.config.cjs @@ -19,34 +19,34 @@ module.exports = { scopes: ['api', "cms", 'config', 'contents', 'db', 'deps', 'docker', 'i18n', 'none', 'ui', "utils"], types: { chore: { - description: 'Build process or auxiliary tool changes', - emoji: '🤖', - value: 'chore', + description: "Build process or auxiliary tool changes", + emoji: "🤖", + value: "chore", }, ci: { - description: 'CI related changes', - emoji: '🎡', - value: 'ci', + description: "CI related changes", + emoji: "🎡", + value: "ci", }, docs: { - description: 'Doc or article tweaks only', - emoji: '📖', - value: 'docs', + description: "Doc or article tweaks only", + emoji: "📖", + value: "docs", }, feat: { - description: 'A new feature', - emoji: '🆕', - value: 'feat', + description: "A new feature", + emoji: "🆕", + value: "feat", }, fix: { - description: 'A bug fix', - emoji: '🐛', - value: 'fix', + description: "A bug fix", + emoji: "🐛", + value: "fix", }, perf: { - description: 'A code tweak for performance enhancement', - emoji: '⚡️', - value: 'perf', + description: "A code tweak for performance enhancement", + emoji: "⚡️", + value: "perf", }, refactor: { description: 'A code tweak that neither fixes a bug or adds a new feature(rename a variable etc...)', @@ -59,19 +59,20 @@ module.exports = { value: 'revert', }, style: { - description: 'Formatting tweaks(Markup, white-space, missing semi-colons etc...)', - emoji: '💄', - value: 'style', + description: + "Formatting tweaks(Markup, white-space, missing semi-colons etc...)", + emoji: "💄", + value: "style", }, test: { - description: 'Tweaks for tests', - emoji: '✒️', - value: 'test', + description: "Tweaks for tests", + emoji: "✒️", + value: "test", }, package: { - description: 'Package changes(install, update, remove etc...)', - emoji: '📦', - value: 'package', + description: "Package changes(install, update, remove etc...)", + emoji: "📦", + value: "package", }, }, }; From 46a5f4bc81cd9dd1aab1f035242da82615f1eb11 Mon Sep 17 00:00:00 2001 From: brklntmhwk_dev <86272619+brklntmhwk@users.noreply.github.com> Date: Mon, 5 Aug 2024 02:20:33 +0000 Subject: [PATCH 7/7] =?UTF-8?q?chore(docker):=20=F0=9F=A4=96=20remove=20th?= =?UTF-8?q?e=20volume=20for=20the=20whole=20project?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the chown flag not working with the volume mount --- .dockerignore | 13 ++++---- .husky/_/pre-commit | 60 +++++++++++++++++++++++++++++++++++ .husky/_/prepare-commit-msg | 60 +++++++++++++++++++++++++++++++++++ bun.lockb | Bin 519980 -> 520324 bytes docker-compose.yml | 6 ++-- package.json | 4 +-- src/components/Icon/types.ts | 38 +++++++++++----------- 7 files changed, 150 insertions(+), 31 deletions(-) create mode 100644 .husky/_/pre-commit create mode 100644 .husky/_/prepare-commit-msg diff --git a/.dockerignore b/.dockerignore index ac80a7f1..53e8273b 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,8 +1,7 @@ -node_modules/ -Dockerfile* -docker-compose* -.dockerignore dist/ -.git/ -.gitignore -README.md +node_modules/ +# Dockerfile* +# docker-compose* +# .dockerignore +# .git/ +# .gitignore diff --git a/.husky/_/pre-commit b/.husky/_/pre-commit new file mode 100644 index 00000000..3fbf5f96 --- /dev/null +++ b/.husky/_/pre-commit @@ -0,0 +1,60 @@ +#!/bin/sh + +if [ "$LEFTHOOK_VERBOSE" = "1" -o "$LEFTHOOK_VERBOSE" = "true" ]; then + set -x +fi + +if [ "$LEFTHOOK" = "0" ]; then + exit 0 +fi + +call_lefthook() +{ + if test -n "$LEFTHOOK_BIN" + then + "$LEFTHOOK_BIN" "$@" + elif lefthook -h >/dev/null 2>&1 + then + lefthook "$@" + else + dir="$(git rev-parse --show-toplevel)" + osArch=$(uname | tr '[:upper:]' '[:lower:]') + cpuArch=$(uname -m | sed 's/aarch64/arm64/;s/x86_64/x64/') + if test -f "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" + then + "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" "$@" + elif test -f "$dir/node_modules/lefthook/bin/index.js" + then + "$dir/node_modules/lefthook/bin/index.js" "$@" + + elif bundle exec lefthook -h >/dev/null 2>&1 + then + bundle exec lefthook "$@" + elif yarn lefthook -h >/dev/null 2>&1 + then + yarn lefthook "$@" + elif pnpm lefthook -h >/dev/null 2>&1 + then + pnpm lefthook "$@" + elif swift package plugin lefthook >/dev/null 2>&1 + then + swift package --disable-sandbox plugin lefthook "$@" + elif command -v mint >/dev/null 2>&1 + then + mint run csjones/lefthook-plugin "$@" + elif command -v npx >/dev/null 2>&1 + then + npx lefthook "$@" + else + echo "Can't find lefthook in PATH" + fi + fi +} + +call_lefthook run "pre-commit" "$@" diff --git a/.husky/_/prepare-commit-msg b/.husky/_/prepare-commit-msg new file mode 100644 index 00000000..e8e8dda9 --- /dev/null +++ b/.husky/_/prepare-commit-msg @@ -0,0 +1,60 @@ +#!/bin/sh + +if [ "$LEFTHOOK_VERBOSE" = "1" -o "$LEFTHOOK_VERBOSE" = "true" ]; then + set -x +fi + +if [ "$LEFTHOOK" = "0" ]; then + exit 0 +fi + +call_lefthook() +{ + if test -n "$LEFTHOOK_BIN" + then + "$LEFTHOOK_BIN" "$@" + elif lefthook -h >/dev/null 2>&1 + then + lefthook "$@" + else + dir="$(git rev-parse --show-toplevel)" + osArch=$(uname | tr '[:upper:]' '[:lower:]') + cpuArch=$(uname -m | sed 's/aarch64/arm64/;s/x86_64/x64/') + if test -f "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" + then + "$dir/node_modules/lefthook-${osArch}-${cpuArch}/bin/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook/bin/lefthook-${osArch}-${cpuArch}/lefthook" "$@" + elif test -f "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" + then + "$dir/node_modules/@evilmartians/lefthook-installer/bin/lefthook" "$@" + elif test -f "$dir/node_modules/lefthook/bin/index.js" + then + "$dir/node_modules/lefthook/bin/index.js" "$@" + + elif bundle exec lefthook -h >/dev/null 2>&1 + then + bundle exec lefthook "$@" + elif yarn lefthook -h >/dev/null 2>&1 + then + yarn lefthook "$@" + elif pnpm lefthook -h >/dev/null 2>&1 + then + pnpm lefthook "$@" + elif swift package plugin lefthook >/dev/null 2>&1 + then + swift package --disable-sandbox plugin lefthook "$@" + elif command -v mint >/dev/null 2>&1 + then + mint run csjones/lefthook-plugin "$@" + elif command -v npx >/dev/null 2>&1 + then + npx lefthook "$@" + else + echo "Can't find lefthook in PATH" + fi + fi +} + +call_lefthook run "prepare-commit-msg" "$@" diff --git a/bun.lockb b/bun.lockb index b58a37484aa1296e5698e90070099aeeb63c13a2..21d46c871dd9bf1850e9ead2c1dd5bbd6250188c 100644 GIT binary patch delta 99303 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 Tqp;s8r6ISR8`9ic&iVfj{mci_ delta 99458 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 diff --git a/docker-compose.yml b/docker-compose.yml index 3fb01e91..e713bc7e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -13,9 +13,9 @@ services: environment: - COMPOSE_PROJECT_NAME=app working_dir: /workspace - volumes: - - .:/workspace:cached - # - node-modules-data:/workspace/node_modules + # volumes: + # - .:/workspace:cached + # - node-modules-data:/workspace/node_modules user: dev # volumes: # node-modules-data: diff --git a/package.json b/package.json index dfbc6f4b..c9c541cc 100644 --- a/package.json +++ b/package.json @@ -23,8 +23,7 @@ "db:generate": "drizzle-kit generate", "db:studio:prod": "drizzle-kit studio", "db:migrate:local": "wrangler d1 migrations apply younagi_dev_db --local", - "db:migrate:prod": "wrangler d1 migrations apply younagi_dev_db", - "prepare": "lefthook install" + "db:migrate:prod": "wrangler d1 migrations apply younagi_dev_db" }, "dependencies": { "@astrojs/check": "^0.5.10", @@ -43,6 +42,7 @@ "astro": "^4.12.2", "astro-purgecss": "4.1.0", "drizzle-orm": "^0.31.1", + "nodemailer": "^6.9.14", "purgecss": "5.0.0", "solid-js": "^1.8.17", "solid-motionone": "^1.0.0", diff --git a/src/components/Icon/types.ts b/src/components/Icon/types.ts index dc98fa61..bc1f21e4 100644 --- a/src/components/Icon/types.ts +++ b/src/components/Icon/types.ts @@ -1,27 +1,27 @@ export type IconName = - | 'bmc' - | 'check' - | 'failure' - | 'github' - | 'hand-heart-filled' - | 'hand-heart' - | 'info' - | 'language' - | 'left-arrow' - | 'link' + | 'unsplash' | 'magnifier' + | 'publish' | 'mail' | 'moon' - | 'new' - | 'pencil' - | 'point' - | 'publish' - | 'question' | 'quote' + | 'point' + | 'bmc' | 'right-arrow' - | 'rss' - | 'sun' + | 'pencil' + | 'warning' | 'toc' - | 'unsplash' + | 'failure' + | 'hand-heart-filled' + | 'github' + | 'info' + | 'new' + | 'hand-heart' | 'update' - | 'warning'; + | 'left-arrow' + | 'language' + | 'rss' + | 'sun' + | 'link' + | 'check' + | 'question';