Replace client.call() with the respective SDK methods

This commit is contained in:
Steven Nguyen
2024-02-05 20:04:51 -08:00
parent ac8a9a96cb
commit ec7ebd39e4
33 changed files with 417 additions and 1201 deletions
@@ -1,9 +1,7 @@
<script lang="ts">
import { page } from '$app/stores';
import { Button } from '$lib/elements/forms';
import {
Empty,
EmptySearch,
PaginationWithLimit,
Heading,
ViewSelector,
@@ -93,7 +91,7 @@
total={data.targets.total} />
{:else if $hasPageQueries}
<EmptyFilter resource="targets" />
{:else if data.search}
<!-- {:else if data.search}
<EmptySearch>
<div class="u-text-center">
<b>Sorry, we couldn't find '{data.search}'</b>
@@ -104,7 +102,7 @@
href={`/console/project-${$page.params.project}/auth/user-${$page.params.user}/targets`}>
Clear Search
</Button>
</EmptySearch>
</EmptySearch> -->
{:else}
<!-- TODO: update docs link -->
<Empty
@@ -1,60 +1,33 @@
import { queries, queryParamToMap } from '$lib/components/filters';
import { Dependencies, PAGE_LIMIT } from '$lib/constants';
import { getLimit, getPage, getQuery, getSearch, pageToOffset } from '$lib/helpers/load';
import { getLimit, getPage, getQuery, pageToOffset } from '$lib/helpers/load';
import { sdk } from '$lib/stores/sdk';
import { Query, type Models } from '@appwrite.io/console';
import type { PageLoad } from './$types';
export const load: PageLoad = async ({ params, url, route, depends }) => {
depends(Dependencies.USER_TARGETS);
const page = getPage(url);
const limit = getLimit(url, route, PAGE_LIMIT);
const offset = pageToOffset(page, limit);
const search = getSearch(url);
const query = getQuery(url);
const parsedQueries = queryParamToMap(query || '[]');
queries.set(parsedQueries);
const payload = {
queries: [
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
]
};
if (search) {
payload['search'] = search;
}
// TODO: remove when the API is ready with data
// This allows us to mock w/ data and when search returns 0 results
const targets: { targets: Models.Target[]; total: number } = await sdk.forProject.client.call(
'GET',
new URL(`${sdk.forProject.client.config.endpoint}/users/${params.user}/targets`),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
payload
);
const targets = await sdk.forProject.users.listTargets(params.user, [
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
]);
const promisesById: Record<string, Promise<Models.Provider>> = {};
targets.targets.forEach((target) => {
if (target.providerId && !promisesById[target.providerId]) {
promisesById[target.providerId] = sdk.forProject.client.call(
'GET',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/${target.providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
promisesById[target.providerId] = sdk.forProject.messaging.getProvider(
target.providerId
);
}
});
@@ -71,7 +44,6 @@ export const load: PageLoad = async ({ params, url, route, depends }) => {
return {
offset,
limit,
search,
query,
targets,
providersById
@@ -28,31 +28,13 @@
const create = async () => {
try {
const payload = {
targetId: id ? id : ID.unique(),
await sdk.forProject.users.createTarget(
$page.params.user,
id ? id : ID.unique(),
providerType,
identifier
};
if (providerId) {
payload['providerId'] = providerId;
}
if (name) {
payload['name'] = name;
}
await sdk.forProject.client.call(
'POST',
new URL(
`${sdk.forProject.client.config.endpoint}/users/${$page.params.user}/targets`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
payload
identifier,
providerId ?? undefined,
name ?? undefined
);
show = false;
addNotification({
@@ -34,21 +34,9 @@
async function handleDelete() {
showDelete = false;
async function deleteTarget(id: string) {
await sdk.forProject.client.call(
'DELETE',
new URL(
`${sdk.forProject.client.config.endpoint}/users/${$page.params.user}/targets/${id}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
}
const promises = selectedIds.map((id) => deleteTarget(id));
const promises = selectedIds.map((id) =>
sdk.forProject.users.deleteTarget($page.params.user, id)
);
try {
await Promise.all(promises);
@@ -17,25 +17,12 @@
let error = '';
onMount(async () => {
// TODO: Remove type cast when console SDK is updated
labels = [...($user as unknown as { labels: string[] }).labels];
labels = [...$user.labels];
});
async function updateLabels() {
try {
// TODO: Use SDK method when console SDK is updated
// await sdk.forProject.users.updateLabels($user.$id, labels);
const path = `/users/${$user.$id}/labels`;
await sdk.forProject.client.call(
'PUT',
new URL(sdk.forConsole.client.config.endpoint + path),
{
'content-type': 'application/json'
},
{
labels: labels
}
);
await sdk.forProject.users.updateLabels($user.$id, labels);
await invalidate(Dependencies.USER);
isDisabled = true;
@@ -9,10 +9,7 @@ export const load: PageLoad = async ({ params }) => {
const period = isValueOfStringEnum(FunctionUsageRange, params.period)
? params.period
: FunctionUsageRange.ThirtyDays;
return sdk.forProject.functions.getFunctionUsage(
params.function,
period
);
return sdk.forProject.functions.getFunctionUsage(params.function, period);
} catch (e) {
throw error(e.code, e.message);
}
@@ -24,38 +24,6 @@ export const load: PageLoad = async ({ url, route }) => {
const parsedQueries = queryParamToMap(query || '[]');
queries.set(parsedQueries);
// TODO: remove when the API is ready with data
// This allows us to mock w/ data and when search returns 0 results
let messages: {
messages: ({ data: Record<string, string> } & Models.Message)[];
total: number;
} = { messages: [], total: 0 };
const params = {
queries: [
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
]
};
if (search) {
params['search'] = search;
}
const response = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/messaging/messages'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
messages = response;
return {
offset,
limit,
@@ -63,6 +31,17 @@ export const load: PageLoad = async ({ url, route }) => {
query,
page,
view,
messages
messages: sdk.forProject.messaging.listMessages(
[
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
],
search || undefined
) as Promise<{
total: number;
messages: (Models.Message & { data: Record<string, string> })[]; // Add typing for message.data
}>
};
};
@@ -4,37 +4,16 @@ import Header from './header.svelte';
import { sdk } from '$lib/stores/sdk';
import { Dependencies } from '$lib/constants';
import { error } from '@sveltejs/kit';
import type { Models } from '@appwrite.io/console';
export const load: LayoutLoad = async ({ params, depends }) => {
depends(Dependencies.MESSAGING_MESSAGE);
try {
const response: Models.Message = await sdk.forProject.client.call(
'GET',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/messages/${params.message}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
const message = await sdk.forProject.messaging.getMessage(params.message);
const topicsById = {};
const topicsPromise = Promise.allSettled(
response.topics.map((topicId) => {
return sdk.forProject.client.call(
'GET',
new URL(`${sdk.forProject.client.config.endpoint}/messaging/topics/${topicId}`),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
})
message.topics.map((topicId) => sdk.forProject.messaging.getTopic(topicId))
).then((results) => {
results.forEach((result) => {
if (result.status === 'fulfilled') {
@@ -44,18 +23,8 @@ export const load: LayoutLoad = async ({ params, depends }) => {
});
const targetsById = {};
const targetsPromise = sdk.forProject.client
.call(
'GET',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/messages/${params.message}/targets`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
)
const targetsPromise = sdk.forProject.messaging
.listTargets(params.message)
.then((response) => {
response.targets.forEach((target) => {
targetsById[target.$id] = target;
@@ -65,11 +34,11 @@ export const load: LayoutLoad = async ({ params, depends }) => {
await Promise.allSettled([topicsPromise, targetsPromise]);
return {
message,
topicsById,
targetsById,
header: Header,
breadcrumbs: Breadcrumbs,
message: response
breadcrumbs: Breadcrumbs
};
} catch (e) {
throw error(e.code, e.message);
@@ -6,12 +6,7 @@
import { message } from './store';
import SMSPreview from './smsPreview.svelte';
import PushPreview from './pushPreview.svelte';
import {
messageParams,
operation,
providerType,
targetsById
} from '../wizard/store';
import { messageParams, operation, providerType, targetsById } from '../wizard/store';
import { topicsById } from '../store';
import { wizard } from '$lib/stores/wizard';
import Wizard from '../wizard.svelte';
@@ -13,17 +13,7 @@
const deleteMessage = async () => {
try {
await sdk.forProject.client.call(
'DELETE',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/messages/${$message.$id}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
await sdk.forProject.messaging.delete($message.$id);
show = false;
addNotification({
type: 'success',
@@ -1,4 +1,4 @@
import { Query, type Models } from '@appwrite.io/console';
import { Query } from '@appwrite.io/console';
import { sdk } from '$lib/stores/sdk';
import {
View,
@@ -25,34 +25,6 @@ export const load = async ({ depends, url, route }) => {
const parsedQueries = queryParamToMap(query || '[]');
queries.set(parsedQueries);
// TODO: get rid of demo data
let providers: { providers: Models.Provider[]; total: number } = { providers: [], total: 0 };
const params = {
queries: [
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
]
};
if (search) {
params['search'] = search;
}
const response = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/messaging/providers'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
providers = response;
return {
offset,
limit,
@@ -60,6 +32,14 @@ export const load = async ({ depends, url, route }) => {
query,
page,
view,
providers
providers: sdk.forProject.messaging.listProviders(
[
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
],
search || undefined
)
};
};
@@ -12,204 +12,107 @@
import { project } from '../../store';
import { wizard } from '$lib/stores/wizard';
import { provider, providerParams } from './wizard/store';
import { ID } from '@appwrite.io/console';
import { ID, type Models } from '@appwrite.io/console';
import { Providers } from '../provider.svelte';
async function create() {
try {
let response = { $id: '', name: '' };
let response: Models.Provider;
const providerId = $providerParams[$provider].providerId || ID.unique();
switch ($provider) {
case Providers.Twilio:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/twilio'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
accountSid: $providerParams[$provider].accountSid,
authToken: $providerParams[$provider].authToken,
from: $providerParams[$provider].from
}
response = await sdk.forProject.messaging.createTwilioProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].from,
$providerParams[$provider].accountSid,
$providerParams[$provider].authToken,
$providerParams[$provider].enabled
);
break;
case Providers.Msg91:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/msg91'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
senderId: $providerParams[$provider].senderId,
authKey: $providerParams[$provider].authKey
}
response = await sdk.forProject.messaging.createMsg91Provider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].from,
$providerParams[$provider].senderId,
$providerParams[$provider].authKey,
$providerParams[$provider].enabled
);
break;
case Providers.Telesign:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/telesign'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
username: $providerParams[$provider].username,
password: $providerParams[$provider].password
}
response = await sdk.forProject.messaging.createTelesignProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].from,
$providerParams[$provider].username,
$providerParams[$provider].password,
$providerParams[$provider].enabled
);
break;
case Providers.Textmagic:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/textmagic'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
username: $providerParams[$provider].username,
apiKey: $providerParams[$provider].apiKey
}
response = await sdk.forProject.messaging.createTextmagicProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].from,
$providerParams[$provider].username,
$providerParams[$provider].apiKey,
$providerParams[$provider].enabled
);
break;
case Providers.Vonage:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/vonage'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
apiKey: $providerParams[$provider].apiKey,
apiSecret: $providerParams[$provider].apiSecret
}
response = await sdk.forProject.messaging.createVonageProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].from,
$providerParams[$provider].apiKey,
$providerParams[$provider].apiSecret,
$providerParams[$provider].enabled
);
break;
case Providers.Mailgun:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/mailgun'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
isEuRegion: $providerParams[$provider].isEuRegion,
fromEmail: $providerParams[$provider].fromEmail,
fromName: $providerParams[$provider].fromName,
replyToEmail: $providerParams[$provider].replyToEmail,
replyToName: $providerParams[$provider].replyToName,
apiKey: $providerParams[$provider].apiKey,
domain: $providerParams[$provider].domain
}
response = await sdk.forProject.messaging.createMailgunProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].apiKey,
$providerParams[$provider].domain,
$providerParams[$provider].isEuRegion,
$providerParams[$provider].fromName,
$providerParams[$provider].fromEmail,
$providerParams[$provider].replyToName,
$providerParams[$provider].replyToEmail,
$providerParams[$provider].enabled
);
break;
case Providers.Sendgrid:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/sendgrid'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
fromEmail: $providerParams[$provider].fromEmail,
fromName: $providerParams[$provider].fromName,
replyToEmail: $providerParams[$provider].replyToEmail,
replyToName: $providerParams[$provider].replyToName,
apiKey: $providerParams[$provider].apiKey
}
response = await sdk.forProject.messaging.createSendgridProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].apiKey,
$providerParams[$provider].fromName,
$providerParams[$provider].fromEmail,
$providerParams[$provider].replyToName,
$providerParams[$provider].replyToEmail,
$providerParams[$provider].enabled
);
break;
case Providers.FCM:
response = await sdk.forProject.client.call(
'POST',
new URL(sdk.forProject.client.config.endpoint + '/messaging/providers/fcm'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
serviceAccountJSON: $providerParams[$provider].serviceAccountJSON
}
response = await sdk.forProject.messaging.createFCMProvider(
providerId,
$providerParams[$provider].name,
JSON.parse($providerParams[$provider].serviceAccountJSON),
$providerParams[$provider].enabled
);
break;
case Providers.APNS:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/apns'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
authKey: $providerParams[$provider].authKey,
authKeyId: $providerParams[$provider].authKeyId,
teamId: $providerParams[$provider].teamId,
bundleId: $providerParams[$provider].bundleId
}
response = await sdk.forProject.messaging.createAPNSProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].authKey,
$providerParams[$provider].authKeyId,
$providerParams[$provider].teamId,
$providerParams[$provider].bundleId,
$providerParams[$provider].enabled
);
break;
}
@@ -3,28 +3,13 @@ import Breadcrumbs from './breadcrumbs.svelte';
import Header from './header.svelte';
import { sdk } from '$lib/stores/sdk';
import { Dependencies } from '$lib/constants';
import { error } from '@sveltejs/kit';
export const load: LayoutLoad = async ({ params, depends }) => {
depends(Dependencies.MESSAGING_PROVIDER);
const response = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/messaging/providers/' + params.provider),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
try {
return {
header: Header,
breadcrumbs: Breadcrumbs,
provider: response
};
} catch (e) {
throw error(e.code, e.message);
}
return {
header: Header,
breadcrumbs: Breadcrumbs,
provider: sdk.forProject.messaging.getProvider(params.provider)
};
};
@@ -14,17 +14,7 @@
const deleteProvider = async () => {
try {
await sdk.forProject.client.call(
'DELETE',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/providers/' + $provider.$id
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
await sdk.forProject.messaging.deleteProvider($provider.$id);
showDelete = false;
addNotification({
type: 'success',
@@ -135,165 +135,69 @@
const providerId = $provider.$id;
switch ($provider.provider) {
case Providers.Twilio:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/twilio/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateTwilioProvider(
providerId,
undefined,
enabled
);
break;
case Providers.Msg91:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/msg91/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateMsg91Provider(
providerId,
undefined,
enabled
);
break;
case Providers.Telesign:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/telesign/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateTelesignProvider(
providerId,
undefined,
enabled
);
break;
case Providers.Textmagic:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/textmagic/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateTextmagicProvider(
providerId,
undefined,
enabled
);
break;
case Providers.Vonage:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/vonage/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateVonageProvider(
providerId,
undefined,
enabled
);
break;
case Providers.Mailgun:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/mailgun/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateMailgunProvider(
providerId,
undefined,
undefined,
undefined,
undefined,
enabled
);
break;
case Providers.Sendgrid:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/sendgrid/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateSendgridProvider(
providerId,
undefined,
enabled
);
break;
case Providers.FCM:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/fcm/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateFCMProvider(
providerId,
undefined,
enabled
);
break;
case Providers.APNS:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
sdk.forProject.client.config.endpoint +
'/messaging/providers/apns/' +
providerId
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
enabled: enabled
}
response = await sdk.forProject.messaging.updateAPNSProvider(
providerId,
undefined,
enabled
);
break;
}
@@ -34,21 +34,7 @@
async function handleDelete() {
showDelete = false;
function deleteProvider(providerId: string) {
return sdk.forProject.client.call(
'DELETE',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
}
const promises = selectedIds.map((id) => deleteProvider(id));
const promises = selectedIds.map((id) => sdk.forProject.messaging.deleteProvider(id));
try {
await Promise.all(promises);
@@ -12,204 +12,106 @@
import { provider, providerParams } from './wizard/store';
import { Providers } from '../provider.svelte';
import { Dependencies } from '$lib/constants';
import type { Models } from '@appwrite.io/console';
async function update() {
try {
let response = { $id: '', name: '' };
let response: Models.Provider;
const providerId = $providerParams[$provider].providerId;
switch ($provider) {
case Providers.Twilio:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/twilio/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
accountSid: $providerParams[$provider].accountSid,
authToken: $providerParams[$provider].authToken,
from: $providerParams[$provider].from
}
response = await sdk.forProject.messaging.updateTwilioProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].accountSid,
$providerParams[$provider].authToken,
$providerParams[$provider].from
);
break;
case Providers.Msg91:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/msg91/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
senderId: $providerParams[$provider].senderId,
authKey: $providerParams[$provider].authKey
}
response = await sdk.forProject.messaging.updateMsg91Provider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].senderId,
$providerParams[$provider].authKey,
$providerParams[$provider].from
);
break;
case Providers.Telesign:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/telesign/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
username: $providerParams[$provider].username,
password: $providerParams[$provider].password
}
response = await sdk.forProject.messaging.updateTelesignProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].username,
$providerParams[$provider].password,
$providerParams[$provider].from
);
break;
case Providers.Textmagic:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/textmagic/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
username: $providerParams[$provider].username,
apiKey: $providerParams[$provider].apiKey
}
response = await sdk.forProject.messaging.updateTextmagicProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].username,
$providerParams[$provider].apiKey,
$providerParams[$provider].from
);
break;
case Providers.Vonage:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/vonage/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
from: $providerParams[$provider].from,
apiKey: $providerParams[$provider].apiKey,
apiSecret: $providerParams[$provider].apiSecret
}
response = await sdk.forProject.messaging.updateVonageProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].apiKey,
$providerParams[$provider].apiSecret,
$providerParams[$provider].from
);
break;
case Providers.Mailgun:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/mailgun/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
isEuRegion: $providerParams[$provider].isEuRegion,
fromEmail: $providerParams[$provider].fromEmail,
fromName: $providerParams[$provider].fromName,
replyToEmail: $providerParams[$provider].replyToEmail,
replyToName: $providerParams[$provider].replyToName,
apiKey: $providerParams[$provider].apiKey,
domain: $providerParams[$provider].domain
}
response = await sdk.forProject.messaging.updateMailgunProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].apiKey,
$providerParams[$provider].domain,
$providerParams[$provider].isEuRegion,
$providerParams[$provider].enabled,
$providerParams[$provider].fromName,
$providerParams[$provider].fromEmail,
$providerParams[$provider].replyToName,
$providerParams[$provider].replyToEmail
);
break;
case Providers.Sendgrid:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/sendgrid/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
fromEmail: $providerParams[$provider].fromEmail,
fromName: $providerParams[$provider].fromName,
replyToEmail: $providerParams[$provider].replyToEmail,
replyToName: $providerParams[$provider].replyToName,
apiKey: $providerParams[$provider].apiKey
}
response = await sdk.forProject.messaging.updateSendgridProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].apiKey,
$providerParams[$provider].fromName,
$providerParams[$provider].fromEmail,
$providerParams[$provider].replyToName,
$providerParams[$provider].replyToEmail
);
break;
case Providers.FCM:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/fcm')/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
serviceAccountJSON: $providerParams[$provider].serviceAccountJSON
}
response = await sdk.forProject.messaging.updateFCMProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
JSON.parse($providerParams[$provider].serviceAccountJSON)
);
break;
case Providers.APNS:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/providers/apns/${providerId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
providerId: providerId,
name: $providerParams[$provider].name,
enabled: $providerParams[$provider].enabled,
authKey: $providerParams[$provider].authKey,
authKeyId: $providerParams[$provider].authKeyId,
teamId: $providerParams[$provider].teamId,
bundleId: $providerParams[$provider].bundleId
}
response = await sdk.forProject.messaging.updateAPNSProvider(
providerId,
$providerParams[$provider].name,
$providerParams[$provider].enabled,
$providerParams[$provider].authKey,
$providerParams[$provider].authKeyId,
$providerParams[$provider].teamId,
$providerParams[$provider].bundleId
);
break;
}
@@ -1,4 +1,4 @@
import { Query, type Models } from '@appwrite.io/console';
import { Query } from '@appwrite.io/console';
import { sdk } from '$lib/stores/sdk';
import { getLimit, getPage, getQuery, getSearch, pageToOffset } from '$lib/helpers/load';
import { Dependencies, PAGE_LIMIT } from '$lib/constants';
@@ -15,38 +15,20 @@ export const load = async ({ depends, url, route }) => {
const parsedQueries = queryParamToMap(query || '[]');
queries.set(parsedQueries);
const payload = {
queries: [
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
]
};
if (search) {
payload['search'] = search;
}
// TODO: remove when the API is ready with data
// This allows us to mock w/ data and when search returns 0 results
const topics: { topics: Models.Topic[]; total: number } = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/messaging/topics'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
payload
);
return {
offset,
limit,
search,
query,
page,
topics
topics: sdk.forProject.messaging.listTopics(
[
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
],
search || undefined
)
};
};
@@ -17,19 +17,7 @@
const create = async () => {
try {
const topic = await sdk.forProject.client.call(
'POST',
new URL(sdk.forProject.client.config.endpoint + '/messaging/topics'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
name,
topicId: id ?? ID.unique()
}
);
const topic = await sdk.forProject.messaging.createTopic(id ?? ID.unique(), name);
name = '';
showCreate = false;
showCustomId = false;
@@ -32,19 +32,7 @@
async function handleDelete() {
showDelete = false;
function deleteTopic(topicId: string) {
return sdk.forProject.client.call(
'DELETE',
new URL(`${sdk.forProject.client.config.endpoint}/messaging/topics/${topicId}`),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
}
const promises = selectedIds.map((id) => deleteTopic(id));
const promises = selectedIds.map((id) => sdk.forProject.messaging.deleteTopic(id));
try {
await Promise.all(promises);
@@ -3,28 +3,13 @@ import Breadcrumbs from './breadcrumbs.svelte';
import Header from './header.svelte';
import { sdk } from '$lib/stores/sdk';
import { Dependencies } from '$lib/constants';
import { error } from '@sveltejs/kit';
export const load: LayoutLoad = async ({ params, depends }) => {
depends(Dependencies.MESSAGING_TOPIC);
const response = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/messaging/topics/' + params.topic),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
try {
return {
header: Header,
breadcrumbs: Breadcrumbs,
topic: response
};
} catch (e) {
throw error(e.code, e.message);
}
return {
header: Header,
breadcrumbs: Breadcrumbs,
topic: sdk.forProject.messaging.getTopic(params.topic)
};
};
@@ -1,4 +1,4 @@
import { Query, type Models } from '@appwrite.io/console';
import { Query } from '@appwrite.io/console';
import { sdk } from '$lib/stores/sdk';
import { getLimit, getPage, pageToOffset } from '$lib/helpers/load';
import { PAGE_LIMIT } from '$lib/constants';
@@ -9,26 +9,12 @@ export const load: PageLoad = async ({ params, url, route }) => {
const limit = getLimit(url, route, PAGE_LIMIT);
const offset = pageToOffset(page, limit);
const payload = {
queries: [Query.limit(limit), Query.offset(offset)]
};
// TODO: remove when the API is ready with data
// This allows us to mock w/ data and when search returns 0 results
const logs: Models.LogList = await sdk.forProject.client.call(
'GET',
new URL(`${sdk.forProject.client.config.endpoint}/messaging/topics/${params.topic}/logs`),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
payload
);
return {
offset,
limit,
logs
logs: sdk.forProject.messaging.listTopicLogs(params.topic, [
Query.limit(limit),
Query.offset(offset)
])
};
};
@@ -13,15 +13,8 @@
export let showDelete = false;
const deleteTopic = async () => {
try {
await sdk.forProject.client.call(
'DELETE',
new URL(sdk.forProject.client.config.endpoint + '/messaging/topics/' + $topic.$id),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
await sdk.forProject.messaging.deleteTopic($topic.$id);
showDelete = false;
addNotification({
type: 'success',
@@ -22,14 +22,13 @@
import { targetsById } from '../../../store';
import UserTargetsModal from '../../../userTargetsModal.svelte';
import { onMount } from 'svelte';
import type { Subscriber } from './+page';
import { Filters, hasPageQueries } from '$lib/components/filters';
import { columns } from './store';
import { View } from '$lib/helpers/load';
export let data: PageData;
let showAdd = false;
let subscribersByTargetId: Record<string, Subscriber> = {};
let subscribersByTargetId: Record<string, Models.Subscriber> = {};
onMount(() => {
$targetsById = {};
@@ -43,29 +42,13 @@
async function addTargets(event: CustomEvent<Record<string, Models.Target>>) {
showAdd = false;
$targetsById = event.detail;
async function addSubscriber(targetId: string) {
await sdk.forProject.client.call(
'POST',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/topics/${$page.params.topic}/subscribers`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
subscriberId: ID.unique(),
topicId: $page.params.topic,
targetId: targetId
}
);
}
const targetIds = Object.keys($targetsById).filter(
(targetId) => !(targetId in subscribersByTargetId)
);
const promises = targetIds.map(addSubscriber);
const promises = targetIds.map((targetId) =>
sdk.forProject.messaging.createSubscriber($page.params.topic, ID.unique(), targetId)
);
try {
await Promise.all(promises);
@@ -1,22 +1,13 @@
import { Query, type Models } from '@appwrite.io/console';
import { Query } from '@appwrite.io/console';
import { sdk } from '$lib/stores/sdk';
import { getLimit, getPage, getQuery, getSearch, pageToOffset } from '$lib/helpers/load';
import { Dependencies, PAGE_LIMIT } from '$lib/constants';
import type { PageLoad } from './$types';
import { queryParamToMap, queries } from '$lib/components/filters';
export type Subscriber = {
$id: string;
$createdAt: string;
$updatedAt: string;
targetId: string;
target: Models.Target;
userName: string;
topicId: string;
};
export const load: PageLoad = async ({ params, url, route, depends, parent }) => {
export const load: PageLoad = async ({ params, url, route, depends }) => {
depends(Dependencies.MESSAGING_TOPIC_SUBSCRIBERS);
const page = getPage(url);
const limit = getLimit(url, route, PAGE_LIMIT);
const offset = pageToOffset(page, limit);
@@ -26,43 +17,20 @@ export const load: PageLoad = async ({ params, url, route, depends, parent }) =>
const parsedQueries = queryParamToMap(query || '[]');
queries.set(parsedQueries);
const payload = {
queries: [
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
]
};
if (search) {
payload['search'] = search;
}
const { topic } = await parent();
// TODO: remove when the API is ready with data
// This allows us to mock w/ data and when search returns 0 results
const subscribers: { subscribers: Subscriber[]; total: number } =
await sdk.forProject.client.call(
'GET',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/topics/${params.topic}/subscribers`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
payload
);
return {
offset,
limit,
search,
query,
topic,
subscribers
subscribers: sdk.forProject.messaging.listSubscribers(
params.topic,
[
Query.limit(limit),
Query.offset(offset),
Query.orderDesc(''),
...parsedQueries.values()
],
search || undefined
)
};
};
@@ -25,14 +25,13 @@
import { sdk } from '$lib/stores/sdk';
import { page } from '$app/stores';
import { targetsById } from '../../../store';
import type { Subscriber } from './+page';
import { MessagingProviderType } from '@appwrite.io/console';
import { MessagingProviderType, type Models } from '@appwrite.io/console';
export let data: PageData;
let subscribers: Record<string, Subscriber> = {};
let subscribers: Record<string, Models.Subscriber> = {};
let selectedIds: string[] = [];
let selected: Record<string, Subscriber> = {};
let selected: Record<string, Models.Subscriber> = {};
let showDelete = false;
let deleting = false;
@@ -40,17 +39,7 @@
showDelete = false;
async function deleteSubscriber(subscriberId: string) {
await sdk.forProject.client.call(
'DELETE',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/topics/${$page.params.topic}/subscribers/${subscriberId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
}
);
await sdk.forProject.messaging.deleteSubscriber($page.params.topic, subscriberId);
const { target } = subscribers[subscriberId];
const { [target.$id]: _, ...rest } = $targetsById;
$targetsById = rest;
@@ -15,19 +15,7 @@
});
async function updateName() {
try {
// await sdk.forProject.users.updateName($provider.$id, providerName);
await sdk.forProject.client.call(
'PATCH',
new URL(`${sdk.forProject.client.config.endpoint}/messaging/topics/${$topic.$id}`),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
name: name
}
);
await sdk.forProject.messaging.updateTopic($topic.$id, name);
await invalidate(Dependencies.MESSAGING_TOPIC);
addNotification({
message: 'Name has been updated',
@@ -32,25 +32,7 @@
if (!show) return;
const queries = [Query.limit(5), Query.offset(offset)];
const params = {
queries
};
if (search) {
params['search'] = search;
}
// TODO: replace with sdk.forProject.users.list once User type has targets
const response = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/messaging/topics'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
const response = await sdk.forProject.messaging.listTopics(queries, search || undefined);
totalResults = response.total;
topicResultsById = {};
@@ -46,25 +46,7 @@
queries.push(Query.notEqual('phone', ''));
}
const params = {
queries
};
if (search) {
params['search'] = search;
}
// TODO: replace with sdk.forProject.users.list once User type has targets
const response = await sdk.forProject.client.call(
'GET',
new URL(sdk.forProject.client.config.endpoint + '/users'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
const response = await sdk.forProject.users.list(queries, search || undefined);
totalResults = response.total;
userResultsById = {};
@@ -11,71 +11,40 @@
import { base } from '$app/paths';
import { project } from '../store';
import { wizard } from '$lib/stores/wizard';
import {
providerType,
messageParams,
type PushMessageParams,
type SMSMessageParams,
type EmailMessageParams,
operation
} from './wizard/store';
import { ID, MessageType, MessagingProviderType } from '@appwrite.io/console';
import { providerType, messageParams, operation } from './wizard/store';
import { ID, MessageType, MessagingProviderType, type Models } from '@appwrite.io/console';
import { Dependencies } from '$lib/constants';
async function create() {
try {
let response = { $id: '' };
let response: Models.Message;
const messageId = $messageParams[$providerType].messageId || ID.unique();
const params = $messageParams[$providerType];
console.log(params);
const payload:
| Partial<SMSMessageParams>
| Partial<EmailMessageParams>
| Partial<PushMessageParams> = {
topics: params.topics || [],
users: params.users || [],
targets: params.targets || []
};
Object.keys(params).forEach((key) => {
if (['messageId', 'topics', 'users', 'targets'].includes(key)) return;
if (typeof params[key] === 'undefined') return;
payload[key] = params[key];
});
switch ($providerType) {
case MessagingProviderType.Email:
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/messages/email'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
...payload,
messageId
}
response = await sdk.forProject.messaging.createEmail(
messageId,
$messageParams[$providerType].subject,
$messageParams[$providerType].content,
$messageParams[$providerType].topics,
$messageParams[$providerType].users,
$messageParams[$providerType].targets,
undefined,
undefined,
$messageParams[$providerType].status,
$messageParams[$providerType].html,
$messageParams[$providerType].scheduledAt
);
break;
case MessagingProviderType.Sms:
response = await sdk.forProject.client.call(
'POST',
new URL(sdk.forProject.client.config.endpoint + '/messaging/messages/sms'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
...payload,
messageId
}
response = await sdk.forProject.messaging.createSMS(
messageId,
$messageParams[$providerType].content,
$messageParams[$providerType].topics,
$messageParams[$providerType].users,
$messageParams[$providerType].targets,
$messageParams[$providerType].status,
$messageParams[$providerType].scheduledAt
);
break;
case MessagingProviderType.Push:
@@ -89,35 +58,37 @@
});
}
response = await sdk.forProject.client.call(
'POST',
new URL(
sdk.forProject.client.config.endpoint + '/messaging/messages/push'
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
...payload,
data: customData,
messageId
}
response = await sdk.forProject.messaging.createPush(
messageId,
$messageParams[$providerType].title,
$messageParams[$providerType].body,
$messageParams[$providerType].topics,
$messageParams[$providerType].users,
$messageParams[$providerType].targets,
customData,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
$messageParams[$providerType].status,
$messageParams[$providerType].scheduledAt
);
}
break;
}
wizard.hide();
let message = '';
switch (params.status) {
switch (response.status) {
case MessageType.Draft:
message = 'The message has been saved as draft.';
break;
case MessageType.Processing:
message = 'The message is queued for processing.';
break;
case MessageType.Scheduled:
case 'scheduled':
// TODO: fix message status
message = 'The message has been scheduled.';
break;
}
@@ -127,7 +98,7 @@
});
trackEvent(Submit.MessagingMessageCreate, {
providerType: $providerType,
status: params.status
status: response.status
});
await goto(`${base}/console/project-${$project.$id}/messaging/message-${response.$id}`);
} catch (error) {
@@ -141,62 +112,39 @@
async function update() {
try {
let response = { $id: '' };
let response: Models.Message;
const messageId = $messageParams[$providerType].messageId;
const params = $messageParams[$providerType];
console.log(params);
const payload:
| Partial<SMSMessageParams>
| Partial<EmailMessageParams>
| Partial<PushMessageParams> = {
topics: params.topics || [],
users: params.users || [],
targets: params.targets || []
};
Object.keys(params).forEach((key) => {
if (['messageId', 'topics', 'users', 'targets'].includes(key)) return;
if (typeof params[key] === 'undefined') return;
payload[key] = params[key];
});
console.log(payload);
switch ($providerType) {
case MessagingProviderType.Email:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/messages/email/${messageId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
...payload,
messageId
}
response = await sdk.forProject.messaging.updateEmail(
messageId,
$messageParams[$providerType].topics,
$messageParams[$providerType].users,
$messageParams[$providerType].targets,
$messageParams[$providerType].subject,
$messageParams[$providerType].content,
$messageParams[$providerType].status,
$messageParams[$providerType].html,
undefined,
undefined,
$messageParams[$providerType].scheduledAt
);
break;
case MessagingProviderType.Sms:
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/messages/sms/${messageId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
...payload,
messageId
}
response = await sdk.forProject.messaging.updateSMS(
messageId,
$messageParams[$providerType].topics,
$messageParams[$providerType].users,
$messageParams[$providerType].targets,
$messageParams[$providerType].content,
$messageParams[$providerType].status,
$messageParams[$providerType].scheduledAt
);
break;
case MessagingProviderType.Push:
@@ -210,35 +158,37 @@
});
}
response = await sdk.forProject.client.call(
'PATCH',
new URL(
`${sdk.forProject.client.config.endpoint}/messaging/messages/push/${messageId}`
),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
{
...payload,
data: customData,
messageId
}
response = await sdk.forProject.messaging.updatePush(
messageId,
$messageParams[$providerType].topics,
$messageParams[$providerType].users,
$messageParams[$providerType].targets,
$messageParams[$providerType].title,
$messageParams[$providerType].body,
customData,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
$messageParams[$providerType].status,
$messageParams[$providerType].scheduledAt
);
}
break;
}
wizard.hide();
let message = '';
switch (params.status) {
switch (response.status) {
case MessageType.Draft:
message = 'The message has been saved as draft.';
break;
case MessageType.Processing:
message = 'The message is queued for processing.';
break;
case MessageType.Scheduled:
case 'scheduled':
// TODO: fix message status
message = 'The message has been scheduled.';
break;
}
@@ -1,27 +1,5 @@
<script context="module" lang="ts">
export async function createEmailMessage(params: EmailMessageParams) {
const response = await sdk.forProject.client.call(
'POST',
new URL(sdk.forProject.client.config.endpoint + '/messaging/messages/email'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
return response.json();
}
</script>
<script lang="ts">
import {
messageParams,
providerType,
type EmailMessageParams,
operation
} from './store';
import { messageParams, providerType, operation } from './store';
import {
Button,
FormList,
@@ -47,17 +25,20 @@
const email = selected === 'self' ? $user.email : otherEmail;
console.log(email);
createEmailMessage({
topics: $messageParams[MessagingProviderType.Email]?.topics || [],
targets: $messageParams[MessagingProviderType.Email]?.targets || [],
status: MessageType.Processing,
messageId: ID.unique(),
// TODO: properly handle the test email address
users: ['steven'],
subject: $messageParams[MessagingProviderType.Email]?.subject || '',
content: $messageParams[MessagingProviderType.Email]?.content || '',
html: $messageParams[MessagingProviderType.Email]?.html || false
});
// TODO: replace with test method
sdk.forProject.messaging.createEmail(
ID.unique(),
$messageParams[MessagingProviderType.Email]?.subject || undefined,
$messageParams[MessagingProviderType.Email]?.content || undefined,
$messageParams[MessagingProviderType.Email]?.topics || [],
$messageParams[MessagingProviderType.Email]?.users || [],
$messageParams[MessagingProviderType.Email]?.targets || [],
undefined,
undefined,
MessageType.Processing,
$messageParams[MessagingProviderType.Email]?.html || false,
undefined
);
}
$: otherEmail = selected === 'self' ? '' : otherEmail;
@@ -1,19 +1,4 @@
<script context="module" lang="ts">
export async function createPushMessage(params: PushMessageParams) {
const response = await sdk.forProject.client.call(
'POST',
new URL(sdk.forProject.client.config.endpoint + '/messaging/messages/push'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
return response.json();
}
export function validateData(data: string[][]) {
if (!data || data.length === 0) return;
@@ -39,12 +24,7 @@
</script>
<script lang="ts">
import {
messageParams,
providerType,
type PushMessageParams,
operation
} from './store';
import { messageParams, providerType, operation } from './store';
import {
Button,
FormItem,
@@ -81,17 +61,24 @@
const email = selected === 'self' ? $user.email : otherEmail;
console.log(email);
createPushMessage({
topics: $messageParams[MessagingProviderType.Push]?.topics || [],
targets: $messageParams[MessagingProviderType.Push]?.targets || [],
status: MessageType.Processing,
messageId: ID.unique(),
// TODO: properly handle the test email address
users: ['steven'],
body: $messageParams[MessagingProviderType.Push]?.body || '',
title: $messageParams[MessagingProviderType.Push]?.title || '',
data: $messageParams[MessagingProviderType.Push]?.data || []
});
// TODO: replace with test method
sdk.forProject.messaging.createPush(
ID.unique(),
$messageParams[MessagingProviderType.Push]?.title || undefined,
$messageParams[MessagingProviderType.Push]?.body || undefined,
$messageParams[MessagingProviderType.Push]?.topics || [],
$messageParams[MessagingProviderType.Push]?.users || [],
$messageParams[MessagingProviderType.Push]?.targets || [],
$messageParams[MessagingProviderType.Push]?.data || undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
undefined,
MessageType.Processing,
undefined
);
}
$: otherEmail = selected === 'self' ? '' : otherEmail;
@@ -1,27 +1,5 @@
<script context="module" lang="ts">
export async function createSMSMessage(params: EmailMessageParams) {
const response = await sdk.forProject.client.call(
'POST',
new URL(sdk.forProject.client.config.endpoint + '/messaging/messages/sms'),
{
'X-Appwrite-Project': sdk.forProject.client.config.project,
'content-type': 'application/json',
'X-Appwrite-Mode': 'admin'
},
params
);
return response.json();
}
</script>
<script lang="ts">
import {
messageParams,
providerType,
type EmailMessageParams,
operation
} from './store';
import { messageParams, providerType, operation } from './store';
import { Button, FormList, InputEmail, InputRadio, InputTextarea } from '$lib/elements/forms';
import { Pill } from '$lib/elements';
import { CustomId, Modal } from '$lib/components';
@@ -39,17 +17,16 @@
async function sendTestSMS() {
// const email = selected === 'self' ? $user.email : otherEmail;
createSMSMessage({
topics: $messageParams[MessagingProviderType.Email]?.topics || [],
targets: $messageParams[MessagingProviderType.Email]?.targets || [],
status: MessageType.Processing,
messageId: ID.unique(),
// TODO: properly handle the test email address
users: ['steven'],
subject: $messageParams[MessagingProviderType.Email]?.subject || '',
content: $messageParams[MessagingProviderType.Email]?.content || '',
html: $messageParams[MessagingProviderType.Email]?.html || false
});
// TODO: replace with test method
sdk.forProject.messaging.createSMS(
ID.unique(),
$messageParams[MessagingProviderType.Sms]?.content || undefined,
$messageParams[MessagingProviderType.Sms]?.topics || [],
$messageParams[MessagingProviderType.Sms]?.users || [],
$messageParams[MessagingProviderType.Sms]?.targets || [],
MessageType.Processing,
undefined
);
}
$: otherEmail = selected === 'self' ? '' : otherEmail;