Я работаю над пакетом уведомлений и испытываю некоторые затруднения с тем, как обновить функцию, а не просто при ее импорте. Например:
В качестве функции уведомления у меня есть следующее:
const sendNotification = async (options: SendNotificationTypes) => {
const handleChannel = {
slack: async (options: SlackNotificationTypes) => {
await sendSlack(options);
},
email: async (options: EmailNotificationTypes) => {
await sendEmail(options);
},
sms: async (options: SMSNotificationTypes) => {
await sendSms(options);
}
};
options.channels.forEach(channel => {
switch (channel) {
case CHANNEL_SLACK:
handleChannel.slack(options.slack);
break;
case CHANNEL_EMAIL:
handleChannel.email(options.email);
break;
case CHANNEL_SMS:
handleChannel.sms(options.sms);
break;
}
});
};
Мой уведомитель слабины выглядит так:
const slack = new WebClient(tokenGoesHere)
const sendSlack = async (options: SlackNotificationTypes) => {
try {
await slack.chat.postMessage({
channel: options.channel,
...(options.message && { text: options.message }),
...(options.blocks && { blocks: options.blocks }),
...(options.emoji && { icon_emoji: options.emoji }),
...(options.attachments && {
attachments: options.attachments
})
});
} catch (error) {
throw new Error(`Slack notification failed to send: ${error}`);
}
};
Так что это работает нормально, но код не работает в точках, если мои переменные окружения не на месте (так как я получаю токен слабости из process.env
).
Вместо этого я хотел бы иметь возможность создавать функцию, когда она мне нужна, и передать в этот момент слабый жетон. В идеале, если есть способ не нуждаться в новом экземпляре каждый раз, когда я отправляю уведомление, я бы хотел это сделать.
Я довольно застрял в этом и думаю, что мне нужно, возможно, выполнить рефакторинг для класса? Любой совет приветствуется!