feat: add mail-parser-wasm-worker (#301)

This commit is contained in:
Dream Hunter
2024-06-04 21:57:42 +08:00
committed by GitHub
parent c5d01e09e8
commit da2e72e523
18 changed files with 1260 additions and 1070 deletions

View File

@@ -11,17 +11,17 @@
"build": "wrangler deploy --dry-run --outdir dist --minify"
},
"devDependencies": {
"@cloudflare/workers-types": "^4.20240512.0",
"@cloudflare/workers-types": "^4.20240603.0",
"@eslint/js": "8.56.0",
"eslint": "8.56.0",
"globals": "^15.3.0",
"typescript-eslint": "^7.10.0",
"wrangler": "^3.57.1"
"typescript-eslint": "^7.12.0",
"wrangler": "^3.58.0"
},
"dependencies": {
"@aws-sdk/client-s3": "^3.588.0",
"@aws-sdk/s3-request-presigner": "^3.588.0",
"hono": "^4.3.9",
"hono": "^4.4.3",
"mimetext": "^3.0.24",
"postal-mime": "^2.2.5",
"resend": "^3.2.0",

304
worker/pnpm-lock.yaml generated
View File

@@ -20,8 +20,8 @@ importers:
specifier: ^3.588.0
version: 3.588.0
hono:
specifier: ^4.3.9
version: 4.3.9
specifier: ^4.4.3
version: 4.4.3
mimetext:
specifier: ^3.0.24
version: 3.0.24
@@ -36,8 +36,8 @@ importers:
version: 4.16.3(patch_hash=pnqp5pf7vetkijrc5uah4r5w6m)
devDependencies:
'@cloudflare/workers-types':
specifier: ^4.20240512.0
version: 4.20240512.0
specifier: ^4.20240603.0
version: 4.20240603.0
'@eslint/js':
specifier: 8.56.0
version: 8.56.0
@@ -48,11 +48,11 @@ importers:
specifier: ^15.3.0
version: 15.3.0
typescript-eslint:
specifier: ^7.10.0
version: 7.10.0(eslint@8.56.0)(typescript@5.4.5)
specifier: ^7.12.0
version: 7.12.0(eslint@8.56.0)(typescript@5.4.5)
wrangler:
specifier: ^3.57.1
version: 3.57.1(@cloudflare/workers-types@4.20240512.0)
specifier: ^3.58.0
version: 3.58.0(@cloudflare/workers-types@4.20240603.0)
packages:
@@ -233,50 +233,50 @@ packages:
resolution: {integrity: sha512-cWgAwmbFYNCFzPwxL705+lWps0F3ZvOckufd2KKoEZUmtpVw9/txUXNrPySUXSmRTSRhoatIMABNfStWR043bQ==}
engines: {node: '>=16.0.0'}
'@babel/runtime-corejs3@7.24.5':
resolution: {integrity: sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==}
'@babel/runtime-corejs3@7.24.6':
resolution: {integrity: sha512-tbC3o8uHK9xMgMsvUm9qGqxVpbv6yborMBLbDteHIc7JDNHsTV0vDMQ5j1O1NXvO+BDELtL9KgoWYaUVIVGt8w==}
engines: {node: '>=6.9.0'}
'@babel/runtime@7.24.5':
resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==}
'@babel/runtime@7.24.6':
resolution: {integrity: sha512-Ja18XcETdEl5mzzACGd+DKgaGJzPTCow7EglgwTmHdwokzDFYh/MHua6lU6DV/hjF2IaOJ4oX2nqnjG7RElKOw==}
engines: {node: '>=6.9.0'}
'@cloudflare/kv-asset-handler@0.3.2':
resolution: {integrity: sha512-EeEjMobfuJrwoctj7FA1y1KEbM0+Q1xSjobIEyie9k4haVEBB7vkDvsasw1pM3rO39mL2akxIAzLMUAtrMHZhA==}
engines: {node: '>=16.13'}
'@cloudflare/workerd-darwin-64@1.20240512.0':
resolution: {integrity: sha512-VMp+CsSHFALQiBzPdQ5dDI4T1qwLu0mQ0aeKVNDosXjueN0f3zj/lf+mFil5/9jBbG3t4mG0y+6MMnalP9Lobw==}
'@cloudflare/workerd-darwin-64@1.20240524.0':
resolution: {integrity: sha512-ATaXjefbTsrv4mpn4Fdua114RRDXcX5Ky+Mv+f4JTUllgalmqC4CYMN4jxRz9IpJU/fNMN8IEfvUyuJBAcl9Iw==}
engines: {node: '>=16'}
cpu: [x64]
os: [darwin]
'@cloudflare/workerd-darwin-arm64@1.20240512.0':
resolution: {integrity: sha512-lZktXGmzMrB5rJqY9+PmnNfv1HKlj/YLZwMjPfF0WVKHUFdvQbAHsi7NlKv6mW9uIvlZnS+K4sIkWc0MDXcRnA==}
'@cloudflare/workerd-darwin-arm64@1.20240524.0':
resolution: {integrity: sha512-wnbsZI4CS0QPCd+wnBHQ40C28A/2Qo4ESi1YhE2735G3UNcc876MWksZhsubd+XH0XPIra6eNFqyw6wRMpQOXA==}
engines: {node: '>=16'}
cpu: [arm64]
os: [darwin]
'@cloudflare/workerd-linux-64@1.20240512.0':
resolution: {integrity: sha512-wrHvqCZZqXz6Y3MUTn/9pQNsvaoNjbJpuA6vcXsXu8iCzJi911iVW2WUEBX+MpUWD+mBIP0oXni5tTlhkokOPw==}
'@cloudflare/workerd-linux-64@1.20240524.0':
resolution: {integrity: sha512-E8mj+HPBryKwaJAiNsYzXtVjKCL0KvUBZbtxJxlWM4mLSQhT+uwGT3nydb/hFY59rZnQgZslw0oqEWht5TEYiQ==}
engines: {node: '>=16'}
cpu: [x64]
os: [linux]
'@cloudflare/workerd-linux-arm64@1.20240512.0':
resolution: {integrity: sha512-YPezHMySL9J9tFdzxz390eBswQ//QJNYcZolz9Dgvb3FEfdpK345cE/bsWbMOqw5ws2f82l388epoenghtYvAg==}
'@cloudflare/workerd-linux-arm64@1.20240524.0':
resolution: {integrity: sha512-/Fr1W671t2triNCDCBWdStxngnbUfZunZ/2e4kaMLzJDJLYDtYdmvOUCBDzUD4ssqmIMbn9RCQQ0U+CLEoqBqw==}
engines: {node: '>=16'}
cpu: [arm64]
os: [linux]
'@cloudflare/workerd-windows-64@1.20240512.0':
resolution: {integrity: sha512-SxKapDrIYSscMR7lGIp/av0l6vokjH4xQ9ACxHgXh+OdOus9azppSmjaPyw4/ePvg7yqpkaNjf9o258IxWtvKQ==}
'@cloudflare/workerd-windows-64@1.20240524.0':
resolution: {integrity: sha512-G+ThDEx57g9mAEKqhWnHaaJgpeGYtyhkmwM/BDpLqPks/rAY5YEfZbY4YL1pNk1kkcZDXGrwIsY8xe9Apf5JdA==}
engines: {node: '>=16'}
cpu: [x64]
os: [win32]
'@cloudflare/workers-types@4.20240512.0':
resolution: {integrity: sha512-o2yTEWg+YK/I1t/Me+dA0oarO0aCbjibp6wSeaw52DSE9tDyKJ7S+Qdyw/XsMrKn4t8kF6f/YOba+9O4MJfW9w==}
'@cloudflare/workers-types@4.20240603.0':
resolution: {integrity: sha512-KmsjZcd/dPWM51FoT08cvUGCq9l3nFEriloQ12mcdJPoW911Gi5S/9Cq4xeFvTrtk9TJ2krvxP23IeobecRmOQ==}
'@cspotcode/source-map-support@0.8.1':
resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==}
@@ -430,8 +430,8 @@ packages:
peerDependencies:
eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
'@eslint-community/regexpp@4.10.0':
resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==}
'@eslint-community/regexpp@4.10.1':
resolution: {integrity: sha512-Zm2NGpWELsQAD1xsJzGQpYfvICSsFkEpU0jxBjfdC6uNEWXcHnfs9hScFWtXVDVl+rBQJGrl4g1vcKIejpH9dA==}
engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
'@eslint/eslintrc@2.1.4':
@@ -694,11 +694,11 @@ packages:
'@types/node-forge@1.3.11':
resolution: {integrity: sha512-FQx220y22OKNTqaByeBGqHWYz4cl94tpcxeFdvBo3wjG6XPBuZ0BNgNZRV5J5TFmmcsJ4IzsLkmGRiQbnYsBEQ==}
'@types/node@20.12.12':
resolution: {integrity: sha512-eWLDGF/FOSPtAvEqeRAQ4C8LSA7M1I7i0ky1I8U7kD1J5ITyW3AsRhQrKVoWf5pFKZ2kILsEGJhsI9r93PYnOw==}
'@types/node@20.14.1':
resolution: {integrity: sha512-T2MzSGEu+ysB/FkWfqmhV3PLyQlowdptmmgD20C6QxsS8Fmv5SjpZ1ayXaEC0S21/h5UJ9iA6W/5vSNU5l00OA==}
'@typescript-eslint/eslint-plugin@7.10.0':
resolution: {integrity: sha512-PzCr+a/KAef5ZawX7nbyNwBDtM1HdLIT53aSA2DDlxmxMngZ43O8SIePOeX8H5S+FHXeI6t97mTt/dDdzY4Fyw==}
'@typescript-eslint/eslint-plugin@7.12.0':
resolution: {integrity: sha512-7F91fcbuDf/d3S8o21+r3ZncGIke/+eWk0EpO21LXhDfLahriZF9CGj4fbAetEjlaBdjdSm9a6VeXbpbT6Z40Q==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
'@typescript-eslint/parser': ^7.0.0
@@ -708,8 +708,8 @@ packages:
typescript:
optional: true
'@typescript-eslint/parser@7.10.0':
resolution: {integrity: sha512-2EjZMA0LUW5V5tGQiaa2Gys+nKdfrn2xiTIBLR4fxmPmVSvgPcKNW+AE/ln9k0A4zDUti0J/GZXMDupQoI+e1w==}
'@typescript-eslint/parser@7.12.0':
resolution: {integrity: sha512-dm/J2UDY3oV3TKius2OUZIFHsomQmpHtsV0FTh1WO8EKgHLQ1QCADUqscPgTpU+ih1e21FQSRjXckHn3txn6kQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -718,12 +718,12 @@ packages:
typescript:
optional: true
'@typescript-eslint/scope-manager@7.10.0':
resolution: {integrity: sha512-7L01/K8W/VGl7noe2mgH0K7BE29Sq6KAbVmxurj8GGaPDZXPr8EEQ2seOeAS+mEV9DnzxBQB6ax6qQQ5C6P4xg==}
'@typescript-eslint/scope-manager@7.12.0':
resolution: {integrity: sha512-itF1pTnN6F3unPak+kutH9raIkL3lhH1YRPGgt7QQOh43DQKVJXmWkpb+vpc/TiDHs6RSd9CTbDsc/Y+Ygq7kg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/type-utils@7.10.0':
resolution: {integrity: sha512-D7tS4WDkJWrVkuzgm90qYw9RdgBcrWmbbRkrLA4d7Pg3w0ttVGDsvYGV19SH8gPR5L7OtcN5J1hTtyenO9xE9g==}
'@typescript-eslint/type-utils@7.12.0':
resolution: {integrity: sha512-lib96tyRtMhLxwauDWUp/uW3FMhLA6D0rJ8T7HmH7x23Gk1Gwwu8UZ94NMXBvOELn6flSPiBrCKlehkiXyaqwA==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -732,12 +732,12 @@ packages:
typescript:
optional: true
'@typescript-eslint/types@7.10.0':
resolution: {integrity: sha512-7fNj+Ya35aNyhuqrA1E/VayQX9Elwr8NKZ4WueClR3KwJ7Xx9jcCdOrLW04h51de/+gNbyFMs+IDxh5xIwfbNg==}
'@typescript-eslint/types@7.12.0':
resolution: {integrity: sha512-o+0Te6eWp2ppKY3mLCU+YA9pVJxhUJE15FV7kxuD9jgwIAa+w/ycGJBMrYDTpVGUM/tgpa9SeMOugSabWFq7bg==}
engines: {node: ^18.18.0 || >=20.0.0}
'@typescript-eslint/typescript-estree@7.10.0':
resolution: {integrity: sha512-LXFnQJjL9XIcxeVfqmNj60YhatpRLt6UhdlFwAkjNc6jSUlK8zQOl1oktAP8PlWFzPQC1jny/8Bai3/HPuvN5g==}
'@typescript-eslint/typescript-estree@7.12.0':
resolution: {integrity: sha512-5bwqLsWBULv1h6pn7cMW5dXX/Y2amRqLaKqsASVwbBHMZSnHqE/HN4vT4fE0aFsiwxYvr98kqOWh1a8ZKXalCQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
typescript: '*'
@@ -745,14 +745,14 @@ packages:
typescript:
optional: true
'@typescript-eslint/utils@7.10.0':
resolution: {integrity: sha512-olzif1Fuo8R8m/qKkzJqT7qwy16CzPRWBvERS0uvyc+DHd8AKbO4Jb7kpAvVzMmZm8TrHnI7hvjN4I05zow+tg==}
'@typescript-eslint/utils@7.12.0':
resolution: {integrity: sha512-Y6hhwxwDx41HNpjuYswYp6gDbkiZ8Hin9Bf5aJQn1bpTs3afYY4GX+MPYxma8jtoIV2GRwTM/UJm/2uGCVv+DQ==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
'@typescript-eslint/visitor-keys@7.10.0':
resolution: {integrity: sha512-9ntIVgsi6gg6FIq9xjEO4VQJvwOqA3jaBFQJ/6TK5AvEup2+cECI6Fh7QiBxmfMHXU0V0J4RyPeOU1VDNzl9cg==}
'@typescript-eslint/visitor-keys@7.12.0':
resolution: {integrity: sha512-uZk7DevrQLL3vSnfFl5bj4sL75qC9D6EdjemIdbtkuUmIheWpuiiylSY01JxJE7+zGrOWDZrp1WxOuDntvKrHQ==}
engines: {node: ^18.18.0 || >=20.0.0}
'@ungap/structured-clone@1.2.0':
@@ -891,8 +891,8 @@ packages:
data-uri-to-buffer@2.0.2:
resolution: {integrity: sha512-ND9qDTLc6diwj+Xe5cdAgVTbLVdXbtxTJRXRhli8Mowuaan+0EJOtdqJ0QCHNSSPyoXGx9HX2/VMnKeC34AChA==}
debug@4.3.4:
resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
debug@4.3.5:
resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==}
engines: {node: '>=6.0'}
peerDependencies:
supports-color: '*'
@@ -1099,8 +1099,8 @@ packages:
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
engines: {node: '>= 0.4'}
hono@4.3.9:
resolution: {integrity: sha512-6c5LVE23HnIS8iBhY+XPmYJlPeeClznOi7mBNsAsJCgxo8Ciz75LTjqRUf5wv4RYq8kL+1KPLUZHCtKmbZssNg==}
hono@4.4.3:
resolution: {integrity: sha512-G7rTruKzrHXPz1KB4B50deKydPA9+aeei+WC1hikP0abN9N+a6yORuweageaqWocYfYNkpoqA5ezGV2mzQasvw==}
engines: {node: '>=16.0.0'}
html-to-text@9.0.5:
@@ -1162,8 +1162,8 @@ packages:
isexe@2.0.0:
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
jackspeak@3.1.2:
resolution: {integrity: sha512-kWmLKn2tRtfYMF/BakihVVRzBKOxz4gJMiL2Rj91WnAB5TPZumSH99R/Yf1qE1u4uRimvCSJfm6hnxohXeEXjQ==}
jackspeak@3.2.3:
resolution: {integrity: sha512-htOzIMPbpLid/Gq9/zaz9SfExABxqRe1sSCdxntlO/aMD6u0issZQiY25n2GKQUtJ02j7z5sfptlAOMpWWOmvw==}
engines: {node: '>=14'}
js-base64@3.7.7:
@@ -1246,8 +1246,8 @@ packages:
mimetext@3.0.24:
resolution: {integrity: sha512-UdG1KVfcxeEfo6el91lzFG2WLLTm8DxSK/rosxx5H2Pjla50+DSsjTgr9BRAfAkbQWaxvzcaTO+bHK5ZrdKdfA==}
miniflare@3.20240512.0:
resolution: {integrity: sha512-X0PlKR0AROKpxFoJNmRtCMIuJxj+ngEcyTOlEokj2rAQ0TBwUhB4/1uiPvdI6ofW5NugPOD1uomAv+gLjwsLDQ==}
miniflare@3.20240524.1:
resolution: {integrity: sha512-5d3pRxvd5pT7lX1SsBH9+AjXuyHJnChSNOnYhubfi7pxMek4ZfULwhnUmNUp1R7b2xKuzqdFDZa0fsZuUoFxlw==}
engines: {node: '>=16.13'}
hasBin: true
@@ -1559,8 +1559,8 @@ packages:
resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
engines: {node: '>=10'}
typescript-eslint@7.10.0:
resolution: {integrity: sha512-thO8nyqptXdfWHQrMJJiJyftpW8aLmwRNs11xA8pSrXneoclFPstQZqXvDWuH1WNL4CHffqHvYUeCHTit6yfhQ==}
typescript-eslint@7.12.0:
resolution: {integrity: sha512-D6HKNbQcnNu3BaN4HkQCR16tgG8Q2AMUWPgvhrJksOXu+d6ys07yC06ONiV2kcsEfWC22voB6C3PvK2MqlBZ7w==}
engines: {node: ^18.18.0 || >=20.0.0}
peerDependencies:
eslint: ^8.56.0
@@ -1603,17 +1603,17 @@ packages:
resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
engines: {node: '>=0.10.0'}
workerd@1.20240512.0:
resolution: {integrity: sha512-VUBmR1PscAPHEE0OF/G2K7/H1gnr9aDWWZzdkIgWfNKkv8dKFCT75H+GJtUHjfwqz3rYCzaNZmatSXOpLGpF8A==}
workerd@1.20240524.0:
resolution: {integrity: sha512-LWLe5D8PVHBcqturmBbwgI71r7YPpIMYZoVEH6S4G35EqIJ55cb0n3FipoSyraoIfpcCxCFxX1K6WsRHbP3pFA==}
engines: {node: '>=16'}
hasBin: true
wrangler@3.57.1:
resolution: {integrity: sha512-M8YnWUwdrb8AFiRePtVnzlDn02OX4osWvdl8oVh6eyZqqkqXYg7lwlYBr14Qj92pMN4JvMBmDZoukkYHvwpJRg==}
wrangler@3.58.0:
resolution: {integrity: sha512-h9gWER7LXLnmHABDNP1p3aqXtchlvSBN8Dp22ZurnkxaLMZ3L3H1Ze1ftiFSs0VRWv0BUnz7AWIUqZmzuBY4Nw==}
engines: {node: '>=16.17.0'}
hasBin: true
peerDependencies:
'@cloudflare/workers-types': ^4.20240512.0
'@cloudflare/workers-types': ^4.20240524.0
peerDependenciesMeta:
'@cloudflare/workers-types':
optional: true
@@ -1714,10 +1714,10 @@ snapshots:
'@aws-crypto/sha1-browser': 3.0.0
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
'@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/client-sts': 3.588.0
'@aws-sdk/client-sso-oidc': 3.588.0
'@aws-sdk/client-sts': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/core': 3.588.0
'@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))
'@aws-sdk/middleware-bucket-endpoint': 3.587.0
'@aws-sdk/middleware-expect-continue': 3.577.0
'@aws-sdk/middleware-flexible-checksums': 3.587.0
@@ -1772,13 +1772,13 @@ snapshots:
transitivePeerDependencies:
- aws-crt
'@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0)':
'@aws-sdk/client-sso-oidc@3.588.0':
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
'@aws-sdk/client-sts': 3.588.0
'@aws-sdk/client-sts': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/core': 3.588.0
'@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))
'@aws-sdk/middleware-host-header': 3.577.0
'@aws-sdk/middleware-logger': 3.577.0
'@aws-sdk/middleware-recursion-detection': 3.577.0
@@ -1815,7 +1815,6 @@ snapshots:
'@smithy/util-utf8': 3.0.0
tslib: 2.6.2
transitivePeerDependencies:
- '@aws-sdk/client-sts'
- aws-crt
'@aws-sdk/client-sso@3.588.0':
@@ -1861,13 +1860,13 @@ snapshots:
transitivePeerDependencies:
- aws-crt
'@aws-sdk/client-sts@3.588.0':
'@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0)':
dependencies:
'@aws-crypto/sha256-browser': 3.0.0
'@aws-crypto/sha256-js': 3.0.0
'@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/client-sso-oidc': 3.588.0
'@aws-sdk/core': 3.588.0
'@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/credential-provider-node': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))
'@aws-sdk/middleware-host-header': 3.577.0
'@aws-sdk/middleware-logger': 3.577.0
'@aws-sdk/middleware-recursion-detection': 3.577.0
@@ -1904,6 +1903,7 @@ snapshots:
'@smithy/util-utf8': 3.0.0
tslib: 2.6.2
transitivePeerDependencies:
- '@aws-sdk/client-sso-oidc'
- aws-crt
'@aws-sdk/core@3.588.0':
@@ -1935,14 +1935,14 @@ snapshots:
'@smithy/util-stream': 3.0.1
tslib: 2.6.2
'@aws-sdk/credential-provider-ini@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)':
'@aws-sdk/credential-provider-ini@3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))':
dependencies:
'@aws-sdk/client-sts': 3.588.0
'@aws-sdk/client-sts': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/credential-provider-env': 3.587.0
'@aws-sdk/credential-provider-http': 3.587.0
'@aws-sdk/credential-provider-process': 3.587.0
'@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))
'@aws-sdk/types': 3.577.0
'@smithy/credential-provider-imds': 3.1.0
'@smithy/property-provider': 3.1.0
@@ -1953,14 +1953,14 @@ snapshots:
- '@aws-sdk/client-sso-oidc'
- aws-crt
'@aws-sdk/credential-provider-node@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)':
'@aws-sdk/credential-provider-node@3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))':
dependencies:
'@aws-sdk/credential-provider-env': 3.587.0
'@aws-sdk/credential-provider-http': 3.587.0
'@aws-sdk/credential-provider-ini': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/credential-provider-ini': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))
'@aws-sdk/credential-provider-process': 3.587.0
'@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/credential-provider-sso': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/credential-provider-web-identity': 3.587.0(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))
'@aws-sdk/types': 3.577.0
'@smithy/credential-provider-imds': 3.1.0
'@smithy/property-provider': 3.1.0
@@ -1980,10 +1980,10 @@ snapshots:
'@smithy/types': 3.0.0
tslib: 2.6.2
'@aws-sdk/credential-provider-sso@3.588.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))':
'@aws-sdk/credential-provider-sso@3.588.0(@aws-sdk/client-sso-oidc@3.588.0)':
dependencies:
'@aws-sdk/client-sso': 3.588.0
'@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))
'@aws-sdk/token-providers': 3.587.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/types': 3.577.0
'@smithy/property-provider': 3.1.0
'@smithy/shared-ini-file-loader': 3.1.0
@@ -1993,9 +1993,9 @@ snapshots:
- '@aws-sdk/client-sso-oidc'
- aws-crt
'@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.588.0)':
'@aws-sdk/credential-provider-web-identity@3.587.0(@aws-sdk/client-sts@3.588.0(@aws-sdk/client-sso-oidc@3.588.0))':
dependencies:
'@aws-sdk/client-sts': 3.588.0
'@aws-sdk/client-sts': 3.588.0(@aws-sdk/client-sso-oidc@3.588.0)
'@aws-sdk/types': 3.577.0
'@smithy/property-provider': 3.1.0
'@smithy/types': 3.0.0
@@ -2120,9 +2120,9 @@ snapshots:
'@smithy/types': 3.0.0
tslib: 2.6.2
'@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.588.0(@aws-sdk/client-sts@3.588.0))':
'@aws-sdk/token-providers@3.587.0(@aws-sdk/client-sso-oidc@3.588.0)':
dependencies:
'@aws-sdk/client-sso-oidc': 3.588.0(@aws-sdk/client-sts@3.588.0)
'@aws-sdk/client-sso-oidc': 3.588.0
'@aws-sdk/types': 3.577.0
'@smithy/property-provider': 3.1.0
'@smithy/shared-ini-file-loader': 3.1.0
@@ -2179,12 +2179,12 @@ snapshots:
'@smithy/types': 3.0.0
tslib: 2.6.2
'@babel/runtime-corejs3@7.24.5':
'@babel/runtime-corejs3@7.24.6':
dependencies:
core-js-pure: 3.37.1
regenerator-runtime: 0.14.1
'@babel/runtime@7.24.5':
'@babel/runtime@7.24.6':
dependencies:
regenerator-runtime: 0.14.1
@@ -2192,22 +2192,22 @@ snapshots:
dependencies:
mime: 3.0.0
'@cloudflare/workerd-darwin-64@1.20240512.0':
'@cloudflare/workerd-darwin-64@1.20240524.0':
optional: true
'@cloudflare/workerd-darwin-arm64@1.20240512.0':
'@cloudflare/workerd-darwin-arm64@1.20240524.0':
optional: true
'@cloudflare/workerd-linux-64@1.20240512.0':
'@cloudflare/workerd-linux-64@1.20240524.0':
optional: true
'@cloudflare/workerd-linux-arm64@1.20240512.0':
'@cloudflare/workerd-linux-arm64@1.20240524.0':
optional: true
'@cloudflare/workerd-windows-64@1.20240512.0':
'@cloudflare/workerd-windows-64@1.20240524.0':
optional: true
'@cloudflare/workers-types@4.20240512.0': {}
'@cloudflare/workers-types@4.20240603.0': {}
'@cspotcode/source-map-support@0.8.1':
dependencies:
@@ -2294,12 +2294,12 @@ snapshots:
eslint: 8.56.0
eslint-visitor-keys: 3.4.3
'@eslint-community/regexpp@4.10.0': {}
'@eslint-community/regexpp@4.10.1': {}
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
debug: 4.3.4
debug: 4.3.5
espree: 9.6.1
globals: 13.24.0
ignore: 5.3.1
@@ -2317,7 +2317,7 @@ snapshots:
'@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.3
debug: 4.3.4
debug: 4.3.5
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -2691,20 +2691,20 @@ snapshots:
'@types/node-forge@1.3.11':
dependencies:
'@types/node': 20.12.12
'@types/node': 20.14.1
'@types/node@20.12.12':
'@types/node@20.14.1':
dependencies:
undici-types: 5.26.5
'@typescript-eslint/eslint-plugin@7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5)':
'@typescript-eslint/eslint-plugin@7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/regexpp': 4.10.0
'@typescript-eslint/parser': 7.10.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/type-utils': 7.10.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0
'@eslint-community/regexpp': 4.10.1
'@typescript-eslint/parser': 7.12.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.12.0
'@typescript-eslint/type-utils': 7.12.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.12.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.12.0
eslint: 8.56.0
graphemer: 1.4.0
ignore: 5.3.1
@@ -2715,29 +2715,29 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/parser@7.10.0(eslint@8.56.0)(typescript@5.4.5)':
'@typescript-eslint/parser@7.12.0(eslint@8.56.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.10.0
debug: 4.3.4
'@typescript-eslint/scope-manager': 7.12.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5)
'@typescript-eslint/visitor-keys': 7.12.0
debug: 4.3.5
eslint: 8.56.0
optionalDependencies:
typescript: 5.4.5
transitivePeerDependencies:
- supports-color
'@typescript-eslint/scope-manager@7.10.0':
'@typescript-eslint/scope-manager@7.12.0':
dependencies:
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/visitor-keys': 7.10.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/visitor-keys': 7.12.0
'@typescript-eslint/type-utils@7.10.0(eslint@8.56.0)(typescript@5.4.5)':
'@typescript-eslint/type-utils@7.12.0(eslint@8.56.0)(typescript@5.4.5)':
dependencies:
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.56.0)(typescript@5.4.5)
debug: 4.3.4
'@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5)
'@typescript-eslint/utils': 7.12.0(eslint@8.56.0)(typescript@5.4.5)
debug: 4.3.5
eslint: 8.56.0
ts-api-utils: 1.3.0(typescript@5.4.5)
optionalDependencies:
@@ -2745,13 +2745,13 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/types@7.10.0': {}
'@typescript-eslint/types@7.12.0': {}
'@typescript-eslint/typescript-estree@7.10.0(typescript@5.4.5)':
'@typescript-eslint/typescript-estree@7.12.0(typescript@5.4.5)':
dependencies:
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/visitor-keys': 7.10.0
debug: 4.3.4
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/visitor-keys': 7.12.0
debug: 4.3.5
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.4
@@ -2762,20 +2762,20 @@ snapshots:
transitivePeerDependencies:
- supports-color
'@typescript-eslint/utils@7.10.0(eslint@8.56.0)(typescript@5.4.5)':
'@typescript-eslint/utils@7.12.0(eslint@8.56.0)(typescript@5.4.5)':
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@typescript-eslint/scope-manager': 7.10.0
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/typescript-estree': 7.10.0(typescript@5.4.5)
'@typescript-eslint/scope-manager': 7.12.0
'@typescript-eslint/types': 7.12.0
'@typescript-eslint/typescript-estree': 7.12.0(typescript@5.4.5)
eslint: 8.56.0
transitivePeerDependencies:
- supports-color
- typescript
'@typescript-eslint/visitor-keys@7.10.0':
'@typescript-eslint/visitor-keys@7.12.0':
dependencies:
'@typescript-eslint/types': 7.10.0
'@typescript-eslint/types': 7.12.0
eslint-visitor-keys: 3.4.3
'@ungap/structured-clone@1.2.0': {}
@@ -2858,7 +2858,7 @@ snapshots:
capnp-ts@0.7.0:
dependencies:
debug: 4.3.4
debug: 4.3.5
tslib: 2.6.2
transitivePeerDependencies:
- supports-color
@@ -2907,7 +2907,7 @@ snapshots:
data-uri-to-buffer@2.0.2: {}
debug@4.3.4:
debug@4.3.5:
dependencies:
ms: 2.1.2
@@ -2993,7 +2993,7 @@ snapshots:
eslint@8.56.0:
dependencies:
'@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
'@eslint-community/regexpp': 4.10.0
'@eslint-community/regexpp': 4.10.1
'@eslint/eslintrc': 2.1.4
'@eslint/js': 8.56.0
'@humanwhocodes/config-array': 0.11.14
@@ -3003,7 +3003,7 @@ snapshots:
ajv: 6.12.6
chalk: 4.1.2
cross-spawn: 7.0.3
debug: 4.3.4
debug: 4.3.5
doctrine: 3.0.0
escape-string-regexp: 4.0.0
eslint-scope: 7.2.2
@@ -3130,7 +3130,7 @@ snapshots:
glob@10.4.1:
dependencies:
foreground-child: 3.1.1
jackspeak: 3.1.2
jackspeak: 3.2.3
minimatch: 9.0.4
minipass: 7.1.2
path-scurry: 1.11.1
@@ -3167,7 +3167,7 @@ snapshots:
dependencies:
function-bind: 1.1.2
hono@4.3.9: {}
hono@4.4.3: {}
html-to-text@9.0.5:
dependencies:
@@ -3224,7 +3224,7 @@ snapshots:
isexe@2.0.0: {}
jackspeak@3.1.2:
jackspeak@3.2.3:
dependencies:
'@isaacs/cliui': 8.0.2
optionalDependencies:
@@ -3298,12 +3298,12 @@ snapshots:
mimetext@3.0.24:
dependencies:
'@babel/runtime': 7.24.5
'@babel/runtime-corejs3': 7.24.5
'@babel/runtime': 7.24.6
'@babel/runtime-corejs3': 7.24.6
js-base64: 3.7.7
mime-types: 2.1.35
miniflare@3.20240512.0:
miniflare@3.20240524.1:
dependencies:
'@cspotcode/source-map-support': 0.8.1
acorn: 8.11.3
@@ -3313,7 +3313,7 @@ snapshots:
glob-to-regexp: 0.4.1
stoppable: 1.1.0
undici: 5.28.4
workerd: 1.20240512.0
workerd: 1.20240524.0
ws: 8.17.0
youch: 3.3.3
zod: 3.23.8
@@ -3553,7 +3553,7 @@ snapshots:
dependencies:
'@telegraf/types': 7.1.0
abort-controller: 3.0.0
debug: 4.3.4
debug: 4.3.5
mri: 1.2.0
node-fetch: 2.7.0
p-timeout: 4.1.0
@@ -3585,11 +3585,11 @@ snapshots:
type-fest@0.20.2: {}
typescript-eslint@7.10.0(eslint@8.56.0)(typescript@5.4.5):
typescript-eslint@7.12.0(eslint@8.56.0)(typescript@5.4.5):
dependencies:
'@typescript-eslint/eslint-plugin': 7.10.0(@typescript-eslint/parser@7.10.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.10.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.10.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/eslint-plugin': 7.12.0(@typescript-eslint/parser@7.12.0(eslint@8.56.0)(typescript@5.4.5))(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/parser': 7.12.0(eslint@8.56.0)(typescript@5.4.5)
'@typescript-eslint/utils': 7.12.0(eslint@8.56.0)(typescript@5.4.5)
eslint: 8.56.0
optionalDependencies:
typescript: 5.4.5
@@ -3623,15 +3623,15 @@ snapshots:
word-wrap@1.2.5: {}
workerd@1.20240512.0:
workerd@1.20240524.0:
optionalDependencies:
'@cloudflare/workerd-darwin-64': 1.20240512.0
'@cloudflare/workerd-darwin-arm64': 1.20240512.0
'@cloudflare/workerd-linux-64': 1.20240512.0
'@cloudflare/workerd-linux-arm64': 1.20240512.0
'@cloudflare/workerd-windows-64': 1.20240512.0
'@cloudflare/workerd-darwin-64': 1.20240524.0
'@cloudflare/workerd-darwin-arm64': 1.20240524.0
'@cloudflare/workerd-linux-64': 1.20240524.0
'@cloudflare/workerd-linux-arm64': 1.20240524.0
'@cloudflare/workerd-windows-64': 1.20240524.0
wrangler@3.57.1(@cloudflare/workers-types@4.20240512.0):
wrangler@3.58.0(@cloudflare/workers-types@4.20240603.0):
dependencies:
'@cloudflare/kv-asset-handler': 0.3.2
'@esbuild-plugins/node-globals-polyfill': 0.2.3(esbuild@0.17.19)
@@ -3639,7 +3639,7 @@ snapshots:
blake3-wasm: 2.1.5
chokidar: 3.6.0
esbuild: 0.17.19
miniflare: 3.20240512.0
miniflare: 3.20240524.1
nanoid: 3.3.7
path-to-regexp: 6.2.2
resolve: 1.22.8
@@ -3648,7 +3648,7 @@ snapshots:
source-map: 0.6.1
xxhash-wasm: 1.0.2
optionalDependencies:
'@cloudflare/workers-types': 4.20240512.0
'@cloudflare/workers-types': 4.20240603.0
fsevents: 2.3.3
transitivePeerDependencies:
- bufferutil

View File

@@ -166,3 +166,43 @@ export const handleListQuery = async (
).bind(...params).first("count") : 0;
return c.json({ results, count });
}
export const commonParseMail = async (raw_mail: string | undefined | null): Promise<{
sender: string,
subject: string,
text: string,
html: string
} | undefined> => {
if (!raw_mail) {
return undefined;
}
// TODO: WASM parse email
// try {
// const { parse_message_wrapper } = await import('mail-parser-wasm-worker');
// const parsedEmail = parse_message_wrapper(raw_mail);
// return {
// sender: parsedEmail.sender || "",
// subject: parsedEmail.subject || "",
// text: parsedEmail.text || "",
// html: parsedEmail.body_html || "",
// };
// } catch (e) {
// console.error("Failed use mail-parser-wasm-worker to parse email", e);
// }
try {
const { default: PostalMime } = await import('postal-mime');
const parsedEmail = await PostalMime.parse(raw_mail);
return {
sender: parsedEmail.from ? `${parsedEmail.from.name} <${parsedEmail.from.address}>` : "",
subject: parsedEmail.subject || "",
text: parsedEmail.text || "",
html: parsedEmail.html || "",
};
}
catch (e) {
console.error("Failed use PostalMime to parse email", e);
}
return undefined;
}

View File

@@ -1,5 +1,5 @@
export const CONSTANTS = {
VERSION: 'v0.5.0',
VERSION: 'v0.5.1',
// DB settings
ADDRESS_BLOCK_LIST_KEY: 'address_block_list',

View File

@@ -3,7 +3,7 @@ import { HonoCustomType } from "../types";
import { CONSTANTS } from "../constants";
import { AdminWebhookSettings, WebhookMail } from "../models";
import { getBooleanValue } from "../utils";
import PostalMime from 'postal-mime';
import { commonParseMail } from "../common";
class WebhookSettings {
@@ -15,10 +15,10 @@ class WebhookSettings {
body: string = JSON.stringify({
"from": "${from}",
"to": "${to}",
"headers": "${headers}",
"subject": "${subject}",
"raw": "${raw}",
"parsedText": "${parsedText}",
"parsedHtml": "${parsedHtml}",
}, null, 2)
}
@@ -98,14 +98,14 @@ export async function trigerWebhook(
if (!settings) {
return;
}
const parsedEmail = await PostalMime.parse(raw_mail);
const parsedEmail = await commonParseMail(raw_mail);
const res = await sendWebhook(settings, {
from: parsedEmail.from.address || "",
from: parsedEmail?.sender || "",
to: address,
headers: JSON.stringify(parsedEmail.headers),
subject: parsedEmail.subject || "",
subject: parsedEmail?.subject || "",
raw: raw_mail,
parsedText: parsedEmail.text || parsedEmail.html || ""
parsedText: parsedEmail?.text || "",
parsedHtml: parsedEmail?.html || ""
});
if (!res.success) {
console.log(res.message);
@@ -119,14 +119,15 @@ async function testWebhookSettings(c: Context<HonoCustomType>): Promise<Response
const raw = await c.env.DB.prepare(
`SELECT raw FROM raw_mails WHERE address = ? ORDER BY RANDOM() LIMIT 1`
).bind(address).first<string>("raw");
const parsedEmail = raw ? await PostalMime.parse(raw) : {} as any;
const parsedEmail = await commonParseMail(raw);
const res = await sendWebhook(settings, {
from: parsedEmail?.from?.address || "test@test.com",
from: parsedEmail?.sender || "test@test.com",
to: address,
headers: JSON.stringify(parsedEmail?.headers || { "X-Test": "test" }),
subject: parsedEmail?.subject || "test subject",
raw: raw || "test raw email",
parsedText: parsedEmail?.text || parsedEmail?.html || "test parsed text"
parsedText: parsedEmail?.text || "test parsed text",
parsedHtml: parsedEmail?.html || "test parsed html"
});
if (!res.success) {
return c.text(res.message || "send webhook error", 400);

View File

@@ -9,10 +9,10 @@ export class AdminWebhookSettings {
export type WebhookMail = {
from: string;
to: string;
headers: string;
subject: string;
raw: string;
parsedText: string;
parsedHtml: string;
}
export class CleanupSettings {

View File

@@ -1,15 +1,15 @@
import { Context } from "hono";
import { Jwt } from 'hono/utils/jwt'
import { Telegraf, Context as TgContext, Markup } from "telegraf";
import { callbackQuery } from "telegraf/filters";
import PostalMime from 'postal-mime';
import { CONSTANTS } from "../constants";
import { getDomains, getStringValue } from '../utils';
import { HonoCustomType } from "../types";
import { TelegramSettings } from "./settings";
import { bindTelegramAddress, deleteTelegramAddress, jwtListToAddressData, tgUserNewAddress, unbindTelegramAddress, unbindTelegramByAddress } from "./common";
import { commonParseMail } from "../common";
const COMMANDS = [
{
@@ -195,13 +195,13 @@ export function newTelegramBot(c: Context<HonoCustomType>, token: string): Teleg
if (!db_address_id) {
return await ctx.reply("无效地址");
}
const { raw, id: mailId } = await c.env.DB.prepare(
const { raw, id: mailId, created_at } = await c.env.DB.prepare(
`SELECT * FROM raw_mails where address = ? `
+ ` order by id desc limit 1 offset ?`
).bind(
queryAddress, mailIndex
).first<{ raw: string, id: string }>() || {};
const { mail } = raw ? await parseMail(raw) : { mail: "已经没有邮件了" };
).first<{ raw: string, id: string, created_at: string }>() || {};
const { mail } = raw ? await parseMail(raw, queryAddress, created_at) : { mail: "已经没有邮件了" };
const settings = await c.env.KV.get<TelegramSettings>(CONSTANTS.TG_KV_SETTINGS_KEY, "json");
const miniAppButtons = []
if (settings?.miniAppUrl && settings?.miniAppUrl?.length > 0 && mailId) {
@@ -265,22 +265,26 @@ export async function initTelegramBotCommands(bot: Telegraf) {
await bot.telegram.setMyCommands(COMMANDS);
}
const parseMail = async (raw_mail: string | undefined | null) => {
const parseMail = async (
raw_mail: string | undefined | null,
address: string, created_at: string | undefined | null
) => {
if (!raw_mail) {
return {};
}
try {
const parsedEmail = await PostalMime.parse(raw_mail);
if (parsedEmail?.text?.length && parsedEmail?.text?.length > 1000) {
parsedEmail.text = parsedEmail.text.substring(0, 1000) + "...消息过长请到miniapp查看";
const parsedEmail = await commonParseMail(raw_mail);
let parsedText = parsedEmail?.text || "";
if (parsedText.length && parsedText.length > 1000) {
parsedText = parsedEmail?.text.substring(0, 1000) + "\n\n...\n消息过长请到miniapp查看";
}
return {
isHtml: false,
mail: `From: ${parsedEmail.from ? `${parsedEmail.from.name}[${parsedEmail.from.address}]` : "无发件人"}\n`
+ `To: ${parsedEmail.to?.map(t => `${t.name}[${t.address}]`).join(" ")}\n`
+ `Subject: ${parsedEmail.subject}\n`
+ `Date: ${parsedEmail.date}\n`
+ `Content:\n${parsedEmail.text || "解析失败,请打开 mini app 查看"}`
mail: `From: ${parsedEmail?.sender || "无发件人"}\n`
+ `To: ${address}\n`
+ (created_at ? `Date: ${created_at}\n` : "")
+ `Subject: ${parsedEmail?.subject}\n`
+ `Content:\n${parsedEmail?.text || "解析失败,请打开 mini app 查看"}`
};
} catch (e) {
return {
@@ -299,7 +303,7 @@ export async function sendMailToTelegram(
return;
}
const userId = await c.env.KV.get(`${CONSTANTS.TG_KV_PREFIX}:${address}`);
const { mail } = await parseMail(raw_mail);
const { mail } = await parseMail(raw_mail, address, new Date().toUTCString());
if (!mail) {
return;
}

View File

@@ -125,8 +125,14 @@ app.route('/', apiV1)
app.route('/', apiSendMail)
app.route('/', telegramApi)
app.get('/', async c => c.text("OK"))
app.get('/health_check', async c => c.text("OK"))
app.get('/', async c => {
if (!c.env.DB) { return c.text("DB is not available", 400); }
return c.text("OK");
})
app.get('/health_check', async c => {
if (!c.env.DB) { return c.text("DB is not available", 400); }
return c.text("OK");
})
app.all('/*', async c => c.text("Not Found", 404))