diff --git a/package.json b/package.json
index e81d3d510..8d1a0d1ba 100644
--- a/package.json
+++ b/package.json
@@ -22,7 +22,7 @@
},
"dependencies": {
"@ai-sdk/svelte": "^1.1.24",
- "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@3996505",
+ "@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@fe3277e",
"@appwrite.io/pink-icons": "0.25.0",
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@50b60cc",
"@appwrite.io/pink-legacy": "^1.0.3",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 62a3e0c69..463bb83f3 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -12,8 +12,8 @@ importers:
specifier: ^1.1.24
version: 1.1.24(svelte@5.25.3)(zod@3.24.3)
'@appwrite.io/console':
- specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@3996505
- version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@3996505
+ specifier: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@fe3277e
+ version: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@fe3277e
'@appwrite.io/pink-icons':
specifier: 0.25.0
version: 0.25.0
@@ -260,8 +260,8 @@ packages:
'@analytics/type-utils@0.6.2':
resolution: {integrity: sha512-TD+xbmsBLyYy/IxFimW/YL/9L2IEnM7/EoV9Aeh56U64Ify8o27HJcKjo38XY9Tcn0uOq1AX3thkKgvtWvwFQg==}
- '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@3996505':
- resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@3996505}
+ '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@fe3277e':
+ resolution: {tarball: https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@fe3277e}
version: 1.10.0
'@appwrite.io/pink-icons-svelte@2.0.0-RC.1':
@@ -335,8 +335,8 @@ packages:
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
engines: {node: '>=6.9.0'}
- '@babel/helper-validator-identifier@7.27.1':
- resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==}
+ '@babel/helper-validator-identifier@7.28.5':
+ resolution: {integrity: sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==}
engines: {node: '>=6.9.0'}
'@babel/helper-validator-option@7.25.9':
@@ -352,8 +352,8 @@ packages:
engines: {node: '>=6.0.0'}
hasBin: true
- '@babel/parser@7.28.4':
- resolution: {integrity: sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==}
+ '@babel/parser@7.28.5':
+ resolution: {integrity: sha512-KKBU1VGYR7ORr3At5HAtUQ+TV3SzRCXmA/8OdDZiLDBIZxVyzXuztPjfLd3BV1PRAQGCMWWSHYhL0F8d5uHBDQ==}
engines: {node: '>=6.0.0'}
hasBin: true
@@ -373,8 +373,8 @@ packages:
resolution: {integrity: sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.28.4':
- resolution: {integrity: sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==}
+ '@babel/types@7.28.5':
+ resolution: {integrity: sha512-qQ5m48eI/MFLQ5PxQj4PFaprjyCTLI37ElWMmNs0K8Lk3dVeOdNpB3ks8jc7yM5CDmVC73eMVk/trk3fgmrUpA==}
engines: {node: '>=6.9.0'}
'@csstools/color-helpers@5.0.2':
@@ -2607,8 +2607,8 @@ packages:
magic-string@0.30.18:
resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==}
- magic-string@0.30.19:
- resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==}
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
magic-string@0.30.7:
resolution: {integrity: sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==}
@@ -3703,7 +3703,7 @@ snapshots:
'@analytics/type-utils@0.6.2': {}
- '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@3996505': {}
+ '@appwrite.io/console@https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@fe3277e': {}
'@appwrite.io/pink-icons-svelte@2.0.0-RC.1(svelte@5.25.3)':
dependencies:
@@ -3812,7 +3812,7 @@ snapshots:
'@babel/helper-validator-identifier@7.25.9': {}
- '@babel/helper-validator-identifier@7.27.1': {}
+ '@babel/helper-validator-identifier@7.28.5': {}
'@babel/helper-validator-option@7.25.9': {}
@@ -3825,9 +3825,9 @@ snapshots:
dependencies:
'@babel/types': 7.27.0
- '@babel/parser@7.28.4':
+ '@babel/parser@7.28.5':
dependencies:
- '@babel/types': 7.28.4
+ '@babel/types': 7.28.5
'@babel/runtime@7.27.0':
dependencies:
@@ -3856,10 +3856,10 @@ snapshots:
'@babel/helper-string-parser': 7.25.9
'@babel/helper-validator-identifier': 7.25.9
- '@babel/types@7.28.4':
+ '@babel/types@7.28.5':
dependencies:
'@babel/helper-string-parser': 7.27.1
- '@babel/helper-validator-identifier': 7.27.1
+ '@babel/helper-validator-identifier': 7.28.5
'@csstools/color-helpers@5.0.2': {}
@@ -5124,7 +5124,7 @@ snapshots:
'@vue/compiler-core@3.5.13':
dependencies:
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@vue/shared': 3.5.13
entities: 4.5.0
estree-walker: 2.0.2
@@ -5137,13 +5137,13 @@ snapshots:
'@vue/compiler-sfc@3.5.13':
dependencies:
- '@babel/parser': 7.28.4
+ '@babel/parser': 7.28.5
'@vue/compiler-core': 3.5.13
'@vue/compiler-dom': 3.5.13
'@vue/compiler-ssr': 3.5.13
'@vue/shared': 3.5.13
estree-walker: 2.0.2
- magic-string: 0.30.19
+ magic-string: 0.30.21
postcss: 8.5.6
source-map-js: 1.2.1
@@ -6285,7 +6285,7 @@ snapshots:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
- magic-string@0.30.19:
+ magic-string@0.30.21:
dependencies:
'@jridgewell/sourcemap-codec': 1.5.5
diff --git a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte
index 48a313d48..7cddff0bb 100644
--- a/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte
+++ b/src/routes/(console)/project-[region]-[project]/functions/function-[function]/executions/sheet.svelte
@@ -1,6 +1,7 @@
+
+
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/create.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/create.svelte
index e8a711d86..8fd01fdfd 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/create.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/create.svelte
@@ -118,6 +118,20 @@
enabled: $providerParams[$provider].enabled
});
break;
+ case Providers.Resend:
+ response = await sdk
+ .forProject(page.params.region, page.params.project)
+ .messaging.createResendProvider({
+ providerId,
+ name: $providerParams[$provider].name,
+ apiKey: $providerParams[$provider].apiKey,
+ fromName: $providerParams[$provider].fromName || undefined,
+ fromEmail: $providerParams[$provider].fromEmail,
+ replyToName: $providerParams[$provider].replyToName || undefined,
+ replyToEmail: $providerParams[$provider].replyToEmail || undefined,
+ enabled: $providerParams[$provider].enabled
+ });
+ break;
case Providers.SMTP:
response = await sdk
.forProject(page.params.region, page.params.project)
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/+page.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/+page.svelte
index 4a6c74331..857bbb4f8 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/+page.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/+page.svelte
@@ -99,6 +99,18 @@
replyToName: $providerData.options['replyToName']
};
break;
+ case Providers.Resend:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ apiKey: $providerData.credentials['apiKey'],
+ fromEmail: $providerData.options['fromEmail'],
+ fromName: $providerData.options['fromName'],
+ replyToEmail: $providerData.options['replyToEmail'],
+ replyToName: $providerData.options['replyToName']
+ };
+ break;
case Providers.SMTP:
params = {
providerId: $providerData.$id,
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/updateSettings.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/updateSettings.svelte
index 5d70650eb..dfaeb132d 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/updateSettings.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/provider-[provider]/updateSettings.svelte
@@ -158,6 +158,18 @@
replyToEmail: formValues['replyToEmail'] || undefined
});
break;
+ case Providers.Resend:
+ response = await sdk
+ .forProject(page.params.region, page.params.project)
+ .messaging.updateResendProvider({
+ providerId,
+ apiKey: formValues['apiKey'],
+ fromName: formValues['fromName'] || undefined,
+ fromEmail: formValues['fromEmail'],
+ replyToName: formValues['replyToName'] || undefined,
+ replyToEmail: formValues['replyToEmail'] || undefined
+ });
+ break;
case Providers.SMTP:
response = await sdk
.forProject(page.params.region, page.params.project)
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte
index afa62b44f..4ec9350a0 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormInput.svelte
@@ -19,6 +19,7 @@
VonageProviderParams,
MailgunProviderParams,
SendgridProviderParams,
+ ResendProviderParams,
SMTPProviderParams,
FCMProviderParams,
APNSProviderParams
@@ -39,6 +40,7 @@
| VonageProviderParams
| MailgunProviderParams
| SendgridProviderParams
+ | ResendProviderParams
| SMTPProviderParams
| FCMProviderParams
| APNSProviderParams
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormList.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormList.svelte
index 88f6a4bab..010519b4c 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormList.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/settingsFormList.svelte
@@ -9,6 +9,7 @@
VonageProviderParams,
MailgunProviderParams,
SendgridProviderParams,
+ ResendProviderParams,
SMTPProviderParams,
FCMProviderParams,
APNSProviderParams
@@ -24,6 +25,7 @@
| VonageProviderParams
| MailgunProviderParams
| SendgridProviderParams
+ | ResendProviderParams
| SMTPProviderParams
| FCMProviderParams
| APNSProviderParams
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/store.ts b/src/routes/(console)/project-[region]-[project]/messaging/providers/store.ts
index 985d93215..da9c51351 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/store.ts
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/store.ts
@@ -10,6 +10,7 @@ import {
IconFirebase,
IconMailgun,
IconMsg91,
+ IconResend,
IconSendgrid,
IconTelesign,
IconTextMagic,
@@ -318,6 +319,55 @@ export const providers: ProvidersMap = {
]
]
},
+ [Providers.Resend]: {
+ imageIcon: IconResend,
+ title: 'Resend',
+ description: '',
+ configure: [
+ {
+ label: 'API key',
+ name: 'apiKey',
+ type: 'password',
+ placeholder: 'Enter API key',
+ popover: [
+ 'How to get the API key?',
+ 'Create an account in Resend.',
+ 'Head to API Keys -> Create API Key.'
+ ]
+ },
+ [
+ {
+ label: 'Sender email',
+ name: 'fromEmail',
+ type: 'email',
+ placeholder: 'Enter email'
+ },
+ {
+ label: 'Sender name',
+ name: 'fromName',
+ type: 'text',
+ optional: true,
+ placeholder: 'Enter name'
+ }
+ ],
+ [
+ {
+ label: 'Reply-to email',
+ name: 'replyToEmail',
+ type: 'email',
+ optional: true,
+ placeholder: 'Enter email'
+ },
+ {
+ label: 'Reply-to name',
+ name: 'replyToName',
+ type: 'text',
+ optional: true,
+ placeholder: 'Enter name'
+ }
+ ]
+ ]
+ },
[Providers.SMTP]: {
classIcon: IconMail,
title: 'SMTP',
@@ -655,6 +705,14 @@ export type SendgridProviderParams = ProviderParams & {
apiKey: string;
};
+export type ResendProviderParams = ProviderParams & {
+ fromEmail: string;
+ fromName: string;
+ replyToEmail: string;
+ replyToName: string;
+ apiKey: string;
+};
+
export type SMTPProviderParams = ProviderParams & {
fromEmail: string;
fromName: string;
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/provider.svelte b/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/provider.svelte
index 313b6604f..34e1de162 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/provider.svelte
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/provider.svelte
@@ -99,6 +99,18 @@
replyToName: ''
};
break;
+ case Providers.Resend:
+ $providerParams[$provider] = {
+ providerId: id,
+ name: name,
+ enabled: true,
+ apiKey: '',
+ fromEmail: '',
+ fromName: '',
+ replyToEmail: '',
+ replyToName: ''
+ };
+ break;
case Providers.SMTP:
$providerParams[$provider] = {
providerId: id,
diff --git a/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/store.ts b/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/store.ts
index 41741b3ce..5ed2a7c1f 100644
--- a/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/store.ts
+++ b/src/routes/(console)/project-[region]-[project]/messaging/providers/wizard/store.ts
@@ -6,6 +6,7 @@ import type {
FCMProviderParams,
MailgunProviderParams,
Msg91ProviderParams,
+ ResendProviderParams,
SMTPProviderParams,
SendgridProviderParams,
TelesignProviderParams,
@@ -24,6 +25,7 @@ export const providerParams = writable<{
vonage: Partial;
mailgun: Partial;
sendgrid: Partial;
+ resend: Partial;
smtp: Partial;
fcm: Partial;
apns: Partial;
@@ -35,6 +37,7 @@ export const providerParams = writable<{
vonage: null,
mailgun: null,
sendgrid: null,
+ resend: null,
smtp: null,
fcm: null,
apns: null
diff --git a/static/icons/dark/color/resend.svg b/static/icons/dark/color/resend.svg
new file mode 100644
index 000000000..4371f60b3
--- /dev/null
+++ b/static/icons/dark/color/resend.svg
@@ -0,0 +1,3 @@
+
diff --git a/static/icons/light/color/resend.svg b/static/icons/light/color/resend.svg
new file mode 100644
index 000000000..67af6bf6d
--- /dev/null
+++ b/static/icons/light/color/resend.svg
@@ -0,0 +1,3 @@
+