|
1 | 1 | import type { Address, Email } from 'postal-mime'; |
2 | 2 | import type { Env } from './types'; |
| 3 | +import { createLogger } from '@crowlog/logger'; |
3 | 4 | import { triggerWebhook } from '@owlrelay/webhook'; |
4 | 5 | import PostalMime from 'postal-mime'; |
5 | 6 |
|
@@ -51,15 +52,33 @@ function parseConfig({ env }: { env: Env }) { |
51 | 52 | }; |
52 | 53 | } |
53 | 54 |
|
| 55 | +const logger = createLogger({ namespace: 'email-proxy' }); |
| 56 | +const createRequestId = ({ now = new Date() }: { now?: Date } = {}) => `req_${now.getTime()}${Math.random().toString(36).substring(2, 15)}`; |
| 57 | + |
54 | 58 | export default { |
55 | 59 | async email(message: ForwardableEmailMessage, env: Env): Promise<void> { |
| 60 | + const requestId = createRequestId(); |
56 | 61 | const { webhookUrl, webhookSecret } = parseConfig({ env }); |
57 | 62 | const { email } = await parseEmail({ |
58 | 63 | rawMessage: message.raw, |
59 | 64 | realTo: message.to, |
60 | 65 | realFrom: message.from, |
61 | 66 | }); |
62 | 67 |
|
63 | | - await triggerWebhook({ email, webhookUrl, webhookSecret }); |
| 68 | + logger.info({ |
| 69 | + from: email.from, |
| 70 | + originalFrom: email.originalFrom, |
| 71 | + to: email.to, |
| 72 | + originalTo: email.originalTo, |
| 73 | + requestId, |
| 74 | + }, 'Received email'); |
| 75 | + |
| 76 | + try { |
| 77 | + await triggerWebhook({ email, webhookUrl, webhookSecret }); |
| 78 | + logger.info({ requestId }, 'Webhook triggered successfully'); |
| 79 | + } catch (error) { |
| 80 | + logger.error({ error, requestId }, 'Failed to trigger webhook'); |
| 81 | + throw error; |
| 82 | + } |
64 | 83 | }, |
65 | 84 | }; |
0 commit comments