From 98413e684cb8ce92aec802793c4ab7e81160444f Mon Sep 17 00:00:00 2001 From: John Coffey Date: Fri, 9 Oct 2026 01:14:15 -0700 Subject: [PATCH] Debug Sieve scripts in a playground that ships with the console The Debug button on a Sieve script sent a copy to an outside site, whose interpreter knows only upstream's extension names: a script that requires vnd.inbuxa.expressions or vnd.inbuxa.while failed to compile there, and the button took admins to another project's site. The playground now ships inside the console and runs the server's own interpreter. sieve-playground/ is built by inbuxa-server's tools/sieve-playground (SOURCE.md names the commit); sieve-playground.ts copies it, with Monaco 0.52.2 from node_modules, into sieve-playground// (the server caches every file but the console's index.html for good) and gives the console its path. The script stays on the console's origin, so the warning dialog before opening it is gone. Strings (en.json): sievepad.failed reworded, sievepad.debugHint added, the three warning-dialog strings removed. webui.zip grows from 1.3 MB to 3.4 MB: 0.9 MB of compressed WebAssembly, the rest Monaco's editor core. --- package-lock.json | 8 + package.json | 1 + sieve-playground.ts | 95 ++ sieve-playground/SOURCE.md | 10 + sieve-playground/app.js | 1018 +++++++++++ sieve-playground/eml-language.js | 113 ++ sieve-playground/engine.js | 144 ++ sieve-playground/favicon.svg | 1 + sieve-playground/index.html | 260 +++ sieve-playground/result.js | 434 +++++ sieve-playground/samples/expressions.eml | 9 + sieve-playground/samples/expressions.sieve | 44 + sieve-playground/samples/forward.eml | 14 + sieve-playground/samples/forward.sieve | 29 + sieve-playground/samples/include-common.sieve | 13 + sieve-playground/samples/include-main.sieve | 17 + sieve-playground/samples/include.eml | 8 + sieve-playground/samples/index.json | 55 + sieve-playground/samples/lists.eml | 16 + sieve-playground/samples/lists.sieve | 34 + sieve-playground/samples/spam.eml | 8 + sieve-playground/samples/spam.sieve | 28 + sieve-playground/samples/vacation.eml | 10 + sieve-playground/samples/vacation.sieve | 37 + sieve-playground/samples/welcome.eml | 33 + sieve-playground/samples/welcome.sieve | 105 ++ sieve-playground/settings.js | 337 ++++ sieve-playground/share.js | 94 + sieve-playground/sieve-docs.js | 173 ++ sieve-playground/sieve-language.js | 384 +++++ sieve-playground/sieve_playground.wasm | Bin 0 -> 2902073 bytes sieve-playground/store.js | 147 ++ sieve-playground/style.css | 1506 +++++++++++++++++ sieve-playground/worker.js | 152 ++ src/components/forms/SievepadButton.tsx | 89 +- src/i18n/en.json | 6 +- src/lib/sievepad.test.ts | 17 +- src/lib/sievepad.ts | 26 +- src/vite-env.d.ts | 3 + tsconfig.node.json | 2 +- vite.config.ts | 3 +- 41 files changed, 5386 insertions(+), 97 deletions(-) create mode 100644 sieve-playground.ts create mode 100644 sieve-playground/SOURCE.md create mode 100644 sieve-playground/app.js create mode 100644 sieve-playground/eml-language.js create mode 100644 sieve-playground/engine.js create mode 100644 sieve-playground/favicon.svg create mode 100644 sieve-playground/index.html create mode 100644 sieve-playground/result.js create mode 100644 sieve-playground/samples/expressions.eml create mode 100644 sieve-playground/samples/expressions.sieve create mode 100644 sieve-playground/samples/forward.eml create mode 100644 sieve-playground/samples/forward.sieve create mode 100644 sieve-playground/samples/include-common.sieve create mode 100644 sieve-playground/samples/include-main.sieve create mode 100644 sieve-playground/samples/include.eml create mode 100644 sieve-playground/samples/index.json create mode 100644 sieve-playground/samples/lists.eml create mode 100644 sieve-playground/samples/lists.sieve create mode 100644 sieve-playground/samples/spam.eml create mode 100644 sieve-playground/samples/spam.sieve create mode 100644 sieve-playground/samples/vacation.eml create mode 100644 sieve-playground/samples/vacation.sieve create mode 100644 sieve-playground/samples/welcome.eml create mode 100644 sieve-playground/samples/welcome.sieve create mode 100644 sieve-playground/settings.js create mode 100644 sieve-playground/share.js create mode 100644 sieve-playground/sieve-docs.js create mode 100644 sieve-playground/sieve-language.js create mode 100755 sieve-playground/sieve_playground.wasm create mode 100644 sieve-playground/store.js create mode 100644 sieve-playground/style.css create mode 100644 sieve-playground/worker.js diff --git a/package-lock.json b/package-lock.json index b3e2aa4..cea7ce9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -55,6 +55,7 @@ "eslint-plugin-react-refresh": "^0.5.3", "globals": "^17.8.0", "happy-dom": "^20.11.1", + "monaco-editor": "0.52.2", "prettier": "^3.9.6", "tailwindcss": "^4.3.3", "typescript": "~6.0.3", @@ -5099,6 +5100,13 @@ "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/monaco-editor": { + "version": "0.52.2", + "resolved": "https://registry.npmjs.org/monaco-editor/-/monaco-editor-0.52.2.tgz", + "integrity": "sha512-GEQWEZmfkOGLdd3XK8ryrfWz3AIP8YymVXiPHEdewrUq7mh0qrKrfHLNCXcbB6sTnMLnOZ3ztSiKcciFUkIJwQ==", + "dev": true, + "license": "MIT" + }, "node_modules/ms": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", diff --git a/package.json b/package.json index 6e22001..a90e2ee 100644 --- a/package.json +++ b/package.json @@ -68,6 +68,7 @@ "eslint-plugin-react-refresh": "^0.5.3", "globals": "^17.8.0", "happy-dom": "^20.11.1", + "monaco-editor": "0.52.2", "prettier": "^3.9.6", "tailwindcss": "^4.3.3", "typescript": "~6.0.3", diff --git a/sieve-playground.ts b/sieve-playground.ts new file mode 100644 index 0000000..998fb02 --- /dev/null +++ b/sieve-playground.ts @@ -0,0 +1,95 @@ +// SPDX-FileCopyrightText: 2026 Coffey Labs LLC +// SPDX-License-Identifier: AGPL-3.0-only +/** + * inbuxa: ships the Sieve playground with the console. `sieve-playground/` + * holds the playground built by inbuxa-server's tools/sieve-playground (its + * page, scripts and the server's Sieve interpreter as WebAssembly); Monaco, + * the editor it loads, comes from node_modules. Both go into + * `sieve-playground//`, named after their contents: the server caches + * every file but the console's index.html for good, so a new build has to + * live at a new path. The console finds it through __SIEVE_PLAYGROUND__. + */ +import { createHash } from 'node:crypto' +import { readdirSync, readFileSync } from 'node:fs' +import path from 'node:path' +import type { Plugin } from 'vite' + +const ROOT = import.meta.dirname +const PLAYGROUND = path.join(ROOT, 'sieve-playground') +const MONACO = path.join(ROOT, 'node_modules', 'monaco-editor') + +const CONTENT_TYPES: Record = { + '.css': 'text/css', + '.html': 'text/html', + '.js': 'text/javascript', + '.json': 'application/json', + '.svg': 'image/svg+xml', + '.ttf': 'font/ttf', + '.wasm': 'application/wasm', +} + +function walk(dir: string, prefix: string, out: Map) { + for (const entry of readdirSync(dir, { withFileTypes: true })) { + const source = path.join(dir, entry.name) + const target = `${prefix}${entry.name}` + if (entry.isDirectory()) walk(source, `${target}/`, out) + else out.set(target, source) + } +} + +/** Published path → file on disk. */ +function collect(): Map { + const files = new Map() + walk(PLAYGROUND, '', files) + files.delete('SOURCE.md') + + const monaco = JSON.parse(readFileSync(path.join(MONACO, 'package.json'), 'utf8')) as { + version: string + } + const vendor = `vendor/monaco-${monaco.version}` + const index = readFileSync(path.join(PLAYGROUND, 'index.html'), 'utf8') + if (!index.includes(`./${vendor}/vs/loader.js`)) { + throw new Error( + `sieve-playground/index.html does not load ${vendor}: monaco-editor in package.json and the playground disagree.`, + ) + } + // Only the editor core, as the playground's own build did. + files.set(`${vendor}/vs/loader.js`, path.join(MONACO, 'min', 'vs', 'loader.js')) + walk(path.join(MONACO, 'min', 'vs', 'base'), `${vendor}/vs/base/`, files) + walk(path.join(MONACO, 'min', 'vs', 'editor'), `${vendor}/vs/editor/`, files) + files.set(`${vendor}/LICENSE`, path.join(MONACO, 'LICENSE')) + return files +} + +export function sievePlayground(): Plugin { + const files = collect() + const hash = createHash('sha256') + for (const name of [...files.keys()].sort()) { + hash.update(name).update('\0').update(readFileSync(files.get(name)!)).update('\0') + } + const dir = `sieve-playground/${hash.digest('hex').slice(0, 16)}` + + return { + name: 'inbuxa-sieve-playground', + config: () => ({ + define: { __SIEVE_PLAYGROUND__: JSON.stringify(`${dir}/index.html`) }, + }), + configureServer(server) { + server.middlewares.use((req, res, next) => { + const url = new URL(req.url ?? '/', 'http://localhost') + const prefix = `/${dir}/` + const source = url.pathname.startsWith(prefix) + ? files.get(decodeURIComponent(url.pathname.slice(prefix.length))) + : undefined + if (!source) return next() + res.setHeader('Content-Type', CONTENT_TYPES[path.extname(source)] ?? 'application/octet-stream') + res.end(readFileSync(source)) + }) + }, + generateBundle() { + for (const [name, source] of files) { + this.emitFile({ type: 'asset', fileName: `${dir}/${name}`, source: readFileSync(source) }) + } + }, + } +} diff --git a/sieve-playground/SOURCE.md b/sieve-playground/SOURCE.md new file mode 100644 index 0000000..44aff16 --- /dev/null +++ b/sieve-playground/SOURCE.md @@ -0,0 +1,10 @@ +# Sieve playground + +Generated: do not edit. This directory is built by +`tools/sieve-playground/build.sh --admin` in inbuxa-server, from commit +`136fc2540b8009199cf54c5186784a4eae83613f`, with the server's vendored sieve-rs 0.7.3. Change the +source there, rebuild, and commit the result here. + +The WebAssembly module is that commit's `tools/sieve-playground` crate, built +for `wasm32-wasip1`; its source, and the site's, are in that directory under +AGPL-3.0-only. diff --git a/sieve-playground/app.js b/sieve-playground/app.js new file mode 100644 index 0000000..2eae273 --- /dev/null +++ b/sieve-playground/app.js @@ -0,0 +1,1018 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +import { Engine } from "./engine.js"; +import { EML_ID, defineThemes, registerEml } from "./eml-language.js"; +import { ResultView, h } from "./result.js"; +import { SettingsDrawer, normalizeSettings } from "./settings.js"; +import { LONG_LINK, clearShareHash, decodeSharedWorkspace, encodeShareUrl, hasSharedWorkspace, portable, validatePortable } from "./share.js"; +import { LANGUAGE_ID, markersFor, registerSieve } from "./sieve-language.js"; +import { dismissWelcome, isWelcomeDismissed, loadPrefs, newId, openStore, savePrefs } from "./store.js"; + +const $ = (selector) => document.querySelector(selector); +const COMPILE_DELAY = 300; +const SAVE_DELAY = 400; +const NARROW = window.matchMedia("(max-width: 900px)"); +const DARK = window.matchMedia("(prefers-color-scheme: dark)"); +const IS_MAC = /Mac|iPhone|iPad/.test(navigator.platform); + +const BLANK_SCRIPT = `require ["fileinto", "imap4flags"]; + +# Write your Sieve script here. Press Run to test it. +# Everything runs in your browser: nothing is sent to or stored on a server. +if header :contains "Subject" "hello" { + addflag "\\\\Flagged"; + fileinto "INBOX"; +} +`; + +const BLANK_MESSAGE = `From: Sender +To: Jane Doe +Subject: Hello from the Sieve playground +Date: Mon, 14 Sep 2026 10:00:00 +0000 +Message-ID: +Content-Type: text/plain; charset="utf-8" + +Hello! This is a test message. +`; + +const state = { + monaco: null, + engine: null, + store: null, + prefs: loadPrefs(), + defaults: null, + capabilities: [], + samples: [], + workspace: null, + workspaces: [], + compileSeq: 0, + runSeq: 0, + diagnostics: [], + lastOutput: null, + lastRunMessage: "", + stale: true, + contentVersion: 0, +}; + +let scriptEditor; +let messageEditor; +let result; +let settingsDrawer; +let saveTimer; +let compileTimer; + +function toast(message) { + const el = $("#toast"); + el.textContent = message; + el.hidden = false; + clearTimeout(toast.timer); + toast.timer = setTimeout(() => (el.hidden = true), 2600); +} + +document.addEventListener("toast", (event) => toast(event.detail)); + +window.addEventListener("unhandledrejection", (event) => { + if (event.reason?.name === "Canceled" && event.reason?.message === "Canceled") event.preventDefault(); +}); + +function setStatus(id, text, stateName) { + const el = $(id); + el.textContent = text; + if (stateName) el.dataset.state = stateName; + else delete el.dataset.state; +} + +function theme() { + return DARK.matches ? "playground-dark" : "playground-light"; +} + +function settings() { + return state.workspace?.settings || state.defaults; +} + +function editorOptions(extra) { + return { + automaticLayout: true, + minimap: { enabled: false }, + fontSize: 13, + lineNumbersMinChars: 3, + scrollBeyondLastLine: false, + tabSize: 4, + insertSpaces: true, + fixedOverflowWidgets: true, + stickyScroll: { enabled: false }, + padding: { top: 8 }, + theme: theme(), + ...extra, + }; +} + +function modelFor(item, language) { + if (!item.model || item.model.isDisposed()) { + const model = state.monaco.editor.createModel(item.source, language); + Object.defineProperty(item, "model", { value: model, writable: true, enumerable: false, configurable: true }); + Object.defineProperty(item, "source", { + get: () => (model.isDisposed() ? "" : model.getValue()), + set: (value) => model.setValue(value), + enumerable: true, + configurable: true, + }); + model.onDidChangeContent(() => onContentChanged(language === LANGUAGE_ID)); + } + return item.model; +} + +function disposeModels(workspace) { + if (!workspace) return; + for (const item of [...workspace.scripts, ...workspace.messages]) item.model?.dispose(); +} + +function serializable(workspace) { + return { + id: workspace.id, + name: workspace.name, + created: workspace.created, + updated: workspace.updated, + scripts: workspace.scripts.map(({ name, source }) => ({ name, source })), + messages: workspace.messages.map(({ name, source }) => ({ name, source })), + activeScript: workspace.activeScript, + activeMessage: workspace.activeMessage, + settings: workspace.settings, + }; +} + +function makeWorkspace({ name, scripts, messages, settings: overrides }) { + const now = Date.now(); + return { + id: newId(), + name, + created: now, + updated: now, + scripts: scripts.length ? scripts : [{ name: "main", source: BLANK_SCRIPT }], + messages: messages.length ? messages : [{ name: "message.eml", source: BLANK_MESSAGE }], + activeScript: 0, + activeMessage: 0, + settings: normalizeSettings({ ...state.defaults, ...(overrides || {}) }, state.defaults), + }; +} + +function uniqueName(base) { + const names = new Set(state.workspaces.map((ws) => ws.name)); + if (!names.has(base)) return base; + let n = 2; + while (names.has(`${base} ${n}`)) n++; + return `${base} ${n}`; +} + +async function saveNow() { + clearTimeout(saveTimer); + saveTimer = null; + const ws = state.workspace; + if (!ws) return; + ws.updated = Date.now(); + const data = serializable(ws); + const index = state.workspaces.findIndex((item) => item.id === ws.id); + if (index >= 0) state.workspaces[index] = data; + else state.workspaces.push(data); + try { + await state.store.put(data); + } catch (err) { + toast(`Could not save: ${err.message}`); + } +} + +function saveSoon() { + clearTimeout(saveTimer); + saveTimer = setTimeout(saveNow, SAVE_DELAY); +} + +function onContentChanged(isScript) { + state.contentVersion++; + saveSoon(); + markStale(); + if (isScript) compileSoon(); +} + +function markStale() { + state.stale = true; + $("#run-button").classList.add("stale"); +} + +async function loadSamples() { + try { + const response = await fetch(new URL("./samples/index.json", import.meta.url)); + state.samples = await response.json(); + } catch (_) { + state.samples = []; + } +} + +async function sampleWorkspace(sample) { + const read = async (file) => { + const response = await fetch(new URL(`./samples/${file}`, import.meta.url)); + if (!response.ok) throw new Error(`Could not load ${file}`); + return response.text(); + }; + const scripts = await Promise.all(sample.scripts.map(async (s) => ({ name: s.name, source: await read(s.file) }))); + const messages = await Promise.all(sample.messages.map(async (m) => ({ name: m.name, source: await read(m.file) }))); + return makeWorkspace({ name: uniqueName(sample.title), scripts, messages, settings: sample.settings }); +} + +async function openWorkspace(data, { run = true } = {}) { + if (state.workspace) await saveNow(); + disposeModels(state.workspace); + const ws = { + ...data, + scripts: data.scripts.map((s) => ({ ...s })), + messages: data.messages.map((m) => ({ ...m })), + settings: normalizeSettings({ ...state.defaults, ...(data.settings || {}) }, state.defaults), + }; + ws.activeScript = Math.min(ws.activeScript || 0, ws.scripts.length - 1); + ws.activeMessage = Math.min(ws.activeMessage || 0, ws.messages.length - 1); + state.workspace = ws; + state.lastOutput = null; + state.prefs.lastWorkspace = ws.id; + savePrefs(state.prefs); + + scriptEditor.setModel(modelFor(ws.scripts[ws.activeScript], LANGUAGE_ID)); + messageEditor.setModel(modelFor(ws.messages[ws.activeMessage], EML_ID)); + renderScriptTabs(); + renderMessageTabs(); + renderWorkspaceMenu(); + renderEnvelope(); + result.renderEmpty(); + await saveNow(); + if (run) await runScript(); + else await compile(); +} + +function renderWorkspaceMenu() { + $("#workspace-name").textContent = state.workspace?.name || "Workspace"; + const listEl = $("#workspace-list"); + const sorted = [...state.workspaces].sort((a, b) => b.updated - a.updated); + listEl.replaceChildren( + ...sorted.map((ws) => + h("button", { type: "button", role: "menuitem", class: ws.id === state.workspace?.id ? "current" : "", onclick: async () => { closeMenus(); if (ws.id !== state.workspace.id) await openWorkspace(ws); } }, + ws.name, + h("span", { class: "item-sub" }, `${ws.scripts.length} script${ws.scripts.length === 1 ? "" : "s"} · edited ${relativeTime(ws.updated)}`), + ), + ), + ); +} + +function renderExamplesMenu() { + $("#examples-list").replaceChildren( + ...state.samples.map((sample) => + h("button", { type: "button", role: "menuitem", onclick: async () => { closeMenus(); try { await openWorkspace(await sampleWorkspace(sample)); toast(`Opened "${sample.title}"`); } catch (err) { toast(err.message); } } }, + sample.title, + h("span", { class: "item-sub" }, sample.description), + ), + ), + ); +} + +function relativeTime(ms) { + const minutes = Math.round((Date.now() - ms) / 60000); + if (minutes < 1) return "just now"; + if (minutes < 60) return `${minutes} min ago`; + const hours = Math.round(minutes / 60); + if (hours < 24) return `${hours} h ago`; + return new Date(ms).toLocaleDateString(); +} + +function tabButton({ label, active, error, closable, kind, onSelect, onClose, onRename }) { + const button = h("button", { type: "button", role: "tab", class: `tab${active ? " active" : ""}`, "aria-selected": active ? "true" : "false", title: onRename ? "Double-click to rename" : undefined, onclick: onSelect, ondblclick: onRename }, + error ? h("span", { class: "dot", title: "Has errors" }) : null, + label, + kind ? h("span", { class: "tab-kind" }, kind) : null, + ); + if (closable) { + const close = h("span", { class: "tab-close", role: "button", title: "Remove", onclick: (event) => { event.stopPropagation(); onClose(); } }); + close.innerHTML = ''; + button.append(close); + } + return button; +} + +function renderScriptTabs() { + const ws = state.workspace; + const errors = new Set(state.diagnostics.map((d) => d.script)); + $("#script-tabs").replaceChildren( + ...ws.scripts.map((script, index) => + tabButton({ + label: script.name, + kind: index === 0 ? "main" : "include", + active: index === ws.activeScript, + error: errors.has(index), + closable: index > 0, + onSelect: () => selectScript(index), + onRename: index > 0 ? () => renameScript(index) : undefined, + onClose: () => removeScript(index), + }), + ), + ); +} + +function renderMessageTabs() { + const ws = state.workspace; + $("#message-tabs").replaceChildren( + ...ws.messages.map((message, index) => + tabButton({ + label: message.name, + active: index === ws.activeMessage, + closable: ws.messages.length > 1, + onSelect: () => selectMessage(index), + onRename: () => renameMessage(index), + onClose: () => removeMessage(index), + }), + ), + ); +} + +function selectScript(index) { + const ws = state.workspace; + ws.activeScript = index; + scriptEditor.setModel(modelFor(ws.scripts[index], LANGUAGE_ID)); + renderScriptTabs(); + renderProblems(); + saveSoon(); +} + +function selectMessage(index) { + const ws = state.workspace; + ws.activeMessage = index; + state.contentVersion++; + messageEditor.setModel(modelFor(ws.messages[index], EML_ID)); + renderMessageTabs(); + markStale(); + saveSoon(); +} + +async function addScript(name, source) { + const ws = state.workspace; + const chosen = name ?? (await promptText("New include script", "Scripts include it by this name, for example include \"common\".", nextName(ws.scripts.map((s) => s.name), "common"))); + if (!chosen) return; + ws.scripts.push({ name: chosen, source: source ?? 'require ["variables"];\n\n' }); + selectScript(ws.scripts.length - 1); + compileSoon(); +} + +async function addMessage(name, source) { + const ws = state.workspace; + ws.messages.push({ name: name || nextName(ws.messages.map((m) => m.name), "message.eml"), source: source ?? BLANK_MESSAGE }); + selectMessage(ws.messages.length - 1); +} + +function nextName(existing, base) { + if (!existing.includes(base)) return base; + const dot = base.lastIndexOf("."); + const stem = dot > 0 ? base.slice(0, dot) : base; + const ext = dot > 0 ? base.slice(dot) : ""; + let n = 2; + while (existing.includes(`${stem}-${n}${ext}`)) n++; + return `${stem}-${n}${ext}`; +} + +async function renameScript(index) { + const ws = state.workspace; + const name = await promptText("Rename include script", "Other scripts include it by this name.", ws.scripts[index].name); + if (!name) return; + ws.scripts[index].name = name; + renderScriptTabs(); + saveSoon(); + compileSoon(); +} + +async function renameMessage(index) { + const ws = state.workspace; + const name = await promptText("Rename message", "", ws.messages[index].name); + if (!name) return; + ws.messages[index].name = name; + renderMessageTabs(); + saveSoon(); +} + +function removeScript(index) { + const ws = state.workspace; + if (index === 0) return; + if (ws.scripts[index].source.trim() && !confirm(`Remove the script "${ws.scripts[index].name}"?`)) return; + ws.scripts[index].model?.dispose(); + ws.scripts.splice(index, 1); + const active = ws.activeScript >= index ? ws.activeScript - 1 : ws.activeScript; + selectScript(Math.min(Math.max(active, 0), ws.scripts.length - 1)); + compileSoon(); +} + +function removeMessage(index) { + const ws = state.workspace; + if (ws.messages.length < 2) return; + if (!confirm(`Remove the message "${ws.messages[index].name}"?`)) return; + ws.messages[index].model?.dispose(); + ws.messages.splice(index, 1); + const active = ws.activeMessage >= index ? ws.activeMessage - 1 : ws.activeMessage; + selectMessage(Math.min(Math.max(active, 0), ws.messages.length - 1)); +} + +function renderEnvelope() { + const s = settings(); + $("#envelope-from").value = s.envelopeFrom || ""; + $("#envelope-from").placeholder = "taken from the message"; + $("#envelope-to").value = (s.envelopeTo || []).join(", "); + $("#envelope-to").placeholder = s.userAddress || "the user address"; + $("#envelope-summary").textContent = `${s.envelopeFrom || "sender from message"} → ${(s.envelopeTo || []).join(", ") || s.userAddress}`; +} + +function updateSettings(next) { + state.contentVersion++; + state.workspace.settings = normalizeSettings(next, state.defaults); + renderEnvelope(); + saveSoon(); + markStale(); + compileSoon(); +} + +function request(extra = {}) { + const ws = state.workspace; + return { + scripts: ws.scripts.map(({ name, source }) => ({ name, source })), + message: ws.messages[ws.activeMessage]?.source || "", + settings: ws.settings, + seenIds: [], + now: Math.floor(Date.now() / 1000), + ...extra, + }; +} + +function compileSoon() { + clearTimeout(compileTimer); + compileTimer = setTimeout(compile, COMPILE_DELAY); +} + +async function compile() { + clearTimeout(compileTimer); + const seq = ++state.compileSeq; + const ws = state.workspace; + let output; + try { + output = await state.engine.compile({ scripts: ws.scripts.map(({ name, source }) => ({ name, source })), settings: ws.settings }); + } catch (err) { + if (seq === state.compileSeq) setStatus("#compile-status", `Compiler unavailable: ${err.message}`, "error"); + return; + } + if (seq !== state.compileSeq || ws !== state.workspace) return; + applyDiagnostics(output.diagnostics); +} + +function applyDiagnostics(diagnostics) { + const ws = state.workspace; + state.diagnostics = diagnostics; + ws.scripts.forEach((script, index) => { + const model = modelFor(script, LANGUAGE_ID); + state.monaco.editor.setModelMarkers(model, "sieve", markersFor(state.monaco, model, diagnostics.filter((d) => d.script === index))); + }); + renderScriptTabs(); + renderProblems(); + if (diagnostics.length) { + setStatus("#compile-status", `${diagnostics.length} error${diagnostics.length === 1 ? "" : "s"}`, "error"); + } else { + setStatus("#compile-status", "No problems", "ready"); + } +} + +function renderProblems() { + const ws = state.workspace; + const el = $("#problems"); + const runtime = state.lastOutput?.error && state.lastOutput.error.line > 0 ? [state.lastOutput.error] : []; + const items = [...state.diagnostics, ...runtime]; + el.dataset.state = items.length ? "active" : "idle"; + el.replaceChildren( + ...items.map((d) => { + const scriptName = ws.scripts[d.script]?.name || "main"; + const where = d.line > 0 ? `${scriptName}:${d.line}:${Math.max(d.column, 1)}` : `${scriptName}`; + const capability = /Undeclared capability '([^']+)'/.exec(d.message); + return h("button", { type: "button", class: `problem ${d.severity}`, onclick: () => revealLine(d.script, d.line, d.column) }, + h("span", { class: "sev" }), + h("span", { class: "where" }, where), + h("span", {}, d.message, d.line > 0 ? "" : " (position unknown)"), + capability ? h("span", { class: "fix" }, "Quick fix available") : null, + ); + }), + ); +} + +function revealLine(scriptIndex, line, column) { + if (scriptIndex !== state.workspace.activeScript) selectScript(scriptIndex); + showPanel("script"); + const lineNumber = Math.max(1, line || 1); + scriptEditor.revealLineInCenter(lineNumber); + scriptEditor.setPosition({ lineNumber, column: Math.max(1, column || 1) }); + scriptEditor.focus(); +} + +async function runScript({ redeliver = false } = {}) { + if (!state.workspace) return; + const button = $("#run-button"); + button.disabled = true; + await saveNow(); + const ws = state.workspace; + const version = state.contentVersion; + const seq = ++state.runSeq; + setStatus("#engine-status", "Running…", "busy"); + const seenIds = redeliver && state.lastOutput ? state.lastOutput.duplicateIds : []; + const req = request({ seenIds }); + const started = performance.now(); + let output; + try { + output = await state.engine.run(req); + } catch (err) { + if (seq !== state.runSeq) return; + button.disabled = false; + if (ws !== state.workspace) return; + result.renderFailure(err.message); + setEngineStatus(); + return; + } + if (seq !== state.runSeq) return; + const elapsed = performance.now() - started; + button.disabled = false; + setEngineStatus(); + if (ws !== state.workspace) return; + if (version === state.contentVersion) { + button.classList.remove("stale"); + state.stale = false; + } + applyDiagnostics(output.diagnostics); + + ws.scripts.forEach((script, index) => { + const runtimeMarkers = output.error && output.error.line > 0 && output.error.script === index ? markersFor(state.monaco, modelFor(script, LANGUAGE_ID), [output.error]) : []; + state.monaco.editor.setModelMarkers(modelFor(script, LANGUAGE_ID), "sieve-runtime", runtimeMarkers); + }); + + if (output.diagnostics.length) { + state.lastOutput = null; + result.renderCompileErrors(output.diagnostics.length, () => revealLine(output.diagnostics[0].script, output.diagnostics[0].line, output.diagnostics[0].column)); + setStatus("#run-stats", ""); + return; + } + state.lastOutput = output; + state.lastRunMessage = req.message; + result.render(output); + renderProblems(); + selectResultView("actions"); + setStatus("#run-stats", `${elapsed < 1 ? "<1" : Math.round(elapsed)} ms${redeliver ? " · redelivery" : ""}`); + if (NARROW.matches) showPanel("result"); +} + +function selectResultView(view) { + for (const tab of document.querySelectorAll("#result-tabs .tab")) tab.classList.toggle("active", tab.dataset.view === view); + for (const pane of document.querySelectorAll(".result-view")) pane.classList.toggle("active", pane.dataset.view === view); + if (view === "messages") requestAnimationFrame(() => result.onShown()); + if (NARROW.matches) showPanel("result"); +} + +function showPanel(name) { + for (const button of document.querySelectorAll(".mobile-tabs button")) button.classList.toggle("active", button.dataset.panel === name); + for (const panel of document.querySelectorAll(".panel")) panel.classList.toggle("active", panel.dataset.panel === name); +} + +function closeMenus() { + for (const menu of document.querySelectorAll(".menu")) { + menu.querySelector(".menu-panel").hidden = true; + menu.querySelector(".menu-trigger").setAttribute("aria-expanded", "false"); + } +} + +function setupMenus() { + for (const menu of document.querySelectorAll(".menu")) { + const trigger = menu.querySelector(".menu-trigger"); + const panel = menu.querySelector(".menu-panel"); + trigger.addEventListener("click", (event) => { + event.stopPropagation(); + const open = panel.hidden; + closeMenus(); + if (open) { + if (menu.id === "workspace-menu") renderWorkspaceMenu(); + panel.hidden = false; + trigger.setAttribute("aria-expanded", "true"); + panel.querySelector("button")?.focus(); + } + }); + } + document.addEventListener("keydown", (event) => { + if (event.key === "Escape") closeMenus(); + }); + document.addEventListener( + "pointerdown", + (event) => { + if (!event.target.closest(".menu")) closeMenus(); + }, + true, + ); + document.addEventListener("click", async (event) => { + const target = event.target.closest("[data-action]"); + if (!target) return; + closeMenus(); + const action = ACTIONS[target.dataset.action]; + if (action) await action(); + }); +} + +const ACTIONS = { + "new-workspace": async () => { + const name = await promptText("New workspace", "A workspace holds scripts, test messages and settings.", uniqueName("Untitled")); + if (!name) return; + await openWorkspace(makeWorkspace({ name, scripts: [], messages: [] })); + }, + "duplicate-workspace": async () => { + const ws = state.workspace; + await openWorkspace(makeWorkspace({ name: uniqueName(`${ws.name} copy`), scripts: serializable(ws).scripts, messages: serializable(ws).messages, settings: ws.settings })); + toast("Workspace duplicated"); + }, + "rename-workspace": async () => { + const name = await promptText("Rename workspace", "", state.workspace.name); + if (!name) return; + state.workspace.name = name; + await saveNow(); + renderWorkspaceMenu(); + }, + "delete-workspace": async () => { + const ws = state.workspace; + if (!confirm(`Delete the workspace "${ws.name}"? This cannot be undone.`)) return; + await state.store.delete(ws.id); + state.workspaces = state.workspaces.filter((item) => item.id !== ws.id); + disposeModels(ws); + state.workspace = null; + const next = [...state.workspaces].sort((a, b) => b.updated - a.updated)[0]; + if (next) await openWorkspace(next); + else await openWorkspace(makeWorkspace({ name: uniqueName("Untitled"), scripts: [], messages: [] })); + toast("Workspace deleted"); + }, + "export-workspace": async () => { + $("#share-dialog").close(); + const data = portable(state.workspace, state.defaults); + const blob = new Blob([JSON.stringify(data, null, 2)], { type: "application/json" }); + const link = h("a", { href: URL.createObjectURL(blob), download: `${state.workspace.name.replace(/[^\w.-]+/g, "-")}.sieve-playground.json` }); + document.body.append(link); + link.click(); + link.remove(); + setTimeout(() => URL.revokeObjectURL(link.href), 1000); + }, + "import-workspace": async () => { + $("#file-input").value = ""; + $("#file-input").click(); + }, +}; + +async function importFile(file) { + const text = await file.text(); + const lower = file.name.toLowerCase(); + if (lower.endsWith(".json") || /^\s*\{/.test(text)) { + try { + const data = validatePortable(JSON.parse(text)); + await openWorkspace(makeWorkspace({ ...data, name: uniqueName(data.name) })); + toast(`Imported "${data.name}"`); + } catch (err) { + toast(`Import failed: ${err.message}`); + } + } else if (lower.endsWith(".sieve") || lower.endsWith(".siv") || /^\s*(require|#|if\b)/.test(text)) { + const name = file.name.replace(/\.(sieve|siv|txt)$/i, ""); + const ws = state.workspace; + if (ws.scripts.length === 1 && ws.scripts[0].source === BLANK_SCRIPT) { + ws.scripts[0].model.setValue(text); + } else if (confirm(`Replace the main script with "${file.name}"? Choose Cancel to add it as an include script instead.`)) { + selectScript(0); + ws.scripts[0].model.setValue(text); + } else { + await addScript(name, text); + } + toast(`Loaded ${file.name}`); + } else { + await addMessage(file.name, text); + toast(`Added ${file.name} as a test message`); + } +} + +function setupFiles() { + $("#file-input").addEventListener("change", async (event) => { + for (const file of event.target.files) await importFile(file); + }); + let depth = 0; + window.addEventListener("dragenter", (event) => { + if (!event.dataTransfer?.types.includes("Files")) return; + depth++; + document.body.classList.add("dragging-file"); + }); + window.addEventListener("dragleave", () => { + depth = Math.max(0, depth - 1); + if (depth === 0) document.body.classList.remove("dragging-file"); + }); + window.addEventListener("dragover", (event) => { + if (event.dataTransfer?.types.includes("Files")) event.preventDefault(); + }); + window.addEventListener("drop", async (event) => { + if (!event.dataTransfer?.files.length) return; + event.preventDefault(); + depth = 0; + document.body.classList.remove("dragging-file"); + for (const file of event.dataTransfer.files) await importFile(file); + }); +} + +function setEngineStatus() { + if (state.engine.failed) setStatus("#engine-status", state.engine.failed, "error"); + else setStatus("#engine-status", "Engine ready", "ready"); +} + +function promptText(title, text, value) { + const dialog = $("#prompt-dialog"); + $("#prompt-title").textContent = title; + $("#prompt-text").textContent = text; + $("#prompt-text").hidden = !text; + const input = $("#prompt-input"); + input.value = value || ""; + return new Promise((resolve) => { + dialog.onclose = () => { + const name = input.value.trim(); + resolve(dialog.returnValue === "ok" && name ? name.slice(0, 80) : null); + }; + input.onkeydown = (event) => { + if (event.key === "Enter" && !event.isComposing) { + event.preventDefault(); + dialog.close("ok"); + } + }; + dialog.returnValue = ""; + dialog.showModal(); + input.select(); + }); +} + +function setupShare() { + const dialog = $("#share-dialog"); + const includeMessages = $("#share-messages"); + const refresh = async () => { + try { + const url = await encodeShareUrl(portable(state.workspace, state.defaults, { includeMessages: includeMessages.checked })); + $("#share-url").value = url; + $("#share-privacy").hidden = !includeMessages.checked; + $("#share-size").textContent = url.length > LONG_LINK + ? `This link is ${(url.length / 1024).toFixed(1)} KB long. Some chat apps and email clients cut long links: consider sharing without messages or exporting to a file.` + : `Link length: ${url.length.toLocaleString()} characters.`; + } catch (err) { + $("#share-url").value = ""; + $("#share-size").textContent = `Could not create a link: ${err.message}`; + } + }; + includeMessages.addEventListener("change", refresh); + $("#share-button").addEventListener("click", async () => { + await saveNow(); + await refresh(); + dialog.showModal(); + $("#share-url").select(); + }); + $("#share-copy").addEventListener("click", async () => { + try { + await navigator.clipboard.writeText($("#share-url").value); + $("#share-copy").textContent = "Copied"; + setTimeout(() => ($("#share-copy").textContent = "Copy link"), 1500); + } catch (_) { + $("#share-url").select(); + toast("Press Ctrl+C to copy the selected link"); + } + }); +} + +function setupGutters() { + const workbench = $("#workbench"); + let columns = Array.isArray(state.prefs.columns) && state.prefs.columns.length === 3 ? state.prefs.columns : [1.15, 0.95, 1]; + const apply = () => { + ["--col-a", "--col-b", "--col-c"].forEach((name, i) => workbench.style.setProperty(name, `minmax(220px, ${columns[i]}fr)`)); + }; + apply(); + for (const gutter of document.querySelectorAll(".gutter")) { + const index = Number(gutter.dataset.gutter); + const resize = (deltaFraction) => { + const total = columns[index] + columns[index + 1]; + const left = Math.min(Math.max(columns[index] + deltaFraction, total * 0.15), total * 0.85); + columns = columns.map((value, i) => (i === index ? left : i === index + 1 ? total - left : value)); + apply(); + }; + gutter.addEventListener("pointerdown", (event) => { + event.preventDefault(); + gutter.setPointerCapture(event.pointerId); + gutter.classList.add("dragging"); + const sum = columns.reduce((a, b) => a + b, 0); + const width = workbench.clientWidth - 12; + let last = event.clientX; + const move = (e) => { + resize(((e.clientX - last) / width) * sum); + last = e.clientX; + }; + const up = () => { + gutter.classList.remove("dragging"); + gutter.removeEventListener("pointermove", move); + gutter.removeEventListener("pointerup", up); + state.prefs.columns = columns; + savePrefs(state.prefs); + }; + gutter.addEventListener("pointermove", move); + gutter.addEventListener("pointerup", up); + }); + gutter.addEventListener("keydown", (event) => { + if (event.key !== "ArrowLeft" && event.key !== "ArrowRight") return; + event.preventDefault(); + resize((event.key === "ArrowLeft" ? -0.05 : 0.05) * columns.reduce((a, b) => a + b, 0)); + state.prefs.columns = columns; + savePrefs(state.prefs); + }); + gutter.addEventListener("dblclick", () => { + columns = [1.15, 0.95, 1]; + apply(); + state.prefs.columns = columns; + savePrefs(state.prefs); + }); + } +} + +function setupKeys() { + const runKey = state.monaco.KeyMod.CtrlCmd | state.monaco.KeyCode.Enter; + const saveKey = state.monaco.KeyMod.CtrlCmd | state.monaco.KeyCode.KeyS; + for (const editor of [scriptEditor, messageEditor]) { + editor.addAction({ id: "playground.run", label: "Playground: Run script", keybindings: [runKey], run: () => runScript() }); + editor.addAction({ id: "playground.redeliver", label: "Playground: Run again as a redelivery", run: () => runScript({ redeliver: true }) }); + editor.addAction({ id: "playground.save", label: "Playground: Save workspace", keybindings: [saveKey], run: async () => { await saveNow(); toast("Saved in this browser"); } }); + editor.addAction({ id: "playground.share", label: "Playground: Share workspace", run: () => $("#share-button").click() }); + editor.addAction({ id: "playground.settings", label: "Playground: Open settings", run: () => settingsDrawer.open() }); + } + scriptEditor.addAction({ id: "playground.format", label: "Playground: Format script", run: (editor) => editor.getAction("editor.action.formatDocument")?.run() }); + document.addEventListener("keydown", async (event) => { + const mod = IS_MAC ? event.metaKey : event.ctrlKey; + if (mod && event.key === "Enter") { + event.preventDefault(); + await runScript(); + } else if (mod && event.key.toLowerCase() === "s") { + event.preventDefault(); + await saveNow(); + toast("Saved in this browser"); + } + }); + $("#run-button").title = `Run (${IS_MAC ? "⌘" : "Ctrl"}+Enter)`; +} + +function setupEnvelope() { + $("#envelope-from").addEventListener("change", (event) => updateSettings({ ...settings(), envelopeFrom: event.target.value.trim() })); + $("#envelope-to").addEventListener("change", (event) => + updateSettings({ ...settings(), envelopeTo: event.target.value.split(",").map((s) => s.trim()).filter(Boolean) }), + ); +} + +function setupWelcome() { + const dialog = $("#welcome-dialog"); + $("#privacy-link").addEventListener("click", () => dialog.showModal()); + dialog.querySelector("button.primary").addEventListener("click", dismissWelcome); + dialog.addEventListener("cancel", dismissWelcome); + dialog.addEventListener("close", dismissWelcome); + if (!isWelcomeDismissed()) dialog.showModal(); +} + +async function initialWorkspace() { + if (hasSharedWorkspace()) { + try { + const data = await decodeSharedWorkspace(); + clearShareHash(); + const ws = makeWorkspace({ ...data, name: uniqueName(`${data.name} (shared)`) }); + toast("Opened a shared workspace. Your own workspaces are in the workspace menu."); + return ws; + } catch (err) { + clearShareHash(); + toast(`The shared link is invalid: ${err.message}`); + } + } + const last = state.workspaces.find((ws) => ws.id === state.prefs.lastWorkspace); + if (last) return last; + const recent = [...state.workspaces].sort((a, b) => b.updated - a.updated)[0]; + if (recent) return recent; + const welcome = state.samples.find((sample) => sample.id === "welcome"); + if (welcome) { + try { + return await sampleWorkspace(welcome); + } catch (_) { + return makeWorkspace({ name: "Untitled", scripts: [], messages: [] }); + } + } + return makeWorkspace({ name: "Untitled", scripts: [], messages: [] }); +} + +function clearReloadFlag() { + try { + sessionStorage.removeItem("inbuxa-sieve.reloaded"); + } catch (_) { + return; + } +} + +async function boot() { + clearReloadFlag(); + let monaco; + try { + monaco = await window.monacoReady; + } catch (err) { + setStatus("#engine-status", "Editor failed to load", "error"); + console.error(err); + return; + } + state.monaco = monaco; + defineThemes(monaco); + registerEml(monaco); + registerSieve(monaco, () => settings() || {}); + + scriptEditor = monaco.editor.create($("#script-editor"), editorOptions({ language: LANGUAGE_ID, ariaLabel: "Sieve script", wordBasedSuggestions: "off", "semanticHighlighting.enabled": false })); + messageEditor = monaco.editor.create($("#message-editor"), editorOptions({ language: EML_ID, wordWrap: "on", ariaLabel: "Test message" })); + + state.engine = new Engine(); + state.engine.onStatus((kind, detail) => { + if (kind === "failed") setStatus("#engine-status", detail, "error"); + else if (kind === "restarting" && detail !== "timeout") setStatus("#engine-status", "Restarting engine…", "busy"); + }); + + try { + const [version, defaults, capabilities, store] = await Promise.all([ + state.engine.version(), + state.engine.defaults(), + state.engine.capabilities(), + openStore(), + loadSamples(), + ]); + state.defaults = defaults; + state.capabilities = capabilities; + state.store = store; + $("#engine-version").textContent = `v${version}`; + setStatus("#engine-status", "Engine ready", "ready"); + } catch (err) { + setStatus("#engine-status", `Engine failed: ${err.message}`, "error"); + console.error(err); + return; + } + + state.workspaces = await state.store.list().catch(() => []); + + result = new ResultView({ + monaco, + root: $("#result-body"), + onRevealLine: revealLine, + onRunAgain: () => runScript({ redeliver: true }), + onSelectView: selectResultView, + getOriginal: () => state.lastRunMessage, + getTheme: theme, + }); + + settingsDrawer = new SettingsDrawer({ + drawer: $("#settings-drawer"), + backdrop: $("#settings-backdrop"), + body: $("#settings-body"), + resetButton: $("#settings-reset"), + jsonButton: $("#settings-json"), + defaults: state.defaults, + capabilities: state.capabilities, + get: () => state.workspace.settings, + set: updateSettings, + }); + + $("#run-button").addEventListener("click", () => runScript()); + $("#settings-button").addEventListener("click", () => settingsDrawer.open()); + $("#add-script").addEventListener("click", () => addScript()); + $("#add-message").addEventListener("click", () => addMessage()); + for (const tab of document.querySelectorAll("#result-tabs .tab")) tab.addEventListener("click", () => selectResultView(tab.dataset.view)); + for (const button of document.querySelectorAll(".mobile-tabs button")) button.addEventListener("click", () => showPanel(button.dataset.panel)); + DARK.addEventListener("change", () => monaco.editor.setTheme(theme())); + window.addEventListener("hashchange", async () => { + if (!hasSharedWorkspace()) return; + await openWorkspace(await initialWorkspace()); + }); + document.addEventListener("visibilitychange", () => { + if (document.visibilityState === "hidden" && saveTimer) saveNow(); + }); + window.addEventListener("pagehide", () => { + if (saveTimer) saveNow(); + }); + + setupMenus(); + setupShare(); + setupFiles(); + setupGutters(); + setupKeys(); + setupEnvelope(); + setupWelcome(); + renderExamplesMenu(); + + await openWorkspace(await initialWorkspace()); +} + +boot(); diff --git a/sieve-playground/eml-language.js b/sieve-playground/eml-language.js new file mode 100644 index 0000000..b43f96c --- /dev/null +++ b/sieve-playground/eml-language.js @@ -0,0 +1,113 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +export const EML_ID = "eml"; + +class EmlState { + constructor(inHeaders, boundaries) { + this.inHeaders = inHeaders; + this.boundaries = boundaries; + } + + clone() { + return new EmlState(this.inHeaders, this.boundaries.slice()); + } + + equals(other) { + return ( + other instanceof EmlState && + other.inHeaders === this.inHeaders && + other.boundaries.length === this.boundaries.length && + other.boundaries.every((b, i) => b === this.boundaries[i]) + ); + } +} + +const HEADER = /^([A-Za-z0-9!#$%&'*+.^_`|~-]+)(\s*:)/; +const BOUNDARY_PARAM = /boundary\s*=\s*"?([^";\s]+)"?/i; + +export function registerEml(monaco) { + monaco.languages.register({ id: EML_ID, extensions: [".eml"], aliases: ["Email"] }); + monaco.languages.setTokensProvider(EML_ID, { + getInitialState: () => new EmlState(true, []), + tokenize(line, state) { + const next = state.clone(); + const tokens = []; + + if (next.boundaries.length) { + const trimmed = line.trimEnd(); + const hit = next.boundaries.find((b) => trimmed === `--${b}` || trimmed === `--${b}--`); + if (hit) { + tokens.push({ startIndex: 0, scopes: "keyword.boundary" }); + if (trimmed.endsWith("--") && trimmed === `--${hit}--`) { + next.boundaries = next.boundaries.filter((b) => b !== hit); + next.inHeaders = false; + } else { + next.inHeaders = true; + } + return { tokens, endState: next }; + } + } + + if (next.inHeaders) { + if (line.trim() === "") { + next.inHeaders = false; + return { tokens: [{ startIndex: 0, scopes: "" }], endState: next }; + } + const boundary = BOUNDARY_PARAM.exec(line); + if (boundary && !next.boundaries.includes(boundary[1])) next.boundaries.push(boundary[1]); + const header = HEADER.exec(line); + if (header) { + tokens.push({ startIndex: 0, scopes: "attribute.name.header" }); + tokens.push({ startIndex: header[1].length, scopes: "delimiter" }); + tokens.push({ startIndex: header[0].length, scopes: "string.header" }); + } else if (/^\s/.test(line)) { + tokens.push({ startIndex: 0, scopes: "string.header" }); + } else { + tokens.push({ startIndex: 0, scopes: "invalid" }); + } + return { tokens, endState: next }; + } + + tokens.push({ startIndex: 0, scopes: /^>/.test(line) ? "comment.quote" : "" }); + return { tokens, endState: next }; + }, + }); +} + +export function defineThemes(monaco) { + const rules = (dark) => [ + { token: "keyword", foreground: dark ? "c792ea" : "7a3eb1", fontStyle: "bold" }, + { token: "type", foreground: dark ? "82aaff" : "1f5fbf" }, + { token: "attribute.name", foreground: dark ? "f78c6c" : "b35300" }, + { token: "variable", foreground: dark ? "ffcb6b" : "a0680a", fontStyle: "bold" }, + { token: "string", foreground: dark ? "c3e88d" : "2f7d32" }, + { token: "string.heredoc", foreground: dark ? "89ddff" : "0a7f94", fontStyle: "bold" }, + { token: "string.escape", foreground: dark ? "89ddff" : "0a7f94" }, + { token: "number", foreground: dark ? "f78c6c" : "b35300" }, + { token: "comment", foreground: dark ? "6a7390" : "7d8595", fontStyle: "italic" }, + { token: "attribute.name.header", foreground: dark ? "82aaff" : "1f5fbf", fontStyle: "bold" }, + { token: "string.header", foreground: dark ? "d7dae0" : "3a3f4b" }, + { token: "keyword.boundary", foreground: dark ? "c792ea" : "7a3eb1" }, + { token: "comment.quote", foreground: dark ? "6a7390" : "7d8595" }, + { token: "invalid", foreground: dark ? "ff7b82" : "c6313a" }, + ]; + monaco.editor.defineTheme("playground-light", { + base: "vs", + inherit: true, + rules: rules(false), + colors: { "editor.background": "#ffffff", "editorGutter.background": "#ffffff" }, + }); + monaco.editor.defineTheme("playground-dark", { + base: "vs-dark", + inherit: true, + rules: rules(true), + colors: { "editor.background": "#1b1d24", "editorGutter.background": "#1b1d24" }, + }); +} diff --git a/sieve-playground/engine.js b/sieve-playground/engine.js new file mode 100644 index 0000000..4fd3c2e --- /dev/null +++ b/sieve-playground/engine.js @@ -0,0 +1,144 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +const RUN_TIMEOUT_MS = 8000; +const MAX_RESTARTS = 3; +const RESTART_WINDOW_MS = 60000; +const BASE_BACKOFF_MS = 500; + +export class EngineUnavailable extends Error {} + +export class Engine { + constructor() { + this.pending = new Map(); + this.nextId = 1; + this.listeners = new Set(); + this.restarts = []; + this.failed = null; + this.spawn(); + } + + onStatus(listener) { + this.listeners.add(listener); + } + + emit(state, detail) { + for (const listener of this.listeners) listener(state, detail); + } + + spawn() { + const worker = new Worker(new URL("./worker.js", import.meta.url), { type: "module" }); + this.worker = worker; + this.ready = new Promise((resolve, reject) => { + this.resolveReady = resolve; + this.rejectReady = reject; + }); + this.ready.catch(() => {}); + worker.onmessage = (event) => { + if (worker !== this.worker) return; + const data = event.data; + if (data.type === "ready") { + this.resolveReady(); + } else if (data.type === "init-error") { + this.crash(`Engine failed to load: ${data.error}`, { loadFailure: true }); + } else { + this.settle(data); + } + }; + worker.onerror = (event) => { + event.preventDefault(); + if (worker === this.worker) { + this.crash(`Engine failed to load: ${event.message || "the worker script could not be loaded"}`, { loadFailure: true }); + } + }; + } + + crash(reason, { loadFailure = false } = {}) { + this.worker.terminate(); + this.rejectReady(new EngineUnavailable(reason)); + for (const { reject, timer } of this.pending.values()) { + clearTimeout(timer); + reject(new EngineUnavailable(reason)); + } + this.pending.clear(); + + let delay = 0; + if (loadFailure) { + const now = Date.now(); + this.restarts = this.restarts.filter((time) => now - time < RESTART_WINDOW_MS); + if (this.restarts.length >= MAX_RESTARTS) { + this.failed = reason; + this.emit("failed", reason); + return; + } + this.restarts.push(now); + delay = BASE_BACKOFF_MS * 2 ** (this.restarts.length - 1); + } + this.emit("restarting", reason); + const failedReady = this.ready; + this.ready = new Promise((resolve, reject) => { + setTimeout(() => { + this.spawn(); + this.ready.then(resolve, reject); + }, delay); + }); + this.ready.catch(() => {}); + failedReady.catch(() => {}); + } + + settle({ id, result, error, fatal }) { + const entry = this.pending.get(id); + if (!entry) return; + this.pending.delete(id); + clearTimeout(entry.timer); + if (error) { + entry.reject(new Error(error)); + if (fatal) this.crash(`The engine crashed: ${error}`); + } else { + entry.resolve(result); + } + } + + async call(op, payload, timeout) { + if (this.failed) throw new EngineUnavailable(this.failed); + await this.ready; + const id = this.nextId++; + return new Promise((resolve, reject) => { + const timer = timeout + ? setTimeout(() => { + this.pending.delete(id); + reject(new Error(`The script did not finish within ${timeout / 1000} seconds and was stopped.`)); + this.crash("timeout"); + }, timeout) + : null; + this.pending.set(id, { resolve, reject, timer }); + this.worker.postMessage({ id, op, payload }); + }); + } + + version() { + return this.call("version"); + } + + capabilities() { + return this.call("capabilities"); + } + + defaults() { + return this.call("defaults"); + } + + compile(request) { + return this.call("compile", request, RUN_TIMEOUT_MS); + } + + run(request) { + return this.call("run", request, RUN_TIMEOUT_MS); + } +} diff --git a/sieve-playground/favicon.svg b/sieve-playground/favicon.svg new file mode 100644 index 0000000..95fabf8 --- /dev/null +++ b/sieve-playground/favicon.svg @@ -0,0 +1 @@ + diff --git a/sieve-playground/index.html b/sieve-playground/index.html new file mode 100644 index 0000000..dd578f0 --- /dev/null +++ b/sieve-playground/index.html @@ -0,0 +1,260 @@ + + + + + + + + Sieve playground · inbuxa Admin + + + + + + + + +
+ + + Sieve playground + + inbuxa Admin + +
+ + + + + + + + + +
+
+ + + +
+
+
+ 1Script +
+ +
+
+
+
+ + + +
+
+ 2Message +
+ +
+
+
Drop an .eml or .sieve file
+
+
+ + Envelope + + +
+ + + + +
+
+
+ + + +
+
+ 3Result +
+ + + +
+
+
+
+
+
+
+
+
+ +
+ Loading engine… + + + + + sieve-rs +
+ + + + + +
+

