@raybase/core 0.0.2 → 0.3.3
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/LICENSE +21 -0
- package/dist/.admin-build/AdminApp.css +2 -0
- package/dist/.admin-build/AdminApp.js +77 -0
- package/dist/.admin-docs-build/AdminDocsApp.css +2 -0
- package/dist/.admin-docs-build/AdminDocsApp.js +45 -0
- package/dist/actions.d.ts +347 -0
- package/dist/actions.d.ts.map +1 -0
- package/dist/actions.js +661 -0
- package/dist/actions.js.map +1 -0
- package/dist/admin-assets/admin.7738f50720a8ed7b.css +2 -0
- package/dist/admin-assets/admin.8678cb61db34dc81.js +77 -0
- package/dist/admin-boot.d.ts +94 -0
- package/dist/admin-boot.d.ts.map +1 -0
- package/dist/admin-boot.js +139 -0
- package/dist/admin-boot.js.map +1 -0
- package/dist/admin-docs-content.d.ts +95 -0
- package/dist/admin-docs-content.d.ts.map +1 -0
- package/dist/admin-docs-content.js +463 -0
- package/dist/admin-docs-content.js.map +1 -0
- package/dist/admin-docs-ui.d.ts +11 -0
- package/dist/admin-docs-ui.d.ts.map +1 -0
- package/dist/admin-docs-ui.js +23 -0
- package/dist/admin-docs-ui.js.map +1 -0
- package/dist/admin-kit.d.ts +29 -0
- package/dist/admin-kit.js +1557 -0
- package/dist/admin-role.d.ts +8 -0
- package/dist/admin-role.d.ts.map +1 -0
- package/dist/admin-role.js +22 -0
- package/dist/admin-role.js.map +1 -0
- package/dist/admin-ui.d.ts +3 -0
- package/dist/admin-ui.d.ts.map +1 -0
- package/dist/admin-ui.js +16 -0
- package/dist/admin-ui.js.map +1 -0
- package/dist/agent-ai-chat.d.ts +127 -0
- package/dist/agent-ai-chat.d.ts.map +1 -0
- package/dist/agent-ai-chat.js +5975 -0
- package/dist/agent-ai-chat.js.map +1 -0
- package/dist/agent-chapter-archive.d.ts +214 -0
- package/dist/agent-chapter-archive.d.ts.map +1 -0
- package/dist/agent-chapter-archive.js +696 -0
- package/dist/agent-chapter-archive.js.map +1 -0
- package/dist/agent-chapter-search.d.ts +116 -0
- package/dist/agent-chapter-search.d.ts.map +1 -0
- package/dist/agent-chapter-search.js +605 -0
- package/dist/agent-chapter-search.js.map +1 -0
- package/dist/agent-chapter-tools.d.ts +45 -0
- package/dist/agent-chapter-tools.d.ts.map +1 -0
- package/dist/agent-chapter-tools.js +344 -0
- package/dist/agent-chapter-tools.js.map +1 -0
- package/dist/agent-chapters.d.ts +228 -0
- package/dist/agent-chapters.d.ts.map +1 -0
- package/dist/agent-chapters.js +737 -0
- package/dist/agent-chapters.js.map +1 -0
- package/dist/agent-data-parts.d.ts +167 -0
- package/dist/agent-data-parts.d.ts.map +1 -0
- package/dist/agent-data-parts.js +68 -0
- package/dist/agent-data-parts.js.map +1 -0
- package/dist/agent-errors.d.ts +41 -0
- package/dist/agent-errors.d.ts.map +1 -0
- package/dist/agent-errors.js +191 -0
- package/dist/agent-errors.js.map +1 -0
- package/dist/agent-follow-up-store.d.ts +273 -0
- package/dist/agent-follow-up-store.d.ts.map +1 -0
- package/dist/agent-follow-up-store.js +703 -0
- package/dist/agent-follow-up-store.js.map +1 -0
- package/dist/agent-follow-ups.d.ts +314 -0
- package/dist/agent-follow-ups.d.ts.map +1 -0
- package/dist/agent-follow-ups.js +840 -0
- package/dist/agent-follow-ups.js.map +1 -0
- package/dist/agent-memory.d.ts +323 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +1270 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/agent-message-parts.d.ts +58 -0
- package/dist/agent-message-parts.d.ts.map +1 -0
- package/dist/agent-message-parts.js +163 -0
- package/dist/agent-message-parts.js.map +1 -0
- package/dist/agent-remote-mcp-credentials.d.ts +154 -0
- package/dist/agent-remote-mcp-credentials.d.ts.map +1 -0
- package/dist/agent-remote-mcp-credentials.js +287 -0
- package/dist/agent-remote-mcp-credentials.js.map +1 -0
- package/dist/agent-remote-mcp-crypto.d.ts +32 -0
- package/dist/agent-remote-mcp-crypto.d.ts.map +1 -0
- package/dist/agent-remote-mcp-crypto.js +101 -0
- package/dist/agent-remote-mcp-crypto.js.map +1 -0
- package/dist/agent-remote-mcp-install.d.ts +299 -0
- package/dist/agent-remote-mcp-install.d.ts.map +1 -0
- package/dist/agent-remote-mcp-install.js +785 -0
- package/dist/agent-remote-mcp-install.js.map +1 -0
- package/dist/agent-remote-mcp-oauth.d.ts +73 -0
- package/dist/agent-remote-mcp-oauth.d.ts.map +1 -0
- package/dist/agent-remote-mcp-oauth.js +344 -0
- package/dist/agent-remote-mcp-oauth.js.map +1 -0
- package/dist/agent-remote-mcp-transport.d.ts +46 -0
- package/dist/agent-remote-mcp-transport.d.ts.map +1 -0
- package/dist/agent-remote-mcp-transport.js +225 -0
- package/dist/agent-remote-mcp-transport.js.map +1 -0
- package/dist/agent-remote-mcp.d.ts +147 -0
- package/dist/agent-remote-mcp.d.ts.map +1 -0
- package/dist/agent-remote-mcp.js +681 -0
- package/dist/agent-remote-mcp.js.map +1 -0
- package/dist/agent-room-redaction.d.ts +66 -0
- package/dist/agent-room-redaction.d.ts.map +1 -0
- package/dist/agent-room-redaction.js +264 -0
- package/dist/agent-room-redaction.js.map +1 -0
- package/dist/agent-rooms.d.ts +209 -0
- package/dist/agent-rooms.d.ts.map +1 -0
- package/dist/agent-rooms.js +244 -0
- package/dist/agent-rooms.js.map +1 -0
- package/dist/agent-runtime.d.ts +541 -0
- package/dist/agent-runtime.d.ts.map +1 -0
- package/dist/agent-runtime.js +4260 -0
- package/dist/agent-runtime.js.map +1 -0
- package/dist/agent-skill-archive.d.ts +20 -0
- package/dist/agent-skill-archive.d.ts.map +1 -0
- package/dist/agent-skill-archive.js +316 -0
- package/dist/agent-skill-archive.js.map +1 -0
- package/dist/agent-skill-discovery.d.ts +96 -0
- package/dist/agent-skill-discovery.d.ts.map +1 -0
- package/dist/agent-skill-discovery.js +464 -0
- package/dist/agent-skill-discovery.js.map +1 -0
- package/dist/agent-skill-format.d.ts +57 -0
- package/dist/agent-skill-format.d.ts.map +1 -0
- package/dist/agent-skill-format.js +238 -0
- package/dist/agent-skill-format.js.map +1 -0
- package/dist/agent-skill-import.d.ts +64 -0
- package/dist/agent-skill-import.d.ts.map +1 -0
- package/dist/agent-skill-import.js +295 -0
- package/dist/agent-skill-import.js.map +1 -0
- package/dist/agent-skill-publish.d.ts +51 -0
- package/dist/agent-skill-publish.d.ts.map +1 -0
- package/dist/agent-skill-publish.js +136 -0
- package/dist/agent-skill-publish.js.map +1 -0
- package/dist/agent-skill-store.d.ts +252 -0
- package/dist/agent-skill-store.d.ts.map +1 -0
- package/dist/agent-skill-store.js +514 -0
- package/dist/agent-skill-store.js.map +1 -0
- package/dist/agent-skills.d.ts +85 -0
- package/dist/agent-skills.d.ts.map +1 -0
- package/dist/agent-skills.js +291 -0
- package/dist/agent-skills.js.map +1 -0
- package/dist/agent-transcript-pager.d.ts +77 -0
- package/dist/agent-transcript-pager.d.ts.map +1 -0
- package/dist/agent-transcript-pager.js +210 -0
- package/dist/agent-transcript-pager.js.map +1 -0
- package/dist/agent-user-data-parts.d.ts +20 -0
- package/dist/agent-user-data-parts.d.ts.map +1 -0
- package/dist/agent-user-data-parts.js +161 -0
- package/dist/agent-user-data-parts.js.map +1 -0
- package/dist/agent-user-transcript.d.ts +46 -0
- package/dist/agent-user-transcript.d.ts.map +1 -0
- package/dist/agent-user-transcript.js +106 -0
- package/dist/agent-user-transcript.js.map +1 -0
- package/dist/agent-voice-notes.d.ts +15 -0
- package/dist/agent-voice-notes.d.ts.map +1 -0
- package/dist/agent-voice-notes.js +17 -0
- package/dist/agent-voice-notes.js.map +1 -0
- package/dist/agent-wakes.d.ts +213 -0
- package/dist/agent-wakes.d.ts.map +1 -0
- package/dist/agent-wakes.js +534 -0
- package/dist/agent-wakes.js.map +1 -0
- package/dist/agent.d.ts +1780 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +3123 -0
- package/dist/agent.js.map +1 -0
- package/dist/ai.d.ts +583 -0
- package/dist/ai.d.ts.map +1 -0
- package/dist/ai.js +1858 -0
- package/dist/ai.js.map +1 -0
- package/dist/app-manifest.d.ts +255 -0
- package/dist/app-manifest.d.ts.map +1 -0
- package/dist/app-manifest.js +372 -0
- package/dist/app-manifest.js.map +1 -0
- package/dist/app-users.d.ts +30 -0
- package/dist/app-users.d.ts.map +1 -0
- package/dist/app-users.js +91 -0
- package/dist/app-users.js.map +1 -0
- package/dist/audit-archive.d.ts +85 -0
- package/dist/audit-archive.d.ts.map +1 -0
- package/dist/audit-archive.js +178 -0
- package/dist/audit-archive.js.map +1 -0
- package/dist/audit.d.ts +54 -0
- package/dist/audit.d.ts.map +1 -0
- package/dist/audit.js +95 -0
- package/dist/audit.js.map +1 -0
- package/dist/auth-logger.d.ts +28 -0
- package/dist/auth-logger.d.ts.map +1 -0
- package/dist/auth-logger.js +53 -0
- package/dist/auth-logger.js.map +1 -0
- package/dist/auth-password-secret.d.ts +59 -0
- package/dist/auth-password-secret.d.ts.map +1 -0
- package/dist/auth-password-secret.js +409 -0
- package/dist/auth-password-secret.js.map +1 -0
- package/dist/auth-schema.d.ts +120 -0
- package/dist/auth-schema.d.ts.map +1 -0
- package/dist/auth-schema.js +285 -0
- package/dist/auth-schema.js.map +1 -0
- package/dist/auth.d.ts +321 -0
- package/dist/auth.d.ts.map +1 -0
- package/dist/auth.js +1562 -0
- package/dist/auth.js.map +1 -0
- package/dist/backup-archive.d.ts +257 -0
- package/dist/backup-archive.d.ts.map +1 -0
- package/dist/backup-archive.js +2068 -0
- package/dist/backup-archive.js.map +1 -0
- package/dist/backup-crypto.d.ts +313 -0
- package/dist/backup-crypto.d.ts.map +1 -0
- package/dist/backup-crypto.js +693 -0
- package/dist/backup-crypto.js.map +1 -0
- package/dist/backup-format.d.ts +200 -0
- package/dist/backup-format.d.ts.map +1 -0
- package/dist/backup-format.js +1247 -0
- package/dist/backup-format.js.map +1 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +15 -0
- package/dist/cli.js.map +1 -0
- package/dist/clock.d.ts +35 -0
- package/dist/clock.d.ts.map +1 -0
- package/dist/clock.js +83 -0
- package/dist/clock.js.map +1 -0
- package/dist/data-client.d.ts +187 -0
- package/dist/data-client.d.ts.map +1 -0
- package/dist/data-client.js +590 -0
- package/dist/data-client.js.map +1 -0
- package/dist/data-secrets.d.ts +164 -0
- package/dist/data-secrets.d.ts.map +1 -0
- package/dist/data-secrets.js +383 -0
- package/dist/data-secrets.js.map +1 -0
- package/dist/db.d.ts +453 -0
- package/dist/db.d.ts.map +1 -0
- package/dist/db.js +324 -0
- package/dist/db.js.map +1 -0
- package/dist/dev-activity.d.ts +48 -0
- package/dist/dev-activity.d.ts.map +1 -0
- package/dist/dev-activity.js +50 -0
- package/dist/dev-activity.js.map +1 -0
- package/dist/do.d.ts +429 -0
- package/dist/do.d.ts.map +1 -0
- package/dist/do.js +4526 -0
- package/dist/do.js.map +1 -0
- package/dist/email.d.ts +137 -0
- package/dist/email.d.ts.map +1 -0
- package/dist/email.js +527 -0
- package/dist/email.js.map +1 -0
- package/dist/generated/admin-assets.d.ts +16 -0
- package/dist/generated/admin-assets.d.ts.map +1 -0
- package/dist/generated/admin-assets.js +16 -0
- package/dist/generated/admin-assets.js.map +1 -0
- package/dist/generated/admin-docs-assets.d.ts +3 -0
- package/dist/generated/admin-docs-assets.d.ts.map +1 -0
- package/dist/generated/admin-docs-assets.js +3 -0
- package/dist/generated/admin-docs-assets.js.map +1 -0
- package/dist/handoff-consumer.d.ts +79 -0
- package/dist/handoff-consumer.d.ts.map +1 -0
- package/dist/handoff-consumer.js +300 -0
- package/dist/handoff-consumer.js.map +1 -0
- package/dist/handoff.d.ts +70 -0
- package/dist/handoff.d.ts.map +1 -0
- package/dist/handoff.js +228 -0
- package/dist/handoff.js.map +1 -0
- package/dist/host-auth.d.ts +47 -0
- package/dist/host-auth.d.ts.map +1 -0
- package/dist/host-auth.js +59 -0
- package/dist/host-auth.js.map +1 -0
- package/dist/host-user.d.ts +15 -0
- package/dist/host-user.d.ts.map +1 -0
- package/dist/host-user.js +23 -0
- package/dist/host-user.js.map +1 -0
- package/dist/html.d.ts +35 -0
- package/dist/html.d.ts.map +1 -0
- package/dist/html.js +634 -0
- package/dist/html.js.map +1 -0
- package/dist/http-error.d.ts +13 -0
- package/dist/http-error.d.ts.map +1 -0
- package/dist/http-error.js +15 -0
- package/dist/http-error.js.map +1 -0
- package/dist/imports.d.ts +219 -0
- package/dist/imports.d.ts.map +1 -0
- package/dist/imports.js +571 -0
- package/dist/imports.js.map +1 -0
- package/dist/index.d.ts +78 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +76 -0
- package/dist/index.js.map +1 -0
- package/dist/inference-tape.d.ts +64 -0
- package/dist/inference-tape.d.ts.map +1 -0
- package/dist/inference-tape.js +278 -0
- package/dist/inference-tape.js.map +1 -0
- package/dist/internal.d.ts +15 -0
- package/dist/internal.d.ts.map +1 -0
- package/dist/internal.js +48 -0
- package/dist/internal.js.map +1 -0
- package/dist/jobs.d.ts +796 -0
- package/dist/jobs.d.ts.map +1 -0
- package/dist/jobs.js +538 -0
- package/dist/jobs.js.map +1 -0
- package/dist/json-schema.d.ts +91 -0
- package/dist/json-schema.d.ts.map +1 -0
- package/dist/json-schema.js +884 -0
- package/dist/json-schema.js.map +1 -0
- package/dist/knowledge.d.ts +33 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +348 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/local-dev-chrome.d.ts +29 -0
- package/dist/local-dev-chrome.d.ts.map +1 -0
- package/dist/local-dev-chrome.js +514 -0
- package/dist/local-dev-chrome.js.map +1 -0
- package/dist/local-dev-personas.d.ts +15 -0
- package/dist/local-dev-personas.d.ts.map +1 -0
- package/dist/local-dev-personas.js +46 -0
- package/dist/local-dev-personas.js.map +1 -0
- package/dist/mcp.d.ts +567 -0
- package/dist/mcp.d.ts.map +1 -0
- package/dist/mcp.js +2480 -0
- package/dist/mcp.js.map +1 -0
- package/dist/modules.d.ts +145 -0
- package/dist/modules.d.ts.map +1 -0
- package/dist/modules.js +164 -0
- package/dist/modules.js.map +1 -0
- package/dist/notification-client.d.ts +94 -0
- package/dist/notification-client.d.ts.map +1 -0
- package/dist/notification-client.js +127 -0
- package/dist/notification-client.js.map +1 -0
- package/dist/notifications.d.ts +447 -0
- package/dist/notifications.d.ts.map +1 -0
- package/dist/notifications.js +1625 -0
- package/dist/notifications.js.map +1 -0
- package/dist/operator-data-query.d.ts +117 -0
- package/dist/operator-data-query.d.ts.map +1 -0
- package/dist/operator-data-query.js +431 -0
- package/dist/operator-data-query.js.map +1 -0
- package/dist/operator-mcp.d.ts +63 -0
- package/dist/operator-mcp.d.ts.map +1 -0
- package/dist/operator-mcp.js +2828 -0
- package/dist/operator-mcp.js.map +1 -0
- package/dist/outbound-https.d.ts +24 -0
- package/dist/outbound-https.d.ts.map +1 -0
- package/dist/outbound-https.js +172 -0
- package/dist/outbound-https.js.map +1 -0
- package/dist/pitr.d.ts +60 -0
- package/dist/pitr.d.ts.map +1 -0
- package/dist/pitr.js +94 -0
- package/dist/pitr.js.map +1 -0
- package/dist/platform.d.ts +199 -0
- package/dist/platform.d.ts.map +1 -0
- package/dist/platform.js +196 -0
- package/dist/platform.js.map +1 -0
- package/dist/policies.d.ts +115 -0
- package/dist/policies.d.ts.map +1 -0
- package/dist/policies.js +158 -0
- package/dist/policies.js.map +1 -0
- package/dist/principal.d.ts +143 -0
- package/dist/principal.d.ts.map +1 -0
- package/dist/principal.js +174 -0
- package/dist/principal.js.map +1 -0
- package/dist/realtime.d.ts +280 -0
- package/dist/realtime.d.ts.map +1 -0
- package/dist/realtime.js +578 -0
- package/dist/realtime.js.map +1 -0
- package/dist/retrieval.d.ts +263 -0
- package/dist/retrieval.d.ts.map +1 -0
- package/dist/retrieval.js +602 -0
- package/dist/retrieval.js.map +1 -0
- package/dist/runtime-error-client.d.ts +10 -0
- package/dist/runtime-error-client.d.ts.map +1 -0
- package/dist/runtime-error-client.js +70 -0
- package/dist/runtime-error-client.js.map +1 -0
- package/dist/runtime-errors.d.ts +180 -0
- package/dist/runtime-errors.d.ts.map +1 -0
- package/dist/runtime-errors.js +572 -0
- package/dist/runtime-errors.js.map +1 -0
- package/dist/schema.d.ts +434 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +232 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +216 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +785 -0
- package/dist/search.js.map +1 -0
- package/dist/settings.d.ts +191 -0
- package/dist/settings.d.ts.map +1 -0
- package/dist/settings.js +478 -0
- package/dist/settings.js.map +1 -0
- package/dist/sql.d.ts +7 -0
- package/dist/sql.d.ts.map +1 -0
- package/dist/sql.js +30 -0
- package/dist/sql.js.map +1 -0
- package/dist/storage-client.d.ts +69 -0
- package/dist/storage-client.d.ts.map +1 -0
- package/dist/storage-client.js +469 -0
- package/dist/storage-client.js.map +1 -0
- package/dist/storage.d.ts +21 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +82 -0
- package/dist/storage.js.map +1 -0
- package/dist/subject-domains.d.ts +15 -0
- package/dist/subject-domains.d.ts.map +1 -0
- package/dist/subject-domains.js +38 -0
- package/dist/subject-domains.js.map +1 -0
- package/dist/support.d.ts +132 -0
- package/dist/support.d.ts.map +1 -0
- package/dist/support.js +483 -0
- package/dist/support.js.map +1 -0
- package/dist/system-tables.d.ts +12 -0
- package/dist/system-tables.d.ts.map +1 -0
- package/dist/system-tables.js +225 -0
- package/dist/system-tables.js.map +1 -0
- package/dist/test.d.ts +57 -0
- package/dist/test.d.ts.map +1 -0
- package/dist/test.js +454 -0
- package/dist/test.js.map +1 -0
- package/dist/vite.d.ts +82 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +82 -0
- package/dist/vite.js.map +1 -0
- package/dist/webpush-crypto.d.ts +39 -0
- package/dist/webpush-crypto.d.ts.map +1 -0
- package/dist/webpush-crypto.js +213 -0
- package/dist/webpush-crypto.js.map +1 -0
- package/dist/webpush-private.d.ts +11 -0
- package/dist/webpush-private.d.ts.map +1 -0
- package/dist/webpush-private.js +11 -0
- package/dist/webpush-private.js.map +1 -0
- package/dist/webpush.d.ts +86 -0
- package/dist/webpush.d.ts.map +1 -0
- package/dist/webpush.js +375 -0
- package/dist/webpush.js.map +1 -0
- package/dist/worker.d.ts +185 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +13021 -0
- package/dist/worker.js.map +1 -0
- package/package.json +161 -8
- package/README.md +0 -3
package/dist/email.js
ADDED
|
@@ -0,0 +1,527 @@
|
|
|
1
|
+
const defaultEmailBindingName = "EMAIL";
|
|
2
|
+
const emailPattern = /^[^\s@<>]+@[^\s@<>]+\.[^\s@<>]+$/;
|
|
3
|
+
export function resolveRaybaseAuthEmailConfig(config) {
|
|
4
|
+
const input = config.auth?.email;
|
|
5
|
+
if (!input)
|
|
6
|
+
return null;
|
|
7
|
+
if (input.provider === "raybase-relay") {
|
|
8
|
+
return {
|
|
9
|
+
provider: "raybase-relay",
|
|
10
|
+
serviceUrl: normalizeServiceUrl(input.serviceUrl ?? "https://auth.raybase.dev"),
|
|
11
|
+
tokenEnv: String(input.tokenEnv || "RAYBASE_HOSTED_AUTH_TOKEN").trim(),
|
|
12
|
+
appUrl: normalizeAppUrl(input.appUrl),
|
|
13
|
+
verificationChallenge: input.verificationChallenge?.trim() || undefined,
|
|
14
|
+
...resolvedEmailFeatures(input)
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
if (input.provider !== "cloudflare")
|
|
18
|
+
return null;
|
|
19
|
+
const from = String(input.from ?? "").trim();
|
|
20
|
+
if (!from)
|
|
21
|
+
throw new Error("auth.email.from is required when Cloudflare auth email is configured");
|
|
22
|
+
validateEmailAddress(from, "auth.email.from");
|
|
23
|
+
if (input.replyTo)
|
|
24
|
+
validateEmailAddress(input.replyTo, "auth.email.replyTo");
|
|
25
|
+
const binding = String(input.binding || defaultEmailBindingName).trim();
|
|
26
|
+
if (!binding)
|
|
27
|
+
throw new Error("auth.email.binding must not be empty");
|
|
28
|
+
return {
|
|
29
|
+
provider: "cloudflare",
|
|
30
|
+
binding,
|
|
31
|
+
from,
|
|
32
|
+
replyTo: input.replyTo?.trim() || undefined,
|
|
33
|
+
appUrl: normalizeAppUrl(input.appUrl),
|
|
34
|
+
allowLocalSend: input.allowLocalSend === true,
|
|
35
|
+
...resolvedEmailFeatures(input)
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function hasRaybaseAuthEmailConfig(config) {
|
|
39
|
+
return config.auth?.email?.provider === "cloudflare" || config.auth?.email?.provider === "raybase-relay";
|
|
40
|
+
}
|
|
41
|
+
export function isRaybaseAuthEmailFeatureEnabled(config, feature) {
|
|
42
|
+
const resolved = resolveRaybaseAuthEmailConfig(config);
|
|
43
|
+
return Boolean(resolved?.[feature].enabled);
|
|
44
|
+
}
|
|
45
|
+
export async function sendCloudflareEmail(env, config, message, options = {}) {
|
|
46
|
+
const resolved = resolveRaybaseCloudflareAuthEmailConfig(config);
|
|
47
|
+
if (!resolved)
|
|
48
|
+
throw new Error("Cloudflare auth email is not configured");
|
|
49
|
+
const recipients = normalizeRecipients(message.to);
|
|
50
|
+
if (!recipients.length)
|
|
51
|
+
throw Object.assign(new Error("Email recipient is required"), { code: "E_FIELD_MISSING", status: 400 });
|
|
52
|
+
if (!message.subject.trim())
|
|
53
|
+
throw Object.assign(new Error("Email subject is required"), { code: "E_FIELD_MISSING", status: 400 });
|
|
54
|
+
if (!message.text.trim() && !message.html?.trim())
|
|
55
|
+
throw Object.assign(new Error("Email body is required"), { code: "E_FIELD_MISSING", status: 400 });
|
|
56
|
+
if (options.isLocal && !resolved.allowLocalSend && options.allowLocalSend !== true) {
|
|
57
|
+
return {
|
|
58
|
+
status: "skipped",
|
|
59
|
+
reason: "local",
|
|
60
|
+
requestSummary: emailRequestSummary(resolved.binding, recipients, message.subject)
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
const binding = env[resolved.binding];
|
|
64
|
+
if (!binding || typeof binding.send !== "function") {
|
|
65
|
+
throw Object.assign(new Error(`Cloudflare Email Service binding ${resolved.binding} is missing`), { code: "E_FIELD_MISSING", status: 400 });
|
|
66
|
+
}
|
|
67
|
+
const payload = {
|
|
68
|
+
to: recipients.length === 1 ? recipients[0] : recipients,
|
|
69
|
+
from: resolved.from,
|
|
70
|
+
subject: message.subject,
|
|
71
|
+
text: message.text,
|
|
72
|
+
html: message.html,
|
|
73
|
+
replyTo: message.replyTo ?? resolved.replyTo,
|
|
74
|
+
headers: message.headers
|
|
75
|
+
};
|
|
76
|
+
const response = await binding.send(payload);
|
|
77
|
+
return {
|
|
78
|
+
status: "sent",
|
|
79
|
+
providerMessageId: response?.messageId,
|
|
80
|
+
requestSummary: emailRequestSummary(resolved.binding, recipients, message.subject),
|
|
81
|
+
responseSummary: response ? { messageId: response.messageId } : undefined
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
export async function sendRaybaseAuthEmail(env, config, templateId, input, options = {}) {
|
|
85
|
+
const resolved = resolveRaybaseAuthEmailConfig(config);
|
|
86
|
+
if (!resolved)
|
|
87
|
+
throw new Error("Raybase auth email is not configured");
|
|
88
|
+
if (resolved.provider === "cloudflare") {
|
|
89
|
+
return sendCloudflareEmail(env, config, authEmailTemplates(config)[templateId](input), options);
|
|
90
|
+
}
|
|
91
|
+
return sendRaybaseRelayAuthEmail(env, config, templateId, input, options);
|
|
92
|
+
}
|
|
93
|
+
export async function sendRaybaseRelayAuthEmail(env, config, templateId, input, _options = {}) {
|
|
94
|
+
const resolved = resolveRaybaseAuthEmailConfig(config);
|
|
95
|
+
if (!resolved || resolved.provider !== "raybase-relay")
|
|
96
|
+
throw new Error("Raybase relay auth email is not configured");
|
|
97
|
+
const token = String(env[resolved.tokenEnv] ?? "").trim();
|
|
98
|
+
if (!token)
|
|
99
|
+
throw Object.assign(new Error(`Raybase hosted auth token ${resolved.tokenEnv} is missing`), { code: "E_FIELD_MISSING", status: 400 });
|
|
100
|
+
const relayTemplate = relayTemplateId(templateId);
|
|
101
|
+
const { to, params } = relayParams(templateId, input);
|
|
102
|
+
const response = await fetch(`${resolved.serviceUrl}/v1/relay/auth-email`, {
|
|
103
|
+
method: "POST",
|
|
104
|
+
headers: {
|
|
105
|
+
accept: "application/json",
|
|
106
|
+
authorization: `Bearer ${token}`,
|
|
107
|
+
"content-type": "application/json"
|
|
108
|
+
},
|
|
109
|
+
body: JSON.stringify({ template: relayTemplate, to, params })
|
|
110
|
+
});
|
|
111
|
+
const body = (await response.json().catch(() => ({})));
|
|
112
|
+
if (!response.ok) {
|
|
113
|
+
throw Object.assign(new Error(String(body.message ?? body.error ?? `Raybase hosted auth relay returned HTTP ${response.status}`)), {
|
|
114
|
+
code: body.code ?? "E_RELAY_FAILED",
|
|
115
|
+
status: response.status
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
status: body.status === "skipped" ? "skipped" : "sent",
|
|
120
|
+
reason: body.status === "skipped" ? "relay-dev" : undefined,
|
|
121
|
+
providerMessageId: typeof body.providerMessageId === "string" ? body.providerMessageId : undefined,
|
|
122
|
+
requestSummary: {
|
|
123
|
+
provider: "raybase-relay",
|
|
124
|
+
serviceUrl: resolved.serviceUrl,
|
|
125
|
+
tokenEnv: resolved.tokenEnv,
|
|
126
|
+
template: relayTemplate,
|
|
127
|
+
recipient: maskEmailAddress(to)
|
|
128
|
+
},
|
|
129
|
+
responseSummary: { status: body.status, providerMessageId: body.providerMessageId }
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
export function raybaseAuthEmailProvider(config) {
|
|
133
|
+
return resolveRaybaseAuthEmailConfig(config)?.provider ?? null;
|
|
134
|
+
}
|
|
135
|
+
export function cloudflareEmailErrorClassification(error) {
|
|
136
|
+
const status = typeof error === "object" && error ? Number(error.status) : 0;
|
|
137
|
+
const code = typeof error === "object" && error ? String(error.code ?? "") : "";
|
|
138
|
+
if (status === 408 || status === 409 || status === 425 || status === 429 || status >= 500)
|
|
139
|
+
return "retry";
|
|
140
|
+
if (["E_RATE_LIMIT_EXCEEDED", "E_DAILY_LIMIT_EXCEEDED", "E_INTERNAL_SERVER_ERROR"].includes(code))
|
|
141
|
+
return "retry";
|
|
142
|
+
if ([
|
|
143
|
+
"E_VALIDATION_ERROR",
|
|
144
|
+
"E_FIELD_MISSING",
|
|
145
|
+
"E_TOO_MANY_RECIPIENTS",
|
|
146
|
+
"E_TOO_MANY_ATTACHMENTS",
|
|
147
|
+
"E_SENDER_NOT_VERIFIED",
|
|
148
|
+
"E_RECIPIENT_NOT_ALLOWED",
|
|
149
|
+
"E_RECIPIENT_SUPPRESSED",
|
|
150
|
+
"E_SENDER_DOMAIN_NOT_AVAILABLE",
|
|
151
|
+
"E_CONTENT_TOO_LARGE",
|
|
152
|
+
"E_DELIVERY_FAILED",
|
|
153
|
+
"E_HEADER_NOT_ALLOWED",
|
|
154
|
+
"E_HEADER_USE_API_FIELD",
|
|
155
|
+
"E_HEADER_VALUE_INVALID",
|
|
156
|
+
"E_HEADER_VALUE_TOO_LONG",
|
|
157
|
+
"E_HEADER_NAME_INVALID",
|
|
158
|
+
"E_HEADERS_TOO_LARGE",
|
|
159
|
+
"E_HEADERS_TOO_MANY"
|
|
160
|
+
].includes(code) ||
|
|
161
|
+
(status >= 400 && status < 500)) {
|
|
162
|
+
return "permanent";
|
|
163
|
+
}
|
|
164
|
+
return "retry";
|
|
165
|
+
}
|
|
166
|
+
export function cloudflareEmailNotificationAdapter(config, options = {}) {
|
|
167
|
+
return {
|
|
168
|
+
name: "cloudflare-email",
|
|
169
|
+
channel: "email",
|
|
170
|
+
description: "Cloudflare Email Service delivery",
|
|
171
|
+
allowLocalSend: options.allowLocalSend,
|
|
172
|
+
async send(delivery, ctx) {
|
|
173
|
+
const target = notificationDeliveryTarget(delivery);
|
|
174
|
+
if (!target)
|
|
175
|
+
throw Object.assign(new Error("Notification delivery has no recipient email snapshot"), { code: "E_FIELD_MISSING", status: 400 });
|
|
176
|
+
const result = await sendCloudflareEmail(ctx.env, config, notificationEmailMessage(delivery, target), {
|
|
177
|
+
isLocal: ctx.isLocal,
|
|
178
|
+
allowLocalSend: options.allowLocalSend
|
|
179
|
+
});
|
|
180
|
+
return {
|
|
181
|
+
status: result.status === "skipped" ? "skipped" : "delivered",
|
|
182
|
+
providerMessageId: result.status === "sent" ? result.providerMessageId : undefined,
|
|
183
|
+
requestSummary: result.requestSummary,
|
|
184
|
+
responseSummary: result.status === "sent" ? result.responseSummary : { skippedLocal: true }
|
|
185
|
+
};
|
|
186
|
+
},
|
|
187
|
+
classifyError: cloudflareEmailErrorClassification,
|
|
188
|
+
async health(ctx) {
|
|
189
|
+
const resolved = resolveRaybaseCloudflareAuthEmailConfig(config);
|
|
190
|
+
const binding = resolved ? ctx.env[resolved.binding] : undefined;
|
|
191
|
+
return {
|
|
192
|
+
ok: Boolean(resolved && binding && typeof binding.send === "function"),
|
|
193
|
+
label: "cloudflare-email",
|
|
194
|
+
details: {
|
|
195
|
+
configured: Boolean(resolved),
|
|
196
|
+
binding: resolved?.binding ?? defaultEmailBindingName,
|
|
197
|
+
bindingPresent: Boolean(binding)
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
},
|
|
201
|
+
async doctor(ctx) {
|
|
202
|
+
const resolved = resolveRaybaseCloudflareAuthEmailConfig(config);
|
|
203
|
+
const binding = resolved ? ctx.env[resolved.binding] : undefined;
|
|
204
|
+
return resolved && (!binding || typeof binding.send !== "function")
|
|
205
|
+
? [{ severity: "error", message: `Cloudflare Email Service binding ${resolved.binding} is missing.` }]
|
|
206
|
+
: [];
|
|
207
|
+
}
|
|
208
|
+
};
|
|
209
|
+
}
|
|
210
|
+
function resolveRaybaseCloudflareAuthEmailConfig(config) {
|
|
211
|
+
const resolved = resolveRaybaseAuthEmailConfig(config);
|
|
212
|
+
return resolved?.provider === "cloudflare" ? resolved : null;
|
|
213
|
+
}
|
|
214
|
+
export function authEmailTemplates(config) {
|
|
215
|
+
return {
|
|
216
|
+
passwordReset(input) {
|
|
217
|
+
const subject = `Reset your ${config.appName} password`;
|
|
218
|
+
const text = [
|
|
219
|
+
`Use this link to reset your ${config.appName} password:`,
|
|
220
|
+
"",
|
|
221
|
+
input.resetUrl,
|
|
222
|
+
"",
|
|
223
|
+
"If you did not request this, you can ignore this email."
|
|
224
|
+
].join("\n");
|
|
225
|
+
return authEmailTemplateOverride(config, "passwordReset", input, {
|
|
226
|
+
to: input.to,
|
|
227
|
+
subject,
|
|
228
|
+
text,
|
|
229
|
+
html: paragraphs([`Use this link to reset your ${escapeHtml(config.appName)} password.`, linkHtml(input.resetUrl, "Reset password"), "If you did not request this, you can ignore this email."])
|
|
230
|
+
});
|
|
231
|
+
},
|
|
232
|
+
invite(input) {
|
|
233
|
+
const subject = `You are invited to ${config.appName}`;
|
|
234
|
+
const inviter = input.inviter?.name || input.inviter?.email;
|
|
235
|
+
const intro = inviter ? `${inviter} invited you to ${config.appName}.` : `You have been invited to ${config.appName}.`;
|
|
236
|
+
const text = [intro, "", input.inviteUrl, "", `This invite expires at ${input.expiresAt}.`].join("\n");
|
|
237
|
+
return authEmailTemplateOverride(config, "invite", input, {
|
|
238
|
+
to: input.to,
|
|
239
|
+
subject,
|
|
240
|
+
text,
|
|
241
|
+
html: paragraphs([escapeHtml(intro), linkHtml(input.inviteUrl, "Accept invite"), `This invite expires at ${escapeHtml(input.expiresAt)}.`])
|
|
242
|
+
});
|
|
243
|
+
},
|
|
244
|
+
welcome(input) {
|
|
245
|
+
const subject = `Welcome to ${config.appName}`;
|
|
246
|
+
const greeting = input.name ? `Welcome, ${input.name}.` : "Welcome.";
|
|
247
|
+
const text = [greeting, `Your ${config.appName} account is ready.`, "", input.appUrl].join("\n");
|
|
248
|
+
return authEmailTemplateOverride(config, "welcome", input, {
|
|
249
|
+
to: input.to,
|
|
250
|
+
subject,
|
|
251
|
+
text,
|
|
252
|
+
html: paragraphs([escapeHtml(greeting), `Your ${escapeHtml(config.appName)} account is ready.`, linkHtml(input.appUrl, "Open app")])
|
|
253
|
+
});
|
|
254
|
+
},
|
|
255
|
+
emailVerification(input) {
|
|
256
|
+
const subject = `Verify your ${config.appName} email`;
|
|
257
|
+
const text = [`Use this link to verify your ${config.appName} email address:`, "", input.verifyUrl, "", "If you did not create this account, you can ignore this email."].join("\n");
|
|
258
|
+
return authEmailTemplateOverride(config, "emailVerification", input, {
|
|
259
|
+
to: input.to,
|
|
260
|
+
subject,
|
|
261
|
+
text,
|
|
262
|
+
html: paragraphs([
|
|
263
|
+
`Use this link to verify your ${escapeHtml(config.appName)} email address.`,
|
|
264
|
+
linkHtml(input.verifyUrl, "Verify email"),
|
|
265
|
+
"If you did not create this account, you can ignore this email."
|
|
266
|
+
])
|
|
267
|
+
});
|
|
268
|
+
},
|
|
269
|
+
magicLink(input) {
|
|
270
|
+
const subject = `Sign in to ${config.appName}`;
|
|
271
|
+
const text = [`Use this link to sign in to ${config.appName}:`, "", input.signInUrl, "", "If you did not request this, you can ignore this email."].join("\n");
|
|
272
|
+
return authEmailTemplateOverride(config, "magicLink", input, {
|
|
273
|
+
to: input.to,
|
|
274
|
+
subject,
|
|
275
|
+
text,
|
|
276
|
+
html: paragraphs([`Use this link to sign in to ${escapeHtml(config.appName)}.`, linkHtml(input.signInUrl, "Sign in"), "If you did not request this, you can ignore this email."])
|
|
277
|
+
});
|
|
278
|
+
},
|
|
279
|
+
emailCode(input) {
|
|
280
|
+
const subject = `Your ${config.appName} sign-in code`;
|
|
281
|
+
const text = [`Use this code to sign in to ${config.appName}:`, "", input.code, "", "If you did not request this, you can ignore this email."].join("\n");
|
|
282
|
+
return authEmailTemplateOverride(config, "emailCode", input, {
|
|
283
|
+
to: input.to,
|
|
284
|
+
subject,
|
|
285
|
+
text,
|
|
286
|
+
html: paragraphs([`Use this code to sign in to ${escapeHtml(config.appName)}.`, `<strong>${escapeHtml(input.code)}</strong>`, "If you did not request this, you can ignore this email."])
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
function authEmailTemplateOverride(config, templateId, input, fallback) {
|
|
292
|
+
// Hosted relay templates are fixed at the trust boundary.
|
|
293
|
+
if (config.auth?.email?.provider !== "cloudflare")
|
|
294
|
+
return fallback;
|
|
295
|
+
const override = config.auth.email.templates?.[templateId];
|
|
296
|
+
if (!override?.subject && !override?.body)
|
|
297
|
+
return fallback;
|
|
298
|
+
const variables = authEmailTemplateVariables(config, input);
|
|
299
|
+
const subject = override.subject
|
|
300
|
+
? renderAuthEmailTemplateString(override.subject, variables, templateId)
|
|
301
|
+
: fallback.subject;
|
|
302
|
+
const text = override.body
|
|
303
|
+
? renderAuthEmailTemplateString(override.body, variables, templateId)
|
|
304
|
+
: fallback.text;
|
|
305
|
+
return {
|
|
306
|
+
...fallback,
|
|
307
|
+
subject,
|
|
308
|
+
text,
|
|
309
|
+
...(override.body ? { html: authEmailBodyHtml(text) } : {})
|
|
310
|
+
};
|
|
311
|
+
}
|
|
312
|
+
function authEmailTemplateVariables(config, input) {
|
|
313
|
+
const variables = { appName: config.appName };
|
|
314
|
+
for (const [key, value] of Object.entries(input)) {
|
|
315
|
+
if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") {
|
|
316
|
+
variables[key] = String(value);
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const inviter = input.inviter;
|
|
320
|
+
if (inviter && typeof inviter === "object" && !Array.isArray(inviter)) {
|
|
321
|
+
const record = inviter;
|
|
322
|
+
if (typeof record.name === "string")
|
|
323
|
+
variables.inviterName = record.name;
|
|
324
|
+
if (typeof record.email === "string")
|
|
325
|
+
variables.inviterEmail = record.email;
|
|
326
|
+
variables.inviter = variables.inviterName || variables.inviterEmail || "";
|
|
327
|
+
}
|
|
328
|
+
return variables;
|
|
329
|
+
}
|
|
330
|
+
function renderAuthEmailTemplateString(source, variables, templateId) {
|
|
331
|
+
return source.replace(/\{\{\s*([A-Za-z][A-Za-z0-9]*)\s*\}\}/g, (_match, name) => {
|
|
332
|
+
if (!Object.hasOwn(variables, name)) {
|
|
333
|
+
throw new Error(`Unknown auth.email.templates.${templateId} variable ${name}`);
|
|
334
|
+
}
|
|
335
|
+
return variables[name];
|
|
336
|
+
});
|
|
337
|
+
}
|
|
338
|
+
function authEmailBodyHtml(text) {
|
|
339
|
+
const blocks = text.split(/\n{2,}/).map((block) => escapeHtml(block).replace(/\n/g, "<br>"));
|
|
340
|
+
return paragraphs(blocks);
|
|
341
|
+
}
|
|
342
|
+
export function appUrlForEmail(config, request) {
|
|
343
|
+
const resolved = resolveRaybaseAuthEmailConfig(config);
|
|
344
|
+
if (resolved?.appUrl)
|
|
345
|
+
return resolved.appUrl;
|
|
346
|
+
if (request) {
|
|
347
|
+
const url = new URL(request.url);
|
|
348
|
+
return url.origin;
|
|
349
|
+
}
|
|
350
|
+
return "";
|
|
351
|
+
}
|
|
352
|
+
export function rewriteEmailUrl(url, config, request) {
|
|
353
|
+
const base = appUrlForEmail(config, request);
|
|
354
|
+
if (!base)
|
|
355
|
+
return url;
|
|
356
|
+
const parsed = new URL(url, base);
|
|
357
|
+
const app = new URL(base);
|
|
358
|
+
parsed.protocol = app.protocol;
|
|
359
|
+
parsed.host = app.host;
|
|
360
|
+
return parsed.toString();
|
|
361
|
+
}
|
|
362
|
+
export function redactedEmailError(error) {
|
|
363
|
+
return {
|
|
364
|
+
name: error instanceof Error ? error.name : "Error",
|
|
365
|
+
message: redactEmailSecrets(error instanceof Error ? error.message : String(error)),
|
|
366
|
+
code: typeof error === "object" && error ? error.code : undefined
|
|
367
|
+
};
|
|
368
|
+
}
|
|
369
|
+
function notificationDeliveryTarget(delivery) {
|
|
370
|
+
if (!delivery.recipientEmail)
|
|
371
|
+
return null;
|
|
372
|
+
return delivery.recipientName ? { email: delivery.recipientEmail, name: delivery.recipientName } : delivery.recipientEmail;
|
|
373
|
+
}
|
|
374
|
+
function notificationEmailMessage(delivery, to) {
|
|
375
|
+
const text = [delivery.notification.title, delivery.notification.body, delivery.notification.targetHref].filter(Boolean).join("\n\n");
|
|
376
|
+
return {
|
|
377
|
+
to,
|
|
378
|
+
subject: delivery.notification.title,
|
|
379
|
+
text,
|
|
380
|
+
html: paragraphs([
|
|
381
|
+
`<strong>${escapeHtml(delivery.notification.title)}</strong>`,
|
|
382
|
+
delivery.notification.body ? escapeHtml(delivery.notification.body) : "",
|
|
383
|
+
delivery.notification.targetHref ? linkHtml(delivery.notification.targetHref, "Open") : ""
|
|
384
|
+
].filter(Boolean))
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
function normalizeRecipients(value) {
|
|
388
|
+
const recipients = Array.isArray(value) ? value : [value];
|
|
389
|
+
if (recipients.length > 50)
|
|
390
|
+
throw Object.assign(new Error("Email cannot have more than 50 recipients"), { code: "E_TOO_MANY_RECIPIENTS", status: 400 });
|
|
391
|
+
return recipients.map((recipient, index) => normalizeRecipient(recipient, `recipient ${index + 1}`));
|
|
392
|
+
}
|
|
393
|
+
function normalizeRecipient(recipient, label) {
|
|
394
|
+
if (typeof recipient === "string") {
|
|
395
|
+
const email = recipient.trim().toLowerCase();
|
|
396
|
+
validateEmailAddress(email, label);
|
|
397
|
+
return email;
|
|
398
|
+
}
|
|
399
|
+
const email = String(recipient.email ?? "").trim().toLowerCase();
|
|
400
|
+
validateEmailAddress(email, label);
|
|
401
|
+
const name = recipient.name?.trim();
|
|
402
|
+
return name ? { email, name } : email;
|
|
403
|
+
}
|
|
404
|
+
function validateEmailAddress(value, label) {
|
|
405
|
+
if (!emailPattern.test(value)) {
|
|
406
|
+
throw Object.assign(new Error(`${label} must be a valid email address`), { code: "E_VALIDATION_ERROR", status: 400 });
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
function normalizeAppUrl(value) {
|
|
410
|
+
const trimmed = value?.trim();
|
|
411
|
+
if (!trimmed)
|
|
412
|
+
return undefined;
|
|
413
|
+
const url = new URL(trimmed);
|
|
414
|
+
url.pathname = url.pathname.replace(/\/+$/, "");
|
|
415
|
+
url.search = "";
|
|
416
|
+
url.hash = "";
|
|
417
|
+
return url.toString().replace(/\/$/, "");
|
|
418
|
+
}
|
|
419
|
+
function normalizeServiceUrl(value) {
|
|
420
|
+
const url = new URL(value);
|
|
421
|
+
url.pathname = url.pathname.replace(/\/+$/, "");
|
|
422
|
+
url.search = "";
|
|
423
|
+
url.hash = "";
|
|
424
|
+
return url.toString().replace(/\/$/, "");
|
|
425
|
+
}
|
|
426
|
+
function resolvedEmailFeatures(input) {
|
|
427
|
+
return {
|
|
428
|
+
passwordReset: { enabled: input.passwordReset?.enabled !== false },
|
|
429
|
+
invites: { enabled: input.invites?.enabled !== false },
|
|
430
|
+
welcome: { enabled: input.welcome?.enabled !== false },
|
|
431
|
+
emailVerification: {
|
|
432
|
+
enabled: input.emailVerification?.enabled === true,
|
|
433
|
+
expiresIn: positiveOptionalInteger(input.emailVerification?.expiresIn, "auth.email.emailVerification.expiresIn")
|
|
434
|
+
},
|
|
435
|
+
magicLink: {
|
|
436
|
+
enabled: input.magicLink?.enabled === true,
|
|
437
|
+
expiresIn: positiveOptionalInteger(input.magicLink?.expiresIn, "auth.email.magicLink.expiresIn")
|
|
438
|
+
},
|
|
439
|
+
emailCode: {
|
|
440
|
+
enabled: input.emailCode?.enabled === true,
|
|
441
|
+
expiresIn: positiveOptionalInteger(input.emailCode?.expiresIn, "auth.email.emailCode.expiresIn")
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
}
|
|
445
|
+
function relayTemplateId(templateId) {
|
|
446
|
+
if (templateId === "passwordReset")
|
|
447
|
+
return "password-reset";
|
|
448
|
+
if (templateId === "emailVerification")
|
|
449
|
+
return "email-verification";
|
|
450
|
+
if (templateId === "magicLink")
|
|
451
|
+
return "magic-link";
|
|
452
|
+
if (templateId === "emailCode")
|
|
453
|
+
return "email-code";
|
|
454
|
+
return templateId;
|
|
455
|
+
}
|
|
456
|
+
function relayParams(templateId, input) {
|
|
457
|
+
const to = String(input.to ?? "").trim().toLowerCase();
|
|
458
|
+
validateEmailAddress(to, "recipient");
|
|
459
|
+
if (templateId === "passwordReset")
|
|
460
|
+
return { to, params: { path: pathFromEmailUrl(String(input.resetUrl ?? "")) } };
|
|
461
|
+
if (templateId === "invite")
|
|
462
|
+
return { to, params: { path: pathFromEmailUrl(String(input.inviteUrl ?? "")), expiresAt: input.expiresAt } };
|
|
463
|
+
if (templateId === "welcome")
|
|
464
|
+
return { to, params: { path: pathFromEmailUrl(String(input.appUrl ?? "/")) } };
|
|
465
|
+
if (templateId === "emailVerification")
|
|
466
|
+
return { to, params: { path: pathFromEmailUrl(String(input.verifyUrl ?? "")) } };
|
|
467
|
+
// A code has no link to canonicalize: the relay renders the digits it is given.
|
|
468
|
+
if (templateId === "emailCode")
|
|
469
|
+
return { to, params: { code: String(input.code ?? "") } };
|
|
470
|
+
return { to, params: { path: pathFromEmailUrl(String(input.signInUrl ?? "")) } };
|
|
471
|
+
}
|
|
472
|
+
function pathFromEmailUrl(value) {
|
|
473
|
+
const trimmed = value.trim();
|
|
474
|
+
if (!trimmed)
|
|
475
|
+
return "/";
|
|
476
|
+
if (trimmed.startsWith("/") && !trimmed.startsWith("//"))
|
|
477
|
+
return trimmed;
|
|
478
|
+
const parsed = new URL(trimmed);
|
|
479
|
+
return `${parsed.pathname}${parsed.search}`;
|
|
480
|
+
}
|
|
481
|
+
function positiveOptionalInteger(value, label) {
|
|
482
|
+
if (value === undefined)
|
|
483
|
+
return undefined;
|
|
484
|
+
if (!Number.isInteger(value) || Number(value) <= 0)
|
|
485
|
+
throw new Error(`${label} must be a positive integer`);
|
|
486
|
+
return Number(value);
|
|
487
|
+
}
|
|
488
|
+
function emailRequestSummary(binding, recipients, subject) {
|
|
489
|
+
return { binding, recipientCount: recipients.length, recipients: recipients.map(maskEmailAddress), subject };
|
|
490
|
+
}
|
|
491
|
+
function maskEmailAddress(value) {
|
|
492
|
+
const email = typeof value === "string" ? value : value.email;
|
|
493
|
+
const [local = "", domain = ""] = email.split("@");
|
|
494
|
+
if (!domain)
|
|
495
|
+
return "[invalid-email]";
|
|
496
|
+
const head = local.slice(0, 2);
|
|
497
|
+
return `${head}${local.length > 2 ? "***" : "*"}@${domain}`;
|
|
498
|
+
}
|
|
499
|
+
function paragraphs(items) {
|
|
500
|
+
return items.map((item) => `<p>${item}</p>`).join("");
|
|
501
|
+
}
|
|
502
|
+
function linkHtml(url, label) {
|
|
503
|
+
if (!isSafeEmailLink(url))
|
|
504
|
+
return escapeHtml(label);
|
|
505
|
+
return `<a href="${escapeHtml(url)}">${escapeHtml(label)}</a>`;
|
|
506
|
+
}
|
|
507
|
+
function escapeHtml(value) {
|
|
508
|
+
return String(value ?? "")
|
|
509
|
+
.replace(/&/g, "&")
|
|
510
|
+
.replace(/</g, "<")
|
|
511
|
+
.replace(/>/g, ">")
|
|
512
|
+
.replace(/"/g, """)
|
|
513
|
+
.replace(/'/g, "'");
|
|
514
|
+
}
|
|
515
|
+
function redactEmailSecrets(value) {
|
|
516
|
+
return value
|
|
517
|
+
.replace(/\/invite\/[A-Za-z0-9._-]+/g, "/invite/[redacted]")
|
|
518
|
+
.replace(/token=[A-Za-z0-9._-]+/g, "token=[redacted]")
|
|
519
|
+
.replace(/\/magic-link\/verify\?[^"\s]+/g, "/magic-link/verify?[redacted]")
|
|
520
|
+
.replace(/\/verify-email\?[^"\s]+/g, "/verify-email?[redacted]")
|
|
521
|
+
.replace(/\/reset-password\/[A-Za-z0-9._-]+/g, "/reset-password/[redacted]");
|
|
522
|
+
}
|
|
523
|
+
function isSafeEmailLink(url) {
|
|
524
|
+
const value = url.trim();
|
|
525
|
+
return value.startsWith("/") || /^https?:\/\//i.test(value);
|
|
526
|
+
}
|
|
527
|
+
//# sourceMappingURL=email.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"email.js","sourceRoot":"","sources":["../src/email.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const adminAssets: {
|
|
2
|
+
readonly basePath: "/raybase-admin/";
|
|
3
|
+
readonly script: {
|
|
4
|
+
readonly fileName: "admin.8678cb61db34dc81.js";
|
|
5
|
+
readonly path: "/raybase-admin/admin.8678cb61db34dc81.js";
|
|
6
|
+
readonly integrity: "sha256-hnjLYds03IH+j+viz+NyQZ91RrloMnpuBCeokBwU6UM=";
|
|
7
|
+
readonly bytes: 623223;
|
|
8
|
+
};
|
|
9
|
+
readonly stylesheet: {
|
|
10
|
+
readonly fileName: "admin.7738f50720a8ed7b.css";
|
|
11
|
+
readonly path: "/raybase-admin/admin.7738f50720a8ed7b.css";
|
|
12
|
+
readonly integrity: "sha256-dzj1ByCo7Xt2Z3EMmeRThEnwiu5H3Gb/OLEqfuRVjMg=";
|
|
13
|
+
readonly bytes: 86315;
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=admin-assets.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-assets.d.ts","sourceRoot":"","sources":["../../src/generated/admin-assets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,WAAW;;;;;;;;;;;;;;CAcd,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export const adminAssets = {
|
|
2
|
+
basePath: "/raybase-admin/",
|
|
3
|
+
script: {
|
|
4
|
+
"fileName": "admin.8678cb61db34dc81.js",
|
|
5
|
+
"path": "/raybase-admin/admin.8678cb61db34dc81.js",
|
|
6
|
+
"integrity": "sha256-hnjLYds03IH+j+viz+NyQZ91RrloMnpuBCeokBwU6UM=",
|
|
7
|
+
"bytes": 623223
|
|
8
|
+
},
|
|
9
|
+
stylesheet: {
|
|
10
|
+
"fileName": "admin.7738f50720a8ed7b.css",
|
|
11
|
+
"path": "/raybase-admin/admin.7738f50720a8ed7b.css",
|
|
12
|
+
"integrity": "sha256-dzj1ByCo7Xt2Z3EMmeRThEnwiu5H3Gb/OLEqfuRVjMg=",
|
|
13
|
+
"bytes": 86315
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
//# sourceMappingURL=admin-assets.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-assets.js","sourceRoot":"","sources":["../../src/generated/admin-assets.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,QAAQ,EAAE,iBAAiB;IAC3B,MAAM,EAAE;QACN,UAAU,EAAE,2BAA2B;QACvC,MAAM,EAAE,0CAA0C;QAClD,WAAW,EAAE,qDAAqD;QAClE,OAAO,EAAE,MAAM;KAChB;IACD,UAAU,EAAE;QACV,UAAU,EAAE,4BAA4B;QACxC,MAAM,EAAE,2CAA2C;QACnD,WAAW,EAAE,qDAAqD;QAClE,OAAO,EAAE,KAAK;KACf;CACO,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"admin-docs-assets.d.ts","sourceRoot":"","sources":["../../src/generated/admin-docs-assets.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,eAAe,EAAE,MAAw17K,CAAC;AACv37K,eAAO,MAAM,YAAY,EAAE,MAAq//C,CAAC"}
|