devflare 1.0.0-next.39 → 1.0.0-next.40
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/dist/_chunks/account-BtWcv3X9.js +462 -0
- package/dist/_chunks/account-resources-CsmVowJp.js +159 -0
- package/dist/_chunks/ai-CBEuLdoP.js +322 -0
- package/dist/_chunks/api-TzdliH-6.js +568 -0
- package/dist/_chunks/build-3T6O4uIg.js +24 -0
- package/dist/_chunks/build-artifacts-8TqBSQkG.js +483 -0
- package/dist/_chunks/cli-BTF1X4SG.js +1128 -0
- package/dist/_chunks/cloudflare-BaloqI3H.js +157 -0
- package/dist/_chunks/colors-DiK6wPJ5.js +13 -0
- package/dist/_chunks/command-utils-BsfkmTqh.js +45 -0
- package/dist/_chunks/compiler-uoyAQ8zW.js +424 -0
- package/dist/_chunks/config-D5u-bEkn.js +78 -0
- package/dist/_chunks/config-path-DCPto4XB.js +42 -0
- package/dist/_chunks/context-CX50Y2Kb.js +2250 -0
- package/dist/_chunks/decorators-QmV57ixr.js +19 -0
- package/dist/_chunks/dependencies-C2oxFjU_.js +57 -0
- package/dist/_chunks/deploy-DMTr6JeR.js +915 -0
- package/dist/_chunks/dev-CvRHmRFZ.js +3456 -0
- package/dist/_chunks/doctor-DIG8DoFU.js +219 -0
- package/dist/_chunks/durable-object-DMtH0XYX.js +234 -0
- package/dist/_chunks/env-S0_nMVz1.js +125 -0
- package/dist/_chunks/family-DXC5SdFK.js +143 -0
- package/dist/_chunks/generated-artifacts-dMJY4KAt.js +32 -0
- package/dist/_chunks/glob-CmQOvunB.js +56 -0
- package/dist/_chunks/init-3moXTgpb.js +165 -0
- package/dist/_chunks/loader-DLXO60RO.js +1153 -0
- package/dist/_chunks/local-dev-vars-CTSa-wvF.js +81 -0
- package/dist/_chunks/local-hyperdrive-CJ90j46O.js +119 -0
- package/dist/_chunks/local-media-bindings-DsAW4AMF.js +335 -0
- package/dist/_chunks/local-secrets-DMmEOygL.js +123 -0
- package/dist/_chunks/local-workflow-entrypoints-Wip3o1u8.js +90 -0
- package/dist/_chunks/login-BmnDzDlH.js +51 -0
- package/dist/_chunks/package-metadata-DAuCkyvK.js +39 -0
- package/dist/_chunks/preferences-BKp_7XJx.js +241 -0
- package/dist/_chunks/preview-BhqDmq8I.js +456 -0
- package/dist/_chunks/preview-registry-ClAbLTHH.js +1186 -0
- package/dist/_chunks/preview-resources-DdXj8LMM.js +358 -0
- package/dist/_chunks/previews-Dlr13x5M.js +1134 -0
- package/dist/_chunks/productions-D3AnOHac.js +411 -0
- package/dist/_chunks/ref-CYJNAAe_.js +178 -0
- package/dist/_chunks/remote-CZnP-HLJ.js +79 -0
- package/dist/_chunks/remote-config-D39BY9ji.js +132 -0
- package/dist/_chunks/resolve-package-Y84HB3Nt.js +133 -0
- package/dist/_chunks/rolldown-runtime-CvQ6eiug.js +14 -0
- package/dist/_chunks/routes-C3FqES2W.js +796 -0
- package/dist/_chunks/runtime-FvXvfuZ2.js +550 -0
- package/dist/_chunks/schema-normalization-DWVleVxo.js +477 -0
- package/dist/_chunks/secrets-70eN0Q6C.js +95 -0
- package/dist/_chunks/token-kguIDmej.js +333 -0
- package/dist/_chunks/tokens-iVcgNXi-.js +221 -0
- package/dist/_chunks/types-OrLbzv4I.js +476 -0
- package/dist/_chunks/ui-BUoZApvE.js +103 -0
- package/dist/_chunks/usage-BBTGzjon.js +272 -0
- package/dist/_chunks/vite-CsI0E-uV.js +1235 -0
- package/dist/_chunks/vite-utils-OVLMV605.js +183 -0
- package/dist/_chunks/worker-CS1jgNFE.js +410 -0
- package/dist/_chunks/worker-bundler-dTTnYU3n.js +458 -0
- package/dist/_chunks/worker-entrypoint-CQW77lG8.js +247 -0
- package/dist/_chunks/workerName-CFJsLZA-.js +23 -0
- package/dist/bridge/index.d.ts +6 -6
- package/dist/bridge/miniflare.d.ts +2 -2
- package/dist/bridge/proxy.d.ts +1 -1
- package/dist/bridge/v2/body-streams.d.ts +1 -1
- package/dist/bridge/v2/codec.d.ts +4 -4
- package/dist/bridge/v2/index.d.ts +10 -10
- package/dist/bridge/v2/serialization.d.ts +1 -1
- package/dist/bridge/v2/value-codec.d.ts +1 -1
- package/dist/bridge/v2/value-serialization.d.ts.map +1 -1
- package/dist/bridge/v2/ws-relay.d.ts +3 -3
- package/dist/browser-shim/index.d.ts +2 -2
- package/dist/browser.d.ts +70 -70
- package/dist/browser.js +74 -2462
- package/dist/bundler/do-bundler.d.ts +1 -1
- package/dist/bundler/index.d.ts +3 -3
- package/dist/bundler/rolldown-shared.d.ts +1 -1
- package/dist/bundler/worker-bundler.d.ts +1 -1
- package/dist/cli/build-manifest.d.ts +1 -1
- package/dist/cli/command-utils.d.ts +1 -1
- package/dist/cli/commands/account.d.ts +1 -1
- package/dist/cli/commands/ai.d.ts +1 -1
- package/dist/cli/commands/build-artifacts.d.ts +5 -5
- package/dist/cli/commands/build.d.ts +1 -1
- package/dist/cli/commands/config.d.ts +1 -1
- package/dist/cli/commands/deploy/prepare.d.ts +2 -2
- package/dist/cli/commands/deploy/runtime.d.ts +1 -1
- package/dist/cli/commands/deploy/verification.d.ts +1 -1
- package/dist/cli/commands/deploy.d.ts +1 -1
- package/dist/cli/commands/dev.d.ts +1 -1
- package/dist/cli/commands/doctor.d.ts +1 -1
- package/dist/cli/commands/init.d.ts +1 -1
- package/dist/cli/commands/login.d.ts +1 -1
- package/dist/cli/commands/previews-support/cleanup.d.ts +1 -1
- package/dist/cli/commands/previews-support/family.d.ts +3 -3
- package/dist/cli/commands/previews-support/render.d.ts +3 -3
- package/dist/cli/commands/previews-support/theme.d.ts +2 -2
- package/dist/cli/commands/previews-support/types.d.ts +2 -2
- package/dist/cli/commands/previews.d.ts +1 -1
- package/dist/cli/commands/productions.d.ts +1 -1
- package/dist/cli/commands/remote.d.ts +1 -1
- package/dist/cli/commands/secrets.d.ts +1 -1
- package/dist/cli/commands/token.d.ts +1 -1
- package/dist/cli/commands/type-generation/discovery.d.ts +2 -2
- package/dist/cli/commands/type-generation/generator.d.ts +3 -3
- package/dist/cli/commands/type-generation/models.d.ts +1 -1
- package/dist/cli/commands/types.d.ts +1 -1
- package/dist/cli/commands/worker.d.ts +1 -1
- package/dist/cli/deploy-strategy.d.ts +1 -1
- package/dist/cli/deploy-target.d.ts +1 -1
- package/dist/cli/help-pages/pages/account.d.ts +1 -1
- package/dist/cli/help-pages/pages/core.d.ts +1 -1
- package/dist/cli/help-pages/pages/index.d.ts +1 -1
- package/dist/cli/help-pages/pages/misc.d.ts +1 -1
- package/dist/cli/help-pages/pages/previews.d.ts +1 -1
- package/dist/cli/help-pages/pages/productions.d.ts +1 -1
- package/dist/cli/help-pages/render.d.ts +2 -2
- package/dist/cli/help-pages/shared.d.ts +1 -1
- package/dist/cli/help.d.ts +2 -2
- package/dist/cli/index.js +2 -1383
- package/dist/cli/preview-bindings.d.ts +3 -3
- package/dist/cli/preview.d.ts +1 -1
- package/dist/cli/wrangler-auth.d.ts +1 -1
- package/dist/cloudflare/account-core.d.ts +2 -2
- package/dist/cloudflare/account-resources.d.ts +2 -2
- package/dist/cloudflare/account-status.d.ts +1 -1
- package/dist/cloudflare/account-workers.d.ts +2 -2
- package/dist/cloudflare/account.d.ts +7 -7
- package/dist/cloudflare/auth.d.ts +1 -1
- package/dist/cloudflare/index.d.ts +13 -13
- package/dist/cloudflare/index.js +4 -59
- package/dist/cloudflare/kv-namespace.d.ts +1 -1
- package/dist/cloudflare/preview-registry-cache.d.ts +1 -1
- package/dist/cloudflare/preview-registry-inference.d.ts +2 -2
- package/dist/cloudflare/preview-registry-records.d.ts +3 -3
- package/dist/cloudflare/preview-registry-shape.d.ts +2 -2
- package/dist/cloudflare/preview-registry-store.d.ts +3 -3
- package/dist/cloudflare/preview-registry-transport.d.ts +2 -2
- package/dist/cloudflare/preview-registry-types.d.ts +2 -2
- package/dist/cloudflare/preview-registry.d.ts +5 -5
- package/dist/cloudflare/tokens.d.ts +2 -2
- package/dist/cloudflare/usage.d.ts +2 -2
- package/dist/config/binding-resolution-helpers.d.ts +1 -1
- package/dist/config/compiler/bindings.d.ts +2 -2
- package/dist/config/compiler/core-helpers.d.ts +2 -2
- package/dist/config/compiler/do-workers.d.ts +2 -2
- package/dist/config/compiler/paths.d.ts +1 -1
- package/dist/config/compiler.d.ts +6 -6
- package/dist/config/define.d.ts +2 -2
- package/dist/config/deploy-resources.d.ts +5 -5
- package/dist/config/env-vars.d.ts +1 -1
- package/dist/config/framework-providers.d.ts +1 -1
- package/dist/config/index.d.ts +12 -12
- package/dist/config/loader.d.ts +2 -2
- package/dist/config/local-dev-vars.d.ts +1 -1
- package/dist/config/preview-resources.d.ts +4 -4
- package/dist/config/preview.d.ts +1 -1
- package/dist/config/ref.d.ts +2 -2
- package/dist/config/resolve-phased.d.ts +4 -4
- package/dist/config/resolve.d.ts +1 -1
- package/dist/config/resource-resolution.d.ts +6 -6
- package/dist/config/schema-env.d.ts +20 -20
- package/dist/config/schema-normalization.d.ts +1 -1
- package/dist/config/schema-types-bindings.d.ts +4 -4
- package/dist/config/schema-types-build.d.ts +1 -1
- package/dist/config/schema-types.d.ts +7 -7
- package/dist/config/schema.d.ts +46 -46
- package/dist/config/service-bindings-validation.d.ts +1 -1
- package/dist/config-entry.d.ts +6 -6
- package/dist/config-entry.js +3 -8
- package/dist/decorators/index.d.ts +2 -2
- package/dist/decorators/index.js +2 -9
- package/dist/dev-server/d1-migrations.d.ts +1 -1
- package/dist/dev-server/dev-server-state.d.ts +6 -6
- package/dist/dev-server/gateway-script.d.ts +1 -1
- package/dist/dev-server/index.d.ts +1 -1
- package/dist/dev-server/miniflare-bindings.d.ts +1 -1
- package/dist/dev-server/miniflare-dev-config.d.ts +5 -5
- package/dist/dev-server/miniflare-worker-config.d.ts +3 -3
- package/dist/dev-server/server-startup-helpers.d.ts +6 -6
- package/dist/dev-server/worker-surface-paths.d.ts +2 -2
- package/dist/index.d.ts +8 -8
- package/dist/index.js +9 -22
- package/dist/runtime/context-events.d.ts +1 -1
- package/dist/runtime/context.d.ts +3 -3
- package/dist/runtime/exports.d.ts +2 -2
- package/dist/runtime/index.d.ts +10 -10
- package/dist/runtime/index.js +5 -57
- package/dist/runtime/middleware.d.ts +1 -1
- package/dist/runtime/router/index.d.ts +3 -3
- package/dist/runtime/validation.d.ts +1 -1
- package/dist/secrets/local-secrets.d.ts +1 -1
- package/dist/shims/local-media-bindings.d.ts +1 -1
- package/dist/sveltekit/index.d.ts +1 -1
- package/dist/sveltekit/index.js +327 -9
- package/dist/sveltekit/local-bindings.d.ts +1 -1
- package/dist/sveltekit/platform.d.ts +1 -1
- package/dist/test/binding-hints.d.ts +2 -2
- package/dist/test/cf.d.ts +19 -19
- package/dist/test/index.d.ts +18 -18
- package/dist/test/index.js +4495 -46
- package/dist/test/offline-bindings.d.ts +3 -3
- package/dist/test/resolve-service-bindings.d.ts +1 -1
- package/dist/test/simple-context-bindings.d.ts +1 -1
- package/dist/test/simple-context-durable-objects.d.ts +1 -1
- package/dist/test/simple-context-env.d.ts +2 -2
- package/dist/test/simple-context-handlers.d.ts +2 -2
- package/dist/test/simple-context-lifecycle.d.ts +2 -2
- package/dist/test/simple-context-mfconfig.d.ts +1 -1
- package/dist/test/simple-context-multi-worker.d.ts +2 -2
- package/dist/test/simple-context-runtime.d.ts +1 -1
- package/dist/test/simple-context-startup.d.ts +1 -1
- package/dist/test/simple-context.d.ts +1 -1
- package/dist/test/utilities/env.d.ts +3 -3
- package/dist/test/utilities.d.ts +10 -10
- package/dist/test/worker.d.ts +1 -1
- package/dist/transform/index.d.ts +2 -2
- package/dist/utils/send-email.js +163 -19
- package/dist/vite/config-file.d.ts +2 -2
- package/dist/vite/index.d.ts +3 -3
- package/dist/vite/index.js +2 -31
- package/dist/vite/plugin-config-hook.d.ts +1 -1
- package/dist/vite/plugin-context.d.ts +3 -3
- package/dist/vite/plugin-durable-objects.d.ts +2 -2
- package/dist/vite/plugin-programmatic.d.ts +1 -1
- package/dist/vite/plugin-service-bindings.d.ts +2 -2
- package/dist/vite/plugin.d.ts +3 -3
- package/dist/worker-entry/composed-worker.d.ts +1 -1
- package/dist/worker-entry/routes.d.ts +2 -2
- package/dist/worker-entry/surface-paths.d.ts +1 -1
- package/dist/workflows/local-workflow-entrypoints.d.ts +1 -1
- package/package.json +5 -3
- package/dist/account-4tgh03a8.js +0 -484
- package/dist/ai-r3zqmxan.js +0 -261
- package/dist/api-6z01z734.js +0 -33
- package/dist/build-kw625v84.js +0 -51
- package/dist/config-ghk2bxj3.js +0 -102
- package/dist/deploy-9kee65n9.js +0 -1062
- package/dist/dev-x8zr249a.js +0 -3569
- package/dist/doctor-0ng5qrr1.js +0 -258
- package/dist/durable-object-0ybmg08a.js +0 -13
- package/dist/index-04wh9bxx.js +0 -514
- package/dist/index-0cc05hzv.js +0 -74
- package/dist/index-2yv7w548.js +0 -185
- package/dist/index-37x76zdn.js +0 -4
- package/dist/index-3cpzsr47.js +0 -125
- package/dist/index-3t6rypgc.js +0 -13
- package/dist/index-4mmpccrb.js +0 -309
- package/dist/index-5dkjffqz.js +0 -25
- package/dist/index-5hy7jmv3.js +0 -890
- package/dist/index-627srx16.js +0 -45
- package/dist/index-7m557715.js +0 -283
- package/dist/index-a8pnvg3r.js +0 -52
- package/dist/index-aabgympv.js +0 -39
- package/dist/index-atwc3csp.js +0 -256
- package/dist/index-cv4cvrxe.js +0 -2046
- package/dist/index-h7r11y4a.js +0 -539
- package/dist/index-hvtd936d.js +0 -1229
- package/dist/index-kcp7y951.js +0 -136
- package/dist/index-maw0jjnn.js +0 -147
- package/dist/index-mek9msfv.js +0 -705
- package/dist/index-n4xkaymm.js +0 -236
- package/dist/index-nkk59p3y.js +0 -579
- package/dist/index-phcrvs6d.js +0 -342
- package/dist/index-se4kw8tm.js +0 -460
- package/dist/index-x8s9rwfh.js +0 -2020
- package/dist/index-y7w3x9p1.js +0 -18
- package/dist/index-z9gy8w6b.js +0 -57
- package/dist/index-zdd0d9qa.js +0 -199
- package/dist/init-tb8jqgvr.js +0 -180
- package/dist/login-4h1sfsed.js +0 -75
- package/dist/previews-qr7c5j8h.js +0 -1336
- package/dist/productions-xpmd6bw8.js +0 -505
- package/dist/remote-kqcvhnfx.js +0 -192
- package/dist/secrets-6wbdsdek.js +0 -89
- package/dist/token-yp1qa70y.js +0 -419
- package/dist/types-15yv4cj3.js +0 -701
- package/dist/worker-1yg72jxg.js +0 -510
- package/dist/worker-entrypoint-y8s9kdcx.js +0 -15
package/dist/index-n4xkaymm.js
DELETED
|
@@ -1,236 +0,0 @@
|
|
|
1
|
-
// src/utils/send-email.ts
|
|
2
|
-
var RAW_EMAIL = "EmailMessage::raw";
|
|
3
|
-
var wrappedSendEmailBindings = new WeakMap;
|
|
4
|
-
var wrappedEnvBindings = new WeakMap;
|
|
5
|
-
var localSendEmailBindings = new Map;
|
|
6
|
-
function hasOwn(value, key) {
|
|
7
|
-
return Object.prototype.hasOwnProperty.call(value, key);
|
|
8
|
-
}
|
|
9
|
-
function isRecord(value) {
|
|
10
|
-
return typeof value === "object" && value !== null;
|
|
11
|
-
}
|
|
12
|
-
function isSendEmailBinding(value) {
|
|
13
|
-
if (!isRecord(value)) {
|
|
14
|
-
return false;
|
|
15
|
-
}
|
|
16
|
-
try {
|
|
17
|
-
return typeof value.send === "function" && typeof value.sendBatch !== "function";
|
|
18
|
-
} catch {
|
|
19
|
-
return false;
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
function isComposableSendEmailMessage(message) {
|
|
23
|
-
return isRecord(message) && typeof message.from === "string" && (typeof message.to === "string" || Array.isArray(message.to));
|
|
24
|
-
}
|
|
25
|
-
function formatEmailAddress(value) {
|
|
26
|
-
if (!value) {
|
|
27
|
-
return;
|
|
28
|
-
}
|
|
29
|
-
return typeof value === "string" ? value : String(value);
|
|
30
|
-
}
|
|
31
|
-
function formatEmailList(value) {
|
|
32
|
-
if (!value) {
|
|
33
|
-
return;
|
|
34
|
-
}
|
|
35
|
-
return Array.isArray(value) ? value.join(", ") : value;
|
|
36
|
-
}
|
|
37
|
-
function normalizeBodyText(value) {
|
|
38
|
-
return value.replace(/\r?\n/g, `\r
|
|
39
|
-
`);
|
|
40
|
-
}
|
|
41
|
-
function buildMultipartAlternativeBody(message, boundary) {
|
|
42
|
-
const parts = [];
|
|
43
|
-
if (message.text) {
|
|
44
|
-
parts.push(`--${boundary}`, "Content-Type: text/plain; charset=UTF-8", "", normalizeBodyText(message.text));
|
|
45
|
-
}
|
|
46
|
-
if (message.html) {
|
|
47
|
-
parts.push(`--${boundary}`, "Content-Type: text/html; charset=UTF-8", "", normalizeBodyText(message.html));
|
|
48
|
-
}
|
|
49
|
-
parts.push(`--${boundary}--`);
|
|
50
|
-
return parts.join(`\r
|
|
51
|
-
`);
|
|
52
|
-
}
|
|
53
|
-
function buildRawEmail(message) {
|
|
54
|
-
const lines = [];
|
|
55
|
-
const messageId = `<${Date.now()}-${Math.random().toString(36).slice(2)}@devflare.dev>`;
|
|
56
|
-
lines.push(`From: ${message.from}`);
|
|
57
|
-
lines.push(`To: ${formatEmailList(message.to)}`);
|
|
58
|
-
lines.push(`Date: ${new Date().toUTCString()}`);
|
|
59
|
-
lines.push(`Message-ID: ${messageId}`);
|
|
60
|
-
if (message.subject) {
|
|
61
|
-
lines.push(`Subject: ${message.subject}`);
|
|
62
|
-
}
|
|
63
|
-
const replyTo = formatEmailAddress(message.replyTo);
|
|
64
|
-
if (replyTo) {
|
|
65
|
-
lines.push(`Reply-To: ${replyTo}`);
|
|
66
|
-
}
|
|
67
|
-
const cc = formatEmailList(message.cc);
|
|
68
|
-
if (cc) {
|
|
69
|
-
lines.push(`Cc: ${cc}`);
|
|
70
|
-
}
|
|
71
|
-
const bcc = formatEmailList(message.bcc);
|
|
72
|
-
if (bcc) {
|
|
73
|
-
lines.push(`Bcc: ${bcc}`);
|
|
74
|
-
}
|
|
75
|
-
if (message.headers) {
|
|
76
|
-
for (const [key, value] of Object.entries(message.headers)) {
|
|
77
|
-
lines.push(`${key}: ${value}`);
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
lines.push("MIME-Version: 1.0");
|
|
81
|
-
if (message.text && message.html) {
|
|
82
|
-
const boundary = `devflare-alt-${crypto.randomUUID()}`;
|
|
83
|
-
lines.push(`Content-Type: multipart/alternative; boundary="${boundary}"`);
|
|
84
|
-
lines.push("");
|
|
85
|
-
lines.push(buildMultipartAlternativeBody(message, boundary));
|
|
86
|
-
return lines.join(`\r
|
|
87
|
-
`);
|
|
88
|
-
}
|
|
89
|
-
lines.push(`Content-Type: ${message.html ? "text/html" : "text/plain"}; charset=UTF-8`);
|
|
90
|
-
lines.push("");
|
|
91
|
-
lines.push(normalizeBodyText(message.html ?? message.text ?? ""));
|
|
92
|
-
return lines.join(`\r
|
|
93
|
-
`);
|
|
94
|
-
}
|
|
95
|
-
function createEmailMessageRaw(raw) {
|
|
96
|
-
if (typeof raw === "string" || raw instanceof ReadableStream) {
|
|
97
|
-
return raw;
|
|
98
|
-
}
|
|
99
|
-
if (raw instanceof Uint8Array) {
|
|
100
|
-
const copy = new Uint8Array(raw.byteLength);
|
|
101
|
-
copy.set(raw);
|
|
102
|
-
return new Blob([copy]).stream();
|
|
103
|
-
}
|
|
104
|
-
if (raw instanceof ArrayBuffer) {
|
|
105
|
-
return new Blob([new Uint8Array(raw.slice(0))]).stream();
|
|
106
|
-
}
|
|
107
|
-
throw new Error("Unsupported EmailMessage raw payload");
|
|
108
|
-
}
|
|
109
|
-
function normalizeSendEmailMessage(message) {
|
|
110
|
-
if (!isComposableSendEmailMessage(message)) {
|
|
111
|
-
return message;
|
|
112
|
-
}
|
|
113
|
-
if (hasOwn(message, RAW_EMAIL)) {
|
|
114
|
-
return message;
|
|
115
|
-
}
|
|
116
|
-
if (hasOwn(message, "raw") && message.raw !== undefined) {
|
|
117
|
-
return {
|
|
118
|
-
from: message.from,
|
|
119
|
-
to: message.to,
|
|
120
|
-
[RAW_EMAIL]: createEmailMessageRaw(message.raw)
|
|
121
|
-
};
|
|
122
|
-
}
|
|
123
|
-
return {
|
|
124
|
-
from: message.from,
|
|
125
|
-
to: message.to,
|
|
126
|
-
[RAW_EMAIL]: createEmailMessageRaw(buildRawEmail(message))
|
|
127
|
-
};
|
|
128
|
-
}
|
|
129
|
-
function wrapSendEmailBinding(binding) {
|
|
130
|
-
const cached = wrappedSendEmailBindings.get(binding);
|
|
131
|
-
if (cached) {
|
|
132
|
-
return cached;
|
|
133
|
-
}
|
|
134
|
-
const wrapped = new Proxy(binding, {
|
|
135
|
-
get(target, prop, receiver) {
|
|
136
|
-
if (prop === "send") {
|
|
137
|
-
return async (message) => target.send(normalizeSendEmailMessage(message));
|
|
138
|
-
}
|
|
139
|
-
const value = Reflect.get(target, prop, receiver);
|
|
140
|
-
return typeof value === "function" ? value.bind(target) : value;
|
|
141
|
-
}
|
|
142
|
-
});
|
|
143
|
-
wrappedSendEmailBindings.set(binding, wrapped);
|
|
144
|
-
return wrapped;
|
|
145
|
-
}
|
|
146
|
-
function createLocalSendEmailBinding(config = {}, options = {}) {
|
|
147
|
-
return {
|
|
148
|
-
async send(message) {
|
|
149
|
-
const normalized = normalizeSendEmailMessage(message);
|
|
150
|
-
if (isRecord(normalized)) {
|
|
151
|
-
const from = typeof normalized.from === "string" ? normalized.from : undefined;
|
|
152
|
-
const recipients = Array.isArray(normalized.to) ? normalized.to.filter((value) => typeof value === "string") : typeof normalized.to === "string" ? [normalized.to] : [];
|
|
153
|
-
if (from && config.allowedSenderAddresses && !config.allowedSenderAddresses.includes(from)) {
|
|
154
|
-
throw new Error(`email from ${from} not allowed`);
|
|
155
|
-
}
|
|
156
|
-
for (const recipient of recipients) {
|
|
157
|
-
if (config.destinationAddress !== undefined && recipient !== config.destinationAddress) {
|
|
158
|
-
throw new Error(`email to ${recipient} not allowed`);
|
|
159
|
-
}
|
|
160
|
-
if (config.allowedDestinationAddresses !== undefined && !config.allowedDestinationAddresses.includes(recipient)) {
|
|
161
|
-
throw new Error(`email to ${recipient} not allowed`);
|
|
162
|
-
}
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
await options.onSend?.(normalized);
|
|
166
|
-
return;
|
|
167
|
-
}
|
|
168
|
-
};
|
|
169
|
-
}
|
|
170
|
-
function setLocalSendEmailBindings(bindings) {
|
|
171
|
-
localSendEmailBindings.clear();
|
|
172
|
-
for (const [name, config] of Object.entries(bindings)) {
|
|
173
|
-
localSendEmailBindings.set(name, createLocalSendEmailBinding(config));
|
|
174
|
-
}
|
|
175
|
-
}
|
|
176
|
-
function clearLocalSendEmailBindings() {
|
|
177
|
-
localSendEmailBindings.clear();
|
|
178
|
-
}
|
|
179
|
-
function needsEnvSendEmailWrapping(env) {
|
|
180
|
-
if (localSendEmailBindings.size > 0) {
|
|
181
|
-
return true;
|
|
182
|
-
}
|
|
183
|
-
for (const key of Reflect.ownKeys(env)) {
|
|
184
|
-
const value = Reflect.get(env, key);
|
|
185
|
-
if (isSendEmailBinding(value)) {
|
|
186
|
-
return true;
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return false;
|
|
190
|
-
}
|
|
191
|
-
function wrapEnvSendEmailBindings(env) {
|
|
192
|
-
if (!isRecord(env)) {
|
|
193
|
-
return env;
|
|
194
|
-
}
|
|
195
|
-
if (!needsEnvSendEmailWrapping(env)) {
|
|
196
|
-
return env;
|
|
197
|
-
}
|
|
198
|
-
const cached = wrappedEnvBindings.get(env);
|
|
199
|
-
if (cached) {
|
|
200
|
-
return cached;
|
|
201
|
-
}
|
|
202
|
-
const wrapped = new Proxy(env, {
|
|
203
|
-
get(target, prop, receiver) {
|
|
204
|
-
if (typeof prop === "string" && localSendEmailBindings.has(prop)) {
|
|
205
|
-
return localSendEmailBindings.get(prop);
|
|
206
|
-
}
|
|
207
|
-
const value = Reflect.get(target, prop, receiver);
|
|
208
|
-
return isSendEmailBinding(value) ? wrapSendEmailBinding(value) : value;
|
|
209
|
-
},
|
|
210
|
-
has(target, prop) {
|
|
211
|
-
return Reflect.has(target, prop) || typeof prop === "string" && localSendEmailBindings.has(prop);
|
|
212
|
-
},
|
|
213
|
-
ownKeys(target) {
|
|
214
|
-
return Array.from(new Set([...Reflect.ownKeys(target), ...localSendEmailBindings.keys()]));
|
|
215
|
-
},
|
|
216
|
-
getOwnPropertyDescriptor(target, prop) {
|
|
217
|
-
if (typeof prop === "string" && localSendEmailBindings.has(prop)) {
|
|
218
|
-
return {
|
|
219
|
-
configurable: true,
|
|
220
|
-
enumerable: true,
|
|
221
|
-
writable: false,
|
|
222
|
-
value: localSendEmailBindings.get(prop)
|
|
223
|
-
};
|
|
224
|
-
}
|
|
225
|
-
const descriptor = Reflect.getOwnPropertyDescriptor(target, prop);
|
|
226
|
-
if (descriptor) {
|
|
227
|
-
return descriptor;
|
|
228
|
-
}
|
|
229
|
-
return;
|
|
230
|
-
}
|
|
231
|
-
});
|
|
232
|
-
wrappedEnvBindings.set(env, wrapped);
|
|
233
|
-
return wrapped;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export { createEmailMessageRaw, normalizeSendEmailMessage, wrapSendEmailBinding, createLocalSendEmailBinding, setLocalSendEmailBindings, clearLocalSendEmailBindings, wrapEnvSendEmailBindings };
|