@zintrust/core 1.8.3 → 1.8.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +8 -6
- package/src/cli/CLI.d.ts.map +1 -1
- package/src/cli/CLI.js +2 -0
- package/src/cli/commands/EmailProxyCommand.d.ts +6 -0
- package/src/cli/commands/EmailProxyCommand.d.ts.map +1 -0
- package/src/cli/commands/EmailProxyCommand.js +108 -0
- package/src/cli/commands/ProxyCommand.d.ts +1 -0
- package/src/cli/commands/ProxyCommand.d.ts.map +1 -1
- package/src/cli/commands/ProxyCommand.js +6 -0
- package/src/cli/commands/WranglerProxyCommandUtils.d.ts +1 -0
- package/src/cli/commands/WranglerProxyCommandUtils.d.ts.map +1 -1
- package/src/cli/commands/WranglerProxyCommandUtils.js +2 -1
- package/src/cli/scaffolding/env.d.ts.map +1 -1
- package/src/cli/scaffolding/env.js +5 -0
- package/src/config/env.d.ts +18 -0
- package/src/config/env.d.ts.map +1 -1
- package/src/config/env.js +19 -0
- package/src/config/mail.d.ts.map +1 -1
- package/src/config/mail.js +6 -0
- package/src/config/type.d.ts +6 -2
- package/src/config/type.d.ts.map +1 -1
- package/src/index.js +3 -3
- package/src/proxy/email/ZintrustEmailProxy.d.ts +20 -0
- package/src/proxy/email/ZintrustEmailProxy.d.ts.map +1 -0
- package/src/proxy/email/ZintrustEmailProxy.js +129 -0
- package/src/proxy/email/register.d.ts +2 -0
- package/src/proxy/email/register.d.ts.map +1 -0
- package/src/proxy/email/register.js +5 -0
- package/src/proxy.d.ts +1 -0
- package/src/proxy.d.ts.map +1 -1
- package/src/proxy.js +1 -0
- package/src/tools/mail/MailMessage.d.ts +18 -0
- package/src/tools/mail/MailMessage.d.ts.map +1 -0
- package/src/tools/mail/MailMessage.js +75 -0
- package/src/tools/mail/drivers/Cloudflare.d.ts +13 -0
- package/src/tools/mail/drivers/Cloudflare.d.ts.map +1 -0
- package/src/tools/mail/drivers/Cloudflare.js +105 -0
- package/src/tools/mail/drivers/Smtp.d.ts +2 -16
- package/src/tools/mail/drivers/Smtp.d.ts.map +1 -1
- package/src/tools/mail/drivers/Smtp.js +1 -64
- package/src/tools/mail/index.d.ts +1 -1
- package/src/tools/mail/index.d.ts.map +1 -1
- package/src/tools/mail/index.js +12 -4
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zintrust/core",
|
|
3
|
-
"version": "1.8.
|
|
3
|
+
"version": "1.8.5",
|
|
4
4
|
"description": "Production-grade TypeScript backend framework for JavaScript",
|
|
5
5
|
"homepage": "https://zintrust.com",
|
|
6
6
|
"repository": {
|
|
@@ -57,16 +57,16 @@
|
|
|
57
57
|
"./package.json": "./package.json"
|
|
58
58
|
},
|
|
59
59
|
"dependencies": {
|
|
60
|
-
"@cloudflare/containers": "^0.3.
|
|
60
|
+
"@cloudflare/containers": "^0.3.4",
|
|
61
61
|
"bcryptjs": "^3.0.3",
|
|
62
|
-
"bullmq": "^5.76.
|
|
62
|
+
"bullmq": "^5.76.8",
|
|
63
63
|
"chalk": "^5.6.2",
|
|
64
64
|
"commander": "^14.0.3",
|
|
65
|
-
"inquirer": "^13.4.
|
|
65
|
+
"inquirer": "^13.4.3",
|
|
66
66
|
"jsonwebtoken": "^9.0.3",
|
|
67
67
|
"mysql2": "^3.22.3",
|
|
68
68
|
"pg": "^8.20.0",
|
|
69
|
-
"tsx": "^4.
|
|
69
|
+
"tsx": "^4.22.0"
|
|
70
70
|
},
|
|
71
71
|
"overrides": {
|
|
72
72
|
"ajv": "^8.18.0",
|
|
@@ -75,7 +75,9 @@
|
|
|
75
75
|
"follow-redirects": "^1.16.0",
|
|
76
76
|
"@tootallnate/once": "3.0.1",
|
|
77
77
|
"node-forge": "^1.4.0",
|
|
78
|
-
"fast-
|
|
78
|
+
"fast-uri": "3.1.2",
|
|
79
|
+
"fast-xml-builder": "1.2.0",
|
|
80
|
+
"fast-xml-parser": "5.8.0",
|
|
79
81
|
"brace-expansion": "^5.0.5",
|
|
80
82
|
"picomatch": "^4.0.4",
|
|
81
83
|
"cross-spawn": "^7.0.5",
|
package/src/cli/CLI.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"CLI.d.ts","sourceRoot":"","sources":["../../../src/cli/CLI.ts"],"names":[],"mappings":"AAAA;;;GAGG;AA2EH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,MAAM,WAAW,IAAI;IACnB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACnC,UAAU,IAAI,OAAO,CAAC;CACvB;AAsQD;;;;;;;GAOG;AACH,eAAO,MAAM,GAAG;cACJ,IAAI;EAed,CAAC"}
|
package/src/cli/CLI.js
CHANGED
|
@@ -21,6 +21,7 @@ import { DeployContainerWorkersCommand } from './commands/DeployContainerWorkers
|
|
|
21
21
|
import { DockerCommand } from './commands/DockerCommand.js';
|
|
22
22
|
import { DockerPushCommand } from './commands/DockerPushCommand.js';
|
|
23
23
|
import { DoctorArchitectureCommand } from './commands/DoctorArchitectureCommand.js';
|
|
24
|
+
import { EmailProxyCommand } from './commands/EmailProxyCommand.js';
|
|
24
25
|
import { EnvKeyGenerateCommand } from './commands/EnvKeyGenerateCommand.js';
|
|
25
26
|
import { FixCommand } from './commands/FixCommand.js';
|
|
26
27
|
import { InitContainerCommand } from './commands/InitContainerCommand.js';
|
|
@@ -135,6 +136,7 @@ const buildCommandRegistry = () => {
|
|
|
135
136
|
JwtDevCommand,
|
|
136
137
|
ProxyCommand.create(),
|
|
137
138
|
D1ProxyCommand.create(),
|
|
139
|
+
EmailProxyCommand.create(),
|
|
138
140
|
KvProxyCommand.create(),
|
|
139
141
|
MySqlProxyCommand.create(),
|
|
140
142
|
PostgresProxyCommand.create(),
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmailProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/EmailProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AA4IrD,eAAO,MAAM,iBAAiB;cAClB,YAAY;EAmBtB,CAAC;AAEH,eAAe,iBAAiB,CAAC"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { findQuotedValue, trimNonEmptyOption } from '../commands/ProxyScaffoldUtils.js';
|
|
2
|
+
import { createWranglerProxyCommand, } from '../commands/WranglerProxyCommandUtils.js';
|
|
3
|
+
import { Env } from '../../config/env.js';
|
|
4
|
+
import { Logger } from '../../config/logger.js';
|
|
5
|
+
const DEFAULT_CONFIG = 'wrangler.jsonc';
|
|
6
|
+
const DEFAULT_COMPATIBILITY_DATE = '2026-03-12';
|
|
7
|
+
const DEFAULT_BINDING = 'SEND_EMAIL';
|
|
8
|
+
const DEFAULT_ENTRY_FILE = 'src/proxy/email/ZintrustEmailProxy.ts';
|
|
9
|
+
const DEFAULT_ROUTE_PATTERN = 'email-proxy.example.com';
|
|
10
|
+
const CORE_PROXY_MODULE = ['@zintrust', 'core', 'proxy'].join('/');
|
|
11
|
+
const parseCsv = (value) => {
|
|
12
|
+
const parsed = (value ?? '')
|
|
13
|
+
.split(',')
|
|
14
|
+
.map((item) => item.trim())
|
|
15
|
+
.filter((item, index, items) => item !== '' && items.indexOf(item) === index);
|
|
16
|
+
return parsed.length === 0 ? undefined : parsed;
|
|
17
|
+
};
|
|
18
|
+
const renderArray = (values) => {
|
|
19
|
+
return `[${values.map((value) => JSON.stringify(value)).join(', ')}]`;
|
|
20
|
+
};
|
|
21
|
+
const resolveConfigValues = (content, options) => {
|
|
22
|
+
const fileContent = content ?? '';
|
|
23
|
+
return {
|
|
24
|
+
binding: trimNonEmptyOption(options.binding) ??
|
|
25
|
+
trimNonEmptyOption(Env.get('MAIL_CLOUDFLARE_BINDING', '')) ??
|
|
26
|
+
findQuotedValue(fileContent, 'MAIL_CLOUDFLARE_BINDING') ??
|
|
27
|
+
findQuotedValue(fileContent, 'name') ??
|
|
28
|
+
DEFAULT_BINDING,
|
|
29
|
+
destinationAddress: trimNonEmptyOption(options.destinationAddress) ??
|
|
30
|
+
trimNonEmptyOption(findQuotedValue(fileContent, 'destination_address')),
|
|
31
|
+
allowedDestinationAddresses: parseCsv(options.allowedDestinationAddresses) ??
|
|
32
|
+
parseCsv(Env.get('MAIL_CLOUDFLARE_ALLOWED_DESTINATION_ADDRESSES', '')),
|
|
33
|
+
allowedSenderAddresses: parseCsv(options.allowedSenderAddresses) ??
|
|
34
|
+
parseCsv(Env.get('MAIL_CLOUDFLARE_ALLOWED_SENDER_ADDRESSES', '')),
|
|
35
|
+
};
|
|
36
|
+
};
|
|
37
|
+
const renderSendEmailBinding = (values) => {
|
|
38
|
+
const lines = [' {', ` "name": "${values.binding}"`];
|
|
39
|
+
if (values.destinationAddress !== undefined) {
|
|
40
|
+
lines.push(` ,"destination_address": "${values.destinationAddress}"`);
|
|
41
|
+
}
|
|
42
|
+
if (values.allowedDestinationAddresses !== undefined) {
|
|
43
|
+
lines.push(` ,"allowed_destination_addresses": ${renderArray(values.allowedDestinationAddresses)}`);
|
|
44
|
+
}
|
|
45
|
+
if (values.allowedSenderAddresses !== undefined) {
|
|
46
|
+
lines.push(` ,"allowed_sender_addresses": ${renderArray(values.allowedSenderAddresses)}`);
|
|
47
|
+
}
|
|
48
|
+
lines.push(' }');
|
|
49
|
+
return lines;
|
|
50
|
+
};
|
|
51
|
+
const renderEmailProxyEnvBlock = (values) => {
|
|
52
|
+
return [
|
|
53
|
+
' "email-proxy": {',
|
|
54
|
+
' "name": "zintrust-email-proxy",',
|
|
55
|
+
' "main": "./src/proxy/email/ZintrustEmailProxy.ts",',
|
|
56
|
+
' "compatibility_flags": ["nodejs_compat"],',
|
|
57
|
+
` "compatibility_date": "${DEFAULT_COMPATIBILITY_DATE}",`,
|
|
58
|
+
' "vars": {',
|
|
59
|
+
` "MAIL_CLOUDFLARE_BINDING": "${values.binding}",`,
|
|
60
|
+
' "ZT_PROXY_SIGNING_WINDOW_MS": "60000",',
|
|
61
|
+
' "ZT_MAX_BODY_BYTES": "131072",',
|
|
62
|
+
' "NODE_ENV": "development"',
|
|
63
|
+
' },',
|
|
64
|
+
' "send_email": [',
|
|
65
|
+
...renderSendEmailBinding(values),
|
|
66
|
+
' ],',
|
|
67
|
+
' // Add routes here when ready:',
|
|
68
|
+
` // "routes": [{ "pattern": "${DEFAULT_ROUTE_PATTERN}", "custom_domain": true }]`,
|
|
69
|
+
' }',
|
|
70
|
+
].join('\n');
|
|
71
|
+
};
|
|
72
|
+
const warnOnMissingSigningSecret = () => {
|
|
73
|
+
const directSecret = trimNonEmptyOption(Env.get('MAIL_CLOUDFLARE_PROXY_SECRET', ''));
|
|
74
|
+
const fallbackSecret = trimNonEmptyOption(Env.get('APP_KEY', ''));
|
|
75
|
+
if (directSecret !== undefined || fallbackSecret !== undefined)
|
|
76
|
+
return;
|
|
77
|
+
Logger.warn('Email proxy signing will fail: the resolved project env does not expose MAIL_CLOUDFLARE_PROXY_SECRET or APP_KEY to the Worker runtime. Signed requests will be rejected with 401 CONFIG_ERROR until one of those keys is set.');
|
|
78
|
+
};
|
|
79
|
+
const addOptions = (command) => {
|
|
80
|
+
command.option('-c, --config <path>', 'Wrangler config file', DEFAULT_CONFIG);
|
|
81
|
+
command.option('--port <port>', 'Local Wrangler dev port', '5777');
|
|
82
|
+
command.option('--watch', 'Auto-restart proxy on file changes');
|
|
83
|
+
command.option('--binding <name>', 'send_email binding name', DEFAULT_BINDING);
|
|
84
|
+
command.option('--destination-address <email>', 'Restrict the binding to one destination');
|
|
85
|
+
command.option('--allowed-destination-addresses <emails>', 'Comma-separated allowlist of destination addresses');
|
|
86
|
+
command.option('--allowed-sender-addresses <emails>', 'Comma-separated allowlist of sender addresses');
|
|
87
|
+
};
|
|
88
|
+
export const EmailProxyCommand = Object.freeze({
|
|
89
|
+
create() {
|
|
90
|
+
return createWranglerProxyCommand({
|
|
91
|
+
name: 'proxy:email',
|
|
92
|
+
aliases: ['email:proxy', 'proxy:cl:mail', 'proxy:cloudflare:mail'],
|
|
93
|
+
description: 'Start the local Cloudflare email proxy Worker via Wrangler and scaffold env.email-proxy in wrangler.jsonc when missing',
|
|
94
|
+
envName: 'email-proxy',
|
|
95
|
+
defaultPort: 5777,
|
|
96
|
+
defaultConfig: DEFAULT_CONFIG,
|
|
97
|
+
compatibilityDate: DEFAULT_COMPATIBILITY_DATE,
|
|
98
|
+
entryFile: DEFAULT_ENTRY_FILE,
|
|
99
|
+
exportName: 'ZintrustEmailProxy',
|
|
100
|
+
moduleSpecifier: CORE_PROXY_MODULE,
|
|
101
|
+
addOptions,
|
|
102
|
+
resolveValues: resolveConfigValues,
|
|
103
|
+
renderEnvBlock: renderEmailProxyEnvBlock,
|
|
104
|
+
afterConfigResolved: warnOnMissingSigningSecret,
|
|
105
|
+
});
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
export default EmailProxyCommand;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrE,OAAO,oBAAoB,CAAC;AAC5B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,0BAA0B,CAAC;AAClC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"ProxyCommand.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/ProxyCommand.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAMrE,OAAO,oBAAoB,CAAC;AAC5B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,oBAAoB,CAAC;AAC5B,OAAO,uBAAuB,CAAC;AAC/B,OAAO,0BAA0B,CAAC;AAClC,OAAO,uBAAuB,CAAC;AAC/B,OAAO,sBAAsB,CAAC;AAgE9B,eAAO,MAAM,YAAY;cACb,YAAY;EAyBtB,CAAC;AAEH,eAAe,YAAY,CAAC"}
|
|
@@ -4,6 +4,7 @@ import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
|
4
4
|
import * as path from '../../node-singletons/path.js';
|
|
5
5
|
import { ProxyRegistry } from '../../proxy/ProxyRegistry.js';
|
|
6
6
|
import '../../proxy/d1/register.js';
|
|
7
|
+
import '../../proxy/email/register.js';
|
|
7
8
|
import '../../proxy/kv/register.js';
|
|
8
9
|
import '../../proxy/mysql/register.js';
|
|
9
10
|
import '../../proxy/postgres/register.js';
|
|
@@ -11,6 +12,11 @@ import '../../proxy/redis/register.js';
|
|
|
11
12
|
import '../../proxy/smtp/register.js';
|
|
12
13
|
const PROXY_TARGET_MAP = Object.freeze({
|
|
13
14
|
d1: 'proxy:d1',
|
|
15
|
+
email: 'proxy:email',
|
|
16
|
+
cl: 'proxy:email',
|
|
17
|
+
'cl:mail': 'proxy:email',
|
|
18
|
+
'cloudflare:mail': 'proxy:email',
|
|
19
|
+
'cloudflare-mail': 'proxy:email',
|
|
14
20
|
kv: 'proxy:kv',
|
|
15
21
|
mysql: 'proxy:mysql',
|
|
16
22
|
my: 'proxy:mysql',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WranglerProxyCommandUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/WranglerProxyCommandUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkBrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,2BAA2B,GAAG,cAAc,GAAG;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,+BAA+B,CAAC,OAAO,EAAE,QAAQ,SAAS,2BAA2B,IAAI;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC3E,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,OAAO,EAAE,eAAe,MAAM,KAAG,IAIrF,CAAC;AAMF,eAAO,MAAM,0BAA0B,GAAI,OAAO,EAAE,QAAQ,SAAS,2BAA2B,EAC9F,OAAO,+BAA+B,CAAC,OAAO,EAAE,QAAQ,CAAC,KACxD,
|
|
1
|
+
{"version":3,"file":"WranglerProxyCommandUtils.d.ts","sourceRoot":"","sources":["../../../../src/cli/commands/WranglerProxyCommandUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkBrE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,MAAM,MAAM,2BAA2B,GAAG,cAAc,GAAG;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB,CAAC;AAEF,KAAK,+BAA+B,CAAC,OAAO,EAAE,QAAQ,SAAS,2BAA2B,IAAI;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAC;IACvC,aAAa,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;IAC3E,cAAc,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC;IAC5C,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,KAAK,IAAI,CAAC;CACjD,CAAC;AAEF,eAAO,MAAM,2BAA2B,GAAI,SAAS,OAAO,EAAE,eAAe,MAAM,KAAG,IAIrF,CAAC;AAMF,eAAO,MAAM,0BAA0B,GAAI,OAAO,EAAE,QAAQ,SAAS,2BAA2B,EAC9F,OAAO,+BAA+B,CAAC,OAAO,EAAE,QAAQ,CAAC,KACxD,YAwFF,CAAC"}
|
|
@@ -23,7 +23,8 @@ export const createWranglerProxyCommand = (input) => {
|
|
|
23
23
|
execute: async (options) => {
|
|
24
24
|
const typedOptions = options;
|
|
25
25
|
await maybeRunProxyWatchMode(typedOptions.watch);
|
|
26
|
-
const port = parseIntOption(typedOptions.port
|
|
26
|
+
const port = parseIntOption(typedOptions.port ??
|
|
27
|
+
(input.defaultPort === undefined ? undefined : String(input.defaultPort)), 'port');
|
|
27
28
|
const cwd = process.cwd();
|
|
28
29
|
const projectRoot = ensureProxyEnvLoadedForCwd(cwd);
|
|
29
30
|
const entrypoint = ensureProxyEntrypoint({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/env.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../../src/cli/scaffolding/env.ts"],"names":[],"mappings":"AA0iBA,eAAO,MAAM,OAAO,GAClB,MAAM,MAAM,EACZ,MAAM,MAAM,EACZ,SAAS,MAAM,EACf,QAAQ,MAAM,EACd,oBAAoB,MAAM,EAC1B,SAAS,MAAM,EAAE,EACjB,cAAc,MAAM,KACnB,MAAM,EAWR,CAAC"}
|
|
@@ -430,6 +430,11 @@ const LoggingAndMail = () => [
|
|
|
430
430
|
'MAIL_CONNECTION=',
|
|
431
431
|
'MAIL_FROM_ADDRESS=',
|
|
432
432
|
'MAIL_FROM_NAME=',
|
|
433
|
+
'MAIL_CLOUDFLARE_BINDING=SEND_EMAIL',
|
|
434
|
+
'MAIL_CLOUDFLARE_PROXY_URL=',
|
|
435
|
+
'MAIL_CLOUDFLARE_PROXY_KEY_ID=',
|
|
436
|
+
'MAIL_CLOUDFLARE_PROXY_SECRET=',
|
|
437
|
+
'MAIL_CLOUDFLARE_PROXY_TIMEOUT_MS=30000',
|
|
433
438
|
'MAIL_HOST=',
|
|
434
439
|
'MAIL_PORT=587',
|
|
435
440
|
'MAIL_USERNAME=',
|
package/src/config/env.d.ts
CHANGED
|
@@ -116,6 +116,24 @@ export declare const Env: Readonly<{
|
|
|
116
116
|
SMTP_PROXY_REQUIRE_SIGNING: boolean;
|
|
117
117
|
SMTP_PROXY_SIGNING_WINDOW_MS: number;
|
|
118
118
|
USE_SMTP_PROXY: boolean;
|
|
119
|
+
MAIL_DRIVER: string;
|
|
120
|
+
MAIL_CONNECTION: string;
|
|
121
|
+
MAIL_FROM_ADDRESS: string;
|
|
122
|
+
MAIL_FROM_NAME: string;
|
|
123
|
+
MAIL_CLOUDFLARE_BINDING: string;
|
|
124
|
+
MAIL_CLOUDFLARE_PROXY_URL: string;
|
|
125
|
+
MAIL_CLOUDFLARE_PROXY_KEY_ID: string;
|
|
126
|
+
MAIL_CLOUDFLARE_PROXY_SECRET: string;
|
|
127
|
+
MAIL_CLOUDFLARE_PROXY_TIMEOUT_MS: number;
|
|
128
|
+
MAIL_HOST: string;
|
|
129
|
+
MAIL_PORT: number;
|
|
130
|
+
MAIL_USERNAME: string;
|
|
131
|
+
MAIL_PASSWORD: string;
|
|
132
|
+
MAIL_SECURE: string;
|
|
133
|
+
SENDGRID_API_KEY: string;
|
|
134
|
+
MAILGUN_API_KEY: string;
|
|
135
|
+
MAILGUN_DOMAIN: string;
|
|
136
|
+
MAILGUN_BASE_URL: string;
|
|
119
137
|
MONGODB_PROXY_URL: string;
|
|
120
138
|
MONGODB_PROXY_HOST: string;
|
|
121
139
|
MONGODB_PROXY_PORT: number;
|
package/src/config/env.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAsNF,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,SAAwB,CAAC;AAEzE,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,MAKzE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAKlD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,KAAG,OAGjC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAKlD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAEvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,gBAAyC,CAAC;AAG9E,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAIxD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAMrC,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,cAAc,MAAM,KAAG,MAI1D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAI7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,eAAe,OAAO,KAAG,OAI7D,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAGhD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,IAInC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,SAAS,GAAG,IAAI,KAAG,IAEpD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAOhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAKjE,CAAC;AACF,eAAO,MAAM,mBAAmB,QAAuC,CAAC;AAKxE,eAAO,MAAM,GAAG;eAnES,MAAM,iBAAiB,MAAM,KAAG,MAAM;uBA1B9B,MAAM,KAAG,MAAM,GAAG,SAAS;kBAwChC,MAAM,gBAAgB,MAAM,KAAG,MAAM;mBAYpC,MAAM,iBAAiB,OAAO,KAAG,OAAO;oBANvC,MAAM,iBAAiB,MAAM,KAAG,MAAM;eAvC3C,MAAM,KAAG,OAAO;eAmDhB,MAAM,SAAS,MAAM,KAAG,IAAI;iBAK1B,MAAM,KAAG,IAAI;wBAMN,SAAS,GAAG,IAAI,KAAG,IAAI;oBAI7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;uBA7DjB,MAAM,KAAG,MAAM,GAAG,SAAS;2BAOzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;4BAIrB,gBAAgB;cAuFN,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC
|
|
1
|
+
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/config/env.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAGhD,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAClF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAsNF,eAAO,MAAM,cAAc,QAAO,WAAW,GAAG,SAAwB,CAAC;AAEzE,eAAO,MAAM,mBAAmB,GAAI,UAAU,MAAM,EAAE,WAAW,MAAM,KAAG,MAKzE,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAKlD,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,KAAG,OAGjC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,MAAM,KAAG,MAAM,GAAG,SAKlD,CAAC;AAEF,eAAO,MAAM,eAAe,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAEvD,CAAC;AAEF,eAAO,MAAM,gBAAgB,QAAO,gBAAyC,CAAC;AAG9E,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAIxD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,MAMrC,CAAC;AAEF,eAAO,MAAM,MAAM,GAAI,KAAK,MAAM,EAAE,cAAc,MAAM,KAAG,MAI1D,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,KAAK,MAAM,EAAE,eAAe,MAAM,KAAG,MAI7D,CAAC;AAEF,eAAO,MAAM,OAAO,GAAI,KAAK,MAAM,EAAE,eAAe,OAAO,KAAG,OAI7D,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,MAAM,EAAE,OAAO,MAAM,KAAG,IAGhD,CAAC;AAEF,eAAO,MAAM,KAAK,GAAI,KAAK,MAAM,KAAG,IAInC,CAAC;AAEF,eAAO,MAAM,SAAS,GAAI,QAAQ,SAAS,GAAG,IAAI,KAAG,IAEpD,CAAC;AAEF,eAAO,MAAM,QAAQ,QAAO,MAAM,CAAC,MAAM,EAAE,MAAM,CAOhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,QAAO,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAKjE,CAAC;AACF,eAAO,MAAM,mBAAmB,QAAuC,CAAC;AAKxE,eAAO,MAAM,GAAG;eAnES,MAAM,iBAAiB,MAAM,KAAG,MAAM;uBA1B9B,MAAM,KAAG,MAAM,GAAG,SAAS;kBAwChC,MAAM,gBAAgB,MAAM,KAAG,MAAM;mBAYpC,MAAM,iBAAiB,OAAO,KAAG,OAAO;oBANvC,MAAM,iBAAiB,MAAM,KAAG,MAAM;eAvC3C,MAAM,KAAG,OAAO;eAmDhB,MAAM,SAAS,MAAM,KAAG,IAAI;iBAK1B,MAAM,KAAG,IAAI;wBAMN,SAAS,GAAG,IAAI,KAAG,IAAI;oBAI7B,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;uBA7DjB,MAAM,KAAG,MAAM,GAAG,SAAS;2BAOzB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;4BAIrB,gBAAgB;cAuFN,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAyPpB,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoFxF,CAAC;AAEH,eAAO,MAAM,aAAa,QAAO,MAchC,CAAC"}
|
package/src/config/env.js
CHANGED
|
@@ -356,6 +356,25 @@ export const Env = Object.freeze({
|
|
|
356
356
|
SMTP_PROXY_REQUIRE_SIGNING: getBool('SMTP_PROXY_REQUIRE_SIGNING', true),
|
|
357
357
|
SMTP_PROXY_SIGNING_WINDOW_MS: getInt('SMTP_PROXY_SIGNING_WINDOW_MS', getInt('ZT_PROXY_SIGNING_WINDOW_MS', 60000)),
|
|
358
358
|
USE_SMTP_PROXY: getBool('USE_SMTP_PROXY', false),
|
|
359
|
+
// Mail
|
|
360
|
+
MAIL_DRIVER: get('MAIL_DRIVER', 'disabled'),
|
|
361
|
+
MAIL_CONNECTION: get('MAIL_CONNECTION', ''),
|
|
362
|
+
MAIL_FROM_ADDRESS: get('MAIL_FROM_ADDRESS', ''),
|
|
363
|
+
MAIL_FROM_NAME: get('MAIL_FROM_NAME', ''),
|
|
364
|
+
MAIL_CLOUDFLARE_BINDING: get('MAIL_CLOUDFLARE_BINDING', get('MAIL_CL_BINDING', 'SEND_EMAIL')),
|
|
365
|
+
MAIL_CLOUDFLARE_PROXY_URL: get('MAIL_CLOUDFLARE_PROXY_URL', ''),
|
|
366
|
+
MAIL_CLOUDFLARE_PROXY_KEY_ID: get('MAIL_CLOUDFLARE_PROXY_KEY_ID', PROXY_KEY_ID_FALLBACK),
|
|
367
|
+
MAIL_CLOUDFLARE_PROXY_SECRET: get('MAIL_CLOUDFLARE_PROXY_SECRET', PROXY_SECRET_FALLBACK),
|
|
368
|
+
MAIL_CLOUDFLARE_PROXY_TIMEOUT_MS: getInt('MAIL_CLOUDFLARE_PROXY_TIMEOUT_MS', ZT_PROXY_TIMEOUT_MS),
|
|
369
|
+
MAIL_HOST: get('MAIL_HOST', ''),
|
|
370
|
+
MAIL_PORT: getInt('MAIL_PORT', 587),
|
|
371
|
+
MAIL_USERNAME: get('MAIL_USERNAME', ''),
|
|
372
|
+
MAIL_PASSWORD: get('MAIL_PASSWORD', ''),
|
|
373
|
+
MAIL_SECURE: get('MAIL_SECURE', ''),
|
|
374
|
+
SENDGRID_API_KEY: get('SENDGRID_API_KEY', ''),
|
|
375
|
+
MAILGUN_API_KEY: get('MAILGUN_API_KEY', ''),
|
|
376
|
+
MAILGUN_DOMAIN: get('MAILGUN_DOMAIN', ''),
|
|
377
|
+
MAILGUN_BASE_URL: get('MAILGUN_BASE_URL', 'https://api.mailgun.net'),
|
|
359
378
|
MONGODB_PROXY_URL: get('MONGODB_PROXY_URL', ''),
|
|
360
379
|
MONGODB_PROXY_HOST: get('MONGODB_PROXY_HOST', '127.0.0.1'),
|
|
361
380
|
MONGODB_PROXY_PORT: getInt('MONGODB_PROXY_PORT', 8792),
|
package/src/config/mail.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/config/mail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAItE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"mail.d.ts","sourceRoot":"","sources":["../../../src/config/mail.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAItE,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAC3C,CAAC,CAAC;AAsGH,QAAA,MAAM,gBAAgB,QAAO;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IAC1C,SAAS,EAAE,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,EAAE,MAAM,KAAK,gBAAgB,CAAC;CA6CvE,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAkB7D,eAAO,MAAM,UAAU,EAAE,UAYvB,CAAC"}
|
package/src/config/mail.js
CHANGED
|
@@ -39,10 +39,16 @@ const getMailDriver = (config, name) => {
|
|
|
39
39
|
* Create base mail drivers configuration
|
|
40
40
|
*/
|
|
41
41
|
const createMailDrivers = () => {
|
|
42
|
+
const cloudflareDriver = {
|
|
43
|
+
driver: 'cl',
|
|
44
|
+
binding: Env.get('MAIL_CLOUDFLARE_BINDING', Env.get('MAIL_CL_BINDING', 'SEND_EMAIL')).trim(),
|
|
45
|
+
};
|
|
42
46
|
return {
|
|
43
47
|
disabled: {
|
|
44
48
|
driver: 'disabled',
|
|
45
49
|
},
|
|
50
|
+
cl: cloudflareDriver,
|
|
51
|
+
cloudflare: cloudflareDriver,
|
|
46
52
|
sendgrid: {
|
|
47
53
|
driver: 'sendgrid',
|
|
48
54
|
apiKey: Env.get('SENDGRID_API_KEY', ''),
|
package/src/config/type.d.ts
CHANGED
|
@@ -181,7 +181,7 @@ export type MiddlewareConfigType = {
|
|
|
181
181
|
global: MiddlewareFn[];
|
|
182
182
|
route: Record<string, MiddlewareFn>;
|
|
183
183
|
};
|
|
184
|
-
export type MailDriverName = 'disabled' | 'sendgrid' | 'smtp' | 'ses' | 'mailgun' | 'nodemailer';
|
|
184
|
+
export type MailDriverName = 'disabled' | 'sendgrid' | 'smtp' | 'ses' | 'mailgun' | 'nodemailer' | 'cl';
|
|
185
185
|
export type DisabledMailDriverConfig = {
|
|
186
186
|
driver: 'disabled';
|
|
187
187
|
};
|
|
@@ -211,11 +211,15 @@ export type NodemailerMailDriverConfig = {
|
|
|
211
211
|
password: string;
|
|
212
212
|
secure: boolean | 'starttls';
|
|
213
213
|
};
|
|
214
|
+
export type CloudflareMailDriverConfig = {
|
|
215
|
+
driver: 'cl';
|
|
216
|
+
binding: string;
|
|
217
|
+
};
|
|
214
218
|
export type SesMailDriverConfig = {
|
|
215
219
|
driver: 'ses';
|
|
216
220
|
region: string;
|
|
217
221
|
};
|
|
218
|
-
export type MailDriverConfig = DisabledMailDriverConfig | SendGridMailDriverConfig | MailgunMailDriverConfig | SmtpMailDriverConfig | NodemailerMailDriverConfig | SesMailDriverConfig;
|
|
222
|
+
export type MailDriverConfig = DisabledMailDriverConfig | SendGridMailDriverConfig | MailgunMailDriverConfig | SmtpMailDriverConfig | NodemailerMailDriverConfig | CloudflareMailDriverConfig | SesMailDriverConfig;
|
|
219
223
|
export type MailDrivers = Record<string, MailDriverConfig>;
|
|
220
224
|
export type MailConfigInput = {
|
|
221
225
|
/**
|
package/src/config/type.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/config/type.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"type.d.ts","sourceRoot":"","sources":["../../../src/config/type.ts"],"names":[],"mappings":"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"}
|
package/src/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @zintrust/core v1.8.
|
|
2
|
+
* @zintrust/core v1.8.5
|
|
3
3
|
*
|
|
4
4
|
* ZinTrust Framework - Production-Grade TypeScript Backend
|
|
5
5
|
* Built for performance, type safety, and exceptional developer experience
|
|
6
6
|
*
|
|
7
7
|
* Build Information:
|
|
8
|
-
* Built: 2026-05-
|
|
8
|
+
* Built: 2026-05-15T16:02:47.614Z
|
|
9
9
|
* Node: >=20.0.0
|
|
10
10
|
* License: MIT
|
|
11
11
|
*
|
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* Available at runtime for debugging and health checks
|
|
22
22
|
*/
|
|
23
23
|
export const ZINTRUST_VERSION = '0.1.41';
|
|
24
|
-
export const ZINTRUST_BUILD_DATE = '2026-05-
|
|
24
|
+
export const ZINTRUST_BUILD_DATE = '2026-05-15T16:02:47.579Z'; // Replaced during build
|
|
25
25
|
export { Application } from './boot/Application.js';
|
|
26
26
|
export { AwsSigV4 } from './common/index.js';
|
|
27
27
|
export { SignedRequest } from './security/SignedRequest.js';
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
type SendEmailBinding = {
|
|
2
|
+
send: (message: unknown) => Promise<unknown>;
|
|
3
|
+
};
|
|
4
|
+
type EmailProxyEnv = {
|
|
5
|
+
APP_KEY?: string;
|
|
6
|
+
MAIL_CLOUDFLARE_PROXY_SECRET?: string;
|
|
7
|
+
MAIL_CLOUDFLARE_BINDING?: string;
|
|
8
|
+
SEND_EMAIL?: SendEmailBinding;
|
|
9
|
+
SEB?: SendEmailBinding;
|
|
10
|
+
ZT_NONCES?: unknown;
|
|
11
|
+
ZT_PROXY_SIGNING_WINDOW_MS?: string;
|
|
12
|
+
ZT_MAX_BODY_BYTES?: string;
|
|
13
|
+
} & Record<string, unknown>;
|
|
14
|
+
export declare const ZintrustEmailProxy: Readonly<{
|
|
15
|
+
_ZINTRUST_CLOUDFLARE_EMAIL_PROXY_VERSION: "0.1.15";
|
|
16
|
+
_ZINTRUST_CLOUDFLARE_EMAIL_PROXY_BUILD_DATE: "__BUILD_DATE__";
|
|
17
|
+
fetch(request: Request, env: EmailProxyEnv): Promise<Response>;
|
|
18
|
+
}>;
|
|
19
|
+
export default ZintrustEmailProxy;
|
|
20
|
+
//# sourceMappingURL=ZintrustEmailProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ZintrustEmailProxy.d.ts","sourceRoot":"","sources":["../../../../src/proxy/email/ZintrustEmailProxy.ts"],"names":[],"mappings":"AAUA,KAAK,gBAAgB,GAAG;IACtB,IAAI,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;CAC9C,CAAC;AAMF,KAAK,aAAa,GAAG;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,4BAA4B,CAAC,EAAE,MAAM,CAAC;IACtC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AA8I5B,eAAO,MAAM,kBAAkB;;;mBAGR,OAAO,OAAO,aAAa,GAAG,OAAO,CAAC,QAAQ,CAAC;EAcpE,CAAC;AAEH,eAAe,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
2
|
+
import { isArray, isNonEmptyString, isObject } from '../../helper/index.js';
|
|
3
|
+
import { readAndVerifyJson, toErrorResponse } from '../CloudflareProxyShared.js';
|
|
4
|
+
import { RequestValidator } from '../RequestValidator.js';
|
|
5
|
+
import { buildRfc2822Message, } from '../../tools/mail/MailMessage.js';
|
|
6
|
+
const DEFAULT_SIGNING_WINDOW_MS = 60_000;
|
|
7
|
+
const DEFAULT_MAX_BODY_BYTES = 128 * 1024;
|
|
8
|
+
const normalizeRecipients = (to) => (Array.isArray(to) ? to : [to]);
|
|
9
|
+
const importCloudflareEmail = async () => {
|
|
10
|
+
try {
|
|
11
|
+
return (await import('cloudflare:email'));
|
|
12
|
+
}
|
|
13
|
+
catch {
|
|
14
|
+
throw ErrorFactory.createConfigError('Cloudflare email runtime API is unavailable');
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
const resolveBinding = (env, requestedBinding) => {
|
|
18
|
+
const candidateNames = [
|
|
19
|
+
requestedBinding,
|
|
20
|
+
env.MAIL_CLOUDFLARE_BINDING,
|
|
21
|
+
'SEND_EMAIL',
|
|
22
|
+
'SEB',
|
|
23
|
+
].filter((value, index, values) => typeof value === 'string' && value.trim() !== '' && values.indexOf(value) === index);
|
|
24
|
+
for (const name of candidateNames) {
|
|
25
|
+
const binding = env[name];
|
|
26
|
+
if (binding !== undefined && typeof binding.send === 'function')
|
|
27
|
+
return binding;
|
|
28
|
+
}
|
|
29
|
+
throw ErrorFactory.createConfigError(`Missing Cloudflare send_email binding (tried: ${candidateNames.length > 0 ? candidateNames.join(', ') : 'none'})`);
|
|
30
|
+
};
|
|
31
|
+
const decodeAttachment = (payload) => ({
|
|
32
|
+
filename: payload.filename,
|
|
33
|
+
content: Buffer.from(payload.contentBase64, 'base64'),
|
|
34
|
+
});
|
|
35
|
+
const parseAttachments = (value) => {
|
|
36
|
+
if (value === undefined)
|
|
37
|
+
return undefined;
|
|
38
|
+
if (!isArray(value))
|
|
39
|
+
throw ErrorFactory.createValidationError('attachments must be an array');
|
|
40
|
+
return value.map((entry) => {
|
|
41
|
+
if (!isObject(entry)) {
|
|
42
|
+
throw ErrorFactory.createValidationError('attachments entries must be objects');
|
|
43
|
+
}
|
|
44
|
+
const filename = entry['filename'];
|
|
45
|
+
const contentBase64 = entry['contentBase64'];
|
|
46
|
+
if (!isNonEmptyString(filename)) {
|
|
47
|
+
throw ErrorFactory.createValidationError('attachment filename is required');
|
|
48
|
+
}
|
|
49
|
+
if (!isNonEmptyString(contentBase64)) {
|
|
50
|
+
throw ErrorFactory.createValidationError('attachment contentBase64 is required');
|
|
51
|
+
}
|
|
52
|
+
return decodeAttachment({ filename, contentBase64 });
|
|
53
|
+
});
|
|
54
|
+
};
|
|
55
|
+
const parseMessage = (payload) => {
|
|
56
|
+
if (!isObject(payload))
|
|
57
|
+
throw ErrorFactory.createValidationError('message is required');
|
|
58
|
+
const fromRaw = payload['from'];
|
|
59
|
+
if (!isObject(fromRaw) || !isNonEmptyString(fromRaw['email'])) {
|
|
60
|
+
throw ErrorFactory.createValidationError('message.from.email is required');
|
|
61
|
+
}
|
|
62
|
+
const toRaw = payload['to'];
|
|
63
|
+
if (!isNonEmptyString(payload['subject']) ||
|
|
64
|
+
!isNonEmptyString(payload['text']) ||
|
|
65
|
+
!(isNonEmptyString(toRaw) || (isArray(toRaw) && toRaw.every((item) => isNonEmptyString(item))))) {
|
|
66
|
+
throw ErrorFactory.createValidationError('message.to, message.subject, and message.text are required');
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
to: toRaw,
|
|
70
|
+
from: {
|
|
71
|
+
email: fromRaw['email'],
|
|
72
|
+
name: isNonEmptyString(fromRaw['name']) ? fromRaw['name'] : undefined,
|
|
73
|
+
},
|
|
74
|
+
subject: payload['subject'],
|
|
75
|
+
text: payload['text'],
|
|
76
|
+
html: isNonEmptyString(payload['html']) ? payload['html'] : undefined,
|
|
77
|
+
attachments: parseAttachments(payload['attachments']),
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
const handleSend = async (request, env) => {
|
|
81
|
+
const check = await readAndVerifyJson(request, env, {
|
|
82
|
+
secretEnvVar: 'MAIL_CLOUDFLARE_PROXY_SECRET',
|
|
83
|
+
missingSecretStatus: 401,
|
|
84
|
+
missingSecretMessage: 'Missing signing secret (MAIL_CLOUDFLARE_PROXY_SECRET or APP_KEY)',
|
|
85
|
+
defaultSigningWindowMs: DEFAULT_SIGNING_WINDOW_MS,
|
|
86
|
+
defaultMaxBodyBytes: DEFAULT_MAX_BODY_BYTES,
|
|
87
|
+
});
|
|
88
|
+
if (!check.ok)
|
|
89
|
+
return check.response;
|
|
90
|
+
try {
|
|
91
|
+
const payload = check.payload;
|
|
92
|
+
if (!isObject(payload)) {
|
|
93
|
+
return toErrorResponse(400, 'VALIDATION_ERROR', 'Invalid body');
|
|
94
|
+
}
|
|
95
|
+
const message = parseMessage(payload['message']);
|
|
96
|
+
const requestedBinding = isNonEmptyString(payload['binding']) ? payload['binding'] : undefined;
|
|
97
|
+
const binding = resolveBinding(env, requestedBinding);
|
|
98
|
+
const { EmailMessage } = await importCloudflareEmail();
|
|
99
|
+
const raw = buildRfc2822Message(message);
|
|
100
|
+
await Promise.all(normalizeRecipients(message.to).map(async (recipient) => binding.send(new EmailMessage(message.from.email, recipient, raw))));
|
|
101
|
+
return new Response(JSON.stringify({ ok: true }), {
|
|
102
|
+
status: 200,
|
|
103
|
+
headers: {
|
|
104
|
+
'Content-Type': 'application/json; charset=utf-8',
|
|
105
|
+
'Cache-Control': 'no-store',
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
const message = error instanceof Error ? error.message : 'Email send failed';
|
|
111
|
+
return toErrorResponse(500, 'EMAIL_SEND_ERROR', message);
|
|
112
|
+
}
|
|
113
|
+
};
|
|
114
|
+
export const ZintrustEmailProxy = Object.freeze({
|
|
115
|
+
_ZINTRUST_CLOUDFLARE_EMAIL_PROXY_VERSION: '0.1.15',
|
|
116
|
+
_ZINTRUST_CLOUDFLARE_EMAIL_PROXY_BUILD_DATE: '__BUILD_DATE__',
|
|
117
|
+
async fetch(request, env) {
|
|
118
|
+
const url = new URL(request.url);
|
|
119
|
+
const methodError = RequestValidator.requirePost(request.method);
|
|
120
|
+
if (methodError !== null) {
|
|
121
|
+
return toErrorResponse(405, methodError.code, 'Method not allowed');
|
|
122
|
+
}
|
|
123
|
+
if (url.pathname === '/zin/mail/cloudflare/send') {
|
|
124
|
+
return handleSend(request, env);
|
|
125
|
+
}
|
|
126
|
+
return toErrorResponse(404, 'NOT_FOUND', 'Not found');
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
export default ZintrustEmailProxy;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../../../src/proxy/email/register.ts"],"names":[],"mappings":""}
|
package/src/proxy.d.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ZintrustD1Proxy } from './proxy/d1/ZintrustD1Proxy';
|
|
2
|
+
export { ZintrustEmailProxy } from './proxy/email/ZintrustEmailProxy';
|
|
2
3
|
export { ErrorHandler } from './proxy/ErrorHandler';
|
|
3
4
|
export { ZintrustKvProxy } from './proxy/kv/ZintrustKvProxy';
|
|
4
5
|
export { RequestValidator } from './proxy/RequestValidator';
|
package/src/proxy.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,kBAAkB,EAAE,MAAM,iCAAiC,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC"}
|
package/src/proxy.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
export { ZintrustD1Proxy } from './proxy/d1/ZintrustD1Proxy.js';
|
|
2
|
+
export { ZintrustEmailProxy } from './proxy/email/ZintrustEmailProxy.js';
|
|
2
3
|
export { ErrorHandler } from './proxy/ErrorHandler.js';
|
|
3
4
|
export { ZintrustKvProxy } from './proxy/kv/ZintrustKvProxy.js';
|
|
4
5
|
export { RequestValidator } from './proxy/RequestValidator.js';
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type MailAddress = {
|
|
2
|
+
email: string;
|
|
3
|
+
name?: string;
|
|
4
|
+
};
|
|
5
|
+
export type MailAttachment = {
|
|
6
|
+
filename: string;
|
|
7
|
+
content: Buffer;
|
|
8
|
+
};
|
|
9
|
+
export type MailMessage = {
|
|
10
|
+
to: string | string[];
|
|
11
|
+
from: MailAddress;
|
|
12
|
+
subject: string;
|
|
13
|
+
text: string;
|
|
14
|
+
html?: string;
|
|
15
|
+
attachments?: MailAttachment[];
|
|
16
|
+
};
|
|
17
|
+
export declare const buildRfc2822Message: (msg: MailMessage) => string;
|
|
18
|
+
//# sourceMappingURL=MailMessage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MailMessage.d.ts","sourceRoot":"","sources":["../../../../src/tools/mail/MailMessage.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnE,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,IAAI,EAAE,WAAW,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;CAChC,CAAC;AAgBF,eAAO,MAAM,mBAAmB,GAAI,KAAK,WAAW,KAAG,MAuFtD,CAAC"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { generateUuid } from '../../common/utility.js';
|
|
2
|
+
import { isNonEmptyString } from '../../helper/index.js';
|
|
3
|
+
const normalizeRecipients = (to) => (Array.isArray(to) ? to : [to]);
|
|
4
|
+
const resolveMessageIdDomain = (senderEmail) => {
|
|
5
|
+
const domainCandidate = senderEmail.split('@')[1]?.trim().toLowerCase() ?? '';
|
|
6
|
+
if (!isNonEmptyString(domainCandidate))
|
|
7
|
+
return 'localhost';
|
|
8
|
+
const normalizedDomain = domainCandidate.replace(/^<+|>+$/g, '').replace(/\.+$/g, '');
|
|
9
|
+
if (!isNonEmptyString(normalizedDomain) || !normalizedDomain.includes('.')) {
|
|
10
|
+
return normalizedDomain === '' ? 'localhost' : normalizedDomain;
|
|
11
|
+
}
|
|
12
|
+
return normalizedDomain;
|
|
13
|
+
};
|
|
14
|
+
export const buildRfc2822Message = (msg) => {
|
|
15
|
+
const toList = normalizeRecipients(msg.to);
|
|
16
|
+
const fromNameRaw = msg.from.name;
|
|
17
|
+
const fromName = typeof fromNameRaw === 'string' ? fromNameRaw.trim() : '';
|
|
18
|
+
const fromHeader = fromName === '' ? msg.from.email : `${fromName} <${msg.from.email}>`;
|
|
19
|
+
const toHeader = toList.join(', ');
|
|
20
|
+
const subject = msg.subject;
|
|
21
|
+
const messageId = `<${generateUuid().replaceAll('-', '')}@${resolveMessageIdDomain(msg.from.email)}>`;
|
|
22
|
+
const headers = [
|
|
23
|
+
`From: ${fromHeader}`,
|
|
24
|
+
`To: ${toHeader}`,
|
|
25
|
+
`Subject: ${subject}`,
|
|
26
|
+
`Date: ${new Date().toUTCString()}`,
|
|
27
|
+
`Message-ID: ${messageId}`,
|
|
28
|
+
'MIME-Version: 1.0',
|
|
29
|
+
];
|
|
30
|
+
const attachParts = (attachments, innerBody) => {
|
|
31
|
+
const mixedBoundary = `mixed_${generateUuid().replaceAll('-', '')}`;
|
|
32
|
+
const lines = [];
|
|
33
|
+
lines.push(`Content-Type: multipart/mixed; boundary="${mixedBoundary}"`, '', `--${mixedBoundary}`, innerBody);
|
|
34
|
+
for (const attachment of attachments) {
|
|
35
|
+
const b64 = attachment.content.toString('base64');
|
|
36
|
+
lines.push(`--${mixedBoundary}`, `Content-Type: application/octet-stream; name="${attachment.filename}"`, 'Content-Transfer-Encoding: base64', `Content-Disposition: attachment; filename="${attachment.filename}"`, '');
|
|
37
|
+
for (let index = 0; index < b64.length; index += 76) {
|
|
38
|
+
lines.push(b64.slice(index, index + 76));
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
lines.push(`--${mixedBoundary}--`, '');
|
|
42
|
+
return lines.join('\r\n');
|
|
43
|
+
};
|
|
44
|
+
if (typeof msg.html === 'string' && msg.html !== '') {
|
|
45
|
+
const boundary = `zintrust_${generateUuid().replaceAll('-', '')}`;
|
|
46
|
+
headers.push(`Content-Type: multipart/alternative; boundary="${boundary}"`);
|
|
47
|
+
const parts = [
|
|
48
|
+
`--${boundary}`,
|
|
49
|
+
'Content-Type: text/plain; charset=utf-8',
|
|
50
|
+
'Content-Transfer-Encoding: 7bit',
|
|
51
|
+
'',
|
|
52
|
+
msg.text,
|
|
53
|
+
`--${boundary}`,
|
|
54
|
+
'Content-Type: text/html; charset=utf-8',
|
|
55
|
+
'Content-Transfer-Encoding: 7bit',
|
|
56
|
+
'',
|
|
57
|
+
msg.html,
|
|
58
|
+
`--${boundary}--`,
|
|
59
|
+
'',
|
|
60
|
+
];
|
|
61
|
+
const inner = `${parts.join('\r\n')}`;
|
|
62
|
+
if (msg.attachments && msg.attachments.length > 0) {
|
|
63
|
+
const mixed = attachParts(msg.attachments, inner);
|
|
64
|
+
return `${headers.join('\r\n')}\r\n\r\n${mixed}`;
|
|
65
|
+
}
|
|
66
|
+
return `${headers.join('\r\n')}\r\n\r\n${inner}`;
|
|
67
|
+
}
|
|
68
|
+
if (msg.attachments && msg.attachments.length > 0) {
|
|
69
|
+
const inner = ['Content-Type: text/plain; charset=utf-8', '', msg.text, ''].join('\r\n');
|
|
70
|
+
const mixed = attachParts(msg.attachments, inner);
|
|
71
|
+
return `${headers.join('\r\n')}\r\n\r\n${mixed}`;
|
|
72
|
+
}
|
|
73
|
+
headers.push('Content-Type: text/plain; charset=utf-8');
|
|
74
|
+
return `${headers.join('\r\n')}\r\n\r\n${msg.text}\r\n`;
|
|
75
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type MailMessage } from '../../mail/MailMessage';
|
|
2
|
+
export type CloudflareMailConfig = {
|
|
3
|
+
driver: 'cl';
|
|
4
|
+
binding: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const CloudflareDriver: Readonly<{
|
|
7
|
+
send(config: CloudflareMailConfig, message: MailMessage): Promise<{
|
|
8
|
+
ok: boolean;
|
|
9
|
+
messageId?: string;
|
|
10
|
+
}>;
|
|
11
|
+
}>;
|
|
12
|
+
export default CloudflareDriver;
|
|
13
|
+
//# sourceMappingURL=Cloudflare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Cloudflare.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/drivers/Cloudflare.ts"],"names":[],"mappings":"AAKA,OAAO,EAAyC,KAAK,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAElG,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,IAAI,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAuIF,eAAO,MAAM,gBAAgB;iBAEjB,oBAAoB,WACnB,WAAW,GACnB,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;EA8B/C,CAAC;AAEH,eAAe,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { RemoteSignedJson } from '../../../common/RemoteSignedJson.js';
|
|
2
|
+
import { Cloudflare } from '../../../config/cloudflare.js';
|
|
3
|
+
import { Env } from '../../../config/env.js';
|
|
4
|
+
import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
|
|
5
|
+
import { buildRfc2822Message } from '../../mail/MailMessage.js';
|
|
6
|
+
const resolveSigningPrefix = (baseUrl) => {
|
|
7
|
+
try {
|
|
8
|
+
const parsed = new URL(baseUrl);
|
|
9
|
+
const path = parsed.pathname.endsWith('/') ? parsed.pathname.slice(0, -1) : parsed.pathname;
|
|
10
|
+
if (path === '' || path === '/')
|
|
11
|
+
return undefined;
|
|
12
|
+
return path;
|
|
13
|
+
}
|
|
14
|
+
catch {
|
|
15
|
+
return undefined;
|
|
16
|
+
}
|
|
17
|
+
};
|
|
18
|
+
const normalizeRecipients = (to) => (Array.isArray(to) ? to : [to]);
|
|
19
|
+
const shouldUseProxy = () => Env.get('MAIL_CLOUDFLARE_PROXY_URL', '').trim() !== '';
|
|
20
|
+
const createRemoteConfig = () => {
|
|
21
|
+
const baseUrl = Env.get('MAIL_CLOUDFLARE_PROXY_URL', '');
|
|
22
|
+
const timeoutMs = Env.getInt('MAIL_CLOUDFLARE_PROXY_TIMEOUT_MS', Env.getInt('ZT_PROXY_TIMEOUT_MS', Env.REQUEST_TIMEOUT));
|
|
23
|
+
return {
|
|
24
|
+
baseUrl,
|
|
25
|
+
keyId: Env.get('MAIL_CLOUDFLARE_PROXY_KEY_ID', ''),
|
|
26
|
+
secret: Env.get('MAIL_CLOUDFLARE_PROXY_SECRET', ''),
|
|
27
|
+
timeoutMs,
|
|
28
|
+
signaturePathPrefixToStrip: resolveSigningPrefix(baseUrl),
|
|
29
|
+
missingUrlMessage: 'Cloudflare mail proxy URL is missing (MAIL_CLOUDFLARE_PROXY_URL)',
|
|
30
|
+
missingCredentialsMessage: 'Cloudflare mail proxy signing credentials are missing (MAIL_CLOUDFLARE_PROXY_KEY_ID / MAIL_CLOUDFLARE_PROXY_SECRET). Fallbacks: APP_NAME and APP_KEY.',
|
|
31
|
+
messages: {
|
|
32
|
+
unauthorized: 'Cloudflare mail proxy unauthorized',
|
|
33
|
+
forbidden: 'Cloudflare mail proxy forbidden',
|
|
34
|
+
rateLimited: 'Cloudflare mail proxy rate limited',
|
|
35
|
+
rejected: 'Cloudflare mail proxy rejected request',
|
|
36
|
+
error: 'Cloudflare mail proxy error',
|
|
37
|
+
timedOut: 'Cloudflare mail proxy request timed out',
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
};
|
|
41
|
+
const serializeMessage = (message) => ({
|
|
42
|
+
to: message.to,
|
|
43
|
+
from: message.from,
|
|
44
|
+
subject: message.subject,
|
|
45
|
+
text: message.text,
|
|
46
|
+
html: message.html,
|
|
47
|
+
attachments: message.attachments?.map((attachment) => ({
|
|
48
|
+
filename: attachment.filename,
|
|
49
|
+
contentBase64: attachment.content.toString('base64'),
|
|
50
|
+
})),
|
|
51
|
+
});
|
|
52
|
+
const sendViaProxy = async (config, message) => {
|
|
53
|
+
const response = await RemoteSignedJson.request(createRemoteConfig(), '/zin/mail/cloudflare/send', {
|
|
54
|
+
binding: config.binding,
|
|
55
|
+
message: serializeMessage(message),
|
|
56
|
+
});
|
|
57
|
+
return {
|
|
58
|
+
ok: response.ok === true,
|
|
59
|
+
messageId: response.messageId,
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
const resolveBinding = (config) => {
|
|
63
|
+
const env = Cloudflare.getWorkersEnv();
|
|
64
|
+
if (env === null) {
|
|
65
|
+
throw ErrorFactory.createConfigError('Cloudflare mail driver requires a Cloudflare Workers runtime with a send_email binding');
|
|
66
|
+
}
|
|
67
|
+
const candidateNames = [config.binding, 'SEND_EMAIL', 'SEB'].filter((name, index, all) => name.trim() !== '' && all.indexOf(name) === index);
|
|
68
|
+
for (const name of candidateNames) {
|
|
69
|
+
const binding = env[name];
|
|
70
|
+
if (binding !== undefined && typeof binding.send === 'function')
|
|
71
|
+
return binding;
|
|
72
|
+
}
|
|
73
|
+
throw ErrorFactory.createConfigError(`Cloudflare mail binding not found. Set MAIL_CLOUDFLARE_BINDING to a Wrangler send_email binding name (tried: ${candidateNames.join(', ')})`);
|
|
74
|
+
};
|
|
75
|
+
const importCloudflareEmail = async () => {
|
|
76
|
+
try {
|
|
77
|
+
return (await import('cloudflare:email'));
|
|
78
|
+
}
|
|
79
|
+
catch {
|
|
80
|
+
throw ErrorFactory.createConfigError('Cloudflare mail driver could not load the cloudflare:email runtime API');
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
export const CloudflareDriver = Object.freeze({
|
|
84
|
+
async send(config, message) {
|
|
85
|
+
const from = message.from.email.trim();
|
|
86
|
+
if (from === '') {
|
|
87
|
+
throw ErrorFactory.createConfigError('Cloudflare mail driver requires from.email');
|
|
88
|
+
}
|
|
89
|
+
const recipients = normalizeRecipients(message.to)
|
|
90
|
+
.map((recipient) => recipient.trim())
|
|
91
|
+
.filter((recipient) => recipient !== '');
|
|
92
|
+
if (recipients.length === 0) {
|
|
93
|
+
throw ErrorFactory.createConfigError('Cloudflare mail driver requires at least one recipient');
|
|
94
|
+
}
|
|
95
|
+
if (shouldUseProxy()) {
|
|
96
|
+
return sendViaProxy(config, message);
|
|
97
|
+
}
|
|
98
|
+
const binding = resolveBinding(config);
|
|
99
|
+
const { EmailMessage } = await importCloudflareEmail();
|
|
100
|
+
const raw = buildRfc2822Message(message);
|
|
101
|
+
await Promise.all(recipients.map(async (recipient) => binding.send(new EmailMessage(from, recipient, raw))));
|
|
102
|
+
return { ok: true };
|
|
103
|
+
},
|
|
104
|
+
});
|
|
105
|
+
export default CloudflareDriver;
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type MailAddress, type MailAttachment, type MailMessage } from '../../mail/MailMessage';
|
|
1
2
|
export type SmtpConfig = {
|
|
2
3
|
host: string;
|
|
3
4
|
port: number;
|
|
@@ -5,22 +6,7 @@ export type SmtpConfig = {
|
|
|
5
6
|
password?: string;
|
|
6
7
|
secure?: boolean | 'starttls';
|
|
7
8
|
};
|
|
8
|
-
export type MailAddress
|
|
9
|
-
email: string;
|
|
10
|
-
name?: string;
|
|
11
|
-
};
|
|
12
|
-
export type MailAttachment = {
|
|
13
|
-
filename: string;
|
|
14
|
-
content: Buffer;
|
|
15
|
-
};
|
|
16
|
-
export type MailMessage = {
|
|
17
|
-
to: string | string[];
|
|
18
|
-
from: MailAddress;
|
|
19
|
-
subject: string;
|
|
20
|
-
text: string;
|
|
21
|
-
html?: string;
|
|
22
|
-
attachments?: MailAttachment[];
|
|
23
|
-
};
|
|
9
|
+
export type { MailAddress, MailAttachment, MailMessage };
|
|
24
10
|
export type SendResult = {
|
|
25
11
|
ok: boolean;
|
|
26
12
|
provider: 'smtp';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Smtp.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/drivers/Smtp.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"Smtp.d.ts","sourceRoot":"","sources":["../../../../../src/tools/mail/drivers/Smtp.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,WAAW,EAChB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,yBAAyB,CAAC;AAEjC,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,GAAG,UAAU,CAAC;CAC/B,CAAC;AAEF,YAAY,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC;AAEzD,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AA6kBF,eAAO,MAAM,UAAU;IACrB;;;;OAIG;iBACgB,UAAU,WAAW,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC;EAuDzE,CAAC;AAEH,eAAe,UAAU,CAAC"}
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { generateUuid } from '../../../common/utility.js';
|
|
2
1
|
import { RemoteSignedJson } from '../../../common/RemoteSignedJson.js';
|
|
3
2
|
import { Cloudflare } from '../../../config/cloudflare.js';
|
|
4
3
|
import { Env } from '../../../config/env.js';
|
|
@@ -7,6 +6,7 @@ import { ErrorFactory } from '../../../exceptions/ZintrustError.js';
|
|
|
7
6
|
import * as net from '../../../node-singletons/net.js';
|
|
8
7
|
import * as tls from '../../../node-singletons/tls.js';
|
|
9
8
|
import { normalizeSigningCredentials } from '../../../proxy/SigningService.js';
|
|
9
|
+
import { buildRfc2822Message, } from '../../mail/MailMessage.js';
|
|
10
10
|
const resolveSigningPrefix = (baseUrl) => {
|
|
11
11
|
try {
|
|
12
12
|
const parsed = new URL(baseUrl);
|
|
@@ -434,69 +434,6 @@ const doQuit = async (socket, reader) => {
|
|
|
434
434
|
const quit = await reader.readResponse();
|
|
435
435
|
assertCode(quit, [221, 250], 'QUIT');
|
|
436
436
|
};
|
|
437
|
-
const buildRfc2822Message = (msg) => {
|
|
438
|
-
const toList = normalizeRecipients(msg.to);
|
|
439
|
-
const fromNameRaw = msg.from.name;
|
|
440
|
-
const fromName = typeof fromNameRaw === 'string' ? fromNameRaw.trim() : '';
|
|
441
|
-
const fromHeader = fromName === '' ? msg.from.email : `${fromName} <${msg.from.email}>`;
|
|
442
|
-
const toHeader = toList.join(', ');
|
|
443
|
-
const subject = msg.subject;
|
|
444
|
-
const headers = [
|
|
445
|
-
`From: ${fromHeader}`,
|
|
446
|
-
`To: ${toHeader}`,
|
|
447
|
-
`Subject: ${subject}`,
|
|
448
|
-
'MIME-Version: 1.0',
|
|
449
|
-
];
|
|
450
|
-
const attachParts = (attachments, innerBody) => {
|
|
451
|
-
const mixedBoundary = `mixed_${generateUuid().replaceAll('-', '')}`;
|
|
452
|
-
const lines = [];
|
|
453
|
-
lines.push(`Content-Type: multipart/mixed; boundary="${mixedBoundary}"`, '', `--${mixedBoundary}`, innerBody);
|
|
454
|
-
// attachments
|
|
455
|
-
for (const a of attachments) {
|
|
456
|
-
const b64 = a.content.toString('base64');
|
|
457
|
-
lines.push(`--${mixedBoundary}`, `Content-Type: application/octet-stream; name="${a.filename}"`, 'Content-Transfer-Encoding: base64', `Content-Disposition: attachment; filename="${a.filename}"`, '');
|
|
458
|
-
// break base64 into 76 char lines per RFC
|
|
459
|
-
for (let i = 0; i < b64.length; i += 76) {
|
|
460
|
-
lines.push(b64.slice(i, i + 76));
|
|
461
|
-
}
|
|
462
|
-
}
|
|
463
|
-
lines.push(`--${mixedBoundary}--`, '');
|
|
464
|
-
return lines.join('\r\n');
|
|
465
|
-
};
|
|
466
|
-
if (typeof msg.html === 'string' && msg.html !== '') {
|
|
467
|
-
const boundary = `zintrust_${generateUuid().replaceAll('-', '')}`;
|
|
468
|
-
headers.push(`Content-Type: multipart/alternative; boundary="${boundary}"`);
|
|
469
|
-
const parts = [
|
|
470
|
-
`--${boundary}`,
|
|
471
|
-
'Content-Type: text/plain; charset=utf-8',
|
|
472
|
-
'Content-Transfer-Encoding: 7bit',
|
|
473
|
-
'',
|
|
474
|
-
msg.text,
|
|
475
|
-
`--${boundary}`,
|
|
476
|
-
'Content-Type: text/html; charset=utf-8',
|
|
477
|
-
'Content-Transfer-Encoding: 7bit',
|
|
478
|
-
'',
|
|
479
|
-
msg.html,
|
|
480
|
-
`--${boundary}--`,
|
|
481
|
-
'',
|
|
482
|
-
];
|
|
483
|
-
const inner = `${parts.join('\r\n')}`;
|
|
484
|
-
if (msg.attachments && msg.attachments.length > 0) {
|
|
485
|
-
// wrap in multipart/mixed
|
|
486
|
-
const mixed = attachParts(msg.attachments, inner);
|
|
487
|
-
return `${headers.join('\r\n')}\r\n\r\n${mixed}`;
|
|
488
|
-
}
|
|
489
|
-
return `${headers.join('\r\n')}\r\n\r\n${inner}`;
|
|
490
|
-
}
|
|
491
|
-
// plain text
|
|
492
|
-
if (msg.attachments && msg.attachments.length > 0) {
|
|
493
|
-
const inner = ['Content-Type: text/plain; charset=utf-8', '', msg.text, ''].join('\r\n');
|
|
494
|
-
const mixed = attachParts(msg.attachments, inner);
|
|
495
|
-
return `${headers.join('\r\n')}\r\n\r\n${mixed}`;
|
|
496
|
-
}
|
|
497
|
-
headers.push('Content-Type: text/plain; charset=utf-8');
|
|
498
|
-
return `${headers.join('\r\n')}\r\n\r\n${msg.text}\r\n`;
|
|
499
|
-
};
|
|
500
437
|
const dotStuff = (data) => data
|
|
501
438
|
.replaceAll(/\r?\n/g, '\r\n')
|
|
502
439
|
.split('\r\n')
|
|
@@ -12,7 +12,7 @@ export type SendMailInput = {
|
|
|
12
12
|
};
|
|
13
13
|
export type SendMailResult = {
|
|
14
14
|
ok: boolean;
|
|
15
|
-
driver: 'sendgrid' | 'disabled' | 'smtp' | 'ses' | 'mailgun' | 'nodemailer';
|
|
15
|
+
driver: 'sendgrid' | 'disabled' | 'smtp' | 'ses' | 'mailgun' | 'nodemailer' | 'cl';
|
|
16
16
|
messageId?: string;
|
|
17
17
|
};
|
|
18
18
|
export interface RenderMailInput {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/mail/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/tools/mail/index.ts"],"names":[],"mappings":"AAQA,OAAO,EAAsB,KAAK,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAI7E,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,CAAC;KACf,CAAC;IACF,WAAW,CAAC,EAAE,eAAe,EAAE,CAAC;CACjC,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,UAAU,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC;IACnF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAuKF,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC;AAgBD,eAAO,MAAM,IAAI;IACf;;OAEG;kBACiB,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAIrD,sBAAsB;gBACJ,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC;IAGnD;;;;OAIG;iBACU,MAAM;cAtEb,CAAC,KAAK,EAAE,aAAa,KAAK,OAAO,CAAC,cAAc,CAAC;;gBA0ErC,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;EAGzD,CAAC;AAEH,eAAe,IAAI,CAAC"}
|
package/src/tools/mail/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { SystemTraceBridge } from '../../trace/SystemTraceBridge.js';
|
|
2
2
|
import { mailConfig } from '../../config/mail.js';
|
|
3
3
|
import { ErrorFactory } from '../../exceptions/ZintrustError.js';
|
|
4
|
+
import { CloudflareDriver } from './drivers/Cloudflare.js';
|
|
4
5
|
import { SesDriver } from './drivers/Ses.js';
|
|
5
6
|
import { resolveAttachments } from './attachments.js';
|
|
6
7
|
import { MailDriverRegistry } from './MailDriverRegistry.js';
|
|
@@ -56,6 +57,10 @@ const normalizeMailRecipients = (to) => {
|
|
|
56
57
|
return Array.isArray(to) ? to.join(', ') : to;
|
|
57
58
|
};
|
|
58
59
|
const sendWithDriver = async (driver, message) => {
|
|
60
|
+
if (driver.driver === 'cl') {
|
|
61
|
+
const result = await CloudflareDriver.send({ driver: 'cl', binding: driver.binding }, message);
|
|
62
|
+
return { ok: result.ok, driver: 'cl', messageId: result.messageId };
|
|
63
|
+
}
|
|
59
64
|
if (driver.driver === 'ses') {
|
|
60
65
|
const result = await SesDriver.send({ region: driver.region }, message);
|
|
61
66
|
return { ok: result.ok, driver: 'ses', messageId: result.messageId };
|
|
@@ -70,11 +75,14 @@ const sendWithDriver = async (driver, message) => {
|
|
|
70
75
|
messageId: typeof result?.messageId === 'string' ? result.messageId : undefined,
|
|
71
76
|
};
|
|
72
77
|
}
|
|
73
|
-
if (driver.driver === 'sendgrid' ||
|
|
78
|
+
if (driver.driver === 'sendgrid' ||
|
|
79
|
+
driver.driver === 'mailgun' ||
|
|
80
|
+
driver.driver === 'smtp' ||
|
|
81
|
+
driver.driver === 'nodemailer') {
|
|
74
82
|
throw ErrorFactory.createConfigError(`Mail driver not registered: ${driver.driver} (run \`zin add mail:${driver.driver}\` / \`npm i @zintrust/mail-${driver.driver}\`)`);
|
|
75
83
|
}
|
|
76
84
|
// Config exists for future drivers, but implementations are intentionally CLI/runtime-safe and added incrementally.
|
|
77
|
-
throw ErrorFactory.createConfigError(`Mail driver not registered: ${mailConfig.default}. Available drivers: ses, sendgrid, mailgun, smtp. Run \`zin add mail:${mailConfig.default}\` to install.`);
|
|
85
|
+
throw ErrorFactory.createConfigError(`Mail driver not registered: ${mailConfig.default}. Available drivers: cl, ses, sendgrid, mailgun, smtp, nodemailer. Run \`zin add mail:${mailConfig.default}\` to install.`);
|
|
78
86
|
};
|
|
79
87
|
const createMailer = (name) => Object.freeze({
|
|
80
88
|
async send(input) {
|
|
@@ -104,11 +112,11 @@ async function renderTemplateToHtml(input) {
|
|
|
104
112
|
// Import lazily to avoid circular deps
|
|
105
113
|
const { loadTemplate } = await import('./template-loader.js');
|
|
106
114
|
if (looksLikeHtml(template)) {
|
|
107
|
-
return loadTemplate(template,
|
|
115
|
+
return loadTemplate(template, variables ?? {});
|
|
108
116
|
}
|
|
109
117
|
// template-loader expects full filename
|
|
110
118
|
const fileName = template.endsWith('.html') ? template : `${template}.html`;
|
|
111
|
-
return loadTemplate(fileName,
|
|
119
|
+
return loadTemplate(fileName, variables ?? {});
|
|
112
120
|
}
|
|
113
121
|
export const Mail = Object.freeze({
|
|
114
122
|
/**
|