export interface UnifiedPushMessage { endpoint: string; title?: string; body?: string; data?: Record; } const formatUpPrefix = (endpoint: string) => `[UP:${endpoint}]`; export const parseUnifiedPushRequest = async (req: Request) => { const url = new URL(req.url); const endpointId = url.pathname.split('/').pop() ?? ''; let title: string | undefined; let body: string | undefined; let data: Record | undefined; const contentType = req.headers.get('content-type') || ''; if (contentType.includes('application/json')) { const json = (await req.json()) as Record; title = json.title as string | undefined; body = json.body as string | undefined; data = (json.data as Record) || json; } else { const text = await req.text(); body = text; } return { endpoint: endpointId, title, body, data, }; }; export const formatAsSignalMessage = (msg: UnifiedPushMessage) => { const parts: string[] = []; parts.push(formatUpPrefix(msg.endpoint)); if (msg.title) { parts.push(`**${msg.title}**`); } if (msg.body) { parts.push(msg.body); } if (msg.data && Object.keys(msg.data).length > 0) { parts.push(JSON.stringify(msg.data, null, 2)); } return parts.join('\n\n') || `${formatUpPrefix(msg.endpoint)}\nEmpty notification`; };