Sieve playground

+

+ Write and test Sieve email filters against real messages, with the same Sieve interpreter your + inbuxa server runs. +

+
    +
  • + + Everything runs in your browser. Scripts are compiled and executed locally with WebAssembly. +
  • +
  • + + Nothing is stored on a server. Your scripts, messages and settings are saved only in this browser. +
  • +
  • + + Sharing is up to you. A share link carries the workspace inside the link itself; nothing is uploaded. +
  • +
+
+ + +
+
+
+ + +
+

Share workspace

+

+ The workspace is compressed into the link itself. Nothing is uploaded: whoever opens the link gets their own copy. +

+ +

Messages may contain personal information. Check them before sharing.

+ +

+
+ + + +
+
+
+ + +
+

+

+ +
+ + + +
+
+
+ + + + + + + + + + + diff --git a/sieve-playground/result.js b/sieve-playground/result.js new file mode 100644 index 0000000..a2a1013 --- /dev/null +++ b/sieve-playground/result.js @@ -0,0 +1,434 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +import { EML_ID } from "./eml-language.js"; + +export function h(tag, attrs = {}, ...children) { + const el = document.createElement(tag); + for (const [key, value] of Object.entries(attrs || {})) { + if (value === undefined || value === null || value === false) continue; + if (key === "class") el.className = value; + else if (key === "dataset") Object.assign(el.dataset, value); + else if (key.startsWith("on")) el.addEventListener(key.slice(2), value); + else el.setAttribute(key, value === true ? "" : value); + } + for (const child of children.flat()) { + if (child === null || child === undefined || child === false) continue; + el.append(child instanceof Node ? child : document.createTextNode(String(child))); + } + return el; +} + +const ICONS = { + keep: '', + fileinto: '', + discard: '', + reject: '', + redirect: '', + vacation: '', + notification: '', + notify: '', + created: '', + envelope: '', + error: '', +}; + +function icon(kind) { + const span = h("span", { class: "event-icon", "aria-hidden": "true" }); + span.innerHTML = `${ICONS[kind] || ICONS.created}`; + return span; +} + +const ROLE_BY_KIND = { + keep: "Delivered", + fileinto: "Delivered", + vacation: "Vacation reply", + redirect: "Redirected", + notification: "Notification", +}; + +export function messageRoles(output) { + const roles = new Map(); + for (const event of output.events) { + if (!event.messageId || event.kind === "created") continue; + const role = ROLE_BY_KIND[event.kind]; + if (!role) continue; + const set = roles.get(event.messageId) || new Set(); + set.add(role); + roles.set(event.messageId, set); + } + return roles; +} + +function roleLabel(roles, id) { + const set = roles.get(id); + if (!set || set.size === 0) return "Generated"; + return [...set].join(" · "); +} + +function summarize(output) { + const lines = []; + const events = output.events; + const byKind = (kind) => events.filter((event) => event.kind === kind); + const flags = (event) => event.detail.find((d) => d.label === "flags")?.value; + const withFlags = (event) => (flags(event) ? [" with flags ", h("b", {}, flags(event))] : []); + + for (const event of byKind("fileinto")) { + const folder = event.summary.replace(/^File into /, ""); + lines.push(["Filed into ", h("b", {}, folder), ...withFlags(event)]); + } + for (const event of byKind("keep")) { + lines.push([event.afterError ? "Kept in " : "Delivered to ", h("b", {}, "INBOX"), ...withFlags(event), event.afterError ? " because the script failed" : ""]); + } + for (const event of byKind("discard")) lines.push([h("b", {}, "Discarded"), " without notifying anyone"]); + for (const event of byKind("reject")) { + const reason = event.detail.find((d) => d.label === "reason")?.value || ""; + lines.push([h("b", {}, "Rejected"), reason ? `: "${reason}"` : ""]); + } + const redirects = byKind("redirect").map((event) => event.summary.replace(/^Redirect to /, "")); + if (redirects.length) lines.push(["Redirected to ", h("b", {}, redirects.join(", "))]); + for (const event of byKind("vacation")) lines.push(["Vacation reply sent to ", h("b", {}, event.summary.replace(/^Send a vacation reply to /, ""))]); + for (const event of byKind("notification")) lines.push(["Notification sent to ", h("b", {}, event.summary.replace(/^Send a notification to /, ""))]); + for (const event of byKind("notify")) lines.push([event.summary]); + if (output.messageChanged) lines.push(["The message was ", h("b", {}, "modified"), " by the script"]); + if (lines.length === 0) lines.push(["No actions were taken"]); + return lines; +} + +export class ResultView { + constructor({ monaco, root, onRevealLine, onRunAgain, onSelectView, getOriginal, getTheme }) { + this.monaco = monaco; + this.actionsView = root.querySelector("#actions-view"); + this.messagesView = root.querySelector("#messages-view"); + this.variablesView = root.querySelector("#variables-view"); + this.countEl = document.querySelector("#messages-count"); + this.onRevealLine = onRevealLine; + this.onRunAgain = onRunAgain; + this.onSelectView = onSelectView; + this.getOriginal = getOriginal; + this.getTheme = getTheme; + this.output = null; + this.selected = null; + this.mode = "preview"; + this.sourceEditor = null; + this.diffEditor = null; + this.renderEmpty(); + } + + renderEmpty() { + this.output = null; + this.countEl.textContent = ""; + this.actionsView.replaceChildren( + h("div", { class: "empty" }, h("div", {}, h("strong", {}, "Nothing has run yet"), "Press ", h("kbd", {}, "Run"), " or ", h("kbd", {}, navigator.platform.includes("Mac") ? "⌘ Enter" : "Ctrl Enter"), " to filter the message through the script.")), + ); + this.messagesView.replaceChildren(h("div", { class: "empty" }, h("div", {}, h("strong", {}, "No messages yet"), "Modified messages, vacation replies and notifications appear here after a run."))); + this.variablesView.replaceChildren(h("div", { class: "empty" }, h("div", {}, h("strong", {}, "No variables yet"), "Global variables and duplicate ids appear here after a run."))); + this.disposeEditors(); + } + + renderFailure(message) { + this.renderEmpty(); + this.actionsView.replaceChildren(h("div", { class: "banner" }, message)); + } + + renderCompileErrors(count, onShow) { + this.renderEmpty(); + this.actionsView.replaceChildren( + h("div", { class: "banner" }, `The script has ${count} error${count === 1 ? "" : "s"} and cannot run.`, h("button", { type: "button", onclick: onShow }, "Show")), + ); + } + + render(output) { + this.output = output; + this.roles = messageRoles(output); + this.countEl.textContent = output.messages.length ? String(output.messages.length) : ""; + this.renderActions(); + if (!output.messages.some((message) => message.id === this.selected)) { + const delivered = output.messages.find((message) => roleLabel(this.roles, message.id).includes("Delivered")); + this.selected = (delivered || output.messages[0])?.id ?? null; + } + this.renderMessages(); + this.renderVariables(); + } + + renderActions() { + const output = this.output; + const nodes = []; + + if (output.error) { + const where = output.error.line > 0 ? ` (line ${output.error.line})` : ""; + nodes.push( + h("div", { class: "banner warn" }, h("span", {}, h("b", {}, "Runtime error: "), output.error.message, where), + output.error.line > 0 ? h("button", { type: "button", onclick: () => this.onRevealLine(output.error.script, output.error.line, output.error.column) }, "Go to line") : null), + ); + } + + nodes.push( + h("div", { class: "outcome" }, + h("div", { class: "outcome-title" }, "Outcome"), + h("div", { class: "outcome-lines" }, summarize(output).map((parts) => h("div", {}, ...parts))), + h("div", { class: "outcome-actions" }, + output.messages.length ? h("button", { class: "btn", type: "button", onclick: () => this.onSelectView("messages") }, `View ${output.messages.length} message${output.messages.length === 1 ? "" : "s"}`) : null, + h("button", { class: "btn", type: "button", title: "Run again with the duplicate ids and vacation history from this run", onclick: () => this.onRunAgain() }, "Run again as a redelivery"), + ), + ), + ); + + const list = h("ol", { class: "timeline" }); + for (const event of output.events) { + const chips = event.detail.map((detail) => + h("span", { class: `chip${detail.label === "warning" ? " warn" : ""}` }, h("span", { class: "k" }, detail.label), detail.value), + ); + if (event.isFinal) chips.unshift(h("span", { class: "chip tag" }, event.afterError ? "implicit keep" : "final action")); + if (event.messageId > 0 && event.kind !== "created") { + chips.push(h("button", { class: "chip chip-link", type: "button", onclick: () => this.showMessage(event.messageId) }, `message #${event.messageId}`)); + } + if (event.kind === "created") { + chips.push(h("button", { class: "chip chip-link", type: "button", onclick: () => this.showMessage(event.messageId) }, "view")); + } + list.append( + h("li", { class: `event${event.isFinal ? " final" : ""}${event.afterError || event.kind === "created" ? " muted" : ""}`, dataset: { kind: event.kind } }, + icon(event.kind), + h("div", { class: "event-card" }, h("div", { class: "event-summary" }, event.summary), chips.length ? h("div", { class: "event-meta" }, chips) : null), + ), + ); + } + nodes.push(list); + this.actionsView.replaceChildren(...nodes); + } + + showMessage(id) { + this.selected = id; + this.renderMessages(); + this.onSelectView("messages"); + } + + renderMessages() { + const output = this.output; + this.disposeEditors(); + if (!output || output.messages.length === 0) { + this.messagesView.replaceChildren( + h("div", { class: "empty" }, h("div", {}, h("strong", {}, "No messages were generated"), "The original message was not modified and no replies or notifications were sent.")), + ); + return; + } + + const list = h("div", { class: "message-list" }, + output.messages.map((message) => + h("button", { type: "button", class: `message-pill${message.id === this.selected ? " active" : ""}`, onclick: () => { this.selected = message.id; this.renderMessages(); } }, + h("span", { class: "role" }, `#${message.id} ${roleLabel(this.roles, message.id)}`), + h("span", { class: "subj" }, message.subject || "(no subject)"), + ), + ), + ); + + const message = output.messages.find((m) => m.id === this.selected) || output.messages[0]; + const canDiff = roleLabel(this.roles, message.id).includes("Delivered") || roleLabel(this.roles, message.id).includes("Redirected"); + if (this.mode === "diff" && !canDiff) this.mode = "preview"; + + const setMode = (mode) => { this.mode = mode; this.renderMessages(); }; + const toolbar = h("div", { class: "message-toolbar" }, + h("div", { class: "segmented", role: "tablist" }, + h("button", { type: "button", class: this.mode === "preview" ? "active" : "", onclick: () => setMode("preview") }, "Preview"), + h("button", { type: "button", class: this.mode === "source" ? "active" : "", onclick: () => setMode("source") }, "Source"), + h("button", { type: "button", class: this.mode === "diff" ? "active" : "", disabled: !canDiff, title: canDiff ? "Compare with the input message" : "Only available for the delivered message", onclick: () => setMode("diff") }, "Changes"), + ), + h("span", { class: "toolbar-gap" }), + h("span", { class: "item-sub" }, `${message.size.toLocaleString()} bytes`), + h("button", { class: "btn ghost", type: "button", onclick: () => copyText(message.raw) }, "Copy"), + ); + + const frame = h("div", { class: `message-frame${this.mode === "preview" ? "" : " code"}` }); + this.messagesView.replaceChildren(list, toolbar, frame); + + if (this.mode === "preview") { + frame.append(this.preview(message)); + this.pendingMount = null; + } else { + this.pendingMount = { frame, message, mode: this.mode }; + if (this.messagesView.classList.contains("active")) this.mountEditor(); + } + } + + onShown() { + if (this.pendingMount) this.mountEditor(); + this.layout(); + } + + mountEditor() { + const { frame, message, mode } = this.pendingMount; + this.pendingMount = null; + if (!frame.isConnected) return; + const text = message.raw.replace(/\r\n/g, "\n"); + if (mode === "source") { + if (!this.sourceHost) { + this.sourceHost = h("div", { class: "viewer-host" }); + this.sourceEditor = this.monaco.editor.create(this.sourceHost, viewerOptions()); + } + frame.append(this.sourceHost); + this.swapModels(() => this.sourceEditor.setModel(this.monaco.editor.createModel(text, EML_ID))); + this.sourceEditor.layout(); + } else { + if (!this.diffHost) { + this.diffHost = h("div", { class: "viewer-host" }); + this.diffEditor = this.monaco.editor.createDiffEditor(this.diffHost, { ...viewerOptions(), enableSplitViewResizing: false }); + } + frame.append(this.diffHost); + this.diffEditor.updateOptions({ renderSideBySide: frame.clientWidth > 700 }); + this.swapModels(() => + this.diffEditor.setModel({ + original: this.monaco.editor.createModel(this.getOriginal().replace(/\r\n/g, "\n"), EML_ID), + modified: this.monaco.editor.createModel(text, EML_ID), + }), + ); + this.diffEditor.layout(); + } + } + + swapModels(attach) { + const previous = this.viewerModels || []; + attach(); + const source = this.sourceEditor?.getModel(); + const diff = this.diffEditor?.getModel(); + this.viewerModels = [source, diff?.original, diff?.modified].filter(Boolean); + const keep = new Set(this.viewerModels); + for (const model of previous) if (!keep.has(model)) model.dispose(); + } + + preview(message) { + const container = h("div", { class: "preview" }); + const original = parseHeaderNames(this.getOriginal()); + const main = ["From", "To", "Cc", "Subject", "Date"]; + let showAll = false; + const table = h("table", { class: "headers-table" }); + const drawHeaders = () => { + const rows = message.headers + .filter((header) => showAll || main.some((name) => name.toLowerCase() === header.name.toLowerCase())) + .map((header) => { + const isNew = !original.has(`${header.name.toLowerCase()}:${header.value}`); + return h("tr", { class: isNew && message.id > 0 && roleLabel(this.roles, message.id).includes("Delivered") ? "changed" : "" }, h("th", {}, header.name), h("td", {}, header.value)); + }); + table.replaceChildren(...rows); + toggle.textContent = showAll ? "Show fewer headers" : `Show all ${message.headers.length} headers`; + }; + const toggle = h("button", { type: "button", class: "headers-toggle", onclick: () => { showAll = !showAll; drawHeaders(); } }); + drawHeaders(); + container.append(table, toggle); + + if (message.html && !message.text) { + container.append(htmlFrame(message.html)); + } else if (message.html) { + let showHtml = false; + const body = h("div", {}); + const switcher = h("div", { class: "segmented" }); + const draw = () => { + switcher.replaceChildren( + h("button", { type: "button", class: showHtml ? "" : "active", onclick: () => { showHtml = false; draw(); } }, "Text"), + h("button", { type: "button", class: showHtml ? "active" : "", onclick: () => { showHtml = true; draw(); } }, "HTML"), + ); + body.replaceChildren(showHtml ? htmlFrame(message.html) : h("pre", { class: "body-text" }, message.text)); + }; + draw(); + container.append(h("div", { style: "margin-bottom:8px" }, switcher), body); + } else { + container.append(h("pre", { class: "body-text" }, message.text || "(empty body)")); + } + + if (message.attachments.length) { + container.append( + h("div", { class: "attachments" }, + message.attachments.map((a) => h("span", { class: "attachment" }, a.name, h("span", { class: "muted" }, a.contentType), h("span", { class: "muted" }, formatSize(a.size)))), + ), + ); + } + return container; + } + + renderVariables() { + const output = this.output; + const nodes = []; + if (output.globalVariables.length) { + nodes.push( + h("table", { class: "vars" }, + h("thead", {}, h("tr", {}, h("th", {}, "Global variable"), h("th", {}, "Value"))), + h("tbody", {}, output.globalVariables.map((v) => h("tr", {}, h("td", {}, v.name), h("td", {}, v.value)))), + ), + ); + } else { + nodes.push(h("div", { class: "vars-note" }, "No global variables were set. Declare a variable with ", h("code", {}, 'global ["name"];'), " (requires \"include\") to inspect its final value here.")); + } + nodes.push( + h("table", { class: "vars" }, + h("thead", {}, h("tr", {}, h("th", {}, "Duplicate and vacation ids seen"))), + h("tbody", {}, output.duplicateIds.length ? output.duplicateIds.map((id) => h("tr", {}, h("td", {}, id))) : h("tr", {}, h("td", {}, "None"))), + ), + ); + this.variablesView.replaceChildren(...nodes); + } + + setTheme(theme) { + this.monaco.editor.setTheme(theme); + } + + layout() { + this.sourceEditor?.layout(); + this.diffEditor?.layout(); + } + + disposeEditors() { + this.pendingMount = null; + this.sourceHost?.remove(); + this.diffHost?.remove(); + } +} + +function viewerOptions() { + return { + readOnly: true, + automaticLayout: true, + stickyScroll: { enabled: false }, + minimap: { enabled: false }, + wordWrap: "on", + scrollBeyondLastLine: false, + lineNumbersMinChars: 3, + fontSize: 12.5, + renderLineHighlight: "none", + }; +} + +function htmlFrame(html) { + const csp = ''; + return h("iframe", { class: "body-html", sandbox: "", referrerpolicy: "no-referrer", srcdoc: `${csp}${html}`, title: "HTML body" }); +} + +function parseHeaderNames(raw) { + const set = new Set(); + const headerBlock = raw.replace(/\r\n/g, "\n").split(/\n\n/)[0]; + const unfolded = headerBlock.replace(/\n[ \t]+/g, " "); + for (const line of unfolded.split("\n")) { + const index = line.indexOf(":"); + if (index > 0) set.add(`${line.slice(0, index).trim().toLowerCase()}:${line.slice(index + 1).trim().split(/\s+/).join(" ")}`); + } + return set; +} + +function formatSize(bytes) { + if (bytes < 1024) return `${bytes} B`; + if (bytes < 1024 * 1024) return `${(bytes / 1024).toFixed(1)} KB`; + return `${(bytes / 1024 / 1024).toFixed(1)} MB`; +} + +export async function copyText(text) { + try { + await navigator.clipboard.writeText(text); + document.dispatchEvent(new CustomEvent("toast", { detail: "Copied to the clipboard" })); + } catch (_) { + document.dispatchEvent(new CustomEvent("toast", { detail: "Copy failed: clipboard access was blocked" })); + } +} diff --git a/sieve-playground/samples/expressions.eml b/sieve-playground/samples/expressions.eml new file mode 100644 index 0000000..3a92104 --- /dev/null +++ b/sieve-playground/samples/expressions.eml @@ -0,0 +1,9 @@ +From: Team Lead +To: jane@example.org, bob@example.net, carol@example.com +Cc: dave@example.org +Subject: MEETING MOVED TO FRIDAY +Date: Sat, 12 Sep 2026 09:00:00 +0000 +Message-ID: +Content-Type: text/plain; charset="utf-8" + +The weekly meeting moves to Friday 10:00. diff --git a/sieve-playground/samples/expressions.sieve b/sieve-playground/samples/expressions.sieve new file mode 100644 index 0000000..dac8110 --- /dev/null +++ b/sieve-playground/samples/expressions.sieve @@ -0,0 +1,44 @@ +# inbuxa expressions and loops +# +# "vnd.inbuxa.expressions" adds "let" and "eval" with arithmetic, +# string functions and arrays. "vnd.inbuxa.while" adds loops. Both are +# inbuxa extensions to Sieve. + +require ["variables", "editheader", "fileinto", "mailbox", "imap4flags", + "vnd.inbuxa.expressions", "vnd.inbuxa.while"]; + +# Header fields are available as values: the display name of the sender, +# falling back to the address when the name is empty. +let "sender" "header.from.name"; +if eval "is_empty(sender)" { + let "sender" "header.from.addr"; +} +addheader "X-Sender-Name" "${sender}"; + +let "recipients" "header.to:cc[*].addr[*]"; +let "total" "count(recipients)"; +let "shouting" "is_uppercase(header.subject)"; + +if eval "total > 3" { + addflag "$ManyRecipients"; +} + +let "i" "0"; +let "domains" "''"; +while "i < total" { + let "domain" "email_part(recipients[i], 'domain')"; + let "domains" "domains + domain + ' '"; + let "i" "i + 1"; +} +addheader "X-Recipient-Domains" "${domains}"; + +if eval "shouting" { + addflag "$Shouting"; + let "subject" "to_lowercase(header.subject)"; + deleteheader "Subject"; + addheader "Subject" "${subject}"; +} + +if eval "contains_ignore_case(header.subject, 'meeting')" { + fileinto :create "Calendar"; +} diff --git a/sieve-playground/samples/forward.eml b/sieve-playground/samples/forward.eml new file mode 100644 index 0000000..7d4b61b --- /dev/null +++ b/sieve-playground/samples/forward.eml @@ -0,0 +1,14 @@ +From: Billing +To: jane@example.org +Subject: Urgent: invoice 2026-0915 overdue +Importance: high +Date: Thu, 10 Sep 2026 08:00:00 +0000 +Message-ID: +Content-Type: text/plain; charset="utf-8" + +Dear customer, + +Invoice 2026-0915 is now overdue. Please arrange payment at your +earliest convenience. + +Supplier Accounts diff --git a/sieve-playground/samples/forward.sieve b/sieve-playground/samples/forward.sieve new file mode 100644 index 0000000..32d8c67 --- /dev/null +++ b/sieve-playground/samples/forward.sieve @@ -0,0 +1,29 @@ +# Redirect, notify and copy +# +# Sends a copy of invoices to accounting, notifies Jane by email about +# urgent messages, and rewrites the subject with "editheader" before the +# message is kept. + +require ["copy", "enotify", "variables", "editheader", "redirect-dsn", + "fileinto", "fcc", "mailbox", "envelope"]; + +if header :contains "Subject" "invoice" { + redirect :copy :notify "failure,delay" :ret "hdrs" "accounting@example.org"; +} + +set "from" ""; +if anyof (header :is "Importance" "high", header :contains "Subject" "urgent") { + if header :matches "From" "*" { + set "from" "${1}"; + } + notify :importance "1" + :message "Urgent mail from ${from}" + "mailto:jane.mobile@example.org?subject=Urgent%20mail"; +} + +if header :matches "Subject" "*" { + deleteheader "Subject"; + addheader "Subject" "[Finance] ${1}"; +} + +fileinto :copy :create "Finance"; diff --git a/sieve-playground/samples/include-common.sieve b/sieve-playground/samples/include-common.sieve new file mode 100644 index 0000000..b40e085 --- /dev/null +++ b/sieve-playground/samples/include-common.sieve @@ -0,0 +1,13 @@ +require ["include", "variables"]; + +global ["priority", "project"]; + +set "project" "general"; +if header :matches "Subject" "[*]*" { + set :lower "project" "${1}"; +} + +set "priority" "normal"; +if header :contains "Subject" ["blocker", "outage"] { + set "priority" "high"; +} diff --git a/sieve-playground/samples/include-main.sieve b/sieve-playground/samples/include-main.sieve new file mode 100644 index 0000000..6cbc7a8 --- /dev/null +++ b/sieve-playground/samples/include-main.sieve @@ -0,0 +1,17 @@ +# Includes and global variables +# +# The "common" tab is an included script. It sets global variables that +# this script reads back. Add your own tabs with the + button: a tab named +# "foo" is available as include "foo". + +require ["include", "variables", "fileinto", "mailbox"]; + +global ["priority", "project"]; + +include :personal "common"; + +if string :is "${priority}" "high" { + fileinto :create "Projects/${project}/Priority"; +} else { + fileinto :create "Projects/${project}"; +} diff --git a/sieve-playground/samples/include.eml b/sieve-playground/samples/include.eml new file mode 100644 index 0000000..1714619 --- /dev/null +++ b/sieve-playground/samples/include.eml @@ -0,0 +1,8 @@ +From: Ops Team +To: jane@example.org +Subject: [Apollo] Outage in the staging cluster +Date: Fri, 11 Sep 2026 14:30:00 +0000 +Message-ID: +Content-Type: text/plain; charset="utf-8" + +The staging cluster is down since 14:10 UTC. Investigating. diff --git a/sieve-playground/samples/index.json b/sieve-playground/samples/index.json new file mode 100644 index 0000000..0e8ec29 --- /dev/null +++ b/sieve-playground/samples/index.json @@ -0,0 +1,55 @@ +[ + { + "id": "welcome", + "title": "Welcome tour", + "description": "Duplicates, spam, lists, flags, MIME footers and vacation in one script.", + "scripts": [{ "name": "main", "file": "welcome.sieve" }], + "messages": [{ "name": "q3-report.eml", "file": "welcome.eml" }] + }, + { + "id": "lists", + "title": "Mailing lists", + "description": "Regex captures, body tests and plus addressing.", + "scripts": [{ "name": "main", "file": "lists.sieve" }], + "messages": [{ "name": "announcement.eml", "file": "lists.eml" }] + }, + { + "id": "spam", + "title": "Spam and viruses", + "description": "spamtest, virustest, reject and discard driven by the scores in Settings.", + "scripts": [{ "name": "main", "file": "spam.sieve" }], + "messages": [{ "name": "lottery.eml", "file": "spam.eml" }], + "settings": { "spamScore": 6 } + }, + { + "id": "vacation", + "title": "Out of office", + "description": "Vacation replies with date windows and auto-reply safeguards.", + "scripts": [{ "name": "main", "file": "vacation.sieve" }], + "messages": [{ "name": "lunch.eml", "file": "vacation.eml" }] + }, + { + "id": "forward", + "title": "Redirect and notify", + "description": "redirect :copy with DSN options, enotify and editheader.", + "scripts": [{ "name": "main", "file": "forward.sieve" }], + "messages": [{ "name": "invoice.eml", "file": "forward.eml" }] + }, + { + "id": "include", + "title": "Includes", + "description": "Split a filter across scripts with include and global variables.", + "scripts": [ + { "name": "main", "file": "include-main.sieve" }, + { "name": "common", "file": "include-common.sieve" } + ], + "messages": [{ "name": "outage.eml", "file": "include.eml" }] + }, + { + "id": "expressions", + "title": "Expressions and loops", + "description": "The vnd.inbuxa.expressions and vnd.inbuxa.while extensions: let, eval, loops and built-in functions.", + "scripts": [{ "name": "main", "file": "expressions.sieve" }], + "messages": [{ "name": "meeting.eml", "file": "expressions.eml" }] + } +] diff --git a/sieve-playground/samples/lists.eml b/sieve-playground/samples/lists.eml new file mode 100644 index 0000000..8099559 --- /dev/null +++ b/sieve-playground/samples/lists.eml @@ -0,0 +1,16 @@ +From: Ferris +To: rust-users@lists.rust-lang.example +Subject: [ANN] Release 1.99 is out +Date: Mon, 7 Sep 2026 17:02:11 +0000 +Message-ID: +In-Reply-To: +List-Id: Rust users +List-Unsubscribe: +Content-Type: text/plain; charset="utf-8" + +Hello everyone, + +The new release is out. See the notes for the full list of changes, +including a security advisory for older toolchains. + +The release team diff --git a/sieve-playground/samples/lists.sieve b/sieve-playground/samples/lists.sieve new file mode 100644 index 0000000..94def2e --- /dev/null +++ b/sieve-playground/samples/lists.sieve @@ -0,0 +1,34 @@ +# Sort mailing lists into folders +# +# Uses "regex" to pull the list name out of the List-Id header and +# "variables" to build the folder name. Messages that mention a keyword +# in the body are flagged, and replies to your own posts are marked read. + +require ["fileinto", "mailbox", "imap4flags", "variables", "regex", "body", + "subaddress", "envelope"]; + +if header :regex "List-Id" "<([a-z0-9-]+)\\.([a-z0-9.-]+)>" { + set :lower "list" "${1}"; + set :lower "host" "${2}"; + + if body :text :contains ["release", "security advisory"] { + addflag "\\Flagged"; + } + + if header :contains "In-Reply-To" "@example.org>" { + addflag "\\Seen"; + } + + fileinto :create "Lists/${host}/${list}"; + stop; +} + +# Plus addressing: mail sent to jane+shopping@example.org goes to "shopping". +if envelope :detail :matches "to" "*" { + if string :is "${1}" "" { + keep; + } else { + set :lower "folder" "${1}"; + fileinto :create "${folder}"; + } +} diff --git a/sieve-playground/samples/spam.eml b/sieve-playground/samples/spam.eml new file mode 100644 index 0000000..b0a0ef0 --- /dev/null +++ b/sieve-playground/samples/spam.eml @@ -0,0 +1,8 @@ +From: "Prize Department" +To: jane@example.org +Subject: You have WON 1,000,000 dollars!!! +Date: Sun, 6 Sep 2026 03:12:45 +0000 +Message-ID: +Content-Type: text/html; charset="utf-8" + +

