MCPcopy Index your code
hub / github.com/Linen-dev/linen.dev / createChannels

Function createChannels

apps/web/services/slack/sync/syncChannels.ts:7–69  ·  view source on GitHub ↗
({
  slackTeamId,
  token,
  accountId,
  getSlackChannels,
  joinChannel,
  hideChannels,
  shouldJoinChannel,
  logger,
}: {
  slackTeamId: string;
  token: string;
  accountId: string;
  getSlackChannels: GetSlackChannelsFnType;
  joinChannel: JoinChannelFnType;
  hideChannels: boolean;
  shouldJoinChannel: boolean;
  logger: Logger;
})

Source from the content-addressed store, hash-verified

5import { ChannelType } from '@linen/database';
6
7export async function createChannels({
8 slackTeamId,
9 token,
10 accountId,
11 getSlackChannels,
12 joinChannel,
13 hideChannels,
14 shouldJoinChannel,
15 logger,
16}: {
17 slackTeamId: string;
18 token: string;
19 accountId: string;
20 getSlackChannels: GetSlackChannelsFnType;
21 joinChannel: JoinChannelFnType;
22 hideChannels: boolean;
23 shouldJoinChannel: boolean;
24 logger: Logger;
25}) {
26 try {
27 const channelsResponse = await getSlackChannels(slackTeamId, token);
28 if (!channelsResponse.body?.channels) {
29 return [];
30 }
31 const channels = await Promise.all(
32 channelsResponse.body.channels.map((channel) =>
33 ChannelsService.findOrCreateChannel({
34 externalChannelId: channel.id,
35 channelName: channel.name,
36 accountId,
37 hidden: hideChannels,
38 ...(channel.is_private ? { type: ChannelType.PRIVATE } : {}),
39 })
40 )
41 );
42 logger.log({ 'Joining channels': 'started' });
43 let sleeping = sleep(60 * 1000);
44 let counter = 0;
45 const filteredChannels = channels.filter(
46 (c) => c.externalPageCursor !== 'completed'
47 );
48
49 for (let channel of filteredChannels) {
50 counter++;
51 if (shouldJoinChannel && channel.externalChannelId) {
52 await joinChannel(channel.externalChannelId, token);
53 }
54 // Slack's api can handle bursts
55 // so only wait for requests if there are more than 50 messages
56 if (counter >= 50) {
57 await sleeping;
58 counter = 0;
59 sleeping = sleep(60 * 1000);
60 }
61 }
62 logger.log({ 'Joining channels': 'finished' });
63
64 return channels;

Callers 1

syncChannelsFunction · 0.85

Calls 7

sleepFunction · 0.90
getSlackChannelsFunction · 0.85
joinChannelFunction · 0.85
mapMethod · 0.80
logMethod · 0.65
errorMethod · 0.65
findOrCreateChannelMethod · 0.45

Tested by

no test coverage detected