From 624c5a902960c42bd8b66f1d621e578dfaa403ca Mon Sep 17 00:00:00 2001 From: ramzi Date: Sat, 2 May 2026 14:35:50 +0100 Subject: [PATCH 1/6] fix(editor): block lossy visual conversion for custom HTML --- .../__tests__/EmailEditor/modeGuards.test.ts | 32 +++++++++++++ .../components/EmailEditor/EmailEditor.tsx | 47 +++++++------------ .../src/components/EmailEditor/modeGuards.ts | 27 +++++++++++ 3 files changed, 77 insertions(+), 29 deletions(-) create mode 100644 apps/web/__tests__/EmailEditor/modeGuards.test.ts create mode 100644 apps/web/src/components/EmailEditor/modeGuards.ts diff --git a/apps/web/__tests__/EmailEditor/modeGuards.test.ts b/apps/web/__tests__/EmailEditor/modeGuards.test.ts new file mode 100644 index 000000000..12573861c --- /dev/null +++ b/apps/web/__tests__/EmailEditor/modeGuards.test.ts @@ -0,0 +1,32 @@ +import {describe, expect, it} from 'vitest'; +import {getInitialEditorMode, getModeToggleDecision} from '../../src/components/EmailEditor/modeGuards'; + +describe('EmailEditor mode guards', () => { + it('starts in html mode for custom html templates', () => { + const customHtml = '
Hello
'; + + expect(getInitialEditorMode(customHtml)).toBe('html'); + }); + + it('allows switching simple html into visual mode', () => { + const simpleHtml = '

Hello world

'; + + expect( + getModeToggleDecision({ + currentMode: 'html', + htmlContent: simpleHtml, + }), + ).toEqual({action: 'switch', nextMode: 'visual'}); + }); + + it('blocks switching custom html into visual mode', () => { + const customHtml = '
Hello
'; + + expect( + getModeToggleDecision({ + currentMode: 'html', + htmlContent: customHtml, + }), + ).toEqual({action: 'block-custom-html'}); + }); +}); diff --git a/apps/web/src/components/EmailEditor/EmailEditor.tsx b/apps/web/src/components/EmailEditor/EmailEditor.tsx index 36dd2cf2f..d6e5f19b1 100644 --- a/apps/web/src/components/EmailEditor/EmailEditor.tsx +++ b/apps/web/src/components/EmailEditor/EmailEditor.tsx @@ -32,6 +32,7 @@ import { import {Code2, Eye, Monitor, Smartphone, Tablet, Upload, X} from 'lucide-react'; import {network} from '../../lib/network'; import {detectCustomHtmlPatterns, wrapEmailWithStyles} from '../../lib/emailStyles'; +import {getInitialEditorMode, getModeToggleDecision} from './modeGuards'; import 'tippy.js/dist/tippy.css'; interface EmailEditorProps { @@ -53,8 +54,7 @@ const commonVariables = [ ]; export function EmailEditor({value, onChange, placeholder, subject, from, replyTo}: EmailEditorProps) { - // Detect if initial value has custom HTML and start in appropriate mode - const initialMode = detectCustomHtmlPatterns(value) ? 'html' : 'visual'; + const initialMode = getInitialEditorMode(value); const [mode, setMode] = useState<'visual' | 'html'>(initialMode); const [htmlContent, setHtmlContent] = useState(value); @@ -151,41 +151,33 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT // eslint-disable-next-line react-hooks/exhaustive-deps }, [value, editor]); - // Use the same pattern detection as initialization (no editor manipulation) - const detectCustomHtml = (html: string): boolean => { - return detectCustomHtmlPatterns(html); - }; - const handleModeToggle = () => { - if (mode === 'visual') { - // Switching to HTML mode + const decision = getModeToggleDecision({ + currentMode: mode, + htmlContent, + }); + + if (decision.action === 'switch' && decision.nextMode === 'html') { const currentHtml = editor?.getHTML() || ''; setHtmlContent(currentHtml); setMode('html'); - } else { - // Switching to visual mode - check if custom HTML will be lost - if (detectCustomHtml(htmlContent)) { - setShowModeWarningDialog(true); - } else { - switchToVisualMode(); - } + return; + } + + if (decision.action === 'block-custom-html') { + setShowModeWarningDialog(true); + return; } - }; - const switchToVisualMode = () => { - // Only switch if we have an editor and html content if (editor) { editor.commands.setContent(htmlContent || ''); onChange(htmlContent); setMode('visual'); } - setShowModeWarningDialog(false); }; const stayInHtmlMode = () => { - // Explicitly stay in HTML mode and just close the dialog setShowModeWarningDialog(false); - // Ensure we're in HTML mode if (mode !== 'html') { setMode('html'); } @@ -701,8 +693,8 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT

- Your HTML contains custom formatting, styles, or elements that the visual editor doesn't support. - Switching to visual mode will cause these customizations to be lost or modified. + Your HTML contains custom formatting, styles, or elements that the visual editor doesn't support. To + preserve the original markup, this template must stay in HTML mode.

This may affect:

@@ -715,11 +707,8 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT
- -
diff --git a/apps/web/src/components/EmailEditor/modeGuards.ts b/apps/web/src/components/EmailEditor/modeGuards.ts new file mode 100644 index 000000000..df8783796 --- /dev/null +++ b/apps/web/src/components/EmailEditor/modeGuards.ts @@ -0,0 +1,27 @@ +import {detectCustomHtmlPatterns} from '../../lib/emailStyles'; + +export type EmailEditorMode = 'visual' | 'html'; + +export type ModeToggleDecision = {action: 'switch'; nextMode: EmailEditorMode} | {action: 'block-custom-html'}; + +export const getInitialEditorMode = (value: string): EmailEditorMode => { + return detectCustomHtmlPatterns(value) ? 'html' : 'visual'; +}; + +export const getModeToggleDecision = ({ + currentMode, + htmlContent, +}: { + currentMode: EmailEditorMode; + htmlContent: string; +}): ModeToggleDecision => { + if (currentMode === 'visual') { + return {action: 'switch', nextMode: 'html'}; + } + + if (detectCustomHtmlPatterns(htmlContent)) { + return {action: 'block-custom-html'}; + } + + return {action: 'switch', nextMode: 'visual'}; +}; From 4b60159291752dfec41d3fd408878714df508427 Mon Sep 17 00:00:00 2001 From: ramzi Date: Mon, 25 May 2026 14:20:13 +0100 Subject: [PATCH 2/6] fix(editor): replace blocking dialog with reversible snapshot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Instead of blocking the HTML→Visual switch for custom HTML templates, allow the switch but snapshot the original HTML. A revert banner lets the user restore the original markup if the visual conversion dropped elements. This addresses the maintainer's concern about false positives in custom HTML detection while still protecting against accidental loss. Co-Authored-By: Claude Opus 4.7 (1M context) --- .../__tests__/EmailEditor/modeGuards.test.ts | 19 ++-- .../components/EmailEditor/EmailEditor.tsx | 86 ++++++++----------- .../src/components/EmailEditor/modeGuards.ts | 6 +- 3 files changed, 53 insertions(+), 58 deletions(-) diff --git a/apps/web/__tests__/EmailEditor/modeGuards.test.ts b/apps/web/__tests__/EmailEditor/modeGuards.test.ts index 12573861c..e13bc29d8 100644 --- a/apps/web/__tests__/EmailEditor/modeGuards.test.ts +++ b/apps/web/__tests__/EmailEditor/modeGuards.test.ts @@ -8,7 +8,7 @@ describe('EmailEditor mode guards', () => { expect(getInitialEditorMode(customHtml)).toBe('html'); }); - it('allows switching simple html into visual mode', () => { + it('allows switching simple html into visual mode without snapshot', () => { const simpleHtml = '

Hello world

'; expect( @@ -19,14 +19,23 @@ describe('EmailEditor mode guards', () => { ).toEqual({action: 'switch', nextMode: 'visual'}); }); - it('blocks switching custom html into visual mode', () => { + it('allows switching custom html into visual mode with snapshot for revert', () => { const customHtml = ''; + const decision = getModeToggleDecision({ + currentMode: 'html', + htmlContent: customHtml, + }); + + expect(decision).toEqual({action: 'switch', nextMode: 'visual', snapshot: customHtml}); + }); + + it('always allows switching from visual to html', () => { expect( getModeToggleDecision({ - currentMode: 'html', - htmlContent: customHtml, + currentMode: 'visual', + htmlContent: '

anything

', }), - ).toEqual({action: 'block-custom-html'}); + ).toEqual({action: 'switch', nextMode: 'html'}); }); }); diff --git a/apps/web/src/components/EmailEditor/EmailEditor.tsx b/apps/web/src/components/EmailEditor/EmailEditor.tsx index d6e5f19b1..f7b8af99c 100644 --- a/apps/web/src/components/EmailEditor/EmailEditor.tsx +++ b/apps/web/src/components/EmailEditor/EmailEditor.tsx @@ -29,7 +29,7 @@ import { SelectTrigger, SelectValue, } from '@plunk/ui'; -import {Code2, Eye, Monitor, Smartphone, Tablet, Upload, X} from 'lucide-react'; +import {Code2, Eye, Monitor, RotateCcw, Smartphone, Tablet, Upload, X} from 'lucide-react'; import {network} from '../../lib/network'; import {detectCustomHtmlPatterns, wrapEmailWithStyles} from '../../lib/emailStyles'; import {getInitialEditorMode, getModeToggleDecision} from './modeGuards'; @@ -60,7 +60,9 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT const [htmlContent, setHtmlContent] = useState(value); const [showVariableDialog, setShowVariableDialog] = useState(false); const [showImageDialog, setShowImageDialog] = useState(false); - const [showModeWarningDialog, setShowModeWarningDialog] = useState(false); + // WHY: snapshot stores the original HTML before a lossy visual-mode switch, + // so the user can revert if the conversion dropped markup + const [htmlSnapshot, setHtmlSnapshot] = useState(null); const [previewDevice, setPreviewDevice] = useState<'desktop' | 'tablet' | 'mobile'>('desktop'); const [imageUrl, setImageUrl] = useState(''); const [imageFile, setImageFile] = useState(null); @@ -157,30 +159,34 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT htmlContent, }); - if (decision.action === 'switch' && decision.nextMode === 'html') { + if (decision.nextMode === 'html') { const currentHtml = editor?.getHTML() || ''; setHtmlContent(currentHtml); + setHtmlSnapshot(null); setMode('html'); return; } - if (decision.action === 'block-custom-html') { - setShowModeWarningDialog(true); - return; - } - if (editor) { + if (decision.snapshot) { + setHtmlSnapshot(decision.snapshot); + } editor.commands.setContent(htmlContent || ''); onChange(htmlContent); setMode('visual'); } }; - const stayInHtmlMode = () => { - setShowModeWarningDialog(false); - if (mode !== 'html') { - setMode('html'); - } + const revertToSnapshot = () => { + if (!htmlSnapshot) return; + setHtmlContent(htmlSnapshot); + onChange(htmlSnapshot); + setHtmlSnapshot(null); + setMode('html'); + }; + + const dismissSnapshot = () => { + setHtmlSnapshot(null); }; const handleHtmlChange = (newHtml: string) => { @@ -377,6 +383,22 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT onInsertImage={() => setShowImageDialog(true)} canUploadImages={canUploadImages} /> + {htmlSnapshot && ( +
+

+ Some custom HTML may not display correctly in the visual editor. +

+
+ + +
+
+ )}
@@ -677,44 +699,6 @@ export function EmailEditor({value, onChange, placeholder, subject, from, replyT - {/* Mode switch warning dialog */} - { - // Only allow closing (not opening) and ensure we stay in current mode - if (!open) { - setShowModeWarningDialog(false); - } - }} - > - - - Custom HTML Detected - -
-

- Your HTML contains custom formatting, styles, or elements that the visual editor doesn't support. To - preserve the original markup, this template must stay in HTML mode. -

-
-

This may affect:

-
    -
  • Custom HTML elements and attributes
  • -
  • Inline styles and CSS classes
  • -
  • Complex table structures
  • -
  • Custom formatting or layout
  • -
-
- -
- -
-
-
-
- {/* Image insertion dialog */} diff --git a/apps/web/src/components/EmailEditor/modeGuards.ts b/apps/web/src/components/EmailEditor/modeGuards.ts index df8783796..ebaa78966 100644 --- a/apps/web/src/components/EmailEditor/modeGuards.ts +++ b/apps/web/src/components/EmailEditor/modeGuards.ts @@ -2,7 +2,7 @@ import {detectCustomHtmlPatterns} from '../../lib/emailStyles'; export type EmailEditorMode = 'visual' | 'html'; -export type ModeToggleDecision = {action: 'switch'; nextMode: EmailEditorMode} | {action: 'block-custom-html'}; +export type ModeToggleDecision = {action: 'switch'; nextMode: EmailEditorMode; snapshot?: string}; export const getInitialEditorMode = (value: string): EmailEditorMode => { return detectCustomHtmlPatterns(value) ? 'html' : 'visual'; @@ -19,8 +19,10 @@ export const getModeToggleDecision = ({ return {action: 'switch', nextMode: 'html'}; } + // WHY: custom HTML detection has false positives, so we allow the switch + // but snapshot the original HTML so the user can revert without data loss if (detectCustomHtmlPatterns(htmlContent)) { - return {action: 'block-custom-html'}; + return {action: 'switch', nextMode: 'visual', snapshot: htmlContent}; } return {action: 'switch', nextMode: 'visual'}; From ce674388406ec44480e78f7f51fb9ff62d59e371 Mon Sep 17 00:00:00 2001 From: ramzi Date: Fri, 26 Jun 2026 13:59:52 +0100 Subject: [PATCH 3/6] chore(security): bump vulnerable deps to patched versions Cleared all CVE-class advisories surfaced by `yarn npm audit` via yarn resolutions (range-scoped) plus direct dev-dep bumps. Applied from an isolated worktree at HEAD because the main working tree holds an unrelated yarn->pnpm migration WIP. Audit: 4 critical / 15 high / 22 moderate / 8 low -> only 1 low residual. Resolutions / bumps: - next ^16.2.6 (critical/high/moderate; direct) - vitest ^4.1.0, turbo ^2.9.14, form-data ^4.0.6 (direct dev deps) - shell-quote ^1.9.0, fast-xml-parser ^5.7.0 (critical) - effect ^3.21.4, fast-uri ^4.0.0, multer ^2.2.0, nodemailer ^9.0.1, ws ^8.21.0, serialize-javascript ^7.0.5, undici ^6.27.0, vite ^7.3.5, picomatch ^4.0.4, minimatch (3.1.4/9.0.7/10.2.3), path-to-regexp (0.1.13/8.4.0), @isaacs/brace-expansion ^5.0.1 (high) - dompurify ^3.4.11, ajv ^8.18.0, brace-expansion (1.1.13/2.0.3), ip-address ^10.2.0, js-yaml ^4.2.0, markdown-it ^14.2.0, postcss ^8.5.10, qs ^6.15.3, tar ^7.5.17, uuid ^11.1.1, yaml ^2.8.3, esbuild ^0.28.1 (moderate/low) Residual: @babel/core <=7.29.0 (low) - fix exists only in 8.0 major, which would force a breaking babel-ecosystem upgrade; left unbumped to keep build green. Deprecation-only notices (@react-email/*, @overnightjs/core, @types/dompurify, glob, etc.) are not CVEs and were not touched. Build: `yarn build` (turbo, 9/9 tasks) passes. Co-Authored-By: Claude Opus 4.8 (1M context) --- package.json | 46 +- yarn.lock | 2295 +++++++++++++++----------------------------------- 2 files changed, 727 insertions(+), 1614 deletions(-) diff --git a/package.json b/package.json index 2d3326092..dd371a491 100644 --- a/package.json +++ b/package.json @@ -18,27 +18,61 @@ "test:run": "vitest run" }, "resolutions": { - "fumadocs-core": "16.0.8" + "fumadocs-core": "16.0.8", + "@isaacs/brace-expansion": "^5.0.1", + "ajv": "^8.18.0", + "brace-expansion@npm:^1.1.7": "^1.1.13", + "brace-expansion@npm:^2.0.1": "^2.0.3", + "dompurify": "^3.4.11", + "effect": "^3.21.4", + "esbuild": "^0.28.1", + "fast-uri": "^4.0.0", + "fast-xml-parser": "^5.7.0", + "form-data": "^4.0.6", + "ip-address": "^10.2.0", + "js-yaml": "^4.2.0", + "markdown-it": "^14.2.0", + "minimatch@npm:^3.1.2": "^3.1.4", + "minimatch@npm:^9.0.4": "^9.0.7", + "minimatch@npm:^10.1.1": "^10.2.3", + "multer": "^2.2.0", + "next": "^16.2.6", + "nodemailer": "^9.0.1", + "path-to-regexp@npm:~0.1.12": "^0.1.13", + "path-to-regexp@npm:^8.3.0": "^8.4.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.10", + "qs": "^6.15.3", + "serialize-javascript": "^7.0.5", + "shell-quote": "^1.9.0", + "tar": "^7.5.17", + "turbo": "^2.9.14", + "undici": "^6.27.0", + "uuid": "^11.1.1", + "vite": "^7.3.5", + "vitest": "^4.1.0", + "ws": "^8.21.0", + "yaml": "^2.8.3" }, "devDependencies": { "@eslint/js": "^9.39.1", "@formatjs/cli": "^6.7.4", "@types/supertest": "^6.0.3", - "@vitest/coverage-v8": "^4.0.14", - "@vitest/ui": "^4.0.14", + "@vitest/coverage-v8": "^4.1.0", + "@vitest/ui": "^4.1.0", "dotenv": "^17.0.1", "eslint": "^9.27.0", "eslint-config-next": "^16.0.1", "eslint-config-prettier": "^10.1.5", "eslint-plugin-import": "^2.31.0", - "form-data": "^4.0.3", + "form-data": "^4.0.6", "prettier": "^3.5.3", "rimraf": "^6.1.2", "supertest": "^7.1.4", - "turbo": "^2.6.0", + "turbo": "^2.9.14", "typescript": "^5.7.2", "typescript-eslint": "^8.48.0", - "vitest": "^4.0.14", + "vitest": "^4.1.0", "vitest-mock-extended": "^3.1.0" }, "engines": { diff --git a/yarn.lock b/yarn.lock index aa2bd1d08..e9fecc7c6 100644 --- a/yarn.lock +++ b/yarn.lock @@ -911,6 +911,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-string-parser@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-string-parser@npm:7.29.7" + checksum: 10c0/194bc0f1716e396d5ffde56ad6119745fb9557662c98611590e5e454906783a4ccb21ce93056b8eb69a4909044834e45d96e50ac695bbe9e3221648fe033c06c + languageName: node + linkType: hard + "@babel/helper-validator-identifier@npm:^7.27.1, @babel/helper-validator-identifier@npm:^7.28.5": version: 7.28.5 resolution: "@babel/helper-validator-identifier@npm:7.28.5" @@ -918,6 +925,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-validator-identifier@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/helper-validator-identifier@npm:7.29.7" + checksum: 10c0/4795354e7ae0dcafa72de1cd04ec51252dc1498517170beaf019e03effc5b7bf13c6b21a3949a77e07b8125be7f106ed1131350d8ebd4566ae874094a726d62b + languageName: node + linkType: hard + "@babel/helper-validator-option@npm:^7.27.1": version: 7.27.1 resolution: "@babel/helper-validator-option@npm:7.27.1" @@ -957,6 +971,17 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.29.3": + version: 7.29.7 + resolution: "@babel/parser@npm:7.29.7" + dependencies: + "@babel/types": "npm:^7.29.7" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/65133038f80b54a714d6027cb77cee3f9a6b5c4c6842ce674301e13947cbcbfa8055e63acaf1b84c085d34226a14425b2c2b97b829e0e226d2e8f1299942a51d + languageName: node + linkType: hard + "@babel/runtime@npm:^7.18.6": version: 7.28.4 resolution: "@babel/runtime@npm:7.28.4" @@ -1015,6 +1040,16 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.29.0, @babel/types@npm:^7.29.7": + version: 7.29.7 + resolution: "@babel/types@npm:7.29.7" + dependencies: + "@babel/helper-string-parser": "npm:^7.29.7" + "@babel/helper-validator-identifier": "npm:^7.29.7" + checksum: 10c0/b6623994c69717fa27294f5fa46d59140338e2d86c6c1c13085c84ef7d53086ee357fbf4fe9abe3dd3da75734dc77c4c0df2f90fb29e667558bb3b3fb705e88f + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^1.0.2": version: 1.0.2 resolution: "@bcoe/v8-coverage@npm:1.0.2" @@ -1266,730 +1301,184 @@ __metadata: languageName: node linkType: hard -"@esbuild/aix-ppc64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/aix-ppc64@npm:0.25.10" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/aix-ppc64@npm:0.25.12" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/aix-ppc64@npm:0.27.1" - conditions: os=aix & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/aix-ppc64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/aix-ppc64@npm:0.27.7" +"@esbuild/aix-ppc64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/aix-ppc64@npm:0.28.1" conditions: os=aix & cpu=ppc64 languageName: node linkType: hard -"@esbuild/android-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/android-arm64@npm:0.25.10" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm64@npm:0.25.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/android-arm64@npm:0.27.1" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-arm64@npm:0.27.7" +"@esbuild/android-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/android-arm64@npm:0.28.1" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"@esbuild/android-arm@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/android-arm@npm:0.25.10" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-arm@npm:0.25.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/android-arm@npm:0.27.1" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-arm@npm:0.27.7" +"@esbuild/android-arm@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/android-arm@npm:0.28.1" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/android-x64@npm:0.25.10" +"@esbuild/android-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/android-x64@npm:0.28.1" conditions: os=android & cpu=x64 languageName: node linkType: hard -"@esbuild/android-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/android-x64@npm:0.25.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/android-x64@npm:0.27.1" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/android-x64@npm:0.27.7" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/darwin-arm64@npm:0.25.10" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-arm64@npm:0.25.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/darwin-arm64@npm:0.27.1" +"@esbuild/darwin-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/darwin-arm64@npm:0.28.1" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@esbuild/darwin-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/darwin-arm64@npm:0.27.7" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/darwin-x64@npm:0.25.10" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/darwin-x64@npm:0.25.12" +"@esbuild/darwin-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/darwin-x64@npm:0.28.1" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@esbuild/darwin-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/darwin-x64@npm:0.27.1" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/darwin-x64@npm:0.27.7" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/freebsd-arm64@npm:0.25.10" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-arm64@npm:0.25.12" +"@esbuild/freebsd-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/freebsd-arm64@npm:0.28.1" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/freebsd-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/freebsd-arm64@npm:0.27.1" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/freebsd-arm64@npm:0.27.7" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/freebsd-x64@npm:0.25.10" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/freebsd-x64@npm:0.25.12" +"@esbuild/freebsd-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/freebsd-x64@npm:0.28.1" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"@esbuild/freebsd-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/freebsd-x64@npm:0.27.1" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/freebsd-x64@npm:0.27.7" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-arm64@npm:0.25.10" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm64@npm:0.25.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-arm64@npm:0.27.1" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-arm64@npm:0.27.7" +"@esbuild/linux-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-arm64@npm:0.28.1" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-arm@npm:0.25.10" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-arm@npm:0.25.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-arm@npm:0.27.1" +"@esbuild/linux-arm@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-arm@npm:0.28.1" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@esbuild/linux-arm@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-arm@npm:0.27.7" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-ia32@npm:0.25.10" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ia32@npm:0.25.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-ia32@npm:0.27.1" +"@esbuild/linux-ia32@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-ia32@npm:0.28.1" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"@esbuild/linux-ia32@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-ia32@npm:0.27.7" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-loong64@npm:0.25.10" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-loong64@npm:0.25.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-loong64@npm:0.27.1" +"@esbuild/linux-loong64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-loong64@npm:0.28.1" conditions: os=linux & cpu=loong64 languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-loong64@npm:0.27.7" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-mips64el@npm:0.25.10" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-mips64el@npm:0.25.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-mips64el@npm:0.27.1" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-mips64el@npm:0.27.7" +"@esbuild/linux-mips64el@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-mips64el@npm:0.28.1" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"@esbuild/linux-ppc64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-ppc64@npm:0.25.10" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-ppc64@npm:0.25.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-ppc64@npm:0.27.1" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-ppc64@npm:0.27.7" +"@esbuild/linux-ppc64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-ppc64@npm:0.28.1" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"@esbuild/linux-riscv64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-riscv64@npm:0.25.10" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-riscv64@npm:0.25.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-riscv64@npm:0.27.1" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-riscv64@npm:0.27.7" +"@esbuild/linux-riscv64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-riscv64@npm:0.28.1" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"@esbuild/linux-s390x@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-s390x@npm:0.25.10" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-s390x@npm:0.25.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-s390x@npm:0.27.1" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-s390x@npm:0.27.7" +"@esbuild/linux-s390x@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-s390x@npm:0.28.1" conditions: os=linux & cpu=s390x languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/linux-x64@npm:0.25.10" +"@esbuild/linux-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/linux-x64@npm:0.28.1" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@esbuild/linux-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/linux-x64@npm:0.25.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/linux-x64@npm:0.27.1" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/linux-x64@npm:0.27.7" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/netbsd-arm64@npm:0.25.10" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-arm64@npm:0.25.12" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/netbsd-arm64@npm:0.27.1" +"@esbuild/netbsd-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/netbsd-arm64@npm:0.28.1" conditions: os=netbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/netbsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/netbsd-arm64@npm:0.27.7" - conditions: os=netbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/netbsd-x64@npm:0.25.10" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/netbsd-x64@npm:0.25.12" +"@esbuild/netbsd-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/netbsd-x64@npm:0.28.1" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/netbsd-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/netbsd-x64@npm:0.27.1" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/netbsd-x64@npm:0.27.7" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/openbsd-arm64@npm:0.25.10" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-arm64@npm:0.25.12" +"@esbuild/openbsd-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/openbsd-arm64@npm:0.28.1" conditions: os=openbsd & cpu=arm64 languageName: node linkType: hard -"@esbuild/openbsd-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/openbsd-arm64@npm:0.27.1" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openbsd-arm64@npm:0.27.7" - conditions: os=openbsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/openbsd-x64@npm:0.25.10" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openbsd-x64@npm:0.25.12" +"@esbuild/openbsd-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/openbsd-x64@npm:0.28.1" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"@esbuild/openbsd-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/openbsd-x64@npm:0.27.1" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openbsd-x64@npm:0.27.7" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/openharmony-arm64@npm:0.25.10" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/openharmony-arm64@npm:0.25.12" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/openharmony-arm64@npm:0.27.1" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/openharmony-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/openharmony-arm64@npm:0.27.7" +"@esbuild/openharmony-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/openharmony-arm64@npm:0.28.1" conditions: os=openharmony & cpu=arm64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/sunos-x64@npm:0.25.10" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/sunos-x64@npm:0.25.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/sunos-x64@npm:0.27.1" +"@esbuild/sunos-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/sunos-x64@npm:0.28.1" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"@esbuild/sunos-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/sunos-x64@npm:0.27.7" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/win32-arm64@npm:0.25.10" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-arm64@npm:0.25.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/win32-arm64@npm:0.27.1" +"@esbuild/win32-arm64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/win32-arm64@npm:0.28.1" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@esbuild/win32-arm64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-arm64@npm:0.27.7" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/win32-ia32@npm:0.25.10" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-ia32@npm:0.25.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/win32-ia32@npm:0.27.1" +"@esbuild/win32-ia32@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/win32-ia32@npm:0.28.1" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@esbuild/win32-ia32@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-ia32@npm:0.27.7" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.10": - version: 0.25.10 - resolution: "@esbuild/win32-x64@npm:0.25.10" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.25.12": - version: 0.25.12 - resolution: "@esbuild/win32-x64@npm:0.25.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.27.1": - version: 0.27.1 - resolution: "@esbuild/win32-x64@npm:0.27.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.27.7": - version: 0.27.7 - resolution: "@esbuild/win32-x64@npm:0.27.7" +"@esbuild/win32-x64@npm:0.28.1": + version: 0.28.1 + resolution: "@esbuild/win32-x64@npm:0.28.1" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -2713,22 +2202,6 @@ __metadata: languageName: node linkType: hard -"@isaacs/balanced-match@npm:^4.0.1": - version: 4.0.1 - resolution: "@isaacs/balanced-match@npm:4.0.1" - checksum: 10c0/7da011805b259ec5c955f01cee903da72ad97c5e6f01ca96197267d3f33103d5b2f8a1af192140f3aa64526c593c8d098ae366c2b11f7f17645d12387c2fd420 - languageName: node - linkType: hard - -"@isaacs/brace-expansion@npm:^5.0.0": - version: 5.0.0 - resolution: "@isaacs/brace-expansion@npm:5.0.0" - dependencies: - "@isaacs/balanced-match": "npm:^4.0.1" - checksum: 10c0/b4d4812f4be53afc2c5b6c545001ff7a4659af68d4484804e9d514e183d20269bb81def8682c01a22b17c4d6aed14292c8494f7d2ac664e547101c1a905aa977 - languageName: node - linkType: hard - "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -2806,7 +2279,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.23, @jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28, @jridgewell/trace-mapping@npm:^0.3.31": +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25, @jridgewell/trace-mapping@npm:^0.3.28, @jridgewell/trace-mapping@npm:^0.3.31": version: 0.3.31 resolution: "@jridgewell/trace-mapping@npm:0.3.31" dependencies: @@ -2996,17 +2469,10 @@ __metadata: languageName: node linkType: hard -"@next/env@npm:16.0.1": - version: 16.0.1 - resolution: "@next/env@npm:16.0.1" - checksum: 10c0/f993bd72f91a3617d2d91c984d0d63c0a94a6e132787c9f93a43425125fe8ab8568928e4c1acd47e76c3acf6e9065296984e06ba8227a52e85b323b197c4e1c1 - languageName: node - linkType: hard - -"@next/env@npm:16.2.3": - version: 16.2.3 - resolution: "@next/env@npm:16.2.3" - checksum: 10c0/56c3fee8ea226efe59ef065e054380f872c00c45c9fe4475eaa45f80773c3c1adc3ead3ccdd77447d3c1aeb4b3004aaaa033dd4a100d3e572fd01b83f992dde8 +"@next/env@npm:16.2.9": + version: 16.2.9 + resolution: "@next/env@npm:16.2.9" + checksum: 10c0/698d66e248b19728007094929f9a32c1cdf4d89cf8a6fa557af324833f1ee066f79fc0b6173a0fd18a301f70f757420185a46f3da1b8e738eba678952e57c8d3 languageName: node linkType: hard @@ -3026,114 +2492,58 @@ __metadata: languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-darwin-arm64@npm:16.0.1" +"@next/swc-darwin-arm64@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-darwin-arm64@npm:16.2.9" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@next/swc-darwin-arm64@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-darwin-arm64@npm:16.2.3" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@next/swc-darwin-x64@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-darwin-x64@npm:16.0.1" +"@next/swc-darwin-x64@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-darwin-x64@npm:16.2.9" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@next/swc-darwin-x64@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-darwin-x64@npm:16.2.3" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@next/swc-linux-arm64-gnu@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-linux-arm64-gnu@npm:16.0.1" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@next/swc-linux-arm64-gnu@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-linux-arm64-gnu@npm:16.2.3" +"@next/swc-linux-arm64-gnu@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-linux-arm64-gnu@npm:16.2.9" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-linux-arm64-musl@npm:16.0.1" +"@next/swc-linux-arm64-musl@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-linux-arm64-musl@npm:16.2.9" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@next/swc-linux-arm64-musl@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-linux-arm64-musl@npm:16.2.3" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@next/swc-linux-x64-gnu@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-linux-x64-gnu@npm:16.0.1" +"@next/swc-linux-x64-gnu@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-linux-x64-gnu@npm:16.2.9" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@next/swc-linux-x64-gnu@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-linux-x64-gnu@npm:16.2.3" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@next/swc-linux-x64-musl@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-linux-x64-musl@npm:16.0.1" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@next/swc-linux-x64-musl@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-linux-x64-musl@npm:16.2.3" +"@next/swc-linux-x64-musl@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-linux-x64-musl@npm:16.2.9" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-win32-arm64-msvc@npm:16.0.1" +"@next/swc-win32-arm64-msvc@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-win32-arm64-msvc@npm:16.2.9" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@next/swc-win32-arm64-msvc@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-win32-arm64-msvc@npm:16.2.3" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@next/swc-win32-x64-msvc@npm:16.0.1": - version: 16.0.1 - resolution: "@next/swc-win32-x64-msvc@npm:16.0.1" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@next/swc-win32-x64-msvc@npm:16.2.3": - version: 16.2.3 - resolution: "@next/swc-win32-x64-msvc@npm:16.2.3" +"@next/swc-win32-x64-msvc@npm:16.2.9": + version: 16.2.9 + resolution: "@next/swc-win32-x64-msvc@npm:16.2.9" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -3145,6 +2555,13 @@ __metadata: languageName: node linkType: hard +"@nodable/entities@npm:^2.2.0": + version: 2.2.0 + resolution: "@nodable/entities@npm:2.2.0" + checksum: 10c0/a5ace5b2f747ae5b851f68a1731526c3e10feacde80469415d15a0df0e960251b515e3cd4ea080a3534e0610ac74b0d3252f607ef2f536bcc97e22d324231578 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -5905,6 +5322,13 @@ __metadata: languageName: node linkType: hard +"@standard-schema/spec@npm:^1.1.0": + version: 1.1.0 + resolution: "@standard-schema/spec@npm:1.1.0" + checksum: 10c0/d90f55acde4b2deb983529c87e8025fa693de1a5e8b49ecc6eb84d1fd96328add0e03d7d551442156c7432fd78165b2c26ff561b970a9a881f046abb78d6a526 + languageName: node + linkType: hard + "@standard-schema/utils@npm:^0.3.0": version: 0.3.0 resolution: "@standard-schema/utils@npm:0.3.0" @@ -6539,31 +5963,73 @@ __metadata: languageName: node linkType: hard -"@tsconfig/node10@npm:^1.0.7": - version: 1.0.12 - resolution: "@tsconfig/node10@npm:1.0.12" - checksum: 10c0/7bbbd7408cfaced86387a9b1b71cebc91c6fd701a120369735734da8eab1a4773fc079abd9f40c9e0b049e12586c8ac0e13f0da596bfd455b9b4c3faa813ebc5 +"@tsconfig/node10@npm:^1.0.7": + version: 1.0.12 + resolution: "@tsconfig/node10@npm:1.0.12" + checksum: 10c0/7bbbd7408cfaced86387a9b1b71cebc91c6fd701a120369735734da8eab1a4773fc079abd9f40c9e0b049e12586c8ac0e13f0da596bfd455b9b4c3faa813ebc5 + languageName: node + linkType: hard + +"@tsconfig/node12@npm:^1.0.7": + version: 1.0.11 + resolution: "@tsconfig/node12@npm:1.0.11" + checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 + languageName: node + linkType: hard + +"@tsconfig/node14@npm:^1.0.0": + version: 1.0.3 + resolution: "@tsconfig/node14@npm:1.0.3" + checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 + languageName: node + linkType: hard + +"@tsconfig/node16@npm:^1.0.2": + version: 1.0.4 + resolution: "@tsconfig/node16@npm:1.0.4" + checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb + languageName: node + linkType: hard + +"@turbo/darwin-64@npm:2.10.0": + version: 2.10.0 + resolution: "@turbo/darwin-64@npm:2.10.0" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + +"@turbo/darwin-arm64@npm:2.10.0": + version: 2.10.0 + resolution: "@turbo/darwin-arm64@npm:2.10.0" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + +"@turbo/linux-64@npm:2.10.0": + version: 2.10.0 + resolution: "@turbo/linux-64@npm:2.10.0" + conditions: os=linux & cpu=x64 languageName: node linkType: hard -"@tsconfig/node12@npm:^1.0.7": - version: 1.0.11 - resolution: "@tsconfig/node12@npm:1.0.11" - checksum: 10c0/dddca2b553e2bee1308a056705103fc8304e42bb2d2cbd797b84403a223b25c78f2c683ec3e24a095e82cd435387c877239bffcb15a590ba817cd3f6b9a99fd9 +"@turbo/linux-arm64@npm:2.10.0": + version: 2.10.0 + resolution: "@turbo/linux-arm64@npm:2.10.0" + conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"@tsconfig/node14@npm:^1.0.0": - version: 1.0.3 - resolution: "@tsconfig/node14@npm:1.0.3" - checksum: 10c0/67c1316d065fdaa32525bc9449ff82c197c4c19092b9663b23213c8cbbf8d88b6ed6a17898e0cbc2711950fbfaf40388938c1c748a2ee89f7234fc9e7fe2bf44 +"@turbo/windows-64@npm:2.10.0": + version: 2.10.0 + resolution: "@turbo/windows-64@npm:2.10.0" + conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"@tsconfig/node16@npm:^1.0.2": - version: 1.0.4 - resolution: "@tsconfig/node16@npm:1.0.4" - checksum: 10c0/05f8f2734e266fb1839eb1d57290df1664fe2aa3b0fdd685a9035806daa635f7519bf6d5d9b33f6e69dd545b8c46bd6e2b5c79acb2b1f146e885f7f11a42a5bb +"@turbo/windows-arm64@npm:2.10.0": + version: 2.10.0 + resolution: "@turbo/windows-arm64@npm:2.10.0" + conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -7507,125 +6973,126 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-v8@npm:^4.0.14": - version: 4.0.15 - resolution: "@vitest/coverage-v8@npm:4.0.15" +"@vitest/coverage-v8@npm:^4.1.0": + version: 4.1.9 + resolution: "@vitest/coverage-v8@npm:4.1.9" dependencies: "@bcoe/v8-coverage": "npm:^1.0.2" - "@vitest/utils": "npm:4.0.15" - ast-v8-to-istanbul: "npm:^0.3.8" + "@vitest/utils": "npm:4.1.9" + ast-v8-to-istanbul: "npm:^1.0.0" istanbul-lib-coverage: "npm:^3.2.2" istanbul-lib-report: "npm:^3.0.1" - istanbul-lib-source-maps: "npm:^5.0.6" istanbul-reports: "npm:^3.2.0" - magicast: "npm:^0.5.1" + magicast: "npm:^0.5.2" obug: "npm:^2.1.1" - std-env: "npm:^3.10.0" - tinyrainbow: "npm:^3.0.3" + std-env: "npm:^4.0.0-rc.1" + tinyrainbow: "npm:^3.1.0" peerDependencies: - "@vitest/browser": 4.0.15 - vitest: 4.0.15 + "@vitest/browser": 4.1.9 + vitest: 4.1.9 peerDependenciesMeta: "@vitest/browser": optional: true - checksum: 10c0/8810cb35fc443bdd5da46ea90804d7657d17ceb20dc9f7e05c7f6212480039c6079ec4ff0c305a658044b7cbd8792a71c7ae6661258fc5f3022e04bea04186a0 + checksum: 10c0/02bc408d5d8d5188bb569ae1df1f56903e9e19a6a19ddeff07140e1b344b82662f0669c7ee87b6f4f82c9d1d63a0296fe40c023f923a500a707463c8c05ec133 languageName: node linkType: hard -"@vitest/expect@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/expect@npm:4.0.15" +"@vitest/expect@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/expect@npm:4.1.9" dependencies: - "@standard-schema/spec": "npm:^1.0.0" + "@standard-schema/spec": "npm:^1.1.0" "@types/chai": "npm:^5.2.2" - "@vitest/spy": "npm:4.0.15" - "@vitest/utils": "npm:4.0.15" - chai: "npm:^6.2.1" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/0cb98a4918ca84b28cd14120bb66c1bc3084f8f95b649066cdab2f5234ecdbe247cdc6bc47c0d939521d964ff3c150aadd9558272495c26872c9f3a97373bf7b + "@vitest/spy": "npm:4.1.9" + "@vitest/utils": "npm:4.1.9" + chai: "npm:^6.2.2" + tinyrainbow: "npm:^3.1.0" + checksum: 10c0/243bacaed2cba5e0ea4ec7465662fcec465a358a0e06381e337fac49426aa67a73b104fbb9d65d8bccadfba8f70e27f57ffb897aacfa140f579a556367357875 languageName: node linkType: hard -"@vitest/mocker@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/mocker@npm:4.0.15" +"@vitest/mocker@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/mocker@npm:4.1.9" dependencies: - "@vitest/spy": "npm:4.0.15" + "@vitest/spy": "npm:4.1.9" estree-walker: "npm:^3.0.3" magic-string: "npm:^0.30.21" peerDependencies: msw: ^2.4.9 - vite: ^6.0.0 || ^7.0.0-0 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: msw: optional: true vite: optional: true - checksum: 10c0/7a164aa25daab3e92013ec95aab5c5778e805b1513e266ce6c00e0647eb9f7b281e33fcaf0d9d2aed88321079183b60c1aeab90961f618c24e2e3a5143308850 + checksum: 10c0/707353b7435bbfd441cc754e4ee7bc5921b70d07b051c6e414b6bbe4ca369154702b0ddeb603389469fe87ca1983e002eb2d55044582661f54a1945dd27e5c82 languageName: node linkType: hard -"@vitest/pretty-format@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/pretty-format@npm:4.0.15" +"@vitest/pretty-format@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/pretty-format@npm:4.1.9" dependencies: - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/d863f3818627b198f9c66515f8faa200e76a1c30c7f2b25ac805e253204ae51abbfa6b6211c58b2d75e1a273a2e6925e3a8fa480ebfa9c479d75a19815e1cbea + tinyrainbow: "npm:^3.1.0" + checksum: 10c0/5b96295f25ab885616230ad1355fc82f490bebb39cc707688d7c8969c08270d7e076ed8a10af4e762ed57145193c6061a1f549f136f0ded344f8db0c2b3fb3de languageName: node linkType: hard -"@vitest/runner@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/runner@npm:4.0.15" +"@vitest/runner@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/runner@npm:4.1.9" dependencies: - "@vitest/utils": "npm:4.0.15" + "@vitest/utils": "npm:4.1.9" pathe: "npm:^2.0.3" - checksum: 10c0/0b0f23b8fed1a98bb85d71a7fc105726e0fae68667b090c40b636011126fef548a5f853eab40aaf47314913ab6480eefe2aa5bd6bcefc4116e034fdc1ac0f7d0 + checksum: 10c0/d206b4891a64b1f55c346f832b0a7b489108094d8ae34438d3b53e78be7b45b139fa95ffa027c98c357bd532268ee573168de1943235b7eed32a9236ed5978bb languageName: node linkType: hard -"@vitest/snapshot@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/snapshot@npm:4.0.15" +"@vitest/snapshot@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/snapshot@npm:4.1.9" dependencies: - "@vitest/pretty-format": "npm:4.0.15" + "@vitest/pretty-format": "npm:4.1.9" + "@vitest/utils": "npm:4.1.9" magic-string: "npm:^0.30.21" pathe: "npm:^2.0.3" - checksum: 10c0/f05a19f74512cbad9bcfe4afe814c676b72b7e54ccf09c5b36e06e73614a24fdba47bdb8a94279162b7fdf83c9c840f557073a114a9339df7e75ccb9f4e99218 + checksum: 10c0/c3099df12ad1f9c1e180441856c9eb82f1990f87ff16aafedd6fa19978eaff20bc59220b692a99fcc822daef86eab256ba3dadb49544b7bd625b57c49cd9d995 languageName: node linkType: hard -"@vitest/spy@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/spy@npm:4.0.15" - checksum: 10c0/22319cead44964882d9e7bd197a9cd317c945ff75a4a9baefe06c32c5719d4cb887e86b4560d79716765f288a93a6c76e78e3eeab0000f24b2236dab678b7c34 +"@vitest/spy@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/spy@npm:4.1.9" + checksum: 10c0/e51f328f55b76e8ba66e5e18f183484a8dc0a092685b101112d3e9fb8e989ddca162c98ddf00254476502c25bc05c4ec1e277fd6ad8bfc702464c08f6b5dd115 languageName: node linkType: hard -"@vitest/ui@npm:^4.0.14": - version: 4.0.15 - resolution: "@vitest/ui@npm:4.0.15" +"@vitest/ui@npm:^4.1.0": + version: 4.1.9 + resolution: "@vitest/ui@npm:4.1.9" dependencies: - "@vitest/utils": "npm:4.0.15" + "@vitest/utils": "npm:4.1.9" fflate: "npm:^0.8.2" - flatted: "npm:^3.3.3" + flatted: "npm:^3.4.2" pathe: "npm:^2.0.3" sirv: "npm:^3.0.2" tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.0.3" + tinyrainbow: "npm:^3.1.0" peerDependencies: - vitest: 4.0.15 - checksum: 10c0/f6d1729de4d0ab43fbcc48aa1935315ab1c039fcf216abc01222e9170e0cb1829300a950952ca025ee9af0618fb4c24199cb1a912a76466c87a0eee86ed91d11 + vitest: 4.1.9 + checksum: 10c0/9c480d79a61ebe40552ab4f1fa2a15dad0147d9c5e40186cb210f2199a0bfd886cd34e9ac11b1ef4ff0bf3436be46f5652c3f36200cdb278dfd2b3634996e50a languageName: node linkType: hard -"@vitest/utils@npm:4.0.15": - version: 4.0.15 - resolution: "@vitest/utils@npm:4.0.15" +"@vitest/utils@npm:4.1.9": + version: 4.1.9 + resolution: "@vitest/utils@npm:4.1.9" dependencies: - "@vitest/pretty-format": "npm:4.0.15" - tinyrainbow: "npm:^3.0.3" - checksum: 10c0/2ef661c2c2359ae956087f0b728b6a0f7555cd10524a7def27909f320f6b8ba00560ee1bd856bf68d4debc01020cea21b200203a5d2af36c44e94528c5587aee + "@vitest/pretty-format": "npm:4.1.9" + convert-source-map: "npm:^2.0.0" + tinyrainbow: "npm:^3.1.0" + checksum: 10c0/d55506c077fd72c091eb66f02926f0abf72801c87a085f565698289562f47befa114ae2c680ab8736dfe46abab0cfd6b8031f2ac519bafeb37578aa6e5ad03c5 languageName: node linkType: hard @@ -7964,27 +7431,15 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^6.12.4": - version: 6.14.0 - resolution: "ajv@npm:6.14.0" - dependencies: - fast-deep-equal: "npm:^3.1.1" - fast-json-stable-stringify: "npm:^2.0.0" - json-schema-traverse: "npm:^0.4.1" - uri-js: "npm:^4.2.2" - checksum: 10c0/a2bc39b0555dc9802c899f86990eb8eed6e366cddbf65be43d5aa7e4f3c4e1a199d5460fd7ca4fb3d864000dbbc049253b72faa83b3b30e641ca52cb29a68c22 - languageName: node - linkType: hard - -"ajv@npm:^8.0.0, ajv@npm:^8.17.1, ajv@npm:^8.9.0": - version: 8.17.1 - resolution: "ajv@npm:8.17.1" +"ajv@npm:^8.18.0": + version: 8.20.0 + resolution: "ajv@npm:8.20.0" dependencies: fast-deep-equal: "npm:^3.1.3" fast-uri: "npm:^3.0.1" json-schema-traverse: "npm:^1.0.0" require-from-string: "npm:^2.0.2" - checksum: 10c0/ec3ba10a573c6b60f94639ffc53526275917a2df6810e4ab5a6b959d87459f9ef3f00d5e7865b82677cb7d21590355b34da14d1d0b9c32d75f95a187e76fff35 + checksum: 10c0/5df9a1c8f83863cde1bd3a9ddb426f599718f88e3dc9153616c79fb28e0be455335830d7f21d745576519f057b371352daa31047b6a33d7036fe08777d60cf2a languageName: node linkType: hard @@ -8051,6 +7506,13 @@ __metadata: languageName: node linkType: hard +"anynum@npm:^1.0.1": + version: 1.0.1 + resolution: "anynum@npm:1.0.1" + checksum: 10c0/cfda92c9215722fc4b15faa33d0eb3d5dfd28fba6cb67c1f50d214feaa7ba6497814a3e110777853585de6d91c8c962a1ae425b637d3598d9f9d8f6f6802e5bb + languageName: node + linkType: hard + "api@workspace:apps/api": version: 0.0.0-use.local resolution: "api@workspace:apps/api" @@ -8276,14 +7738,14 @@ __metadata: languageName: node linkType: hard -"ast-v8-to-istanbul@npm:^0.3.8": - version: 0.3.8 - resolution: "ast-v8-to-istanbul@npm:0.3.8" +"ast-v8-to-istanbul@npm:^1.0.0": + version: 1.0.4 + resolution: "ast-v8-to-istanbul@npm:1.0.4" dependencies: "@jridgewell/trace-mapping": "npm:^0.3.31" estree-walker: "npm:^3.0.3" - js-tokens: "npm:^9.0.1" - checksum: 10c0/6f7d74fc36011699af6d4ad88ecd8efc7d74bd90b8e8dbb1c69d43c8f4bec0ed361fb62a5b5bd98bbee02ee87c62cd8bcc25a39634964e45476bf5489dfa327f + js-tokens: "npm:^10.0.0" + checksum: 10c0/48305cc748fcd0c8a84cf5750cca9e220e1cdb977286917e79a3182cd1eda9a6c73db7afb6526d86f3336684d4662b684db7c8a925448122603df048097b1d00 languageName: node linkType: hard @@ -8382,6 +7844,13 @@ __metadata: languageName: node linkType: hard +"balanced-match@npm:^4.0.2": + version: 4.0.4 + resolution: "balanced-match@npm:4.0.4" + checksum: 10c0/07e86102a3eb2ee2a6a1a89164f29d0dbaebd28f2ca3f5ca786f36b8b23d9e417eb3be45a4acf754f837be5ac0a2317de90d3fcb7f4f4dc95720a1f36b26a17b + languageName: node + linkType: hard + "base32.js@npm:0.1.0": version: 0.1.0 resolution: "base32.js@npm:0.1.0" @@ -8510,22 +7979,31 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^1.1.7": - version: 1.1.12 - resolution: "brace-expansion@npm:1.1.12" +"brace-expansion@npm:^1.1.13": + version: 1.1.15 + resolution: "brace-expansion@npm:1.1.15" dependencies: balanced-match: "npm:^1.0.0" concat-map: "npm:0.0.1" - checksum: 10c0/975fecac2bb7758c062c20d0b3b6288c7cc895219ee25f0a64a9de662dbac981ff0b6e89909c3897c1f84fa353113a721923afdec5f8b2350255b097f12b1f73 + checksum: 10c0/648e273f57cfa9ed67d8a77bdb15b408205465d33da9331808ee3c188d8b55674c9cdbf1f320b65bc562e485e1263360ae62ad355e128e0435891f6430e795d7 languageName: node linkType: hard -"brace-expansion@npm:^2.0.1": - version: 2.0.2 - resolution: "brace-expansion@npm:2.0.2" +"brace-expansion@npm:^2.0.2": + version: 2.1.1 + resolution: "brace-expansion@npm:2.1.1" dependencies: balanced-match: "npm:^1.0.0" - checksum: 10c0/6d117a4c793488af86b83172deb6af143e94c17bc53b0b3cec259733923b4ca84679d506ac261f4ba3c7ed37c46018e2ff442f9ce453af8643ecd64f4a54e6cf + checksum: 10c0/63b5ddce608b70b50a76817c0526faf8ea67a9180073d88bb402f6bbc22a22da6b1dfac4f65efc53e5faa80222fb7d44bbf2fc638c3f55365975573f671d0ccb + languageName: node + linkType: hard + +"brace-expansion@npm:^5.0.5": + version: 5.0.6 + resolution: "brace-expansion@npm:5.0.6" + dependencies: + balanced-match: "npm:^4.0.2" + checksum: 10c0/8c919869b90f61d533b341d3340be5ee4413232ea89b8246cbc2f38eb014f1d8182785c98a006eaf6111d02dc9eeffefdc240d5ac158625b2ed084dccd4bbf9b languageName: node linkType: hard @@ -8712,10 +8190,10 @@ __metadata: languageName: node linkType: hard -"chai@npm:^6.2.1": - version: 6.2.1 - resolution: "chai@npm:6.2.1" - checksum: 10c0/0c2d84392d7c6d44ca5d14d94204f1760e22af68b83d1f4278b5c4d301dabfc0242da70954dd86b1eda01e438f42950de6cf9d569df2103678538e4014abe50b +"chai@npm:^6.2.2": + version: 6.2.2 + resolution: "chai@npm:6.2.2" + checksum: 10c0/e6c69e5f0c11dffe6ea13d0290936ebb68fcc1ad688b8e952e131df6a6d5797d5e860bc55cef1aca2e950c3e1f96daf79e9d5a70fb7dbaab4e46355e2635ed53 languageName: node linkType: hard @@ -9536,7 +9014,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:^4.4.3, debug@npm:~4.4.1": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.7, debug@npm:^4.4.0, debug@npm:^4.4.3, debug@npm:~4.4.1": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -9812,15 +9290,15 @@ __metadata: languageName: node linkType: hard -"dompurify@npm:*, dompurify@npm:^3.4.0": - version: 3.4.0 - resolution: "dompurify@npm:3.4.0" +"dompurify@npm:^3.4.11": + version: 3.4.11 + resolution: "dompurify@npm:3.4.11" dependencies: "@types/trusted-types": "npm:^2.0.7" dependenciesMeta: "@types/trusted-types": optional: true - checksum: 10c0/5593ac44ee20b9aa521c2120884effc98927fb9128c548183c75e79e0a04357c62ee913a049a267c8f396cb8c9d520ecf72562826c5524c46d4fe03c12063638 + checksum: 10c0/31439481c7e8fc3805d40c376936fd66936620fb1b1a31a2ec097f6165412c37f2d868e082c9ceba62bb37661c1ea132a5db4d5213434317e30df68d4aca9cc9 languageName: node linkType: hard @@ -9903,13 +9381,13 @@ __metadata: languageName: node linkType: hard -"effect@npm:3.18.4": - version: 3.18.4 - resolution: "effect@npm:3.18.4" +"effect@npm:^3.21.4": + version: 3.21.4 + resolution: "effect@npm:3.21.4" dependencies: "@standard-schema/spec": "npm:^1.0.0" fast-check: "npm:^3.23.1" - checksum: 10c0/086603b2b4e13426b5230e65a8ed9da8db7f00918c2e2c783565b40d5e5f59050148900dd7c9eee56ea0ff2ea48c1dd7e95b0879e1b1025752fbd9027a830f36 + checksum: 10c0/62f676a7e06187e978688b4943a86c827cdd75b8701c5cb783d2e5cc9e85d7ab6ac631c3d5f3abe67c706e455fabca615cddca19a969a5dd414947f982b2ba1a languageName: node linkType: hard @@ -10231,13 +9709,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^1.7.0": - version: 1.7.0 - resolution: "es-module-lexer@npm:1.7.0" - checksum: 10c0/4c935affcbfeba7fb4533e1da10fa8568043df1e3574b869385980de9e2d475ddc36769891936dbb07036edb3c3786a8b78ccf44964cd130dedc1f2c984b6c7b - languageName: node - linkType: hard - "es-module-lexer@npm:^2.0.0": version: 2.0.0 resolution: "es-module-lexer@npm:2.0.0" @@ -10288,344 +9759,77 @@ __metadata: "es-toolkit@npm:^1.39.3": version: 1.42.0 - resolution: "es-toolkit@npm:1.42.0" - dependenciesMeta: - "@trivago/prettier-plugin-sort-imports@4.3.0": - unplugged: true - prettier-plugin-sort-re-exports@0.0.1: - unplugged: true - checksum: 10c0/ee577b23336296116be423a5d01a6af827c80a10971507ae26cdb146b60ce0a930bf7bdb719ac0dc4f962ec74542a2423b934e24eb47efe1bc911862b12da109 - languageName: node - linkType: hard - -"es6-promise@npm:^4.2.8": - version: 4.2.8 - resolution: "es6-promise@npm:4.2.8" - checksum: 10c0/2373d9c5e9a93bdd9f9ed32ff5cb6dd3dd785368d1c21e9bbbfd07d16345b3774ae260f2bd24c8f836a6903f432b4151e7816a7fa8891ccb4e1a55a028ec42c3 - languageName: node - linkType: hard - -"esast-util-from-estree@npm:^2.0.0": - version: 2.0.0 - resolution: "esast-util-from-estree@npm:2.0.0" - dependencies: - "@types/estree-jsx": "npm:^1.0.0" - devlop: "npm:^1.0.0" - estree-util-visit: "npm:^2.0.0" - unist-util-position-from-estree: "npm:^2.0.0" - checksum: 10c0/6c619bc6963314f8f64b32e3b101b321bf121f659e62b11e70f425619c2db6f1d25f4c594a57fd00908da96c67d9bfbf876eb5172abf9e13f47a71796f6630ff - languageName: node - linkType: hard - -"esast-util-from-js@npm:^2.0.0": - version: 2.0.1 - resolution: "esast-util-from-js@npm:2.0.1" - dependencies: - "@types/estree-jsx": "npm:^1.0.0" - acorn: "npm:^8.0.0" - esast-util-from-estree: "npm:^2.0.0" - vfile-message: "npm:^4.0.0" - checksum: 10c0/3a446fb0b0d7bcd7e0157aa44b3b692802a08c93edbea81cc0f7fe4437bfdfb4b72e4563fe63b4e36d390086b71185dba4ac921f4180cc6349985c263cc74421 - languageName: node - linkType: hard - -"esbuild@npm:0.25.10": - version: 0.25.10 - resolution: "esbuild@npm:0.25.10" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.10" - "@esbuild/android-arm": "npm:0.25.10" - "@esbuild/android-arm64": "npm:0.25.10" - "@esbuild/android-x64": "npm:0.25.10" - "@esbuild/darwin-arm64": "npm:0.25.10" - "@esbuild/darwin-x64": "npm:0.25.10" - "@esbuild/freebsd-arm64": "npm:0.25.10" - "@esbuild/freebsd-x64": "npm:0.25.10" - "@esbuild/linux-arm": "npm:0.25.10" - "@esbuild/linux-arm64": "npm:0.25.10" - "@esbuild/linux-ia32": "npm:0.25.10" - "@esbuild/linux-loong64": "npm:0.25.10" - "@esbuild/linux-mips64el": "npm:0.25.10" - "@esbuild/linux-ppc64": "npm:0.25.10" - "@esbuild/linux-riscv64": "npm:0.25.10" - "@esbuild/linux-s390x": "npm:0.25.10" - "@esbuild/linux-x64": "npm:0.25.10" - "@esbuild/netbsd-arm64": "npm:0.25.10" - "@esbuild/netbsd-x64": "npm:0.25.10" - "@esbuild/openbsd-arm64": "npm:0.25.10" - "@esbuild/openbsd-x64": "npm:0.25.10" - "@esbuild/openharmony-arm64": "npm:0.25.10" - "@esbuild/sunos-x64": "npm:0.25.10" - "@esbuild/win32-arm64": "npm:0.25.10" - "@esbuild/win32-ia32": "npm:0.25.10" - "@esbuild/win32-x64": "npm:0.25.10" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/8ee5fdd43ed0d4092ce7f41577c63147f54049d5617763f0549c638bbe939e8adaa8f1a2728adb63417eb11df51956b7b0d8eb88ee08c27ad1d42960256158fa - languageName: node - linkType: hard - -"esbuild@npm:^0.25.0, esbuild@npm:^0.25.11": - version: 0.25.12 - resolution: "esbuild@npm:0.25.12" - dependencies: - "@esbuild/aix-ppc64": "npm:0.25.12" - "@esbuild/android-arm": "npm:0.25.12" - "@esbuild/android-arm64": "npm:0.25.12" - "@esbuild/android-x64": "npm:0.25.12" - "@esbuild/darwin-arm64": "npm:0.25.12" - "@esbuild/darwin-x64": "npm:0.25.12" - "@esbuild/freebsd-arm64": "npm:0.25.12" - "@esbuild/freebsd-x64": "npm:0.25.12" - "@esbuild/linux-arm": "npm:0.25.12" - "@esbuild/linux-arm64": "npm:0.25.12" - "@esbuild/linux-ia32": "npm:0.25.12" - "@esbuild/linux-loong64": "npm:0.25.12" - "@esbuild/linux-mips64el": "npm:0.25.12" - "@esbuild/linux-ppc64": "npm:0.25.12" - "@esbuild/linux-riscv64": "npm:0.25.12" - "@esbuild/linux-s390x": "npm:0.25.12" - "@esbuild/linux-x64": "npm:0.25.12" - "@esbuild/netbsd-arm64": "npm:0.25.12" - "@esbuild/netbsd-x64": "npm:0.25.12" - "@esbuild/openbsd-arm64": "npm:0.25.12" - "@esbuild/openbsd-x64": "npm:0.25.12" - "@esbuild/openharmony-arm64": "npm:0.25.12" - "@esbuild/sunos-x64": "npm:0.25.12" - "@esbuild/win32-arm64": "npm:0.25.12" - "@esbuild/win32-ia32": "npm:0.25.12" - "@esbuild/win32-x64": "npm:0.25.12" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/c205357531423220a9de8e1e6c6514242bc9b1666e762cd67ccdf8fdfdc3f1d0bd76f8d9383958b97ad4c953efdb7b6e8c1f9ca5951cd2b7c5235e8755b34a6b - languageName: node - linkType: hard - -"esbuild@npm:^0.27.0": - version: 0.27.7 - resolution: "esbuild@npm:0.27.7" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.7" - "@esbuild/android-arm": "npm:0.27.7" - "@esbuild/android-arm64": "npm:0.27.7" - "@esbuild/android-x64": "npm:0.27.7" - "@esbuild/darwin-arm64": "npm:0.27.7" - "@esbuild/darwin-x64": "npm:0.27.7" - "@esbuild/freebsd-arm64": "npm:0.27.7" - "@esbuild/freebsd-x64": "npm:0.27.7" - "@esbuild/linux-arm": "npm:0.27.7" - "@esbuild/linux-arm64": "npm:0.27.7" - "@esbuild/linux-ia32": "npm:0.27.7" - "@esbuild/linux-loong64": "npm:0.27.7" - "@esbuild/linux-mips64el": "npm:0.27.7" - "@esbuild/linux-ppc64": "npm:0.27.7" - "@esbuild/linux-riscv64": "npm:0.27.7" - "@esbuild/linux-s390x": "npm:0.27.7" - "@esbuild/linux-x64": "npm:0.27.7" - "@esbuild/netbsd-arm64": "npm:0.27.7" - "@esbuild/netbsd-x64": "npm:0.27.7" - "@esbuild/openbsd-arm64": "npm:0.27.7" - "@esbuild/openbsd-x64": "npm:0.27.7" - "@esbuild/openharmony-arm64": "npm:0.27.7" - "@esbuild/sunos-x64": "npm:0.27.7" - "@esbuild/win32-arm64": "npm:0.27.7" - "@esbuild/win32-ia32": "npm:0.27.7" - "@esbuild/win32-x64": "npm:0.27.7" - dependenciesMeta: - "@esbuild/aix-ppc64": - optional: true - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-arm64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-arm64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/openharmony-arm64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: 10c0/ccd51f0555708bc9ff4ec9dc3ac92d3daacd45ecaac949ca8645984c5c323bf8cefe98c2df307418685e0b4ce37f9a3bdbfe8e3651fe632a0059a436195a17d4 - languageName: node - linkType: hard - -"esbuild@npm:~0.27.0": - version: 0.27.1 - resolution: "esbuild@npm:0.27.1" - dependencies: - "@esbuild/aix-ppc64": "npm:0.27.1" - "@esbuild/android-arm": "npm:0.27.1" - "@esbuild/android-arm64": "npm:0.27.1" - "@esbuild/android-x64": "npm:0.27.1" - "@esbuild/darwin-arm64": "npm:0.27.1" - "@esbuild/darwin-x64": "npm:0.27.1" - "@esbuild/freebsd-arm64": "npm:0.27.1" - "@esbuild/freebsd-x64": "npm:0.27.1" - "@esbuild/linux-arm": "npm:0.27.1" - "@esbuild/linux-arm64": "npm:0.27.1" - "@esbuild/linux-ia32": "npm:0.27.1" - "@esbuild/linux-loong64": "npm:0.27.1" - "@esbuild/linux-mips64el": "npm:0.27.1" - "@esbuild/linux-ppc64": "npm:0.27.1" - "@esbuild/linux-riscv64": "npm:0.27.1" - "@esbuild/linux-s390x": "npm:0.27.1" - "@esbuild/linux-x64": "npm:0.27.1" - "@esbuild/netbsd-arm64": "npm:0.27.1" - "@esbuild/netbsd-x64": "npm:0.27.1" - "@esbuild/openbsd-arm64": "npm:0.27.1" - "@esbuild/openbsd-x64": "npm:0.27.1" - "@esbuild/openharmony-arm64": "npm:0.27.1" - "@esbuild/sunos-x64": "npm:0.27.1" - "@esbuild/win32-arm64": "npm:0.27.1" - "@esbuild/win32-ia32": "npm:0.27.1" - "@esbuild/win32-x64": "npm:0.27.1" + resolution: "es-toolkit@npm:1.42.0" + dependenciesMeta: + "@trivago/prettier-plugin-sort-imports@4.3.0": + unplugged: true + prettier-plugin-sort-re-exports@0.0.1: + unplugged: true + checksum: 10c0/ee577b23336296116be423a5d01a6af827c80a10971507ae26cdb146b60ce0a930bf7bdb719ac0dc4f962ec74542a2423b934e24eb47efe1bc911862b12da109 + languageName: node + linkType: hard + +"es6-promise@npm:^4.2.8": + version: 4.2.8 + resolution: "es6-promise@npm:4.2.8" + checksum: 10c0/2373d9c5e9a93bdd9f9ed32ff5cb6dd3dd785368d1c21e9bbbfd07d16345b3774ae260f2bd24c8f836a6903f432b4151e7816a7fa8891ccb4e1a55a028ec42c3 + languageName: node + linkType: hard + +"esast-util-from-estree@npm:^2.0.0": + version: 2.0.0 + resolution: "esast-util-from-estree@npm:2.0.0" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + devlop: "npm:^1.0.0" + estree-util-visit: "npm:^2.0.0" + unist-util-position-from-estree: "npm:^2.0.0" + checksum: 10c0/6c619bc6963314f8f64b32e3b101b321bf121f659e62b11e70f425619c2db6f1d25f4c594a57fd00908da96c67d9bfbf876eb5172abf9e13f47a71796f6630ff + languageName: node + linkType: hard + +"esast-util-from-js@npm:^2.0.0": + version: 2.0.1 + resolution: "esast-util-from-js@npm:2.0.1" + dependencies: + "@types/estree-jsx": "npm:^1.0.0" + acorn: "npm:^8.0.0" + esast-util-from-estree: "npm:^2.0.0" + vfile-message: "npm:^4.0.0" + checksum: 10c0/3a446fb0b0d7bcd7e0157aa44b3b692802a08c93edbea81cc0f7fe4437bfdfb4b72e4563fe63b4e36d390086b71185dba4ac921f4180cc6349985c263cc74421 + languageName: node + linkType: hard + +"esbuild@npm:^0.28.1": + version: 0.28.1 + resolution: "esbuild@npm:0.28.1" + dependencies: + "@esbuild/aix-ppc64": "npm:0.28.1" + "@esbuild/android-arm": "npm:0.28.1" + "@esbuild/android-arm64": "npm:0.28.1" + "@esbuild/android-x64": "npm:0.28.1" + "@esbuild/darwin-arm64": "npm:0.28.1" + "@esbuild/darwin-x64": "npm:0.28.1" + "@esbuild/freebsd-arm64": "npm:0.28.1" + "@esbuild/freebsd-x64": "npm:0.28.1" + "@esbuild/linux-arm": "npm:0.28.1" + "@esbuild/linux-arm64": "npm:0.28.1" + "@esbuild/linux-ia32": "npm:0.28.1" + "@esbuild/linux-loong64": "npm:0.28.1" + "@esbuild/linux-mips64el": "npm:0.28.1" + "@esbuild/linux-ppc64": "npm:0.28.1" + "@esbuild/linux-riscv64": "npm:0.28.1" + "@esbuild/linux-s390x": "npm:0.28.1" + "@esbuild/linux-x64": "npm:0.28.1" + "@esbuild/netbsd-arm64": "npm:0.28.1" + "@esbuild/netbsd-x64": "npm:0.28.1" + "@esbuild/openbsd-arm64": "npm:0.28.1" + "@esbuild/openbsd-x64": "npm:0.28.1" + "@esbuild/openharmony-arm64": "npm:0.28.1" + "@esbuild/sunos-x64": "npm:0.28.1" + "@esbuild/win32-arm64": "npm:0.28.1" + "@esbuild/win32-ia32": "npm:0.28.1" + "@esbuild/win32-x64": "npm:0.28.1" dependenciesMeta: "@esbuild/aix-ppc64": optional: true @@ -10681,7 +9885,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: 10c0/8bfcf13a499a9e7b7da4b68273e12b453c7d7a5e39c944c2e5a4c64a0594d6df1391fc168a5353c22bc94eeae38dd9897199ddbbc4973525b0aae18186e996bd + checksum: 10c0/29cd456a79ce35ac2c7e05fe871330416b2c395c045d849653f843e51378d6e0d6e774d6dcd01b35f4e83238a29bf8decd04fcd34b3780c589a250b21e5f92bb languageName: node linkType: hard @@ -11143,10 +10347,10 @@ __metadata: languageName: node linkType: hard -"expect-type@npm:^1.2.2": - version: 1.3.0 - resolution: "expect-type@npm:1.3.0" - checksum: 10c0/8412b3fe4f392c420ab41dae220b09700e4e47c639a29ba7ba2e83cc6cffd2b4926f7ac9e47d7e277e8f4f02acda76fd6931cb81fd2b382fa9477ef9ada953fd +"expect-type@npm:^1.3.0": + version: 1.4.0 + resolution: "expect-type@npm:1.4.0" + checksum: 10c0/d40d76b8570695d36587beb3cc28494da2ca3ec8f04e67f5622ed2d372d850e401a9adef19c6835e1a8173903f157c79540b34c7b3fbd7cd8ce726cc903c57b7 languageName: node linkType: hard @@ -11255,7 +10459,7 @@ __metadata: languageName: node linkType: hard -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": +"fast-deep-equal@npm:^3.1.3": version: 3.1.3 resolution: "fast-deep-equal@npm:3.1.3" checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 @@ -11295,13 +10499,6 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b - languageName: node - linkType: hard - "fast-levenshtein@npm:^2.0.6": version: 2.0.6 resolution: "fast-levenshtein@npm:2.0.6" @@ -11323,32 +10520,36 @@ __metadata: languageName: node linkType: hard -"fast-uri@npm:^3.0.1": - version: 3.1.0 - resolution: "fast-uri@npm:3.1.0" - checksum: 10c0/44364adca566f70f40d1e9b772c923138d47efeac2ae9732a872baafd77061f26b097ba2f68f0892885ad177becd065520412b8ffeec34b16c99433c5b9e2de7 +"fast-uri@npm:^4.0.0": + version: 4.0.0 + resolution: "fast-uri@npm:4.0.0" + checksum: 10c0/cbe355ec2616529e657e04aa37f91949b31a4e45d6a0b342bba09c078dd468922dd24a96089a445cf9262b40fac88572662c639a0ce5602205e32e12922d4262 languageName: node linkType: hard -"fast-xml-parser@npm:5.2.5": - version: 5.2.5 - resolution: "fast-xml-parser@npm:5.2.5" +"fast-xml-builder@npm:^1.2.0": + version: 1.2.0 + resolution: "fast-xml-builder@npm:1.2.0" dependencies: - strnum: "npm:^2.1.0" - bin: - fxparser: src/cli/cli.js - checksum: 10c0/d1057d2e790c327ccfc42b872b91786a4912a152d44f9507bf053f800102dfb07ece3da0a86b33ff6a0caa5a5cad86da3326744f6ae5efb0c6c571d754fe48cd + path-expression-matcher: "npm:^1.5.0" + xml-naming: "npm:^0.1.0" + checksum: 10c0/84bb105cd04e91d6dcb746c4dbaeb12903b510e7ab9a06ffde55b5a582e005559a87d84467f18a655c6c4baf098f696fd74cee3cbe1aea9d01385907768ba32d languageName: node linkType: hard -"fast-xml-parser@npm:^4.5.0": - version: 4.5.3 - resolution: "fast-xml-parser@npm:4.5.3" - dependencies: - strnum: "npm:^1.1.1" +"fast-xml-parser@npm:^5.7.0": + version: 5.9.3 + resolution: "fast-xml-parser@npm:5.9.3" + dependencies: + "@nodable/entities": "npm:^2.2.0" + fast-xml-builder: "npm:^1.2.0" + is-unsafe: "npm:^1.0.1" + path-expression-matcher: "npm:^1.5.0" + strnum: "npm:^2.4.1" + xml-naming: "npm:^0.1.0" bin: fxparser: src/cli/cli.js - checksum: 10c0/bf9ccadacfadc95f6e3f0e7882a380a7f219cf0a6f96575149f02cb62bf44c3b7f0daee75b8ff3847bcfd7fbcb201e402c71045936c265cf6d94b141ec4e9327 + checksum: 10c0/0f4f4b98aec027334be1d4462c6e09649bda8dd8bd1c75f6e985f4000ce4a40ea4540745fa7ac081cd65bf462b0c22fce87da9abc5ede51c9727398c91cacd5f languageName: node linkType: hard @@ -11465,7 +10666,7 @@ __metadata: languageName: node linkType: hard -"flatted@npm:^3.2.9, flatted@npm:^3.3.3": +"flatted@npm:^3.2.9, flatted@npm:^3.4.2": version: 3.4.2 resolution: "flatted@npm:3.4.2" checksum: 10c0/a65b67aae7172d6cdf63691be7de6c5cd5adbdfdfe2e9da1a09b617c9512ed794037741ee53d93114276bff3f93cd3b0d97d54f9b316e1e4885dde6e9ffdf7ed @@ -11498,16 +10699,16 @@ __metadata: languageName: node linkType: hard -"form-data@npm:^4.0.0, form-data@npm:^4.0.3, form-data@npm:^4.0.4": - version: 4.0.5 - resolution: "form-data@npm:4.0.5" +"form-data@npm:^4.0.6": + version: 4.0.6 + resolution: "form-data@npm:4.0.6" dependencies: asynckit: "npm:^0.4.0" combined-stream: "npm:^1.0.8" es-set-tostringtag: "npm:^2.1.0" - hasown: "npm:^2.0.2" - mime-types: "npm:^2.1.12" - checksum: 10c0/dd6b767ee0bbd6d84039db12a0fa5a2028160ffbfaba1800695713b46ae974a5f6e08b3356c3195137f8530dcd9dfcb5d5ae1eeff53d0db1e5aad863b619ce3b + hasown: "npm:^2.0.4" + mime-types: "npm:^2.1.35" + checksum: 10c0/43947a77bf0ff45c6ceed789778982d47a3f3e720a74b71721174ebf3310a5f1a8be1d6b38a3ee3688e8a18a2c4273073ec0844cd37efda3eaf46d41c9c318ff languageName: node linkType: hard @@ -12109,6 +11310,15 @@ __metadata: languageName: node linkType: hard +"hasown@npm:^2.0.4": + version: 2.0.4 + resolution: "hasown@npm:2.0.4" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/2d8de939e270b70618f8cebb69746620db10617dbb495bc66ddad326955ea24d3ca4af133aff3eb7c1853e0218f867bc2b050ec26fe02e3aea58f880ffc5e506 + languageName: node + linkType: hard + "hast-util-to-estree@npm:^3.0.0, hast-util-to-estree@npm:^3.1.3": version: 3.1.3 resolution: "hast-util-to-estree@npm:3.1.3" @@ -12508,10 +11718,10 @@ __metadata: languageName: node linkType: hard -"ip-address@npm:^10.0.1": - version: 10.1.0 - resolution: "ip-address@npm:10.1.0" - checksum: 10c0/0103516cfa93f6433b3bd7333fa876eb21263912329bfa47010af5e16934eeeff86f3d2ae700a3744a137839ddfad62b900c7a445607884a49b5d1e32a3d7566 +"ip-address@npm:^10.2.0": + version: 10.2.0 + resolution: "ip-address@npm:10.2.0" + checksum: 10c0/5a00aada6e922c9c69dfc800ed5d0fa3348675ebdeed0e1575f503f27ca385b5f534363c9af7ad1daf64c1f1409388cdd3cc2e9b9b0fe1c924a431378d55075a languageName: node linkType: hard @@ -12848,6 +12058,13 @@ __metadata: languageName: node linkType: hard +"is-unsafe@npm:^1.0.1": + version: 1.0.1 + resolution: "is-unsafe@npm:1.0.1" + checksum: 10c0/93c6d4784dee35f32357718bad5b39f9ec6cd051e2103885a803e673a9b408f46bd87c4776eed4f9742f9f35b0d83e6411549c6afcd01884ded1aa8fbbc651b9 + languageName: node + linkType: hard + "is-weakmap@npm:^2.0.2": version: 2.0.2 resolution: "is-weakmap@npm:2.0.2" @@ -12913,17 +12130,6 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-source-maps@npm:^5.0.6": - version: 5.0.6 - resolution: "istanbul-lib-source-maps@npm:5.0.6" - dependencies: - "@jridgewell/trace-mapping": "npm:^0.3.23" - debug: "npm:^4.1.1" - istanbul-lib-coverage: "npm:^3.0.0" - checksum: 10c0/ffe75d70b303a3621ee4671554f306e0831b16f39ab7f4ab52e54d356a5d33e534d97563e318f1333a6aae1d42f91ec49c76b6cd3f3fb378addcb5c81da0255f - languageName: node - linkType: hard - "istanbul-reports@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-reports@npm:3.2.0" @@ -12995,6 +12201,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^10.0.0": + version: 10.0.0 + resolution: "js-tokens@npm:10.0.0" + checksum: 10c0/a93498747812ba3e0c8626f95f75ab29319f2a13613a0de9e610700405760931624433a0de59eb7c27ff8836e526768fb20783861b86ef89be96676f2c996b64 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -13002,21 +12215,14 @@ __metadata: languageName: node linkType: hard -"js-tokens@npm:^9.0.1": - version: 9.0.1 - resolution: "js-tokens@npm:9.0.1" - checksum: 10c0/68dcab8f233dde211a6b5fd98079783cbcd04b53617c1250e3553ee16ab3e6134f5e65478e41d82f6d351a052a63d71024553933808570f04dbf828d7921e80e - languageName: node - linkType: hard - -"js-yaml@npm:^4.1.0, js-yaml@npm:^4.1.1": - version: 4.1.1 - resolution: "js-yaml@npm:4.1.1" +"js-yaml@npm:^4.2.0": + version: 4.2.0 + resolution: "js-yaml@npm:4.2.0" dependencies: argparse: "npm:^2.0.1" bin: js-yaml: bin/js-yaml.js - checksum: 10c0/561c7d7088c40a9bb53cc75becbfb1df6ae49b34b5e6e5a81744b14ae8667ec564ad2527709d1a6e7d5e5fa6d483aa0f373a50ad98d42fde368ec4a190d4fae7 + checksum: 10c0/1916456c118746603b067d74bbcbb0445d9a1d5e474ad4ae775e7b20525bed902e01d9d97dd0c81fcd8d4f596162309d0eb057f4aa38f3e9647f14075e9dea45 languageName: node linkType: hard @@ -13059,13 +12265,6 @@ __metadata: languageName: node linkType: hard -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce - languageName: node - linkType: hard - "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -13457,7 +12656,7 @@ __metadata: languageName: node linkType: hard -"linkify-it@npm:5.0.0, linkify-it@npm:^5.0.0": +"linkify-it@npm:5.0.0": version: 5.0.0 resolution: "linkify-it@npm:5.0.0" dependencies: @@ -13466,6 +12665,15 @@ __metadata: languageName: node linkType: hard +"linkify-it@npm:^5.0.1": + version: 5.0.1 + resolution: "linkify-it@npm:5.0.1" + dependencies: + uc.micro: "npm:^2.0.0" + checksum: 10c0/d06d04f1ed03be131740fc900a5e74ea1f49886b052213599e306d469d5ffe2303db76dd8f771de9f28e2b0b38852de22ec46ae597d245f8b66439b0ceb19b10 + languageName: node + linkType: hard + "linkifyjs@npm:^4.3.2": version: 4.3.2 resolution: "linkifyjs@npm:4.3.2" @@ -13677,14 +12885,14 @@ __metadata: languageName: node linkType: hard -"magicast@npm:^0.5.1": - version: 0.5.1 - resolution: "magicast@npm:0.5.1" +"magicast@npm:^0.5.2": + version: 0.5.3 + resolution: "magicast@npm:0.5.3" dependencies: - "@babel/parser": "npm:^7.28.5" - "@babel/types": "npm:^7.28.5" + "@babel/parser": "npm:^7.29.3" + "@babel/types": "npm:^7.29.0" source-map-js: "npm:^1.2.1" - checksum: 10c0/a00bbf3688b9b3e83c10b3bfe3f106cc2ccbf20c4f2dc1c9020a10556dfe0a6a6605a445ee8e86a6e2b484ec519a657b5e405532684f72678c62e4c0d32f962c + checksum: 10c0/e288c027ae5f2a794a59148cb114f4b60f1d5c03090de6c60b4d187f12d1de9158779cd7c39cea391609f4f10cd7ea737929f25f7ce44f7a96ba96ec1a477e39 languageName: node linkType: hard @@ -13773,19 +12981,19 @@ __metadata: languageName: node linkType: hard -"markdown-it@npm:^14.0.0": - version: 14.1.1 - resolution: "markdown-it@npm:14.1.1" +"markdown-it@npm:^14.2.0": + version: 14.2.0 + resolution: "markdown-it@npm:14.2.0" dependencies: argparse: "npm:^2.0.1" entities: "npm:^4.4.0" - linkify-it: "npm:^5.0.0" + linkify-it: "npm:^5.0.1" mdurl: "npm:^2.0.0" punycode.js: "npm:^2.3.1" uc.micro: "npm:^2.1.0" bin: markdown-it: bin/markdown-it.mjs - checksum: 10c0/c67f2a4c8069a307c78d8c15104bbcb15a2c6b17f4c904364ca218ec2eccf76a397eba1ea05f5ac5de72c4b67fcf115d422d22df0bfb86a09b663f55b9478d4f + checksum: 10c0/1d3a50061d2fe4efbcf317aac853dbee6892ed6f5a217570eead723f2ef2dd1c9baaeef5a687cd283480c45c2d20724a73e84a9ed72843cf7b3b719067af40ef languageName: node linkType: hard @@ -14559,7 +13767,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.12, mime-types@npm:^2.1.27, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.27, mime-types@npm:^2.1.35, mime-types@npm:~2.1.24, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -14618,30 +13826,30 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^10.1.1": - version: 10.1.1 - resolution: "minimatch@npm:10.1.1" +"minimatch@npm:^10.2.3": + version: 10.2.5 + resolution: "minimatch@npm:10.2.5" dependencies: - "@isaacs/brace-expansion": "npm:^5.0.0" - checksum: 10c0/c85d44821c71973d636091fddbfbffe62370f5ee3caf0241c5b60c18cd289e916200acb2361b7e987558cd06896d153e25d505db9fc1e43e6b4b6752e2702902 + brace-expansion: "npm:^5.0.5" + checksum: 10c0/6bb058bd6324104b9ec2f763476a35386d05079c1f5fe4fbf1f324a25237cd4534d6813ecd71f48208f4e635c1221899bef94c3c89f7df55698fe373aaae20fd languageName: node linkType: hard -"minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" +"minimatch@npm:^3.1.4": + version: 3.1.5 + resolution: "minimatch@npm:3.1.5" dependencies: brace-expansion: "npm:^1.1.7" - checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + checksum: 10c0/2ecbdc0d33f07bddb0315a8b5afbcb761307a8778b48f0b312418ccbced99f104a2d17d8aca7573433c70e8ccd1c56823a441897a45e384ea76ef401a26ace70 languageName: node linkType: hard -"minimatch@npm:^9.0.4": - version: 9.0.5 - resolution: "minimatch@npm:9.0.5" +"minimatch@npm:^9.0.7": + version: 9.0.9 + resolution: "minimatch@npm:9.0.9" dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + brace-expansion: "npm:^2.0.2" + checksum: 10c0/0b6a58530dbb00361745aa6c8cffaba4c90f551afe7c734830bd95fd88ebf469dd7355a027824ea1d09e37181cfeb0a797fb17df60c15ac174303ac110eb7e86 languageName: node linkType: hard @@ -14728,7 +13936,7 @@ __metadata: languageName: node linkType: hard -"module-punycode@npm:punycode@2.3.1, punycode@npm:^2.1.0": +"module-punycode@npm:punycode@2.3.1": version: 2.3.1 resolution: "punycode@npm:2.3.1" checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 @@ -14828,15 +14036,15 @@ __metadata: languageName: node linkType: hard -"multer@npm:^2.1.1": - version: 2.1.1 - resolution: "multer@npm:2.1.1" +"multer@npm:^2.2.0": + version: 2.2.0 + resolution: "multer@npm:2.2.0" dependencies: append-field: "npm:^1.0.0" busboy: "npm:^1.6.0" concat-stream: "npm:^2.0.0" type-is: "npm:^1.6.18" - checksum: 10c0/2ec4e02833b20f403cfb879d4b64d2a9070d902b9deae7aef18a6faadb707d7665385456cf540aa8a6dadfe3d4c5fc8e0e7b0675b94e1077048b1125426deee6 + checksum: 10c0/7aa366d89042427347b6ab8e4a203405d7fe942e4a3095648a14526fcf3691d98ffc2da62abf85d8aca0a341f828168eb197b33cfdcfcce29d6ef593a5625591 languageName: node linkType: hard @@ -14851,12 +14059,12 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.3.11, nanoid@npm:^3.3.6": - version: 3.3.11 - resolution: "nanoid@npm:3.3.11" +"nanoid@npm:^3.3.12": + version: 3.3.15 + resolution: "nanoid@npm:3.3.15" bin: nanoid: bin/nanoid.cjs - checksum: 10c0/40e7f70b3d15f725ca072dfc4f74e81fcf1fbb02e491cf58ac0c79093adc9b0a73b152bcde57df4b79cd097e13023d7504acb38404a4da7bc1cd8e887b82fe0b + checksum: 10c0/e0b12e3a1d361f74150fa4b25631d0ae29f7162dab01a12f0f1be1f53b7a2a219f9b729504e474d4821207d0fe349bd3c97569ab5cf7ec2fff6aa94711956c93 languageName: node linkType: hard @@ -14946,78 +14154,19 @@ __metadata: languageName: node linkType: hard -"next@npm:16.0.1": - version: 16.0.1 - resolution: "next@npm:16.0.1" - dependencies: - "@next/env": "npm:16.0.1" - "@next/swc-darwin-arm64": "npm:16.0.1" - "@next/swc-darwin-x64": "npm:16.0.1" - "@next/swc-linux-arm64-gnu": "npm:16.0.1" - "@next/swc-linux-arm64-musl": "npm:16.0.1" - "@next/swc-linux-x64-gnu": "npm:16.0.1" - "@next/swc-linux-x64-musl": "npm:16.0.1" - "@next/swc-win32-arm64-msvc": "npm:16.0.1" - "@next/swc-win32-x64-msvc": "npm:16.0.1" - "@swc/helpers": "npm:0.5.15" - caniuse-lite: "npm:^1.0.30001579" - postcss: "npm:8.4.31" - sharp: "npm:^0.34.4" - styled-jsx: "npm:5.1.6" - peerDependencies: - "@opentelemetry/api": ^1.1.0 - "@playwright/test": ^1.51.1 - babel-plugin-react-compiler: "*" - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - dependenciesMeta: - "@next/swc-darwin-arm64": - optional: true - "@next/swc-darwin-x64": - optional: true - "@next/swc-linux-arm64-gnu": - optional: true - "@next/swc-linux-arm64-musl": - optional: true - "@next/swc-linux-x64-gnu": - optional: true - "@next/swc-linux-x64-musl": - optional: true - "@next/swc-win32-arm64-msvc": - optional: true - "@next/swc-win32-x64-msvc": - optional: true - sharp: - optional: true - peerDependenciesMeta: - "@opentelemetry/api": - optional: true - "@playwright/test": - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - bin: - next: dist/bin/next - checksum: 10c0/91390fe601d39e54306f303f0d53cd20b7eef6f1496a0e32246dcb87ddba212a20e3aa887c96ff51ed27e8585892dfb639a4f3210af1b43f5f9018740ac2795f - languageName: node - linkType: hard - -"next@npm:^16.2.3": - version: 16.2.3 - resolution: "next@npm:16.2.3" +"next@npm:^16.2.6": + version: 16.2.9 + resolution: "next@npm:16.2.9" dependencies: - "@next/env": "npm:16.2.3" - "@next/swc-darwin-arm64": "npm:16.2.3" - "@next/swc-darwin-x64": "npm:16.2.3" - "@next/swc-linux-arm64-gnu": "npm:16.2.3" - "@next/swc-linux-arm64-musl": "npm:16.2.3" - "@next/swc-linux-x64-gnu": "npm:16.2.3" - "@next/swc-linux-x64-musl": "npm:16.2.3" - "@next/swc-win32-arm64-msvc": "npm:16.2.3" - "@next/swc-win32-x64-msvc": "npm:16.2.3" + "@next/env": "npm:16.2.9" + "@next/swc-darwin-arm64": "npm:16.2.9" + "@next/swc-darwin-x64": "npm:16.2.9" + "@next/swc-linux-arm64-gnu": "npm:16.2.9" + "@next/swc-linux-arm64-musl": "npm:16.2.9" + "@next/swc-linux-x64-gnu": "npm:16.2.9" + "@next/swc-linux-x64-musl": "npm:16.2.9" + "@next/swc-win32-arm64-msvc": "npm:16.2.9" + "@next/swc-win32-x64-msvc": "npm:16.2.9" "@swc/helpers": "npm:0.5.15" baseline-browser-mapping: "npm:^2.9.19" caniuse-lite: "npm:^1.0.30001579" @@ -15061,7 +14210,7 @@ __metadata: optional: true bin: next: dist/bin/next - checksum: 10c0/8a9d27fc773d69f7f471cf1a23bde2ab2950e0411ef3e0d5c1664ed9654e94c3304eae1c4283ec0fa4e70e7b3f4416913350e118e0c18e8b055693dc5d021883 + checksum: 10c0/8b3ca7364928fccf946a3e855a2af4d0d133138fd966a4300b2c536a5511b6bcf5bdb31183ce917a9489e5c5c95478c8fad432135d9c4c25f3e4b682c4a0c7f4 languageName: node linkType: hard @@ -15149,24 +14298,10 @@ __metadata: languageName: node linkType: hard -"nodemailer@npm:7.0.11": - version: 7.0.11 - resolution: "nodemailer@npm:7.0.11" - checksum: 10c0/208f108fdb4c5dd0e3a2f013578d53dad505cf1b9c7a084f6d22fc9d6f3912daafb4a23793ca568ff848afc35f15f4eb24382d3f6f9fb8ede4a8410d4ca63618 - languageName: node - linkType: hard - -"nodemailer@npm:7.0.13": - version: 7.0.13 - resolution: "nodemailer@npm:7.0.13" - checksum: 10c0/b26aa5b9fa4a033bbc1e1c16ef75ee2a9c8641fd290c00a8361d6a251b3c1b8bad545a23efa627f59cb266340a448891ea8aa49d8a9307c767b8505219d95079 - languageName: node - linkType: hard - -"nodemailer@npm:8.0.5": - version: 8.0.5 - resolution: "nodemailer@npm:8.0.5" - checksum: 10c0/5e8450499bd059c56d74ba96fa5f9928de2ecdae0d53c083dba5661d797114c1f9524d30f992d0263cc5a7dcf5a54b9c1d92dc1f766da150c9d0bde7d3798431 +"nodemailer@npm:^9.0.1": + version: 9.0.1 + resolution: "nodemailer@npm:9.0.1" + checksum: 10c0/4213f01aa211127c1ce33243c5e45e7f831601a933d03fa864cd827b1bd5ea2782cb4b43722bee7028cbc193733d9802dad1120fe67181448eb0b7de52218a37 languageName: node linkType: hard @@ -15677,6 +14812,13 @@ __metadata: languageName: node linkType: hard +"path-expression-matcher@npm:^1.5.0": + version: 1.6.1 + resolution: "path-expression-matcher@npm:1.6.1" + checksum: 10c0/6d3bee01db16d8d3ad799aa6179785357a1277e227a44a4bff3ed5c7fcfb37325db596492c06356d8c82c097381c868ebc61b2e46a9363b35a1e007b7b902ee8 + languageName: node + linkType: hard + "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -15701,17 +14843,17 @@ __metadata: languageName: node linkType: hard -"path-to-regexp@npm:^8.0.0, path-to-regexp@npm:^8.3.0": - version: 8.3.0 - resolution: "path-to-regexp@npm:8.3.0" - checksum: 10c0/ee1544a73a3f294a97a4c663b0ce71bbf1621d732d80c9c9ed201b3e911a86cb628ebad691b9d40f40a3742fe22011e5a059d8eed2cf63ec2cb94f6fb4efe67c +"path-to-regexp@npm:^0.1.13": + version: 0.1.13 + resolution: "path-to-regexp@npm:0.1.13" + checksum: 10c0/1cae3921739c154a8926e136185a10c916f79a249b9072a5001b266d96e193860ca03867e8e8cc808b786862d750f427ed93686bc259355442c3407a62deab1a languageName: node linkType: hard -"path-to-regexp@npm:~0.1.12": - version: 0.1.12 - resolution: "path-to-regexp@npm:0.1.12" - checksum: 10c0/1c6ff10ca169b773f3bba943bbc6a07182e332464704572962d277b900aeee81ac6aa5d060ff9e01149636c30b1f63af6e69dd7786ba6e0ddb39d4dee1f0645b +"path-to-regexp@npm:^8.0.0, path-to-regexp@npm:^8.4.0": + version: 8.4.2 + resolution: "path-to-regexp@npm:8.4.2" + checksum: 10c0/05b115c49b47ad252ce05faa32930f643f23769c68b8bcfe78ad833545140c48bbffb3266986d6c8d5db13a64cf12e07e0d72d9882cab830efeefa553533ebaf languageName: node linkType: hard @@ -15743,17 +14885,10 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": - version: 2.3.2 - resolution: "picomatch@npm:2.3.2" - checksum: 10c0/a554d1709e59be97d1acb9eaedbbc700a5c03dbd4579807baed95100b00420bc729335440ef15004ae2378984e2487a7c1cebd743cfdb72b6fa9ab69223c0d61 - languageName: node - linkType: hard - -"picomatch@npm:^4.0.3": - version: 4.0.3 - resolution: "picomatch@npm:4.0.3" - checksum: 10c0/9582c951e95eebee5434f59e426cddd228a7b97a0161a375aed4be244bd3fe8e3a31b846808ea14ef2c8a2527a6eeab7b3946a67d5979e81694654f939473ae2 +"picomatch@npm:^4.0.4": + version: 4.0.4 + resolution: "picomatch@npm:4.0.4" + checksum: 10c0/e2c6023372cc7b5764719a5ffb9da0f8e781212fa7ca4bd0562db929df8e117460f00dff3cb7509dacfc06b86de924b247f504d0ce1806a37fac4633081466b0 languageName: node linkType: hard @@ -15806,21 +14941,21 @@ __metadata: "@eslint/js": "npm:^9.39.1" "@formatjs/cli": "npm:^6.7.4" "@types/supertest": "npm:^6.0.3" - "@vitest/coverage-v8": "npm:^4.0.14" - "@vitest/ui": "npm:^4.0.14" + "@vitest/coverage-v8": "npm:^4.1.0" + "@vitest/ui": "npm:^4.1.0" dotenv: "npm:^17.0.1" eslint: "npm:^9.27.0" eslint-config-next: "npm:^16.0.1" eslint-config-prettier: "npm:^10.1.5" eslint-plugin-import: "npm:^2.31.0" - form-data: "npm:^4.0.3" + form-data: "npm:^4.0.6" prettier: "npm:^3.5.3" rimraf: "npm:^6.1.2" supertest: "npm:^7.1.4" - turbo: "npm:^2.6.0" + turbo: "npm:^2.9.14" typescript: "npm:^5.7.2" typescript-eslint: "npm:^8.48.0" - vitest: "npm:^4.0.14" + vitest: "npm:^4.1.0" vitest-mock-extended: "npm:^3.1.0" languageName: unknown linkType: soft @@ -15922,25 +15057,14 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.31": - version: 8.4.31 - resolution: "postcss@npm:8.4.31" - dependencies: - nanoid: "npm:^3.3.6" - picocolors: "npm:^1.0.0" - source-map-js: "npm:^1.0.2" - checksum: 10c0/748b82e6e5fc34034dcf2ae88ea3d11fd09f69b6c50ecdd3b4a875cfc7cdca435c958b211e2cb52355422ab6fccb7d8f2f2923161d7a1b281029e4a913d59acf - languageName: node - linkType: hard - -"postcss@npm:^8.4.23, postcss@npm:^8.4.33, postcss@npm:^8.4.41, postcss@npm:^8.5.6": - version: 8.5.6 - resolution: "postcss@npm:8.5.6" +"postcss@npm:^8.5.10": + version: 8.5.15 + resolution: "postcss@npm:8.5.15" dependencies: - nanoid: "npm:^3.3.11" + nanoid: "npm:^3.3.12" picocolors: "npm:^1.1.1" source-map-js: "npm:^1.2.1" - checksum: 10c0/5127cc7c91ed7a133a1b7318012d8bfa112da9ef092dddf369ae699a1f10ebbd89b1b9f25f3228795b84585c72aabd5ced5fc11f2ba467eedf7b081a66fad024 + checksum: 10c0/7f2e63ae22fbe43aace1bf652bd99da4e90737c64194d49e51ddc9cd0f9e51ff2861a7d734379b494deffa03a880a5c65eec70bc29ee9ebaa7136dde3eee8f31 languageName: node linkType: hard @@ -16266,12 +15390,13 @@ __metadata: languageName: node linkType: hard -"qs@npm:^6.11.0, qs@npm:^6.11.2, qs@npm:^6.14.0, qs@npm:~6.14.0": - version: 6.14.2 - resolution: "qs@npm:6.14.2" +"qs@npm:^6.15.3": + version: 6.15.3 + resolution: "qs@npm:6.15.3" dependencies: - side-channel: "npm:^1.1.0" - checksum: 10c0/646110124476fc9acf3c80994c8c3a0600cbad06a4ede1c9e93341006e8426d64e85e048baf8f0c4995f0f1bf0f37d1f3acc5ec1455850b81978792969a60ef6 + es-define-property: "npm:^1.0.1" + side-channel: "npm:^1.1.1" + checksum: 10c0/8f3f6e45ece255347d57696628401cde29e9ec649fff698b53bd3150dea7cefdf33036e1bc1826b9f110bfa7cb0ec4ab9f5297eca628ce216c55af82c304e08e languageName: node linkType: hard @@ -16289,15 +15414,6 @@ __metadata: languageName: node linkType: hard -"randombytes@npm:^2.1.0": - version: 2.1.0 - resolution: "randombytes@npm:2.1.0" - dependencies: - safe-buffer: "npm:^5.1.0" - checksum: 10c0/50395efda7a8c94f5dffab564f9ff89736064d32addf0cc7e8bf5e4166f09f8ded7a0849ca6c2d2a59478f7d90f78f20d8048bca3cdf8be09d8e8a10790388f3 - languageName: node - linkType: hard - "range-parser@npm:^1.2.1, range-parser@npm:~1.2.1": version: 1.2.1 resolution: "range-parser@npm:1.2.1" @@ -17125,7 +16241,7 @@ __metadata: languageName: node linkType: hard -"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:^5.1.0, safe-buffer@npm:~5.2.0": +"safe-buffer@npm:5.2.1, safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 @@ -17290,12 +16406,10 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^6.0.2": - version: 6.0.2 - resolution: "serialize-javascript@npm:6.0.2" - dependencies: - randombytes: "npm:^2.1.0" - checksum: 10c0/2dd09ef4b65a1289ba24a788b1423a035581bef60817bea1f01eda8e3bda623f86357665fe7ac1b50f6d4f583f97db9615b3f07b2a2e8cbcb75033965f771dd2 +"serialize-javascript@npm:^7.0.5": + version: 7.0.6 + resolution: "serialize-javascript@npm:7.0.6" + checksum: 10c0/9d626d843c9177356520abf9bbf2c79b4aa2a0bcc4f7a4c8398e942aab1d22ecc567ad7f74de4a25d501b0126ee25b77f5b604147d5da1ff3bfa39544e35b423 languageName: node linkType: hard @@ -17445,7 +16559,7 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.34.4, sharp@npm:^0.34.5": +"sharp@npm:^0.34.5": version: 0.34.5 resolution: "sharp@npm:0.34.5" dependencies: @@ -17545,10 +16659,10 @@ __metadata: languageName: node linkType: hard -"shell-quote@npm:1.8.3": - version: 1.8.3 - resolution: "shell-quote@npm:1.8.3" - checksum: 10c0/bee87c34e1e986cfb4c30846b8e6327d18874f10b535699866f368ade11ea4ee45433d97bf5eada22c4320c27df79c3a6a7eb1bf3ecfc47f2c997d9e5e2672fd +"shell-quote@npm:^1.9.0": + version: 1.9.0 + resolution: "shell-quote@npm:1.9.0" + checksum: 10c0/a39960107eb086b02394cfceb3c732bd3bf567b568719ff47101448fc3f1bf4a59ecfdd8960ff7ea564d749ef8bda70f2c82a768f22d8c7aeeabf2b64f53b7e8 languageName: node linkType: hard @@ -17578,6 +16692,16 @@ __metadata: languageName: node linkType: hard +"side-channel-list@npm:^1.0.1": + version: 1.0.1 + resolution: "side-channel-list@npm:1.0.1" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.4" + checksum: 10c0/d346c787fd2f9f1c2fdea14f00e8250118db0e7596d85a6cb9faa75f105d31a73a8f7a341c93d7df2a2429098c3d37a77bd3be9e88c37094b8c01807bc77c7a2 + languageName: node + linkType: hard + "side-channel-map@npm:^1.0.1": version: 1.0.1 resolution: "side-channel-map@npm:1.0.1" @@ -17616,6 +16740,19 @@ __metadata: languageName: node linkType: hard +"side-channel@npm:^1.1.1": + version: 1.1.1 + resolution: "side-channel@npm:1.1.1" + dependencies: + es-errors: "npm:^1.3.0" + object-inspect: "npm:^1.13.4" + side-channel-list: "npm:^1.0.1" + side-channel-map: "npm:^1.0.1" + side-channel-weakmap: "npm:^1.0.2" + checksum: 10c0/dc0ab81d67f61bda9247d053ce93f41c3fd8ad2bdcb9cf9d8d2f8540d488f26d87a5e99ebfc07eea49ec025867b2452b705442d974b1478f0395e69f6bfb3270 + languageName: node + linkType: hard + "siginfo@npm:^2.0.0": version: 2.0.0 resolution: "siginfo@npm:2.0.0" @@ -17797,7 +16934,7 @@ __metadata: languageName: node linkType: hard -"source-map-js@npm:1.2.1, source-map-js@npm:^1.0.2, source-map-js@npm:^1.2.1": +"source-map-js@npm:1.2.1, source-map-js@npm:^1.2.1": version: 1.2.1 resolution: "source-map-js@npm:1.2.1" checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf @@ -17895,10 +17032,10 @@ __metadata: languageName: node linkType: hard -"std-env@npm:^3.10.0": - version: 3.10.0 - resolution: "std-env@npm:3.10.0" - checksum: 10c0/1814927a45004d36dde6707eaf17552a546769bc79a6421be2c16ce77d238158dfe5de30910b78ec30d95135cc1c59ea73ee22d2ca170f8b9753f84da34c427f +"std-env@npm:^4.0.0-rc.1": + version: 4.1.0 + resolution: "std-env@npm:4.1.0" + checksum: 10c0/2e14b6b490db34cb969a48d9cf7c35bca4a47653914aac2814221baae7b867a5b15940d133625c391621971f98cd2266a5dc7036669960e883f1081db2a56558 languageName: node linkType: hard @@ -18104,17 +17241,12 @@ __metadata: languageName: node linkType: hard -"strnum@npm:^1.1.1": - version: 1.1.2 - resolution: "strnum@npm:1.1.2" - checksum: 10c0/a0fce2498fa3c64ce64a40dada41beb91cabe3caefa910e467dc0518ef2ebd7e4d10f8c2202a6104f1410254cae245066c0e94e2521fb4061a5cb41831952392 - languageName: node - linkType: hard - -"strnum@npm:^2.1.0": - version: 2.1.1 - resolution: "strnum@npm:2.1.1" - checksum: 10c0/1f9bd1f9b4c68333f25c2b1f498ea529189f060cd50aa59f1876139c994d817056de3ce57c12c970f80568d75df2289725e218bd9e3cdf73cd1a876c9c102733 +"strnum@npm:^2.4.1": + version: 2.4.1 + resolution: "strnum@npm:2.4.1" + dependencies: + anynum: "npm:^1.0.1" + checksum: 10c0/0d6a42bf8a1ad74b0a6c048ecf3bea50757383bcf304877ebe6e62acca5574bc088ce71bfb4de4b89b2ab44c618834c76be5894da04b67c673ff6677788b2638 languageName: node linkType: hard @@ -18364,16 +17496,16 @@ __metadata: languageName: node linkType: hard -"tar@npm:^7.5.2": - version: 7.5.11 - resolution: "tar@npm:7.5.11" +"tar@npm:^7.5.17": + version: 7.5.17 + resolution: "tar@npm:7.5.17" dependencies: "@isaacs/fs-minipass": "npm:^4.0.0" chownr: "npm:^3.0.0" minipass: "npm:^7.1.2" minizlib: "npm:^3.1.0" yallist: "npm:^5.0.0" - checksum: 10c0/b6bb420550ef50ef23356018155e956cd83282c97b6128d8d5cfe5740c57582d806a244b2ef0bf686a74ce526babe8b8b9061527623e935e850008d86d838929 + checksum: 10c0/794e80834d6fa29a526d7c6dc82684cd1d0fbc4b7dd4a86c730946a996314149b60e29f1bff8623936bb1442da7de241890c16ce6268f16cc5ef2aa5b9615953 languageName: node linkType: hard @@ -18469,10 +17601,10 @@ __metadata: languageName: node linkType: hard -"tinyrainbow@npm:^3.0.3": - version: 3.0.3 - resolution: "tinyrainbow@npm:3.0.3" - checksum: 10c0/1e799d35cd23cabe02e22550985a3051dc88814a979be02dc632a159c393a998628eacfc558e4c746b3006606d54b00bcdea0c39301133956d10a27aa27e988c +"tinyrainbow@npm:^3.1.0": + version: 3.1.0 + resolution: "tinyrainbow@npm:3.1.0" + checksum: 10c0/f11cf387a26c5c9255bec141a90ac511b26172981b10c3e50053bc6700ea7d2336edcc4a3a21dbb8412fe7c013477d2ba4d7e4877800f3f8107be5105aad6511 languageName: node linkType: hard @@ -18652,74 +17784,32 @@ __metadata: languageName: node linkType: hard -"turbo-darwin-64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-darwin-64@npm:2.6.3" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"turbo-darwin-arm64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-darwin-arm64@npm:2.6.3" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"turbo-linux-64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-linux-64@npm:2.6.3" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"turbo-linux-arm64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-linux-arm64@npm:2.6.3" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"turbo-windows-64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-windows-64@npm:2.6.3" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"turbo-windows-arm64@npm:2.6.3": - version: 2.6.3 - resolution: "turbo-windows-arm64@npm:2.6.3" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"turbo@npm:^2.6.0": - version: 2.6.3 - resolution: "turbo@npm:2.6.3" +"turbo@npm:^2.9.14": + version: 2.10.0 + resolution: "turbo@npm:2.10.0" dependencies: - turbo-darwin-64: "npm:2.6.3" - turbo-darwin-arm64: "npm:2.6.3" - turbo-linux-64: "npm:2.6.3" - turbo-linux-arm64: "npm:2.6.3" - turbo-windows-64: "npm:2.6.3" - turbo-windows-arm64: "npm:2.6.3" + "@turbo/darwin-64": "npm:2.10.0" + "@turbo/darwin-arm64": "npm:2.10.0" + "@turbo/linux-64": "npm:2.10.0" + "@turbo/linux-arm64": "npm:2.10.0" + "@turbo/windows-64": "npm:2.10.0" + "@turbo/windows-arm64": "npm:2.10.0" dependenciesMeta: - turbo-darwin-64: + "@turbo/darwin-64": optional: true - turbo-darwin-arm64: + "@turbo/darwin-arm64": optional: true - turbo-linux-64: + "@turbo/linux-64": optional: true - turbo-linux-arm64: + "@turbo/linux-arm64": optional: true - turbo-windows-64: + "@turbo/windows-64": optional: true - turbo-windows-arm64: + "@turbo/windows-arm64": optional: true bin: turbo: bin/turbo - checksum: 10c0/3dab627a4e0f855c2ea2cc5e7d3d7abed01a7abace1197983c55e0563c413dfe45c80c121e5fa25d2cca013d895bde457d5cdf3a3d47000dc7d432a4cb68e78f + checksum: 10c0/2ceaa5b31afd284a6d52889ed53a047c3234ce475a4bb4c43ae1c7dc1844bd4f24c505390fc458d96909f816c67a0cd5a5cef6681a4d7136feece924802a8f1b languageName: node linkType: hard @@ -18904,10 +17994,10 @@ __metadata: languageName: node linkType: hard -"undici@npm:^6.19.5": - version: 6.24.1 - resolution: "undici@npm:6.24.1" - checksum: 10c0/53fdbaa357139a2c12deed34f67d67fc6ad269630ba85a1507e7717f53ad2d3a02c95fbd17d3ab321e34c60b6f0a716cdc2f7e2eca1e07178702dc89cc3a73c4 +"undici@npm:^6.27.0": + version: 6.27.0 + resolution: "undici@npm:6.27.0" + checksum: 10c0/f88c3dae3957dbf9d93cb481440aced317bd3c4941b5914fea5efba516d51138988cdb5c76006f0bb1337e41d56c3443351055d492e73af2428521c37ba2a76f languageName: node linkType: hard @@ -19099,15 +18189,6 @@ __metadata: languageName: node linkType: hard -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c - languageName: node - linkType: hard - "url-parse@npm:^1.5.10": version: 1.5.10 resolution: "url-parse@npm:1.5.10" @@ -19181,21 +18262,12 @@ __metadata: languageName: node linkType: hard -"uuid@npm:^10.0.0": - version: 10.0.0 - resolution: "uuid@npm:10.0.0" - bin: - uuid: dist/bin/uuid - checksum: 10c0/eab18c27fe4ab9fb9709a5d5f40119b45f2ec8314f8d4cf12ce27e4c6f4ffa4a6321dc7db6c515068fa373c075b49691ba969f0010bf37f44c37ca40cd6bf7fe - languageName: node - linkType: hard - -"uuid@npm:^11.1.0": - version: 11.1.0 - resolution: "uuid@npm:11.1.0" +"uuid@npm:^11.1.1": + version: 11.1.1 + resolution: "uuid@npm:11.1.1" bin: uuid: dist/esm/bin/uuid - checksum: 10c0/34aa51b9874ae398c2b799c88a127701408cd581ee89ec3baa53509dd8728cbb25826f2a038f9465f8b7be446f0fbf11558862965b18d21c993684297628d4d3 + checksum: 10c0/9e3af58eba872ece5a5e76f4773a94fc78a0ef2c2444c38dbe6b42f41dadf76c01850fd783604f27986f6195e6286aef064d45987d401b2a33127b98ddf7c0c5 languageName: node linkType: hard @@ -19262,11 +18334,11 @@ __metadata: languageName: node linkType: hard -"vite@npm:^6.0.0 || ^7.0.0": - version: 7.3.2 - resolution: "vite@npm:7.3.2" +"vite@npm:^7.3.5": + version: 7.3.6 + resolution: "vite@npm:7.3.6" dependencies: - esbuild: "npm:^0.27.0" + esbuild: "npm:^0.27.0 || ^0.28.0" fdir: "npm:^6.5.0" fsevents: "npm:~2.3.3" picomatch: "npm:^4.0.3" @@ -19313,7 +18385,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 10c0/74be36907e208916f18bfec81c8eba18b869f0a170f1ece0a4dcb14874d0f0e7c022fb6c2ad896e3ee6c973fe88f53ac23b4078879ada340d8b263260868b8d4 + checksum: 10c0/c6d359f84ad362f5c97ff7988b77c90add04162c60cdf6059375a7d9e3217848c53a8cb6b6c48517bef84b6bba4c9bc85319a889b5236acb7d5a2bc8cb7b9a8d languageName: node linkType: hard @@ -19329,40 +18401,43 @@ __metadata: languageName: node linkType: hard -"vitest@npm:^4.0.14": - version: 4.0.15 - resolution: "vitest@npm:4.0.15" +"vitest@npm:^4.1.0": + version: 4.1.9 + resolution: "vitest@npm:4.1.9" dependencies: - "@vitest/expect": "npm:4.0.15" - "@vitest/mocker": "npm:4.0.15" - "@vitest/pretty-format": "npm:4.0.15" - "@vitest/runner": "npm:4.0.15" - "@vitest/snapshot": "npm:4.0.15" - "@vitest/spy": "npm:4.0.15" - "@vitest/utils": "npm:4.0.15" - es-module-lexer: "npm:^1.7.0" - expect-type: "npm:^1.2.2" + "@vitest/expect": "npm:4.1.9" + "@vitest/mocker": "npm:4.1.9" + "@vitest/pretty-format": "npm:4.1.9" + "@vitest/runner": "npm:4.1.9" + "@vitest/snapshot": "npm:4.1.9" + "@vitest/spy": "npm:4.1.9" + "@vitest/utils": "npm:4.1.9" + es-module-lexer: "npm:^2.0.0" + expect-type: "npm:^1.3.0" magic-string: "npm:^0.30.21" obug: "npm:^2.1.1" pathe: "npm:^2.0.3" picomatch: "npm:^4.0.3" - std-env: "npm:^3.10.0" + std-env: "npm:^4.0.0-rc.1" tinybench: "npm:^2.9.0" tinyexec: "npm:^1.0.2" tinyglobby: "npm:^0.2.15" - tinyrainbow: "npm:^3.0.3" - vite: "npm:^6.0.0 || ^7.0.0" + tinyrainbow: "npm:^3.1.0" + vite: "npm:^6.0.0 || ^7.0.0 || ^8.0.0" why-is-node-running: "npm:^2.3.0" peerDependencies: "@edge-runtime/vm": "*" "@opentelemetry/api": ^1.9.0 "@types/node": ^20.0.0 || ^22.0.0 || >=24.0.0 - "@vitest/browser-playwright": 4.0.15 - "@vitest/browser-preview": 4.0.15 - "@vitest/browser-webdriverio": 4.0.15 - "@vitest/ui": 4.0.15 + "@vitest/browser-playwright": 4.1.9 + "@vitest/browser-preview": 4.1.9 + "@vitest/browser-webdriverio": 4.1.9 + "@vitest/coverage-istanbul": 4.1.9 + "@vitest/coverage-v8": 4.1.9 + "@vitest/ui": 4.1.9 happy-dom: "*" jsdom: "*" + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: "@edge-runtime/vm": optional: true @@ -19376,15 +18451,21 @@ __metadata: optional: true "@vitest/browser-webdriverio": optional: true + "@vitest/coverage-istanbul": + optional: true + "@vitest/coverage-v8": + optional: true "@vitest/ui": optional: true happy-dom: optional: true jsdom: optional: true + vite: + optional: false bin: - vitest: vitest.mjs - checksum: 10c0/fd57913dbcba81b67ca67bae37f0920f2785a60939a9029a82ebb843253f7a67f93f2c959cb90bb23a57055c0256ec0a6059ec9a10c129e8912c09b6e407242b + vitest: ./vitest.mjs + checksum: 10c0/1ac80ef4991be82822a52aea48415f1bc64ddf8fd88ee24c172ec368f1d480fefacbde622c3c951982f7961a1d07313e18deaafc774d29e42ad6f6ffa63334a7 languageName: node linkType: hard @@ -19715,9 +18796,9 @@ __metadata: languageName: node linkType: hard -"ws@npm:~8.17.1": - version: 8.17.1 - resolution: "ws@npm:8.17.1" +"ws@npm:^8.21.0": + version: 8.21.0 + resolution: "ws@npm:8.21.0" peerDependencies: bufferutil: ^4.0.1 utf-8-validate: ">=5.0.2" @@ -19726,7 +18807,7 @@ __metadata: optional: true utf-8-validate: optional: true - checksum: 10c0/f4a49064afae4500be772abdc2211c8518f39e1c959640457dcee15d4488628620625c783902a52af2dd02f68558da2868fd06e6fd0e67ebcd09e6881b1b5bfe + checksum: 10c0/ef4a243476283fc49bc7550966c4af4aa0eef56273837211e700de3b664e08604a760cdddcb5ba43c049140e74ccfec5b0ee0bb439e08c2adf9138902fdde5f9 languageName: node linkType: hard @@ -19741,6 +18822,13 @@ __metadata: languageName: node linkType: hard +"xml-naming@npm:^0.1.0": + version: 0.1.0 + resolution: "xml-naming@npm:0.1.0" + checksum: 10c0/8c7614865361bcb7e53e3e091dac21c567e2b92d447919b2f072775aa9dcfc94a5255bd52fbaa0fd53c93513e53a23a6a835218ad2af512451dbc678392f85fe + languageName: node + linkType: hard + "xmlhttprequest-ssl@npm:~2.1.1": version: 2.1.2 resolution: "xmlhttprequest-ssl@npm:2.1.2" @@ -19776,21 +18864,12 @@ __metadata: languageName: node linkType: hard -"yaml@npm:2.8.0": - version: 2.8.0 - resolution: "yaml@npm:2.8.0" - bin: - yaml: bin.mjs - checksum: 10c0/f6f7310cf7264a8107e72c1376f4de37389945d2fb4656f8060eca83f01d2d703f9d1b925dd8f39852a57034fafefde6225409ddd9f22aebfda16c6141b71858 - languageName: node - linkType: hard - -"yaml@npm:^2.3.4, yaml@npm:^2.8.0": - version: 2.8.2 - resolution: "yaml@npm:2.8.2" +"yaml@npm:^2.8.3": + version: 2.9.0 + resolution: "yaml@npm:2.9.0" bin: yaml: bin.mjs - checksum: 10c0/703e4dc1e34b324aa66876d63618dcacb9ed49f7e7fe9b70f1e703645be8d640f68ab84f12b86df8ac960bac37acf5513e115de7c970940617ce0343c8c9cd96 + checksum: 10c0/f340718df45e97a9551b9bf9dac61c80050bc464513b710debfb5067c380c8472e3b67809cffacb4ab5ffb5e66ef9310816c88b05f371cec60abfedd8c88e0a2 languageName: node linkType: hard From d241ed9d91572dea1332c91c59efee37f9813616 Mon Sep 17 00:00:00 2001 From: ramzi Date: Mon, 10 Aug 2026 12:51:15 +0100 Subject: [PATCH 4/6] chore(agents): re-sync the generated agents-core block Regenerated from vibe-kit/ai-doc/references/agents-core.md. Co-Authored-By: Claude Opus 5 (1M context) --- CLAUDE.md | 83 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 44acce3a6..46511dc70 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -1,5 +1,88 @@ # CLAUDE.md + + + +Guidelines to reduce common LLM coding mistakes. + +**The contract: you finish the work.** A turn ends when the task is done and verified. A turn does not end with a list of things the user could do next. Judgment calls inside the task are yours to make. + +## 1. Think Before Coding + +Understand the request, then decide. Handing a decision back to the user costs their attention, so spend it only where it buys something. + +- State an assumption in one line and keep going. A written assumption is not a blocker. +- Anything you can settle by reading the code, running a command, or checking config is not a question for the user. Go settle it. +- Two readings of the request that lead to materially different work? Ask. Same work either way, or one reading clearly better? Pick it, name it in one line, continue. +- Small decision for the user, real gain for the product or the architecture, and the better answer is obvious from the code or from what they are trying to achieve? Take it and keep moving. +- Suggest a simpler approach when you see one, then build it. Push back in a sentence or two, not a memo. + +**A workflow the user already set up is already authorized.** A release PR the tooling opened exists to be merged. A green pipeline exists to be deployed. A version bump exists to be published. A task in review exists to be closed. Run the checks that gate the step, take it, and report it done. Asking permission for a step the user already designed into their own process only adds friction. + +The same holds for anything running on the user's own systems: their repos, their registries, their infrastructure, their boards. Act, verify, report. + +**Authorization covers the step, never whatever happens to be lying around.** Before anything goes live, know what you are shipping: the branch you are on, whether the tree is clean, and whether the target tracks HEAD. Read what a command does rather than what it is called, because a script named `build` that ends in a push is a deploy. Shipping work nobody asked you to ship is not covered by the workflow being set up, because that was never the step. + +The exceptions are a closed list of four, and the list does not grow by analogy: a message sent to another person under the user's name (client email, public post, customer reply), a payment or a refund, deleting data that has no backup, and pushing into a client's live production system. Those land on somebody else and cannot be recalled. Confirm those and nothing else. "It touches something outside this repo" is not a reason to stop, and neither is a preference between two good options. + +## 2. Simplicity First + +Minimum code that solves the problem. Nothing speculative. + +- No features beyond what was asked. +- No abstractions for single-use code. +- No unrequested "flexibility." +- No error handling for impossible scenarios. +- 200 lines that could be 50, rewrite. + +## 3. Surgical Changes + +Touch only what you must. Clean up only your own mess. + +- Don't "improve" adjacent code, comments, or formatting. +- Don't refactor things that aren't broken. +- Match existing style. +- Remove imports/variables/functions that YOUR changes made unused. +- Don't remove pre-existing dead code unless asked. + +Every changed line should trace directly to the user's request. + +## 4. Goal-Driven Execution + +Define success criteria. Loop until verified. + +- "Add validation" becomes "Write tests for invalid inputs, then make them pass" +- "Fix the bug" becomes "Write a test that reproduces it, then make it pass" +- "Refactor X" becomes "Ensure tests pass before and after" + +For multi-step tasks, state a brief plan with verification checks. + +Strong success criteria let you loop independently. Weak criteria ("make it work") require constant clarification. + +## 5. Fix It, Don't Flag It + +Anything you would hand back as "worth knowing for next time" gets fixed in this session instead. + +- Found a second problem while fixing the first? Fix it too. Do not list it as a follow-up. +- Found a gap, a stale value, a missing case, a wrong config? Fix it, then say what you fixed. +- "Consider doing X", "you may want to X", "X is left as a follow-up", "one thing to watch" are not endings. Do X, then report it done. +- Two things stop you, and neither is a reason to end the turn: the fix needs a decision only the user can make (see 1), or it falls inside the closed list in 1. Ask, get the answer, then finish it in the same turn. +- Verify the fix rather than asserting it. Read the state back. + +If a sentence you are about to write opens with "Consider", "You may want to", "One thing to watch", "I didn't touch", "Worth noting", "Optional improvement", "Recommend that you", or "Next steps", the work is not finished. Go finish it, then write the sentence that says it is done. + +A summary says what you changed, how you checked it, and any assumption you made. It is never a to-do list. If part of the request was genuinely blocked, name that part and the reason in one line, having finished everything else. + +Breaking something makes the repair yours as well. Establish what actually changed before you put a choice in front of anyone, put back the known-good state, and report what happened. Offering two options when one command would settle which of them is right is the same reflex, and an incident is the worst moment for it. + +Work you already did is reported as done, never handed back. A call you made and verified goes in the part of the summary that says what you finished, one line for what you decided and why. Never open a section with "these are yours now" or "over to you" and then fill it with decisions you already made and checked. Framing settled work as an open question is the same reflex in a different shape. + +This does not loosen 3. Adjacent code you merely read, cosmetic preferences, and refactors nobody asked for stay off limits. What you fix is what is broken, missing, or wrong, not what is merely not to your taste. + +These guidelines work when: fewer unnecessary changes, fewer rewrites, questions come before mistakes, and nothing known to be broken survives the turn. + + + This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview From 4c27cbd9ee287b9a9451fbad03a897e968892e6e Mon Sep 17 00:00:00 2001 From: ramzi Date: Sun, 16 Aug 2026 20:37:08 +0100 Subject: [PATCH 5/6] chore(lint): take @heyramzi/lint 2.8.4 and clear the widening backlog Four type-evidence rules ported from dmmulroy/anti-slop ship in 2.8.4: no-chained-type-assertions, no-conditional-empty-object-spread and no-known-value-widening at warn, require-safety-comment-for-type-assertion off and opt-in. Every no-known-value-widening site here is fixed by keeping inference, using satisfies, or naming the real contract. No assertions were added. Co-Authored-By: Claude Opus 5 (1M context) --- apps/api/src/services/ContactService.ts | 2 +- apps/api/src/utils/logger.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/api/src/services/ContactService.ts b/apps/api/src/services/ContactService.ts index a66fe814e..7c9548707 100644 --- a/apps/api/src/services/ContactService.ts +++ b/apps/api/src/services/ContactService.ts @@ -345,7 +345,7 @@ export class ContactService { * This is useful for template rendering */ public static getMergedData(contact: Contact, temporaryData?: Record): Record { - const mergedData: Record = { + const mergedData: {plunk_id: string; plunk_email: string; [key: string]: unknown} = { plunk_id: contact.id, plunk_email: contact.email, }; diff --git a/apps/api/src/utils/logger.ts b/apps/api/src/utils/logger.ts index e18993c85..9b8d86e7e 100644 --- a/apps/api/src/utils/logger.ts +++ b/apps/api/src/utils/logger.ts @@ -11,7 +11,7 @@ function getRequestId(res?: Response): string | undefined { /** * Extract user/project context from Express response locals */ -function getRequestContext(res?: Response): Record { +function getRequestContext(res?: Response) { const auth = res?.locals?.auth as {type?: string; userId?: string; projectId?: string} | undefined; if (!auth) { From 790de936aae6132c35e11ff5ba9a7babca6a0c42 Mon Sep 17 00:00:00 2001 From: ramzi Date: Wed, 26 Aug 2026 15:47:24 +0100 Subject: [PATCH 6/6] chore(fallow): adopt fallow 3.18 and clear dead code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds fallow@^3.18.0 with .fallowrc.json (workspaces apps/*, packages/*; explicit entry for the Express api/smtp apps and the wiki's docs-generation scripts, which aren't reached by any Next.js route convention) and the five fallow:* scripts. Note on this diff's shape: apps/api, apps/landing, apps/web, apps/wiki, packages/email, packages/ui, the root package.json, and pnpm-lock.yaml were already carrying a staged (uncommitted) yarn-to-pnpm package-manager migration before this session touched them. That migration is unrelated to fallow and is not this commit's work; it is included here only because git has no way to commit a package.json edit without also committing whatever else was already staged in that same file. Untouched migration-only files (yarn.lock, .impeccable.md, .yarn/releases, packages/db, packages/eslint- config, packages/shared, packages/types, pnpm-workspace.yaml, renovate.json, DESIGN.md, CLAUDE.md) were left exactly as they were, unstaged/untracked, for that migration to be reviewed and committed on its own. The fallow-attributable dependency changes, verified by grep against the whole repo (not just each app) before touching anything: Removed (zero imports anywhere): - apps/api: @react-email/render, body-parser, mailchecker - apps/web: @tiptap/extension-image (apps/landing already declares its own copy), @tiptap/extension-table/-cell/-header/-row, react-intl - apps/wiki: shiki (fumadocs-core already depends on it directly) - packages/email: @react-email/tailwind (@react-email/components already depends on it directly), @react-email/preview-server (deprecated, and react-email 6.x doesn't depend on it — a leftover from an older CLI) - packages/ui: @dnd-kit/core|modifiers|sortable, @number-flow/react, @radix-ui/react-accordion|alert-dialog|menubar|navigation-menu| scroll-area|slider, date-fns, embla-carousel-react, next-themes, react-day-picker, sonner (apps/web and apps/landing already declare their own copies), @tailwindcss/forms (apps/web and apps/landing already declare their own copies) — shadcn-scaffolded primitives never wired into a page - root: form-data (was a yarn "resolutions" pin for a CVE; the new pnpm overrides block dropped it, so it's now dead weight), supertest and its @types/supertest (a comment mentions it, no file imports it) Added (real imports, wrong or missing package.json): - apps/api: react, zod (used directly; apps/api never declared either) - apps/web: @hookform/resolvers (8 files; only packages/ui had it), tailwindcss-animate (globals.css `@plugin`; only packages/ui had it) - apps/landing: swr, framer-motion, zod (all three imported directly; only apps/web declared them) - apps/wiki: class-variance-authority, tailwind-merge (only packages/ui had them) - root (devDependencies, test-only): bcrypt, bullmq, dayjs, ioredis — the root vitest suite's test/helpers/*.ts and test/mocks/*.ts import these directly; only apps/api declared them, which doesn't help imports resolved from the repo root under pnpm's non-hoisted linking. This one is likely a real regression from the yarn migration (yarn hoists everything to the root node_modules by default; pnpm doesn't). ignoreDependencies, not touched (real but invisible to a static import scan): @eslint/js and typescript-eslint, imported only from apps/api's and apps/smtp's eslint.config.mjs, and dotenv, imported only from apps/wiki's generate-openapi.js build script — all three resolve via Node's parent-directory node_modules walk-up to the root's own devDependency, matching this monorepo's existing deliberate convention of keeping shared tooling (eslint, typescript, prettier, turbo) declared only at the root. ignoreExports: apps/wiki/app/llms.mdx/**/route.ts's generateStaticParams — a Next.js App Router build-time hook fallow's Next.js rule recognizes on page.tsx/layout.tsx but not on a route.ts handler. ignoreUnresolvedImports: '../../services/ses' in WorkflowExecutionService.integration.test.ts — a stale vi.mock path (the real file is ./SESService.ts exporting sendRawEmail, not an `ses` object). Left for a human: fixing the path alone wouldn't fix the mismatched mock shape, and this repo's test suite is already fully red for an unrelated reason (Prisma client not generated), so I can't verify a fix here. Left alone (reported, not fixed): 1 circular dependency among EmailService/EventService/WorkflowExecutionService (warn-level, pre-existing) — a real refactor, out of scope for a dead-code pass. 332 health/complexity findings and 26.3% duplicated lines were baselined as-is (pre-existing, not dead code). Gates: `pnpm test:run` and `pnpm lint` were already fully red before this change (Prisma client not generated; apps/wiki's eslint config can't resolve @plunk/eslint-config) — both pre-existing and unrelated to fallow, unchanged by this commit. `fallow dead-code` and `fallow audit` are clean. Co-Authored-By: Claude Opus 5 (1M context) --- .fallow/baselines/dead-code.json | 54 + .fallow/baselines/dupes.json | 1511 +++ .fallow/baselines/health.json | 1125 +++ .fallowrc.json | 77 + apps/api/package.json | 51 +- apps/landing/package.json | 69 +- apps/web/package.json | 96 +- apps/wiki/package.json | 33 +- package.json | 95 +- packages/email/package.json | 20 +- packages/ui/package.json | 68 +- pnpm-lock.yaml | 15397 +++++++++++++++++++++++++++++ 12 files changed, 18352 insertions(+), 244 deletions(-) create mode 100644 .fallow/baselines/dead-code.json create mode 100644 .fallow/baselines/dupes.json create mode 100644 .fallow/baselines/health.json create mode 100644 .fallowrc.json create mode 100644 pnpm-lock.yaml diff --git a/.fallow/baselines/dead-code.json b/.fallow/baselines/dead-code.json new file mode 100644 index 000000000..accd09fa9 --- /dev/null +++ b/.fallow/baselines/dead-code.json @@ -0,0 +1,54 @@ +{ + "analysis_identity": { + "mode": "syntactic", + "semantic_schema_version": 1, + "capabilities": [], + "project_config_hash": "", + "backend_family": "", + "completeness": "complete" + }, + "unused_files": [], + "unused_exports": [], + "unused_types": [], + "private_type_leaks": [], + "unused_dependencies": [], + "unused_dev_dependencies": [], + "circular_dependencies": [ + "apps/api/src/services/EmailService.ts->apps/api/src/services/EventService.ts->apps/api/src/services/WorkflowExecutionService.ts" + ], + "re_export_cycles": [], + "unused_optional_dependencies": [], + "unused_enum_members": [], + "unused_class_members": [], + "unused_store_members": [], + "unprovided_injects": [], + "unrendered_components": [], + "unused_component_props": [], + "unused_component_emits": [], + "unused_component_inputs": [], + "unused_component_outputs": [], + "unused_svelte_events": [], + "unused_server_actions": [], + "unused_load_data_keys": [], + "unresolved_imports": [], + "unlisted_dependencies": [], + "duplicate_exports": [], + "type_only_dependencies": [], + "test_only_dependencies": [], + "dev_dependencies_in_production": [], + "boundary_violations": [], + "boundary_coverage_violations": [], + "boundary_call_violations": [], + "policy_violations": [], + "stale_suppressions": [], + "unused_catalog_entries": [], + "empty_catalog_groups": [], + "unresolved_catalog_references": [], + "unused_dependency_overrides": [], + "misconfigured_dependency_overrides": [], + "invalid_client_exports": [], + "mixed_client_server_barrels": [], + "misplaced_directives": [], + "route_collisions": [], + "dynamic_segment_name_conflicts": [] +} diff --git a/.fallow/baselines/dupes.json b/.fallow/baselines/dupes.json new file mode 100644 index 000000000..bbd41183d --- /dev/null +++ b/.fallow/baselines/dupes.json @@ -0,0 +1,1511 @@ +{ + "clone_groups": [ + "apps/landing/src/pages/vs/brevo.tsx:66-145|apps/landing/src/pages/vs/customerio.tsx:62-141|apps/landing/src/pages/vs/loops.tsx:66-145|apps/landing/src/pages/vs/postmark.tsx:63-142|apps/landing/src/pages/vs/sendgrid.tsx:66-145", + "apps/landing/src/pages/vs/activecampaign.tsx:171-196|apps/landing/src/pages/vs/bento.tsx:170-195|apps/landing/src/pages/vs/brevo.tsx:194-219|apps/landing/src/pages/vs/convertkit.tsx:194-219|apps/landing/src/pages/vs/customerio.tsx:190-215|apps/landing/src/pages/vs/index.tsx:281-331|apps/landing/src/pages/vs/klaviyo.tsx:171-196|apps/landing/src/pages/vs/loops.tsx:194-219|apps/landing/src/pages/vs/mailchimp.tsx:196-221|apps/landing/src/pages/vs/mailerlite.tsx:171-196|apps/landing/src/pages/vs/mailgun.tsx:190-215|apps/landing/src/pages/vs/postmark.tsx:191-216|apps/landing/src/pages/vs/resend.tsx:190-215|apps/landing/src/pages/vs/sendgrid.tsx:194-219", + "apps/landing/src/pages/features/email-editor.tsx:78-221|apps/landing/src/pages/features/inbound-email.tsx:77-220|apps/landing/src/pages/features/segments.tsx:92-235|apps/landing/src/pages/features/smtp.tsx:88-233|apps/landing/src/pages/features/workflows.tsx:77-222", + "apps/landing/src/pages/vs/activecampaign.tsx:64-143|apps/landing/src/pages/vs/bento.tsx:64-143|apps/landing/src/pages/vs/klaviyo.tsx:64-143|apps/landing/src/pages/vs/mailerlite.tsx:64-143", + "apps/landing/src/pages/vs/activecampaign.tsx:64-100|apps/landing/src/pages/vs/bento.tsx:64-100|apps/landing/src/pages/vs/brevo.tsx:66-102|apps/landing/src/pages/vs/convertkit.tsx:67-103|apps/landing/src/pages/vs/customerio.tsx:62-98|apps/landing/src/pages/vs/index.tsx:102-160|apps/landing/src/pages/vs/klaviyo.tsx:64-100|apps/landing/src/pages/vs/loops.tsx:66-102|apps/landing/src/pages/vs/mailchimp.tsx:67-103|apps/landing/src/pages/vs/mailerlite.tsx:64-100|apps/landing/src/pages/vs/mailgun.tsx:62-98|apps/landing/src/pages/vs/postmark.tsx:63-99|apps/landing/src/pages/vs/resend.tsx:62-98|apps/landing/src/pages/vs/sendgrid.tsx:66-102", + "apps/landing/src/pages/vs/mailgun.tsx:62-185|apps/landing/src/pages/vs/resend.tsx:62-185", + "apps/landing/src/pages/guides/index.tsx:115-169|apps/landing/src/pages/vs/activecampaign.tsx:64-90|apps/landing/src/pages/vs/bento.tsx:64-90|apps/landing/src/pages/vs/brevo.tsx:66-92|apps/landing/src/pages/vs/convertkit.tsx:67-93|apps/landing/src/pages/vs/customerio.tsx:62-88|apps/landing/src/pages/vs/index.tsx:102-150|apps/landing/src/pages/vs/klaviyo.tsx:64-90|apps/landing/src/pages/vs/loops.tsx:66-92|apps/landing/src/pages/vs/mailchimp.tsx:67-93|apps/landing/src/pages/vs/mailerlite.tsx:64-90|apps/landing/src/pages/vs/mailgun.tsx:62-88|apps/landing/src/pages/vs/postmark.tsx:63-89|apps/landing/src/pages/vs/resend.tsx:62-88|apps/landing/src/pages/vs/sendgrid.tsx:66-92", + "apps/landing/src/pages/features/email-editor.tsx:78-232|apps/landing/src/pages/features/inbound-email.tsx:77-231|apps/landing/src/pages/features/segments.tsx:92-246|apps/landing/src/pages/features/workflows.tsx:77-235", + "apps/landing/src/pages/vs/activecampaign.tsx:100-107|apps/landing/src/pages/vs/activecampaign.tsx:136-141|apps/landing/src/pages/vs/bento.tsx:100-107|apps/landing/src/pages/vs/bento.tsx:136-141|apps/landing/src/pages/vs/brevo.tsx:102-109|apps/landing/src/pages/vs/brevo.tsx:138-143|apps/landing/src/pages/vs/convertkit.tsx:103-110|apps/landing/src/pages/vs/customerio.tsx:134-139|apps/landing/src/pages/vs/customerio.tsx:98-105|apps/landing/src/pages/vs/index.tsx:160-177|apps/landing/src/pages/vs/index.tsx:224-241|apps/landing/src/pages/vs/klaviyo.tsx:100-107|apps/landing/src/pages/vs/klaviyo.tsx:136-141|apps/landing/src/pages/vs/loops.tsx:102-109|apps/landing/src/pages/vs/loops.tsx:138-143|apps/landing/src/pages/vs/mailchimp.tsx:103-110|apps/landing/src/pages/vs/mailerlite.tsx:100-107|apps/landing/src/pages/vs/mailerlite.tsx:136-141|apps/landing/src/pages/vs/mailgun.tsx:134-139|apps/landing/src/pages/vs/mailgun.tsx:98-105|apps/landing/src/pages/vs/postmark.tsx:135-140|apps/landing/src/pages/vs/postmark.tsx:99-106|apps/landing/src/pages/vs/resend.tsx:134-139|apps/landing/src/pages/vs/resend.tsx:98-105|apps/landing/src/pages/vs/sendgrid.tsx:102-109|apps/landing/src/pages/vs/sendgrid.tsx:138-143", + "apps/landing/src/pages/features/email-editor.tsx:327-365|apps/landing/src/pages/features/inbound-email.tsx:331-369|apps/landing/src/pages/features/segments.tsx:390-429|apps/landing/src/pages/features/smtp.tsx:326-364|apps/landing/src/pages/features/workflows.tsx:330-368|apps/landing/src/pages/guides/index.tsx:232-270|apps/landing/src/pages/index.tsx:1008-1049|apps/landing/src/pages/pricing.tsx:306-347|apps/landing/src/pages/tools/index.tsx:271-314|apps/landing/src/pages/tools/spam-checker.tsx:482-524", + "apps/landing/src/pages/guides/index.tsx:106-157|apps/landing/src/pages/made-by-humans.tsx:12-68|apps/landing/src/pages/vs/activecampaign.tsx:55-86|apps/landing/src/pages/vs/bento.tsx:55-86|apps/landing/src/pages/vs/brevo.tsx:57-88|apps/landing/src/pages/vs/convertkit.tsx:58-89|apps/landing/src/pages/vs/customerio.tsx:53-84|apps/landing/src/pages/vs/index.tsx:93-136|apps/landing/src/pages/vs/klaviyo.tsx:55-86|apps/landing/src/pages/vs/loops.tsx:57-88|apps/landing/src/pages/vs/mailchimp.tsx:58-89|apps/landing/src/pages/vs/mailerlite.tsx:55-86|apps/landing/src/pages/vs/mailgun.tsx:53-84|apps/landing/src/pages/vs/postmark.tsx:54-85|apps/landing/src/pages/vs/resend.tsx:53-84|apps/landing/src/pages/vs/sendgrid.tsx:57-88", + "apps/landing/src/pages/features/email-editor.tsx:78-237|apps/landing/src/pages/features/inbound-email.tsx:77-236|apps/landing/src/pages/features/workflows.tsx:77-240", + "apps/landing/src/pages/vs/brevo.tsx:66-157|apps/landing/src/pages/vs/sendgrid.tsx:66-157", + "apps/landing/src/pages/vs/convertkit.tsx:67-145|apps/landing/src/pages/vs/mailchimp.tsx:67-147", + "apps/landing/src/pages/features/email-editor.tsx:245-378|apps/landing/src/pages/features/workflows.tsx:248-381", + "apps/landing/src/pages/vs/brevo.tsx:175-189|apps/landing/src/pages/vs/convertkit.tsx:175-189|apps/landing/src/pages/vs/customerio.tsx:171-185|apps/landing/src/pages/vs/loops.tsx:175-189|apps/landing/src/pages/vs/mailchimp.tsx:177-191|apps/landing/src/pages/vs/mailgun.tsx:171-185|apps/landing/src/pages/vs/postmark.tsx:172-186|apps/landing/src/pages/vs/resend.tsx:171-185|apps/landing/src/pages/vs/sendgrid.tsx:175-189", + "apps/landing/src/pages/features/email-editor.tsx:323-378|apps/landing/src/pages/features/inbound-email.tsx:327-382|apps/landing/src/pages/features/segments.tsx:386-442|apps/landing/src/pages/features/smtp.tsx:322-377|apps/landing/src/pages/features/workflows.tsx:326-381", + "apps/landing/src/pages/features/email-editor.tsx:245-320|apps/landing/src/pages/features/inbound-email.tsx:244-316|apps/landing/src/pages/features/workflows.tsx:248-323", + "apps/landing/src/pages/vs/mailgun.tsx:147-171|apps/landing/src/pages/vs/postmark.tsx:148-172|apps/landing/src/pages/vs/resend.tsx:147-171", + "apps/landing/src/pages/vs/mailgun.tsx:153-171|apps/landing/src/pages/vs/postmark.tsx:154-172|apps/landing/src/pages/vs/resend.tsx:153-171|apps/landing/src/pages/vs/sendgrid.tsx:157-175", + "apps/landing/src/pages/features/email-editor.tsx:275-315|apps/landing/src/pages/features/inbound-email.tsx:274-314|apps/landing/src/pages/features/segments.tsx:344-384|apps/landing/src/pages/features/smtp.tsx:274-314|apps/landing/src/pages/features/workflows.tsx:278-318", + "apps/landing/src/middleware.ts:4-41|apps/wiki/middleware.ts:4-41", + "apps/landing/src/styles/globals.css:4-67|apps/web/src/styles/globals.css:5-68", + "apps/landing/src/pages/features/email-editor.tsx:270-320|apps/landing/src/pages/features/inbound-email.tsx:269-316|apps/landing/src/pages/features/smtp.tsx:269-319|apps/landing/src/pages/features/workflows.tsx:273-323", + "apps/landing/src/pages/features/email-editor.tsx:322-378|apps/landing/src/pages/features/inbound-email.tsx:326-382|apps/landing/src/pages/features/smtp.tsx:321-377|apps/landing/src/pages/features/workflows.tsx:325-381", + "apps/landing/src/styles/globals.css:67-163|apps/web/src/styles/globals.css:68-164", + "apps/landing/src/pages/vs/customerio.tsx:159-171|apps/landing/src/pages/vs/mailgun.tsx:159-171|apps/landing/src/pages/vs/postmark.tsx:160-172|apps/landing/src/pages/vs/resend.tsx:159-171|apps/landing/src/pages/vs/sendgrid.tsx:163-175", + "apps/landing/src/pages/vs/mailchimp.tsx:159-171|apps/landing/src/pages/vs/mailgun.tsx:153-165|apps/landing/src/pages/vs/postmark.tsx:154-166|apps/landing/src/pages/vs/resend.tsx:153-165|apps/landing/src/pages/vs/sendgrid.tsx:157-169", + "apps/web/src/pages/manage/[id].tsx:73-140|apps/web/src/pages/subscribe/[id].tsx:63-130|apps/web/src/pages/unsubscribe/[id].tsx:63-130", + "apps/landing/src/pages/vs/activecampaign.tsx:148-166|apps/landing/src/pages/vs/bento.tsx:147-165|apps/landing/src/pages/vs/klaviyo.tsx:148-166|apps/landing/src/pages/vs/mailerlite.tsx:148-166", + "apps/web/src/components/EmailEditor/EmailEditor.tsx:403-498|apps/web/src/components/EmailEditor/EmailEditor.tsx:505-604", + "apps/landing/src/pages/features/email-editor.tsx:174-210|apps/landing/src/pages/features/inbound-email.tsx:173-209|apps/landing/src/pages/features/segments.tsx:188-224|apps/landing/src/pages/features/smtp.tsx:186-222|apps/landing/src/pages/features/workflows.tsx:175-211|apps/landing/src/pages/index.tsx:579-623", + "apps/landing/src/pages/vs/brevo.tsx:145-151|apps/landing/src/pages/vs/convertkit.tsx:145-151|apps/landing/src/pages/vs/customerio.tsx:141-147|apps/landing/src/pages/vs/loops.tsx:145-151|apps/landing/src/pages/vs/mailchimp.tsx:147-153|apps/landing/src/pages/vs/mailgun.tsx:141-147|apps/landing/src/pages/vs/postmark.tsx:142-148|apps/landing/src/pages/vs/resend.tsx:141-147|apps/landing/src/pages/vs/sendgrid.tsx:145-151", + "apps/landing/src/pages/vs/brevo.tsx:151-157|apps/landing/src/pages/vs/convertkit.tsx:151-157|apps/landing/src/pages/vs/customerio.tsx:147-153|apps/landing/src/pages/vs/loops.tsx:151-157|apps/landing/src/pages/vs/mailchimp.tsx:153-159|apps/landing/src/pages/vs/mailgun.tsx:147-153|apps/landing/src/pages/vs/postmark.tsx:148-154|apps/landing/src/pages/vs/resend.tsx:147-153|apps/landing/src/pages/vs/sendgrid.tsx:151-157", + "apps/landing/src/pages/vs/brevo.tsx:156-162|apps/landing/src/pages/vs/convertkit.tsx:156-162|apps/landing/src/pages/vs/customerio.tsx:152-158|apps/landing/src/pages/vs/loops.tsx:144-150|apps/landing/src/pages/vs/mailchimp.tsx:164-170|apps/landing/src/pages/vs/mailgun.tsx:158-164|apps/landing/src/pages/vs/postmark.tsx:159-165|apps/landing/src/pages/vs/resend.tsx:158-164|apps/landing/src/pages/vs/sendgrid.tsx:162-168", + "apps/landing/src/pages/vs/brevo.tsx:169-175|apps/landing/src/pages/vs/convertkit.tsx:169-175|apps/landing/src/pages/vs/customerio.tsx:165-171|apps/landing/src/pages/vs/loops.tsx:169-175|apps/landing/src/pages/vs/mailchimp.tsx:171-177|apps/landing/src/pages/vs/mailgun.tsx:165-171|apps/landing/src/pages/vs/postmark.tsx:166-172|apps/landing/src/pages/vs/resend.tsx:165-171|apps/landing/src/pages/vs/sendgrid.tsx:169-175", + "apps/landing/src/pages/guides/index.tsx:231-270|apps/landing/src/pages/pricing.tsx:305-347|apps/landing/src/pages/tools/index.tsx:270-314|apps/landing/src/pages/tools/spam-checker.tsx:481-524", + "apps/landing/src/pages/tools/markdown-to-email.tsx:57-123|apps/landing/src/pages/tools/spam-checker.tsx:241-305|apps/landing/src/pages/tools/verify-email.tsx:68-131", + "apps/landing/src/pages/vs/loops.tsx:151-163|apps/landing/src/pages/vs/mailgun.tsx:147-159|apps/landing/src/pages/vs/postmark.tsx:148-160|apps/landing/src/pages/vs/resend.tsx:147-159", + "apps/web/src/pages/workflows/[id].tsx:1558-1603|apps/web/src/pages/workflows/[id].tsx:2584-2629", + "packages/email/src/emails/BillingLimitExceeded.tsx:66-115|packages/email/src/emails/BillingLimitWarning.tsx:70-119|packages/email/src/emails/DomainUnverified.tsx:66-115|packages/email/src/emails/DomainVerified.tsx:41-90", + "apps/landing/src/pages/vs/activecampaign.tsx:148-161|apps/landing/src/pages/vs/bento.tsx:147-160|apps/landing/src/pages/vs/index.tsx:253-284|apps/landing/src/pages/vs/klaviyo.tsx:148-161|apps/landing/src/pages/vs/mailerlite.tsx:148-161", + "apps/landing/src/pages/vs/convertkit.tsx:141-163|apps/landing/src/pages/vs/customerio.tsx:137-159", + "apps/landing/src/pages/tools/index.tsx:233-318|apps/landing/src/pages/tools/markdown-to-email.tsx:202-280", + "apps/landing/src/pages/vs/brevo.tsx:169-189|apps/landing/src/pages/vs/customerio.tsx:165-185|apps/landing/src/pages/vs/loops.tsx:169-189", + "apps/landing/src/pages/dpa.tsx:518-532|apps/landing/src/pages/dpa.tsx:554-569|apps/landing/src/pages/privacy.tsx:277-290|apps/landing/src/pages/privacy.tsx:343-354|apps/landing/src/pages/privacy.tsx:387-397|apps/landing/src/pages/privacy.tsx:448-461|apps/landing/src/pages/privacy.tsx:487-497|apps/landing/src/pages/privacy.tsx:605-615|apps/landing/src/pages/privacy.tsx:912-923|apps/landing/src/pages/terms.tsx:534-547", + "apps/web/src/pages/workflows/[id].tsx:889-935|apps/web/src/pages/workflows/index.tsx:372-429", + "apps/landing/src/pages/features/email-editor.tsx:147-170|apps/landing/src/pages/features/inbound-email.tsx:146-169|apps/landing/src/pages/features/segments.tsx:161-184|apps/landing/src/pages/features/segments.tsx:275-298|apps/landing/src/pages/features/smtp.tsx:157-182|apps/landing/src/pages/features/workflows.tsx:146-171", + "apps/landing/src/pages/dpa.tsx:247-268|apps/landing/src/pages/dpa.tsx:425-443|apps/landing/src/pages/privacy.tsx:1049-1065|apps/landing/src/pages/privacy.tsx:153-169|apps/landing/src/pages/terms.tsx:349-365|apps/landing/src/pages/terms.tsx:400-416|apps/landing/src/pages/terms.tsx:628-644", + "apps/web/src/pages/workflows/[id].tsx:1847-1892|apps/web/src/pages/workflows/[id].tsx:987-1015", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:270-355|apps/landing/src/pages/guides/email-open-rate.tsx:351-436", + "apps/web/src/pages/subscribe/[id].tsx:63-132|apps/web/src/pages/unsubscribe/[id].tsx:63-132", + "apps/landing/src/pages/guides/email-deliverability.tsx:123-163|apps/landing/src/pages/guides/email-deliverability.tsx:167-207|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:171-212|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:310-351", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:270-351|apps/landing/src/pages/guides/email-open-rate.tsx:338-420", + "apps/web/src/components/WorkflowBuilder.tsx:868-917|apps/web/src/components/WorkflowVisualizer.tsx:515-564", + "apps/landing/src/pages/guides/email-api-guide.tsx:430-459|apps/landing/src/pages/guides/email-api-guide.tsx:469-498|apps/landing/src/pages/guides/email-click-through-rate.tsx:299-328|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:196-225|apps/landing/src/pages/guides/what-is-dkim.tsx:229-255|apps/landing/src/pages/guides/what-is-dmarc.tsx:319-344", + "apps/web/src/pages/onboarding/developer.tsx:127-185|apps/web/src/pages/onboarding/workflows.tsx:137-195", + "apps/web/src/components/DomainsSettings.tsx:32-53|apps/web/src/pages/contacts/[id].tsx:231-252|apps/web/src/pages/contacts/[id].tsx:311-332|apps/web/src/pages/contacts/[id].tsx:362-383|apps/web/src/pages/contacts/[id].tsx:413-434", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:272-351|apps/landing/src/pages/guides/email-open-rate.tsx:328-407", + "apps/api/src/jobs/bulk-contact-processor.ts:96-111|apps/api/src/jobs/campaign-processor.ts:25-40|apps/api/src/jobs/email-processor.ts:295-314|apps/api/src/jobs/import-processor.ts:191-206|apps/api/src/jobs/scheduled-processor.ts:63-78|apps/api/src/jobs/workflow-processor-queue.ts:31-46", + "apps/landing/src/pages/guides/email-api-guide.tsx:474-528|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:201-255|apps/landing/src/pages/guides/what-is-dkim.tsx:222-272", + "apps/landing/src/pages/_app.tsx:12-31|apps/landing/src/pages/index.tsx:32-51|apps/landing/src/pages/tools/index.tsx:10-29|apps/landing/src/pages/tools/markdown-to-email.tsx:13-32|apps/landing/src/pages/tools/spam-checker.tsx:12-31|apps/landing/src/pages/tools/verify-email.tsx:15-34", + "apps/landing/src/pages/guides/email-open-rate.tsx:160-202|apps/landing/src/pages/guides/email-open-rate.tsx:95-136", + "apps/landing/src/pages/guides/email-api-guide.tsx:537-589|apps/landing/src/pages/guides/email-click-through-rate.tsx:143-195|apps/landing/src/pages/guides/email-open-rate.tsx:272-325", + "apps/landing/src/pages/vs/brevo.tsx:151-169|apps/landing/src/pages/vs/convertkit.tsx:151-169", + "apps/landing/src/pages/vs/brevo.tsx:145-157|apps/landing/src/pages/vs/postmark.tsx:142-154|apps/landing/src/pages/vs/sendgrid.tsx:145-157", + "apps/landing/src/pages/tools/spam-checker.tsx:241-310|apps/landing/src/pages/tools/verify-email.tsx:68-136", + "packages/email/src/emails/BillingLimitExceeded.tsx:63-115|packages/email/src/emails/BillingLimitWarning.tsx:67-119|packages/email/src/emails/DomainVerified.tsx:38-90", + "apps/landing/src/pages/features/email-editor.tsx:208-232|apps/landing/src/pages/features/inbound-email.tsx:207-231|apps/landing/src/pages/features/segments.tsx:222-246|apps/landing/src/pages/features/segments.tsx:338-362|apps/landing/src/pages/features/workflows.tsx:209-235", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:159-175|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:325-341|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:372-388|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:448-464|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:466-482|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:484-500|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:488-506", + "apps/web/src/components/EmailEditor/EmailEditor.tsx:413-449|apps/web/src/components/EmailEditor/EmailEditor.tsx:519-555|apps/web/src/components/EmailPreviewModal.tsx:72-110", + "apps/web/src/pages/workflows/[id].tsx:1444-1475|apps/web/src/pages/workflows/[id].tsx:2348-2379", + "apps/web/src/components/BillingLimits.tsx:245-274|apps/web/src/components/BillingLimits.tsx:275-304|apps/web/src/components/BillingLimits.tsx:305-334", + "apps/landing/src/pages/guides/index.tsx:228-283|apps/landing/src/pages/tools/index.tsx:267-327", + "apps/landing/src/pages/dpa.tsx:239-268|apps/landing/src/pages/privacy.tsx:1043-1065|apps/landing/src/pages/terms.tsx:394-416|apps/landing/src/pages/terms.tsx:622-644", + "apps/landing/src/pages/guides/email-api-guide.tsx:461-531|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:189-258", + "apps/landing/src/pages/privacy.tsx:176-192|apps/landing/src/pages/privacy.tsx:210-225|apps/landing/src/pages/privacy.tsx:304-319|apps/landing/src/pages/privacy.tsx:372-387|apps/landing/src/pages/privacy.tsx:471-486", + "apps/landing/src/pages/vs/brevo.tsx:141-151|apps/landing/src/pages/vs/mailchimp.tsx:143-153|apps/landing/src/pages/vs/sendgrid.tsx:141-151", + "apps/web/src/pages/manage/[id].tsx:25-75|apps/web/src/pages/subscribe/[id].tsx:25-65|apps/web/src/pages/unsubscribe/[id].tsx:25-65", + "apps/landing/src/pages/guides/email-api-guide.tsx:329-340|apps/landing/src/pages/guides/email-api-guide.tsx:343-355|apps/landing/src/pages/guides/email-api-guide.tsx:358-370|apps/landing/src/pages/guides/email-api-guide.tsx:37-48|apps/landing/src/pages/guides/email-api-guide.tsx:372-384|apps/landing/src/pages/guides/email-api-guide.tsx:50-62", + "apps/web/src/pages/templates/index.tsx:207-257|apps/web/src/pages/workflows/index.tsx:227-270", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:413-453|apps/web/src/components/EmailEditor/Toolbar.tsx:514-554", + "apps/api/src/controllers/Users.ts:284-294|apps/api/src/controllers/Users.ts:308-318|apps/api/src/controllers/Users.ts:574-584|apps/api/src/controllers/Users.ts:598-608|apps/api/src/controllers/Users.ts:672-682", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:229-263|apps/landing/src/pages/guides/email-click-through-rate.tsx:272-306|apps/landing/src/pages/guides/email-click-through-rate.tsx:328-361", + "apps/landing/src/pages/guides/email-api-guide.tsx:422-489|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:189-254", + "apps/landing/src/pages/guides/email-api-guide.tsx:543-585|apps/landing/src/pages/guides/email-click-through-rate.tsx:149-191|apps/landing/src/pages/guides/email-open-rate.tsx:271-314", + "apps/landing/src/pages/guides/what-is-dkim.tsx:59-99|apps/landing/src/pages/guides/what-is-dmarc.tsx:58-98|apps/landing/src/pages/guides/what-is-spf.tsx:58-98", + "apps/web/src/pages/contacts/[id].tsx:231-253|apps/web/src/pages/contacts/[id].tsx:311-333|apps/web/src/pages/contacts/[id].tsx:362-384|apps/web/src/pages/contacts/[id].tsx:413-435", + "apps/landing/src/pages/dpa.tsx:457-470|apps/landing/src/pages/dpa.tsx:530-543|apps/landing/src/pages/dpa.tsx:595-608|apps/landing/src/pages/privacy.tsx:233-244|apps/landing/src/pages/privacy.tsx:259-272|apps/landing/src/pages/privacy.tsx:332-343", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:60-96|apps/web/src/components/EmailEditor/Toolbar.tsx:72-102", + "apps/web/src/components/BillingConsumption.tsx:40-97|apps/web/src/components/BillingInvoices.tsx:14-71", + "apps/landing/src/pages/vs/convertkit.tsx:169-189|apps/landing/src/pages/vs/sendgrid.tsx:169-189", + "apps/landing/src/pages/privacy.tsx:1031-1054|apps/landing/src/pages/terms.tsx:256-279|apps/landing/src/pages/terms.tsx:610-633", + "apps/api/src/controllers/Contacts.ts:426-440|apps/api/src/controllers/Contacts.ts:461-474|apps/api/src/controllers/Contacts.ts:495-508", + "apps/landing/src/pages/dpa.tsx:520-535|apps/landing/src/pages/privacy.tsx:345-355|apps/landing/src/pages/privacy.tsx:921-935|apps/landing/src/pages/terms.tsx:141-154|apps/landing/src/pages/terms.tsx:287-298|apps/landing/src/pages/terms.tsx:536-551", + "apps/landing/src/pages/tools/markdown-to-email.tsx:238-288|apps/landing/src/pages/tools/verify-email.tsx:237-287", + "apps/landing/src/pages/tools/index.tsx:67-95|apps/landing/src/pages/tools/markdown-to-email.tsx:57-88|apps/landing/src/pages/tools/spam-checker.tsx:241-269|apps/landing/src/pages/tools/verify-email.tsx:68-96", + "apps/landing/src/pages/guides/email-api-guide.tsx:415-469|apps/landing/src/pages/guides/email-click-through-rate.tsx:284-338", + "apps/web/src/pages/campaigns/index.tsx:210-245|apps/web/src/pages/campaigns/index.tsx:294-329", + "apps/landing/src/pages/dpa.tsx:570-586|apps/landing/src/pages/privacy.tsx:846-859|apps/landing/src/pages/privacy.tsx:947-963|apps/landing/src/pages/terms.tsx:225-238|apps/landing/src/pages/terms.tsx:519-536", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:248-283|apps/landing/src/pages/guides/email-click-through-rate.tsx:304-339|apps/landing/src/pages/guides/what-is-dmarc.tsx:274-308", + "apps/landing/src/pages/guides/email-api-guide.tsx:334-355|apps/landing/src/pages/guides/email-api-guide.tsx:363-384|apps/landing/src/pages/guides/email-api-guide.tsx:41-62", + "apps/web/src/components/WorkflowBuilder.tsx:316-360|apps/web/src/components/WorkflowVisualizer.tsx:150-206", + "apps/landing/src/pages/guides/email-open-rate.tsx:120-150|apps/landing/src/pages/guides/email-open-rate.tsx:176-206", + "apps/landing/src/pages/tools/index.tsx:267-314|apps/landing/src/pages/tools/spam-checker.tsx:478-524", + "apps/web/src/components/BillingLimits.tsx:180-205|apps/web/src/components/DomainsSettings.tsx:269-305|apps/web/src/pages/settings/index.tsx:463-517|apps/web/src/pages/settings/index.tsx:641-664", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:126-171|apps/landing/src/pages/guides/email-sender-reputation.tsx:72-117", + "apps/api/src/controllers/Activity.ts:66-71|apps/api/src/controllers/Analytics.ts:22-27|apps/api/src/controllers/Analytics.ts:68-73|apps/api/src/controllers/Events.ts:54-59", + "apps/landing/src/pages/guides/email-api-guide.tsx:535-589|apps/landing/src/pages/guides/email-click-through-rate.tsx:141-195", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:81-102|apps/landing/src/pages/guides/email-deliverability.tsx:33-57|apps/landing/src/pages/guides/email-sender-reputation.tsx:35-59", + "apps/landing/src/pages/dpa.tsx:520-536|apps/landing/src/pages/privacy.tsx:345-356|apps/landing/src/pages/privacy.tsx:921-936|apps/landing/src/pages/terms.tsx:287-299|apps/landing/src/pages/terms.tsx:536-552", + "apps/landing/src/pages/guides/email-api-guide.tsx:394-420|apps/landing/src/pages/guides/email-click-through-rate.tsx:261-288|apps/landing/src/pages/guides/email-click-through-rate.tsx:317-344", + "apps/landing/src/pages/dpa.tsx:444-463|apps/landing/src/pages/dpa.tsx:574-591|apps/landing/src/pages/dpa.tsx:647-663|apps/landing/src/pages/privacy.tsx:943-957|apps/landing/src/pages/terms.tsx:512-530", + "apps/web/src/pages/contacts/[id].tsx:311-337|apps/web/src/pages/contacts/[id].tsx:362-388|apps/web/src/pages/contacts/[id].tsx:413-438", + "apps/landing/src/pages/privacy.tsx:1043-1065|apps/landing/src/pages/terms.tsx:393-416|apps/landing/src/pages/terms.tsx:622-644", + "apps/web/src/pages/contacts/[id].tsx:311-346|apps/web/src/pages/contacts/[id].tsx:362-397", + "apps/landing/src/pages/privacy.tsx:1031-1065|apps/landing/src/pages/terms.tsx:610-644", + "apps/landing/src/pages/privacy.tsx:170-194|apps/landing/src/pages/privacy.tsx:202-227|apps/landing/src/pages/privacy.tsx:368-389", + "apps/landing/src/pages/vs/convertkit.tsx:163-175|apps/landing/src/pages/vs/loops.tsx:163-175", + "apps/api/src/jobs/email-processor.ts:112-145|apps/api/src/services/EmailService.ts:360-399", + "apps/landing/src/pages/privacy.tsx:1042-1062|apps/landing/src/pages/privacy.tsx:1068-1089|apps/landing/src/pages/terms.tsx:621-641", + "apps/landing/src/pages/guides/email-api-guide.tsx:358-388|apps/landing/src/pages/guides/email-api-guide.tsx:37-67", + "apps/web/src/pages/onboarding/developer.tsx:127-148|apps/web/src/pages/onboarding/marketing.tsx:77-98|apps/web/src/pages/onboarding/workflows.tsx:137-158", + "apps/landing/src/pages/guides/email-deliverability.tsx:130-166|apps/landing/src/pages/guides/email-deliverability.tsx:174-210|apps/landing/src/pages/guides/email-deliverability.tsx:218-253", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:328-343|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:451-466|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:469-484|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:487-502|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:429-445", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:333-366|apps/web/src/components/EmailEditor/Toolbar.tsx:431-464", + "apps/web/src/pages/auth/login.tsx:120-157|apps/web/src/pages/auth/signup.tsx:80-124", + "apps/web/src/pages/workflows/[id].tsx:1190-1218|apps/web/src/pages/workflows/[id].tsx:2095-2123", + "apps/web/src/pages/subscribe/[id].tsx:24-65|apps/web/src/pages/unsubscribe/[id].tsx:24-65", + "apps/landing/src/pages/guides/email-api-guide.tsx:531-578|apps/landing/src/pages/guides/email-deliverability.tsx:67-113", + "apps/web/src/pages/workflows/[id].tsx:1607-1641|apps/web/src/pages/workflows/[id].tsx:2633-2667", + "apps/web/src/pages/workflows/[id].tsx:1704-1726|apps/web/src/pages/workflows/[id].tsx:2806-2828", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:458-472|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:539-553|apps/landing/src/pages/guides/what-is-dkim.tsx:459-473|apps/landing/src/pages/guides/what-is-dmarc.tsx:365-379|apps/landing/src/pages/guides/what-is-spf.tsx:348-362", + "apps/api/src/services/BillingLimitService.ts:602-622|apps/api/src/services/BillingLimitService.ts:654-674", + "apps/landing/src/pages/dpa.tsx:602-630|apps/landing/src/pages/privacy.tsx:1041-1060|apps/landing/src/pages/terms.tsx:620-639", + "apps/landing/src/pages/dpa.tsx:485-501|apps/landing/src/pages/dpa.tsx:571-587|apps/landing/src/pages/privacy.tsx:948-966|apps/landing/src/pages/terms.tsx:520-537", + "apps/landing/src/pages/dpa.tsx:443-467|apps/landing/src/pages/privacy.tsx:942-961|apps/landing/src/pages/terms.tsx:511-534", + "apps/web/src/components/CampaignSelectionDialog.tsx:213-247|apps/web/src/components/TemplateSelectionDialog.tsx:249-282", + "apps/api/src/jobs/domain-verification.ts:76-101|apps/api/src/services/DomainService.ts:93-112", + "apps/api/src/controllers/Users.ts:378-401|apps/api/src/controllers/Users.ts:495-519", + "apps/landing/src/pages/guides/email-api-guide.tsx:77-118|apps/landing/src/pages/guides/email-click-through-rate.tsx:140-184", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:401-442|apps/landing/src/pages/guides/what-is-dkim.tsx:281-324", + "apps/landing/src/pages/privacy.tsx:705-727|apps/landing/src/pages/privacy.tsx:738-758|apps/landing/src/pages/privacy.tsx:995-1013", + "apps/web/src/pages/onboarding/developer.tsx:150-171|apps/web/src/pages/onboarding/marketing.tsx:93-120|apps/web/src/pages/onboarding/workflows.tsx:160-181", + "apps/landing/src/pages/guides/email-api-guide.tsx:78-122|apps/landing/src/pages/guides/email-deliverability.tsx:71-117", + "apps/landing/src/pages/privacy.tsx:942-973|apps/landing/src/pages/terms.tsx:511-544", + "apps/landing/src/pages/privacy.tsx:508-530|apps/landing/src/pages/privacy.tsx:538-560|apps/landing/src/pages/privacy.tsx:568-589", + "apps/landing/src/pages/terms.tsx:216-233|apps/landing/src/pages/terms.tsx:267-289|apps/landing/src/pages/terms.tsx:328-349", + "apps/api/src/middleware/auth.ts:157-183|apps/api/src/middleware/auth.ts:88-114", + "apps/web/src/pages/workflows/[id].tsx:1076-1264|apps/web/src/pages/workflows/[id].tsx:1872-1895", + "apps/landing/src/lib/editorColors.ts:5-38|apps/web/src/components/EmailEditor/Toolbar.tsx:178-211", + "packages/email/src/emails/BillingLimitExceeded.tsx:60-104|packages/email/src/emails/ProjectDisabledPayment.tsx:30-73", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:407-416|apps/landing/src/pages/guides/email-bounce-rate.tsx:418-428|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:339-349|apps/landing/src/pages/guides/email-open-rate.tsx:206-215|apps/landing/src/pages/guides/email-open-rate.tsx:216-226", + "apps/landing/src/pages/index.tsx:529-552|apps/landing/src/pages/tools/index.tsx:233-256|apps/landing/src/pages/tools/markdown-to-email.tsx:202-225", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:404-446|apps/landing/src/pages/guides/what-is-dkim.tsx:291-334", + "apps/landing/src/pages/dpa.tsx:443-460|apps/landing/src/pages/privacy.tsx:942-954|apps/landing/src/pages/terms.tsx:511-526|apps/landing/src/pages/terms.tsx:583-597", + "apps/landing/src/pages/privacy.tsx:994-1006|apps/landing/src/pages/terms.tsx:365-378|apps/landing/src/pages/terms.tsx:444-456|apps/landing/src/pages/terms.tsx:609-621", + "apps/landing/src/pages/dpa.tsx:569-591|apps/landing/src/pages/privacy.tsx:946-969|apps/landing/src/pages/terms.tsx:518-540", + "apps/landing/src/pages/guides/what-is-dmarc.tsx:58-98|apps/landing/src/pages/guides/what-is-spf.tsx:58-98", + "apps/landing/src/pages/guides/email-deliverability.tsx:28-57|apps/landing/src/pages/guides/email-sender-reputation.tsx:29-59", + "apps/api/src/controllers/Segments.ts:135-141|apps/api/src/controllers/Segments.ts:205-211|apps/api/src/controllers/Segments.ts:225-231|apps/api/src/controllers/Segments.ts:31-37", + "apps/api/src/controllers/Templates.ts:136-142|apps/api/src/controllers/Templates.ts:156-162|apps/api/src/controllers/Templates.ts:176-182|apps/api/src/controllers/Templates.ts:37-43", + "apps/landing/src/pages/terms.tsx:452-476|apps/landing/src/pages/terms.tsx:481-505", + "apps/web/src/components/WorkflowBuilder.tsx:146-169|apps/web/src/components/WorkflowVisualizer.tsx:96-119", + "apps/landing/src/pages/privacy.tsx:188-215|apps/landing/src/pages/privacy.tsx:473-496", + "apps/landing/src/pages/guides/email-api-guide.tsx:349-374|apps/landing/src/pages/guides/email-api-guide.tsx:41-65", + "apps/landing/src/pages/privacy.tsx:198-227|apps/landing/src/pages/privacy.tsx:364-389", + "apps/landing/src/pages/privacy.tsx:346-368|apps/landing/src/pages/privacy.tsx:906-928", + "apps/web/src/pages/campaigns/create.tsx:255-295|apps/web/src/pages/templates/create.tsx:148-180", + "apps/landing/src/pages/privacy.tsx:175-200|apps/landing/src/pages/privacy.tsx:302-327", + "packages/email/src/emails/ProjectDisabled.tsx:22-59|packages/email/src/emails/ProjectDisabledPayment.tsx:20-56", + "apps/web/src/components/CampaignSelectionDialog.tsx:277-303|apps/web/src/components/TemplateSelectionDialog.tsx:314-340", + "apps/web/src/pages/campaigns/[id].tsx:491-512|apps/web/src/pages/campaigns/create.tsx:255-276|apps/web/src/pages/templates/create.tsx:148-169", + "apps/landing/src/pages/dpa.tsx:122-139|apps/landing/src/pages/dpa.tsx:395-412|apps/landing/src/pages/privacy.tsx:245-259|apps/landing/src/pages/terms.tsx:297-312", + "apps/api/src/middleware/auth.ts:167-197|apps/api/src/middleware/auth.ts:235-264", + "apps/landing/src/pages/privacy.tsx:177-201|apps/landing/src/pages/privacy.tsx:827-850", + "apps/web/src/pages/_document.tsx:33-54|apps/wiki/app/layout.tsx:45-67", + "apps/landing/src/lib/emailHtmlConverter.ts:9-157|apps/web/src/components/EmailEditor/emailHtmlConverter.ts:9-146", + "apps/landing/src/pages/index.tsx:32-91|apps/landing/src/pages/tools/index.tsx:10-53|apps/landing/src/pages/tools/spam-checker.tsx:12-84", + "apps/web/src/components/DomainsSettings.tsx:499-530|apps/web/src/components/DomainsSettings.tsx:625-656", + "apps/api/src/middleware/auth.ts:125-142|apps/api/src/middleware/auth.ts:194-211|apps/api/src/middleware/auth.ts:261-278|apps/api/src/middleware/auth.ts:304-322", + "apps/web/src/components/DomainsSettings.tsx:277-309|apps/web/src/pages/settings/index.tsx:489-521", + "apps/web/src/pages/campaigns/create.tsx:104-112|apps/web/src/pages/campaigns/create.tsx:87-95", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:133-144|apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:192-203|apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:229-240|apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:266-277", + "apps/landing/src/pages/dpa.tsx:233-254|apps/landing/src/pages/privacy.tsx:1029-1045|apps/landing/src/pages/terms.tsx:343-361", + "apps/landing/src/pages/privacy.tsx:374-395|apps/landing/src/pages/privacy.tsx:837-858", + "apps/web/src/components/WorkflowBuilder.tsx:62-104|apps/web/src/components/WorkflowVisualizer.tsx:40-82|apps/web/src/pages/workflows/[id].tsx:105-147", + "apps/landing/src/pages/privacy.tsx:994-1008|apps/landing/src/pages/terms.tsx:444-458|apps/landing/src/pages/terms.tsx:609-623", + "apps/api/src/controllers/Users.ts:246-253|apps/api/src/controllers/Users.ts:378-385|apps/api/src/controllers/Users.ts:495-502", + "apps/landing/src/pages/dpa.tsx:282-297|apps/landing/src/pages/privacy.tsx:678-697|apps/landing/src/pages/terms.tsx:424-439", + "apps/landing/src/pages/guides/what-is-dkim.tsx:220-253|apps/landing/src/pages/guides/what-is-dmarc.tsx:272-307", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:213-228|apps/landing/src/pages/guides/email-sender-reputation.tsx:239-254|apps/landing/src/pages/guides/email-sender-reputation.tsx:265-280|apps/landing/src/pages/guides/what-is-spf.tsx:227-242", + "apps/landing/src/pages/dpa.tsx:420-438|apps/landing/src/pages/dpa.tsx:488-504|apps/landing/src/pages/terms.tsx:584-600", + "apps/landing/src/pages/dpa.tsx:278-302|apps/landing/src/pages/terms.tsx:420-444", + "apps/web/src/pages/workflows/[id].tsx:1044-1059|apps/web/src/pages/workflows/[id].tsx:1945-1960", + "apps/api/src/services/EmailService.ts:675-695|apps/web/src/lib/emailStyles.ts:24-44", + "apps/landing/src/pages/terms.tsx:217-237|apps/landing/src/pages/terms.tsx:448-468", + "apps/landing/src/pages/dpa.tsx:216-232|apps/landing/src/pages/dpa.tsx:370-389|apps/landing/src/pages/terms.tsx:495-511", + "apps/landing/src/pages/dpa.tsx:456-472|apps/landing/src/pages/dpa.tsx:529-545|apps/landing/src/pages/privacy.tsx:256-274", + "apps/landing/src/pages/dpa.tsx:286-302|apps/landing/src/pages/dpa.tsx:465-481|apps/landing/src/pages/terms.tsx:428-444", + "apps/landing/src/pages/privacy.tsx:1069-1090|apps/landing/src/pages/privacy.tsx:725-750", + "apps/web/src/components/WorkflowBuilder.tsx:654-671|apps/web/src/components/WorkflowVisualizer.tsx:423-449", + "apps/web/src/components/WorkflowVisualizer.tsx:266-290|apps/web/src/components/WorkflowVisualizer.tsx:362-402", + "apps/landing/src/pages/privacy.tsx:597-616|apps/landing/src/pages/privacy.tsx:904-924", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:212-231|apps/landing/src/pages/guides/email-open-rate.tsx:250-274", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:407-425|apps/landing/src/pages/guides/what-is-dkim.tsx:287-306|apps/landing/src/pages/guides/what-is-dkim.tsx:311-328|apps/landing/src/pages/guides/what-is-spf.tsx:312-328", + "apps/landing/src/pages/dpa.tsx:657-670|apps/landing/src/pages/privacy.tsx:401-413|apps/landing/src/pages/privacy.tsx:423-438|apps/landing/src/pages/terms.tsx:173-187", + "apps/landing/src/pages/dpa.tsx:236-265|apps/landing/src/pages/privacy.tsx:720-747", + "apps/landing/src/pages/dpa.tsx:196-218|apps/landing/src/pages/dpa.tsx:269-291", + "apps/landing/src/pages/vs/index.tsx:224-258|apps/landing/src/pages/vs/mailgun.tsx:134-140|apps/landing/src/pages/vs/resend.tsx:134-140", + "apps/web/src/pages/workflows/[id].tsx:1106-1126|apps/web/src/pages/workflows/[id].tsx:1981-2001", + "apps/web/src/pages/auth/login.tsx:274-295|apps/web/src/pages/auth/reset-password.tsx:180-201|apps/web/src/pages/auth/signup.tsx:204-225", + "apps/landing/src/pages/guides/email-deliverability.tsx:311-341|apps/landing/src/pages/guides/what-is-spf.tsx:184-216", + "apps/api/src/services/EmailService.ts:663-673|apps/web/src/lib/emailStyles.ts:3-14", + "apps/landing/src/pages/dpa.tsx:457-478|apps/landing/src/pages/dpa.tsx:595-620", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:84-95|apps/landing/src/pages/guides/email-open-rate.tsx:104-115|apps/landing/src/pages/guides/email-open-rate.tsx:170-181", + "apps/landing/src/pages/privacy.tsx:531-560|apps/landing/src/pages/privacy.tsx:561-589", + "apps/landing/src/pages/privacy.tsx:1070-1090|apps/landing/src/pages/privacy.tsx:717-741", + "apps/landing/src/pages/dpa.tsx:520-537|apps/landing/src/pages/privacy.tsx:345-357|apps/landing/src/pages/terms.tsx:287-301", + "apps/landing/src/pages/dpa.tsx:594-607|apps/landing/src/pages/privacy.tsx:169-182|apps/landing/src/pages/privacy.tsx:331-342", + "apps/web/src/pages/subscribe/[id].tsx:132-157|apps/web/src/pages/unsubscribe/[id].tsx:132-158", + "apps/landing/src/pages/dpa.tsx:210-229|apps/landing/src/pages/dpa.tsx:273-293", + "apps/api/src/controllers/Workflows.ts:139-145|apps/api/src/controllers/Workflows.ts:385-391|apps/api/src/controllers/Workflows.ts:61-67", + "apps/api/src/controllers/Templates.ts:15-23|apps/api/src/controllers/Workflows.ts:15-24", + "apps/web/src/pages/contacts/index.tsx:630-672|apps/web/src/pages/contacts/index.tsx:915-952", + "apps/api/src/controllers/Segments.ts:205-213|apps/api/src/controllers/Segments.ts:225-233|apps/api/src/controllers/Segments.ts:31-39", + "apps/api/src/controllers/Templates.ts:156-164|apps/api/src/controllers/Templates.ts:176-184|apps/api/src/controllers/Templates.ts:37-45", + "apps/landing/src/pages/privacy.tsx:247-264|apps/landing/src/pages/privacy.tsx:622-638|apps/landing/src/pages/privacy.tsx:653-670", + "apps/api/src/controllers/Webhooks.ts:362-378|apps/api/src/controllers/Webhooks.ts:393-408", + "apps/landing/src/pages/guides/what-is-dmarc.tsx:140-156|apps/landing/src/pages/guides/what-is-dmarc.tsx:160-176", + "apps/landing/src/pages/privacy.tsx:705-728|apps/landing/src/pages/privacy.tsx:995-1014", + "apps/landing/src/pages/dpa.tsx:450-473|apps/landing/src/pages/dpa.tsx:526-546", + "apps/landing/src/pages/terms.tsx:215-233|apps/landing/src/pages/terms.tsx:266-289", + "apps/landing/src/pages/dpa.tsx:518-541|apps/landing/src/pages/privacy.tsx:343-361", + "apps/web/src/pages/campaigns/[id].tsx:492-519|apps/web/src/pages/templates/[id].tsx:227-254", + "apps/landing/src/pages/terms.tsx:325-344|apps/landing/src/pages/terms.tsx:417-436", + "apps/landing/src/pages/dpa.tsx:517-532|apps/landing/src/pages/dpa.tsx:553-569|apps/landing/src/pages/privacy.tsx:447-461", + "apps/landing/src/lib/network.ts:4-33|apps/web/src/lib/network.ts:5-28", + "apps/api/src/jobs/domain-verification.ts:166-173|apps/api/src/services/DomainService.ts:189-196", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:191-235|apps/landing/src/pages/guides/email-sender-reputation.tsx:244-274", + "apps/landing/src/pages/dpa.tsx:604-633|apps/landing/src/pages/privacy.tsx:734-756", + "apps/landing/src/pages/privacy.tsx:595-614|apps/landing/src/pages/terms.tsx:451-469", + "apps/api/src/controllers/Users.ts:284-300|apps/api/src/controllers/Users.ts:574-590", + "apps/web/src/pages/campaigns/create.tsx:36-45|apps/web/src/pages/templates/create.tsx:26-35", + "apps/api/src/services/ContactService.ts:726-743|apps/api/src/services/ContactService.ts:775-791", + "apps/web/src/pages/manage/[id].tsx:133-149|apps/web/src/pages/subscribe/[id].tsx:160-176|apps/web/src/pages/unsubscribe/[id].tsx:171-187", + "apps/web/src/pages/onboarding/developer.tsx:112-127|apps/web/src/pages/onboarding/marketing.tsx:62-77|apps/web/src/pages/onboarding/workflows.tsx:122-137", + "apps/web/src/pages/auth/verify-email.tsx:175-197|apps/web/src/pages/auth/verify-email.tsx:256-278", + "apps/api/src/services/EmailVerificationService.ts:174-186|apps/api/src/services/EmailVerificationService.ts:234-246", + "apps/api/src/controllers/Projects.ts:108-116|apps/api/src/controllers/Projects.ts:21-45|apps/api/src/controllers/Projects.ts:85-93", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:284-298|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:365-379|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:487-503", + "apps/api/src/controllers/Contacts.ts:202-209|apps/api/src/controllers/Contacts.ts:238-245|apps/api/src/controllers/Contacts.ts:260-267", + "apps/web/src/components/WorkflowBuilder.tsx:59-112|apps/web/src/components/WorkflowVisualizer.tsx:23-122", + "apps/landing/src/pages/guides/what-is-dkim.tsx:243-272|apps/landing/src/pages/guides/what-is-spf.tsx:258-288", + "apps/web/src/pages/auth/login.tsx:265-295|apps/web/src/pages/auth/signup.tsx:195-225", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:53-59|apps/web/src/components/EmailEditor/Toolbar.tsx:64-70", + "apps/web/src/pages/manage/[id].tsx:17-24|apps/web/src/pages/subscribe/[id].tsx:17-24|apps/web/src/pages/unsubscribe/[id].tsx:17-24", + "apps/api/src/controllers/Users.ts:598-614|apps/api/src/controllers/Users.ts:672-696", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:302-323|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:437-458", + "apps/web/src/components/CampaignSelectionDialog.tsx:144-161|apps/web/src/pages/campaigns/index.tsx:249-266", + "apps/landing/src/pages/dpa.tsx:122-147|apps/landing/src/pages/dpa.tsx:395-420", + "apps/landing/src/pages/privacy.tsx:346-363|apps/landing/src/pages/privacy.tsx:480-497", + "apps/landing/src/pages/dpa.tsx:126-152|apps/landing/src/pages/privacy.tsx:874-898", + "apps/landing/src/pages/dpa.tsx:444-468|apps/landing/src/pages/terms.tsx:523-545", + "apps/landing/src/pages/dpa.tsx:276-294|apps/landing/src/pages/terms.tsx:214-232", + "apps/landing/src/pages/dpa.tsx:194-208|apps/landing/src/pages/dpa.tsx:655-669|apps/landing/src/pages/terms.tsx:171-185", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:429-446|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:515-532|apps/landing/src/pages/guides/email-sender-reputation.tsx:544-561", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:303-319|apps/landing/src/pages/guides/email-sender-reputation.tsx:337-353|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:440-453", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:86-103|apps/web/src/components/EmailEditor/Toolbar.tsx:164-211", + "apps/landing/src/pages/privacy.tsx:339-356|apps/landing/src/pages/terms.tsx:530-552", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:363-390|apps/landing/src/pages/guides/email-sender-reputation.tsx:401-429", + "apps/landing/src/pages/terms.tsx:444-460|apps/landing/src/pages/terms.tsx:609-625", + "apps/api/src/jobs/api-request-cleanup-processor.ts:99-106|apps/api/src/services/QueueService.ts:31-38", + "apps/landing/src/pages/dpa.tsx:407-432|apps/landing/src/pages/privacy.tsx:248-269", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:411-428|apps/landing/src/pages/guides/email-open-rate.tsx:209-226", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:319-341|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:366-388", + "apps/web/src/pages/contacts/[id].tsx:285-304|apps/web/src/pages/contacts/[id].tsx:335-355", + "apps/web/src/pages/workflows/[id].tsx:1552-1566|apps/web/src/pages/workflows/[id].tsx:882-897", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:238-262|apps/landing/src/pages/guides/email-open-rate.tsx:325-348", + "apps/api/src/jobs/import-processor.ts:192-206|apps/api/src/jobs/scheduled-processor.ts:64-78", + "apps/web/src/pages/contacts/index.tsx:689-702|apps/web/src/pages/contacts/index.tsx:963-976", + "apps/landing/src/pages/dpa.tsx:417-439|apps/landing/src/pages/dpa.tsx:487-505", + "apps/landing/src/pages/dpa.tsx:493-514|apps/landing/src/pages/terms.tsx:447-464", + "apps/landing/src/pages/dpa.tsx:556-577|apps/landing/src/pages/privacy.tsx:1066-1083", + "apps/api/src/services/QueueService.ts:304-327|apps/api/src/services/QueueService.ts:371-394", + "apps/landing/src/pages/terms.tsx:265-282|apps/landing/src/pages/terms.tsx:492-508", + "apps/landing/src/pages/guides/email-open-rate.tsx:101-112|apps/landing/src/pages/guides/email-open-rate.tsx:167-178|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:30-41", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:451-472|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:532-553", + "apps/landing/src/pages/guides/what-is-dkim.tsx:452-473|apps/landing/src/pages/guides/what-is-spf.tsx:341-362", + "apps/web/src/components/WorkflowBuilder.tsx:490-501|apps/web/src/components/WorkflowVisualizer.tsx:240-251", + "apps/web/src/components/ActivityItem.tsx:29-44|apps/web/src/components/ActivityItem.tsx:64-79", + "apps/api/src/controllers/Workflows.ts:343-352|apps/api/src/controllers/Workflows.ts:364-373", + "apps/landing/src/pages/guides/what-is-dmarc.tsx:297-319|apps/landing/src/pages/guides/what-is-spf.tsx:243-271", + "packages/email/src/emails/BillingLimitExceeded.tsx:36-55|packages/email/src/emails/BillingLimitWarning.tsx:40-59", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:108-121|apps/landing/src/pages/guides/email-click-through-rate.tsx:90-103", + "apps/api/src/services/DomainService.ts:144-152|apps/api/src/services/DomainService.ts:191-199", + "apps/web/src/pages/campaigns/create.tsx:70-75|apps/web/src/pages/campaigns/create.tsx:86-91", + "apps/landing/src/pages/guides/email-api-guide.tsx:391-414|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:186-209", + "apps/landing/src/pages/guides/email-api-guide.tsx:511-531|apps/landing/src/pages/guides/email-click-through-rate.tsx:345-365|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:238-258", + "apps/api/src/controllers/Users.ts:169-191|apps/api/src/controllers/Users.ts:248-270", + "apps/landing/src/pages/privacy.tsx:844-859|apps/landing/src/pages/privacy.tsx:954-974", + "apps/landing/src/pages/dpa.tsx:214-232|apps/landing/src/pages/terms.tsx:493-511", + "apps/landing/src/pages/dpa.tsx:594-611|apps/landing/src/pages/privacy.tsx:331-346", + "apps/api/src/controllers/Activity.ts:66-71|apps/api/src/controllers/Events.ts:54-59", + "apps/landing/src/pages/privacy.tsx:620-640|apps/landing/src/pages/privacy.tsx:651-672", + "apps/landing/src/pages/privacy.tsx:383-400|apps/landing/src/pages/privacy.tsx:483-500", + "apps/api/src/jobs/domain-verification.ts:127-135|apps/api/src/jobs/domain-verification.ts:168-176", + "apps/landing/src/pages/guides/email-deliverability.tsx:346-368|apps/landing/src/pages/guides/what-is-dmarc.tsx:349-371", + "apps/landing/src/pages/privacy.tsx:381-397|apps/landing/src/pages/terms.tsx:526-547", + "apps/landing/src/pages/privacy.tsx:1005-1025|apps/landing/src/pages/terms.tsx:591-612", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:416-435|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:336-356", + "apps/landing/src/pages/dpa.tsx:232-251|apps/landing/src/pages/privacy.tsx:701-720", + "apps/api/src/services/WorkflowService.ts:503-526|apps/api/src/services/WorkflowService.ts:751-774", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:445-464|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:480-500", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:199-211|apps/landing/src/pages/guides/email-bounce-rate.tsx:217-229", + "apps/web/src/components/EmailEditor/EmailEditor.tsx:246-256|apps/web/src/components/EmailEditor/EmailEditor.tsx:265-275", + "apps/landing/src/pages/dpa.tsx:501-517|apps/landing/src/pages/dpa.tsx:538-553|apps/landing/src/pages/terms.tsx:540-555", + "apps/api/src/controllers/Campaigns.ts:176-180|apps/api/src/controllers/Campaigns.ts:227-231|apps/api/src/controllers/Campaigns.ts:91-95", + "apps/landing/src/pages/privacy.tsx:149-169|apps/landing/src/pages/terms.tsx:344-365", + "apps/landing/src/pages/dpa.tsx:530-550|apps/landing/src/pages/privacy.tsx:332-347", + "apps/landing/src/pages/dpa.tsx:17-38|apps/landing/src/pages/privacy.tsx:18-38|apps/landing/src/pages/terms.tsx:18-38", + "apps/web/src/pages/onboarding/developer.tsx:203-224|apps/web/src/pages/onboarding/marketing.tsx:129-149|apps/web/src/pages/onboarding/workflows.tsx:209-230", + "apps/landing/src/pages/tools/markdown-to-email.tsx:13-291|apps/landing/src/pages/tools/verify-email.tsx:15-290", + "apps/landing/src/pages/dpa.tsx:610-640|apps/landing/src/pages/terms.tsx:589-609", + "apps/landing/src/pages/privacy.tsx:18-45|apps/landing/src/pages/terms.tsx:18-45", + "apps/web/src/components/BillingConsumption.tsx:40-76|apps/web/src/components/BillingInvoices.tsx:14-50|apps/web/src/components/BillingLimits.tsx:138-156", + "apps/landing/src/pages/dpa.tsx:393-408|apps/landing/src/pages/privacy.tsx:126-141|apps/landing/src/pages/terms.tsx:295-308", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:422-433|apps/landing/src/pages/guides/email-open-rate.tsx:456-467|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:507-518", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:314-332|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:443-461", + "apps/api/src/services/SegmentService.ts:566-579|apps/api/src/services/SegmentService.ts:597-610", + "apps/api/src/controllers/Domains.ts:104-115|apps/api/src/controllers/Domains.ts:132-143", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:392-417|apps/landing/src/pages/guides/what-is-spf.tsx:288-312", + "apps/landing/src/pages/dpa.tsx:366-385|apps/landing/src/pages/terms.tsx:255-271", + "apps/landing/src/pages/dpa.tsx:367-386|apps/landing/src/pages/terms.tsx:445-462", + "apps/web/src/components/CampaignSelectionDialog.tsx:362-381|apps/web/src/components/TemplateSelectionDialog.tsx:380-399", + "apps/api/src/services/SegmentService.ts:1115-1143|apps/api/src/services/SegmentService.ts:1225-1254", + "apps/api/src/services/EmailService.ts:153-165|apps/api/src/services/EmailService.ts:215-227", + "apps/web/src/pages/activity/index.tsx:88-100|apps/web/src/pages/analytics/index.tsx:243-255", + "apps/api/src/controllers/Segments.ts:63-75|apps/api/src/controllers/Templates.ts:47-59|apps/api/src/controllers/Workflows.ts:71-83", + "apps/web/src/components/SegmentFilterBuilder.tsx:165-186|apps/web/src/components/SegmentFilterBuilder.tsx:211-232", + "apps/web/src/pages/segments/[id].tsx:268-290|apps/web/src/pages/segments/new.tsx:151-173", + "apps/landing/src/pages/privacy.tsx:426-443|apps/landing/src/pages/privacy.tsx:681-698", + "apps/api/src/services/SecurityService.ts:1005-1017|apps/api/src/services/SecurityService.ts:751-763", + "apps/api/src/controllers/Projects.ts:183-193|apps/api/src/controllers/Projects.ts:236-246", + "apps/web/src/pages/templates/index.tsx:99-118|apps/web/src/pages/workflows/index.tsx:108-129", + "apps/web/src/pages/contacts/index.tsx:1072-1089|apps/web/src/pages/contacts/index.tsx:796-814", + "apps/landing/src/pages/dpa.tsx:561-580|apps/landing/src/pages/privacy.tsx:1076-1093", + "apps/web/src/pages/workflows/[id].tsx:1663-1677|apps/web/src/pages/workflows/[id].tsx:2718-2732", + "apps/landing/src/pages/index.tsx:480-509|apps/landing/src/pages/tools/index.tsx:183-212", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:159-177|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:372-390", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:114-130|apps/landing/src/pages/guides/email-bounce-rate.tsx:140-156", + "apps/api/src/controllers/Contacts.ts:341-350|apps/api/src/controllers/Contacts.ts:529-538", + "apps/web/src/pages/templates/index.tsx:33-46|apps/web/src/pages/workflows/index.tsx:45-56", + "apps/web/src/pages/segments/[id].tsx:238-255|apps/web/src/pages/segments/new.tsx:120-138", + "apps/landing/src/pages/dpa.tsx:517-533|apps/landing/src/pages/dpa.tsx:553-570", + "apps/api/src/services/SecurityService.ts:691-707|apps/api/src/services/SecurityService.ts:953-967", + "apps/landing/src/pages/guides/what-is-spf.tsx:137-150|apps/landing/src/pages/guides/what-is-spf.tsx:153-166", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:124-146|apps/landing/src/pages/guides/email-open-rate.tsx:270-292", + "apps/web/src/components/WorkflowBuilder.tsx:446-455|apps/web/src/components/WorkflowVisualizer.tsx:459-468", + "apps/web/src/components/DomainsSettings.tsx:530-549|apps/web/src/components/DomainsSettings.tsx:656-673", + "apps/api/src/controllers/Segments.ts:158-168|apps/api/src/controllers/Segments.ts:183-193", + "apps/api/src/controllers/Templates.ts:156-164|apps/api/src/controllers/Templates.ts:37-45", + "apps/landing/src/pages/guides/email-api-guide.tsx:412-428|apps/landing/src/pages/guides/email-bounce-rate.tsx:260-278", + "apps/landing/src/pages/privacy.tsx:424-442|apps/landing/src/pages/terms.tsx:325-339", + "apps/landing/src/pages/dpa.tsx:651-668|apps/landing/src/pages/terms.tsx:337-354", + "apps/landing/src/pages/terms.tsx:177-194|apps/landing/src/pages/terms.tsx:333-350", + "apps/landing/src/pages/guides/what-is-dmarc.tsx:271-292|apps/landing/src/pages/guides/what-is-spf.tsx:219-240", + "apps/api/src/services/EmailService.ts:133-169|apps/api/src/services/EmailService.ts:209-253", + "apps/api/src/services/WorkflowExecutionService.ts:142-165|apps/api/src/services/WorkflowExecutionService.ts:50-73", + "apps/landing/src/pages/privacy.tsx:264-279|apps/landing/src/pages/privacy.tsx:468-482", + "apps/api/src/jobs/domain-verification.ts:143-154|apps/api/src/jobs/domain-verification.ts:184-194", + "apps/landing/src/pages/dpa.tsx:393-413|apps/landing/src/pages/terms.tsx:295-312", + "apps/api/src/services/SegmentService.ts:1095-1120|apps/api/src/services/SegmentService.ts:1204-1230", + "apps/api/src/services/SegmentService.ts:1010-1022|apps/api/src/services/SegmentService.ts:903-917", + "apps/api/src/controllers/Contacts.ts:373-382|apps/api/src/controllers/Contacts.ts:400-409", + "apps/api/src/controllers/Events.ts:108-117|apps/api/src/controllers/Events.ts:135-144", + "apps/web/src/pages/auth/login.tsx:215-235|apps/web/src/pages/auth/signup.tsx:159-179", + "apps/api/src/controllers/Workflows.ts:385-393|apps/api/src/controllers/Workflows.ts:61-69", + "apps/web/src/components/WorkflowBuilder.tsx:791-844|apps/web/src/components/WorkflowVisualizer.tsx:461-492", + "test/helpers/factories.ts:275-288|test/helpers/factories.ts:292-305", + "apps/api/src/services/SecurityService.ts:740-750|apps/api/src/services/SecurityService.ts:994-1004", + "apps/web/src/pages/workflows/[id].tsx:1489-1504|apps/web/src/pages/workflows/[id].tsx:2396-2411", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:428-446|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:513-532", + "apps/api/src/services/SegmentService.ts:888-903|apps/api/src/services/SegmentService.ts:999-1010", + "apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:39-50|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:54-65", + "apps/landing/src/pages/guides/what-is-dkim.tsx:349-360|apps/landing/src/pages/guides/what-is-dkim.tsx:364-375", + "apps/api/src/services/SegmentService.ts:267-275|apps/api/src/services/SegmentService.ts:304-313", + "apps/web/src/pages/subscribe/[id].tsx:178-195|apps/web/src/pages/unsubscribe/[id].tsx:189-206", + "apps/web/src/pages/workflows/[id].tsx:2819-2833|apps/web/src/pages/workflows/[id].tsx:945-958", + "apps/web/src/pages/contacts/[id].tsx:158-175|apps/web/src/pages/contacts/index.tsx:531-548", + "apps/web/src/pages/campaigns/[id].tsx:469-478|apps/web/src/pages/campaigns/create.tsx:234-243", + "apps/api/src/services/WorkflowExecutionService.ts:723-747|apps/api/src/services/WorkflowExecutionService.ts:919-944", + "apps/web/src/components/DomainsSettings.tsx:414-435|apps/web/src/components/DomainsSettings.tsx:623-642", + "apps/api/src/services/QueueService.ts:525-540|apps/api/src/services/QueueService.ts:555-568", + "apps/landing/src/pages/privacy.tsx:298-310|apps/landing/src/pages/privacy.tsx:464-476", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:189-199|apps/landing/src/pages/guides/email-bounce-rate.tsx:207-217", + "apps/web/src/pages/workflows/[id].tsx:1778-1787|apps/web/src/pages/workflows/[id].tsx:1796-1804", + "apps/api/src/controllers/Contacts.ts:112-118|apps/api/src/controllers/Contacts.ts:183-189", + "apps/landing/src/pages/privacy.tsx:297-309|apps/landing/src/pages/privacy.tsx:820-832", + "apps/web/src/pages/contacts/index.tsx:1102-1118|apps/web/src/pages/contacts/index.tsx:831-847", + "apps/web/src/pages/campaigns/create.tsx:192-207|apps/web/src/pages/templates/create.tsx:87-99", + "apps/web/src/pages/workflows/[id].tsx:1135-1143|apps/web/src/pages/workflows/[id].tsx:2010-2018", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:407-420|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:339-352", + "apps/web/src/components/DomainsSettings.tsx:516-530|apps/web/src/components/DomainsSettings.tsx:564-579", + "apps/landing/src/pages/terms.tsx:416-428|apps/landing/src/pages/terms.tsx:480-492", + "apps/api/src/services/WorkflowService.ts:502-510|apps/api/src/services/WorkflowService.ts:555-563", + "apps/web/src/pages/campaigns/[id].tsx:354-369|apps/web/src/pages/templates/[id].tsx:139-152", + "apps/web/src/pages/workflows/[id].tsx:1393-1411|apps/web/src/pages/workflows/[id].tsx:2232-2250", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:226-240|apps/web/src/components/EmailEditor/Toolbar.tsx:324-338", + "apps/web/src/components/CampaignSelectionDialog.tsx:256-275|apps/web/src/components/TemplateSelectionDialog.tsx:293-312", + "apps/landing/src/pages/privacy.tsx:1092-1110|apps/landing/src/pages/terms.tsx:640-656", + "apps/landing/src/pages/privacy.tsx:684-701|apps/landing/src/pages/terms.tsx:465-480", + "apps/api/src/controllers/Contacts.ts:40-54|apps/api/src/controllers/Workflows.ts:24-39", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:409-422|apps/landing/src/pages/guides/email-sender-reputation.tsx:321-334", + "apps/api/src/services/ContactService.ts:636-648|apps/api/src/services/EventService.ts:199-211", + "apps/api/src/services/EmailService.ts:144-160|apps/api/src/services/EmailService.ts:81-96", + "apps/web/src/pages/contacts/index.tsx:347-355|apps/web/src/pages/contacts/index.tsx:393-401", + "apps/api/src/services/EmailService.ts:589-611|apps/api/src/services/EventService.ts:100-122", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:284-299|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:487-504", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:179-191|apps/landing/src/pages/guides/email-click-through-rate.tsx:80-92", + "apps/web/src/components/BillingInvoices.tsx:71-82|apps/web/src/components/UnpaidInvoiceBanner.tsx:14-25", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:32-38|apps/web/src/components/EmailEditor/Toolbar.tsx:34-40", + "apps/api/src/services/WorkflowService.ts:468-490|apps/api/src/services/WorkflowService.ts:607-624", + "apps/api/src/services/NtfyService.ts:600-615|apps/api/src/services/NtfyService.ts:631-646", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:38-53|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:59-74", + "apps/landing/src/pages/privacy.tsx:267-282|apps/landing/src/pages/privacy.tsx:454-468", + "apps/api/src/services/AnalyticsService.ts:188-196|apps/api/src/services/AnalyticsService.ts:295-304", + "packages/shared/src/schemas/index.ts:139-143|packages/shared/src/schemas/index.ts:184-188", + "apps/web/src/components/CampaignSelectionDialog.tsx:305-322|apps/web/src/components/TemplateSelectionDialog.tsx:342-359", + "apps/web/src/components/CampaignSelectionDialog.tsx:324-341|apps/web/src/components/TemplateSelectionDialog.tsx:361-378", + "apps/landing/src/pages/privacy.tsx:1065-1076|apps/landing/src/pages/terms.tsx:140-153", + "apps/api/src/controllers/Campaigns.ts:18-23|apps/api/src/controllers/Templates.ts:54-59", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:130-144|apps/web/src/components/EmailEditor/Toolbar.tsx:239-253", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:311-325|apps/web/src/components/EmailEditor/Toolbar.tsx:409-423", + "apps/api/src/services/BillingLimitService.ts:594-602|apps/api/src/services/BillingLimitService.ts:646-654", + "apps/landing/src/pages/terms.tsx:185-205|apps/landing/src/pages/terms.tsx:562-583", + "apps/landing/src/pages/guides/what-is-dmarc.tsx:347-364|apps/landing/src/pages/guides/what-is-spf.tsx:330-347", + "apps/web/src/pages/auth/reset-password.tsx:138-148|apps/web/src/pages/auth/verify-email.tsx:220-237", + "apps/landing/src/pages/dpa.tsx:590-605|apps/landing/src/pages/terms.tsx:507-523", + "apps/landing/src/pages/privacy.tsx:466-477|apps/landing/src/pages/terms.tsx:206-217", + "apps/api/src/services/MembershipService.ts:233-248|apps/api/src/services/MembershipService.ts:277-292", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:261-274|apps/landing/src/pages/guides/email-marketing-best-practices.tsx:281-295", + "apps/web/src/pages/contacts/index.tsx:678-689|apps/web/src/pages/contacts/index.tsx:953-963", + "apps/api/src/jobs/domain-verification.ts:158-166|apps/api/src/services/DomainService.ts:180-189", + "apps/web/src/pages/onboarding/developer.tsx:88-227|apps/web/src/pages/onboarding/workflows.tsx:98-233", + "apps/web/src/components/WorkflowBuilder.tsx:587-612|apps/web/src/components/WorkflowVisualizer.tsx:337-362", + "apps/landing/src/pages/dpa.tsx:655-670|apps/landing/src/pages/terms.tsx:171-187", + "apps/landing/src/pages/privacy.tsx:423-439|apps/landing/src/pages/terms.tsx:173-188", + "apps/landing/src/pages/privacy.tsx:923-939|apps/landing/src/pages/terms.tsx:274-290", + "apps/web/src/pages/templates/[id].tsx:133-143|apps/web/src/pages/templates/create.tsx:73-87", + "apps/web/src/pages/templates/[id].tsx:205-214|apps/web/src/pages/templates/create.tsx:127-136", + "apps/api/src/services/EmailService.ts:502-511|apps/api/src/services/EmailService.ts:518-527", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:447-461|apps/landing/src/pages/guides/email-open-rate.tsx:488-502", + "apps/landing/src/pages/guides/email-click-through-rate.tsx:208-218|apps/landing/src/pages/guides/email-open-rate.tsx:250-264", + "apps/landing/src/pages/dpa.tsx:268-281|apps/landing/src/pages/privacy.tsx:400-412", + "apps/web/src/components/WorkflowBuilder.tsx:380-393|apps/web/src/components/WorkflowVisualizer.tsx:203-215", + "apps/landing/src/pages/guides/email-marketing-best-practices.tsx:409-421|apps/landing/src/pages/guides/email-open-rate.tsx:453-465", + "apps/landing/src/components/FAQSection.tsx:38-52|apps/landing/src/pages/features/smtp.tsx:227-241", + "apps/web/src/pages/workflows/[id].tsx:1031-1071|apps/web/src/pages/workflows/[id].tsx:1932-1967", + "apps/api/src/controllers/Webhooks.ts:602-614|apps/api/src/controllers/Webhooks.ts:631-643", + "apps/web/src/components/WorkflowBuilder.tsx:518-524|apps/web/src/components/WorkflowBuilder.tsx:612-619", + "apps/landing/src/pages/made-by-humans.tsx:23-46|apps/landing/src/pages/pricing.tsx:83-102", + "apps/web/src/components/WorkflowBuilder.tsx:44-58|apps/web/src/components/WorkflowVisualizer.tsx:23-37", + "apps/web/src/components/WorkflowBuilder.tsx:560-569|apps/web/src/components/WorkflowVisualizer.tsx:312-323", + "apps/api/src/jobs/email-processor.ts:88-293|apps/api/src/services/EmailService.ts:328-455", + "apps/web/src/pages/templates/index.tsx:130-147|apps/web/src/pages/workflows/index.tsx:124-142", + "apps/landing/src/pages/dpa.tsx:500-517|apps/landing/src/pages/terms.tsx:539-555", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:299-313|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:446-458", + "apps/web/src/pages/templates/index.tsx:71-83|apps/web/src/pages/workflows/index.tsx:83-95", + "apps/api/src/jobs/email-processor.ts:57-68|apps/api/src/services/EmailService.ts:291-302", + "apps/web/src/components/DomainsSettings.tsx:482-496|apps/web/src/components/DomainsSettings.tsx:608-623", + "apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:425-436|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:451-463", + "apps/web/src/lib/network.ts:106-117|apps/web/src/lib/network.ts:63-74", + "apps/landing/src/pages/guides/email-sender-reputation.tsx:294-303|apps/landing/src/pages/guides/email-sender-reputation.tsx:317-327", + "apps/web/src/components/CommandPalette.tsx:339-348|apps/web/src/components/CommandPalette.tsx:360-369", + "apps/api/src/controllers/Domains.ts:117-123|apps/api/src/controllers/Domains.ts:153-158", + "apps/api/src/controllers/Analytics.ts:46-50|apps/api/src/controllers/Analytics.ts:94-98", + "apps/landing/src/pages/guides/what-is-dmarc.tsx:116-137|apps/landing/src/pages/guides/what-is-spf.tsx:116-135", + "apps/api/src/controllers/Oauth/Github.ts:80-94|apps/api/src/controllers/Oauth/Google.ts:70-84", + "apps/web/src/pages/auth/login.tsx:60-67|apps/web/src/pages/auth/signup.tsx:45-52", + "apps/landing/src/pages/terms.tsx:185-202|apps/landing/src/pages/terms.tsx:556-576", + "apps/api/src/services/ActivityService.ts:294-304|apps/api/src/services/ActivityService.ts:589-599", + "apps/landing/src/pages/index.tsx:287-315|apps/landing/src/pages/tools/index.tsx:103-130", + "apps/api/src/services/EmailService.ts:125-136|apps/api/src/services/EmailService.ts:187-198", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:59-83|apps/landing/src/pages/guides/email-open-rate.tsx:59-85", + "apps/landing/src/pages/guides/email-open-rate.tsx:456-467|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:507-518", + "apps/api/src/services/SecurityService.ts:728-740|apps/api/src/services/SecurityService.ts:982-994", + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:207-214|apps/landing/src/components/tools/MarkdownEmailToolbar.tsx:218-225", + "apps/landing/src/pages/guides/email-bounce-rate.tsx:176-186|apps/landing/src/pages/guides/transactional-vs-marketing-email.tsx:27-37", + "apps/landing/src/pages/privacy.tsx:236-245|apps/landing/src/pages/terms.tsx:208-218", + "apps/web/src/components/WorkflowBuilder.tsx:396-405|apps/web/src/components/WorkflowVisualizer.tsx:210-219", + "apps/web/src/pages/segments/[id].tsx:136-142|apps/web/src/pages/segments/new.tsx:54-59", + "apps/web/src/pages/auth/login.tsx:164-186|apps/web/src/pages/auth/signup.tsx:122-144", + "apps/api/src/services/ContactService.ts:856-864|apps/api/src/services/EventService.ts:514-523", + "apps/landing/src/pages/vs/mailgun.tsx:13-20|apps/landing/src/pages/vs/resend.tsx:13-20", + "apps/landing/src/pages/dpa.tsx:185-203|apps/landing/src/pages/terms.tsx:558-577", + "packages/email/src/emails/DomainUnverified.tsx:22-37|packages/email/src/emails/DomainVerified.tsx:22-37", + "apps/landing/src/pages/guides/what-is-spf.tsx:300-314|apps/landing/src/pages/guides/what-is-spf.tsx:315-329", + "apps/api/src/controllers/Campaigns.ts:81-93|apps/api/src/controllers/Templates.ts:27-39", + "apps/api/src/jobs/domain-verification-processor.ts:50-57|apps/api/src/jobs/segment-count-processor.ts:137-145", + "apps/api/src/services/ContactService.ts:836-844|apps/api/src/services/EventService.ts:494-502" + ], + "clone_fingerprints": [ + "dup:4441c2af:5", + "dup:8da69b1f:14", + "dup:e4e381d4:5", + "dup:932b3140:4", + "dup:8634405c:14", + "dup:1e5dd27e:2", + "dup:2d69789e:15", + "dup:ab35ebdb:4", + "dup:629c4e32:26", + "dup:b225e3b9:10", + "dup:e59fa495:16", + "dup:be7f72a1:3", + "dup:f2334e2c:2", + "dup:8920044c:2", + "dup:fc08dc68:2", + "dup:80df05c7:9", + "dup:d2393bcb:5", + "dup:ed06bd1e:3", + "dup:fbf3b858:3", + "dup:afd4e45b:4", + "dup:f5db6f5c:5", + "dup:42372278:2", + "dup:34c8348d:2", + "dup:f60c7726:4", + "dup:043183e9:4", + "dup:6396475b:2", + "dup:bb156711:5", + "dup:fdc0e259:5", + "dup:ddcd4804:3", + "dup:908f2809:4", + "dup:9ed76f19:2", + "dup:7e218e02:6", + "dup:d67dd3ab:9", + "dup:b93a07a9:9", + "dup:ea8456d8:9", + "dup:757cdf2a:9", + "dup:f099f02b:4", + "dup:b3b74cd2:3", + "dup:cdcd0700:4", + "dup:1e63b18a:2", + "dup:dac74886:4", + "dup:9f6c734e:5", + "dup:f139e5cd:2", + "dup:1cc3b740:2", + "dup:5acf36d7:3", + "dup:0d25728d:10", + "dup:e5d023b7:2", + "dup:7efdddad:6", + "dup:593d3777:7", + "dup:84c19500:2", + "dup:fab12c40:2", + "dup:36cf4081:2", + "dup:9c62606e:4", + "dup:f459043e:2", + "dup:a45a675b:2", + "dup:613d4e90:6", + "dup:20834b74:2", + "dup:457aeb61:5", + "dup:2e656059:2", + "dup:446a9bb2:6", + "dup:a38dfcbb:3", + "dup:1af1367d:6", + "dup:c5d349da:2", + "dup:5db5f463:3", + "dup:ea764080:2", + "dup:75410fbe:3", + "dup:662217aa:2", + "dup:511c68d7:3", + "dup:ee1b9a27:5", + "dup:7af35ce0:7", + "dup:67a87173:3", + "dup:efdabf33:2", + "dup:446bd15e:3", + "dup:1dfd14cd:2", + "dup:4c14e4c8:4", + "dup:a8d394d8:2", + "dup:76e3ee31:5", + "dup:9de5e885:3", + "dup:b025de66:3", + "dup:985638d9:6", + "dup:fdfb6c4c:2", + "dup:47f3072e:2", + "dup:d17bc6cd:5", + "dup:d7deb4a6:3", + "dup:3bf277af:2", + "dup:86d1b99d:3", + "dup:762da06a:3", + "dup:8173afb5:4", + "dup:7eac7d23:6", + "dup:76900e2b:2", + "dup:599f1567:2", + "dup:3c63db2a:2", + "dup:20125db4:3", + "dup:29da9f15:3", + "dup:0476debf:6", + "dup:e590d430:2", + "dup:9888b4a9:4", + "dup:7cc83279:2", + "dup:64feaff9:2", + "dup:05b315ad:5", + "dup:a90d76cb:3", + "dup:ffc58111:3", + "dup:b2bb74bd:2", + "dup:05a63d49:2", + "dup:fb433653:2", + "dup:7b8811bf:4", + "dup:9ce5b78a:2", + "dup:d6a2dc2c:4", + "dup:867266b9:2", + "dup:34d5340c:3", + "dup:b8425faa:5", + "dup:1dc35c6b:3", + "dup:134097f3:5", + "dup:20b5cfa9:3", + "dup:c51aee9a:3", + "dup:ed26ffc6:2", + "dup:12ce7430:2", + "dup:3ff2e4ce:3", + "dup:41d3b5be:2", + "dup:a9c1c120:2", + "dup:f14335a0:3", + "dup:ed9f092c:2", + "dup:3c64b6d2:3", + "dup:676c3a1d:3", + "dup:9169fa22:5", + "dup:f54f6ecd:2", + "dup:380fed59:2", + "dup:b1e8288b:2", + "dup:32091d38:2", + "dup:2032af4b:2", + "dup:1c55812d:2", + "dup:d9511b40:2", + "dup:4ad57012:5", + "dup:66a4356c:2", + "dup:9b324dc8:3", + "dup:0a2fb0c8:4", + "dup:3e8a100e:3", + "dup:2bd0c90f:2", + "dup:340db069:2", + "dup:93115ec1:2", + "dup:5c449ee0:2", + "dup:dc468eea:2", + "dup:8f6bc1d7:3", + "dup:c454df54:3", + "dup:e9d24791:2", + "dup:ee9999eb:2", + "dup:caf9afc5:3", + "dup:5cddb8e3:3", + "dup:8b2c6dc1:2", + "dup:6260df58:2", + "dup:d6fae4dd:2", + "dup:352c593a:2", + "dup:912fecbd:5", + "dup:723b03e3:3", + "dup:6d09f96e:2", + "dup:2d0c4450:4", + "dup:8aeb2db6:4", + "dup:5488e21d:3", + "dup:ce72daaa:2", + "dup:96fe494c:2", + "dup:5dc7b502:4", + "dup:df249f31:4", + "dup:3aba9611:2", + "dup:c042fc81:2", + "dup:d99f7714:2", + "dup:fdb9ed41:2", + "dup:ef97c676:2", + "dup:c89944ca:2", + "dup:3acb3b55:2", + "dup:47782bab:2", + "dup:e75454d1:2", + "dup:ef151ff5:2", + "dup:8e69b82f:3", + "dup:7b6cf1bb:4", + "dup:405e2fb3:2", + "dup:cad821c2:2", + "dup:60a8dcba:2", + "dup:893f2f94:2", + "dup:5c3ccd2b:3", + "dup:9cc8f02b:2", + "dup:5df65124:4", + "dup:c3d69dec:2", + "dup:05dc390a:2", + "dup:77c79043:4", + "dup:ed04d729:3", + "dup:b450ce8b:2", + "dup:6388bf38:3", + "dup:abe3d360:3", + "dup:6fe3e09c:3", + "dup:230f2b2d:3", + "dup:d6dd43b6:2", + "dup:b7d8ce05:4", + "dup:43b33cd3:3", + "dup:ffe572eb:2", + "dup:6eb21e51:2", + "dup:5852eb9d:2", + "dup:ff60d16f:2", + "dup:38392526:3", + "dup:4c539205:3", + "dup:4a2c964c:3", + "dup:389d358d:2", + "dup:b99d6728:2", + "dup:e43fd094:2", + "dup:78e3deee:2", + "dup:c9b32f62:2", + "dup:5c07da35:4", + "dup:6903f7ae:4", + "dup:35d2e9e5:2", + "dup:3d0f5eb1:2", + "dup:4cff3c0e:3", + "dup:b1da34b3:2", + "dup:497fc0e0:3", + "dup:7810a8f0:2", + "dup:2dc9230d:2", + "dup:1bee4d66:2", + "dup:6a30f07c:3", + "dup:f7b6224f:2", + "dup:2c43b558:2", + "dup:290ae583:3", + "dup:f03be829:3", + "dup:c92f176f:2", + "dup:ff9331eb:2", + "dup:5881a256:3", + "dup:d0d43273:2", + "dup:c6d459e0:2", + "dup:22bf3d3c:3", + "dup:87740c9b:3", + "dup:f3d94b57:3", + "dup:c41fd37d:2", + "dup:76b85f62:2", + "dup:5d183a97:2", + "dup:c4453588:2", + "dup:81b59e3d:2", + "dup:df201591:2", + "dup:645d4947:2", + "dup:8bdd7d92:2", + "dup:cd3cda22:3", + "dup:2eb06315:2", + "dup:b0521957:2", + "dup:270ffc3f:2", + "dup:b4ada3b3:2", + "dup:06fcffa2:2", + "dup:e7a037ff:2", + "dup:b83c17ce:2", + "dup:4fc661fd:2", + "dup:adf85903:3", + "dup:2f84369b:3", + "dup:05252db6:2", + "dup:66a4327d:2", + "dup:c199df18:3", + "dup:4b048da0:3", + "dup:663467a8:3", + "dup:fc82298a:2", + "dup:7a1838c3:2", + "dup:a084511a:2", + "dup:cace1cea:2", + "dup:fdf2efe5:3", + "dup:9f4783a1:2", + "dup:71347736:2", + "dup:2bde35d1:2", + "dup:f3157476:2", + "dup:ae101d6e:2", + "dup:adaba38f:2", + "dup:e2d0306d:2", + "dup:4a60c8ca:2", + "dup:593541ab:3", + "dup:78000d4f:3", + "dup:69f58b15:3", + "dup:d857a4e1:2", + "dup:08645453:2", + "dup:0d934db2:2", + "dup:22b8d563:2", + "dup:cafcd5e3:2", + "dup:2da83813:2", + "dup:2e833f64:2", + "dup:1f9be659:2", + "dup:3eb9ac56:2", + "dup:1ead3002:2", + "dup:74fd6522:2", + "dup:691cd088:2", + "dup:cecb3460:2", + "dup:c8aaa75b:2", + "dup:526e2390:2", + "dup:c6014b5f:2", + "dup:89acdd9b:2", + "dup:f9e0d0ad:2", + "dup:ef66fbf9:3", + "dup:4df8cdb0:2", + "dup:7c7d827f:2", + "dup:ccf72a56:2", + "dup:88710ccf:2", + "dup:13cf9b3a:2", + "dup:28869b39:2", + "dup:5ce4e684:2", + "dup:b46dfc59:2", + "dup:dca3bd9a:2", + "dup:be7425bb:2", + "dup:511ce6cb:2", + "dup:38e9e3b0:3", + "dup:32676044:2", + "dup:dd2a773e:2", + "dup:087fca3f:2", + "dup:adf7f5da:2", + "dup:d9de775c:2", + "dup:1859287a:2", + "dup:57d13bd7:2", + "dup:c688bde4:2", + "dup:5b37ca23:2", + "dup:7fe1b443:2", + "dup:8b94c907:2", + "dup:1e4d70b2:2", + "dup:bd507bc5:2", + "dup:fce945a3:2", + "dup:a1b02d3f:2", + "dup:02b13162:2", + "dup:68d4623d:2", + "dup:b80950e6:3", + "dup:04514319:3", + "dup:c9d8b85c:2", + "dup:d2c1432a:2", + "dup:3b964922:3", + "dup:d9b34eeb:3", + "dup:43474b01:2", + "dup:16352a66:2", + "dup:49135769:2", + "dup:8184cacb:3", + "dup:23cd5158:3", + "dup:88cc70b8:3", + "dup:0a318d55:2", + "dup:11753dee:2", + "dup:cf936ccd:2", + "dup:10214590:2", + "dup:59985249:2", + "dup:53bb52cb:2", + "dup:625c1337:2", + "dup:ca6fbe03:2", + "dup:9436d0ac:2", + "dup:c16e88ca:2", + "dup:bd0e2135:3", + "dup:236f3262:2", + "dup:9e0bcc7a:2", + "dup:9bcba03f:2", + "dup:4dec9030:2", + "dup:0e1cd4ef:2", + "dup:0427450b:2", + "dup:eb05911e:2", + "dup:625c84f1:2", + "dup:d63bce90:2", + "dup:42dcbce3:2", + "dup:ff505f0a:2", + "dup:c32bfc9c:2", + "dup:7376481d:2", + "dup:7d728a37:2", + "dup:58e29a45:2", + "dup:e219b979:2", + "dup:2bf40b56:2", + "dup:6d03cdc2:2", + "dup:c2e1df5f:2", + "dup:2ac371ba:2", + "dup:e504f0dd:2", + "dup:b1077676:2", + "dup:253e6e8b:2", + "dup:665bf048:2", + "dup:1a15cffe:2", + "dup:da1d2421:2", + "dup:e02d4967:2", + "dup:25cd1e85:2", + "dup:8ba98a6d:2", + "dup:aa4f6b32:2", + "dup:c6e17639:2", + "dup:2e028469:2", + "dup:d456df96:2", + "dup:12dfa390:2", + "dup:9b3835c0:2", + "dup:63ab3b45:2", + "dup:30a3c090:2", + "dup:07e0a1ee:2", + "dup:0d78d2a0:2", + "dup:e0b390b7:2", + "dup:b6d0a56a:2", + "dup:72330e61:2", + "dup:c529f75c:2", + "dup:127d9600:2", + "dup:fdf64abe:2", + "dup:955b49af:2", + "dup:15a180e1:2", + "dup:084b6fed:2", + "dup:1725c174:2", + "dup:e7d01617:2", + "dup:0535f597:2", + "dup:25959b5b:2", + "dup:545da3b4:2", + "dup:ec359842:2", + "dup:76b04f9f:2", + "dup:b2defe6b:2", + "dup:4d79a3cf:2", + "dup:ae27e34c:2", + "dup:3d108e2d:2", + "dup:24601867:2", + "dup:e1a932c3:2", + "dup:f3e75683:2", + "dup:3a3733f2:2", + "dup:1bc7a707:2", + "dup:17827e6f:2", + "dup:c8b3242b:2", + "dup:32a15229:2", + "dup:f7788f4d:2", + "dup:61886426:2", + "dup:55ace202:2", + "dup:e383ae9a:2", + "dup:88fc2e10:2", + "dup:1a69a3eb:2", + "dup:f22e880f:2", + "dup:f2dab61a:2", + "dup:6307445e:2", + "dup:d4fe2462:2", + "dup:475c55ce:2", + "dup:186f3581:2", + "dup:670b1e00:2", + "dup:cb0a66df:2", + "dup:b0967d33:2", + "dup:92456350:2", + "dup:2137d190:2", + "dup:2741ca6e:2", + "dup:fd0a9f8b:2", + "dup:0b76976c:2", + "dup:8e0dd7fc:2", + "dup:0b7cb9cf:2", + "dup:5b078fdb:2", + "dup:34ddcbf4:2", + "dup:5c91c311:2", + "dup:89aa860a:2", + "dup:3ed6c24f:2", + "dup:158163be:2", + "dup:6aab572f:2", + "dup:5dbd847a:2", + "dup:c21bb92d:2", + "dup:25c554b7:2", + "dup:d66cc5ce:2", + "dup:0aa20934:2", + "dup:1230c867:2", + "dup:6ccd5efc:2", + "dup:8eacc9fd:2", + "dup:6cc6ec04:2", + "dup:b82df677:2", + "dup:62432a09:2", + "dup:4d5ccb1e:2", + "dup:a850a9cf:2", + "dup:83a8a549:2", + "dup:1afae639:2", + "dup:bf5cfd07:2", + "dup:236a8ac7:2", + "dup:f7ea6b46:2", + "dup:0896f99d:2", + "dup:21e7725b:2", + "dup:19bca59d:2", + "dup:2f3c8656:2", + "dup:f0abc993:2", + "dup:d6d6828b:2", + "dup:a885f2ba:2", + "dup:226702ba:2", + "dup:17b17c59:2", + "dup:a6e3a1cb:2", + "dup:bce76a55:2", + "dup:f9ffce7f:2", + "dup:149cc955:2", + "dup:a8d3abae:2", + "dup:083e4c83:2", + "dup:cdb88345:2", + "dup:2ddd3973:2", + "dup:da96ed01:2", + "dup:033f9ce2:2", + "dup:97428d2b:2", + "dup:63293195:2", + "dup:b6bd359f:2", + "dup:f78c5a03:2", + "dup:fe8926c2:2", + "dup:0e540b56:2", + "dup:4737cc18:2", + "dup:ba23516a:2", + "dup:7b0d6ddc:2", + "dup:545bfab9:2", + "dup:fd640fea:2", + "dup:089bfb75:2", + "dup:2eed5c7c:2", + "dup:285f81fb:2", + "dup:6788b3f5:2", + "dup:52ca724c:2", + "dup:19b4a73b:2", + "dup:65703ca1:2", + "dup:5b2efa12:2", + "dup:4557b981:2", + "dup:babcf79f:2", + "dup:4999c02b:2", + "dup:378ecfdd:2", + "dup:5a7c4527:2", + "dup:6fbafb08:2", + "dup:1bd772fa:2", + "dup:ca710788:2", + "dup:6d10b6bc:2", + "dup:252cf4b0:2" + ], + "normalized_clone_fingerprints": [ + "dup:c77b3abb6f87acd9-264:5", + "dup:c77b3abb6f87acd9-112:14", + "dup:c77b3abb6f87acd9-187:5", + "dup:c77b3abb6f87acd9-298:4", + "dup:c77b3abb6f87acd9-200:14", + "dup:c77b3abb6f87acd9-311:2", + "dup:c77b3abb6f87acd9-236:15", + "dup:c77b3abb6f87acd9-27:4", + "dup:c77b3abb6f87acd9-97:26", + "dup:c77b3abb6f87acd9-415:10", + "dup:c77b3abb6f87acd9-175:16", + "dup:c77b3abb6f87acd9-386:3", + "dup:c77b3abb6f87acd9-389:2", + "dup:c77b3abb6f87acd9-71:2", + "dup:c77b3abb6f87acd9-84:2", + "dup:c77b3abb6f87acd9-407:9", + "dup:c77b3abb6f87acd9-154:5", + "dup:c77b3abb6f87acd9-327:3", + "dup:c77b3abb6f87acd9-299:3", + "dup:c77b3abb6f87acd9-213:4", + "dup:c77b3abb6f87acd9-332:5", + "dup:c77b3abb6f87acd9-322:2", + "dup:1307d8ec:2", + "dup:c77b3abb6f87acd9-178:4", + "dup:c77b3abb6f87acd9-421:4", + "dup:b9cd28c1:2", + "dup:c77b3abb6f87acd9-475:5", + "dup:c77b3abb6f87acd9-238:5", + "dup:c77b3abb6f87acd9-424:3", + "dup:c77b3abb6f87acd9-342:4", + "dup:c77b3abb6f87acd9-294:2", + "dup:c77b3abb6f87acd9-195:6", + "dup:c77b3abb6f87acd9-11:9", + "dup:c77b3abb6f87acd9-60:9", + "dup:c77b3abb6f87acd9-359:9", + "dup:c77b3abb6f87acd9-96:9", + "dup:c77b3abb6f87acd9-310:4", + "dup:c77b3abb6f87acd9-316:3", + "dup:c77b3abb6f87acd9-171:4", + "dup:c77b3abb6f87acd9-436:2", + "dup:c77b3abb6f87acd9-456:4", + "dup:c77b3abb6f87acd9-432:5", + "dup:c77b3abb6f87acd9-345:2", + "dup:c77b3abb6f87acd9-209:2", + "dup:c77b3abb6f87acd9-353:3", + "dup:c77b3abb6f87acd9-120:10", + "dup:c77b3abb6f87acd9-34:2", + "dup:c77b3abb6f87acd9-90:6", + "dup:c77b3abb6f87acd9-303:7", + "dup:c77b3abb6f87acd9-183:2", + "dup:c77b3abb6f87acd9-182:2", + "dup:c77b3abb6f87acd9-158:2", + "dup:c77b3abb6f87acd9-206:4", + "dup:c77b3abb6f87acd9-228:2", + "dup:c77b3abb6f87acd9-113:2", + "dup:c77b3abb6f87acd9-286:6", + "dup:c77b3abb6f87acd9-403:2", + "dup:c77b3abb6f87acd9-210:5", + "dup:c77b3abb6f87acd9-86:2", + "dup:c77b3abb6f87acd9-14:6", + "dup:c77b3abb6f87acd9-93:3", + "dup:ce0c87ee:6", + "dup:c77b3abb6f87acd9-405:2", + "dup:c77b3abb6f87acd9-269:3", + "dup:c77b3abb6f87acd9-127:2", + "dup:c77b3abb6f87acd9-136:3", + "dup:c77b3abb6f87acd9-18:2", + "dup:c77b3abb6f87acd9-78:3", + "dup:c77b3abb6f87acd9-198:5", + "dup:c77b3abb6f87acd9-450:7", + "dup:c77b3abb6f87acd9-431:3", + "dup:c77b3abb6f87acd9-222:2", + "dup:c77b3abb6f87acd9-313:3", + "dup:c77b3abb6f87acd9-266:2", + "dup:c77b3abb6f87acd9-241:4", + "dup:c77b3abb6f87acd9-242:2", + "dup:c77b3abb6f87acd9-153:5", + "dup:c77b3abb6f87acd9-61:3", + "dup:c77b3abb6f87acd9-254:3", + "dup:c77b3abb6f87acd9-321:6", + "dup:c77b3abb6f87acd9-20:2", + "dup:c77b3abb6f87acd9-5:2", + "dup:c77b3abb6f87acd9-59:5", + "dup:c77b3abb6f87acd9-58:3", + "dup:c77b3abb6f87acd9-105:2", + "dup:c77b3abb6f87acd9-352:3", + "dup:c77b3abb6f87acd9-302:3", + "dup:c77b3abb6f87acd9-446:4", + "dup:c77b3abb6f87acd9-387:6", + "dup:c77b3abb6f87acd9-385:2", + "dup:c77b3abb6f87acd9-192:2", + "dup:c77b3abb6f87acd9-208:2", + "dup:c77b3abb6f87acd9-164:3", + "dup:c77b3abb6f87acd9-89:3", + "dup:c77b3abb6f87acd9-429:6", + "dup:c77b3abb6f87acd9-203:2", + "dup:c77b3abb6f87acd9-204:4", + "dup:c77b3abb6f87acd9-168:2", + "dup:c77b3abb6f87acd9-338:2", + "dup:c77b3abb6f87acd9-63:5", + "dup:c77b3abb6f87acd9-300:3", + "dup:c77b3abb6f87acd9-125:3", + "dup:c77b3abb6f87acd9-51:2", + "dup:c77b3abb6f87acd9-347:2", + "dup:c77b3abb6f87acd9-406:2", + "dup:d8e7ae19:4", + "dup:c77b3abb6f87acd9-229:2", + "dup:c77b3abb6f87acd9-464:4", + "dup:c77b3abb6f87acd9-67:2", + "dup:c77b3abb6f87acd9-9:3", + "dup:c77b3abb6f87acd9-368:5", + "dup:c77b3abb6f87acd9-401:3", + "dup:c77b3abb6f87acd9-216:5", + "dup:c77b3abb6f87acd9-477:3", + "dup:c77b3abb6f87acd9-53:3", + "dup:c77b3abb6f87acd9-307:2", + "dup:c77b3abb6f87acd9-218:2", + "dup:c77b3abb6f87acd9-430:3", + "dup:c77b3abb6f87acd9-8:2", + "dup:c77b3abb6f87acd9-444:2", + "dup:c77b3abb6f87acd9-234:3", + "dup:c77b3abb6f87acd9-217:2", + "dup:c77b3abb6f87acd9-185:3", + "dup:c77b3abb6f87acd9-370:3", + "dup:c77b3abb6f87acd9-104:5", + "dup:c77b3abb6f87acd9-233:2", + "dup:c77b3abb6f87acd9-423:2", + "dup:c77b3abb6f87acd9-388:2", + "dup:fec55847:2", + "dup:c77b3abb6f87acd9-131:2", + "dup:c77b3abb6f87acd9-55:2", + "dup:c77b3abb6f87acd9-44:2", + "dup:c77b3abb6f87acd9-470:5", + "dup:c77b3abb6f87acd9-270:2", + "dup:c77b3abb6f87acd9-278:3", + "dup:c77b3abb6f87acd9-452:4", + "dup:c77b3abb6f87acd9-445:3", + "dup:c77b3abb6f87acd9-109:2", + "dup:c77b3abb6f87acd9-221:2", + "dup:c77b3abb6f87acd9-181:2", + "dup:c77b3abb6f87acd9-77:2", + "dup:c77b3abb6f87acd9-225:2", + "dup:c77b3abb6f87acd9-152:3", + "dup:c77b3abb6f87acd9-329:3", + "dup:c77b3abb6f87acd9-99:2", + "dup:c77b3abb6f87acd9-367:2", + "dup:c77b3abb6f87acd9-455:3", + "dup:c77b3abb6f87acd9-374:3", + "dup:c77b3abb6f87acd9-334:2", + "dup:c77b3abb6f87acd9-79:2", + "dup:6f5baa56:2", + "dup:c77b3abb6f87acd9-290:2", + "dup:c77b3abb6f87acd9-212:5", + "dup:c77b3abb6f87acd9-341:3", + "dup:c77b3abb6f87acd9-373:2", + "dup:c77b3abb6f87acd9-348:4", + "dup:c77b3abb6f87acd9-244:4", + "dup:c77b3abb6f87acd9-151:3", + "dup:c77b3abb6f87acd9-258:2", + "dup:c77b3abb6f87acd9-147:2", + "dup:c77b3abb6f87acd9-188:4", + "dup:c77b3abb6f87acd9-121:4", + "dup:c77b3abb6f87acd9-174:2", + "dup:c77b3abb6f87acd9-49:2", + "dup:c77b3abb6f87acd9-281:2", + "dup:c77b3abb6f87acd9-139:2", + "dup:c77b3abb6f87acd9-419:2", + "dup:c77b3abb6f87acd9-180:2", + "dup:c77b3abb6f87acd9-235:2", + "dup:c77b3abb6f87acd9-246:2", + "dup:c77b3abb6f87acd9-31:2", + "dup:c77b3abb6f87acd9-35:2", + "dup:c77b3abb6f87acd9-288:3", + "dup:c77b3abb6f87acd9-145:4", + "dup:3acef346:2", + "dup:c77b3abb6f87acd9-272:2", + "dup:c77b3abb6f87acd9-101:2", + "dup:10ba91fa:2", + "dup:5cce71cc:3", + "dup:c77b3abb6f87acd9-404:2", + "dup:00a716cb:4", + "dup:c77b3abb6f87acd9-165:2", + "dup:bcaf9e67:2", + "dup:c77b3abb6f87acd9-438:4", + "dup:c77b3abb6f87acd9-468:3", + "dup:c77b3abb6f87acd9-176:2", + "dup:c77b3abb6f87acd9-417:3", + "dup:c77b3abb6f87acd9-243:3", + "dup:c77b3abb6f87acd9-331:3", + "dup:c77b3abb6f87acd9-223:3", + "dup:c77b3abb6f87acd9-54:2", + "dup:c77b3abb6f87acd9-380:4", + "dup:c77b3abb6f87acd9-4:3", + "dup:c77b3abb6f87acd9-144:2", + "dup:c77b3abb6f87acd9-28:2", + "dup:c77b3abb6f87acd9-194:2", + "dup:c77b3abb6f87acd9-451:2", + "dup:c77b3abb6f87acd9-102:3", + "dup:c77b3abb6f87acd9-306:3", + "dup:c77b3abb6f87acd9-344:3", + "dup:c77b3abb6f87acd9-26:2", + "dup:c77b3abb6f87acd9-29:2", + "dup:c77b3abb6f87acd9-443:2", + "dup:c77b3abb6f87acd9-364:2", + "dup:c77b3abb6f87acd9-124:2", + "dup:c77b3abb6f87acd9-335:4", + "dup:c77b3abb6f87acd9-257:4", + "dup:c77b3abb6f87acd9-337:2", + "dup:c77b3abb6f87acd9-231:2", + "dup:c77b3abb6f87acd9-449:3", + "dup:c77b3abb6f87acd9-220:2", + "dup:c77b3abb6f87acd9-391:3", + "dup:c77b3abb6f87acd9-199:2", + "dup:c77b3abb6f87acd9-214:2", + "dup:c77b3abb6f87acd9-211:2", + "dup:c77b3abb6f87acd9-66:3", + "dup:c77b3abb6f87acd9-107:2", + "dup:c77b3abb6f87acd9-355:2", + "dup:c77b3abb6f87acd9-384:3", + "dup:c77b3abb6f87acd9-414:3", + "dup:c77b3abb6f87acd9-461:2", + "dup:c77b3abb6f87acd9-248:2", + "dup:c77b3abb6f87acd9-256:3", + "dup:c77b3abb6f87acd9-275:2", + "dup:c77b3abb6f87acd9-19:2", + "dup:c77b3abb6f87acd9-377:3", + "dup:c77b3abb6f87acd9-312:3", + "dup:c77b3abb6f87acd9-465:3", + "dup:c77b3abb6f87acd9-118:2", + "dup:c77b3abb6f87acd9-354:2", + "dup:c77b3abb6f87acd9-1:2", + "dup:c77b3abb6f87acd9-349:2", + "dup:c77b3abb6f87acd9-190:2", + "dup:c77b3abb6f87acd9-320:2", + "dup:c77b3abb6f87acd9-295:2", + "dup:c77b3abb6f87acd9-396:2", + "dup:c77b3abb6f87acd9-100:3", + "dup:c77b3abb6f87acd9-319:2", + "dup:c77b3abb6f87acd9-142:2", + "dup:c77b3abb6f87acd9-98:2", + "dup:c77b3abb6f87acd9-252:2", + "dup:c77b3abb6f87acd9-17:2", + "dup:c77b3abb6f87acd9-80:2", + "dup:6a0ccc8b:2", + "dup:c77b3abb6f87acd9-340:2", + "dup:c77b3abb6f87acd9-91:3", + "dup:c77b3abb6f87acd9-45:3", + "dup:c77b3abb6f87acd9-472:2", + "dup:c77b3abb6f87acd9-161:2", + "dup:c77b3abb6f87acd9-440:3", + "dup:c77b3abb6f87acd9-163:3", + "dup:c77b3abb6f87acd9-110:3", + "dup:c77b3abb6f87acd9-170:2", + "dup:c77b3abb6f87acd9-362:2", + "dup:c77b3abb6f87acd9-447:2", + "dup:bbb1f322:2", + "dup:94e052a3:3", + "dup:c77b3abb6f87acd9-39:2", + "dup:c77b3abb6f87acd9-280:2", + "dup:c77b3abb6f87acd9-479:2", + "dup:c77b3abb6f87acd9-309:2", + "dup:c77b3abb6f87acd9-260:2", + "dup:c77b3abb6f87acd9-172:2", + "dup:c77b3abb6f87acd9-21:2", + "dup:c77b3abb6f87acd9-130:2", + "dup:c77b3abb6f87acd9-123:3", + "dup:c77b3abb6f87acd9-32:3", + "dup:c77b3abb6f87acd9-56:3", + "dup:e401c880:2", + "dup:c77b3abb6f87acd9-94:2", + "dup:c77b3abb6f87acd9-268:2", + "dup:c77b3abb6f87acd9-285:2", + "dup:c77b3abb6f87acd9-149:2", + "dup:c77b3abb6f87acd9-108:2", + "dup:c77b3abb6f87acd9-132:2", + "dup:c77b3abb6f87acd9-115:2", + "dup:c77b3abb6f87acd9-262:2", + "dup:c77b3abb6f87acd9-274:2", + "dup:c77b3abb6f87acd9-261:2", + "dup:c77b3abb6f87acd9-469:2", + "dup:c77b3abb6f87acd9-304:2", + "dup:c77b3abb6f87acd9-219:2", + "dup:c77b3abb6f87acd9-74:2", + "dup:c77b3abb6f87acd9-409:2", + "dup:c77b3abb6f87acd9-378:2", + "dup:c77b3abb6f87acd9-460:2", + "dup:c77b3abb6f87acd9-184:3", + "dup:c77b3abb6f87acd9-69:2", + "dup:c77b3abb6f87acd9-88:2", + "dup:c77b3abb6f87acd9-240:2", + "dup:c77b3abb6f87acd9-10:2", + "dup:c77b3abb6f87acd9-428:2", + "dup:c77b3abb6f87acd9-133:2", + "dup:c77b3abb6f87acd9-315:2", + "dup:c77b3abb6f87acd9-402:2", + "dup:c77b3abb6f87acd9-167:2", + "dup:c77b3abb6f87acd9-318:2", + "dup:c77b3abb6f87acd9-292:2", + "dup:c77b3abb6f87acd9-439:3", + "dup:c77b3abb6f87acd9-95:2", + "dup:c77b3abb6f87acd9-92:2", + "dup:c77b3abb6f87acd9-191:2", + "dup:c77b3abb6f87acd9-282:2", + "dup:c77b3abb6f87acd9-205:2", + "dup:c77b3abb6f87acd9-413:2", + "dup:c77b3abb6f87acd9-425:2", + "dup:c77b3abb6f87acd9-83:2", + "dup:c77b3abb6f87acd9-365:2", + "dup:c77b3abb6f87acd9-82:2", + "dup:c77b3abb6f87acd9-308:2", + "dup:c77b3abb6f87acd9-324:2", + "dup:c77b3abb6f87acd9-146:2", + "dup:1d1f9421:2", + "dup:c77b3abb6f87acd9-251:2", + "dup:c77b3abb6f87acd9-328:2", + "dup:c77b3abb6f87acd9-87:2", + "dup:c77b3abb6f87acd9-250:3", + "dup:c77b3abb6f87acd9-394:3", + "dup:c77b3abb6f87acd9-36:2", + "dup:c77b3abb6f87acd9-245:2", + "dup:c77b3abb6f87acd9-85:3", + "dup:c77b3abb6f87acd9-271:3", + "dup:d2166dab:2", + "dup:c77b3abb6f87acd9-397:2", + "dup:c77b3abb6f87acd9-3:2", + "dup:79b13486:3", + "dup:c77b3abb6f87acd9-75:3", + "dup:c77b3abb6f87acd9-379:3", + "dup:c77b3abb6f87acd9-135:2", + "dup:c77b3abb6f87acd9-81:2", + "dup:c77b3abb6f87acd9-37:2", + "dup:c77b3abb6f87acd9-76:2", + "dup:c77b3abb6f87acd9-116:2", + "dup:c77b3abb6f87acd9-314:2", + "dup:c77b3abb6f87acd9-411:2", + "dup:c77b3abb6f87acd9-249:2", + "dup:c77b3abb6f87acd9-65:2", + "dup:c77b3abb6f87acd9-57:2", + "dup:c77b3abb6f87acd9-291:3", + "dup:c77b3abb6f87acd9-422:2", + "dup:c77b3abb6f87acd9-41:2", + "dup:c77b3abb6f87acd9-284:2", + "dup:c77b3abb6f87acd9-279:2", + "dup:c77b3abb6f87acd9-157:2", + "dup:c77b3abb6f87acd9-207:2", + "dup:c77b3abb6f87acd9-463:2", + "dup:c77b3abb6f87acd9-442:2", + "dup:c77b3abb6f87acd9-276:2", + "dup:c77b3abb6f87acd9-462:2", + "dup:c77b3abb6f87acd9-179:2", + "dup:c77b3abb6f87acd9-382:2", + "dup:c77b3abb6f87acd9-140:2", + "dup:c77b3abb6f87acd9-202:2", + "dup:c77b3abb6f87acd9-474:2", + "dup:c77b3abb6f87acd9-247:2", + "dup:c77b3abb6f87acd9-22:2", + "dup:c77b3abb6f87acd9-441:2", + "dup:c77b3abb6f87acd9-23:2", + "dup:c77b3abb6f87acd9-351:2", + "dup:c77b3abb6f87acd9-160:2", + "dup:c77b3abb6f87acd9-2:2", + "dup:c77b3abb6f87acd9-458:2", + "dup:c77b3abb6f87acd9-128:2", + "dup:c77b3abb6f87acd9-43:2", + "dup:c77b3abb6f87acd9-111:2", + "dup:c77b3abb6f87acd9-122:2", + "dup:c77b3abb6f87acd9-400:2", + "dup:c77b3abb6f87acd9-435:2", + "dup:c77b3abb6f87acd9-177:2", + "dup:c77b3abb6f87acd9-433:2", + "dup:c77b3abb6f87acd9-226:2", + "dup:c77b3abb6f87acd9-358:2", + "dup:c77b3abb6f87acd9-42:2", + "dup:c77b3abb6f87acd9-52:2", + "dup:c77b3abb6f87acd9-141:2", + "dup:c77b3abb6f87acd9-375:2", + "dup:c77b3abb6f87acd9-466:2", + "dup:c77b3abb6f87acd9-255:2", + "dup:c77b3abb6f87acd9-72:2", + "dup:c77b3abb6f87acd9-457:2", + "dup:c77b3abb6f87acd9-159:2", + "dup:c77b3abb6f87acd9-129:2", + "dup:c77b3abb6f87acd9-346:2", + "dup:c77b3abb6f87acd9-148:2", + "dup:c77b3abb6f87acd9-33:2", + "dup:c77b3abb6f87acd9-317:2", + "dup:c77b3abb6f87acd9-265:2", + "dup:c77b3abb6f87acd9-259:2", + "dup:c77b3abb6f87acd9-239:2", + "dup:c77b3abb6f87acd9-363:2", + "dup:c77b3abb6f87acd9-143:2", + "dup:c77b3abb6f87acd9-289:2", + "dup:c77b3abb6f87acd9-301:2", + "dup:555a759d:2", + "dup:c77b3abb6f87acd9-410:2", + "dup:c77b3abb6f87acd9-336:2", + "dup:c77b3abb6f87acd9-263:2", + "dup:c77b3abb6f87acd9-305:2", + "dup:c77b3abb6f87acd9-64:2", + "dup:c77b3abb6f87acd9-24:2", + "dup:c77b3abb6f87acd9-453:2", + "dup:c77b3abb6f87acd9-137:2", + "dup:c77b3abb6f87acd9-412:2", + "dup:c77b3abb6f87acd9-478:2", + "dup:c77b3abb6f87acd9-173:2", + "dup:c77b3abb6f87acd9-287:2", + "dup:c77b3abb6f87acd9-350:2", + "dup:c77b3abb6f87acd9-293:2", + "dup:c77b3abb6f87acd9-393:2", + "dup:c77b3abb6f87acd9-13:2", + "dup:c77b3abb6f87acd9-215:2", + "dup:c77b3abb6f87acd9-201:2", + "dup:c77b3abb6f87acd9-30:2", + "dup:c77b3abb6f87acd9-106:2", + "dup:c77b3abb6f87acd9-434:2", + "dup:c77b3abb6f87acd9-273:2", + "dup:c77b3abb6f87acd9-426:2", + "dup:c77b3abb6f87acd9-70:2", + "dup:c77b3abb6f87acd9-197:2", + "dup:c77b3abb6f87acd9-119:2", + "dup:c77b3abb6f87acd9-162:2", + "dup:c77b3abb6f87acd9-420:2", + "dup:967581fd:2", + "dup:c77b3abb6f87acd9-38:2", + "dup:c77b3abb6f87acd9-12:2", + "dup:c77b3abb6f87acd9-476:2", + "dup:c77b3abb6f87acd9-16:2", + "dup:c77b3abb6f87acd9-237:2", + "dup:c77b3abb6f87acd9-471:2", + "dup:c77b3abb6f87acd9-392:2", + "dup:c77b3abb6f87acd9-227:2", + "dup:c77b3abb6f87acd9-333:2", + "dup:c77b3abb6f87acd9-224:2", + "dup:c77b3abb6f87acd9-408:2", + "dup:c77b3abb6f87acd9-189:2", + "dup:c77b3abb6f87acd9-277:2", + "dup:c77b3abb6f87acd9-325:2", + "dup:11171ac6:2", + "dup:c77b3abb6f87acd9-339:2", + "dup:c77b3abb6f87acd9-6:2", + "dup:c77b3abb6f87acd9-46:2", + "dup:c77b3abb6f87acd9-138:2", + "dup:c77b3abb6f87acd9-448:2", + "dup:c77b3abb6f87acd9-467:2", + "dup:c77b3abb6f87acd9-330:2", + "dup:c77b3abb6f87acd9-369:2", + "dup:c77b3abb6f87acd9-134:2", + "dup:c77b3abb6f87acd9-297:2", + "dup:c77b3abb6f87acd9-68:2", + "dup:c77b3abb6f87acd9-7:2", + "dup:c77b3abb6f87acd9-437:2", + "dup:c77b3abb6f87acd9-326:2", + "dup:c77b3abb6f87acd9-253:2", + "dup:c77b3abb6f87acd9-150:2", + "dup:c77b3abb6f87acd9-343:2", + "dup:c77b3abb6f87acd9-155:2", + "dup:c77b3abb6f87acd9-361:2", + "dup:c77b3abb6f87acd9-50:2", + "dup:c77b3abb6f87acd9-230:2", + "dup:c77b3abb6f87acd9-62:2", + "dup:c77b3abb6f87acd9-399:2", + "dup:c77b3abb6f87acd9-73:2", + "dup:c77b3abb6f87acd9-473:2", + "dup:c77b3abb6f87acd9-114:2", + "dup:c77b3abb6f87acd9-47:2", + "dup:c77b3abb6f87acd9-156:2", + "dup:c77b3abb6f87acd9-169:2", + "dup:c77b3abb6f87acd9-416:2", + "dup:c77b3abb6f87acd9-427:2", + "dup:c77b3abb6f87acd9-25:2", + "dup:c77b3abb6f87acd9-48:2", + "dup:c77b3abb6f87acd9-166:2", + "dup:c77b3abb6f87acd9-296:2", + "dup:c77b3abb6f87acd9-356:2", + "dup:c77b3abb6f87acd9-323:2", + "dup:c77b3abb6f87acd9-267:2", + "dup:c77b3abb6f87acd9-103:2", + "dup:c77b3abb6f87acd9-395:2", + "dup:c77b3abb6f87acd9-186:2", + "dup:c77b3abb6f87acd9-193:2", + "dup:c77b3abb6f87acd9-418:2", + "dup:c77b3abb6f87acd9-454:2", + "dup:c77b3abb6f87acd9-383:2", + "dup:ac3904da:2", + "dup:c77b3abb6f87acd9-390:2", + "dup:c77b3abb6f87acd9-15:2", + "dup:c77b3abb6f87acd9-459:2", + "dup:c77b3abb6f87acd9-366:2", + "dup:c77b3abb6f87acd9-360:2", + "dup:c77b3abb6f87acd9-283:2", + "dup:c77b3abb6f87acd9-376:2", + "dup:c77b3abb6f87acd9-372:2", + "dup:c77b3abb6f87acd9-357:2", + "dup:c77b3abb6f87acd9-381:2", + "dup:c77b3abb6f87acd9-40:2", + "dup:c77b3abb6f87acd9-126:2", + "dup:c77b3abb6f87acd9-398:2", + "dup:c77b3abb6f87acd9-232:2", + "dup:c77b3abb6f87acd9-371:2", + "dup:c77b3abb6f87acd9-117:2", + "dup:c77b3abb6f87acd9-196:2" + ] +} \ No newline at end of file diff --git a/.fallow/baselines/health.json b/.fallow/baselines/health.json new file mode 100644 index 000000000..73d2d1a20 --- /dev/null +++ b/.fallow/baselines/health.json @@ -0,0 +1,1125 @@ +{ + "finding_counts": { + "apps/api/src/app.ts": { + "crap_critical": { + "count": 2 + } + }, + "apps/api/src/controllers/Actions.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/controllers/Activity.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/controllers/Auth.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "apps/api/src/controllers/Campaigns.ts": { + "crap_moderate": { + "count": 4 + } + }, + "apps/api/src/controllers/Contacts.ts": { + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 7 + } + }, + "apps/api/src/controllers/Domains.ts": { + "crap_high": { + "count": 1 + } + }, + "apps/api/src/controllers/Events.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/controllers/Oauth/Github.ts": { + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/controllers/Oauth/Google.ts": { + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/controllers/Projects.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/controllers/Segments.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/controllers/Templates.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/controllers/Uploads.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/controllers/Users.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/api/src/controllers/Webhooks.ts": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 2 + } + }, + "apps/api/src/controllers/Workflows.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/jobs/bulk-contact-processor.ts": { + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/jobs/domain-verification.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/jobs/email-processor.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/jobs/import-processor.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/jobs/segment-count-processor.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/middleware/__tests__/requestLogger.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/middleware/auth.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 3 + } + }, + "apps/api/src/middleware/requestLogger.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/services/ActivityService.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 4 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/AnalyticsService.ts": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/api/src/services/BillingLimitService.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/api/src/services/CampaignService.ts": { + "complexity_high": { + "count": 2 + }, + "complexity_moderate": { + "count": 1 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/ContactService.ts": { + "complexity_critical": { + "count": 1 + }, + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/DomainService.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/services/EmailService.ts": { + "complexity_critical": { + "count": 2 + }, + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "apps/api/src/services/EmailVerificationService.ts": { + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/api/src/services/EventService.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/QueueService.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/S3Service.ts": { + "crap_critical": { + "count": 1 + } + }, + "apps/api/src/services/SESService.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 1 + } + }, + "apps/api/src/services/SecurityService.ts": { + "complexity_critical": { + "count": 1 + }, + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/SegmentService.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/api/src/services/UserService.ts": { + "crap_high": { + "count": 1 + } + }, + "apps/api/src/services/WorkflowExecutionService.ts": { + "complexity_critical": { + "count": 3 + }, + "crap_critical": { + "count": 3 + }, + "crap_moderate": { + "count": 4 + } + }, + "apps/api/src/services/WorkflowService.ts": { + "complexity_high": { + "count": 1 + }, + "complexity_moderate": { + "count": 2 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 4 + } + }, + "apps/api/src/services/__tests__/SecurityService.test.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/components/CodeBlock.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/landing/src/components/ComparisonTable.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/components/Navbar/Navbar.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/components/guides/GuideLayout.tsx": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/components/guides/InfoBox.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/components/tools/EmailVerificationResult.tsx": { + "crap_critical": { + "count": 1 + } + }, + "apps/landing/src/components/tools/MarkdownEmailToolbar.tsx": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/landing/src/lib/network.ts": { + "crap_high": { + "count": 1 + } + }, + "apps/landing/src/middleware.ts": { + "crap_moderate": { + "count": 3 + } + }, + "apps/landing/src/pages/api/verify-email.ts": { + "crap_high": { + "count": 1 + } + }, + "apps/landing/src/pages/features/email-editor.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/pages/features/inbound-email.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/pages/features/segments.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/pages/features/smtp.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/pages/features/workflows.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/pages/index.tsx": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/landing/src/pages/tools/spam-checker.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/landing/src/pages/tools/verify-email.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/smtp/src/server.ts": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/ActivityFeed.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/ActivityItem.tsx": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 4 + } + }, + "apps/web/src/components/ApiKeyDisplay.tsx": { + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/BillingConsumption.tsx": { + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/BillingInvoices.tsx": { + "crap_high": { + "count": 3 + } + }, + "apps/web/src/components/BillingLimits.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 2 + }, + "crap_moderate": { + "count": 4 + } + }, + "apps/web/src/components/CampaignSelectionDialog.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/CommandPalette.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 2 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/ContactPicker.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/DashboardLayout.tsx": { + "complexity_moderate": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/DataManagementSettings.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/components/DomainsSettings.tsx": { + "complexity_high": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "apps/web/src/components/EmailDomainInput.tsx": { + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/EmailEditor/EmailEditor.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 4 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/components/EmailEditor/ResizableImage.tsx": { + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/components/EmailEditor/Toolbar.tsx": { + "complexity_high": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/EmailPreviewModal.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/EmailSettings.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/KeyValueEditor.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/QuickStart.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/SecuritySettings.tsx": { + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/SecurityWarningBanner.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/SegmentFilterBuilder.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 3 + }, + "crap_moderate": { + "count": 3 + } + }, + "apps/web/src/components/SmtpSettings.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/TeamSettings.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/TemplateSearchPicker.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/TemplateSelectionDialog.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/components/UnpaidInvoiceBanner.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/WorkflowBuilder.tsx": { + "complexity_critical": { + "count": 3 + }, + "crap_critical": { + "count": 5 + }, + "crap_high": { + "count": 4 + }, + "crap_moderate": { + "count": 5 + } + }, + "apps/web/src/components/WorkflowVisualizer.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 3 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/components/onboarding/CodeTabs.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/components/onboarding/OnboardingBanner.tsx": { + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/web/src/lib/contexts/ActiveProjectProvider.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/lib/hooks/useAnalytics.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/lib/hooks/useContacts.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/lib/hooks/useDashboardStats.ts": { + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/lib/hooks/useOnboardingStatus.ts": { + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/lib/network.ts": { + "crap_critical": { + "count": 2 + } + }, + "apps/web/src/lib/validation.ts": { + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/pages/_app.tsx": { + "crap_high": { + "count": 2 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/pages/activity/index.tsx": { + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/pages/analytics/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/pages/auth/login.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/auth/reset-password.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/auth/signup.tsx": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/auth/verify-email.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/pages/campaigns/[id].tsx": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 3 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/campaigns/create.tsx": { + "complexity_critical": { + "count": 2 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/campaigns/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 3 + }, + "crap_high": { + "count": 1 + } + }, + "apps/web/src/pages/contacts/[id].tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/pages/contacts/index.tsx": { + "complexity_critical": { + "count": 5 + }, + "crap_critical": { + "count": 5 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/pages/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/pages/manage/[id].tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + } + }, + "apps/web/src/pages/onboarding/developer.tsx": { + "crap_high": { + "count": 1 + } + }, + "apps/web/src/pages/onboarding/workflows.tsx": { + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/segments/[id].tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/pages/segments/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 2 + } + }, + "apps/web/src/pages/segments/new.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/settings/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 3 + } + }, + "apps/web/src/pages/subscribe/[id].tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/templates/[id].tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/templates/create.tsx": { + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/templates/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + } + }, + "apps/web/src/pages/unsubscribe/[id].tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "apps/web/src/pages/workflows/[id].tsx": { + "complexity_critical": { + "count": 7 + }, + "crap_critical": { + "count": 9 + }, + "crap_high": { + "count": 9 + }, + "crap_moderate": { + "count": 9 + } + }, + "apps/web/src/pages/workflows/index.tsx": { + "complexity_critical": { + "count": 1 + }, + "crap_critical": { + "count": 3 + } + }, + "apps/wiki/lib/remark-replace-env.mjs": { + "crap_moderate": { + "count": 1 + } + }, + "apps/wiki/middleware.ts": { + "crap_moderate": { + "count": 3 + } + }, + "packages/ui/src/components/atoms/Chart.tsx": { + "crap_critical": { + "count": 2 + }, + "crap_high": { + "count": 1 + }, + "crap_moderate": { + "count": 1 + } + }, + "test/helpers/factories.ts": { + "crap_moderate": { + "count": 1 + } + }, + "test/mocks/queue.mock.ts": { + "crap_moderate": { + "count": 2 + } + } + }, + "runtime_coverage_findings": [], + "target_keys": [ + "apps/api/src/services/DomainService.ts:complexity", + "apps/web/src/lib/hooks/useOnboardingPath.ts:high impact", + "apps/web/src/pages/campaigns/create.tsx:complexity", + "apps/api/src/services/ContactService.ts:complexity", + "apps/web/src/pages/workflows/[id].tsx:complexity", + "apps/api/src/jobs/email-processor.ts:complexity", + "apps/api/src/services/SecurityService.ts:complexity", + "apps/web/src/components/ContactPicker.tsx:complexity", + "apps/landing/src/middleware.ts:untested risk", + "apps/api/src/services/EmailService.ts:circular dependency", + "apps/api/src/services/WorkflowExecutionService.ts:circular dependency", + "apps/wiki/middleware.ts:untested risk", + "apps/web/src/lib/hooks/useOnboardingComplete.ts:high impact", + "apps/api/src/services/EventService.ts:circular dependency", + "apps/web/src/components/CommandPalette.tsx:complexity", + "apps/api/src/jobs/domain-verification.ts:complexity", + "apps/api/src/controllers/Actions.ts:complexity", + "apps/api/src/controllers/Webhooks.ts:complexity", + "apps/web/src/pages/campaigns/[id].tsx:complexity", + "apps/web/src/components/TemplateSelectionDialog.tsx:complexity", + "apps/web/src/components/EmailEditor/EmailEditor.tsx:complexity", + "apps/web/src/components/DataManagementSettings.tsx:complexity", + "apps/api/src/services/SegmentService.ts:complexity", + "apps/web/src/components/ActivityItem.tsx:complexity", + "apps/web/src/pages/contacts/index.tsx:complexity", + "apps/web/src/pages/segments/[id].tsx:complexity", + "apps/api/src/jobs/import-processor.ts:complexity", + "apps/web/src/pages/settings/index.tsx:complexity", + "apps/api/src/services/ActivityService.ts:complexity", + "apps/web/src/components/SegmentFilterBuilder.tsx:complexity", + "apps/web/src/pages/analytics/index.tsx:complexity", + "apps/web/src/components/EmailEditor/Toolbar.tsx:complexity", + "apps/smtp/src/server.ts:complexity" + ] +} \ No newline at end of file diff --git a/.fallowrc.json b/.fallowrc.json new file mode 100644 index 000000000..25425ef1b --- /dev/null +++ b/.fallowrc.json @@ -0,0 +1,77 @@ +{ + "$schema": "./node_modules/fallow/schema.json", + "entry": [ + "apps/api/src/app.ts", + "apps/api/src/jobs/worker.ts", + "apps/smtp/src/server.ts", + "apps/wiki/scripts/*.{js,mts}", + "apps/wiki/middleware.ts", + "apps/wiki/source.config.ts", + "test/setup.ts" + ], + "ignorePatterns": [ + ".claude/**", + ".turbo/**", + "**/.turbo/**", + "**/.next/**", + "**/dist/**", + "docker/**", + "packages/db/prisma/migrations/**", + "apps/wiki/.source/**", + "apps/wiki/content/**", + // Static assets served by URL convention (a