Congratulations!

Click here to claim your prize.

diff --git a/sieve-playground/samples/spam.sieve b/sieve-playground/samples/spam.sieve new file mode 100644 index 0000000..1d7fb1c --- /dev/null +++ b/sieve-playground/samples/spam.sieve @@ -0,0 +1,28 @@ +# Quarantine spam and viruses +# +# The spam and virus scores come from Settings (Spam and virus). Try +# changing them and running the script again. + +require ["spamtest", "spamtestplus", "virustest", "relational", + "comparator-i;ascii-numeric", "fileinto", "mailbox", "special-use", + "imap4flags", "reject", "editheader", "variables"]; + +if virustest :value "eq" :comparator "i;ascii-numeric" "5" { + reject "Message rejected: a virus was detected."; + stop; +} + +if spamtest :value "ge" :comparator "i;ascii-numeric" "8" { + discard; + stop; +} + +set "score" ""; +if spamtest :percent :value "ge" :comparator "i;ascii-numeric" "50" { + if spamtest :percent :matches "*" { + set "score" "${1}"; + } + addheader "X-Spam-Score" "${score}%"; + addflag "$Junk"; + fileinto :specialuse "\\Junk" :create "Junk"; +} diff --git a/sieve-playground/samples/vacation.eml b/sieve-playground/samples/vacation.eml new file mode 100644 index 0000000..c1abeee --- /dev/null +++ b/sieve-playground/samples/vacation.eml @@ -0,0 +1,10 @@ +From: Bob Smith +To: Jane Doe +Subject: Lunch next week? +Date: Wed, 9 Sep 2026 11:20:00 +0000 +Message-ID: +Content-Type: text/plain; charset="utf-8" + +Hi Jane, are you free for lunch next Tuesday? + +Bob diff --git a/sieve-playground/samples/vacation.sieve b/sieve-playground/samples/vacation.sieve new file mode 100644 index 0000000..20a604b --- /dev/null +++ b/sieve-playground/samples/vacation.sieve @@ -0,0 +1,37 @@ +# Out of office with dates +# +# Replies only while the current date is inside the vacation window, +# never to mailing lists or automated senders, and at most once every +# three days per sender. Change the dates to see the reply disappear. + +require ["vacation", "vacation-seconds", "date", "relational", "variables", + "envelope"]; + +set "subject" ""; +if currentdate :value "ge" "date" "2026-01-01" { + if currentdate :value "le" "date" "2026-12-31" { + if not anyof (exists "List-Id", + header :contains "Precedence" ["bulk", "list", "junk"], + header :is "Auto-Submitted" ["auto-replied", "auto-generated"], + envelope :localpart :is "from" ["mailer-daemon", "noreply", "no-reply"]) { + if header :matches "Subject" "*" { + set "subject" "${1}"; + } + vacation :days 3 + :from "Jane Doe " + :addresses ["jane@example.org", "j.doe@example.org"] + :subject "Out of office: ${subject}" + :handle "summer-vacation" + text: +Hello, + +I am on vacation and will read your message about "${subject}" when +I am back. For urgent matters please contact support@example.org. + +Best regards, +Jane +. +; + } + } +} diff --git a/sieve-playground/samples/welcome.eml b/sieve-playground/samples/welcome.eml new file mode 100644 index 0000000..70e7ff3 --- /dev/null +++ b/sieve-playground/samples/welcome.eml @@ -0,0 +1,33 @@ +Return-Path: +Received: from mail.example.com (mail.example.com [192.0.2.25]) + by mx.example.org with ESMTPS id 4F2A1B3C + for ; Tue, 8 Sep 2026 09:41:07 +0000 +From: Alice Martin +To: Jane Doe +Subject: Q3 report and team offsite +Date: Tue, 8 Sep 2026 09:41:02 +0000 +Message-ID: +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="playground-boundary" + +--playground-boundary +Content-Type: text/plain; charset="utf-8" +Content-Transfer-Encoding: 7bit + +Hi Jane, + +The Q3 report is attached. Could you review the numbers before +Thursday? We will go through them at the team offsite. + +Thanks, +Alice + +--playground-boundary +Content-Type: application/pdf; name="q3-report.pdf" +Content-Disposition: attachment; filename="q3-report.pdf" +Content-Transfer-Encoding: base64 + +JVBERi0xLjQKJcOkw7zDtsOfCjEgMCBvYmoKPDwgL1R5cGUgL0NhdGFsb2cgPj4KZW5kb2Jq +CnRyYWlsZXIKPDwgL1Jvb3QgMSAwIFIgPj4KJSVFT0YK + +--playground-boundary-- diff --git a/sieve-playground/samples/welcome.sieve b/sieve-playground/samples/welcome.sieve new file mode 100644 index 0000000..a7188f2 --- /dev/null +++ b/sieve-playground/samples/welcome.sieve @@ -0,0 +1,105 @@ +# Welcome to the Sieve playground! +# +# Sieve (RFC 5228) is the standard language for filtering email on the +# mail server. This script runs in your browser on the same interpreter +# your inbuxa server runs. +# +# Press Run (Ctrl+Enter or Cmd+Enter) to filter the message in the middle +# column, then open the Messages tab on the right to see what changed. +# Hover over any command to read its documentation. +# +# Everything runs locally in your browser: scripts and messages are saved +# in this browser only and are never sent to or stored on a server. + +require ["envelope", "fileinto", "mailbox", "special-use", "imap4flags", + "variables", "relational", "comparator-i;ascii-numeric", + "spamtest", "spamtestplus", "date", "duplicate", "extlists", + "editheader", "mime", "foreverypart", "extracttext", "replace", + "vacation"]; + +# Drop the message if the very same one was delivered in the last hour. +# Press "Run again" to simulate a second delivery. +if duplicate :seconds 3600 { + discard; + stop; +} + +# Anything the spam filter scored 80% or higher goes to Junk. +if spamtest :percent :value "ge" :comparator "i;ascii-numeric" "80" { + fileinto :specialuse "\\Junk" :create "Junk"; + stop; +} + +# Mailing lists get a folder of their own, such as "Lists/rust-users". +if header :matches "List-Id" "*<*.*>*" { + set :lower "list" "${2}"; + fileinto :create "Lists/${list}"; + stop; +} + +# Capture a few details about the message with variables and wildcard +# matches. Variables first assigned inside a block only live in that block, +# so declare the ones used later at the top level. +set "domain" "unknown"; +set "subject" ""; +set "sender" "there"; +if address :domain :matches "from" "*" { + set :lower "domain" "${1}"; +} +if header :matches "Subject" "*" { + set "subject" "${1}"; +} +if header :matches "From" "* <*>" { + set "sender" "${1}"; +} + +# People in your address book are flagged as important. +if address :all :list "from" "addrbook:default" { + addflag "\\Flagged"; +} + +# Tag messages that carry a PDF anywhere in their MIME structure. +if header :mime :anychild :contenttype "Content-Type" "application/pdf" { + addflag "$HasPDF"; +} + +# Note when the message arrived outside office hours. +if anyof (currentdate :value "lt" :comparator "i;ascii-numeric" "hour" "08", + currentdate :value "ge" :comparator "i;ascii-numeric" "hour" "18") { + addheader "X-After-Hours" "yes"; +} + +# Stamp the message so you can see it went through the filter. +addheader :last "X-Sieve-Filter" "inbuxa Sieve playground"; + +# Append a footer to every plain text part. +foreverypart { + if header :mime :subtype "Content-Type" "plain" { + extracttext "body"; + replace text: +${body} +-- +Filtered on its way in by a Sieve script. +. +; + } +} + +# Let the sender know you are away, at most once a week per sender. +vacation :days 7 :subject "Away: ${subject}" text: +Hi ${sender}, + +Thanks for your message. I am out of the office this week and will +get back to you as soon as I return. + +-- +This reply was sent by a Sieve script. +. +; + +# Important mail stays in the inbox, the rest is sorted by domain. +if hasflag "\\Flagged" { + keep; +} else { + fileinto :create "Contacts/${domain}"; +} diff --git a/sieve-playground/settings.js b/sieve-playground/settings.js new file mode 100644 index 0000000..951c954 --- /dev/null +++ b/sieve-playground/settings.js @@ -0,0 +1,337 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +import { h } from "./result.js"; + +const list = (text) => text.split(/[,\n]/).map((s) => s.trim()).filter(Boolean); +const lines = (text) => text.split("\n").map((s) => s.trim()).filter((s) => s && !s.startsWith("#")); + +function pairs(text) { + return lines(text).map((line) => { + const index = line.indexOf("="); + return index < 0 ? { name: line, value: "" } : { name: line.slice(0, index).trim(), value: line.slice(index + 1).trim() }; + }); +} + +const USIZE_MAX = 4294967295; +const RANGES = { + spamScore: [0, 10], + virusScore: [0, 5], + maxMatchVariables: [0, 63], + defaultVacationExpiry: [0, Number.MAX_SAFE_INTEGER], + defaultDuplicateExpiry: [0, Number.MAX_SAFE_INTEGER], +}; +const NULLABLE_INTEGERS = new Set(["currentTime"]); +const SHAPES = { + mailboxes: { name: "string", specialUse: "strings" }, + lists: { name: "string", values: "strings" }, + environment: { name: "string", value: "string" }, + globalVariables: { name: "string", value: "string" }, + metadata: { mailbox: "string", annotation: "string", value: "string" }, +}; + +const toStrings = (value) => (Array.isArray(value) ? value.filter((item) => typeof item === "string") : []); + +function toInteger(value) { + const number = typeof value === "string" && value.trim() !== "" ? Number(value) : value; + return typeof number === "number" && Number.isFinite(number) ? Math.trunc(number) : null; +} + +function normalizeValue(key, value, fallback) { + if (NULLABLE_INTEGERS.has(key)) { + if (value === null || value === undefined || value === "") return null; + const number = toInteger(value); + return number === null ? fallback : Math.min(Math.max(number, -8640000000000), 8640000000000); + } + if (value === undefined) return structuredClone(fallback); + if (typeof fallback === "number") { + const number = toInteger(value); + if (number === null) return fallback; + const [min, max] = RANGES[key] || [0, USIZE_MAX]; + return Math.min(Math.max(number, min), max); + } + if (typeof fallback === "boolean") return typeof value === "boolean" ? value : fallback; + if (typeof fallback === "string") return typeof value === "string" ? value : fallback; + if (Array.isArray(fallback)) { + if (!Array.isArray(value)) return structuredClone(fallback); + const shape = SHAPES[key]; + if (!shape) return toStrings(value); + return value + .filter((item) => item && typeof item === "object" && !Array.isArray(item)) + .map((item) => Object.fromEntries(Object.entries(shape).map(([field, type]) => [field, type === "strings" ? toStrings(item[field]) : typeof item[field] === "string" ? item[field] : ""]))) + .filter((item) => Object.values(item).some((field) => (Array.isArray(field) ? field.length : field))); + } + return structuredClone(fallback); +} + +export function normalizeSettings(settings, defaults) { + const source = settings && typeof settings === "object" && !Array.isArray(settings) ? settings : {}; + return Object.fromEntries(Object.entries(defaults).map(([key, fallback]) => [key, normalizeValue(key, source[key], fallback)])); +} + +const FORMATS = { + text: { read: (v) => v ?? "", write: (v) => v }, + list: { read: (v) => (v || []).join(", "), write: list }, + number: { read: (v) => String(v ?? ""), write: (v) => Math.min(Math.max(Number.parseInt(v, 10) || 0, 0), USIZE_MAX) }, + bool: { read: (v) => !!v, write: (v) => !!v }, + pairs: { read: (v) => (v || []).map((p) => `${p.name ?? ""} = ${p.value ?? ""}`).join("\n"), write: pairs }, + mailboxes: { + read: (v) => (v || []).map((m) => [m.name ?? "", ...(m.specialUse || [])].join(" ")).join("\n"), + write: (text) => lines(text).map((line) => { + const parts = line.split(/\s+(?=\\)/); + return { name: parts[0], specialUse: parts.slice(1) }; + }), + }, + lists: { + read: (v) => (v || []).map((l) => `${l.name} = ${(l.values || []).join(", ")}`).join("\n"), + write: (text) => pairs(text).map((p) => ({ name: p.name, values: list(p.value) })), + }, + metadata: { + read: (v) => (v || []).map((m) => `${m.mailbox ? `${m.mailbox} ` : ""}${m.annotation} = ${m.value}`).join("\n"), + write: (text) => pairs(text).map((p) => { + const split = /^(.*\S)\s+(\/\S*)$/.exec(p.name); + return split ? { mailbox: split[1], annotation: split[2], value: p.value } : { mailbox: "", annotation: p.name, value: p.value }; + }), + }, + time: { + read: (v) => { + if (v === null || v === undefined) return ""; + const date = new Date(v * 1000); + return new Date(date.getTime() - date.getTimezoneOffset() * 60000).toISOString().slice(0, 16); + }, + write: (v) => (v ? Math.floor(new Date(v).getTime() / 1000) : null), + }, +}; + +const SPAM_LABELS = ["0: not scanned", "1: not spam", "2", "3", "4", "5: maybe spam", "6", "7", "8", "9", "10: definitely spam"]; +const VIRUS_LABELS = ["0: not scanned", "1: clean", "2: virus replaced", "3: virus cured", "4: possibly infected", "5: infected"]; + +const GROUPS = [ + { + title: "Identity and envelope", + sub: "who receives the message", + open: true, + fields: [ + { key: "userAddress", label: "User address", format: "text" }, + { key: "userFullName", label: "User full name", format: "text" }, + { row: [ + { key: "envelopeFrom", label: "Envelope from", format: "text", placeholder: "taken from the message" }, + { key: "envelopeTo", label: "Envelope to", format: "list", placeholder: "the user address" }, + ] }, + { row: [ + { key: "envelopeId", label: "Envelope id", format: "text" }, + { key: "localHostname", label: "Local hostname", format: "text" }, + ] }, + { key: "currentTime", label: "Current time", format: "time", type: "datetime-local", help: "Leave empty to use the real clock. Affects currentdate and Date headers." }, + ], + }, + { + title: "Mailboxes", + sub: "for fileinto, mailboxexists and special-use", + fields: [{ key: "mailboxes", label: "One mailbox per line, followed by its special-use attributes", format: "mailboxes", textarea: 7 }], + }, + { + title: "Spam and virus", + sub: "spamtest and virustest", + fields: [{ row: [ + { key: "spamScore", label: "Spam score", format: "number", options: SPAM_LABELS }, + { key: "virusScore", label: "Virus status", format: "number", options: VIRUS_LABELS }, + ] }], + }, + { + title: "Environment and variables", + sub: "environment, global variables, metadata", + fields: [ + { key: "environment", label: "Environment items (name = value)", format: "pairs", textarea: 6 }, + { key: "globalVariables", label: "Initial global variables (name = value)", format: "pairs", textarea: 3 }, + { key: "metadata", label: "Metadata: [mailbox] /annotation = value", format: "metadata", textarea: 3, help: "Without a mailbox the annotation is a server annotation." }, + ], + }, + { + title: "Lists and notifications", + sub: "extlists, enotify, vacation", + fields: [ + { key: "lists", label: "External lists (list = value, value)", format: "lists", textarea: 3 }, + { key: "validNotificationUris", label: "Allowed notification URI schemes", format: "list" }, + { row: [ + { key: "vacationDefaultSubject", label: "Default vacation subject", format: "text" }, + { key: "vacationSubjectPrefix", label: "Vacation subject prefix", format: "text" }, + ] }, + { row: [ + { key: "defaultVacationExpiry", label: "Default vacation period (s)", format: "number" }, + { key: "defaultDuplicateExpiry", label: "Default duplicate period (s)", format: "number" }, + ] }, + { key: "vacationUseOrigRcpt", label: "Vacation uses the original recipient", format: "bool" }, + { key: "protectedHeaders", label: "Protected headers (editheader cannot change them)", format: "list" }, + ], + }, + { title: "Extensions", sub: "capabilities allowed at run time", capabilities: true }, + { + title: "Runtime limits", + sub: "per run", + fields: [ + { row: [{ key: "cpuLimit", label: "Max instructions", format: "number" }] }, + { row: [{ key: "maxRedirects", label: "Max redirects", format: "number" }, { key: "maxOutMessages", label: "Max outgoing messages", format: "number" }] }, + { row: [{ key: "maxNestedIncludes", label: "Max nested includes", format: "number" }, { key: "maxVariableSize", label: "Max variable size", format: "number" }] }, + { row: [{ key: "maxHeaderSize", label: "Max header size", format: "number" }, { key: "maxReceivedHeaders", label: "Max Received headers", format: "number" }] }, + ], + }, + { + title: "Compiler limits", + sub: "applied when the script is compiled", + fields: [ + { row: [{ key: "maxScriptSize", label: "Max script size", format: "number" }, { key: "maxStringSize", label: "Max string size", format: "number" }] }, + { row: [{ key: "maxNestedBlocks", label: "Max nested blocks", format: "number" }, { key: "maxNestedTests", label: "Max nested tests", format: "number" }] }, + { row: [{ key: "maxNestedForeverypart", label: "Max nested foreverypart", format: "number" }, { key: "maxMatchVariables", label: "Max match variables", format: "number" }] }, + { row: [{ key: "maxLocalVariables", label: "Max local variables", format: "number" }, { key: "maxVariableNameSize", label: "Max variable name size", format: "number" }] }, + { row: [{ key: "maxIncludes", label: "Max includes", format: "number" }] }, + ], + }, +]; + +export class SettingsDrawer { + constructor({ drawer, backdrop, body, resetButton, jsonButton, defaults, capabilities, get, set }) { + Object.assign(this, { drawer, backdrop, body, resetButton, jsonButton, defaults, capabilities, get, set }); + this.jsonMode = false; + this.openGroups = new Set(GROUPS.filter((g) => g.open).map((g) => g.title)); + for (const el of drawer.querySelectorAll("[data-close]")) el.addEventListener("click", () => this.close()); + backdrop.addEventListener("click", () => this.close()); + drawer.addEventListener("keydown", (event) => { + if (event.key === "Escape") this.close(); + }); + resetButton.addEventListener("click", () => { + if (!confirm("Reset all settings of this workspace to their defaults?")) return; + this.set(structuredClone(this.defaults)); + this.render(); + }); + jsonButton.addEventListener("click", () => { + this.jsonMode = !this.jsonMode; + this.render(); + }); + } + + open() { + this.jsonMode = false; + this.render(); + this.drawer.hidden = false; + this.backdrop.hidden = false; + this.drawer.querySelector("input, textarea, select, button")?.focus(); + } + + close() { + if (this.jsonMode && !this.applyJson()) return; + this.drawer.hidden = true; + this.backdrop.hidden = true; + } + + update(key, value) { + this.set({ ...this.get(), [key]: value }); + } + + render() { + this.jsonButton.textContent = this.jsonMode ? "Back to form" : "Edit as JSON"; + if (this.jsonMode) { + const area = h("textarea", { class: "json-editor", spellcheck: "false", rows: 30, style: "min-height:60vh;margin-top:12px" }); + area.value = JSON.stringify(this.get(), null, 2); + const error = h("p", { class: "dialog-warning", hidden: true }); + area.addEventListener("change", () => this.applyJson()); + this.jsonArea = area; + this.jsonError = error; + this.body.replaceChildren(area, error); + return; + } + const settings = this.get(); + this.body.replaceChildren( + ...GROUPS.map((group) => { + const details = h("details", { class: "settings-group", open: this.openGroups.has(group.title) }, + h("summary", {}, group.title, h("span", { class: "item-sub" }, group.sub)), + h("div", { class: "settings-fields" }, group.capabilities ? this.capabilitiesField(settings) : group.fields.map((field) => this.field(field, settings))), + ); + details.addEventListener("toggle", () => { + if (details.open) this.openGroups.add(group.title); + else this.openGroups.delete(group.title); + }); + return details; + }), + ); + } + + applyJson() { + try { + const parsed = JSON.parse(this.jsonArea.value); + if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("Settings must be a JSON object"); + this.set(normalizeSettings({ ...this.defaults, ...parsed }, this.defaults)); + this.jsonError.hidden = true; + return true; + } catch (err) { + this.jsonError.textContent = `Invalid JSON: ${err.message}`; + this.jsonError.hidden = false; + return false; + } + } + + field(spec, settings) { + if (spec.row) return h("div", { class: "field-row" }, spec.row.map((item) => this.field(item, settings))); + const format = FORMATS[spec.format]; + const value = format.read(settings[spec.key]); + const id = `setting-${spec.key}`; + if (spec.format === "bool") { + const input = h("input", { type: "checkbox", id }); + input.checked = value; + input.addEventListener("change", () => this.update(spec.key, input.checked)); + return h("label", { class: "check" }, input, spec.label); + } + let input; + if (spec.options) { + input = h("select", { id }, spec.options.map((label, index) => h("option", { value: index }, label))); + input.value = value || "0"; + } else if (spec.textarea) { + input = h("textarea", { id, rows: spec.textarea, spellcheck: "false" }); + input.value = value; + } else { + input = h("input", { id, type: spec.type || (spec.format === "number" ? "number" : "text"), spellcheck: "false", autocomplete: "off", placeholder: spec.placeholder, min: spec.format === "number" ? 0 : undefined }); + input.value = value; + } + input.addEventListener("change", () => { + this.update(spec.key, format.write(input.value)); + input.value = format.read(this.get()[spec.key]); + }); + return h("label", { class: "field", for: id }, h("span", {}, spec.label), input, spec.help ? h("small", {}, spec.help) : null); + } + + capabilitiesField(settings) { + const enabled = new Set(settings.capabilities || []); + const boxes = this.capabilities.map((name) => { + const input = h("input", { type: "checkbox", value: name }); + input.checked = enabled.has(name); + input.addEventListener("change", () => { + const next = new Set(this.get().capabilities || []); + if (input.checked) next.add(name); + else next.delete(name); + this.update("capabilities", this.capabilities.filter((c) => next.has(c))); + }); + return h("label", { class: "check" }, input, name); + }); + const setAll = (on) => { + this.update("capabilities", on ? [...this.capabilities] : []); + this.render(); + }; + const noCheck = h("input", { type: "checkbox" }); + noCheck.checked = !!settings.noCapabilityCheck; + noCheck.addEventListener("change", () => this.update("noCapabilityCheck", noCheck.checked)); + return [ + h("div", { class: "caps-actions" }, + h("button", { type: "button", onclick: () => setAll(true) }, "Enable all"), + h("button", { type: "button", onclick: () => setAll(false) }, "Disable all"), + ), + h("div", { class: "caps" }, boxes), + h("label", { class: "check" }, noCheck, "Allow commands without a matching require (not portable)"), + ]; + } +} diff --git a/sieve-playground/share.js b/sieve-playground/share.js new file mode 100644 index 0000000..b25aece --- /dev/null +++ b/sieve-playground/share.js @@ -0,0 +1,94 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +const SHARE_PARAM = "w"; +const FORMAT = 1; +export const LONG_LINK = 8000; + +function toBase64Url(bytes) { + let binary = ""; + const chunk = 0x8000; + for (let i = 0; i < bytes.length; i += chunk) { + binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunk)); + } + return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, ""); +} + +function fromBase64Url(text) { + const base64 = text.replace(/-/g, "+").replace(/_/g, "/"); + const binary = atob(base64 + "===".slice((base64.length + 3) % 4)); + const bytes = new Uint8Array(binary.length); + for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i); + return bytes; +} + +async function pipe(bytes, stream) { + const response = new Response(new Blob([bytes]).stream().pipeThrough(stream)); + return new Uint8Array(await response.arrayBuffer()); +} + +export function settingsDiff(settings, defaults) { + const diff = {}; + for (const [key, value] of Object.entries(settings || {})) { + if (JSON.stringify(value) !== JSON.stringify(defaults[key])) diff[key] = value; + } + return diff; +} + +export function portable(workspace, defaults, { includeMessages = true } = {}) { + return { + v: FORMAT, + name: workspace.name, + scripts: workspace.scripts.map(({ name, source }) => ({ name, source })), + messages: includeMessages ? workspace.messages.map(({ name, source }) => ({ name, source })) : [], + settings: settingsDiff(workspace.settings, defaults), + }; +} + +export async function encodeShareUrl(data) { + const json = new TextEncoder().encode(JSON.stringify(data)); + const packed = await pipe(json, new CompressionStream("deflate-raw")); + const url = new URL(location.href); + url.search = ""; + url.hash = `${SHARE_PARAM}=${toBase64Url(packed)}`; + return url.href; +} + +export function hasSharedWorkspace() { + return new URLSearchParams(location.hash.slice(1)).has(SHARE_PARAM); +} + +export async function decodeSharedWorkspace() { + const value = new URLSearchParams(location.hash.slice(1)).get(SHARE_PARAM); + if (!value) return null; + const json = await pipe(fromBase64Url(value), new DecompressionStream("deflate-raw")); + return validatePortable(JSON.parse(new TextDecoder().decode(json))); +} + +export function clearShareHash() { + history.replaceState(null, "", location.pathname + location.search); +} + +export function validatePortable(data) { + if (!data || typeof data !== "object" || !Array.isArray(data.scripts)) { + throw new Error("This is not a Sieve playground workspace."); + } + const clean = (items) => + (Array.isArray(items) ? items : []) + .filter((item) => item && typeof item.source === "string") + .map((item, index) => ({ name: String(item.name || `item-${index + 1}`).slice(0, 80), source: item.source })); + const scripts = clean(data.scripts); + if (scripts.length === 0) throw new Error("The workspace has no scripts."); + return { + name: String(data.name || "Shared workspace").slice(0, 80), + scripts, + messages: clean(data.messages), + settings: data.settings && typeof data.settings === "object" ? data.settings : {}, + }; +} diff --git a/sieve-playground/sieve-docs.js b/sieve-playground/sieve-docs.js new file mode 100644 index 0000000..0651bca --- /dev/null +++ b/sieve-playground/sieve-docs.js @@ -0,0 +1,173 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +const RFC = (n, section) => `https://www.rfc-editor.org/rfc/rfc${n}${section ? `#section-${section}` : ""}`; + +export const CONTROL = { + require: { sig: "require ", doc: "Declares the extensions the script uses. Every extension must be required before its commands, tests or tags appear.", rfc: RFC(5228, "3.2") }, + if: { sig: "if ", doc: "Runs the block when the test is true. Can be followed by `elsif` and `else`.", rfc: RFC(5228, "3.1") }, + elsif: { sig: "elsif ", doc: "Runs the block when all previous tests in the chain were false and this test is true.", rfc: RFC(5228, "3.1") }, + else: { sig: "else ", doc: "Runs the block when every previous test in the chain was false.", rfc: RFC(5228, "3.1") }, + stop: { sig: "stop", doc: "Ends the script. The implicit keep still applies unless another action cancelled it.", rfc: RFC(5228, "3.3") }, + include: { sig: 'include [:personal / :global] [:once] [:optional] ', doc: "Runs another script. In the playground, add a script tab with that name.", rfc: RFC(6609, "3.2"), capability: "include" }, + return: { sig: "return", doc: "Stops the current included script and continues in the script that included it.", rfc: RFC(6609, "3.3"), capability: "include" }, + global: { sig: "global ", doc: "Shares variables between the including and included scripts.", rfc: RFC(6609, "3.4"), capability: "include" }, + foreverypart: { sig: "foreverypart [:name ] ", doc: "Runs the block once for each MIME part of the message. Tests with `:mime` and commands such as `replace` act on the current part.", rfc: RFC(5703, "3"), capability: "foreverypart" }, + break: { sig: "break [:name ]", doc: "Leaves the innermost (or the named) `foreverypart` or `while` loop.", rfc: RFC(5703, "3"), capability: "foreverypart" }, + while: { sig: "while ", doc: "inbuxa extension. Repeats the block while the expression is true. Bounded by the CPU limit.", capability: "vnd.inbuxa.while" }, + continue: { sig: "continue", doc: "inbuxa extension. Skips to the next iteration of the enclosing loop.", capability: "vnd.inbuxa.while" }, +}; + +export const ACTIONS = { + keep: { sig: "keep [:flags ]", doc: "Files the message into the default mailbox (INBOX). This is what happens implicitly when no other action cancels it.", rfc: RFC(5228, "4.3") }, + discard: { sig: "discard", doc: "Silently throws the message away and cancels the implicit keep.", rfc: RFC(5228, "4.4") }, + fileinto: { sig: "fileinto [:copy] [:flags ] [:create] [:specialuse ] [:mailboxid ] ", doc: "Delivers the message into a mailbox and cancels the implicit keep (unless `:copy`).", rfc: RFC(5228, "4.1"), capability: "fileinto" }, + redirect: { sig: "redirect [:copy] [:notify ] [:ret ] [:bytimerelative / :bytimeabsolute ] ", doc: "Forwards the message to another address and cancels the implicit keep (unless `:copy`). Limited by the maximum redirects setting.", rfc: RFC(5228, "4.2") }, + reject: { sig: "reject ", doc: "Refuses the message and sends the reason back to the sender.", rfc: RFC(5429, "2.2"), capability: "reject" }, + ereject: { sig: "ereject ", doc: "Refuses the message at the SMTP level when possible.", rfc: RFC(5429, "2.1"), capability: "ereject" }, + vacation: { sig: "vacation [:days / :seconds ] [:subject ] [:from ] [:addresses ] [:mime] [:handle ] ", doc: "Sends an automatic reply, at most once per sender in the given period. Tracked with duplicate ids: try Run again.", rfc: RFC(5230, "4"), capability: "vacation" }, + notify: { sig: "notify [:from ] [:importance <1|2|3>] [:options ] [:message ] ", doc: "Sends a notification, for example to a `mailto:` URI.", rfc: RFC(5435, "3"), capability: "enotify" }, + set: { sig: "set [:lower / :upper / :lowerfirst / :upperfirst / :quotewildcard / :quoteregex / :encodeurl / :length] ", doc: "Stores a value in a variable. Use `${name}` to read it back inside strings.", rfc: RFC(5229, "4"), capability: "variables" }, + setflag: { sig: "setflag [] ", doc: "Replaces the flags that will be stored with the message.", rfc: RFC(5232, "3.1"), capability: "imap4flags" }, + addflag: { sig: "addflag [] ", doc: "Adds flags that will be stored with the message, such as `\\Seen` or `\\Flagged`.", rfc: RFC(5232, "3.2"), capability: "imap4flags" }, + removeflag: { sig: "removeflag [] ", doc: "Removes flags from the set stored with the message.", rfc: RFC(5232, "3.3"), capability: "imap4flags" }, + addheader: { sig: "addheader [:last] ", doc: "Adds a header field, at the top unless `:last` is given.", rfc: RFC(5293, "4"), capability: "editheader" }, + deleteheader: { sig: 'deleteheader [:index [:last]] [] [] []', doc: "Removes header fields, optionally only those matching the values.", rfc: RFC(5293, "5"), capability: "editheader" }, + replace: { sig: "replace [:mime] [:subject ] [:from ] ", doc: "Replaces the message body, or the current part inside `foreverypart`.", rfc: RFC(5703, "5"), capability: "replace" }, + enclose: { sig: "enclose [:subject ] [:headers ] ", doc: "Wraps the original message as an attachment of a new message.", rfc: RFC(5703, "6"), capability: "enclose" }, + extracttext: { sig: "extracttext [:first ] [] ", doc: "Stores the text of the current MIME part in a variable. Only valid inside `foreverypart`.", rfc: RFC(5703, "7"), capability: "extracttext" }, + convert: { sig: "convert ", doc: "Converts MIME parts from one media type to another.", rfc: RFC(6558, "3"), capability: "convert" }, + error: { sig: "error ", doc: "Aborts the script with an error. The implicit keep applies.", rfc: RFC(5463, "5"), capability: "ihave" }, + let: { sig: "let ", doc: "inbuxa extension. Evaluates an expression and stores the result, for example `let \"n\" \"len(header.subject) * 2\"`.", capability: "vnd.inbuxa.expressions" }, +}; + +export const TESTS = { + address: { sig: "address [] [] [] [:index [:last]] ", doc: "Compares addresses in header fields such as From or To. Address parts: `:all`, `:localpart`, `:domain`, `:user`, `:detail`.", rfc: RFC(5228, "5.1") }, + allof: { sig: "allof ()", doc: "True when every test in the list is true.", rfc: RFC(5228, "5.2") }, + anyof: { sig: "anyof ()", doc: "True when at least one test in the list is true.", rfc: RFC(5228, "5.3") }, + envelope: { sig: "envelope [] [] [] ", doc: "Compares the SMTP envelope. Set the envelope below the message.", rfc: RFC(5228, "5.4"), capability: "envelope" }, + exists: { sig: "exists ", doc: "True when every listed header field is present.", rfc: RFC(5228, "5.5") }, + false: { sig: "false", doc: "Always false.", rfc: RFC(5228, "5.6") }, + header: { sig: "header [:mime] [] [] [:index [:last]] ", doc: "Compares header field values. With `:mime` it looks at MIME part headers.", rfc: RFC(5228, "5.7") }, + not: { sig: "not ", doc: "Inverts a test.", rfc: RFC(5228, "5.8") }, + size: { sig: "size <:over / :under> ", doc: "Compares the message size. Numbers accept K, M and G suffixes.", rfc: RFC(5228, "5.9") }, + true: { sig: "true", doc: "Always true.", rfc: RFC(5228, "5.10") }, + body: { sig: "body [] [] [:raw / :content / :text] ", doc: "Compares the message body.", rfc: RFC(5173, "4"), capability: "body" }, + currentdate: { sig: "currentdate [:zone ] [] [] ", doc: "Compares the current date. Date parts include `year`, `month`, `day`, `date`, `hour`, `weekday`, `iso8601`. The clock can be fixed in Settings.", rfc: RFC(5260, "5"), capability: "date" }, + date: { sig: "date [:zone / :originalzone] [] []
", doc: "Compares a date taken from a header field.", rfc: RFC(5260, "4"), capability: "date" }, + duplicate: { sig: "duplicate [:handle ] [:header / :uniqueid ] [:seconds ] [:last]", doc: "True when the same message (by Message-ID or the given id) was seen before. Use Run again to simulate a redelivery.", rfc: RFC(7352, "3"), capability: "duplicate" }, + environment: { sig: "environment [] [] ", doc: "Compares environment items such as `domain`, `host`, `phase` or `remote-ip`. Configure them in Settings.", rfc: RFC(5183, "4"), capability: "environment" }, + hasflag: { sig: "hasflag [] [] [] ", doc: "Tests the flags set by the script so far.", rfc: RFC(5232, "4"), capability: "imap4flags" }, + ihave: { sig: "ihave ", doc: "True when the listed extensions are available.", rfc: RFC(5463, "4"), capability: "ihave" }, + mailboxexists: { sig: "mailboxexists ", doc: "True when every mailbox exists. Mailboxes are listed in Settings.", rfc: RFC(5490, "3.1"), capability: "mailbox" }, + mailboxidexists: { sig: "mailboxidexists ", doc: "True when every mailbox id exists.", rfc: RFC(9042, "4.2"), capability: "mailboxid" }, + metadata: { sig: "metadata [] [] ", doc: "Compares a mailbox annotation.", rfc: RFC(5490, "3.2"), capability: "mboxmetadata" }, + metadataexists: { sig: "metadataexists ", doc: "True when the mailbox has the annotations.", rfc: RFC(5490, "3.3"), capability: "mboxmetadata" }, + servermetadata: { sig: "servermetadata [] [] ", doc: "Compares a server annotation. Configure annotations in Settings.", rfc: RFC(5490, "3.4"), capability: "servermetadata" }, + servermetadataexists: { sig: "servermetadataexists ", doc: "True when the server has the annotations.", rfc: RFC(5490, "3.5"), capability: "servermetadata" }, + spamtest: { sig: "spamtest [:percent] [] [] ", doc: "Compares the spam score (0 to 10, or a percentage with `:percent`). Set the score in Settings.", rfc: RFC(5235, "3.2"), capability: "spamtest" }, + virustest: { sig: "virustest [] [] ", doc: "Compares the virus status (0 unknown, 1 clean, 5 infected). Set it in Settings.", rfc: RFC(5235, "3.3"), capability: "virustest" }, + specialuse_exists: { sig: "specialuse_exists [] ", doc: "True when a mailbox with the special-use attributes exists.", rfc: RFC(8579, "3"), capability: "special-use" }, + string: { sig: "string [] [] ", doc: "Compares arbitrary strings, usually containing variables.", rfc: RFC(5229, "5"), capability: "variables" }, + valid_notify_method: { sig: "valid_notify_method ", doc: "True when the notification URIs are valid. Allowed schemes are configured in Settings.", rfc: RFC(5435, "5"), capability: "enotify" }, + notify_method_capability: { sig: "notify_method_capability [] [] ", doc: "Queries a capability of a notification method.", rfc: RFC(5435, "6"), capability: "enotify" }, + valid_ext_list: { sig: "valid_ext_list ", doc: "True when the external lists exist. Lists are configured in Settings.", rfc: RFC(6134, "2.6"), capability: "extlists" }, + eval: { sig: "eval ", doc: "inbuxa extension. True when the expression evaluates to a non-zero, non-empty value.", capability: "vnd.inbuxa.expressions" }, +}; + +export const TAGS = { + is: "Exact match.", + contains: "Substring match.", + matches: "Wildcard match: `*` matches any sequence, `?` one character. Captures go to `${1}`, `${2}`...", + regex: "Regular expression match. Captures go to `${1}`, `${2}`... Requires \"regex\".", + value: "Relational comparison: \"gt\", \"ge\", \"lt\", \"le\", \"eq\" or \"ne\". Requires \"relational\".", + count: "Compares the number of values. Requires \"relational\".", + list: "Matches against an external list, such as \"addrbook:default\". Requires \"extlists\".", + comparator: "Sets the comparator: \"i;ascii-casemap\" (default), \"i;octet\" or \"i;ascii-numeric\".", + all: "Compares the whole address.", + localpart: "Compares the part before the @.", + domain: "Compares the part after the @.", + user: "Compares the user part of a subaddress (before +). Requires \"subaddress\".", + detail: "Compares the detail part of a subaddress (after +). Requires \"subaddress\".", + over: "True when the size is larger than the limit.", + under: "True when the size is smaller than the limit.", + copy: "Keeps the implicit keep in place. Requires \"copy\".", + flags: "Flags to store with the message. Requires \"imap4flags\".", + create: "Creates the mailbox if it does not exist. Requires \"mailbox\".", + specialuse: "Selects the mailbox by its special use, such as \"\\\\Junk\". Requires \"special-use\".", + mailboxid: "Selects the mailbox by id. Requires \"mailboxid\".", + days: "Minimum days between replies to the same sender.", + seconds: "Minimum seconds between replies or duplicates.", + subject: "Subject of the generated message.", + from: "From address of the generated message.", + addresses: "Your own addresses, so the reply is not sent to yourself.", + handle: "Name used to track replies or duplicates independently.", + mime: "For tests: look at MIME part headers. For vacation and replace: the text is a full MIME entity.", + anychild: "With `:mime`, look at every child part.", + type: "With `:mime`, compare only the media type.", + subtype: "With `:mime`, compare only the media subtype.", + contenttype: "With `:mime`, compare type/subtype.", + param: "With `:mime`, compare Content-Type parameters.", + index: "Selects the nth occurrence of a header field. Requires \"index\".", + last: "Counts `:index` from the end.", + lower: "Lowercases the value.", + upper: "Uppercases the value.", + lowerfirst: "Lowercases the first character.", + upperfirst: "Uppercases the first character.", + quotewildcard: "Escapes `*`, `?` and `\\` for use in :matches.", + quoteregex: "Escapes regex special characters.", + encodeurl: "Percent-encodes the value.", + length: "Replaces the value with its length.", + percent: "Uses the percentage spam score. Requires \"spamtestplus\".", + zone: "Time zone offset such as \"+0100\".", + originalzone: "Keeps the time zone from the header.", + raw: "Compares the raw body.", + content: "Compares body parts of the given media types.", + text: "Compares the decoded text body.", + importance: "\"1\" high, \"2\" normal, \"3\" low.", + message: "Notification text.", + options: "Method-specific notification options.", + personal: "Includes a personal script.", + global: "Includes a global script.", + once: "Includes the script only once.", + optional: "Does not fail when the script is missing.", + notify: "DSN notification: \"never\" or a list of \"success\", \"failure\", \"delay\". Requires \"redirect-dsn\".", + ret: "DSN return of content: \"full\" or \"hdrs\". Requires \"redirect-dsn\".", + bytimerelative: "Deliver-by time in seconds. Requires \"redirect-deliverby\".", + bytimeabsolute: "Deliver-by date. Requires \"redirect-deliverby\".", + bymode: "\"notify\" or \"return\" when the deliver-by time passes.", + bytrace: "Requests deliver-by trace information.", + uniqueid: "Custom id for the duplicate test.", + header: "Header field used as the duplicate id.", + first: "Maximum number of characters to extract.", + name: "Names a foreverypart loop.", + fcc: "Stores a copy of the generated message in a mailbox. Requires \"fcc\".", +}; + +export const DATE_PARTS = ["year", "month", "day", "date", "julian", "hour", "minute", "second", "time", "iso8601", "std11", "zone", "weekday"]; + +export const ENVIRONMENT_ITEMS = ["domain", "host", "location", "name", "phase", "remote-host", "remote-ip", "version"]; + +export const FUNCTIONS = { + trim: 1, trim_start: 1, trim_end: 1, len: 1, count: 1, is_empty: 1, is_number: 1, is_ascii: 1, + to_lowercase: 1, to_uppercase: 1, is_email: 1, thread_name: 1, html_to_text: 1, is_uppercase: 1, + is_lowercase: 1, has_digits: 1, count_spaces: 1, count_uppercase: 1, count_lowercase: 1, + count_chars: 1, dedup: 1, lines: 1, is_ip_addr: 1, is_ipv4_addr: 1, is_ipv6_addr: 1, winnow: 1, + sort: 2, email_part: 2, eq_ignore_case: 2, contains: 2, contains_ignore_case: 2, starts_with: 2, + ends_with: 2, uri_part: 2, split: 2, rsplit: 2, split_once: 2, rsplit_once: 2, strip_prefix: 2, + strip_suffix: 2, is_intersect: 2, substring: 3, split_n: 3, llm_prompt: 3, +}; + +export function lookup(word) { + const key = word.toLowerCase(); + if (CONTROL[key]) return { kind: "control", ...CONTROL[key] }; + if (ACTIONS[key]) return { kind: "action", ...ACTIONS[key] }; + if (TESTS[key]) return { kind: "test", ...TESTS[key] }; + return null; +} diff --git a/sieve-playground/sieve-language.js b/sieve-playground/sieve-language.js new file mode 100644 index 0000000..6141bc4 --- /dev/null +++ b/sieve-playground/sieve-language.js @@ -0,0 +1,384 @@ +/* + * SPDX-FileCopyrightText: 2020 Stalwart Labs LLC + * SPDX-FileCopyrightText: 2026 Coffey Labs LLC + * + * SPDX-License-Identifier: AGPL-3.0-only + * + * Modified by Coffey Labs in 2026 for INBUXA. + */ + +import { ACTIONS, CONTROL, DATE_PARTS, ENVIRONMENT_ITEMS, FUNCTIONS, TAGS, TESTS, lookup } from "./sieve-docs.js"; + +export const LANGUAGE_ID = "sieve"; + +const CAPABILITY_ERROR = /Undeclared capability '([^']+)'/; + +function monarch() { + return { + ignoreCase: true, + defaultToken: "", + keywords: [...Object.keys(CONTROL), ...Object.keys(ACTIONS), "foreach"], + tests: Object.keys(TESTS), + tokenizer: { + root: [ + [/#.*$/, "comment"], + [/\/\*/, "comment", "@comment"], + [/text:/, { token: "string.heredoc", next: "@heredoc" }], + [/"/, { token: "string.quote", next: "@string" }], + [/:[A-Za-z_][A-Za-z0-9_-]*/, "attribute.name"], + [/\d+[KMGkmg]?\b/, "number"], + [/[A-Za-z_][A-Za-z0-9_.-]*/, { cases: { "@keywords": "keyword", "@tests": "type", "@default": "identifier" } }], + [/[{}()[\]]/, "@brackets"], + [/[;,]/, "delimiter"], + [/\s+/, "white"], + ], + comment: [ + [/[^/*]+/, "comment"], + [/\*\//, "comment", "@pop"], + [/[/*]/, "comment"], + ], + string: [ + [/\$\{[^}"]*\}/, "variable"], + [/[^"\\$]+/, "string"], + [/\\./, "string.escape"], + [/\$/, "string"], + [/"/, { token: "string.quote", next: "@pop" }], + ], + heredoc: [ + [/\.\s*$/, { token: "string.heredoc", next: "@pop" }], + [/.*$/, "string"], + ], + }, + }; +} + +const configuration = { + comments: { lineComment: "#", blockComment: ["/*", "*/"] }, + brackets: [["{", "}"], ["[", "]"], ["(", ")"]], + autoClosingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"', notIn: ["string", "comment"] }, + { open: "/*", close: " */", notIn: ["string"] }, + ], + surroundingPairs: [ + { open: "{", close: "}" }, + { open: "[", close: "]" }, + { open: "(", close: ")" }, + { open: '"', close: '"' }, + ], + indentationRules: { + increaseIndentPattern: /\{[^}"]*$/, + decreaseIndentPattern: /^\s*\}/, + }, + folding: { markers: { start: /\{\s*$/, end: /^\s*\}/ } }, + wordPattern: /(-?\d*\.\d\w*)|([^\s`~!@#%^&*()=+[{\]}\\|;:'",<>/?]+)/g, +}; + +function docMarkdown(word, entry) { + const parts = [`\`\`\`sieve\n${entry.sig}\n\`\`\``, entry.doc]; + const links = []; + if (entry.capability) links.push(`Requires \`"${entry.capability}"\``); + if (entry.rfc) links.push(`[Specification](${entry.rfc})`); + if (links.length) parts.push(links.join(" · ")); + return parts.join("\n\n"); +} + +const isComment = (mode) => mode === "lineComment" || mode === "blockComment"; + +export class SieveScanner { + constructor() { + this.mode = "code"; + this.statement = ""; + this.variableOpen = false; + } + + feedLine(line, hasNewline = true) { + const startMode = this.mode; + let opens = 0; + let closes = 0; + + if (this.mode === "heredoc" && /^\.\s*$/.test(line)) { + this.mode = "code"; + this.variableOpen = false; + this.statement += line; + } else { + for (let i = 0; i < line.length; i++) { + const ch = line[i]; + const start = i; + const mode = this.mode; + switch (this.mode) { + case "code": + if (ch === '"') { + this.mode = "string"; + this.variableOpen = false; + } else if (ch === "#") { + this.mode = "lineComment"; + } else if (ch === "/" && line[i + 1] === "*") { + this.mode = "blockComment"; + i++; + } else if (ch === ";" || ch === "{" || ch === "}") { + this.statement = ""; + if (ch === "{") opens++; + if (ch === "}") closes++; + continue; + } else if ((ch === "t" || ch === "T") && line.slice(i, i + 5).toLowerCase() === "text:" && !/[A-Za-z0-9_]/.test(line[i - 1] || "")) { + this.mode = "heredocHeader"; + i += 4; + } + break; + case "string": + case "heredoc": + if (ch === "\\" && this.mode === "string") { + i++; + } else if (ch === '"' && this.mode === "string") { + this.mode = "code"; + this.variableOpen = false; + } else if (ch === "$" && line[i + 1] === "{") { + this.variableOpen = true; + i++; + } else if (ch === "}") { + this.variableOpen = false; + } + break; + case "blockComment": + if (ch === "*" && line[i + 1] === "/") { + this.mode = "code"; + i++; + } + break; + default: + break; + } + if (!isComment(mode) && !isComment(this.mode)) this.statement += line.slice(start, i + 1); + } + if (hasNewline) { + if (!isComment(this.mode)) this.statement += "\n"; + if (this.mode === "lineComment") this.mode = "code"; + if (this.mode === "heredocHeader") this.mode = "heredoc"; + } + } + + return { startMode, opens, closes }; + } +} + +function context(model, position) { + const before = model.getValueInRange({ startLineNumber: 1, startColumn: 1, endLineNumber: position.lineNumber, endColumn: position.column }); + const lines = before.split("\n"); + const scanner = new SieveScanner(); + lines.forEach((line, index) => scanner.feedLine(line, index < lines.length - 1)); + const mode = isComment(scanner.mode) ? "comment" : scanner.mode; + const statement = scanner.statement; + const inString = mode === "string" || mode === "heredoc"; + const command = (statement.match(/^\s*([A-Za-z_]+)/) || [])[1]?.toLowerCase() || ""; + const line = model.getLineContent(position.lineNumber).slice(0, position.column - 1); + return { statement, inString, inComment: mode === "comment", inVariable: inString && scanner.variableOpen, command, line }; +} + +function variableNames(model) { + const names = new Set(); + const pattern = /\b(?:set|let|global|extracttext)\s+(?::[A-Za-z]+\s+(?:\d+\s+)?)*(\[[^\]]*\]|"[^"]*")/gi; + for (const match of model.getValue().matchAll(pattern)) { + for (const name of match[1].matchAll(/"([^"]+)"/g)) names.add(name[1]); + } + return [...names]; +} + +function replaceRange(model, position) { + const word = model.getWordUntilPosition(position); + return { + startLineNumber: position.lineNumber, + endLineNumber: position.lineNumber, + startColumn: word.startColumn, + endColumn: word.endColumn, + }; +} + +export function registerSieve(monaco, getSettings) { + monaco.languages.register({ id: LANGUAGE_ID, extensions: [".sieve", ".siv"], aliases: ["Sieve"] }); + monaco.languages.setMonarchTokensProvider(LANGUAGE_ID, monarch()); + monaco.languages.setLanguageConfiguration(LANGUAGE_ID, configuration); + + const { CompletionItemKind: Kind, CompletionItemInsertTextRule: Rule } = monaco.languages; + + monaco.languages.registerCompletionItemProvider(LANGUAGE_ID, { + triggerCharacters: [":", '"', "$", "{"], + provideCompletionItems(model, position, completionContext) { + const ctx = context(model, position); + const range = replaceRange(model, position); + const settings = getSettings(); + const items = []; + + if (ctx.inComment) return { suggestions: [] }; + if (ctx.inVariable) { + for (const name of variableNames(model)) items.push({ label: name, kind: Kind.Variable, insertText: name, range }); + return { suggestions: items }; + } + const trigger = completionContext?.triggerCharacter; + if ((trigger === "$" || trigger === "{") || (trigger === '"' && !ctx.inString)) return { suggestions: [] }; + + if (ctx.inString) { + if (ctx.command === "require" || /\bihave\b/.test(ctx.statement)) { + for (const capability of settings.capabilities || []) { + items.push({ label: capability, kind: Kind.Module, insertText: capability, range }); + } + } else if (/^\s*(fileinto|mailboxexists)\b/.test(ctx.statement) && !/:(flags|specialuse|mailboxid)\s+"[^"]*$/.test(ctx.statement)) { + for (const mailbox of settings.mailboxes || []) { + items.push({ label: mailbox.name, kind: Kind.Folder, insertText: mailbox.name, detail: mailbox.specialUse?.join(" "), range }); + } + } else if (/\benvironment\b/.test(ctx.statement)) { + const names = new Set([...ENVIRONMENT_ITEMS, ...(settings.environment || []).map((item) => item.name)]); + for (const name of names) items.push({ label: name, kind: Kind.Constant, insertText: name, range }); + } else if (/\b(currentdate|date)\b/.test(ctx.statement)) { + for (const part of DATE_PARTS) items.push({ label: part, kind: Kind.EnumMember, insertText: part, range }); + } else if (/\b(let|eval|while)\b/.test(ctx.statement)) { + for (const [name, arity] of Object.entries(FUNCTIONS)) { + const args = Array.from({ length: arity }, (_, i) => `\${${i + 1}}`).join(", "); + items.push({ label: name, kind: Kind.Function, detail: `${arity} argument${arity === 1 ? "" : "s"}`, insertText: `${name}(${args})`, insertTextRules: Rule.InsertAsSnippet, range }); + } + for (const name of ["header.subject", "header.from.addr", "header.from.name", "header.to[*].addr[*]", "envelope.from", "envelope.to", "env.remote_ip"]) { + items.push({ label: name, kind: Kind.Variable, insertText: name, range }); + } + } else if (/\b(addflag|setflag|removeflag|hasflag)\b|:flags\s+/.test(ctx.statement)) { + for (const flag of ["\\\\Seen", "\\\\Flagged", "\\\\Answered", "\\\\Deleted", "\\\\Draft", "$Junk", "$NotJunk"]) { + items.push({ label: flag, kind: Kind.EnumMember, insertText: flag, range }); + } + } + return { suggestions: items }; + } + + if (trigger === ":" && !/:[A-Za-z_-]*$/.test(ctx.line)) return { suggestions: [] }; + if (/:[A-Za-z_-]*$/.test(ctx.line)) { + for (const [tag, doc] of Object.entries(TAGS)) { + items.push({ label: `:${tag}`, kind: Kind.Property, insertText: tag, documentation: { value: doc }, range }); + } + return { suggestions: items }; + } + + const snippets = { + if: "if ${1:header :contains \"Subject\" \"${2:text}\"} {\n\t$0\n}", + require: "require [\"${1:fileinto}\"];", + fileinto: "fileinto \"${1:INBOX}\";", + redirect: "redirect \"${1:user@example.org}\";", + vacation: "vacation :days ${1:7} :subject \"${2:Out of office}\" text:\n${3:I am away.}\n.\n;", + foreverypart: "foreverypart {\n\t$0\n}", + while: "while \"${1:i < 10}\" {\n\t$0\n}", + set: "set \"${1:name}\" \"${2:value}\";", + let: "let \"${1:name}\" \"${2:expression}\";", + }; + for (const [group, kind] of [[CONTROL, Kind.Keyword], [ACTIONS, Kind.Function], [TESTS, Kind.Interface]]) { + for (const [name, entry] of Object.entries(group)) { + items.push({ + label: name, + kind, + detail: entry.sig, + documentation: { value: docMarkdown(name, entry) }, + insertText: snippets[name] || name, + insertTextRules: snippets[name] ? Rule.InsertAsSnippet : undefined, + range, + }); + } + } + return { suggestions: items }; + }, + }); + + monaco.languages.registerHoverProvider(LANGUAGE_ID, { + provideHover(model, position) { + const word = model.getWordAtPosition(position); + if (!word) return null; + const line = model.getLineContent(position.lineNumber); + const range = new monaco.Range(position.lineNumber, word.startColumn, position.lineNumber, word.endColumn); + if (line[word.startColumn - 2] === ":") { + const doc = TAGS[word.word.toLowerCase()]; + if (!doc) return null; + return { range, contents: [{ value: `**:${word.word}**` }, { value: doc }] }; + } + const token = monaco.editor.tokenize(line, LANGUAGE_ID)[0]?.filter((t) => t.offset <= word.startColumn - 1).pop(); + if (token && /string|comment/.test(token.type)) return null; + const entry = lookup(word.word); + if (!entry) return null; + return { range, contents: [{ value: docMarkdown(word.word, entry) }] }; + }, + }); + + monaco.languages.registerCodeActionProvider(LANGUAGE_ID, { + provideCodeActions(model, _range, ctx) { + const actions = []; + for (const marker of ctx.markers) { + const match = CAPABILITY_ERROR.exec(marker.message); + if (!match) continue; + const edit = requireEdit(monaco, model, match[1]); + if (!edit) continue; + actions.push({ + title: `Add "${match[1]}" to require`, + kind: "quickfix", + diagnostics: [marker], + isPreferred: true, + edit: { edits: [{ resource: model.uri, textEdit: edit, versionId: model.getVersionId() }] }, + }); + } + return { actions, dispose() {} }; + }, + }); + + monaco.languages.registerDocumentFormattingEditProvider(LANGUAGE_ID, { + provideDocumentFormattingEdits(model, options) { + const unit = options.insertSpaces ? " ".repeat(options.tabSize) : "\t"; + const scanner = new SieveScanner(); + let depth = 0; + const lines = model.getLinesContent().map((raw) => { + const trimmed = raw.trim(); + const leadingCloses = scanner.mode === "code" ? (trimmed.match(/^\}+/) || [""])[0].length : 0; + const { startMode, opens, closes } = scanner.feedLine(raw); + if (startMode !== "code") return raw; + const indent = Math.max(0, depth - leadingCloses); + depth = Math.max(0, depth + opens - closes); + return trimmed === "" ? "" : unit.repeat(indent) + trimmed; + }); + return [{ range: model.getFullModelRange(), text: lines.join(model.getEOL()) }]; + }, + }); +} + +export function requireEdit(monaco, model, capability) { + const text = model.getValue(); + const quoted = `"${capability}"`; + const listMatch = /require\s*\[([^\]]*)\]\s*;/i.exec(text); + if (listMatch) { + const closeOffset = listMatch.index + listMatch[0].lastIndexOf("]"); + const inner = listMatch[1].trim(); + const pos = model.getPositionAt(closeOffset); + return { range: new monaco.Range(pos.lineNumber, pos.column, pos.lineNumber, pos.column), text: inner ? `, ${quoted}` : quoted }; + } + const singleMatch = /require\s*("[^"]*")\s*;/i.exec(text); + if (singleMatch) { + const start = model.getPositionAt(singleMatch.index); + const end = model.getPositionAt(singleMatch.index + singleMatch[0].length); + return { range: new monaco.Range(start.lineNumber, start.column, end.lineNumber, end.column), text: `require [${singleMatch[1]}, ${quoted}];` }; + } + let line = 1; + const lines = model.getLinesContent(); + while (line <= lines.length && /^\s*(#.*)?$/.test(lines[line - 1])) line++; + return { range: new monaco.Range(line, 1, line, 1), text: `require [${quoted}];\n\n` }; +} + +export function markersFor(monaco, model, diagnostics) { + return diagnostics.map((diagnostic) => { + const known = diagnostic.line > 0 && diagnostic.line <= model.getLineCount(); + const line = known ? diagnostic.line : 1; + const maxColumn = model.getLineMaxColumn(line); + const startColumn = known ? Math.min(Math.max(diagnostic.column, 1), maxColumn) : 1; + return { + severity: diagnostic.severity === "warning" ? monaco.MarkerSeverity.Warning : monaco.MarkerSeverity.Error, + message: known ? diagnostic.message : `${diagnostic.message} (position unknown)`, + startLineNumber: line, + endLineNumber: line, + startColumn: startColumn === maxColumn ? Math.max(1, startColumn - 1) : startColumn, + endColumn: maxColumn, + source: "sieve", + }; + }); +} diff --git a/sieve-playground/sieve_playground.wasm b/sieve-playground/sieve_playground.wasm new file mode 100755 index 0000000000000000000000000000000000000000..0a11cf06061971e9a1b3d9f3f7c9233b6be25fca GIT binary patch literal 2902073 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ξ>7I}uk^5B#(WkTtz^G<*? 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�#O>RX|tNge|wdywe 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