(webhookUrl)
| 1097 | * to the APP_URL-derived default. |
| 1098 | */ |
| 1099 | export async function registerTelegramWebhook(webhookUrl) { |
| 1100 | const user = await requireAdmin(); |
| 1101 | try { |
| 1102 | const { getConfigSecret, setConfigSecret, getConfigValue, setConfigValue, deleteConfigValue } = |
| 1103 | await import('../db/config.js'); |
| 1104 | const { getConfig } = await import('../config.js'); |
| 1105 | const { setTelegramWebhook, generateWebhookSecret } = await import('../tools/telegram.js'); |
| 1106 | |
| 1107 | const botToken = getConfigSecret('TELEGRAM_BOT_TOKEN'); |
| 1108 | if (!botToken) return { error: 'Bot token must be set first' }; |
| 1109 | |
| 1110 | const appUrl = getConfig('APP_URL'); |
| 1111 | const defaultUrl = appUrl ? `${appUrl.replace(/\/$/, '')}/api/telegram/webhook` : ''; |
| 1112 | |
| 1113 | // Resolve the URL to register. |
| 1114 | let urlToRegister; |
| 1115 | if (typeof webhookUrl === 'string') { |
| 1116 | const trimmed = webhookUrl.trim(); |
| 1117 | if (!trimmed || trimmed === defaultUrl) { |
| 1118 | deleteConfigValue('TELEGRAM_WEBHOOK_URL'); |
| 1119 | urlToRegister = trimmed || defaultUrl; |
| 1120 | } else { |
| 1121 | setConfigValue('TELEGRAM_WEBHOOK_URL', trimmed, user.id); |
| 1122 | urlToRegister = trimmed; |
| 1123 | } |
| 1124 | } else { |
| 1125 | urlToRegister = getConfigValue('TELEGRAM_WEBHOOK_URL') || defaultUrl; |
| 1126 | } |
| 1127 | |
| 1128 | if (!urlToRegister) { |
| 1129 | return { error: 'Webhook URL is required (set APP_URL or supply a URL)' }; |
| 1130 | } |
| 1131 | try { |
| 1132 | const parsed = new URL(urlToRegister); |
| 1133 | if (parsed.protocol !== 'https:') { |
| 1134 | return { error: 'Webhook URL must use https://' }; |
| 1135 | } |
| 1136 | } catch { |
| 1137 | return { error: 'Webhook URL is not a valid URL' }; |
| 1138 | } |
| 1139 | |
| 1140 | const secret = generateWebhookSecret(); |
| 1141 | setConfigSecret('TELEGRAM_WEBHOOK_SECRET', secret, user.id); |
| 1142 | |
| 1143 | const result = await setTelegramWebhook(botToken, urlToRegister, secret); |
| 1144 | if (!result.ok) { |
| 1145 | return { error: result.description || 'Failed to register webhook' }; |
| 1146 | } |
| 1147 | return { success: true, webhookUrl: urlToRegister }; |
| 1148 | } catch (err) { |
| 1149 | console.error('Failed to register Telegram webhook:', err); |
| 1150 | return { error: err.message }; |
| 1151 | } |
| 1152 | } |
| 1153 | |
| 1154 | // ───────────────────────────────────────────────────────────────────────────── |
| 1155 | // Settings — Chat sub-tab |
no test coverage detected