import { createSync } from 'nango';
import { z } from 'zod';
const SlackMessage = z.object({
id: z.string(),
text: z.string(),
channel_id: z.string(),
timestamp: z.string()
});
const SlackMessageReply = z.object({
id: z.string(),
parent_message_id: z.string(),
text: z.string(),
timestamp: z.string()
});
const SlackMessageReaction = z.object({
id: z.string(),
message_id: z.string(),
emoji: z.string(),
count: z.number()
});
const sync = createSync({
description: 'Syncs messages, replies, and reactions for all channels',
version: '1.0.0',
frequency: 'every hour',
autoStart: true,
syncType: 'incremental',
endpoints: [
{
method: 'GET',
path: '/messages',
group: 'Messages'
},
{
method: 'GET',
path: '/messages-reply',
group: 'Messages'
},
{
method: 'GET',
path: '/messages-reaction',
group: 'Messages'
}
],
models: {
SlackMessage: SlackMessage,
SlackMessageReply: SlackMessageReply,
SlackMessageReaction: SlackMessageReaction
},
metadata: z.object({}),
exec: async (nango) => {
// Fetch messages
for (const message of await fetchMessages()) {
await nango.batchSave([message], 'SlackMessage');
// Fetch and save replies for each message
for (const reply of await fetchReplies(message)) {
await nango.batchSave([reply], 'SlackMessageReply');
}
// Fetch and save reactions for each message
for (const reaction of await fetchReactions(message)) {
await nango.batchSave([reaction], 'SlackMessageReaction');
}
}
}
});