diff --git a/src/routes/console/project-[project]/messaging/provider.svelte b/src/routes/console/project-[project]/messaging/provider.svelte
index e130ea23f..a78eb75c0 100644
--- a/src/routes/console/project-[project]/messaging/provider.svelte
+++ b/src/routes/console/project-[project]/messaging/provider.svelte
@@ -11,6 +11,50 @@
FCM = 'fcm',
APNS = 'apns'
}
+
+ export function getProviderDisplayNameAndIcon(provider: Providers | string) {
+ let icon = '';
+ let displayName = provider.charAt(0).toUpperCase() + provider.slice(1);
+
+ switch (provider) {
+ case Providers.FCM:
+ icon = 'firebase';
+ displayName = 'FCM';
+ break;
+ case Providers.APNS:
+ icon = 'apple';
+ displayName = 'APNS';
+ break;
+ case Providers.Sendgrid:
+ icon = 'sendgrid';
+ break;
+ case Providers.Mailgun:
+ icon = 'mailgun';
+ break;
+ case Providers.SMTP:
+ icon = 'smtp';
+ displayName = 'SMTP';
+ break;
+ case Providers.Twilio:
+ icon = 'twilio';
+ break;
+ case Providers.Telesign:
+ icon = 'telesign';
+ break;
+ case Providers.Msg91:
+ icon = 'msg91';
+ displayName = 'MSG91';
+ break;
+ case Providers.Textmagic:
+ icon = 'textmagic';
+ displayName = 'Textmagic';
+ break;
+ case Providers.Vonage:
+ icon = 'vonage';
+ break;
+ }
+ return { icon, displayName };
+ }
{#if icon === ''}
@@ -89,12 +94,12 @@
+ alt={name || displayName} />
{/if}
{/if}
- {displayName}
+ {name || displayName}
{/if}
diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte
index 2262f62ac..e6e4f4a55 100644
--- a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte
+++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/+page.svelte
@@ -2,11 +2,158 @@
import { Container } from '$lib/layout';
import DangerZone from './dangerZone.svelte';
import UpdateName from './updateName.svelte';
+ import UpdateSettings from './updateSettings.svelte';
import UpdateStatus from './updateStatus.svelte';
+ import { isValueOfStringEnum } from '$lib/helpers/types';
+ import { MessagingProviderType } from '@appwrite.io/console';
+ import { Providers } from '../../provider.svelte';
+ import { providers } from '../store';
+ import { provider as providerData } from './store';
+
+ let providerType: MessagingProviderType;
+ if (isValueOfStringEnum(MessagingProviderType, $providerData.type)) {
+ providerType = $providerData.type;
+ }
+
+ let provider: Providers;
+ if (isValueOfStringEnum(Providers, $providerData.provider)) {
+ provider = $providerData.provider;
+ }
+
+ let params: object = {};
+
+ $: switch (provider) {
+ case Providers.Twilio:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ accountSid: $providerData.credentials['accountSid'],
+ authToken: $providerData.credentials['authToken'],
+ from: $providerData.options['from']
+ };
+ break;
+ case Providers.Msg91:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ from: $providerData.options['from'],
+ senderId: $providerData.credentials['senderId'],
+ authKey: $providerData.credentials['authKey']
+ };
+ break;
+ case Providers.Telesign:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ username: $providerData.credentials['username'],
+ password: $providerData.credentials['password'],
+ from: $providerData.options['from']
+ };
+ break;
+ case Providers.Textmagic:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ username: $providerData.credentials['username'],
+ apiKey: $providerData.credentials['apiKey'],
+ from: $providerData.options['from']
+ };
+ break;
+ case Providers.Vonage:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ apiKey: $providerData.credentials['apiKey'],
+ apiSecret: $providerData.credentials['apiSecret'],
+ from: $providerData.options['from']
+ };
+ break;
+ case Providers.Mailgun:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ isEuRegion: false,
+ fromEmail: $providerData.options['fromEmail'],
+ fromName: $providerData.options['fromName'],
+ replyToEmail: $providerData.options['replyToEmail'],
+ replyToName: $providerData.options['replyToName'],
+ apiKey: $providerData.credentials['apiKey'],
+ domain: $providerData.credentials['domain']
+ };
+ break;
+ case Providers.Sendgrid:
+ 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,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ host: $providerData.credentials['host'],
+ port: $providerData.credentials['port'],
+ username: $providerData.credentials['username'],
+ password: $providerData.credentials['password'],
+ fromName: $providerData.options['fromName'],
+ fromEmail: $providerData.options['fromEmail'],
+ replyToName: $providerData.options['replyToName'],
+ replyToEmail: $providerData.options['replyToEmail'],
+ encryption: $providerData.options['encryption'],
+ autoTLS: $providerData.options['autoTLS'],
+ mailer: $providerData.options['mailer']
+ };
+ break;
+ case Providers.FCM:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled
+ };
+ if ('serviceAccountJSON' in $providerData.credentials) {
+ const serviceAccountJSON = $providerData.credentials['serviceAccountJSON'];
+ if (typeof serviceAccountJSON === 'string') {
+ params['serviceAccountJSON'] = serviceAccountJSON;
+ } else if (serviceAccountJSON instanceof Object) {
+ params['serviceAccountJSON'] = JSON.stringify(serviceAccountJSON);
+ }
+ }
+ break;
+ case Providers.APNS:
+ params = {
+ providerId: $providerData.$id,
+ name: $providerData.name,
+ enabled: $providerData.enabled,
+ authKey: $providerData.credentials['authKey'],
+ authKeyId: $providerData.credentials['authKeyId'],
+ teamId: $providerData.credentials['teamId'],
+ bundleId: $providerData.credentials['bundleId']
+ };
+ break;
+ }
+
diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts
index 441524d17..d4211320e 100644
--- a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts
+++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/store.ts
@@ -2,8 +2,4 @@ import { derived } from 'svelte/store';
import { page } from '$app/stores';
import type { Models } from '@appwrite.io/console';
-export const provider = derived(
- page,
- // TODO: Set actual type
- ($page) => $page.data.provider as Models.Provider
-);
+export const provider = derived(page, ($page) => $page.data.provider as Models.Provider);
diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte
new file mode 100644
index 000000000..66a39bcbb
--- /dev/null
+++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateSettings.svelte
@@ -0,0 +1,233 @@
+
+
+
+
+
diff --git a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte
index 78d81d5d9..27d179154 100644
--- a/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte
+++ b/src/routes/console/project-[project]/messaging/providers/provider-[provider]/updateStatus.svelte
@@ -5,16 +5,11 @@
import { Dependencies } from '$lib/constants';
import { Button, InputSwitch } from '$lib/elements/forms';
import { toLocaleDateTime } from '$lib/helpers/date';
- import { isValueOfStringEnum } from '$lib/helpers/types';
import { addNotification } from '$lib/stores/notifications';
import { sdk } from '$lib/stores/sdk';
- import { wizard } from '$lib/stores/wizard';
import { onMount } from 'svelte';
- import { MessagingProviderType } from '@appwrite.io/console';
import Provider, { Providers } from '../../provider.svelte';
import ProviderType from '../../providerType.svelte';
- import Update from '../update.svelte';
- import { providerParams, providerType, provider } from '../store';
import { provider as providerData } from './store';
let enabled: boolean = null;
@@ -23,144 +18,6 @@
enabled ??= $providerData.enabled;
});
- function configure() {
- if (!isValueOfStringEnum(MessagingProviderType, $providerData.type)) {
- throw new Error(`Invalid provider type: ${$providerData.type}`);
- }
-
- if (!isValueOfStringEnum(Providers, $providerData.provider)) {
- throw new Error(`Invalid provider: ${$providerData.provider}`);
- }
- $providerType = $providerData.type;
- $provider = $providerData.provider;
-
- switch ($provider) {
- case Providers.Twilio:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- accountSid: $providerData.credentials['accountSid'],
- authToken: $providerData.credentials['authToken'],
- from: $providerData.options['from']
- };
- break;
- case Providers.Msg91:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- from: $providerData.options['from'],
- senderId: $providerData.credentials['senderId'],
- authKey: $providerData.credentials['authKey']
- };
- break;
- case Providers.Telesign:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- username: $providerData.credentials['username'],
- password: $providerData.credentials['password'],
- from: $providerData.options['from']
- };
- break;
- case Providers.Textmagic:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- username: $providerData.credentials['username'],
- apiKey: $providerData.credentials['apiKey'],
- from: $providerData.options['from']
- };
- break;
- case Providers.Vonage:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- apiKey: $providerData.credentials['apiKey'],
- apiSecret: $providerData.credentials['apiSecret'],
- from: $providerData.options['from']
- };
- break;
- case Providers.Mailgun:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- isEuRegion: false,
- fromEmail: $providerData.options['fromEmail'],
- fromName: $providerData.options['fromName'],
- replyToEmail: $providerData.options['replyToEmail'],
- replyToName: $providerData.options['replyToName'],
- apiKey: $providerData.credentials['apiKey'],
- domain: $providerData.credentials['domain']
- };
- break;
- case Providers.Sendgrid:
- $providerParams[$provider] = {
- 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:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- host: $providerData.credentials['host'],
- port: $providerData.credentials['port'],
- username: $providerData.credentials['username'],
- password: $providerData.credentials['password'],
- fromName: $providerData.options['fromName'],
- fromEmail: $providerData.options['fromEmail'],
- replyToName: $providerData.options['replyToName'],
- replyToEmail: $providerData.options['replyToEmail'],
- encryption: $providerData.options['encryption'],
- autoTLS: $providerData.options['autoTLS'],
- mailer: $providerData.options['mailer']
- };
- break;
- case Providers.FCM:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled
- };
- if ('serviceAccountJSON' in $providerData.credentials) {
- const serviceAccountJSON = $providerData.credentials['serviceAccountJSON'];
- if (typeof serviceAccountJSON === 'string') {
- $providerParams[$provider].serviceAccountJSON = serviceAccountJSON;
- } else if (serviceAccountJSON instanceof Object) {
- $providerParams[$provider].serviceAccountJSON =
- JSON.stringify(serviceAccountJSON);
- }
- }
- break;
- case Providers.APNS:
- $providerParams[$provider] = {
- providerId: $providerData.$id,
- name: $providerData.name,
- enabled: $providerData.enabled,
- authKey: $providerData.credentials['authKey'],
- authKeyId: $providerData.credentials['authKeyId'],
- teamId: $providerData.credentials['teamId'],
- bundleId: $providerData.credentials['bundleId']
- };
- break;
- }
-
- wizard.start(Update);
- }
-
async function updateStatus() {
try {
let response = { $id: '', name: '' };
@@ -292,7 +149,6 @@
-
diff --git a/src/routes/console/project-[project]/messaging/providers/update.svelte b/src/routes/console/project-[project]/messaging/providers/update.svelte
deleted file mode 100644
index f20606214..000000000
--- a/src/routes/console/project-[project]/messaging/providers/update.svelte
+++ /dev/null
@@ -1,163 +0,0 @@
-
-
-