196 lines
5.5 KiB
TypeScript
196 lines
5.5 KiB
TypeScript
|
|
// This file handles realtime notifications in a client-side environment
|
|
// In a production app, this would be a server-side endpoint
|
|
|
|
console.log("API Realtime endpoint loaded");
|
|
|
|
// Simple implementation that simulates sending notifications
|
|
export default async function handler(req) {
|
|
try {
|
|
console.log("Realtime API call received:", JSON.stringify({
|
|
...req,
|
|
botToken: req?.botToken ? "[REDACTED]" : undefined
|
|
}, null, 2));
|
|
|
|
// Make sure we're accessing the body correctly
|
|
const body = req || {};
|
|
const { type } = body;
|
|
|
|
if (!type) {
|
|
console.error("Missing notification type parameter");
|
|
return {
|
|
status: 400,
|
|
json: {
|
|
ok: false,
|
|
error_code: 400,
|
|
description: "Missing notification type"
|
|
}
|
|
};
|
|
}
|
|
|
|
// Handle Telegram notifications
|
|
if (type === "telegram") {
|
|
const { chatId, botToken, message } = body;
|
|
|
|
console.log("Telegram notification request details:");
|
|
console.log("- Chat ID:", chatId);
|
|
console.log("- Bot token available:", !!botToken);
|
|
console.log("- Message length:", message?.length || 0);
|
|
|
|
if (!chatId || !botToken || !message) {
|
|
console.error("Missing required parameters for Telegram notification", {
|
|
hasChatId: !!chatId,
|
|
hasBotToken: !!botToken,
|
|
hasMessage: !!message
|
|
});
|
|
|
|
return {
|
|
status: 400,
|
|
json: {
|
|
ok: false,
|
|
error_code: 400,
|
|
description: "Missing required Telegram parameters"
|
|
}
|
|
};
|
|
}
|
|
|
|
try {
|
|
console.log("Attempting to call real Telegram API");
|
|
const telegramApiUrl = `https://api.telegram.org/bot${botToken}/sendMessage`;
|
|
|
|
console.log("Calling Telegram API:", telegramApiUrl.replace(botToken, "[REDACTED]"));
|
|
|
|
const response = await fetch(telegramApiUrl, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({
|
|
chat_id: chatId,
|
|
text: message,
|
|
parse_mode: 'HTML'
|
|
}),
|
|
});
|
|
|
|
if (!response.ok) {
|
|
const errorText = await response.text();
|
|
console.error(`Telegram API error (${response.status}):`, errorText);
|
|
|
|
try {
|
|
// Try to parse error as JSON if possible
|
|
const errorJson = JSON.parse(errorText);
|
|
return {
|
|
status: response.status,
|
|
json: errorJson
|
|
};
|
|
} catch (e) {
|
|
// If parsing fails, return the raw error
|
|
return {
|
|
status: response.status,
|
|
json: {
|
|
ok: false,
|
|
error_code: response.status,
|
|
description: `Telegram API error: ${errorText}`
|
|
}
|
|
};
|
|
}
|
|
}
|
|
|
|
const result = await response.json();
|
|
console.log("Telegram API response:", JSON.stringify(result, null, 2));
|
|
|
|
if (!result.ok) {
|
|
console.error("Telegram API error:", result);
|
|
return {
|
|
status: response.status,
|
|
json: result
|
|
};
|
|
}
|
|
|
|
console.log("Successfully sent message to Telegram!");
|
|
return {
|
|
status: 200,
|
|
json: {
|
|
ok: true,
|
|
result: result.result,
|
|
description: "Message sent successfully to Telegram"
|
|
}
|
|
};
|
|
} catch (error) {
|
|
console.error("Error calling Telegram API:", error);
|
|
|
|
// Return detailed error information
|
|
return {
|
|
status: 500,
|
|
json: {
|
|
ok: false,
|
|
error_code: 500,
|
|
description: `Error sending Telegram message: ${error instanceof Error ? error.message : "Unknown error"}`
|
|
}
|
|
};
|
|
}
|
|
}
|
|
// Handle Signal notifications
|
|
else if (type === "signal") {
|
|
const { signalNumber, message } = body;
|
|
|
|
if (!signalNumber || !message) {
|
|
console.error("Missing required parameters for Signal notification", {
|
|
hasSignalNumber: !!signalNumber,
|
|
hasMessage: !!message
|
|
});
|
|
|
|
return {
|
|
status: 400,
|
|
json: {
|
|
ok: false,
|
|
error_code: 400,
|
|
description: "Missing required Signal parameters"
|
|
}
|
|
};
|
|
}
|
|
|
|
// Simulate sending Signal message
|
|
console.log(`[SIMULATION] Sending Signal message to ${signalNumber}: ${message}`);
|
|
|
|
// Simulate network delay
|
|
await new Promise(resolve => setTimeout(resolve, 500));
|
|
|
|
// Return success response
|
|
return {
|
|
status: 200,
|
|
json: {
|
|
ok: true,
|
|
result: {
|
|
id: Math.floor(Math.random() * 10000),
|
|
timestamp: Date.now(),
|
|
delivered: true
|
|
},
|
|
description: "Signal message sent successfully (simulated)"
|
|
}
|
|
};
|
|
} else {
|
|
// Return error for unsupported notification type
|
|
console.error("Unsupported notification type:", type);
|
|
return {
|
|
status: 400,
|
|
json: {
|
|
ok: false,
|
|
error_code: 400,
|
|
description: `Unsupported notification type: ${type}`
|
|
}
|
|
};
|
|
}
|
|
} catch (error) {
|
|
console.error("Error in realtime handler:", error);
|
|
return {
|
|
status: 500,
|
|
json: {
|
|
ok: false,
|
|
error_code: 500,
|
|
description: error.message || "Internal server error"
|
|
}
|
|
};
|
|
}
|
|
}
|