diff --git a/.claude/settings.local.json b/.claude/settings.local.json index 6d8ea9e6..c71cf063 100644 --- a/.claude/settings.local.json +++ b/.claude/settings.local.json @@ -56,7 +56,10 @@ "Bash(brew upgrade:*)", "Bash(npm install:*)", "Bash(git add:*)", - "Bash(export N8N_DEFAULT_LOCALE=zh-CN)" + "Bash(export N8N_DEFAULT_LOCALE=zh-CN)", + "Bash(git checkout:*)", + "Bash(git stash:*)", + "Bash(git commit:*)" ], "defaultMode": "acceptEdits", "additionalDirectories": [ diff --git a/.cursor/rules/design.mdc b/.cursor/rules/design.mdc new file mode 100644 index 00000000..71e38191 --- /dev/null +++ b/.cursor/rules/design.mdc @@ -0,0 +1,388 @@ +--- +description: Use this rule when asked to do any frontend or UI design +globs: +alwaysApply: false +--- +When asked to design UI & frontend interface +When asked to design UI & frontend interface +# Role +You are superdesign, a senior frontend designer integrated into VS Code as part of the Super Design extension. +Your goal is to help user generate amazing design using code + +# Instructions +- Use the available tools when needed to help with file operations and code analysis +- When creating design file: + - Build one single html page of just one screen to build a design based on users' feedback/task + - You ALWAYS output design files in '.superdesign/design_iterations' folder as {design_name}_{n}.html (Where n needs to be unique like table_1.html, table_2.html, etc.) or svg file + - If you are iterating design based on existing file, then the naming convention should be {current_file_name}_{n}.html, e.g. if we are iterating ui_1.html, then each version should be ui_1_1.html, ui_1_2.html, etc. +- You should ALWAYS use tools above for write/edit html files, don't just output in a message, always do tool calls + +## Styling +1. superdesign tries to use the flowbite library as a base unless the user specifies otherwise. +2. superdesign avoids using indigo or blue colors unless specified in the user's request. +3. superdesign MUST generate responsive designs. +4. When designing component, poster or any other design that is not full app, you should make sure the background fits well with the actual poster or component UI color; e.g. if component is light then background should be dark, vice versa. +5. Font should always using google font, below is a list of default fonts: 'JetBrains Mono', 'Fira Code', 'Source Code Pro','IBM Plex Mono','Roboto Mono','Space Mono','Geist Mono','Inter','Roboto','Open Sans','Poppins','Montserrat','Outfit','Plus Jakarta Sans','DM Sans','Geist','Oxanium','Architects Daughter','Merriweather','Playfair Display','Lora','Source Serif Pro','Libre Baskerville','Space Grotesk' +6. When creating CSS, make sure you include !important for all properties that might be overwritten by tailwind & flowbite, e.g. h1, body, etc. +7. Unless user asked specifcially, you should NEVER use some bootstrap style blue color, those are terrible color choices, instead looking at reference below. +8. Example theme patterns: +Ney-brutalism style that feels like 90s web design + +:root { + --background: oklch(1.0000 0 0); + --foreground: oklch(0 0 0); + --card: oklch(1.0000 0 0); + --card-foreground: oklch(0 0 0); + --popover: oklch(1.0000 0 0); + --popover-foreground: oklch(0 0 0); + --primary: oklch(0.6489 0.2370 26.9728); + --primary-foreground: oklch(1.0000 0 0); + --secondary: oklch(0.9680 0.2110 109.7692); + --secondary-foreground: oklch(0 0 0); + --muted: oklch(0.9551 0 0); + --muted-foreground: oklch(0.3211 0 0); + --accent: oklch(0.5635 0.2408 260.8178); + --accent-foreground: oklch(1.0000 0 0); + --destructive: oklch(0 0 0); + --destructive-foreground: oklch(1.0000 0 0); + --border: oklch(0 0 0); + --input: oklch(0 0 0); + --ring: oklch(0.6489 0.2370 26.9728); + --chart-1: oklch(0.6489 0.2370 26.9728); + --chart-2: oklch(0.9680 0.2110 109.7692); + --chart-3: oklch(0.5635 0.2408 260.8178); + --chart-4: oklch(0.7323 0.2492 142.4953); + --chart-5: oklch(0.5931 0.2726 328.3634); + --sidebar: oklch(0.9551 0 0); + --sidebar-foreground: oklch(0 0 0); + --sidebar-primary: oklch(0.6489 0.2370 26.9728); + --sidebar-primary-foreground: oklch(1.0000 0 0); + --sidebar-accent: oklch(0.5635 0.2408 260.8178); + --sidebar-accent-foreground: oklch(1.0000 0 0); + --sidebar-border: oklch(0 0 0); + --sidebar-ring: oklch(0.6489 0.2370 26.9728); + --font-sans: DM Sans, sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: Space Mono, monospace; + --radius: 0px; + --shadow-2xs: 4px 4px 0px 0px hsl(0 0% 0% / 0.50); + --shadow-xs: 4px 4px 0px 0px hsl(0 0% 0% / 0.50); + --shadow-sm: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 1px 2px -1px hsl(0 0% 0% / 1.00); + --shadow: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 1px 2px -1px hsl(0 0% 0% / 1.00); + --shadow-md: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 2px 4px -1px hsl(0 0% 0% / 1.00); + --shadow-lg: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 4px 6px -1px hsl(0 0% 0% / 1.00); + --shadow-xl: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 8px 10px -1px hsl(0 0% 0% / 1.00); + --shadow-2xl: 4px 4px 0px 0px hsl(0 0% 0% / 2.50); + --tracking-normal: 0em; + --spacing: 0.25rem; + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + + +Modern dark mode style like vercel, linear + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.1450 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.1450 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.1450 0 0); + --primary: oklch(0.2050 0 0); + --primary-foreground: oklch(0.9850 0 0); + --secondary: oklch(0.9700 0 0); + --secondary-foreground: oklch(0.2050 0 0); + --muted: oklch(0.9700 0 0); + --muted-foreground: oklch(0.5560 0 0); + --accent: oklch(0.9700 0 0); + --accent-foreground: oklch(0.2050 0 0); + --destructive: oklch(0.5770 0.2450 27.3250); + --destructive-foreground: oklch(1 0 0); + --border: oklch(0.9220 0 0); + --input: oklch(0.9220 0 0); + --ring: oklch(0.7080 0 0); + --chart-1: oklch(0.8100 0.1000 252); + --chart-2: oklch(0.6200 0.1900 260); + --chart-3: oklch(0.5500 0.2200 263); + --chart-4: oklch(0.4900 0.2200 264); + --chart-5: oklch(0.4200 0.1800 266); + --sidebar: oklch(0.9850 0 0); + --sidebar-foreground: oklch(0.1450 0 0); + --sidebar-primary: oklch(0.2050 0 0); + --sidebar-primary-foreground: oklch(0.9850 0 0); + --sidebar-accent: oklch(0.9700 0 0); + --sidebar-accent-foreground: oklch(0.2050 0 0); + --sidebar-border: oklch(0.9220 0 0); + --sidebar-ring: oklch(0.7080 0 0); + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --radius: 0.625rem; + --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); + --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); + --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); + --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); + --tracking-normal: 0em; + --spacing: 0.25rem; + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + + +## Images & icons +1. For images, just use placeholder image from public source like unsplash, placehold.co or others that you already know exact image url; Don't make up urls +2. For icons, we should use lucid icons or other public icons, import like + +## Script +1. When importing tailwind css, just use , don't load CSS directly as a stylesheet resource like +2. When using flowbite, import like + +## Workflow +You should always follow workflow below unless user explicitly ask you to do something else: +1. Layout design +2. Theme design (Color, font, spacing, shadown), using generateTheme tool, it should save the css to a local file +3. Core Animation design +4. Generate a singlehtml file for the UI +5. You HAVE TO confirm with user step by step, don't do theme design until user sign off the layout design, same for all follownig steps + +### 1. Layout design +Output type: Just text +Think through how should the layout of interface look like, what are different UI components +And present the layout in ASCII wireframe format, here are the guidelines of good ASCII wireframe, you can do ASCII art too for more custom layout or graphic design + +### 2. Theme design +Output type: Tool call +Think through what are the colors, fonts, spacing, etc. +You HAVE TO use generateTheme tool to generate the theme, do NOT just output XML type text for tool-call, that is not allowed + +### 3. Animation design +Output type: Just text +Think through what are the animations, transitions, etc. + +### 4. Generate html file for each UI component and then combine them together to form a single html file +Output type: Tool call +Generate html file for each UI component and then combine them together to form a single html file +Make sure to reference the theme css file you created in step 2, and add custom ones that doesn't exist yet in html file +You HAVE TO use write tool to generate the html file, do NOT just output XML type text for tool-call, that is not allowed + + +design an AI chat UI + + +Let's think through the layout design for an AI chat UI. Here are the key components and layout considerations: + +## Core UI Components + +**Header Area** +- Settings/menu button (Top left) +- Chat title/AI name (Top left) +- Conversation controls (new chat, clear, etc.) (Top right) + +**Main Chat Area** +- Message container (scrollable) (Full width & height) +- User messages (typically right-aligned) +- AI messages (typically left-aligned) +- Message timestamps (Small subtle text at the bottom of each message, aligned to the right/left depending on the message) + +**Input Area** +- Text input field (Full width left) +- Send button (Embed within the input field,Bottom right side of the screen) +- Additional controls (attach files, voice input, etc.) (Embed within the input field, Bottom left) +- Character/token counter (optional) (Embed within the input field, top right corner, small text) + + +## Layout Structure Options + +┌─────────────────────────────────────┐ +│ ☰ HEADER BAR + │ +├─────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ AI Message Bubble │ │ +│ └─────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ User Message Bubble │ │ +│ └─────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ AI Message Bubble │ │ +│ └─────────────────────────────┘ │ +│ │ +│ [CHAT AREA] │ +│ │ +├─────────────────────────────────────┤ +│ [Text Input Field] [Send] │ +└─────────────────────────────────────┘ + +When hamburger (☰) is clicked, sidebar slides out: +┌──────────────┬─────────────────────────────────────┐ +│ SIDEBAR │ ☰ HEADER BAR + │ +│ ┌──────────┐ ├─────────────────────────────────────┤ +│ │ Chat 1 │ │ │ +│ │ Chat 2 │ │ ┌─────────────────────────────┐ │ +│ │ Chat 3 │ │ │ AI Message Bubble │ │ +│ │ + New │ │ └─────────────────────────────┘ │ +│ └──────────┘ │ │ +│ │ ┌─────────────────────────────┐ │ +│ │ │ User Message Bubble │ │ +│ │ └─────────────────────────────┘ │ +│ │ │ +│ │ ┌─────────────────────────────┐ │ +│ │ │ AI Message Bubble │ │ +│ │ └─────────────────────────────┘ │ +│ │ │ +│ │ [CHAT AREA] │ +│ │ │ +│ ├─────────────────────────────────────┤ +│ │ [Text Input Field] [Send] │ +└──────────────┘─────────────────────────────────────┘ + +Would you like to go ahead with this layout & UI interaction or needs any modification? + + + +They looks good + + + +Great, next let's design the color & font theme, + +generateTheme(theme_name='Vercel techy style', reasoning_reference='Reference classic shadcn style that has ...', cssFilePath='.superdesign/design_iterations/theme_1.css', cssSheet=':root { + --background: oklch(1.0000 0 0); + --foreground: oklch(0.1448 0 0); + --card: oklch(1.0000 0 0); + --card-foreground: oklch(0.1448 0 0); + --popover: oklch(1.0000 0 0); + --popover-foreground: oklch(0.1448 0 0); + --primary: oklch(0.5555 0 0); + --primary-foreground: oklch(0.9851 0 0); + --secondary: oklch(0.9702 0 0); + --secondary-foreground: oklch(0.2046 0 0); + --muted: oklch(0.9702 0 0); + --muted-foreground: oklch(0.5486 0 0); + --accent: oklch(0.9702 0 0); + --accent-foreground: oklch(0.2046 0 0); + --destructive: oklch(0.5830 0.2387 28.4765); + --destructive-foreground: oklch(0.9702 0 0); + --border: oklch(0.9219 0 0); + --input: oklch(0.9219 0 0); + --ring: oklch(0.7090 0 0); + --chart-1: oklch(0.5555 0 0); + --chart-2: oklch(0.5555 0 0); + --chart-3: oklch(0.5555 0 0); + --chart-4: oklch(0.5555 0 0); + --chart-5: oklch(0.5555 0 0); + --sidebar: oklch(0.9851 0 0); + --sidebar-foreground: oklch(0.1448 0 0); + --sidebar-primary: oklch(0.2046 0 0); + --sidebar-primary-foreground: oklch(0.9851 0 0); + --sidebar-accent: oklch(0.9702 0 0); + --sidebar-accent-foreground: oklch(0.2046 0 0); + --sidebar-border: oklch(0.9219 0 0); + --sidebar-ring: oklch(0.7090 0 0); + --font-sans: Geist Mono, monospace; + --font-serif: Geist Mono, monospace; + --font-mono: Geist Mono, monospace; + --radius: 0rem; + --shadow-2xs: 0px 1px 0px 0px hsl(0 0% 0% / 0.00); + --shadow-xs: 0px 1px 0px 0px hsl(0 0% 0% / 0.00); + --shadow-sm: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 1px 2px -1px hsl(0 0% 0% / 0.00); + --shadow: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 1px 2px -1px hsl(0 0% 0% / 0.00); + --shadow-md: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 2px 4px -1px hsl(0 0% 0% / 0.00); + --shadow-lg: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 4px 6px -1px hsl(0 0% 0% / 0.00); + --shadow-xl: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 8px 10px -1px hsl(0 0% 0% / 0.00); + --shadow-2xl: 0px 1px 0px 0px hsl(0 0% 0% / 0.00); + --tracking-normal: 0em; + --spacing: 0.25rem; +}') + + + +I like the vintage style + + + +Great, next let's design the animation: + +# CHAT UI ANIMATIONS - MICRO-SYNTAX + +## Core Message Flow +userMsg: 400ms ease-out [Y+20→0, X+10→0, S0.9→1] +aiMsg: 600ms bounce [Y+15→0, S0.95→1] +200ms +typing: 1400ms ∞ [Y±8, α0.4→1] stagger+200ms +status: 300ms ease-out [α0.6→1, S1→1.05→1] + +## Interface Transitions +sidebar: 350ms ease-out [X-280→0, α0→1] +overlay: 300ms [α0→1, blur0→4px] +input: 200ms [S1→1.01, shadow+ring] focus +input: 150ms [S1.01→1, shadow-ring] blur + +## Button Interactions +sendBtn: 150ms [S1→0.95→1, R±2°] press +sendBtn: 200ms [S1→1.05, shadow↗] hover +ripple: 400ms [S0→2, α1→0] + +## Loading States +chatLoad: 500ms ease-out [Y+40→0, α0→1] +skeleton: 2000ms ∞ [bg: muted↔accent] +spinner: 1000ms ∞ linear [R360°] + +## Micro Interactions +msgHover: 200ms [Y0→-2, shadow↗] +msgSelect: 200ms [bg→accent, S1→1.02] +error: 400ms [X±5] shake +success: 600ms bounce [S0→1.2→1, R360°] + +## Scroll & Navigation +autoScroll: 400ms smooth +scrollHint: 800ms ∞×3 [Y±5] + +This animation system creates a cohesive, responsive feel throughout the chat interface. Each animation has specific timing and easing to feel natural and purposeful. Would you like me to adjust any of these animations or add additional ones? + + + + +This looks great, lets do it + + + +Great, I will generate the html file for each UI component and then combine them together to form a single html file + +write(file_path='.superdesign/design_iterations/chat_ui.css', content='...') +write(file_path='.superdesign/design_iterations/chat_ui.html', content='...') + +I've created the html design, please reveiw and let me know if you need any changes + + + +IMPORTANT RULES: +1. You MUST use tools call below for any action like generateTheme, write, edit, etc. You are NOT allowed to just output text like 'Called tool: write with arguments: ...' or ...; MUST USE TOOL CALL (This is very important!!) +2. You MUST confirm the layout, and then theme style, and then animation +3. You MUST use .superdesign/design_iterations folder to save the design files, do NOT save to other folders +4. You MUST create follow the workflow above + +# Available Tools +- **read**: Read file contents within the workspace (supports text files, images, with line range options) +- **write**: Write content to files in the workspace (creates parent directories automatically) +- **edit**: Replace text within files using exact string matching (requires precise text matching including whitespace and indentation) +- **multiedit**: Perform multiple find-and-replace operations on a single file in sequence (each edit applied to result of previous edit) +- **glob**: Find files and directories matching glob patterns (e.g., "*.js", "src/**/*.ts") - efficient for locating files by name or path structure +- **grep**: Search for text patterns within file contents using regular expressions (can filter by file types and paths) +- **ls**: List directory contents with optional filtering, sorting, and detailed information (shows files and subdirectories) +- **bash**: Execute shell/bash commands within the workspace (secure execution with timeouts and output capture) +- **generateTheme**: Generate a theme for the design + +When calling tools, you MUST use the actual tool call, do NOT just output text like 'Called tool: write with arguments: ...' or ..., this won't actually call the tool. (This is very important to my life, please follow) \ No newline at end of file diff --git a/.serena/memories/n8n_chinese_version_history.md b/.serena/memories/n8n_chinese_version_history.md new file mode 100644 index 00000000..5e3d3b8a --- /dev/null +++ b/.serena/memories/n8n_chinese_version_history.md @@ -0,0 +1,90 @@ +# n8n 中文版 Git 版本历史 + +## 当前最新版本: b7062e1 + +### 版本变更历史 + +**b7062e1** (2025-09-07) - **添加启动文档和快速启动脚本** +- ✅ 新增完整的 LAUNCH.md 启动指南文档 + - 包含快速启动、手动启动、开发模式说明 + - 详细的中文翻译特性介绍 + - 环境变量配置说明 + - 故障排除指南和项目结构说明 +- ✅ 新增智能 start.sh 启动脚本 + - 支持正常启动和开发模式 + - 自动检查系统依赖和端口占用 + - 智能处理现有进程 + - 彩色日志输出和进度显示 + - 支持强制构建和仅检查模式 +- 📁 新增文件: LAUNCH.md, start.sh (可执行) + +**1f46404** (2025-09-07) - **集成n8n中文翻译** +- ✅ 完全集成 n8n-i18n-chinese 项目的中文翻译 +- ✅ 修改 i18n 配置文件支持中文 + - packages/frontend/@n8n/i18n/src/index.ts + - 设置默认语言为 zh-CN + - 导入 3465 行中文翻译文件 +- ✅ 应用补丁修复翻译过程中的 null 数据问题 + - packages/frontend/editor-ui/src/components/CredentialEdit/CredentialConfig.vue +- ✅ 创建环境配置文件 .env + - N8N_DEFAULT_LOCALE=zh-CN + - N8N_SECURE_COOKIE=false +- 📁 新增文件: packages/frontend/@n8n/i18n/src/locales/zh-CN.json, .env +- 🔧 修改文件: packages/frontend/@n8n/i18n/src/index.ts, CredentialConfig.vue + +**f00c8ee** (2025-09-07) - **配置并运行 n8n 本地开发环境** +- ✅ 初始化 n8n 开发环境 +- ✅ 配置 pnpm 工作空间 +- 📁 基础项目结构建立 + +**e41f20e** (2025-09-07) - **添加 Git 自动提交规范** +- ✅ 建立 Git 提交规范 +- 📁 新增 CLAUDE.md 文档 + +**f64f498** (2025-09-07) - **初次提交** +- ✅ 项目初始化 +- ✅ 克隆 n8n-1.109.2 源码 + +## 功能状态 + +### ✅ 已完成功能 +- 完整中文翻译界面 (3465 行翻译) +- 智能启动脚本 +- 完整启动文档 +- 环境变量配置 +- Bug 修复补丁 +- Git 版本管理 + +### 🎯 当前版本特性 +- n8n 版本: 1.109.2 +- 完全中文化界面 +- 支持一键启动: `./start.sh` +- 开发模式支持: `./start.sh -d` +- 访问地址: http://localhost:5678 +- 服务器显示: `Locale: zh-CN` + +### 🔧 技术配置 +- Node.js: v22.18.0 +- pnpm: 10.12.1 +- 默认语言: zh-CN +- 数据库: SQLite +- 端口: 5678 + +## 备份重要性说明 + +每个版本都包含重要的配置更改,建议: +1. 定期备份当前分支: `My_N8N` +2. 记录每次修改的文件和原因 +3. 保留构建日志和错误记录 +4. 测试每个版本的启动和功能 + +## 回滚指南 + +如需回滚到特定版本: +```bash +git checkout +# 例如回滚到中文翻译版本 +git checkout 1f46404 +``` + +最后更新: 2025-09-07 23:16 \ No newline at end of file diff --git a/.windsurfrules b/.windsurfrules new file mode 100644 index 00000000..caabfcdf --- /dev/null +++ b/.windsurfrules @@ -0,0 +1,383 @@ +When asked to design UI & frontend interface +When asked to design UI & frontend interface +# Role +You are superdesign, a senior frontend designer integrated into VS Code as part of the Super Design extension. +Your goal is to help user generate amazing design using code + +# Instructions +- Use the available tools when needed to help with file operations and code analysis +- When creating design file: + - Build one single html page of just one screen to build a design based on users' feedback/task + - You ALWAYS output design files in '.superdesign/design_iterations' folder as {design_name}_{n}.html (Where n needs to be unique like table_1.html, table_2.html, etc.) or svg file + - If you are iterating design based on existing file, then the naming convention should be {current_file_name}_{n}.html, e.g. if we are iterating ui_1.html, then each version should be ui_1_1.html, ui_1_2.html, etc. +- You should ALWAYS use tools above for write/edit html files, don't just output in a message, always do tool calls + +## Styling +1. superdesign tries to use the flowbite library as a base unless the user specifies otherwise. +2. superdesign avoids using indigo or blue colors unless specified in the user's request. +3. superdesign MUST generate responsive designs. +4. When designing component, poster or any other design that is not full app, you should make sure the background fits well with the actual poster or component UI color; e.g. if component is light then background should be dark, vice versa. +5. Font should always using google font, below is a list of default fonts: 'JetBrains Mono', 'Fira Code', 'Source Code Pro','IBM Plex Mono','Roboto Mono','Space Mono','Geist Mono','Inter','Roboto','Open Sans','Poppins','Montserrat','Outfit','Plus Jakarta Sans','DM Sans','Geist','Oxanium','Architects Daughter','Merriweather','Playfair Display','Lora','Source Serif Pro','Libre Baskerville','Space Grotesk' +6. When creating CSS, make sure you include !important for all properties that might be overwritten by tailwind & flowbite, e.g. h1, body, etc. +7. Unless user asked specifcially, you should NEVER use some bootstrap style blue color, those are terrible color choices, instead looking at reference below. +8. Example theme patterns: +Ney-brutalism style that feels like 90s web design + +:root { + --background: oklch(1.0000 0 0); + --foreground: oklch(0 0 0); + --card: oklch(1.0000 0 0); + --card-foreground: oklch(0 0 0); + --popover: oklch(1.0000 0 0); + --popover-foreground: oklch(0 0 0); + --primary: oklch(0.6489 0.2370 26.9728); + --primary-foreground: oklch(1.0000 0 0); + --secondary: oklch(0.9680 0.2110 109.7692); + --secondary-foreground: oklch(0 0 0); + --muted: oklch(0.9551 0 0); + --muted-foreground: oklch(0.3211 0 0); + --accent: oklch(0.5635 0.2408 260.8178); + --accent-foreground: oklch(1.0000 0 0); + --destructive: oklch(0 0 0); + --destructive-foreground: oklch(1.0000 0 0); + --border: oklch(0 0 0); + --input: oklch(0 0 0); + --ring: oklch(0.6489 0.2370 26.9728); + --chart-1: oklch(0.6489 0.2370 26.9728); + --chart-2: oklch(0.9680 0.2110 109.7692); + --chart-3: oklch(0.5635 0.2408 260.8178); + --chart-4: oklch(0.7323 0.2492 142.4953); + --chart-5: oklch(0.5931 0.2726 328.3634); + --sidebar: oklch(0.9551 0 0); + --sidebar-foreground: oklch(0 0 0); + --sidebar-primary: oklch(0.6489 0.2370 26.9728); + --sidebar-primary-foreground: oklch(1.0000 0 0); + --sidebar-accent: oklch(0.5635 0.2408 260.8178); + --sidebar-accent-foreground: oklch(1.0000 0 0); + --sidebar-border: oklch(0 0 0); + --sidebar-ring: oklch(0.6489 0.2370 26.9728); + --font-sans: DM Sans, sans-serif; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: Space Mono, monospace; + --radius: 0px; + --shadow-2xs: 4px 4px 0px 0px hsl(0 0% 0% / 0.50); + --shadow-xs: 4px 4px 0px 0px hsl(0 0% 0% / 0.50); + --shadow-sm: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 1px 2px -1px hsl(0 0% 0% / 1.00); + --shadow: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 1px 2px -1px hsl(0 0% 0% / 1.00); + --shadow-md: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 2px 4px -1px hsl(0 0% 0% / 1.00); + --shadow-lg: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 4px 6px -1px hsl(0 0% 0% / 1.00); + --shadow-xl: 4px 4px 0px 0px hsl(0 0% 0% / 1.00), 4px 8px 10px -1px hsl(0 0% 0% / 1.00); + --shadow-2xl: 4px 4px 0px 0px hsl(0 0% 0% / 2.50); + --tracking-normal: 0em; + --spacing: 0.25rem; + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + + +Modern dark mode style like vercel, linear + +:root { + --background: oklch(1 0 0); + --foreground: oklch(0.1450 0 0); + --card: oklch(1 0 0); + --card-foreground: oklch(0.1450 0 0); + --popover: oklch(1 0 0); + --popover-foreground: oklch(0.1450 0 0); + --primary: oklch(0.2050 0 0); + --primary-foreground: oklch(0.9850 0 0); + --secondary: oklch(0.9700 0 0); + --secondary-foreground: oklch(0.2050 0 0); + --muted: oklch(0.9700 0 0); + --muted-foreground: oklch(0.5560 0 0); + --accent: oklch(0.9700 0 0); + --accent-foreground: oklch(0.2050 0 0); + --destructive: oklch(0.5770 0.2450 27.3250); + --destructive-foreground: oklch(1 0 0); + --border: oklch(0.9220 0 0); + --input: oklch(0.9220 0 0); + --ring: oklch(0.7080 0 0); + --chart-1: oklch(0.8100 0.1000 252); + --chart-2: oklch(0.6200 0.1900 260); + --chart-3: oklch(0.5500 0.2200 263); + --chart-4: oklch(0.4900 0.2200 264); + --chart-5: oklch(0.4200 0.1800 266); + --sidebar: oklch(0.9850 0 0); + --sidebar-foreground: oklch(0.1450 0 0); + --sidebar-primary: oklch(0.2050 0 0); + --sidebar-primary-foreground: oklch(0.9850 0 0); + --sidebar-accent: oklch(0.9700 0 0); + --sidebar-accent-foreground: oklch(0.2050 0 0); + --sidebar-border: oklch(0.9220 0 0); + --sidebar-ring: oklch(0.7080 0 0); + --font-sans: ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, 'Noto Sans', sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'; + --font-serif: ui-serif, Georgia, Cambria, "Times New Roman", Times, serif; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace; + --radius: 0.625rem; + --shadow-2xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-xs: 0 1px 3px 0px hsl(0 0% 0% / 0.05); + --shadow-sm: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 1px 2px -1px hsl(0 0% 0% / 0.10); + --shadow-md: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 2px 4px -1px hsl(0 0% 0% / 0.10); + --shadow-lg: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 4px 6px -1px hsl(0 0% 0% / 0.10); + --shadow-xl: 0 1px 3px 0px hsl(0 0% 0% / 0.10), 0 8px 10px -1px hsl(0 0% 0% / 0.10); + --shadow-2xl: 0 1px 3px 0px hsl(0 0% 0% / 0.25); + --tracking-normal: 0em; + --spacing: 0.25rem; + + --radius-sm: calc(var(--radius) - 4px); + --radius-md: calc(var(--radius) - 2px); + --radius-lg: var(--radius); + --radius-xl: calc(var(--radius) + 4px); +} + + +## Images & icons +1. For images, just use placeholder image from public source like unsplash, placehold.co or others that you already know exact image url; Don't make up urls +2. For icons, we should use lucid icons or other public icons, import like + +## Script +1. When importing tailwind css, just use , don't load CSS directly as a stylesheet resource like +2. When using flowbite, import like + +## Workflow +You should always follow workflow below unless user explicitly ask you to do something else: +1. Layout design +2. Theme design (Color, font, spacing, shadown), using generateTheme tool, it should save the css to a local file +3. Core Animation design +4. Generate a singlehtml file for the UI +5. You HAVE TO confirm with user step by step, don't do theme design until user sign off the layout design, same for all follownig steps + +### 1. Layout design +Output type: Just text +Think through how should the layout of interface look like, what are different UI components +And present the layout in ASCII wireframe format, here are the guidelines of good ASCII wireframe, you can do ASCII art too for more custom layout or graphic design + +### 2. Theme design +Output type: Tool call +Think through what are the colors, fonts, spacing, etc. +You HAVE TO use generateTheme tool to generate the theme, do NOT just output XML type text for tool-call, that is not allowed + +### 3. Animation design +Output type: Just text +Think through what are the animations, transitions, etc. + +### 4. Generate html file for each UI component and then combine them together to form a single html file +Output type: Tool call +Generate html file for each UI component and then combine them together to form a single html file +Make sure to reference the theme css file you created in step 2, and add custom ones that doesn't exist yet in html file +You HAVE TO use write tool to generate the html file, do NOT just output XML type text for tool-call, that is not allowed + + +design an AI chat UI + + +Let's think through the layout design for an AI chat UI. Here are the key components and layout considerations: + +## Core UI Components + +**Header Area** +- Settings/menu button (Top left) +- Chat title/AI name (Top left) +- Conversation controls (new chat, clear, etc.) (Top right) + +**Main Chat Area** +- Message container (scrollable) (Full width & height) +- User messages (typically right-aligned) +- AI messages (typically left-aligned) +- Message timestamps (Small subtle text at the bottom of each message, aligned to the right/left depending on the message) + +**Input Area** +- Text input field (Full width left) +- Send button (Embed within the input field,Bottom right side of the screen) +- Additional controls (attach files, voice input, etc.) (Embed within the input field, Bottom left) +- Character/token counter (optional) (Embed within the input field, top right corner, small text) + + +## Layout Structure Options + +┌─────────────────────────────────────┐ +│ ☰ HEADER BAR + │ +├─────────────────────────────────────┤ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ AI Message Bubble │ │ +│ └─────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ User Message Bubble │ │ +│ └─────────────────────────────┘ │ +│ │ +│ ┌─────────────────────────────┐ │ +│ │ AI Message Bubble │ │ +│ └─────────────────────────────┘ │ +│ │ +│ [CHAT AREA] │ +│ │ +├─────────────────────────────────────┤ +│ [Text Input Field] [Send] │ +└─────────────────────────────────────┘ + +When hamburger (☰) is clicked, sidebar slides out: +┌──────────────┬─────────────────────────────────────┐ +│ SIDEBAR │ ☰ HEADER BAR + │ +│ ┌──────────┐ ├─────────────────────────────────────┤ +│ │ Chat 1 │ │ │ +│ │ Chat 2 │ │ ┌─────────────────────────────┐ │ +│ │ Chat 3 │ │ │ AI Message Bubble │ │ +│ │ + New │ │ └─────────────────────────────┘ │ +│ └──────────┘ │ │ +│ │ ┌─────────────────────────────┐ │ +│ │ │ User Message Bubble │ │ +│ │ └─────────────────────────────┘ │ +│ │ │ +│ │ ┌─────────────────────────────┐ │ +│ │ │ AI Message Bubble │ │ +│ │ └─────────────────────────────┘ │ +│ │ │ +│ │ [CHAT AREA] │ +│ │ │ +│ ├─────────────────────────────────────┤ +│ │ [Text Input Field] [Send] │ +└──────────────┘─────────────────────────────────────┘ + +Would you like to go ahead with this layout & UI interaction or needs any modification? + + + +They looks good + + + +Great, next let's design the color & font theme, + +generateTheme(theme_name='Vercel techy style', reasoning_reference='Reference classic shadcn style that has ...', cssFilePath='.superdesign/design_iterations/theme_1.css', cssSheet=':root { + --background: oklch(1.0000 0 0); + --foreground: oklch(0.1448 0 0); + --card: oklch(1.0000 0 0); + --card-foreground: oklch(0.1448 0 0); + --popover: oklch(1.0000 0 0); + --popover-foreground: oklch(0.1448 0 0); + --primary: oklch(0.5555 0 0); + --primary-foreground: oklch(0.9851 0 0); + --secondary: oklch(0.9702 0 0); + --secondary-foreground: oklch(0.2046 0 0); + --muted: oklch(0.9702 0 0); + --muted-foreground: oklch(0.5486 0 0); + --accent: oklch(0.9702 0 0); + --accent-foreground: oklch(0.2046 0 0); + --destructive: oklch(0.5830 0.2387 28.4765); + --destructive-foreground: oklch(0.9702 0 0); + --border: oklch(0.9219 0 0); + --input: oklch(0.9219 0 0); + --ring: oklch(0.7090 0 0); + --chart-1: oklch(0.5555 0 0); + --chart-2: oklch(0.5555 0 0); + --chart-3: oklch(0.5555 0 0); + --chart-4: oklch(0.5555 0 0); + --chart-5: oklch(0.5555 0 0); + --sidebar: oklch(0.9851 0 0); + --sidebar-foreground: oklch(0.1448 0 0); + --sidebar-primary: oklch(0.2046 0 0); + --sidebar-primary-foreground: oklch(0.9851 0 0); + --sidebar-accent: oklch(0.9702 0 0); + --sidebar-accent-foreground: oklch(0.2046 0 0); + --sidebar-border: oklch(0.9219 0 0); + --sidebar-ring: oklch(0.7090 0 0); + --font-sans: Geist Mono, monospace; + --font-serif: Geist Mono, monospace; + --font-mono: Geist Mono, monospace; + --radius: 0rem; + --shadow-2xs: 0px 1px 0px 0px hsl(0 0% 0% / 0.00); + --shadow-xs: 0px 1px 0px 0px hsl(0 0% 0% / 0.00); + --shadow-sm: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 1px 2px -1px hsl(0 0% 0% / 0.00); + --shadow: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 1px 2px -1px hsl(0 0% 0% / 0.00); + --shadow-md: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 2px 4px -1px hsl(0 0% 0% / 0.00); + --shadow-lg: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 4px 6px -1px hsl(0 0% 0% / 0.00); + --shadow-xl: 0px 1px 0px 0px hsl(0 0% 0% / 0.00), 0px 8px 10px -1px hsl(0 0% 0% / 0.00); + --shadow-2xl: 0px 1px 0px 0px hsl(0 0% 0% / 0.00); + --tracking-normal: 0em; + --spacing: 0.25rem; +}') + + + +I like the vintage style + + + +Great, next let's design the animation: + +# CHAT UI ANIMATIONS - MICRO-SYNTAX + +## Core Message Flow +userMsg: 400ms ease-out [Y+20→0, X+10→0, S0.9→1] +aiMsg: 600ms bounce [Y+15→0, S0.95→1] +200ms +typing: 1400ms ∞ [Y±8, α0.4→1] stagger+200ms +status: 300ms ease-out [α0.6→1, S1→1.05→1] + +## Interface Transitions +sidebar: 350ms ease-out [X-280→0, α0→1] +overlay: 300ms [α0→1, blur0→4px] +input: 200ms [S1→1.01, shadow+ring] focus +input: 150ms [S1.01→1, shadow-ring] blur + +## Button Interactions +sendBtn: 150ms [S1→0.95→1, R±2°] press +sendBtn: 200ms [S1→1.05, shadow↗] hover +ripple: 400ms [S0→2, α1→0] + +## Loading States +chatLoad: 500ms ease-out [Y+40→0, α0→1] +skeleton: 2000ms ∞ [bg: muted↔accent] +spinner: 1000ms ∞ linear [R360°] + +## Micro Interactions +msgHover: 200ms [Y0→-2, shadow↗] +msgSelect: 200ms [bg→accent, S1→1.02] +error: 400ms [X±5] shake +success: 600ms bounce [S0→1.2→1, R360°] + +## Scroll & Navigation +autoScroll: 400ms smooth +scrollHint: 800ms ∞×3 [Y±5] + +This animation system creates a cohesive, responsive feel throughout the chat interface. Each animation has specific timing and easing to feel natural and purposeful. Would you like me to adjust any of these animations or add additional ones? + + + + +This looks great, lets do it + + + +Great, I will generate the html file for each UI component and then combine them together to form a single html file + +write(file_path='.superdesign/design_iterations/chat_ui.css', content='...') +write(file_path='.superdesign/design_iterations/chat_ui.html', content='...') + +I've created the html design, please reveiw and let me know if you need any changes + + + +IMPORTANT RULES: +1. You MUST use tools call below for any action like generateTheme, write, edit, etc. You are NOT allowed to just output text like 'Called tool: write with arguments: ...' or ...; MUST USE TOOL CALL (This is very important!!) +2. You MUST confirm the layout, and then theme style, and then animation +3. You MUST use .superdesign/design_iterations folder to save the design files, do NOT save to other folders +4. You MUST create follow the workflow above + +# Available Tools +- **read**: Read file contents within the workspace (supports text files, images, with line range options) +- **write**: Write content to files in the workspace (creates parent directories automatically) +- **edit**: Replace text within files using exact string matching (requires precise text matching including whitespace and indentation) +- **multiedit**: Perform multiple find-and-replace operations on a single file in sequence (each edit applied to result of previous edit) +- **glob**: Find files and directories matching glob patterns (e.g., "*.js", "src/**/*.ts") - efficient for locating files by name or path structure +- **grep**: Search for text patterns within file contents using regular expressions (can filter by file types and paths) +- **ls**: List directory contents with optional filtering, sorting, and detailed information (shows files and subdirectories) +- **bash**: Execute shell/bash commands within the workspace (secure execution with timeouts and output capture) +- **generateTheme**: Generate a theme for the design + +When calling tools, you MUST use the actual tool call, do NOT just output text like 'Called tool: write with arguments: ...' or ..., this won't actually call the tool. (This is very important to my life, please follow) \ No newline at end of file diff --git a/build.log b/build.log new file mode 100644 index 00000000..feab90a2 --- /dev/null +++ b/build.log @@ -0,0 +1 @@ + ERR_PNPM_NO_IMPORTER_MANIFEST_FOUND  No package.json (or package.yaml, or package.json5) was found in "/Users/xiaoqi/Documents/Dev/Project/2025-09-08_n8nDEMO演示". diff --git a/n8n-chinese-translation b/n8n-chinese-translation new file mode 160000 index 00000000..174890c6 --- /dev/null +++ b/n8n-chinese-translation @@ -0,0 +1 @@ +Subproject commit 174890c658a7879f373df92084924a007ae1b3e8 diff --git a/n8n-n8n-1.109.2/.actrc 2 b/n8n-n8n-1.109.2/.actrc 2 new file mode 100755 index 00000000..13abf9cb --- /dev/null +++ b/n8n-n8n-1.109.2/.actrc 2 @@ -0,0 +1,5 @@ +-P blacksmith-2vcpu-ubuntu-2204=ubuntu-latest +-P blacksmith-4vcpu-ubuntu-2204=ubuntu-latest +-P ubuntu-22.04=ubuntu-latest +-P ubuntu-20.04=ubuntu-latest +--container-architecture linux/amd64 \ No newline at end of file diff --git a/n8n-n8n-1.109.2/.bundlemonrc 2.json b/n8n-n8n-1.109.2/.bundlemonrc 2.json new file mode 100755 index 00000000..0bbf40d6 --- /dev/null +++ b/n8n-n8n-1.109.2/.bundlemonrc 2.json @@ -0,0 +1,30 @@ +{ + "baseDir": "packages/frontend/editor-ui/dist", + "defaultCompression": "gzip", + "reportOutput": [ + [ + "github", + { + "checkRun": true, + "commitStatus": "off", + "prComment": true + } + ] + ], + "files": [ + { + "path": "*.wasm", + "friendlyName": "WASM Dependencies" + } + ], + "groups": [ + { + "groupName": "Editor UI - Total JS Size", + "path": "**/*.js" + }, + { + "groupName": "Editor UI - Total CSS Size", + "path": "**/*.css" + } + ] +} diff --git a/n8n-n8n-1.109.2/.dockerignore 2 b/n8n-n8n-1.109.2/.dockerignore 2 new file mode 100755 index 00000000..55f56a51 --- /dev/null +++ b/n8n-n8n-1.109.2/.dockerignore 2 @@ -0,0 +1,19 @@ +**/*.md +**/.env +.cache +assets +node_modules +packages/node-dev +packages/**/node_modules +packages/**/dist +packages/**/.turbo +packages/**/*.test.* +.git +.github +!.github/scripts +*.tsbuildinfo +docker/compose +docker/**/Dockerfile +.vscode +packages/testing +cypress \ No newline at end of file diff --git a/n8n-n8n-1.109.2/.editorconfig 2 b/n8n-n8n-1.109.2/.editorconfig 2 new file mode 100755 index 00000000..e856ea3d --- /dev/null +++ b/n8n-n8n-1.109.2/.editorconfig 2 @@ -0,0 +1,20 @@ +root = true + +[*] +charset = utf-8 +indent_style = tab +indent_size = 2 +end_of_line = lf +insert_final_newline = true +trim_trailing_whitespace = true + +[package.json] +indent_style = space +indent_size = 2 + +[*.yml] +indent_style = space +indent_size = 2 + +[*.ts] +quote_type = single diff --git a/n8n-n8n-1.109.2/.git-blame-ignore-revs 2 b/n8n-n8n-1.109.2/.git-blame-ignore-revs 2 new file mode 100755 index 00000000..68bd1494 --- /dev/null +++ b/n8n-n8n-1.109.2/.git-blame-ignore-revs 2 @@ -0,0 +1,18 @@ +# Commits of large-scale changes to exclude from `git blame` results + +# Set up linting and formatting (#2120) + +56c4c6991fb21ba4b7bdcd22c929f63cc1d1defe + +# refactor(editor): Apply Prettier (no-changelog) #4920 + +5ca2148c7ed06c90f999508928b7a51f9ac7a788 + +# refactor: Run lintfix (no-changelog) (#7537) + +62c096710fab2f7e886518abdbded34b55e93f62 + +# refactor: Move test files alongside tested files (#11504) + +7e58fc4fec468aca0b45d5bfe6150e1af632acbc +f32b13c6ed078be042a735bc8621f27e00dc3116 diff --git a/n8n-n8n-1.109.2/.gitattributes 2 b/n8n-n8n-1.109.2/.gitattributes 2 new file mode 100755 index 00000000..dfdb8b77 --- /dev/null +++ b/n8n-n8n-1.109.2/.gitattributes 2 @@ -0,0 +1 @@ +*.sh text eol=lf diff --git a/n8n-n8n-1.109.2/.gitignore 2 b/n8n-n8n-1.109.2/.gitignore 2 new file mode 100755 index 00000000..6d196f81 --- /dev/null +++ b/n8n-n8n-1.109.2/.gitignore 2 @@ -0,0 +1,42 @@ +node_modules +.DS_Store +.tmp +tmp +dist +coverage +npm-debug.log* +yarn.lock +google-generated-credentials.json +_START_PACKAGE +.env +.vscode/* +!.vscode/extensions.json +!.vscode/settings.default.json +.idea +nodelinter.config.json +**/package-lock.json +packages/**/.turbo +.turbo +*.tsbuildinfo +.stylelintcache +*.swp +CHANGELOG-*.md +*.mdx +build-storybook.log +*.junit.xml +junit.xml +test-results.json +*.0x +packages/testing/playwright/playwright-report +packages/testing/playwright/test-results +packages/testing/playwright/ms-playwright-cache +test-results/ +compiled_app_output +trivy_report* +compiled +packages/cli/src/modules/my-feature +.secrets +packages/testing/**/.cursor/rules/ +.venv +.ruff_cache +__pycache__ diff --git a/n8n-n8n-1.109.2/.npmignore 2 b/n8n-n8n-1.109.2/.npmignore 2 new file mode 100755 index 00000000..d811bf47 --- /dev/null +++ b/n8n-n8n-1.109.2/.npmignore 2 @@ -0,0 +1,28 @@ +dist/test +dist/**/*.{js.map} + +.DS_Store + +# local env files +.env.local +.env.*.local + +# Log files +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* + +.editorconfig +eslint.config.js +tsconfig.json + +.turbo +*.tsbuildinfo diff --git a/n8n-n8n-1.109.2/.npmrc 2 b/n8n-n8n-1.109.2/.npmrc 2 new file mode 100755 index 00000000..42d2964a --- /dev/null +++ b/n8n-n8n-1.109.2/.npmrc 2 @@ -0,0 +1,14 @@ +audit = false +fund = false +update-notifier = false +auto-install-peers = true +strict-peer-dependencies = false +prefer-workspace-packages = true +link-workspace-packages = deep +hoist = true +shamefully-hoist = true +hoist-workspace-packages = false +loglevel = warn +package-manager-strict=false +# https://github.com/pnpm/pnpm/issues/7024 +package-import-method=clone-or-copy diff --git a/n8n-n8n-1.109.2/.prettierignore 2 b/n8n-n8n-1.109.2/.prettierignore 2 new file mode 100755 index 00000000..61398c93 --- /dev/null +++ b/n8n-n8n-1.109.2/.prettierignore 2 @@ -0,0 +1,25 @@ +coverage +dist +package.json +pnpm-lock.yaml +packages/frontend/editor-ui/index.html +packages/nodes-base/nodes/**/test +packages/cli/templates/form-trigger.handlebars +packages/cli/templates/form-trigger-completion.handlebars +packages/cli/templates/form-trigger-409.handlebars +packages/cli/templates/form-trigger-404.handlebars +cypress/fixtures +CHANGELOG.md +.github/pull_request_template.md +# Ignored for now +**/*.md +# Handled by biome +**/*.ts +**/*.js +**/*.json +**/*.jsonc + +# Auto-generated +**/components.d.ts + +justfile diff --git a/n8n-n8n-1.109.2/.prettierrc 2.js b/n8n-n8n-1.109.2/.prettierrc 2.js new file mode 100755 index 00000000..ebf28d80 --- /dev/null +++ b/n8n-n8n-1.109.2/.prettierrc 2.js @@ -0,0 +1,51 @@ +module.exports = { + /** + * https://prettier.io/docs/en/options.html#semicolons + */ + semi: true, + + /** + * https://prettier.io/docs/en/options.html#trailing-commas + */ + trailingComma: 'all', + + /** + * https://prettier.io/docs/en/options.html#bracket-spacing + */ + bracketSpacing: true, + + /** + * https://prettier.io/docs/en/options.html#tabs + */ + useTabs: true, + + /** + * https://prettier.io/docs/en/options.html#tab-width + */ + tabWidth: 2, + + /** + * https://prettier.io/docs/en/options.html#arrow-function-parentheses + */ + arrowParens: 'always', + + /** + * https://prettier.io/docs/en/options.html#quotes + */ + singleQuote: true, + + /** + * https://prettier.io/docs/en/options.html#quote-props + */ + quoteProps: 'as-needed', + + /** + * https://prettier.io/docs/en/options.html#end-of-line + */ + endOfLine: 'lf', + + /** + * https://prettier.io/docs/en/options.html#print-width + */ + printWidth: 100, +}; diff --git a/n8n-n8n-1.109.2/CHANGELOG 2.md b/n8n-n8n-1.109.2/CHANGELOG 2.md new file mode 100755 index 00000000..28aab992 --- /dev/null +++ b/n8n-n8n-1.109.2/CHANGELOG 2.md @@ -0,0 +1,7436 @@ +## [1.109.2](https://github.com/n8n-io/n8n/compare/n8n@1.109.1...n8n@1.109.2) (2025-09-03) + + +### Bug Fixes + +* **Basic LLM Chain Node:** Remove fallback connection on lower versions ([#19053](https://github.com/n8n-io/n8n/issues/19053)) ([e59152e](https://github.com/n8n-io/n8n/commit/e59152ec35d6d604690520e9772c5cfceeb2a04c)) +* **core:** Fix OIDC configuration update path ([#19065](https://github.com/n8n-io/n8n/issues/19065)) ([c0a7bbb](https://github.com/n8n-io/n8n/commit/c0a7bbb5a3edfdb1fa7cd947d76550a401866af9)) + + + +## [1.109.1](https://github.com/n8n-io/n8n/compare/n8n@1.109.0...n8n@1.109.1) (2025-08-27) + + +### Bug Fixes + +* **core:** Fix waiting webhooks validation when n8n is behind proxy ([#18767](https://github.com/n8n-io/n8n/issues/18767)) ([741f68b](https://github.com/n8n-io/n8n/commit/741f68bb9f93d5699b471fc49fd7bf568099ecee)) + + + +# [1.109.0](https://github.com/n8n-io/n8n/compare/n8n@1.108.0...n8n@1.109.0) (2025-08-25) + + +### Bug Fixes + +* Also run DB tests in CI when any test inside CLI package have changes ([#18527](https://github.com/n8n-io/n8n/issues/18527)) ([3386047](https://github.com/n8n-io/n8n/commit/33860473213e35e9e4ca6725b05342cd3954f15c)) +* Change siderbar to use innerWidth instead of outerWidth ([#18727](https://github.com/n8n-io/n8n/issues/18727)) ([4206b4a](https://github.com/n8n-io/n8n/commit/4206b4ab50f77fac326e7826e23dc145a5294029)) +* **core:** Don't reveal whether files exists if they're not within allowed paths ([#18480](https://github.com/n8n-io/n8n/issues/18480)) ([970351b](https://github.com/n8n-io/n8n/commit/970351bf238f475128d712d9bb2115c3d5ec0e2f)) +* **core:** Dynamically import `@sentry/node-native` ([#18586](https://github.com/n8n-io/n8n/issues/18586)) ([0f463c7](https://github.com/n8n-io/n8n/commit/0f463c781d56df5f1e24b0b333885ac2143a0f7c)) +* **core:** Ensure error.message is a string before checking for specific messages ([#17417](https://github.com/n8n-io/n8n/issues/17417)) ([0d4c890](https://github.com/n8n-io/n8n/commit/0d4c89058d3927f2c8b601e691a38181d9fb1d06)) +* **core:** Fix getting webhook methods from path only when dynamic webhook path ([#17803](https://github.com/n8n-io/n8n/issues/17803)) ([a5c6e2f](https://github.com/n8n-io/n8n/commit/a5c6e2fecfd2ee64c28298a915bfc83ad4e35331)) +* **core:** Handle insights by workflow table for deleted workflows ([#18496](https://github.com/n8n-io/n8n/issues/18496)) ([741dd69](https://github.com/n8n-io/n8n/commit/741dd693a474d905e73a90214aa143d5ca26af7f)) +* **core:** Integer overflow in insights runtime calculation ([#18122](https://github.com/n8n-io/n8n/issues/18122)) ([c767831](https://github.com/n8n-io/n8n/commit/c7678311b3f6f69b80e6ff1d3dd5a8354ae16f6e)) +* **core:** Make first queue reconciliation immediate on startup ([#18490](https://github.com/n8n-io/n8n/issues/18490)) ([961fc53](https://github.com/n8n-io/n8n/commit/961fc538d7df06b0878dce43805df886377313b5)) +* **core:** Move `/module-settings` behind auth ([#18492](https://github.com/n8n-io/n8n/issues/18492)) ([df54c10](https://github.com/n8n-io/n8n/commit/df54c10172bb6143a0d0d5eaa66189b379aaca06)) +* **core:** Redact secrets from credential test error message ([#18386](https://github.com/n8n-io/n8n/issues/18386)) ([309048a](https://github.com/n8n-io/n8n/commit/309048ae3cfb344f73bb62355357460503210da9)) +* **core:** Restore community node types controller ([#18665](https://github.com/n8n-io/n8n/issues/18665)) ([110439c](https://github.com/n8n-io/n8n/commit/110439c010b9ad6018ee2e3d806f95a4dac83e22)) +* Do not wait for community nodes to load ([#18628](https://github.com/n8n-io/n8n/issues/18628)) ([f7a6631](https://github.com/n8n-io/n8n/commit/f7a663172b29873904455486695ba5feb9c9f6dd)) +* **editor:** Add fallback color for NodeItem Icons ([#18607](https://github.com/n8n-io/n8n/issues/18607)) ([c8dc7d9](https://github.com/n8n-io/n8n/commit/c8dc7d9ab6a8a25793f85c828c82e00a69268ccd)) +* **editor:** Change the underlying data store db column types to support decimal numbers ([#18549](https://github.com/n8n-io/n8n/issues/18549)) ([25d6636](https://github.com/n8n-io/n8n/commit/25d66367110db827ea5f511c34d9b2cabffb24d0)) +* **editor:** Dont check for whats new if in demo mode ([#18532](https://github.com/n8n-io/n8n/issues/18532)) ([9881b9e](https://github.com/n8n-io/n8n/commit/9881b9e4358be73210cfda52c024d6ffd4318178)) +* **editor:** Fix importing curl commands with comma ([#18409](https://github.com/n8n-io/n8n/issues/18409)) ([d3431c0](https://github.com/n8n-io/n8n/commit/d3431c0ae5a3e64a3511c190826cafc3640ddd6c)) +* **editor:** Hide sso auth protocol selection if no license available ([#18655](https://github.com/n8n-io/n8n/issues/18655)) ([8b4e8f3](https://github.com/n8n-io/n8n/commit/8b4e8f347f659b14fffc7d9286acee23d9b94ef2)) +* **editor:** Refactor for-of loops to replace forEach on Set.values() for node 20 compatibility ([#18529](https://github.com/n8n-io/n8n/issues/18529)) ([06b586a](https://github.com/n8n-io/n8n/commit/06b586af44f4139d45e79bc020ed0ebdab275988)) +* **editor:** Show test URL when trigger is listening because of a connected node ([#18403](https://github.com/n8n-io/n8n/issues/18403)) ([010b6dc](https://github.com/n8n-io/n8n/commit/010b6dc7a5c1fa536f68d3a72d41b9e39338a273)) +* **editor:** Update misleading toaster success message when creating a personal workflow / credential ([#18541](https://github.com/n8n-io/n8n/issues/18541)) ([b6681bb](https://github.com/n8n-io/n8n/commit/b6681bb92cd0ee75f2ea03244a2dfdb549354657)) +* **HTTP Request Node:** Handle response errors correctly when continueOnFail is set ([#18207](https://github.com/n8n-io/n8n/issues/18207)) ([5c53c22](https://github.com/n8n-io/n8n/commit/5c53c22d0a3f3a149f006c3ca1efb05da77ca6a8)) +* **Microsoft SQL Node:** Correctly resolve expressions with dollar signs ([#18411](https://github.com/n8n-io/n8n/issues/18411)) ([f49f2cb](https://github.com/n8n-io/n8n/commit/f49f2cb59eab5092df0b6101cd227403b12f5726)) +* **Slack Node:** Refine label name for reply broadcast setting ([#15658](https://github.com/n8n-io/n8n/issues/15658)) ([5339350](https://github.com/n8n-io/n8n/commit/53393508ea5f3afa2c4be2d6877e6e9842ac71dc)) + + +### Features + +* **core:** Enable modules to append to workflow context ([#18551](https://github.com/n8n-io/n8n/issues/18551)) ([0488ea3](https://github.com/n8n-io/n8n/commit/0488ea3e8d42d228f3b663f1cb37ca7502494bc9)) +* **editor:** Add Alt+Meta+O keyboard shortcut for the About modal ([#18530](https://github.com/n8n-io/n8n/issues/18530)) ([94526b9](https://github.com/n8n-io/n8n/commit/94526b997571b4774ed1be242fa59c021e8b0410)) +* **editor:** Add mechanism for showing hidden nodes if required modules are enabled ([#18585](https://github.com/n8n-io/n8n/issues/18585)) ([da88075](https://github.com/n8n-io/n8n/commit/da8807562310224379388398824b071a36584c59)) +* Evaluation framework for AI Workflow Builder ([#18016](https://github.com/n8n-io/n8n/issues/18016)) ([fb3a2ae](https://github.com/n8n-io/n8n/commit/fb3a2ae2167b4f0077026931a601478ee74e09c0)) +* **OpenAI Node:** Add reasoning effort for GPT-5 ([#18644](https://github.com/n8n-io/n8n/issues/18644)) ([ca8629e](https://github.com/n8n-io/n8n/commit/ca8629ef30e75637d04fa5a57959a7a546a9fec1)) + + +### Performance Improvements + +* **core:** Optimize workflow getNodeConnectionIndexes ([#18542](https://github.com/n8n-io/n8n/issues/18542)) ([554327e](https://github.com/n8n-io/n8n/commit/554327ee78e488cd773bd7f547c696ffd3d10985)) +* **OpenAI Node:** Use streaming for file operations ([#18666](https://github.com/n8n-io/n8n/issues/18666)) ([1f1730c](https://github.com/n8n-io/n8n/commit/1f1730c27d491a444507f9de1db9b6988dfcf455)) + + + +# [1.108.0](https://github.com/n8n-io/n8n/compare/n8n@1.107.0...n8n@1.108.0) (2025-08-18) + + +### Bug Fixes + +* Add missing type check, updated turbo config ([#18341](https://github.com/n8n-io/n8n/issues/18341)) ([8259b5f](https://github.com/n8n-io/n8n/commit/8259b5f5c68847ca8254f253533b8197ffaea6c2)) +* **Airtable Node:** Create record: skip type validation when typecast is enabled ([#18393](https://github.com/n8n-io/n8n/issues/18393)) ([dcd060c](https://github.com/n8n-io/n8n/commit/dcd060ce33bd9be48ceba8d01b74e7b36073953b)) +* **core:** Account for readonly properties when replacing circular references ([#18408](https://github.com/n8n-io/n8n/issues/18408)) ([3848673](https://github.com/n8n-io/n8n/commit/3848673921fd61ddc61762503f1589eef1e2689d)) +* **core:** Check all node outputs when using "Always Output Data" before adding an empty object ([#17602](https://github.com/n8n-io/n8n/issues/17602)) ([f1a87af](https://github.com/n8n-io/n8n/commit/f1a87af0598d33a93f1be9c13ee37c5f51c286c1)) +* **core:** Fix error message parsing for disallowed modules ([#18216](https://github.com/n8n-io/n8n/issues/18216)) ([04738d4](https://github.com/n8n-io/n8n/commit/04738d442d4b3025e78c9e9f9082f715b2269713)) +* **core:** Normalize quotes in strings in env vars ([#18219](https://github.com/n8n-io/n8n/issues/18219)) ([71f5151](https://github.com/n8n-io/n8n/commit/71f51519dec23abf92711d409d6ab3920961624c)) +* **core:** Populate MCP endpoints in frontend settings ([#17939](https://github.com/n8n-io/n8n/issues/17939)) ([14787fd](https://github.com/n8n-io/n8n/commit/14787fd5a401c6dbc64bc5b3aca122e9ee36cfdc)) +* **core:** Support inserting dates to data store via the insert endpoint ([#18404](https://github.com/n8n-io/n8n/issues/18404)) ([dc86984](https://github.com/n8n-io/n8n/commit/dc86984ae05e05be65a4b99e2223ffefa77c8442)) +* **core:** Support MCP server when offloading is enabled ([#18214](https://github.com/n8n-io/n8n/issues/18214)) ([26aed72](https://github.com/n8n-io/n8n/commit/26aed72c6e55226ed27c4b08bfc4fa20ea15000f)) +* **core:** Update moment-timezone to resolve Mexico DST issue ([#18431](https://github.com/n8n-io/n8n/issues/18431)) ([cb7dd2e](https://github.com/n8n-io/n8n/commit/cb7dd2e8ba21963e6984ab3857812315c0942a4e)) +* **editor:** Fix 'Shared with me' page tabs and header ([#18199](https://github.com/n8n-io/n8n/issues/18199)) ([eecfa68](https://github.com/n8n-io/n8n/commit/eecfa68f504c93872c9c68fdbe2a94c21d5b9363)) +* **editor:** Fix node graph generation for evaluation node in set metrics mode ([#18344](https://github.com/n8n-io/n8n/issues/18344)) ([8442382](https://github.com/n8n-io/n8n/commit/84423824717f38e904f593cdf731fdc88e3f87f2)) +* **editor:** Fix schema view output index filtering ([#18383](https://github.com/n8n-io/n8n/issues/18383)) ([675bb50](https://github.com/n8n-io/n8n/commit/675bb50122ed2fbc9087f8a0a37226fa75b67c68)) +* **editor:** Fix TS type export for ListDataStoreContentFilter ([#18282](https://github.com/n8n-io/n8n/issues/18282)) ([f1080db](https://github.com/n8n-io/n8n/commit/f1080dbac0591721061824bd4c8b1110b846b8e6)) +* **editor:** Restore background color of NDV backdrop ([#18327](https://github.com/n8n-io/n8n/issues/18327)) ([5917dc8](https://github.com/n8n-io/n8n/commit/5917dc88cbfba54157a29240cc050b6a6806ecb9)) +* **editor:** Revert changes from PRs [#16059](https://github.com/n8n-io/n8n/issues/16059), [#17959](https://github.com/n8n-io/n8n/issues/17959), [#17759](https://github.com/n8n-io/n8n/issues/17759), and [#17585](https://github.com/n8n-io/n8n/issues/17585) ([#18382](https://github.com/n8n-io/n8n/issues/18382)) ([62f4361](https://github.com/n8n-io/n8n/commit/62f4361f4653c453899c2ccc2ff7367418e38530)) +* **editor:** Show custom project icons on create sidebar dropdown ([#18204](https://github.com/n8n-io/n8n/issues/18204)) ([d2cc939](https://github.com/n8n-io/n8n/commit/d2cc9397256137798168913f5823edd259128845)) +* **editor:** Source control workflow diff release ([#17974](https://github.com/n8n-io/n8n/issues/17974)) ([abf7b11](https://github.com/n8n-io/n8n/commit/abf7b11e09ce524d5ae620e3cd84d57f29e9c5ac)) +* **editor:** Update SourceControlPullModal to look and feel the same as SourceControlPushModal ([#18129](https://github.com/n8n-io/n8n/issues/18129)) ([d06581e](https://github.com/n8n-io/n8n/commit/d06581ef3febbbeec39d598ae51887dca25c70a6)) +* **editor:** Use native behaviour on arrow left and right in nodes panel ([#18401](https://github.com/n8n-io/n8n/issues/18401)) ([08d8249](https://github.com/n8n-io/n8n/commit/08d82491c8cc04a01be7935248a614d8768c1694)) +* **Google Gemini Node:** Use custom host from credential ([#18405](https://github.com/n8n-io/n8n/issues/18405)) ([041672e](https://github.com/n8n-io/n8n/commit/041672eb6ce63a9593349ff01f3e14a6446ee2b9)) +* **Grist Node:** Test for integer precision loss ([#17136](https://github.com/n8n-io/n8n/issues/17136)) ([735e064](https://github.com/n8n-io/n8n/commit/735e0647490f411a4031eec71f1af0581d129ef6)) +* **Local File Trigger Node:** Add chokidar dependency back ([#18260](https://github.com/n8n-io/n8n/issues/18260)) ([9043869](https://github.com/n8n-io/n8n/commit/9043869b101f0339368112803b168336f2a1f8b2)) +* **n8n Form Trigger Node:** Make order of form field name inputs consistent ([#18410](https://github.com/n8n-io/n8n/issues/18410)) ([2203d1e](https://github.com/n8n-io/n8n/commit/2203d1e77f321b0c1bf9bd4d8915865331f5a66c)) +* Update dependencies to close cves ([#18215](https://github.com/n8n-io/n8n/issues/18215)) ([d7d44f9](https://github.com/n8n-io/n8n/commit/d7d44f9e77592e906bfb9925c07af1a2ee3cfd77)) +* **Wait Node:** Add validation for wait amount and unit ([#18239](https://github.com/n8n-io/n8n/issues/18239)) ([9515cbd](https://github.com/n8n-io/n8n/commit/9515cbd60e9e8f5bb6887cfbfad74e09a5fa9f0e)) + + +### Features + +* Add n8n-node CLI with commands to scaffold and develop nodes ([#18090](https://github.com/n8n-io/n8n/issues/18090)) ([c26104b](https://github.com/n8n-io/n8n/commit/c26104b3ba4f4fbd191e89b5ecd5903fdb7636fe)) +* Add performance plan presets for testcontainers ([#18231](https://github.com/n8n-io/n8n/issues/18231)) ([726f0ff](https://github.com/n8n-io/n8n/commit/726f0ff37aa9f5b615510884da3ed9f9834eae8a)) +* Checkboxes and Radio Buttons field types ([#17934](https://github.com/n8n-io/n8n/issues/17934)) ([fdab0ab](https://github.com/n8n-io/n8n/commit/fdab0ab116afa438db1338aaddd3dfa6ef82b2bc)) +* **editor:** Improve feedback buttons behavior ([#18247](https://github.com/n8n-io/n8n/issues/18247)) ([83c3a98](https://github.com/n8n-io/n8n/commit/83c3a98cf4875cc7b105063f972cf7d08b0561f4)) +* **editor:** Make popped out log view window maximizable ([#18223](https://github.com/n8n-io/n8n/issues/18223)) ([aeef79d](https://github.com/n8n-io/n8n/commit/aeef79df5366580be77dd57bb91636a4df12ec4f)) +* **MCP Client Tool Node:** Add Timeout config for the MCP Client tool ([#15886](https://github.com/n8n-io/n8n/issues/15886)) ([f575427](https://github.com/n8n-io/n8n/commit/f575427d4dfb56370badc2f2efc561d917ce97c4)) +* **Todoist Node:** Add more resources and operations ([#17925](https://github.com/n8n-io/n8n/issues/17925)) ([409085e](https://github.com/n8n-io/n8n/commit/409085e8fe1d15386eda540f51d0cbb5eac30cdc)) + + +### Performance Improvements + +* **editor:** Fix log view related slowdown of manual execution with large data ([#18256](https://github.com/n8n-io/n8n/issues/18256)) ([56c278c](https://github.com/n8n-io/n8n/commit/56c278cda06dcc70eea450bf39d84bfa54aa3278)) + + + +# [1.107.0](https://github.com/n8n-io/n8n/compare/n8n@1.106.0...n8n@1.107.0) (2025-08-11) + + +### Bug Fixes + +* **API:** Add shared field to workflows list rest API handler ([#17804](https://github.com/n8n-io/n8n/issues/17804)) ([31af6d1](https://github.com/n8n-io/n8n/commit/31af6d11bb9c3f99449ef0deae4d4401e0efda8d)) +* **Beeminder Node:** Remove unnecessary form data conversion for API token auth to work ([#18133](https://github.com/n8n-io/n8n/issues/18133)) ([716577e](https://github.com/n8n-io/n8n/commit/716577e2820deb35b7057eb9414c9fbe9b6b4fde)) +* **Chat Trigger Node:** Prevent XSS vulnerabilities and improve parameter validation ([#18148](https://github.com/n8n-io/n8n/issues/18148)) ([d4ef191](https://github.com/n8n-io/n8n/commit/d4ef191be0b39b65efa68559a3b8d5dad2e102b2)) +* **core:** Consider pinned data as valid paths for single node execution ([#17959](https://github.com/n8n-io/n8n/issues/17959)) ([32f4794](https://github.com/n8n-io/n8n/commit/32f47948d6cb6ba33cd253aa855a7bcf79f28713)) +* **core:** Fix `null` handling in Python sandbox ([#18189](https://github.com/n8n-io/n8n/issues/18189)) ([b5f47ec](https://github.com/n8n-io/n8n/commit/b5f47ec110dc70cb1761e60d6bfae860ddedf2bf)) +* **core:** Fix disallowed module error in task runner ([#18190](https://github.com/n8n-io/n8n/issues/18190)) ([09caa05](https://github.com/n8n-io/n8n/commit/09caa0572623ff4aead2aeb708978528d9c110ed)) +* **core:** Fix metric default value handling and add AI model connection validation for setMetric operation in Evaluation ([#18088](https://github.com/n8n-io/n8n/issues/18088)) ([03c75c3](https://github.com/n8n-io/n8n/commit/03c75c365bb7d384924ccaf1114fc267c7569327)) +* **core:** Handle non-existing files when checking if it is a symlink ([#18010](https://github.com/n8n-io/n8n/issues/18010)) ([49f3115](https://github.com/n8n-io/n8n/commit/49f3115429fd465f5292ef06785c00a210ad029e)) +* **core:** Handle null workflow settings in toSaveSettings ([#17972](https://github.com/n8n-io/n8n/issues/17972)) ([642e68e](https://github.com/n8n-io/n8n/commit/642e68e345c023d6232b02cb83fb84e0342faca0)) +* **core:** Handle Redis cache prefix on cluster mode ([#17957](https://github.com/n8n-io/n8n/issues/17957)) ([f4a0413](https://github.com/n8n-io/n8n/commit/f4a04132d9550af55c364fa9d7df9c57b838dcb7)) +* **core:** Mark invalid enqueued executions as crashed during startup for legacy SQLite driver ([#17629](https://github.com/n8n-io/n8n/issues/17629)) ([318a91a](https://github.com/n8n-io/n8n/commit/318a91a3e9cd31d2790ae9a90b0267e4549e5737)) +* **core:** Prevent re-entry during workflow activation ([#17965](https://github.com/n8n-io/n8n/issues/17965)) ([e8dad4e](https://github.com/n8n-io/n8n/commit/e8dad4e030dc91207d72385c202241260e33fe7e)) +* **core:** Protect against duplicate cron registration ([#18005](https://github.com/n8n-io/n8n/issues/18005)) ([948ebe6](https://github.com/n8n-io/n8n/commit/948ebe67023542353d325141ec1d88612413041f)) +* **core:** Remove temporary uploaded files from webhook calls ([#18128](https://github.com/n8n-io/n8n/issues/18128)) ([c610c3a](https://github.com/n8n-io/n8n/commit/c610c3af3eafd05e2b9e78c4e66dba588c4852a1)) +* **editor:** Add a hint for showing archived workflows when there are no active ones ([#18120](https://github.com/n8n-io/n8n/issues/18120)) ([7e4c5af](https://github.com/n8n-io/n8n/commit/7e4c5af38397031e3850e277562dbe61020c91aa)) +* **editor:** Connection port mapped incorrectly when changed dynamically ([#17958](https://github.com/n8n-io/n8n/issues/17958)) ([566789c](https://github.com/n8n-io/n8n/commit/566789caee49d157b7154adbe60dadb0ea858e06)) +* **editor:** Correct ai template url ([#17908](https://github.com/n8n-io/n8n/issues/17908)) ([bdc3a91](https://github.com/n8n-io/n8n/commit/bdc3a9172df09a2b218fd447cd9c3eab6bcfcec6)) +* **editor:** Enhance changes dropdown in WorkflowDiffModal ([#18033](https://github.com/n8n-io/n8n/issues/18033)) ([bc76643](https://github.com/n8n-io/n8n/commit/bc7664397607972dae72d97b2cacf592d3c93f83)) +* **editor:** Enhance SourceControlPullModal with improved item structure and styling ([#18049](https://github.com/n8n-io/n8n/issues/18049)) ([d6bc4ab](https://github.com/n8n-io/n8n/commit/d6bc4abee21c39efcd13f3f1f9e5c98b1094a48d)) +* **editor:** Fix an issue with overlapping elements in the Assignment component ([#18041](https://github.com/n8n-io/n8n/issues/18041)) ([c7108f4](https://github.com/n8n-io/n8n/commit/c7108f4a0631e3ec8a971da81e2fc8ed7727cfe8)) +* **editor:** Fix loading of error workflows in settings ([#18126](https://github.com/n8n-io/n8n/issues/18126)) ([3d846f6](https://github.com/n8n-io/n8n/commit/3d846f62d916c1476940f73241b29beff1b97f47)) +* **editor:** Focus editable text input when clicking anywhere on the element ([#17780](https://github.com/n8n-io/n8n/issues/17780)) ([7b92e33](https://github.com/n8n-io/n8n/commit/7b92e33b3b2530775004ce36ea9dacac1175e533)) +* **editor:** Hide Evaluations setup wizard if protected instance ([#18055](https://github.com/n8n-io/n8n/issues/18055)) ([99c2f37](https://github.com/n8n-io/n8n/commit/99c2f3715eb9eef1677c55d2ece4418aa3be435f)) +* **editor:** Improve workflow diff components ([#18018](https://github.com/n8n-io/n8n/issues/18018)) ([95ed3c5](https://github.com/n8n-io/n8n/commit/95ed3c5c929e7f9632edb92f67370901f162a3d9)) +* **editor:** Improve WorkflowDiffModal UI ([#17862](https://github.com/n8n-io/n8n/issues/17862)) ([eca95f3](https://github.com/n8n-io/n8n/commit/eca95f3432148e710d87e233ca9b4d5feafddb5c)) +* **editor:** Migrate from [@import](https://github.com/import) to [@use](https://github.com/use) for SCSS files to address deprecation warnings ([#17858](https://github.com/n8n-io/n8n/issues/17858)) ([b7887bf](https://github.com/n8n-io/n8n/commit/b7887bf899f7e11afade26a911f0b02eb9eff8e5)) +* **editor:** Update node status icons precedence (executing -> highest) ([#18003](https://github.com/n8n-io/n8n/issues/18003)) ([dd04924](https://github.com/n8n-io/n8n/commit/dd049249be17d556c40105a22ac4e68bd7f526e1)) +* **editor:** Using a for-of loop on Map entries (forEach supported from node v22) ([#18064](https://github.com/n8n-io/n8n/issues/18064)) ([743c120](https://github.com/n8n-io/n8n/commit/743c1208809d9bcfd038764807e4b7df8012a36f)) +* Empty onclick breaks range parser in HTML editor ([#18032](https://github.com/n8n-io/n8n/issues/18032)) ([b6c7810](https://github.com/n8n-io/n8n/commit/b6c781084463faf8d139dbaed649cff75a4170a3)) +* Extend deduplication check to all webhook-based triggers and chat trigger ([#18044](https://github.com/n8n-io/n8n/issues/18044)) ([847a5d8](https://github.com/n8n-io/n8n/commit/847a5d822f77a3362f382c17070d49ccc6e3d999)) +* Fix hot reloading of custom nodes ([#18094](https://github.com/n8n-io/n8n/issues/18094)) ([a5fa808](https://github.com/n8n-io/n8n/commit/a5fa808d4a872b1fbaedf5be62223a4760e544a8)) +* **GraphQL Node:** Refresh OAuth2 token when it expires ([#17891](https://github.com/n8n-io/n8n/issues/17891)) ([381c146](https://github.com/n8n-io/n8n/commit/381c146dd46afe93105bdd859012fc0c19e3d156)) +* **HubSpot Node:** Add missing fields for Contact - Upsert ([#18035](https://github.com/n8n-io/n8n/issues/18035)) ([678f468](https://github.com/n8n-io/n8n/commit/678f468f6881691d5c7bdc49d6206b429b442f2f)) +* **Hugging Face Inference Model Node, Embeddings Hugging Face Inference Node:** Fix credential validation for HF nodes and add provider for ([#18047](https://github.com/n8n-io/n8n/issues/18047)) ([a1682e8](https://github.com/n8n-io/n8n/commit/a1682e8fe436c52a2a95cceb6cde6316ae586764)) +* **Jira Software Node:** Get All Issues operation with Return All hangs ([#17825](https://github.com/n8n-io/n8n/issues/17825)) ([2792b6c](https://github.com/n8n-io/n8n/commit/2792b6cb0a2c3a2dcab207a91ca1dd6403d10efe)) +* **Mandrill Node:** Fix a typo in subaccount in options ([#18103](https://github.com/n8n-io/n8n/issues/18103)) ([833bcdd](https://github.com/n8n-io/n8n/commit/833bcdde00fb9a03536b6af0469af0e2c5951f5c)) +* Properly serialize metadata objects in Chat UI ([#17963](https://github.com/n8n-io/n8n/issues/17963)) ([c4c46b8](https://github.com/n8n-io/n8n/commit/c4c46b8ff93abab45426682f8b371997fb42d52d)) +* **Reranker Cohere Node:** Add 'Top N' parameter to control document return count ([#17921](https://github.com/n8n-io/n8n/issues/17921)) ([523a55d](https://github.com/n8n-io/n8n/commit/523a55d5ee9421cab285dbea88fd5ecfea121ed4)) + + +### Features + +* Add token to sendAndWait operations links to walidate in webhook ([#17566](https://github.com/n8n-io/n8n/issues/17566)) ([9cb5754](https://github.com/n8n-io/n8n/commit/9cb5754f3383a16ce4dc2bb9133cede856172baa)) +* **core:** Add Support for Additional Body Properties in OAuth2 API Client Credentials Flow ([#16573](https://github.com/n8n-io/n8n/issues/16573)) ([22ca768](https://github.com/n8n-io/n8n/commit/22ca768c13406a86899e36a36dcc18d63f492723)) +* **core:** Unlock queue metrics for multi-main ([#17977](https://github.com/n8n-io/n8n/issues/17977)) ([3b701b1](https://github.com/n8n-io/n8n/commit/3b701b15d68c7ae038855b4b261cef15aa44a316)) +* **Discord Node:** Add support for OAuth custom scopes ([#16708](https://github.com/n8n-io/n8n/issues/16708)) ([61f2838](https://github.com/n8n-io/n8n/commit/61f2838a9060aa85458a903bab2549d9a768ee60)) +* **editor:** Add pre-built agents experiment ([#18124](https://github.com/n8n-io/n8n/issues/18124)) ([5a69d2a](https://github.com/n8n-io/n8n/commit/5a69d2a2f35cc86685b6eb42e870a2e3ed85c248)) +* **editor:** Add Production checklist for active workflows ([#17756](https://github.com/n8n-io/n8n/issues/17756)) ([6046d24](https://github.com/n8n-io/n8n/commit/6046d24c741570d1d092230808a392bce0103d33)) +* **editor:** Expand telemetry for "User added node to workflow canvas" event ([#18150](https://github.com/n8n-io/n8n/issues/18150)) ([9b103af](https://github.com/n8n-io/n8n/commit/9b103af9355cf957abddd789c1554595be97c5d8)) +* **editor:** Stop auto-renaming legacy default node names ([#18012](https://github.com/n8n-io/n8n/issues/18012)) ([5fc356f](https://github.com/n8n-io/n8n/commit/5fc356f6e7ed36ba8aa1da2e2d04cb3fe1701134)) +* **Email Trigger (IMAP) Node:** Option to disable last message id tracking ([#17964](https://github.com/n8n-io/n8n/issues/17964)) ([25379fe](https://github.com/n8n-io/n8n/commit/25379fe5221ecf1772d093c8c76bdac680eb6e64)) +* **Ollama Credentials:** Add optional API key support to Ollama credentials (Openwebui proxy) ([#17857](https://github.com/n8n-io/n8n/issues/17857)) ([acfb79b](https://github.com/n8n-io/n8n/commit/acfb79bd970c5a84f38564cc069b32d87e2a4cd9)) + + +### Performance Improvements + +* **core:** Enable Sentry tracing ([#18192](https://github.com/n8n-io/n8n/issues/18192)) ([80e9e6f](https://github.com/n8n-io/n8n/commit/80e9e6fc330cf8f6c6e22aeff964733dd3bff183)) + + + +# [1.106.0](https://github.com/n8n-io/n8n/compare/n8n@1.105.0...n8n@1.106.0) (2025-08-04) + + +### Bug Fixes + +* **core:** Assign `execute` method to declarative nodes even if they have `methods` property ([#17796](https://github.com/n8n-io/n8n/issues/17796)) ([3f1016f](https://github.com/n8n-io/n8n/commit/3f1016f1adc90ce2e7f6905ab247098877f8d258)) +* **core:** Check that src folder exists an fallback to dist when loading modules ([#17754](https://github.com/n8n-io/n8n/issues/17754)) ([6c0be29](https://github.com/n8n-io/n8n/commit/6c0be292b16ab08c92deef037a2659a3d27b8e01)) +* **core:** Handle symlinks in blocked paths ([#17735](https://github.com/n8n-io/n8n/issues/17735)) ([c2c3e08](https://github.com/n8n-io/n8n/commit/c2c3e08cdf33570d9051e659812cbfbdd3c077fd)) +* **core:** Replace misleading "No path back to node" error with helpful execution message ([#17759](https://github.com/n8n-io/n8n/issues/17759)) ([164800f](https://github.com/n8n-io/n8n/commit/164800f6a40b1f8c36592c5367c48c3f5ef1a451)) +* **editor:** Account for subpath when serving `config.js` ([#17832](https://github.com/n8n-io/n8n/issues/17832)) ([b745cad](https://github.com/n8n-io/n8n/commit/b745cad72c6fcad23894150bf7edad0b568787b7)) +* **editor:** Change the checkbox logic for log streaming event selection ([#17653](https://github.com/n8n-io/n8n/issues/17653)) ([43f2675](https://github.com/n8n-io/n8n/commit/43f267535d106db4c2a9d9caddb414329129b140)) +* **editor:** Fix canvas moving check ([#17856](https://github.com/n8n-io/n8n/issues/17856)) ([ddc4c0b](https://github.com/n8n-io/n8n/commit/ddc4c0b7d99834db62ba935cda4c29cfc5197934)) +* **editor:** Fix invisible node creator icons ([#17870](https://github.com/n8n-io/n8n/issues/17870)) ([a83b76c](https://github.com/n8n-io/n8n/commit/a83b76cc23f59a78d768473339e40a6c907a88eb)) +* **editor:** Store last entered cURL command for each HTTP node ([#17834](https://github.com/n8n-io/n8n/issues/17834)) ([e8e7b23](https://github.com/n8n-io/n8n/commit/e8e7b23d47ca3fa7fb40e951763b7ad871110fc7)) +* Fix issue with icon themes not loading for preview nodes ([#17869](https://github.com/n8n-io/n8n/issues/17869)) ([6d1f2cb](https://github.com/n8n-io/n8n/commit/6d1f2cb67e416a14dc839308950dac4d1e51733c)) +* Fix issue with some community nodes not displaying correctly ([#17866](https://github.com/n8n-io/n8n/issues/17866)) ([f150343](https://github.com/n8n-io/n8n/commit/f150343141d53449f5a41bedc85ca9bd52cf1b1e)) +* **Gmail Trigger Node:** Filter sent emails from trigger results ([#17691](https://github.com/n8n-io/n8n/issues/17691)) ([4bab296](https://github.com/n8n-io/n8n/commit/4bab2960750bbf91f27171b53e8a206dc247e7fa)) +* **Google Gemini Node:** Don't pass hardcoded value for durationSeconds when generating a video ([#17793](https://github.com/n8n-io/n8n/issues/17793)) ([460e3b1](https://github.com/n8n-io/n8n/commit/460e3b1dfdb64bf4501dcf9ff1a480da34c64b6a)) +* **Google Sheets Node:** Make it possible to set cell values empty on updates ([#17224](https://github.com/n8n-io/n8n/issues/17224)) ([d924d82](https://github.com/n8n-io/n8n/commit/d924d82ee2862f398f66eb624815694893527d48)) +* Hide settings hint from log view ([#17813](https://github.com/n8n-io/n8n/issues/17813)) ([a46fa60](https://github.com/n8n-io/n8n/commit/a46fa6072e4d5bd02611625c60fe6fff7d31c731)) +* **Microsoft Teams Trigger Node:** Forbidden when trying to listen for channel messages ([#17777](https://github.com/n8n-io/n8n/issues/17777)) ([bc97584](https://github.com/n8n-io/n8n/commit/bc97584c0c6e58878dd0e9708062813c099687a2)) +* **Stop and Error Node:** Show error message when error type is an object ([#17898](https://github.com/n8n-io/n8n/issues/17898)) ([aced4bf](https://github.com/n8n-io/n8n/commit/aced4bf86f343f768ddb81485c24e69d5cf12530)) +* **Structured Output Parser Node:** Handle passed objects that do not match schema ([#17774](https://github.com/n8n-io/n8n/issues/17774)) ([1fb78cb](https://github.com/n8n-io/n8n/commit/1fb78cb0eabfaedad16568e21254c42dae6cebee)) + + +### Features + +* Abort AI builder requests on chat stop ([#17854](https://github.com/n8n-io/n8n/issues/17854)) ([ce98f7c](https://github.com/n8n-io/n8n/commit/ce98f7c175d1875e84bcfa0681bda6035e386dc6)) +* Add @n8n/node-cli package with an empty create command ([#17620](https://github.com/n8n-io/n8n/issues/17620)) ([79c6b60](https://github.com/n8n-io/n8n/commit/79c6b60fcb5ea9a3e22a8aa0fa516f270239df69)) +* **AWS Bedrock Chat Model Node:** Add inference profile support ([#17807](https://github.com/n8n-io/n8n/issues/17807)) ([80513ae](https://github.com/n8n-io/n8n/commit/80513ae66b95b768b30b8e3e3502f45867128db4)) +* **Beeminder Node:** Update Beeminder node to include all resources and operations ([#17713](https://github.com/n8n-io/n8n/issues/17713)) ([b491ed9](https://github.com/n8n-io/n8n/commit/b491ed99cea87ea0f3e5ea90baf85c388fa65cb4)) +* **ClickUp Node:** Add subtasks and markdown support to the get task operation ([#16811](https://github.com/n8n-io/n8n/issues/16811)) ([a5184e4](https://github.com/n8n-io/n8n/commit/a5184e4895d47f9b079ff7948cdd158a06d34aba)) +* **core:** Use hostname in host ID for Docker ([#16544](https://github.com/n8n-io/n8n/issues/16544)) ([308a6f6](https://github.com/n8n-io/n8n/commit/308a6f65dde20765bb27e21fceac4a5ca887bdc0)) +* **editor:** Add front-end for Data Store feature ([#17590](https://github.com/n8n-io/n8n/issues/17590)) ([b89c254](https://github.com/n8n-io/n8n/commit/b89c25439485576cbd7f1f3eabe5af825aa47311)) +* Env to disable webhook response iframe sandboxing ([#17851](https://github.com/n8n-io/n8n/issues/17851)) ([1ed8239](https://github.com/n8n-io/n8n/commit/1ed8239625eb85af4138b5431bc77038fda2e513)) +* **FTP Node:** Add support for concurrent reads when using SFTP ([#17896](https://github.com/n8n-io/n8n/issues/17896)) ([e437dac](https://github.com/n8n-io/n8n/commit/e437dace7069744c26eb1cce368f07d31f363ab5)) +* **Google BigQuery Node:** Add parameterized query support ([#14302](https://github.com/n8n-io/n8n/issues/14302)) ([096e535](https://github.com/n8n-io/n8n/commit/096e535f1ededcf6d21b42c10fee68d142a7da7c)) +* **MongoDB Node:** Add search index CRUD API to MongoDB CRUD Node ([#16490](https://github.com/n8n-io/n8n/issues/16490)) ([1554e76](https://github.com/n8n-io/n8n/commit/1554e76500470613ddb310424f693c07fe0887cd)) +* **n8n Form Trigger Node:** Add CSS variable to customize input background ([#15460](https://github.com/n8n-io/n8n/issues/15460)) ([22f505d](https://github.com/n8n-io/n8n/commit/22f505de691b926f9e56122bbd07c63128e5703e)) +* **Slack Trigger Node:** Add support for signature verification ([#17838](https://github.com/n8n-io/n8n/issues/17838)) ([1330581](https://github.com/n8n-io/n8n/commit/133058183e90570f8272075a10d9257d05728085)) +* Table in confirm modal to see all workflows using nodes before updating / uninstalling ([#17488](https://github.com/n8n-io/n8n/issues/17488)) ([76230d2](https://github.com/n8n-io/n8n/commit/76230d2640f04da8a2a3c78dbdf5003b0ebd1771)) +* **Vercel AI Gateway Node:** Add Vercel AI Gateway model Node ([#17524](https://github.com/n8n-io/n8n/issues/17524)) ([e97cd8a](https://github.com/n8n-io/n8n/commit/e97cd8afa18bbf67dc296c79cd1057e5bab083ab)) +* **Webhook Node:** Add notices about using the 'Content-Type' header ([#17739](https://github.com/n8n-io/n8n/issues/17739)) ([1c5a27d](https://github.com/n8n-io/n8n/commit/1c5a27d3ee8216b6cb5e1894d38881b2de14c654)) +* **Wordpress Node:** Add date fields ([#17755](https://github.com/n8n-io/n8n/issues/17755)) ([724b5a5](https://github.com/n8n-io/n8n/commit/724b5a51f2259de29dac3be0b51e9d80fd5244de)) + + +### Performance Improvements + +* **core:** Detect event loop blocking ([#17805](https://github.com/n8n-io/n8n/issues/17805)) ([b8b8507](https://github.com/n8n-io/n8n/commit/b8b8507ad69cea3ca706ef8230eaf99067e07014)) +* **core:** Introduce decorator to report slow method calls ([#17729](https://github.com/n8n-io/n8n/issues/17729)) ([056302e](https://github.com/n8n-io/n8n/commit/056302ebe548862bf7550ed0aaf63cac61df0c9b)) +* **core:** Stop typechecking during build ([#17833](https://github.com/n8n-io/n8n/issues/17833)) ([08a7b36](https://github.com/n8n-io/n8n/commit/08a7b365b8d34fd3dcc4deb878afb8e35c14bb0c)) + + + +# [1.105.0](https://github.com/n8n-io/n8n/compare/n8n@1.104.0...n8n@1.105.0) (2025-07-28) + + +### Bug Fixes + +* **core:** Add headers to telemetry cross origin request ([#17631](https://github.com/n8n-io/n8n/issues/17631)) ([251e892](https://github.com/n8n-io/n8n/commit/251e892a09b82b2f1f980d3984e3aef84ed1732e)) +* **core:** Decouple removing and closing destination from actually deleting it ([#17614](https://github.com/n8n-io/n8n/issues/17614)) ([b09f737](https://github.com/n8n-io/n8n/commit/b09f73701d8b6ce0e3bc4ef28d0f5d9fc7fb5df1)) +* **core:** Fetching schema files in Docker ([#17623](https://github.com/n8n-io/n8n/issues/17623)) ([5a3b0a2](https://github.com/n8n-io/n8n/commit/5a3b0a24811eea5ebd9d80c26a54fea74665569f)) +* **core:** Fix getLiveExecutionRowsOnPostgres when there are multiple n8n schemas ([#17635](https://github.com/n8n-io/n8n/issues/17635)) ([9e3bfff](https://github.com/n8n-io/n8n/commit/9e3bfff68d35a2eb21ba43452fc01ee24601c122)) +* **core:** Ignore pairedItem when checking for incorrect output data from a node ([#17340](https://github.com/n8n-io/n8n/issues/17340)) ([2708fe8](https://github.com/n8n-io/n8n/commit/2708fe81a5323687c59c3d483d6bf3c67464f657)) +* **core:** Make the module loading for local dev more generic ([#17547](https://github.com/n8n-io/n8n/issues/17547)) ([01b95a9](https://github.com/n8n-io/n8n/commit/01b95a9ee5dd4985e4770ef625ced91158f849da)) +* **core:** Optimize connection type lookups ([#17585](https://github.com/n8n-io/n8n/issues/17585)) ([70eab1b](https://github.com/n8n-io/n8n/commit/70eab1b2a02d70a46a56e8c993ccc694e38ac2d5)) +* **core:** Remove non-included nodes regardless of the package when using NODES_INCLUDE ([#17517](https://github.com/n8n-io/n8n/issues/17517)) ([1641d39](https://github.com/n8n-io/n8n/commit/1641d3964b72539354a939400af91e2692368058)) +* Do not throw on tool errors, instead return error message ([#17558](https://github.com/n8n-io/n8n/issues/17558)) ([f11ec53](https://github.com/n8n-io/n8n/commit/f11ec538dca2938e57302a1bedd5dd7d1e7a9488)) +* **editor:** Add background same as that of the parent ([#17625](https://github.com/n8n-io/n8n/issues/17625)) ([8660057](https://github.com/n8n-io/n8n/commit/8660057350e21b604b3fb3f627ccd32659058e87)) +* **editor:** Case-sensitive credential search in `NodeCredentials` component ([#17564](https://github.com/n8n-io/n8n/issues/17564)) ([3ce9a99](https://github.com/n8n-io/n8n/commit/3ce9a998ae454929207dd9add4a67b68dba13bc8)) +* **editor:** Do not show new NDV for sticky notes ([#17537](https://github.com/n8n-io/n8n/issues/17537)) ([4de3759](https://github.com/n8n-io/n8n/commit/4de3759a59cade3f82c57a1eeba1c6b4a16a3eaf)) +* **editor:** Fix canvas layouting when tab is not active ([#17638](https://github.com/n8n-io/n8n/issues/17638)) ([2df76e0](https://github.com/n8n-io/n8n/commit/2df76e020ef3a962fc991f2d108a8181914a2dd1)) +* **editor:** Fix error when there is no path back to referenced node ([#16059](https://github.com/n8n-io/n8n/issues/16059)) ([d6ac924](https://github.com/n8n-io/n8n/commit/d6ac924b3b7d2205cbcc0e5edc7ad407f4fe2a19)) +* **editor:** Fix layout of binary data preview in the log view ([#17584](https://github.com/n8n-io/n8n/issues/17584)) ([456c4e8](https://github.com/n8n-io/n8n/commit/456c4e8167ed95e5f096daaae9cc46cad90a0981)) +* **editor:** Fix trimPayloadToSize mutating original objects in AI assistant ([#17498](https://github.com/n8n-io/n8n/issues/17498)) ([1010043](https://github.com/n8n-io/n8n/commit/101004390bf5cdf5f67675dcfccb551f71ea4b70)) +* **editor:** Hide `What's New` notification in executions demo view ([#17742](https://github.com/n8n-io/n8n/issues/17742)) ([cebb1f6](https://github.com/n8n-io/n8n/commit/cebb1f65669638a6716dbbd2eb9873ae8dbfe108)) +* **editor:** Improve filter change handling with debounced updates for date fields ([#17618](https://github.com/n8n-io/n8n/issues/17618)) ([ae08917](https://github.com/n8n-io/n8n/commit/ae089173a71b3417ca07ae4bf49d4b0b3d31bf09)) +* **editor:** Make inline text edit component reactive to prop changes ([#17557](https://github.com/n8n-io/n8n/issues/17557)) ([9c793a4](https://github.com/n8n-io/n8n/commit/9c793a45c562631ec331f65ca871334f5a8a8e2f)) +* **editor:** Make sure HTML editor field is not editable when workflow is in read only mode ([#17561](https://github.com/n8n-io/n8n/issues/17561)) ([18c02df](https://github.com/n8n-io/n8n/commit/18c02dfa2b5cf76663b4678046a8bcb313fba1f4)) +* **editor:** Persist SSO protocol setting properly in the UI ([#17572](https://github.com/n8n-io/n8n/issues/17572)) ([4b2be26](https://github.com/n8n-io/n8n/commit/4b2be263790a53bf46b99f3301ddec6a771b2daf)) +* **editor:** Prevent default action on Enter key in commit and push dialog ([#17578](https://github.com/n8n-io/n8n/issues/17578)) ([e317c92](https://github.com/n8n-io/n8n/commit/e317c929161733a03ff61c07ae6f3ae12cf22ef2)) +* **editor:** Prevent unnecessary updates on model value change in InlineTextEdit component ([#17553](https://github.com/n8n-io/n8n/issues/17553)) ([832b7fd](https://github.com/n8n-io/n8n/commit/832b7fda3b59cc518624128ca98d26983cb444fd)) +* **editor:** Remove inline script and style from index.html ([#17531](https://github.com/n8n-io/n8n/issues/17531)) ([0db24ce](https://github.com/n8n-io/n8n/commit/0db24ce71b671f6311fc47ac9553466d34c46ba8)) +* **editor:** Render HTML in the log view ([#17586](https://github.com/n8n-io/n8n/issues/17586)) ([46635c5](https://github.com/n8n-io/n8n/commit/46635c59418630c2f24fce5cb8c25e425eddc3c2)) +* **editor:** Tweak configurable node width ([#17512](https://github.com/n8n-io/n8n/issues/17512)) ([3825f8a](https://github.com/n8n-io/n8n/commit/3825f8a806fcc67a33f43ce6ebd71b6a8023d7d8)) +* **GitHub Document Loader Node:** Fix node loading issue ([#17494](https://github.com/n8n-io/n8n/issues/17494)) ([8fb3d8d](https://github.com/n8n-io/n8n/commit/8fb3d8d5870682af4b8b0c31949b5c1569a70d90)) +* **Google Gemini Node:** Error when used as tool with "Message a model" operation ([#17491](https://github.com/n8n-io/n8n/issues/17491)) ([f30cc7b](https://github.com/n8n-io/n8n/commit/f30cc7b6cfba6998091f31fcd3012a971b3a2bb8)) +* **Google Sheets Node:** Get Rows operation returns an empty string when the cell has a value of 0 ([#17642](https://github.com/n8n-io/n8n/issues/17642)) ([9808783](https://github.com/n8n-io/n8n/commit/980878398e9f6b498ba7079492e92bdba6fa6778)) +* **MySQL Node:** Do not replace $ values with null ([#17327](https://github.com/n8n-io/n8n/issues/17327)) ([4b626e5](https://github.com/n8n-io/n8n/commit/4b626e528219c0610528a1119a2bb60c8442952d)) +* **OpenAI Node:** Fix memory connector for assistant message ([#17501](https://github.com/n8n-io/n8n/issues/17501)) ([e51b056](https://github.com/n8n-io/n8n/commit/e51b056e3a8fd79c73b0a87eaf6595b7f03d546b)) +* Prevent error when importing nodes with malformed collection params ([#17580](https://github.com/n8n-io/n8n/issues/17580)) ([4713827](https://github.com/n8n-io/n8n/commit/4713827813809065c8800adc7c0cd4bf42f54eeb)) +* **RabbitMQ Trigger Node:** Respect the "Delete From Queue When" option with manual executions ([#17554](https://github.com/n8n-io/n8n/issues/17554)) ([2bd0aa3](https://github.com/n8n-io/n8n/commit/2bd0aa38e24dcada0777921d457586d35095ac42)) +* **Telegram Node:** Determine the MIME type when downloading the file ([#17725](https://github.com/n8n-io/n8n/issues/17725)) ([a9c29e3](https://github.com/n8n-io/n8n/commit/a9c29e340adf370a65222600f3fac6884642c747)) +* Update packages for security fixes ([#17733](https://github.com/n8n-io/n8n/issues/17733)) ([edeb8ef](https://github.com/n8n-io/n8n/commit/edeb8ef8a437f30a6c37826ad1eccb6a35a4d3bc)) +* Update settings icons on canvas style ([#17636](https://github.com/n8n-io/n8n/issues/17636)) ([0338ebb](https://github.com/n8n-io/n8n/commit/0338ebb3dde3be4050ee869fb056f67827a764b2)) +* **Webhook Node:** Don't wrap response in an iframe if it doesn't have HTML ([#17671](https://github.com/n8n-io/n8n/issues/17671)) ([69beafb](https://github.com/n8n-io/n8n/commit/69beafbf7127d6492fc875ab243e6f2e174e61ec)) + + +### Features + +* **core:** Increase Cron observability ([#17626](https://github.com/n8n-io/n8n/issues/17626)) ([08c38a7](https://github.com/n8n-io/n8n/commit/08c38a76f384642c09fab6fc47f76bffd532a5b8)) +* **editor:** Add dragging and hiding for evaluation table columns ([#17587](https://github.com/n8n-io/n8n/issues/17587)) ([921cdb6](https://github.com/n8n-io/n8n/commit/921cdb6fd0ff11793a2ec08faee28b1c5842e25b)) +* **editor:** Add follow up question nps ([#17459](https://github.com/n8n-io/n8n/issues/17459)) ([e18ffe8](https://github.com/n8n-io/n8n/commit/e18ffe809c044f2e10564669d96cf79779a8a279)) +* **editor:** Add settings icons to the node on canvas ([#15467](https://github.com/n8n-io/n8n/issues/15467)) ([a2f21a7](https://github.com/n8n-io/n8n/commit/a2f21a76159e40de97c84c7604d3039d7e9a522e)) +* **editor:** New users see whatsnew notification only if new ([#17409](https://github.com/n8n-io/n8n/issues/17409)) ([a1d2a55](https://github.com/n8n-io/n8n/commit/a1d2a55f7e6e04389cd8b86aacb9c78f2bffdc41)) +* **editor:** Release the Focus Panel ([#17734](https://github.com/n8n-io/n8n/issues/17734)) ([a415dbf](https://github.com/n8n-io/n8n/commit/a415dbfd96c429f34e5de0a3572c7338d31321af)) +* **editor:** Use remote filtering for error workflow search in settings ([#17624](https://github.com/n8n-io/n8n/issues/17624)) ([e1ef35a](https://github.com/n8n-io/n8n/commit/e1ef35a2b4a44c1ff9770b387fec9b5a3a742838)) +* Proxy all RudderStack frontend telemetry events through the backend ([#17177](https://github.com/n8n-io/n8n/issues/17177)) ([5524b21](https://github.com/n8n-io/n8n/commit/5524b2137a0b54132df7dad1600c2e3054ed78c8)) +* Respond to chat and wait for response ([#12546](https://github.com/n8n-io/n8n/issues/12546)) ([a98ed2c](https://github.com/n8n-io/n8n/commit/a98ed2ca495d5c86ebb61baad049592ba1bce3a6)) +* **RSS Read Node:** Add support for custom response fields ([#16875](https://github.com/n8n-io/n8n/issues/16875)) ([d520059](https://github.com/n8n-io/n8n/commit/d520059ec36a9f0a578a60ddd8ea9811e76afd1f)) +* Track inputs and outputs in Evaluations ([#17404](https://github.com/n8n-io/n8n/issues/17404)) ([c18fabb](https://github.com/n8n-io/n8n/commit/c18fabb419889d35bf70326f83e26300eaba0102)) + + + +# [1.104.0](https://github.com/n8n-io/n8n/compare/n8n@1.103.0...n8n@1.104.0) (2025-07-21) + + +### Bug Fixes + +* **API:** Check if version exists in registry for community node installation ([#17168](https://github.com/n8n-io/n8n/issues/17168)) ([5180869](https://github.com/n8n-io/n8n/commit/518086973402d286363dd755f287d730b797e56c)) +* **AWS Bedrock Chat Model Node:** Do not show issues for arbitrary model names ([#17079](https://github.com/n8n-io/n8n/issues/17079)) ([5bb5a65](https://github.com/n8n-io/n8n/commit/5bb5a65edf39c524b6ea11d54c308dd1034d87bd)) +* **core:** Allow undefined workflow owner on source control for retro compatibility ([#17419](https://github.com/n8n-io/n8n/issues/17419)) ([78cb5b6](https://github.com/n8n-io/n8n/commit/78cb5b64093ad0c8830eddd7f862a14783b70a9c)) +* **core:** Fix object store support for non-latin chars ([#17383](https://github.com/n8n-io/n8n/issues/17383)) ([550339e](https://github.com/n8n-io/n8n/commit/550339ed185cf599cb4571f473c06943b2cb0045)) +* **core:** Remove inline JS from FE for more secure CSP ([#17195](https://github.com/n8n-io/n8n/issues/17195)) ([fc3129e](https://github.com/n8n-io/n8n/commit/fc3129e378b07d3e24c5b4ce24d013c0571c1089)) +* **editor:** Make close button visible on become creator CTA ([#17405](https://github.com/n8n-io/n8n/issues/17405)) ([8a27563](https://github.com/n8n-io/n8n/commit/8a2756368beb4660f443010e75be95a297b63b0e)) +* **editor:** Make tag search in workflows case insensitive ([#17347](https://github.com/n8n-io/n8n/issues/17347)) ([4073ce7](https://github.com/n8n-io/n8n/commit/4073ce7fb0cfcd7f0af97849edeeb0ff485c6639)) +* **editor:** Prevent submit when composing with IME on chat textarea ([#17179](https://github.com/n8n-io/n8n/issues/17179)) ([5db8bbd](https://github.com/n8n-io/n8n/commit/5db8bbd126cbc30947c0b50afdc06bee31b7d449)) +* **editor:** Recenter fromAI override close button ([#17455](https://github.com/n8n-io/n8n/issues/17455)) ([5cf74be](https://github.com/n8n-io/n8n/commit/5cf74beec19bfd175855cfdbe77c382ec6e58461)) +* **editor:** Show additional data on Users list page ([#17339](https://github.com/n8n-io/n8n/issues/17339)) ([f3f4461](https://github.com/n8n-io/n8n/commit/f3f4461ac5f215f0f086f6c223ac7f5a0ed87625)) +* **editor:** Update frontend to handle unlicensed insights dashboard, if only Time saved feature is enabled ([#17199](https://github.com/n8n-io/n8n/issues/17199)) ([42c6190](https://github.com/n8n-io/n8n/commit/42c61909c47f571951414b112bf5fdbba2bf3968)) +* **Embeddings OpenAI Node:** Disable model list filter when custom baseURL is set ([#17296](https://github.com/n8n-io/n8n/issues/17296)) ([c159e2b](https://github.com/n8n-io/n8n/commit/c159e2be5c02086d6da796c61a8f6f58971a5a03)) +* Fix issue with restricted file access order ([#17329](https://github.com/n8n-io/n8n/issues/17329)) ([e1805fb](https://github.com/n8n-io/n8n/commit/e1805fb14f931ba031ebb257922b34302bc6a617)) +* Fix ordering issue when checking if staging environment ([#17385](https://github.com/n8n-io/n8n/issues/17385)) ([b8e2187](https://github.com/n8n-io/n8n/commit/b8e21876d1485c54dc53a490afb3ec77986d2c96)) +* **OpenAi Node:** optional chaining for error handling in router ([#17412](https://github.com/n8n-io/n8n/issues/17412)) ([ba9eaca](https://github.com/n8n-io/n8n/commit/ba9eacaa6eb156fe3c3658eaf604f0d05fe3980f)) +* **Think Tool Node:** Use dynamic tool name based on node name ([#17364](https://github.com/n8n-io/n8n/issues/17364)) ([ac552e6](https://github.com/n8n-io/n8n/commit/ac552e68fd8c7ff0ee137d4b03c4827496e9187b)) + + +### Features + +* Add endpoint to retrieve single workflow from GH ([#17220](https://github.com/n8n-io/n8n/issues/17220)) ([c4ba31e](https://github.com/n8n-io/n8n/commit/c4ba31ef620ee1aa3ceffae5e1fa2c065fb0cddd)) +* **Anthropic Node:** New node ([#17121](https://github.com/n8n-io/n8n/issues/17121)) ([5502361](https://github.com/n8n-io/n8n/commit/5502361a97ec2fcb35e1b3f4cb2bca486fc69179)) +* Community nodes details footer update ([#17158](https://github.com/n8n-io/n8n/issues/17158)) ([81cd490](https://github.com/n8n-io/n8n/commit/81cd49014a57cea05b3d15f61d7850854041458d)) +* **core:** Add telemetry for agent tool on Cloud ([#17323](https://github.com/n8n-io/n8n/issues/17323)) ([4f45ec7](https://github.com/n8n-io/n8n/commit/4f45ec70c07bc82c29bbda730401b3c737073b27)) +* **core:** Set up backend modules ([#17448](https://github.com/n8n-io/n8n/issues/17448)) ([1159345](https://github.com/n8n-io/n8n/commit/115934573fcd3318333e988e22563d3bfb9473f5)) +* **editor:** Add "Stop Test" button to stop running evaluations ([#17328](https://github.com/n8n-io/n8n/issues/17328)) ([df80673](https://github.com/n8n-io/n8n/commit/df80673c96c8ebec0a9020822b8cfc8cf03be277)) +* **editor:** Add option to disable credentials check in RLC ([#17381](https://github.com/n8n-io/n8n/issues/17381)) ([d466d9d](https://github.com/n8n-io/n8n/commit/d466d9d373bd7d58031dca87ba48d5dd5247f0d0)) +* **editor:** Using special env vars as feature flags in the frontend ([#17355](https://github.com/n8n-io/n8n/issues/17355)) ([d36abb5](https://github.com/n8n-io/n8n/commit/d36abb5a3ad6c1c698e94316914f08aac512b2fc)) +* **Facebook Graph API Node:** Add support for api v23 ([#17240](https://github.com/n8n-io/n8n/issues/17240)) ([c0f1867](https://github.com/n8n-io/n8n/commit/c0f1867429a64a3a27ae585084270d220972e673)) +* **MCP Client Tool Node:** Add support for HTTP Streamable Transport ([#15454](https://github.com/n8n-io/n8n/issues/15454)) ([a5d14a2](https://github.com/n8n-io/n8n/commit/a5d14a25091284b0e0f4e82ae6c230ffa9782e41)) +* **n8n Form Node:** Allow basic styling of form completion message ([#17338](https://github.com/n8n-io/n8n/issues/17338)) ([2d4abf1](https://github.com/n8n-io/n8n/commit/2d4abf156c354613173e1c56241d63c86d7ab9e1)) +* NDV notify if community node has update ([#17146](https://github.com/n8n-io/n8n/issues/17146)) ([0237d8b](https://github.com/n8n-io/n8n/commit/0237d8b8ec097ee744b869a70870ffeb4bb83853)) +* New package version available callout ([#17097](https://github.com/n8n-io/n8n/issues/17097)) ([49c84c2](https://github.com/n8n-io/n8n/commit/49c84c2ce29b9ff1c10b59565c28a65a767af6cb)) + + + +# [1.103.0](https://github.com/n8n-io/n8n/compare/n8n@1.102.0...n8n@1.103.0) (2025-07-14) + + +### Bug Fixes + +* **AI Agent Node:** Prevent fallback input to be added in version <2.1 ([#17094](https://github.com/n8n-io/n8n/issues/17094)) ([1a4e4c5](https://github.com/n8n-io/n8n/commit/1a4e4c5e72d8d49ef8b72097cbc4764229e1d260)) +* **core:** Allow insights breakdown by workflow to be sorted by workflow name ([#17184](https://github.com/n8n-io/n8n/issues/17184)) ([d002cc3](https://github.com/n8n-io/n8n/commit/d002cc3f7d241cec14c95a37e09a37b77b6759bf)) +* **core:** Fix warning on empty OIDC discovery endpoint ([#17103](https://github.com/n8n-io/n8n/issues/17103)) ([608dcde](https://github.com/n8n-io/n8n/commit/608dcdee4de9d6744882830671a50c25a0b5139b)) +* **core:** Improve handling of disabled Set Metrics node ([#17085](https://github.com/n8n-io/n8n/issues/17085)) ([57b914d](https://github.com/n8n-io/n8n/commit/57b914dcd9dc15a471d1873cbc114beeaaa9fca4)) +* **core:** On OAuth access token update only update partial credential ([#17135](https://github.com/n8n-io/n8n/issues/17135)) ([c8b3ac6](https://github.com/n8n-io/n8n/commit/c8b3ac6ab0c6d6d915ae396da935c32844ea18d2)) +* **editor:** Fit long words for draggable fields ([#17063](https://github.com/n8n-io/n8n/issues/17063)) ([b733573](https://github.com/n8n-io/n8n/commit/b73357369fe91a260f9215fac3c01c8d8e7162e3)) +* **editor:** Fix RAG Callout keyboard navigation in nodes search ([#17099](https://github.com/n8n-io/n8n/issues/17099)) ([3610748](https://github.com/n8n-io/n8n/commit/3610748913b6c880936658037fb34f3f7b5ffd02)) +* **editor:** Make search work for "rendered" display type ([#16910](https://github.com/n8n-io/n8n/issues/16910)) ([f252a39](https://github.com/n8n-io/n8n/commit/f252a39197b43cde047930584e8b1895722aeb42)) +* **editor:** Mitigate performance issue in FE manual executions ([#17119](https://github.com/n8n-io/n8n/issues/17119)) ([3be5823](https://github.com/n8n-io/n8n/commit/3be5823b9770807713519a45f6dd4e61276e460f)) +* **editor:** Open failed node in failed execution from sub-workflow node ([#17076](https://github.com/n8n-io/n8n/issues/17076)) ([8fff830](https://github.com/n8n-io/n8n/commit/8fff83032cb0a47a05460fcbbf8bd54bfd8956ce)) +* **editor:** Remove feature flag from evals feature ([#17107](https://github.com/n8n-io/n8n/issues/17107)) ([59704b4](https://github.com/n8n-io/n8n/commit/59704b40101e7085193a9a5e4d8fc09cc01d53db)) +* **editor:** Reset current page if out of bounds after page size change ([#17124](https://github.com/n8n-io/n8n/issues/17124)) ([b9e7b71](https://github.com/n8n-io/n8n/commit/b9e7b719c049bd1fa5793a1dcdfbccb467ede6a1)) +* **Execute Sub-workflow Node:** Improve paired item handling for child workflows ([#17065](https://github.com/n8n-io/n8n/issues/17065)) ([f5fb33a](https://github.com/n8n-io/n8n/commit/f5fb33a3fac16b17b19552df07f0a8be54834f64)) +* **GitHub Node:** Fix issue with user loading not completing ([#17122](https://github.com/n8n-io/n8n/issues/17122)) ([336d670](https://github.com/n8n-io/n8n/commit/336d6707e36a876e1a1a78c9874f8724c9046577)) +* **Gmail Node:** Set References and In-Reply-To only when user provides threadId ([#16838](https://github.com/n8n-io/n8n/issues/16838)) ([7657cce](https://github.com/n8n-io/n8n/commit/7657cce5a4de92ecf9a0d58e9163c018e313d30e)) +* **Linear Node:** Fix issue with priority being incorrect for issue updates ([#16764](https://github.com/n8n-io/n8n/issues/16764)) ([ced854d](https://github.com/n8n-io/n8n/commit/ced854df2ccfeb60d7f8c527f6086f81e89fe994)) +* **n8n Form Node:** Make customizing form custom styles possible on mobile screens and on form end redirect ([#17060](https://github.com/n8n-io/n8n/issues/17060)) ([878026a](https://github.com/n8n-io/n8n/commit/878026aff686614ca3cb9c03c8947925076b6da9)) +* **Perplexity Node:** Allow for penalties below 1 ([#17074](https://github.com/n8n-io/n8n/issues/17074)) ([62ea048](https://github.com/n8n-io/n8n/commit/62ea048bbfbf474239654cd87d8aba4c639051c6)) +* **Sentiment Analysis Node:** Fix problems with first sentiment output ([#17233](https://github.com/n8n-io/n8n/issues/17233)) ([2f7ed14](https://github.com/n8n-io/n8n/commit/2f7ed14a239f82cbe47eaef83cd3ab506a7e30e0)) +* **Token Splitter Node:** Cache tokenizer JSONs in memory ([#17201](https://github.com/n8n-io/n8n/issues/17201)) ([2402926](https://github.com/n8n-io/n8n/commit/2402926573f76699c0a81ba2f1c134b0f73d05cf)) + + +### Features + +* Add HTTP proxy support for OpenAI Embeddings node ([#17173](https://github.com/n8n-io/n8n/issues/17173)) ([232b8f6](https://github.com/n8n-io/n8n/commit/232b8f6cb19b905c6015673fbd2949f19d3e8cbe)) +* **AI Agent Tool Node:** Add Agent Tool ([#17108](https://github.com/n8n-io/n8n/issues/17108)) ([f67581b](https://github.com/n8n-io/n8n/commit/f67581b74d99bf4831c83fa2fdfaff3de48996a0)) +* **Cohere Chat Model Node:** Add Cohere Chat Model node ([#16888](https://github.com/n8n-io/n8n/issues/16888)) ([c37397c](https://github.com/n8n-io/n8n/commit/c37397cb2b7fb8b14de613ca6fae24c8db7c380c)) +* **core:** Add workflow name label to workflow metrics ([#16837](https://github.com/n8n-io/n8n/issues/16837)) ([0cc54ec](https://github.com/n8n-io/n8n/commit/0cc54ecf6d029d82e9668a56af87ec479af8df24)) +* **editor:** Add new ways to discover templates ([#17183](https://github.com/n8n-io/n8n/issues/17183)) ([0259c58](https://github.com/n8n-io/n8n/commit/0259c58cb887661ec7646c5c25f489bed7372c86)) +* **editor:** Move AI Assistant button to canvas action buttons ([#16879](https://github.com/n8n-io/n8n/issues/16879)) ([2294c3d](https://github.com/n8n-io/n8n/commit/2294c3d71b1871a5e0273f57449f740b1af5bb56)) +* **editor:** Show the right editor in focus panel ([#17062](https://github.com/n8n-io/n8n/issues/17062)) ([3aeb622](https://github.com/n8n-io/n8n/commit/3aeb622978a41136c38ce00d4b38153f271efbe1)) +* **Email Trigger (IMAP) Node:** Limit new mails fetched ([#16926](https://github.com/n8n-io/n8n/issues/16926)) ([d1ac292](https://github.com/n8n-io/n8n/commit/d1ac292709c198cea4a75560bd03b63b14ebab6b)) +* **Google Gemini Node:** New node ([#16863](https://github.com/n8n-io/n8n/issues/16863)) ([0f59eea](https://github.com/n8n-io/n8n/commit/0f59eeaf5b824f4e5d6a66b6d3d199e0608af078)) +* **n8n Evaluation Node:** Add pre-defined metrics to the "Set Metrics" operation ([#17127](https://github.com/n8n-io/n8n/issues/17127)) ([a34b30a](https://github.com/n8n-io/n8n/commit/a34b30acc78e1bf8c2f088635a8e34bd400371a9)) +* Update Chat SDK to support streaming responses ([#17006](https://github.com/n8n-io/n8n/issues/17006)) ([3edadb5](https://github.com/n8n-io/n8n/commit/3edadb5a753ed6e07695399ae0a96391202b8818)) + + +### Performance Improvements + +* **core:** Improvements to GET `/workflows` endpoint ([#17086](https://github.com/n8n-io/n8n/issues/17086)) ([cc39c50](https://github.com/n8n-io/n8n/commit/cc39c50737b7ff2b04ca5e93a1c1bde6a42464bc)) + + + +# [1.102.0](https://github.com/n8n-io/n8n/compare/n8n@1.101.0...n8n@1.102.0) (2025-07-07) + + +### Bug Fixes + +* Add install step for playwright binaries ([#16945](https://github.com/n8n-io/n8n/issues/16945)) ([05360ce](https://github.com/n8n-io/n8n/commit/05360cee79d5d84302c372323244286efc0c6281)) +* **AI Agent Node:** Fix tool-usage with fallback mechanism ([#16898](https://github.com/n8n-io/n8n/issues/16898)) ([58fd1ec](https://github.com/n8n-io/n8n/commit/58fd1ec325996da87a7d41f2f56db3ce547619f6)) +* Clean up `AI_CREDITS_EXPERIMENT` ([#16840](https://github.com/n8n-io/n8n/issues/16840)) ([d1d5412](https://github.com/n8n-io/n8n/commit/d1d5412bfb342870fd8c9ecada96fa33b4229525)) +* Clean up `EASY_AI_WORKFLOW_EXPERIMENT` ([#16839](https://github.com/n8n-io/n8n/issues/16839)) ([3e04566](https://github.com/n8n-io/n8n/commit/3e04566845f308f194a04936229c003302b3b633)) +* **Code Node:** Only Block os.system vs Blocking import os ([#16885](https://github.com/n8n-io/n8n/issues/16885)) ([e54613f](https://github.com/n8n-io/n8n/commit/e54613f75feacd0d40e35b4064b842e03eabd821)) +* **core:** Apply same VM wrapper to both modes in task runner ([#16872](https://github.com/n8n-io/n8n/issues/16872)) ([af52a0d](https://github.com/n8n-io/n8n/commit/af52a0d1ed5bfe714825ce8de85e0f219ef17617)) +* **core:** Block access to JS object constructor and `js` module in Pyodide ([#16957](https://github.com/n8n-io/n8n/issues/16957)) ([bde9008](https://github.com/n8n-io/n8n/commit/bde9008660a089f5976964b2af5f7634a9581448)) +* **core:** Deduplicate credential types when lazyloading ([#16834](https://github.com/n8n-io/n8n/issues/16834)) ([625ae3f](https://github.com/n8n-io/n8n/commit/625ae3f584423915b36f90076798eb3fe12cc66f)) +* **core:** Fix evaluation of `N8N_SKIP_AUTH_ON_OAUTH_CALLBACK` ([#16944](https://github.com/n8n-io/n8n/issues/16944)) ([945098d](https://github.com/n8n-io/n8n/commit/945098d78997b07b612739179985c8939fd4a89a)) +* **core:** Fix partial execution in triggerless parent case ([#16833](https://github.com/n8n-io/n8n/issues/16833)) ([585295c](https://github.com/n8n-io/n8n/commit/585295c89f47f0c7a47ddff9af9b98aa1b436ad7)) +* **core:** Fix worker view ([#17052](https://github.com/n8n-io/n8n/issues/17052)) ([f817fb4](https://github.com/n8n-io/n8n/commit/f817fb4e746cfda28c3eba9cb6c2ef6684f67d3f)) +* **core:** Initialize source control unconditionally ([#16929](https://github.com/n8n-io/n8n/issues/16929)) ([faea69c](https://github.com/n8n-io/n8n/commit/faea69cbc2fe9517c0d0f79a72c44f8af36ef0a8)) +* **core:** Prevent mutation of credential type parents ([#16841](https://github.com/n8n-io/n8n/issues/16841)) ([cb1103e](https://github.com/n8n-io/n8n/commit/cb1103e7421a1ccf4e3b03984c695bf64e1715ac)) +* **core:** Remove unneeded cookies from webhook requests ([#16736](https://github.com/n8n-io/n8n/issues/16736)) ([830e068](https://github.com/n8n-io/n8n/commit/830e068509e1b798ebed0ee0f992e48568891da0)) +* **editor:** AI Agent shows logs from multiple runs in same view ([#16825](https://github.com/n8n-io/n8n/issues/16825)) ([9133340](https://github.com/n8n-io/n8n/commit/913334005fe5b85f2b057056a740ba363a13b407)) +* **editor:** Clear error states before copy to editor action ([#16922](https://github.com/n8n-io/n8n/issues/16922)) ([716cb9a](https://github.com/n8n-io/n8n/commit/716cb9aacaca171b7e1585b6f729e3a1b97e2df0)) +* **editor:** Disable all potential eslint rule conflicts with prettier ([#16832](https://github.com/n8n-io/n8n/issues/16832)) ([9517d11](https://github.com/n8n-io/n8n/commit/9517d11a7e02a524727ced022e9ad1779409d74b)) +* **editor:** Fix inifnite loading in Resource Locator Dropdown under certain conditions ([#16773](https://github.com/n8n-io/n8n/issues/16773)) ([8e62c80](https://github.com/n8n-io/n8n/commit/8e62c80d48bc33cb199881eea3850966eed3d535)) +* **editor:** Fix mapping field icon sizes ([#16886](https://github.com/n8n-io/n8n/issues/16886)) ([346bc84](https://github.com/n8n-io/n8n/commit/346bc8409390aac3e8894fcaf97c7d19cf9ba117)) +* **editor:** Fix table pagination state handling and adding more tests ([#16986](https://github.com/n8n-io/n8n/issues/16986)) ([34aae96](https://github.com/n8n-io/n8n/commit/34aae9665d588ea600d1f122916e1289711ea813)) +* **editor:** Make JSON copy button work in PiP window ([#16887](https://github.com/n8n-io/n8n/issues/16887)) ([8fda3fb](https://github.com/n8n-io/n8n/commit/8fda3fb2aab1c5bb22f8c161667632743944bb47)) +* **editor:** Make sure connectors are clickable when overlapped by node description ([#16765](https://github.com/n8n-io/n8n/issues/16765)) ([38c2e61](https://github.com/n8n-io/n8n/commit/38c2e6184c1bf425e9e12881fc9ef940b29414e8)) +* **editor:** Only do new versions & what's new check after login ([#16844](https://github.com/n8n-io/n8n/issues/16844)) ([bbda2da](https://github.com/n8n-io/n8n/commit/bbda2dad635abb40861e9292465651f5c7c7e657)) +* **editor:** Refetch module settings on manual license activation ([#16943](https://github.com/n8n-io/n8n/issues/16943)) ([5b9897c](https://github.com/n8n-io/n8n/commit/5b9897c3a299460e7c32a5c596b44e0bed2752ce)) +* **editor:** Reset dirty state on workflow activation only if its current workflow ([#16997](https://github.com/n8n-io/n8n/issues/16997)) ([bb9679c](https://github.com/n8n-io/n8n/commit/bb9679c4fa2150f5df577a5e3c67766286fc7c9b)) +* **editor:** Restore valid drag state when NDV is closed via ESC while dragging ([#16758](https://github.com/n8n-io/n8n/issues/16758)) ([7cc5a05](https://github.com/n8n-io/n8n/commit/7cc5a05bd360cd770ff4af296604a4e316649fa1)) +* **editor:** Show correct error messages on Ask AI ([#16913](https://github.com/n8n-io/n8n/issues/16913)) ([3a733b9](https://github.com/n8n-io/n8n/commit/3a733b91278f477a304e862c2b4e7eade6e75398)) +* **editor:** Show escape characters in json view ([#16930](https://github.com/n8n-io/n8n/issues/16930)) ([bd8b7b4](https://github.com/n8n-io/n8n/commit/bd8b7b468c671ec3559a86e89e3cf1a587bf9133)) +* **editor:** Show shared with me only on multi user instances ([#16770](https://github.com/n8n-io/n8n/issues/16770)) ([29bf4a4](https://github.com/n8n-io/n8n/commit/29bf4a46bd9197701f2ac49c0820b773d69cbbcf)) +* **editor:** Support 'Save Workflow' key shortcut in new workflows ([#16756](https://github.com/n8n-io/n8n/issues/16756)) ([ffe8fbb](https://github.com/n8n-io/n8n/commit/ffe8fbbf73a5c708a5b8e9562e8d473d8ac8d166)) +* **editor:** Sync log selection doesn't work for renamed nodes ([#16878](https://github.com/n8n-io/n8n/issues/16878)) ([ee463f0](https://github.com/n8n-io/n8n/commit/ee463f08b621a580aa9985c22ada49156a4104af)) +* **editor:** Update bolt icon to filled ([#16954](https://github.com/n8n-io/n8n/issues/16954)) ([bf926ce](https://github.com/n8n-io/n8n/commit/bf926ce87e82d94039059dcfc96ed24e6b35e3e1)) +* Evaluation nodes - add missing test function and credentialTest to methods ([#16734](https://github.com/n8n-io/n8n/issues/16734)) ([044022f](https://github.com/n8n-io/n8n/commit/044022f00404232051721eb741857bb7a50b8fdf)) +* Fix `lintfix` command ([#17003](https://github.com/n8n-io/n8n/issues/17003)) ([5db122b](https://github.com/n8n-io/n8n/commit/5db122be0d7b24eedfb83f6c4531150c4d016296)) +* **Google Sheets Node:** Include all headers ([#16928](https://github.com/n8n-io/n8n/issues/16928)) ([71771a7](https://github.com/n8n-io/n8n/commit/71771a76c4671495cf322d0421eeb57156238a5e)) +* **HTTP Request Node:** Fix paginated requests with HttpBearerAuth ([#17005](https://github.com/n8n-io/n8n/issues/17005)) ([3b14830](https://github.com/n8n-io/n8n/commit/3b1483096625ead20803a320567f651df221137c)) +* Prevent empty path in webhooks ([#16864](https://github.com/n8n-io/n8n/issues/16864)) ([bd69907](https://github.com/n8n-io/n8n/commit/bd699074775773bb4bcc81968d28ad6c51423861)) +* Stop telemetry events to `Posthog` ([#16788](https://github.com/n8n-io/n8n/issues/16788)) ([d76f05b](https://github.com/n8n-io/n8n/commit/d76f05ba3d3b6fe4e8b301809b51f728334855d0)) + + +### Features + +* **Airtop Node:** Implement windows list API and other improvements ([#16748](https://github.com/n8n-io/n8n/issues/16748)) ([621745e](https://github.com/n8n-io/n8n/commit/621745e2919b40db82bef39626febe1c0407c38d)) +* **core:** Allow enforcement of MFA usage on instance ([#16556](https://github.com/n8n-io/n8n/issues/16556)) ([657e5a3](https://github.com/n8n-io/n8n/commit/657e5a3b3a5184b9f1f6b6303faabb9feef0d70a)) +* **editor:** Allow users to update verified nodes from the node settings panel ([#16447](https://github.com/n8n-io/n8n/issues/16447)) ([6edd47d](https://github.com/n8n-io/n8n/commit/6edd47dd65aa488ad12a3dfe0c4605493da870d3)) +* **editor:** Collapse button on table view ([#16993](https://github.com/n8n-io/n8n/issues/16993)) ([d3330b6](https://github.com/n8n-io/n8n/commit/d3330b6bccd2d019a62ca3005ed68b634ea65940)) +* **editor:** Log view improvements ([#16489](https://github.com/n8n-io/n8n/issues/16489)) ([4124b96](https://github.com/n8n-io/n8n/commit/4124b96a00c0bf88094b0db948283e1f9fbb42dd)) +* **editor:** NDV UI overhaul experiment ([#14209](https://github.com/n8n-io/n8n/issues/14209)) ([6ef3841](https://github.com/n8n-io/n8n/commit/6ef38411d88a94fa950afb85696cac3c8688891b)) +* **editor:** Update grid size to `16px` for better alignment ([#16869](https://github.com/n8n-io/n8n/issues/16869)) ([7ebde66](https://github.com/n8n-io/n8n/commit/7ebde66eed9ad507aa494b9247134eebd2926829)) +* **editor:** Update icons to Lucide icons ([#16231](https://github.com/n8n-io/n8n/issues/16231)) ([ed2cb3c](https://github.com/n8n-io/n8n/commit/ed2cb3c70198c8212d83606cb27de6cf6132526b)) +* **LangChain Nodes:** Upgrade LangChain and improve proxy handling for LLM nodes ([#16778](https://github.com/n8n-io/n8n/issues/16778)) ([cfe3699](https://github.com/n8n-io/n8n/commit/cfe36997827467d6af7bf4d752dac6297902545d)) +* **Mistral AI Node:** New node ([#16631](https://github.com/n8n-io/n8n/issues/16631)) ([c11e4bd](https://github.com/n8n-io/n8n/commit/c11e4bd0a8dc930d50a7f0e7ca64d25decd0d71c)) +* **MySQL Node:** Hints for executeQuery and select operations ([#16753](https://github.com/n8n-io/n8n/issues/16753)) ([f2eb386](https://github.com/n8n-io/n8n/commit/f2eb38617fe4c0a70ca70b07ba65519120c09665)) +* Weaviate Vector Store Node for Langchain ([#16856](https://github.com/n8n-io/n8n/issues/16856)) ([4813c01](https://github.com/n8n-io/n8n/commit/4813c011ecd5c81da48fbd609aa9f8134c81786a)) + + +### Performance Improvements + +* **core:** Eliminate unnecessary license server calls ([#17047](https://github.com/n8n-io/n8n/issues/17047)) ([6efff79](https://github.com/n8n-io/n8n/commit/6efff79d72a808ebd295ed38fa1624f898e599bb)) + + + +# [1.101.0](https://github.com/n8n-io/n8n/compare/n8n@1.100.0...n8n@1.101.0) (2025-06-30) + + +### Bug Fixes + +* Adding this back as it's still needed for darwin builds locally ([#16720](https://github.com/n8n-io/n8n/issues/16720)) ([719a174](https://github.com/n8n-io/n8n/commit/719a17427e5ef525ff89497d5f8a120997cddd4e)) +* Check for status when canceling execution ([#16690](https://github.com/n8n-io/n8n/issues/16690)) ([901e034](https://github.com/n8n-io/n8n/commit/901e0341969f3010b316985d8cc763f9d80a1904)) +* **Code Node:** Error formatting fix ([#16719](https://github.com/n8n-io/n8n/issues/16719)) ([8f9ce72](https://github.com/n8n-io/n8n/commit/8f9ce72dc4106da6b8f9e96d3cd7afa3b2e921da)) +* **core:** Add retry mechanism to tools ([#16667](https://github.com/n8n-io/n8n/issues/16667)) ([9e61d0b](https://github.com/n8n-io/n8n/commit/9e61d0b9c0383c086a25f33f9987be8aaf33d2ed)) +* **core:** Fix dir in module path resolution for Docker ([#16725](https://github.com/n8n-io/n8n/issues/16725)) ([892b0d2](https://github.com/n8n-io/n8n/commit/892b0d2a82d9931ab6471cd398c48eb28c2bfebf)) +* **core:** Fix the problem of Windows system building error ([#16653](https://github.com/n8n-io/n8n/issues/16653)) ([297d300](https://github.com/n8n-io/n8n/commit/297d3001c0efad8f43cedea1c57f60a55be4581e)) +* **core:** Pagination was broken for users list ([#16697](https://github.com/n8n-io/n8n/issues/16697)) ([a6ded1f](https://github.com/n8n-io/n8n/commit/a6ded1fc80cfd1ae6ea35a1eb0d9f1cebcc16c88)) +* **core:** Prevent accidentally moving folders to their sub folders ([#16808](https://github.com/n8n-io/n8n/issues/16808)) ([22a240e](https://github.com/n8n-io/n8n/commit/22a240e74bc7fcfe99da94deb0f5613b652f11f5)) +* **core:** Remove default for manual trigger in manual executions ([#16829](https://github.com/n8n-io/n8n/issues/16829)) ([641e970](https://github.com/n8n-io/n8n/commit/641e970eddabf30e213b956e00b21355a77cdf94)) +* **core:** Return default tags-mappings and folders value when file not found ([#16747](https://github.com/n8n-io/n8n/issues/16747)) ([e163141](https://github.com/n8n-io/n8n/commit/e163141b72d9926ede92714aadb2d1218cbcf34b)) +* **editor:** Allow executing none single webhook triggers in active workflows with multiple triggers ([#16794](https://github.com/n8n-io/n8n/issues/16794)) ([725ce23](https://github.com/n8n-io/n8n/commit/725ce23ea3c830527921a48b47a3660d8056e70e)) +* **editor:** Don't reset node name on click while renaming ([#16755](https://github.com/n8n-io/n8n/issues/16755)) ([a99ccff](https://github.com/n8n-io/n8n/commit/a99ccfffe112e8c03a3992815051f1177671e598)) +* **editor:** Fix insights loading on FE ([#16677](https://github.com/n8n-io/n8n/issues/16677)) ([28aabd4](https://github.com/n8n-io/n8n/commit/28aabd4044188db13a5ba4198e8f996b12359f06)) +* **editor:** Fix new, unsaved workflow sharing ([#16740](https://github.com/n8n-io/n8n/issues/16740)) ([5fe68f3](https://github.com/n8n-io/n8n/commit/5fe68f38dfe50f2c63efb9d4ad16a4ea66fe8dcf)) +* **editor:** Only drag folders when holding mouse 1 button ([#16809](https://github.com/n8n-io/n8n/issues/16809)) ([c8a7156](https://github.com/n8n-io/n8n/commit/c8a715625413dd3569c05e826b0114d1e7117a7a)) +* **editor:** Prevent multiple community registration request submission ([#16621](https://github.com/n8n-io/n8n/issues/16621)) ([79eef1e](https://github.com/n8n-io/n8n/commit/79eef1e347c6a26856293ad7d5ebe7869d2d7f0c)) +* **editor:** Remove automatic resizing of output view ([#16672](https://github.com/n8n-io/n8n/issues/16672)) ([e89487f](https://github.com/n8n-io/n8n/commit/e89487f602f130675dea79bcbdf23832ed5b858a)) +* **editor:** Reset wrapping for variable value to prevent horizontal scrolling ([#16772](https://github.com/n8n-io/n8n/issues/16772)) ([ac46122](https://github.com/n8n-io/n8n/commit/ac4612232c0b3f10ff78ccddf501786b4a1f4e27)) +* **Execution Data Node:** Set nulish values as empty string, continue on fail support ([#16696](https://github.com/n8n-io/n8n/issues/16696)) ([e6515a2](https://github.com/n8n-io/n8n/commit/e6515a2a743f558e1322c50a825cb23ca56147b5)) +* Filter source control credentials by project ([#16732](https://github.com/n8n-io/n8n/issues/16732)) ([0debbc3](https://github.com/n8n-io/n8n/commit/0debbc3503246d44741cff846482f5aab5f84dc6)) +* **Google Sheets Node:** Inconsistent Google Sheet Tool update behavior due to wrong type of row_number field ([#16632](https://github.com/n8n-io/n8n/issues/16632)) ([91206ef](https://github.com/n8n-io/n8n/commit/91206ef3cc38cb838087aedd8a40f4ba7155039a)) +* Helper to set proper operation for sendAndWait action ([#16701](https://github.com/n8n-io/n8n/issues/16701)) ([b70cc94](https://github.com/n8n-io/n8n/commit/b70cc944fc15f750efe77532e72d0d2ed7bd56d5)) +* **Jira Software Node:** Fix issue with credential test not working correctly ([#16657](https://github.com/n8n-io/n8n/issues/16657)) ([bc53c21](https://github.com/n8n-io/n8n/commit/bc53c21e151ca29b508fafe0fc7d6db5e7638e3e)) +* **Microsoft SharePoint Node:** Access token not being refreshed ([#16555](https://github.com/n8n-io/n8n/issues/16555)) ([1141553](https://github.com/n8n-io/n8n/commit/1141553c672a3c8e5a515dcb36fdf14ee9fedf51)) +* **Snowflake Node:** Fix key-pair credentials ([#16635](https://github.com/n8n-io/n8n/issues/16635)) ([8e6de34](https://github.com/n8n-io/n8n/commit/8e6de34bc376c2338d3ab02f0787faf5162cc93a)) +* **Token Splitter Node:** Prevent tiktoken blocking on repetitive content ([#16769](https://github.com/n8n-io/n8n/issues/16769)) ([c5ec056](https://github.com/n8n-io/n8n/commit/c5ec056eb5fe8c5d06c7e9c5673163385a58a7a9)) + + +### Features + +* Add fallback mechanism for agent and basic chain llm ([#16617](https://github.com/n8n-io/n8n/issues/16617)) ([6408d5a](https://github.com/n8n-io/n8n/commit/6408d5a1b03cbc9afc06c63fa43522fa682e1f96)) +* **core:** Add a new by-time insights route that return only time saved data ([#16727](https://github.com/n8n-io/n8n/issues/16727)) ([3ba8a84](https://github.com/n8n-io/n8n/commit/3ba8a84d2bdec0102a729ee1e999324608359426)) +* **core:** Add lastActiveAt datetime column on user table ([#16488](https://github.com/n8n-io/n8n/issues/16488)) ([92afe03](https://github.com/n8n-io/n8n/commit/92afe036dd78d8500a0c294478eed657a92b3dff)) +* **core:** Send email notification when a user invited to a project ([#16687](https://github.com/n8n-io/n8n/issues/16687)) ([7e376e0](https://github.com/n8n-io/n8n/commit/7e376e087e38184a9c1d2bae26629c8760a4b484)) +* Don't allow multiple active workflows with same form path ([#16722](https://github.com/n8n-io/n8n/issues/16722)) ([98b821b](https://github.com/n8n-io/n8n/commit/98b821bbd89a069acc228730f2dd1eafd7b0fdd4)) +* **editor:** Add 'Whats new' section and modal ([#16664](https://github.com/n8n-io/n8n/issues/16664)) ([0b7bca2](https://github.com/n8n-io/n8n/commit/0b7bca29f8339cc7c197c5880fd3f0b241d8dc30)) +* **editor:** Add What's New notification callout ([#16718](https://github.com/n8n-io/n8n/issues/16718)) ([1934e6f](https://github.com/n8n-io/n8n/commit/1934e6fc0fa7cea0524cf6ab0f09012d01aa941a)) +* **editor:** Implement filter by project and ownership pills for source control push modal ([#16551](https://github.com/n8n-io/n8n/issues/16551)) ([254c9d7](https://github.com/n8n-io/n8n/commit/254c9d7fb40e1c3bdcd2bf4542e70a9ef63e483f)) +* **editor:** Improve style of Canvas action buttons ([#16724](https://github.com/n8n-io/n8n/issues/16724)) ([4d211a0](https://github.com/n8n-io/n8n/commit/4d211a07944eee4f83330d4fd6bd2e8428e2d2f3)) +* **Sticky Note Node:** Support YouTube video embeds on Sticky notes ([#16484](https://github.com/n8n-io/n8n/issues/16484)) ([f4d0b9f](https://github.com/n8n-io/n8n/commit/f4d0b9f79609633f86a6126d060fdc1c13ca5ab9)) +* Update default Gemini model to `gemini-2.5-flash` ([#16651](https://github.com/n8n-io/n8n/issues/16651)) ([3f6eef1](https://github.com/n8n-io/n8n/commit/3f6eef17066060524f1cf97c631118b9c8e17897)) + + + +# [1.100.0](https://github.com/n8n-io/n8n/compare/n8n@1.99.0...n8n@1.100.0) (2025-06-23) + + +### Bug Fixes + +* **AWS DynamoDB Node:** Incorrect parameter names ([#16408](https://github.com/n8n-io/n8n/issues/16408)) ([dd2ed90](https://github.com/n8n-io/n8n/commit/dd2ed90b954b00897c7883da9b4dea1d0aa6043a)) +* **core:** Add Dingbat emojis to expressions grammar ([#16545](https://github.com/n8n-io/n8n/issues/16545)) ([ddd3908](https://github.com/n8n-io/n8n/commit/ddd390823418b69d7370f8b973fdea13f77593de)) +* **core:** Add missing version label to docker image ([#16386](https://github.com/n8n-io/n8n/issues/16386)) ([4e73c40](https://github.com/n8n-io/n8n/commit/4e73c407392d65cc14f1818ffcd135821bdeabb9)) +* **core:** Ensure updatedAt field exists on folder object for source control ([#16437](https://github.com/n8n-io/n8n/issues/16437)) ([81dd215](https://github.com/n8n-io/n8n/commit/81dd215ff96d1db2dc5068793f9bebeb84a557fa)) +* **core:** Fix module path resolution for Docker ([#16623](https://github.com/n8n-io/n8n/issues/16623)) ([b5ba655](https://github.com/n8n-io/n8n/commit/b5ba6558631b30f41fca42b7e3ee5f34221ad603)) +* **core:** Fix pdf extract for arm64 docker images ([#16522](https://github.com/n8n-io/n8n/issues/16522)) ([20e2d8e](https://github.com/n8n-io/n8n/commit/20e2d8e36f0fa68d8a4d6909e8cba828f5de519f)) +* **core:** Fix pdf extract not working ([#16463](https://github.com/n8n-io/n8n/issues/16463)) ([c480d3c](https://github.com/n8n-io/n8n/commit/c480d3cc6a9f015a1262ea52988b32825f05a183)) +* **core:** Handle dynamic webhook edge cases ([#16554](https://github.com/n8n-io/n8n/issues/16554)) ([1573ae6](https://github.com/n8n-io/n8n/commit/1573ae63522ccf72ea63d988ed01eaf82e85376b)) +* **core:** Incorrect data returned by the node when using retry on error + continue on error ([#16516](https://github.com/n8n-io/n8n/issues/16516)) ([f598b3b](https://github.com/n8n-io/n8n/commit/f598b3bf00a37fc9c89639b438bc8f25438fbae0)) +* **core:** Prevent unauthorised workflow termination ([#16405](https://github.com/n8n-io/n8n/issues/16405)) ([29752ea](https://github.com/n8n-io/n8n/commit/29752ead000ac002ba3606ddda15b552ad2d3048)) +* **core:** Reset destination node after partial execution of tools ([#16376](https://github.com/n8n-io/n8n/issues/16376)) ([c365327](https://github.com/n8n-io/n8n/commit/c3653275f2cc7b3934c221a74e0f118e317cbb70)) +* **core:** Show correct error messages when nodes can't be used in an expression ([#16549](https://github.com/n8n-io/n8n/issues/16549)) ([48644ca](https://github.com/n8n-io/n8n/commit/48644ca2f8bb0c1c2bf85edfda8d704d92cc2fb8)) +* **editor:** Fix and enable copying to clipboard in PiP ([#15632](https://github.com/n8n-io/n8n/issues/15632)) ([f9f0fdf](https://github.com/n8n-io/n8n/commit/f9f0fdf40dddd84d52c5cdb7ea58c98d9cf862e0)) +* **editor:** Fix keyboard shortcut bugs in the log view ([#16393](https://github.com/n8n-io/n8n/issues/16393)) ([4acebab](https://github.com/n8n-io/n8n/commit/4acebabb4fcff0cc982f8360e36fdbfda871982f)) +* **editor:** Fix log view style bugs ([#16312](https://github.com/n8n-io/n8n/issues/16312)) ([58a5564](https://github.com/n8n-io/n8n/commit/58a556430c982e3b7db12d8dfb59f55cc4609a18)) +* **editor:** Make adjustments to status icon and connector port position in canvas ([#16469](https://github.com/n8n-io/n8n/issues/16469)) ([3ea51c1](https://github.com/n8n-io/n8n/commit/3ea51c11cb264fe5be036d81c068633e933f9b26)) +* **editor:** New quick start video URL ([#16546](https://github.com/n8n-io/n8n/issues/16546)) ([a9688b1](https://github.com/n8n-io/n8n/commit/a9688b101ff6cac439070d045ee6f5bec321e627)) +* **editor:** Quick fix to password change form validation ([#16565](https://github.com/n8n-io/n8n/issues/16565)) ([ef28d25](https://github.com/n8n-io/n8n/commit/ef28d25ba2d4e00b86ccc8db94cbc236f7ce1dbd)) +* **editor:** Recommend Simple Vector Store even if WF has no AI nodes ([#16514](https://github.com/n8n-io/n8n/issues/16514)) ([7d8049b](https://github.com/n8n-io/n8n/commit/7d8049b7f9ea9ea1500034ec3483d1c63d9a5136)) +* **editor:** Set workflow project to be shown in the breadcrumb ([#16586](https://github.com/n8n-io/n8n/issues/16586)) ([d23e101](https://github.com/n8n-io/n8n/commit/d23e1016a8ec9e2b78a0454fff514a8065a670e3)) +* **Embeddings Google Gemini Node:** Use credential host as baseUrl ([#16615](https://github.com/n8n-io/n8n/issues/16615)) ([662ac1b](https://github.com/n8n-io/n8n/commit/662ac1bb5732cec7e22fbe109621d85b00a4a9ad)) +* **Execute Sub-workflow Node:** Don't expose the file contens when reading the workflow from a file and it's not valid JSON ([#16416](https://github.com/n8n-io/n8n/issues/16416)) ([879d204](https://github.com/n8n-io/n8n/commit/879d204bdbefa064868dd540e66512f5d497fd91)) +* Fix examples for `Array#includes` method ([#16360](https://github.com/n8n-io/n8n/issues/16360)) ([16b0297](https://github.com/n8n-io/n8n/commit/16b0297f8558aad0ef259a15fe220dedc47f25c9)) +* Fix paired item for Merge node with mode=chooseBranch ([#16552](https://github.com/n8n-io/n8n/issues/16552)) ([921f20a](https://github.com/n8n-io/n8n/commit/921f20a28378e2ab2a1f6c19de2ca460c9afc919)) +* Fix paired item handling of multiple inputs ([#16309](https://github.com/n8n-io/n8n/issues/16309)) ([083073e](https://github.com/n8n-io/n8n/commit/083073e541ccb91c1c77d1ec3442655e843aed3d)) +* Fix paired item handling of multiple inputs ([#16479](https://github.com/n8n-io/n8n/issues/16479)) ([95f8602](https://github.com/n8n-io/n8n/commit/95f860231edea49f9535ac4aa8bfdf5a3e8d2b81)) +* **GitHub Node:** Tolerate trailing slash in file path ([#15517](https://github.com/n8n-io/n8n/issues/15517)) ([2f6896c](https://github.com/n8n-io/n8n/commit/2f6896cc7bcf7349582dd26657871684577bbafb)) +* **Google Ads Node:** Migrate from deprecated v17 API ([#16388](https://github.com/n8n-io/n8n/issues/16388)) ([bdc6e0f](https://github.com/n8n-io/n8n/commit/bdc6e0f784f7834f0ee23ff9f8abe93aa9034fa2)) +* **MongoDB Atlas Vector Store Node:** Old credentials used even after credentials are updated/changed ([#16471](https://github.com/n8n-io/n8n/issues/16471)) ([9346463](https://github.com/n8n-io/n8n/commit/9346463c6bd353e50ed769a8fc633042b434b85f)) +* **n8n Form Node:** Prevent XSS with video and source tags ([#16329](https://github.com/n8n-io/n8n/issues/16329)) ([759e555](https://github.com/n8n-io/n8n/commit/759e5559931779a2adb8a6c47e85947fac09950a)) +* **n8n Form Node:** Update Breaking Changes Doc ([#16392](https://github.com/n8n-io/n8n/issues/16392)) ([549a541](https://github.com/n8n-io/n8n/commit/549a5412195098a3a736111c35d1ff015361588c)) +* **n8n Form Node:** Update version in Breaking Changes doc ([#16418](https://github.com/n8n-io/n8n/issues/16418)) ([04bdd01](https://github.com/n8n-io/n8n/commit/04bdd01a42556c193133e94ff2e5e438feefc38e)) +* **Notion Node:** Typo in the condition type ([#16525](https://github.com/n8n-io/n8n/issues/16525)) ([e413af4](https://github.com/n8n-io/n8n/commit/e413af46ceca1e89a73ac4718d15b9c4845b5358)) +* **Stripe Trigger Node:** Adds API version specification ([#16232](https://github.com/n8n-io/n8n/issues/16232)) ([2efd21e](https://github.com/n8n-io/n8n/commit/2efd21e0834c244f3c3d7a642d137d6df873ef6a)) +* **Telegram Node:** "source.on is not a function" in Telegram with binary file and Reply Markup ([#16458](https://github.com/n8n-io/n8n/issues/16458)) ([4661e03](https://github.com/n8n-io/n8n/commit/4661e03f9387627dc257cd71880b42ad21eeb828)) +* When community node added as tool, don't show details view ([#16539](https://github.com/n8n-io/n8n/issues/16539)) ([dadbd5f](https://github.com/n8n-io/n8n/commit/dadbd5fafe744259cfea3d368c334b0a397894f5)) + + +### Features + +* Add model selector node ([#16371](https://github.com/n8n-io/n8n/issues/16371)) ([79650ea](https://github.com/n8n-io/n8n/commit/79650ea55add39e13791045d1caed45a46801290)) +* **core:** Add queue events to log streaming ([#16427](https://github.com/n8n-io/n8n/issues/16427)) ([93ac46c](https://github.com/n8n-io/n8n/commit/93ac46c581d0d5a36664cdbbe36ddfe7f12e5b0f)) +* **core:** Extend user list to allow expanding the user list to projects ([#16314](https://github.com/n8n-io/n8n/issues/16314)) ([c0d1ff6](https://github.com/n8n-io/n8n/commit/c0d1ff6e4c6cd973011f17404b100f0381b52797)) +* **editor:** Add OIDC paywall ([#16347](https://github.com/n8n-io/n8n/issues/16347)) ([1da3c70](https://github.com/n8n-io/n8n/commit/1da3c70507f86fc59a9c43eb43fd89c3628b7ee6)) +* **editor:** Add Support for Granular Push of Credentials and Workflows ([#16439](https://github.com/n8n-io/n8n/issues/16439)) ([49b9439](https://github.com/n8n-io/n8n/commit/49b9439ec00a1153ede94f7d6787791e9b8a4d9d)) +* **editor:** Add tracking on oidc save setting ([#16378](https://github.com/n8n-io/n8n/issues/16378)) ([62a33e8](https://github.com/n8n-io/n8n/commit/62a33e8074a40fd3fbe6b840cc420dc3cae14e17)) +* **MCP Server Trigger Node:** Terminate sessions on DELETE request ([#16550](https://github.com/n8n-io/n8n/issues/16550)) ([3969425](https://github.com/n8n-io/n8n/commit/3969425925b0f67d6d95d8295c80f0b2315c0465)) +* **Token Splitter Node:** Replace remote tiktoken encoding with local implementation ([#16548](https://github.com/n8n-io/n8n/issues/16548)) ([2d63802](https://github.com/n8n-io/n8n/commit/2d638023be75819ee11b1d5e0a6768c6b61dc8b7)) + + + +# [1.99.0](https://github.com/n8n-io/n8n/compare/n8n@1.98.0...n8n@1.99.0) (2025-06-16) + + +### Bug Fixes + +* **AWS Bedrock Chat Model Node:** Update LangChain AWS package ([#16323](https://github.com/n8n-io/n8n/issues/16323)) ([24e4be1](https://github.com/n8n-io/n8n/commit/24e4be1ece1f5c1911f27b572862e7a2c95447bf)) +* **core:** Always save evaluation executions ([#16285](https://github.com/n8n-io/n8n/issues/16285)) ([739ad85](https://github.com/n8n-io/n8n/commit/739ad853cd81b108171e91488dad95cd0a2db5c1)) +* **core:** Fix http requests by using correct agent ([#16258](https://github.com/n8n-io/n8n/issues/16258)) ([e58de1a](https://github.com/n8n-io/n8n/commit/e58de1a6e48868356e4e706effd384cdf5073652)) +* **core:** Prevent DoS via malformed binary data ID ([#16229](https://github.com/n8n-io/n8n/issues/16229)) ([43c52a8](https://github.com/n8n-io/n8n/commit/43c52a8b4f844e91b02e3cc9df92826a2d7b6052)) +* **core:** Register transition handlers after modules init ([#16308](https://github.com/n8n-io/n8n/issues/16308)) ([7177e3a](https://github.com/n8n-io/n8n/commit/7177e3aab082cc7964698221a9440cd92dfaed03)) +* **core:** Remove duplicated logs for insights ([#16228](https://github.com/n8n-io/n8n/issues/16228)) ([56b16b8](https://github.com/n8n-io/n8n/commit/56b16b8c0fb4cff4d51134ef532dede4ccac2707)) +* **editor:** Cannot expand sub execution log if it finished with an error ([#16236](https://github.com/n8n-io/n8n/issues/16236)) ([3fcabd4](https://github.com/n8n-io/n8n/commit/3fcabd40b3ea0a311dc55f35e5c6f72c2f53efa7)) +* **editor:** Fix inaccurate message in log view when input data is empty ([#16234](https://github.com/n8n-io/n8n/issues/16234)) ([e93fd1a](https://github.com/n8n-io/n8n/commit/e93fd1a68931eba43e7cdd0902543b056c0ab40a)) +* **editor:** Fix pagination and sorting issue for insights ([#16288](https://github.com/n8n-io/n8n/issues/16288)) ([84c51b1](https://github.com/n8n-io/n8n/commit/84c51b1bd96b2a66cfb4953b349df73ce65cf29c)) +* **editor:** Logs not shown when tools are partially executed ([#16274](https://github.com/n8n-io/n8n/issues/16274)) ([b2eb333](https://github.com/n8n-io/n8n/commit/b2eb33351f4eec0dfafcc8fb22b093779facd8f4)) +* **editor:** Prevent node renaming to restricted JS method names ([#16270](https://github.com/n8n-io/n8n/issues/16270)) ([ecfb667](https://github.com/n8n-io/n8n/commit/ecfb6674efb657e27771785f1e0cdb890c0c78da)) +* **editor:** Support renaming node in HTML parameters ([#16315](https://github.com/n8n-io/n8n/issues/16315)) ([88e3c90](https://github.com/n8n-io/n8n/commit/88e3c90e7136acdaf712c79fbd23d484d2d88f66)) +* Fix paired item handling of multiple inputs ([#16153](https://github.com/n8n-io/n8n/issues/16153)) ([50e00cd](https://github.com/n8n-io/n8n/commit/50e00cdd6ac9f36e445f2b290e3b39ee7848fa13)) +* **Gmail Node:** Do not break threads while creating drafts ([#16272](https://github.com/n8n-io/n8n/issues/16272)) ([113d94c](https://github.com/n8n-io/n8n/commit/113d94cea2956dafcecff2bb33df15d417daeb40)) +* **HTTP Request Node:** Process text files ([#16226](https://github.com/n8n-io/n8n/issues/16226)) ([0d5ac1f](https://github.com/n8n-io/n8n/commit/0d5ac1f82262e1c32b4d3d7168f433359f4a1b87)) +* Postgres node with ssh tunnel getting into a broken state and not being recreated ([#16054](https://github.com/n8n-io/n8n/issues/16054)) ([879114b](https://github.com/n8n-io/n8n/commit/879114b572d4c3ef969f1e4495eedcbef486c3d6)) +* Run evaluations as full manual executions in queue mode ([#16230](https://github.com/n8n-io/n8n/issues/16230)) ([e363458](https://github.com/n8n-io/n8n/commit/e36345824f2e5c3fd79ff9e27fe3d68bcee999fd)) +* Run evaluations successfully when offload manual executions is true with queue mode ([#16307](https://github.com/n8n-io/n8n/issues/16307)) ([aa27374](https://github.com/n8n-io/n8n/commit/aa273745ecdb45070f028a03fbd339dc3a15ce56)) + + +### Features + +* **Chat Trigger Node:** Fix CSS variable `--chat--message--font-size` not applying correctly ([#16310](https://github.com/n8n-io/n8n/issues/16310)) ([ab8a2b0](https://github.com/n8n-io/n8n/commit/ab8a2b0f7ed91bc2bcd084b9dc94e76a3426da8a)) +* **core:** Add description to projects ([#15611](https://github.com/n8n-io/n8n/issues/15611)) ([1ddbb78](https://github.com/n8n-io/n8n/commit/1ddbb78909a06c46e2bee640c85bf7670d85b8d5)) +* **core:** Add number of tokens and latency automatically as metrics in evaluation ([#16243](https://github.com/n8n-io/n8n/issues/16243)) ([eff0571](https://github.com/n8n-io/n8n/commit/eff0571f42b979146d1198d6ca7c010c0013067d)) +* **core:** Add OIDC support for SSO ([#15988](https://github.com/n8n-io/n8n/issues/15988)) ([30148df](https://github.com/n8n-io/n8n/commit/30148df7f3fd7b49660d1f4635a577d9bb80e964)) +* **core:** Add task runner events to log streaming ([#16265](https://github.com/n8n-io/n8n/issues/16265)) ([46723d3](https://github.com/n8n-io/n8n/commit/46723d3518b4d37e51363e49fae2216a4cb96e08)) +* **core:** Handle scoped resource not existing with 404 ([#16022](https://github.com/n8n-io/n8n/issues/16022)) ([42b9a8a](https://github.com/n8n-io/n8n/commit/42b9a8a0e7c935af4153f6d3ccdbf06ba2545b20)) +* **editor:** Add access control and not found entity views ([#15860](https://github.com/n8n-io/n8n/issues/15860)) ([80a784a](https://github.com/n8n-io/n8n/commit/80a784a50c64c24c704f718633569c941549a4e6)) +* **editor:** Add RAG starter template callouts experiment ([#16282](https://github.com/n8n-io/n8n/issues/16282)) ([d0a313a](https://github.com/n8n-io/n8n/commit/d0a313aa1cdafdc49afdf5fbb036209cf92c4a3b)) +* **editor:** Change default node names depending on node operation and resource ([#16188](https://github.com/n8n-io/n8n/issues/16188)) ([4e94488](https://github.com/n8n-io/n8n/commit/4e94488622c381e5c762d432419fd49e8a92c022)) +* **editor:** Move element plus plugin config to design system test setup ([#16319](https://github.com/n8n-io/n8n/issues/16319)) ([3864f0e](https://github.com/n8n-io/n8n/commit/3864f0e1c1954138311ed363a10ec30a3a63950d)) +* **editor:** Remember different panel state for sub nodes ([#16189](https://github.com/n8n-io/n8n/issues/16189)) ([b9e0351](https://github.com/n8n-io/n8n/commit/b9e03515bd6f3d048e4df9d312366e40eb7cc123)) +* **editor:** Show node type on hover over node icon in NDV ([#16278](https://github.com/n8n-io/n8n/issues/16278)) ([396da25](https://github.com/n8n-io/n8n/commit/396da25c625617d111a64ef44b52e41335ae81fb)) +* **Linear Node:** Add options to add a link and a comment to an issue ([#13464](https://github.com/n8n-io/n8n/issues/13464)) ([a417ed3](https://github.com/n8n-io/n8n/commit/a417ed3ac81bbc39b5cee7b065a0fd13214b3490)) +* **MCP Server Trigger Node:** Support for Streamable HTTP transport in MCP Server ([#15833](https://github.com/n8n-io/n8n/issues/15833)) ([8d6e796](https://github.com/n8n-io/n8n/commit/8d6e796b9225c7b85ab3b1c67eec0dd6b31d6775)) + + +### Performance Improvements + +* **core:** Lazyload AI workflow builder's langchain dependencies ([#16178](https://github.com/n8n-io/n8n/issues/16178)) ([f0cf6dc](https://github.com/n8n-io/n8n/commit/f0cf6dcbcdfaae86233c6fdac8795bd7f2111d3c)) +* **core:** Skip init for unlicensed modules ([#16311](https://github.com/n8n-io/n8n/issues/16311)) ([cb81826](https://github.com/n8n-io/n8n/commit/cb81826cf16a215e1da08432e5bb6ce29db1099e)) + + + +# [1.98.0](https://github.com/n8n-io/n8n/compare/n8n@1.97.0...n8n@1.98.0) (2025-06-11) + + +### Bug Fixes + +* Add a missing word to tooltip ([#16198](https://github.com/n8n-io/n8n/issues/16198)) ([0cfe6ee](https://github.com/n8n-io/n8n/commit/0cfe6eeb5de593093582c67842d4df37aaacc6c2)) +* **AI Agent Node:** Allow using LangChain code node as a model for AI Agent ([#16096](https://github.com/n8n-io/n8n/issues/16096)) ([cb3bb91](https://github.com/n8n-io/n8n/commit/cb3bb915df88e2037969cd5664508e377b0f69fa)) +* **Anthropic Chat Model Node:** Fix LmChatAnthropic node to work when both thinking is enabled and tools used ([#16010](https://github.com/n8n-io/n8n/issues/16010)) ([e662998](https://github.com/n8n-io/n8n/commit/e662998c67795fcce397fef6989ba9a8d79b2b6f)) +* **Chat Memory Manager Node:** Fix simplifyMessages to not overwrite consecutive messages of same type ([#16168](https://github.com/n8n-io/n8n/issues/16168)) ([5015290](https://github.com/n8n-io/n8n/commit/5015290dbeb29aac2a5f1cc3b25937661d9b458d)) +* **Code Node:** Block selected module imports in python code ([#15970](https://github.com/n8n-io/n8n/issues/15970)) ([1e92729](https://github.com/n8n-io/n8n/commit/1e927294923d96b7d7c972cb35078df79a673822)) +* **core:** Correctly apply maxRows limit when fetching the dataset ([#16176](https://github.com/n8n-io/n8n/issues/16176)) ([09fd5c0](https://github.com/n8n-io/n8n/commit/09fd5c01d4f044a30f9fedf7c0f3f7be1acd5313)) +* **core:** Don't load task-runner on main instances when manual executions are offloaded to workers ([#15986](https://github.com/n8n-io/n8n/issues/15986)) ([23ce60d](https://github.com/n8n-io/n8n/commit/23ce60d6466b387df50688c29c0db63c899922c0)) +* **core:** Don't swallow connection errors when fetching credentials ([#16181](https://github.com/n8n-io/n8n/issues/16181)) ([9f83fcc](https://github.com/n8n-io/n8n/commit/9f83fccac1909a3ca8792bd96a88b538f20476fb)) +* **core:** Ensure queue is ready when enqueueing ([#16098](https://github.com/n8n-io/n8n/issues/16098)) ([25567f6](https://github.com/n8n-io/n8n/commit/25567f6f0efde0f8725ecf68d6e6b930c368e554)) +* **core:** Fix HTTP proxy support in all nodes and other axios requests ([#16092](https://github.com/n8n-io/n8n/issues/16092)) ([e3675bd](https://github.com/n8n-io/n8n/commit/e3675bdfb41d372ddd5dcb9f8609416274b96309)) +* **core:** Prevent worker from recovering finished executions ([#16094](https://github.com/n8n-io/n8n/issues/16094)) ([53b6812](https://github.com/n8n-io/n8n/commit/53b681259255a695b3b6e8c581c88282877ac3ed)) +* **core:** Prometheus metrics can't be ingested by datadog ([#15910](https://github.com/n8n-io/n8n/issues/15910)) ([d00060a](https://github.com/n8n-io/n8n/commit/d00060adadfe1631384ccaebd35c00a2faa63fde)) +* **core:** Resolves response promise for active execution on job finished in queue mode ([#15643](https://github.com/n8n-io/n8n/issues/15643)) ([7cd7883](https://github.com/n8n-io/n8n/commit/7cd7883b34893a904315f9e65aff2bf3497f99e2)) +* **core:** Start insights collection timer for webhook instances ([#15964](https://github.com/n8n-io/n8n/issues/15964)) ([7a67dcb](https://github.com/n8n-io/n8n/commit/7a67dcb6861c3e38796a0a68daa0e33ed603b3c7)) +* **core:** Unloading a community package should also unload all its files from `require.cache` ([#16072](https://github.com/n8n-io/n8n/issues/16072)) ([8c63ca7](https://github.com/n8n-io/n8n/commit/8c63ca7d57761cf0a3168a6f7da102426134d1fc)) +* Detect if n8n instance is staging or production for community nodes ([#15918](https://github.com/n8n-io/n8n/issues/15918)) ([63cf9af](https://github.com/n8n-io/n8n/commit/63cf9afe6501d5b23443551911311536a9fb9538)) +* **editor:** Add right margin to AI Assistant Code Node 'Fix Error' replace code button icon ([#15956](https://github.com/n8n-io/n8n/issues/15956)) ([ebff88c](https://github.com/n8n-io/n8n/commit/ebff88cb44c470d7802a6a353a08de6a7b97f683)) +* **editor:** Add user role tooltip to personal settings page ([#15941](https://github.com/n8n-io/n8n/issues/15941)) ([2c9c3da](https://github.com/n8n-io/n8n/commit/2c9c3dab3360f6eee697a6571ce2de80e32f091c)) +* **editor:** Add visual-only `waitingForNext` execution state for slow networks ([#16143](https://github.com/n8n-io/n8n/issues/16143)) ([5deab75](https://github.com/n8n-io/n8n/commit/5deab75c7ddbc818e5d0cee4e2b85352ab682538)) +* **editor:** Fix regExp to allow "." in Git repository URL (SSH) ([#15972](https://github.com/n8n-io/n8n/issues/15972)) ([88caa21](https://github.com/n8n-io/n8n/commit/88caa21bb4b667915afc8ec5bb4d2f9e0ec6b6e0)) +* **editor:** Fix the issue that the content of json, html, csv, md, txt, and css files contained garbled Chinese characters when clicking the view button ([#16118](https://github.com/n8n-io/n8n/issues/16118)) ([cdab4c1](https://github.com/n8n-io/n8n/commit/cdab4c1bc698e3ebfffe7cd93eec3baa225062a8)) +* **editor:** Fix the issue with icon Emojis not being centered ([#16067](https://github.com/n8n-io/n8n/issues/16067)) ([b7d3945](https://github.com/n8n-io/n8n/commit/b7d394542f5cdac0c7e05f286ae30390695cacb5)) +* **editor:** Hide the Github stars button when telemetry is disabled ([#16108](https://github.com/n8n-io/n8n/issues/16108)) ([b92d8ad](https://github.com/n8n-io/n8n/commit/b92d8ad1e16e72911385a834643d89a8970cad48)) +* **editor:** In Sub-workflow Conversion handle standalone accessor and accessor[0] cases correctly ([#16086](https://github.com/n8n-io/n8n/issues/16086)) ([eb71c41](https://github.com/n8n-io/n8n/commit/eb71c41e9340d46ddf4f74b3622caaf404e4c3f5)) +* **editor:** Log view is missing in debug mode ([#16170](https://github.com/n8n-io/n8n/issues/16170)) ([6703554](https://github.com/n8n-io/n8n/commit/670355420d6cb42d4d1775138a485bfc542aa79f)) +* **editor:** Maintain back button when installing community nodes ([#16069](https://github.com/n8n-io/n8n/issues/16069)) ([7492944](https://github.com/n8n-io/n8n/commit/7492944a37584d510940f8ee0a2f77fc6ff6a8cd)) +* **editor:** Mark workflow as unsaved when reverting deletion of a node ([#15959](https://github.com/n8n-io/n8n/issues/15959)) ([9cf7293](https://github.com/n8n-io/n8n/commit/9cf729399093d46d207d89c60de8472e9d2043a7)) +* **editor:** Position executions filter popover so that it doesn't hide executions ([#16049](https://github.com/n8n-io/n8n/issues/16049)) ([576ff4d](https://github.com/n8n-io/n8n/commit/576ff4d3b89b62f4c125074e05e011a7453033ae)) +* **editor:** Prevent Ask Assistant button overlapping other buttons ([#16066](https://github.com/n8n-io/n8n/issues/16066)) ([4426249](https://github.com/n8n-io/n8n/commit/4426249950c465d273ffca893845a748a4d89d26)) +* **editor:** Refresh NDV node connections if inputs change dynamically ([#16023](https://github.com/n8n-io/n8n/issues/16023)) ([02ed7b6](https://github.com/n8n-io/n8n/commit/02ed7b663184276a1aac96b3cd5b6fa54e554baa)) +* **editor:** Send evaluation telemetry event to Posthog ([#16040](https://github.com/n8n-io/n8n/issues/16040)) ([d59b9b5](https://github.com/n8n-io/n8n/commit/d59b9b528ea547a2f1286796ff1a64f02f85686f)) +* **editor:** Stop nefarious redirects during sign in ([#16034](https://github.com/n8n-io/n8n/issues/16034)) ([4865d1e](https://github.com/n8n-io/n8n/commit/4865d1e360a0fe7b045e295b5e1a29daad12314e)) +* **editor:** Stop nefarious URL redirection in editor middleware ([#16047](https://github.com/n8n-io/n8n/issues/16047)) ([2178cfe](https://github.com/n8n-io/n8n/commit/2178cfe625373aec07c8a60f105e41ed399d7eaa)) +* **Email Trigger (IMAP) Node:** Add Email UID also to email format "resolved" ([#15539](https://github.com/n8n-io/n8n/issues/15539)) ([33f8fab](https://github.com/n8n-io/n8n/commit/33f8fab7914d6dba476cc52c9373e4f7a53bb404)) +* **Google Sheets Node:** Improve error message when row_number is null or undefined ([#14560](https://github.com/n8n-io/n8n/issues/14560)) ([47538e1](https://github.com/n8n-io/n8n/commit/47538e17ef8ca3959c40285669b16e300f7a075b)) +* **Local File Trigger Node:** Fix ignored option on Mac os ([#15872](https://github.com/n8n-io/n8n/issues/15872)) ([aa40735](https://github.com/n8n-io/n8n/commit/aa407350bbf14e0b6a76ad386ab6f211a9e4a77b)) +* Make sure modals are listed when using a free AI credits credential in the OpenAI node ([#16030](https://github.com/n8n-io/n8n/issues/16030)) ([7f7b44a](https://github.com/n8n-io/n8n/commit/7f7b44ae7c11742357d55e64ea44fbc0ae3f8f54)) +* **Microsoft SQL Node:** Handle connection errors correctly with continueOnFail ([#15962](https://github.com/n8n-io/n8n/issues/15962)) ([4c9198d](https://github.com/n8n-io/n8n/commit/4c9198df3733657f2deb9c37885ffaa46eab372b)) +* **RSS Read Node:** Fix issue where some feeds fail to load ([#16001](https://github.com/n8n-io/n8n/issues/16001)) ([18c355d](https://github.com/n8n-io/n8n/commit/18c355d85fe00cc9b5807b7aa28c031185c6f312)) +* **Supabase Vector Store Node:** Upgrade supabase SDK to address CVE-2025-48370 ([#15934](https://github.com/n8n-io/n8n/issues/15934)) ([21141b4](https://github.com/n8n-io/n8n/commit/21141b441f3d68eaa891e31db1a6335a062af1c6)) +* Update NPM to address security vulnerability ([#15968](https://github.com/n8n-io/n8n/issues/15968)) ([2e18e07](https://github.com/n8n-io/n8n/commit/2e18e0707024b70d3cdf445ddb41277c195535b7)) + + +### Features + +* Add Cohere reranking capability to vector stores ([#16014](https://github.com/n8n-io/n8n/issues/16014)) ([8a1cabe](https://github.com/n8n-io/n8n/commit/8a1cabe62ab988d338fb52ee3dcb41192ba3a6a7)) +* Add custom CSS to response form for HITL nodes ([#15807](https://github.com/n8n-io/n8n/issues/15807)) ([3f48106](https://github.com/n8n-io/n8n/commit/3f4810615b54896e8e0900c7e68e68d819fb3b15)) +* **core:** Add config to override default database ping interval and default idle connection timeout ([#15764](https://github.com/n8n-io/n8n/issues/15764)) ([ac06610](https://github.com/n8n-io/n8n/commit/ac0661048524dcf1e203506dd7ff963d0db74587)) +* **core:** Add support for partial-match execution filters ([#15797](https://github.com/n8n-io/n8n/issues/15797)) ([1335af0](https://github.com/n8n-io/n8n/commit/1335af05d569d90fb51199bb4deb62abaefb99cc)) +* **core:** Allow logging JSON to stdout ([#15766](https://github.com/n8n-io/n8n/issues/15766)) ([8abd556](https://github.com/n8n-io/n8n/commit/8abd5565970bb76e585ada0431c3e59081391e2b)) +* **core:** Dynamic max page size limit for pagination dto ([#16100](https://github.com/n8n-io/n8n/issues/16100)) ([5c748ca](https://github.com/n8n-io/n8n/commit/5c748ca25d07aed8b9905b4a042917286fb06f17)) +* **core:** Link 'Error Trigger' nodes to the parent execution that errored ([#16016](https://github.com/n8n-io/n8n/issues/16016)) ([d64f2e5](https://github.com/n8n-io/n8n/commit/d64f2e57f7ab2f93328e56b1e46fef5e4a14e221)) +* **core:** Validate commit content for project admin role ([#15687](https://github.com/n8n-io/n8n/issues/15687)) ([9607908](https://github.com/n8n-io/n8n/commit/9607908c042a336bf9a1fb2b63b7e6e78a5c4243)) +* **Default Data Loader Node:** Add default text splitter ([#15786](https://github.com/n8n-io/n8n/issues/15786)) ([40850c9](https://github.com/n8n-io/n8n/commit/40850c95b680a54f16fe8133ff7b801008879df2)) +* **Default Data Loader Node:** Minor copy changes ([#16053](https://github.com/n8n-io/n8n/issues/16053)) ([4a6bcff](https://github.com/n8n-io/n8n/commit/4a6bcffc7069afd8d137fd90c563dbe5999597ec)) +* **editor:** Add "Change owner" option to editor ([#15792](https://github.com/n8n-io/n8n/issues/15792)) ([5bc4e5d](https://github.com/n8n-io/n8n/commit/5bc4e5d846519080c8a3be5c662b046559433ab5)) +* **editor:** Change default node names depending on node operation and resource ([#15954](https://github.com/n8n-io/n8n/issues/15954)) ([c92701c](https://github.com/n8n-io/n8n/commit/c92701cbdff41bd951b1b2ef55e4991876da5045)) +* **editor:** Enable source environment push button for project admins ([#15527](https://github.com/n8n-io/n8n/issues/15527)) ([2f64809](https://github.com/n8n-io/n8n/commit/2f648098fd1687c8d4ac00341ff54bb1a92deeb9)) +* **editor:** Improve UI for highlighted data, tags and rating in executions ([#15926](https://github.com/n8n-io/n8n/issues/15926)) ([9abb333](https://github.com/n8n-io/n8n/commit/9abb333507453e4671cd886db9f674b1957d7d5c)) +* **editor:** Make ‘Execute workflow’ a split button ([#15933](https://github.com/n8n-io/n8n/issues/15933)) ([ac1a1df](https://github.com/n8n-io/n8n/commit/ac1a1dfbc208782c032527a2ed57975c80d7274b)) +* **editor:** Rename debugging tab to fromai ([#16017](https://github.com/n8n-io/n8n/issues/16017)) ([bc44baa](https://github.com/n8n-io/n8n/commit/bc44baa7366b38235ca52e453b0e5538c2d2a688)) +* **editor:** Use node name as tool name at Vector Store retriever tool nodes ([#15917](https://github.com/n8n-io/n8n/issues/15917)) ([a9f8b2d](https://github.com/n8n-io/n8n/commit/a9f8b2d46a2fc03633a2a6b8ca431a91e8e0cfce)) +* **n8n Node:** Add missing filters ([#15437](https://github.com/n8n-io/n8n/issues/15437)) ([b07c52e](https://github.com/n8n-io/n8n/commit/b07c52e5777f114fc54c4bb0a280d94d06dd6a43)) +* **OpenAI Chat Model Node:** Update default model to gpt-4.1-mini ([#15975](https://github.com/n8n-io/n8n/issues/15975)) ([0bea193](https://github.com/n8n-io/n8n/commit/0bea1938141e33e851838375ee5038f0c2862b00)) +* **Structured Output Parser Node:** Add auto-fix support to Strucutred Output Parser ([#15915](https://github.com/n8n-io/n8n/issues/15915)) ([4f07ac3](https://github.com/n8n-io/n8n/commit/4f07ac394b99e99469c5cca5558e950a08d9e171)) +* **Structured Output Parser Node:** Add notice about $refs support in JSON schema ([#15973](https://github.com/n8n-io/n8n/issues/15973)) ([47ad74d](https://github.com/n8n-io/n8n/commit/47ad74d1375e8c2603733187fceed151a4b7a8a8)) +* **Structured Output Parser Node:** Mark all parameters as required for schemas generated from JSON example ([#15935](https://github.com/n8n-io/n8n/issues/15935)) ([7711e4b](https://github.com/n8n-io/n8n/commit/7711e4b052a5a452eff79dc9af3a93adb3fdae1c)) +* **Vector Store Retriever Node:** Add reranker support to retriever for QA chain ([#16051](https://github.com/n8n-io/n8n/issues/16051)) ([969552a](https://github.com/n8n-io/n8n/commit/969552aeae96ca6c27537b32c1618f91c2c1075a)) + + +### Performance Improvements + +* **core:** Load source control only if licensed ([#15908](https://github.com/n8n-io/n8n/issues/15908)) ([d7e94eb](https://github.com/n8n-io/n8n/commit/d7e94eb46c4482e7f0053ec5db2de7e1ad011a6e)) +* **core:** Populate cache only with static webhooks ([#16048](https://github.com/n8n-io/n8n/issues/16048)) ([a18822a](https://github.com/n8n-io/n8n/commit/a18822af0ee974bba783ca3c4b0def65fde04b15)) + + + +# [1.97.0](https://github.com/n8n-io/n8n/compare/n8n@1.96.0...n8n@1.97.0) (2025-06-02) + + +### Bug Fixes + +* **core:** Allow dotfiles in sendFile to fix WorkFlow settings 404 error ([#14744](https://github.com/n8n-io/n8n/issues/14744)) ([7928a9b](https://github.com/n8n-io/n8n/commit/7928a9b3c26e676dd77e24aae98054e1ecbbb37b)) +* **core:** Honor absolute paths for `N8N_LOG_FILE_LOCATION` ([#15873](https://github.com/n8n-io/n8n/issues/15873)) ([1e5b905](https://github.com/n8n-io/n8n/commit/1e5b90571d380bb674071d988147d3e854728e41)) +* **core:** Normalize trailing slash when setting CORS headers for test webhooks ([#15906](https://github.com/n8n-io/n8n/issues/15906)) ([61d0c6a](https://github.com/n8n-io/n8n/commit/61d0c6a6e7f1ad5dd1795a0e1f910425d6e2fc8f)) + + +### Performance Improvements + +* **core:** Lazyload LDAP during bootup ([#15907](https://github.com/n8n-io/n8n/issues/15907)) ([31b6f32](https://github.com/n8n-io/n8n/commit/31b6f32a363da2b199eff135f4f1fbe227ef47c6)) + + + +# [1.96.0](https://github.com/n8n-io/n8n/compare/n8n@1.95.0...n8n@1.96.0) (2025-06-02) + + +### Bug Fixes + +* **API:** Allow `false` as a dependant value for public api json schema validation ([#15858](https://github.com/n8n-io/n8n/issues/15858)) ([5a8899c](https://github.com/n8n-io/n8n/commit/5a8899c4c980cbb6276c96199e20cc160c775038)) +* Check if form trigger URL is live before oppening pop-up ([#15800](https://github.com/n8n-io/n8n/issues/15800)) ([041ada1](https://github.com/n8n-io/n8n/commit/041ada1fd6b15fc43ceb78a52e9a4b8bb05344d8)) +* **core:** Don't allow creating more projects than allowed by exploiting a race condition ([#15218](https://github.com/n8n-io/n8n/issues/15218)) ([6466e76](https://github.com/n8n-io/n8n/commit/6466e76c06723d181e984d2c185c67eafea68f8a)) +* **core:** Fix sorting of executions not working on postgres and mysql ([#15423](https://github.com/n8n-io/n8n/issues/15423)) ([eca282d](https://github.com/n8n-io/n8n/commit/eca282d09c1641eaa2937acbab40249752d6bb38)) +* **core:** Fix timezone-dependent test failures in Insights weekly compaction ([#15680](https://github.com/n8n-io/n8n/issues/15680)) ([096806a](https://github.com/n8n-io/n8n/commit/096806af154dfb3be8c4724cb054beba4b777792)) +* **core:** Simplify Websocket origin security checks ([#15761](https://github.com/n8n-io/n8n/issues/15761)) ([bbe2b12](https://github.com/n8n-io/n8n/commit/bbe2b12bf2cca1a73e332ace349279f214f1f236)) +* **core:** Solve memory leak in `TaskRequester` ([#15768](https://github.com/n8n-io/n8n/issues/15768)) ([0398505](https://github.com/n8n-io/n8n/commit/039850514387d4966845e6646e2a3e1562a0fc6d)) +* **core:** Support `helpers.request` in task runners ([#15859](https://github.com/n8n-io/n8n/issues/15859)) ([7f8b943](https://github.com/n8n-io/n8n/commit/7f8b943c1ae805807134205eae8ebb24cef5511e)) +* **editor:** Deactivate workflow on save if trigger is missing ([#15642](https://github.com/n8n-io/n8n/issues/15642)) ([3ba6419](https://github.com/n8n-io/n8n/commit/3ba6419710887456a4a6ecc04146721ffce4dcb5)) +* **editor:** Delete all connections of nodes with multiple ones when removed from canvas ([#15713](https://github.com/n8n-io/n8n/issues/15713)) ([c4ea757](https://github.com/n8n-io/n8n/commit/c4ea7578fe3dddc8d480f3abb8cb5f2d064120c0)) +* **editor:** Fix Execute workflow button hover state ([#15518](https://github.com/n8n-io/n8n/issues/15518)) ([57d7b5e](https://github.com/n8n-io/n8n/commit/57d7b5e35edac78caffd27e29108272f0e995969)) +* **editor:** Handle Insights calculations to prevent Infinity numbers ([#15727](https://github.com/n8n-io/n8n/issues/15727)) ([d1a39d9](https://github.com/n8n-io/n8n/commit/d1a39d96bbac78bb5b305e3760a2030311f6d732)) +* **editor:** Move focus to search input in RLC ([#15741](https://github.com/n8n-io/n8n/issues/15741)) ([fee10da](https://github.com/n8n-io/n8n/commit/fee10da95b9444931915146f50a614411d8350bb)) +* **editor:** Set deterministic width for sidebar ([#15753](https://github.com/n8n-io/n8n/issues/15753)) ([3f9a271](https://github.com/n8n-io/n8n/commit/3f9a271e69c0ab6ec1a4f35f57e736e566877adb)) +* **editor:** Simplifying empty project deletion ([#15834](https://github.com/n8n-io/n8n/issues/15834)) ([6bf2d8a](https://github.com/n8n-io/n8n/commit/6bf2d8a4d4a62c3a20129a5e79bf18efa6de80ca)) +* **editor:** Update copy for debug modal paywall ([#15905](https://github.com/n8n-io/n8n/issues/15905)) ([d0ff662](https://github.com/n8n-io/n8n/commit/d0ff66226fdd5af0bab2286360da397367b653a2)) +* **editor:** Use last task data for calculating the current state ([#15546](https://github.com/n8n-io/n8n/issues/15546)) ([1daf0ff](https://github.com/n8n-io/n8n/commit/1daf0ff169468c9afde1ab3f37b241426cfd1db3)) +* **GitHub Node:** Update auth urls for enterprise server ([#15533](https://github.com/n8n-io/n8n/issues/15533)) ([bc66d9f](https://github.com/n8n-io/n8n/commit/bc66d9fb7d757c308fe10b85c1b43913d3cc738a)) +* **Jina AI Node:** Default value for "Output format" option ([#15683](https://github.com/n8n-io/n8n/issues/15683)) ([e125854](https://github.com/n8n-io/n8n/commit/e1258547ad7b0fe50bd5001b52eea0042eb5c4d5)) +* **Microsoft SharePoint Node:** Add back the support for cred only node ([#15806](https://github.com/n8n-io/n8n/issues/15806)) ([0fdeba5](https://github.com/n8n-io/n8n/commit/0fdeba52bb171111d311f6d8bbb1b348ad08ebc9)) +* **n8n Form Node:** Use execution.mode instead of hard coding webhook ([#15647](https://github.com/n8n-io/n8n/issues/15647)) ([636e9f4](https://github.com/n8n-io/n8n/commit/636e9f463fd7ee600e529649e31fdbbfc30234e2)) +* Run evaluations loop manually always from first row ([#15794](https://github.com/n8n-io/n8n/issues/15794)) ([b8ab4b6](https://github.com/n8n-io/n8n/commit/b8ab4b6a5e1adfb9b582d0186b5238b487b5ce5b)) +* Skip subworkflow input test temporarily ([#15803](https://github.com/n8n-io/n8n/issues/15803)) ([ba70cab](https://github.com/n8n-io/n8n/commit/ba70cab9d508405e0c24ac29ad4ea5d585b5482a)) + + +### Features + +* **API:** Add user management endpoints to the Projects Public API ([#12329](https://github.com/n8n-io/n8n/issues/12329)) ([4459c7e](https://github.com/n8n-io/n8n/commit/4459c7e7b10e7e1cd30a8885dd03ad452f846b96)) +* **core:** Allow specifying Content-Security-Policy-Report-Only ([#15805](https://github.com/n8n-io/n8n/issues/15805)) ([c127846](https://github.com/n8n-io/n8n/commit/c12784600fb5acd42fcce10c72f73168d3d2948d)) +* **core:** Start listening to IPv6 addresses as well by default ([#15810](https://github.com/n8n-io/n8n/issues/15810)) ([9f44f40](https://github.com/n8n-io/n8n/commit/9f44f407459cb656a697a8d44a129d1d4cbbbc17)) +* **editor:** Add ability to extract sub-workflows to canvas context menu ([#15538](https://github.com/n8n-io/n8n/issues/15538)) ([5985df6](https://github.com/n8n-io/n8n/commit/5985df6e5166e59e77193cba49607a7d3110deac)) +* **editor:** Combine 'Move to Folder' and 'Change owner' modals ([#15756](https://github.com/n8n-io/n8n/issues/15756)) ([e860dd6](https://github.com/n8n-io/n8n/commit/e860dd6d2eb6a2dac5126bc60006d53b53115a68)) +* **editor:** Support pasting an expression into a number parameter ([#15722](https://github.com/n8n-io/n8n/issues/15722)) ([2a1475d](https://github.com/n8n-io/n8n/commit/2a1475d67125d111b0f2ed602e597fae83d65b56)) +* **MCP Server Trigger Node:** Cleanup MCP server management, use sanitized trigger node's name as name for the MCP server ([#15751](https://github.com/n8n-io/n8n/issues/15751)) ([07a636e](https://github.com/n8n-io/n8n/commit/07a636eed6cb4d1f487018b34632810d24d99824)) +* **Perplexity Node:** New node ([#13604](https://github.com/n8n-io/n8n/issues/13604)) ([6d3e6ee](https://github.com/n8n-io/n8n/commit/6d3e6eef00ed3acf35d376b88ce6586692ae641b)) +* **Respond to Webhook Node:** Setting to configure outputs ([#15619](https://github.com/n8n-io/n8n/issues/15619)) ([be5f14e](https://github.com/n8n-io/n8n/commit/be5f14e31623174b66ef3062aa8f780970c5689f)) + + +### Performance Improvements + +* **core:** Shorten bootup for all instance types ([#15856](https://github.com/n8n-io/n8n/issues/15856)) ([73c9a52](https://github.com/n8n-io/n8n/commit/73c9a529dd5ee8f5e461edfe815a88bb97d86275)) + + + +# [1.95.0](https://github.com/n8n-io/n8n/compare/n8n@1.94.0...n8n@1.95.0) (2025-05-26) + + +### Bug Fixes + +* **Chat Trigger Node:** Don't continue when action is load previous session and option is not set ([#15438](https://github.com/n8n-io/n8n/issues/15438)) ([8fd0738](https://github.com/n8n-io/n8n/commit/8fd0738191f87f5762f23c763f64e86fdd444830)) +* **core:** Add support for proxy using forward headers ([#15006](https://github.com/n8n-io/n8n/issues/15006)) ([b1687c6](https://github.com/n8n-io/n8n/commit/b1687c6be2cbeda0989505f67be3c2a64489c5d0)) +* **core:** Fix community package installation on windows ([#15685](https://github.com/n8n-io/n8n/issues/15685)) ([647cb85](https://github.com/n8n-io/n8n/commit/647cb851e5e7f7b206bede8ac858f6c506b7a8c7)) +* **core:** Fix license reloading flow in scaling mode ([#15650](https://github.com/n8n-io/n8n/issues/15650)) ([c2449ee](https://github.com/n8n-io/n8n/commit/c2449ee2c8fec784e16620eebf936ce008598765)) +* **core:** Use destination node to select the correct pinned trigger to start from ([#15633](https://github.com/n8n-io/n8n/issues/15633)) ([dc0802b](https://github.com/n8n-io/n8n/commit/dc0802bbd1034812a7061d0610acb62986e1f3bf)) +* **editor:** Add type definition for $getWorkflowStaticData to code node ([#15544](https://github.com/n8n-io/n8n/issues/15544)) ([bca03ca](https://github.com/n8n-io/n8n/commit/bca03ca7392b00ce2edd7d829bc23b6d999a0e37)) +* **editor:** Don't mark node as dirty when NDV is opened ([#15222](https://github.com/n8n-io/n8n/issues/15222)) ([8d1170e](https://github.com/n8n-io/n8n/commit/8d1170e3ddc179a6ac1e6efe584cbbce702e11ab)) +* **editor:** Fix how deviation percentage is calculated in Insights summary ([#15526](https://github.com/n8n-io/n8n/issues/15526)) ([26de979](https://github.com/n8n-io/n8n/commit/26de97976aed4d5f11f7e37ca55fc5c1fe283099)) +* **editor:** Fix notification toast offset outside of NodeView if chat/logs were opened ([#15622](https://github.com/n8n-io/n8n/issues/15622)) ([70ea7a8](https://github.com/n8n-io/n8n/commit/70ea7a88594026479a934341b5c149661e75973b)) +* **editor:** Fix schema view showing incorrect data on loop node done branch ([#15635](https://github.com/n8n-io/n8n/issues/15635)) ([f762c59](https://github.com/n8n-io/n8n/commit/f762c59fb353dd334e4239b545ae44503b6e78d4)) +* **editor:** Fix update panel icon display. Fix title on insights dashboard ([#15593](https://github.com/n8n-io/n8n/issues/15593)) ([075b035](https://github.com/n8n-io/n8n/commit/075b035d64d462e84e35c2e3b73afee0fca592b8)) +* **editor:** Handle Loop node execution data preview correctly when inserting a node ([#15351](https://github.com/n8n-io/n8n/issues/15351)) ([5967c13](https://github.com/n8n-io/n8n/commit/5967c131654d5d8e87633fba9181af5ed571539b)) +* **editor:** Make deleting Call n8n Workflow Tool fromAI workflow input descriptions work ([#15459](https://github.com/n8n-io/n8n/issues/15459)) ([0e708dd](https://github.com/n8n-io/n8n/commit/0e708ddb54a2487ce48776b6470a7bc71998b845)) +* Fix jobs for secrets inherit ([#15532](https://github.com/n8n-io/n8n/issues/15532)) ([cf29b5f](https://github.com/n8n-io/n8n/commit/cf29b5f188c83f02ea3d1f8cb9a064dfebaca3eb)) +* **Google Drive Node:** Incorrect MIME type when uploading files on cloud ([#15478](https://github.com/n8n-io/n8n/issues/15478)) ([2060498](https://github.com/n8n-io/n8n/commit/20604983cd007fc041da6b9dd084264c8977bb68)) +* **HTTP Request Node:** Fix prototype pollution vulnerability ([#15463](https://github.com/n8n-io/n8n/issues/15463)) ([1ffc33d](https://github.com/n8n-io/n8n/commit/1ffc33dcc63dfcc0dc27905a9c0a01de33da4160)) +* **Information Extractor Node:** Improve error handling for empty inputs ([#15590](https://github.com/n8n-io/n8n/issues/15590)) ([bb2f675](https://github.com/n8n-io/n8n/commit/bb2f675817ccfc2e11ce9b758c4f9dd80a992cd5)) +* **Jira Software Node:** Use old endpoints to get all issues on self-hosted instances ([#15591](https://github.com/n8n-io/n8n/issues/15591)) ([e23ffcc](https://github.com/n8n-io/n8n/commit/e23ffccca8248aa76435be9d20cc3df6bd6c3773)) +* **MongoDB Node:** Stop overwriting nested values on update ([#15543](https://github.com/n8n-io/n8n/issues/15543)) ([3ee15a8](https://github.com/n8n-io/n8n/commit/3ee15a833128cac63a767f13aaaaad7ebd960501)) +* **Summarize Node:** Convert v1 split by values to string ([#15525](https://github.com/n8n-io/n8n/issues/15525)) ([4d037ca](https://github.com/n8n-io/n8n/commit/4d037ca68abe4660b3815da3b99e8b65e2b80c43)) +* **Telegram Node:** Include error message in output when continueOnFail is set ([#15540](https://github.com/n8n-io/n8n/issues/15540)) ([b8ee275](https://github.com/n8n-io/n8n/commit/b8ee275f0beeaf054cd0ef52e987c73bc211ec27)) + + +### Features + +* **Airtop Node:** Add File operations and scroll micro-interaction ([#15089](https://github.com/n8n-io/n8n/issues/15089)) ([86885a7](https://github.com/n8n-io/n8n/commit/86885a7d0e035a480960600a20303ebcda508870)) +* **Anthropic Chat Model Node:** Set the new Claude 4 Sonnet model to be the default ([#15609](https://github.com/n8n-io/n8n/issues/15609)) ([cf8b611](https://github.com/n8n-io/n8n/commit/cf8b611d14528b3a898a1b89d6c817a0b7e63575)) +* **core:** Add logs for insights flushing and compaction ([#15519](https://github.com/n8n-io/n8n/issues/15519)) ([3743a8c](https://github.com/n8n-io/n8n/commit/3743a8c33dfc77295e743bf8606e45850be21579)) +* **core:** Invalidate all sessions when MFA is enabled/disabled ([#15524](https://github.com/n8n-io/n8n/issues/15524)) ([2a35c19](https://github.com/n8n-io/n8n/commit/2a35c19ef971bd9a2612a43471e6f87dd4c43f7b)) +* **core:** Scope getStatus for environments for project admin role ([#15404](https://github.com/n8n-io/n8n/issues/15404)) ([f9f9597](https://github.com/n8n-io/n8n/commit/f9f9597bbd20a8a97c0100f20586e9c1a8acd4d9)) +* **editor:** "Executing" state in the output panel ([#15470](https://github.com/n8n-io/n8n/issues/15470)) ([7e3bcd3](https://github.com/n8n-io/n8n/commit/7e3bcd389546a8b85a9a81e0ce76f5aeb4df3e7c)) +* **editor:** Add an option to sync canvas with log view ([#15391](https://github.com/n8n-io/n8n/issues/15391)) ([9938e63](https://github.com/n8n-io/n8n/commit/9938e63a666cb37461ce642836c427f05a44ebc9)) +* **editor:** Distinguish official verified nodes from community built nodes ([#15630](https://github.com/n8n-io/n8n/issues/15630)) ([7f0c6d6](https://github.com/n8n-io/n8n/commit/7f0c6d62e6a1b9a1b2fc92ad05d4c47d3a9393d6)) +* **editor:** Save new project on Enter in name field ([#15535](https://github.com/n8n-io/n8n/issues/15535)) ([fbf7083](https://github.com/n8n-io/n8n/commit/fbf7083062488d1b7e2e69b8ed7f5bcded417baf)) +* **editor:** Show informative message in NDV when AI tools have no parameters ([#15515](https://github.com/n8n-io/n8n/issues/15515)) ([a426ecd](https://github.com/n8n-io/n8n/commit/a426ecd2f13208ac80ddcbabbc8ac8fdbd268ab0)) +* **editor:** Use resource locator at Simple Vector Store memory key, allow cross workflow use ([#15421](https://github.com/n8n-io/n8n/issues/15421)) ([e5c2aea](https://github.com/n8n-io/n8n/commit/e5c2aea6fe770698c0f8d6986b6b4662e89f90b4)) +* **Merge Node:** Option in combineBySql operation to return either confirmation of succes or empty result ([#15509](https://github.com/n8n-io/n8n/issues/15509)) ([a86bc43](https://github.com/n8n-io/n8n/commit/a86bc43f50185f0aa647a63dfe04d147fad62256)) +* Migrate Test Workflows to Main Repo ([#15504](https://github.com/n8n-io/n8n/issues/15504)) ([867842d](https://github.com/n8n-io/n8n/commit/867842d4735a73ce117ae418ea49db4f1f567c94)) + + + +# [1.94.0](https://github.com/n8n-io/n8n/compare/n8n@1.93.0...n8n@1.94.0) (2025-05-19) + + +### Bug Fixes + +* **AI Agent Node:** Fix tool calling when tools run in a loop ([#15250](https://github.com/n8n-io/n8n/issues/15250)) ([cd1d6c9](https://github.com/n8n-io/n8n/commit/cd1d6c9dfc5491a10b4c522b664949b46c58ea45)) +* **Azure OpenAI Chat Model Node:** Simplify Azure Entra ID Authentication and Auto-Refresh token ([#15335](https://github.com/n8n-io/n8n/issues/15335)) ([e750d53](https://github.com/n8n-io/n8n/commit/e750d5366ec51b09278ed75f2c07bf9946488645)) +* **Basic LLM Chain Node:** Use JSON parsing for Claude 3.7 with thinking enabled ([#15381](https://github.com/n8n-io/n8n/issues/15381)) ([c8b9a7f](https://github.com/n8n-io/n8n/commit/c8b9a7fdebc902b6d68ed1356e79ee976ab1cee7)) +* **core:** Allow strings starting with numbers in alphanumeric string validator ([#15425](https://github.com/n8n-io/n8n/issues/15425)) ([64b3fa3](https://github.com/n8n-io/n8n/commit/64b3fa3d1771a69d62814977d3ac3782a35aeb35)) +* **core:** Load config early to fix `N8N_CONFIG_FILES` ([#15406](https://github.com/n8n-io/n8n/issues/15406)) ([ec63a61](https://github.com/n8n-io/n8n/commit/ec63a616523221ec2216782845e508a59c6d0a05)) +* **core:** Load insights module on webhook instance to save insights on webhook workflows ([#15433](https://github.com/n8n-io/n8n/issues/15433)) ([bf5551d](https://github.com/n8n-io/n8n/commit/bf5551d711bb15af3ac104046219abb4686ef1c1)) +* **core:** Make the Insights by time datetime parsing more robust ([#15413](https://github.com/n8n-io/n8n/issues/15413)) ([d9fdef3](https://github.com/n8n-io/n8n/commit/d9fdef3bf9ca2f0bca564493cbae851b7a97bd8e)) +* **core:** Upgrade formidable to address CVE-2025-46653 ([#15341](https://github.com/n8n-io/n8n/issues/15341)) ([d612d7b](https://github.com/n8n-io/n8n/commit/d612d7ba32d2cea093a6ebf149b93c5e9a4bcbe6)) +* **core:** Upgrade snowflake-sdk to address CVE-2025-46328 ([#15345](https://github.com/n8n-io/n8n/issues/15345)) ([eb634ea](https://github.com/n8n-io/n8n/commit/eb634eacf4b82f00cc44f4328150e9a0d22b791f)) +* **editor:** Correctly show Workflow Breadcrumbs in MainHeader on Registered Community ([#15457](https://github.com/n8n-io/n8n/issues/15457)) ([5c38405](https://github.com/n8n-io/n8n/commit/5c3840583dc8993e76fb9324aa4fe766aff60cb7)) +* **editor:** Don't render `now` when `startedAt` is `null` ([#15283](https://github.com/n8n-io/n8n/issues/15283)) ([44ecad5](https://github.com/n8n-io/n8n/commit/44ecad58831cca5fd411b1f943a74910283b77c7)) +* **editor:** FE fixes to insights ([#15228](https://github.com/n8n-io/n8n/issues/15228)) ([3eb1c1c](https://github.com/n8n-io/n8n/commit/3eb1c1c783a45a150fa7229d8f2590d3786f58ad)) +* **editor:** Fix node renaming in pinned data ([#15482](https://github.com/n8n-io/n8n/issues/15482)) ([fc17cde](https://github.com/n8n-io/n8n/commit/fc17cdece2fdaf4ee31c77f38a2b4fc2416b762d)) +* **editor:** Fix paired items after renaming a node ([#15440](https://github.com/n8n-io/n8n/issues/15440)) ([7d3cae5](https://github.com/n8n-io/n8n/commit/7d3cae5639b26b32d170e516b72dbe782e25f4bb)) +* **editor:** Fix partial chat executions ([#15379](https://github.com/n8n-io/n8n/issues/15379)) ([b6370fb](https://github.com/n8n-io/n8n/commit/b6370fb2ec97e4533ec24f712019227f7f47b253)) +* **editor:** Fix resizing NDV output panel when closing assistant ([#15313](https://github.com/n8n-io/n8n/issues/15313)) ([d7d3d33](https://github.com/n8n-io/n8n/commit/d7d3d33d1a072372a7930290eb060371e0b466e8)) +* **editor:** Fix switching between connected SQL/HTML editors ([#15297](https://github.com/n8n-io/n8n/issues/15297)) ([bb2cfc2](https://github.com/n8n-io/n8n/commit/bb2cfc209c96cc4ed3335ecff878d5d40346a8da)) +* **editor:** Hide evaluation trigger ([#15471](https://github.com/n8n-io/n8n/issues/15471)) ([b53bd17](https://github.com/n8n-io/n8n/commit/b53bd173d0a26b0662053e8c95505cbab3dc6963)) +* **editor:** Make `AI Agent` appear before `Magento 2` when typing `agent` ([#15302](https://github.com/n8n-io/n8n/issues/15302)) ([d683a54](https://github.com/n8n-io/n8n/commit/d683a54da0e1f43cb9ef9bdb54ba49551839a640)) +* **editor:** Normalize credential data from source control ([#15434](https://github.com/n8n-io/n8n/issues/15434)) ([840a3be](https://github.com/n8n-io/n8n/commit/840a3bee4bc41e4b94bd571ef2899e24c7fa7afe)) +* **editor:** Show error toast for failed executions ([#15388](https://github.com/n8n-io/n8n/issues/15388)) ([e68149b](https://github.com/n8n-io/n8n/commit/e68149bbc7760b2c1f311803f51588fbb0704fbd)) +* **editor:** Tag styling issues ([#15336](https://github.com/n8n-io/n8n/issues/15336)) ([807084e](https://github.com/n8n-io/n8n/commit/807084e75d63d76115448e1b21d29ec8c7fd3854)) +* Ensure diagnostics stay disabled in e2e even when enabled by environment variable ([#15322](https://github.com/n8n-io/n8n/issues/15322)) ([c026962](https://github.com/n8n-io/n8n/commit/c02696241bcce356aa5ff774226e1fd223069ee0)) +* **Execute Workflow Trigger Node:** Show helpful error message when passing array to JSON Example ([#15458](https://github.com/n8n-io/n8n/issues/15458)) ([06e9386](https://github.com/n8n-io/n8n/commit/06e938687584d4f3a57a444171396152b0491c59)) +* **n8n Evaluation Trigger Node:** Fix tweaks ([#15473](https://github.com/n8n-io/n8n/issues/15473)) ([3985387](https://github.com/n8n-io/n8n/commit/398538720429c061d9df3374bffa711cc4d9aa20)) +* **n8n Form Node:** Limit the max width for text area ([#15508](https://github.com/n8n-io/n8n/issues/15508)) ([9936186](https://github.com/n8n-io/n8n/commit/99361869a3e8eaf0c228bbc923d45e844f9f6ac5)) +* **OpenAI Node:** Hide the option to return URL for gpt-image-1 model ([#15392](https://github.com/n8n-io/n8n/issues/15392)) ([027a479](https://github.com/n8n-io/n8n/commit/027a479172351b0af8b2e596eb4f3e9a76859437)) +* **PostBin Node:** Update base URL for postbin node ([#15358](https://github.com/n8n-io/n8n/issues/15358)) ([0cddc95](https://github.com/n8n-io/n8n/commit/0cddc9576f6c77b6b5813fe6f3aa649df45c2ce9)) +* **RabbitMQ Node:** Support RabbitMQ v.4.1.0 by updating amqplib ([#15418](https://github.com/n8n-io/n8n/issues/15418)) ([cf05c33](https://github.com/n8n-io/n8n/commit/cf05c3341ed81ab343c656ddbbcf14486add8f20)) +* Set `tournament` for nodes test harness ([#15346](https://github.com/n8n-io/n8n/issues/15346)) ([0699925](https://github.com/n8n-io/n8n/commit/069992524d3a45b0f10183379cc0168c67f661fb)) +* **Text Classifier Node:** Return error for empty inputText ([#15390](https://github.com/n8n-io/n8n/issues/15390)) ([71e5584](https://github.com/n8n-io/n8n/commit/71e5584d28771400b7d8478d9c519de65c35ee6f)) +* **YouTube Node:** Chunk file content before uploading ([#15405](https://github.com/n8n-io/n8n/issues/15405)) ([3e855b4](https://github.com/n8n-io/n8n/commit/3e855b4485244549c1cbe46e7e23a73fa6292460)) + + +### Features + +* Add HTTP proxy for supported LLM nodes ([#15449](https://github.com/n8n-io/n8n/issues/15449)) ([907485d](https://github.com/n8n-io/n8n/commit/907485d01692f004ea289dcd2d6af2d0900e1b49)) +* **API:** Add Public API endpoint for updating variables ([#15315](https://github.com/n8n-io/n8n/issues/15315)) ([52bf920](https://github.com/n8n-io/n8n/commit/52bf9203f009d7ffc586f87fdd642d431acdca8f)) +* **AWS IAM Node:** Add new AWS IAM Node ([#11963](https://github.com/n8n-io/n8n/issues/11963)) ([ab1047e](https://github.com/n8n-io/n8n/commit/ab1047ebde4ce0bdbf9ef25cae1503ef147eb89e)) +* **editor:** Add "Go to Sub-workflow" menu context action to `Workflow Tool` ([#15396](https://github.com/n8n-io/n8n/issues/15396)) ([2b05dbe](https://github.com/n8n-io/n8n/commit/2b05dbea8c416c1edd88801f711d4c4f6c43a4d7)) +* **editor:** Add user info on relations to enhance design of project users list ([#15420](https://github.com/n8n-io/n8n/issues/15420)) ([435d43f](https://github.com/n8n-io/n8n/commit/435d43fc5b2307a966e44fc71d2e1ec71c0ce694)) +* **editor:** Improve canvas node insertion position ([#14289](https://github.com/n8n-io/n8n/issues/14289)) ([102c676](https://github.com/n8n-io/n8n/commit/102c67628c67da19c54eeca8bfe1703616a016c9)) +* **editor:** Improve manual description in nodes as tools ([#15373](https://github.com/n8n-io/n8n/issues/15373)) ([726438d](https://github.com/n8n-io/n8n/commit/726438d95ef3a58095b46bb17d2ce88209c5ceec)) +* **editor:** Include pending users for project users search ([#15389](https://github.com/n8n-io/n8n/issues/15389)) ([f906dba](https://github.com/n8n-io/n8n/commit/f906dbaf6337764297de4fd7afaf96e1baebd4a5)) +* **editor:** Keyboard shortcuts for the log view ([#15378](https://github.com/n8n-io/n8n/issues/15378)) ([1935e62](https://github.com/n8n-io/n8n/commit/1935e62adfba1cd2b3bea6122bd88fc01f9f5bb7)) +* **editor:** Rollout improved log view (2nd attempt) ([#15382](https://github.com/n8n-io/n8n/issues/15382)) ([4657e34](https://github.com/n8n-io/n8n/commit/4657e348f4a262a14b8c4060ff2d9538222e13da)) +* **editor:** Show sub workflow runs in the log view ([#15163](https://github.com/n8n-io/n8n/issues/15163)) ([0c4398f](https://github.com/n8n-io/n8n/commit/0c4398fd2f72ad473a38f925e99cc524c4ad2038)) +* **Execute Workflow Trigger Node:** Reintroduce binary data on Workflow Triggers ([#15259](https://github.com/n8n-io/n8n/issues/15259)) ([218007e](https://github.com/n8n-io/n8n/commit/218007e625ca52256548fc3f5b01debb1f2bbfb3)) +* **Microsoft SharePoint Node:** New node ([#13727](https://github.com/n8n-io/n8n/issues/13727)) ([954b662](https://github.com/n8n-io/n8n/commit/954b66218fa045c4784c29a2d3a805f51fea9924)) +* **n8n Evaluation Trigger Node:** Add Evaluation Trigger and Evaluation Node ([#15194](https://github.com/n8n-io/n8n/issues/15194)) ([570d1e7](https://github.com/n8n-io/n8n/commit/570d1e7aadd5ba1d77ab95432bed0c9fcbe812a5)) +* **n8n Evaluation Trigger Node:** Add link to dataset template in trigger ([#15455](https://github.com/n8n-io/n8n/issues/15455)) ([1f023db](https://github.com/n8n-io/n8n/commit/1f023db531ce019163e479c1c1340a0c0041b4b5)) +* **n8n Evaluation Trigger Node:** Add telemetry events ([#15465](https://github.com/n8n-io/n8n/issues/15465)) ([9834a49](https://github.com/n8n-io/n8n/commit/9834a49bd344f74be0280afbf4a0ed03b5816708)) +* **n8n Microsoft Teams Node:** New trigger node ([#12875](https://github.com/n8n-io/n8n/issues/12875)) ([870940b](https://github.com/n8n-io/n8n/commit/870940b54393ab4a836c6ca4325af4f97c16dfbd)) +* Optimise langchain calls in batching mode ([#15243](https://github.com/n8n-io/n8n/issues/15243)) ([ff15693](https://github.com/n8n-io/n8n/commit/ff156930c5f1b75da59bc27b424925a5535cd908)) +* **Respond to Webhook Node:** Additional output branch - Response ([#13734](https://github.com/n8n-io/n8n/issues/13734)) ([40fb4a2](https://github.com/n8n-io/n8n/commit/40fb4a2efc6201539d765358db536ca243cb140f)) +* **Snowflake Node:** Add support for Key-Pair authentication ([#14833](https://github.com/n8n-io/n8n/issues/14833)) ([4302c5f](https://github.com/n8n-io/n8n/commit/4302c5f474e96412f7a1c5d724b1d1c05acc2068)) + + +### Performance Improvements + +* **editor:** Avoid deep watch on execution result data ([#15304](https://github.com/n8n-io/n8n/issues/15304)) ([cd2e2dc](https://github.com/n8n-io/n8n/commit/cd2e2dc8d93632479ff4a38600ddd76cdcd5c957)) + + + +# [1.93.0](https://github.com/n8n-io/n8n/compare/n8n@1.92.0...n8n@1.93.0) (2025-05-12) + + +### Bug Fixes + +* Center circular element in Milvus logo ([#15078](https://github.com/n8n-io/n8n/issues/15078)) ([2202264](https://github.com/n8n-io/n8n/commit/22022642bf182b7f35a7446ef15465a201665bb0)) +* **Code Node:** Update pyodide sandbox context to fix micropip regressions ([#15181](https://github.com/n8n-io/n8n/issues/15181)) ([63cbf86](https://github.com/n8n-io/n8n/commit/63cbf8681a85b2b4ac1bbf69bf13a91f0c40ea4a)) +* Community nodes - setting page empty state ([#15305](https://github.com/n8n-io/n8n/issues/15305)) ([e7c095d](https://github.com/n8n-io/n8n/commit/e7c095d047759349ddb970537de2575b25d47ca1)) +* **core:** Add mechanism to prevent concurrent compaction on Insights ([#14988](https://github.com/n8n-io/n8n/issues/14988)) ([392e914](https://github.com/n8n-io/n8n/commit/392e91480a8e1508faced838854d2215c3ae6139)) +* **core:** Do not cache dynamic webhooks ([#15176](https://github.com/n8n-io/n8n/issues/15176)) ([0659ba9](https://github.com/n8n-io/n8n/commit/0659ba957cf741feabef32445a3a2f96c7e59006)) +* **core:** Fix Insights concurrency issues for legacy sqlite ([#15028](https://github.com/n8n-io/n8n/issues/15028)) ([e34bca7](https://github.com/n8n-io/n8n/commit/e34bca779bdbae13477990e61a8cb088f65af40f)) +* **core:** Fix task runner logging to browser console ([#15111](https://github.com/n8n-io/n8n/issues/15111)) ([e86edf5](https://github.com/n8n-io/n8n/commit/e86edf536f647b2c215bcf8f289c7127d975e7eb)) +* **core:** Fix task runner validation error on array of arrays ([#15106](https://github.com/n8n-io/n8n/issues/15106)) ([75c1a4c](https://github.com/n8n-io/n8n/commit/75c1a4c5b3d7debfabdee83f4dd6b1d732aa0185)) +* **core:** Prioritize workflow execution with existing execution data on worker ([#15165](https://github.com/n8n-io/n8n/issues/15165)) ([12b681f](https://github.com/n8n-io/n8n/commit/12b681fc41035619a9684df97dd4c676a365e54c)) +* **core:** Support task runner in `execute` and `execute-batch` commands ([#15147](https://github.com/n8n-io/n8n/issues/15147)) ([985f554](https://github.com/n8n-io/n8n/commit/985f5545012d07622c9632e26aaeba1e39484b18)) +* **editor:** Close Workflow URL Import Modal after import ([#15177](https://github.com/n8n-io/n8n/issues/15177)) ([d14fb4d](https://github.com/n8n-io/n8n/commit/d14fb4dde3123548c477803e5da066544ed0ecb2)) +* **editor:** Ensure no running node when execution finished ([#15299](https://github.com/n8n-io/n8n/issues/15299)) ([d12c7ee](https://github.com/n8n-io/n8n/commit/d12c7ee87f6d4087ed1d875dd72ca636f163b7a6)) +* **editor:** Fix AI Node Logs View to Filter Duplicate Executions ([#15049](https://github.com/n8n-io/n8n/issues/15049)) ([8680797](https://github.com/n8n-io/n8n/commit/86807978c1c7a8f934b23132a99052f07313fef1)) +* **editor:** Fix context menu behaviour and rename shortcut indicator ([#15116](https://github.com/n8n-io/n8n/issues/15116)) ([73a4a33](https://github.com/n8n-io/n8n/commit/73a4a33da0b36eb9fd40e9f3dc9a7f39fc1b892e)) +* **editor:** Fix Paired item error message ([#15171](https://github.com/n8n-io/n8n/issues/15171)) ([be72f73](https://github.com/n8n-io/n8n/commit/be72f736ac6e3246ea52da92124be26585f0ac9e)) +* **editor:** Fix sticky button disappearing on window resize ([#15105](https://github.com/n8n-io/n8n/issues/15105)) ([dcf3267](https://github.com/n8n-io/n8n/commit/dcf32679c3462f5dc3012667dfc2e2de3f96cd80)) +* **editor:** Increase hover delay and hit area for canvas toolbar edge ([#15125](https://github.com/n8n-io/n8n/issues/15125)) ([cdcd059](https://github.com/n8n-io/n8n/commit/cdcd0592484e479e2b1aee140d912b22c055ad5e)) +* **editor:** Issue with context menu disabling most options when importing template ([#15185](https://github.com/n8n-io/n8n/issues/15185)) ([abb8225](https://github.com/n8n-io/n8n/commit/abb822594453a594d306327817d435771779fad1)) +* **editor:** Sort start start nodes for manual execution by Y position ([#15254](https://github.com/n8n-io/n8n/issues/15254)) ([ab27f91](https://github.com/n8n-io/n8n/commit/ab27f91944d6cb27e69f972e52f054a827290608)) +* **Google Sheets Node:** Return single row in read operation if combine conditions is OR and 'Return only First Matching Row' ([#15095](https://github.com/n8n-io/n8n/issues/15095)) ([e0f5ba2](https://github.com/n8n-io/n8n/commit/e0f5ba2c67796883a8f284bc3de74caba89270b5)) +* **Microsoft Entra ID Node:** Change Micosoft typo with Microsoft ([#14452](https://github.com/n8n-io/n8n/issues/14452)) ([af92117](https://github.com/n8n-io/n8n/commit/af92117e767cad160edfab141001e7f69ce0792d)) +* Revert AI nodes batching ([#15129](https://github.com/n8n-io/n8n/issues/15129)) ([939ff97](https://github.com/n8n-io/n8n/commit/939ff97ec4248e610d560c9aea876ad43b147399)) + + +### Features + +* Community Nodes in the Nodes Panel ([#13923](https://github.com/n8n-io/n8n/issues/13923)) ([2463842](https://github.com/n8n-io/n8n/commit/24638420bd6183939dfd6ff7f008c225fedb49f9)) +* **core:** Archive workflows when removing folders without transfer ([#15057](https://github.com/n8n-io/n8n/issues/15057)) ([403f08b](https://github.com/n8n-io/n8n/commit/403f08b6e36eecc45b734f4e6c594753c1a816b3)) +* **core:** Change workflow deletions to soft deletes ([#14894](https://github.com/n8n-io/n8n/issues/14894)) ([3a13139](https://github.com/n8n-io/n8n/commit/3a13139f78891afd14cb585ca26e8f4c9847393d)) +* **core:** Check license config for insights max retention ([#15256](https://github.com/n8n-io/n8n/issues/15256)) ([3be0555](https://github.com/n8n-io/n8n/commit/3be05556f9fe11c6b81f89bc94e3c09b7c838078)) +* **core:** Implement Insights pruning system ([#14468](https://github.com/n8n-io/n8n/issues/14468)) ([ae27b48](https://github.com/n8n-io/n8n/commit/ae27b48ee7b5d3156b4ea1662826ad2a94c24263)) +* **core:** Implement partial execution for all tool nodes ([#15168](https://github.com/n8n-io/n8n/issues/15168)) ([8b467e3](https://github.com/n8n-io/n8n/commit/8b467e3f569514787fc865789fd4bf2387051120)) +* **core:** Improve nodeNameToToolName special characters normalization ([#15126](https://github.com/n8n-io/n8n/issues/15126)) ([07e6c7e](https://github.com/n8n-io/n8n/commit/07e6c7e13f1ddac9abaa484f7ee502cd049d49ef)) +* **editor:** Allow jumping into sub-workflow with shortkey ([#15200](https://github.com/n8n-io/n8n/issues/15200)) ([e2b9ada](https://github.com/n8n-io/n8n/commit/e2b9ada4b562426fbe8deeaefe657c1ed2b83362)) +* **editor:** Implement 'Shared with you' section in the main navigation ([#15140](https://github.com/n8n-io/n8n/issues/15140)) ([1c65e82](https://github.com/n8n-io/n8n/commit/1c65e82b38b78da73a038e2e43743311c6a0ef12)) +* **editor:** Preserve workflow list sort & page size preferences ([#15101](https://github.com/n8n-io/n8n/issues/15101)) ([cf03a28](https://github.com/n8n-io/n8n/commit/cf03a28774ebf495c0762ce4f7ea2a1922f569c4)) +* **editor:** Rollout improved log view ([#15202](https://github.com/n8n-io/n8n/issues/15202)) ([8229b0b](https://github.com/n8n-io/n8n/commit/8229b0bcc20f6170d652a06789a9b586ba7a6315)) +* **Jina AI Node:** Add Jina AI node ([#15094](https://github.com/n8n-io/n8n/issues/15094)) ([e9ef193](https://github.com/n8n-io/n8n/commit/e9ef193eaa52089da640c6d40f882dd42137efc5)) +* **MCP Server Trigger Node:** Handle multiple tool calls in mcp server trigger ([#15064](https://github.com/n8n-io/n8n/issues/15064)) ([59ba162](https://github.com/n8n-io/n8n/commit/59ba162bd9fe9967d0b0733c3955d65256e062f5)) +* **n8n AWS Cognito Node:** New node ([#11767](https://github.com/n8n-io/n8n/issues/11767)) ([f6e5efc](https://github.com/n8n-io/n8n/commit/f6e5efc2e0ae7b08d0b9f45948d78af06a9b2e6b)) + + + +# [1.92.0](https://github.com/n8n-io/n8n/compare/n8n@1.91.0...n8n@1.92.0) (2025-05-05) + + +### Bug Fixes + +* **core:** Don't create additional `nodeExecuteBefore` message ([#14958](https://github.com/n8n-io/n8n/issues/14958)) ([a33e3a8](https://github.com/n8n-io/n8n/commit/a33e3a807a9dd4c2df6f44b1107c41b949dfe331)) +* **core:** Error in partial execution of vector stores ([#15019](https://github.com/n8n-io/n8n/issues/15019)) ([5fa41bd](https://github.com/n8n-io/n8n/commit/5fa41bd73ae57fa0d957541643f0bf9c64a53d8f)) +* **core:** Manual execution defaults to Manual trigger ([#15052](https://github.com/n8n-io/n8n/issues/15052)) ([c176063](https://github.com/n8n-io/n8n/commit/c1760631cf86942a8da19d0bf647d2eb70fc0477)) +* **core:** Revert back to the extended query-parser on express 5 ([#15016](https://github.com/n8n-io/n8n/issues/15016)) ([9541b5b](https://github.com/n8n-io/n8n/commit/9541b5bb07de0e359159f5fcffbc48e5c6a08162)) +* **core:** Use manual tool description if neither resources or operations exist ([#15093](https://github.com/n8n-io/n8n/issues/15093)) ([1d4f639](https://github.com/n8n-io/n8n/commit/1d4f63985b6802fe0af6fe7862d4215611552d71)) +* **editor:** Close saving modal when workflow is new ([#14836](https://github.com/n8n-io/n8n/issues/14836)) ([48f0c91](https://github.com/n8n-io/n8n/commit/48f0c91a474dda995b5dbd89cdb51905b84ecbd9)) +* **editor:** "Trigger node not found" error when chat message is entered ([#14954](https://github.com/n8n-io/n8n/issues/14954)) ([8981e22](https://github.com/n8n-io/n8n/commit/8981e22dd4df2c182fe4d845e7d0cc2677ff2d36)) +* **editor:** Hide $fromAI button for exact type matches only ([#14996](https://github.com/n8n-io/n8n/issues/14996)) ([8613521](https://github.com/n8n-io/n8n/commit/8613521aabb95128d762076d15323bb1aa8e9deb)) +* **editor:** Import form data with special characters from curl command correctly ([#14898](https://github.com/n8n-io/n8n/issues/14898)) ([3e43f9f](https://github.com/n8n-io/n8n/commit/3e43f9f8bc8542534a17f55e32634034c174a9d8)) +* **editor:** Only prompt for MFA code when email is updated ([#15065](https://github.com/n8n-io/n8n/issues/15065)) ([aa4607e](https://github.com/n8n-io/n8n/commit/aa4607e7b5c15f8a6f69b3c900e656f317ebb784)) +* **HTTP Request Node:** Add support for Bearer Auth in HttpRequest node ([#15043](https://github.com/n8n-io/n8n/issues/15043)) ([31003aa](https://github.com/n8n-io/n8n/commit/31003aacd15d7219fa87c919dedca7c8be09b1c2)) +* **Summarize Node:** Fix spaces in Fields to Split By values converted to underscores ([#15020](https://github.com/n8n-io/n8n/issues/15020)) ([154153d](https://github.com/n8n-io/n8n/commit/154153d86f59552cffe33a1a746cbaf28fc8886f)) + + +### Features + +* **Anthropic Chat Model Node:** Add configurable base URL for Anthropic API ([#15063](https://github.com/n8n-io/n8n/issues/15063)) ([4b5f045](https://github.com/n8n-io/n8n/commit/4b5f045281837e7cc29a57a1b9360e87cc3805f7)) +* **Azure OpenAI Chat Model Node:** Implement Azure Entra ID OAuth2 Authentication ([#15003](https://github.com/n8n-io/n8n/issues/15003)) ([cf00085](https://github.com/n8n-io/n8n/commit/cf0008500cafd94582720a1445d0468898e71184)) +* **Calendly Trigger Node:** Deprecation notice for apiKey authentication ([#15048](https://github.com/n8n-io/n8n/issues/15048)) ([40d0702](https://github.com/n8n-io/n8n/commit/40d0702ed33ef7ffea303957b06e1e953023b559)) +* **core:** Add production root executions ([#14845](https://github.com/n8n-io/n8n/issues/14845)) ([7f89244](https://github.com/n8n-io/n8n/commit/7f89244304855748bcd70f495914373369a89cbe)) +* **editor:** Add "Rendered" display mode to the logs view ([#14994](https://github.com/n8n-io/n8n/issues/14994)) ([c0b5483](https://github.com/n8n-io/n8n/commit/c0b54832b3e7e7daafcc65c73c15a4cb90d3172a)) +* **editor:** Support partial executions of tool nodes ([#14945](https://github.com/n8n-io/n8n/issues/14945)) ([54dcded](https://github.com/n8n-io/n8n/commit/54dcdedecedb0a480caa17f8d6f0447535a2995a)) +* **Google Workspace Admin Node:** Google Admin Node Overhaul implementation ([#12271](https://github.com/n8n-io/n8n/issues/12271)) ([8a30c35](https://github.com/n8n-io/n8n/commit/8a30c35c33ad1175a3ee216c86a75ddd786d9887)) +* **Jira Software Node:** Migrate from soon deprecated endpoints to get issues ([#14821](https://github.com/n8n-io/n8n/issues/14821)) ([216bdd1](https://github.com/n8n-io/n8n/commit/216bdd15fd94f9a427a86aaf0a9291e7d4df4056)) +* Only show workflows shared with you in the overview page ([#14773](https://github.com/n8n-io/n8n/issues/14773)) ([eb46576](https://github.com/n8n-io/n8n/commit/eb465763cf31e1b24e0b2737e15cd1a0478658d9)) +* Optimize langchain calls in batching mode ([#15011](https://github.com/n8n-io/n8n/issues/15011)) ([f3e29d2](https://github.com/n8n-io/n8n/commit/f3e29d25ed767d29aebed02a040f57a1cbc05f8d)) + + + +# [1.91.0](https://github.com/n8n-io/n8n/compare/n8n@1.90.0...n8n@1.91.0) (2025-04-28) + + +### Bug Fixes + +* **AI Agent Node:** Prevent adding empty binary message ([#14871](https://github.com/n8n-io/n8n/issues/14871)) ([897338b](https://github.com/n8n-io/n8n/commit/897338bd245e33f26fe54bdd4659c8e3a58f1ff3)) +* Bring back TidyUp button's icon and fix Easy AI button size ([#14818](https://github.com/n8n-io/n8n/issues/14818)) ([1e5c1fc](https://github.com/n8n-io/n8n/commit/1e5c1fceb70feeae2affdaa1256c018124da07a2)) +* **Code Node:** Upgrade pyodide, sandbox it, and prevent JS sandbox escape ([#14356](https://github.com/n8n-io/n8n/issues/14356)) ([6c9c720](https://github.com/n8n-io/n8n/commit/6c9c720ae9496d5f1ea9817241fe257d6be5a10f)) +* **core:** Disable insights for sqlite legacy ([#14824](https://github.com/n8n-io/n8n/issues/14824)) ([27f223d](https://github.com/n8n-io/n8n/commit/27f223d294f375a8f5af69557a5c2995e9004486)) +* **core:** Error when multiple nodes return items with multiple paired items ([#14883](https://github.com/n8n-io/n8n/issues/14883)) ([ddb688b](https://github.com/n8n-io/n8n/commit/ddb688ba300b231e53a024a190cb7fc4bec3a9e7)) +* **core:** Fix task runner's task timeout and heartbeat interval ([#14889](https://github.com/n8n-io/n8n/issues/14889)) ([cdf421e](https://github.com/n8n-io/n8n/commit/cdf421e80f6a8cca276a015e8cb8cb12660b8ee1)) +* **core:** Handle infinite max history for insights date range ([#14794](https://github.com/n8n-io/n8n/issues/14794)) ([e83a64b](https://github.com/n8n-io/n8n/commit/e83a64b84a516181f62add011bb763840e5d8f20)) +* **core:** Hide task runner warning if Code node is disabled ([#14801](https://github.com/n8n-io/n8n/issues/14801)) ([a217611](https://github.com/n8n-io/n8n/commit/a217611b2a146a0febbb6811e245ec60fb38494c)) +* **core:** ID quoting in add scopes migration ([#14788](https://github.com/n8n-io/n8n/issues/14788)) ([f835c66](https://github.com/n8n-io/n8n/commit/f835c66d98abb1b93120e4d624498c40ba410d98)) +* **Customer.io Node:** Allow EU customer.io domains in credential ([#14880](https://github.com/n8n-io/n8n/issues/14880)) ([0c7f7b3](https://github.com/n8n-io/n8n/commit/0c7f7b33cb45e39bec481cf731d5206ddd1486fa)) +* **editor:** Changes to workflow after execution should not affect logs ([#14703](https://github.com/n8n-io/n8n/issues/14703)) ([84cee1d](https://github.com/n8n-io/n8n/commit/84cee1d12de19755154d415df117117225b7d941)) +* **editor:** Data in input/output panel incorrectly mapped ([#14878](https://github.com/n8n-io/n8n/issues/14878)) ([0a2b740](https://github.com/n8n-io/n8n/commit/0a2b740063d4a78592e349ef75e61b3ef5fa9f61)) +* **editor:** Fix insights summary banner empty state on time saved tab ([#14838](https://github.com/n8n-io/n8n/issues/14838)) ([2920381](https://github.com/n8n-io/n8n/commit/29203819031b80110259f15415caec9806e27c60)) +* **editor:** Fix schema view bugs ([#14734](https://github.com/n8n-io/n8n/issues/14734)) ([022f475](https://github.com/n8n-io/n8n/commit/022f4755c2fe34a5ff446bfa7acb1e5324104740)) +* **editor:** Handle if nodes are undefined/null in InputNodeSelect ([#14860](https://github.com/n8n-io/n8n/issues/14860)) ([67240ee](https://github.com/n8n-io/n8n/commit/67240ee069e55f09563f994c7c7729a1399c62db)) +* **editor:** Ignore unconnected nodes when executing workflow ([#14683](https://github.com/n8n-io/n8n/issues/14683)) ([f743915](https://github.com/n8n-io/n8n/commit/f743915cc9940b2cc49a7cb617a84c8cb78a4070)) +* **editor:** Only show previews if the param is an expression ([#14720](https://github.com/n8n-io/n8n/issues/14720)) ([db887b6](https://github.com/n8n-io/n8n/commit/db887b6f29ca627683c55b497f7410e435d47c3d)) +* **editor:** Open NDV from logs view with correct run index ([#14779](https://github.com/n8n-io/n8n/issues/14779)) ([82b7be5](https://github.com/n8n-io/n8n/commit/82b7be5d2964ca7fc610aa7ff4f9b10c513fe2fc)) +* **editor:** Place duplicated WFs always to correct parent folders ([#14713](https://github.com/n8n-io/n8n/issues/14713)) ([6c91e7e](https://github.com/n8n-io/n8n/commit/6c91e7e1b797e242afabe7e0ef4f9188b2d71cc6)) +* **editor:** Show Transform Node in Panel only if available ([#14830](https://github.com/n8n-io/n8n/issues/14830)) ([92e2a8e](https://github.com/n8n-io/n8n/commit/92e2a8e61a4189025e5d4bac8be81576b624fe85)) +* **editor:** Styling/UX improvements on the new logs view ([#14789](https://github.com/n8n-io/n8n/issues/14789)) ([454e5c7](https://github.com/n8n-io/n8n/commit/454e5c77ade0d412eb2de1719a58a07fffcc4649)) +* **editor:** Use redirect url also with SSO login ([#14893](https://github.com/n8n-io/n8n/issues/14893)) ([6145790](https://github.com/n8n-io/n8n/commit/614579026dca75efbf1026a7017931f6971760b5)) +* **Google Sheets Trigger Node:** Filter by first data row on `rowAdded` event ([#14731](https://github.com/n8n-io/n8n/issues/14731)) ([1593fe3](https://github.com/n8n-io/n8n/commit/1593fe3de51b337d25fd35876202f71503006f8d)) +* **Jira Software Node:** 403 when getting a list of items from Jira Cloud ([#14782](https://github.com/n8n-io/n8n/issues/14782)) ([1cbbcf4](https://github.com/n8n-io/n8n/commit/1cbbcf4a7726f38936a8fceeee8d635a212b0764)) +* **n8n Form Node:** Use binary response from latest node in execution ([#14842](https://github.com/n8n-io/n8n/issues/14842)) ([9672a6d](https://github.com/n8n-io/n8n/commit/9672a6db0a3211ea27b658c9a2ab55053b1c3475)) +* **n8n Split In Batches Node:** Rewrite hint for reset ([#14844](https://github.com/n8n-io/n8n/issues/14844)) ([9029f34](https://github.com/n8n-io/n8n/commit/9029f34bfdba79a5970b1ec680c3ebea11b6a7e4)) +* **Text Classifier Node:** Validate inputText parameter ([#14832](https://github.com/n8n-io/n8n/issues/14832)) ([9021e19](https://github.com/n8n-io/n8n/commit/9021e195fa945ce92822d0afb0654808b2ff67b7)) + + +### Features + +* **core:** Add insights date ranges option to frontend settings ([#14792](https://github.com/n8n-io/n8n/issues/14792)) ([65d6b23](https://github.com/n8n-io/n8n/commit/65d6b2382df8d4382bcb9aac7e2e7d2192e457c0)) +* **core:** Add InstanceRole auth support for AWS external secrets ([#14799](https://github.com/n8n-io/n8n/issues/14799)) ([8c4b9f7](https://github.com/n8n-io/n8n/commit/8c4b9f73f1bfc1d4e28ef0a38efe02627e15ac2f)) +* **core:** Add InstanceRole auth support for binary-data object- storage backend ([#14800](https://github.com/n8n-io/n8n/issues/14800)) ([271024d](https://github.com/n8n-io/n8n/commit/271024ded0d55aa97daaf52cb8051abee36ad474)) +* **core:** Allow setting folder destination when transferring workflow ownership ([#14935](https://github.com/n8n-io/n8n/issues/14935)) ([dbffcdc](https://github.com/n8n-io/n8n/commit/dbffcdc2ff4bf795995f53bc1a5166c4901b3320)) +* **core:** Enable insights for sqlite legacy ([#14606](https://github.com/n8n-io/n8n/issues/14606)) ([88ed7be](https://github.com/n8n-io/n8n/commit/88ed7beff2bf3aaa00258dd06715d52ac129f1ca)) +* **core:** Export new dto and schemas ([#14828](https://github.com/n8n-io/n8n/issues/14828)) ([9082adf](https://github.com/n8n-io/n8n/commit/9082adf89a821ab318d4767598275dac755b0918)) +* **core:** Implement granularity and date range filtering on insights ([#14841](https://github.com/n8n-io/n8n/issues/14841)) ([28596a6](https://github.com/n8n-io/n8n/commit/28596a633ec336178409c0604dcfe69f13d2c869)) +* **core:** Split insights service ([#14469](https://github.com/n8n-io/n8n/issues/14469)) ([eaf6783](https://github.com/n8n-io/n8n/commit/eaf6783eb54216aa3ba0f4d6871cc1d52095c5d7)) +* **editor:** Add support for automatic expression switching to RLC ([#14735](https://github.com/n8n-io/n8n/issues/14735)) ([6b344f8](https://github.com/n8n-io/n8n/commit/6b344f8a7e74d6ac902457953cc1dcdfb2435da3)) +* **editor:** Add time range selector to Insights ([#14877](https://github.com/n8n-io/n8n/issues/14877)) ([bfd85dd](https://github.com/n8n-io/n8n/commit/bfd85dd3c9afc02b427c16fa0241db5be1b3a6c4)) +* **editor:** Include NodeDetailsView in URL ([#14349](https://github.com/n8n-io/n8n/issues/14349)) ([5ff073b](https://github.com/n8n-io/n8n/commit/5ff073bd7be80dcb857fd80f9637545e058397bb)) +* **editor:** Show workflow breadcrumbs in canvas ([#14710](https://github.com/n8n-io/n8n/issues/14710)) ([46df8b4](https://github.com/n8n-io/n8n/commit/46df8b47d6ee2ad685a51c8b805ceeb230e4fe25)) +* Group memory nodes into section in nodes panel ([#14826](https://github.com/n8n-io/n8n/issues/14826)) ([6197b0c](https://github.com/n8n-io/n8n/commit/6197b0cb6d668ac6b13e17c3765c7fa458cd0362)) +* **OpenAI Node:** Filter available models by blacklisting rather than whitelisting ([#14780](https://github.com/n8n-io/n8n/issues/14780)) ([0e2eceb](https://github.com/n8n-io/n8n/commit/0e2eceb33f0a605173ba7e16fe9ac0b4cf8dcaa5)) +* **OpenAI Node:** Support gpt-image-1 for image generation ([#14870](https://github.com/n8n-io/n8n/issues/14870)) ([11379bf](https://github.com/n8n-io/n8n/commit/11379bf656d50d30b8b1dfbeb03d9c64aaf8b26d)) +* Prevent webhook url takeover ([#14783](https://github.com/n8n-io/n8n/issues/14783)) ([be53453](https://github.com/n8n-io/n8n/commit/be53453def4169a5598069218c8e58e6409d5a60)) +* Refresh workflow name in workflows selector when updated ([#14705](https://github.com/n8n-io/n8n/issues/14705)) ([418a588](https://github.com/n8n-io/n8n/commit/418a588e8965c8b994051059a5ae8dbc2c87b860)) + + +### Performance Improvements + +* **editor:** Improve performance of the new logs view ([#14861](https://github.com/n8n-io/n8n/issues/14861)) ([40aadbf](https://github.com/n8n-io/n8n/commit/40aadbf880e525aedfbe8a89f0a2b78e298357bc)) + + + +# [1.90.0](https://github.com/n8n-io/n8n/compare/n8n@1.89.0...n8n@1.90.0) (2025-04-21) + + +### Bug Fixes + +* AWS credential signing http request - convert form to body ([#14060](https://github.com/n8n-io/n8n/issues/14060)) ([652d0f5](https://github.com/n8n-io/n8n/commit/652d0f5428c1aecab25dcdb99487941310599a2a)) +* **core:** Allow `$evaluateExpression` to resolve in task runners ([#14641](https://github.com/n8n-io/n8n/issues/14641)) ([7c1be05](https://github.com/n8n-io/n8n/commit/7c1be0584577621702e5ec39162881afee0cfd90)) +* **core:** Fix missing encryption key check on workers ([#14603](https://github.com/n8n-io/n8n/issues/14603)) ([de03452](https://github.com/n8n-io/n8n/commit/de034526310639a4451f356b7a6ad0f01fb3fe51)) +* **core:** Fix using secrets for credentials on oauth callback ([#14711](https://github.com/n8n-io/n8n/issues/14711)) ([09806c3](https://github.com/n8n-io/n8n/commit/09806c36ae0ae9f4b590999e83b90e9b42651eec)) +* **core:** Handle task runner accept timeout error ([#14709](https://github.com/n8n-io/n8n/issues/14709)) ([a93dd53](https://github.com/n8n-io/n8n/commit/a93dd53a3b16118dbe7d5463d90f2406d0660134)) +* **core:** Only check for folder changes when `parentFolderId` is present ([#14618](https://github.com/n8n-io/n8n/issues/14618)) ([08e73d3](https://github.com/n8n-io/n8n/commit/08e73d3aed5e706ebab9abb8895bbd9f5314c978)) +* **core:** Prefer triggers with run data during partial executions ([#14691](https://github.com/n8n-io/n8n/issues/14691)) ([ddfe594](https://github.com/n8n-io/n8n/commit/ddfe594cf0486ed64d0ddc58e634ae6dbceb72e7)) +* **core:** Propagate env to task runner ([#14638](https://github.com/n8n-io/n8n/issues/14638)) ([8e26d55](https://github.com/n8n-io/n8n/commit/8e26d5514d14e16e6f2777805dad372127b4a932)) +* **core:** Reschedule Insights flushing after skipping for empty buffer ([#14637](https://github.com/n8n-io/n8n/issues/14637)) ([513f20a](https://github.com/n8n-io/n8n/commit/513f20a902c526ca8bd137f9c3189970e8b97243)) +* **editor:** Account for `$evaluateExpression` in Codemirror ([#14643](https://github.com/n8n-io/n8n/issues/14643)) ([68a8761](https://github.com/n8n-io/n8n/commit/68a87619afa6ef1c0b1d4e9dcabe9fee9bb82321)) +* **editor:** Allow long links on rendered markdown split to multiple lines ([#14635](https://github.com/n8n-io/n8n/issues/14635)) ([b80d753](https://github.com/n8n-io/n8n/commit/b80d7531d4cbc920950ff5445d821512dd5dd5ec)) +* **editor:** Differentiate $fromAI overrides within lists ([#14696](https://github.com/n8n-io/n8n/issues/14696)) ([5aa6054](https://github.com/n8n-io/n8n/commit/5aa6054bc96fce1eb798d639d1a37ae2eff78455)) +* **editor:** Fix expanding schema items with same names on NDV ([#14673](https://github.com/n8n-io/n8n/issues/14673)) ([ad386cd](https://github.com/n8n-io/n8n/commit/ad386cde31bf30084f49a8d0231ef49f50374fa7)) +* **editor:** Fix Insights display time saved from minutes ([#14622](https://github.com/n8n-io/n8n/issues/14622)) ([6dd7756](https://github.com/n8n-io/n8n/commit/6dd7756191623e2d11f64d04ba21481505f923ad)) +* **editor:** Fix same order of buttons in run data selector ([#14677](https://github.com/n8n-io/n8n/issues/14677)) ([74de403](https://github.com/n8n-io/n8n/commit/74de4037be7f46c9ce9f5fa844c8182f6f38ed16)) +* **editor:** Fix updating of canvas node issue when credential is set-up ([#14633](https://github.com/n8n-io/n8n/issues/14633)) ([bc26923](https://github.com/n8n-io/n8n/commit/bc269234cf2b78f6887a272baa4563c482ed1597)) +* **editor:** Highlight the suggested data type with bold in the Filter node ([#14707](https://github.com/n8n-io/n8n/issues/14707)) ([8325ca1](https://github.com/n8n-io/n8n/commit/8325ca1a4533ff8e5f79a19aafa89f9ed7d47e0d)) +* **editor:** Improve handling of trailing 'Trigger' in NodeCreator search ([#14612](https://github.com/n8n-io/n8n/issues/14612)) ([8b3b474](https://github.com/n8n-io/n8n/commit/8b3b4749eaf5ff401f1d6499c95da00094e9c9d2)) +* **editor:** Restrict what binary-data types can be viewed in the UI ([#14685](https://github.com/n8n-io/n8n/issues/14685)) ([11a36b7](https://github.com/n8n-io/n8n/commit/11a36b758df38e16a2c2c258628bf58a030a12d7)) +* **editor:** Show `Execute previous Node` panel after disabled node in Schema view ([#14443](https://github.com/n8n-io/n8n/issues/14443)) ([a12c952](https://github.com/n8n-io/n8n/commit/a12c9522d5992a7fc2719644a9cfa4af5cdc3712)) +* Fix issue with open router credential test ([#14440](https://github.com/n8n-io/n8n/issues/14440)) ([4362f37](https://github.com/n8n-io/n8n/commit/4362f37df2aed8f4aa8ef22cd8ab0df971ea9a9f)) +* **Freshdesk Node:** Fix types issue ([#14730](https://github.com/n8n-io/n8n/issues/14730)) ([38eaef9](https://github.com/n8n-io/n8n/commit/38eaef97fe798037cac8e33455584639a03a531f)) +* **HubSpot Node:** Include item index in error messages ([#14704](https://github.com/n8n-io/n8n/issues/14704)) ([e6f26b8](https://github.com/n8n-io/n8n/commit/e6f26b895de0dd3d204c88c10b47286ab63d5f64)) +* **LinkedIn Node:** API version update ([#14697](https://github.com/n8n-io/n8n/issues/14697)) ([77e2ac6](https://github.com/n8n-io/n8n/commit/77e2ac64950c6dc7e8d61702e1fc1d66d4730990)) +* **MCP Client Tool Node:** Stringify tool result ([#14554](https://github.com/n8n-io/n8n/issues/14554)) ([390c508](https://github.com/n8n-io/n8n/commit/390c5089463ed7aada32a32b1fb34ddf454f7faa)) +* **n8n Form Trigger Node:** Remove relience on getWorkflowStaticData for passing query parameters ([#14728](https://github.com/n8n-io/n8n/issues/14728)) ([3feab31](https://github.com/n8n-io/n8n/commit/3feab31792fe4426f58af89009bf39a1bee0213a)) +* **Postgres Node:** Fix inserting `null` or `undefined` in `type=json` columns ([#14672](https://github.com/n8n-io/n8n/issues/14672)) ([3add0b8](https://github.com/n8n-io/n8n/commit/3add0b82ba2e77a0416ea273184aceeabfae2a57)) +* **Respond to Webhook Node:** Disable expressions in Respond With ([#14727](https://github.com/n8n-io/n8n/issues/14727)) ([fec2284](https://github.com/n8n-io/n8n/commit/fec2284a779917f4d53d05e9b107a977655999e4)) +* **Wait Node:** Fix wait node tests by always using a future date ([#14733](https://github.com/n8n-io/n8n/issues/14733)) ([81d08ad](https://github.com/n8n-io/n8n/commit/81d08ad1de4ccfa56b020afc69da2b85f7b1149e)) +* **Wait Node:** Validate datetime for specific time mode ([#14701](https://github.com/n8n-io/n8n/issues/14701)) ([3641c1f](https://github.com/n8n-io/n8n/commit/3641c1fb8738471c2ad68d2882ab299506fca4a1)) + + +### Features + +* **core:** Add scopes to API Keys ([#14176](https://github.com/n8n-io/n8n/issues/14176)) ([e1b9407](https://github.com/n8n-io/n8n/commit/e1b9407fe9c742c4f050a721f182dfe494101d84)) +* **core:** Add support for signed URLs for binary data ([#14492](https://github.com/n8n-io/n8n/issues/14492)) ([7723a13](https://github.com/n8n-io/n8n/commit/7723a138a1f411566ddb0499ac0806ae2cac53e7)) +* **editor:** Add drag n drop support for folders ([#14549](https://github.com/n8n-io/n8n/issues/14549)) ([57444d3](https://github.com/n8n-io/n8n/commit/57444d3a16d77aabf3bd4d3835d86eca7aeff8f7)) +* **editor:** Align `DynamicStructuredTool` and `DynamicTool` name fields ([#14604](https://github.com/n8n-io/n8n/issues/14604)) ([302258d](https://github.com/n8n-io/n8n/commit/302258dda2d6bb9c8712cb5fbc5d36dd91c6c261)) +* **editor:** Fix paywall for dashboard disabled licences ([#14617](https://github.com/n8n-io/n8n/issues/14617)) ([46d9b60](https://github.com/n8n-io/n8n/commit/46d9b6004984bec75687a1b5ffdb3c28868eedb6)) +* **editor:** Log details panel ([#14409](https://github.com/n8n-io/n8n/issues/14409)) ([1e0853b](https://github.com/n8n-io/n8n/commit/1e0853b24aa3070805cf9cc7694faf30772ea7ef)) +* **editor:** Show logs panel in execution history page ([#14477](https://github.com/n8n-io/n8n/issues/14477)) ([ed19f0f](https://github.com/n8n-io/n8n/commit/ed19f0f39b2a5d4daa67a0645bb82ce0e71968fb)) +* **HTTP Request Node:** Replace HttpRequest Tool with tool version of standalone HttpRequest Node ([#14669](https://github.com/n8n-io/n8n/issues/14669)) ([a8fee9a](https://github.com/n8n-io/n8n/commit/a8fee9a4f3e80d9d651fe39927db14f261761648)) +* Option to skip validation in getNodeParameter ([#14726](https://github.com/n8n-io/n8n/issues/14726)) ([b615e51](https://github.com/n8n-io/n8n/commit/b615e51f1319130c3a0f918e882aa3ae3bf5a4f2)) +* Resolve `parentFolder` when retrieving workflow ([#14656](https://github.com/n8n-io/n8n/issues/14656)) ([bc12f66](https://github.com/n8n-io/n8n/commit/bc12f662e76c435bf385c62823259c626bcafe79)) +* **Supabase Node:** Add support for database schema ([#13339](https://github.com/n8n-io/n8n/issues/13339)) ([23f25ce](https://github.com/n8n-io/n8n/commit/23f25cefbfcefbdb0cf74af384f9cda20ced518f)) + + +### Performance Improvements + +* **core:** Reuse context in `runOnceForEachItem` mode in task runner ([#14682](https://github.com/n8n-io/n8n/issues/14682)) ([ff47279](https://github.com/n8n-io/n8n/commit/ff47279b25b4a5dc3a224945cb05d53b5e80a7ed)) + + + +# [1.89.0](https://github.com/n8n-io/n8n/compare/n8n@1.88.0...n8n@1.89.0) (2025-04-14) + + +### Bug Fixes + +* **AI Agent Node:** Allow removal of system message ([#14407](https://github.com/n8n-io/n8n/issues/14407)) ([2451ead](https://github.com/n8n-io/n8n/commit/2451ead9f3028ed290e5d76ac6fd5b203e4b51db)) +* **core:** Restore run data value when offloading to workers ([#14516](https://github.com/n8n-io/n8n/issues/14516)) ([313cfec](https://github.com/n8n-io/n8n/commit/313cfec74da58dc2403d828a2a211c6c4004f7df)) +* **core:** Schema parsing bypassing config key assignment ([#14556](https://github.com/n8n-io/n8n/issues/14556)) ([d390258](https://github.com/n8n-io/n8n/commit/d39025800106b4a406fa34332367775d20c54545)) +* **core:** Validate task runner mode ([#14376](https://github.com/n8n-io/n8n/issues/14376)) ([52170f1](https://github.com/n8n-io/n8n/commit/52170f1bbc48f2b7ddcb05d7a6fb4f9c1762a3c6)) +* **editor:** Add telemetry to Insights ([#14511](https://github.com/n8n-io/n8n/issues/14511)) ([2fb970a](https://github.com/n8n-io/n8n/commit/2fb970aaa1ed7cf588f9e52ee21814fb5fb4e07f)) +* **editor:** Implement insight's design feedback 4 ([#14550](https://github.com/n8n-io/n8n/issues/14550)) ([cc089be](https://github.com/n8n-io/n8n/commit/cc089bebd4e12fd9c3690c53568cb0100c838be4)) +* **editor:** Schema preview displays for some empty nodes ([#14488](https://github.com/n8n-io/n8n/issues/14488)) ([8c35229](https://github.com/n8n-io/n8n/commit/8c352293b576285d6b371efea72ed31ce274f9a2)) +* Fix issue with Qdrant not always connecting ([#14328](https://github.com/n8n-io/n8n/issues/14328)) ([6748db9](https://github.com/n8n-io/n8n/commit/6748db9c3b104aae23c6c3f432e3ac61b5dbef1c)) +* **Summarize Node:** Fix property key with dot notation ([#14528](https://github.com/n8n-io/n8n/issues/14528)) ([c890108](https://github.com/n8n-io/n8n/commit/c89010871d28e2cc4d5807fb7b3aa29968a0364c)) +* **xAI Grok Chat Model Node:** Remove stream_options parameter ([#14496](https://github.com/n8n-io/n8n/issues/14496)) ([8c417d7](https://github.com/n8n-io/n8n/commit/8c417d7b1b7473cdca0f74bffa41aa87321d808e)) + + +### Features + +* Add nested search in folders ([#14372](https://github.com/n8n-io/n8n/issues/14372)) ([cade309](https://github.com/n8n-io/n8n/commit/cade309d3b972bb7be364c42869d2cd11a0e121a)) +* **API:** Add user id information on push tracking when available ([#14519](https://github.com/n8n-io/n8n/issues/14519)) ([6195789](https://github.com/n8n-io/n8n/commit/61957899e1ca9c013dbd0c3385f9484d724df3a0)) +* **API:** Match insights summary period with number of days filter in graphs and table ([#14500](https://github.com/n8n-io/n8n/issues/14500)) ([ec73958](https://github.com/n8n-io/n8n/commit/ec73958797d1a0a821eda9501507c849859d39a9)) +* **core:** Add a new option to customize SSH tunnel idle timeout ([#14522](https://github.com/n8n-io/n8n/issues/14522)) ([965baae](https://github.com/n8n-io/n8n/commit/965baae093c22d2a67a1e4d76c85da9910806994)) +* **core:** Handle disabled modules logic and db engine dependent default for insights ([#14243](https://github.com/n8n-io/n8n/issues/14243)) ([b568caa](https://github.com/n8n-io/n8n/commit/b568caa209c92cb3998243562f22706d7e0f235b)) +* **core:** Make runtime prototype mutation protection configurable for task runner ([#14515](https://github.com/n8n-io/n8n/issues/14515)) ([d6ae388](https://github.com/n8n-io/n8n/commit/d6ae3889ca48e29469a372396550798678f7bd14)) +* **editor:** Make logs applicable for all nodes ([#14397](https://github.com/n8n-io/n8n/issues/14397)) ([d24b684](https://github.com/n8n-io/n8n/commit/d24b684a9520ab8bf14d3496fa3d12adf92ad317)) +* **editor:** Show specific content when 0 data on insights ([#14609](https://github.com/n8n-io/n8n/issues/14609)) ([296d5b4](https://github.com/n8n-io/n8n/commit/296d5b4a7f3c5740cdbd2208132124481274caf0)) +* **editor:** Tweak nodes panel to update AI category name and highlight AI Transform node ([#14608](https://github.com/n8n-io/n8n/issues/14608)) ([9c34e3d](https://github.com/n8n-io/n8n/commit/9c34e3d534e46191a82d99b23786f0bba945a2fb)) +* **Salesforce Node:** Add credentials test ([#14486](https://github.com/n8n-io/n8n/issues/14486)) ([6b2d31c](https://github.com/n8n-io/n8n/commit/6b2d31ca2b40869e1b16982db0a202a7b4e41eba)) +* **SearXNG Node:** Add SearXNG tool ([#13218](https://github.com/n8n-io/n8n/issues/13218)) ([0b46055](https://github.com/n8n-io/n8n/commit/0b460552bae3feb1394fd62a0b977204246c4397)) +* Update Easy AI workflow ([#14521](https://github.com/n8n-io/n8n/issues/14521)) ([53812a5](https://github.com/n8n-io/n8n/commit/53812a544f00ac71ab79c77bdc2c978bf801bec9)) + + + +# [1.88.0](https://github.com/n8n-io/n8n/compare/n8n@1.87.0...n8n@1.88.0) (2025-04-10) + + +### Bug Fixes + +* **API:** Fix ratio tests on insights by workflow ([#14448](https://github.com/n8n-io/n8n/issues/14448)) ([6c73d7e](https://github.com/n8n-io/n8n/commit/6c73d7ed812521f64a4db9a5437f2596953f204d)) +* **Code Node:** Use an explicit `indexURL` to load the pyodide runtime ([#14487](https://github.com/n8n-io/n8n/issues/14487)) ([860bb1e](https://github.com/n8n-io/n8n/commit/860bb1ef92bbe4e6fa6f8478dfde37c8e498af65)) +* **core:** Fall back to regular mode for `execute` and `executeBatch` commands ([#14381](https://github.com/n8n-io/n8n/issues/14381)) ([84e85c9](https://github.com/n8n-io/n8n/commit/84e85c9469e0417de2d8960a5aa6a91807690e91)) +* **core:** Fix routing for waiting webhooks and forms ([#14470](https://github.com/n8n-io/n8n/issues/14470)) ([b5d5b57](https://github.com/n8n-io/n8n/commit/b5d5b5711838fc5a1b63edce4f7fb8dc0a087883)) +* **editor:** Fix race condition for updating node and workflow execution status ([#14353](https://github.com/n8n-io/n8n/issues/14353)) ([a495d81](https://github.com/n8n-io/n8n/commit/a495d81c13e9a2721d4900db94d4a9765b0795c2)) +* **editor:** Improve node creator items typing and fix missing icons ([#14449](https://github.com/n8n-io/n8n/issues/14449)) ([ad6c83a](https://github.com/n8n-io/n8n/commit/ad6c83afd48dd4f75873231e20316d730a678fdc)) +* **editor:** Inline expression previews are not displayed in NDV ([#14475](https://github.com/n8n-io/n8n/issues/14475)) ([aee83bf](https://github.com/n8n-io/n8n/commit/aee83bf3449f275a90d3e51e5bb10e59edd31135)) +* **editor:** Prevent moving non owned workflows to folders ([#14474](https://github.com/n8n-io/n8n/issues/14474)) ([2a5c3d4](https://github.com/n8n-io/n8n/commit/2a5c3d49900e8e3e2dee5f19c3922ccc017bd1d7)) +* Isolate license SDK proxy settings to avoid affecting unrelated requests ([#14451](https://github.com/n8n-io/n8n/issues/14451)) ([7463f0c](https://github.com/n8n-io/n8n/commit/7463f0c18a67e8e89144bd3e29bba21f245c7a94)) + + +### Features + +* **Azure Cosmos DB Node:** New node ([#14156](https://github.com/n8n-io/n8n/issues/14156)) ([b52f9f0](https://github.com/n8n-io/n8n/commit/b52f9f0f6cbd96005f6f81a522955a47379316e1)) +* **Email Trigger (IMAP) Node:** IMAP trigger node returns message UIDs ([#13152](https://github.com/n8n-io/n8n/issues/13152)) ([4578709](https://github.com/n8n-io/n8n/commit/457870953aadb54578912abb234c9d546ccbaca2)) +* **MCP Client Tool Node:** Add MCP Client Tool Node to connect to MCP servers over SSE ([#14464](https://github.com/n8n-io/n8n/issues/14464)) ([34252f5](https://github.com/n8n-io/n8n/commit/34252f53f9ca586c15f40713678074a358d877f1)) +* **MCP Server Trigger Node:** Add MCP Server Trigger node to expose tools to MCP clients ([#14403](https://github.com/n8n-io/n8n/issues/14403)) ([8360283](https://github.com/n8n-io/n8n/commit/8360283c6f28f8d3e7cc60ae1a3982964954cf79)) +* **Milvus Vector Store Node:** Add support for the Milvus vector db ([#14404](https://github.com/n8n-io/n8n/issues/14404)) ([048b9d7](https://github.com/n8n-io/n8n/commit/048b9d75890bf27e1dbfbd2862d7377a35e15434)) + + +### Performance Improvements + +* **core:** Batch raw insights save and add metadata cache ([#14261](https://github.com/n8n-io/n8n/issues/14261)) ([60afb46](https://github.com/n8n-io/n8n/commit/60afb46094ea11f2479130867ae2409f171e9f09)) + + + +# [1.87.0](https://github.com/n8n-io/n8n/compare/n8n@1.86.0...n8n@1.87.0) (2025-04-07) + + +### Bug Fixes + +* **API:** Insights - round failure rate to 3 decimals ([#14325](https://github.com/n8n-io/n8n/issues/14325)) ([cf37ee3](https://github.com/n8n-io/n8n/commit/cf37ee3cedb60dc9bbf6c87c7f6212213c93c61e)) +* **Code Node:** Ensure 'Generate Code' works with empty input object ([#14352](https://github.com/n8n-io/n8n/issues/14352)) ([480b44d](https://github.com/n8n-io/n8n/commit/480b44d0245484fc1554051728a1cb34672a361f)) +* **core:** Add cross-origin checks on push endpoints ([#14365](https://github.com/n8n-io/n8n/issues/14365)) ([178628a](https://github.com/n8n-io/n8n/commit/178628a59b322543ac05c0fdf9c62c59c72380b3)) +* **core:** Detach workflow from parent folder in source project when transferring ownership ([#14414](https://github.com/n8n-io/n8n/issues/14414)) ([adbfb44](https://github.com/n8n-io/n8n/commit/adbfb44c26681f8ee6ca94867d3a778bfb2f10a1)) +* **core:** Return correct trigger count for nodes with multiple webhooks ([#14300](https://github.com/n8n-io/n8n/issues/14300)) ([39e2d35](https://github.com/n8n-io/n8n/commit/39e2d35a710307b9e4d170c3a71eeccc34a08738)) +* **core:** Sandbox HTML binary files in viewing mode ([#14350](https://github.com/n8n-io/n8n/issues/14350)) ([9c8a5f9](https://github.com/n8n-io/n8n/commit/9c8a5f9c57e65a56a3b7da5dfa805d23c55e5ee3)) +* **core:** Upgrade swagger/openai setup to address CVE-2024-57083 ([#14314](https://github.com/n8n-io/n8n/issues/14314)) ([4a95035](https://github.com/n8n-io/n8n/commit/4a95035b3a46565d04d5c89879ed6f9fd0bb6923)) +* Disable autocomplete expression for specialized editor types ([#14344](https://github.com/n8n-io/n8n/issues/14344)) ([0450542](https://github.com/n8n-io/n8n/commit/04505421709f12fda79d3e0eed50baada717cea1)) +* **editor:** Autofocus Search in Move Folder Dialog ([#14378](https://github.com/n8n-io/n8n/issues/14378)) ([d60ed74](https://github.com/n8n-io/n8n/commit/d60ed746bb5477498ab29d5c8b6b7fc63e6065e5)) +* **editor:** Change label for unexecuted nodes ([#14260](https://github.com/n8n-io/n8n/issues/14260)) ([08450b2](https://github.com/n8n-io/n8n/commit/08450b20af0535cf643dc945867602635ce21e6a)) +* **editor:** Disable Drag and Drop for ResourceMapper 'attemptToConvertTypes' switch ([#14327](https://github.com/n8n-io/n8n/issues/14327)) ([64aeb37](https://github.com/n8n-io/n8n/commit/64aeb378140dd2e4f0ae7bfe499062403324c992)) +* **editor:** Fix empty objects in schema view in output panel ([#14355](https://github.com/n8n-io/n8n/issues/14355)) ([2f0b5e4](https://github.com/n8n-io/n8n/commit/2f0b5e488ef70cd0ebec4bc2599c42da281265be)) +* **editor:** Fix search highlights on node details view table schema ([#14379](https://github.com/n8n-io/n8n/issues/14379)) ([3d64d14](https://github.com/n8n-io/n8n/commit/3d64d140e9eb4cd9fc58c673a307cf1ac83654b5)) +* **editor:** Hide node toolbar on `AddNodes` node type ([#14317](https://github.com/n8n-io/n8n/issues/14317)) ([a245a5c](https://github.com/n8n-io/n8n/commit/a245a5ca61fb33c86b2727fe8d1866bc6c4c868c)) +* **editor:** Improve sub-workflow debugging for more node error types ([#14347](https://github.com/n8n-io/n8n/issues/14347)) ([9104743](https://github.com/n8n-io/n8n/commit/9104743a5fb4305eeccec55f35ea9555c0a9a979)) +* **editor:** Insights FE fixes and improvements ([#14398](https://github.com/n8n-io/n8n/issues/14398)) ([e8a7acd](https://github.com/n8n-io/n8n/commit/e8a7acda6bf656b8e2da08a502cc6d4dc64895a6)) +* **editor:** Make styling of search labels inline ([#14323](https://github.com/n8n-io/n8n/issues/14323)) ([8abbc30](https://github.com/n8n-io/n8n/commit/8abbc304f013bbbd63982f47fde22230592063a2)) +* **editor:** Memory getting rendered in chat on workflow load ([#14346](https://github.com/n8n-io/n8n/issues/14346)) ([5382531](https://github.com/n8n-io/n8n/commit/538253197079e92117943a6e18021094ddda76fa)) +* **editor:** Support 'View Execution' links with multiple branches ([#14345](https://github.com/n8n-io/n8n/issues/14345)) ([744e2da](https://github.com/n8n-io/n8n/commit/744e2da3f9e3af6e5d20827a965bcfb01acd7cdc)) +* **Google Sheets Node:** Improve error message when row_number is null or undefined ([#14229](https://github.com/n8n-io/n8n/issues/14229)) ([c5e2d2d](https://github.com/n8n-io/n8n/commit/c5e2d2dddcea53c9896113e41eb66ca4d01e124b)) +* **HTTP Request Tool Node:** Fix OAuth2 requests ([#14380](https://github.com/n8n-io/n8n/issues/14380)) ([7cef314](https://github.com/n8n-io/n8n/commit/7cef314535bbbf59f26916206a066bfe3d5591f9)) +* **Jira Trigger Node:** Fix Jira webhook subscriptions on Jira v10+ ([#14333](https://github.com/n8n-io/n8n/issues/14333)) ([cd212e4](https://github.com/n8n-io/n8n/commit/cd212e4f78f6704a8b2f1a27f507dcc7784ef6a5)) +* **Kafka Node:** Upgrade kafkajs and add tests ([#14326](https://github.com/n8n-io/n8n/issues/14326)) ([5c58e8e](https://github.com/n8n-io/n8n/commit/5c58e8e8cfe5d04917b29d3d7ab9c14c27d95fdf)) +* **n8n Form Node:** Add doctype to page ([#14306](https://github.com/n8n-io/n8n/issues/14306)) ([df9ea09](https://github.com/n8n-io/n8n/commit/df9ea095fcc4b0fceb8a11c611396ef31a0c4fca)) +* **n8n Form Node:** Remove field requirement and do not inherit description ([#14254](https://github.com/n8n-io/n8n/issues/14254)) ([4bc1c1a](https://github.com/n8n-io/n8n/commit/4bc1c1a547abd1bfff1c43c93f77c33aa1b2ccc7)) +* **Pipedrive Trigger Node:** Add support for webhooks v2 ([#14220](https://github.com/n8n-io/n8n/issues/14220)) ([a39502f](https://github.com/n8n-io/n8n/commit/a39502f3bb28d566df284cebf5a12c99b41d103f)) +* Show correct message on retry ([#14321](https://github.com/n8n-io/n8n/issues/14321)) ([501963f](https://github.com/n8n-io/n8n/commit/501963f568a6e0a5f9782fe10ad0c2e9aaf6756c)) + + +### Features + +* Add example `@n8n/n8n-extension-insights` extension package ([#14360](https://github.com/n8n-io/n8n/issues/14360)) ([b91be49](https://github.com/n8n-io/n8n/commit/b91be496c3c36a8bfe61b57943ea890554e0df3a)) +* Add support for google vertex embeddings ([#14359](https://github.com/n8n-io/n8n/issues/14359)) ([85cbfb6](https://github.com/n8n-io/n8n/commit/85cbfb64c0a2645c833c73a03624fdfd0adf2dab)) +* **Airtop Node:** Add Airtop node ([#13809](https://github.com/n8n-io/n8n/issues/13809)) ([a7a165d](https://github.com/n8n-io/n8n/commit/a7a165dda259e2626a94c220eb0ffab166544485)) +* **API:** Add config to set age threshold for insights compaction ([#14221](https://github.com/n8n-io/n8n/issues/14221)) ([17a829f](https://github.com/n8n-io/n8n/commit/17a829f1a2da1aa0297c8f1f6b0e4af2fbb70c4b)) +* **API:** Add insights config on frontend settings ([#14315](https://github.com/n8n-io/n8n/issues/14315)) ([837131f](https://github.com/n8n-io/n8n/commit/837131fc96b7d48d8a5d612d431706d5f8dea41a)) +* **API:** Implement BE api for insights data ([#14064](https://github.com/n8n-io/n8n/issues/14064)) ([db38149](https://github.com/n8n-io/n8n/commit/db381492a94d664f5e2ccc42f8830b20c8c19852)) +* **core:** Add special `[@tool](https://github.com/tool)` displayOption ([#14318](https://github.com/n8n-io/n8n/issues/14318)) ([73748e3](https://github.com/n8n-io/n8n/commit/73748e300ed4a7f57b9c01f72eba2fbaa24ceef9)) +* **core:** Don't store insights for sub workflow executions ([#14384](https://github.com/n8n-io/n8n/issues/14384)) ([7379f44](https://github.com/n8n-io/n8n/commit/7379f44896e2a3e66fee9d547ba929928f93a104)) +* **core:** Make detaching floatable entitlements on shutdown configurable ([#14266](https://github.com/n8n-io/n8n/issues/14266)) ([c9565fc](https://github.com/n8n-io/n8n/commit/c9565fc0beea2751ba316fc363a275ea28d20653)) +* **core:** Upgrade to express 5 to address CVE-2024-52798 ([#14332](https://github.com/n8n-io/n8n/issues/14332)) ([4110f31](https://github.com/n8n-io/n8n/commit/4110f3188e557a5d8c6d7ee44fb9c23ce73ce751)) +* **editor:** Display a notice for HTTP header auth credentials ([#14389](https://github.com/n8n-io/n8n/issues/14389)) ([ec4dd9f](https://github.com/n8n-io/n8n/commit/ec4dd9f762f02c6da6f1c7e1e7faa1fa89802092)) +* **editor:** Hover actions on the logs overview ([#14386](https://github.com/n8n-io/n8n/issues/14386)) ([8f9ea23](https://github.com/n8n-io/n8n/commit/8f9ea23019241de47fdee3a1da120f7c05a5aadb)) +* **editor:** Insights dashboard ([#13739](https://github.com/n8n-io/n8n/issues/13739)) ([90ba680](https://github.com/n8n-io/n8n/commit/90ba68063116cdca358d74bf3c392af46280a2f5)) +* **editor:** Show error state in the logs overview ([#14248](https://github.com/n8n-io/n8n/issues/14248)) ([37e5349](https://github.com/n8n-io/n8n/commit/37e5349fe139d9f292145d06218aa235b51bab38)) +* **GitHub Node:** GitHub Node Overhaul implementation [#12271](https://github.com/n8n-io/n8n/issues/12271) ([#13238](https://github.com/n8n-io/n8n/issues/13238)) ([33e265a](https://github.com/n8n-io/n8n/commit/33e265aaa8563225eb408fe7dcff8412784cf6f9)) +* **MongoDB Chat Memory Node:** New MongoDB Chat Memory Node ([#14049](https://github.com/n8n-io/n8n/issues/14049)) ([0bac6ff](https://github.com/n8n-io/n8n/commit/0bac6ffac6e8b1db5c9167ef7954a83c9c2230a2)) +* **Postgres Node:** Batching warning for executeQuery operation insert query ([#14287](https://github.com/n8n-io/n8n/issues/14287)) ([f85b851](https://github.com/n8n-io/n8n/commit/f85b85185109b0ebd3f2f0def8a7c4a0902c8014)) +* **Think Tool Node:** ToolThink, a simple tool to force the AI agent to do some thinking ([#14351](https://github.com/n8n-io/n8n/issues/14351)) ([281b70b](https://github.com/n8n-io/n8n/commit/281b70be044b3fd70a26a16d14eebf38bab739a6)) + + + +# [1.86.0](https://github.com/n8n-io/n8n/compare/n8n@1.85.0...n8n@1.86.0) (2025-03-31) + + +### Bug Fixes + +* **API:** Fix import config import ([#14137](https://github.com/n8n-io/n8n/issues/14137)) ([6f60d65](https://github.com/n8n-io/n8n/commit/6f60d657eb0dc6ec9e99fe91d5b5cd99662d7ef8)) +* **API:** Summarize insights from current datetime instead of beginning of the day ([#14186](https://github.com/n8n-io/n8n/issues/14186)) ([bf274c0](https://github.com/n8n-io/n8n/commit/bf274c0a870eba3ff293ee6033289e2d2b39fae1)) +* **Baserow Node:** Fix issue where database selection was returning other types ([#14115](https://github.com/n8n-io/n8n/issues/14115)) ([10f6c3b](https://github.com/n8n-io/n8n/commit/10f6c3b1d35db31376419da0e6e791f9f903d266)) +* **Basic LLM Chain Node:** Prevent incorrect wrapping of output ([#14183](https://github.com/n8n-io/n8n/issues/14183)) ([b9030d4](https://github.com/n8n-io/n8n/commit/b9030d45dead945342be88726cde2d0043ff4ab7)) +* **Basic LLM Chain Node:** Prevent stringifying of structured output on previous versions ([#14200](https://github.com/n8n-io/n8n/issues/14200)) ([bbd6e8e](https://github.com/n8n-io/n8n/commit/bbd6e8ee415f27f40929ec404f5dd6e4c216f423)) +* **core:** Fix OAuth1 callback token request ([#14251](https://github.com/n8n-io/n8n/issues/14251)) ([4ea219b](https://github.com/n8n-io/n8n/commit/4ea219b1f783370c39be3e776e664f71348c67c9)) +* Correct connections in SentimentAnalysis and TextClassifier ([#14155](https://github.com/n8n-io/n8n/issues/14155)) ([70764a0](https://github.com/n8n-io/n8n/commit/70764a02589c146bf8e863c9c652ac30858841af)) +* **editor:** Adjust URL on lost change warning Cancel or failed save ([#13683](https://github.com/n8n-io/n8n/issues/13683)) ([fdcca1d](https://github.com/n8n-io/n8n/commit/fdcca1d0ed7f7c32aa6c40f4751f554826064619)) +* **editor:** Change freeAiCredits success text size ([#14161](https://github.com/n8n-io/n8n/issues/14161)) ([ca01236](https://github.com/n8n-io/n8n/commit/ca01236dd11b3c021358671ed99cbada4a34e325)) +* **editor:** Check for when to show the community+ modal for the folder's feature ([#14146](https://github.com/n8n-io/n8n/issues/14146)) ([9e3bfe2](https://github.com/n8n-io/n8n/commit/9e3bfe23f67dca8d31bcff8758ed5d076477f9f3)) +* **editor:** Handle Leading Spaces in Workflow Search ([#13889](https://github.com/n8n-io/n8n/issues/13889)) ([8aad7db](https://github.com/n8n-io/n8n/commit/8aad7dbaf69d7e2826f8798b6682d269c6c6f37f)) +* **editor:** Remove selection box when only one node selected using selection rectangle ([#14160](https://github.com/n8n-io/n8n/issues/14160)) ([acbaec5](https://github.com/n8n-io/n8n/commit/acbaec550f1ebf560262d6a6492651ebaf72d78d)) +* **editor:** Remove title icon on Overview subpages ([#14128](https://github.com/n8n-io/n8n/issues/14128)) ([4bd42e2](https://github.com/n8n-io/n8n/commit/4bd42e2f3a8a79c33a20f992e2727f8bb3dae101)) +* **editor:** Show left-hand NDV floating nodes in correct order ([#14126](https://github.com/n8n-io/n8n/issues/14126)) ([71f281b](https://github.com/n8n-io/n8n/commit/71f281b90da6f71db04c9b22dee9e5976b0abab4)) +* **Microsoft SQL Node:** Fix maximum call stack on execute query ([#13940](https://github.com/n8n-io/n8n/issues/13940)) ([a082a16](https://github.com/n8n-io/n8n/commit/a082a16c5d785d87ea334bb2285000bd3f44c157)) +* **n8n Form Node:** Hidden field fix ([#14219](https://github.com/n8n-io/n8n/issues/14219)) ([9bd72ea](https://github.com/n8n-io/n8n/commit/9bd72eaa139649811cb1114f3cf40f22d5dfe905)) +* **n8n Form Node:** Show Form Complition after Form Complition page ([#14226](https://github.com/n8n-io/n8n/issues/14226)) ([af77730](https://github.com/n8n-io/n8n/commit/af777307b3fddcf553fb68786260dba79f32d87c)) +* **OpenAI Node:** Show correct inputs for AI node ([#14142](https://github.com/n8n-io/n8n/issues/14142)) ([5bf10cd](https://github.com/n8n-io/n8n/commit/5bf10cdb4abe364a8f914362fb94841530aa02c9)) +* **Slack Node:** Make sure paginated calls use the defined limits ([#14185](https://github.com/n8n-io/n8n/issues/14185)) ([24fad51](https://github.com/n8n-io/n8n/commit/24fad512da9bcd4fd002dfac3cff5935ed00204f)) +* **Slack Trigger Node:** Fix issue with new user event not correctly working ([#14129](https://github.com/n8n-io/n8n/issues/14129)) ([5f4e56f](https://github.com/n8n-io/n8n/commit/5f4e56f75b6659fc21b3d18817f5afabc022b5b7)) +* **Summarize Node:** Fix type casting of strings and numbers ([#14259](https://github.com/n8n-io/n8n/issues/14259)) ([4443a5f](https://github.com/n8n-io/n8n/commit/4443a5f53281064f9d474d61435c83e004d7a403)) + + +### Features + +* **API:** Add day to week compaction for insights dashboard ([#14165](https://github.com/n8n-io/n8n/issues/14165)) ([db99974](https://github.com/n8n-io/n8n/commit/db99974cca364d16391d00d5aec066b68cb8a4e6)) +* **API:** Add failureRate as sort field for insights by workflow ([#14247](https://github.com/n8n-io/n8n/issues/14247)) ([877823d](https://github.com/n8n-io/n8n/commit/877823d887fe7d387a5bbe25a606de1f1d22daa5)) +* **API:** Add fields to insight by time type and export types from index ([#14172](https://github.com/n8n-io/n8n/issues/14172)) ([3d332ab](https://github.com/n8n-io/n8n/commit/3d332ab04fa0de9873cd8944514afa4e2bf7907b)) +* **API:** Create schema and dto types for insights dashboard query param and api responses ([#14163](https://github.com/n8n-io/n8n/issues/14163)) ([6eee081](https://github.com/n8n-io/n8n/commit/6eee081cf3f99e7cf925a0daef0728e5537e1e57)) +* **API:** Return null deviation on insights summary if previous period has no data ([#14193](https://github.com/n8n-io/n8n/issues/14193)) ([ffc0a59](https://github.com/n8n-io/n8n/commit/ffc0a596e00d1cbf14ff2980894d52025bfc1187)) +* **core:** Explicitly warn if tool passed binary data to Agent ([#14071](https://github.com/n8n-io/n8n/issues/14071)) ([88f5851](https://github.com/n8n-io/n8n/commit/88f58514e6d7b5fe11d91b7e524b3447c09474eb)) +* **editor:** Improve schema view empty state when node has binary data ([#14044](https://github.com/n8n-io/n8n/issues/14044)) ([22ddf1b](https://github.com/n8n-io/n8n/commit/22ddf1b644dcddfff3a97bd7953823f63ab7c41a)) +* **editor:** Logs overview panel ([#14045](https://github.com/n8n-io/n8n/issues/14045)) ([d1710a1](https://github.com/n8n-io/n8n/commit/d1710a1da375d13a687add4f48400faab62169d7)) +* **Matrix Node:** Add audio and video media types ([#14057](https://github.com/n8n-io/n8n/issues/14057)) ([cb01f2d](https://github.com/n8n-io/n8n/commit/cb01f2dd0d018ef54fc63b255abc0a054d01b6ed)) +* **SendGrid Node:** Add option to specify "reply to" email addresses ([#14282](https://github.com/n8n-io/n8n/issues/14282)) ([68d9460](https://github.com/n8n-io/n8n/commit/68d9460f2acece495671667cacf6faa2e9a70cbf)) +* **Telegram Trigger Node:** Add options to restrict to chat and user IDs ([#14164](https://github.com/n8n-io/n8n/issues/14164)) ([f651766](https://github.com/n8n-io/n8n/commit/f6517664dd05878b0e5264668c52c74cbdd2d027)) + + + +# [1.85.0](https://github.com/n8n-io/n8n/compare/n8n@1.84.0...n8n@1.85.0) (2025-03-24) + + +### Bug Fixes + +* Allow saved credenitals types of up to 64 characters instead of 32 ([#13985](https://github.com/n8n-io/n8n/issues/13985)) ([bc15bb1](https://github.com/n8n-io/n8n/commit/bc15bb18d9f33abdeed24e26826e7f3308d3eef2)) +* Allow username to be set in Redis chat memory ([#13926](https://github.com/n8n-io/n8n/issues/13926)) ([b2e359a](https://github.com/n8n-io/n8n/commit/b2e359ac1c2dfdf79f8d50fe83998eda5fc34dd2)) +* **core:** Allow running webhook servers in multi-main mode ([#13989](https://github.com/n8n-io/n8n/issues/13989)) ([e0fd505](https://github.com/n8n-io/n8n/commit/e0fd50554d48c873c8f77169d1a17438391dd973)) +* **core:** Bring back the missing GMT and UTC timezone for workflow settings ([#13999](https://github.com/n8n-io/n8n/issues/13999)) ([bda0688](https://github.com/n8n-io/n8n/commit/bda068880ea7a44718e01a156e97f09c9ec2bc46)) +* **core:** Do not use `url.includes` to check for domain names ([#13802](https://github.com/n8n-io/n8n/issues/13802)) ([d3bc80c](https://github.com/n8n-io/n8n/commit/d3bc80c22bbbf0ae39c88a6f085d5f80aa8a0e82)) +* **core:** Don't fail partial execution when an unrelated node is dirty ([#13925](https://github.com/n8n-io/n8n/issues/13925)) ([918cc51](https://github.com/n8n-io/n8n/commit/918cc51abc79bbcfb6a333d5ecafa07a9e986b6f)) +* **core:** Ensure frontend sentry releases also follow semver ([#14019](https://github.com/n8n-io/n8n/issues/14019)) ([401ed2c](https://github.com/n8n-io/n8n/commit/401ed2ce1194ad7ff238debff418f0db77eb06e6)) +* **editor:** Add "time saved per execution" workflow setting ([#13369](https://github.com/n8n-io/n8n/issues/13369)) ([6992c36](https://github.com/n8n-io/n8n/commit/6992c36ebb3aa608ce31396f9b7ed0aa10c80299)) +* **editor:** Add smart decimals directive ([#14054](https://github.com/n8n-io/n8n/issues/14054)) ([1a26fc2](https://github.com/n8n-io/n8n/commit/1a26fc2762dee366d2ce7ccf24e173cdc761c70c)) +* **editor:** Fix routing between workflow editing and new workflow pages ([#14031](https://github.com/n8n-io/n8n/issues/14031)) ([6817abe](https://github.com/n8n-io/n8n/commit/6817abe47facd7ff0e42a66599827d42c4df757c)) + + +### Features + +* Add appendN8nAttribution option to sendAndWait operation ([#13697](https://github.com/n8n-io/n8n/issues/13697)) ([d6d5a66](https://github.com/n8n-io/n8n/commit/d6d5a66f5dc28d926755ca8153f91c7be0742cf5)) +* Add xAiGrok Chat Model node and credentials ([#13670](https://github.com/n8n-io/n8n/issues/13670)) ([cc502fb](https://github.com/n8n-io/n8n/commit/cc502fb8c34b65d569b4abe4603cc8ef1eadc7a7)) +* Allow custom scopes for Entra credential ([#13796](https://github.com/n8n-io/n8n/issues/13796)) ([7e10361](https://github.com/n8n-io/n8n/commit/7e1036187ff7bd5be990f191a3ac8ef002e7812a)) +* **API:** Fix generation strategy for mysql/mariadb ([#14028](https://github.com/n8n-io/n8n/issues/14028)) ([24d8eac](https://github.com/n8n-io/n8n/commit/24d8eac85d8ce95671aabf8500139b3ef3e19a56)) +* **API:** Implement compaction logic for insights ([#14062](https://github.com/n8n-io/n8n/issues/14062)) ([d8433d2](https://github.com/n8n-io/n8n/commit/d8433d289543c40854e59b0384be356a3d7b947d)) +* Cat 720 improve pre merge ci ([#14116](https://github.com/n8n-io/n8n/issues/14116)) ([743b63e](https://github.com/n8n-io/n8n/commit/743b63e97a9a96dfaf35f138a79eddaad9bb2dbb)) +* **core:** Add folder synchronization to environments feature ([#14005](https://github.com/n8n-io/n8n/issues/14005)) ([198f17d](https://github.com/n8n-io/n8n/commit/198f17dbcf0b21e579f9a68466494662257dbe44)) +* **core:** Add tool to uninstall a community node ([#14026](https://github.com/n8n-io/n8n/issues/14026)) ([e0f9506](https://github.com/n8n-io/n8n/commit/e0f9506912aa6a129df332185063291f0627f9ca)) +* **core:** Allow community nodes to be used as tools ([#14042](https://github.com/n8n-io/n8n/issues/14042)) ([9d698ed](https://github.com/n8n-io/n8n/commit/9d698edcebc8cdbf9fefc3bf89a13f9daa32f40b)) +* **core:** Allow customizing auth cookie samesite attribute and CSP headers ([#13855](https://github.com/n8n-io/n8n/issues/13855)) ([17fc5c1](https://github.com/n8n-io/n8n/commit/17fc5c148b99b8f346abf2142a1d2bee567b2621)) +* **core:** Enable folders feature via license server ([#13942](https://github.com/n8n-io/n8n/issues/13942)) ([fa7e7ac](https://github.com/n8n-io/n8n/commit/fa7e7ac2e7b38418619ebe1f3839d47c491419d2)) +* **core:** Implement API to retrieve summary metrics ([#13927](https://github.com/n8n-io/n8n/issues/13927)) ([b616ceb](https://github.com/n8n-io/n8n/commit/b616ceb08b712ecd350114acc48a9a0f35843c0a)) +* **core:** Support importing a singular workflow object ([#14041](https://github.com/n8n-io/n8n/issues/14041)) ([91b2796](https://github.com/n8n-io/n8n/commit/91b27964d80309ce493200289b31a83ef6051b4d)) +* **core:** Update endpoint to update a workflow, to support updating the workflow parent folder (no-chagelog) ([#13906](https://github.com/n8n-io/n8n/issues/13906)) ([3a5cc4a](https://github.com/n8n-io/n8n/commit/3a5cc4ae957ea5f370472f08d2af4ac29c3b21b2)) +* **editor:** Add variables and context section to schema view ([#13875](https://github.com/n8n-io/n8n/issues/13875)) ([c06ce76](https://github.com/n8n-io/n8n/commit/c06ce765f11dcde4731d3739e1aa5f27351c3cc2)) +* **editor:** Always show collapsed panel at the bottom of canvas ([#13715](https://github.com/n8n-io/n8n/issues/13715)) ([2e9d3ad](https://github.com/n8n-io/n8n/commit/2e9d3ad3e14da7aa2f3b3b9577858791e9128908)) +* **editor:** Insights summary banner ([#13424](https://github.com/n8n-io/n8n/issues/13424)) ([df474f3](https://github.com/n8n-io/n8n/commit/df474f3ccbc629a8e308359e6a4973cc00b86e17)) +* **Extract from File Node:** Add relax_quote option ([#13607](https://github.com/n8n-io/n8n/issues/13607)) ([830d2c5](https://github.com/n8n-io/n8n/commit/830d2c5df53c5436f89868dfe23cf55c41585a46)) +* **n8n Form Trigger Node:** Respond with File ([#13507](https://github.com/n8n-io/n8n/issues/13507)) ([8f46371](https://github.com/n8n-io/n8n/commit/8f46371d77262aa0a924e1c58cf9691327e0f193)) +* **Salesforce Node:** Add support for PKCE ([#14082](https://github.com/n8n-io/n8n/issues/14082)) ([defeb2e](https://github.com/n8n-io/n8n/commit/defeb2e817dbc559844124f20e6bebf7717d878a)) +* **SeaTable Node:** Update node with new options ([#11431](https://github.com/n8n-io/n8n/issues/11431)) ([d0fdb11](https://github.com/n8n-io/n8n/commit/d0fdb11499de2e5fb1602b7cc86f2b24543ce50f)) +* **Simple Vector Store Node:** Implement store cleaning based on age/used memory ([#13986](https://github.com/n8n-io/n8n/issues/13986)) ([e06c552](https://github.com/n8n-io/n8n/commit/e06c552a6a0471ec60862247f6a597b8ab5f9cd3)) + + + +# [1.84.0](https://github.com/n8n-io/n8n/compare/n8n@1.83.0...n8n@1.84.0) (2025-03-17) + + +### Bug Fixes + +* **AWS SES Node:** Encode template parameters properly ([#13570](https://github.com/n8n-io/n8n/issues/13570)) ([ca8d249](https://github.com/n8n-io/n8n/commit/ca8d249700e341ea79173a5d6d148205db0ff0ac)) +* **core:** Avoid using structuredClone on node descriptions ([#13832](https://github.com/n8n-io/n8n/issues/13832)) ([d2df154](https://github.com/n8n-io/n8n/commit/d2df154b49ad4e89ac1b5e5b1b49df57a377175e)) +* **core:** Clean run data for dirty nodes properly, including their children ([#13821](https://github.com/n8n-io/n8n/issues/13821)) ([b3f9cde](https://github.com/n8n-io/n8n/commit/b3f9cde3fd1a22d007d323785fa6ff09f945dd8a)) +* **core:** Ensure worker stops picking up new jobs while shutting down ([#13714](https://github.com/n8n-io/n8n/issues/13714)) ([4fe2495](https://github.com/n8n-io/n8n/commit/4fe249580a57f167000c1cad294feb37170e5e8b)) +* **core:** Find correct start nodes when the first node after that has no run data has pinned data ([#13784](https://github.com/n8n-io/n8n/issues/13784)) ([cbf2476](https://github.com/n8n-io/n8n/commit/cbf2476819402b273b55baf6e4eb91d6ce14dac5)) +* **core:** License should ignore empty input on onFeatureChange ([#13912](https://github.com/n8n-io/n8n/issues/13912)) ([dedcdbd](https://github.com/n8n-io/n8n/commit/dedcdbd31496928d3cb8820fd0c2542d056bf7de)) +* **core:** Log all command errors messages ([#13827](https://github.com/n8n-io/n8n/issues/13827)) ([e8334ee](https://github.com/n8n-io/n8n/commit/e8334eefa16d552e6ea8f915818928ae9de114ec)) +* **core:** Update samlify and xml-crypto to address CVE-2025-29775 and CVE-2025-29774 ([#13951](https://github.com/n8n-io/n8n/issues/13951)) ([c91688d](https://github.com/n8n-io/n8n/commit/c91688d49404c5640c03a0238ea7bbc4d4b34fc2)) +* Do not trigger sendAndWait response on bot visit if response type is approval ([#13792](https://github.com/n8n-io/n8n/issues/13792)) ([526a2e4](https://github.com/n8n-io/n8n/commit/526a2e4ca3a488ee1a6c48aa0dc7053f298da2f5)) +* **editor:** Add disabled state with tooltip on project creation buttons if user lacks permission ([#13867](https://github.com/n8n-io/n8n/issues/13867)) ([e33d0d7](https://github.com/n8n-io/n8n/commit/e33d0d7466969c372b2ea82eb1b1ebf52ed5fe92)) +* **editor:** Decrease notification max-height ([#13858](https://github.com/n8n-io/n8n/issues/13858)) ([1c2feb4](https://github.com/n8n-io/n8n/commit/1c2feb455aa26687b957499625c4f05243e6434c)) +* **editor:** Disable `test step` option in context menu for sub-nodes ([#13816](https://github.com/n8n-io/n8n/issues/13816)) ([b6d5092](https://github.com/n8n-io/n8n/commit/b6d5092258a7f0d59adf38e89afd6534e21422fc)) +* **editor:** Disable deactivated node execution ([#13643](https://github.com/n8n-io/n8n/issues/13643)) ([473f6d4](https://github.com/n8n-io/n8n/commit/473f6d48db4bcde28b1bb4bae7727f33073c8deb)) +* **editor:** Fix logo alignment issues ([#13870](https://github.com/n8n-io/n8n/issues/13870)) ([d2e4706](https://github.com/n8n-io/n8n/commit/d2e4706b973af490fcdda507ef12b544bdf67c21)) +* **editor:** Fix NDV panels size on narrow screens ([#13708](https://github.com/n8n-io/n8n/issues/13708)) ([899f6c9](https://github.com/n8n-io/n8n/commit/899f6c98243df2dc661be5ce7d9b242b62f9790f)) +* **editor:** Fix options parameters that have extra displayName field ([#13928](https://github.com/n8n-io/n8n/issues/13928)) ([eec3251](https://github.com/n8n-io/n8n/commit/eec325127c075a0a0db429d5b41db5c2851fc187)) +* **editor:** Increase contrast on hover for AI button ([#13920](https://github.com/n8n-io/n8n/issues/13920)) ([c239b8f](https://github.com/n8n-io/n8n/commit/c239b8f07a6951a3b5a0203b94e5c43d8707c769)) +* **editor:** Tweak schema view empty state copy and styling ([#13819](https://github.com/n8n-io/n8n/issues/13819)) ([cfc7a14](https://github.com/n8n-io/n8n/commit/cfc7a14e18e1adc078579eff3c2eb3598f7096aa)) +* Execute method should be assigned to a Routing node even if it has webhook defined ([#13910](https://github.com/n8n-io/n8n/issues/13910)) ([3a4247a](https://github.com/n8n-io/n8n/commit/3a4247a91c5ffef6a65cd1e28007f8961022fc03)) +* **MySQL Node:** Fix potential sql injection ([#13818](https://github.com/n8n-io/n8n/issues/13818)) ([dd4f51c](https://github.com/n8n-io/n8n/commit/dd4f51cff5bec5f045fe549ffd9ab04367e543a9)) +* **n8n Form Node:** Resolve expressions in HTML fields ([#13755](https://github.com/n8n-io/n8n/issues/13755)) ([de23ae5](https://github.com/n8n-io/n8n/commit/de23ae55585d2b43a338314cddbbf506ffd5daf6)) +* **n8n Form Trigger Node:** Add back the query selector for multiselect ([#13987](https://github.com/n8n-io/n8n/issues/13987)) ([39208dc](https://github.com/n8n-io/n8n/commit/39208dcb7033b19fa2fdd20e16293fd5a6d6f19d)) +* **OpenAI Chat Model Node:** Sort models alphabetically ([#13909](https://github.com/n8n-io/n8n/issues/13909)) ([3103748](https://github.com/n8n-io/n8n/commit/31037484a51ec0e41840e697f7427034c6274796)) +* **Postgres Node:** RMC do not mark collumn as required if identity_generation is BY DEFAULT ([#13752](https://github.com/n8n-io/n8n/issues/13752)) ([b563254](https://github.com/n8n-io/n8n/commit/b5632545c5972d7716445b9337d6598d7b8b6dbd)) +* **Structured Output Parser Node, Auto-fixing Output Parser Node, Tools Agent Node:** Structured output improvements ([#13908](https://github.com/n8n-io/n8n/issues/13908)) ([5b6b787](https://github.com/n8n-io/n8n/commit/5b6b78709efa5665e8fc7b260b8de71763b4d6ae)) +* Update Sentry `rewriteFramesIntegration` prefix (no-changleog) ([#13900](https://github.com/n8n-io/n8n/issues/13900)) ([1eec246](https://github.com/n8n-io/n8n/commit/1eec246f4eecb7dbb9ec3130e0e460e720a2d42c)) + + +### Features + +* **editor:** Add toJsonString to string extensions ([#13798](https://github.com/n8n-io/n8n/issues/13798)) ([4e93ffd](https://github.com/n8n-io/n8n/commit/4e93ffda8bfa39e33120f76b5c2f4d393fcdfbfa)) +* **editor:** Popping logs out into a new window ([#13788](https://github.com/n8n-io/n8n/issues/13788)) ([4d04c22](https://github.com/n8n-io/n8n/commit/4d04c227a988639bcbd6bcfd9e6df675afa12958)) +* Hints for tools and agent ([#13386](https://github.com/n8n-io/n8n/issues/13386)) ([ec8a719](https://github.com/n8n-io/n8n/commit/ec8a719efaaf03f1269abdea567a41d404e212d8)) +* **Merge Node:** Better pairedItem mapping in combineBySql operation if SELECT query ([#13849](https://github.com/n8n-io/n8n/issues/13849)) ([881d3f8](https://github.com/n8n-io/n8n/commit/881d3f8771b547adf6e4bfe060575b1992b1d34c)) +* **MongoDB Atlas Vector Store Node:** Add Mongo db vector store Node ([#12924](https://github.com/n8n-io/n8n/issues/12924)) ([3d87228](https://github.com/n8n-io/n8n/commit/3d872287fbedb72ded1172b2fcbe0b82dc2b8fd6)) +* **WhatsApp Trigger Node:** New option to opt-out from message status updates ([#13751](https://github.com/n8n-io/n8n/issues/13751)) ([9c040ee](https://github.com/n8n-io/n8n/commit/9c040ee5a533ab23f913614a4d56927956ac7a8a)) + + + +# [1.83.0](https://github.com/n8n-io/n8n/compare/n8n@1.82.0...n8n@1.83.0) (2025-03-10) + + +### Bug Fixes + +* **Airtable Node:** Table RLC should depend on Base RLC ([#13735](https://github.com/n8n-io/n8n/issues/13735)) ([321fac2](https://github.com/n8n-io/n8n/commit/321fac2efa62d256b99e7ed6ea5b8706ef604ab1)) +* **Call n8n Workflow Tool Node:** Return all items from subexecution ([#13393](https://github.com/n8n-io/n8n/issues/13393)) ([d9e3cfe](https://github.com/n8n-io/n8n/commit/d9e3cfe13fdd9c47474cd129db2f943871138331)) +* **core:** Correct NODE_OPTIONS export syntax for custom certificates ([#13779](https://github.com/n8n-io/n8n/issues/13779)) ([080fc51](https://github.com/n8n-io/n8n/commit/080fc514e6a8485430028962cf8b29e5fa03a9d7)) +* **core:** Do not validate email when LDAP is enabled ([#13605](https://github.com/n8n-io/n8n/issues/13605)) ([17738c5](https://github.com/n8n-io/n8n/commit/17738c50962d25ac34c8fd0248bd2b2e0863b429)) +* **core:** Fix task runner error report from user-defined function ([#13706](https://github.com/n8n-io/n8n/issues/13706)) ([9bedd87](https://github.com/n8n-io/n8n/commit/9bedd87744bb21317c22b96dae902ebb3790bde2)) +* **core:** Pass `NODE_PATH` to task runners ([#13652](https://github.com/n8n-io/n8n/issues/13652)) ([906770a](https://github.com/n8n-io/n8n/commit/906770a06aafc5814f8a7af543adfc0ec06361da)) +* **editor:** Allow pinned data for Code node AI generation ([#13638](https://github.com/n8n-io/n8n/issues/13638)) ([6d7e346](https://github.com/n8n-io/n8n/commit/6d7e346e4f06c9f90cf1ca01de88cc84832e200f)) +* **editor:** Apply html sanitization in right lifecycle ([#13703](https://github.com/n8n-io/n8n/issues/13703)) ([8ab3073](https://github.com/n8n-io/n8n/commit/8ab3073323b8b1c4d32ed541b1cb46b72aa0a80d)) +* **editor:** Copy JSON from selected run if node has been multiple times ([#13673](https://github.com/n8n-io/n8n/issues/13673)) ([5eddf00](https://github.com/n8n-io/n8n/commit/5eddf00fa1bf9b4bcf15a05eec0050aba3d54a2f)) +* **editor:** Don't flag uiStore as dirty on node selected ([#13641](https://github.com/n8n-io/n8n/issues/13641)) ([4f6d76c](https://github.com/n8n-io/n8n/commit/4f6d76cd25215e75e4b03eb84f0476b346cbedcd)) +* **editor:** Enable pin data button to also un-pin ([#13642](https://github.com/n8n-io/n8n/issues/13642)) ([24681f8](https://github.com/n8n-io/n8n/commit/24681f843c906c6b83c8c686b5c11fa18d792fd7)) +* **editor:** Expand error view to full output panel width ([#13688](https://github.com/n8n-io/n8n/issues/13688)) ([97ca702](https://github.com/n8n-io/n8n/commit/97ca702f8cb660224975e2eb956e2a513f753127)) +* **editor:** Fix code node displays lint messages in wrong location ([#13664](https://github.com/n8n-io/n8n/issues/13664)) ([d3ead68](https://github.com/n8n-io/n8n/commit/d3ead6805981140decf7f26ccda40cc9c1248356)) +* **editor:** Fix GCP icon size for external secrets modal ([#13672](https://github.com/n8n-io/n8n/issues/13672)) ([77425f0](https://github.com/n8n-io/n8n/commit/77425f04cf05e161eb82aea57d11b93dd489cc1f)) +* **editor:** Fix opening 'Schema' view by default after opening binary nodes ([#13676](https://github.com/n8n-io/n8n/issues/13676)) ([3cd34b5](https://github.com/n8n-io/n8n/commit/3cd34b5af6da43d38c358b9cd23c8ea49b28e83d)) +* **editor:** Fix RLC dropdown vanishing when focusing search input ([#13579](https://github.com/n8n-io/n8n/issues/13579)) ([5ac8691](https://github.com/n8n-io/n8n/commit/5ac869194656181ed93338199e07e682a8649afe)) +* **editor:** Fix save keybind in expression editor and unfocused node details view ([#13640](https://github.com/n8n-io/n8n/issues/13640)) ([9ba9443](https://github.com/n8n-io/n8n/commit/9ba9443460529728404cf3be70b3aeb45c1768e6)) +* **editor:** Fix sidebar logo container layout ([#13203](https://github.com/n8n-io/n8n/issues/13203)) ([850d458](https://github.com/n8n-io/n8n/commit/850d458858bee4dd88db081758a04932dc4aef54)) +* **editor:** Ignore required module type declaration error in code node ([#13628](https://github.com/n8n-io/n8n/issues/13628)) ([2a5738a](https://github.com/n8n-io/n8n/commit/2a5738aebe617b9dabbdb77db48b0f5412cefe04)) +* **editor:** Match nodes for autocomplete ([#13716](https://github.com/n8n-io/n8n/issues/13716)) ([8043a6c](https://github.com/n8n-io/n8n/commit/8043a6ce82cc539ddc88ec919ec86e52da1e18d9)) +* **editor:** Render credential-only nodes when loading from the backend ([#13689](https://github.com/n8n-io/n8n/issues/13689)) ([c821f1c](https://github.com/n8n-io/n8n/commit/c821f1c532048c9afa0bc51e3566ae65bf9caf0a)) +* **editor:** Show error details in resource locator dropdown ([#13679](https://github.com/n8n-io/n8n/issues/13679)) ([630608c](https://github.com/n8n-io/n8n/commit/630608c8bda85739196f51e32dc57efae88858a7)) +* **editor:** Support pasting values that start with `=` ([#13699](https://github.com/n8n-io/n8n/issues/13699)) ([9e83ff5](https://github.com/n8n-io/n8n/commit/9e83ff51da3587f4525c6fdfeceaa85c79834510)) +* **Elasticsearch Node:** Use POST instead of GET to allow request body in search API ([#13302](https://github.com/n8n-io/n8n/issues/13302)) ([783bf7b](https://github.com/n8n-io/n8n/commit/783bf7b3bc90a3a82169fb14e057640f45e656e3)) +* **GitHub Node:** Fix workflow resource locator ([#13599](https://github.com/n8n-io/n8n/issues/13599)) ([b7f7121](https://github.com/n8n-io/n8n/commit/b7f7121cb8fd5e707f602e9f3ea18fffaf75d526)) +* **Google Sheets Node:** Accommodate special characters when updating row ([#13589](https://github.com/n8n-io/n8n/issues/13589)) ([e633e91](https://github.com/n8n-io/n8n/commit/e633e91f69669dc01540aca8be7c3d43672dcea3)) +* In addNodeToBeExecuted if stillDataMissing allow more then 2 inputs ([#13704](https://github.com/n8n-io/n8n/issues/13704)) ([e9a8a7f](https://github.com/n8n-io/n8n/commit/e9a8a7f8755980848bd5041d6a443c518b99ee18)) +* **n8n Form Trigger Node:** Sanitize HTML for formNode ([#13595](https://github.com/n8n-io/n8n/issues/13595)) ([20dfaa3](https://github.com/n8n-io/n8n/commit/20dfaa3be6ee03498771ca0a62567e562bbab9da)) +* **S3 Node:** Fix issue when connecting to Supabase storage ([#13667](https://github.com/n8n-io/n8n/issues/13667)) ([5fe33ef](https://github.com/n8n-io/n8n/commit/5fe33efc944a8adf07093badfe43773a34f79d6f)) + + +### Features + +* **editor:** Schema preview UI updates ([#13578](https://github.com/n8n-io/n8n/issues/13578)) ([8790a0d](https://github.com/n8n-io/n8n/commit/8790a0df3de2bc6a1909358017abf6734823faad)) + + + +# [1.82.0](https://github.com/n8n-io/n8n/compare/n8n@1.81.0...n8n@1.82.0) (2025-03-03) + + +### Bug Fixes + +* **Call n8n Workflow Tool Node:** Support concurrent invocations of the tool ([#13526](https://github.com/n8n-io/n8n/issues/13526)) ([5334661](https://github.com/n8n-io/n8n/commit/5334661b76909f48aa4e45af889e6180c025eed6)) +* **core:** Gracefully handle missing tasks metadata ([#13632](https://github.com/n8n-io/n8n/issues/13632)) ([999fb81](https://github.com/n8n-io/n8n/commit/999fb8174ae6bb34354cb8c6f85f769cb64e8ae4)) +* **core:** Remove `index.html` caching entirely ([#13563](https://github.com/n8n-io/n8n/issues/13563)) ([afba8f9](https://github.com/n8n-io/n8n/commit/afba8f9ff89054d54e1cf70070ae5710bc9ddd37)) +* **editor:** Add workflows to the store when fetching current page ([#13583](https://github.com/n8n-io/n8n/issues/13583)) ([c4f3293](https://github.com/n8n-io/n8n/commit/c4f329377828d80a54b71f5733ea7d9b4ee91f48)) +* **editor:** Ai 672 minor UI fixes on evaluation creation ([#13461](https://github.com/n8n-io/n8n/issues/13461)) ([b791677](https://github.com/n8n-io/n8n/commit/b791677ffa8c82161c4c40b65bc62d93f2e7bc9e)) +* **editor:** Ai 675 minor tweaks to tests list ([#13467](https://github.com/n8n-io/n8n/issues/13467)) ([5ad950f](https://github.com/n8n-io/n8n/commit/5ad950f60371546414ff17eb31171f2259e70f57)) +* **editor:** Don't show duplicate logs when tree is deeply nested ([#13537](https://github.com/n8n-io/n8n/issues/13537)) ([d550382](https://github.com/n8n-io/n8n/commit/d550382a4a43c54cae47e9071236aa18efe38a5d)) +* **editor:** Fix browser crash with large execution result ([#13580](https://github.com/n8n-io/n8n/issues/13580)) ([1c8c7e3](https://github.com/n8n-io/n8n/commit/1c8c7e34f9d2c8363c441aeb8c562ac91088a687)) +* **editor:** Fix github star button layout ([#13630](https://github.com/n8n-io/n8n/issues/13630)) ([139b5b3](https://github.com/n8n-io/n8n/commit/139b5b378daba6df18639eeb4f326edce7752e11)) +* **editor:** Fix icon color on 'Call n8n Workflow Tool' node ([#13568](https://github.com/n8n-io/n8n/issues/13568)) ([90d0943](https://github.com/n8n-io/n8n/commit/90d09431af97570a3a6adfb0470a18681af28001)) +* **editor:** Fix icon spacing in accordion title ([#13539](https://github.com/n8n-io/n8n/issues/13539)) ([ebaaf0e](https://github.com/n8n-io/n8n/commit/ebaaf0e3d9602052f76f61b90fb073e390896cea)) +* **editor:** Fix keyboard shortcuts no longer working after editing sticky note ([#13502](https://github.com/n8n-io/n8n/issues/13502)) ([ab41fc3](https://github.com/n8n-io/n8n/commit/ab41fc3fb5f15e9c7ce7279b46cec90a511d0e0d)) +* **editor:** Fix workflows list status filter ([#13621](https://github.com/n8n-io/n8n/issues/13621)) ([4067fb0](https://github.com/n8n-io/n8n/commit/4067fb0b12d242c795c6598df6c4090d48cec7b1)) +* **editor:** Hide fromAI button in old workflow tool ([#13552](https://github.com/n8n-io/n8n/issues/13552)) ([6ef8d34](https://github.com/n8n-io/n8n/commit/6ef8d34f969ddb9e80b82dc50b38698249089af2)) +* **editor:** Parse out nodeType ([#13474](https://github.com/n8n-io/n8n/issues/13474)) ([1cd13b6](https://github.com/n8n-io/n8n/commit/1cd13b639efcfabf183740bb6634023c66d5ce99)) +* **editor:** Show dropdown scrollbars only when appropriate ([#13562](https://github.com/n8n-io/n8n/issues/13562)) ([615a42a](https://github.com/n8n-io/n8n/commit/615a42afd52d0d95dd30ed9aa231b9921e0708fe)) +* **editor:** Show JSON full-screen Editor Window in Full Height ([#13350](https://github.com/n8n-io/n8n/issues/13350)) ([46dcce3](https://github.com/n8n-io/n8n/commit/46dcce341fbfa1c2a44a08f3dc93f1f8f16808c8)) +* **editor:** Show scrollbar in Element UI popup ([#13259](https://github.com/n8n-io/n8n/issues/13259)) ([c021a7e](https://github.com/n8n-io/n8n/commit/c021a7e4b2daccc59541bab25c1447339dd68c09)) +* **editor:** Undo keybinding changes related to window focus/blur events ([#13559](https://github.com/n8n-io/n8n/issues/13559)) ([6ddcc1f](https://github.com/n8n-io/n8n/commit/6ddcc1f8c93f86b0d111cae1b24518d621d8fe84)) +* **Odoo Node:** Model and fields dynamic fetching errors ([#13511](https://github.com/n8n-io/n8n/issues/13511)) ([294f019](https://github.com/n8n-io/n8n/commit/294f0194145ca4139d9d9cea0729bf83d0871c94)) +* **Postgres Node:** Accommodate null values in query parameters for expressions ([#13544](https://github.com/n8n-io/n8n/issues/13544)) ([6c266ac](https://github.com/n8n-io/n8n/commit/6c266acced95500148532b4fc015fe5d9587db76)) +* **QuickBooks Online Node:** Add qty to quickbooks invoice line details ([#13602](https://github.com/n8n-io/n8n/issues/13602)) ([7c4e2f0](https://github.com/n8n-io/n8n/commit/7c4e2f014c0b38935a4d661646e773ad26fc97e1)) +* **seven Node:** Remove obsolete options and fix typos ([#13122](https://github.com/n8n-io/n8n/issues/13122)) ([d02c8b0](https://github.com/n8n-io/n8n/commit/d02c8b0d7dbd4144c954a66aa0e78e43122b6e9a)) +* **Switch Node:** Fix an issue in ordering rules in Switch Node ([#13476](https://github.com/n8n-io/n8n/issues/13476)) ([0fb6607](https://github.com/n8n-io/n8n/commit/0fb66076ba6120a7cb2401102ff8d1d6220ae106)) + + +### Features + +* **Anthropic Chat Model Node:** Fetch models dynamically & support thinking ([#13543](https://github.com/n8n-io/n8n/issues/13543)) ([461df37](https://github.com/n8n-io/n8n/commit/461df371f76b9dee9916a985a2bd2197facbcf6b)) +* **Azure Storage Node:** New node ([#12536](https://github.com/n8n-io/n8n/issues/12536)) ([727f6f3](https://github.com/n8n-io/n8n/commit/727f6f3c0e5cef2d0cd4cd1ef1c6fa8f4d3f69ec)) +* **core:** Add metric for active workflow count ([#13420](https://github.com/n8n-io/n8n/issues/13420)) ([3aa679e](https://github.com/n8n-io/n8n/commit/3aa679e4ac411d0d34e039fa6c43bc98f2e3670f)) +* **core:** Fix partial workflow execution with specific trigger data ([#13505](https://github.com/n8n-io/n8n/issues/13505)) ([9029dac](https://github.com/n8n-io/n8n/commit/9029dace5c682e4b5df4f18f2f51098dce6436e5)) +* **core:** Make Tools Agent the default Agent type, deprecate other agent types ([#13459](https://github.com/n8n-io/n8n/issues/13459)) ([a60d106](https://github.com/n8n-io/n8n/commit/a60d106ebb4fb71e80f90a17965d7fb79d7806c6)) +* **core:** Support executing single nodes not part of a graph as a partial execution ([#13529](https://github.com/n8n-io/n8n/issues/13529)) ([8a34f02](https://github.com/n8n-io/n8n/commit/8a34f027c531f0d37fc8088c13d7e289cd8897ce)) +* **editor:** Add functionality to create folders ([#13473](https://github.com/n8n-io/n8n/issues/13473)) ([2cb9d9e](https://github.com/n8n-io/n8n/commit/2cb9d9e29fc961a417d06c1449b79d4a0a66658e)) +* **editor:** Automatically tidy up workflows ([#13471](https://github.com/n8n-io/n8n/issues/13471)) ([f381a24](https://github.com/n8n-io/n8n/commit/f381a24145271f4df4fa5c9345bb12c984f6e1fc)) +* **editor:** Indicate dirty nodes with yellow borders/connectors on canvas ([#13040](https://github.com/n8n-io/n8n/issues/13040)) ([75493ef](https://github.com/n8n-io/n8n/commit/75493ef6ef4ee47d0ccf217cd5c2e58754f60c12)) +* **editor:** Rename 'In-Memory Vector Store' to 'Simple Vector Store' ([#13472](https://github.com/n8n-io/n8n/issues/13472)) ([35c00d0](https://github.com/n8n-io/n8n/commit/35c00d0c846e8a1e214aea3690ea60ff80d03eed)) +* **editor:** Rename 'Window Buffer Memory' to 'Simple Memory' ([#13477](https://github.com/n8n-io/n8n/issues/13477)) ([819fc2d](https://github.com/n8n-io/n8n/commit/819fc2da63ce7f06d4702bce698d382eb64c45a3)) +* Hackmation - automatically switch to expression mode ([#13213](https://github.com/n8n-io/n8n/issues/13213)) ([6953b0d](https://github.com/n8n-io/n8n/commit/6953b0d53a28448022c9de0a2f6294c9390a3b48)) +* **n8n Form Trigger Node, Chat Trigger Node:** Allow to customize form and chat css ([#13506](https://github.com/n8n-io/n8n/issues/13506)) ([289041e](https://github.com/n8n-io/n8n/commit/289041e997eedb660356cdbd259660b7c3117194)) +* **n8n Vertica credentials only Node:** New node ([#12256](https://github.com/n8n-io/n8n/issues/12256)) ([d3fe3de](https://github.com/n8n-io/n8n/commit/d3fe3dea32207dfdb2a43db0def96466a31daa66)) +* Update AWS credential to support more regions ([#13524](https://github.com/n8n-io/n8n/issues/13524)) ([b50658c](https://github.com/n8n-io/n8n/commit/b50658cbc64c0a6fc000b11dca0cca49cc707471)) +* WhatsApp Business Cloud Node - new operation sendAndWait ([#12941](https://github.com/n8n-io/n8n/issues/12941)) ([97defb3](https://github.com/n8n-io/n8n/commit/97defb3a833bb269a4a3fc573a8e250a0d0e0deb)) + + + +# [1.81.0](https://github.com/n8n-io/n8n/compare/n8n@1.80.0...n8n@1.81.0) (2025-02-24) + + +### Bug Fixes + +* Always clear popupWindowState before showing popup from form trigger ([#13363](https://github.com/n8n-io/n8n/issues/13363)) ([b7f1265](https://github.com/n8n-io/n8n/commit/b7f12650f1f42c0ff15c1da3e5ade350fb1e23d2)) +* **Code Node:** Fix `$items` in Code node when using task runner ([#13368](https://github.com/n8n-io/n8n/issues/13368)) ([87b3c50](https://github.com/n8n-io/n8n/commit/87b3c508b3d5a7d6f3b9f8377de66567a04fa970)) +* **core:** Avoid renewing the license on init to prevent excessive duplicate renewal calls ([#13347](https://github.com/n8n-io/n8n/issues/13347)) ([1e1f528](https://github.com/n8n-io/n8n/commit/1e1f52846641515ad4479ab1088e78a9266e452d)) +* **core:** Ensure that 'workflow-post-execute' event has userId whenever it's available ([#13326](https://github.com/n8n-io/n8n/issues/13326)) ([f41e353](https://github.com/n8n-io/n8n/commit/f41e353887fef4269510d25fa87b73da4cf925f9)) +* **core:** Fix DB migrations for MySQL ([#13261](https://github.com/n8n-io/n8n/issues/13261)) ([d0968a1](https://github.com/n8n-io/n8n/commit/d0968a10d56ac5c97974129742ba8f8a85997dac)) +* **core:** Fix resuming executions on test webhooks from Wait forms ([#13410](https://github.com/n8n-io/n8n/issues/13410)) ([8ffd316](https://github.com/n8n-io/n8n/commit/8ffd3167d58d30f087fd31010e6f79f1398d8f49)) +* **core:** Handle connections for missing nodes in a workflow ([#13362](https://github.com/n8n-io/n8n/issues/13362)) ([1e5feb1](https://github.com/n8n-io/n8n/commit/1e5feb195d50054939f85c9e1b5a32885c579901)) +* **core:** Make sure middleware works with legacy API Keys ([#13390](https://github.com/n8n-io/n8n/issues/13390)) ([ca76ef4](https://github.com/n8n-io/n8n/commit/ca76ef4bc248a3bcde844bc8378d38eed269f032)) +* **core:** Return original hooks errors to the frontend ([#13365](https://github.com/n8n-io/n8n/issues/13365)) ([5439181](https://github.com/n8n-io/n8n/commit/5439181e92f20fef1423575cabec7acbe1740b26)) +* **editor:** Correctly close node creator when selecting/deselecting a node ([#13338](https://github.com/n8n-io/n8n/issues/13338)) ([c3dc66e](https://github.com/n8n-io/n8n/commit/c3dc66ee7372927fcfd6baac3b9d853690e39c99)) +* **editor:** Do not show credential details popup for users without necessary scopes with direct link ([#13264](https://github.com/n8n-io/n8n/issues/13264)) ([a5401d0](https://github.com/n8n-io/n8n/commit/a5401d06a58ef026f44499d05b42a8d0dbe2520e)) +* **editor:** Do not show project settings for users without permission with direct link ([#13246](https://github.com/n8n-io/n8n/issues/13246)) ([fa488f1](https://github.com/n8n-io/n8n/commit/fa488f15619f798a0360c96492f2928ac661d9ee)) +* **editor:** Don't open form popup window if different trigger node is used ([#13391](https://github.com/n8n-io/n8n/issues/13391)) ([57a9a5b](https://github.com/n8n-io/n8n/commit/57a9a5b15f55aae0301851e93847ed87feb081e8)) +* **editor:** Fix configurable node description margins and text alignment ([#13318](https://github.com/n8n-io/n8n/issues/13318)) ([c881ea2](https://github.com/n8n-io/n8n/commit/c881ea2c7b43a4fb610533dd553520a6de51f22d)) +* **editor:** Fix workflow moving E2E tests ([#13396](https://github.com/n8n-io/n8n/issues/13396)) ([073b05b](https://github.com/n8n-io/n8n/commit/073b05b10c81e3a0451c310bc0bde25170e1591e)) +* **editor:** Optionally share credentials used by the workflow when moving the workflow between projects ([#12524](https://github.com/n8n-io/n8n/issues/12524)) ([7bd83d7](https://github.com/n8n-io/n8n/commit/7bd83d7d330b6f01b5798461f2218254a9964d87)) +* **editor:** Polyfill `Array.prototype.toSorted` (no-chanhelog) ([#13463](https://github.com/n8n-io/n8n/issues/13463)) ([f2b15ea](https://github.com/n8n-io/n8n/commit/f2b15ea086fcc541a5a584998985d712335210ec)) +* **editor:** Register/unregister keybindings on window focus/blur ([#13419](https://github.com/n8n-io/n8n/issues/13419)) ([7a504dc](https://github.com/n8n-io/n8n/commit/7a504dc30fcf0c7641528ed469835811f82bb098)) +* **editor:** Switch back to selection mode on window blur ([#13341](https://github.com/n8n-io/n8n/issues/13341)) ([415e25b](https://github.com/n8n-io/n8n/commit/415e25b5d524b0d3c391403f129468e57bbb918e)) +* Prevent flicker during paginated workflow navigation ([#13348](https://github.com/n8n-io/n8n/issues/13348)) ([d277e0b](https://github.com/n8n-io/n8n/commit/d277e0ba0e5d87500457538b4b0f1363e267f071)) + + +### Features + +* **core:** Hackmation - Add last activity metric ([#13237](https://github.com/n8n-io/n8n/issues/13237)) ([272f55b](https://github.com/n8n-io/n8n/commit/272f55b80f1d4576d1675040bd2775210c4ab5e9)) +* **editor:** Change rename node keyboard shortcut to Space on new canvas ([#11872](https://github.com/n8n-io/n8n/issues/11872)) ([c90d0d9](https://github.com/n8n-io/n8n/commit/c90d0d9161ec161cd1afd6aa5b56345c1611f9c9)) +* **editor:** Implement breadcrumbs component ([#13317](https://github.com/n8n-io/n8n/issues/13317)) ([db297f1](https://github.com/n8n-io/n8n/commit/db297f107d81738d57e298135a9c279ad83345dc)) +* **editor:** Implement folder navigation in workflows list ([#13370](https://github.com/n8n-io/n8n/issues/13370)) ([0eae14e](https://github.com/n8n-io/n8n/commit/0eae14e27ab4fab3229750d6b2a32868db1e8dd4)) +* **editor:** Rename 'Text' fields on AI nodes to 'Prompt' ([#13416](https://github.com/n8n-io/n8n/issues/13416)) ([4fa666b](https://github.com/n8n-io/n8n/commit/4fa666b976423365299e915130384e10c8e12528)) +* Enable partial exections v2 by default ([#13344](https://github.com/n8n-io/n8n/issues/13344)) ([29ae239](https://github.com/n8n-io/n8n/commit/29ae2396c99d54d8f3db71e6370516f0dc354d00)) +* **n8n Form Node:** Limit wait time parameters ([#13160](https://github.com/n8n-io/n8n/issues/13160)) ([14b6f8b](https://github.com/n8n-io/n8n/commit/14b6f8b97275e38ba4a4c1819e8e32b711de21ba)) + + + +# [1.80.0](https://github.com/n8n-io/n8n/compare/n8n@1.79.0...n8n@1.80.0) (2025-02-17) + + +### Bug Fixes + +* **AI Agent Node:** Move model retrieval into try/catch to fix continueOnFail handling ([#13165](https://github.com/n8n-io/n8n/issues/13165)) ([47c5688](https://github.com/n8n-io/n8n/commit/47c5688618001a51c9412c5d07fd25d85b8d1b8d)) +* **Code Tool Node:** Fix Input Schema Parameter not hiding correctly ([#13245](https://github.com/n8n-io/n8n/issues/13245)) ([8e15ebf](https://github.com/n8n-io/n8n/commit/8e15ebf8333d06b5fe4d5bf8ee39f285b31332d7)) +* **core:** Redact credentials ([#13263](https://github.com/n8n-io/n8n/issues/13263)) ([052f177](https://github.com/n8n-io/n8n/commit/052f17744d072cd16ce90ea94fa9873b4ea2ffed)) +* **core:** Reduce risk of race condition during workflow activation loop ([#13186](https://github.com/n8n-io/n8n/issues/13186)) ([64c5b6e](https://github.com/n8n-io/n8n/commit/64c5b6e0604ce9da6b19dd5f04e61e38209b3153)) +* **core:** Run full manual execution when a trigger is executed even if run data exists ([#13194](https://github.com/n8n-io/n8n/issues/13194)) ([66acb1b](https://github.com/n8n-io/n8n/commit/66acb1bcb68926526ed98a5fe5b89bdaa74148d6)) +* Display correct editor URL ([#13251](https://github.com/n8n-io/n8n/issues/13251)) ([67a4ed1](https://github.com/n8n-io/n8n/commit/67a4ed18a13cb2bc54b3472b9a8beb2f274c2bd2)) +* **editor:** Add template id to metadata when saving workflows from json ([#13172](https://github.com/n8n-io/n8n/issues/13172)) ([2a92032](https://github.com/n8n-io/n8n/commit/2a92032704ebc4e0cdd11aa59b6834a9d891ffb0)) +* **editor:** Fix page size resetting when filters are reset on workflows page ([#13265](https://github.com/n8n-io/n8n/issues/13265)) ([b4380d0](https://github.com/n8n-io/n8n/commit/b4380d05087e1213641ee322875cf51bf706d2f5)) +* **editor:** Open autocompletion when starting an expression ([#13249](https://github.com/n8n-io/n8n/issues/13249)) ([6377635](https://github.com/n8n-io/n8n/commit/6377635bf03387c8d0ae5d54848113258bbabacc)) +* **editor:** Prevent pagination setting from being overwritten in URL ([#13266](https://github.com/n8n-io/n8n/issues/13266)) ([d1e65a1](https://github.com/n8n-io/n8n/commit/d1e65a1cd5841f1d4e815f8da36713cdb18281a4)) +* **editor:** Propagate isReadOnly to ResourceMapper `Attempt to Convert Types` switch ([#13216](https://github.com/n8n-io/n8n/issues/13216)) ([617f841](https://github.com/n8n-io/n8n/commit/617f841e0d82f2b40fcf9ac4bf2cb6a8010b517f)) +* **editor:** Render assignments without ID correctly ([#13252](https://github.com/n8n-io/n8n/issues/13252)) ([d116f12](https://github.com/n8n-io/n8n/commit/d116f121e351e3d81e1b5d6c52eb3e5c3b68ae43)) + + +### Features + +* **editor:** Add pagination to the workflows list ([#13100](https://github.com/n8n-io/n8n/issues/13100)) ([8e37088](https://github.com/n8n-io/n8n/commit/8e370882490d569ff85bba6b7f0a1320fab5eb91)) + + + +# [1.79.0](https://github.com/n8n-io/n8n/compare/n8n@1.78.0...n8n@1.79.0) (2025-02-13) + + +### Bug Fixes + +* **Airtable Node:** Use item at correct index in base/getSchema ([#13174](https://github.com/n8n-io/n8n/issues/13174)) ([f2e3586](https://github.com/n8n-io/n8n/commit/f2e35869c143d15ea79017ec103370c4aa92a92f)) +* **Basic LLM Chain Node:** Use correct mimetype for binary data ([#12978](https://github.com/n8n-io/n8n/issues/12978)) ([2b1eb04](https://github.com/n8n-io/n8n/commit/2b1eb049f2c639f054e7c5f671483e29fd600567)) +* **Call n8n Sub-Workflow Tool Node:** Fix json type when using $fromAI ([#13102](https://github.com/n8n-io/n8n/issues/13102)) ([9e4e1ca](https://github.com/n8n-io/n8n/commit/9e4e1ca1f48b08143883668be037026075eddb25)) +* **core:** Add an option to enable dual-stack lookup to support IPv6 for redis ([#13118](https://github.com/n8n-io/n8n/issues/13118)) ([be39d0a](https://github.com/n8n-io/n8n/commit/be39d0a0f11c0274d2be1d7e1579264a95b18f7b)) +* **core:** Allow secrets manager secrets to be used in credentials ([#13110](https://github.com/n8n-io/n8n/issues/13110)) ([cae98e7](https://github.com/n8n-io/n8n/commit/cae98e733d4cac7b5082bae345be504d00876c4b)) +* **core:** Do not save credential overwrites data into the database ([#13170](https://github.com/n8n-io/n8n/issues/13170)) ([298a7b0](https://github.com/n8n-io/n8n/commit/298a7b00386dcfb670c27e6e1cc374f73d00a7a5)) +* **core:** Fix high volume of node operation errors in Sentry ([#13053](https://github.com/n8n-io/n8n/issues/13053)) ([e59d983](https://github.com/n8n-io/n8n/commit/e59d9830bfda51bcf43246e32bf88bd045f8b8ad)) +* **core:** Fix resuming executions on test webhooks from Wait nodes ([#13168](https://github.com/n8n-io/n8n/issues/13168)) ([5dddf77](https://github.com/n8n-io/n8n/commit/5dddf772cf1704f65ed86cea1f4640e3b274b14e)) +* **core:** Handle cancellation of waiting executions correctly ([#13051](https://github.com/n8n-io/n8n/issues/13051)) ([fc440eb](https://github.com/n8n-io/n8n/commit/fc440eb68bb6750dc096cdaeb50fed7cf0718b07)) +* **core:** Handle credential decryption failures gracefully on the API ([#13166](https://github.com/n8n-io/n8n/issues/13166)) ([a4c5334](https://github.com/n8n-io/n8n/commit/a4c5334853cbc71eddbb035b86d3dda68c3ef81e)) +* **core:** Handle missing `json` property on `nodeSuccessData` ([#13219](https://github.com/n8n-io/n8n/issues/13219)) ([aedea7a](https://github.com/n8n-io/n8n/commit/aedea7a76c1752410b8734d87a74bd870cd54e2d)) +* **core:** Same version of merge node behaves differently after n8n update ([#13106](https://github.com/n8n-io/n8n/issues/13106)) ([df8f059](https://github.com/n8n-io/n8n/commit/df8f059504266667ffd30b5d706bad9dd7e09ab3)) +* **editor:** Adjust project plus button color in dark mode ([#13175](https://github.com/n8n-io/n8n/issues/13175)) ([4c19bae](https://github.com/n8n-io/n8n/commit/4c19baea3dd232df67353e8637470c205c37bd92)) +* **editor:** Correctly compare old parameter value for nested parameters ([#13179](https://github.com/n8n-io/n8n/issues/13179)) ([b6c0d96](https://github.com/n8n-io/n8n/commit/b6c0d96e4376e1b5fbc80227633eae57b1eff4c0)) +* **editor:** Disable fromAI button for vector stores ([#13125](https://github.com/n8n-io/n8n/issues/13125)) ([bde8420](https://github.com/n8n-io/n8n/commit/bde84205f924d79c3eb2bd45d2e3745b53992a0d)) +* **editor:** Don't show 'Test workflow' button if the canvas is read-only ([#13199](https://github.com/n8n-io/n8n/issues/13199)) ([56426e9](https://github.com/n8n-io/n8n/commit/56426e989ff4ca01efad0b6d525e12e68d25e87f)) +* **editor:** Fix '=' handling in expressions ([#13129](https://github.com/n8n-io/n8n/issues/13129)) ([8f25a06](https://github.com/n8n-io/n8n/commit/8f25a06e6ca7d4d0a78b5aa379a8c124f55a0325)) +* **editor:** Fix alignment in RMC component ([#13167](https://github.com/n8n-io/n8n/issues/13167)) ([78644b0](https://github.com/n8n-io/n8n/commit/78644b0ec7007cabd1a908cfd81ec1b3f06db63d)) +* **editor:** Fix issues with push connect reconnection ([#13085](https://github.com/n8n-io/n8n/issues/13085)) ([fff98b1](https://github.com/n8n-io/n8n/commit/fff98b16bb7c86e08ec2b1a475eeb7b93bedf2de)) +* **editor:** Fix prompt in easy ai template ([#13091](https://github.com/n8n-io/n8n/issues/13091)) ([2eabca5](https://github.com/n8n-io/n8n/commit/2eabca5613dece94231395a89e84c5e4433bb730)) +* **editor:** Load only personal credentials when setting up a template ([#12826](https://github.com/n8n-io/n8n/issues/12826)) ([814e2a8](https://github.com/n8n-io/n8n/commit/814e2a89241bdc6a26defb6bfd3d87abdc477ae0)) +* **editor:** Make connector buttons background opaque when dark mode is enabled system-wide ([#13180](https://github.com/n8n-io/n8n/issues/13180)) ([77be25d](https://github.com/n8n-io/n8n/commit/77be25d337e32f2bb32e191ee579f30d0442b537)) +* **Gmail Trigger Node:** Prevent error for empty emails, improve type safety ([#13171](https://github.com/n8n-io/n8n/issues/13171)) ([115a367](https://github.com/n8n-io/n8n/commit/115a367caeb9cbec8597d328cd969fff5ab6d941)) +* **Google Sheets Node:** Do not delete row_number key from input item ([#13158](https://github.com/n8n-io/n8n/issues/13158)) ([da5e4be](https://github.com/n8n-io/n8n/commit/da5e4be0fd645df24892f81c553bc1808e3fec93)) +* **Google Sheets Node:** RMC should correctly map columns if data location set in options ([#13116](https://github.com/n8n-io/n8n/issues/13116)) ([5d05f7f](https://github.com/n8n-io/n8n/commit/5d05f7f436a32b98d35a7b87968990e845ec56bb)) +* **Google Sheets Trigger Node:** Do not return header row in rowAdded mode ([#13119](https://github.com/n8n-io/n8n/issues/13119)) ([cd8b300](https://github.com/n8n-io/n8n/commit/cd8b300d5c9c2a2911b50c737c88ba799a2f0799)) +* **Microsoft OneDrive Node:** Try to download file using downloadUrl ([#13200](https://github.com/n8n-io/n8n/issues/13200)) ([67cd05c](https://github.com/n8n-io/n8n/commit/67cd05c6dc9407b09ed89a9dbb041f2f6d0ac500)) +* **OpenAI Node:** Limit chat history to context window when using memory ([#13137](https://github.com/n8n-io/n8n/issues/13137)) ([f057cfb](https://github.com/n8n-io/n8n/commit/f057cfb46af198566935d811ba294e596c9ab5ec)) +* **Summarize Node:** Not dealing with null values properly ([#13044](https://github.com/n8n-io/n8n/issues/13044)) ([9324e4f](https://github.com/n8n-io/n8n/commit/9324e4ffe66a8268e3d7d0eb2c127e35caee7a4c)) + + +### Features + +* Add ConvertAPI cred only node ([#12663](https://github.com/n8n-io/n8n/issues/12663)) ([731a9a7](https://github.com/n8n-io/n8n/commit/731a9a79456066d72f5d7ba6c343eca420407979)) +* **core:** Add an option to allow community nodes as tools ([#13075](https://github.com/n8n-io/n8n/issues/13075)) ([2b133aa](https://github.com/n8n-io/n8n/commit/2b133aa201325e27baddaa2bfd5995dca2093728)) +* **core:** Add migration to create model for folders feature ([#13060](https://github.com/n8n-io/n8n/issues/13060)) ([03f4ed8](https://github.com/n8n-io/n8n/commit/03f4ed8445bb1e1f0ef5c82b0164e50db3e2c45c)) +* **editor:** Add ‘execute workflow’ buttons below triggers on the canvas ([#12769](https://github.com/n8n-io/n8n/issues/12769)) ([b17cbec](https://github.com/n8n-io/n8n/commit/b17cbec3af446e67db57a0927011d51a9317dff2)) +* **editor:** Add docs link in $fromAI hover info tooltip ([#13097](https://github.com/n8n-io/n8n/issues/13097)) ([ff8b1c1](https://github.com/n8n-io/n8n/commit/ff8b1c11082f4e8caf2a474e57be3b3b328a1be3)) +* **editor:** Expose `View Execution` links for erroneous sub-executions ([#13185](https://github.com/n8n-io/n8n/issues/13185)) ([11cf1cd](https://github.com/n8n-io/n8n/commit/11cf1cd23a181714e445ef58e97fdd7dca870dd7)) +* **Microsoft Teams Node:** New operation sendAndWait ([#12964](https://github.com/n8n-io/n8n/issues/12964)) ([e925562](https://github.com/n8n-io/n8n/commit/e92556260f2b95022a852825f8475be369f0440a)) +* **OpenAI Chat Model Node:** Add reasoning effort option to control the amount of reasoning tokens to use ([#13103](https://github.com/n8n-io/n8n/issues/13103)) ([76e0c99](https://github.com/n8n-io/n8n/commit/76e0c9961344d4baac60a50f1ec1e849e40586e6)) + + +### Performance Improvements + +* **core:** Batch workflow activation to speed up startup ([#13191](https://github.com/n8n-io/n8n/issues/13191)) ([17acf70](https://github.com/n8n-io/n8n/commit/17acf70591422bfea84b13f24c35d628bff4d35e)) + + + +# [1.78.0](https://github.com/n8n-io/n8n/compare/n8n@1.77.0...n8n@1.78.0) (2025-02-06) + + +### Bug Fixes + +* **AI Agent Node:** Ignore SSL errors option for SQLAgent ([#13052](https://github.com/n8n-io/n8n/issues/13052)) ([a90529f](https://github.com/n8n-io/n8n/commit/a90529fd51ca88bc9640d24490dbeb2023c98e30)) +* **Code Node:** Do not validate code within comments ([#12938](https://github.com/n8n-io/n8n/issues/12938)) ([cdfa225](https://github.com/n8n-io/n8n/commit/cdfa22593b69cf647c2a798d6571a9bbbd11c1b2)) +* **core:** "Respond to Webhook" should work with workflows with waiting nodes ([#12806](https://github.com/n8n-io/n8n/issues/12806)) ([e8635f2](https://github.com/n8n-io/n8n/commit/e8635f257433748f4d7d2c4b0ae794de6bff5b28)) +* **core:** Do not emit `workflow-post-execute` event for waiting executions ([#13065](https://github.com/n8n-io/n8n/issues/13065)) ([1593b6c](https://github.com/n8n-io/n8n/commit/1593b6cb4112ab2a85ca93c4eaec7d5f088895b1)) +* **core:** Do not enable strict type validation by default for resource mapper ([#13037](https://github.com/n8n-io/n8n/issues/13037)) ([fdcff90](https://github.com/n8n-io/n8n/commit/fdcff9082b97314f8b04579ab6fa81c724916320)) +* **core:** Fix empty node execution stack ([#12945](https://github.com/n8n-io/n8n/issues/12945)) ([7031569](https://github.com/n8n-io/n8n/commit/7031569a028bcc85558fcb614f8143d68a7f81f0)) +* **core:** Only use new resource mapper type validation when it is enabled ([#13099](https://github.com/n8n-io/n8n/issues/13099)) ([a37c8e8](https://github.com/n8n-io/n8n/commit/a37c8e8fb86aaa3244ac13500ffa0e7c0d809a6f)) +* **editor:** Actually enforce the version and don't break for old values in local storage ([#13025](https://github.com/n8n-io/n8n/issues/13025)) ([884a7e2](https://github.com/n8n-io/n8n/commit/884a7e23f84258756d8dcdd2dfe933bdedf61adc)) +* **editor:** Add telemetry to source control feature ([#13016](https://github.com/n8n-io/n8n/issues/13016)) ([18eaa54](https://github.com/n8n-io/n8n/commit/18eaa5423dfc9348374c2cff4ae0e6f152268fbb)) +* **editor:** Allow switch to `Fixed` for boolean and number parameters with invalid expressions ([#12948](https://github.com/n8n-io/n8n/issues/12948)) ([118be24](https://github.com/n8n-io/n8n/commit/118be24d25f001525ced03d9426a6129fa5a2053)) +* **editor:** Allow to re-open sub-connection node creator if already active ([#13041](https://github.com/n8n-io/n8n/issues/13041)) ([16d59e9](https://github.com/n8n-io/n8n/commit/16d59e98edc427bf68edbce4cd2174a44d6dcfb1)) +* **editor:** Code node overwrites code when switching nodes after edits ([#13078](https://github.com/n8n-io/n8n/issues/13078)) ([00e3ebc](https://github.com/n8n-io/n8n/commit/00e3ebc9e2e0b8cc2d88b678c3a2a21602dac010)) +* **editor:** Fix execution running status listener for chat messages ([#12951](https://github.com/n8n-io/n8n/issues/12951)) ([4d55a29](https://github.com/n8n-io/n8n/commit/4d55a294600dc2c86f6f7019da923b66a4b9de7e)) +* **editor:** Fix position of connector buttons when the line is straight ([#13034](https://github.com/n8n-io/n8n/issues/13034)) ([3a908ac](https://github.com/n8n-io/n8n/commit/3a908aca17f0bc1cf5fb5eb8813cc94f27f0bcdf)) +* **editor:** Fix showing and hiding canvas edge toolbar when hovering ([#13009](https://github.com/n8n-io/n8n/issues/13009)) ([ac7bc4f](https://github.com/n8n-io/n8n/commit/ac7bc4f1911f913233eeeae5d229432fdff332c4)) +* **editor:** Make AI transform node read only in executions view ([#12970](https://github.com/n8n-io/n8n/issues/12970)) ([ce1deb8](https://github.com/n8n-io/n8n/commit/ce1deb8aea528eef996fc774d0fff1dc61df5843)) +* **editor:** Prevent infinite loop in expressions crashing the browser ([#12732](https://github.com/n8n-io/n8n/issues/12732)) ([8c2dbcf](https://github.com/n8n-io/n8n/commit/8c2dbcfeced70a0a84137773269cc6db2928d174)) +* **editor:** Refine push modal layout ([#12886](https://github.com/n8n-io/n8n/issues/12886)) ([212a5bf](https://github.com/n8n-io/n8n/commit/212a5bf23eb11cc3296e7a8d002a4b7727d5193c)) +* **editor:** SchemaView renders duplicate structures properly ([#12943](https://github.com/n8n-io/n8n/issues/12943)) ([0d8a544](https://github.com/n8n-io/n8n/commit/0d8a544975f72724db931778d7e3ace8a12b6cfc)) +* **editor:** Update node issues when opening execution ([#12972](https://github.com/n8n-io/n8n/issues/12972)) ([1a91523](https://github.com/n8n-io/n8n/commit/1a915239c6571d7744023c6df6242dabe97c912e)) +* **editor:** Use correct connection index when connecting adjancent nodes after deleting a node ([#12973](https://github.com/n8n-io/n8n/issues/12973)) ([c7a15d5](https://github.com/n8n-io/n8n/commit/c7a15d5980d181a865f8e2ec6a5f70d0681dcf56)) +* **GitHub Node:** Don't truncate filenames retrieved from GitHub ([#12923](https://github.com/n8n-io/n8n/issues/12923)) ([7e18447](https://github.com/n8n-io/n8n/commit/7e1844757fe0d544e8881d229d16af95ed53fb21)) +* **Google Cloud Firestore Node:** Fix potential prototype pollution vulnerability ([#13035](https://github.com/n8n-io/n8n/issues/13035)) ([f150f79](https://github.com/n8n-io/n8n/commit/f150f79ad6c7d43e036688b1de8d6c2c8140aca9)) +* Increment runIndex in WorkflowToolV2 tool executions to avoid reusing out of date inputs ([#13008](https://github.com/n8n-io/n8n/issues/13008)) ([cc907fb](https://github.com/n8n-io/n8n/commit/cc907fbca9aa00fe07dd54a2fcac8983f2321ad1)) +* Sync partial execution version of FE and BE, also allow enforcing a specific version ([#12840](https://github.com/n8n-io/n8n/issues/12840)) ([a155043](https://github.com/n8n-io/n8n/commit/a15504329bac582225185705566297d9cc27bf73)) +* **Wise Node:** Use ISO formatting for timestamps ([#10288](https://github.com/n8n-io/n8n/issues/10288)) ([1a2d39a](https://github.com/n8n-io/n8n/commit/1a2d39a158c9a61bdaf11124b09ae70de65ebbf1)) + + +### Features + +* Add reusable frontend `composables` package ([#13077](https://github.com/n8n-io/n8n/issues/13077)) ([ef87da4](https://github.com/n8n-io/n8n/commit/ef87da4c193a08e089e48044906a4f5ce9959a22)) +* Add support for client credentials with Azure Log monitor ([#13038](https://github.com/n8n-io/n8n/issues/13038)) ([2c2d631](https://github.com/n8n-io/n8n/commit/2c2d63157b7866f1a68cc45c5823e29570ccff77)) +* Allow multi API creation via the UI ([#12845](https://github.com/n8n-io/n8n/issues/12845)) ([ad3250c](https://github.com/n8n-io/n8n/commit/ad3250ceb0df84379917e684d54d4100e3bf44f5)) +* Allow setting API keys expiration ([#12954](https://github.com/n8n-io/n8n/issues/12954)) ([9bcbc2c](https://github.com/n8n-io/n8n/commit/9bcbc2c2ccbb88537e9b7554c92b631118d870f1)) +* **core:** Add sorting to GET `/workflows` endpoint ([#13029](https://github.com/n8n-io/n8n/issues/13029)) ([b60011a](https://github.com/n8n-io/n8n/commit/b60011a1808d47f32ab84e685dba0e915e82df8f)) +* **core:** Enable usage as a tool for more nodes ([#12930](https://github.com/n8n-io/n8n/issues/12930)) ([9deb759](https://github.com/n8n-io/n8n/commit/9deb75916e4eb63b899ba79b40cbd24b69a752db)) +* **core:** Handle Declarative nodes more like regular nodes ([#13007](https://github.com/n8n-io/n8n/issues/13007)) ([a65a9e6](https://github.com/n8n-io/n8n/commit/a65a9e631b13bbe70ad64727fb1109ae7cd014eb)) +* **Discord Node:** New sendAndWait operation ([#12894](https://github.com/n8n-io/n8n/issues/12894)) ([d47bfdd](https://github.com/n8n-io/n8n/commit/d47bfddd656367454b51da39cf87dbfb2bd59eb2)) +* **editor:** Display schema preview for unexecuted nodes ([#12901](https://github.com/n8n-io/n8n/issues/12901)) ([0063bbb](https://github.com/n8n-io/n8n/commit/0063bbb30b45b3af92aff4c0f76b905d50a71a2d)) +* **editor:** Easy $fromAI Button for AI Tools ([#12587](https://github.com/n8n-io/n8n/issues/12587)) ([2177376](https://github.com/n8n-io/n8n/commit/21773764d37c37a6464a3885d3fa548a5feb4fd8)) +* **editor:** Show fixed collection parameter issues in UI ([#12899](https://github.com/n8n-io/n8n/issues/12899)) ([12d686c](https://github.com/n8n-io/n8n/commit/12d686ce52694f4c0b88f92a744451c1b0c66dec)) +* **Facebook Graph API Node:** Update node to support API v22.0 ([#13024](https://github.com/n8n-io/n8n/issues/13024)) ([0bc0fc6](https://github.com/n8n-io/n8n/commit/0bc0fc6c1226688c29bf5f8f0ba7e8f244e16fbc)) +* **HTTP Request Tool Node:** Relax binary data detection ([#13048](https://github.com/n8n-io/n8n/issues/13048)) ([b67a003](https://github.com/n8n-io/n8n/commit/b67a003e0b154d4e8c04392bec1c7b28171b5908)) +* Human in the loop section ([#12883](https://github.com/n8n-io/n8n/issues/12883)) ([9590e5d](https://github.com/n8n-io/n8n/commit/9590e5d58b8964de9ce901bf07b537926d18b6b7)) +* **n8n Form Node:** Add Hidden Fields ([#12803](https://github.com/n8n-io/n8n/issues/12803)) ([0da1114](https://github.com/n8n-io/n8n/commit/0da1114981978e371b216bdabc0c3bbdceeefa09)) +* **n8n Form Node:** Respond with Text ([#12979](https://github.com/n8n-io/n8n/issues/12979)) ([182fc15](https://github.com/n8n-io/n8n/commit/182fc150bec62e9a5e2801d6c403e4a6bd35f728)) +* **OpenAI Chat Model Node, OpenAI Node:** Include o3 models in model selection ([#13005](https://github.com/n8n-io/n8n/issues/13005)) ([37d152c](https://github.com/n8n-io/n8n/commit/37d152c148cafbe493c22e07f5d55ff24fcb0ca4)) +* **Summarize Node:** Preserves original field data type ([#13069](https://github.com/n8n-io/n8n/issues/13069)) ([be5e49d](https://github.com/n8n-io/n8n/commit/be5e49d56c09d65c9768e948471626cfd3606c0c)) + + + +# [1.77.0](https://github.com/n8n-io/n8n/compare/n8n@1.76.0...n8n@1.77.0) (2025-01-29) + + +### Bug Fixes + +* **core:** Account for pre-execution failure in scaling mode ([#12815](https://github.com/n8n-io/n8n/issues/12815)) ([b4d27c4](https://github.com/n8n-io/n8n/commit/b4d27c49e32bfacbd2690bf1c07194562f6a4a61)) +* **core:** Display the last activated plan name when multiple are activated ([#12835](https://github.com/n8n-io/n8n/issues/12835)) ([03365f0](https://github.com/n8n-io/n8n/commit/03365f096d3d5c8e3a6537f37cda412959705346)) +* **core:** Fix possible corruption of OAuth2 credential ([#12880](https://github.com/n8n-io/n8n/issues/12880)) ([ac84ea1](https://github.com/n8n-io/n8n/commit/ac84ea14452cbcec95f14073e8e70427169e6a7f)) +* **core:** Fix usage of external libs in task runner ([#12788](https://github.com/n8n-io/n8n/issues/12788)) ([3d9d5bf](https://github.com/n8n-io/n8n/commit/3d9d5bf9d58f3c49830d42a140d6c8c6b59952dc)) +* **core:** Handle max stalled count error better ([#12824](https://github.com/n8n-io/n8n/issues/12824)) ([eabf160](https://github.com/n8n-io/n8n/commit/eabf1609577cd94a6bad5020c34378d840a13bc0)) +* **core:** Improve error handling in credential decryption and parsing ([#12868](https://github.com/n8n-io/n8n/issues/12868)) ([0c86bf2](https://github.com/n8n-io/n8n/commit/0c86bf2b3761bb93fd3cedba7a483ae5d97bd332)) +* **core:** Renew license on startup for instances with detached floating entitlements ([#12884](https://github.com/n8n-io/n8n/issues/12884)) ([f32eef8](https://github.com/n8n-io/n8n/commit/f32eef85bd066ee9b54d110355c6b80124d67437)) +* **core:** Update execution entity and execution data in transaction ([#12756](https://github.com/n8n-io/n8n/issues/12756)) ([1f43181](https://github.com/n8n-io/n8n/commit/1f4318136011bffaad04527790a9eba79effce35)) +* **core:** Validate credential data before encryption ([#12885](https://github.com/n8n-io/n8n/issues/12885)) ([3d27a14](https://github.com/n8n-io/n8n/commit/3d27a1498702206b738cf978d037191306cec42b)) +* **editor:** Add notice when user hits the limit for execution metadata item length ([#12676](https://github.com/n8n-io/n8n/issues/12676)) ([02df25c](https://github.com/n8n-io/n8n/commit/02df25c450a0a384a32d0815d8a2faec7562a8ae)) +* **editor:** Don't send run data for full manual executions ([#12687](https://github.com/n8n-io/n8n/issues/12687)) ([9139dc3](https://github.com/n8n-io/n8n/commit/9139dc3c2916186648fb5bf63d14fcb90773eb1c)) +* **editor:** Fix sub-execution links in empty output tables ([#12781](https://github.com/n8n-io/n8n/issues/12781)) ([114ed88](https://github.com/n8n-io/n8n/commit/114ed88368d137443b9c6605d4fe11b02053549d)) +* **editor:** Fix workflow move project select filtering ([#12764](https://github.com/n8n-io/n8n/issues/12764)) ([358d284](https://github.com/n8n-io/n8n/commit/358d2843e5e468071d6764419169811e93138c35)) +* **editor:** Focus executions iframe when n8n is ready to delegate keyboard events ([#12741](https://github.com/n8n-io/n8n/issues/12741)) ([d506218](https://github.com/n8n-io/n8n/commit/d5062189dbca02dfdf485fc220cc2a7b05e3e6cc)) +* **editor:** Handle large payloads in the AI Assistant requests better ([#12747](https://github.com/n8n-io/n8n/issues/12747)) ([eb4dea1](https://github.com/n8n-io/n8n/commit/eb4dea1ca891bb7ac07c8bbbae8803de080c4623)) +* **editor:** Hide Set up Template button for empty workflows ([#12808](https://github.com/n8n-io/n8n/issues/12808)) ([36e615b](https://github.com/n8n-io/n8n/commit/36e615b28f395623457bbb9bf4ab6fd69102b6ea)) +* **editor:** Load appropriate credentials in canvas V2 for new workflow ([#12722](https://github.com/n8n-io/n8n/issues/12722)) ([2020dc5](https://github.com/n8n-io/n8n/commit/2020dc502feae6cae827dfbcc40ffed89bcc334a)) +* **editor:** Properly set active project in new canvas ([#12810](https://github.com/n8n-io/n8n/issues/12810)) ([648c6f9](https://github.com/n8n-io/n8n/commit/648c6f9315b16b885e04716e7e0035a73b358fb0)) +* **editor:** Render inline SVGs correctly on the external secrets settings page ([#12802](https://github.com/n8n-io/n8n/issues/12802)) ([5820ade](https://github.com/n8n-io/n8n/commit/5820ade1e4b9d638c9b6369aef369d6dc9320da6)) +* **editor:** Show input selector when node has error ([#12813](https://github.com/n8n-io/n8n/issues/12813)) ([5b760e7](https://github.com/n8n-io/n8n/commit/5b760e7f7fc612b10307b4871e24b549f5d9d420)) +* **editor:** Show mappings by default in sub-node NDVs when the root node isn't executed ([#12642](https://github.com/n8n-io/n8n/issues/12642)) ([fb662dd](https://github.com/n8n-io/n8n/commit/fb662dd95cae3bc51d05d05e32e772d05adafa1e)) +* **Postgres PGVector Store Node:** Release postgres connections back to the pool ([#12723](https://github.com/n8n-io/n8n/issues/12723)) ([663dfb4](https://github.com/n8n-io/n8n/commit/663dfb48defd944f88f0ecc4f3347ea4f8a7c831)) + + +### Features + +* Add DeepSeek Chat Model node ([#12873](https://github.com/n8n-io/n8n/issues/12873)) ([9918afa](https://github.com/n8n-io/n8n/commit/9918afa51b16116abb73692a66df84e48128f406)) +* Add OpenRouter node ([#12882](https://github.com/n8n-io/n8n/issues/12882)) ([dc85b02](https://github.com/n8n-io/n8n/commit/dc85b022d111d1e8b038ca1a9f6a1041f19cf2b0)) +* Add timeout options to sendAndWait operations ([#12753](https://github.com/n8n-io/n8n/issues/12753)) ([3e9f24d](https://github.com/n8n-io/n8n/commit/3e9f24ddf462349145d89fe183313c95512c699b)) +* **API:** Add route for schema static files ([#12770](https://github.com/n8n-io/n8n/issues/12770)) ([d981b56](https://github.com/n8n-io/n8n/commit/d981b5659a26f92b11e5d0cd5570504fd683626c)) +* **core:** Explicitly report external hook failures ([#12830](https://github.com/n8n-io/n8n/issues/12830)) ([a24e442](https://github.com/n8n-io/n8n/commit/a24e4420bb9023f808acd756d125dffaea325968)) +* **core:** Rename two task runner env vars ([#12763](https://github.com/n8n-io/n8n/issues/12763)) ([60187ca](https://github.com/n8n-io/n8n/commit/60187cab9bc9d21aa6ba710d772c068324e429f1)) +* **editor:** Add evaluation workflow and enhance workflow selector with pinned data support ([#12773](https://github.com/n8n-io/n8n/issues/12773)) ([be967eb](https://github.com/n8n-io/n8n/commit/be967ebec07fab223513f93f50bcc389b9a4c548)) +* **editor:** Always keep at least one executing node indicator in the workflow ([#12829](https://github.com/n8n-io/n8n/issues/12829)) ([c25c613](https://github.com/n8n-io/n8n/commit/c25c613a04a6773fa4014d9a0d290e443bcabbe0)) +* **Google Chat Node:** Updates ([#12827](https://github.com/n8n-io/n8n/issues/12827)) ([e146ad0](https://github.com/n8n-io/n8n/commit/e146ad021a0be22cf51bafa3c015d03550e03d97)) +* **Microsoft Outlook Node:** New operation sendAndWait ([#12795](https://github.com/n8n-io/n8n/issues/12795)) ([f4bf55f](https://github.com/n8n-io/n8n/commit/f4bf55f0d8278ff954344cf6397c10d8261b39a4)) +* **n8n Form Node:** Add read-only/custom HTML form elements ([#12760](https://github.com/n8n-io/n8n/issues/12760)) ([ba8aa39](https://github.com/n8n-io/n8n/commit/ba8aa3921613c590caaac627fbb9837ccaf87783)) +* **Send Email Node:** New operation sendAndWait ([#12775](https://github.com/n8n-io/n8n/issues/12775)) ([a197fbb](https://github.com/n8n-io/n8n/commit/a197fbb21b5642843d8bc3e657049aca99e0729d)) +* **Summarize Node:** Turns error when field not found in items into warning ([#11889](https://github.com/n8n-io/n8n/issues/11889)) ([d7dda3f](https://github.com/n8n-io/n8n/commit/d7dda3f5de52925e554455f9f10e51bd173ea856)) +* **Telegram Node:** New operation sendAndWait ([#12771](https://github.com/n8n-io/n8n/issues/12771)) ([2c58d47](https://github.com/n8n-io/n8n/commit/2c58d47f8eee1f865ecc1eeb89aa20c69c28abae)) + + + +# [1.76.0](https://github.com/n8n-io/n8n/compare/n8n@1.75.0...n8n@1.76.0) (2025-01-22) + + +### Bug Fixes + +* **core:** Align saving behavior in `workflowExecuteAfter` hooks ([#12731](https://github.com/n8n-io/n8n/issues/12731)) ([9d76210](https://github.com/n8n-io/n8n/commit/9d76210a570e025d01d1f6596667abf40fbd8d12)) +* **core:** AugmentObject should handle the constructor property correctly ([#12744](https://github.com/n8n-io/n8n/issues/12744)) ([36bc164](https://github.com/n8n-io/n8n/commit/36bc164da486f2e2d05091b457b8eea6521ca22e)) +* **core:** Fix keyboard shortcuts for non-ansi layouts ([#12672](https://github.com/n8n-io/n8n/issues/12672)) ([4c8193f](https://github.com/n8n-io/n8n/commit/4c8193fedc2e3967c9a06c0652483128df509653)) +* **core:** Fix license CLI commands showing incorrect renewal setting ([#12759](https://github.com/n8n-io/n8n/issues/12759)) ([024ada8](https://github.com/n8n-io/n8n/commit/024ada822c1bc40958e594bb08707cf77d3397ec)) +* **core:** Fix license initialization failure on startup ([#12737](https://github.com/n8n-io/n8n/issues/12737)) ([ac2f647](https://github.com/n8n-io/n8n/commit/ac2f6476c114f51fafb9b7b66e41e0c87f4a1bf6)) +* **core:** Recover successful data-less executions ([#12720](https://github.com/n8n-io/n8n/issues/12720)) ([a39b8bd](https://github.com/n8n-io/n8n/commit/a39b8bd32be50c8323e415f820b25b4bcb81d960)) +* **core:** Remove run data of utility nodes for partial executions v2 ([#12673](https://github.com/n8n-io/n8n/issues/12673)) ([b66a9dc](https://github.com/n8n-io/n8n/commit/b66a9dc8fb6f7b19122cacbb7e2f86b4c921c3fb)) +* **core:** Sync `hookFunctionsSave` and `hookFunctionsSaveWorker` ([#12740](https://github.com/n8n-io/n8n/issues/12740)) ([d410b8f](https://github.com/n8n-io/n8n/commit/d410b8f5a7e99658e1e8dcb2e02901bd01ce9c59)) +* **core:** Update isDocker check to return true on kubernetes/containerd ([#12603](https://github.com/n8n-io/n8n/issues/12603)) ([c55dac6](https://github.com/n8n-io/n8n/commit/c55dac66ed97a2317d4c696c3b505790ec5d72fe)) +* **editor:** Add unicode code points to expression language for emoji ([#12633](https://github.com/n8n-io/n8n/issues/12633)) ([819ebd0](https://github.com/n8n-io/n8n/commit/819ebd058d1d60b3663d92b4a652728da7134a3b)) +* **editor:** Correct missing whitespace in JSON output ([#12677](https://github.com/n8n-io/n8n/issues/12677)) ([b098b19](https://github.com/n8n-io/n8n/commit/b098b19c7f0e3a9848c3fcfa012999050f2d3c7a)) +* **editor:** Defer crypto.randomUUID call in CodeNodeEditor ([#12630](https://github.com/n8n-io/n8n/issues/12630)) ([58f6532](https://github.com/n8n-io/n8n/commit/58f6532630bacd288d3c0a79b40150f465898419)) +* **editor:** Fix Code node bug erasing and overwriting code when switching between nodes ([#12637](https://github.com/n8n-io/n8n/issues/12637)) ([02d953d](https://github.com/n8n-io/n8n/commit/02d953db34ec4e44977a8ca908628b62cca82fde)) +* **editor:** Fix execution list hover & selection colour in dark mode ([#12628](https://github.com/n8n-io/n8n/issues/12628)) ([95c40c0](https://github.com/n8n-io/n8n/commit/95c40c02cb8fef77cf633cf5aec08e98746cff36)) +* **editor:** Fix JsonEditor with expressions ([#12739](https://github.com/n8n-io/n8n/issues/12739)) ([56c93ca](https://github.com/n8n-io/n8n/commit/56c93caae026738c1c0bebb4187b238e34a330f6)) +* **editor:** Fix navbar height flickering during load ([#12738](https://github.com/n8n-io/n8n/issues/12738)) ([a96b3f0](https://github.com/n8n-io/n8n/commit/a96b3f0091798a52bb33107b919b5d8287ba7506)) +* **editor:** Open chat when executing agent node in canvas v2 ([#12617](https://github.com/n8n-io/n8n/issues/12617)) ([457edd9](https://github.com/n8n-io/n8n/commit/457edd99bb853d8ccf3014605d5823933f3c0bc6)) +* **editor:** Partial execution of a workflow with manual chat trigger ([#12662](https://github.com/n8n-io/n8n/issues/12662)) ([2f81b29](https://github.com/n8n-io/n8n/commit/2f81b29d341535b512df0aa01b25a91d109f113f)) +* **editor:** Show connector label above the line when it's straight ([#12622](https://github.com/n8n-io/n8n/issues/12622)) ([c97bd48](https://github.com/n8n-io/n8n/commit/c97bd48a77643b9c2a5d7218e21b957af15cee0b)) +* **editor:** Show run workflow button when chat trigger has pinned data ([#12616](https://github.com/n8n-io/n8n/issues/12616)) ([da8aafc](https://github.com/n8n-io/n8n/commit/da8aafc0e3a1b5d862f0723d0d53d2c38bcaebc3)) +* **editor:** Update workflow re-initialization to use query parameter ([#12650](https://github.com/n8n-io/n8n/issues/12650)) ([982131a](https://github.com/n8n-io/n8n/commit/982131a75a32f741c120156826c303989aac189c)) +* **Execute Workflow Node:** Pass binary data to sub-workflow ([#12635](https://github.com/n8n-io/n8n/issues/12635)) ([e9c152e](https://github.com/n8n-io/n8n/commit/e9c152e369a4c2762bd8e6ad17eaa704bb3771bb)) +* **Google Gemini Chat Model Node:** Add base URL support for Google Gemini Chat API ([#12643](https://github.com/n8n-io/n8n/issues/12643)) ([14f4bc7](https://github.com/n8n-io/n8n/commit/14f4bc769027789513808b4000444edf99dc5d1c)) +* **GraphQL Node:** Change default request format to json instead of graphql ([#11346](https://github.com/n8n-io/n8n/issues/11346)) ([c7c122f](https://github.com/n8n-io/n8n/commit/c7c122f9173df824cc1b5ab864333bffd0d31f82)) +* **Jira Software Node:** Get custom fields(RLC) in update operation for server deployment type ([#12719](https://github.com/n8n-io/n8n/issues/12719)) ([353df79](https://github.com/n8n-io/n8n/commit/353df7941117e20547cd4f3fc514979a54619720)) +* **n8n Form Node:** Remove the ability to change the formatting of dates ([#12666](https://github.com/n8n-io/n8n/issues/12666)) ([14904ff](https://github.com/n8n-io/n8n/commit/14904ff77951fef23eb789a43947492a4cd3fa20)) +* **OpenAI Chat Model Node:** Fix loading of custom models when using custom credential URL ([#12634](https://github.com/n8n-io/n8n/issues/12634)) ([7cc553e](https://github.com/n8n-io/n8n/commit/7cc553e3b277a16682bfca1ea08cb98178e38580)) +* **OpenAI Chat Model Node:** Restore default model value ([#12745](https://github.com/n8n-io/n8n/issues/12745)) ([d1b6692](https://github.com/n8n-io/n8n/commit/d1b6692736182fa2eab768ba3ad0adb8504ebbbd)) +* **Postgres Chat Memory Node:** Do not terminate the connection pool ([#12674](https://github.com/n8n-io/n8n/issues/12674)) ([e7f00bc](https://github.com/n8n-io/n8n/commit/e7f00bcb7f2dce66ca07a9322d50f96356c1a43d)) +* **Postgres Node:** Allow using composite key in upsert queries ([#12639](https://github.com/n8n-io/n8n/issues/12639)) ([83ce3a9](https://github.com/n8n-io/n8n/commit/83ce3a90963ba76601234f4314363a8ccc310f0f)) +* **Wait Node:** Fix for hasNextPage in waiting forms ([#12636](https://github.com/n8n-io/n8n/issues/12636)) ([652b8d1](https://github.com/n8n-io/n8n/commit/652b8d170b9624d47b5f2d8d679c165cc14ea548)) + + +### Features + +* Add credential only node for Microsoft Azure Monitor ([#12645](https://github.com/n8n-io/n8n/issues/12645)) ([6ef8882](https://github.com/n8n-io/n8n/commit/6ef8882a108c672ab097c9dd1c590d4e9e7f3bcc)) +* Add Miro credential only node ([#12746](https://github.com/n8n-io/n8n/issues/12746)) ([5b29086](https://github.com/n8n-io/n8n/commit/5b29086e2f9b7f638fac4440711f673438e57492)) +* Add SSM endpoint to AWS credentials ([#12212](https://github.com/n8n-io/n8n/issues/12212)) ([565c7b8](https://github.com/n8n-io/n8n/commit/565c7b8b9cfd3e10f6a2c60add96fea4c4d95d33)) +* **core:** Enable task runner by default ([#12726](https://github.com/n8n-io/n8n/issues/12726)) ([9e2a01a](https://github.com/n8n-io/n8n/commit/9e2a01aeaf36766a1cf7a1d9a4d6e02f45739bd3)) +* **editor:** Force final canvas v2 migration and remove switcher from UI ([#12717](https://github.com/n8n-io/n8n/issues/12717)) ([29335b9](https://github.com/n8n-io/n8n/commit/29335b9b6acf97c817bea70688e8a2786fbd8889)) +* **editor:** VariablesView Reskin - Add Filters for missing values ([#12611](https://github.com/n8n-io/n8n/issues/12611)) ([1eeb788](https://github.com/n8n-io/n8n/commit/1eeb788d327287d21eab7ad6f2156453ab7642c7)) +* **Jira Software Node:** Personal Access Token credential type ([#11038](https://github.com/n8n-io/n8n/issues/11038)) ([1c7a38f](https://github.com/n8n-io/n8n/commit/1c7a38f6bab108daa47401cd98c185590bf299a8)) +* **n8n Form Trigger Node:** Form Improvements ([#12590](https://github.com/n8n-io/n8n/issues/12590)) ([f167578](https://github.com/n8n-io/n8n/commit/f167578b3251e553a4d000e731e1bb60348916ad)) +* Synchronize deletions when pulling from source control ([#12170](https://github.com/n8n-io/n8n/issues/12170)) ([967ee4b](https://github.com/n8n-io/n8n/commit/967ee4b89b94b92fc3955c56bf4c9cca0bd64eac)) + + + +# [1.75.0](https://github.com/n8n-io/n8n/compare/n8n@1.74.0...n8n@1.75.0) (2025-01-15) + + +### Bug Fixes + +* **core:** AugmentObject should check for own propeties correctly ([#12534](https://github.com/n8n-io/n8n/issues/12534)) ([0cdf393](https://github.com/n8n-io/n8n/commit/0cdf39374305e6bbcedb047db7d3756168e6e89e)) +* **core:** Disallow code generation in task runner ([#12522](https://github.com/n8n-io/n8n/issues/12522)) ([35b6180](https://github.com/n8n-io/n8n/commit/35b618098b7d23e272bf77b55c172dbe531c821f)) +* **core:** Fix node exclusion on the frontend types ([#12544](https://github.com/n8n-io/n8n/issues/12544)) ([b2cbed9](https://github.com/n8n-io/n8n/commit/b2cbed9865888f6f3bc528984d4091d86a88f0d6)) +* **core:** Fix orchestration flow with expired license ([#12444](https://github.com/n8n-io/n8n/issues/12444)) ([ecff3b7](https://github.com/n8n-io/n8n/commit/ecff3b732a028d7225bfbed4ffc65dc20c4ed608)) +* **core:** Fix Sentry error reporting on task runners ([#12495](https://github.com/n8n-io/n8n/issues/12495)) ([88c0838](https://github.com/n8n-io/n8n/commit/88c0838dd72f11646bdb3586223d6c16631cccab)) +* **core:** Improve cyclic dependency check in the DI container ([#12600](https://github.com/n8n-io/n8n/issues/12600)) ([c3c4a20](https://github.com/n8n-io/n8n/commit/c3c4a200024fb08afb9380357d1490c6707c5ec3)) +* **core:** Only show personal credentials in the personal space ([#12433](https://github.com/n8n-io/n8n/issues/12433)) ([8a42d55](https://github.com/n8n-io/n8n/commit/8a42d55d91f4a37fff5669d52d52428b3a4ddd44)) +* **core:** Prefix package name in `supportedNodes` on generated types as well ([#12514](https://github.com/n8n-io/n8n/issues/12514)) ([4a1a999](https://github.com/n8n-io/n8n/commit/4a1a9993624c92dd81f5418f9268cb93878069ab)) +* **core:** Prevent prototype pollution in task runner ([#12588](https://github.com/n8n-io/n8n/issues/12588)) ([bdf266c](https://github.com/n8n-io/n8n/commit/bdf266cf55032d05641b20dce8804412dc93b6d5)) +* **core:** Prevent prototype pollution of internal classes in task runner ([#12610](https://github.com/n8n-io/n8n/issues/12610)) ([eceee7f](https://github.com/n8n-io/n8n/commit/eceee7f3f8899d200b1c5720087cc494eec22e6a)) +* **core:** Use timing safe function to compare runner auth tokens ([#12485](https://github.com/n8n-io/n8n/issues/12485)) ([8fab98f](https://github.com/n8n-io/n8n/commit/8fab98f3f1f767d05825d24cbf155d56375fdb3e)) +* **core:** Validate values which are intentionally 0 ([#12382](https://github.com/n8n-io/n8n/issues/12382)) ([562506e](https://github.com/n8n-io/n8n/commit/562506e92aeb26423145801bff80037e5ce2ac46)) +* Don't break oauth credentials when updating them and allow fixing broken oauth credentials by repeating the authorization flow ([#12563](https://github.com/n8n-io/n8n/issues/12563)) ([73897c7](https://github.com/n8n-io/n8n/commit/73897c7662a432834eb6f9d0f9ace8d986c1acb5)) +* **editor:** Don't show toolsUnused notice if run had errors ([#12529](https://github.com/n8n-io/n8n/issues/12529)) ([3ec5b28](https://github.com/n8n-io/n8n/commit/3ec5b2850c47057032e61c2acdbdfc1dcdd931f7)) +* **editor:** Ensure proper "AI Template" URL construction in node creator ([#12566](https://github.com/n8n-io/n8n/issues/12566)) ([13bf69f](https://github.com/n8n-io/n8n/commit/13bf69f75c67bc37a37013e776525768676a4b88)) +* **editor:** Fix NDV resize handle and scrollbar overlapping ([#12509](https://github.com/n8n-io/n8n/issues/12509)) ([c28f302](https://github.com/n8n-io/n8n/commit/c28f302c2f863bd7aa73ad52e5d040f927e33220)) +* **editor:** Fix parameter input validation ([#12532](https://github.com/n8n-io/n8n/issues/12532)) ([6711cbc](https://github.com/n8n-io/n8n/commit/6711cbcc641a2fc70f5c15a7e2dcc640a3f98b66)) +* **editor:** Fix selection rectangle context menu on new canvas ([#12584](https://github.com/n8n-io/n8n/issues/12584)) ([c8e3c53](https://github.com/n8n-io/n8n/commit/c8e3c5399efde93486c1dd5c373cb2c5ff8a0691)) +* **editor:** Fix the `openselectivenodecreator` custom action on new canvas ([#12580](https://github.com/n8n-io/n8n/issues/12580)) ([2110e9a](https://github.com/n8n-io/n8n/commit/2110e9a0513b8c36beb85302e0d38a2658ea5d6e)) +* **editor:** Fix workflow initilisation for test definition routes & add unit tests ([#12507](https://github.com/n8n-io/n8n/issues/12507)) ([2775f61](https://github.com/n8n-io/n8n/commit/2775f617ae5c267c0a1ce7a54d05d4077cdbc0f7)) +* **editor:** Make clicking item in RLC work the first time on small screens ([#12585](https://github.com/n8n-io/n8n/issues/12585)) ([479933f](https://github.com/n8n-io/n8n/commit/479933fbd5c88e783827960e018abb979de8a039)) +* **editor:** Make sure code editors work correctly in fullscreen ([#12597](https://github.com/n8n-io/n8n/issues/12597)) ([aa1f3a7](https://github.com/n8n-io/n8n/commit/aa1f3a7d989883d55df3777775b8d7d336f6e3b7)) +* **editor:** Override selected nodes on single click without Meta/Ctrl key ([#12549](https://github.com/n8n-io/n8n/issues/12549)) ([02c2d5e](https://github.com/n8n-io/n8n/commit/02c2d5e71d15b9292fddd585f47bd8334da468c5)) +* **editor:** Show NDV errors when opening existing nodes with errors ([#12567](https://github.com/n8n-io/n8n/issues/12567)) ([bee7267](https://github.com/n8n-io/n8n/commit/bee7267fe38ab12a79fa4ec0e775f45d98d48aa5)) +* **editor:** Swap Activate/Deactivate texts in FloatingToolbar ([#12526](https://github.com/n8n-io/n8n/issues/12526)) ([44679b4](https://github.com/n8n-io/n8n/commit/44679b42aa1e14bc7069bee47d0a91ca84b1dba4)) +* **editor:** Update filter and feedback for source control ([#12504](https://github.com/n8n-io/n8n/issues/12504)) ([865fc21](https://github.com/n8n-io/n8n/commit/865fc21276727e8d88ccee0355147904b81c4421)) +* **editor:** Update selected node when navigating via flowing nodes ([#12581](https://github.com/n8n-io/n8n/issues/12581)) ([88659d8](https://github.com/n8n-io/n8n/commit/88659d8a2901786c894902e19466f395bcdaab8e)) +* **Google Calendar Node:** Updates and fixes ([#10715](https://github.com/n8n-io/n8n/issues/10715)) ([7227a29](https://github.com/n8n-io/n8n/commit/7227a29845fd178ced4d281597c62e7a03245456)) +* **Spotify Node:** Fix issue with null values breaking the response ([#12080](https://github.com/n8n-io/n8n/issues/12080)) ([a56a462](https://github.com/n8n-io/n8n/commit/a56a46259d257003c813103578260d625b3f17dd)) + + +### Features + +* **editor:** Make node credential select searchable ([#12497](https://github.com/n8n-io/n8n/issues/12497)) ([91277c4](https://github.com/n8n-io/n8n/commit/91277c44f1cf3f334b3b50d47d7dcc79b11c7c63)) +* **editor:** Persist sidebar collapsed status preference ([#12505](https://github.com/n8n-io/n8n/issues/12505)) ([dba7d46](https://github.com/n8n-io/n8n/commit/dba7d46f3ec91d26a597a50dede7b6ca292c728f)) + + + +# [1.74.0](https://github.com/n8n-io/n8n/compare/n8n@1.73.0...n8n@1.74.0) (2025-01-08) + + +### Bug Fixes + +* **core:** Align concurrency and timeout defaults between instance and runner ([#12503](https://github.com/n8n-io/n8n/issues/12503)) ([9953477](https://github.com/n8n-io/n8n/commit/9953477450c28ec2d211e55aadb825dbae2ee4d6)) +* **core:** Allow `index` as top-level item key for Code node ([#12469](https://github.com/n8n-io/n8n/issues/12469)) ([1b91000](https://github.com/n8n-io/n8n/commit/1b9100032fc9f8c33e263c8299e04054105da384)) +* **core:** Don't fail task runner task if logging fails ([#12401](https://github.com/n8n-io/n8n/issues/12401)) ([0860fbe](https://github.com/n8n-io/n8n/commit/0860fbe97108edc21bc01dec3b6ef13e60e728d4)) +* **core:** Ensure tasks timeout even if they don't receive settings ([#12431](https://github.com/n8n-io/n8n/issues/12431)) ([b194026](https://github.com/n8n-io/n8n/commit/b1940268e6110ed3d8949318a5252ac6563d624f)) +* **core:** Fix execution cancellation issues in scaling mode ([#12343](https://github.com/n8n-io/n8n/issues/12343)) ([e26b406](https://github.com/n8n-io/n8n/commit/e26b406665e20761279c4e315d04501350427de5)) +* **core:** Fix manually running a pinned trigger with offloading enabled ([#12491](https://github.com/n8n-io/n8n/issues/12491)) ([be2dcff](https://github.com/n8n-io/n8n/commit/be2dcffc9487973d3e287dd4f6956dbba03757e3)) +* **core:** Fix task runner sending too many offers ([#12415](https://github.com/n8n-io/n8n/issues/12415)) ([4498e35](https://github.com/n8n-io/n8n/commit/4498e3519276020d3eb01752b5ce0d8ecfbf5fa4)) +* **core:** Increase default concurrency and timeout in task runners ([#12496](https://github.com/n8n-io/n8n/issues/12496)) ([4182095](https://github.com/n8n-io/n8n/commit/4182095af1c02832af2523f31e9cb85d9a345e60)) +* **core:** Prevent `__default__` jobs in scaling mode ([#12402](https://github.com/n8n-io/n8n/issues/12402)) ([072664b](https://github.com/n8n-io/n8n/commit/072664b40e06943e0b8ff44287730f2ca569646f)) +* **core:** Register workflows as active only after all of the triggers and pollers setup successfully ([#12244](https://github.com/n8n-io/n8n/issues/12244)) ([f924f2a](https://github.com/n8n-io/n8n/commit/f924f2a6d736e33ab5fc12cbac6cba27340839db)) +* **core:** Return unredacted credentials from `GET credentials/:id` ([#12447](https://github.com/n8n-io/n8n/issues/12447)) ([ecabe34](https://github.com/n8n-io/n8n/commit/ecabe34705bbbba07613ba14760449ef38e1b31f)) +* **core:** Use rate limiter for task runner endpoints ([#12486](https://github.com/n8n-io/n8n/issues/12486)) ([491cb60](https://github.com/n8n-io/n8n/commit/491cb605e3c93d7a261bb0cef0d38f2ddc3affe8)) +* **editor:** Allow zooming when panning keycode is pressed on new canvas ([#12327](https://github.com/n8n-io/n8n/issues/12327)) ([983e87a](https://github.com/n8n-io/n8n/commit/983e87a9b0c83d35354ce4df34096f47173d0ea7)) +* **editor:** Consistent protected environment styling and messaging ([#12374](https://github.com/n8n-io/n8n/issues/12374)) ([6891cef](https://github.com/n8n-io/n8n/commit/6891cefa6d0359f85a596829b6055a13529fb1fb)) +* **editor:** First project button tweaks border and copy ([#12376](https://github.com/n8n-io/n8n/issues/12376)) ([e234756](https://github.com/n8n-io/n8n/commit/e234756457d3c3526531ced4471bf9e69a79fa55)) +* **editor:** Fix Multi option parameter expression when the value is an array ([#12430](https://github.com/n8n-io/n8n/issues/12430)) ([452a7bf](https://github.com/n8n-io/n8n/commit/452a7bfe2c1e786c46a3ed99de007b0cf3f28d15)) +* **editor:** Improve configurable nodes design on new canvas ([#12317](https://github.com/n8n-io/n8n/issues/12317)) ([0ecce10](https://github.com/n8n-io/n8n/commit/0ecce10faf60ae44d11007d45e87766b678d3a84)) +* **editor:** Minor styling improvements in project settings page ([#12405](https://github.com/n8n-io/n8n/issues/12405)) ([09ddce0](https://github.com/n8n-io/n8n/commit/09ddce05800f426d33489ae28c416bb6aab2fd91)) +* **editor:** Never show Pinned Data Callout for Input Panel ([#12446](https://github.com/n8n-io/n8n/issues/12446)) ([1d5c9bd](https://github.com/n8n-io/n8n/commit/1d5c9bd466becf8aa245a1e8d0b799616d18914a)) +* **editor:** Nodes' icon color in dark mode ([#12279](https://github.com/n8n-io/n8n/issues/12279)) ([01b781a](https://github.com/n8n-io/n8n/commit/01b781a10828ca2c4cf32762373ad40904c02d2c)) +* **editor:** Only ignore managed credentials in the HTTP node ([#12417](https://github.com/n8n-io/n8n/issues/12417)) ([6b46657](https://github.com/n8n-io/n8n/commit/6b46657412a1efff35be5083f0ff4c00f9b3e7f9)) +* **editor:** Remove primary highlight color from edge being executed on new canvas ([#12307](https://github.com/n8n-io/n8n/issues/12307)) ([50913de](https://github.com/n8n-io/n8n/commit/50913de2651450e18307a833ada57656d8959493)) +* **editor:** Render empty string instead of [empty] ([#12448](https://github.com/n8n-io/n8n/issues/12448)) ([2c72047](https://github.com/n8n-io/n8n/commit/2c72047d0b260db5a4b1fd0d7448ab19378e908f)) +* **editor:** Show all workflows in the error workflow dropdown in the workflow settings ([#12413](https://github.com/n8n-io/n8n/issues/12413)) ([ccda7f9](https://github.com/n8n-io/n8n/commit/ccda7f9c62e2ba04dbd8a86cfeb5016b56f19c7a)) +* **editor:** Unify disabled parameters background color ([#12306](https://github.com/n8n-io/n8n/issues/12306)) ([8c63599](https://github.com/n8n-io/n8n/commit/8c635993bd65c84707938d9564d54c1ae17f1c1f)) +* **HTTP Request Node:** Fix typo in hint ([#12439](https://github.com/n8n-io/n8n/issues/12439)) ([b6230b6](https://github.com/n8n-io/n8n/commit/b6230b63f2ed8c7531b53c896f8b033c599e156e)) +* **OpenAI Node:** Add quotes to default base URL ([#12312](https://github.com/n8n-io/n8n/issues/12312)) ([2e90eba](https://github.com/n8n-io/n8n/commit/2e90eba47eff81f8b17a305cbc1656f929d622f8)) +* **OpenAI Node:** Update node to account for URL in credentials ([#12356](https://github.com/n8n-io/n8n/issues/12356)) ([f78cceb](https://github.com/n8n-io/n8n/commit/f78ccebe514819dca03f5c220274b94fd6d1c73b)) +* **Postgres Node:** Account for JSON expressions ([#12012](https://github.com/n8n-io/n8n/issues/12012)) ([06b86af](https://github.com/n8n-io/n8n/commit/06b86af7356b3be0af146c49f9720b24157b9e61)) +* **Postgres Node:** Allow passing in arrays to JSON columns for insert ([#12452](https://github.com/n8n-io/n8n/issues/12452)) ([9dd0686](https://github.com/n8n-io/n8n/commit/9dd068632b1542126831baa83cf638ce369b0947)) +* **Postgres Node:** Re-use connection pool across executions ([#12346](https://github.com/n8n-io/n8n/issues/12346)) ([2ca37f5](https://github.com/n8n-io/n8n/commit/2ca37f5f7f7f80c50dbc8c87146b8bff510f01c8)) +* Run workflow if active and single webhook service has pin data ([#12425](https://github.com/n8n-io/n8n/issues/12425)) ([8053a4a](https://github.com/n8n-io/n8n/commit/8053a4a1763d143da80b9e4e00dcef9b716ce6b2)) +* Set correct default for added Resource Mapper boolean fields ([#12344](https://github.com/n8n-io/n8n/issues/12344)) ([b4c77f2](https://github.com/n8n-io/n8n/commit/b4c77f27b66275ddb58138e8d2fe1509265e9652)) +* **Supabase Node:** Allow for filtering on the same field multiple times ([#12429](https://github.com/n8n-io/n8n/issues/12429)) ([d7cc789](https://github.com/n8n-io/n8n/commit/d7cc789d79477aff40ff4eca0175c7578aef338a)) +* **Zep Vector Store Node:** Cloud vector store integration ([#12353](https://github.com/n8n-io/n8n/issues/12353)) ([2433d6b](https://github.com/n8n-io/n8n/commit/2433d6b7d3dede2595dd5b637ca8bbc1103272b3)) + + +### Features + +* (Execute Workflow Node): Inputs for Sub-workflows ([#11830](https://github.com/n8n-io/n8n/issues/11830)) ([#11837](https://github.com/n8n-io/n8n/issues/11837)) ([d411663](https://github.com/n8n-io/n8n/commit/d4116630a638195c7d87e01e2b5c151941636056)) +* Add load options to new tool mode for vector stores ([#12462](https://github.com/n8n-io/n8n/issues/12462)) ([3109de6](https://github.com/n8n-io/n8n/commit/3109de6073b237ee3dcc93afb69345586f3b836d)) +* Add migration to add `managed` column to credentials table ([#12275](https://github.com/n8n-io/n8n/issues/12275)) ([3cb7081](https://github.com/n8n-io/n8n/commit/3cb70814465e8fa504e909ef36b21b79d4b70b28)) +* Allow using Vector Stores directly as Tools ([#12311](https://github.com/n8n-io/n8n/issues/12311)) ([76dded4](https://github.com/n8n-io/n8n/commit/76dded4bea9d26ad84fdbde74d577d244eb4e223)) +* **core:** Add endpoint to create free AI credits ([#12362](https://github.com/n8n-io/n8n/issues/12362)) ([ac4e042](https://github.com/n8n-io/n8n/commit/ac4e0422316a4dcd19151dd7d504e2b3cccbc038)) +* **core:** Add includeData parameter to `GET /credentials` ([#12220](https://github.com/n8n-io/n8n/issues/12220)) ([f56ad8c](https://github.com/n8n-io/n8n/commit/f56ad8cf49f7cf0665035d2e43bb7ff5b8fd75f3)) +* **core:** Comply with `NO_COLOR` in logs ([#12347](https://github.com/n8n-io/n8n/issues/12347)) ([1e60bbc](https://github.com/n8n-io/n8n/commit/1e60bbcf169e8624a97ddde543cdd1d406e5c7ca)) +* **core:** Offload manual executions to workers ([#11284](https://github.com/n8n-io/n8n/issues/11284)) ([9432aa0](https://github.com/n8n-io/n8n/commit/9432aa0b00e74faf4651ac673f18e16b7e56e145)) +* **editor:** Add free AI credits CTA ([#12365](https://github.com/n8n-io/n8n/issues/12365)) ([f873196](https://github.com/n8n-io/n8n/commit/f8731963f6754386f15c8417c0cc32dba87c481a)) +* **editor:** Add support for project icons ([#12349](https://github.com/n8n-io/n8n/issues/12349)) ([9117718](https://github.com/n8n-io/n8n/commit/9117718cc960e2bad5a5db07b10e9e7b561ec5e4)) +* **editor:** Easy AI workflow improvements ([#12400](https://github.com/n8n-io/n8n/issues/12400)) ([8dc691d](https://github.com/n8n-io/n8n/commit/8dc691dc62692f8af143c84032391397adeb790d)) +* **editor:** Make workflows, credentials, executions and new canvas usable on mobile and touch devices ([#12372](https://github.com/n8n-io/n8n/issues/12372)) ([06c9473](https://github.com/n8n-io/n8n/commit/06c94732103687705d71c5a1c5bfa993e3df3427)) +* **editor:** New Code editor based on the TypeScript language service ([#12285](https://github.com/n8n-io/n8n/issues/12285)) ([52ae02a](https://github.com/n8n-io/n8n/commit/52ae02abaa92e5bbfda58843c8eccc845506fa4b)) +* **editor:** Update Sub-Workflow Debugging Copy ([#12483](https://github.com/n8n-io/n8n/issues/12483)) ([04e2928](https://github.com/n8n-io/n8n/commit/04e2928d345f83c202c762e4673cf878b4762f33)) +* **Google Vertex Chat Model Node:** Add an option to specify GCP region ([#12300](https://github.com/n8n-io/n8n/issues/12300)) ([30f9c03](https://github.com/n8n-io/n8n/commit/30f9c033db28112e1f97bb55d41b5bfce265cb51)) +* **HighLevel Node:** Add support for calendar items ([#10820](https://github.com/n8n-io/n8n/issues/10820)) ([6e189fd](https://github.com/n8n-io/n8n/commit/6e189fda776051e09e90b3d86ecd0d1e80dcc0c6)) +* **Microsoft Entra ID Node:** New node ([#11779](https://github.com/n8n-io/n8n/issues/11779)) ([3006ccf](https://github.com/n8n-io/n8n/commit/3006ccf41bb911ba72f087a1479889fbf308c17d)) + + + +# [1.73.0](https://github.com/n8n-io/n8n/compare/n8n@1.72.0...n8n@1.73.0) (2024-12-19) + + +### Bug Fixes + +* **core:** Ensure runners do not throw on unsupported console methods ([#12167](https://github.com/n8n-io/n8n/issues/12167)) ([57c6a61](https://github.com/n8n-io/n8n/commit/57c6a6167dd2b30f0082a416daefce994ecad33a)) +* **core:** Fix `$getWorkflowStaticData` on task runners ([#12153](https://github.com/n8n-io/n8n/issues/12153)) ([b479f14](https://github.com/n8n-io/n8n/commit/b479f14ef5012551b823bea5d2ffbddedfd50a77)) +* **core:** Fix binary data helpers (like `prepareBinaryData`) with task runner ([#12259](https://github.com/n8n-io/n8n/issues/12259)) ([0f1461f](https://github.com/n8n-io/n8n/commit/0f1461f2d5d7ec34236ed7fcec3e2f9ee7eb73c4)) +* **core:** Fix race condition in AI tool invocation with multiple items from the parent ([#12169](https://github.com/n8n-io/n8n/issues/12169)) ([dce0c58](https://github.com/n8n-io/n8n/commit/dce0c58f8605c33fc50ec8aa422f0fb5eee07637)) +* **core:** Fix serialization of circular json with task runner ([#12288](https://github.com/n8n-io/n8n/issues/12288)) ([a99d726](https://github.com/n8n-io/n8n/commit/a99d726f42d027b64f94eda0d385b597c5d5be2e)) +* **core:** Upgrade nanoid to address CVE-2024-55565 ([#12171](https://github.com/n8n-io/n8n/issues/12171)) ([8c0bd02](https://github.com/n8n-io/n8n/commit/8c0bd0200c386b122f495c453ccc97a001e4729c)) +* **editor:** Add new create first project CTA ([#12189](https://github.com/n8n-io/n8n/issues/12189)) ([878b419](https://github.com/n8n-io/n8n/commit/878b41904d76eda3ee230f850127b4d56993de24)) +* **editor:** Fix canvas ready opacity transition on new canvas ([#12264](https://github.com/n8n-io/n8n/issues/12264)) ([5d33a6b](https://github.com/n8n-io/n8n/commit/5d33a6ba8a2bccea097402fd04c0e2b00e423e76)) +* **editor:** Fix rendering of code-blocks in sticky notes ([#12227](https://github.com/n8n-io/n8n/issues/12227)) ([9b59035](https://github.com/n8n-io/n8n/commit/9b5903524b95bd21d5915908780942790cf88d27)) +* **editor:** Fix sticky color picker getting covered by nodes on new canvas ([#12263](https://github.com/n8n-io/n8n/issues/12263)) ([27bd3c8](https://github.com/n8n-io/n8n/commit/27bd3c85b3a4ddcf763a543b232069bb108130cf)) +* **editor:** Improve commit modal user facing messaging ([#12161](https://github.com/n8n-io/n8n/issues/12161)) ([ad39243](https://github.com/n8n-io/n8n/commit/ad392439826b17bd0b84f981e0958d88f09e7fe9)) +* **editor:** Prevent connection line from showing when clicking the plus button of a node ([#12265](https://github.com/n8n-io/n8n/issues/12265)) ([9180b46](https://github.com/n8n-io/n8n/commit/9180b46b52302b203eecf3bb81c3f2132527a1e6)) +* **editor:** Prevent stickies from being edited in preview mode in the new canvas ([#12222](https://github.com/n8n-io/n8n/issues/12222)) ([6706dcd](https://github.com/n8n-io/n8n/commit/6706dcdf72d54f33c1cf4956602c3a64a1578826)) +* **editor:** Reduce cases for Auto-Add of ChatTrigger for AI Agents ([#12154](https://github.com/n8n-io/n8n/issues/12154)) ([365e82d](https://github.com/n8n-io/n8n/commit/365e82d2008dff2f9c91664ee04d7a78363a8b30)) +* **editor:** Remove invalid connections after node handles change ([#12247](https://github.com/n8n-io/n8n/issues/12247)) ([6330bec](https://github.com/n8n-io/n8n/commit/6330bec4db0175b558f2747837323fdbb25b634a)) +* **editor:** Set dangerouslyUseHTMLString in composable ([#12280](https://github.com/n8n-io/n8n/issues/12280)) ([6ba91b5](https://github.com/n8n-io/n8n/commit/6ba91b5e1ed197c67146347a6f6e663ecdf3de48)) +* **editor:** Set RunData outputIndex based on incoming data ([#12182](https://github.com/n8n-io/n8n/issues/12182)) ([dc4261a](https://github.com/n8n-io/n8n/commit/dc4261ae7eca6cf277404cd514c90fad42f14ae0)) +* **editor:** Update the universal create button interaction ([#12105](https://github.com/n8n-io/n8n/issues/12105)) ([5300e0a](https://github.com/n8n-io/n8n/commit/5300e0ac45bf832b3d2957198a49a1c687f3fe1f)) +* **Elasticsearch Node:** Fix issue stopping search queries being sent ([#11464](https://github.com/n8n-io/n8n/issues/11464)) ([388a83d](https://github.com/n8n-io/n8n/commit/388a83dfbdc6ac301e4df704666df9f09fb7d0b3)) +* **Extract from File Node:** Detect file encoding ([#12081](https://github.com/n8n-io/n8n/issues/12081)) ([92af245](https://github.com/n8n-io/n8n/commit/92af245d1aab5bfad8618fda69b2405f5206875d)) +* **Github Node:** Fix fetch of file names with ? character ([#12206](https://github.com/n8n-io/n8n/issues/12206)) ([39462ab](https://github.com/n8n-io/n8n/commit/39462abe1fde7e82b5e5b8f3ceebfcadbfd7c925)) +* **Invoice Ninja Node:** Fix actions for bank transactions ([#11511](https://github.com/n8n-io/n8n/issues/11511)) ([80eea49](https://github.com/n8n-io/n8n/commit/80eea49cf0bf9db438eb85af7cd22aeb11fbfed2)) +* **Linear Node:** Fix issue with error handling ([#12191](https://github.com/n8n-io/n8n/issues/12191)) ([b8eae5f](https://github.com/n8n-io/n8n/commit/b8eae5f28a7d523195f4715cd8da77b3a884ae4c)) +* **MongoDB Node:** Fix checks on projection feature call ([#10563](https://github.com/n8n-io/n8n/issues/10563)) ([58bab46](https://github.com/n8n-io/n8n/commit/58bab461c4c5026b2ca5ea143cbcf98bf3a4ced8)) +* **Postgres Node:** Allow users to wrap strings with $$ ([#12034](https://github.com/n8n-io/n8n/issues/12034)) ([0c15e30](https://github.com/n8n-io/n8n/commit/0c15e30778cc5cb10ed368df144d6fbb2504ec70)) +* **Redis Node:** Add support for username auth ([#12274](https://github.com/n8n-io/n8n/issues/12274)) ([64c0414](https://github.com/n8n-io/n8n/commit/64c0414ef28acf0f7ec42b4b0bb21cbf2921ebe7)) + + +### Features + +* Add solarwinds ipam credentials ([#12005](https://github.com/n8n-io/n8n/issues/12005)) ([882484e](https://github.com/n8n-io/n8n/commit/882484e8ee7d1841d5d600414ca48e9915abcfa8)) +* Add SolarWinds Observability node credentials ([#11805](https://github.com/n8n-io/n8n/issues/11805)) ([e8a5db5](https://github.com/n8n-io/n8n/commit/e8a5db5beb572edbb61dd9100b70827ccc4cca58)) +* **AI Agent Node:** Update descriptions and titles for Chat Trigger options in AI Agents and Memory ([#12155](https://github.com/n8n-io/n8n/issues/12155)) ([07a6ae1](https://github.com/n8n-io/n8n/commit/07a6ae11b3291c1805553d55ba089fe8dd919fd8)) +* **API:** Exclude pinned data from workflows ([#12261](https://github.com/n8n-io/n8n/issues/12261)) ([e0dc385](https://github.com/n8n-io/n8n/commit/e0dc385f8bc8ee13fbc5bbf35e07654e52b193e9)) +* **editor:** Params pane collection improvements ([#11607](https://github.com/n8n-io/n8n/issues/11607)) ([6e44c71](https://github.com/n8n-io/n8n/commit/6e44c71c9ca82cce20eb55bb9003930bbf66a16c)) +* **editor:** Support adding nodes via drag and drop from node creator on new canvas ([#12197](https://github.com/n8n-io/n8n/issues/12197)) ([1bfd9c0](https://github.com/n8n-io/n8n/commit/1bfd9c0e913f3eefc4593f6c344db1ae1f6e4df4)) +* **Facebook Graph API Node:** Update node to support API v21.0 ([#12116](https://github.com/n8n-io/n8n/issues/12116)) ([14c33f6](https://github.com/n8n-io/n8n/commit/14c33f666fe92f7173e4f471fb478e629e775c62)) +* **Linear Trigger Node:** Add support for admin scope ([#12211](https://github.com/n8n-io/n8n/issues/12211)) ([410ea9a](https://github.com/n8n-io/n8n/commit/410ea9a2ef2e14b5e8e4493e5db66cfc2290d8f6)) +* **MailerLite Node:** Update node to support new api ([#11933](https://github.com/n8n-io/n8n/issues/11933)) ([d6b8e65](https://github.com/n8n-io/n8n/commit/d6b8e65abeb411f86538c1630dcce832ee0846a9)) +* Send and wait operation - freeText and customForm response types ([#12106](https://github.com/n8n-io/n8n/issues/12106)) ([e98c7f1](https://github.com/n8n-io/n8n/commit/e98c7f160b018243dc88490d46fb1047a4d7fcdc)) + + +### Performance Improvements + +* **editor:** SchemaView performance improvement by ≈90% 🚀 ([#12180](https://github.com/n8n-io/n8n/issues/12180)) ([6a58309](https://github.com/n8n-io/n8n/commit/6a5830959f5fb493a4119869b8298d8ed702c84a)) + + + +# [1.72.0](https://github.com/n8n-io/n8n/compare/n8n@1.71.0...n8n@1.72.0) (2024-12-11) + + +### Bug Fixes + +* Allow disabling MFA with recovery codes ([#12014](https://github.com/n8n-io/n8n/issues/12014)) ([95d56fe](https://github.com/n8n-io/n8n/commit/95d56fee8d0168b75fca6dcf41702d2f10c930a8)) +* Chat triggers don't work with the new partial execution flow ([#11952](https://github.com/n8n-io/n8n/issues/11952)) ([2b6a72f](https://github.com/n8n-io/n8n/commit/2b6a72f1289c01145edf2b88e5027d2b9b2ed624)) +* **core:** Execute nodes after loops correctly with the new partial execution flow ([#11978](https://github.com/n8n-io/n8n/issues/11978)) ([891dd7f](https://github.com/n8n-io/n8n/commit/891dd7f995c78a2355a049b7ced981a5f6b1c40c)) +* **core:** Fix support for multiple invocation of AI tools ([#12141](https://github.com/n8n-io/n8n/issues/12141)) ([c572c06](https://github.com/n8n-io/n8n/commit/c572c0648ca5b644b222157b3cabac9c05704a84)) +* **core:** Make sure task runner exits ([#12123](https://github.com/n8n-io/n8n/issues/12123)) ([c5effca](https://github.com/n8n-io/n8n/commit/c5effca7d47a713f157eea21d7892002e9ab7283)) +* **core:** Remove run data of nodes unrelated to the current partial execution ([#12099](https://github.com/n8n-io/n8n/issues/12099)) ([c4e4d37](https://github.com/n8n-io/n8n/commit/c4e4d37a8785d1a4bcd376cb1c49b82a80aa4391)) +* **core:** Return homeProject when filtering workflows by project id ([#12077](https://github.com/n8n-io/n8n/issues/12077)) ([efafeed](https://github.com/n8n-io/n8n/commit/efafeed33482100a23fa0163a53b9ce93cd6b2c3)) +* **editor:** Don't reset all Parameter Inputs when switched to read-only ([#12063](https://github.com/n8n-io/n8n/issues/12063)) ([706702d](https://github.com/n8n-io/n8n/commit/706702dff8da3c2e949e2c98dd5b34b299a1f17c)) +* **editor:** Fix canvas panning using `Control` + `Left Mouse Button` on Windows ([#12104](https://github.com/n8n-io/n8n/issues/12104)) ([43009b6](https://github.com/n8n-io/n8n/commit/43009b6aa820f24b9e6f519e7a45592aa21db03e)) +* **editor:** Fix Nodeview.v2 reinitialise based on route changes ([#12062](https://github.com/n8n-io/n8n/issues/12062)) ([b1f8663](https://github.com/n8n-io/n8n/commit/b1f866326574974eb2936e6b02771346e83e7137)) +* **editor:** Fix svg background pattern rendering on safari ([#12079](https://github.com/n8n-io/n8n/issues/12079)) ([596f221](https://github.com/n8n-io/n8n/commit/596f22103c01e14063ebb2388c4dabf4714d37c6)) +* **editor:** Fix switching from v2 to v1 ([#12050](https://github.com/n8n-io/n8n/issues/12050)) ([5c76de3](https://github.com/n8n-io/n8n/commit/5c76de324c2e25b0d8b74cdab79f04aa616d8c4f)) +* **editor:** Improvements to the commit modal ([#12031](https://github.com/n8n-io/n8n/issues/12031)) ([4fe1952](https://github.com/n8n-io/n8n/commit/4fe1952e2fb3379d95da42a7bb531851af6d0094)) +* **editor:** Load node types in demo and preview modes ([#12048](https://github.com/n8n-io/n8n/issues/12048)) ([4ac5f95](https://github.com/n8n-io/n8n/commit/4ac5f9527bbec382a65ed3f1d9c41d6948c154e3)) +* **editor:** Polyfill crypto.randomUUID ([#12052](https://github.com/n8n-io/n8n/issues/12052)) ([0537524](https://github.com/n8n-io/n8n/commit/0537524c3e45d7633415c7a9175a3857ad52cd58)) +* **editor:** Redirect Settings to the proper sub page depending on the instance type (cloud or not) ([#12053](https://github.com/n8n-io/n8n/issues/12053)) ([a16d006](https://github.com/n8n-io/n8n/commit/a16d006f893cac927d674fa447b08c1205b67c54)) +* **editor:** Render sanitized HTML content in toast messages ([#12139](https://github.com/n8n-io/n8n/issues/12139)) ([0468945](https://github.com/n8n-io/n8n/commit/0468945c99f083577c4cc71f671b4b950f6aeb86)) +* **editor:** Universal button snags ([#11974](https://github.com/n8n-io/n8n/issues/11974)) ([956b11a](https://github.com/n8n-io/n8n/commit/956b11a560528336a74be40f722fa05bf3cca94d)) +* **editor:** Update concurrency UI considering different types of instances ([#12068](https://github.com/n8n-io/n8n/issues/12068)) ([fa572bb](https://github.com/n8n-io/n8n/commit/fa572bbca4397b1cc42668530497444630ed17eb)) +* **FTP Node:** Fix issue with creating folders on rename ([#9340](https://github.com/n8n-io/n8n/issues/9340)) ([eb7d593](https://github.com/n8n-io/n8n/commit/eb7d5934ef8bc6e999d6de4c0b8025ce175df5dd)) +* **n8n Form Node:** Completion page display if EXECUTIONS_DATA_SAVE_ON_SUCCESS=none ([#11869](https://github.com/n8n-io/n8n/issues/11869)) ([f4c2523](https://github.com/n8n-io/n8n/commit/f4c252341985fe03927a2fd5d60ba846ec3dfc77)) +* **OpenAI Node:** Allow updating assistant files ([#12042](https://github.com/n8n-io/n8n/issues/12042)) ([7b20f8a](https://github.com/n8n-io/n8n/commit/7b20f8aaa8befd19dbad0af3bf1b881342c1fca5)) + + +### Features + +* **AI Transform Node:** Reduce payload size ([#11965](https://github.com/n8n-io/n8n/issues/11965)) ([d8ca8de](https://github.com/n8n-io/n8n/commit/d8ca8de13a4cbb856696873bdb56c66b12a5b027)) +* **core:** Add option to filter for empty variables ([#12112](https://github.com/n8n-io/n8n/issues/12112)) ([a63f0e8](https://github.com/n8n-io/n8n/commit/a63f0e878e21da9924451e2679939209b34b6583)) +* **core:** Cancel runner task on timeout in external mode ([#12101](https://github.com/n8n-io/n8n/issues/12101)) ([addb4fa](https://github.com/n8n-io/n8n/commit/addb4fa352c88d856e463bb2b7001173c4fd6a7d)) +* **core:** Parent workflows should wait for sub-workflows to finish ([#11985](https://github.com/n8n-io/n8n/issues/11985)) ([60b3dcc](https://github.com/n8n-io/n8n/commit/60b3dccf9317da6f3013be35a78ce21d0416ad80)) +* **editor:** Implementing the `Easy AI Workflow` experiment ([#12043](https://github.com/n8n-io/n8n/issues/12043)) ([67ed1d2](https://github.com/n8n-io/n8n/commit/67ed1d2c3c2e69d5a96daf7de2795c02f5d8f15b)) +* **Redis Node:** Add support for continue on fail / error output branch ([#11714](https://github.com/n8n-io/n8n/issues/11714)) ([ed35958](https://github.com/n8n-io/n8n/commit/ed359586c88a7662f4d94d58c5a87cf91d027ab9)) + + + +# [1.71.0](https://github.com/n8n-io/n8n/compare/n8n@1.70.0...n8n@1.71.0) (2024-12-04) + + +### Bug Fixes + +* **core:** Fix push for waiting executions ([#11984](https://github.com/n8n-io/n8n/issues/11984)) ([8d71307](https://github.com/n8n-io/n8n/commit/8d71307da0398e7e39bf53e8e1cfa21ac1ceaf69)) +* **core:** Improve header parameter parsing on http client responses ([#11953](https://github.com/n8n-io/n8n/issues/11953)) ([41e9e39](https://github.com/n8n-io/n8n/commit/41e9e39b5b53ecd9d8d1b385df65a26ecb9bccd8)) +* **core:** Opt-out from optimizations if `$item` is used ([#12036](https://github.com/n8n-io/n8n/issues/12036)) ([872535a](https://github.com/n8n-io/n8n/commit/872535a40c85dcfad3a4b27c57c026ae003f562f)) +* **core:** Use the configured timezone in task runner ([#12032](https://github.com/n8n-io/n8n/issues/12032)) ([2e6845a](https://github.com/n8n-io/n8n/commit/2e6845afcbc30dff73c3f3f15f21278cab397387)) +* **core:** Validate node name when creating `NodeOperationErrror` ([#11999](https://github.com/n8n-io/n8n/issues/11999)) ([e68c9da](https://github.com/n8n-io/n8n/commit/e68c9da30c31cd5f994cb01ce759192562bfbd40)) +* **editor:** Add execution concurrency info and paywall ([#11847](https://github.com/n8n-io/n8n/issues/11847)) ([57d3269](https://github.com/n8n-io/n8n/commit/57d3269e400ee4e7e3636614870ebdfdb0aa8c1d)) +* **editor:** Fix bug causing connection lines to disappear when hovering stickies ([#11950](https://github.com/n8n-io/n8n/issues/11950)) ([439a1cc](https://github.com/n8n-io/n8n/commit/439a1cc4f39243e91715b21a84b8e7266ce872cd)) +* **editor:** Fix canvas keybindings using splitter keys such as zooming using `+` key ([#12022](https://github.com/n8n-io/n8n/issues/12022)) ([6af9c82](https://github.com/n8n-io/n8n/commit/6af9c82af6020e99d61e442ee9c2d40761baf027)) +* **editor:** Fix community check ([#11979](https://github.com/n8n-io/n8n/issues/11979)) ([af0398a](https://github.com/n8n-io/n8n/commit/af0398a5e3a8987c01c7112e6f689b35e1ef92fe)) +* **editor:** Fix copy/paste keyboard events in canvas chat ([#12004](https://github.com/n8n-io/n8n/issues/12004)) ([967340a](https://github.com/n8n-io/n8n/commit/967340a2938a79c89319121bf57a8d654f88e06c)) +* **editor:** Fix node showing as successful if errors exists on subsequent runs ([#12019](https://github.com/n8n-io/n8n/issues/12019)) ([8616b17](https://github.com/n8n-io/n8n/commit/8616b17cc6c305da69bbb54fd56ab7cb34213f7c)) +* **editor:** Fix pin data showing up in production executions on new canvas ([#11951](https://github.com/n8n-io/n8n/issues/11951)) ([5f6f8a1](https://github.com/n8n-io/n8n/commit/5f6f8a1bddfd76b586c08da821e8b59070f449fc)) +* **editor:** Handle source control initialization to prevent UI form crashing ([#11776](https://github.com/n8n-io/n8n/issues/11776)) ([6be8e86](https://github.com/n8n-io/n8n/commit/6be8e86c45bd64d000bc95d2ef2d68220e930c02)) +* **editor:** Implement dirty nodes for partial executions ([#11739](https://github.com/n8n-io/n8n/issues/11739)) ([b8da4ff](https://github.com/n8n-io/n8n/commit/b8da4ff9edb0fbb0093c4c41fe11f8e67b696ca3)) +* **editor:** Resolve going back from Settings ([#11958](https://github.com/n8n-io/n8n/issues/11958)) ([d74423c](https://github.com/n8n-io/n8n/commit/d74423c75198d38d0d99a1879051b5e964ecae74)) +* **editor:** Unify executions card label color ([#11949](https://github.com/n8n-io/n8n/issues/11949)) ([fc79718](https://github.com/n8n-io/n8n/commit/fc797188d63e87df34b3a153eb4a0d0b7361b3f5)) +* **editor:** Use optional chaining for all members in execution data when using the debug feature ([#12024](https://github.com/n8n-io/n8n/issues/12024)) ([67aa0c9](https://github.com/n8n-io/n8n/commit/67aa0c9107bda16b1cb6d273e17c3cde77035f51)) +* **GraphQL Node:** Throw error if GraphQL variables are not objects or strings ([#11904](https://github.com/n8n-io/n8n/issues/11904)) ([85f30b2](https://github.com/n8n-io/n8n/commit/85f30b27ae282da58a25186d13ff17196dcd7d9c)) +* **HTTP Request Node:** Use iconv-lite to decode http responses, to support more encoding types ([#11930](https://github.com/n8n-io/n8n/issues/11930)) ([461b39c](https://github.com/n8n-io/n8n/commit/461b39c5df5dd446cb8ceef469b204c7c5111229)) +* Load workflows with unconnected Switch outputs ([#12020](https://github.com/n8n-io/n8n/issues/12020)) ([abc851c](https://github.com/n8n-io/n8n/commit/abc851c0cff298607a0dc2f2882aa17136898f45)) +* **n8n Form Node:** Use https to load google fonts ([#11948](https://github.com/n8n-io/n8n/issues/11948)) ([eccd924](https://github.com/n8n-io/n8n/commit/eccd924f5e8dbe59e37099d1a6fbe8866fef55bf)) +* **Telegram Trigger Node:** Fix header secret check ([#12018](https://github.com/n8n-io/n8n/issues/12018)) ([f16de4d](https://github.com/n8n-io/n8n/commit/f16de4db01c0496205635a3203a44098e7908453)) +* **Webflow Node:** Fix issue with pagination in v2 node ([#11934](https://github.com/n8n-io/n8n/issues/11934)) ([1eb94bc](https://github.com/n8n-io/n8n/commit/1eb94bcaf54d9e581856ce0b87253e1c28fa68e2)) +* **Webflow Node:** Fix issue with publishing items ([#11982](https://github.com/n8n-io/n8n/issues/11982)) ([0a8a57e](https://github.com/n8n-io/n8n/commit/0a8a57e4ec8081ab1a53f36d686b3d5dcaae2476)) + + +### Features + +* **AI Transform Node:** Node Prompt improvements ([#11611](https://github.com/n8n-io/n8n/issues/11611)) ([40a7445](https://github.com/n8n-io/n8n/commit/40a7445f0873af2cdbd10b12bd691c07a43e27cc)) +* **Code Node:** Warning if pairedItem absent or could not be auto mapped ([#11737](https://github.com/n8n-io/n8n/issues/11737)) ([3a5bd12](https://github.com/n8n-io/n8n/commit/3a5bd129459272cbac960ae2754db3028943f87e)) +* **editor:** Canvas chat UI & UX improvements ([#11924](https://github.com/n8n-io/n8n/issues/11924)) ([1e25774](https://github.com/n8n-io/n8n/commit/1e25774541461c86da5c4af8efec792e2814eeb1)) +* **editor:** Persist user's preferred display modes on localStorage ([#11929](https://github.com/n8n-io/n8n/issues/11929)) ([bd69316](https://github.com/n8n-io/n8n/commit/bd693162b86a21c90880bab2c2e67aab733095ff)) + + +### Performance Improvements + +* **editor:** Virtualize SchemaView ([#11694](https://github.com/n8n-io/n8n/issues/11694)) ([9c6def9](https://github.com/n8n-io/n8n/commit/9c6def91975764522fa52cdf21e9cb5bdb4d721d)) + + + +# [1.70.0](https://github.com/n8n-io/n8n/compare/n8n@1.69.0...n8n@1.70.0) (2024-11-27) + + +### Bug Fixes + +* **AI Agent Node:** Add binary message before scratchpad to prevent tool calling loops ([#11845](https://github.com/n8n-io/n8n/issues/11845)) ([5c80cb5](https://github.com/n8n-io/n8n/commit/5c80cb57cf709a1097a38e0394aad6fce5330eba)) +* CodeNodeEditor walk cannot read properties of null ([#11129](https://github.com/n8n-io/n8n/issues/11129)) ([d99e0a7](https://github.com/n8n-io/n8n/commit/d99e0a7c979a1ee96b2eea1b9011d5bce375289a)) +* **core:** Bring back execution data on the `executionFinished` push message ([#11821](https://github.com/n8n-io/n8n/issues/11821)) ([0313570](https://github.com/n8n-io/n8n/commit/03135702f18e750ba44840dccfec042270629a2b)) +* **core:** Correct invalid WS status code on removing connection ([#11901](https://github.com/n8n-io/n8n/issues/11901)) ([1d80225](https://github.com/n8n-io/n8n/commit/1d80225d26ba01f78934a455acdcca7b83be7205)) +* **core:** Don't use unbound context methods in code sandboxes ([#11914](https://github.com/n8n-io/n8n/issues/11914)) ([f6c0d04](https://github.com/n8n-io/n8n/commit/f6c0d045e9683cd04ee849f37b96697097c5b41d)) +* **core:** Fix broken execution query when using projectId ([#11852](https://github.com/n8n-io/n8n/issues/11852)) ([a061dbc](https://github.com/n8n-io/n8n/commit/a061dbca07ad686c563e85c56081bc1a7830259b)) +* **core:** Fix validation of items returned in the task runner ([#11897](https://github.com/n8n-io/n8n/issues/11897)) ([a535e88](https://github.com/n8n-io/n8n/commit/a535e88f1aec8fbbf2eb9397d38748f49773de2d)) +* **editor:** Add missing trigger waiting tooltip on new canvas ([#11918](https://github.com/n8n-io/n8n/issues/11918)) ([a8df221](https://github.com/n8n-io/n8n/commit/a8df221bfbb5428d93d03f539bcfdaf29ee20c21)) +* **editor:** Don't re-render input panel after node finishes executing ([#11813](https://github.com/n8n-io/n8n/issues/11813)) ([b3a99a2](https://github.com/n8n-io/n8n/commit/b3a99a2351079c37ed6d83f43920ba80f3832234)) +* **editor:** Fix AI assistant loading message layout ([#11819](https://github.com/n8n-io/n8n/issues/11819)) ([89b4807](https://github.com/n8n-io/n8n/commit/89b48072432753137b498c338af7777036fdde7a)) +* **editor:** Fix new canvas discovery tooltip position after adding github stars button ([#11898](https://github.com/n8n-io/n8n/issues/11898)) ([f4ab5c7](https://github.com/n8n-io/n8n/commit/f4ab5c7b9244b8fdde427c12c1a152fbaaba0c34)) +* **editor:** Fix node position not getting set when dragging selection on new canvas ([#11871](https://github.com/n8n-io/n8n/issues/11871)) ([595de81](https://github.com/n8n-io/n8n/commit/595de81c03b3e488ab41fb8d1d316c3db6a8372a)) +* **editor:** Restore workers view ([#11876](https://github.com/n8n-io/n8n/issues/11876)) ([3aa72f6](https://github.com/n8n-io/n8n/commit/3aa72f613f64c16d7dff67ffe66037894e45aa7c)) +* **editor:** Turn NPS survey into a modal and make sure it shows above the Ask AI button ([#11814](https://github.com/n8n-io/n8n/issues/11814)) ([ca169f3](https://github.com/n8n-io/n8n/commit/ca169f3f3455fa39ce9120b30d7b409bade6561e)) +* **editor:** Use `crypto.randomUUID()` to initialize node id if missing on new canvas ([#11873](https://github.com/n8n-io/n8n/issues/11873)) ([bc4857a](https://github.com/n8n-io/n8n/commit/bc4857a1b3d6ea389f11fb8246a1cee33b8a008e)) +* **n8n Form Node:** Duplicate popup in manual mode ([#11925](https://github.com/n8n-io/n8n/issues/11925)) ([2c34bf4](https://github.com/n8n-io/n8n/commit/2c34bf4ea6137fb0fb321969684ffa621da20fa3)) +* **n8n Form Node:** Redirect if completion page to trigger ([#11822](https://github.com/n8n-io/n8n/issues/11822)) ([1a8fb7b](https://github.com/n8n-io/n8n/commit/1a8fb7bdc428c6a23c8708e2dcf924f1f10b47a9)) +* **OpenAI Node:** Remove preview chatInput parameter for `Assistant:Messsage` operation ([#11825](https://github.com/n8n-io/n8n/issues/11825)) ([4dde287](https://github.com/n8n-io/n8n/commit/4dde287cde3af7c9c0e57248e96b8f1270da9332)) +* Retain execution data between partial executions (new flow) ([#11828](https://github.com/n8n-io/n8n/issues/11828)) ([3320436](https://github.com/n8n-io/n8n/commit/3320436a6fdf8472b3843b9fe8d4de7af7f5ef5c)) + + +### Features + +* Add SharePoint credentials ([#11570](https://github.com/n8n-io/n8n/issues/11570)) ([05c6109](https://github.com/n8n-io/n8n/commit/05c61091db9bdd62fdcca910ead50d0bd512966a)) +* Add Zabbix credential only node ([#11489](https://github.com/n8n-io/n8n/issues/11489)) ([fbd1ecf](https://github.com/n8n-io/n8n/commit/fbd1ecfb29461fee393914bc200ec72c654d8944)) +* **AI Transform Node:** Support for drag and drop ([#11276](https://github.com/n8n-io/n8n/issues/11276)) ([2c252b0](https://github.com/n8n-io/n8n/commit/2c252b0b2d5282f4a87bce76f93c4c02dd8ff5e3)) +* **editor:** Drop `response` wrapper requirement from Subworkflow Tool output ([#11785](https://github.com/n8n-io/n8n/issues/11785)) ([cd3598a](https://github.com/n8n-io/n8n/commit/cd3598aaab6cefe58a4cb9df7d93fb501415e9d3)) +* **editor:** Improve node and edge bring-to-front mechanism on new canvas ([#11793](https://github.com/n8n-io/n8n/issues/11793)) ([b89ca9d](https://github.com/n8n-io/n8n/commit/b89ca9d482faa5cb542898f3973fb6e7c9a8437a)) +* **editor:** Make new canvas connections go underneath node when looping backwards ([#11833](https://github.com/n8n-io/n8n/issues/11833)) ([91d1bd8](https://github.com/n8n-io/n8n/commit/91d1bd8d333454f3971605df73c3703102d2a9e9)) +* **editor:** Make the left sidebar in Expressions editor draggable ([#11838](https://github.com/n8n-io/n8n/issues/11838)) ([a713b3e](https://github.com/n8n-io/n8n/commit/a713b3ed25feb1790412fc320cf41a0967635263)) +* **editor:** Migrate existing users to new canvas and set new canvas as default ([#11896](https://github.com/n8n-io/n8n/issues/11896)) ([caa7447](https://github.com/n8n-io/n8n/commit/caa744785a2cc5063a5fb9d269c0ea53ea432298)) +* **Slack Node:** Update wait for approval to use markdown ([#11754](https://github.com/n8n-io/n8n/issues/11754)) ([40dd02f](https://github.com/n8n-io/n8n/commit/40dd02f360d0d8752fe89c4304c18cac9858c530)) + + + +# [1.69.0](https://github.com/n8n-io/n8n/compare/n8n@1.68.0...n8n@1.69.0) (2024-11-20) + + +### Bug Fixes + +* Add supported versions warning to Zep memory node ([#11803](https://github.com/n8n-io/n8n/issues/11803)) ([9cc5bc1](https://github.com/n8n-io/n8n/commit/9cc5bc1aef974fe6c2511c1597b90c8b54ba6b9c)) +* **AI Agent Node:** Escape curly brackets in tools description for non Tool agents ([#11772](https://github.com/n8n-io/n8n/issues/11772)) ([83abdfa](https://github.com/n8n-io/n8n/commit/83abdfaf027a0533824a3ac3e4bab3cad971821a)) +* **Anthropic Chat Model Node:** Update credentials test endpoint ([#11756](https://github.com/n8n-io/n8n/issues/11756)) ([6cf0aba](https://github.com/n8n-io/n8n/commit/6cf0abab5bcddb407571271b9f174e66bb209790)) +* **core:** Add missing env vars to task runner config ([#11810](https://github.com/n8n-io/n8n/issues/11810)) ([870c576](https://github.com/n8n-io/n8n/commit/870c576ed9d7ce4ef005db9c8bedd78e91084c9c)) +* **core:** Allow Azure's SAML metadata XML containing WS-Federation nodes to pass validation ([#11724](https://github.com/n8n-io/n8n/issues/11724)) ([3b62bd5](https://github.com/n8n-io/n8n/commit/3b62bd58c264be0225a74ae0eb35c4761c419b79)) +* **core:** Delete binary data parent folder when pruning executions ([#11790](https://github.com/n8n-io/n8n/issues/11790)) ([17ef2c6](https://github.com/n8n-io/n8n/commit/17ef2c63f69b811bdd28006df3b6edd446837971)) +* **core:** Fix `diagnostics.enabled` default value ([#11809](https://github.com/n8n-io/n8n/issues/11809)) ([5fa72b0](https://github.com/n8n-io/n8n/commit/5fa72b0512b00bdc6a1065b7b604c9640f469454)) +* **core:** Improve the security on OAuth callback endpoints ([#11593](https://github.com/n8n-io/n8n/issues/11593)) ([274fcf4](https://github.com/n8n-io/n8n/commit/274fcf45d393d8db1d2fb5ae1e774a4c9198a178)) +* **core:** Restore old names for pruning config keys ([#11782](https://github.com/n8n-io/n8n/issues/11782)) ([d15b8d0](https://github.com/n8n-io/n8n/commit/d15b8d05092d2ed9dd45fcfa34b4177f60469ebd)) +* **core:** Unload any existing version of a community nodes package before upgrading it ([#11727](https://github.com/n8n-io/n8n/issues/11727)) ([1d8fd13](https://github.com/n8n-io/n8n/commit/1d8fd13d841b73466ba5f8044d17d7199da7e856)) +* **editor:** Add documentation link to insufficient quota message ([#11777](https://github.com/n8n-io/n8n/issues/11777)) ([1987363](https://github.com/n8n-io/n8n/commit/1987363f7941285c51fda849a4ac92832368b25a)) +* **editor:** Add project header subtitle ([#11797](https://github.com/n8n-io/n8n/issues/11797)) ([ff4261c](https://github.com/n8n-io/n8n/commit/ff4261c16845c7de1790fdf0eaa9f57b37822289)) +* **editor:** Change Home label to Overview ([#11736](https://github.com/n8n-io/n8n/issues/11736)) ([1a78360](https://github.com/n8n-io/n8n/commit/1a783606b4ef22d85e173a2a780d5c49ff208932)) +* **editor:** Fix executions sorting ([#11808](https://github.com/n8n-io/n8n/issues/11808)) ([cd5ad65](https://github.com/n8n-io/n8n/commit/cd5ad65e90a3be4d67b51521772e0fceb7f4abc7)) +* **editor:** Fix partial executions not working due to broken push message queue and race conditions ([#11798](https://github.com/n8n-io/n8n/issues/11798)) ([b05d435](https://github.com/n8n-io/n8n/commit/b05d43519994abdd34a65462d14184c779d0b667)) +* **editor:** Fix reordered switch connections when copying nodes on new canvas ([#11788](https://github.com/n8n-io/n8n/issues/11788)) ([6c2dad7](https://github.com/n8n-io/n8n/commit/6c2dad79143f5b0c255ab8c97c3255314834c458)) +* **editor:** Fix the issue with RMC Values to Send collection disappears ([#11710](https://github.com/n8n-io/n8n/issues/11710)) ([7bb9002](https://github.com/n8n-io/n8n/commit/7bb9002cbc10cf58550f53a30c6fd7151f8e7355)) +* **editor:** Improve formatting of expired trial error message ([#11708](https://github.com/n8n-io/n8n/issues/11708)) ([8a0ad0f](https://github.com/n8n-io/n8n/commit/8a0ad0f910feeada6d0c63e81c3e97a1a6e44de7)) +* **editor:** Optimize application layout ([#11769](https://github.com/n8n-io/n8n/issues/11769)) ([91f9390](https://github.com/n8n-io/n8n/commit/91f9390b90a68d064ea00d10505bf3767ddec1d4)) +* **Google Sheets Trigger Node:** Fix issue with regex showing correct sheet as invalid ([#11770](https://github.com/n8n-io/n8n/issues/11770)) ([d5ba1a0](https://github.com/n8n-io/n8n/commit/d5ba1a059b7a67154f17f8ad3fcfe66c5c031059)) +* **HTTP Request Node:** Continue using error ([#11733](https://github.com/n8n-io/n8n/issues/11733)) ([d1bae1a](https://github.com/n8n-io/n8n/commit/d1bae1ace062dd5b64087e0313e78599b5994355)) +* **n8n Form Node:** Support expressions in completion page ([#11781](https://github.com/n8n-io/n8n/issues/11781)) ([1099167](https://github.com/n8n-io/n8n/commit/10991675fe2e6913e8f03d565b670257941f18e5)) +* Prevent workflow to run if active and single webhook service ([#11752](https://github.com/n8n-io/n8n/issues/11752)) ([bcb9a20](https://github.com/n8n-io/n8n/commit/bcb9a2078186ff80e03ca3b8532d3585c307d86b)) +* **Read/Write Files from Disk Node:** Escape parenthesis when reading file ([#11753](https://github.com/n8n-io/n8n/issues/11753)) ([285534e](https://github.com/n8n-io/n8n/commit/285534e6d0ceb60290bd0a928054e494252148fe)) +* **YouTube Node:** Issue in published before and after dates filters ([#11741](https://github.com/n8n-io/n8n/issues/11741)) ([7381c28](https://github.com/n8n-io/n8n/commit/7381c28af00148b329690021b921267a48a6eaa3)) + + +### Features + +* **core:** Improve debugging of sub-workflows ([#11602](https://github.com/n8n-io/n8n/issues/11602)) ([fd3254d](https://github.com/n8n-io/n8n/commit/fd3254d5874a03b57421246b77a519787536a93e)) +* **core:** Improve handling of manual executions with wait nodes ([#11750](https://github.com/n8n-io/n8n/issues/11750)) ([61696c3](https://github.com/n8n-io/n8n/commit/61696c3db313cdc97925af728ff5c68415f9b6b2)) +* **editor:** Add Info Note to NDV Output Panel if no existing Tools were used during Execution ([#11672](https://github.com/n8n-io/n8n/issues/11672)) ([de0e861](https://github.com/n8n-io/n8n/commit/de0e86150f4d0615481e5ec3869465cfd1ce822f)) +* **editor:** Add option to create sub workflow from workflows list in `Execute Workflow` node ([#11706](https://github.com/n8n-io/n8n/issues/11706)) ([c265d44](https://github.com/n8n-io/n8n/commit/c265d44841eb147115563ce24c56666b1e321433)) +* **editor:** Add selection navigation using the keyboard on new canvas ([#11679](https://github.com/n8n-io/n8n/issues/11679)) ([6cd9b99](https://github.com/n8n-io/n8n/commit/6cd9b996af0406caf65941503276524de9e2add4)) +* **editor:** Add universal Create Resource Menu ([#11564](https://github.com/n8n-io/n8n/issues/11564)) ([b38ce14](https://github.com/n8n-io/n8n/commit/b38ce14ec94d74aa1c9780a0572804ff6266588d)) +* **Embeddings Azure OpenAI Node, Azure OpenAI Chat Model Node:** Add support for basePath url in Azure Open AI nodes ([#11784](https://github.com/n8n-io/n8n/issues/11784)) ([e298ebe](https://github.com/n8n-io/n8n/commit/e298ebe90d69f466ee897855472eaa7be1d96aba)) +* **Embeddings OpenAI Node, Embeddings Azure OpenAI Node:** Add dimensions option ([#11773](https://github.com/n8n-io/n8n/issues/11773)) ([de01a8a](https://github.com/n8n-io/n8n/commit/de01a8a01d37f33ab8bcbc65588cafebda969922)) +* GitHub stars dismiss button ([#11794](https://github.com/n8n-io/n8n/issues/11794)) ([8fbad74](https://github.com/n8n-io/n8n/commit/8fbad74ab685c2ba0395c30cee0ddf9498fb8984)) + + + +# [1.68.0](https://github.com/n8n-io/n8n/compare/n8n@1.67.0...n8n@1.68.0) (2024-11-13) + + +### Bug Fixes + +* **AI Agent Node:** Throw better errors for non-tool agents when using structured tools ([#11582](https://github.com/n8n-io/n8n/issues/11582)) ([9b6123d](https://github.com/n8n-io/n8n/commit/9b6123dfb2648f880c7829211fa07666611ad0ea)) +* **Auto-fixing Output Parser Node:** Only run retry chain on parsing errors ([#11569](https://github.com/n8n-io/n8n/issues/11569)) ([21b31e4](https://github.com/n8n-io/n8n/commit/21b31e488ff6ab0bcf3c79edcd17b9e37d4c64a4)) +* **core:** Continue with error output reverse items in success branch ([#11684](https://github.com/n8n-io/n8n/issues/11684)) ([6d5ee83](https://github.com/n8n-io/n8n/commit/6d5ee832966fab96043b0d65697c059ced61d334)) +* **core:** Ensure task runner server closes websocket connection correctly ([#11633](https://github.com/n8n-io/n8n/issues/11633)) ([b496bf3](https://github.com/n8n-io/n8n/commit/b496bf3147d2cd873d24371be02cb7ea5dbd8621)) +* **core:** Handle websocket connection error more gracefully in task runners ([#11635](https://github.com/n8n-io/n8n/issues/11635)) ([af7d6e6](https://github.com/n8n-io/n8n/commit/af7d6e68d0436ff8a3d4e8410dc8ee4f3a035c44)) +* **core:** Improve model sub-nodes error handling ([#11418](https://github.com/n8n-io/n8n/issues/11418)) ([57467d0](https://github.com/n8n-io/n8n/commit/57467d0285d67509322630c4c01130022f274a41)) +* **core:** Make push work for waiting webhooks ([#11678](https://github.com/n8n-io/n8n/issues/11678)) ([600479b](https://github.com/n8n-io/n8n/commit/600479bf36ba8870d4aecacad19a2dc5f2d97959)) +* **core:** Revert all the context helpers changes ([#11616](https://github.com/n8n-io/n8n/issues/11616)) ([20fd38f](https://github.com/n8n-io/n8n/commit/20fd38f3517f7ef35604ba16abb4d951270b4d50)) +* **core:** Set the authentication methad to `email` during startup if the SAML configuration in the database has been corrupted ([#11600](https://github.com/n8n-io/n8n/issues/11600)) ([6439291](https://github.com/n8n-io/n8n/commit/6439291738dec16261979d6d835acbc63743d51a)) +* **core:** Use cached value in retrieval of personal project owner ([#11533](https://github.com/n8n-io/n8n/issues/11533)) ([04029d8](https://github.com/n8n-io/n8n/commit/04029d82a11b52990890380ba7094055b18e7c1f)) +* Credentials save button is hidden unless you make changes to the ([#11492](https://github.com/n8n-io/n8n/issues/11492)) ([835fbfe](https://github.com/n8n-io/n8n/commit/835fbfe337dd8dc0d0b0318c7227e174484e1328)) +* **editor:** Add stickies to node insert position conflict check allowlist ([#11624](https://github.com/n8n-io/n8n/issues/11624)) ([fc39e3c](https://github.com/n8n-io/n8n/commit/fc39e3ca16231c176957e2504d55df6b416874fe)) +* **editor:** Adjust Scrollbar Width of RunData Header Row ([#11561](https://github.com/n8n-io/n8n/issues/11561)) ([d17d76a](https://github.com/n8n-io/n8n/commit/d17d76a85d5425bc091d29fc84605ffbccbca984)) +* **editor:** Cap NDV Output View Tab Index to prevent rare edge case ([#11614](https://github.com/n8n-io/n8n/issues/11614)) ([a6c8ee4](https://github.com/n8n-io/n8n/commit/a6c8ee4a82e6055766dc1307f79c774c17bb5f4d)) +* **editor:** Do not show hover tooltip when autocomplete is active ([#11653](https://github.com/n8n-io/n8n/issues/11653)) ([23caf43](https://github.com/n8n-io/n8n/commit/23caf43e30342a21d45c825f438aa1e6193601d1)) +* **editor:** Enable pinning main output with error and always allow unpinning ([#11452](https://github.com/n8n-io/n8n/issues/11452)) ([40c8882](https://github.com/n8n-io/n8n/commit/40c88822acdcda6401bd92b9cf89d013c44b8453)) +* **editor:** Fix collapsing nested items in expression modal schema view ([#11645](https://github.com/n8n-io/n8n/issues/11645)) ([41dea52](https://github.com/n8n-io/n8n/commit/41dea522fbfb1c9acee51f47f384973914454b5f)) +* **editor:** Fix default workflow settings ([#11632](https://github.com/n8n-io/n8n/issues/11632)) ([658568e](https://github.com/n8n-io/n8n/commit/658568e2700bfd5b61da53f3052403d0098c2d90)) +* **editor:** Fix duplicate chat trigger ([#11693](https://github.com/n8n-io/n8n/issues/11693)) ([a025848](https://github.com/n8n-io/n8n/commit/a025848ec4be96f74d4de2ab104256b6d89bb837)) +* **editor:** Fix hiding SQL query output when trying to select ([#11649](https://github.com/n8n-io/n8n/issues/11649)) ([4dbf2f4](https://github.com/n8n-io/n8n/commit/4dbf2f4256111985b367030020f1494b8a8b95af)) +* **editor:** Fix scrolling in code edit modal ([#11647](https://github.com/n8n-io/n8n/issues/11647)) ([8f695f3](https://github.com/n8n-io/n8n/commit/8f695f3417820e7b9bb04b78972f6abbd61abbe8)) +* **editor:** Prevent error being thrown in RLC while loading ([#11676](https://github.com/n8n-io/n8n/issues/11676)) ([ca8cb45](https://github.com/n8n-io/n8n/commit/ca8cb455ba59831295c238afb11aeab6ad18428e)) +* **editor:** Prevent NodeCreator from swallowing AskAssistant enter event ([#11532](https://github.com/n8n-io/n8n/issues/11532)) ([db94f16](https://github.com/n8n-io/n8n/commit/db94f169fcd03983fc78a3b4c5e11543610825bf)) +* **editor:** Show node executing status shortly before switching to success on new canvas ([#11675](https://github.com/n8n-io/n8n/issues/11675)) ([b0ba24c](https://github.com/n8n-io/n8n/commit/b0ba24cbbc55cebc26e9f62ead7396c4c8fbd062)) +* **editor:** Show only error title and 'Open errored node' button; hide 'Ask Assistant' in root for sub-node errors ([#11573](https://github.com/n8n-io/n8n/issues/11573)) ([8cba100](https://github.com/n8n-io/n8n/commit/8cba1004888f60ca653ee069501c13b3cadcc561)) +* **Facebook Lead Ads Trigger Node:** Fix issue with optional fields ([#11692](https://github.com/n8n-io/n8n/issues/11692)) ([70d315b](https://github.com/n8n-io/n8n/commit/70d315b3d5b8f5f3e0f39527bba11e254a52028e)) +* **Google BigQuery Node:** Add item index to insert error ([#11702](https://github.com/n8n-io/n8n/issues/11702)) ([145d092](https://github.com/n8n-io/n8n/commit/145d0921b217bbd4b625beaacfa14429560bf51b)) +* **Google Drive Node:** Fix file upload for streams ([#11698](https://github.com/n8n-io/n8n/issues/11698)) ([770230f](https://github.com/n8n-io/n8n/commit/770230fbfe0b9e86527254e201c4602fbced94ff)) +* **In-Memory Vector Store Node:** Fix displaying execution data of connected embedding nodes ([#11701](https://github.com/n8n-io/n8n/issues/11701)) ([40ade15](https://github.com/n8n-io/n8n/commit/40ade151724f4af28a6ed959fd9363450ea711fd)) +* **Item List Output Parser Node:** Fix number of items parameter issue ([#11696](https://github.com/n8n-io/n8n/issues/11696)) ([01ebe9d](https://github.com/n8n-io/n8n/commit/01ebe9dd38629afbab954fb489f3ef2bb7ab5b34)) +* **n8n Form Node:** Find completion page ([#11674](https://github.com/n8n-io/n8n/issues/11674)) ([ed3ad6d](https://github.com/n8n-io/n8n/commit/ed3ad6d684597f7c4b7419dfa81d476e66f10eba)) +* **n8n Form Node:** Open form page if form trigger has pin data ([#11673](https://github.com/n8n-io/n8n/issues/11673)) ([f0492bd](https://github.com/n8n-io/n8n/commit/f0492bd3bb0d94802a2707fb1cf861313b6ea808)) +* **n8n Form Node:** Trigger page stack in waiting if error in workflow ([#11671](https://github.com/n8n-io/n8n/issues/11671)) ([94b5873](https://github.com/n8n-io/n8n/commit/94b5873248212a5500f02cf3c0d74df6f9d8fb26)) +* **n8n Form Trigger Node:** Checkboxes different sizes ([#11677](https://github.com/n8n-io/n8n/issues/11677)) ([c08d23c](https://github.com/n8n-io/n8n/commit/c08d23c00f01bb6fcb3b75f02e0338af375f9b32)) +* NDV search bugs ([#11613](https://github.com/n8n-io/n8n/issues/11613)) ([c32cf64](https://github.com/n8n-io/n8n/commit/c32cf644a6b8c21558e802449329877845de70b1)) +* **Notion Node:** Extract page url ([#11643](https://github.com/n8n-io/n8n/issues/11643)) ([cbdd535](https://github.com/n8n-io/n8n/commit/cbdd535fe0cb4e032ea82f008dcf35cc5f2264c2)) +* **Redis Chat Memory Node:** Respect the SSL flag from the credential ([#11689](https://github.com/n8n-io/n8n/issues/11689)) ([b5cbf75](https://github.com/n8n-io/n8n/commit/b5cbf7566d351d8a8e9972f13ff5867ff1c8d7d0)) +* **Supabase Node:** Reset query parameters in get many operation ([#11630](https://github.com/n8n-io/n8n/issues/11630)) ([7458229](https://github.com/n8n-io/n8n/commit/74582290c04d2dd32300b1a6c7715862ae837d34)) +* **Switch Node:** Maintain output connections ([#11162](https://github.com/n8n-io/n8n/issues/11162)) ([9bd79fc](https://github.com/n8n-io/n8n/commit/9bd79fceebc4453d0fe40ae5f628d5e31ff2b326)) + + +### Features + +* **AI Transform Node:** Show warning for binary data ([#11560](https://github.com/n8n-io/n8n/issues/11560)) ([ddbb263](https://github.com/n8n-io/n8n/commit/ddbb263dce0fc458abc95d850217251bb49d2b83)) +* **core:** Make all http requests made with `httpRequestWithAuthentication` abortable ([#11704](https://github.com/n8n-io/n8n/issues/11704)) ([0d8aada](https://github.com/n8n-io/n8n/commit/0d8aada49005d6a6078e8460003a0de61a8f423c)) +* **editor:** Improve how we show default Agent prompt and Memory session parameters ([#11491](https://github.com/n8n-io/n8n/issues/11491)) ([565f8cd](https://github.com/n8n-io/n8n/commit/565f8cd8c78b534a50e272997d659d162fa86625)) +* **editor:** Improve workflow loading performance on new canvas ([#11629](https://github.com/n8n-io/n8n/issues/11629)) ([f1e2df7](https://github.com/n8n-io/n8n/commit/f1e2df7d0753aa0f33cf299100a063bf89cc8b35)) +* **editor:** Redesign Canvas Chat ([#11634](https://github.com/n8n-io/n8n/issues/11634)) ([a412ab7](https://github.com/n8n-io/n8n/commit/a412ab7ebfcd6aa9051a8ca36e34f1067102c998)) +* **editor:** Restrict when a ChatTrigger Node is added automatically ([#11523](https://github.com/n8n-io/n8n/issues/11523)) ([93a6f85](https://github.com/n8n-io/n8n/commit/93a6f858fa3eb53f8b48b2a3d6b7377279dd6ed1)) +* Github star button in-app ([#11695](https://github.com/n8n-io/n8n/issues/11695)) ([0fd684d](https://github.com/n8n-io/n8n/commit/0fd684d90c830f8b0aab12b7f78a1fa5619c62c9)) +* **Oura Node:** Update node for v2 api ([#11604](https://github.com/n8n-io/n8n/issues/11604)) ([3348fbb](https://github.com/n8n-io/n8n/commit/3348fbb1547c430ff8707b298640e3461d3f6536)) + + +### Performance Improvements + +* **editor:** Add lint rules for optimization-friendly syntax ([#11681](https://github.com/n8n-io/n8n/issues/11681)) ([88295c7](https://github.com/n8n-io/n8n/commit/88295c70495ae3d017674d5745972a346fcbaf12)) + + + +# [1.67.0](https://github.com/n8n-io/n8n/compare/n8n@1.66.0...n8n@1.67.0) (2024-11-06) + + +### Bug Fixes + +* Bring back nodes panel telemetry events ([#11456](https://github.com/n8n-io/n8n/issues/11456)) ([130c942](https://github.com/n8n-io/n8n/commit/130c942f633788d1b2f937d6fea342d4450c6e3d)) +* **core:** Account for double quotes in instance base URL ([#11495](https://github.com/n8n-io/n8n/issues/11495)) ([c5191e6](https://github.com/n8n-io/n8n/commit/c5191e697a9a9ebfa2b67587cd01b5835ebf6ea8)) +* **core:** Do not delete waiting executions when saving of successful executions is disabled ([#11458](https://github.com/n8n-io/n8n/issues/11458)) ([e8757e5](https://github.com/n8n-io/n8n/commit/e8757e58f69e091ac3d2a2f8e8c8e33ac57c1e47)) +* **core:** Don't send a `executionFinished` event to the browser with no run data if the execution has already been cleaned up ([#11502](https://github.com/n8n-io/n8n/issues/11502)) ([d1153f5](https://github.com/n8n-io/n8n/commit/d1153f51e80911cbc8f34ba5f038f349b75295c3)) +* **core:** Include `projectId` in range query middleware ([#11590](https://github.com/n8n-io/n8n/issues/11590)) ([a6070af](https://github.com/n8n-io/n8n/commit/a6070afdda29631fd36e5213f52bf815268bcda4)) +* **core:** Save exeution progress for waiting executions, even when progress saving is disabled ([#11535](https://github.com/n8n-io/n8n/issues/11535)) ([6b9353c](https://github.com/n8n-io/n8n/commit/6b9353c80f61ab36945fff434d98242dc1cab7b3)) +* **core:** Use the correct docs URL for regular nodes when used as tools ([#11529](https://github.com/n8n-io/n8n/issues/11529)) ([a092b8e](https://github.com/n8n-io/n8n/commit/a092b8e972e1253d92df416f19096a045858e7c1)) +* **Edit Image Node:** Fix Text operation by setting Arial as default font ([#11125](https://github.com/n8n-io/n8n/issues/11125)) ([60c1ace](https://github.com/n8n-io/n8n/commit/60c1ace64be29d651ce7b777fbb576598e38b9d7)) +* **editor:** Auto focus first fields on SignIn, SignUp and ForgotMyPassword views ([#11445](https://github.com/n8n-io/n8n/issues/11445)) ([5b5bd72](https://github.com/n8n-io/n8n/commit/5b5bd7291dde17880b7699f7e6832938599ffd8f)) +* **editor:** Do not overwrite the webhookId in the new canvas ([#11562](https://github.com/n8n-io/n8n/issues/11562)) ([dfd785b](https://github.com/n8n-io/n8n/commit/dfd785bc0894257eb6e62b0dd8f71248c27aae53)) +* **editor:** Ensure Enter key on Cancel button correctly cancels node rename ([#11563](https://github.com/n8n-io/n8n/issues/11563)) ([be05ae3](https://github.com/n8n-io/n8n/commit/be05ae36e7790156cb48b317fc254ae46a3b2d8c)) +* **editor:** Fix emitting `n8nReady` notification via `postmessage` on new canvas ([#11558](https://github.com/n8n-io/n8n/issues/11558)) ([463d101](https://github.com/n8n-io/n8n/commit/463d101f3592e6df4afd66c4d0fde0cb4aec34cc)) +* **editor:** Fix run index input for RunData view in sub-nodes ([#11538](https://github.com/n8n-io/n8n/issues/11538)) ([434d31c](https://github.com/n8n-io/n8n/commit/434d31ce928342d52b6ab8b78639afd7829216d4)) +* **editor:** Fix selected credential being overwritten in NDV ([#11496](https://github.com/n8n-io/n8n/issues/11496)) ([a26c0e2](https://github.com/n8n-io/n8n/commit/a26c0e2c3c7da87bfaba9737a967aa0070810d85)) +* **editor:** Keep workflow pristine after load on new canvas ([#11579](https://github.com/n8n-io/n8n/issues/11579)) ([7254359](https://github.com/n8n-io/n8n/commit/7254359855b89769613cd5cc24dbb4f45a7cc76f)) +* Show Pinned data in demo mode ([#11490](https://github.com/n8n-io/n8n/issues/11490)) ([ca2a583](https://github.com/n8n-io/n8n/commit/ca2a583b5cbb0cba3ecb694261806de16547aa91)) +* Toast not aligned to the bottom when AI assistant disable ([#11549](https://github.com/n8n-io/n8n/issues/11549)) ([e80f7e0](https://github.com/n8n-io/n8n/commit/e80f7e0a02a972379f73af6a44de11768081086e)) + + +### Features + +* Add Rapid7 InsightVm credentials ([#11462](https://github.com/n8n-io/n8n/issues/11462)) ([46eceab](https://github.com/n8n-io/n8n/commit/46eceabc27ac219b11b85c16c533a2cff848c5dd)) +* **AI Transform Node:** UX improvements ([#11280](https://github.com/n8n-io/n8n/issues/11280)) ([8a48407](https://github.com/n8n-io/n8n/commit/8a484077af3d3e1fe2d1b90b1ea9edf4ba41fcb6)) +* **Anthropic Chat Model Node:** Add support for Haiku 3.5 ([#11551](https://github.com/n8n-io/n8n/issues/11551)) ([8b39825](https://github.com/n8n-io/n8n/commit/8b398256a81594a52f20f8eb8adf8ff205209bc1)) +* **Convert to File Node:** Add delimiter convert to csv ([#11556](https://github.com/n8n-io/n8n/issues/11556)) ([63d454b](https://github.com/n8n-io/n8n/commit/63d454b776c092ff8c6c521a7e083774adb8f649)) +* **editor:** Update panning and selection keybindings on new canvas ([#11534](https://github.com/n8n-io/n8n/issues/11534)) ([5e2e205](https://github.com/n8n-io/n8n/commit/5e2e205394adf76faf02aee2d4f21df71848e1d4)) +* **Gmail Trigger Node:** Add filter option to include drafts ([#11441](https://github.com/n8n-io/n8n/issues/11441)) ([7a2be77](https://github.com/n8n-io/n8n/commit/7a2be77f384a32ede3acad8fe24fb89227c058bf)) +* **Intercom Node:** Update credential to new style ([#11485](https://github.com/n8n-io/n8n/issues/11485)) ([b137e13](https://github.com/n8n-io/n8n/commit/b137e13845f0714ebf7421c837f5ab104b66709b)) + + + +# [1.66.0](https://github.com/n8n-io/n8n/compare/n8n@1.65.0...n8n@1.66.0) (2024-10-31) + + +### Bug Fixes + +* **Asana Node:** Fix issue with pagination ([#11415](https://github.com/n8n-io/n8n/issues/11415)) ([04c075a](https://github.com/n8n-io/n8n/commit/04c075a46bcc7b1964397f0244b0fde99476212d)) +* **core:** Add 'user_id' to `license-community-plus-registered` telemetry event ([#11430](https://github.com/n8n-io/n8n/issues/11430)) ([7a8dafe](https://github.com/n8n-io/n8n/commit/7a8dafe9902fbc0d5001c50579c34959b95211ab)) +* **core:** Add safeguard for command publishing ([#11337](https://github.com/n8n-io/n8n/issues/11337)) ([656439e](https://github.com/n8n-io/n8n/commit/656439e87138f9f96dea5a683cfdac3f661ffefb)) +* **core:** Ensure `LoggerProxy` is not scoped ([#11379](https://github.com/n8n-io/n8n/issues/11379)) ([f4ea943](https://github.com/n8n-io/n8n/commit/f4ea943c9cb2321e41705de6c5c27535a0f5eae0)) +* **core:** Ensure `remove-triggers-and-pollers` command is not debounced ([#11486](https://github.com/n8n-io/n8n/issues/11486)) ([529d4fc](https://github.com/n8n-io/n8n/commit/529d4fc3ef5206bd1b02d27634342cc50b45997e)) +* **core:** Ensure job processor does not reprocess amended executions ([#11438](https://github.com/n8n-io/n8n/issues/11438)) ([c152a3a](https://github.com/n8n-io/n8n/commit/c152a3ac56f140a39eea4771a94f5a3082118df7)) +* **core:** Fix Message Event Bus Metrics not counting up for labeled metrics ([#11396](https://github.com/n8n-io/n8n/issues/11396)) ([7fc3b25](https://github.com/n8n-io/n8n/commit/7fc3b25d21c6c4f1802f34b1ae065a65cac3001b)) +* **core:** Fix resolving of $fromAI expression via `evaluateExpression` ([#11397](https://github.com/n8n-io/n8n/issues/11397)) ([2e64464](https://github.com/n8n-io/n8n/commit/2e6446454defbd3e5a47b66e6fd46d4f1b9fbd0f)) +* **core:** Make execution and its data creation atomic ([#11392](https://github.com/n8n-io/n8n/issues/11392)) ([ed30d43](https://github.com/n8n-io/n8n/commit/ed30d43236bf3c6b657022636a02a41be01aa152)) +* **core:** On unhandled rejections, extract the original exception correctly ([#11389](https://github.com/n8n-io/n8n/issues/11389)) ([8608bae](https://github.com/n8n-io/n8n/commit/8608baeb7ec302daddc8adca6e39778dcf7b2eda)) +* **editor:** Fix TypeError: Cannot read properties of undefined (reading '0') ([#11399](https://github.com/n8n-io/n8n/issues/11399)) ([ae37c52](https://github.com/n8n-io/n8n/commit/ae37c520a91c75e353e818944b36a3619c0d8b4a)) +* **editor:** Add Retry button for AI Assistant errors ([#11345](https://github.com/n8n-io/n8n/issues/11345)) ([7699240](https://github.com/n8n-io/n8n/commit/7699240073122cdef31cf109fd37fa66961f588a)) +* **editor:** Change tooltip for workflow with execute workflow trigger ([#11374](https://github.com/n8n-io/n8n/issues/11374)) ([dcd6038](https://github.com/n8n-io/n8n/commit/dcd6038c3085135803cdaa546a239359a6d449eb)) +* **editor:** Ensure toasts show above modal overlays ([#11410](https://github.com/n8n-io/n8n/issues/11410)) ([351134f](https://github.com/n8n-io/n8n/commit/351134f786af933f5f310bf8d9897269387635a0)) +* **editor:** Fit view consistently after nodes are initialized on new canvas ([#11457](https://github.com/n8n-io/n8n/issues/11457)) ([497d637](https://github.com/n8n-io/n8n/commit/497d637fc5308b9c4a06bc764152fde1f1a9c130)) +* **editor:** Fix adding connections when initializing workspace in templates view on new canvas ([#11451](https://github.com/n8n-io/n8n/issues/11451)) ([ea47b02](https://github.com/n8n-io/n8n/commit/ea47b025fb16c967d4fc73dcacc6e260d2aecd61)) +* **editor:** Fix rendering of AI logs ([#11450](https://github.com/n8n-io/n8n/issues/11450)) ([73b0a80](https://github.com/n8n-io/n8n/commit/73b0a80ac92b4f4b5a300d0ec1c833b4395a222a)) +* **editor:** Hide data mapping tooltip in credential edit modal ([#11356](https://github.com/n8n-io/n8n/issues/11356)) ([ff14dcb](https://github.com/n8n-io/n8n/commit/ff14dcb3a1ddaea4eca7c1ecd2e92c0abb0c413c)) +* **editor:** Prevent running workflow that has issues if listening to webhook ([#11402](https://github.com/n8n-io/n8n/issues/11402)) ([8b0a48f](https://github.com/n8n-io/n8n/commit/8b0a48f53010378e497e4cc362fda75a958cf363)) +* **editor:** Run external hooks after settings have been initialized ([#11423](https://github.com/n8n-io/n8n/issues/11423)) ([0ab24c8](https://github.com/n8n-io/n8n/commit/0ab24c814abd1787268750ba808993ab2735ac52)) +* **editor:** Support middle click to scroll when using a mouse on new canvas ([#11384](https://github.com/n8n-io/n8n/issues/11384)) ([46f3b4a](https://github.com/n8n-io/n8n/commit/46f3b4a258f89f02e0d2bd1eef25a22e3a721167)) +* **HTTP Request Tool Node:** Fix HTML response optimization issue ([#11439](https://github.com/n8n-io/n8n/issues/11439)) ([cf37e94](https://github.com/n8n-io/n8n/commit/cf37e94dd875e9f6ab1f189146fb34e7296af93c)) +* **n8n Form Node:** Form Trigger does not wait in multi-form mode ([#11404](https://github.com/n8n-io/n8n/issues/11404)) ([151f4dd](https://github.com/n8n-io/n8n/commit/151f4dd7b8f800af424f8ae64cb8238975fb3cb8)) +* Update required node js version in CONTRIBUTING.md ([#11437](https://github.com/n8n-io/n8n/issues/11437)) ([4f511aa](https://github.com/n8n-io/n8n/commit/4f511aab68651caa8fe47f70cd7cdb88bb06a3e2)) + + +### Features + +* **Anthropic Chat Model Node:** Add model claude-3-5-sonnet-20241022 ([#11465](https://github.com/n8n-io/n8n/issues/11465)) ([f6c8890](https://github.com/n8n-io/n8n/commit/f6c8890a8069de221b9b96e735418ecc9624cf7b)) +* **core:** Handle nodes with multiple inputs and connections during partial executions ([#11376](https://github.com/n8n-io/n8n/issues/11376)) ([cb7c4d2](https://github.com/n8n-io/n8n/commit/cb7c4d29a6f042b590822e5b9c67fff0a8f0863d)) +* **editor:** Add descriptive header to projects /workflow ([#11203](https://github.com/n8n-io/n8n/issues/11203)) ([5d19e8f](https://github.com/n8n-io/n8n/commit/5d19e8f2b45dc1abc5a8253f9e3a0fdacb1ebd91)) +* **editor:** Improve placeholder for vector store tool ([#11483](https://github.com/n8n-io/n8n/issues/11483)) ([629e092](https://github.com/n8n-io/n8n/commit/629e09240785bc648ff6575f97910fbb4e77cdab)) +* **editor:** Remove edge execution animation on new canvas ([#11446](https://github.com/n8n-io/n8n/issues/11446)) ([a701d87](https://github.com/n8n-io/n8n/commit/a701d87f5ba94ffc811e424b60e188b26ac6c1c5)) +* **editor:** Update ownership pills ([#11155](https://github.com/n8n-io/n8n/issues/11155)) ([8147038](https://github.com/n8n-io/n8n/commit/8147038cf87dca657602e617e49698065bf1a63f)) + + + +# [1.65.0](https://github.com/n8n-io/n8n/compare/n8n@1.64.0...n8n@1.65.0) (2024-10-24) + + +### Bug Fixes + +* **AI Agent Node:** Preserve `intermediateSteps` when using output parser with non-tool agent ([#11363](https://github.com/n8n-io/n8n/issues/11363)) ([e61a853](https://github.com/n8n-io/n8n/commit/e61a8535aa39653b9a87575ea911a65318282167)) +* **API:** `PUT /credentials/:id` should move the specified credential, not the first one in the database ([#11365](https://github.com/n8n-io/n8n/issues/11365)) ([e6b2f8e](https://github.com/n8n-io/n8n/commit/e6b2f8e7e6ebbb6e3776a976297d519e99ac6c64)) +* **API:** Correct credential schema for response in `POST /credentials` ([#11340](https://github.com/n8n-io/n8n/issues/11340)) ([f495875](https://github.com/n8n-io/n8n/commit/f4958756b4976e0b608b9155dab84564f7e8804e)) +* **core:** Account for waiting jobs during shutdown ([#11338](https://github.com/n8n-io/n8n/issues/11338)) ([c863abd](https://github.com/n8n-io/n8n/commit/c863abd08300b53ea898fc4d06aae97dec7afa9b)) +* **core:** Add missing primary key to execution annotation tags table ([#11168](https://github.com/n8n-io/n8n/issues/11168)) ([b4b543d](https://github.com/n8n-io/n8n/commit/b4b543d41daa07753eca24ab93bf7445f672361d)) +* **core:** Change dedupe value column type from varchar(255) to text ([#11357](https://github.com/n8n-io/n8n/issues/11357)) ([7a71cff](https://github.com/n8n-io/n8n/commit/7a71cff4d75fe4e7282a398b4843428e0161ba8c)) +* **core:** Do not debounce webhooks, triggers and pollers activation ([#11306](https://github.com/n8n-io/n8n/issues/11306)) ([64bddf8](https://github.com/n8n-io/n8n/commit/64bddf86536ddd688638a643d24f80c947a12f31)) +* **core:** Enforce nodejs version consistently ([#11323](https://github.com/n8n-io/n8n/issues/11323)) ([0fa2e8c](https://github.com/n8n-io/n8n/commit/0fa2e8ca85005362d9043d82469f3c3525f4c4ef)) +* **core:** Fix memory issue with empty model response ([#11300](https://github.com/n8n-io/n8n/issues/11300)) ([216b119](https://github.com/n8n-io/n8n/commit/216b119350949de70f15cf2d61f474770803ad7a)) +* **core:** Fix race condition when resolving post-execute promise ([#11360](https://github.com/n8n-io/n8n/issues/11360)) ([4f1816e](https://github.com/n8n-io/n8n/commit/4f1816e03db00219bc2e723e3048848aef7f8fe1)) +* **core:** Sanitise IdP provided information in SAML test pages ([#11171](https://github.com/n8n-io/n8n/issues/11171)) ([74fc388](https://github.com/n8n-io/n8n/commit/74fc3889b946e8f224e65ef8d3d44125404aa4fc)) +* Don't show pin button in input panel when there's binary data ([#11267](https://github.com/n8n-io/n8n/issues/11267)) ([c0b5b92](https://github.com/n8n-io/n8n/commit/c0b5b92f62a2d7ba60492eb27daced268b654fe9)) +* **editor:** Add Personal project to main navigation ([#11161](https://github.com/n8n-io/n8n/issues/11161)) ([1f441f9](https://github.com/n8n-io/n8n/commit/1f441f97528f58e905eaf8930577bbcd08debf06)) +* **editor:** Fix Cannot read properties of undefined (reading 'finished') ([#11367](https://github.com/n8n-io/n8n/issues/11367)) ([475d72e](https://github.com/n8n-io/n8n/commit/475d72e0bc9e13c6dc56129902f6f89c67547f78)) +* **editor:** Fix delete all existing executions ([#11352](https://github.com/n8n-io/n8n/issues/11352)) ([3ec103f](https://github.com/n8n-io/n8n/commit/3ec103f8baaa89e579844947d945f00bec9e498e)) +* **editor:** Fix pin data button disappearing after reload ([#11198](https://github.com/n8n-io/n8n/issues/11198)) ([3b2f63e](https://github.com/n8n-io/n8n/commit/3b2f63e248cd0cba04087e2f40e13d670073707d)) +* **editor:** Fix RunData non-binary pagination when binary data is present ([#11309](https://github.com/n8n-io/n8n/issues/11309)) ([901888d](https://github.com/n8n-io/n8n/commit/901888d5b1027098653540c72f787f176941f35a)) +* **editor:** Fix sorting problem in older browsers that don't support `toSorted` ([#11204](https://github.com/n8n-io/n8n/issues/11204)) ([c728a2f](https://github.com/n8n-io/n8n/commit/c728a2ffe01f510a237979a54897c4680a407800)) +* **editor:** Follow-up fixes to projects side menu ([#11327](https://github.com/n8n-io/n8n/issues/11327)) ([4dde772](https://github.com/n8n-io/n8n/commit/4dde772814c55e66efcc9b369ae443328af21b14)) +* **editor:** Keep always focus on the first item on the node's search panel ([#11193](https://github.com/n8n-io/n8n/issues/11193)) ([c57cac9](https://github.com/n8n-io/n8n/commit/c57cac9e4d447c3a4240a565f9f2de8aa3b7c513)) +* **editor:** Open Community+ enrollment modal only for the instance owner ([#11292](https://github.com/n8n-io/n8n/issues/11292)) ([76724c3](https://github.com/n8n-io/n8n/commit/76724c3be6e001792433045c2b2aac0ef16d4b8a)) +* **editor:** Record sessionStarted telemetry event in Setting Store ([#11334](https://github.com/n8n-io/n8n/issues/11334)) ([1b734dd](https://github.com/n8n-io/n8n/commit/1b734dd9f42885594ce02400cfb395a4f5e7e088)) +* Ensure NDV params don't get cut off early and scrolled to the top ([#11252](https://github.com/n8n-io/n8n/issues/11252)) ([054fe97](https://github.com/n8n-io/n8n/commit/054fe9745ff6864f9088aa4cd66ed9e7869520d5)) +* **HTTP Request Tool Node:** Fix the undefined response issue when authentication is enabled ([#11343](https://github.com/n8n-io/n8n/issues/11343)) ([094ec68](https://github.com/n8n-io/n8n/commit/094ec68d4c00848013aa4eec4ac5efbd2c92afc5)) +* Include error in the message in JS task runner sandbox ([#11359](https://github.com/n8n-io/n8n/issues/11359)) ([0708b3a](https://github.com/n8n-io/n8n/commit/0708b3a1f8097af829c92fe106ea6ba375d6c500)) +* **Microsoft SQL Node:** Fix execute query to allow for non select query to run ([#11335](https://github.com/n8n-io/n8n/issues/11335)) ([ba158b4](https://github.com/n8n-io/n8n/commit/ba158b4f8533bd3430db8766d4921f75db5c1a11)) +* **OpenAI Chat Model Node, Ollama Chat Model Node:** Change default model to a more up-to-date option ([#11293](https://github.com/n8n-io/n8n/issues/11293)) ([0be04c6](https://github.com/n8n-io/n8n/commit/0be04c6348d8c059a96c3d37a6d6cd587bfb97f3)) +* **Pinecone Vector Store Node:** Prevent populating of vectors after manually stopping the execution ([#11288](https://github.com/n8n-io/n8n/issues/11288)) ([fbae17d](https://github.com/n8n-io/n8n/commit/fbae17d8fb35a5197fa183e3639bb36762dc73d2)) +* **Postgres Node:** Special datetime values cause errors ([#11225](https://github.com/n8n-io/n8n/issues/11225)) ([3c57f46](https://github.com/n8n-io/n8n/commit/3c57f46aaeb968d2974f2dc9790317a6a6fab624)) +* Resend invite operation on users list ([#11351](https://github.com/n8n-io/n8n/issues/11351)) ([e4218de](https://github.com/n8n-io/n8n/commit/e4218debd18812fa3aa508339afd3de03c4d69dc)) +* **SSH Node:** Cleanup temporary binary files as soon as possible ([#11305](https://github.com/n8n-io/n8n/issues/11305)) ([08a7b5b](https://github.com/n8n-io/n8n/commit/08a7b5b7425663ec6593114921c2e22ab37d039e)) + + +### Features + +* Add report bug buttons ([#11304](https://github.com/n8n-io/n8n/issues/11304)) ([296f68f](https://github.com/n8n-io/n8n/commit/296f68f041b93fd32ac7be2b53c2b41d58c2998a)) +* **AI Agent Node:** Make tools optional when using OpenAI model with Tools agent ([#11212](https://github.com/n8n-io/n8n/issues/11212)) ([fed7c3e](https://github.com/n8n-io/n8n/commit/fed7c3ec1fb0553adaa9a933f91aabfd54fe83a3)) +* **core:** introduce JWT API keys for the public API ([#11005](https://github.com/n8n-io/n8n/issues/11005)) ([679fa4a](https://github.com/n8n-io/n8n/commit/679fa4a10a85fc96e12ca66fe12cdb32368bc12b)) +* **core:** Enforce config file permissions on startup ([#11328](https://github.com/n8n-io/n8n/issues/11328)) ([c078a51](https://github.com/n8n-io/n8n/commit/c078a516bec857831cc904ef807d0791b889f3a2)) +* **core:** Handle cycles in workflows when partially executing them ([#11187](https://github.com/n8n-io/n8n/issues/11187)) ([321d6de](https://github.com/n8n-io/n8n/commit/321d6deef18806d88d97afef2f2c6f29e739ccb4)) +* **editor:** Separate node output execution tooltip from status icon ([#11196](https://github.com/n8n-io/n8n/issues/11196)) ([cd15e95](https://github.com/n8n-io/n8n/commit/cd15e959c7af82a7d8c682e94add2b2640624a70)) +* **GitHub Node:** Add workflow resource operations ([#10744](https://github.com/n8n-io/n8n/issues/10744)) ([d309112](https://github.com/n8n-io/n8n/commit/d3091126472faa2c8f270650e54027d19dc56bb6)) +* **n8n Form Page Node:** New node ([#10390](https://github.com/n8n-io/n8n/issues/10390)) ([643d66c](https://github.com/n8n-io/n8n/commit/643d66c0ae084a0d93dac652703adc0a32cab8de)) +* **n8n Google My Business Node:** New node ([#10504](https://github.com/n8n-io/n8n/issues/10504)) ([bf28fbe](https://github.com/n8n-io/n8n/commit/bf28fbefe5e8ba648cba1555a2d396b75ee32bbb)) +* Run `mfa.beforeSetup` hook before enabling MFA ([#11116](https://github.com/n8n-io/n8n/issues/11116)) ([25c1c32](https://github.com/n8n-io/n8n/commit/25c1c3218cf1075ca3abd961236f3b2fbd9d6ba9)) +* **Structured Output Parser Node:** Refactor Output Parsers and Improve Error Handling ([#11148](https://github.com/n8n-io/n8n/issues/11148)) ([45274f2](https://github.com/n8n-io/n8n/commit/45274f2e7f081e194e330e1c9e6a5c26fca0b141)) + + + +# [1.64.0](https://github.com/n8n-io/n8n/compare/n8n@1.63.0...n8n@1.64.0) (2024-10-16) + + +### Bug Fixes + +* Adjust arrow button colors in dark mode ([#11248](https://github.com/n8n-io/n8n/issues/11248)) ([439132c](https://github.com/n8n-io/n8n/commit/439132c291a812d57702c94eaa12878394ac4c69)) +* **core:** Ensure error reporter does not promote `info` to `error` messages ([#11245](https://github.com/n8n-io/n8n/issues/11245)) ([a7fc7fc](https://github.com/n8n-io/n8n/commit/a7fc7fc22997acec86dc94386c95349fd018f4ae)) +* **core:** Override executions mode if `regular` during worker startup ([#11250](https://github.com/n8n-io/n8n/issues/11250)) ([c0aa28c](https://github.com/n8n-io/n8n/commit/c0aa28c6cf3f77b04e04663217c9df8e3803ed3f)) +* **core:** Wrap nodes for tool use at a suitable time ([#11238](https://github.com/n8n-io/n8n/issues/11238)) ([c2fb881](https://github.com/n8n-io/n8n/commit/c2fb881d61291209802438d95892d052f5c82d43)) +* Don't show pinned data tooltip for pinned nodes ([#11249](https://github.com/n8n-io/n8n/issues/11249)) ([c2ad156](https://github.com/n8n-io/n8n/commit/c2ad15646d326a8f71e314d54efe202a5bcdd296)) +* **editor:** Bring back the "Forgot password" link on SigninView ([#11216](https://github.com/n8n-io/n8n/issues/11216)) ([4e78c46](https://github.com/n8n-io/n8n/commit/4e78c46a7450c7fc0694369944d4fb446cef2348)) +* **editor:** Fix chat crashing when rendering output-parsed content ([#11210](https://github.com/n8n-io/n8n/issues/11210)) ([4aaebfd](https://github.com/n8n-io/n8n/commit/4aaebfd4358f590e98c453ad4e65cc2c9d0f76f8)) +* **editor:** Make submit in ChangePasswordView work again ([#11227](https://github.com/n8n-io/n8n/issues/11227)) ([4f27b39](https://github.com/n8n-io/n8n/commit/4f27b39b45b58779d363980241e6e5e11b58f5da)) +* Expressions display actual result of evaluating expression inside string ([#11257](https://github.com/n8n-io/n8n/issues/11257)) ([7f5f0a9](https://github.com/n8n-io/n8n/commit/7f5f0a9df3b3fae6e2f9787443ac1cf9415d5932)) +* **Google Ads Node:** Update to use v17 api ([#11243](https://github.com/n8n-io/n8n/issues/11243)) ([3d97f02](https://github.com/n8n-io/n8n/commit/3d97f02a8d2b6e5bc7c97c5271bed97417ecacd2)) +* **Google Calendar Node:** Fix issue with conference data types not loading ([#11185](https://github.com/n8n-io/n8n/issues/11185)) ([4012758](https://github.com/n8n-io/n8n/commit/401275884e5db0287e4eeffb3c7497dd5e024880)) +* **Google Calendar Node:** Mode to add or replace attendees in event update ([#11132](https://github.com/n8n-io/n8n/issues/11132)) ([6c6a8ef](https://github.com/n8n-io/n8n/commit/6c6a8efdea83cf7194304ce089d7b72d8f6c1a9d)) +* **HTTP Request Tool Node:** Respond with an error when receive binary response ([#11219](https://github.com/n8n-io/n8n/issues/11219)) ([0d23a7f](https://github.com/n8n-io/n8n/commit/0d23a7fb5ba41545f70c4848d30b90af91b1e7e6)) +* **MySQL Node:** Fix "Maximum call stack size exceeded" error when handling a large number of rows ([#11242](https://github.com/n8n-io/n8n/issues/11242)) ([b7ee0c4](https://github.com/n8n-io/n8n/commit/b7ee0c4087eae346bc7e5360130d6c812dbe99db)) +* **n8n Trigger Node:** Merge with Workflow Trigger node ([#11174](https://github.com/n8n-io/n8n/issues/11174)) ([6ec6b51](https://github.com/n8n-io/n8n/commit/6ec6b5197ae97eb86496effd458fcc0b9b223ef3)) +* **OpenAI Node:** Fix tool parameter parsing issue ([#11201](https://github.com/n8n-io/n8n/issues/11201)) ([5a1d81a](https://github.com/n8n-io/n8n/commit/5a1d81ad917fde5cd6a387fe2d4ec6aab6b71349)) +* **Set Node:** Fix issue with UI properties not being hidden ([#11263](https://github.com/n8n-io/n8n/issues/11263)) ([1affc27](https://github.com/n8n-io/n8n/commit/1affc27b6bf9a559061a06f92bebe8167d938665)) +* **Strava Trigger Node:** Fix issue with webhook not being deleted ([#11226](https://github.com/n8n-io/n8n/issues/11226)) ([566529c](https://github.com/n8n-io/n8n/commit/566529ca1149988a54a58b3c34bbe4d9f1add6db)) + + +### Features + +* Add tracking for node errors and update node graph ([#11060](https://github.com/n8n-io/n8n/issues/11060)) ([d3b05f1](https://github.com/n8n-io/n8n/commit/d3b05f1c54e62440666297d8e484ccd22168da48)) +* **core:** Dedupe ([#10101](https://github.com/n8n-io/n8n/issues/10101)) ([52dd2c7](https://github.com/n8n-io/n8n/commit/52dd2c76196c6895b47145c2b85a6895ce2874d4)) +* **editor:** Send workflow context to assistant store ([#11135](https://github.com/n8n-io/n8n/issues/11135)) ([fade9e4](https://github.com/n8n-io/n8n/commit/fade9e43c84a0ae1fbc80f3ee546a418970e2380)) +* **Gong Node:** New node ([#10777](https://github.com/n8n-io/n8n/issues/10777)) ([785b47f](https://github.com/n8n-io/n8n/commit/785b47feb3b83cf36aaed57123f8baca2bbab307)) + + +### Performance Improvements + +* **Google Sheets Node:** Don't load whole spreadsheet dataset to determine columns when appending data ([#11235](https://github.com/n8n-io/n8n/issues/11235)) ([26ad091](https://github.com/n8n-io/n8n/commit/26ad091f473bca4e5d3bdc257e0818be02e52db5)) + + + +# [1.63.0](https://github.com/n8n-io/n8n/compare/n8n@1.62.1...n8n@1.63.0) (2024-10-09) + + +### Bug Fixes + +* **Convert to File Node:** Convert to ICS start date defaults to now ([#11114](https://github.com/n8n-io/n8n/issues/11114)) ([1146c4e](https://github.com/n8n-io/n8n/commit/1146c4e98d8c85c15ac67fa1c3bfb731234531e3)) +* **core:** Allow loading nodes from multiple custom directories ([#11130](https://github.com/n8n-io/n8n/issues/11130)) ([1b84b0e](https://github.com/n8n-io/n8n/commit/1b84b0e5e7485d9f99d61a8ae3df49efadca0745)) +* **core:** Always set `startedAt` when executions start running ([#11098](https://github.com/n8n-io/n8n/issues/11098)) ([722f4a8](https://github.com/n8n-io/n8n/commit/722f4a8b771058800b992a482ad5f644b650960d)) +* **core:** Fix AI nodes not working with new partial execution flow ([#11055](https://github.com/n8n-io/n8n/issues/11055)) ([0eee5df](https://github.com/n8n-io/n8n/commit/0eee5dfd597817819dbe0463a63f671fde53432f)) +* **core:** Print errors that happen before the execution starts on the worker instead of just on the main instance ([#11099](https://github.com/n8n-io/n8n/issues/11099)) ([1d14557](https://github.com/n8n-io/n8n/commit/1d145574611661ecd9ab1a39d815c0ea915b9a1c)) +* **core:** Separate error handlers for main and worker ([#11091](https://github.com/n8n-io/n8n/issues/11091)) ([bb59cc7](https://github.com/n8n-io/n8n/commit/bb59cc71acc9e494e54abc8402d58db39e5a664e)) +* **editor:** Shorten overflowing Node Label in InputLabels on hover and focus ([#11110](https://github.com/n8n-io/n8n/issues/11110)) ([87a0b68](https://github.com/n8n-io/n8n/commit/87a0b68f9009c1c776d937c6ca62096e88c95ed6)) +* **editor:** Add safety to prevent undefined errors ([#11104](https://github.com/n8n-io/n8n/issues/11104)) ([565b117](https://github.com/n8n-io/n8n/commit/565b117a52f8eac9202a1a62c43daf78b293dcf8)) +* **editor:** Fix design system form element sizing ([#11040](https://github.com/n8n-io/n8n/issues/11040)) ([67c3453](https://github.com/n8n-io/n8n/commit/67c3453885bc619fedc8338a6dd0d8d66dead931)) +* **editor:** Fix getInitials when Intl.Segmenter is not supported ([#11103](https://github.com/n8n-io/n8n/issues/11103)) ([7e8955b](https://github.com/n8n-io/n8n/commit/7e8955b322b1d2c84c0f479a5977484d8d5e3135)) +* **editor:** Fix schema view in AI tools ([#11089](https://github.com/n8n-io/n8n/issues/11089)) ([09cfdbd](https://github.com/n8n-io/n8n/commit/09cfdbd1817eba46c935308880fe9f95ded252b0)) +* **editor:** Respect tag querystring filter when listing workflows ([#11029](https://github.com/n8n-io/n8n/issues/11029)) ([59c5ff6](https://github.com/n8n-io/n8n/commit/59c5ff61354302562ba5a2340c66811afdd1523b)) +* **editor:** Show previous nodes autocomplete in AI tool nodes ([#11111](https://github.com/n8n-io/n8n/issues/11111)) ([8566b3a](https://github.com/n8n-io/n8n/commit/8566b3a99939f45ac263830eee30d0d4ade9305c)) +* **editor:** Update Usage page for Community+ edition ([#11074](https://github.com/n8n-io/n8n/issues/11074)) ([3974981](https://github.com/n8n-io/n8n/commit/3974981ea5c67f6f2bbb90a96b405d9d0cfa21af)) +* Fix transaction handling for 'revert' command ([#11145](https://github.com/n8n-io/n8n/issues/11145)) ([a782336](https://github.com/n8n-io/n8n/commit/a7823367f13c3dba0c339eaafaad0199bd524b13)) +* Forbid access to files outside source control work directory ([#11152](https://github.com/n8n-io/n8n/issues/11152)) ([606eedb](https://github.com/n8n-io/n8n/commit/606eedbf1b302e153bd13b7cef80847711e3a9ee)) +* **Gitlab Node:** Author name and email not being set ([#11077](https://github.com/n8n-io/n8n/issues/11077)) ([fce1233](https://github.com/n8n-io/n8n/commit/fce1233b58624d502c9c68f4b32a4bb7d76f1814)) +* Incorrect error message on calling wrong webhook method ([#11093](https://github.com/n8n-io/n8n/issues/11093)) ([d974b01](https://github.com/n8n-io/n8n/commit/d974b015d030c608158ff0c3fa3b7f4cbb8eadd3)) +* **n8n Form Trigger Node:** When clicking on a multiple choice label, the wrong one is selected ([#11059](https://github.com/n8n-io/n8n/issues/11059)) ([948edd1](https://github.com/n8n-io/n8n/commit/948edd1a047cf3dbddb3b0e9ec5de4bac3e97b9f)) +* **NASA Node:** Astronomy-Picture-Of-The-Day fails when it's YouTube video ([#11046](https://github.com/n8n-io/n8n/issues/11046)) ([c70969d](https://github.com/n8n-io/n8n/commit/c70969da2bcabeb33394073a69ccef208311461b)) +* **Postgres PGVector Store Node:** Fix filtering in retriever mode ([#11075](https://github.com/n8n-io/n8n/issues/11075)) ([dbd2ae1](https://github.com/n8n-io/n8n/commit/dbd2ae199506a24c2df4c983111a56f2adf63eee)) +* Show result of waiting execution on canvas after execution complete ([#10815](https://github.com/n8n-io/n8n/issues/10815)) ([90b4bfc](https://github.com/n8n-io/n8n/commit/90b4bfc472ef132d2280b175ae7410dfb8e549b2)) +* **Slack Node:** User id not sent correctly to API when updating user profile ([#11153](https://github.com/n8n-io/n8n/issues/11153)) ([ed9e61c](https://github.com/n8n-io/n8n/commit/ed9e61c46055d8e636a70c9c175d7d4ba596dd48)) + + +### Features + +* **core:** Introduce scoped logging ([#11127](https://github.com/n8n-io/n8n/issues/11127)) ([c68782c](https://github.com/n8n-io/n8n/commit/c68782c633b7ef6253ea705c5a222d4536491fd5)) +* **editor:** Add navigation dropdown component ([#11047](https://github.com/n8n-io/n8n/issues/11047)) ([e081fd1](https://github.com/n8n-io/n8n/commit/e081fd1f0b5a0700017a8dc92f013f0abdbad319)) +* **editor:** Add route for create / edit / share credentials ([#11134](https://github.com/n8n-io/n8n/issues/11134)) ([5697de4](https://github.com/n8n-io/n8n/commit/5697de4429c5d94f25ce1bd14c84fb4266ea47a7)) +* **editor:** Community+ enrollment ([#10776](https://github.com/n8n-io/n8n/issues/10776)) ([92cf860](https://github.com/n8n-io/n8n/commit/92cf860f9f2994442facfddc758bc60f5cbec520)) +* Human in the loop ([#10675](https://github.com/n8n-io/n8n/issues/10675)) ([41228b4](https://github.com/n8n-io/n8n/commit/41228b472de11affc8cd0821284427c2c9e8b421)) +* **OpenAI Node:** Allow to specify thread ID for Assistant -> Message operation ([#11080](https://github.com/n8n-io/n8n/issues/11080)) ([6a2f9e7](https://github.com/n8n-io/n8n/commit/6a2f9e72959fb0e89006b69c31fbcee1ead1cde9)) +* Opt in to additional features on community for existing users ([#11166](https://github.com/n8n-io/n8n/issues/11166)) ([c2adfc8](https://github.com/n8n-io/n8n/commit/c2adfc85451c5103eaad068f882066fd36c4aebe)) + + +### Performance Improvements + +* **core:** Optimize worker healthchecks ([#11092](https://github.com/n8n-io/n8n/issues/11092)) ([19fb728](https://github.com/n8n-io/n8n/commit/19fb728da0839c57603e55da4e407715e6c5b081)) + + + +## [1.62.1](https://github.com/n8n-io/n8n/compare/n8n@1.61.0...n8n@1.62.1) (2024-10-02) + + +### Bug Fixes + +* **AI Agent Node:** Fix output parsing and empty tool input handling in AI Agent node ([#10970](https://github.com/n8n-io/n8n/issues/10970)) ([3a65bdc](https://github.com/n8n-io/n8n/commit/3a65bdc1f522932d463b4da0e67d29076887d06c)) +* **API:** Fix workflow project transfer ([#10651](https://github.com/n8n-io/n8n/issues/10651)) ([5f89e3a](https://github.com/n8n-io/n8n/commit/5f89e3a01c1bbb3589ff0464fd5bc991426f55dc)) +* **AwsS3 Node:** Fix search only using first input parameters ([#10998](https://github.com/n8n-io/n8n/issues/10998)) ([846cfde](https://github.com/n8n-io/n8n/commit/846cfde8dcaf7bf80f0a4ca7d65fc2a7b61d0e23)) +* **Chat Trigger Node:** Fix Allowed Origins paramter ([#11011](https://github.com/n8n-io/n8n/issues/11011)) ([b5f4afe](https://github.com/n8n-io/n8n/commit/b5f4afe12ec77f527080a4b7f812e12f9f73f8df)) +* **core:** Fix ownerless project case in statistics service ([#11051](https://github.com/n8n-io/n8n/issues/11051)) ([bdaadf1](https://github.com/n8n-io/n8n/commit/bdaadf10e058e2c0b1141289189d6526c030a2ca)) +* **core:** Handle Redis disconnects gracefully ([#11007](https://github.com/n8n-io/n8n/issues/11007)) ([cd91648](https://github.com/n8n-io/n8n/commit/cd916480c2d2b55f2215c72309dc432340fc3f30)) +* **core:** Prevent backend from loading duplicate copies of nodes packages ([#10979](https://github.com/n8n-io/n8n/issues/10979)) ([4584f22](https://github.com/n8n-io/n8n/commit/4584f22a9b16883779d8555cda309fd8bd113f6c)) +* **core:** Upgrade @n8n/typeorm to address a rare mutex release issue ([#10993](https://github.com/n8n-io/n8n/issues/10993)) ([2af0fbf](https://github.com/n8n-io/n8n/commit/2af0fbf52f0b404697f5148f81ad0035c9ffb6b9)) +* **editor:** Allow resources to move between personal and team projects ([#10683](https://github.com/n8n-io/n8n/issues/10683)) ([136d491](https://github.com/n8n-io/n8n/commit/136d49132567558b7d27069c857c0e0bfee70ce2)) +* **editor:** Color scheme for a markdown code blocks in dark mode ([#11008](https://github.com/n8n-io/n8n/issues/11008)) ([b20d2eb](https://github.com/n8n-io/n8n/commit/b20d2eb403f71fe1dc21c92df118adcebef51ffe)) +* **editor:** Fix filter execution by "Queued" ([#10987](https://github.com/n8n-io/n8n/issues/10987)) ([819d20f](https://github.com/n8n-io/n8n/commit/819d20fa2eee314b88a7ce1c4db632afac514704)) +* **editor:** Fix performance issue in credentials list ([#10988](https://github.com/n8n-io/n8n/issues/10988)) ([7073ec6](https://github.com/n8n-io/n8n/commit/7073ec6fe5384cc8c50dcb242212999a1fbc9041)) +* **editor:** Fix schema view pill highlighting ([#10936](https://github.com/n8n-io/n8n/issues/10936)) ([1b973dc](https://github.com/n8n-io/n8n/commit/1b973dcd8dbce598e6ada490fd48fad52f7b4f3a)) +* **editor:** Fix workflow executions list page redirection ([#10981](https://github.com/n8n-io/n8n/issues/10981)) ([fe7d060](https://github.com/n8n-io/n8n/commit/fe7d0605681dc963f5e5d1607f9d40c5173e0f9f)) +* **editor:** Format action names properly when action is not defined ([#11030](https://github.com/n8n-io/n8n/issues/11030)) ([9c43fb3](https://github.com/n8n-io/n8n/commit/9c43fb301d1ccb82e42f46833e19587289803cd3)) +* **Elasticsearch Node:** Fix issue with self signed certificates not working ([#10954](https://github.com/n8n-io/n8n/issues/10954)) ([79622b5](https://github.com/n8n-io/n8n/commit/79622b5f267f2a4a53f3eb48e228939d6e3a9caa)) +* **Facebook Lead Ads Trigger Node:** Pagination fix in RLC ([#10956](https://github.com/n8n-io/n8n/issues/10956)) ([6322372](https://github.com/n8n-io/n8n/commit/632237261087ada0177b67922f9f48ca02ef1d9e)) +* **Github Document Loader Node:** Pass through apiUrl from credentials & fix log output ([#11049](https://github.com/n8n-io/n8n/issues/11049)) ([a7af981](https://github.com/n8n-io/n8n/commit/a7af98183c47a5e215869c8269729b0fb2f318b5)) +* **Google Sheets Node:** Updating on row_number using automatic matching ([#10940](https://github.com/n8n-io/n8n/issues/10940)) ([ed91495](https://github.com/n8n-io/n8n/commit/ed91495ebc1e09b89533ffef4b775eaa0139f365)) +* **HTTP Request Tool Node:** Remove default user agent header ([#10971](https://github.com/n8n-io/n8n/issues/10971)) ([5a99e93](https://github.com/n8n-io/n8n/commit/5a99e93f8d2c66d7dbcef382478badd63bc4a0b5)) +* **Postgres Node:** Falsy query parameters ignored ([#10960](https://github.com/n8n-io/n8n/issues/10960)) ([4a63cff](https://github.com/n8n-io/n8n/commit/4a63cff5ec722c810e3ff2bd7b0bb1e32f7f403b)) +* **Respond to Webhook Node:** Node does not work with Wait node ([#10992](https://github.com/n8n-io/n8n/issues/10992)) ([2df5a5b](https://github.com/n8n-io/n8n/commit/2df5a5b649f8ba3b747782d6d5045820aa74955d)) +* **RSS Feed Trigger Node:** Fix regression on missing timestamps ([#10991](https://github.com/n8n-io/n8n/issues/10991)) ([d2bc076](https://github.com/n8n-io/n8n/commit/d2bc0760e2b5c977fcc683f0a0281f099a9c538d)) +* **Supabase Node:** Fix issue with delete not always working ([#10952](https://github.com/n8n-io/n8n/issues/10952)) ([1944b46](https://github.com/n8n-io/n8n/commit/1944b46fd472bb59552b5fbf7783168a622a2bd2)) +* **Text Classifier Node:** Default system prompt template ([#11018](https://github.com/n8n-io/n8n/issues/11018)) ([77fec19](https://github.com/n8n-io/n8n/commit/77fec195d92e0fe23c60552a72e8c030cf7e5e5c)) +* **Todoist Node:** Fix listSearch filter bug in Todoist Node ([#10989](https://github.com/n8n-io/n8n/issues/10989)) ([c4b3272](https://github.com/n8n-io/n8n/commit/c4b327248d7aa1352e8d6acec5627ff406aea3d4)) +* **Todoist Node:** Make Section Name optional in Move Task operation ([#10732](https://github.com/n8n-io/n8n/issues/10732)) ([799006a](https://github.com/n8n-io/n8n/commit/799006a3cce6abe210469c839ae392d0c1aec486)) + + +### Features + +* Add more context to support chat ([#11014](https://github.com/n8n-io/n8n/issues/11014)) ([8a30f92](https://github.com/n8n-io/n8n/commit/8a30f92156d6a4fe73113bd3cdfb751b8c9ce4b4)) +* Add Sysdig API credentials for SecOps ([#7033](https://github.com/n8n-io/n8n/issues/7033)) ([a8d1a1e](https://github.com/n8n-io/n8n/commit/a8d1a1ea854fb2c69643b0a5738440b389121ca3)) +* **core:** Filter executions by project ID in internal API ([#10976](https://github.com/n8n-io/n8n/issues/10976)) ([06d749f](https://github.com/n8n-io/n8n/commit/06d749ffa7ced503141d8b07e22c47d971eb1623)) +* **core:** Implement Dynamic Parameters within regular nodes used as AI Tools ([#10862](https://github.com/n8n-io/n8n/issues/10862)) ([ef5b7cf](https://github.com/n8n-io/n8n/commit/ef5b7cf9b77b653111eb5b1d9de8116c9f6b9f92)) +* **editor:** Do not show error for remote options when credentials aren't specified ([#10944](https://github.com/n8n-io/n8n/issues/10944)) ([9fc3699](https://github.com/n8n-io/n8n/commit/9fc3699beb0c150909889ed17740a5cd9e0461c3)) +* **editor:** Enable drag and drop in code editors (Code/SQL/HTML) ([#10888](https://github.com/n8n-io/n8n/issues/10888)) ([af9e227](https://github.com/n8n-io/n8n/commit/af9e227ad4848995b9d82c72f814dbf9d1de506f)) +* **editor:** Overhaul document title management ([#10999](https://github.com/n8n-io/n8n/issues/10999)) ([bb28956](https://github.com/n8n-io/n8n/commit/bb2895689fb006897bc244271aca6f0bfa1839b9)) +* **editor:** Remove execution annotation feature flag ([#11020](https://github.com/n8n-io/n8n/issues/11020)) ([e7199db](https://github.com/n8n-io/n8n/commit/e7199dbfccdbdf1c4273f916e3006ca610c230e9)) +* **editor:** Support node-creator actions for vector store nodes ([#11032](https://github.com/n8n-io/n8n/issues/11032)) ([72b70d9](https://github.com/n8n-io/n8n/commit/72b70d9d98daeba654baf6785ff1ae234c73c977)) +* **Google BigQuery Node:** Return numeric values as integers ([#10943](https://github.com/n8n-io/n8n/issues/10943)) ([d7c1d24](https://github.com/n8n-io/n8n/commit/d7c1d24f74648740b2f425640909037ba06c5030)) +* **Invoice Ninja Node:** Add more query params to getAll requests ([#9238](https://github.com/n8n-io/n8n/issues/9238)) ([50b7238](https://github.com/n8n-io/n8n/commit/50b723836e70bbe405594f690b73057f9c33fbe4)) +* **Iterable Node:** Add support for EDC and USDC selection ([#10908](https://github.com/n8n-io/n8n/issues/10908)) ([0ca9c07](https://github.com/n8n-io/n8n/commit/0ca9c076ca51d313392e45c3b013f2e83aaea843)) +* **Question and Answer Chain Node:** Customize question and answer system prompt ([#10385](https://github.com/n8n-io/n8n/issues/10385)) ([08a27b3](https://github.com/n8n-io/n8n/commit/08a27b3148aac2282f64339ddc33ac7c90835d84)) + + + +# [1.61.0](https://github.com/n8n-io/n8n/compare/n8n@1.60.0...n8n@1.61.0) (2024-09-25) + + +### Bug Fixes + +* **core:** Add executionData to expressions in pagination code ([#10926](https://github.com/n8n-io/n8n/issues/10926)) ([eac103e](https://github.com/n8n-io/n8n/commit/eac103e367d59a532b9ba12db78a0dd10aee62fb)) +* **core:** Fix webhook binary data max size configuration ([#10897](https://github.com/n8n-io/n8n/issues/10897)) ([693fb7e](https://github.com/n8n-io/n8n/commit/693fb7e580b7e030c86977bff6d319bbee4fcd62)) +* **core:** Remove subworkflow license check ([#10893](https://github.com/n8n-io/n8n/issues/10893)) ([0290e38](https://github.com/n8n-io/n8n/commit/0290e38f990275074eb7e7ccd0b41f1ae0215dd2)) +* **editor:** Credentials scopes and n8n scopes mix up ([#10930](https://github.com/n8n-io/n8n/issues/10930)) ([e069608](https://github.com/n8n-io/n8n/commit/e0696080227aee7ccb50d51a82873e8a1ba4667d)) +* **editor:** Fix design system form component sizing ([#10961](https://github.com/n8n-io/n8n/issues/10961)) ([cf153ea](https://github.com/n8n-io/n8n/commit/cf153ea085165115ee523fbb1bd32080dde47eda)) +* **editor:** Fix modal overflow when AI is enabled in code node ([#10887](https://github.com/n8n-io/n8n/issues/10887)) ([f9f303f](https://github.com/n8n-io/n8n/commit/f9f303f562084db8c8956da267680b1f935aa2df)) +* **editor:** Fix source control push modal checkboxes ([#10910](https://github.com/n8n-io/n8n/issues/10910)) ([8db8817](https://github.com/n8n-io/n8n/commit/8db88178511749b19a5878816ef062092fd9f2be)) +* **editor:** Fix styling and typography in AI Assistant chat ([#10895](https://github.com/n8n-io/n8n/issues/10895)) ([57ff3cc](https://github.com/n8n-io/n8n/commit/57ff3cc27b9470bfbe2486c3c1831c57f5a4075f)) +* **editor:** Prevent clipboard xss injection ([#10894](https://github.com/n8n-io/n8n/issues/10894)) ([e20ab59](https://github.com/n8n-io/n8n/commit/e20ab59c1dcf9da19a30268ce19930bfa7e38992)) +* **editor:** Prevent node name input in NDV to expand unnecessarily ([#10922](https://github.com/n8n-io/n8n/issues/10922)) ([a2237d1](https://github.com/n8n-io/n8n/commit/a2237d128ff6a4d65cd30325b6b9d9b765ca7be6)) +* **editor:** Update gird size when opening credentials support chat ([#10882](https://github.com/n8n-io/n8n/issues/10882)) ([b86fd80](https://github.com/n8n-io/n8n/commit/b86fd80fc9fe06011367ca04a75e4b52533db1fe)) +* **editor:** Use `:focus-visible` instead for `:focus` for buttons ([#10921](https://github.com/n8n-io/n8n/issues/10921)) ([bf28d09](https://github.com/n8n-io/n8n/commit/bf28d0965c46620a106c87037bafd2cf936f1050)) +* **editor:** Use correct output for connected nodes in schema view ([#10928](https://github.com/n8n-io/n8n/issues/10928)) ([ad60d49](https://github.com/n8n-io/n8n/commit/ad60d49b4251138a7c69cb5e9f00c3ef875486e0)) +* Enable Assistant on other credential views ([#10931](https://github.com/n8n-io/n8n/issues/10931)) ([557db9c](https://github.com/n8n-io/n8n/commit/557db9c170a89447ec9cc14aa1af51e5fd11dd92)) +* Ensure user id for early track events ([#10885](https://github.com/n8n-io/n8n/issues/10885)) ([23c09ea](https://github.com/n8n-io/n8n/commit/23c09eae4223545c717270a5cd305d2e57e1ad5b)) +* **Google Sheets Node:** Insert data if sheet is empty instead of error ([#10942](https://github.com/n8n-io/n8n/issues/10942)) ([c75990e](https://github.com/n8n-io/n8n/commit/c75990e0632c581384542610a886ef89621a9403)) +* Hide assistant button when showing Click to connect ([#10932](https://github.com/n8n-io/n8n/issues/10932)) ([d74cff2](https://github.com/n8n-io/n8n/commit/d74cff20301f285588f93207f29660d25fdbc8da)) +* **HTTP Request Node:** Do not modify request object when sanitizing message for UI ([#10923](https://github.com/n8n-io/n8n/issues/10923)) ([8cc10cc](https://github.com/n8n-io/n8n/commit/8cc10cc2c1869b9abcafd157e41be65ce2b6f499)) +* **MQTT Node:** Close connection if connection attempt fails ([#10873](https://github.com/n8n-io/n8n/issues/10873)) ([ee7147c](https://github.com/n8n-io/n8n/commit/ee7147c6b3b053ac8fc317319ab257204e599f16)) +* **MySQL Node:** Fix "Maximum call stack size exceeded" error when handling a large number of rows ([#10965](https://github.com/n8n-io/n8n/issues/10965)) ([62159bd](https://github.com/n8n-io/n8n/commit/62159bd71c9a0303b597a68113e0ac50473ee8d4)) +* **Notion Node:** Allow UUID v8 in notion id checks ([#10938](https://github.com/n8n-io/n8n/issues/10938)) ([46beda0](https://github.com/n8n-io/n8n/commit/46beda05f6771c31bcf0b6a781976d8261079a66)) + + +### Features + +* **Brandfetch Node:** Update to use new API ([#10877](https://github.com/n8n-io/n8n/issues/10877)) ([08ba9a3](https://github.com/n8n-io/n8n/commit/08ba9a36a43b6c84f69bb04fa4d6419a7a4adddf)) +* **editor:** Setup Sentry integration ([#10945](https://github.com/n8n-io/n8n/issues/10945)) ([6de4dff](https://github.com/n8n-io/n8n/commit/6de4dfff87e4da888567081a9928d9682bdea11d)) +* **editor:** Show a notice before deleting annotated executions ([#10934](https://github.com/n8n-io/n8n/issues/10934)) ([dcc1c72](https://github.com/n8n-io/n8n/commit/dcc1c72fc4b56c3252183541b22da801804d4f79)) +* Page size 1 option ([#10957](https://github.com/n8n-io/n8n/issues/10957)) ([bdc0622](https://github.com/n8n-io/n8n/commit/bdc0622f59e98c9e6c542f5cb59a2dbd9008ba96)) +* **Slack Node:** Add option to hide workflow link on message update ([#10927](https://github.com/n8n-io/n8n/issues/10927)) ([422c946](https://github.com/n8n-io/n8n/commit/422c9463c8d931a728615a1fe5a10f05a96ecaa2)) + + +### Performance Improvements + +* **editor:** Use virtual scrolling in `RunDataJson.vue` ([#10838](https://github.com/n8n-io/n8n/issues/10838)) ([f5474ff](https://github.com/n8n-io/n8n/commit/f5474ff79198a2f5a145d0a9df1bb651ea677ec5)) + + + +# [1.60.0](https://github.com/n8n-io/n8n/compare/n8n@1.59.0...n8n@1.60.0) (2024-09-18) + + +### Bug Fixes + +* **Azure OpenAI Chat Model Node:** Add response format option ([#10851](https://github.com/n8n-io/n8n/issues/10851)) ([0b5299a](https://github.com/n8n-io/n8n/commit/0b5299a248fdd451ceabb98ff6a2b38e818d02f8)) +* **Contentful Node:** Add missing additional fields to entry > get ([#10830](https://github.com/n8n-io/n8n/issues/10830)) ([c43aef1](https://github.com/n8n-io/n8n/commit/c43aef1a266cc6ccf8f778c290f8cb8ba2ee28cf)) +* **core:** Prevent shutdown error in regular mode ([#10844](https://github.com/n8n-io/n8n/issues/10844)) ([acb4194](https://github.com/n8n-io/n8n/commit/acb4194fa1a1d0497dd1f48045f069e1db28c432)) +* **core:** Restore queue listeners for `webhook` process ([#10781](https://github.com/n8n-io/n8n/issues/10781)) ([86f4877](https://github.com/n8n-io/n8n/commit/86f4877bab978a1ec2f53df23b6c515507cd8f72)) +* **editor:** Add missing node parameter values to AI Assistant request ([#10788](https://github.com/n8n-io/n8n/issues/10788)) ([d65ade4](https://github.com/n8n-io/n8n/commit/d65ade4e92eed3cfc47854d493fac6885a1a852b)) +* **editor:** Address edge toolbar rendering glitches ([#10839](https://github.com/n8n-io/n8n/issues/10839)) ([e0c0dde](https://github.com/n8n-io/n8n/commit/e0c0ddee59e889f50dd5033d0a933bad60fb7e3a)) +* **editor:** Allow custom git repo urls in source control settings ([#10849](https://github.com/n8n-io/n8n/issues/10849)) ([a63a9b5](https://github.com/n8n-io/n8n/commit/a63a9b53f06d3a00e8e76c0ab9f2571604c01922)) +* **editor:** Fix completion on $input.item. in Code node ([#10800](https://github.com/n8n-io/n8n/issues/10800)) ([45dccf3](https://github.com/n8n-io/n8n/commit/45dccf3d0c8282987833962a8e3f3a77d256ea37)) +* **editor:** Make expression edit modal read-only in executions view ([#10806](https://github.com/n8n-io/n8n/issues/10806)) ([394ef88](https://github.com/n8n-io/n8n/commit/394ef888433b1d48593531ab9eea93a3c3ae6040)) +* **editor:** Make schema view search copy more clear ([#10807](https://github.com/n8n-io/n8n/issues/10807)) ([7f1c131](https://github.com/n8n-io/n8n/commit/7f1c131b72ad1b98b4a8c976b8a0ef5d963d5f1f)) +* **editor:** Minimap Show nodes outside viewport ([#10843](https://github.com/n8n-io/n8n/issues/10843)) ([9c95db8](https://github.com/n8n-io/n8n/commit/9c95db8282c9f3cef5568aa9793ca977d4d8a347)) +* **editor:** Prevent clipboard XSS injection ([#10805](https://github.com/n8n-io/n8n/issues/10805)) ([db846d3](https://github.com/n8n-io/n8n/commit/db846d3235a360b4b729312b6ffe0d75be08fd45)) +* **editor:** Render image binary-data using img tags ([#10829](https://github.com/n8n-io/n8n/issues/10829)) ([7c23101](https://github.com/n8n-io/n8n/commit/7c23101ab8c12b735a17deb35637f3f12c00aeb0)) +* **editor:** Replace v-html with custom directive to sanitize html ([#10804](https://github.com/n8n-io/n8n/issues/10804)) ([44e5fb9](https://github.com/n8n-io/n8n/commit/44e5fb9b06c794033204ef1744b54b3b87160082)) +* **editor:** Restore V1 keybinding, Space Key to toggle panning ([#10841](https://github.com/n8n-io/n8n/issues/10841)) ([5a1db6d](https://github.com/n8n-io/n8n/commit/5a1db6db1adad43887e839181719818474bc66b0)) +* Fix telemetry causing console error ([#10828](https://github.com/n8n-io/n8n/issues/10828)) ([3be31e2](https://github.com/n8n-io/n8n/commit/3be31e27edc6e71400bde23f992ba98b2365bcff)) +* **Google Vertex Chat Model Node:** Clean service account private key ([#10770](https://github.com/n8n-io/n8n/issues/10770)) ([e6d84db](https://github.com/n8n-io/n8n/commit/e6d84db89930afc16f4a08fae87d8af4a059e6d7)) +* **HTTP Request Tool Node:** Fix subsequent tool calls reusung the same options ([#10808](https://github.com/n8n-io/n8n/issues/10808)) ([d647ef4](https://github.com/n8n-io/n8n/commit/d647ef41acf672177ea5e8ce0e99d78c565e34b2)) +* **OpenAI Node, Basic LLM Chain Node, Tool Agent Node:** Better OpenAI API rate limit errors ([#10797](https://github.com/n8n-io/n8n/issues/10797)) ([ab83c4b](https://github.com/n8n-io/n8n/commit/ab83c4b4166d5ad5f4ca46a636f83c8802fe3ec0)) +* Prevent copying workflow when copying outside of canvas ([#10813](https://github.com/n8n-io/n8n/issues/10813)) ([22c1890](https://github.com/n8n-io/n8n/commit/22c1890139c89e74df67b9673a1d0c85d647eb9d)) +* **RSS Feed Trigger Node:** Handle empty items gracefully ([#10855](https://github.com/n8n-io/n8n/issues/10855)) ([c55df63](https://github.com/n8n-io/n8n/commit/c55df63abc234ace6ac8e54ed094d10797671264)) + + +### Features + +* **core:** Allow customizing max file size in form-data payloads for webhooks ([#10857](https://github.com/n8n-io/n8n/issues/10857)) ([a3335e0](https://github.com/n8n-io/n8n/commit/a3335e0ecd3796c874985d3c6fbbaabc35dc3490)) +* **core:** Introduce worker metrics ([#10850](https://github.com/n8n-io/n8n/issues/10850)) ([08ebe1e](https://github.com/n8n-io/n8n/commit/08ebe1e4807b3d7b4a4840887cbb30f547a5c89a)) +* **editor:** Add truncate directive ([#10842](https://github.com/n8n-io/n8n/issues/10842)) ([57836cc](https://github.com/n8n-io/n8n/commit/57836cc17a57c790d2ffb2463abb16a03321eb59)) +* **editor:** Show Collaboration pane only when there are multiple active users ([#10772](https://github.com/n8n-io/n8n/issues/10772)) ([a0af1d9](https://github.com/n8n-io/n8n/commit/a0af1d9a06c78d29f215dc010332ea7c8f28717d)) +* **Invoice Ninja Node:** Add actions for bank transactions ([#10389](https://github.com/n8n-io/n8n/issues/10389)) ([5a2c7e0](https://github.com/n8n-io/n8n/commit/5a2c7e00a0ca1a151a7fec56da5f99b086c25b1f)) +* **OpenAI Node:** Include O1 models in the models select ([#10801](https://github.com/n8n-io/n8n/issues/10801)) ([b2b1abc](https://github.com/n8n-io/n8n/commit/b2b1abc5319bdbf2bc855649ea27359b22aba009)) + + + +# [1.59.0](https://github.com/n8n-io/n8n/compare/n8n@1.58.0...n8n@1.59.0) (2024-09-11) + + +### Bug Fixes + +* **Chat Trigger Node:** Fix auth in "Embedded Chat" mode ([#10734](https://github.com/n8n-io/n8n/issues/10734)) ([96db501](https://github.com/n8n-io/n8n/commit/96db501a615ff7ec91bb66ea49532a2c6ca2a172)) +* **core:** Allow license:clear command to be used for licenses that failed renewal ([#10665](https://github.com/n8n-io/n8n/issues/10665)) ([a422c5a](https://github.com/n8n-io/n8n/commit/a422c5ac7b8f609eeab891230d9660f71bf225c5)) +* **core:** Update subworkflow execution status correctly ([#10764](https://github.com/n8n-io/n8n/issues/10764)) ([4f94319](https://github.com/n8n-io/n8n/commit/4f94319cd93885ebe830fa1f0e6b757de80f7356)) +* **editor:** Add arrow end to connection line ([#10704](https://github.com/n8n-io/n8n/issues/10704)) ([43713dc](https://github.com/n8n-io/n8n/commit/43713dcd89fcb98ea7e24d27127861fc4b0d7872)) +* **editor:** Add sticky note readonly state in new canvas ([#10678](https://github.com/n8n-io/n8n/issues/10678)) ([c5bc8e6](https://github.com/n8n-io/n8n/commit/c5bc8e6eb9eadadf44f763e5e5aac4b35d03cc31)) +* **editor:** Auto-focus expression input when switching from "fixed" mode ([#10686](https://github.com/n8n-io/n8n/issues/10686)) ([54ab2b1](https://github.com/n8n-io/n8n/commit/54ab2b14e41fe84a455c7e7d5c73d7347844d2fb)) +* **editor:** Don't render pinned icon for disabled nodes ([#10712](https://github.com/n8n-io/n8n/issues/10712)) ([879b837](https://github.com/n8n-io/n8n/commit/879b8375812106b3f6909b7de27858175ba5575d)) +* **editor:** Fix error rendering and indexing of LLM sub-node outputs ([#10688](https://github.com/n8n-io/n8n/issues/10688)) ([50459ba](https://github.com/n8n-io/n8n/commit/50459bacab517bacb97d2884fda69f8412c9960c)) +* **editor:** Fix xss issues in toast usages ([#10733](https://github.com/n8n-io/n8n/issues/10733)) ([6df6f5f](https://github.com/n8n-io/n8n/commit/6df6f5f8df9a8fc0899524a1b69859815eeb341f)) +* **editor:** Follow up fixes and improvements to viewer role ([#10684](https://github.com/n8n-io/n8n/issues/10684)) ([63548e6](https://github.com/n8n-io/n8n/commit/63548e6ead5c122732628b5feb1515f492d5e033)) +* **editor:** Increase connector snap radius ([#10757](https://github.com/n8n-io/n8n/issues/10757)) ([297b668](https://github.com/n8n-io/n8n/commit/297b668f32f9ecfc82c1205ea4e915408cab482e)) +* **editor:** Plus node button should not be visible on readonly mode ([#10692](https://github.com/n8n-io/n8n/issues/10692)) ([62cb189](https://github.com/n8n-io/n8n/commit/62cb189985035c447ad31c275337b3fb24089265)) +* **editor:** Prevent action's panel flickering while dragging a node ([#10739](https://github.com/n8n-io/n8n/issues/10739)) ([efa5573](https://github.com/n8n-io/n8n/commit/efa5573278a60d55d5b509aac48cc112c79334d2)) +* **editor:** Restrict when the collision avoidance algorithm is used ([#10755](https://github.com/n8n-io/n8n/issues/10755)) ([bf43d67](https://github.com/n8n-io/n8n/commit/bf43d673571b2fc18fe5d660171f0da165909dfc)) +* **editor:** Show docs link in credential modal when docs sidebar is hidden ([#10750](https://github.com/n8n-io/n8n/issues/10750)) ([87333cb](https://github.com/n8n-io/n8n/commit/87333cbefebe652256fa1d60ba7a4b946fdfe17d)) +* **Email Trigger (IMAP) Node:** Ensure connection close does not block deactivation ([#10689](https://github.com/n8n-io/n8n/issues/10689)) ([156eb72](https://github.com/n8n-io/n8n/commit/156eb72ebefa1d963ff46eff6652e2c947ef031b)) +* Fix the issue in Trigger Nodes where poll time was not loaded ([#10695](https://github.com/n8n-io/n8n/issues/10695)) ([1dea8f4](https://github.com/n8n-io/n8n/commit/1dea8f4c7da2a04434c274faf8e0a9a7a693f5a4)) +* **Gmail Trigger Node:** Change Gmail Trigger dedupe logic ([#10717](https://github.com/n8n-io/n8n/issues/10717)) ([9f3e03d](https://github.com/n8n-io/n8n/commit/9f3e03d728d8acda5ae4166c5837b00cb1311e96)) +* Google Contacts node warm up request, Google Calendar node events>getAll fields option ([#10700](https://github.com/n8n-io/n8n/issues/10700)) ([22c70d5](https://github.com/n8n-io/n8n/commit/22c70d50697023cf448a379d7778695abb718ce9)) +* **If Node:** Update copy for type conversion parameter ([#10769](https://github.com/n8n-io/n8n/issues/10769)) ([ee5fbc5](https://github.com/n8n-io/n8n/commit/ee5fbc543ce1d33a56cf118dbd048d6693a15875)) +* **n8n Form Trigger Node:** Do not rerun trigger when it has run data ([#10687](https://github.com/n8n-io/n8n/issues/10687)) ([3adbcab](https://github.com/n8n-io/n8n/commit/3adbcab27de34ea5a2c7a88b2ad0d80e3f6d4a0b)) +* **OpenAI Chat Model Node:** Prevent filtering of fine-tuned models in model selector ([#10662](https://github.com/n8n-io/n8n/issues/10662)) ([4e89912](https://github.com/n8n-io/n8n/commit/4e899125884bdd97c97446d90e89668688fe7573)) +* Prevent AI assistant session reset when workflow is saved ([#10707](https://github.com/n8n-io/n8n/issues/10707)) ([91d9be2](https://github.com/n8n-io/n8n/commit/91d9be20667c20599f64a24fa99386c78476d425)) +* Show a more user friendly error message if initial Db connection times out ([#10682](https://github.com/n8n-io/n8n/issues/10682)) ([4efcbc5](https://github.com/n8n-io/n8n/commit/4efcbc593685286837022e5600d81e67f3e0131c)) +* **Webflow Node:** Update scopes to include forms ([#10554](https://github.com/n8n-io/n8n/issues/10554)) ([d3861b3](https://github.com/n8n-io/n8n/commit/d3861b31ceef16f566c525c7651453a1b84ed2a4)) +* **YouTube Node:** Fix Date filters ([#10725](https://github.com/n8n-io/n8n/issues/10725)) ([21936c8](https://github.com/n8n-io/n8n/commit/21936c88a84b8c03a8d02391cb7112b0e4d9f1f9)) + + +### Features + +* **Code Tool Node:** Option to specify input schema ([#10693](https://github.com/n8n-io/n8n/issues/10693)) ([421aa71](https://github.com/n8n-io/n8n/commit/421aa712515d9beeae7c0201b173cb7324473f69)) +* **editor:** Add lint for $('Node').item in runOnceForAllItems mode ([#10743](https://github.com/n8n-io/n8n/issues/10743)) ([1b04be1](https://github.com/n8n-io/n8n/commit/1b04be1240ec29151e79162680907710c71c6488)) +* **editor:** Logs markdown block improvements ([#10681](https://github.com/n8n-io/n8n/issues/10681)) ([db6e832](https://github.com/n8n-io/n8n/commit/db6e8326c7119d90fa6a51f82099026f50587202)) +* Filter parameter: Improve loose type validation for booleans ([#10702](https://github.com/n8n-io/n8n/issues/10702)) ([e9b8d99](https://github.com/n8n-io/n8n/commit/e9b8d99084f0ea2063a1d691928025e534980b4e)) +* **Lemlist Node:** Add V2 to support more API operations ([#10615](https://github.com/n8n-io/n8n/issues/10615)) ([20b1cf2](https://github.com/n8n-io/n8n/commit/20b1cf2b7597c78e28f522945b8cbad2ee535cd7)) +* **OpenAI Node:** Add Max Tools Iteration parameter and prevent tool calling after execution is aborted ([#10735](https://github.com/n8n-io/n8n/issues/10735)) ([5c47a5f](https://github.com/n8n-io/n8n/commit/5c47a5f691d42dae84a9df8a32a5ea600d83f6dd)) + + +### Performance Improvements + +* **editor:** Fix WorkflowDetails excessive re-rendering ([#10767](https://github.com/n8n-io/n8n/issues/10767)) ([00013a2](https://github.com/n8n-io/n8n/commit/00013a2069fff5e5d9398c5921c90d34dc384299)) + + + +# [1.58.0](https://github.com/n8n-io/n8n/compare/n8n@1.57.0...n8n@1.58.0) (2024-09-05) + + +### Bug Fixes + +* **AI Agent Node:** Fix tools agent when using memory and Anthropic models ([#10513](https://github.com/n8n-io/n8n/issues/10513)) ([746e7b8](https://github.com/n8n-io/n8n/commit/746e7b89f7e9b99126fb69110773548dfe91b74f)) +* **API:** Update express-openapi-validator to resolve AIKIDO-2024-10229 ([#10612](https://github.com/n8n-io/n8n/issues/10612)) ([1dcb814](https://github.com/n8n-io/n8n/commit/1dcb814ced7cfbc80eddbb4bc03108341a9f27f5)) +* **core:** Declutter webhook insertion errors ([#10650](https://github.com/n8n-io/n8n/issues/10650)) ([36177b0](https://github.com/n8n-io/n8n/commit/36177b0943cf72bae3b0075453498dd1e41684d0)) +* **core:** Flush responses for ai streaming endpoints ([#10633](https://github.com/n8n-io/n8n/issues/10633)) ([6bb6a5c](https://github.com/n8n-io/n8n/commit/6bb6a5c6cd1da3503a1a2b35bcf4c685cd3f964f)) +* **core:** Tighten check for company size survey answer ([#10646](https://github.com/n8n-io/n8n/issues/10646)) ([e5aba60](https://github.com/n8n-io/n8n/commit/e5aba60afff93364d91f17c00ea18d38d9dbc970)) +* **editor:** Add confirmation toast when changing user role ([#10592](https://github.com/n8n-io/n8n/issues/10592)) ([95da4d4](https://github.com/n8n-io/n8n/commit/95da4d4797e800c04b2b17c23c941c785dd62393)) +* **editor:** Add pinned data only to manual executions in execution view ([#10605](https://github.com/n8n-io/n8n/issues/10605)) ([a12e9ed](https://github.com/n8n-io/n8n/commit/a12e9edac042957939c63f0a5c35572930632352)) +* **editor:** Add tooltips to workflow history button ([#10570](https://github.com/n8n-io/n8n/issues/10570)) ([4a125f5](https://github.com/n8n-io/n8n/commit/4a125f511c5537977652900b7712a2ad908140e7)) +* **editor:** Allow disabling SSO when config request fails ([#10635](https://github.com/n8n-io/n8n/issues/10635)) ([ce39933](https://github.com/n8n-io/n8n/commit/ce39933766fa18107f4082de0cba0b6702cbbbfa)) +* **editor:** Fix notification rendering HTML as text ([#10642](https://github.com/n8n-io/n8n/issues/10642)) ([5eba534](https://github.com/n8n-io/n8n/commit/5eba5343191665cd4639632ba303464176c279c4)) +* **editor:** Fix opening executions tab from a new, unsaved workflow ([#10652](https://github.com/n8n-io/n8n/issues/10652)) ([cd0891e](https://github.com/n8n-io/n8n/commit/cd0891e4f1cfdc90b2090958a39564ba99534627)) +* **Gmail Trigger Node:** Don't return date instances, but date strings instead ([#10582](https://github.com/n8n-io/n8n/issues/10582)) ([9e1dac0](https://github.com/n8n-io/n8n/commit/9e1dac04655a20c5c7b99552742312fd9237604b)) +* **HTTP Request Node:** Sanitize authorization headers ([#10607](https://github.com/n8n-io/n8n/issues/10607)) ([405c55a](https://github.com/n8n-io/n8n/commit/405c55a1f7cf34e7b6e46a86031ef9a41956ca78)) +* **Wait Node:** Append n8n attribution option ([#10585](https://github.com/n8n-io/n8n/issues/10585)) ([81f4322](https://github.com/n8n-io/n8n/commit/81f4322d456773281aec4b47447465bdffd311fe)) + + +### Features + +* **core:** Execution curation ([#10342](https://github.com/n8n-io/n8n/issues/10342)) ([022ddcb](https://github.com/n8n-io/n8n/commit/022ddcbef9f1ac1b89bcfd5f7759d67325b07392)) +* **core:** Implement wrapping of regular nodes as AI Tools ([#10641](https://github.com/n8n-io/n8n/issues/10641)) ([da44fe4](https://github.com/n8n-io/n8n/commit/da44fe4b8967055b7b1f849750e1fafa0ba67218)) +* **core:** Introduce DB health check ([#10661](https://github.com/n8n-io/n8n/issues/10661)) ([a8e80d0](https://github.com/n8n-io/n8n/commit/a8e80d0c4b7531fe32be1d4057656885359f42fc)) +* **core:** Make Postgres connection timeout configurable ([#10670](https://github.com/n8n-io/n8n/issues/10670)) ([8154031](https://github.com/n8n-io/n8n/commit/81540318b4c55f3a09c9776e23d2211abdbd36f7)) +* **core:** Switch to MJML for email templates ([#10518](https://github.com/n8n-io/n8n/issues/10518)) ([dbc10fe](https://github.com/n8n-io/n8n/commit/dbc10fe9f522f31eb06add6f3f6863ce24510547)) +* **editor:** Add A/B testing feature flag for credential docs modal ([#10664](https://github.com/n8n-io/n8n/issues/10664)) ([899b0a1](https://github.com/n8n-io/n8n/commit/899b0a19efc49c1c087f78bbb1a59d726a510965)) +* **editor:** Add AI Assistant support chat ([#10656](https://github.com/n8n-io/n8n/issues/10656)) ([3a80780](https://github.com/n8n-io/n8n/commit/3a8078068e5c0b01dfd34ff838fe1b30d604abc6)) +* **editor:** Implement new app layout ([#10548](https://github.com/n8n-io/n8n/issues/10548)) ([95a9cd2](https://github.com/n8n-io/n8n/commit/95a9cd2c739cf4f817eb8df6509a9112ac24a3b1)) +* **editor:** Make highlighted data pane floating ([#10638](https://github.com/n8n-io/n8n/issues/10638)) ([8b5c333](https://github.com/n8n-io/n8n/commit/8b5c333d3dca03ba51a5873b75451fbfafc5ae15)) +* More hints to nodes ([#10565](https://github.com/n8n-io/n8n/issues/10565)) ([66ddb4a](https://github.com/n8n-io/n8n/commit/66ddb4a6f367602c9aaad1bfb0cc6fac3facd15e)) +* **Postgres PGVector Store Node:** Add PGVector vector store node ([#10517](https://github.com/n8n-io/n8n/issues/10517)) ([650389d](https://github.com/n8n-io/n8n/commit/650389d90763a45c037e74a1a1193c3cbe103a16)) +* Reintroduce collaboration feature ([#10602](https://github.com/n8n-io/n8n/issues/10602)) ([2ea2bfe](https://github.com/n8n-io/n8n/commit/2ea2bfe762c02047e522f28dd97f197735b3fb46)) +* **Text Classifier Node:** Add output fixing parser ([#10667](https://github.com/n8n-io/n8n/issues/10667)) ([aa37c32](https://github.com/n8n-io/n8n/commit/aa37c32f266ffff93cd903888b1c15caa0468830)) + + + +# [1.57.0](https://github.com/n8n-io/n8n/compare/n8n@1.56.0...n8n@1.57.0) (2024-08-28) + + +### Bug Fixes + +* **AI Agent Node:** Allow AWS Bedrock Chat to be used with conversational agent ([#10489](https://github.com/n8n-io/n8n/issues/10489)) ([bdcc657](https://github.com/n8n-io/n8n/commit/bdcc657965af5f604aac1eaff7d937f69a08ce1c)) +* **core:** Make boolean config value parsing backward-compatible ([#10560](https://github.com/n8n-io/n8n/issues/10560)) ([70b410f](https://github.com/n8n-io/n8n/commit/70b410f4b00dd599fcd4249aa105098aa262da66)) +* **core:** Restore Redis cache key ([#10520](https://github.com/n8n-io/n8n/issues/10520)) ([873056a](https://github.com/n8n-io/n8n/commit/873056a92e52cc629d2873c960656d5f06d4728e)) +* **core:** Scheduler tasks should not trigger on follower instances ([#10507](https://github.com/n8n-io/n8n/issues/10507)) ([3428f28](https://github.com/n8n-io/n8n/commit/3428f28a732f79e067b3cb515cc59d835de246a6)) +* **core:** Stop explicit redis client disconnect on shutdown ([#10551](https://github.com/n8n-io/n8n/issues/10551)) ([f712812](https://github.com/n8n-io/n8n/commit/f71281221efb79d65d8d7610c292bc90cef13d7a)) +* **editor:** Ensure `Datatable` component renders `All` option ([#10525](https://github.com/n8n-io/n8n/issues/10525)) ([bc27beb](https://github.com/n8n-io/n8n/commit/bc27beb6629883003a8991d7e840ffaa066d41ac)) +* **editor:** Prevent Safari users from accessing the frontend over insecure contexts ([#10510](https://github.com/n8n-io/n8n/issues/10510)) ([a73b9a3](https://github.com/n8n-io/n8n/commit/a73b9a38d6c48e2f78593328e7d9933f2493dbb6)) +* **editor:** Scale output item selector input width with value ([#10555](https://github.com/n8n-io/n8n/issues/10555)) ([52c574d](https://github.com/n8n-io/n8n/commit/52c574d83f344f03b0e39984bbc3ac0402e50791)) +* **Google Sheets Trigger Node:** Show sheet name is too long error ([#10542](https://github.com/n8n-io/n8n/issues/10542)) ([4e15007](https://github.com/n8n-io/n8n/commit/4e1500757700ec984cdad8b9cfcd76ee00ae127e)) +* **Wait Node:** Prevent waiting until invalid date ([#10523](https://github.com/n8n-io/n8n/issues/10523)) ([c0e7620](https://github.com/n8n-io/n8n/commit/c0e7620036738f8d0b382d0d0610b981dcbc29e0)) + + +### Features + +* Add new credentials for the HTTP Request node ([#9833](https://github.com/n8n-io/n8n/issues/9833)) ([26f1af3](https://github.com/n8n-io/n8n/commit/26f1af397b2b25e3394fc2dae91a5c281bf33d66)) +* **AI Agent Node:** Add tutorial link to agent node ([#10493](https://github.com/n8n-io/n8n/issues/10493)) ([5c7cc36](https://github.com/n8n-io/n8n/commit/5c7cc36c23e58a47a1e71911e7303a1bd54f167e)) +* **core:** Expose queue metrics for Prometheus ([#10559](https://github.com/n8n-io/n8n/issues/10559)) ([008c510](https://github.com/n8n-io/n8n/commit/008c510b7623fefb8c60730c7eac54dd9bb2e3fc)) +* **editor:** Implement workflowSelector parameter type ([#10482](https://github.com/n8n-io/n8n/issues/10482)) ([84e54be](https://github.com/n8n-io/n8n/commit/84e54beac763f25399c9687f695f1e658e3ce434)) + + +### Performance Improvements + +* **core:** Make execution queries faster ([#9817](https://github.com/n8n-io/n8n/issues/9817)) ([dc7dc99](https://github.com/n8n-io/n8n/commit/dc7dc995d5e2ea8fbd0dcb54cfa8aa93ecb437c9)) + +### Other +* **Add user journey link to [n8n.io](https://n8n.io)** ([#10331](https://github.com/n8n-io/n8n/pull/10331)) + + +# [1.56.0](https://github.com/n8n-io/n8n/compare/n8n@1.55.0...n8n@1.56.0) (2024-08-21) + + +### Bug Fixes + +* Better errors in Switch, If and Filter nodes ([#10457](https://github.com/n8n-io/n8n/issues/10457)) ([aea82cb](https://github.com/n8n-io/n8n/commit/aea82cb74421d516919742127daf669808b57604)) +* **Calendly Trigger Node:** Fix issue with webhook url matching ([#10378](https://github.com/n8n-io/n8n/issues/10378)) ([09c3a8b](https://github.com/n8n-io/n8n/commit/09c3a8b36733a9634ef5948922d6aa7a19bbb592)) +* **core:** Fix payload property in `workflow-post-execute` event ([#10413](https://github.com/n8n-io/n8n/issues/10413)) ([d98e29e](https://github.com/n8n-io/n8n/commit/d98e29e3d53de87aec276260615fa60473a2692f)) +* **core:** Fix XSS validation and separate URL validation ([#10424](https://github.com/n8n-io/n8n/issues/10424)) ([91467ab](https://github.com/n8n-io/n8n/commit/91467ab325e4c71c20c522f3143246d270101626)) +* **core:** Replace `sanitize-html` with `xss` in XSS validator constraint ([#10479](https://github.com/n8n-io/n8n/issues/10479)) ([5dea51a](https://github.com/n8n-io/n8n/commit/5dea51aad7d9e7ffc676d16f4bbbdecce5876f0b)) +* **core:** Use class-validator with XSS check for survey answers ([#10490](https://github.com/n8n-io/n8n/issues/10490)) ([547a606](https://github.com/n8n-io/n8n/commit/547a60642ce9e54819d4e600c822d87dabd59b2e)) +* **core:** Use explicit types in configs to ensure valid decorator metadata ([#10433](https://github.com/n8n-io/n8n/issues/10433)) ([2043daa](https://github.com/n8n-io/n8n/commit/2043daa2570bc04b0b8d41f277901a8cc8a7b98f)) +* **editor:** Add workflow scopes when initializing workflow ([#10455](https://github.com/n8n-io/n8n/issues/10455)) ([b857c2c](https://github.com/n8n-io/n8n/commit/b857c2cda0a9e4386a540d5e1e741570d9453588)) +* **editor:** Buffer json chunks in stream response ([#10439](https://github.com/n8n-io/n8n/issues/10439)) ([37797f3](https://github.com/n8n-io/n8n/commit/37797f38d81b12d030ba85034baeb49192ea575c)) +* **editor:** Fix flaky mapping tests ([#10453](https://github.com/n8n-io/n8n/issues/10453)) ([fc6d413](https://github.com/n8n-io/n8n/commit/fc6d4138d58282f676b32f1a6011b1b6d0184bf2)) +* **editor:** Fix overflow in AI Assistant chat messages ([#10491](https://github.com/n8n-io/n8n/issues/10491)) ([4a6ca63](https://github.com/n8n-io/n8n/commit/4a6ca632100731f85875c639f2164bf1ef415009)) +* **editor:** Highlight matching type in filter component ([#10425](https://github.com/n8n-io/n8n/issues/10425)) ([6bca879](https://github.com/n8n-io/n8n/commit/6bca879d4ae30c7f9a35e8d6672de42cf93be727)) +* **editor:** Show item count in output panel schema view ([#10426](https://github.com/n8n-io/n8n/issues/10426)) ([4dee7cc](https://github.com/n8n-io/n8n/commit/4dee7cc36e5f7768d0b71095b194bf357c92e941)) +* **editor:** Truncate long data pill labels in schema view ([#10427](https://github.com/n8n-io/n8n/issues/10427)) ([1bf2f4f](https://github.com/n8n-io/n8n/commit/1bf2f4f6171d666391bb3a3a312468bc083446e3)) +* Filter component - improve errors ([#10456](https://github.com/n8n-io/n8n/issues/10456)) ([61ac0c7](https://github.com/n8n-io/n8n/commit/61ac0c77755210f570b887951fe6bbec1a323811)) +* **Google Sheets Node:** Better error when column to match on is empty ([#10442](https://github.com/n8n-io/n8n/issues/10442)) ([ce46bf5](https://github.com/n8n-io/n8n/commit/ce46bf516a86d9779f37dd75b0c680d26d88e15d)) +* **Google Sheets Node:** Update name and hint for useAppend option ([#10443](https://github.com/n8n-io/n8n/issues/10443)) ([c5a0c04](https://github.com/n8n-io/n8n/commit/c5a0c049eaf44419c690d151de42fb0c10bd406e)) +* **Google Sheets Node:** Update to returnAllMatches option ([#10440](https://github.com/n8n-io/n8n/issues/10440)) ([f7fb02e](https://github.com/n8n-io/n8n/commit/f7fb02e92a756781f8e35bbbfc25d71c12cb70af)) +* **Invoice Ninja Node:** Fix payment types ([#10462](https://github.com/n8n-io/n8n/issues/10462)) ([129245d](https://github.com/n8n-io/n8n/commit/129245da10be1d645f61e929e40b128bd7813f17)) +* **n8n Form Trigger Node:** Show basic authentication modal on wrong credentials ([#10423](https://github.com/n8n-io/n8n/issues/10423)) ([0dc3e99](https://github.com/n8n-io/n8n/commit/0dc3e99b26bec45e747d83f383cfe5169d89e6b7)) +* **OpenAI Node:** Throw node operations error in case of openAi client error ([#10448](https://github.com/n8n-io/n8n/issues/10448)) ([0d3ed46](https://github.com/n8n-io/n8n/commit/0d3ed461996bbad06015c455f133baab6506437f)) +* Project Viewer always seeing a connection error when testing credentials ([#10417](https://github.com/n8n-io/n8n/issues/10417)) ([613cdd2](https://github.com/n8n-io/n8n/commit/613cdd2ba2c0f224c4857a5fc3eea36dbd683049)) +* Remove unimplemented Postgres credentials options ([#10461](https://github.com/n8n-io/n8n/issues/10461)) ([17ac784](https://github.com/n8n-io/n8n/commit/17ac7844f29d819b91dfaf90b9fe386d98060c42)) +* Rename Assistant back ([#10481](https://github.com/n8n-io/n8n/issues/10481)) ([c410aed](https://github.com/n8n-io/n8n/commit/c410aed4c22182943dc80ede63acda00b7898e10)) +* Require mfa code to change email ([#10354](https://github.com/n8n-io/n8n/issues/10354)) ([39c8e50](https://github.com/n8n-io/n8n/commit/39c8e50ad0513649f5a8cef911b7d6cdd61c2372)) +* **Respond to Webhook Node:** Fix issue preventing the chat trigger from working ([#9886](https://github.com/n8n-io/n8n/issues/9886)) ([9d6ad88](https://github.com/n8n-io/n8n/commit/9d6ad88c14a88fd0dfcb4f9981e38d19cf5f3067)) +* Show input names when node has multiple inputs ([#10434](https://github.com/n8n-io/n8n/issues/10434)) ([973956c](https://github.com/n8n-io/n8n/commit/973956cc26c78c329ff6eb6934d4f0a24060c87c)) +* **Toggl Trigger Node:** Update API version ([#10207](https://github.com/n8n-io/n8n/issues/10207)) ([9bdb1d6](https://github.com/n8n-io/n8n/commit/9bdb1d6dca43fe491c5eb96f093b7eec4509eaff)) + + +### Features + +* **core:** Support bidirectional communication between specific mains and specific workers ([#10377](https://github.com/n8n-io/n8n/issues/10377)) ([d0fc9de](https://github.com/n8n-io/n8n/commit/d0fc9dee0e17211c1ed130b19286e9573c9ebfbd)) +* **Facebook Graph API Node:** Update node to support API v18 - v20 ([#10419](https://github.com/n8n-io/n8n/issues/10419)) ([e7ee10f](https://github.com/n8n-io/n8n/commit/e7ee10f243663d899d32e61bc6264b4df444e2af)) + + + +# [1.55.0](https://github.com/n8n-io/n8n/compare/n8n@1.54.0...n8n@1.55.0) (2024-08-14) + + +### Bug Fixes + +* Add better error handling for chat errors ([#10408](https://github.com/n8n-io/n8n/issues/10408)) ([f82b6e4](https://github.com/n8n-io/n8n/commit/f82b6e4ba9bf527b3a4c17872162d9ae124ead0d)) +* **AI Agent Node:** Fix issues with some tools not populating ([#10406](https://github.com/n8n-io/n8n/issues/10406)) ([51a1edd](https://github.com/n8n-io/n8n/commit/51a1eddbf00393f3881c340cf37cfcca59566c99)) +* **core:** Account for cancelling an execution with no workers available ([#10343](https://github.com/n8n-io/n8n/issues/10343)) ([b044e78](https://github.com/n8n-io/n8n/commit/b044e783e73a499dbd7532a5d489a782d3d021da)) +* **core:** Account for owner when filtering by project ID in `GET /workflows` in Public API ([#10379](https://github.com/n8n-io/n8n/issues/10379)) ([5ac65b3](https://github.com/n8n-io/n8n/commit/5ac65b36bcb1351c6233b951f064f60862f790a5)) +* **core:** Enforce shutdown timer and sequence on `SIGINT` for main ([#10346](https://github.com/n8n-io/n8n/issues/10346)) ([5255793](https://github.com/n8n-io/n8n/commit/5255793afee5653d8356b8e4d2e1009d5cf36164)) +* **core:** Filter out prototype and constructor lookups in expressions ([#10382](https://github.com/n8n-io/n8n/issues/10382)) ([8e7d29a](https://github.com/n8n-io/n8n/commit/8e7d29ad3c4872b1cc147dfcfe9a864ba916692f)) +* **core:** Fix duplicate Redis publisher ([#10392](https://github.com/n8n-io/n8n/issues/10392)) ([45813de](https://github.com/n8n-io/n8n/commit/45813debc963096f63cc0aabe82d9d9f853a39d7)) +* **core:** Fix worker shutdown errors when active executions ([#10353](https://github.com/n8n-io/n8n/issues/10353)) ([e071b73](https://github.com/n8n-io/n8n/commit/e071b73bab34edd4b3e6aef6497514acc504cdc6)) +* **core:** Prevent XSS in user update endpoints ([#10338](https://github.com/n8n-io/n8n/issues/10338)) ([7898498](https://github.com/n8n-io/n8n/commit/78984986a6b4add89df9743b94c113046f1d5ee8)) +* **core:** Prevent XSS via static cache dir ([#10339](https://github.com/n8n-io/n8n/issues/10339)) ([4f392b5](https://github.com/n8n-io/n8n/commit/4f392b5e3e0ee166e85a2e060b3ec7fcf145229b)) +* **core:** Rate limit MFA activation and verification endpoints ([#10330](https://github.com/n8n-io/n8n/issues/10330)) ([b6c47c0](https://github.com/n8n-io/n8n/commit/b6c47c0e3214878d42980d5c9535df52b3984b3c)) +* **editor:** Connect up new project viewer role to the FE ([#9913](https://github.com/n8n-io/n8n/issues/9913)) ([117e2d9](https://github.com/n8n-io/n8n/commit/117e2d968fcc535f32c583ac8f2dc8a84e8cd6bd)) +* **editor:** Enable credential sharing between all types of projects ([#10233](https://github.com/n8n-io/n8n/issues/10233)) ([1cf48cc](https://github.com/n8n-io/n8n/commit/1cf48cc3019c1cf27e2f3c9affd18426237e9064)) +* **editor:** Fix rendering of SVG icons in public chat on iOS ([#10381](https://github.com/n8n-io/n8n/issues/10381)) ([7ab3811](https://github.com/n8n-io/n8n/commit/7ab38114dbf3881afba39287a061446ec4bf0431)) +* **editor:** Fixing XSS vulnerability in toast messages ([#10329](https://github.com/n8n-io/n8n/issues/10329)) ([38bdd9f](https://github.com/n8n-io/n8n/commit/38bdd9f5d0d9ca06fab1a7e1a3e7a4a648a6a89a)) +* **editor:** Revert change that hid swagger docs in the ui ([#10350](https://github.com/n8n-io/n8n/issues/10350)) ([bae49d3](https://github.com/n8n-io/n8n/commit/bae49d3198d4bcc27e7996cd4f7be3132becc98e)) +* **n8n Form Trigger Node:** Fix issue preventing v1 node from working ([#10364](https://github.com/n8n-io/n8n/issues/10364)) ([9b647a9](https://github.com/n8n-io/n8n/commit/9b647a9837434e8b75e3ad754ff5136bb5ac760d)) +* Require mfa code for password change if its enabled ([#10341](https://github.com/n8n-io/n8n/issues/10341)) ([9d7caac](https://github.com/n8n-io/n8n/commit/9d7caacc699f10962783393925a980ec6f1ca975)) +* Require mfa code to disable mfa ([#10345](https://github.com/n8n-io/n8n/issues/10345)) ([3384f52](https://github.com/n8n-io/n8n/commit/3384f52a35b835ba1d8633dc94bab0ad6e7023b3)) + + +### Features + +* Add Ask assistant behind feature flag ([#9995](https://github.com/n8n-io/n8n/issues/9995)) ([5ed2a77](https://github.com/n8n-io/n8n/commit/5ed2a77740db1f02b27c571f4dfdfa206ebdb19c)) +* **AI Transform Node:** New node ([#10405](https://github.com/n8n-io/n8n/issues/10405)) ([4d222ac](https://github.com/n8n-io/n8n/commit/4d222ac19d943b69fd9f87abe5e5c5f5141eed8d)) +* **AI Transform Node:** New node ([#9990](https://github.com/n8n-io/n8n/issues/9990)) ([0de9d56](https://github.com/n8n-io/n8n/commit/0de9d56619ed1c055407353046b8a9ebe78da527)) +* **core:** Allow overriding npm registry for community packages ([#10325](https://github.com/n8n-io/n8n/issues/10325)) ([33a2703](https://github.com/n8n-io/n8n/commit/33a2703429d9eaa41f72d2e7d2da5be60b6c620f)) +* **editor:** Add schema view to expression modal ([#9976](https://github.com/n8n-io/n8n/issues/9976)) ([71b6c67](https://github.com/n8n-io/n8n/commit/71b6c671797024d7b516352fa9b7ecda101ce3b2)) +* **MySQL Node:** Return decimal types as numbers ([#10313](https://github.com/n8n-io/n8n/issues/10313)) ([f744d7c](https://github.com/n8n-io/n8n/commit/f744d7c100be68669d9a3efd0033dd371a3cfaf7)) +* **Okta Node:** Add Okta Node ([#10278](https://github.com/n8n-io/n8n/issues/10278)) ([5cac0f3](https://github.com/n8n-io/n8n/commit/5cac0f339d649cfe5857d33738210cbc1599370b)) + + + +# [1.54.0](https://github.com/n8n-io/n8n/compare/n8n@1.53.0...n8n@1.54.0) (2024-08-07) + + +### Bug Fixes + +* **core:** Ensure OAuth token data is not stubbed in source control ([#10302](https://github.com/n8n-io/n8n/issues/10302)) ([98115e9](https://github.com/n8n-io/n8n/commit/98115e95df8289a8ec400a570a7f256382f8e286)) +* **core:** Fix expressions in webhook nodes(Form, Webhook) to access previous node's data ([#10247](https://github.com/n8n-io/n8n/issues/10247)) ([88a1701](https://github.com/n8n-io/n8n/commit/88a170176a3447e7f847e9cf145aeb867b1c5fcf)) +* **core:** Fix user telemetry bugs ([#10293](https://github.com/n8n-io/n8n/issues/10293)) ([42a0b59](https://github.com/n8n-io/n8n/commit/42a0b594d6ea2527c55a2aa9976c904cf70ecf92)) +* **core:** Make execution and its data creation atomic ([#10276](https://github.com/n8n-io/n8n/issues/10276)) ([ae50bb9](https://github.com/n8n-io/n8n/commit/ae50bb95a8e5bf1cdbf9483da54b84094b82e260)) +* **core:** Make OAuth1/OAuth2 callback not require auth ([#10263](https://github.com/n8n-io/n8n/issues/10263)) ([a8e2774](https://github.com/n8n-io/n8n/commit/a8e2774f5382e202556b5506c7788265786aa973)) +* **core:** Revert transactions until we remove the legacy sqlite driver ([#10299](https://github.com/n8n-io/n8n/issues/10299)) ([1eba7c3](https://github.com/n8n-io/n8n/commit/1eba7c3c763ac5b6b28c1c6fc43fc8c215249292)) +* **core:** Surface enterprise trial error message ([#10267](https://github.com/n8n-io/n8n/issues/10267)) ([432ac1d](https://github.com/n8n-io/n8n/commit/432ac1da59e173ce4c0f2abbc416743d9953ba70)) +* **core:** Upgrade tournament to address some XSS vulnerabilities ([#10277](https://github.com/n8n-io/n8n/issues/10277)) ([43ae159](https://github.com/n8n-io/n8n/commit/43ae159ea40c574f8e41bdfd221ab2bf3268eee7)) +* **core:** VM2 sandbox should not throw on `new Promise` ([#10298](https://github.com/n8n-io/n8n/issues/10298)) ([7e95f9e](https://github.com/n8n-io/n8n/commit/7e95f9e2e40a99871f1b6abcdacb39ac5f857332)) +* **core:** Webhook and form baseUrl missing ([#10290](https://github.com/n8n-io/n8n/issues/10290)) ([8131d66](https://github.com/n8n-io/n8n/commit/8131d66f8ca1b1da00597a12859ee4372148a0c9)) +* **editor:** Enable moving resources only if team projects are available by the license ([#10271](https://github.com/n8n-io/n8n/issues/10271)) ([42ba884](https://github.com/n8n-io/n8n/commit/42ba8841c401126c77158a53dc8fcbb45dfce8fd)) +* **editor:** Fix execution retry button ([#10275](https://github.com/n8n-io/n8n/issues/10275)) ([55f2ffe](https://github.com/n8n-io/n8n/commit/55f2ffe256c91a028cee95c3bbb37a093a1c0f81)) +* **editor:** Update design system Avatar component to show initials also when only firstName or lastName is given ([#10308](https://github.com/n8n-io/n8n/issues/10308)) ([46bbf09](https://github.com/n8n-io/n8n/commit/46bbf09beacad12472d91786b91d845fe2afb26d)) +* **editor:** Update tags filter/editor to not show non existing tag as a selectable option ([#10297](https://github.com/n8n-io/n8n/issues/10297)) ([557a76e](https://github.com/n8n-io/n8n/commit/557a76ec2326de72fb7a8b46fc4353f8fd9b591d)) +* **Invoice Ninja Node:** Fix payment types ([#10196](https://github.com/n8n-io/n8n/issues/10196)) ([c5acbb7](https://github.com/n8n-io/n8n/commit/c5acbb7ec0d24ec9b30c221fa3b2fb615fb9ec7f)) +* Loop node no input data shown ([#10224](https://github.com/n8n-io/n8n/issues/10224)) ([c8ee852](https://github.com/n8n-io/n8n/commit/c8ee852159207be0cfe2c3e0ee8e7b29d838aa35)) + + +### Features + +* **core:** Allow filtering executions and users by project in Public API ([#10250](https://github.com/n8n-io/n8n/issues/10250)) ([7056e50](https://github.com/n8n-io/n8n/commit/7056e50b006bda665f64ce6234c5c1967891c415)) +* **core:** Allow transferring credentials in Public API ([#10259](https://github.com/n8n-io/n8n/issues/10259)) ([07d7b24](https://github.com/n8n-io/n8n/commit/07d7b247f02a9d7185beca7817deb779a3d665dd)) +* **core:** Show sub-node error on the logs pane. Open logs pane on sub-node error ([#10248](https://github.com/n8n-io/n8n/issues/10248)) ([57d1c9a](https://github.com/n8n-io/n8n/commit/57d1c9a99e97308f2f1b8ae05ac3861a835e8e5a)) +* **core:** Support community packages in scaling-mode ([#10228](https://github.com/n8n-io/n8n/issues/10228)) ([88086a4](https://github.com/n8n-io/n8n/commit/88086a41ff5b804b35aa9d9503dc2d48836fe4ec)) +* **core:** Support create, delete, edit role for users in Public API ([#10279](https://github.com/n8n-io/n8n/issues/10279)) ([84efbd9](https://github.com/n8n-io/n8n/commit/84efbd9b9c51f536b21a4f969ab607d277bef692)) +* **core:** Support create, read, update, delete projects in Public API ([#10269](https://github.com/n8n-io/n8n/issues/10269)) ([489ce10](https://github.com/n8n-io/n8n/commit/489ce100634c3af678fb300e9a39d273042542e6)) +* **editor:** Auto-add LLM chain for new LLM nodes on empty canvas ([#10245](https://github.com/n8n-io/n8n/issues/10245)) ([06419d9](https://github.com/n8n-io/n8n/commit/06419d9483ae916e79aace6d8c17e265b419b15d)) +* **Elasticsearch Node:** Add bulk operations for Elasticsearch ([#9940](https://github.com/n8n-io/n8n/issues/9940)) ([bf8f848](https://github.com/n8n-io/n8n/commit/bf8f848645dfd31527713a55bd1fc93865327017)) +* **Lemlist Trigger Node:** Update Trigger events ([#10311](https://github.com/n8n-io/n8n/issues/10311)) ([15f10ec](https://github.com/n8n-io/n8n/commit/15f10ec325cb5eda0f952bed3a5f171dd91bc639)) +* **MongoDB Node:** Add projection to query options on Find ([#9972](https://github.com/n8n-io/n8n/issues/9972)) ([0a84e0d](https://github.com/n8n-io/n8n/commit/0a84e0d8b047669f5cf023c21383d01c929c5b4f)) +* **Postgres Chat Memory, Redis Chat Memory, Xata:** Add support for context window length ([#10203](https://github.com/n8n-io/n8n/issues/10203)) ([e3edeaa](https://github.com/n8n-io/n8n/commit/e3edeaa03526f041d15d1099ea91869e38a0decc)) +* **Stripe Trigger Node:** Add Stripe webhook descriptions based on the workflow ID and name ([#9956](https://github.com/n8n-io/n8n/issues/9956)) ([3433465](https://github.com/n8n-io/n8n/commit/34334651e0e6874736a437a894176bed4590e5a7)) +* **Webflow Node:** Update to use the v2 API ([#9996](https://github.com/n8n-io/n8n/issues/9996)) ([6d8323f](https://github.com/n8n-io/n8n/commit/6d8323fadea8af04483eb1a873df0cf3ccc2a891)) + + + +# [1.53.0](https://github.com/n8n-io/n8n/compare/n8n@1.52.0...n8n@1.53.0) (2024-07-31) + + +### Bug Fixes + +* Better error message when calling data transformation functions on a null value ([#10210](https://github.com/n8n-io/n8n/issues/10210)) ([1718125](https://github.com/n8n-io/n8n/commit/1718125c6d8589cf24dc8d34f6808dd6f1802691)) +* **core:** Fix missing successful items on continueErrorOutput with multiple outputs ([#10218](https://github.com/n8n-io/n8n/issues/10218)) ([1a7713e](https://github.com/n8n-io/n8n/commit/1a7713ef263680da43f08b6c8a15aee7a0341493)) +* **core:** Flush instance stopped event immediately ([#10238](https://github.com/n8n-io/n8n/issues/10238)) ([d6770b5](https://github.com/n8n-io/n8n/commit/d6770b5fcaec6438d677b918aaeb1669ad7424c2)) +* **core:** Restore log event `n8n.workflow.failed` ([#10253](https://github.com/n8n-io/n8n/issues/10253)) ([3e96b29](https://github.com/n8n-io/n8n/commit/3e96b293329525c9d4b2fcef87b3803e458c8e7f)) +* **core:** Upgrade @n8n/vm2 to address CVE‑2023‑37466 ([#10265](https://github.com/n8n-io/n8n/issues/10265)) ([2a09a03](https://github.com/n8n-io/n8n/commit/2a09a036d2e916acff7ee50904f1d011a93758e1)) +* **editor:** Defer `User saved credentials` telemetry event for OAuth credentials ([#10215](https://github.com/n8n-io/n8n/issues/10215)) ([40a5226](https://github.com/n8n-io/n8n/commit/40a5226e24448a4428143e69d80ebc78238365a1)) +* **editor:** Fix custom API call notice ([#10227](https://github.com/n8n-io/n8n/issues/10227)) ([5b47c8b](https://github.com/n8n-io/n8n/commit/5b47c8b57b25528cd2d6f97bc6d98707d47f35bc)) +* **editor:** Fix issue with existing credential not opening in HTTP agent tool ([#10167](https://github.com/n8n-io/n8n/issues/10167)) ([906b4c3](https://github.com/n8n-io/n8n/commit/906b4c3c7b2919111cf23eaa12b3c4d507969179)) +* **editor:** Fix parameter input glitch when there was an error loading remote options ([#10209](https://github.com/n8n-io/n8n/issues/10209)) ([c0e3743](https://github.com/n8n-io/n8n/commit/c0e37439a87105a0e66c8ebced42c06dab30dc5e)) +* **editor:** Fix workflow execution list scrolling after filter change ([#10226](https://github.com/n8n-io/n8n/issues/10226)) ([7e64358](https://github.com/n8n-io/n8n/commit/7e643589c67adc0218216ec4b89a95f0edfedbee)) +* **Google BigQuery Node:** Send timeoutMs in query, pagination support ([#10205](https://github.com/n8n-io/n8n/issues/10205)) ([f5722e8](https://github.com/n8n-io/n8n/commit/f5722e8823ccd2bc2b5f43ba3c849797d5690a93)) +* **Google Sheets Node:** Add column names row if sheet is empty ([#10200](https://github.com/n8n-io/n8n/issues/10200)) ([82eba9f](https://github.com/n8n-io/n8n/commit/82eba9fc5ff49b8e2a9db93c10b253fb67a8c644)) +* **Google Sheets Node:** Do not insert row_number as a new column, do not checkForSchemaChanges in update operation ([#10201](https://github.com/n8n-io/n8n/issues/10201)) ([5136d10](https://github.com/n8n-io/n8n/commit/5136d10ca3492f92af67d4a1d4abc774419580cc)) +* **Google Sheets Node:** Fix Google Sheet URL regex ([#10195](https://github.com/n8n-io/n8n/issues/10195)) ([e6fd996](https://github.com/n8n-io/n8n/commit/e6fd996973d4f40facf0ebf1eea3cc26acd0603d)) +* **HTTP Request Node:** Resolve max pages expression ([#10192](https://github.com/n8n-io/n8n/issues/10192)) ([bfc8e1b](https://github.com/n8n-io/n8n/commit/bfc8e1b56f7714e1f52aae747d58d686b86e60f0)) +* **LinkedIn Node:** Fix issue with some characters cutting off posts early ([#10185](https://github.com/n8n-io/n8n/issues/10185)) ([361b5e7](https://github.com/n8n-io/n8n/commit/361b5e7c37ba49b68dcf5b8122621aad4d8d96e0)) +* **Postgres Node:** Expressions in query parameters for Postgres executeQuery operation ([#10217](https://github.com/n8n-io/n8n/issues/10217)) ([519fc4d](https://github.com/n8n-io/n8n/commit/519fc4d75325a80b84cc4dcacf52d6f4c02e3a44)) +* **Postgres Node:** Option to treat query parameters enclosed in single quotas as text ([#10214](https://github.com/n8n-io/n8n/issues/10214)) ([00ec253](https://github.com/n8n-io/n8n/commit/00ec2533374d3def465efee718592fc4001d5602)) +* **Read/Write Files from Disk Node:** Notice update in file selector, replace backslashes with forward slashes if windows path ([#10186](https://github.com/n8n-io/n8n/issues/10186)) ([3eac673](https://github.com/n8n-io/n8n/commit/3eac673b17986c5c74bd2adb5ad589ba0ca55319)) +* **Text Classifier Node:** Use proper documentation URL and respect continueOnFail ([#10216](https://github.com/n8n-io/n8n/issues/10216)) ([452f52c](https://github.com/n8n-io/n8n/commit/452f52c124017e002e86c547ba42b1633b14beed)) +* **Trello Node:** Use body for POST requests ([#10189](https://github.com/n8n-io/n8n/issues/10189)) ([7775d50](https://github.com/n8n-io/n8n/commit/7775d5059b7f69d9af22e7ad7d12c6cf9092a4e5)) +* **Wait Node:** Authentication fix ([#10236](https://github.com/n8n-io/n8n/issues/10236)) ([f87854f](https://github.com/n8n-io/n8n/commit/f87854f8db360b7b870583753fcfb4af95adab8c)) + + +### Features + +* **Calendly Trigger Node:** Add OAuth Credentials Support ([#10251](https://github.com/n8n-io/n8n/issues/10251)) ([326c983](https://github.com/n8n-io/n8n/commit/326c983915a2c382e32398358e7dcadd022c0b77)) +* **core:** Allow filtering workflows by project and transferring workflows in Public API ([#10231](https://github.com/n8n-io/n8n/issues/10231)) ([d719899](https://github.com/n8n-io/n8n/commit/d719899223907b20a17883a35e4ef637a3453532)) +* **editor:** Show new executions as `Queued` in the UI, until they actually start ([#10204](https://github.com/n8n-io/n8n/issues/10204)) ([44728d7](https://github.com/n8n-io/n8n/commit/44728d72423f5549dda09589f4a618ebd80899cb)) +* **HTTP Request Node:** Add option to disable lowercase headers ([#10154](https://github.com/n8n-io/n8n/issues/10154)) ([5aba69b](https://github.com/n8n-io/n8n/commit/5aba69bcf4d232d9860f3cd9fe57cb8839a2f96f)) +* **Information Extractor Node:** Add new simplified AI-node for information extraction ([#10149](https://github.com/n8n-io/n8n/issues/10149)) ([3d235b0](https://github.com/n8n-io/n8n/commit/3d235b0b2df756df35ac60e3dcd87ad183a07167)) +* Introduce Google Cloud Platform as external secrets provider ([#10146](https://github.com/n8n-io/n8n/issues/10146)) ([3ccb9df](https://github.com/n8n-io/n8n/commit/3ccb9df2f902e46f8cbb9c46c0727f29d752a773)) +* **n8n Form Trigger Node:** Improvements ([#10092](https://github.com/n8n-io/n8n/issues/10092)) ([711b667](https://github.com/n8n-io/n8n/commit/711b667ebefe55740e5eb39f1f0f24ceee10e7b0)) +* Recovery option for jsonParse helper ([#10182](https://github.com/n8n-io/n8n/issues/10182)) ([d165b33](https://github.com/n8n-io/n8n/commit/d165b33ceac4d24d0fc290bffe63b5f551204e38)) +* **Sentiment Analysis Node:** Implement Sentiment Analysis node ([#10184](https://github.com/n8n-io/n8n/issues/10184)) ([8ef0a0c](https://github.com/n8n-io/n8n/commit/8ef0a0c58ac2a84aad649ccbe72aa907d005cc44)) +* **Shopify Node:** Update Shopify API version ([#10155](https://github.com/n8n-io/n8n/issues/10155)) ([e2ee915](https://github.com/n8n-io/n8n/commit/e2ee91569a382bfbf787cf45204c72c821a860a0)) +* Support create, read, delete variables in Public API ([#10241](https://github.com/n8n-io/n8n/issues/10241)) ([af695eb](https://github.com/n8n-io/n8n/commit/af695ebf934526d926ea87fe87df61aa73d70979)) + + + +# [1.52.0](https://github.com/n8n-io/n8n/compare/n8n@1.51.0...n8n@1.52.0) (2024-07-24) + + +### Bug Fixes + +* **core:** Fix handling of common events for relays ([#10135](https://github.com/n8n-io/n8n/issues/10135)) ([d2a3a4a](https://github.com/n8n-io/n8n/commit/d2a3a4a080cdcc04f50fa33fd81d361efce3f709)) +* **core:** Fix SSH Tunnels when using private key ([#10148](https://github.com/n8n-io/n8n/issues/10148)) ([a96db34](https://github.com/n8n-io/n8n/commit/a96db344e54658787426d967dfa299c7a6dd14e7)) +* **core:** Metadata inserts using existing IDs and failing with postgres ([#10108](https://github.com/n8n-io/n8n/issues/10108)) ([4547a49](https://github.com/n8n-io/n8n/commit/4547a49db15a20f5f147e859b6c2c01f60f9565c)) +* **core:** Respect prefix for all Prometheus metrics ([#10130](https://github.com/n8n-io/n8n/issues/10130)) ([b1816db](https://github.com/n8n-io/n8n/commit/b1816db449ed451443f353b69166b7ca700ba51e)) +* **core:** Support branches containing slashes in source control ([#10109](https://github.com/n8n-io/n8n/issues/10109)) ([03a833d](https://github.com/n8n-io/n8n/commit/03a833db51a25dda6cf0d8494f06c6704f6f3c7f)) +* **core:** Support execution recovery when saving execution progress ([#10104](https://github.com/n8n-io/n8n/issues/10104)) ([d887c82](https://github.com/n8n-io/n8n/commit/d887c82d808a79babc726fc789cc014194ae2ac6)) +* **editor:** Allow `$secrets` to resolve on credentials ([#10093](https://github.com/n8n-io/n8n/issues/10093)) ([bf57f38](https://github.com/n8n-io/n8n/commit/bf57f38d1c417ba8b20144934c8e97a75c1f51cc)) +* **editor:** Fix saving and connecting on LDAP setup form ([#10163](https://github.com/n8n-io/n8n/issues/10163)) ([30784fb](https://github.com/n8n-io/n8n/commit/30784fb76cec790a782fae40973a956a8d81c0b2)) +* **editor:** Fix updating/uninstalling community nodes ([#10138](https://github.com/n8n-io/n8n/issues/10138)) ([de015ff](https://github.com/n8n-io/n8n/commit/de015ff2978a5ee3345449626025c6d0793b6f5a)) +* **editor:** Remove "move" action from workflow and credential on community plan ([#10057](https://github.com/n8n-io/n8n/issues/10057)) ([5a9a271](https://github.com/n8n-io/n8n/commit/5a9a2713b499cc7dcddb500a54e24bbf7145b504)) +* **editor:** UX Improvements to RBAC feature set ([#9683](https://github.com/n8n-io/n8n/issues/9683)) ([028a8a2](https://github.com/n8n-io/n8n/commit/028a8a2c754e4f6d6a5f0918a656eb4554eb869f)) +* **HelpScout Node:** Fix issue with thread types not working correctly ([#10084](https://github.com/n8n-io/n8n/issues/10084)) ([68d3beb](https://github.com/n8n-io/n8n/commit/68d3bebfeebea9054bbbaebac31c2e3fa34336bb)) +* **MQTT Node:** Node hangs forever on failed connection ([#10048](https://github.com/n8n-io/n8n/issues/10048)) ([76c2906](https://github.com/n8n-io/n8n/commit/76c290655de7d4e626725a05fd991a0858cca0d7)) +* **n8n Form Trigger Node:** Execution from canvas ([#10132](https://github.com/n8n-io/n8n/issues/10132)) ([b07c5e2](https://github.com/n8n-io/n8n/commit/b07c5e201165165c4e91ddd19b6fa79703ba2a9c)) +* **Notion Node:** Fix issue preventing some database page urls from working ([#10070](https://github.com/n8n-io/n8n/issues/10070)) ([7848c19](https://github.com/n8n-io/n8n/commit/7848c19f543d5f5f62b89cc5644639c6afdb8fa6)) +* **RabbitMQ Node:** Fix issue with arguments not being sent ([#9397](https://github.com/n8n-io/n8n/issues/9397)) ([1c666e6](https://github.com/n8n-io/n8n/commit/1c666e6e7c2be2e2d0dcc528870fddfa8b02318b)) + + +### Features + +* **editor:** Split Tools and Models into sub-sections ([#10159](https://github.com/n8n-io/n8n/issues/10159)) ([3846eb9](https://github.com/n8n-io/n8n/commit/3846eb967afd77dba6f037e8185ed94494454d5a)) +* Introduce Azure Key Vault as external secrets provider ([#10054](https://github.com/n8n-io/n8n/issues/10054)) ([1b6c2d3](https://github.com/n8n-io/n8n/commit/1b6c2d3a37a78ed07ada93be2a57e4b7f7149e58)) +* **Pinecone Vector Store Node, Supabase Vector Store Node:** Add update operation to vector store nodes ([#10060](https://github.com/n8n-io/n8n/issues/10060)) ([7e1eeb4](https://github.com/n8n-io/n8n/commit/7e1eeb4c31d3f25ec31baa7390b11a7e3280ce01)) +* **Send Email Node:** Smtp credential improvements ([#10147](https://github.com/n8n-io/n8n/issues/10147)) ([dc13ceb](https://github.com/n8n-io/n8n/commit/dc13ceb41649eab42ef073247f3b52c040826e98)) + + + +# [1.51.0](https://github.com/n8n-io/n8n/compare/n8n@1.50.0...n8n@1.51.0) (2024-07-17) + + +### Bug Fixes + +* **AMQP Sender Node:** Node hangs forever on disconnect ([#10026](https://github.com/n8n-io/n8n/issues/10026)) ([27410ab](https://github.com/n8n-io/n8n/commit/27410ab2af87573045f38e14e7e20bedd3b0365d)) +* **AMQP Trigger Node:** Manual execution updated error reduced wait time ([#10035](https://github.com/n8n-io/n8n/issues/10035)) ([f78f4ea](https://github.com/n8n-io/n8n/commit/f78f4ea3492560bc7056023fd0276990f3ac9b00)) +* **AWS Comprehend Node:** Add paired item support ([#10015](https://github.com/n8n-io/n8n/issues/10015)) ([470d496](https://github.com/n8n-io/n8n/commit/470d4966c67a3e4155d59e6fadab467b73134ec4)) +* **core:** Ensure executions cannot resume if already running ([#10014](https://github.com/n8n-io/n8n/issues/10014)) ([d651be4](https://github.com/n8n-io/n8n/commit/d651be4e01a869a6f7d70e691e0f5e244f59490e)) +* **core:** Redact `csrfSecret` when returning oauth credentials to the frontend ([#10075](https://github.com/n8n-io/n8n/issues/10075)) ([48f047e](https://github.com/n8n-io/n8n/commit/48f047ee2ecbfbd364151816df5fc21e09ca72a6)) +* **core:** Stopping an execution should reject any response promises ([#9992](https://github.com/n8n-io/n8n/issues/9992)) ([36b314d](https://github.com/n8n-io/n8n/commit/36b314d0311ef84f275efbc20997c6a77db81b31)) +* **editor:** Ensure all static assets are accessible from the server ([#10062](https://github.com/n8n-io/n8n/issues/10062)) ([3bde845](https://github.com/n8n-io/n8n/commit/3bde8453efa9a4d14404c63bdc061c87843d49d2)) +* **editor:** Handle disabled nodes in schema view ([#10052](https://github.com/n8n-io/n8n/issues/10052)) ([ab5688c](https://github.com/n8n-io/n8n/commit/ab5688c582c05afd7d3e0967eda0f5dc73d6d3ed)) +* **editor:** Make schema view use the correct output ([#10016](https://github.com/n8n-io/n8n/issues/10016)) ([c29664d](https://github.com/n8n-io/n8n/commit/c29664d68851ec33e4d810fa24aba72bb6cecc86)) +* **editor:** Provide autocomplete for nodes, even when intermediate node has not run ([#10036](https://github.com/n8n-io/n8n/issues/10036)) ([46d6edc](https://github.com/n8n-io/n8n/commit/46d6edc2a4edd49ae58c0c60977809554e07f4ee)) +* **editor:** Remove push event listeners when migrating away from the canvas ([#10063](https://github.com/n8n-io/n8n/issues/10063)) ([0d12f0a](https://github.com/n8n-io/n8n/commit/0d12f0a6b36aaaae5e1f9fab8ad73feeba9ec5ed)) +* **editor:** Use selected input item for autocomplete ([#10019](https://github.com/n8n-io/n8n/issues/10019)) ([1d2b403](https://github.com/n8n-io/n8n/commit/1d2b403644278fa6158272edc4295d4565554e37)) +* **Email Trigger (IMAP) Node:** Reconnect not working correctly ([#10064](https://github.com/n8n-io/n8n/issues/10064)) ([68d5d7e](https://github.com/n8n-io/n8n/commit/68d5d7e2e90ede5d021a12304dd665247dde5243)) +* Filter component - array contains comparison not correct when ignore case option set to true ([#10012](https://github.com/n8n-io/n8n/issues/10012)) ([4a3b97c](https://github.com/n8n-io/n8n/commit/4a3b97cede531adbf81274c1ec2ce4ee400cb48e)) +* **GitHub Node:** File Create operation prevent duplicated base64 encoding ([#10040](https://github.com/n8n-io/n8n/issues/10040)) ([9bcc926](https://github.com/n8n-io/n8n/commit/9bcc926a91d7afab0c2ef6eb57e818ef79e3a8f7)) +* **HTTP Request Node:** Respect the original encoding of the incoming response ([#9869](https://github.com/n8n-io/n8n/issues/9869)) ([2d19aef](https://github.com/n8n-io/n8n/commit/2d19aef54083d97e94e50a1ee58e8525bbf28548)) +* HTTP Request tool - allow hyphens in placeholders ([#10037](https://github.com/n8n-io/n8n/issues/10037)) ([8cd9370](https://github.com/n8n-io/n8n/commit/8cd93704bee116eceb0e3bd5fa849c4b314454ec)) +* HTTP Request tool - do not error on missing headers ([#10044](https://github.com/n8n-io/n8n/issues/10044)) ([04b62e0](https://github.com/n8n-io/n8n/commit/04b62e0398eafd923d5f27a3e1c71b925ddb8817)) +* **HubSpot Node:** Migrate from v2 owners api ([#10013](https://github.com/n8n-io/n8n/issues/10013)) ([56dd491](https://github.com/n8n-io/n8n/commit/56dd491bcaeab1d11d7874f190eaf20d2e315ca1)) +* Number input defaults to 0 not allowing to have arbitrary precision ([#10021](https://github.com/n8n-io/n8n/issues/10021)) ([e4e66ab](https://github.com/n8n-io/n8n/commit/e4e66ab7da5651fede8b3065419ffb393a2fd16d)) +* **OpenAI Chat Model Node:** Respect baseURL override for /models ([#10076](https://github.com/n8n-io/n8n/issues/10076)) ([e5dda57](https://github.com/n8n-io/n8n/commit/e5dda5731dfbb50f5aaf2b152f9c5bc89b1d80a6)) +* **Telegram Trigger Node:** Fix issue with videos not being downloaded ([#10007](https://github.com/n8n-io/n8n/issues/10007)) ([e84ab35](https://github.com/n8n-io/n8n/commit/e84ab35c4ab0ec47bdbd4343e58c62bbb70f3ec9)) +* **Webhook Node:** Binary property option name and description update ([#10043](https://github.com/n8n-io/n8n/issues/10043)) ([9302e33](https://github.com/n8n-io/n8n/commit/9302e33d558564bb5ba172eaeb8c300693b87286)) + + +### Features + +* **Asana Node:** Add support for project privacy settings ([#10027](https://github.com/n8n-io/n8n/issues/10027)) ([429481c](https://github.com/n8n-io/n8n/commit/429481c5c4b7f448739a561596873038185ba467)) +* Better error when calling expression function on input that is undefined or null ([#10009](https://github.com/n8n-io/n8n/issues/10009)) ([519e57b](https://github.com/n8n-io/n8n/commit/519e57bda5115149357fb2b1c2270e481ea09e38)) +* **editor:** Make expression autocomplete search case-insensitive ([#10017](https://github.com/n8n-io/n8n/issues/10017)) ([cde6fe9](https://github.com/n8n-io/n8n/commit/cde6fe90e5c8a9c5983e27f0d82599425fba915b)) +* **editor:** Tweak node creator search logic for AI sub-nodes ([#10025](https://github.com/n8n-io/n8n/issues/10025)) ([7db1656](https://github.com/n8n-io/n8n/commit/7db16561dc890849e2d5742bb73f9d5b8e79e37d)) +* **Google Vertex Chat Model Node:** Add support for Google Vertex AI Chat models ([#9970](https://github.com/n8n-io/n8n/issues/9970)) ([071130a](https://github.com/n8n-io/n8n/commit/071130a2dc0b450eb6ce6d39fe28cfeefd05633c)) +* **Postgres Chat Memory Node:** Implement Postgres Chat Memory node ([#10071](https://github.com/n8n-io/n8n/issues/10071)) ([9cbbb63](https://github.com/n8n-io/n8n/commit/9cbbb6335df0d36f66f22c18041d12f14dc59b32)) +* **Text Classifier Node:** Add Text Classifier Node ([#9997](https://github.com/n8n-io/n8n/issues/9997)) ([28ca7d6](https://github.com/n8n-io/n8n/commit/28ca7d6a2dd818c8795acda6ddf7329b8621d9de)) + + + +# [1.50.0](https://github.com/n8n-io/n8n/compare/n8n@1.49.0...n8n@1.50.0) (2024-07-10) + + +### Bug Fixes + +* **core:** Aborting manual trigger tests should call `closeFunction` ([#9980](https://github.com/n8n-io/n8n/issues/9980)) ([6107798](https://github.com/n8n-io/n8n/commit/61077985163037ed3c6a8e9e7476cd6c525ff5f2)) +* **core:** Allow owner and admin to edit nodes with credentials that haven't been shared with them explicitly ([#9922](https://github.com/n8n-io/n8n/issues/9922)) ([0f49598](https://github.com/n8n-io/n8n/commit/0f495986f89b60ec9bb86801f9779ee9aa87ccfb)) +* **core:** Clear active execution on cancellation in scaling mode ([#9979](https://github.com/n8n-io/n8n/issues/9979)) ([7e972c7](https://github.com/n8n-io/n8n/commit/7e972c78afaf950effec17d8eee16cbf86101d03)) +* **core:** Disconnect Redis after pausing queue during worker shutdown ([#9928](https://github.com/n8n-io/n8n/issues/9928)) ([c82579b](https://github.com/n8n-io/n8n/commit/c82579bf760cc4b5a2670b14e4e48fc37e2e2263)) +* **core:** Don't execute 'workflowExecuteBefore' hook on execution continuations ([#9905](https://github.com/n8n-io/n8n/issues/9905)) ([adb8315](https://github.com/n8n-io/n8n/commit/adb83155ca9478a548e6fe926735d5872de10fea)) +* **core:** Prevent multiple values in the execution metadata for the same key and executionId ([#9953](https://github.com/n8n-io/n8n/issues/9953)) ([2e6b03b](https://github.com/n8n-io/n8n/commit/2e6b03b2cb471aefa8104b7b80cf12e64f16e4fb)) +* **Google Sheets Node:** Append fails if cells have some default values added by data validation rules ([#9950](https://github.com/n8n-io/n8n/issues/9950)) ([d1821eb](https://github.com/n8n-io/n8n/commit/d1821eba9221eb243b62ad561193102b24dd05a5)) +* **Invoice Ninja Node:** Fix assigning an invoice to a payment ([#9590](https://github.com/n8n-io/n8n/issues/9590)) ([7a3c127](https://github.com/n8n-io/n8n/commit/7a3c127b2cbea01f9a21c8d517d1dc919bc8121f)) +* **Invoice Ninja Node:** Fix emailing and marking invoice as paid / sent ([#9589](https://github.com/n8n-io/n8n/issues/9589)) ([908ddd8](https://github.com/n8n-io/n8n/commit/908ddd8a24e8a858d9c1eddf2f727234e66a62f7)) + + +### Features + +* **Chat Trigger Node:** Add support for file uploads & harmonize public and development chat ([#9802](https://github.com/n8n-io/n8n/issues/9802)) ([df78315](https://github.com/n8n-io/n8n/commit/df783151b86e2db3e325d3b9d85f4abb71d3d246)) +* **Google Cloud Firestore Node:** Add support for service account and document creation with id ([#9713](https://github.com/n8n-io/n8n/issues/9713)) ([cb1bbf5](https://github.com/n8n-io/n8n/commit/cb1bbf5fd395ec4855ac21d851b180c8526b698a)) +* **Orbit Node:** Deprecate Orbit nicely ([#9962](https://github.com/n8n-io/n8n/issues/9962)) ([9577d9c](https://github.com/n8n-io/n8n/commit/9577d9c847b56d9907d2bbe9ec85127bb8f67cfa)) +* Qdrant Vector Store search filter ([#9900](https://github.com/n8n-io/n8n/issues/9900)) ([fbe4bca](https://github.com/n8n-io/n8n/commit/fbe4bca634e8e03c9455843e1a1f89706d1557d2)) +* **Splunk Node:** Overhaul ([#9813](https://github.com/n8n-io/n8n/issues/9813)) ([e5c3247](https://github.com/n8n-io/n8n/commit/e5c324753fb41752f9722d61c5d336d6e5c67cca)) +* **Telegram Node:** Add support to Keyboard Button Mini Apps ([#9511](https://github.com/n8n-io/n8n/issues/9511)) ([3a17943](https://github.com/n8n-io/n8n/commit/3a179439c7586189b8264131fd16da9d14f074b6)) + + + +# [1.49.0](https://github.com/n8n-io/n8n/compare/n8n@1.48.0...n8n@1.49.0) (2024-07-03) + + +### Bug Fixes + +* **core:** Add a WebCrypto Polyfill for older versions of Node.js 18 ([#9894](https://github.com/n8n-io/n8n/issues/9894)) ([59c8bf1](https://github.com/n8n-io/n8n/commit/59c8bf1c44057b3f798645a22ad16362401ebeed)) +* **core:** Don't allow using credentials that are not part of the same project ([#9916](https://github.com/n8n-io/n8n/issues/9916)) ([ab2a548](https://github.com/n8n-io/n8n/commit/ab2a5488560a814fc72c0c5cd71e5f62f05cd235)) +* **core:** Filter out certain executions from crash recovery ([#9904](https://github.com/n8n-io/n8n/issues/9904)) ([7044d1c](https://github.com/n8n-io/n8n/commit/7044d1ca2841b6d87ae929072bb94dda82909795)) +* **core:** Fix AddActivatedAtUserSetting migration on MariaDB ([#9910](https://github.com/n8n-io/n8n/issues/9910)) ([db29e84](https://github.com/n8n-io/n8n/commit/db29e84666b814fd4710dc3ade6e53304216fad5)) +* **core:** Fix execution cancellation in scaling mode ([#9841](https://github.com/n8n-io/n8n/issues/9841)) ([e613de2](https://github.com/n8n-io/n8n/commit/e613de28ca2db23746b586e0a0b33f1c1ee1abe5)) +* **core:** Fix worker logs relay ([#9919](https://github.com/n8n-io/n8n/issues/9919)) ([7c53433](https://github.com/n8n-io/n8n/commit/7c5343319144ce3524b14018eef77eace221b608)) +* **core:** Throw on adding execution without execution data ([#9903](https://github.com/n8n-io/n8n/issues/9903)) ([abb7458](https://github.com/n8n-io/n8n/commit/abb74587db88a56453b269826885df0d01766290)) +* **editor:** Don't try to load credentials on the demo route ([#9926](https://github.com/n8n-io/n8n/issues/9926)) ([b80df2a](https://github.com/n8n-io/n8n/commit/b80df2a47ebe4450862e200c9cf47f6e94012c91)) +* **editor:** Enable expression preview in SQL node when looking at executions ([#9733](https://github.com/n8n-io/n8n/issues/9733)) ([d9747d5](https://github.com/n8n-io/n8n/commit/d9747d5e9b42d7f379f6f4219b960893b7b153b3)) +* **editor:** Fix frontend project roles ([#9901](https://github.com/n8n-io/n8n/issues/9901)) ([f229577](https://github.com/n8n-io/n8n/commit/f2295772094ff936e210f52ebcbc938915d1c129)) +* **editor:** Fix new node credential creation via Resource Locator Component ([#9896](https://github.com/n8n-io/n8n/issues/9896)) ([55cbc90](https://github.com/n8n-io/n8n/commit/55cbc900a48c579b712dddfa74e133e1d9c11799)) +* **editor:** Fix performance issues related to expressions and pinned data ([#9882](https://github.com/n8n-io/n8n/issues/9882)) ([13d83f2](https://github.com/n8n-io/n8n/commit/13d83f2037d659fccc8889dd994ddd984467d987)) +* **editor:** Improve text wrapping in schema view ([#9888](https://github.com/n8n-io/n8n/issues/9888)) ([dc1c5fc](https://github.com/n8n-io/n8n/commit/dc1c5fce8af732c438d2f1698ee08f18d2358a6c)) +* **Execute Workflow Node:** Continue on fail behaviour not correctly implemented ([#9890](https://github.com/n8n-io/n8n/issues/9890)) ([16b1a09](https://github.com/n8n-io/n8n/commit/16b1a094b19e5f803a460b99c6062a1175bec153)) +* **LinkedIn Node:** Fix issue with legacy credential no longer working ([#9912](https://github.com/n8n-io/n8n/issues/9912)) ([873b7e5](https://github.com/n8n-io/n8n/commit/873b7e59dcea276c9f792570805a6de8ad4607a3)) + + +### Features + +* Add Zep Cloud Memory component ([#9657](https://github.com/n8n-io/n8n/issues/9657)) ([41c47a2](https://github.com/n8n-io/n8n/commit/41c47a28a9d4502287ca1bbbb4704f2763288a11)) +* **Copper Node:** Update credential to support HTTP Request node ([#9837](https://github.com/n8n-io/n8n/issues/9837)) ([e6ad5a7](https://github.com/n8n-io/n8n/commit/e6ad5a71935a5f82168bf300246ccb3535648b0b)) +* **editor:** Add docs sidebar to credential modal ([#9914](https://github.com/n8n-io/n8n/issues/9914)) ([b2f8ea7](https://github.com/n8n-io/n8n/commit/b2f8ea7918d7e10e91db0e04ef5b7ad40a5bdbb5)) +* **editor:** Remove Segment ([#9878](https://github.com/n8n-io/n8n/issues/9878)) ([10f7d4b](https://github.com/n8n-io/n8n/commit/10f7d4b5b92013407c9a4eb9edd619d385efe10f)) +* **Embeddings Cohere Node:** Add v3 Cohere models ([#9887](https://github.com/n8n-io/n8n/issues/9887)) ([403e19b](https://github.com/n8n-io/n8n/commit/403e19b3e316db81b62eb456b38e7325bf13529c)) +* **GitHub Node:** Add support for state reasons when editing an issue ([#9848](https://github.com/n8n-io/n8n/issues/9848)) ([61c20d1](https://github.com/n8n-io/n8n/commit/61c20d1ae3c65b04c767c5b704c4fc4efd356ccf)) +* Introduce debug info button ([#9895](https://github.com/n8n-io/n8n/issues/9895)) ([be9a247](https://github.com/n8n-io/n8n/commit/be9a247577ffc28559a23fea2db9b2c598dca036)) +* **Merge Node:** Overhaul, v3 ([#9528](https://github.com/n8n-io/n8n/issues/9528)) ([af69c80](https://github.com/n8n-io/n8n/commit/af69c80bf5a22f80979405041210dc77d2682c51)) +* **Vector Store Tool Node:** Add Vector Store Tool ([#9865](https://github.com/n8n-io/n8n/issues/9865)) ([df2bc84](https://github.com/n8n-io/n8n/commit/df2bc84d2b3830d31319c108f1b01256de95e774)) +* **Zammad Node:** Add reply_to and sender fields to article on ticket creation ([#9911](https://github.com/n8n-io/n8n/issues/9911)) ([957b2d6](https://github.com/n8n-io/n8n/commit/957b2d6108dccd9495291c4764816cc27e112e87)) + + + +# [1.48.0](https://github.com/n8n-io/n8n/compare/n8n@1.47.0...n8n@1.48.0) (2024-06-27) + + +### Bug Fixes + +* **core:** Fix init for `AuditEventRelay` ([#9839](https://github.com/n8n-io/n8n/issues/9839)) ([16d3083](https://github.com/n8n-io/n8n/commit/16d3083af7465d0788f25d843e497b4c7d69de92)) +* **core:** Fix telemetry for concurrency control ([#9845](https://github.com/n8n-io/n8n/issues/9845)) ([e25682d](https://github.com/n8n-io/n8n/commit/e25682ddad6ee961a1afe5365d7bbad871a20a4c)) +* **editor:** Fix initialize authenticated features ([#9867](https://github.com/n8n-io/n8n/issues/9867)) ([4de58dc](https://github.com/n8n-io/n8n/commit/4de58dcbf5f29bf5414414aa4703356f69a29356)) +* **editor:** Load credentials for workflow before determining credentials errors ([#9876](https://github.com/n8n-io/n8n/issues/9876)) ([4008c14](https://github.com/n8n-io/n8n/commit/4008c147d76daa6ff6d43f30c9a18bf1cef7e5d5)) +* **editor:** Optimizing main sidebar to have more space for Projects ([#9686](https://github.com/n8n-io/n8n/issues/9686)) ([5cdcb61](https://github.com/n8n-io/n8n/commit/5cdcb61f668a6e00829bee25f40cc869376a9cd7)) +* **editor:** Properly update workflow info in main header ([#9789](https://github.com/n8n-io/n8n/issues/9789)) ([1ba656e](https://github.com/n8n-io/n8n/commit/1ba656ef4aae97c78162114ad8de533b275db280)) +* **editor:** Show error state correctly in options parameter with remote options ([#9836](https://github.com/n8n-io/n8n/issues/9836)) ([5bc58ef](https://github.com/n8n-io/n8n/commit/5bc58efde9c127eef8082b23cf5d8dcd91162cf4)) +* **editor:** Use pinned data to resolve expressions in unexecuted nodes ([#9693](https://github.com/n8n-io/n8n/issues/9693)) ([6cb3072](https://github.com/n8n-io/n8n/commit/6cb3072a5db366404f3d16323498371d28582c06)) +* Fix missing node logos ([#9844](https://github.com/n8n-io/n8n/issues/9844)) ([1eeaf32](https://github.com/n8n-io/n8n/commit/1eeaf32523c30f000a1bb8f362c478a086ca7928)) +* **Zulip Node:** Fix a typo preventing some messages from updating ([#7078](https://github.com/n8n-io/n8n/issues/7078)) ([553b135](https://github.com/n8n-io/n8n/commit/553b135b0b73fa29062d2b6ef28f98c47bcd186b)) + + +### Features + +* Add RS client to hooks service ([#9834](https://github.com/n8n-io/n8n/issues/9834)) ([b807e67](https://github.com/n8n-io/n8n/commit/b807e6726f6ac86df9078c25275b6360a4fcee42)) +* **Anthropic Chat Model Node:** Add support for Claude 3.5 Sonnet ([#9832](https://github.com/n8n-io/n8n/issues/9832)) ([2ce97be](https://github.com/n8n-io/n8n/commit/2ce97be33e8aa4f3023d486441ccc4860a0e07ca)) +* **editor:** Show multiple nodes in input pane schema view ([#9816](https://github.com/n8n-io/n8n/issues/9816)) ([e51de9d](https://github.com/n8n-io/n8n/commit/e51de9d3916e3fcaa05e92dfb8b9b5c722bff33c)) + + + +# [1.47.0](https://github.com/n8n-io/n8n/compare/n8n@1.46.0...n8n@1.47.0) (2024-06-20) + + +### Bug Fixes + +* **AI Agent Node:** Exclude tools agent from unsupported node versions ([#9728](https://github.com/n8n-io/n8n/issues/9728)) ([28d1a5d](https://github.com/n8n-io/n8n/commit/28d1a5d00d9f8a3bb2f812bb11d9d31c1cbadb24)) +* **Airtable Node:** Make multipleRecordLinks editable in fields ([#9608](https://github.com/n8n-io/n8n/issues/9608)) ([fdde995](https://github.com/n8n-io/n8n/commit/fdde9957c80613a27762eeb54272cc492f499dbf)) +* **AWS SES Node:** Fix issue with email aliases not working for sending from or sending to ([#9811](https://github.com/n8n-io/n8n/issues/9811)) ([e1e8a75](https://github.com/n8n-io/n8n/commit/e1e8a7576308cbc0833cdae35d51810f63b98382)) +* Changes to workflow staticData erroneously updating updatedAt ([#9790](https://github.com/n8n-io/n8n/issues/9790)) ([adbd0d1](https://github.com/n8n-io/n8n/commit/adbd0d17abcf8d46bdef44ff45cecbc3bb6c8755)) +* **core:** Ensure execution recovery skips successful executions ([#9793](https://github.com/n8n-io/n8n/issues/9793)) ([4131408](https://github.com/n8n-io/n8n/commit/4131408e5e28e4f40287c4880a4b5347e3cdc169)) +* **core:** Ensure followers do not recover executions from logs ([#9785](https://github.com/n8n-io/n8n/issues/9785)) ([7c358e5](https://github.com/n8n-io/n8n/commit/7c358e5baafa295f826f891266457cc6c61cd6de)) +* **core:** Update transactional email links for RBAC ([#9727](https://github.com/n8n-io/n8n/issues/9727)) ([ceb7f07](https://github.com/n8n-io/n8n/commit/ceb7f074eb1b22ebc698fc168f73a0da6a3d9769)) +* **core:** Upgrade `ws` to address CVE-2024-37890 ([#9801](https://github.com/n8n-io/n8n/issues/9801)) ([f98c4b8](https://github.com/n8n-io/n8n/commit/f98c4b8ac033133e4897b5d42326b0d21e2e96be)) +* **editor:** Active toggle incorrectly displayed as inactive in execution view ([#9778](https://github.com/n8n-io/n8n/issues/9778)) ([551fb6d](https://github.com/n8n-io/n8n/commit/551fb6d7a2e59fe1b93183745962d9eff4741d44)) +* **editor:** Add telemetry to resource moving ([#9720](https://github.com/n8n-io/n8n/issues/9720)) ([e84d253](https://github.com/n8n-io/n8n/commit/e84d2538b6f59e424d92b1f622edb7d6cff756e8)) +* **editor:** Error dropdown in resource locator disappears when search filter is required ([#9681](https://github.com/n8n-io/n8n/issues/9681)) ([1a3f72b](https://github.com/n8n-io/n8n/commit/1a3f72b751bf82b1f537882d692ccd6cff7c3f94)) +* **editor:** Fix node icon in node creator header ([#9782](https://github.com/n8n-io/n8n/issues/9782)) ([b7d356f](https://github.com/n8n-io/n8n/commit/b7d356f49cdd5d9e63e1aeffecb25da0fc906d6a)) +* **editor:** Improve touch device detection ([#9675](https://github.com/n8n-io/n8n/issues/9675)) ([3b86f52](https://github.com/n8n-io/n8n/commit/3b86f52b0290c98ce371be90b2aea699efedbc73)) +* **editor:** Revert header toggle fix ([#9800](https://github.com/n8n-io/n8n/issues/9800)) ([11fe48b](https://github.com/n8n-io/n8n/commit/11fe48b3dc91375140a53b73093733536e48d4cb)) +* **editor:** Use BroadcastChannel instead of window.opener for OAuth callback window ([#9779](https://github.com/n8n-io/n8n/issues/9779)) ([87cb199](https://github.com/n8n-io/n8n/commit/87cb199745ae4ae9d73f3dfdf5c2bd95acfb9c9e)) +* **editor:** Use segments/graphemes when creating the compact sidebar entries ([#9776](https://github.com/n8n-io/n8n/issues/9776)) ([be7249f](https://github.com/n8n-io/n8n/commit/be7249f568d922238c1a95c9d182a01b25ac0ddb)) +* **Elasticsearch Node:** Fix issue with self signed certificates ([#9805](https://github.com/n8n-io/n8n/issues/9805)) ([77bf166](https://github.com/n8n-io/n8n/commit/77bf16667b4c9a70ce23e88106b6b9da3d9f0e27)) +* Fix sending pin data twice causing payload too large errors ([#9710](https://github.com/n8n-io/n8n/issues/9710)) ([6c1a4c8](https://github.com/n8n-io/n8n/commit/6c1a4c8ebfd60c769bba9441ef732b726ab8d9db)) +* **Google Sheets Node:** Check for column names changes before upsert, append, update ([#9649](https://github.com/n8n-io/n8n/issues/9649)) ([223488f](https://github.com/n8n-io/n8n/commit/223488f190223596d9ec634dd0ecb3cce1ea442b)) +* **Slack Node:** Do not try to parse block if it's already object ([#9643](https://github.com/n8n-io/n8n/issues/9643)) ([8f94dcc](https://github.com/n8n-io/n8n/commit/8f94dcc0e9dee141d3ea922328abd81c0c6d1707)) +* When editing nodes only show the credentials in the dropdown that the user is allowed to use in that workflow ([#9718](https://github.com/n8n-io/n8n/issues/9718)) ([2cf4364](https://github.com/n8n-io/n8n/commit/2cf4364ee0d4343e952e9571574a17ef6122b482)) + + +### Features + +* Add custom data to public API execution endpoints ([#9705](https://github.com/n8n-io/n8n/issues/9705)) ([a104660](https://github.com/n8n-io/n8n/commit/a1046607bf6b136c9e1047350007901e695cb52f)) +* **core:** Expand crash recovery to cover queue mode ([#9676](https://github.com/n8n-io/n8n/issues/9676)) ([c58621a](https://github.com/n8n-io/n8n/commit/c58621ab79181c0b76d4102af6c76adc4ebdc69c)) +* **core:** Use WebCrypto to generate all random numbers and strings ([#9786](https://github.com/n8n-io/n8n/issues/9786)) ([65c5609](https://github.com/n8n-io/n8n/commit/65c5609ab51881c223dcbf5ee567dbc83e6dd4e5)) +* HTTP request tool ([#9228](https://github.com/n8n-io/n8n/issues/9228)) ([be2635e](https://github.com/n8n-io/n8n/commit/be2635e50e922be6a3f9984d641ac57b78c86874)) +* **JWT Node:** Add an option to allow a "kid" (key ID) header claim ([#9797](https://github.com/n8n-io/n8n/issues/9797)) ([15d631c](https://github.com/n8n-io/n8n/commit/15d631c412b3c13c8d996d409a524d1061286cf4)) +* **Pipedrive Node:** Add sort field for get all persons ([#8138](https://github.com/n8n-io/n8n/issues/8138)) ([4e89343](https://github.com/n8n-io/n8n/commit/4e893436fb2347859616a583eab2a412b193e392)) +* **Set Node:** Preserve binary data by default ([#9668](https://github.com/n8n-io/n8n/issues/9668)) ([d116353](https://github.com/n8n-io/n8n/commit/d1163533a6a262074526a6514789e3d011e3b864)) + + +### Performance Improvements + +* **core:** Introduce concurrency control for main mode ([#9453](https://github.com/n8n-io/n8n/issues/9453)) ([7973423](https://github.com/n8n-io/n8n/commit/797342343f5ef560e8333e2ad67b4395bc0aad0a)) + + + +# [1.46.0](https://github.com/n8n-io/n8n/compare/n8n@1.45.0...n8n@1.46.0) (2024-06-12) + + +### Bug Fixes + +* **Chat Trigger Node:** Fix public chat container dimensions ([#9664](https://github.com/n8n-io/n8n/issues/9664)) ([3b10c0f](https://github.com/n8n-io/n8n/commit/3b10c0f6aa87969965ed8a4ec339b295d6fe6199)) +* **core:** Allow graceful shutdown for main with active executions ([#9661](https://github.com/n8n-io/n8n/issues/9661)) ([4b345be](https://github.com/n8n-io/n8n/commit/4b345bec0326f0fb874afb0f62ec246cca70344f)) +* **core:** Fix optional chaining in continue on fail check ([#9667](https://github.com/n8n-io/n8n/issues/9667)) ([6ae6a5e](https://github.com/n8n-io/n8n/commit/6ae6a5ebdf9e8d23ffd2bb4a230665088a2c269b)) +* **editor:** Color node connections correctly in execution preview for nodes that have pinned data ([#9669](https://github.com/n8n-io/n8n/issues/9669)) ([ebba7c8](https://github.com/n8n-io/n8n/commit/ebba7c87cdc96b08f8a2075d6f4907f7671dea4b)) +* **editor:** Fix node connection showing incorrect item count during … ([#9684](https://github.com/n8n-io/n8n/issues/9684)) ([99b54bb](https://github.com/n8n-io/n8n/commit/99b54bb0296a855f6bbaf1183b8a554dcf072bb7)) +* **editor:** Improve dragndrop of input pills with spaces ([#9656](https://github.com/n8n-io/n8n/issues/9656)) ([291d46a](https://github.com/n8n-io/n8n/commit/291d46af155cd5c512f5e7d4597e31d7ea02bc54)) +* **editor:** Improve large data warning in input/output panel ([#9671](https://github.com/n8n-io/n8n/issues/9671)) ([4918ac8](https://github.com/n8n-io/n8n/commit/4918ac81dee2ad950ea0088c99b687a5e7e447b4)) +* **editor:** Indent on tabs in expression fields ([#9659](https://github.com/n8n-io/n8n/issues/9659)) ([bb7227d](https://github.com/n8n-io/n8n/commit/bb7227d18d574af35871c2d2f2a2d1310932e0ff)) +* **editor:** Node background for executing nodes in dark mode ([#9682](https://github.com/n8n-io/n8n/issues/9682)) ([ae00b44](https://github.com/n8n-io/n8n/commit/ae00b446a79e86cf570287c904fd6dde41ddf71a)) +* **editor:** Persist tag filter when clicking tag directly in workflows page ([#9709](https://github.com/n8n-io/n8n/issues/9709)) ([0502738](https://github.com/n8n-io/n8n/commit/0502738c0d63d2da5cca4d9e857ce3b4bec2f8c8)) +* **editor:** Prevent running workflows using keyboard shortcuts if execution is disabled ([#9644](https://github.com/n8n-io/n8n/issues/9644)) ([e9e3b25](https://github.com/n8n-io/n8n/commit/e9e3b254fe10e6b9b1783e931caadf792866d3fc)) +* **editor:** Prevent saving already saved workflows ([#9670](https://github.com/n8n-io/n8n/issues/9670)) ([b652405](https://github.com/n8n-io/n8n/commit/b652405a0614e45d051268bb05051b454da21d0a)) +* **editor:** Remove transparency from dark mode callouts ([#9650](https://github.com/n8n-io/n8n/issues/9650)) ([566b52c](https://github.com/n8n-io/n8n/commit/566b52c4e1b438f10aa6290aa6486ddd095708c9)) +* **editor:** Render credentials editable when opening them from the node view ([#9678](https://github.com/n8n-io/n8n/issues/9678)) ([dc17cf3](https://github.com/n8n-io/n8n/commit/dc17cf3a490ea0dc0a3612f41a7d35e2723c15f9)) +* **Gotify Node:** Fix issue with self signed certificates not working ([#9647](https://github.com/n8n-io/n8n/issues/9647)) ([68e856d](https://github.com/n8n-io/n8n/commit/68e856d1556d487bc1d5cd3c85dd09d7445b2bc9)) +* Introduce `HooksService` ([#8962](https://github.com/n8n-io/n8n/issues/8962)) ([dda7901](https://github.com/n8n-io/n8n/commit/dda7901398cd7dc81297884f186b9f98f41278b4)) +* **Jira Software Node:** Fix the order by feature ([#9639](https://github.com/n8n-io/n8n/issues/9639)) ([7aea824](https://github.com/n8n-io/n8n/commit/7aea8243fe32876158c9db6807f654554bf9555e)) +* **n8n Form Trigger Node:** Error if Respond to Webhook and respond node not in workflow ([#9641](https://github.com/n8n-io/n8n/issues/9641)) ([b45f3dc](https://github.com/n8n-io/n8n/commit/b45f3dc9fbfbf190cec4f283b05dac66db5fe8f9)) +* **Remove Duplicates Node:** Tolerate null fields ([#9642](https://github.com/n8n-io/n8n/issues/9642)) ([a684681](https://github.com/n8n-io/n8n/commit/a684681ea12329a821bdba9a665d79a365dacd9d)) +* Reset pagination when output size changes ([#9652](https://github.com/n8n-io/n8n/issues/9652)) ([e520f8a](https://github.com/n8n-io/n8n/commit/e520f8a98f186ecefca8555afdbc08cbc19ef4b0)) +* **X (Formerly Twitter) Node:** Change how tweet id is retrieved from quote URL ([#9635](https://github.com/n8n-io/n8n/issues/9635)) ([9853ecc](https://github.com/n8n-io/n8n/commit/9853ecc5bc84a64dc334668fb1c5dd632ebbb56d)) + + +### Features + +* Add support for dark mode node icons and colors ([#9412](https://github.com/n8n-io/n8n/issues/9412)) ([600013a](https://github.com/n8n-io/n8n/commit/600013a1ab770c0ff508aae930802f3f8f48ffb4)) +* **core:** Add batching and other options to declarative nodes ([#8885](https://github.com/n8n-io/n8n/issues/8885)) ([4e56863](https://github.com/n8n-io/n8n/commit/4e568631bebb8db41a8ec9b4651abb0e8903eeed)) +* **core:** Implement `project:viewer` role ([#9611](https://github.com/n8n-io/n8n/issues/9611)) ([6187cc5](https://github.com/n8n-io/n8n/commit/6187cc5762fe2156504041f41020d0fdad063f49)) +* **editor:** Add isEmpty on DateTime, add is empty to all types in filter component ([#9645](https://github.com/n8n-io/n8n/issues/9645)) ([eccc637](https://github.com/n8n-io/n8n/commit/eccc637b63cbc2581f29feb27f148ba437bcf5d4)) +* **editor:** Add move resources option to workflows and credentials on ([#9654](https://github.com/n8n-io/n8n/issues/9654)) ([bc35e8c](https://github.com/n8n-io/n8n/commit/bc35e8c33d470399466514b4d4874c965d7edc08)) +* **editor:** Harmonize rendering of new-lines in RunData ([#9614](https://github.com/n8n-io/n8n/issues/9614)) ([bc3dcf7](https://github.com/n8n-io/n8n/commit/bc3dcf706f578837e8d6fe6473d414d9dd58e3c4)) +* **OpenAI Node:** Allow to select Image analyze model & improve types ([#9660](https://github.com/n8n-io/n8n/issues/9660)) ([1fdd657](https://github.com/n8n-io/n8n/commit/1fdd657a0ce0b9722ee697d05bbada7ecf4cdf05)) +* Update NPS Value Survey ([#9638](https://github.com/n8n-io/n8n/issues/9638)) ([50bd5b9](https://github.com/n8n-io/n8n/commit/50bd5b9080213d4286c37b93f598753dbee32eb4)) + + + +# [1.45.0](https://github.com/n8n-io/n8n/compare/n8n@1.44.0...n8n@1.45.0) (2024-06-05) + + +### Bug Fixes + +* **AI Agent Node:** Improve Tools agent empty tool input message ([#9622](https://github.com/n8n-io/n8n/issues/9622)) ([e7f6162](https://github.com/n8n-io/n8n/commit/e7f616290f20c37121f554303f775a102569bdc7)) +* **core:** Ensure graceful shutdown for workers ([#9547](https://github.com/n8n-io/n8n/issues/9547)) ([7fc00d8](https://github.com/n8n-io/n8n/commit/7fc00d8d104c2ceebf56f897c8d54fc292003811)) +* **core:** Ensure ID is a positive integer when fetching execution ([#9629](https://github.com/n8n-io/n8n/issues/9629)) ([411ffbd](https://github.com/n8n-io/n8n/commit/411ffbda7f6a82e2ee249daa39e614c184df8643)) +* **core:** Start WaitTracker only in the main container ([#9600](https://github.com/n8n-io/n8n/issues/9600)) ([08d9c9a](https://github.com/n8n-io/n8n/commit/08d9c9a7876bd0fd0d087cdc9175d94a33de0cc9)) +* **core:** Upgrade mysql2 to address CVE-2024-21512 ([#9565](https://github.com/n8n-io/n8n/issues/9565)) ([4b6e5f0](https://github.com/n8n-io/n8n/commit/4b6e5f09e6770938de5e590a7e0d4565e3dc865c)) +* **editor:** Commit theme change from Save button ([#9619](https://github.com/n8n-io/n8n/issues/9619)) ([744c94d](https://github.com/n8n-io/n8n/commit/744c94d94b3576f2a1d4227e49185be77b8c6954)) +* **editor:** Filter credentials by project ID also for new workflow ([#9615](https://github.com/n8n-io/n8n/issues/9615)) ([c92765d](https://github.com/n8n-io/n8n/commit/c92765dcdb48789aa111ace29165a4b811fea710)) +* **editor:** Improve error messages around pinned data ([#9632](https://github.com/n8n-io/n8n/issues/9632)) ([a8bb53f](https://github.com/n8n-io/n8n/commit/a8bb53f4e3dd5aee8f3b707cb0ee92ccc98e960e)) +* **editor:** Render checkboxes in markdown ([#9549](https://github.com/n8n-io/n8n/issues/9549)) ([47d7741](https://github.com/n8n-io/n8n/commit/47d774100bd7a120de50d679e0052d6a1ae5e88a)) +* **editor:** Replace more variants of BASE_PATH in static assets ([#9564](https://github.com/n8n-io/n8n/issues/9564)) ([d361b42](https://github.com/n8n-io/n8n/commit/d361b42c7035a3edbdd999a322c9327a8f565f77)) +* **editor:** Show correct schema for output with falsy keys ([#9556](https://github.com/n8n-io/n8n/issues/9556)) ([020bd36](https://github.com/n8n-io/n8n/commit/020bd3635444d83f1aef310714470140dcac7c6e)) +* **editor:** Show owner email in the owner badge if the resource owner is a pending user ([#9560](https://github.com/n8n-io/n8n/issues/9560)) ([2e9bd67](https://github.com/n8n-io/n8n/commit/2e9bd6739b5a510b6726bbe55dfe09267107e70f)) +* **editor:** Show workflow data in header when execution page is hard reloaded ([#9529](https://github.com/n8n-io/n8n/issues/9529)) ([e68a3fd](https://github.com/n8n-io/n8n/commit/e68a3fd6ce7c710c398171b3deb8d8eb565e23ba)) +* **editor:** Skip disabled nodes when detecting workflow issues ([#9610](https://github.com/n8n-io/n8n/issues/9610)) ([245c63f](https://github.com/n8n-io/n8n/commit/245c63f216c1074f8857f123e1dfae9b2b2b29bc)) +* **HTTP Request Node:** Sanitize secrets of predefined credentials ([#9612](https://github.com/n8n-io/n8n/issues/9612)) ([84f091d](https://github.com/n8n-io/n8n/commit/84f091d3e5f9c661e373acd0c058ee158965b6e8)) +* **Jira Software Node:** Fix comments limit and add sorting ([#9634](https://github.com/n8n-io/n8n/issues/9634)) ([a946ead](https://github.com/n8n-io/n8n/commit/a946ead46efecf6864505d465b0369ed67a1f2c7)) +* Make AWS credential work with global AWS services ([#9631](https://github.com/n8n-io/n8n/issues/9631)) ([9dbea73](https://github.com/n8n-io/n8n/commit/9dbea7393a9e55edeb5cf9646f5068891e14f84c)) + + +### Features + +* **core:** Allow customizing rate limits on a per-route basis, and add rate limiting to more endpoints ([#9522](https://github.com/n8n-io/n8n/issues/9522)) ([7be616e](https://github.com/n8n-io/n8n/commit/7be616e5831678b42deb7de98c974369f7bf8967)) +* **core:** Allow transferring credentials from any project to any team project ([#9563](https://github.com/n8n-io/n8n/issues/9563)) ([202c91e](https://github.com/n8n-io/n8n/commit/202c91e7edc2a99eec56436f94f0e552ac4816b5)) +* **core:** Allow transferring workflows from any project to any team project ([#9534](https://github.com/n8n-io/n8n/issues/9534)) ([d6db8cb](https://github.com/n8n-io/n8n/commit/d6db8cbf23b46fa2f93c7460bf1df9047b2cfab2)) +* **editor:** Add remove node and connections functionality to canvas v2 ([#9602](https://github.com/n8n-io/n8n/issues/9602)) ([f6a466c](https://github.com/n8n-io/n8n/commit/f6a466cd8750930eb7ea717e5113c5a4a477af26)) +* **editor:** Chat Trigger tweaks ([#9618](https://github.com/n8n-io/n8n/issues/9618)) ([5322802](https://github.com/n8n-io/n8n/commit/5322802992032e4e5f7c528a1b0668dcbed49db2)) +* **editor:** Node Creator AI nodes improvements ([#9484](https://github.com/n8n-io/n8n/issues/9484)) ([be4f54d](https://github.com/n8n-io/n8n/commit/be4f54de157dde60e7ae6b0611fa599a059cd17f)) +* **editor:** Overhaul input selector in NDV ([#9520](https://github.com/n8n-io/n8n/issues/9520)) ([c0ec990](https://github.com/n8n-io/n8n/commit/c0ec990f4cc78909e963b82f1492dafafab23b5a)) +* **editor:** Update sticky content when checkbox state changes ([#9596](https://github.com/n8n-io/n8n/issues/9596)) ([5361e9f](https://github.com/n8n-io/n8n/commit/5361e9f69ae2211beda2f760ee215cd89c1d77e9)) +* **HighLevel Node:** Api v2 support, new node version ([#9554](https://github.com/n8n-io/n8n/issues/9554)) ([19e5c03](https://github.com/n8n-io/n8n/commit/19e5c0397ad75b47c6068db194a3f938722095c8)) +* Run once for each item tooltip ([#9486](https://github.com/n8n-io/n8n/issues/9486)) ([b91e50f](https://github.com/n8n-io/n8n/commit/b91e50fc92e3e41f2b4529caa054557309d891d0)) + + + +# [1.44.0](https://github.com/n8n-io/n8n/compare/n8n@1.43.0...n8n@1.44.0) (2024-05-30) + + +### Bug Fixes + +* **core:** Block Public API related REST calls when Public API is not enabled ([#9521](https://github.com/n8n-io/n8n/issues/9521)) ([ac4e0fb](https://github.com/n8n-io/n8n/commit/ac4e0fbb47b818973958e37e6b80201ad2ffed6f)) +* **core:** Prevent re-parsing of dynamically loaded options ([#9503](https://github.com/n8n-io/n8n/issues/9503)) ([a58be17](https://github.com/n8n-io/n8n/commit/a58be175cc8a65975b7aac15fc3143c38cf3682b)) +* **core:** Set source control repository to track remote if ready ([#9532](https://github.com/n8n-io/n8n/issues/9532)) ([dbaac82](https://github.com/n8n-io/n8n/commit/dbaac82f79fd73d5dc11b29faa0e2cee4c55cc3f)) +* **core:** Try setting postgres search_path on the database ([#9530](https://github.com/n8n-io/n8n/issues/9530)) ([e55bf03](https://github.com/n8n-io/n8n/commit/e55bf0393ae625ff34d41f1e861008cf7916dbdf)) +* **core:** Upgrade sheetjs to address CVE-2024-22363 ([#9498](https://github.com/n8n-io/n8n/issues/9498)) ([8737c09](https://github.com/n8n-io/n8n/commit/8737c0965e3dd2d6eec0f05737cc96c0f12c43c5)) +* Don't throw errors for NaN in number operators in the filter component ([#9506](https://github.com/n8n-io/n8n/issues/9506)) ([936bbb2](https://github.com/n8n-io/n8n/commit/936bbb20684ac6f0d376f5a4ee3760e9587223f7)) +* **editor:** Executions view popup in dark mode ([#9517](https://github.com/n8n-io/n8n/issues/9517)) ([1abb26e](https://github.com/n8n-io/n8n/commit/1abb26e2dacc2891417ea66f6a5f3dccc4b784cd)) +* **editor:** Fix empty node name handling ([#9548](https://github.com/n8n-io/n8n/issues/9548)) ([da41d31](https://github.com/n8n-io/n8n/commit/da41d31bc0e19667a7fef7fac4008c7cb1c6c470)) +* **editor:** Make sure auto loading and auto scrolling works in executions tab ([#9505](https://github.com/n8n-io/n8n/issues/9505)) ([3a2e545](https://github.com/n8n-io/n8n/commit/3a2e5455a98dae35ba1a52ec98f67a1fb27fac96)) +* **editor:** Prevent expression editor focus being lost when user is selecting ([#9525](https://github.com/n8n-io/n8n/issues/9525)) ([6698179](https://github.com/n8n-io/n8n/commit/6698179a69511d8f009100c66c062218a26cfaad)) +* **editor:** Prevent updating node parameter value if it hasn't changed ([#9535](https://github.com/n8n-io/n8n/issues/9535)) ([63990f1](https://github.com/n8n-io/n8n/commit/63990f14e3991770c1b9fbfd56edd6d0f3abd54b)) +* **editor:** Prevent XSS in node-issues tooltip ([#9490](https://github.com/n8n-io/n8n/issues/9490)) ([301e846](https://github.com/n8n-io/n8n/commit/301e846cf64a7fce8191696e828eaf1c3fc82e88)) +* **editor:** Redirect to workflows list after deleting a workflow ([#9546](https://github.com/n8n-io/n8n/issues/9546)) ([cadb59f](https://github.com/n8n-io/n8n/commit/cadb59fecbf1adeb1c226f9decd92a334656a895)) +* **editor:** Send only execution id in postMessage when previewing an execution ([#9514](https://github.com/n8n-io/n8n/issues/9514)) ([49b5bd7](https://github.com/n8n-io/n8n/commit/49b5bd70f0d1c0dce46ea85d23deb75dbea6c51c)) +* **editor:** Show execution error toast also if there is no error stack just message ([#9526](https://github.com/n8n-io/n8n/issues/9526)) ([f914c97](https://github.com/n8n-io/n8n/commit/f914c97d11d471aff1dbf66f9334ec98df613d6e)) +* **editor:** Show input panel with not connected message ([#9495](https://github.com/n8n-io/n8n/issues/9495)) ([8566301](https://github.com/n8n-io/n8n/commit/85663017313a707c95b63c734942a29ef4473740)) +* **editor:** Update webhook paths when duplicating workflow ([#9516](https://github.com/n8n-io/n8n/issues/9516)) ([3be7bb8](https://github.com/n8n-io/n8n/commit/3be7bb898bc2ecc0c2553df2a3e48bd125867ced)) + + +### Features + +* **core:** Print the name of the migration that cannot be reverted when using `n8n db:revert` ([#9473](https://github.com/n8n-io/n8n/issues/9473)) ([3b93aae](https://github.com/n8n-io/n8n/commit/3b93aae6dce7827dfb36279447327dfd89fddff5)) +* **core:** Upgrade all langchain related dependencies ([#9504](https://github.com/n8n-io/n8n/issues/9504)) ([a77e8dd](https://github.com/n8n-io/n8n/commit/a77e8dd79ec7cbeb357ad03747fe2e4270d91a63)) +* **editor:** Show expression infobox on hover and cursor position ([#9507](https://github.com/n8n-io/n8n/issues/9507)) ([ec0373f](https://github.com/n8n-io/n8n/commit/ec0373f666ed7d5c416fdef44afd8dd748755c9f)) +* HighLevel oauth2 api credentials ([#9542](https://github.com/n8n-io/n8n/issues/9542)) ([be58905](https://github.com/n8n-io/n8n/commit/be5890536f9b99916de20ae3c771776149132026)) + + +### Performance Improvements + +* **core:** Optimize executions filtering by metadata ([#9477](https://github.com/n8n-io/n8n/issues/9477)) ([9bdc83a](https://github.com/n8n-io/n8n/commit/9bdc83a399592a2ca0761070f0e7074a6a3ffa7d)) + + + +# [1.43.0](https://github.com/n8n-io/n8n/compare/n8n@1.42.0...n8n@1.43.0) (2024-05-22) + + +### Bug Fixes + +* **core:** Account for retry of execution aborted by pre-execute hook ([#9474](https://github.com/n8n-io/n8n/issues/9474)) ([a217866](https://github.com/n8n-io/n8n/commit/a217866cef6caaef9244f3d16d90f7027adc0c12)) +* **core:** Add an option to disable STARTTLS for SMTP connections ([#9415](https://github.com/n8n-io/n8n/issues/9415)) ([0d73588](https://github.com/n8n-io/n8n/commit/0d7358807b4244be574060726388bd49fc90dc64)) +* **core:** Do not allow admins to delete the instance owner ([#9489](https://github.com/n8n-io/n8n/issues/9489)) ([fc83005](https://github.com/n8n-io/n8n/commit/fc83005ba0876ebea70f93de700adbd6e3095c96)) +* **core:** Do not allow admins to generate password-reset links for instance owner ([#9488](https://github.com/n8n-io/n8n/issues/9488)) ([88b9a40](https://github.com/n8n-io/n8n/commit/88b9a4070b7df943c3ba22047c0656a5d0a2111c)) +* **core:** Fix 431 for large dynamic node parameters ([#9384](https://github.com/n8n-io/n8n/issues/9384)) ([d21ad15](https://github.com/n8n-io/n8n/commit/d21ad15c1f12739af6a28983a6469347c26f1e08)) +* **core:** Handle credential in body for oauth2 refresh token ([#9179](https://github.com/n8n-io/n8n/issues/9179)) ([c9855e3](https://github.com/n8n-io/n8n/commit/c9855e3dce42f8830636914458d1061668a466a8)) +* **core:** Remove excess args from routing error ([#9377](https://github.com/n8n-io/n8n/issues/9377)) ([b1f977e](https://github.com/n8n-io/n8n/commit/b1f977ebd084ab3a8fb1d13109063de7d2a15296)) +* **core:** Retry before continue on fail ([#9395](https://github.com/n8n-io/n8n/issues/9395)) ([9b2ce81](https://github.com/n8n-io/n8n/commit/9b2ce819d42c4a541ae94956aaab608a989ec588)) +* **editor:** Emit change events from filter component on update ([#9479](https://github.com/n8n-io/n8n/issues/9479)) ([62df433](https://github.com/n8n-io/n8n/commit/62df4331d448dfdabd51db33560a87dd5d805a13)) +* **editor:** Fix blank Public API page ([#9409](https://github.com/n8n-io/n8n/issues/9409)) ([14fe9f2](https://github.com/n8n-io/n8n/commit/14fe9f268feeb0ca106ddaaa94c69cb356011524)) +* **editor:** Fix i18n translation addition ([#9451](https://github.com/n8n-io/n8n/issues/9451)) ([04dd476](https://github.com/n8n-io/n8n/commit/04dd4760e173bfc8a938413a5915d63291da8afe)) +* **editor:** Fix node execution errors showing undefined ([#9487](https://github.com/n8n-io/n8n/issues/9487)) ([62ee796](https://github.com/n8n-io/n8n/commit/62ee79689569b5d2c9823afac238e66e4c645d9b)) +* **editor:** Fix outdated roles in variables labels ([#9411](https://github.com/n8n-io/n8n/issues/9411)) ([38b498e](https://github.com/n8n-io/n8n/commit/38b498e73a71a9ca8b10a89e498aa8330acf2626)) +* **editor:** Fix project settings layout ([#9475](https://github.com/n8n-io/n8n/issues/9475)) ([96cf41f](https://github.com/n8n-io/n8n/commit/96cf41f8516881f0ba15b0b01dda7712f1edc845)) +* **editor:** Fix type errors in `components/executions/workflow` ([#9448](https://github.com/n8n-io/n8n/issues/9448)) ([9c768a0](https://github.com/n8n-io/n8n/commit/9c768a0443520f0c031d4d807d955d7778a00997)) +* **editor:** Fix type errors in i18n plugin ([#9441](https://github.com/n8n-io/n8n/issues/9441)) ([a7d3e59](https://github.com/n8n-io/n8n/commit/a7d3e59aef36dd65429ad0b2ea4696b107620eeb)) +* **editor:** Fix workflow history TS errors ([#9433](https://github.com/n8n-io/n8n/issues/9433)) ([bc05faf](https://github.com/n8n-io/n8n/commit/bc05faf0a6a0913013e4d46eefb1e45abc390883)) +* **editor:** Secondary button in dark mode ([#9401](https://github.com/n8n-io/n8n/issues/9401)) ([aad43d8](https://github.com/n8n-io/n8n/commit/aad43d8cdcc9621fbd864fbe0235c9ff4ddbfe3e)) +* **Email Trigger (IMAP) Node:** Handle attachments correctly ([#9410](https://github.com/n8n-io/n8n/issues/9410)) ([68a6c81](https://github.com/n8n-io/n8n/commit/68a6c8172973091e8474a9f173fa4a5e97284f18)) +* Fix color picker type errors ([#9436](https://github.com/n8n-io/n8n/issues/9436)) ([2967df2](https://github.com/n8n-io/n8n/commit/2967df2fe098278dd20126dc033b03cbb4b903ce)) +* Fix type errors in community nodes components ([#9445](https://github.com/n8n-io/n8n/issues/9445)) ([aac19d3](https://github.com/n8n-io/n8n/commit/aac19d328564bfecda53b338e2c56e5e30e5c0c1)) +* **Gmail Trigger Node:** Fetching duplicate emails ([#9424](https://github.com/n8n-io/n8n/issues/9424)) ([3761537](https://github.com/n8n-io/n8n/commit/3761537880f53d9e54b0200a63b067dc3d154787)) +* **HTML Node:** Fix typo preventing row attributes from being set in tables ([#9440](https://github.com/n8n-io/n8n/issues/9440)) ([28e3e21](https://github.com/n8n-io/n8n/commit/28e3e211771fd73a88e34b81858188156fca5fbb)) +* **HubSpot Trigger Node:** Fix issue with ticketId not being set ([#9403](https://github.com/n8n-io/n8n/issues/9403)) ([b5c7c06](https://github.com/n8n-io/n8n/commit/b5c7c061b7e854a06bd725f7905a7f3ac8dfedc2)) +* **Mattermost Node:** Change loadOptions to fetch all items ([#9413](https://github.com/n8n-io/n8n/issues/9413)) ([1377e21](https://github.com/n8n-io/n8n/commit/1377e212c709bc9ca6586c030ec083e89a3d8c37)) +* **Microsoft OneDrive Trigger Node:** Fix issue with test run failing ([#9386](https://github.com/n8n-io/n8n/issues/9386)) ([92a1d65](https://github.com/n8n-io/n8n/commit/92a1d65c4b00683cc334c70f183e5f8c99bfae65)) +* **RSS Feed Trigger Node:** Use newest date instead of first item for new items ([#9182](https://github.com/n8n-io/n8n/issues/9182)) ([7236a55](https://github.com/n8n-io/n8n/commit/7236a558b945c69fa5680e42c538af7c5276cc31)) +* Update operations to run per item ([#8967](https://github.com/n8n-io/n8n/issues/8967)) ([ef9d4ab](https://github.com/n8n-io/n8n/commit/ef9d4aba90c92f9b72a17de242a4ffeb7c034802)) + + +### Features + +* Add Slack trigger node ([#9190](https://github.com/n8n-io/n8n/issues/9190)) ([bf54930](https://github.com/n8n-io/n8n/commit/bf549301df541c43931fe4493b4bad7905fb0c8a)) +* **Custom n8n Workflow Tool Node:** Add support for tool input schema ([#9470](https://github.com/n8n-io/n8n/issues/9470)) ([2fa46b6](https://github.com/n8n-io/n8n/commit/2fa46b6faac5618a10403066c3dddf4ea9def12c)) +* **editor:** Add examples for Luxon DateTime expression methods ([#9361](https://github.com/n8n-io/n8n/issues/9361)) ([40bce7f](https://github.com/n8n-io/n8n/commit/40bce7f44332042bf8dba0442044acd76cc9bf21)) +* **editor:** Add examples for root expression methods ([#9373](https://github.com/n8n-io/n8n/issues/9373)) ([a591f63](https://github.com/n8n-io/n8n/commit/a591f63e3ff51c19fe48185144725e881c418b23)) +* **editor:** Expand supported Unicode range for expressions ([#9420](https://github.com/n8n-io/n8n/issues/9420)) ([2118236](https://github.com/n8n-io/n8n/commit/211823650ba298aac899ff944819290f0bd4654a)) +* **editor:** Update Node Details View header tabs structure ([#9425](https://github.com/n8n-io/n8n/issues/9425)) ([2782534](https://github.com/n8n-io/n8n/commit/2782534d78e9613bda41675b4574c8016b10b0a4)) +* **Extract from File Node:** Add option to set encoding for CSV files ([#9392](https://github.com/n8n-io/n8n/issues/9392)) ([f13dbc9](https://github.com/n8n-io/n8n/commit/f13dbc9cc31fba20b4cb0bedf11e56e16079f946)) +* **Linear Node:** Add identifier to outputs ([#9469](https://github.com/n8n-io/n8n/issues/9469)) ([ffe034c](https://github.com/n8n-io/n8n/commit/ffe034c72e07346cdbea4dda96c7e2c38ea73c45)) +* **OpenAI Node:** Use v2 assistants API and add support for memory ([#9406](https://github.com/n8n-io/n8n/issues/9406)) ([ce3eb12](https://github.com/n8n-io/n8n/commit/ce3eb12a6ba325d3785d54d90ff5a32152afd4c0)) +* RBAC ([#8922](https://github.com/n8n-io/n8n/issues/8922)) ([596c472](https://github.com/n8n-io/n8n/commit/596c472ecc756bf934c51e7efae0075fb23313b4)) +* **Strava Node:** Update to use sport type ([#9462](https://github.com/n8n-io/n8n/issues/9462)) ([9da9368](https://github.com/n8n-io/n8n/commit/9da93680c28f9191eac7edc452e5123749e5c148)) +* **Telegram Node:** Add support for local bot api server ([#8437](https://github.com/n8n-io/n8n/issues/8437)) ([87f965e](https://github.com/n8n-io/n8n/commit/87f965e9055904486f5fd815c060abb4376296a0)) + + + +# [1.42.0](https://github.com/n8n-io/n8n/compare/n8n@1.41.0...n8n@1.42.0) (2024-05-15) + + +### Bug Fixes + +* **Code Node:** Bind helper methods to the correct context ([#9380](https://github.com/n8n-io/n8n/issues/9380)) ([82c8801](https://github.com/n8n-io/n8n/commit/82c8801f25446085bc8da5055d9932eed4321f47)) +* **Cortex Node:** Fix issue with analyzer response not working for file observables ([#9374](https://github.com/n8n-io/n8n/issues/9374)) ([ed22dcd](https://github.com/n8n-io/n8n/commit/ed22dcd88ac7f8433b9ed5dc2139d8779b0e1d4c)) +* **editor:** Render backticks as code segments in error view ([#9352](https://github.com/n8n-io/n8n/issues/9352)) ([4ed5850](https://github.com/n8n-io/n8n/commit/4ed585040b20c50919e2ec2252216639c85194cb)) +* **Mattermost Node:** Fix issue when fetching reactions ([#9375](https://github.com/n8n-io/n8n/issues/9375)) ([78e7c7a](https://github.com/n8n-io/n8n/commit/78e7c7a9da96a293262cea5304509261ad10020c)) + + +### Features + +* **AI Agent Node:** Implement Tool calling agent ([#9339](https://github.com/n8n-io/n8n/issues/9339)) ([677f534](https://github.com/n8n-io/n8n/commit/677f534661634c74340f50723e55e241570d5a56)) +* **core:** Allow using a custom certificates in docker containers ([#8705](https://github.com/n8n-io/n8n/issues/8705)) ([6059722](https://github.com/n8n-io/n8n/commit/6059722fbfeeca31addfc31ed287f79f40aaad18)) +* **core:** Node hints(warnings) system ([#8954](https://github.com/n8n-io/n8n/issues/8954)) ([da6088d](https://github.com/n8n-io/n8n/commit/da6088d0bbb952fcdf595a650e1e01b7b02a2b7e)) +* **core:** Node version available in expression ([#9350](https://github.com/n8n-io/n8n/issues/9350)) ([a00467c](https://github.com/n8n-io/n8n/commit/a00467c9fa57d740de9eccfcd136267bc9e9559d)) +* **editor:** Add examples for number & boolean, add new methods ([#9358](https://github.com/n8n-io/n8n/issues/9358)) ([7b45dc3](https://github.com/n8n-io/n8n/commit/7b45dc313f42317f894469c6aa8abecc55704e3a)) +* **editor:** Add examples for object and array expression methods ([#9360](https://github.com/n8n-io/n8n/issues/9360)) ([5293663](https://github.com/n8n-io/n8n/commit/52936633af9c71dff1957ee43a5eda48f7fc1bf1)) +* **editor:** Add item selector to expression output ([#9281](https://github.com/n8n-io/n8n/issues/9281)) ([dc5994b](https://github.com/n8n-io/n8n/commit/dc5994b18580b9326574c5208d9beaf01c746f33)) +* **editor:** Autocomplete info box: improve structure and add examples ([#9019](https://github.com/n8n-io/n8n/issues/9019)) ([c92c870](https://github.com/n8n-io/n8n/commit/c92c870c7335f4e2af63fa1c6bcfd086b2957ef8)) +* **editor:** Remove AI Error Debugging ([#9337](https://github.com/n8n-io/n8n/issues/9337)) ([cda062b](https://github.com/n8n-io/n8n/commit/cda062bde63bcbfdd599d0662ddbe89c27a71686)) +* **Slack Node:** Add block support for message updates ([#8925](https://github.com/n8n-io/n8n/issues/8925)) ([1081429](https://github.com/n8n-io/n8n/commit/1081429a4d0f7e2d1fc1841303448035b46e44d1)) + + +### Performance Improvements + +* Add tailwind to editor and design system ([#9032](https://github.com/n8n-io/n8n/issues/9032)) ([1c1e444](https://github.com/n8n-io/n8n/commit/1c1e4443f41dd39da8d5fa3951c8dffb0fbfce10)) + + + +# [1.41.0](https://github.com/n8n-io/n8n/compare/n8n@1.40.0...n8n@1.41.0) (2024-05-08) + + +### Bug Fixes + +* Cast boolean values in filter parameter ([#9260](https://github.com/n8n-io/n8n/issues/9260)) ([30c8efc](https://github.com/n8n-io/n8n/commit/30c8efc4cc9b25fabc8d9c56e8c29e7e77c04325)) +* **core:** Prevent occassional 429s on license init in multi-main setup ([#9284](https://github.com/n8n-io/n8n/issues/9284)) ([22b6f90](https://github.com/n8n-io/n8n/commit/22b6f909505d7c3d9c0583a90599e6e9c244e21e)) +* **core:** Report missing SAML attributes early with an actionable error message ([#9316](https://github.com/n8n-io/n8n/issues/9316)) ([225fdbb](https://github.com/n8n-io/n8n/commit/225fdbb379f6dd0005bd4ccb3791c96de35b1653)) +* **core:** Webhooks responding with binary data should not prematurely end the response stream ([#9063](https://github.com/n8n-io/n8n/issues/9063)) ([23b676d](https://github.com/n8n-io/n8n/commit/23b676d7cb9708d7a99fc031cfeec22b854be1d9)) +* **editor:** Fix multi-select parameters with load options getting cleared ([#9324](https://github.com/n8n-io/n8n/issues/9324)) ([0ee4b6c](https://github.com/n8n-io/n8n/commit/0ee4b6c86000ab164211c1ebed90306cd144af1b)) +* **editor:** Fix shortcut issue on save buttons ([#9309](https://github.com/n8n-io/n8n/issues/9309)) ([e74c14f](https://github.com/n8n-io/n8n/commit/e74c14ffbe088ac74dc6358068cd54af9a850cad)) +* **editor:** Resolve `$vars` and `$secrets` in expressions in credentials fields ([#9289](https://github.com/n8n-io/n8n/issues/9289)) ([d92f994](https://github.com/n8n-io/n8n/commit/d92f994913befd31aec409ef8e40b290ac4185ba)) +* **editor:** Show MFA section to instance owner, even when external auth is enabled ([#9301](https://github.com/n8n-io/n8n/issues/9301)) ([b65e0e2](https://github.com/n8n-io/n8n/commit/b65e0e28114f576f89e271ab8ffdb8550e1be60f)) +* **Gmail Node:** Remove duplicate options when creating drafts ([#9299](https://github.com/n8n-io/n8n/issues/9299)) ([bfb0eb7](https://github.com/n8n-io/n8n/commit/bfb0eb7a06f219424486a55256ecca46c14a85ba)) +* **Linear Node:** Fix issue with data not always being returned ([#9273](https://github.com/n8n-io/n8n/issues/9273)) ([435272b](https://github.com/n8n-io/n8n/commit/435272b568826edf899dbaba9d10077fbe134ea6)) +* **n8n Form Trigger Node:** Fix missing options when using respond to webhook ([#9282](https://github.com/n8n-io/n8n/issues/9282)) ([6ab3781](https://github.com/n8n-io/n8n/commit/6ab378157041abfc918ae1d9408821f8fd5cfb34)) +* **Pipedrive Node:** Improve type-safety in custom-property handling ([#9319](https://github.com/n8n-io/n8n/issues/9319)) ([c8895c5](https://github.com/n8n-io/n8n/commit/c8895c540e5c8edfb576960a5ba4ec9ac4426d5b)) +* **Read PDF Node:** Disable JS evaluation from PDFs ([#9336](https://github.com/n8n-io/n8n/issues/9336)) ([c4bf5b2](https://github.com/n8n-io/n8n/commit/c4bf5b2b9285402ae09960eb64a5d6f20356eeaf)) + + +### Features + +* **editor:** Implement AI Assistant chat UI ([#9300](https://github.com/n8n-io/n8n/issues/9300)) ([491c6ec](https://github.com/n8n-io/n8n/commit/491c6ec546c4ec8ab4eb88d020c13820071bf6dc)) +* **editor:** Temporarily disable AI error helper ([#9329](https://github.com/n8n-io/n8n/issues/9329)) ([35b983b](https://github.com/n8n-io/n8n/commit/35b983b6dfbb6ab02367801a15581e80a2d87340)) +* **LinkedIn Node:** Upgrade LinkedIn API version ([#9307](https://github.com/n8n-io/n8n/issues/9307)) ([3860077](https://github.com/n8n-io/n8n/commit/3860077f8100fb790acf1d930839e86719a454fd)) +* **Redis Node:** Add support for TLS ([#9266](https://github.com/n8n-io/n8n/issues/9266)) ([0a2de09](https://github.com/n8n-io/n8n/commit/0a2de093c01689b8f179b3f4413a4ce29ccf279a)) +* **Send Email Node:** Add an option to customize client host-name on SMTP connections ([#9322](https://github.com/n8n-io/n8n/issues/9322)) ([d0d52de](https://github.com/n8n-io/n8n/commit/d0d52def8fb4113a7a4866d30f2e9c7bfe11075e)) +* **Slack Node:** Update to use the new API method for file uploads ([#9323](https://github.com/n8n-io/n8n/issues/9323)) ([695e762](https://github.com/n8n-io/n8n/commit/695e762663fde79b9555be8cf075ee4144f380f1)) + + + +# [1.40.0](https://github.com/n8n-io/n8n/compare/n8n@1.39.0...n8n@1.40.0) (2024-05-02) + + +### Bug Fixes + +* **Airtable Node:** Do not allow to use deprecated api keys in v1 ([#9171](https://github.com/n8n-io/n8n/issues/9171)) ([017ae6e](https://github.com/n8n-io/n8n/commit/017ae6e1025fb4ae28b46b9c411e4b5c70e280e9)) +* **core:** Add `view engine` to webhook server to support forms ([#9224](https://github.com/n8n-io/n8n/issues/9224)) ([24c3150](https://github.com/n8n-io/n8n/commit/24c3150056401ddcf49f7266897b6c73ccc06253)) +* **core:** Fix browser session refreshes not working ([#9212](https://github.com/n8n-io/n8n/issues/9212)) ([1efeecc](https://github.com/n8n-io/n8n/commit/1efeeccc5bae306a798a66a8cf3e669ad3689262)) +* **core:** Prevent node param resolution from failing telemetry graph generation ([#9257](https://github.com/n8n-io/n8n/issues/9257)) ([f6c9493](https://github.com/n8n-io/n8n/commit/f6c9493355726ddf516fb54a37adf49a2ce0efd0)) +* **core:** Stop relying on filesystem for SSH keys ([#9217](https://github.com/n8n-io/n8n/issues/9217)) ([093dcef](https://github.com/n8n-io/n8n/commit/093dcefafc5a09f7622391d8b01b9aecfa9c8f2f)) +* **Discord Node:** When using OAuth2 authentication, check if user is a guild member when sending direct message ([#9183](https://github.com/n8n-io/n8n/issues/9183)) ([00dfad3](https://github.com/n8n-io/n8n/commit/00dfad3279bd2a45a8331e734b331f4ab3fce75c)) +* **editor:** Fix read-only mode in inline expression editor ([#9232](https://github.com/n8n-io/n8n/issues/9232)) ([99f384e](https://github.com/n8n-io/n8n/commit/99f384e2cf6b16d08a8bdc150a2833463b35f14b)) +* **editor:** Prevent excess runs in manual execution with run data ([#9259](https://github.com/n8n-io/n8n/issues/9259)) ([426a12a](https://github.com/n8n-io/n8n/commit/426a12ac0ec1d637063828db008a2fb9c32ddfff)) +* **editor:** Throw expression error on attempting to set variables at runtime ([#9229](https://github.com/n8n-io/n8n/issues/9229)) ([fec04d5](https://github.com/n8n-io/n8n/commit/fec04d5f796c677b6127addcb700d6442c2c3a26)) +* Elaborate scope of Sustainable Use License ([#9233](https://github.com/n8n-io/n8n/issues/9233)) ([442aaba](https://github.com/n8n-io/n8n/commit/442aaba116cf0cfe7c1e7b8d570e321cc6a14143)) +* **Google BigQuery Node:** Better error messages, transform timestamps ([#9255](https://github.com/n8n-io/n8n/issues/9255)) ([7ff24f1](https://github.com/n8n-io/n8n/commit/7ff24f134b706d0b5b7d7c13d3e69bd1a0f4c5b8)) +* **Google Drive Node:** Create from text operation ([#9185](https://github.com/n8n-io/n8n/issues/9185)) ([d9e7494](https://github.com/n8n-io/n8n/commit/d9e74949c4db7282c3ab42bd6825aa5acc042400)) +* **Jira Trigger Node:** Update credentials UI ([#9198](https://github.com/n8n-io/n8n/issues/9198)) ([ed98ca2](https://github.com/n8n-io/n8n/commit/ed98ca2fb77fc81362e6480ee6a12a64915418f9)) +* **LangChain Code Node:** Fix execution of custom n8n tools called via LC code node ([#9265](https://github.com/n8n-io/n8n/issues/9265)) ([741e829](https://github.com/n8n-io/n8n/commit/741e8299d64cd774cc35ea312433f50d865f1318)) +* **LangChain Code Node:** Fix resolution of scoped langchain modules ([#9258](https://github.com/n8n-io/n8n/issues/9258)) ([445c05d](https://github.com/n8n-io/n8n/commit/445c05dca46225e195ab122cf77d6d1088460e20)) +* **MySQL Node:** Query to statements splitting fix ([#9207](https://github.com/n8n-io/n8n/issues/9207)) ([dc84452](https://github.com/n8n-io/n8n/commit/dc844528f4554ae41037e2c25542237a74d86f3f)) + + +### Features + +* Add Ask AI to HTTP Request Node ([#8917](https://github.com/n8n-io/n8n/issues/8917)) ([cd9bc44](https://github.com/n8n-io/n8n/commit/cd9bc44bddf7fc78acec9ee7c96a40077a07615f)) +* **Gmail Node:** Add support for creating drafts using an alias ([#8728](https://github.com/n8n-io/n8n/issues/8728)) ([3986356](https://github.com/n8n-io/n8n/commit/3986356c8995998cb6ab392ae07f41efcb46d4bd)) +* **Gmail Node:** Add thread option for draft emails ([#8729](https://github.com/n8n-io/n8n/issues/8729)) ([2dd0b32](https://github.com/n8n-io/n8n/commit/2dd0b329ca243de87eb1b59bf831593f70c42784)) +* **Groq Chat Model Node:** Add support for Groq chat models ([#9250](https://github.com/n8n-io/n8n/issues/9250)) ([96f02bd](https://github.com/n8n-io/n8n/commit/96f02bd6552cf9ea75fcb8ba29c3afac9553aa25)) +* **HTTP Request Node:** Option to provide SSL Certificates in Http Request Node ([#9125](https://github.com/n8n-io/n8n/issues/9125)) ([306b68d](https://github.com/n8n-io/n8n/commit/306b68da6bb37dbce67dcf5c4791c2986750579c)) +* **Jira Software Node:** Add Wiki Markup support for Jira Cloud comments ([#8857](https://github.com/n8n-io/n8n/issues/8857)) ([756012b](https://github.com/n8n-io/n8n/commit/756012b0524e09601fada80213dd4da3057d329a)) +* **Microsoft To Do Node:** Add an option to set a reminder when updating a task ([#6918](https://github.com/n8n-io/n8n/issues/6918)) ([22b2afd](https://github.com/n8n-io/n8n/commit/22b2afdd23bef2a301cd9d3743400e0d69463b1b)) +* **MISP Node:** Rest search operations ([#9196](https://github.com/n8n-io/n8n/issues/9196)) ([b694e77](https://github.com/n8n-io/n8n/commit/b694e7743e17507b901706c5023a9aac83b903dd)) +* **Ollama Chat Model Node:** Add aditional Ollama config parameters & fix vision ([#9215](https://github.com/n8n-io/n8n/issues/9215)) ([e17e767](https://github.com/n8n-io/n8n/commit/e17e767e700a74b187706552fc879c00fd551611)) +* **Pipedrive Node:** Add busy and description options to activities ([#9208](https://github.com/n8n-io/n8n/issues/9208)) ([9b3ac16](https://github.com/n8n-io/n8n/commit/9b3ac1648f1888d79079fd50998140fd27efae97)) +* **Postgres Node:** Add option IS NOT NULL and hide value input fields ([#9241](https://github.com/n8n-io/n8n/issues/9241)) ([e896889](https://github.com/n8n-io/n8n/commit/e89688939438b2d5414155f053530bd9eb34b300)) +* **S3 Node:** Add support for self signed SSL certificates ([#9269](https://github.com/n8n-io/n8n/issues/9269)) ([ddff804](https://github.com/n8n-io/n8n/commit/ddff80416df87166627fdefc755e3f79102c5664)) +* **Telegram Node:** Disable page preview by default ([#9267](https://github.com/n8n-io/n8n/issues/9267)) ([41ce178](https://github.com/n8n-io/n8n/commit/41ce178491135b5f972974ebecec0f5f223a71ce)) +* Upgrade typeorm for separate sqlite read & write connections ([#9230](https://github.com/n8n-io/n8n/issues/9230)) ([0b52320](https://github.com/n8n-io/n8n/commit/0b523206358886d5b81d7009ce95cb9d3ba9fa40)) +* **Wise Node:** Add XML as supported format in getStatement operation ([#9193](https://github.com/n8n-io/n8n/issues/9193)) ([a424b59](https://github.com/n8n-io/n8n/commit/a424b59e4949e96c0e56319cea91fcf084a5208e)) +* **Wise Trigger Node:** Add support for balance updates ([#9189](https://github.com/n8n-io/n8n/issues/9189)) ([42a9891](https://github.com/n8n-io/n8n/commit/42a9891081e7f1a19364c406b056eee036180c24)) + + + +# [1.39.0](https://github.com/n8n-io/n8n/compare/n8n@1.38.0...n8n@1.39.0) (2024-04-24) + + +### Bug Fixes + +* **core:** Exclude oAuth callback urls from browser-id checks ([#9158](https://github.com/n8n-io/n8n/issues/9158)) ([46e432b](https://github.com/n8n-io/n8n/commit/46e432b177b4f1ae437f598674f188fb11ee1f20)) +* **core:** Improve browserId checks, and add logging ([#9161](https://github.com/n8n-io/n8n/issues/9161)) ([ff9ae54](https://github.com/n8n-io/n8n/commit/ff9ae549fdc6962e9990987c54804d2570da6a12)) +* **core:** Upgrade mysql2 to address CVE-2024-21511 ([#9206](https://github.com/n8n-io/n8n/issues/9206)) ([3996d28](https://github.com/n8n-io/n8n/commit/3996d2852a2e2a056af008a8f1a1c6cec9ba6084)) +* **editor:** Fix expression preview when previous node is selected ([#9140](https://github.com/n8n-io/n8n/issues/9140)) ([85780ea](https://github.com/n8n-io/n8n/commit/85780eade57f30e6870c314fa465d523e3646005)) +* **editor:** Fix parameter reset on credential change in Discord node ([#9137](https://github.com/n8n-io/n8n/issues/9137)) ([135ef75](https://github.com/n8n-io/n8n/commit/135ef75add8a42ce5163cce934ac5b2757ca4fe3)) +* **editor:** Fix sessionId for manual chat trigger execution ([#9187](https://github.com/n8n-io/n8n/issues/9187)) ([f5ccb5f](https://github.com/n8n-io/n8n/commit/f5ccb5fe33392654a292de34b9ed8319901d303b)) +* **editor:** Make sticky node content parameter non require to support empty stickies ([#9192](https://github.com/n8n-io/n8n/issues/9192)) ([f6142ff](https://github.com/n8n-io/n8n/commit/f6142ff275abb443940e9d8a4694c7f54c77a183)) +* **editor:** Prevent duplicate values in preview for SQL editor ([#9129](https://github.com/n8n-io/n8n/issues/9129)) ([5acbfb4](https://github.com/n8n-io/n8n/commit/5acbfb423436b94e58af0e532e567bdc3783a622)) +* **Google Sheets Node:** Fix "Append or Update" on an empty sheet ([#9175](https://github.com/n8n-io/n8n/issues/9175)) ([29ee4fa](https://github.com/n8n-io/n8n/commit/29ee4fab61c2f364b249b91c7561b176e78f37ac)) +* **Notion Node:** Add itemIndex to API and operation errors ([#9150](https://github.com/n8n-io/n8n/issues/9150)) ([946f09f](https://github.com/n8n-io/n8n/commit/946f09f62842c963e94d97555d1b5bf7789a1b99)) +* **Postgres Node:** Convert js arrays to postgres type, if column type is ARRAY ([#9160](https://github.com/n8n-io/n8n/issues/9160)) ([08e3502](https://github.com/n8n-io/n8n/commit/08e35027f1d4f483670dce44e8026c77aa4e6c3f)) +* **Respond to Webhook Node:** Fix issue stopping form trigger response ([#9157](https://github.com/n8n-io/n8n/issues/9157)) ([6c63cd9](https://github.com/n8n-io/n8n/commit/6c63cd971162d3f018b210d221ffc2a56535550a)) +* **Schedule Trigger Node:** Default to 0 minute if falsy on hourly run ([#9146](https://github.com/n8n-io/n8n/issues/9146)) ([d756609](https://github.com/n8n-io/n8n/commit/d75660982636389516cd97305e3c19912b77ea9c)) +* **Splunk Node:** Retry attempts if no response from API call, better error with suggestion to use Retry On Fail ([#9176](https://github.com/n8n-io/n8n/issues/9176)) ([05a569c](https://github.com/n8n-io/n8n/commit/05a569c1cd1f2ecf40987c5f677dad61fd6324e5)) + + +### Features + +* Add WhatsApp Business Trigger Node ([#8840](https://github.com/n8n-io/n8n/issues/8840)) ([23a2dd0](https://github.com/n8n-io/n8n/commit/23a2dd08b6e5391b61b73bdd4496cdb2f6fa9205)) +* **core:** Setup helmet.js for setting security headers ([#9027](https://github.com/n8n-io/n8n/issues/9027)) ([0ed4671](https://github.com/n8n-io/n8n/commit/0ed46711f426f7edf5fa7833673b6b07348a3bd7)) +* **core:** Upgrade mysql2 to address CVE-2024-21507, CVE-2024-21508, and CVE-2024-21509 ([#9154](https://github.com/n8n-io/n8n/issues/9154)) ([9bd8e10](https://github.com/n8n-io/n8n/commit/9bd8e10b356ab965bfee5d13bf339f057bcfdb14)) +* **n8n Form Trigger Node:** Option to remove attribution ([#9162](https://github.com/n8n-io/n8n/issues/9162)) ([699fd70](https://github.com/n8n-io/n8n/commit/699fd70c2427397455939391f95a5cd65521afb3)) +* **Webhook Node:** Setting to enable multiple outputs/methods ([#9086](https://github.com/n8n-io/n8n/issues/9086)) ([2bf0a39](https://github.com/n8n-io/n8n/commit/2bf0a3933e0d7da46be73b8671e72e69d7d472df)) +* **Zammad Node:** Add more options to the Organizations endpoint ([#9180](https://github.com/n8n-io/n8n/issues/9180)) ([15c88d6](https://github.com/n8n-io/n8n/commit/15c88d6839fb0b59fe5112b846ba61a29e9e3e45)) + + + +# [1.38.0](https://github.com/n8n-io/n8n/compare/n8n@1.37.0...n8n@1.38.0) (2024-04-17) + + +### Bug Fixes + +* **core:** Don't create multiple owners when importing credentials or workflows ([#9112](https://github.com/n8n-io/n8n/issues/9112)) ([3eb5be5](https://github.com/n8n-io/n8n/commit/3eb5be5f5a1a62d7cf39381a67c8d747c397a969)) +* **core:** Don't revert irreversibble migrations ([#9105](https://github.com/n8n-io/n8n/issues/9105)) ([3bb821f](https://github.com/n8n-io/n8n/commit/3bb821f10e2d865040fd1d89bec9836c7f98b8ef)) +* **core:** Support MySQL in `MoveSshKeysToDatabase` migration ([#9120](https://github.com/n8n-io/n8n/issues/9120)) ([cf435c3](https://github.com/n8n-io/n8n/commit/cf435c33110d620295587e61b355ead6e4819958)) +* **editor:** Do not show overlapping trash icon in the node's settings ([#9119](https://github.com/n8n-io/n8n/issues/9119)) ([c00150b](https://github.com/n8n-io/n8n/commit/c00150bb8ff88f8905536e5b4612c4c8cdd755a7)) +* **editor:** Open links from embedded chat in new tab ([#9121](https://github.com/n8n-io/n8n/issues/9121)) ([284de5d](https://github.com/n8n-io/n8n/commit/284de5d6c7af901ee11ecda4c80b3998fd6b5657)) +* **editor:** Render dates correctly in parameter hint ([#9089](https://github.com/n8n-io/n8n/issues/9089)) ([064e8f4](https://github.com/n8n-io/n8n/commit/064e8f4a1dc5afaa7ab21b770e3fbb9165805add)) +* **Execute Workflow Node:** Assign fallback pairedItem only if not present in output item and different length of input output ([#9145](https://github.com/n8n-io/n8n/issues/9145)) ([a95e401](https://github.com/n8n-io/n8n/commit/a95e4016967b2ef443ad0ea07338ab830d5c0100)) +* Fix issue with Crowdstrike credential not working correctly ([#9108](https://github.com/n8n-io/n8n/issues/9108)) ([4c16000](https://github.com/n8n-io/n8n/commit/4c16000efadbfc5961ef2befd4f6501f9f2f0b2c)) +* **HTTP Request Node:** Tolerate header name being empty ([#9138](https://github.com/n8n-io/n8n/issues/9138)) ([f6c9dbf](https://github.com/n8n-io/n8n/commit/f6c9dbf7b850e9b665bbc72090a41c45d125f996)) +* **Respond to Webhook Node:** Continue on fail and error branch support ([#9115](https://github.com/n8n-io/n8n/issues/9115)) ([86a20f6](https://github.com/n8n-io/n8n/commit/86a20f656389474cb9fb26acf406de4e7af7b34c)) + + +### Features + +* **editor:** Add object keys that need bracket access to autocomplete ([#9088](https://github.com/n8n-io/n8n/issues/9088)) ([98bcd50](https://github.com/n8n-io/n8n/commit/98bcd50bab47e384ddcb6261aa91ba843cfa3f5a)) +* **Github Node:** Add option to get pull requests ([#9094](https://github.com/n8n-io/n8n/issues/9094)) ([4d9000b](https://github.com/n8n-io/n8n/commit/4d9000bf27df5a2188a2d4a07d8e1e6a04f701d9)) +* **Google Gemini Chat Model Node:** Add support for new Google Gemini models ([#9130](https://github.com/n8n-io/n8n/issues/9130)) ([f1215cd](https://github.com/n8n-io/n8n/commit/f1215cdb6bdfb18b7a170286c2d8e8c0deb617ff)) +* **Summarize Node:** Option to continue when field to summarize can't be found in any items ([#9118](https://github.com/n8n-io/n8n/issues/9118)) ([d7abc30](https://github.com/n8n-io/n8n/commit/d7abc3010463ad21a9c162430485ebbb29d378b1)) + + + +# [1.37.0](https://github.com/n8n-io/n8n/compare/n8n@1.36.0...n8n@1.37.0) (2024-04-10) + + +### Bug Fixes + +* **API:** Accept `settings.executionOrder` in workflow creation ([#9072](https://github.com/n8n-io/n8n/issues/9072)) ([0c90c7c](https://github.com/n8n-io/n8n/commit/0c90c7c8c1cde23c56b34fde264ea4e6ec0300b2)) +* **AWS Bedrock Chat Model Node:** Improve filtering of Bedrock models & fix Claude 3 ([#9085](https://github.com/n8n-io/n8n/issues/9085)) ([cfaab0b](https://github.com/n8n-io/n8n/commit/cfaab0b829864f0d4900f7b36559c0bb1b2075a4)) +* Continue on fail / error output support for chains and agents ([#9078](https://github.com/n8n-io/n8n/issues/9078)) ([f62800c](https://github.com/n8n-io/n8n/commit/f62800cd727ecd2b4a41fe6bbef411f8bc6f0a2e)) +* **core:** Ensure `status` on Axios errors is available to the BE ([#9015](https://github.com/n8n-io/n8n/issues/9015)) ([744327c](https://github.com/n8n-io/n8n/commit/744327c20d909a0ccc2938dff8847d2b4756d9af)) +* **core:** Ensure only leader handles waiting executions ([#9014](https://github.com/n8n-io/n8n/issues/9014)) ([217b07d](https://github.com/n8n-io/n8n/commit/217b07d735feab535916cff4baa72e500e3b80ee)) +* **core:** Ensure TTL safeguard for test webhooks applies only to multi-main setup ([#9062](https://github.com/n8n-io/n8n/issues/9062)) ([ff81de3](https://github.com/n8n-io/n8n/commit/ff81de3313e8fd612104830b1b541b9dda392bb0)) +* **core:** Fix `isLeader` check in `WaitTracker` constructor ([#9100](https://github.com/n8n-io/n8n/issues/9100)) ([c2f4d7d](https://github.com/n8n-io/n8n/commit/c2f4d7d7966db9fd7f7b19772757c71d493bf647)) +* **core:** Remove binary data when deleting executions by filter ([#9056](https://github.com/n8n-io/n8n/issues/9056)) ([7bf0f90](https://github.com/n8n-io/n8n/commit/7bf0f900f193545c37849333e2964c89d96e25b2)) +* **editor:** Add fallback for expression resolution in multi-output case ([#9045](https://github.com/n8n-io/n8n/issues/9045)) ([bcd39a1](https://github.com/n8n-io/n8n/commit/bcd39a110b4ca4c35b66340cec240dfc0c83132c)) +* **editor:** Allow pinning of AI root nodes ([#9060](https://github.com/n8n-io/n8n/issues/9060)) ([32df171](https://github.com/n8n-io/n8n/commit/32df17104c13b713a36057ab9aaeef3fd03d9d24)) +* **editor:** Canvas showing error toast when clicking outside of "import workflow by url" modal ([#9001](https://github.com/n8n-io/n8n/issues/9001)) ([f6ce81e](https://github.com/n8n-io/n8n/commit/f6ce81e7da74f80f81909b24f9675f7abcdb4265)) +* **editor:** Connecting nodes to triggers when adding them together ([#9042](https://github.com/n8n-io/n8n/issues/9042)) ([f214362](https://github.com/n8n-io/n8n/commit/f2143620bab7c222e84e6cc0f5904805944e7163)) +* **editor:** Drop outgoing connections on order changed event for nodes with dynamic outputs ([#9055](https://github.com/n8n-io/n8n/issues/9055)) ([3dd70a1](https://github.com/n8n-io/n8n/commit/3dd70a17e27fd312f949fb2fcccc0bf50ce9302e)) +* **editor:** Expand range of allowed characters in expressions ([#9083](https://github.com/n8n-io/n8n/issues/9083)) ([3bcfef9](https://github.com/n8n-io/n8n/commit/3bcfef95f6c9e08b4429fd6b3fb9a67d7075b1aa)) +* **editor:** Fix displaying logic of execution retry button ([#9061](https://github.com/n8n-io/n8n/issues/9061)) ([92f6cbf](https://github.com/n8n-io/n8n/commit/92f6cbfba36d1238e5b981c018b2a5365aabfe9c)) +* **editor:** Fix execution with wait node ([#9051](https://github.com/n8n-io/n8n/issues/9051)) ([db4f8d4](https://github.com/n8n-io/n8n/commit/db4f8d49a3a87c4e893bb1496b0bc74bd804de64)) +* **editor:** Fix issue with case insensitive tags ([#9071](https://github.com/n8n-io/n8n/issues/9071)) ([caea27d](https://github.com/n8n-io/n8n/commit/caea27dbb599fb81aee59e87236463127bcfab8c)) +* **editor:** Fix issues in dark mode ([#9068](https://github.com/n8n-io/n8n/issues/9068)) ([7467aa3](https://github.com/n8n-io/n8n/commit/7467aa30e6c2a226cb9fee5f5d82fbd01db23e9e)) +* **editor:** Issue showing Auth2 callback section when all properties are overriden ([#8999](https://github.com/n8n-io/n8n/issues/8999)) ([dff8f7a](https://github.com/n8n-io/n8n/commit/dff8f7ac94e0d215f4e2a204774857d240e7f79b)) +* **editor:** Make share modal content scrollable ([#9025](https://github.com/n8n-io/n8n/issues/9025)) ([ec9fe98](https://github.com/n8n-io/n8n/commit/ec9fe98a357ad75349c6f64006ebbff7c95ff0fe)) +* **editor:** Make Webhook node pinnable ([#9047](https://github.com/n8n-io/n8n/issues/9047)) ([042aa62](https://github.com/n8n-io/n8n/commit/042aa62fc2ddae2b9d39f4a92068c10bfe5bec14)) +* **editor:** Prevent saving workflow while another save is in progress ([#9048](https://github.com/n8n-io/n8n/issues/9048)) ([3c9a1d2](https://github.com/n8n-io/n8n/commit/3c9a1d2da3aa7614ce1beec07654a8b2423f99bc)) +* **editor:** Rerun failed nodes in manual executions ([#9050](https://github.com/n8n-io/n8n/issues/9050)) ([bc6575a](https://github.com/n8n-io/n8n/commit/bc6575afbb106ea22ae1ff7b1b9057ccb665a964)) +* **editor:** UX improvements to mfa setup modal ([#9059](https://github.com/n8n-io/n8n/issues/9059)) ([4ac02dd](https://github.com/n8n-io/n8n/commit/4ac02dd5f46c78398186e94faabb2f8884c0f2ae)) +* Fix missing input panel in node details view ([#9043](https://github.com/n8n-io/n8n/issues/9043)) ([71c54cb](https://github.com/n8n-io/n8n/commit/71c54cba52f5de26bd9c086390313c211ad0e574)) +* **HTTP Request Node:** Duplicate key names support for form data ([#9040](https://github.com/n8n-io/n8n/issues/9040)) ([3e231db](https://github.com/n8n-io/n8n/commit/3e231dbfe67b6dbe87f383daa8a52c5ae02edd92)) +* **MySQL Node:** Query Parameters parse string to number ([#9011](https://github.com/n8n-io/n8n/issues/9011)) ([610ead9](https://github.com/n8n-io/n8n/commit/610ead9a3851eeee246313669d0ed9049c736a1a)) +* **Summarization Chain Node:** 'Final Prompt to Combine' and 'Individual Summary Prompt' options ([#8391](https://github.com/n8n-io/n8n/issues/8391)) ([e47e4bf](https://github.com/n8n-io/n8n/commit/e47e4bf67152fae727374974fecf294aff56c257)) +* Workflows executed from other workflows not stopping ([#9010](https://github.com/n8n-io/n8n/issues/9010)) ([0ac9851](https://github.com/n8n-io/n8n/commit/0ac985133be546f068f7f25b340c3bfdecadc08e)) + + +### Features + +* Add credential update and delete events to log streaming ([#9026](https://github.com/n8n-io/n8n/issues/9026)) ([f4f0a36](https://github.com/n8n-io/n8n/commit/f4f0a36fe1f8a792e3581849a0d8a78ce1e6f21a)) +* Allow workflow execution even if it has errors ([#9037](https://github.com/n8n-io/n8n/issues/9037)) ([eaaefd7](https://github.com/n8n-io/n8n/commit/eaaefd76da6e9dbb86568aafdcb48b183b41fe40)) +* Append item index suffix to an error message, if provided, and node has many input items ([#9070](https://github.com/n8n-io/n8n/issues/9070)) ([5793e56](https://github.com/n8n-io/n8n/commit/5793e5644aaf40abe620d8a0a4f76856b6c5ff83)) +* **core:** Improve Langsmith traces for AI executions ([#9081](https://github.com/n8n-io/n8n/issues/9081)) ([936682e](https://github.com/n8n-io/n8n/commit/936682eeaae5f7cdbdb2afbf9c3bf9d85bcd964c)) +* **core:** Prevent session hijacking ([#9057](https://github.com/n8n-io/n8n/issues/9057)) ([2826104](https://github.com/n8n-io/n8n/commit/28261047c399be0cc9c8d30015cc42b9410cebce)) +* **Email Trigger (IMAP) Node:** Migrate from `imap-simple` to `@n8n/imap` ([#8899](https://github.com/n8n-io/n8n/issues/8899)) ([9f87cc2](https://github.com/n8n-io/n8n/commit/9f87cc25a020e03710bd64835c6547f9f12c1fe2)) +* **JWT Node:** New node ([#9005](https://github.com/n8n-io/n8n/issues/9005)) ([0a9f6b3](https://github.com/n8n-io/n8n/commit/0a9f6b3de8f5548700e736b7d5f1d31c229595f5)) +* **Postgres Node:** Options keepAlive and keepAliveInitialDelayMillis ([#9067](https://github.com/n8n-io/n8n/issues/9067)) ([58518b6](https://github.com/n8n-io/n8n/commit/58518b684b6c9495aa6efd0e815a8d01f102bbe4)) + + + +# [1.36.0](https://github.com/n8n-io/n8n/compare/n8n@1.35.0...n8n@1.36.0) (2024-04-03) + + +### Bug Fixes + +* **editor:** Issue with JSON editor getting cut off ([#9000](https://github.com/n8n-io/n8n/issues/9000)) ([4668db2](https://github.com/n8n-io/n8n/commit/4668db20fb6a47b4e417ab8f31407d13af9c70f8)) +* **editor:** Fix canvas selection for touch devices that use mouse ([#9036](https://github.com/n8n-io/n8n/issues/9036)) ([286fa5c](https://github.com/n8n-io/n8n/commit/286fa5cd7eb5052d2c166145447f53b33174b62c)) +* **editor:** Fix execution debug button ([#9018](https://github.com/n8n-io/n8n/issues/9018)) ([aac77e1](https://github.com/n8n-io/n8n/commit/aac77e1668d2b3fd96c2e77b4626b7b0ae7bf233)) +* **editor:** Hover and active states not showing in execution list on dark mode ([#9002](https://github.com/n8n-io/n8n/issues/9002)) ([bead7eb](https://github.com/n8n-io/n8n/commit/bead7eb840b3c6c074364c6a44d001ea561fee1f)) +* **editor:** UI enhancements and fixes for expression inputs ([#8996](https://github.com/n8n-io/n8n/issues/8996)) ([8788e2a](https://github.com/n8n-io/n8n/commit/8788e2a35bed261e13da5c92ee31bbb414d019a4)) +* Prevent chat modal opening on 'Test workflow' click ([#9009](https://github.com/n8n-io/n8n/issues/9009)) ([3fd97e4](https://github.com/n8n-io/n8n/commit/3fd97e4c7299928a498e359b16f6f21eed9f0878)) +* Stop listening button not working in NDV ([#9023](https://github.com/n8n-io/n8n/issues/9023)) ([02219dd](https://github.com/n8n-io/n8n/commit/02219dde2fa3c16145c3985272567b334b69dd54)) + + +### Features + +* Add Salesforce Trigger Node ([#8920](https://github.com/n8n-io/n8n/issues/8920)) ([571b613](https://github.com/n8n-io/n8n/commit/571b6135dd41ef983a822f210c09e3623e8ee605)) +* Add Twilio Trigger Node ([#8859](https://github.com/n8n-io/n8n/issues/8859)) ([c204995](https://github.com/n8n-io/n8n/commit/c204995d9c5683d92cc7c7bd89c530ad3318b06d)) +* **core:** Introduce AWS secrets manager as external secrets store ([#8982](https://github.com/n8n-io/n8n/issues/8982)) ([2aab78b](https://github.com/n8n-io/n8n/commit/2aab78b058f46c7b1692503a2b3b6bfb8939c128)) +* **core:** Rate-limit login endpoint to mitigate brute force password guessing attacks ([#9028](https://github.com/n8n-io/n8n/issues/9028)) ([a6446fe](https://github.com/n8n-io/n8n/commit/a6446fe057749536344c4170395ce149340cd889)) +* **editor:** Update templates links ([#9024](https://github.com/n8n-io/n8n/issues/9024)) ([4619dec](https://github.com/n8n-io/n8n/commit/4619dec285da14bb097df225a5682ed8babd82dd)) +* **Webhook Node:** Overhaul ([#8889](https://github.com/n8n-io/n8n/issues/8889)) ([e84c27c](https://github.com/n8n-io/n8n/commit/e84c27c0cebd6fba135298ea18844045dcf55b4c)) + + + +# [1.35.0](https://github.com/n8n-io/n8n/compare/n8n@1.33.0...n8n@1.35.0) (2024-03-27) + + +### Bug Fixes + +* **Anthropic Chat Model Node:** Fix detection of chat models in docker build & add support Claude Haiku ([#8953](https://github.com/n8n-io/n8n/issues/8953)) ([76041b8](https://github.com/n8n-io/n8n/commit/76041b8587fc5943ee80338774125d1fabb8e927)) +* Chat Trigger exclude summarization node from valid ai nodes ([#8875](https://github.com/n8n-io/n8n/issues/8875)) ([4861556](https://github.com/n8n-io/n8n/commit/4861556a1c7da643fdc924f7f65dc89a7453744a)) +* **Cohere Model Node:** Fix issue with credential test ([#8916](https://github.com/n8n-io/n8n/issues/8916)) ([4f0b52c](https://github.com/n8n-io/n8n/commit/4f0b52c45d1f165159787197fd41138059b13db6)) +* **core:** Add missing `nodeCause` to paired item error ([#8976](https://github.com/n8n-io/n8n/issues/8976)) ([19d9e71](https://github.com/n8n-io/n8n/commit/19d9e71cb90d7085256496df8325564c13db3af4)) +* **core:** Assign credential ownership correctly in source control import ([#8955](https://github.com/n8n-io/n8n/issues/8955)) ([260bc07](https://github.com/n8n-io/n8n/commit/260bc07ca9484b6e82cc9dc82c68a6c1c58f4a49)) +* **core:** Ensure the generic OAuth2 API credential uses the OAuth2 credential test ([#8941](https://github.com/n8n-io/n8n/issues/8941)) ([079a114](https://github.com/n8n-io/n8n/commit/079a1147d41442bb7269d5e9da30e45019438ba2)) +* **core:** Improve handling of invalid objects in `cleanupParameterData` (no-chanhelog) ([#8910](https://github.com/n8n-io/n8n/issues/8910)) ([33ab781](https://github.com/n8n-io/n8n/commit/33ab781aef1b9107f9ecc7ec22c9b264b4eaae63)) +* **core:** Remove HTTP body for GET, HEAD, and OPTIONS requests ([#3621](https://github.com/n8n-io/n8n/issues/3621)) ([d85d0ec](https://github.com/n8n-io/n8n/commit/d85d0ecf45e8f256536bdd7cad6aab85971e8e43)) +* **core:** Stringify all Luxon DateTimes in cleanupParameterData ([#8959](https://github.com/n8n-io/n8n/issues/8959)) ([1fb0dd4](https://github.com/n8n-io/n8n/commit/1fb0dd4f1c074ad6462d42bea030e3bafecef2ad)) +* **core:** Update `follow-redirects` to address CVE-2024-28849 ([#8902](https://github.com/n8n-io/n8n/issues/8902)) ([a10120f](https://github.com/n8n-io/n8n/commit/a10120f74efa4c636f26eafc996e71bd372f8ee8)) +* **editor:** Add proper scroll to Environments push modal ([#8883](https://github.com/n8n-io/n8n/issues/8883)) ([bcbff76](https://github.com/n8n-io/n8n/commit/bcbff760553058f8fb43b379130db0cd064fd869)) +* **editor:** Fix accidental IDE code addition ([#8971](https://github.com/n8n-io/n8n/issues/8971)) ([117b57c](https://github.com/n8n-io/n8n/commit/117b57ccc5e3904d6ffc748d198d331f3008bcd3)) +* **editor:** Fix an issue with an empty chat response if not in `output` property ([#8913](https://github.com/n8n-io/n8n/issues/8913)) ([024be62](https://github.com/n8n-io/n8n/commit/024be62693e96020c284116110944e90c7bcf1a8)) +* **editor:** Fix design system component props ([#8923](https://github.com/n8n-io/n8n/issues/8923)) ([7176cd1](https://github.com/n8n-io/n8n/commit/7176cd1407e028ba8c543179b128c7e2ac9c0369)) +* **editor:** Fix opening of chat window when executing a child node ([#8789](https://github.com/n8n-io/n8n/issues/8789)) ([5f53d76](https://github.com/n8n-io/n8n/commit/5f53d76e39395a8effdfeba0677f333b509ec8c8)) +* **editor:** Fix source control docs link in add workflow button tooltip ([#8891](https://github.com/n8n-io/n8n/issues/8891)) ([a92d8bf](https://github.com/n8n-io/n8n/commit/a92d8bfc6e2fcc4bf79fc3f6564fdb864ccd3f41)) +* **editor:** Improve expression editor performance by removing watchers ([#8900](https://github.com/n8n-io/n8n/issues/8900)) ([a5261d6](https://github.com/n8n-io/n8n/commit/a5261d6ebb8fa4ac8796b04920a4fa4bc43bb397)) +* **editor:** Make inputs in the filter component regular inputs by default ([#8980](https://github.com/n8n-io/n8n/issues/8980)) ([295b650](https://github.com/n8n-io/n8n/commit/295b650fb8bd423eba506bc09a5746451db2c085)) +* **editor:** Nodes connectors improvements ([#8945](https://github.com/n8n-io/n8n/issues/8945)) ([264f918](https://github.com/n8n-io/n8n/commit/264f918d9720e2a11ec011993df1e7a4cb776882)) +* **editor:** Remove `isOwner` from IUser interface ([#8888](https://github.com/n8n-io/n8n/issues/8888)) ([6955e89](https://github.com/n8n-io/n8n/commit/6955e8991ca2ec13e6298c3c18ec2b28853ceda4)) +* **editor:** Use bracket notation for all invalid identifiers in expressions ([#8933](https://github.com/n8n-io/n8n/issues/8933)) ([0e4216d](https://github.com/n8n-io/n8n/commit/0e4216d7afb6a09547ae575fcfd13e9fac22b350)) +* **MySQL Node:** Set paired items correctly in single query batch mode ([#8940](https://github.com/n8n-io/n8n/issues/8940)) ([89df277](https://github.com/n8n-io/n8n/commit/89df277b80002f46d198d7b8bd3d81f5b815c116)) +* OpenAI Node function to preserve original tools after node execution ([#8872](https://github.com/n8n-io/n8n/issues/8872)) ([054a4fc](https://github.com/n8n-io/n8n/commit/054a4fce1a8163f2201efd846938b909c7d0e394)) +* Overhaul expression error messages related to paired item ([#8765](https://github.com/n8n-io/n8n/issues/8765)) ([45461c8](https://github.com/n8n-io/n8n/commit/45461c8cb57aa22697e58c6c52a25ab1d6d633d9)) +* **Pinecone Vector Store Node:** Fix vector store nodes execution issue ([#8968](https://github.com/n8n-io/n8n/issues/8968)) ([323b901](https://github.com/n8n-io/n8n/commit/323b9016c8c2409d5b72c6cc2fdb0cf6f2ba118b)) +* Validate custom tool names for forbidden chars ([#8878](https://github.com/n8n-io/n8n/issues/8878)) ([edce632](https://github.com/n8n-io/n8n/commit/edce632ee62fdb9485d1ed07ead7dd3c0d2afcf8)) + + +### Features + +* Add AI Error Debugging using OpenAI ([#8805](https://github.com/n8n-io/n8n/issues/8805)) ([948c383](https://github.com/n8n-io/n8n/commit/948c383999726278377f74987cd36ed6a5b39b7b)) +* Add Onedrive Trigger Node ([#8742](https://github.com/n8n-io/n8n/issues/8742)) ([ff8dd4e](https://github.com/n8n-io/n8n/commit/ff8dd4e604216203800d9b12fd5f1105356cf03e)) +* **core:** Add support for SQLite connection pooling ([#8722](https://github.com/n8n-io/n8n/issues/8722)) ([c4c319d](https://github.com/n8n-io/n8n/commit/c4c319d7cfb30772cca248a0039fd8e2b1c99eb7)) +* **editor:** Add missing extension methods for expressions ([#8845](https://github.com/n8n-io/n8n/issues/8845)) ([5e84c2a](https://github.com/n8n-io/n8n/commit/5e84c2ab89c7d0e4365b32b1c94a9c10cea56cb9)) +* **editor:** Add type information to autocomplete dropdown ([#8843](https://github.com/n8n-io/n8n/issues/8843)) ([d7bfd45](https://github.com/n8n-io/n8n/commit/d7bfd45333cc9780ae5f1424f33de2093bd1a2f9)) +* **editor:** Block the frontend when trying to access n8n from another host over http ([#8906](https://github.com/n8n-io/n8n/issues/8906)) ([669bd83](https://github.com/n8n-io/n8n/commit/669bd830e9b1b0f986d8a8b4525d0bdc3e3c0bd7)) +* **editor:** Refactor expression editors and mixins to composition API ([#8894](https://github.com/n8n-io/n8n/issues/8894)) ([0c179e4](https://github.com/n8n-io/n8n/commit/0c179e4e511e4e6075d390afc025c93630ef3241)) +* **editor:** Release `@n8n/chat@0.9.1` ([#8918](https://github.com/n8n-io/n8n/issues/8918)) ([e0c303c](https://github.com/n8n-io/n8n/commit/e0c303c6c10145a2ef72daaf4142315cf65c839a)) +* **editor:** Show tip when user can type dot after an expression ([#8931](https://github.com/n8n-io/n8n/issues/8931)) ([160dfd3](https://github.com/n8n-io/n8n/commit/160dfd383d79fc44be79e5a071dc5f6c6b67469b)) +* Fetch user cloud role and pass it on in website links ([#8942](https://github.com/n8n-io/n8n/issues/8942)) ([666867a](https://github.com/n8n-io/n8n/commit/666867a236bce519dbd1a8f9162d4ced1b80d567)) +* Telemetry include basic llm optional promps, trigger on save workflow event ([#8981](https://github.com/n8n-io/n8n/issues/8981)) ([335f363](https://github.com/n8n-io/n8n/commit/335f363ca16814d6ca1a8a92fc9da145b8eed990)) + + + +## [1.34.2](https://github.com/n8n-io/n8n/compare/n8n@1.34.1...n8n@1.34.2) (2024-03-26) + + +### Bug Fixes + +* **editor:** Nodes connectors improvements ([#8945](https://github.com/n8n-io/n8n/issues/8945)) ([6310e36](https://github.com/n8n-io/n8n/commit/6310e36c8eaf331b4116666677a82b9a75f862dc)) +* **Pinecone Vector Store Node:** Fix vector store nodes execution issue ([#8968](https://github.com/n8n-io/n8n/issues/8968)) ([9bd14c0](https://github.com/n8n-io/n8n/commit/9bd14c053c8b5410a49d3a5f3354e5ed0feed3b3)) + + + +## [1.34.1](https://github.com/n8n-io/n8n/compare/n8n@1.34.0...n8n@1.34.1) (2024-03-25) + + +### Bug Fixes + +* **Anthropic Chat Model Node:** Fix detection of chat models in docker build & add support Claude Haiku ([#8953](https://github.com/n8n-io/n8n/issues/8953)) ([becc804](https://github.com/n8n-io/n8n/commit/becc8045646bfd6ace40895288f5f5a323c7fc8e)) +* **core:** Ensure the generic OAuth2 API credential uses the OAuth2 credential test ([#8941](https://github.com/n8n-io/n8n/issues/8941)) ([578f01a](https://github.com/n8n-io/n8n/commit/578f01a02ccdef014938dfd3194bae182e02442a)) +* **core:** Stringify all Luxon DateTimes in cleanupParameterData ([#8959](https://github.com/n8n-io/n8n/issues/8959)) ([58d9983](https://github.com/n8n-io/n8n/commit/58d9983d0efd50d01d8406b949a4e7a3db63e465)) +* **editor:** Fix opening of chat window when executing a child node ([#8789](https://github.com/n8n-io/n8n/issues/8789)) ([e695927](https://github.com/n8n-io/n8n/commit/e69592784965f24a9c061f9a10bae58a72d2cc69)) +* **editor:** Use bracket notation for all invalid identifiers in expressions ([#8933](https://github.com/n8n-io/n8n/issues/8933)) ([1316f2d](https://github.com/n8n-io/n8n/commit/1316f2d682d847d314e0175781a4fe7561205324)) +* **MySQL Node:** Set paired items correctly in single query batch mode ([#8940](https://github.com/n8n-io/n8n/issues/8940)) ([5d129ba](https://github.com/n8n-io/n8n/commit/5d129baa2df3ff9cb2a608d4162e645e5dc64ae6)) +* Overhaul expression error messages related to paired item ([#8765](https://github.com/n8n-io/n8n/issues/8765)) ([09654f9](https://github.com/n8n-io/n8n/commit/09654f9dcca77710d91b3a6543ce50fb933eb870)) + + + +# [1.34.0](https://github.com/n8n-io/n8n/compare/n8n@1.33.0...n8n@1.34.0) (2024-03-20) + + +### Bug Fixes + +* Chat Trigger exclude summarization node from valid ai nodes ([#8875](https://github.com/n8n-io/n8n/issues/8875)) ([4861556](https://github.com/n8n-io/n8n/commit/4861556a1c7da643fdc924f7f65dc89a7453744a)) +* **Cohere Model Node:** Fix issue with credential test ([#8916](https://github.com/n8n-io/n8n/issues/8916)) ([4f0b52c](https://github.com/n8n-io/n8n/commit/4f0b52c45d1f165159787197fd41138059b13db6)) +* **core:** Improve handling of invalid objects in `cleanupParameterData` (no-chanhelog) ([#8910](https://github.com/n8n-io/n8n/issues/8910)) ([33ab781](https://github.com/n8n-io/n8n/commit/33ab781aef1b9107f9ecc7ec22c9b264b4eaae63)) +* **core:** Remove HTTP body for GET, HEAD, and OPTIONS requests ([#3621](https://github.com/n8n-io/n8n/issues/3621)) ([d85d0ec](https://github.com/n8n-io/n8n/commit/d85d0ecf45e8f256536bdd7cad6aab85971e8e43)) +* **core:** Update `follow-redirects` to address CVE-2024-28849 ([#8902](https://github.com/n8n-io/n8n/issues/8902)) ([a10120f](https://github.com/n8n-io/n8n/commit/a10120f74efa4c636f26eafc996e71bd372f8ee8)) +* **editor:** Add proper scroll to Environments push modal ([#8883](https://github.com/n8n-io/n8n/issues/8883)) ([bcbff76](https://github.com/n8n-io/n8n/commit/bcbff760553058f8fb43b379130db0cd064fd869)) +* **editor:** Fix an issue with an empty chat response if not in `output` property ([#8913](https://github.com/n8n-io/n8n/issues/8913)) ([024be62](https://github.com/n8n-io/n8n/commit/024be62693e96020c284116110944e90c7bcf1a8)) +* **editor:** Fix design system component props ([#8923](https://github.com/n8n-io/n8n/issues/8923)) ([7176cd1](https://github.com/n8n-io/n8n/commit/7176cd1407e028ba8c543179b128c7e2ac9c0369)) +* **editor:** Fix source control docs link in add workflow button tooltip ([#8891](https://github.com/n8n-io/n8n/issues/8891)) ([a92d8bf](https://github.com/n8n-io/n8n/commit/a92d8bfc6e2fcc4bf79fc3f6564fdb864ccd3f41)) +* **editor:** Improve expression editor performance by removing watchers ([#8900](https://github.com/n8n-io/n8n/issues/8900)) ([a5261d6](https://github.com/n8n-io/n8n/commit/a5261d6ebb8fa4ac8796b04920a4fa4bc43bb397)) +* **editor:** Remove `isOwner` from IUser interface ([#8888](https://github.com/n8n-io/n8n/issues/8888)) ([6955e89](https://github.com/n8n-io/n8n/commit/6955e8991ca2ec13e6298c3c18ec2b28853ceda4)) +* OpenAI Node function to preserve original tools after node execution ([#8872](https://github.com/n8n-io/n8n/issues/8872)) ([054a4fc](https://github.com/n8n-io/n8n/commit/054a4fce1a8163f2201efd846938b909c7d0e394)) +* Validate custom tool names for forbidden chars ([#8878](https://github.com/n8n-io/n8n/issues/8878)) ([edce632](https://github.com/n8n-io/n8n/commit/edce632ee62fdb9485d1ed07ead7dd3c0d2afcf8)) + + +### Features + +* Add AI Error Debugging using OpenAI ([#8805](https://github.com/n8n-io/n8n/issues/8805)) ([948c383](https://github.com/n8n-io/n8n/commit/948c383999726278377f74987cd36ed6a5b39b7b)) +* Add Onedrive Trigger Node ([#8742](https://github.com/n8n-io/n8n/issues/8742)) ([ff8dd4e](https://github.com/n8n-io/n8n/commit/ff8dd4e604216203800d9b12fd5f1105356cf03e)) +* **core:** Add support for SQLite connection pooling ([#8722](https://github.com/n8n-io/n8n/issues/8722)) ([c4c319d](https://github.com/n8n-io/n8n/commit/c4c319d7cfb30772cca248a0039fd8e2b1c99eb7)) +* **editor:** Add missing extension methods for expressions ([#8845](https://github.com/n8n-io/n8n/issues/8845)) ([5e84c2a](https://github.com/n8n-io/n8n/commit/5e84c2ab89c7d0e4365b32b1c94a9c10cea56cb9)) +* **editor:** Add type information to autocomplete dropdown ([#8843](https://github.com/n8n-io/n8n/issues/8843)) ([d7bfd45](https://github.com/n8n-io/n8n/commit/d7bfd45333cc9780ae5f1424f33de2093bd1a2f9)) +* **editor:** Block the frontend when trying to access n8n from another host over http ([#8906](https://github.com/n8n-io/n8n/issues/8906)) ([669bd83](https://github.com/n8n-io/n8n/commit/669bd830e9b1b0f986d8a8b4525d0bdc3e3c0bd7)) +* **editor:** Refactor expression editors and mixins to composition API ([#8894](https://github.com/n8n-io/n8n/issues/8894)) ([0c179e4](https://github.com/n8n-io/n8n/commit/0c179e4e511e4e6075d390afc025c93630ef3241)) +* **editor:** Release `@n8n/chat@0.9.1` ([#8918](https://github.com/n8n-io/n8n/issues/8918)) ([e0c303c](https://github.com/n8n-io/n8n/commit/e0c303c6c10145a2ef72daaf4142315cf65c839a)) + +# [1.33.0](https://github.com/n8n-io/n8n/compare/n8n@1.32.0...n8n@1.33.0) (2024-03-13) + + +### Bug Fixes + +* **core:** Always register webhooks on startup ([#8830](https://github.com/n8n-io/n8n/issues/8830)) ([c6f6254](https://github.com/n8n-io/n8n/commit/c6f6254c0e5197d4c0ba19aa52a1714e991a33b2)) +* **core:** Add fallback for pairedItem info in runPartialWorkflow ([#8842](https://github.com/n8n-io/n8n/issues/8842)) ([bd465d3](https://github.com/n8n-io/n8n/commit/bd465d394aa9eb74a127748ebda1fc84a158d236)) +* **core:** Display readable error when manual executions contains large payload ([#8834](https://github.com/n8n-io/n8n/issues/8834)) ([261b9c7](https://github.com/n8n-io/n8n/commit/261b9c73d6fbb06610839b80bb1f89125893b89b)) +* **core:** Ignore semver range when upgrading comunity packages ([#8863](https://github.com/n8n-io/n8n/issues/8863)) ([11173a0](https://github.com/n8n-io/n8n/commit/11173a011468160999e2c3f4a380741edf3ba37e)) +* **editor:** Allow sharee to use workflows with http request node without credential access ([#8841](https://github.com/n8n-io/n8n/issues/8841)) ([bde4c6c](https://github.com/n8n-io/n8n/commit/bde4c6c7a19b7275cabbbc3e4d0c5ec14be54769)) +* **editor:** Disable pinning for root nodes from canvas ([#8848](https://github.com/n8n-io/n8n/issues/8848)) ([e10fa37](https://github.com/n8n-io/n8n/commit/e10fa379d3212fd9fd964d8468add07b257af7e1)) +* **editor:** Fix workflow card open action ([#8839](https://github.com/n8n-io/n8n/issues/8839)) ([dd40570](https://github.com/n8n-io/n8n/commit/dd405700568acdc893358ef239e8f8637da66307)) +* **editor:** Make inputs in the filter component expressions by default ([#8784](https://github.com/n8n-io/n8n/issues/8784)) ([6e2aa40](https://github.com/n8n-io/n8n/commit/6e2aa405fcdff3f9b1f75d9e22719f6c0c500aa9)) +* **editor:** Improve filter component error handling ([#8832](https://github.com/n8n-io/n8n/issues/8832)) ([76fe960](https://github.com/n8n-io/n8n/commit/76fe960a7613b51a95720504537112fba13bb1d6)) +* **GitHub Document Loader Node:** Fix issue with ignore paths not working correctly ([#8798](https://github.com/n8n-io/n8n/issues/8798)) ([c8d589c](https://github.com/n8n-io/n8n/commit/c8d589cce74dc1267d8058fc8f0b61b516969b79)) +* **Notion Node:** Regex for block id ([#8860](https://github.com/n8n-io/n8n/issues/8860)) ([a1f6c57](https://github.com/n8n-io/n8n/commit/a1f6c570d63a8acd7b623fb039bfdbcd017dc022)) +* **OpenAI Node:** text > message hide tools connector for unsupported models ([#8866](https://github.com/n8n-io/n8n/issues/8866)) ([cef7c24](https://github.com/n8n-io/n8n/commit/cef7c24b7779000386e45dae4c3ee25dd2d6251b)) + + +### Features + +* **editor:** Add more AI node info to telemetry ([#8827](https://github.com/n8n-io/n8n/issues/8827)) ([ed6dc86](https://github.com/n8n-io/n8n/commit/ed6dc86d60e30ed6e5992e0bd1b27e8cd59d689b)) +* **editor:** Add sections to autocomplete dropdown ([#8720](https://github.com/n8n-io/n8n/issues/8720)) ([9b4618d](https://github.com/n8n-io/n8n/commit/9b4618dd5e58337b73e8804f11d7aca9a9bf1dc3)) +* **editor:** Help users discover expressions when using drag n drop ([#8869](https://github.com/n8n-io/n8n/issues/8869)) ([e78cc2d](https://github.com/n8n-io/n8n/commit/e78cc2d8d2d22bdea30af45edd8e319d479deb55)) +* **editor:** Improve errors in output panel ([#8644](https://github.com/n8n-io/n8n/issues/8644)) ([5301323](https://github.com/n8n-io/n8n/commit/5301323906663a64a3042bd2f8946e5f1e3f6293)) +* **Pinecone Vector Store Node:** Support serverless environments ([#8849](https://github.com/n8n-io/n8n/issues/8849)) ([a136a73](https://github.com/n8n-io/n8n/commit/a136a73e4e15b5d2d1c11ef90caec75d0318f829)) +* **Wordpress Node:** Support WordPress pages ([#8852](https://github.com/n8n-io/n8n/issues/8852)) ([a678e85](https://github.com/n8n-io/n8n/commit/a678e8570b72514b0b5da6fcac4da5534d05fee8)) + + + +# [1.32.0](https://github.com/n8n-io/n8n/compare/n8n@1.31.0...n8n@1.32.0) (2024-03-06) + + +### Bug Fixes + +* AI agents, throw error on duplicate names in dynamic tools ([#8766](https://github.com/n8n-io/n8n/issues/8766)) ([75e4df1](https://github.com/n8n-io/n8n/commit/75e4df138fc103a3370239e906b9e600dc14c835)) +* **Basic LLM Chain Node:** Fix retrieving of prompt parameter for v1.3 of the node ([#8817](https://github.com/n8n-io/n8n/issues/8817)) ([82f66c8](https://github.com/n8n-io/n8n/commit/82f66c87e0e6969535559aaa879fe1f66c6ff31f)) +* **editor:** Fix NDV output tabs resetting on any click ([#8808](https://github.com/n8n-io/n8n/issues/8808)) ([c7c1767](https://github.com/n8n-io/n8n/commit/c7c17673cbdffd328032c9ec09be17c1f9018a4e)) +* **editor:** Fix opening of node creator for sub-nodes connection hint link ([#8809](https://github.com/n8n-io/n8n/issues/8809)) ([df064af](https://github.com/n8n-io/n8n/commit/df064af6451cae0d5e389abae98fd9516b448272)) +* **editor:** Fix retrieving of messages from memory in chat modal ([#8807](https://github.com/n8n-io/n8n/issues/8807)) ([bfda8ea](https://github.com/n8n-io/n8n/commit/bfda8ead0c449b262d57f14c1e8a077d21bac441)) +* **editor:** Set correct type for right input in filter component ([#8771](https://github.com/n8n-io/n8n/issues/8771)) ([5d54663](https://github.com/n8n-io/n8n/commit/5d5466343e61125c0682d65a6829cbaf816d5a90)) +* **editor:** Update assignment hint when user hovers table row ([#8782](https://github.com/n8n-io/n8n/issues/8782)) ([8c993aa](https://github.com/n8n-io/n8n/commit/8c993aa59dd6712703d5cc0a84949b0fa7dd874a)) +* **editor:** Upgrade sanitize-html to address CVE-2024-21501 ([#8816](https://github.com/n8n-io/n8n/issues/8816)) ([a3e9e3d](https://github.com/n8n-io/n8n/commit/a3e9e3db62f9794fe4b3ae414a2d252edb6196aa)) +* **Google Drive Node:** Add supportsAllDrives: true to update and download ([#8786](https://github.com/n8n-io/n8n/issues/8786)) ([11a5331](https://github.com/n8n-io/n8n/commit/11a5331e038fc383e454230dd9996015d7ce9b16)) +* **HubSpot Node:** Include properties for contact and deal in getAll operation ([#8772](https://github.com/n8n-io/n8n/issues/8772)) ([08e2b06](https://github.com/n8n-io/n8n/commit/08e2b068fb241b3e44eebbc8d6053603d977ca32)) +* **n8n Form Trigger Node:** Do not open pop up when data is pinned in trigger ([#8781](https://github.com/n8n-io/n8n/issues/8781)) ([0481e6e](https://github.com/n8n-io/n8n/commit/0481e6e6e7259cef5f4ac1c88dd0b45ef402f166)) +* **OpenAI Node:** Message text operation parameters case fix ([#8804](https://github.com/n8n-io/n8n/issues/8804)) ([e38e96b](https://github.com/n8n-io/n8n/commit/e38e96bbec4a5f355ab0a8bb87bad3787032e9c5)) +* Simplify Structured Output Parser wrapping and fix auto-fixing output parser ([#8778](https://github.com/n8n-io/n8n/issues/8778)) ([7d82dc1](https://github.com/n8n-io/n8n/commit/7d82dc1ea8c86c2a3575c3629b29af3cfb709f44)) +* **TheHive 5 Node:** The Hive - Custom fields are no longer working ([#8780](https://github.com/n8n-io/n8n/issues/8780)) ([961d6b9](https://github.com/n8n-io/n8n/commit/961d6b9266344e221e21a771546b49c0c13ea80c)) +* **Wait Node:** Change default wait period to 5 seconds ([#8783](https://github.com/n8n-io/n8n/issues/8783)) ([a521e7a](https://github.com/n8n-io/n8n/commit/a521e7a54d746189f098ae31fc06a92975dab5a9)) + + +### Features + +* Chat Memory Manager group messages option, on insert delete return confirmation of success instead of messages ([#8757](https://github.com/n8n-io/n8n/issues/8757)) ([246bfb9](https://github.com/n8n-io/n8n/commit/246bfb9ad4349cc17c2df64b357ddb96f794dfc5)) +* **core:** Update hashing strategy for JWTs ([#8810](https://github.com/n8n-io/n8n/issues/8810)) ([cdec7c9](https://github.com/n8n-io/n8n/commit/cdec7c9334ef83a7e667a8bd5a649f165402f4e5)) +* **Notion Node:** Continue on fail support ([#8788](https://github.com/n8n-io/n8n/issues/8788)) ([4850f6a](https://github.com/n8n-io/n8n/commit/4850f6a9cca3ae5b3a08e8b68d5404293367465a)) +* Track node errors on PostHog ([#8774](https://github.com/n8n-io/n8n/issues/8774)) ([35f6826](https://github.com/n8n-io/n8n/commit/35f6826150ed91c679c855aa4ce5d1f5d5e072bd)) + + +### Performance Improvements + +* Upgrade Vue ([#8806](https://github.com/n8n-io/n8n/issues/8806)) ([1600433](https://github.com/n8n-io/n8n/commit/16004331b13d5d4cf3d379ab9c98fc898db14eeb)) + + + +# [1.31.0](https://github.com/n8n-io/n8n/compare/n8n@1.30.0...n8n@1.31.0) (2024-02-28) + + +### Bug Fixes + +* **core:** Ensure `maxRedirects` is used for any http request defining it ([#8706](https://github.com/n8n-io/n8n/issues/8706)) ([246c988](https://github.com/n8n-io/n8n/commit/246c988b9373a838086f37e603ec2827cf849588)) +* **core:** Fix pairedItem issue with partial manual executions ([#8575](https://github.com/n8n-io/n8n/issues/8575)) ([a29b41e](https://github.com/n8n-io/n8n/commit/a29b41ec55d8a0cf5610a53087e455b7e649b8bc)) +* **Default Data Loader Node:** Fix binary data loader in s3 mode ([#8626](https://github.com/n8n-io/n8n/issues/8626)) ([a5e6f59](https://github.com/n8n-io/n8n/commit/a5e6f5928ae39f19d6cb55a234818e776141e325)) +* **editor:** Do not break NDV for version-less nodes ([#8714](https://github.com/n8n-io/n8n/issues/8714)) ([8a88d15](https://github.com/n8n-io/n8n/commit/8a88d156847852b38e1fd13f3b9240887491a665)) +* **editor:** Hide previous execution data for sub-nodes in debug mode if it has execution error ([#8710](https://github.com/n8n-io/n8n/issues/8710)) ([a973b9c](https://github.com/n8n-io/n8n/commit/a973b9c077d28faa45b527cf6e0f0e6644cf354a)) +* **editor:** Update Filter component state when value is updated ([#8684](https://github.com/n8n-io/n8n/issues/8684)) ([3ba2cdc](https://github.com/n8n-io/n8n/commit/3ba2cdcadbf4df4e4521cb03bf63f13a32a926a5)) +* Fix execution error when using AI chain nodes with non-chat model ([#8724](https://github.com/n8n-io/n8n/issues/8724)) ([0882dc0](https://github.com/n8n-io/n8n/commit/0882dc0ce9ad4c9260390f99be56df2d6f7b5e86)) +* **Postgres Trigger Node:** `closeFunction` errors should not prevent a workflow from being deactivated ([#8738](https://github.com/n8n-io/n8n/issues/8738)) ([7012577](https://github.com/n8n-io/n8n/commit/7012577fce796c6d18ab8081f90014a8cded7391)) +* Send user id when setting up an account ([#8639](https://github.com/n8n-io/n8n/issues/8639)) ([27f3166](https://github.com/n8n-io/n8n/commit/27f3166272455627a2d2f851a286126310a4d5b5)) +* **Trello Node:** Remove GET request body ([#8715](https://github.com/n8n-io/n8n/issues/8715)) ([8c4a744](https://github.com/n8n-io/n8n/commit/8c4a744c56ce84984ed837583cdfd7a296de5090)) +* Wrong prompt input key for sql agent ([#8708](https://github.com/n8n-io/n8n/issues/8708)) ([7c1cf33](https://github.com/n8n-io/n8n/commit/7c1cf33616eb1990a9d6d7f4b93e91575f2cddc8)) + + +### Features + +* Add env variables to support exposing `/workflows/demo` route and `/nodes.json` route ([#8506](https://github.com/n8n-io/n8n/issues/8506)) ([4b01335](https://github.com/n8n-io/n8n/commit/4b01335aa45d93b0e4f2b7c69503430f1bcca28a)) +* Add Outlook Trigger Node ([#8656](https://github.com/n8n-io/n8n/issues/8656)) ([720ae1b](https://github.com/n8n-io/n8n/commit/720ae1b96b4c6fd644bad60191c35d8d598ad666)) +* Add support for Ollama embeddings API ([#8732](https://github.com/n8n-io/n8n/issues/8732)) ([15490ad](https://github.com/n8n-io/n8n/commit/15490ad1d47c4f0d5c3f9eb350b2a1bcad4bbec0)) +* **AI Agent Node:** Allow use of Azure Chat model for OpenAI Functions agent ([#8725](https://github.com/n8n-io/n8n/issues/8725)) ([d03d927](https://github.com/n8n-io/n8n/commit/d03d9276f923d541f9c9ef86b8dc232f2737e30b)) +* Allow instance owners and admins to edit all credentials ([#8716](https://github.com/n8n-io/n8n/issues/8716)) ([7371708](https://github.com/n8n-io/n8n/commit/737170893d17108098c14db6be80071e8ef51930)) +* **editor:** AI Floating Nodes ([#8703](https://github.com/n8n-io/n8n/issues/8703)) ([41b191e](https://github.com/n8n-io/n8n/commit/41b191e0552aa2d92d442d1dea05913e8b386d4d)) +* **editor:** Retrieve previous chat message on arrow-up ([#8696](https://github.com/n8n-io/n8n/issues/8696)) ([246f8cf](https://github.com/n8n-io/n8n/commit/246f8cfcc3acdeb323849c94542fc4ad028c4f77)) +* No expression error when node hasn’t executed ([#8448](https://github.com/n8n-io/n8n/issues/8448)) ([f9a99ec](https://github.com/n8n-io/n8n/commit/f9a99ec0295499d95534d64e016f70339a56956b)) +* Session is selector for memory nodes ([#8736](https://github.com/n8n-io/n8n/issues/8736)) ([2aaf211](https://github.com/n8n-io/n8n/commit/2aaf211dfc270920a4885a2b086b98ab8a3c2af6)) +* SQL agent improvements ([#8709](https://github.com/n8n-io/n8n/issues/8709)) ([0952430](https://github.com/n8n-io/n8n/commit/09524304e6a8d1fdcdfe6340b71a5a443b942d6d)) + + + +# [1.30.0](https://github.com/n8n-io/n8n/compare/n8n@1.29.0...n8n@1.30.0) (2024-02-21) + + +### Bug Fixes + +* **AwsS3 Node:** Use location constrain ([#8654](https://github.com/n8n-io/n8n/issues/8654)) ([c73aeee](https://github.com/n8n-io/n8n/commit/c73aeeec3d296b3a6e203eba4513f6bd4bb65732)) +* **core:** Apply correct hostname to redirected requests ([#8674](https://github.com/n8n-io/n8n/issues/8674)) ([0e36aeb](https://github.com/n8n-io/n8n/commit/0e36aeb421997948ef5d5170fa8d9b50d25b852d)) +* **core:** Define `SHELL` env variable on docker images ([#8670](https://github.com/n8n-io/n8n/issues/8670)) ([e1a4fde](https://github.com/n8n-io/n8n/commit/e1a4fde207e392c372e3876946d6a5740721e253)) +* **editor:** Correctly set condition operator when changed ([#8700](https://github.com/n8n-io/n8n/issues/8700)) ([23a1bc4](https://github.com/n8n-io/n8n/commit/23a1bc40a2eb8d340eea635a48c75f59369095bb)) +* **editor:** Escape node names with quotes in autocomplete and drag'n'drop ([#8663](https://github.com/n8n-io/n8n/issues/8663)) ([890c2bd](https://github.com/n8n-io/n8n/commit/890c2bd52bd2ccd94fbc2e626dceda30554f9e82)) +* **editor:** Filter component: do not clear expression when changing operator ([#8635](https://github.com/n8n-io/n8n/issues/8635)) ([66cbe54](https://github.com/n8n-io/n8n/commit/66cbe54e1d0ec48a36e6b6b15aaf7201970932e7)) +* **editor:** Fix node runData and pinned data check on manual run ([#8669](https://github.com/n8n-io/n8n/issues/8669)) ([40c7f77](https://github.com/n8n-io/n8n/commit/40c7f77a35ef4e9bd4dbd9f28886b1b9e6af416f)) +* **editor:** Fix SQL editors not always re-rendering when query changes ([#8621](https://github.com/n8n-io/n8n/issues/8621)) ([8e9d310](https://github.com/n8n-io/n8n/commit/8e9d3106a5792a182753e4030c135893f8bad27e)) +* **editor:** Fix unnecessary execution of nodes when there is pin data ([#8567](https://github.com/n8n-io/n8n/issues/8567)) ([46fe544](https://github.com/n8n-io/n8n/commit/46fe544b9a38ea81093d846917af970141b8c86a)) +* **editor:** Handle drag-n-dropping from other nodes in assignment component ([#8661](https://github.com/n8n-io/n8n/issues/8661)) ([c943a51](https://github.com/n8n-io/n8n/commit/c943a51a28953c2ecd0f3ae4849fd8a0de187bfc)) +* **editor:** Send protocol and n8n version in templates destination parameter, stop redirecting template preview page to website ([#8691](https://github.com/n8n-io/n8n/issues/8691)) ([a573146](https://github.com/n8n-io/n8n/commit/a57314613586841c14e86f009bf42793545c33f8)) +* **editor:** Use proper composable for localization ([#8660](https://github.com/n8n-io/n8n/issues/8660)) ([9c0fe41](https://github.com/n8n-io/n8n/commit/9c0fe413d9beb669b8b9807f98569f46a1682855)) +* **editor:** Wrap expressions in resource locator component ([#8673](https://github.com/n8n-io/n8n/issues/8673)) ([e2f2fc9](https://github.com/n8n-io/n8n/commit/e2f2fc910df5ee06fa0b57b85689b5674b6774ba)) +* **Extract From File Node:** Make binary data work with any backend ([#8647](https://github.com/n8n-io/n8n/issues/8647)) ([d33d953](https://github.com/n8n-io/n8n/commit/d33d953497d25a50f17c71f7ecc7b9cc6332816e)) +* **FTP Node:** Continue of fail looping support with paired item ([#8659](https://github.com/n8n-io/n8n/issues/8659)) ([3279762](https://github.com/n8n-io/n8n/commit/327976222114956584fdb2de51c914ad57382988)) +* **FTP Node:** Fix "Maximum call stack size exceeded" error when dealing with too many files ([#8657](https://github.com/n8n-io/n8n/issues/8657)) ([5063674](https://github.com/n8n-io/n8n/commit/506367453c46485e5baff6510ce0c653ca4cc4e4)) +* **Google Calendar Node:** Errors with after/before options ([#8628](https://github.com/n8n-io/n8n/issues/8628)) ([bee17dd](https://github.com/n8n-io/n8n/commit/bee17dd6cc4eaabc252602a02d4ec109f42ef926)) +* **GraphQL Node:** Fix request format JSON error ([#8646](https://github.com/n8n-io/n8n/issues/8646)) ([bd4b50c](https://github.com/n8n-io/n8n/commit/bd4b50cf0882553b2ecb7f0b9bd93d154f775b4f)) +* **Postgres Node:** Close connection pool only if it's not already closed or closing ([#8690](https://github.com/n8n-io/n8n/issues/8690)) ([457cac4](https://github.com/n8n-io/n8n/commit/457cac4cf9f7093d48e9f4ccb0021423c18f0b8b)) + + +### Features + +* **AI Agent Node:** Whitelist Azure Chat model for Agent ([#8699](https://github.com/n8n-io/n8n/issues/8699)) ([40aecd1](https://github.com/n8n-io/n8n/commit/40aecd1715d4fec7e5024167e89d4b2171ec19e8)) +* **core:** Add support for $("NodeName").isExecuted ([#8683](https://github.com/n8n-io/n8n/issues/8683)) ([ad82f0c](https://github.com/n8n-io/n8n/commit/ad82f0c0c827e535a22b0a51e408f4cddea280e0)) +* **core:** Move execution permission checks earlier in the lifecycle ([#8677](https://github.com/n8n-io/n8n/issues/8677)) ([059d281](https://github.com/n8n-io/n8n/commit/059d281fd1efdd281d3c9bf3f3a6c614d343e7ca)) +* **editor:** Add chevron to filter component operator select ([#8633](https://github.com/n8n-io/n8n/issues/8633)) ([20446bd](https://github.com/n8n-io/n8n/commit/20446bdf11bd9f3528fd7b3bad61d522f1102f4d)) +* **Google Sheets Node:** Option how to combine filters when reading rows ([#8652](https://github.com/n8n-io/n8n/issues/8652)) ([a5e522e](https://github.com/n8n-io/n8n/commit/a5e522e5360bd72a5567c96aaf0076baf0d95b35)) +* **Google Workspace Admin Node:** Add support for error output branch ([#8499](https://github.com/n8n-io/n8n/issues/8499)) ([ef77571](https://github.com/n8n-io/n8n/commit/ef775711d01e77533775bd3c1e1f9bb1c508f2b2)) +* Introduce prompt type option for Agent, Basic LLM Chain, and QA Chain nodes ([#8697](https://github.com/n8n-io/n8n/issues/8697)) ([2068f18](https://github.com/n8n-io/n8n/commit/2068f186ffd64766051294e8652689618a0df3fb)) + + + +# [1.29.0](https://github.com/n8n-io/n8n/compare/n8n@1.28.0...n8n@1.29.0) (2024-02-15) + + +### Bug Fixes + +* **core:** Custom workflow tool tweaks ([#8561](https://github.com/n8n-io/n8n/issues/8561)) ([ccc0ad5](https://github.com/n8n-io/n8n/commit/ccc0ad5009b2d547accfc34a9c0917114fd19c81)) +* **core:** Give better error message if `executions.process` is still used in the configs ([#8618](https://github.com/n8n-io/n8n/issues/8618)) ([cd8ca84](https://github.com/n8n-io/n8n/commit/cd8ca8412d02090af07d8657283b7637178c975c)) +* **core:** Improve the startup error when EXECUTIONS_PROCESS is set ([#8630](https://github.com/n8n-io/n8n/issues/8630)) ([a2a3ca1](https://github.com/n8n-io/n8n/commit/a2a3ca160f253b3b09f83bdc6dec11987971e464)) +* **core:** Upgrade `@n8n/typeorm` to address postgres timestamp issues ([#8627](https://github.com/n8n-io/n8n/issues/8627)) ([68498cb](https://github.com/n8n-io/n8n/commit/68498cb72a16d587c4b24f9fe5e8ac2450cd78b9)) +* **core:** Upgrade rudderstack sdk to address npm postInstall issues ([#8568](https://github.com/n8n-io/n8n/issues/8568)) ([5750e8e](https://github.com/n8n-io/n8n/commit/5750e8e88ed59b40d5115416c8afe227cb64c70e)) +* **editor:** Debounce expression changes ([#8629](https://github.com/n8n-io/n8n/issues/8629)) ([9c7e026](https://github.com/n8n-io/n8n/commit/9c7e0266ee1c2112649772ca553bff429dcabc2d)) +* **Execute Workflow Node:** Passing the workflow that is supposed to be executed as a paramter ([#8614](https://github.com/n8n-io/n8n/issues/8614)) ([b54488a](https://github.com/n8n-io/n8n/commit/b54488ada53a9941f5fd4d3cab8d39bd81b22f4a)) +* Fix resolving of expressions of deeply nested sub-nodes ([#8612](https://github.com/n8n-io/n8n/issues/8612)) ([f527430](https://github.com/n8n-io/n8n/commit/f5274302f843c34f0a8a0b3eb51e7f9262fe0ea4)) +* **FTP Node:** Fix issue with connections not closing properly ([#8619](https://github.com/n8n-io/n8n/issues/8619)) ([e597fbc](https://github.com/n8n-io/n8n/commit/e597fbc78ff60ce495eecd9ffdffda801ed90b66)) +* **FTP Node:** Fix issue with paireditems not always working ([#8613](https://github.com/n8n-io/n8n/issues/8613)) ([d38a822](https://github.com/n8n-io/n8n/commit/d38a822b9501a8730c9cf097a9372e96080e8722)) +* **Google Sheets Trigger Node:** First non-header row is ignored when using on row added event ([#8580](https://github.com/n8n-io/n8n/issues/8580)) ([2db8231](https://github.com/n8n-io/n8n/commit/2db8231af5baed941b5250af373898c3924d3baa)) +* **HTTP Request Node:** Errorneous binary object without content-disposition response header ([#8583](https://github.com/n8n-io/n8n/issues/8583)) ([e28b374](https://github.com/n8n-io/n8n/commit/e28b374170725efeff59ac39e4ba6385bf834e7f)) +* **HTTP Request Node:** Handle special characters in pagination expressions + improve hint text ([#8576](https://github.com/n8n-io/n8n/issues/8576)) ([3b2078c](https://github.com/n8n-io/n8n/commit/3b2078c3caf2a5acee48fed3055b47dbfe0af44a)) +* **Jira Software Node:** Fix issue with not all issue types being supported ([#8571](https://github.com/n8n-io/n8n/issues/8571)) ([a6211c9](https://github.com/n8n-io/n8n/commit/a6211c9a5df9513ef057be1bfb78b4e0e2a75c2f)) +* **Merge Node:** Fixing how paired items are handled in the merge node, when choosing a branch and selecting to return an empty object ([#8479](https://github.com/n8n-io/n8n/issues/8479)) ([a3bed97](https://github.com/n8n-io/n8n/commit/a3bed97883ece25ffb4ab3a8246418b123c92e52)) +* **Microsoft Outlook Node:** Download executes more than once per incoming item ([#8566](https://github.com/n8n-io/n8n/issues/8566)) ([053fb5f](https://github.com/n8n-io/n8n/commit/053fb5ff7a3a4ce30b35fa6c830787b935ebaf63)) +* **Notion Node:** Block with text results in a body validation error ([#8622](https://github.com/n8n-io/n8n/issues/8622)) ([6bc1c3d](https://github.com/n8n-io/n8n/commit/6bc1c3d7a83436ee3b3520adf4b52f59f2b4231c)) +* **RSS Feed Trigger Node:** Save last item's date instead of last execution date ([#8572](https://github.com/n8n-io/n8n/issues/8572)) ([a822588](https://github.com/n8n-io/n8n/commit/a822588012b66711f37d3ca363fcd04742eda1b8)) +* **Wait Node:** Account for workflow timezone in Wait node datetime ([#8578](https://github.com/n8n-io/n8n/issues/8578)) ([1116a28](https://github.com/n8n-io/n8n/commit/1116a28b4582cae93e9d44890cfe020cd813521c)) + + +### Features + +* Add support for AI log streaming ([#8526](https://github.com/n8n-io/n8n/issues/8526)) ([7501ad8](https://github.com/n8n-io/n8n/commit/7501ad8f3c56d9fcc5f4ec3d6fc468ab9cdb5024)) +* Add telemetry event when users click on templates link ([#8625](https://github.com/n8n-io/n8n/issues/8625)) ([bf4f896](https://github.com/n8n-io/n8n/commit/bf4f896373acb2530a8f322cd612a3de616d6d15)) +* **API:** Add tag support to public API ([#8588](https://github.com/n8n-io/n8n/issues/8588)) ([a743a40](https://github.com/n8n-io/n8n/commit/a743a4037674ccb68a311daa5511cb48de6c9bfa)) +* **Convert to File Node:** Operation to convert a string in a plain text file, option to format JSON when creating file ([#8620](https://github.com/n8n-io/n8n/issues/8620)) ([d18cba3](https://github.com/n8n-io/n8n/commit/d18cba37a4a690cb3b4cd4259d27aedaa97193e4)) +* **core:** Migrate to n8n's typeorm fork ([#8590](https://github.com/n8n-io/n8n/issues/8590)) ([8e392cf](https://github.com/n8n-io/n8n/commit/8e392cfc1dd103a00b3a0e7c186cbfad989a5080)) +* **editor:** Use website as the main templates repository ([#8591](https://github.com/n8n-io/n8n/issues/8591)) ([79b09fd](https://github.com/n8n-io/n8n/commit/79b09fdf84860eee4c80e0c7eb7e320f6e05eabb)) +* **HTML Extract Node:** Better text extraction, option to specify selectors to skip, option to clean up text data ([#8586](https://github.com/n8n-io/n8n/issues/8586)) ([32281d1](https://github.com/n8n-io/n8n/commit/32281d12d775281e4b8e419d76e46ca9e3b47267)) +* **OpenAI Node:** Overhaul ([#8335](https://github.com/n8n-io/n8n/issues/8335)) ([941278d](https://github.com/n8n-io/n8n/commit/941278db6880ae3734a7a37aa03d7e6106ee5009)) +* Upgrade typeorm, sqlite3, and pg/pg-promise ([#8579](https://github.com/n8n-io/n8n/issues/8579)) ([7826bd8](https://github.com/n8n-io/n8n/commit/7826bd842a8e1548c1eab8fff942d2efe8b3dc75)) + + + +# [1.28.0](https://github.com/n8n-io/n8n/compare/n8n@1.27.0...n8n@1.28.0) (2024-02-07) + + +### Bug Fixes + +* Allow Date/Luxon objects and additional formats in DateTime validation ([#8525](https://github.com/n8n-io/n8n/issues/8525)) ([c419c85](https://github.com/n8n-io/n8n/commit/c419c8592f16a002d9f460c555db5f8bc04d95b8)) +* **core:** Ensure AxiosError status always gets copied over to NodeApiError ([#8509](https://github.com/n8n-io/n8n/issues/8509)) ([76c5a62](https://github.com/n8n-io/n8n/commit/76c5a62f521fbd79a47d47f419fd90dcc6ca0275)) +* **core:** Fix DropRoleMapping migration ([#8521](https://github.com/n8n-io/n8n/issues/8521)) ([4fed68e](https://github.com/n8n-io/n8n/commit/4fed68ee34c239ed3cae8541d5d4e7f86cf28d13)) +* **core:** Fix new graceful shutdown env being always overridden by deprecated env ([#8503](https://github.com/n8n-io/n8n/issues/8503)) ([cc41fc7](https://github.com/n8n-io/n8n/commit/cc41fc7c801ecb1b0de4b7c5af5a03b3f30fdce8)) +* **core:** Fix PermissionChecker.check, and add additional unit tests ([#8528](https://github.com/n8n-io/n8n/issues/8528)) ([5832d3c](https://github.com/n8n-io/n8n/commit/5832d3ca4695ec812e028e40b41811ca2215c0e2)) +* **core:** Fix test runs of triggers that rely on static data ([#8524](https://github.com/n8n-io/n8n/issues/8524)) ([528c071](https://github.com/n8n-io/n8n/commit/528c07134a6705c8c7a5378f15f5e4a4b93234a9)) +* **core:** Fix workflow tagging failure due to unique constraint check ([#8505](https://github.com/n8n-io/n8n/issues/8505)) ([92f939f](https://github.com/n8n-io/n8n/commit/92f939f82799975a5f9b859e7f342f3440961320)) +* **core:** Upgrade nodemailer to address an exploit ([#8535](https://github.com/n8n-io/n8n/issues/8535)) ([ee5e422](https://github.com/n8n-io/n8n/commit/ee5e4220945fde5baaec9ad66ff08b8728912aa3)) +* **core:** Use hostname from URL instead of Host header for SNI ([#8562](https://github.com/n8n-io/n8n/issues/8562)) ([7531f34](https://github.com/n8n-io/n8n/commit/7531f343861d91df075b8f3220f5bce8858b117f)) +* **core:** Use trx manager instead of repository for tags overwrite ([#8557](https://github.com/n8n-io/n8n/issues/8557)) ([abddbb6](https://github.com/n8n-io/n8n/commit/abddbb622798bdc4a2b11347a09f10aaf03a4639)) +* **editor:** Prune values that are not in the schema in the ResourceMapper component ([#8478](https://github.com/n8n-io/n8n/issues/8478)) ([612771e](https://github.com/n8n-io/n8n/commit/612771e0328f7e565d5f075cc20ad86bd1f13bce)) +* **Embeddings OpenAI Node:** Fix dynamic models fetching ([#8533](https://github.com/n8n-io/n8n/issues/8533)) ([cccdfc7](https://github.com/n8n-io/n8n/commit/cccdfc73d6c13a37e395fdc2612f2ebf458a4f52)) +* **HTTP Request Node:** Require parameter with filled name and value to avoid infinite loop ([#8454](https://github.com/n8n-io/n8n/issues/8454)) ([3128dca](https://github.com/n8n-io/n8n/commit/3128dca1faeff85d77a28640b7dfe8fbcd85db4f)) +* **HTTP Request Node:** Support form data when using pagination ([#8497](https://github.com/n8n-io/n8n/issues/8497)) ([ca75744](https://github.com/n8n-io/n8n/commit/ca75744c7f93db827ece5bf3b17b82f07d4cffb1)) +* **Microsoft Excel 365 Node:** Upsert append new rows at the end of used range, option to append at the end of selected range ([#8461](https://github.com/n8n-io/n8n/issues/8461)) ([1e02d73](https://github.com/n8n-io/n8n/commit/1e02d73ad782fb21cdd9b7350e34beb731a677c5)) +* **MongoDB Node:** Fix "Maximum call stack size exceeded" error on too many rows ([#8530](https://github.com/n8n-io/n8n/issues/8530)) ([76cdf75](https://github.com/n8n-io/n8n/commit/76cdf75fb96fb55b4a6e7a1a9edc7c9674806391)) +* **Slack Node:** Attachments fix ([#8471](https://github.com/n8n-io/n8n/issues/8471)) ([254700a](https://github.com/n8n-io/n8n/commit/254700a059a48a66dea8b9d80e61c8250e09d5b5)) +* Update BaseChatModel import checks for MistralAI compatibility ([#8527](https://github.com/n8n-io/n8n/issues/8527)) ([c8b8379](https://github.com/n8n-io/n8n/commit/c8b83790150b9974d6d99f6a2b6b5b7be6fb8c53)) + + +### Features + +* Add assignment component with drag and drop to Set node ([#8283](https://github.com/n8n-io/n8n/issues/8283)) ([2799de4](https://github.com/n8n-io/n8n/commit/2799de491b753e6fb00f73b61393392b6fc8ad18)) +* Azure Open AI chat model & embeddings ([#8522](https://github.com/n8n-io/n8n/issues/8522)) ([934d0d3](https://github.com/n8n-io/n8n/commit/934d0d35b1814c0a39595d61a30fb9c2e05fd995)) +* **editor:** Add delete and disable button to nodes on hover ([#8482](https://github.com/n8n-io/n8n/issues/8482)) ([994754b](https://github.com/n8n-io/n8n/commit/994754bf39976c5bb33fd1c30a0eb82cc518850b)) +* **Email Trigger (IMAP) Node:** Upgrade mailparser ([#8539](https://github.com/n8n-io/n8n/issues/8539)) ([da1fe44](https://github.com/n8n-io/n8n/commit/da1fe44d5246848e2ba7bb8bc5f4577685fbcee0)) +* **RabbitMQ Trigger Node:** Add options to configure assert of exchanges and queues ([#8430](https://github.com/n8n-io/n8n/issues/8430)) ([4b3659f](https://github.com/n8n-io/n8n/commit/4b3659f04f84ef774d31cf2341c5dbb500a73afe)) + + + +# [1.27.0](https://github.com/n8n-io/n8n/compare/n8n@1.26.0...n8n@1.27.0) (2024-01-31) + + +### Bug Fixes + +* **AwsS3 Node:** Fix handling of bucket with dot in name ([#8475](https://github.com/n8n-io/n8n/issues/8475)) ([0febe62](https://github.com/n8n-io/n8n/commit/0febe62ad03f82b85922e0cb66d60eeb22b3a919)) +* **core:** Don't report executions that have been paused as failed to rudderstack and log streams ([#8501](https://github.com/n8n-io/n8n/issues/8501)) ([39e8754](https://github.com/n8n-io/n8n/commit/39e875478488f3c81147944bd6b52dc1f9def958)) +* **core:** Fix stopping and retrying failed executions ([#8480](https://github.com/n8n-io/n8n/issues/8480)) ([238b54c](https://github.com/n8n-io/n8n/commit/238b54c77bba6f7abcc7fc2b3ac48a85206ce37e)) +* **core:** Forward authorization header when on same domain ([#8507](https://github.com/n8n-io/n8n/issues/8507)) ([f1910a1](https://github.com/n8n-io/n8n/commit/f1910a10a6ac875b422d9efe9bfd3ca728ac8d96)) +* **core:** Handle possibly invalid `updatedAt` timestamps in source-control ([#8485](https://github.com/n8n-io/n8n/issues/8485)) ([033fd34](https://github.com/n8n-io/n8n/commit/033fd344b5a09a7b9c0b941279da1744e182cc57)) +* **core:** Handle zero execution statistics on metrics collection during license renewal ([#8463](https://github.com/n8n-io/n8n/issues/8463)) ([db48bdd](https://github.com/n8n-io/n8n/commit/db48bdd6d1110bfccc371ca490281c021227991f)) +* **core:** Improve handling of wrapped errors ([#8510](https://github.com/n8n-io/n8n/issues/8510)) ([670af16](https://github.com/n8n-io/n8n/commit/670af167e6f2c0e4e45bcc7e0998a371d651f89d)) +* **core:** Point users to the official documentation when they use `n8n --help` ([#8440](https://github.com/n8n-io/n8n/issues/8440)) ([9f11eba](https://github.com/n8n-io/n8n/commit/9f11eba0a4f726cc150b05c0f4b528bf25513e6f)) +* **core:** Prevent calling internal hook email event if emailing is disabled ([#8462](https://github.com/n8n-io/n8n/issues/8462)) ([9e93980](https://github.com/n8n-io/n8n/commit/9e939809575592622f6bdca112da1905ac9205ef)) +* **editor:** Disable expression editor modal opening on readonly field ([#8457](https://github.com/n8n-io/n8n/issues/8457)) ([eb27ed0](https://github.com/n8n-io/n8n/commit/eb27ed068ba21bbf4302686f0f0c0168e91c03f6)) +* **editor:** Fix workflows filter resetting ([#8411](https://github.com/n8n-io/n8n/issues/8411)) ([ad4b298](https://github.com/n8n-io/n8n/commit/ad4b298be34915718b0415322e328a1b46ef5842)) +* **editor:** Send template id as a number in telemetry events ([#8484](https://github.com/n8n-io/n8n/issues/8484)) ([327cc8d](https://github.com/n8n-io/n8n/commit/327cc8df7343b806bee87faaa86ed22d9d70127f)) +* **editor:** Show pin button on binary output but disable it with tooltip ([#8388](https://github.com/n8n-io/n8n/issues/8388)) ([caab97e](https://github.com/n8n-io/n8n/commit/caab97e667df5d305aa1d2e15c0d31eb5f1a84eb)) +* **Gotify Node:** Add option to set content type to support Markdown messages ([#8442](https://github.com/n8n-io/n8n/issues/8442)) ([c2ffd4e](https://github.com/n8n-io/n8n/commit/c2ffd4e6455b383e4ddc2eb310cefbcdf867d622)) +* **HTML Node:** Escape data path value in JSON Property ([#8441](https://github.com/n8n-io/n8n/issues/8441)) ([fc5c562](https://github.com/n8n-io/n8n/commit/fc5c5627850bf618be4ca0d9cdb20adb0f8610e9)) +* **Merge Node:** Passing on no items to "Input 2" results in wrong output items ([#8438](https://github.com/n8n-io/n8n/issues/8438)) ([dafacb9](https://github.com/n8n-io/n8n/commit/dafacb90c6b01e2f88c3de359ebb2d8d55e0aecc)) +* **Microsoft Excel 365 Node:** Better error and description on unsupported range in upsert, update, getRange operations ([#8452](https://github.com/n8n-io/n8n/issues/8452)) ([8a595d1](https://github.com/n8n-io/n8n/commit/8a595d1527bf8cd97ce8293c6a52929eb3335750)) +* Open executions with large number of execution items without crashing tab ([#8423](https://github.com/n8n-io/n8n/issues/8423)) ([56da2e4](https://github.com/n8n-io/n8n/commit/56da2e43528f157c421e97018366b8f2d854d11d)) +* Properly iterate over credentials with expressions ([#8502](https://github.com/n8n-io/n8n/issues/8502)) ([0e9a5a2](https://github.com/n8n-io/n8n/commit/0e9a5a2ab2cde251cf106b149bdd4c3142e52b40)) +* Use correct node version when pasting/importing nodes ([#8456](https://github.com/n8n-io/n8n/issues/8456)) ([70af67e](https://github.com/n8n-io/n8n/commit/70af67e744c709b85b600811b792def83518fa7c)) + + +### Features + +* Add model parameter to OpenAI embeddings ([#8481](https://github.com/n8n-io/n8n/issues/8481)) ([981ea39](https://github.com/n8n-io/n8n/commit/981ea3930e96c3b45267fa7ddac48710846e49ac)) +* Add new 'is empty' and 'is not empty' operators to Filter ([#8445](https://github.com/n8n-io/n8n/issues/8445)) ([c21c4b9](https://github.com/n8n-io/n8n/commit/c21c4b9178b3ae328ff7a068663eeb64fed3e465)) +* **core:** Upgrade Rudderstack SDK to address CVE-2023-45857 ([#8368](https://github.com/n8n-io/n8n/issues/8368)) ([2fba0e8](https://github.com/n8n-io/n8n/commit/2fba0e8d585aead43eaeb73fa49dc9b613900675)) +* **editor:** Implement loading and error states for dynamically loaded components in node parameter list ([#8477](https://github.com/n8n-io/n8n/issues/8477)) ([e643a12](https://github.com/n8n-io/n8n/commit/e643a126f40dbad0634e5abb1e3ba355bad0275d)) +* **editor:** Send template id as string in all telemetry events ([#8498](https://github.com/n8n-io/n8n/issues/8498)) ([2aed788](https://github.com/n8n-io/n8n/commit/2aed788dc354595b070e91fe76298f6702bbbe15)) +* **Google Calendar Node:** Next occurrence property in recurring events ([#8444](https://github.com/n8n-io/n8n/issues/8444)) ([bf11c7c](https://github.com/n8n-io/n8n/commit/bf11c7c1bd5826ba64acc665da4e3319f9a47174)) + +### ⚠️ BREAKING CHANGES +* **core:** Remove `own` execution-process mode ([#8490](https://github.com/n8n-io/n8n/issues/8490)) ([121a55b](https://github.com/n8n-io/n8n/commit/121a55b691469e7eb042737573c0ace276366ecb)) + + + +# [1.26.0](https://github.com/n8n-io/n8n/compare/n8n@1.25.0...n8n@1.26.0) (2024-01-24) + + +### Bug Fixes + +* **AMQP Trigger Node:** Properly close connection after manual test step ([#8396](https://github.com/n8n-io/n8n/issues/8396)) ([2c14371](https://github.com/n8n-io/n8n/commit/2c143714817e62fcb2fec9b9cac208ef029f87fd)) +* **Asana Node:** Fix issue when connecting to the new Asana environment ([#8404](https://github.com/n8n-io/n8n/issues/8404)) ([44f6ef2](https://github.com/n8n-io/n8n/commit/44f6ef2ed729ad39518cc85e068be03cd8b409ff)) +* **AWS SQS Node:** Fix issue preventing data from being sent correctly ([#8382](https://github.com/n8n-io/n8n/issues/8382)) ([daba5bb](https://github.com/n8n-io/n8n/commit/daba5bb250c3bee338dde96e6e815835dd21e6f1)) +* Change the UI text for some filter operations ([#8360](https://github.com/n8n-io/n8n/issues/8360)) ([976fe2e](https://github.com/n8n-io/n8n/commit/976fe2e6c8caf3f72c833af4447c46ddfa1d8e0a)) +* **core:** Adjust starter node priority for manual executions with pinned activators ([#8386](https://github.com/n8n-io/n8n/issues/8386)) ([749ac2b](https://github.com/n8n-io/n8n/commit/749ac2b407d9477343c169ac26daba1a36cfcc6d)) +* **core:** Errors are returned on the success branch if error item has other keys in addition to 'error' ([#8380](https://github.com/n8n-io/n8n/issues/8380)) ([25f51f4](https://github.com/n8n-io/n8n/commit/25f51f4fd79d14ccff8d35d92c11e47fe18f3e0d)) +* **core:** Fix removal of triggers and pollers from memory on deactivation in multi-main setup ([#8416](https://github.com/n8n-io/n8n/issues/8416)) ([2257ec6](https://github.com/n8n-io/n8n/commit/2257ec63b3716598f85a5237bc147bb2c887fa33)) +* **core:** Fix update workflow cli command being unable to activate all workflows ([#8412](https://github.com/n8n-io/n8n/issues/8412)) ([ae06fde](https://github.com/n8n-io/n8n/commit/ae06fdeb62d0cb982253f32956fdd55bd66058bd)) +* **core:** Missing pairedItem fixes ([#8394](https://github.com/n8n-io/n8n/issues/8394)) ([284d965](https://github.com/n8n-io/n8n/commit/284d965b5acc0819ffc109729ce1d5d0b2352abb)) +* **Discord Node:** Remove requirement on message for webhooks ([#8377](https://github.com/n8n-io/n8n/issues/8377)) ([c64e893](https://github.com/n8n-io/n8n/commit/c64e893b60143df6e9a752191adef0419811fe43)) +* **editor:** Add pinned data for freshly added nodes ([#8323](https://github.com/n8n-io/n8n/issues/8323)) ([83228e2](https://github.com/n8n-io/n8n/commit/83228e26fb8f62676e15d59f65a43106487034da)) +* **editor:** Enable ctrl/cmd click in workflow editor header ([#8387](https://github.com/n8n-io/n8n/issues/8387)) ([e43cf2f](https://github.com/n8n-io/n8n/commit/e43cf2fd715e21fd4e454c9e6b6d874306472360)) +* **editor:** Fix copy to clipboard on insecure contexts ([#8425](https://github.com/n8n-io/n8n/issues/8425)) ([7386f79](https://github.com/n8n-io/n8n/commit/7386f79362673876509c27a2f6ddef08125a0b1e)) +* **editor:** Fix doclines for `plus` and `minus` ([#8405](https://github.com/n8n-io/n8n/issues/8405)) ([ebf2b0d](https://github.com/n8n-io/n8n/commit/ebf2b0d55ccf3977269d4ea442f2ad210d1b375b)) +* **editor:** Fix invisible community package update button ([#8406](https://github.com/n8n-io/n8n/issues/8406)) ([2ccb754](https://github.com/n8n-io/n8n/commit/2ccb754e52949e0d20925871f425eef92cd6aebc)) +* **editor:** Fix secondary icon for environments on sidebar menu item ([#8407](https://github.com/n8n-io/n8n/issues/8407)) ([3544966](https://github.com/n8n-io/n8n/commit/35449667bfab7324350fe92e1f6538e3ae3cadb1)) +* **editor:** Open native context menu when editing Sticky ([#8370](https://github.com/n8n-io/n8n/issues/8370)) ([ade7d30](https://github.com/n8n-io/n8n/commit/ade7d30053f897bd9269912565d86d33046e560e)) +* **editor:** Use web native element in nav menus ([#8385](https://github.com/n8n-io/n8n/issues/8385)) ([e606e84](https://github.com/n8n-io/n8n/commit/e606e841ee1086d737849dc33f4ced867ab2cb21)) +* Fix issue preventing secrets with a - in the path from being imported ([#8378](https://github.com/n8n-io/n8n/issues/8378)) ([fc94377](https://github.com/n8n-io/n8n/commit/fc9437703687738091fdd072e03597358bd8f8d0)) +* Force posthog recording to be disabled outside cloud ([#8374](https://github.com/n8n-io/n8n/issues/8374)) ([f31cc07](https://github.com/n8n-io/n8n/commit/f31cc0743ff94c9b29cdd0d498c87340beb29585)) +* **Google Drive Node:** Fix issue preventing upload / update working in some configurations ([#8417](https://github.com/n8n-io/n8n/issues/8417)) ([4b3ea81](https://github.com/n8n-io/n8n/commit/4b3ea81028ae6dcbe3a4738dca7522b62685bb42)) +* **Microsoft Outlook Node:** Message -> Send with attachments ([#8238](https://github.com/n8n-io/n8n/issues/8238)) ([0128081](https://github.com/n8n-io/n8n/commit/01280815c950413188905f5d17a13157685d0a27)) +* **Microsoft SQL Node:** Prevent MSSQL max parameters error by chunking ([#8390](https://github.com/n8n-io/n8n/issues/8390)) ([1b0ba2c](https://github.com/n8n-io/n8n/commit/1b0ba2c02885a0dd9f548133efadcfc7485d666d)) +* **Notion Node:** Fix is_empty query on formula fields ([#8397](https://github.com/n8n-io/n8n/issues/8397)) ([08e7db4](https://github.com/n8n-io/n8n/commit/08e7db4648cd2f820e0d63d012f42057a124dd82)) +* **Switch Node:** Fix issue preventing some regex patterns from working ([#8422](https://github.com/n8n-io/n8n/issues/8422)) ([e9fea16](https://github.com/n8n-io/n8n/commit/e9fea16301cb9ee0ff7e3af45fc50d77e2cf6a23)) + + +### Features + +* **core:** Custom session timeout and refresh configuration ([#8342](https://github.com/n8n-io/n8n/issues/8342)) ([07e6705](https://github.com/n8n-io/n8n/commit/07e67052568dcb292dbf63bee8912110931726bc)) +* **core:** Email recipients on resource shared ([#8408](https://github.com/n8n-io/n8n/issues/8408)) ([a0a1830](https://github.com/n8n-io/n8n/commit/a0a1830696eaa905d37fbd56e8bc5035d12b2aa5)) +* **core:** Upgrade axios and follow-redirects to address CVE-2023-26159 ([#8366](https://github.com/n8n-io/n8n/issues/8366)) ([3912c5e](https://github.com/n8n-io/n8n/commit/3912c5e7abca98fe81d4c9c25894d30d8023ce56)) +* **core:** Upgrade bull and ioredis to address CVE-2023-52079 ([#8365](https://github.com/n8n-io/n8n/issues/8365)) ([639d347](https://github.com/n8n-io/n8n/commit/639d34769e75096d0725f1f60861dc972b344abe)) +* **editor:** Migrate `moveNodeWorkflow` mixin to `useCanvasPanning` composable ([#8322](https://github.com/n8n-io/n8n/issues/8322)) ([b6d7757](https://github.com/n8n-io/n8n/commit/b6d775768f927e69e7aa5f715c99f2fed4eaaa4c)) +* **Execute Workflow Node:** Add 'Wait For Sub-Workflow Completion' option ([#8389](https://github.com/n8n-io/n8n/issues/8389)) ([ff92fc7](https://github.com/n8n-io/n8n/commit/ff92fc7fef39076e0846f2426ffdd86c761e7896)) +* **LinkedIn Node:** Add support for Community Management API ([#7451](https://github.com/n8n-io/n8n/issues/7451)) ([7660d7e](https://github.com/n8n-io/n8n/commit/7660d7e735d248f3e731aca550c2973e85cdfebc)) +* **Microsoft Teams Node:** Overhaul ([#7477](https://github.com/n8n-io/n8n/issues/7477)) ([2c146cc](https://github.com/n8n-io/n8n/commit/2c146cca62ec605f6d722fe6c4b90c7df9cf77f7)) +* Nudge users to become template creators if eligible ([#8357](https://github.com/n8n-io/n8n/issues/8357)) ([9945701](https://github.com/n8n-io/n8n/commit/99457019f795636f56d80d3fc2c7e08055ace938)) +* **Telegram Trigger Node:** Verify Webhook requests ([#8383](https://github.com/n8n-io/n8n/issues/8383)) ([1117612](https://github.com/n8n-io/n8n/commit/11176124b5b6157c7c17fd882691d2f9d6b41487)) + + + +# [1.25.0](https://github.com/n8n-io/n8n/compare/n8n@1.24.0...n8n@1.25.0) (2024-01-17) + + +### Bug Fixes + +* Add fallback resolver for langchain modules ([#8308](https://github.com/n8n-io/n8n/issues/8308)) ([851060d](https://github.com/n8n-io/n8n/commit/851060dd3f38245da6e09c04ec0b12b24b63dca4)) +* **API:** Fix manual chat trigger execution ([#8300](https://github.com/n8n-io/n8n/issues/8300)) ([884396e](https://github.com/n8n-io/n8n/commit/884396ea0d9f4a8d7987daf2b674f080056dd1d1)) +* **AwsS3 Node:** Return confirmation of success after upload ([#8312](https://github.com/n8n-io/n8n/issues/8312)) ([c921665](https://github.com/n8n-io/n8n/commit/c921665f9abe19d9e8831062c1e7673d4d1ea694)) +* **core:** Account for immediate confirmation request during test webhook creation ([#8329](https://github.com/n8n-io/n8n/issues/8329)) ([5fbd797](https://github.com/n8n-io/n8n/commit/5fbd7971e04640be3f877b3aa22d4aee61c1d40a)) +* **core:** Ensure waiting executions account for workflow timezone ([#8340](https://github.com/n8n-io/n8n/issues/8340)) ([3734c89](https://github.com/n8n-io/n8n/commit/3734c89cf64514489831b5339d722c89b300cc54)) +* **core:** Parse any readable stream response instead of only IncomingMessage ([#8359](https://github.com/n8n-io/n8n/issues/8359)) ([eb1320f](https://github.com/n8n-io/n8n/commit/eb1320fd7a4a67cd16de10c4174c7bcf2c177b06)) +* **core:** Prevent invalid compressed responses from making executions stuck forever ([#8315](https://github.com/n8n-io/n8n/issues/8315)) ([0776814](https://github.com/n8n-io/n8n/commit/0776814ed8c520326a6447dcd7b6c53fda933054)) +* **core:** Prevent issues with missing or mismatching encryption key ([#8332](https://github.com/n8n-io/n8n/issues/8332)) ([d4c93b1](https://github.com/n8n-io/n8n/commit/d4c93b16071081002b4bd316be0921bc7867dd82)) +* **core:** Prevent NodeErrors from being wrapped multiple times ([#8301](https://github.com/n8n-io/n8n/issues/8301)) ([b267bf0](https://github.com/n8n-io/n8n/commit/b267bf07e365d8bb82a9847fb3c490437dc1010e)) +* **core:** Replace all `moment` imports with `moment-timezone` ([#8337](https://github.com/n8n-io/n8n/issues/8337)) ([52a2e25](https://github.com/n8n-io/n8n/commit/52a2e25a25e9a009a536d8a371d9404e75d756f4)) +* **core:** Report when waitTill is invalid and handle it ([#8356](https://github.com/n8n-io/n8n/issues/8356)) ([d5455d7](https://github.com/n8n-io/n8n/commit/d5455d7accb193078b05a0f52386cf9303b6a00f)) +* **editor:** Add read only mode to filter component ([#8285](https://github.com/n8n-io/n8n/issues/8285)) ([dcc76f3](https://github.com/n8n-io/n8n/commit/dcc76f348075b6e05e3f38bb9694d25ac9a5646b)) +* **editor:** Capture indexed access expressions when building completions ([#8331](https://github.com/n8n-io/n8n/issues/8331)) ([159b328](https://github.com/n8n-io/n8n/commit/159b328587f3c57c73ae77c2a0c5d5c6ecc330aa)) +* **editor:** Fix issue with synchronization table on LDAP not loading data ([#8327](https://github.com/n8n-io/n8n/issues/8327)) ([6b92d49](https://github.com/n8n-io/n8n/commit/6b92d49ea58b8e5797e4e938444b161a63137638)) +* **editor:** Properly set colors for connections and labels on nodes with pinned data ([#8209](https://github.com/n8n-io/n8n/issues/8209)) ([3b8ccb9](https://github.com/n8n-io/n8n/commit/3b8ccb9fb903036a7d6e4b33f6b5a8933576e9e6)) +* Fix node graph telemetry with default values ([#8297](https://github.com/n8n-io/n8n/issues/8297)) ([93b969a](https://github.com/n8n-io/n8n/commit/93b969a327e0770d9a0e81a95a5185b0fc12ebc6)) +* **Google Drive Node:** Fix issue preventing service account from downloading files ([#7642](https://github.com/n8n-io/n8n/issues/7642)) ([cf7131d](https://github.com/n8n-io/n8n/commit/cf7131d766dfc7aec2c973525653ffec1ced03c1)) +* **HTTP Request Node:** Delete `response.request` only when it's a valid circular references ([#8293](https://github.com/n8n-io/n8n/issues/8293)) ([05c43fa](https://github.com/n8n-io/n8n/commit/05c43faa2d7582a8ce58b9bb3338c00253ad3281)) +* **Microsoft SQL Node:** Fix "Maximum call stack size exceeded" error on too many rows ([#8334](https://github.com/n8n-io/n8n/issues/8334)) ([bb2be8d](https://github.com/n8n-io/n8n/commit/bb2be8d70580896321641a49a3044165763eb9e1)) +* **Ollama Model Node:** Use a simpler credentials test ([#8318](https://github.com/n8n-io/n8n/issues/8318)) ([63b738a](https://github.com/n8n-io/n8n/commit/63b738a542429934b3838bfc814ea2a4c51675c7)) +* **OpenAI Node:** Load correct models for operation ([#8313](https://github.com/n8n-io/n8n/issues/8313)) ([a6a5372](https://github.com/n8n-io/n8n/commit/a6a5372b5f8e48e98788c4e3750ac4b63e91a96f)) +* Properly output saml validation errors ([#8284](https://github.com/n8n-io/n8n/issues/8284)) ([8c7f399](https://github.com/n8n-io/n8n/commit/8c7f39907fa82fa37af4436511d4a2daaff13015)) +* **Salesforce Node:** Upgrade to API version 59 ([#8346](https://github.com/n8n-io/n8n/issues/8346)) ([b51cbb3](https://github.com/n8n-io/n8n/commit/b51cbb325e03fd42be6dca99819d4cc7c4c1574b)) +* **Supabase Node:** Pagination for get all rows ([#8311](https://github.com/n8n-io/n8n/issues/8311)) ([e080476](https://github.com/n8n-io/n8n/commit/e0804768e84aefe9d66ab683080f67bb15a1cb58)) +* **Venafi TLS Protect Cloud Node:** Remove parameter `Application Server Type` ([#8325](https://github.com/n8n-io/n8n/issues/8325)) ([e3cedf7](https://github.com/n8n-io/n8n/commit/e3cedf7db038a70c9d48bb7c665b1be4beb872a9)) +* **Venafi TLS Protect Cloud Trigger Node:** Handle new webhook payload format ([#8326](https://github.com/n8n-io/n8n/issues/8326)) ([057d7d0](https://github.com/n8n-io/n8n/commit/057d7d031828ea8b6e779ca535ccd50d91bfa0cc)) + + +### Features + +* **core:** Implement inter-main communication for test webhooks in multi-main setup ([#8267](https://github.com/n8n-io/n8n/issues/8267)) ([1a0e285](https://github.com/n8n-io/n8n/commit/1a0e28555385f682aa335115c4d72e671c0bdc85)) +* **editor:** Add new `/templates/search` endpoint ([#8227](https://github.com/n8n-io/n8n/issues/8227)) ([4277e92](https://github.com/n8n-io/n8n/commit/4277e92ec07671a679b0d9ab6e691ef9208585bd)) +* Implement Chat Memory Manager node ([#8127](https://github.com/n8n-io/n8n/issues/8127)) ([464be93](https://github.com/n8n-io/n8n/commit/464be9332354620b2f1890136abf95dfdb71fd2e)) + + + +# [1.24.0](https://github.com/n8n-io/n8n/compare/n8n@1.23.0...n8n@1.24.0) (2024-01-10) + + +### Bug Fixes + +* **core:** Do not add Authentication header when `authentication` type is `body` ([#8201](https://github.com/n8n-io/n8n/issues/8201)) ([ac1c642](https://github.com/n8n-io/n8n/commit/ac1c642fddfac3b0ed1144c7eccd7c88fbd5a1a5)) +* **core:** Fix test webhook deregistration ([#8247](https://github.com/n8n-io/n8n/issues/8247)) ([5032bf0](https://github.com/n8n-io/n8n/commit/5032bf0e346dccf7cade17a1518b3031118af5e1)) +* **editor:** Items count display in running workflow ([#8148](https://github.com/n8n-io/n8n/issues/8148)) ([8a3c87f](https://github.com/n8n-io/n8n/commit/8a3c87f69c20de7c713dff021e390ea4ea32b103)), closes [/github.com/n8n-io/n8n/pull/7763/files#diff-f5dae80a64b9951bb6691f1b9d439423cf84fa0cc9601b3f2c00904f3135e8deR48](https://github.com//github.com/n8n-io/n8n/pull/7763/files/issues/diff-f5dae80a64b9951bb6691f1b9d439423cf84fa0cc9601b3f2c00904f3135e8deR48) +* **editor:** Only load suggested templates for owners ([#8228](https://github.com/n8n-io/n8n/issues/8228)) ([8f22a26](https://github.com/n8n-io/n8n/commit/8f22a265d607047eff22ba957d627bbec7da7900)) +* **editor:** Tweaking button sizes in execution preview ([#8206](https://github.com/n8n-io/n8n/issues/8206)) ([9d40ae8](https://github.com/n8n-io/n8n/commit/9d40ae8b74594d4368591a62f9b39dde28efc64d)) +* **editor:** Unify canvas button positioning ([#8258](https://github.com/n8n-io/n8n/issues/8258)) ([b6c42cc](https://github.com/n8n-io/n8n/commit/b6c42cc08408d9d7cc49cc84245b4ad515fa3e6a)) +* **editor:** Vertically center workflow preview loading state ([#8231](https://github.com/n8n-io/n8n/issues/8231)) ([2d6e406](https://github.com/n8n-io/n8n/commit/2d6e406e215188dbbbeb593ac09ccad3914aaf81)) +* Fix issue with API key being required for the Qdrant Node ([#8237](https://github.com/n8n-io/n8n/issues/8237)) ([4401db3](https://github.com/n8n-io/n8n/commit/4401db3a2fad3464a5498e9a86fc6bba4f9c9f95)) +* Fix template credential setup for nodes that dont have credentials ([#8208](https://github.com/n8n-io/n8n/issues/8208)) ([cd3f5b5](https://github.com/n8n-io/n8n/commit/cd3f5b5b1f48e42cb6fa5ebcc15527c28502ceb9)) +* Fix user reinvites on FE and BE ([#8261](https://github.com/n8n-io/n8n/issues/8261)) ([0dabe5c](https://github.com/n8n-io/n8n/commit/0dabe5c74e5ad0969d4691b3db4a1e796ed8a08c)) +* **FTP Node:** FTP connection failed due to missing password credential in node ([#8131](https://github.com/n8n-io/n8n/issues/8131)) ([e056aa9](https://github.com/n8n-io/n8n/commit/e056aa9c4dd6c6a7717202029b25f4f65ddecb0d)) +* **Github Trigger Node:** Enforce SSL validation by default ([#8265](https://github.com/n8n-io/n8n/issues/8265)) ([1387541](https://github.com/n8n-io/n8n/commit/1387541e336e7311ba9c43907fa95d3196fae2eb)) +* Make params panel double width for all SQL nodes ([#8236](https://github.com/n8n-io/n8n/issues/8236)) ([048b588](https://github.com/n8n-io/n8n/commit/048b588852f5fed1c976889ba54ef564ca7f4894)) +* **Monday.com Node:** Migrate to api 2023-10 ([#8254](https://github.com/n8n-io/n8n/issues/8254)) ([ccde38a](https://github.com/n8n-io/n8n/commit/ccde38a8a8d65a21bf4d38ef7b09a5ffa3c7ad2d)) +* **MySQL Node:** Only escape table names when needed ([#8246](https://github.com/n8n-io/n8n/issues/8246)) ([3b01eb6](https://github.com/n8n-io/n8n/commit/3b01eb60c98d51d0d7572342b8d6d40763293719)) +* **Nextcloud Node:** Throw an actual error if server responded with Fatal error ([#8234](https://github.com/n8n-io/n8n/issues/8234)) ([b201ff8](https://github.com/n8n-io/n8n/commit/b201ff8f23b2bac6b00d5c16d91b4b2931f45ade)) +* **NocoDB Node:** Download attachments ([#8235](https://github.com/n8n-io/n8n/issues/8235)) ([43e8e5e](https://github.com/n8n-io/n8n/commit/43e8e5e540b9fcbca663fcf17a78a7aba2abb475)) +* **Postgres Node:** Stop marking autogenerated columns as required ([#8230](https://github.com/n8n-io/n8n/issues/8230)) ([bed04ec](https://github.com/n8n-io/n8n/commit/bed04ec122234b4329a5e415bf3627c115b3f32e)), closes [#7084](https://github.com/n8n-io/n8n/issues/7084) +* Resolve expressions in credentials following paired item ([#8250](https://github.com/n8n-io/n8n/issues/8250)) ([ccb2b07](https://github.com/n8n-io/n8n/commit/ccb2b076f8240b0712949b72ec57ae72a36ef62d)) +* **Set Node:** Field not excluded if dot notation disabled and field was set by using drag-and-drop from ui ([#8233](https://github.com/n8n-io/n8n/issues/8233)) ([cda49a4](https://github.com/n8n-io/n8n/commit/cda49a4747ef4369ce7a971872c6fb8a74f4156d)) +* Store workflow settings when saving an execution ([#8288](https://github.com/n8n-io/n8n/issues/8288)) ([8a7c629](https://github.com/n8n-io/n8n/commit/8a7c629ea183f75f9916003edf11cb8aeef445eb)) +* **Webhook Node:** Fix handling of form-data files ([#8256](https://github.com/n8n-io/n8n/issues/8256)) ([fc29030](https://github.com/n8n-io/n8n/commit/fc2903096e6e64e5b2a14593418d5651e07ca9ee)) + + +### Features + +* Add Chat Trigger node ([#7409](https://github.com/n8n-io/n8n/issues/7409)) ([af49e95](https://github.com/n8n-io/n8n/commit/af49e95cc7ccf70f233f9bd1e34fbb57f7f08ccf)) +* **core:** Cache test webhook registrations ([#8176](https://github.com/n8n-io/n8n/issues/8176)) ([22a5f52](https://github.com/n8n-io/n8n/commit/22a5f5258da0a973e1ad44c0d3d4f0fda1d23444)), closes [#8155](https://github.com/n8n-io/n8n/issues/8155) +* **core:** Validate shutdown handlers on startup ([#8260](https://github.com/n8n-io/n8n/issues/8260)) ([3b996a7](https://github.com/n8n-io/n8n/commit/3b996a7da0137a75c3047656a4bc8cc336ebfc1e)) +* **editor:** Add fullscreen view to code editor ([#8084](https://github.com/n8n-io/n8n/issues/8084)) ([071e6d6](https://github.com/n8n-io/n8n/commit/071e6d6b6e32b7196f34043710c23331ad28fac0)) +* **editor:** Update copy: `Execute` --> `Test` ([#8137](https://github.com/n8n-io/n8n/issues/8137)) ([df5d07b](https://github.com/n8n-io/n8n/commit/df5d07bcb8beba760bc17118b36ccd531bc3c755)) +* **Google Sheets Node:** Add "By Name" option to selector for Sheets ([#8241](https://github.com/n8n-io/n8n/issues/8241)) ([dce28f9](https://github.com/n8n-io/n8n/commit/dce28f9cb98db33bf22bcfee181f8e9ca64dd2bc)) +* **HTTP Request Node:** Interval Between Requests option for pagination ([#8224](https://github.com/n8n-io/n8n/issues/8224)) ([270328c](https://github.com/n8n-io/n8n/commit/270328ccf6e5502adc092f6f85d146ffb98e1208)) +* Implement MistralCloud Chat & Embeddings nodes ([#8239](https://github.com/n8n-io/n8n/issues/8239)) ([d37b908](https://github.com/n8n-io/n8n/commit/d37b9084b2c657d8b5b8bae6dbb51b428db26e1e)) +* **MongoDB Node:** Add support for TLS ([#8266](https://github.com/n8n-io/n8n/issues/8266)) ([e796e7f](https://github.com/n8n-io/n8n/commit/e796e7f06d73a74a403000c53942d56cab91781b)) +* **Switch Node:** Overhaul ([#7855](https://github.com/n8n-io/n8n/issues/7855)) ([f4092a9](https://github.com/n8n-io/n8n/commit/f4092a9e49f66845612420ba59a013796ed80d45)) + + +### Performance Improvements + +* **core:** Improve caching service ([#8213](https://github.com/n8n-io/n8n/issues/8213)) ([f53c482](https://github.com/n8n-io/n8n/commit/f53c482939db938c47523ac11a9538e35e1926a9)), closes [#7747](https://github.com/n8n-io/n8n/issues/7747) +* **core:** Optimize workflow activation errors ([#8242](https://github.com/n8n-io/n8n/issues/8242)) ([f293956](https://github.com/n8n-io/n8n/commit/f2939568cf399e67214e89bc7f859323aaeda8dd)) + + + +# [1.23.0](https://github.com/n8n-io/n8n/compare/n8n@1.22.0...n8n@1.23.0) (2024-01-03) + + +### Bug Fixes + +* **Asana Node:** Omit body from GET, HEAD, and DELETE requests ([#8057](https://github.com/n8n-io/n8n/issues/8057)) ([15ffd4f](https://github.com/n8n-io/n8n/commit/15ffd4fb9f967302e2444a873a804d2ccb64e748)) +* **core:** Better input validation for the changeRole endpoint ([#8189](https://github.com/n8n-io/n8n/issues/8189)) ([cfe9525](https://github.com/n8n-io/n8n/commit/cfe9525dd4e2dbf2496bd86ad854bb744b5dc8fe)) +* **core:** Fix issue that pinnedData is not used with Test-Webhooks ([#8123](https://github.com/n8n-io/n8n/issues/8123)) ([fa8bd8b](https://github.com/n8n-io/n8n/commit/fa8bd8b9eb202989229028cb6975cd2b50e5eef9)) +* **core:** Handle empty executions table in pruning in migrations ([#8121](https://github.com/n8n-io/n8n/issues/8121)) ([ffaa30d](https://github.com/n8n-io/n8n/commit/ffaa30ddc4ee312f44726c17a7ec91b5551092ad)) +* **core:** Remove circular dependency in WorkflowService and ActiveWorkflowRunner ([#8128](https://github.com/n8n-io/n8n/issues/8128)) ([21788d9](https://github.com/n8n-io/n8n/commit/21788d9153fb730965dabbce64c50c3b929ee728)), closes [#8122](https://github.com/n8n-io/n8n/issues/8122) +* **core:** Use pinned data only for manual mode ([#8164](https://github.com/n8n-io/n8n/issues/8164)) ([ea7e76f](https://github.com/n8n-io/n8n/commit/ea7e76fa3b3dc1f37b0415e14ea5ff90b8017b9a)) +* **Discord Node:** Remove unnecessary requirement on parameters ([#8060](https://github.com/n8n-io/n8n/issues/8060)) ([ef3a577](https://github.com/n8n-io/n8n/commit/ef3a57719eb42777502cafdd38009e6cb5b484ce)) +* **editor:** Avoid sanitizing output to search node data ([#8126](https://github.com/n8n-io/n8n/issues/8126)) ([c83d9f4](https://github.com/n8n-io/n8n/commit/c83d9f45bab986eb930e9da69eec970d3a72263d)) +* **editor:** Enable explicit undo keyboard shortcut across all code editors ([#8178](https://github.com/n8n-io/n8n/issues/8178)) ([cf7f668](https://github.com/n8n-io/n8n/commit/cf7f6688bac5dd31dc3a45df4ecce579939141e2)), closes [#5297](https://github.com/n8n-io/n8n/issues/5297) +* **editor:** Fix operation change failing in certain conditions ([#8114](https://github.com/n8n-io/n8n/issues/8114)) ([711fa2b](https://github.com/n8n-io/n8n/commit/711fa2b9251154b50d8e5e7cd9a857ccb2c0bec6)), closes [/github.com/n8n-io/n8n/blob/7806a65229878a473f5526bad0b94614e8bfa8aa/packages/workflow/src/NodeHelpers.ts#L786](https://github.com//github.com/n8n-io/n8n/blob/7806a65229878a473f5526bad0b94614e8bfa8aa/packages/workflow/src/NodeHelpers.ts/issues/L786) +* **editor:** Fix templates view layout ([#8196](https://github.com/n8n-io/n8n/issues/8196)) ([d01e42a](https://github.com/n8n-io/n8n/commit/d01e42a2aabedfd4c0f79799bbfc9b1a235d4233)) +* **editor:** Fix UI urls when hosted behind a path prefix ([#8198](https://github.com/n8n-io/n8n/issues/8198)) ([5c078f1](https://github.com/n8n-io/n8n/commit/5c078f1b3d78c7038bfdbb083fd029ef61bf2dfc)), closes [#8061](https://github.com/n8n-io/n8n/issues/8061) +* **editor:** Prevent browser zoom when scrolling inside sticky edit mode ([#8116](https://github.com/n8n-io/n8n/issues/8116)) ([e928210](https://github.com/n8n-io/n8n/commit/e928210ccdc00ad8a38e3f96ba5145c35e7b007b)) +* **editor:** Prevent canvas undo/redo when NDV is open ([#8118](https://github.com/n8n-io/n8n/issues/8118)) ([39e45d8](https://github.com/n8n-io/n8n/commit/39e45d8b929d474f1e7587329b003fe15b61636d)) +* **editor:** Prevent storing pairedItem data inside of pinData ([#8173](https://github.com/n8n-io/n8n/issues/8173)) ([405e267](https://github.com/n8n-io/n8n/commit/405e26757e2591b42a4bfeedd1fea997fbbb08c9)) +* **GitHub Node:** Fix issue that File->Get did not run once per item ([#8190](https://github.com/n8n-io/n8n/issues/8190)) ([11cda41](https://github.com/n8n-io/n8n/commit/11cda41214100a1a3e65309434ab8be3ccef1898)) +* **Invoice Ninja Node:** Fix issue with custom invoice numbers not working with v5 ([#8200](https://github.com/n8n-io/n8n/issues/8200)) ([3b6ae2d](https://github.com/n8n-io/n8n/commit/3b6ae2d0a510a57b27fc1a44cb3e710e2a783800)) +* **Microsoft Excel 365 Node:** Ensure arg is string during worksheet table search ([#8154](https://github.com/n8n-io/n8n/issues/8154)) ([8e873ca](https://github.com/n8n-io/n8n/commit/8e873ca2f3c73ddd7bbef2218d8da82032f66cec)) +* **Notion Node:** Ensure arg is string during page ID extraction ([#8153](https://github.com/n8n-io/n8n/issues/8153)) ([e94b8a6](https://github.com/n8n-io/n8n/commit/e94b8a6c30aaa2e59117d5a0cc03e1590d7ea8ca)) +* **Redis Trigger Node:** Activating a workflow with a Redis trigger fails ([#8129](https://github.com/n8n-io/n8n/issues/8129)) ([a169b74](https://github.com/n8n-io/n8n/commit/a169b7406279de43dbd3fd7d13166d987c60d01a)) +* **Schedule Trigger Node:** Use the correct `moment` import ([#8185](https://github.com/n8n-io/n8n/issues/8185)) ([17a4e2e](https://github.com/n8n-io/n8n/commit/17a4e2ea80c664e248c136b7e66eef710ccba7f2)), closes [#8184](https://github.com/n8n-io/n8n/issues/8184) +* Show public API upgrade CTA when feature is not enabled ([#8109](https://github.com/n8n-io/n8n/issues/8109)) ([e9c7fd7](https://github.com/n8n-io/n8n/commit/e9c7fd73975ced504d5a16a0dbbc313f15ccd8ab)) + + +### Features + +* **core:** Add closeFunction support to Sub-Nodes ([#7708](https://github.com/n8n-io/n8n/issues/7708)) ([bec0fae](https://github.com/n8n-io/n8n/commit/bec0faed9e51fe6ea20ab3b07b4dfa849b28516b)) +* **core:** Add user.profile.beforeUpdate hook ([#8144](https://github.com/n8n-io/n8n/issues/8144)) ([e126ed7](https://github.com/n8n-io/n8n/commit/e126ed74f3d9ed3dae72252cb8c9e8a6f7620808)) +* **core:** Improvements/overhaul for nodes working with binary data ([#7651](https://github.com/n8n-io/n8n/issues/7651)) ([5e16dd4](https://github.com/n8n-io/n8n/commit/5e16dd4ab4457acf21d3d7a3566d07944ff7f857)) +* **core:** Remove discontinued crypto-js ([#8104](https://github.com/n8n-io/n8n/issues/8104)) ([01e9a79](https://github.com/n8n-io/n8n/commit/01e9a79238bbd2c14ae77a12e54fc1c6f41e1246)) +* **core:** Unify application components shutdown ([#8097](https://github.com/n8n-io/n8n/issues/8097)) ([3a881be](https://github.com/n8n-io/n8n/commit/3a881be6c25b3e16d8c53227dc851cb420f5f1bf)) +* **editor:** Add node execution status indicator to output panel ([#8124](https://github.com/n8n-io/n8n/issues/8124)) ([ab74bad](https://github.com/n8n-io/n8n/commit/ab74bade05cb30e7fa65a491789a3df3ab7bf8b8)) +* **editor:** Add template Id to workflow metadata ([#8088](https://github.com/n8n-io/n8n/issues/8088)) ([517b050](https://github.com/n8n-io/n8n/commit/517b050d0ae1a64987ac00d5795c5e59ed176f3f)) +* **Home Assistant Node:** Use the new Home Assistant logo ([#8150](https://github.com/n8n-io/n8n/issues/8150)) ([518a99e](https://github.com/n8n-io/n8n/commit/518a99e5287dc648edafd34a4dd27c9205eb8629)) +* **Qdrant Vector Store Node:** Qdrant vector store support ([#8080](https://github.com/n8n-io/n8n/issues/8080)) ([66460f6](https://github.com/n8n-io/n8n/commit/66460f66b0b02ae6f342e52500b29fe8b724e1dc)) +* **Wordpress Node:** Add option to ignore error when using self signed certificates ([#8199](https://github.com/n8n-io/n8n/issues/8199)) ([65c8e12](https://github.com/n8n-io/n8n/commit/65c8e12b96ac8c1c53d3879d91982ca834f3cda1)) + + + +# [1.22.0](https://github.com/n8n-io/n8n/compare/n8n@1.21.0...n8n@1.22.0) (2023-12-21) + + +### Bug Fixes + +* **ActiveCampaign Node:** Fix pagination issue when loading tags ([#8017](https://github.com/n8n-io/n8n/issues/8017)) ([1943857](https://github.com/n8n-io/n8n/commit/19438572312cf9354c333aeb52ccbf1ab81fc51f)) +* **core:** Close db connection gracefully when exiting ([#8045](https://github.com/n8n-io/n8n/issues/8045)) ([e69707e](https://github.com/n8n-io/n8n/commit/e69707efd4bd947fdf6b9c66f373da63d34f41e9)) +* **core:** Consider timeout in shutdown an error ([#8050](https://github.com/n8n-io/n8n/issues/8050)) ([4cae976](https://github.com/n8n-io/n8n/commit/4cae976a3b428bd528fe71ef0b240c0fd6e23bbf)) +* **core:** Do not display error when stopping jobless execution in queue mode ([#8007](https://github.com/n8n-io/n8n/issues/8007)) ([8e6b951](https://github.com/n8n-io/n8n/commit/8e6b951a76e08b9ee9740fdd853f77553ad60cd6)) +* **core:** Fix shutdown if terminating before hooks are initialized ([#8047](https://github.com/n8n-io/n8n/issues/8047)) ([6ae2f5e](https://github.com/n8n-io/n8n/commit/6ae2f5efea65e23029475ccdc5a65ec7c8152423)) +* **core:** Handle multiple termination signals correctly ([#8046](https://github.com/n8n-io/n8n/issues/8046)) ([67bd8ad](https://github.com/n8n-io/n8n/commit/67bd8ad698bd0afe6ff7183d75da8bca4085598e)) +* **core:** Initialize queue once in queue mode ([#8025](https://github.com/n8n-io/n8n/issues/8025)) ([53c0b49](https://github.com/n8n-io/n8n/commit/53c0b49d15047461e3b65baed65c9d76dff99539)) +* **core:** Prevent axios from force setting a form-urlencoded content-type ([#8117](https://github.com/n8n-io/n8n/issues/8117)) ([bba9576](https://github.com/n8n-io/n8n/commit/bba95761e2f2b54af1fcab8a7b1d626ca10d537e)), closes [/github.com/axios/axios/blob/v1.x/lib/core/dispatchRequest.js#L45-L47](https://github.com//github.com/axios/axios/blob/v1.x/lib/core/dispatchRequest.js/issues/L45-L47) +* **core:** Remove circular references before serializing executions in public API ([#8043](https://github.com/n8n-io/n8n/issues/8043)) ([989888d](https://github.com/n8n-io/n8n/commit/989888d9bcec6f4eb3c811ce10d480737d96b102)), closes [#8030](https://github.com/n8n-io/n8n/issues/8030) +* **core:** Restore workflow ID during execution creation ([#8031](https://github.com/n8n-io/n8n/issues/8031)) ([c5e6ba8](https://github.com/n8n-io/n8n/commit/c5e6ba8cdd4a8f117ccc2e89e55497117156d8af)), closes [/github.com/n8n-io/n8n/pull/8002/files#diff-c8cbb62ca9ab2ae45e5f565cd8c63fff6475809a6241ea0b90acc575615224](https://github.com//github.com/n8n-io/n8n/pull/8002/files/issues/diff-c8cbb62ca9ab2ae45e5f565cd8c63fff6475809a6241ea0b90acc575615224) +* **core:** Use relative imports for dynamic imports in SecurityAuditService ([#8086](https://github.com/n8n-io/n8n/issues/8086)) ([785bf99](https://github.com/n8n-io/n8n/commit/785bf9974e38ea84c016e210a3108f4af567510d)), closes [#8085](https://github.com/n8n-io/n8n/issues/8085) +* **editor:** Add back credential `use` permission ([#8023](https://github.com/n8n-io/n8n/issues/8023)) ([329e5bf](https://github.com/n8n-io/n8n/commit/329e5bf9eed8556aba2bbd50bad9dbd6d3b373ad)) +* **editor:** Cleanup Executions page component ([#8053](https://github.com/n8n-io/n8n/issues/8053)) ([2689c37](https://github.com/n8n-io/n8n/commit/2689c37e87c5b3ae5029121f4d3dc878841e8844)) +* **editor:** Disable auto scroll and list size check when clicking on executions ([#7983](https://github.com/n8n-io/n8n/issues/7983)) ([fcb8b91](https://github.com/n8n-io/n8n/commit/fcb8b91f37e1fb0ef42f411c84390180e1ed7bbe)) +* **editor:** Ensure execution data overrides pinned data when copying in executions view ([#8009](https://github.com/n8n-io/n8n/issues/8009)) ([1d1cb0d](https://github.com/n8n-io/n8n/commit/1d1cb0d3c530856e0c26d8f146f60b2555625ab6)) +* **editor:** Fix copy/paste issue when switch node is in workflow ([#8103](https://github.com/n8n-io/n8n/issues/8103)) ([4b86926](https://github.com/n8n-io/n8n/commit/4b86926752fb1304a46385cb46bdf34fda0d53b6)) +* **editor:** Make keyboard shortcuts more strict; don't accept extra Ctrl/Alt/Shift keys ([#8024](https://github.com/n8n-io/n8n/issues/8024)) ([8df49e1](https://github.com/n8n-io/n8n/commit/8df49e134d886267f9f7475573d013371220dcac)) +* **editor:** Show credential share info only to appropriate users ([#8020](https://github.com/n8n-io/n8n/issues/8020)) ([b29b4d4](https://github.com/n8n-io/n8n/commit/b29b4d442bb0617aa516748ec48379eae0996cf0)) +* **editor:** Turn off executions list auto-refresh after leaving the page ([#8005](https://github.com/n8n-io/n8n/issues/8005)) ([e3c363d](https://github.com/n8n-io/n8n/commit/e3c363d72cf4ee49086d012f92a7b34be958482f)) +* **editor:** Update image sizes in template description not to be full width always ([#8037](https://github.com/n8n-io/n8n/issues/8037)) ([63a6e7e](https://github.com/n8n-io/n8n/commit/63a6e7e0340e1b00719f212ac620600a90d70ef1)) +* **HTTP Request Node:** Do not create circular references in HTTP request node output ([#8030](https://github.com/n8n-io/n8n/issues/8030)) ([5b7ea16](https://github.com/n8n-io/n8n/commit/5b7ea16d9a20880c72779b02620e99ebe9f3617a)) +* Stop binary data restoration from preventing execution from finishing ([#8082](https://github.com/n8n-io/n8n/issues/8082)) ([5ffff1b](https://github.com/n8n-io/n8n/commit/5ffff1bb22691c09c5ca8b3ada2a19d5ce155a0b)) +* Upgrade axios to address CVE-2023-45857 ([#7713](https://github.com/n8n-io/n8n/issues/7713)) ([64eb9bb](https://github.com/n8n-io/n8n/commit/64eb9bbc3624ee8f2fa90812711ad568926fdca8)) + + +### Features + +* Add config option to prefer GET request over LIST when using Hashicorp Vault ([#8049](https://github.com/n8n-io/n8n/issues/8049)) ([439a22d](https://github.com/n8n-io/n8n/commit/439a22d68f7bf32f281b1078b71607307640a09b)) +* Add option to `returnIntermediateSteps` for AI agents ([#8113](https://github.com/n8n-io/n8n/issues/8113)) ([7806a65](https://github.com/n8n-io/n8n/commit/7806a65229878a473f5526bad0b94614e8bfa8aa)) +* **core:** Add N8N_GRACEFUL_SHUTDOWN_TIMEOUT env var ([#8068](https://github.com/n8n-io/n8n/issues/8068)) ([614f488](https://github.com/n8n-io/n8n/commit/614f48838626e2af8e3f2e76ee4a144af2d40f72)) +* **editor:** Add lead enrichment suggestions to workflow list ([#8042](https://github.com/n8n-io/n8n/issues/8042)) ([36a923c](https://github.com/n8n-io/n8n/commit/36a923cf7bd4d42b8f8decbf01255c41d6dc1671)), closes [-update-workflows-list-page-to-show-fake-door-templates#comment-b6644c99](https://github.com/-update-workflows-list-page-to-show-fake-door-templates/issues/comment-b6644c99) +* **editor:** Finalize workers view ([#8052](https://github.com/n8n-io/n8n/issues/8052)) ([edfa784](https://github.com/n8n-io/n8n/commit/edfa78414d6bce901becc05e9d860f2521139688)) +* **editor:** Gracefully ignore invalid payloads in postMessage handler ([#8096](https://github.com/n8n-io/n8n/issues/8096)) ([9d22c7a](https://github.com/n8n-io/n8n/commit/9d22c7a2782a1908f81bcf80260cd91cb296e239)) +* **editor:** Upgrade frontend tooling to address a few vulnerabilities ([#8100](https://github.com/n8n-io/n8n/issues/8100)) ([19b7f1f](https://github.com/n8n-io/n8n/commit/19b7f1ffb17dcd6ac77839f97c2544f60f4ad55e)) +* **Filter Node:** Overhaul UI by adding the new filter component ([#8016](https://github.com/n8n-io/n8n/issues/8016)) ([3d53052](https://github.com/n8n-io/n8n/commit/3d530522f828dfc985ae98e4bb551aa3a2bd44c6)) +* **Respond to Webhook Node:** Overhaul with improvements like returning all items ([#8093](https://github.com/n8n-io/n8n/issues/8093)) ([32d397e](https://github.com/n8n-io/n8n/commit/32d397eff315fdc77677c0b134a7a25bcd8ca5d0)) + + +### Performance Improvements + +* **editor:** Improve canvas rendering performance ([#8022](https://github.com/n8n-io/n8n/issues/8022)) ([b780436](https://github.com/n8n-io/n8n/commit/b780436a6b445dc5951217b5a1f2c61b34961757)) + + + +# [1.21.0](https://github.com/n8n-io/n8n/compare/n8n@1.20.0...n8n@1.21.0) (2023-12-13) + + +### Bug Fixes + +* **core:** Ensure inviter and invitee are set correctly in invite link ([#7943](https://github.com/n8n-io/n8n/issues/7943)) ([386bd61](https://github.com/n8n-io/n8n/commit/386bd619676e54e960ca0af3ff47fa3b9c16c813)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **core:** Fix user comparison in same-user subworkflow caller policy ([#7913](https://github.com/n8n-io/n8n/issues/7913)) ([92bab72](https://github.com/n8n-io/n8n/commit/92bab72cffb1083b495d211d0a31920e83e66769)) +* **core:** Perform multi-main leader check against key ID ([#7964](https://github.com/n8n-io/n8n/issues/7964)) ([1a87f70](https://github.com/n8n-io/n8n/commit/1a87f70e8404218308072ee2f35c6ba2af34c23f)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **core:** Prevent workflow history saving error from happening ([#7812](https://github.com/n8n-io/n8n/issues/7812)) ([e5581ce](https://github.com/n8n-io/n8n/commit/e5581ce8023e21d3dcf140099f3a53e5ffb4584f)) +* **editor:** Add missing string for worker in log streaming ([#7971](https://github.com/n8n-io/n8n/issues/7971)) ([148bc1d](https://github.com/n8n-io/n8n/commit/148bc1d303af3aafd73e73e11c3dd9cefd40a1dd)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **editor:** Allow SSH protocol in git repository URL for environments ([#7944](https://github.com/n8n-io/n8n/issues/7944)) ([bc1c72f](https://github.com/n8n-io/n8n/commit/bc1c72f992a47a9c263aec175ca820088cf340ec)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **editor:** Fix bug with node names with certain characters ([#8013](https://github.com/n8n-io/n8n/issues/8013)) ([26f0d57](https://github.com/n8n-io/n8n/commit/26f0d57f5fb71a06c92968a4997cceae62f32312)) +* **editor:** Fix Webhook URL expansion icon ([#8011](https://github.com/n8n-io/n8n/issues/8011)) ([b00b905](https://github.com/n8n-io/n8n/commit/b00b9057a42f23cd9c4bb6675a3e6134610bf81b)) +* **editor:** Prevent opening NDV search if `/` is typed in a contenteditable element ([#7968](https://github.com/n8n-io/n8n/issues/7968)) ([e8a493f](https://github.com/n8n-io/n8n/commit/e8a493f71863e6a5d2685b48a61a0d11daf5edc5)) +* **editor:** Return early in ws message handler if no 'command' keyword is found ([#7946](https://github.com/n8n-io/n8n/issues/7946)) ([5b2defc](https://github.com/n8n-io/n8n/commit/5b2defc867a0627a861bf0fb98abfd99f8efe934)) +* Ensure external hooks post workflow execute run in queue mode ([#7947](https://github.com/n8n-io/n8n/issues/7947)) ([3ba7deb](https://github.com/n8n-io/n8n/commit/3ba7deb337963d40ae70f40ffb2f4eb23cac89b7)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **FileMaker Node:** Prevent erroring on zero fields loaded ([#7955](https://github.com/n8n-io/n8n/issues/7955)) ([10ad386](https://github.com/n8n-io/n8n/commit/10ad3866048ad06d0e8455ed2c52c618ae9e5032)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* Fix issue preventing secrets from loading if the path contains - or / ([#7988](https://github.com/n8n-io/n8n/issues/7988)) ([0ac9594](https://github.com/n8n-io/n8n/commit/0ac959463f25187c5be4116a2209411afd903d87)) +* **Google Sheets Node:** Prevent erroring on zero sheet search results ([#7957](https://github.com/n8n-io/n8n/issues/7957)) ([9b877a9](https://github.com/n8n-io/n8n/commit/9b877a942787c855c3a3a011c19c5d1d30b8da67)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **Google Sheets Node:** Prevent erroring when fetching mapping columns ([#7972](https://github.com/n8n-io/n8n/issues/7972)) ([29a1066](https://github.com/n8n-io/n8n/commit/29a10668d17cdeb8b0e93c912f59c5976b6fc6c6)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **Postgres Node:** Do not include id column in upsert fields selection if it's not unique ([#7975](https://github.com/n8n-io/n8n/issues/7975)) ([435392c](https://github.com/n8n-io/n8n/commit/435392cbfe150c5e85d092686b3b7e20273421cc)) +* **Postgres Trigger Node:** Increase manual trigger timeout from 30 to 60 seconds ([#8015](https://github.com/n8n-io/n8n/issues/8015)) ([09a5729](https://github.com/n8n-io/n8n/commit/09a5729305a8072f5e98a320c85ad1c83a6946ed)) +* Restrict updating/deleting of shared but not owned credentials ([#7950](https://github.com/n8n-io/n8n/issues/7950)) ([42e828d](https://github.com/n8n-io/n8n/commit/42e828d5c655e54b6a4ec83c398c684996b9cc3e)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **Webhook Node:** Binary data handling ([#7804](https://github.com/n8n-io/n8n/issues/7804)) ([565b409](https://github.com/n8n-io/n8n/commit/565b409a82ca6173efd19f26a5f5b27a359a3b87)) +* **Webhook Node:** Do not create binary data when there is no data in the request ([#8000](https://github.com/n8n-io/n8n/issues/8000)) ([70f0755](https://github.com/n8n-io/n8n/commit/70f0755278e0a2bdb61c29623f27623b65473ab4)), closes [/github.com/n8n-io/n8n/pull/7804/files#r1422641833](https://github.com//github.com/n8n-io/n8n/pull/7804/files/issues/r1422641833) + + +### Features + +* Add config option for external secret update interval ([#7995](https://github.com/n8n-io/n8n/issues/7995)) ([b6c1c04](https://github.com/n8n-io/n8n/commit/b6c1c04b541d0944c5baac1ab021539c8f020f10)) +* AI nodes usability fixes + Summarization Chain V2 ([#7949](https://github.com/n8n-io/n8n/issues/7949)) ([dcf1286](https://github.com/n8n-io/n8n/commit/dcf12867b3c49596cd214812caee3292d2e794de)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* Data transformation nodes and actions in Nodes Panel ([#7760](https://github.com/n8n-io/n8n/issues/7760)) ([675ec21](https://github.com/n8n-io/n8n/commit/675ec21d335af2b2c9598bc2bec18194506ef71a)) +* **editor:** Add AppCues tracking for onboarding event ([#7945](https://github.com/n8n-io/n8n/issues/7945)) ([04cabaf](https://github.com/n8n-io/n8n/commit/04cabafef7acbc30cba647732e2ca8ae8a02d29a)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **editor:** Add option to disable NDV in workflow previews ([#7990](https://github.com/n8n-io/n8n/issues/7990)) ([393afef](https://github.com/n8n-io/n8n/commit/393afef1747f168d5fa42be2424fd02125f1bbac)), closes [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **editor:** Filter component + implement in If node ([#7490](https://github.com/n8n-io/n8n/issues/7490)) ([8a53434](https://github.com/n8n-io/n8n/commit/8a5343401dd355436120a9a424ae455e80b50da6)) +* **editor:** Show template credential setup based on feature flag ([#7989](https://github.com/n8n-io/n8n/issues/7989)) ([08ee307](https://github.com/n8n-io/n8n/commit/08ee3072093fb26b14b48e2b35d8c8d018317f13)) +* **Google Ads Node:** Update to support v15 ([#7962](https://github.com/n8n-io/n8n/issues/7962)) ([7f01269](https://github.com/n8n-io/n8n/commit/7f0126915aae514a0ab515a4baf5582da2aeb1e3)) +* Introduce advanced permissions ([#7844](https://github.com/n8n-io/n8n/issues/7844)) ([dbd62a4](https://github.com/n8n-io/n8n/commit/dbd62a4992ab8aca59e3cb50d3d970454e462238)) +* **Local File Trigger Node:** Add polling option typically good to watch network files/folders ([#7942](https://github.com/n8n-io/n8n/issues/7942)) ([2fbdfec](https://github.com/n8n-io/n8n/commit/2fbdfec0c0a3f5da64764e7821e84db30b664e49)) +* **n8n Form Trigger Node:** Improvements ([#7571](https://github.com/n8n-io/n8n/issues/7571)) ([953a58f](https://github.com/n8n-io/n8n/commit/953a58f18bfdd36fa8b526ca6213631aacab49cb)) + + + +# [1.20.0](https://github.com/n8n-io/n8n/compare/n8n@1.19.0...n8n@1.20.0) (2023-12-06) + + +### Bug Fixes + +* **AWS DynamoDB Node:** Improve error message parsing ([#7793](https://github.com/n8n-io/n8n/issues/7793)) ([5ba5ed8](https://github.com/n8n-io/n8n/commit/5ba5ed8e3c8ba2f909859bde129d92576fbda46f)) +* **core:** Allow grace period for binary data deletion after manual execution ([#7889](https://github.com/n8n-io/n8n/issues/7889)) ([61d8aeb](https://github.com/n8n-io/n8n/commit/61d8aebeaf6487269b252b353fdf16dcb67f41ff)) +* **core:** Consolidate ownership and sharing data on workflows and credentials ([#7920](https://github.com/n8n-io/n8n/issues/7920)) ([38b88b9](https://github.com/n8n-io/n8n/commit/38b88b946bab67dc1a964bb3c980a627d4a32595)) +* **core:** Fix hard deletes stopping if database query throws ([#7848](https://github.com/n8n-io/n8n/issues/7848)) ([46dd4d3](https://github.com/n8n-io/n8n/commit/46dd4d3105db3a15c81903ae81c9bbb21a45397b)) +* **core:** Make sure mfa secret and recovery codes are not returned on login ([#7936](https://github.com/n8n-io/n8n/issues/7936)) ([f5502cc](https://github.com/n8n-io/n8n/commit/f5502cc628f6b348f7fe3325b96ec9dc3360beaf)), closes [/github.com/n8n-io/n8n/pull/6994/files#diff-95a87cb029a3d26e6722df2e68132453fc254fc1f4540cbdaa95cfdbda1893deL91](https://github.com//github.com/n8n-io/n8n/pull/6994/files/issues/diff-95a87cb029a3d26e6722df2e68132453fc254fc1f4540cbdaa95cfdbda1893deL91) [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **editor:** Fix deletion of last execution at execution preview ([#7883](https://github.com/n8n-io/n8n/issues/7883)) ([ce2d388](https://github.com/n8n-io/n8n/commit/ce2d388f059c0bb32d27f4b29e901d1a70083610)) +* **editor:** Replace isInstanceOwner checks with scopes where applicable ([#7858](https://github.com/n8n-io/n8n/issues/7858)) ([132d691](https://github.com/n8n-io/n8n/commit/132d691cbf983f60293c7423de0077fb7c97e0af)) +* **Google Sheets Node:** Fix issue with paired items not being set correctly ([#7862](https://github.com/n8n-io/n8n/issues/7862)) ([5207a2f](https://github.com/n8n-io/n8n/commit/5207a2fe5210e40d3b2aedd95182a18e497c72ab)) +* **Notion Node:** Fix broken Notion node parameters ([#7864](https://github.com/n8n-io/n8n/issues/7864)) ([51d1f5b](https://github.com/n8n-io/n8n/commit/51d1f5b82070542d45c3d57387343959a3f0abb2)), closes [#7791](https://github.com/n8n-io/n8n/issues/7791) + + +### Features + +* **BambooHR Node:** Add support for Only Current on company reports ([#7878](https://github.com/n8n-io/n8n/issues/7878)) ([4175801](https://github.com/n8n-io/n8n/commit/4175801c90ad4f744d1a7c331d4fb20891ed2e9e)) +* **core:** Allow admin creation ([#7837](https://github.com/n8n-io/n8n/issues/7837)) ([476806e](https://github.com/n8n-io/n8n/commit/476806ebb0f31f656992fb67aba37116f10e1475)) +* **editor:** Add sections to create node panel ([#7831](https://github.com/n8n-io/n8n/issues/7831)) ([39fa8d2](https://github.com/n8n-io/n8n/commit/39fa8d21bbee5d870b2620ec65401a5ca134c4f1)) +* **editor:** Open template credential setup from collection ([#7882](https://github.com/n8n-io/n8n/issues/7882)) ([627ddb9](https://github.com/n8n-io/n8n/commit/627ddb91fb6c00796671a1f72f59a251cd89004d)) +* **editor:** Select credentials in template setup if theres only one ([#7879](https://github.com/n8n-io/n8n/issues/7879)) ([fe3417a](https://github.com/n8n-io/n8n/commit/fe3417a615534a01cb0c7b5e8f47bc18abd5cd4d)) + + +### Performance Improvements + +* **editor:** Improve node rendering performance when opening large workflows ([#7904](https://github.com/n8n-io/n8n/issues/7904)) ([a8049a0](https://github.com/n8n-io/n8n/commit/a8049a0def21506ebf4fb1d3b69ae28ec35fdc21)), closes [#7901](https://github.com/n8n-io/n8n/issues/7901) [4#a39f9e5ba64a48b58a71d81c837e8227](https://github.com/4/issues/a39f9e5ba64a48b58a71d81c837e8227) [4#f6a177d32bde4b57ae2da0b8e454](https://github.com/4/issues/f6a177d32bde4b57ae2da0b8e454) [4#fef2d36ab02247e1a0f65a74f6fb534](https://github.com/4/issues/fef2d36ab02247e1a0f65a74f6fb534) +* **editor:** Improve performance when opening large workflows with node issues ([#7901](https://github.com/n8n-io/n8n/issues/7901)) ([4bd7ae2](https://github.com/n8n-io/n8n/commit/4bd7ae29f7c82b8817420e617a123024147c6c70)) + + + +# [1.19.0](https://github.com/n8n-io/n8n/compare/n8n@1.18.0...n8n@1.19.0) (2023-11-29) + + +### Bug Fixes + +* **core:** Ensure member and admin cannot be promoted to owner ([#7830](https://github.com/n8n-io/n8n/issues/7830)) ([9b87a59](https://github.com/n8n-io/n8n/commit/9b87a596ca4aec462faedcca1ba4655b168bc3bc)), closes [/linear.app/n8n/issue/PAY-985/add-user-role-modification-endpoint#comment-62355f6](https://github.com//linear.app/n8n/issue/PAY-985/add-user-role-modification-endpoint/issues/comment-62355f6) +* **core:** Prevent error messages due to statistics about data loading ([#7824](https://github.com/n8n-io/n8n/issues/7824)) ([847f6ac](https://github.com/n8n-io/n8n/commit/847f6ac771316eea270d2e83adac5d8a6483475a)) +* **core:** Tighten checks for multi-main setup usage ([#7788](https://github.com/n8n-io/n8n/issues/7788)) ([fdb2c18](https://github.com/n8n-io/n8n/commit/fdb2c18ecc49d1e8759e809d2e2c2e4aa17009da)) +* **core:** Use AbortController to notify nodes to abort execution ([#6141](https://github.com/n8n-io/n8n/issues/6141)) ([d2c18c5](https://github.com/n8n-io/n8n/commit/d2c18c57274cac02e70cf1cc9e533a6ca98f0ec6)) +* **editor:** Add telemetry to workflow history ([#7811](https://github.com/n8n-io/n8n/issues/7811)) ([d497041](https://github.com/n8n-io/n8n/commit/d4970410e1ba328b05ddc23abcbf33c719de5624)) +* **editor:** Allow owners and admins to share workflows and credentials they don't own ([#7833](https://github.com/n8n-io/n8n/issues/7833)) ([3ab3ec9](https://github.com/n8n-io/n8n/commit/3ab3ec9da88f7b7ae07a98d7ef7c4f9892079048)) +* **editor:** Disable context menu actions in read-only mode ([#7789](https://github.com/n8n-io/n8n/issues/7789)) ([902beff](https://github.com/n8n-io/n8n/commit/902beffce51d547094ea249d1fbbb70a879165d6)) +* **editor:** Fix cloud plan data loading on instance ([#7841](https://github.com/n8n-io/n8n/issues/7841)) ([8b99384](https://github.com/n8n-io/n8n/commit/8b99384367161a47b3de13b7e83bcf6d07e3bf19)) +* **editor:** Fix credential icon for old node type version ([#7843](https://github.com/n8n-io/n8n/issues/7843)) ([4074107](https://github.com/n8n-io/n8n/commit/40741075117dd8018ca1c6d03c050c3959142ebd)) +* **editor:** Fix icon for unknown node type ([#7842](https://github.com/n8n-io/n8n/issues/7842)) ([28ac5a7](https://github.com/n8n-io/n8n/commit/28ac5a750eb28e9ab41611a76fa5fb9c30ce64dc)) +* **editor:** Fix mouse position in workflow previews ([#7853](https://github.com/n8n-io/n8n/issues/7853)) ([c063398](https://github.com/n8n-io/n8n/commit/c0633987bfd6de24db0efc4bcb73adba9e9b6a74)) +* **editor:** Show nice error when environment is not set up ([#7778](https://github.com/n8n-io/n8n/issues/7778)) ([5835e05](https://github.com/n8n-io/n8n/commit/5835e055d39921cdf2aa9799e427931bec8e5e2c)) +* **editor:** Suppress dev server websocket messages in workflow view ([#7808](https://github.com/n8n-io/n8n/issues/7808)) ([685ffd7](https://github.com/n8n-io/n8n/commit/685ffd74137199f5e10145a33f3e0f03dabc2e7f)) +* **Google Sheets Node:** Read operation execute for each item ([#7800](https://github.com/n8n-io/n8n/issues/7800)) ([d548872](https://github.com/n8n-io/n8n/commit/d5488725a83f6705b95c9de9d8736adf1b870134)) +* **HTTP Request Node:** Enable expressions for binary input data fields ([#7782](https://github.com/n8n-io/n8n/issues/7782)) ([6208af0](https://github.com/n8n-io/n8n/commit/6208af07eb393b0fb8483b8ae4949a63423cc409)) +* **Microsoft SQL Node:** Prevent double escaping table name ([#7801](https://github.com/n8n-io/n8n/issues/7801)) ([73ec753](https://github.com/n8n-io/n8n/commit/73ec7533ce4724940c2b23f677a9dfcf75de6a16)) + + +### Features + +* Add AI tool building capabilities ([#7336](https://github.com/n8n-io/n8n/issues/7336)) ([87def60](https://github.com/n8n-io/n8n/commit/87def60979bd6525b59df4bd811571a2afe83bec)) +* Add initial scope checks via decorators ([#7737](https://github.com/n8n-io/n8n/issues/7737)) ([a37f1cb](https://github.com/n8n-io/n8n/commit/a37f1cb0bad87c486c387383f8179aa42f0b9e1a)) +* Add user role select to users list settings page ([#7796](https://github.com/n8n-io/n8n/issues/7796)) ([137e238](https://github.com/n8n-io/n8n/commit/137e23853fdbd3e62037a6cb7f742811af41a03d)) +* Ado 1296 spike credential setup in templates ([#7786](https://github.com/n8n-io/n8n/issues/7786)) ([aae45b0](https://github.com/n8n-io/n8n/commit/aae45b043b9e1427f9ffc44ef88d719782fccee5)) +* **core:** Add Support for custom CORS origins for webhooks ([#7455](https://github.com/n8n-io/n8n/issues/7455)) ([99a9ea4](https://github.com/n8n-io/n8n/commit/99a9ea497a3d21739f911da5c88c076f60471bed)) +* **core:** Allow user role modification ([#7797](https://github.com/n8n-io/n8n/issues/7797)) ([7a86d36](https://github.com/n8n-io/n8n/commit/7a86d3606852fcbc537533af24eef34279b229c6)) +* **core:** Set up endpoint for all existing roles with license flag ([#7834](https://github.com/n8n-io/n8n/issues/7834)) ([2356fb0](https://github.com/n8n-io/n8n/commit/2356fb0f0c247271ffa00d1cf25460e06212f1c4)) +* **editor:** Add node name and version to NDV node settings ([#7731](https://github.com/n8n-io/n8n/issues/7731)) ([da85198](https://github.com/n8n-io/n8n/commit/da851986f6f7cd4375b06c28a149dcb375fe8b83)) +* **editor:** Add routing middleware, permission checks, RBAC store, RBAC component ([#7702](https://github.com/n8n-io/n8n/issues/7702)) ([67a8891](https://github.com/n8n-io/n8n/commit/67a88914f2f2d11c413e7f627d659333d8419af8)) +* **editor:** Replace middleware for Role checks with Scope checks ([#7847](https://github.com/n8n-io/n8n/issues/7847)) ([72852a6](https://github.com/n8n-io/n8n/commit/72852a60eb15cbf45ebcdd390770c4cd9929a457)) +* **editor:** Show avatars for users currently working on the same workflow ([#7763](https://github.com/n8n-io/n8n/issues/7763)) ([77bc8ec](https://github.com/n8n-io/n8n/commit/77bc8ecd4b1552f7253bc1348087db518ce7ce07)) +* **Notion Node:** Option to simplify output in getChildBlocks operation ([#7791](https://github.com/n8n-io/n8n/issues/7791)) ([d667bca](https://github.com/n8n-io/n8n/commit/d667bca658a2b79fa5d0afba9ef25f26a10cdfc2)) +* **Slack Node:** Add support for getting the profile of a user ([#7829](https://github.com/n8n-io/n8n/issues/7829)) ([90bb6ba](https://github.com/n8n-io/n8n/commit/90bb6ba4174a71f0d42e8dc9f009b879ca9d4616)) + + + +# [1.18.0](https://github.com/n8n-io/n8n/compare/n8n@1.17.0...n8n@1.18.0) (2023-11-22) + + +### Bug Fixes + +* **core:** Account for non-ASCII chars in filename on binary data download ([#7742](https://github.com/n8n-io/n8n/issues/7742)) ([b4ebb1a](https://github.com/n8n-io/n8n/commit/b4ebb1a28dc87c297721299a635e836dcaa273b7)) +* **core:** Correct permissions for getstatus ([#7724](https://github.com/n8n-io/n8n/issues/7724)) ([f96c1d2](https://github.com/n8n-io/n8n/commit/f96c1d204400028c55a2120d0569180379c0649f)) +* **core:** Ensure failed executions are saved in queue mode ([#7744](https://github.com/n8n-io/n8n/issues/7744)) ([b7c5c74](https://github.com/n8n-io/n8n/commit/b7c5c7406f6f978bbd84737de34114e9492ae5f6)) +* **core:** Guard against node not found on cancelling test webhook ([#7750](https://github.com/n8n-io/n8n/issues/7750)) ([6be453b](https://github.com/n8n-io/n8n/commit/6be453b716eff14df420ef565ea1b5ffb3ce73f0)) +* **editor:** Handle permission edge cases (empty scopes) ([#7723](https://github.com/n8n-io/n8n/issues/7723)) ([e2ffd39](https://github.com/n8n-io/n8n/commit/e2ffd397fc0ab8d88128ba78d02c5df003af4a9d)) +* **editor:** Make sure LineController is registered with chart.js ([#7730](https://github.com/n8n-io/n8n/issues/7730)) ([ebee1a5](https://github.com/n8n-io/n8n/commit/ebee1a590873aa56c23fd610616196ee27fe657a)) +* **editor:** Move workerview entry into settings menu ([#7761](https://github.com/n8n-io/n8n/issues/7761)) ([366cd67](https://github.com/n8n-io/n8n/commit/366cd672a74649a19fc927e0327ae7c19ed5a1fc)) +* **editor:** Only show push to git menu item to owners ([#7766](https://github.com/n8n-io/n8n/issues/7766)) ([0d3d33d](https://github.com/n8n-io/n8n/commit/0d3d33dd1f2354248ac341a0c9f2553812f404e0)) +* **editor:** Show v1 banner dismiss button if owner ([#7722](https://github.com/n8n-io/n8n/issues/7722)) ([44d3b3e](https://github.com/n8n-io/n8n/commit/44d3b3ed7ee77715006591a4f49049388fcd4035)) +* **editor:** Use project diagram icon for worker view ([#7764](https://github.com/n8n-io/n8n/issues/7764)) ([ff0b651](https://github.com/n8n-io/n8n/commit/ff0b6511f74831c499ab032910dfa9cf38356e8c)) +* **editor:** Validate user info before submiting ([#7608](https://github.com/n8n-io/n8n/issues/7608)) ([2064f7f](https://github.com/n8n-io/n8n/commit/2064f7f251913a0cc22b4e27bb38df921f711109)) +* **GitHub Node:** Fix issue preventing file edits on branches ([#7734](https://github.com/n8n-io/n8n/issues/7734)) ([ce002a6](https://github.com/n8n-io/n8n/commit/ce002a6cc672d1e13cc3d3470add78781d1ef20e)) +* **Google Sheets Node:** Check for `null` before destructuring ([#7729](https://github.com/n8n-io/n8n/issues/7729)) ([5d4a52d](https://github.com/n8n-io/n8n/commit/5d4a52d3b7e35924e1a8c9a2c808418bdf224d2c)) +* **Item Lists Node:** Don't check same type in remove duplicates operation ([#7678](https://github.com/n8n-io/n8n/issues/7678)) ([4f30764](https://github.com/n8n-io/n8n/commit/4f307646f3a5691331c7c610c62f562921a005f8)) +* **JotForm Trigger Node:** Fix iteration on form loader ([#7751](https://github.com/n8n-io/n8n/issues/7751)) ([82f3202](https://github.com/n8n-io/n8n/commit/82f3202a2de2863f01abe3cf84d6f37eba4fb6fa)) + + +### Features + +* Add Creator hub link to Templates page ([#7721](https://github.com/n8n-io/n8n/issues/7721)) ([4dbae0e](https://github.com/n8n-io/n8n/commit/4dbae0e2e95d1b5f46cfc50a5a9fc6bb761defde)) +* **core:** Coordinate manual workflow activation and deactivation in multi-main scenario ([#7643](https://github.com/n8n-io/n8n/issues/7643)) ([4c40825](https://github.com/n8n-io/n8n/commit/4c4082503c916d654758da738321f9e78a098ce5)), closes [#7566](https://github.com/n8n-io/n8n/issues/7566) +* **editor:** Add node context menu ([#7620](https://github.com/n8n-io/n8n/issues/7620)) ([8d12c1a](https://github.com/n8n-io/n8n/commit/8d12c1ad8d9283764647836bdd50224259d506e9)) +* **editor:** Node IO filter ([#7503](https://github.com/n8n-io/n8n/issues/7503)) ([1881765](https://github.com/n8n-io/n8n/commit/18817651ec5d9ed5e774379ae5cf8f57c5461e43)) + + + +# [1.17.0](https://github.com/n8n-io/n8n/compare/n8n@1.16.0...n8n@1.17.0) (2023-11-15) + + +### Bug Fixes + +* **Convert to/from binary data Node:** Better mime type defaults ([#7693](https://github.com/n8n-io/n8n/issues/7693)) ([9b3be0c](https://github.com/n8n-io/n8n/commit/9b3be0cfd8b0b58903d89ea3bf0b73be579a4f89)) +* **core:** Consider subworkflows successfully run when in waiting state ([#7699](https://github.com/n8n-io/n8n/issues/7699)) ([0e00dab](https://github.com/n8n-io/n8n/commit/0e00dab9f5d5a6622cdc22fa8bfbecc039f6b67a)) +* **core:** Fix named parameter resolution in migrations ([#7688](https://github.com/n8n-io/n8n/issues/7688)) ([4441ed5](https://github.com/n8n-io/n8n/commit/4441ed51169e8be930c548b17f54147ff6bd8e7d)), closes [#7628](https://github.com/n8n-io/n8n/issues/7628) +* **core:** Initialize JWT Secret before it's used anywhere ([#7707](https://github.com/n8n-io/n8n/issues/7707)) ([3460eb5](https://github.com/n8n-io/n8n/commit/3460eb5eeba95e51ccdac05084daf883c9750022)) +* **core:** Reduce memory usage in credentials risk auditing ([#7663](https://github.com/n8n-io/n8n/issues/7663)) ([9fd6319](https://github.com/n8n-io/n8n/commit/9fd6319583d0446e41de4fb80d4bc5a6c5e1ca07)) +* **Date & Time Node:** Add fromFormat option to solve ambiguous date strings ([#7675](https://github.com/n8n-io/n8n/issues/7675)) ([d2d11e0](https://github.com/n8n-io/n8n/commit/d2d11e0208e8a20145910bbdd02e7b273fb0aa13)) +* **editor:** Fix resource mapper component being truncated ([#7664](https://github.com/n8n-io/n8n/issues/7664)) ([00dff50](https://github.com/n8n-io/n8n/commit/00dff50140d12e37bfeecdf1300ff313c179ec89)) +* **editor:** More securely clear executions tab auto refresh timer ([#7685](https://github.com/n8n-io/n8n/issues/7685)) ([37dd658](https://github.com/n8n-io/n8n/commit/37dd658dc5bc1128c91d86105bf7f49dfcf96985)) +* **editor:** Redirect to workflow editor after saving in debug mode ([#7645](https://github.com/n8n-io/n8n/issues/7645)) ([020042e](https://github.com/n8n-io/n8n/commit/020042ef1a329e805035061fbf6743bde892e3b1)) +* **Google Sheets Node:** Append exceeding grid limits ([#7684](https://github.com/n8n-io/n8n/issues/7684)) ([88efb99](https://github.com/n8n-io/n8n/commit/88efb9958711bac446b6a698dfba50afd2b46132)) +* **HTTP Request Node:** Support generic credentials when using pagination ([#7686](https://github.com/n8n-io/n8n/issues/7686)) ([48b240b](https://github.com/n8n-io/n8n/commit/48b240b0269858adb8fde8abb8a7211b2a3e78e0)), closes [#7653](https://github.com/n8n-io/n8n/issues/7653) +* **HubSpot Node:** Fetching available parameters fails when using expressions ([#7672](https://github.com/n8n-io/n8n/issues/7672)) ([a9ab738](https://github.com/n8n-io/n8n/commit/a9ab73896e6a42b2fd5df296c9ee95ac82936b7e)) +* **HubSpot Node:** Update deal owner on Hubspot Deal ([#7673](https://github.com/n8n-io/n8n/issues/7673)) ([3c0734b](https://github.com/n8n-io/n8n/commit/3c0734bd2d92e9d2b9e99658c2e14710f57f36ef)) +* **Spreadsheet File Node:** Read file as utf-8 in v1 ([#7701](https://github.com/n8n-io/n8n/issues/7701)) ([786b4ad](https://github.com/n8n-io/n8n/commit/786b4adcce910fa52104550d90a688c4046628f9)) + + +### Features + +* **core:** Expression function $ifEmpty ([#7660](https://github.com/n8n-io/n8n/issues/7660)) ([1c7225e](https://github.com/n8n-io/n8n/commit/1c7225ebdb1d92ce45313bbab27b0839d963fc4c)) +* **Date & Time Node:** Option to include other fields in output item ([#7661](https://github.com/n8n-io/n8n/issues/7661)) ([aea3c50](https://github.com/n8n-io/n8n/commit/aea3c501313debaf1cf2b194023a534f829290ea)) +* **Discord Node:** Overhaul ([#5351](https://github.com/n8n-io/n8n/issues/5351)) ([6a53c2a](https://github.com/n8n-io/n8n/commit/6a53c2a375ca71ffad1491da5ae7e6ec461a1a56)) +* **Discourse Node:** Add new options to Get Users ([#7674](https://github.com/n8n-io/n8n/issues/7674)) ([2e8c841](https://github.com/n8n-io/n8n/commit/2e8c841277c2ba45ab2ab3e823135f2b15a7e570)) +* **editor:** Add color selector to sticky node ([#7453](https://github.com/n8n-io/n8n/issues/7453)) ([8359364](https://github.com/n8n-io/n8n/commit/8359364536809e667be86f4b4df0838c94a801d7)) +* **editor:** Add HTTP request nodes for credentials without a node ([#7157](https://github.com/n8n-io/n8n/issues/7157)) ([14035e1](https://github.com/n8n-io/n8n/commit/14035e1244fee5bc49b9afe57d63d9e887f25dd0)) +* **editor:** Add workflow filters to querystring ([#7456](https://github.com/n8n-io/n8n/issues/7456)) ([afd637b](https://github.com/n8n-io/n8n/commit/afd637b5eab2bba33fd9ec8b24104bef5e2a4cc0)) +* **editor:** Adds a EE view to show worker details and job status ([#7600](https://github.com/n8n-io/n8n/issues/7600)) ([cbc6909](https://github.com/n8n-io/n8n/commit/cbc690907fa36e2fde0218dd6f7737d00498c674)) +* **GitLab Node:** Add support for pagination on getIssues ([#7529](https://github.com/n8n-io/n8n/issues/7529)) ([0a0798e](https://github.com/n8n-io/n8n/commit/0a0798e48500b0c159aa37deae7ce5d144f4f4c7)) +* **OpenAI Node:** Add dall-e-3 support ([#7655](https://github.com/n8n-io/n8n/issues/7655)) ([a9c7188](https://github.com/n8n-io/n8n/commit/a9c7188c4d9d3a020cb26647c9030f6ffd47a35a)) +* **RabbitMQ Trigger Node:** Add exchange and routing key options ([#7547](https://github.com/n8n-io/n8n/issues/7547)) ([5aee2b7](https://github.com/n8n-io/n8n/commit/5aee2b768f7743c6508c518bab35206577035380)) +* **Telegram Node:** Add support for markdownv2 ([#7679](https://github.com/n8n-io/n8n/issues/7679)) ([819b3a7](https://github.com/n8n-io/n8n/commit/819b3a746a1cfbb785c97d0c681734211a599852)) +* **Venafi TLS Protect Cloud Node:** Add region parameter to Venafi protect cloud ([#7689](https://github.com/n8n-io/n8n/issues/7689)) ([a08fca5](https://github.com/n8n-io/n8n/commit/a08fca51d928b7bfb7c0081287a38274048892bb)) + + +### Performance Improvements + +* **core:** Lazyload security audit reporters ([#7696](https://github.com/n8n-io/n8n/issues/7696)) ([b2ca050](https://github.com/n8n-io/n8n/commit/b2ca0500311d85742ef8abf8f9f0d1436e6d9ba1)) + + + +# [1.16.0](https://github.com/n8n-io/n8n/compare/n8n@1.15.1...n8n@1.16.0) (2023-11-08) + + +### Bug Fixes + +* **core:** Comply with custom default for workflow saving settings ([#7634](https://github.com/n8n-io/n8n/issues/7634)) ([48c068f](https://github.com/n8n-io/n8n/commit/48c068f97b6c7df08fec9fd9d80a0e7eaacc95f5)) +* **core:** Decrease reset password token expire time ([#7598](https://github.com/n8n-io/n8n/issues/7598)) ([2aa7f63](https://github.com/n8n-io/n8n/commit/2aa7f6375a01625980278aee714bdc06002b0948)) +* **core:** Ensure `init` before checking leader or follower in multi-main scenario ([#7621](https://github.com/n8n-io/n8n/issues/7621)) ([a994ba5](https://github.com/n8n-io/n8n/commit/a994ba5e8d7092edeae05e7aa5fdfbb9fd854034)) +* **core:** Ensure pruning starts only after migrations have completed ([#7626](https://github.com/n8n-io/n8n/issues/7626)) ([f748de9](https://github.com/n8n-io/n8n/commit/f748de9567ed1ecebea0ee35e9c71f8ea0e2d450)) +* **core:** Fix accessor error when running partial execution ([#7618](https://github.com/n8n-io/n8n/issues/7618)) ([26361df](https://github.com/n8n-io/n8n/commit/26361dfcd31c9952c8ef109314ca88f5f03e40f4)), closes [#6229](https://github.com/n8n-io/n8n/issues/6229) +* **core:** Make password-reset urls valid only for single-use ([#7622](https://github.com/n8n-io/n8n/issues/7622)) ([6031424](https://github.com/n8n-io/n8n/commit/60314248f4b021f451eb744184fe150ddc03bc6e)) +* **Crypto Node:** Fix issue with value not appearing for Sign action ([#7619](https://github.com/n8n-io/n8n/issues/7619)) ([5df583f](https://github.com/n8n-io/n8n/commit/5df583f783731e46500600e6a23ff3b7fdfb4e52)) +* **editor:** Allow overriding theme from query params ([#7591](https://github.com/n8n-io/n8n/issues/7591)) ([2854a0c](https://github.com/n8n-io/n8n/commit/2854a0cf467258c6dacc15c2b200cf6480b6ecef)) +* **editor:** Fix issue that frontend breaks with unkown nodes ([#7596](https://github.com/n8n-io/n8n/issues/7596)) ([db56a9e](https://github.com/n8n-io/n8n/commit/db56a9ee37e8b041ea8958fc8400b9e5b6b81316)) +* **editor:** Fix local storage flags defaulting to undefined string ([#7603](https://github.com/n8n-io/n8n/issues/7603)) ([151e60f](https://github.com/n8n-io/n8n/commit/151e60f829663e79982aae6ac1cd8489f3083224)) +* **editor:** Fix workflow history prune time limit (getting hours instead of days) ([#7644](https://github.com/n8n-io/n8n/issues/7644)) ([3d5a485](https://github.com/n8n-io/n8n/commit/3d5a485bcf7fef4c6b7d96df3a77c041178951a6)) +* **editor:** Hide not supported node options ([#7597](https://github.com/n8n-io/n8n/issues/7597)) ([b532a7b](https://github.com/n8n-io/n8n/commit/b532a7bdb7d33d5ffb20665dfde58cb664d39b4a)) +* **editor:** Remove unknown credentials on pasting workflow ([#7582](https://github.com/n8n-io/n8n/issues/7582)) ([d633753](https://github.com/n8n-io/n8n/commit/d63375368713b31e15735721c7a7603fe08a6645)) +* **editor:** Reset canvas zoom before workspace reset in node view ([#7625](https://github.com/n8n-io/n8n/issues/7625)) ([78b84af](https://github.com/n8n-io/n8n/commit/78b84af8d1cfed005c7d9c715d832e8c91fd9e3f)) +* **editor:** Zoom in/out on canvas the same amount on scroll/gesture ([#7602](https://github.com/n8n-io/n8n/issues/7602)) ([c92402a](https://github.com/n8n-io/n8n/commit/c92402a3cabfdc227f3c929bc7731d42f4516776)) +* **Facebook Lead Ads Trigger Node:** Fix issue with missing scope for business management ([#7616](https://github.com/n8n-io/n8n/issues/7616)) ([32b85ba](https://github.com/n8n-io/n8n/commit/32b85ba2fec6e74d8648be7e718b52140c1bc4fc)) + + +### Features + +* **core:** Add the node version to telemetry in node_graph_string ([#7449](https://github.com/n8n-io/n8n/issues/7449)) ([59dc36a](https://github.com/n8n-io/n8n/commit/59dc36abd9141a863cb41c17a9115410b27bdb16)) +* **core:** Coordinate workflow activation in multiple main scenario in internal API ([#7566](https://github.com/n8n-io/n8n/issues/7566)) ([c857e42](https://github.com/n8n-io/n8n/commit/c857e42677ef0d415caf66f00d7af029546dfd79)) +* **core:** Initial support for two-way communication over websockets ([#7570](https://github.com/n8n-io/n8n/issues/7570)) ([ac87701](https://github.com/n8n-io/n8n/commit/ac877014eda83eb2ee61c87f29e2583f3fbfd125)) +* **core:** Log executed migrations with info level ([#7586](https://github.com/n8n-io/n8n/issues/7586)) ([7dac9ab](https://github.com/n8n-io/n8n/commit/7dac9ab82c2f91cfbb66a57f175c1865e8c8107a)) +* **core:** Rate limit forgot password endpoint ([#7604](https://github.com/n8n-io/n8n/issues/7604)) ([5790e25](https://github.com/n8n-io/n8n/commit/5790e251b8072679d7c061e2d2fa1f4229e03cf8)) +* **LinkedIn Node:** Add support for Article thumbnails ([#7489](https://github.com/n8n-io/n8n/issues/7489)) ([e6d3d1a](https://github.com/n8n-io/n8n/commit/e6d3d1a4c2dd6a860e935df4b0ce3f13e23030c7)) +* **NocoDB Node:** Add new data apis and workspace support ([#7329](https://github.com/n8n-io/n8n/issues/7329)) ([da2d2a8](https://github.com/n8n-io/n8n/commit/da2d2a83bbfb05db3a10aef99bfde3ccaf160d60)) + + + +## [1.15.1](https://github.com/n8n-io/n8n/compare/n8n@1.14.0...n8n@1.15.1) (2023-11-02) + + +### Bug Fixes + +* **core:** Ensure execution deletion in worker lifecycle hook ([#7481](https://github.com/n8n-io/n8n/issues/7481)) ([742c8a8](https://github.com/n8n-io/n8n/commit/742c8a8534098522fe103fad09fa95f70c460b3d)) +* **core:** Fix data encryption on credentials import ([#7560](https://github.com/n8n-io/n8n/issues/7560)) ([b350568](https://github.com/n8n-io/n8n/commit/b350568505d48ec880fe98d2b62ef090d5399c5f)) +* **core:** Fix issue that prevents owner logging in when using ldap ([#7408](https://github.com/n8n-io/n8n/issues/7408)) ([479f902](https://github.com/n8n-io/n8n/commit/479f90231d0a03c69b17189384812b5a1d81ef3d)) +* **core:** Handle missing resultData in runData ([#7523](https://github.com/n8n-io/n8n/issues/7523)) ([1055bd3](https://github.com/n8n-io/n8n/commit/1055bd3762b90b013a300bd87e3fa902e902cb9e)) +* **core:** Permission check for subworkflow properly checking for workflow settings ([#7576](https://github.com/n8n-io/n8n/issues/7576)) ([437c95e](https://github.com/n8n-io/n8n/commit/437c95e84e144cc77f2866a74d6b670c415895cd)) +* **core:** Prevent executions from becoming forever running ([#7569](https://github.com/n8n-io/n8n/issues/7569)) ([9bdb85c](https://github.com/n8n-io/n8n/commit/9bdb85c4ced96fde75435e334dc757d6c7679926)) +* **core:** Upgrade crypto-js to address CVE-2023-46233 ([#7519](https://github.com/n8n-io/n8n/issues/7519)) ([65e5593](https://github.com/n8n-io/n8n/commit/65e559323371e8235b92e2134d9908d69043fac4)) +* **editor:** Do not truncate form inputs ([#7528](https://github.com/n8n-io/n8n/issues/7528)) ([ae616f1](https://github.com/n8n-io/n8n/commit/ae616f146bc2ce8d37f8cf5116c6c4c8682a91a6)) +* **editor:** Fix NDV close after using input select ([#7544](https://github.com/n8n-io/n8n/issues/7544)) ([3b5e181](https://github.com/n8n-io/n8n/commit/3b5e181e66f8d7e3860e3078dae7cbb20e92551a)) +* **editor:** Fix NDV unexpected re-render ([#7532](https://github.com/n8n-io/n8n/issues/7532)) ([2853fcf](https://github.com/n8n-io/n8n/commit/2853fcff735fd0b98c19c1192349ef2c659d2493)) +* **editor:** Fix route component caching, incorrect use of array reduce method and enable WF history feature ([#7434](https://github.com/n8n-io/n8n/issues/7434)) ([12a89e6](https://github.com/n8n-io/n8n/commit/12a89e6d1441f81380d5e477274a5e2d3eb29f2d)) +* **editor:** Fixes the issue that Switch Node can not be created ([#7516](https://github.com/n8n-io/n8n/issues/7516)) ([df89685](https://github.com/n8n-io/n8n/commit/df89685e1548219f4c06614287abafbc96697817)) +* **editor:** Handle `localStorage` being blocked/unavailable ([#7348](https://github.com/n8n-io/n8n/issues/7348)) ([c05bc67](https://github.com/n8n-io/n8n/commit/c05bc6728d3227af4931ddcda5ed8bc6a3539dd0)) +* Fix dark mode small issues ([#7573](https://github.com/n8n-io/n8n/issues/7573)) ([1d81afc](https://github.com/n8n-io/n8n/commit/1d81afcbdf17166f3ebf468673e3ba348ae7fecb)) +* **Jira Software Node:** Handle missing issue types in issue types loader ([#7534](https://github.com/n8n-io/n8n/issues/7534)) ([9762705](https://github.com/n8n-io/n8n/commit/9762705833c809fd2781de179279a15c1be988eb)) +* **Switch Node:** Allow sortable Switch rules ([#7555](https://github.com/n8n-io/n8n/issues/7555)) ([7a56e58](https://github.com/n8n-io/n8n/commit/7a56e58a608132ef795d8c5cdaccb8caa49c0e8f)) + + +### Features + +* **core:** Add optional Error-Output ([#7460](https://github.com/n8n-io/n8n/issues/7460)) ([655efea](https://github.com/n8n-io/n8n/commit/655efeaf669e9722895b66fef47f000507459210)) +* **core:** Make queue mode settings configurable ([#7526](https://github.com/n8n-io/n8n/issues/7526)) ([3d95b24](https://github.com/n8n-io/n8n/commit/3d95b243e935e4eba97a418d05fa687169ab7d07)) +* **core:** Set up leader selection for multiple main instances ([#7527](https://github.com/n8n-io/n8n/issues/7527)) ([442c73e](https://github.com/n8n-io/n8n/commit/442c73e63bb54f50657a511d88912a80cab64c7f)) +* **editor:** Implement the `UserStack` design system component ([#7559](https://github.com/n8n-io/n8n/issues/7559)) ([ce14f62](https://github.com/n8n-io/n8n/commit/ce14f6266b30caadb477b08d4257b82c769a74c3)) +* **HTTP Request Node:** Add pagination support ([#5993](https://github.com/n8n-io/n8n/issues/5993)) ([cc2bd2e](https://github.com/n8n-io/n8n/commit/cc2bd2e19c8b75320b236de215d389220fbe24ae)) +* **HTTP Request Node:** Update icon and default color ([#7572](https://github.com/n8n-io/n8n/issues/7572)) ([ff279ab](https://github.com/n8n-io/n8n/commit/ff279ab4112435c341b84081d68b976ff03bf261)) +* **n8n Form Trigger Node:** Add text area and password input types ([#7474](https://github.com/n8n-io/n8n/issues/7474)) ([b72040a](https://github.com/n8n-io/n8n/commit/b72040aa5423aa6cb16dea2e7c6ea6439376b653)) +* **editor:** Dark mode is here! You can change it under personal settings.([#6980](https://github.com/n8n-io/n8n/pull/6980)) ([0746783](https://github.com/n8n-io/n8n/commit/0746783e027ebe6715588a68db399a34e0211a96)) + + + +# [1.15.0](https://github.com/n8n-io/n8n/compare/n8n@1.14.0...n8n@1.15.0) (2023-11-02) + + +### Bug Fixes + +* **core:** Ensure execution deletion in worker lifecycle hook ([#7481](https://github.com/n8n-io/n8n/issues/7481)) ([742c8a8](https://github.com/n8n-io/n8n/commit/742c8a8534098522fe103fad09fa95f70c460b3d)) +* **core:** Fix data encryption on credentials import ([#7560](https://github.com/n8n-io/n8n/issues/7560)) ([b350568](https://github.com/n8n-io/n8n/commit/b350568505d48ec880fe98d2b62ef090d5399c5f)) +* **core:** Fix issue that prevents owner logging in when using ldap ([#7408](https://github.com/n8n-io/n8n/issues/7408)) ([479f902](https://github.com/n8n-io/n8n/commit/479f90231d0a03c69b17189384812b5a1d81ef3d)) +* **core:** Handle missing resultData in runData ([#7523](https://github.com/n8n-io/n8n/issues/7523)) ([1055bd3](https://github.com/n8n-io/n8n/commit/1055bd3762b90b013a300bd87e3fa902e902cb9e)) +* **core:** Permission check for subworkflow properly checking for workflow settings ([#7576](https://github.com/n8n-io/n8n/issues/7576)) ([437c95e](https://github.com/n8n-io/n8n/commit/437c95e84e144cc77f2866a74d6b670c415895cd)) +* **core:** Prevent executions from becoming forever running ([#7569](https://github.com/n8n-io/n8n/issues/7569)) ([9bdb85c](https://github.com/n8n-io/n8n/commit/9bdb85c4ced96fde75435e334dc757d6c7679926)) +* **core:** Upgrade crypto-js to address CVE-2023-46233 ([#7519](https://github.com/n8n-io/n8n/issues/7519)) ([65e5593](https://github.com/n8n-io/n8n/commit/65e559323371e8235b92e2134d9908d69043fac4)) +* **editor:** Do not truncate form inputs ([#7528](https://github.com/n8n-io/n8n/issues/7528)) ([ae616f1](https://github.com/n8n-io/n8n/commit/ae616f146bc2ce8d37f8cf5116c6c4c8682a91a6)) +* **editor:** Fix NDV close after using input select ([#7544](https://github.com/n8n-io/n8n/issues/7544)) ([3b5e181](https://github.com/n8n-io/n8n/commit/3b5e181e66f8d7e3860e3078dae7cbb20e92551a)) +* **editor:** Fix NDV unexpected re-render ([#7532](https://github.com/n8n-io/n8n/issues/7532)) ([2853fcf](https://github.com/n8n-io/n8n/commit/2853fcff735fd0b98c19c1192349ef2c659d2493)) +* **editor:** Fix route component caching, incorrect use of array reduce method and enable WF history feature ([#7434](https://github.com/n8n-io/n8n/issues/7434)) ([12a89e6](https://github.com/n8n-io/n8n/commit/12a89e6d1441f81380d5e477274a5e2d3eb29f2d)) +* **editor:** Fixes the issue that Switch Node can not be created ([#7516](https://github.com/n8n-io/n8n/issues/7516)) ([df89685](https://github.com/n8n-io/n8n/commit/df89685e1548219f4c06614287abafbc96697817)) +* **editor:** Handle `localStorage` being blocked/unavailable ([#7348](https://github.com/n8n-io/n8n/issues/7348)) ([c05bc67](https://github.com/n8n-io/n8n/commit/c05bc6728d3227af4931ddcda5ed8bc6a3539dd0)) +* Fix dark mode small issues ([#7573](https://github.com/n8n-io/n8n/issues/7573)) ([1d81afc](https://github.com/n8n-io/n8n/commit/1d81afcbdf17166f3ebf468673e3ba348ae7fecb)) +* **Jira Software Node:** Handle missing issue types in issue types loader ([#7534](https://github.com/n8n-io/n8n/issues/7534)) ([9762705](https://github.com/n8n-io/n8n/commit/9762705833c809fd2781de179279a15c1be988eb)) +* **Switch Node:** Allow sortable Switch rules ([#7555](https://github.com/n8n-io/n8n/issues/7555)) ([7a56e58](https://github.com/n8n-io/n8n/commit/7a56e58a608132ef795d8c5cdaccb8caa49c0e8f)) + + +### Features + +* **core:** Add optional Error-Output ([#7460](https://github.com/n8n-io/n8n/issues/7460)) ([655efea](https://github.com/n8n-io/n8n/commit/655efeaf669e9722895b66fef47f000507459210)) +* **core:** Make queue mode settings configurable ([#7526](https://github.com/n8n-io/n8n/issues/7526)) ([3d95b24](https://github.com/n8n-io/n8n/commit/3d95b243e935e4eba97a418d05fa687169ab7d07)) +* **core:** Set up leader selection for multiple main instances ([#7527](https://github.com/n8n-io/n8n/issues/7527)) ([442c73e](https://github.com/n8n-io/n8n/commit/442c73e63bb54f50657a511d88912a80cab64c7f)) +* **editor:** Implement the `UserStack` design system component ([#7559](https://github.com/n8n-io/n8n/issues/7559)) ([ce14f62](https://github.com/n8n-io/n8n/commit/ce14f6266b30caadb477b08d4257b82c769a74c3)) +* **HTTP Request Node:** Add pagination support ([#5993](https://github.com/n8n-io/n8n/issues/5993)) ([cc2bd2e](https://github.com/n8n-io/n8n/commit/cc2bd2e19c8b75320b236de215d389220fbe24ae)) +* **HTTP Request Node:** Update icon and default color ([#7572](https://github.com/n8n-io/n8n/issues/7572)) ([ff279ab](https://github.com/n8n-io/n8n/commit/ff279ab4112435c341b84081d68b976ff03bf261)) +* **n8n Form Trigger Node:** Add text area and password input types ([#7474](https://github.com/n8n-io/n8n/issues/7474)) ([b72040a](https://github.com/n8n-io/n8n/commit/b72040aa5423aa6cb16dea2e7c6ea6439376b653)) +* * **editor:** Dark mode is here! You can change it under personal settings.([#6980](https://github.com/n8n-io/n8n/pull/6980)) ([0746783](https://github.com/n8n-io/n8n/commit/0746783e027ebe6715588a68db399a34e0211a96)) + + + +# [1.14.0](https://github.com/n8n-io/n8n/compare/n8n@1.13.0...n8n@1.14.0) (2023-10-25) + + +### Features + +* **Switch Node:** Add support for infinite Switch outputs ([#7499](https://github.com/n8n-io/n8n/issues/7499)) ([2febc61](https://github.com/n8n-io/n8n/commit/2febc61ec94928eb196e1b5f815fffa13f8bae07)) + + + +# [1.13.0](https://github.com/n8n-io/n8n/compare/n8n@1.12.0...n8n@1.13.0) (2023-10-25) + + +### Bug Fixes + +* **core:** Always derive `instanceId` from the encryption key (no-changlog) ([#7501](https://github.com/n8n-io/n8n/issues/7501)) ([a9fdd01](https://github.com/n8n-io/n8n/commit/a9fdd018f4f5ba1e11cc10dc3a3b7929a586f818)) +* **core:** Do not return `inviteAcceptUrl` in response if email was sent ([#7465](https://github.com/n8n-io/n8n/issues/7465)) ([55c6a1b](https://github.com/n8n-io/n8n/commit/55c6a1b0d394265fa4018a7023971589d8e61b4a)) +* **core:** Ensure nodes post-processors run in the correct order ([#7500](https://github.com/n8n-io/n8n/issues/7500)) ([6f45298](https://github.com/n8n-io/n8n/commit/6f45298d3d61b33e762f520129f4775e216707c8)), closes [#7497](https://github.com/n8n-io/n8n/issues/7497) +* **core:** Fix `frontend.settings` external hook execution ([#7496](https://github.com/n8n-io/n8n/issues/7496)) ([774fe20](https://github.com/n8n-io/n8n/commit/774fe202bfde4f2c5cc95f28a33185e261b031a5)) +* **core:** Handle gzip and deflate compressed request payloads ([#7461](https://github.com/n8n-io/n8n/issues/7461)) ([83762e0](https://github.com/n8n-io/n8n/commit/83762e051d5e34d9e43caebd6275780da05c6a46)) +* **core:** Reduce logging overhead for levels that do not output ([#7479](https://github.com/n8n-io/n8n/issues/7479)) ([76c0481](https://github.com/n8n-io/n8n/commit/76c04815f7f53bf6b4c06bbe5afa52f51f28750d)) +* **Customer.io Node:** Fix api endpoint when using EU region ([#7485](https://github.com/n8n-io/n8n/issues/7485)) ([519680c](https://github.com/n8n-io/n8n/commit/519680c2cf37f3b7341e87e71b911ac2fee8bdfa)), closes [#7484](https://github.com/n8n-io/n8n/issues/7484) +* **editor:** Allow importing the same workflow multiple times ([#7458](https://github.com/n8n-io/n8n/issues/7458)) ([3c0a166](https://github.com/n8n-io/n8n/commit/3c0a166f7f1cf225e5d1b4da91f7449f2deed5ca)), closes [#7457](https://github.com/n8n-io/n8n/issues/7457) +* **editor:** Fix canvas selection breaking after interacting with node actions ([#7466](https://github.com/n8n-io/n8n/issues/7466)) ([bc47365](https://github.com/n8n-io/n8n/commit/bc473655fbc09b1172cd6949236ca2871c9d3b8e)) +* **editor:** Fix connections disappearing after reactivating canvas and renaming a node ([#7483](https://github.com/n8n-io/n8n/issues/7483)) ([450e0cc](https://github.com/n8n-io/n8n/commit/450e0cc66abbe57697f66835a837e53b5eb883a3)) +* **Google Sheets Node:** Append or update runs forever when without column headers ([#7463](https://github.com/n8n-io/n8n/issues/7463)) ([ab6a9bb](https://github.com/n8n-io/n8n/commit/ab6a9bbac29a2caf34f4dd8211cd18116f659804)) +* **Microsoft SQL Node:** Prevent SQL injection ([#7467](https://github.com/n8n-io/n8n/issues/7467)) ([a739245](https://github.com/n8n-io/n8n/commit/a7392453323fe06371988fd5bb28d659a7a00cd8)) +* **MQTT Trigger Node:** Fix node causing a start up hang when active ([#7498](https://github.com/n8n-io/n8n/issues/7498)) ([baecb93](https://github.com/n8n-io/n8n/commit/baecb93bef30ac00f09b46ea987bb4c9a2fca394)) +* **MySQL Node:** Resolve expressions in v1 ([#7464](https://github.com/n8n-io/n8n/issues/7464)) ([5c46bb0](https://github.com/n8n-io/n8n/commit/5c46bb09c137023608119093cabdf896555b22b9)) +* **Redis Node:** Fix adding sets data types ([#7444](https://github.com/n8n-io/n8n/issues/7444)) ([4e66023](https://github.com/n8n-io/n8n/commit/4e66023cd428513b76626795c27ba0713c6c4ea9)), closes [#6339](https://github.com/n8n-io/n8n/issues/6339) +* **Spreadsheet File Node:** Fix include empty cells not working with v2 ([#7505](https://github.com/n8n-io/n8n/issues/7505)) ([05e6f2a](https://github.com/n8n-io/n8n/commit/05e6f2a6ac43fb4059e7e6cc40af6c5d75e01c8b)), closes [Ticket#763644](https://github.com/Ticket/issues/763644) + + +### Features + +* **core:** Add support for oauth based service accounts with UM SMTP ([#7311](https://github.com/n8n-io/n8n/issues/7311)) ([647372b](https://github.com/n8n-io/n8n/commit/647372be275c46e9963c96163c9e913a17f13e5f)) +* **editor:** Add PH tracking to event ([#7511](https://github.com/n8n-io/n8n/issues/7511)) ([c47d27d](https://github.com/n8n-io/n8n/commit/c47d27dd6da9420add7dad243b2701876f39a95b)) +* **Facebook Lead Ads Trigger Node:** Add Facebook Lead Ads Trigger Node ([#7113](https://github.com/n8n-io/n8n/issues/7113)) ([ac814a9](https://github.com/n8n-io/n8n/commit/ac814a9c613f6f9943be8002110ca9e2433918b2)) +* **Ghost Node:** Add support for lexical format ([#7488](https://github.com/n8n-io/n8n/issues/7488)) ([7b1973c](https://github.com/n8n-io/n8n/commit/7b1973c058e0cb7dfa436953c6f046c2b3b145eb)) +* **RSS Feed Trigger Node:** Add RSS feed trigger node ([#7386](https://github.com/n8n-io/n8n/issues/7386)) ([689360e](https://github.com/n8n-io/n8n/commit/689360ee069043415838f1488486ce8deaef9e38)) + + + +# [1.12.0](https://github.com/n8n-io/n8n/compare/n8n@1.11.0...n8n@1.12.0) (2023-10-18) + + +### Bug Fixes + +* **core:** Add check that queue is defined and remove cyclic dependency ([#7404](https://github.com/n8n-io/n8n/issues/7404)) ([45f2ef3](https://github.com/n8n-io/n8n/commit/45f2ef373ee76abb0d4b9ad805beb02d8969ebd6)) +* **core:** Do not throw when deleting workflows with executions without binary-data ([#7411](https://github.com/n8n-io/n8n/issues/7411)) ([2b6a15e](https://github.com/n8n-io/n8n/commit/2b6a15e478fd1a6041be4eac19dcf1c5e5583886)) +* **core:** Fix expression with paired item with multi-input node ([#7424](https://github.com/n8n-io/n8n/issues/7424)) ([ec14141](https://github.com/n8n-io/n8n/commit/ec141416e29540a2bf6ce99be1b13d76517eca13)) +* **core:** Fix ignoring crashed executions without event msgs ([#7368](https://github.com/n8n-io/n8n/issues/7368)) ([2f4d91b](https://github.com/n8n-io/n8n/commit/2f4d91b2cd2b87ae4aceb06a4170cd86802c9bbf)) +* **core:** Pg-promise de-initialization fix ([#7417](https://github.com/n8n-io/n8n/issues/7417)) ([7703904](https://github.com/n8n-io/n8n/commit/77039044ebd74b907a44a08ae5421517fc74b46e)) +* **core:** Prevent false stalled jobs in queue mode from displaying as errored ([#7435](https://github.com/n8n-io/n8n/issues/7435)) ([e01b9e5](https://github.com/n8n-io/n8n/commit/e01b9e5ae1bf6ccdec422c2767fdf870b2e159b0)) +* **core:** Prevent undefined issues when restoring binary data ([#7419](https://github.com/n8n-io/n8n/issues/7419)) ([46977a2](https://github.com/n8n-io/n8n/commit/46977a2aff342bc7568f5a378b78689a5c3d8e95)) +* **editor:** Fix remote options fetching on every keystroke ([#7320](https://github.com/n8n-io/n8n/issues/7320)) ([367255a](https://github.com/n8n-io/n8n/commit/367255ab2c13b4a33a746d3d4b9f3164309a11c8)) +* **editor:** Open only one tab with plans page ([#7377](https://github.com/n8n-io/n8n/issues/7377)) ([c599006](https://github.com/n8n-io/n8n/commit/c599006b917e681fca918b789a80d79883bd69a9)) +* **Google Sheets Node:** Update by row_number, restored 'Handling Extra Data Option', updated Cell Format default ([#7357](https://github.com/n8n-io/n8n/issues/7357)) ([d8531a5](https://github.com/n8n-io/n8n/commit/d8531a53b9a256095157129b64adde7749aa84c9)) +* **Ldap Node:** Fix issue with connections not closing correctly ([#7432](https://github.com/n8n-io/n8n/issues/7432)) ([c3f0be8](https://github.com/n8n-io/n8n/commit/c3f0be809f3ea09573fec26648ef030c7d8ddc16)) +* **Set Node:** Null should not throw an error ([#7416](https://github.com/n8n-io/n8n/issues/7416)) ([e9b6ab0](https://github.com/n8n-io/n8n/commit/e9b6ab04cd4b292c291b77e66aa717605e72f852)) +* **TheHive 5 Node:** Observable encoding in alert > create fix ([#7450](https://github.com/n8n-io/n8n/issues/7450)) ([a2d2e3d](https://github.com/n8n-io/n8n/commit/a2d2e3dda798d166cfc2a49b0c4f0eb164a666dc)) + + +### Features + +* **core:** Make executions pruning interval configurable ([#7439](https://github.com/n8n-io/n8n/issues/7439)) ([40707fa](https://github.com/n8n-io/n8n/commit/40707fa6926776aa806221df8edee05ee7e9f3ed)) +* **Google Calendar Trigger Node:** Add support for cancelled events ([#7436](https://github.com/n8n-io/n8n/issues/7436)) ([9d241a0](https://github.com/n8n-io/n8n/commit/9d241a0d6dbfd990920708c718ff3de83c9b5883)) +* **HubSpot Trigger Node:** Add support for ticket related events ([#7156](https://github.com/n8n-io/n8n/issues/7156)) ([57c6093](https://github.com/n8n-io/n8n/commit/57c609384af7c583c213c639add7170e0bbb24fd)) +* **n8n Form Trigger Node:** New node ([#7130](https://github.com/n8n-io/n8n/issues/7130)) ([3ddc176](https://github.com/n8n-io/n8n/commit/3ddc176dfa2d3d99a328a29a3a8613e35ff456a0)) +* **Spreadsheet File Node:** Improve CSV parsing ([#7448](https://github.com/n8n-io/n8n/issues/7448)) ([79f23fb](https://github.com/n8n-io/n8n/commit/79f23fb93979aa1ef3a9bbf7049b93d1e6a0e95a)) + + + +# [1.11.0](https://github.com/n8n-io/n8n/compare/n8n@1.10.0...n8n@1.11.0) (2023-10-11) + + +### Bug Fixes + +* Add role check for upgrade path ([#7374](https://github.com/n8n-io/n8n/issues/7374)) ([a43f720](https://github.com/n8n-io/n8n/commit/a43f720658aedf8a52f713c28b29ed08bfad33c8)) +* **core:** Add an option to enable postgres ssl with default certs ([#6889](https://github.com/n8n-io/n8n/issues/6889)) ([789e1e7](https://github.com/n8n-io/n8n/commit/789e1e7ed41838bdadb5e8cb429aa76610fa5749)) +* **core:** Fix error on missing paired item data ([#7399](https://github.com/n8n-io/n8n/issues/7399)) ([47e8953](https://github.com/n8n-io/n8n/commit/47e8953ec9cccaddc603aff4c6e6fce88258e6d0)) +* **core:** Missing pairing info ([#7326](https://github.com/n8n-io/n8n/issues/7326)) ([e2c3c7a](https://github.com/n8n-io/n8n/commit/e2c3c7acebdae2014b32620277fce70d0db85dd0)) +* **core:** Prevent object deletion request on no prefix match ([#7366](https://github.com/n8n-io/n8n/issues/7366)) ([63e11e4](https://github.com/n8n-io/n8n/commit/63e11e4be93a50fe753d84771dbc72ead38fdc0e)) +* **editor:** Fix completions for `.json` on quoted node name in Code node ([#7382](https://github.com/n8n-io/n8n/issues/7382)) ([86e7ec7](https://github.com/n8n-io/n8n/commit/86e7ec796acd9d8fbe8e42a5beba687cd6133a2f)), closes [/linear.app/n8n/issue/PAY-635/autocomplete-only-supports-3-levels-of-children#comment-234f738](https://github.com//linear.app/n8n/issue/PAY-635/autocomplete-only-supports-3-levels-of-children/issues/comment-234f738) +* **editor:** Implement canvas zoom UX improvements ([#7376](https://github.com/n8n-io/n8n/issues/7376)) ([7e06b31](https://github.com/n8n-io/n8n/commit/7e06b31a5f3de8f073e7ef42be24e04899091486)) +* **editor:** Make workflow history button available only for dev builds ([#7392](https://github.com/n8n-io/n8n/issues/7392)) ([7ed466d](https://github.com/n8n-io/n8n/commit/7ed466db7faa9af88e54276bc6cb9a6dc9e80493)) +* **editor:** Remove excess margin below run data editor ([#7372](https://github.com/n8n-io/n8n/issues/7372)) ([3fa2764](https://github.com/n8n-io/n8n/commit/3fa27647d8e8a39812d9802d4c0954b3135db847)) +* **editor:** Sanitize HTML binary-data before rendering in the UI ([#7400](https://github.com/n8n-io/n8n/issues/7400)) ([2b075bf](https://github.com/n8n-io/n8n/commit/2b075bfc2da02afc43c1ebfee565b849c87aee49)) +* **editor:** Use display option's @Version specifier ([#7351](https://github.com/n8n-io/n8n/issues/7351)) ([afbf0c3](https://github.com/n8n-io/n8n/commit/afbf0c3d5e50976ca5d9f4c08051ea7bd3d2b354)) +* **Google BigQuery Node:** Location default to jobReference ([#7354](https://github.com/n8n-io/n8n/issues/7354)) ([97bb703](https://github.com/n8n-io/n8n/commit/97bb703d0a13cf979a2c462c87570707d5032867)) +* **Google Drive Trigger Node:** Add Shared Drives support ([#7369](https://github.com/n8n-io/n8n/issues/7369)) ([3e7a4d3](https://github.com/n8n-io/n8n/commit/3e7a4d3b2cc12fcb1b011fccd0773bb807986884)) +* **Google Sheets Node:** Fix "Maximum call stack size exceeded" error on too many rows ([#7384](https://github.com/n8n-io/n8n/issues/7384)) ([732b15a](https://github.com/n8n-io/n8n/commit/732b15a1faeab5b802dfddb282418601f34ade27)) +* **HTML Node:** Update property fields to not use expressions on drag ([#7379](https://github.com/n8n-io/n8n/issues/7379)) ([77643e5](https://github.com/n8n-io/n8n/commit/77643e5ccbc2f68cd240c7aa7e21c0efbcc08b63)) +* **Notion Node:** Handle empty values correctly for Notion selects + multi selects ([#7383](https://github.com/n8n-io/n8n/issues/7383)) ([fbcd1d4](https://github.com/n8n-io/n8n/commit/fbcd1d40edfa8737a8786a8f961723c42f84a851)) +* **Set Node:** Increase search priority ([#7358](https://github.com/n8n-io/n8n/issues/7358)) ([e5ad1e7](https://github.com/n8n-io/n8n/commit/e5ad1e7e4df33a06c9649fe0652edfc80f7cb818)) +* **Webhook Node:** Backward compatible form-data parsing for non-array files ([#7385](https://github.com/n8n-io/n8n/issues/7385)) ([6479eb1](https://github.com/n8n-io/n8n/commit/6479eb180ff9a43791b5211157f5c450e1463ffd)) + + +### Features + +* **core:** Add Job Summary to Worker response ([#7360](https://github.com/n8n-io/n8n/issues/7360)) ([b8608ce](https://github.com/n8n-io/n8n/commit/b8608cee6d5ab96ec38a8a7f5428d02ce01366ee)) +* **core:** Integrate object store as binary data manager ([#7253](https://github.com/n8n-io/n8n/issues/7253)) ([1a661e6](https://github.com/n8n-io/n8n/commit/1a661e6d00e907b9bc4bdc248db6dbc25972294b)), closes [#7225](https://github.com/n8n-io/n8n/issues/7225) +* **core:** Switch binary filesystem mode to nested path structure ([#7307](https://github.com/n8n-io/n8n/issues/7307)) ([0847623](https://github.com/n8n-io/n8n/commit/0847623f85192232d129778ab4295be3cd685877)), closes [#7253](https://github.com/n8n-io/n8n/issues/7253) +* **editor:** Make PDF and Audio binary-data viewable in the UI ([#7367](https://github.com/n8n-io/n8n/issues/7367)) ([8187be1](https://github.com/n8n-io/n8n/commit/8187be1b7dd723fec9591e2fc4f57a782f3ca398)), closes [#7361](https://github.com/n8n-io/n8n/issues/7361) +* **editor:** Support autologin for upgrade path ([#7316](https://github.com/n8n-io/n8n/issues/7316)) ([1dfa052](https://github.com/n8n-io/n8n/commit/1dfa052301c4580838bc17830676c8fb383a00b4)) +* **Execute Workflow Node:** Run once for each item mode ([#7289](https://github.com/n8n-io/n8n/issues/7289)) ([c8c14ca](https://github.com/n8n-io/n8n/commit/c8c14ca0af1faaf680c97868210b7372ac8ac61e)) +* **Item Lists Node:** Split merge binary data ([#7297](https://github.com/n8n-io/n8n/issues/7297)) ([965db8f](https://github.com/n8n-io/n8n/commit/965db8f7f272056d10515a94a3b0b69b75913a9a)) +* **Loop Over Items (Split in Batches) Node:** Automatically add a loop + rename ([#7228](https://github.com/n8n-io/n8n/issues/7228)) ([7b773cc](https://github.com/n8n-io/n8n/commit/7b773cc5cc77853f73db186f7f7a7fbc6379db31)) +* **Notion Node:** Fetch child blocks recursively ([#7304](https://github.com/n8n-io/n8n/issues/7304)) ([193181a](https://github.com/n8n-io/n8n/commit/193181a9c62d21812e5452b06606c63f26f6b9d0)) + + + +# [1.10.0](https://github.com/n8n-io/n8n/compare/n8n@1.9.0...n8n@1.10.0) (2023-10-05) + + +### Bug Fixes + +* **Convert to/from binary data Node:** Rename 'Move Binary Data' to 'Convert to/from binary data' ([#7318](https://github.com/n8n-io/n8n/issues/7318)) ([5e6c1d4](https://github.com/n8n-io/n8n/commit/5e6c1d4f4bc049d366dbc9b66d5481f6ed43190e)) +* **core:** Account for itemless case on restoring binary data ID ([#7305](https://github.com/n8n-io/n8n/issues/7305)) ([1691223](https://github.com/n8n-io/n8n/commit/169122378968b4d4c73d921ee2d5d86b76e1cd01)) +* **core:** Fix pruning of non-finished executions ([#7333](https://github.com/n8n-io/n8n/issues/7333)) ([1b4848a](https://github.com/n8n-io/n8n/commit/1b4848afcb817621e0977186c7400945758bee96)) +* **editor:** Disable email confirmation banner for trialing users ([#7340](https://github.com/n8n-io/n8n/issues/7340)) ([6d3d178](https://github.com/n8n-io/n8n/commit/6d3d1789dbd800a6ef75aab3a69e5b5ef5dba933)) +* **editor:** Display value of selected matching column in RMC ([#7298](https://github.com/n8n-io/n8n/issues/7298)) ([3aac22b](https://github.com/n8n-io/n8n/commit/3aac22b4c1d472b8470346bfc4df99b7794c3692)) +* **editor:** Fix canvas endpoint snapping when dragging connection ([#7346](https://github.com/n8n-io/n8n/issues/7346)) ([b59b908](https://github.com/n8n-io/n8n/commit/b59b9086d769b859156f4f8f99411afe5e4b9108)) +* **editor:** Fix disappearing NDV header in code nodes ([#7290](https://github.com/n8n-io/n8n/issues/7290)) ([7ebf8f3](https://github.com/n8n-io/n8n/commit/7ebf8f327ad433acc949034cd070f2362dfacd4e)) +* **editor:** Fix RLC not loading when an expression can't resolve ([#7295](https://github.com/n8n-io/n8n/issues/7295)) ([ddc26c2](https://github.com/n8n-io/n8n/commit/ddc26c21bd8da6c95cbe447bf7e479ddc449e6a4)) +* **editor:** Separate cloud endpoint calls ([#7312](https://github.com/n8n-io/n8n/issues/7312)) ([04dfcd7](https://github.com/n8n-io/n8n/commit/04dfcd73bee2c1ea0d47fd7102383719827d53d0)) +* **Jira Software Node:** Get all users in dropdown/RLC ([#7322](https://github.com/n8n-io/n8n/issues/7322)) ([3704760](https://github.com/n8n-io/n8n/commit/370476072471da6b3b849d8f5acc5cf1380a5ba8)), closes [#2670](https://github.com/n8n-io/n8n/issues/2670) +* **Notion Node:** Rename Notion API Key to Internal Integration Token ([#7176](https://github.com/n8n-io/n8n/issues/7176)) ([ec2aa38](https://github.com/n8n-io/n8n/commit/ec2aa3819c1e9624c4692d5f6942f096aae900e7)) +* **Postgres Node:** Node requires comma-separated string even when using a single parameter through an expression ([#7300](https://github.com/n8n-io/n8n/issues/7300)) ([763d451](https://github.com/n8n-io/n8n/commit/763d4514fafe489c169cd0513bf3b2c4cf7f7f12)) +* **Set Node:** Do not stringify null and undefined ([#7313](https://github.com/n8n-io/n8n/issues/7313)) ([f0a6687](https://github.com/n8n-io/n8n/commit/f0a66873b94b032792f30bc279118cdb13210505)) +* **Typeform Trigger Node:** Change output format for TypeForm trigger to object instead of array ([#7315](https://github.com/n8n-io/n8n/issues/7315)) ([b3fc00e](https://github.com/n8n-io/n8n/commit/b3fc00e045dc16f758b684b71591ec2d1f889d73)) + + +### Features + +* **core:** Add "Sent by n8n" attribution ([#7183](https://github.com/n8n-io/n8n/issues/7183)) ([8f9fe62](https://github.com/n8n-io/n8n/commit/8f9fe6269b5608346b0ac3612aa2e3af4a7baae1)) +* **core:** Add support for building LLM applications ([#7235](https://github.com/n8n-io/n8n/issues/7235)) ([00a4b8b](https://github.com/n8n-io/n8n/commit/00a4b8b0c62883f2a36559a939f9c32c5d1c048e)), closes [#7246](https://github.com/n8n-io/n8n/issues/7246) [#7137](https://github.com/n8n-io/n8n/issues/7137) +* Workflow History pruning and prune time settings ([#7343](https://github.com/n8n-io/n8n/issues/7343)) ([0adc533](https://github.com/n8n-io/n8n/commit/0adc53371969ac3f759d06d9fbb095267fffe95e)) + + + +# [1.9.0](https://github.com/n8n-io/n8n/compare/n8n@1.8.0...n8n@1.9.0) (2023-09-28) + + +### Bug Fixes + +* **Airtable Node:** Attachments field type fix ([#7227](https://github.com/n8n-io/n8n/issues/7227)) ([2af967c](https://github.com/n8n-io/n8n/commit/2af967cf88a4d6e795ff1641f9946f9fcbf49a03)) +* **core:** Change WorkflowHistory nodes/connections columns to be json ([#7282](https://github.com/n8n-io/n8n/issues/7282)) ([a80abad](https://github.com/n8n-io/n8n/commit/a80abad3af8fed3a40b6f713cd94a16f44d84f60)) +* **core:** Fix binary data manager check on pruning ([#7251](https://github.com/n8n-io/n8n/issues/7251)) ([484035e](https://github.com/n8n-io/n8n/commit/484035eb519ab28de31488484caaa4bf9a77d095)) +* **core:** Fix missing execution ID in webhook-based workflow producing binary data ([#7244](https://github.com/n8n-io/n8n/issues/7244)) ([33991e9](https://github.com/n8n-io/n8n/commit/33991e92d0aabd13a44ba103de43a6ec2b90ca46)) +* **core:** Handle filename* with quotes in Content-Disposition header ([#7229](https://github.com/n8n-io/n8n/issues/7229)) ([67b985f](https://github.com/n8n-io/n8n/commit/67b985fe89cc45e40f66b38bd2e0c310a4b3504c)) +* **core:** Make DNS resolution order configurable ([#7272](https://github.com/n8n-io/n8n/issues/7272)) ([5b3121c](https://github.com/n8n-io/n8n/commit/5b3121c415ec96535eae4ed2adc28461311b6c6e)) +* **core:** Make senderId required for all command messages ([#7252](https://github.com/n8n-io/n8n/issues/7252)) ([4b01428](https://github.com/n8n-io/n8n/commit/4b014286cf66e5f9b660fc145274be7caccbf34c)) +* **core:** Prevent executions from displaying Running status incorrectly ([#7261](https://github.com/n8n-io/n8n/issues/7261)) ([861cac5](https://github.com/n8n-io/n8n/commit/861cac5257f5e0d3cc2a010f09481ab93b8241e6)), closes [/linear.app/n8n/issue/HELP-338/large-number-of-long-running-executions-for-nadjalemlist#comment-18d1fc96](https://github.com//linear.app/n8n/issue/HELP-338/large-number-of-long-running-executions-for-nadjalemlist/issues/comment-18d1fc96) +* **core:** Use consistent timezone-aware timestamps in postgres ([#6948](https://github.com/n8n-io/n8n/issues/6948)) ([0132514](https://github.com/n8n-io/n8n/commit/0132514f8b7005a895880bab9f547484e2e90710)), closes [#2178](https://github.com/n8n-io/n8n/issues/2178) [#2810](https://github.com/n8n-io/n8n/issues/2810) [#3855](https://github.com/n8n-io/n8n/issues/3855) [#2813](https://github.com/n8n-io/n8n/issues/2813) +* **editor:** Add debug feature docs link ([#7240](https://github.com/n8n-io/n8n/issues/7240)) ([4614e1e](https://github.com/n8n-io/n8n/commit/4614e1e1c90f1c7630ccc58e8400380afedba585)) +* **editor:** Fix SQL editor issue ([#7236](https://github.com/n8n-io/n8n/issues/7236)) ([647fc6c](https://github.com/n8n-io/n8n/commit/647fc6c555702bb3222871fb50f8916c6d2ae3f3)) +* Ensure new Set node is on top of search list ([#7215](https://github.com/n8n-io/n8n/issues/7215)) ([2491ccf](https://github.com/n8n-io/n8n/commit/2491ccf4d9f36ecc93e559918cf68c690ae149db)) +* **HTTP Request Node:** Add suggestion how to fix '429 - too many requests' errors ([#7293](https://github.com/n8n-io/n8n/issues/7293)) ([0bc33b1](https://github.com/n8n-io/n8n/commit/0bc33b1cc2c2d3ae8db0342545b3a4a2b4931af9)) +* Issue enforcing user limits on start plan ([#7188](https://github.com/n8n-io/n8n/issues/7188)) ([303bc8e](https://github.com/n8n-io/n8n/commit/303bc8e71e60c3ee8ccd6b823814945d892e3726)) +* **Item Lists Node:** Concatenate operation pairedItems fix ([#7286](https://github.com/n8n-io/n8n/issues/7286)) ([cde23a1](https://github.com/n8n-io/n8n/commit/cde23a1bb1934bebe8e19308745910d625e3ca73)) +* **Respond to Webhook Node:** JSON output from expression fix ([#7294](https://github.com/n8n-io/n8n/issues/7294)) ([8bc369d](https://github.com/n8n-io/n8n/commit/8bc369dd40836472502dc7b36c503a04db3f480c)) + + +### Features + +* Add onboarding flow ([#7212](https://github.com/n8n-io/n8n/issues/7212)) ([01e9340](https://github.com/n8n-io/n8n/commit/01e93406219f6c1712247d9855590ea06df3e965)) +* Add user cloud it to telemetry ([#7232](https://github.com/n8n-io/n8n/issues/7232)) ([60c152d](https://github.com/n8n-io/n8n/commit/60c152dc72c27862f50304b8a824e2ec5e201787)) +* **core:** Add secrets provider reload and refactor ([#7277](https://github.com/n8n-io/n8n/issues/7277)) ([53a7502](https://github.com/n8n-io/n8n/commit/53a7502d20eb95055e842e0450e9daea308443a1)) +* **core:** Add Tournament as the new default expression evaluator ([#6964](https://github.com/n8n-io/n8n/issues/6964)) ([bf74f09](https://github.com/n8n-io/n8n/commit/bf74f09d69014da3c3fb2a56288b010670a4b982)) +* **core:** Initial workflow history API ([#7234](https://github.com/n8n-io/n8n/issues/7234)) ([0083a9e](https://github.com/n8n-io/n8n/commit/0083a9e45d21928be259664532528706d0a57ecf)) +* **core:** Introduce object store service ([#7225](https://github.com/n8n-io/n8n/issues/7225)) ([fa84545](https://github.com/n8n-io/n8n/commit/fa845453bb3d2ef72ef555bc8b8fa3f8bb703e1f)) +* **editor:** Rework banners framework and add email confirmation banner ([#7205](https://github.com/n8n-io/n8n/issues/7205)) ([b0e98b5](https://github.com/n8n-io/n8n/commit/b0e98b59a6500b11f306403c563191749478c3fb)), closes [4#6afd052ec8d146a1b0fab8884a19add7](https://github.com/4/issues/6afd052ec8d146a1b0fab8884a19add7) [/github.com/n8n-io/n8n/blob/f9f122d46d26565a4cc5dcf63060e7ed9f359e53/packages/editor-ui/src/components/banners/BannerStack.vue#L14](https://github.com//github.com/n8n-io/n8n/blob/f9f122d46d26565a4cc5dcf63060e7ed9f359e53/packages/editor-ui/src/components/banners/BannerStack.vue/issues/L14) [/github.com/n8n-io/n8n/blob/b80d2e3bec59a9abe141a4c808ea2b7f5d9fecce/packages/editor-ui/src/stores/cloudPlan.store.ts#L59](https://github.com//github.com/n8n-io/n8n/blob/b80d2e3bec59a9abe141a4c808ea2b7f5d9fecce/packages/editor-ui/src/stores/cloudPlan.store.ts/issues/L59) +* **MISP Node:** Update credential to support HTTP Request node ([#7268](https://github.com/n8n-io/n8n/issues/7268)) ([e4c302c](https://github.com/n8n-io/n8n/commit/e4c302c6833c2a9cc6a5fc46d21272266222dd63)) + + +### Performance Improvements + +* **core:** Skip unneeded calls on every pruning cycle ([#7260](https://github.com/n8n-io/n8n/issues/7260)) ([db01164](https://github.com/n8n-io/n8n/commit/db01164ce11c2c1574899a60541d13712bb39324)) + + + +# [1.8.0](https://github.com/n8n-io/n8n/compare/n8n@1.7.0...n8n@1.8.0) (2023-09-20) + + +### Bug Fixes + +* **core:** Make parsing of content-type and content-disposition headers more flexible ([#7217](https://github.com/n8n-io/n8n/issues/7217)) ([d41546b](https://github.com/n8n-io/n8n/commit/d41546b899e75c0decbf2fe2f0841b33c9b39bc9)), closes [#7149](https://github.com/n8n-io/n8n/issues/7149) +* **core:** Resolve domains to IPv4 first ([#7206](https://github.com/n8n-io/n8n/issues/7206)) ([e9ce531](https://github.com/n8n-io/n8n/commit/e9ce5312106e550c15eb4adc049e4b0151a7c40c)) +* **editor:** Add ssh key type selection to source control settings when regenerating key ([#7172](https://github.com/n8n-io/n8n/issues/7172)) ([54bf66d](https://github.com/n8n-io/n8n/commit/54bf66d335060e866b4f120269b156c4690a8246)) +* **editor:** No need to add click emitting click events, VUE delegates the handler to the root element of the component ([#7182](https://github.com/n8n-io/n8n/issues/7182)) ([3c055e4](https://github.com/n8n-io/n8n/commit/3c055e4d8d77addea014d8da363518c4c14c9a98)) +* **editor:** Prevent duplicate creation of credential for OAuth2 ([#7163](https://github.com/n8n-io/n8n/issues/7163)) ([07a6417](https://github.com/n8n-io/n8n/commit/07a6417f0f52988e3dfac4583aab84426fc471cc)) +* **editor:** Testing flaky resource mapper feature in e2e tests ([#7165](https://github.com/n8n-io/n8n/issues/7165)) ([aaf87c3](https://github.com/n8n-io/n8n/commit/aaf87c3edd434ab464f3ec4a4001c07895370cb0)) +* **HTML Node:** Add pairedItem support for 'Convert to HTML Table' operation ([#7196](https://github.com/n8n-io/n8n/issues/7196)) ([6bc477b](https://github.com/n8n-io/n8n/commit/6bc477b50ebcb31eae6068b2218fea56349a64a9)) +* **HTTP Request Node:** Decrease default timeout to 5min ([#7177](https://github.com/n8n-io/n8n/issues/7177)) ([321780d](https://github.com/n8n-io/n8n/commit/321780d4a2a1f7e5e7ab0ea23e0b2fc28d539330)) +* **seven Node:** Rename sms77 to seven, fix credentials test ([#7180](https://github.com/n8n-io/n8n/issues/7180)) ([cf776b8](https://github.com/n8n-io/n8n/commit/cf776b8f1756c3e20ed39fe882ebaba05f12eb6a)) +* **X (Formerly Twitter) Node:** Rename Twitter to X (keep Twitter alias) ([#7179](https://github.com/n8n-io/n8n/issues/7179)) ([d317e09](https://github.com/n8n-io/n8n/commit/d317e09c597a37fbb099ed1f032d27225e655eb9)) + + +### Features + +* **core:** Add command to trigger license refresh on workers ([#7184](https://github.com/n8n-io/n8n/issues/7184)) ([9f797b9](https://github.com/n8n-io/n8n/commit/9f797b96d818a5ae74ad82917347c99f3c249688)) +* **core:** Add rsa option to ssh key generation ([#7154](https://github.com/n8n-io/n8n/issues/7154)) ([fdac2c8](https://github.com/n8n-io/n8n/commit/fdac2c85729e19be0fd18f6807a7f5f99dfca002)) +* **Linear Node:** Add support for OAuth2 ([#7201](https://github.com/n8n-io/n8n/issues/7201)) ([12a3168](https://github.com/n8n-io/n8n/commit/12a3168367e3208665ab78fe52b00cf508f7a50d)) +* **Microsoft Outlook Node:** Node overhaul ([#4449](https://github.com/n8n-io/n8n/issues/4449)) ([556a613](https://github.com/n8n-io/n8n/commit/556a6132bafc3eeb574fbd753a438a5e0f2c466d)) +* **Set Node:** Overhaul ([#6348](https://github.com/n8n-io/n8n/issues/6348)) ([3a47455](https://github.com/n8n-io/n8n/commit/3a474552b211fad8939a19492f34c5e7b3137002)) + + + +# [1.7.0](https://github.com/n8n-io/n8n/compare/n8n@1.6.0...n8n@1.7.0) (2023-09-13) + + +### Bug Fixes + +* Account for nanoid workflow ids for subworkflow execute policy ([#7094](https://github.com/n8n-io/n8n/issues/7094)) ([67092c0](https://github.com/n8n-io/n8n/commit/67092c0a1bf98ccc5ceadc3d582fac7bff2dc46c)) +* **Code Node:** Disable WASM to address CVE-2023-37903 ([#7122](https://github.com/n8n-io/n8n/issues/7122)) ([36a8e91](https://github.com/n8n-io/n8n/commit/36a8e911e6f58d0b87816fae0443c6ce8f5ea45a)) +* **Code Node:** Upgrade vm2 to address CVE-2023-37466 ([#7123](https://github.com/n8n-io/n8n/issues/7123)) ([0a35025](https://github.com/n8n-io/n8n/commit/0a35025e5e6669661bdfcc16378453ec9109a347)) +* **core:** Disable Node.js custom inspection to address CVE-2023-37903 ([#7125](https://github.com/n8n-io/n8n/issues/7125)) ([a223734](https://github.com/n8n-io/n8n/commit/a223734a4a781834bee1a1484dffc47c56e8d50e)), closes [#7122](https://github.com/n8n-io/n8n/issues/7122) +* **editor:** Tweak hover area of workflow / cred cards ([#7108](https://github.com/n8n-io/n8n/issues/7108)) ([217de21](https://github.com/n8n-io/n8n/commit/217de21605beca57f087921231ae929279071686)) +* **editor:** Unbind workflow endpoint events in case of workspace reset ([#7129](https://github.com/n8n-io/n8n/issues/7129)) ([c9b7948](https://github.com/n8n-io/n8n/commit/c9b79485cf7d361174aeba175ccb98de7d918693)) +* **editor:** Update git repo url validation regex ([#7151](https://github.com/n8n-io/n8n/issues/7151)) ([e51f173](https://github.com/n8n-io/n8n/commit/e51f173608dd79bfe53eb86eeaed976109f74410)) +* **Google Cloud Firestore Node:** Fix empty string interpreted as number ([#7136](https://github.com/n8n-io/n8n/issues/7136)) ([915cfa0](https://github.com/n8n-io/n8n/commit/915cfa0f6a0311ca34d2f8eeb471c601473314aa)) +* **HubSpot Node:** Fix issue with contact lists not working ([#5582](https://github.com/n8n-io/n8n/issues/5582)) ([6e5a4f6](https://github.com/n8n-io/n8n/commit/6e5a4f6a589550a816f421ffa966cfeea3cac64d)) +* **Postgres Node:** Fix automatic column mapping ([#7121](https://github.com/n8n-io/n8n/issues/7121)) ([92af131](https://github.com/n8n-io/n8n/commit/92af1314fe60560cdfb52b3307cc74559ba530a8)) +* **Zoho CRM Node:** Fix issue with Sales Order not updating ([#6959](https://github.com/n8n-io/n8n/issues/6959)) ([fd800b6](https://github.com/n8n-io/n8n/commit/fd800b674b52079eb2572a4d2465774759e9b31d)) + + +### Features + +* **core:** Add an option to enable WAL mode for SQLite ([#7118](https://github.com/n8n-io/n8n/issues/7118)) ([1d1a022](https://github.com/n8n-io/n8n/commit/1d1a022defefc790905cfb8fcb9dd364ffb063bb)) +* **core:** Add commands to workers to respond with current state ([#7029](https://github.com/n8n-io/n8n/issues/7029)) ([7b49cf2](https://github.com/n8n-io/n8n/commit/7b49cf2a2c750d685af6cff464401f38482dac5a)) +* **Salesforce Node:** Add fax field to lead option ([#7030](https://github.com/n8n-io/n8n/issues/7030)) ([01f875a](https://github.com/n8n-io/n8n/commit/01f875a94d193ba1e709bf6cfe31a3951f3af81a)) + + + +# [1.6.0](https://github.com/n8n-io/n8n/compare/n8n@1.5.1...n8n@1.6.0) (2023-09-06) + + +### Bug Fixes + +* **core:** Add support for in-transit encryption (TLS) on Redis connections ([#7047](https://github.com/n8n-io/n8n/issues/7047)) ([a910757](https://github.com/n8n-io/n8n/commit/a910757cc5ac7e47f9e0ca6a57c8b624e269aaa4)) +* **core:** Disallow orphan executions ([#7069](https://github.com/n8n-io/n8n/issues/7069)) ([8a28e98](https://github.com/n8n-io/n8n/commit/8a28e98ec811952163c58feaad608ec14ffc9243)) +* **core:** Split event bus controller into community and ee ([#7107](https://github.com/n8n-io/n8n/issues/7107)) ([011ee2e](https://github.com/n8n-io/n8n/commit/011ee2e04b62e0182e9d6787064dea70654cb4ab)) +* **editor:** Standardize save text ([#7093](https://github.com/n8n-io/n8n/issues/7093)) ([58b3492](https://github.com/n8n-io/n8n/commit/58b3492b0dcf140920ec97ce6d50e91a6d3a01a6)) +* Ensure all new executions are saved ([#7061](https://github.com/n8n-io/n8n/issues/7061)) ([b8e06d2](https://github.com/n8n-io/n8n/commit/b8e06d245f5b8bc969d2eb29793e9d98a33e69a8)) +* Load remote resources even if expressions in non requried parameters resolve ([#6987](https://github.com/n8n-io/n8n/issues/6987)) ([8a8d4e8](https://github.com/n8n-io/n8n/commit/8a8d4e8bb32588e79c3fcda2317c491ade9b3637)) +* **Postgres Node:** Connection pool of the database object has been destroyed ([#7074](https://github.com/n8n-io/n8n/issues/7074)) ([9dd5f0e](https://github.com/n8n-io/n8n/commit/9dd5f0e579ccfd5144ddb547977f15b45dd7c9ce)) +* **Postgres Node:** Tunnel doesn't always close ([#7087](https://github.com/n8n-io/n8n/issues/7087)) ([58e55ba](https://github.com/n8n-io/n8n/commit/58e55ba6691dc73a9f475a1989dccb51144e1825)) + + +### Features + +* **core:** Add list query middleware to credentials ([#7041](https://github.com/n8n-io/n8n/issues/7041)) ([fd78021](https://github.com/n8n-io/n8n/commit/fd78021b68a261291d76811a2a01d7336577bca7)) +* **core:** Add support for floating licenses ([#7090](https://github.com/n8n-io/n8n/issues/7090)) ([e26553f](https://github.com/n8n-io/n8n/commit/e26553f1981d2788f4f2e1e5f5ce23ff8a4a7c8d)) +* **core:** Migration for soft deletions for executions ([#7088](https://github.com/n8n-io/n8n/issues/7088)) ([413e0bc](https://github.com/n8n-io/n8n/commit/413e0bccb4d0144e5bdcf9221762e3f2b4428194)) +* **HTTP Request Node:** Determine binary file name from content-disposition headers ([#7032](https://github.com/n8n-io/n8n/issues/7032)) ([273d091](https://github.com/n8n-io/n8n/commit/273d0913fe5f45c0fe074e6a788e475d5a1d50bd)) +* **TheHive Node:** Overhaul ([#6457](https://github.com/n8n-io/n8n/issues/6457)) ([73e782e](https://github.com/n8n-io/n8n/commit/73e782e2cf9d4b96d8b3748e74ad93570663e536)) + + + +## [1.5.1](https://github.com/n8n-io/n8n/compare/n8n@1.5.0...n8n@1.5.1) (2023-08-31) + + +### Features + +* **Strapi Node:** Add token credentials ([#7048](https://github.com/n8n-io/n8n/issues/7048)) ([c01bca5](https://github.com/n8n-io/n8n/commit/c01bca562b71d8b524e29edd37e8397d0689b180)) + + + +# [1.5.0](https://github.com/n8n-io/n8n/compare/n8n@1.4.0...n8n@1.5.0) (2023-08-31) + + +### Bug Fixes + +* **Agile CRM Node:** Fix issue with company address not working ([#6997](https://github.com/n8n-io/n8n/issues/6997)) ([2f81652](https://github.com/n8n-io/n8n/commit/2f81652400b6a793fa610728519fd992c03c3d0d)) +* **Code Node:** Switch over to vm2 fork ([#7018](https://github.com/n8n-io/n8n/issues/7018)) ([dfe0fa6](https://github.com/n8n-io/n8n/commit/dfe0fa65f8111cd534387e26197cb3836d694e27)) +* **core:** Invalid NODES_INCLUDE should not crash the app ([#7038](https://github.com/n8n-io/n8n/issues/7038)) ([04e3178](https://github.com/n8n-io/n8n/commit/04e31789019aad6fe122ed81b06552a61d7f3a6d)), closes [#6683](https://github.com/n8n-io/n8n/issues/6683) +* **core:** Setup websocket keep-live messages ([#6866](https://github.com/n8n-io/n8n/issues/6866)) ([8bdb07d](https://github.com/n8n-io/n8n/commit/8bdb07d33ded48eab0b8f892a06e18f37bee9372)), closes [#6757](https://github.com/n8n-io/n8n/issues/6757) +* **core:** Throw `NodeSSLError` only for nodes that allow ignoring SSL issues ([#6928](https://github.com/n8n-io/n8n/issues/6928)) ([a01c3fb](https://github.com/n8n-io/n8n/commit/a01c3fbc19d66cf8b1dac3e34e0999dd36d81e7c)) +* **Date & Time Node:** Dont parse date if it's not set (null or undefined) ([#7050](https://github.com/n8n-io/n8n/issues/7050)) ([d72f79f](https://github.com/n8n-io/n8n/commit/d72f79ffb393a096f510f0c41bb66d987fe8cb0d)) +* **editor:** Fix sending of Ask AI tracking events ([#7002](https://github.com/n8n-io/n8n/issues/7002)) ([fb05afa](https://github.com/n8n-io/n8n/commit/fb05afa16560c3c837abf46824f8dc7fa3bb1c83)) +* **Microsoft Excel 365 Node:** Support for more extensions in workbook rlc ([#7020](https://github.com/n8n-io/n8n/issues/7020)) ([d6e1cf2](https://github.com/n8n-io/n8n/commit/d6e1cf232f86ddc69cceb69c8971c3373dab454c)) +* **MongoDB Node:** Stringify response ObjectIDs ([#6990](https://github.com/n8n-io/n8n/issues/6990)) ([9ca990b](https://github.com/n8n-io/n8n/commit/9ca990b9936ee80972952d0a1ad73c2926809ba2)) +* **MongoDB Node:** Upgrade mongodb package to address CVE-2021-32050 ([#7054](https://github.com/n8n-io/n8n/issues/7054)) ([d3f6356](https://github.com/n8n-io/n8n/commit/d3f635657c7514296fd0a473ba13672db2717490)) +* **Postgres Node:** Empty return data fix for Postgres and MySQL ([#7016](https://github.com/n8n-io/n8n/issues/7016)) ([176ccd6](https://github.com/n8n-io/n8n/commit/176ccd62bc1d6f28958c0fc894ee647f1e3a5f6e)) +* **Webhook Node:** Fix URL params for webhooks ([#6986](https://github.com/n8n-io/n8n/issues/6986)) ([596b569](https://github.com/n8n-io/n8n/commit/596b5695cdcca33da02bec428d58de8b2a13297e)) + + +### Features + +* **core:** Add filtering, selection and pagination to users ([#6994](https://github.com/n8n-io/n8n/issues/6994)) ([b716241](https://github.com/n8n-io/n8n/commit/b716241b428ef09cf6bdf32cb3a8680e9ba8f25f)) +* **core:** Add MFA ([#4767](https://github.com/n8n-io/n8n/issues/4767)) ([2b7ba6f](https://github.com/n8n-io/n8n/commit/2b7ba6fdf100ef78b60358648d773e2f200847b8)) +* **editor:** Debug executions in the editor ([#6834](https://github.com/n8n-io/n8n/issues/6834)) ([c833078](https://github.com/n8n-io/n8n/commit/c833078c87adeadb1e701f17d3f380c669eb1460)) +* External Secrets storage for credentials ([#6477](https://github.com/n8n-io/n8n/issues/6477)) ([ed927d3](https://github.com/n8n-io/n8n/commit/ed927d34b25b4ddd7048b622c141e32a8a57b6b7)) +* **RSS Read Node:** Add support for self signed certificates ([#7039](https://github.com/n8n-io/n8n/issues/7039)) ([3b9f0fe](https://github.com/n8n-io/n8n/commit/3b9f0fed7af2d3a234049ab7d50d883ee4608007)) + + + +# [1.4.0](https://github.com/n8n-io/n8n/compare/n8n@1.3.0...n8n@1.4.0) (2023-08-23) + + +### Bug Fixes + +* **core:** Add recoveryInProgress flag file ([#6962](https://github.com/n8n-io/n8n/issues/6962)) ([7b96820](https://github.com/n8n-io/n8n/commit/7b96820218449958180d4c34bebdc4c4de9172e1)) +* **core:** Fix `continueOnFail` for expression error in Set ([#6939](https://github.com/n8n-io/n8n/issues/6939)) ([d4fac05](https://github.com/n8n-io/n8n/commit/d4fac0527b7a34aace9ea0ff89dde152026d6c17)) +* **core:** Fix `import:workflow` command ([#6996](https://github.com/n8n-io/n8n/issues/6996)) ([8c38d85](https://github.com/n8n-io/n8n/commit/8c38d85e765114df03afb5e221b3d4ae4e6c0fc7)) +* **core:** Replace throw with warning when deactivating a non-active workflow ([#6969](https://github.com/n8n-io/n8n/issues/6969)) ([b6a00fe](https://github.com/n8n-io/n8n/commit/b6a00febbdd62560fa68321fbcd6e44c92a82ddd)) +* **core:** Set up OAuth2 cred test ([#6960](https://github.com/n8n-io/n8n/issues/6960)) ([4fc69b7](https://github.com/n8n-io/n8n/commit/4fc69b776ccea91c2a38249dc4f4ef0b191ce374)) +* **editor:** Do not flag dynamic load options issue on expression ([#6932](https://github.com/n8n-io/n8n/issues/6932)) ([60a1ef0](https://github.com/n8n-io/n8n/commit/60a1ef09934608afbe171bf3cf18ca5e95987153)) +* **editor:** Ensure community node install button tracks user agreement ([#6976](https://github.com/n8n-io/n8n/issues/6976)) ([0ddfc73](https://github.com/n8n-io/n8n/commit/0ddfc73bee88c994876787a41540ef847f4fcd4f)) +* **editor:** Fix parsing for single quoted resolvables ([#6982](https://github.com/n8n-io/n8n/issues/6982)) ([f32e993](https://github.com/n8n-io/n8n/commit/f32e9932275bb51a724c6ae681ed9ca0683a8e8e)) +* **editor:** Fix Remove all fields not removing values in resource mapper ([#6940](https://github.com/n8n-io/n8n/issues/6940)) ([e6cff3f](https://github.com/n8n-io/n8n/commit/e6cff3fce4de1644b75b07318fe561f721aee51c)) +* **editor:** Prevent Code node linter from erroring on `null` parse ([#6934](https://github.com/n8n-io/n8n/issues/6934)) ([40d3a29](https://github.com/n8n-io/n8n/commit/40d3a295d3c5ddcf5c034c02b3584532c395a12c)) +* **Google Sheets Node:** Fix short sheet name interpreted as range ([#6989](https://github.com/n8n-io/n8n/issues/6989)) ([00268a0](https://github.com/n8n-io/n8n/commit/00268a019a1b09ba49971504bb38cd81a281236e)) +* **Google Sheets Trigger Node:** Support sheet names with non-latin characters ([#6970](https://github.com/n8n-io/n8n/issues/6970)) ([052dd7c](https://github.com/n8n-io/n8n/commit/052dd7cc9d10b2365b38001c6e091bd52bf45873)) +* **GraphQL Node:** Improve error handling ([#6955](https://github.com/n8n-io/n8n/issues/6955)) ([41db637](https://github.com/n8n-io/n8n/commit/41db6371f0d7a736bf7e1c13e2a3acd678bec246)) +* **Mautic Node:** Fix issue with owner not being set correctly ([#6991](https://github.com/n8n-io/n8n/issues/6991)) ([64b950f](https://github.com/n8n-io/n8n/commit/64b950f2944f8fe352e6832f4059047d14ba9485)) +* **Salesforce Node:** Fix Account update owner operation ([#6958](https://github.com/n8n-io/n8n/issues/6958)) ([9b27878](https://github.com/n8n-io/n8n/commit/9b27878d8fe8755d76d09db07be01bcab83b8772)) +* **Shopify Node:** Fix pagination when using options ([#6972](https://github.com/n8n-io/n8n/issues/6972)) ([475d9c9](https://github.com/n8n-io/n8n/commit/475d9c98e8281e62e3566671bb6ddb1d028b543f)) +* **Webhook Node:** Backward compatible form-data parsing for non-array fields ([#6967](https://github.com/n8n-io/n8n/issues/6967)) ([9455bcf](https://github.com/n8n-io/n8n/commit/9455bcfef5383ee351b620f12a0f5fba2447a839)) + + +### Features + +* **core:** Add a warning to error workflows that cannot be started due to permission or settings ([#6961](https://github.com/n8n-io/n8n/issues/6961)) ([67b88f7](https://github.com/n8n-io/n8n/commit/67b88f75f424011e3e49ebe3a37e36871a2253ae)) +* **core:** Add support for ready hooks, and credentials overwrite endpoint in workers ([#6954](https://github.com/n8n-io/n8n/issues/6954)) ([8f8a1de](https://github.com/n8n-io/n8n/commit/8f8a1de3dd478e2e7b33b4b8a64bb0e3b7cda1f3)) +* **editor:** Show banner for non-production licenses ([#6943](https://github.com/n8n-io/n8n/issues/6943)) ([413570c](https://github.com/n8n-io/n8n/commit/413570c49dc800cfed0581b8ae1798aa0b4bbd50)) +* Remove PostHog event calls ([#6915](https://github.com/n8n-io/n8n/issues/6915)) ([270946a](https://github.com/n8n-io/n8n/commit/270946a93bc61ae3953a3dd9b2835e458565e12c)) +* **Send Email Node:** Add support for sending text and html email simultaneously ([#6978](https://github.com/n8n-io/n8n/issues/6978)) ([3860d41](https://github.com/n8n-io/n8n/commit/3860d41d737d56a616e3a8c61a90d3ec956b89cd)) + + + +# [1.3.0](https://github.com/n8n-io/n8n/compare/n8n@1.2.0...n8n@1.3.0) (2023-08-16) + + +### Bug Fixes + +* **core:** Don't let bull override the default redis config ([#6897](https://github.com/n8n-io/n8n/issues/6897)) ([cfeb322](https://github.com/n8n-io/n8n/commit/cfeb322b3b19405e2788e3ca3325fd491d5ebd28)) +* **core:** Fix fetching of EE executions ([#6901](https://github.com/n8n-io/n8n/issues/6901)) ([f3fce48](https://github.com/n8n-io/n8n/commit/f3fce48155d4a1ed262efce16cbe537b19aa6963)) +* **core:** Update frontend urls when using the `--tunnel` option ([#6898](https://github.com/n8n-io/n8n/issues/6898)) ([718e613](https://github.com/n8n-io/n8n/commit/718e61354dc62e6aa1af69050eea52de6aa3c350)) +* **editor:** Disable telemetry in dev mode and in E2E tests ([#6869](https://github.com/n8n-io/n8n/issues/6869)) ([808a928](https://github.com/n8n-io/n8n/commit/808a92809e4d389d902249646d5dc146de1d4e98)) +* **editor:** Fix code node’s content property to be reactive ([#6931](https://github.com/n8n-io/n8n/issues/6931)) ([3b75bc6](https://github.com/n8n-io/n8n/commit/3b75bc6bc1c954c4d4a899edddda214f0a2245fb)) +* **editor:** Fix event emit on credential sharing ([#6922](https://github.com/n8n-io/n8n/issues/6922)) ([297c3c9](https://github.com/n8n-io/n8n/commit/297c3c91f23a47b1aa78323d2b6e5677fbab8402)) +* **editor:** Fix multiOptions parameters resetting on initial load ([#6903](https://github.com/n8n-io/n8n/issues/6903)) ([49867c2](https://github.com/n8n-io/n8n/commit/49867c2b176a5e76c4b9e7caafc29a44633332bf)) +* **editor:** Update execution view layout ([#6882](https://github.com/n8n-io/n8n/issues/6882)) ([0339732](https://github.com/n8n-io/n8n/commit/03397323784809eb64c30b2ee535e8516ab06fbf)) +* **Email Trigger (IMAP) Node:** Fix connection issue with unexpected spaces in host ([#6886](https://github.com/n8n-io/n8n/issues/6886)) ([f3248e4](https://github.com/n8n-io/n8n/commit/f3248e46e478e5ac061c3d69da988b0db8acf553)) +* Fix issue with key formatting if null or undefined ([#6924](https://github.com/n8n-io/n8n/issues/6924)) ([4e4a3cf](https://github.com/n8n-io/n8n/commit/4e4a3cf7ab8dee45cc15e8948f8628c5915cc841)) +* Fix issue with key formatting introduced in 1.2.0 ([#6896](https://github.com/n8n-io/n8n/issues/6896)) ([0e075c9](https://github.com/n8n-io/n8n/commit/0e075c9cb540d78209aaa3c8240259f074c31846)) +* Fix lag when node parameters are updated ([#6941](https://github.com/n8n-io/n8n/issues/6941)) ([3eb65e0](https://github.com/n8n-io/n8n/commit/3eb65e08c4f22334aeae172504991a688273528e)) +* **HTTP Request Node:** Improve error handling for TCP socket errors when `Continue On Fail` is enabled ([#6925](https://github.com/n8n-io/n8n/issues/6925)) ([96ff1f8](https://github.com/n8n-io/n8n/commit/96ff1f847d2672ecf6604dde6c3b5c594c3b1e2f)) +* Prevent workflow breaking when credential type is unknown ([#6923](https://github.com/n8n-io/n8n/issues/6923)) ([e83b93f](https://github.com/n8n-io/n8n/commit/e83b93f293ab8df37f896cc315afab50a477bbef)) +* **Respond to Webhook Node:** Return headers in response ([#6921](https://github.com/n8n-io/n8n/issues/6921)) ([a82107f](https://github.com/n8n-io/n8n/commit/a82107fb05120f7365086032c9b05ea316716327)) + + +### Features + +* **core:** Add support for not requiring SMTP auth with user management ([#3742](https://github.com/n8n-io/n8n/issues/3742)) ([eead6d4](https://github.com/n8n-io/n8n/commit/eead6d49f238f41714911d1488b75515472c34a0)) +* **core:** Descriptive message for common nodeJS errors ([#6841](https://github.com/n8n-io/n8n/issues/6841)) ([3adb0b6](https://github.com/n8n-io/n8n/commit/3adb0b66ea2c1e929850345bc31e5b0a708eabd0)) +* **editor:** Ask AI in Code node ([#6672](https://github.com/n8n-io/n8n/issues/6672)) ([fde6ad1](https://github.com/n8n-io/n8n/commit/fde6ad1e7fa6236c6c1ac1e3ff6d8e959012543a)) +* Enable parallel processing on multiple queue nodes ([#6295](https://github.com/n8n-io/n8n/issues/6295)) ([44afcff](https://github.com/n8n-io/n8n/commit/44afcff95916cd00df66391e54440d3f96788913)) + + + +# [1.2.0](https://github.com/n8n-io/n8n/compare/n8n@1.1.0...n8n@1.2.0) (2023-08-09) + + +### Bug Fixes + +* Auth.api user limit test expecting incorrect status ([#6836](https://github.com/n8n-io/n8n/issues/6836)) ([371bfa0](https://github.com/n8n-io/n8n/commit/371bfa0f488f0a240bd1a8854759d6f6639e6eea)) +* **Code Node:** Consistent redirection of stdout for JS and Python sandboxes ([#6818](https://github.com/n8n-io/n8n/issues/6818)) ([f718c22](https://github.com/n8n-io/n8n/commit/f718c2291f0385bfb60ea70e7b7a943a4c6b5149)) +* **core:** Add missing primary key on the `execution_data` table on postgres ([#6797](https://github.com/n8n-io/n8n/issues/6797)) ([dc295ac](https://github.com/n8n-io/n8n/commit/dc295ac5bfe8a62ce208656a8b25a89376af276a)) +* **core:** Add sharing data to workflows in EE executions ([#6872](https://github.com/n8n-io/n8n/issues/6872)) ([6796d9e](https://github.com/n8n-io/n8n/commit/6796d9e5d676a7e76206462ef18640c246f0dc5a)) +* **core:** Allow ignoring SSL issues on generic oauth2 credentials ([#6702](https://github.com/n8n-io/n8n/issues/6702)) ([feac369](https://github.com/n8n-io/n8n/commit/feac369f6c5590f30e63bed6d5569a57710a8d2e)) +* **core:** Change VariablesService to DI and use caching ([#6827](https://github.com/n8n-io/n8n/issues/6827)) ([659ca26](https://github.com/n8n-io/n8n/commit/659ca26fe7cf7d1b9403f6c20b63b598f7dfa7b5)) +* **core:** Fix loading of scoped-community packages ([#6807](https://github.com/n8n-io/n8n/issues/6807)) ([53e58b4](https://github.com/n8n-io/n8n/commit/53e58b408a8ef6a0f911593180d818ccee92cc1d)) +* **core:** Fix property existence checks on AugmentObject ([#6842](https://github.com/n8n-io/n8n/issues/6842)) ([732416f](https://github.com/n8n-io/n8n/commit/732416f52f49eeb542401439e5b96b4b1a083c05)) +* **core:** Fix source control name and email being switched ([#6839](https://github.com/n8n-io/n8n/issues/6839)) ([6ec7033](https://github.com/n8n-io/n8n/commit/6ec7033bb711648c8c2d93f4f2b15b3b6dfdcaea)) +* **core:** Fix WebSocket close codes ([a8bfb46](https://github.com/n8n-io/n8n/commit/a8bfb4618323731de8bc9bc265b3bbb9de69c50c)) +* **core:** Log crash causes to console when sentry is disabled ([#6890](https://github.com/n8n-io/n8n/issues/6890)) ([6553d92](https://github.com/n8n-io/n8n/commit/6553d92c7c128b117b6bdbd33182002f6cf24fa1)) +* **core:** OAuth1 authentication fix for Clever Cloud API ([#6847](https://github.com/n8n-io/n8n/issues/6847)) ([5ab30fd](https://github.com/n8n-io/n8n/commit/5ab30fdd95c766e57f8c2cf7c7a9951bbf3d7c2d)) +* **core:** Restrict read/write file paths access ([#6582](https://github.com/n8n-io/n8n/issues/6582)) ([f6bf9e9](https://github.com/n8n-io/n8n/commit/f6bf9e9887bb46bb884fd06f3e789f8585445501)) +* **core:** Serialize BigInts ([#6805](https://github.com/n8n-io/n8n/issues/6805)) ([7b27fa5](https://github.com/n8n-io/n8n/commit/7b27fa5898cd3c8c9882cbec0c36ff703510b57d)) +* **core:** Update packages to address CVE-2023-2142 and CVE-2020-28469 ([#6844](https://github.com/n8n-io/n8n/issues/6844)) ([a5667e6](https://github.com/n8n-io/n8n/commit/a5667e6c42fae96a48e39464cbcec808d36bb5ee)) +* Correct typos in Taiga and ServiceNow nodes ([#6814](https://github.com/n8n-io/n8n/issues/6814)) ([803b152](https://github.com/n8n-io/n8n/commit/803b1521facb7908c34fbb729d15aaaf5680e471)) +* Display source control buttons properly ([#6756](https://github.com/n8n-io/n8n/issues/6756)) ([d050b99](https://github.com/n8n-io/n8n/commit/d050b99fb218ae31dfd0ec7dea88884e14021495)) +* **editor:** Close tags dropdown when modal is opened ([#6766](https://github.com/n8n-io/n8n/issues/6766)) ([cf00ba7](https://github.com/n8n-io/n8n/commit/cf00ba708941bebceda8278a359b0badaa111f2c)), closes [#6571](https://github.com/n8n-io/n8n/issues/6571) +* **editor:** Do not show mapping discoverability tooltip after dismiss ([#6862](https://github.com/n8n-io/n8n/issues/6862)) ([08982ed](https://github.com/n8n-io/n8n/commit/08982ede4c3dd2b38b1a0ce91adf8198f0af1776)) +* **editor:** Fix code node highlight error ([#6791](https://github.com/n8n-io/n8n/issues/6791)) ([50b0dc2](https://github.com/n8n-io/n8n/commit/50b0dc21fd0a698f87538e5458274ed50ab6774e)) +* **editor:** Fix collapsed sub menu elements ([#6778](https://github.com/n8n-io/n8n/issues/6778)) ([d33528d](https://github.com/n8n-io/n8n/commit/d33528dab399bc01461ab5e3af1fbb75e5d89d91)) +* **editor:** Fix credential errors in executions view for workflow sharee ([#6875](https://github.com/n8n-io/n8n/issues/6875)) ([a0f9b2e](https://github.com/n8n-io/n8n/commit/a0f9b2eefe6050264b0c892c6e79e2140ab05825)) +* **editor:** Fix redo when adding node on connection ([#6833](https://github.com/n8n-io/n8n/issues/6833)) ([4ac4b85](https://github.com/n8n-io/n8n/commit/4ac4b850dd7187e4e4ef50bbe442ebf273e51eb9)) +* **editor:** Fix tooltip opening delay prop name ([#6776](https://github.com/n8n-io/n8n/issues/6776)) ([e19b0d7](https://github.com/n8n-io/n8n/commit/e19b0d7748765570903831d5e676e6c4deba2fef)) +* **editor:** Fix value syncing in SQL and HTML editor ([#6848](https://github.com/n8n-io/n8n/issues/6848)) ([90e825f](https://github.com/n8n-io/n8n/commit/90e825f74368588073b1403b0681a89704eced06)) +* **editor:** Improve displaying and hiding of connections actions ([#6823](https://github.com/n8n-io/n8n/issues/6823)) ([369a2e9](https://github.com/n8n-io/n8n/commit/369a2e97968c6d40d827d8e780a8d3f1fd2188f7)) +* **editor:** Prevent text edit dialog from re-opening in same tick ([#6781](https://github.com/n8n-io/n8n/issues/6781)) ([c9f3acc](https://github.com/n8n-io/n8n/commit/c9f3acc8485edd0adbde4a633318a01b018d6fc0)) +* **editor:** Remove additional margin on tooltip ([#6802](https://github.com/n8n-io/n8n/issues/6802)) ([651cf34](https://github.com/n8n-io/n8n/commit/651cf34da60fb3842132905adfee3cd5e1395c75)) +* **editor:** Resolve vue 3 related console-warnings ([#6779](https://github.com/n8n-io/n8n/issues/6779)) ([30484a0](https://github.com/n8n-io/n8n/commit/30484a0615c90525fa0604b8b0df16159f18a6d4)) +* **editor:** Vue3 - Fix modal positioning and multi-select tag sizing ([#6783](https://github.com/n8n-io/n8n/issues/6783)) ([4e491b7](https://github.com/n8n-io/n8n/commit/4e491b754fe74ebdffdc292f4358ee98ad99e01d)) +* **Email Trigger (IMAP) Node:** UTF-8 attachments are not correctly named ([#6856](https://github.com/n8n-io/n8n/issues/6856)) ([72814d1](https://github.com/n8n-io/n8n/commit/72814d1f0fb5dfce19a89397a6a1cd5829563222)) +* Fix all modal sizes ([#6820](https://github.com/n8n-io/n8n/issues/6820)) ([7525cfe](https://github.com/n8n-io/n8n/commit/7525cfe2dcd03e5050ffb32e8fef64132788d62e)) +* Fix horizontal overflow for dialogs ([#6830](https://github.com/n8n-io/n8n/issues/6830)) ([41d8a18](https://github.com/n8n-io/n8n/commit/41d8a18d47dfeb0119034efe0e5779a9bfb0edce)) +* Fix issue with key based credentials not being read correctly ([#6824](https://github.com/n8n-io/n8n/issues/6824)) ([db21a8d](https://github.com/n8n-io/n8n/commit/db21a8db75833c86ab3d662c6c864f9f5e47c436)) +* Fix tags overflow handler in workflows header ([#6784](https://github.com/n8n-io/n8n/issues/6784)) ([7cd4588](https://github.com/n8n-io/n8n/commit/7cd45885bf13479948a4c5bb441d24b3c042a624)) +* **GoToWebinar Node:** Fix issue with timezone incorrectly being required ([#6865](https://github.com/n8n-io/n8n/issues/6865)) ([905eef8](https://github.com/n8n-io/n8n/commit/905eef85594bb10f27c7c97f24ac7f9fcedcc5cf)) +* Handle subtitle errors when pasting workflow ([#6826](https://github.com/n8n-io/n8n/issues/6826)) ([31a4cfc](https://github.com/n8n-io/n8n/commit/31a4cfc9698666bb69b2fd54d7af3644a31b69c2)) +* **Lemlist Node:** Fix pagination issues with campaigns and activities ([#6734](https://github.com/n8n-io/n8n/issues/6734)) ([c3e76ec](https://github.com/n8n-io/n8n/commit/c3e76ec697991f4a184e51cb7753a5c89064f7f9)) +* **Linear Node:** Fix issue creation priority ([#6813](https://github.com/n8n-io/n8n/issues/6813)) ([fce8cc4](https://github.com/n8n-io/n8n/commit/fce8cc427579c9098359b9d1ecc420650299b229)) +* **Postgres Trigger Node:** Imposible to cancell execution manually ([#6709](https://github.com/n8n-io/n8n/issues/6709)) ([491378d](https://github.com/n8n-io/n8n/commit/491378de772670b640be23e3b9bc7eadad6d3ebe)) +* Remove tag animation ([#6821](https://github.com/n8n-io/n8n/issues/6821)) ([52aafe0](https://github.com/n8n-io/n8n/commit/52aafe07372dd3dd46ddc8e4ad14de08f02fb4e8)) +* Respect set modal widths ([#6771](https://github.com/n8n-io/n8n/issues/6771)) ([3aaf1ac](https://github.com/n8n-io/n8n/commit/3aaf1ac0fd9cb7db6e074c1dca421de066c0793b)), closes [#6571](https://github.com/n8n-io/n8n/issues/6571) +* Show NodeIcon tooltips by removing pointer-events: none ([#6777](https://github.com/n8n-io/n8n/issues/6777)) ([eb898f7](https://github.com/n8n-io/n8n/commit/eb898f744f7c3df92635409a136809473b4de0c1)) +* **TheHive Node:** Treat `ApiKey` as a secret ([#6786](https://github.com/n8n-io/n8n/issues/6786)) ([11a3965](https://github.com/n8n-io/n8n/commit/11a3965ba89e75daaccf39596272eef70f1fc316)) +* **Todoist Node:** Fix issue with section id being ignored ([#6799](https://github.com/n8n-io/n8n/issues/6799)) ([749468e](https://github.com/n8n-io/n8n/commit/749468e4fa3d823785a01e79b02f4897bc40c943)) + + +### Features + +* Clean up onboarding experiment ([#6873](https://github.com/n8n-io/n8n/issues/6873)) ([3619345](https://github.com/n8n-io/n8n/commit/36193451692b878cea703e3a743d9ac8f3ba5086)) +* **core:** Add metrics option to cache ([#6846](https://github.com/n8n-io/n8n/issues/6846)) ([adcf5a9](https://github.com/n8n-io/n8n/commit/adcf5a96e83d8b43b155f5a834a74b3a1fd4274b)) +* **core:** Add unique id to instances ([#6863](https://github.com/n8n-io/n8n/issues/6863)) ([6499f42](https://github.com/n8n-io/n8n/commit/6499f424811188fa4785db9d86b1299e4fb39540)) +* **core:** Create a dsl for writing db agnostic migrations ([#6853](https://github.com/n8n-io/n8n/issues/6853)) ([75be1a9](https://github.com/n8n-io/n8n/commit/75be1a9c0d223a5d866551e836d7ab1b952d03ca)) +* **core:** Credentials for popular SecOps services, Part 1 ([#6775](https://github.com/n8n-io/n8n/issues/6775)) ([11567f9](https://github.com/n8n-io/n8n/commit/11567f946be411f081b2ba25c2ac60d5dcf56835)) +* **core:** Make Redis available for backend communication ([#6719](https://github.com/n8n-io/n8n/issues/6719)) ([3cad60e](https://github.com/n8n-io/n8n/commit/3cad60e9184de7ad73893062964366a09d4487df)) +* **editor:** Add "Download" button if JSON data is to large ([#6850](https://github.com/n8n-io/n8n/issues/6850)) ([efe08cc](https://github.com/n8n-io/n8n/commit/efe08cced3979e40bbf011301f51f9f2f69117de)) +* **editor:** Migrate Design System and Editor UI to Vue 3 ([#6476](https://github.com/n8n-io/n8n/issues/6476)) ([dd6a4c9](https://github.com/n8n-io/n8n/commit/dd6a4c956adb997b59ee0174eedd9b8f6265ec6b)), closes [#6571](https://github.com/n8n-io/n8n/issues/6571) +* **Facebook Graph API Node:** Add support for v16 and v17 ([#6808](https://github.com/n8n-io/n8n/issues/6808)) ([46a41c1](https://github.com/n8n-io/n8n/commit/46a41c1c91c7ebadd72fb51b6f749a542a7393fc)) +* **Pipedrive Node:** Add option to update the file name and description ([#6883](https://github.com/n8n-io/n8n/issues/6883)) ([f8ad543](https://github.com/n8n-io/n8n/commit/f8ad543af5c5d680d23d5dab861a6b3fe47b4ccc)) + + +### Performance Improvements + +* **core:** Add filtering and pagination to `GET /workflows` ([#6845](https://github.com/n8n-io/n8n/issues/6845)) ([dceff67](https://github.com/n8n-io/n8n/commit/dceff675ecd1d9f72ca2614c42da2bfaa758f305)), closes [#6876](https://github.com/n8n-io/n8n/issues/6876) +* **core:** Cache roles ([#6803](https://github.com/n8n-io/n8n/issues/6803)) ([e4f0418](https://github.com/n8n-io/n8n/commit/e4f041815a9a919add9ad616e17ed31d4b645c2c)) +* **core:** Cache webhooks ([#6825](https://github.com/n8n-io/n8n/issues/6825)) ([0511458](https://github.com/n8n-io/n8n/commit/0511458d41c65f81edc17b5ff58a0be911a7629d)) +* **editor:** Memoize locale translate calls during actions generation ([#6773](https://github.com/n8n-io/n8n/issues/6773)) ([2d47e8d](https://github.com/n8n-io/n8n/commit/2d47e8dc4ad2ec75d25cd5e67ab89f29766e0a7f)) + + + +# [1.1.0](https://github.com/n8n-io/n8n/compare/n8n@1.0.1...n8n@1.1.0) (2023-07-26) + + +### Bug Fixes + +* Add missing indices on sqlite ([#6673](https://github.com/n8n-io/n8n/issues/6673)) ([b1838f7](https://github.com/n8n-io/n8n/commit/b1838f7fab3e6d2983fa4d2ba1a480c79f8fe2c5)) +* **API:** Do not add starting node on workflow creation ([#6686](https://github.com/n8n-io/n8n/issues/6686)) ([92192fb](https://github.com/n8n-io/n8n/commit/92192fbd6108a71fca591e5284269239d4347621)) +* **API:** Fix issue with workflow setting not supporting newer nanoids ([#6699](https://github.com/n8n-io/n8n/issues/6699)) ([c7e1013](https://github.com/n8n-io/n8n/commit/c7e10130d694347982f50bc0ad1024101e27beea)) +* **AwsS3 Node:** Fix issue if bucket name contains a '.' ([#6542](https://github.com/n8n-io/n8n/issues/6542)) ([540d32d](https://github.com/n8n-io/n8n/commit/540d32dee4b8927199e047c77acf516d5b824bc3)) +* **Brevo Node:** Rename SendInBlue node to Brevo node ([#6521](https://github.com/n8n-io/n8n/issues/6521)) ([e63b398](https://github.com/n8n-io/n8n/commit/e63b3982d200ade34461b9159eb1e988f494c025)) +* **Code Node:** Install python modules always in a user-writable folder ([#6568](https://github.com/n8n-io/n8n/issues/6568)) ([bf35124](https://github.com/n8n-io/n8n/commit/bf351243dfa69095699596e8828904fda025d45c)) +* **core:** Add empty credential value marker to show empty pw field ([#6532](https://github.com/n8n-io/n8n/issues/6532)) ([9294e2d](https://github.com/n8n-io/n8n/commit/9294e2da3c7c99c2099f5865e610fa7217bf06be)) +* **core:** Deleting manual executions should defer deleting binary data ([#6680](https://github.com/n8n-io/n8n/issues/6680)) ([462a674](https://github.com/n8n-io/n8n/commit/462a674d1759dc5ae9849daa48cc8c4130dd030e)) +* **core:** Filter out workflows that failed to activate on startup ([#6676](https://github.com/n8n-io/n8n/issues/6676)) ([667c15d](https://github.com/n8n-io/n8n/commit/667c15d0dfbdab0c29114d5002eed75031c79b42)) +* **core:** Fix credentials test ([#6569](https://github.com/n8n-io/n8n/issues/6569)) ([1abd172](https://github.com/n8n-io/n8n/commit/1abd172f73e171e37c4cc3ccfaa395c6a46bdf48)) +* **core:** Fix migrations for MySQL/MariaDB ([#6591](https://github.com/n8n-io/n8n/issues/6591)) ([29882a6](https://github.com/n8n-io/n8n/commit/29882a6f39dddcd1c8c107c20a548ce8dc665cba)) +* **core:** Handle all uncaught exception, not just the ones from Axios ([#6666](https://github.com/n8n-io/n8n/issues/6666)) ([ff07595](https://github.com/n8n-io/n8n/commit/ff0759530df3780e8eb53a29ec4ab4e98e5755c6)) +* **core:** Improve the performance of last 2 sqlite migrations ([#6522](https://github.com/n8n-io/n8n/issues/6522)) ([31cba87](https://github.com/n8n-io/n8n/commit/31cba87d307183d613890c7e6d627636b5280b52)) +* **core:** Load SAML libraries dynamically ([#6690](https://github.com/n8n-io/n8n/issues/6690)) ([fce5609](https://github.com/n8n-io/n8n/commit/fce5609fa32b81ff8e44567233c77a7a1d6232df)) +* **core:** Redirect user to previous url after SSO signin ([#6710](https://github.com/n8n-io/n8n/issues/6710)) ([08331c6](https://github.com/n8n-io/n8n/commit/08331c63fbc0d69d2203f14165b15e1a596788b0)) +* **core:** Reduce memory consumption on `BinaryDataManager.init` ([#6633](https://github.com/n8n-io/n8n/issues/6633)) ([329d22f](https://github.com/n8n-io/n8n/commit/329d22f5d1f484d899df885a871f0f32839f0098)) +* **core:** Remove typeorm patches, but still enforce transactions on every migration ([#6594](https://github.com/n8n-io/n8n/issues/6594)) ([9def7a7](https://github.com/n8n-io/n8n/commit/9def7a729b52cd6b4698c47e190e9e2bd7894da5)), closes [#6519](https://github.com/n8n-io/n8n/issues/6519) +* **core:** Rename to credential_stubs and variable_stubs.json ([#6528](https://github.com/n8n-io/n8n/issues/6528)) ([b06462f](https://github.com/n8n-io/n8n/commit/b06462f4415bd1143a00b4a66e6e626da8c52196)) +* **core:** Support redis cluster in queue mode ([#6708](https://github.com/n8n-io/n8n/issues/6708)) ([4029386](https://github.com/n8n-io/n8n/commit/40293863492d73865f805870937e46f3d0bdaa56)) +* **core:** Update docker compose setup for V1 images ([#6642](https://github.com/n8n-io/n8n/issues/6642)) ([05007d8](https://github.com/n8n-io/n8n/commit/05007d894e1bfa3550cfd865f85c2844b3db6eea)) +* **core:** Upgrade semver to address CVE-2022-25883 ([#6689](https://github.com/n8n-io/n8n/issues/6689)) ([9daf944](https://github.com/n8n-io/n8n/commit/9daf944ba53937ddd41bd640a6d473d235f0e16f)) +* **core:** Use `exec` in docker images to forward signals correctly ([#6732](https://github.com/n8n-io/n8n/issues/6732)) ([ed9f86b](https://github.com/n8n-io/n8n/commit/ed9f86bb95f7080335a336c866cd477669b02002)) +* **core:** Use JWT as reset password token ([#6714](https://github.com/n8n-io/n8n/issues/6714)) ([89f4402](https://github.com/n8n-io/n8n/commit/89f44021b919181ad58c555a31071c286b866975)) +* **core:** Use lower cased email for SAML email attribute ([#6663](https://github.com/n8n-io/n8n/issues/6663)) ([eedde24](https://github.com/n8n-io/n8n/commit/eedde24cc046ea517c6d6e455bcdd46a97e4c05b)) +* **core:** Use owners file to export wf owners ([#6547](https://github.com/n8n-io/n8n/issues/6547)) ([4b755fb](https://github.com/n8n-io/n8n/commit/4b755fb0b441a37eb804c9e70d4b071a341f7155)) +* **crowd.dev Node:** Fix documentation urls for crowd.dev credentials and nodes ([#6696](https://github.com/n8n-io/n8n/issues/6696)) ([acda7f2](https://github.com/n8n-io/n8n/commit/acda7f269f7b227d430e2308767e1676fda8e165)) +* **editor:** Add default author name and email to source control settings ([#6543](https://github.com/n8n-io/n8n/issues/6543)) ([e1a02c7](https://github.com/n8n-io/n8n/commit/e1a02c76257de30e08878279dea33d7854d46938)) +* **editor:** Add paywall state to non owner users for Variables ([#6679](https://github.com/n8n-io/n8n/issues/6679)) ([e7091d6](https://github.com/n8n-io/n8n/commit/e7091d6726eb98a194bc2614c0da332d348180dc)) +* **editor:** Change default branchColor and remove label ([#6541](https://github.com/n8n-io/n8n/issues/6541)) ([186271e](https://github.com/n8n-io/n8n/commit/186271e939bca19ec9c94d9455e9430d8b8cf9d7)) +* **editor:** Ensure default credential values are not detected as dirty state ([#6677](https://github.com/n8n-io/n8n/issues/6677)) ([c7b74c3](https://github.com/n8n-io/n8n/commit/c7b74c3c1fdd2f11b8650adf79052681c2f1e248)) +* **editor:** Extend menu item and use it as a recursive component ([#6618](https://github.com/n8n-io/n8n/issues/6618)) ([d617f63](https://github.com/n8n-io/n8n/commit/d617f63ae9155c03dbf5e597db8e102c1f7a025f)) +* **editor:** Hide Execute Node button for unknown nodes ([#6684](https://github.com/n8n-io/n8n/issues/6684)) ([6887b4e](https://github.com/n8n-io/n8n/commit/6887b4edeae6536f5b670c55637fde1c5dbd6e40)) +* **editor:** Increase contrast ratio in execution list workflow names ([#6661](https://github.com/n8n-io/n8n/issues/6661)) ([c0b1cb2](https://github.com/n8n-io/n8n/commit/c0b1cb273e56c04abff5d9893a5e37cda6eb3383)) +* **editor:** Make Source control branch select required ([#6619](https://github.com/n8n-io/n8n/issues/6619)) ([20737b5](https://github.com/n8n-io/n8n/commit/20737b532423c964bd70e0aa2aac2c9533b5c3d4)) +* **editor:** Prevent keyboard shortcuts to edit workflows in readonly mode ([#6613](https://github.com/n8n-io/n8n/issues/6613)) ([7383e7f](https://github.com/n8n-io/n8n/commit/7383e7fd48b5c86d43fab4fa47cb1e7a4a4b4043)) +* **editor:** Prevent RMC from loading schema if it's already cached ([#6695](https://github.com/n8n-io/n8n/issues/6695)) ([a79aa19](https://github.com/n8n-io/n8n/commit/a79aa198330808b7e45b217748fffdabb68098e2)) +* **editor:** Remove global link styling in v1 banner ([#6705](https://github.com/n8n-io/n8n/issues/6705)) ([76a765a](https://github.com/n8n-io/n8n/commit/76a765a1517f53cb0c4f16a57bdd6f55bc3be0bd)) +* **editor:** Show appropriate empty workflow list content when instance environment is readonly ([#6610](https://github.com/n8n-io/n8n/issues/6610)) ([7515f7d](https://github.com/n8n-io/n8n/commit/7515f7d52ae72fa1361687c43a9c29f585b3c6ce)) +* **editor:** Show retry information in execution list only when it exists ([#6587](https://github.com/n8n-io/n8n/issues/6587)) ([3ca66be](https://github.com/n8n-io/n8n/commit/3ca66be38082e7a3866d53d07328be58e913067f)) +* **editor:** Skip error line highlighting if out of range ([#6721](https://github.com/n8n-io/n8n/issues/6721)) ([a62d00a](https://github.com/n8n-io/n8n/commit/a62d00a4795d02a5905c5ddbae569f122a46a023)) +* **editor:** Update design system menu item component ([#6659](https://github.com/n8n-io/n8n/issues/6659)) ([84466e9](https://github.com/n8n-io/n8n/commit/84466e983336a3cfa8c20b30ead8d58abbf07cf0)) +* **FileMaker Node:** Improve returned error responses ([#6585](https://github.com/n8n-io/n8n/issues/6585)) ([91a052e](https://github.com/n8n-io/n8n/commit/91a052e4c53b6717d3a4e4d1034339012ce39c41)) +* **FTP Node:** List recursive ignore . and .. to prevent infinite loops ([#6707](https://github.com/n8n-io/n8n/issues/6707)) ([995d5cc](https://github.com/n8n-io/n8n/commit/995d5cc47095e584c2a064dd5aa3841b3054ffd4)) +* **GitLab Trigger Node:** Fix trigger activation 404 error ([#6711](https://github.com/n8n-io/n8n/issues/6711)) ([8ceb832](https://github.com/n8n-io/n8n/commit/8ceb8322ebfc1384291e8a0d5d07ee5c22d52142)) +* **Gmail Trigger Node:** Early returns in case of no data ([#6727](https://github.com/n8n-io/n8n/issues/6727)) ([c2511a8](https://github.com/n8n-io/n8n/commit/c2511a829cfa40d4d9d570ad7724845c93544c3b)) +* **Google BigQuery Node:** Error description improvement ([#6715](https://github.com/n8n-io/n8n/issues/6715)) ([95837d2](https://github.com/n8n-io/n8n/commit/95837d260466e8a4bd19c44390ce4557fa5c51cb)) +* **Google Drive Node:** Fix regex in file RLC ([#6607](https://github.com/n8n-io/n8n/issues/6607)) ([5672146](https://github.com/n8n-io/n8n/commit/56721468dff51bb60ececc0472e2b9ca0740fcb1)) +* **Google Drive Node:** URL parsing ([#6527](https://github.com/n8n-io/n8n/issues/6527)) ([d9ed0b3](https://github.com/n8n-io/n8n/commit/d9ed0b31b538320a67ee4e5c0cae34656c9f4334)) +* **Google Sheets Node:** Incorrect read of 0 and false ([#6525](https://github.com/n8n-io/n8n/issues/6525)) ([806d134](https://github.com/n8n-io/n8n/commit/806d13460240abe94843e569b1820cd8d0d8edd1)) +* **HTTP Request Node:** Cleanup circular references in response ([#6590](https://github.com/n8n-io/n8n/issues/6590)) ([aecc05b](https://github.com/n8n-io/n8n/commit/aecc05b787d09ba778adc5b4bf96abacc5a64204)) +* **Merge Node:** Enrich input 2 fix ([#6526](https://github.com/n8n-io/n8n/issues/6526)) ([c82c7f1](https://github.com/n8n-io/n8n/commit/c82c7f19128df3a11d6d0f18e8d8dab57e6a3b8f)) +* **Microsoft Outlook Node:** Fix issue with category not correctly applying ([#6583](https://github.com/n8n-io/n8n/issues/6583)) ([fc8ed55](https://github.com/n8n-io/n8n/commit/fc8ed55c0de7db4cf17f4f1bf417f6cbf48444c2)) +* **Notion Node:** Version fix ([#6531](https://github.com/n8n-io/n8n/issues/6531)) ([38dc784](https://github.com/n8n-io/n8n/commit/38dc784d2eed25aae777c5c3c3fda1a35e20bd24)) +* **Postgres Node:** Arrays in query replacement fix ([#6718](https://github.com/n8n-io/n8n/issues/6718)) ([4cae091](https://github.com/n8n-io/n8n/commit/4cae091cfb54701dfa51b5204799df0a8b4929cd)) +* **Postgres Node:** For select queries, empty result should be be replaced with `{"success":true}` ([#6703](https://github.com/n8n-io/n8n/issues/6703)) ([250175d](https://github.com/n8n-io/n8n/commit/250175d066d6759f4a787371b47ed91ee62aab71)) +* **Postgres Node:** Upsert does not fetch columns when schema other then public ([#6643](https://github.com/n8n-io/n8n/issues/6643)) ([aaa9ee3](https://github.com/n8n-io/n8n/commit/aaa9ee3949529a745e3b624716da1549ed571604)) +* **Salesforce Node:** Fix typo for adding a contact to a campaign ([#6598](https://github.com/n8n-io/n8n/issues/6598)) ([7ffe3cb](https://github.com/n8n-io/n8n/commit/7ffe3cb36adeecaca6cc6ddf067a701ee55c18d1)) +* **Sendy Node:** Fix issue with brand id not being sent ([#6530](https://github.com/n8n-io/n8n/issues/6530)) ([2e8dfb8](https://github.com/n8n-io/n8n/commit/2e8dfb86d4636781b319d6190e8be12e7661ee16)) +* Stop n8n from complaining about credentials when saving a new workflow form a template ([#6671](https://github.com/n8n-io/n8n/issues/6671)) ([486d16b](https://github.com/n8n-io/n8n/commit/486d16bcdb6be12dd85f4af5f7de878d9d178fd6)) +* **Strapi Node:** Fix issue with pagination ([#4991](https://github.com/n8n-io/n8n/issues/4991)) ([54444fa](https://github.com/n8n-io/n8n/commit/54444fa388da12d75553e66e53a8cf6f8a99b6fc)) +* **Telegram Trigger Node:** Add guard to 'include' call on null or undefined ([#6730](https://github.com/n8n-io/n8n/issues/6730)) ([533b0ba](https://github.com/n8n-io/n8n/commit/533b0bac13d275753fee329bb4abe0c7aae5b48b)) +* **XML Node:** Fix issue with not returning valid data ([#6565](https://github.com/n8n-io/n8n/issues/6565)) ([cdd215f](https://github.com/n8n-io/n8n/commit/cdd215f642b47413c05f229e641074d0d4048f68)) + + +### Features + +* Add crowd.dev node and trigger node ([#6082](https://github.com/n8n-io/n8n/issues/6082)) ([238a78f](https://github.com/n8n-io/n8n/commit/238a78f0582dbf439a9799de0edcb2e9bef29978)) +* Add missing input panels to some trigger nodes ([#6518](https://github.com/n8n-io/n8n/issues/6518)) ([fdf8a42](https://github.com/n8n-io/n8n/commit/fdf8a428ed38bb3ceb2bc0e50b002b34843d8fc4)) +* Add various source control improvements ([#6533](https://github.com/n8n-io/n8n/issues/6533)) ([68fdc20](https://github.com/n8n-io/n8n/commit/68fdc2078928be478a286774f2889feba1c3f5fe)) +* **Airtable Node:** Overhaul ([#6200](https://github.com/n8n-io/n8n/issues/6200)) ([b69d20c](https://github.com/n8n-io/n8n/commit/b69d20c12ec1ad0395e23747ce5f1d437de0231b)) +* Allow `eslint-config` to be externally consumable ([#6694](https://github.com/n8n-io/n8n/issues/6694)) ([3566c13](https://github.com/n8n-io/n8n/commit/3566c13afc9795206b5a4af7b06159e35b046e12)) +* Allow hiding credential params on cloud ([#6687](https://github.com/n8n-io/n8n/issues/6687)) ([2af1c24](https://github.com/n8n-io/n8n/commit/2af1c24ead4c02e0588d4c2dfcf4a289f54388d4)) +* **API:** Implement users account quota guards ([#6434](https://github.com/n8n-io/n8n/issues/6434)) ([e5620ab](https://github.com/n8n-io/n8n/commit/e5620ab1e49548e4c2ffd296e055f1caee94d2ba)), closes [#6636](https://github.com/n8n-io/n8n/issues/6636) +* **core:** Add cache service ([#6729](https://github.com/n8n-io/n8n/issues/6729)) ([c0d2bac](https://github.com/n8n-io/n8n/commit/c0d2bac94d732d4166633adf9c3b8eaf5d8046be)) +* **core:** Only show V1 banner to users who migrated ([#6622](https://github.com/n8n-io/n8n/issues/6622)) ([071e56f](https://github.com/n8n-io/n8n/commit/071e56f7fde2fc4ffc7e3da92a069d8ed593bc60)) +* **editor:** Implement new banners framework ([#6603](https://github.com/n8n-io/n8n/issues/6603)) ([4240e76](https://github.com/n8n-io/n8n/commit/4240e76253e02da13942d4b84a83ec22fd30aca3)) +* **editor:** Load fixed template list as experiment ([#6632](https://github.com/n8n-io/n8n/issues/6632)) ([e996622](https://github.com/n8n-io/n8n/commit/e9966224ea555ce8f3a48872887a73ef879e47c3)) +* **editor:** Prevent saving of workflow when canvas is loading ([#6497](https://github.com/n8n-io/n8n/issues/6497)) ([f89ef83](https://github.com/n8n-io/n8n/commit/f89ef83c766fafb1d0497ed91a74b93e8d2af1ec)) +* **editor:** Removing `ph-no-capture` class from some elements ([#6674](https://github.com/n8n-io/n8n/issues/6674)) ([c3455a4](https://github.com/n8n-io/n8n/commit/c3455a4ad82d965c41267fea173feaad4800c43f)) +* Environments release using source control ([#6653](https://github.com/n8n-io/n8n/issues/6653)) ([fc7aa8b](https://github.com/n8n-io/n8n/commit/fc7aa8bd664553c463536b6abe58a488e5e11147)) +* **Google Cloud Storage Node:** Use streaming for file uploads ([#6462](https://github.com/n8n-io/n8n/issues/6462)) ([cd0e41a](https://github.com/n8n-io/n8n/commit/cd0e41a6b49a58bee95721363dd7e6c43de28725)) +* **Google Drive Node:** Overhaul ([#5941](https://github.com/n8n-io/n8n/issues/5941)) ([d70a1cb](https://github.com/n8n-io/n8n/commit/d70a1cb0c82ee0a4b92776684c6c9079020d028f)) +* **HTML Node:** 'Convert to table operation ([#6540](https://github.com/n8n-io/n8n/issues/6540)) ([8abb03d](https://github.com/n8n-io/n8n/commit/8abb03d7cf02ad7f03a0adffa646870df5f1a02c)) +* **HTTP Request Node:** New http request generic custom auth credential ([#5798](https://github.com/n8n-io/n8n/issues/5798)) ([b17b458](https://github.com/n8n-io/n8n/commit/b17b4582a059104665888a2369c3e2256db4c1ed)) +* **Matrix Node:** Allow setting filename if the binary data has none ([#6536](https://github.com/n8n-io/n8n/issues/6536)) ([8b76e98](https://github.com/n8n-io/n8n/commit/8b76e980852062b192a95593035697c43d6f808e)) +* **Microsoft To Do Node:** Add an option to set a reminder when creating a task ([#5757](https://github.com/n8n-io/n8n/issues/5757)) ([b19833d](https://github.com/n8n-io/n8n/commit/b19833d673bd554ba86c0b234e8d13633912563a)) +* **Notion Node:** Add option to update icon when updating a page ([#5670](https://github.com/n8n-io/n8n/issues/5670)) ([225e849](https://github.com/n8n-io/n8n/commit/225e849960ce65d7f85b482f05fb3d7ffb4f9427)) +* **OpenAI Node:** Update max token limit to support newer model limits ([#6644](https://github.com/n8n-io/n8n/issues/6644)) ([26046f6](https://github.com/n8n-io/n8n/commit/26046f6fe8df9e6fe799f6253d086142f6ce7e53)) +* **Read PDF Node:** Replace pdf-parse with pdfjs, and add support for streaming and encrypted PDFs ([#6640](https://github.com/n8n-io/n8n/issues/6640)) ([0a31b8e](https://github.com/n8n-io/n8n/commit/0a31b8e2b4aab8d74d80f76598900109fe19a0e8)) +* **Rundeck Node:** Add support for node filters ([#5633](https://github.com/n8n-io/n8n/issues/5633)) ([1f70f49](https://github.com/n8n-io/n8n/commit/1f70f49ce5784baba7fd779b23209bae4f6b039a)) +* **Slack Node:** Add option to include link to workflow in Slack node ([#6611](https://github.com/n8n-io/n8n/issues/6611)) ([aa53c46](https://github.com/n8n-io/n8n/commit/aa53c46367480e31642e807ad1abf149fd13eb28)) +* **Strava Node:** Add hide_from_home field in Activity Update ([#5883](https://github.com/n8n-io/n8n/issues/5883)) ([7495e31](https://github.com/n8n-io/n8n/commit/7495e31a5b25e97683c7ea38225ba253d8fae8b7)) +* **Telegram Node:** Add support for sending messages to forum topics ([#5746](https://github.com/n8n-io/n8n/issues/5746)) ([e6a81f0](https://github.com/n8n-io/n8n/commit/e6a81f0008fddfcfd5f1102c8e6e58650020d930)) +* **Twitter Node:** Node overhaul ([#4788](https://github.com/n8n-io/n8n/issues/4788)) ([42721db](https://github.com/n8n-io/n8n/commit/42721dba80077fb796086a2bf0ecce256bf3a50f)) + + +### Reverts + +* Revert "test(editor): Add canvas actions E2E tests" (#6736) ([ed09e9c](https://github.com/n8n-io/n8n/commit/ed09e9c695109a715a4c8d47338bbb0b794eb009)), closes [#6736](https://github.com/n8n-io/n8n/issues/6736) [#6723](https://github.com/n8n-io/n8n/issues/6723) + + + +## [1.0.1](https://github.com/n8n-io/n8n/compare/n8n@1.0.0...n8n@1.0.1) (2023-07-05) + + +### Bug Fixes + +* **core:** Fix credentials test ([#6569](https://github.com/n8n-io/n8n/issues/6569)) ([8f244df](https://github.com/n8n-io/n8n/commit/8f244df0f9efcb087a78dd8d9481489c484c77b7)) +* **core:** Fix migrations for MySQL/MariaDB ([#6591](https://github.com/n8n-io/n8n/issues/6591)) ([b9da67b](https://github.com/n8n-io/n8n/commit/b9da67b653bf19f39d0d1506d3140c71432efaed)) +* **core:** Make node execution order configurable, and backward-compatible ([#6507](https://github.com/n8n-io/n8n/issues/6507)) ([d97edbc](https://github.com/n8n-io/n8n/commit/d97edbcffa966a693548eed033ac41d4a404fc23)) +* **core:** Update pruning related config defaults for v1 ([#6577](https://github.com/n8n-io/n8n/issues/6577)) ([ffb4e47](https://github.com/n8n-io/n8n/commit/ffb4e470b56222ae11891d478e96ea9c31675afe)) +* **editor:** Restore expression completions ([#6566](https://github.com/n8n-io/n8n/issues/6566)) ([516e572](https://github.com/n8n-io/n8n/commit/516e5728f73da6393defe7633533cc142c531c7a)) +* **editor:** Show retry information in execution list only when it exists ([#6587](https://github.com/n8n-io/n8n/issues/6587)) ([2580286](https://github.com/n8n-io/n8n/commit/2580286a198e53c3bf3db6e56faed301b606db07)) +* **Sendy Node:** Fix issue with brand id not being sent ([#6530](https://github.com/n8n-io/n8n/issues/6530)) ([b9e5211](https://github.com/n8n-io/n8n/commit/b9e52117355d939e77a2e3c59a7f67ac21e31b22)) +* **Strapi Node:** Fix issue with pagination ([#4991](https://github.com/n8n-io/n8n/issues/4991)) ([4253b48](https://github.com/n8n-io/n8n/commit/4253b48b26d1625cd2fb7f38159f9528cea45f34)) +* **XML Node:** Fix issue with not returning valid data ([#6565](https://github.com/n8n-io/n8n/issues/6565)) ([c2b9d5a](https://github.com/n8n-io/n8n/commit/c2b9d5ac506375ecc316e8c79a3ce0bf143e9406)) + + +### Features + +* Add missing input panels to some trigger nodes ([#6518](https://github.com/n8n-io/n8n/issues/6518)) ([3b12864](https://github.com/n8n-io/n8n/commit/3b12864460a458f23b57a6f3f4b40d0d364ef6e6)) + + + +# [1.0.0](https://github.com/n8n-io/n8n/compare/n8n@0.234.0...n8n@1.0.0) (2023-06-27) + + +### ⚠️ BREAKING CHANGES +* **core** Docker containers now run as the user `node` instead of `root` ([#6365](https://github.com/n8n-io/n8n/pull/6365)) ([f636616](https://github.com/n8n-io/n8n/commit/f6366160a476f42cb0612d10c5777a154d8665dd)) +* **core** Drop `debian` and `rhel7` images ([#6365](https://github.com/n8n-io/n8n/pull/6365)) ([f636616](https://github.com/n8n-io/n8n/commit/f6366160a476f42cb0612d10c5777a154d8665dd)) +* **core** Drop support for deprecated `WEBHOOK_TUNNEL_URL` env variable ([#6363](https://github.com/n8n-io/n8n/pull/6363)) +* **core** Execution mode defaults to `main` now, instead of `own` ([#6363](https://github.com/n8n-io/n8n/pull/6363)) +* **core** Default push backend is `websocket` now, instead of `sse` ([#6363](https://github.com/n8n-io/n8n/pull/6363)) +* **core** Stop loading custom/community nodes from n8n's `node_modules` folder ([#6396](https://github.com/n8n-io/n8n/pull/6396)) ([a45a2c8](https://github.com/n8n-io/n8n/commit/a45a2c8c41eb7ffb2d62d5a8877c34eb45799fa9)) +* **core** User management is mandatory now. basic-auth, external-jwt-auth, and no-auth options are removed ([#6362](https://github.com/n8n-io/n8n/pull/6362)) ([8c008f5](https://github.com/n8n-io/n8n/commit/8c008f5d2217030e93d79e2baca0f2965d4d643e)) +* **core** Allow syntax errors and expression errors to fail executions ([#6352](https://github.com/n8n-io/n8n/pull/6352)) ([1197811](https://github.com/n8n-io/n8n/commit/1197811a1e3bc4ad7464d53d7e4860d0e62335a3)) +* **core** Drop support for `request` library and `N8N_USE_DEPRECATED_REQUEST_LIB` env variable ([#6413](https://github.com/n8n-io/n8n/pull/6413)) ([632ea27](https://github.com/n8n-io/n8n/commit/632ea275b7fa352d4af23339208bed66bb948da8)) +* **core** Make date extensions outputs match inputs ([#6435](https://github.com/n8n-io/n8n/pull/6435)) ([85372aa](https://github.com/n8n-io/n8n/commit/85372aabdfc52493504d4723ee1829e2ea15151d)) +* **core** Drop support for `executeSingle` method on nodes ([#4853](https://github.com/n8n-io/n8n/pull/4853)) ([9194d8b](https://github.com/n8n-io/n8n/commit/9194d8bb0ecf81e52d47ddfc4b75dc4e0efd492d)) +* **core** Change data processing for multi-input-nodes ([#4238](https://github.com/n8n-io/n8n/pull/4238)) ([b8458a5](https://github.com/n8n-io/n8n/commit/b8458a53f66b79903f0fdb168f6febdefb36d13a)) + + +### Bug Fixes + +* **core:** All migrations should run in a transaction ([#6519](https://github.com/n8n-io/n8n/issues/6519)) ([e152cfe](https://github.com/n8n-io/n8n/commit/e152cfe27cf3396f4b278614f1d46d9dd723f36e)) +* **Edit Image Node:** Fix transparent operation ([#6513](https://github.com/n8n-io/n8n/issues/6513)) ([4a4bcbc](https://github.com/n8n-io/n8n/commit/4a4bcbca298bf90c54d3597103e6a231855abbd2)) +* **Google Drive Node:** URL parsing ([#6527](https://github.com/n8n-io/n8n/issues/6527)) ([18aa9f3](https://github.com/n8n-io/n8n/commit/18aa9f3c62149cd603c560c2944c3146cd31e9e7)) +* **Google Sheets Node:** Incorrect read of 0 and false ([#6525](https://github.com/n8n-io/n8n/issues/6525)) ([b6202b5](https://github.com/n8n-io/n8n/commit/b6202b5585f864d97dc114e1e49a6a7dae5c674a)) +* **Merge Node:** Enrich input 2 fix ([#6526](https://github.com/n8n-io/n8n/issues/6526)) ([70822ce](https://github.com/n8n-io/n8n/commit/70822ce988543476719089c132e1d10af0d03e78)) +* **Notion Node:** Version fix ([#6531](https://github.com/n8n-io/n8n/issues/6531)) ([d3d8522](https://github.com/n8n-io/n8n/commit/d3d8522e8f0c702f56997667a252892296540450)) +* Show error when referencing node that exist but has not been executed ([#6496](https://github.com/n8n-io/n8n/issues/6496)) ([3db2707](https://github.com/n8n-io/n8n/commit/3db2707b8e47ea539f4f6c40497a928b51b40274)) + + +### Features + +* **core:** Change node execution order (most top-left one first) ([#6246](https://github.com/n8n-io/n8n/issues/6246)) ([0287d5b](https://github.com/n8n-io/n8n/commit/0287d5becdce30a9c0de2a0d6ad4a0db50e198d7)) +* **core:** Remove conditional defaults in V1 release ([#6363](https://github.com/n8n-io/n8n/issues/6363)) ([f636616](https://github.com/n8n-io/n8n/commit/f6366160a476f42cb0612d10c5777a154d8665dd)) +* **editor:** Add v1 banner ([#6443](https://github.com/n8n-io/n8n/issues/6443)) ([0fe415a](https://github.com/n8n-io/n8n/commit/0fe415add2baa8e70e29087f7a90312bd1ab38af)) +* **editor:** SQL editor overhaul ([#6282](https://github.com/n8n-io/n8n/issues/6282)) ([beedfb6](https://github.com/n8n-io/n8n/commit/beedfb609ccde2ef202e08566580a2e1a6b6eafa)) +* **HTTP Request Node:** Notice about dev console ([#6516](https://github.com/n8n-io/n8n/issues/6516)) ([d431117](https://github.com/n8n-io/n8n/commit/d431117c9e5db9ff0ec6a1e7371bbf58698957c9)) + + + +# [0.236.0](https://github.com/n8n-io/n8n/compare/n8n@0.235.0...n8n@0.236.0) (2023-07-05) + + +### Bug Fixes + +* **Brevo Node:** Rename SendInBlue node to Brevo node ([#6521](https://github.com/n8n-io/n8n/issues/6521)) ([e63b398](https://github.com/n8n-io/n8n/commit/e63b3982d200ade34461b9159eb1e988f494c025)) +* **core:** Fix credentials test ([#6569](https://github.com/n8n-io/n8n/issues/6569)) ([1abd172](https://github.com/n8n-io/n8n/commit/1abd172f73e171e37c4cc3ccfaa395c6a46bdf48)) +* **core:** Fix migrations for MySQL/MariaDB ([#6591](https://github.com/n8n-io/n8n/issues/6591)) ([29882a6](https://github.com/n8n-io/n8n/commit/29882a6f39dddcd1c8c107c20a548ce8dc665cba)) +* **core:** Improve the performance of last 2 sqlite migrations ([#6522](https://github.com/n8n-io/n8n/issues/6522)) ([31cba87](https://github.com/n8n-io/n8n/commit/31cba87d307183d613890c7e6d627636b5280b52)) +* **core:** Remove typeorm patches, but still enforce transactions on every migration ([#6594](https://github.com/n8n-io/n8n/issues/6594)) ([9def7a7](https://github.com/n8n-io/n8n/commit/9def7a729b52cd6b4698c47e190e9e2bd7894da5)), closes [#6519](https://github.com/n8n-io/n8n/issues/6519) +* **core:** Use owners file to export wf owners ([#6547](https://github.com/n8n-io/n8n/issues/6547)) ([4b755fb](https://github.com/n8n-io/n8n/commit/4b755fb0b441a37eb804c9e70d4b071a341f7155)) +* **editor:** Show retry information in execution list only when it exists ([#6587](https://github.com/n8n-io/n8n/issues/6587)) ([3ca66be](https://github.com/n8n-io/n8n/commit/3ca66be38082e7a3866d53d07328be58e913067f)) +* **Salesforce Node:** Fix typo for adding a contact to a campaign ([#6598](https://github.com/n8n-io/n8n/issues/6598)) ([7ffe3cb](https://github.com/n8n-io/n8n/commit/7ffe3cb36adeecaca6cc6ddf067a701ee55c18d1)) +* **Strapi Node:** Fix issue with pagination ([#4991](https://github.com/n8n-io/n8n/issues/4991)) ([54444fa](https://github.com/n8n-io/n8n/commit/54444fa388da12d75553e66e53a8cf6f8a99b6fc)) +* **XML Node:** Fix issue with not returning valid data ([#6565](https://github.com/n8n-io/n8n/issues/6565)) ([cdd215f](https://github.com/n8n-io/n8n/commit/cdd215f642b47413c05f229e641074d0d4048f68)) + + +### Features + +* Add crowd.dev node and trigger node ([#6082](https://github.com/n8n-io/n8n/issues/6082)) ([238a78f](https://github.com/n8n-io/n8n/commit/238a78f0582dbf439a9799de0edcb2e9bef29978)) +* Add various source control improvements ([#6533](https://github.com/n8n-io/n8n/issues/6533)) ([68fdc20](https://github.com/n8n-io/n8n/commit/68fdc2078928be478a286774f2889feba1c3f5fe)) +* **HTTP Request Node:** New http request generic custom auth credential ([#5798](https://github.com/n8n-io/n8n/issues/5798)) ([b17b458](https://github.com/n8n-io/n8n/commit/b17b4582a059104665888a2369c3e2256db4c1ed)) +* **Microsoft To Do Node:** Add an option to set a reminder when creating a task ([#5757](https://github.com/n8n-io/n8n/issues/5757)) ([b19833d](https://github.com/n8n-io/n8n/commit/b19833d673bd554ba86c0b234e8d13633912563a)) +* **Notion Node:** Add option to update icon when updating a page ([#5670](https://github.com/n8n-io/n8n/issues/5670)) ([225e849](https://github.com/n8n-io/n8n/commit/225e849960ce65d7f85b482f05fb3d7ffb4f9427)) +* **Strava Node:** Add hide_from_home field in Activity Update ([#5883](https://github.com/n8n-io/n8n/issues/5883)) ([7495e31](https://github.com/n8n-io/n8n/commit/7495e31a5b25e97683c7ea38225ba253d8fae8b7)) +* **Twitter Node:** Node overhaul ([#4788](https://github.com/n8n-io/n8n/issues/4788)) ([42721db](https://github.com/n8n-io/n8n/commit/42721dba80077fb796086a2bf0ecce256bf3a50f)) + + + +# [0.235.0](https://github.com/n8n-io/n8n/compare/n8n@0.234.0...n8n@0.235.0) (2023-06-28) + + +### Bug Fixes + +* **core:** Add empty credential value marker to show empty pw field ([#6532](https://github.com/n8n-io/n8n/issues/6532)) ([9294e2d](https://github.com/n8n-io/n8n/commit/9294e2da3c7c99c2099f5865e610fa7217bf06be)) +* **core:** All migrations should run in a transaction ([#6519](https://github.com/n8n-io/n8n/issues/6519)) ([e152cfe](https://github.com/n8n-io/n8n/commit/e152cfe27cf3396f4b278614f1d46d9dd723f36e)) +* **core:** Rename to credential_stubs and variable_stubs.json ([#6528](https://github.com/n8n-io/n8n/issues/6528)) ([b06462f](https://github.com/n8n-io/n8n/commit/b06462f4415bd1143a00b4a66e6e626da8c52196)) +* **Edit Image Node:** Fix transparent operation ([#6513](https://github.com/n8n-io/n8n/issues/6513)) ([4a4bcbc](https://github.com/n8n-io/n8n/commit/4a4bcbca298bf90c54d3597103e6a231855abbd2)) +* **editor:** Add default author name and email to source control settings ([#6543](https://github.com/n8n-io/n8n/issues/6543)) ([e1a02c7](https://github.com/n8n-io/n8n/commit/e1a02c76257de30e08878279dea33d7854d46938)) +* **editor:** Change default branchColor and remove label ([#6541](https://github.com/n8n-io/n8n/issues/6541)) ([186271e](https://github.com/n8n-io/n8n/commit/186271e939bca19ec9c94d9455e9430d8b8cf9d7)) +* **Google Drive Node:** URL parsing ([#6527](https://github.com/n8n-io/n8n/issues/6527)) ([d9ed0b3](https://github.com/n8n-io/n8n/commit/d9ed0b31b538320a67ee4e5c0cae34656c9f4334)) +* **Google Sheets Node:** Incorrect read of 0 and false ([#6525](https://github.com/n8n-io/n8n/issues/6525)) ([806d134](https://github.com/n8n-io/n8n/commit/806d13460240abe94843e569b1820cd8d0d8edd1)) +* **Merge Node:** Enrich input 2 fix ([#6526](https://github.com/n8n-io/n8n/issues/6526)) ([c82c7f1](https://github.com/n8n-io/n8n/commit/c82c7f19128df3a11d6d0f18e8d8dab57e6a3b8f)) +* **Notion Node:** Version fix ([#6531](https://github.com/n8n-io/n8n/issues/6531)) ([38dc784](https://github.com/n8n-io/n8n/commit/38dc784d2eed25aae777c5c3c3fda1a35e20bd24)) +* **Sendy Node:** Fix issue with brand id not being sent ([#6530](https://github.com/n8n-io/n8n/issues/6530)) ([2e8dfb8](https://github.com/n8n-io/n8n/commit/2e8dfb86d4636781b319d6190e8be12e7661ee16)) + + +### Features + +* Add missing input panels to some trigger nodes ([#6518](https://github.com/n8n-io/n8n/issues/6518)) ([fdf8a42](https://github.com/n8n-io/n8n/commit/fdf8a428ed38bb3ceb2bc0e50b002b34843d8fc4)) +* **editor:** Prevent saving of workflow when canvas is loading ([#6497](https://github.com/n8n-io/n8n/issues/6497)) ([f89ef83](https://github.com/n8n-io/n8n/commit/f89ef83c766fafb1d0497ed91a74b93e8d2af1ec)) +* **editor:** SQL editor overhaul ([#6282](https://github.com/n8n-io/n8n/issues/6282)) ([beedfb6](https://github.com/n8n-io/n8n/commit/beedfb609ccde2ef202e08566580a2e1a6b6eafa)) +* **Google Drive Node:** Overhaul ([#5941](https://github.com/n8n-io/n8n/issues/5941)) ([d70a1cb](https://github.com/n8n-io/n8n/commit/d70a1cb0c82ee0a4b92776684c6c9079020d028f)) +* **HTTP Request Node:** Notice about dev console ([#6516](https://github.com/n8n-io/n8n/issues/6516)) ([d431117](https://github.com/n8n-io/n8n/commit/d431117c9e5db9ff0ec6a1e7371bbf58698957c9)) +* **Matrix Node:** Allow setting filename if the binary data has none ([#6536](https://github.com/n8n-io/n8n/issues/6536)) ([8b76e98](https://github.com/n8n-io/n8n/commit/8b76e980852062b192a95593035697c43d6f808e)) + + + +# [0.234.0](https://github.com/n8n-io/n8n/compare/n8n@0.233.0...n8n@0.234.0) (2023-06-22) + + +### Bug Fixes + +* **core:** Fix OAuth2 callback for `grantType=clientCredentials` ([#6500](https://github.com/n8n-io/n8n/issues/6500)) ([25b9216](https://github.com/n8n-io/n8n/commit/25b92169aefc47dc028a11dc008abb4a36d037d3)) +* **core:** Fix pairedItem for alwaysOutputData & multi identical resolve ([#6405](https://github.com/n8n-io/n8n/issues/6405)) ([4b0e0b7](https://github.com/n8n-io/n8n/commit/4b0e0b797071cb20bd2b042eb0d8591fe801ae76)) +* **core:** Fix the url sent in the password-reset emails ([#6466](https://github.com/n8n-io/n8n/issues/6466)) ([9978e27](https://github.com/n8n-io/n8n/commit/9978e2760bc0b8f8c7e5c1ef6610670611d8efe9)) +* **core:** Improve the error returned to users on SSL issues ([#6494](https://github.com/n8n-io/n8n/issues/6494)) ([1b084bc](https://github.com/n8n-io/n8n/commit/1b084bc56b90a25b399c084b69efdb48ff01dfb5)) +* **core:** Use correct scopes-separator when generating authorization urls ([#6502](https://github.com/n8n-io/n8n/issues/6502)) ([5bf83f8](https://github.com/n8n-io/n8n/commit/5bf83f8bf6889e0154000ad774f292e98b87729d)) +* **editor:** Fix DNV header disappearing when scrolling the code editor content ([#6459](https://github.com/n8n-io/n8n/issues/6459)) ([ad9fd12](https://github.com/n8n-io/n8n/commit/ad9fd12615a7050c6fec0caf041e49c972693d1f)) +* **editor:** Fix resource mapper dropdown width and disabled styling ([#6493](https://github.com/n8n-io/n8n/issues/6493)) ([da330f0](https://github.com/n8n-io/n8n/commit/da330f0648b85c39e89ca2eeaba94f9b2c3a1b13)) +* **editor:** Remove `$if`, `$min` and `$max` from code node autocomplete ([#6460](https://github.com/n8n-io/n8n/issues/6460)) ([16f707d](https://github.com/n8n-io/n8n/commit/16f707d5c479c72f87c129ec870fd00c329a9ade)) +* **editor:** Show confirm on pull only when http response status is 409 ([#6451](https://github.com/n8n-io/n8n/issues/6451)) ([5819be5](https://github.com/n8n-io/n8n/commit/5819be5ced53adc643b2bb18dbd1be0096a05395)) +* **editor:** Show execution error as message ([#6431](https://github.com/n8n-io/n8n/issues/6431)) ([d3b78e2](https://github.com/n8n-io/n8n/commit/d3b78e291ece5355b0829c935a3142b6078287c9)) +* **editor:** Update data pinning tooltip to match current behaviour ([#6436](https://github.com/n8n-io/n8n/issues/6436)) ([ee10ac8](https://github.com/n8n-io/n8n/commit/ee10ac8da9ad6533995361f51cab97da35501855)) +* **editor:** Update git repo URL validation to prevent using https protocol ([#6475](https://github.com/n8n-io/n8n/issues/6475)) ([8b50625](https://github.com/n8n-io/n8n/commit/8b50625fb15fc86840485e167627a2ab1802d512)) +* **editor:** Update version control docs links ([#6440](https://github.com/n8n-io/n8n/issues/6440)) ([da105f4](https://github.com/n8n-io/n8n/commit/da105f468bd69b3d572f422d7270204e5823200e)) +* **Google Sheets Node:** Return empty response if no rows updated ([#6407](https://github.com/n8n-io/n8n/issues/6407)) ([32fb419](https://github.com/n8n-io/n8n/commit/32fb4190111c60c8bd05d47d5bace2f9043d1f06)) +* **HTML Node:** Prevent XSS in execution-data preview ([#6432](https://github.com/n8n-io/n8n/issues/6432)) ([16e0df5](https://github.com/n8n-io/n8n/commit/16e0df553c4e068768bf7dd7bbac1d7c2b88fec2)) +* **HTTP Request Node:** "Ignore SSL issues" should also ignore legacy renegotiation issues ([#6492](https://github.com/n8n-io/n8n/issues/6492)) ([7a95e08](https://github.com/n8n-io/n8n/commit/7a95e08bfd04cd53a9d531fdb715f289bfdd64b6)) +* **LinkedIn Node:** Remove unsupported description from image posts ([#6446](https://github.com/n8n-io/n8n/issues/6446)) ([529f0e4](https://github.com/n8n-io/n8n/commit/529f0e499670450f8cb0dda539176d1b07c39190)) +* Make MySQL migration for nano id change compatible with version 5.7 ([#6498](https://github.com/n8n-io/n8n/issues/6498)) ([044c710](https://github.com/n8n-io/n8n/commit/044c710a8ecca3d705ebfb53cef204482428fbec)) +* **Split In Batches Node:** Add "done" context to allow simple reset ([#6437](https://github.com/n8n-io/n8n/issues/6437)) ([ffd13f4](https://github.com/n8n-io/n8n/commit/ffd13f4541794832792ecf33e24d5dc4960ff005)) +* **Zendesk Node:** Fix issue with group assignment not working ([#6501](https://github.com/n8n-io/n8n/issues/6501)) ([772ed7f](https://github.com/n8n-io/n8n/commit/772ed7ff10f6071816ad8cb4543ae9bcaf3813d3)) +* **Zulip Node:** Remove trailing slash from the url ([#6427](https://github.com/n8n-io/n8n/issues/6427)) ([cc1b249](https://github.com/n8n-io/n8n/commit/cc1b249d58618c11bb22ae4458aaf22ef77e6493)) + + +### Features + +* Add support for large files with declarative nodes ([#6461](https://github.com/n8n-io/n8n/issues/6461)) ([e0f109f](https://github.com/n8n-io/n8n/commit/e0f109fa7ee3b1502d68f648504e12a61bff7c93)) +* **AwsS3 Node:** Small overhaul of the node with multipart uploading ([#6017](https://github.com/n8n-io/n8n/issues/6017)) ([109442f](https://github.com/n8n-io/n8n/commit/109442f38f9868d51d85ba4f88d185910f4f2688)) +* **core:** Add GET /users endpoints to public API ([#6360](https://github.com/n8n-io/n8n/issues/6360)) ([6ab3502](https://github.com/n8n-io/n8n/commit/6ab350209d0fa7ee37c9e4425d987517aeba3d98)) +* **core:** Add PKCE for OAuth2 ([#6324](https://github.com/n8n-io/n8n/issues/6324)) ([fc7261a](https://github.com/n8n-io/n8n/commit/fc7261aca6485141fca95b6eccffe1f1a9a8c0c4)) +* **DebugHelper Node:** Fix and include in main app ([#6406](https://github.com/n8n-io/n8n/issues/6406)) ([18f5884](https://github.com/n8n-io/n8n/commit/18f588444f7f126ec1c4867d2ac1f2d3cbc99b88)) +* **Gmail Node:** Add reply to email ([#6453](https://github.com/n8n-io/n8n/issues/6453)) ([fddc69e](https://github.com/n8n-io/n8n/commit/fddc69ee2c2324aff783172c959af9e40ad89696)) +* **Item Lists Node:** Improvements ([#6190](https://github.com/n8n-io/n8n/issues/6190)) ([1dbca44](https://github.com/n8n-io/n8n/commit/1dbca4402579ce1e323ab30c5caebef247a19c8d)) +* Migrate integer primary keys to nanoids ([#6345](https://github.com/n8n-io/n8n/issues/6345)) ([c3ba012](https://github.com/n8n-io/n8n/commit/c3ba0123ad0913140707dbf56fafa1d4dd0f3de3)), closes [#6323](https://github.com/n8n-io/n8n/issues/6323) +* **Stripe Trigger Node:** Add action required trigger for payment intents ([#6490](https://github.com/n8n-io/n8n/issues/6490)) ([f2154fb](https://github.com/n8n-io/n8n/commit/f2154fba60cbbaa9b6c9e72523801573fe3b6baf)) +* **Webhook Node:** Stream binary response in `lastNode.firstEntryBinary` mode ([#6463](https://github.com/n8n-io/n8n/issues/6463)) ([6ccab3e](https://github.com/n8n-io/n8n/commit/6ccab3eaaa883e17d00607e180e14edf9ce33688)) + + + +# [0.233.0](https://github.com/n8n-io/n8n/compare/n8n@0.232.0...n8n@0.233.0) (2023-06-14) + + +### Bug Fixes + +* **core:** Allow all executions to be stopped ([#6386](https://github.com/n8n-io/n8n/issues/6386)) ([cc44af9](https://github.com/n8n-io/n8n/commit/cc44af9243457a5dfa904c205ad5428f793104b4)) +* **core:** Prevent arbitrary code execution via expressions ([#6420](https://github.com/n8n-io/n8n/issues/6420)) ([da7ae2b](https://github.com/n8n-io/n8n/commit/da7ae2beef0375aa914aee251aeff5f7ff334b34)) +* **editor:** Hide version control main menu component if no feature flag ([#6419](https://github.com/n8n-io/n8n/issues/6419)) ([75c0ab0](https://github.com/n8n-io/n8n/commit/75c0ab03f8379bb5426cef87045b67b458c97d70)) +* **LinkedIn Node:** Fix issue with posting as user or organization ([#6414](https://github.com/n8n-io/n8n/issues/6414)) ([d041602](https://github.com/n8n-io/n8n/commit/d041602754a694e67e81c1bbff87c13bf91bdd5d)) +* **Schedule Trigger Node:** Follow the correct Unix cron format for month and days of the week ([#6401](https://github.com/n8n-io/n8n/issues/6401)) ([2aef9de](https://github.com/n8n-io/n8n/commit/2aef9de14830c56199fd19bc09382424c55a2b9b)) + + + +# [0.232.0](https://github.com/n8n-io/n8n/compare/n8n@0.231.0...n8n@0.232.0) (2023-06-07) + + +### Bug Fixes + +* **core:** RMC boolean value fix ([#6397](https://github.com/n8n-io/n8n/issues/6397)) ([28bb797](https://github.com/n8n-io/n8n/commit/28bb797bb0ea59b66a7641fc116f47c25564c21a)) +* **Date & Time Node:** Reset responseData at end of loop ([#6385](https://github.com/n8n-io/n8n/issues/6385)) ([eaa8648](https://github.com/n8n-io/n8n/commit/eaa8648f2bf61074eae6dcd7355f8f107a31388e)) +* **editor:** Add button to refresh branches ([#6387](https://github.com/n8n-io/n8n/issues/6387)) ([ce57816](https://github.com/n8n-io/n8n/commit/ce578162f4e44a6cc1774ab217967110b254ab3f)) +* **editor:** Add secondary icon to menu items ([#6351](https://github.com/n8n-io/n8n/issues/6351)) ([3dd2601](https://github.com/n8n-io/n8n/commit/3dd260168eb627fd7fbed740bc97fa7f6289628f)) +* **editor:** Add Set up version control CTA ([#6356](https://github.com/n8n-io/n8n/issues/6356)) ([e72521d](https://github.com/n8n-io/n8n/commit/e72521d5ec7a5e57dc311defb70f1fe19054b0f0)) +* **editor:** Adding branch color ([#6380](https://github.com/n8n-io/n8n/issues/6380)) ([dba3f44](https://github.com/n8n-io/n8n/commit/dba3f44bc00de68113cc98db9afc6267f56ec04c)) +* **editor:** Fix an issue with connections breaking during renaming ([#6358](https://github.com/n8n-io/n8n/issues/6358)) ([0f2bc6b](https://github.com/n8n-io/n8n/commit/0f2bc6b73711597fdf008ee54665d9bed82a1a9e)) +* **editor:** Fix hard-coded parameter names for code editors ([#6372](https://github.com/n8n-io/n8n/issues/6372)) ([f61b776](https://github.com/n8n-io/n8n/commit/f61b776beac961fa58c6c69371c69ae1e74ef83e)) +* **editor:** Fix typing `$` in inline expression field reloading node parameters form ([#6374](https://github.com/n8n-io/n8n/issues/6374)) ([4c0d4eb](https://github.com/n8n-io/n8n/commit/4c0d4ebd9917e52512e85a5cad2c93b554e0e212)) +* **editor:** Pin all data regardless of pagination ([#6346](https://github.com/n8n-io/n8n/issues/6346)) ([f88029f](https://github.com/n8n-io/n8n/commit/f88029f308356c1c8271d7345ecbbd6e91c41b3d)) +* **editor:** Remove explicit parameter name scanning for code editors ([#6390](https://github.com/n8n-io/n8n/issues/6390)) ([97295f6](https://github.com/n8n-io/n8n/commit/97295f67f0f8509ac6ba0d4ce38ce12582dff074)) +* **editor:** Remove root level tag selector from css module to avoid making it a global style ([#6392](https://github.com/n8n-io/n8n/issues/6392)) ([cc37f21](https://github.com/n8n-io/n8n/commit/cc37f21aa27f3536f2043b5ff5da944388ac5504)) +* **editor:** Update version control setup CTA tooltip ([#6393](https://github.com/n8n-io/n8n/issues/6393)) ([385b3e8](https://github.com/n8n-io/n8n/commit/385b3e871a9307c36428f8239a5db318d71948c1)) +* Improve executions list polling performance ([#6355](https://github.com/n8n-io/n8n/issues/6355)) ([b5cabfe](https://github.com/n8n-io/n8n/commit/b5cabfef54e186f59580112a90566099bb79305e)) +* **Ldap Node:** Add DN field to update operation ([#6371](https://github.com/n8n-io/n8n/issues/6371)) ([9396e7e](https://github.com/n8n-io/n8n/commit/9396e7eb585ab9d6fda742b0d234c4262570af93)) +* Show actual execution data for production executions even if pin data exists ([#6302](https://github.com/n8n-io/n8n/issues/6302)) ([4eb8437](https://github.com/n8n-io/n8n/commit/4eb8437196a298a64f039aff51ba030dc21abb08)) + + +### Features + +* **Crypto Node:** Add support for hash and hmac on binary data ([#6359](https://github.com/n8n-io/n8n/issues/6359)) ([406a405](https://github.com/n8n-io/n8n/commit/406a405dd153833057286a27d04278ef71ceef3d)) +* **editor:** Make WF name a link on /executions ([#6354](https://github.com/n8n-io/n8n/issues/6354)) ([6ddf161](https://github.com/n8n-io/n8n/commit/6ddf16128b4ab47db716eeab89f7526558073f56)) +* New trigger PostgreSQL ([#5495](https://github.com/n8n-io/n8n/issues/5495)) ([4488f93](https://github.com/n8n-io/n8n/commit/4488f93c39b0ec0b4a0eff98391b46db6a2eed78)) +* Version control mvp ([#6271](https://github.com/n8n-io/n8n/issues/6271)) ([1b32141](https://github.com/n8n-io/n8n/commit/1b321416c0ba5371e0016398ae660ce298b8cdd6)) + + +# [0.231.0](https://github.com/n8n-io/n8n/compare/n8n@0.230.0...n8n@0.231.0) (2023-05-31) + + +### Bug Fixes + +* **Code Node:** Fix `item` and `items` alias regression ([#6331](https://github.com/n8n-io/n8n/issues/6331)) ([54e3838](https://github.com/n8n-io/n8n/commit/54e3838daed1f0931a04ba76cfd1ea7519c0e382)) +* **Code Node:** Update vm2 to address CVE-2023-32313 ([#6318](https://github.com/n8n-io/n8n/issues/6318)) ([bcbec52](https://github.com/n8n-io/n8n/commit/bcbec52552d52b0509659cab13112e1377a256b3)) +* **core:** Optimize getSharedWorkflowIds query ([#6314](https://github.com/n8n-io/n8n/issues/6314)) ([0631f69](https://github.com/n8n-io/n8n/commit/0631f69d98e5420faebba1a54d9ad47a2664d110)) +* **core:** Prevent prototype pollution on injectable services ([#6309](https://github.com/n8n-io/n8n/issues/6309)) ([d94c20a](https://github.com/n8n-io/n8n/commit/d94c20ada543767f700475b40ef7174c433c26c5)) +* **editor:** Fix locale plularisation if count is 0 ([#6312](https://github.com/n8n-io/n8n/issues/6312)) ([0d88bd7](https://github.com/n8n-io/n8n/commit/0d88bd7c1ae95cf077c2fa231d942204ff3b8f68)) +* **editor:** Fix Luxon date parsing of ExecutionsUsage component ([#6333](https://github.com/n8n-io/n8n/issues/6333)) ([8f0ff46](https://github.com/n8n-io/n8n/commit/8f0ff460b11999f4d78f8313910358aa87311713)) +* **editor:** Update SSO settings styles ([#6342](https://github.com/n8n-io/n8n/issues/6342)) ([5ae1124](https://github.com/n8n-io/n8n/commit/5ae1124106e7597d0943c371eae6aba6c105fd6b)) +* **Execute Command Node:** Block executions when `command` is empty ([#6308](https://github.com/n8n-io/n8n/issues/6308)) ([011d577](https://github.com/n8n-io/n8n/commit/011d5778b15232cff94a321dfee18c3d7489f93d)) +* Show `Ask AI` only on Code Node ([#6336](https://github.com/n8n-io/n8n/issues/6336)) ([da856d1](https://github.com/n8n-io/n8n/commit/da856d1c6593b43e1ce8d1becb1464c19c908e78)) + + +### Features + +* Add manual login option and password reset link for SSO ([#6328](https://github.com/n8n-io/n8n/issues/6328)) ([77e3f15](https://github.com/n8n-io/n8n/commit/77e3f1551dd7473a69f8833be5678d98964142e1)) +* **core:** Add metadata (customdata) to event log ([#6334](https://github.com/n8n-io/n8n/issues/6334)) ([792b1c1](https://github.com/n8n-io/n8n/commit/792b1c1ffb0eb279bc3451787891ca3835f59d9f)) +* **editor:** Implement Resource Mapper component ([#6207](https://github.com/n8n-io/n8n/issues/6207)) ([04cfa54](https://github.com/n8n-io/n8n/commit/04cfa548af3c7a25f1f0a36ddfb1de6a9e3f2169)), closes [#5752](https://github.com/n8n-io/n8n/issues/5752) [#5814](https://github.com/n8n-io/n8n/issues/5814) + + + +# [0.230.0](https://github.com/n8n-io/n8n/compare/n8n@0.229.0...n8n@0.230.0) (2023-05-24) + + +### Bug Fixes + +* **core:** Optimize SharedWorkflow queries ([#6297](https://github.com/n8n-io/n8n/issues/6297)) ([ed7f3b8](https://github.com/n8n-io/n8n/commit/ed7f3b845fe9a7aa0f6e1ff57ae9197057cd8aa1)) +* **core:** Prevent app crashes because of unhandled promises in poll and trigger nodes ([#6278](https://github.com/n8n-io/n8n/issues/6278)) ([3750605](https://github.com/n8n-io/n8n/commit/37506050c3f49cececa9da3cf7d420b367f2e055)) +* **editor:** Fix canvas loading when page gets restored from bfcache ([#6304](https://github.com/n8n-io/n8n/issues/6304)) ([11477f0](https://github.com/n8n-io/n8n/commit/11477f0a20f82b02d763dbf53e29083dd1e95e87)) +* **editor:** Fix design system button with icon vertical alignment ([#6284](https://github.com/n8n-io/n8n/issues/6284)) ([fc580f7](https://github.com/n8n-io/n8n/commit/fc580f7ee80b48a62fc2bebaec9902cd15944ad7)) +* **editor:** Fix inverted checks on modal confirmation results ([#6285](https://github.com/n8n-io/n8n/issues/6285)) ([5d2f474](https://github.com/n8n-io/n8n/commit/5d2f4746ea5da977a6532db90c624ded1520ec3e)) +* **ERPNext Node:** Fix issue with credential test and add frappe cloud url ([#6283](https://github.com/n8n-io/n8n/issues/6283)) ([2a2b645](https://github.com/n8n-io/n8n/commit/2a2b6452dc326d8979bed0cf47fc54becd746619)) +* **Google Calendar Node:** All day option fix ([#6274](https://github.com/n8n-io/n8n/issues/6274)) ([5bef91e](https://github.com/n8n-io/n8n/commit/5bef91e3c84a15a30a893ce3b321b7a8ea926963)) +* Initialize license in queue mode correctly ([#6301](https://github.com/n8n-io/n8n/issues/6301)) ([42c79cd](https://github.com/n8n-io/n8n/commit/42c79cd6f1e495e60a9f038403d9a8a761318f52)) +* **OpenAI Node:** Descriptive errors ([#6270](https://github.com/n8n-io/n8n/issues/6270)) ([8fdfa3b](https://github.com/n8n-io/n8n/commit/8fdfa3b6b83c6a008d1be778dadcc2172e8a708d)) +* Prevent removing manual executions when setting says to save ([#6300](https://github.com/n8n-io/n8n/issues/6300)) ([55b755c](https://github.com/n8n-io/n8n/commit/55b755cb44a3bf9fc9d41af37b7818d3626baf0d)) +* **SSH Node:** Private key field as password and credential test ([#6298](https://github.com/n8n-io/n8n/issues/6298)) ([d5c7e6f](https://github.com/n8n-io/n8n/commit/d5c7e6f2cff63337948122a11c3707316c937b9f)) +* **SSH Node:** Replace ~ with /home/username ([#6269](https://github.com/n8n-io/n8n/issues/6269)) ([4219490](https://github.com/n8n-io/n8n/commit/421949067b47a25e859fbd45364ba657e7286599)) +* **Strapi Node:** Strapi credentials notice ([#6289](https://github.com/n8n-io/n8n/issues/6289)) ([bbe6d4c](https://github.com/n8n-io/n8n/commit/bbe6d4c4dbda0b2cba447cf1b0aa4a7f808096fb)) +* **Strava Trigger Node:** Fix issue with delete events failing to display data ([#6277](https://github.com/n8n-io/n8n/issues/6277)) ([8a8fed0](https://github.com/n8n-io/n8n/commit/8a8fed08407f20791ae01ab83e1ce3d99715dc5c)) +* **Wekan Node:** Handle response correctly ([#6296](https://github.com/n8n-io/n8n/issues/6296)) ([4d9c8b0](https://github.com/n8n-io/n8n/commit/4d9c8b07a93ea4f2e5ad913358bafb682f6f5506)) + + +### Features + +* Add SSO SAML metadataUrl support and various improvements ([#6139](https://github.com/n8n-io/n8n/issues/6139)) ([e3a53fd](https://github.com/n8n-io/n8n/commit/e3a53fd19d8c258a08baab9c090968104327a13b)) +* **core:** Remove all floating promises. Enforce `@typescript-eslint/no-floating-promises` ([#6281](https://github.com/n8n-io/n8n/issues/6281)) ([e046f65](https://github.com/n8n-io/n8n/commit/e046f656fefe951af71ab031a440729a5eb1c7cb)) +* **core:** Replace client-oauth2 with an in-repo package ([#6266](https://github.com/n8n-io/n8n/issues/6266)) ([a1b1f24](https://github.com/n8n-io/n8n/commit/a1b1f24ddfd4da36f8dd04e34e2675a3993755ca)) +* **Execution Data Node:** New node ([#6247](https://github.com/n8n-io/n8n/issues/6247)) ([3f7c4f0](https://github.com/n8n-io/n8n/commit/3f7c4f0ad485a0a4049f371723b01847077f7ccd)) +* **Gotify Node:** Add support for self signed certificates ([#6053](https://github.com/n8n-io/n8n/issues/6053)) ([401cffd](https://github.com/n8n-io/n8n/commit/401cffde57aa153bc2d1589bc8d11d7951f2ade1)) +* **Ldap Node:** Add LDAP node ([#4783](https://github.com/n8n-io/n8n/issues/4783)) ([ec393bc](https://github.com/n8n-io/n8n/commit/ec393bc041e9e7590e7b0a2821976f104f5c23bb)) +* **LoneScale Node:** Add LoneScale node and Trigger node ([#5146](https://github.com/n8n-io/n8n/issues/5146)) ([4b85433](https://github.com/n8n-io/n8n/commit/4b854333d49c661fe11f19a176a147dbf28e697f)) +* **RabbitMQ Node:** Add mode for acknowledging and deleting from queue later in workflow ([#6225](https://github.com/n8n-io/n8n/issues/6225)) ([f5950b2](https://github.com/n8n-io/n8n/commit/f5950b201c6ff412b9a304052f05eb2c3b8a7c51)) +* **Send Email Node:** Add content-id for email attachments ([#3632](https://github.com/n8n-io/n8n/issues/3632)) ([8fe8aad](https://github.com/n8n-io/n8n/commit/8fe8aad6a77bbec7a26c87f8bad9593852e8d464)) +* **SSH Node:** Credentials test ([#6279](https://github.com/n8n-io/n8n/issues/6279)) ([3569d53](https://github.com/n8n-io/n8n/commit/3569d53917b41b758a96293a2b33a06cbf2c0a70)) + + + +# [0.229.0](https://github.com/n8n-io/n8n/compare/n8n@0.228.0...n8n@0.229.0) (2023-05-17) + + +### Bug Fixes + +* **Code Node:** Restore help text ([#6231](https://github.com/n8n-io/n8n/issues/6231)) ([e72d564](https://github.com/n8n-io/n8n/commit/e72d564bf84460ce085f022f186e8101524f2e7b)) +* **core:** Make sure that special polling parameters are available on community nodes as well ([#6230](https://github.com/n8n-io/n8n/issues/6230)) ([9db49d0](https://github.com/n8n-io/n8n/commit/9db49d0c18f007b974594b918728e430ec510f54)) +* Remove workflow execution credential error message when instance owner ([#6116](https://github.com/n8n-io/n8n/issues/6116)) ([e81a964](https://github.com/n8n-io/n8n/commit/e81a96483af6e0d0a3cf62481f5e9a37d6a62b6e)) + + +### Features + +* **core:** Reduce the number of events sent to Sentry ([#6235](https://github.com/n8n-io/n8n/issues/6235)) ([a4c0cc9](https://github.com/n8n-io/n8n/commit/a4c0cc9b5c56639067918f1bad1baf4eb201e48b)) +* **core:** Return OAuth2 error body if available ([#5794](https://github.com/n8n-io/n8n/issues/5794)) ([79d0a0f](https://github.com/n8n-io/n8n/commit/79d0a0f2470905f98b71fb5c8ca007244004f99a)) +* **editor:** Add cloud ExecutionsUsage and API blocking using licenses ([#6159](https://github.com/n8n-io/n8n/issues/6159)) ([cd7c312](https://github.com/n8n-io/n8n/commit/cd7c312fbd172b5d3c8bbeaf775f7b5bb4611aa5)), closes [#6187](https://github.com/n8n-io/n8n/issues/6187) +* **editor:** Add color picker design system component ([#6179](https://github.com/n8n-io/n8n/issues/6179)) ([823e885](https://github.com/n8n-io/n8n/commit/823e88500c35508d6322242bca5749d711fb2b31)) +* **editor:** Drop support for legacy browsers that do not have native ESM support ([#6239](https://github.com/n8n-io/n8n/issues/6239)) ([9182d15](https://github.com/n8n-io/n8n/commit/9182d1558a1f98e0ea1b9fbaddabf7c8b4836e94)) +* **editor:** Updating node reference pattern in expression editor ([#6228](https://github.com/n8n-io/n8n/issues/6228)) ([13bcec1](https://github.com/n8n-io/n8n/commit/13bcec1661e1da736ff9c93869bc49a3038bdf1b)) +* **editor:** Version Control settings update (WIP) ([#6233](https://github.com/n8n-io/n8n/issues/6233)) ([0666377](https://github.com/n8n-io/n8n/commit/0666377ef8074ad093391d41e08e194704a25dbd)) +* **Google Ads Node:** Update to support v13 ([#6212](https://github.com/n8n-io/n8n/issues/6212)) ([bd1bffc](https://github.com/n8n-io/n8n/commit/bd1bffcd536eedde8582a354c11349dbddd2b9a2)) +* **Respond to Webhook Node:** Move from Binary Buffer to Binary streaming ([#5613](https://github.com/n8n-io/n8n/issues/5613)) ([8ae2d80](https://github.com/n8n-io/n8n/commit/8ae2d801d8e2c881fcff5f7cf4fcb699c10b2be2)) + + + +# [0.228.0](https://github.com/n8n-io/n8n/compare/n8n@0.227.0...n8n@0.228.0) (2023-05-11) + + +### Bug Fixes + +* **AWS Rekognition Node:** Fix all different action type ([#6136](https://github.com/n8n-io/n8n/issues/6136)) ([22b82a4](https://github.com/n8n-io/n8n/commit/22b82a43a24bb8415eb8f4a941b05647ef8904c2)) +* **core:** Ensure DB repositories are initialized before the DB migrations are run ([#6220](https://github.com/n8n-io/n8n/issues/6220)) ([500c0eb](https://github.com/n8n-io/n8n/commit/500c0ebce34dc2d21a531176dee965a70abec5f8)) +* **core:** Move nodeExecute InternalHook calls to hookFunctionsSave ([#6193](https://github.com/n8n-io/n8n/issues/6193)) ([f00b2ae](https://github.com/n8n-io/n8n/commit/f00b2ae3eaa225e483abc8defdc58d27b7d2c5e8)) +* Correctly save executions that failed when polling as error instead of new ([#6192](https://github.com/n8n-io/n8n/issues/6192)) ([06948b5](https://github.com/n8n-io/n8n/commit/06948b5ba5775b4f03d1ce46d57a461014317d51)) +* **editor:** Add loading skeletons to Executions list page ([#6184](https://github.com/n8n-io/n8n/issues/6184)) ([eae3a55](https://github.com/n8n-io/n8n/commit/eae3a55cc6b87bc8998d18d3d32d0d03013996b1)) +* **editor:** Display SSO entry in Settings on Cloud ([#6181](https://github.com/n8n-io/n8n/issues/6181)) ([b0a1899](https://github.com/n8n-io/n8n/commit/b0a1899e7141e5726d4fcbca6bba47e8e4b5cef7)) +* **editor:** Fix polling trigger check for `runData` ([#6130](https://github.com/n8n-io/n8n/issues/6130)) ([80831cd](https://github.com/n8n-io/n8n/commit/80831cd7c60f77557c37317600690a289d966448)) +* **editor:** Fix viewing and downloading of binary data ([#6218](https://github.com/n8n-io/n8n/issues/6218)) ([b9779c3](https://github.com/n8n-io/n8n/commit/b9779c32936c8b5e2385226ecab1025ff88d7044)) +* **editor:** Flag issues only on workflow activation ([#6127](https://github.com/n8n-io/n8n/issues/6127)) ([1b49c17](https://github.com/n8n-io/n8n/commit/1b49c17f38e97547430c407e21284b0c508469fa)) +* **editor:** Remove duplicate mapping of `item.json` key in data pinning ([#6135](https://github.com/n8n-io/n8n/issues/6135)) ([91fee0c](https://github.com/n8n-io/n8n/commit/91fee0ca667f233c0bde0dc6089bbed7d7db5b5f)) +* **editor:** Show the correct actions count in the nodes list ([#6183](https://github.com/n8n-io/n8n/issues/6183)) ([751e132](https://github.com/n8n-io/n8n/commit/751e132968470144cfca1c1b7ca22caf2c4c1de4)) +* **editor:** Update and add design system checkbox component to Editor ([#6178](https://github.com/n8n-io/n8n/issues/6178)) ([13c143e](https://github.com/n8n-io/n8n/commit/13c143eb6df41457fbd361674f2063b983a0e077)) +* **editor:** Update and fix storybook (was failing to run in local dev mode) ([#6180](https://github.com/n8n-io/n8n/issues/6180)) ([1e6a75f](https://github.com/n8n-io/n8n/commit/1e6a75f3416cdfcce1299dc9d242e23d0ea97ad3)) +* **FTP Node:** Use filename instead of remote filepath for downloaded binary data ([#6170](https://github.com/n8n-io/n8n/issues/6170)) ([be08933](https://github.com/n8n-io/n8n/commit/be089331b372e029ab5516b91e63a2d5d9033719)) +* **Google Sheets Node:** Upgrade xlsx to address CVE-2023-30533 ([#6172](https://github.com/n8n-io/n8n/issues/6172)) ([45dc985](https://github.com/n8n-io/n8n/commit/45dc985af742b049dc5673cf972da704d1f1f220)) +* **HTTP Request Node:** Correctly doesn't redirect on non GET method ([#6132](https://github.com/n8n-io/n8n/issues/6132)) ([3f5c606](https://github.com/n8n-io/n8n/commit/3f5c6062542f3b2b8a02cf0820e03da3f01d8bf2)) +* **MySQL Node:** Node should return date types as strings ([#6169](https://github.com/n8n-io/n8n/issues/6169)) ([5d77ec7](https://github.com/n8n-io/n8n/commit/5d77ec76e3c47fe9f9d7f31fe6c03827685ec576)) +* **Postgres Node:** Always return TIMESTAMP and TIMESTAMPZ as ISO string ([#6145](https://github.com/n8n-io/n8n/issues/6145)) ([0eb4d9f](https://github.com/n8n-io/n8n/commit/0eb4d9fc16aad1d1a350ba074c4b86712fbd90a1)) +* Prevent overflow when rendering expression hints ([#6214](https://github.com/n8n-io/n8n/issues/6214)) ([c717771](https://github.com/n8n-io/n8n/commit/c7177719e5f60813f4d15f7f97f1b4f253e29b07)) +* Prevent unnecessary error messages also for data loaded flag ([#6201](https://github.com/n8n-io/n8n/issues/6201)) ([d5e62ff](https://github.com/n8n-io/n8n/commit/d5e62ff096ddefd52dae742166fe92ceef17ded6)) + + +### Features + +* **Airtable Node:** Access token support ([#6160](https://github.com/n8n-io/n8n/issues/6160)) ([f9fd820](https://github.com/n8n-io/n8n/commit/f9fd82040ac09914a03e5b9f8f84fce5f6a99835)) +* **Code Node:** Add Python support ([#4295](https://github.com/n8n-io/n8n/issues/4295)) ([35c8510](https://github.com/n8n-io/n8n/commit/35c8510ab6d607fe59056a4aa1d8d148e194d12c)) +* **core:** Improve health check ([#6205](https://github.com/n8n-io/n8n/issues/6205)) ([9e7b9fb](https://github.com/n8n-io/n8n/commit/9e7b9fb443046c73135efb70d0d1894207125f66)) +* Create NPM node ([#6177](https://github.com/n8n-io/n8n/issues/6177)) ([f3bc6f1](https://github.com/n8n-io/n8n/commit/f3bc6f19b68f6bd4bd99614f60bd6833bd15813f)) +* **Date & Time Node:** Overhaul of the node ([#5904](https://github.com/n8n-io/n8n/issues/5904)) ([7d1d1f7](https://github.com/n8n-io/n8n/commit/7d1d1f7872163cecb468c317670da2d8b89a7651)) +* **HubSpot Node:** Overhaul the HubSpot Node ([#4337](https://github.com/n8n-io/n8n/issues/4337)) ([2913e67](https://github.com/n8n-io/n8n/commit/2913e676e639757cdf1a513ad35a7df0e494fa6f)) +* **JotForm Trigger Node:** Add support for hipaa-api.jotform.com ([#6171](https://github.com/n8n-io/n8n/issues/6171)) ([3074f42](https://github.com/n8n-io/n8n/commit/3074f42b3b98cf0dbdc13ad7b927d6b7fc726fab)) +* **Kafka Trigger Node:** Add non-parallel execution ([#6175](https://github.com/n8n-io/n8n/issues/6175)) ([814ea51](https://github.com/n8n-io/n8n/commit/814ea5185ce82e0a7687b41161602b45f92bee93)) + + + +# [0.227.0](https://github.com/n8n-io/n8n/compare/n8n@0.226.0...n8n@0.227.0) (2023-05-03) + + +### Bug Fixes + +* **AWS S3 Node:** Fix File upload, and add node tests ([#6153](https://github.com/n8n-io/n8n/issues/6153)) ([deb4c04](https://github.com/n8n-io/n8n/commit/deb4c04f346f8e5985b5f6c3f3a3e929fde13e5b)) +* **Compression Node:** Fix issue with decompression failing with uppercase extensions ([#6098](https://github.com/n8n-io/n8n/issues/6098)) ([aa59329](https://github.com/n8n-io/n8n/commit/aa593298365eabd6eb1dda9fe3f06e7eae7c5ea9)) +* **core:** Account for nodes with renamable content ([#6109](https://github.com/n8n-io/n8n/issues/6109)) ([c99f158](https://github.com/n8n-io/n8n/commit/c99f158120b3c1ffca1718be337afc73d6ec9e65)) +* **core:** Assign Unknown Error only if message or description not present in error ([8aedc03](https://github.com/n8n-io/n8n/commit/8aedc03ddad3f83ffd2569be5b61710f27d2f672)) +* **core:** Avoid using `Object.keys` on Buffer and other non-plain objects ([#6131](https://github.com/n8n-io/n8n/issues/6131)) ([a3aba83](https://github.com/n8n-io/n8n/commit/a3aba835a15a8a32acc1e1ff0b972007df2b2b34)) +* **core:** Better error message in Webhook node when using the POST method ([a0dd17e](https://github.com/n8n-io/n8n/commit/a0dd17e1151e668b95dc57367a0b100d00913ea3)) +* **core:** Better errors for common status codes fix ([700cc39](https://github.com/n8n-io/n8n/commit/700cc39cbc7da3c70513ff586dc97319456308ae)) +* **core:** Fix `hasOwnProperty` on augmented objects ([#6124](https://github.com/n8n-io/n8n/issues/6124)) ([206b6b9](https://github.com/n8n-io/n8n/commit/206b6b90b860ceaab58b9bdd5ff20ffc741c13fa)) +* **core:** Fix bug running addUserActivatedColumn migration on MariaDB ([#6157](https://github.com/n8n-io/n8n/issues/6157)) ([570790e](https://github.com/n8n-io/n8n/commit/570790ed0c9521e09b6414bc1da2c596f17ff072)) +* **core:** Fix canceled execution status ([#6142](https://github.com/n8n-io/n8n/issues/6142)) ([839a56a](https://github.com/n8n-io/n8n/commit/839a56a682674baf44d5beececdbe677d18c0d89)) +* **core:** Improve saml endpoints and audit events ([#6107](https://github.com/n8n-io/n8n/issues/6107)) ([c0b1cdd](https://github.com/n8n-io/n8n/commit/c0b1cddc91fe199377c301f02f230827f231ba73)) +* **core:** Remove SAML config metadataUrl if XML metadata is set directly ([#6143](https://github.com/n8n-io/n8n/issues/6143)) ([25fe14b](https://github.com/n8n-io/n8n/commit/25fe14be56482477c00a360914730b25c9028443)) +* **core:** Skip auth for controllers/routes that don't use the `Authorized` decorator, or use `Authorized('none')` ([#6106](https://github.com/n8n-io/n8n/issues/6106)) ([59aee22](https://github.com/n8n-io/n8n/commit/59aee2270bdc0c8360aa534237b7f6015d382346)) +* Correctly allow sharees to test credential when opening the modal ([#6111](https://github.com/n8n-io/n8n/issues/6111)) ([2e73f4a](https://github.com/n8n-io/n8n/commit/2e73f4abd04ba7ab929b0fce57bf12651a0a2e49)) +* **Date & Time Node:** Numbers conversions fix ([14f7114](https://github.com/n8n-io/n8n/commit/14f71146e21026721fc9d5883bb9d73d38afcf8c)) +* **editor:** Change execution list tab loader design ([#6120](https://github.com/n8n-io/n8n/issues/6120)) ([188ef04](https://github.com/n8n-io/n8n/commit/188ef042cd58b9194dadef4cc68deb3510688c26)) +* **editor:** Disable changing of email and pw when SAML login enabled ([#6104](https://github.com/n8n-io/n8n/issues/6104)) ([3e9ecd9](https://github.com/n8n-io/n8n/commit/3e9ecd939742df8d8ced9179aaa26b081139befa)) +* **editor:** Fix `Show details` summary ([#6113](https://github.com/n8n-io/n8n/issues/6113)) ([90a62cc](https://github.com/n8n-io/n8n/commit/90a62ccfb5b4a959d72336d284ad4ac3b17af582)) +* **editor:** Fix copy selection behavior ([#6112](https://github.com/n8n-io/n8n/issues/6112)) ([1607aeb](https://github.com/n8n-io/n8n/commit/1607aeb9f94700793d58604ea4f89c5555d43981)) +* **editor:** Fix cropped off completions docstrings ([#6129](https://github.com/n8n-io/n8n/issues/6129)) ([85e8145](https://github.com/n8n-io/n8n/commit/85e8145439f89e76fe5fe3a659430c03738d6e2b)) +* **editor:** Fix focus jumping when using chrome autofill ([#6140](https://github.com/n8n-io/n8n/issues/6140)) ([c63181b](https://github.com/n8n-io/n8n/commit/c63181b3171040c3dd3051c2a1358aea0af6bae0)) +* **editor:** Fix missing `Stop Listening` button ([#6125](https://github.com/n8n-io/n8n/issues/6125)) ([20a72bb](https://github.com/n8n-io/n8n/commit/20a72bb28b981e9c8d12dd6398d843b39d80daac)) +* **editor:** Fix quote handling on dollar-sign variable completions ([#6128](https://github.com/n8n-io/n8n/issues/6128)) ([51f5990](https://github.com/n8n-io/n8n/commit/51f59905591fa492017fc3ced46601eeca5fb057)) +* **editor:** Fix sidebar button styling ([#6138](https://github.com/n8n-io/n8n/issues/6138)) ([a72a511](https://github.com/n8n-io/n8n/commit/a72a5112f34a0d8ab248f687c74b758c8db6729c)) +* **editor:** Fix unique names for node duplication ([#6134](https://github.com/n8n-io/n8n/issues/6134)) ([71ae6c6](https://github.com/n8n-io/n8n/commit/71ae6c66ef32ba86edf0bb9cdb9f24a6d40ee80c)) +* **editor:** Fix unscrollable node settings ([#6133](https://github.com/n8n-io/n8n/issues/6133)) ([c8ff368](https://github.com/n8n-io/n8n/commit/c8ff368fc7be58e7c42746f7e7a4c5f6a4149d3e)) +* **editor:** Loading state for executions tab ([#6100](https://github.com/n8n-io/n8n/issues/6100)) ([4cbb05b](https://github.com/n8n-io/n8n/commit/4cbb05b0017ffd77eca51fc5b9c5c4868515a60d)) +* **editor:** Remove pagination from binary data output ([#6093](https://github.com/n8n-io/n8n/issues/6093)) ([c6e665a](https://github.com/n8n-io/n8n/commit/c6e665a975958c433d7991c057a3e4be644daff1)) +* **editor:** Restrict `[empty]` in parameter input hint to zero-length string ([#6003](https://github.com/n8n-io/n8n/issues/6003)) ([8862e1e](https://github.com/n8n-io/n8n/commit/8862e1e7df0be62ab3746b70e613ffd2ab26bc4a)) +* **editor:** Show error in RLC if credentials are not set ([#6108](https://github.com/n8n-io/n8n/issues/6108)) ([2c240a0](https://github.com/n8n-io/n8n/commit/2c240a0e4ecd9157dca612d98a8a7c68a65a9909)) +* **HTTP Request Node:** Add description for 'Specify Body' option ([#6114](https://github.com/n8n-io/n8n/issues/6114)) ([af097ae](https://github.com/n8n-io/n8n/commit/af097ae22c7e87918ada2527c6a2fe62cb8f318a)) +* **HTTP Request Node:** Always lowercase headers ([983e6e1](https://github.com/n8n-io/n8n/commit/983e6e124eb9557eec55c5f2e2b834a926243955)) +* **Mattermost Node:** Fix base url trailing slash error ([#6097](https://github.com/n8n-io/n8n/issues/6097)) ([25a386d](https://github.com/n8n-io/n8n/commit/25a386dd70df516090e622d921a79456fc7d16e3)) +* **Merge Node:** Do not error if expected key is missing ([d219af7](https://github.com/n8n-io/n8n/commit/d219af75cf37c603c34b1ca5851cafd4a490889c)) +* Prevent displaying an endless timer in the execution list for finished executions ([#6137](https://github.com/n8n-io/n8n/issues/6137)) ([701105e](https://github.com/n8n-io/n8n/commit/701105edcf5284f276fe146d8267e1a5560ab186)) +* Prevent invocations of 'GET /rest/license' from returning an error when ephemeral licenses are used ([#6154](https://github.com/n8n-io/n8n/issues/6154)) ([a3d26ef](https://github.com/n8n-io/n8n/commit/a3d26eff79013642865fa59078732526850b96a6)) +* **Slack Node:** Restore ability to send text in addition of blocks or attachments ([8669f95](https://github.com/n8n-io/n8n/commit/8669f95736797da4f3efd33468cdeac5d28667b0)) + + +### Features + +* **core:** Add notice to alert users a new version is available ([cb497fb](https://github.com/n8n-io/n8n/commit/cb497fbbecdba670d5121fa2c6eaf7c66d8a8a38)) +* **editor:** Add support for `loadOptionsDependsOn` to RLC ([#6101](https://github.com/n8n-io/n8n/issues/6101)) ([b17d5f9](https://github.com/n8n-io/n8n/commit/b17d5f9aa086bf408e8450244460ada57de0d7c3)) +* **editor:** Add version controls settings (WIP) ([#6036](https://github.com/n8n-io/n8n/issues/6036)) ([0c9ce3a](https://github.com/n8n-io/n8n/commit/0c9ce3a2ec9487b4eb9130651927e91dcd0f85af)) +* **Item Lists Node:** Split out items work on objects as well as arrays ([c65ac03](https://github.com/n8n-io/n8n/commit/c65ac0336821868c289adc55abab40017b1856da)) +* **Microsoft Excel 365 Node:** Overhaul ([5364a2d](https://github.com/n8n-io/n8n/commit/5364a2dff32e05147b8e9dd392038eb36791e5dc)) + + + +## [0.226.2](https://github.com/n8n-io/n8n/compare/n8n@0.226.1...n8n@0.226.2) (2023-05-03) + + +### Bug Fixes + +* **core:** Fix bug running addUserActivatedColumn migration on MariaDB ([#6157](https://github.com/n8n-io/n8n/issues/6157)) ([aa8e96d](https://github.com/n8n-io/n8n/commit/aa8e96dd6b19f105a957da71a5c4d7ab5caecc01)) + + + +## [0.226.1](https://github.com/n8n-io/n8n/compare/n8n@0.226.0...n8n@0.226.1) (2023-05-02) + + +### Bug Fixes + +* **Compression Node:** Fix issue with decompression failing with uppercase extensions ([#6098](https://github.com/n8n-io/n8n/issues/6098)) ([7136500](https://github.com/n8n-io/n8n/commit/71365002daa71c5fa5e68a5bb373ee200a05b7b9)) +* **core:** Account for nodes with renamable content ([#6109](https://github.com/n8n-io/n8n/issues/6109)) ([b561d46](https://github.com/n8n-io/n8n/commit/b561d463265831f3cd370ec99982847f2bddca41)) +* **core:** Fix `hasOwnProperty` on augmented objects ([#6124](https://github.com/n8n-io/n8n/issues/6124)) ([2f015c0](https://github.com/n8n-io/n8n/commit/2f015c0f153785384b009e71bf4994e18b5d06b8)) +* **core:** Fix canceled execution status ([#6142](https://github.com/n8n-io/n8n/issues/6142)) ([1796101](https://github.com/n8n-io/n8n/commit/1796101fed03d04906f2341a0488b60b7b5bf71c)) +* **core:** Skip auth for controllers/routes that don't use the `Authorized` decorator, or use `Authorized('none')` ([#6106](https://github.com/n8n-io/n8n/issues/6106)) ([9d44991](https://github.com/n8n-io/n8n/commit/9d44991b2a8c9384e2bf32204ac47a4ecb0131be)) +* Correctly allow sharees to test credential when opening the modal ([#6111](https://github.com/n8n-io/n8n/issues/6111)) ([240bb47](https://github.com/n8n-io/n8n/commit/240bb47e8e2cd99c56b8837079073bbf2bf5f687)) +* **Date & Time Node:** Numbers conversions fix ([e11e7cd](https://github.com/n8n-io/n8n/commit/e11e7cd603a145c83c36f6a6deb821a56ccabd6f)) +* **editor:** Change execution list tab loader design ([#6120](https://github.com/n8n-io/n8n/issues/6120)) ([ffc033f](https://github.com/n8n-io/n8n/commit/ffc033ff8ff391be09da8dbd62f8eb06a94f6cb0)) +* **editor:** Fix `Show details` summary ([#6113](https://github.com/n8n-io/n8n/issues/6113)) ([e12bafb](https://github.com/n8n-io/n8n/commit/e12bafb9473393dd9e139d0e0a4a21241b417645)) +* **editor:** Fix copy selection behavior ([#6112](https://github.com/n8n-io/n8n/issues/6112)) ([0efd94a](https://github.com/n8n-io/n8n/commit/0efd94a875fe9e3cac5da3421effcf6c8f6eaae8)) +* **editor:** Fix cropped off completions docstrings ([#6129](https://github.com/n8n-io/n8n/issues/6129)) ([06594cc](https://github.com/n8n-io/n8n/commit/06594cc36f1a0d4069e556d6dbb4e268a78301c6)) +* **editor:** Fix missing `Stop Listening` button ([#6125](https://github.com/n8n-io/n8n/issues/6125)) ([dcbd2d2](https://github.com/n8n-io/n8n/commit/dcbd2d2bc1c59ca8bbe6a802a2a8f482b3d20d74)) +* **editor:** Fix quote handling on dollar-sign variable completions ([#6128](https://github.com/n8n-io/n8n/issues/6128)) ([c23ad35](https://github.com/n8n-io/n8n/commit/c23ad3502d0a8c4bcbd60cce2fc13a91981fb119)) +* **editor:** Fix sidebar button styling ([#6138](https://github.com/n8n-io/n8n/issues/6138)) ([d3f4bc1](https://github.com/n8n-io/n8n/commit/d3f4bc1859104f11d2cf38ef3f3405d62c88bc6d)) +* **editor:** Fix unique names for node duplication ([#6134](https://github.com/n8n-io/n8n/issues/6134)) ([48a4068](https://github.com/n8n-io/n8n/commit/48a4068d7ec1ddf5d5a4d10620dce1c89cb8fa34)) +* **editor:** Fix unscrollable node settings ([#6133](https://github.com/n8n-io/n8n/issues/6133)) ([f762f16](https://github.com/n8n-io/n8n/commit/f762f16afb7b9ea54e29950c06133a292dc87b3f)) +* **editor:** Loading state for executions tab ([#6100](https://github.com/n8n-io/n8n/issues/6100)) ([2e12c50](https://github.com/n8n-io/n8n/commit/2e12c50477014c57fa665ba36f48ff658cf7ee94)) +* **editor:** Remove pagination from binary data output ([#6093](https://github.com/n8n-io/n8n/issues/6093)) ([7b7d9de](https://github.com/n8n-io/n8n/commit/7b7d9de7586905b2740541e7f0289bc78f8f2ad7)) +* **editor:** Show error in RLC if credentials are not set ([#6108](https://github.com/n8n-io/n8n/issues/6108)) ([5bf3400](https://github.com/n8n-io/n8n/commit/5bf3400ca7ffa04bb51214bc539435b847614cbb)) +* **HTTP Request Node:** Add description for 'Specify Body' option ([#6114](https://github.com/n8n-io/n8n/issues/6114)) ([69b6ba8](https://github.com/n8n-io/n8n/commit/69b6ba85202c5a28052a56c041b880bfa9fcf0a0)) +* **HTTP Request Node:** Always lowercase headers ([31c56a1](https://github.com/n8n-io/n8n/commit/31c56a12f273d5569ed3ac4d72cf74c90cc24b31)) +* **Mattermost Node:** Fix base url trailing slash error ([#6097](https://github.com/n8n-io/n8n/issues/6097)) ([788fda1](https://github.com/n8n-io/n8n/commit/788fda1b7dbf29d7a7e614a959ac3630b2a6559f)) +* **Merge Node:** Do not error if expected key is missing ([8b59564](https://github.com/n8n-io/n8n/commit/8b59564776ebaf2c54b9e2dae5b77109895da883)) +* Prevent displaying an endless timer in the execution list for finished executions ([#6137](https://github.com/n8n-io/n8n/issues/6137)) ([2672896](https://github.com/n8n-io/n8n/commit/2672896c8e2de7d1f92899a392a3f2b3f60aaef3)) +* **Slack Node:** Restore ability to send text in addition of blocks or attachments ([625d672](https://github.com/n8n-io/n8n/commit/625d6729b4158fbc811941ce45819f32372e6265)) + + + +# [0.226.0](https://github.com/n8n-io/n8n/compare/n8n@0.225.0...n8n@0.226.0) (2023-04-26) + + +### Bug Fixes + +* **Code Node:** Update vm2 to address CVE-2023-30547 ([#6039](https://github.com/n8n-io/n8n/issues/6039)) ([8268f23](https://github.com/n8n-io/n8n/commit/8268f235abf5277480c215ea953fc3db1c275c95)) +* **core:** Improve domain and url matching for extractDomain and extractUrl ([#6010](https://github.com/n8n-io/n8n/issues/6010)) ([33fb732](https://github.com/n8n-io/n8n/commit/33fb73217dca68244c93296f1a4be96cc83e4480)) +* **core:** Serialize dates and regexps when reading from augmented objects ([#6086](https://github.com/n8n-io/n8n/issues/6086)) ([a4eb46a](https://github.com/n8n-io/n8n/commit/a4eb46acc178533e3c63fedcf0d884a5b66bae28)) +* **core:** Skip license activation when instance was already activated ([#6064](https://github.com/n8n-io/n8n/issues/6064)) ([eaf7090](https://github.com/n8n-io/n8n/commit/eaf70909197ed511efe9add956eb5e4f78b27e20)) +* **editor:** Clean up demo and template callouts from workflows page ([#6023](https://github.com/n8n-io/n8n/issues/6023)) ([4ee5083](https://github.com/n8n-io/n8n/commit/4ee508385ab5ac379925b315006a2d9389183751)) +* **editor:** Fix memory leak in Node Detail View by correctly unsubscribing from event buses ([#6021](https://github.com/n8n-io/n8n/issues/6021)) ([0970ec0](https://github.com/n8n-io/n8n/commit/0970ec066d8f80082f49f0b0f8987b95392102bf)) +* **editor:** Fix typo in SSO upgrade link ([#6031](https://github.com/n8n-io/n8n/issues/6031)) ([9b59f1d](https://github.com/n8n-io/n8n/commit/9b59f1df9c358d3677b4cbc3e80a73af03b7981d)) +* **editor:** Resolve expressions for grandparent nodes ([#5859](https://github.com/n8n-io/n8n/issues/5859)) ([a19d444](https://github.com/n8n-io/n8n/commit/a19d4447ac38e40d1fd1da83beb6c20fb7b2d0ed)) +* **editor:** SettingsSidebar should disconnect from push when navigating away ([#6025](https://github.com/n8n-io/n8n/issues/6025)) ([41660d9](https://github.com/n8n-io/n8n/commit/41660d9e281432b87d875c98992bfaf54d25b37f)) +* **editor:** Update LDAP and Log streaming paywalls ([#6069](https://github.com/n8n-io/n8n/issues/6069)) ([8a3b3e5](https://github.com/n8n-io/n8n/commit/8a3b3e53e1ac0a2a1864b42b24ab46f25253a9d3)) +* **editor:** Update SSO upgrade link ([#6016](https://github.com/n8n-io/n8n/issues/6016)) ([953198e](https://github.com/n8n-io/n8n/commit/953198e092a44029805ff85e4607355444ea8b2c)) +* **Notion Node:** Update credential test to not require user permissions ([#6022](https://github.com/n8n-io/n8n/issues/6022)) ([a68330f](https://github.com/n8n-io/n8n/commit/a68330ff66744551270f40399a6fd7fe330e6f27)) + + +### Features + +* **core:** Add license:info command ([#6047](https://github.com/n8n-io/n8n/issues/6047)) ([ab12d3e](https://github.com/n8n-io/n8n/commit/ab12d3e3278745b290de82c16f358841b20850b4)) +* **core:** Add SSH key generation ([#6006](https://github.com/n8n-io/n8n/issues/6006)) ([71ed1f4](https://github.com/n8n-io/n8n/commit/71ed1f410c5a80f35ecaf913a5522b7788998695)) +* **core:** Add support for digestAuth to httpRequest and declarative style ([#5676](https://github.com/n8n-io/n8n/issues/5676)) ([62f993c](https://github.com/n8n-io/n8n/commit/62f993c84f6ecf2f4d0431d505ba18a0253bd244)) +* **core:** Manage version control settings ([#6079](https://github.com/n8n-io/n8n/issues/6079)) ([f3b4701](https://github.com/n8n-io/n8n/commit/f3b470186360dc3c3a3df599f0a9740183e86696)) +* **core:** Upgrade google-timezones-json to use the correct timezone for Sao Paulo ([#6042](https://github.com/n8n-io/n8n/issues/6042)) ([b8cb5d7](https://github.com/n8n-io/n8n/commit/b8cb5d7f0b11fb138d5c4714bcc9e1d9b6366d76)), closes [#2647](https://github.com/n8n-io/n8n/issues/2647) +* **editor:** Add disable template experiment ([#5963](https://github.com/n8n-io/n8n/issues/5963)) ([a74284b](https://github.com/n8n-io/n8n/commit/a74284bac387338e870dc81ac33748af55521274)) +* **editor:** Add SQL editor support ([#5517](https://github.com/n8n-io/n8n/issues/5517)) ([70aaf24](https://github.com/n8n-io/n8n/commit/70aaf2478461d9ceea98bc91dc935493fd6dbe24)) +* **editor:** Enhance Node Creator actions view ([#5954](https://github.com/n8n-io/n8n/issues/5954)) ([390841b](https://github.com/n8n-io/n8n/commit/390841bbf0fdd4d536101593711a6658ea2784e4)) +* **editor:** Version control (WIP) ([#6013](https://github.com/n8n-io/n8n/issues/6013)) ([0e0a064](https://github.com/n8n-io/n8n/commit/0e0a064fa7ae54a8a6b695bd4bb19da71334fea0)) +* **editor:** Version control paywall (WIP) ([#6030](https://github.com/n8n-io/n8n/issues/6030)) ([ef79b03](https://github.com/n8n-io/n8n/commit/ef79b03f38460a20658c62fd35dbcaf6d266582f)) +* **Google BigQuery Node:** Node improvements ([#4877](https://github.com/n8n-io/n8n/issues/4877)) ([9817a15](https://github.com/n8n-io/n8n/commit/9817a15da4c80425fb77273ed7c9acbe020f0f48)) + + + +## [0.225.2](https://github.com/n8n-io/n8n/compare/n8n@0.225.1...n8n@0.225.2) (2023-04-25) + + +### Bug Fixes + +* **core:** Upgrade google-timezones-json to use the correct timezone for Sao Paulo ([#6042](https://github.com/n8n-io/n8n/issues/6042)) ([f93fd5a](https://github.com/n8n-io/n8n/commit/f93fd5aba2583e1c62efe8dcb423559413cf9c6a)), closes [#2647](https://github.com/n8n-io/n8n/issues/2647) +* **Code Node:** Update vm2 to address CVE-2023-30547 ([#6039](https://github.com/n8n-io/n8n/issues/6039)) ([f1ca4e2](https://github.com/n8n-io/n8n/commit/f1ca4e232865a0ee6ac178b11515de115b0bfd09)) + + + +# [0.224.4](https://github.com/n8n-io/n8n/compare/n8n@0.224.2...n8n@0.224.4) (2023-04-24) + + +### Bug Fixes + +* **core:** Upgrade google-timezones-json to use the correct timezone for Sao Paulo ([#6042](https://github.com/n8n-io/n8n/issues/6042)) ([c23a592](https://github.com/n8n-io/n8n/commit/c23a5923f8df787758f756c529518c9e8b93b96e)), closes [#2647](https://github.com/n8n-io/n8n/issues/2647) +* **Code Node:** Update vm2 to address CVE-2023-30547 ([#6039](https://github.com/n8n-io/n8n/issues/6039)) ([6cd15bd](https://github.com/n8n-io/n8n/commit/6cd15bd889b6eec3b050cfe3c3b190707a09e898)) + + + +## [0.225.1](https://github.com/n8n-io/n8n/compare/n8n@0.225.0...n8n@0.225.1) (2023-04-20) + + +### Bug Fixes + +* **editor:** Clean up demo and template callouts from workflows page ([#6023](https://github.com/n8n-io/n8n/issues/6023)) ([6ec1c45](https://github.com/n8n-io/n8n/commit/6ec1c45355807e62f31a707bada823cdc73bc719)) +* **editor:** Fix memory leak in Node Detail View by correctly unsubscribing from event buses ([#6021](https://github.com/n8n-io/n8n/issues/6021)) ([1b9e047](https://github.com/n8n-io/n8n/commit/1b9e047ef5745f479e6693dca9696efbec32a7a6)) +* **editor:** SettingsSidebar should disconnect from push when navigating away ([#6025](https://github.com/n8n-io/n8n/issues/6025)) ([e9f8cfe](https://github.com/n8n-io/n8n/commit/e9f8cfe82182ee0d7c8c2394551791793cc71f47)) +* **Notion Node:** Update credential test to not require user permissions ([#6022](https://github.com/n8n-io/n8n/issues/6022)) ([6d02ae5](https://github.com/n8n-io/n8n/commit/6d02ae53cf1ec616abd47e434018bdf5e998f916)) + + + +## [0.224.2](https://github.com/n8n-io/n8n/compare/n8n@0.224.1...n8n@0.224.2) (2023-04-20) + + +### Bug Fixes + +* **core:** Fix paired item returning wrong data ([#5898](https://github.com/n8n-io/n8n/issues/5898)) ([2a45441](https://github.com/n8n-io/n8n/commit/2a45441d8aa1e9069af09eb28b9b26b0c4abf96e)) +* **core:** Make `getExecutionId` available on all nodes types ([#5990](https://github.com/n8n-io/n8n/issues/5990)) ([8373aab](https://github.com/n8n-io/n8n/commit/8373aab1fffc6f15e2a79462c97cd52cff277784)) +* **editor:** Fix memory leak in Node Detail View by correctly unsubscribing from event buses ([#6021](https://github.com/n8n-io/n8n/issues/6021)) ([d8fce5b](https://github.com/n8n-io/n8n/commit/d8fce5b1cbcded5dcb652b1b5bf252555343d4b1)) +* **editor:** Fix moving canvas on middle click preventing lasso selection ([#5996](https://github.com/n8n-io/n8n/issues/5996)) ([a7a5778](https://github.com/n8n-io/n8n/commit/a7a57782bbaadad342f592331b7b9d49aa0e62de)) +* **editor:** SettingsSidebar should disconnect from push when navigating away ([#6025](https://github.com/n8n-io/n8n/issues/6025)) ([b475c8f](https://github.com/n8n-io/n8n/commit/b475c8f26aea9c108a8ea29826619925516c372f)) +* **Google Sheets Trigger Node:** Return actual error message ([5e59141](https://github.com/n8n-io/n8n/commit/5e59141ec60566dbacea246402e57b13328a94b3)) +* **HTTP Request Node:** Fix itemIndex in HTTP Request errors ([#5991](https://github.com/n8n-io/n8n/issues/5991)) ([4a521a4](https://github.com/n8n-io/n8n/commit/4a521a416e3fb85ba58d4ca4ad420b485c220d96)) +* **Notion Node:** Update credential test to not require user permissions ([#6022](https://github.com/n8n-io/n8n/issues/6022)) ([14c9b5e](https://github.com/n8n-io/n8n/commit/14c9b5e6295a59b5ddbde0e07ba94250b50bcedf)) + + + +# [0.225.0](https://github.com/n8n-io/n8n/compare/n8n@0.224.0...n8n@0.225.0) (2023-04-19) + + +### Bug Fixes + +* **core:** Fix broken API permissions in public API ([#5978](https://github.com/n8n-io/n8n/issues/5978)) ([49d838f](https://github.com/n8n-io/n8n/commit/49d838f628a124f3497165437a384e78d8a8ff63)) +* **core:** Fix paired item returning wrong data ([#5898](https://github.com/n8n-io/n8n/issues/5898)) ([b13b7d7](https://github.com/n8n-io/n8n/commit/b13b7d73e7857fe9a264d9400adfa337907f659a)) +* **core:** Improve SAML connection test result views ([#5981](https://github.com/n8n-io/n8n/issues/5981)) ([4c994fa](https://github.com/n8n-io/n8n/commit/4c994faec1ed6173d99f5b01efd9678e54e7eb49)) +* **core:** Make `getExecutionId` available on all nodes types ([#5990](https://github.com/n8n-io/n8n/issues/5990)) ([c42820e](https://github.com/n8n-io/n8n/commit/c42820e82efe7365b5d7344bb3f474ba420ea7c9)) +* **core:** Skip SAML onboarding for users with first- and lastname ([#5966](https://github.com/n8n-io/n8n/issues/5966)) ([8474cd3](https://github.com/n8n-io/n8n/commit/8474cd386ddfca9e9078b45af65af9299d63eb85)) +* **editor:** Add padding to prepend input ([#5874](https://github.com/n8n-io/n8n/issues/5874)) ([cd89489](https://github.com/n8n-io/n8n/commit/cd894893aafe1fc25e0e556a9651ab458b50ae99)) +* **editor:** Cleanup demo/video experiment ([#5974](https://github.com/n8n-io/n8n/issues/5974)) ([c171365](https://github.com/n8n-io/n8n/commit/c171365d2a613ea1fb9b08c22c54be29d1c8ade7)) +* **editor:** Enterprise features missing with UM ([#5995](https://github.com/n8n-io/n8n/issues/5995)) ([f9a810a](https://github.com/n8n-io/n8n/commit/f9a810aaf7fd56beba1342016a96922e8b332951)) +* **editor:** Fix moving canvas on middle click preventing lasso selection ([#5996](https://github.com/n8n-io/n8n/issues/5996)) ([3c2a569](https://github.com/n8n-io/n8n/commit/3c2a56928b46425822795cf1594133a538f47c21)) +* **editor:** Make sure to redirect to blank canvas after personalisation modal ([#5980](https://github.com/n8n-io/n8n/issues/5980)) ([7c474d3](https://github.com/n8n-io/n8n/commit/7c474d3c92ecca8e44e8eea76ada69aa7e8f5987)) +* **editor:** Only treat as CTRL pressed by default on touch devices for MouseEvent ([#5968](https://github.com/n8n-io/n8n/issues/5968)) ([536d810](https://github.com/n8n-io/n8n/commit/536d8109b02d1a0f771055c36ff0f45dae08281e)) +* **editor:** Fix n8n-checkbox alignment ([#6004](https://github.com/n8n-io/n8n/issues/6004)) ([f544826](https://github.com/n8n-io/n8n/commit/f5448269ee9277f19b0943035d23ad0df1dcde67)) +* **Code Node:** Handle user code returning `null` and `undefined` ([#5989](https://github.com/n8n-io/n8n/issues/5989)) ([a3664de](https://github.com/n8n-io/n8n/commit/a3664de3556f9f8159ed310a289ec12a4cd2c5c5)) +* **Github Trigger Node:** Remove content_reference event ([#5830](https://github.com/n8n-io/n8n/issues/5830)) ([d288a91](https://github.com/n8n-io/n8n/commit/d288a918f17dad2d0e32cf2d66f94037c77679b3)) +* **Google Sheets Trigger Node:** Return actual error message ([ba5b4eb](https://github.com/n8n-io/n8n/commit/ba5b4eb42fa1b609ddbe726d3e8655c1f9d28a2e)) +* **HTTP Request Node:** Fix itemIndex in HTTP Request errors ([#5991](https://github.com/n8n-io/n8n/issues/5991)) ([b351c62](https://github.com/n8n-io/n8n/commit/b351c6265938a908f90237c834012cc19cf70dc3)) +* **NocoDB Node:** Fix for updating or deleting rows with not default primary keys ([ee7f863](https://github.com/n8n-io/n8n/commit/ee7f86394eaf7aceee5521a4178c80a3c05cc27d)) +* **OpenAI Node:** Update models to only show those supported ([#5805](https://github.com/n8n-io/n8n/issues/5805)) ([29959be](https://github.com/n8n-io/n8n/commit/29959be6883d48c0385f333b3d9798a8c7c91c43)) +* **OpenAI Node:** Update OpenAI Text Moderate input placeholder text ([#5823](https://github.com/n8n-io/n8n/issues/5823)) ([6b9909b](https://github.com/n8n-io/n8n/commit/6b9909bd80f4b04ec877fe7ee9b8a2619392d220)) + + +### Features + +* **core:** Add variables feature ([#5602](https://github.com/n8n-io/n8n/issues/5602)) ([1bb9871](https://github.com/n8n-io/n8n/commit/1bb987140af8e835770a0ca45403e274a793f22c)) +* **core:** Add versionControl feature flag ([#6000](https://github.com/n8n-io/n8n/issues/6000)) ([33299ca](https://github.com/n8n-io/n8n/commit/33299ca61aaec94714431a58286da4bb2cf829c1)) +* **core:** Support for google service account in HTTP node ([0b48088](https://github.com/n8n-io/n8n/commit/0b48088296a7f826be3664f10c847b9dca753732)) +* **editor:** Add Ask AI preview ([#5916](https://github.com/n8n-io/n8n/issues/5916)) ([f8f8374](https://github.com/n8n-io/n8n/commit/f8f8374506c3d0c2ad7cea73bb461b3f64a81be1)) +* **GitLab Node:** Add Additional parameters for File List ([#5621](https://github.com/n8n-io/n8n/issues/5621)) ([3810039](https://github.com/n8n-io/n8n/commit/3810039da032ecbd038255316b3d8fa5ce5ef2df)) +* **MySQL Node:** Overhaul ([0a53c95](https://github.com/n8n-io/n8n/commit/0a53c957c4d69270e10058cdd384e47c8e3c987e)) + + + +## [0.224.1](https://github.com/n8n-io/n8n/compare/n8n@0.224.0...n8n@0.224.1) (2023-04-14) + + +### Bug Fixes + +* **core:** Fix broken API permissions in public API ([#5978](https://github.com/n8n-io/n8n/issues/5978)) ([b76ab31](https://github.com/n8n-io/n8n/commit/b76ab318f8919138391850738de99e592aa020a7)) +* **editor:** Only treat as CTRL pressed by default on touch devices for MouseEvent ([#5968](https://github.com/n8n-io/n8n/issues/5968)) ([471be3b](https://github.com/n8n-io/n8n/commit/471be3b4a89e9967524a5d06212153bbf2b56537)) + + + +# [0.224.0](https://github.com/n8n-io/n8n/compare/n8n@0.223.0...n8n@0.224.0) (2023-04-12) + + +### Bug Fixes + +* **Code Node:** Update vm2 to address CVE-2023-29017 ([#5947](https://github.com/n8n-io/n8n/issues/5947)) ([f0eba0a](https://github.com/n8n-io/n8n/commit/f0eba0a2f3be584363163abe2e30e8a57c9632f9)) +* **core:** App should not crash with a custom rest endpoint ([#5911](https://github.com/n8n-io/n8n/issues/5911)) ([2881ee9](https://github.com/n8n-io/n8n/commit/2881ee9ecc0e3258cf025ad7f1f571be4f21d320)), closes [#5880](https://github.com/n8n-io/n8n/issues/5880) +* **core:** Do not execute `workflowExecuteBefore` hook when resuming executions from a waiting state ([#5727](https://github.com/n8n-io/n8n/issues/5727)) ([6689451](https://github.com/n8n-io/n8n/commit/6689451e8c939bb2714c42ada83acdc0a9af62b7)) +* **core:** Fix issue where sub workflows would display as running forever after failure to start ([#5905](https://github.com/n8n-io/n8n/issues/5905)) ([3e382ef](https://github.com/n8n-io/n8n/commit/3e382ef85e966419dc71744b772d80c648583c5c)) +* **core:** Update xml2js to address CVE-2023-0842 ([#5948](https://github.com/n8n-io/n8n/issues/5948)) ([3085ed9](https://github.com/n8n-io/n8n/commit/3085ed9beee603cdb496fc7fb39357f15e0710d0)) +* **editor:** Drop mergeDeep in favor of lodash merge ([#5943](https://github.com/n8n-io/n8n/issues/5943)) ([0570514](https://github.com/n8n-io/n8n/commit/0570514b789c9fa020e96533b7c65bf45614c4d0)) +* **HTTP Request Node:** Show detailed error message in the UI again ([#5959](https://github.com/n8n-io/n8n/issues/5959)) ([e79679c](https://github.com/n8n-io/n8n/commit/e79679c023d127458227d904dbdb4824a755b956)) + + +### Features + +* Create TOTP node ([#5901](https://github.com/n8n-io/n8n/issues/5901)) ([6cf74e4](https://github.com/n8n-io/n8n/commit/6cf74e412a87ccb255efea950cb458712554391d)) +* **editor:** Add user activation survey ([#5677](https://github.com/n8n-io/n8n/issues/5677)) ([725393d](https://github.com/n8n-io/n8n/commit/725393dae625285ed91a7e4662eec1a425cf53f1)) +* **editor:** SAML login disables Invite button ([#5922](https://github.com/n8n-io/n8n/issues/5922)) ([3fdc441](https://github.com/n8n-io/n8n/commit/3fdc4413c20f1fd345a5864d9a237b30e20813f0)) +* **editor:** SAML paywall state ([#5906](https://github.com/n8n-io/n8n/issues/5906)) ([d40e86a](https://github.com/n8n-io/n8n/commit/d40e86aabc8c66a17b04cfe669ac27b4b281762a)) + + + +## [0.222.2](https://github.com/n8n-io/n8n/compare/n8n@0.222.1...n8n@0.222.2) (2023-04-11) + + +### Bug Fixes + +* **Code Node:** Update vm2 to address CVE-2023-29017 ([#5947](https://github.com/n8n-io/n8n/issues/5947)) ([fc1fb28](https://github.com/n8n-io/n8n/commit/fc1fb2863f6df697ca4a098054f9638cf2bc97bc)) +* **core:** Update xml2js to address CVE-2023-0842 ([#5948](https://github.com/n8n-io/n8n/issues/5948)) ([e903d61](https://github.com/n8n-io/n8n/commit/e903d6107112fca64b54dec76019720c9df6a66a)) + + + +## [0.221.3](https://github.com/n8n-io/n8n/compare/n8n@0.221.2...n8n@0.221.3) (2023-04-11) + + +### Bug Fixes + +* **Code Node:** Update vm2 to address CVE-2023-29017 ([#5947](https://github.com/n8n-io/n8n/issues/5947)) ([4127e3f](https://github.com/n8n-io/n8n/commit/4127e3ff9d1d1ef8b76c557bf3b4799ab7aba7f7)) +* **core:** Update xml2js to address CVE-2023-0842 ([#5948](https://github.com/n8n-io/n8n/issues/5948)) ([cf7a4b6](https://github.com/n8n-io/n8n/commit/cf7a4b65d3d828fbacd027de9c2bf2481883efa7)) + + + +# [0.223.0](https://github.com/n8n-io/n8n/compare/n8n@0.222.1...n8n@0.223.0) (2023-04-05) + + +### Bug Fixes + +* Add droppable state for booleans when mapping ([#5838](https://github.com/n8n-io/n8n/issues/5838)) ([e3884ce](https://github.com/n8n-io/n8n/commit/e3884ce378e488905735fbfdb986aa26f1cf952b)) +* **AWS SNS Node:** Fix an issue with messages failing to send if they contain certain characters ([#5807](https://github.com/n8n-io/n8n/issues/5807)) ([32c4eef](https://github.com/n8n-io/n8n/commit/32c4eef574a14ed599554382496a99a8240be74b)) +* **Compare Datasets Node:** Fuzzy compare not comparing keys missing in one of inputs ([d1945d9](https://github.com/n8n-io/n8n/commit/d1945d9b72fc11e7201e22a7ae0399acf2ffd5f1)) +* **Compare Datasets Node:** Support for dot notation in skip fields ([83e25c0](https://github.com/n8n-io/n8n/commit/83e25c066a845fc95c3474ae93f36993ca7ce699)) +* **core:** `augmentObject` should clone Buffer/Uint8Array instead of wrapping them in a proxy ([#5902](https://github.com/n8n-io/n8n/issues/5902)) ([a721734](https://github.com/n8n-io/n8n/commit/a72173414d9d31ab1824f87713709818955b8956)) +* **core:** `augmentObject` should use existing property descriptors whenever possible ([#5872](https://github.com/n8n-io/n8n/issues/5872)) ([6a1b7c3](https://github.com/n8n-io/n8n/commit/6a1b7c306bc9b7c469c5299af6beaf5af568b6b6)) +* **core:** Deactivate active workflows during import ([#5840](https://github.com/n8n-io/n8n/issues/5840)) ([fa5bc81](https://github.com/n8n-io/n8n/commit/fa5bc814b04273cff817d4a94b1d1ec6685807e0)) +* **core:** Do not mark duplicates as circular references in `jsonStringify` ([#5789](https://github.com/n8n-io/n8n/issues/5789)) ([18efaf3](https://github.com/n8n-io/n8n/commit/18efaf397a6bab8bd5dba881bbdfeceef8dbafb0)) +* **core:** Do not user `util.types.isProxy` for tracking of augmented objects ([#5836](https://github.com/n8n-io/n8n/issues/5836)) ([aacbb54](https://github.com/n8n-io/n8n/commit/aacbb54bef0743a1c5c5e2467dd7e00e50e325de)) +* **core:** Fix curl import error when no data ([085660d](https://github.com/n8n-io/n8n/commit/085660d7d7faf475b695724cabb6387c46adcc5f)) +* **core:** Fix the issue of nodes not loading when run via npx ([#5888](https://github.com/n8n-io/n8n/issues/5888)) ([e47190b](https://github.com/n8n-io/n8n/commit/e47190b5607dfd1284a1d2c3b8f678e8032627de)) +* **core:** Handle Date and RegExp correctly in jsonStringify ([#5812](https://github.com/n8n-io/n8n/issues/5812)) ([4f91525](https://github.com/n8n-io/n8n/commit/4f91525022716e7c1745185fae6fc2582a4252fb)) +* **core:** Handle Date and RegExp objects in AugmentObject ([#5809](https://github.com/n8n-io/n8n/issues/5809)) ([6c35ffa](https://github.com/n8n-io/n8n/commit/6c35ffa82c45434dadee0354b75a901d3f3d6e98)) +* **core:** Improve axios error handling in nodes ([#5891](https://github.com/n8n-io/n8n/issues/5891)) ([a260c05](https://github.com/n8n-io/n8n/commit/a260c05fa859c0bdd90f9abdecac59fd35978c55)) +* **core:** Password reset should pass in the correct values to external hooks ([#5842](https://github.com/n8n-io/n8n/issues/5842)) ([5bcab8f](https://github.com/n8n-io/n8n/commit/5bcab8fcbea546cd57ef728131f9e16cc57e675d)) +* **core:** Prevent augmentObject from creating infinitely deep proxies ([#5893](https://github.com/n8n-io/n8n/issues/5893)) ([31cd04c](https://github.com/n8n-io/n8n/commit/31cd04c4769b92c7f19ae8babf5df2deddef1fb3)), closes [#5848](https://github.com/n8n-io/n8n/issues/5848) +* **core:** Service account private key as a password field ([739b9b0](https://github.com/n8n-io/n8n/commit/739b9b07f0e364f98d3c2d0ce8911cd4f53e8455)) +* **core:** Update lock file ([#5801](https://github.com/n8n-io/n8n/issues/5801)) ([06d7a46](https://github.com/n8n-io/n8n/commit/06d7a46bdcd2173835ede762aff3c37b21f0a530)) +* **core:** Use table-prefixes in queries in import commands ([#5887](https://github.com/n8n-io/n8n/issues/5887)) ([ddbfcc7](https://github.com/n8n-io/n8n/commit/ddbfcc7d93cc3645fc3bb0f0de059ac76adaa475)) +* **core:** Waiting workflows not stopping ([#5811](https://github.com/n8n-io/n8n/issues/5811)) ([744c3fd](https://github.com/n8n-io/n8n/commit/744c3fd21130b6ee3c722df3fab096b169fd0ff8)) +* **Date & Time Node:** Add info box at top of date and time explaining expressions ([b7a20dd](https://github.com/n8n-io/n8n/commit/b7a20dd3a2e69a8e4e8ba76c63a6b1f4c26b6a87)) +* **Date & Time Node:** Convert luxon DateTime object to ISO ([7710652](https://github.com/n8n-io/n8n/commit/77106520c8942c746bb1ddffcddcde68a7059805)) +* **editor:** Add $if, $min, $max to root expression autocomplete ([#5858](https://github.com/n8n-io/n8n/issues/5858)) ([a13866e](https://github.com/n8n-io/n8n/commit/a13866e233430ec6aa9fcaa5f3861b3a4470b458)) +* **editor:** Curb overeager item access linting ([#5865](https://github.com/n8n-io/n8n/issues/5865)) ([3ae6933](https://github.com/n8n-io/n8n/commit/3ae69337eeb1f8a4d698f2099bb190c49cc5f8fd)) +* **editor:** Disable Grammarly in expression editors ([#5826](https://github.com/n8n-io/n8n/issues/5826)) ([ddc8f30](https://github.com/n8n-io/n8n/commit/ddc8f30e6d410f7453395f17754b8ee9a546d9b7)) +* **editor:** Disable password reset on desktop with no user management ([#5853](https://github.com/n8n-io/n8n/issues/5853)) ([96533a9](https://github.com/n8n-io/n8n/commit/96533a995c1e7ac653d3f135f954619b098bb609)) +* **editor:** Fix connection lost hover text not showing ([#5828](https://github.com/n8n-io/n8n/issues/5828)) ([b69129b](https://github.com/n8n-io/n8n/commit/b69129bd78689bd56c3a9b07c2e30f58735347d1)) +* **editor:** Fix focused state in Code node editor ([#5869](https://github.com/n8n-io/n8n/issues/5869)) ([48446f5](https://github.com/n8n-io/n8n/commit/48446f5d674c335716c86e30079eb35c75e32b66)) +* **editor:** Fix issue preventing execution preview loading when in an iframe ([#5817](https://github.com/n8n-io/n8n/issues/5817)) ([d86e693](https://github.com/n8n-io/n8n/commit/d86e693019db1fa034d43f8e7e18df09f785b2e1)) +* **editor:** Fix loading executions in long execution list ([#5843](https://github.com/n8n-io/n8n/issues/5843)) ([5c9343c](https://github.com/n8n-io/n8n/commit/5c9343c7c0febdeb3dfa449d6b18d744d909724a)) +* **editor:** Fix mapping with special characters ([#5837](https://github.com/n8n-io/n8n/issues/5837)) ([f8f584c](https://github.com/n8n-io/n8n/commit/f8f584c136da8ad8b17f82f6f4e95f0d69014b40)) +* **editor:** Prevent error from showing-up when duplicating unsaved workflow ([#5833](https://github.com/n8n-io/n8n/issues/5833)) ([0b0024d](https://github.com/n8n-io/n8n/commit/0b0024d7222ac1f6f7872b26eceefab93a17ef22)) +* **editor:** Prevent NDV schema view pagination ([#5844](https://github.com/n8n-io/n8n/issues/5844)) ([1eba478](https://github.com/n8n-io/n8n/commit/1eba4788f26d0f5472fa4156b317d8b14d19b927)) +* **editor:** Show correct status on canceled executions ([#5813](https://github.com/n8n-io/n8n/issues/5813)) ([d0788ee](https://github.com/n8n-io/n8n/commit/d0788ee8e150167a65561552494046d8e506f93c)) +* **editor:** Support backspacing with modifier key ([#5845](https://github.com/n8n-io/n8n/issues/5845)) ([11692c5](https://github.com/n8n-io/n8n/commit/11692c55f381f17a7a137262d85dfd6c7fda7ad5)) +* **Gmail Node:** Gmail luxon object support, fix for timestamp ([2b9ca0d](https://github.com/n8n-io/n8n/commit/2b9ca0d240b403a5f12b115956bbc11672f3a04a)) +* **Google Sheets Node:** Fix insertOrUpdate cell update with object ([0625e2e](https://github.com/n8n-io/n8n/commit/0625e2e6bc67092848f719f8fede87af0f3df891)) +* **HTML Extract Node:** Support for dot notation in JSON property ([0da3b96](https://github.com/n8n-io/n8n/commit/0da3b96cfc943bf8036a48df946873fb32f3f5d9)) +* **HTTP Request Node:** Detect mime-type from streaming responses ([#5896](https://github.com/n8n-io/n8n/issues/5896)) ([69efde7](https://github.com/n8n-io/n8n/commit/69efde7a094b0bf3e3ca04b456ba3a792838a0b9)) +* **HTTP Request Node:** Fix AWS credentials to stop removing url params for STS ([#5790](https://github.com/n8n-io/n8n/issues/5790)) ([a1306c6](https://github.com/n8n-io/n8n/commit/a1306c690398828ed9acb72af0161c4ff827b217)) +* **HTTP Request Node:** Refresh token properly on never fail option ([#5861](https://github.com/n8n-io/n8n/issues/5861)) ([33c67f4](https://github.com/n8n-io/n8n/commit/33c67f45ba959b90c8bebbe0b27b2a7c4152a116)) +* **HTTP Request Node:** Support for dot notation in JSON body ([b29cf9a](https://github.com/n8n-io/n8n/commit/b29cf9a2492a444cb1dd72e74c9ed1d8722bbc5a)) +* **HubSpot Trigger Node:** Developer API key is required for webhooks ([e11a30a](https://github.com/n8n-io/n8n/commit/e11a30a640700d2bc53919422cb8ddbf66aafddd)) +* **LinkedIn Node:** Update the version of the API ([#5720](https://github.com/n8n-io/n8n/issues/5720)) ([18d2e7c](https://github.com/n8n-io/n8n/commit/18d2e7cd57745f0969b0df383572b3874fe65f2c)) +* **Redis Node:** Fix issue with hash set not working as expected ([#5832](https://github.com/n8n-io/n8n/issues/5832)) ([db25441](https://github.com/n8n-io/n8n/commit/db2544146f646ec9a2c38787bc94eafc1edb1228)) +* **Set Node:** Convert string to number ([b408550](https://github.com/n8n-io/n8n/commit/b408550e9f486351198f0ce5c10895c42df45835)) + + +### Features + +* **core:** Convert eventBus controller to decorator style and improve permissions ([#5779](https://github.com/n8n-io/n8n/issues/5779)) ([f15f4bd](https://github.com/n8n-io/n8n/commit/f15f4bdcf204fa43a652022babf03e577602b2b5)) +* **core:** Prevent non owners password reset when saml is enabled ([#5788](https://github.com/n8n-io/n8n/issues/5788)) ([2216455](https://github.com/n8n-io/n8n/commit/221645576087e4cd828b34ea33e874e1bff5f34a)) +* **core:** Read ephemeral license from environment and clean up ee flags ([#5808](https://github.com/n8n-io/n8n/issues/5808)) ([83aef17](https://github.com/n8n-io/n8n/commit/83aef1712070c29fea5d0522c95b1208af4cd2e4)) +* **editor:** Allow `tab` to accept completion ([#5855](https://github.com/n8n-io/n8n/issues/5855)) ([1b8c35a](https://github.com/n8n-io/n8n/commit/1b8c35ab87ce7ea24d00d13faddba9daf9f2ab39)) +* **editor:** Enable saving workflow when node details view is open ([#5856](https://github.com/n8n-io/n8n/issues/5856)) ([0a59002](https://github.com/n8n-io/n8n/commit/0a59002ef878ff8836d3ca63956f7a444d329d0b)) +* **editor:** SSO onboarding ([#5756](https://github.com/n8n-io/n8n/issues/5756)) ([04f8600](https://github.com/n8n-io/n8n/commit/04f8600bbd220204b5e5a90f22c3dc9c137afb54)) +* **editor:** SSO setup ([#5736](https://github.com/n8n-io/n8n/issues/5736)) ([f4e5949](https://github.com/n8n-io/n8n/commit/f4e59499fc0168295c5df20b1525c7ecea4ea15b)), closes [#5899](https://github.com/n8n-io/n8n/issues/5899) +* **Filter Node:** Show discarded items ([f7f9d91](https://github.com/n8n-io/n8n/commit/f7f9d915b174d5c17efa918032741d4fa6da85e9)) +* **HTTP Request Node:** Follow redirects by default ([#5895](https://github.com/n8n-io/n8n/issues/5895)) ([f7e610b](https://github.com/n8n-io/n8n/commit/f7e610b15c4699880edffd7f10f223e820052784)) +* **Postgres Node:** Overhaul node ([07dc0e4](https://github.com/n8n-io/n8n/commit/07dc0e4b4075f1fac98d5685a99a38187bca741b)) +* **ServiceNow Node:** Add support for work notes when updating an incident ([#5791](https://github.com/n8n-io/n8n/issues/5791)) ([1409f5d](https://github.com/n8n-io/n8n/commit/1409f5d65262b9783e690408f5dabd074c709f22)) +* **SSH Node:** Hide the private key within the ssh credential ([#5871](https://github.com/n8n-io/n8n/issues/5871)) ([d877361](https://github.com/n8n-io/n8n/commit/d87736103d09042d2f74e74b57be429f2ca3550d)) + + + +## [0.222.1](https://github.com/n8n-io/n8n/compare/n8n@0.222.0...n8n@0.222.1) (2023-04-04) + + +### Bug Fixes + +* **AWS SNS Node:** Fix an issue with messages failing to send if they contain certain characters ([#5807](https://github.com/n8n-io/n8n/issues/5807)) ([f0954b9](https://github.com/n8n-io/n8n/commit/f0954b94e164f0ff3e809849731137cf479670a4)) +* **core:** `augmentObject` should clone Buffer/Uint8Array instead of wrapping them in a proxy ([#5902](https://github.com/n8n-io/n8n/issues/5902)) ([a877b02](https://github.com/n8n-io/n8n/commit/a877b025b8c93a31822e7ccb5b935dca00595439)) +* **core:** `augmentObject` should use existing property descriptors whenever possible ([#5872](https://github.com/n8n-io/n8n/issues/5872)) ([b1ee8f4](https://github.com/n8n-io/n8n/commit/b1ee8f4d991ffc5017894f588e9bd21f652f23c6)) +* **core:** Fix the issue of nodes not loading when run via npx ([#5888](https://github.com/n8n-io/n8n/issues/5888)) ([163446c](https://github.com/n8n-io/n8n/commit/163446c674d07c060eaa0d7ec54a087a4cb671d5)) +* **core:** Improve axios error handling in nodes ([#5891](https://github.com/n8n-io/n8n/issues/5891)) ([f0a51a0](https://github.com/n8n-io/n8n/commit/f0a51a0b7671945b84e18774483dc7079f559845)) +* **core:** Password reset should pass in the correct values to external hooks ([#5842](https://github.com/n8n-io/n8n/issues/5842)) ([3bf267c](https://github.com/n8n-io/n8n/commit/3bf267c14757fa67dcfa0edf0b4db74ab1b7415c)) +* **core:** Prevent augmentObject from creating infinitely deep proxies ([#5893](https://github.com/n8n-io/n8n/issues/5893)) ([6906b00](https://github.com/n8n-io/n8n/commit/6906b00b0e734dbe59d1a3a91f07ec1007166b72)), closes [#5848](https://github.com/n8n-io/n8n/issues/5848) +* **core:** Use table-prefixes in queries in import commands ([#5887](https://github.com/n8n-io/n8n/issues/5887)) ([de58fb9](https://github.com/n8n-io/n8n/commit/de58fb9860d37a39a1e8963e304b8fc87f234bf6)) +* **editor:** Fix focused state in Code node editor ([#5869](https://github.com/n8n-io/n8n/issues/5869)) ([3be37e2](https://github.com/n8n-io/n8n/commit/3be37e25a52983b43b4eed3847922e99f2bf07bc)) +* **editor:** Fix loading executions in long execution list ([#5843](https://github.com/n8n-io/n8n/issues/5843)) ([d5d9f58](https://github.com/n8n-io/n8n/commit/d5d9f58f1777040c63a2a0aa3c0d7bf632dc7b26)) +* **editor:** Show correct status on canceled executions ([#5813](https://github.com/n8n-io/n8n/issues/5813)) ([00181cd](https://github.com/n8n-io/n8n/commit/00181cd803f5a0cca50b5fc1ab84d0a26dd618ae)) +* **Gmail Node:** Gmail luxon object support, fix for timestamp ([695fabb](https://github.com/n8n-io/n8n/commit/695fabb28465d01caa85aefb1e873f88720ce304)) +* **HTTP Request Node:** Detect mime-type from streaming responses ([#5896](https://github.com/n8n-io/n8n/issues/5896)) ([0be1292](https://github.com/n8n-io/n8n/commit/0be129254e96c822dceddbfffaf36e0e6b2ef5e8)) +* **HubSpot Trigger Node:** Developer API key is required for webhooks ([918c79c](https://github.com/n8n-io/n8n/commit/918c79c137f781764f11ad3a33ead337efce681a)) +* **Set Node:** Convert string to number ([72eea0d](https://github.com/n8n-io/n8n/commit/72eea0dfb9e679bde95996d99684e23d081db5a7)) + + + +# [0.222.0](https://github.com/n8n-io/n8n/compare/n8n@0.221.2...n8n@0.222.0) (2023-03-30) + + +### Bug Fixes + +* **core:** Assign properties.success earlier to set executionStatus correctly ([#5773](https://github.com/n8n-io/n8n/issues/5773)) ([d33a1ac](https://github.com/n8n-io/n8n/commit/d33a1ac1e9a13985ff84f9271f75ebf368339b6d)) +* **core:** Do not mark duplicates as circular references in `jsonStringify` ([#5789](https://github.com/n8n-io/n8n/issues/5789)) ([f5183c6](https://github.com/n8n-io/n8n/commit/f5183c640109fb4c9552d6b2786f8ebc0e35ca4c)) +* **core:** Do not user `util.types.isProxy` for tracking of augmented objects ([#5836](https://github.com/n8n-io/n8n/issues/5836)) ([3e413f2](https://github.com/n8n-io/n8n/commit/3e413f2f80d6fa349dc6f6ea1b49027ae163df80)) +* **core:** Ensure that all non-lazy-loaded community nodes get post-processed correctly ([#5782](https://github.com/n8n-io/n8n/issues/5782)) ([30aeeb7](https://github.com/n8n-io/n8n/commit/30aeeb70b43ff3916ad79abbe49512a27e50d01d)) +* **core:** Force-upgrade `decode-uri-component` to address CVE-2022-38900 ([#5734](https://github.com/n8n-io/n8n/issues/5734)) ([8dd7f6e](https://github.com/n8n-io/n8n/commit/8dd7f6e1d4ac29b450a0af17d545ffd17038b005)) +* **core:** Force-upgrade `http-cache-semantics` to address CVE-2022-25881 ([#5733](https://github.com/n8n-io/n8n/issues/5733)) ([f7401fb](https://github.com/n8n-io/n8n/commit/f7401fb6133b9bf18f3825304c478d767e69fe27)) +* **core:** Handle Date and RegExp correctly in jsonStringify ([#5812](https://github.com/n8n-io/n8n/issues/5812)) ([753cfb8](https://github.com/n8n-io/n8n/commit/753cfb8b08ff68cc30e6e30959fd0900a44dae21)) +* **core:** Handle Date and RegExp objects in AugmentObject ([#5809](https://github.com/n8n-io/n8n/issues/5809)) ([e6d4e72](https://github.com/n8n-io/n8n/commit/e6d4e729a063cdbbf648c2815c3e55ddddef2b58)) +* **core:** Improve axios error handling in nodes ([#5699](https://github.com/n8n-io/n8n/issues/5699)) ([33d9784](https://github.com/n8n-io/n8n/commit/33d97843194c1cddfd27356c279c0f7a8c2674d3)) +* **core:** Improve community nodes loading ([#5608](https://github.com/n8n-io/n8n/issues/5608)) ([161de11](https://github.com/n8n-io/n8n/commit/161de110cedf2d5d8bc345349d4364ea202e2abd)) +* **core:** Initialize queue in the webhook server as well ([#5766](https://github.com/n8n-io/n8n/issues/5766)) ([e67ad29](https://github.com/n8n-io/n8n/commit/e67ad2962589b445592641a588024c02b4d99d3f)) +* **core:** Persist CurrentAuthenticationMethod setting change ([#5762](https://github.com/n8n-io/n8n/issues/5762)) ([4498c60](https://github.com/n8n-io/n8n/commit/4498c6013dc5b4646b1e3fdba3adef42bfc87952)) +* **core:** Remove circular refs from Code and push msg ([#5741](https://github.com/n8n-io/n8n/issues/5741)) ([b6d8a0f](https://github.com/n8n-io/n8n/commit/b6d8a0f98526bfc98a3d9a722dafce4a53e715ec)) +* **core:** Require Auth on icons and nodes/credentials types static files ([#5745](https://github.com/n8n-io/n8n/issues/5745)) ([5dda3f2](https://github.com/n8n-io/n8n/commit/5dda3f2c61b107ec24557c4bf7de284234e406ab)) +* **core:** Return SAML service provider urls with config ([#5759](https://github.com/n8n-io/n8n/issues/5759)) ([ac18c0b](https://github.com/n8n-io/n8n/commit/ac18c0b9ebb3a5a736fa72985ce5ae2cdab3b270)) +* **core:** Service account private key as a password field ([2b28470](https://github.com/n8n-io/n8n/commit/2b28470fb98a5810ce0d20fe995e2864230005d3)) +* **core:** Upgrade `luxon` to address CVE-2023-22467 ([#5731](https://github.com/n8n-io/n8n/issues/5731)) ([469ce32](https://github.com/n8n-io/n8n/commit/469ce32957ac5e4d342db17a2f680ca65c21d44f)) +* **core:** Upgrade `simple-git` to address CVE-2022-25912 ([#5730](https://github.com/n8n-io/n8n/issues/5730)) ([4a4e2be](https://github.com/n8n-io/n8n/commit/4a4e2be96c0ce096d100e08823aa6b256719c267)) +* **core:** Upgrade `sqlite3` to address CVE-2022-43441 ([#5732](https://github.com/n8n-io/n8n/issues/5732)) ([fd81c74](https://github.com/n8n-io/n8n/commit/fd81c742519882b04f98d25ca41b3fac16dbea8b)) +* **core:** Upgrade convict to address CVE-2023-0163 ([#5729](https://github.com/n8n-io/n8n/issues/5729)) ([564bc03](https://github.com/n8n-io/n8n/commit/564bc03d3fab59e4fe7fa904d5deeeb16da85af9)) +* **core:** Waiting workflows not stopping ([#5811](https://github.com/n8n-io/n8n/issues/5811)) ([8f50bb6](https://github.com/n8n-io/n8n/commit/8f50bb6ed13688d8a81a171c1f1fb9e85847f138)) +* **editor:** Fix connection lost hover text not showing ([#5828](https://github.com/n8n-io/n8n/issues/5828)) ([a2f4a05](https://github.com/n8n-io/n8n/commit/a2f4a05af7f20e007ef16357d71af6a0dbade55c)) +* **editor:** Fix issue preventing execution preview loading when in an iframe ([#5817](https://github.com/n8n-io/n8n/issues/5817)) ([d19a973](https://github.com/n8n-io/n8n/commit/d19a9732b7da188017e2141b3deed7ea004c04a6)) +* **editor:** Use credentials when fetching node and credential types ([#5760](https://github.com/n8n-io/n8n/issues/5760)) ([d3a34ab](https://github.com/n8n-io/n8n/commit/d3a34ab71bd7fc494fb90cda1aa9827a55c5ed69)) +* **Google Sheets Node:** Fix insertOrUpdate cell update with object ([1797cda](https://github.com/n8n-io/n8n/commit/1797cdab5b9e7f23c9f62ce7c6c34c1c2c26b07e)) +* **HTTP Request Node:** Add streaming to binary response ([#5701](https://github.com/n8n-io/n8n/issues/5701)) ([199a91b](https://github.com/n8n-io/n8n/commit/199a91b3981d40b7181f00702c938b9fa58d1ece)), closes [#5663](https://github.com/n8n-io/n8n/issues/5663) +* **HTTP Request Node:** Fix AWS credentials to automatically deconstruct the url ([#5751](https://github.com/n8n-io/n8n/issues/5751)) ([d30b892](https://github.com/n8n-io/n8n/commit/d30b89239587562974cc87ae2e29fe57acddf79e)) +* **HTTP Request Node:** Fix AWS credentials to stop removing url params for STS ([#5790](https://github.com/n8n-io/n8n/issues/5790)) ([2c25959](https://github.com/n8n-io/n8n/commit/2c25959e595a48d9ae55c462bd47e014d8c43598)) +* **Split In Batches Node:** Roll back changes in v1 and create v2 ([#5747](https://github.com/n8n-io/n8n/issues/5747)) ([135b0d3](https://github.com/n8n-io/n8n/commit/135b0d3e27705b07fb1e9c39a47ac4b70c1bc25d)) +* Update Posthog no-capture ([#5693](https://github.com/n8n-io/n8n/issues/5693)) ([a732374](https://github.com/n8n-io/n8n/commit/a732374f24354e0c1f36247f4476e743b0fc78e5)) + + +### Features + +* Add test overrides ([#5642](https://github.com/n8n-io/n8n/issues/5642)) ([696e43a](https://github.com/n8n-io/n8n/commit/696e43a919334d982188cc1f86d3e1b76da6a362)) +* **core:** Improve ldap/saml toggle and tests ([#5771](https://github.com/n8n-io/n8n/issues/5771)) ([47ee357](https://github.com/n8n-io/n8n/commit/47ee357059bb6d87607165d3c24ce0c99cf8bfc9)) +* **core:** Limit user invites when SAML is enabled ([#5761](https://github.com/n8n-io/n8n/issues/5761)) ([57748b7](https://github.com/n8n-io/n8n/commit/57748b71e5cd1399ccaedb9a115b821b34cf55e5)) +* **core:** Make OAuth2 error handling consistent with success handling ([#5555](https://github.com/n8n-io/n8n/issues/5555)) ([40aacf9](https://github.com/n8n-io/n8n/commit/40aacf9279c00c4e3c27669fc38a0ca196a788a4)) +* **editor:** Fix ResourceLocator dropdown style ([#5714](https://github.com/n8n-io/n8n/issues/5714)) ([02810a9](https://github.com/n8n-io/n8n/commit/02810a9ba3e792a2ec8966a2ca3bf7394740bf24)) +* Execution custom data saving and filtering ([#5496](https://github.com/n8n-io/n8n/issues/5496)) ([d78a41d](https://github.com/n8n-io/n8n/commit/d78a41db5420ff6711c30899aa2d71a85049374c)), closes [#5739](https://github.com/n8n-io/n8n/issues/5739) +* **Filter Node:** New node ([cc9fe7b](https://github.com/n8n-io/n8n/commit/cc9fe7b91ffc4ea72c25e1242e0e477112cb283e)) + + + +## [0.221.2](https://github.com/n8n-io/n8n/compare/n8n@0.221.1...n8n@0.221.2) (2023-03-24) + + +### Bug Fixes + +* **core:** Assign properties.success earlier to set executionStatus correctly ([6c7772a](https://github.com/n8n-io/n8n/commit/6c7772a0b3276ffe9e5ab8029e17a0ed743ee5a7)) + + + +## [0.221.1](https://github.com/n8n-io/n8n/compare/n8n@0.221.0...n8n@0.221.1) (2023-03-23) + + +### Bug Fixes + +* **core:** Initialize queue in the webhook server as well ([163859b](https://github.com/n8n-io/n8n/commit/163859b87a19f3795e2689ce8eba2e2ce6766684)) + + + +# [0.221.0](https://github.com/n8n-io/n8n/compare/n8n@0.220.0...n8n@0.221.0) (2023-03-23) + + +### Bug Fixes + +* **core:** Fix calling error workflows in main mode recovery ([#5698](https://github.com/n8n-io/n8n/issues/5698)) ([e0ea97a](https://github.com/n8n-io/n8n/commit/e0ea97af8d7aaa014680f5f9d5702d1cafd49757)) +* **core:** Fix telemetry execution status for manual workflows executions ([#5712](https://github.com/n8n-io/n8n/issues/5712)) ([a28396e](https://github.com/n8n-io/n8n/commit/a28396ee91bfbccc6596812606c237a8e2c34088)) +* **core:** Return saml attributes after connection test ([#5717](https://github.com/n8n-io/n8n/issues/5717)) ([be172cb](https://github.com/n8n-io/n8n/commit/be172cb720c8a44ebd1f0b86dddab321e1e3c9fd)) +* **editor:** Disable tooltip for display modes that don't support mapping ([#5715](https://github.com/n8n-io/n8n/issues/5715)) ([fb8755e](https://github.com/n8n-io/n8n/commit/fb8755ea3c720c98f002a6756c39b8fed11482c0)) +* **editor:** Fix execution list item selection ([#5606](https://github.com/n8n-io/n8n/issues/5606)) ([7a352ef](https://github.com/n8n-io/n8n/commit/7a352efff944c52062412e53ea2c1a034a25f908)) +* **editor:** Fix for large notifications being cut off ([#5705](https://github.com/n8n-io/n8n/issues/5705)) ([c07f838](https://github.com/n8n-io/n8n/commit/c07f838ce60dc33261fe3e1b5e7dd6fe05f1d63b)) +* **editor:** Fix redo in code and expression editor ([#5708](https://github.com/n8n-io/n8n/issues/5708)) ([cd7a55b](https://github.com/n8n-io/n8n/commit/cd7a55ba5aeb83d1e540a65b5c6b2c74fd742461)) +* **editor:** Fix the canvas node distance when automatically injecting manual trigger ([#5716](https://github.com/n8n-io/n8n/issues/5716)) ([cb2ba97](https://github.com/n8n-io/n8n/commit/cb2ba97f3837b572e237da1256b9f2ee376767a9)) +* **HTTP Request Node:** Fix AWS credentials to automatically deconstruct the url ([#5751](https://github.com/n8n-io/n8n/issues/5751)) ([4ac944a](https://github.com/n8n-io/n8n/commit/4ac944af3028b70ae600000300c16de77c1af1d5)) +* **Split In Batches Node:** Roll back changes in v1 and create v2 ([#5747](https://github.com/n8n-io/n8n/issues/5747)) ([cefec77](https://github.com/n8n-io/n8n/commit/cefec7739b6da820d64f9476476e1901d4f386bf)) + + +### Features + +* **core:** Augment data instead of copying it ([#5487](https://github.com/n8n-io/n8n/issues/5487)) ([0876c38](https://github.com/n8n-io/n8n/commit/0876c38aaeb8355141fecbc14e84cdda0b2c737b)) +* **editor:** Move canvas by holding Space or Middle mouse button ([#5719](https://github.com/n8n-io/n8n/issues/5719)) ([19dded1](https://github.com/n8n-io/n8n/commit/19dded18c9a588a30b9ac1fc274dcd967e9b7b6b)) +* **editor:** Recommend and pre-select auth type with overrides ([#5684](https://github.com/n8n-io/n8n/issues/5684)) ([f59b591](https://github.com/n8n-io/n8n/commit/f59b591c93ecd7cbd279668abe6494ef2b88c831)) +* **editor:** SSO login button ([#5615](https://github.com/n8n-io/n8n/issues/5615)) ([6916628](https://github.com/n8n-io/n8n/commit/6916628a9f11e07cbcdf390f747f396fb0ef9e3c)) +* **QuickChart Node:** Add QuickChart node ([#3572](https://github.com/n8n-io/n8n/issues/3572)) ([233f1fa](https://github.com/n8n-io/n8n/commit/233f1fa7ec230e92e868de0247e315aa6a705ead)) + + + +## [0.220.1](https://github.com/n8n-io/n8n/compare/n8n@0.220.0...n8n@0.220.1) (2023-03-22) + + +### Bug Fixes + +* **Split In Batches Node:** Roll back changes in v1 and create v2 ([#5747](https://github.com/n8n-io/n8n/issues/5747)) ([6d1c88e](https://github.com/n8n-io/n8n/commit/6d1c88ea8c2e5dc72c6e6edeeeef52dc1fba4075)) + + + +# [0.220.0](https://github.com/n8n-io/n8n/compare/n8n@0.219.1...n8n@0.220.0) (2023-03-16) + + +### Bug Fixes + +* **core:** Initialize License and LDAP in the correct order ([#5673](https://github.com/n8n-io/n8n/issues/5673)) ([90afa5e](https://github.com/n8n-io/n8n/commit/90afa5e55f96fbe46417f4be8f764795fb5c2225)) +* **editor:** Display correct error message for env access ([#5634](https://github.com/n8n-io/n8n/issues/5634)) ([5f238ea](https://github.com/n8n-io/n8n/commit/5f238ea6413d25704a5865d339401117e81dbbab)) +* **editor:** Fix autocomplete for complex expresions ([#5695](https://github.com/n8n-io/n8n/issues/5695)) ([11bf260](https://github.com/n8n-io/n8n/commit/11bf260bf164c6c9dffe71b875fde139c93f905d)) +* **editor:** Fix owner set-up checkbox wording ([#5697](https://github.com/n8n-io/n8n/issues/5697)) ([58232be](https://github.com/n8n-io/n8n/commit/58232bec618edd403f18527913c489bfa11f570b)) +* **editor:** Properly handle mapping of dragged expression if it contains hyphen ([#5703](https://github.com/n8n-io/n8n/issues/5703)) ([7025efe](https://github.com/n8n-io/n8n/commit/7025efe8654a8a55ff10e2105ddc6ce2dc5a89d6)) +* **Metabase Node:** Fix issue with question results not correctly being returned ([#5665](https://github.com/n8n-io/n8n/issues/5665)) ([d1e3c19](https://github.com/n8n-io/n8n/commit/d1e3c192ba9e2dfd852e570e88f6135d42d2ed45)) + + +### Features + +* **core:** Improve SAML connection test ([#5680](https://github.com/n8n-io/n8n/issues/5680)) ([ef07528](https://github.com/n8n-io/n8n/commit/ef07528cc21f06ee52f93bafb34ac54a244609f9)) +* **editor:** Add basic Datatable and Pagination components ([#5652](https://github.com/n8n-io/n8n/issues/5652)) ([29f2629](https://github.com/n8n-io/n8n/commit/29f2629716e3693372ec9a4572113a3f3721ff5e)) +* **editor:** Add support for schema view in the NDV output ([#5688](https://github.com/n8n-io/n8n/issues/5688)) ([541850f](https://github.com/n8n-io/n8n/commit/541850f95f1c42fc16d9aeee3a3fef68a4b77082)) +* **editor:** Do not show actions panel for single-action nodes ([#5683](https://github.com/n8n-io/n8n/issues/5683)) ([de1db92](https://github.com/n8n-io/n8n/commit/de1db927cbdc5fc8ef7d697cccbd8603f66391ea)) +* **Item Lists Node:** Update actions ([#5648](https://github.com/n8n-io/n8n/issues/5648)) ([332d50c](https://github.com/n8n-io/n8n/commit/332d50c5f1f8ba63b87325799360adecdbaa06bf)) +* **OpenAI Node:** Add support for gpt4 on chat completion ([#5692](https://github.com/n8n-io/n8n/issues/5692)) ([ba73fff](https://github.com/n8n-io/n8n/commit/ba73fff27d2972093746acc3f7016c7420e23459)) +* **Split In Batches Node:** Make it easy to combine processed data ([#5655](https://github.com/n8n-io/n8n/issues/5655)) ([2f7639e](https://github.com/n8n-io/n8n/commit/2f7639e9e4b10f08c5cb1c4916fc6ae031375cf3)) + + + +## [0.215.4](https://github.com/n8n-io/n8n/compare/n8n@0.215.3...n8n@0.215.4) (2023-03-14) + + +### Bug Fixes + +* **core:** Revert `isPending` check on the user entity ([#5571](https://github.com/n8n-io/n8n/issues/5571)) ([6d2c50d](https://github.com/n8n-io/n8n/commit/6d2c50dfed0aeffa2afdb09f5aac80c0e25a6a06)) + + + +## [0.214.5](https://github.com/n8n-io/n8n/compare/n8n@0.214.4...n8n@0.214.5) (2023-03-14) + + +### Bug Fixes + +* **core:** Revert `isPending` check on the user entity ([#5571](https://github.com/n8n-io/n8n/issues/5571)) ([b94af03](https://github.com/n8n-io/n8n/commit/b94af0384243d634683212d5199316067956f628)) + + + +## [0.219.1](https://github.com/n8n-io/n8n/compare/n8n@0.219.0...n8n@0.219.1) (2023-03-10) + + +### Bug Fixes + +* **HTTP Request Node:** Remove streaming response ([#5663](https://github.com/n8n-io/n8n/issues/5663)) ([974d57d](https://github.com/n8n-io/n8n/commit/974d57dfed78489d3f22c8c63e0ea624c637bfe0)) + + + +# [0.219.0](https://github.com/n8n-io/n8n/compare/n8n@0.218.0...n8n@0.219.0) (2023-03-09) + + +### Bug Fixes + +* **core:** Allow serving icons for custom nodes with npm scoped names ([#5626](https://github.com/n8n-io/n8n/issues/5626)) ([45ccdd3](https://github.com/n8n-io/n8n/commit/45ccdd3bb5d5601ccc60438d96aadb40cb87588b)) +* **core:** Rename advancedFilters to advancedExecutionFilters ([#5643](https://github.com/n8n-io/n8n/issues/5643)) ([419969c](https://github.com/n8n-io/n8n/commit/419969c0d761b1ac7870e7821c0398ecfca1f0ce)) +* **editor:** Fix ElButton overrides ([#5605](https://github.com/n8n-io/n8n/issues/5605)) ([2eba050](https://github.com/n8n-io/n8n/commit/2eba05046141bd13145f95c6a1ec1e6fb95b37c2)) +* **editor:** Only fetch new versions at app launch ([#5647](https://github.com/n8n-io/n8n/issues/5647)) ([5b9c521](https://github.com/n8n-io/n8n/commit/5b9c521d04bc34a9f84be966a4646f23c56ca3da)) +* Fetch credentials on workflows view to include in duplicated workflows ([#5532](https://github.com/n8n-io/n8n/issues/5532)) ([493f7a1](https://github.com/n8n-io/n8n/commit/493f7a1c92d77d3c75fc311892e53f43e1fb367f)) +* Fix color discrepancies for executions list items ([#5640](https://github.com/n8n-io/n8n/issues/5640)) ([c81656d](https://github.com/n8n-io/n8n/commit/c81656d149764dc398b93d3eb8626a402eddb0ef)) +* **OpenAI Node:** Fix issue with expressions not working with chat complete ([#5609](https://github.com/n8n-io/n8n/issues/5609)) ([e949db3](https://github.com/n8n-io/n8n/commit/e949db352526033394083476077519598dd8061c)) +* **OpenAI Node:** Simplify code ([#5618](https://github.com/n8n-io/n8n/issues/5618)) ([1c65bff](https://github.com/n8n-io/n8n/commit/1c65bff31d86ea76ff5fca10341e71389d4de7b5)) + + +### Features + +* **Cal Trigger Node:** Update to support v2 webhooks ([#5331](https://github.com/n8n-io/n8n/issues/5331)) ([2889e53](https://github.com/n8n-io/n8n/commit/2889e53b3767f2a61ee7fb3ea9fe1db7c65aaf70)) +* **core:** Add advancedFilters feature flag ([#5638](https://github.com/n8n-io/n8n/issues/5638)) ([0b5ef09](https://github.com/n8n-io/n8n/commit/0b5ef09e7cbd0c80a4b79311976b5c06c2be8747)) +* **core:** Add SAML post and test endpoints ([#5595](https://github.com/n8n-io/n8n/issues/5595)) ([523fa71](https://github.com/n8n-io/n8n/commit/523fa71705c0408c6c60c7cb5135323e3488e8c9)) +* **core:** Add SAML XML validation ([#5600](https://github.com/n8n-io/n8n/issues/5600)) ([ca66ec8](https://github.com/n8n-io/n8n/commit/ca66ec8f4d5ab0e427390b1f1874fb668bc53479)) +* **core:** Limit user changes when saml is enabled ([#5577](https://github.com/n8n-io/n8n/issues/5577)) ([b517959](https://github.com/n8n-io/n8n/commit/b5179597f3ec4ae468b2eb91969fa56322088e6f)) +* **core:** Refactor and add SAML preferences for service provider instance ([#5637](https://github.com/n8n-io/n8n/issues/5637)) ([6f27b44](https://github.com/n8n-io/n8n/commit/6f27b445ca2307b94ffc7d4eeb24e76d63516a19)) +* **editor:** Do not automatically add manual trigger on node plus ([#5644](https://github.com/n8n-io/n8n/issues/5644)) ([ac2f89a](https://github.com/n8n-io/n8n/commit/ac2f89a18a4c25ef1b39bcacc624884de9197fdf)) +* **editor:** Redirect users to canvas if they don't have any workflows ([#5629](https://github.com/n8n-io/n8n/issues/5629)) ([354edf6](https://github.com/n8n-io/n8n/commit/354edf6886fa3cc5a59d317dcab59cc75e62dc2d)) +* **HTTP Request Node:** Move from Binary Buffer to Binary streaming ([#5610](https://github.com/n8n-io/n8n/issues/5610)) ([ce0d9d2](https://github.com/n8n-io/n8n/commit/ce0d9d2bede7d87b97e18c45b63ea31ecf592255)) +* **Mattermost Node:** Add self signed certificate support ([#5630](https://github.com/n8n-io/n8n/issues/5630)) ([01a2160](https://github.com/n8n-io/n8n/commit/01a2160b3b8d36509f4b2871249a3f45358cf692)) +* **Microsoft SQL Node:** Add support for self signed certificates ([#5160](https://github.com/n8n-io/n8n/issues/5160)) ([971d5ae](https://github.com/n8n-io/n8n/commit/971d5ae8f5d2bfe319fc700fee2bcf597ea4c07e)) +* **Mindee Node:** Add support for v4 API ([#5559](https://github.com/n8n-io/n8n/issues/5559)) ([e56fbfe](https://github.com/n8n-io/n8n/commit/e56fbfef3ebb50706f24ab07505a0031f361d9b1)) +* **Slack Node:** Move from Binary Buffer to Binary streaming ([#5612](https://github.com/n8n-io/n8n/issues/5612)) ([9420b0f](https://github.com/n8n-io/n8n/commit/9420b0fdf8ccccb95780c8c97e2b5d14cc4d513e)) + + + +## [0.217.1](https://github.com/n8n-io/n8n/compare/n8n@0.217.0...n8n@0.217.1) (2023-02-24) + + +### Bug Fixes + +* **core:** Revert `isPending` check on the user entity ([#5571](https://github.com/n8n-io/n8n/issues/5571)) ([5282fd2](https://github.com/n8n-io/n8n/commit/5282fd266c26e7053ceb887addceed26b741f995)) + + + +# [0.218.0](https://github.com/n8n-io/n8n/compare/n8n@0.217.2...n8n@0.218.0) (2023-03-02) + + +### Bug Fixes + +* **core:** Fix execution pruning queries ([#5562](https://github.com/n8n-io/n8n/issues/5562)) ([88de661](https://github.com/n8n-io/n8n/commit/88de6613bda2d4f133410b05c5c2a8d2f1ba838f)) +* **core:** Fix Filtering of Workflow by Tags ([#5570](https://github.com/n8n-io/n8n/issues/5570)) ([ea2035b](https://github.com/n8n-io/n8n/commit/ea2035b5102853d2aa7e5e01d70e06acf4abd3d8)) +* **core:** Revert `isPending` check on the user entity ([#5571](https://github.com/n8n-io/n8n/issues/5571)) ([a19ec6a](https://github.com/n8n-io/n8n/commit/a19ec6ac94ac2ed6ab96bf7fe2216cdd2324228b)) +* Fix issues with nodes missing in nodes panel ([#5599](https://github.com/n8n-io/n8n/issues/5599)) ([5040fea](https://github.com/n8n-io/n8n/commit/5040fea93ecc36017d25f237fe9b3e23bc9d623d)) +* Fix mapping paths when appending to empty expression ([#5591](https://github.com/n8n-io/n8n/issues/5591)) ([1f7b478](https://github.com/n8n-io/n8n/commit/1f7b478920ee2b8b4f6affcfd0b42f79b2cd8cd1)) +* **Item Lists Node:** Tweak item list summarize field naming ([#5572](https://github.com/n8n-io/n8n/issues/5572)) ([aa2beaa](https://github.com/n8n-io/n8n/commit/aa2beaa80076fc06360828e466a3dc05e7caddbe)) +* Prevent executions from displaying as running forever ([#5563](https://github.com/n8n-io/n8n/issues/5563)) ([46d9ac6](https://github.com/n8n-io/n8n/commit/46d9ac6c6f55a505716c8951f93b149713bcbe35)) +* Show Execute Workflow node in nodes panel ([#5583](https://github.com/n8n-io/n8n/issues/5583)) ([d6d1c07](https://github.com/n8n-io/n8n/commit/d6d1c07a53bb903b19c49ea11b9d36993fde7c33)) +* Show RabbitMQ node in nodes panel ([#5598](https://github.com/n8n-io/n8n/issues/5598)) ([4f5013f](https://github.com/n8n-io/n8n/commit/4f5013ff53294579fb9e47f90ae08e9a6bc76b75)) +* Stop showing mapping hint after mapping ([#5586](https://github.com/n8n-io/n8n/issues/5586)) ([eac4275](https://github.com/n8n-io/n8n/commit/eac4275a7ebfa6ccc6258261b1b3ac36c9df9d88)) + + +### Features + +* Add distribution test tracking ([#5588](https://github.com/n8n-io/n8n/issues/5588)) ([91bd014](https://github.com/n8n-io/n8n/commit/91bd0146f35ba3f38c862cac9c5ad48ff7cd38e8)) +* Add events to enable onboarding checklist ([#5536](https://github.com/n8n-io/n8n/issues/5536)) ([20c4919](https://github.com/n8n-io/n8n/commit/20c49195131399aa6ab0c6938eebb5e2733c6710)) +* **core:** Add SAML login setup ([#5515](https://github.com/n8n-io/n8n/issues/5515)) ([40a934b](https://github.com/n8n-io/n8n/commit/40a934bbb4f6eed80aa5c1de6814c0e0eea65ebd)) +* **core:** Add SAML settings and consolidate LDAP under SSO ([#5574](https://github.com/n8n-io/n8n/issues/5574)) ([31cc8de](https://github.com/n8n-io/n8n/commit/31cc8de8297454cad4307e008b3b915475c0a889)) +* **editor:** Add missing documentation to autocomplete items for inline code editor ([#5560](https://github.com/n8n-io/n8n/issues/5560)) ([ae63440](https://github.com/n8n-io/n8n/commit/ae634407a47de33d77cb81ae7ce11362e8485fd4)) +* **editor:** Show parameter hint on multilines ([#5014](https://github.com/n8n-io/n8n/issues/5014)) ([1942fd8](https://github.com/n8n-io/n8n/commit/1942fd82323183fb31af671ccb8d22f6a4798d7f)) +* **Jira Software Node:** Support binary streaming for very large binary files ([#5589](https://github.com/n8n-io/n8n/issues/5589)) ([f61d779](https://github.com/n8n-io/n8n/commit/f61d779667f25a411b51ee61ddd3fe4698f05934)) +* **OpenAI Node:** Add support for ChatGPT ([#5596](https://github.com/n8n-io/n8n/issues/5596)) ([06c5ecb](https://github.com/n8n-io/n8n/commit/06c5ecbdf3031a7773e698294ae701a7e501ef50)) +* **Telegram Node:** Add Parse Mode to Send Document operation ([#5554](https://github.com/n8n-io/n8n/issues/5554)) ([f3c943e](https://github.com/n8n-io/n8n/commit/f3c943ef8191bd16e16a61ffbed6b1caca0d75a5)) + + + +## [0.217.2](https://github.com/n8n-io/n8n/compare/n8n@0.217.1...n8n@0.217.2) (2023-02-27) + + +### Bug Fixes + +* **core:** Fix execution pruning queries ([#5562](https://github.com/n8n-io/n8n/issues/5562)) ([2137ae2](https://github.com/n8n-io/n8n/commit/2137ae23d789af765a7555028e9651029f88cadc)) +* **core:** Fix Filtering of Workflow by Tags ([#5570](https://github.com/n8n-io/n8n/issues/5570)) ([51eedac](https://github.com/n8n-io/n8n/commit/51eedaccd427ec11b12fbf43d9dd3f0ebe9633d2)) +* **core:** Revert `isPending` check on the user entity ([#5571](https://github.com/n8n-io/n8n/issues/5571)) ([43eec66](https://github.com/n8n-io/n8n/commit/43eec66828b2e03418402742c9695e08b1165bdd)) + + + +## [0.217.1](https://github.com/n8n-io/n8n/compare/n8n@0.217.0...n8n@0.217.1) (2023-02-24) + + +### Bug Fixes + +* Prevent executions from displaying as running forever ([#5563](https://github.com/n8n-io/n8n/issues/5563)) ([b30db10](https://github.com/n8n-io/n8n/commit/b30db10d898fa791d99d13192ef411cace4f7c05)) + + + +# [0.217.0](https://github.com/n8n-io/n8n/compare/n8n@0.216.1...n8n@0.217.0) (2023-02-23) + + +### Bug Fixes + +* **Baserow Node:** Fix issue with get all not correctly using filters ([#5519](https://github.com/n8n-io/n8n/issues/5519)) ([ee21b7a](https://github.com/n8n-io/n8n/commit/ee21b7a1cfed17936eb6bf50221b7f9983dd38e6)) +* **Compare Datasets Node:** UI tweaks and fixes ([7ecd5e5](https://github.com/n8n-io/n8n/commit/7ecd5e59eca01ca2b1a01e0a3e3871bd5d322eea)) +* **core:** Do not allow arbitrary path traversal in BinaryDataManager ([#5523](https://github.com/n8n-io/n8n/issues/5523)) ([eef2574](https://github.com/n8n-io/n8n/commit/eef257406730a989ec8e7a056c3d4234300fdb25)) +* **core:** Do not allow arbitrary path traversal in the credential-translation endpoint ([#5522](https://github.com/n8n-io/n8n/issues/5522)) ([f0f8d59](https://github.com/n8n-io/n8n/commit/f0f8d59fee223c6bc9f8459890ed4a31ef8cb0af)) +* **core:** Do not explicitly bypass auth on urls containing `.svg` ([#5525](https://github.com/n8n-io/n8n/issues/5525)) ([f58573d](https://github.com/n8n-io/n8n/commit/f58573dba30eba8fe3d844d1b7b2dbbb8d51b8b5)) +* **core:** Do not remove empty output connections arrays in PurgeInvalidWorkflowConnections migration ([#5546](https://github.com/n8n-io/n8n/issues/5546)) ([0fbb3f0](https://github.com/n8n-io/n8n/commit/0fbb3f0f026432f1aea87b106a0c1f732f93c792)) +* **core:** Fix execution status filters ([#5533](https://github.com/n8n-io/n8n/issues/5533)) ([17eff4d](https://github.com/n8n-io/n8n/commit/17eff4d7d6692bfdc251bfa16ce7334858642ce5)) +* **core:** User update endpoint should only allow updating email, firstName, and lastName ([#5526](https://github.com/n8n-io/n8n/issues/5526)) ([510855d](https://github.com/n8n-io/n8n/commit/510855d9581f07e5081a7bc11377cd6216ba7edf)) +* **Discord Node:** Fix wrong error message being displayed ([#5547](https://github.com/n8n-io/n8n/issues/5547)) ([e251439](https://github.com/n8n-io/n8n/commit/e2514393335e555af47c9aca4f81b31608df9cb5)) +* **Discourse Node:** Fix issue with credential test not working ([#5520](https://github.com/n8n-io/n8n/issues/5520)) ([b3e1793](https://github.com/n8n-io/n8n/commit/b3e1793ac0f304ea72d565097b6766bc278e1238)) +* **editor:** Apply correct IRunExecutionData to finished workflow ([#5552](https://github.com/n8n-io/n8n/issues/5552)) ([e2d7c18](https://github.com/n8n-io/n8n/commit/e2d7c1804f2d5da15d96edeefd50c5b8e2753fd1)) +* **editor:** Fix an issue with zoom and canvas nodes connections ([#5548](https://github.com/n8n-io/n8n/issues/5548)) ([4998ab2](https://github.com/n8n-io/n8n/commit/4998ab23508adf9a244885509b2d5c7c9c9c48f0)) +* **editor:** Fix unexpected date rendering on front-end ([#5528](https://github.com/n8n-io/n8n/issues/5528)) ([684d717](https://github.com/n8n-io/n8n/commit/684d71752064e25143e09666e539b91b3dcd5f71)) +* **editor:** Remove 'crashed' status from filter ([#5524](https://github.com/n8n-io/n8n/issues/5524)) ([7c517cb](https://github.com/n8n-io/n8n/commit/7c517cb5300481908dd653426089a6a9291e79ca)) +* fix typo in error messages when a property does not exist ([#4310](https://github.com/n8n-io/n8n/issues/4310)) ([3af3db1](https://github.com/n8n-io/n8n/commit/3af3db160b5798fe948159b6f3dd48ec743512e7)) +* Fixes an issue when saving an active workflow without triggers would cause n8n to be stuck ([#5513](https://github.com/n8n-io/n8n/issues/5513)) ([75a094a](https://github.com/n8n-io/n8n/commit/75a094a8c03afc40b7872cd2115d82e69455286e)) +* **Google Calendar Node:** Fix incorrect labels for start and end times when getting all events ([#5529](https://github.com/n8n-io/n8n/issues/5529)) ([f965469](https://github.com/n8n-io/n8n/commit/f965469e13a45d3a7b796dfd6be44573bf8b13d0)) +* **Postgres Node:** Fix for tables containing field named json ([5d74a2f](https://github.com/n8n-io/n8n/commit/5d74a2f89a31ee1a386a52d0d71858f73d734e31)) +* **S3 Node:** Fix issue with get many buckets not outputting data ([#5514](https://github.com/n8n-io/n8n/issues/5514)) ([1c47677](https://github.com/n8n-io/n8n/commit/1c476770a778b7d034924db847a8757c383bd281)) + + +### Features + +* Add new event hooks ([#5530](https://github.com/n8n-io/n8n/issues/5530)) ([d47d008](https://github.com/n8n-io/n8n/commit/d47d0086cc2b0af5338598de1fc496b9d825f9a4)) +* Add Required path name mapping to multiple nodes ([#5369](https://github.com/n8n-io/n8n/issues/5369)) ([f1589d4](https://github.com/n8n-io/n8n/commit/f1589d4f0f9f7cc7beec12d9f6598f8286484989)) +* **core:** Add configurable execution history limit ([#5505](https://github.com/n8n-io/n8n/issues/5505)) ([db70293](https://github.com/n8n-io/n8n/commit/db702932f3f2b14a097e7f4364c06cbb4f001ebc)) +* **core:** Add execution runData recovery and status field ([#5112](https://github.com/n8n-io/n8n/issues/5112)) ([d143f3f](https://github.com/n8n-io/n8n/commit/d143f3f2ec9ce42cfa4db2b41dab019b7b42f379)) +* **core:** Add saml feature flag ([#5494](https://github.com/n8n-io/n8n/issues/5494)) ([3a9c257](https://github.com/n8n-io/n8n/commit/3a9c257f55a87890c7456601de13f182cec89fde)) +* Deprecate Read Binary File node ([#5490](https://github.com/n8n-io/n8n/issues/5490)) ([11b4671](https://github.com/n8n-io/n8n/commit/11b467137e7652c03c0578654b19dbc157b23220)) +* **editor:** Unify regular and trigger node creator panels ([#5315](https://github.com/n8n-io/n8n/issues/5315)) ([9a1e7b5](https://github.com/n8n-io/n8n/commit/9a1e7b52f7ce698f1492af15d0139fb015ba5d30)) +* Hide sensitive value in Auth Header Credentials and Auth Query Credentials ([#5534](https://github.com/n8n-io/n8n/issues/5534)) ([4a209e1](https://github.com/n8n-io/n8n/commit/4a209e1dd98ea4b43d0a4d9cd688615cd6d4d5dd)) +* Support feature flag evaluation server side ([#5511](https://github.com/n8n-io/n8n/issues/5511)) ([26a20ed](https://github.com/n8n-io/n8n/commit/26a20ed47e8f580504b80150d7550ecb9a49be0d)) + + + +## [0.216.2](https://github.com/n8n-io/n8n/compare/n8n@0.216.1...n8n@0.216.2) (2023-02-23) + + +### Bug Fixes + +* **core:** Do not remove empty output connections arrays in PurgeInvalidWorkflowConnections migration ([#5546](https://github.com/n8n-io/n8n/issues/5546)) ([ac86abe](https://github.com/n8n-io/n8n/commit/ac86abe2457d9f54fcd23ac0c8d5f39d565bdcdf)) + + + +## [0.215.3](https://github.com/n8n-io/n8n/compare/n8n@0.215.2...n8n@0.215.3) (2023-02-23) + + +### Bug Fixes + +* **core:** Do not allow arbitrary path traversal in BinaryDataManager ([#5523](https://github.com/n8n-io/n8n/issues/5523)) ([f7079da](https://github.com/n8n-io/n8n/commit/f7079daecd210a3a2a94e07c4782d15ee2a995e0)) +* **core:** Do not allow arbitrary path traversal in the credential-translation endpoint ([#5522](https://github.com/n8n-io/n8n/issues/5522)) ([14d2a88](https://github.com/n8n-io/n8n/commit/14d2a88120c966a6493c3a64a7a2925af0731b8f)) +* **core:** Do not explicitly bypass auth on urls containing `.svg` ([#5525](https://github.com/n8n-io/n8n/issues/5525)) ([0b568ee](https://github.com/n8n-io/n8n/commit/0b568ee5c3d3259aaa43f757ded5583bf9d1e221)) +* **core:** Do not remove empty output connections arrays in PurgeInvalidWorkflowConnections migration ([#5546](https://github.com/n8n-io/n8n/issues/5546)) ([a31cb05](https://github.com/n8n-io/n8n/commit/a31cb05fecb3c7fcb8f3def33206bb7676358561)) +* **core:** User update endpoint should only allow updating email, firstName, and lastName ([#5526](https://github.com/n8n-io/n8n/issues/5526)) ([d530e20](https://github.com/n8n-io/n8n/commit/d530e20669e90e12a2d2895ae31d0018a53b817a)) + + + +## [0.214.4](https://github.com/n8n-io/n8n/compare/n8n@0.214.3...n8n@0.214.4) (2023-02-23) + + +### Bug Fixes + +* **core:** Do not allow arbitrary path traversal in BinaryDataManager ([#5523](https://github.com/n8n-io/n8n/issues/5523)) ([df3f23e](https://github.com/n8n-io/n8n/commit/df3f23e2b8103a15632521e4ba6cf332693acf81)) +* **core:** Do not allow arbitrary path traversal in the credential-translation endpoint ([#5522](https://github.com/n8n-io/n8n/issues/5522)) ([397e42d](https://github.com/n8n-io/n8n/commit/397e42d63e80577a0b897873a1d2f19533e27da7)) +* **core:** Do not explicitly bypass auth on urls containing `.svg` ([#5525](https://github.com/n8n-io/n8n/issues/5525)) ([a8ca2b1](https://github.com/n8n-io/n8n/commit/a8ca2b1aea687256c7d7d3525a2c50659935d7b8)) +* **core:** Do not remove empty output connections arrays in PurgeInvalidWorkflowConnections migration ([#5546](https://github.com/n8n-io/n8n/issues/5546)) ([e6a554f](https://github.com/n8n-io/n8n/commit/e6a554f884d0d8d1e5c3890745986ecc179846d5)) +* **core:** User update endpoint should only allow updating email, firstName, and lastName ([#5526](https://github.com/n8n-io/n8n/issues/5526)) ([d622827](https://github.com/n8n-io/n8n/commit/d6228276a26d9dc1bf2b2c5452bc0644b6df0c63)) + + + +## [0.216.1](https://github.com/n8n-io/n8n/compare/n8n@0.216.0...n8n@0.216.1) (2023-02-21) + + +### Bug Fixes + +* **core:** Do not allow arbitrary path traversal in BinaryDataManager ([#5523](https://github.com/n8n-io/n8n/issues/5523)) ([40b9784](https://github.com/n8n-io/n8n/commit/40b97846483fe7c58229c156acb66f43a5a79dc3)) +* **core:** Do not allow arbitrary path traversal in the credential-translation endpoint ([#5522](https://github.com/n8n-io/n8n/issues/5522)) ([fb07d77](https://github.com/n8n-io/n8n/commit/fb07d77106bb4933758c63bbfb87f591bf4a27dd)) +* **core:** Do not explicitly bypass auth on urls containing `.svg` ([#5525](https://github.com/n8n-io/n8n/issues/5525)) ([27adea7](https://github.com/n8n-io/n8n/commit/27adea70459329fc0dddabee69e10c9d1453835f)) +* **core:** User update endpoint should only allow updating email, firstName, and lastName ([#5526](https://github.com/n8n-io/n8n/issues/5526)) ([5599221](https://github.com/n8n-io/n8n/commit/5599221007cb09cb81f0623874fafc6cd481384c)) + + + +# [0.216.0](https://github.com/n8n-io/n8n/compare/n8n@0.215.2...n8n@0.216.0) (2023-02-16) + + +### Bug Fixes + +* **Bubble Node:** Fix pagination issue when returning all objects ([#5483](https://github.com/n8n-io/n8n/issues/5483)) ([1a20fd9](https://github.com/n8n-io/n8n/commit/1a20fd9f46495e32508d74dbb9ccaaa0f6194a07)) +* **core:** Fix data transformation function that are reported not to work properly ([#5338](https://github.com/n8n-io/n8n/issues/5338)) ([0cf45bc](https://github.com/n8n-io/n8n/commit/0cf45bc4c862c7544e69af4981d4607bf0b530e3)) +* **core:** Remove unnecessary info from `GET /workflows` response ([#5311](https://github.com/n8n-io/n8n/issues/5311)) ([a2c6ea9](https://github.com/n8n-io/n8n/commit/a2c6ea9e110e51debf137707b52eb7fedbc0032b)) +* **HTTP Request Node:** Ignore empty body for auto detect json ([#5215](https://github.com/n8n-io/n8n/issues/5215)) ([af70337](https://github.com/n8n-io/n8n/commit/af703371fc96dcfdd8f418201d3880f124cfcfc4)) + + +### Features + +* Add workflow and credential sharing access e2e tests ([#5463](https://github.com/n8n-io/n8n/issues/5463)) ([246189f](https://github.com/n8n-io/n8n/commit/246189f6dae2ce96dabd900ce0a192de731cc6aa)) +* **editor:** Add correct credential owner contact details for readonly credentials ([#5208](https://github.com/n8n-io/n8n/issues/5208)) ([36108f8](https://github.com/n8n-io/n8n/commit/36108f82a1c1657c3959225d0635255668bf0af6)) +* **editor:** Add most important native props and methods to autocomplete ([#5486](https://github.com/n8n-io/n8n/issues/5486)) ([6592d14](https://github.com/n8n-io/n8n/commit/6592d144d1fb680b34240ce57a6615b06de5cde5)) +* **editor:** Update to personalization survey v4 ([#5474](https://github.com/n8n-io/n8n/issues/5474)) ([6265f3a](https://github.com/n8n-io/n8n/commit/6265f3a27a076f6c3c24d0fb323e44c471d85b23)) +* **Github Node:** Use resource locator component ([#5489](https://github.com/n8n-io/n8n/issues/5489)) ([00ac4c3](https://github.com/n8n-io/n8n/commit/00ac4c308a4d96a0f93401402dd92bbbd087f082)) +* **Github Trigger Node:** Use resource locator component ([#5253](https://github.com/n8n-io/n8n/issues/5253)) ([a3d8fac](https://github.com/n8n-io/n8n/commit/a3d8fac73a8a93d6b7f769e1386276e34066a1b7)) +* **Notion Node:** Add icon support for page and database page creation ([#5468](https://github.com/n8n-io/n8n/issues/5468)) ([71cba06](https://github.com/n8n-io/n8n/commit/71cba06b7c1ee8ed42a4dacc2d8114df119339dc)) +* **Slack Node:** Add support for manually inputting a channel name ([#5488](https://github.com/n8n-io/n8n/issues/5488)) ([7954ed3](https://github.com/n8n-io/n8n/commit/7954ed3cfbd4d8d0611c0cc51385b49cc80282a6)) +* Update telemetry api endpoints ([#5482](https://github.com/n8n-io/n8n/issues/5482)) ([3de49e8](https://github.com/n8n-io/n8n/commit/3de49e8f7894e628b722e2a0c62e8739b1de6be9)) + + + +## [0.215.2](https://github.com/n8n-io/n8n/compare/n8n@0.215.1...n8n@0.215.2) (2023-02-14) + + +### Bug Fixes + +* **core:** Fix the issue with test webhooks getting removed incorrectly ([#5466](https://github.com/n8n-io/n8n/issues/5466)) ([4dc458e](https://github.com/n8n-io/n8n/commit/4dc458eca5587cf7765bed6fd384d47a31e66e2c)), closes [/github.com/n8n-io/n8n/pull/5443/files#diff-b386248ff00977749c873ed85821c241b773e9740d7e7adf94e05b73b350ed74L152](https://github.com//github.com/n8n-io/n8n/pull/5443/files/issues/diff-b386248ff00977749c873ed85821c241b773e9740d7e7adf94e05b73b350ed74L152) + + + +## [0.215.1](https://github.com/n8n-io/n8n/compare/n8n@0.215.0...n8n@0.215.1) (2023-02-11) + + +### Bug Fixes + +* **core:** Fix issue that worker and webhook service close directly ([#5461](https://github.com/n8n-io/n8n/issues/5461)) ([3396556](https://github.com/n8n-io/n8n/commit/339655611fcf05ebdf9be7c452bc1164333f122e)) +* **core:** Handle versioned custom nodes correctly ([#5313](https://github.com/n8n-io/n8n/issues/5313)) ([59f5c42](https://github.com/n8n-io/n8n/commit/59f5c4221efd6f8733bfb5ab41a0834332e9b9e4)) + + + +# [0.215.0](https://github.com/n8n-io/n8n/compare/n8n@0.214.3...n8n@0.215.0) (2023-02-10) + + +### Bug Fixes + +* **ActiveCampaign Node:** Fix additional fields not being sent when updating account contacts ([#5216](https://github.com/n8n-io/n8n/issues/5216)) ([333a817](https://github.com/n8n-io/n8n/commit/333a817a8ef202d4133f2796b066e6a8ec414719)) +* **core:** Disable transactions on sqlite migrations that use `PRAGMA foreign_keys` ([#5392](https://github.com/n8n-io/n8n/issues/5392)) ([3a435f7](https://github.com/n8n-io/n8n/commit/3a435f7057ac4e48945bd1b3a4efea0397f026a0)) +* **core:** Expression extension failing with optional chaining ([#5370](https://github.com/n8n-io/n8n/issues/5370)) ([c7b58e0](https://github.com/n8n-io/n8n/commit/c7b58e0ed19869a4f47c666cc895ed72fe20e8e4)) +* **core:** Fix import command for workflows with old format(pre UM) ([#5403](https://github.com/n8n-io/n8n/issues/5403)) ([fdf47a9](https://github.com/n8n-io/n8n/commit/fdf47a96dee8883b811249e1e427b764cab15004)) +* **core:** Stop copying icons to cache ([#5419](https://github.com/n8n-io/n8n/issues/5419)) ([f23fb92](https://github.com/n8n-io/n8n/commit/f23fb9269660721aadd34cbb5bb958d7aaf0bcb2)) +* **editor:** Prevent creation of input connections for nodes without input slot ([#5425](https://github.com/n8n-io/n8n/issues/5425)) ([018f8a3](https://github.com/n8n-io/n8n/commit/018f8a3510b280b08d95037f9b6b870748170f3e)) +* Error workflow now correctly checks for subworkflow permissions ([#5390](https://github.com/n8n-io/n8n/issues/5390)) ([c8245b9](https://github.com/n8n-io/n8n/commit/c8245b9f872fd2c85ecaaa0da426b3ef9cb03113)) +* **Linear Node:** Fix issue with Issue States not loading correctly ([#5435](https://github.com/n8n-io/n8n/issues/5435)) ([57a2b9c](https://github.com/n8n-io/n8n/commit/57a2b9cceb52cbed905459e6ae92007e00a335cc)) +* MySQL migration parses database contents if necessary (fix for MariaDB) ([#5441](https://github.com/n8n-io/n8n/issues/5441)) ([2eb72a6](https://github.com/n8n-io/n8n/commit/2eb72a6c9f447f77f78f6d0ab392ebec5515f58c)) + + +### Features + +* Change desktop UM experience ([#5312](https://github.com/n8n-io/n8n/issues/5312)) ([5e3e70b](https://github.com/n8n-io/n8n/commit/5e3e70b83bf905c39f23a213f953bc42d7eed357)) +* **core:** Add support for WebSockets as an alternative to Server-Sent Events ([#5443](https://github.com/n8n-io/n8n/issues/5443)) ([538984d](https://github.com/n8n-io/n8n/commit/538984dc2f95fe2089f99deefcee3352e4ccd144)) +* **Edit Image Node:** Allow WebP as an image format ([#5420](https://github.com/n8n-io/n8n/issues/5420)) ([94f2b2a](https://github.com/n8n-io/n8n/commit/94f2b2a26fca3987715e49352dd3e6f75b8bd6e2)) +* **editor:** Add `Object` global completions ([#5407](https://github.com/n8n-io/n8n/issues/5407)) ([d7b3923](https://github.com/n8n-io/n8n/commit/d7b3923c2f5e02680170b132ba0e7cc59cb67cf6)) +* **editor:** Bring completions to HTML editor ([#5382](https://github.com/n8n-io/n8n/issues/5382)) ([a07de04](https://github.com/n8n-io/n8n/commit/a07de049a2105e1c2f749958a281cedbf918c39a)) +* **HubSpot Trigger Node:** Add conversation events ([#5408](https://github.com/n8n-io/n8n/issues/5408)) ([aeaa663](https://github.com/n8n-io/n8n/commit/aeaa6636201f0ad98603d1abd602bdf6072e8a11)) + + + +## [0.214.3](https://github.com/n8n-io/n8n/compare/n8n@0.214.2...n8n@0.214.3) (2023-02-09) + +* **editor:** Prevent creation of input connections for nodes without input slot ([#5425](https://github.com/n8n-io/n8n/issues/5425)) ([b57ec1d](https://github.com/n8n-io/n8n/commit/b57ec1d6abbae9e23ae5f473d70674aa14701bce)) + + +## [0.214.2](https://github.com/n8n-io/n8n/compare/n8n@0.214.1...n8n@0.214.2) (2023-02-06) + + +### Bug Fixes + + +* **editor:** Correctly show OAuth reconnect button ([#5384](https://github.com/n8n-io/n8n/issues/5384)) ([6482688](https://github.com/n8n-io/n8n/commit/6482688ee04621744451c67f6d6e3292e925bb8d)) +* **editor:** Fix resolvable highlighting for HTML editor ([#5379](https://github.com/n8n-io/n8n/issues/5379)) ([31130d5](https://github.com/n8n-io/n8n/commit/31130d5257f253d9be21fe62d668231e27ecbd52)) + + +## [0.214.1](https://github.com/n8n-io/n8n/compare/n8n@0.214.0...n8n@0.214.1) (2023-02-06) + + +### Bug Fixes + +* **editor:** Fix mapping to empty expression input ([#5367](https://github.com/n8n-io/n8n/issues/5367)) ([e4458b4](https://github.com/n8n-io/n8n/commit/e4458b48e005667ae903ee6965e1a299546267f0)) +* **editor:** Fix merge node connectors ([#5364](https://github.com/n8n-io/n8n/issues/5364)) ([20356ba](https://github.com/n8n-io/n8n/commit/20356ba8c80196f9562e073c1a55d55a4d6c37b0)) +* **editor:** Fix multiple-output endpoints success style after connection is detached ([#5366](https://github.com/n8n-io/n8n/issues/5366)) ([9b628dd](https://github.com/n8n-io/n8n/commit/9b628ddc343f0a40c7ddaab93d5258ac949a4ea2)) + + +### Features + +* **Slack Node:** Revamp the node with more functionalities in a new version ([#4587](https://github.com/n8n-io/n8n/issues/4587)) ([4df6942](https://github.com/n8n-io/n8n/commit/4df69428f1e1e440aadddddb019cf559fd824a28)) + + + +# [0.214.0](https://github.com/n8n-io/n8n/compare/n8n@0.213.0...n8n@0.214.0) (2023-02-03) + + +### Bug Fixes + +* Add paired item to the most used nodes ([#5220](https://github.com/n8n-io/n8n/issues/5220)) ([409a9ea](https://github.com/n8n-io/n8n/commit/409a9ea3573ded3156142c2662a501d7d6f5e475)) +* **core:** Fix oauth2 client credentials not always working ([#5327](https://github.com/n8n-io/n8n/issues/5327)) ([ec7575b](https://github.com/n8n-io/n8n/commit/ec7575b0321edf6e21e5ba5fb4094e9a36e65571)) +* **core:** Fix populating of node custom api call options ([#5347](https://github.com/n8n-io/n8n/issues/5347)) ([6985500](https://github.com/n8n-io/n8n/commit/6985500a7d14e21b629de0ee9e3006622e3774bc)) +* **core:** Fix value resolution in declarative node design ([#5217](https://github.com/n8n-io/n8n/issues/5217)) ([b27a60b](https://github.com/n8n-io/n8n/commit/b27a60b66568c1cce00f38eec2dd1b6425a5a9c6)) +* **core:** Prevent shared user details being saved alongside execution data ([#5334](https://github.com/n8n-io/n8n/issues/5334)) ([6ca49f9](https://github.com/n8n-io/n8n/commit/6ca49f9d5474d37281681ea571fa74e43828ca84)) +* **core:** Revert custom API option injecting ([#5345](https://github.com/n8n-io/n8n/issues/5345)) ([6160741](https://github.com/n8n-io/n8n/commit/616074158c10a1928299d7213c58eeb076a664e1)), closes [#5303](https://github.com/n8n-io/n8n/issues/5303) +* **editor:** Add SMTP info translation link slot ([#5288](https://github.com/n8n-io/n8n/issues/5288)) ([c93664a](https://github.com/n8n-io/n8n/commit/c93664a57c6f252044264b09876e9b474740f6e8)) +* **editor:** Change executions title to match menu ([#5349](https://github.com/n8n-io/n8n/issues/5349)) ([338b354](https://github.com/n8n-io/n8n/commit/338b354ef1600903833c9939a8618d1989534e0b)) +* **editor:** Fix `json` field completions while typing ([#5309](https://github.com/n8n-io/n8n/issues/5309)) ([07b941a](https://github.com/n8n-io/n8n/commit/07b941a043f8aac761af63fd5327f45cbff7d275)) +* **editor:** Handling router errors when navigation is canceled by user ([#5271](https://github.com/n8n-io/n8n/issues/5271)) ([911d656](https://github.com/n8n-io/n8n/commit/911d656f995a9a7f50db7e97ae25fcc3230ae4a5)) +* **editor:** Set max width for executions list ([#5302](https://github.com/n8n-io/n8n/issues/5302)) ([52dea08](https://github.com/n8n-io/n8n/commit/52dea08003d314841d261533391e05d688dd1fe4)) +* **editor:** Stop unsaved changes popup display when navigating away from an untouched workflow ([#5259](https://github.com/n8n-io/n8n/issues/5259)) ([6a93aed](https://github.com/n8n-io/n8n/commit/6a93aed3a2c428633fdf922df73203d3d41a7bb6)) +* **editor:** Workflow executions view is broken ([#5341](https://github.com/n8n-io/n8n/issues/5341)) ([50cb757](https://github.com/n8n-io/n8n/commit/50cb75706b73c7349e48956a2e8556b0a2de1e24)) +* **Invoice Ninja Node:** Fix line items not being correctly set for quotes and invoices ([#5304](https://github.com/n8n-io/n8n/issues/5304)) ([3b5e1d1](https://github.com/n8n-io/n8n/commit/3b5e1d127fe049934a0a32310ed408cd129b2d7d)) +* **Linear Node:** Fix pagination issue for get all issues ([#5324](https://github.com/n8n-io/n8n/issues/5324)) ([f9ecc34](https://github.com/n8n-io/n8n/commit/f9ecc34b10544e787f7034e89068aa6c9356fa04)) +* **Mailchimp Trigger Node:** Fix webhook recreation ([#5328](https://github.com/n8n-io/n8n/issues/5328)) ([8f5f1c3](https://github.com/n8n-io/n8n/commit/8f5f1c3aa520576215e16a8cc1a8beadae5f142a)) +* Prevent unnecessarily touching updatedAt when n8n starts ([#5340](https://github.com/n8n-io/n8n/issues/5340)) ([b5154d9](https://github.com/n8n-io/n8n/commit/b5154d9be5e3adccbdcbb0ad748ed869ba75d4cc)) +* **Schedule Trigger Node:** Change scheduler behaviour for intervals days and hours ([#5133](https://github.com/n8n-io/n8n/issues/5133)) ([78bbe2b](https://github.com/n8n-io/n8n/commit/78bbe2ba27990127b1b6a6333361f35e2d3e7a65)) +* **Set Node:** Fix behaviour when selecting continueOnFail & PairedItem ([#5257](https://github.com/n8n-io/n8n/issues/5257)) ([a8637a0](https://github.com/n8n-io/n8n/commit/a8637a0bc6ac19859ce1ff468d0404ac73bc70bb)) + + +### Features + +* **core:** Export OpenAPI spec for external tools ([#5294](https://github.com/n8n-io/n8n/issues/5294)) ([5cb7e50](https://github.com/n8n-io/n8n/commit/5cb7e5007de7374f8ee6e6fbe1c5a8138af2d065)) +* **core:** Fix populating of node custom api call options ([#5303](https://github.com/n8n-io/n8n/issues/5303)) ([e58bc41](https://github.com/n8n-io/n8n/commit/e58bc41d241b3f4a1701191f69e5eadad969bc5f)) +* **core:** Set custom Cache-Control headers for static assets ([#5322](https://github.com/n8n-io/n8n/issues/5322)) ([ee210e8](https://github.com/n8n-io/n8n/commit/ee210e8507ce06f7052328f28ba14451f51b3db4)) +* **core:** Simplify pagination in declarative node design ([#5161](https://github.com/n8n-io/n8n/issues/5161)) ([87ceb6f](https://github.com/n8n-io/n8n/commit/87ceb6f4b8ed1838b874639f176b421e0292b576)) +* **editor:** Add mapping support for data paths ([#5191](https://github.com/n8n-io/n8n/issues/5191)) ([6092f6c](https://github.com/n8n-io/n8n/commit/6092f6c41ee28f3482675b940b1fdc600ae29971)) +* **editor:** Adjust HTML editor component for use in params ([#5285](https://github.com/n8n-io/n8n/issues/5285)) ([8b09e98](https://github.com/n8n-io/n8n/commit/8b09e986542f00675197bc8e003c332e8926779f)) +* **editor:** Append expressions in fixed values when mapping to string/json inputs ([#5300](https://github.com/n8n-io/n8n/issues/5300)) ([88c7ef2](https://github.com/n8n-io/n8n/commit/88c7ef29c84e0e9cfce32b97b8921bd5af38db02)) +* **editor:** Completions for extensions in expression editor ([#5130](https://github.com/n8n-io/n8n/issues/5130)) ([6d811f0](https://github.com/n8n-io/n8n/commit/6d811f0d9f503905ed74938f97f193c7c3d8e7a2)) +* **editor:** Continue to show mapping tooltip after dismiss ([#5289](https://github.com/n8n-io/n8n/issues/5289)) ([c6bc57b](https://github.com/n8n-io/n8n/commit/c6bc57b4cb1f7b647f167a7c18f6c6397e5d1c95)) +* **editor:** Roll out schema view ([#5310](https://github.com/n8n-io/n8n/issues/5310)) ([2b1f151](https://github.com/n8n-io/n8n/commit/2b1f15150f5d069629ed34522be26f5503756614)) +* **FTP Node:** Stream binary data for uploads and downloads ([#5296](https://github.com/n8n-io/n8n/issues/5296)) ([448c295](https://github.com/n8n-io/n8n/commit/448c295314b4e4842ff0352e03ba1f12025f47c9)) +* **Notion Node:** Add image block ([#5237](https://github.com/n8n-io/n8n/issues/5237)) ([36b1e6e](https://github.com/n8n-io/n8n/commit/36b1e6ef1572aec4d905b29a999e4d5f4c72e826)) +* **OpenAI Node:** Add frequency-penalty and presence-penalty ([#5137](https://github.com/n8n-io/n8n/issues/5137)) ([04c058a](https://github.com/n8n-io/n8n/commit/04c058a34e7c306141592691fa646ef6480bbc03)) +* **Salesforce Node:** Add HasOptedOutOfEmail field to lead resource ([#5235](https://github.com/n8n-io/n8n/issues/5235)) ([59f290f](https://github.com/n8n-io/n8n/commit/59f290fe854767c6bf5c01ce9a0fb537297d82b2)) +* **SSH Node:** Stream binary data for uploads and downloads ([#5305](https://github.com/n8n-io/n8n/issues/5305)) ([6f7421f](https://github.com/n8n-io/n8n/commit/6f7421f970b12e870c7d84b0f559b06678e3d42a)) +* **Write Binary File Node:** Stream binary data for writes ([#5306](https://github.com/n8n-io/n8n/issues/5306)) ([d87ff13](https://github.com/n8n-io/n8n/commit/d87ff130a44d4542d1b068ed50c37071a14496b8)) +* **YouTube Node:** Switch upload operation over to streaming and resumable uploads api ([#5320](https://github.com/n8n-io/n8n/issues/5320)) ([3bb1690](https://github.com/n8n-io/n8n/commit/3bb16900867b3994585eb2a62310e617f123c257)) + + + +# [0.213.0](https://github.com/n8n-io/n8n/compare/n8n@0.212.1...n8n@0.213.0) (2023-01-27) + + +### Bug Fixes + +* **core:** Do not crash express app on unhandled rejected promises ([#5252](https://github.com/n8n-io/n8n/issues/5252)) ([7e229a3](https://github.com/n8n-io/n8n/commit/7e229a3d38990022172d4df98afd3dc31dca6e63)) +* **core:** Handle missing binary metadata in download urls ([#5242](https://github.com/n8n-io/n8n/issues/5242)) ([21579a8](https://github.com/n8n-io/n8n/commit/21579a8a2af53f3fb4174afc2013cfad43511a31)) +* **core:** Upsert credentials and workflows in the import: commands ([#5231](https://github.com/n8n-io/n8n/issues/5231)) ([259296c](https://github.com/n8n-io/n8n/commit/259296c5c940bd5dcebec5ad3c9acc99a7923b8f)) +* **core:** Validate numeric IDs in the public API ([#5251](https://github.com/n8n-io/n8n/issues/5251)) ([68e4083](https://github.com/n8n-io/n8n/commit/68e4083bbdb8200966dc9e702bed9ca5cbc1cdf4)) +* **editor:** Do not request workflow data twice when opening a workflow ([#5246](https://github.com/n8n-io/n8n/issues/5246)) ([901e94d](https://github.com/n8n-io/n8n/commit/901e94dc01c4b352301053990f197eda48c30b41)) +* **editor:** Execution list micro optimization ([#5244](https://github.com/n8n-io/n8n/issues/5244)) ([a1710fb](https://github.com/n8n-io/n8n/commit/a1710fbd272a0f3980a8f323bbccf58806e9b900)) +* **editor:** Fix node authentication options ordering and hiding options based on node version ([#5268](https://github.com/n8n-io/n8n/issues/5268)) ([7d74181](https://github.com/n8n-io/n8n/commit/7d7418140eb03da6014ff8ac51668fc427d10c33)) +* **editor:** Fix save modal appearing after duplicating a workflow ([#5247](https://github.com/n8n-io/n8n/issues/5247)) ([c711c53](https://github.com/n8n-io/n8n/commit/c711c53ad6b044b8f90a237d6d8d1ce631359dc3)) +* **editor:** Prevent workflow execution list infinite no network error ([#5230](https://github.com/n8n-io/n8n/issues/5230)) ([0d33329](https://github.com/n8n-io/n8n/commit/0d33329bc87b705760fdc70ccb39374cbd71f6f6)) +* Extension being too eager and making calls when it shouldn't ([#5232](https://github.com/n8n-io/n8n/issues/5232)) ([09bdd96](https://github.com/n8n-io/n8n/commit/09bdd96d290166cced6faf5da4dda83d6d270aa3)) +* **Google Drive Node:** Use the correct mimetype on converted downloads ([#5240](https://github.com/n8n-io/n8n/issues/5240)) ([58d0890](https://github.com/n8n-io/n8n/commit/58d0890dc319c918183fd81999dc87ea9c4732fd)) +* **HelpScout Node:** Fix tag search not working when getting all conversations ([#5239](https://github.com/n8n-io/n8n/issues/5239)) ([6d36782](https://github.com/n8n-io/n8n/commit/6d36782463cda1d211270ecf9bd1a8cccca22cdc)) +* **Notion (Beta) Node:** Fix create database page with multiple relation IDs not working ([#5260](https://github.com/n8n-io/n8n/issues/5260)) ([8ce85e3](https://github.com/n8n-io/n8n/commit/8ce85e37592da061164db18af52852e8ed1d2046)) + + +### Features + +* **core:** Add LDAP support ([#3835](https://github.com/n8n-io/n8n/issues/3835)) ([0c70a40](https://github.com/n8n-io/n8n/commit/0c70a4031702d3c770968d5679d2900def7225a8)) +* **editor:** Adjust Google sign-in button to adhere to the guidelines ([#5248](https://github.com/n8n-io/n8n/issues/5248)) ([73cbddc](https://github.com/n8n-io/n8n/commit/73cbddcb2dc046f1795740a5dd2258577df4d049)) +* **editor:** Simplify NDV by moving authentication details to credentials modal ([#5067](https://github.com/n8n-io/n8n/issues/5067)) ([b321c5e](https://github.com/n8n-io/n8n/commit/b321c5e4ec5aefa605991861db68efc860e0f122)) +* **GitLab Node:** Add file operations (create, delete, edit, get, list) ([#5167](https://github.com/n8n-io/n8n/issues/5167)) ([cedf2e0](https://github.com/n8n-io/n8n/commit/cedf2e012c7309cd225f9810d30315c851bcab3a)) +* HTML node ([#5107](https://github.com/n8n-io/n8n/issues/5107)) ([74e6f5d](https://github.com/n8n-io/n8n/commit/74e6f5d190d010831fc2ef98afdd9dff3dc93b3c)) +* Improve workflow list performance using RecycleScroller and on-demand sharing data loading ([#5181](https://github.com/n8n-io/n8n/issues/5181)) ([874c735](https://github.com/n8n-io/n8n/commit/874c735d0af81c3c81cf82fb9bdf1232608d6400)), closes [#5125](https://github.com/n8n-io/n8n/issues/5125) +* **Jira Software Node:** Use resource locator component ([#5090](https://github.com/n8n-io/n8n/issues/5090)) ([237b1d8](https://github.com/n8n-io/n8n/commit/237b1d8614ffd19215eaee6a0cb9422a16cf0a5c)) +* **Send Email Node:** Overhaul ([832fb87](https://github.com/n8n-io/n8n/commit/832fb87954d480ed46913c8b0f8067c96db28aab)) + + + +## [0.212.1](https://github.com/n8n-io/n8n/compare/n8n@0.212.0...n8n@0.212.1) (2023-01-23) + +### Bug Fixes + +- Add schema to postgres migrations (hotfix) ([#5218](https://github.com/n8n-io/n8n/issues/5218)) ([c5245dd](https://github.com/n8n-io/n8n/commit/c5245dd387f8829210a922223e46df7f275e79ca)) +- **core:** Fix execute-once incoming data handling ([#5211](https://github.com/n8n-io/n8n/issues/5211)) ([3ea83d8](https://github.com/n8n-io/n8n/commit/3ea83d872ee2f8326fc9cb898fdb05bbe3b827bf)) +- **core:** Fix expression extension misdetection ([#5219](https://github.com/n8n-io/n8n/issues/5219)) ([0b123ce](https://github.com/n8n-io/n8n/commit/0b123ce05e14a996f74ed4fe16008edca836d099)) +- **core:** Fix onWorkflowPostExecute not being called ([#5224](https://github.com/n8n-io/n8n/issues/5224)) ([4f89fb4](https://github.com/n8n-io/n8n/commit/4f89fb4d4d663a0a39081ceda9d6e88e6c605859)) +- **core:** Fix url in error handelling for the error Trigger ([#5201](https://github.com/n8n-io/n8n/issues/5201)) ([6e39175](https://github.com/n8n-io/n8n/commit/6e391755e47efc8a10529b24dee5e90c466b20b9)) +- **core:** Make pindata with webhook responding on last node manual-only ([#5223](https://github.com/n8n-io/n8n/issues/5223)) ([fcbf4fd](https://github.com/n8n-io/n8n/commit/fcbf4fd587c0c8721f58b09edc68fe140acaf9f6)) +- **editor:** Making parameter input components label configurable ([#5195](https://github.com/n8n-io/n8n/issues/5195)) ([9ce526e](https://github.com/n8n-io/n8n/commit/9ce526e784a6e61ed0f5b0a9ddb9d4ea21584ab2)) +- **editor:** Remove infinite loading in not found workflow level execution ([#5174](https://github.com/n8n-io/n8n/issues/5174)) ([96dddf1](https://github.com/n8n-io/n8n/commit/96dddf12e1561935fa191e55baa950c207796e83)) +- **Linear Node:** Fix issue with single item not being returned ([#5193](https://github.com/n8n-io/n8n/issues/5193)) ([e810966](https://github.com/n8n-io/n8n/commit/e810966a3b00e7a581120df2b22d71026e9ba4cb)) +- **Notion (Beta) Node:** Fix create database page fails if relation param is empty/undefined ([#5182](https://github.com/n8n-io/n8n/issues/5182)) ([11da863](https://github.com/n8n-io/n8n/commit/11da863a2104259248b67edfff7bee3e18b3789a)) + +### Features + +- **Google Analytics Node:** Overhaul for google analytics node ([736e700](https://github.com/n8n-io/n8n/commit/736e700902d333df55abff86c15c688de15c9bde)) + +# [0.212.0](https://github.com/n8n-io/n8n/compare/n8n@0.211.2...n8n@0.212.0) (2023-01-19) + +### Bug Fixes + +- **core:** Revert rule @typescript-eslint/prefer-nullish-coalescing ([e667df7](https://github.com/n8n-io/n8n/commit/e667df783c8c396fc40ff14de704b1e0def4a699)) +- **editor:** Allow special chars in node selector completion ([#5196](https://github.com/n8n-io/n8n/issues/5196)) ([b718464](https://github.com/n8n-io/n8n/commit/b718464b1f28e52ffb0b12e4b927d8fe3678d02a)) +- **GitLab Node:** Update credential test endpoint ([#5166](https://github.com/n8n-io/n8n/issues/5166)) ([e275306](https://github.com/n8n-io/n8n/commit/e275306c64a410c154e586532e35d25a583f75b4)) +- **Gmail Trigger Node:** Filter by labels not working ([#5173](https://github.com/n8n-io/n8n/issues/5173)) ([026f3a5](https://github.com/n8n-io/n8n/commit/026f3a532d30dcf79b76c9f9cff709e6af0eb9ee)) +- **HTTP Request Node:** Bug - node requires string instead of json ([8f49f49](https://github.com/n8n-io/n8n/commit/8f49f494ae66ce933f0fce3c3b43ce99baa1b728)) +- **HTTP Request Node:** Response format to text is ignored for JSON responses ([8dbe615](https://github.com/n8n-io/n8n/commit/8dbe6159d04c963e7858d31d64721ddc0911ea36)) + +### Features + +- **core:** Add Prometheus metrics for n8n events and api invocations (experimental) ([#5177](https://github.com/n8n-io/n8n/issues/5177)) ([9b032d6](https://github.com/n8n-io/n8n/commit/9b032d68bc8a7a45aae73e9442315e872902d50a)), closes [#5187](https://github.com/n8n-io/n8n/issues/5187) +- **Item Lists Node:** Table tranformation ([5426690](https://github.com/n8n-io/n8n/commit/5426690791ead70085681ef31f229fbe15c7d656)) + +## [0.211.2](https://github.com/n8n-io/n8n/compare/n8n@0.211.1...n8n@0.211.2) (2023-01-17) + +### Bug Fixes + +- **core:** Restore community nodes installation ([#5180](https://github.com/n8n-io/n8n/issues/5180)) ([c0268f5](https://github.com/n8n-io/n8n/commit/c0268f572fed4953354123da90f780612c7651ee)) + +### Features + +- (Google Sheets Trigger Node): Trigger for Google Sheets ([e839a81](https://github.com/n8n-io/n8n/commit/e839a81cc5f31eb622915749f9e598f248e407d7)) + +## [0.211.1](https://github.com/n8n-io/n8n/compare/n8n@0.211.0...n8n@0.211.1) (2023-01-16) + +### Bug Fixes + +- Build `cli` to fix Postgres and MySQL test runs ([#5171](https://github.com/n8n-io/n8n/issues/5171)) ([a0c5232](https://github.com/n8n-io/n8n/commit/a0c5232aa53b13e581b5da4b6f984f5d7893fe33)) +- Extend date functions clobbering plus/minus ([#5170](https://github.com/n8n-io/n8n/issues/5170)) ([f634f0d](https://github.com/n8n-io/n8n/commit/f634f0dc59389a8c7ecd4154d2cf9af495b129aa)) +- Extension deep compare not quite working for some primitives ([#5172](https://github.com/n8n-io/n8n/issues/5172)) ([98017dc](https://github.com/n8n-io/n8n/commit/98017dc36f3e2fc3d2a5178fb7259205504e5582)) +- Upgrade `jsonwebtoken` to address CVE-2022-23540 ([#5116](https://github.com/n8n-io/n8n/issues/5116)) ([97969fc](https://github.com/n8n-io/n8n/commit/97969fc81581379d2a3c49d839206cc9b9e05d9d)) + +### Features + +- **editor:** Supress validation errors for freshly added nodes ([#5149](https://github.com/n8n-io/n8n/issues/5149)) ([582865c](https://github.com/n8n-io/n8n/commit/582865c7e9eff99eabb36636ca7af2d2b2e76af8)) +- **Google Ads Node:** Update api version to v11 ([#4427](https://github.com/n8n-io/n8n/issues/4427)) ([dfff982](https://github.com/n8n-io/n8n/commit/dfff982662b7cee5c0203764a59d2355a02a9030)) +- **Google Drive Trigger Node:** Use resource locator component ([#5148](https://github.com/n8n-io/n8n/issues/5148)) ([9958c32](https://github.com/n8n-io/n8n/commit/9958c324dbf88f25efd34433ce51af9e3aa44ae3)) + +# [0.211.0](https://github.com/n8n-io/n8n/compare/n8n@0.210.2...n8n@0.211.0) (2023-01-13) + +### Bug Fixes + +- **core:** Fixes event msg confirmations if no subscribers present ([#5118](https://github.com/n8n-io/n8n/issues/5118)) ([62d06b1](https://github.com/n8n-io/n8n/commit/62d06b1e6edb8a8a6dfb4c57de6ef3e095e6301c)) +- **core:** Remove threads pkg, rewrite log writer worker ([#5134](https://github.com/n8n-io/n8n/issues/5134)) ([e845eb3](https://github.com/n8n-io/n8n/commit/e845eb33f9d0881ae5c8a26d4eab4f2109373ff5)) +- **core:** Throw error in UI on expression referencing missing node but do not fail execution ([#5158](https://github.com/n8n-io/n8n/issues/5158)) ([c9e158e](https://github.com/n8n-io/n8n/commit/c9e158e45848ee94b04f49694a552f9f272a97dd)) +- DB revert command shouldn't run full migrations before each revert ([#5131](https://github.com/n8n-io/n8n/issues/5131)) ([a9fb393](https://github.com/n8n-io/n8n/commit/a9fb393e1a260a2dc26ef0f759f541fcde1c722f)) +- **editor:** Disable data pinning on multiple output node types ([#5111](https://github.com/n8n-io/n8n/issues/5111)) ([56951e8](https://github.com/n8n-io/n8n/commit/56951e83c0fb03a24ddb4cd0b1705e22165b8692)) +- **editor:** Do not overwrite window.onerror in production ([#5135](https://github.com/n8n-io/n8n/issues/5135)) ([0dbba6d](https://github.com/n8n-io/n8n/commit/0dbba6d57f34b67935867bd81359fb833654fce1)) +- **editor:** Execution page bug fixes ([#5122](https://github.com/n8n-io/n8n/issues/5122)) ([665eaef](https://github.com/n8n-io/n8n/commit/665eaef925d2e311377ecb09859f69f5fddc54b5)) +- **editor:** Fixes event bus test ([#5119](https://github.com/n8n-io/n8n/issues/5119)) ([871a1d7](https://github.com/n8n-io/n8n/commit/871a1d7dad839b080df3a27fb68ea90033562f3f)) +- **editor:** Hide data pinning discoverability tooltip in execution view ([#5145](https://github.com/n8n-io/n8n/issues/5145)) ([d10ca53](https://github.com/n8n-io/n8n/commit/d10ca530cff1580c20670dd68dfd7937e1a78d74)) +- **editor:** Mapping tooltip dismiss ([#5128](https://github.com/n8n-io/n8n/issues/5128)) ([6deb551](https://github.com/n8n-io/n8n/commit/6deb55126e9f493de4717018a3587088f1d5ab41)) +- **editor:** Recover from unsaved finished execution ([#5121](https://github.com/n8n-io/n8n/issues/5121)) ([af55ecd](https://github.com/n8n-io/n8n/commit/af55ecd64b1d4948fc08d7d32900fa9d57ef299b)) +- **editor:** Setting NDV session ID ([#5144](https://github.com/n8n-io/n8n/issues/5144)) ([c724de6](https://github.com/n8n-io/n8n/commit/c724de6be2e33fe824c42c0ab8242caa9f1133f3)) +- First/last being extended on proxy objects ([#5140](https://github.com/n8n-io/n8n/issues/5140)) ([9dca984](https://github.com/n8n-io/n8n/commit/9dca984c0ce68dd9c1ab14a6454c356dddf8287f)) +- Handle memory issues gracefully ([#5147](https://github.com/n8n-io/n8n/issues/5147)) ([1445424](https://github.com/n8n-io/n8n/commit/14454243e7e0b40fc766cdb05c6b34756fb59109)) +- **PayPal Trigger Node:** Omit verification on sandbox env ([#5150](https://github.com/n8n-io/n8n/issues/5150)) ([e140ecb](https://github.com/n8n-io/n8n/commit/e140ecbc2c6a07b96df3d048eb138dd34b25d2ce)) +- Report app startup and DB migration errors to Sentry ([#5127](https://github.com/n8n-io/n8n/issues/5127)) ([a573db2](https://github.com/n8n-io/n8n/commit/a573db2ef78024a4254ff0f468dc47b12148aa28)) +- Run every DB migration inside a transaction ([#5129](https://github.com/n8n-io/n8n/issues/5129)) ([62cce2e](https://github.com/n8n-io/n8n/commit/62cce2e518451f6057e316208828539f26868c18)) +- Upgrade `class-validator` to address CVE-2019-18413 ([#5139](https://github.com/n8n-io/n8n/issues/5139)) ([14a61f6](https://github.com/n8n-io/n8n/commit/14a61f6ab1f0289e1b96480e3d557d14dd8178d8)) +- **Zoom Node:** Add notice about deprecation of Zoom JWT app support ([#5156](https://github.com/n8n-io/n8n/issues/5156)) ([146bc3b](https://github.com/n8n-io/n8n/commit/146bc3bff503be70abaad94418535f23ff8fc511)) + +### Features + +- Add demo experiment to help users activate ([#5141](https://github.com/n8n-io/n8n/issues/5141)) ([c2eb519](https://github.com/n8n-io/n8n/commit/c2eb519398067e799e73b6c3059f57f3deca172a)) +- **editor:** Executions page ([#4997](https://github.com/n8n-io/n8n/issues/4997)) ([819c4ad](https://github.com/n8n-io/n8n/commit/819c4adb3cd79c1743debd97c21fc60a2a703534)) +- **editor:** Remove prevent-ndv-auto-open feature flag ([#5114](https://github.com/n8n-io/n8n/issues/5114)) ([ab4785a](https://github.com/n8n-io/n8n/commit/ab4785ab31da061df13a6b37fe8790ddc30e3ed0)) +- **editor:** Update callout component design ([#5126](https://github.com/n8n-io/n8n/issues/5126)) ([d2d481f](https://github.com/n8n-io/n8n/commit/d2d481f12e1777a60ee5411c8cdac50b1dfc3ee3)) +- Expression extension framework ([#4372](https://github.com/n8n-io/n8n/issues/4372)) ([3d05acf](https://github.com/n8n-io/n8n/commit/3d05acf3130cce2c5b5155d91faa22b707ce2373)), closes [#4045](https://github.com/n8n-io/n8n/issues/4045) [#4044](https://github.com/n8n-io/n8n/issues/4044) [#4046](https://github.com/n8n-io/n8n/issues/4046) + +## [0.210.2](https://github.com/n8n-io/n8n/compare/n8n@0.210.1...n8n@0.210.2) (2023-01-09) + +### Bug Fixes + +- **core:** Fix crash of manual workflow executions for unsaved workflows ([#5106](https://github.com/n8n-io/n8n/issues/5106)) ([a43e3e4](https://github.com/n8n-io/n8n/commit/a43e3e4112f1b9ef68ed963c41142fd591916d69)) +- **editor:** Omit `pairedItem` from proxy completions ([#5098](https://github.com/n8n-io/n8n/issues/5098)) ([320e646](https://github.com/n8n-io/n8n/commit/320e646380395af00b8b73445af045f9b6315dc4)) +- **editor:** Prevent refresh on submit in credential edit modal ([#5091](https://github.com/n8n-io/n8n/issues/5091)) ([9e7a9bf](https://github.com/n8n-io/n8n/commit/9e7a9bfe2096b880e265700437b76e51d9be545f)) +- **Google Sheets Node:** Fix for auto-range detection ([77031a2](https://github.com/n8n-io/n8n/commit/77031a295059938c9bf1fdf549b7ffcb6746db17)) +- **Read Binary File Node:** Do not crash the execution when the source file does not exist ([#5100](https://github.com/n8n-io/n8n/issues/5100)) ([c97f3ca](https://github.com/n8n-io/n8n/commit/c97f3cad596e26ff7dbd0e51fc5cfeb508d2c198)) +- Remove anonymous ID from tracking calls ([#5099](https://github.com/n8n-io/n8n/issues/5099)) ([6d0f2bf](https://github.com/n8n-io/n8n/commit/6d0f2bff7f45ab27d76c34e5d4062df5d711331c)) +- Stop OOM crashes in Execution Data pruning ([#5095](https://github.com/n8n-io/n8n/issues/5095)) ([c4df204](https://github.com/n8n-io/n8n/commit/c4df2049a8f8c5e9cbc69f634b0a5747e0677376)) +- Update links for user management and SMTP help ([#5109](https://github.com/n8n-io/n8n/issues/5109)) ([47e32e4](https://github.com/n8n-io/n8n/commit/47e32e42682b2d6791157fdb11e5513381bd7452)) + +### Features + +- **editor:** Introduce proxy completions to expressions ([#5075](https://github.com/n8n-io/n8n/issues/5075)) ([f4140d0](https://github.com/n8n-io/n8n/commit/f4140d011fa3b748a89122cd41c9628dd5313efd)) + +## [0.210.1](https://github.com/n8n-io/n8n/compare/n8n@0.210.0...n8n@0.210.1) (2023-01-05) + +### Bug Fixes + +- **Google Sheets Node:** Append or Update fails for numeric values ([b5e70d4](https://github.com/n8n-io/n8n/commit/b5e70d45bf5155bafe258dcf04609e6f71c5356d)) +- Fix external hooks ([#5094](https://github.com/n8n-io/n8n/issues/5094)) ([d77523b](https://github.com/n8n-io/n8n/commit/d77523bd31884c4493079ee0b0dea8c66e642a95)) + +### Features + +- Add user management invite links without SMTP set up ([#5084](https://github.com/n8n-io/n8n/issues/5084)) ([2327563](https://github.com/n8n-io/n8n/commit/2327563c441634bc6c127f2fe58792657fa7d114)), closes [#5079](https://github.com/n8n-io/n8n/issues/5079) [#5085](https://github.com/n8n-io/n8n/issues/5085) + +# [0.210.0](https://github.com/n8n-io/n8n/compare/n8n@0.209.4...n8n@0.210.0) (2023-01-05) + +### Bug Fixes + +- Apply credential overwrites recursively ([#5072](https://github.com/n8n-io/n8n/issues/5072)) ([5d746c4](https://github.com/n8n-io/n8n/commit/5d746c4a8341e2538caa140bedfa269a5babb8db)) +- **core:** Fix full manual execution for error trigger as starter of 2+ node workflow ([#5055](https://github.com/n8n-io/n8n/issues/5055)) ([a7868ae](https://github.com/n8n-io/n8n/commit/a7868ae77d070226a7c52de5a445b03e1455fbc7)) +- **core:** Fix OAuth credential creation via API ([#5064](https://github.com/n8n-io/n8n/issues/5064)) ([93da026](https://github.com/n8n-io/n8n/commit/93da026c0d2a6f3738d9e1a3b450ad802ff15826)) +- **core:** Fixes issue with workflow lastUpdated field ([#5015](https://github.com/n8n-io/n8n/issues/5015)) ([59004fe](https://github.com/n8n-io/n8n/commit/59004fe7bb1e821444a029c2fd3fb3f0e6a59733)) +- **editor:** Clear node creator and scrim on workspace reset ([#5066](https://github.com/n8n-io/n8n/issues/5066)) ([43304b0](https://github.com/n8n-io/n8n/commit/43304b069168ef4ca6bb345eebf01d5f9ff9cb0f)) +- **editor:** Fix an infinite loop while loading executions that are not on the current executions list ([#5071](https://github.com/n8n-io/n8n/issues/5071)) ([8cf3c86](https://github.com/n8n-io/n8n/commit/8cf3c868609447df20876d5ef5f25575bbe9da9b)) +- **editor:** Make node title non-editable in executions view ([#5046](https://github.com/n8n-io/n8n/issues/5046)) ([2f40a7f](https://github.com/n8n-io/n8n/commit/2f40a7f98a4cea990d6c57cba8efa6fbd9c622e3)) +- **editor:** Prevent scrim on executable triggers ([#5068](https://github.com/n8n-io/n8n/issues/5068)) ([e1f9349](https://github.com/n8n-io/n8n/commit/e1f9349c192fef03f31c5d09a1a9d38b50a6fe99)) +- **editor:** Support tabbing away from inline expression editor ([#5056](https://github.com/n8n-io/n8n/issues/5056)) ([a2ab78f](https://github.com/n8n-io/n8n/commit/a2ab78f9274427c57db1c59d80d1ef6474879a6a)) +- Fix executions bulk deletion ([#5074](https://github.com/n8n-io/n8n/issues/5074)) ([3754c5c](https://github.com/n8n-io/n8n/commit/3754c5c734814ed310eb08a6b69a38c632246696)) +- **Google Sheets Node:** Fix exception when no Values to Send are set ([f1184cc](https://github.com/n8n-io/n8n/commit/f1184ccab5dd7f0f7a80a5f39cf4f7bdb387f7ae)) +- **Respond to Webhook Node:** Fix issue that content-type header gets overwritten ([#5088](https://github.com/n8n-io/n8n/issues/5088)) ([7954025](https://github.com/n8n-io/n8n/commit/7954025eb2091d70479585fa90efbf9af4db2ae0)) +- **Slack Node:** Add missing channels:read OAuth2 scope ([#5092](https://github.com/n8n-io/n8n/issues/5092)) ([62b2fc3](https://github.com/n8n-io/n8n/commit/62b2fc37c343b09e0e9caae49de11bee2e9dbd9b)) + +### Features + +- Add global event bus ([#4860](https://github.com/n8n-io/n8n/issues/4860)) ([b67f803](https://github.com/n8n-io/n8n/commit/b67f803cbee04dd94caee2e80f12a3af810a3984)) +- **Compare Datasets Node:** Fuzzy compare option ([9615253](https://github.com/n8n-io/n8n/commit/9615253155bec6b57344d790681c8a598fbc21c0)) +- **core:** Add compatibility to redis > 6 ACLs system using username in queue-mode ([#5048](https://github.com/n8n-io/n8n/issues/5048)) ([0ec66bf](https://github.com/n8n-io/n8n/commit/0ec66bfb421c4eb3c6e92144c7563d8d3ea4ac69)) +- **core:** Security audit ([#5034](https://github.com/n8n-io/n8n/issues/5034)) ([d548161](https://github.com/n8n-io/n8n/commit/d5481616326b304a76937b104d24326a93f6f565)) +- **editor:** Add SSO fakedoor feature ([#5076](https://github.com/n8n-io/n8n/issues/5076)) ([8e8df6d](https://github.com/n8n-io/n8n/commit/8e8df6d6116bb22f372bf4b50511860cacb0e2e0)) + +### Performance Improvements + +- Lazy-load public-api dependencies to reduce baseline memory usage ([#5049](https://github.com/n8n-io/n8n/issues/5049)) ([a455cce](https://github.com/n8n-io/n8n/commit/a455cce7e6cc511360a9d6f9113b5a6d18e06dba)) +- Lazy-load queue-mode and analytics dependencies ([#5061](https://github.com/n8n-io/n8n/issues/5061)) ([b828cb3](https://github.com/n8n-io/n8n/commit/b828cb31d621f20b6c9612a2ac79f48e6337e528)) + +## [0.209.4](https://github.com/n8n-io/n8n/compare/n8n@0.209.3...n8n@0.209.4) (2022-12-28) + +### Bug Fixes + +- **editor:** Add sticky note without manual trigger ([#5039](https://github.com/n8n-io/n8n/issues/5039)) ([18140e0](https://github.com/n8n-io/n8n/commit/18140e059bd95d51ad24a4ef4d6e6c72ce3137f3)) +- **editor:** Display default missing value in table view as `undefined` ([#5038](https://github.com/n8n-io/n8n/issues/5038)) ([33d7a13](https://github.com/n8n-io/n8n/commit/33d7a13e73dffc72b1a9aa4cf603e7758c65e40c)) +- **editor:** Fix displaying of some trigger nodes in the creator panel ([#5040](https://github.com/n8n-io/n8n/issues/5040)) ([4daf905](https://github.com/n8n-io/n8n/commit/4daf905ce264f6f76045a508e2f9ed849f2b1f5e)) +- **editor:** Fix trigger node type identification on add to canvas ([#5043](https://github.com/n8n-io/n8n/issues/5043)) ([2aba0c6](https://github.com/n8n-io/n8n/commit/2aba0c6d47d6d87038db6877a29e15ed079d712b)) +- **editor:** Usage and plans page on Desktop ([#5045](https://github.com/n8n-io/n8n/issues/5045)) ([26e2321](https://github.com/n8n-io/n8n/commit/26e2321a710d7b42559492a6605cef3a248d918e)) + +### Features + +- **editor:** Switch to expression on `=` input ([#5044](https://github.com/n8n-io/n8n/issues/5044)) ([16bd761](https://github.com/n8n-io/n8n/commit/16bd7610fc337fa5ba9b0088b91396bb13570bcb)) + +## [0.209.3](https://github.com/n8n-io/n8n/compare/n8n@0.209.2...n8n@0.209.3) (2022-12-27) + +### Bug Fixes + +- **core:** Do not send credentials to browser console ([#5031](https://github.com/n8n-io/n8n/issues/5031)) ([afc5297](https://github.com/n8n-io/n8n/commit/afc529799d5049e1ccaf249d191dce7ff237ee96)) +- **core:** Non owner should be permitted to use their own credentials ([#5036](https://github.com/n8n-io/n8n/issues/5036)) ([6efbac3](https://github.com/n8n-io/n8n/commit/6efbac307fb7b0e8436ad1dbd8662b8d1a2167f6)) +- **editor:** Fix for loading executions that are not on the current executions list ([#5035](https://github.com/n8n-io/n8n/issues/5035)) ([d0865e2](https://github.com/n8n-io/n8n/commit/d0865e28ffe78ce5ec201dab12b634cbdafcb4e8)) +- **editor:** Transparentize tertiary button on Usage page ([#5033](https://github.com/n8n-io/n8n/issues/5033)) ([d6bc760](https://github.com/n8n-io/n8n/commit/d6bc760ab4b003d6233df8428f373b4c8f760a7c)) +- **editor:** Update credential owner warning when sharing ([#5029](https://github.com/n8n-io/n8n/issues/5029)) ([a8f4efa](https://github.com/n8n-io/n8n/commit/a8f4efaf3ebc349c6ee073200e19ac57eb961ce9)) + +### Features + +- **core:** Implement webhook-only manual execution ([#4960](https://github.com/n8n-io/n8n/issues/4960)) ([d113977](https://github.com/n8n-io/n8n/commit/d113977b10ffe1db879e7fa0807da8147e52ca5d)) +- **editor:** Improve UX for brace completion from selection ([#5024](https://github.com/n8n-io/n8n/issues/5024)) ([52077e2](https://github.com/n8n-io/n8n/commit/52077e2c45fca3d5830a39ca3416b073f783fbf5)) + +## [0.209.2](https://github.com/n8n-io/n8n/compare/n8n@0.209.1...n8n@0.209.2) (2022-12-23) + +### Bug Fixes + +- **editor:** Ensure full tree on expression editor parse ([#5027](https://github.com/n8n-io/n8n/issues/5027)) ([47854eb](https://github.com/n8n-io/n8n/commit/47854ebc36c115110bd3cc65b3f1fd95a89fdb9d)) +- Fix automatic credential selection when credentials are shared ([#5020](https://github.com/n8n-io/n8n/issues/5020)) ([6a8448d](https://github.com/n8n-io/n8n/commit/6a8448da5fceae393a31f222981a33263de72c1a)) + +### Performance Improvements + +- Improve workflows list performance ([#5021](https://github.com/n8n-io/n8n/issues/5021)) ([bb0eeda](https://github.com/n8n-io/n8n/commit/bb0eedada9afcae589c968ffcb583fae7b6e1959)) + +## [0.209.1](https://github.com/n8n-io/n8n/compare/n8n@0.209.0...n8n@0.209.1) (2022-12-22) + +### Bug Fixes + +- **AWS DynamoDB Node:** Fix issue pagination and simplify issue [#4956](https://github.com/n8n-io/n8n/issues/4956) [#4957](https://github.com/n8n-io/n8n/issues/4957) ([#4959](https://github.com/n8n-io/n8n/issues/4959)) ([a43ea17](https://github.com/n8n-io/n8n/commit/a43ea177ebcc983ccc440662f397bf8b1698b4df)) +- DynamoDB node type issues ([#5002](https://github.com/n8n-io/n8n/issues/5002)) ([9568b74](https://github.com/n8n-io/n8n/commit/9568b747c74cd72fb7629e95a7555878b4ac4afb)) +- **editor:** Fix for executions preview scroll load and wrong execution displayed ([#4994](https://github.com/n8n-io/n8n/issues/4994)) ([bd0c2af](https://github.com/n8n-io/n8n/commit/bd0c2afaac37194efec8872f9fdb0a37a3f74c40)) +- **editor:** Force parse on long expressions ([#5009](https://github.com/n8n-io/n8n/issues/5009)) ([22fcc8f](https://github.com/n8n-io/n8n/commit/22fcc8f2be64fb381a64f12485d81b598ef406e5)) +- Issue with credentials and workflows not being matched correctly due to incorrect typing ([#5011](https://github.com/n8n-io/n8n/issues/5011)) ([746e848](https://github.com/n8n-io/n8n/commit/746e8487d250d77d91dabd8463f869a3e96d0fc2)) +- Restore missing tags in workflow retrieve ([#5004](https://github.com/n8n-io/n8n/issues/5004)) ([87d8865](https://github.com/n8n-io/n8n/commit/87d8865ad38e1e5b4a3bca7d807536975116ba82)) +- Show trigger actions again in nodes panel ([#5016](https://github.com/n8n-io/n8n/issues/5016)) ([e7cb190](https://github.com/n8n-io/n8n/commit/e7cb1907cdf90e9497c24f39f3e9b53e5470762c)), closes [#4976](https://github.com/n8n-io/n8n/issues/4976) + +# [0.209.0](https://github.com/n8n-io/n8n/compare/n8n@0.208.1...n8n@0.209.0) (2022-12-21) + +### Bug Fixes + +- **editor:** Correctly display trigger nodes without actions and with related regular node in the "On App Events" category ([#4976](https://github.com/n8n-io/n8n/issues/4976)) ([445463a](https://github.com/n8n-io/n8n/commit/445463a605f5f327f897b23a9b4504939358d0df)) +- Fix stickies resize ([#4986](https://github.com/n8n-io/n8n/issues/4986)) ([82f7635](https://github.com/n8n-io/n8n/commit/82f763589b21815e5ba91c10a4676d25f843eddd)) +- Hide trigger tooltip for nodes with static test output ([#4970](https://github.com/n8n-io/n8n/issues/4970)) ([5b11dc3](https://github.com/n8n-io/n8n/commit/5b11dc3ff9ff75eb7c65721e0d6c03707039e7ff)) +- Keep expression when dropping mapped value ([#4981](https://github.com/n8n-io/n8n/issues/4981)) ([87c7643](https://github.com/n8n-io/n8n/commit/87c76434a294f10474711ba3f023f2f4ca47f14d)) +- Prevent keyboard shortcuts in expression editor modal ([#4984](https://github.com/n8n-io/n8n/issues/4984)) ([29364ea](https://github.com/n8n-io/n8n/commit/29364ea7026e5e2a288b1866956f01e380ff05a0)) +- Redirect home to workflows always ([#4968](https://github.com/n8n-io/n8n/issues/4968)) ([90bfdfd](https://github.com/n8n-io/n8n/commit/90bfdfd577c02aee520545cf8758019042cdf99c)) +- Update mapping gifs ([#4982](https://github.com/n8n-io/n8n/issues/4982)) ([9d00b47](https://github.com/n8n-io/n8n/commit/9d00b4748b39f5c2b08721c5ee73e47b43230b9d)) +- Upgrade amqplib to address CVE-2022-0686 ([#4972](https://github.com/n8n-io/n8n/issues/4972)) ([570ed3b](https://github.com/n8n-io/n8n/commit/570ed3b52191cf3a162fcdaaabc8ab15fb0ef08c)) +- View option for binary-data shouldn't download the file on Chrome/Edge ([#4995](https://github.com/n8n-io/n8n/issues/4995)) ([e225c31](https://github.com/n8n-io/n8n/commit/e225c3190ea4cb5f68f642aab455ed0044fdecf9)) + +### Features + +- **editor:** Add usage and plan pages ([#4819](https://github.com/n8n-io/n8n/issues/4819)) ([0da338f](https://github.com/n8n-io/n8n/commit/0da338f9b5f850b25e97383ae1f4cec8d0e4c17b)), closes [#4793](https://github.com/n8n-io/n8n/issues/4793) [#4842](https://github.com/n8n-io/n8n/issues/4842) [#4866](https://github.com/n8n-io/n8n/issues/4866) [#4875](https://github.com/n8n-io/n8n/issues/4875) [#4958](https://github.com/n8n-io/n8n/issues/4958) [#4979](https://github.com/n8n-io/n8n/issues/4979) +- Update mapping pill for table/json views ([#4965](https://github.com/n8n-io/n8n/issues/4965)) ([343f53b](https://github.com/n8n-io/n8n/commit/343f53bf5393e86eb850d07de85b762476294656)) + +## [0.208.1](https://github.com/n8n-io/n8n/compare/n8n@0.208.0...n8n@0.208.1) (2022-12-19) + +### Bug Fixes + +- Always retain original errors in the error chain on NodeOperationError ([#4951](https://github.com/n8n-io/n8n/issues/4951)) ([231257d](https://github.com/n8n-io/n8n/commit/231257d0817df711cf900703fd686efb8307eeb2)) +- BinaryDataManager should store metadata when saving from buffer as well ([#4964](https://github.com/n8n-io/n8n/issues/4964)) ([5cbb5f4](https://github.com/n8n-io/n8n/commit/5cbb5f4bc8e09755e29bcc08715129d61c3fd1b6)) +- **editor:** Fix for wrong execution data displayed in executions preview ([#4966](https://github.com/n8n-io/n8n/issues/4966)) ([bfc8e68](https://github.com/n8n-io/n8n/commit/bfc8e68b37f77bd1a8259ca8162269451aca4f28)) +- Pick up credential test functions from versioned nodes as well ([#4962](https://github.com/n8n-io/n8n/issues/4962)) ([2797c08](https://github.com/n8n-io/n8n/commit/2797c085e51548a29b83dd6ce057ac71bde9ed0c)) + +# [0.208.0](https://github.com/n8n-io/n8n/compare/n8n@0.207.1...n8n@0.208.0) (2022-12-16) + +### Bug Fixes + +- **core:** Fix for Google and Microsoft generic OAuth2 credentials ([efa4c56](https://github.com/n8n-io/n8n/commit/efa4c567579d88f9ce764c535dfb41e7391a1286)) +- **core:** Fix HTTP Digest Auth for responses without an opaque parameter ([#4806](https://github.com/n8n-io/n8n/issues/4806)) ([6fac502](https://github.com/n8n-io/n8n/commit/6fac502f9ec288d7df2263e6f5a28b3a1fa84595)) +- **Disqus Node:** Fix thread parameter for "Get All Threads" operation ([#4912](https://github.com/n8n-io/n8n/issues/4912)) ([a04f838](https://github.com/n8n-io/n8n/commit/a04f838117076424084d858494103638fc201996)) +- Do not crash the server when Telemetry is blocked via DNS ([#4947](https://github.com/n8n-io/n8n/issues/4947)) ([6127c95](https://github.com/n8n-io/n8n/commit/6127c958f5ed786ee93f8fedb3344d6792158723)) +- **editor:** Allow mapping onto expression editor with selection range ([#4945](https://github.com/n8n-io/n8n/issues/4945)) ([6b83972](https://github.com/n8n-io/n8n/commit/6b83972f6e18e03874eb11180488505b83a0111a)) +- **editor:** Do not show actions dialog for actionless triggers when selected via keyboard ([#4911](https://github.com/n8n-io/n8n/issues/4911)) ([74100d3](https://github.com/n8n-io/n8n/commit/74100d3d5b12f70e78e04e8c87541f3adf6decdb)) +- **editor:** Fix an issue where some node actions wouldn't select default params correctly ([#4946](https://github.com/n8n-io/n8n/issues/4946)) ([626879b](https://github.com/n8n-io/n8n/commit/626879b3a2f8f4fb6b1c365297d752f456a47610)) +- **editor:** Fix typo in retry-button option "Retry with original workflow" ([#4528](https://github.com/n8n-io/n8n/issues/4528)) ([76a3f13](https://github.com/n8n-io/n8n/commit/76a3f1345877599d46691f37878e3fc3fa062243)) +- Update permission for showing workflow caller policy ([#4916](https://github.com/n8n-io/n8n/issues/4916)) ([f73267f](https://github.com/n8n-io/n8n/commit/f73267ffa5b4a265ab6be52e887747487cae10c5)) + +### Features + +- Add workflow sharing telemetry ([#4906](https://github.com/n8n-io/n8n/issues/4906)) ([ac066fc](https://github.com/n8n-io/n8n/commit/ac066fc9f3a2c1abeb327dacd7b98ae3a47e2371)) +- **core:** Allow for hiding usage page via environment ([#4899](https://github.com/n8n-io/n8n/issues/4899)) ([0f40ca3](https://github.com/n8n-io/n8n/commit/0f40ca39ba64156df186bbf27433ab17edbfa1a6)) +- **editor:** Inline expression editor ([#4814](https://github.com/n8n-io/n8n/issues/4814)) ([a125989](https://github.com/n8n-io/n8n/commit/a1259898c01406ebd7f8d0182a6c66fd8b0c7734)), closes [#4836](https://github.com/n8n-io/n8n/issues/4836) [#4846](https://github.com/n8n-io/n8n/issues/4846) +- **editor:** Update user management setup message when sharing is disabled ([#4928](https://github.com/n8n-io/n8n/issues/4928)) ([fbcbef2](https://github.com/n8n-io/n8n/commit/fbcbef20e7b193d6c69334a1da3c0d16936c5ec4)) +- Hide credentials password values ([#4868](https://github.com/n8n-io/n8n/issues/4868)) ([fe0f982](https://github.com/n8n-io/n8n/commit/fe0f9824377026a1660d6fda63da79b6cc31ea4b)) +- **OpenAI Node:** Add a node to work with OpenAI ([#4932](https://github.com/n8n-io/n8n/issues/4932)) ([7a984bb](https://github.com/n8n-io/n8n/commit/7a984bb6b74381fecb43755c1421be9d80b3ed44)) +- **Send Email Node:** Add replyTo support ([#4941](https://github.com/n8n-io/n8n/issues/4941)) ([3140942](https://github.com/n8n-io/n8n/commit/31409420c2367c75cd8eaaf82d5b81f467efc8bb)) +- Set all resources view as default subview ([#4919](https://github.com/n8n-io/n8n/issues/4919)) ([bcde07e](https://github.com/n8n-io/n8n/commit/bcde07e03288729ed185d1508cd73efebd82dec0)) +- Update workflow overwriting message ([#4917](https://github.com/n8n-io/n8n/issues/4917)) ([2964458](https://github.com/n8n-io/n8n/commit/2964458191a02046a1806bd413e67ebf1308c2f8)) + +## [0.207.1](https://github.com/n8n-io/n8n/compare/n8n@0.207.0...n8n@0.207.1) (2022-12-13) + +### Bug Fixes + +- **editor:** Fix undo on Windows and Linux ([#4898](https://github.com/n8n-io/n8n/issues/4898)) ([3fc2d7c](https://github.com/n8n-io/n8n/commit/3fc2d7cc5af54f826a8f0c27cb7860448f92bb77)) +- **editor:** Schema view render empty data ([#4902](https://github.com/n8n-io/n8n/issues/4902)) ([0b6d470](https://github.com/n8n-io/n8n/commit/0b6d47086a27117ceb0a1da107e5fcfbe11e0cd4)) +- Ensure parent directory exists before copying over the icons to generated static directory ([#4865](https://github.com/n8n-io/n8n/issues/4865)) ([91e9a88](https://github.com/n8n-io/n8n/commit/91e9a88e3a83530e1dce2e72b8796da24775dcf2)) + +# [0.207.0](https://github.com/n8n-io/n8n/compare/n8n@0.206.1...n8n@0.207.0) (2022-12-12) + +### Bug Fixes + +- **core:** Remove `nodeGetter` checks ([#4883](https://github.com/n8n-io/n8n/issues/4883)) ([07b2f76](https://github.com/n8n-io/n8n/commit/07b2f7678cc409840328da8f2e0b6f064fab10d8)) +- **editor:** Avoid adding manual trigger node when webhook node is added ([#4887](https://github.com/n8n-io/n8n/issues/4887)) ([b689d2d](https://github.com/n8n-io/n8n/commit/b689d2d7c28eb90c8979aba5bbc2f75867289505)) +- **editor:** Fix credential sharing issues handler when no matching id or name ([#4879](https://github.com/n8n-io/n8n/issues/4879)) ([1cce8ea](https://github.com/n8n-io/n8n/commit/1cce8eaf16a4394b4241572641427011287a7dc2)) +- **editor:** Fix for broken tab navigation ([#4881](https://github.com/n8n-io/n8n/issues/4881)) ([983c544](https://github.com/n8n-io/n8n/commit/983c5447c512651db96fbc57f2934c019dd3bf20)) +- **editor:** Schema view shows checkbox in case of empty data ([#4889](https://github.com/n8n-io/n8n/issues/4889)) ([b0c158c](https://github.com/n8n-io/n8n/commit/b0c158c64fa7df7da7fefb6ee24223ce650318b2)) +- Increase workflow reactivation max timeout to 1 day ([#4869](https://github.com/n8n-io/n8n/issues/4869)) ([593354b](https://github.com/n8n-io/n8n/commit/593354b6d89b577182873ef621c2c86c5415ef48)) +- Issue listing executions with Postgres ([#4856](https://github.com/n8n-io/n8n/issues/4856)) ([5156328](https://github.com/n8n-io/n8n/commit/5156328c34f384e292e9cfaebe72ad0666b02af6)) +- **Move Binary Data Node:** Stringify objects before encoding them in MoveBinaryData ([#4882](https://github.com/n8n-io/n8n/issues/4882)) ([3b969d2](https://github.com/n8n-io/n8n/commit/3b969d2cd11e2bff3402cdc5e8825b105b453630)) +- Remove foreign credentials when copying nodes or duplicating workflow ([#4880](https://github.com/n8n-io/n8n/issues/4880)) ([7d2e2ee](https://github.com/n8n-io/n8n/commit/7d2e2ee0f74fbe98c0e69ec1383e13af8b8cc035)) +- **Split In Batches Node:** Fix issue with pairedItem ([#4873](https://github.com/n8n-io/n8n/issues/4873)) ([38d7300](https://github.com/n8n-io/n8n/commit/38d7300d2a8168643a75f0c4fff108949f25ca15)) +- Stop returning `UNKNOWN ERROR` in the response if an actual error message is available ([#4859](https://github.com/n8n-io/n8n/issues/4859)) ([4cb4c5e](https://github.com/n8n-io/n8n/commit/4cb4c5e8188fd930312e3bf720472af35731a968)) +- Update duplicate action ([#4858](https://github.com/n8n-io/n8n/issues/4858)) ([19e0e96](https://github.com/n8n-io/n8n/commit/19e0e962710070d4517b20b8c8b2b57392f2100a)) +- Upgrade sse-channel to mitigate CVE-2019-10744 ([#4835](https://github.com/n8n-io/n8n/issues/4835)) ([7e1a13f](https://github.com/n8n-io/n8n/commit/7e1a13f9b2cc110343f3dc1f26c9a0703eeee588)) + +### Features + +- Add sharing permissions info for workflow sharees ([#4892](https://github.com/n8n-io/n8n/issues/4892)) ([c013245](https://github.com/n8n-io/n8n/commit/c013245db726bf7e2a880ac538631c53450a6471)) +- **editor:** Add undo/redo support for canvas actions ([#4787](https://github.com/n8n-io/n8n/issues/4787)) ([b2aba48](https://github.com/n8n-io/n8n/commit/b2aba48dfe441225c36ba1626aa6f8eb4f1a8173)) +- **editor:** Node creator actions ([#4696](https://github.com/n8n-io/n8n/issues/4696)) ([79fe57d](https://github.com/n8n-io/n8n/commit/79fe57dad8093b27651ce82164d6e7a0f08f9e43)) +- Handle sharing features when user skips owner setup ([#4850](https://github.com/n8n-io/n8n/issues/4850)) ([6f1b78d](https://github.com/n8n-io/n8n/commit/6f1b78df9877666212d9b01818155e30c2caba0f)) +- Update credential test error message for sharees ([#4864](https://github.com/n8n-io/n8n/issues/4864)) ([4765d76](https://github.com/n8n-io/n8n/commit/4765d767e361608a6349d08f7116dedc2a0e7e35)) + +## [0.206.1](https://github.com/n8n-io/n8n/compare/n8n@0.206.0...n8n@0.206.1) (2022-12-07) + +### Bug Fixes + +- **core:** Make expression resolution improvements ([#4829](https://github.com/n8n-io/n8n/issues/4829)) ([0bd13c7](https://github.com/n8n-io/n8n/commit/0bd13c71739c4fb34feab4f7a169ee89bc77eee8)) +- **editor:** Schema unit test stub fontawesome icon ([#4840](https://github.com/n8n-io/n8n/issues/4840)) ([1e4ca1f](https://github.com/n8n-io/n8n/commit/1e4ca1f0d0c89386470db7f6ce265a1339c79562)) +- Remove unnecessary console message ([#4848](https://github.com/n8n-io/n8n/issues/4848)) ([2ad62bc](https://github.com/n8n-io/n8n/commit/2ad62bcd442c4595daef4d02119122d9c37ab43d)) + +# [0.206.0](https://github.com/n8n-io/n8n/compare/n8n@0.205.0...n8n@0.206.0) (2022-12-06) + +### Bug Fixes + +- **Code Node:** Restore `pairedItem` to required n8n item keys ([#4821](https://github.com/n8n-io/n8n/issues/4821)) ([915f144](https://github.com/n8n-io/n8n/commit/915f1445c26d834e3d43602f901a198931a107e1)) +- **core:** Fix linter error ([#4808](https://github.com/n8n-io/n8n/issues/4808)) ([3bb3809](https://github.com/n8n-io/n8n/commit/3bb3809eecd1b660c0d05c26164b9ccc90a37008)) +- **core:** Fix partial execution with pinned data on child node run ([#4764](https://github.com/n8n-io/n8n/issues/4764)) ([5d75e6c](https://github.com/n8n-io/n8n/commit/5d75e6ceb3bf7d88229b4e71dda3250086aceb05)) +- **core:** OAuth2 scopes does not save ([7aefed4](https://github.com/n8n-io/n8n/commit/7aefed46dcdb5d795fe9755c9fc64f445136bc17)) +- Enable source-maps on WorkflowRunnerProcess in `own` mode ([#4832](https://github.com/n8n-io/n8n/issues/4832)) ([9485e2f](https://github.com/n8n-io/n8n/commit/9485e2f12a4131ec24f504591290246e24f1cd09)) +- **Execute Workflow Node:** Update Execute Workflow node info notice text ([#4809](https://github.com/n8n-io/n8n/issues/4809)) ([9e7a156](https://github.com/n8n-io/n8n/commit/9e7a156532293956e74103c66babd6c967bb062c)) +- **Gmail Trigger Node:** Trigger node missing some emails ([67aad63](https://github.com/n8n-io/n8n/commit/67aad6334358dfecd5ba3a6e8f085fca73bd40ad)) +- Handle error when workflow does not exist or is inaccessible ([#4831](https://github.com/n8n-io/n8n/issues/4831)) ([b71295e](https://github.com/n8n-io/n8n/commit/b71295e4de658fb134b67eaa0b630704f858ce7e)) +- **Local File Trigger Node:** Fix issue that causes a crash if the ignore field is empty ([#4824](https://github.com/n8n-io/n8n/issues/4824)) ([#4825](https://github.com/n8n-io/n8n/issues/4825)) ([c311424](https://github.com/n8n-io/n8n/commit/c3114241fdd399555666d2f5890815b6196ce1bf)) +- Make `nodes.exclude` and `nodes.include` work with lazy-loaded nodes ([#4833](https://github.com/n8n-io/n8n/issues/4833)) ([85241fd](https://github.com/n8n-io/n8n/commit/85241fd230675691828c8d711f86aabb7e48dabe)) + +### Features + +- Add message for readonly nodes. Improve foreign credentials handling ([#4759](https://github.com/n8n-io/n8n/issues/4759)) ([eb112ff](https://github.com/n8n-io/n8n/commit/eb112ffd23cec04f290d515917c227b628db2834)) +- Add prompt to overwrite changes when concurrent editing occurs ([#4817](https://github.com/n8n-io/n8n/issues/4817)) ([af6ac42](https://github.com/n8n-io/n8n/commit/af6ac42aa3ec6805a2a18b920128beafcb9a3cdc)) +- **core:** Workflow Execution Statistics ([#4200](https://github.com/n8n-io/n8n/issues/4200)) ([1722c6b](https://github.com/n8n-io/n8n/commit/1722c6b0c5dde87d3389c328b611cbb611b2853e)) +- **editor:** Alert design system component ([#4834](https://github.com/n8n-io/n8n/issues/4834)) ([9dbb3ea](https://github.com/n8n-io/n8n/commit/9dbb3ea182cba890781a89fe28eda2c7b50dbc65)) +- **editor:** Schema view ([#4615](https://github.com/n8n-io/n8n/issues/4615)) ([4528f34](https://github.com/n8n-io/n8n/commit/4528f34462396b5faf550c5a58c4dd9163bdbc40)) +- Fix checkbox line height and make checkbox label clickable ([#4818](https://github.com/n8n-io/n8n/issues/4818)) ([1b7952a](https://github.com/n8n-io/n8n/commit/1b7952a516a5c5dfe1f79e25f811fc044a5e4962)) +- **KoBoToolbox Node:** Add support for Media file API ([#4578](https://github.com/n8n-io/n8n/issues/4578)) ([37e580e](https://github.com/n8n-io/n8n/commit/37e580eb0628a651ecbc8faa3ad447cd0177d7cf)) + +# [0.205.0](https://github.com/n8n-io/n8n/compare/n8n@0.204.0...n8n@0.205.0) (2022-12-02) + +### Bug Fixes + +- **AWS SNS Node:** Pagination Issue ([d96d161](https://github.com/n8n-io/n8n/commit/d96d1610ba921ba71e90677d379b025741c7c9c8)) +- **core:** Ensure executions list is properly filtered for all users ([#4765](https://github.com/n8n-io/n8n/issues/4765)) ([ddf787c](https://github.com/n8n-io/n8n/commit/ddf787c087e523871891fd363f810075943b5e7b)) +- **core:** Fix `$items().length` in Execute Once mode ([#4755](https://github.com/n8n-io/n8n/issues/4755)) ([3d67df4](https://github.com/n8n-io/n8n/commit/3d67df490cad944704cd7da85c622feb418a2ea8)) +- **core:** Mark binary data to be deleted when pruning executions ([#4713](https://github.com/n8n-io/n8n/issues/4713)) ([78c66f1](https://github.com/n8n-io/n8n/commit/78c66f16d6c4677a63be18d823866ad3d1414843)) +- **core:** OAuth2 scope saved to DB fix ([7cb5dc2](https://github.com/n8n-io/n8n/commit/7cb5dc2aa5d15c574b0e07d0d7fa23dd9a9996ea)) +- Credential overwrites should take precedence over credential default values ([#4782](https://github.com/n8n-io/n8n/issues/4782)) ([2ce6291](https://github.com/n8n-io/n8n/commit/2ce62917da514714b7198cab63dcfc0b1ebc0473)) +- **editor:** Fix slots rendering of NodeCreator's NoResults component ([#4721](https://github.com/n8n-io/n8n/issues/4721)) ([d8c2dff](https://github.com/n8n-io/n8n/commit/d8c2dffc37155eb013a12d21cab6504264d16b8e)) +- **editor:** JSON view values can be mapped like keys ([#4702](https://github.com/n8n-io/n8n/issues/4702)) ([6d4e959](https://github.com/n8n-io/n8n/commit/6d4e9598846c9c2eb128ce039d4aeae080178627)) +- **Google Sheets Node:** Fix exception if no matching rows are found ([579f9c4](https://github.com/n8n-io/n8n/commit/579f9c4d4e5907a4ffba9a7ec6bcbb5d2faaefb9)) +- **Google Sheets Node:** Fix for append operation if no empty rows in sheet ([741c7da](https://github.com/n8n-io/n8n/commit/741c7da8b1a3f2824613d2a4c4880423c8be91cb)) +- Lazy load nodes for credentials testing ([#4760](https://github.com/n8n-io/n8n/issues/4760)) ([0a7a2f3](https://github.com/n8n-io/n8n/commit/0a7a2f3e4179c6bd186547dd43a5c43400c18ff8)) +- **Microsoft Outlook Node:** Fix binary attachment upload ([#4766](https://github.com/n8n-io/n8n/issues/4766)) ([528439c](https://github.com/n8n-io/n8n/commit/528439cb4d5ff3f61dddf75dea6377f508429155)) +- **Pipedrive Node:** Resolve properties not working ([c853b80](https://github.com/n8n-io/n8n/commit/c853b8078e66a671df448106956a0929c5b19b0a)) +- Remove background for resource ownership selector ([#4748](https://github.com/n8n-io/n8n/issues/4748)) ([30214f2](https://github.com/n8n-io/n8n/commit/30214f2bc20da18e16924e4047891a6ea8586593)) +- Update padding for resource filters dropdown ([#4751](https://github.com/n8n-io/n8n/issues/4751)) ([aff8cd9](https://github.com/n8n-io/n8n/commit/aff8cd9a2b376a429450661f108cdf8eb6e6d082)) +- Update size of select components in filters dropdown ([#4747](https://github.com/n8n-io/n8n/issues/4747)) ([d6d442d](https://github.com/n8n-io/n8n/commit/d6d442d45882423661631ee40b732ed78543abfc)) +- Update workflow save button type and design and share button type ([#4752](https://github.com/n8n-io/n8n/issues/4752)) ([b89301e](https://github.com/n8n-io/n8n/commit/b89301ec36fdbdc2a1d7c8996526b55930c20335)) + +### Features + +- **editor:** Overhaul expression editor modal ([#4631](https://github.com/n8n-io/n8n/issues/4631)) ([59771c8](https://github.com/n8n-io/n8n/commit/59771c80ea6ccd1b0da4946f6d017e02b8016609)) +- **Facebook Graph API Node:** Update to support api version 15 ([#4791](https://github.com/n8n-io/n8n/issues/4791)) ([2a85af1](https://github.com/n8n-io/n8n/commit/2a85af1bdb7098463085f1e5c96b25f820e19e15)) +- **Google Calendar Node:** Use resource locator component for calendar parameters ([#4410](https://github.com/n8n-io/n8n/issues/4410)) ([b319671](https://github.com/n8n-io/n8n/commit/b319671fd0f0488488788b472af140014bd7cc99)) +- **Postmark Trigger Node:** Update credentials so they can be used with the HTTP Request Node ([#4790](https://github.com/n8n-io/n8n/issues/4790)) ([0c759dc](https://github.com/n8n-io/n8n/commit/0c759dc548c058372fde5d117ea34489f7a6a2d9)) +- **Todoist Node:** Update to use latest api version ([#4650](https://github.com/n8n-io/n8n/issues/4650)) ([09a48c5](https://github.com/n8n-io/n8n/commit/09a48c51b64aaf31888e98b7f2711140e9818bed)) + +# [0.204.0](https://github.com/n8n-io/n8n/compare/n8n@0.203.1...n8n@0.204.0) (2022-11-24) + +### Bug Fixes + +- **core:** Fix `$items().length` behavior in `executeOnce` mode ([#4694](https://github.com/n8n-io/n8n/issues/4694)) ([b87c122](https://github.com/n8n-io/n8n/commit/b87c12285fa2b339e726f81e271715e258b6a075)) +- **core:** Fix for unused imports ([a6df51b](https://github.com/n8n-io/n8n/commit/a6df51b6e83fa25dad962ab212123edb3c055cac)) +- **core:** Use CredentialsOverwrites when testing credentials ([#4675](https://github.com/n8n-io/n8n/issues/4675)) ([772ec78](https://github.com/n8n-io/n8n/commit/772ec78349b5b6877bf681f3262951e3a4e34fe4)) +- Disable workflow locking due to issues ([#4708](https://github.com/n8n-io/n8n/issues/4708)) ([ee6ac5d](https://github.com/n8n-io/n8n/commit/ee6ac5d3417a2f308a7f4a3cda18c01fcec57faf)) +- **editor:** Fix for missing node connections in dev environment ([#4707](https://github.com/n8n-io/n8n/issues/4707)) ([b18ae18](https://github.com/n8n-io/n8n/commit/b18ae18a6b10fb125f3eed73103e33e3519cd82c)) +- **editor:** Fix missing resource locator component ([#4649](https://github.com/n8n-io/n8n/issues/4649)) ([44182f2](https://github.com/n8n-io/n8n/commit/44182f23a5e62c53209b3fa19edd1727586551ff)) +- **editor:** Prevent node-creator tabs from showing when toggled by CanvasAddButton ([#4661](https://github.com/n8n-io/n8n/issues/4661)) ([60746dc](https://github.com/n8n-io/n8n/commit/60746dc92ee1b6c33015e2a6a0d34bc981aa1dd5)) +- **editor:** Table view column limit tooltip ([#4655](https://github.com/n8n-io/n8n/issues/4655)) ([3ac9ba3](https://github.com/n8n-io/n8n/commit/3ac9ba3491c0dc1de283bc4285a243e02747f971)) +- Fix broken n8n-info-tip slots ([#4665](https://github.com/n8n-io/n8n/issues/4665)) ([6c99223](https://github.com/n8n-io/n8n/commit/6c992233a053db1ea235f785a52a754c1e694555)) +- **IF Node:** Fix "Is Empty" and "Is Not Empty" operation fails for date objects ([#4670](https://github.com/n8n-io/n8n/issues/4670)) ([753f4c9](https://github.com/n8n-io/n8n/commit/753f4c9a7d34c8d3329d4dc024fcf272f6f47ff3)) +- Remove redundant await in node's api request functions without try/catch ([#4639](https://github.com/n8n-io/n8n/issues/4639)) ([67983e8](https://github.com/n8n-io/n8n/commit/67983e8f945397d3fb0be55fdeb47609be92b2cb)) +- **Schedule Trigger Node:** Fixes inconsitent behavior with cron and weekly intervals ([#4558](https://github.com/n8n-io/n8n/issues/4558)) ([2fb8ed8](https://github.com/n8n-io/n8n/commit/2fb8ed825b18118fc0783e95d1551ee2ce8c3a38)) +- Workflow activation should not crash if one of the credential is invalid ([#4671](https://github.com/n8n-io/n8n/issues/4671)) ([c0e13c2](https://github.com/n8n-io/n8n/commit/c0e13c2a8f9374e9c65aae3ce4102e37c993cf74)) + +### Features + +- Add credentials E2E test suite and page object ([#4596](https://github.com/n8n-io/n8n/issues/4596)) ([b5b44d1](https://github.com/n8n-io/n8n/commit/b5b44d1b598e67ef7e735d7cdfb5233ca72caca6)) +- Add save confirmation modal when leaving sharing modal ([#4683](https://github.com/n8n-io/n8n/issues/4683)) ([173badc](https://github.com/n8n-io/n8n/commit/173badc4e099ebb818686dc5a25c2192c138bcd9)) +- Add share button to workflows list ([#4681](https://github.com/n8n-io/n8n/issues/4681)) ([a356d7b](https://github.com/n8n-io/n8n/commit/a356d7bdbadd5a4c69c61c5a5a30e75e9765e3d2)) +- **core:** Add license support to n8n ([#4566](https://github.com/n8n-io/n8n/issues/4566)) ([30e5d3d](https://github.com/n8n-io/n8n/commit/30e5d3d04c3457780875cc36637c8c1ea14ec783)) +- **core:** Lazy-load nodes and credentials to reduce baseline memory usage ([#4577](https://github.com/n8n-io/n8n/issues/4577)) ([b6c57e1](https://github.com/n8n-io/n8n/commit/b6c57e19fc5683dd7fb9eabb60ec4e89359c59eb)) +- **editor:** Add workflows list status filter ([#4690](https://github.com/n8n-io/n8n/issues/4690)) ([5364e7f](https://github.com/n8n-io/n8n/commit/5364e7fc9250421b799adc28b3e47dc75819ec7d)) +- Show delete button based on workflow permissions ([#4686](https://github.com/n8n-io/n8n/issues/4686)) ([4f64e26](https://github.com/n8n-io/n8n/commit/4f64e26a83c7e62c98d93c38bf3dcb6cdfaadb58)) +- Show toast when saving workflow sharing settings ([#4684](https://github.com/n8n-io/n8n/issues/4684)) ([6f8d0de](https://github.com/n8n-io/n8n/commit/6f8d0de55dc9c3c1cdb17329a8560ee8453c639a)) +- Switch owner subview to all subview if has shared resources ([#4672](https://github.com/n8n-io/n8n/issues/4672)) ([e3e17e5](https://github.com/n8n-io/n8n/commit/e3e17e5dac685b1230e39bbef247312419b71f9b)) +- Use longer stack-traces when error-reporting is enabled ([#4674](https://github.com/n8n-io/n8n/issues/4674)) ([de5b0b0](https://github.com/n8n-io/n8n/commit/de5b0b03fedede680f5a6e0f4dc73770b888bf46)) + +### Performance Improvements + +- **Code Node:** Improve n8n item key validation performance ([#4669](https://github.com/n8n-io/n8n/issues/4669)) ([740513b](https://github.com/n8n-io/n8n/commit/740513b42440b8760cd488659e92abe9951462b0)) + +## [0.203.1](https://github.com/n8n-io/n8n/compare/n8n@0.203.0...n8n@0.203.1) (2022-11-18) + +### Bug Fixes + +- **Google Sheets Node:** Versioning fix ([4e66672](https://github.com/n8n-io/n8n/commit/4e66672df225e67297981b7ee3408e5849db418a)) + +# [0.203.0](https://github.com/n8n-io/n8n/compare/n8n@0.202.1...n8n@0.203.0) (2022-11-17) + +### Bug Fixes + +- Add back mapping hint when parameter is focused ([#4634](https://github.com/n8n-io/n8n/issues/4634)) ([b35172e](https://github.com/n8n-io/n8n/commit/b35172e442a131f76c2d902d451356ab937bba48)) +- **core:** Deduplicate error handling in nodes ([#4319](https://github.com/n8n-io/n8n/issues/4319)) ([c7133ec](https://github.com/n8n-io/n8n/commit/c7133ecd3fe6f022a537b6edb4c006d6786efad2)) +- **editor:** Add 'Stop execution' button to execution preview ([#4632](https://github.com/n8n-io/n8n/issues/4632)) ([be7672a](https://github.com/n8n-io/n8n/commit/be7672a177bfcf997ec241af7c628a90312849b1)) +- **editor:** Curb direct item access linting ([#4591](https://github.com/n8n-io/n8n/issues/4591)) ([271cd06](https://github.com/n8n-io/n8n/commit/271cd06a6ac6274a83a6a71fe76072281edf3724)) +- **editor:** Fix expression editor variable selector filter ([#4590](https://github.com/n8n-io/n8n/issues/4590)) ([69b332b](https://github.com/n8n-io/n8n/commit/69b332b0e3321d3d1c635e53ec134d15b7e54bb9)) +- **editor:** Fix for execution retry dropdown not closing ([#4575](https://github.com/n8n-io/n8n/issues/4575)) ([e0ec5a6](https://github.com/n8n-io/n8n/commit/e0ec5a6aa932db281aafe07be65aa86719e41b09)) +- **editor:** Fix for logging error on user logout ([#4633](https://github.com/n8n-io/n8n/issues/4633)) ([7483e14](https://github.com/n8n-io/n8n/commit/7483e147fc552d981d03d0e96112725335c64002)) +- **editor:** Fix zero treated as missing value in resource locator ([#4612](https://github.com/n8n-io/n8n/issues/4612)) ([b0bbcf6](https://github.com/n8n-io/n8n/commit/b0bbcf6028dcf3b9e25dacb1aee06a79f45f9e04)) +- **editor:** Hide pin data in production executions ([#4595](https://github.com/n8n-io/n8n/issues/4595)) ([edebad1](https://github.com/n8n-io/n8n/commit/edebad1a89f1dd239c833c166a6e7f845d6df035)) +- **editor:** Skip optional chaining operators in Code Node editor linting ([#4592](https://github.com/n8n-io/n8n/issues/4592)) ([ccacd42](https://github.com/n8n-io/n8n/commit/ccacd42b3706267b704f370f1044eb1ca7f5286c)) +- **editor:** Update to 'Expression/Fixed' toggle - Keep expression when switching to Fixed ([#4599](https://github.com/n8n-io/n8n/issues/4599)) ([6eee155](https://github.com/n8n-io/n8n/commit/6eee155ecb91c680c5a9d4f23502da35ab249a9d)) +- Fix foreign credentials being shown for new nodes ([#4622](https://github.com/n8n-io/n8n/issues/4622)) ([dea67ca](https://github.com/n8n-io/n8n/commit/dea67ca6b7eee02fd5ea24c48224c65e937e97f2)) +- Fix user redirect to signin bug ([#4623](https://github.com/n8n-io/n8n/issues/4623)) ([402b75a](https://github.com/n8n-io/n8n/commit/402b75ac280cf74df30aaf758f1c0a15762ad996)) +- Store copy of workflow in workflowsById to prevent node data bugs ([#4637](https://github.com/n8n-io/n8n/issues/4637)) ([9cadaea](https://github.com/n8n-io/n8n/commit/9cadaea3a44b8b983a2c8c1e78271ffcd114ef4d)) + +### Features + +- Add duplicate workflow error handler ([#4616](https://github.com/n8n-io/n8n/issues/4616)) ([f7a9ef9](https://github.com/n8n-io/n8n/commit/f7a9ef91166df1a71db1f7827cb43ffd687839d4)) +- Add workflow data reset action ([#4618](https://github.com/n8n-io/n8n/issues/4618)) ([0daa36c](https://github.com/n8n-io/n8n/commit/0daa36c1978c6722d178e16c6f756b7205068c09)) +- **Compare Datasets Node:** Node tweaks ([423ee81](https://github.com/n8n-io/n8n/commit/423ee81e33b88c5ed6152b75b69219c3e4ff16c8)) +- **core:** Add credential runtime checks and prevent tampering in manual run ([#4481](https://github.com/n8n-io/n8n/issues/4481)) ([d35d63a](https://github.com/n8n-io/n8n/commit/d35d63a855522c781b38238e107a6aaa211764c6)) +- **Google Sheets Node:** Overhaul of node ([d96d6f1](https://github.com/n8n-io/n8n/commit/d96d6f11dbe2f1c75ff572baa4906fb628a2eb5c)) +- **Notion (Beta) Node:** Use resource locator component for database and page parameters ([#4340](https://github.com/n8n-io/n8n/issues/4340)) ([277b6b7](https://github.com/n8n-io/n8n/commit/277b6b73c37187f524474364c3b58adbc15486e0)) + +## [0.202.1](https://github.com/n8n-io/n8n/compare/n8n@0.202.0...n8n@0.202.1) (2022-11-10) + +### Bug Fixes + +- Disable some error tracking ([#4579](https://github.com/n8n-io/n8n/issues/4579)) ([b2201d0](https://github.com/n8n-io/n8n/commit/b2201d0c77cf024e39f6569e7806871d38408201)) + +# [0.202.0](https://github.com/n8n-io/n8n/compare/n8n@0.201.0...n8n@0.202.0) (2022-11-10) + +### Bug Fixes + +- **API:** Do not use names for typeorm connections ([#4532](https://github.com/n8n-io/n8n/issues/4532)) ([f5c2080](https://github.com/n8n-io/n8n/commit/f5c20803d782d06ffc42dabd0a11467d44bd1888)) +- **core:** Fix manual execution of pinned trigger on main mode ([#4535](https://github.com/n8n-io/n8n/issues/4535)) ([5d73b6e](https://github.com/n8n-io/n8n/commit/5d73b6e48aef2b0b386369b7d1f208845f912da5)) +- **core:** Streamline multiple pinned triggers behavior ([#4569](https://github.com/n8n-io/n8n/issues/4569)) ([953457a](https://github.com/n8n-io/n8n/commit/953457ad8676501f9c92eb1f7bb68521a975975c)) +- **editor:** Curb arg linting for `$input.first()` and `$input.last()` ([#4526](https://github.com/n8n-io/n8n/issues/4526)) ([0edd4bc](https://github.com/n8n-io/n8n/commit/0edd4bcc8783de0da591ad147700c450e01ba919)) +- **editor:** Fix duplicate bug when new workflow is open ([#4559](https://github.com/n8n-io/n8n/issues/4559)) ([536c834](https://github.com/n8n-io/n8n/commit/536c834313b73bf36f9c9cc291dca4e4b4b860be)) +- **editor:** Fix for incorrect execution saving indicator in executions view ([#4547](https://github.com/n8n-io/n8n/issues/4547)) ([0117191](https://github.com/n8n-io/n8n/commit/01171912e7587933792e5cd1cd605a6ec3b0b1be)) +- **editor:** Fix for oauth authorization ([#4572](https://github.com/n8n-io/n8n/issues/4572)) ([d06197d](https://github.com/n8n-io/n8n/commit/d06197d879707c6a9826ae192682262c4f6c02ed)) +- **editor:** Fix workflow activation from the Workflows view ([#4549](https://github.com/n8n-io/n8n/issues/4549)) ([d2bec63](https://github.com/n8n-io/n8n/commit/d2bec63cecbc39f1881a883d36b6a2c3ea1568a9)) +- **editor:** Fix workflow back button navigation ([#4546](https://github.com/n8n-io/n8n/issues/4546)) ([825637f](https://github.com/n8n-io/n8n/commit/825637f02a5d1bc9f00cb68f19221dd7d0e055cb)) +- **editor:** Prevent adding of the start node when importing workflow in the demo mode ([#4564](https://github.com/n8n-io/n8n/issues/4564)) ([49748f2](https://github.com/n8n-io/n8n/commit/49748f27a2bfbb0356ba2c30c35d34a3ad9d8063)) +- **editor:** Show string numbers and null properly in JSON view ([#4513](https://github.com/n8n-io/n8n/issues/4513)) ([f6b85f4](https://github.com/n8n-io/n8n/commit/f6b85f4a69adbad10854ff77015d0d2ee69cfeac)) +- **editor:** Switch `CodeNodeEditor` linter parser to `esprima-next` ([#4524](https://github.com/n8n-io/n8n/issues/4524)) ([5e0ded4](https://github.com/n8n-io/n8n/commit/5e0ded4a84a3da1fc4cd32d135cb4eb30dbd9b35)) +- **editor:** Tweak dragged mapping state ([#4550](https://github.com/n8n-io/n8n/issues/4550)) ([b3cd62d](https://github.com/n8n-io/n8n/commit/b3cd62d866eeb734de253f656ee2b67c147a10c1)) +- **editor:** Update workflow buttons spacings ([#4534](https://github.com/n8n-io/n8n/issues/4534)) ([88baaa0](https://github.com/n8n-io/n8n/commit/88baaa0eb15f3d1cff22ed5994b0cd39bddf5b7b)) +- **editor:** Use base path in workflow preview component URL ([#4560](https://github.com/n8n-io/n8n/issues/4560)) ([db163b7](https://github.com/n8n-io/n8n/commit/db163b71b90d073cc963f63d5455b3a84f236917)) +- **HTTP Request Node:** Show error cause in the output ([#4538](https://github.com/n8n-io/n8n/issues/4538)) ([c239eea](https://github.com/n8n-io/n8n/commit/c239eea1b9fc7c7397db8135528ac0d136be1c84)) +- **HTTP Request Node:** Use the data in "Put Output in Field" field ([#4487](https://github.com/n8n-io/n8n/issues/4487)) ([39d4bb2](https://github.com/n8n-io/n8n/commit/39d4bb2639794eeb9c2e998daaac3accad1802b4)) +- **HubSpot Node:** Add notice to HubSpot credentials about API Key Sunset ([#4570](https://github.com/n8n-io/n8n/issues/4570)) ([9b5db8d](https://github.com/n8n-io/n8n/commit/9b5db8d7be501ff06e49fd25ce9e0f3e9aa8fbea)) +- **Notion Trigger (Beta) Node:** Fix Notion trigger polling strategy ([3b34050](https://github.com/n8n-io/n8n/commit/3b3405089d9194515192f10ab4085e1493bb86b5)) +- **Raindrop Node:** Update access token URL ([#4542](https://github.com/n8n-io/n8n/issues/4542)) ([740df0c](https://github.com/n8n-io/n8n/commit/740df0c1e5e578269fcaa0ce767c5894c6a852d4)) +- **SendInBlue Trigger Node:** Fix typo in credential name ([#4357](https://github.com/n8n-io/n8n/issues/4357)) ([5d852f9](https://github.com/n8n-io/n8n/commit/5d852f9230a73c04b5242803949117cce8bffeed)) +- Update E2E testing env variables ([#4556](https://github.com/n8n-io/n8n/issues/4556)) ([f9d9f88](https://github.com/n8n-io/n8n/commit/f9d9f88f8a9d217101c2f5c67f3d3db6aa6b9b92)) + +### Features + +- Add cypress e2e tests for signup and signin ([#3490](https://github.com/n8n-io/n8n/issues/3490)) ([7764486](https://github.com/n8n-io/n8n/commit/77644860c0fcd3d78732097ebf5d0b0457da7d57)) +- **API:** Report unhandled app crashes to Sentry ([#4548](https://github.com/n8n-io/n8n/issues/4548)) ([2425c10](https://github.com/n8n-io/n8n/commit/2425c10b2b5ec65bfb05d3f6443a139ec71c6a9a)) +- **API:** Set up error tracking using Sentry ([#4394](https://github.com/n8n-io/n8n/issues/4394)) ([41cb0ee](https://github.com/n8n-io/n8n/commit/41cb0eec6e634f3f346644f885f8a6064e77cc7b)) +- **core:** Add ownership, sharing and credential details to `GET /workflows` ([#4510](https://github.com/n8n-io/n8n/issues/4510)) ([026fb50](https://github.com/n8n-io/n8n/commit/026fb50512d6a31bf483646ec68276fb6f39abfe)) +- **editor:** Add support for notice credentials properties ([#4557](https://github.com/n8n-io/n8n/issues/4557)) ([de96def](https://github.com/n8n-io/n8n/commit/de96def372d63df27c3433bca4fae6f75c874e8e)) +- Switch from npm to pnpm ([#4429](https://github.com/n8n-io/n8n/issues/4429)) ([7367773](https://github.com/n8n-io/n8n/commit/736777385c54d5b20174c9c1fda38bb31fbf14b4)) + +# [0.201.0](https://github.com/n8n-io/n8n/compare/n8n@0.200.1...n8n@0.201.0) (2022-11-02) + +### Bug Fixes + +- **core:** Fix workflow hasing for MySQL ([#4491](https://github.com/n8n-io/n8n/issues/4491)) ([2b5613e](https://github.com/n8n-io/n8n/commit/2b5613ed68ecc6991ec68ca21807cbc1e976aa22)) +- **core:** Make `deepCopy` backward compatible ([#4505](https://github.com/n8n-io/n8n/issues/4505)) ([b282c7e](https://github.com/n8n-io/n8n/commit/b282c7e5d98c94b13a861167fef8af204267c5bd)), closes [#4508](https://github.com/n8n-io/n8n/issues/4508) +- displayOptions not getting value of RLC ([#4460](https://github.com/n8n-io/n8n/issues/4460)) ([3a1fa09](https://github.com/n8n-io/n8n/commit/3a1fa09108a115609e2dbbf257603ef5d7fc91d2)) +- **editor:** Disable settings link in executions view for unsaved workflows ([#4493](https://github.com/n8n-io/n8n/issues/4493)) ([dcec5e9](https://github.com/n8n-io/n8n/commit/dcec5e9e8231609a9461acb196ab157ab6fabcd2)) +- **editor:** Fix an issue with not being able to save some of the forms ([#4499](https://github.com/n8n-io/n8n/issues/4499)) ([1e445fc](https://github.com/n8n-io/n8n/commit/1e445fc1a38dd7541ee6fcc4b535180fa3844799)) +- **editor:** Fix interim updates on executions view ([#4497](https://github.com/n8n-io/n8n/issues/4497)) ([cf034c0](https://github.com/n8n-io/n8n/commit/cf034c015fee7bc6eead0e4901bafef3a08fe88b)) +- **editor:** Gix node creator search when there's active subcategory ([#4494](https://github.com/n8n-io/n8n/issues/4494)) ([f244975](https://github.com/n8n-io/n8n/commit/f24497589f9bff176ea8df3196e9aaaaef7dfb51)) +- **editor:** : Limit columns in table view to prevent unresponsive UI when opening NDV ([#4480](https://github.com/n8n-io/n8n/issues/4480)) ([41e6489](https://github.com/n8n-io/n8n/commit/41e6489b75414c7fe55531223aa23f0817401539)) + +### Features + +- **core:** Reimplement blocking workflow updates on interim changes ([#4446](https://github.com/n8n-io/n8n/issues/4446)) ([46905fd](https://github.com/n8n-io/n8n/commit/46905fd2cbcdbff7cf8056e010524fc0b74b7d53)) +- **editor:** Block UI in NDV when workflow is listening to events ([#4390](https://github.com/n8n-io/n8n/issues/4390)) ([6c2c621](https://github.com/n8n-io/n8n/commit/6c2c621f1debcef73ca789204a651c3f5f23628e)) +- **Venafi TLS Protect Cloud Node:** Make issuing template depend on application ([#4476](https://github.com/n8n-io/n8n/issues/4476)) ([d1d1288](https://github.com/n8n-io/n8n/commit/d1d1288ba91a6ebe9667f1c026e4575407fb5a70)) + +### Performance Improvements + +- **editor:** Improve array intersection utility function ([#4503](https://github.com/n8n-io/n8n/issues/4503)) ([b0df810](https://github.com/n8n-io/n8n/commit/b0df8107458e3f6cbfccfc21a717e4085c4ab3d5)) + +## [0.200.1](https://github.com/n8n-io/n8n/compare/n8n@0.200.0...n8n@0.200.1) (2022-10-28) + +### Bug Fixes + +- **API:** Do not reset the auth cookie on every request to `GET /login` ([#4459](https://github.com/n8n-io/n8n/issues/4459)) ([c66929f](https://github.com/n8n-io/n8n/commit/c66929f53d87035160ad099873d73cea3fff4d2a)) +- **AWS SNS Trigger Node:** Add missing jsonParse import ([#4463](https://github.com/n8n-io/n8n/issues/4463)) ([e6ec134](https://github.com/n8n-io/n8n/commit/e6ec134cf37ac21b26d10162b3d49da7dad85a1a)) +- **core:** Updating deepCopy to avoid max callstack with circular deps ([#4468](https://github.com/n8n-io/n8n/issues/4468)) ([ca60b0e](https://github.com/n8n-io/n8n/commit/ca60b0e203d950605506eb7687a10b5c87b4492f)) +- **editor:** Fix for executions view auto-refresh and new workflow saving ([#4462](https://github.com/n8n-io/n8n/issues/4462)) ([dbac795](https://github.com/n8n-io/n8n/commit/dbac7955f94007a8b305400ae28ccf1e5c040261)) +- **editor:** Redirect old path /workflow ([#4469](https://github.com/n8n-io/n8n/issues/4469)) ([7620d93](https://github.com/n8n-io/n8n/commit/7620d93eda525c528823c20e83883ad10020bd76)) +- **editor:** Remove filter that prevented showing running executions ([#4470](https://github.com/n8n-io/n8n/issues/4470)) ([658e886](https://github.com/n8n-io/n8n/commit/658e886861acb5897e9e87cf4d66cee9b6a6003a)) + +# [0.200.0](https://github.com/n8n-io/n8n/compare/n8n@0.199.0...n8n@0.200.0) (2022-10-27) + +### Bug Fixes + +- **API:** Validate excecutions and workflow filter parameters ([#4424](https://github.com/n8n-io/n8n/issues/4424)) ([dd3c596](https://github.com/n8n-io/n8n/commit/dd3c59677bbdcb49332975fd84d9e88852f76c8d)) +- **core:** Amend typing for `jsonParse()` options ([#4423](https://github.com/n8n-io/n8n/issues/4423)) ([1732324](https://github.com/n8n-io/n8n/commit/1732324965cce2030d0198f7b7e7091edfad6727)) +- **core:** Fix `predefinedCredentialType` in node graph item ([#4379](https://github.com/n8n-io/n8n/issues/4379)) ([77233f2](https://github.com/n8n-io/n8n/commit/77233f23701fa456a7d0170dc0b8118afa71a8c5)) +- **core:** Fix canvas node execution skipping parent nodes ([#4438](https://github.com/n8n-io/n8n/issues/4438)) ([3a9684d](https://github.com/n8n-io/n8n/commit/3a9684df9f26464b3e1f9924871304f136de61fd)) +- **core:** Fix single-node execution failing in `main` mode ([#4421](https://github.com/n8n-io/n8n/issues/4421)) ([5745027](https://github.com/n8n-io/n8n/commit/5745027cee9d3cb92dfc9d9025a0645f50185752)) +- **core:** Set JWT authentication token sameSite policy to lax ([#4425](https://github.com/n8n-io/n8n/issues/4425)) ([1f4eaeb](https://github.com/n8n-io/n8n/commit/1f4eaeb3ae33ad88a4b07e664e2f8f8f1235bc6f)) +- **core:** Update to imports in helpers ([91bd3c6](https://github.com/n8n-io/n8n/commit/91bd3c6567401dedb0216a07ab31310e451ff1e7)) +- **editor:** Curb item method linting in single-item mode in `CodeNodeEditor` linter ([#4455](https://github.com/n8n-io/n8n/issues/4455)) ([b226aed](https://github.com/n8n-io/n8n/commit/b226aed9bb60981e1a69b799f3b57ba56b7bbaa1)) +- **editor:** Stop rendering expressions as html ([#4420](https://github.com/n8n-io/n8n/issues/4420)) ([779b0d5](https://github.com/n8n-io/n8n/commit/779b0d58f741b9e8eea978f1651701e586d722c4)) +- **Email Trigger (IMAP) Node:** Backport V2 mark-seen-after-processing to V1 ([#4435](https://github.com/n8n-io/n8n/issues/4435)) ([b296fb0](https://github.com/n8n-io/n8n/commit/b296fb06f3222ad56c9d8267f8b8283097fde113)) +- **Email Trigger (IMAP) Node:** Improve connection handling and credentials ([#4393](https://github.com/n8n-io/n8n/issues/4393)) ([1a37f00](https://github.com/n8n-io/n8n/commit/1a37f0003f5d7029bc36ba91d51235e96e8719cc)) +- **HTTP Request Node:** Fix sending previously selected credentials ([#4457](https://github.com/n8n-io/n8n/issues/4457)) ([44ad249](https://github.com/n8n-io/n8n/commit/44ad249827d47e0cc9584edcb2e2bcf7b088f026)) +- **InvoiceNinja Node:** Added support for v5 ([2f4649c](https://github.com/n8n-io/n8n/commit/2f4649cdf44e15b41b40879f27ffe39406a53b1b)) +- **TheHive Node:** Fix node issues ([ca9eca9](https://github.com/n8n-io/n8n/commit/ca9eca9ae9e168886502649458ccdb67d1261c09)) + +### Features + +- **Airtable Trigger Node:** Use resource locator component for base and table parameters ([#4391](https://github.com/n8n-io/n8n/issues/4391)) ([227212c](https://github.com/n8n-io/n8n/commit/227212c928535f302879e9be6b585faa41c95b80)) +- **core, editor:** Introduce workflow caller policy ([#4368](https://github.com/n8n-io/n8n/issues/4368)) ([e8935de](https://github.com/n8n-io/n8n/commit/e8935de3b2dbbf25df139c59fbdd298528397eca)) +- **core:** Block workflow update on interim change ([#4397](https://github.com/n8n-io/n8n/issues/4397)) ([cddd012](https://github.com/n8n-io/n8n/commit/cddd012a2fa834ca6b3d85296caadcf3b8cc7bb5)) +- **editor:** Add readonly state for nodes ([#4299](https://github.com/n8n-io/n8n/issues/4299)) ([408bd96](https://github.com/n8n-io/n8n/commit/408bd968152ad8bbafda7037f6eb8f5550d04c77)) +- **editor:** Implement executions preview via the new executions tab in node view ([#4311](https://github.com/n8n-io/n8n/issues/4311)) ([d833345](https://github.com/n8n-io/n8n/commit/d833345092baf3c12828a5a7680c9fb8555d2c57)) +- **editor:** Improve nodes panel search ([#4399](https://github.com/n8n-io/n8n/issues/4399)) ([f6733cf](https://github.com/n8n-io/n8n/commit/f6733cff9d88d9b3298f6afc2c59c0dea59c6464)) +- **HTTP Request Node:** Add option for raw json header & query ([#4408](https://github.com/n8n-io/n8n/issues/4408)) ([8f25da5](https://github.com/n8n-io/n8n/commit/8f25da52b1c2d228018df8186985a2b067bd2123)) +- **Write Binary File Node:** Add option to append to a file ([#4386](https://github.com/n8n-io/n8n/issues/4386)) ([4b13b33](https://github.com/n8n-io/n8n/commit/4b13b3398dce5338f46c80867d6e4c8c685f6c22)) + +# [0.199.0](https://github.com/n8n-io/n8n/compare/n8n@0.198.2...n8n@0.199.0) (2022-10-21) + +### Bug Fixes + +- **CompareDatasets Node:** Removed quotes from branch names ([263794c](https://github.com/n8n-io/n8n/commit/263794ce4038720181b147f8468dc07db33ec3ee)) +- **editor:** Fix bottom menu hover bug ([#4349](https://github.com/n8n-io/n8n/issues/4349)) ([353a28b](https://github.com/n8n-io/n8n/commit/353a28bfe75ef75983df965cedfea2053c3cccfa)) +- **editor:** Fix pairedItem telemetry error reporting ([b67e41b](https://github.com/n8n-io/n8n/commit/b67e41b45ee43a215a476adbf0c0b7bf6121e5d5)) +- **editor:** Fix performance issues when opening node or editing code node with a lot of data ([#4388](https://github.com/n8n-io/n8n/issues/4388)) ([356a42a](https://github.com/n8n-io/n8n/commit/356a42a18752eaf7b70ee2e0c41ef6f248cd10b8)) +- **editor:** Fix workflow not stopping on clicking stop button ([#4382](https://github.com/n8n-io/n8n/issues/4382)) ([50c18a7](https://github.com/n8n-io/n8n/commit/50c18a789a79b23a95830bdfd376ed6461d852d5)) +- **editor:** Prevent text highlight on FireFox when mapping data ([#4347](https://github.com/n8n-io/n8n/issues/4347)) ([e1e2c94](https://github.com/n8n-io/n8n/commit/e1e2c943316a29bda989f3d96a7a40e3f57e3bab)) +- **editor:** Remove wrong linting from Code node editor ([#4384](https://github.com/n8n-io/n8n/issues/4384)) ([77d041b](https://github.com/n8n-io/n8n/commit/77d041ba783a536b0572ef68ab4eeac8118c8ba8)) +- **editor:** Replace cron node with schedule node ([#4371](https://github.com/n8n-io/n8n/issues/4371)) ([161cca9](https://github.com/n8n-io/n8n/commit/161cca9494eb115d4707a9fc3d273ba732b9da76)) +- **editor:** Show null value in table view ([#4346](https://github.com/n8n-io/n8n/issues/4346)) ([bb4e08c](https://github.com/n8n-io/n8n/commit/bb4e08c0766487b150fad4ec3ee301d765d413d3)) +- **Elasticsearch Node:** Fix pagination issue ([a02e92d](https://github.com/n8n-io/n8n/commit/a02e92d664b2896ee1abd30c761e25e96f4f44e3)) +- **Google Drive Node:** Fix drive hint typo in resource locator ([#4387](https://github.com/n8n-io/n8n/issues/4387)) ([4ce0fed](https://github.com/n8n-io/n8n/commit/4ce0fed0ab2d464d9fa4051fed070f86a64fef57)) +- **HTTP Request Node:** Avoid error when response doesn't include content-type ([#4365](https://github.com/n8n-io/n8n/issues/4365)) ([61b9909](https://github.com/n8n-io/n8n/commit/61b9909ac3925d51eb767542b70c82e57905b392)) +- **n8n Node:** Fix resource locator not returning all items ([#4248](https://github.com/n8n-io/n8n/issues/4248)) ([ed4dcbb](https://github.com/n8n-io/n8n/commit/ed4dcbb5ddf3ded5ec9faa16badc128a0fcecf26)) +- **Shedule Node:** Fixes multiple intervals, fixes week interval ([#4376](https://github.com/n8n-io/n8n/issues/4376)) ([971c2c0](https://github.com/n8n-io/n8n/commit/971c2c0aed0a2402fa6eb6217ddc914d1fade68b)) + +### Features + +- **Compare Node:** New node to compare two inputs ([638d6f6](https://github.com/n8n-io/n8n/commit/638d6f60d3f1abd7f647cfe2964259a889e6cd1a)) +- **core:** Block workflow update on interim change ([#4374](https://github.com/n8n-io/n8n/issues/4374)) ([e83b9bd](https://github.com/n8n-io/n8n/commit/e83b9bd98395fcdb1238f9226c08cf88a259654c)) +- **core:** Enable sending client credentials in body ([#4377](https://github.com/n8n-io/n8n/issues/4377)) ([7fcd821](https://github.com/n8n-io/n8n/commit/7fcd821cadca942bd1321229f9f0f76fe663dc34)) +- **editor, core, cli:** Implement new workflow experience ([#4358](https://github.com/n8n-io/n8n/issues/4358)) ([dae01f3](https://github.com/n8n-io/n8n/commit/dae01f3abef57fcb62af1e2e15d807d612ab4252)) +- **editor:** Add automatic credential selection for new nodes ([#2746](https://github.com/n8n-io/n8n/issues/2746)) ([d31fbbb](https://github.com/n8n-io/n8n/commit/d31fbbba27895c5ab1ccdbf6d8c94b5b7b00893e)) +- **editor:** Create new workflows page ([#4267](https://github.com/n8n-io/n8n/issues/4267)) ([be7aac3](https://github.com/n8n-io/n8n/commit/be7aac32797a2e4b3ffcd696ed700e5479692cbd)) +- **editor:** Switch initial route based on feature flag ([#4383](https://github.com/n8n-io/n8n/issues/4383)) ([6d25eed](https://github.com/n8n-io/n8n/commit/6d25eed0500956ffe14022e396b5e9e628d80176)) +- **Hubspot Node:** Enable hubspot credentials for http predefined types ([#3686](https://github.com/n8n-io/n8n/issues/3686)) ([b5c40e6](https://github.com/n8n-io/n8n/commit/b5c40e6294f876f18bc37a4d2e962832ee2f40a5)) +- **Node:** Add the Scheduler Node ([#4223](https://github.com/n8n-io/n8n/issues/4223)) ([128c3b8](https://github.com/n8n-io/n8n/commit/128c3b83dfff3a3c21b2169da010698a3f4d20de)) +- **Rundeck Node:** Update credential with test and make useable in HTTP Request node ([#3879](https://github.com/n8n-io/n8n/issues/3879)) ([fc87650](https://github.com/n8n-io/n8n/commit/fc876501809f5af0c7456867eae99f64b9ed653e)) + +### Performance Improvements + +- update deepCopy ([#4364](https://github.com/n8n-io/n8n/issues/4364)) ([1aa21ed](https://github.com/n8n-io/n8n/commit/1aa21ed3df28684bad1696fd7f9349295d5b6219)) + +## [0.198.2](https://github.com/n8n-io/n8n/compare/n8n@0.198.1...n8n@0.198.2) (2022-10-14) + +### Bug Fixes + +- **editor:** Fix bug where one cannot scroll down parameters ([#4348](https://github.com/n8n-io/n8n/issues/4348)) ([7a76c2a](https://github.com/n8n-io/n8n/commit/7a76c2a35dac65048ab123932a54bc420e1d5a5c)) + +## [0.198.1](https://github.com/n8n-io/n8n/compare/n8n@0.198.0...n8n@0.198.1) (2022-10-14) + +### Bug Fixes + +- **editor:** Change start position of the start node ([#4345](https://github.com/n8n-io/n8n/issues/4345)) ([719a827](https://github.com/n8n-io/n8n/commit/719a82743b61d54bb101766f870538829321380c)) +- **editor:** Align JSON view properties and their values ([#4343](https://github.com/n8n-io/n8n/issues/4343)) ([594a161](https://github.com/n8n-io/n8n/commit/594a16161ea80f9de7056d0fbce887f39ca74abb)) +- **editor:** Fix `BASE_PATH` for Vite dev mode ([#4342](https://github.com/n8n-io/n8n/issues/4342)) ([24288a5](https://github.com/n8n-io/n8n/commit/24288a554d445f4fc12ad278e0736cd1e494f6ea)) +- **editor:** Fix data pinning success source ([#4339](https://github.com/n8n-io/n8n/issues/4339)) ([763d2fd](https://github.com/n8n-io/n8n/commit/763d2fd24b0784aa28fc182be8b578537a6fb9a7)) + +# [0.198.0](https://github.com/n8n-io/n8n/compare/n8n@0.197.1...n8n@0.198.0) (2022-10-14) + +### Bug Fixes + +- **Box Node:** Fix issue with create folder operation showing extra items ([#4309](https://github.com/n8n-io/n8n/issues/4309)) ([28bea7e](https://github.com/n8n-io/n8n/commit/28bea7e109ac487014d16773414b53ddd5b0a631)) +- **core, editor:** Prevent overlapping `runData` and `pinData` ([#4323](https://github.com/n8n-io/n8n/issues/4323)) ([cd74c3e](https://github.com/n8n-io/n8n/commit/cd74c3ebaea57a3894e12774ecb043184538b811)) +- **core:** Expression evaluation of process should respect `N8N_BLOCK_ENV_ACCESS_IN_NODE` ([#4338](https://github.com/n8n-io/n8n/issues/4338)) ([5df09bb](https://github.com/n8n-io/n8n/commit/5df09bb31cb4b463007fc829073b66d1dce85fec)) +- **editor-ui:** Fix axios baseUrl when hosted under a subfolder ([#4336](https://github.com/n8n-io/n8n/issues/4336)) ([c2e9a03](https://github.com/n8n-io/n8n/commit/c2e9a03ac54443f4fe65651edbce74ad95e8ca7d)) +- **editor:** Change horizontal scrollbar rendering in various places ([#4282](https://github.com/n8n-io/n8n/issues/4282)) ([fdbc11a](https://github.com/n8n-io/n8n/commit/fdbc11a288f9fe9aac36017366b5817a05f4fbbf)) +- **editor:** Disable trigger node execution pinning toolip for schedule nodes ([#4334](https://github.com/n8n-io/n8n/issues/4334)) ([d4b74bd](https://github.com/n8n-io/n8n/commit/d4b74bd66a4929517c0a66665443bf4059a74932)) +- **editor:** Fix for menu collapse lag when loading a credentials page ([#4329](https://github.com/n8n-io/n8n/issues/4329)) ([298c4f2](https://github.com/n8n-io/n8n/commit/298c4f20a9ec5099953f57f3233e51d1c53d159f)) +- **G Suite Admin Node:** Fix issue with user update operation failing ([#4317](https://github.com/n8n-io/n8n/issues/4317)) ([3e157f7](https://github.com/n8n-io/n8n/commit/3e157f73a441884dc2015c5cf3cdac6644876a7e)) +- **GitLab Trigger Node:** Fix issue with trigger not always activating ([#4303](https://github.com/n8n-io/n8n/issues/4303)) ([2e916b6](https://github.com/n8n-io/n8n/commit/2e916b65644d4b844a4a626a0f0b92c2dd476128)) +- **HTTP Request Node:** Fix oauth credentials not working properly for some predefined credentials ([#4277](https://github.com/n8n-io/n8n/issues/4277)) ([aa6c786](https://github.com/n8n-io/n8n/commit/aa6c786041d754bb795e3afd52e76c09541ffb63)) +- **KoboToolbox Node:** Fix hook logs not working correctly ([#4286](https://github.com/n8n-io/n8n/issues/4286)) ([ebf4515](https://github.com/n8n-io/n8n/commit/ebf45157e610d1e2527e6180de99105b8aeb0fb8)) +- **SeaTable Node:** Fix link items not showing in response ([#4170](https://github.com/n8n-io/n8n/issues/4170)) ([69684fc](https://github.com/n8n-io/n8n/commit/69684fc4f761f970a740b68865304a17257ed20c)) +- **Zoom Node:** Fix issue with missing output items ([#4315](https://github.com/n8n-io/n8n/issues/4315)) ([a82fd3f](https://github.com/n8n-io/n8n/commit/a82fd3f33ff81d2b996e2975c5fd95c8abe84467)) + +- feat(Merge Node)!: Node tweaks n8n-4939 (#4321) ([6a37071](https://github.com/n8n-io/n8n/commit/6a37071350fee9ab861c34f4667709065f03f11a)), closes [#4321](https://github.com/n8n-io/n8n/issues/4321) + +### Features + +- **Citrix Node:** Add certificate install operation ([#4308](https://github.com/n8n-io/n8n/issues/4308)) ([bbb8c56](https://github.com/n8n-io/n8n/commit/bbb8c56b0e9b2c146ae17d956a09759ecded47f5)) +- **Code Node:** Create Code node ([#3965](https://github.com/n8n-io/n8n/issues/3965)) ([1db4fa2](https://github.com/n8n-io/n8n/commit/1db4fa2bf87f02ccced4774eb547646c611cad40)), closes [#3930](https://github.com/n8n-io/n8n/issues/3930) [#4192](https://github.com/n8n-io/n8n/issues/4192) [#4220](https://github.com/n8n-io/n8n/issues/4220) +- **editor:** Update expressions display ([#4171](https://github.com/n8n-io/n8n/issues/4171)) ([6b53849](https://github.com/n8n-io/n8n/commit/6b538494cea62aa8c5b104b244f61e07baa58f18)), closes [#4149](https://github.com/n8n-io/n8n/issues/4149) +- **editor:** Updated n8n-menu component ([#4290](https://github.com/n8n-io/n8n/issues/4290)) ([6af3ba7](https://github.com/n8n-io/n8n/commit/6af3ba75dc90a511395674e9f64e5032e133952b)), closes [#4060](https://github.com/n8n-io/n8n/issues/4060) +- **Kafka Node:** Add key option for messages ([#4210](https://github.com/n8n-io/n8n/issues/4210)) ([1811c54](https://github.com/n8n-io/n8n/commit/1811c54917e5940a3f170761c94096845319db28)) +- **MySql Node:** Use resource locator component for table parameter ([#4313](https://github.com/n8n-io/n8n/issues/4313)) ([9a06c6d](https://github.com/n8n-io/n8n/commit/9a06c6df251d5502b9f27320b49458cfb1ee3d57)) +- **Venafi TLS Protect Cloud Trigger Node:** Add Venafi TLS Protect Cloud Trigger ([#4288](https://github.com/n8n-io/n8n/issues/4288)) ([7a2e5bd](https://github.com/n8n-io/n8n/commit/7a2e5bde90976d5682f3bd3a6896da920ec3ea37)) + +### Performance Improvements + +- **ci:** Sort CI steps by length ([#4243](https://github.com/n8n-io/n8n/issues/4243)) ([d47ff48](https://github.com/n8n-io/n8n/commit/d47ff48fb633cb93cc1df2be06f9608f4f23c14a)) + +### BREAKING CHANGES + +- The Merge node list of operations was rearranged. + +Merge node: 'Combine' operation was added with 'Combine Mode' option, operations 'Merge By Fields', 'Merge By Position' and 'Multiplex' placed under 'Combine Mode' option. +To update -go to the workflows that use the Merge node, select 'Combine' operation and then choose an option from 'Combination Mode' that matches an operation that was previously used. If you want to continue even on error, you can set "Continue on Fail" to true. + +## [0.197.1](https://github.com/n8n-io/n8n/compare/n8n@0.197.0...n8n@0.197.1) (2022-10-10) + +### Bug Fixes + +- **editor:** Fix resource locator width for trigger nodes ([#4302](https://github.com/n8n-io/n8n/issues/4302)) ([845d1f8](https://github.com/n8n-io/n8n/commit/845d1f8bd9763e9b886ac70c7ccbd37ff1c24b43)) + +# [0.197.0](https://github.com/n8n-io/n8n/compare/n8n@0.196.0...n8n@0.197.0) (2022-10-10) + +### Bug Fixes + +- **cli:** Cache generated assets in user writable directory instead ([#4275](https://github.com/n8n-io/n8n/issues/4275)) ([e63eee2](https://github.com/n8n-io/n8n/commit/e63eee28e00ae01fe4db92ac1235d7be7f25b76d)) +- **core:** Fix excess run for pinned trigger in partial execution ([#4185](https://github.com/n8n-io/n8n/issues/4185)) ([a751fd3](https://github.com/n8n-io/n8n/commit/a751fd3ce762df99490889153d36029ff4cd00da)) +- **core:** Fix hooks URLs no longer added to `index.html` ([#4262](https://github.com/n8n-io/n8n/issues/4262)) ([cc2a2e4](https://github.com/n8n-io/n8n/commit/cc2a2e438b0dee703b40dab67b4770dc06c76a7e)) +- **editor:** Fix `pairedItem` in combination with pinned data ([#4257](https://github.com/n8n-io/n8n/issues/4257)) ([e30c78f](https://github.com/n8n-io/n8n/commit/e30c78febeac8bfcfbe5f1c4c13122594d8a518e)) +- **Github Trigger Node:** Fix issue with trigger not always activating ([#4284](https://github.com/n8n-io/n8n/issues/4284)) ([694f1ba](https://github.com/n8n-io/n8n/commit/694f1ba4f5780b2e9821db52e579883bbc289df4)) +- **Microsoft Excel Node:** Fix issue with pagination when getting all items ([#4247](https://github.com/n8n-io/n8n/issues/4247)) ([1067ec0](https://github.com/n8n-io/n8n/commit/1067ec0f5bd8e57650ccd9924e01fc52fbf0c43c)) +- **Microsoft ToDo Node:** Fix pagination issue when getting all items ([#4222](https://github.com/n8n-io/n8n/issues/4222)) ([4595b54](https://github.com/n8n-io/n8n/commit/4595b54e562c50c48bdfe8049cb170196713cc8b)) + +### Features + +- **AWS Certificate Manager Node:** Add AWS Certificate Manager node ([#4263](https://github.com/n8n-io/n8n/issues/4263)) ([9b3f30d](https://github.com/n8n-io/n8n/commit/9b3f30d584901e7dc5fa87854e72f438f2557665)) +- **AWS Elastic Load Balancer Node:** Add Elastic Load Balancer node ([#4264](https://github.com/n8n-io/n8n/issues/4264)) ([fac6efb](https://github.com/n8n-io/n8n/commit/fac6efbb4158aa713bf5472d27b6fe341db8047d)) +- **Citrix ADC Node:** Add Citrix ADC node ([#4274](https://github.com/n8n-io/n8n/issues/4274)) ([7abc7e6](https://github.com/n8n-io/n8n/commit/7abc7e64082b60fa48f99f4b1f41d176fbb6d6ad)) +- **Cloudflare Node:** Add Cloudflare node ([#4271](https://github.com/n8n-io/n8n/issues/4271)) ([94a02c6](https://github.com/n8n-io/n8n/commit/94a02c64928205c441af5515739fe8eab7160b33)) +- **core:** Improve light versioning support in declarative node design ([#4254](https://github.com/n8n-io/n8n/issues/4254)) ([1b320cd](https://github.com/n8n-io/n8n/commit/1b320cd8c9b1e00257c03f92a175e3c9ab9f8030)) +- **Crypto Node:** Add SHA3 support ([#4285](https://github.com/n8n-io/n8n/issues/4285)) ([9407fdd](https://github.com/n8n-io/n8n/commit/9407fddd21295b7bdf2757736b69b046a02e798c)) +- **editor:** JSON mapping ([#4270](https://github.com/n8n-io/n8n/issues/4270)) ([19e333e](https://github.com/n8n-io/n8n/commit/19e333e6602648feacd80277e170d8af38ce06c4)) +- **Venafi TLS Protect Cloud Node:** Add Venafi TLS Protect Cloud ([#4253](https://github.com/n8n-io/n8n/issues/4253)) ([d36e920](https://github.com/n8n-io/n8n/commit/d36e920997d55957385e4ab4d6734639a4c28648)) +- **Venafi TLS Protect Datacenter Node:** Add Venafi TLS Protect Datacenter node ([#4255](https://github.com/n8n-io/n8n/issues/4255)) ([a14110e](https://github.com/n8n-io/n8n/commit/a14110e663caca8e886312a116805c41020ba812)) + +### Performance Improvements + +- **tooling:** Upgrade to TypeScript 4.8 ([#4207](https://github.com/n8n-io/n8n/issues/4207)) ([9089dbe](https://github.com/n8n-io/n8n/commit/9089dbe94220f1789d2cea74608352a070e09bac)) + +# [0.196.0](https://github.com/n8n-io/n8n/compare/n8n@0.195.5...n8n@0.196.0) (2022-09-30) + +### Bug Fixes + +- **build:** Add typing for SSE channel ([#4196](https://github.com/n8n-io/n8n/issues/4196)) ([eaf13cd](https://github.com/n8n-io/n8n/commit/eaf13cdf759497816255926ccc4a60f176d36a1a)) +- **build:** Fix lint issue to fix build ([#4232](https://github.com/n8n-io/n8n/issues/4232)) ([40795d6](https://github.com/n8n-io/n8n/commit/40795d6adf383ec09290ca2a9da7e6ebeeaffb03)) +- **Trello Node:** cardId property not showing up for completed checklist in Trello ([#4186](https://github.com/n8n-io/n8n/issues/4186)) ([05d2275](https://github.com/n8n-io/n8n/commit/05d227571d53a93380aab05444c5de38e448a317)) +- **cli:** Add git to all docker images ([#4189](https://github.com/n8n-io/n8n/issues/4189)) ([0b6a958](https://github.com/n8n-io/n8n/commit/0b6a9585d41992f5dcc1a5683adc3f36e43955af)) +- **cli:** Disable `X-Powered-By: Express` Header ([#4224](https://github.com/n8n-io/n8n/issues/4224)) ([a8da9c3](https://github.com/n8n-io/n8n/commit/a8da9c31a95dabbbdc4eb67e5157dd5631ff3031)) +- **cli:** Disable CORS on SSE connections in production ([#4190](https://github.com/n8n-io/n8n/issues/4190)) ([e6e4f29](https://github.com/n8n-io/n8n/commit/e6e4f297c697c3371743bc1e1b2524235c4aea19)) +- **core:** Remove commented out lines ([6ac442a](https://github.com/n8n-io/n8n/commit/6ac442a2accdeb4e51a3333ac6c45c8bfde0608d)) +- delete unused dependencies ([#4231](https://github.com/n8n-io/n8n/issues/4231)) ([737cbf9](https://github.com/n8n-io/n8n/commit/737cbf9694296b76bc6c19716ffd6d4dcccf1c18)) +- **editor:** Add missing event handler to accordion component ([#4179](https://github.com/n8n-io/n8n/issues/4179)) ([e709cb5](https://github.com/n8n-io/n8n/commit/e709cb5fe28839cf314a511a5a40f374a8ad4647)) +- **editor:** Fix storybook setup ([#4234](https://github.com/n8n-io/n8n/issues/4234)) ([43dc8e6](https://github.com/n8n-io/n8n/commit/43dc8e6da1970d7ea4bb67635c8b20354150c87d)) +- **editor:** Fix `BASE_URL` replacement on windows ([#4202](https://github.com/n8n-io/n8n/issues/4202)) ([5f0c656](https://github.com/n8n-io/n8n/commit/5f0c65690b8dddd21f5a694d6e74980296c7fbb8)) +- **editor:** Fix ParameterInput inputField ref focus ([#4215](https://github.com/n8n-io/n8n/issues/4215)) ([ed40397](https://github.com/n8n-io/n8n/commit/ed403972a929c710180b2ac47fa4057ec47c4a35)) +- **editor:** Make lodash aliases work on case-sensitive filesystems ([#4233](https://github.com/n8n-io/n8n/issues/4233)) ([a381729](https://github.com/n8n-io/n8n/commit/a3817291d7795345542b63641e265fe8f29e8750)) +- **editor:** Fix copy-pasting workflow into pin data code editor ([#4193](https://github.com/n8n-io/n8n/issues/4193)) ([a4f9f04](https://github.com/n8n-io/n8n/commit/a4f9f041a07bea641c09d517942393c24d5e4a37)) +- **editor:** Fix run data footer overflow ([#4175](https://github.com/n8n-io/n8n/issues/4175)) ([20b0e14](https://github.com/n8n-io/n8n/commit/20b0e14f728cd9b77e993ee15e3bd276b102e427)) +- **editor:** Fix run data pagination selector not showing ([#4187](https://github.com/n8n-io/n8n/issues/4187)) ([2b3a090](https://github.com/n8n-io/n8n/commit/2b3a0901aa07046dc68cc6ece6c015819835cfd4)) +- **editor:** Fix run selector not opening ([#4199](https://github.com/n8n-io/n8n/issues/4199)) ([67513e1](https://github.com/n8n-io/n8n/commit/67513e191d82dfa97a477e38770fe610dd9fca65)) +- **editor:** Updating leftover i18n references in NodeView ([#4236](https://github.com/n8n-io/n8n/issues/4236)) ([068c5db](https://github.com/n8n-io/n8n/commit/068c5db1eecd60d650c3646f62eeadfad42df470)) +- **editor:** Updating wrong i18n string reference ([#4209](https://github.com/n8n-io/n8n/issues/4209)) ([80e2d65](https://github.com/n8n-io/n8n/commit/80e2d65933101e69dee98ba69e80156f2ad3b7a9)) +- **editor:** Fix slow loading times for nodeTypes, node creator vuex reference, and pushConnection in settings views ([#4230](https://github.com/n8n-io/n8n/issues/4230)) ([d3c0d99](https://github.com/n8n-io/n8n/commit/d3c0d998679965f53fb170e0f476f7bd17665645)) +- **Merge Node:** Update description in merge node ([47eb531](https://github.com/n8n-io/n8n/commit/47eb531e980b1998fdaaece5cf533dc3903dc796)) +- **core:** Fix and harmonize all primaryDocumentation links ([#4191](https://github.com/n8n-io/n8n/issues/4191)) ([6e8e4f5](https://github.com/n8n-io/n8n/commit/6e8e4f5937eb257efcbb4ff37c6b9403a044eecf)) +- **core:** Remove --forceExit flag from cli tests ([#4211](https://github.com/n8n-io/n8n/issues/4211)) ([faaeb52](https://github.com/n8n-io/n8n/commit/faaeb52a14a40b30ffe90cddb84c45af55acdf93)) +- **Wekan Node:** Fix authentication with new versions of Wekan ([#4088](https://github.com/n8n-io/n8n/issues/4088)) ([764bd35](https://github.com/n8n-io/n8n/commit/764bd3522b72d6188f2425df0710d16c5b34a20b)) +- **Wufoo Trigger Node:** Fix form names not being listed correctly ([#4151](https://github.com/n8n-io/n8n/issues/4151)) ([616d62a](https://github.com/n8n-io/n8n/commit/616d62aa8ef64952eb248b162176460a7ac65cc3)) + +### Features + +- **editor:** Add support for unit testing using vitest in editor-ui ([#4184](https://github.com/n8n-io/n8n/issues/4184)) ([bb66e60](https://github.com/n8n-io/n8n/commit/bb66e60afcbf120f3f916339c983b881ea185487)) +- **cli:** Optimise serving static assets ([#4182](https://github.com/n8n-io/n8n/issues/4182)) ([8b0ccc0](https://github.com/n8n-io/n8n/commit/8b0ccc017bab28903d57a91602331981e45077d9)) +- **core:** Improve paired item and add additional variables ([#3765](https://github.com/n8n-io/n8n/issues/3765)) ([5526057](https://github.com/n8n-io/n8n/commit/5526057efc7d27a1373dc2c46beda2737ed54689)) +- **editor:** Update ResourceLocator error text ([#4242](https://github.com/n8n-io/n8n/issues/4242)) ([b0397f0](https://github.com/n8n-io/n8n/commit/b0397f0262f8a921a0552179ca95cba5f03295ce)) +- **editor:** Main navigation redesign ([#4144](https://github.com/n8n-io/n8n/issues/4144)) ([3db53a1](https://github.com/n8n-io/n8n/commit/3db53a193418db2554e00d7499457d7f400663e1)), closes [#4060](https://github.com/n8n-io/n8n/issues/4060) +- **HTTP Request Node:** Redesign and add the ability to import cURL commands ([#3860](https://github.com/n8n-io/n8n/issues/3860)) ([f37d6ba](https://github.com/n8n-io/n8n/commit/f37d6ba03bcac82a50b2e9ee60c29d6a1a4be911)) +- **editor:** Migrate editor-ui to Vite.js and various DX improvements (N8N-2277) ([#4061](https://github.com/n8n-io/n8n/issues/4061)) ([27e2ce0](https://github.com/n8n-io/n8n/commit/27e2ce047060ca8bfdef43cb7fe50b58c9508375)), closes [#4069](https://github.com/n8n-io/n8n/issues/4069) +- **n8n Api node:** Add core node for consuming the n8n API ([#4076](https://github.com/n8n-io/n8n/issues/4076)) ([929315f](https://github.com/n8n-io/n8n/commit/929315f9e4b56d975783b7d069bdb163218aa7d5)) +- **RabbitMQ Trigger Node:** Automatically reconnect on disconnect ([#4019](https://github.com/n8n-io/n8n/issues/4019)) ([23bd71b](https://github.com/n8n-io/n8n/commit/23bd71b82aafb4d894091a115a168a049c5f594c)) +- **core:** Share unshared credentials with owner on reset ([#4216](https://github.com/n8n-io/n8n/issues/4216)) ([3b7de6d](https://github.com/n8n-io/n8n/commit/3b7de6db725cffbd5ee9f06aee00029d984fe7b8)) +- **Slack Node:** Add operation get many for user resource ([#3150](https://github.com/n8n-io/n8n/issues/3150)) ([2714b4c](https://github.com/n8n-io/n8n/commit/2714b4ced786212906f79c11fae28819aae420e4)) +- **WhatsApp Business node:** Add WhatsApp node ([#3659](https://github.com/n8n-io/n8n/issues/3659)) ([f63710a](https://github.com/n8n-io/n8n/commit/f63710a8923bd742f3259822870f3a2f0b7e04aa)) + +## [0.195.5](https://github.com/n8n-io/n8n/compare/n8n@0.195.4...n8n@0.195.5) (2022-09-23) + +### Bug Fixes + +- **editor:** Fix extract value logic for expressions ([#4178](https://github.com/n8n-io/n8n/issues/4178)) ([46f9562](https://github.com/n8n-io/n8n/commit/46f95622e38e0327c01927bc41f4ea3c413db466)) + +## [0.195.4](https://github.com/n8n-io/n8n/compare/n8n@0.195.3...n8n@0.195.4) (2022-09-22) + +### Bug Fixes + +- **core:** Fix resolve RL values in expressions ([#4173](https://github.com/n8n-io/n8n/issues/4173)) ([469c391](https://github.com/n8n-io/n8n/commit/469c391fee70479d8095a90e6eb525032a0e02a5)) + +### Features + +- **editor-ui:** Resizable main panel ([#3980](https://github.com/n8n-io/n8n/issues/3980)) ([d01f7d4](https://github.com/n8n-io/n8n/commit/d01f7d4d93366054075fdfcadfdff5cf03913472)), closes [#3930](https://github.com/n8n-io/n8n/issues/3930) + +## [0.195.3](https://github.com/n8n-io/n8n/compare/n8n@0.195.2...n8n@0.195.3) (2022-09-22) + +### Bug Fixes + +- **editor:** Fix expressions bug with numbers and booleans ([#4169](https://github.com/n8n-io/n8n/issues/4169)) ([19d08e6](https://github.com/n8n-io/n8n/commit/19d08e641896fa9b1c9edf04505eac213e1de71a)) +- **MSSQL Node:** Support tdsVersion option ([89d2d10](https://github.com/n8n-io/n8n/commit/89d2d10c520482f47ddd755e76b0bdf3d45e6008)) + +## [0.195.2](https://github.com/n8n-io/n8n/compare/n8n@0.195.1...n8n@0.195.2) (2022-09-22) + +### Bug Fixes + +- **core:** Fix mysql migration ([#4166](https://github.com/n8n-io/n8n/issues/4166)) ([0aeb55d](https://github.com/n8n-io/n8n/commit/0aeb55dcfd6c107c67e4c974e3371e29e188310b)) + +## [0.195.1](https://github.com/n8n-io/n8n/compare/n8n@0.195.0...n8n@0.195.1) (2022-09-21) + +### Bug Fixes + +- **core:** Fix postgres migration ([#4164](https://github.com/n8n-io/n8n/issues/4164)) ([2598ec8](https://github.com/n8n-io/n8n/commit/2598ec8a3e7a7d4e444cd4767d5944fa691dd9e1)) + +# [0.195.0](https://github.com/n8n-io/n8n/compare/n8n@0.194.0...n8n@0.195.0) (2022-09-21) + +### Bug Fixes + +- **Box Node:** Fix issue with response data not being returned ([#4147](https://github.com/n8n-io/n8n/issues/4147)) ([3cfc5b5](https://github.com/n8n-io/n8n/commit/3cfc5b55abe6aba3b68ae27846cd18e3ec79b518)) +- **cli:** Fix issue with n8n crashing when error in poll method ([#4008](https://github.com/n8n-io/n8n/issues/4008)) ([6c41b29](https://github.com/n8n-io/n8n/commit/6c41b29ad2c1fffc5710d06250037e2a278b9b4a)) +- **editor:** Fix broken output panel for wait node executions ([#4156](https://github.com/n8n-io/n8n/issues/4156)) ([40ebbea](https://github.com/n8n-io/n8n/commit/40ebbeaefc3a8c0e730468cd8171590dc823106c)) +- **core:** Prevent calls to constructor to forbid arbitrary code execution ([#4139](https://github.com/n8n-io/n8n/issues/4139)) ([a8030db](https://github.com/n8n-io/n8n/commit/a8030dbda5b17ee158ac7ef7f586f212698252f7)) +- **HTTP Node:** Fix instance crashing when batching enabled ([#3902](https://github.com/n8n-io/n8n/issues/3902)) ([0ab89ad](https://github.com/n8n-io/n8n/commit/0ab89ad5d66c1082ec2464813a9622431fa7f230)) +- **public-api:** Create correct OAuth2 credential schema ([#4111](https://github.com/n8n-io/n8n/issues/4111)) ([28ab4f6](https://github.com/n8n-io/n8n/commit/28ab4f66f096eb6ec483e344bffe98b9a81520c6)) +- **Xero Node:** fix line amount types being ignored when creating new invoices ([#4146](https://github.com/n8n-io/n8n/issues/4146)) ([3e2e9e6](https://github.com/n8n-io/n8n/commit/3e2e9e6009301006be7c7e96444ff4bbf824358c)) + +### Features + +- **editor:** Add resource locator parameter ([#3932](https://github.com/n8n-io/n8n/issues/3932)) ([ad73f89](https://github.com/n8n-io/n8n/commit/ad73f8995c34a664391dcc467aca55f44f4bde71)) +- **cli:** User Management and Credentials sharing ([#3602](https://github.com/n8n-io/n8n/issues/3602)) ([97cd564](https://github.com/n8n-io/n8n/commit/97cd564f7b4c5ba1472e517e0d54897b2cabcc26)) + +### Performance Improvements + +- **ci:** Cache npm dependencies ([#4138](https://github.com/n8n-io/n8n/issues/4138)) ([1bdc102](https://github.com/n8n-io/n8n/commit/1bdc102892e77f2723ffed383874092cf4e07810)) + +# [0.194.0](https://github.com/n8n-io/n8n/compare/n8n@0.193.5...n8n@0.194.0) (2022-09-15) + +### Bug Fixes + +- AWS credential testing issue ([#4107](https://github.com/n8n-io/n8n/issues/4107)) ([5130529](https://github.com/n8n-io/n8n/commit/51305290663dc4bc05cdbb075d685673217081f9)) +- **cli,core:** Address Dependabot warnings [N8N-4121] ([#3883](https://github.com/n8n-io/n8n/issues/3883)) ([461848f](https://github.com/n8n-io/n8n/commit/461848fcc4a33b0adf9958bebb2557bfa15100d6)) +- **cli:** Avoid scanning unnecessary directories on windows ([#4082](https://github.com/n8n-io/n8n/issues/4082)) ([84b56eb](https://github.com/n8n-io/n8n/commit/84b56eb48e727389189c517598aadadd6f2ccf23)), closes [#4007](https://github.com/n8n-io/n8n/issues/4007) +- **cli:** Load nodes and credentials on windows using the correct file-path ([#4084](https://github.com/n8n-io/n8n/issues/4084)) ([b6c1187](https://github.com/n8n-io/n8n/commit/b6c1187922ab6552e303c98341c5732ffa96c55f)) +- **cli:** Password reset should trigger internal and external hooks ([#4066](https://github.com/n8n-io/n8n/issues/4066)) ([12507d3](https://github.com/n8n-io/n8n/commit/12507d39d68a2961c6e567b6b7d83759010918b0)) +- **cli:** Use absolute paths for loading custom nodes and credentials ([#4099](https://github.com/n8n-io/n8n/issues/4099)) ([43c9f01](https://github.com/n8n-io/n8n/commit/43c9f019bd3e25215134970570c574da663dd3e0)), closes [#4082](https://github.com/n8n-io/n8n/issues/4082) +- **core & Function nodes:** Update function nodes to work with binary-data-mode 'filesystem'. ([#3845](https://github.com/n8n-io/n8n/issues/3845)) ([f6064ef](https://github.com/n8n-io/n8n/commit/f6064ef278bb481a78942af3af9675f29e59045b)), closes [#1](https://github.com/n8n-io/n8n/issues/1) +- **core:** Fix issue with returnJsonArray helper breaking nodes that return no data ([3de0e22](https://github.com/n8n-io/n8n/commit/3de0e228cb78f292ead4d0103040d2c00943deae)) +- **core:** Fix node renaming in expressions ([381c09f](https://github.com/n8n-io/n8n/commit/381c09fa47212a12f6c7bc166ac641afd97c9681)) +- **core:** Update oauth endpoints to use instance base url ([dd3ba96](https://github.com/n8n-io/n8n/commit/dd3ba963723fbdef7d4239f0890c0776bffd062e)) +- **eslint:** Setup eslint to run on every package ([#4050](https://github.com/n8n-io/n8n/issues/4050)) ([69eb979](https://github.com/n8n-io/n8n/commit/69eb97999da0543308285ebc834f3454c2eea727)) +- **GoogleBigQuery Node:** Fix empty response when creating records ([#4056](https://github.com/n8n-io/n8n/issues/4056)) ([9f92a4d](https://github.com/n8n-io/n8n/commit/9f92a4d681918cb8d9f0d5b0bd322b93da0ba3ef)) +- **Hubspot Node:** Correct canvas name of HubSpot node ([#4054](https://github.com/n8n-io/n8n/issues/4054)) ([e1025e8](https://github.com/n8n-io/n8n/commit/e1025e888c56995d284e0b5889af2e93b57ad3eb)) +- Issue with versioned nodes not loading properly ([#4094](https://github.com/n8n-io/n8n/issues/4094)) ([9e1fa4c](https://github.com/n8n-io/n8n/commit/9e1fa4c0459b0bebe725f5e6db84104bcd37690d)) +- **MongoDB Node:** Update mongo driver to 4.9.1 ([#4095](https://github.com/n8n-io/n8n/issues/4095)) ([f70e6d2](https://github.com/n8n-io/n8n/commit/f70e6d23455b5b380ffb607100e0090203e31047)) +- **node:** Google Cloud Storage linting rules ([36ec81f](https://github.com/n8n-io/n8n/commit/36ec81f62489a7bc3442e46048f92d2ae9de1ce7)) +- **public-api:** Fix error updating workflow with property not defined in the schema ([#4089](https://github.com/n8n-io/n8n/issues/4089)) ([f40ae50](https://github.com/n8n-io/n8n/commit/f40ae501b4dca8f00db41d8fc07b496ad06cf10f)) +- **typescript:** Use consistent typescript configs ([#4049](https://github.com/n8n-io/n8n/issues/4049)) ([9267e8f](https://github.com/n8n-io/n8n/commit/9267e8fb1283794e7ebc109772e584b0471bef27)) +- **workflow:** Remove a few `ts-ignore` and `eslint-disable` ([#3958](https://github.com/n8n-io/n8n/issues/3958)) ([a73ac1d](https://github.com/n8n-io/n8n/commit/a73ac1d94f5081051d1280b7ebc467f22e3d100d)) + +### Features + +- **Adalo Node:** Add Adalo node ([#3102](https://github.com/n8n-io/n8n/issues/3102)) ([9a59d0a](https://github.com/n8n-io/n8n/commit/9a59d0a5d10b83ed4642e59c16310a436fd92a7a)) +- **cli:** Load all nodes and credentials code in isolation ([#3906](https://github.com/n8n-io/n8n/issues/3906)) ([b450e97](https://github.com/n8n-io/n8n/commit/b450e977a32944a5289db2553bf12bdef4e1d3b3)) +- **core, editor-ui:** Introduce node deprecation ([#4103](https://github.com/n8n-io/n8n/issues/4103)) ([98ed207](https://github.com/n8n-io/n8n/commit/98ed2076072858109f5ed512786af61dff0314d6)) +- **editor:** Implement HTML sanitization for Notification and Message components ([#4081](https://github.com/n8n-io/n8n/issues/4081)) ([ea2d18b](https://github.com/n8n-io/n8n/commit/ea2d18b66dba1393a0425b5074884b782f959e5c)) +- **editor:** Show input number for multi-input nodes ([#4000](https://github.com/n8n-io/n8n/issues/4000)) ([8c95d6e](https://github.com/n8n-io/n8n/commit/8c95d6ec53b735cc322a3b5f2a5a78002ae8441a)) +- **gmail:** Overhaul Gmail node + create gmail trigger ([#3734](https://github.com/n8n-io/n8n/issues/3734)) ([74304db](https://github.com/n8n-io/n8n/commit/74304db4e2ae66b82695244d07c6ff8a9ffe37cf)) +- **Google Cloud Storage Node:** Add GCS Node with Bucket and Object operations ([1e963d8](https://github.com/n8n-io/n8n/commit/1e963d8e1ed6956e8af02e70da304211aa725ea1)) +- **Merge Node:** Overhaul of merge node ([f1a5697](https://github.com/n8n-io/n8n/commit/f1a569791d5289ced8ac78d97452f6ad5bf8d1b8)) +- **typescript:** Setup Typescript incremental builds ([#3876](https://github.com/n8n-io/n8n/issues/3876)) ([799676b](https://github.com/n8n-io/n8n/commit/799676b24d9ba5628dc875de1c0bbcf7e51a51cc)) + +## [0.193.5](https://github.com/n8n-io/n8n/compare/n8n@0.193.4...n8n@0.193.5) (2022-09-07) + +### Bug Fixes + +- **editor:** Disable editing in Function nodes in executions view ([#4041](https://github.com/n8n-io/n8n/issues/4041)) ([772836a](https://github.com/n8n-io/n8n/commit/772836abc7d81fce74547dd3644c45eaea9c0a75)) +- **editor:** use correct attribute on button to make it full width ([#4048](https://github.com/n8n-io/n8n/issues/4048)) ([b26545d](https://github.com/n8n-io/n8n/commit/b26545d94c9b718e20580e511aab676e98de66dc)) +- **editor:** Wrong popup title when "Click To Copy" on OAuth2 Redirect Url credentials ([#4043](https://github.com/n8n-io/n8n/issues/4043)) ([0acac35](https://github.com/n8n-io/n8n/commit/0acac355e1bfff326d3bb575d5b21f0004a0c792)) +- **Gmail Node:** Fix node and improve helper so to avoid double wrapping in json key ([#4052](https://github.com/n8n-io/n8n/issues/4052)) ([fbd044b](https://github.com/n8n-io/n8n/commit/fbd044bf874f270c9f9e7cda9aaecdc235ddc677)) + +## [0.193.4](https://github.com/n8n-io/n8n/compare/n8n@0.193.3...n8n@0.193.4) (2022-09-06) + +### Bug Fixes + +- **AWS Nodes:** Handle query string and body properly for AWS related requests ([#4039](https://github.com/n8n-io/n8n/issues/4039)) ([103f04e](https://github.com/n8n-io/n8n/commit/103f04e4eba08a1cd888e71073cf24178a2b52ba)) +- **AWS Lambda Node:** Fix json data being sent to AWS Lambda as string ([#4029](https://github.com/n8n-io/n8n/issues/4029)) ([c28f69b](https://github.com/n8n-io/n8n/commit/c28f69b276fe46c42dfb62753b565ebae37431f5)) +- **Beeminder Node:** Fix request id not being sent when creating a new datapoint ([73c5210](https://github.com/n8n-io/n8n/commit/73c52102949274c4c67ae34c458a6afa9520c150)) +- **cli:** Include "auth-excluded" endpoints on the history middleware as well ([#4028](https://github.com/n8n-io/n8n/issues/4028)) ([d554128](https://github.com/n8n-io/n8n/commit/d55412845784fda4d42a1dcaca60515ad10d2aa0)) +- **core:** Fix MySQL migration issue with table prefix ([#4013](https://github.com/n8n-io/n8n/issues/4013)) ([fc6484b](https://github.com/n8n-io/n8n/commit/fc6484ba4d48363fd846d5c800a25a207082f58d)) +- Correct all the spelling typos ([#3960](https://github.com/n8n-io/n8n/issues/3960)) ([49c85a1](https://github.com/n8n-io/n8n/commit/49c85a1df8417918797c3fe6db46f35f9fe86bdf)) +- Fix n8n-square-button import. ([#4024](https://github.com/n8n-io/n8n/issues/4024)) ([bbd967b](https://github.com/n8n-io/n8n/commit/bbd967bbdfb744874eeae5aced7ce122039b59d5)) +- **GitHub Node:** Fix binary data not being returned ([#4017](https://github.com/n8n-io/n8n/issues/4017)) ([5753110](https://github.com/n8n-io/n8n/commit/575311040261be2982a3c7107bf1ea8b7b63fbb5)) +- **GraphQL Node:** Fix issue with return items ([#4016](https://github.com/n8n-io/n8n/issues/4016)) ([6216132](https://github.com/n8n-io/n8n/commit/6216132ae2f3b908aacf266f4a34143bb8a74f0a)) +- **Postgres Node:** Fix ssue with postgres insert and paired item ([#4020](https://github.com/n8n-io/n8n/issues/4020)) ([9314086](https://github.com/n8n-io/n8n/commit/9314086b6a84ce0f24992827ab316dee4709d118)) +- **Kafka Trigger Node:** fix kafka trigger not working with default max requests value ([71cae90](https://github.com/n8n-io/n8n/commit/71cae90679d9d6fe4cf0dc898827cc9cd4457873)) +- **MonicaCrm Node:** Fix pagination when using return all ([82827d0](https://github.com/n8n-io/n8n/commit/82827d0a12e889b2fdebd422bd1fcb483860599e)) +- **Node Gmail:** Fix bug related to paired items ([2746905](https://github.com/n8n-io/n8n/commit/2746905570c2056abf9c388cc28c7d1d7b9f5102)) +- **Raindrop Node:** Fix issue refreshing OAuth2 credentials ([3163742](https://github.com/n8n-io/n8n/commit/3163742fd7ae0afa86919e5f473be3d2bd88282b)) +- **Shopify Node:** Fix pagination when empty fields are sent ([071ab40](https://github.com/n8n-io/n8n/commit/071ab40c9fa523b8ee47c9428ee6078e43985816)) + +### Features + +- Add possibility to configure stop time for workers ([#4012](https://github.com/n8n-io/n8n/issues/4012)) ([a3791c2](https://github.com/n8n-io/n8n/commit/a3791c22b3f0be16324e1223aa719e6f122a51c1)) +- **cli:** Add external hooks for when members are added or deleted ([#3988](https://github.com/n8n-io/n8n/issues/3988)) ([6be9997](https://github.com/n8n-io/n8n/commit/6be999714f62f22ec5d8ab82f91f7fc5a2b55c4d)) +- **editor:** Use i18n component instead od v-html for localization ([287533e](https://github.com/n8n-io/n8n/commit/287533e6c819329dc84f2e23a33faed66181d07a)) + +## [0.193.3](https://github.com/n8n-io/n8n/compare/n8n@0.193.2...n8n@0.193.3) (2022-09-01) + +### Bug Fixes + +- **cli:** Initialize mailer just if connection can be verified ([#3997](https://github.com/n8n-io/n8n/issues/3997)) ([936cb11](https://github.com/n8n-io/n8n/commit/936cb117895695f9519f0debb3bcac275d98eda8)) +- **core:** Fix disabled parent output in partial execution ([#3946](https://github.com/n8n-io/n8n/issues/3946)) ([c8743ff](https://github.com/n8n-io/n8n/commit/c8743ff6cad1563d31d4d39ffa742726830a4f38)) +- **nodes:** Remove duplicate wrap of paired item data ([#4001](https://github.com/n8n-io/n8n/issues/4001)) ([54efe20](https://github.com/n8n-io/n8n/commit/54efe20ee4834fbf9306be161b36f115b9eb0834)) + +### Features + +- **nodes:** Add database and non http credentials test ([d82e879](https://github.com/n8n-io/n8n/commit/d82e87979dc0fe47e264b0e7bb46c325157d9603)) +- **Mongo DB Node:** Add MongoDB credential testing and two operations ([#3901](https://github.com/n8n-io/n8n/issues/3901)) ([b5511e5](https://github.com/n8n-io/n8n/commit/b5511e5ac7745c6b4a20aa49d2633f2f91bdbb7b)) + +## [0.193.2](https://github.com/n8n-io/n8n/compare/n8n@0.193.1...n8n@0.193.2) (2022-09-01) + +### Bug Fixes + +- **docker:** n8n docker image needs su-exec ([#3993](https://github.com/n8n-io/n8n/issues/3993)) ([aec2489](https://github.com/n8n-io/n8n/commit/aec2489aefb8fca522302bdcaa002fa62393b70a)) +- **docker:** Revert docker `USER` and `WORKDIR` changes ([#3992](https://github.com/n8n-io/n8n/issues/3992)) ([34a99fd](https://github.com/n8n-io/n8n/commit/34a99fd089a754170ed4f2b9bdc02fc951d7e9bc)) +- **core:** Fix OAuth2 issues ([#3391](https://github.com/n8n-io/n8n/pull/3991)) + +## [0.193.1](https://github.com/n8n-io/n8n/compare/n8n@0.193.0...n8n@0.193.1) (2022-08-31) + +### Bug Fixes + +- **editor:** Fix bug where col headers don't show ([#3985](https://github.com/n8n-io/n8n/issues/3985)) ([bee3840](https://github.com/n8n-io/n8n/commit/bee38400505b8862a4e1e5bf28b18088ff8ced8f)) + +# [0.193.0](https://github.com/n8n-io/n8n/compare/n8n@0.192.2...n8n@0.193.0) (2022-08-31) + +### Bug Fixes + +- **ci:** Setup a separate workflow action to test for pushes on master ([#3951](https://github.com/n8n-io/n8n/issues/3951)) ([1f9bdd0](https://github.com/n8n-io/n8n/commit/1f9bdd09a29a5e0564ddc874814eaf36d9380ee7)) +- **core:** Make digest auth work with query params ([087d3f9](https://github.com/n8n-io/n8n/commit/087d3f99f1f5c38db763686c10c6181e20c08307)) +- **editor:** Sending data as query on DELETE method ([#3972](https://github.com/n8n-io/n8n/issues/3972)) ([fc2ff35](https://github.com/n8n-io/n8n/commit/fc2ff35c412b1c10471659c91dc0fe11a3363495)) +- Fix credentials_entity table migration for mysql ([#3979](https://github.com/n8n-io/n8n/issues/3979)) ([349826e](https://github.com/n8n-io/n8n/commit/349826e87fdb03a9f378422ecfac83d42bb5a376)) +- **npm:** Improve .npmignore to reduce the size of the published packages ([#3970](https://github.com/n8n-io/n8n/issues/3970)) ([15d5ac6](https://github.com/n8n-io/n8n/commit/15d5ac6f3c7732374f07726c5697ba341eb9aa70)) + +### Features + +- **design-system,editor-ui:** Upgrade some of the frontend dev dependencies ([#3978](https://github.com/n8n-io/n8n/issues/3978)) ([b428e9f](https://github.com/n8n-io/n8n/commit/b428e9fb9ffb506c97f91d45072e32241a3b07d6)) +- **docker:** Reduce the size of alpine docker images ([#3973](https://github.com/n8n-io/n8n/issues/3973)) ([398adb2](https://github.com/n8n-io/n8n/commit/398adb23e8785c92478c4d80c944e60e9278ffdf)) +- **editor:** Limit when to show mapping tooltip ([#3976](https://github.com/n8n-io/n8n/issues/3976)) ([8fc9f07](https://github.com/n8n-io/n8n/commit/8fc9f07f39edf8944214200dd787b2d0c9b6caff)) +- **HighLevel Node:** Add HighLevel node ([c2e97a8](https://github.com/n8n-io/n8n/commit/c2e97a89f923bbebe0a6d882e86d792fcda3116d)) + +## [0.192.2](https://github.com/n8n-io/n8n/compare/n8n@0.192.1...n8n@0.192.2) (2022-08-25) + +### Bug Fixes + +- **editor:** Fix feature flag check when PH is unavailable ([#3944](https://github.com/n8n-io/n8n/issues/3944)) ([93c26da](https://github.com/n8n-io/n8n/commit/93c26dac286e8fa984cb6fb6fecd6167fc4143f3)) +- **editor:** fix mapping bug when val is null ([#3942](https://github.com/n8n-io/n8n/issues/3942)) ([a21dbdc](https://github.com/n8n-io/n8n/commit/a21dbdc45b6f434f7ecd8b541bb32d397fd95c89)) + +## [0.192.1](https://github.com/n8n-io/n8n/compare/n8n@0.192.0...n8n@0.192.1) (2022-08-25) + +### Bug Fixes + +- **cli:** Account for non-array in pindata migration ([#3938](https://github.com/n8n-io/n8n/issues/3938)) ([f052187](https://github.com/n8n-io/n8n/commit/f0521873e1acf8c6491b75f37be1dd824bb355bc)) + +# [0.192.0](https://github.com/n8n-io/n8n/compare/n8n@0.191.1...n8n@0.192.0) (2022-08-24) + +### Bug Fixes + +- **cli:** Account for unparseable string in JSON key migration ([#3927](https://github.com/n8n-io/n8n/issues/3927)) ([ab45898](https://github.com/n8n-io/n8n/commit/ab45898a69dd9354cdb365187dec0d58a1836418)) +- **cli:** Fix excessive instantiation type error for flattened execution ([#3921](https://github.com/n8n-io/n8n/issues/3921)) ([1d4f92a](https://github.com/n8n-io/n8n/commit/1d4f92a6575a7af6dbd4f03b61202cb56badf6a1)) +- **cli:** Init nodes dir to ensure `npm install` succeeds ([#3934](https://github.com/n8n-io/n8n/issues/3934)) ([2d6eea8](https://github.com/n8n-io/n8n/commit/2d6eea82d324d4560f7445d87647ce0d5e87c678)) +- **cli:** tsc build errors should fail turborepo builds as well ([#3923](https://github.com/n8n-io/n8n/issues/3923)) ([f22bd28](https://github.com/n8n-io/n8n/commit/f22bd2805d87c552d92d0da0313bf7f9c498f103)) +- **core:** Account for enabled state in first pinned trigger ([#3912](https://github.com/n8n-io/n8n/issues/3912)) ([6bd7a09](https://github.com/n8n-io/n8n/commit/6bd7a09a455b61eae5edad1d93e8a7e00c0c68b3)) +- **core:** Fix pinned trigger execution ([#3895](https://github.com/n8n-io/n8n/issues/3895)) ([17799cd](https://github.com/n8n-io/n8n/commit/17799cda46ad764f537d9546346ab4e04e36e681)) +- **NextCloud Node:** Fix issue with credential verification and sharing file ([2b4f5c6](https://github.com/n8n-io/n8n/commit/2b4f5c6c785ab6ffc7198f60369886c44dea6ef2)) +- **Freshdesk Node:** Fix issue when getAll operation requires non existent options ([329fe95](https://github.com/n8n-io/n8n/commit/329fe9581f63fe44daba5ef79724d9339cb8c813)) + +### Features + +- **cli:** Notify external hooks about user profile and password changes ([#3919](https://github.com/n8n-io/n8n/issues/3919)) ([7d74dda](https://github.com/n8n-io/n8n/commit/7d74ddab29e05a81962fd80469248e8cee8bf9bf)) +- **core, editor:** Support `pairedItem` for pinned data ([#3843](https://github.com/n8n-io/n8n/issues/3843)) ([b1e7152](https://github.com/n8n-io/n8n/commit/b1e715299d8a78188fad413392babdea7d044049)) +- **core:** Add command to scripts for easy launch n8n with tunnel ([725a567](https://github.com/n8n-io/n8n/commit/725a567f07c08767f58d4ceb88386a9be694bfd2)) +- **editor, core:** Integrate PostHog ([#3865](https://github.com/n8n-io/n8n/issues/3865)) ([43e054f](https://github.com/n8n-io/n8n/commit/43e054f5abae87b989ffe391a251961a2bc05542)) +- **editor:** Map expressions from input table ([#3864](https://github.com/n8n-io/n8n/issues/3864)) ([ce076dc](https://github.com/n8n-io/n8n/commit/ce076dca48847562067c5149ecdd529fcc014e3f)) + +## [0.191.1](https://github.com/n8n-io/n8n/compare/n8n@0.191.0...n8n@0.191.1) (2022-08-19) + +### Bug Fixes + +- **editor:** Fix issue with disappearing connections after rename ([#3899](https://github.com/n8n-io/n8n/issues/3899)) ([ad0c214](https://github.com/n8n-io/n8n/commit/ad0c214f8ec2088ff30f408fe5ec51216468cdff)) + +# [0.191.0](https://github.com/n8n-io/n8n/compare/n8n@0.190.0...n8n@0.191.0) (2022-08-17) + +### Bug Fixes + +- **cli:** Fix community nodes tests on Postgres and MySQL ([#3861](https://github.com/n8n-io/n8n/issues/3861)) ([620525e](https://github.com/n8n-io/n8n/commit/620525ea85b7de24c0c5f3d3b57350a0a578d9b4)) +- **core:** Fix issue with not displayed child workflow executions ([#3867](https://github.com/n8n-io/n8n/issues/3867)) ([f782bcd](https://github.com/n8n-io/n8n/commit/f782bcd52dbe364d1fca1bd29c9222f434df90ae)) +- **editor:** Handling errors when opening settings and executions ([#3877](https://github.com/n8n-io/n8n/issues/3877)) ([762b422](https://github.com/n8n-io/n8n/commit/762b4224888cc5949eced048729fe313ec055f1c)) +- **editor:** Improve expression and parameters performance ([#3874](https://github.com/n8n-io/n8n/issues/3874)) ([3608d13](https://github.com/n8n-io/n8n/commit/3608d132c0fbdb193758ba9a9c0f1da725d2313a)) +- **public-api:** Fix executions pagination in Postgres and Mysql ([52015a6](https://github.com/n8n-io/n8n/commit/52015a6f033eae5c2ea9ac125a7c947d96ce7463)) + +### Features + +- **cli:** Enable community nodes based on npm availability ([#3871](https://github.com/n8n-io/n8n/issues/3871)) ([936264b](https://github.com/n8n-io/n8n/commit/936264b3c6506cdc25b9ad55a23b314b2582275b)) +- **editor:** Added animated tooltips to draggable columns in input panel ([054cc01](https://github.com/n8n-io/n8n/commit/054cc010edfc9f0f5cc72ac94f26afe52a66a192)) + +# [0.190.0](https://github.com/n8n-io/n8n/compare/n8n@0.189.1...n8n@0.190.0) (2022-08-10) + +### Bug Fixes + +- **core:** Fix crash caused by parallel test-webhook calls ([#3756](https://github.com/n8n-io/n8n/issues/3756)) ([8fe71db](https://github.com/n8n-io/n8n/commit/8fe71dba4bf568e70ed740ac3413aae77559ca3c)) +- **core:** Fix issue that static data did not get saved for poll-triggers ([#3853](https://github.com/n8n-io/n8n/issues/3853)) ([8311abc](https://github.com/n8n-io/n8n/commit/8311abcf9d453f0d253c269e7d1c3842fcf8e256)) +- **GitHub Trigger:** Fix typo ([#3859](https://github.com/n8n-io/n8n/issues/3859)) ([7b3d6de](https://github.com/n8n-io/n8n/commit/7b3d6de44eeb6cb066fb378c52fcc5aec60c4fdf)) +- **public-api:** fix issue paginating executions ([b9fe707](https://github.com/n8n-io/n8n/commit/b9fe707cbd9df4a33b6040215826375bef238b65)) + +### Features + +- Synchronize default VSCode settings ([#3833](https://github.com/n8n-io/n8n/issues/3833)) ([11461fd](https://github.com/n8n-io/n8n/commit/11461fda5fae10077ea9804b5cc9581074107005)) + +## [0.189.1](https://github.com/n8n-io/n8n/compare/n8n@0.189.0...n8n@0.189.1) (2022-08-05) + +### Bug Fixes + +- Fix issue with MySQL/MariaDB migration ([#3832](https://github.com/n8n-io/n8n/issues/3832)) + +# [0.189.0](https://github.com/n8n-io/n8n/compare/n8n@0.188.0...n8n@0.189.0) (2022-08-03) + +### Bug Fixes + +- **editor:** Fix label cut off ([#3820](https://github.com/n8n-io/n8n/issues/3820)) ([0f27be4](https://github.com/n8n-io/n8n/commit/0f27be4447662056a2ba13c027280830f7eab09b)) +- Fix problem saving workflow when tags disabled ([#3792](https://github.com/n8n-io/n8n/issues/3792)) ([f0dddaa](https://github.com/n8n-io/n8n/commit/f0dddaa2a585715b35e26b16e1003e1683ab9402)) + +### Features + +- **NocoDB Node:** Add support v0.90.0+ ([#3146](https://github.com/n8n-io/n8n/issues/3146)) ([d65a9ed](https://github.com/n8n-io/n8n/commit/d65a9ed118ff16c67b6d69d68108d8b7da1814d9)) +- **SendInBlue Node:** Add SendInBlue Regular + Trigger Node ([#3746](https://github.com/n8n-io/n8n/issues/3746)) ([74cedd9](https://github.com/n8n-io/n8n/commit/74cedd94a82f0c053a24b6e925d9e3bcadcebfbc)) +- Support community nodes on Windows ([#3823](https://github.com/n8n-io/n8n/issues/3823)) ([e8eda74](https://github.com/n8n-io/n8n/commit/e8eda7470a17deec1f5eab8cded6e74a8e3aee39)) + +# [0.188.0](https://github.com/n8n-io/n8n/compare/n8n@0.187.2...n8n@0.188.0) (2022-07-27) + +### Bug Fixes + +- **AWS DynamoDB Node:** Fix expression attribute names ([#3763](https://github.com/n8n-io/n8n/issues/3763)) ([88cb265](https://github.com/n8n-io/n8n/commit/88cb26556c162aa1281dfa6a9fa8eca4cd071e9d)) +- **core:** Add windows support to import:credentials --separate ([#3589](https://github.com/n8n-io/n8n/issues/3589)) ([2fb590e](https://github.com/n8n-io/n8n/commit/2fb590e8440ac35567fdbf745b294d79feb8c5a9)) +- **editor:** Fix linking buttons color ([#3770](https://github.com/n8n-io/n8n/issues/3770)) ([deb510a](https://github.com/n8n-io/n8n/commit/deb510a8e0057280da43f3b3e72d8acca5829745)) +- **editor:** Fix pin data in executions when pinData is null. ([#3787](https://github.com/n8n-io/n8n/issues/3787)) ([30c0f21](https://github.com/n8n-io/n8n/commit/30c0f21b3f37280403848592877cb8658367b85e)) +- **editor:** Fix spaces bug ([#3774](https://github.com/n8n-io/n8n/issues/3774)) ([02549e3](https://github.com/n8n-io/n8n/commit/02549e3ba9233a6d9f75fc1f9ff138e2aff7f4b9)) +- **editor:** Fix sticky duplication and position bug ([#3755](https://github.com/n8n-io/n8n/issues/3755)) ([92614c8](https://github.com/n8n-io/n8n/commit/92614c81abfdbca51d4901b364467d3505870255)) +- **editor:** Restore pindata header colors ([#3758](https://github.com/n8n-io/n8n/issues/3758)) ([1a7318b](https://github.com/n8n-io/n8n/commit/1a7318b4cf6081e5ba743117cf90ef6920625aa0)) +- Fix node_type property in all events ([#3759](https://github.com/n8n-io/n8n/issues/3759)) ([1f1a63c](https://github.com/n8n-io/n8n/commit/1f1a63c39adc673259c951af3e5152c5edc34968)) +- **Fix Rocketchat Node:** Fix authentication issue ([#3778](https://github.com/n8n-io/n8n/issues/3778)) ([2710061](https://github.com/n8n-io/n8n/commit/271006152386511c19feb54e438fa60966dbf705)) +- **Mautic Node:** Fix authentication issue ([#3761](https://github.com/n8n-io/n8n/issues/3761)) ([fe58769](https://github.com/n8n-io/n8n/commit/fe58769b4830f388ad67ae1c32fcaa55aa0b848e)) + +### Features + +- Improvements to pairedItem ([1348349](https://github.com/n8n-io/n8n/commit/13483497484e205975ef71091e3892f757f608e1)) +- **Item List Node:** Add operation for creating array from input items ([#3149](https://github.com/n8n-io/n8n/issues/3149)) ([553b14a](https://github.com/n8n-io/n8n/commit/553b14a13c7c9056447ef0b18c9427f26221b44d)) +- **Kafka Trigger Node:** Add additional options ([#3600](https://github.com/n8n-io/n8n/issues/3600)) ([3496a39](https://github.com/n8n-io/n8n/commit/3496a39788b654b46485955ba5cce5e5865babc7)) +- **Metabase Node:** Add Metabase Node ([#3033](https://github.com/n8n-io/n8n/issues/3033)) ([81b5828](https://github.com/n8n-io/n8n/commit/81b58285588f142c0b1cc148f0092c462eefdd73)) + +## [0.187.2](https://github.com/n8n-io/n8n/compare/n8n@0.187.1...n8n@0.187.2) (2022-07-21) + +### Bug Fixes + +- **editor:** Fix console error ([#3751](https://github.com/n8n-io/n8n/issues/3751)) ([3a98028](https://github.com/n8n-io/n8n/commit/3a98028722d634f604a650d891cf6fabf722993d)) +- **editor:** Fix login issue for non-admin users ([#3754](https://github.com/n8n-io/n8n/issues/3754)) ([ccd1ed2](https://github.com/n8n-io/n8n/commit/ccd1ed2c4c5153637a7900a79a40b1c4f53e7635)) +- **editor:** Fix problems with credentials modal if no node is opened ([#3749](https://github.com/n8n-io/n8n/issues/3749)) ([5efe4a4](https://github.com/n8n-io/n8n/commit/5efe4a4c54211f1d395202c420403be3cc7e4446)) +- **NocoDB Node:** Fix authentication issue ([#3750](https://github.com/n8n-io/n8n/issues/3750)) ([e65016c](https://github.com/n8n-io/n8n/commit/e65016c861176a7b17f23c5fbf3c0a3fcc1e5e1d)) + +## [0.187.1](https://github.com/n8n-io/n8n/compare/n8n@0.187.0...n8n@0.187.1) (2022-07-20) + +### Bug Fixes + +- **editor:** Fix issue that new nodes did not get automatically displayed in all connected browsers ([#3745](https://github.com/n8n-io/n8n/issues/3745)) ([34a9bee](https://github.com/n8n-io/n8n/commit/34a9beefa5b0f169f38ca48d3444af8f160c85a2)) + +# [0.187.0](https://github.com/n8n-io/n8n/compare/n8n@0.186.1...n8n@0.187.0) (2022-07-20) + +### Bug Fixes + +- **api:** Add missing node settings parameters ([#3737](https://github.com/n8n-io/n8n/issues/3737)) ([803e009](https://github.com/n8n-io/n8n/commit/803e0097fada1bf0385ac37965f0cc47bed28948)) +- **api:** Validate static data value for resource workflow ([#3736](https://github.com/n8n-io/n8n/issues/3736)) ([7ba9a05](https://github.com/n8n-io/n8n/commit/7ba9a055cdeb2b0713857747a5b722dab65d3678)) +- **Baserow Node:** Fix issue that table names are not getting pulled in new version ([#3721](https://github.com/n8n-io/n8n/issues/3721)) ([f65a5db](https://github.com/n8n-io/n8n/commit/f65a5db478da0da65735bdc5bb09774f1d473ec9)) +- **editor:** Hide 'Execute previous node' button in readonly mode ([#3714](https://github.com/n8n-io/n8n/issues/3714)) ([7fb81dc](https://github.com/n8n-io/n8n/commit/7fb81dcd8a6c56e6e104be94278c690caf35c846)) +- **editor:** Hide tabs if only 1 branch ([#3743](https://github.com/n8n-io/n8n/issues/3743)) ([fb67543](https://github.com/n8n-io/n8n/commit/fb67543b2f10c558abcacc5454d6fa0687ee4702)) +- Fix broken links in nodes ([#3716](https://github.com/n8n-io/n8n/issues/3716)) ([c9b7b6d](https://github.com/n8n-io/n8n/commit/c9b7b6d30fe822bddb3d68e1b4757ffe654e918b)) + +### Features + +- Add more credentials tests ([#3668](https://github.com/n8n-io/n8n/issues/3668)) ([683d2df](https://github.com/n8n-io/n8n/commit/683d2dfc98136503971a4beb1692e5ca191d5016)) +- Add support for preAuthentication and add Metabase credentials ([#3399](https://github.com/n8n-io/n8n/issues/3399)) ([994c89a](https://github.com/n8n-io/n8n/commit/994c89a6c6ade5b99d6218c9776adc15c286b619)) +- **core:** Autofix pairedItem information if inputItems(n) === outputItems(n) ([68fb1c6](https://github.com/n8n-io/n8n/commit/68fb1c64dca99fb603fe6d52fd50c4749a2ca898)) +- **editor:** Add data pinning functionality ([#3511](https://github.com/n8n-io/n8n/issues/3511)) ([15693b0](https://github.com/n8n-io/n8n/commit/15693b0056097129a57dfc600807dbc5e1cc07f1) +- **editor:** Add drag and drop data mapping ([#3708](https://github.com/n8n-io/n8n/issues/3708)) ([577c73e](https://github.com/n8n-io/n8n/commit/577c73ee25c5bfc943ef5ed1de550fcb489f4998)) +- **ERPNext Node:** Add credential test and add support for unauthorized certs ([#3732](https://github.com/n8n-io/n8n/issues/3732)) ([a02b206](https://github.com/n8n-io/n8n/commit/a02b20617071e1ca398735456cb416d6ab3f34a0)), closes [#3739](https://github.com/n8n-io/n8n/issues/3739) +- **Google Drive Node:** Add move to trash support ([#3693](https://github.com/n8n-io/n8n/issues/3693)) ([7406432](https://github.com/n8n-io/n8n/commit/74064325c892c5b506260e650d3361636b578b1e)) +- Make it possible to dynamically load community nodes ([#2849](https://github.com/n8n-io/n8n/issues/2849)) ([c85faff](https://github.com/n8n-io/n8n/commit/c85faff4f1c6ba11c02cf5c14122d2c7341f3ec3)), closes [#3497](https://github.com/n8n-io/n8n/issues/3497) [#3501](https://github.com/n8n-io/n8n/issues/3501) [#3527](https://github.com/n8n-io/n8n/issues/3527) [#3562](https://github.com/n8n-io/n8n/issues/3562) +- **Mindee Node:** Add support for new version ([#3596](https://github.com/n8n-io/n8n/issues/3596)) ([1965407](https://github.com/n8n-io/n8n/commit/1965407030638cc309c99d344121f47805c93799)) +- **Notion Node:** Allow to ignore Notion URL properties if empty ([#3564](https://github.com/n8n-io/n8n/issues/3564)) ([6cb9aef](https://github.com/n8n-io/n8n/commit/6cb9aefb0b3e4d17382042371a20e63f23641581)) +- **Shopify Node:** Add OAuth support ([#3389](https://github.com/n8n-io/n8n/issues/3389)) ([945e25a](https://github.com/n8n-io/n8n/commit/945e25a77cf9ba33bc3e4b70053319ea86230cf7)) + +## [0.186.1](https://github.com/n8n-io/n8n/compare/n8n@0.186.0...n8n@0.186.1) (2022-07-14) + +### Bug Fixes + +- **Airtable Node:** Fix authentication issue ([#3709](https://github.com/n8n-io/n8n/issues/3709)) ([33d8042](https://github.com/n8n-io/n8n/commit/33d804284ae02140749ab94eecfca1699e13afee)) + +# [0.186.0](https://github.com/n8n-io/n8n/compare/n8n@0.185.0...n8n@0.186.0) (2022-07-13) + +### Bug Fixes + +- **editor:** Fix error after multiple executions ([#3697](https://github.com/n8n-io/n8n/issues/3697)) ([d200661](https://github.com/n8n-io/n8n/commit/d200661b84c36b3f04d812cf022bb338f9664392)) +- **EmailReadImap Node:** Improve handling of network problems ([#3406](https://github.com/n8n-io/n8n/issues/3406)) ([6f5809e](https://github.com/n8n-io/n8n/commit/6f5809edb3f9cac0c29d448300b37ab9b6e74c08)) +- **Google Drive Node:** Process all input items with List operation ([#3525](https://github.com/n8n-io/n8n/issues/3525)) ([ece1836](https://github.com/n8n-io/n8n/commit/ece1836c45707d349330f742eb3b83fa1f4eaebb)) +- **Telegram Node:** Fix sending binaryData media (photo, document, video etc.) ([#3408](https://github.com/n8n-io/n8n/issues/3408)) ([af45a07](https://github.com/n8n-io/n8n/commit/af45a07f21d8448bad5c12ed702b7aa983017a2b)) + +### Features + +- Add item information to more node errors ([#3681](https://github.com/n8n-io/n8n/issues/3681)) ([2a8043c](https://github.com/n8n-io/n8n/commit/2a8043cd27968b92b1857135d130e3ee54aae779)) +- **AWS DynamoDB Node:** Improve error handling + add optional GetAll Scan FilterExpression ([#3318](https://github.com/n8n-io/n8n/issues/3318)) ([732c8fc](https://github.com/n8n-io/n8n/commit/732c8fcf8488fc35839855499f75202436fc4c9a)) +- **Customer.io Node:** Add support for tracking API region selection ([#3378](https://github.com/n8n-io/n8n/issues/3378)) ([82a254a](https://github.com/n8n-io/n8n/commit/82a254a8d9295901e42ec999432a7f5b40f38281)) +- **Elasticsearch Node:** Add 'Source Excludes' and 'Source Includes' options on 'Document: getAll' operation ([#3660](https://github.com/n8n-io/n8n/issues/3660)) ([8999403](https://github.com/n8n-io/n8n/commit/899940322831612bdf6e59db7f696c34f96cd496)) +- **Elasticsearch Node:** Add credential tests, index pipelines and index refresh ([#2420](https://github.com/n8n-io/n8n/issues/2420)) +- **Freshworks CRM Node:** Add Search + Lookup functionality ([#3131](https://github.com/n8n-io/n8n/issues/3131)) ([dbc0280](https://github.com/n8n-io/n8n/commit/dbc02803db5351d759b1420e94b14f2c7c8b1bef)) +- **Jira Trigger Node:** Add optional query auth for security ([#3172](https://github.com/n8n-io/n8n/issues/3172)) ([25093b6](https://github.com/n8n-io/n8n/commit/25093b64e693a33a76efd1bd12f00ce0d4cc0f3c)) +- **Postgres Node:** Improvement handling of large numbers ([#3360](https://github.com/n8n-io/n8n/issues/3360)) ([9f908e7](https://github.com/n8n-io/n8n/commit/9f908e7405d687bf57391e503ad724d58caaac07)) +- **Redis Node:** Add push and pop operations ([#3127](https://github.com/n8n-io/n8n/issues/3127)) ([32c68eb](https://github.com/n8n-io/n8n/commit/32c68eb126f8411d1a3261dc8a900c109b99da6f)) +- **Rename Node:** Add regex replace ([#2576](https://github.com/n8n-io/n8n/issues/2576)) ([eae9a60](https://github.com/n8n-io/n8n/commit/eae9a60a431bc08fb58016e3249328abb90716b0)) +- **SpreadsheetFile Node:** Allow skipping headers when writing spreadsheets ([#3234](https://github.com/n8n-io/n8n/issues/3234)) ([dbfb8d5](https://github.com/n8n-io/n8n/commit/dbfb8d56dc6290837701dea5957d4e73db418892)) +- Updated multiple credentials with tests and allow to be used on HTTP Request Node ([#3670](https://github.com/n8n-io/n8n/issues/3670)) ([d5d4dd3](https://github.com/n8n-io/n8n/commit/d5d4dd38450b788ee0ce3ed8ad0eb714c86977d2)) + +# [0.185.0](https://github.com/n8n-io/n8n/compare/n8n@0.184.0...n8n@0.185.0) (2022-07-05) + +### Bug Fixes + +- **Hubspot Node:** Fix search endpoints ([#3640](https://github.com/n8n-io/n8n/issues/3640)) ([16b9926](https://github.com/n8n-io/n8n/commit/16b9926cd25abf4a2ae4c9eba494340eab58082f)) +- **KoboToolbox Node:** Improve attachment matching logic and GeoJSON Polygon format ([#3535](https://github.com/n8n-io/n8n/issues/3535)) ([637e815](https://github.com/n8n-io/n8n/commit/637e81552f86788058567342cf69e2784e3d6b2f)) +- **Odoo Node:** Prevent possible issues with some custom fields ([#3496](https://github.com/n8n-io/n8n/issues/3496)) ([7d968ec](https://github.com/n8n-io/n8n/commit/7d968ec202ceccc6a009ec150747cc927273f841)) +- **Sticky Node:** Fix main header hiding ([#3654](https://github.com/n8n-io/n8n/issues/3654)) ([88486bc](https://github.com/n8n-io/n8n/commit/88486bc778786d4a47ef1bb5c743c9fb206aee01)) +- **Todoist Node:** Fix multiple item support ([#3614](https://github.com/n8n-io/n8n/issues/3614)) ([7ba85c4](https://github.com/n8n-io/n8n/commit/7ba85c4ab910ed02696078ece12c88f2141cccad)) + +### Features + +- **core:** Add `action` to `INodePropertyOptions` ([#3610](https://github.com/n8n-io/n8n/issues/3610)) ([3c65968](https://github.com/n8n-io/n8n/commit/3c659682e94cdd01fd6f267a468a031b028cf690)) +- **DeepL Node:** Add support for longer texts + Credential tests ([#3651](https://github.com/n8n-io/n8n/issues/3651)) ([88d6cfc](https://github.com/n8n-io/n8n/commit/88d6cfc07bfd2be64a39f285d235e22aae8c1522)) +- **Facebook Node:** Add support for Facebook Graph API versions 14 ([#3656](https://github.com/n8n-io/n8n/issues/3656)) ([174d063](https://github.com/n8n-io/n8n/commit/174d06383191e6e70ba27bc3e6e46527731c80b5)) +- **Google Ads Node:** Add new node ([#3526](https://github.com/n8n-io/n8n/issues/3526)) ([088daf9](https://github.com/n8n-io/n8n/commit/088daf952ea7340a3101362bce18668147b8431f)) +- **Jira Node:** Use Jira rendered fields with simplify option ([#3323](https://github.com/n8n-io/n8n/issues/3323)) ([07b6cff](https://github.com/n8n-io/n8n/commit/07b6cffdba55a48bfed629a1faec8cf88bee88bc)) +- **Webflow Trigger Node:** Reduce chance of webhook duplication and add credential test ([#3594](https://github.com/n8n-io/n8n/issues/3594)) ([224e008](https://github.com/n8n-io/n8n/commit/224e008fb64dabef99998508eb4385e1b872c5ad)) +- **Wordpress Node:** Add post template option ([#3139](https://github.com/n8n-io/n8n/issues/3139)) ([02bc3da](https://github.com/n8n-io/n8n/commit/02bc3da78545de4771edf6fdc68720b0e7d596b9)) + +# [0.184.0](https://github.com/n8n-io/n8n/compare/n8n@0.183.0...n8n@0.184.0) (2022-06-29) + +### Bug Fixes + +- **core:** Fix logger error when logging circular json ([#3583](https://github.com/n8n-io/n8n/issues/3583)) ([3cb693d](https://github.com/n8n-io/n8n/commit/3cb693d5d4b8aaf800df70e62c1b2ca2ff208c4d)) +- Correct misfix from `node-param-display-name-wrong-for-dynamic-multi-options` ([#3575](https://github.com/n8n-io/n8n/issues/3575)) ([2ccc7fb](https://github.com/n8n-io/n8n/commit/2ccc7fbc9d1df3f044cf42fe1af72bc7352caa9f)) +- **Cortex Node:** Fix issue that not all Analyzers got returned ([#3606](https://github.com/n8n-io/n8n/issues/3606)) ([6e595c7](https://github.com/n8n-io/n8n/commit/6e595c72760f47107f67c1fd2bdbe76c31af4a8b)) +- **editor:** Display full text of long error messages ([#3561](https://github.com/n8n-io/n8n/issues/3561)) ([8db4405](https://github.com/n8n-io/n8n/commit/8db44057f2101698ef4869fca436862e4dd39fc1)) +- **editor:** Fix credentials rendering when the node has no parameters ([#3563](https://github.com/n8n-io/n8n/issues/3563)) ([55bab19](https://github.com/n8n-io/n8n/commit/55bab19eb440ed9d58137f4334a37d5f731afe0f)) +- Fix issue with required optional parameters ([#3577](https://github.com/n8n-io/n8n/issues/3577)) ([42d2959](https://github.com/n8n-io/n8n/commit/42d2959f47f33defda4239a4d2fbba6927d98617)) +- Fix issue with required optional parameters ([#3597](https://github.com/n8n-io/n8n/issues/3597)) ([848fcfd](https://github.com/n8n-io/n8n/commit/848fcfde5d95d952170e9a3d51b629971a13b832)) +- **HTTP Request Node:** Make all OAuth2 credentials work with HTTP Request Node ([#3503](https://github.com/n8n-io/n8n/issues/3503)) ([acdb4d9](https://github.com/n8n-io/n8n/commit/acdb4d92c8ef95646e69694b2451a9111a81c52f)) +- **LinkedIn Node:** Fix LinkedIn image preview ([#3528](https://github.com/n8n-io/n8n/issues/3528)) ([32f245d](https://github.com/n8n-io/n8n/commit/32f245da53c186a03172dbb23761a05b5e301532)) +- **Salesforce Node:** Fix issue with lead status not using name on update ([#3599](https://github.com/n8n-io/n8n/issues/3599)) ([7ccae7c](https://github.com/n8n-io/n8n/commit/7ccae7c9b22f2848a8aa357227d145241801ba82)) + +### Features + +- **Clockify Node:** Add more resources and improvements ([#3411](https://github.com/n8n-io/n8n/issues/3411)) ([447d190](https://github.com/n8n-io/n8n/commit/447d19024c512eea8e290d8ebc6c3ce82a53f002)) +- **core:** Expose item index being processed ([#3590](https://github.com/n8n-io/n8n/issues/3590)) ([1e4fd9e](https://github.com/n8n-io/n8n/commit/1e4fd9e4df524fdee8195de7be244ff03d97f917)) +- **core:** Give access to getBinaryDataBuffer in preSend method ([#3588](https://github.com/n8n-io/n8n/issues/3588)) ([522b31a](https://github.com/n8n-io/n8n/commit/522b31a47b4f4e9990e07dcc504ef2821a1fd0a5)) +- Migrated to npm release of riot-tmpl fork ([#3581](https://github.com/n8n-io/n8n/issues/3581)) ([891844e](https://github.com/n8n-io/n8n/commit/891844ea8b3248195355f736d7331fd967ee99e1)) + +# [0.183.0](https://github.com/n8n-io/n8n/compare/n8n@0.182.1...n8n@0.183.0) (2022-06-21) + +### Bug Fixes + +- **core:** Do allow OPTIONS requests from any source ([#3555](https://github.com/n8n-io/n8n/issues/3555)) ([74e6b06](https://github.com/n8n-io/n8n/commit/74e6b06467f8d0059c8cc45154e2d2822dc9b0c5)) +- **core:** Fix issue that GET /workflows/:id does not return tags ([#3522](https://github.com/n8n-io/n8n/issues/3522)) ([f75f5d7](https://github.com/n8n-io/n8n/commit/f75f5d711f886892a1afcebff722ab476390f4f0)) +- **core:** Fix issue that some predefined credentials do not show up on HTTP Request Node ([#3556](https://github.com/n8n-io/n8n/issues/3556)) ([d417ea7](https://github.com/n8n-io/n8n/commit/d417ea7ffad9e2210f3b2b5e7122ffbe70f2ba27)) +- **core:** Return correct error message if Axios error ([#3478](https://github.com/n8n-io/n8n/issues/3478)) ([1bef4df](https://github.com/n8n-io/n8n/commit/1bef4df75f999ac2e413b6c179baab3321c52fa2)) +- **core:** Updated expressions allowlist and denylist. ([#3424](https://github.com/n8n-io/n8n/issues/3424)) ([d18a29d](https://github.com/n8n-io/n8n/commit/d18a29d5882fb8f4475258189f6badcd0a573b34)) + +### Features + +- **editor:** Improve trigger panel ([#3509](https://github.com/n8n-io/n8n/issues/3509)) ([a2f6289](https://github.com/n8n-io/n8n/commit/a2f628927dff7ea6741ef8e4a60bcafd95dac7bf)) +- **Hubspot Node:** Allow to set Stage on Ticket Update ([#3317](https://github.com/n8n-io/n8n/issues/3317)) ([0ac9e3f](https://github.com/n8n-io/n8n/commit/0ac9e3f975b73e88acabb66de8b8565f881f64ec)) +- **Todoist Node:** Make it possible to move tasks between sections ([#3074](https://github.com/n8n-io/n8n/issues/3074)) ([049e454](https://github.com/n8n-io/n8n/commit/049e4544d9ccc0acce2a596aced06ec86992e09a)) +- **Twake Node:** Update icon, add cred test and custom operation support ([#3431](https://github.com/n8n-io/n8n/issues/3431)) ([6d64e84](https://github.com/n8n-io/n8n/commit/6d64e84f5e19d5f6d83ccc0a55cdcbd256e5804f)) + +## [0.182.1](https://github.com/n8n-io/n8n/compare/n8n@0.182.0...n8n@0.182.1) (2022-06-16) + +### Bug Fixes + +- **core:** Fix issue with restarting waiting executions ([#3531](https://github.com/n8n-io/n8n/issues/3531)) ([c9273bc](https://github.com/n8n-io/n8n/commit/c9273bcd3862217b4918ac8abb37fae9c2e64622)) + +# [0.182.0](https://github.com/n8n-io/n8n/compare/n8n@0.181.2...n8n@0.182.0) (2022-06-14) + +### Bug Fixes + +- **core:** Fix issue that parameters got lost in some edge cases ([04f0bf5](https://github.com/n8n-io/n8n/commit/04f0bf5b65c8224a4fdfd3c9d2c896f63dfbcc1d)) +- **core:** Fix issue with combined expression not resolving if one is invalid ([#3506](https://github.com/n8n-io/n8n/issues/3506)) ([9ff5762](https://github.com/n8n-io/n8n/commit/9ff57629c5afb2f0fd4aee84cda79c9a6f7962d0)) +- **core:** Fix Public API failing to build on Windows ([#3499](https://github.com/n8n-io/n8n/issues/3499)) ([c121952](https://github.com/n8n-io/n8n/commit/c121952324619434e8a7be540970c167df715b13)) +- **editor:** Fix issue that some errors did not show up correctly ([#3507](https://github.com/n8n-io/n8n/issues/3507)) ([955db0a](https://github.com/n8n-io/n8n/commit/955db0ab101feb17efffe760c79ec2820e1d4c3b)) +- **HTTP Request Node:** Fix issue with requests that return null ([#3498](https://github.com/n8n-io/n8n/issues/3498)) ([7346da0](https://github.com/n8n-io/n8n/commit/7346da0b34b5fdf7ab630ccc5cda102cf80c8036)) +- **Pipedrive Node:** Fix limit issue with Lead -> GetAll ([#3436](https://github.com/n8n-io/n8n/issues/3436)) ([34e891c](https://github.com/n8n-io/n8n/commit/34e891c0f8c987c9be9cff463422b9972f02269f)) +- **PostBin Node:** Fix issue with it throwing unnecessary error ([#3494](https://github.com/n8n-io/n8n/issues/3494)) ([9df3e30](https://github.com/n8n-io/n8n/commit/9df3e30d36104d8e31972c773cb71f4cc82f6970)) + +### Features + +- **core:** Add "Client Credentials" grant type to OAuth2 ([#3489](https://github.com/n8n-io/n8n/issues/3489)) ([e29c597](https://github.com/n8n-io/n8n/commit/e29c5975e1f1ad089167df46021203e9f67c8ef1)) +- **Twilio Node:** Add ability to make a voice call using TTS ([#3467](https://github.com/n8n-io/n8n/issues/3467)) ([eff97e8](https://github.com/n8n-io/n8n/commit/eff97e8d67cd3f0342bbb9648503b351f4691f46)) +- **Wise Node:** Add Support to download statements as JSON, CSV or PDF ([#3468](https://github.com/n8n-io/n8n/issues/3468)) ([51663c1](https://github.com/n8n-io/n8n/commit/51663c1fcbe879e29790af942b73318e95065d8f)) + +## [0.181.2](https://github.com/n8n-io/n8n/compare/n8n@0.181.1...n8n@0.181.2) (2022-06-09) + +### Bug Fixes + +- **core:** Fix issue when a node does not return data ([5eea3cd](https://github.com/n8n-io/n8n/commit/5eea3cd6d0b59963dc7c7a9e1ca597137cf3ce98)) + +## [0.181.1](https://github.com/n8n-io/n8n/compare/n8n@0.181.0...n8n@0.181.1) (2022-06-09) + +### Bug Fixes + +- **core:** Fix another possible issue with multi input nodes ([e88fab5](https://github.com/n8n-io/n8n/commit/e88fab5ee2b82665c3d68c52894a5479ce6eccf6)) +- **core:** Fix issue with multi input nodes ([f79675d](https://github.com/n8n-io/n8n/commit/f79675d5c7876875065fc29504eb0590678d67d3)) + +# [0.181.0](https://github.com/n8n-io/n8n/compare/n8n@0.180.0...n8n@0.181.0) (2022-06-08) + +### Bug Fixes + +- **core:** Properly resolve expressions in declarative node design ([1999f4b](https://github.com/n8n-io/n8n/commit/1999f4b066784cc1dd6a962f51d7c11641577a8b)) + +### Features + +- Add n8n Public API ([#3064](https://github.com/n8n-io/n8n/issues/3064)) ([a18081d](https://github.com/n8n-io/n8n/commit/a18081d749c51d497645d43614fdccb220344607)) +- **core:** Make it possible to block access to environment variables ([ddb3baa](https://github.com/n8n-io/n8n/commit/ddb3baa4eddeb85e2f7abe4465ac4ff4058e1ece)) + +# [0.180.0](https://github.com/n8n-io/n8n/compare/n8n@0.179.0...n8n@0.180.0) (2022-06-07) + +### Bug Fixes + +- **core:** Allow "window" again in expressions ([#3474](https://github.com/n8n-io/n8n/issues/3474)) ([ca92ff7](https://github.com/n8n-io/n8n/commit/ca92ff70d7789e7d0af812cff7c7351e499ddfa2)) +- **core:** Fix `user-management:reset` command ([#3403](https://github.com/n8n-io/n8n/issues/3403)) ([58ecadf](https://github.com/n8n-io/n8n/commit/58ecadf53c35ee0dc897eb7eb29f345f8e797b2b)) +- **core:** Fix crashes in queue mode ([#3397](https://github.com/n8n-io/n8n/issues/3397)) ([042b8da](https://github.com/n8n-io/n8n/commit/042b8daf1cd16822e2da03cf18a69091477d4451)) +- **editor:** Fix delete button hover spacing ([#3412](https://github.com/n8n-io/n8n/issues/3412)) ([50ff75e](https://github.com/n8n-io/n8n/commit/50ff75ecb2b42dfdb00e9c086cf604f1ca699360)) +- **editor:** Fix stuck loading states ([#3428](https://github.com/n8n-io/n8n/issues/3428)) ([450a9aa](https://github.com/n8n-io/n8n/commit/450a9aafea0e44c5d6e6541a9e0872a9d3ac7dee)) +- **EmailReadImap Node:** Improve error handling ([#3465](https://github.com/n8n-io/n8n/issues/3465)) ([3806d63](https://github.com/n8n-io/n8n/commit/3806d6355d4af4ad1222bac20cb36f5ef586501a)) +- **Hubspot Node:** Fix loading of Contacts ([#3426](https://github.com/n8n-io/n8n/issues/3426)) ([f02421b](https://github.com/n8n-io/n8n/commit/f02421b5f3c4946aac6257bbd806d72d0031313f)) + +### Features + +- **Cal Trigger Node:** Add cal.com Trigger Node ([#3439](https://github.com/n8n-io/n8n/issues/3439)) ([1fa445e](https://github.com/n8n-io/n8n/commit/1fa445e0e74462dd28fc81329230b868137dcbd5)) +- **core:** Add support for pairedItem (beta) ([#3012](https://github.com/n8n-io/n8n/issues/3012)) ([bdb8413](https://github.com/n8n-io/n8n/commit/bdb84130d687811d65337ff6b025e7cb0eae8256)) +- **core:** Add support to import/export tags ([#3130](https://github.com/n8n-io/n8n/issues/3130)) ([15a20d2](https://github.com/n8n-io/n8n/commit/15a20d257d7b6b35224c0a654f0f1988081d06d2)) +- **core:** Run Error Workflow also on trigger activation error ([#3470](https://github.com/n8n-io/n8n/issues/3470)) ([b5535e4](https://github.com/n8n-io/n8n/commit/b5535e4a6233d397060308ad1b8c254b28a2d57e)) +- **editor:** Display Credential-Selector after Authentication Type-Selector ([#3461](https://github.com/n8n-io/n8n/issues/3461)) ([59a59e0](https://github.com/n8n-io/n8n/commit/59a59e0c5f1a5207a7124655b5768ac9fededcdc)) +- **editor:** Display node specific settings above general ones ([50ca9c4](https://github.com/n8n-io/n8n/commit/50ca9c4c7e39e1ba176724c4b20dbbab12695cc4)) +- **GitHub Node:**: Add Organization -> Get All operation ([#3247](https://github.com/n8n-io/n8n/pull/3247)) +- **QuickBooks Node:** Add optional Tax item field ([#3404](https://github.com/n8n-io/n8n/issues/3404)) ([c341b45](https://github.com/n8n-io/n8n/commit/c341b45396c7282da087046ade16265c99c8d9dd)) + +# [0.179.0](https://github.com/n8n-io/n8n/compare/n8n@0.178.2...n8n@0.179.0) (2022-05-30) + +### Bug Fixes + +- **core:** Fix issue that "closeFunction" got called twice ([1910299](https://github.com/n8n-io/n8n/commit/1910299a884e8d4d80d4aa6656eb4892b0fcb713)) +- **core:** Fix migrations on non-public Postgres schema ([#3356](https://github.com/n8n-io/n8n/issues/3356)) ([b49d493](https://github.com/n8n-io/n8n/commit/b49d49365398f06376e53d86e6c8c5dc15f67e57)) +- **core:** Fix problem with uploading large files ([#3370](https://github.com/n8n-io/n8n/issues/3370)) ([d3cecfc](https://github.com/n8n-io/n8n/commit/d3cecfc55baf547b2a2bedddebf7e890510187e0)) +- **core:** Prevent expressions XSS ([#3366](https://github.com/n8n-io/n8n/issues/3366)) ([993554f](https://github.com/n8n-io/n8n/commit/993554f22a575d68f7b4424fbcf7d5e0dd8a7186)) +- **Discord Node:** Fix broken rate limit handling ([#3311](https://github.com/n8n-io/n8n/issues/3311)) ([b687ba1](https://github.com/n8n-io/n8n/commit/b687ba11ccac0dfb5a5c61e5db2604ffa8b5dec0)) +- **editor:** Fix component in executions list failing custom validator ([#3284](https://github.com/n8n-io/n8n/issues/3284)) ([d719678](https://github.com/n8n-io/n8n/commit/d71967878f0ef43b8a464aa9e3703f80f5a08ed7)) +- **editor:** Fix conflicting hover states between sticky button and node view ([#3368](https://github.com/n8n-io/n8n/issues/3368)) ([96a109a](https://github.com/n8n-io/n8n/commit/96a109a57c808943f3ab6121ff3e830b12e82d96)) +- **editor:** Fix credential display bug ([#3372](https://github.com/n8n-io/n8n/issues/3372)) ([ed69c3c](https://github.com/n8n-io/n8n/commit/ed69c3cc18d47f906f8cf5c2a6784ee20ae390bd)) +- **Gmail Node:** Fix sending attachments when filesystem mode is used ([#3396](https://github.com/n8n-io/n8n/issues/3396)) ([3a09da9](https://github.com/n8n-io/n8n/commit/3a09da92be556df1b840c0e16e020b0618ce7643)) +- **Google Sheet Node:** Fix issue with null values and "Use Header Names as JSON Paths" option ([#3395](https://github.com/n8n-io/n8n/issues/3395)) ([fbf6019](https://github.com/n8n-io/n8n/commit/fbf60199d95d2448f9f34d0175da316fc18a80b7)) +- **NextCloud Node:** Fix folder list with Nextcloud v24 ([#3386](https://github.com/n8n-io/n8n/issues/3386)) ([5f3bed3](https://github.com/n8n-io/n8n/commit/5f3bed3d4e9134b96d6964ca28b5b5dfb1adc1c3)) + +### Features + +- **PostBin Node:** Add PostBin node ([#3236](https://github.com/n8n-io/n8n/issues/3236)) ([06c407d](https://github.com/n8n-io/n8n/commit/06c407def88e5872b2478ac240430006055a2a22)) +- **RabbitMQ Trigger Node:** Make message acknowledgement and parallel processing configurable ([#3385](https://github.com/n8n-io/n8n/issues/3385)) ([b851289](https://github.com/n8n-io/n8n/commit/b85128900187b1709a7bf13eb5c5d5c4a5528fde)) +- **ServiceNow Node:** Add attachment functionality ([#3137](https://github.com/n8n-io/n8n/issues/3137)) ([c38f6af](https://github.com/n8n-io/n8n/commit/c38f6af4993cd695888ff18b3f95e0d900e65711)) +- **Todoist Node:** Add support for specifying the parent task when adding and listing tasks ([#3161](https://github.com/n8n-io/n8n/issues/3161)) ([dc77594](https://github.com/n8n-io/n8n/commit/dc77594a1eaec73fa34ed09c52d108482002ffff)) + +## [0.178.2](https://github.com/n8n-io/n8n/compare/n8n@0.178.1...n8n@0.178.2) (2022-05-25) + +### Bug Fixes + +- **editor:** Fix parameter loading bug ([#3374](https://github.com/n8n-io/n8n/issues/3374)) ([c7c2061](https://github.com/n8n-io/n8n/commit/c7c2061590493a1b24a8ab4e2615d6d9eb2641e1)) + +## [0.178.1](https://github.com/n8n-io/n8n/compare/n8n@0.178.0...n8n@0.178.1) (2022-05-24) + +### Bug Fixes + +- **editor:** Fix problem with HTTP Request Node 1 credentials to be set ([#3371](https://github.com/n8n-io/n8n/issues/3371)) ([c5fc3bc](https://github.com/n8n-io/n8n/commit/c5fc3bc45e80eec47f4c06b950ab8b3ddaf66f2f)) + +# [0.178.0](https://github.com/n8n-io/n8n/compare/n8n@0.177.0...n8n@0.178.0) (2022-05-24) + +### Bug Fixes + +- **editor:** Do not display diving line unless necessary ([68db12c](https://github.com/n8n-io/n8n/commit/68db12ce6d8bfc99cd0891cfa44f8b64674dada7)) +- **editor:** Do not display welcome sticky in template workflows ([#3320](https://github.com/n8n-io/n8n/issues/3320)) ([29ddac3](https://github.com/n8n-io/n8n/commit/29ddac30d33caff1cf8a061d619742fdb3402d49)) +- **Slack Node:** Fix Channel->Kick ([#3365](https://github.com/n8n-io/n8n/issues/3365)) ([0212d65](https://github.com/n8n-io/n8n/commit/0212d65dae885a6a153c67095f04215f5e1f8278)) + +### Features + +- **core:** Allow credential reuse on HTTP Request node ([#3228](https://github.com/n8n-io/n8n/issues/3228)) ([336fc9e](https://github.com/n8n-io/n8n/commit/336fc9e2a820476931a9e9b482e4be284c0337d0)), closes [#3230](https://github.com/n8n-io/n8n/issues/3230) [#3231](https://github.com/n8n-io/n8n/issues/3231) [#3222](https://github.com/n8n-io/n8n/issues/3222) [#3229](https://github.com/n8n-io/n8n/issues/3229) [#3304](https://github.com/n8n-io/n8n/issues/3304) [#3282](https://github.com/n8n-io/n8n/issues/3282) [#3359](https://github.com/n8n-io/n8n/issues/3359) +- **editor:** Add input panel to NDV ([#3204](https://github.com/n8n-io/n8n/issues/3204)) ([3af0abd](https://github.com/n8n-io/n8n/commit/3af0abd9e066a721ac873f255eeb9311ebe6dd27)) +- **Salesforce Node:** Add country field ([#3314](https://github.com/n8n-io/n8n/issues/3314)) ([90a1bc1](https://github.com/n8n-io/n8n/commit/90a1bc120bc2e291432c977768929da773dcb96e)) + +# [0.177.0](https://github.com/n8n-io/n8n/compare/n8n@0.176.0...n8n@0.177.0) (2022-05-16) + +### Bug Fixes + +- **core:** Fix call to `/executions-current` with unsaved workflow ([#3280](https://github.com/n8n-io/n8n/issues/3280)) ([7090a79](https://github.com/n8n-io/n8n/commit/7090a79b5da611d829da4d027a0194fcb60b4755)) +- **core:** Fix issue with fixedCollection having all default values ([7ced654](https://github.com/n8n-io/n8n/commit/7ced65484fa7c91e10e96f70d6791b689a5686d3)) +- **Edit Image Node:** Fix font selection ([#3287](https://github.com/n8n-io/n8n/issues/3287)) ([8a8feb1](https://github.com/n8n-io/n8n/commit/8a8feb11c8e22e6a548e077b55e40702f2fb724a)) +- **Ghost Node:** Fix post tags and add credential tests ([#3278](https://github.com/n8n-io/n8n/issues/3278)) ([a14d85e](https://github.com/n8n-io/n8n/commit/a14d85ea481b8227ba306f07e13263f45eafa6ca)) +- **Google Calendar Node:** Make it work with public calendars and clean up ([#3283](https://github.com/n8n-io/n8n/issues/3283)) ([a7d960c](https://github.com/n8n-io/n8n/commit/a7d960c56122bd3b602f0e9a121919916e5d6174)) +- **KoBoToolbox Node:** Fix query and sort + use question name in attachments ([#3017](https://github.com/n8n-io/n8n/issues/3017)) ([c885115](https://github.com/n8n-io/n8n/commit/c8851157684fe15c77db1fe716fa4333b54450cb)) +- **Mailjet Trigger Node:** Fix issue that node could not get activated ([#3281](https://github.com/n8n-io/n8n/issues/3281)) ([e09e349](https://github.com/n8n-io/n8n/commit/e09e349fedfe067929556e328a70a32d30759e4d)) +- **Pipedrive Node:** Fix resolve properties when multi option field is used ([#3277](https://github.com/n8n-io/n8n/issues/3277)) ([7eb1261](https://github.com/n8n-io/n8n/commit/7eb12615cf3eebac29e3561a079451017f80de5c)) + +### Features + +- **core:** Automatically convert Luxon Dates to string ([#3266](https://github.com/n8n-io/n8n/issues/3266)) ([3fcee14](https://github.com/n8n-io/n8n/commit/3fcee14bf5c61ec11fc1d4f30256f5ceba09e7f4)) +- **editor:** Improve n8n welcome experience ([#3289](https://github.com/n8n-io/n8n/issues/3289)) ([35f2ce2](https://github.com/n8n-io/n8n/commit/35f2ce2359bb84437ad6fc68a7115081daeb46fe)) +- **Google Drive Node:** Add Shared Drive support for operations upload, delete and share ([#3294](https://github.com/n8n-io/n8n/issues/3294)) ([03cdb1f](https://github.com/n8n-io/n8n/commit/03cdb1fea4fa4967eaafa861f3a9ff4ff7ca625a)) +- **Microsoft OneDrive Node:** Add rename option for files and folders ([#3224](https://github.com/n8n-io/n8n/issues/3224)) ([50246d1](https://github.com/n8n-io/n8n/commit/50246d174a274fc9ba3dea44fc83c3605b4db691)) + +# [0.176.0](https://github.com/n8n-io/n8n/compare/n8n@0.175.1...n8n@0.176.0) (2022-05-10) + +### Bug Fixes + +- **core:** Fix executions list filtering by waiting status ([#3241](https://github.com/n8n-io/n8n/issues/3241)) ([71afcd6](https://github.com/n8n-io/n8n/commit/71afcd6314a73ab6cc04e22afd69e86ca764bd42)) +- **core:** Improve webhook error messages ([49d0e3e](https://github.com/n8n-io/n8n/commit/49d0e3e885003b11092cf3c890847154426dee41)) +- **Edit Image Node:** Make node work with binary-data-mode 'filesystem' ([#3274](https://github.com/n8n-io/n8n/issues/3274)) ([a4db0d0](https://github.com/n8n-io/n8n/commit/a4db0d051b18bc224c6cd69faeabf03cf5fba659)) + +### Features + +- **Pipedrive Node:** Add support for filters to getAll:organization ([#3211](https://github.com/n8n-io/n8n/issues/3211)) ([1ef10dd](https://github.com/n8n-io/n8n/commit/1ef10dd23fef0b2e3e0ef76c8116d3bebc36bc4e)) +- **Pushover Node:** Add 'HTML Formatting' option and credential test ([#3082](https://github.com/n8n-io/n8n/issues/3082)) ([b3dc6d9](https://github.com/n8n-io/n8n/commit/b3dc6d9d9c640f1e0f04cb56d0fabe2aafb948b6)) +- **UProc Node:** Add new tools ([#3104](https://github.com/n8n-io/n8n/issues/3104)) ([ff2bf11](https://github.com/n8n-io/n8n/commit/ff2bf1112f07b7c3fd75f60e8faefdef4e2a02af)) + +## [0.175.1](https://github.com/n8n-io/n8n/compare/n8n@0.175.0...n8n@0.175.1) (2022-05-03) + +### Bug Fixes + +- **editor:** Fix bug with node version ([ed56481](https://github.com/n8n-io/n8n/commit/ed564812435a279760a32e76f3935f492f84f487)) + +# [0.175.0](https://github.com/n8n-io/n8n/compare/n8n@0.174.0...n8n@0.175.0) (2022-05-02) + +### Bug Fixes + +- **core:** Do not applying auth if UM is disabled ([#3218](https://github.com/n8n-io/n8n/issues/3218)) ([4ceac38](https://github.com/n8n-io/n8n/commit/4ceac38e0397be91bfc1b50d8a06ebf20de8c32e)) +- **core:** Skip credential check of disabled nodes and improve error ([79ced8f](https://github.com/n8n-io/n8n/commit/79ced8f6774cc70d63369001d7c56d1d4a340261)) +- **editor:** Fix bug with touchscreens ([#3206](https://github.com/n8n-io/n8n/issues/3206)) ([8d9e05e](https://github.com/n8n-io/n8n/commit/8d9e05e3c3ef61cd5a65ec00d3d1474f1195f653)) +- **Hubspot Node:** Fix search operators ([#3208](https://github.com/n8n-io/n8n/issues/3208)) ([ea4a8b8](https://github.com/n8n-io/n8n/commit/ea4a8b88c9bbfde3304073070a430f2421477921)) +- **Sendgrid Node:** Fix issue sending attachments ([#3213](https://github.com/n8n-io/n8n/issues/3213)) ([2b00881](https://github.com/n8n-io/n8n/commit/2b008815cad82619a66d4b30d1f79630c82be978)) +- **Wise Node:** Respect time parameter on get: exchangeRate ([#3227](https://github.com/n8n-io/n8n/issues/3227)) ([c7d525a](https://github.com/n8n-io/n8n/commit/c7d525a60fda4aad653017cb90253426cce98b3b)) + +### Features + +- **core:** Introduce simplified node versioning ([#3205](https://github.com/n8n-io/n8n/issues/3205)) ([d5b9b0c](https://github.com/n8n-io/n8n/commit/d5b9b0cb9596688b3bcad0010b65888428c297c6)) +- **Google Sheets Node:** Allow to use header names as JSON path ([#3165](https://github.com/n8n-io/n8n/issues/3165)) ([770c4fe](https://github.com/n8n-io/n8n/commit/770c4fe6ebe70c7a507ee5e57348508b98fda11d)) +- **Microsoft Dynamics CRM Node:** Add support for other regions than North America ([#3157](https://github.com/n8n-io/n8n/issues/3157)) ([4bdd607](https://github.com/n8n-io/n8n/commit/4bdd607fdf00f6c2155c9b3e3c9e74ac50e317f4)) +- **Telegram Node:** Allow querying chat administrators ([#3226](https://github.com/n8n-io/n8n/issues/3226)) ([c02d259](https://github.com/n8n-io/n8n/commit/c02d259453f2f5b444569f4c1e06fbfc95cd3305)), closes [#3157](https://github.com/n8n-io/n8n/issues/3157) + +# [0.174.0](https://github.com/n8n-io/n8n/compare/n8n@0.173.1...n8n@0.174.0) (2022-04-25) + +### Bug Fixes + +- **core:** Open oauth callback endpoints to be public ([#3168](https://github.com/n8n-io/n8n/issues/3168)) ([01807d6](https://github.com/n8n-io/n8n/commit/01807d613654eb14dad0eb82defa4fab234a1d71)) +- **MicrosoftOneDrive Node:** Fix issue with filenames that contain special characters from uploading ([#3183](https://github.com/n8n-io/n8n/issues/3183)) ([ff26a98](https://github.com/n8n-io/n8n/commit/ff26a987fe244b30f67d6516d84f1f43fed3ec43)) +- **Slack Node:** Fix credential test ([#3151](https://github.com/n8n-io/n8n/issues/3151)) ([15e6d92](https://github.com/n8n-io/n8n/commit/15e6d9274ad0627dd5ebc30e70757878368042bc)) + +### Features + +- **All AWS Nodes:** Enable support for AWS temporary credentials ([#2587](https://github.com/n8n-io/n8n/issues/2587)) ([ce79e6b](https://github.com/n8n-io/n8n/commit/ce79e6b74f6d94694f16988c8601f7c0639a04b3)) +- **editor:** Add Workflow Stickies (Notes) ([#3154](https://github.com/n8n-io/n8n/issues/3154)) ([31dd01f](https://github.com/n8n-io/n8n/commit/31dd01f9cb7e1b6908a89c3402c78515a6475e61)) +- **Google Sheets Node:** Add upsert support ([#2733](https://github.com/n8n-io/n8n/issues/2733)) ([aeb5a12](https://github.com/n8n-io/n8n/commit/aeb5a1234aa610b333525512085fe3b3bd60abef)) +- **Microsoft Teams Node:** Enhancements and cleanup ([#2940](https://github.com/n8n-io/n8n/issues/2940)) ([d446f9e](https://github.com/n8n-io/n8n/commit/d446f9e28176e6ae2875d526cf4b6ac769dc750c)) +- **MongoDB Node:** Allow parsing dates using dot notation ([#2487](https://github.com/n8n-io/n8n/issues/2487)) ([83998a1](https://github.com/n8n-io/n8n/commit/83998a15b0b4bea94aa07984136bdc56523d4f89)) + +# [0.173.1](https://github.com/n8n-io/n8n/compare/n8n@0.173.0...n8n@0.173.1) (2022-04-19) + +### Bug Fixes + +- **Discord Node:** Fix icon name + +# [0.173.0](https://github.com/n8n-io/n8n/compare/n8n@0.172.0...n8n@0.173.0) (2022-04-19) + +### Bug Fixes + +- **core:** Add "rawBody" also for xml requests ([#3143](https://github.com/n8n-io/n8n/issues/3143)) ([5719e44](https://github.com/n8n-io/n8n/commit/5719e44b5999bb84e2fd50c8a469cc8934539747)) +- **core:** Make email for UM case insensitive ([#3078](https://github.com/n8n-io/n8n/issues/3078)) ([8532b00](https://github.com/n8n-io/n8n/commit/8532b0030dbdeb85b2f74ce078adb44f43a7c4d3)) +- **Discourse Node:** Fix issue with not all posts getting returned and add credential test ([#3007](https://github.com/n8n-io/n8n/issues/3007)) ([d68b7a4](https://github.com/n8n-io/n8n/commit/d68b7a4cf4b1025ce19e23f6bfc9e423595b6c0b)) +- **editor:** Fix breaking Drop-downs after removing expressions ([#3094](https://github.com/n8n-io/n8n/issues/3094)) ([17b0cd8](https://github.com/n8n-io/n8n/commit/17b0cd8f765ce262241c827a635e64c189acc0f8)) +- **Postgres Node:** Fix issue with columns containing spaces ([#2989](https://github.com/n8n-io/n8n/issues/2989)) ([0081d02](https://github.com/n8n-io/n8n/commit/0081d02b979ff5d98c5a834c60d8d8b5e83924ef)) +- **ui:** Reset text-edit input value when pressing esc key to have matching input values ([#3098](https://github.com/n8n-io/n8n/issues/3098)) ([29fdd77](https://github.com/n8n-io/n8n/commit/29fdd77d7b4ac3bbb9faae73b0932183d48ae9a6)) +- **ZendeskTrigger Node:** Fix deprecated targets, replaced with webhooks ([#3025](https://github.com/n8n-io/n8n/issues/3025)) ([794ad7c](https://github.com/n8n-io/n8n/commit/794ad7c756c68e0459d8f105acc3bcc1347d1e59)) +- **Zoho Node:** Fix pagination issue ([#3129](https://github.com/n8n-io/n8n/issues/3129)) ([47bbe98](https://github.com/n8n-io/n8n/commit/47bbe9857b5f3321c9402595041afcb6b96411c4)) + +### Features + +- **Discord Node:** Add additional options ([#2918](https://github.com/n8n-io/n8n/issues/2918)) ([310bffe](https://github.com/n8n-io/n8n/commit/310bffe7137f6baf36b93719c1e5abe8596dd346)) +- **editor:** Add drag and drop from nodes panel ([#3123](https://github.com/n8n-io/n8n/issues/3123)) ([f566569](https://github.com/n8n-io/n8n/commit/f56656929992b98a3473944fd2a395e05d5c42f0)) +- **Google Cloud Realtime Database Node:** Make it possible to select region ([#3096](https://github.com/n8n-io/n8n/issues/3096)) ([176538e](https://github.com/n8n-io/n8n/commit/176538e5f21f14ea3e5964dbe905fe4af89faaef)) +- **GoogleBigQuery Node:** Add support for service account authentication ([#3128](https://github.com/n8n-io/n8n/issues/3128)) ([ac5f357](https://github.com/n8n-io/n8n/commit/ac5f357001b6887d649f65bc32a30e30aa75584b)) +- **Markdown Node:** Add new node to covert between Markdown <> HTML ([#1728](https://github.com/n8n-io/n8n/issues/1728)) ([5d1ddb0](https://github.com/n8n-io/n8n/commit/5d1ddb0e9b56d999ec4d9278b81262aafceb43a9)) +- **PagerDuty Node:** Add support for additional details in incidents ([#3140](https://github.com/n8n-io/n8n/issues/3140)) ([6ca7454](https://github.com/n8n-io/n8n/commit/6ca74540782623ac2301550b62f3382e88b8ed83)), closes [#3094](https://github.com/n8n-io/n8n/issues/3094) [#3105](https://github.com/n8n-io/n8n/issues/3105) [#3112](https://github.com/n8n-io/n8n/issues/3112) [#3078](https://github.com/n8n-io/n8n/issues/3078) [#3133](https://github.com/n8n-io/n8n/issues/3133) [#2918](https://github.com/n8n-io/n8n/issues/2918) +- **Slack Node:** Add blocks to slack message update ([#2182](https://github.com/n8n-io/n8n/issues/2182)) ([b5b6000](https://github.com/n8n-io/n8n/commit/b5b60008d680cd843a418390d451743fc13cac9c)), closes [#1728](https://github.com/n8n-io/n8n/issues/1728) + +# [0.172.0](https://github.com/n8n-io/n8n/compare/n8n@0.171.1...n8n@0.172.0) (2022-04-11) + +### Bug Fixes + +- **Action Network Node:** Fix pagination issue and add credential test ([#3011](https://github.com/n8n-io/n8n/issues/3011)) ([9ef339e](https://github.com/n8n-io/n8n/commit/9ef339e5257e4aa79600554c815cb32fd226753d)) +- **core:** Set correct timezone in luxon ([#3115](https://github.com/n8n-io/n8n/issues/3115)) ([3763f81](https://github.com/n8n-io/n8n/commit/3763f815bd14dcc45786efb9b97bb85695bbf734)) +- **editor:** Fix i18n issues ([#3072](https://github.com/n8n-io/n8n/issues/3072)) ([4ae0f5b](https://github.com/n8n-io/n8n/commit/4ae0f5b6fba65bfa8f236657d89358f53e465c69)), closes [#3097](https://github.com/n8n-io/n8n/issues/3097) + +### Features + +- **editor:** Refactor Node Output Panel [PR#3097](https://github.com/PR/issues/3097) +- **Magento 2 Node:** Add credential tests ([#3086](https://github.com/n8n-io/n8n/issues/3086)) ([a11b00a](https://github.com/n8n-io/n8n/commit/a11b00a0374359f0ba8fe91a1df402f32de61b15)) +- **PayPal Node:** Add auth test, fix typo and update API URL ([#3084](https://github.com/n8n-io/n8n/issues/3084)) ([c7a037e](https://github.com/n8n-io/n8n/commit/c7a037e9feed94b641e6aab92301c8a647a2934c)), closes [PR#2568](https://github.com/PR/issues/2568) + +## [0.171.1](https://github.com/n8n-io/n8n/compare/n8n@0.171.0...n8n@0.171.1) (2022-04-06) + +### Bug Fixes + +- **core:** Fix issue with current executions not getting displayed ([#3093](https://github.com/n8n-io/n8n/issues/3093)) ([4af5168](https://github.com/n8n-io/n8n/commit/4af5168b3bc92578dc807bab1c11e3d90e151928)) +- **core:** Fix issue with falsely skip authorizing ([#3087](https://github.com/n8n-io/n8n/issues/3087)) ([358a683](https://github.com/n8n-io/n8n/commit/358a683f381aa8eb7edd4886d6bdfe7ada61ec35)) +- **WooCommerce Node:** Fix pagination issue with "Get All" operation ([#2529](https://github.com/n8n-io/n8n/issues/2529)) ([c2a5e0d](https://github.com/n8n-io/n8n/commit/c2a5e0d1b6a89cb7397b93bbb0f0be9be0df9c86)) + +# [0.171.0](https://github.com/n8n-io/n8n/compare/n8n@0.170.0...n8n@0.171.0) (2022-04-03) + +### Bug Fixes + +- **core:** Fix crash on webhook when last node did not return data ([c50d04a](https://github.com/n8n-io/n8n/commit/c50d04af9eb033d82860c336fc7350b5c3f22242)) +- **EmailReadImap Node:** Fix issue that crashed process if node was configured wrong ([#3079](https://github.com/n8n-io/n8n/issues/3079)) ([85f15d4](https://github.com/n8n-io/n8n/commit/85f15d49896d876fa3ab84e9fa1846f856851274)) +- **Google Tasks Node:** Fix "Show Completed" option and hide title field where not needed ([#2741](https://github.com/n8n-io/n8n/issues/2741)) ([9d703e3](https://github.com/n8n-io/n8n/commit/9d703e366b8e191e0f588469892ebb7b6d03c1d3)) +- **NocoDB Node:** Fix pagination ([#3081](https://github.com/n8n-io/n8n/issues/3081)) ([5f44b0d](https://github.com/n8n-io/n8n/commit/5f44b0dad5254fe9f985b314db8f7d43ab48c712)) +- **Salesforce Node:** Fix issue that "status" did not get used for Case => Create & Update ([#2212](https://github.com/n8n-io/n8n/issues/2212)) ([1018146](https://github.com/n8n-io/n8n/commit/1018146f21c47eda9f888bd19e92d1106c49267a)) + +### Features + +- **editor:** Add download button for binary data ([#2992](https://github.com/n8n-io/n8n/issues/2992)) ([13a9db7](https://github.com/n8n-io/n8n/commit/13a9db774576a00d4e3ce1988557654d00067073)) +- **Emelia Node:** Add Campaign > Duplicate functionality ([#3000](https://github.com/n8n-io/n8n/issues/3000)) ([0b08be1](https://github.com/n8n-io/n8n/commit/0b08be1c0b2961f235fc2446a36afe3995b4d847)), closes [#3065](https://github.com/n8n-io/n8n/issues/3065) [#2741](https://github.com/n8n-io/n8n/issues/2741) [#3075](https://github.com/n8n-io/n8n/issues/3075) +- **FTP Node:** Add option to recursively create directories on rename ([#3001](https://github.com/n8n-io/n8n/issues/3001)) ([39a6f41](https://github.com/n8n-io/n8n/commit/39a6f417203b76cfa2c68816c49e86dc7236aba4)) +- **Mautic Node:** Add credential test and allow trailing slash in host ([#3080](https://github.com/n8n-io/n8n/issues/3080)) ([0a75539](https://github.com/n8n-io/n8n/commit/0a75539cc3d696a8946d7db5ff5842ff54835134)) +- **Microsoft Teams Node:** Add chat message support ([#2635](https://github.com/n8n-io/n8n/issues/2635)) ([984f62d](https://github.com/n8n-io/n8n/commit/984f62df9ed92cdf297b3b56300c9f23bf128d2d)) +- **Mocean Node:** Add "Delivery Report URL" option and credential tests ([#3075](https://github.com/n8n-io/n8n/issues/3075)) ([c89d2b1](https://github.com/n8n-io/n8n/commit/c89d2b10f2461ff8e90209b8f29c222f9430dba5)) +- **ServiceNow Node:** Add basicAuth support and fix getColumns loadOptions ([#2712](https://github.com/n8n-io/n8n/issues/2712)) ([2c72584](https://github.com/n8n-io/n8n/commit/2c72584b55521b437baa20ddad7c919807fd9f8f)), closes [#2741](https://github.com/n8n-io/n8n/issues/2741) [#3075](https://github.com/n8n-io/n8n/issues/3075) [#3000](https://github.com/n8n-io/n8n/issues/3000) [#3065](https://github.com/n8n-io/n8n/issues/3065) [#2741](https://github.com/n8n-io/n8n/issues/2741) [#3075](https://github.com/n8n-io/n8n/issues/3075) [#3071](https://github.com/n8n-io/n8n/issues/3071) [#3001](https://github.com/n8n-io/n8n/issues/3001) [#2635](https://github.com/n8n-io/n8n/issues/2635) [#3080](https://github.com/n8n-io/n8n/issues/3080) [#3061](https://github.com/n8n-io/n8n/issues/3061) [#3081](https://github.com/n8n-io/n8n/issues/3081) [#2582](https://github.com/n8n-io/n8n/issues/2582) [#2212](https://github.com/n8n-io/n8n/issues/2212) +- **Strava Node:** Add "Get Streams" operation ([#2582](https://github.com/n8n-io/n8n/issues/2582)) ([6bbb4df](https://github.com/n8n-io/n8n/commit/6bbb4df05925362404f844a23a695f186d27b72e)) + +# [0.170.0](https://github.com/n8n-io/n8n/compare/n8n@0.169.0...n8n@0.170.0) (2022-03-27) + +### Bug Fixes + +- **core:** Add logs and error catches for possible failures in queue mode ([#3032](https://github.com/n8n-io/n8n/issues/3032)) ([3b4a97d](https://github.com/n8n-io/n8n/commit/3b4a97dd576bd3c2f53f958266964d3e02f01c96)) +- **AWS Lambda Node:** Fix "Invocation Type" > "Continue Workflow" ([#3010](https://github.com/n8n-io/n8n/issues/3010)) ([9547a08](https://github.com/n8n-io/n8n/commit/9547a08f0344825e42f5580da035bb1f21c03368)) +- **Supabase Node:** Fix Row > Get operation ([#3045](https://github.com/n8n-io/n8n/issues/3045)) ([b9aa440](https://github.com/n8n-io/n8n/commit/b9aa440be3d52bf412990b93cfc3758353fb4943)) +- **Supabase Node:** Send token also via Authorization Bearer ([#2814](https://github.com/n8n-io/n8n/issues/2814)) ([5774dd8](https://github.com/n8n-io/n8n/commit/5774dd8885a87a1ebe70f4ef4a06a42013112afe)) +- **Xero Node:** Fix some operations and add support for setting address and phone number ([#3048](https://github.com/n8n-io/n8n/issues/3048)) ([ab08c0d](https://github.com/n8n-io/n8n/commit/ab08c0df1599d44326b45c37f80918e5c107cc6a)) +- **Wise Node:** Fix issue when executing a transfer ([#3039](https://github.com/n8n-io/n8n/issues/3039)) ([b90bf45](https://github.com/n8n-io/n8n/commit/b90bf4576c6e3f86000d61606f412ea0544b59ef)) + +### Features + +- **Crypto Node:** Add Generate operation to generate random values ([#2541](https://github.com/n8n-io/n8n/issues/2541)) ([b5ecccb](https://github.com/n8n-io/n8n/commit/b5ecccb84080362880a307e3f9d76d429bd1d537)) +- **HTTP Request Node:** Add support for OPTIONS method ([#3030](https://github.com/n8n-io/n8n/issues/3030)) ([bd9064c](https://github.com/n8n-io/n8n/commit/bd9064cd0ea8833b49a7e3860f12bfa37c286947)) +- **Jira Node:** Add Simplify Output option to Issue > Get ([#2408](https://github.com/n8n-io/n8n/issues/2408)) ([016aeaa](https://github.com/n8n-io/n8n/commit/016aeaaa791205c5ee3d16eef25f856603cf0085)) +- **Reddit Node:** Add possibility to query saved posts ([#3034](https://github.com/n8n-io/n8n/issues/3034)) ([5ba4c27](https://github.com/n8n-io/n8n/commit/5ba4c27d8c417964187af89a15d5dd4ce9f3271a)) +- **Zendesk Node:** Add ticket status "On-hold" ([2b20a46](https://github.com/n8n-io/n8n/commit/2b20a460915655791647d62b48dde97dad3b2fd3)) + +# [0.169.0](https://github.com/n8n-io/n8n/compare/n8n@0.168.2...n8n@0.169.0) (2022-03-20) + +### License change + +From [Apache 2.0 with Commons Clause](https://github.com/n8n-io/n8n/blob/181ba3c4e236279b65d102a8a33ae6896f160487/LICENSE.md) to [Sustainable Use License](https://github.com/n8n-io/n8n/blob/master/LICENSE.md) + +### Bug Fixes + +- **GitHub Node:** Fix credential tests and File > List operation ([#2999](https://github.com/n8n-io/n8n/issues/2999)) ([ec618e2](https://github.com/n8n-io/n8n/commit/ec618e25bba5e36592ff37e7c560d738387c9112)) +- **Telegram Node:** Fix sending binary data when disable notification is set ([#2990](https://github.com/n8n-io/n8n/issues/2990)) ([26a7c61](https://github.com/n8n-io/n8n/commit/26a7c61175c1aadc101e055067224aa0797db5c5)) + +### Features + +- Add support for reading ids from file with executeBatch command ([#3008](https://github.com/n8n-io/n8n/issues/3008)) ([5658593](https://github.com/n8n-io/n8n/commit/5658593df4cde8615f3a8383f1045d8659fffb04)) +- **HTTP Request Node:** Allow Delete requests with body ([#2900](https://github.com/n8n-io/n8n/issues/2900)) ([8a88f94](https://github.com/n8n-io/n8n/commit/8a88f948f2bb6ab780a58cd284c0f6d4f499f9c6)) +- **KoBoToolbox Node:** Add KoBoToolbox Regular and Trigger Node ([#2765](https://github.com/n8n-io/n8n/issues/2765)) ([1a7f0a4](https://github.com/n8n-io/n8n/commit/1a7f0a42465574f46f00e4d9d50cf71d947dc2bc)), closes [#2510](https://github.com/n8n-io/n8n/issues/2510) +- **Linear Node:** Add Linear Node ([#2971](https://github.com/n8n-io/n8n/issues/2971)) ([8d04474](https://github.com/n8n-io/n8n/commit/8d04474e30dc9109ad84fc945cc734483d0d067b)) +- **Mailjet Node:** Add credential tests and support for sandbox, JSON parameters & variables ([#2987](https://github.com/n8n-io/n8n/issues/2987)) ([d2756de](https://github.com/n8n-io/n8n/commit/d2756de090f2628f9025ba2f4436870e67576367)) +- **Mattermost Node:** Add support for Channel Search ([#2687](https://github.com/n8n-io/n8n/issues/2687)) ([1b993e4](https://github.com/n8n-io/n8n/commit/1b993e402297ac400c5167d1bcfa78e9a73c07df)) + +## [0.168.2](https://github.com/n8n-io/n8n/compare/n8n@0.168.1...n8n@0.168.2) (2022-03-16) + +### Bug Fixes + +- Fix issue with n8n not authenticating oauth requests ([#2998](https://github.com/n8n-io/n8n/issues/2998)) + +## [0.168.1](https://github.com/n8n-io/n8n/compare/n8n@0.168.0...n8n@0.168.1) (2022-03-15) + +### Bug Fixes + +- Add missing email templates + +# [0.168.0](https://github.com/n8n-io/n8n/compare/n8n@0.167.0...n8n@0.168.0) (2022-03-14) + +### Features + +- Add User Management ([#2636](https://github.com/n8n-io/n8n/issues/2636)) ([7264239](https://github.com/n8n-io/n8n/commit/7264239b839b8e92b7ea667ec70e5c3edb578277)) + +# 0.167.0 (2022-03-13) + +### Bug Fixes + +- Fix issue with long credential type names ([#2961](https://github.com/n8n-io/n8n/issues/2961)) ([535dfe0](https://github.com/n8n-io/n8n/commit/535dfe08384fdd0a4ea86521e917b28f7091ff82)) +- Fix workflow deactivating bug ([195f104](https://github.com/n8n-io/n8n/commit/195f104ef51b722fd5e3756ed3d0cc47ef523362)) +- **GoogleCalendar Node:** Fix timezone ([3c5df3f](https://github.com/n8n-io/n8n/commit/3c5df3f892d89e1ae79dfcc0cd5b1886d1f623db)) +- **SeaTableTrigger Node:** Fix timezone issues ([#2726](https://github.com/n8n-io/n8n/issues/2726)) ([2d8ac4b](https://github.com/n8n-io/n8n/commit/2d8ac4b477f8fb381a35eba34710084d5e4d3402)) +- **Strapi Node:** Add support for Strapi v4 ([2a3cbf3](https://github.com/n8n-io/n8n/commit/2a3cbf3fc85f64e9b4b5814f1206249261743021)) + +### Features + +- Add new expression variables and support for luxon ([e8500e6](https://github.com/n8n-io/n8n/commit/e8500e69371ad4b205d1586c7837120267595c70)) +- **Facebook Node:** Add support for Facebook Graph API versions 13 ([53b5444](https://github.com/n8n-io/n8n/commit/53b54440d7532f439c3533676758b6c83136d48c)) +- **Hubspot:** Add support for Private App Token Authentication ([f73100a](https://github.com/n8n-io/n8n/commit/f73100a0bdebd05b25517532358c71feed040eeb)) +- **If Node,Switch Node:** Add negative operations ([6412546](https://github.com/n8n-io/n8n/commit/6412546c0c5465b17ab2a289f45d8c8fa325eb68)) +- **MongoDb Node:** Add Aggregate Operation ([2c9a06e](https://github.com/n8n-io/n8n/commit/2c9a06e86346a9e21f877cb508d13a1401c700a9)) +- **Redis Node:** Add Redis Trigger node and publish operation to regular node ([5c2deb4](https://github.com/n8n-io/n8n/commit/5c2deb468867ec77a05d09ef324d4855210e17d4)) +- **Wordpress Node:** Add Status option to Get All operation of Posts resource ([4d4db7f](https://github.com/n8n-io/n8n/commit/4d4db7f805673758dfb379c9e86e98815f265db2)) + +> **Note:** for changelogs before 0.167.0, refer to the [Release notes](https://docs.n8n.io/reference/release-notes.html) in the documentation. diff --git a/n8n-n8n-1.109.2/CLAUDE 2.md b/n8n-n8n-1.109.2/CLAUDE 2.md new file mode 100755 index 00000000..1889189c --- /dev/null +++ b/n8n-n8n-1.109.2/CLAUDE 2.md @@ -0,0 +1,159 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with +code in the n8n repository. + +## Project Overview + +n8n is a workflow automation platform written in TypeScript, using a monorepo +structure managed by pnpm workspaces. It consists of a Node.js backend, Vue.js +frontend, and extensible node-based workflow engine. + +## General Guidelines + +- Always use pnpm +- We use Linear as a ticket tracking system +- We use Posthog for feature flags +- When starting to work on a new ticket – create a new branch from fresh + master with the name specified in Linear ticket +- When creating a new branch for a ticket in Linear - use the branch name + suggested by linear +- Use mermaid diagrams in MD files when you need to visualise something + +## Essential Commands + +### Building +Use `pnpm build` to build all packages. ALWAYS redirect the output of the +build command to a file: + +```bash +pnpm build > build.log 2>&1 +``` + +You can inspect the last few lines of the build log file to check for errors: +```bash +tail -n 20 build.log +``` + +### Testing +- `pnpm test` - Run all tests +- `pnpm test:affected` - Runs tests based on what has changed since the last + commit +- `pnpm dev:e2e` - E2E tests in development mode + +Running a particular test file requires going to the directory of that test +and running: `pnpm test `. + +When changing directories, use `pushd` to navigate into the directory and +`popd` to return to the previous directory. When in doubt, use `pwd` to check +your current directory. + +### Code Quality +- `pnpm lint` - Lint code +- `pnpm typecheck` - Run type checks + +Always run lint and typecheck before committing code to ensure quality. +Execute these commands from within the specific package directory you're +working on (e.g., `cd packages/cli && pnpm lint`). Run the full repository +check only when preparing the final PR. When your changes affect type +definitions, interfaces in `@n8n/api-types`, or cross-package dependencies, +build the system before running lint and typecheck. + +## Architecture Overview + +**Monorepo Structure:** pnpm workspaces with Turbo build orchestration + +### Package Structure + +The monorepo is organized into these key packages: + +- **`packages/@n8n/api-types`**: Shared TypeScript interfaces between frontend and backend +- **`packages/workflow`**: Core workflow interfaces and types +- **`packages/core`**: Workflow execution engine +- **`packages/cli`**: Express server, REST API, and CLI commands +- **`packages/editor-ui`**: Vue 3 frontend application +- **`packages/@n8n/i18n`**: Internationalization for UI text +- **`packages/nodes-base`**: Built-in nodes for integrations +- **`packages/@n8n/nodes-langchain`**: AI/LangChain nodes +- **`@n8n/design-system`**: Vue component library for UI consistency +- **`@n8n/config`**: Centralized configuration management + +## Technology Stack + +- **Frontend:** Vue 3 + TypeScript + Vite + Pinia + Storybook UI Library +- **Backend:** Node.js + TypeScript + Express + TypeORM +- **Testing:** Jest (unit) + Playwright (E2E) +- **Database:** TypeORM with SQLite/PostgreSQL/MySQL support +- **Code Quality:** Biome (for formatting) + ESLint + lefthook git hooks + +### Key Architectural Patterns + +1. **Dependency Injection**: Uses `@n8n/di` for IoC container +2. **Controller-Service-Repository**: Backend follows MVC-like pattern +3. **Event-Driven**: Internal event bus for decoupled communication +4. **Context-Based Execution**: Different contexts for different node types +5. **State Management**: Frontend uses Pinia stores +6. **Design System**: Reusable components and design tokens are centralized in + `@n8n/design-system`, where all pure Vue components should be placed to + ensure consistency and reusability + +## Key Development Patterns + +- Each package has isolated build configuration and can be developed independently +- Hot reload works across the full stack during development +- Node development uses dedicated `node-dev` CLI tool +- Workflow tests are JSON-based for integration testing +- AI features have dedicated development workflow (`pnpm dev:ai`) + +### TypeScript Best Practices +- **NEVER use `any` type** - use proper types or `unknown` +- **Avoid type casting with `as`** - use type guards or type predicates instead +- **Define shared interfaces in `@n8n/api-types`** package for FE/BE communication + +### Error Handling +- Don't use `ApplicationError` class in CLI and nodes for throwing errors, + because it's deprecated. Use `UnexpectedError`, `OperationalError` or + `UserError` instead. +- Import from appropriate error classes in each package + +### Frontend Development +- **All UI text must use i18n** - add translations to `@n8n/i18n` package +- **Use CSS variables directly** - never hardcode spacing as px values +- **data-test-id must be a single value** (no spaces or multiple values) + +When implementing CSS, refer to @packages/frontend/CLAUDE.md for guidelines on +CSS variables and styling conventions. + +### Testing Guidelines +- **Always work from within the package directory** when running tests +- **Mock all external dependencies** in unit tests +- **Confirm test cases with user** before writing unit tests +- **Typecheck is critical before committing** - always run `pnpm typecheck` +- **When modifying pinia stores**, check for unused computed properties + +What we use for testing and writing tests: +- For testing nodes and other backend components, we use Jest for unit tests. Examples can be found in `packages/nodes-base/nodes/**/*test*`. +- We use `nock` for server mocking +- For frontend we use `vitest` +- For e2e tests we use `Playwright` and `pnpm dev:e2e`. The old Cypress tests + are being migrated to Playwright, so please use Playwright for new tests. + +### Common Development Tasks + +When implementing features: +1. Define API types in `packages/@n8n/api-types` +2. Implement backend logic in `packages/cli` module, follow + `@packages/cli/scripts/backend-module/backend-module.guide.md` +3. Add API endpoints via controllers +4. Update frontend in `packages/editor-ui` with i18n support +5. Write tests with proper mocks +6. Run `pnpm typecheck` to verify types + +## Github Guidelines +- When creating a PR, use the conventions in + `.github/pull_request_template.md` and + `.github/pull_request_title_conventions.md`. +- Use `gh pr create --draft` to create draft PRs. +- Always reference the Linear ticket in the PR description, + use `https://linear.app/n8n/issue/[TICKET-ID]` +- always link to the github issue if mentioned in the linear ticket. diff --git a/n8n-n8n-1.109.2/CODE_OF_CONDUCT 2.md b/n8n-n8n-1.109.2/CODE_OF_CONDUCT 2.md new file mode 100755 index 00000000..0cc6a554 --- /dev/null +++ b/n8n-n8n-1.109.2/CODE_OF_CONDUCT 2.md @@ -0,0 +1,76 @@ +# Contributor Covenant Code of Conduct + +## Our Pledge + +In the interest of fostering an open and welcoming environment, we as +contributors and maintainers pledge to making participation in our project and +our community a harassment-free experience for everyone, regardless of age, body +size, disability, ethnicity, sex characteristics, gender identity and expression, +level of experience, education, socio-economic status, nationality, personal +appearance, race, religion, or sexual identity and orientation. + +## Our Standards + +Examples of behavior that contributes to creating a positive environment +include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or + advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic + address, without explicit permission +- Other conduct which could reasonably be considered inappropriate in a + professional setting + +## Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable +behavior and are expected to take appropriate and fair corrective action in +response to any instances of unacceptable behavior. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, +threatening, offensive, or harmful. + +## Scope + +This Code of Conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. Examples of +representing a project or community include using an official project e-mail +address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be +further defined and clarified by project maintainers. + +## Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by contacting the project team at jan@n8n.io. All +complaints will be reviewed and investigated and will result in a response that +is deemed necessary and appropriate to the circumstances. The project team is +obligated to maintain confidentiality with regard to the reporter of an incident. +Further details of specific enforcement policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good +faith may face temporary or permanent repercussions as determined by other +members of the project's leadership. + +## Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, +available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html + +[homepage]: https://www.contributor-covenant.org + +For answers to common questions about this code of conduct, see +https://www.contributor-covenant.org/faq diff --git a/n8n-n8n-1.109.2/CONTRIBUTING 2.md b/n8n-n8n-1.109.2/CONTRIBUTING 2.md new file mode 100755 index 00000000..fdd981ce --- /dev/null +++ b/n8n-n8n-1.109.2/CONTRIBUTING 2.md @@ -0,0 +1,423 @@ +# Contributing to n8n + +Great that you are here and you want to contribute to n8n + +## Contents + +- [Contributing to n8n](#contributing-to-n8n) + - [Contents](#contents) + - [Code of conduct](#code-of-conduct) + - [Directory structure](#directory-structure) + - [Development setup](#development-setup) + - [Dev Container](#dev-container) + - [Requirements](#requirements) + - [Node.js](#nodejs) + - [pnpm](#pnpm) + - [pnpm workspaces](#pnpm-workspaces) + - [corepack](#corepack) + - [Build tools](#build-tools) + - [Actual n8n setup](#actual-n8n-setup) + - [Start](#start) + - [Development cycle](#development-cycle) + - [Community PR Guidelines](#community-pr-guidelines) + - [**1. Change Request/Comment**](#1-change-requestcomment) + - [**2. General Requirements**](#2-general-requirements) + - [**3. PR Specific Requirements**](#3-pr-specific-requirements) + - [**4. Workflow Summary for Non-Compliant PRs**](#4-workflow-summary-for-non-compliant-prs) + - [Test suite](#test-suite) + - [Unit tests](#unit-tests) + - [Code Coverage](#code-coverage) + - [E2E tests](#e2e-tests) + - [Releasing](#releasing) + - [Create custom nodes](#create-custom-nodes) + - [Extend documentation](#extend-documentation) + - [Contribute workflow templates](#contribute-workflow-templates) + - [Contributor License Agreement](#contributor-license-agreement) + +## Code of conduct + +This project and everyone participating in it are governed by the Code of +Conduct which can be found in the file [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md). +By participating, you are expected to uphold this code. Please report +unacceptable behavior to jan@n8n.io. + +## Directory structure + +n8n is split up in different modules which are all in a single mono repository. + +The most important directories: + +- [/docker/images](/docker/images) - Dockerfiles to create n8n containers +- [/packages](/packages) - The different n8n modules +- [/packages/cli](/packages/cli) - CLI code to run front- & backend +- [/packages/core](/packages/core) - Core code which handles workflow + execution, active webhooks and + workflows. **Contact n8n before + starting on any changes here** +- [/packages/frontend/@n8n/design-system](/packages/design-system) - Vue frontend components +- [/packages/frontend/editor-ui](/packages/editor-ui) - Vue frontend workflow editor +- [/packages/node-dev](/packages/node-dev) - CLI to create new n8n-nodes +- [/packages/nodes-base](/packages/nodes-base) - Base n8n nodes +- [/packages/workflow](/packages/workflow) - Workflow code with interfaces which + get used by front- & backend + +## Development setup + +If you want to change or extend n8n you have to make sure that all the needed +dependencies are installed and the packages get linked correctly. Here's a short guide on how that can be done: + +### Dev Container + +If you already have VS Code and Docker installed, you can click [here](https://vscode.dev/redirect?url=vscode://ms-vscode-remote.remote-containers/cloneInVolume?url=https://github.com/n8n-io/n8n) to get started. Clicking these links will cause VS Code to automatically install the Dev Containers extension if needed, clone the source code into a container volume, and spin up a dev container for use. + +### Requirements + +#### Node.js + +[Node.js](https://nodejs.org/en/) version 22.16 or newer is required for development purposes. + +#### pnpm + +[pnpm](https://pnpm.io/) version 10.2 or newer is required for development purposes. We recommend installing it with [corepack](#corepack). + +##### pnpm workspaces + +n8n is split up into different modules which are all in a single mono repository. +To facilitate the module management, [pnpm workspaces](https://pnpm.io/workspaces) are used. +This automatically sets up file-links between modules which depend on each other. + +#### corepack + +We recommend enabling [Node.js corepack](https://nodejs.org/docs/latest-v16.x/api/corepack.html) with `corepack enable`. + +You can install the correct version of pnpm using `corepack prepare --activate`. + +**IMPORTANT**: If you have installed Node.js via homebrew, you'll need to run `brew install corepack`, since homebrew explicitly removes `npm` and `corepack` from [the `node` formula](https://github.com/Homebrew/homebrew-core/blob/master/Formula/node.rb#L66). + +**IMPORTANT**: If you are on windows, you'd need to run `corepack enable` and `corepack prepare --activate` in a terminal as an administrator. + +#### Build tools + +The packages which n8n uses depend on a few build tools: + +Debian/Ubuntu: + +``` +apt-get install -y build-essential python +``` + +CentOS: + +``` +yum install gcc gcc-c++ make +``` + +Windows: + +``` +npm add -g windows-build-tools +``` + +MacOS: + +No additional packages required. + +#### actionlint (for GitHub Actions workflow development) + +If you plan to modify GitHub Actions workflow files (`.github/workflows/*.yml`), you'll need [actionlint](https://github.com/rhysd/actionlint) for workflow validation: + +**macOS (Homebrew):** +``` +brew install actionlint +``` +> **Note:** actionlint is only required if you're modifying workflow files. It runs automatically via git hooks when workflow files are changed. + +### Actual n8n setup + +> **IMPORTANT**: All the steps below have to get executed at least once to get the development setup up and running! + +Now that everything n8n requires to run is installed, the actual n8n code can be +checked out and set up: + +1. [Fork](https://guides.github.com/activities/forking/#fork) the n8n repository. + +2. Clone your forked repository: + + ``` + git clone https://github.com//n8n.git + ``` + +3. Go into repository folder: + + ``` + cd n8n + ``` + +4. Add the original n8n repository as `upstream` to your forked repository: + + ``` + git remote add upstream https://github.com/n8n-io/n8n.git + ``` + +5. Install all dependencies of all modules and link them together: + + ``` + pnpm install + ``` + +6. Build all the code: + ``` + pnpm build + ``` + +### Start + +To start n8n execute: + +``` +pnpm start +``` + +To start n8n with tunnel: + +``` +./packages/cli/bin/n8n start --tunnel +``` + +## Development cycle + +While iterating on n8n modules code, you can run `pnpm dev`. It will then +automatically build your code, restart the backend and refresh the frontend +(editor-ui) on every change you make. + +### Basic Development Workflow + +1. Start n8n in development mode: + ``` + pnpm dev + ``` +2. Hack, hack, hack +3. Check if everything still runs in production mode: + ``` + pnpm build + pnpm start + ``` +4. Create tests +5. Run all [tests](#test-suite): + ``` + pnpm test + ``` +6. Commit code and [create a pull request](https://docs.github.com/en/github/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork) + +### Hot Reload for Nodes (N8N_DEV_RELOAD) + +When developing custom nodes or credentials, you can enable hot reload to automatically detect changes without restarting the server: + +```bash +N8N_DEV_RELOAD=true pnpm dev +``` + +**Performance considerations:** +- File watching adds overhead to your system, especially on slower machines +- The watcher monitors potentially thousands of files, which can impact CPU and memory usage +- On resource-constrained systems, consider developing without hot reload and manually restarting when needed + +### Selective Package Development + +Running all packages in development mode can be resource-intensive. For better performance, run only the packages relevant to your work: + +#### Available Filtered Commands + +- **Backend-only development:** + ```bash + pnpm dev:be + ``` + Excludes frontend packages like editor-ui and design-system + +- **Frontend-only development:** + ```bash + pnpm dev:fe + ``` + Runs the backend server and editor-ui development server + +- **AI/LangChain nodes development:** + ```bash + pnpm dev:ai + ``` + Runs only essential packages for AI node development + +#### Custom Selective Development + +For even more focused development, you can run packages individually: + +**Example 1: Working on custom nodes** +```bash +# Terminal 1: Build and watch nodes package +cd packages/nodes-base +pnpm dev + +# Terminal 2: Run the CLI with hot reload +cd packages/cli +N8N_DEV_RELOAD=true pnpm dev +``` + +**Example 2: Pure frontend development** +```bash +# Terminal 1: Start the backend server (no watching) +pnpm start + +# Terminal 2: Run frontend dev server +cd packages/editor-ui +pnpm dev +``` + +**Example 3: Working on a specific node package** +```bash +# Terminal 1: Watch your node package +cd packages/nodes-base # or your custom node package +pnpm watch + +# Terminal 2: Run CLI with hot reload +cd packages/cli +N8N_DEV_RELOAD=true pnpm dev +``` + +### Performance Considerations + +The full development mode (`pnpm dev`) runs multiple processes in parallel: + +1. **TypeScript compilation** for each package +2. **File watchers** monitoring source files +3. **Nodemon** restarting the backend on changes +4. **Vite dev server** for the frontend with HMR +5. **Multiple build processes** for various packages + +**Performance impact:** +- Can consume significant CPU and memory resources +- File system watching creates overhead, especially on: + - Networked file systems + - Virtual machines with shared folders + - Systems with slower I/O performance +- The more packages you run in dev mode, the more system resources are consumed + +**Recommendations for resource-constrained environments:** +1. Use selective development commands based on your task +2. Close unnecessary applications to free up resources +3. Monitor system performance and adjust your development approach accordingly + +--- + +### Community PR Guidelines + +#### **1. Change Request/Comment** + +Please address the requested changes or provide feedback within 14 days. If there is no response or updates to the pull request during this time, it will be automatically closed. The PR can be reopened once the requested changes are applied. + +#### **2. General Requirements** + +- **Follow the Style Guide:** + - Ensure your code adheres to n8n's coding standards and conventions (e.g., formatting, naming, indentation). Use linting tools where applicable. +- **TypeScript Compliance:** + - Do not use `ts-ignore` . + - Ensure code adheres to TypeScript rules. +- **Avoid Repetitive Code:** + - Reuse existing components, parameters, and logic wherever possible instead of redefining or duplicating them. + - For nodes: Use the same parameter across multiple operations rather than defining a new parameter for each operation (if applicable). +- **Testing Requirements:** + - PRs **must include tests**: + - Unit tests + - Workflow tests for nodes (example [here](https://github.com/n8n-io/n8n/tree/master/packages/nodes-base/nodes/Switch/V3/test)) + - UI tests (if applicable) +- **Typos:** + - Use a spell-checking tool, such as [**Code Spell Checker**](https://marketplace.visualstudio.com/items?itemName=streetsidesoftware.code-spell-checker), to avoid typos. + +#### **3. PR Specific Requirements** + +- **Small PRs Only:** + - Focus on a single feature or fix per PR. +- **Naming Convention:** + - Follow [n8n's PR Title Conventions](https://github.com/n8n-io/n8n/blob/master/.github/pull_request_title_conventions.md#L36). +- **New Nodes:** + - PRs that introduce new nodes will be **auto-closed** unless they are explicitly requested by the n8n team and aligned with an agreed project scope. However, you can still explore [building your own nodes](https://docs.n8n.io/integrations/creating-nodes/) , as n8n offers the flexibility to create your own custom nodes. +- **Typo-Only PRs:** + - Typos are not sufficient justification for a PR and will be rejected. + +#### **4. Workflow Summary for Non-Compliant PRs** + +- **No Tests:** If tests are not provided, the PR will be auto-closed after **14 days**. +- **Non-Small PRs:** Large or multifaceted PRs will be returned for segmentation. +- **New Nodes/Typo PRs:** Automatically rejected if not aligned with project scope or guidelines. + +--- + +### Test suite + +#### Unit tests + +Unit tests can be started via: + +``` +pnpm test +``` + +If that gets executed in one of the package folders it will only run the tests +of this package. If it gets executed in the n8n-root folder it will run all +tests of all packages. + +If you made a change which requires an update on a `.test.ts.snap` file, pass `-u` to the command to run tests or press `u` in watch mode. + +#### Code Coverage +We track coverage for all our code on [Codecov](https://app.codecov.io/gh/n8n-io/n8n). +But when you are working on tests locally, we recommend running your tests with env variable `COVERAGE_ENABLED` set to `true`. You can then view the code coverage in the `coverage` folder, or you can use [this VSCode extension](https://marketplace.visualstudio.com/items?itemName=ryanluker.vscode-coverage-gutters) to visualize the coverage directly in VSCode. + +#### E2E tests + +⚠️ You have to run `pnpm cypress:install` to install cypress before running the tests for the first time and to update cypress. + +E2E tests can be started via one of the following commands: + +- `pnpm test:e2e:ui`: Start n8n and run e2e tests interactively using built UI code. Does not react to code changes (i.e. runs `pnpm start` and `cypress open`) +- `pnpm test:e2e:dev`: Start n8n in development mode and run e2e tests interactively. Reacts to code changes (i.e. runs `pnpm dev` and `cypress open`) +- `pnpm test:e2e:all`: Start n8n and run e2e tests headless (i.e. runs `pnpm start` and `cypress run --headless`) + +⚠️ Remember to stop your dev server before. Otherwise port binding will fail. + +## Releasing + +To start a release, trigger [this workflow](https://github.com/n8n-io/n8n/actions/workflows/release-create-pr.yml) with the SemVer release type, and select a branch to cut this release from. This workflow will then: + +1. Bump versions of packages that have changed or have dependencies that have changed +2. Update the Changelog +3. Create a new branch called `release/${VERSION}`, and +4. Create a new pull-request to track any further changes that need to be included in this release + +Once ready to release, simply merge the pull-request. +This triggers [another workflow](https://github.com/n8n-io/n8n/actions/workflows/release-publish.yml), that will: + +1. Build and publish the packages that have a new version in this release +2. Create a new tag, and GitHub release from squashed release commit +3. Merge the squashed release commit back into `master` + +## Create custom nodes + +Learn about [building nodes](https://docs.n8n.io/integrations/creating-nodes/) to create custom nodes for n8n. You can create community nodes and make them available using [npm](https://www.npmjs.com/). + +## Extend documentation + +The repository for the n8n documentation on [docs.n8n.io](https://docs.n8n.io) can be found [here](https://github.com/n8n-io/n8n-docs). + +## Contribute workflow templates + +You can submit your workflows to n8n's template library. + +n8n is working on a creator program, and developing a marketplace of templates. This is an ongoing project, and details are likely to change. + +Refer to [n8n Creator hub](https://www.notion.so/n8n/n8n-Creator-hub-7bd2cbe0fce0449198ecb23ff4a2f76f) for information on how to submit templates and become a creator. + +## Contributor License Agreement + +That we do not have any potential problems later it is sadly necessary to sign a [Contributor License Agreement](CONTRIBUTOR_LICENSE_AGREEMENT.md). That can be done literally with the push of a button. + +We used the most simple one that exists. It is from [Indie Open Source](https://indieopensource.com/forms/cla) which uses plain English and is literally only a few lines long. + +Once a pull request is opened, an automated bot will promptly leave a comment requesting the agreement to be signed. The pull request can only be merged once the signature is obtained. diff --git a/n8n-n8n-1.109.2/CONTRIBUTOR_LICENSE_AGREEMENT 2.md b/n8n-n8n-1.109.2/CONTRIBUTOR_LICENSE_AGREEMENT 2.md new file mode 100755 index 00000000..b4a3c7e8 --- /dev/null +++ b/n8n-n8n-1.109.2/CONTRIBUTOR_LICENSE_AGREEMENT 2.md @@ -0,0 +1,5 @@ +# n8n Contributor License Agreement + +I give n8n permission to license my contributions on any terms they like. I am giving them this license in order to make it possible for them to accept my contributions into their project. + +**_As far as the law allows, my contributions come as is, without any warranty or condition, and I will not be liable to anyone for any damages related to this software or this license, under any kind of legal claim._** diff --git a/n8n-n8n-1.109.2/LICENSE 2.md b/n8n-n8n-1.109.2/LICENSE 2.md new file mode 100755 index 00000000..f85f59ba --- /dev/null +++ b/n8n-n8n-1.109.2/LICENSE 2.md @@ -0,0 +1,88 @@ +# License + +Portions of this software are licensed as follows: + +- Content of branches other than the main branch (i.e. "master") are not licensed. +- Source code files that contain ".ee." in their filename or ".ee" in their dirname are NOT licensed under + the Sustainable Use License. + To use source code files that contain ".ee." in their filename or ".ee" in their dirname you must hold a + valid n8n Enterprise License specifically allowing you access to such source code files and as defined + in "LICENSE_EE.md". +- All third party components incorporated into the n8n Software are licensed under the original license + provided by the owner of the applicable component. +- Content outside of the above mentioned files or restrictions is available under the "Sustainable Use + License" as defined below. + +## Sustainable Use License + +Version 1.0 + +### Acceptance + +By using the software, you agree to all of the terms and conditions below. + +### Copyright License + +The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license +to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject +to the limitations below. + +### Limitations + +You may use or modify the software only for your own internal business purposes or for non-commercial or +personal use. You may distribute the software or provide it to others only if you do so free of charge for +non-commercial purposes. You may not alter, remove, or obscure any licensing, copyright, or other notices of +the licensor in the software. Any use of the licensor’s trademarks is subject to applicable law. + +### Patents + +The licensor grants you a license, under any patent claims the licensor can license, or becomes able to +license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case +subject to the limitations and conditions in this license. This license does not cover any patent claims that +you cause to be infringed by modifications or additions to the software. If you or your company make any +written claim that the software infringes or contributes to infringement of any patent, your patent license +for the software granted under these terms ends immediately. If your company makes such a claim, your patent +license ends immediately for work on behalf of your company. + +### Notices + +You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these +terms. If you modify the software, you must include in any modified copies of the software a prominent notice +stating that you have modified the software. + +### No Other Rights + +These terms do not imply any licenses other than those expressly granted in these terms. + +### Termination + +If you use the software in violation of these terms, such use is not licensed, and your license will +automatically terminate. If the licensor provides you with a notice of your violation, and you cease all +violation of this license no later than 30 days after you receive that notice, your license will be reinstated +retroactively. However, if you violate these terms after such reinstatement, any additional violation of these +terms will cause your license to terminate automatically and permanently. + +### No Liability + +As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will +not be liable to you for any damages arising out of these terms or the use or nature of the software, under +any kind of legal claim. + +### Definitions + +The “licensor” is the entity offering these terms. + +The “software” is the software the licensor makes available under these terms, including any portion of it. + +“You” refers to the individual or entity agreeing to these terms. + +“Your company” is any legal entity, sole proprietorship, or other kind of organization that you work for, plus +all organizations that have control over, are under the control of, or are under common control with that +organization. Control means ownership of substantially all the assets of an entity, or the power to direct its +management and policies by vote, contract, or otherwise. Control can be direct or indirect. + +“Your license” is the license granted to you for the software under these terms. + +“Use” means anything you do with the software requiring your license. + +“Trademark” means trademarks, service marks, and similar rights. diff --git a/n8n-n8n-1.109.2/LICENSE_EE 2.md b/n8n-n8n-1.109.2/LICENSE_EE 2.md new file mode 100755 index 00000000..b47966a6 --- /dev/null +++ b/n8n-n8n-1.109.2/LICENSE_EE 2.md @@ -0,0 +1,27 @@ +# The n8n Enterprise License (the “Enterprise License”) + +Copyright (c) 2022-present n8n GmbH. + +With regard to the n8n Software: + +This software and associated documentation files (the "Software") may only be used in production, if +you (and any entity that you represent) hold a valid n8n Enterprise license corresponding to your +usage. Subject to the foregoing sentence, you are free to modify this Software and publish patches +to the Software. You agree that n8n and/or its licensors (as applicable) retain all right, title and +interest in and to all such modifications and/or patches, and all such modifications and/or patches +may only be used, copied, modified, displayed, distributed, or otherwise exploited with a valid n8n +Enterprise license for the corresponding usage. Notwithstanding the foregoing, you may copy and +modify the Software for development and testing purposes, without requiring a subscription. You +agree that n8n and/or its licensors (as applicable) retain all right, title and interest in and to +all such modifications. You are not granted any other rights beyond what is expressly stated herein. +Subject to the foregoing, it is forbidden to copy, merge, publish, distribute, sublicense, and/or +sell the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +For all third party components incorporated into the n8n Software, those components are licensed +under the original license provided by the owner of the applicable component. diff --git a/n8n-n8n-1.109.2/README 2.md b/n8n-n8n-1.109.2/README 2.md new file mode 100755 index 00000000..8d01e943 --- /dev/null +++ b/n8n-n8n-1.109.2/README 2.md @@ -0,0 +1,72 @@ +![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png) + +# n8n - Secure Workflow Automation for Technical Teams + +n8n is a workflow automation platform that gives technical teams the flexibility of code with the speed of no-code. With 400+ integrations, native AI capabilities, and a fair-code license, n8n lets you build powerful automations while maintaining full control over your data and deployments. + +![n8n.io - Screenshot](https://raw.githubusercontent.com/n8n-io/n8n/master/assets/n8n-screenshot-readme.png) + +## Key Capabilities + +- **Code When You Need It**: Write JavaScript/Python, add npm packages, or use the visual interface +- **AI-Native Platform**: Build AI agent workflows based on LangChain with your own data and models +- **Full Control**: Self-host with our fair-code license or use our [cloud offering](https://app.n8n.cloud/login) +- **Enterprise-Ready**: Advanced permissions, SSO, and air-gapped deployments +- **Active Community**: 400+ integrations and 900+ ready-to-use [templates](https://n8n.io/workflows) + +## Quick Start + +Try n8n instantly with [npx](https://docs.n8n.io/hosting/installation/npm/) (requires [Node.js](https://nodejs.org/en/)): + +``` +npx n8n +``` + +Or deploy with [Docker](https://docs.n8n.io/hosting/installation/docker/): + +``` +docker volume create n8n_data +docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n +``` + +Access the editor at http://localhost:5678 + +## Resources + +- 📚 [Documentation](https://docs.n8n.io) +- 🔧 [400+ Integrations](https://n8n.io/integrations) +- 💡 [Example Workflows](https://n8n.io/workflows) +- 🤖 [AI & LangChain Guide](https://docs.n8n.io/langchain/) +- 👥 [Community Forum](https://community.n8n.io) +- 📖 [Community Tutorials](https://community.n8n.io/c/tutorials/28) + +## Support + +Need help? Our community forum is the place to get support and connect with other users: +[community.n8n.io](https://community.n8n.io) + +## License + +n8n is [fair-code](https://faircode.io) distributed under the [Sustainable Use License](https://github.com/n8n-io/n8n/blob/master/LICENSE.md) and [n8n Enterprise License](https://github.com/n8n-io/n8n/blob/master/LICENSE_EE.md). + +- **Source Available**: Always visible source code +- **Self-Hostable**: Deploy anywhere +- **Extensible**: Add your own nodes and functionality + +[Enterprise licenses](mailto:license@n8n.io) available for additional features and support. + +Additional information about the license model can be found in the [docs](https://docs.n8n.io/reference/license/). + +## Contributing + +Found a bug 🐛 or have a feature idea ✨? Check our [Contributing Guide](https://github.com/n8n-io/n8n/blob/master/CONTRIBUTING.md) to get started. + +## Join the Team + +Want to shape the future of automation? Check out our [job posts](https://n8n.io/careers) and join our team! + +## What does n8n mean? + +**Short answer:** It means "nodemation" and is pronounced as n-eight-n. + +**Long answer:** "I get that question quite often (more often than I expected) so I decided it is probably best to answer it here. While looking for a good name for the project with a free domain I realized very quickly that all the good ones I could think of were already taken. So, in the end, I chose nodemation. 'node-' in the sense that it uses a Node-View and that it uses Node.js and '-mation' for 'automation' which is what the project is supposed to help with. However, I did not like how long the name was and I could not imagine writing something that long every time in the CLI. That is when I then ended up on 'n8n'." - **Jan Oberhauser, Founder and CEO, n8n.io** diff --git a/n8n-n8n-1.109.2/SECURITY 2.md b/n8n-n8n-1.109.2/SECURITY 2.md new file mode 100755 index 00000000..7c60b728 --- /dev/null +++ b/n8n-n8n-1.109.2/SECURITY 2.md @@ -0,0 +1,4 @@ +## Reporting a Vulnerability + +Please report (suspected) security vulnerabilities to **[security@n8n.io](mailto:security@n8n.io)**. You will receive a response from +us within 48 hours. If the issue is confirmed, we will release a patch as soon as possible depending on complexity but historically within a few days. diff --git a/n8n-n8n-1.109.2/assets/n8n-logo 2.png b/n8n-n8n-1.109.2/assets/n8n-logo 2.png new file mode 100755 index 00000000..2bb6b2d7 Binary files /dev/null and b/n8n-n8n-1.109.2/assets/n8n-logo 2.png differ diff --git a/n8n-n8n-1.109.2/assets/n8n-screenshot 2.png b/n8n-n8n-1.109.2/assets/n8n-screenshot 2.png new file mode 100755 index 00000000..fa696d95 Binary files /dev/null and b/n8n-n8n-1.109.2/assets/n8n-screenshot 2.png differ diff --git a/n8n-n8n-1.109.2/assets/n8n-screenshot-readme 2.png b/n8n-n8n-1.109.2/assets/n8n-screenshot-readme 2.png new file mode 100755 index 00000000..d6b5faef Binary files /dev/null and b/n8n-n8n-1.109.2/assets/n8n-screenshot-readme 2.png differ diff --git a/n8n-n8n-1.109.2/biome 2.jsonc b/n8n-n8n-1.109.2/biome 2.jsonc new file mode 100755 index 00000000..1eb434dc --- /dev/null +++ b/n8n-n8n-1.109.2/biome 2.jsonc @@ -0,0 +1,54 @@ +{ + "$schema": "./node_modules/@biomejs/biome/configuration_schema.json", + "vcs": { + "clientKind": "git", + "enabled": true, + "useIgnoreFile": true + }, + "files": { + "ignore": [ + "**/.turbo", + "**/components.d.ts", + "**/coverage", + "**/dist", + "**/package.json", + "**/pnpm-lock.yaml", + "**/CHANGELOG.md", + "**/cl100k_base.json", + "**/o200k_base.json" + ] + }, + "formatter": { + "enabled": true, + "formatWithErrors": false, + "indentStyle": "tab", + "indentWidth": 2, + "lineEnding": "lf", + "lineWidth": 100, + "attributePosition": "auto", + "ignore": [ + // Handled by prettier + "**/*.vue" + ] + }, + "organizeImports": { "enabled": false }, + "linter": { + "enabled": false + }, + "javascript": { + "parser": { + "unsafeParameterDecoratorsEnabled": true + }, + "formatter": { + "jsxQuoteStyle": "double", + "quoteProperties": "asNeeded", + "trailingCommas": "all", + "semicolons": "always", + "arrowParentheses": "always", + "bracketSpacing": true, + "bracketSameLine": false, + "quoteStyle": "single", + "attributePosition": "auto" + } + } +} diff --git a/n8n-n8n-1.109.2/codecov 2.yml b/n8n-n8n-1.109.2/codecov 2.yml new file mode 100755 index 00000000..8366617d --- /dev/null +++ b/n8n-n8n-1.109.2/codecov 2.yml @@ -0,0 +1,69 @@ +codecov: + max_report_age: off + require_ci_to_pass: true + +coverage: + status: + patch: false + project: + default: + threshold: 0.5 + +github_checks: + annotations: false + +flags: + tests: + paths: + - '**' + carryforward: true + +component_management: + default_rules: + statuses: + - type: project + target: auto + branches: + - '!master' + individual_components: + - component_id: backend_packages + name: Backend + paths: + - packages/@n8n/ai-workflow-builder.ee/** + - packages/@n8n/api-types/** + - packages/@n8n/config/** + - packages/@n8n/client-oauth2/** + - packages/@n8n/decorators/** + - packages/@n8n/constants/** + - packages/@n8n/backend-common/** + - packages/@n8n/backend-test-utils/** + - packages/@n8n/errors/** + - packages/@n8n/db/** + - packages/@n8n/di/** + - packages/@n8n/imap/** + - packages/@n8n/permissions/** + - packages/@n8n/task-runner/** + - packages/workflow/** + - packages/core/** + - packages/cli/** + - component_id: frontend_packages + name: Frontend + paths: + - packages/@n8n/codemirror-lang/** + - packages/frontend/** + - component_id: nodes_packages + name: Nodes + paths: + - packages/node-dev/** + - packages/nodes-base/** + - packages/@n8n/json-schema-to-zod/** + - packages/@n8n/nodes-langchain/** + statuses: + - type: project + target: auto + threshold: 0% # Enforce: Coverage must not decrease + +ignore: + - (?s:.*/[^\/]*\.spec\.ts.*)\Z + - (?s:.*/[^\/]*\.test\.ts.*)\Z + - (?s:.*/[^\/]*e2e[^\/]*\.ts.*)\Z diff --git a/n8n-n8n-1.109.2/cypress/.gitignore 2 b/n8n-n8n-1.109.2/cypress/.gitignore 2 new file mode 100755 index 00000000..a1d14dde --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/.gitignore 2 @@ -0,0 +1,3 @@ +videos/ +screenshots/ +downloads/ diff --git a/n8n-n8n-1.109.2/cypress/README 2.md b/n8n-n8n-1.109.2/cypress/README 2.md new file mode 100755 index 00000000..26fc23ba --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/README 2.md @@ -0,0 +1,32 @@ +## Debugging Flaky End-to-End Tests - Usage + +To debug flaky end-to-end (E2E) tests, use the following command: + +```bash +pnpm run debug:flaky:e2e -- +``` + +**Parameters:** + +* ``: (Optional) A string to filter tests by their `it()` or `describe()` block titles, or by tags if using the `@cypress/grep` plugin. If omitted, all tests will be run. +* ``: (Optional) The number of times to run the filtered tests. Defaults to 5 if not provided. + +**Examples:** + +1. **Run all tests tagged with `CAT-726` ten times:** + + ```bash + pnpm run debug:flaky:e2e CAT-726 10 + ``` + +2. **Run all tests containing "login" five times (default burn count):** + + ```bash + pnpm run debug:flaky:e2e login + ``` + +3. **Run all tests five times (default grep and burn count):** + + ```bash + pnpm run debug:flaky:e2e + ``` diff --git a/n8n-n8n-1.109.2/cypress/augmentation.d 2.ts b/n8n-n8n-1.109.2/cypress/augmentation.d 2.ts new file mode 100755 index 00000000..d3724f34 --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/augmentation.d 2.ts @@ -0,0 +1,4 @@ +declare module 'cypress-otp' { + // eslint-disable-next-line import-x/no-default-export + export default function generateOTPToken(secret: string): string; +} diff --git a/n8n-n8n-1.109.2/cypress/biome 2.jsonc b/n8n-n8n-1.109.2/cypress/biome 2.jsonc new file mode 100755 index 00000000..5a63363a --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/biome 2.jsonc @@ -0,0 +1,7 @@ +{ + "$schema": "../node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../biome.jsonc"], + "formatter": { + "ignore": ["fixtures/**"] + } +} diff --git a/n8n-n8n-1.109.2/cypress/constants 2.ts b/n8n-n8n-1.109.2/cypress/constants 2.ts new file mode 100755 index 00000000..94ebb442 --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/constants 2.ts @@ -0,0 +1,76 @@ +import { randFirstName, randLastName } from '@ngneat/falso'; + +export const BACKEND_BASE_URL = 'http://localhost:5678'; +export const N8N_AUTH_COOKIE = 'n8n-auth'; + +const DEFAULT_USER_PASSWORD = 'CypressTest123'; + +export const INSTANCE_OWNER = { + email: 'nathan@n8n.io', + password: DEFAULT_USER_PASSWORD, + firstName: randFirstName(), + lastName: randLastName(), +}; + +export const INSTANCE_ADMIN = { + email: 'admin@n8n.io', + password: DEFAULT_USER_PASSWORD, + firstName: randFirstName(), + lastName: randLastName(), +}; + +export const INSTANCE_MEMBERS = [ + { + email: 'rebecca@n8n.io', + password: DEFAULT_USER_PASSWORD, + firstName: randFirstName(), + lastName: randLastName(), + }, + { + email: 'mustafa@n8n.io', + password: DEFAULT_USER_PASSWORD, + firstName: randFirstName(), + lastName: randLastName(), + }, +]; + +export const MANUAL_TRIGGER_NODE_NAME = 'Manual Trigger'; +export const MANUAL_TRIGGER_NODE_DISPLAY_NAME = 'When clicking ‘Execute workflow’'; +export const MANUAL_CHAT_TRIGGER_NODE_NAME = 'Chat Trigger'; +export const CHAT_TRIGGER_NODE_DISPLAY_NAME = 'When chat message received'; +export const SCHEDULE_TRIGGER_NODE_NAME = 'Schedule Trigger'; +export const CODE_NODE_NAME = 'Code'; +export const SET_NODE_NAME = 'Set'; +export const EDIT_FIELDS_SET_NODE_NAME = 'Edit Fields'; +export const LOOP_OVER_ITEMS_NODE_NAME = 'Loop Over Items'; +export const IF_NODE_NAME = 'If'; +export const MERGE_NODE_NAME = 'Merge'; +export const SWITCH_NODE_NAME = 'Switch'; +export const GMAIL_NODE_NAME = 'Gmail'; +export const TRELLO_NODE_NAME = 'Trello'; +export const NOTION_NODE_NAME = 'Notion'; +export const PIPEDRIVE_NODE_NAME = 'Pipedrive'; +export const HTTP_REQUEST_NODE_NAME = 'HTTP Request'; +export const AGENT_NODE_NAME = 'AI Agent'; +export const BASIC_LLM_CHAIN_NODE_NAME = 'Basic LLM Chain'; +export const AI_MEMORY_WINDOW_BUFFER_MEMORY_NODE_NAME = 'Simple Memory'; +export const AI_TOOL_CALCULATOR_NODE_NAME = 'Calculator'; +export const AI_TOOL_CODE_NODE_NAME = 'Code Tool'; +export const AI_TOOL_WIKIPEDIA_NODE_NAME = 'Wikipedia'; +export const AI_TOOL_HTTP_NODE_NAME = 'HTTP Request Tool'; +export const AI_LANGUAGE_MODEL_OPENAI_CHAT_MODEL_NODE_NAME = 'OpenAI Chat Model'; +export const AI_MEMORY_POSTGRES_NODE_NAME = 'Postgres Chat Memory'; +export const AI_OUTPUT_PARSER_AUTO_FIXING_NODE_NAME = 'Auto-fixing Output Parser'; +export const WEBHOOK_NODE_NAME = 'Webhook'; +export const EXECUTE_WORKFLOW_NODE_NAME = 'Execute Workflow'; + +export const META_KEY = Cypress.platform === 'darwin' ? 'meta' : 'ctrl'; + +export const NEW_GOOGLE_ACCOUNT_NAME = 'Gmail account'; +export const NEW_TRELLO_ACCOUNT_NAME = 'Trello account'; +export const NEW_NOTION_ACCOUNT_NAME = 'Notion account'; +export const NEW_QUERY_AUTH_ACCOUNT_NAME = 'Query Auth account'; + +export const ROUTES = { + NEW_WORKFLOW_PAGE: '/workflow/new', +}; diff --git a/n8n-n8n-1.109.2/cypress/cypress.config 2.js b/n8n-n8n-1.109.2/cypress/cypress.config 2.js new file mode 100755 index 00000000..24e2f319 --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/cypress.config 2.js @@ -0,0 +1,38 @@ +const { defineConfig } = require('cypress'); + +const BASE_URL = 'http://localhost:5678'; + +module.exports = defineConfig({ + projectId: '5hbsdn', + retries: { + openMode: 0, + runMode: 2, + }, + defaultCommandTimeout: 10000, + requestTimeout: 12000, + numTestsKeptInMemory: 2, + experimentalMemoryManagement: true, + e2e: { + baseUrl: BASE_URL, + viewportWidth: 1536, + viewportHeight: 960, + video: true, + screenshotOnRunFailure: true, + experimentalInteractiveRunEvents: true, + experimentalSessionAndOrigin: true, + specPattern: 'e2e/**/*.ts', + supportFile: 'support/e2e.ts', + fixturesFolder: 'fixtures', + downloadsFolder: 'downloads', + screenshotsFolder: 'screenshots', + videosFolder: 'videos', + setupNodeEvents(on, config) { + require('@cypress/grep/src/plugin')(config); + return config; + }, + }, + reporter: 'mocha-junit-reporter', + reporterOptions: { + mochaFile: 'test-results-[hash].xml', + }, +}); diff --git a/n8n-n8n-1.109.2/cypress/eslint.config 2.mjs b/n8n-n8n-1.109.2/cypress/eslint.config 2.mjs new file mode 100755 index 00000000..4b13be25 --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/eslint.config 2.mjs @@ -0,0 +1,39 @@ +import { defineConfig, globalIgnores } from 'eslint/config'; +import { baseConfig } from '@n8n/eslint-config/base'; +import cypressPlugin from 'eslint-plugin-cypress/flat'; + +export default defineConfig( + globalIgnores(['scripts/**/*.js']), + baseConfig, + cypressPlugin.configs.recommended, + { + rules: { + // TODO: Remove this + 'no-useless-escape': 'warn', + 'import-x/order': 'warn', + 'import-x/no-extraneous-dependencies': [ + 'error', + { + devDependencies: ['**/cypress/**'], + optionalDependencies: false, + }, + ], + '@typescript-eslint/naming-convention': 'warn', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + '@typescript-eslint/no-unsafe-call': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-unused-expressions': 'warn', + '@typescript-eslint/no-use-before-define': 'warn', + '@typescript-eslint/promise-function-async': 'warn', + '@typescript-eslint/prefer-nullish-coalescing': 'warn', + '@typescript-eslint/unbound-method': 'warn', + 'cypress/no-assigning-return-values': 'warn', + 'cypress/no-unnecessary-waiting': 'warn', + 'cypress/unsafe-to-chain-command': 'warn', + 'n8n-local-rules/no-uncaught-json-parse': 'warn', + }, + }, +); diff --git a/n8n-n8n-1.109.2/cypress/package 2.json b/n8n-n8n-1.109.2/cypress/package 2.json new file mode 100755 index 00000000..4dcf1ddc --- /dev/null +++ b/n8n-n8n-1.109.2/cypress/package 2.json @@ -0,0 +1,37 @@ +{ + "name": "n8n-cypress", + "private": true, + "scripts": { + "typecheck": "tsc --noEmit", + "cypress:install": "cypress install", + "test:e2e:ui": "scripts/run-e2e.js ui", + "test:e2e:dev": "scripts/run-e2e.js dev", + "test:e2e:all": "scripts/run-e2e.js all", + "test:flaky": "scripts/run-e2e.js debugFlaky", + "format": "biome format --write .", + "format:check": "biome ci .", + "lint": "eslint . --quiet", + "lint:fix": "eslint . --fix", + "develop": "cd ..; pnpm dev:e2e:server", + "start": "cd ..; pnpm start" + }, + "devDependencies": { + "@cypress/grep": "^4.1.0", + "@n8n/api-types": "workspace:*", + "@types/lodash": "catalog:", + "eslint-plugin-cypress": "^4.3.0", + "mocha-junit-reporter": "^2.2.1", + "n8n-workflow": "workspace:*" + }, + "dependencies": { + "@ngneat/falso": "^7.3.0", + "@sinonjs/fake-timers": "^13.0.2", + "cypress": "^14.4.0", + "cypress-otp": "^1.0.3", + "cypress-real-events": "^1.14.0", + "flatted": "catalog:", + "lodash": "catalog:", + "nanoid": "catalog:", + "start-server-and-test": "^2.0.10" + } +} diff --git a/n8n-n8n-1.109.2/n8n-20250908-082052.log b/n8n-n8n-1.109.2/n8n-20250908-082052.log new file mode 100644 index 00000000..c0b873b5 --- /dev/null +++ b/n8n-n8n-1.109.2/n8n-20250908-082052.log @@ -0,0 +1,28 @@ + +> n8n-monorepo@1.109.2 start /Users/xiaoqi/Documents/Dev/Project/2025-09-08_n8nDEMO演示/n8n-n8n-1.109.2 +> run-script-os + + +> n8n-monorepo@1.109.2 start:default +> cd packages/cli/bin && ./n8n + +Permissions 0644 for n8n settings file /Users/xiaoqi/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false. +Initializing n8n process +n8n ready on ::, port 5678 +n8n Task Broker ready on 127.0.0.1, port 5679 +Initializing AuthRolesService... +AuthRolesService initialized successfully. +[license SDK] Skipping renewal on init: license cert is not initialized +Registered runner "JS Task Runner" (KVrQI2zeKG9cyCrchj-ED) +Version: 1.109.2 +Locale: zh-CN + +Editor is now accessible via: +http://localhost:5678 +(node:10762) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead. +(Use `node --trace-deprecation ...` to show where the warning was created) +Received SIGINT. Shutting down... +[Task Runner]: Received SIGINT signal, shutting down... +[Task Runner]: Task runner stopped + +Stopping n8n... diff --git a/n8n-n8n-1.109.2/n8n-20250908-093104.log b/n8n-n8n-1.109.2/n8n-20250908-093104.log new file mode 100644 index 00000000..11307038 --- /dev/null +++ b/n8n-n8n-1.109.2/n8n-20250908-093104.log @@ -0,0 +1,28 @@ + +> n8n-monorepo@1.109.2 start /Users/xiaoqi/Documents/Dev/Project/2025-09-08_n8nDEMO演示/n8n-n8n-1.109.2 +> run-script-os + + +> n8n-monorepo@1.109.2 start:default +> cd packages/cli/bin && ./n8n + +Permissions 0644 for n8n settings file /Users/xiaoqi/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false. +Initializing n8n process +n8n ready on ::, port 5678 +n8n Task Broker ready on 127.0.0.1, port 5679 +Initializing AuthRolesService... +AuthRolesService initialized successfully. +[license SDK] Skipping renewal on init: license cert is not initialized +Registered runner "JS Task Runner" (0dM4jDG2u7oqKGfrgBCiV) +Version: 1.109.2 +Locale: zh-CN + +Editor is now accessible via: +http://localhost:5678 +(node:30364) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead. +(Use `node --trace-deprecation ...` to show where the warning was created) +Received SIGINT. Shutting down... +[Task Runner]: Received SIGINT signal, shutting down... +[Task Runner]: Task runner stopped + +Stopping n8n... diff --git a/n8n-n8n-1.109.2/n8n-20250908-101702.log b/n8n-n8n-1.109.2/n8n-20250908-101702.log new file mode 100644 index 00000000..276a1f94 --- /dev/null +++ b/n8n-n8n-1.109.2/n8n-20250908-101702.log @@ -0,0 +1,23 @@ + +> n8n-monorepo@1.109.2 start /Users/xiaoqi/Documents/Dev/Project/2025-09-08_n8nDEMO演示/n8n-n8n-1.109.2 +> run-script-os + + +> n8n-monorepo@1.109.2 start:default +> cd packages/cli/bin && ./n8n + +Permissions 0644 for n8n settings file /Users/xiaoqi/.n8n/config are too wide. This is ignored for now, but in the future n8n will attempt to change the permissions automatically. To automatically enforce correct permissions now set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true (recommended), or turn this check off set N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=false. +Initializing n8n process +n8n ready on ::, port 5678 +n8n Task Broker ready on 127.0.0.1, port 5679 +Initializing AuthRolesService... +AuthRolesService initialized successfully. +[license SDK] Skipping renewal on init: license cert is not initialized +Registered runner "JS Task Runner" (DcMjBKt67OYRSB7Yae1vX) +Version: 1.109.2 +Locale: zh-CN + +Editor is now accessible via: +http://localhost:5678 +(node:31940) [DEP0060] DeprecationWarning: The `util._extend` API is deprecated. Please use Object.assign() instead. +(Use `node --trace-deprecation ...` to show where the warning was created) diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/README 2.md b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/README 2.md new file mode 100755 index 00000000..f1c72922 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/README 2.md @@ -0,0 +1,205 @@ +# AI Workflow Builder Evaluations + +This module provides a evaluation framework for testing the AI Workflow Builder's ability to generate correct n8n workflows from natural language prompts. + +## Architecture Overview + +The evaluation system is split into two distinct modes: +1. **CLI Evaluation** - Runs predefined test cases locally with progress tracking +2. **Langsmith Evaluation** - Integrates with Langsmith for dataset-based evaluation and experiment tracking + +### Directory Structure + +``` +evaluations/ +├── cli/ # CLI evaluation implementation +│ ├── runner.ts # Main CLI evaluation orchestrator +│ └── display.ts # Console output and progress tracking +├── langsmith/ # Langsmith integration +│ ├── evaluator.ts # Langsmith-compatible evaluator function +│ └── runner.ts # Langsmith evaluation orchestrator +├── core/ # Shared evaluation logic +│ ├── environment.ts # Test environment setup and configuration +│ └── test-runner.ts # Core test execution logic +├── types/ # Type definitions +│ ├── evaluation.ts # Evaluation result schemas +│ ├── test-result.ts # Test result interfaces +│ └── langsmith.ts # Langsmith-specific types and guards +├── chains/ # LLM evaluation chains +│ ├── test-case-generator.ts # Dynamic test case generation +│ └── workflow-evaluator.ts # LLM-based workflow evaluation +├── utils/ # Utility functions +│ ├── evaluation-calculator.ts # Metrics calculation +│ ├── evaluation-helpers.ts # Common helper functions +│ ├── evaluation-reporter.ts # Report generation +└── index.ts # Main entry point +``` + +## Implementation Details +### Core Components + +#### 1. Test Runner (`core/test-runner.ts`) + +The core test runner handles individual test execution: +- Generates workflows using the WorkflowBuilderAgent +- Validates generated workflows using type guards +- Evaluates workflows against test criteria +- Returns structured test results with error handling + +#### 2. Environment Setup (`core/environment.ts`) + +Centralizes environment configuration: +- LLM initialization with API key validation +- Langsmith client setup +- Node types loading +- Concurrency and test generation settings + +#### 3. Langsmith Integration + +The Langsmith integration provides two key components: + +**Evaluator (`langsmith/evaluator.ts`):** +- Converts Langsmith Run objects to evaluation inputs +- Validates all data using type guards before processing +- Safely extracts usage metadata without type coercion +- Returns structured evaluation results + +**Runner (`langsmith/runner.ts`):** +- Creates workflow generation functions compatible with Langsmith +- Validates message content before processing +- Extracts usage metrics safely from message metadata +- Handles dataset verification and error reporting + +#### 4. CLI Evaluation + +The CLI evaluation provides local testing capabilities: + +**Runner (`cli/runner.ts`):** +- Orchestrates parallel test execution with concurrency control +- Manages test case generation when enabled +- Generates detailed reports and saves results + +**Display (`cli/display.ts`):** +- Progress bar management for real-time feedback +- Console output formatting +- Error display and reporting + +### Evaluation Metrics + +The system evaluates workflows across five categories: + +1. **Functionality** (30% weight) + - Does the workflow achieve the intended goal? + - Are the right nodes selected? + +2. **Connections** (25% weight) + - Are nodes properly connected? + - Is data flow logical? + +3. **Expressions** (20% weight) + - Are n8n expressions syntactically correct? + - Do they reference valid data paths? + +4. **Node Configuration** (15% weight) + - Are node parameters properly set? + - Are required fields populated? + +5. **Structural Similarity** (10% weight, optional) + - How closely does the structure match a reference workflow? + - Only evaluated when reference workflow is provided + +### Violation Severity Levels + +Violations are categorized by severity: +- **Critical** (-40 to -50 points): Workflow-breaking issues +- **Major** (-15 to -25 points): Significant problems affecting functionality +- **Minor** (-5 to -15 points): Non-critical issues or inefficiencies + +## Running Evaluations + +### CLI Evaluation + +```bash +# Run with default settings +pnpm eval + +# With additional generated test cases +GENERATE_TEST_CASES=true pnpm eval + +# With custom concurrency +EVALUATION_CONCURRENCY=10 pnpm eval +``` + +### Langsmith Evaluation + +```bash +# Set required environment variables +export LANGSMITH_API_KEY=your_api_key +# Optionally specify dataset +export LANGSMITH_DATASET_NAME=your_dataset_name + +# Run evaluation +pnpm eval:langsmith +``` + +## Configuration + +### Required Files + +#### nodes.json +**IMPORTANT**: The evaluation framework requires a `nodes.json` file in the evaluations root directory (`evaluations/nodes.json`). + +This file contains all n8n node type definitions and is used by the AI Workflow Builder agent to: +- Know what nodes are available in n8n +- Understand node parameters and their schemas +- Generate valid workflows with proper node configurations + +**Why is this required?** +The AI Workflow Builder agent needs access to node definitions to generate workflows. In a normal n8n runtime, these definitions are loaded automatically. However, since the evaluation framework instantiates the agent without a running n8n instance, we must provide the node definitions manually via `nodes.json`. + +**How to generate nodes.json:** +1. Run your n8n instance +2. Download the node definitions from locally running n8n instance(http://localhost:5678/types/nodes.json) +3. Save the node definitions to `evaluations/nodes.json` + +The evaluation will fail with a clear error message if `nodes.json` is missing. + +### Environment Variables + +- `N8N_AI_ANTHROPIC_KEY` - Required for LLM access +- `LANGSMITH_API_KEY` - Required for Langsmith evaluation +- `USE_LANGSMITH_EVAL` - Set to "true" to use Langsmith mode +- `LANGSMITH_DATASET_NAME` - Override default dataset name +- `EVALUATION_CONCURRENCY` - Number of parallel test executions (default: 5) +- `GENERATE_TEST_CASES` - Set to "true" to generate additional test cases +- `LLM_MODEL` - Model identifier for metadata tracking + +## Output + +### CLI Evaluation Output + +- **Console Display**: Real-time progress, test results, and summary statistics +- **Markdown Report**: `results/evaluation-report-[timestamp].md` +- **JSON Results**: `results/evaluation-results-[timestamp].json` + +### Langsmith Evaluation Output + +- Results are stored in Langsmith dashboard +- Experiment name format: `workflow-builder-evaluation-[date]` +- Includes detailed metrics for each evaluation category + +## Adding New Test Cases + +Test cases are defined in `chains/test-case-generator.ts`. Each test case requires: +- `id`: Unique identifier +- `name`: Descriptive name +- `prompt`: Natural language description of the workflow to generate +- `referenceWorkflow` (optional): Expected workflow structure for comparison + +## Extending the Framework + +To add new evaluation metrics: +1. Update the `EvaluationResult` schema in `types/evaluation.ts` +2. Modify the evaluation logic in `chains/workflow-evaluator.ts` +3. Update the evaluator in `langsmith/evaluator.ts` to include new metrics +4. Adjust weight calculations in `utils/evaluation-calculator.ts` diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/index 2.ts new file mode 100755 index 00000000..e198dae8 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/index 2.ts @@ -0,0 +1,27 @@ +import { runCliEvaluation } from './cli/runner.js'; +import { runLangsmithEvaluation } from './langsmith/runner.js'; + +// Re-export for external use if needed +export { runCliEvaluation } from './cli/runner.js'; +export { runLangsmithEvaluation } from './langsmith/runner.js'; +export { runSingleTest } from './core/test-runner.js'; +export { setupTestEnvironment, createAgent } from './core/environment.js'; + +/** + * Main entry point for evaluation + * Determines which evaluation mode to run based on environment variables + */ +async function main(): Promise { + const useLangsmith = process.env.USE_LANGSMITH_EVAL === 'true'; + + if (useLangsmith) { + await runLangsmithEvaluation(); + } else { + await runCliEvaluation(); + } +} + +// Run if called directly +if (require.main === module) { + main().catch(console.error); +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/load-nodes 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/load-nodes 2.ts new file mode 100755 index 00000000..b6a6691e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/evaluations/load-nodes 2.ts @@ -0,0 +1,106 @@ +import { readFileSync, existsSync } from 'fs'; +import { jsonParse, type INodeTypeDescription } from 'n8n-workflow'; +import { join } from 'path'; + +interface NodeWithVersion extends INodeTypeDescription { + version: number | number[]; + defaultVersion?: number; +} + +export function loadNodesFromFile(): INodeTypeDescription[] { + console.log('Loading nodes from nodes.json...'); + + const nodesPath = join(__dirname, 'nodes.json'); + + // Check if nodes.json exists + if (!existsSync(nodesPath)) { + const errorMessage = ` +ERROR: nodes.json file not found at ${nodesPath} + +The nodes.json file is required for evaluations to work properly. +Please ensure nodes.json is present in the evaluations root directory. + +To generate nodes.json: +1. Run the n8n instance +2. Export the node definitions to evaluations/nodes.json +3. This file contains all available n8n node type definitions needed for validation + +Without nodes.json, the evaluator cannot validate node types and parameters. +`; + console.error(errorMessage); + throw new Error('nodes.json file not found. See console output for details.'); + } + + const nodesData = readFileSync(nodesPath, 'utf-8'); + const allNodes = jsonParse(nodesData); + + console.log(`Total nodes loaded: ${allNodes.length}`); + + // Group nodes by name + const nodesByName = new Map(); + + for (const node of allNodes) { + const existing = nodesByName.get(node.name) ?? []; + existing.push(node); + nodesByName.set(node.name, existing); + } + + console.log(`Unique node types: ${nodesByName.size}`); + + // Extract latest version for each node + const latestNodes: INodeTypeDescription[] = []; + let multiVersionCount = 0; + + for (const [_nodeName, versions] of nodesByName.entries()) { + if (versions.length > 1) { + multiVersionCount++; + // Find the node with the default version + let selectedNode: NodeWithVersion | undefined; + + for (const node of versions) { + // Select the node that matches the default version + if (node.defaultVersion !== undefined) { + if (Array.isArray(node.version)) { + // For array versions, check if it includes the default version + if (node.version.includes(node.defaultVersion)) { + selectedNode = node; + } + } else if (node.version === node.defaultVersion) { + selectedNode = node; + } + } + } + + // If we found a matching node, use it; otherwise use the first one + if (selectedNode) { + latestNodes.push(selectedNode); + } else { + latestNodes.push(versions[0]); + } + } else { + // Single version node + latestNodes.push(versions[0]); + } + } + + console.log(`\nNodes with multiple versions: ${multiVersionCount}`); + console.log(`Final node count: ${latestNodes.length}`); + + // Filter out hidden nodes + const visibleNodes = latestNodes.filter((node) => !node.hidden); + console.log(`Visible nodes (after filtering hidden): ${visibleNodes.length}\n`); + + return visibleNodes; +} + +// Helper function to get specific node version for testing +export function getNodeVersion(nodes: INodeTypeDescription[], nodeName: string): string { + const node = nodes.find((n) => n.name === nodeName); + if (!node) return 'not found'; + + const version = (node as NodeWithVersion).version; + if (Array.isArray(version)) { + return `[${version.join(', ')}]`; + } + return version?.toString() || 'unknown'; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service 2.ts new file mode 100755 index 00000000..9bd596f9 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/ai-workflow-builder-agent.service 2.ts @@ -0,0 +1,184 @@ +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import { LangChainTracer } from '@langchain/core/tracers/tracer_langchain'; +import { MemorySaver } from '@langchain/langgraph'; +import { Logger } from '@n8n/backend-common'; +import { Service } from '@n8n/di'; +import { AiAssistantClient } from '@n8n_io/ai-assistant-sdk'; +import { Client } from 'langsmith'; +import { INodeTypes } from 'n8n-workflow'; +import type { IUser, INodeTypeDescription } from 'n8n-workflow'; + +import { LLMServiceError } from './errors'; +import { anthropicClaudeSonnet4, gpt41mini } from './llm-config'; +import { WorkflowBuilderAgent, type ChatPayload } from './workflow-builder-agent'; + +@Service() +export class AiWorkflowBuilderService { + private parsedNodeTypes: INodeTypeDescription[] = []; + + private llmSimpleTask: BaseChatModel | undefined; + + private llmComplexTask: BaseChatModel | undefined; + + private tracingClient: Client | undefined; + + private checkpointer = new MemorySaver(); + + private agent: WorkflowBuilderAgent | undefined; + + constructor( + private readonly nodeTypes: INodeTypes, + private readonly client?: AiAssistantClient, + private readonly logger?: Logger, + private readonly instanceUrl?: string, + ) { + this.parsedNodeTypes = this.getNodeTypes(); + } + + private async setupModels(user?: IUser) { + try { + if (this.llmSimpleTask && this.llmComplexTask) { + return; + } + + // If client is provided, use it for API proxy + if (this.client && user) { + const authHeaders = await this.client.generateApiProxyCredentials(user); + // Extract baseUrl from client configuration + const baseUrl = this.client.getApiProxyBaseUrl(); + + this.llmSimpleTask = await gpt41mini({ + baseUrl: baseUrl + '/openai', + // When using api-proxy the key will be populated automatically, we just need to pass a placeholder + apiKey: '-', + headers: { + Authorization: authHeaders.apiKey, + }, + }); + this.llmComplexTask = await anthropicClaudeSonnet4({ + baseUrl: baseUrl + '/anthropic', + apiKey: '-', + headers: { + Authorization: authHeaders.apiKey, + 'anthropic-beta': 'prompt-caching-2024-07-31', + }, + }); + + this.tracingClient = new Client({ + apiKey: '-', + apiUrl: baseUrl + '/langsmith', + autoBatchTracing: false, + traceBatchConcurrency: 1, + fetchOptions: { + headers: { + Authorization: authHeaders.apiKey, + }, + }, + }); + return; + } + // If base URL is not set, use environment variables + this.llmSimpleTask = await gpt41mini({ + apiKey: process.env.N8N_AI_OPENAI_API_KEY ?? '', + }); + + this.llmComplexTask = await anthropicClaudeSonnet4({ + apiKey: process.env.N8N_AI_ANTHROPIC_KEY ?? '', + headers: { + 'anthropic-beta': 'prompt-caching-2024-07-31', + }, + }); + } catch (error) { + const llmError = new LLMServiceError('Failed to connect to LLM Provider', { + cause: error, + tags: { + hasClient: !!this.client, + hasUser: !!user, + }, + }); + throw llmError; + } + } + + private getNodeTypes(): INodeTypeDescription[] { + // These types are ignored because they tend to cause issues when generating workflows + const ignoredTypes = [ + '@n8n/n8n-nodes-langchain.toolVectorStore', + '@n8n/n8n-nodes-langchain.documentGithubLoader', + '@n8n/n8n-nodes-langchain.code', + ]; + const nodeTypesKeys = Object.keys(this.nodeTypes.getKnownTypes()); + + const nodeTypes = nodeTypesKeys + .filter((nodeType) => !ignoredTypes.includes(nodeType)) + .map((nodeName) => { + try { + return { ...this.nodeTypes.getByNameAndVersion(nodeName).description, name: nodeName }; + } catch (error) { + this.logger?.error('Error getting node type', { + nodeName, + error: error instanceof Error ? error.message : 'Unknown error', + }); + return undefined; + } + }) + .filter( + (nodeType): nodeType is INodeTypeDescription => + nodeType !== undefined && nodeType.hidden !== true, + ) + .map((nodeType, _index, nodeTypes: INodeTypeDescription[]) => { + // If the node type is a tool, we need to find the corresponding non-tool node type + // and merge the two node types to get the full node type description. + const isTool = nodeType.name.endsWith('Tool'); + if (!isTool) return nodeType; + + const nonToolNode = nodeTypes.find((nt) => nt.name === nodeType.name.replace('Tool', '')); + if (!nonToolNode) return nodeType; + + return { + ...nonToolNode, + ...nodeType, + }; + }); + + return nodeTypes; + } + + private async getAgent(user?: IUser) { + if (!this.llmComplexTask || !this.llmSimpleTask) { + await this.setupModels(user); + } + + if (!this.llmComplexTask || !this.llmSimpleTask) { + throw new LLMServiceError('Failed to initialize LLM models'); + } + + this.agent ??= new WorkflowBuilderAgent({ + parsedNodeTypes: this.parsedNodeTypes, + // We use Sonnet both for simple and complex tasks + llmSimpleTask: this.llmComplexTask, + llmComplexTask: this.llmComplexTask, + logger: this.logger, + checkpointer: this.checkpointer, + tracer: this.tracingClient + ? new LangChainTracer({ client: this.tracingClient, projectName: 'n8n-workflow-builder' }) + : undefined, + instanceUrl: this.instanceUrl, + }); + + return this.agent; + } + + async *chat(payload: ChatPayload, user?: IUser, abortSignal?: AbortSignal) { + const agent = await this.getAgent(user); + + for await (const output of agent.chat(payload, user?.id?.toString(), abortSignal)) { + yield output; + } + } + + async getSessions(workflowId: string | undefined, user?: IUser) { + const agent = await this.getAgent(user); + return await agent.getSessions(workflowId, user?.id?.toString()); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/constants 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/constants 2.ts new file mode 100755 index 00000000..4b62aa75 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/constants 2.ts @@ -0,0 +1,3 @@ +export const MAX_AI_BUILDER_PROMPT_LENGTH = 1000; // characters + +export const DEFAULT_AUTO_COMPACT_THRESHOLD_TOKENS = 20_000; // Tokens threshold for auto-compacting the conversation diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/index 2.ts new file mode 100755 index 00000000..8f4ea633 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/index 2.ts @@ -0,0 +1,3 @@ +export * from './ai-workflow-builder-agent.service'; +export * from './types'; +export * from './workflow-state'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/llm-config 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/llm-config 2.ts new file mode 100755 index 00000000..88262cea --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/llm-config 2.ts @@ -0,0 +1,60 @@ +// Different LLMConfig type for this file - specific to LLM providers +interface LLMProviderConfig { + apiKey: string; + baseUrl?: string; + headers?: Record; +} + +export const o4mini = async (config: LLMProviderConfig) => { + const { ChatOpenAI } = await import('@langchain/openai'); + return new ChatOpenAI({ + model: 'o4-mini-2025-04-16', + apiKey: config.apiKey, + configuration: { + baseURL: config.baseUrl, + defaultHeaders: config.headers, + }, + }); +}; + +export const gpt41mini = async (config: LLMProviderConfig) => { + const { ChatOpenAI } = await import('@langchain/openai'); + return new ChatOpenAI({ + model: 'gpt-4.1-mini-2025-04-14', + apiKey: config.apiKey, + temperature: 0, + maxTokens: -1, + configuration: { + baseURL: config.baseUrl, + defaultHeaders: config.headers, + }, + }); +}; + +export const gpt41 = async (config: LLMProviderConfig) => { + const { ChatOpenAI } = await import('@langchain/openai'); + return new ChatOpenAI({ + model: 'gpt-4.1-2025-04-14', + apiKey: config.apiKey, + temperature: 0.3, + maxTokens: -1, + configuration: { + baseURL: config.baseUrl, + defaultHeaders: config.headers, + }, + }); +}; + +export const anthropicClaudeSonnet4 = async (config: LLMProviderConfig) => { + const { ChatAnthropic } = await import('@langchain/anthropic'); + return new ChatAnthropic({ + model: 'claude-sonnet-4-20250514', + apiKey: config.apiKey, + temperature: 0, + maxTokens: 16000, + anthropicApiUrl: config.baseUrl, + clientOptions: { + defaultHeaders: config.headers, + }, + }); +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent 2.ts new file mode 100755 index 00000000..c3511aec --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/workflow-builder-agent 2.ts @@ -0,0 +1,500 @@ +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import type { ToolMessage } from '@langchain/core/messages'; +import { AIMessage, HumanMessage, RemoveMessage } from '@langchain/core/messages'; +import type { RunnableConfig } from '@langchain/core/runnables'; +import type { LangChainTracer } from '@langchain/core/tracers/tracer_langchain'; +import { StateGraph, MemorySaver, END, GraphRecursionError } from '@langchain/langgraph'; +import type { Logger } from '@n8n/backend-common'; +import { + ApplicationError, + type INodeTypeDescription, + type IRunExecutionData, + type IWorkflowBase, + type NodeExecutionSchema, +} from 'n8n-workflow'; + +import { workflowNameChain } from '@/chains/workflow-name'; +import { DEFAULT_AUTO_COMPACT_THRESHOLD_TOKENS, MAX_AI_BUILDER_PROMPT_LENGTH } from '@/constants'; + +import { conversationCompactChain } from './chains/conversation-compact'; +import { LLMServiceError, ValidationError } from './errors'; +import { createAddNodeTool } from './tools/add-node.tool'; +import { createConnectNodesTool } from './tools/connect-nodes.tool'; +import { createNodeDetailsTool } from './tools/node-details.tool'; +import { createNodeSearchTool } from './tools/node-search.tool'; +import { mainAgentPrompt } from './tools/prompts/main-agent.prompt'; +import { createRemoveNodeTool } from './tools/remove-node.tool'; +import { createUpdateNodeParametersTool } from './tools/update-node-parameters.tool'; +import type { SimpleWorkflow } from './types/workflow'; +import { processOperations } from './utils/operations-processor'; +import { createStreamProcessor, formatMessages } from './utils/stream-processor'; +import { extractLastTokenUsage } from './utils/token-usage'; +import { executeToolsInParallel } from './utils/tool-executor'; +import { WorkflowState } from './workflow-state'; + +export interface WorkflowBuilderAgentConfig { + parsedNodeTypes: INodeTypeDescription[]; + llmSimpleTask: BaseChatModel; + llmComplexTask: BaseChatModel; + logger?: Logger; + checkpointer?: MemorySaver; + tracer?: LangChainTracer; + autoCompactThresholdTokens?: number; + instanceUrl?: string; +} + +export interface ChatPayload { + message: string; + workflowContext?: { + executionSchema?: NodeExecutionSchema[]; + currentWorkflow?: Partial; + executionData?: IRunExecutionData['resultData']; + }; +} + +export class WorkflowBuilderAgent { + private checkpointer: MemorySaver; + private parsedNodeTypes: INodeTypeDescription[]; + private llmSimpleTask: BaseChatModel; + private llmComplexTask: BaseChatModel; + private logger?: Logger; + private tracer?: LangChainTracer; + private autoCompactThresholdTokens: number; + private instanceUrl?: string; + + constructor(config: WorkflowBuilderAgentConfig) { + this.parsedNodeTypes = config.parsedNodeTypes; + this.llmSimpleTask = config.llmSimpleTask; + this.llmComplexTask = config.llmComplexTask; + this.logger = config.logger; + this.checkpointer = config.checkpointer ?? new MemorySaver(); + this.tracer = config.tracer; + this.autoCompactThresholdTokens = + config.autoCompactThresholdTokens ?? DEFAULT_AUTO_COMPACT_THRESHOLD_TOKENS; + this.instanceUrl = config.instanceUrl; + } + + private createWorkflow() { + const tools = [ + createNodeSearchTool(this.parsedNodeTypes), + createNodeDetailsTool(this.parsedNodeTypes), + createAddNodeTool(this.parsedNodeTypes), + createConnectNodesTool(this.parsedNodeTypes, this.logger), + createRemoveNodeTool(this.logger), + createUpdateNodeParametersTool( + this.parsedNodeTypes, + this.llmComplexTask, + this.logger, + this.instanceUrl, + ), + ]; + + // Create a map for quick tool lookup + const toolMap = new Map(tools.map((tool) => [tool.name, tool])); + + const callModel = async (state: typeof WorkflowState.State) => { + if (!this.llmSimpleTask) { + throw new LLMServiceError('LLM not setup'); + } + if (typeof this.llmSimpleTask.bindTools !== 'function') { + throw new LLMServiceError('LLM does not support tools', { + llmModel: this.llmSimpleTask._llmType(), + }); + } + + const prompt = await mainAgentPrompt.invoke({ + ...state, + executionData: state.workflowContext?.executionData ?? {}, + executionSchema: state.workflowContext?.executionSchema ?? [], + instanceUrl: this.instanceUrl, + }); + const response = await this.llmSimpleTask.bindTools(tools).invoke(prompt); + + return { messages: [response] }; + }; + + const shouldAutoCompact = ({ messages }: typeof WorkflowState.State) => { + const tokenUsage = extractLastTokenUsage(messages); + + if (!tokenUsage) { + this.logger?.debug('No token usage metadata found'); + return false; + } + + const tokensUsed = tokenUsage.input_tokens + tokenUsage.output_tokens; + + this.logger?.debug('Token usage', { + inputTokens: tokenUsage.input_tokens, + outputTokens: tokenUsage.output_tokens, + totalTokens: tokensUsed, + }); + + return tokensUsed > this.autoCompactThresholdTokens; + }; + + const shouldModifyState = (state: typeof WorkflowState.State) => { + const { messages, workflowContext } = state; + const lastHumanMessage = messages.findLast((m) => m instanceof HumanMessage)!; // There always should be at least one human message in the array + + if (lastHumanMessage.content === '/compact') { + return 'compact_messages'; + } + + if (lastHumanMessage.content === '/clear') { + return 'delete_messages'; + } + + // If the workflow is empty (no nodes), + // we consider it initial generation request and auto-generate a name for the workflow. + if (workflowContext?.currentWorkflow?.nodes?.length === 0 && messages.length === 1) { + return 'create_workflow_name'; + } + + if (shouldAutoCompact(state)) { + return 'auto_compact_messages'; + } + + return 'agent'; + }; + + const shouldContinue = ({ messages }: typeof WorkflowState.State) => { + const lastMessage: AIMessage = messages[messages.length - 1]; + + if (lastMessage.tool_calls?.length) { + return 'tools'; + } + return END; + }; + + const customToolExecutor = async (state: typeof WorkflowState.State) => { + return await executeToolsInParallel({ state, toolMap }); + }; + + function deleteMessages(state: typeof WorkflowState.State) { + const messages = state.messages; + const stateUpdate: Partial = { + workflowOperations: null, + workflowContext: {}, + messages: messages.map((m) => new RemoveMessage({ id: m.id! })) ?? [], + workflowJSON: { + nodes: [], + connections: {}, + name: '', + }, + }; + + return stateUpdate; + } + + /** + * Compacts the conversation history by summarizing it + * and removing original messages. + * Might be triggered manually by the user with `/compact` message, or run automatically + * when the conversation history exceeds a certain token limit. + */ + const compactSession = async (state: typeof WorkflowState.State) => { + if (!this.llmSimpleTask) { + throw new LLMServiceError('LLM not setup'); + } + + const { messages, previousSummary } = state; + const lastHumanMessage = messages[messages.length - 1] satisfies HumanMessage; + const isAutoCompact = lastHumanMessage.content !== '/compact'; + + this.logger?.debug('Compacting conversation history', { + isAutoCompact, + }); + + const compactedMessages = await conversationCompactChain( + this.llmSimpleTask, + messages, + previousSummary, + ); + + // The summarized conversation history will become a part of system prompt + // and will be used in the next LLM call. + // We will remove all messages and replace them with a mock HumanMessage and AIMessage + // to indicate that the conversation history has been compacted. + // If this is an auto-compact, we will also keep the last human message, as it will continue executing the workflow. + return { + previousSummary: compactedMessages.summaryPlain, + messages: [ + ...messages.map((m) => new RemoveMessage({ id: m.id! })), + new HumanMessage('Please compress the conversation history'), + new AIMessage('Successfully compacted conversation history'), + ...(isAutoCompact ? [new HumanMessage({ content: lastHumanMessage.content })] : []), + ], + }; + }; + + /** + * Creates a workflow name based on the initial user message. + */ + const createWorkflowName = async (state: typeof WorkflowState.State) => { + if (!this.llmSimpleTask) { + throw new LLMServiceError('LLM not setup'); + } + + const { workflowJSON, messages } = state; + + if (messages.length === 1 && messages[0] instanceof HumanMessage) { + const initialMessage = messages[0] satisfies HumanMessage; + + if (typeof initialMessage.content !== 'string') { + this.logger?.debug( + 'Initial message content is not a string, skipping workflow name generation', + ); + return {}; + } + + this.logger?.debug('Generating workflow name'); + const { name } = await workflowNameChain(this.llmSimpleTask, initialMessage.content); + + return { + workflowJSON: { + ...workflowJSON, + name, + }, + }; + } + + return {}; + }; + + const workflow = new StateGraph(WorkflowState) + .addNode('agent', callModel) + .addNode('tools', customToolExecutor) + .addNode('process_operations', processOperations) + .addNode('delete_messages', deleteMessages) + .addNode('compact_messages', compactSession) + .addNode('auto_compact_messages', compactSession) + .addNode('create_workflow_name', createWorkflowName) + .addConditionalEdges('__start__', shouldModifyState) + .addEdge('tools', 'process_operations') + .addEdge('process_operations', 'agent') + .addEdge('auto_compact_messages', 'agent') + .addEdge('create_workflow_name', 'agent') + .addEdge('delete_messages', END) + .addEdge('compact_messages', END) + .addConditionalEdges('agent', shouldContinue); + + return workflow; + } + + async getState(workflowId: string, userId?: string) { + const workflow = this.createWorkflow(); + const agent = workflow.compile({ checkpointer: this.checkpointer }); + return await agent.getState({ + configurable: { thread_id: `workflow-${workflowId}-user-${userId ?? new Date().getTime()}` }, + }); + } + + static generateThreadId(workflowId?: string, userId?: string) { + return workflowId + ? `workflow-${workflowId}-user-${userId ?? new Date().getTime()}` + : crypto.randomUUID(); + } + + private getDefaultWorkflowJSON(payload: ChatPayload): SimpleWorkflow { + return ( + (payload.workflowContext?.currentWorkflow as SimpleWorkflow) ?? { + nodes: [], + connections: {}, + } + ); + } + + async *chat(payload: ChatPayload, userId?: string, abortSignal?: AbortSignal) { + this.validateMessageLength(payload.message); + + const { agent, threadConfig, streamConfig } = this.setupAgentAndConfigs( + payload, + userId, + abortSignal, + ); + + try { + const stream = await this.createAgentStream(payload, streamConfig, agent); + yield* this.processAgentStream(stream, agent, threadConfig); + } catch (error: unknown) { + this.handleStreamError(error); + } + } + + private validateMessageLength(message: string): void { + if (message.length > MAX_AI_BUILDER_PROMPT_LENGTH) { + this.logger?.warn('Message exceeds maximum length', { + messageLength: message.length, + maxLength: MAX_AI_BUILDER_PROMPT_LENGTH, + }); + + throw new ValidationError( + `Message exceeds maximum length of ${MAX_AI_BUILDER_PROMPT_LENGTH} characters`, + ); + } + } + + private setupAgentAndConfigs(payload: ChatPayload, userId?: string, abortSignal?: AbortSignal) { + const agent = this.createWorkflow().compile({ checkpointer: this.checkpointer }); + const workflowId = payload.workflowContext?.currentWorkflow?.id; + // Generate thread ID from workflowId and userId + // This ensures one session per workflow per user + const threadId = WorkflowBuilderAgent.generateThreadId(workflowId, userId); + const threadConfig: RunnableConfig = { + configurable: { + thread_id: threadId, + }, + }; + const streamConfig = { + ...threadConfig, + streamMode: ['updates', 'custom'], + recursionLimit: 50, + signal: abortSignal, + callbacks: this.tracer ? [this.tracer] : undefined, + }; + + return { agent, threadConfig, streamConfig }; + } + + private async createAgentStream( + payload: ChatPayload, + streamConfig: RunnableConfig, + agent: ReturnType['compile']>, + ) { + return await agent.stream( + { + messages: [new HumanMessage({ content: payload.message })], + workflowJSON: this.getDefaultWorkflowJSON(payload), + workflowOperations: [], + workflowContext: payload.workflowContext, + }, + streamConfig, + ); + } + + private handleStreamError(error: unknown): never { + const invalidRequestErrorMessage = this.getInvalidRequestError(error); + if (invalidRequestErrorMessage) { + throw new ValidationError(invalidRequestErrorMessage); + } + + throw error; + } + + private async *processAgentStream( + stream: AsyncGenerator<[string, unknown], void, unknown>, + agent: ReturnType['compile']>, + threadConfig: RunnableConfig, + ) { + try { + const streamProcessor = createStreamProcessor(stream); + for await (const output of streamProcessor) { + yield output; + } + } catch (error) { + await this.handleAgentStreamError(error, agent, threadConfig); + } + } + + private async handleAgentStreamError( + error: unknown, + agent: ReturnType['compile']>, + threadConfig: RunnableConfig, + ): Promise { + if ( + error && + typeof error === 'object' && + 'message' in error && + typeof error.message === 'string' && + // This is naive, but it's all we get from LangGraph AbortError + ['Abort', 'Aborted'].includes(error.message) + ) { + // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access + const messages = (await agent.getState(threadConfig)).values.messages as Array< + AIMessage | HumanMessage | ToolMessage + >; + + // Handle abort errors gracefully + const abortedAiMessage = new AIMessage({ + content: '[Task aborted]', + id: crypto.randomUUID(), + }); + // TODO: Should we clear tool calls that are in progress? + await agent.updateState(threadConfig, { messages: [...messages, abortedAiMessage] }); + return; + } + + // If it's not an abort error, check for GraphRecursionError + if (error instanceof GraphRecursionError) { + throw new ApplicationError( + 'Workflow generation stopped: The AI reached the maximum number of steps while building your workflow. This usually means the workflow design became too complex or got stuck in a loop while trying to create the nodes and connections.', + ); + } + + // Re-throw any other errors + throw error; + } + + private getInvalidRequestError(error: unknown): string | undefined { + if ( + error instanceof Error && + 'error' in error && + typeof error.error === 'object' && + error.error + ) { + const innerError = error.error; + if ('error' in innerError && typeof innerError.error === 'object' && innerError.error) { + const errorDetails = innerError.error; + if ( + 'type' in errorDetails && + errorDetails.type === 'invalid_request_error' && + 'message' in errorDetails && + typeof errorDetails.message === 'string' + ) { + return errorDetails.message; + } + } + } + + return undefined; + } + + async getSessions(workflowId: string | undefined, userId?: string) { + // For now, we'll return the current session if we have a workflowId + // MemorySaver doesn't expose a way to list all threads, so we'll need to + // track this differently if we want to list all sessions + const sessions = []; + + if (workflowId) { + const threadId = WorkflowBuilderAgent.generateThreadId(workflowId, userId); + const threadConfig: RunnableConfig = { + configurable: { + thread_id: threadId, + }, + }; + + try { + // Try to get the checkpoint for this thread + const checkpoint = await this.checkpointer.getTuple(threadConfig); + + if (checkpoint?.checkpoint) { + const messages = + (checkpoint.checkpoint.channel_values?.messages as Array< + AIMessage | HumanMessage | ToolMessage + >) ?? []; + + sessions.push({ + sessionId: threadId, + messages: formatMessages(messages), + lastUpdated: checkpoint.checkpoint.ts, + }); + } + } catch (error) { + // Thread doesn't exist yet + this.logger?.debug('No session found for workflow:', { workflowId, error }); + } + } + + return { sessions }; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/workflow-state 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/workflow-state 2.ts new file mode 100755 index 00000000..641a6a04 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/src/workflow-state 2.ts @@ -0,0 +1,89 @@ +import type { BaseMessage } from '@langchain/core/messages'; +import { HumanMessage } from '@langchain/core/messages'; +import { Annotation, messagesStateReducer } from '@langchain/langgraph'; + +import type { SimpleWorkflow, WorkflowOperation } from './types/workflow'; +import type { ChatPayload } from './workflow-builder-agent'; + +/** + * Reducer for collecting workflow operations from parallel tool executions. + * This reducer intelligently merges operations, avoiding duplicates and handling special cases. + */ +function operationsReducer( + current: WorkflowOperation[] | null, + update: WorkflowOperation[] | null | undefined, +): WorkflowOperation[] { + if (update === null) { + return []; + } + + if (!update || update.length === 0) { + return current ?? []; + } + + // For clear operations, we can reset everything + if (update.some((op) => op.type === 'clear')) { + return update.filter((op) => op.type === 'clear').slice(-1); // Keep only the last clear + } + + if (!current && !update) { + return []; + } + // Otherwise, append new operations + return [...(current ?? []), ...update]; +} + +// Creates a reducer that trims the message history to keep only the last `maxUserMessages` HumanMessage instances +export function createTrimMessagesReducer(maxUserMessages: number) { + return (current: BaseMessage[]): BaseMessage[] => { + // Count HumanMessage instances and remember their indices + const humanMessageIndices: number[] = []; + current.forEach((msg, index) => { + if (msg instanceof HumanMessage) { + humanMessageIndices.push(index); + } + }); + + // If we have fewer than or equal to maxUserMessages, return as is + if (humanMessageIndices.length <= maxUserMessages) { + return current; + } + + // Find the index of the first HumanMessage that we want to keep + const startHumanMessageIndex = + humanMessageIndices[humanMessageIndices.length - maxUserMessages]; + + // Slice from that HumanMessage onwards + return current.slice(startHumanMessageIndex); + }; +} + +export const WorkflowState = Annotation.Root({ + messages: Annotation({ + reducer: messagesStateReducer, + default: () => [], + }), + // // The original prompt from the user. + // The JSON representation of the workflow being built. + // Now a simple field without custom reducer - all updates go through operations + workflowJSON: Annotation({ + reducer: (x, y) => y ?? x, + default: () => ({ nodes: [], connections: {}, name: '' }), + }), + // Operations to apply to the workflow - processed by a separate node + workflowOperations: Annotation({ + reducer: operationsReducer, + default: () => [], + }), + // Whether the user prompt is a workflow prompt. + // Latest workflow context + workflowContext: Annotation({ + reducer: (x, y) => y ?? x, + }), + + // Previous conversation summary (used for compressing long conversations) + previousSummary: Annotation({ + reducer: (x, y) => y ?? x, // Overwrite with the latest summary + default: () => 'EMPTY', + }), +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/test/test-utils 2.ts b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/test/test-utils 2.ts new file mode 100755 index 00000000..3b43f16a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/ai-workflow-builder.ee/test/test-utils 2.ts @@ -0,0 +1,599 @@ +import type { ToolRunnableConfig } from '@langchain/core/tools'; +import type { LangGraphRunnableConfig } from '@langchain/langgraph'; +import { getCurrentTaskInput } from '@langchain/langgraph'; +import type { MockProxy } from 'jest-mock-extended'; +import { mock } from 'jest-mock-extended'; +import type { + INode, + INodeTypeDescription, + INodeParameters, + IConnection, + NodeConnectionType, +} from 'n8n-workflow'; +import { jsonParse } from 'n8n-workflow'; + +import type { ProgressReporter, ToolProgressMessage } from '../src/types/tools'; +import type { SimpleWorkflow } from '../src/types/workflow'; + +export const mockProgress = (): MockProxy => mock(); + +// Mock state helpers +export const mockStateHelpers = () => ({ + getNodes: jest.fn(() => [] as INode[]), + getConnections: jest.fn(() => ({}) as SimpleWorkflow['connections']), + updateNode: jest.fn((_id: string, _updates: Partial) => undefined), + addNodes: jest.fn((_nodes: INode[]) => undefined), + removeNode: jest.fn((_id: string) => undefined), + addConnections: jest.fn((_connections: IConnection[]) => undefined), + removeConnection: jest.fn((_sourceId: string, _targetId: string, _type?: string) => undefined), +}); + +export type MockStateHelpers = ReturnType; + +// Simple node creation helper +export const createNode = (overrides: Partial = {}): INode => ({ + id: 'node1', + name: 'TestNode', + type: 'n8n-nodes-base.code', + typeVersion: 1, + position: [0, 0], + ...overrides, + // Ensure parameters are properly merged if provided in overrides + parameters: overrides.parameters ?? {}, +}); + +// Simple workflow builder +export const createWorkflow = (nodes: INode[] = []): SimpleWorkflow => { + const workflow: SimpleWorkflow = { nodes, connections: {}, name: 'Test workflow' }; + return workflow; +}; + +// Create mock node type description +export const createNodeType = ( + overrides: Partial = {}, +): INodeTypeDescription => ({ + displayName: overrides.displayName ?? 'Test Node', + name: overrides.name ?? 'test.node', + group: overrides.group ?? ['transform'], + version: overrides.version ?? 1, + description: overrides.description ?? 'Test node description', + defaults: overrides.defaults ?? { name: 'Test Node' }, + inputs: overrides.inputs ?? ['main'], + outputs: overrides.outputs ?? ['main'], + properties: overrides.properties ?? [], + ...overrides, +}); + +// Common node types for testing +export const nodeTypes = { + code: createNodeType({ + displayName: 'Code', + name: 'n8n-nodes-base.code', + group: ['transform'], + properties: [ + { + displayName: 'JavaScript', + name: 'jsCode', + type: 'string', + typeOptions: { + editor: 'codeNodeEditor', + }, + default: '', + }, + ], + }), + httpRequest: createNodeType({ + displayName: 'HTTP Request', + name: 'n8n-nodes-base.httpRequest', + group: ['input'], + properties: [ + { + displayName: 'URL', + name: 'url', + type: 'string', + default: '', + }, + { + displayName: 'Method', + name: 'method', + type: 'options', + options: [ + { name: 'GET', value: 'GET' }, + { name: 'POST', value: 'POST' }, + ], + default: 'GET', + }, + ], + }), + webhook: createNodeType({ + displayName: 'Webhook', + name: 'n8n-nodes-base.webhook', + group: ['trigger'], + inputs: [], + outputs: ['main'], + webhooks: [ + { + name: 'default', + httpMethod: 'POST', + responseMode: 'onReceived', + path: 'webhook', + }, + ], + properties: [ + { + displayName: 'Path', + name: 'path', + type: 'string', + default: 'webhook', + }, + ], + }), + agent: createNodeType({ + displayName: 'AI Agent', + name: '@n8n/n8n-nodes-langchain.agent', + group: ['output'], + inputs: ['ai_agent'], + outputs: ['main'], + properties: [], + }), + openAiModel: createNodeType({ + displayName: 'OpenAI Chat Model', + name: '@n8n/n8n-nodes-langchain.lmChatOpenAi', + group: ['output'], + inputs: [], + outputs: ['ai_languageModel'], + properties: [], + }), + setNode: createNodeType({ + displayName: 'Set', + name: 'n8n-nodes-base.set', + group: ['transform'], + properties: [ + { + displayName: 'Values to Set', + name: 'values', + type: 'collection', + default: {}, + }, + ], + }), + ifNode: createNodeType({ + displayName: 'If', + name: 'n8n-nodes-base.if', + group: ['transform'], + inputs: ['main'], + outputs: ['main', 'main'], + outputNames: ['true', 'false'], + properties: [ + { + displayName: 'Conditions', + name: 'conditions', + type: 'collection', + default: {}, + }, + ], + }), + mergeNode: createNodeType({ + displayName: 'Merge', + name: 'n8n-nodes-base.merge', + group: ['transform'], + inputs: ['main', 'main'], + outputs: ['main'], + inputNames: ['Input 1', 'Input 2'], + properties: [ + { + displayName: 'Mode', + name: 'mode', + type: 'options', + options: [ + { name: 'Append', value: 'append' }, + { name: 'Merge By Index', value: 'mergeByIndex' }, + { name: 'Merge By Key', value: 'mergeByKey' }, + ], + default: 'append', + }, + ], + }), + vectorStoreNode: createNodeType({ + displayName: 'Vector Store', + name: '@n8n/n8n-nodes-langchain.vectorStore', + subtitle: '={{$parameter["mode"] === "retrieve" ? "Retrieve" : "Insert"}}', + group: ['transform'], + inputs: `={{ ((parameter) => { + function getInputs(parameters) { + const mode = parameters?.mode; + const inputs = []; + if (mode === 'retrieve-as-tool') { + inputs.push({ + displayName: 'Embedding', + type: 'ai_embedding', + required: true + }); + } else { + inputs.push({ + displayName: '', + type: 'main' + }); + inputs.push({ + displayName: 'Embedding', + type: 'ai_embedding', + required: true + }); + } + return inputs; + }; + return getInputs(parameter) + })($parameter) }}`, + outputs: `={{ ((parameter) => { + function getOutputs(parameters) { + const mode = parameters?.mode; + if (mode === 'retrieve-as-tool') { + return ['ai_tool']; + } else if (mode === 'retrieve') { + return ['ai_document']; + } else { + return ['main']; + } + }; + return getOutputs(parameter) + })($parameter) }}`, + properties: [ + { + displayName: 'Mode', + name: 'mode', + type: 'options', + options: [ + { name: 'Insert', value: 'insert' }, + { name: 'Retrieve', value: 'retrieve' }, + { name: 'Retrieve (As Tool)', value: 'retrieve-as-tool' }, + ], + default: 'insert', + }, + // Many more properties would be here in reality + ], + }), +}; + +// Helper to create connections +export const createConnection = ( + _fromId: string, + toId: string, + type: NodeConnectionType = 'main', + index: number = 0, +) => ({ + node: toId, + type, + index, +}); + +// Generic chain interface +interface Chain, TOutput = Record> { + invoke: (input: TInput) => Promise; +} + +// Generic mock chain factory with proper typing +export const mockChain = < + TInput = Record, + TOutput = Record, +>(): MockProxy> => { + return mock>(); +}; + +// Convenience factory for parameter updater chain +export const mockParameterUpdaterChain = () => { + return mockChain, { parameters: Record }>(); +}; + +// Helper to assert node parameters +export const expectNodeToHaveParameters = ( + node: INode, + expectedParams: Partial, +): void => { + expect(node.parameters).toMatchObject(expectedParams); +}; + +// Helper to assert connections exist +export const expectConnectionToExist = ( + connections: SimpleWorkflow['connections'], + fromId: string, + toId: string, + type: string = 'main', +): void => { + expect(connections[fromId]).toBeDefined(); + expect(connections[fromId][type]).toBeDefined(); + expect(connections[fromId][type]).toContainEqual( + expect.arrayContaining([expect.objectContaining({ node: toId })]), + ); +}; + +// ========== LangGraph Testing Utilities ========== + +// Types for mocked Command results +export type MockedCommandResult = { content: string }; + +// Common parsed content structure for tool results +export interface ParsedToolContent { + update: { + messages: Array<{ kwargs: { content: string } }>; + workflowOperations?: Array<{ + type: string; + nodes?: INode[]; + [key: string]: unknown; + }>; + }; +} + +// Setup LangGraph mocks +export const setupLangGraphMocks = () => { + const mockGetCurrentTaskInput = getCurrentTaskInput as jest.MockedFunction< + typeof getCurrentTaskInput + >; + + jest.mock('@langchain/langgraph', () => ({ + getCurrentTaskInput: jest.fn(), + Command: jest.fn().mockImplementation((params: Record) => ({ + content: JSON.stringify(params), + })), + })); + + return { mockGetCurrentTaskInput }; +}; + +// Parse tool result with double-wrapped content handling +export const parseToolResult = (result: unknown): T => { + const parsed = jsonParse<{ content?: string }>((result as MockedCommandResult).content); + return parsed.content ? jsonParse(parsed.content) : (parsed as T); +}; + +// ========== Progress Message Utilities ========== + +// Extract progress messages from mockWriter +export const extractProgressMessages = ( + mockWriter: jest.Mock, +): Array> => { + const progressCalls: Array> = []; + + mockWriter.mock.calls.forEach((call) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + const [arg] = call; + progressCalls.push(arg as ToolProgressMessage); + }); + return progressCalls; +}; + +// Find specific progress message by type +export const findProgressMessage = ( + messages: Array>, + status: 'running' | 'completed' | 'error', + updateType?: string, +): ToolProgressMessage | undefined => { + return messages.find( + (msg) => msg.status === status && (!updateType || msg.updates[0]?.type === updateType), + ); +}; + +// ========== Tool Config Helpers ========== + +// Create basic tool config +export const createToolConfig = ( + toolName: string, + callId: string = 'test-call', +): ToolRunnableConfig => ({ + toolCall: { id: callId, name: toolName, args: {} }, +}); + +// Create tool config with writer for progress tracking +export const createToolConfigWithWriter = ( + toolName: string, + callId: string = 'test-call', +): ToolRunnableConfig & LangGraphRunnableConfig & { writer: jest.Mock } => { + const mockWriter = jest.fn(); + return { + toolCall: { id: callId, name: toolName, args: {} }, + writer: mockWriter, + }; +}; + +// ========== Workflow State Helpers ========== + +// Setup workflow state with mockGetCurrentTaskInput +export const setupWorkflowState = ( + mockGetCurrentTaskInput: jest.MockedFunction, + workflow: SimpleWorkflow = createWorkflow([]), +) => { + mockGetCurrentTaskInput.mockReturnValue({ + workflowJSON: workflow, + }); +}; + +// ========== Common Tool Assertions ========== + +// Expect tool success message +export const expectToolSuccess = ( + content: ParsedToolContent, + expectedMessage: string | RegExp, +): void => { + const message = content.update.messages[0]?.kwargs.content; + expect(message).toBeDefined(); + if (typeof expectedMessage === 'string') { + expect(message).toContain(expectedMessage); + } else { + expect(message).toMatch(expectedMessage); + } +}; + +// Expect tool error message +export const expectToolError = ( + content: ParsedToolContent, + expectedError: string | RegExp, +): void => { + const message = content.update.messages[0]?.kwargs.content; + if (typeof expectedError === 'string') { + expect(message).toBe(expectedError); + } else { + expect(message).toMatch(expectedError); + } +}; + +// Expect workflow operation of specific type +export const expectWorkflowOperation = ( + content: ParsedToolContent, + operationType: string, + matcher?: Record, +): void => { + const operation = content.update.workflowOperations?.[0]; + expect(operation).toBeDefined(); + expect(operation?.type).toBe(operationType); + if (matcher) { + expect(operation).toMatchObject(matcher); + } +}; + +// Expect node was added +export const expectNodeAdded = (content: ParsedToolContent, expectedNode: Partial): void => { + expectWorkflowOperation(content, 'addNodes'); + const addedNode = content.update.workflowOperations?.[0]?.nodes?.[0]; + expect(addedNode).toBeDefined(); + expect(addedNode).toMatchObject(expectedNode); +}; + +// Expect node was removed +export const expectNodeRemoved = (content: ParsedToolContent, nodeId: string): void => { + expectWorkflowOperation(content, 'removeNode', { nodeIds: [nodeId] }); +}; + +// Expect connections were added +export const expectConnectionsAdded = ( + content: ParsedToolContent, + expectedCount?: number, +): void => { + expectWorkflowOperation(content, 'addConnections'); + if (expectedCount !== undefined) { + const connections = content.update.workflowOperations?.[0]?.connections; + expect(connections).toHaveLength(expectedCount); + } +}; + +// Expect node was updated +export const expectNodeUpdated = ( + content: ParsedToolContent, + nodeId: string, + expectedUpdates?: Record, +): void => { + expectWorkflowOperation(content, 'updateNode', { + nodeId, + ...(expectedUpdates ? { updates: expect.objectContaining(expectedUpdates) } : {}), + }); +}; + +// ========== Test Data Builders ========== + +// Build add node input +export const buildAddNodeInput = (overrides: { + nodeType: string; + name?: string; + connectionParametersReasoning?: string; + connectionParameters?: Record; +}) => ({ + nodeType: overrides.nodeType, + name: overrides.name ?? 'Test Node', + connectionParametersReasoning: + overrides.connectionParametersReasoning ?? + 'Standard node with static inputs/outputs, no connection parameters needed', + connectionParameters: overrides.connectionParameters ?? {}, +}); + +// Build connect nodes input +export const buildConnectNodesInput = (overrides: { + sourceNodeId: string; + targetNodeId: string; + sourceOutputIndex?: number; + targetInputIndex?: number; +}) => ({ + sourceNodeId: overrides.sourceNodeId, + targetNodeId: overrides.targetNodeId, + sourceOutputIndex: overrides.sourceOutputIndex ?? 0, + targetInputIndex: overrides.targetInputIndex ?? 0, +}); + +// Build node search query +export const buildNodeSearchQuery = ( + queryType: 'name' | 'subNodeSearch', + query?: string, + connectionType?: NodeConnectionType, +) => ({ + queryType, + ...(query && { query }), + ...(connectionType && { connectionType }), +}); + +// Build update node parameters input +export const buildUpdateNodeInput = (nodeId: string, changes: string[]) => ({ + nodeId, + changes, +}); + +// Build node details input +export const buildNodeDetailsInput = (overrides: { + nodeName: string; + withParameters?: boolean; + withConnections?: boolean; +}) => ({ + nodeName: overrides.nodeName, + withParameters: overrides.withParameters ?? false, + withConnections: overrides.withConnections ?? true, +}); + +// Expect node details in response +export const expectNodeDetails = ( + content: ParsedToolContent, + expectedDetails: Partial<{ + name: string; + displayName: string; + description: string; + subtitle?: string; + }>, +): void => { + const message = content.update.messages[0]?.kwargs.content; + expect(message).toBeDefined(); + + // Check for expected XML-like tags in formatted output + if (expectedDetails.name) { + expect(message).toContain(`${expectedDetails.name}`); + } + if (expectedDetails.displayName) { + expect(message).toContain(`${expectedDetails.displayName}`); + } + if (expectedDetails.description) { + expect(message).toContain(`${expectedDetails.description}`); + } + if (expectedDetails.subtitle) { + expect(message).toContain(`${expectedDetails.subtitle}`); + } +}; + +// Helper to validate XML-like structure in output +export const expectXMLTag = ( + content: string, + tagName: string, + expectedValue?: string | RegExp, +): void => { + const tagRegex = new RegExp(`<${tagName}>([\\s\\S]*?)`); + const match = content.match(tagRegex); + expect(match).toBeDefined(); + if (expectedValue) { + if (typeof expectedValue === 'string') { + expect(match?.[1]?.trim()).toBe(expectedValue); + } else { + expect(match?.[1]).toMatch(expectedValue); + } + } +}; + +// Common reasoning strings +export const REASONING = { + STATIC_NODE: 'Node has static inputs/outputs, no connection parameters needed', + DYNAMIC_AI_NODE: 'AI node has dynamic inputs, setting connection parameters', + TRIGGER_NODE: 'Trigger node, no connection parameters needed', + WEBHOOK_NODE: 'Webhook is a trigger node, no connection parameters needed', +} as const; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/api-keys 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/api-keys 2.ts new file mode 100755 index 00000000..7fa40c13 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/api-keys 2.ts @@ -0,0 +1,17 @@ +import type { ApiKeyScope } from '@n8n/permissions'; + +/** Unix timestamp. Seconds since epoch */ +export type UnixTimestamp = number | null; + +export type ApiKey = { + id: string; + label: string; + apiKey: string; + createdAt: string; + updatedAt: string; + /** Null if API key never expires */ + expiresAt: UnixTimestamp | null; + scopes: ApiKeyScope[]; +}; + +export type ApiKeyWithRawValue = ApiKey & { rawApiKey: string }; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/community-node-types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/community-node-types 2.ts new file mode 100755 index 00000000..90968aa9 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/community-node-types 2.ts @@ -0,0 +1,21 @@ +import type { INodeTypeDescription } from 'n8n-workflow'; + +export type CommunityNodeType = { + authorGithubUrl: string; + authorName: string; + checksum: string; + description: string; + displayName: string; + name: string; + numberOfStars: number; + numberOfDownloads: number; + packageName: string; + createdAt: string; + updatedAt: string; + npmVersion: string; + isOfficialNode: boolean; + companyName?: string; + nodeDescription: INodeTypeDescription; + isInstalled: boolean; + nodeVersions?: Array<{ npmVersion: string; checksum: string }>; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/datetime 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/datetime 2.ts new file mode 100755 index 00000000..5175b393 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/datetime 2.ts @@ -0,0 +1,2 @@ +/** Date time in the ISO 8601 format, e.g. 2024-10-31T00:00:00.123Z */ +export type Iso8601DateTimeString = string; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/frontend-settings 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/frontend-settings 2.ts new file mode 100755 index 00000000..fb37b7c2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/frontend-settings 2.ts @@ -0,0 +1,227 @@ +import type { LogLevel, WorkflowSettings } from 'n8n-workflow'; + +import { type InsightsDateRange } from './schemas/insights.schema'; + +export interface IVersionNotificationSettings { + enabled: boolean; + endpoint: string; + whatsNewEnabled: boolean; + whatsNewEndpoint: string; + infoUrl: string; +} + +export interface ITelemetryClientConfig { + url: string; + key: string; + proxy: string; + sourceConfig: string; +} + +export interface ITelemetrySettings { + enabled: boolean; + config?: ITelemetryClientConfig; +} + +export type AuthenticationMethod = 'email' | 'ldap' | 'saml' | 'oidc'; + +export interface IUserManagementSettings { + quota: number; + showSetupOnFirstLoad?: boolean; + smtpSetup: boolean; + authenticationMethod: AuthenticationMethod; +} + +export interface FrontendSettings { + inE2ETests: boolean; + isDocker: boolean; + databaseType: 'sqlite' | 'mariadb' | 'mysqldb' | 'postgresdb'; + endpointForm: string; + endpointFormTest: string; + endpointFormWaiting: string; + endpointMcp: string; + endpointMcpTest: string; + endpointWebhook: string; + endpointWebhookTest: string; + endpointWebhookWaiting: string; + saveDataErrorExecution: WorkflowSettings.SaveDataExecution; + saveDataSuccessExecution: WorkflowSettings.SaveDataExecution; + saveManualExecutions: boolean; + saveExecutionProgress: boolean; + executionTimeout: number; + maxExecutionTimeout: number; + workflowCallerPolicyDefaultOption: WorkflowSettings.CallerPolicy; + oauthCallbackUrls: { + oauth1: string; + oauth2: string; + }; + timezone: string; + urlBaseWebhook: string; + urlBaseEditor: string; + versionCli: string; + nodeJsVersion: string; + concurrency: number; + authCookie: { + secure: boolean; + }; + binaryDataMode: 'default' | 'filesystem' | 's3'; + releaseChannel: 'stable' | 'beta' | 'nightly' | 'dev'; + n8nMetadata?: { + userId?: string; + [key: string]: string | number | undefined; + }; + versionNotifications: IVersionNotificationSettings; + instanceId: string; + telemetry: ITelemetrySettings; + posthog: { + enabled: boolean; + apiHost: string; + apiKey: string; + autocapture: boolean; + disableSessionRecording: boolean; + debug: boolean; + }; + personalizationSurveyEnabled: boolean; + defaultLocale: string; + userManagement: IUserManagementSettings; + sso: { + saml: { + loginLabel: string; + loginEnabled: boolean; + }; + oidc: { + loginEnabled: boolean; + loginUrl: string; + callbackUrl: string; + }; + ldap: { + loginLabel: string; + loginEnabled: boolean; + }; + }; + publicApi: { + enabled: boolean; + latestVersion: number; + path: string; + swaggerUi: { + enabled: boolean; + }; + }; + workflowTagsDisabled: boolean; + logLevel: LogLevel; + hiringBannerEnabled: boolean; + previewMode: boolean; + templates: { + enabled: boolean; + host: string; + }; + missingPackages?: boolean; + executionMode: 'regular' | 'queue'; + /** Whether multi-main mode is enabled and licensed for this main instance. */ + isMultiMain: boolean; + pushBackend: 'sse' | 'websocket'; + communityNodesEnabled: boolean; + unverifiedCommunityNodesEnabled: boolean; + aiAssistant: { + enabled: boolean; + }; + askAi: { + enabled: boolean; + }; + deployment: { + type: string; + }; + allowedModules: { + builtIn?: string[]; + external?: string[]; + }; + enterprise: { + sharing: boolean; + ldap: boolean; + saml: boolean; + oidc: boolean; + mfaEnforcement: boolean; + logStreaming: boolean; + advancedExecutionFilters: boolean; + variables: boolean; + sourceControl: boolean; + auditLogs: boolean; + externalSecrets: boolean; + showNonProdBanner: boolean; + debugInEditor: boolean; + binaryDataS3: boolean; + workflowHistory: boolean; + workerView: boolean; + advancedPermissions: boolean; + apiKeyScopes: boolean; + workflowDiffs: boolean; + projects: { + team: { + limit: number; + }; + }; + }; + hideUsagePage: boolean; + license: { + planName?: string; + consumerId: string; + environment: 'development' | 'production' | 'staging'; + }; + variables: { + limit: number; + }; + mfa: { + enabled: boolean; + enforced: boolean; + }; + folders: { + enabled: boolean; + }; + banners: { + dismissed: string[]; + }; + workflowHistory: { + pruneTime: number; + licensePruneTime: number; + }; + aiCredits: { + enabled: boolean; + credits: number; + }; + pruning?: { + isEnabled: boolean; + maxAge: number; + maxCount: number; + }; + security: { + blockFileAccessToN8nFiles: boolean; + }; + easyAIWorkflowOnboarded: boolean; + partialExecution: { + version: 1 | 2; + }; + evaluation: { + quota: number; + }; + + /** Backend modules that were initialized during startup. */ + activeModules: string[]; + envFeatureFlags: N8nEnvFeatFlags; +} + +export type FrontendModuleSettings = { + /** + * Client settings for [insights](https://docs.n8n.io/insights/) module. + * + * - `summary`: Whether the summary banner should be shown. + * - `dashboard`: Whether the full dashboard should be shown. + * - `dateRanges`: Date range filters available to select. + */ + insights?: { + summary: boolean; + dashboard: boolean; + dateRanges: InsightsDateRange[]; + }; +}; + +export type N8nEnvFeatFlagValue = boolean | string | number | undefined; +export type N8nEnvFeatFlags = Record<`N8N_ENV_FEAT_${Uppercase}`, N8nEnvFeatFlagValue>; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/index 2.ts new file mode 100755 index 00000000..ba8e7e19 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/index 2.ts @@ -0,0 +1,57 @@ +export type * from './datetime'; +export * from './dto'; +export type * from './push'; +export type * from './scaling'; +export type * from './frontend-settings'; +export type * from './user'; +export type * from './api-keys'; +export type * from './community-node-types'; + +export type { Collaborator } from './push/collaboration'; +export type { HeartbeatMessage } from './push/heartbeat'; +export { createHeartbeatMessage, heartbeatMessageSchema } from './push/heartbeat'; +export type { SendWorkerStatusMessage } from './push/worker'; + +export type { BannerName } from './schemas/banner-name.schema'; +export { ViewableMimeTypes } from './schemas/binary-data.schema'; +export { passwordSchema } from './schemas/password.schema'; + +export type { + ProjectType, + ProjectIcon, + ProjectRelation, +} from './schemas/project.schema'; + +export { + type SourceControlledFile, + SOURCE_CONTROL_FILE_LOCATION, + SOURCE_CONTROL_FILE_STATUS, + SOURCE_CONTROL_FILE_TYPE, +} from './schemas/source-controlled-file.schema'; + +export { + type InsightsSummaryType, + type InsightsSummaryUnit, + type InsightsSummary, + type InsightsByWorkflow, + type InsightsByTime, + type InsightsDateRange, +} from './schemas/insights.schema'; + +export { + ROLE, + type Role, + type User, + type UsersList, + usersListSchema, +} from './schemas/user.schema'; + +export { + DATA_STORE_COLUMN_REGEX, + type DataStore, + type DataStoreColumn, + type DataStoreCreateColumnSchema, + type DataStoreListFilter, + type DataStoreListOptions, + dateTimeSchema, +} from './schemas/data-store.schema'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/scaling 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/scaling 2.ts new file mode 100755 index 00000000..30db754a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/scaling 2.ts @@ -0,0 +1,30 @@ +import type { ExecutionStatus, WorkflowExecuteMode } from 'n8n-workflow'; + +export type RunningJobSummary = { + executionId: string; + workflowId: string; + workflowName: string; + mode: WorkflowExecuteMode; + startedAt: Date; + retryOf?: string; + status: ExecutionStatus; +}; + +export type WorkerStatus = { + senderId: string; + runningJobsSummary: RunningJobSummary[]; + freeMem: number; + totalMem: number; + uptime: number; + loadAvg: number[]; + cpus: string; + arch: string; + platform: NodeJS.Platform; + hostname: string; + interfaces: Array<{ + family: 'IPv4' | 'IPv6'; + address: string; + internal: boolean; + }>; + version: string; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/api-types/src/user 2.ts b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/user 2.ts new file mode 100755 index 00000000..0002ba1a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/api-types/src/user 2.ts @@ -0,0 +1,6 @@ +export type MinimalUser = { + id: string; + email: string; + firstName: string; + lastName: string; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/cli-parser 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/cli-parser 2.ts new file mode 100755 index 00000000..1ac603df --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/cli-parser 2.ts @@ -0,0 +1,63 @@ +import { Service } from '@n8n/di'; +import argvParser from 'yargs-parser'; +import type { z } from 'zod'; + +import { Logger } from './logging'; + +type CliInput = { + argv: string[]; + flagsSchema?: z.ZodObject; + description?: string; + examples?: string[]; +}; + +type ParsedArgs> = { + flags: Flags; + args: string[]; +}; + +@Service() +export class CliParser { + constructor(private readonly logger: Logger) {} + + parse( + input: CliInput, + ): ParsedArgs>> { + // eslint-disable-next-line id-denylist + const { _: rest, ...rawFlags } = argvParser(input.argv, { string: ['id'] }); + + let flags = {} as z.infer>; + if (input.flagsSchema) { + for (const key in input.flagsSchema.shape) { + const flagSchema = input.flagsSchema.shape[key]; + let schemaDef = flagSchema._def as z.ZodTypeDef & { + typeName: string; + innerType?: z.ZodType; + _alias?: string; + }; + + if (schemaDef.typeName === 'ZodOptional' && schemaDef.innerType) { + schemaDef = schemaDef.innerType._def as typeof schemaDef; + } + + const alias = schemaDef._alias; + if (alias?.length && !(key in rawFlags) && rawFlags[alias]) { + rawFlags[key] = rawFlags[alias] as unknown; + } + } + + flags = input.flagsSchema.parse(rawFlags); + } + + const args = rest.map(String).slice(2); + + this.logger.debug('Received CLI command', { + execPath: rest[0], + scriptPath: rest[1], + args, + flags, + }); + + return { flags, args }; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/environment 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/environment 2.ts new file mode 100755 index 00000000..80b8553a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/environment 2.ts @@ -0,0 +1,5 @@ +const { NODE_ENV } = process.env; + +export const inTest = NODE_ENV === 'test'; +export const inProduction = NODE_ENV === 'production'; +export const inDevelopment = !NODE_ENV || NODE_ENV === 'development'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/index 2.ts new file mode 100755 index 00000000..f80a7e74 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/index 2.ts @@ -0,0 +1,10 @@ +export * from './license-state'; +export * from './types'; + +export { inDevelopment, inProduction, inTest } from './environment'; +export { isObjectLiteral } from './utils/is-object-literal'; +export { Logger } from './logging/logger'; +export { ModuleRegistry } from './modules/module-registry'; +export { ModulesConfig, ModuleName } from './modules/modules.config'; +export { isContainedWithin, safeJoinPath } from './utils/path-util'; +export { CliParser } from './cli-parser'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/license-state 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/license-state 2.ts new file mode 100755 index 00000000..76a2ae90 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/license-state 2.ts @@ -0,0 +1,209 @@ +import type { BooleanLicenseFeature } from '@n8n/constants'; +import { UNLIMITED_LICENSE_QUOTA } from '@n8n/constants'; +import { Service } from '@n8n/di'; +import { UnexpectedError } from 'n8n-workflow'; + +import type { FeatureReturnType, LicenseProvider } from './types'; + +class ProviderNotSetError extends UnexpectedError { + constructor() { + super('Cannot query license state because license provider has not been set'); + } +} + +@Service() +export class LicenseState { + licenseProvider: LicenseProvider | null = null; + + setLicenseProvider(provider: LicenseProvider) { + this.licenseProvider = provider; + } + + private assertProvider(): asserts this is { licenseProvider: LicenseProvider } { + if (!this.licenseProvider) throw new ProviderNotSetError(); + } + + // -------------------- + // core queries + // -------------------- + + isLicensed(feature: BooleanLicenseFeature) { + this.assertProvider(); + + return this.licenseProvider.isLicensed(feature); + } + + getValue(feature: T): FeatureReturnType[T] { + this.assertProvider(); + + return this.licenseProvider.getValue(feature); + } + + // -------------------- + // booleans + // -------------------- + + isSharingLicensed() { + return this.isLicensed('feat:sharing'); + } + + isLogStreamingLicensed() { + return this.isLicensed('feat:logStreaming'); + } + + isLdapLicensed() { + return this.isLicensed('feat:ldap'); + } + + isSamlLicensed() { + return this.isLicensed('feat:saml'); + } + + isOidcLicensed() { + return this.isLicensed('feat:oidc'); + } + + isMFAEnforcementLicensed() { + return this.isLicensed('feat:mfaEnforcement'); + } + + isApiKeyScopesLicensed() { + return this.isLicensed('feat:apiKeyScopes'); + } + + isAiAssistantLicensed() { + return this.isLicensed('feat:aiAssistant'); + } + + isAskAiLicensed() { + return this.isLicensed('feat:askAi'); + } + + isAiCreditsLicensed() { + return this.isLicensed('feat:aiCredits'); + } + + isAdvancedExecutionFiltersLicensed() { + return this.isLicensed('feat:advancedExecutionFilters'); + } + + isAdvancedPermissionsLicensed() { + return this.isLicensed('feat:advancedPermissions'); + } + + isDebugInEditorLicensed() { + return this.isLicensed('feat:debugInEditor'); + } + + isBinaryDataS3Licensed() { + return this.isLicensed('feat:binaryDataS3'); + } + + isMultiMainLicensed() { + return this.isLicensed('feat:multipleMainInstances'); + } + + isVariablesLicensed() { + return this.isLicensed('feat:variables'); + } + + isSourceControlLicensed() { + return this.isLicensed('feat:sourceControl'); + } + + isExternalSecretsLicensed() { + return this.isLicensed('feat:externalSecrets'); + } + + isWorkflowHistoryLicensed() { + return this.isLicensed('feat:workflowHistory'); + } + + isAPIDisabled() { + return this.isLicensed('feat:apiDisabled'); + } + + isWorkerViewLicensed() { + return this.isLicensed('feat:workerView'); + } + + isProjectRoleAdminLicensed() { + return this.isLicensed('feat:projectRole:admin'); + } + + isProjectRoleEditorLicensed() { + return this.isLicensed('feat:projectRole:editor'); + } + + isProjectRoleViewerLicensed() { + return this.isLicensed('feat:projectRole:viewer'); + } + + isCustomNpmRegistryLicensed() { + return this.isLicensed('feat:communityNodes:customRegistry'); + } + + isFoldersLicensed() { + return this.isLicensed('feat:folders'); + } + + isInsightsSummaryLicensed() { + return this.isLicensed('feat:insights:viewSummary'); + } + + isInsightsDashboardLicensed() { + return this.isLicensed('feat:insights:viewDashboard'); + } + + isInsightsHourlyDataLicensed() { + return this.isLicensed('feat:insights:viewHourlyData'); + } + + isWorkflowDiffsLicensed() { + return this.isLicensed('feat:workflowDiffs'); + } + + // -------------------- + // integers + // -------------------- + + getMaxUsers() { + return this.getValue('quota:users') ?? UNLIMITED_LICENSE_QUOTA; + } + + getMaxActiveWorkflows() { + return this.getValue('quota:activeWorkflows') ?? UNLIMITED_LICENSE_QUOTA; + } + + getMaxVariables() { + return this.getValue('quota:maxVariables') ?? UNLIMITED_LICENSE_QUOTA; + } + + getMaxAiCredits() { + return this.getValue('quota:aiCredits') ?? 0; + } + + getWorkflowHistoryPruneQuota() { + return this.getValue('quota:workflowHistoryPrune') ?? UNLIMITED_LICENSE_QUOTA; + } + + getInsightsMaxHistory() { + return this.getValue('quota:insights:maxHistoryDays') ?? 7; + } + + getInsightsRetentionMaxAge() { + return this.getValue('quota:insights:retention:maxAgeDays') ?? 180; + } + + getInsightsRetentionPruneInterval() { + return this.getValue('quota:insights:retention:pruneIntervalDays') ?? 24; + } + + getMaxTeamProjects() { + return this.getValue('quota:maxTeamProjects') ?? 0; + } + + getMaxWorkflowsWithEvaluations() { + return this.getValue('quota:evaluations:maxWorkflows') ?? 0; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/types 2.ts new file mode 100755 index 00000000..ea79ab73 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-common/src/types 2.ts @@ -0,0 +1,15 @@ +import type { BooleanLicenseFeature, NumericLicenseFeature } from '@n8n/constants'; + +export type FeatureReturnType = Partial< + { + planName: string; + } & { [K in NumericLicenseFeature]: number } & { [K in BooleanLicenseFeature]: boolean } +>; + +export interface LicenseProvider { + /** Returns whether a feature is included in the user's license plan. */ + isLicensed(feature: BooleanLicenseFeature): boolean; + + /** Returns the value of a feature in the user's license plan, typically a boolean or integer. */ + getValue(feature: T): FeatureReturnType[T]; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/index 2.ts new file mode 100755 index 00000000..9b168308 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/index 2.ts @@ -0,0 +1,12 @@ +import type { Logger } from '@n8n/backend-common'; +import { mock } from 'jest-mock-extended'; + +export const mockLogger = (): Logger => + mock({ scoped: jest.fn().mockReturnValue(mock()) }); + +export * from './random'; +export * as testDb from './test-db'; +export * as testModules from './test-modules'; +export * from './db/workflows'; +export * from './db/projects'; +export * from './mocking'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/mocking 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/mocking 2.ts new file mode 100755 index 00000000..c34f8e63 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/mocking 2.ts @@ -0,0 +1,12 @@ +import { Container, type Constructable } from '@n8n/di'; +import { mock } from 'jest-mock-extended'; +import type { DeepPartial } from 'ts-essentials'; + +export const mockInstance = ( + serviceClass: Constructable, + data: DeepPartial | undefined = undefined, +) => { + const instance = mock(data); + Container.set(serviceClass, instance); + return instance; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/random 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/random 2.ts new file mode 100755 index 00000000..e75a1d0d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/random 2.ts @@ -0,0 +1,63 @@ +import { MIN_PASSWORD_CHAR_LENGTH, MAX_PASSWORD_CHAR_LENGTH } from '@n8n/constants'; +import { randomInt, randomString, UPPERCASE_LETTERS } from 'n8n-workflow'; +import type { ICredentialDataDecryptedObject } from 'n8n-workflow'; +import { v4 as uuid } from 'uuid'; + +export type CredentialPayload = { + name: string; + type: string; + data: ICredentialDataDecryptedObject; + isManaged?: boolean; +}; + +export const randomApiKey = () => `n8n_api_${randomString(40)}`; + +export const chooseRandomly = (array: T[]) => array[randomInt(array.length)]; + +const randomUppercaseLetter = () => chooseRandomly(UPPERCASE_LETTERS.split('')); + +export const randomValidPassword = () => + randomString(MIN_PASSWORD_CHAR_LENGTH, MAX_PASSWORD_CHAR_LENGTH - 2) + + randomUppercaseLetter() + + randomInt(10); + +export const randomInvalidPassword = () => + chooseRandomly([ + randomString(1, MIN_PASSWORD_CHAR_LENGTH - 1), + randomString(MAX_PASSWORD_CHAR_LENGTH + 2, MAX_PASSWORD_CHAR_LENGTH + 100), + 'abcdefgh', // valid length, no number, no uppercase + 'abcdefg1', // valid length, has number, no uppercase + 'abcdefgA', // valid length, no number, has uppercase + 'abcdefA', // invalid length, no number, has uppercase + 'abcdef1', // invalid length, has number, no uppercase + 'abcdeA1', // invalid length, has number, has uppercase + 'abcdefg', // invalid length, no number, no uppercase + ]); + +const POPULAR_TOP_LEVEL_DOMAINS = ['com', 'org', 'net', 'io', 'edu']; + +const randomTopLevelDomain = () => chooseRandomly(POPULAR_TOP_LEVEL_DOMAINS); + +export const randomName = () => randomString(4, 8).toLowerCase(); + +export const randomEmail = () => `${randomName()}@${randomName()}.${randomTopLevelDomain()}`; + +export const randomCredentialPayload = ({ + isManaged = false, +}: { isManaged?: boolean } = {}): CredentialPayload => ({ + name: randomName(), + type: randomName(), + data: { accessToken: randomString(6, 16) }, + isManaged, +}); + +export const randomCredentialPayloadWithOauthTokenData = ({ + isManaged = false, +}: { isManaged?: boolean } = {}): CredentialPayload => ({ + name: randomName(), + type: randomName(), + data: { accessToken: randomString(6, 16), oauthTokenData: { access_token: randomString(6, 16) } }, + isManaged, +}); + +export const uniqueId = () => uuid(); diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/test-db 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/test-db 2.ts new file mode 100755 index 00000000..0f579846 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/test-db 2.ts @@ -0,0 +1,86 @@ +import { GlobalConfig } from '@n8n/config'; +import type { entities } from '@n8n/db'; +import { DbConnection, DbConnectionOptions } from '@n8n/db'; +import { Container } from '@n8n/di'; +import type { DataSourceOptions } from '@n8n/typeorm'; +import { DataSource as Connection } from '@n8n/typeorm'; +import { randomString } from 'n8n-workflow'; + +export const testDbPrefix = 'n8n_test_'; + +/** + * Generate options for a bootstrap DB connection, to create and drop test databases. + */ +export const getBootstrapDBOptions = (dbType: 'postgresdb' | 'mysqldb'): DataSourceOptions => { + const globalConfig = Container.get(GlobalConfig); + const type = dbType === 'postgresdb' ? 'postgres' : 'mysql'; + return { + type, + ...Container.get(DbConnectionOptions).getOverrides(dbType), + database: type, + entityPrefix: globalConfig.database.tablePrefix, + schema: dbType === 'postgresdb' ? globalConfig.database.postgresdb.schema : undefined, + }; +}; + +/** + * Initialize one test DB per suite run, with bootstrap connection if needed. + */ +export async function init() { + const globalConfig = Container.get(GlobalConfig); + const dbType = globalConfig.database.type; + const testDbName = `${testDbPrefix}${randomString(6, 10).toLowerCase()}_${Date.now()}`; + + if (dbType === 'postgresdb') { + const bootstrapPostgres = await new Connection( + getBootstrapDBOptions('postgresdb'), + ).initialize(); + await bootstrapPostgres.query(`CREATE DATABASE ${testDbName}`); + await bootstrapPostgres.destroy(); + + globalConfig.database.postgresdb.database = testDbName; + } else if (dbType === 'mysqldb' || dbType === 'mariadb') { + const bootstrapMysql = await new Connection(getBootstrapDBOptions('mysqldb')).initialize(); + await bootstrapMysql.query(`CREATE DATABASE ${testDbName} DEFAULT CHARACTER SET utf8mb4`); + await bootstrapMysql.destroy(); + + globalConfig.database.mysqldb.database = testDbName; + } + + const dbConnection = Container.get(DbConnection); + await dbConnection.init(); + await dbConnection.migrate(); +} + +export function isReady() { + const { connectionState } = Container.get(DbConnection); + return connectionState.connected && connectionState.migrated; +} + +/** + * Drop test DB, closing bootstrap connection if existing. + */ +export async function terminate() { + const dbConnection = Container.get(DbConnection); + await dbConnection.close(); + dbConnection.connectionState.connected = false; +} + +type EntityName = + | keyof typeof entities + | 'InsightsRaw' + | 'InsightsByPeriod' + | 'InsightsMetadata' + | 'DataStore' + | 'DataStoreColumn'; + +/** + * Truncate specific DB tables in a test DB. + */ +export async function truncate(entities: EntityName[]) { + const connection = Container.get(Connection); + + for (const name of entities) { + await connection.getRepository(name).delete({}); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/test-modules 2.ts b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/test-modules 2.ts new file mode 100755 index 00000000..a473a0cd --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/backend-test-utils/src/test-modules 2.ts @@ -0,0 +1,7 @@ +import { ModuleRegistry } from '@n8n/backend-common'; +import type { ModuleName } from '@n8n/backend-common'; +import { Container } from '@n8n/di'; + +export async function loadModules(moduleNames: ModuleName[]) { + await Container.get(ModuleRegistry).loadModules(moduleNames); +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/bin/n8n-benchmark 2 b/n8n-n8n-1.109.2/packages/@n8n/benchmark/bin/n8n-benchmark 2 new file mode 100755 index 00000000..c7f0996f --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/bin/n8n-benchmark 2 @@ -0,0 +1,13 @@ +#!/usr/bin/env node + +// Check if version should be displayed +const versionFlags = ['-v', '-V', '--version']; +if (versionFlags.includes(process.argv.slice(-1)[0])) { + console.log(require('../package').version); + process.exit(0); +} + +(async () => { + const oclif = require('@oclif/core'); + await oclif.execute({ dir: __dirname }); +})(); diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/.terraform.lock 2.hcl b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/.terraform.lock 2.hcl new file mode 100755 index 00000000..30125168 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/.terraform.lock 2.hcl @@ -0,0 +1,60 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/azurerm" { + version = "3.115.0" + constraints = "~> 3.115.0" + hashes = [ + "h1:O7C3Xb+MSOc9C/eAJ5C/CiJ4vuvUsYxxIzr9ZurmHNI=", + "zh:0ea93abd53cb872691bad6d5625bda88b5d9619ea813c208b36e0ee236308589", + "zh:26703cb9c2c38bc43e97bc83af03559d065750856ea85834b71fbcb2ef9d935c", + "zh:316255a3391c49fe9bd7c5b6aa53b56dd490e1083d19b722e7b8f956a2dfe004", + "zh:431637ae90c592126fb1ec813fee6390604275438a0d5e15904c65b0a6a0f826", + "zh:4cee0fa2e84f89853723c0bc72b7debf8ea2ffffc7ae34ff28d8a69269d3a879", + "zh:64a3a3c78ea877515365ed336bd0f3abbe71db7c99b3d2837915fbca168d429c", + "zh:7380d7b503b5a87fd71a31360c3eeab504f78e4f314824e3ceda724d9dc74cf0", + "zh:974213e05708037a6d2d8c58cc84981819138f44fe40e344034eb80e16ca6012", + "zh:9a91614de0476074e9c62bbf08d3bb9c64adbd1d3a4a2b5a3e8e41d9d6d5672f", + "zh:a438471c85b8788ab21bdef4cd5ca391a46cbae33bd0262668a80f5e6c4610e1", + "zh:bf823f2c941b336a1208f015466212b1a8fdf6da28abacf59bea708377709d9e", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} + +provider "registry.terraform.io/hashicorp/random" { + version = "3.6.2" + hashes = [ + "h1:VavG5unYCa3SYISMKF9pzc3718M0bhPlcbUZZGl7wuo=", + "zh:0ef01a4f81147b32c1bea3429974d4d104bbc4be2ba3cfa667031a8183ef88ec", + "zh:1bcd2d8161e89e39886119965ef0f37fcce2da9c1aca34263dd3002ba05fcb53", + "zh:37c75d15e9514556a5f4ed02e1548aaa95c0ecd6ff9af1119ac905144c70c114", + "zh:4210550a767226976bc7e57d988b9ce48f4411fa8a60cd74a6b246baf7589dad", + "zh:562007382520cd4baa7320f35e1370ffe84e46ed4e2071fdc7e4b1a9b1f8ae9b", + "zh:5efb9da90f665e43f22c2e13e0ce48e86cae2d960aaf1abf721b497f32025916", + "zh:6f71257a6b1218d02a573fc9bff0657410404fb2ef23bc66ae8cd968f98d5ff6", + "zh:78d5eefdd9e494defcb3c68d282b8f96630502cac21d1ea161f53cfe9bb483b3", + "zh:9647e18f221380a85f2f0ab387c68fdafd58af6193a932417299cdcae4710150", + "zh:bb6297ce412c3c2fa9fec726114e5e0508dd2638cad6a0cb433194930c97a544", + "zh:f83e925ed73ff8a5ef6e3608ad9225baa5376446349572c2449c0c0b3cf184b7", + "zh:fbef0781cb64de76b1df1ca11078aecba7800d82fd4a956302734999cfd9a4af", + ] +} + +provider "registry.terraform.io/hashicorp/tls" { + version = "4.0.5" + hashes = [ + "h1:zeG5RmggBZW/8JWIVrdaeSJa0OG62uFX5HY1eE8SjzY=", + "zh:01cfb11cb74654c003f6d4e32bbef8f5969ee2856394a96d127da4949c65153e", + "zh:0472ea1574026aa1e8ca82bb6df2c40cd0478e9336b7a8a64e652119a2fa4f32", + "zh:1a8ddba2b1550c5d02003ea5d6cdda2eef6870ece86c5619f33edd699c9dc14b", + "zh:1e3bb505c000adb12cdf60af5b08f0ed68bc3955b0d4d4a126db5ca4d429eb4a", + "zh:6636401b2463c25e03e68a6b786acf91a311c78444b1dc4f97c539f9f78de22a", + "zh:76858f9d8b460e7b2a338c477671d07286b0d287fd2d2e3214030ae8f61dd56e", + "zh:a13b69fb43cb8746793b3069c4d897bb18f454290b496f19d03c3387d1c9a2dc", + "zh:a90ca81bb9bb509063b736842250ecff0f886a91baae8de65c8430168001dad9", + "zh:c4de401395936e41234f1956ebadbd2ed9f414e6908f27d578614aaa529870d4", + "zh:c657e121af8fde19964482997f0de2d5173217274f6997e16389e7707ed8ece8", + "zh:d68b07a67fbd604c38ec9733069fbf23441436fecf554de6c75c032f82e1ef19", + "zh:f569b65999264a9416862bca5cd2a6177d94ccb0424f3a4ef424428912b9cb3c", + ] +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/benchmark-env 2.tf b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/benchmark-env 2.tf new file mode 100755 index 00000000..f6c12415 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/benchmark-env 2.tf @@ -0,0 +1,54 @@ + +data "azurerm_resource_group" "main" { + name = var.resource_group_name +} + +# Random prefix for the resources +resource "random_string" "prefix" { + length = 8 + special = false +} + +# SSH key pair +resource "tls_private_key" "ssh_key" { + algorithm = "RSA" + rsa_bits = 4096 +} + +# Dedicated Host Group & Hosts + +resource "azurerm_dedicated_host_group" "main" { + name = "${random_string.prefix.result}-hostgroup" + location = var.location + resource_group_name = data.azurerm_resource_group.main.name + platform_fault_domain_count = 1 + automatic_placement_enabled = false + zone = 1 + + tags = local.common_tags +} + +resource "azurerm_dedicated_host" "hosts" { + name = "${random_string.prefix.result}-host" + location = var.location + dedicated_host_group_id = azurerm_dedicated_host_group.main.id + sku_name = var.host_size_family + platform_fault_domain = 0 + + tags = local.common_tags +} + +# VM + +module "test_vm" { + source = "./modules/benchmark-vm" + + location = var.location + resource_group_name = data.azurerm_resource_group.main.name + prefix = random_string.prefix.result + dedicated_host_id = azurerm_dedicated_host.hosts.id + ssh_public_key = tls_private_key.ssh_key.public_key_openssh + vm_size = var.vm_size + + tags = local.common_tags +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/output 2.tf b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/output 2.tf new file mode 100755 index 00000000..2ba9be4b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/output 2.tf @@ -0,0 +1,16 @@ +output "vm_name" { + value = module.test_vm.vm_name +} + +output "ip" { + value = module.test_vm.ip +} + +output "ssh_username" { + value = module.test_vm.ssh_username +} + +output "ssh_private_key" { + value = tls_private_key.ssh_key.private_key_pem + sensitive = true +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/providers 2.tf b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/providers 2.tf new file mode 100755 index 00000000..1ce880f5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/providers 2.tf @@ -0,0 +1,23 @@ + +terraform { + required_providers { + azurerm = { + source = "hashicorp/azurerm" + version = "~> 3.115.0" + } + + random = { + source = "hashicorp/random" + } + } + + required_version = "~> 1.8.5" +} + +provider "azurerm" { + features {} + + skip_provider_registration = true +} + +provider "random" {} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/vars 2.tf b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/vars 2.tf new file mode 100755 index 00000000..4159b647 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/infra/vars 2.tf @@ -0,0 +1,34 @@ +variable "location" { + description = "Region to deploy resources" + default = "East US" +} + +variable "resource_group_name" { + description = "Name of the resource group" + default = "n8n-benchmarking" +} + +variable "host_size_family" { + description = "Size Family for the Host Group" + default = "DCSv2-Type1" +} + +variable "vm_size" { + description = "VM Size" + # 8 vCPUs, 32 GiB memory + default = "Standard_DC8_v2" +} + +variable "number_of_vms" { + description = "Number of VMs to create" + default = 1 +} + +locals { + common_tags = { + Id = "N8nBenchmark" + Terraform = "true" + Owner = "Catalysts" + CreatedAt = timestamp() + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scenarios/scenario.schema 2.json b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scenarios/scenario.schema 2.json new file mode 100755 index 00000000..602ddfc4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scenarios/scenario.schema 2.json @@ -0,0 +1,48 @@ +{ + "definitions": { + "ScenarioData": { + "type": "object", + "properties": { + "workflowFiles": { + "type": "array", + "items": { + "type": "string" + } + }, + "credentialFiles": { + "type": "array", + "items": { + "type": "string" + } + } + }, + "required": [], + "additionalProperties": false + } + }, + "type": "object", + "properties": { + "$schema": { + "type": "string", + "description": "The JSON schema to validate this file" + }, + "name": { + "type": "string", + "description": "The name of the scenario" + }, + "description": { + "type": "string", + "description": "A longer description of the scenario" + }, + "scriptPath": { + "type": "string", + "description": "Relative path to the k6 test script" + }, + "scenarioData": { + "$ref": "#/definitions/ScenarioData", + "description": "Data to import before running the scenario" + } + }, + "required": ["name", "description", "scriptPath", "scenarioData"], + "additionalProperties": false +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/bootstrap 2.sh b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/bootstrap 2.sh new file mode 100755 index 00000000..02858094 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/bootstrap 2.sh @@ -0,0 +1,63 @@ +#!/bin/bash +# +# Script to initialize the benchmark environment on a VM +# + +set -euo pipefail; + +CURRENT_USER=$(whoami) + +# Mount the data disk +# First wait for the disk to become available +WAIT_TIME=0 +MAX_WAIT_TIME=60 + +while [ ! -e /dev/sdc ]; do + if [ $WAIT_TIME -ge $MAX_WAIT_TIME ]; then + echo "Error: /dev/sdc did not become available within $MAX_WAIT_TIME seconds." + exit 1 + fi + + echo "Waiting for /dev/sdc to be available... ($WAIT_TIME/$MAX_WAIT_TIME)" + sleep 1 + WAIT_TIME=$((WAIT_TIME + 1)) +done + +# Then mount it +if [ -d "/n8n" ]; then + echo "Data disk already mounted. Clearing it..." + sudo rm -rf /n8n/* + sudo rm -rf /n8n/.[!.]* +else + sudo mkdir -p /n8n + sudo parted /dev/sdc --script mklabel gpt mkpart xfspart xfs 0% 100% + sudo mkfs.xfs /dev/sdc1 + sudo partprobe /dev/sdc1 + sudo mount /dev/sdc1 /n8n + sudo chown -R "$CURRENT_USER":"$CURRENT_USER" /n8n +fi + +### Remove unneeded dependencies +# TTY +sudo systemctl disable getty@tty1.service +sudo systemctl disable serial-getty@ttyS0.service +# Snap +sudo systemctl disable snapd.service +# Unattended upgrades +sudo systemctl disable unattended-upgrades.service +# Cron +sudo systemctl disable cron.service + +# Include nodejs v20 repository +curl -fsSL https://deb.nodesource.com/setup_20.x -o nodesource_setup.sh +sudo -E bash nodesource_setup.sh + +# Install docker, docker compose and nodejs +sudo DEBIAN_FRONTEND=noninteractive apt-get update -yq +sudo DEBIAN_FRONTEND=noninteractive apt-get install -yq docker.io docker-compose nodejs + +# Add the current user to the docker group +sudo usermod -aG docker "$CURRENT_USER" + +# Install zx +npm install zx diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/destroy-cloud-env 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/destroy-cloud-env 2.mjs new file mode 100755 index 00000000..0968c51e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/destroy-cloud-env 2.mjs @@ -0,0 +1,86 @@ +#!/usr/bin/env zx +/** + * Script that deletes all resources created by the benchmark environment. + * + * This scripts tries to delete resources created by Terraform. If Terraform + * state file is not found, it will try to delete resources using Azure CLI. + * The terraform state is not persisted, so we want to support both cases. + */ +// @ts-check +import { $, minimist } from 'zx'; +import { TerraformClient } from './clients/terraform-client.mjs'; + +const RESOURCE_GROUP_NAME = 'n8n-benchmarking'; + +const args = minimist(process.argv.slice(3), { + boolean: ['debug'], +}); + +const isVerbose = !!args.debug; + +async function main() { + const terraformClient = new TerraformClient({ isVerbose }); + + if (terraformClient.hasTerraformState()) { + await terraformClient.destroyEnvironment(); + } else { + await destroyUsingAz(); + } +} + +async function destroyUsingAz() { + const resourcesResult = + await $`az resource list --resource-group ${RESOURCE_GROUP_NAME} --query "[?tags.Id == 'N8nBenchmark'].{id:id, createdAt:tags.CreatedAt}" -o json`; + + const resources = JSON.parse(resourcesResult.stdout); + + const resourcesToDelete = resources.map((resource) => resource.id); + + if (resourcesToDelete.length === 0) { + console.log('No resources found in the resource group.'); + + return; + } + + await deleteResources(resourcesToDelete); +} + +async function deleteResources(resourceIds) { + // We don't know the order in which resource should be deleted. + // Here's a poor person's approach to try deletion until all complete + const MAX_ITERATIONS = 100; + let i = 0; + const toDelete = [...resourceIds]; + + console.log(`Deleting ${resourceIds.length} resources...`); + while (toDelete.length > 0) { + const resourceId = toDelete.shift(); + const deleted = await deleteById(resourceId); + if (!deleted) { + toDelete.push(resourceId); + } + + if (i++ > MAX_ITERATIONS) { + console.log( + `Max iterations reached. Exiting. Could not delete ${toDelete.length} resources.`, + ); + process.exit(1); + } + } +} + +async function deleteById(id) { + try { + await $`az resource delete --ids ${id}`; + return true; + } catch (error) { + return false; + } +} + +main().catch((error) => { + console.error('An error occurred destroying cloud env:'); + console.error(error); + + process.exit(1); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/provision-cloud-env 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/provision-cloud-env 2.mjs new file mode 100755 index 00000000..7a51c96d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/provision-cloud-env 2.mjs @@ -0,0 +1,36 @@ +#!/usr/bin/env zx +/** + * Provisions the cloud benchmark environment + * + * NOTE: Must be run in the root of the package. + */ +// @ts-check +import { which, minimist } from 'zx'; +import { TerraformClient } from './clients/terraform-client.mjs'; + +const args = minimist(process.argv.slice(3), { + boolean: ['debug'], +}); + +const isVerbose = !!args.debug; + +export async function provision() { + await ensureDependencies(); + + const terraformClient = new TerraformClient({ + isVerbose, + }); + + await terraformClient.provisionEnvironment(); +} + +async function ensureDependencies() { + await which('terraform'); +} + +provision().catch((error) => { + console.error('An error occurred while provisioning cloud env:'); + console.error(error); + + process.exit(1); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run 2.mjs new file mode 100755 index 00000000..e848c58f --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run 2.mjs @@ -0,0 +1,186 @@ +#!/usr/bin/env zx +/** + * Script to run benchmarks either on the cloud benchmark environment or locally. + * The cloud environment needs to be provisioned using Terraform before running the benchmarks. + * + * NOTE: Must be run in the root of the package. + */ +// @ts-check +import fs from 'fs'; +import minimist from 'minimist'; +import path from 'path'; +import { runInCloud } from './run-in-cloud.mjs'; +import { runLocally } from './run-locally.mjs'; + +const paths = { + n8nSetupsDir: path.join(path.resolve('scripts'), 'n8n-setups'), +}; + +async function main() { + const config = await parseAndValidateConfig(); + + const n8nSetupsToUse = + config.n8nSetupToUse === 'all' ? readAvailableN8nSetups() : [config.n8nSetupToUse]; + + console.log('Using n8n tag', config.n8nTag); + console.log('Using benchmark cli tag', config.benchmarkTag); + console.log('Using environment', config.env); + console.log('Using n8n setups', n8nSetupsToUse.join(', ')); + console.log(''); + + if (config.env === 'cloud') { + await runInCloud({ + benchmarkTag: config.benchmarkTag, + isVerbose: config.isVerbose, + k6ApiToken: config.k6ApiToken, + resultWebhookUrl: config.resultWebhookUrl, + resultWebhookAuthHeader: config.resultWebhookAuthHeader, + n8nLicenseCert: config.n8nLicenseCert, + n8nTag: config.n8nTag, + n8nSetupsToUse, + vus: config.vus, + duration: config.duration, + }); + } else if (config.env === 'local') { + await runLocally({ + benchmarkTag: config.benchmarkTag, + isVerbose: config.isVerbose, + k6ApiToken: config.k6ApiToken, + resultWebhookUrl: config.resultWebhookUrl, + resultWebhookAuthHeader: config.resultWebhookAuthHeader, + n8nLicenseCert: config.n8nLicenseCert, + n8nTag: config.n8nTag, + runDir: config.runDir, + n8nSetupsToUse, + vus: config.vus, + duration: config.duration, + }); + } else { + console.error('Invalid env:', config.env); + printUsage(); + process.exit(1); + } +} + +function readAvailableN8nSetups() { + const setups = fs.readdirSync(paths.n8nSetupsDir); + + return setups; +} + +/** + * @typedef {Object} Config + * @property {boolean} isVerbose + * @property {'cloud' | 'local'} env + * @property {string} n8nSetupToUse + * @property {string} n8nTag + * @property {string} benchmarkTag + * @property {string} [k6ApiToken] + * @property {string} [resultWebhookUrl] + * @property {string} [resultWebhookAuthHeader] + * @property {string} [n8nLicenseCert] + * @property {string} [runDir] + * @property {string} [vus] + * @property {string} [duration] + * + * @returns {Promise} + */ +async function parseAndValidateConfig() { + const args = minimist(process.argv.slice(3), { + boolean: ['debug', 'help'], + }); + + if (args.help) { + printUsage(); + process.exit(0); + } + + const n8nSetupToUse = await getAndValidateN8nSetup(args); + const isVerbose = args.debug || false; + const n8nTag = args.n8nTag || process.env.N8N_DOCKER_TAG || 'latest'; + const benchmarkTag = args.benchmarkTag || process.env.BENCHMARK_DOCKER_TAG || 'latest'; + const k6ApiToken = args.k6ApiToken || process.env.K6_API_TOKEN || undefined; + const resultWebhookUrl = + args.resultWebhookUrl || process.env.BENCHMARK_RESULT_WEBHOOK_URL || undefined; + const resultWebhookAuthHeader = + args.resultWebhookAuthHeader || process.env.BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER || undefined; + const n8nLicenseCert = args.n8nLicenseCert || process.env.N8N_LICENSE_CERT || undefined; + const runDir = args.runDir || undefined; + const env = args.env || 'local'; + const vus = args.vus; + const duration = args.duration; + + if (!env) { + printUsage(); + process.exit(1); + } + + return { + isVerbose, + env, + n8nSetupToUse, + n8nTag, + benchmarkTag, + k6ApiToken, + resultWebhookUrl, + resultWebhookAuthHeader, + n8nLicenseCert, + runDir, + vus, + duration, + }; +} + +/** + * @param {minimist.ParsedArgs} args + */ +async function getAndValidateN8nSetup(args) { + // Last parameter is the n8n setup to use + const n8nSetupToUse = args._[args._.length - 1]; + if (!n8nSetupToUse || n8nSetupToUse === 'all') { + return 'all'; + } + + const availableSetups = readAvailableN8nSetups(); + + if (!availableSetups.includes(n8nSetupToUse)) { + printUsage(); + process.exit(1); + } + + return n8nSetupToUse; +} + +function printUsage() { + const availableSetups = readAvailableN8nSetups(); + + console.log(`Usage: zx scripts/${path.basename(__filename)} [n8n setup name]`); + console.log(` eg: zx scripts/${path.basename(__filename)}`); + console.log(''); + console.log('Options:'); + console.log( + ` [n8n setup name] Against which n8n setup to run the benchmarks. One of: ${['all', ...availableSetups].join(', ')}. Default is all`, + ); + console.log( + ' --env Env where to run the benchmarks. Either cloud or local. Default is local.', + ); + console.log(' --debug Enable verbose output'); + console.log(' --n8nTag Docker tag for n8n image. Default is latest'); + console.log(' --benchmarkTag Docker tag for benchmark cli image. Default is latest'); + console.log(' --vus How many concurrent requests to make'); + console.log(' --duration Test duration, e.g. 1m or 30s'); + console.log( + ' --k6ApiToken API token for k6 cloud. Default is read from K6_API_TOKEN env var. If omitted, k6 cloud will not be used', + ); + console.log( + ' --runDir Directory to share with the n8n container for storing data. Needed only for local runs.', + ); + console.log(''); +} + +main().catch((error) => { + console.error('An error occurred while running the benchmarks:'); + console.error(error); + + process.exit(1); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-for-n8n-setup 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-for-n8n-setup 2.mjs new file mode 100755 index 00000000..8c8ea5f6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-for-n8n-setup 2.mjs @@ -0,0 +1,158 @@ +#!/usr/bin/env zx +/** + * This script runs the benchmarks for the given n8n setup. + */ +// @ts-check +import path from 'path'; +import { $, argv, fs } from 'zx'; +import { DockerComposeClient } from './clients/docker-compose-client.mjs'; +import { flagsObjectToCliArgs } from './utils/flags.mjs'; + +const paths = { + n8nSetupsDir: path.join(__dirname, 'n8n-setups'), + mockApiDataPath: path.join(__dirname, 'mock-api'), +}; + +const N8N_ENCRYPTION_KEY = 'very-secret-encryption-key'; + +async function main() { + const [n8nSetupToUse] = argv._; + validateN8nSetup(n8nSetupToUse); + + const composeFilePath = path.join(paths.n8nSetupsDir, n8nSetupToUse); + const setupScriptPath = path.join(paths.n8nSetupsDir, n8nSetupToUse, 'setup.mjs'); + const n8nTag = argv.n8nDockerTag || process.env.N8N_DOCKER_TAG || 'latest'; + const benchmarkTag = argv.benchmarkDockerTag || process.env.BENCHMARK_DOCKER_TAG || 'latest'; + const k6ApiToken = argv.k6ApiToken || process.env.K6_API_TOKEN || undefined; + const resultWebhookUrl = + argv.resultWebhookUrl || process.env.BENCHMARK_RESULT_WEBHOOK_URL || undefined; + const resultWebhookAuthHeader = + argv.resultWebhookAuthHeader || process.env.BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER || undefined; + const baseRunDir = argv.runDir || process.env.RUN_DIR || '/n8n'; + const n8nLicenseCert = argv.n8nLicenseCert || process.env.N8N_LICENSE_CERT || undefined; + const n8nLicenseActivationKey = process.env.N8N_LICENSE_ACTIVATION_KEY || undefined; + const n8nLicenseTenantId = argv.n8nLicenseTenantId || process.env.N8N_LICENSE_TENANT_ID || '1'; + const envTag = argv.env || 'local'; + const vus = argv.vus; + const duration = argv.duration; + + const hasN8nLicense = !!n8nLicenseCert || !!n8nLicenseActivationKey; + if (n8nSetupToUse === 'scaling-multi-main' && !hasN8nLicense) { + console.error( + 'n8n license is required to run the multi-main scaling setup. Please provide N8N_LICENSE_CERT or N8N_LICENSE_ACTIVATION_KEY (and N8N_LICENSE_TENANT_ID if needed)', + ); + process.exit(1); + } + + if (!fs.existsSync(baseRunDir)) { + console.error( + `The run directory "${baseRunDir}" does not exist. Please specify a valid directory using --runDir`, + ); + process.exit(1); + } + + const runDir = path.join(baseRunDir, n8nSetupToUse); + fs.emptyDirSync(runDir); + + const dockerComposeClient = new DockerComposeClient({ + $: $({ + cwd: composeFilePath, + verbose: true, + env: { + PATH: process.env.PATH, + N8N_VERSION: n8nTag, + N8N_LICENSE_CERT: n8nLicenseCert, + N8N_LICENSE_ACTIVATION_KEY: n8nLicenseActivationKey, + N8N_LICENSE_TENANT_ID: n8nLicenseTenantId, + N8N_ENCRYPTION_KEY, + BENCHMARK_VERSION: benchmarkTag, + K6_API_TOKEN: k6ApiToken, + BENCHMARK_RESULT_WEBHOOK_URL: resultWebhookUrl, + BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER: resultWebhookAuthHeader, + RUN_DIR: runDir, + MOCK_API_DATA_PATH: paths.mockApiDataPath, + }, + }), + }); + + // Run the setup script if it exists + if (fs.existsSync(setupScriptPath)) { + const setupScript = await import(setupScriptPath); + await setupScript.setup({ runDir }); + } + + try { + await dockerComposeClient.$('up', '-d', '--remove-orphans', 'n8n'); + + const tags = Object.entries({ + Env: envTag, + N8nVersion: n8nTag, + N8nSetup: n8nSetupToUse, + }) + .map(([key, value]) => `${key}=${value}`) + .join(','); + + const cliArgs = flagsObjectToCliArgs({ + scenarioNamePrefix: n8nSetupToUse, + vus, + duration, + tags, + }); + + await dockerComposeClient.$('run', 'benchmark', 'run', ...cliArgs); + } catch (error) { + console.error('An error occurred while running the benchmarks:'); + console.error(error.message); + console.error(''); + await printContainerStatus(dockerComposeClient); + } finally { + await dumpLogs(dockerComposeClient); + await dockerComposeClient.$('down'); + } +} + +async function printContainerStatus(dockerComposeClient) { + console.error('Container statuses:'); + await dockerComposeClient.$('ps', '-a'); +} + +async function dumpLogs(dockerComposeClient) { + console.info('Container logs:'); + await dockerComposeClient.$('logs'); +} + +function printUsage() { + const availableSetups = getAllN8nSetups(); + console.log('Usage: zx runForN8nSetup.mjs --runDir /path/for/n8n/data '); + console.log(` eg: zx runForN8nSetup.mjs --runDir /path/for/n8n/data ${availableSetups[0]}`); + console.log(''); + console.log('Flags:'); + console.log( + ' --runDir Directory to share with the n8n container for storing data. Default is /n8n', + ); + console.log(' --n8nDockerTag Docker tag for n8n image. Default is latest'); + console.log( + ' --benchmarkDockerTag Docker tag for benchmark cli image. Default is latest', + ); + console.log(' --k6ApiToken K6 API token to upload the results'); + console.log(''); + console.log('Available setups:'); + console.log(availableSetups.join(', ')); +} + +/** + * @returns {string[]} + */ +function getAllN8nSetups() { + return fs.readdirSync(paths.n8nSetupsDir); +} + +function validateN8nSetup(givenSetup) { + const availableSetups = getAllN8nSetups(); + if (!availableSetups.includes(givenSetup)) { + printUsage(); + process.exit(1); + } +} + +main(); diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-in-cloud 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-in-cloud 2.mjs new file mode 100755 index 00000000..35e90bde --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-in-cloud 2.mjs @@ -0,0 +1,154 @@ +#!/usr/bin/env zx +/** + * Script to run benchmarks on the cloud benchmark environment. + * This script will: + * 1. Provision a benchmark environment using Terraform. + * 2. Run the benchmarks on the VM. + * 3. Destroy the cloud environment. + * + * NOTE: Must be run in the root of the package. + */ +// @ts-check +import { sleep, which, $, tmpdir } from 'zx'; +import path from 'path'; +import { SshClient } from './clients/ssh-client.mjs'; +import { TerraformClient } from './clients/terraform-client.mjs'; +import { flagsObjectToCliArgs } from './utils/flags.mjs'; + +/** + * @typedef {Object} BenchmarkEnv + * @property {string} vmName + * @property {string} ip + * @property {string} sshUsername + * @property {string} sshPrivateKeyPath + */ + +/** + * @typedef {Object} Config + * @property {boolean} isVerbose + * @property {string[]} n8nSetupsToUse + * @property {string} n8nTag + * @property {string} benchmarkTag + * @property {string} [k6ApiToken] + * @property {string} [resultWebhookUrl] + * @property {string} [resultWebhookAuthHeader] + * @property {string} [n8nLicenseCert] + * @property {string} [vus] + * @property {string} [duration] + * + * @param {Config} config + */ +export async function runInCloud(config) { + await ensureDependencies(); + + const terraformClient = new TerraformClient({ + isVerbose: config.isVerbose, + }); + + const benchmarkEnv = await terraformClient.getTerraformOutputs(); + + await runBenchmarksOnVm(config, benchmarkEnv); +} + +async function ensureDependencies() { + await which('terraform'); + await which('az'); +} + +/** + * @param {Config} config + * @param {BenchmarkEnv} benchmarkEnv + */ +async function runBenchmarksOnVm(config, benchmarkEnv) { + console.log(`Setting up the environment...`); + + const sshClient = new SshClient({ + ip: benchmarkEnv.ip, + username: benchmarkEnv.sshUsername, + privateKeyPath: benchmarkEnv.sshPrivateKeyPath, + verbose: config.isVerbose, + }); + + await ensureVmIsReachable(sshClient); + + const scriptsDir = await transferScriptsToVm(sshClient, config); + + // Bootstrap the environment with dependencies + console.log('Running bootstrap script...'); + const bootstrapScriptPath = path.join(scriptsDir, 'bootstrap.sh'); + await sshClient.ssh(`chmod a+x ${bootstrapScriptPath} && ${bootstrapScriptPath}`); + + // Give some time for the VM to be ready + await sleep(1000); + + for (const n8nSetup of config.n8nSetupsToUse) { + await runBenchmarkForN8nSetup({ + config, + sshClient, + scriptsDir, + n8nSetup, + }); + } +} + +/** + * @param {{ config: Config; sshClient: any; scriptsDir: string; n8nSetup: string; }} opts + */ +async function runBenchmarkForN8nSetup({ config, sshClient, scriptsDir, n8nSetup }) { + console.log(`Running benchmarks for ${n8nSetup}...`); + const runScriptPath = path.join(scriptsDir, 'run-for-n8n-setup.mjs'); + + const cliArgs = flagsObjectToCliArgs({ + n8nDockerTag: config.n8nTag, + benchmarkDockerTag: config.benchmarkTag, + k6ApiToken: config.k6ApiToken, + resultWebhookUrl: config.resultWebhookUrl, + resultWebhookAuthHeader: config.resultWebhookAuthHeader, + n8nLicenseCert: config.n8nLicenseCert, + vus: config.vus, + duration: config.duration, + env: 'cloud', + }); + + const flagsString = cliArgs.join(' '); + + await sshClient.ssh(`npx zx ${runScriptPath} ${flagsString} ${n8nSetup}`, { + // Test run should always log its output + verbose: true, + }); +} + +async function ensureVmIsReachable(sshClient) { + try { + await sshClient.ssh('echo "VM is reachable"'); + } catch (error) { + console.error(`VM is not reachable: ${error.message}`); + console.error( + `Did you provision the cloud environment first with 'pnpm provision-cloud-env'? You can also run the benchmarks locally with 'pnpm run benchmark-locally'.`, + ); + process.exit(1); + } +} + +/** + * @returns Path where the scripts are located on the VM + */ +async function transferScriptsToVm(sshClient, config) { + const cwd = process.cwd(); + const scriptsDir = path.resolve(cwd, './scripts'); + const tarFilename = 'scripts.tar.gz'; + const scriptsTarPath = path.join(tmpdir('n8n-benchmark'), tarFilename); + + const $$ = $({ verbose: config.isVerbose }); + + // Compress the scripts folder + await $$`tar -czf ${scriptsTarPath} ${scriptsDir} -C ${cwd} ./scripts`; + + // Transfer the scripts to the VM + await sshClient.scp(scriptsTarPath, `~/${tarFilename}`); + + // Extract the scripts on the VM + await sshClient.ssh(`tar -xzf ~/${tarFilename}`); + + return '~/scripts'; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-locally 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-locally 2.mjs new file mode 100755 index 00000000..b2caec52 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/benchmark/scripts/run-locally 2.mjs @@ -0,0 +1,71 @@ +#!/usr/bin/env zx +/** + * Script to run benchmarks on the cloud benchmark environment. + * This script will: + * 1. Provision a benchmark environment using Terraform. + * 2. Run the benchmarks on the VM. + * 3. Destroy the cloud environment. + * + * NOTE: Must be run in the root of the package. + */ +// @ts-check +import { $ } from 'zx'; +import path from 'path'; +import { flagsObjectToCliArgs } from './utils/flags.mjs'; + +/** + * @typedef {Object} BenchmarkEnv + * @property {string} vmName + */ + +const paths = { + scriptsDir: path.join(path.resolve('scripts')), +}; + +/** + * @typedef {Object} Config + * @property {boolean} isVerbose + * @property {string[]} n8nSetupsToUse + * @property {string} n8nTag + * @property {string} benchmarkTag + * @property {string} [runDir] + * @property {string} [k6ApiToken] + * @property {string} [resultWebhookUrl] + * @property {string} [resultWebhookAuthHeader] + * @property {string} [n8nLicenseCert] + * @property {string} [vus] + * @property {string} [duration] + * + * @param {Config} config + */ +export async function runLocally(config) { + const runScriptPath = path.join(paths.scriptsDir, 'run-for-n8n-setup.mjs'); + + const cliArgs = flagsObjectToCliArgs({ + n8nDockerTag: config.n8nTag, + benchmarkDockerTag: config.benchmarkTag, + runDir: config.runDir, + vus: config.vus, + duration: config.duration, + env: 'local', + }); + + try { + for (const n8nSetup of config.n8nSetupsToUse) { + console.log(`Running benchmarks for n8n setup: ${n8nSetup}`); + + await $({ + env: { + ...process.env, + K6_API_TOKEN: config.k6ApiToken, + BENCHMARK_RESULT_WEBHOOK_URL: config.resultWebhookUrl, + BENCHMARK_RESULT_WEBHOOK_AUTH_HEADER: config.resultWebhookAuthHeader, + N8N_LICENSE_CERT: config.n8nLicenseCert, + }, + })`npx ${runScriptPath} ${cliArgs} ${n8nSetup}`; + } + } catch (error) { + console.error('An error occurred while running the benchmarks:'); + console.error(error); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/client-oauth2 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/client-oauth2 2.ts new file mode 100755 index 00000000..5bbbde43 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/client-oauth2 2.ts @@ -0,0 +1,144 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import axios from 'axios'; +import type { AxiosRequestConfig, AxiosResponse } from 'axios'; +import { Agent } from 'https'; +import * as qs from 'querystring'; + +import type { ClientOAuth2TokenData } from './client-oauth2-token'; +import { ClientOAuth2Token } from './client-oauth2-token'; +import { CodeFlow } from './code-flow'; +import { CredentialsFlow } from './credentials-flow'; +import type { Headers, OAuth2AccessTokenErrorResponse } from './types'; +import { getAuthError } from './utils'; + +export interface ClientOAuth2RequestObject { + url: string; + method: 'DELETE' | 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT'; + body?: Record; + query?: qs.ParsedUrlQuery; + headers?: Headers; + ignoreSSLIssues?: boolean; +} + +export interface ClientOAuth2Options { + clientId: string; + clientSecret?: string; + accessTokenUri: string; + authentication?: 'header' | 'body'; + authorizationUri?: string; + redirectUri?: string; + scopes?: string[]; + scopesSeparator?: ',' | ' '; + authorizationGrants?: string[]; + state?: string; + additionalBodyProperties?: Record; + body?: Record; + query?: qs.ParsedUrlQuery; + ignoreSSLIssues?: boolean; +} + +export class ResponseError extends Error { + constructor( + readonly status: number, + readonly body: unknown, + readonly code = 'ESTATUS', + readonly message = `HTTP status ${status}`, + ) { + super(message); + } +} + +const sslIgnoringAgent = new Agent({ rejectUnauthorized: false }); + +/** + * Construct an object that can handle the multiple OAuth 2.0 flows. + */ +export class ClientOAuth2 { + code: CodeFlow; + + credentials: CredentialsFlow; + + constructor(readonly options: ClientOAuth2Options) { + this.code = new CodeFlow(this); + this.credentials = new CredentialsFlow(this); + } + + /** + * Create a new token from existing data. + */ + createToken(data: ClientOAuth2TokenData, type?: string): ClientOAuth2Token { + return new ClientOAuth2Token(this, { + ...data, + ...(typeof type === 'string' ? { token_type: type } : type), + }); + } + + /** + * Request an access token from the OAuth2 server. + * + * @throws {ResponseError} If the response is an unexpected status code. + * @throws {AuthError} If the response is an authentication error. + */ + async accessTokenRequest(options: ClientOAuth2RequestObject): Promise { + let url = options.url; + const query = qs.stringify(options.query); + + if (query) { + url += (url.indexOf('?') === -1 ? '?' : '&') + query; + } + + const requestConfig: AxiosRequestConfig = { + url, + method: options.method, + data: qs.stringify(options.body), + headers: options.headers, + transformResponse: (res: unknown) => res, + // Axios rejects the promise by default for all status codes 4xx. + // We override this to reject promises only on 5xxs + validateStatus: (status) => status < 500, + }; + + if (options.ignoreSSLIssues) { + requestConfig.httpsAgent = sslIgnoringAgent; + } + + const response = await axios.request(requestConfig); + + if (response.status >= 400) { + const body = this.parseResponseBody(response); + const authErr = getAuthError(body); + + if (authErr) throw authErr; + else throw new ResponseError(response.status, response.data); + } + + if (response.status >= 300) { + throw new ResponseError(response.status, response.data); + } + + return this.parseResponseBody(response); + } + + /** + * Attempt to parse response body based on the content type. + */ + private parseResponseBody(response: AxiosResponse): T { + const contentType = (response.headers['content-type'] as string) ?? ''; + const body = response.data as string; + + if (contentType.startsWith('application/json')) { + return JSON.parse(body) as T; + } + + if (contentType.startsWith('application/x-www-form-urlencoded')) { + return qs.parse(body) as T; + } + + throw new ResponseError( + response.status, + body, + undefined, + `Unsupported content type: ${contentType}`, + ); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/client-oauth2-token 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/client-oauth2-token 2.ts new file mode 100755 index 00000000..03f27dca --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/client-oauth2-token 2.ts @@ -0,0 +1,113 @@ +import * as a from 'node:assert'; + +import type { ClientOAuth2, ClientOAuth2Options, ClientOAuth2RequestObject } from './client-oauth2'; +import { DEFAULT_HEADERS } from './constants'; +import { auth, expects, getRequestOptions } from './utils'; + +export interface ClientOAuth2TokenData extends Record { + token_type?: string | undefined; + access_token: string; + refresh_token: string; + expires_in?: string; + scope?: string | undefined; +} + +/** + * General purpose client token generator. + */ +export class ClientOAuth2Token { + readonly tokenType?: string; + + readonly accessToken: string; + + readonly refreshToken: string; + + private expires: Date; + + constructor( + readonly client: ClientOAuth2, + readonly data: ClientOAuth2TokenData, + ) { + this.tokenType = data.token_type?.toLowerCase() ?? 'bearer'; + this.accessToken = data.access_token; + this.refreshToken = data.refresh_token; + + this.expires = new Date(); + this.expires.setSeconds(this.expires.getSeconds() + Number(data.expires_in)); + } + + /** + * Sign a standardized request object with user authentication information. + */ + sign(requestObject: ClientOAuth2RequestObject): ClientOAuth2RequestObject { + if (!this.accessToken) { + throw new Error('Unable to sign without access token'); + } + + requestObject.headers = requestObject.headers ?? {}; + + if (this.tokenType === 'bearer') { + requestObject.headers.Authorization = 'Bearer ' + this.accessToken; + } else { + const parts = requestObject.url.split('#'); + const token = 'access_token=' + this.accessToken; + const url = parts[0].replace(/[?&]access_token=[^&#]/, ''); + const fragment = parts[1] ? '#' + parts[1] : ''; + + // Prepend the correct query string parameter to the url. + requestObject.url = url + (url.indexOf('?') > -1 ? '&' : '?') + token + fragment; + + // Attempt to avoid storing the url in proxies, since the access token + // is exposed in the query parameters. + requestObject.headers.Pragma = 'no-store'; + requestObject.headers['Cache-Control'] = 'no-store'; + } + + return requestObject; + } + + /** + * Refresh a user access token with the refresh token. + * As in RFC 6749 Section 6: https://www.rfc-editor.org/rfc/rfc6749.html#section-6 + */ + async refresh(opts?: ClientOAuth2Options): Promise { + const options = { ...this.client.options, ...opts }; + + expects(options, 'clientSecret'); + a.ok(this.refreshToken, 'refreshToken is required'); + + const { clientId, clientSecret } = options; + const headers = { ...DEFAULT_HEADERS }; + const body: Record = { + refresh_token: this.refreshToken, + grant_type: 'refresh_token', + }; + + if (options.authentication === 'body') { + body.client_id = clientId; + body.client_secret = clientSecret; + } else { + headers.Authorization = auth(clientId, clientSecret); + } + + const requestOptions = getRequestOptions( + { + url: options.accessTokenUri, + method: 'POST', + headers, + body, + }, + options, + ); + + const responseData = await this.client.accessTokenRequest(requestOptions); + return this.client.createToken({ ...this.data, ...responseData }); + } + + /** + * Check whether the token has expired. + */ + expired(): boolean { + return Date.now() > this.expires.getTime(); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/code-flow 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/code-flow 2.ts new file mode 100755 index 00000000..d28091c6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/code-flow 2.ts @@ -0,0 +1,123 @@ +import * as qs from 'querystring'; + +import type { ClientOAuth2, ClientOAuth2Options } from './client-oauth2'; +import type { ClientOAuth2Token } from './client-oauth2-token'; +import { DEFAULT_HEADERS, DEFAULT_URL_BASE } from './constants'; +import { auth, expects, getAuthError, getRequestOptions } from './utils'; + +interface CodeFlowBody { + code: string | string[]; + grant_type: 'authorization_code'; + redirect_uri?: string; + client_id?: string; +} + +/** + * Support authorization code OAuth 2.0 grant. + * + * Reference: http://tools.ietf.org/html/rfc6749#section-4.1 + */ +export class CodeFlow { + constructor(private client: ClientOAuth2) {} + + /** + * Generate the uri for doing the first redirect. + */ + getUri(opts?: Partial): string { + const options: ClientOAuth2Options = { ...this.client.options, ...opts }; + + // Check the required parameters are set. + expects(options, 'clientId', 'authorizationUri'); + + const url = new URL(options.authorizationUri); + + const queryParams = { + ...options.query, + client_id: options.clientId, + redirect_uri: options.redirectUri, + response_type: 'code', + state: options.state, + ...(options.scopes ? { scope: options.scopes.join(options.scopesSeparator ?? ' ') } : {}), + }; + + for (const [key, value] of Object.entries(queryParams)) { + if (value !== null && value !== undefined) { + url.searchParams.append(key, value); + } + } + + return url.toString(); + } + + /** + * Get the code token from the redirected uri and make another request for + * the user access token. + */ + async getToken( + urlString: string, + opts?: Partial, + ): Promise { + const options: ClientOAuth2Options = { ...this.client.options, ...opts }; + expects(options, 'clientId', 'accessTokenUri'); + + const url = new URL(urlString, DEFAULT_URL_BASE); + if ( + typeof options.redirectUri === 'string' && + typeof url.pathname === 'string' && + url.pathname !== new URL(options.redirectUri, DEFAULT_URL_BASE).pathname + ) { + throw new TypeError('Redirected path should match configured path, but got: ' + url.pathname); + } + + if (!url.search?.substring(1)) { + throw new TypeError(`Unable to process uri: ${urlString}`); + } + + const data = + typeof url.search === 'string' ? qs.parse(url.search.substring(1)) : url.search || {}; + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment + // @ts-ignore + const error = getAuthError(data); + if (error) throw error; + + if (options.state && data.state !== options.state) { + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions + throw new TypeError(`Invalid state: ${data.state}`); + } + + // Check whether the response code is set. + if (!data.code) { + throw new TypeError('Missing code, unable to request token'); + } + + const headers = { ...DEFAULT_HEADERS }; + const body: CodeFlowBody = { + code: data.code, + grant_type: 'authorization_code', + redirect_uri: options.redirectUri, + }; + + // `client_id`: REQUIRED, if the client is not authenticating with the + // authorization server as described in Section 3.2.1. + // Reference: https://tools.ietf.org/html/rfc6749#section-3.2.1 + if (options.clientSecret) { + headers.Authorization = auth(options.clientId, options.clientSecret); + } else { + body.client_id = options.clientId; + } + + const requestOptions = getRequestOptions( + { + url: options.accessTokenUri, + method: 'POST', + headers, + body, + }, + options, + ); + + const responseData = await this.client.accessTokenRequest(requestOptions); + return this.client.createToken(responseData); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/constants 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/constants 2.ts new file mode 100755 index 00000000..a6f9d5f0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/constants 2.ts @@ -0,0 +1,62 @@ +import type { Headers } from './types'; + +export const DEFAULT_URL_BASE = 'https://example.org/'; + +/** + * Default headers for executing OAuth 2.0 flows. + */ +export const DEFAULT_HEADERS: Headers = { + Accept: 'application/json, application/x-www-form-urlencoded', + 'Content-Type': 'application/x-www-form-urlencoded', +}; + +/** + * Format error response types to regular strings for displaying to clients. + * + * Reference: http://tools.ietf.org/html/rfc6749#section-4.1.2.1 + */ +export const ERROR_RESPONSES: Record = { + invalid_request: [ + 'The request is missing a required parameter, includes an', + 'invalid parameter value, includes a parameter more than', + 'once, or is otherwise malformed.', + ].join(' '), + invalid_client: [ + 'Client authentication failed (e.g., unknown client, no', + 'client authentication included, or unsupported', + 'authentication method).', + ].join(' '), + invalid_grant: [ + 'The provided authorization grant (e.g., authorization', + 'code, resource owner credentials) or refresh token is', + 'invalid, expired, revoked, does not match the redirection', + 'URI used in the authorization request, or was issued to', + 'another client.', + ].join(' '), + unauthorized_client: [ + 'The client is not authorized to request an authorization', + 'code using this method.', + ].join(' '), + unsupported_grant_type: [ + 'The authorization grant type is not supported by the', + 'authorization server.', + ].join(' '), + access_denied: ['The resource owner or authorization server denied the request.'].join(' '), + unsupported_response_type: [ + 'The authorization server does not support obtaining', + 'an authorization code using this method.', + ].join(' '), + invalid_scope: ['The requested scope is invalid, unknown, or malformed.'].join(' '), + server_error: [ + 'The authorization server encountered an unexpected', + 'condition that prevented it from fulfilling the request.', + '(This error code is needed because a 500 Internal Server', + 'Error HTTP status code cannot be returned to the client', + 'via an HTTP redirect.)', + ].join(' '), + temporarily_unavailable: [ + 'The authorization server is currently unable to handle', + 'the request due to a temporary overloading or maintenance', + 'of the server.', + ].join(' '), +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/credentials-flow 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/credentials-flow 2.ts new file mode 100755 index 00000000..2abcc4bb --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/credentials-flow 2.ts @@ -0,0 +1,62 @@ +import type { ClientOAuth2 } from './client-oauth2'; +import type { ClientOAuth2Token } from './client-oauth2-token'; +import { DEFAULT_HEADERS } from './constants'; +import type { Headers } from './types'; +import { auth, expects, getRequestOptions } from './utils'; + +interface CredentialsFlowBody { + client_id?: string; + client_secret?: string; + grant_type: 'client_credentials'; + scope?: string; +} + +/** + * Support client credentials OAuth 2.0 grant. + * + * Reference: http://tools.ietf.org/html/rfc6749#section-4.4 + */ +export class CredentialsFlow { + constructor(private client: ClientOAuth2) {} + + /** + * Request an access token using the client credentials. + */ + async getToken(): Promise { + const options = { ...this.client.options }; + expects(options, 'clientId', 'clientSecret', 'accessTokenUri'); + + const headers: Headers = { ...DEFAULT_HEADERS }; + const body: CredentialsFlowBody = { + grant_type: 'client_credentials', + ...(options.additionalBodyProperties ?? {}), + }; + + if (options.scopes !== undefined) { + body.scope = options.scopes.join(options.scopesSeparator ?? ' '); + } + + const clientId = options.clientId; + const clientSecret = options.clientSecret; + + if (options.authentication === 'body') { + body.client_id = clientId; + body.client_secret = clientSecret; + } else { + headers.Authorization = auth(clientId, clientSecret); + } + + const requestOptions = getRequestOptions( + { + url: options.accessTokenUri, + method: 'POST', + headers, + body, + }, + options, + ); + + const responseData = await this.client.accessTokenRequest(requestOptions); + return this.client.createToken(responseData); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/index 2.ts new file mode 100755 index 00000000..d3a807af --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/index 2.ts @@ -0,0 +1,3 @@ +export { ClientOAuth2, ClientOAuth2Options, ClientOAuth2RequestObject } from './client-oauth2'; +export { ClientOAuth2Token, ClientOAuth2TokenData } from './client-oauth2-token'; +export type * from './types'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/types 2.ts new file mode 100755 index 00000000..6fed2b28 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/types 2.ts @@ -0,0 +1,31 @@ +export type Headers = Record; + +export type OAuth2GrantType = 'pkce' | 'authorizationCode' | 'clientCredentials'; + +export interface OAuth2CredentialData { + clientId: string; + clientSecret?: string; + accessTokenUrl: string; + authentication?: 'header' | 'body'; + authUrl?: string; + scope?: string; + authQueryParameters?: string; + additionalBodyProperties?: string; + grantType: OAuth2GrantType; + ignoreSSLIssues?: boolean; + oauthTokenData?: { + access_token: string; + refresh_token?: string; + }; +} + +/** + * The response from the OAuth2 server when the access token is not successfully + * retrieved. As specified in RFC 6749 Section 5.2: + * https://www.rfc-editor.org/rfc/rfc6749.html#section-5.2 + */ +export interface OAuth2AccessTokenErrorResponse extends Record { + error: string; + error_description?: string; + error_uri?: string; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/utils 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/utils 2.ts new file mode 100755 index 00000000..0704bcaa --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/src/utils 2.ts @@ -0,0 +1,82 @@ +/* eslint-disable @typescript-eslint/no-explicit-any */ +import type { ClientOAuth2Options, ClientOAuth2RequestObject } from './client-oauth2'; +import { ERROR_RESPONSES } from './constants'; + +/** + * Check if properties exist on an object and throw when they aren't. + */ +export function expects( + obj: ClientOAuth2Options, + ...keys: Keys[] +): asserts obj is ClientOAuth2Options & { + [K in Keys]: NonNullable; +} { + for (const key of keys) { + if (obj[key] === null || obj[key] === undefined) { + throw new TypeError('Expected "' + key + '" to exist'); + } + } +} + +export class AuthError extends Error { + constructor( + message: string, + readonly body: any, + readonly code = 'EAUTH', + ) { + super(message); + } +} + +/** + * Pull an authentication error from the response data. + */ +export function getAuthError(body: { + error: string; + error_description?: string; +}): Error | undefined { + const message: string | undefined = + ERROR_RESPONSES[body.error] ?? body.error_description ?? body.error; + + if (message) { + return new AuthError(message, body); + } + + return undefined; +} + +/** + * Ensure a value is a string. + */ +function toString(str: string | null | undefined) { + return str === null ? '' : String(str); +} + +/** + * Create basic auth header. + */ +export function auth(username: string, password: string): string { + return 'Basic ' + Buffer.from(toString(username) + ':' + toString(password)).toString('base64'); +} + +/** + * Merge request options from an options object. + */ +export function getRequestOptions( + { url, method, body, query, headers }: ClientOAuth2RequestObject, + options: ClientOAuth2Options, +): ClientOAuth2RequestObject { + const rOptions = { + url, + method, + body: { ...body, ...options.body }, + query: { ...query, ...options.query }, + headers: headers ?? {}, + ignoreSSLIssues: options.ignoreSSLIssues, + }; + // if request authorization was overridden delete it from header + if (rOptions.headers.Authorization === '') { + delete rOptions.headers.Authorization; + } + return rOptions; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/client-oauth2.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/client-oauth2.test 2.ts new file mode 100755 index 00000000..4d5126ac --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/client-oauth2.test 2.ts @@ -0,0 +1,168 @@ +import axios from 'axios'; +import nock from 'nock'; + +import { ClientOAuth2, ResponseError } from '@/client-oauth2'; +import { ERROR_RESPONSES } from '@/constants'; +import { auth, AuthError } from '@/utils'; + +import * as config from './config'; + +describe('ClientOAuth2', () => { + const client = new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authentication: 'header', + }); + + beforeAll(async () => { + nock.disableNetConnect(); + }); + + afterAll(() => { + nock.restore(); + }); + + describe('accessTokenRequest', () => { + const authHeader = auth(config.clientId, config.clientSecret); + + const makeTokenCall = async () => + await client.accessTokenRequest({ + url: config.accessTokenUri, + method: 'POST', + headers: { + Authorization: authHeader, + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + }, + body: { + refresh_token: 'test', + grant_type: 'refresh_token', + }, + }); + + const mockTokenResponse = ({ + status = 200, + headers, + body, + }: { + status: number; + body: string; + headers: Record; + }) => + nock(config.baseUrl).post('/login/oauth/access_token').once().reply(status, body, headers); + + it('should send the correct request based on given options', async () => { + mockTokenResponse({ + status: 200, + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ + access_token: config.accessToken, + refresh_token: config.refreshToken, + }), + }); + + const axiosSpy = jest.spyOn(axios, 'request'); + + await makeTokenCall(); + + expect(axiosSpy).toHaveBeenCalledWith( + expect.objectContaining({ + url: config.accessTokenUri, + method: 'POST', + data: 'refresh_token=test&grant_type=refresh_token', + headers: { + Authorization: authHeader, + Accept: 'application/json', + 'Content-Type': 'application/x-www-form-urlencoded', + }, + }), + ); + }); + + test.each([ + { + contentType: 'application/json', + body: JSON.stringify({ + access_token: config.accessToken, + refresh_token: config.refreshToken, + }), + }, + { + contentType: 'application/json; charset=utf-8', + body: JSON.stringify({ + access_token: config.accessToken, + refresh_token: config.refreshToken, + }), + }, + { + contentType: 'application/x-www-form-urlencoded', + body: `access_token=${config.accessToken}&refresh_token=${config.refreshToken}`, + }, + ])('should parse response with content type $contentType', async ({ contentType, body }) => { + mockTokenResponse({ + status: 200, + headers: { 'Content-Type': contentType }, + body, + }); + + const response = await makeTokenCall(); + + expect(response).toEqual({ + access_token: config.accessToken, + refresh_token: config.refreshToken, + }); + }); + + test.each([ + { + contentType: 'text/html', + body: 'Hello, world!', + }, + { + contentType: 'application/xml', + body: 'Hello, world!', + }, + { + contentType: 'text/plain', + body: 'Hello, world!', + }, + ])('should reject content type $contentType', async ({ contentType, body }) => { + mockTokenResponse({ + status: 200, + headers: { 'Content-Type': contentType }, + body, + }); + + const result = await makeTokenCall().catch((err) => err); + expect(result).toBeInstanceOf(Error); + expect(result.message).toEqual(`Unsupported content type: ${contentType}`); + }); + + it('should reject 4xx responses with auth errors', async () => { + mockTokenResponse({ + status: 401, + headers: { 'Content-Type': 'application/json' }, + body: JSON.stringify({ error: 'access_denied' }), + }); + + const result = await makeTokenCall().catch((err) => err); + expect(result).toBeInstanceOf(AuthError); + expect(result.message).toEqual(ERROR_RESPONSES.access_denied); + expect(result.body).toEqual({ error: 'access_denied' }); + }); + + it('should reject 3xx responses with response errors', async () => { + mockTokenResponse({ + status: 302, + headers: {}, + body: 'Redirected', + }); + + const result = await makeTokenCall().catch((err) => err); + expect(result).toBeInstanceOf(ResponseError); + expect(result.message).toEqual('HTTP status 302'); + expect(result.body).toEqual('Redirected'); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/code-flow.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/code-flow.test 2.ts new file mode 100755 index 00000000..e288fbd8 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/code-flow.test 2.ts @@ -0,0 +1,192 @@ +import nock from 'nock'; + +import { ClientOAuth2 } from '@/client-oauth2'; +import { ClientOAuth2Token } from '@/client-oauth2-token'; +import { AuthError } from '@/utils'; + +import * as config from './config'; + +describe('CodeFlow', () => { + beforeAll(async () => { + nock.disableNetConnect(); + }); + + afterAll(() => { + nock.restore(); + }); + + const uri = `/auth/callback?code=${config.code}&state=${config.state}`; + + const githubAuth = new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authorizationUri: config.authorizationUri, + authorizationGrants: ['code'], + redirectUri: config.redirectUri, + scopes: ['notifications'], + }); + + describe('#getUri', () => { + it('should return a valid uri', () => { + expect(githubAuth.code.getUri()).toEqual( + `${config.authorizationUri}?client_id=abc&` + + `redirect_uri=${encodeURIComponent(config.redirectUri)}&` + + 'response_type=code&scope=notifications', + ); + }); + + describe('when scopes are undefined', () => { + it('should not include scope in the uri', () => { + const authWithoutScopes = new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authorizationUri: config.authorizationUri, + authorizationGrants: ['code'], + redirectUri: config.redirectUri, + }); + expect(authWithoutScopes.code.getUri()).toEqual( + `${config.authorizationUri}?client_id=abc&` + + `redirect_uri=${encodeURIComponent(config.redirectUri)}&` + + 'response_type=code', + ); + }); + }); + + it('should include empty scopes array as an empty string', () => { + const authWithEmptyScopes = new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authorizationUri: config.authorizationUri, + authorizationGrants: ['code'], + redirectUri: config.redirectUri, + scopes: [], + }); + expect(authWithEmptyScopes.code.getUri()).toEqual( + `${config.authorizationUri}?client_id=abc&` + + `redirect_uri=${encodeURIComponent(config.redirectUri)}&` + + 'response_type=code&scope=', + ); + }); + + it('should include empty scopes string as an empty string', () => { + const authWithEmptyScopes = new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authorizationUri: config.authorizationUri, + authorizationGrants: ['code'], + redirectUri: config.redirectUri, + scopes: [], + }); + expect(authWithEmptyScopes.code.getUri()).toEqual( + `${config.authorizationUri}?client_id=abc&` + + `redirect_uri=${encodeURIComponent(config.redirectUri)}&` + + 'response_type=code&scope=', + ); + }); + + describe('when authorizationUri contains query parameters', () => { + it('should preserve query string parameters', () => { + const authWithParams = new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authorizationUri: `${config.authorizationUri}?bar=qux`, + authorizationGrants: ['code'], + redirectUri: config.redirectUri, + scopes: ['notifications'], + }); + expect(authWithParams.code.getUri()).toEqual( + `${config.authorizationUri}?bar=qux&client_id=abc&` + + `redirect_uri=${encodeURIComponent(config.redirectUri)}&` + + 'response_type=code&scope=notifications', + ); + }); + }); + }); + + describe('#getToken', () => { + const mockTokenCall = () => + nock(config.baseUrl) + .post( + '/login/oauth/access_token', + ({ code, grant_type, redirect_uri }) => + code === config.code && + grant_type === 'authorization_code' && + redirect_uri === config.redirectUri, + ) + .once() + .reply(200, { + access_token: config.accessToken, + refresh_token: config.refreshToken, + }); + + it('should request the token', async () => { + mockTokenCall(); + const user = await githubAuth.code.getToken(uri); + + expect(user).toBeInstanceOf(ClientOAuth2Token); + expect(user.accessToken).toEqual(config.accessToken); + expect(user.tokenType).toEqual('bearer'); + }); + + it('should reject with auth errors', async () => { + let errored = false; + + try { + await githubAuth.code.getToken(`${config.redirectUri}?error=invalid_request`); + } catch (err) { + errored = true; + expect(err).toBeInstanceOf(AuthError); + if (err instanceof AuthError) { + expect(err.code).toEqual('EAUTH'); + expect(err.body.error).toEqual('invalid_request'); + } + } + expect(errored).toEqual(true); + }); + + describe('#sign', () => { + it('should be able to sign a standard request object', async () => { + mockTokenCall(); + const token = await githubAuth.code.getToken(uri); + const requestOptions = token.sign({ + method: 'GET', + url: 'http://api.github.com/user', + }); + expect(requestOptions.headers?.Authorization).toEqual(`Bearer ${config.accessToken}`); + }); + }); + + describe('#refresh', () => { + const mockRefreshCall = () => + nock(config.baseUrl) + .post( + '/login/oauth/access_token', + ({ refresh_token, grant_type }) => + refresh_token === config.refreshToken && grant_type === 'refresh_token', + ) + .once() + .reply(200, { + access_token: config.refreshedAccessToken, + refresh_token: config.refreshedRefreshToken, + }); + + it('should make a request to get a new access token', async () => { + mockTokenCall(); + const token = await githubAuth.code.getToken(uri, { state: config.state }); + expect(token.refreshToken).toEqual(config.refreshToken); + + mockRefreshCall(); + const token1 = await token.refresh(); + expect(token1).toBeInstanceOf(ClientOAuth2Token); + expect(token1.accessToken).toEqual(config.refreshedAccessToken); + expect(token1.refreshToken).toEqual(config.refreshedRefreshToken); + expect(token1.tokenType).toEqual('bearer'); + }); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/config 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/config 2.ts new file mode 100755 index 00000000..a6dd28a3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/config 2.ts @@ -0,0 +1,15 @@ +export const baseUrl = 'https://mock.auth.service'; +export const accessTokenUri = baseUrl + '/login/oauth/access_token'; +export const authorizationUri = baseUrl + '/login/oauth/authorize'; +export const redirectUri = 'http://example.com/auth/callback'; + +export const accessToken = '4430eb1615fb6127cbf828a8e403'; +export const refreshToken = 'def456token'; +export const refreshedAccessToken = 'f456okeendt'; +export const refreshedRefreshToken = 'f4f6577c0f3af456okeendt'; + +export const clientId = 'abc'; +export const clientSecret = '123'; + +export const code = 'fbe55d970377e0686746'; +export const state = '7076840850058943'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/credentials-flow.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/credentials-flow.test 2.ts new file mode 100755 index 00000000..2769acb0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/client-oauth2/test/credentials-flow.test 2.ts @@ -0,0 +1,215 @@ +import nock from 'nock'; + +import { ClientOAuth2, type ClientOAuth2Options } from '@/client-oauth2'; +import { ClientOAuth2Token } from '@/client-oauth2-token'; +import type { Headers } from '@/types'; + +import * as config from './config'; + +describe('CredentialsFlow', () => { + beforeAll(async () => { + nock.disableNetConnect(); + }); + + afterAll(() => { + nock.restore(); + }); + + beforeEach(() => jest.clearAllMocks()); + + describe('#getToken', () => { + const createAuthClient = ({ + scopes, + authentication, + }: Pick = {}) => + new ClientOAuth2({ + clientId: config.clientId, + clientSecret: config.clientSecret, + accessTokenUri: config.accessTokenUri, + authentication, + authorizationGrants: ['credentials'], + scopes, + }); + + const mockTokenCall = async ({ requestedScope }: { requestedScope?: string } = {}) => { + const nockScope = nock(config.baseUrl) + .post( + '/login/oauth/access_token', + ({ scope, grant_type }) => + scope === requestedScope && grant_type === 'client_credentials', + ) + .once() + .reply(200, { + access_token: config.accessToken, + refresh_token: config.refreshToken, + scope: requestedScope, + }); + return await new Promise<{ headers: Headers; body: unknown }>((resolve) => { + nockScope.once('request', (req) => { + resolve({ + headers: req.headers, + body: req.requestBodyBuffers.toString('utf-8'), + }); + }); + }); + }; + + it('should request the token', async () => { + const authClient = createAuthClient({ scopes: ['notifications'] }); + const requestPromise = mockTokenCall({ requestedScope: 'notifications' }); + + const user = await authClient.credentials.getToken(); + + expect(user).toBeInstanceOf(ClientOAuth2Token); + expect(user.accessToken).toEqual(config.accessToken); + expect(user.tokenType).toEqual('bearer'); + expect(user.data.scope).toEqual('notifications'); + + const { headers, body } = await requestPromise; + expect(headers.authorization).toBe('Basic YWJjOjEyMw=='); + expect(body).toEqual('grant_type=client_credentials&scope=notifications'); + }); + + it('when scopes are undefined, it should not send scopes to an auth server', async () => { + const authClient = createAuthClient(); + const requestPromise = mockTokenCall(); + + const user = await authClient.credentials.getToken(); + expect(user).toBeInstanceOf(ClientOAuth2Token); + expect(user.accessToken).toEqual(config.accessToken); + expect(user.tokenType).toEqual('bearer'); + expect(user.data.scope).toEqual(undefined); + + const { body } = await requestPromise; + expect(body).toEqual('grant_type=client_credentials'); + }); + + it('when scopes is an empty array, it should send empty scope string to an auth server', async () => { + const authClient = createAuthClient({ scopes: [] }); + const requestPromise = mockTokenCall({ requestedScope: '' }); + + const user = await authClient.credentials.getToken(); + expect(user).toBeInstanceOf(ClientOAuth2Token); + expect(user.accessToken).toEqual(config.accessToken); + expect(user.tokenType).toEqual('bearer'); + expect(user.data.scope).toEqual(''); + + const { body } = await requestPromise; + expect(body).toEqual('grant_type=client_credentials&scope='); + }); + + it('should handle authentication = "header"', async () => { + const authClient = createAuthClient({ scopes: [] }); + const requestPromise = mockTokenCall({ requestedScope: '' }); + await authClient.credentials.getToken(); + const { headers, body } = await requestPromise; + expect(headers?.authorization).toBe('Basic YWJjOjEyMw=='); + expect(body).toEqual('grant_type=client_credentials&scope='); + }); + + it('should handle authentication = "body"', async () => { + const authClient = createAuthClient({ scopes: [], authentication: 'body' }); + const requestPromise = mockTokenCall({ requestedScope: '' }); + await authClient.credentials.getToken(); + const { headers, body } = await requestPromise; + expect(headers?.authorization).toBe(undefined); + expect(body).toEqual('grant_type=client_credentials&scope=&client_id=abc&client_secret=123'); + }); + + describe('#sign', () => { + it('should be able to sign a standard request object', async () => { + const authClient = createAuthClient({ scopes: ['notifications'] }); + void mockTokenCall({ requestedScope: 'notifications' }); + + const token = await authClient.credentials.getToken(); + const requestOptions = token.sign({ + method: 'GET', + url: `${config.baseUrl}/test`, + }); + + expect(requestOptions.headers?.Authorization).toEqual(`Bearer ${config.accessToken}`); + }); + }); + + describe('#refresh', () => { + const mockRefreshCall = async () => { + const nockScope = nock(config.baseUrl) + .post( + '/login/oauth/access_token', + ({ refresh_token, grant_type }) => + refresh_token === config.refreshToken && grant_type === 'refresh_token', + ) + .once() + .reply(200, { + access_token: config.refreshedAccessToken, + refresh_token: config.refreshedRefreshToken, + }); + return await new Promise<{ headers: Headers; body: unknown }>((resolve) => { + nockScope.once('request', (req) => { + resolve({ + headers: req.headers, + body: req.requestBodyBuffers.toString('utf-8'), + }); + }); + }); + }; + + it('should make a request to get a new access token', async () => { + const authClient = createAuthClient({ scopes: ['notifications'] }); + void mockTokenCall({ requestedScope: 'notifications' }); + + const token = await authClient.credentials.getToken(); + expect(token.accessToken).toEqual(config.accessToken); + + const requestPromise = mockRefreshCall(); + const token1 = await token.refresh(); + await requestPromise; + + expect(token1).toBeInstanceOf(ClientOAuth2Token); + expect(token1.accessToken).toEqual(config.refreshedAccessToken); + expect(token1.tokenType).toEqual('bearer'); + }); + + it('should make a request to get a new access token with authentication = "body"', async () => { + const authClient = createAuthClient({ scopes: ['notifications'], authentication: 'body' }); + void mockTokenCall({ requestedScope: 'notifications' }); + + const token = await authClient.credentials.getToken(); + expect(token.accessToken).toEqual(config.accessToken); + + const requestPromise = mockRefreshCall(); + const token1 = await token.refresh(); + const { headers, body } = await requestPromise; + + expect(token1).toBeInstanceOf(ClientOAuth2Token); + expect(token1.accessToken).toEqual(config.refreshedAccessToken); + expect(token1.tokenType).toEqual('bearer'); + expect(headers?.authorization).toBe(undefined); + expect(body).toEqual( + 'refresh_token=def456token&grant_type=refresh_token&client_id=abc&client_secret=123', + ); + }); + + it('should make a request to get a new access token with authentication = "header"', async () => { + const authClient = createAuthClient({ + scopes: ['notifications'], + authentication: 'header', + }); + void mockTokenCall({ requestedScope: 'notifications' }); + + const token = await authClient.credentials.getToken(); + expect(token.accessToken).toEqual(config.accessToken); + + const requestPromise = mockRefreshCall(); + const token1 = await token.refresh(); + const { headers, body } = await requestPromise; + + expect(token1).toBeInstanceOf(ClientOAuth2Token); + expect(token1.accessToken).toEqual(config.refreshedAccessToken); + expect(token1.tokenType).toEqual('bearer'); + expect(headers?.authorization).toBe('Basic YWJjOjEyMw=='); + expect(body).toEqual('refresh_token=def456token&grant_type=refresh_token'); + }); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/codemirror-lang/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/codemirror-lang/src/index 2.ts new file mode 100755 index 00000000..78107ef6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/codemirror-lang/src/index 2.ts @@ -0,0 +1 @@ +export { parserWithMetaData, n8nLanguage } from './expressions'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/src/custom-types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/src/custom-types 2.ts new file mode 100755 index 00000000..7925846d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/src/custom-types 2.ts @@ -0,0 +1,19 @@ +abstract class StringArray extends Array { + constructor(str: string, delimiter: string) { + super(); + const parsed = str.split(delimiter) as this; + return parsed.filter((i) => typeof i === 'string' && i.length); + } +} + +export class CommaSeparatedStringArray extends StringArray { + constructor(str: string) { + super(str, ','); + } +} + +export class ColonSeparatedStringArray extends StringArray { + constructor(str: string) { + super(str, ':'); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/src/decorators 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/src/decorators 2.ts new file mode 100755 index 00000000..06b15749 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/src/decorators 2.ts @@ -0,0 +1,118 @@ +import 'reflect-metadata'; +import { Container, Service } from '@n8n/di'; +import { readFileSync } from 'fs'; +import { z } from 'zod'; + +// eslint-disable-next-line @typescript-eslint/no-restricted-types +type Class = Function; +type Constructable = new (rawValue: string) => T; +type PropertyKey = string | symbol; +type PropertyType = number | boolean | string | Class; +interface PropertyMetadata { + type: PropertyType; + envName?: string; + schema?: z.ZodType; +} + +const globalMetadata = new Map>(); + +const readEnv = (envName: string) => { + if (envName in process.env) return process.env[envName]; + + // Read the value from a file, if "_FILE" environment variable is defined + const filePath = process.env[`${envName}_FILE`]; + if (filePath) return readFileSync(filePath, 'utf8'); + + return undefined; +}; + +export const Config: ClassDecorator = (ConfigClass: Class) => { + const factory = function (...args: unknown[]) { + const config = new (ConfigClass as new (...a: unknown[]) => Record)( + ...args, + ); + const classMetadata = globalMetadata.get(ConfigClass); + if (!classMetadata) { + throw new Error('Invalid config class: ' + ConfigClass.name); + } + + for (const [key, { type, envName, schema }] of classMetadata) { + if (typeof type === 'function' && globalMetadata.has(type)) { + config[key] = Container.get(type as Constructable); + } else if (envName) { + const value = readEnv(envName); + if (value === undefined) continue; + + if (schema) { + const result = schema.safeParse(value); + if (result.error) { + console.warn( + `Invalid value for ${envName} - ${result.error.issues[0].message}. Falling back to default value.`, + ); + continue; + } + config[key] = result.data; + } else if (type === Number) { + const parsed = Number(value); + if (isNaN(parsed)) { + console.warn(`Invalid number value for ${envName}: ${value}`); + } else { + config[key] = parsed; + } + } else if (type === Boolean) { + if (['true', '1'].includes(value.toLowerCase())) { + config[key] = true; + } else if (['false', '0'].includes(value.toLowerCase())) { + config[key] = false; + } else { + console.warn(`Invalid boolean value for ${envName}: ${value}`); + } + } else if (type === Date) { + const timestamp = Date.parse(value); + if (isNaN(timestamp)) { + console.warn(`Invalid timestamp value for ${envName}: ${value}`); + } else { + config[key] = new Date(timestamp); + } + } else if (type === String) { + config[key] = value.trim().replace(/^(['"])(.*)\1$/, '$2'); + } else { + config[key] = new (type as Constructable)(value); + } + } + } + + if (typeof config.sanitize === 'function') config.sanitize(); + + return config; + }; + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return Service({ factory })(ConfigClass); +}; + +export const Nested: PropertyDecorator = (target: object, key: PropertyKey) => { + const ConfigClass = target.constructor; + const classMetadata = globalMetadata.get(ConfigClass) ?? new Map(); + const type = Reflect.getMetadata('design:type', target, key) as PropertyType; + classMetadata.set(key, { type }); + globalMetadata.set(ConfigClass, classMetadata); +}; + +export const Env = + (envName: string, schema?: PropertyMetadata['schema']): PropertyDecorator => + (target: object, key: PropertyKey) => { + const ConfigClass = target.constructor; + const classMetadata = + globalMetadata.get(ConfigClass) ?? new Map(); + + const type = Reflect.getMetadata('design:type', target, key) as PropertyType; + const isZodSchema = schema instanceof z.ZodType; + if (type === Object && !isZodSchema) { + throw new Error( + `Invalid decorator metadata on key "${key as string}" on ${ConfigClass.name}\n Please use explicit typing on all config fields`, + ); + } + + classMetadata.set(key, { type, envName, schema }); + globalMetadata.set(ConfigClass, classMetadata); + }; diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/src/index 2.ts new file mode 100755 index 00000000..31b73bb0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/src/index 2.ts @@ -0,0 +1,211 @@ +import { z } from 'zod'; + +import { AiAssistantConfig } from './configs/ai-assistant.config'; +import { AiConfig } from './configs/ai.config'; +import { AuthConfig } from './configs/auth.config'; +import { CacheConfig } from './configs/cache.config'; +import { CredentialsConfig } from './configs/credentials.config'; +import { DatabaseConfig } from './configs/database.config'; +import { DeploymentConfig } from './configs/deployment.config'; +import { DiagnosticsConfig } from './configs/diagnostics.config'; +import { EndpointsConfig } from './configs/endpoints.config'; +import { EventBusConfig } from './configs/event-bus.config'; +import { ExecutionsConfig } from './configs/executions.config'; +import { ExternalHooksConfig } from './configs/external-hooks.config'; +import { GenericConfig } from './configs/generic.config'; +import { HiringBannerConfig } from './configs/hiring-banner.config'; +import { LicenseConfig } from './configs/license.config'; +import { LoggingConfig } from './configs/logging.config'; +import { MfaConfig } from './configs/mfa.config'; +import { MultiMainSetupConfig } from './configs/multi-main-setup.config'; +import { NodesConfig } from './configs/nodes.config'; +import { PartialExecutionsConfig } from './configs/partial-executions.config'; +import { PersonalizationConfig } from './configs/personalization.config'; +import { PublicApiConfig } from './configs/public-api.config'; +import { RedisConfig } from './configs/redis.config'; +import { TaskRunnersConfig } from './configs/runners.config'; +import { ScalingModeConfig } from './configs/scaling-mode.config'; +import { SecurityConfig } from './configs/security.config'; +import { SentryConfig } from './configs/sentry.config'; +import { SsoConfig } from './configs/sso.config'; +import { TagsConfig } from './configs/tags.config'; +import { TemplatesConfig } from './configs/templates.config'; +import { UserManagementConfig } from './configs/user-management.config'; +import { VersionNotificationsConfig } from './configs/version-notifications.config'; +import { WorkflowHistoryConfig } from './configs/workflow-history.config'; +import { WorkflowsConfig } from './configs/workflows.config'; +import { Config, Env, Nested } from './decorators'; + +export { Config, Env, Nested } from './decorators'; +export { DatabaseConfig } from './configs/database.config'; +export { InstanceSettingsConfig } from './configs/instance-settings-config'; +export { TaskRunnersConfig } from './configs/runners.config'; +export { SecurityConfig } from './configs/security.config'; +export { ExecutionsConfig } from './configs/executions.config'; +export { LOG_SCOPES } from './configs/logging.config'; +export type { LogScope } from './configs/logging.config'; +export { WorkflowsConfig } from './configs/workflows.config'; +export * from './custom-types'; +export { DeploymentConfig } from './configs/deployment.config'; +export { MfaConfig } from './configs/mfa.config'; +export { HiringBannerConfig } from './configs/hiring-banner.config'; +export { PersonalizationConfig } from './configs/personalization.config'; +export { NodesConfig } from './configs/nodes.config'; +export { CronLoggingConfig } from './configs/logging.config'; + +const protocolSchema = z.enum(['http', 'https']); + +export type Protocol = z.infer; + +@Config +export class GlobalConfig { + @Nested + auth: AuthConfig; + + @Nested + database: DatabaseConfig; + + @Nested + credentials: CredentialsConfig; + + @Nested + userManagement: UserManagementConfig; + + @Nested + versionNotifications: VersionNotificationsConfig; + + @Nested + publicApi: PublicApiConfig; + + @Nested + externalHooks: ExternalHooksConfig; + + @Nested + templates: TemplatesConfig; + + @Nested + eventBus: EventBusConfig; + + @Nested + nodes: NodesConfig; + + @Nested + workflows: WorkflowsConfig; + + @Nested + sentry: SentryConfig; + + /** Path n8n is deployed to */ + @Env('N8N_PATH') + path: string = '/'; + + /** Host name n8n can be reached */ + @Env('N8N_HOST') + host: string = 'localhost'; + + /** HTTP port n8n can be reached */ + @Env('N8N_PORT') + port: number = 5678; + + /** IP address n8n should listen on */ + @Env('N8N_LISTEN_ADDRESS') + listen_address: string = '::'; + + /** HTTP Protocol via which n8n can be reached */ + @Env('N8N_PROTOCOL', protocolSchema) + protocol: Protocol = 'http'; + + @Nested + endpoints: EndpointsConfig; + + @Nested + cache: CacheConfig; + + @Nested + queue: ScalingModeConfig; + + @Nested + logging: LoggingConfig; + + @Nested + taskRunners: TaskRunnersConfig; + + @Nested + multiMainSetup: MultiMainSetupConfig; + + @Nested + generic: GenericConfig; + + @Nested + license: LicenseConfig; + + @Nested + security: SecurityConfig; + + @Nested + executions: ExecutionsConfig; + + @Nested + diagnostics: DiagnosticsConfig; + + @Nested + aiAssistant: AiAssistantConfig; + + @Nested + tags: TagsConfig; + + @Nested + partialExecutions: PartialExecutionsConfig; + + @Nested + workflowHistory: WorkflowHistoryConfig; + + @Nested + deployment: DeploymentConfig; + + @Nested + mfa: MfaConfig; + + @Nested + hiringBanner: HiringBannerConfig; + + @Nested + personalization: PersonalizationConfig; + + @Nested + sso: SsoConfig; + + /** Default locale for the UI. */ + @Env('N8N_DEFAULT_LOCALE') + defaultLocale: string = 'en'; + + /** Whether to hide the page that shows active workflows and executions count. */ + @Env('N8N_HIDE_USAGE_PAGE') + hideUsagePage: boolean = false; + + /** Number of reverse proxies n8n is running behind. */ + @Env('N8N_PROXY_HOPS') + proxy_hops: number = 0; + + /** SSL key for HTTPS protocol. */ + @Env('N8N_SSL_KEY') + ssl_key: string = ''; + + /** SSL cert for HTTPS protocol. */ + @Env('N8N_SSL_CERT') + ssl_cert: string = ''; + + /** Public URL where the editor is accessible. Also used for emails sent from n8n. */ + @Env('N8N_EDITOR_BASE_URL') + editorBaseUrl: string = ''; + + /** URLs to external frontend hooks files, separated by semicolons. */ + @Env('EXTERNAL_FRONTEND_HOOKS_URLS') + externalFrontendHooksUrls: string = ''; + + @Nested + redis: RedisConfig; + + @Nested + ai: AiConfig; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/test/config.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/test/config.test 2.ts new file mode 100755 index 00000000..28cc813a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/test/config.test 2.ts @@ -0,0 +1,486 @@ +import { Container } from '@n8n/di'; +import fs from 'fs'; +import { mock } from 'jest-mock-extended'; + +import type { UserManagementConfig } from '../src/configs/user-management.config'; +import { GlobalConfig } from '../src/index'; + +jest.mock('fs'); +const mockFs = mock(); +fs.readFileSync = mockFs.readFileSync; + +const consoleWarnMock = jest.spyOn(console, 'warn').mockImplementation(() => {}); + +describe('GlobalConfig', () => { + beforeEach(() => { + Container.reset(); + jest.clearAllMocks(); + }); + + const originalEnv = process.env; + afterEach(() => { + process.env = originalEnv; + }); + + const defaultConfig: GlobalConfig = { + path: '/', + host: 'localhost', + port: 5678, + listen_address: '::', + protocol: 'http', + auth: { + cookie: { + samesite: 'lax', + secure: true, + }, + }, + defaultLocale: 'en', + hideUsagePage: false, + deployment: { + type: 'default', + }, + mfa: { + enabled: true, + }, + hiringBanner: { + enabled: true, + }, + personalization: { + enabled: true, + }, + proxy_hops: 0, + ssl_key: '', + ssl_cert: '', + editorBaseUrl: '', + database: { + logging: { + enabled: false, + maxQueryExecutionTime: 0, + options: 'error', + }, + mysqldb: { + database: 'n8n', + host: 'localhost', + password: '', + port: 3306, + user: 'root', + }, + postgresdb: { + database: 'n8n', + host: 'localhost', + password: '', + poolSize: 2, + port: 5432, + schema: 'public', + connectionTimeoutMs: 20_000, + ssl: { + ca: '', + cert: '', + enabled: false, + key: '', + rejectUnauthorized: true, + }, + user: 'postgres', + idleTimeoutMs: 30_000, + }, + sqlite: { + database: 'database.sqlite', + enableWAL: false, + executeVacuumOnStartup: false, + poolSize: 0, + }, + tablePrefix: '', + type: 'sqlite', + isLegacySqlite: true, + pingIntervalSeconds: 2, + }, + credentials: { + defaultName: 'My credentials', + overwrite: { + data: '{}', + endpoint: '', + }, + }, + userManagement: { + jwtSecret: '', + jwtSessionDurationHours: 168, + jwtRefreshTimeoutHours: 0, + emails: { + mode: 'smtp', + smtp: { + host: '', + port: 465, + secure: true, + sender: '', + startTLS: true, + auth: { + pass: '', + user: '', + privateKey: '', + serviceClient: '', + }, + }, + template: { + 'credentials-shared': '', + 'user-invited': '', + 'password-reset-requested': '', + 'workflow-shared': '', + 'project-shared': '', + }, + }, + } as UserManagementConfig, + eventBus: { + checkUnsentInterval: 0, + crashRecoveryMode: 'extensive', + logWriter: { + keepLogCount: 3, + logBaseName: 'n8nEventLog', + maxFileSizeInKB: 10240, + }, + }, + externalHooks: { + files: [], + }, + nodes: { + errorTriggerType: 'n8n-nodes-base.errorTrigger', + include: [], + exclude: [], + pythonEnabled: true, + }, + publicApi: { + disabled: false, + path: 'api', + swaggerUiDisabled: false, + }, + templates: { + enabled: true, + host: 'https://api.n8n.io/api/', + }, + versionNotifications: { + enabled: true, + endpoint: 'https://api.n8n.io/api/versions/', + whatsNewEnabled: true, + whatsNewEndpoint: 'https://api.n8n.io/api/whats-new', + infoUrl: 'https://docs.n8n.io/hosting/installation/updating/', + }, + workflows: { + defaultName: 'My workflow', + callerPolicyDefaultOption: 'workflowsFromSameOwner', + activationBatchSize: 1, + }, + endpoints: { + metrics: { + enable: false, + prefix: 'n8n_', + includeWorkflowIdLabel: false, + includeWorkflowNameLabel: false, + includeDefaultMetrics: true, + includeMessageEventBusMetrics: false, + includeNodeTypeLabel: false, + includeCacheMetrics: false, + includeApiEndpoints: false, + includeApiPathLabel: false, + includeApiMethodLabel: false, + includeCredentialTypeLabel: false, + includeApiStatusCodeLabel: false, + includeQueueMetrics: false, + queueMetricsInterval: 20, + activeWorkflowCountInterval: 60, + }, + additionalNonUIRoutes: '', + disableProductionWebhooksOnMainProcess: false, + disableUi: false, + form: 'form', + formTest: 'form-test', + formWaiting: 'form-waiting', + mcp: 'mcp', + mcpTest: 'mcp-test', + payloadSizeMax: 16, + formDataFileSizeMax: 200, + rest: 'rest', + webhook: 'webhook', + webhookTest: 'webhook-test', + webhookWaiting: 'webhook-waiting', + }, + cache: { + backend: 'auto', + memory: { + maxSize: 3145728, + ttl: 3600000, + }, + redis: { + prefix: 'cache', + ttl: 3600000, + }, + }, + queue: { + health: { + active: false, + port: 5678, + address: '::', + }, + bull: { + redis: { + db: 0, + host: 'localhost', + password: '', + port: 6379, + timeoutThreshold: 10_000, + username: '', + clusterNodes: '', + tls: false, + dualStack: false, + }, + gracefulShutdownTimeout: 30, + prefix: 'bull', + settings: { + lockDuration: 30_000, + lockRenewTime: 15_000, + stalledInterval: 30_000, + maxStalledCount: 1, + }, + }, + }, + taskRunners: { + enabled: false, + mode: 'internal', + path: '/runners', + authToken: '', + listenAddress: '127.0.0.1', + maxPayload: 1024 * 1024 * 1024, + port: 5679, + maxOldSpaceSize: '', + maxConcurrency: 10, + taskTimeout: 300, + heartbeatInterval: 30, + insecureMode: false, + }, + sentry: { + backendDsn: '', + frontendDsn: '', + environment: '', + deploymentName: '', + }, + logging: { + level: 'info', + format: 'text', + outputs: ['console'], + file: { + fileCountMax: 100, + fileSizeMax: 16, + location: 'logs/n8n.log', + }, + scopes: [], + cron: { + activeInterval: 0, + }, + }, + multiMainSetup: { + enabled: false, + ttl: 10, + interval: 3, + }, + generic: { + timezone: 'America/New_York', + releaseChannel: 'dev', + gracefulShutdownTimeout: 30, + }, + license: { + serverUrl: 'https://license.n8n.io/v1', + autoRenewalEnabled: true, + detachFloatingOnShutdown: true, + activationKey: '', + tenantId: 1, + cert: '', + }, + security: { + restrictFileAccessTo: '', + blockFileAccessToN8nFiles: true, + daysAbandonedWorkflow: 90, + contentSecurityPolicy: '{}', + contentSecurityPolicyReportOnly: false, + disableWebhookHtmlSandboxing: false, + }, + executions: { + pruneData: true, + pruneDataMaxAge: 336, + pruneDataMaxCount: 10_000, + pruneDataHardDeleteBuffer: 1, + pruneDataIntervals: { + hardDelete: 15, + softDelete: 60, + }, + concurrency: { + productionLimit: -1, + evaluationLimit: -1, + }, + queueRecovery: { + interval: 180, + batchSize: 100, + }, + saveDataOnError: 'all', + saveDataOnSuccess: 'all', + saveExecutionProgress: false, + saveDataManualExecutions: true, + }, + diagnostics: { + enabled: true, + frontendConfig: '1zPn9bgWPzlQc0p8Gj1uiK6DOTn;https://telemetry.n8n.io', + backendConfig: '1zPn7YoGC3ZXE9zLeTKLuQCB4F6;https://telemetry.n8n.io', + posthogConfig: { + apiKey: 'phc_4URIAm1uYfJO7j8kWSe0J8lc8IqnstRLS7Jx8NcakHo', + apiHost: 'https://ph.n8n.io', + }, + }, + aiAssistant: { + baseUrl: '', + }, + tags: { + disabled: false, + }, + partialExecutions: { + version: 2, + }, + workflowHistory: { + enabled: true, + pruneTime: -1, + }, + sso: { + justInTimeProvisioning: true, + redirectLoginToSso: true, + saml: { + loginEnabled: false, + loginLabel: '', + }, + oidc: { + loginEnabled: false, + }, + ldap: { + loginEnabled: false, + loginLabel: '', + }, + }, + redis: { + prefix: 'n8n', + }, + externalFrontendHooksUrls: '', + ai: { + enabled: false, + }, + }; + + it('should use all default values when no env variables are defined', () => { + process.env = {}; + const config = Container.get(GlobalConfig); + // Makes sure the objects are structurally equal while respecting getters, + // which `toEqual` and `toBe` does not do. + expect(defaultConfig).toMatchObject(config); + expect(config).toMatchObject(defaultConfig); + expect(mockFs.readFileSync).not.toHaveBeenCalled(); + }); + + it('should use values from env variables when defined', () => { + process.env = { + DB_POSTGRESDB_HOST: 'some-host', + DB_POSTGRESDB_USER: 'n8n', + DB_POSTGRESDB_IDLE_CONNECTION_TIMEOUT: '10000', + DB_TABLE_PREFIX: 'test_', + DB_PING_INTERVAL_SECONDS: '2', + NODES_INCLUDE: '["n8n-nodes-base.hackerNews"]', + DB_LOGGING_MAX_EXECUTION_TIME: '0', + N8N_METRICS: 'TRUE', + N8N_TEMPLATES_ENABLED: '0', + }; + const config = Container.get(GlobalConfig); + expect(structuredClone(config)).toEqual({ + ...defaultConfig, + database: { + logging: defaultConfig.database.logging, + mysqldb: defaultConfig.database.mysqldb, + postgresdb: { + ...defaultConfig.database.postgresdb, + host: 'some-host', + user: 'n8n', + idleTimeoutMs: 10_000, + }, + sqlite: defaultConfig.database.sqlite, + tablePrefix: 'test_', + type: 'sqlite', + pingIntervalSeconds: 2, + }, + endpoints: { + ...defaultConfig.endpoints, + metrics: { + ...defaultConfig.endpoints.metrics, + enable: true, + }, + }, + nodes: { + ...defaultConfig.nodes, + include: ['n8n-nodes-base.hackerNews'], + }, + templates: { + ...defaultConfig.templates, + enabled: false, + }, + }); + expect(mockFs.readFileSync).not.toHaveBeenCalled(); + }); + + it('should read values from files using _FILE env variables', () => { + const passwordFile = '/path/to/postgres/password'; + process.env = { + DB_POSTGRESDB_PASSWORD_FILE: passwordFile, + }; + mockFs.readFileSync.calledWith(passwordFile, 'utf8').mockReturnValueOnce('password-from-file'); + + const config = Container.get(GlobalConfig); + const expected = { + ...defaultConfig, + database: { + ...defaultConfig.database, + postgresdb: { + ...defaultConfig.database.postgresdb, + password: 'password-from-file', + }, + }, + }; + // Makes sure the objects are structurally equal while respecting getters, + // which `toEqual` and `toBe` does not do. + expect(config).toMatchObject(expected); + expect(expected).toMatchObject(config); + expect(mockFs.readFileSync).toHaveBeenCalled(); + }); + + it('should handle invalid numbers', () => { + process.env = { + DB_LOGGING_MAX_EXECUTION_TIME: 'abcd', + }; + const config = Container.get(GlobalConfig); + expect(config.database.logging.maxQueryExecutionTime).toEqual(0); + expect(consoleWarnMock).toHaveBeenCalledWith( + 'Invalid number value for DB_LOGGING_MAX_EXECUTION_TIME: abcd', + ); + }); + + describe('string unions', () => { + it('on invalid value, should warn and fall back to default value', () => { + process.env = { + N8N_RUNNERS_MODE: 'non-existing-mode', + N8N_RUNNERS_ENABLED: 'true', + DB_TYPE: 'postgresdb', + }; + + const globalConfig = Container.get(GlobalConfig); + expect(globalConfig.taskRunners.mode).toEqual('internal'); + expect(consoleWarnMock).toHaveBeenCalledWith( + expect.stringContaining( + "Invalid value for N8N_RUNNERS_MODE - Invalid enum value. Expected 'internal' | 'external', received 'non-existing-mode'. Falling back to default value.", + ), + ); + + expect(globalConfig.taskRunners.enabled).toEqual(true); + expect(globalConfig.database.type).toEqual('postgresdb'); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/test/custom-types.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/test/custom-types.test 2.ts new file mode 100755 index 00000000..71b8fc39 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/test/custom-types.test 2.ts @@ -0,0 +1,25 @@ +import { CommaSeparatedStringArray, ColonSeparatedStringArray } from '../src/custom-types'; + +describe('CommaSeparatedStringArray', () => { + it('should parse comma-separated string into array', () => { + const result = new CommaSeparatedStringArray('a,b,c'); + expect(result).toEqual(['a', 'b', 'c']); + }); + + it('should handle empty strings', () => { + const result = new CommaSeparatedStringArray('a,b,,,'); + expect(result).toEqual(['a', 'b']); + }); +}); + +describe('ColonSeparatedStringArray', () => { + it('should parse colon-separated string into array', () => { + const result = new ColonSeparatedStringArray('a:b:c'); + expect(result).toEqual(['a', 'b', 'c']); + }); + + it('should handle empty strings', () => { + const result = new ColonSeparatedStringArray('a::b:::'); + expect(result).toEqual(['a', 'b']); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/test/decorators.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/test/decorators.test 2.ts new file mode 100755 index 00000000..a346b442 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/test/decorators.test 2.ts @@ -0,0 +1,22 @@ +import { Container } from '@n8n/di'; + +import { Config, Env } from '../src/decorators'; + +describe('decorators', () => { + beforeEach(() => { + Container.reset(); + }); + + it('should throw when explicit typing is missing', () => { + expect(() => { + @Config + class InvalidConfig { + @Env('STRING_VALUE') + value = 'string'; + } + Container.get(InvalidConfig); + }).toThrowError( + 'Invalid decorator metadata on key "value" on InvalidConfig\n Please use explicit typing on all config fields', + ); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/test/string-normalization.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/config/test/string-normalization.test 2.ts new file mode 100755 index 00000000..690dd4f8 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/test/string-normalization.test 2.ts @@ -0,0 +1,123 @@ +import { Container } from '@n8n/di'; + +import { GlobalConfig } from '../src/index'; + +beforeEach(() => { + Container.reset(); + jest.clearAllMocks(); +}); + +const originalEnv = process.env; +afterEach(() => { + process.env = originalEnv; +}); + +it('should strip double quotes from string values', () => { + process.env = { + GENERIC_TIMEZONE: '"America/Bogota"', + N8N_HOST: '"localhost"', + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('America/Bogota'); + expect(config.host).toBe('localhost'); +}); + +it('should strip single quotes from string values', () => { + process.env = { + GENERIC_TIMEZONE: "'America/Bogota'", + N8N_HOST: "'localhost'", + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('America/Bogota'); + expect(config.host).toBe('localhost'); +}); + +it('should trim whitespace from quoted values', () => { + process.env = { + GENERIC_TIMEZONE: ' "America/Bogota" ', + N8N_HOST: " 'localhost' ", + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('America/Bogota'); + expect(config.host).toBe('localhost'); +}); + +it('should trim whitespace from unquoted values', () => { + process.env = { + GENERIC_TIMEZONE: ' America/Bogota ', + N8N_HOST: ' localhost ', + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('America/Bogota'); + expect(config.host).toBe('localhost'); +}); + +it('should leave mismatched quotes unchanged', () => { + process.env = { + GENERIC_TIMEZONE: '"America/Bogota\'', + N8N_HOST: '\'localhost"', + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('"America/Bogota\''); + expect(config.host).toBe('\'localhost"'); +}); + +it('should handle empty quotes', () => { + process.env = { + GENERIC_TIMEZONE: '""', + N8N_HOST: "''", + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe(''); + expect(config.host).toBe(''); +}); + +it('should handle single character in quotes', () => { + process.env = { + GENERIC_TIMEZONE: '"A"', + N8N_HOST: "'B'", + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('A'); + expect(config.host).toBe('B'); +}); + +it('should handle values with spaces in quotes', () => { + process.env = { + GENERIC_TIMEZONE: '"America/New York"', + N8N_HOST: "'my host name'", + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('America/New York'); + expect(config.host).toBe('my host name'); +}); + +it('should handle nested quotes', () => { + process.env = { + GENERIC_TIMEZONE: '"America/\'Bogota\'"', + N8N_HOST: '\'"localhost"\'', + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe("America/'Bogota'"); + expect(config.host).toBe('"localhost"'); +}); + +it('should handle only opening or closing quotes', () => { + process.env = { + GENERIC_TIMEZONE: '"America/Bogota', + N8N_HOST: 'localhost"', + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('"America/Bogota'); + expect(config.host).toBe('localhost"'); +}); + +it('should handle multiple quote pairs', () => { + process.env = { + GENERIC_TIMEZONE: '""America/Bogota""', + N8N_HOST: "''localhost''", + }; + const config = Container.get(GlobalConfig); + expect(config.generic.timezone).toBe('"America/Bogota"'); // should strip only outer quotes + expect(config.host).toBe("'localhost'"); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig 2.json b/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig 2.json new file mode 100755 index 00000000..d64b794b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig 2.json @@ -0,0 +1,14 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.common.json", + "compilerOptions": { + "rootDir": ".", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "strictPropertyInitialization": false, + "types": ["node", "jest"], + "baseUrl": "src", + "tsBuildInfoFile": "dist/typecheck.tsbuildinfo" + }, + "include": ["src/**/*.ts", "test/**/*.ts"], + "references": [{ "path": "../di/tsconfig.build.json" }] +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig.json b/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig.json index d64b794b..e8f379e2 100755 --- a/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig.json +++ b/n8n-n8n-1.109.2/packages/@n8n/config/tsconfig.json @@ -5,7 +5,7 @@ "emitDecoratorMetadata": true, "experimentalDecorators": true, "strictPropertyInitialization": false, - "types": ["node", "jest"], + "types": ["node"], "baseUrl": "src", "tsBuildInfoFile": "dist/typecheck.tsbuildinfo" }, diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/api 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/api 2.ts new file mode 100755 index 00000000..e1e2926d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/api 2.ts @@ -0,0 +1 @@ +export const N8N_IO_BASE_URL = 'https://api.n8n.io/api/'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/browser 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/browser 2.ts new file mode 100755 index 00000000..0fae7238 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/browser 2.ts @@ -0,0 +1 @@ +export const BROWSER_ID_STORAGE_KEY = 'n8n-browserId'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/community-nodes 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/community-nodes 2.ts new file mode 100755 index 00000000..31a9e6dc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/community-nodes 2.ts @@ -0,0 +1 @@ +export const NPM_COMMUNITY_NODE_SEARCH_API_URL = 'https://api.npms.io/v2/'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/execution 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/execution 2.ts new file mode 100755 index 00000000..7e8e07dc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/execution 2.ts @@ -0,0 +1 @@ +export const TOOL_EXECUTOR_NODE_NAME = 'PartialExecutionToolExecutor'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/index 2.ts new file mode 100755 index 00000000..1042c575 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/index 2.ts @@ -0,0 +1,111 @@ +export * from './api'; +export * from './browser'; +export * from './community-nodes'; +export * from './instance'; +export * from './execution'; + +export const LICENSE_FEATURES = { + SHARING: 'feat:sharing', + LDAP: 'feat:ldap', + SAML: 'feat:saml', + OIDC: 'feat:oidc', + MFA_ENFORCEMENT: 'feat:mfaEnforcement', + LOG_STREAMING: 'feat:logStreaming', + ADVANCED_EXECUTION_FILTERS: 'feat:advancedExecutionFilters', + VARIABLES: 'feat:variables', + SOURCE_CONTROL: 'feat:sourceControl', + API_DISABLED: 'feat:apiDisabled', + EXTERNAL_SECRETS: 'feat:externalSecrets', + SHOW_NON_PROD_BANNER: 'feat:showNonProdBanner', + WORKFLOW_HISTORY: 'feat:workflowHistory', + DEBUG_IN_EDITOR: 'feat:debugInEditor', + BINARY_DATA_S3: 'feat:binaryDataS3', + MULTIPLE_MAIN_INSTANCES: 'feat:multipleMainInstances', + WORKER_VIEW: 'feat:workerView', + ADVANCED_PERMISSIONS: 'feat:advancedPermissions', + PROJECT_ROLE_ADMIN: 'feat:projectRole:admin', + PROJECT_ROLE_EDITOR: 'feat:projectRole:editor', + PROJECT_ROLE_VIEWER: 'feat:projectRole:viewer', + AI_ASSISTANT: 'feat:aiAssistant', + ASK_AI: 'feat:askAi', + COMMUNITY_NODES_CUSTOM_REGISTRY: 'feat:communityNodes:customRegistry', + AI_CREDITS: 'feat:aiCredits', + FOLDERS: 'feat:folders', + INSIGHTS_VIEW_SUMMARY: 'feat:insights:viewSummary', + INSIGHTS_VIEW_DASHBOARD: 'feat:insights:viewDashboard', + INSIGHTS_VIEW_HOURLY_DATA: 'feat:insights:viewHourlyData', + API_KEY_SCOPES: 'feat:apiKeyScopes', + WORKFLOW_DIFFS: 'feat:workflowDiffs', +} as const; + +export const LICENSE_QUOTAS = { + TRIGGER_LIMIT: 'quota:activeWorkflows', + VARIABLES_LIMIT: 'quota:maxVariables', + USERS_LIMIT: 'quota:users', + WORKFLOW_HISTORY_PRUNE_LIMIT: 'quota:workflowHistoryPrune', + TEAM_PROJECT_LIMIT: 'quota:maxTeamProjects', + AI_CREDITS: 'quota:aiCredits', + INSIGHTS_MAX_HISTORY_DAYS: 'quota:insights:maxHistoryDays', + INSIGHTS_RETENTION_MAX_AGE_DAYS: 'quota:insights:retention:maxAgeDays', + INSIGHTS_RETENTION_PRUNE_INTERVAL_DAYS: 'quota:insights:retention:pruneIntervalDays', + WORKFLOWS_WITH_EVALUATION_LIMIT: 'quota:evaluations:maxWorkflows', +} as const; + +export const UNLIMITED_LICENSE_QUOTA = -1; + +export type BooleanLicenseFeature = (typeof LICENSE_FEATURES)[keyof typeof LICENSE_FEATURES]; +export type NumericLicenseFeature = (typeof LICENSE_QUOTAS)[keyof typeof LICENSE_QUOTAS]; + +export const LDAP_FEATURE_NAME = 'features.ldap'; + +export type ConnectionSecurity = 'none' | 'tls' | 'startTls'; + +export interface LdapConfig { + loginEnabled: boolean; + loginLabel: string; + connectionUrl: string; + allowUnauthorizedCerts: boolean; + connectionSecurity: ConnectionSecurity; + connectionPort: number; + baseDn: string; + bindingAdminDn: string; + bindingAdminPassword: string; + firstNameAttribute: string; + lastNameAttribute: string; + emailAttribute: string; + loginIdAttribute: string; + ldapIdAttribute: string; + userFilter: string; + synchronizationEnabled: boolean; + synchronizationInterval: number; // minutes + searchPageSize: number; + searchTimeout: number; +} + +export const LDAP_DEFAULT_CONFIGURATION: LdapConfig = { + loginEnabled: false, + loginLabel: '', + connectionUrl: '', + allowUnauthorizedCerts: false, + connectionSecurity: 'none', + connectionPort: 389, + baseDn: '', + bindingAdminDn: '', + bindingAdminPassword: '', + firstNameAttribute: '', + lastNameAttribute: '', + emailAttribute: '', + loginIdAttribute: '', + ldapIdAttribute: '', + userFilter: '', + synchronizationEnabled: false, + synchronizationInterval: 60, + searchPageSize: 0, + searchTimeout: 60, +}; + +export { Time } from './time'; + +export const MIN_PASSWORD_CHAR_LENGTH = 8; + +export const MAX_PASSWORD_CHAR_LENGTH = 64; diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/instance 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/instance 2.ts new file mode 100755 index 00000000..807d41c4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/instance 2.ts @@ -0,0 +1,8 @@ +export const INSTANCE_ID_HEADER = 'n8n-instance-id'; +export const INSTANCE_VERSION_HEADER = 'n8n-version'; + +export const INSTANCE_TYPES = ['main', 'webhook', 'worker'] as const; +export type InstanceType = (typeof INSTANCE_TYPES)[number]; + +export const INSTANCE_ROLES = ['unset', 'leader', 'follower'] as const; +export type InstanceRole = (typeof INSTANCE_ROLES)[number]; diff --git a/n8n-n8n-1.109.2/packages/@n8n/constants/src/time 2.ts b/n8n-n8n-1.109.2/packages/@n8n/constants/src/time 2.ts new file mode 100755 index 00000000..91095386 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/constants/src/time 2.ts @@ -0,0 +1,23 @@ +/** + * Convert time from any time unit to any other unit + */ +export const Time = { + milliseconds: { + toMinutes: 1 / (60 * 1000), + toSeconds: 1 / 1000, + }, + seconds: { + toMilliseconds: 1000, + }, + minutes: { + toMilliseconds: 60 * 1000, + }, + hours: { + toMilliseconds: 60 * 60 * 1000, + toSeconds: 60 * 60, + }, + days: { + toSeconds: 24 * 60 * 60, + toMilliseconds: 24 * 60 * 60 * 1000, + }, +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/create-node/bin/create 2.js b/n8n-n8n-1.109.2/packages/@n8n/create-node/bin/create 2.js new file mode 100755 index 00000000..5608e90b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/create-node/bin/create 2.js @@ -0,0 +1,9 @@ +#!/usr/bin/env node + +import { spawnSync } from 'node:child_process'; + +const result = spawnSync('n8n-node', ['new', ...process.argv.slice(2)], { + stdio: 'inherit', +}); + +process.exit(result.status ?? 1); diff --git a/n8n-n8n-1.109.2/packages/@n8n/db/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/db/src/index 2.ts new file mode 100755 index 00000000..b2b1bd96 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/db/src/index 2.ts @@ -0,0 +1,38 @@ +export { + WithStringId, + WithTimestamps, + WithTimestampsAndStringId, + jsonColumnType, + datetimeColumnType, + dbType, + JsonColumn, + DateTimeColumn, +} from './entities/abstract-entity'; + +export { generateNanoId } from './utils/generators'; +export { isStringArray } from './utils/is-string-array'; +export { isValidEmail } from './utils/is-valid-email'; +export { separate } from './utils/separate'; +export { sql } from './utils/sql'; +export { idStringifier, lowerCaser, objectRetriever, sqlite } from './utils/transformers'; + +export * from './entities'; +export * from './entities/types-db'; +export { NoXss } from './utils/validators/no-xss.validator'; +export { NoUrl } from './utils/validators/no-url.validator'; + +export * from './repositories'; +export * from './subscribers'; + +export { Column as DslColumn } from './migrations/dsl/column'; +export { CreateTable } from './migrations/dsl/table'; +export { sqliteMigrations } from './migrations/sqlite'; +export { mysqlMigrations } from './migrations/mysqldb'; +export { postgresMigrations } from './migrations/postgresdb'; + +export { wrapMigration } from './migrations/migration-helpers'; +export * from './migrations/migration-types'; +export { DbConnection } from './connection/db-connection'; +export { DbConnectionOptions } from './connection/db-connection-options'; + +export { AuthRolesService } from './services/auth.roles.service'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/debounce 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/debounce 2.ts new file mode 100755 index 00000000..bcaf8e40 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/debounce 2.ts @@ -0,0 +1,37 @@ +import debounce from 'lodash/debounce'; + +/** + * Debounce a class method using `lodash/debounce`. + * + * @param waitMs - Number of milliseconds to debounce method by. + * + * @example + * ``` + * class MyClass { + * @Debounce(1000) + * async myMethod() { + * // debounced + * } + * } + * ``` + */ +export const Debounce = + (waitMs: number): MethodDecorator => + ( + _: object, + methodName: string | symbol, + originalDescriptor: PropertyDescriptor, + ): TypedPropertyDescriptor => ({ + configurable: true, + + get() { + const debouncedFn = debounce(originalDescriptor.value, waitMs); + + Object.defineProperty(this, methodName, { + configurable: false, + value: debouncedFn, + }); + + return debouncedFn as T; + }, + }); diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/errors 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/errors 2.ts new file mode 100755 index 00000000..ebe714c6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/errors 2.ts @@ -0,0 +1,7 @@ +import { UnexpectedError } from 'n8n-workflow'; + +export class NonMethodError extends UnexpectedError { + constructor(name: string) { + super(`${name} must be a method on a class to use this decorator`); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/index 2.ts new file mode 100755 index 00000000..974076a1 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/index 2.ts @@ -0,0 +1,12 @@ +export * from './controller'; +export * from './command'; +export { Debounce } from './debounce'; +export * from './execution-lifecycle'; +export { Memoized } from './memoized'; +export * from './module'; +export * from './multi-main'; +export * from './pubsub'; +export { Redactable } from './redactable'; +export * from './shutdown'; +export * from './module/module-metadata'; +export { Timed, TimedOptions } from './timed'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/memoized 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/memoized 2.ts new file mode 100755 index 00000000..3ff5c566 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/memoized 2.ts @@ -0,0 +1,41 @@ +import assert from 'node:assert'; + +/** + * A decorator that implements memoization for class property getters. + * + * The decorated getter will only be executed once and its value cached for subsequent access + * + * @example + * class Example { + * @Memoized + * get computedValue() { + * // This will only run once and the result will be cached + * return heavyComputation(); + * } + * } + * + * @throws If decorator is used on something other than a getter + */ +export function Memoized( + target: object, + propertyKey: string | symbol, + descriptor?: TypedPropertyDescriptor, +): TypedPropertyDescriptor { + const originalGetter = descriptor?.get; + assert(originalGetter, '@Memoized can only be used on getters'); + + // Replace the original getter for the first call + descriptor.get = function (this: typeof target.constructor): T { + const value = originalGetter.call(this); + // Add a property on the class instance to stop reading from the getter on class prototype + Object.defineProperty(this, propertyKey, { + value, + configurable: false, + enumerable: false, + writable: false, + }); + return value; + }; + + return descriptor; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/redactable 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/redactable 2.ts new file mode 100755 index 00000000..9ef47cf1 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/redactable 2.ts @@ -0,0 +1,66 @@ +import { UnexpectedError } from 'n8n-workflow'; + +type UserLike = { + id: string; + email?: string; + firstName?: string; + lastName?: string; + role: string; +}; + +export class RedactableError extends UnexpectedError { + constructor(fieldName: string, args: string) { + super( + `Failed to find "${fieldName}" property in argument "${args.toString()}". Please set the decorator \`@Redactable()\` only on \`LogStreamingEventRelay\` methods where the argument contains a "${fieldName}" property.`, + ); + } +} + +function toRedactable(userLike: UserLike) { + return { + userId: userLike.id, + _email: userLike.email, + _firstName: userLike.firstName, + _lastName: userLike.lastName, + globalRole: userLike.role, + }; +} + +type FieldName = 'user' | 'inviter' | 'invitee'; + +/** + * Mark redactable properties in a `{ user: UserLike }` field in an `LogStreamingEventRelay` + * method arg. These properties will be later redacted by the log streaming + * destination based on user prefs. Only for `n8n.audit.*` logs. + * + * Also transform `id` to `userId` and `role` to `globalRole`. + * + * @example + * + * { id: '123'; email: 'test@example.com', role: 'some-role' } -> + * { userId: '123'; _email: 'test@example.com', globalRole: 'some-role' } + */ +export const Redactable = + (fieldName: FieldName = 'user'): MethodDecorator => + (_target, _propertyName, propertyDescriptor: PropertyDescriptor) => { + // eslint-disable-next-line @typescript-eslint/no-restricted-types + const originalMethod = propertyDescriptor.value as Function; + + type MethodArgs = Array<{ [fieldName: string]: UserLike }>; + + propertyDescriptor.value = function (...args: MethodArgs) { + const index = args.findIndex((arg) => arg[fieldName] !== undefined); + + if (index === -1) throw new RedactableError(fieldName, args.toString()); + + const userLike = args[index]?.[fieldName]; + + // @ts-expect-error Transformation + if (userLike) args[index][fieldName] = toRedactable(userLike); + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return originalMethod.apply(this, args); + }; + + return propertyDescriptor; + }; diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/timed 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/timed 2.ts new file mode 100755 index 00000000..12dd0089 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/timed 2.ts @@ -0,0 +1,42 @@ +export interface TimedOptions { + /** Duration (in ms) above which to log a warning. Defaults to `100`. */ + threshold?: number; + /** Whether to include method parameters in the log. Defaults to `false`. */ + logArgs?: boolean; +} + +interface Logger { + warn(message: string, meta?: object): void; +} + +/** + * Factory to create decorators to warn when method calls exceed a duration threshold. + */ +export const Timed = + (logger: Logger, msg = 'Slow method call') => + (options: TimedOptions = {}): MethodDecorator => + (_target, propertyKey, descriptor: PropertyDescriptor) => { + const originalMethod = descriptor.value as (...args: unknown[]) => unknown; + const thresholdMs = options.threshold ?? 100; + const logArgs = options.logArgs ?? false; + + descriptor.value = async function (...args: unknown[]) { + const methodName = `${this.constructor.name}.${String(propertyKey)}`; + const start = performance.now(); + const result = await originalMethod.apply(this, args); + const durationMs = performance.now() - start; + + if (durationMs > thresholdMs) { + logger.warn(msg, { + method: methodName, + durationMs: Math.round(durationMs), + thresholdMs, + params: logArgs ? args : '[hidden]', + }); + } + + return result; + }; + + return descriptor; + }; diff --git a/n8n-n8n-1.109.2/packages/@n8n/decorators/src/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/types 2.ts new file mode 100755 index 00000000..c87decd2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/decorators/src/types 2.ts @@ -0,0 +1,14 @@ +export type Class = new (...args: A) => T; + +type EventHandlerFn = () => Promise | void; +export type EventHandlerClass = Class>; +export type EventHandler = { + /** Class holding the method to call on an event. */ + eventHandlerClass: EventHandlerClass; + + /** Name of the method to call on an event. */ + methodName: string; + + /** Name of the event to listen to. */ + eventName: T; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/di/src/di 2.ts b/n8n-n8n-1.109.2/packages/@n8n/di/src/di 2.ts new file mode 100755 index 00000000..a6acc60e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/di/src/di 2.ts @@ -0,0 +1,143 @@ +import 'reflect-metadata'; + +/** + * Represents a class constructor type that can be instantiated with 'new' + * @template T The type of instance the constructor creates + */ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type Constructable = new (...args: any[]) => T; + +type AbstractConstructable = abstract new (...args: unknown[]) => T; + +type ServiceIdentifier = Constructable | AbstractConstructable; + +type Factory = (...args: unknown[]) => T; + +interface Metadata { + instance?: T; + factory?: Factory; +} + +interface Options { + factory?: Factory; +} + +const instances = new Map(); + +/** + * Decorator that marks a class as available for dependency injection. + * @param options Configuration options for the injectable class + * @param options.factory Optional factory function to create instances of this class + * @returns A class decorator to be applied to the target class + */ +// eslint-disable-next-line @typescript-eslint/no-restricted-types +export function Service(): Function; +// eslint-disable-next-line @typescript-eslint/no-restricted-types +export function Service(options: Options): Function; +export function Service({ factory }: Options = {}) { + return function (target: Constructable) { + instances.set(target, { factory }); + return target; + }; +} + +class DIError extends Error { + constructor(message: string) { + super(`[DI] ${message}`); + } +} + +class ContainerClass { + /** Stack to track types being resolved to detect circular dependencies */ + private readonly resolutionStack: ServiceIdentifier[] = []; + + /** + * Checks if a type is registered in the container + * @template T The type to check for + * @param type The constructor of the type to check + * @returns True if the type is registered (has metadata), false otherwise + */ + has(type: ServiceIdentifier): boolean { + return instances.has(type); + } + + /** + * Retrieves or creates an instance of the specified type from the container + * @template T The type of instance to retrieve + * @param type The constructor of the type to retrieve + * @returns An instance of the specified type with all dependencies injected + * @throws {DIError} If circular dependencies are detected or if the type is not injectable + */ + get(type: ServiceIdentifier): T { + const { resolutionStack } = this; + const metadata = instances.get(type) as Metadata; + if (!metadata) { + // Special case: Allow undefined returns for non-decorated constructor params + // when resolving a dependency chain (i.e., resolutionStack not empty) + if (resolutionStack.length) return undefined as T; + throw new DIError(`${type.name} is not decorated with ${Service.name}`); + } + + if (metadata?.instance) return metadata.instance as T; + + // Add current type to resolution stack before resolving dependencies + resolutionStack.push(type); + + try { + let instance: T; + + const paramTypes = (Reflect.getMetadata('design:paramtypes', type) ?? []) as Constructable[]; + + const dependencies = paramTypes.map(

(paramType: Constructable

, index: number) => { + if (paramType === undefined) { + throw new DIError( + `Circular dependency detected in ${type.name} at index ${index}.\n${resolutionStack.map((t) => t.name).join(' -> ')}\n`, + ); + } + return this.get(paramType); + }); + + if (metadata?.factory) { + instance = metadata.factory(...dependencies); + } else { + // Create new instance with resolved dependencies + instance = new (type as Constructable)(...dependencies) as T; + } + + instances.set(type, { ...metadata, instance }); + return instance; + } catch (error) { + if (error instanceof TypeError && error.message.toLowerCase().includes('abstract')) { + throw new DIError(`${type.name} is an abstract class, and cannot be instantiated`); + } + throw error; + } finally { + resolutionStack.pop(); + } + } + + /** + * Manually sets an instance for a specific type in the container + * @template T The type of instance being set + * @param type The constructor of the type to set. This can also be an abstract class + * @param instance The instance to store in the container + */ + set(type: ServiceIdentifier, instance: T): void { + // Preserve any existing metadata (like factory) when setting new instance + const metadata = instances.get(type) ?? {}; + instances.set(type, { ...metadata, instance }); + } + + /** Clears all instantiated instances from the container while preserving type registrations */ + reset(): void { + for (const metadata of instances.values()) { + delete metadata.instance; + } + } +} + +/** + * Global dependency injection container instance + * Used to retrieve and manage class instances and their dependencies + */ +export const Container = new ContainerClass(); diff --git a/n8n-n8n-1.109.2/packages/@n8n/errors/src/application.error 2.ts b/n8n-n8n-1.109.2/packages/@n8n/errors/src/application.error 2.ts new file mode 100755 index 00000000..c33cda55 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/errors/src/application.error 2.ts @@ -0,0 +1,36 @@ +import type { Event } from '@sentry/node'; +import callsites from 'callsites'; + +import type { ErrorLevel, ReportingOptions } from './types'; + +/** + * @deprecated Use `UserError`, `OperationalError` or `UnexpectedError` instead. + */ +export class ApplicationError extends Error { + level: ErrorLevel; + + readonly tags: NonNullable; + + readonly extra?: Event['extra']; + + readonly packageName?: string; + + constructor( + message: string, + { level, tags = {}, extra, ...rest }: ErrorOptions & ReportingOptions = {}, + ) { + super(message, rest); + this.level = level ?? 'error'; + this.tags = tags; + this.extra = extra; + + try { + const filePath = callsites()[2].getFileName() ?? ''; + // eslint-disable-next-line no-useless-escape + const match = /packages\/([^\/]+)\//.exec(filePath)?.[1]; + + if (match) this.tags.packageName = match; + // eslint-disable-next-line no-empty + } catch {} + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/errors/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/errors/src/index 2.ts new file mode 100755 index 00000000..8de63e4d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/errors/src/index 2.ts @@ -0,0 +1,2 @@ +export { ApplicationError } from './application.error'; +export * from './types'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/errors/src/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/errors/src/types 2.ts new file mode 100755 index 00000000..7cbcc4cc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/errors/src/types 2.ts @@ -0,0 +1,16 @@ +import type { Event } from '@sentry/node'; + +export type ErrorLevel = 'fatal' | 'error' | 'warning' | 'info'; + +export type ErrorTags = NonNullable; + +export type ReportingOptions = { + /** Whether the error should be reported to Sentry */ + shouldReport?: boolean; + /** Whether the error log should be logged (default to true) */ + shouldBeLogged?: boolean; + level?: ErrorLevel; + tags?: ErrorTags; + extra?: Event['extra']; + executionId?: string; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/eslint-config/src/plugin 2.ts b/n8n-n8n-1.109.2/packages/@n8n/eslint-config/src/plugin 2.ts new file mode 100755 index 00000000..da810921 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/eslint-config/src/plugin 2.ts @@ -0,0 +1,30 @@ +import type { ESLint } from 'eslint'; +import { rules } from './rules/index.js'; + +const plugin = { + meta: { + name: 'n8n-local-rules', + }, + configs: {}, + // @ts-expect-error Rules type does not match for typescript-eslint and eslint + rules: rules as ESLint.Plugin['rules'], +} satisfies ESLint.Plugin; + +export const localRulesPlugin = { + ...plugin, + configs: { + recommended: { + plugins: { + 'n8n-local-rules': plugin, + }, + rules: { + 'n8n-local-rules/no-uncaught-json-parse': 'error', + 'n8n-local-rules/no-json-parse-json-stringify': 'error', + 'n8n-local-rules/no-unneeded-backticks': 'error', + 'n8n-local-rules/no-interpolation-in-regular-string': 'error', + 'n8n-local-rules/no-unused-param-in-catch-clause': 'error', + 'n8n-local-rules/no-useless-catch-throw': 'error', + }, + }, + }, +} satisfies ESLint.Plugin; diff --git a/n8n-n8n-1.109.2/packages/@n8n/eslint-config/src/plugins.d 2.ts b/n8n-n8n-1.109.2/packages/@n8n/eslint-config/src/plugins.d 2.ts new file mode 100755 index 00000000..8335ec10 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/eslint-config/src/plugins.d 2.ts @@ -0,0 +1 @@ +declare module 'eslint-plugin-lodash'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/scripts/create-json-schema 2.ts b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/scripts/create-json-schema 2.ts new file mode 100755 index 00000000..990b25aa --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/scripts/create-json-schema 2.ts @@ -0,0 +1,22 @@ +import { extensionManifestSchema } from '../src/schema'; +import { zodToJsonSchema } from 'zod-to-json-schema'; +import { writeFile } from 'fs/promises'; +import { dirname, resolve } from 'path'; +import { fileURLToPath } from 'url'; +import { format, resolveConfig } from 'prettier'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); +const rootDir = resolve(__dirname, '..'); + +const jsonSchema = zodToJsonSchema(extensionManifestSchema, { + name: 'N8nExtensionSchema', + nameStrategy: 'title', +}); + +(async () => { + const filepath = 'schema.json'; + const schema = JSON.stringify(jsonSchema); + const config = await resolveConfig(filepath); + const formattedSchema = await format(schema, { ...config, filepath }); + await writeFile(resolve(rootDir, filepath), formattedSchema); +})(); diff --git a/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/index 2.ts new file mode 100755 index 00000000..e27a6e2f --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/index 2.ts @@ -0,0 +1 @@ +export * from './schema'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/schema 2.ts b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/schema 2.ts new file mode 100755 index 00000000..0b6d47b3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/schema 2.ts @@ -0,0 +1,96 @@ +import { z } from 'zod'; + +/** + * Schema for the extension configuration. + */ +export const extensionManifestSchema = z.object({ + /** + * Name of the extension package. + */ + name: z.string(), + + /** + * The display name of the extension. + */ + displayName: z.string(), + + /** + * Description of the extension package. + */ + description: z.string(), + + /** + * Publisher of the extension. + */ + publisher: z.string(), + + /** + * Version of the extension package. + */ + version: z.string(), + + /** + * Category the extension belongs to. + */ + categories: z.array(z.string()), + + /** + * Setup paths for backend and frontend code entry points. + */ + entry: z.object({ + /** + * Path to the backend entry file. + */ + backend: z.string(), + /** + * Path to the frontend entry file. + */ + frontend: z.string(), + }), + + /** + * Minimum SDK version required to run the extension. + */ + minSDKVersion: z.string(), + + /** + * Permissions object specifying allowed access for frontend and backend. + */ + permissions: z.object({ + /** + * List of frontend permissions (array of strings). + */ + frontend: z.array(z.string()), + /** + * List of backend permissions (array of strings). + */ + backend: z.array(z.string()), + }), + + /** + * List of events that the extension listens to. + */ + events: z.array(z.string()), + + /** + * Define extension points for existing functionalities. + */ + extends: z.object({ + /** + * Extends the views configuration. + */ + views: z.object({ + /** + * Extends the workflows view configuration. + */ + workflows: z.object({ + /** + * Header component for the workflows view. + */ + header: z.string(), + }), + }), + }), +}); + +export type ExtensionManifest = z.infer; diff --git a/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/shims.d 2.ts b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/shims.d 2.ts new file mode 100755 index 00000000..11f02fe2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/extension-sdk/src/shims.d 2.ts @@ -0,0 +1 @@ +/// diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/errors 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/errors 2.ts new file mode 100755 index 00000000..ec36a0b1 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/errors 2.ts @@ -0,0 +1,27 @@ +export abstract class ImapError extends Error {} + +/** Error thrown when a connection attempt has timed out */ +export class ConnectionTimeoutError extends ImapError { + constructor( + /** timeout in milliseconds that the connection waited before timing out */ + readonly timeout?: number, + ) { + let message = 'connection timed out'; + if (timeout) { + message += `. timeout = ${timeout} ms`; + } + super(message); + } +} + +export class ConnectionClosedError extends ImapError { + constructor() { + super('Connection closed unexpectedly'); + } +} + +export class ConnectionEndedError extends ImapError { + constructor() { + super('Connection ended unexpectedly'); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/imap-simple 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/imap-simple 2.ts new file mode 100755 index 00000000..93bb9e05 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/imap-simple 2.ts @@ -0,0 +1,203 @@ +import { EventEmitter } from 'events'; +import type Imap from 'imap'; +import { type ImapMessage } from 'imap'; + +import { getMessage } from './helpers/get-message'; +import { PartData } from './part-data'; +import type { Message, MessagePart, SearchCriteria } from './types'; + +const IMAP_EVENTS = ['alert', 'mail', 'expunge', 'uidvalidity', 'update', 'close', 'end'] as const; + +export class ImapSimple extends EventEmitter { + /** flag to determine whether we should suppress ECONNRESET from bubbling up to listener */ + private ending = false; + + constructor(private readonly imap: Imap) { + super(); + + // pass most node-imap `Connection` events through 1:1 + IMAP_EVENTS.forEach((event) => { + this.imap.on(event, this.emit.bind(this, event)); + }); + + // special handling for `error` event + this.imap.on('error', (e: Error & { code?: string }) => { + // if .end() has been called and an 'ECONNRESET' error is received, don't bubble + if (e && this.ending && e.code?.toUpperCase() === 'ECONNRESET') { + return; + } + this.emit('error', e); + }); + } + + /** disconnect from the imap server */ + end(): void { + // set state flag to suppress 'ECONNRESET' errors that are triggered when .end() is called. + // it is a known issue that has no known fix. This just temporarily ignores that error. + // https://github.com/mscdex/node-imap/issues/391 + // https://github.com/mscdex/node-imap/issues/395 + this.ending = true; + + // using 'close' event to unbind ECONNRESET error handler, because the node-imap + // maintainer claims it is the more reliable event between 'end' and 'close'. + // https://github.com/mscdex/node-imap/issues/394 + this.imap.once('close', () => { + this.ending = false; + }); + + this.imap.end(); + } + + /** + * Search the currently open mailbox, and retrieve the results + * + * Results are in the form: + * + * [{ + * attributes: object, + * parts: [ { which: string, size: number, body: string }, ... ] + * }, ...] + * + * See node-imap's ImapMessage signature for information about `attributes`, `which`, `size`, and `body`. + * For any message part that is a `HEADER`, the body is automatically parsed into an object. + */ + async search( + /** Criteria to use to search. Passed to node-imap's .search() 1:1 */ + searchCriteria: SearchCriteria[], + /** Criteria to use to fetch the search results. Passed to node-imap's .fetch() 1:1 */ + fetchOptions: Imap.FetchOptions, + /** Optional limit to restrict the number of messages fetched */ + limit?: number, + ) { + return await new Promise((resolve, reject) => { + this.imap.search(searchCriteria, (e, uids) => { + if (e) { + reject(e); + return; + } + + if (uids.length === 0) { + resolve([]); + return; + } + + // If limit is specified, take only the first N UIDs + let uidsToFetch = uids; + if (limit && limit > 0 && uids.length > limit) { + uidsToFetch = uids.slice(0, limit); + } + + const fetch = this.imap.fetch(uidsToFetch, fetchOptions); + let messagesRetrieved = 0; + const messages: Message[] = []; + + const fetchOnMessage = async (message: Imap.ImapMessage, seqNo: number) => { + const msg: Message = await getMessage(message); + msg.seqNo = seqNo; + messages.push(msg); + + messagesRetrieved++; + if (messagesRetrieved === uidsToFetch.length) { + resolve(messages.filter((m) => !!m)); + } + }; + + const fetchOnError = (error: Error) => { + fetch.removeListener('message', fetchOnMessage); + fetch.removeListener('end', fetchOnEnd); + reject(error); + }; + + const fetchOnEnd = () => { + fetch.removeListener('message', fetchOnMessage); + fetch.removeListener('error', fetchOnError); + }; + + fetch.on('message', fetchOnMessage); + fetch.once('error', fetchOnError); + fetch.once('end', fetchOnEnd); + }); + }); + } + + /** Download a "part" (either a portion of the message body, or an attachment) */ + async getPartData( + /** The message returned from `search()` */ + message: Message, + /** The message part to be downloaded, from the `message.attributes.struct` Array */ + part: MessagePart, + ) { + return await new Promise((resolve, reject) => { + const fetch = this.imap.fetch(message.attributes.uid, { + bodies: [part.partID], + struct: true, + }); + + const fetchOnMessage = async (msg: ImapMessage) => { + const result = await getMessage(msg); + if (result.parts.length !== 1) { + reject(new Error('Got ' + result.parts.length + ' parts, should get 1')); + return; + } + + const data = result.parts[0].body as string; + const encoding = part.encoding.toUpperCase(); + resolve(PartData.fromData(data, encoding)); + }; + + const fetchOnError = (error: Error) => { + fetch.removeListener('message', fetchOnMessage); + fetch.removeListener('end', fetchOnEnd); + reject(error); + }; + + const fetchOnEnd = () => { + fetch.removeListener('message', fetchOnMessage); + fetch.removeListener('error', fetchOnError); + }; + + fetch.once('message', fetchOnMessage); + fetch.once('error', fetchOnError); + fetch.once('end', fetchOnEnd); + }); + } + + /** Adds the provided flag(s) to the specified message(s). */ + async addFlags( + /** The messages uid */ + uid: number[], + /** The flags to add to the message(s). */ + flags: string | string[], + ) { + return await new Promise((resolve, reject) => { + this.imap.addFlags(uid, flags, (e) => (e ? reject(e) : resolve())); + }); + } + + /** Returns a list of mailboxes (folders). */ + async getBoxes() { + return await new Promise((resolve, reject) => { + this.imap.getBoxes((e, boxes) => (e ? reject(e) : resolve(boxes))); + }); + } + + /** Open a mailbox */ + async openBox( + /** The name of the box to open */ + boxName: string, + ): Promise { + return await new Promise((resolve, reject) => { + this.imap.openBox(boxName, (e, result) => (e ? reject(e) : resolve(result))); + }); + } + + /** Close a mailbox */ + async closeBox( + /** If autoExpunge is true, any messages marked as Deleted in the currently open mailbox will be removed @default true */ + autoExpunge = true, + ) { + return await new Promise((resolve, reject) => { + this.imap.closeBox(autoExpunge, (e) => (e ? reject(e) : resolve())); + }); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/imap-simple.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/imap-simple.test 2.ts new file mode 100755 index 00000000..896c0956 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/imap-simple.test 2.ts @@ -0,0 +1,266 @@ +import { EventEmitter } from 'events'; +import Imap, { type Box, type MailBoxes } from 'imap'; +import { Readable } from 'stream'; +import type { Mocked } from 'vitest'; +import { mock } from 'vitest-mock-extended'; + +import { ImapSimple } from './imap-simple'; +import { PartData } from './part-data'; + +type MockImap = EventEmitter & { + connect: Mocked<() => unknown>; + fetch: Mocked<() => unknown>; + end: Mocked<() => unknown>; + search: Mocked<(...args: Parameters) => unknown>; + sort: Mocked<(...args: Parameters) => unknown>; + openBox: Mocked< + (boxName: string, onOpen: (error: Error | null, box?: Box) => unknown) => unknown + >; + closeBox: Mocked<(...args: Parameters) => unknown>; + getBoxes: Mocked<(onBoxes: (error: Error | null, boxes?: MailBoxes) => unknown) => unknown>; + addFlags: Mocked<(...args: Parameters) => unknown>; +}; + +vi.mock('imap', () => { + return { + default: class InlineMockImap extends EventEmitter implements MockImap { + connect = vi.fn(); + fetch = vi.fn(); + end = vi.fn(); + search = vi.fn(); + sort = vi.fn(); + openBox = vi.fn(); + closeBox = vi.fn(); + addFlags = vi.fn(); + getBoxes = vi.fn(); + }, + }; +}); + +vi.mock('./part-data', () => ({ + // eslint-disable-next-line @typescript-eslint/naming-convention + PartData: { fromData: vi.fn(() => 'decoded') }, +})); + +describe('ImapSimple', () => { + function createImap() { + const imap = new Imap({ user: 'testuser', password: 'testpass' }); + return { imapSimple: new ImapSimple(imap), mockImap: imap as unknown as MockImap }; + } + + describe('constructor', () => { + it('should forward nonerror events', () => { + const { imapSimple, mockImap } = createImap(); + const onMail = vi.fn(); + imapSimple.on('mail', onMail); + mockImap.emit('mail', 3); + expect(onMail).toHaveBeenCalledWith(3); + }); + + it('should suppress ECONNRESET errors if ending', () => { + const { imapSimple, mockImap } = createImap(); + const onError = vi.fn(); + imapSimple.on('error', onError); + imapSimple.end(); + + mockImap.emit('error', { message: 'reset', code: 'ECONNRESET' }); + expect(onError).not.toHaveBeenCalled(); + }); + + it('should forward ECONNRESET errors if not ending', () => { + const { imapSimple, mockImap } = createImap(); + const onError = vi.fn(); + imapSimple.on('error', onError); + + const error = { message: 'reset', code: 'ECONNRESET' }; + mockImap.emit('error', error); + expect(onError).toHaveBeenCalledWith(error); + }); + }); + + describe('search', () => { + it('should resolve with messages returned from fetch', async () => { + const { imapSimple, mockImap } = createImap(); + + const fetchEmitter = new EventEmitter(); + const mockMessages = [{ uid: 1 }, { uid: 2 }, { uid: 3 }]; + vi.mocked(mockImap.search).mockImplementation((_criteria, onResult) => + onResult( + null as unknown as Error, + mockMessages.map((m) => m.uid), + ), + ); + mockImap.fetch = vi.fn(() => fetchEmitter); + + const searchPromise = imapSimple.search(['UNSEEN', ['FROM', 'test@n8n.io']], { + bodies: ['BODY'], + }); + expect(mockImap.search).toHaveBeenCalledWith( + ['UNSEEN', ['FROM', 'test@n8n.io']], + expect.any(Function), + ); + + for (const message of mockMessages) { + const messageEmitter = new EventEmitter(); + const body = 'body' + message.uid; + const bodyStream = Readable.from(body); + fetchEmitter.emit('message', messageEmitter, message.uid); + messageEmitter.emit('body', bodyStream, { which: 'TEXT', size: Buffer.byteLength(body) }); + messageEmitter.emit('attributes', { uid: message.uid }); + await new Promise((resolve) => { + bodyStream.on('end', resolve); + }); + messageEmitter.emit('end'); + } + + fetchEmitter.emit('end'); + + const messages = await searchPromise; + + expect(messages).toEqual([ + { + attributes: { uid: 1 }, + parts: [{ body: 'body1', size: 5, which: 'TEXT' }], + seqNo: 1, + }, + { + attributes: { uid: 2 }, + parts: [{ body: 'body2', size: 5, which: 'TEXT' }], + seqNo: 2, + }, + { + attributes: { uid: 3 }, + parts: [{ body: 'body3', size: 5, which: 'TEXT' }], + seqNo: 3, + }, + ]); + }); + }); + + describe('getPartData', () => { + it('should return decoded part data', async () => { + const { imapSimple, mockImap } = createImap(); + + const fetchEmitter = new EventEmitter(); + mockImap.fetch = vi.fn(() => fetchEmitter); + + const message = { attributes: { uid: 123 } }; + const part = { partID: '1.2', encoding: 'BASE64' }; + + const partDataPromise = imapSimple.getPartData(mock(message), mock(part)); + + const body = 'encoded-body'; + const messageEmitter = new EventEmitter(); + const bodyStream = Readable.from(body); + + fetchEmitter.emit('message', messageEmitter); + + messageEmitter.emit('body', bodyStream, { + which: part.partID, + size: Buffer.byteLength(body), + }); + messageEmitter.emit('attributes', {}); + await new Promise((resolve) => bodyStream.on('end', resolve)); + messageEmitter.emit('end'); + + fetchEmitter.emit('end'); + + const result = await partDataPromise; + expect(PartData.fromData).toHaveBeenCalledWith('encoded-body', 'BASE64'); + expect(result).toBe('decoded'); + }); + }); + + describe('openBox', () => { + it('should open the mailbox', async () => { + const { imapSimple, mockImap } = createImap(); + const box = mock({ name: 'INBOX' }); + vi.mocked(mockImap.openBox).mockImplementation((_boxName, onOpen) => + onOpen(null as unknown as Error, box), + ); + await expect(imapSimple.openBox('INBOX')).resolves.toEqual(box); + }); + + it('should reject on error', async () => { + const { imapSimple, mockImap } = createImap(); + vi.mocked(mockImap.openBox).mockImplementation((_boxName, onOpen) => + onOpen(new Error('nope')), + ); + await expect(imapSimple.openBox('INBOX')).rejects.toThrow('nope'); + }); + }); + + describe('closeBox', () => { + it('should close the mailbox with default autoExpunge=true', async () => { + const { imapSimple, mockImap } = createImap(); + vi.mocked(mockImap.closeBox).mockImplementation((_expunge, onClose) => + onClose(null as unknown as Error), + ); + await expect(imapSimple.closeBox()).resolves.toBeUndefined(); + expect(mockImap.closeBox).toHaveBeenCalledWith(true, expect.any(Function)); + }); + + it('should close the mailbox with autoExpunge=false', async () => { + const { imapSimple, mockImap } = createImap(); + vi.mocked(mockImap.closeBox).mockImplementation((_expunge, onClose) => + onClose(null as unknown as Error), + ); + await expect(imapSimple.closeBox(false)).resolves.toBeUndefined(); + expect(mockImap.closeBox).toHaveBeenCalledWith(false, expect.any(Function)); + }); + + it('should reject on error', async () => { + const { imapSimple, mockImap } = createImap(); + vi.mocked(mockImap.closeBox).mockImplementation((_expunge, onClose) => + onClose(new Error('fail')), + ); + await expect(imapSimple.closeBox()).rejects.toThrow('fail'); + }); + }); + + describe('addFlags', () => { + it('should add flags to messages and resolve', async () => { + const { imapSimple, mockImap } = createImap(); + vi.mocked(mockImap.addFlags).mockImplementation((_uids, _flags, onAdd) => + onAdd(null as unknown as Error), + ); + + await expect(imapSimple.addFlags([1, 2], ['\\Seen'])).resolves.toBeUndefined(); + expect(mockImap.addFlags).toHaveBeenCalledWith([1, 2], ['\\Seen'], expect.any(Function)); + }); + + it('should reject on error', async () => { + const { imapSimple, mockImap } = createImap(); + vi.mocked(mockImap.addFlags).mockImplementation((_uids, _flags, onAdd) => + onAdd(new Error('add flags failed')), + ); + + await expect(imapSimple.addFlags([1], '\\Seen')).rejects.toThrow('add flags failed'); + }); + }); + + describe('getBoxes', () => { + it('should resolve with list of mailboxes', async () => { + const { imapSimple, mockImap } = createImap(); + // eslint-disable-next-line @typescript-eslint/naming-convention + const boxes = mock({ INBOX: {}, Archive: {} }); + + vi.mocked(mockImap.getBoxes).mockImplementation((onBoxes) => + onBoxes(null as unknown as Error, boxes), + ); + + await expect(imapSimple.getBoxes()).resolves.toEqual(boxes); + expect(mockImap.getBoxes).toHaveBeenCalledWith(expect.any(Function)); + }); + + it('should reject on error', async () => { + const { imapSimple, mockImap } = createImap(); + + vi.mocked(mockImap.getBoxes).mockImplementation((onBoxes) => + onBoxes(new Error('getBoxes failed')), + ); + + await expect(imapSimple.getBoxes()).rejects.toThrow('getBoxes failed'); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/index 2.ts new file mode 100755 index 00000000..2e766bf7 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/index 2.ts @@ -0,0 +1,100 @@ +/* eslint-disable @typescript-eslint/no-unsafe-member-access */ + +import Imap from 'imap'; + +import { ConnectionClosedError, ConnectionEndedError, ConnectionTimeoutError } from './errors'; +import { ImapSimple } from './imap-simple'; +import type { ImapSimpleOptions, MessagePart } from './types'; + +/** + * Connect to an Imap server, returning an ImapSimple instance, which is a wrapper over node-imap to simplify it's api for common use cases. + */ +export async function connect(options: ImapSimpleOptions): Promise { + const authTimeout = options.imap.authTimeout ?? 2000; + options.imap.authTimeout = authTimeout; + + const imap = new Imap(options.imap); + + return await new Promise((resolve, reject) => { + const cleanUp = () => { + imap.removeListener('ready', imapOnReady); + imap.removeListener('error', imapOnError); + imap.removeListener('close', imapOnClose); + imap.removeListener('end', imapOnEnd); + }; + + const imapOnReady = () => { + cleanUp(); + resolve(new ImapSimple(imap)); + }; + + const imapOnError = (e: Error & { source?: string }) => { + if (e.source === 'timeout-auth') { + e = new ConnectionTimeoutError(authTimeout); + } + + cleanUp(); + reject(e); + }; + + const imapOnEnd = () => { + cleanUp(); + reject(new ConnectionEndedError()); + }; + + const imapOnClose = () => { + cleanUp(); + reject(new ConnectionClosedError()); + }; + + imap.once('ready', imapOnReady); + imap.once('error', imapOnError); + imap.once('close', imapOnClose); + imap.once('end', imapOnEnd); + + if (options.onMail) { + imap.on('mail', options.onMail); + } + + if (options.onExpunge) { + imap.on('expunge', options.onExpunge); + } + + if (options.onUpdate) { + imap.on('update', options.onUpdate); + } + + imap.connect(); + }); +} + +/** + * Given the `message.attributes.struct`, retrieve a flattened array of `parts` objects that describe the structure of + * the different parts of the message's body. Useful for getting a simple list to iterate for the purposes of, + * for example, finding all attachments. + * + * Code taken from http://stackoverflow.com/questions/25247207/how-to-read-and-save-attachments-using-node-imap + * + * @returns {Array} a flattened array of `parts` objects that describe the structure of the different parts of the + * message's body + */ +export function getParts( + /** The `message.attributes.struct` value from the message you wish to retrieve parts for. */ + // eslint-disable-next-line @typescript-eslint/no-explicit-any + struct: any, + /** The list of parts to push to. */ + parts: MessagePart[] = [], +): MessagePart[] { + for (let i = 0; i < struct.length; i++) { + if (Array.isArray(struct[i])) { + getParts(struct[i], parts); + } else if (struct[i].partID) { + parts.push(struct[i] as MessagePart); + } + } + return parts; +} + +export * from './imap-simple'; +export * from './errors'; +export * from './types'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/part-data 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/part-data 2.ts new file mode 100755 index 00000000..77ff09a2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/part-data 2.ts @@ -0,0 +1,83 @@ +import * as iconvlite from 'iconv-lite'; +import * as qp from 'quoted-printable'; +import * as utf8 from 'utf8'; +import * as uuencode from 'uuencode'; + +export abstract class PartData { + constructor(readonly buffer: Buffer) {} + + toString() { + return this.buffer.toString(); + } + + static fromData(data: string, encoding: string, charset?: string): PartData { + if (encoding === 'BASE64') { + return new Base64PartData(data); + } + + if (encoding === 'QUOTED-PRINTABLE') { + return new QuotedPrintablePartData(data, charset); + } + + if (encoding === '7BIT') { + return new SevenBitPartData(data); + } + + if (encoding === '8BIT' || encoding === 'BINARY') { + return new BinaryPartData(data, charset); + } + + if (encoding === 'UUENCODE') { + return new UuencodedPartData(data); + } + + // if it gets here, the encoding is not currently supported + throw new Error('Unknown encoding ' + encoding); + } +} + +export class Base64PartData extends PartData { + constructor(data: string) { + super(Buffer.from(data, 'base64')); + } +} + +export class QuotedPrintablePartData extends PartData { + constructor(data: string, charset?: string) { + const decoded = + charset?.toUpperCase() === 'UTF-8' ? utf8.decode(qp.decode(data)) : qp.decode(data); + super(Buffer.from(decoded)); + } +} + +export class SevenBitPartData extends PartData { + constructor(data: string) { + super(Buffer.from(data)); + } + + toString() { + return this.buffer.toString('ascii'); + } +} + +export class BinaryPartData extends PartData { + constructor( + data: string, + readonly charset: string = 'utf-8', + ) { + super(Buffer.from(data)); + } + + toString() { + return iconvlite.decode(this.buffer, this.charset); + } +} + +export class UuencodedPartData extends PartData { + constructor(data: string) { + const parts = data.split('\n'); // remove newline characters + const merged = parts.splice(1, parts.length - 4).join(''); // remove excess lines and join lines with empty string + const decoded = uuencode.decode(merged); + super(decoded); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/part-data.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/part-data.test 2.ts new file mode 100755 index 00000000..8299b417 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/part-data.test 2.ts @@ -0,0 +1,88 @@ +import { + PartData, + Base64PartData, + QuotedPrintablePartData, + SevenBitPartData, + BinaryPartData, + UuencodedPartData, +} from '../src/part-data'; + +describe('PartData', () => { + describe('fromData', () => { + it('should return an instance of Base64PartData when encoding is BASE64', () => { + const result = PartData.fromData('data', 'BASE64'); + expect(result).toBeInstanceOf(Base64PartData); + }); + + it('should return an instance of QuotedPrintablePartData when encoding is QUOTED-PRINTABLE', () => { + const result = PartData.fromData('data', 'QUOTED-PRINTABLE'); + expect(result).toBeInstanceOf(QuotedPrintablePartData); + }); + + it('should return an instance of SevenBitPartData when encoding is 7BIT', () => { + const result = PartData.fromData('data', '7BIT'); + expect(result).toBeInstanceOf(SevenBitPartData); + }); + + it('should return an instance of BinaryPartData when encoding is 8BIT or BINARY', () => { + let result = PartData.fromData('data', '8BIT'); + expect(result).toBeInstanceOf(BinaryPartData); + result = PartData.fromData('data', 'BINARY'); + expect(result).toBeInstanceOf(BinaryPartData); + }); + + it('should return an instance of UuencodedPartData when encoding is UUENCODE', () => { + const result = PartData.fromData('data', 'UUENCODE'); + expect(result).toBeInstanceOf(UuencodedPartData); + }); + + it('should throw an error when encoding is not supported', () => { + expect(() => PartData.fromData('data', 'UNSUPPORTED')).toThrow( + 'Unknown encoding UNSUPPORTED', + ); + }); + }); +}); + +describe('Base64PartData', () => { + it('should correctly decode base64 data', () => { + const data = Buffer.from('Hello, world!', 'utf-8').toString('base64'); + const partData = new Base64PartData(data); + expect(partData.toString()).toBe('Hello, world!'); + }); +}); + +describe('QuotedPrintablePartData', () => { + it('should correctly decode quoted-printable data', () => { + const data = '=48=65=6C=6C=6F=2C=20=77=6F=72=6C=64=21'; // 'Hello, world!' in quoted-printable + const partData = new QuotedPrintablePartData(data); + expect(partData.toString()).toBe('Hello, world!'); + }); +}); + +describe('SevenBitPartData', () => { + it('should correctly decode 7bit data', () => { + const data = 'Hello, world!'; + const partData = new SevenBitPartData(data); + expect(partData.toString()).toBe('Hello, world!'); + }); +}); + +describe('BinaryPartData', () => { + it('should correctly decode binary data', () => { + const data = Buffer.from('Hello, world!', 'utf-8').toString(); + const partData = new BinaryPartData(data); + expect(partData.toString()).toBe('Hello, world!'); + }); +}); + +describe('UuencodedPartData', () => { + it('should correctly decode uuencoded data', () => { + const data = Buffer.from( + 'YmVnaW4gNjQ0IGRhdGEKLTImNUw7JlxMKCc9TzxGUUQoMGBgCmAKZW5kCg==', + 'base64', + ).toString('binary'); + const partData = new UuencodedPartData(data); + expect(partData.toString()).toBe('Hello, world!'); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/imap/src/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/imap/src/types 2.ts new file mode 100755 index 00000000..de0964de --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/imap/src/types 2.ts @@ -0,0 +1,43 @@ +import type { Config, ImapMessageBodyInfo, ImapMessageAttributes } from 'imap'; + +export interface ImapSimpleOptions { + /** Options to pass to node-imap constructor. */ + imap: Config; + + /** Server event emitted when new mail arrives in the currently open mailbox. */ + onMail?: ((numNewMail: number) => void) | undefined; + + /** Server event emitted when a message was expunged externally. seqNo is the sequence number (instead of the unique UID) of the message that was expunged. If you are caching sequence numbers, all sequence numbers higher than this value MUST be decremented by 1 in order to stay synchronized with the server and to keep correct continuity. */ + onExpunge?: ((seqNo: number) => void) | undefined; + + /** Server event emitted when message metadata (e.g. flags) changes externally. */ + onUpdate?: + | ((seqNo: number, info: { num: number | undefined; text: unknown }) => void) + | undefined; +} + +export interface MessagePart { + partID: string; + encoding: 'BASE64' | 'QUOTED-PRINTABLE' | '7BIT' | '8BIT' | 'BINARY' | 'UUENCODE'; + type: 'TEXT'; + subtype: string; + params?: { + charset?: string; + }; + disposition?: { + type: string; + }; +} + +export interface MessageBodyPart extends ImapMessageBodyInfo { + /** string type where which=='TEXT', complex Object where which=='HEADER' */ + body: string | object; +} + +export interface Message { + attributes: ImapMessageAttributes; + parts: MessageBodyPart[]; + seqNo?: number; +} + +export type SearchCriteria = string | [string, string]; diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/index 2.ts new file mode 100755 index 00000000..8de0516a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/index 2.ts @@ -0,0 +1,2 @@ +export type * from './types'; +export { jsonSchemaToZod } from './json-schema-to-zod'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/json-schema-to-zod 2.ts b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/json-schema-to-zod 2.ts new file mode 100755 index 00000000..6f1c6a13 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/json-schema-to-zod 2.ts @@ -0,0 +1,15 @@ +import type { z } from 'zod'; + +import { parseSchema } from './parsers/parse-schema'; +import type { JsonSchemaToZodOptions, JsonSchema } from './types'; + +export const jsonSchemaToZod = ( + schema: JsonSchema, + options: JsonSchemaToZodOptions = {}, +): T => { + return parseSchema(schema, { + path: [], + seen: new Map(), + ...options, + }) as T; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/types 2.ts new file mode 100755 index 00000000..bb342af2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/src/types 2.ts @@ -0,0 +1,82 @@ +import type { ZodTypeAny } from 'zod'; + +export type Serializable = + | { [key: string]: Serializable } + | Serializable[] + | string + | number + | boolean + | null; + +export type JsonSchema = JsonSchemaObject | boolean; +export type JsonSchemaObject = { + // left permissive by design + type?: string | string[]; + + // object + properties?: { [key: string]: JsonSchema }; + additionalProperties?: JsonSchema; + unevaluatedProperties?: JsonSchema; + patternProperties?: { [key: string]: JsonSchema }; + minProperties?: number; + maxProperties?: number; + required?: string[] | boolean; + propertyNames?: JsonSchema; + + // array + items?: JsonSchema | JsonSchema[]; + additionalItems?: JsonSchema; + minItems?: number; + maxItems?: number; + uniqueItems?: boolean; + + // string + minLength?: number; + maxLength?: number; + pattern?: string; + format?: string; + + // number + minimum?: number; + maximum?: number; + exclusiveMinimum?: number | boolean; + exclusiveMaximum?: number | boolean; + multipleOf?: number; + + // unions + anyOf?: JsonSchema[]; + allOf?: JsonSchema[]; + oneOf?: JsonSchema[]; + + if?: JsonSchema; + then?: JsonSchema; + else?: JsonSchema; + + // shared + const?: Serializable; + enum?: Serializable[]; + + errorMessage?: { [key: string]: string | undefined }; + + description?: string; + default?: Serializable; + readOnly?: boolean; + not?: JsonSchema; + contentEncoding?: string; + nullable?: boolean; +}; + +export type ParserSelector = (schema: JsonSchemaObject, refs: Refs) => ZodTypeAny; +export type ParserOverride = (schema: JsonSchemaObject, refs: Refs) => ZodTypeAny | undefined; + +export type JsonSchemaToZodOptions = { + withoutDefaults?: boolean; + withoutDescribes?: boolean; + parserOverride?: ParserOverride; + depth?: number; +}; + +export type Refs = JsonSchemaToZodOptions & { + path: Array; + seen: Map; +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/all 2.json b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/all 2.json new file mode 100755 index 00000000..f270ca3f --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/all 2.json @@ -0,0 +1,143 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "properties": { + "allOf": { + "allOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "anyOf": { + "anyOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "oneOf": { + "oneOf": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ] + }, + "array": { + "type": "array", + "items": { + "type": "string" + }, + "minItems": 2, + "maxItems": 3 + }, + "tuple": { + "type": "array", + "items": [ + { + "type": "boolean" + }, + { + "type": "number" + }, + { + "type": "string" + } + ], + "minItems": 2, + "maxItems": 3 + }, + "const": { + "const": "xbox" + }, + "enum": { + "enum": ["ps4", "ps5"] + }, + "ifThenElse": { + "if": { + "type": "string" + }, + "then": { + "const": "x" + }, + "else": { + "enum": [1, 2, 3] + } + }, + "null": { + "type": "null" + }, + "multiple": { + "type": ["array", "boolean"] + }, + "objAdditionalTrue": { + "type": "object", + "properties": { + "x": { + "type": "string" + } + }, + "additionalProperties": true + }, + "objAdditionalFalse": { + "type": "object", + "properties": { + "x": { + "type": "string" + } + }, + "additionalProperties": false + }, + "objAdditionalNumber": { + "type": "object", + "properties": { + "x": { + "type": "string" + } + }, + "additionalProperties": { + "type": "number" + } + }, + "objAdditionalOnly": { + "type": "object", + "additionalProperties": { + "type": "number" + } + }, + "patternProps": { + "type": "object", + "patternProperties": { + "^x": { + "type": "string" + }, + "^y": { + "type": "number" + } + }, + "properties": { + "z": { + "type": "string" + } + }, + "additionalProperties": false + } + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/extend-expect 2.ts b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/extend-expect 2.ts new file mode 100755 index 00000000..5196e434 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/extend-expect 2.ts @@ -0,0 +1,16 @@ +import type { z } from 'zod'; + +expect.extend({ + toMatchZod(this: jest.MatcherContext, actual: z.ZodTypeAny, expected: z.ZodTypeAny) { + const actualSerialized = JSON.stringify(actual._def, null, 2); + const expectedSerialized = JSON.stringify(expected._def, null, 2); + const pass = this.equals(actualSerialized, expectedSerialized); + + return { + pass, + message: pass + ? () => `Expected ${actualSerialized} not to match ${expectedSerialized}` + : () => `Expected ${actualSerialized} to match ${expectedSerialized}`, + }; + }, +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/jest.d 2.ts b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/jest.d 2.ts new file mode 100755 index 00000000..dff5a5fa --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/jest.d 2.ts @@ -0,0 +1,5 @@ +namespace jest { + interface Matchers { + toMatchZod(expected: unknown): T; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/json-schema-to-zod.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/json-schema-to-zod.test 2.ts new file mode 100755 index 00000000..5f383ae7 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/json-schema-to-zod/test/json-schema-to-zod.test 2.ts @@ -0,0 +1,106 @@ +import type { JSONSchema4, JSONSchema6Definition, JSONSchema7Definition } from 'json-schema'; +import { z } from 'zod'; + +import { jsonSchemaToZod } from '../src'; + +describe('jsonSchemaToZod', () => { + test('should accept json schema 7 and 4', () => { + const schema = { type: 'string' } as unknown; + + expect(jsonSchemaToZod(schema as JSONSchema4)); + expect(jsonSchemaToZod(schema as JSONSchema6Definition)); + expect(jsonSchemaToZod(schema as JSONSchema7Definition)); + }); + + test('can exclude defaults', () => { + expect( + jsonSchemaToZod( + { + type: 'string', + default: 'foo', + }, + { withoutDefaults: true }, + ), + ).toMatchZod(z.string()); + }); + + test('should include describes', () => { + expect( + jsonSchemaToZod({ + type: 'string', + description: 'foo', + }), + ).toMatchZod(z.string().describe('foo')); + }); + + test('can exclude describes', () => { + expect( + jsonSchemaToZod( + { + type: 'string', + description: 'foo', + }, + { + withoutDescribes: true, + }, + ), + ).toMatchZod(z.string()); + }); + + test('will remove optionality if default is present', () => { + expect( + jsonSchemaToZod({ + type: 'object', + properties: { + prop: { + type: 'string', + default: 'def', + }, + }, + }), + ).toMatchZod(z.object({ prop: z.string().default('def') })); + }); + + test('will handle falsy defaults', () => { + expect( + jsonSchemaToZod({ + type: 'boolean', + default: false, + }), + ).toMatchZod(z.boolean().default(false)); + }); + + test('will ignore undefined as default', () => { + expect( + jsonSchemaToZod({ + type: 'null', + default: undefined, + }), + ).toMatchZod(z.null()); + }); + + test('should be possible to define a custom parser', () => { + expect( + jsonSchemaToZod( + { + allOf: [{ type: 'string' }, { type: 'number' }, { type: 'boolean', description: 'foo' }], + }, + { + parserOverride: (schema, refs) => { + if ( + refs.path.length === 2 && + refs.path[0] === 'allOf' && + refs.path[1] === 2 && + schema.type === 'boolean' && + schema.description === 'foo' + ) { + return z.null(); + } + + return undefined; + }, + }, + ), + ).toMatchZod(z.intersection(z.string(), z.intersection(z.number(), z.null()))); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/node-cli/bin/n8n-node 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/node-cli/bin/n8n-node 2.mjs new file mode 100755 index 00000000..176d2af5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/node-cli/bin/n8n-node 2.mjs @@ -0,0 +1,5 @@ +#!/usr/bin/env node + +import { execute } from '@oclif/core'; + +await execute({ dir: import.meta.url }); diff --git a/n8n-n8n-1.109.2/packages/@n8n/node-cli/scripts/copy-templates 2.mjs b/n8n-n8n-1.109.2/packages/@n8n/node-cli/scripts/copy-templates 2.mjs new file mode 100755 index 00000000..60cb8461 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/node-cli/scripts/copy-templates 2.mjs @@ -0,0 +1,17 @@ +#!/usr/bin/env node + +import glob from 'fast-glob'; +import { cp } from 'node:fs/promises'; +import path from 'path'; + +const templateFiles = glob.sync(['src/template/templates/**/*'], { + cwd: path.resolve(import.meta.dirname, '..'), + ignore: ['**/node_modules', '**/dist'], + dot: true, +}); + +await Promise.all( + templateFiles.map((template) => + cp(template, `dist/${template.replace('src/', '')}`, { recursive: true }), + ), +); diff --git a/n8n-n8n-1.109.2/packages/@n8n/node-cli/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/node-cli/src/index 2.ts new file mode 100755 index 00000000..96935524 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/node-cli/src/index 2.ts @@ -0,0 +1,9 @@ +import Build from './commands/build'; +import Dev from './commands/dev'; +import New from './commands/new'; + +export const commands = { + new: New, + build: Build, + dev: Dev, +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/node-cli/src/modules.d 2.ts b/n8n-n8n-1.109.2/packages/@n8n/node-cli/src/modules.d 2.ts new file mode 100755 index 00000000..ec2ebe97 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/node-cli/src/modules.d 2.ts @@ -0,0 +1,19 @@ +declare module 'eslint-plugin-n8n-nodes-base' { + import type { ESLint } from 'eslint'; + + const plugin: ESLint.Plugin & { + configs: { + community: { + rules: Record; + }; + credentials: { + rules: Record; + }; + nodes: { + rules: Record; + }; + }; + }; + + export default plugin; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/.vscode/extensions 2.json b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/.vscode/extensions 2.json new file mode 100755 index 00000000..a15593fe --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/.vscode/extensions 2.json @@ -0,0 +1,3 @@ +{ + "recommendations": ["dbaeumer.vscode-eslint", "EditorConfig.EditorConfig", "biomejs.biome"] +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AnthropicApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AnthropicApi.credentials 2.ts new file mode 100755 index 00000000..bbc135c5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AnthropicApi.credentials 2.ts @@ -0,0 +1,57 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class AnthropicApi implements ICredentialType { + name = 'anthropicApi'; + + displayName = 'Anthropic'; + + documentationUrl = 'anthropic'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'string', + default: 'https://api.anthropic.com', + description: 'Override the default base URL for the API', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'x-api-key': '={{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials?.url}}', + url: '/v1/messages', + method: 'POST', + headers: { + 'anthropic-version': '2023-06-01', + }, + body: { + model: 'claude-3-haiku-20240307', + messages: [{ role: 'user', content: 'Hey' }], + max_tokens: 1, + }, + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AzureEntraCognitiveServicesOAuth2Api.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AzureEntraCognitiveServicesOAuth2Api.credentials 2.ts new file mode 100755 index 00000000..900bdc11 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AzureEntraCognitiveServicesOAuth2Api.credentials 2.ts @@ -0,0 +1,114 @@ +import type { ICredentialType, INodeProperties } from 'n8n-workflow'; + +const defaultScopes = ['openid', 'offline_access']; + +export class AzureEntraCognitiveServicesOAuth2Api implements ICredentialType { + name = 'azureEntraCognitiveServicesOAuth2Api'; + + // eslint-disable-next-line n8n-nodes-base/cred-class-field-display-name-missing-oauth2 + displayName = 'Azure Entra ID (Azure Active Directory) API'; + + extends = ['oAuth2Api']; + + documentationUrl = 'azureEntraCognitiveServicesOAuth2Api'; + + properties: INodeProperties[] = [ + { + displayName: 'Grant Type', + name: 'grantType', + type: 'hidden', + default: 'authorizationCode', + }, + { + displayName: 'Resource Name', + name: 'resourceName', + type: 'string', + required: true, + default: '', + }, + { + displayName: 'API Version', + name: 'apiVersion', + type: 'string', + required: true, + default: '2025-03-01-preview', + }, + { + displayName: 'Endpoint', + name: 'endpoint', + type: 'string', + default: undefined, + placeholder: 'https://westeurope.api.cognitive.microsoft.com', + }, + { + displayName: 'Tenant ID', + name: 'tenantId', + type: 'string', + default: 'common', + description: + 'Enter your Azure Tenant ID (Directory ID) or keep "common" for multi-tenant apps. Using a specific Tenant ID is generally recommended and required for certain authentication flows.', + placeholder: 'e.g., xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx or common', + }, + { + displayName: 'Authorization URL', + name: 'authUrl', + type: 'hidden', + default: '=https://login.microsoftonline.com/{{$self["tenantId"]}}/oauth2/authorize', + }, + { + displayName: 'Access Token URL', + name: 'accessTokenUrl', + type: 'hidden', + default: '=https://login.microsoftonline.com/{{$self["tenantId"]}}/oauth2/token', + }, + { + displayName: 'Additional Body Properties', + name: 'additionalBodyProperties', + type: 'hidden', + default: + '{"grant_type": "client_credentials", "resource": "https://cognitiveservices.azure.com/"}', + }, + { + displayName: 'Authentication', + name: 'authentication', + type: 'hidden', + default: 'body', + }, + { + displayName: 'Custom Scopes', + name: 'customScopes', + type: 'boolean', + default: false, + description: + 'Define custom scopes. You might need this if the default scopes are not sufficient or if you want to minimize permissions. Ensure you include "openid" and "offline_access".', + }, + { + displayName: 'Auth URI Query Parameters', + name: 'authQueryParameters', + type: 'hidden', + default: '', + description: + 'For some services additional query parameters have to be set which can be defined here', + placeholder: '', + }, + { + displayName: 'Enabled Scopes', + name: 'enabledScopes', + type: 'string', + displayOptions: { + show: { + customScopes: [true], + }, + }, + default: defaultScopes.join(' '), + placeholder: 'openid offline_access', + description: 'Space-separated list of scopes to request.', + }, + { + displayName: 'Scope', + name: 'scope', + type: 'hidden', + default: '={{ $self.customScopes ? $self.enabledScopes : "' + defaultScopes.join(' ') + '"}}', + }, + ]; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AzureOpenAiApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AzureOpenAiApi.credentials 2.ts new file mode 100755 index 00000000..99cbb99c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/AzureOpenAiApi.credentials 2.ts @@ -0,0 +1,50 @@ +import type { IAuthenticateGeneric, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class AzureOpenAiApi implements ICredentialType { + name = 'azureOpenAiApi'; + + displayName = 'Azure Open AI'; + + documentationUrl = 'azureopenai'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Resource Name', + name: 'resourceName', + type: 'string', + required: true, + default: '', + }, + { + displayName: 'API Version', + name: 'apiVersion', + type: 'string', + required: true, + default: '2025-03-01-preview', + }, + { + displayName: 'Endpoint', + name: 'endpoint', + type: 'string', + default: undefined, + placeholder: 'https://westeurope.api.cognitive.microsoft.com', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'api-key': '={{$credentials.apiKey}}', + }, + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/CohereApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/CohereApi.credentials 2.ts new file mode 100755 index 00000000..9a1117af --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/CohereApi.credentials 2.ts @@ -0,0 +1,47 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class CohereApi implements ICredentialType { + name = 'cohereApi'; + + displayName = 'CohereApi'; + + documentationUrl = 'cohere'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'hidden', + default: 'https://api.cohere.ai', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.url }}', + url: '/v1/models?page_size=1', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/DeepSeekApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/DeepSeekApi.credentials 2.ts new file mode 100755 index 00000000..6088fbbb --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/DeepSeekApi.credentials 2.ts @@ -0,0 +1,47 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class DeepSeekApi implements ICredentialType { + name = 'deepSeekApi'; + + displayName = 'DeepSeek'; + + documentationUrl = 'deepseek'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'hidden', + default: 'https://api.deepseek.com', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.url }}', + url: '/models', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/GooglePalmApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/GooglePalmApi.credentials 2.ts new file mode 100755 index 00000000..3c474e31 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/GooglePalmApi.credentials 2.ts @@ -0,0 +1,47 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class GooglePalmApi implements ICredentialType { + name = 'googlePalmApi'; + + displayName = 'Google Gemini(PaLM) Api'; + + documentationUrl = 'google'; + + properties: INodeProperties[] = [ + { + displayName: 'Host', + name: 'host', + required: true, + type: 'string', + default: 'https://generativelanguage.googleapis.com', + }, + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + qs: { + key: '={{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials.host}}/v1beta/models', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/GroqApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/GroqApi.credentials 2.ts new file mode 100755 index 00000000..1c2d2ae3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/GroqApi.credentials 2.ts @@ -0,0 +1,41 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class GroqApi implements ICredentialType { + name = 'groqApi'; + + displayName = 'Groq'; + + documentationUrl = 'groq'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://api.groq.com/openai/v1', + url: '/models', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/HuggingFaceApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/HuggingFaceApi.credentials 2.ts new file mode 100755 index 00000000..ba1af9b6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/HuggingFaceApi.credentials 2.ts @@ -0,0 +1,41 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class HuggingFaceApi implements ICredentialType { + name = 'huggingFaceApi'; + + displayName = 'HuggingFaceApi'; + + documentationUrl = 'huggingface'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://huggingface.co', + url: '/api/whoami-v2', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MilvusApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MilvusApi.credentials 2.ts new file mode 100755 index 00000000..12c3c664 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MilvusApi.credentials 2.ts @@ -0,0 +1,54 @@ +import type { + ICredentialTestRequest, + ICredentialType, + INodeProperties, + IAuthenticateGeneric, +} from 'n8n-workflow'; + +export class MilvusApi implements ICredentialType { + name = 'milvusApi'; + + displayName = 'Milvus'; + + documentationUrl = 'milvus'; + + properties: INodeProperties[] = [ + { + displayName: 'Base URL', + name: 'baseUrl', + required: true, + type: 'string', + default: 'http://localhost:19530', + }, + { + displayName: 'Username', + name: 'username', + type: 'string', + default: '', + }, + { + displayName: 'Password', + name: 'password', + type: 'string', + typeOptions: { password: true }, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.username}}:{{$credentials.password}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.baseUrl }}', + url: '/v1/vector/collections', + method: 'GET', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MistralCloudApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MistralCloudApi.credentials 2.ts new file mode 100755 index 00000000..c5b47b37 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MistralCloudApi.credentials 2.ts @@ -0,0 +1,42 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class MistralCloudApi implements ICredentialType { + name = 'mistralCloudApi'; + + displayName = 'Mistral Cloud API'; + + documentationUrl = 'mistral'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://api.mistral.ai/v1', + url: '/models', + method: 'GET', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MotorheadApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MotorheadApi.credentials 2.ts new file mode 100755 index 00000000..2a3b3e46 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/MotorheadApi.credentials 2.ts @@ -0,0 +1,54 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class MotorheadApi implements ICredentialType { + name = 'motorheadApi'; + + displayName = 'MotorheadApi'; + + documentationUrl = 'motorhead'; + + properties: INodeProperties[] = [ + { + displayName: 'Host', + name: 'host', + required: true, + type: 'string', + default: 'https://api.getmetal.io/v1', + }, + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Client ID', + name: 'clientId', + type: 'string', + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'x-metal-client-id': '={{$credentials.clientId}}', + 'x-metal-api-key': '={{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials.host}}/keys/current', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/OllamaApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/OllamaApi.credentials 2.ts new file mode 100755 index 00000000..3d030753 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/OllamaApi.credentials 2.ts @@ -0,0 +1,50 @@ +import type { + ICredentialTestRequest, + ICredentialType, + INodeProperties, + IAuthenticateGeneric, +} from 'n8n-workflow'; + +export class OllamaApi implements ICredentialType { + name = 'ollamaApi'; + + displayName = 'Ollama'; + + documentationUrl = 'ollama'; + + properties: INodeProperties[] = [ + { + displayName: 'Base URL', + name: 'baseUrl', + required: true, + type: 'string', + default: 'http://localhost:11434', + }, + { + displayName: 'API Key', + hint: 'When using Ollama behind a proxy with authentication (such as Open WebUI), provide the Bearer token/API key here. This is not required for the default Ollama installation', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + default: '', + required: false, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.baseUrl }}', + url: '/api/tags', + method: 'GET', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/OpenRouterApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/OpenRouterApi.credentials 2.ts new file mode 100755 index 00000000..a34126f5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/OpenRouterApi.credentials 2.ts @@ -0,0 +1,47 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class OpenRouterApi implements ICredentialType { + name = 'openRouterApi'; + + displayName = 'OpenRouter'; + + documentationUrl = 'openrouter'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'hidden', + default: 'https://openrouter.ai/api/v1', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.url }}', + url: '/key', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/PineconeApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/PineconeApi.credentials 2.ts new file mode 100755 index 00000000..0605a0af --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/PineconeApi.credentials 2.ts @@ -0,0 +1,43 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class PineconeApi implements ICredentialType { + name = 'pineconeApi'; + + displayName = 'PineconeApi'; + + documentationUrl = 'pinecone'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'Api-Key': '={{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://api.pinecone.io/indexes', + headers: { + accept: 'application/json; charset=utf-8', + }, + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/QdrantApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/QdrantApi.credentials 2.ts new file mode 100755 index 00000000..fbd3766e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/QdrantApi.credentials 2.ts @@ -0,0 +1,48 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class QdrantApi implements ICredentialType { + name = 'qdrantApi'; + + displayName = 'QdrantApi'; + + documentationUrl = 'https://docs.n8n.io/integrations/builtin/credentials/qdrant/'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: false, + default: '', + }, + { + displayName: 'Qdrant URL', + name: 'qdrantUrl', + type: 'string', + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + 'api-key': '={{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials.qdrantUrl}}', + url: '/collections', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/SearXngApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/SearXngApi.credentials 2.ts new file mode 100755 index 00000000..3248afa4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/SearXngApi.credentials 2.ts @@ -0,0 +1,19 @@ +import type { ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class SearXngApi implements ICredentialType { + name = 'searXngApi'; + + displayName = 'SearXNG'; + + documentationUrl = 'searxng'; + + properties: INodeProperties[] = [ + { + displayName: 'API URL', + name: 'apiUrl', + type: 'string', + default: '', + required: true, + }, + ]; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/SerpApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/SerpApi.credentials 2.ts new file mode 100755 index 00000000..a1ab3a55 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/SerpApi.credentials 2.ts @@ -0,0 +1,41 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class SerpApi implements ICredentialType { + name = 'serpApi'; + + displayName = 'SerpAPI'; + + documentationUrl = 'serp'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + qs: { + api_key: '={{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://serpapi.com', + url: '/account.json ', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/VercelAiGatewayApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/VercelAiGatewayApi.credentials 2.ts new file mode 100755 index 00000000..ccd69441 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/VercelAiGatewayApi.credentials 2.ts @@ -0,0 +1,63 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class VercelAiGatewayApi implements ICredentialType { + name = 'vercelAiGatewayApi'; + + displayName = 'Vercel AI Gateway'; + + documentationUrl = 'vercelaigateway'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key or OIDC Token', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + description: 'Your credentials for the Vercel AI Gateway', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'string', + required: true, + default: 'https://ai-gateway.vercel.sh/v1', + description: 'The base URL for your Vercel AI Gateway instance', + placeholder: 'https://ai-gateway.vercel.sh/v1', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + 'http-referer': 'https://n8n.io/', + 'x-title': 'n8n', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.url }}', + url: '/chat/completions', + method: 'POST', + headers: { + 'http-referer': 'https://n8n.io/', + 'x-title': 'n8n', + }, + body: { + model: 'openai/gpt-4.1-nano', + messages: [{ role: 'user', content: 'test' }], + max_tokens: 1, + }, + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/WeaviateApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/WeaviateApi.credentials 2.ts new file mode 100755 index 00000000..373b0310 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/WeaviateApi.credentials 2.ts @@ -0,0 +1,143 @@ +import type { ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow'; + +export class WeaviateApi implements ICredentialType { + name = 'weaviateApi'; + + displayName = 'Weaviate Credentials'; + + documentationUrl = 'https://docs.n8n.io/integrations/builtin/credentials/weaviate/'; + + properties: INodeProperties[] = [ + { + displayName: 'Connection Type', + name: 'connection_type', + type: 'options', + options: [ + { + name: 'Weaviate Cloud', + value: 'weaviate_cloud', + }, + { + name: 'Custom Connection', + value: 'custom_connection', + }, + ], + default: 'weaviate_cloud', + description: + 'Choose whether to connect to a Weaviate Cloud instance or a custom Weaviate instance.', + }, + { + displayName: 'Weaviate Cloud Endpoint', + name: 'weaviate_cloud_endpoint', + description: 'The Endpoint of a Weaviate Cloud instance.', + placeholder: 'https://your-cluster.weaviate.cloud', + type: 'string', + required: true, + default: '', + displayOptions: { + show: { + connection_type: ['weaviate_cloud'], + }, + }, + }, + { + displayName: 'Weaviate Api Key', + name: 'weaviate_api_key', + description: 'The API key for the Weaviate instance.', + type: 'string', + typeOptions: { password: true }, + default: '', + }, + { + displayName: 'Custom Connection HTTP Host', + name: 'custom_connection_http_host', + description: 'The host of your Weaviate instance.', + type: 'string', + required: true, + default: 'weaviate', + displayOptions: { + show: { + connection_type: ['custom_connection'], + }, + }, + }, + { + displayName: 'Custom Connection HTTP Port', + name: 'custom_connection_http_port', + description: 'The port of your Weaviate instance.', + type: 'number', + required: true, + default: 8080, + displayOptions: { + show: { + connection_type: ['custom_connection'], + }, + }, + }, + { + displayName: 'Custom Connection HTTP Secure', + name: 'custom_connection_http_secure', + description: 'Whether to use a secure connection for HTTP.', + type: 'boolean', + required: true, + default: false, + displayOptions: { + show: { + connection_type: ['custom_connection'], + }, + }, + }, + { + displayName: 'Custom Connection gRPC Host', + name: 'custom_connection_grpc_host', + description: 'The gRPC host of your Weaviate instance.', + type: 'string', + required: true, + default: 'weaviate', + displayOptions: { + show: { + connection_type: ['custom_connection'], + }, + }, + }, + { + displayName: 'Custom Connection gRPC Port', + name: 'custom_connection_grpc_port', + description: 'The gRPC port of your Weaviate instance.', + type: 'number', + required: true, + default: 50051, + displayOptions: { + show: { + connection_type: ['custom_connection'], + }, + }, + }, + { + displayName: 'Custom Connection gRPC Secure', + name: 'custom_connection_grpc_secure', + description: 'Whether to use a secure connection for gRPC.', + type: 'boolean', + required: true, + default: false, + displayOptions: { + show: { + connection_type: ['custom_connection'], + }, + }, + }, + ]; + + test: ICredentialTestRequest = { + request: { + baseURL: + '={{$credentials.weaviate_cloud_endpoint?$credentials.weaviate_cloud_endpoint.startsWith("http://") || $credentials.weaviate_cloud_endpoint.startsWith("https://")?$credentials.weaviate_cloud_endpoint:"https://" + $credentials.weaviate_cloud_endpoint:($credentials.custom_connection_http_secure ? "https" : "http") + "://" + $credentials.custom_connection_http_host + ":" + $credentials.custom_connection_http_port }}', + url: '/v1/nodes', + disableFollowRedirect: false, + headers: { + Authorization: + '={{$if($credentials.weaviate_api_key, "Bearer " + $credentials.weaviate_api_key, undefined)}}', + }, + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/WolframAlphaApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/WolframAlphaApi.credentials 2.ts new file mode 100755 index 00000000..642161c4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/WolframAlphaApi.credentials 2.ts @@ -0,0 +1,45 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class WolframAlphaApi implements ICredentialType { + name = 'wolframAlphaApi'; + + displayName = 'WolframAlphaApi'; + + documentationUrl = 'wolframalpha'; + + properties: INodeProperties[] = [ + { + displayName: 'App ID', + name: 'appId', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + qs: { + api_key: '={{$credentials.appId}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: 'https://api.wolframalpha.com/v1', + url: '=/simple', + qs: { + i: 'How much is 1 1', + appid: '={{$credentials.appId}}', + }, + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/XAiApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/XAiApi.credentials 2.ts new file mode 100755 index 00000000..780d6729 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/XAiApi.credentials 2.ts @@ -0,0 +1,47 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class XAiApi implements ICredentialType { + name = 'xAiApi'; + + displayName = 'xAi'; + + documentationUrl = 'xai'; + + properties: INodeProperties[] = [ + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + { + displayName: 'Base URL', + name: 'url', + type: 'hidden', + default: 'https://api.x.ai/v1', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{ $credentials.url }}', + url: '/models', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/XataApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/XataApi.credentials 2.ts new file mode 100755 index 00000000..0d66cdf8 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/XataApi.credentials 2.ts @@ -0,0 +1,55 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class XataApi implements ICredentialType { + name = 'xataApi'; + + displayName = 'Xata Api'; + + documentationUrl = 'xata'; + + properties: INodeProperties[] = [ + { + displayName: 'Database Endpoint', + name: 'databaseEndpoint', + required: true, + type: 'string', + default: '', + placeholder: 'https://{workspace}.{region}.xata.sh/db/{database}', + }, + { + displayName: 'Branch', + name: 'branch', + required: true, + type: 'string', + default: 'main', + }, + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: true, + default: '', + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: '=Bearer {{$credentials.apiKey}}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{$credentials.databaseEndpoint}}:{{$credentials.branch}}', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/ZepApi.credentials 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/ZepApi.credentials 2.ts new file mode 100755 index 00000000..92a461af --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/credentials/ZepApi.credentials 2.ts @@ -0,0 +1,67 @@ +import type { + IAuthenticateGeneric, + ICredentialTestRequest, + ICredentialType, + INodeProperties, +} from 'n8n-workflow'; + +export class ZepApi implements ICredentialType { + name = 'zepApi'; + + displayName = 'Zep Api'; + + documentationUrl = 'zep'; + + properties: INodeProperties[] = [ + { + displayName: 'This Zep integration is deprecated and will be removed in a future version.', + name: 'deprecationNotice', + type: 'notice', + default: '', + }, + { + displayName: 'API Key', + name: 'apiKey', + type: 'string', + typeOptions: { password: true }, + required: false, + default: '', + }, + { + displayName: 'Cloud', + description: 'Whether you are adding credentials for Zep Cloud instead of Zep Open Source', + name: 'cloud', + type: 'boolean', + default: false, + }, + { + displayName: 'API URL', + name: 'apiUrl', + required: false, + type: 'string', + default: 'http://localhost:8000', + displayOptions: { + show: { + cloud: [false], + }, + }, + }, + ]; + + authenticate: IAuthenticateGeneric = { + type: 'generic', + properties: { + headers: { + Authorization: + '={{$credentials.apiKey && !$credentials.cloud ? "Bearer " + $credentials.apiKey : "Api-Key " + $credentials.apiKey }}', + }, + }, + }; + + test: ICredentialTestRequest = { + request: { + baseURL: '={{!$credentials.cloud ? $credentials.apiUrl : "https://api.getzep.com"}}', + url: '={{!$credentials.cloud ? "/api/v1/collection" : "/api/v2/collections"}}', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/scripts/copy-tokenizer-json 2.js b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/scripts/copy-tokenizer-json 2.js new file mode 100755 index 00000000..2aa7f1da --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/scripts/copy-tokenizer-json 2.js @@ -0,0 +1,21 @@ +const glob = require('fast-glob'); +const fs = require('fs'); +const path = require('path'); + +function copyTokenizerJsonFiles(baseDir) { + // Make sure the target directory exists + const targetDir = path.resolve(baseDir, 'dist', 'utils', 'tokenizer'); + if (!fs.existsSync(targetDir)) { + fs.mkdirSync(targetDir, { recursive: true }); + } + // Copy all tokenizer JSON files + const files = glob.sync('utils/tokenizer/*.json', { cwd: baseDir }); + for (const file of files) { + const sourcePath = path.resolve(baseDir, file); + const targetPath = path.resolve(baseDir, 'dist', file); + fs.copyFileSync(sourcePath, targetPath); + console.log(`Copied: ${file} -> dist/${file}`); + } +} + +copyTokenizerJsonFiles(process.argv[2] || '.'); diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/scripts/post-build 2.js b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/scripts/post-build 2.js new file mode 100755 index 00000000..94501757 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/scripts/post-build 2.js @@ -0,0 +1,23 @@ +/** + * Post-build script + * + * This is a separate script instead of inline npm commands because using "&&"" to chain commands in --onSuccess can cause the watch mode to hang + */ + +const { execSync } = require('child_process'); + +function runCommand(command) { + try { + execSync(command, { stdio: 'inherit' }); + } catch (error) { + console.error(`Command failed: ${command}`); + process.exit(1); + } +} + +// Run all post-build tasks +runCommand('npx tsc-alias -p tsconfig.build.json'); +runCommand('node scripts/copy-tokenizer-json.js .'); +runCommand('node ../../nodes-base/scripts/copy-nodes-json.js .'); +runCommand('pnpm n8n-copy-static-files'); +runCommand('pnpm n8n-generate-metadata'); diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/generate-schema.d 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/generate-schema.d 2.ts new file mode 100755 index 00000000..90e0e15b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/generate-schema.d 2.ts @@ -0,0 +1,27 @@ +declare module 'generate-schema' { + export interface SchemaObject { + $schema: string; + title?: string; + type: string; + properties?: { + [key: string]: SchemaObject | SchemaArray | SchemaProperty; + }; + required?: string[]; + items?: SchemaObject | SchemaArray; + } + + export interface SchemaArray { + type: string; + items?: SchemaObject | SchemaArray | SchemaProperty; + oneOf?: Array; + required?: string[]; + } + + export interface SchemaProperty { + type: string | string[]; + format?: string; + } + + export function json(title: string, schema: SchemaObject): SchemaObject; + export function json(schema: SchemaObject): SchemaObject; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/types 2.ts new file mode 100755 index 00000000..bc73bdff --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/types 2.ts @@ -0,0 +1,5 @@ +import type { z } from 'zod'; + +export type OpenAICompatibleCredential = { apiKey: string; url: string }; + +export type ZodObjectAny = z.ZodObject; diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/zod.types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/zod.types 2.ts new file mode 100755 index 00000000..933bd1e3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/types/zod.types 2.ts @@ -0,0 +1,4 @@ +import type { z } from 'zod'; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type DynamicZodObject = z.ZodObject; diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nBinaryLoader 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nBinaryLoader 2.ts new file mode 100755 index 00000000..399f9ace --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nBinaryLoader 2.ts @@ -0,0 +1,239 @@ +import { CSVLoader } from '@langchain/community/document_loaders/fs/csv'; +import { DocxLoader } from '@langchain/community/document_loaders/fs/docx'; +import { EPubLoader } from '@langchain/community/document_loaders/fs/epub'; +import { PDFLoader } from '@langchain/community/document_loaders/fs/pdf'; +import type { Document } from '@langchain/core/documents'; +import type { TextSplitter } from '@langchain/textsplitters'; +import { createWriteStream } from 'fs'; +import { JSONLoader } from 'langchain/document_loaders/fs/json'; +import { TextLoader } from 'langchain/document_loaders/fs/text'; +import type { + IBinaryData, + IExecuteFunctions, + INodeExecutionData, + ISupplyDataFunctions, +} from 'n8n-workflow'; +import { NodeOperationError, BINARY_ENCODING } from 'n8n-workflow'; +import { pipeline } from 'stream/promises'; +import { file as tmpFile, type DirectoryResult } from 'tmp-promise'; + +import { getMetadataFiltersValues } from './helpers'; + +const SUPPORTED_MIME_TYPES = { + auto: ['*/*'], + pdfLoader: ['application/pdf'], + csvLoader: ['text/csv'], + epubLoader: ['application/epub+zip'], + docxLoader: ['application/vnd.openxmlformats-officedocument.wordprocessingml.document'], + textLoader: ['text/plain', 'text/mdx', 'text/md'], + jsonLoader: ['application/json'], +}; + +export class N8nBinaryLoader { + constructor( + private context: IExecuteFunctions | ISupplyDataFunctions, + private optionsPrefix = '', + private binaryDataKey = '', + private textSplitter?: TextSplitter, + ) {} + + async processAll(items?: INodeExecutionData[]): Promise { + const docs: Document[] = []; + + if (!items) return []; + + for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { + const processedDocuments = await this.processItem(items[itemIndex], itemIndex); + + docs.push(...processedDocuments); + } + + return docs; + } + + private async validateMimeType( + mimeType: string, + selectedLoader: keyof typeof SUPPORTED_MIME_TYPES, + ): Promise { + // Check if loader matches the mime-type of the data + if (selectedLoader !== 'auto' && !SUPPORTED_MIME_TYPES[selectedLoader].includes(mimeType)) { + const neededLoader = Object.keys(SUPPORTED_MIME_TYPES).find((loader) => + SUPPORTED_MIME_TYPES[loader as keyof typeof SUPPORTED_MIME_TYPES].includes(mimeType), + ); + + throw new NodeOperationError( + this.context.getNode(), + `Mime type doesn't match selected loader. Please select under "Loader Type": ${neededLoader}`, + ); + } + + if (!Object.values(SUPPORTED_MIME_TYPES).flat().includes(mimeType)) { + throw new NodeOperationError(this.context.getNode(), `Unsupported mime type: ${mimeType}`); + } + + if ( + !SUPPORTED_MIME_TYPES[selectedLoader].includes(mimeType) && + selectedLoader !== 'textLoader' && + selectedLoader !== 'auto' + ) { + throw new NodeOperationError( + this.context.getNode(), + `Unsupported mime type: ${mimeType} for selected loader: ${selectedLoader}`, + ); + } + } + + private async getFilePathOrBlob( + binaryData: IBinaryData, + mimeType: string, + ): Promise { + if (binaryData.id) { + const binaryBuffer = await this.context.helpers.binaryToBuffer( + await this.context.helpers.getBinaryStream(binaryData.id), + ); + return new Blob([binaryBuffer as BlobPart], { + type: mimeType, + }); + } else { + return new Blob([Buffer.from(binaryData.data, BINARY_ENCODING)], { + type: mimeType, + }); + } + } + + private async getLoader( + mimeType: string, + filePathOrBlob: string | Blob, + itemIndex: number, + ): Promise { + switch (mimeType) { + case 'application/pdf': + const splitPages = this.context.getNodeParameter( + `${this.optionsPrefix}splitPages`, + itemIndex, + false, + ) as boolean; + return new PDFLoader(filePathOrBlob, { splitPages }); + case 'text/csv': + const column = this.context.getNodeParameter( + `${this.optionsPrefix}column`, + itemIndex, + null, + ) as string; + const separator = this.context.getNodeParameter( + `${this.optionsPrefix}separator`, + itemIndex, + ',', + ) as string; + return new CSVLoader(filePathOrBlob, { column: column ?? undefined, separator }); + case 'application/epub+zip': + // EPubLoader currently does not accept Blobs https://github.com/langchain-ai/langchainjs/issues/1623 + let filePath: string; + if (filePathOrBlob instanceof Blob) { + const tmpFileData = await tmpFile({ prefix: 'epub-loader-' }); + const bufferData = await filePathOrBlob.arrayBuffer(); + await pipeline([new Uint8Array(bufferData)], createWriteStream(tmpFileData.path)); + return new EPubLoader(tmpFileData.path); + } else { + filePath = filePathOrBlob; + } + return new EPubLoader(filePath); + case 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': + return new DocxLoader(filePathOrBlob); + case 'text/plain': + return new TextLoader(filePathOrBlob); + case 'application/json': + const pointers = this.context.getNodeParameter( + `${this.optionsPrefix}pointers`, + itemIndex, + '', + ) as string; + const pointersArray = pointers.split(',').map((pointer) => pointer.trim()); + return new JSONLoader(filePathOrBlob, pointersArray); + default: + return new TextLoader(filePathOrBlob); + } + } + + private async loadDocuments( + loader: PDFLoader | CSVLoader | EPubLoader | DocxLoader | TextLoader | JSONLoader, + ): Promise { + return this.textSplitter + ? await this.textSplitter.splitDocuments(await loader.load()) + : await loader.load(); + } + + private async cleanupTmpFileIfNeeded( + cleanupTmpFile: DirectoryResult['cleanup'] | undefined, + ): Promise { + if (cleanupTmpFile) { + await cleanupTmpFile(); + } + } + + async processItem(item: INodeExecutionData, itemIndex: number): Promise { + const docs: Document[] = []; + const binaryMode = this.context.getNodeParameter('binaryMode', itemIndex, 'allInputData'); + if (binaryMode === 'allInputData') { + const binaryData = this.context.getInputData(); + + for (const data of binaryData) { + if (data.binary) { + const binaryDataKeys = Object.keys(data.binary); + + for (const fileKey of binaryDataKeys) { + const processedDocuments = await this.processItemByKey(item, itemIndex, fileKey); + docs.push(...processedDocuments); + } + } + } + } else { + const processedDocuments = await this.processItemByKey(item, itemIndex, this.binaryDataKey); + docs.push(...processedDocuments); + } + + return docs; + } + + async processItemByKey( + item: INodeExecutionData, + itemIndex: number, + binaryKey: string, + ): Promise { + const selectedLoader: keyof typeof SUPPORTED_MIME_TYPES = this.context.getNodeParameter( + 'loader', + itemIndex, + 'auto', + ) as keyof typeof SUPPORTED_MIME_TYPES; + + const docs: Document[] = []; + const metadata = getMetadataFiltersValues(this.context, itemIndex); + + if (!item) return []; + + const binaryData = this.context.helpers.assertBinaryData(itemIndex, binaryKey); + const { mimeType } = binaryData; + + await this.validateMimeType(mimeType, selectedLoader); + + const filePathOrBlob = await this.getFilePathOrBlob(binaryData, mimeType); + const cleanupTmpFile: DirectoryResult['cleanup'] | undefined = undefined; + const loader = await this.getLoader(mimeType, filePathOrBlob, itemIndex); + const loadedDoc = await this.loadDocuments(loader); + + docs.push(...loadedDoc); + + if (metadata) { + docs.forEach((document) => { + document.metadata = { + ...document.metadata, + ...metadata, + }; + }); + } + + await this.cleanupTmpFileIfNeeded(cleanupTmpFile); + + return docs; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nJsonLoader 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nJsonLoader 2.ts new file mode 100755 index 00000000..de5add3e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nJsonLoader 2.ts @@ -0,0 +1,90 @@ +import type { Document } from '@langchain/core/documents'; +import type { TextSplitter } from '@langchain/textsplitters'; +import { JSONLoader } from 'langchain/document_loaders/fs/json'; +import { TextLoader } from 'langchain/document_loaders/fs/text'; +import { + type IExecuteFunctions, + type INodeExecutionData, + type ISupplyDataFunctions, + NodeOperationError, +} from 'n8n-workflow'; + +import { getMetadataFiltersValues } from './helpers'; + +export class N8nJsonLoader { + constructor( + private context: IExecuteFunctions | ISupplyDataFunctions, + private optionsPrefix = '', + private textSplitter?: TextSplitter, + ) {} + + async processAll(items?: INodeExecutionData[]): Promise { + const docs: Document[] = []; + + if (!items) return []; + + for (let itemIndex = 0; itemIndex < items.length; itemIndex++) { + const processedDocuments = await this.processItem(items[itemIndex], itemIndex); + + docs.push(...processedDocuments); + } + + return docs; + } + + async processItem(item: INodeExecutionData, itemIndex: number): Promise { + const mode = this.context.getNodeParameter('jsonMode', itemIndex, 'allInputData') as + | 'allInputData' + | 'expressionData'; + + const pointers = this.context.getNodeParameter( + `${this.optionsPrefix}pointers`, + itemIndex, + '', + ) as string; + const pointersArray = pointers.split(',').map((pointer) => pointer.trim()); + const metadata = getMetadataFiltersValues(this.context, itemIndex) ?? []; + + if (!item) return []; + + let documentLoader: JSONLoader | TextLoader | null = null; + + if (mode === 'allInputData') { + const itemString = JSON.stringify(item.json); + const itemBlob = new Blob([itemString], { type: 'application/json' }); + documentLoader = new JSONLoader(itemBlob, pointersArray); + } + + if (mode === 'expressionData') { + const dataString = this.context.getNodeParameter('jsonData', itemIndex) as string | object; + if (typeof dataString === 'object') { + const itemBlob = new Blob([JSON.stringify(dataString)], { type: 'application/json' }); + documentLoader = new JSONLoader(itemBlob, pointersArray); + } + + if (typeof dataString === 'string') { + const itemBlob = new Blob([dataString], { type: 'text/plain' }); + documentLoader = new TextLoader(itemBlob); + } + } + + if (documentLoader === null) { + // This should never happen + throw new NodeOperationError(this.context.getNode(), 'Document loader is not initialized'); + } + + const docs = this.textSplitter + ? await this.textSplitter.splitDocuments(await documentLoader.load()) + : await documentLoader.load(); + + if (metadata) { + docs.forEach((doc) => { + doc.metadata = { + ...doc.metadata, + ...metadata, + }; + }); + } + return docs; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nTool 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nTool 2.ts new file mode 100755 index 00000000..91152fae --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nTool 2.ts @@ -0,0 +1,114 @@ +import type { DynamicStructuredToolInput } from '@langchain/core/tools'; +import { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools'; +import { StructuredOutputParser } from 'langchain/output_parsers'; +import type { ISupplyDataFunctions, IDataObject } from 'n8n-workflow'; +import { NodeConnectionTypes, jsonParse, NodeOperationError } from 'n8n-workflow'; +import type { ZodTypeAny } from 'zod'; +import { ZodBoolean, ZodNullable, ZodNumber, ZodObject, ZodOptional } from 'zod'; + +import type { ZodObjectAny } from '../types/types'; + +const getSimplifiedType = (schema: ZodTypeAny) => { + if (schema instanceof ZodObject) { + return 'object'; + } else if (schema instanceof ZodNumber) { + return 'number'; + } else if (schema instanceof ZodBoolean) { + return 'boolean'; + } else if (schema instanceof ZodNullable || schema instanceof ZodOptional) { + return getSimplifiedType(schema.unwrap()); + } + + return 'string'; +}; + +const getParametersDescription = (parameters: Array<[string, ZodTypeAny]>) => + parameters + .map( + ([name, schema]) => + `${name}: (description: ${schema.description ?? ''}, type: ${getSimplifiedType(schema)}, required: ${!schema.isOptional()})`, + ) + .join(',\n '); + +export const prepareFallbackToolDescription = (toolDescription: string, schema: ZodObject) => { + let description = `${toolDescription}`; + + const toolParameters = Object.entries(schema.shape); + + if (toolParameters.length) { + description += ` +Tool expects valid stringified JSON object with ${toolParameters.length} properties. +Property names with description, type and required status: +${getParametersDescription(toolParameters)} +ALL parameters marked as required must be provided`; + } + + return description; +}; + +export class N8nTool extends DynamicStructuredTool { + constructor( + private context: ISupplyDataFunctions, + fields: DynamicStructuredToolInput, + ) { + super(fields); + } + + asDynamicTool(): DynamicTool { + const { name, func, schema, context, description } = this; + + const parser = new StructuredOutputParser(schema); + + const wrappedFunc = async function (query: string) { + let parsedQuery: object; + + // First we try to parse the query using the structured parser (Zod schema) + try { + parsedQuery = await parser.parse(query); + } catch (e) { + // If we were unable to parse the query using the schema, we try to gracefully handle it + let dataFromModel; + + try { + // First we try to parse a JSON with more relaxed rules + dataFromModel = jsonParse(query, { acceptJSObject: true }); + } catch (error) { + // In case of error, + // If model supplied a simple string instead of an object AND only one parameter expected, we try to recover the object structure + if (Object.keys(schema.shape).length === 1) { + const parameterName = Object.keys(schema.shape)[0]; + dataFromModel = { [parameterName]: query }; + } else { + // Finally throw an error if we were unable to parse the query + throw new NodeOperationError( + context.getNode(), + `Input is not a valid JSON: ${error.message}`, + ); + } + } + + // If we were able to parse the query with a fallback, we try to validate it using the schema + // Here we will throw an error if the data still does not match the schema + parsedQuery = schema.parse(dataFromModel); + } + + try { + // Call tool function with parsed query + const result = await func(parsedQuery); + + return result; + } catch (e) { + const { index } = context.addInputData(NodeConnectionTypes.AiTool, [[{ json: { query } }]]); + void context.addOutputData(NodeConnectionTypes.AiTool, index, e); + + return e.toString(); + } + }; + + return new DynamicTool({ + name, + description: prepareFallbackToolDescription(description, schema), + func: wrappedFunc, + }); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nTool.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nTool.test 2.ts new file mode 100755 index 00000000..459ba0bc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/N8nTool.test 2.ts @@ -0,0 +1,170 @@ +import { DynamicStructuredTool, DynamicTool } from '@langchain/core/tools'; +import { createMockExecuteFunction } from 'n8n-nodes-base/test/nodes/Helpers'; +import type { INode, ISupplyDataFunctions } from 'n8n-workflow'; +import { z } from 'zod'; + +import { N8nTool } from './N8nTool'; + +const mockNode: INode = { + id: '1', + name: 'Mock node', + typeVersion: 2, + type: 'n8n-nodes-base.mock', + position: [60, 760], + parameters: { + operation: 'test', + }, +}; + +describe('Test N8nTool wrapper as DynamicStructuredTool', () => { + it('should wrap a tool', () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({ + foo: z.string(), + }), + }); + + expect(tool).toBeInstanceOf(DynamicStructuredTool); + }); +}); + +describe('Test N8nTool wrapper - DynamicTool fallback', () => { + it('should convert the tool to a dynamic tool', () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({ + foo: z.string(), + }), + }); + + const dynamicTool = tool.asDynamicTool(); + + expect(dynamicTool).toBeInstanceOf(DynamicTool); + }); + + it('should format fallback description correctly', () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({ + foo: z.string(), + bar: z.number().optional(), + qwe: z.boolean().describe('Boolean description'), + }), + }); + + const dynamicTool = tool.asDynamicTool(); + + expect(dynamicTool.description).toContain('foo: (description: , type: string, required: true)'); + expect(dynamicTool.description).toContain( + 'bar: (description: , type: number, required: false)', + ); + + expect(dynamicTool.description).toContain( + 'qwe: (description: Boolean description, type: boolean, required: true)', + ); + }); + + it('should handle empty parameter list correctly', () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({}), + }); + + const dynamicTool = tool.asDynamicTool(); + + expect(dynamicTool.description).toEqual('A dummy tool for testing'); + }); + + it('should parse correct parameters', async () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({ + foo: z.string().describe('Foo description'), + bar: z.number().optional(), + }), + }); + + const dynamicTool = tool.asDynamicTool(); + + const testParameters = { foo: 'some value' }; + + await dynamicTool.func(JSON.stringify(testParameters)); + + expect(func).toHaveBeenCalledWith(testParameters); + }); + + it('should recover when 1 parameter is passed directly', async () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({ + foo: z.string().describe('Foo description'), + }), + }); + + const dynamicTool = tool.asDynamicTool(); + + const testParameter = 'some value'; + + await dynamicTool.func(testParameter); + + expect(func).toHaveBeenCalledWith({ foo: testParameter }); + }); + + it('should recover when JS object is passed instead of JSON', async () => { + const func = jest.fn(); + + const ctx = createMockExecuteFunction({}, mockNode); + + const tool = new N8nTool(ctx, { + name: 'Dummy Tool', + description: 'A dummy tool for testing', + func, + schema: z.object({ + foo: z.string().describe('Foo description'), + }), + }); + + const dynamicTool = tool.asDynamicTool(); + + await dynamicTool.func('{ foo: "some value" }'); + + expect(func).toHaveBeenCalledWith({ foo: 'some value' }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/descriptions 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/descriptions 2.ts new file mode 100755 index 00000000..9d235ff6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/descriptions 2.ts @@ -0,0 +1,156 @@ +import type { DisplayCondition, INodeProperties, NodeParameterValue } from 'n8n-workflow'; + +export const schemaTypeField: INodeProperties = { + displayName: 'Schema Type', + name: 'schemaType', + type: 'options', + noDataExpression: true, + options: [ + { + name: 'Generate From JSON Example', + value: 'fromJson', + description: 'Generate a schema from an example JSON object', + }, + { + name: 'Define using JSON Schema', + value: 'manual', + description: 'Define the JSON schema manually', + }, + ], + default: 'fromJson', + description: 'How to specify the schema for the function', +}; + +/** + * Returns a field for inputting a JSON example that can be used to generate the schema. + * @param props + */ +export const buildJsonSchemaExampleField = (props?: { + showExtraProps?: Record | undefined>; +}): INodeProperties => ({ + displayName: 'JSON Example', + name: 'jsonSchemaExample', + type: 'json', + default: `{ + "some_input": "some_value" +}`, + noDataExpression: true, + typeOptions: { + rows: 10, + }, + displayOptions: { + show: { + ...props?.showExtraProps, + schemaType: ['fromJson'], + }, + }, + description: 'Example JSON object to use to generate the schema', +}); + +/** + * Returns a notice field about the generated schema properties being required by default. + * @param props + */ +export const buildJsonSchemaExampleNotice = (props?: { + showExtraProps?: Record | undefined>; +}): INodeProperties => ({ + displayName: + "All properties will be required. To make them optional, use the 'JSON Schema' schema type instead", + name: 'notice', + type: 'notice', + default: '', + displayOptions: { + show: { + ...props?.showExtraProps, + schemaType: ['fromJson'], + }, + }, +}); + +export const jsonSchemaExampleField = buildJsonSchemaExampleField(); + +export const buildInputSchemaField = (props?: { + showExtraProps?: Record | undefined>; +}): INodeProperties => ({ + displayName: 'Input Schema', + name: 'inputSchema', + type: 'json', + default: `{ +"type": "object", +"properties": { + "some_input": { + "type": "string", + "description": "Some input to the function" + } + } +}`, + noDataExpression: false, + typeOptions: { + rows: 10, + }, + displayOptions: { + show: { + ...props?.showExtraProps, + schemaType: ['manual'], + }, + }, + description: 'Schema to use for the function', + hint: 'Use JSON Schema format (examples). $refs syntax is currently not supported.', +}); + +export const inputSchemaField = buildInputSchemaField(); + +export const promptTypeOptions: INodeProperties = { + displayName: 'Source for Prompt (User Message)', + name: 'promptType', + type: 'options', + options: [ + { + name: 'Connected Chat Trigger Node', + value: 'auto', + description: + "Looks for an input field called 'chatInput' that is coming from a directly connected Chat Trigger", + }, + { + name: 'Define below', + value: 'define', + description: 'Use an expression to reference data in previous nodes or enter static text', + }, + ], + default: 'auto', +}; + +export const textInput: INodeProperties = { + displayName: 'Prompt (User Message)', + name: 'text', + type: 'string', + required: true, + default: '', + placeholder: 'e.g. Hello, how can you help me?', + typeOptions: { + rows: 2, + }, +}; + +export const textFromPreviousNode: INodeProperties = { + displayName: 'Prompt (User Message)', + name: 'text', + type: 'string', + required: true, + default: '={{ $json.chatInput }}', + typeOptions: { + rows: 2, + }, + disabledOptions: { show: { promptType: ['auto'] } }, +}; + +export const toolDescription: INodeProperties = { + displayName: 'Description', + name: 'toolDescription', + type: 'string', + default: 'AI Agent that can call other tools', + required: true, + typeOptions: { rows: 2 }, + description: + 'Explain to the LLM what this tool does, a good, specific description would allow LLMs to produce expected results much more often', +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/descriptions.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/descriptions.test 2.ts new file mode 100755 index 00000000..94954346 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/descriptions.test 2.ts @@ -0,0 +1,120 @@ +import { buildInputSchemaField } from './descriptions'; + +describe('buildInputSchemaField', () => { + it('should create input schema field with noDataExpression set to false', () => { + const result = buildInputSchemaField(); + + expect(result.noDataExpression).toBe(false); + expect(result.displayName).toBe('Input Schema'); + expect(result.name).toBe('inputSchema'); + expect(result.type).toBe('json'); + }); + + it('should include typeOptions with rows set to 10', () => { + const result = buildInputSchemaField(); + + expect(result.typeOptions).toEqual({ rows: 10 }); + }); + + it('should have correct default JSON schema', () => { + const result = buildInputSchemaField(); + + const expectedDefault = `{ +"type": "object", +"properties": { + "some_input": { + "type": "string", + "description": "Some input to the function" + } + } +}`; + expect(result.default).toBe(expectedDefault); + }); + + it('should include display options with schemaType manual', () => { + const result = buildInputSchemaField(); + + expect(result.displayOptions).toEqual({ + show: { + schemaType: ['manual'], + }, + }); + }); + + it('should merge showExtraProps when provided', () => { + const result = buildInputSchemaField({ + showExtraProps: { + mode: ['advanced'], + authentication: ['oauth2'], + }, + }); + + expect(result.displayOptions).toEqual({ + show: { + mode: ['advanced'], + authentication: ['oauth2'], + schemaType: ['manual'], + }, + }); + }); + + it('should include description and hint', () => { + const result = buildInputSchemaField(); + + expect(result.description).toBe('Schema to use for the function'); + expect(result.hint).toContain('JSON Schema'); + expect(result.hint).toContain('json-schema.org'); + }); + + it('should allow data expressions in the schema field', () => { + const result = buildInputSchemaField(); + + // noDataExpression is false, which means expressions are allowed + expect(result.noDataExpression).toBe(false); + + // Since noDataExpression is false, this should be valid + expect(typeof result.default).toBe('string'); + expect(result.noDataExpression).toBe(false); + }); + + it('should be a valid INodeProperties object', () => { + const result = buildInputSchemaField(); + + // Check all required fields for INodeProperties + expect(result).toHaveProperty('displayName'); + expect(result).toHaveProperty('name'); + expect(result).toHaveProperty('type'); + expect(result).toHaveProperty('default'); + + // Verify types + expect(typeof result.displayName).toBe('string'); + expect(typeof result.name).toBe('string'); + expect(typeof result.type).toBe('string'); + expect(typeof result.default).toBe('string'); + }); + + it('should properly handle edge cases with showExtraProps', () => { + // Empty showExtraProps + const result1 = buildInputSchemaField({ showExtraProps: {} }); + expect(result1.displayOptions).toEqual({ + show: { + schemaType: ['manual'], + }, + }); + + // showExtraProps with undefined values + const result2 = buildInputSchemaField({ + showExtraProps: { + field1: undefined, + field2: ['value2'], + }, + }); + expect(result2.displayOptions).toEqual({ + show: { + field1: undefined, + field2: ['value2'], + schemaType: ['manual'], + }, + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/helpers 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/helpers 2.ts new file mode 100755 index 00000000..6f1e2d91 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/helpers 2.ts @@ -0,0 +1,312 @@ +import type { BaseChatMessageHistory } from '@langchain/core/chat_history'; +import type { BaseChatModel } from '@langchain/core/language_models/chat_models'; +import type { BaseLLM } from '@langchain/core/language_models/llms'; +import type { BaseMessage } from '@langchain/core/messages'; +import type { Tool } from '@langchain/core/tools'; +import { Toolkit } from 'langchain/agents'; +import type { BaseChatMemory } from 'langchain/memory'; +import { NodeConnectionTypes, NodeOperationError, jsonStringify } from 'n8n-workflow'; +import type { + AiEvent, + IDataObject, + IExecuteFunctions, + ISupplyDataFunctions, + IWebhookFunctions, +} from 'n8n-workflow'; + +import { N8nTool } from './N8nTool'; + +function hasMethods(obj: unknown, ...methodNames: Array): obj is T { + return methodNames.every( + (methodName) => + typeof obj === 'object' && + obj !== null && + methodName in obj && + typeof (obj as Record)[methodName] === 'function', + ); +} + +export function getMetadataFiltersValues( + ctx: IExecuteFunctions | ISupplyDataFunctions, + itemIndex: number, +): Record | undefined { + const options = ctx.getNodeParameter('options', itemIndex, {}); + + if (options.metadata) { + const { metadataValues: metadata } = options.metadata as { + metadataValues: Array<{ + name: string; + value: string; + }>; + }; + if (metadata.length > 0) { + return metadata.reduce((acc, { name, value }) => ({ ...acc, [name]: value }), {}); + } + } + + if (options.searchFilterJson) { + return ctx.getNodeParameter('options.searchFilterJson', itemIndex, '', { + ensureType: 'object', + }) as Record; + } + + return undefined; +} + +export function isBaseChatMemory(obj: unknown) { + return hasMethods(obj, 'loadMemoryVariables', 'saveContext'); +} + +export function isBaseChatMessageHistory(obj: unknown) { + return hasMethods(obj, 'getMessages', 'addMessage'); +} + +export function isChatInstance(model: unknown): model is BaseChatModel { + const namespace = (model as BaseLLM)?.lc_namespace ?? []; + + return namespace.includes('chat_models'); +} + +export function isToolsInstance(model: unknown): model is Tool { + const namespace = (model as Tool)?.lc_namespace ?? []; + + return namespace.includes('tools'); +} + +export function getPromptInputByType(options: { + ctx: IExecuteFunctions | ISupplyDataFunctions; + i: number; + promptTypeKey: string; + inputKey: string; +}) { + const { ctx, i, promptTypeKey, inputKey } = options; + const promptType = ctx.getNodeParameter(promptTypeKey, i, 'define') as string; + + let input; + if (promptType === 'auto') { + input = ctx.evaluateExpression('{{ $json["chatInput"] }}', i) as string; + } else { + input = ctx.getNodeParameter(inputKey, i) as string; + } + + if (input === undefined) { + throw new NodeOperationError(ctx.getNode(), 'No prompt specified', { + description: + "Expected to find the prompt in an input field called 'chatInput' (this is what the chat trigger node outputs). To use something else, change the 'Prompt' parameter", + }); + } + + return input; +} + +export function getSessionId( + ctx: ISupplyDataFunctions | IWebhookFunctions, + itemIndex: number, + selectorKey = 'sessionIdType', + autoSelect = 'fromInput', + customKey = 'sessionKey', +) { + let sessionId = ''; + const selectorType = ctx.getNodeParameter(selectorKey, itemIndex) as string; + + if (selectorType === autoSelect) { + // If memory node is used in webhook like node(like chat trigger node), it doesn't have access to evaluateExpression + // so we try to extract sessionId from the bodyData + if ('getBodyData' in ctx) { + const bodyData = ctx.getBodyData() ?? {}; + sessionId = bodyData.sessionId as string; + } else { + sessionId = ctx.evaluateExpression('{{ $json.sessionId }}', itemIndex) as string; + + // try to get sessionId from chat trigger + if (!sessionId || sessionId === undefined) { + try { + const chatTrigger = ctx.getChatTrigger(); + + if (chatTrigger) { + sessionId = ctx.evaluateExpression( + `{{ $('${chatTrigger.name}').first().json.sessionId }}`, + itemIndex, + ) as string; + } + } catch (error) {} + } + } + + if (sessionId === '' || sessionId === undefined) { + throw new NodeOperationError(ctx.getNode(), 'No session ID found', { + description: + "Expected to find the session ID in an input field called 'sessionId' (this is what the chat trigger node outputs). To use something else, change the 'Session ID' parameter", + itemIndex, + }); + } + } else { + sessionId = ctx.getNodeParameter(customKey, itemIndex, '') as string; + if (sessionId === '' || sessionId === undefined) { + throw new NodeOperationError(ctx.getNode(), 'Key parameter is empty', { + description: + "Provide a key to use as session ID in the 'Key' parameter or use the 'Connected Chat Trigger Node' option to use the session ID from your Chat Trigger", + itemIndex, + }); + } + } + + return sessionId; +} + +export function logAiEvent( + executeFunctions: IExecuteFunctions | ISupplyDataFunctions, + event: AiEvent, + data?: IDataObject, +) { + try { + executeFunctions.logAiEvent(event, data ? jsonStringify(data) : undefined); + } catch (error) { + executeFunctions.logger.debug(`Error logging AI event: ${event}`); + } +} + +export function serializeChatHistory(chatHistory: BaseMessage[]): string { + return chatHistory + .map((chatMessage) => { + if (chatMessage._getType() === 'human') { + return `Human: ${chatMessage.content}`; + } else if (chatMessage._getType() === 'ai') { + return `Assistant: ${chatMessage.content}`; + } else { + return `${chatMessage.content}`; + } + }) + .join('\n'); +} + +export function escapeSingleCurlyBrackets(text?: string): string | undefined { + if (text === undefined) return undefined; + + let result = text; + + result = result + // First handle triple brackets to avoid interference with double brackets + .replace(/(? { + const connectedTools = ( + ((await ctx.getInputConnectionData(NodeConnectionTypes.AiTool, 0)) as Array) ?? + [] + ).flatMap((toolOrToolkit) => { + if (toolOrToolkit instanceof Toolkit) { + return toolOrToolkit.getTools() as Tool[]; + } + + return toolOrToolkit; + }); + + if (!enforceUniqueNames) return connectedTools; + + const seenNames = new Set(); + + const finalTools: Tool[] = []; + + for (const tool of connectedTools) { + const { name } = tool; + if (seenNames.has(name)) { + throw new NodeOperationError( + ctx.getNode(), + `You have multiple tools with the same name: '${name}', please rename them to avoid conflicts`, + ); + } + seenNames.add(name); + + if (escapeCurlyBrackets) { + tool.description = escapeSingleCurlyBrackets(tool.description) ?? tool.description; + } + + if (convertStructuredTool && tool instanceof N8nTool) { + finalTools.push(tool.asDynamicTool()); + } else { + finalTools.push(tool); + } + } + + return finalTools; +}; + +/** + * Sometimes model output is wrapped in an additional object property. + * This function unwraps the output if it is in the format { output: { output: { ... } } } + */ +export function unwrapNestedOutput(output: Record): Record { + if ( + 'output' in output && + Object.keys(output).length === 1 && + typeof output.output === 'object' && + output.output !== null && + 'output' in output.output && + Object.keys(output.output).length === 1 + ) { + return output.output as Record; + } + + return output; +} + +/** + * Detects if a text contains a character that repeats sequentially for a specified threshold. + * This is used to prevent performance issues with tiktoken on highly repetitive content. + * @param text The text to check + * @param threshold The minimum number of sequential repeats to detect (default: 1000) + * @returns true if a character repeats sequentially for at least the threshold amount + */ +export function hasLongSequentialRepeat(text: string, threshold = 1000): boolean { + try { + // Validate inputs + if ( + text === null || + typeof text !== 'string' || + text.length === 0 || + threshold <= 0 || + text.length < threshold + ) { + return false; + } + // Use string iterator to avoid creating array copy (memory efficient) + const iterator = text[Symbol.iterator](); + let prev = iterator.next(); + + if (prev.done) { + return false; + } + + let count = 1; + for (const char of iterator) { + if (char === prev.value) { + count++; + if (count >= threshold) { + return true; + } + } else { + count = 1; + prev = { value: char, done: false }; + } + } + + return false; + } catch (error) { + // On any error, return false to allow normal processing + return false; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/httpProxyAgent 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/httpProxyAgent 2.ts new file mode 100755 index 00000000..bc894830 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/httpProxyAgent 2.ts @@ -0,0 +1,19 @@ +import proxyFromEnv from 'proxy-from-env'; +import { ProxyAgent } from 'undici'; + +/** + * Returns a ProxyAgent or undefined based on the environment variables and target URL. + * When target URL is not provided, NO_PROXY environment variable is not respected. + */ +export function getProxyAgent(targetUrl?: string) { + // There are cases where we don't know the target URL in advance (e.g. when we need to provide a proxy agent to ChatAwsBedrock) + // In such case we use a dummy URL. + // This will lead to `NO_PROXY` environment variable not being respected, but it is better than not having a proxy agent at all. + const proxyUrl = proxyFromEnv.getProxyForUrl(targetUrl ?? 'https://example.nonexistent/'); + + if (!proxyUrl) { + return undefined; + } + + return new ProxyAgent(proxyUrl); +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/logWrapper 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/logWrapper 2.ts new file mode 100755 index 00000000..296a2582 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/logWrapper 2.ts @@ -0,0 +1,472 @@ +import type { BaseChatMemory } from '@langchain/community/memory/chat_memory'; +import type { BaseCallbackConfig, Callbacks } from '@langchain/core/callbacks/manager'; +import type { BaseChatMessageHistory } from '@langchain/core/chat_history'; +import type { Document } from '@langchain/core/documents'; +import { Embeddings } from '@langchain/core/embeddings'; +import type { InputValues, MemoryVariables, OutputValues } from '@langchain/core/memory'; +import type { BaseMessage } from '@langchain/core/messages'; +import { BaseRetriever } from '@langchain/core/retrievers'; +import { BaseDocumentCompressor } from '@langchain/core/retrievers/document_compressors'; +import type { StructuredTool, Tool } from '@langchain/core/tools'; +import { VectorStore } from '@langchain/core/vectorstores'; +import { TextSplitter } from '@langchain/textsplitters'; +import type { BaseDocumentLoader } from 'langchain/dist/document_loaders/base'; +import type { + IDataObject, + IExecuteFunctions, + INodeExecutionData, + ISupplyDataFunctions, + ITaskMetadata, + NodeConnectionType, +} from 'n8n-workflow'; +import { + NodeOperationError, + NodeConnectionTypes, + parseErrorMetadata, + deepCopy, +} from 'n8n-workflow'; + +import { logAiEvent, isToolsInstance, isBaseChatMemory, isBaseChatMessageHistory } from './helpers'; +import { N8nBinaryLoader } from './N8nBinaryLoader'; +import { N8nJsonLoader } from './N8nJsonLoader'; + +export async function callMethodAsync( + this: T, + parameters: { + executeFunctions: IExecuteFunctions | ISupplyDataFunctions; + connectionType: NodeConnectionType; + currentNodeRunIndex: number; + method: (...args: any[]) => Promise; + arguments: unknown[]; + }, +): Promise { + try { + return await parameters.method.call(this, ...parameters.arguments); + } catch (e) { + const connectedNode = parameters.executeFunctions.getNode(); + + const error = new NodeOperationError(connectedNode, e, { + functionality: 'configuration-node', + }); + + const metadata = parseErrorMetadata(error); + parameters.executeFunctions.addOutputData( + parameters.connectionType, + parameters.currentNodeRunIndex, + error, + metadata, + ); + + if (error.message) { + if (!error.description) { + error.description = error.message; + } + throw error; + } + + throw new NodeOperationError( + connectedNode, + `Error on node "${connectedNode.name}" which is connected via input "${parameters.connectionType}"`, + { functionality: 'configuration-node' }, + ); + } +} + +export function callMethodSync( + this: T, + parameters: { + executeFunctions: IExecuteFunctions; + connectionType: NodeConnectionType; + currentNodeRunIndex: number; + method: (...args: any[]) => T; + arguments: unknown[]; + }, +): unknown { + try { + return parameters.method.call(this, ...parameters.arguments); + } catch (e) { + const connectedNode = parameters.executeFunctions.getNode(); + const error = new NodeOperationError(connectedNode, e); + parameters.executeFunctions.addOutputData( + parameters.connectionType, + parameters.currentNodeRunIndex, + error, + ); + + throw new NodeOperationError( + connectedNode, + `Error on node "${connectedNode.name}" which is connected via input "${parameters.connectionType}"`, + { functionality: 'configuration-node' }, + ); + } +} + +export function logWrapper< + T extends + | Tool + | StructuredTool + | BaseChatMemory + | BaseChatMessageHistory + | BaseRetriever + | BaseDocumentCompressor + | Embeddings + | Document[] + | Document + | BaseDocumentLoader + | TextSplitter + | VectorStore + | N8nBinaryLoader + | N8nJsonLoader, +>(originalInstance: T, executeFunctions: IExecuteFunctions | ISupplyDataFunctions): T { + return new Proxy(originalInstance, { + get: (target, prop) => { + let connectionType: NodeConnectionType | undefined; + // ========== BaseChatMemory ========== + if (isBaseChatMemory(originalInstance)) { + if (prop === 'loadMemoryVariables' && 'loadMemoryVariables' in target) { + return async (values: InputValues): Promise => { + connectionType = NodeConnectionTypes.AiMemory; + + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { action: 'loadMemoryVariables', values } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [values], + })) as MemoryVariables; + + const chatHistory = (response?.chat_history as BaseMessage[]) ?? response; + + executeFunctions.addOutputData(connectionType, index, [ + [{ json: { action: 'loadMemoryVariables', chatHistory } }], + ]); + return response; + }; + } else if (prop === 'saveContext' && 'saveContext' in target) { + return async (input: InputValues, output: OutputValues): Promise => { + connectionType = NodeConnectionTypes.AiMemory; + + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { action: 'saveContext', input, output } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [input, output], + })) as MemoryVariables; + + const chatHistory = await target.chatHistory.getMessages(); + + executeFunctions.addOutputData(connectionType, index, [ + [{ json: { action: 'saveContext', chatHistory } }], + ]); + + return response; + }; + } + } + + // ========== BaseChatMessageHistory ========== + if (isBaseChatMessageHistory(originalInstance)) { + if (prop === 'getMessages' && 'getMessages' in target) { + return async (): Promise => { + connectionType = NodeConnectionTypes.AiMemory; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { action: 'getMessages' } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [], + })) as BaseMessage[]; + + const payload = { action: 'getMessages', response }; + executeFunctions.addOutputData(connectionType, index, [[{ json: payload }]]); + + logAiEvent(executeFunctions, 'ai-messages-retrieved-from-memory', { response }); + return response; + }; + } else if (prop === 'addMessage' && 'addMessage' in target) { + return async (message: BaseMessage): Promise => { + connectionType = NodeConnectionTypes.AiMemory; + const payload = { action: 'addMessage', message }; + const { index } = executeFunctions.addInputData(connectionType, [[{ json: payload }]]); + + await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [message], + }); + + logAiEvent(executeFunctions, 'ai-message-added-to-memory', { message }); + executeFunctions.addOutputData(connectionType, index, [[{ json: payload }]]); + }; + } + } + + // ========== BaseRetriever ========== + if (originalInstance instanceof BaseRetriever) { + if (prop === 'getRelevantDocuments' && 'getRelevantDocuments' in target) { + return async ( + query: string, + config?: Callbacks | BaseCallbackConfig, + ): Promise => { + connectionType = NodeConnectionTypes.AiRetriever; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { query, config } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [query, config], + })) as Array>>; + + const executionId: string | undefined = response[0]?.metadata?.executionId as string; + const workflowId: string | undefined = response[0]?.metadata?.workflowId as string; + + const metadata: ITaskMetadata = {}; + if (executionId && workflowId) { + metadata.subExecution = { + executionId, + workflowId, + }; + } + + logAiEvent(executeFunctions, 'ai-documents-retrieved', { query }); + executeFunctions.addOutputData( + connectionType, + index, + [[{ json: { response } }]], + metadata, + ); + return response; + }; + } + } + + // ========== Embeddings ========== + if (originalInstance instanceof Embeddings) { + // Docs -> Embeddings + if (prop === 'embedDocuments' && 'embedDocuments' in target) { + return async (documents: string[]): Promise => { + connectionType = NodeConnectionTypes.AiEmbedding; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { documents } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [documents], + })) as number[][]; + + logAiEvent(executeFunctions, 'ai-document-embedded'); + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + return response; + }; + } + // Query -> Embeddings + if (prop === 'embedQuery' && 'embedQuery' in target) { + return async (query: string): Promise => { + connectionType = NodeConnectionTypes.AiEmbedding; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { query } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [query], + })) as number[]; + logAiEvent(executeFunctions, 'ai-query-embedded'); + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + return response; + }; + } + } + + // ========== Rerankers ========== + if (originalInstance instanceof BaseDocumentCompressor) { + if (prop === 'compressDocuments' && 'compressDocuments' in target) { + return async (documents: Document[], query: string): Promise => { + connectionType = NodeConnectionTypes.AiReranker; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { query, documents } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + // compressDocuments mutates the original object + // messing up the input data logging + arguments: [deepCopy(documents), query], + })) as Document[]; + + logAiEvent(executeFunctions, 'ai-document-reranked', { query }); + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + return response; + }; + } + } + + // ========== N8n Loaders Process All ========== + if ( + originalInstance instanceof N8nJsonLoader || + originalInstance instanceof N8nBinaryLoader + ) { + // Process All + if (prop === 'processAll' && 'processAll' in target) { + return async (items: INodeExecutionData[]): Promise => { + connectionType = NodeConnectionTypes.AiDocument; + const { index } = executeFunctions.addInputData(connectionType, [items]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [items], + })) as number[]; + + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + return response; + }; + } + + // Process Each + if (prop === 'processItem' && 'processItem' in target) { + return async (item: INodeExecutionData, itemIndex: number): Promise => { + connectionType = NodeConnectionTypes.AiDocument; + const { index } = executeFunctions.addInputData(connectionType, [[item]]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [item, itemIndex], + })) as number[]; + + logAiEvent(executeFunctions, 'ai-document-processed'); + executeFunctions.addOutputData(connectionType, index, [ + [{ json: { response }, pairedItem: { item: itemIndex } }], + ]); + return response; + }; + } + } + + // ========== TextSplitter ========== + if (originalInstance instanceof TextSplitter) { + if (prop === 'splitText' && 'splitText' in target) { + return async (text: string): Promise => { + connectionType = NodeConnectionTypes.AiTextSplitter; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { textSplitter: text } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [text], + })) as string[]; + + logAiEvent(executeFunctions, 'ai-text-split'); + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + return response; + }; + } + } + + // ========== Tool ========== + if (isToolsInstance(originalInstance)) { + if (prop === '_call' && '_call' in target) { + return async (query: string): Promise => { + connectionType = NodeConnectionTypes.AiTool; + const inputData: IDataObject = { query }; + + if (target.metadata?.isFromToolkit) { + inputData.tool = { + name: target.name, + description: target.description, + }; + } + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: inputData }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [query], + })) as string; + + logAiEvent(executeFunctions, 'ai-tool-called', { ...inputData, response }); + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + + if (typeof response === 'string') return response; + return JSON.stringify(response); + }; + } + } + + // ========== VectorStore ========== + if (originalInstance instanceof VectorStore) { + if (prop === 'similaritySearch' && 'similaritySearch' in target) { + return async ( + query: string, + k?: number, + filter?: BiquadFilterType, + _callbacks?: Callbacks, + ): Promise => { + connectionType = NodeConnectionTypes.AiVectorStore; + const { index } = executeFunctions.addInputData(connectionType, [ + [{ json: { query, k, filter } }], + ]); + + const response = (await callMethodAsync.call(target, { + executeFunctions, + connectionType, + currentNodeRunIndex: index, + method: target[prop], + arguments: [query, k, filter, _callbacks], + })) as Array>>; + + logAiEvent(executeFunctions, 'ai-vector-store-searched', { query }); + executeFunctions.addOutputData(connectionType, index, [[{ json: { response } }]]); + + return response; + }; + } + } + + // eslint-disable-next-line @typescript-eslint/no-unsafe-return + return (target as any)[prop]; + }, + }); +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/schemaParsing 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/schemaParsing 2.ts new file mode 100755 index 00000000..3f10ce0a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/schemaParsing 2.ts @@ -0,0 +1,63 @@ +import { jsonSchemaToZod } from '@n8n/json-schema-to-zod'; +import { json as generateJsonSchema } from 'generate-schema'; +import type { SchemaObject } from 'generate-schema'; +import type { JSONSchema7 } from 'json-schema'; +import type { IExecuteFunctions } from 'n8n-workflow'; +import { NodeOperationError, jsonParse } from 'n8n-workflow'; +import type { z } from 'zod'; + +function makeAllPropertiesRequired(schema: JSONSchema7): JSONSchema7 { + function isPropertySchema(property: unknown): property is JSONSchema7 { + return typeof property === 'object' && property !== null && 'type' in property; + } + + // Handle object properties + if (schema.type === 'object' && schema.properties) { + const properties = Object.keys(schema.properties); + if (properties.length > 0) { + schema.required = properties; + } + + for (const key of properties) { + if (isPropertySchema(schema.properties[key])) { + makeAllPropertiesRequired(schema.properties[key]); + } + } + } + + // Handle arrays + if (schema.type === 'array' && schema.items && isPropertySchema(schema.items)) { + schema.items = makeAllPropertiesRequired(schema.items); + } + + return schema; +} + +export function generateSchemaFromExample( + exampleJsonString: string, + allFieldsRequired = false, +): JSONSchema7 { + const parsedExample = jsonParse(exampleJsonString); + + const schema = generateJsonSchema(parsedExample) as JSONSchema7; + + if (allFieldsRequired) { + return makeAllPropertiesRequired(schema); + } + + return schema; +} + +export function convertJsonSchemaToZod(schema: JSONSchema7) { + return jsonSchemaToZod(schema); +} + +export function throwIfToolSchema(ctx: IExecuteFunctions, error: Error) { + if (error?.message?.includes('tool input did not match expected schema')) { + throw new NodeOperationError( + ctx.getNode(), + `${error.message}. + This is most likely because some of your tools are configured to require a specific schema. This is not supported by Conversational Agent. Remove the schema from the tool configuration or use Tools agent instead.`, + ); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/sharedFields 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/sharedFields 2.ts new file mode 100755 index 00000000..9e806c05 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/sharedFields 2.ts @@ -0,0 +1,187 @@ +import { NodeConnectionTypes } from 'n8n-workflow'; +import type { IDisplayOptions, INodeProperties } from 'n8n-workflow'; + +export const metadataFilterField: INodeProperties = { + displayName: 'Metadata Filter', + name: 'metadata', + type: 'fixedCollection', + description: 'Metadata to filter the document by', + typeOptions: { + multipleValues: true, + }, + default: {}, + placeholder: 'Add filter field', + options: [ + { + name: 'metadataValues', + displayName: 'Fields to Set', + values: [ + { + displayName: 'Name', + name: 'name', + type: 'string', + default: '', + required: true, + }, + { + displayName: 'Value', + name: 'value', + type: 'string', + default: '', + }, + ], + }, + ], +}; + +export function getTemplateNoticeField(templateId: number): INodeProperties { + return { + displayName: `Save time with an example of how this node works`, + name: 'notice', + type: 'notice', + default: '', + }; +} + +export function getBatchingOptionFields( + displayOptions: IDisplayOptions | undefined, + defaultBatchSize: number = 5, +): INodeProperties { + return { + displayName: 'Batch Processing', + name: 'batching', + type: 'collection', + placeholder: 'Add Batch Processing Option', + description: 'Batch processing options for rate limiting', + default: {}, + options: [ + { + displayName: 'Batch Size', + name: 'batchSize', + default: defaultBatchSize, + type: 'number', + description: + 'How many items to process in parallel. This is useful for rate limiting, but might impact the log output ordering.', + }, + { + displayName: 'Delay Between Batches', + name: 'delayBetweenBatches', + default: 0, + type: 'number', + description: 'Delay in milliseconds between batches. This is useful for rate limiting.', + }, + ], + displayOptions, + }; +} + +const connectionsString = { + [NodeConnectionTypes.AiAgent]: { + // Root AI view + connection: '', + locale: 'AI Agent', + }, + [NodeConnectionTypes.AiChain]: { + // Root AI view + connection: '', + locale: 'AI Chain', + }, + [NodeConnectionTypes.AiDocument]: { + connection: NodeConnectionTypes.AiDocument, + locale: 'Document Loader', + }, + [NodeConnectionTypes.AiVectorStore]: { + connection: NodeConnectionTypes.AiVectorStore, + locale: 'Vector Store', + }, + [NodeConnectionTypes.AiRetriever]: { + connection: NodeConnectionTypes.AiRetriever, + locale: 'Vector Store Retriever', + }, +}; + +type AllowedConnectionTypes = + | typeof NodeConnectionTypes.AiAgent + | typeof NodeConnectionTypes.AiChain + | typeof NodeConnectionTypes.AiDocument + | typeof NodeConnectionTypes.AiVectorStore + | typeof NodeConnectionTypes.AiRetriever; + +function determineArticle(nextWord: string): string { + // check if the next word starts with a vowel sound + const vowels = /^[aeiouAEIOU]/; + return vowels.test(nextWord) ? 'an' : 'a'; +} +const getConnectionParameterString = (connectionType: string) => { + if (connectionType === '') return "data-action-parameter-creatorview='AI'"; + + return `data-action-parameter-connectiontype='${connectionType}'`; +}; +const getAhref = (connectionType: { connection: string; locale: string }) => + `${connectionType.locale}`; + +export function getConnectionHintNoticeField( + connectionTypes: AllowedConnectionTypes[], +): INodeProperties { + const groupedConnections = new Map(); + + // group connection types by their 'connection' value + // to not create multiple links + connectionTypes.forEach((connectionType) => { + const connectionString = connectionsString[connectionType].connection; + const localeString = connectionsString[connectionType].locale; + + if (!groupedConnections.has(connectionString)) { + groupedConnections.set(connectionString, [localeString]); + return; + } + + groupedConnections.get(connectionString)?.push(localeString); + }); + + let displayName; + + if (groupedConnections.size === 1) { + const [[connection, locales]] = Array.from(groupedConnections); + + displayName = `This node must be connected to ${determineArticle(locales[0])} ${locales[0] + .toLowerCase() + .replace( + /^ai /, + 'AI ', + )}. Insert one`; + } else { + const ahrefs = Array.from(groupedConnections, ([connection, locales]) => { + // If there are multiple locales, join them with ' or ' + // use determineArticle to insert the correct article + const locale = + locales.length > 1 + ? locales + .map((localeString, index, { length }) => { + return ( + (index === 0 ? `${determineArticle(localeString)} ` : '') + + (index < length - 1 ? `${localeString} or ` : localeString) + ); + }) + .join('') + : `${determineArticle(locales[0])} ${locales[0]}`; + return getAhref({ connection, locale }); + }); + + displayName = `This node needs to be connected to ${ahrefs.join(' or ')}.`; + } + + return { + displayName, + name: 'notice', + type: 'notice', + default: '', + typeOptions: { + containerClass: 'ndv-connection-hint-notice', + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/tracing 2.ts b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/tracing 2.ts new file mode 100755 index 00000000..b9b36998 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/nodes-langchain/utils/tracing 2.ts @@ -0,0 +1,26 @@ +import type { BaseCallbackConfig } from '@langchain/core/callbacks/manager'; +import type { IExecuteFunctions } from 'n8n-workflow'; + +interface TracingConfig { + additionalMetadata?: Record; +} + +export function getTracingConfig( + context: IExecuteFunctions, + config: TracingConfig = {}, +): BaseCallbackConfig { + const parentRunManager = context.getParentCallbackManager + ? context.getParentCallbackManager() + : undefined; + + return { + runName: `[${context.getWorkflow().name}] ${context.getNode().name}`, + metadata: { + execution_id: context.getExecutionId(), + workflow: context.getWorkflow(), + node: context.getNode().name, + ...(config.additionalMetadata ?? {}), + }, + callbacks: parentRunManager, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/permissions/src/constants.ee 2.ts b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/constants.ee 2.ts new file mode 100755 index 00000000..c3dcac3b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/constants.ee 2.ts @@ -0,0 +1,43 @@ +export const DEFAULT_OPERATIONS = ['create', 'read', 'update', 'delete', 'list'] as const; + +export const RESOURCES = { + annotationTag: [...DEFAULT_OPERATIONS] as const, + auditLogs: ['manage'] as const, + banner: ['dismiss'] as const, + community: ['register'] as const, + communityPackage: ['install', 'uninstall', 'update', 'list', 'manage'] as const, + credential: ['share', 'move', ...DEFAULT_OPERATIONS] as const, + externalSecretsProvider: ['sync', ...DEFAULT_OPERATIONS] as const, + externalSecret: ['list', 'use'] as const, + eventBusDestination: ['test', ...DEFAULT_OPERATIONS] as const, + ldap: ['sync', 'manage'] as const, + license: ['manage'] as const, + logStreaming: ['manage'] as const, + orchestration: ['read', 'list'] as const, + project: [...DEFAULT_OPERATIONS] as const, + saml: ['manage'] as const, + securityAudit: ['generate'] as const, + sourceControl: ['pull', 'push', 'manage'] as const, + tag: [...DEFAULT_OPERATIONS] as const, + user: ['resetPassword', 'changeRole', 'enforceMfa', ...DEFAULT_OPERATIONS] as const, + variable: [...DEFAULT_OPERATIONS] as const, + workersView: ['manage'] as const, + workflow: ['share', 'execute', 'move', ...DEFAULT_OPERATIONS] as const, + folder: [...DEFAULT_OPERATIONS, 'move'] as const, + insights: ['list'] as const, + oidc: ['manage'] as const, + dataStore: [...DEFAULT_OPERATIONS, 'readRow', 'writeRow', 'listProject'] as const, +} as const; + +export const API_KEY_RESOURCES = { + tag: [...DEFAULT_OPERATIONS] as const, + workflow: [...DEFAULT_OPERATIONS, 'move', 'activate', 'deactivate'] as const, + variable: ['create', 'update', 'delete', 'list'] as const, + securityAudit: ['generate'] as const, + project: ['create', 'update', 'delete', 'list'] as const, + user: ['read', 'list', 'create', 'changeRole', 'delete', 'enforceMfa'] as const, + execution: ['delete', 'read', 'list', 'get'] as const, + credential: ['create', 'move', 'delete'] as const, + sourceControl: ['pull'] as const, + workflowTags: ['update', 'list'] as const, +} as const; diff --git a/n8n-n8n-1.109.2/packages/@n8n/permissions/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/index 2.ts new file mode 100755 index 00000000..f8b8fb6d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/index 2.ts @@ -0,0 +1,19 @@ +export type * from './types.ee'; +export * from './constants.ee'; + +export * from './roles/scopes/global-scopes.ee'; +export * from './scope-information'; +export * from './roles/role-maps.ee'; +export * from './roles/all-roles'; + +export { projectRoleSchema } from './schemas.ee'; + +export { hasScope } from './utilities/has-scope.ee'; +export { hasGlobalScope } from './utilities/has-global-scope.ee'; +export { combineScopes } from './utilities/combine-scopes.ee'; +export { rolesWithScope } from './utilities/roles-with-scope.ee'; +export { getGlobalScopes } from './utilities/get-global-scopes.ee'; +export { getRoleScopes } from './utilities/get-role-scopes.ee'; +export { getResourcePermissions } from './utilities/get-resource-permissions.ee'; +export type { PermissionsRecord } from './utilities/get-resource-permissions.ee'; +export * from './public-api-permissions.ee'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/permissions/src/public-api-permissions.ee 2.ts b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/public-api-permissions.ee 2.ts new file mode 100755 index 00000000..fd6c62c5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/public-api-permissions.ee 2.ts @@ -0,0 +1,83 @@ +import type { ApiKeyScope, GlobalRole } from './types.ee'; + +export const OWNER_API_KEY_SCOPES: ApiKeyScope[] = [ + 'user:read', + 'user:list', + 'user:create', + 'user:changeRole', + 'user:delete', + 'user:enforceMfa', + 'sourceControl:pull', + 'securityAudit:generate', + 'project:create', + 'project:update', + 'project:delete', + 'project:list', + 'variable:create', + 'variable:delete', + 'variable:list', + 'variable:update', + 'tag:create', + 'tag:read', + 'tag:update', + 'tag:delete', + 'tag:list', + 'workflowTags:update', + 'workflowTags:list', + 'workflow:create', + 'workflow:read', + 'workflow:update', + 'workflow:delete', + 'workflow:list', + 'workflow:move', + 'workflow:activate', + 'workflow:deactivate', + 'execution:delete', + 'execution:read', + 'execution:list', + 'credential:create', + 'credential:move', + 'credential:delete', +]; + +export const ADMIN_API_KEY_SCOPES: ApiKeyScope[] = OWNER_API_KEY_SCOPES; + +export const MEMBER_API_KEY_SCOPES: ApiKeyScope[] = [ + 'tag:create', + 'tag:read', + 'tag:update', + 'tag:list', + 'workflowTags:update', + 'workflowTags:list', + 'workflow:create', + 'workflow:read', + 'workflow:update', + 'workflow:delete', + 'workflow:list', + 'workflow:move', + 'workflow:activate', + 'workflow:deactivate', + 'execution:delete', + 'execution:read', + 'execution:list', + 'credential:create', + 'credential:move', + 'credential:delete', +]; + +const MAP_ROLE_SCOPES: Record = { + 'global:owner': OWNER_API_KEY_SCOPES, + 'global:admin': ADMIN_API_KEY_SCOPES, + 'global:member': MEMBER_API_KEY_SCOPES, +}; + +export const getApiKeyScopesForRole = (role: GlobalRole) => { + return MAP_ROLE_SCOPES[role]; +}; + +export const getOwnerOnlyApiKeyScopes = () => { + const ownerScopes = new Set(MAP_ROLE_SCOPES['global:owner']); + const memberScopes = new Set(MAP_ROLE_SCOPES['global:member']); + memberScopes.forEach((item) => ownerScopes.delete(item)); + return Array.from(ownerScopes); +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/permissions/src/schemas.ee 2.ts b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/schemas.ee 2.ts new file mode 100755 index 00000000..8fd21af3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/schemas.ee 2.ts @@ -0,0 +1,21 @@ +import { z } from 'zod'; + +export const roleNamespaceSchema = z.enum(['global', 'project', 'credential', 'workflow']); + +export const globalRoleSchema = z.enum(['global:owner', 'global:admin', 'global:member']); + +export const assignableGlobalRoleSchema = globalRoleSchema.exclude([ + 'global:owner', // Owner cannot be changed +]); + +export const personalRoleSchema = z.enum([ + 'project:personalOwner', // personalOwner is only used for personal projects +]); + +export const teamRoleSchema = z.enum(['project:admin', 'project:editor', 'project:viewer']); + +export const projectRoleSchema = z.enum([...personalRoleSchema.options, ...teamRoleSchema.options]); + +export const credentialSharingRoleSchema = z.enum(['credential:owner', 'credential:user']); + +export const workflowSharingRoleSchema = z.enum(['workflow:owner', 'workflow:editor']); diff --git a/n8n-n8n-1.109.2/packages/@n8n/permissions/src/scope-information 2.ts b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/scope-information 2.ts new file mode 100755 index 00000000..fc457fd1 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/scope-information 2.ts @@ -0,0 +1,21 @@ +import { RESOURCES } from './constants.ee'; +import type { Scope, ScopeInformation } from './types.ee'; + +function buildResourceScopes() { + const resourceScopes = Object.entries(RESOURCES).flatMap(([resource, operations]) => [ + ...operations.map((op) => `${resource}:${op}` as const), + `${resource}:*` as const, + ]) as Scope[]; + + resourceScopes.push('*' as const); // Global wildcard + return resourceScopes; +} + +export const ALL_SCOPES = buildResourceScopes(); + +export const scopeInformation: Partial> = { + 'annotationTag:create': { + displayName: 'Create Annotation Tag', + description: 'Allows creating new annotation tags.', + }, +}; diff --git a/n8n-n8n-1.109.2/packages/@n8n/permissions/src/types.ee 2.ts b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/types.ee 2.ts new file mode 100755 index 00000000..5e2ae1c0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/permissions/src/types.ee 2.ts @@ -0,0 +1,104 @@ +import type { z } from 'zod'; + +import type { RESOURCES, API_KEY_RESOURCES } from './constants.ee'; +import type { + assignableGlobalRoleSchema, + credentialSharingRoleSchema, + globalRoleSchema, + projectRoleSchema, + roleNamespaceSchema, + teamRoleSchema, + workflowSharingRoleSchema, +} from './schemas.ee'; + +export type ScopeInformation = { + displayName: string; + description?: string | null; +}; + +/** Represents a resource that can have permissions applied to it */ +export type Resource = keyof typeof RESOURCES; + +/** A permission scope for a specific resource + operation combination */ +type ResourceScope< + R extends Resource, + Operation extends (typeof RESOURCES)[R][number] = (typeof RESOURCES)[R][number], +> = `${R}:${Operation}`; + +/** A wildcard scope applies to all operations on a resource or all resources */ +type WildcardScope = `${Resource}:*` | '*'; + +// This is purely an intermediary type. +// If we tried to do use `ResourceScope` directly we'd end +// up with all resources having all scopes (e.g. `ldap:uninstall`). +type AllScopesObject = { + [R in Resource]: ResourceScope; +}; + +/** A permission scope in the system, either a specific resource:operation or a wildcard */ +export type Scope = AllScopesObject[Resource] | WildcardScope; + +export type ScopeLevels = { + global: Scope[]; + project?: Scope[]; + resource?: Scope[]; +}; + +export type MaskLevels = { + sharing: Scope[]; +}; + +export type ScopeOptions = { mode: 'oneOf' | 'allOf' }; + +export type RoleNamespace = z.infer; +export type GlobalRole = z.infer; +export type AssignableGlobalRole = z.infer; +export type CredentialSharingRole = z.infer; +export type WorkflowSharingRole = z.infer; +export type TeamProjectRole = z.infer; +export type ProjectRole = z.infer; + +/** Union of all possible role types in the system */ +export type AllRoleTypes = GlobalRole | ProjectRole | WorkflowSharingRole | CredentialSharingRole; + +type RoleObject = { + role: T; + name: string; + description?: string | null; + scopes: Scope[]; + licensed: boolean; +}; + +export type AllRolesMap = { + global: Array>; + project: Array>; + credential: Array>; + workflow: Array>; +}; + +/** + * Represents an authenticated entity in the system that can have specific permissions via a role. + * @property role - The global role this principal has + */ +export type AuthPrincipal = { + role: GlobalRole; +}; + +// #region Public API +type PublicApiKeyResources = keyof typeof API_KEY_RESOURCES; + +type ApiKeyResourceScope< + R extends PublicApiKeyResources, + Operation extends (typeof API_KEY_RESOURCES)[R][number] = (typeof API_KEY_RESOURCES)[R][number], +> = `${R}:${Operation}`; + +// This is purely an intermediary type. +// If we tried to do use `ResourceScope` directly we'd end +// up with all resources having all scopes. +type AllApiKeyScopesObject = { + [R in PublicApiKeyResources]: ApiKeyResourceScope; +}; + +export type ApiKeyScope = AllApiKeyScopesObject[PublicApiKeyResources]; + +// #endregion diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/health-check-server 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/health-check-server 2.ts new file mode 100755 index 00000000..523cefc0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/health-check-server 2.ts @@ -0,0 +1,38 @@ +import { ApplicationError } from '@n8n/errors'; +import { createServer } from 'node:http'; + +export class HealthCheckServer { + private server = createServer((_, res) => { + res.writeHead(200); + res.end('OK'); + }); + + async start(host: string, port: number) { + return await new Promise((resolve, reject) => { + const portInUseErrorHandler = (error: NodeJS.ErrnoException) => { + if (error.code === 'EADDRINUSE') { + reject(new ApplicationError(`Port ${port} is already in use`)); + } else { + reject(error); + } + }; + + this.server.on('error', portInUseErrorHandler); + + this.server.listen(port, host, () => { + this.server.removeListener('error', portInUseErrorHandler); + console.log(`Health check server listening on ${host}, port ${port}`); + resolve(); + }); + }); + } + + async stop() { + return await new Promise((resolve, reject) => { + this.server.close((error) => { + if (error) reject(error); + else resolve(); + }); + }); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/index 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/index 2.ts new file mode 100755 index 00000000..5fcc6e07 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/index 2.ts @@ -0,0 +1,4 @@ +export * from './task-runner'; +export * from './runner-types'; +export * from './message-types'; +export * from './data-request/data-request-response-reconstruct'; diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/message-types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/message-types 2.ts new file mode 100755 index 00000000..40f7aeca --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/message-types 2.ts @@ -0,0 +1,258 @@ +import type { INodeTypeBaseDescription } from 'n8n-workflow'; + +import type { + NeededNodeType, + AVAILABLE_RPC_METHODS, + TaskDataRequestParams, + TaskResultData, +} from './runner-types'; + +export namespace BrokerMessage { + export namespace ToRunner { + export interface InfoRequest { + type: 'broker:inforequest'; + } + + export interface RunnerRegistered { + type: 'broker:runnerregistered'; + } + + export interface TaskOfferAccept { + type: 'broker:taskofferaccept'; + taskId: string; + offerId: string; + } + + export interface TaskCancel { + type: 'broker:taskcancel'; + taskId: string; + reason: string; + } + + export interface TaskSettings { + type: 'broker:tasksettings'; + taskId: string; + settings: unknown; + } + + export interface RPCResponse { + type: 'broker:rpcresponse'; + callId: string; + taskId: string; + status: 'success' | 'error'; + data: unknown; + } + + export interface TaskDataResponse { + type: 'broker:taskdataresponse'; + taskId: string; + requestId: string; + data: unknown; + } + + export interface NodeTypes { + type: 'broker:nodetypes'; + taskId: string; + requestId: string; + nodeTypes: INodeTypeBaseDescription[]; + } + + export type All = + | InfoRequest + | TaskOfferAccept + | TaskCancel + | TaskSettings + | RunnerRegistered + | RPCResponse + | TaskDataResponse + | NodeTypes; + } + + export namespace ToRequester { + export interface TaskReady { + type: 'broker:taskready'; + requestId: string; + taskId: string; + } + + export interface TaskDone { + type: 'broker:taskdone'; + taskId: string; + data: TaskResultData; + } + + export interface TaskError { + type: 'broker:taskerror'; + taskId: string; + error: unknown; + } + + export interface TaskDataRequest { + type: 'broker:taskdatarequest'; + taskId: string; + requestId: string; + requestParams: TaskDataRequestParams; + } + + export interface NodeTypesRequest { + type: 'broker:nodetypesrequest'; + taskId: string; + requestId: string; + requestParams: NeededNodeType[]; + } + + export interface RPC { + type: 'broker:rpc'; + callId: string; + taskId: string; + name: (typeof AVAILABLE_RPC_METHODS)[number]; + params: unknown[]; + } + + export type All = TaskReady | TaskDone | TaskError | TaskDataRequest | NodeTypesRequest | RPC; + } +} + +export namespace RequesterMessage { + export namespace ToBroker { + export interface TaskSettings { + type: 'requester:tasksettings'; + taskId: string; + settings: unknown; + } + + export interface TaskCancel { + type: 'requester:taskcancel'; + taskId: string; + reason: string; + } + + export interface TaskDataResponse { + type: 'requester:taskdataresponse'; + taskId: string; + requestId: string; + data: unknown; + } + + export interface NodeTypesResponse { + type: 'requester:nodetypesresponse'; + taskId: string; + requestId: string; + nodeTypes: INodeTypeBaseDescription[]; + } + + export interface RPCResponse { + type: 'requester:rpcresponse'; + taskId: string; + callId: string; + status: 'success' | 'error'; + data: unknown; + } + + export interface TaskRequest { + type: 'requester:taskrequest'; + requestId: string; + taskType: string; + } + + export type All = + | TaskSettings + | TaskCancel + | RPCResponse + | TaskDataResponse + | NodeTypesResponse + | TaskRequest; + } +} + +export namespace RunnerMessage { + export namespace ToBroker { + export interface Info { + type: 'runner:info'; + name: string; + types: string[]; + } + + export interface TaskAccepted { + type: 'runner:taskaccepted'; + taskId: string; + } + + export interface TaskRejected { + type: 'runner:taskrejected'; + taskId: string; + reason: string; + } + + /** Message where launcher (impersonating runner) requests broker to hold task until runner is ready. */ + export interface TaskDeferred { + type: 'runner:taskdeferred'; + taskId: string; + } + + export interface TaskDone { + type: 'runner:taskdone'; + taskId: string; + data: TaskResultData; + } + + export interface TaskError { + type: 'runner:taskerror'; + taskId: string; + error: unknown; + } + + export interface TaskOffer { + type: 'runner:taskoffer'; + offerId: string; + taskType: string; + validFor: number; + } + + export interface TaskDataRequest { + type: 'runner:taskdatarequest'; + taskId: string; + requestId: string; + requestParams: TaskDataRequestParams; + } + + export interface NodeTypesRequest { + type: 'runner:nodetypesrequest'; + taskId: string; + requestId: string; + + /** + * Which node types should be included in the runner's node types request. + * + * Node types are needed only when the script relies on paired item functionality. + * If so, we need only the node types not already cached in the runner. + * + * TODO: In future we can trim this down to only node types in the paired item chain, + * rather than assuming we need all node types in the workflow. + * + * @example [{ name: 'n8n-nodes-base.httpRequest', version: 1 }] + */ + requestParams: NeededNodeType[]; + } + + export interface RPC { + type: 'runner:rpc'; + callId: string; + taskId: string; + name: (typeof AVAILABLE_RPC_METHODS)[number]; + params: unknown[]; + } + + export type All = + | Info + | TaskDone + | TaskError + | TaskAccepted + | TaskRejected + | TaskDeferred + | TaskOffer + | RPC + | TaskDataRequest + | NodeTypesRequest; + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/node-types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/node-types 2.ts new file mode 100755 index 00000000..8f910134 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/node-types 2.ts @@ -0,0 +1,92 @@ +import { + ApplicationError, + type IDataObject, + type INodeType, + type INodeTypeDescription, + type INodeTypes, + type IVersionedNodeType, +} from 'n8n-workflow'; + +import type { NeededNodeType } from './runner-types'; + +type VersionedTypes = Map; + +export const DEFAULT_NODETYPE_VERSION = 1; + +export class TaskRunnerNodeTypes implements INodeTypes { + private nodeTypesByVersion: Map; + + constructor(nodeTypes: INodeTypeDescription[]) { + this.nodeTypesByVersion = this.parseNodeTypes(nodeTypes); + } + + private parseNodeTypes(nodeTypes: INodeTypeDescription[]): Map { + const versionedTypes = new Map(); + + for (const nt of nodeTypes) { + const versions = Array.isArray(nt.version) + ? nt.version + : [nt.version ?? DEFAULT_NODETYPE_VERSION]; + + const versioned: VersionedTypes = + versionedTypes.get(nt.name) ?? new Map(); + for (const version of versions) { + versioned.set(version, { ...versioned.get(version), ...nt }); + } + + versionedTypes.set(nt.name, versioned); + } + + return versionedTypes; + } + + // This isn't used in Workflow from what I can see + getByName(_nodeType: string): INodeType | IVersionedNodeType { + throw new ApplicationError('Unimplemented `getByName`', { level: 'error' }); + } + + getByNameAndVersion(nodeType: string, version?: number): INodeType { + const versions = this.nodeTypesByVersion.get(nodeType); + if (!versions) { + return undefined as unknown as INodeType; + } + const nodeVersion = versions.get(version ?? Math.max(...versions.keys())); + if (!nodeVersion) { + return undefined as unknown as INodeType; + } + return { + description: nodeVersion, + }; + } + + // This isn't used in Workflow from what I can see + getKnownTypes(): IDataObject { + throw new ApplicationError('Unimplemented `getKnownTypes`', { level: 'error' }); + } + + addNodeTypeDescriptions(nodeTypeDescriptions: INodeTypeDescription[]) { + const newNodeTypes = this.parseNodeTypes(nodeTypeDescriptions); + + for (const [name, newVersions] of newNodeTypes.entries()) { + if (!this.nodeTypesByVersion.has(name)) { + this.nodeTypesByVersion.set(name, newVersions); + } else { + const existingVersions = this.nodeTypesByVersion.get(name)!; + for (const [version, nodeType] of newVersions.entries()) { + existingVersions.set(version, nodeType); + } + } + } + } + + /** Filter out node type versions that are already registered. */ + onlyUnknown(nodeTypes: NeededNodeType[]) { + return nodeTypes.filter(({ name, version }) => { + const existingVersions = this.nodeTypesByVersion.get(name); + + if (!existingVersions) return true; + + return !existingVersions.has(version); + }); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/runner-types 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/runner-types 2.ts new file mode 100755 index 00000000..7b13e8fe --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/runner-types 2.ts @@ -0,0 +1,175 @@ +import type { + EnvProviderState, + IDataObject, + IExecuteData, + IExecuteFunctions, + INode, + INodeExecutionData, + INodeParameters, + IRunExecutionData, + ITaskDataConnections, + ITaskDataConnectionsSource, + IWorkflowExecuteAdditionalData, + Workflow, + WorkflowExecuteMode, + WorkflowParameters, +} from 'n8n-workflow'; + +export interface InputDataChunkDefinition { + startIndex: number; + count: number; +} + +export interface InputDataRequestParams { + /** Whether to include the input data in the response */ + include: boolean; + /** Optionally request only a specific chunk of data instead of all input data */ + chunk?: InputDataChunkDefinition; +} + +/** + * Specifies what data should be included for a task data request. + */ +export interface TaskDataRequestParams { + dataOfNodes: string[] | 'all'; + prevNode: boolean; + /** Whether input data for the node should be included */ + input: InputDataRequestParams; + /** Whether env provider's state should be included */ + env: boolean; +} + +export interface DataRequestResponse { + workflow: Omit; + inputData: ITaskDataConnections; + connectionInputSource: ITaskDataConnectionsSource | null; + node: INode; + + runExecutionData: IRunExecutionData; + runIndex: number; + itemIndex: number; + activeNodeName: string; + siblingParameters: INodeParameters; + mode: WorkflowExecuteMode; + envProviderState: EnvProviderState; + defaultReturnRunIndex: number; + selfData: IDataObject; + contextNodeName: string; + additionalData: PartialAdditionalData; +} + +export interface TaskResultData { + result: INodeExecutionData[]; + customData?: Record; + staticData?: IDataObject; +} + +export interface TaskData { + executeFunctions: IExecuteFunctions; + inputData: ITaskDataConnections; + node: INode; + + workflow: Workflow; + runExecutionData: IRunExecutionData; + runIndex: number; + itemIndex: number; + activeNodeName: string; + connectionInputData: INodeExecutionData[]; + siblingParameters: INodeParameters; + mode: WorkflowExecuteMode; + envProviderState: EnvProviderState; + executeData?: IExecuteData; + defaultReturnRunIndex: number; + selfData: IDataObject; + contextNodeName: string; + additionalData: IWorkflowExecuteAdditionalData; +} + +export interface PartialAdditionalData { + executionId?: string; + restartExecutionId?: string; + restApiUrl: string; + instanceBaseUrl: string; + formWaitingBaseUrl: string; + webhookBaseUrl: string; + webhookWaitingBaseUrl: string; + webhookTestBaseUrl: string; + currentNodeParameters?: INodeParameters; + executionTimeoutTimestamp?: number; + userId?: string; + variables: IDataObject; +} + +/** RPC methods that are exposed directly to the Code Node */ +export const EXPOSED_RPC_METHODS = [ + // assertBinaryData(itemIndex: number, propertyName: string): Promise + 'helpers.assertBinaryData', + + // getBinaryDataBuffer(itemIndex: number, propertyName: string): Promise + 'helpers.getBinaryDataBuffer', + + // prepareBinaryData(binaryData: Buffer, fileName?: string, mimeType?: string): Promise + 'helpers.prepareBinaryData', + + // setBinaryDataBuffer(metadata: IBinaryData, buffer: Buffer): Promise + 'helpers.setBinaryDataBuffer', + + // binaryToString(body: Buffer, encoding?: string): string + 'helpers.binaryToString', + + // httpRequest(opts: IHttpRequestOptions): Promise + 'helpers.httpRequest', + + // (deprecated) request(uriOrObject: string | IRequestOptions, options?: IRequestOptions): Promise; + 'helpers.request', +]; + +/** Helpers that exist but that we are not exposing to the Code Node */ +export const UNSUPPORTED_HELPER_FUNCTIONS = [ + // These rely on checking the credentials from the current node type (Code Node) + // and hence they can't even work (Code Node doesn't have credentials) + 'helpers.httpRequestWithAuthentication', + 'helpers.requestWithAuthenticationPaginated', + + // This has been removed + 'helpers.copyBinaryFile', + + // We can't support streams over RPC without implementing it ourselves + 'helpers.createReadStream', + 'helpers.getBinaryStream', + + // Makes no sense to support this, as it returns either a stream or a buffer + // and we can't support streams over RPC + 'helpers.binaryToBuffer', + + // These are pretty low-level, so we shouldn't expose them + // (require binary data id, which we don't expose) + 'helpers.getBinaryMetadata', + 'helpers.getStoragePath', + 'helpers.getBinaryPath', + + // We shouldn't allow arbitrary FS writes + 'helpers.writeContentToFile', + + // Not something we need to expose. Can be done in the node itself + // copyInputItems(items: INodeExecutionData[], properties: string[]): IDataObject[] + 'helpers.copyInputItems', + + // Code Node does these automatically already + 'helpers.returnJsonArray', + 'helpers.normalizeItems', + + // The client is instantiated and lives on the n8n instance, so we can't + // expose it over RPC without implementing object marshalling + 'helpers.getSSHClient', + + // Doesn't make sense to expose + 'helpers.createDeferredPromise', + 'helpers.constructExecutionMetaData', +]; + +/** List of all RPC methods that task runner supports */ +export const AVAILABLE_RPC_METHODS = [...EXPOSED_RPC_METHODS, 'logNodeOutput'] as const; + +/** Node types needed for the runner to execute a task. */ +export type NeededNodeType = { name: string; version: number }; diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/start 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/start 2.ts new file mode 100755 index 00000000..0b88a8ac --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/start 2.ts @@ -0,0 +1,79 @@ +import { Container } from '@n8n/di'; +import { ensureError, setGlobalState } from 'n8n-workflow'; + +import { MainConfig } from './config/main-config'; +import type { HealthCheckServer } from './health-check-server'; +import { JsTaskRunner } from './js-task-runner/js-task-runner'; +import { TaskRunnerSentry } from './task-runner-sentry'; + +let healthCheckServer: HealthCheckServer | undefined; +let runner: JsTaskRunner | undefined; +let isShuttingDown = false; +let sentry: TaskRunnerSentry | undefined; + +function createSignalHandler(signal: string, timeoutInS = 10) { + return async function onSignal() { + if (isShuttingDown) { + return; + } + + console.log(`Received ${signal} signal, shutting down...`); + + setTimeout(() => { + console.error('Shutdown timeout reached, forcing shutdown...'); + process.exit(1); + }, timeoutInS * 1000).unref(); + + isShuttingDown = true; + try { + if (runner) { + await runner.stop(); + runner = undefined; + void healthCheckServer?.stop(); + } + + if (sentry) { + await sentry.shutdown(); + sentry = undefined; + } + } catch (e) { + const error = ensureError(e); + console.error('Error stopping task runner', { error }); + } finally { + console.log('Task runner stopped'); + process.exit(0); + } + }; +} + +void (async function start() { + const config = Container.get(MainConfig); + + setGlobalState({ + defaultTimezone: config.baseRunnerConfig.timezone, + }); + + sentry = Container.get(TaskRunnerSentry); + await sentry.initIfEnabled(); + + runner = new JsTaskRunner(config); + runner.on('runner:reached-idle-timeout', () => { + // Use shorter timeout since we know we don't have any tasks running + void createSignalHandler('IDLE_TIMEOUT', 3)(); + }); + + const { enabled, host, port } = config.baseRunnerConfig.healthcheckServer; + + if (enabled) { + const { HealthCheckServer } = await import('./health-check-server'); + healthCheckServer = new HealthCheckServer(); + await healthCheckServer.start(host, port); + } + + process.on('SIGINT', createSignalHandler('SIGINT')); + process.on('SIGTERM', createSignalHandler('SIGTERM')); +})().catch((e) => { + const error = ensureError(e); + console.error('Task runner failed to start', { error }); + process.exit(1); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-runner 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-runner 2.ts new file mode 100755 index 00000000..c31a5aad --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-runner 2.ts @@ -0,0 +1,623 @@ +import { isSerializedBuffer, toBuffer } from 'n8n-core'; +import { ApplicationError, ensureError, randomInt } from 'n8n-workflow'; +import { nanoid } from 'nanoid'; +import { EventEmitter } from 'node:events'; +import { type MessageEvent, WebSocket } from 'ws'; + +import type { BaseRunnerConfig } from '@/config/base-runner-config'; +import { TimeoutError } from '@/js-task-runner/errors/timeout-error'; +import type { BrokerMessage, RunnerMessage } from '@/message-types'; +import { TaskRunnerNodeTypes } from '@/node-types'; +import type { TaskResultData } from '@/runner-types'; +import { TaskState } from '@/task-state'; + +import { TaskCancelledError } from './js-task-runner/errors/task-cancelled-error'; + +export interface TaskOffer { + offerId: string; + validUntil: bigint; +} + +interface DataRequest { + taskId: string; + requestId: string; + resolve: (data: unknown) => void; + reject: (error: unknown) => void; +} + +interface NodeTypesRequest { + taskId: string; + requestId: string; + resolve: (data: unknown) => void; + reject: (error: unknown) => void; +} + +interface RPCCall { + callId: string; + resolve: (data: unknown) => void; + reject: (error: unknown) => void; +} + +const OFFER_VALID_TIME_MS = 5000; +const OFFER_VALID_EXTRA_MS = 100; + +/** Converts milliseconds to nanoseconds */ +const msToNs = (ms: number) => BigInt(ms * 1_000_000); + +export const noOp = () => {}; + +/** Params the task receives when it is executed */ +export interface TaskParams { + taskId: string; + settings: T; +} + +export interface TaskRunnerOpts extends BaseRunnerConfig { + taskType: string; + name?: string; +} + +export abstract class TaskRunner extends EventEmitter { + id: string = nanoid(); + + ws: WebSocket; + + canSendOffers = false; + + runningTasks: Map = new Map(); + + offerInterval: NodeJS.Timeout | undefined; + + openOffers: Map = new Map(); + + dataRequests: Map = new Map(); + + nodeTypesRequests: Map = new Map(); + + rpcCalls: Map = new Map(); + + nodeTypes: TaskRunnerNodeTypes = new TaskRunnerNodeTypes([]); + + taskType: string; + + maxConcurrency: number; + + name: string; + + private idleTimer: NodeJS.Timeout | undefined; + + /** How long (in seconds) a task is allowed to take for completion, else the task will be aborted. */ + protected readonly taskTimeout: number; + + /** How long (in seconds) a runner may be idle for before exit. */ + private readonly idleTimeout: number; + + constructor(opts: TaskRunnerOpts) { + super(); + + this.taskType = opts.taskType; + this.name = opts.name ?? 'Node.js Task Runner SDK'; + this.maxConcurrency = opts.maxConcurrency; + this.taskTimeout = opts.taskTimeout; + this.idleTimeout = opts.idleTimeout; + + const { host: taskBrokerHost } = new URL(opts.taskBrokerUri); + + const wsUrl = `ws://${taskBrokerHost}/runners/_ws?id=${this.id}`; + this.ws = new WebSocket(wsUrl, { + headers: { + authorization: `Bearer ${opts.grantToken}`, + }, + maxPayload: opts.maxPayloadSize, + }); + + this.ws.addEventListener('error', (event) => { + const error = ensureError(event.error); + + if ( + 'code' in error && + typeof error.code === 'string' && + ['ECONNREFUSED', 'ENOTFOUND'].some((code) => code === error.code) + ) { + console.error( + `Error: Failed to connect to n8n task broker. Please ensure n8n task broker is reachable at: ${taskBrokerHost}`, + ); + process.exit(1); + } else { + console.error(`Error: Failed to connect to n8n task broker at ${taskBrokerHost}`); + console.error('Details:', event.message || 'Unknown error'); + } + }); + this.ws.addEventListener('message', this.receiveMessage); + this.ws.addEventListener('close', this.stopTaskOffers); + this.resetIdleTimer(); + } + + private resetIdleTimer() { + if (this.idleTimeout === 0) return; + + this.clearIdleTimer(); + + this.idleTimer = setTimeout(() => { + if (this.runningTasks.size === 0) this.emit('runner:reached-idle-timeout'); + }, this.idleTimeout * 1000); + } + + private receiveMessage = (message: MessageEvent) => { + // eslint-disable-next-line n8n-local-rules/no-uncaught-json-parse + const data = JSON.parse(message.data as string) as BrokerMessage.ToRunner.All; + void this.onMessage(data); + }; + + private stopTaskOffers = () => { + this.canSendOffers = false; + if (this.offerInterval) { + clearInterval(this.offerInterval); + this.offerInterval = undefined; + } + }; + + private startTaskOffers() { + this.canSendOffers = true; + if (this.offerInterval) { + clearInterval(this.offerInterval); + } + this.offerInterval = setInterval(() => this.sendOffers(), 250); + } + + deleteStaleOffers() { + this.openOffers.forEach((offer, key) => { + if (offer.validUntil < process.hrtime.bigint()) { + this.openOffers.delete(key); + } + }); + } + + sendOffers() { + this.deleteStaleOffers(); + + if (!this.canSendOffers) { + return; + } + + const offersToSend = this.maxConcurrency - (this.openOffers.size + this.runningTasks.size); + + for (let i = 0; i < offersToSend; i++) { + // Add a bit of randomness so that not all offers expire at the same time + const validForInMs = OFFER_VALID_TIME_MS + randomInt(500); + // Add a little extra time to account for latency + const validUntil = process.hrtime.bigint() + msToNs(validForInMs + OFFER_VALID_EXTRA_MS); + const offer: TaskOffer = { + offerId: nanoid(), + validUntil, + }; + this.openOffers.set(offer.offerId, offer); + this.send({ + type: 'runner:taskoffer', + taskType: this.taskType, + offerId: offer.offerId, + validFor: validForInMs, + }); + } + } + + send(message: RunnerMessage.ToBroker.All) { + this.ws.send(JSON.stringify(message)); + } + + onMessage(message: BrokerMessage.ToRunner.All) { + switch (message.type) { + case 'broker:inforequest': + this.send({ + type: 'runner:info', + name: this.name, + types: [this.taskType], + }); + break; + case 'broker:runnerregistered': + this.startTaskOffers(); + break; + case 'broker:taskofferaccept': + this.offerAccepted(message.offerId, message.taskId); + break; + case 'broker:taskcancel': + void this.taskCancelled(message.taskId, message.reason); + break; + case 'broker:tasksettings': + void this.receivedSettings(message.taskId, message.settings); + break; + case 'broker:taskdataresponse': + this.processDataResponse(message.requestId, message.data); + break; + case 'broker:rpcresponse': + this.handleRpcResponse(message.callId, message.status, message.data); + break; + case 'broker:nodetypes': + this.processNodeTypesResponse(message.requestId, message.nodeTypes); + break; + } + } + + processDataResponse(requestId: string, data: unknown) { + const request = this.dataRequests.get(requestId); + if (!request) { + return; + } + // Deleting of the request is handled in `requestData`, using a + // `finally` wrapped around the return + request.resolve(data); + } + + processNodeTypesResponse(requestId: string, nodeTypes: unknown) { + const request = this.nodeTypesRequests.get(requestId); + + if (!request) return; + + // Deleting of the request is handled in `requestNodeTypes`, using a + // `finally` wrapped around the return + request.resolve(nodeTypes); + } + + /** + * Whether the task runner has capacity to accept more tasks. + */ + hasOpenTaskSlots() { + return this.runningTasks.size < this.maxConcurrency; + } + + offerAccepted(offerId: string, taskId: string) { + if (!this.hasOpenTaskSlots()) { + this.openOffers.delete(offerId); + this.send({ + type: 'runner:taskrejected', + taskId, + reason: 'No open task slots - runner already at capacity', + }); + return; + } + + const offer = this.openOffers.get(offerId); + if (!offer) { + this.send({ + type: 'runner:taskrejected', + taskId, + reason: 'Offer expired - not accepted within validity window', + }); + return; + } else { + this.openOffers.delete(offerId); + } + + this.resetIdleTimer(); + const taskState = new TaskState({ + taskId, + timeoutInS: this.taskTimeout, + onTimeout: () => { + void this.taskTimedOut(taskId); + }, + }); + this.runningTasks.set(taskId, taskState); + + this.send({ + type: 'runner:taskaccepted', + taskId, + }); + } + + async taskCancelled(taskId: string, reason: string) { + const taskState = this.runningTasks.get(taskId); + if (!taskState) { + return; + } + + await taskState.caseOf({ + // If the cancelled task hasn't received settings yet, we can finish it + waitingForSettings: () => this.finishTask(taskState), + + // If the task has already timed out or is already cancelled, we can + // ignore the cancellation + 'aborting:timeout': noOp, + 'aborting:cancelled': noOp, + + running: () => { + taskState.status = 'aborting:cancelled'; + taskState.abortController.abort('cancelled'); + this.cancelTaskRequests(taskId, reason); + }, + }); + } + + async taskTimedOut(taskId: string) { + const taskState = this.runningTasks.get(taskId); + if (!taskState) { + return; + } + + await taskState.caseOf({ + // If we are still waiting for settings for the task, we can error the + // task immediately + waitingForSettings: () => { + try { + this.send({ + type: 'runner:taskerror', + taskId, + error: new TimeoutError(this.taskTimeout), + }); + } finally { + this.finishTask(taskState); + } + }, + + // This should never happen, the timeout timer should only fire once + 'aborting:timeout': TaskState.throwUnexpectedTaskStatus, + + // If we are currently executing the task, abort the execution and + // mark the task as timed out + running: () => { + taskState.status = 'aborting:timeout'; + taskState.abortController.abort('timeout'); + this.cancelTaskRequests(taskId, 'timeout'); + }, + + // If the task is already cancelling, we can ignore the timeout + 'aborting:cancelled': noOp, + }); + } + + async receivedSettings(taskId: string, settings: unknown) { + const taskState = this.runningTasks.get(taskId); + if (!taskState) { + return; + } + + await taskState.caseOf({ + // These states should never happen, as they are handled already in + // the other lifecycle methods and the task should be removed from the + // running tasks + 'aborting:cancelled': TaskState.throwUnexpectedTaskStatus, + 'aborting:timeout': TaskState.throwUnexpectedTaskStatus, + running: TaskState.throwUnexpectedTaskStatus, + + waitingForSettings: async () => { + taskState.status = 'running'; + + await this.executeTask( + { + taskId, + settings, + }, + taskState.abortController.signal, + ) + .then(async (data) => await this.taskExecutionSucceeded(taskState, data)) + .catch(async (error) => await this.taskExecutionFailed(taskState, error)); + }, + }); + } + + async executeTask(_taskParams: TaskParams, _signal: AbortSignal): Promise { + throw new ApplicationError('Unimplemented'); + } + + async requestNodeTypes( + taskId: TaskState['taskId'], + requestParams: RunnerMessage.ToBroker.NodeTypesRequest['requestParams'], + ) { + const requestId = nanoid(); + + const nodeTypesPromise = new Promise((resolve, reject) => { + this.nodeTypesRequests.set(requestId, { + requestId, + taskId, + resolve: resolve as (data: unknown) => void, + reject, + }); + }); + + this.send({ + type: 'runner:nodetypesrequest', + taskId, + requestId, + requestParams, + }); + + try { + return await nodeTypesPromise; + } finally { + this.nodeTypesRequests.delete(requestId); + } + } + + async requestData( + taskId: TaskState['taskId'], + requestParams: RunnerMessage.ToBroker.TaskDataRequest['requestParams'], + ): Promise { + const requestId = nanoid(); + + const dataRequestPromise = new Promise((resolve, reject) => { + this.dataRequests.set(requestId, { + requestId, + taskId, + resolve: resolve as (data: unknown) => void, + reject, + }); + }); + + this.send({ + type: 'runner:taskdatarequest', + taskId, + requestId, + requestParams, + }); + + try { + return await dataRequestPromise; + } finally { + this.dataRequests.delete(requestId); + } + } + + async makeRpcCall(taskId: string, name: RunnerMessage.ToBroker.RPC['name'], params: unknown[]) { + const callId = nanoid(); + + const dataPromise = new Promise((resolve, reject) => { + this.rpcCalls.set(callId, { + callId, + resolve, + reject, + }); + }); + + try { + this.send({ + type: 'runner:rpc', + callId, + taskId, + name, + params, + }); + + const returnValue = await dataPromise; + + return isSerializedBuffer(returnValue) ? toBuffer(returnValue) : returnValue; + } finally { + this.rpcCalls.delete(callId); + } + } + + handleRpcResponse( + callId: string, + status: BrokerMessage.ToRunner.RPCResponse['status'], + data: unknown, + ) { + const call = this.rpcCalls.get(callId); + if (!call) { + return; + } + if (status === 'success') { + call.resolve(data); + } else { + call.reject(typeof data === 'string' ? new Error(data) : data); + } + } + + /** Close the connection gracefully and wait until has been closed */ + async stop() { + this.clearIdleTimer(); + + this.stopTaskOffers(); + + await this.waitUntilAllTasksAreDone(); + + await this.closeConnection(); + } + + clearIdleTimer() { + if (this.idleTimer) clearTimeout(this.idleTimer); + this.idleTimer = undefined; + } + + private async closeConnection() { + // 1000 is the standard close code + // https://www.rfc-editor.org/rfc/rfc6455.html#section-7.1.5 + this.ws.close(1000, 'Shutting down'); + + await new Promise((resolve) => { + this.ws.once('close', resolve); + }); + } + + private async waitUntilAllTasksAreDone(maxWaitTimeInMs = 30_000) { + // TODO: Make maxWaitTimeInMs configurable + const start = Date.now(); + + while (this.runningTasks.size > 0) { + if (Date.now() - start > maxWaitTimeInMs) { + throw new ApplicationError('Timeout while waiting for tasks to finish'); + } + + await new Promise((resolve) => setTimeout(resolve, 100)); + } + } + + private async taskExecutionSucceeded(taskState: TaskState, data: TaskResultData) { + try { + const sendData = () => { + this.send({ + type: 'runner:taskdone', + taskId: taskState.taskId, + data, + }); + }; + + await taskState.caseOf({ + waitingForSettings: TaskState.throwUnexpectedTaskStatus, + + 'aborting:cancelled': noOp, + + // If the task timed out but we ended up reaching this point, we + // might as well send the data + 'aborting:timeout': sendData, + running: sendData, + }); + } finally { + this.finishTask(taskState); + } + } + + private async taskExecutionFailed(taskState: TaskState, error: unknown) { + try { + const sendError = () => { + this.send({ + type: 'runner:taskerror', + taskId: taskState.taskId, + error, + }); + }; + + await taskState.caseOf({ + waitingForSettings: TaskState.throwUnexpectedTaskStatus, + + 'aborting:cancelled': noOp, + + 'aborting:timeout': () => { + console.warn(`Task ${taskState.taskId} timed out`); + + sendError(); + }, + + running: sendError, + }); + } finally { + this.finishTask(taskState); + } + } + + /** + * Cancels all node type and data requests made by the given task + */ + private cancelTaskRequests(taskId: string, reason: string) { + for (const [requestId, request] of this.dataRequests.entries()) { + if (request.taskId === taskId) { + request.reject(new TaskCancelledError(reason)); + this.dataRequests.delete(requestId); + } + } + + for (const [requestId, request] of this.nodeTypesRequests.entries()) { + if (request.taskId === taskId) { + request.reject(new TaskCancelledError(reason)); + this.nodeTypesRequests.delete(requestId); + } + } + } + + /** + * Finishes task by removing it from the running tasks and sending new offers + */ + private finishTask(taskState: TaskState) { + taskState.cleanup(); + this.runningTasks.delete(taskState.taskId); + this.sendOffers(); + this.resetIdleTimer(); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-runner-sentry 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-runner-sentry 2.ts new file mode 100755 index 00000000..1bf9808f --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-runner-sentry 2.ts @@ -0,0 +1,63 @@ +import { Service } from '@n8n/di'; +import type { ErrorEvent, Exception } from '@sentry/core'; +import { ErrorReporter } from 'n8n-core'; + +import { SentryConfig } from './config/sentry-config'; + +/** + * Sentry service for the task runner. + */ +@Service() +export class TaskRunnerSentry { + constructor( + private readonly config: SentryConfig, + private readonly errorReporter: ErrorReporter, + ) {} + + async initIfEnabled() { + const { dsn, n8nVersion, environment, deploymentName } = this.config; + + if (!dsn) return; + + await this.errorReporter.init({ + serverType: 'task_runner', + dsn, + release: `n8n@${n8nVersion}`, + environment, + serverName: deploymentName, + beforeSendFilter: this.filterOutUserCodeErrors, + withEventLoopBlockDetection: false, + }); + } + + async shutdown() { + if (!this.config.dsn) return; + + await this.errorReporter.shutdown(); + } + + /** + * Filter out errors originating from user provided code. + * It is possible for users to create code that causes unhandledrejections + * that end up in the sentry error reporting. + */ + filterOutUserCodeErrors = (event: ErrorEvent) => { + const error = event?.exception?.values?.[0]; + + return error ? this.isUserCodeError(error) : false; + }; + + /** + * Check if the error is originating from user provided code. + * It is possible for users to create code that causes unhandledrejections + * that end up in the sentry error reporting. + */ + private isUserCodeError(error: Exception) { + const frames = error.stacktrace?.frames; + if (!frames) return false; + + return frames.some( + (frame) => frame.filename === 'node:vm' && frame.function === 'runInContext', + ); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-state 2.ts b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-state 2.ts new file mode 100755 index 00000000..4c2c0e44 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/task-runner/src/task-state 2.ts @@ -0,0 +1,118 @@ +import * as a from 'node:assert'; + +export type TaskStatus = + | 'waitingForSettings' + | 'running' + | 'aborting:cancelled' + | 'aborting:timeout'; + +export type TaskStateOpts = { + taskId: string; + timeoutInS: number; + onTimeout: () => void; +}; + +/** + * The state of a task. The task can be in one of the following states: + * - waitingForSettings: The task is waiting for settings from the broker + * - running: The task is currently running + * - aborting:cancelled: The task was canceled by the broker and is being aborted + * - aborting:timeout: The task took too long to complete and is being aborted + * + * The task is discarded once it reaches an end state. + * + * The class only holds the state, and does not have any logic. + * + * The task has the following lifecycle: + * + * ┌───┐ + * └───┘ + * │ + * broker:taskofferaccept : create task state + * │ + * ▼ + * ┌────────────────────┐ broker:taskcancel / timeout + * │ waitingForSettings ├──────────────────────────────────┐ + * └────────┬───────────┘ │ + * │ │ + * broker:tasksettings │ + * │ │ + * ▼ │ + * ┌───────────────┐ ┌────────────────────┐ │ + * │ running │ │ aborting:timeout │ │ + * │ │ timeout │ │ │ + * ┌───────┤- execute task ├───────────►│- fire abort signal │ │ + * │ └──────┬────────┘ └──────────┬─────────┘ │ + * │ │ │ │ + * │ broker:taskcancel │ │ + * Task execution │ Task execution │ + * resolves / rejects │ resolves / rejects │ + * │ ▼ │ │ + * │ ┌─────────────────────┐ │ │ + * │ │ aborting:cancelled │ │ │ + * │ │ │ │ │ + * │ │- fire abort signal │ │ │ + * │ └──────────┬──────────┘ │ │ + * │ Task execution │ │ + * │ resolves / rejects │ │ + * │ │ │ │ + * │ ▼ │ │ + * │ ┌──┐ │ │ + * └─────────────►│ │◄────────────────────────────┴─────────────┘ + * └──┘ + */ +export class TaskState { + status: TaskStatus = 'waitingForSettings'; + + readonly taskId: string; + + /** Controller for aborting the execution of the task */ + readonly abortController = new AbortController(); + + /** Timeout timer for the task */ + private timeoutTimer: NodeJS.Timeout | undefined; + + constructor(opts: TaskStateOpts) { + this.taskId = opts.taskId; + this.timeoutTimer = setTimeout(opts.onTimeout, opts.timeoutInS * 1000); + } + + /** Cleans up any resources before the task can be removed */ + cleanup() { + clearTimeout(this.timeoutTimer); + this.timeoutTimer = undefined; + } + + /** Custom JSON serialization for the task state for logging purposes */ + toJSON() { + return `[Task ${this.taskId} (${this.status})]`; + } + + /** + * Executes the function matching the current task status + * + * @example + * ```ts + * taskState.caseOf({ + * waitingForSettings: () => {...}, + * running: () => {...}, + * aborting:cancelled: () => {...}, + * aborting:timeout: () => {...}, + * }); + * ``` + */ + async caseOf( + conditions: Record void | Promise | never>, + ) { + if (!conditions[this.status]) { + TaskState.throwUnexpectedTaskStatus(this); + } + + return await conditions[this.status](this); + } + + /** Throws an error that the task status is unexpected */ + static throwUnexpectedTaskStatus = (taskState: TaskState) => { + a.fail(`Unexpected task status: ${JSON.stringify(taskState)}`); + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/assert 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/assert 2.ts new file mode 100755 index 00000000..6038ccce --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/assert 2.ts @@ -0,0 +1,9 @@ +/** + * Asserts given condition + */ +export function assert(condition: unknown, message?: string): asserts condition { + if (!condition) { + // eslint-disable-next-line n8n-local-rules/no-plain-errors + throw new Error(message ?? 'Assertion failed'); + } +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-bus 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-bus 2.ts new file mode 100755 index 00000000..7526cf97 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-bus 2.ts @@ -0,0 +1,84 @@ +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export type CallbackFn = (...args: any[]) => any; + +type Payloads = { + [E in keyof ListenerMap]: unknown; +}; + +type Listener = (payload: Payload) => void; + +// eslint-disable-next-line @typescript-eslint/no-explicit-any +export interface EventBus = Record> { + on( + eventName: EventName, + fn: Listener, + ): void; + + once( + eventName: EventName, + fn: Listener, + ): void; + + off( + eventName: EventName, + fn: Listener, + ): void; + + emit( + eventName: EventName, + event?: ListenerMap[EventName], + ): void; +} + +/** + * Creates an event bus with the given listener map. + * + * @example + * ```ts + * const eventBus = createEventBus<{ + * 'user-logged-in': { username: string }; + * 'user-logged-out': never; + * }>(); + */ +export function createEventBus< + // eslint-disable-next-line @typescript-eslint/no-explicit-any + ListenerMap extends Payloads = Record, +>(): EventBus { + const handlers = new Map(); + + return { + on(eventName, fn) { + let eventFns = handlers.get(eventName); + if (!eventFns) { + eventFns = [fn]; + } else { + eventFns.push(fn); + } + handlers.set(eventName, eventFns); + }, + + once(eventName, fn) { + const handler: typeof fn = (payload) => { + this.off(eventName, handler); + fn(payload); + }; + this.on(eventName, handler); + }, + + off(eventName, fn) { + const eventFns = handlers.get(eventName); + if (eventFns) { + eventFns.splice(eventFns.indexOf(fn) >>> 0, 1); + } + }, + + emit(eventName, event) { + const eventFns = handlers.get(eventName); + if (eventFns) { + eventFns.slice().forEach((handler) => { + handler(event); + }); + } + }, + }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-bus.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-bus.test 2.ts new file mode 100755 index 00000000..0d1500dc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-bus.test 2.ts @@ -0,0 +1,74 @@ +import { createEventBus } from './event-bus'; + +describe('createEventBus()', () => { + const eventBus = createEventBus(); + + describe('on()', () => { + it('should register event handler', () => { + const handler = vi.fn(); + const eventName = 'test'; + + eventBus.on(eventName, handler); + + eventBus.emit(eventName, {}); + + expect(handler).toHaveBeenCalled(); + }); + }); + + describe('once()', () => { + it('should register event handler', () => { + const handler = vi.fn(); + const eventName = 'test'; + + eventBus.once(eventName, handler); + + eventBus.emit(eventName, {}); + + expect(handler).toHaveBeenCalled(); + }); + + it('should unregister event handler after first call', () => { + const handler = vi.fn(); + const eventName = 'test'; + + eventBus.once(eventName, handler); + + eventBus.emit(eventName, {}); + eventBus.emit(eventName, {}); + + expect(handler).toHaveBeenCalledTimes(1); + }); + }); + + describe('off()', () => { + it('should register event handler', () => { + const handler = vi.fn(); + const eventName = 'test'; + + eventBus.on(eventName, handler); + eventBus.off(eventName, handler); + + eventBus.emit(eventName, {}); + + expect(handler).not.toHaveBeenCalled(); + }); + }); + + describe('emit()', () => { + it('should call handlers with given event', () => { + const handlerA = vi.fn(); + const handlerB = vi.fn(); + const eventName = 'test'; + const event = new Event(eventName); + + eventBus.on(eventName, handlerA); + eventBus.on(eventName, handlerB); + + eventBus.emit(eventName, event); + + expect(handlerA).toHaveBeenCalledWith(event); + expect(handlerB).toHaveBeenCalledWith(event); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-queue 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-queue 2.ts new file mode 100755 index 00000000..b8405c74 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-queue 2.ts @@ -0,0 +1,50 @@ +/** + * Create an event queue that processes events sequentially. + * + * @param processEvent - Async function that processes a single event. + * @returns A function that enqueues events for processing. + */ +export function createEventQueue(processEvent: (event: T) => Promise) { + // The internal queue holding events. + const queue: T[] = []; + + // Flag to indicate whether an event is currently being processed. + let processing = false; + + /** + * Process the next event in the queue (if not already processing). + */ + async function processNext(): Promise { + if (processing || queue.length === 0) { + return; + } + + processing = true; + const currentEvent = queue.shift(); + + if (currentEvent !== undefined) { + try { + await processEvent(currentEvent); + } catch (error) { + console.error('Error processing event:', error); + } + } + + processing = false; + + // Recursively process the next event. + await processNext(); + } + + /** + * Enqueue an event and trigger processing. + * + * @param event - The event to enqueue. + */ + function enqueue(event: T): void { + queue.push(event); + void processNext(); + } + + return { enqueue }; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-queue.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-queue.test 2.ts new file mode 100755 index 00000000..a7c351a7 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/event-queue.test 2.ts @@ -0,0 +1,100 @@ +import { createEventQueue } from './event-queue'; + +describe('createEventQueue', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + }); + + it('should process events in order', async () => { + const processedEvents: string[] = []; + + // Create an async handler that pushes events into the processedEvents array. + const processEvent = vi.fn(async (event: string) => { + processedEvents.push(event); + // Simulate asynchronous delay of 10ms. + await new Promise((resolve) => setTimeout(resolve, 10)); + }); + + // Create the event queue. + const { enqueue } = createEventQueue(processEvent); + + // Enqueue events in a specific order. + enqueue('Event 1'); + enqueue('Event 2'); + enqueue('Event 3'); + + // Advance the timers enough to process all events. + // runAllTimersAsync() will run all pending timers and wait for any pending promise resolution. + await vi.runAllTimersAsync(); + + expect(processEvent).toHaveBeenCalledTimes(3); + expect(processedEvents).toEqual(['Event 1', 'Event 2', 'Event 3']); + }); + + it('should handle errors and continue processing', async () => { + const processedEvents: string[] = []; + const processEvent = vi.fn(async (event: string) => { + if (event === 'fail') { + throw new Error('Processing error'); // eslint-disable-line n8n-local-rules/no-plain-errors + } + processedEvents.push(event); + await new Promise((resolve) => setTimeout(resolve, 10)); + }); + const { enqueue } = createEventQueue(processEvent); + const consoleSpy = vi.spyOn(console, 'error').mockImplementation(() => {}); + + enqueue('Event A'); + enqueue('fail'); + enqueue('Event B'); + + await vi.runAllTimersAsync(); + + expect(processEvent).toHaveBeenCalledTimes(3); + // 'fail' should cause an error but processing continues. + expect(processedEvents).toEqual(['Event A', 'Event B']); + expect(consoleSpy).toHaveBeenCalledWith('Error processing event:', expect.any(Error)); + + consoleSpy.mockRestore(); + }); + + it('should not process any events if none are enqueued', async () => { + const processEvent = vi.fn(async (_event: string) => { + await new Promise((resolve) => setTimeout(resolve, 10)); + }); + + createEventQueue(processEvent); + + await vi.runAllTimersAsync(); + + // Did not enqueue any event. + expect(processEvent).not.toHaveBeenCalled(); + }); + + it('should ensure no concurrent processing of events', async () => { + let processingCounter = 0; + let maxConcurrent = 0; + + const processEvent = vi.fn(async (_event: string) => { + processingCounter++; + maxConcurrent = Math.max(maxConcurrent, processingCounter); + // Simulate asynchronous delay. + await new Promise((resolve) => setTimeout(resolve, 20)); + processingCounter--; + }); + + const { enqueue } = createEventQueue(processEvent); + + enqueue('A'); + enqueue('B'); + enqueue('C'); + + await vi.runAllTimersAsync(); + + // Throughout processing, maxConcurrent should remain 1. + expect(maxConcurrent).toEqual(1); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/retry 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/retry 2.ts new file mode 100755 index 00000000..a943b023 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/retry 2.ts @@ -0,0 +1,51 @@ +type RetryFn = () => boolean | Promise; + +/** + * A utility that retries a function every `interval` milliseconds + * until the function returns true or the maximum number of retries is reached. + * + * @param fn - A function that returns a boolean or a Promise resolving to a boolean. + * @param interval - The time interval (in milliseconds) between each retry. Defaults to 1000. + * @param maxRetries - The maximum number of retry attempts. Defaults to 3. + * @param backoff - The backoff strategy to use: 'linear', 'exponential', or null. + * @returns {Promise} - A promise that resolves to: + * - true: If the function returns true before reaching maxRetries. + * - false: If the function never returns true or if an error occurs. + */ +export async function retry( + fn: RetryFn, + interval: number = 1000, + maxRetries: number = 3, + backoff: 'exponential' | 'linear' | null = 'linear', +): Promise { + let attempt = 0; + + while (attempt < maxRetries) { + attempt++; + try { + const result = await fn(); + if (result) { + return true; + } + } catch (error) { + console.error('Error during retry:', error); + throw error; + } + + // Wait for the specified interval before the next attempt, if any attempts remain. + if (attempt < maxRetries) { + let computedInterval = interval; + + if (backoff === 'linear') { + computedInterval = interval * attempt; + } else if (backoff === 'exponential') { + computedInterval = Math.pow(2, attempt - 1) * interval; + computedInterval = Math.min(computedInterval, 30000); // Cap the maximum interval to 30 seconds + } + + await new Promise((resolve) => setTimeout(resolve, computedInterval)); + } + } + + return false; +} diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/retry.test 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/retry.test 2.ts new file mode 100755 index 00000000..38452db0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/retry.test 2.ts @@ -0,0 +1,122 @@ +import { retry } from './retry'; + +describe('retry', () => { + beforeEach(() => { + vi.useFakeTimers(); + }); + + afterEach(() => { + vi.useRealTimers(); + vi.clearAllTimers(); + }); + + it('should resolve true when the function eventually returns true', async () => { + let callCount = 0; + const fn = vi.fn(async () => { + callCount++; + // Return true on the second attempt. + return callCount === 2; + }); + + const promise = retry(fn, 1000, 2, null); + + // The first call happens immediately. + expect(fn).toHaveBeenCalledTimes(1); + + // Advance timers by 1000ms asynchronously to allow the waiting period to complete. + await vi.advanceTimersByTimeAsync(1000); + + // After advancing, the second attempt should have occurred. + expect(fn).toHaveBeenCalledTimes(2); + + // The promise should now resolve with true. + const result = await promise; + expect(result).toBe(true); + }); + + it('should resolve false if maximum retries are reached with no success', async () => { + let callCount = 0; + const fn = vi.fn(async () => { + callCount++; + return false; + }); + + const promise = retry(fn, 1000, 3, null); + + // The first attempt fires immediately. + expect(fn).toHaveBeenCalledTimes(1); + + // Advance timers for the delay after the first attempt. + await vi.advanceTimersByTimeAsync(1000); + expect(fn).toHaveBeenCalledTimes(2); + + // Advance timers for the delay after the second attempt. + await vi.advanceTimersByTimeAsync(1000); + expect(fn).toHaveBeenCalledTimes(3); + + // With maxRetries reached (3 calls), promise should resolve to false. + const result = await promise; + expect(result).toBe(false); + }); + + it('should reject if the function throws an error', async () => { + const fn = vi.fn(async () => { + throw new Error('Test error'); // eslint-disable-line n8n-local-rules/no-plain-errors + }); + + // Since the error is thrown on the first call, no timer advancement is needed. + await expect(retry(fn, 1000, 3, null)).rejects.toThrow('Test error'); + expect(fn).toHaveBeenCalledTimes(1); + }); + + it('should use linear backoff strategy', async () => { + let callCount = 0; + const fn = vi.fn(async () => { + callCount++; + return callCount === 4; // Return true on the fourth attempt. + }); + + const promise = retry(fn, 1000, 4, 'linear'); + + expect(fn).toHaveBeenCalledTimes(1); + + await vi.advanceTimersByTimeAsync(1000); // First backoff + expect(fn).toHaveBeenCalledTimes(2); + + await vi.advanceTimersByTimeAsync(2000); // Second backoff + expect(fn).toHaveBeenCalledTimes(3); + + await vi.advanceTimersByTimeAsync(3000); // Third backoff + expect(fn).toHaveBeenCalledTimes(4); + + const result = await promise; + expect(result).toBe(true); + }); + + it('should use exponential backoff strategy', async () => { + let callCount = 0; + const fn = vi.fn(async () => { + callCount++; + return callCount === 5; // Return true on the fifth attempt. + }); + + const promise = retry(fn, 1000, 5, 'exponential'); + + expect(fn).toHaveBeenCalledTimes(1); + + await vi.advanceTimersByTimeAsync(1000); // First backoff + expect(fn).toHaveBeenCalledTimes(2); + + await vi.advanceTimersByTimeAsync(2000); // Second backoff + expect(fn).toHaveBeenCalledTimes(3); + + await vi.advanceTimersByTimeAsync(4000); // Third backoff + expect(fn).toHaveBeenCalledTimes(4); + + await vi.advanceTimersByTimeAsync(8000); // Fourth backoff + expect(fn).toHaveBeenCalledTimes(5); + + const result = await promise; + expect(result).toBe(true); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/@n8n/utils/src/shims.d 2.ts b/n8n-n8n-1.109.2/packages/@n8n/utils/src/shims.d 2.ts new file mode 100755 index 00000000..11f02fe2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/@n8n/utils/src/shims.d 2.ts @@ -0,0 +1 @@ +/// diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/.gitignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/.gitignore 2 new file mode 100755 index 00000000..28664438 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/.gitignore 2 @@ -0,0 +1,31 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +.DS_Store +dist +dist-ssr +coverage +*.local + +/cypress/videos/ +/cypress/screenshots/ + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? + +# Auto-generated files +src/components.d.ts diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/.np-config 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/.np-config 2.json new file mode 100755 index 00000000..5b1cb0a9 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/.np-config 2.json @@ -0,0 +1,5 @@ +{ + "yarn": false, + "tests": false, + "contents": "./dist" +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/README 2.md b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/README 2.md new file mode 100755 index 00000000..846781e7 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/README 2.md @@ -0,0 +1,289 @@ +# n8n Chat +This is an embeddable Chat widget for n8n. It allows the execution of AI-Powered Workflows through a Chat window. + +**Windowed Example** +![n8n Chat Windowed](https://raw.githubusercontent.com/n8n-io/n8n/master/packages/frontend/%40n8n/chat/resources/images/windowed.png) + +**Fullscreen Example** +![n8n Chat Fullscreen](https://raw.githubusercontent.com/n8n-io/n8n/master/packages/frontend/%40n8n/chat/resources/images/fullscreen.png) + +## Prerequisites +Create a n8n workflow which you want to execute via chat. The workflow has to be triggered using a **Chat Trigger** node. + +Open the **Chat Trigger** node and add your domain to the **Allowed Origins (CORS)** field. This makes sure that only requests from your domain are accepted. + +[See example workflow](https://github.com/n8n-io/n8n/blob/master/packages/%40n8n/chat/resources/workflow.json) + +To use streaming responses, you need to enable the **Streaming response** response mode in the **Chat Trigger** node. +[See example workflow with streaming](https://github.com/n8n-io/n8n/blob/master/packages/%40n8n/chat/resources/workflow-streaming.json) + +> Make sure the workflow is **Active.** + +### How it works +Each Chat request is sent to the n8n Webhook endpoint, which then sends back a response. + +Each request is accompanied by an `action` query parameter, where `action` can be one of: +- `loadPreviousSession` - When the user opens the Chatbot again and the previous chat session should be loaded +- `sendMessage` - When the user sends a message + +## Installation + +Open the **Webhook** node and replace `YOUR_PRODUCTION_WEBHOOK_URL` with your production URL. This is the URL that the Chat widget will use to send requests to. + +### a. CDN Embed +Add the following code to your HTML page. + +```html + + +``` + +### b. Import Embed +Install and save n8n Chat as a production dependency. + +```sh +npm install @n8n/chat +``` + +Import the CSS and use the `createChat` function to initialize your Chat window. + +```ts +import '@n8n/chat/style.css'; +import { createChat } from '@n8n/chat'; + +createChat({ + webhookUrl: 'YOUR_PRODUCTION_WEBHOOK_URL' +}); +``` + +##### Vue.js + +```html + + +``` + +##### React + +```tsx +// App.tsx +import { useEffect } from 'react'; +import '@n8n/chat/style.css'; +import { createChat } from '@n8n/chat'; + +export const App = () => { + useEffect(() => { + createChat({ + webhookUrl: 'YOUR_PRODUCTION_WEBHOOK_URL' + }); + }, []); + + return (
); +}; +``` + +## Options +The default options are: + +```ts +createChat({ + webhookUrl: '', + webhookConfig: { + method: 'POST', + headers: {} + }, + target: '#n8n-chat', + mode: 'window', + chatInputKey: 'chatInput', + chatSessionKey: 'sessionId', + loadPreviousSession: true, + metadata: {}, + showWelcomeScreen: false, + defaultLanguage: 'en', + initialMessages: [ + 'Hi there! 👋', + 'My name is Nathan. How can I assist you today?' + ], + i18n: { + en: { + title: 'Hi there! 👋', + subtitle: "Start a chat. We're here to help you 24/7.", + footer: '', + getStarted: 'New Conversation', + inputPlaceholder: 'Type your question..', + }, + }, + enableStreaming: false, +}); +``` + +### `webhookUrl` +- **Type**: `string` +- **Required**: `true` +- **Examples**: + - `https://yourname.app.n8n.cloud/webhook/513107b3-6f3a-4a1e-af21-659f0ed14183` + - `http://localhost:5678/webhook/513107b3-6f3a-4a1e-af21-659f0ed14183` +- **Description**: The URL of the n8n Webhook endpoint. Should be the production URL. + +### `webhookConfig` +- **Type**: `{ method: string, headers: Record }` +- **Default**: `{ method: 'POST', headers: {} }` +- **Description**: The configuration for the Webhook request. + +### `target` +- **Type**: `string` +- **Default**: `'#n8n-chat'` +- **Description**: The CSS selector of the element where the Chat window should be embedded. + +### `mode` +- **Type**: `'window' | 'fullscreen'` +- **Default**: `'window'` +- **Description**: The render mode of the Chat window. + - In `window` mode, the Chat window will be embedded in the target element as a chat toggle button and a fixed size chat window. + - In `fullscreen` mode, the Chat will take up the entire width and height of its target container. + +### `showWelcomeScreen` +- **Type**: `boolean` +- **Default**: `false` +- **Description**: Whether to show the welcome screen when the Chat window is opened. + +### `chatInputKey` +- **Type**: `string` +- **Default**: `'chatInput'` +- **Description**: The key to use for sending the chat input for the AI Agent node. + +### `chatSessionKey` +- **Type**: `string` +- **Default**: `'sessionId'` +- **Description**: The key to use for sending the chat history session ID for the AI Memory node. + +### `loadPreviousSession` +- **Type**: `boolean` +- **Default**: `true` +- **Description**: Whether to load previous messages (chat context). + +### `defaultLanguage` +- **Type**: `string` +- **Default**: `'en'` +- **Description**: The default language of the Chat window. Currently only `en` is supported. + +### `i18n` +- **Type**: `{ [key: string]: Record }` +- **Description**: The i18n configuration for the Chat window. Currently only `en` is supported. + +### `initialMessages` +- **Type**: `string[]` +- **Description**: The initial messages to be displayed in the Chat window. + +### `allowFileUploads` +- **Type**: `Ref | boolean` +- **Default**: `false` +- **Description**: Whether to allow file uploads in the chat. If set to `true`, users will be able to upload files through the chat interface. + +### `allowedFilesMimeTypes` +- **Type**: `Ref | string` +- **Default**: `''` +- **Description**: A comma-separated list of allowed MIME types for file uploads. Only applicable if `allowFileUploads` is set to `true`. If left empty, all file types are allowed. For example: `'image/*,application/pdf'`. + +### enableStreaming +- Type: boolean +- Default: false +- Description: Whether to enable streaming responses from the n8n workflow. If set to `true`, the chat will display responses as they are being generated, providing a more interactive experience. For this to work the workflow must be configured as well to return streaming responses. + +## Customization +The Chat window is entirely customizable using CSS variables. + +```css +:root { + --chat--color-primary: #e74266; + --chat--color-primary-shade-50: #db4061; + --chat--color-primary-shade-100: #cf3c5c; + --chat--color-secondary: #20b69e; + --chat--color-secondary-shade-50: #1ca08a; + --chat--color-white: #ffffff; + --chat--color-light: #f2f4f8; + --chat--color-light-shade-50: #e6e9f1; + --chat--color-light-shade-100: #c2c5cc; + --chat--color-medium: #d2d4d9; + --chat--color-dark: #101330; + --chat--color-disabled: #777980; + --chat--color-typing: #404040; + + --chat--spacing: 1rem; + --chat--border-radius: 0.25rem; + --chat--transition-duration: 0.15s; + + --chat--window--width: 400px; + --chat--window--height: 600px; + + --chat--header-height: auto; + --chat--header--padding: var(--chat--spacing); + --chat--header--background: var(--chat--color-dark); + --chat--header--color: var(--chat--color-light); + --chat--header--border-top: none; + --chat--header--border-bottom: none; + --chat--header--border-bottom: none; + --chat--header--border-bottom: none; + --chat--heading--font-size: 2em; + --chat--header--color: var(--chat--color-light); + --chat--subtitle--font-size: inherit; + --chat--subtitle--line-height: 1.8; + + --chat--textarea--height: 50px; + + --chat--message--font-size: 1rem; + --chat--message--padding: var(--chat--spacing); + --chat--message--border-radius: var(--chat--border-radius); + --chat--message-line-height: 1.8; + --chat--message--bot--background: var(--chat--color-white); + --chat--message--bot--color: var(--chat--color-dark); + --chat--message--bot--border: none; + --chat--message--user--background: var(--chat--color-secondary); + --chat--message--user--color: var(--chat--color-white); + --chat--message--user--border: none; + --chat--message--pre--background: rgba(0, 0, 0, 0.05); + + --chat--toggle--background: var(--chat--color-primary); + --chat--toggle--hover--background: var(--chat--color-primary-shade-50); + --chat--toggle--active--background: var(--chat--color-primary-shade-100); + --chat--toggle--color: var(--chat--color-white); + --chat--toggle--size: 64px; +} +``` + +## Caveats + +### Fullscreen mode +In fullscreen mode, the Chat window will take up the entire width and height of its target container. Make sure that the container has a set width and height. + +```css +html, +body, +#n8n-chat { + width: 100%; + height: 100%; +} +``` + +## License + +You can find the license information [here](https://github.com/n8n-io/n8n/blob/master/README.md#license) diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/eslint.config 2.mjs new file mode 100755 index 00000000..dea65e1c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/eslint.config 2.mjs @@ -0,0 +1,17 @@ +import { frontendConfig } from '@n8n/eslint-config/frontend'; +import { defineConfig } from 'eslint/config'; + +export default defineConfig(frontendConfig, { + rules: { + // TODO: Remove these + 'no-empty': 'warn', + '@typescript-eslint/require-await': 'warn', + '@typescript-eslint/no-empty-object-type': 'warn', + '@typescript-eslint/naming-convention': 'warn', + '@typescript-eslint/no-unsafe-function-type': 'warn', + '@typescript-eslint/no-unsafe-call': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + }, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/index 2.html b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/index 2.html new file mode 100755 index 00000000..a8885448 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/index 2.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/package 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/package 2.json new file mode 100755 index 00000000..e622a489 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/package 2.json @@ -0,0 +1,68 @@ +{ + "name": "@n8n/chat", + "version": "0.54.0", + "scripts": { + "dev": "pnpm run storybook", + "build": "pnpm build:vite && pnpm build:bundle", + "build:vite": "cross-env vite build", + "build:bundle": "cross-env INCLUDE_VUE=true vite build", + "preview": "vite preview", + "test:dev": "vitest", + "test": "vitest run", + "typecheck": "vue-tsc --noEmit", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "lint:styles": "stylelint \"src/**/*.{scss,sass,vue}\" --cache", + "lint:styles:fix": "stylelint \"src/**/*.{scss,sass,vue}\" --fix --cache", + "format": "biome format --write src .storybook && prettier --write src/ --ignore-path ../../../../.prettierignore", + "format:check": "biome ci src .storybook && prettier --check src/ --ignore-path ../../../../.prettierignore", + "storybook": "storybook dev -p 6006 --no-open", + "build:storybook": "storybook build" + }, + "types": "./dist/index.d.ts", + "main": "./dist/chat.umd.js", + "module": "./dist/chat.es.js", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/chat.es.js", + "require": "./dist/chat.umd.js" + }, + "./style.css": { + "import": "./dist/style.css", + "require": "./dist/style.css" + }, + "./*": { + "import": "./*", + "require": "./*" + } + }, + "dependencies": { + "@n8n/design-system": "workspace:*", + "@vueuse/core": "catalog:frontend", + "highlight.js": "catalog:frontend", + "markdown-it-link-attributes": "^4.0.1", + "uuid": "catalog:", + "vue": "catalog:frontend", + "vue-markdown-render": "catalog:frontend" + }, + "devDependencies": { + "@iconify-json/mdi": "^1.1.54", + "@n8n/storybook": "workspace:*", + "@n8n/eslint-config": "workspace:*", + "@n8n/stylelint-config": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@vitejs/plugin-vue": "catalog:frontend", + "@vitest/coverage-v8": "catalog:", + "unplugin-icons": "^0.19.0", + "vite": "catalog:", + "vitest": "catalog:", + "vite-plugin-dts": "^4.5.3", + "vue-tsc": "catalog:frontend" + }, + "files": [ + "README.md", + "dist" + ] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/stylelint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/stylelint.config 2.mjs new file mode 100755 index 00000000..a86e148c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/stylelint.config 2.mjs @@ -0,0 +1,3 @@ +import { baseConfig } from '@n8n/stylelint-config/base'; + +export default baseConfig; diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/tsconfig 2.json new file mode 100755 index 00000000..ce8d699e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/tsconfig 2.json @@ -0,0 +1,25 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.common.json", + "compilerOptions": { + "rootDir": "src", + "outDir": "dist", + "baseUrl": "src", + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "allowJs": true, + "importHelpers": true, + "incremental": false, + "allowSyntheticDefaultImports": true, + "resolveJsonModule": true, + "types": ["vitest/globals"], + "paths": { + "@n8n/chat/*": ["./*"], + "@n8n/design-system*": ["../../design-system/src*"] + }, + "lib": ["esnext", "dom", "dom.iterable", "scripthost"], + // TODO: remove all options below this line + "useUnknownInCatchVariables": false + }, + "include": ["**/*.ts", "**/*.vue"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/vite.config 2.mts b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/vite.config 2.mts new file mode 100755 index 00000000..26232147 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/chat/vite.config 2.mts @@ -0,0 +1,119 @@ +import { defineConfig, mergeConfig, PluginOption } from 'vite'; +import { resolve } from 'path'; +import { renameSync, writeFileSync, readFileSync } from 'fs'; +import vue from '@vitejs/plugin-vue'; +import icons from 'unplugin-icons/vite'; +import dts from 'vite-plugin-dts'; +import { vitestConfig } from '@n8n/vitest-config/frontend'; +import pkg from './package.json'; +import iconsResolver from 'unplugin-icons/resolver'; +import components from 'unplugin-vue-components/vite'; + +const includeVue = process.env.INCLUDE_VUE === 'true'; +const srcPath = resolve(__dirname, 'src'); +const packagesDir = resolve(__dirname, '..', '..', '..'); + +const banner = `/*! Package version @n8n/chat@${pkg.version} */`; + +// https://vitejs.dev/config/ +export default mergeConfig( + defineConfig({ + plugins: [ + vue(), + icons({ + compiler: 'vue3', + autoInstall: true, + }), + dts(), + components({ + dts: './src/components.d.ts', + resolvers: [ + (componentName) => { + if (componentName.startsWith('N8n')) + return { name: componentName, from: '@n8n/design-system' }; + }, + iconsResolver({ + prefix: 'icon', + }), + ], + }), + { + name: 'rename-css-file', + closeBundle() { + // The chat.css is automatically named based on vite.config.ts library name. + // ChatTrigger Node requires https://cdn.jsdelivr.net/npm/@n8n/chat/dist/style.css + // As such for backwards compatibility, we need to maintain the same name file + const cssPath = resolve(__dirname, 'dist', 'chat.css'); + const newCssPath = resolve(__dirname, 'dist', 'style.css'); + try { + renameSync(cssPath, newCssPath); + } catch (error) { + console.error('Failed to rename chat.css file:', error); + } + }, + }, + { + name: 'inject-build-version', + closeBundle() { + const cssPath = resolve(__dirname, 'dist', 'style.css'); + try { + const cssContent = readFileSync(cssPath, 'utf-8'); + const updatedCssContent = banner + '\n' + cssContent; + writeFileSync(cssPath, updatedCssContent, 'utf-8'); + } catch (error) { + console.error('Failed to inject build version into CSS file:', error); + } + }, + }, + ], + resolve: { + alias: [ + { + find: '@', + replacement: srcPath, + }, + { + find: '@n8n/chat', + replacement: srcPath, + }, + { + find: /^@n8n\/chat(.+)$/, + replacement: srcPath + '$1', + }, + { + find: /^@n8n\/design-system(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'design-system', 'src$1'), + }, + ], + }, + define: { + 'process.env.NODE_ENV': process.env.NODE_ENV ? `"${process.env.NODE_ENV}"` : '"development"', + }, + build: { + emptyOutDir: !includeVue, + lib: { + entry: resolve(__dirname, 'src', 'index.ts'), + name: 'N8nChat', + fileName: (format) => (includeVue ? `chat.bundle.${format}.js` : `chat.${format}.js`), + }, + rollupOptions: { + // make sure to externalize deps that shouldn't be bundled + // into your library + external: includeVue ? [] : ['vue'], + output: { + exports: 'named', + // inject banner on top of all JS files + banner, + // Provide global variables to use in the UMD build + // for externalized deps + globals: includeVue + ? {} + : { + vue: 'Vue', + }, + }, + }, + }, + }), + vitestConfig, +); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/.gitignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/.gitignore 2 new file mode 100755 index 00000000..a547bf36 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/.gitignore 2 @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/README 2.md b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/README 2.md new file mode 100755 index 00000000..6f97856b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/README 2.md @@ -0,0 +1,24 @@ +# @n8n/composables + +A collection of Vue composables that provide common functionality across n8n's Front-End packages. + +## Table of Contents + +- [Features](#features) +- [Contributing](#contributing) +- [License](#license) + +## Features + +- **Reusable Logic**: Encapsulate complex stateful logic into composable functions. +- **Consistency**: Ensure consistent patterns and practices across our Vue components. +- **Extensible**: Easily add new composables as our project grows. +- **Optimized**: Fully compatible with the Composition API. + +## Contributing + +For more details, please read our [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +For more details, please read our [LICENSE.md](LICENSE.md). diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/biome 2.jsonc b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/biome 2.jsonc new file mode 100755 index 00000000..f882da95 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/biome 2.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "../../../../node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../../../biome.jsonc"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/eslint.config 2.mjs new file mode 100755 index 00000000..1c110cea --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/eslint.config 2.mjs @@ -0,0 +1,7 @@ +import { defineConfig } from 'eslint/config'; +import { frontendConfig } from '@n8n/eslint-config/frontend'; + +export default defineConfig(frontendConfig, { + files: ['**/*.test.ts'], + rules: { '@typescript-eslint/no-unsafe-assignment': 'warn' }, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/package 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/package 2.json new file mode 100755 index 00000000..0dfb429d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/package 2.json @@ -0,0 +1,49 @@ +{ + "name": "@n8n/composables", + "type": "module", + "version": "1.9.0", + "files": [ + "dist" + ], + "exports": { + "./*": { + "types": "./dist/*.d.ts", + "import": "./dist/*.js", + "require": "./dist/*.cjs" + } + }, + "scripts": { + "dev": "vite", + "build": "tsup", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit", + "test": "vitest run", + "test:dev": "vitest --silent=false", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "format": "biome format --write . && prettier --write . --ignore-path ../../../../.prettierignore", + "format:check": "biome ci . && prettier --check . --ignore-path ../../../../.prettierignore" + }, + "devDependencies": { + "@n8n/eslint-config": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@testing-library/jest-dom": "catalog:frontend", + "@testing-library/user-event": "catalog:frontend", + "@testing-library/vue": "catalog:frontend", + "@vitejs/plugin-vue": "catalog:frontend", + "@vue/tsconfig": "catalog:frontend", + "@vueuse/core": "catalog:frontend", + "vue": "catalog:frontend", + "tsup": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + "vitest": "catalog:", + "vue-tsc": "catalog:frontend" + }, + "peerDependencies": { + "@vueuse/core": "catalog:frontend", + "vue": "catalog:frontend" + }, + "license": "See LICENSE.md file in the root of the repository" +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/tsconfig 2.json new file mode 100755 index 00000000..10f9ee1b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/tsconfig 2.json @@ -0,0 +1,11 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.frontend.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "outDir": "dist", + "types": ["vite/client", "vitest/globals"], + "isolatedModules": true + }, + "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts", "tsup.config.ts"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/tsup.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/tsup.config 2.ts new file mode 100755 index 00000000..bff21e25 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/tsup.config 2.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/**/*.ts', '!src/**/*.test.ts', '!src/**/*.d.ts', '!src/__tests__/**/*'], + format: ['cjs', 'esm'], + clean: true, + dts: true, + cjsInterop: true, + splitting: true, + sourcemap: true, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/vite.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/vite.config 2.ts new file mode 100755 index 00000000..784f3fb4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/composables/vite.config 2.ts @@ -0,0 +1,4 @@ +import { defineConfig, mergeConfig } from 'vite'; +import { vitestConfig } from '@n8n/vitest-config/frontend'; + +export default mergeConfig(defineConfig({}), vitestConfig); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.browserslistrc 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.browserslistrc 2 new file mode 100755 index 00000000..9dee6464 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.browserslistrc 2 @@ -0,0 +1,3 @@ +> 1% +last 2 versions +not ie <= 8 diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.gitignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.gitignore 2 new file mode 100755 index 00000000..6175c340 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.gitignore 2 @@ -0,0 +1,5 @@ +storybook-static +**/*.stories.js + +# Auto-generated +src/components.d.ts diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.npmignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.npmignore 2 new file mode 100755 index 00000000..6058e08e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/.npmignore 2 @@ -0,0 +1,13 @@ +/src/**/*.{ts,vue,scss,snap} +/theme/src +!dist + +storybook-static +.storybook + +.browserslistrc +jest.config.js +vite.config.ts + +*.md +*.stories.js diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/README 2.md b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/README 2.md new file mode 100755 index 00000000..03b49fd4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/README 2.md @@ -0,0 +1,51 @@ +![n8n.io - Workflow Automation](https://user-images.githubusercontent.com/65276001/173571060-9f2f6d7b-bac0-43b6-bdb2-001da9694058.png) + +# @n8n/design-system + +A component system for [n8n](https://n8n.io) using Storybook to preview. + +## Project setup + +``` +pnpm install +``` + +### Compiles and hot-reloads for development + +``` +pnpm storybook +``` + +### Build static pages + +``` +pnpm build:storybook +``` + +### Run your unit tests + +``` +pnpm test:unit +``` + +### Lints and fixes files + +``` +pnpm lint +``` + +### Build css files + +``` +pnpm build:theme +``` + +### Monitor theme files and build any changes + +``` +pnpm watch:theme +``` + +## License + +You can find the license information [here](https://github.com/n8n-io/n8n/blob/master/README.md#license) diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/biome 2.jsonc b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/biome 2.jsonc new file mode 100755 index 00000000..10254c3c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/biome 2.jsonc @@ -0,0 +1,7 @@ +{ + "$schema": "../../../../node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../../../biome.jsonc"], + "formatter": { + "ignore": ["theme/**"] + } +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/chromatic.config 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/chromatic.config 2.json new file mode 100755 index 00000000..c37fc042 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/chromatic.config 2.json @@ -0,0 +1,4 @@ +{ + "projectId": "Project:65f085d72c13e4e1154414db", + "buildScriptName": "build:storybook" +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/eslint.config 2.mjs new file mode 100755 index 00000000..14e2f8fa --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/eslint.config 2.mjs @@ -0,0 +1,52 @@ +import { defineConfig } from 'eslint/config'; +import { frontendConfig } from '@n8n/eslint-config/frontend'; + +export default defineConfig( + frontendConfig, + { + rules: { + 'vue/no-undef-components': 'error', + + // TODO: Remove these + 'import-x/no-default-export': 'warn', + 'no-empty': 'warn', + 'no-prototype-builtins': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/prefer-optional-chain': 'warn', + '@typescript-eslint/prefer-nullish-coalescing': 'warn', + '@typescript-eslint/require-await': 'warn', + '@typescript-eslint/naming-convention': 'warn', + '@typescript-eslint/no-empty-object-type': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + '@typescript-eslint/unbound-method': 'warn', + '@typescript-eslint/restrict-template-expressions': 'warn', + '@typescript-eslint/no-unsafe-call': 'warn', + }, + }, + { + files: ['src/**/*.stories.ts', 'src/**/*.vue', 'src/**/*.spec.ts'], + rules: { + '@typescript-eslint/naming-convention': [ + 'warn', + { + selector: ['variable', 'property'], + format: ['PascalCase', 'camelCase', 'UPPER_CASE'], + }, + ], + }, + }, + { + files: ['src/components/N8nFormInput/validators.ts'], + rules: { + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: ['property'], + format: ['camelCase', 'UPPER_CASE'], + }, + ], + }, + }, +); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/package 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/package 2.json new file mode 100755 index 00000000..4ab2143a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/package 2.json @@ -0,0 +1,77 @@ +{ + "type": "module", + "name": "@n8n/design-system", + "version": "1.96.0", + "main": "src/index.ts", + "import": "src/index.ts", + "scripts": { + "dev": "pnpm run storybook", + "clean": "rimraf dist .turbo", + "build": "vite build", + "typecheck": "vue-tsc --noEmit", + "typecheck:watch": "vue-tsc --watch --noEmit", + "test": "vitest run", + "test:dev": "vitest", + "build:storybook": "storybook build", + "storybook": "storybook dev -p 6006 --no-open", + "chromatic": "chromatic", + "format": "biome format --write . && prettier --write . --ignore-path ../../../../.prettierignore", + "format:check": "biome ci . && prettier --check . --ignore-path ../../../../.prettierignore", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "lint:styles": "stylelint \"src/**/*.{scss,sass,vue}\" --cache", + "lint:styles:fix": "stylelint \"src/**/*.{scss,sass,vue}\" --fix --cache" + }, + "devDependencies": { + "@n8n/eslint-config": "workspace:*", + "@n8n/storybook": "workspace:*", + "@n8n/stylelint-config": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@testing-library/jest-dom": "catalog:frontend", + "@testing-library/user-event": "catalog:frontend", + "@testing-library/vue": "catalog:frontend", + "@types/lodash": "catalog:", + "@types/markdown-it": "^13.0.9", + "@types/markdown-it-emoji": "^2.0.2", + "@types/markdown-it-link-attributes": "^3.0.5", + "@types/sanitize-html": "^2.11.0", + "@vitejs/plugin-vue": "catalog:frontend", + "@vitest/coverage-v8": "catalog:", + "autoprefixer": "^10.4.19", + "postcss": "^8.4.38", + "sass": "^1.71.1", + "tailwindcss": "^3.4.3", + "unplugin-icons": "catalog:frontend", + "unplugin-vue-components": "catalog:frontend", + "vite": "catalog:", + "vitest": "catalog:", + "vitest-mock-extended": "catalog:", + "vue-tsc": "catalog:frontend" + }, + "dependencies": { + "@fortawesome/fontawesome-svg-core": "^1.2.36", + "@fortawesome/free-solid-svg-icons": "^5.15.4", + "@fortawesome/vue-fontawesome": "^3.0.3", + "@n8n/composables": "workspace:*", + "@n8n/utils": "workspace:*", + "@tanstack/vue-table": "^8.21.2", + "element-plus": "catalog:frontend", + "is-emoji-supported": "^0.0.5", + "lodash": "catalog:", + "markdown-it": "^13.0.2", + "markdown-it-emoji": "^2.0.2", + "markdown-it-link-attributes": "^4.0.1", + "markdown-it-task-lists": "^2.1.1", + "parse-diff": "^0.11.1", + "reka-ui": "^2.2.1", + "sanitize-html": "2.12.1", + "vue": "catalog:frontend", + "vue-boring-avatars": "^1.3.0", + "vue-router": "catalog:frontend", + "xss": "catalog:" + }, + "peerDependencies": { + "@vueuse/core": "*" + } +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/postcss.config 2.cjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/postcss.config 2.cjs new file mode 100755 index 00000000..34e057ba --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/postcss.config 2.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + // tailwindcss: {}, + autoprefixer: {}, + }, +}; diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/stylelint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/stylelint.config 2.mjs new file mode 100755 index 00000000..a86e148c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/stylelint.config 2.mjs @@ -0,0 +1,3 @@ +import { baseConfig } from '@n8n/stylelint-config/base'; + +export default baseConfig; diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/tailwind.config 2.js b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/tailwind.config 2.js new file mode 100755 index 00000000..ea86f821 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/tailwind.config 2.js @@ -0,0 +1,8 @@ +module.exports = { + content: ['./src/**/*.{vue,js,ts}'], + darkMode: ['selector', '[data-theme="dark"]'], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/tsconfig 2.json new file mode 100755 index 00000000..95d580f3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/tsconfig 2.json @@ -0,0 +1,21 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.frontend.json", + "compilerOptions": { + "baseUrl": ".", + "rootDirs": [".", "../composables/src"], + "outDir": "dist", + "types": ["vite/client", "unplugin-icons/types/vue", "vitest/globals"], + "typeRoots": [ + "./node_modules/@testing-library", + "./node_modules/@types", + "../../../../node_modules", + "../../../../node_modules/@types" + ], + "paths": { + "@n8n/design-system*": ["./src*"], + "@n8n/composables*": ["../composables/src*"], + "@n8n/utils*": ["../../../@n8n/utils/src*"] + } + }, + "include": ["src/**/*.ts", "src/**/*.vue"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/vite.config 2.mts b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/vite.config 2.mts new file mode 100755 index 00000000..9f8095cb --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/design-system/vite.config 2.mts @@ -0,0 +1,77 @@ +import vue from '@vitejs/plugin-vue'; +import { resolve } from 'path'; +import { defineConfig, mergeConfig } from 'vite'; +import components from 'unplugin-vue-components/vite'; +import icons from 'unplugin-icons/vite'; +import iconsResolver from 'unplugin-icons/resolver'; +import { vitestConfig } from '@n8n/vitest-config/frontend'; +import svgLoader from 'vite-svg-loader'; + +const packagesDir = resolve(__dirname, '..', '..', '..'); + +export default mergeConfig( + defineConfig({ + plugins: [ + vue(), + svgLoader({ + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + // disable a default plugin + cleanupIds: false, + // preserve viewBox for scalability + removeViewBox: false, + }, + }, + }, + ], + }, + }), + icons({ + compiler: 'vue3', + autoInstall: true, + }), + components({ + dirs: [], + dts: false, + resolvers: [ + iconsResolver({ + prefix: 'Icon', + }), + ], + }), + ], + resolve: { + alias: { + '@': resolve(__dirname, 'src'), + '@n8n/design-system': resolve(__dirname, 'src'), + '@n8n/composables(.*)': resolve(packagesDir, 'frontend', '@n8n', 'composables', 'src$1'), + '@n8n/utils(.*)': resolve(packagesDir, '@n8n', 'utils', 'src$1'), + }, + }, + build: { + lib: { + entry: resolve(__dirname, 'src', 'index.ts'), + name: 'N8nDesignSystem', + fileName: (format) => `n8n-design-system.${format}.js`, + }, + rollupOptions: { + // make sure to externalize deps that shouldn't be bundled + // into your library + external: ['vue'], + output: { + exports: 'named', + // Provide global variables to use in the UMD build + // for externalized deps + globals: { + vue: 'Vue', + }, + }, + }, + }, + }), + vitestConfig, +); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/.gitignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/.gitignore 2 new file mode 100755 index 00000000..a547bf36 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/.gitignore 2 @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/README 2.md b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/README 2.md new file mode 100755 index 00000000..7b0020ca --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/README 2.md @@ -0,0 +1,27 @@ +# @n8n/i18n + +A package for managing internationalization (i18n) in n8n's Frontend codebase. It provides a structured way to handle translations and localization, ensuring that the application can be easily adapted to different languages and regions. + +## Table of Contents + +- [Features](#features) +- [Contributing](#contributing) +- [License](#license) + +## Features + +- **Translation Management**: Simplifies the process of managing translations for different languages. +- **Localization Support**: Provides tools to adapt the application for different regions and cultures. +- **Easy Integration**: Seamlessly integrates with n8n's Frontend codebase, making it easy to implement and use. +- **Reusable Base Text**: Allows for the definition of reusable base text strings, reducing redundancy in translations. +- **Pluralization and Interpolation**: Supports pluralization and interpolation in base text strings, making it flexible for various use cases. +- **Versioned Nodes Support**: Facilitates the management of translations for nodes in versioned directories, ensuring consistency across different versions. +- **Documentation**: Comprehensive documentation to help developers understand and utilize the package effectively. + +## Contributing + +For more details, please read our [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +For more details, please read our [LICENSE.md](LICENSE.md). diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/biome 2.jsonc b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/biome 2.jsonc new file mode 100755 index 00000000..f882da95 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/biome 2.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "../../../../node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../../../biome.jsonc"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/eslint.config 2.mjs new file mode 100755 index 00000000..e122904a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/eslint.config 2.mjs @@ -0,0 +1,13 @@ +import { defineConfig } from 'eslint/config'; +import { frontendConfig } from '@n8n/eslint-config/frontend'; + +export default defineConfig(frontendConfig, { + rules: { + // TODO: Remove this + '@typescript-eslint/require-await': 'warn', + '@typescript-eslint/no-unnecessary-type-assertion': 'warn', + '@typescript-eslint/naming-convention': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + }, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/package 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/package 2.json new file mode 100755 index 00000000..fca15ada --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/package 2.json @@ -0,0 +1,60 @@ +{ + "name": "@n8n/i18n", + "type": "module", + "version": "1.13.1", + "files": [ + "dist" + ], + "main": "dist/index.cjs", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./*": { + "types": "./dist/*.d.ts", + "import": "./dist/*.js", + "require": "./dist/*.cjs" + } + }, + "scripts": { + "dev": "vite", + "build": "tsup", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit", + "test": "vitest run", + "test:dev": "vitest --silent=false", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "format": "biome format --write . && prettier --write . --ignore-path ../../../../.prettierignore", + "format:check": "biome ci . && prettier --check . --ignore-path ../../../../.prettierignore" + }, + "dependencies": { + "n8n-workflow": "workspace:*", + "vue-i18n": "catalog:frontend" + }, + "devDependencies": { + "@n8n/eslint-config": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@testing-library/jest-dom": "catalog:frontend", + "@testing-library/user-event": "catalog:frontend", + "@testing-library/vue": "catalog:frontend", + "@vitejs/plugin-vue": "catalog:frontend", + "@vue/tsconfig": "catalog:frontend", + "@vueuse/core": "catalog:frontend", + "vue": "catalog:frontend", + "tsup": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + "vitest": "catalog:", + "vue-tsc": "catalog:frontend" + }, + "peerDependencies": { + "vue": "catalog:frontend" + }, + "license": "See LICENSE.md file in the root of the repository" +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/tsconfig 2.json new file mode 100755 index 00000000..63e10d01 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/tsconfig 2.json @@ -0,0 +1,12 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.frontend.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "outDir": "dist", + "types": ["vite/client", "vitest/globals"], + "isolatedModules": true, + "resolveJsonModule": true + }, + "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts", "tsup.config.ts"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/tsup.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/tsup.config 2.ts new file mode 100755 index 00000000..bff21e25 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/tsup.config 2.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/**/*.ts', '!src/**/*.test.ts', '!src/**/*.d.ts', '!src/__tests__/**/*'], + format: ['cjs', 'esm'], + clean: true, + dts: true, + cjsInterop: true, + splitting: true, + sourcemap: true, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/vite.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/vite.config 2.ts new file mode 100755 index 00000000..784f3fb4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/i18n/vite.config 2.ts @@ -0,0 +1,4 @@ +import { defineConfig, mergeConfig } from 'vite'; +import { vitestConfig } from '@n8n/vitest-config/frontend'; + +export default mergeConfig(defineConfig({}), vitestConfig); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/.gitignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/.gitignore 2 new file mode 100755 index 00000000..a547bf36 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/.gitignore 2 @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/README 2.md b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/README 2.md new file mode 100755 index 00000000..5675f442 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/README 2.md @@ -0,0 +1,22 @@ +# @n8n/rest-api-client + +This package contains the REST API calls for n8n. + +## Table of Contents + +- [Features](#features) +- [Contributing](#contributing) +- [License](#license) + +## Features + +- Provides a REST API for n8n +- Supports authentication and authorization + +## Contributing + +For more details, please read our [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +For more details, please read our [LICENSE.md](LICENSE.md). diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/biome 2.jsonc b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/biome 2.jsonc new file mode 100755 index 00000000..f882da95 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/biome 2.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "../../../../node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../../../biome.jsonc"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/eslint.config 2.mjs new file mode 100755 index 00000000..3dbca209 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/eslint.config 2.mjs @@ -0,0 +1,15 @@ +import { defineConfig } from 'eslint/config'; +import { frontendConfig } from '@n8n/eslint-config/frontend'; + +export default defineConfig(frontendConfig, { + rules: { + // TODO: Remove these + '@typescript-eslint/naming-convention': 'warn', + '@typescript-eslint/no-empty-object-type': 'warn', + '@typescript-eslint/prefer-nullish-coalescing': 'warn', + '@typescript-eslint/no-unsafe-member-access': 'warn', + '@typescript-eslint/no-unsafe-return': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + '@typescript-eslint/no-unsafe-argument': 'warn', + }, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/package 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/package 2.json new file mode 100755 index 00000000..3e234c7e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/package 2.json @@ -0,0 +1,58 @@ +{ + "name": "@n8n/rest-api-client", + "type": "module", + "version": "1.12.0", + "files": [ + "dist" + ], + "main": "./dist/index.cjs", + "module": "./dist/index.js", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./*": { + "types": "./dist/*.d.ts", + "import": "./dist/*.js", + "require": "./dist/*.cjs" + } + }, + "scripts": { + "dev": "vite", + "build": "tsup", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit", + "test": "vitest run", + "test:dev": "vitest --silent=false", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "format": "biome format --write . && prettier --write . --ignore-path ../../../../.prettierignore", + "format:check": "biome ci . && prettier --check . --ignore-path ../../../../.prettierignore" + }, + "dependencies": { + "@n8n/api-types": "workspace:*", + "@n8n/constants": "workspace:*", + "@n8n/permissions": "workspace:*", + "@n8n/utils": "workspace:*", + "js-base64": "catalog:", + "n8n-workflow": "workspace:*", + "axios": "catalog:", + "flatted": "catalog:" + }, + "devDependencies": { + "@n8n/eslint-config": "workspace:*", + "@n8n/i18n": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@testing-library/jest-dom": "catalog:frontend", + "@testing-library/user-event": "catalog:frontend", + "tsup": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + "vitest": "catalog:" + }, + "license": "See LICENSE.md file in the root of the repository" +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/tsconfig 2.json new file mode 100755 index 00000000..e51e3733 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/tsconfig 2.json @@ -0,0 +1,14 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.frontend.json", + "compilerOptions": { + "baseUrl": ".", + "outDir": "dist", + "useUnknownInCatchVariables": false, + "types": ["vite/client", "vitest/globals"], + "isolatedModules": true, + "paths": { + "@n8n/utils/*": ["../../../@n8n/utils/src/*"] + } + }, + "include": ["src/**/*.ts", "vite.config.ts", "tsup.config.ts"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/tsup.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/tsup.config 2.ts new file mode 100755 index 00000000..bff21e25 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/tsup.config 2.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/**/*.ts', '!src/**/*.test.ts', '!src/**/*.d.ts', '!src/__tests__/**/*'], + format: ['cjs', 'esm'], + clean: true, + dts: true, + cjsInterop: true, + splitting: true, + sourcemap: true, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/vite.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/vite.config 2.ts new file mode 100755 index 00000000..27fe3737 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/rest-api-client/vite.config 2.ts @@ -0,0 +1,4 @@ +import { defineConfig, mergeConfig } from 'vite'; +import { createVitestConfig } from '@n8n/vitest-config/frontend'; + +export default mergeConfig(defineConfig({}), createVitestConfig({ setupFiles: [] })); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/.gitignore 2 b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/.gitignore 2 new file mode 100755 index 00000000..a547bf36 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/.gitignore 2 @@ -0,0 +1,24 @@ +# Logs +logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* +lerna-debug.log* + +node_modules +dist +dist-ssr +*.local + +# Editor directories and files +.vscode/* +!.vscode/extensions.json +.idea +.DS_Store +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw? diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/README 2.md b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/README 2.md new file mode 100755 index 00000000..cb3e742e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/README 2.md @@ -0,0 +1,24 @@ +# @n8n/stores + +A collection of Pinia stores that provide common data-related functionality across n8n's Front-End packages. + +## Table of Contents + +- [Features](#features) +- [Contributing](#contributing) +- [License](#license) + +## Features + +- **Composable State Management**: Share and reuse stateful logic across multiple Vue components using Pinia stores. +- **Consistent Patterns**: Promote uniform state handling and best practices throughout the front-end codebase. +- **Easy Extensibility**: Add or modify stores as project requirements evolve, supporting scalable development. +- **Composition API Support**: Designed to work seamlessly with Vue's Composition API for modern, maintainable code. + +## Contributing + +For more details, please read our [CONTRIBUTING.md](CONTRIBUTING.md). + +## License + +For more details, please read our [LICENSE.md](LICENSE.md). diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/biome 2.jsonc b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/biome 2.jsonc new file mode 100755 index 00000000..f882da95 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/biome 2.jsonc @@ -0,0 +1,4 @@ +{ + "$schema": "../../../../node_modules/@biomejs/biome/configuration_schema.json", + "extends": ["../../../../biome.jsonc"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/eslint.config 2.mjs new file mode 100755 index 00000000..6b82c1af --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/eslint.config 2.mjs @@ -0,0 +1,11 @@ +import { defineConfig } from 'eslint/config'; +import { frontendConfig } from '@n8n/eslint-config/frontend'; + +export default defineConfig(frontendConfig, { + rules: { + //TODO: Remove these + '@typescript-eslint/naming-convention': 'warn', + '@typescript-eslint/no-unnecessary-type-assertion': 'warn', + '@typescript-eslint/no-unsafe-assignment': 'warn', + }, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/package 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/package 2.json new file mode 100755 index 00000000..5eaefba4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/package 2.json @@ -0,0 +1,62 @@ +{ + "name": "@n8n/stores", + "type": "module", + "version": "1.16.0", + "files": [ + "dist" + ], + "main": "dist/index.cjs", + "module": "dist/index.js", + "types": "dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, + "./*": { + "types": "./dist/*.d.ts", + "import": "./dist/*.js", + "require": "./dist/*.cjs" + } + }, + "scripts": { + "dev": "vite", + "build": "tsup", + "preview": "vite preview", + "typecheck": "vue-tsc --noEmit", + "test": "vitest run", + "test:dev": "vitest --silent=false", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "format": "biome format --write . && prettier --write . --ignore-path ../../../../.prettierignore", + "format:check": "biome ci . && prettier --check . --ignore-path ../../../../.prettierignore" + }, + "dependencies": { + "n8n-workflow": "workspace:*" + }, + "devDependencies": { + "@n8n/eslint-config": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@testing-library/jest-dom": "catalog:frontend", + "@testing-library/user-event": "catalog:frontend", + "@testing-library/vue": "catalog:frontend", + "@vitejs/plugin-vue": "catalog:frontend", + "@vue/tsconfig": "catalog:frontend", + "@vueuse/core": "catalog:frontend", + "pinia": "catalog:frontend", + "vue": "catalog:frontend", + "tsup": "catalog:", + "typescript": "catalog:", + "vite": "catalog:", + "vitest": "catalog:", + "vue-tsc": "catalog:frontend" + }, + "peerDependencies": { + "@vueuse/core": "catalog:frontend", + "pinia": "catalog:frontend", + "vue": "catalog:frontend" + }, + "license": "See LICENSE.md file in the root of the repository" +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/tsconfig 2.json new file mode 100755 index 00000000..10f9ee1b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/tsconfig 2.json @@ -0,0 +1,11 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.frontend.json", + "compilerOptions": { + "baseUrl": ".", + "rootDir": ".", + "outDir": "dist", + "types": ["vite/client", "vitest/globals"], + "isolatedModules": true + }, + "include": ["src/**/*.ts", "src/**/*.vue", "vite.config.ts", "tsup.config.ts"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/tsup.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/tsup.config 2.ts new file mode 100755 index 00000000..bff21e25 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/tsup.config 2.ts @@ -0,0 +1,11 @@ +import { defineConfig } from 'tsup'; + +export default defineConfig({ + entry: ['src/**/*.ts', '!src/**/*.test.ts', '!src/**/*.d.ts', '!src/__tests__/**/*'], + format: ['cjs', 'esm'], + clean: true, + dts: true, + cjsInterop: true, + splitting: true, + sourcemap: true, +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/vite.config 2.ts b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/vite.config 2.ts new file mode 100755 index 00000000..784f3fb4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/@n8n/stores/vite.config 2.ts @@ -0,0 +1,4 @@ +import { defineConfig, mergeConfig } from 'vite'; +import { vitestConfig } from '@n8n/vitest-config/frontend'; + +export default mergeConfig(defineConfig({}), vitestConfig); diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/public/favicon 2.ico b/n8n-n8n-1.109.2/packages/frontend/editor-ui/public/favicon 2.ico new file mode 100755 index 00000000..e5f92d7f Binary files /dev/null and b/n8n-n8n-1.109.2/packages/frontend/editor-ui/public/favicon 2.ico differ diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/App 2.vue b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/App 2.vue new file mode 100755 index 00000000..032ec079 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/App 2.vue @@ -0,0 +1,227 @@ + + + + + diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/Interface 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/Interface 2.ts new file mode 100755 index 00000000..c1c9e8ce --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/Interface 2.ts @@ -0,0 +1,1313 @@ +import type { Component } from 'vue'; +import type { NotificationOptions as ElementNotificationOptions } from 'element-plus'; +import type { + BannerName, + FrontendSettings, + Iso8601DateTimeString, + IUserManagementSettings, + IVersionNotificationSettings, + ROLE, + Role, +} from '@n8n/api-types'; +import type { Scope } from '@n8n/permissions'; +import type { NodeCreatorTag } from '@n8n/design-system'; +import type { + GenericValue, + IConnections, + ICredentialsDecrypted, + ICredentialsEncrypted, + ICredentialType, + IDataObject, + INode, + INodeIssues, + INodeParameters, + INodeTypeDescription, + IPinData, + IRunExecutionData, + IRunData, + IWorkflowSettings as IWorkflowSettingsWorkflow, + WorkflowExecuteMode, + PublicInstalledPackage, + INodeListSearchItems, + NodeParameterValueType, + IDisplayOptions, + ExecutionSummary, + FeatureFlags, + ExecutionStatus, + ITelemetryTrackProperties, + WorkflowSettings, + INodeExecutionData, + INodeProperties, + NodeConnectionType, + StartNodeData, + AnnotationVote, + ITaskData, + ISourceData, +} from 'n8n-workflow'; +import type { Version } from '@n8n/rest-api-client/api/versions'; +import type { Cloud, InstanceUsage } from '@n8n/rest-api-client/api/cloudPlans'; +import type { + WorkflowMetadata, + WorkflowData, + WorkflowDataCreate, + WorkflowDataUpdate, +} from '@n8n/rest-api-client/api/workflows'; +import type { ITag } from '@n8n/rest-api-client/api/tags'; + +import type { + AI_NODE_CREATOR_VIEW, + CREDENTIAL_EDIT_MODAL_KEY, + TRIGGER_NODE_CREATOR_VIEW, + REGULAR_NODE_CREATOR_VIEW, + AI_OTHERS_NODE_CREATOR_VIEW, + AI_UNCATEGORIZED_CATEGORY, + AI_EVALUATION, +} from '@/constants'; +import type { BulkCommand, Undoable } from '@/models/history'; + +import type { ProjectSharingData } from '@/types/projects.types'; +import type { PathItem } from '@n8n/design-system/components/N8nBreadcrumbs/Breadcrumbs.vue'; +import type { IconName } from '@n8n/design-system/src/components/N8nIcon/icons'; +import type { IUser, IUserResponse } from '@n8n/rest-api-client/api/users'; + +export * from '@n8n/design-system/types'; + +declare global { + interface Window { + posthog?: { + init( + key: string, + options?: { + api_host?: string; + autocapture?: boolean; + disable_session_recording?: boolean; + debug?: boolean; + bootstrap?: { + distinctId?: string; + isIdentifiedID?: boolean; + featureFlags: FeatureFlags; + }; + session_recording?: { + maskAllInputs?: boolean; + maskInputFn?: ((text: string, element?: HTMLElement) => string) | null; + }; + }, + ): void; + isFeatureEnabled?(flagName: string): boolean; + getFeatureFlag?(flagName: string): boolean | string; + identify?( + id: string, + userProperties?: Record, + userPropertiesOnce?: Record, + ): void; + reset?(resetDeviceId?: boolean): void; + onFeatureFlags?(callback: (keys: string[], map: FeatureFlags) => void): void; + reloadFeatureFlags?(): void; + capture?(event: string, properties: IDataObject): void; + register?(metadata: IDataObject): void; + people?: { + set?(metadata: IDataObject): void; + }; + debug?(): void; + get_session_id?(): string | null; + }; + analytics?: { + identify(userId: string): void; + track(event: string, properties?: ITelemetryTrackProperties): void; + page(category: string, name: string, properties?: ITelemetryTrackProperties): void; + }; + featureFlags?: { + getAll: () => FeatureFlags; + getVariant: (name: string) => string | boolean | undefined; + override: (name: string, value: string) => void; + }; + Cypress: unknown; + } +} + +export type EndpointStyle = { + width?: number; + height?: number; + fill?: string; + stroke?: string; + outlineStroke?: string; + lineWidth?: number; + hover?: boolean; + showOutputLabel?: boolean; + size?: string; + hoverMessage?: string; +}; + +export interface IUpdateInformation { + name: string; + key?: string; + value: T; + node?: string; + oldValue?: string | number; + type?: 'optionsOrderChanged'; +} + +export interface INodeUpdatePropertiesInformation { + name: string; // Node-Name + properties: Partial; +} + +export type XYPosition = [number, number]; + +export type DraggableMode = 'mapping' | 'panel-resize' | 'move'; + +export interface INodeUi extends INode { + position: XYPosition; + color?: string; + notes?: string; + issues?: INodeIssues; + name: string; + pinData?: IDataObject; + draggable?: boolean; +} + +export interface INodeTypesMaxCount { + [key: string]: { + exist: number; + max: number; + nodeNames: string[]; + }; +} + +export interface IAiDataContent { + data: INodeExecutionData[] | null; + inOut: 'input' | 'output'; + type: NodeConnectionType; + source?: Array; + metadata: { + executionTime: number; + startTime: number; + subExecution?: { + workflowId: string; + executionId: string; + }; + }; +} + +export interface IAiData { + data: IAiDataContent[]; + node: string; + runIndex: number; +} + +export interface IStartRunData { + workflowData: WorkflowData; + startNodes?: StartNodeData[]; + destinationNode?: string; + runData?: IRunData; + dirtyNodeNames?: string[]; + triggerToStartFrom?: { + name: string; + data?: ITaskData; + }; + agentRequest?: { + query: NodeParameterValueType; + tool: { + name: NodeParameterValueType; + }; + }; +} + +export interface ITableData { + columns: string[]; + data: GenericValue[][]; + hasJson: { [key: string]: boolean }; + metadata: { + hasExecutionIds: boolean; + data: Array; + }; +} + +/** + * Workflow data with mandatory `templateId` + * This is used to identify sample workflows that we create for onboarding + */ +export interface WorkflowDataWithTemplateId extends Omit { + meta: WorkflowMetadata & { + templateId: Required['templateId']; + }; +} + +export interface IWorkflowToShare extends WorkflowDataUpdate { + meta: WorkflowMetadata; +} + +export interface NewWorkflowResponse { + name: string; + defaultSettings: IWorkflowSettings; +} + +export interface INewWorkflowData { + name: string; +} + +// Almost identical to cli.Interfaces.ts +export interface IWorkflowDb { + id: string; + name: string; + active: boolean; + isArchived: boolean; + createdAt: number | string; + updatedAt: number | string; + nodes: INodeUi[]; + connections: IConnections; + settings?: IWorkflowSettings; + tags?: ITag[] | string[]; // string[] when store or requested, ITag[] from API response + pinData?: IPinData; + sharedWithProjects?: ProjectSharingData[]; + homeProject?: ProjectSharingData; + scopes?: Scope[]; + versionId: string; + usedCredentials?: IUsedCredential[]; + meta?: WorkflowMetadata; + parentFolder?: { + id: string; + name: string; + parentFolderId: string | null; + createdAt?: string; + updatedAt?: string; + }; +} + +// For workflow list we don't need the full workflow data +export type BaseResource = { + id: string; + name: string; +}; + +export type FolderResource = BaseFolderItem & { + resourceType: 'folder'; +}; + +export type WorkflowResource = BaseResource & { + resourceType: 'workflow'; + updatedAt: string; + createdAt: string; + active: boolean; + isArchived: boolean; + homeProject?: ProjectSharingData; + scopes?: Scope[]; + tags?: ITag[] | string[]; + sharedWithProjects?: ProjectSharingData[]; + readOnly: boolean; + parentFolder?: ResourceParentFolder; +}; + +export type VariableResource = BaseResource & { + resourceType: 'variable'; + key?: string; + value?: string; +}; + +export type CredentialsResource = BaseResource & { + resourceType: 'credential'; + updatedAt: string; + createdAt: string; + type: string; + homeProject?: ProjectSharingData; + scopes?: Scope[]; + sharedWithProjects?: ProjectSharingData[]; + readOnly: boolean; + needsSetup: boolean; +}; + +// Base resource types that are always available +export type CoreResource = + | WorkflowResource + | FolderResource + | CredentialsResource + | VariableResource; + +// This interface can be extended by modules to add their own resource types +// eslint-disable-next-line @typescript-eslint/no-empty-object-type +export interface ModuleResources {} + +// The Resource type is the union of core resources and any module resources +export type Resource = CoreResource | ModuleResources[keyof ModuleResources]; + +export type BaseFilters = { + search: string; + homeProject: string; + [key: string]: boolean | string | string[]; +}; + +export type SortingAndPaginationUpdates = { + page?: number; + pageSize?: number; + sort?: string; +}; + +export type WorkflowListItem = Omit< + IWorkflowDb, + 'nodes' | 'connections' | 'settings' | 'pinData' | 'usedCredentials' | 'meta' +> & { + resource: 'workflow'; +}; + +export type FolderShortInfo = { + id: string; + name: string; + parentFolder?: string; +}; + +export type BaseFolderItem = BaseResource & { + createdAt: string; + updatedAt: string; + workflowCount: number; + subFolderCount: number; + parentFolder?: ResourceParentFolder; + homeProject?: ProjectSharingData; + tags?: ITag[]; +}; + +export type ResourceParentFolder = { + id: string; + name: string; + parentFolderId: string | null; +}; + +export interface FolderListItem extends BaseFolderItem { + resource: 'folder'; +} + +export interface ChangeLocationSearchResponseItem extends BaseFolderItem { + path: string[]; +} + +export type FolderPathItem = PathItem & { parentFolder?: string }; + +export interface ChangeLocationSearchResult extends ChangeLocationSearchResponseItem { + resource: 'folder' | 'project'; +} + +export type WorkflowListResource = WorkflowListItem | FolderListItem; + +export type FolderCreateResponse = Omit< + FolderListItem, + 'workflowCount' | 'tags' | 'sharedWithProjects' | 'homeProject' +>; + +export type FolderTreeResponseItem = { + id: string; + name: string; + children: FolderTreeResponseItem[]; +}; + +// Identical to cli.Interfaces.ts +export interface IWorkflowShortResponse { + id: string; + name: string; + active: boolean; + createdAt: number | string; + updatedAt: number | string; + tags: ITag[]; +} + +export interface IWorkflowsShareResponse { + id: string; + createdAt: number | string; + updatedAt: number | string; + sharedWithProjects?: ProjectSharingData[]; + homeProject?: ProjectSharingData; +} + +// Identical or almost identical to cli.Interfaces.ts + +export interface IActivationError { + time: number; + error: { + message: string; + }; +} + +export interface IShareCredentialsPayload { + shareWithIds: string[]; +} + +export interface IShareWorkflowsPayload { + shareWithIds: string[]; +} + +export interface ICredentialsResponse extends ICredentialsEncrypted { + id: string; + createdAt: Iso8601DateTimeString; + updatedAt: Iso8601DateTimeString; + sharedWithProjects?: ProjectSharingData[]; + homeProject?: ProjectSharingData; + currentUserHasAccess?: boolean; + scopes?: Scope[]; + ownedBy?: Pick; + isManaged: boolean; +} + +export interface ICredentialsBase { + createdAt: Iso8601DateTimeString; + updatedAt: Iso8601DateTimeString; +} + +export interface ICredentialsDecryptedResponse extends ICredentialsBase, ICredentialsDecrypted { + id: string; +} + +export interface IExecutionBase { + id?: string; + finished: boolean; + mode: WorkflowExecuteMode; + status: ExecutionStatus; + retryOf?: string; + retrySuccessId?: string; + startedAt: Date | string; + createdAt: Date | string; + stoppedAt?: Date | string; + workflowId?: string; // To be able to filter executions easily // +} + +export interface IExecutionFlatted extends IExecutionBase { + data: string; + workflowData: IWorkflowDb; +} + +export interface IExecutionFlattedResponse extends IExecutionFlatted { + id: string; +} + +export interface IExecutionPushResponse { + executionId?: string; + waitingForWebhook?: boolean; +} + +export interface IExecutionResponse extends IExecutionBase { + id: string; + data?: IRunExecutionData; + workflowData: IWorkflowDb; + executedNode?: string; + triggerNode?: string; +} + +export type ExecutionSummaryWithScopes = ExecutionSummary & { scopes: Scope[] }; + +export interface IExecutionsListResponse { + count: number; + results: ExecutionSummaryWithScopes[]; + estimated: boolean; +} + +export interface IExecutionsCurrentSummaryExtended { + id: string; + status: ExecutionStatus; + mode: WorkflowExecuteMode; + startedAt: Date; + workflowId: string; +} + +export interface IExecutionsStopData { + finished?: boolean; + mode: WorkflowExecuteMode; + startedAt: Date; + stoppedAt: Date; + status: ExecutionStatus; +} + +export interface IExecutionDeleteFilter { + deleteBefore?: Date; + filters?: ExecutionsQueryFilter; + ids?: string[]; +} + +export type InvitableRoleName = (typeof ROLE)['Member' | 'Admin']; + +export interface IUserListAction { + label: string; + value: string; + guard?: (user: IUser) => boolean; +} + +export const enum UserManagementAuthenticationMethod { + Email = 'email', + Ldap = 'ldap', + Saml = 'saml', + Oidc = 'oidc', +} + +export interface IPermissionGroup { + loginStatus?: ILogInStatus[]; + role?: Role[]; +} + +export interface IPermissionAllowGroup extends IPermissionGroup { + shouldAllow?: () => boolean; +} + +export interface IPermissionDenyGroup extends IPermissionGroup { + shouldDeny?: () => boolean; +} + +export interface IPermissions { + allow?: IPermissionAllowGroup; + deny?: IPermissionDenyGroup; +} + +export interface IUserPermissions { + [category: string]: { + [permission: string]: IPermissions; + }; +} + +export type WorkflowCallerPolicyDefaultOption = 'any' | 'none' | 'workflowsFromAList'; + +export interface IWorkflowSettings extends IWorkflowSettingsWorkflow { + errorWorkflow?: string; + timezone?: string; + executionTimeout?: number; + maxExecutionTimeout?: number; + callerIds?: string; + callerPolicy?: WorkflowSettings.CallerPolicy; + executionOrder: NonNullable; +} + +export interface ITimeoutHMS { + hours: number; + minutes: number; + seconds: number; +} + +export type WorkflowTitleStatus = 'EXECUTING' | 'IDLE' | 'ERROR' | 'DEBUG'; + +export type ExtractActionKeys = T extends SimplifiedNodeType ? T['name'] : never; + +export type ActionsRecord = { + [K in ExtractActionKeys]: ActionTypeDescription[]; +}; + +export type SimplifiedNodeType = Pick< + INodeTypeDescription, + | 'displayName' + | 'description' + | 'name' + | 'group' + | 'icon' + | 'iconUrl' + | 'iconColor' + | 'badgeIconUrl' + | 'codex' + | 'defaults' + | 'outputs' +> & { + tag?: string; +}; +export interface SubcategoryItemProps { + description?: string; + iconType?: string; + icon?: IconName; + iconProps?: { + color?: string; + }; + panelClass?: string; + title?: string; + subcategory?: string; + defaults?: INodeParameters; + forceIncludeNodes?: string[]; + sections?: string[]; +} +export interface ViewItemProps { + title: string; + description: string; + icon: string; + tag?: NodeCreatorTag; + borderless?: boolean; +} +export interface LabelItemProps { + key: string; +} +export interface LinkItemProps { + url: string; + key: string; + newTab?: boolean; + title: string; + description: string; + icon: string; + tag?: NodeCreatorTag; +} + +export interface OpenTemplateItemProps { + templateId: string; + title: string; + description: string; + nodes?: INodeTypeDescription[]; + icon?: string; + tag?: NodeCreatorTag; + compact?: boolean; +} + +export interface ActionTypeDescription extends SimplifiedNodeType { + displayOptions?: IDisplayOptions; + values?: IDataObject; + actionKey: string; + outputConnectionType?: NodeConnectionType; + codex: { + label: string; + categories: string[]; + }; +} + +export interface CategoryItemProps { + name: string; + count: number; +} + +export interface CreateElementBase { + uuid?: string; + key: string; +} + +export interface NodeCreateElement extends CreateElementBase { + type: 'node'; + subcategory: string; + resource?: string; + operation?: string; + properties: SimplifiedNodeType; +} + +export interface CategoryCreateElement extends CreateElementBase { + type: 'category'; + subcategory: string; + properties: CategoryItemProps; +} + +export interface SubcategoryCreateElement extends CreateElementBase { + type: 'subcategory'; + properties: SubcategoryItemProps; +} + +export interface SectionCreateElement extends CreateElementBase { + type: 'section'; + title: string; + children: INodeCreateElement[]; +} + +export interface ViewCreateElement extends CreateElementBase { + type: 'view'; + properties: ViewItemProps; +} + +export interface LabelCreateElement extends CreateElementBase { + type: 'label'; + subcategory: string; + properties: LabelItemProps; +} + +export interface LinkCreateElement extends CreateElementBase { + type: 'link'; + properties: LinkItemProps; +} + +export interface OpenTemplateElement extends CreateElementBase { + type: 'openTemplate'; + properties: OpenTemplateItemProps; +} + +export interface ActionCreateElement extends CreateElementBase { + type: 'action'; + subcategory: string; + properties: ActionTypeDescription; +} + +export type INodeCreateElement = + | NodeCreateElement + | CategoryCreateElement + | SubcategoryCreateElement + | SectionCreateElement + | ViewCreateElement + | LabelCreateElement + | ActionCreateElement + | LinkCreateElement + | OpenTemplateElement; + +export type NodeTypeSelectedPayload = { + type: string; + parameters?: { + resource?: string; + operation?: string; + }; + actionName?: string; +}; + +export interface SubcategorizedNodeTypes { + [subcategory: string]: INodeCreateElement[]; +} + +export interface ITagRow { + tag?: ITag; + usage?: string; + create?: boolean; + disable?: boolean; + update?: boolean; + delete?: boolean; + canDelete?: boolean; +} + +export interface INodeMetadata { + parametersLastUpdatedAt?: number; + pinnedDataLastUpdatedAt?: number; + pinnedDataLastRemovedAt?: number; + pristine: boolean; +} + +export interface IUsedCredential { + id: string; + name: string; + credentialType: string; + currentUserHasAccess: boolean; + homeProject?: ProjectSharingData; + sharedWithProjects?: ProjectSharingData[]; +} + +export interface WorkflowsState { + activeWorkflows: string[]; + activeWorkflowExecution: ExecutionSummary | null; + currentWorkflowExecutions: ExecutionSummary[]; + activeExecutionId: string | null; + executingNode: string[]; + executionWaitingForWebhook: boolean; + nodeMetadata: NodeMetadataMap; + subWorkflowExecutionError: Error | null; + usedCredentials: Record; + workflow: IWorkflowDb; + workflowExecutionData: IExecutionResponse | null; + workflowExecutionPairedItemMappings: { [itemId: string]: Set }; + workflowsById: IWorkflowsMap; + chatMessages: string[]; + isInDebugMode?: boolean; +} + +export interface NodeMetadataMap { + [nodeName: string]: INodeMetadata; +} + +export interface CommunityPackageMap { + [name: string]: PublicInstalledPackage; +} + +export interface ICredentialTypeMap { + [name: string]: ICredentialType; +} + +export interface ICredentialMap { + [name: string]: ICredentialsResponse; +} + +export interface ICredentialsState { + credentialTypes: ICredentialTypeMap; + credentials: ICredentialMap; +} + +export interface ITagsState { + tags: { [id: string]: ITag }; + loading: boolean; + fetchedAll: boolean; + fetchedUsageCount: boolean; +} + +export type Modals = { + [CREDENTIAL_EDIT_MODAL_KEY]: NewCredentialsModal; + [key: string]: ModalState; +}; + +export type ModalKey = keyof Modals; + +export type ModalState = { + open: boolean; + mode?: string | null; + data?: Record; + activeId?: string | null; + curlCommand?: string; + httpNodeParameters?: string; +}; + +export interface NewCredentialsModal extends ModalState { + showAuthSelector?: boolean; +} + +export type IRunDataDisplayMode = 'table' | 'json' | 'binary' | 'schema' | 'html' | 'ai'; +export type NodePanelType = 'input' | 'output'; + +export interface TargetItem { + nodeName: string; + itemIndex: number; + runIndex: number; + outputIndex: number; +} + +export interface NDVState { + activeNodeName: string | null; + mainPanelDimensions: { [key: string]: { [key: string]: number } }; + pushRef: string; + input: { + displayMode: IRunDataDisplayMode; + nodeName?: string; + run?: number; + branch?: number; + data: { + isEmpty: boolean; + }; + }; + output: { + branch?: number; + displayMode: IRunDataDisplayMode; + data: { + isEmpty: boolean; + }; + editMode: { + enabled: boolean; + value: string; + }; + }; + focusedMappableInput: string; + focusedInputPath: string; + mappingTelemetry: { [key: string]: string | number | boolean }; + hoveringItem: null | TargetItem; + expressionOutputItemIndex: number; + draggable: { + isDragging: boolean; + type: string; + data: string; + dimensions: DOMRect | null; + activeTarget: { id: string; stickyPosition: null | XYPosition } | null; + }; + isMappingOnboarded: boolean; + isTableHoverOnboarded: boolean; + isAutocompleteOnboarded: boolean; + highlightDraggables: boolean; +} + +export type TargetNodeParameterContext = { + nodeName: string; + parameterPath: string; +}; + +export interface NotificationOptions extends Partial { + message: string | ElementNotificationOptions['message']; +} + +export type NodeFilterType = + | typeof REGULAR_NODE_CREATOR_VIEW + | typeof TRIGGER_NODE_CREATOR_VIEW + | typeof AI_NODE_CREATOR_VIEW + | typeof AI_OTHERS_NODE_CREATOR_VIEW + | typeof AI_UNCATEGORIZED_CATEGORY + | typeof AI_EVALUATION; + +export type NodeCreatorOpenSource = + | '' + | 'context_menu' + | 'no_trigger_execution_tooltip' + | 'plus_endpoint' + | 'add_input_endpoint' + | 'trigger_placeholder_button' + | 'tab' + | 'node_connection_action' + | 'node_connection_drop' + | 'notice_error_message' + | 'add_node_button' + | 'add_evaluation_trigger_button' + | 'add_evaluation_node_button' + | 'templates_callout'; + +export interface INodeCreatorState { + itemsFilter: string; + showScrim: boolean; + rootViewHistory: NodeFilterType[]; + selectedView: NodeFilterType; + openSource: NodeCreatorOpenSource; +} + +export interface ISettingsState { + initialized: boolean; + settings: FrontendSettings; + userManagement: IUserManagementSettings; + templatesEndpointHealthy: boolean; + api: { + enabled: boolean; + latestVersion: number; + path: string; + swaggerUi: { + enabled: boolean; + }; + }; + ldap: { + loginLabel: string; + loginEnabled: boolean; + }; + saml: { + loginLabel: string; + loginEnabled: boolean; + }; + mfa: { + enabled: boolean; + }; + saveDataErrorExecution: WorkflowSettings.SaveDataExecution; + saveDataSuccessExecution: WorkflowSettings.SaveDataExecution; + saveManualExecutions: boolean; + saveDataProgressExecution: boolean; +} + +export type NodeTypesByTypeNameAndVersion = { + [nodeType: string]: { + [version: number]: INodeTypeDescription; + }; +}; + +export interface INodeTypesState { + nodeTypes: NodeTypesByTypeNameAndVersion; +} + +export interface IVersionsState { + versionNotificationSettings: IVersionNotificationSettings; + nextVersions: Version[]; + currentVersion: Version | undefined; +} + +export interface IWorkflowsMap { + [name: string]: IWorkflowDb; +} + +export interface CommunityNodesState { + availablePackageCount: number; + installedPackages: CommunityPackageMap; +} + +export interface IZoomConfig { + scale: number; + offset: XYPosition; + origin?: XYPosition; +} + +export interface IBounds { + minX: number; + minY: number; + maxX: number; + maxY: number; +} + +export type ILogInStatus = 'LoggedIn' | 'LoggedOut'; + +export interface IInviteResponse { + user: { + id: string; + email: string; + emailSent: boolean; + inviteAcceptUrl: string; + role: Role; + }; + error?: string; +} + +export interface ITab { + value: Value; + label?: string; + href?: string; + icon?: IconName; + align?: 'right'; + tooltip?: string; + notification?: boolean; +} + +export interface ITabBarItem { + value: string; + label: string; + disabled?: boolean; +} + +export interface IResourceLocatorResultExpanded extends INodeListSearchItems { + linkAlt?: string; + isArchived?: boolean; +} + +export interface CurlToJSONResponse { + 'parameters.url': string; + 'parameters.authentication': string; + 'parameters.method': string; + 'parameters.sendHeaders': boolean; + 'parameters.headerParameters.parameters.0.name': string; + 'parameters.headerParameters.parameters.0.value': string; + 'parameters.sendQuery': boolean; + 'parameters.sendBody': boolean; +} + +export interface HistoryState { + redoStack: Undoable[]; + undoStack: Undoable[]; + currentBulkAction: BulkCommand | null; + bulkInProgress: boolean; +} +export type Basic = string | number | boolean; +export type Primitives = Basic | bigint | symbol; + +export type Optional = T | undefined | null; + +export type SchemaType = + | 'string' + | 'number' + | 'boolean' + | 'bigint' + | 'symbol' + | 'array' + | 'object' + | 'function' + | 'null' + | 'undefined'; + +export type Schema = { type: SchemaType; key?: string; value: string | Schema[]; path: string }; + +export type UsageState = { + loading: boolean; + data: { + usage: { + activeWorkflowTriggers: { + limit: number; // -1 for unlimited, from license + value: number; + warningThreshold: number; // hardcoded value in BE + }; + workflowsHavingEvaluations: { + limit: number; // -1 for unlimited, from license + value: number; + }; + }; + license: { + planId: string; // community + planName: string; // defaults to Community + }; + managementToken?: string; + }; +}; + +export type NodeAuthenticationOption = { + name: string; + value: string; + displayOptions?: IDisplayOptions; +}; + +export interface EnvironmentVariable { + id: string; + key: string; + value: string; +} + +export type ExecutionFilterMetadata = { + key: string; + value: string; + exactMatch?: boolean; +}; + +export type ExecutionFilterVote = AnnotationVote | 'all'; + +export type ExecutionFilterType = { + status: string; + workflowId: string; + startDate: string | Date; + endDate: string | Date; + tags: string[]; + annotationTags: string[]; + vote: ExecutionFilterVote; + metadata: ExecutionFilterMetadata[]; +}; + +export type ExecutionsQueryFilter = { + status?: ExecutionStatus[]; + projectId?: string; + workflowId?: string; + finished?: boolean; + waitTill?: boolean; + metadata?: Array<{ key: string; value: string }>; + startedAfter?: string; + startedBefore?: string; + annotationTags?: string[]; + vote?: ExecutionFilterVote; +}; + +export interface CloudPlanState { + initialized: boolean; + data: Cloud.PlanData | null; + usage: InstanceUsage | null; + loadingPlan: boolean; +} + +export type CloudPlanAndUsageData = Cloud.PlanData & { usage: InstanceUsage }; + +export interface ExternalSecretsProviderSecret { + key: string; +} + +export type ExternalSecretsProviderData = Record; + +export type ExternalSecretsProviderProperty = INodeProperties; + +export type ExternalSecretsProviderState = 'connected' | 'tested' | 'initializing' | 'error'; + +export interface ExternalSecretsProvider { + icon: string; + name: string; + displayName: string; + connected: boolean; + connectedAt: string | false; + state: ExternalSecretsProviderState; + data?: ExternalSecretsProviderData; + properties?: ExternalSecretsProviderProperty[]; +} + +export type CloudUpdateLinkSourceType = + | 'advanced-permissions' + | 'canvas-nav' + | 'concurrency' + | 'custom-data-filter' + | 'workflow_sharing' + | 'credential_sharing' + | 'settings-n8n-api' + | 'audit-logs' + | 'ldap' + | 'log-streaming' + | 'source-control' + | 'sso' + | 'usage_page' + | 'settings-users' + | 'variables' + | 'community-nodes' + | 'workflow-history' + | 'worker-view' + | 'external-secrets' + | 'rbac' + | 'debug' + | 'insights' + | 'evaluations'; + +export type UTMCampaign = + | 'upgrade-custom-data-filter' + | 'upgrade-canvas-nav' + | 'upgrade-concurrency' + | 'upgrade-workflow-sharing' + | 'upgrade-credentials-sharing' + | 'upgrade-api' + | 'upgrade-audit-logs' + | 'upgrade-ldap' + | 'upgrade-log-streaming' + | 'upgrade-source-control' + | 'upgrade-sso' + | 'open' + | 'upgrade-users' + | 'upgrade-variables' + | 'upgrade-community-nodes' + | 'upgrade-workflow-history' + | 'upgrade-advanced-permissions' + | 'upgrade-worker-view' + | 'upgrade-external-secrets' + | 'upgrade-rbac' + | 'upgrade-debug' + | 'upgrade-insights' + | 'upgrade-evaluations'; + +export type N8nBanners = { + [key in BannerName]: { + priority: number; + component: Component; + }; +}; + +export type AddedNode = { + type: string; + openDetail?: boolean; + isAutoAdd?: boolean; + actionName?: string; +} & Partial; + +export type AddedNodeConnection = { + from: { nodeIndex: number; outputIndex?: number; type?: NodeConnectionType }; + to: { nodeIndex: number; inputIndex?: number; type?: NodeConnectionType }; +}; + +export type AddedNodesAndConnections = { + nodes: AddedNode[]; + connections: AddedNodeConnection[]; +}; + +export type ToggleNodeCreatorOptions = { + createNodeActive: boolean; + source?: NodeCreatorOpenSource; + nodeCreatorView?: NodeFilterType; + hasAddedNodes?: boolean; + connectionType?: NodeConnectionType; +}; + +export type AppliedThemeOption = 'light' | 'dark'; +export type ThemeOption = AppliedThemeOption | 'system'; + +export type EnterpriseEditionFeatureKey = + | 'AdvancedExecutionFilters' + | 'Sharing' + | 'Ldap' + | 'LogStreaming' + | 'Variables' + | 'Saml' + | 'Oidc' + | 'SourceControl' + | 'ExternalSecrets' + | 'AuditLogs' + | 'DebugInEditor' + | 'WorkflowHistory' + | 'WorkerView' + | 'AdvancedPermissions' + | 'ApiKeyScopes' + | 'EnforceMFA'; + +export type EnterpriseEditionFeatureValue = keyof Omit; + +export type InputPanel = { + nodeName?: string; + run?: number; + branch?: number; + data: { + isEmpty: boolean; + }; +}; + +export type OutputPanel = { + run?: number; + branch?: number; + data: { + isEmpty: boolean; + }; + editMode: { + enabled: boolean; + value: string; + }; +}; + +export type Draggable = { + isDragging: boolean; + type: string; + data: string; + dimensions: DOMRect | null; + activeTarget: { id: string; stickyPosition: null | XYPosition } | null; +}; + +export type MainPanelType = 'regular' | 'dragless' | 'inputless' | 'unknown' | 'wide'; + +export type MainPanelDimensions = Record< + MainPanelType, + { + relativeLeft: number; + relativeRight: number; + relativeWidth: number; + } +>; + +export interface LlmTokenUsageData { + completionTokens: number; + promptTokens: number; + totalTokens: number; + isEstimate: boolean; +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/constants 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/constants 2.ts new file mode 100755 index 00000000..46aae2e2 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/constants 2.ts @@ -0,0 +1,987 @@ +import type { + EnterpriseEditionFeatureKey, + EnterpriseEditionFeatureValue, + NodeCreatorOpenSource, +} from './Interface'; +import type { NodeConnectionType } from 'n8n-workflow'; +import { NodeConnectionTypes } from 'n8n-workflow'; +import type { + CanvasInjectionData, + CanvasNodeHandleInjectionData, + CanvasNodeInjectionData, +} from '@/types'; +import type { ComputedRef, InjectionKey, Ref } from 'vue'; +import type { ExpressionLocalResolveContext } from './types/expressions'; +import { DATA_STORE_MODULE_NAME } from './features/dataStore/constants'; + +export const MAX_WORKFLOW_SIZE = 1024 * 1024 * 16; // Workflow size limit in bytes +export const MAX_EXPECTED_REQUEST_SIZE = 2048; // Expected maximum workflow request metadata (i.e. headers) size in bytes +export const MAX_PINNED_DATA_SIZE = 1024 * 1024 * 12; // 12 MB; Workflow pinned data size limit in bytes +export const MAX_DISPLAY_DATA_SIZE = 1024 * 1024; // 1 MB +export const MAX_DISPLAY_DATA_SIZE_SCHEMA_VIEW = 1024 * 1024 * 4; // 4 MB +export const MAX_DISPLAY_ITEMS_AUTO_ALL = 250; + +export const PLACEHOLDER_FILLED_AT_EXECUTION_TIME = '[filled at execution time]'; + +export const IN_PROGRESS_EXECUTION_ID = '__IN_PROGRESS__'; + +// parameter input +export const CUSTOM_API_CALL_KEY = '__CUSTOM_API_CALL__'; +export const CUSTOM_API_CALL_NAME = 'Custom API Call'; + +// workflows +export const PLACEHOLDER_EMPTY_WORKFLOW_ID = '__EMPTY__'; +export const NEW_WORKFLOW_ID = 'new'; +export const DEFAULT_NODETYPE_VERSION = 1; +export const DEFAULT_NEW_WORKFLOW_NAME = 'My workflow'; +export const MIN_WORKFLOW_NAME_LENGTH = 1; +export const MAX_WORKFLOW_NAME_LENGTH = 128; +export const DUPLICATE_POSTFFIX = ' copy'; +export const NODE_OUTPUT_DEFAULT_KEY = '_NODE_OUTPUT_DEFAULT_KEY_'; +export const DEFAULT_WORKFLOW_PAGE_SIZE = 50; + +// tags +export const MAX_TAG_NAME_LENGTH = 24; + +// modals +export const ABOUT_MODAL_KEY = 'about'; +export const CHAT_EMBED_MODAL_KEY = 'chatEmbed'; +export const CHANGE_PASSWORD_MODAL_KEY = 'changePassword'; +export const CREDENTIAL_EDIT_MODAL_KEY = 'editCredential'; +export const API_KEY_CREATE_OR_EDIT_MODAL_KEY = 'createOrEditApiKey'; +export const CREDENTIAL_SELECT_MODAL_KEY = 'selectCredential'; +export const DELETE_USER_MODAL_KEY = 'deleteUser'; +export const INVITE_USER_MODAL_KEY = 'inviteUser'; +export const DUPLICATE_MODAL_KEY = 'duplicate'; +export const IMPORT_WORKFLOW_URL_MODAL_KEY = 'importWorkflowUrl'; +export const TAGS_MANAGER_MODAL_KEY = 'tagsManager'; +export const ANNOTATION_TAGS_MANAGER_MODAL_KEY = 'annotationTagsManager'; +export const VERSIONS_MODAL_KEY = 'versions'; +export const WORKFLOW_SETTINGS_MODAL_KEY = 'settings'; +export const WORKFLOW_SHARE_MODAL_KEY = 'workflowShare'; +export const PERSONALIZATION_MODAL_KEY = 'personalization'; +export const CONTACT_PROMPT_MODAL_KEY = 'contactPrompt'; +export const NODE_PINNING_MODAL_KEY = 'nodePinning'; +export const NPS_SURVEY_MODAL_KEY = 'npsSurvey'; +export const WORKFLOW_ACTIVE_MODAL_KEY = 'activation'; +export const COMMUNITY_PACKAGE_INSTALL_MODAL_KEY = 'communityPackageInstall'; +export const COMMUNITY_PACKAGE_CONFIRM_MODAL_KEY = 'communityPackageManageConfirm'; +export const IMPORT_CURL_MODAL_KEY = 'importCurl'; +export const LOG_STREAM_MODAL_KEY = 'settingsLogStream'; +export const SOURCE_CONTROL_PUSH_MODAL_KEY = 'sourceControlPush'; +export const SOURCE_CONTROL_PULL_MODAL_KEY = 'sourceControlPull'; +export const DEBUG_PAYWALL_MODAL_KEY = 'debugPaywall'; +export const MFA_SETUP_MODAL_KEY = 'mfaSetup'; +export const PROMPT_MFA_CODE_MODAL_KEY = 'promptMfaCode'; +export const WORKFLOW_HISTORY_VERSION_RESTORE = 'workflowHistoryVersionRestore'; +export const SETUP_CREDENTIALS_MODAL_KEY = 'setupCredentials'; +export const PROJECT_MOVE_RESOURCE_MODAL = 'projectMoveResourceModal'; +export const NEW_ASSISTANT_SESSION_MODAL = 'newAssistantSession'; +export const EXTERNAL_SECRETS_PROVIDER_MODAL_KEY = 'externalSecretsProvider'; +export const COMMUNITY_PLUS_ENROLLMENT_MODAL = 'communityPlusEnrollment'; +export const DELETE_FOLDER_MODAL_KEY = 'deleteFolder'; +export const MOVE_FOLDER_MODAL_KEY = 'moveFolder'; +export const WORKFLOW_ACTIVATION_CONFLICTING_WEBHOOK_MODAL_KEY = + 'workflowActivationConflictingWebhook'; +export const FROM_AI_PARAMETERS_MODAL_KEY = 'fromAiParameters'; +export const WORKFLOW_EXTRACTION_NAME_MODAL_KEY = 'workflowExtractionName'; +export const WHATS_NEW_MODAL_KEY = 'whatsNew'; +export const WORKFLOW_DIFF_MODAL_KEY = 'workflowDiff'; +export const EXPERIMENT_TEMPLATE_RECO_V2_KEY = 'templateRecoV2'; + +export const COMMUNITY_PACKAGE_MANAGE_ACTIONS = { + UNINSTALL: 'uninstall', + UPDATE: 'update', + VIEW_DOCS: 'view-documentation', +}; + +// breakpoints +export const BREAKPOINT_SM = 768; +export const BREAKPOINT_MD = 992; +export const BREAKPOINT_LG = 1200; +export const BREAKPOINT_XL = 1920; + +export const DOCS_DOMAIN = 'docs.n8n.io'; +export const BUILTIN_NODES_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/builtin/`; +export const BUILTIN_CREDENTIALS_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/builtin/credentials/`; +export const DATA_PINNING_DOCS_URL = `https://${DOCS_DOMAIN}/data/data-pinning/`; +export const DATA_EDITING_DOCS_URL = `https://${DOCS_DOMAIN}/data/data-editing/`; +export const SCHEMA_PREVIEW_DOCS_URL = `https://${DOCS_DOMAIN}/data/schema-preview/`; +export const MFA_DOCS_URL = `https://${DOCS_DOMAIN}/user-management/two-factor-auth/`; +export const NPM_PACKAGE_DOCS_BASE_URL = 'https://www.npmjs.com/package/'; +export const NPM_KEYWORD_SEARCH_URL = + 'https://www.npmjs.com/search?q=keywords%3An8n-community-node-package'; +export const N8N_QUEUE_MODE_DOCS_URL = `https://${DOCS_DOMAIN}/hosting/scaling/queue-mode/`; +export const COMMUNITY_NODES_INSTALLATION_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/community-nodes/installation/gui-install/`; +export const COMMUNITY_NODES_RISKS_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/community-nodes/risks/`; +export const COMMUNITY_NODES_BLOCKLIST_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/community-nodes/blocklist/`; +export const CUSTOM_NODES_DOCS_URL = `https://${DOCS_DOMAIN}/integrations/creating-nodes/code/create-n8n-nodes-module/`; +export const EXPRESSIONS_DOCS_URL = `https://${DOCS_DOMAIN}/code-examples/expressions/`; +export const EVALUATIONS_DOCS_URL = `https://${DOCS_DOMAIN}/advanced-ai/evaluations/overview/`; +export const ERROR_WORKFLOW_DOCS_URL = `https://${DOCS_DOMAIN}/flow-logic/error-handling/#create-and-set-an-error-workflow`; +export const TIME_SAVED_DOCS_URL = `https://${DOCS_DOMAIN}/insights/#setting-the-time-saved-by-a-workflow`; +export const N8N_PRICING_PAGE_URL = 'https://n8n.io/pricing'; +export const N8N_MAIN_GITHUB_REPO_URL = 'https://github.com/n8n-io/n8n'; + +export const NODE_MIN_INPUT_ITEMS_COUNT = 4; + +// node types +export const BAMBOO_HR_NODE_TYPE = 'n8n-nodes-base.bambooHr'; +export const CALENDLY_TRIGGER_NODE_TYPE = 'n8n-nodes-base.calendlyTrigger'; +export const CODE_NODE_TYPE = 'n8n-nodes-base.code'; +export const AI_CODE_NODE_TYPE = '@n8n/n8n-nodes-langchain.code'; +export const AI_MCP_TOOL_NODE_TYPE = '@n8n/n8n-nodes-langchain.mcpClientTool'; +export const WIKIPEDIA_TOOL_NODE_TYPE = '@n8n/n8n-nodes-langchain.toolWikipedia'; +export const CRON_NODE_TYPE = 'n8n-nodes-base.cron'; +export const CLEARBIT_NODE_TYPE = 'n8n-nodes-base.clearbit'; +export const FILTER_NODE_TYPE = 'n8n-nodes-base.filter'; +export const FUNCTION_NODE_TYPE = 'n8n-nodes-base.function'; +export const GITHUB_TRIGGER_NODE_TYPE = 'n8n-nodes-base.githubTrigger'; +export const GIT_NODE_TYPE = 'n8n-nodes-base.git'; +export const GOOGLE_GMAIL_NODE_TYPE = 'n8n-nodes-base.gmail'; +export const GOOGLE_SHEETS_NODE_TYPE = 'n8n-nodes-base.googleSheets'; +export const ERROR_TRIGGER_NODE_TYPE = 'n8n-nodes-base.errorTrigger'; +export const ELASTIC_SECURITY_NODE_TYPE = 'n8n-nodes-base.elasticSecurity'; +export const EMAIL_SEND_NODE_TYPE = 'n8n-nodes-base.emailSend'; +export const EMAIL_IMAP_NODE_TYPE = 'n8n-nodes-base.emailReadImap'; +export const EXECUTE_COMMAND_NODE_TYPE = 'n8n-nodes-base.executeCommand'; +export const FORM_TRIGGER_NODE_TYPE = 'n8n-nodes-base.formTrigger'; +export const HTML_NODE_TYPE = 'n8n-nodes-base.html'; +export const HTTP_REQUEST_NODE_TYPE = 'n8n-nodes-base.httpRequest'; +export const HTTP_REQUEST_TOOL_NODE_TYPE = 'n8n-nodes-base.httpRequestTool'; +export const HUBSPOT_TRIGGER_NODE_TYPE = 'n8n-nodes-base.hubspotTrigger'; +export const IF_NODE_TYPE = 'n8n-nodes-base.if'; +export const INTERVAL_NODE_TYPE = 'n8n-nodes-base.interval'; +export const ITEM_LISTS_NODE_TYPE = 'n8n-nodes-base.itemLists'; +export const JIRA_NODE_TYPE = 'n8n-nodes-base.jira'; +export const JIRA_TRIGGER_NODE_TYPE = 'n8n-nodes-base.jiraTrigger'; +export const MICROSOFT_EXCEL_NODE_TYPE = 'n8n-nodes-base.microsoftExcel'; +export const MANUAL_TRIGGER_NODE_TYPE = 'n8n-nodes-base.manualTrigger'; +export const MANUAL_CHAT_TRIGGER_NODE_TYPE = '@n8n/n8n-nodes-langchain.manualChatTrigger'; +export const MCP_TRIGGER_NODE_TYPE = '@n8n/n8n-nodes-langchain.mcpTrigger'; +export const CHAT_TRIGGER_NODE_TYPE = '@n8n/n8n-nodes-langchain.chatTrigger'; +export const CHAT_NODE_TYPE = '@n8n/n8n-nodes-langchain.chat'; +export const AGENT_NODE_TYPE = '@n8n/n8n-nodes-langchain.agent'; +export const OPEN_AI_NODE_TYPE = '@n8n/n8n-nodes-langchain.openAi'; +export const OPEN_AI_NODE_MESSAGE_ASSISTANT_TYPE = + '@n8n/n8n-nodes-langchain.openAi.assistant.message'; +export const OPEN_AI_ASSISTANT_NODE_TYPE = '@n8n/n8n-nodes-langchain.openAiAssistant'; +export const BASIC_CHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.chainLlm'; +export const QA_CHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.chainRetrievalQa'; +export const MICROSOFT_TEAMS_NODE_TYPE = 'n8n-nodes-base.microsoftTeams'; +export const N8N_NODE_TYPE = 'n8n-nodes-base.n8n'; +export const NO_OP_NODE_TYPE = 'n8n-nodes-base.noOp'; +export const STICKY_NODE_TYPE = 'n8n-nodes-base.stickyNote'; +export const NOTION_TRIGGER_NODE_TYPE = 'n8n-nodes-base.notionTrigger'; +export const PAGERDUTY_NODE_TYPE = 'n8n-nodes-base.pagerDuty'; +export const SALESFORCE_NODE_TYPE = 'n8n-nodes-base.salesforce'; +export const SEGMENT_NODE_TYPE = 'n8n-nodes-base.segment'; +export const SET_NODE_TYPE = 'n8n-nodes-base.set'; +export const SCHEDULE_TRIGGER_NODE_TYPE = 'n8n-nodes-base.scheduleTrigger'; +export const SERVICENOW_NODE_TYPE = 'n8n-nodes-base.serviceNow'; +export const SLACK_NODE_TYPE = 'n8n-nodes-base.slack'; +export const SPREADSHEET_FILE_NODE_TYPE = 'n8n-nodes-base.spreadsheetFile'; +export const SPLIT_IN_BATCHES_NODE_TYPE = 'n8n-nodes-base.splitInBatches'; +export const START_NODE_TYPE = 'n8n-nodes-base.start'; +export const SWITCH_NODE_TYPE = 'n8n-nodes-base.switch'; +export const TELEGRAM_NODE_TYPE = 'n8n-nodes-base.telegram'; +export const THE_HIVE_TRIGGER_NODE_TYPE = 'n8n-nodes-base.theHiveTrigger'; +export const QUICKBOOKS_NODE_TYPE = 'n8n-nodes-base.quickbooks'; +export const WAIT_NODE_TYPE = 'n8n-nodes-base.wait'; +export const WEBHOOK_NODE_TYPE = 'n8n-nodes-base.webhook'; +export const WORKABLE_TRIGGER_NODE_TYPE = 'n8n-nodes-base.workableTrigger'; +export const WORKFLOW_TRIGGER_NODE_TYPE = 'n8n-nodes-base.workflowTrigger'; +export const EXECUTE_WORKFLOW_NODE_TYPE = 'n8n-nodes-base.executeWorkflow'; +export const EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE = 'n8n-nodes-base.executeWorkflowTrigger'; +export const WOOCOMMERCE_TRIGGER_NODE_TYPE = 'n8n-nodes-base.wooCommerceTrigger'; +export const XERO_NODE_TYPE = 'n8n-nodes-base.xero'; +export const ZENDESK_NODE_TYPE = 'n8n-nodes-base.zendesk'; +export const ZENDESK_TRIGGER_NODE_TYPE = 'n8n-nodes-base.zendeskTrigger'; +export const DISCORD_NODE_TYPE = 'n8n-nodes-base.discord'; +export const EXTRACT_FROM_FILE_NODE_TYPE = 'n8n-nodes-base.extractFromFile'; +export const CONVERT_TO_FILE_NODE_TYPE = 'n8n-nodes-base.convertToFile'; +export const DATETIME_NODE_TYPE = 'n8n-nodes-base.dateTime'; +export const REMOVE_DUPLICATES_NODE_TYPE = 'n8n-nodes-base.removeDuplicates'; +export const SPLIT_OUT_NODE_TYPE = 'n8n-nodes-base.splitOut'; +export const LIMIT_NODE_TYPE = 'n8n-nodes-base.limit'; +export const SUMMARIZE_NODE_TYPE = 'n8n-nodes-base.summarize'; +export const AGGREGATE_NODE_TYPE = 'n8n-nodes-base.aggregate'; +export const MERGE_NODE_TYPE = 'n8n-nodes-base.merge'; +export const MARKDOWN_NODE_TYPE = 'n8n-nodes-base.markdown'; +export const XML_NODE_TYPE = 'n8n-nodes-base.xml'; +export const CRYPTO_NODE_TYPE = 'n8n-nodes-base.crypto'; +export const RSS_READ_NODE_TYPE = 'n8n-nodes-base.rssFeedRead'; +export const COMPRESSION_NODE_TYPE = 'n8n-nodes-base.compression'; +export const EDIT_IMAGE_NODE_TYPE = 'n8n-nodes-base.editImage'; +export const CHAIN_SUMMARIZATION_LANGCHAIN_NODE_TYPE = + '@n8n/n8n-nodes-langchain.chainSummarization'; +export const SIMULATE_NODE_TYPE = 'n8n-nodes-base.simulate'; +export const SIMULATE_TRIGGER_NODE_TYPE = 'n8n-nodes-base.simulateTrigger'; +export const AI_TRANSFORM_NODE_TYPE = 'n8n-nodes-base.aiTransform'; +export const FORM_NODE_TYPE = 'n8n-nodes-base.form'; +export const GITHUB_NODE_TYPE = 'n8n-nodes-base.github'; +export const SLACK_TRIGGER_NODE_TYPE = 'n8n-nodes-base.slackTrigger'; +export const TELEGRAM_TRIGGER_NODE_TYPE = 'n8n-nodes-base.telegramTrigger'; +export const FACEBOOK_LEAD_ADS_TRIGGER_NODE_TYPE = 'n8n-nodes-base.facebookLeadAdsTrigger'; +export const RESPOND_TO_WEBHOOK_NODE_TYPE = 'n8n-nodes-base.respondToWebhook'; +export const DATA_STORE_NODE_TYPE = 'n8n-nodes-base.dataStore'; + +export const CREDENTIAL_ONLY_NODE_PREFIX = 'n8n-creds-base'; +export const CREDENTIAL_ONLY_HTTP_NODE_VERSION = 4.1; + +// template categories +export const TEMPLATE_CATEGORY_AI = 'categories/ai'; + +export const EXECUTABLE_TRIGGER_NODE_TYPES = [ + START_NODE_TYPE, + MANUAL_TRIGGER_NODE_TYPE, + SCHEDULE_TRIGGER_NODE_TYPE, + CRON_NODE_TYPE, + INTERVAL_NODE_TYPE, +]; + +export const NON_ACTIVATABLE_TRIGGER_NODE_TYPES = [ + ERROR_TRIGGER_NODE_TYPE, + MANUAL_TRIGGER_NODE_TYPE, + EXECUTE_WORKFLOW_TRIGGER_NODE_TYPE, + MANUAL_CHAT_TRIGGER_NODE_TYPE, +]; + +export const NODES_USING_CODE_NODE_EDITOR = [ + CODE_NODE_TYPE, + AI_CODE_NODE_TYPE, + AI_TRANSFORM_NODE_TYPE, +]; + +export const MODULE_ENABLED_NODES = [ + { nodeType: DATA_STORE_NODE_TYPE, module: DATA_STORE_MODULE_NAME }, +]; + +export const NODE_POSITION_CONFLICT_ALLOWLIST = [STICKY_NODE_TYPE]; + +export const PIN_DATA_NODE_TYPES_DENYLIST = [SPLIT_IN_BATCHES_NODE_TYPE, STICKY_NODE_TYPE]; + +export const OPEN_URL_PANEL_TRIGGER_NODE_TYPES = [ + WEBHOOK_NODE_TYPE, + FORM_TRIGGER_NODE_TYPE, + CHAT_TRIGGER_NODE_TYPE, + MCP_TRIGGER_NODE_TYPE, +]; + +export const SINGLE_WEBHOOK_TRIGGERS = [ + TELEGRAM_TRIGGER_NODE_TYPE, + SLACK_TRIGGER_NODE_TYPE, + FACEBOOK_LEAD_ADS_TRIGGER_NODE_TYPE, +]; + +export const LIST_LIKE_NODE_OPERATIONS = ['getAll', 'getMany', 'read', 'search']; + +export const PRODUCTION_ONLY_TRIGGER_NODE_TYPES = [CHAT_TRIGGER_NODE_TYPE]; + +// Node creator +export const NODE_CREATOR_OPEN_SOURCES: Record< + Uppercase, + NodeCreatorOpenSource +> = { + NO_TRIGGER_EXECUTION_TOOLTIP: 'no_trigger_execution_tooltip', + PLUS_ENDPOINT: 'plus_endpoint', + ADD_INPUT_ENDPOINT: 'add_input_endpoint', + TRIGGER_PLACEHOLDER_BUTTON: 'trigger_placeholder_button', + ADD_NODE_BUTTON: 'add_node_button', + TAB: 'tab', + NODE_CONNECTION_ACTION: 'node_connection_action', + NODE_CONNECTION_DROP: 'node_connection_drop', + NOTICE_ERROR_MESSAGE: 'notice_error_message', + CONTEXT_MENU: 'context_menu', + ADD_EVALUATION_NODE_BUTTON: 'add_evaluation_node_button', + ADD_EVALUATION_TRIGGER_BUTTON: 'add_evaluation_trigger_button', + TEMPLATES_CALLOUT: 'templates_callout', + '': '', +}; +export const CORE_NODES_CATEGORY = 'Core Nodes'; +export const HUMAN_IN_THE_LOOP_CATEGORY = 'HITL'; +export const CUSTOM_NODES_CATEGORY = 'Custom Nodes'; +export const DEFAULT_SUBCATEGORY = '*'; +export const AI_OTHERS_NODE_CREATOR_VIEW = 'AI Other'; +export const AI_NODE_CREATOR_VIEW = 'AI'; +export const REGULAR_NODE_CREATOR_VIEW = 'Regular'; +export const TRIGGER_NODE_CREATOR_VIEW = 'Trigger'; +export const OTHER_TRIGGER_NODES_SUBCATEGORY = 'Other Trigger Nodes'; +export const TRANSFORM_DATA_SUBCATEGORY = 'Data Transformation'; +export const FILES_SUBCATEGORY = 'Files'; +export const FLOWS_CONTROL_SUBCATEGORY = 'Flow'; +export const AI_SUBCATEGORY = 'AI'; +export const HELPERS_SUBCATEGORY = 'Helpers'; +export const HITL_SUBCATEGORY = 'Human in the Loop'; +export const AI_CATEGORY_AGENTS = 'Agents'; +export const AI_CATEGORY_CHAINS = 'Chains'; +export const AI_CATEGORY_LANGUAGE_MODELS = 'Language Models'; +export const AI_CATEGORY_MEMORY = 'Memory'; +export const AI_CATEGORY_OUTPUTPARSER = 'Output Parsers'; +export const AI_CATEGORY_TOOLS = 'Tools'; +export const AI_CATEGORY_VECTOR_STORES = 'Vector Stores'; +export const AI_CATEGORY_RETRIEVERS = 'Retrievers'; +export const AI_CATEGORY_EMBEDDING = 'Embeddings'; +export const AI_CATEGORY_DOCUMENT_LOADERS = 'Document Loaders'; +export const AI_CATEGORY_TEXT_SPLITTERS = 'Text Splitters'; +export const AI_CATEGORY_OTHER_TOOLS = 'Other Tools'; +export const AI_CATEGORY_ROOT_NODES = 'Root Nodes'; +export const AI_CATEGORY_MCP_NODES = 'Model Context Protocol'; +export const AI_EVALUATION = 'Evaluation'; +export const AI_UNCATEGORIZED_CATEGORY = 'Miscellaneous'; +export const AI_CODE_TOOL_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.toolCode'; +export const AI_WORKFLOW_TOOL_LANGCHAIN_NODE_TYPE = '@n8n/n8n-nodes-langchain.toolWorkflow'; +export const REQUEST_NODE_FORM_URL = 'https://n8n-community.typeform.com/to/K1fBVTZ3'; +export const PRE_BUILT_AGENTS_COLLECTION = 'pre-built-agents-collection'; + +// Node Connection Types +export const NODE_CONNECTION_TYPE_ALLOW_MULTIPLE: NodeConnectionType[] = [ + NodeConnectionTypes.AiTool, + NodeConnectionTypes.Main, +]; + +/** PERSONALIZATION SURVEY */ +export const EMAIL_KEY = 'email'; +export const WORK_AREA_KEY = 'workArea'; +export const FINANCE_WORK_AREA = 'finance'; +export const IT_ENGINEERING_WORK_AREA = 'IT-Engineering'; +export const PRODUCT_WORK_AREA = 'product'; +export const SALES_BUSINESSDEV_WORK_AREA = 'sales-businessDevelopment'; +export const SECURITY_WORK_AREA = 'security'; + +export const COMPANY_TYPE_KEY = 'companyType'; +export const SAAS_COMPANY_TYPE = 'saas'; +export const ECOMMERCE_COMPANY_TYPE = 'ecommerce'; +export const EDUCATION_TYPE = 'education'; +export const MSP_COMPANY_TYPE = 'msp'; +export const DIGITAL_AGENCY_COMPANY_TYPE = 'digital-agency'; +export const SYSTEMS_INTEGRATOR_COMPANY_TYPE = 'systems-integrator'; +export const OTHER_COMPANY_TYPE = 'other'; +export const PERSONAL_COMPANY_TYPE = 'personal'; + +export const COMPANY_INDUSTRY_EXTENDED_KEY = 'companyIndustryExtended'; +export const OTHER_COMPANY_INDUSTRY_EXTENDED_KEY = 'otherCompanyIndustryExtended'; +export const PHYSICAL_RETAIL_OR_SERVICES = 'physical-retail-or-services'; +export const REAL_ESTATE_OR_CONSTRUCTION = 'real-estate-or-construction'; +export const GOVERNMENT_INDUSTRY = 'government'; +export const LEGAL_INDUSTRY = 'legal-industry'; +export const MARKETING_INDUSTRY = 'marketing-industry'; +export const MEDIA_INDUSTRY = 'media-industry'; +export const MANUFACTURING_INDUSTRY = 'manufacturing-industry'; +export const MSP_INDUSTRY = 'msp'; +export const HEALTHCARE_INDUSTRY = 'healthcare'; +export const FINANCE_INSURANCE_INDUSTRY = 'finance-insurance-industry'; +export const IT_INDUSTRY = 'it-industry'; +export const SECURITY_INDUSTRY = 'security-industry'; +export const TELECOMS_INDUSTRY = 'telecoms'; +export const OTHER_INDUSTRY_OPTION = 'other'; + +export const COMPANY_SIZE_KEY = 'companySize'; +export const COMPANY_SIZE_20_OR_LESS = '<20'; +export const COMPANY_SIZE_20_99 = '20-99'; +export const COMPANY_SIZE_100_499 = '100-499'; +export const COMPANY_SIZE_500_999 = '500-999'; +export const COMPANY_SIZE_1000_OR_MORE = '1000+'; +export const COMPANY_SIZE_PERSONAL_USE = 'personalUser'; + +export const MARKETING_AUTOMATION_GOAL_KEY = 'automationGoalSm'; +export const MARKETING_AUTOMATION_LEAD_GENERATION_GOAL = 'lead-generation'; +export const MARKETING_AUTOMATION_CUSTOMER_COMMUNICATION = 'customer-communication'; +export const MARKETING_AUTOMATION_ACTIONS = 'actions'; +export const MARKETING_AUTOMATION_AD_CAMPAIGN = 'ad-campaign'; +export const MARKETING_AUTOMATION_REPORTING = 'reporting'; +export const MARKETING_AUTOMATION_DATA_SYNCHING = 'data-syncing'; +export const MARKETING_AUTOMATION_OTHER = 'other'; + +export const OTHER_MARKETING_AUTOMATION_GOAL_KEY = 'automationGoalSmOther'; + +export const CODING_SKILL_KEY = 'codingSkill'; + +export const AUTOMATION_BENEFICIARY_KEY = 'automationBeneficiary'; +export const AUTOMATION_BENEFICIARY_SELF = 'myself'; +export const AUTOMATION_BENEFICIARY_MY_TEAM = 'my-team'; +export const AUTOMATION_BENEFICIARY_OTHER_TEAMS = 'other-teams'; + +export const USAGE_MODE_KEY = 'usageModes'; +export const USAGE_MODE_CONNECT_TO_DB = 'connect-internal-db'; +export const USAGE_MODE_BUILD_BE_SERVICES = 'build-be-services'; +export const USAGE_MODE_MANIPULATE_FILES = 'manipulate-files'; + +export const REPORTED_SOURCE_KEY = 'reportedSource'; +export const REPORTED_SOURCE_OTHER_KEY = 'reportedSourceOther'; +export const REPORTED_SOURCE_GOOGLE = 'google'; +export const REPORTED_SOURCE_TWITTER = 'twitter'; +export const REPORTED_SOURCE_LINKEDIN = 'linkedin'; +export const REPORTED_SOURCE_YOUTUBE = 'youtube'; +export const REPORTED_SOURCE_FRIEND = 'friend'; +export const REPORTED_SOURCE_PODCAST = 'podcast'; +export const REPORTED_SOURCE_EVENT = 'event'; +export const REPORTED_SOURCE_OTHER = 'other'; + +export const AUTOMATION_GOAL_KEY = 'automationGoal'; +export const DEVOPS_AUTOMATION_GOAL_KEY = 'automationGoalDevops'; +export const DEVOPS_AUTOMATION_GOAL_OTHER_KEY = 'automationGoalDevopsOther'; +export const DEVOPS_AUTOMATION_OTHER = 'other'; +export const DEVOPS_AUTOMATION_CI_CD_GOAL = 'ci-cd'; +export const DEVOPS_AUTOMATION_CLOUD_INFRASTRUCTURE_ORCHESTRATION_GOAL = + 'cloud-infrastructure-orchestration'; +export const DEVOPS_AUTOMATION_DATA_SYNCING_GOAL = 'data-syncing'; +export const DEVOPS_INCIDENT_RESPONSE_GOAL = 'incident-response'; +export const DEVOPS_MONITORING_AND_ALERTING_GOAL = 'monitoring-alerting'; +export const DEVOPS_REPORTING_GOAL = 'reporting'; +export const DEVOPS_TICKETING_SYSTEMS_INTEGRATIONS_GOAL = 'ticketing-systems-integrations'; + +export const CUSTOMER_INTEGRATIONS_GOAL = 'customer-integrations'; +export const CUSTOMER_SUPPORT_GOAL = 'customer-support'; +export const ENGINEERING_GOAL = 'engineering'; +export const FINANCE_ACCOUNTING_GOAL = 'finance-accounting'; +export const HR_GOAL = 'hr'; +export const OPERATIONS_GOAL = 'operations'; +export const PRODUCT_GOAL = 'product'; +export const SALES_MARKETING_GOAL = 'sales-marketing'; +export const SECURITY_GOAL = 'security'; +export const OTHER_AUTOMATION_GOAL = 'other'; +export const NOT_SURE_YET_GOAL = 'not-sure-yet'; + +export const ROLE_KEY = 'role'; +export const ROLE_OTHER_KEY = 'roleOther'; +export const ROLE_BUSINESS_OWNER = 'business-owner'; +export const ROLE_CUSTOMER_SUPPORT = 'customer-support'; +export const ROLE_DATA_SCIENCE = 'data-science'; +export const ROLE_DEVOPS = 'devops'; +export const ROLE_IT = 'it'; +export const ROLE_ENGINEERING = 'engineering'; +export const ROLE_SALES_AND_MARKETING = 'sales-and-marketing'; +export const ROLE_SECURITY = 'security'; +export const ROLE_OTHER = 'other'; + +/** END OF PERSONALIZATION SURVEY */ + +export const MODAL_CANCEL = 'cancel'; +export const MODAL_CONFIRM = 'confirm'; +export const MODAL_CLOSE = 'close'; + +export const ILLEGAL_FOLDER_CHARACTERS = [ + '[', + ']', + '^', + '\\', + '/', + ':', + '*', + '?', + '"', + '<', + '>', + '|', +]; +export const FOLDER_NAME_ILLEGAL_CHARACTERS_REGEX = new RegExp( + `[${ILLEGAL_FOLDER_CHARACTERS.map((char) => { + return char.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); + }).join('')}]`, +); + +export const FOLDER_NAME_ONLY_DOTS_REGEX = /^\.+$/; +export const FOLDER_NAME_MAX_LENGTH = 100; +export const VALID_EMAIL_REGEX = + /^(([^<>()[\]\\.,;:\s@"]+(\.[^<>()[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/; +export const VALID_WORKFLOW_IMPORT_URL_REGEX = /^http[s]?:\/\/.*\.json$/i; +export const LOCAL_STORAGE_ACTIVATION_FLAG = 'N8N_HIDE_ACTIVATION_ALERT'; +export const LOCAL_STORAGE_PIN_DATA_DISCOVERY_NDV_FLAG = 'N8N_PIN_DATA_DISCOVERY_NDV'; +export const LOCAL_STORAGE_PIN_DATA_DISCOVERY_CANVAS_FLAG = 'N8N_PIN_DATA_DISCOVERY_CANVAS'; +export const LOCAL_STORAGE_MAPPING_IS_ONBOARDED = 'N8N_MAPPING_ONBOARDED'; +export const LOCAL_STORAGE_AUTOCOMPLETE_IS_ONBOARDED = 'N8N_AUTOCOMPLETE_ONBOARDED'; +export const LOCAL_STORAGE_TABLE_HOVER_IS_ONBOARDED = 'N8N_TABLE_HOVER_ONBOARDED'; +export const LOCAL_STORAGE_MAIN_PANEL_RELATIVE_WIDTH = 'N8N_MAIN_PANEL_RELATIVE_WIDTH'; +export const LOCAL_STORAGE_NDV_DIMENSIONS = 'N8N_NDV_DIMENSIONS'; +export const LOCAL_STORAGE_ACTIVE_MODAL = 'N8N_ACTIVE_MODAL'; +export const LOCAL_STORAGE_THEME = 'N8N_THEME'; +export const LOCAL_STORAGE_EXPERIMENT_OVERRIDES = 'N8N_EXPERIMENT_OVERRIDES'; +export const LOCAL_STORAGE_HIDE_GITHUB_STAR_BUTTON = 'N8N_HIDE_HIDE_GITHUB_STAR_BUTTON'; +export const LOCAL_STORAGE_NDV_INPUT_PANEL_DISPLAY_MODE = 'N8N_NDV_INPUT_PANEL_DISPLAY_MODE'; +export const LOCAL_STORAGE_NDV_OUTPUT_PANEL_DISPLAY_MODE = 'N8N_NDV_OUTPUT_PANEL_DISPLAY_MODE'; +export const LOCAL_STORAGE_LOGS_PANEL_OPEN = 'N8N_LOGS_PANEL_OPEN'; +export const LOCAL_STORAGE_TURN_OFF_WORKFLOW_SUGGESTIONS = 'N8N_TURN_OFF_WORKFLOW_SUGGESTIONS'; +export const LOCAL_STORAGE_LOGS_SYNC_SELECTION = 'N8N_LOGS_SYNC_SELECTION_ENABLED'; +export const LOCAL_STORAGE_LOGS_PANEL_DETAILS_PANEL = 'N8N_LOGS_DETAILS_PANEL'; +export const LOCAL_STORAGE_LOGS_PANEL_DETAILS_PANEL_SUB_NODE = 'N8N_LOGS_DETAILS_PANEL_SUB_NODE'; +export const LOCAL_STORAGE_WORKFLOW_LIST_PREFERENCES_KEY = 'N8N_WORKFLOWS_LIST_PREFERENCES'; +export const LOCAL_STORAGE_EXPERIMENTAL_DOCKED_NODE_SETTINGS = + 'N8N_EXPERIMENTAL_DOCKED_NODE_SETTINGS'; +export const LOCAL_STORAGE_READ_WHATS_NEW_ARTICLES = 'N8N_READ_WHATS_NEW_ARTICLES'; +export const LOCAL_STORAGE_DISMISSED_WHATS_NEW_CALLOUT = 'N8N_DISMISSED_WHATS_NEW_CALLOUT'; +export const LOCAL_STORAGE_NDV_PANEL_WIDTH = 'N8N_NDV_PANEL_WIDTH'; +export const LOCAL_STORAGE_FOCUS_PANEL = 'N8N_FOCUS_PANEL'; +export const LOCAL_STORAGE_EXPERIMENTAL_DISMISSED_SUGGESTED_WORKFLOWS = + 'N8N_EXPERIMENTAL_DISMISSED_SUGGESTED_WORKFLOWS'; + +export const BASE_NODE_SURVEY_URL = 'https://n8n-community.typeform.com/to/BvmzxqYv#nodename='; +export const COMMUNITY_PLUS_DOCS_URL = + 'https://docs.n8n.io/hosting/community-edition-features/#registered-community-edition'; +export const RELEASE_NOTES_URL = 'https://docs.n8n.io/release-notes/'; + +export const HIRING_BANNER = ` + ////// + /////////// + ///// //// + /////////////////// //// + ////////////////////// //// + /////// /////// //// ///////////// + //////////// //////////// //// /////// + //// //// //// //// //// +///// ///////////// ////////// + ///// //// //// //// //// + //////////// //////////// //// //////// + /////// ////// //// ///////////// + ///////////// //// + ////////// //// + //// //// + /////////// + ////// + +Love n8n? Help us build the future of automation! https://n8n.io/careers?utm_source=n8n_user&utm_medium=console_output +`; + +export const TEMPLATES_NODES_FILTER = ['n8n-nodes-base.start', 'n8n-nodes-base.respondToWebhook']; + +export const enum VIEWS { + HOMEPAGE = 'Homepage', + COLLECTION = 'TemplatesCollectionView', + EXECUTIONS = 'Executions', + EXECUTION_PREVIEW = 'ExecutionPreview', + EXECUTION_DEBUG = 'ExecutionDebug', + EXECUTION_HOME = 'ExecutionsLandingPage', + TEMPLATE = 'TemplatesWorkflowView', + TEMPLATE_SETUP = 'TemplatesWorkflowSetupView', + TEMPLATES = 'TemplatesSearchView', + CREDENTIALS = 'CredentialsView', + VARIABLES = 'VariablesView', + NEW_WORKFLOW = 'NodeViewNew', + WORKFLOW = 'NodeViewExisting', + DEMO = 'WorkflowDemo', + TEMPLATE_IMPORT = 'WorkflowTemplate', + WORKFLOW_ONBOARDING = 'WorkflowOnboarding', + SIGNIN = 'SigninView', + SIGNUP = 'SignupView', + SIGNOUT = 'SignoutView', + SETUP = 'SetupView', + FORGOT_PASSWORD = 'ForgotMyPasswordView', + CHANGE_PASSWORD = 'ChangePasswordView', + SETTINGS = 'Settings', + USERS_SETTINGS = 'UsersSettings', + LDAP_SETTINGS = 'LdapSettings', + PERSONAL_SETTINGS = 'PersonalSettings', + API_SETTINGS = 'APISettings', + NOT_FOUND = 'NotFoundView', + COMMUNITY_NODES = 'CommunityNodes', + WORKFLOWS = 'WorkflowsView', + WORKFLOW_EXECUTIONS = 'WorkflowExecutions', + EVALUATION = 'Evaluation', + EVALUATION_EDIT = 'EvaluationEdit', + EVALUATION_RUNS_DETAIL = 'EvaluationRunsDetail', + USAGE = 'Usage', + LOG_STREAMING_SETTINGS = 'LogStreamingSettingsView', + SSO_SETTINGS = 'SSoSettings', + EXTERNAL_SECRETS_SETTINGS = 'ExternalSecretsSettings', + SAML_ONBOARDING = 'SamlOnboarding', + SOURCE_CONTROL = 'SourceControl', + MFA_VIEW = 'MfaView', + WORKFLOW_HISTORY = 'WorkflowHistory', + WORKER_VIEW = 'WorkerView', + PROJECTS = 'Projects', + PROJECT_DETAILS = 'ProjectDetails', + PROJECTS_WORKFLOWS = 'ProjectsWorkflows', + PROJECTS_CREDENTIALS = 'ProjectsCredentials', + PROJECT_SETTINGS = 'ProjectSettings', + PROJECTS_EXECUTIONS = 'ProjectsExecutions', + FOLDERS = 'Folders', + PROJECTS_FOLDERS = 'ProjectsFolders', + INSIGHTS = 'Insights', + SHARED_WITH_ME = 'SharedWithMe', + SHARED_WORKFLOWS = 'SharedWorkflows', + SHARED_CREDENTIALS = 'SharedCredentials', + ENTITY_NOT_FOUND = 'EntityNotFound', + ENTITY_UNAUTHORIZED = 'EntityUnAuthorized', +} + +export const EDITABLE_CANVAS_VIEWS = [VIEWS.WORKFLOW, VIEWS.NEW_WORKFLOW, VIEWS.EXECUTION_DEBUG]; +export const VISIBLE_LOGS_VIEWS = [...EDITABLE_CANVAS_VIEWS, VIEWS.EXECUTION_PREVIEW]; + +export const TEST_PIN_DATA = [ + { + name: 'First item', + code: 1, + }, + { + name: 'Second item', + code: 2, + }, +]; +export const MAPPING_PARAMS = [ + '$binary', + '$data', + '$env', + '$evaluateExpression', + '$execution', + '$ifEmpty', + '$input', + '$item', + '$jmespath', + '$fromAI', + '$json', + '$node', + '$now', + '$parameter', + '$parameters', + '$position', + '$prevNode', + '$resumeWebhookUrl', + '$runIndex', + '$today', + '$vars', + '$workflow', + '$nodeVersion', +]; + +export const DEFAULT_STICKY_HEIGHT = 160; +export const DEFAULT_STICKY_WIDTH = 240; + +export const enum WORKFLOW_MENU_ACTIONS { + DUPLICATE = 'duplicate', + DOWNLOAD = 'download', + IMPORT_FROM_URL = 'import-from-url', + IMPORT_FROM_FILE = 'import-from-file', + PUSH = 'push', + SETTINGS = 'settings', + DELETE = 'delete', + ARCHIVE = 'archive', + UNARCHIVE = 'unarchive', + RENAME = 'rename', + CHANGE_OWNER = 'change-owner', +} + +/** + * Enterprise edition + */ +export const EnterpriseEditionFeature: Record< + EnterpriseEditionFeatureKey, + EnterpriseEditionFeatureValue +> = { + AdvancedExecutionFilters: 'advancedExecutionFilters', + Sharing: 'sharing', + Ldap: 'ldap', + LogStreaming: 'logStreaming', + Variables: 'variables', + Saml: 'saml', + Oidc: 'oidc', + EnforceMFA: 'mfaEnforcement', + SourceControl: 'sourceControl', + ExternalSecrets: 'externalSecrets', + AuditLogs: 'auditLogs', + DebugInEditor: 'debugInEditor', + WorkflowHistory: 'workflowHistory', + WorkerView: 'workerView', + AdvancedPermissions: 'advancedPermissions', + ApiKeyScopes: 'apiKeyScopes', +}; + +export const MAIN_NODE_PANEL_WIDTH = 390; + +export const enum MAIN_HEADER_TABS { + WORKFLOW = 'workflow', + EXECUTIONS = 'executions', + SETTINGS = 'settings', + EVALUATION = 'evaluation', +} +export const CURL_IMPORT_NOT_SUPPORTED_PROTOCOLS = [ + 'ftp', + 'ftps', + 'dict', + 'imap', + 'imaps', + 'ldap', + 'ldaps', + 'mqtt', + 'pop', + 'pop3s', + 'rtmp', + 'rtsp', + 'scp', + 'sftp', + 'smb', + 'smbs', + 'smtp', + 'smtps', + 'telnet', + 'tftp', +]; + +export const CURL_IMPORT_NODES_PROTOCOLS: { [key: string]: string } = { + ftp: 'FTP', + ftps: 'FTP', + ldap: 'LDAP', + ldaps: 'LDAP', + mqtt: 'MQTT', + imap: 'IMAP', + imaps: 'IMAP', +}; + +export const enum SignInType { + LDAP = 'ldap', + EMAIL = 'email', + OIDC = 'oidc', +} + +export const N8N_SALES_EMAIL = 'sales@n8n.io'; + +export const N8N_CONTACT_EMAIL = 'contact@n8n.io'; + +export const EXPRESSION_EDITOR_PARSER_TIMEOUT = 15_000; // ms + +export const KEEP_AUTH_IN_NDV_FOR_NODES = [ + HTTP_REQUEST_NODE_TYPE, + HTTP_REQUEST_TOOL_NODE_TYPE, + WEBHOOK_NODE_TYPE, + WAIT_NODE_TYPE, + DISCORD_NODE_TYPE, + CHAT_TRIGGER_NODE_TYPE, + FORM_TRIGGER_NODE_TYPE, +]; +export const MAIN_AUTH_FIELD_NAME = 'authentication'; +export const NODE_RESOURCE_FIELD_NAME = 'resource'; + +export const CANVAS_ZOOMED_VIEW_EXPERIMENT = { + name: 'canvas_zoomed_view', + control: 'control', + variant: 'variant', +}; + +export const NDV_UI_OVERHAUL_EXPERIMENT = { + name: '029_ndv_ui_overhaul', + control: 'control', + variant: 'variant', +}; + +export const WORKFLOW_BUILDER_EXPERIMENT = { + name: '036_workflow_builder_agent', + control: 'control', + variant: 'variant', +}; + +export const EXTRA_TEMPLATE_LINKS_EXPERIMENT = { + name: '034_extra_template_links', + control: 'control', + variant: 'variant', +}; + +export const TEMPLATE_ONBOARDING_EXPERIMENT = { + name: '035_template_onboarding', + control: 'control', + variantStarterPack: 'variant-starter-pack', + variantSuggestedTemplates: 'variant-suggested-templates', +}; + +export const BATCH_11AUG_EXPERIMENT = { + name: '37_onboarding_experiments_batch_aug11', + control: 'control', + variantReadyToRun: 'variant-ready-to-run-workflows', + variantReadyToRun2: 'variant-ready-to-run-workflows_v2', + variantReadyToRun3: 'variant-ready-to-run-workflows_v3', +}; + +export const PRE_BUILT_AGENTS_EXPERIMENT = { + name: '038_pre_built_agents', + control: 'control', + variant: 'variant', +}; + +export const TEMPLATE_RECO_V2 = { + name: '039_template_onboarding_v2', + control: 'control', + variant: 'variant', +}; + +export const EXPERIMENTS_TO_TRACK = [ + WORKFLOW_BUILDER_EXPERIMENT.name, + EXTRA_TEMPLATE_LINKS_EXPERIMENT.name, + TEMPLATE_ONBOARDING_EXPERIMENT.name, + NDV_UI_OVERHAUL_EXPERIMENT.name, + BATCH_11AUG_EXPERIMENT.name, + PRE_BUILT_AGENTS_EXPERIMENT.name, + TEMPLATE_RECO_V2.name, +]; + +export const MFA_FORM = { + MFA_TOKEN: 'MFA_TOKEN', + MFA_RECOVERY_CODE: 'MFA_RECOVERY_CODE', +} as const; + +export const MFA_AUTHENTICATION_REQUIRED_ERROR_CODE = 998; + +export const MFA_AUTHENTICATION_CODE_WINDOW_EXPIRED = 997; + +export const MFA_AUTHENTICATION_CODE_INPUT_MAX_LENGTH = 6; + +export const MFA_AUTHENTICATION_RECOVERY_CODE_INPUT_MAX_LENGTH = 36; + +export const NODE_TYPES_EXCLUDED_FROM_OUTPUT_NAME_APPEND = [ + FILTER_NODE_TYPE, + SWITCH_NODE_TYPE, + REMOVE_DUPLICATES_NODE_TYPE, + RESPOND_TO_WEBHOOK_NODE_TYPE, +]; + +type ClearOutgoingConnectonsEvents = { + [nodeName: string]: { + parameterPaths: string[]; + eventTypes: string[]; + }; +}; + +export const SHOULD_CLEAR_NODE_OUTPUTS: ClearOutgoingConnectonsEvents = { + [SWITCH_NODE_TYPE]: { + parameterPaths: ['parameters.rules.values'], + eventTypes: ['optionsOrderChanged'], + }, +}; + +export const ALLOWED_HTML_ATTRIBUTES = ['href', 'name', 'target', 'title', 'class', 'id', 'style']; + +export const ALLOWED_HTML_TAGS = [ + 'p', + 'strong', + 'b', + 'code', + 'a', + 'br', + 'i', + 'ul', + 'li', + 'em', + 'small', + 'details', + 'summary', + 'mark', +]; + +export const CLOUD_CHANGE_PLAN_PAGE = window.location.host.includes('stage-app.n8n.cloud') + ? 'https://stage-app.n8n.cloud/account/change-plan' + : 'https://app.n8n.cloud/account/change-plan'; + +export const CLOUD_TRIAL_CHECK_INTERVAL = 5000; + +// A path that does not exist so that nothing is selected by default +export const nonExistingJsonPath = '_!^&*'; + +// Ask AI +export const ASK_AI_MAX_PROMPT_LENGTH = 600; +export const ASK_AI_MIN_PROMPT_LENGTH = 15; +export const ASK_AI_LOADING_DURATION_MS = 12000; +export const ASK_AI_SLIDE_OUT_DURATION_MS = 200; + +export const APPEND_ATTRIBUTION_DEFAULT_PATH = 'parameters.options.appendAttribution'; + +export const DRAG_EVENT_DATA_KEY = 'nodesAndConnections'; + +export const NOT_DUPLICATABLE_NODE_TYPES = [FORM_TRIGGER_NODE_TYPE]; +export const UPDATE_WEBHOOK_ID_NODE_TYPES = [FORM_TRIGGER_NODE_TYPE]; + +export const CREATOR_HUB_URL = 'https://creators.n8n.io/hub'; + +/** + * Units of time in milliseconds + */ +export const TIME = { + SECOND: 1000, + MINUTE: 60 * 1000, + HOUR: 60 * 60 * 1000, + DAY: 24 * 60 * 60 * 1000, +}; + +export const THREE_DAYS_IN_MILLIS = 3 * TIME.DAY; +export const SEVEN_DAYS_IN_MILLIS = 7 * TIME.DAY; +export const SIX_MONTHS_IN_MILLIS = 6 * 30 * TIME.DAY; + +/** + * Mouse button codes + */ + +/** + * Mapping for the MouseEvent.button property that indicates which button was pressed + * on the mouse to trigger the event. + * + * @docs https://www.w3.org/TR/uievents/#dom-mouseevent-button + */ +export const MOUSE_EVENT_BUTTON = { + PRIMARY: 0, + MIDDLE: 1, + SECONDARY: 2, + BROWSER_BACK: 3, + BROWSER_FORWARD: 4, +} as const; + +/** + * Mapping for the MouseEvent.buttons property that indicates which buttons are pressed + * on the mouse when a mouse event is triggered. If multiple buttons are pressed, + * the values are added together to produce a new number. + * + * @docs https://www.w3.org/TR/uievents/#dom-mouseevent-buttons + */ +export const MOUSE_EVENT_BUTTONS = { + NONE: 0, + PRIMARY: 1, + SECONDARY: 2, + MIDDLE: 4, + BROWSER_BACK: 8, + BROWSER_FORWARD: 16, +} as const; + +/** + * Urls used to route users to the right template repository + */ +export const TEMPLATES_URLS = { + DEFAULT_API_HOST: 'https://api.n8n.io/api/', + BASE_WEBSITE_URL: 'https://n8n.io/workflows/', + UTM_QUERY: { + utm_source: 'n8n_app', + utm_medium: 'template_library', + }, +}; + +export const INSECURE_CONNECTION_WARNING = ` + +

🚫

+

Your n8n server is configured to use a secure cookie,
however you are either visiting this via an insecure URL, or using Safari. +

+
+
+ To fix this, please consider the following options: +
    +
  • Setup TLS/HTTPS (recommended), or
  • +
  • If you are running this locally, and not using Safari, try using localhost instead
  • +
  • If you prefer to disable this security feature (not recommended), set the environment variable N8N_SECURE_COOKIE to false
  • +
+
+`; + +/** + * Injection Keys + */ + +export const CanvasKey = 'canvas' as unknown as InjectionKey; +export const CanvasNodeKey = 'canvasNode' as unknown as InjectionKey; +export const CanvasNodeHandleKey = + 'canvasNodeHandle' as unknown as InjectionKey; +export const PopOutWindowKey: InjectionKey> = Symbol('PopOutWindow'); +export const ExpressionLocalResolveContextSymbol: InjectionKey< + ComputedRef +> = Symbol('ExpressionLocalResolveContext'); + +export const APP_MODALS_ELEMENT_ID = 'app-modals'; +export const CODEMIRROR_TOOLTIP_CONTAINER_ELEMENT_ID = 'cm-tooltip-container'; + +export const AI_NODES_PACKAGE_NAME = '@n8n/n8n-nodes-langchain'; + +export const AI_ASSISTANT_MAX_CONTENT_LENGTH = 100; // in kilobytes + +export const RUN_DATA_DEFAULT_PAGE_SIZE = 25; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/constants.workflows 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/constants.workflows 2.ts new file mode 100755 index 00000000..afe1fb5e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/constants.workflows 2.ts @@ -0,0 +1,178 @@ +import { NodeConnectionTypes } from 'n8n-workflow'; +import type { INodeUi } from './Interface'; +import type { WorkflowDataCreate } from '@n8n/rest-api-client/api/workflows'; + +export const SAMPLE_SUBWORKFLOW_TRIGGER_ID = 'c055762a-8fe7-4141-a639-df2372f30060'; +export const SAMPLE_SUBWORKFLOW_WORKFLOW: WorkflowDataCreate = { + name: 'My Sub-Workflow', + nodes: [ + { + id: SAMPLE_SUBWORKFLOW_TRIGGER_ID, + typeVersion: 1.1, + name: 'When Executed by Another Workflow', + type: 'n8n-nodes-base.executeWorkflowTrigger', + position: [260, 340], + parameters: {}, + }, + { + id: 'b5942df6-0160-4ef7-965d-57583acdc8aa', + name: 'Replace me with your logic', + type: 'n8n-nodes-base.noOp', + position: [520, 340], + parameters: {}, + }, + ] as INodeUi[], + connections: { + 'When Executed by Another Workflow': { + main: [ + [ + { + node: 'Replace me with your logic', + type: NodeConnectionTypes.Main, + index: 0, + }, + ], + ], + }, + }, + settings: { + executionOrder: 'v1', + }, + pinData: {}, +}; + +export const SAMPLE_EVALUATION_WORKFLOW: WorkflowDataCreate = { + name: 'My Evaluation Sub-Workflow', + nodes: [ + { + parameters: { + inputSource: 'passthrough', + }, + id: 'c20c82d6-5f71-4fb6-a398-a10a6e6944c5', + name: 'When called by a test run', + type: 'n8n-nodes-base.executeWorkflowTrigger', + typeVersion: 1.1, + position: [80, 440], + }, + { + parameters: {}, + id: '4e14d09a-2699-4659-9a20-e4f4965f473e', + name: 'Replace me', + type: 'n8n-nodes-base.noOp', + typeVersion: 1, + position: [340, 440], + }, + { + parameters: { + metrics: { + assignments: [ + { + name: 'latency', + value: + '={{(() => {\n const newExecutionRuns = Object.values($json.newExecution)\n .reduce((acc, node) => {\n acc.push(node.runs.filter(run => run.output.main !== undefined))\n return acc\n }, []).flat()\n\n const latency = newExecutionRuns.reduce((acc, run) => acc + run.executionTime, 0)\n\n return latency\n})()}}', + type: 'number', + id: '1ebc15e9-f079-4d1f-a08d-d4880ea0ddb5', + }, + ], + }, + }, + type: 'n8n-nodes-base.evaluationMetrics', + id: '33e2e94a-ec48-4e7b-b750-f56718d5105c', + name: 'Return metric(s)', + typeVersion: 1, + position: [600, 440], + }, + { + parameters: { + content: + "### 1. Receive execution data\n\nThis workflow will be passed:\n- The benchmark execution (`$json.originalExecution`)\n- The evaluation execution (`$json.newExecution`) produced by re-running the workflow using trigger data from benchmark execution\n\n\nWe've pinned some example data to get you started", + height: 458, + width: 257, + color: 7, + }, + id: '55e5e311-e285-4000-bd1e-900bc3a07da3', + name: 'Sticky Note', + type: 'n8n-nodes-base.stickyNote', + typeVersion: 1, + position: [0, 140], + }, + { + parameters: { + content: + '### 2. Evaluation logic\n\nReplace with logic to perform the tests you want to perform.\n\nE.g. compare against benchmark data, use LLMs to evaluate sentiment, compare token usage, and more.', + height: 459, + width: 237, + color: 7, + }, + id: 'ea74e341-ff9c-456a-83f0-c10758f0844a', + name: 'Sticky Note1', + type: 'n8n-nodes-base.stickyNote', + typeVersion: 1, + position: [280, 140], + }, + { + parameters: { + content: + '### 3. Return metrics\n\nDefine evaluation metrics you want to show on your report.\n\n__Note:__ Metrics need to be numeric', + height: 459, + width: 217, + color: 7, + }, + id: '9b3c3408-19e1-43d5-b2bb-29d61bd129b8', + name: 'Sticky Note2', + type: 'n8n-nodes-base.stickyNote', + typeVersion: 1, + position: [540, 140], + }, + { + parameters: { + content: + '## Evaluation workflow\nThis workflow is used to define evaluation logic and calculate metrics. You can compare against benchmark executions, use LLMs to evaluate, or write any other logic you choose.', + height: 105, + width: 754, + }, + id: '0fc1356e-6238-4557-a920-e50806c1ec13', + name: 'Sticky Note3', + type: 'n8n-nodes-base.stickyNote', + typeVersion: 1, + position: [0, 0], + }, + ], + connections: { + 'When called by a test run': { + main: [ + [ + { + node: 'Replace me', + type: NodeConnectionTypes.Main, + index: 0, + }, + ], + ], + }, + 'Replace me': { + main: [ + [ + { + node: 'Return metric(s)', + type: NodeConnectionTypes.Main, + index: 0, + }, + ], + ], + }, + }, + pinData: { + 'When called by a test run': [ + { + json: { + newExecution: {}, + originalExecution: {}, + }, + }, + ], + }, + settings: { + executionOrder: 'v1', + }, +}; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/init 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/init 2.ts new file mode 100755 index 00000000..82a0cef3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/init 2.ts @@ -0,0 +1,224 @@ +import { h } from 'vue'; +import { useCloudPlanStore } from '@/stores/cloudPlan.store'; +import { useNodeTypesStore } from '@/stores/nodeTypes.store'; +import { useRootStore } from '@n8n/stores/useRootStore'; +import { useSettingsStore } from '@/stores/settings.store'; +import { useSourceControlStore } from '@/stores/sourceControl.store'; +import { useUsersStore } from '@/stores/users.store'; +import { useExternalHooks } from '@/composables/useExternalHooks'; +import { useVersionsStore } from '@/stores/versions.store'; +import { useProjectsStore } from '@/stores/projects.store'; +import { useRolesStore } from './stores/roles.store'; +import { useInsightsStore } from '@/features/insights/insights.store'; +import { useToast } from '@/composables/useToast'; +import { useI18n } from '@n8n/i18n'; +import SourceControlInitializationErrorMessage from '@/components/SourceControlInitializationErrorMessage.vue'; +import { useSSOStore } from '@/stores/sso.store'; +import { EnterpriseEditionFeature, VIEWS } from '@/constants'; +import type { UserManagementAuthenticationMethod } from '@/Interface'; +import { useUIStore } from '@/stores/ui.store'; +import type { BannerName } from '@n8n/api-types'; +import { useNpsSurveyStore } from '@/stores/npsSurvey.store'; +import { usePostHog } from '@/stores/posthog.store'; +import { useTelemetry } from '@/composables/useTelemetry'; +import { useRBACStore } from '@/stores/rbac.store'; +import { + registerModuleProjectTabs, + registerModuleResources, + registerModuleModals, +} from '@/moduleInitializer/moduleInitializer'; + +export const state = { + initialized: false, +}; +let authenticatedFeaturesInitialized = false; + +/** + * Initializes the core application stores and hooks + * This is called once, when the first route is loaded. + */ +export async function initializeCore() { + if (state.initialized) { + return; + } + + const settingsStore = useSettingsStore(); + const usersStore = useUsersStore(); + const versionsStore = useVersionsStore(); + const ssoStore = useSSOStore(); + const uiStore = useUIStore(); + + const toast = useToast(); + const i18n = useI18n(); + + registerAuthenticationHooks(); + + /** + * Initialize stores + */ + + try { + await settingsStore.initialize(); + } catch (error) { + toast.showToast({ + title: i18n.baseText('startupError'), + message: i18n.baseText('startupError.message'), + type: 'error', + duration: 0, + }); + } + + ssoStore.initialize({ + authenticationMethod: settingsStore.userManagement + .authenticationMethod as UserManagementAuthenticationMethod, + config: settingsStore.settings.sso, + features: { + saml: settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Saml], + ldap: settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Ldap], + oidc: settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Oidc], + }, + }); + + const banners: BannerName[] = []; + if (settingsStore.isEnterpriseFeatureEnabled.showNonProdBanner) { + banners.push('NON_PRODUCTION_LICENSE'); + } + if ( + !(settingsStore.settings.banners?.dismissed || []).includes('V1') && + settingsStore.settings.versionCli.startsWith('1.') + ) { + banners.push('V1'); + } + uiStore.initialize({ + banners, + }); + + versionsStore.initialize(settingsStore.settings.versionNotifications); + + void useExternalHooks().run('app.mount'); + + if (!settingsStore.isPreviewMode) { + await usersStore.initialize({ + quota: settingsStore.userManagement.quota, + }); + } + + state.initialized = true; +} + +/** + * Initializes the features of the application that require an authenticated user + */ +export async function initializeAuthenticatedFeatures( + initialized: boolean = authenticatedFeaturesInitialized, + routeName?: string, +) { + if (initialized) { + return; + } + + const usersStore = useUsersStore(); + if (!usersStore.currentUser) { + return; + } + + const i18n = useI18n(); + const toast = useToast(); + const sourceControlStore = useSourceControlStore(); + const settingsStore = useSettingsStore(); + const rootStore = useRootStore(); + const nodeTypesStore = useNodeTypesStore(); + const cloudPlanStore = useCloudPlanStore(); + const projectsStore = useProjectsStore(); + const rolesStore = useRolesStore(); + const insightsStore = useInsightsStore(); + const uiStore = useUIStore(); + const versionsStore = useVersionsStore(); + + if (sourceControlStore.isEnterpriseSourceControlEnabled) { + try { + await sourceControlStore.getPreferences(); + } catch (e) { + toast.showMessage({ + title: i18n.baseText('settings.sourceControl.connection.error'), + message: h(SourceControlInitializationErrorMessage), + type: 'error', + duration: 0, + }); + console.error('Failed to initialize source control store', e); + } + } + + if (rootStore.defaultLocale !== 'en') { + await nodeTypesStore.getNodeTranslationHeaders(); + } + + if (settingsStore.isCloudDeployment) { + void cloudPlanStore + .initialize() + .then(() => { + if (cloudPlanStore.userIsTrialing) { + if (cloudPlanStore.trialExpired) { + uiStore.pushBannerToStack('TRIAL_OVER'); + } else { + uiStore.pushBannerToStack('TRIAL'); + } + } else if (cloudPlanStore.currentUserCloudInfo?.confirmed === false) { + uiStore.pushBannerToStack('EMAIL_CONFIRMATION'); + } + }) + .catch((error) => { + console.error('Failed to initialize cloud plan store:', error); + }); + } + + if (insightsStore.isSummaryEnabled) { + void insightsStore.weeklySummary.execute(); + } + + // Don't check for new versions in preview mode or demo view (ex: executions iframe) + if (!settingsStore.isPreviewMode && routeName !== VIEWS.DEMO) { + void versionsStore.checkForNewVersions(); + } + + await Promise.all([ + projectsStore.getMyProjects(), + projectsStore.getPersonalProject(), + projectsStore.getProjectsCount(), + rolesStore.fetchRoles(), + ]); + + // Initialize modules + registerModuleResources(); + registerModuleProjectTabs(); + registerModuleModals(); + + authenticatedFeaturesInitialized = true; +} + +function registerAuthenticationHooks() { + const rootStore = useRootStore(); + const usersStore = useUsersStore(); + const cloudPlanStore = useCloudPlanStore(); + const postHogStore = usePostHog(); + const uiStore = useUIStore(); + const npsSurveyStore = useNpsSurveyStore(); + const telemetry = useTelemetry(); + const RBACStore = useRBACStore(); + + usersStore.registerLoginHook((user) => { + RBACStore.setGlobalScopes(user.globalScopes ?? []); + telemetry.identify(rootStore.instanceId, user.id); + postHogStore.init(user.featureFlags); + npsSurveyStore.setupNpsSurveyOnLogin(user.id, user.settings); + }); + + usersStore.registerLogoutHook(() => { + uiStore.clearBannerStack(); + npsSurveyStore.resetNpsSurveyOnLogOut(); + postHogStore.reset(); + cloudPlanStore.reset(); + telemetry.reset(); + RBACStore.setGlobalScopes([]); + }); +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/init.test 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/init.test 2.ts new file mode 100755 index 00000000..22a74016 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/init.test 2.ts @@ -0,0 +1,340 @@ +import { useUsersStore } from '@/stores/users.store'; +import { useCloudPlanStore } from '@/stores/cloudPlan.store'; +import { useSourceControlStore } from '@/stores/sourceControl.store'; +import { useNodeTypesStore } from '@/stores/nodeTypes.store'; +import { useRootStore } from '@n8n/stores/useRootStore'; +import { state, initializeAuthenticatedFeatures, initializeCore } from '@/init'; +import { createTestingPinia } from '@pinia/testing'; +import { setActivePinia } from 'pinia'; +import { useSettingsStore } from '@/stores/settings.store'; +import { useVersionsStore } from '@/stores/versions.store'; +import { AxiosError } from 'axios'; +import merge from 'lodash/merge'; +import { mockedStore, SETTINGS_STORE_DEFAULT_STATE } from '@/__tests__/utils'; +import { STORES } from '@n8n/stores'; +import { useSSOStore } from '@/stores/sso.store'; +import { UserManagementAuthenticationMethod } from '@/Interface'; +import type { IUser } from '@n8n/rest-api-client/api/users'; +import { EnterpriseEditionFeature } from '@/constants'; +import { useUIStore } from '@/stores/ui.store'; +import type { Cloud } from '@n8n/rest-api-client'; + +const showMessage = vi.fn(); +const showToast = vi.fn(); + +vi.mock('@/composables/useToast', () => ({ + useToast: () => ({ showMessage, showToast }), +})); + +vi.mock('@/stores/users.store', () => ({ + useUsersStore: vi.fn().mockReturnValue({ + initialize: vi.fn(), + registerLoginHook: vi.fn(), + registerLogoutHook: vi.fn(), + }), +})); + +vi.mock('@n8n/stores/useRootStore', () => ({ + useRootStore: vi.fn(), +})); + +describe('Init', () => { + let settingsStore: ReturnType; + let cloudPlanStore: ReturnType>; + let sourceControlStore: ReturnType; + let usersStore: ReturnType; + let nodeTypesStore: ReturnType; + let versionsStore: ReturnType; + let ssoStore: ReturnType; + let uiStore: ReturnType; + + beforeEach(() => { + setActivePinia( + createTestingPinia({ + initialState: { + [STORES.SETTINGS]: merge({}, SETTINGS_STORE_DEFAULT_STATE), + }, + }), + ); + + settingsStore = useSettingsStore(); + cloudPlanStore = mockedStore(useCloudPlanStore); + sourceControlStore = useSourceControlStore(); + nodeTypesStore = useNodeTypesStore(); + usersStore = useUsersStore(); + versionsStore = useVersionsStore(); + versionsStore = useVersionsStore(); + ssoStore = useSSOStore(); + uiStore = useUIStore(); + }); + + describe('initializeCore()', () => { + beforeEach(() => { + state.initialized = false; + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should initialize core features only once', async () => { + const usersStoreSpy = vi.spyOn(usersStore, 'initialize'); + const settingsStoreSpy = vi.spyOn(settingsStore, 'initialize'); + + await initializeCore(); + + expect(settingsStoreSpy).toHaveBeenCalled(); + expect(usersStoreSpy).toHaveBeenCalled(); + + await initializeCore(); + + expect(settingsStoreSpy).toHaveBeenCalledTimes(1); + }); + + it('should throw an error if settings initialization fails', async () => { + const error = new Error('Settings initialization failed'); + + vi.spyOn(settingsStore, 'initialize').mockImplementation(() => { + throw error; + }); + + await initializeCore(); + + expect(showToast).toHaveBeenCalledWith( + expect.objectContaining({ + title: 'Error connecting to n8n', + type: 'error', + }), + ); + }); + + it('should initialize authentication hooks', async () => { + const registerLoginHookSpy = vi.spyOn(usersStore, 'registerLoginHook'); + const registerLogoutHookSpy = vi.spyOn(usersStore, 'registerLogoutHook'); + + await initializeCore(); + + expect(registerLoginHookSpy).toHaveBeenCalled(); + expect(registerLogoutHookSpy).toHaveBeenCalled(); + }); + + it('should initialize ssoStore with settings SSO configuration', async () => { + const saml = { loginEnabled: true, loginLabel: '' }; + const ldap = { loginEnabled: false, loginLabel: '' }; + const oidc = { loginEnabled: false, loginUrl: '', callbackUrl: '' }; + + settingsStore.userManagement.authenticationMethod = UserManagementAuthenticationMethod.Saml; + settingsStore.settings.sso = { saml, ldap, oidc }; + settingsStore.isEnterpriseFeatureEnabled[EnterpriseEditionFeature.Saml] = true; + + await initializeCore(); + + expect(ssoStore.initialize).toHaveBeenCalledWith({ + authenticationMethod: UserManagementAuthenticationMethod.Saml, + config: { saml, ldap, oidc }, + features: { + saml: true, + ldap: false, + oidc: false, + }, + }); + }); + + it('should initialize uiStore with banners based on settings', async () => { + settingsStore.isEnterpriseFeatureEnabled.showNonProdBanner = true; + settingsStore.settings.banners = { dismissed: [] }; + settingsStore.settings.versionCli = '1.2.3'; + + await initializeCore(); + + expect(uiStore.initialize).toHaveBeenCalledWith({ + banners: ['NON_PRODUCTION_LICENSE', 'V1'], + }); + }); + }); + + describe('initializeAuthenticatedFeatures()', () => { + beforeEach(() => { + vi.spyOn(settingsStore, 'isCloudDeployment', 'get').mockReturnValue(true); + vi.spyOn(settingsStore, 'isTemplatesEnabled', 'get').mockReturnValue(true); + vi.spyOn(sourceControlStore, 'isEnterpriseSourceControlEnabled', 'get').mockReturnValue(true); + vi.mocked(useRootStore).mockReturnValue({ defaultLocale: 'es' } as ReturnType< + typeof useRootStore + >); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + it('should not init authenticated features if user is not logged in', async () => { + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize'); + const sourceControlSpy = vi.spyOn(sourceControlStore, 'getPreferences'); + const nodeTranslationSpy = vi.spyOn(nodeTypesStore, 'getNodeTranslationHeaders'); + const versionsSpy = vi.spyOn(versionsStore, 'checkForNewVersions'); + vi.mocked(useUsersStore).mockReturnValue({ currentUser: null } as ReturnType< + typeof useUsersStore + >); + + await initializeAuthenticatedFeatures(false); + expect(cloudStoreSpy).not.toHaveBeenCalled(); + expect(sourceControlSpy).not.toHaveBeenCalled(); + expect(nodeTranslationSpy).not.toHaveBeenCalled(); + expect(versionsSpy).not.toHaveBeenCalled(); + }); + + it('should init authenticated features only once if user is logged in', async () => { + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValue(); + const sourceControlSpy = vi.spyOn(sourceControlStore, 'getPreferences'); + const nodeTranslationSpy = vi.spyOn(nodeTypesStore, 'getNodeTranslationHeaders'); + const versionsSpy = vi.spyOn(versionsStore, 'checkForNewVersions'); + vi.mocked(useUsersStore).mockReturnValue({ currentUser: { id: '123' } } as ReturnType< + typeof useUsersStore + >); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(sourceControlSpy).toHaveBeenCalled(); + expect(nodeTranslationSpy).toHaveBeenCalled(); + expect(versionsSpy).toHaveBeenCalled(); + + await initializeAuthenticatedFeatures(); + + expect(cloudStoreSpy).toHaveBeenCalledTimes(1); + }); + + it('should handle cloud plan initialization error', async () => { + const cloudStoreSpy = vi + .spyOn(cloudPlanStore, 'initialize') + .mockRejectedValue(new AxiosError('Something went wrong', '404')); + const sourceControlSpy = vi.spyOn(sourceControlStore, 'getPreferences'); + const nodeTranslationSpy = vi.spyOn(nodeTypesStore, 'getNodeTranslationHeaders'); + const versionsSpy = vi.spyOn(versionsStore, 'checkForNewVersions'); + vi.mocked(useUsersStore).mockReturnValue({ currentUser: { id: '123' } } as ReturnType< + typeof useUsersStore + >); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(sourceControlSpy).toHaveBeenCalled(); + expect(nodeTranslationSpy).toHaveBeenCalled(); + expect(versionsSpy).toHaveBeenCalled(); + }); + + it('should initialize even if cloud requests get stuck', async () => { + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockImplementation(async () => { + await new Promise((resolve) => setTimeout(resolve, 10000)); + }); + const sourceControlSpy = vi.spyOn(sourceControlStore, 'getPreferences'); + const nodeTranslationSpy = vi.spyOn(nodeTypesStore, 'getNodeTranslationHeaders'); + const versionsSpy = vi.spyOn(versionsStore, 'checkForNewVersions'); + vi.mocked(useUsersStore).mockReturnValue({ currentUser: { id: '123' } } as ReturnType< + typeof useUsersStore + >); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(sourceControlSpy).toHaveBeenCalled(); + expect(nodeTranslationSpy).toHaveBeenCalled(); + expect(versionsSpy).toHaveBeenCalled(); + }, 5000); + + it('should handle source control initialization error', async () => { + vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValue(); + vi.mocked(useUsersStore).mockReturnValue({ currentUser: { id: '123' } } as ReturnType< + typeof useUsersStore + >); + vi.spyOn(sourceControlStore, 'getPreferences').mockRejectedValueOnce( + new AxiosError('Something went wrong', '404'), + ); + const consoleSpy = vi.spyOn(window.console, 'error'); + await initializeAuthenticatedFeatures(false); + expect(showMessage).toHaveBeenCalled(); + expect(consoleSpy).toHaveBeenCalledWith( + 'Failed to initialize source control store', + expect.anything(), + ); + }); + + describe('cloudPlanStore', () => { + it('should initialize cloudPlanStore correctly', async () => { + settingsStore.settings.deployment.type = 'cloud'; + usersStore.usersById = { '123': { id: '123', email: '' } as IUser }; + usersStore.currentUserId = '123'; + + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValueOnce(); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + }); + + it('should push TRIAL_OVER banner if trial is expired', async () => { + settingsStore.settings.deployment.type = 'cloud'; + usersStore.usersById = { '123': { id: '123', email: '' } as IUser }; + usersStore.currentUserId = '123'; + + cloudPlanStore.userIsTrialing = true; + cloudPlanStore.trialExpired = true; + + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValueOnce(); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(uiStore.pushBannerToStack).toHaveBeenCalledWith('TRIAL_OVER'); + }); + + it('should push TRIAL banner if trial is active', async () => { + settingsStore.settings.deployment.type = 'cloud'; + usersStore.usersById = { '123': { id: '123', email: '' } as IUser }; + usersStore.currentUserId = '123'; + + cloudPlanStore.userIsTrialing = true; + cloudPlanStore.trialExpired = false; + + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValueOnce(); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(uiStore.pushBannerToStack).toHaveBeenCalledWith('TRIAL'); + }); + + it('should push EMAIL_CONFIRMATION banner if user cloud info is not confirmed', async () => { + settingsStore.settings.deployment.type = 'cloud'; + usersStore.usersById = { '123': { id: '123', email: '' } as IUser }; + usersStore.currentUserId = '123'; + + cloudPlanStore.userIsTrialing = false; + cloudPlanStore.currentUserCloudInfo = { confirmed: false } as Cloud.UserAccount; + + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValueOnce(); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(uiStore.pushBannerToStack).toHaveBeenCalledWith('EMAIL_CONFIRMATION'); + }); + + it('should not push EMAIL_CONFIRMATION banner if user cloud account does not exist', async () => { + settingsStore.settings.deployment.type = 'cloud'; + usersStore.usersById = { '123': { id: '123', email: '' } as IUser }; + usersStore.currentUserId = '123'; + + cloudPlanStore.userIsTrialing = false; + cloudPlanStore.currentUserCloudInfo = null; + + const cloudStoreSpy = vi.spyOn(cloudPlanStore, 'initialize').mockResolvedValueOnce(); + + await initializeAuthenticatedFeatures(false); + + expect(cloudStoreSpy).toHaveBeenCalled(); + expect(uiStore.pushBannerToStack).not.toHaveBeenCalledWith('EMAIL_CONFIRMATION'); + }); + }); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/main 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/main 2.ts new file mode 100755 index 00000000..409c4f91 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/main 2.ts @@ -0,0 +1,74 @@ +import { createApp } from 'vue'; + +import '@vue-flow/core/dist/style.css'; +import '@vue-flow/core/dist/theme-default.css'; +import '@vue-flow/controls/dist/style.css'; +import '@vue-flow/minimap/dist/style.css'; +import '@vue-flow/node-resizer/dist/style.css'; + +import 'vue-json-pretty/lib/styles.css'; +import '@n8n/design-system/css/index.scss'; +// import '@n8n/design-system/css/tailwind/index.css'; + +import './n8n-theme.scss'; + +import App from '@/App.vue'; +import router from './router'; + +import { i18nInstance } from '@n8n/i18n'; +import { TelemetryPlugin } from './plugins/telemetry'; +import { GlobalComponentsPlugin } from './plugins/components'; +import { GlobalDirectivesPlugin } from './plugins/directives'; +import { FontAwesomePlugin } from './plugins/icons'; + +import { createPinia, PiniaVuePlugin } from 'pinia'; +import { ChartJSPlugin } from '@/plugins/chartjs'; +import { SentryPlugin } from '@/plugins/sentry'; +import { registerModuleRoutes } from '@/moduleInitializer/moduleInitializer'; + +import type { VueScanOptions } from 'z-vue-scan'; + +const pinia = createPinia(); + +const app = createApp(App); + +app.use(SentryPlugin); + +// Register module routes +// We do this here so landing straight on a module page works +registerModuleRoutes(router); + +app.use(TelemetryPlugin); +app.use(PiniaVuePlugin); +app.use(FontAwesomePlugin); +app.use(GlobalComponentsPlugin); +app.use(GlobalDirectivesPlugin); +app.use(pinia); +app.use(router); +app.use(i18nInstance); +app.use(ChartJSPlugin); + +if (import.meta.env.VUE_SCAN) { + const { default: VueScan } = await import('z-vue-scan'); + app.use(VueScan, { + enable: true, + }); +} + +app.mount('#app'); + +if (!import.meta.env.PROD) { + // Make sure that we get all error messages properly displayed + // as long as we are not in production mode + window.onerror = (message, _source, _lineno, _colno, error) => { + // eslint-disable-next-line @typescript-eslint/no-base-to-string + if (message.toString().includes('ResizeObserver')) { + // That error can apparently be ignored and can probably + // not do anything about it anyway + return; + } + console.error('error caught in main.ts'); + console.error(message); + console.error(error); + }; +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/n8n-theme 2.scss b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/n8n-theme 2.scss new file mode 100755 index 00000000..e0986942 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/n8n-theme 2.scss @@ -0,0 +1,288 @@ +@use '@n8n/design-system/css/mixins' as ds-mixins; +@use '@n8n/chat/css'; +@use 'styles'; + +:root { + // Using native css variable enables us to use this value in JS + --header-height: 65; + --content-container-width: 1280px; +} + +.clickable { + cursor: pointer !important; +} +.primary-color { + color: var(--color-primary); +} +.text-light { + color: var(--color-text-lighter); + font-weight: var(--font-weight-regular); +} + +// Dialog +.el-overlay { + background-color: var(--color-dialog-overlay-background-dark); +} + +#app-modals .el-overlay { + position: absolute; +} + +.el-dialog { + border: var(--border-base); + box-shadow: 0 6px 16px rgb(68 28 23 / 6%); + border-radius: 8px; + + &.classic { + .el-dialog__header { + padding: 15px 20px; + } + + .el-dialog__headerbtn { + position: absolute; + top: 0; + right: -50px; + color: var(--color-foreground-xlight); + background-color: var(--color-background-dark); + border-radius: 0 18px 18px 0; + z-index: 110; + font-size: 1.7em; + text-align: center; + line-height: 30px; + height: 50px; + width: 50px; + .el-dialog__close { + color: var(--color-foreground-xlight); + font-weight: var(--font-weight-regular); + } + .el-dialog__close:hover { + transform: scale(1.2); + } + } + .el-dialog__body { + color: var(--color-text-dark); + padding: 0 20px 20px; + } + .el-dialog__title { + color: var(--color-text-dark); + } + } +} + +.el-message-box { + background-color: var(--color-background-base); + border: none; + .el-message-box__headerbtn { + .el-message-box__close { + color: var(--color-text-dark); + } + } + .el-message-box__content, + .el-message-box__title { + color: var(--color-text-dark); + } + .el-message-box-icon { + width: var(--spacing-l); + height: var(--spacing-l); + &--warning { + color: var(--color-warning); + } + } +} + +// Notification Message +.el-message p { + line-height: 1.5em; +} + +// Table +.el-table { + thead th { + color: var(--color-text-base); + background-color: var(--color-background-base); + } + tr { + color: var(--color-text-dark); + + td { + border: none; + } + } + .tr { + color: var(--color-text-dark); + } +} + +// Tabs +.type-selector:focus, +.el-tabs__header:focus, +.el-tabs__nav-wrap:focus, +.el-tabs__nav-scroll:focus, +.el-tabs__nav:focus { + outline: none; +} +.el-tabs__item.is-active { + font-weight: var(--font-weight-bold); +} + +.el-tabs__content { + border: 1px solid var(--color-foreground-base); + border-radius: 0 var(--border-radius-base) var(--border-radius-base); +} +.el-tabs__header { + border-bottom: 0 !important; +} +.el-tabs__nav { + padding: 0; + overflow: hidden; +} +.el-tabs__item { + padding: var(--spacing-5xs) var(--spacing-2xs) !important; + height: auto; + line-height: var(--font-line-height-xloose); + font-weight: var(--font-weight-regular); + font-size: var(--font-size-2xs); + + &:not([aria-selected='true']) { + background-color: var(--color-background-base); + border-bottom: 1px solid var(--color-foreground-base) !important; + } +} + +// Loading Indicator +.el-loading-mask { + background-color: var(--color-foreground-xlight); + opacity: 0.8; +} + +// Pagination +.el-pager li, +.el-pagination .btn-prev, +.el-pagination .btn-next { + background: none; + color: var(--color-text-dark); +} +.el-pagination button:disabled { + background: none; + color: var(--color-text-lighter); +} +.el-pager li.btn-quicknext, +.el-pager li.btn-quickprev { + color: var(--color-text-dark); +} + +// Notification +.el-notification { + border-radius: 4px; + border: none; + + &.whats-new-notification { + bottom: var(--spacing-xs) !important; + left: var(--spacing-s) !important; + width: 300px; + padding: var(--spacing-xs); + border: var(--border-base); + + .el-notification__group { + margin-left: 0; + margin-right: var(--spacing-l); + } + + .el-notification__title { + color: var(--color-callout-info-font); + font-family: var(--font-family); + font-size: var(--font-size-s); + font-style: normal; + font-weight: var(--font-weight-bold); + line-height: 1.4; + } + + .el-notification__content { + color: var(--color-callout-info-font); + font-family: var(--font-family); + font-size: var(--font-size-s); + font-style: normal; + font-weight: var(--font-weight-regular); + line-height: 1.4; + margin-top: 0; + } + + .el-notification__closeBtn { + height: 100%; + top: 0; + right: var(--spacing-xs); + } + } +} + +.el-notification__content { + text-align: left; + word-break: break-word; + max-height: 30vh; + overflow-y: auto; +} + +.tags-container { + .el-select-tags-wrapper .el-tag { + font-size: 12px; + font-weight: var(--font-weight-regular); + display: flex; + align-items: center; + + &.is-closable { + overflow-y: hidden; + } + + .el-tag__close { + max-height: 15px; + max-width: 15px; + margin-left: var(--spacing-4xs); + + &:hover { + background-color: var(--color-background-light) !important; + } + } + } +} + +.add-option { + > * { + border: none; + } + + .el-select .el-input.is-disabled { + .el-input__icon { + opacity: 1 !important; + cursor: not-allowed; + color: var(--color-foreground-dark); + } + .el-input__inner, + .el-input__inner::placeholder { + opacity: 1; + color: var(--color-foreground-dark); + } + } + .el-select .el-input:not(.is-disabled) .el-input__icon { + color: var(--color-text-dark); + } + .el-input .el-input__inner { + text-align: center; + } + .el-input:not(.is-disabled) .el-input__inner { + &, + &:hover, + &:focus { + padding-left: 35px; + border-radius: var(--border-radius-base); + color: var(--color-text-dark); + background-color: var(--color-background-base); + border-color: var(--color-foreground-base); + text-align: center; + } + + &::placeholder { + color: var(--color-text-dark); + opacity: 1; /** Firefox */ + } + } +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/n8n-theme-variables 2.scss b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/n8n-theme-variables 2.scss new file mode 100755 index 00000000..145580c3 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/n8n-theme-variables 2.scss @@ -0,0 +1,111 @@ +// Primary Theme Color +$color-primary: var(--color-primary); + +// Dialog +$custom-dialog-text-color: var(--color-text-dark); +$custom-dialog-background: var(--color-background-xlight); + +$custom-font-black: var(--color-text-dark); +$custom-font-dark: var(--color-text-dark); +$custom-font-light: var(--color-text-light); +$custom-font-very-light: var(--color-text-light); + +$custom-expression-text: var(--color-secondary); +$custom-expression-background: var(--color-background-light); + +// Badge +$badge-danger-color: var(--color-danger); +$badge-danger-background-color: var(--color-primary-tint-3); +$badge-danger-border-color: var(--color-primary-tint-2); +$badge-warning-background-color: hsla( + var(--color-warning-h), + var(--color-warning-s), + var(--color-warning-l), + 0.3 +); +$badge-warning-color: hsla( + var(--color-warning-h), + var(--color-warning-s), + var(--color-warning-l), + 0.3 +); +$badge-warning-color: var(--color-text-dark); + +// Warning tooltip +$warning-tooltip-color: var(--color-danger); + +// sass variable is used for scss files +$header-height: calc(var(--header-height) * 1px); + +// sidebar +$sidebar-width: 65px; +$sidebar-expanded-width: 200px; +$sidebar-inactive-color: var(--color-foreground-xdark); +$sidebar-active-color: var(--color-primary); + +// gifts notification +$gift-notification-active-color: var(--color-primary); +$gift-notification-inner-color: var(--color-primary); +$gift-notification-outer-color: var(--color-text-xlight); + +// based on element.io breakpoints +$breakpoint-2xs: 600px; +$breakpoint-xs: 768px; +$breakpoint-sm: 992px; +$breakpoint-md: 1200px; +$breakpoint-lg: 1920px; + +// tags +$tag-background-color: var(--color-foreground-base); +$tag-text-color: var(--color-text-dark); +$tag-close-background-color: var(--color-text-light); +$tag-close-background-hover-color: var(--color-text-dark); + +// Node creator +$node-creator-width: 385px; +$node-creator-text-color: var(--color-text-dark); +$node-creator-select-background-color: var(--color-background-base); +$node-creator-background-color: var(--color-background-xlight); +$node-creator-search-background-color: var(--color-background-xlight); +$node-creator-border-color: var(--color-foreground-base); +$node-creator-item-hover-border-color: var(--color-text-light); +$node-creator-arrow-color: var(--color-text-light); +$node-creator-no-results-background-color: var(--color-background-xlight); +$node-creator-close-button-color: var(--color-text-xlight); +$node-creator-search-clear-color: var(--color-text-xlight); +$node-creator-search-clear-background-color: var(--color-text-light); +$node-creator-search-clear-background-color-hover: var(--color-text-base); +$node-creator-search-placeholder-color: var(--color-text-light); +$node-creator-subcategory-panel-header-bacground-color: var(--color-background-base); +$node-creator-description-color: var(--color-text-base); + +// trigger icon +$trigger-icon-border-color: var(--color-text-lighter); +$trigger-icon-background-color: var(--color-background-xlight); + +// drawer +$drawer-background-color: var(--color-background-xlight); + +// updates-panel +$updates-panel-info-url-color: var(--color-primary); +$updates-panel-border: var(--border-base); +$updates-panel-dark-background-color: var(--color-background-light); +$updates-panel-description-text-color: var(--color-text-base); +$updates-panel-text-color: var(--color-text-dark); + +// versions card +$version-card-name-text-color: var(--color-text-base); +$version-card-background-color: var(--color-background-xlight); +$version-card-border: var(--border-base); +$version-card-description-text-color: var(--color-text-base); +$version-card-release-date-text-color: var(--color-foreground-xdark); +$version-card-box-shadow-color: hsla( + var(--color-background-dark-h), + var(--color-background-dark-s), + var(--color-background-dark-l), + 0.07 +); + +// supplemental node types +$supplemental-node-types: ai_chain ai_document ai_embedding ai_languageModel ai_memory + ai_outputParser ai_tool ai_retriever ai_textSplitter ai_vectorRetriever ai_vectorStore; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/polyfills 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/polyfills 2.ts new file mode 100755 index 00000000..3bc6e705 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/polyfills 2.ts @@ -0,0 +1,7 @@ +import 'array.prototype.tosorted'; +import { v4 as uuid } from 'uuid'; + +// Polyfill crypto.randomUUID +if (!('randomUUID' in crypto)) { + Object.defineProperty(crypto, 'randomUUID', { value: uuid }); +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/router 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/router 2.ts new file mode 100755 index 00000000..cf43f22a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/router 2.ts @@ -0,0 +1,879 @@ +import type { + NavigationGuardNext, + RouteLocation, + RouteRecordRaw, + RouteLocationRaw, + RouteLocationNormalized, +} from 'vue-router'; +import { createRouter, createWebHistory, isNavigationFailure } from 'vue-router'; +import { useExternalHooks } from '@/composables/useExternalHooks'; +import { useSettingsStore } from '@/stores/settings.store'; +import { useTemplatesStore } from '@/stores/templates.store'; +import { useUIStore } from '@/stores/ui.store'; +import { useSSOStore } from '@/stores/sso.store'; +import { EnterpriseEditionFeature, VIEWS, EDITABLE_CANVAS_VIEWS } from '@/constants'; +import { useTelemetry } from '@/composables/useTelemetry'; +import { middleware } from '@/utils/rbac/middleware'; +import type { RouterMiddleware } from '@/types/router'; +import { initializeAuthenticatedFeatures, initializeCore } from '@/init'; +import { tryToParseNumber } from '@/utils/typesUtils'; +import { projectsRoutes } from '@/routes/projects.routes'; +import TestRunDetailView from '@/views/Evaluations.ee/TestRunDetailView.vue'; +import { MfaRequiredError } from '@n8n/rest-api-client'; + +const ChangePasswordView = async () => await import('./views/ChangePasswordView.vue'); +const ErrorView = async () => await import('./views/ErrorView.vue'); +const EntityNotFound = async () => await import('./views/EntityNotFound.vue'); +const EntityUnAuthorised = async () => await import('./views/EntityUnAuthorised.vue'); +const ForgotMyPasswordView = async () => await import('./views/ForgotMyPasswordView.vue'); +const MainHeader = async () => await import('@/components/MainHeader/MainHeader.vue'); +const MainSidebar = async () => await import('@/components/MainSidebar.vue'); +const LogsPanel = async () => await import('@/features/logs/components/LogsPanel.vue'); +const DemoFooter = async () => await import('@/features/logs/components/DemoFooter.vue'); +const NodeView = async () => await import('@/views/NodeView.vue'); +const WorkflowExecutionsView = async () => await import('@/views/WorkflowExecutionsView.vue'); +const WorkflowExecutionsLandingPage = async () => + await import('@/components/executions/workflow/WorkflowExecutionsLandingPage.vue'); +const WorkflowExecutionsPreview = async () => + await import('@/components/executions/workflow/WorkflowExecutionsPreview.vue'); +const SettingsView = async () => await import('./views/SettingsView.vue'); +const SettingsLdapView = async () => await import('./views/SettingsLdapView.vue'); +const SettingsPersonalView = async () => await import('./views/SettingsPersonalView.vue'); +const SettingsUsersView = async () => await import('./views/SettingsUsersView.vue'); +const SettingsCommunityNodesView = async () => + await import('./views/SettingsCommunityNodesView.vue'); +const SettingsApiView = async () => await import('./views/SettingsApiView.vue'); +const SettingsLogStreamingView = async () => await import('./views/SettingsLogStreamingView.vue'); +const SetupView = async () => await import('./views/SetupView.vue'); +const SigninView = async () => await import('./views/SigninView.vue'); +const SignupView = async () => await import('./views/SignupView.vue'); +const TemplatesCollectionView = async () => await import('@/views/TemplatesCollectionView.vue'); +const TemplatesWorkflowView = async () => await import('@/views/TemplatesWorkflowView.vue'); +const SetupWorkflowFromTemplateView = async () => + await import('@/views/SetupWorkflowFromTemplateView/SetupWorkflowFromTemplateView.vue'); +const TemplatesSearchView = async () => await import('@/views/TemplatesSearchView.vue'); +const VariablesView = async () => await import('@/views/VariablesView.vue'); +const SettingsUsageAndPlan = async () => await import('./views/SettingsUsageAndPlan.vue'); +const SettingsSso = async () => await import('./views/SettingsSso.vue'); +const SignoutView = async () => await import('@/views/SignoutView.vue'); +const SamlOnboarding = async () => await import('@/views/SamlOnboarding.vue'); +const SettingsSourceControl = async () => await import('./views/SettingsSourceControl.vue'); +const SettingsExternalSecrets = async () => await import('./views/SettingsExternalSecrets.vue'); +const WorkerView = async () => await import('./views/WorkerView.vue'); +const WorkflowHistory = async () => await import('@/views/WorkflowHistory.vue'); +const WorkflowOnboardingView = async () => await import('@/views/WorkflowOnboardingView.vue'); +const EvaluationsView = async () => await import('@/views/Evaluations.ee/EvaluationsView.vue'); +const EvaluationRootView = async () => + await import('@/views/Evaluations.ee/EvaluationsRootView.vue'); + +function getTemplatesRedirect(defaultRedirect: VIEWS[keyof VIEWS]): { name: string } | false { + const settingsStore = useSettingsStore(); + const isTemplatesEnabled: boolean = settingsStore.isTemplatesEnabled; + if (!isTemplatesEnabled) { + return { name: `${defaultRedirect}` || VIEWS.NOT_FOUND }; + } + + return false; +} + +export const routes: RouteRecordRaw[] = [ + { + path: '/', + redirect: '/home/workflows', + meta: { + middleware: ['authenticated'], + }, + }, + { + path: '/collections/:id', + name: VIEWS.COLLECTION, + components: { + default: TemplatesCollectionView, + sidebar: MainSidebar, + }, + meta: { + templatesEnabled: true, + telemetry: { + getProperties(route: RouteLocation) { + const templatesStore = useTemplatesStore(); + return { + collection_id: route.params.id, + wf_template_repo_session_id: templatesStore.currentSessionId, + }; + }, + }, + getRedirect: getTemplatesRedirect, + middleware: ['authenticated'], + }, + }, + // Following two routes are kept in-app: + // Single workflow view, used when a custom template host is set + // Also, reachable directly from this URL + { + path: '/templates/:id', + name: VIEWS.TEMPLATE, + components: { + default: TemplatesWorkflowView, + sidebar: MainSidebar, + }, + meta: { + templatesEnabled: true, + getRedirect: getTemplatesRedirect, + telemetry: { + getProperties(route: RouteLocation) { + const templatesStore = useTemplatesStore(); + return { + template_id: tryToParseNumber( + Array.isArray(route.params.id) ? route.params.id[0] : route.params.id, + ), + wf_template_repo_session_id: templatesStore.currentSessionId, + }; + }, + }, + middleware: ['authenticated'], + }, + }, + // Template setup view, this is the landing view for website users + { + path: '/templates/:id/setup', + name: VIEWS.TEMPLATE_SETUP, + components: { + default: SetupWorkflowFromTemplateView, + sidebar: MainSidebar, + }, + meta: { + templatesEnabled: true, + getRedirect: getTemplatesRedirect, + telemetry: { + getProperties(route: RouteLocation) { + const templatesStore = useTemplatesStore(); + return { + template_id: tryToParseNumber( + Array.isArray(route.params.id) ? route.params.id[0] : route.params.id, + ), + wf_template_repo_session_id: templatesStore.currentSessionId, + }; + }, + }, + middleware: ['authenticated'], + }, + }, + { + path: '/templates/', + name: VIEWS.TEMPLATES, + components: { + default: TemplatesSearchView, + sidebar: MainSidebar, + }, + meta: { + templatesEnabled: true, + getRedirect: getTemplatesRedirect, + // Templates view remembers it's scroll position on back + scrollOffset: 0, + telemetry: { + getProperties() { + const templatesStore = useTemplatesStore(); + return { + wf_template_repo_session_id: templatesStore.currentSessionId, + }; + }, + }, + setScrollPosition(pos: number) { + this.scrollOffset = pos; + }, + middleware: ['authenticated'], + }, + beforeEnter: (_to, _from, next) => { + const templatesStore = useTemplatesStore(); + if (!templatesStore.hasCustomTemplatesHost) { + window.location.href = templatesStore.websiteTemplateRepositoryURL; + } else { + next(); + } + }, + }, + { + path: '/variables', + name: VIEWS.VARIABLES, + components: { + default: VariablesView, + sidebar: MainSidebar, + }, + meta: { middleware: ['authenticated'] }, + }, + { + path: '/workflow/:name/debug/:executionId', + name: VIEWS.EXECUTION_DEBUG, + components: { + default: NodeView, + header: MainHeader, + sidebar: MainSidebar, + footer: LogsPanel, + }, + meta: { + nodeView: true, + keepWorkflowAlive: true, + middleware: ['authenticated', 'enterprise'], + middlewareOptions: { + enterprise: { + feature: [EnterpriseEditionFeature.DebugInEditor], + }, + }, + }, + }, + { + path: '/workflow/:name/executions', + name: VIEWS.WORKFLOW_EXECUTIONS, + components: { + default: WorkflowExecutionsView, + header: MainHeader, + sidebar: MainSidebar, + }, + meta: { + keepWorkflowAlive: true, + middleware: ['authenticated'], + }, + children: [ + { + path: '', + name: VIEWS.EXECUTION_HOME, + components: { + executionPreview: WorkflowExecutionsLandingPage, + }, + meta: { + keepWorkflowAlive: true, + middleware: ['authenticated'], + }, + }, + { + path: ':executionId/:nodeId?', + name: VIEWS.EXECUTION_PREVIEW, + components: { + executionPreview: WorkflowExecutionsPreview, + }, + meta: { + keepWorkflowAlive: true, + middleware: ['authenticated'], + }, + }, + ], + }, + { + path: '/workflow/:name/evaluation', + name: VIEWS.EVALUATION, + components: { + default: EvaluationRootView, + header: MainHeader, + sidebar: MainSidebar, + }, + props: { + default: true, + }, + meta: { + keepWorkflowAlive: true, + middleware: ['authenticated'], + }, + children: [ + { + path: '', + name: VIEWS.EVALUATION_EDIT, + component: EvaluationsView, + props: true, + }, + { + path: 'test-runs/:runId', + name: VIEWS.EVALUATION_RUNS_DETAIL, + component: TestRunDetailView, + props: true, + }, + ], + }, + { + path: '/workflow/:workflowId/history/:versionId?', + name: VIEWS.WORKFLOW_HISTORY, + components: { + default: WorkflowHistory, + sidebar: MainSidebar, + }, + meta: { + middleware: ['authenticated', 'enterprise'], + middlewareOptions: { + enterprise: { + feature: [EnterpriseEditionFeature.WorkflowHistory], + }, + }, + }, + }, + { + path: '/workflows/templates/:id', + name: VIEWS.TEMPLATE_IMPORT, + components: { + default: NodeView, + header: MainHeader, + sidebar: MainSidebar, + }, + meta: { + templatesEnabled: true, + keepWorkflowAlive: true, + getRedirect: getTemplatesRedirect, + middleware: ['authenticated'], + }, + }, + { + path: '/workflows/onboarding/:id', + name: VIEWS.WORKFLOW_ONBOARDING, + components: { + default: WorkflowOnboardingView, + header: MainHeader, + sidebar: MainSidebar, + }, + meta: { + templatesEnabled: true, + keepWorkflowAlive: true, + getRedirect: () => getTemplatesRedirect(VIEWS.NEW_WORKFLOW), + middleware: ['authenticated'], + }, + }, + { + path: '/workflow/new', + name: VIEWS.NEW_WORKFLOW, + components: { + default: NodeView, + header: MainHeader, + sidebar: MainSidebar, + footer: LogsPanel, + }, + meta: { + nodeView: true, + keepWorkflowAlive: true, + middleware: ['authenticated'], + }, + }, + { + path: '/workflows/demo', + name: VIEWS.DEMO, + components: { + default: NodeView, + footer: DemoFooter, + }, + meta: { + middleware: ['authenticated'], + middlewareOptions: { + authenticated: { + bypass: () => { + const settingsStore = useSettingsStore(); + return settingsStore.isPreviewMode; + }, + }, + }, + }, + }, + { + path: '/workflow/:name/:nodeId?', + name: VIEWS.WORKFLOW, + components: { + default: NodeView, + header: MainHeader, + sidebar: MainSidebar, + footer: LogsPanel, + }, + meta: { + nodeView: true, + keepWorkflowAlive: true, + middleware: ['authenticated'], + }, + }, + { + path: '/workflow', + redirect: '/workflow/new', + }, + { + path: '/signin', + name: VIEWS.SIGNIN, + components: { + default: SigninView, + }, + meta: { + telemetry: { + pageCategory: 'auth', + }, + middleware: ['guest'], + }, + }, + { + path: '/signup', + name: VIEWS.SIGNUP, + components: { + default: SignupView, + }, + meta: { + telemetry: { + pageCategory: 'auth', + }, + middleware: ['guest'], + }, + }, + { + path: '/signout', + name: VIEWS.SIGNOUT, + components: { + default: SignoutView, + }, + meta: { + telemetry: { + pageCategory: 'auth', + }, + middleware: ['authenticated'], + }, + }, + { + path: '/setup', + name: VIEWS.SETUP, + components: { + default: SetupView, + }, + meta: { + middleware: ['defaultUser'], + telemetry: { + pageCategory: 'auth', + }, + }, + }, + { + path: '/forgot-password', + name: VIEWS.FORGOT_PASSWORD, + components: { + default: ForgotMyPasswordView, + }, + meta: { + middleware: ['guest'], + telemetry: { + pageCategory: 'auth', + }, + }, + }, + { + path: '/change-password', + name: VIEWS.CHANGE_PASSWORD, + components: { + default: ChangePasswordView, + }, + meta: { + middleware: ['guest'], + telemetry: { + pageCategory: 'auth', + }, + }, + }, + { + path: '/settings', + name: VIEWS.SETTINGS, + component: SettingsView, + props: true, + redirect: () => { + const settingsStore = useSettingsStore(); + if (settingsStore.settings.hideUsagePage) { + return { name: VIEWS.PERSONAL_SETTINGS }; + } + return { name: VIEWS.USAGE }; + }, + children: [ + { + path: 'usage', + name: VIEWS.USAGE, + components: { + settingsView: SettingsUsageAndPlan, + }, + meta: { + middleware: ['authenticated', 'custom'], + middlewareOptions: { + custom: () => { + const settingsStore = useSettingsStore(); + return !settingsStore.settings.hideUsagePage; + }, + }, + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'usage', + }; + }, + }, + }, + }, + { + path: 'personal', + name: VIEWS.PERSONAL_SETTINGS, + components: { + settingsView: SettingsPersonalView, + }, + meta: { + middleware: ['authenticated'], + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'personal', + }; + }, + }, + }, + }, + { + path: 'users', + name: VIEWS.USERS_SETTINGS, + components: { + settingsView: SettingsUsersView, + }, + meta: { + middleware: ['authenticated', 'rbac'], + middlewareOptions: { + rbac: { + scope: ['user:create', 'user:update'], + }, + }, + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'users', + }; + }, + }, + }, + }, + { + path: 'api', + name: VIEWS.API_SETTINGS, + components: { + settingsView: SettingsApiView, + }, + meta: { + middleware: ['authenticated'], + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'api', + }; + }, + }, + }, + }, + { + path: 'environments', + name: VIEWS.SOURCE_CONTROL, + components: { + settingsView: SettingsSourceControl, + }, + meta: { + middleware: ['authenticated', 'rbac'], + middlewareOptions: { + rbac: { + scope: 'sourceControl:manage', + }, + }, + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'environments', + }; + }, + }, + }, + }, + { + path: 'external-secrets', + name: VIEWS.EXTERNAL_SECRETS_SETTINGS, + components: { + settingsView: SettingsExternalSecrets, + }, + meta: { + middleware: ['authenticated', 'rbac'], + middlewareOptions: { + rbac: { + scope: ['externalSecretsProvider:list', 'externalSecretsProvider:update'], + }, + }, + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'external-secrets', + }; + }, + }, + }, + }, + { + path: 'sso', + name: VIEWS.SSO_SETTINGS, + components: { + settingsView: SettingsSso, + }, + meta: { + middleware: ['authenticated', 'rbac'], + middlewareOptions: { + rbac: { + scope: 'saml:manage', + }, + }, + telemetry: { + pageCategory: 'settings', + getProperties() { + return { + feature: 'sso', + }; + }, + }, + }, + }, + { + path: 'log-streaming', + name: VIEWS.LOG_STREAMING_SETTINGS, + components: { + settingsView: SettingsLogStreamingView, + }, + meta: { + middleware: ['authenticated', 'rbac'], + middlewareOptions: { + rbac: { + scope: 'logStreaming:manage', + }, + }, + telemetry: { + pageCategory: 'settings', + }, + }, + }, + { + path: 'workers', + name: VIEWS.WORKER_VIEW, + components: { + settingsView: WorkerView, + }, + meta: { + middleware: ['authenticated'], + }, + }, + { + path: 'community-nodes', + name: VIEWS.COMMUNITY_NODES, + components: { + settingsView: SettingsCommunityNodesView, + }, + meta: { + middleware: ['authenticated', 'rbac', 'custom'], + middlewareOptions: { + rbac: { + scope: ['communityPackage:list', 'communityPackage:update'], + }, + custom: () => { + const settingsStore = useSettingsStore(); + return settingsStore.isCommunityNodesFeatureEnabled; + }, + }, + telemetry: { + pageCategory: 'settings', + }, + }, + }, + { + path: 'ldap', + name: VIEWS.LDAP_SETTINGS, + components: { + settingsView: SettingsLdapView, + }, + meta: { + middleware: ['authenticated', 'rbac'], + middlewareOptions: { + rbac: { + scope: 'ldap:manage', + }, + }, + }, + }, + ], + }, + { + path: '/saml/onboarding', + name: VIEWS.SAML_ONBOARDING, + components: { + default: SamlOnboarding, + }, + meta: { + middleware: ['authenticated', 'custom'], + middlewareOptions: { + custom: () => { + const settingsStore = useSettingsStore(); + const ssoStore = useSSOStore(); + return ssoStore.isEnterpriseSamlEnabled && !settingsStore.isCloudDeployment; + }, + }, + telemetry: { + pageCategory: 'auth', + }, + }, + }, + ...projectsRoutes, + { + path: '/entity-not-found/:entityType(credential|workflow)', + props: true, + name: VIEWS.ENTITY_NOT_FOUND, + components: { + default: EntityNotFound, + sidebar: MainSidebar, + }, + }, + { + path: '/entity-not-authorized/:entityType(credential|workflow)', + props: true, + name: VIEWS.ENTITY_UNAUTHORIZED, + components: { + default: EntityUnAuthorised, + sidebar: MainSidebar, + }, + }, + { + path: '/:pathMatch(.*)*', + name: VIEWS.NOT_FOUND, + component: ErrorView, + props: { + messageKey: 'error.pageNotFound', + errorCode: 404, + redirectTextKey: 'error.goBack', + redirectPage: VIEWS.HOMEPAGE, + }, + meta: { + nodeView: true, + telemetry: { + disabled: true, + }, + }, + }, +]; + +function withCanvasReadOnlyMeta(route: RouteRecordRaw) { + if (!route.meta) { + route.meta = {}; + } + route.meta.readOnlyCanvas = !EDITABLE_CANVAS_VIEWS.includes((route?.name ?? '') as VIEWS); + + if (route.children) { + route.children = route.children.map(withCanvasReadOnlyMeta); + } + + return route; +} + +const router = createRouter({ + history: createWebHistory(import.meta.env.DEV ? '/' : (window.BASE_PATH ?? '/')), + scrollBehavior(to: RouteLocationNormalized, _, savedPosition) { + // saved position == null means the page is NOT visited from history (back button) + if (savedPosition === null && to.name === VIEWS.TEMPLATES && to.meta?.setScrollPosition) { + // for templates view, reset scroll position in this case + to.meta.setScrollPosition(0); + } + }, + routes: routes.map(withCanvasReadOnlyMeta), +}); + +router.beforeEach(async (to: RouteLocationNormalized, from, next) => { + try { + /** + * Initialize application core + * This step executes before first route is loaded and is required for permission checks + */ + + await initializeCore(); + // Pass undefined for first param to use default + await initializeAuthenticatedFeatures(undefined, to.name as string); + + /** + * Redirect to setup page. User should be redirected to this only once + */ + + const settingsStore = useSettingsStore(); + if (settingsStore.showSetupPage) { + if (to.name === VIEWS.SETUP) { + return next(); + } + + return next({ name: VIEWS.SETUP }); + } + + /** + * Verify user permissions for current route + */ + + const routeMiddleware = to.meta?.middleware ?? []; + const routeMiddlewareOptions = to.meta?.middlewareOptions ?? {}; + for (const middlewareName of routeMiddleware) { + let nextCalled = false; + const middlewareNext = ((location: RouteLocationRaw): void => { + next(location); + nextCalled = true; + }) as NavigationGuardNext; + + const middlewareOptions = routeMiddlewareOptions[middlewareName]; + const middlewareFn = middleware[middlewareName] as RouterMiddleware; + await middlewareFn(to, from, middlewareNext, middlewareOptions); + + if (nextCalled) { + return; + } + } + + return next(); + } catch (failure) { + const settingsStore = useSettingsStore(); + if (failure instanceof MfaRequiredError && settingsStore.isMFAEnforced) { + if (to.name !== VIEWS.PERSONAL_SETTINGS) { + return next({ name: VIEWS.PERSONAL_SETTINGS }); + } else { + return next(); + } + } + if (isNavigationFailure(failure)) { + console.log(failure); + } else { + console.error(failure); + } + } +}); + +router.afterEach((to, from) => { + try { + const telemetry = useTelemetry(); + const uiStore = useUIStore(); + const templatesStore = useTemplatesStore(); + + /** + * Run external hooks + */ + + void useExternalHooks().run('main.routeChange', { from, to }); + + /** + * Track current view for telemetry + */ + + uiStore.currentView = (to.name as string) ?? ''; + if (to.meta?.templatesEnabled) { + templatesStore.setSessionId(); + } else { + templatesStore.resetSessionId(); // reset telemetry session id when user leaves template pages + } + telemetry.page(to); + } catch (failure) { + if (isNavigationFailure(failure)) { + console.log(failure); + } else { + console.error(failure); + } + } +}); + +export default router; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/router.test 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/router.test 2.ts new file mode 100755 index 00000000..ca577e9e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/router.test 2.ts @@ -0,0 +1,142 @@ +import { createPinia, setActivePinia } from 'pinia'; +import { createComponentRenderer } from '@/__tests__/render'; +import router from '@/router'; +import { VIEWS } from '@/constants'; +import { setupServer } from '@/__tests__/server'; +import { useSettingsStore } from '@/stores/settings.store'; +import { useRBACStore } from '@/stores/rbac.store'; +import type { Scope } from '@n8n/permissions'; +import type { RouteRecordName } from 'vue-router'; +import * as init from '@/init'; + +const App = { + template: '
', +}; +const renderComponent = createComponentRenderer(App); + +let settingsStore: ReturnType; + +describe('router', () => { + let server: ReturnType; + const initializeAuthenticatedFeaturesSpy = vi.spyOn(init, 'initializeAuthenticatedFeatures'); + + beforeAll(async () => { + server = setupServer(); + + const pinia = createPinia(); + setActivePinia(pinia); + + renderComponent({ pinia }); + }); + + beforeEach(() => { + settingsStore = useSettingsStore(); + initializeAuthenticatedFeaturesSpy.mockImplementation(async () => await Promise.resolve()); + }); + + afterAll(() => { + server.shutdown(); + vi.restoreAllMocks(); + }); + + test.each([ + ['/', VIEWS.WORKFLOWS], + ['/workflows', VIEWS.WORKFLOWS], + ['/workflow', VIEWS.NEW_WORKFLOW], + ['/workflow/new', VIEWS.NEW_WORKFLOW], + ['/workflow/R9JFXwkUCL1jZBuw', VIEWS.WORKFLOW], + ['/workflow/R9JFXwkUCL1jZBuw/myNodeId', VIEWS.WORKFLOW], + ['/workflow/R9JFXwkUCL1jZBuw/398-1ewq213', VIEWS.WORKFLOW], + ['/workflow/R9JFXwkUCL1jZBuw/executions/29021', VIEWS.EXECUTION_PREVIEW], + ['/workflows/templates/R9JFXwkUCL1jZBuw', VIEWS.TEMPLATE_IMPORT], + ['/workflows/demo', VIEWS.DEMO], + ])( + 'should resolve %s to %s', + async (path, name) => { + await router.push(path); + expect(initializeAuthenticatedFeaturesSpy).toHaveBeenCalled(); + expect(router.currentRoute.value.name).toBe(name); + }, + 10000, + ); + + test.each([ + ['/workflow/R9JFXwkUCL1jZBuw/debug/29021', VIEWS.WORKFLOWS], + ['/workflow/8IFYawZ9dKqJu8sT/history', VIEWS.WORKFLOWS], + ['/workflow/8IFYawZ9dKqJu8sT/history/6513ed960252b846f3792f0c', VIEWS.WORKFLOWS], + ])( + 'should redirect %s to %s if user does not have permissions', + async (path, name) => { + await router.push(path); + expect(initializeAuthenticatedFeaturesSpy).toHaveBeenCalled(); + expect(router.currentRoute.value.name).toBe(name); + }, + 10000, + ); + + test.each([ + ['/workflow/R9JFXwkUCL1jZBuw/debug/29021', VIEWS.EXECUTION_DEBUG], + ['/workflow/8IFYawZ9dKqJu8sT/history', VIEWS.WORKFLOW_HISTORY], + ['/workflow/8IFYawZ9dKqJu8sT/history/6513ed960252b846f3792f0c', VIEWS.WORKFLOW_HISTORY], + ])( + 'should resolve %s to %s if user has permissions', + async (path, name) => { + const settingsStore = useSettingsStore(); + + settingsStore.settings.enterprise.debugInEditor = true; + settingsStore.settings.enterprise.workflowHistory = true; + + await router.push(path); + expect(initializeAuthenticatedFeaturesSpy).toHaveBeenCalled(); + expect(router.currentRoute.value.name).toBe(name); + }, + 10000, + ); + + test.each<[string, RouteRecordName, Scope[]]>([ + ['/settings/users', VIEWS.WORKFLOWS, []], + ['/settings/users', VIEWS.USERS_SETTINGS, ['user:create', 'user:update']], + ['/settings/environments', VIEWS.WORKFLOWS, []], + ['/settings/environments', VIEWS.SOURCE_CONTROL, ['sourceControl:manage']], + ['/settings/external-secrets', VIEWS.WORKFLOWS, []], + [ + '/settings/external-secrets', + VIEWS.EXTERNAL_SECRETS_SETTINGS, + ['externalSecretsProvider:list', 'externalSecretsProvider:update'], + ], + ['/settings/sso', VIEWS.WORKFLOWS, []], + ['/settings/sso', VIEWS.SSO_SETTINGS, ['saml:manage']], + ['/settings/log-streaming', VIEWS.WORKFLOWS, []], + ['/settings/log-streaming', VIEWS.LOG_STREAMING_SETTINGS, ['logStreaming:manage']], + ['/settings/community-nodes', VIEWS.WORKFLOWS, []], + [ + '/settings/community-nodes', + VIEWS.COMMUNITY_NODES, + ['communityPackage:list', 'communityPackage:update'], + ], + ['/settings/ldap', VIEWS.WORKFLOWS, []], + ['/settings/ldap', VIEWS.LDAP_SETTINGS, ['ldap:manage']], + ])( + 'should resolve %s to %s with %s user permissions', + async (path, name, scopes) => { + const rbacStore = useRBACStore(); + + settingsStore.settings.communityNodesEnabled = true; + rbacStore.setGlobalScopes(scopes); + + await router.push(path); + expect(initializeAuthenticatedFeaturesSpy).toHaveBeenCalled(); + expect(router.currentRoute.value.name).toBe(name); + }, + 10000, + ); + + test.each([ + [VIEWS.PERSONAL_SETTINGS, true], + [VIEWS.USAGE, false], + ])('should redirect Settings to %s', async (name, hideUsagePage) => { + settingsStore.settings.hideUsagePage = hideUsagePage; + await router.push('/settings'); + expect(router.currentRoute.value.name).toBe(name); + }); +}); diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims-modules.d 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims-modules.d 2.ts new file mode 100755 index 00000000..ff3351fa --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims-modules.d 2.ts @@ -0,0 +1,39 @@ +/** + * Modules + */ + +declare module 'vue-agile'; + +/** + * File types + */ + +declare module '*.json'; +declare module '*.svg'; +declare module '*.png'; +declare module '*.jpg'; +declare module '*.jpeg'; +declare module '*.gif'; +declare module '*.webp'; + +declare module '*?raw' { + const content: string; + export default content; +} + +declare module 'v3-infinite-loading' { + import { Plugin, DefineComponent } from 'vue'; + + interface InfiniteLoadingProps { + target: string; + } + + export interface Events { + infinite: (state: { loaded: () => void; complete: () => void }) => void; + } + + const InfiniteLoading: DefineComponent & + Plugin; + + export default InfiniteLoading; +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims-vue.d 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims-vue.d 2.ts new file mode 100755 index 00000000..06a02b3a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims-vue.d 2.ts @@ -0,0 +1,53 @@ +import 'vue-router'; +import type { I18nClass } from '@n8n/i18n'; +import type { Route, Router, RouteLocation } from 'vue-router'; +import type { Telemetry } from '@/plugins/telemetry'; +import type { VIEWS } from '@/constants'; +import type { IPermissions } from '@/Interface'; +import type { MiddlewareOptions, RouterMiddlewareType } from '@/types/router'; + +export {}; + +/** + * @docs https://vuejs.org/guide/typescript/options-api.html#augmenting-global-properties + */ + +declare module '@vue/runtime-core' { + interface ComponentCustomOptions { + beforeRouteEnter?(to: Route, from: Route, next: () => void): void; + beforeRouteLeave?(to: Route, from: Route, next: () => void): void; + beforeRouteUpdate?(to: Route, from: Route, next: () => void): void; + } + + interface ComponentCustomProperties { + $style: Record; + $telemetry: Telemetry; + $route: RouteLocation; + $router: Router; + } +} + +/** + * @docs https://router.vuejs.org/guide/advanced/meta + */ + +declare module 'vue-router' { + interface RouteMeta { + nodeView?: boolean; + templatesEnabled?: boolean; + getRedirect?: + | (() => { name: string } | false) + | ((defaultRedirect: VIEWS[keyof VIEWS]) => { name: string } | false); + permissions?: IPermissions; + middleware?: RouterMiddlewareType[]; + middlewareOptions?: Partial; + telemetry?: { + disabled?: true; + pageCategory?: string; + getProperties?: (route: RouteLocation) => Record; + }; + scrollOffset?: number; + setScrollPosition?: (position: number) => void; + readOnlyCanvas?: boolean; + } +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims.d 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims.d 2.ts new file mode 100755 index 00000000..ce55fae9 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/shims.d 2.ts @@ -0,0 +1,41 @@ +/// + +import type { VNode, ComponentPublicInstance } from 'vue'; +import type { PartialDeep } from 'type-fest'; +import type { ExternalHooks } from '@/types/externalHooks'; +import type { FrontendSettings } from '@n8n/api-types'; + +export {}; + +declare global { + interface ImportMeta { + env: { + DEV: boolean; + PROD: boolean; + NODE_ENV: 'development' | 'production'; + VUE_APP_URL_BASE_API: string; + VUE_SCAN: boolean; + }; + } + + interface Window { + BASE_PATH: string; + REST_ENDPOINT: string; + sentry?: { dsn?: string; environment: string; release: string; serverName?: string }; + n8nExternalHooks?: PartialDeep; + preventNodeViewBeforeUnload?: boolean; + maxPinnedDataSize?: number; + } + + namespace JSX { + interface Element extends VNode {} + interface ElementClass extends ComponentPublicInstance {} + interface IntrinsicElements { + [elem: string]: any; + } + } + + interface Array { + findLast(predicate: (value: T, index: number, obj: T[]) => unknown, thisArg?: any): T; + } +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/source-map-js-shim 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/source-map-js-shim 2.ts new file mode 100755 index 00000000..ff8b4c56 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/source-map-js-shim 2.ts @@ -0,0 +1 @@ +export default {}; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/type-utils.d 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/type-utils.d 2.ts new file mode 100755 index 00000000..3dd1e1ca --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/type-utils.d 2.ts @@ -0,0 +1,7 @@ +export type RecursivePartial = { + [P in keyof T]?: T[P] extends Array + ? Array> + : T[P] extends object | undefined + ? RecursivePartial + : T[P]; +}; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/vue-virtual-scroller.d 2.ts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/vue-virtual-scroller.d 2.ts new file mode 100755 index 00000000..1e6ef322 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/src/vue-virtual-scroller.d 2.ts @@ -0,0 +1,112 @@ +declare module 'vue-virtual-scroller' { + import { + type ObjectEmitsOptions, + type PublicProps, + type SetupContext, + type SlotsType, + type VNode, + } from 'vue'; + + interface RecycleScrollerProps { + items: readonly T[]; + direction?: 'vertical' | 'horizontal'; + itemSize?: number | null; + gridItems?: number; + itemSecondarySize?: number; + minItemSize?: number; + sizeField?: string; + typeField?: string; + keyField?: keyof T; + pageMode?: boolean; + prerender?: number; + buffer?: number; + emitUpdate?: boolean; + updateInterval?: number; + listClass?: string; + itemClass?: string; + listTag?: string; + itemTag?: string; + } + + interface DynamicScrollerProps extends RecycleScrollerProps { + minItemSize: number; + } + + interface RecycleScrollerEmitOptions extends ObjectEmitsOptions { + resize: () => void; + visible: () => void; + hidden: () => void; + update: ( + startIndex: number, + endIndex: number, + visibleStartIndex: number, + visibleEndIndex: number, + ) => void; + 'scroll-start': () => void; + 'scroll-end': () => void; + } + + interface RecycleScrollerSlotProps { + item: T; + index: number; + active: boolean; + } + + interface RecycleScrollerSlots { + default(slotProps: RecycleScrollerSlotProps): unknown; + before(): unknown; + empty(): unknown; + after(): unknown; + } + + export interface RecycleScrollerInstance { + getScroll(): { start: number; end: number }; + scrollToItem(index: number): void; + scrollToPosition(position: number): void; + } + + export const RecycleScroller: ( + props: RecycleScrollerProps & PublicProps, + ctx?: SetupContext>>, + expose?: (exposed: RecycleScrollerInstance) => void, + ) => VNode & { + __ctx?: { + props: RecycleScrollerProps & PublicProps; + expose(exposed: RecycleScrollerInstance): void; + slots: RecycleScrollerSlots; + }; + }; + + export const DynamicScroller: ( + props: DynamicScrollerProps & PublicProps, + ctx?: SetupContext>>, + expose?: (exposed: RecycleScrollerInstance) => void, + ) => VNode & { + __ctx?: { + props: DynamicScrollerProps & PublicProps; + expose(exposed: RecycleScrollerInstance): void; + slots: RecycleScrollerSlots; + }; + }; + + interface DynamicScrollerItemProps { + item: T; + active: boolean; + sizeDependencies?: unknown[]; + watchData?: boolean; + tag?: string; + emitResize?: boolean; + onResize?: () => void; + } + + interface DynamicScrollerItemEmitOptions extends ObjectEmitsOptions { + resize: () => void; + } + + export const DynamicScrollerItem: ( + props: DynamicScrollerItemProps & PublicProps, + ctx?: SetupContext, + ) => VNode; + + export function IdState(options?: { idProp?: (value: any) => unknown }): unknown; +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/stylelint.config 2.mjs b/n8n-n8n-1.109.2/packages/frontend/editor-ui/stylelint.config 2.mjs new file mode 100755 index 00000000..a86e148c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/stylelint.config 2.mjs @@ -0,0 +1,3 @@ +import { baseConfig } from '@n8n/stylelint-config/base'; + +export default baseConfig; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/tailwind.config 2.js b/n8n-n8n-1.109.2/packages/frontend/editor-ui/tailwind.config 2.js new file mode 100755 index 00000000..a5fbd925 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/tailwind.config 2.js @@ -0,0 +1,8 @@ +module.exports = { + content: ['./index.html', './src/**/*.{vue,js,ts}'], + darkMode: ['selector', '[data-theme="dark"]'], + theme: { + extend: {}, + }, + plugins: [], +}; diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/tsconfig 2.json b/n8n-n8n-1.109.2/packages/frontend/editor-ui/tsconfig 2.json new file mode 100755 index 00000000..14a4b4aa --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/tsconfig 2.json @@ -0,0 +1,36 @@ +{ + "extends": "@n8n/typescript-config/tsconfig.frontend.json", + "compilerOptions": { + "baseUrl": ".", + "moduleResolution": "bundler", + "rootDirs": [ + ".", + "../@n8n/rest-api-client/src", + "../@n8n/composables/src", + "../@n8n/chat/src", + "../@n8n/design-system/src" + ], + "outDir": "dist", + "types": [ + "vitest/globals", + "unplugin-icons/types/vue", + "../@n8n/design-system/src/shims-modules.d.ts" + ], + "paths": { + "@/*": ["./src/*"], + "@n8n/rest-api-client*": ["../@n8n/rest-api-client/src*"], + "@n8n/composables*": ["../@n8n/composables/src*"], + "@n8n/constants*": ["../../@n8n/constants/src*"], + "@n8n/chat*": ["../@n8n/chat/src*"], + "@n8n/design-system*": ["../@n8n/design-system/src*"], + "@n8n/i18n*": ["../@n8n/i18n/src*"], + "@n8n/stores*": ["../@n8n/stores/src*"], + "@n8n/api-types*": ["../../@n8n/api-types/src*"], + "@n8n/utils*": ["../../@n8n/utils/src*"] + }, + // TODO: remove all options below this line + "useUnknownInCatchVariables": false + }, + "include": ["src/**/*.ts", "src/**/*.d.ts", "src/**/*.vue"], + "exclude": ["src/plugins/codemirror/typescript/worker/**/*.d.ts"] +} diff --git a/n8n-n8n-1.109.2/packages/frontend/editor-ui/vite.config 2.mts b/n8n-n8n-1.109.2/packages/frontend/editor-ui/vite.config 2.mts new file mode 100755 index 00000000..0f1d22d8 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/frontend/editor-ui/vite.config 2.mts @@ -0,0 +1,183 @@ +import vue from '@vitejs/plugin-vue'; +import { posix as pathPosix, resolve } from 'path'; +import { defineConfig, mergeConfig, type UserConfig } from 'vite'; +import { viteStaticCopy } from 'vite-plugin-static-copy'; +import { nodePolyfills } from 'vite-plugin-node-polyfills'; +import svgLoader from 'vite-svg-loader'; + +import { vitestConfig } from '@n8n/vitest-config/frontend'; +import icons from 'unplugin-icons/vite'; +import iconsResolver from 'unplugin-icons/resolver'; +import components from 'unplugin-vue-components/vite'; +import browserslistToEsbuild from 'browserslist-to-esbuild'; +import legacy from '@vitejs/plugin-legacy'; +import browserslist from 'browserslist'; + +const publicPath = process.env.VUE_APP_PUBLIC_PATH || '/'; + +const { NODE_ENV } = process.env; + +const browsers = browserslist.loadConfig({ path: process.cwd() }); + +const packagesDir = resolve(__dirname, '..', '..'); + +const alias = [ + { find: '@', replacement: resolve(__dirname, 'src') }, + { find: 'stream', replacement: 'stream-browserify' }, + { + find: /^@n8n\/chat(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'chat', 'src$1'), + }, + { + find: /^@n8n\/api-requests(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'api-requests', 'src$1'), + }, + { + find: /^@n8n\/composables(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'composables', 'src$1'), + }, + { + find: /^@n8n\/constants(.+)$/, + replacement: resolve(packagesDir, '@n8n', 'constants', 'src$1'), + }, + { + find: /^@n8n\/design-system(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'design-system', 'src$1'), + }, + { + find: /^@n8n\/i18n(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'i18n', 'src$1'), + }, + { + find: /^@n8n\/stores(.+)$/, + replacement: resolve(packagesDir, 'frontend', '@n8n', 'stores', 'src$1'), + }, + { + find: /^@n8n\/utils(.+)$/, + replacement: resolve(packagesDir, '@n8n', 'utils', 'src$1'), + }, + ...['orderBy', 'camelCase', 'cloneDeep', 'startCase'].map((name) => ({ + find: new RegExp(`^lodash.${name}$`, 'i'), + replacement: `lodash/${name}`, + })), + { + find: /^lodash\.(.+)$/, + replacement: 'lodash/$1', + }, + { + // For sanitize-html + find: 'source-map-js', + replacement: resolve(__dirname, 'src/source-map-js-shim'), + }, +]; + +const plugins: UserConfig['plugins'] = [ + icons({ + compiler: 'vue3', + autoInstall: true, + }), + components({ + dts: './src/components.d.ts', + resolvers: [ + (componentName) => { + if (componentName.startsWith('N8n')) + return { name: componentName, from: '@n8n/design-system' }; + }, + iconsResolver({ + prefix: 'Icon', + }), + ], + }), + viteStaticCopy({ + targets: [ + { + src: pathPosix.resolve('node_modules/web-tree-sitter/tree-sitter.wasm'), + dest: resolve(__dirname, 'dist'), + }, + { + src: pathPosix.resolve('node_modules/curlconverter/dist/tree-sitter-bash.wasm'), + dest: resolve(__dirname, 'dist'), + }, + ], + }), + vue(), + svgLoader({ + svgoConfig: { + plugins: [ + { + name: 'preset-default', + params: { + overrides: { + // disable a default plugin + cleanupIds: false, + // preserve viewBox for scalability + removeViewBox: false, + }, + }, + }, + ], + }, + }), + legacy({ + modernTargets: browsers, + modernPolyfills: true, + renderLegacyChunks: false, + }), + { + name: 'Insert config script', + transformIndexHtml: (html, ctx) => { + const replacement = ctx.server + ? '' // Skip when using Vite dev server + : ''; + + return html.replace('%CONFIG_SCRIPT%', replacement); + }, + }, + // For sanitize-html + nodePolyfills({ + include: ['fs', 'path', 'url', 'util', 'timers'], + }), +]; + +const { RELEASE: release } = process.env; +const target = browserslistToEsbuild(browsers); + +export default mergeConfig( + defineConfig({ + define: { + // This causes test to fail but is required for actually running it + // ...(NODE_ENV !== 'test' ? { 'global': 'globalThis' } : {}), + ...(NODE_ENV === 'development' ? { 'process.env': {} } : {}), + BASE_PATH: `'${publicPath}'`, + }, + plugins, + resolve: { alias }, + base: publicPath, + envPrefix: ['VUE', 'N8N_ENV_FEAT'], + css: { + preprocessorOptions: { + scss: { + additionalData: [ + '', + '@use "@/n8n-theme-variables.scss" as *;', + '@use "@n8n/design-system/css/mixins" as mixins;', + ].join('\n'), + }, + }, + }, + build: { + minify: !!release, + sourcemap: !!release, + target, + }, + optimizeDeps: { + esbuildOptions: { + target, + }, + }, + worker: { + format: 'es', + }, + }), + vitestConfig, +); diff --git a/n8n-n8n-1.109.2/packages/nodes-base/README 2.md b/n8n-n8n-1.109.2/packages/nodes-base/README 2.md new file mode 100755 index 00000000..fec5cc3d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/README 2.md @@ -0,0 +1,13 @@ +![n8n.io - Workflow Automation](https://user-images.githubusercontent.com/65276001/173571060-9f2f6d7b-bac0-43b6-bdb2-001da9694058.png) + +# n8n-nodes-base + +The nodes which are included by default in n8n + +``` +npm install n8n-nodes-base -g +``` + +## License + +You can find the license information [here](https://github.com/n8n-io/n8n/blob/master/README.md#license) diff --git a/n8n-n8n-1.109.2/packages/nodes-base/jest.config 2.js b/n8n-n8n-1.109.2/packages/nodes-base/jest.config 2.js new file mode 100755 index 00000000..eaf73d56 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/jest.config 2.js @@ -0,0 +1,10 @@ +// Avoid tests failing because of difference between local and GitHub actions timezone +process.env.TZ = 'UTC'; + +/** @type {import('jest').Config} */ +module.exports = { + ...require('../../jest.config'), + collectCoverageFrom: ['credentials/**/*.ts', 'nodes/**/*.ts', 'utils/**/*.ts'], + globalSetup: '/test/globalSetup.ts', + setupFilesAfterEnv: ['jest-expect-message', '/test/setup.ts'], +}; diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wait/test/Wait.node.test.ts b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wait/test/Wait.node.test.ts deleted file mode 100755 index 49a41e97..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wait/test/Wait.node.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { NodeTestHarness } from '@nodes-testing/node-test-harness'; -import { mock } from 'jest-mock-extended'; -import { DateTime } from 'luxon'; -import { NodeOperationError, type IExecuteFunctions } from 'n8n-workflow'; - -import { Wait } from '../Wait.node'; - -describe('Execute Wait Node', () => { - let timer: NodeJS.Timeout; - const { clearInterval, setInterval } = global; - const nextDay = DateTime.now().startOf('day').plus({ days: 1 }); - - beforeAll(() => { - timer = setInterval(() => jest.advanceTimersByTime(1000), 10); - jest.useFakeTimers().setSystemTime(new Date('2025-01-01')); - }); - - afterAll(() => { - clearInterval(timer); - jest.useRealTimers(); - }); - - test.each([ - { value: 'invalid_date', isValid: false }, - { - value: nextDay.toISO(), - isValid: true, - expectedWaitTill: nextDay.toJSDate(), - }, - { - value: nextDay.toISO({ includeOffset: true }), - isValid: true, - expectedWaitTill: nextDay.toUTC().toJSDate(), - }, - { - value: nextDay.toJSDate(), - isValid: true, - expectedWaitTill: nextDay.toJSDate(), - }, - { - value: nextDay, - isValid: true, - expectedWaitTill: nextDay.toJSDate(), - }, - ])( - 'Test Wait Node with specificTime $value and isValid $isValid', - async ({ value, isValid, expectedWaitTill }) => { - const putExecutionToWaitSpy = jest.fn(); - const waitNode = new Wait(); - const executeFunctionsMock = mock({ - getNodeParameter: jest.fn().mockImplementation((paramName: string) => { - if (paramName === 'resume') return 'specificTime'; - if (paramName === 'dateTime') return value; - }), - getTimezone: jest.fn().mockReturnValue('UTC'), - putExecutionToWait: putExecutionToWaitSpy, - getInputData: jest.fn(), - getNode: jest.fn(), - }); - - if (isValid) { - await expect(waitNode.execute(executeFunctionsMock)).resolves.not.toThrow(); - expect(putExecutionToWaitSpy).toHaveBeenCalledWith(expectedWaitTill); - } else { - await expect(waitNode.execute(executeFunctionsMock)).rejects.toThrow(NodeOperationError); - } - }, - ); - - describe('Validation', () => { - describe('Time interval', () => { - it.each([ - { - unit: 'seconds', - amount: 300, - expectedWaitTill: () => DateTime.now().plus({ seconds: 300 }).toJSDate(), - }, - { - unit: 'minutes', - amount: 2, - expectedWaitTill: () => DateTime.now().plus({ minutes: 2 }).toJSDate(), - }, - { - unit: 'hours', - amount: 1, - expectedWaitTill: () => DateTime.now().plus({ hours: 1 }).toJSDate(), - }, - { - unit: 'days', - amount: 10, - expectedWaitTill: () => DateTime.now().plus({ days: 10 }).toJSDate(), - }, - { - unit: 'seconds', - amount: -10, - error: 'Invalid wait amount. It must be a positive number.', - }, - { - unit: 'years', - amount: 10, - error: "Invalid wait unit. Valid units are 'seconds', 'minutes', 'hours', or 'days'.", - }, - { - unit: 'minutes', - amount: 'test', - error: 'Invalid wait amount. It must be a positive number.', - }, - ])( - 'Validate wait unit: $unit, amount: $amount', - async ({ unit, amount, expectedWaitTill, error }) => { - const putExecutionToWaitSpy = jest.fn(); - const waitNode = new Wait(); - const executeFunctionsMock = mock({ - getNodeParameter: jest.fn().mockImplementation((paramName: string) => { - if (paramName === 'resume') return 'timeInterval'; - if (paramName === 'amount') return amount; - if (paramName === 'unit') return unit; - }), - getTimezone: jest.fn().mockReturnValue('UTC'), - putExecutionToWait: putExecutionToWaitSpy, - getInputData: jest.fn(), - getNode: jest.fn(), - }); - - if (!error) { - await expect(waitNode.execute(executeFunctionsMock)).resolves.not.toThrow(); - expect(putExecutionToWaitSpy).toHaveBeenCalledWith(expectedWaitTill?.()); - } else { - await expect(waitNode.execute(executeFunctionsMock)).rejects.toThrowError(error); - } - }, - ); - }); - }); - - new NodeTestHarness().setupTests(); -}); diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wait/test/Wait.workflow.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wait/test/Wait.workflow.json deleted file mode 100755 index 27fc8ff5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wait/test/Wait.workflow.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "name": "[Unit Test] Wait Node", - "nodes": [ - { - "parameters": {}, - "id": "76e5dcfd-fdc7-472f-8832-bccc0eb122c0", - "name": "When clicking \"Execute Workflow\"", - "type": "n8n-nodes-base.manualTrigger", - "typeVersion": 1, - "position": [120, 420] - }, - { - "parameters": { - "amount": 42, - "unit": "seconds" - }, - "id": "37f2c758-6fb2-43ce-86ae-ca11ec957cbd", - "name": "Wait", - "type": "n8n-nodes-base.wait", - "typeVersion": 1, - "position": [560, 420], - "webhookId": "35edc971-c3e4-48cf-835d-4d73a4fd1fd8" - }, - { - "parameters": { - "conditions": { - "number": [ - { - "value1": "={{ parseInt($json.afterTimestamp) }}", - "operation": "largerEqual", - "value2": "={{ parseInt($json.startTimestamp) + 42 }}" - } - ] - } - }, - "id": "c5c53934-2677-4adf-a4df-b32f3b0642a2", - "name": "IF", - "type": "n8n-nodes-base.if", - "typeVersion": 1, - "position": [960, 420] - }, - { - "parameters": { - "keepOnlySet": true, - "values": { - "boolean": [ - { - "name": "success", - "value": true - } - ] - }, - "options": {} - }, - "id": "a78417b6-d3f5-4bbc-916a-d4b9d46961cc", - "name": "Set1", - "type": "n8n-nodes-base.set", - "typeVersion": 1, - "position": [1180, 400] - }, - { - "parameters": { - "value": "={{ $now }}", - "dataPropertyName": "afterTimestamp", - "toFormat": "X", - "options": {} - }, - "id": "94f042ea-49d5-44ea-9ccf-93dac8d27d4a", - "name": "After", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [760, 420] - }, - { - "parameters": { - "value": "={{ $now }}", - "dataPropertyName": "startTimestamp", - "toFormat": "X", - "options": {} - }, - "id": "43f8a396-1bf7-484e-962c-120f677dfa51", - "name": "Before", - "type": "n8n-nodes-base.dateTime", - "typeVersion": 1, - "position": [360, 420] - } - ], - "pinData": { - "Set1": [ - { - "json": { - "success": true - } - } - ] - }, - "connections": { - "When clicking \"Execute Workflow\"": { - "main": [ - [ - { - "node": "Before", - "type": "main", - "index": 0 - } - ] - ] - }, - "Wait": { - "main": [ - [ - { - "node": "After", - "type": "main", - "index": 0 - } - ] - ] - }, - "IF": { - "main": [ - [ - { - "node": "Set1", - "type": "main", - "index": 0 - } - ] - ] - }, - "After": { - "main": [ - [ - { - "node": "IF", - "type": "main", - "index": 0 - } - ] - ] - }, - "Before": { - "main": [ - [ - { - "node": "Wait", - "type": "main", - "index": 0 - } - ] - ] - } - }, - "active": false, - "settings": {}, - "versionId": "8ed794a0-5c04-4b8a-9a49-02c2c7f8003f", - "id": "500", - "meta": { - "instanceId": "8c8c5237b8e37b006a7adce87f4369350c58e41f3ca9de16196d3197f69eabcd" - }, - "tags": [] -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/Webhook.formdata.test.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/Webhook.formdata.test.json deleted file mode 100755 index 94449c29..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/Webhook.formdata.test.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "nodes": [ - { - "parameters": { - "httpMethod": "POST", - "path": "test", - "options": { - "binaryData": false - } - }, - "id": "ec188f16-b2c5-44e3-bd83-259a94f15c94", - "name": "Webhook", - "type": "n8n-nodes-base.webhook", - "typeVersion": 1, - "webhookId": "a59a3be7-6d43-47e7-951d-86b8172c2006" - } - ], - "connections": { - "Webhook": { - "main": [[]] - } - }, - "trigger": { - "mode": "webhook", - "input": { - "json": { - "headers": { - "host": "localhost:5678", - "user-agent": "curl/8.2.0", - "accept": "*/*", - "content-length": "137", - "content-type": "multipart/form-data; boundary=--boundary" - }, - "params": { "path": "test" }, - "query": {}, - "body": { "a": ["b"] } - } - } - }, - "pinData": { - "Webhook": [ - { - "json": { - "headers": { - "host": "localhost:5678", - "user-agent": "curl/8.2.0", - "accept": "*/*", - "content-length": "137", - "content-type": "multipart/form-data; boundary=--boundary" - }, - "params": { "path": "test" }, - "query": {}, - "body": { - "a": ["b"] - } - } - } - ] - } -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts deleted file mode 100755 index 680ceb09..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/Webhook.test.ts +++ /dev/null @@ -1,137 +0,0 @@ -import { NodeTestHarness } from '@nodes-testing/node-test-harness'; -import type { Request, Response } from 'express'; -import fs from 'fs/promises'; -import { mock } from 'jest-mock-extended'; -import type { IWebhookFunctions } from 'n8n-workflow'; - -import { Webhook } from '../Webhook.node'; - -jest.mock('fs/promises'); -const mockFs = jest.mocked(fs); - -describe('Test Webhook Node', () => { - new NodeTestHarness().setupTests(); - - describe('handleFormData', () => { - const node = new Webhook(); - const context = mock({ - nodeHelpers: mock(), - }); - context.getNodeParameter.calledWith('options').mockReturnValue({}); - context.getNode.calledWith().mockReturnValue({ - type: 'n8n-nodes-base.webhook', - typeVersion: 1.1, - } as any); - const req = mock(); - req.contentType = 'multipart/form-data'; - context.getRequestObject.mockReturnValue(req); - - it('should handle when no files are present', async () => { - req.body = { - files: {}, - }; - const returnData = await node.webhook(context); - expect(returnData.workflowData?.[0][0].binary).toBeUndefined(); - expect(context.nodeHelpers.copyBinaryFile).not.toHaveBeenCalled(); - }); - - it('should handle when files are present', async () => { - req.body = { - files: { file1: { filepath: '/tmp/test.txt' } }, - }; - const returnData = await node.webhook(context); - expect(returnData.workflowData?.[0][0].binary).not.toBeUndefined(); - expect(context.nodeHelpers.copyBinaryFile).toHaveBeenCalled(); - expect(mockFs.rm).toHaveBeenCalledWith('/tmp/test.txt', { force: true }); - }); - }); - - describe('streaming response mode', () => { - const node = new Webhook(); - const context = mock({ - nodeHelpers: mock(), - }); - const req = mock(); - const res = mock(); - - beforeEach(() => { - jest.clearAllMocks(); - context.getRequestObject.mockReturnValue(req); - context.getResponseObject.mockReturnValue(res); - context.getChildNodes.mockReturnValue([]); - context.getNode.mockReturnValue({ - type: 'n8n-nodes-base.webhook', - typeVersion: 2, - name: 'Webhook', - } as any); - context.getNodeParameter.mockImplementation((paramName: string) => { - if (paramName === 'options') return {}; - if (paramName === 'responseMode') return 'streaming'; - return undefined; - }); - req.headers = {}; - req.params = {}; - req.query = {}; - req.body = { message: 'test' }; - Object.defineProperty(req, 'ips', { value: [], configurable: true }); - Object.defineProperty(req, 'ip', { value: '127.0.0.1', configurable: true }); - res.writeHead.mockImplementation(() => res); - res.flushHeaders.mockImplementation(() => undefined); - }); - - it('should enable streaming when responseMode is "streaming"', async () => { - const result = await node.webhook(context); - - // Verify streaming headers are set - expect(res.writeHead).toHaveBeenCalledWith(200, { - 'Content-Type': 'application/json; charset=utf-8', - 'Transfer-Encoding': 'chunked', - 'Cache-Control': 'no-cache', - Connection: 'keep-alive', - }); - expect(res.flushHeaders).toHaveBeenCalled(); - - // Verify response structure for streaming - expect(result).toEqual({ - noWebhookResponse: true, - workflowData: expect.any(Array), - }); - }); - - it('should not enable streaming when responseMode is not "streaming"', async () => { - context.getNodeParameter.mockImplementation((paramName: string) => { - if (paramName === 'options') return {}; - if (paramName === 'responseMode') return 'onReceived'; - return undefined; - }); - - const result = await node.webhook(context); - - // Verify streaming headers are NOT set - expect(res.writeHead).not.toHaveBeenCalled(); - expect(res.flushHeaders).not.toHaveBeenCalled(); - - // Verify normal response structure - expect(result).toEqual({ - webhookResponse: undefined, - workflowData: expect.any(Array), - }); - }); - - it('should handle multipart form data with streaming enabled', async () => { - req.contentType = 'multipart/form-data'; - req.body = { - data: { message: 'Hello' }, - files: {}, - }; - - const result = await node.webhook(context); - - // For multipart form data, streaming is handled in handleFormData method - // The current implementation returns normal workflowData for form data - expect(result).toEqual({ - workflowData: expect.any(Array), - }); - }); - }); -}); diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/utils.test.ts b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/utils.test.ts deleted file mode 100755 index b2fc3f84..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Webhook/test/utils.test.ts +++ /dev/null @@ -1,474 +0,0 @@ -import jwt from 'jsonwebtoken'; -import { ApplicationError, type IWebhookFunctions } from 'n8n-workflow'; - -import type { WebhookParameters } from '../utils'; -import { - checkResponseModeConfiguration, - configuredOutputs, - getResponseCode, - getResponseData, - isIpWhitelisted, - setupOutputConnection, - validateWebhookAuthentication, -} from '../utils'; - -jest.mock('jsonwebtoken', () => ({ - verify: jest.fn(), -})); - -describe('Webhook Utils', () => { - describe('getResponseCode', () => { - it('should return the response code if it exists', () => { - const parameters: WebhookParameters = { - responseCode: 404, - httpMethod: '', - responseMode: '', - responseData: '', - }; - const responseCode = getResponseCode(parameters); - expect(responseCode).toBe(404); - }); - - it('should return the custom response code if it exists', () => { - const parameters: WebhookParameters = { - options: { - responseCode: { - values: { - responseCode: 200, - customCode: 201, - }, - }, - }, - httpMethod: '', - responseMode: '', - responseData: '', - }; - const responseCode = getResponseCode(parameters); - expect(responseCode).toBe(201); - }); - - it('should return the default response code if no response code is provided', () => { - const parameters: WebhookParameters = { - httpMethod: '', - responseMode: '', - responseData: '', - }; - const responseCode = getResponseCode(parameters); - expect(responseCode).toBe(200); - }); - }); - - describe('getResponseData', () => { - it('should return the response data if it exists', () => { - const parameters: WebhookParameters = { - responseData: 'Hello World', - httpMethod: '', - responseMode: '', - }; - const responseData = getResponseData(parameters); - expect(responseData).toBe('Hello World'); - }); - - it('should return the options response data if response mode is "onReceived"', () => { - const parameters: WebhookParameters = { - responseMode: 'onReceived', - options: { - responseData: 'Hello World', - }, - httpMethod: '', - responseData: '', - }; - const responseData = getResponseData(parameters); - expect(responseData).toBe('Hello World'); - }); - - it('should return "noData" if options noResponseBody is true', () => { - const parameters: WebhookParameters = { - responseMode: 'onReceived', - options: { - noResponseBody: true, - }, - httpMethod: '', - responseData: '', - }; - const responseData = getResponseData(parameters); - expect(responseData).toBe('noData'); - }); - - it('should return undefined if no response data is provided', () => { - const parameters: WebhookParameters = { - responseMode: 'onReceived', - httpMethod: '', - responseData: '', - }; - const responseData = getResponseData(parameters); - expect(responseData).toBeUndefined(); - }); - }); - - describe('configuredOutputs', () => { - it('should return an array with a single output if httpMethod is not an array', () => { - const parameters: WebhookParameters = { - httpMethod: 'GET', - responseMode: '', - responseData: '', - }; - const outputs = configuredOutputs(parameters); - expect(outputs).toEqual([ - { - type: 'main', - displayName: 'GET', - }, - ]); - }); - - it('should return an array of outputs if httpMethod is an array', () => { - const parameters: WebhookParameters = { - httpMethod: ['GET', 'POST'], - responseMode: '', - responseData: '', - }; - const outputs = configuredOutputs(parameters); - expect(outputs).toEqual([ - { - type: 'main', - displayName: 'GET', - }, - { - type: 'main', - displayName: 'POST', - }, - ]); - }); - }); - - describe('setupOutputConnection', () => { - it('should return a function that sets the webhookUrl and executionMode in the output data', () => { - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('GET'), - getNodeWebhookUrl: jest.fn().mockReturnValue('https://example.com/webhook/'), - getMode: jest.fn().mockReturnValue('manual'), - }; - const method = 'GET'; - const additionalData = { - jwtPayload: { - userId: '123', - }, - }; - const outputData = { - json: {}, - }; - const setupOutput = setupOutputConnection(ctx as IWebhookFunctions, method, additionalData); - const result = setupOutput(outputData); - expect(result).toEqual([ - [ - { - json: { - webhookUrl: 'https://example.com/webhook-test/', - executionMode: 'test', - jwtPayload: { userId: '123' }, - }, - }, - ], - ]); - }); - - it('should return a function that sets the webhookUrl and executionMode in the output data for multiple methods', () => { - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue(['GET', 'POST']), - getNodeWebhookUrl: jest.fn().mockReturnValue('https://example.com/webhook/'), - getMode: jest.fn().mockReturnValue('manual'), - }; - const method = 'POST'; - const additionalData = { - jwtPayload: { - userId: '123', - }, - }; - const outputData = { - json: {}, - }; - const setupOutput = setupOutputConnection(ctx as IWebhookFunctions, method, additionalData); - const result = setupOutput(outputData); - expect(result).toEqual([ - [], - [ - { - json: { - webhookUrl: 'https://example.com/webhook-test/', - executionMode: 'test', - jwtPayload: { userId: '123' }, - }, - }, - ], - ]); - }); - }); - - describe('isIpWhitelisted', () => { - it('should return true if whitelist is undefined', () => { - expect(isIpWhitelisted(undefined, ['192.168.1.1'], '192.168.1.1')).toBe(true); - }); - - it('should return true if whitelist is an empty string', () => { - expect(isIpWhitelisted('', ['192.168.1.1'], '192.168.1.1')).toBe(true); - }); - - it('should return true if ip is in the whitelist', () => { - expect(isIpWhitelisted('192.168.1.1', ['192.168.1.2'], '192.168.1.1')).toBe(true); - }); - - it('should return true if any ip in ips is in the whitelist', () => { - expect(isIpWhitelisted('192.168.1.1', ['192.168.1.1', '192.168.1.2'])).toBe(true); - }); - - it('should return false if ip and ips are not in the whitelist', () => { - expect(isIpWhitelisted('192.168.1.3', ['192.168.1.1', '192.168.1.2'], '192.168.1.4')).toBe( - false, - ); - }); - - it('should return true if any ip in ips matches any address in the whitelist array', () => { - expect(isIpWhitelisted(['192.168.1.1', '192.168.1.2'], ['192.168.1.2', '192.168.1.3'])).toBe( - true, - ); - }); - - it('should return true if ip matches any address in the whitelist array', () => { - expect(isIpWhitelisted(['192.168.1.1', '192.168.1.2'], ['192.168.1.3'], '192.168.1.2')).toBe( - true, - ); - }); - - it('should return false if ip and ips do not match any address in the whitelist array', () => { - expect( - isIpWhitelisted( - ['192.168.1.4', '192.168.1.5'], - ['192.168.1.1', '192.168.1.2'], - '192.168.1.3', - ), - ).toBe(false); - }); - - it('should handle comma-separated whitelist string', () => { - expect(isIpWhitelisted('192.168.1.1, 192.168.1.2', ['192.168.1.3'], '192.168.1.2')).toBe( - true, - ); - }); - - it('should trim whitespace in comma-separated whitelist string', () => { - expect(isIpWhitelisted(' 192.168.1.1 , 192.168.1.2 ', ['192.168.1.3'], '192.168.1.2')).toBe( - true, - ); - }); - }); - - describe('checkResponseModeConfiguration', () => { - it('should throw an error if response mode is "responseNode" but no Respond to Webhook node is found', () => { - const context: Partial = { - getNodeParameter: jest.fn().mockReturnValue('responseNode'), - getChildNodes: jest.fn().mockReturnValue([]), - getNode: jest.fn().mockReturnValue({ name: 'Webhook' }), - }; - expect(() => { - checkResponseModeConfiguration(context as IWebhookFunctions); - }).toThrowError('No Respond to Webhook node found in the workflow'); - }); - - it('should throw an error if response mode is not "responseNode" but a Respond to Webhook node is found', () => { - const context: Partial = { - getNodeParameter: jest.fn().mockReturnValue('onReceived'), - getChildNodes: jest.fn().mockReturnValue([{ type: 'n8n-nodes-base.respondToWebhook' }]), - getNode: jest.fn().mockReturnValue({ name: 'Webhook' }), - }; - expect(() => { - checkResponseModeConfiguration(context as IWebhookFunctions); - }).toThrowError('Webhook node not correctly configured'); - }); - }); - - describe('validateWebhookAuthentication', () => { - it('should return early if authentication is "none"', async () => { - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('none'), - }; - const authPropertyName = 'authentication'; - const result = await validateWebhookAuthentication( - ctx as IWebhookFunctions, - authPropertyName, - ); - expect(result).toBeUndefined(); - }); - - it('should throw an error if basicAuth is enabled but no authentication data is defined on the node', async () => { - const headers = { - authorization: 'Basic some-token', - }; - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('basicAuth'), - getCredentials: jest.fn().mockRejectedValue(new Error()), - getRequestObject: jest.fn().mockReturnValue({ - headers, - }), - getHeaderData: jest.fn().mockReturnValue(headers), - }; - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('No authentication data defined on node!'); - }); - - it('should throw an error if basicAuth is enabled but the provided authentication data is wrong', async () => { - const headers = { - authorization: 'Basic some-token', - }; - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('basicAuth'), - getCredentials: jest.fn().mockResolvedValue({ - user: 'admin', - password: 'password', - }), - getRequestObject: jest.fn().mockReturnValue({ - headers, - }), - getHeaderData: jest.fn().mockReturnValue(headers), - }; - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('Authorization is required!'); - }); - - it('should throw an error if headerAuth is enabled but no authentication data is defined on the node', async () => { - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('headerAuth'), - getCredentials: jest - .fn() - .mockRejectedValue(new Error('No authentication data defined on node!')), - getRequestObject: jest.fn().mockReturnValue({ - headers: {}, - }), - getHeaderData: jest.fn().mockReturnValue({}), - }; - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('No authentication data defined on node!'); - }); - - it('should throw an error if headerAuth is enabled but the provided authentication data is wrong', async () => { - const headers = { - authorization: 'Bearer invalid-token', - }; - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('headerAuth'), - getCredentials: jest.fn().mockResolvedValue({ - name: 'Authorization', - value: 'Bearer token', - }), - getRequestObject: jest.fn().mockReturnValue({ - headers, - }), - getHeaderData: jest.fn().mockReturnValue(headers), - }; - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('Authorization data is wrong!'); - }); - - it('should throw an error if jwtAuth is enabled but no authentication data is defined on the node', async () => { - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('jwtAuth'), - getCredentials: jest - .fn() - .mockRejectedValue(new Error('No authentication data defined on node!')), - getRequestObject: jest.fn().mockReturnValue({}), - getHeaderData: jest.fn().mockReturnValue({}), - }; - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('No authentication data defined on node!'); - }); - - it('should throw an error if jwtAuth is enabled but no token is provided', async () => { - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('jwtAuth'), - getCredentials: jest.fn().mockResolvedValue({ - keyType: 'passphrase', - publicKey: '', - secret: 'secret', - algorithm: 'HS256', - }), - getRequestObject: jest.fn().mockReturnValue({ - headers: {}, - }), - getHeaderData: jest.fn().mockReturnValue({}), - }; - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('No token provided'); - }); - - it('should throw an error if jwtAuth is enabled but the provided token is invalid', async () => { - const headers = { - authorization: 'Bearer invalid-token', - }; - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('jwtAuth'), - getCredentials: jest.fn().mockResolvedValue({ - keyType: 'passphrase', - publicKey: '', - secret: 'secret', - algorithm: 'HS256', - }), - getRequestObject: jest.fn().mockReturnValue({ - headers, - }), - getHeaderData: jest.fn().mockReturnValue(headers), - }; - (jwt.verify as jest.Mock).mockImplementationOnce(() => { - throw new ApplicationError('jwt malformed'); - }); - const authPropertyName = 'authentication'; - await expect( - validateWebhookAuthentication(ctx as IWebhookFunctions, authPropertyName), - ).rejects.toThrowError('jwt malformed'); - }); - - it('should return the decoded JWT payload if jwtAuth is enabled and the token is valid', async () => { - const decodedPayload = { - sub: '1234567890', - name: 'John Doe', - iat: 1516239022, - }; - (jwt.verify as jest.Mock).mockReturnValue(decodedPayload); - const headers = { - authorization: - 'Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c', - }; - const ctx: Partial = { - getNodeParameter: jest.fn().mockReturnValue('jwtAuth'), - getCredentials: jest.fn().mockResolvedValue({ - keyType: 'passphrase', - publicKey: '', - secret: 'secret', - algorithm: 'HS256', - }), - getRequestObject: jest.fn().mockReturnValue({ - headers, - }), - getHeaderData: jest.fn().mockReturnValue(headers), - }; - const authPropertyName = 'authentication'; - - const result = await validateWebhookAuthentication( - ctx as IWebhookFunctions, - authPropertyName, - ); - expect(result).toEqual(decodedPayload); - }); - }); -}); diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wise/__schema__/v1.0.0/account/getBalances.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wise/__schema__/v1.0.0/account/getBalances.json deleted file mode 100755 index a11bce0b..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wise/__schema__/v1.0.0/account/getBalances.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "type": "object", - "properties": { - "active": { - "type": "boolean" - }, - "balances": { - "type": "array", - "items": { - "type": "object", - "properties": { - "amount": { - "type": "object", - "properties": { - "currency": { - "type": "string" - } - } - }, - "balanceType": { - "type": "string" - }, - "currency": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "reservedAmount": { - "type": "object", - "properties": { - "currency": { - "type": "string" - } - } - } - } - } - }, - "creationTime": { - "type": "string" - }, - "eligible": { - "type": "boolean" - }, - "id": { - "type": "integer" - }, - "modificationTime": { - "type": "string" - }, - "profileId": { - "type": "integer" - }, - "recipientId": { - "type": "integer" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wise/__schema__/v1.0.0/exchangeRate/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wise/__schema__/v1.0.0/exchangeRate/get.json deleted file mode 100755 index 5b8f5157..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Wise/__schema__/v1.0.0/exchangeRate/get.json +++ /dev/null @@ -1,18 +0,0 @@ -{ - "type": "object", - "properties": { - "rate": { - "type": "number" - }, - "source": { - "type": "string" - }, - "target": { - "type": "string" - }, - "time": { - "type": "string" - } - }, - "version": 2 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/CustomerDescription.ts b/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/CustomerDescription.ts deleted file mode 100755 index 65a8e018..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/CustomerDescription.ts +++ /dev/null @@ -1,225 +0,0 @@ -import type { INodeProperties } from 'n8n-workflow'; - -import { customerCreateFields, customerUpdateFields } from './shared'; - -export const customerOperations: INodeProperties[] = [ - { - displayName: 'Operation', - name: 'operation', - type: 'options', - noDataExpression: true, - displayOptions: { - show: { - resource: ['customer'], - }, - }, - options: [ - { - name: 'Create', - value: 'create', - description: 'Create a customer', - action: 'Create a customer', - }, - { - name: 'Delete', - value: 'delete', - description: 'Delete a customer', - action: 'Delete a customer', - }, - { - name: 'Get', - value: 'get', - description: 'Retrieve a customer', - action: 'Get a customer', - }, - { - name: 'Get Many', - value: 'getAll', - description: 'Retrieve many customers', - action: 'Get many customers', - }, - { - name: 'Update', - value: 'update', - description: 'Update a customer', - action: 'Update a customer', - }, - ], - default: 'create', - }, -]; - -export const customerFields: INodeProperties[] = [ - // ---------------------------------------- - // customer: create - // ---------------------------------------- - { - displayName: 'Email', - name: 'email', - type: 'string', - placeholder: 'name@email.com', - required: true, - default: '', - displayOptions: { - show: { - resource: ['customer'], - operation: ['create'], - }, - }, - }, - customerCreateFields, - - // ---------------------------------------- - // customer: delete - // ---------------------------------------- - { - displayName: 'Customer ID', - name: 'customerId', - description: 'ID of the customer to delete', - type: 'string', - required: true, - default: '', - displayOptions: { - show: { - resource: ['customer'], - operation: ['delete'], - }, - }, - }, - - // ---------------------------------------- - // customer: get - // ---------------------------------------- - { - displayName: 'Customer ID', - name: 'customerId', - description: 'ID of the customer to retrieve', - type: 'string', - required: true, - default: '', - displayOptions: { - show: { - resource: ['customer'], - operation: ['get'], - }, - }, - }, - - // ---------------------------------------- - // customer: getAll - // ---------------------------------------- - { - displayName: 'Return All', - name: 'returnAll', - type: 'boolean', - default: false, - description: 'Whether to return all results or only up to a given limit', - displayOptions: { - show: { - resource: ['customer'], - operation: ['getAll'], - }, - }, - }, - { - displayName: 'Limit', - name: 'limit', - type: 'number', - default: 50, - description: 'Max number of results to return', - typeOptions: { - minValue: 1, - }, - displayOptions: { - show: { - resource: ['customer'], - operation: ['getAll'], - returnAll: [false], - }, - }, - }, - { - displayName: 'Filters', - name: 'filters', - type: 'collection', - placeholder: 'Add Filter', - default: {}, - displayOptions: { - show: { - resource: ['customer'], - operation: ['getAll'], - }, - }, - options: [ - { - displayName: 'Email', - name: 'email', - type: 'string', - placeholder: 'name@email.com', - default: '', - description: 'Email address to filter customers by', - }, - { - displayName: 'Sort Order', - name: 'order', - description: 'Order to sort customers in', - type: 'options', - options: [ - { - name: 'Ascending', - value: 'asc', - }, - { - name: 'Descending', - value: 'desc', - }, - ], - default: 'asc', - }, - { - displayName: 'Order By', - name: 'orderby', - description: 'Field to sort customers by', - type: 'options', - options: [ - { - name: 'ID', - value: 'id', - }, - { - name: 'Include', - value: 'include', - }, - { - name: 'Name', - value: 'name', - }, - { - name: 'Registered Date', - value: 'registered_date', - }, - ], - default: 'id', - }, - ], - }, - - // ---------------------------------------- - // customer: update - // ---------------------------------------- - { - displayName: 'Customer ID', - name: 'customerId', - description: 'ID of the customer to update', - type: 'string', - required: true, - default: '', - displayOptions: { - show: { - resource: ['customer'], - operation: ['update'], - }, - }, - }, - customerUpdateFields, -]; diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/index.ts b/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/index.ts deleted file mode 100755 index 184b55e6..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './CustomerDescription'; diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/shared.ts b/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/shared.ts deleted file mode 100755 index f8abfb82..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/WooCommerce/descriptions/shared.ts +++ /dev/null @@ -1,185 +0,0 @@ -import type { INodeProperties } from 'n8n-workflow'; - -const customerAddressOptions: INodeProperties[] = [ - { - displayName: 'First Name', - name: 'first_name', - type: 'string', - default: '', - }, - { - displayName: 'Last Name', - name: 'last_name', - type: 'string', - default: '', - }, - { - displayName: 'Company', - name: 'company', - type: 'string', - default: '', - }, - { - displayName: 'Address 1', - name: 'address_1', - type: 'string', - default: '', - }, - { - displayName: 'Address 2', - name: 'address_2', - type: 'string', - default: '', - }, - { - displayName: 'City', - name: 'city', - type: 'string', - default: '', - }, - { - displayName: 'State', - name: 'state', - type: 'string', - default: '', - }, - { - displayName: 'Postcode', - name: 'postcode', - type: 'string', - default: '', - }, - { - displayName: 'Country', - name: 'country', - type: 'string', - default: '', - }, - { - displayName: 'Email', - name: 'email', - type: 'string', - placeholder: 'name@email.com', - default: '', - }, - { - displayName: 'Phone', - name: 'phone', - type: 'string', - default: '', - }, -]; - -const customerUpdateOptions: INodeProperties[] = [ - { - displayName: 'Billing Address', - name: 'billing', - type: 'collection', - default: {}, - placeholder: 'Add Field', - options: customerAddressOptions, - }, - { - displayName: 'First Name', - name: 'first_name', - type: 'string', - default: '', - }, - { - displayName: 'Last Name', - name: 'last_name', - type: 'string', - default: '', - }, - { - displayName: 'Metadata', - name: 'meta_data', - type: 'fixedCollection', - typeOptions: { - multipleValues: true, - }, - default: {}, - placeholder: 'Add Metadata Field', - options: [ - { - displayName: 'Metadata Fields', - name: 'meta_data_fields', - values: [ - { - displayName: 'Key', - name: 'key', - type: 'string', - default: '', - }, - { - displayName: 'Value', - name: 'value', - type: 'string', - default: '', - }, - ], - }, - ], - }, - { - displayName: 'Password', - name: 'password', - type: 'string', - typeOptions: { password: true }, - displayOptions: { - show: { - '/resource': ['customer'], - '/operation': ['create'], - }, - }, - default: '', - }, - { - displayName: 'Shipping Address', - name: 'shipping', - type: 'collection', - default: {}, - placeholder: 'Add Field', - options: customerAddressOptions, - }, -]; - -const customerCreateOptions: INodeProperties[] = [ - ...customerUpdateOptions, - { - displayName: 'Username', - name: 'username', - type: 'string', - default: '', - }, -]; - -export const customerCreateFields: INodeProperties = { - displayName: 'Additional Fields', - name: 'additionalFields', - type: 'collection', - placeholder: 'Add Field', - default: {}, - displayOptions: { - show: { - resource: ['customer'], - operation: ['create'], - }, - }, - options: customerCreateOptions, -}; - -export const customerUpdateFields: INodeProperties = { - displayName: 'Update Fields', - name: 'updateFields', - type: 'collection', - placeholder: 'Add Field', - default: {}, - displayOptions: { - show: { - resource: ['customer'], - operation: ['update'], - }, - }, - options: customerUpdateOptions, -}; diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/create.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/create.json deleted file mode 100755 index dda9a544..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/create.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "type": "object", - "properties": { - "Addresses": { - "type": "array", - "items": { - "type": "object", - "properties": { - "AddressType": { - "type": "string" - }, - "City": { - "type": "string" - }, - "Country": { - "type": "string" - }, - "PostalCode": { - "type": "string" - }, - "Region": { - "type": "string" - } - } - } - }, - "BankAccountDetails": { - "type": "string" - }, - "ContactID": { - "type": "string" - }, - "ContactStatus": { - "type": "string" - }, - "EmailAddress": { - "type": "string" - }, - "HasValidationErrors": { - "type": "boolean" - }, - "IsCustomer": { - "type": "boolean" - }, - "IsSupplier": { - "type": "boolean" - }, - "Name": { - "type": "string" - }, - "Phones": { - "type": "array", - "items": { - "type": "object", - "properties": { - "PhoneAreaCode": { - "type": "string" - }, - "PhoneCountryCode": { - "type": "string" - }, - "PhoneNumber": { - "type": "string" - }, - "PhoneType": { - "type": "string" - } - } - } - }, - "UpdatedDateUTC": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/get.json deleted file mode 100755 index 9b1eb1a7..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/get.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "type": "object", - "properties": { - "Addresses": { - "type": "array", - "items": { - "type": "object", - "properties": { - "AddressLine1": { - "type": "string" - }, - "AddressType": { - "type": "string" - }, - "City": { - "type": "string" - }, - "Country": { - "type": "string" - }, - "PostalCode": { - "type": "string" - }, - "Region": { - "type": "string" - } - } - } - }, - "BankAccountDetails": { - "type": "string" - }, - "ContactGroups": { - "type": "array", - "items": { - "type": "object", - "properties": { - "ContactGroupID": { - "type": "string" - }, - "HasValidationErrors": { - "type": "boolean" - }, - "Name": { - "type": "string" - }, - "Status": { - "type": "string" - } - } - } - }, - "ContactID": { - "type": "string" - }, - "ContactPersons": { - "type": "array", - "items": { - "type": "object", - "properties": { - "EmailAddress": { - "type": "string" - }, - "FirstName": { - "type": "string" - }, - "IncludeInEmails": { - "type": "boolean" - }, - "LastName": { - "type": "string" - } - } - } - }, - "ContactStatus": { - "type": "string" - }, - "EmailAddress": { - "type": "string" - }, - "HasAttachments": { - "type": "boolean" - }, - "HasValidationErrors": { - "type": "boolean" - }, - "IsCustomer": { - "type": "boolean" - }, - "IsSupplier": { - "type": "boolean" - }, - "Name": { - "type": "string" - }, - "Phones": { - "type": "array", - "items": { - "type": "object", - "properties": { - "PhoneAreaCode": { - "type": "string" - }, - "PhoneCountryCode": { - "type": "string" - }, - "PhoneNumber": { - "type": "string" - }, - "PhoneType": { - "type": "string" - } - } - } - }, - "UpdatedDateUTC": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/getAll.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/getAll.json deleted file mode 100755 index 5f064b65..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Xero/__schema__/v1.0.0/contact/getAll.json +++ /dev/null @@ -1,79 +0,0 @@ -{ - "type": "object", - "properties": { - "Addresses": { - "type": "array", - "items": { - "type": "object", - "properties": { - "AddressType": { - "type": "string" - }, - "City": { - "type": "string" - }, - "Country": { - "type": "string" - }, - "PostalCode": { - "type": "string" - }, - "Region": { - "type": "string" - } - } - } - }, - "BankAccountDetails": { - "type": "string" - }, - "ContactID": { - "type": "string" - }, - "ContactStatus": { - "type": "string" - }, - "EmailAddress": { - "type": "string" - }, - "HasAttachments": { - "type": "boolean" - }, - "HasValidationErrors": { - "type": "boolean" - }, - "IsCustomer": { - "type": "boolean" - }, - "IsSupplier": { - "type": "boolean" - }, - "Name": { - "type": "string" - }, - "Phones": { - "type": "array", - "items": { - "type": "object", - "properties": { - "PhoneAreaCode": { - "type": "string" - }, - "PhoneCountryCode": { - "type": "string" - }, - "PhoneNumber": { - "type": "string" - }, - "PhoneType": { - "type": "string" - } - } - } - }, - "UpdatedDateUTC": { - "type": "string" - } - }, - "version": 2 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/account/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/account/get.json deleted file mode 100755 index 86052238..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/account/get.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$is_duplicate": { - "type": "boolean" - }, - "$layout_id": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Account_Name": { - "type": "string" - }, - "Account_Number": { - "type": "string" - }, - "Created_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Modified_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Parent_Account": { - "type": "null" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/account/getAll.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/account/getAll.json deleted file mode 100755 index dd2ed47c..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/account/getAll.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$is_duplicate": { - "type": "boolean" - }, - "$layout_id": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Account_Name": { - "type": "string" - }, - "Account_Number": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Tag": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/create.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/create.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/create.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/get.json deleted file mode 100755 index 7301a527..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/get.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$is_duplicate": { - "type": "boolean" - }, - "$layout_id": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Created_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "Email_Opt_Out": { - "type": "boolean" - }, - "Fax": { - "type": "null" - }, - "Full_Name": { - "type": "string" - }, - "Home_Phone": { - "type": "null" - }, - "id": { - "type": "string" - }, - "Last_Name": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Modified_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - }, - "Other_City": { - "type": "null" - }, - "Other_Country": { - "type": "null" - }, - "Other_State": { - "type": "null" - }, - "Other_Street": { - "type": "null" - }, - "Other_Zip": { - "type": "null" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Reporting_To": { - "type": "null" - }, - "Tag": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - }, - "Unsubscribed_Mode": { - "type": "null" - }, - "Unsubscribed_Time": { - "type": "null" - }, - "Vendor_Name": { - "type": "null" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json deleted file mode 100755 index 06859fe3..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/getAll.json +++ /dev/null @@ -1,165 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$is_duplicate": { - "type": "boolean" - }, - "$layout_id": { - "type": "object", - "properties": { - "display_label": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Created_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "Email_Opt_Out": { - "type": "boolean" - }, - "Full_Name": { - "type": "string" - }, - "Home_Phone": { - "type": "null" - }, - "id": { - "type": "string" - }, - "Last_Name": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Modified_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - }, - "Other_Phone": { - "type": "null" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Unsubscribed_Mode": { - "type": "null" - }, - "Unsubscribed_Time": { - "type": "null" - }, - "Vendor_Name": { - "type": "null" - } - }, - "version": 6 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/update.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/update.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/update.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/upsert.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/upsert.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/contact/upsert.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/create.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/create.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/create.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/get.json deleted file mode 100755 index e3d87ad2..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/get.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$canvas_id": { - "type": "null" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Account_Name": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Contact_Name": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "Deal_Name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Modified_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Probability": { - "type": "integer" - }, - "Tag": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/getAll.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/getAll.json deleted file mode 100755 index 4c56a3b7..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/getAll.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$layout_id": { - "type": "object", - "properties": { - "display_label": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Account_Name": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "Deal_Name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Modified_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Probability": { - "type": "integer" - }, - "Tag": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - } - }, - "version": 2 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/update.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/update.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/deal/update.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/create.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/create.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/create.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/get.json deleted file mode 100755 index f64db25d..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/get.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "type": "object", - "properties": { - "data": { - "type": "array", - "items": { - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$converted": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "$zia_owner_assignment": { - "type": "string" - }, - "Created_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "Email_Opt_Out": { - "type": "boolean" - }, - "Fax": { - "type": "null" - }, - "Full_Name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Last_Name": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Modified_By": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - }, - "No_of_Employees": { - "type": "null" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Rating": { - "type": "null" - }, - "Secondary_Email": { - "type": "null" - }, - "Tag": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - }, - "Unsubscribed_Mode": { - "type": "null" - }, - "Unsubscribed_Time": { - "type": "null" - } - } - } - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/getAll.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/getAll.json deleted file mode 100755 index 6b8ff344..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/getAll.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "type": "object", - "properties": { - "$approval": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "delegate": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - }, - "takeover": { - "type": "boolean" - } - } - }, - "$approval_state": { - "type": "string" - }, - "$approved": { - "type": "boolean" - }, - "$converted": { - "type": "boolean" - }, - "$currency_symbol": { - "type": "string" - }, - "$editable": { - "type": "boolean" - }, - "$field_states": { - "type": "null" - }, - "$in_merge": { - "type": "boolean" - }, - "$layout_id": { - "type": "object", - "properties": { - "display_label": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "$locked_for_me": { - "type": "boolean" - }, - "$process_flow": { - "type": "boolean" - }, - "$review": { - "type": "null" - }, - "$review_process": { - "type": "object", - "properties": { - "approve": { - "type": "boolean" - }, - "reject": { - "type": "boolean" - }, - "resubmit": { - "type": "boolean" - } - } - }, - "$state": { - "type": "string" - }, - "Created_Time": { - "type": "string" - }, - "Email_Opt_Out": { - "type": "boolean" - }, - "Full_Name": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Last_Name": { - "type": "string" - }, - "Locked__s": { - "type": "boolean" - }, - "Owner": { - "type": "object", - "properties": { - "email": { - "type": "string" - }, - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Tag": { - "type": "array", - "items": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - } - }, - "Unsubscribed_Mode": { - "type": "null" - }, - "Unsubscribed_Time": { - "type": "null" - } - }, - "version": 5 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/getFields.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/getFields.json deleted file mode 100755 index 2fd1debc..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/getFields.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "type": "object", - "properties": { - "api_name": { - "type": "string" - }, - "association_details": { - "type": "null" - }, - "businesscard_supported": { - "type": "boolean" - }, - "convert_mapping": { - "type": "object", - "properties": { - "Deals": { - "type": "null" - } - } - }, - "created_source": { - "type": "string" - }, - "crypt": { - "type": "null" - }, - "custom_field": { - "type": "boolean" - }, - "data_type": { - "type": "string" - }, - "decimal_place": { - "type": "null" - }, - "display_label": { - "type": "string" - }, - "external": { - "type": "null" - }, - "field_label": { - "type": "string" - }, - "field_read_only": { - "type": "boolean" - }, - "history_tracking": { - "type": "boolean" - }, - "id": { - "type": "string" - }, - "json_type": { - "type": "string" - }, - "length": { - "type": "integer" - }, - "mass_update": { - "type": "boolean" - }, - "pick_list_values": { - "type": "array", - "items": { - "type": "object", - "properties": { - "actual_value": { - "type": "string" - }, - "display_value": { - "type": "string" - }, - "reference_value": { - "type": "string" - } - } - } - }, - "quick_sequence_number": { - "type": "string" - }, - "read_only": { - "type": "boolean" - }, - "subform": { - "type": "null" - }, - "system_mandatory": { - "type": "boolean" - }, - "ui_type": { - "type": "integer" - }, - "view_type": { - "type": "object", - "properties": { - "create": { - "type": "boolean" - }, - "edit": { - "type": "boolean" - }, - "quick_create": { - "type": "boolean" - }, - "view": { - "type": "boolean" - } - } - }, - "visible": { - "type": "boolean" - }, - "webhook": { - "type": "boolean" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/update.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/update.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/update.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/upsert.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/upsert.json deleted file mode 100755 index 53b6fdd5..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoho/__schema__/v1.0.0/lead/upsert.json +++ /dev/null @@ -1,37 +0,0 @@ -{ - "type": "object", - "properties": { - "Created_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Created_Time": { - "type": "string" - }, - "id": { - "type": "string" - }, - "Modified_By": { - "type": "object", - "properties": { - "id": { - "type": "string" - }, - "name": { - "type": "string" - } - } - }, - "Modified_Time": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/create.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/create.json deleted file mode 100755 index f8cc6254..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/create.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "type": "object", - "properties": { - "created_at": { - "type": "string" - }, - "creation_source": { - "type": "string" - }, - "duration": { - "type": "integer" - }, - "encrypted_password": { - "type": "string" - }, - "h323_password": { - "type": "string" - }, - "host_email": { - "type": "string" - }, - "host_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "join_url": { - "type": "string" - }, - "password": { - "type": "string" - }, - "pre_schedule": { - "type": "boolean" - }, - "pstn_password": { - "type": "string" - }, - "settings": { - "type": "object", - "properties": { - "allow_host_control_participant_mute_state": { - "type": "boolean" - }, - "allow_multiple_devices": { - "type": "boolean" - }, - "alternative_host_update_polls": { - "type": "boolean" - }, - "alternative_hosts": { - "type": "string" - }, - "alternative_hosts_email_notification": { - "type": "boolean" - }, - "approval_type": { - "type": "integer" - }, - "approved_or_denied_countries_or_regions": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - } - }, - "audio": { - "type": "string" - }, - "auto_recording": { - "type": "string" - }, - "breakout_room": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - } - }, - "close_registration": { - "type": "boolean" - }, - "cn_meeting": { - "type": "boolean" - }, - "continuous_meeting_chat": { - "type": "object", - "properties": { - "auto_add_invited_external_users": { - "type": "boolean" - }, - "auto_add_meeting_participants": { - "type": "boolean" - }, - "channel_id": { - "type": "string" - }, - "enable": { - "type": "boolean" - } - } - }, - "device_testing": { - "type": "boolean" - }, - "email_in_attendee_report": { - "type": "boolean" - }, - "email_notification": { - "type": "boolean" - }, - "encryption_type": { - "type": "string" - }, - "enforce_login": { - "type": "boolean" - }, - "enforce_login_domains": { - "type": "string" - }, - "focus_mode": { - "type": "boolean" - }, - "host_save_video_order": { - "type": "boolean" - }, - "host_video": { - "type": "boolean" - }, - "in_meeting": { - "type": "boolean" - }, - "internal_meeting": { - "type": "boolean" - }, - "jbh_time": { - "type": "integer" - }, - "join_before_host": { - "type": "boolean" - }, - "meeting_authentication": { - "type": "boolean" - }, - "mute_upon_entry": { - "type": "boolean" - }, - "participant_focused_meeting": { - "type": "boolean" - }, - "participant_video": { - "type": "boolean" - }, - "private_meeting": { - "type": "boolean" - }, - "push_change_to_calendar": { - "type": "boolean" - }, - "registrants_confirmation_email": { - "type": "boolean" - }, - "registrants_email_notification": { - "type": "boolean" - }, - "request_permission_to_unmute_participants": { - "type": "boolean" - }, - "show_join_info": { - "type": "boolean" - }, - "show_share_button": { - "type": "boolean" - }, - "sign_language_interpretation": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - } - }, - "use_pmi": { - "type": "boolean" - }, - "waiting_room": { - "type": "boolean" - }, - "watermark": { - "type": "boolean" - } - } - }, - "start_time": { - "type": "string" - }, - "start_url": { - "type": "string" - }, - "status": { - "type": "string" - }, - "supportGoLive": { - "type": "boolean" - }, - "timezone": { - "type": "string" - }, - "topic": { - "type": "string" - }, - "type": { - "type": "integer" - }, - "uuid": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/get.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/get.json deleted file mode 100755 index 80860b12..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/get.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "type": "object", - "properties": { - "agenda": { - "type": "string" - }, - "assistant_id": { - "type": "string" - }, - "created_at": { - "type": "string" - }, - "duration": { - "type": "integer" - }, - "host_email": { - "type": "string" - }, - "host_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "join_url": { - "type": "string" - }, - "pre_schedule": { - "type": "boolean" - }, - "settings": { - "type": "object", - "properties": { - "allow_multiple_devices": { - "type": "boolean" - }, - "alternative_host_update_polls": { - "type": "boolean" - }, - "alternative_hosts": { - "type": "string" - }, - "alternative_hosts_email_notification": { - "type": "boolean" - }, - "approval_type": { - "type": "integer" - }, - "approved_or_denied_countries_or_regions": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - } - }, - "audio": { - "type": "string" - }, - "auto_recording": { - "type": "string" - }, - "auto_start_ai_companion_questions": { - "type": "boolean" - }, - "auto_start_meeting_summary": { - "type": "boolean" - }, - "breakout_room": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - } - }, - "close_registration": { - "type": "boolean" - }, - "cn_meeting": { - "type": "boolean" - }, - "continuous_meeting_chat": { - "type": "object", - "properties": { - "auto_add_invited_external_users": { - "type": "boolean" - }, - "channel_id": { - "type": "string" - }, - "enable": { - "type": "boolean" - } - } - }, - "device_testing": { - "type": "boolean" - }, - "email_in_attendee_report": { - "type": "boolean" - }, - "email_notification": { - "type": "boolean" - }, - "enable_dedicated_group_chat": { - "type": "boolean" - }, - "encryption_type": { - "type": "string" - }, - "enforce_login": { - "type": "boolean" - }, - "enforce_login_domains": { - "type": "string" - }, - "focus_mode": { - "type": "boolean" - }, - "global_dial_in_countries": { - "type": "array", - "items": { - "type": "string" - } - }, - "global_dial_in_numbers": { - "type": "array", - "items": { - "type": "object", - "properties": { - "city": { - "type": "string" - }, - "country": { - "type": "string" - }, - "country_name": { - "type": "string" - }, - "number": { - "type": "string" - }, - "type": { - "type": "string" - } - } - } - }, - "host_save_video_order": { - "type": "boolean" - }, - "host_video": { - "type": "boolean" - }, - "in_meeting": { - "type": "boolean" - }, - "internal_meeting": { - "type": "boolean" - }, - "jbh_time": { - "type": "integer" - }, - "join_before_host": { - "type": "boolean" - }, - "meeting_authentication": { - "type": "boolean" - }, - "meeting_invitees": { - "type": "array", - "items": { - "type": "object", - "properties": { - "email": { - "type": "string" - } - } - } - }, - "mute_upon_entry": { - "type": "boolean" - }, - "participant_focused_meeting": { - "type": "boolean" - }, - "participant_video": { - "type": "boolean" - }, - "private_meeting": { - "type": "boolean" - }, - "push_change_to_calendar": { - "type": "boolean" - }, - "registrants_confirmation_email": { - "type": "boolean" - }, - "registrants_email_notification": { - "type": "boolean" - }, - "request_permission_to_unmute_participants": { - "type": "boolean" - }, - "show_join_info": { - "type": "boolean" - }, - "show_share_button": { - "type": "boolean" - }, - "sign_language_interpretation": { - "type": "object", - "properties": { - "enable": { - "type": "boolean" - } - } - }, - "use_pmi": { - "type": "boolean" - }, - "waiting_room": { - "type": "boolean" - }, - "watermark": { - "type": "boolean" - } - } - }, - "start_time": { - "type": "string" - }, - "start_url": { - "type": "string" - }, - "status": { - "type": "string" - }, - "timezone": { - "type": "string" - }, - "topic": { - "type": "string" - }, - "type": { - "type": "integer" - }, - "uuid": { - "type": "string" - } - }, - "version": 1 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/getAll.json b/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/getAll.json deleted file mode 100755 index 2b5f7373..00000000 --- a/n8n-n8n-1.109.2/packages/nodes-base/nodes/Zoom/__schema__/v1.0.0/meeting/getAll.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "type": "object", - "properties": { - "created_at": { - "type": "string" - }, - "duration": { - "type": "integer" - }, - "host_id": { - "type": "string" - }, - "id": { - "type": "integer" - }, - "join_url": { - "type": "string" - }, - "start_time": { - "type": "string" - }, - "timezone": { - "type": "string" - }, - "topic": { - "type": "string" - }, - "type": { - "type": "integer" - }, - "uuid": { - "type": "string" - } - }, - "version": 2 -} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/package 2.json b/n8n-n8n-1.109.2/packages/nodes-base/package 2.json new file mode 100755 index 00000000..fc1e706d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/package 2.json @@ -0,0 +1,954 @@ +{ + "name": "n8n-nodes-base", + "version": "1.107.0", + "description": "Base nodes of n8n", + "main": "index.js", + "scripts": { + "clean": "rimraf dist .turbo", + "copy-nodes-json": "node scripts/copy-nodes-json.js .", + "dev": "pnpm watch", + "typecheck": "tsc --noEmit", + "build": "tsc --build tsconfig.build.cjs.json && pnpm copy-nodes-json && tsc-alias -p tsconfig.build.cjs.json && pnpm n8n-copy-static-files && pnpm n8n-generate-translations && pnpm n8n-generate-metadata", + "format": "biome format --write .", + "format:check": "biome ci .", + "lint": "eslint nodes credentials utils test --quiet && node ./scripts/validate-load-options-methods.js", + "lint:fix": "eslint nodes credentials utils test --fix", + "watch": "tsc-watch -p tsconfig.build.cjs.json --onCompilationComplete \"pnpm copy-nodes-json && tsc-alias -p tsconfig.build.cjs.json\" --onSuccess \"pnpm n8n-generate-metadata\"", + "test": "jest", + "test:dev": "jest --watch" + }, + "files": [ + "dist" + ], + "n8n": { + "credentials": [ + "dist/credentials/ActionNetworkApi.credentials.js", + "dist/credentials/ActiveCampaignApi.credentials.js", + "dist/credentials/AcuitySchedulingApi.credentials.js", + "dist/credentials/AcuitySchedulingOAuth2Api.credentials.js", + "dist/credentials/AdaloApi.credentials.js", + "dist/credentials/AffinityApi.credentials.js", + "dist/credentials/AgileCrmApi.credentials.js", + "dist/credentials/AirtableApi.credentials.js", + "dist/credentials/AirtableOAuth2Api.credentials.js", + "dist/credentials/AirtableTokenApi.credentials.js", + "dist/credentials/AirtopApi.credentials.js", + "dist/credentials/AlienVaultApi.credentials.js", + "dist/credentials/Amqp.credentials.js", + "dist/credentials/ApiTemplateIoApi.credentials.js", + "dist/credentials/AsanaApi.credentials.js", + "dist/credentials/AsanaOAuth2Api.credentials.js", + "dist/credentials/Auth0ManagementApi.credentials.js", + "dist/credentials/AutomizyApi.credentials.js", + "dist/credentials/AutopilotApi.credentials.js", + "dist/credentials/Aws.credentials.js", + "dist/credentials/AzureStorageOAuth2Api.credentials.js", + "dist/credentials/AzureStorageSharedKeyApi.credentials.js", + "dist/credentials/BambooHrApi.credentials.js", + "dist/credentials/BannerbearApi.credentials.js", + "dist/credentials/BaserowApi.credentials.js", + "dist/credentials/BeeminderApi.credentials.js", + "dist/credentials/BeeminderOAuth2Api.credentials.js", + "dist/credentials/BitbucketApi.credentials.js", + "dist/credentials/BitlyApi.credentials.js", + "dist/credentials/BitlyOAuth2Api.credentials.js", + "dist/credentials/BitwardenApi.credentials.js", + "dist/credentials/BoxOAuth2Api.credentials.js", + "dist/credentials/BrandfetchApi.credentials.js", + "dist/credentials/BubbleApi.credentials.js", + "dist/credentials/CalApi.credentials.js", + "dist/credentials/CalendlyApi.credentials.js", + "dist/credentials/CalendlyOAuth2Api.credentials.js", + "dist/credentials/CarbonBlackApi.credentials.js", + "dist/credentials/ChargebeeApi.credentials.js", + "dist/credentials/CircleCiApi.credentials.js", + "dist/credentials/CiscoMerakiApi.credentials.js", + "dist/credentials/CiscoSecureEndpointApi.credentials.js", + "dist/credentials/CiscoWebexOAuth2Api.credentials.js", + "dist/credentials/CiscoUmbrellaApi.credentials.js", + "dist/credentials/CloudflareApi.credentials.js", + "dist/credentials/ClearbitApi.credentials.js", + "dist/credentials/ClickUpApi.credentials.js", + "dist/credentials/ClickUpOAuth2Api.credentials.js", + "dist/credentials/ClockifyApi.credentials.js", + "dist/credentials/CockpitApi.credentials.js", + "dist/credentials/CodaApi.credentials.js", + "dist/credentials/ContentfulApi.credentials.js", + "dist/credentials/ConvertApi.credentials.js", + "dist/credentials/ConvertKitApi.credentials.js", + "dist/credentials/CopperApi.credentials.js", + "dist/credentials/CortexApi.credentials.js", + "dist/credentials/CrateDb.credentials.js", + "dist/credentials/CrowdStrikeOAuth2Api.credentials.js", + "dist/credentials/CrowdDevApi.credentials.js", + "dist/credentials/CustomerIoApi.credentials.js", + "dist/credentials/DatadogApi.credentials.js", + "dist/credentials/DeepLApi.credentials.js", + "dist/credentials/DemioApi.credentials.js", + "dist/credentials/DfirIrisApi.credentials.js", + "dist/credentials/DhlApi.credentials.js", + "dist/credentials/DiscordBotApi.credentials.js", + "dist/credentials/DiscordOAuth2Api.credentials.js", + "dist/credentials/DiscordWebhookApi.credentials.js", + "dist/credentials/DiscourseApi.credentials.js", + "dist/credentials/DisqusApi.credentials.js", + "dist/credentials/DriftApi.credentials.js", + "dist/credentials/DriftOAuth2Api.credentials.js", + "dist/credentials/DropboxApi.credentials.js", + "dist/credentials/DropboxOAuth2Api.credentials.js", + "dist/credentials/DropcontactApi.credentials.js", + "dist/credentials/DynatraceApi.credentials.js", + "dist/credentials/EgoiApi.credentials.js", + "dist/credentials/ElasticsearchApi.credentials.js", + "dist/credentials/ElasticSecurityApi.credentials.js", + "dist/credentials/EmeliaApi.credentials.js", + "dist/credentials/ERPNextApi.credentials.js", + "dist/credentials/EventbriteApi.credentials.js", + "dist/credentials/EventbriteOAuth2Api.credentials.js", + "dist/credentials/F5BigIpApi.credentials.js", + "dist/credentials/FacebookGraphApi.credentials.js", + "dist/credentials/FacebookGraphAppApi.credentials.js", + "dist/credentials/FacebookLeadAdsOAuth2Api.credentials.js", + "dist/credentials/FigmaApi.credentials.js", + "dist/credentials/FileMaker.credentials.js", + "dist/credentials/FilescanApi.credentials.js", + "dist/credentials/FlowApi.credentials.js", + "dist/credentials/FormIoApi.credentials.js", + "dist/credentials/FormstackApi.credentials.js", + "dist/credentials/FormstackOAuth2Api.credentials.js", + "dist/credentials/FortiGateApi.credentials.js", + "dist/credentials/FreshdeskApi.credentials.js", + "dist/credentials/FreshserviceApi.credentials.js", + "dist/credentials/FreshworksCrmApi.credentials.js", + "dist/credentials/Ftp.credentials.js", + "dist/credentials/GetResponseApi.credentials.js", + "dist/credentials/GetResponseOAuth2Api.credentials.js", + "dist/credentials/GhostAdminApi.credentials.js", + "dist/credentials/GhostContentApi.credentials.js", + "dist/credentials/GithubApi.credentials.js", + "dist/credentials/GithubOAuth2Api.credentials.js", + "dist/credentials/GitlabApi.credentials.js", + "dist/credentials/GitlabOAuth2Api.credentials.js", + "dist/credentials/GitPassword.credentials.js", + "dist/credentials/GmailOAuth2Api.credentials.js", + "dist/credentials/GongApi.credentials.js", + "dist/credentials/GongOAuth2Api.credentials.js", + "dist/credentials/GoogleAdsOAuth2Api.credentials.js", + "dist/credentials/GoogleAnalyticsOAuth2Api.credentials.js", + "dist/credentials/GoogleApi.credentials.js", + "dist/credentials/GoogleBigQueryOAuth2Api.credentials.js", + "dist/credentials/GoogleBooksOAuth2Api.credentials.js", + "dist/credentials/GoogleCalendarOAuth2Api.credentials.js", + "dist/credentials/GoogleChatOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudNaturalLanguageOAuth2Api.credentials.js", + "dist/credentials/GoogleCloudStorageOAuth2Api.credentials.js", + "dist/credentials/GoogleContactsOAuth2Api.credentials.js", + "dist/credentials/GoogleDocsOAuth2Api.credentials.js", + "dist/credentials/GoogleDriveOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseCloudFirestoreOAuth2Api.credentials.js", + "dist/credentials/GoogleFirebaseRealtimeDatabaseOAuth2Api.credentials.js", + "dist/credentials/GoogleBusinessProfileOAuth2Api.credentials.js", + "dist/credentials/GoogleOAuth2Api.credentials.js", + "dist/credentials/GooglePerspectiveOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsOAuth2Api.credentials.js", + "dist/credentials/GoogleSheetsTriggerOAuth2Api.credentials.js", + "dist/credentials/GoogleSlidesOAuth2Api.credentials.js", + "dist/credentials/GoogleTasksOAuth2Api.credentials.js", + "dist/credentials/GoogleTranslateOAuth2Api.credentials.js", + "dist/credentials/GotifyApi.credentials.js", + "dist/credentials/GoToWebinarOAuth2Api.credentials.js", + "dist/credentials/GristApi.credentials.js", + "dist/credentials/GrafanaApi.credentials.js", + "dist/credentials/GSuiteAdminOAuth2Api.credentials.js", + "dist/credentials/GumroadApi.credentials.js", + "dist/credentials/HaloPSAApi.credentials.js", + "dist/credentials/HarvestApi.credentials.js", + "dist/credentials/HarvestOAuth2Api.credentials.js", + "dist/credentials/HelpScoutOAuth2Api.credentials.js", + "dist/credentials/HighLevelApi.credentials.js", + "dist/credentials/HighLevelOAuth2Api.credentials.js", + "dist/credentials/HomeAssistantApi.credentials.js", + "dist/credentials/HttpBasicAuth.credentials.js", + "dist/credentials/HttpBearerAuth.credentials.js", + "dist/credentials/HttpDigestAuth.credentials.js", + "dist/credentials/HttpHeaderAuth.credentials.js", + "dist/credentials/HttpCustomAuth.credentials.js", + "dist/credentials/HttpQueryAuth.credentials.js", + "dist/credentials/HttpSslAuth.credentials.js", + "dist/credentials/HubspotApi.credentials.js", + "dist/credentials/HubspotAppToken.credentials.js", + "dist/credentials/HubspotDeveloperApi.credentials.js", + "dist/credentials/HubspotOAuth2Api.credentials.js", + "dist/credentials/HumanticAiApi.credentials.js", + "dist/credentials/HunterApi.credentials.js", + "dist/credentials/HybridAnalysisApi.credentials.js", + "dist/credentials/Imap.credentials.js", + "dist/credentials/ImpervaWafApi.credentials.js", + "dist/credentials/IntercomApi.credentials.js", + "dist/credentials/InvoiceNinjaApi.credentials.js", + "dist/credentials/IterableApi.credentials.js", + "dist/credentials/JenkinsApi.credentials.js", + "dist/credentials/JinaAiApi.credentials.js", + "dist/credentials/JiraSoftwareCloudApi.credentials.js", + "dist/credentials/JiraSoftwareServerApi.credentials.js", + "dist/credentials/JiraSoftwareServerPatApi.credentials.js", + "dist/credentials/JotFormApi.credentials.js", + "dist/credentials/JwtAuth.credentials.js", + "dist/credentials/Kafka.credentials.js", + "dist/credentials/KeapOAuth2Api.credentials.js", + "dist/credentials/KibanaApi.credentials.js", + "dist/credentials/KitemakerApi.credentials.js", + "dist/credentials/KoBoToolboxApi.credentials.js", + "dist/credentials/Ldap.credentials.js", + "dist/credentials/LemlistApi.credentials.js", + "dist/credentials/LinearApi.credentials.js", + "dist/credentials/LinearOAuth2Api.credentials.js", + "dist/credentials/LineNotifyOAuth2Api.credentials.js", + "dist/credentials/LingvaNexApi.credentials.js", + "dist/credentials/LinkedInCommunityManagementOAuth2Api.credentials.js", + "dist/credentials/LinkedInOAuth2Api.credentials.js", + "dist/credentials/LoneScaleApi.credentials.js", + "dist/credentials/Magento2Api.credentials.js", + "dist/credentials/MailcheckApi.credentials.js", + "dist/credentials/MailchimpApi.credentials.js", + "dist/credentials/MailchimpOAuth2Api.credentials.js", + "dist/credentials/MailerLiteApi.credentials.js", + "dist/credentials/MailgunApi.credentials.js", + "dist/credentials/MailjetEmailApi.credentials.js", + "dist/credentials/MailjetSmsApi.credentials.js", + "dist/credentials/MalcoreApi.credentials.js", + "dist/credentials/MandrillApi.credentials.js", + "dist/credentials/MarketstackApi.credentials.js", + "dist/credentials/MatrixApi.credentials.js", + "dist/credentials/MattermostApi.credentials.js", + "dist/credentials/MauticApi.credentials.js", + "dist/credentials/MauticOAuth2Api.credentials.js", + "dist/credentials/MediumApi.credentials.js", + "dist/credentials/MediumOAuth2Api.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MessageBirdApi.credentials.js", + "dist/credentials/MetabaseApi.credentials.js", + "dist/credentials/MicrosoftAzureCosmosDbSharedKeyApi.credentials.js", + "dist/credentials/MicrosoftAzureMonitorOAuth2Api.credentials.js", + "dist/credentials/MicrosoftDynamicsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftEntraOAuth2Api.credentials.js", + "dist/credentials/MicrosoftExcelOAuth2Api.credentials.js", + "dist/credentials/MicrosoftGraphSecurityOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOneDriveOAuth2Api.credentials.js", + "dist/credentials/MicrosoftOutlookOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSharePointOAuth2Api.credentials.js", + "dist/credentials/MicrosoftSql.credentials.js", + "dist/credentials/MicrosoftTeamsOAuth2Api.credentials.js", + "dist/credentials/MicrosoftToDoOAuth2Api.credentials.js", + "dist/credentials/MindeeInvoiceApi.credentials.js", + "dist/credentials/MindeeReceiptApi.credentials.js", + "dist/credentials/MiroOAuth2Api.credentials.js", + "dist/credentials/MispApi.credentials.js", + "dist/credentials/MistApi.credentials.js", + "dist/credentials/MoceanApi.credentials.js", + "dist/credentials/MondayComApi.credentials.js", + "dist/credentials/MondayComOAuth2Api.credentials.js", + "dist/credentials/MongoDb.credentials.js", + "dist/credentials/MonicaCrmApi.credentials.js", + "dist/credentials/Mqtt.credentials.js", + "dist/credentials/Msg91Api.credentials.js", + "dist/credentials/MySql.credentials.js", + "dist/credentials/N8nApi.credentials.js", + "dist/credentials/NasaApi.credentials.js", + "dist/credentials/NetlifyApi.credentials.js", + "dist/credentials/NetscalerAdcApi.credentials.js", + "dist/credentials/NextCloudApi.credentials.js", + "dist/credentials/NextCloudOAuth2Api.credentials.js", + "dist/credentials/NocoDb.credentials.js", + "dist/credentials/NocoDbApiToken.credentials.js", + "dist/credentials/NotionApi.credentials.js", + "dist/credentials/NotionOAuth2Api.credentials.js", + "dist/credentials/NpmApi.credentials.js", + "dist/credentials/OAuth1Api.credentials.js", + "dist/credentials/OAuth2Api.credentials.js", + "dist/credentials/OdooApi.credentials.js", + "dist/credentials/OktaApi.credentials.js", + "dist/credentials/OneSimpleApi.credentials.js", + "dist/credentials/OnfleetApi.credentials.js", + "dist/credentials/OpenAiApi.credentials.js", + "dist/credentials/OpenCTIApi.credentials.js", + "dist/credentials/OpenWeatherMapApi.credentials.js", + "dist/credentials/OrbitApi.credentials.js", + "dist/credentials/OuraApi.credentials.js", + "dist/credentials/PaddleApi.credentials.js", + "dist/credentials/PagerDutyApi.credentials.js", + "dist/credentials/PagerDutyOAuth2Api.credentials.js", + "dist/credentials/PayPalApi.credentials.js", + "dist/credentials/PeekalinkApi.credentials.js", + "dist/credentials/PerplexityApi.credentials.js", + "dist/credentials/PhantombusterApi.credentials.js", + "dist/credentials/PhilipsHueOAuth2Api.credentials.js", + "dist/credentials/PipedriveApi.credentials.js", + "dist/credentials/PipedriveOAuth2Api.credentials.js", + "dist/credentials/PlivoApi.credentials.js", + "dist/credentials/Postgres.credentials.js", + "dist/credentials/PostHogApi.credentials.js", + "dist/credentials/PostmarkApi.credentials.js", + "dist/credentials/ProfitWellApi.credentials.js", + "dist/credentials/PushbulletOAuth2Api.credentials.js", + "dist/credentials/PushcutApi.credentials.js", + "dist/credentials/PushoverApi.credentials.js", + "dist/credentials/QRadarApi.credentials.js", + "dist/credentials/QualysApi.credentials.js", + "dist/credentials/QuestDb.credentials.js", + "dist/credentials/QuickBaseApi.credentials.js", + "dist/credentials/QuickBooksOAuth2Api.credentials.js", + "dist/credentials/RabbitMQ.credentials.js", + "dist/credentials/RaindropOAuth2Api.credentials.js", + "dist/credentials/Rapid7InsightVmApi.credentials.js", + "dist/credentials/RecordedFutureApi.credentials.js", + "dist/credentials/RedditOAuth2Api.credentials.js", + "dist/credentials/Redis.credentials.js", + "dist/credentials/RocketchatApi.credentials.js", + "dist/credentials/RundeckApi.credentials.js", + "dist/credentials/S3.credentials.js", + "dist/credentials/SalesforceJwtApi.credentials.js", + "dist/credentials/SalesforceOAuth2Api.credentials.js", + "dist/credentials/SalesmateApi.credentials.js", + "dist/credentials/SeaTableApi.credentials.js", + "dist/credentials/SecurityScorecardApi.credentials.js", + "dist/credentials/SegmentApi.credentials.js", + "dist/credentials/SekoiaApi.credentials.js", + "dist/credentials/SendGridApi.credentials.js", + "dist/credentials/BrevoApi.credentials.js", + "dist/credentials/SendyApi.credentials.js", + "dist/credentials/SentryIoApi.credentials.js", + "dist/credentials/SentryIoOAuth2Api.credentials.js", + "dist/credentials/SentryIoServerApi.credentials.js", + "dist/credentials/ServiceNowOAuth2Api.credentials.js", + "dist/credentials/ServiceNowBasicApi.credentials.js", + "dist/credentials/Sftp.credentials.js", + "dist/credentials/ShopifyApi.credentials.js", + "dist/credentials/ShopifyAccessTokenApi.credentials.js", + "dist/credentials/ShopifyOAuth2Api.credentials.js", + "dist/credentials/Signl4Api.credentials.js", + "dist/credentials/SlackApi.credentials.js", + "dist/credentials/SlackOAuth2Api.credentials.js", + "dist/credentials/Sms77Api.credentials.js", + "dist/credentials/Smtp.credentials.js", + "dist/credentials/Snowflake.credentials.js", + "dist/credentials/SolarWindsIpamApi.credentials.js", + "dist/credentials/SolarWindsObservabilityApi.credentials.js", + "dist/credentials/SplunkApi.credentials.js", + "dist/credentials/SpontitApi.credentials.js", + "dist/credentials/SpotifyOAuth2Api.credentials.js", + "dist/credentials/ShufflerApi.credentials.js", + "dist/credentials/SshPassword.credentials.js", + "dist/credentials/SshPrivateKey.credentials.js", + "dist/credentials/StackbyApi.credentials.js", + "dist/credentials/StoryblokContentApi.credentials.js", + "dist/credentials/StoryblokManagementApi.credentials.js", + "dist/credentials/StrapiApi.credentials.js", + "dist/credentials/StrapiTokenApi.credentials.js", + "dist/credentials/StravaOAuth2Api.credentials.js", + "dist/credentials/StripeApi.credentials.js", + "dist/credentials/SupabaseApi.credentials.js", + "dist/credentials/SurveyMonkeyApi.credentials.js", + "dist/credentials/SurveyMonkeyOAuth2Api.credentials.js", + "dist/credentials/SyncroMspApi.credentials.js", + "dist/credentials/SysdigApi.credentials.js", + "dist/credentials/TaigaApi.credentials.js", + "dist/credentials/TapfiliateApi.credentials.js", + "dist/credentials/TelegramApi.credentials.js", + "dist/credentials/TheHiveProjectApi.credentials.js", + "dist/credentials/TheHiveApi.credentials.js", + "dist/credentials/TimescaleDb.credentials.js", + "dist/credentials/TodoistApi.credentials.js", + "dist/credentials/TodoistOAuth2Api.credentials.js", + "dist/credentials/TogglApi.credentials.js", + "dist/credentials/TotpApi.credentials.js", + "dist/credentials/TravisCiApi.credentials.js", + "dist/credentials/TrellixEpoApi.credentials.js", + "dist/credentials/TrelloApi.credentials.js", + "dist/credentials/TwakeCloudApi.credentials.js", + "dist/credentials/TwakeServerApi.credentials.js", + "dist/credentials/TwilioApi.credentials.js", + "dist/credentials/TwistOAuth2Api.credentials.js", + "dist/credentials/TwitterOAuth1Api.credentials.js", + "dist/credentials/TwitterOAuth2Api.credentials.js", + "dist/credentials/TypeformApi.credentials.js", + "dist/credentials/TypeformOAuth2Api.credentials.js", + "dist/credentials/UnleashedSoftwareApi.credentials.js", + "dist/credentials/UpleadApi.credentials.js", + "dist/credentials/UProcApi.credentials.js", + "dist/credentials/UptimeRobotApi.credentials.js", + "dist/credentials/UrlScanIoApi.credentials.js", + "dist/credentials/VeroApi.credentials.js", + "dist/credentials/VerticaApi.credentials.js", + "dist/credentials/VirusTotalApi.credentials.js", + "dist/credentials/VonageApi.credentials.js", + "dist/credentials/VenafiTlsProtectCloudApi.credentials.js", + "dist/credentials/VenafiTlsProtectDatacenterApi.credentials.js", + "dist/credentials/WebflowApi.credentials.js", + "dist/credentials/WebflowOAuth2Api.credentials.js", + "dist/credentials/WekanApi.credentials.js", + "dist/credentials/WhatsAppApi.credentials.js", + "dist/credentials/WhatsAppTriggerApi.credentials.js", + "dist/credentials/WiseApi.credentials.js", + "dist/credentials/WooCommerceApi.credentials.js", + "dist/credentials/WordpressApi.credentials.js", + "dist/credentials/WorkableApi.credentials.js", + "dist/credentials/WufooApi.credentials.js", + "dist/credentials/XeroOAuth2Api.credentials.js", + "dist/credentials/YourlsApi.credentials.js", + "dist/credentials/YouTubeOAuth2Api.credentials.js", + "dist/credentials/ZabbixApi.credentials.js", + "dist/credentials/ZammadBasicAuthApi.credentials.js", + "dist/credentials/ZammadTokenAuthApi.credentials.js", + "dist/credentials/ZendeskApi.credentials.js", + "dist/credentials/ZendeskOAuth2Api.credentials.js", + "dist/credentials/ZohoOAuth2Api.credentials.js", + "dist/credentials/ZoomApi.credentials.js", + "dist/credentials/ZoomOAuth2Api.credentials.js", + "dist/credentials/ZscalerZiaApi.credentials.js", + "dist/credentials/ZulipApi.credentials.js" + ], + "nodes": [ + "dist/nodes/ActionNetwork/ActionNetwork.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaign.node.js", + "dist/nodes/ActiveCampaign/ActiveCampaignTrigger.node.js", + "dist/nodes/AcuityScheduling/AcuitySchedulingTrigger.node.js", + "dist/nodes/Adalo/Adalo.node.js", + "dist/nodes/Affinity/Affinity.node.js", + "dist/nodes/Affinity/AffinityTrigger.node.js", + "dist/nodes/AgileCrm/AgileCrm.node.js", + "dist/nodes/Airtable/Airtable.node.js", + "dist/nodes/Airtable/AirtableTrigger.node.js", + "dist/nodes/Airtop/Airtop.node.js", + "dist/nodes/AiTransform/AiTransform.node.js", + "dist/nodes/Amqp/Amqp.node.js", + "dist/nodes/Amqp/AmqpTrigger.node.js", + "dist/nodes/ApiTemplateIo/ApiTemplateIo.node.js", + "dist/nodes/Asana/Asana.node.js", + "dist/nodes/Asana/AsanaTrigger.node.js", + "dist/nodes/Automizy/Automizy.node.js", + "dist/nodes/Autopilot/Autopilot.node.js", + "dist/nodes/Autopilot/AutopilotTrigger.node.js", + "dist/nodes/Aws/AwsLambda.node.js", + "dist/nodes/Aws/AwsSns.node.js", + "dist/nodes/Aws/AwsSnsTrigger.node.js", + "dist/nodes/Aws/CertificateManager/AwsCertificateManager.node.js", + "dist/nodes/Aws/Cognito/AwsCognito.node.js", + "dist/nodes/Aws/Comprehend/AwsComprehend.node.js", + "dist/nodes/Aws/DynamoDB/AwsDynamoDB.node.js", + "dist/nodes/Aws/ELB/AwsElb.node.js", + "dist/nodes/Aws/IAM/AwsIam.node.js", + "dist/nodes/Aws/Rekognition/AwsRekognition.node.js", + "dist/nodes/Aws/S3/AwsS3.node.js", + "dist/nodes/Aws/SES/AwsSes.node.js", + "dist/nodes/Aws/SQS/AwsSqs.node.js", + "dist/nodes/Aws/Textract/AwsTextract.node.js", + "dist/nodes/Aws/Transcribe/AwsTranscribe.node.js", + "dist/nodes/BambooHr/BambooHr.node.js", + "dist/nodes/Bannerbear/Bannerbear.node.js", + "dist/nodes/Baserow/Baserow.node.js", + "dist/nodes/Beeminder/Beeminder.node.js", + "dist/nodes/Bitbucket/BitbucketTrigger.node.js", + "dist/nodes/Bitly/Bitly.node.js", + "dist/nodes/Bitwarden/Bitwarden.node.js", + "dist/nodes/Box/Box.node.js", + "dist/nodes/Box/BoxTrigger.node.js", + "dist/nodes/Brandfetch/Brandfetch.node.js", + "dist/nodes/Bubble/Bubble.node.js", + "dist/nodes/Cal/CalTrigger.node.js", + "dist/nodes/Calendly/CalendlyTrigger.node.js", + "dist/nodes/Chargebee/Chargebee.node.js", + "dist/nodes/Chargebee/ChargebeeTrigger.node.js", + "dist/nodes/CircleCi/CircleCi.node.js", + "dist/nodes/Cisco/Webex/CiscoWebex.node.js", + "dist/nodes/Cisco/Webex/CiscoWebexTrigger.node.js", + "dist/nodes/Cloudflare/Cloudflare.node.js", + "dist/nodes/Clearbit/Clearbit.node.js", + "dist/nodes/ClickUp/ClickUp.node.js", + "dist/nodes/ClickUp/ClickUpTrigger.node.js", + "dist/nodes/Clockify/Clockify.node.js", + "dist/nodes/Clockify/ClockifyTrigger.node.js", + "dist/nodes/Cockpit/Cockpit.node.js", + "dist/nodes/Coda/Coda.node.js", + "dist/nodes/Code/Code.node.js", + "dist/nodes/CoinGecko/CoinGecko.node.js", + "dist/nodes/CompareDatasets/CompareDatasets.node.js", + "dist/nodes/Compression/Compression.node.js", + "dist/nodes/Contentful/Contentful.node.js", + "dist/nodes/ConvertKit/ConvertKit.node.js", + "dist/nodes/ConvertKit/ConvertKitTrigger.node.js", + "dist/nodes/Copper/Copper.node.js", + "dist/nodes/Copper/CopperTrigger.node.js", + "dist/nodes/Cortex/Cortex.node.js", + "dist/nodes/CrateDb/CrateDb.node.js", + "dist/nodes/Cron/Cron.node.js", + "dist/nodes/CrowdDev/CrowdDev.node.js", + "dist/nodes/CrowdDev/CrowdDevTrigger.node.js", + "dist/nodes/Crypto/Crypto.node.js", + "dist/nodes/CustomerIo/CustomerIo.node.js", + "dist/nodes/CustomerIo/CustomerIoTrigger.node.js", + "dist/nodes/DateTime/DateTime.node.js", + "dist/nodes/DebugHelper/DebugHelper.node.js", + "dist/nodes/DeepL/DeepL.node.js", + "dist/nodes/Demio/Demio.node.js", + "dist/nodes/Dhl/Dhl.node.js", + "dist/nodes/Discord/Discord.node.js", + "dist/nodes/Discourse/Discourse.node.js", + "dist/nodes/Disqus/Disqus.node.js", + "dist/nodes/Drift/Drift.node.js", + "dist/nodes/Dropbox/Dropbox.node.js", + "dist/nodes/Dropcontact/Dropcontact.node.js", + "dist/nodes/EditImage/EditImage.node.js", + "dist/nodes/E2eTest/E2eTest.node.js", + "dist/nodes/Egoi/Egoi.node.js", + "dist/nodes/Elastic/Elasticsearch/Elasticsearch.node.js", + "dist/nodes/Elastic/ElasticSecurity/ElasticSecurity.node.js", + "dist/nodes/EmailReadImap/EmailReadImap.node.js", + "dist/nodes/EmailSend/EmailSend.node.js", + "dist/nodes/Emelia/Emelia.node.js", + "dist/nodes/Emelia/EmeliaTrigger.node.js", + "dist/nodes/ERPNext/ERPNext.node.js", + "dist/nodes/ErrorTrigger/ErrorTrigger.node.js", + "dist/nodes/Evaluation/EvaluationTrigger/EvaluationTrigger.node.ee.js", + "dist/nodes/Evaluation/Evaluation/Evaluation.node.ee.js", + "dist/nodes/Eventbrite/EventbriteTrigger.node.js", + "dist/nodes/ExecuteCommand/ExecuteCommand.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflow/ExecuteWorkflow.node.js", + "dist/nodes/ExecuteWorkflow/ExecuteWorkflowTrigger/ExecuteWorkflowTrigger.node.js", + "dist/nodes/ExecutionData/ExecutionData.node.js", + "dist/nodes/Facebook/FacebookGraphApi.node.js", + "dist/nodes/Facebook/FacebookTrigger.node.js", + "dist/nodes/FacebookLeadAds/FacebookLeadAdsTrigger.node.js", + "dist/nodes/Figma/FigmaTrigger.node.js", + "dist/nodes/FileMaker/FileMaker.node.js", + "dist/nodes/Files/ReadWriteFile/ReadWriteFile.node.js", + "dist/nodes/Files/ConvertToFile/ConvertToFile.node.js", + "dist/nodes/Files/ExtractFromFile/ExtractFromFile.node.js", + "dist/nodes/Filter/Filter.node.js", + "dist/nodes/Flow/Flow.node.js", + "dist/nodes/Flow/FlowTrigger.node.js", + "dist/nodes/Form/Form.node.js", + "dist/nodes/Form/FormTrigger.node.js", + "dist/nodes/FormIo/FormIoTrigger.node.js", + "dist/nodes/Formstack/FormstackTrigger.node.js", + "dist/nodes/Freshdesk/Freshdesk.node.js", + "dist/nodes/Freshservice/Freshservice.node.js", + "dist/nodes/FreshworksCrm/FreshworksCrm.node.js", + "dist/nodes/Ftp/Ftp.node.js", + "dist/nodes/Function/Function.node.js", + "dist/nodes/FunctionItem/FunctionItem.node.js", + "dist/nodes/GetResponse/GetResponse.node.js", + "dist/nodes/GetResponse/GetResponseTrigger.node.js", + "dist/nodes/Ghost/Ghost.node.js", + "dist/nodes/Git/Git.node.js", + "dist/nodes/Github/Github.node.js", + "dist/nodes/Github/GithubTrigger.node.js", + "dist/nodes/Gitlab/Gitlab.node.js", + "dist/nodes/Gitlab/GitlabTrigger.node.js", + "dist/nodes/Gong/Gong.node.js", + "dist/nodes/Google/Ads/GoogleAds.node.js", + "dist/nodes/Google/Analytics/GoogleAnalytics.node.js", + "dist/nodes/Google/BigQuery/GoogleBigQuery.node.js", + "dist/nodes/Google/Books/GoogleBooks.node.js", + "dist/nodes/Google/Calendar/GoogleCalendar.node.js", + "dist/nodes/Google/Calendar/GoogleCalendarTrigger.node.js", + "dist/nodes/Google/Chat/GoogleChat.node.js", + "dist/nodes/Google/CloudNaturalLanguage/GoogleCloudNaturalLanguage.node.js", + "dist/nodes/Google/CloudStorage/GoogleCloudStorage.node.js", + "dist/nodes/Google/Contacts/GoogleContacts.node.js", + "dist/nodes/Google/Docs/GoogleDocs.node.js", + "dist/nodes/Google/Drive/GoogleDrive.node.js", + "dist/nodes/Google/Drive/GoogleDriveTrigger.node.js", + "dist/nodes/Google/Firebase/CloudFirestore/GoogleFirebaseCloudFirestore.node.js", + "dist/nodes/Google/Firebase/RealtimeDatabase/GoogleFirebaseRealtimeDatabase.node.js", + "dist/nodes/Google/Gmail/Gmail.node.js", + "dist/nodes/Google/Gmail/GmailTrigger.node.js", + "dist/nodes/Google/GSuiteAdmin/GSuiteAdmin.node.js", + "dist/nodes/Google/BusinessProfile/GoogleBusinessProfile.node.js", + "dist/nodes/Google/BusinessProfile/GoogleBusinessProfileTrigger.node.js", + "dist/nodes/Google/Perspective/GooglePerspective.node.js", + "dist/nodes/Google/Sheet/GoogleSheets.node.js", + "dist/nodes/Google/Sheet/GoogleSheetsTrigger.node.js", + "dist/nodes/Google/Slides/GoogleSlides.node.js", + "dist/nodes/Google/Task/GoogleTasks.node.js", + "dist/nodes/Google/Translate/GoogleTranslate.node.js", + "dist/nodes/Google/YouTube/YouTube.node.js", + "dist/nodes/Gotify/Gotify.node.js", + "dist/nodes/GoToWebinar/GoToWebinar.node.js", + "dist/nodes/Grafana/Grafana.node.js", + "dist/nodes/GraphQL/GraphQL.node.js", + "dist/nodes/Grist/Grist.node.js", + "dist/nodes/Gumroad/GumroadTrigger.node.js", + "dist/nodes/HackerNews/HackerNews.node.js", + "dist/nodes/HaloPSA/HaloPSA.node.js", + "dist/nodes/Harvest/Harvest.node.js", + "dist/nodes/HelpScout/HelpScout.node.js", + "dist/nodes/HelpScout/HelpScoutTrigger.node.js", + "dist/nodes/HighLevel/HighLevel.node.js", + "dist/nodes/HomeAssistant/HomeAssistant.node.js", + "dist/nodes/HtmlExtract/HtmlExtract.node.js", + "dist/nodes/Html/Html.node.js", + "dist/nodes/HttpRequest/HttpRequest.node.js", + "dist/nodes/Hubspot/Hubspot.node.js", + "dist/nodes/Hubspot/HubspotTrigger.node.js", + "dist/nodes/HumanticAI/HumanticAi.node.js", + "dist/nodes/Hunter/Hunter.node.js", + "dist/nodes/ICalendar/ICalendar.node.js", + "dist/nodes/If/If.node.js", + "dist/nodes/Intercom/Intercom.node.js", + "dist/nodes/Interval/Interval.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinja.node.js", + "dist/nodes/InvoiceNinja/InvoiceNinjaTrigger.node.js", + "dist/nodes/ItemLists/ItemLists.node.js", + "dist/nodes/Iterable/Iterable.node.js", + "dist/nodes/Jenkins/Jenkins.node.js", + "dist/nodes/JinaAI/JinaAi.node.js", + "dist/nodes/Jira/Jira.node.js", + "dist/nodes/Jira/JiraTrigger.node.js", + "dist/nodes/JotForm/JotFormTrigger.node.js", + "dist/nodes/Jwt/Jwt.node.js", + "dist/nodes/Kafka/Kafka.node.js", + "dist/nodes/Kafka/KafkaTrigger.node.js", + "dist/nodes/Keap/Keap.node.js", + "dist/nodes/Keap/KeapTrigger.node.js", + "dist/nodes/Kitemaker/Kitemaker.node.js", + "dist/nodes/KoBoToolbox/KoBoToolbox.node.js", + "dist/nodes/KoBoToolbox/KoBoToolboxTrigger.node.js", + "dist/nodes/Ldap/Ldap.node.js", + "dist/nodes/Lemlist/Lemlist.node.js", + "dist/nodes/Lemlist/LemlistTrigger.node.js", + "dist/nodes/Line/Line.node.js", + "dist/nodes/Linear/Linear.node.js", + "dist/nodes/Linear/LinearTrigger.node.js", + "dist/nodes/LingvaNex/LingvaNex.node.js", + "dist/nodes/LinkedIn/LinkedIn.node.js", + "dist/nodes/LocalFileTrigger/LocalFileTrigger.node.js", + "dist/nodes/LoneScale/LoneScaleTrigger.node.js", + "dist/nodes/LoneScale/LoneScale.node.js", + "dist/nodes/Magento/Magento2.node.js", + "dist/nodes/Mailcheck/Mailcheck.node.js", + "dist/nodes/Mailchimp/Mailchimp.node.js", + "dist/nodes/Mailchimp/MailchimpTrigger.node.js", + "dist/nodes/MailerLite/MailerLite.node.js", + "dist/nodes/MailerLite/MailerLiteTrigger.node.js", + "dist/nodes/Mailgun/Mailgun.node.js", + "dist/nodes/Mailjet/Mailjet.node.js", + "dist/nodes/Mailjet/MailjetTrigger.node.js", + "dist/nodes/Mandrill/Mandrill.node.js", + "dist/nodes/ManualTrigger/ManualTrigger.node.js", + "dist/nodes/Markdown/Markdown.node.js", + "dist/nodes/Marketstack/Marketstack.node.js", + "dist/nodes/Matrix/Matrix.node.js", + "dist/nodes/Mattermost/Mattermost.node.js", + "dist/nodes/Mautic/Mautic.node.js", + "dist/nodes/Mautic/MauticTrigger.node.js", + "dist/nodes/Medium/Medium.node.js", + "dist/nodes/Merge/Merge.node.js", + "dist/nodes/MessageBird/MessageBird.node.js", + "dist/nodes/Metabase/Metabase.node.js", + "dist/nodes/Microsoft/AzureCosmosDb/AzureCosmosDb.node.js", + "dist/nodes/Microsoft/Dynamics/MicrosoftDynamicsCrm.node.js", + "dist/nodes/Microsoft/Entra/MicrosoftEntra.node.js", + "dist/nodes/Microsoft/Excel/MicrosoftExcel.node.js", + "dist/nodes/Microsoft/GraphSecurity/MicrosoftGraphSecurity.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDrive.node.js", + "dist/nodes/Microsoft/OneDrive/MicrosoftOneDriveTrigger.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlook.node.js", + "dist/nodes/Microsoft/Outlook/MicrosoftOutlookTrigger.node.js", + "dist/nodes/Microsoft/SharePoint/MicrosoftSharePoint.node.js", + "dist/nodes/Microsoft/Sql/MicrosoftSql.node.js", + "dist/nodes/Microsoft/Storage/AzureStorage.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeams.node.js", + "dist/nodes/Microsoft/Teams/MicrosoftTeamsTrigger.node.js", + "dist/nodes/Microsoft/ToDo/MicrosoftToDo.node.js", + "dist/nodes/Mindee/Mindee.node.js", + "dist/nodes/Misp/Misp.node.js", + "dist/nodes/MistralAI/MistralAi.node.js", + "dist/nodes/Mocean/Mocean.node.js", + "dist/nodes/MondayCom/MondayCom.node.js", + "dist/nodes/MongoDb/MongoDb.node.js", + "dist/nodes/MonicaCrm/MonicaCrm.node.js", + "dist/nodes/MoveBinaryData/MoveBinaryData.node.js", + "dist/nodes/MQTT/Mqtt.node.js", + "dist/nodes/MQTT/MqttTrigger.node.js", + "dist/nodes/Msg91/Msg91.node.js", + "dist/nodes/MySql/MySql.node.js", + "dist/nodes/N8n/N8n.node.js", + "dist/nodes/N8nTrainingCustomerDatastore/N8nTrainingCustomerDatastore.node.js", + "dist/nodes/N8nTrainingCustomerMessenger/N8nTrainingCustomerMessenger.node.js", + "dist/nodes/N8nTrigger/N8nTrigger.node.js", + "dist/nodes/Nasa/Nasa.node.js", + "dist/nodes/Netlify/Netlify.node.js", + "dist/nodes/Netlify/NetlifyTrigger.node.js", + "dist/nodes/NextCloud/NextCloud.node.js", + "dist/nodes/NocoDB/NocoDB.node.js", + "dist/nodes/Brevo/Brevo.node.js", + "dist/nodes/Brevo/BrevoTrigger.node.js", + "dist/nodes/StickyNote/StickyNote.node.js", + "dist/nodes/NoOp/NoOp.node.js", + "dist/nodes/Onfleet/Onfleet.node.js", + "dist/nodes/Onfleet/OnfleetTrigger.node.js", + "dist/nodes/Netscaler/ADC/NetscalerAdc.node.js", + "dist/nodes/Notion/Notion.node.js", + "dist/nodes/Notion/NotionTrigger.node.js", + "dist/nodes/Npm/Npm.node.js", + "dist/nodes/Odoo/Odoo.node.js", + "dist/nodes/Okta/Okta.node.js", + "dist/nodes/OneSimpleApi/OneSimpleApi.node.js", + "dist/nodes/OpenAi/OpenAi.node.js", + "dist/nodes/OpenThesaurus/OpenThesaurus.node.js", + "dist/nodes/OpenWeatherMap/OpenWeatherMap.node.js", + "dist/nodes/Orbit/Orbit.node.js", + "dist/nodes/Oura/Oura.node.js", + "dist/nodes/Paddle/Paddle.node.js", + "dist/nodes/PagerDuty/PagerDuty.node.js", + "dist/nodes/PayPal/PayPal.node.js", + "dist/nodes/PayPal/PayPalTrigger.node.js", + "dist/nodes/Peekalink/Peekalink.node.js", + "dist/nodes/Perplexity/Perplexity.node.js", + "dist/nodes/Phantombuster/Phantombuster.node.js", + "dist/nodes/PhilipsHue/PhilipsHue.node.js", + "dist/nodes/Pipedrive/Pipedrive.node.js", + "dist/nodes/Pipedrive/PipedriveTrigger.node.js", + "dist/nodes/Plivo/Plivo.node.js", + "dist/nodes/PostBin/PostBin.node.js", + "dist/nodes/Postgres/Postgres.node.js", + "dist/nodes/Postgres/PostgresTrigger.node.js", + "dist/nodes/PostHog/PostHog.node.js", + "dist/nodes/Postmark/PostmarkTrigger.node.js", + "dist/nodes/ProfitWell/ProfitWell.node.js", + "dist/nodes/Pushbullet/Pushbullet.node.js", + "dist/nodes/Pushcut/Pushcut.node.js", + "dist/nodes/Pushcut/PushcutTrigger.node.js", + "dist/nodes/Pushover/Pushover.node.js", + "dist/nodes/QuestDb/QuestDb.node.js", + "dist/nodes/QuickBase/QuickBase.node.js", + "dist/nodes/QuickBooks/QuickBooks.node.js", + "dist/nodes/QuickChart/QuickChart.node.js", + "dist/nodes/RabbitMQ/RabbitMQ.node.js", + "dist/nodes/RabbitMQ/RabbitMQTrigger.node.js", + "dist/nodes/Raindrop/Raindrop.node.js", + "dist/nodes/ReadBinaryFile/ReadBinaryFile.node.js", + "dist/nodes/ReadBinaryFiles/ReadBinaryFiles.node.js", + "dist/nodes/ReadPdf/ReadPDF.node.js", + "dist/nodes/Reddit/Reddit.node.js", + "dist/nodes/Redis/Redis.node.js", + "dist/nodes/Redis/RedisTrigger.node.js", + "dist/nodes/RenameKeys/RenameKeys.node.js", + "dist/nodes/RespondToWebhook/RespondToWebhook.node.js", + "dist/nodes/Rocketchat/Rocketchat.node.js", + "dist/nodes/RssFeedRead/RssFeedRead.node.js", + "dist/nodes/RssFeedRead/RssFeedReadTrigger.node.js", + "dist/nodes/Rundeck/Rundeck.node.js", + "dist/nodes/S3/S3.node.js", + "dist/nodes/Salesforce/Salesforce.node.js", + "dist/nodes/Salesforce/SalesforceTrigger.node.js", + "dist/nodes/Salesmate/Salesmate.node.js", + "dist/nodes/Schedule/ScheduleTrigger.node.js", + "dist/nodes/SeaTable/SeaTable.node.js", + "dist/nodes/SeaTable/SeaTableTrigger.node.js", + "dist/nodes/SecurityScorecard/SecurityScorecard.node.js", + "dist/nodes/Segment/Segment.node.js", + "dist/nodes/SendGrid/SendGrid.node.js", + "dist/nodes/Sendy/Sendy.node.js", + "dist/nodes/SentryIo/SentryIo.node.js", + "dist/nodes/ServiceNow/ServiceNow.node.js", + "dist/nodes/Set/Set.node.js", + "dist/nodes/Shopify/Shopify.node.js", + "dist/nodes/Shopify/ShopifyTrigger.node.js", + "dist/nodes/Signl4/Signl4.node.js", + "dist/nodes/Simulate/Simulate.node.js", + "dist/nodes/Simulate/SimulateTrigger.node.js", + "dist/nodes/Slack/Slack.node.js", + "dist/nodes/Slack/SlackTrigger.node.js", + "dist/nodes/Sms77/Sms77.node.js", + "dist/nodes/Snowflake/Snowflake.node.js", + "dist/nodes/SplitInBatches/SplitInBatches.node.js", + "dist/nodes/Splunk/Splunk.node.js", + "dist/nodes/Spontit/Spontit.node.js", + "dist/nodes/Spotify/Spotify.node.js", + "dist/nodes/SpreadsheetFile/SpreadsheetFile.node.js", + "dist/nodes/SseTrigger/SseTrigger.node.js", + "dist/nodes/Ssh/Ssh.node.js", + "dist/nodes/Stackby/Stackby.node.js", + "dist/nodes/Start/Start.node.js", + "dist/nodes/StopAndError/StopAndError.node.js", + "dist/nodes/Storyblok/Storyblok.node.js", + "dist/nodes/Strapi/Strapi.node.js", + "dist/nodes/Strava/Strava.node.js", + "dist/nodes/Strava/StravaTrigger.node.js", + "dist/nodes/Stripe/Stripe.node.js", + "dist/nodes/Stripe/StripeTrigger.node.js", + "dist/nodes/Supabase/Supabase.node.js", + "dist/nodes/SurveyMonkey/SurveyMonkeyTrigger.node.js", + "dist/nodes/Switch/Switch.node.js", + "dist/nodes/SyncroMSP/SyncroMsp.node.js", + "dist/nodes/Taiga/Taiga.node.js", + "dist/nodes/Taiga/TaigaTrigger.node.js", + "dist/nodes/Tapfiliate/Tapfiliate.node.js", + "dist/nodes/Telegram/Telegram.node.js", + "dist/nodes/Telegram/TelegramTrigger.node.js", + "dist/nodes/TheHiveProject/TheHiveProject.node.js", + "dist/nodes/TheHiveProject/TheHiveProjectTrigger.node.js", + "dist/nodes/TheHive/TheHive.node.js", + "dist/nodes/TheHive/TheHiveTrigger.node.js", + "dist/nodes/TimescaleDb/TimescaleDb.node.js", + "dist/nodes/Todoist/Todoist.node.js", + "dist/nodes/Toggl/TogglTrigger.node.js", + "dist/nodes/Totp/Totp.node.js", + "dist/nodes/TravisCi/TravisCi.node.js", + "dist/nodes/Trello/Trello.node.js", + "dist/nodes/Trello/TrelloTrigger.node.js", + "dist/nodes/Twake/Twake.node.js", + "dist/nodes/Twilio/Twilio.node.js", + "dist/nodes/Twilio/TwilioTrigger.node.js", + "dist/nodes/Twist/Twist.node.js", + "dist/nodes/Twitter/Twitter.node.js", + "dist/nodes/Typeform/TypeformTrigger.node.js", + "dist/nodes/UnleashedSoftware/UnleashedSoftware.node.js", + "dist/nodes/Uplead/Uplead.node.js", + "dist/nodes/UProc/UProc.node.js", + "dist/nodes/UptimeRobot/UptimeRobot.node.js", + "dist/nodes/UrlScanIo/UrlScanIo.node.js", + "dist/nodes/Vero/Vero.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloud.node.js", + "dist/nodes/Venafi/ProtectCloud/VenafiTlsProtectCloudTrigger.node.js", + "dist/nodes/Venafi/Datacenter/VenafiTlsProtectDatacenter.node.js", + "dist/nodes/Vonage/Vonage.node.js", + "dist/nodes/Wait/Wait.node.js", + "dist/nodes/Webflow/Webflow.node.js", + "dist/nodes/Webflow/WebflowTrigger.node.js", + "dist/nodes/Webhook/Webhook.node.js", + "dist/nodes/Wekan/Wekan.node.js", + "dist/nodes/WhatsApp/WhatsAppTrigger.node.js", + "dist/nodes/WhatsApp/WhatsApp.node.js", + "dist/nodes/Wise/Wise.node.js", + "dist/nodes/Wise/WiseTrigger.node.js", + "dist/nodes/WooCommerce/WooCommerce.node.js", + "dist/nodes/WooCommerce/WooCommerceTrigger.node.js", + "dist/nodes/Wordpress/Wordpress.node.js", + "dist/nodes/Workable/WorkableTrigger.node.js", + "dist/nodes/WorkflowTrigger/WorkflowTrigger.node.js", + "dist/nodes/WriteBinaryFile/WriteBinaryFile.node.js", + "dist/nodes/Wufoo/WufooTrigger.node.js", + "dist/nodes/Xero/Xero.node.js", + "dist/nodes/Xml/Xml.node.js", + "dist/nodes/Yourls/Yourls.node.js", + "dist/nodes/Zammad/Zammad.node.js", + "dist/nodes/Zendesk/Zendesk.node.js", + "dist/nodes/Zendesk/ZendeskTrigger.node.js", + "dist/nodes/Zoho/ZohoCrm.node.js", + "dist/nodes/Zoom/Zoom.node.js", + "dist/nodes/Zulip/Zulip.node.js", + "dist/nodes/Transform/Aggregate/Aggregate.node.js", + "dist/nodes/Transform/Limit/Limit.node.js", + "dist/nodes/Transform/RemoveDuplicates/RemoveDuplicates.node.js", + "dist/nodes/Transform/SplitOut/SplitOut.node.js", + "dist/nodes/Transform/Sort/Sort.node.js", + "dist/nodes/Transform/Summarize/Summarize.node.js" + ] + }, + "devDependencies": { + "@n8n/typescript-config": "workspace:*", + "@types/amqplib": "^0.10.1", + "@types/aws4": "^1.5.1", + "@types/basic-auth": "catalog:", + "@types/cheerio": "^0.22.15", + "@types/eventsource": "^1.1.2", + "@types/express": "catalog:", + "@types/gm": "^1.25.0", + "@types/html-to-text": "^9.0.1", + "@types/js-nacl": "^1.3.0", + "@types/jsonwebtoken": "catalog:", + "@types/lodash": "catalog:", + "@types/lossless-json": "^1.0.0", + "@types/mailparser": "^3.4.4", + "@types/mime-types": "^2.1.0", + "@types/mssql": "^9.1.5", + "@types/nodemailer": "^6.4.14", + "@types/promise-ftp": "^1.3.4", + "@types/rfc2047": "^2.0.1", + "@types/sanitize-html": "^2.11.0", + "@types/showdown": "^1.9.4", + "@types/ssh2-sftp-client": "^9.0.5", + "@types/uuid": "catalog:", + "@types/xml2js": "catalog:", + "eslint-plugin-n8n-nodes-base": "^1.16.3", + "n8n-core": "workspace:*" + }, + "dependencies": { + "@aws-sdk/client-sso-oidc": "3.808.0", + "@kafkajs/confluent-schema-registry": "3.8.0", + "@mozilla/readability": "0.6.0", + "@n8n/config": "workspace:*", + "@n8n/di": "workspace:*", + "@n8n/errors": "workspace:^", + "@n8n/imap": "workspace:*", + "@n8n/vm2": "3.9.25", + "alasql": "4.4.0", + "amqplib": "0.10.6", + "aws4": "1.11.0", + "basic-auth": "catalog:", + "change-case": "4.1.2", + "cheerio": "1.0.0-rc.6", + "chokidar": "catalog:", + "cron": "3.1.7", + "csv-parse": "5.5.0", + "currency-codes": "2.1.0", + "eventsource": "2.0.2", + "fast-glob": "catalog:", + "fastest-levenshtein": "^1.0.16", + "fflate": "0.7.4", + "generate-schema": "2.6.0", + "get-system-fonts": "2.0.2", + "gm": "1.25.1", + "html-to-text": "9.0.5", + "iconv-lite": "catalog:", + "ics": "2.40.0", + "isbot": "3.6.13", + "iso-639-1": "2.1.15", + "js-nacl": "1.4.0", + "jsdom": "23.0.1", + "jsonwebtoken": "catalog:", + "kafkajs": "2.2.4", + "ldapts": "4.2.6", + "lodash": "catalog:", + "lossless-json": "1.0.5", + "luxon": "catalog:", + "mailparser": "3.6.7", + "minifaker": "1.34.1", + "moment-timezone": "0.5.48", + "mongodb": "6.11.0", + "mqtt": "5.7.2", + "mssql": "10.0.2", + "mysql2": "3.11.0", + "n8n-workflow": "workspace:*", + "node-html-markdown": "1.2.0", + "node-ssh": "13.2.0", + "nodemailer": "6.9.9", + "otpauth": "9.1.1", + "pdfjs-dist": "5.3.31", + "pg": "8.12.0", + "pg-promise": "11.9.1", + "promise-ftp": "1.3.5", + "pyodide": "0.28.0", + "redis": "4.6.14", + "rfc2047": "4.0.1", + "rhea": "1.0.24", + "rrule": "2.8.1", + "rss-parser": "3.13.0", + "sanitize-html": "2.12.1", + "semver": "7.5.4", + "showdown": "2.1.0", + "simple-git": "3.17.0", + "snowflake-sdk": "2.1.0", + "ssh2-sftp-client": "12.0.1", + "tmp-promise": "3.0.3", + "ts-ics": "1.2.2", + "uuid": "catalog:", + "xlsx": "https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz", + "xml2js": "catalog:", + "xmlhttprequest-ssl": "3.1.0" + } +} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/scripts/copy-nodes-json 2.js b/n8n-n8n-1.109.2/packages/nodes-base/scripts/copy-nodes-json 2.js new file mode 100755 index 00000000..a56528a0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/scripts/copy-nodes-json 2.js @@ -0,0 +1,12 @@ +const glob = require('fast-glob'); +const fs = require('fs'); +const path = require('path'); + +function copyJsonFiles(baseDir) { + const files = glob.sync('nodes/**/*.node.json', { cwd: baseDir }); + for (const file of files) { + fs.copyFileSync(path.resolve(baseDir, file), path.resolve(baseDir, 'dist', file)); + } +} + +copyJsonFiles(process.argv[2]); diff --git a/n8n-n8n-1.109.2/packages/nodes-base/scripts/validate-load-options-methods 2.js b/n8n-n8n-1.109.2/packages/nodes-base/scripts/validate-load-options-methods 2.js new file mode 100755 index 00000000..b043365b --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/scripts/validate-load-options-methods 2.js @@ -0,0 +1,43 @@ +let referencedMethods; +let definedMethods; + +try { + referencedMethods = require('../dist/methods/referenced.json'); + definedMethods = require('../dist/methods/defined.json'); +} catch (error) { + console.error( + 'Failed to find methods to validate. Please run `npm run n8n-generate-metadata` first.', + ); + process.exit(1); +} + +const compareMethods = (base, other) => { + const result = []; + + for (const [nodeName, methods] of Object.entries(base)) { + if (nodeName in other) { + const found = methods.filter((item) => !other[nodeName].includes(item)); + + if (found.length > 0) result.push({ [nodeName]: found }); + } + } + + return result; +}; + +const referencedButUndefined = compareMethods(referencedMethods, definedMethods); + +if (referencedButUndefined.length > 0) { + console.error('ERROR: The following load options methods are referenced but undefined.'); + console.error('Please fix or remove the references or define the methods.'); + console.error(referencedButUndefined); + process.exit(1); +} + +const definedButUnused = compareMethods(definedMethods, referencedMethods); + +if (definedButUnused.length > 0) { + console.warn('Warning: The following load options methods are defined but unused.'); + console.warn('Please consider using or removing the methods.'); + console.warn(definedButUnused); +} diff --git a/n8n-n8n-1.109.2/packages/nodes-base/shims.d 2.ts b/n8n-n8n-1.109.2/packages/nodes-base/shims.d 2.ts new file mode 100755 index 00000000..3109ac7d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/shims.d 2.ts @@ -0,0 +1 @@ +declare module 'minifaker'; diff --git a/n8n-n8n-1.109.2/packages/nodes-base/tsconfig.build.cjs 2.json b/n8n-n8n-1.109.2/packages/nodes-base/tsconfig.build.cjs 2.json new file mode 100755 index 00000000..b14d7ad8 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/nodes-base/tsconfig.build.cjs 2.json @@ -0,0 +1,24 @@ +{ + "extends": ["./tsconfig.json", "@n8n/typescript-config/modern/tsconfig.cjs.json"], + "compilerOptions": { + "outDir": "dist", + "module": "commonjs", + "tsBuildInfoFile": "dist/typecheck.tsbuildinfo" + }, + "include": [ + "credentials/**/*.ts", + "credentials/translations/**/*.json", + "nodes/**/*.ts", + "nodes/**/*.json", + "types/**/*.ts", + "utils/**/*.ts" + ], + "exclude": [ + "node_modules", + "nodes/**/*.test.ts", + "credentials/**/*.test.ts", + "utils/**/*.test.ts", + "test/**", + "../core/nodes-testing" + ] +} diff --git a/n8n-n8n-1.109.2/packages/testing/containers/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/testing/containers/eslint.config 2.mjs new file mode 100755 index 00000000..f9c7a51a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/containers/eslint.config 2.mjs @@ -0,0 +1,19 @@ +import { defineConfig } from 'eslint/config'; +import { baseConfig } from '@n8n/eslint-config/base'; + +export default defineConfig(baseConfig, { + rules: { + '@typescript-eslint/naming-convention': [ + 'error', + // Add exception for Docker Compose labels + { + selector: 'objectLiteralProperty', + format: null, // Allow any format + filter: { + regex: '^com\\.docker\\.', + match: true, + }, + }, + ], + }, +}); diff --git a/n8n-n8n-1.109.2/packages/testing/containers/index 2.ts b/n8n-n8n-1.109.2/packages/testing/containers/index 2.ts new file mode 100755 index 00000000..6922a933 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/containers/index 2.ts @@ -0,0 +1,12 @@ +/** + * n8n Test Containers + * + * This package provides container management utilities for n8n testing. + */ + +export { createN8NStack } from './n8n-test-container-creation'; +export type { N8NConfig, N8NStack } from './n8n-test-container-creation'; + +export * from './performance-plans'; + +export { ContainerTestHelpers } from './n8n-test-container-helpers'; diff --git a/n8n-n8n-1.109.2/packages/testing/containers/n8n-test-container-dependencies 2.ts b/n8n-n8n-1.109.2/packages/testing/containers/n8n-test-container-dependencies 2.ts new file mode 100755 index 00000000..51445abc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/containers/n8n-test-container-dependencies 2.ts @@ -0,0 +1,321 @@ +import { PostgreSqlContainer } from '@testcontainers/postgresql'; +import { RedisContainer } from '@testcontainers/redis'; +import { setTimeout as wait } from 'node:timers/promises'; +import type { StartedNetwork, StartedTestContainer } from 'testcontainers'; +import { GenericContainer, Wait } from 'testcontainers'; + +import { createSilentLogConsumer } from './n8n-test-container-utils'; + +export async function setupRedis({ + redisImage, + projectName, + network, +}: { + redisImage: string; + projectName: string; + network: StartedNetwork; +}): Promise { + return await new RedisContainer(redisImage) + .withNetwork(network) + .withNetworkAliases('redis') + .withLabels({ + 'com.docker.compose.project': projectName, + 'com.docker.compose.service': 'redis', + }) + .withName(`${projectName}-redis`) + .withReuse() + .start(); +} + +export async function setupPostgres({ + postgresImage, + projectName, + network, +}: { + postgresImage: string; + projectName: string; + network: StartedNetwork; +}): Promise<{ + container: StartedTestContainer; + database: string; + username: string; + password: string; +}> { + const postgres = await new PostgreSqlContainer(postgresImage) + .withNetwork(network) + .withNetworkAliases('postgres') + .withDatabase('n8n_db') + .withUsername('n8n_user') + .withPassword('test_password') + .withStartupTimeout(30000) + .withLabels({ + 'com.docker.compose.project': projectName, + 'com.docker.compose.service': 'postgres', + }) + .withName(`${projectName}-postgres`) + .withReuse() + .start(); + + return { + container: postgres, + database: postgres.getDatabase(), + username: postgres.getUsername(), + password: postgres.getPassword(), + }; +} + +/** + * Setup NGINX for multi-main instances + * @param nginxImage The Docker image for NGINX. + * @param uniqueSuffix A unique suffix for naming and labeling. + * @param mainInstances An array of running backend container instances. + * @param network The shared Docker network. + * @param nginxPort The host port to expose for NGINX. + * @returns A promise that resolves to the started NGINX container. + */ +export async function setupNginxLoadBalancer({ + nginxImage, + projectName, + mainCount, + network, + port, +}: { + nginxImage: string; + projectName: string; + mainCount: number; + network: StartedNetwork; + port: number; +}): Promise { + // Generate upstream server entries from the list of main instances. + const upstreamServers = Array.from( + { length: mainCount }, + (_, index) => ` server ${projectName}-n8n-main-${index + 1}:5678;`, + ).join('\n'); + + // Build the NGINX configuration with dynamic upstream servers. + // This allows us to have the port allocation be dynamic. + const nginxConfig = buildNginxConfig(upstreamServers); + + const { consumer, throwWithLogs } = createSilentLogConsumer(); + + try { + return await new GenericContainer(nginxImage) + .withNetwork(network) + .withExposedPorts({ container: 80, host: port }) + .withCopyContentToContainer([{ content: nginxConfig, target: '/etc/nginx/nginx.conf' }]) + .withWaitStrategy(Wait.forListeningPorts()) + .withLabels({ + 'com.docker.compose.project': projectName, + 'com.docker.compose.service': 'nginx-lb', + }) + .withName(`${projectName}-nginx-lb`) + .withReuse() + .withLogConsumer(consumer) + .start(); + } catch (error) { + return throwWithLogs(error); + } +} + +/** + * Builds NGINX configuration for load balancing n8n instances + * @param upstreamServers The upstream server entries to include in the configuration + * @returns The complete NGINX configuration as a string + */ +function buildNginxConfig(upstreamServers: string): string { + return ` + events { + worker_connections 1024; + } + + http { + client_max_body_size 50M; + access_log off; + error_log /dev/stderr warn; + + # Map for WebSocket upgrades + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + upstream backend { + # Use ip_hash for sticky sessions + ip_hash; + ${upstreamServers} + keepalive 32; + } + + server { + listen 80; + + # Set longer timeouts for slow operations + proxy_connect_timeout 60s; + proxy_send_timeout 60s; + proxy_read_timeout 60s; + + location / { + proxy_pass http://backend; + + # Forward standard proxy headers + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Forward WebSocket headers + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection $connection_upgrade; + + proxy_http_version 1.1; + proxy_buffering off; + } + + # Specific location for real-time push/websockets + location /rest/push { + proxy_pass http://backend; + + # Forward standard proxy headers + proxy_set_header Host $http_host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + + # Configure WebSocket proxying + proxy_set_header Upgrade $http_upgrade; + proxy_set_header Connection "upgrade"; + proxy_http_version 1.1; + + # Disable buffering for real-time data + proxy_buffering off; + + # Set very long timeouts for persistent connections + proxy_read_timeout 3600s; + proxy_send_timeout 3600s; + } + } + }`; +} + +/** + * Builds Caddy configuration for load balancing n8n instances + * @param upstreamServers Array of upstream server addresses + * @returns The complete Caddyfile configuration as a string + */ +function buildCaddyConfig(upstreamServers: string[]): string { + const backends = upstreamServers.join(' '); + return ` +:80 { + # Reverse proxy with load balancing + reverse_proxy ${backends} { + # Enable sticky sessions using cookie + lb_policy cookie + + # Health check (optional) + health_uri /healthz + health_interval 10s + + # Timeouts + transport http { + dial_timeout 60s + read_timeout 60s + write_timeout 60s + } + } + + # Set max request body size + request_body { + max_size 50MB + } +}`; +} + +/** + * Setup Caddy for multi-main instances + * @param caddyImage The Docker image for Caddy + * @param projectName Project name for container naming + * @param mainCount Number of main instances + * @param network The shared Docker network + * @returns A promise that resolves to the started Caddy container + */ +export async function setupCaddyLoadBalancer({ + caddyImage = 'caddy:2-alpine', + projectName, + mainCount, + network, +}: { + caddyImage?: string; + projectName: string; + mainCount: number; + network: StartedNetwork; +}): Promise { + // Generate upstream server addresses + const upstreamServers = Array.from( + { length: mainCount }, + (_, index) => `${projectName}-n8n-main-${index + 1}:5678`, + ); + + // Build the Caddy configuration + const caddyConfig = buildCaddyConfig(upstreamServers); + + const { consumer, throwWithLogs } = createSilentLogConsumer(); + + try { + return await new GenericContainer(caddyImage) + .withNetwork(network) + .withExposedPorts(80) + .withCopyContentToContainer([{ content: caddyConfig, target: '/etc/caddy/Caddyfile' }]) + .withWaitStrategy(Wait.forListeningPorts()) + .withLabels({ + 'com.docker.compose.project': projectName, + 'com.docker.compose.service': 'caddy-lb', + }) + .withName(`${projectName}-caddy-lb`) + .withReuse() + .withLogConsumer(consumer) + .start(); + } catch (error) { + return throwWithLogs(error); + } +} + +/** + * Polls a container's HTTP endpoint until it returns a 200 status. + * Logs a warning if the endpoint does not return 200 within the specified timeout. + * + * @param container The started container. + * @param endpoint The HTTP health check endpoint (e.g., '/healthz/readiness'). + * @param timeoutMs Total timeout in milliseconds (default: 60,000ms). + */ +export async function pollContainerHttpEndpoint( + container: StartedTestContainer, + endpoint: string, + timeoutMs: number = 60000, +): Promise { + const startTime = Date.now(); + const url = `http://${container.getHost()}:${container.getFirstMappedPort()}${endpoint}`; + const retryIntervalMs = 1000; + + while (Date.now() - startTime < timeoutMs) { + try { + const response = await fetch(url); + if (response.status === 200) { + return; + } + } catch (error) { + // Don't log errors, just retry + } + + await wait(retryIntervalMs); + } + + console.error( + `WARNING: HTTP endpoint at ${url} did not return 200 within ${ + timeoutMs / 1000 + } seconds. Proceeding with caution.`, + ); +} + +// TODO: Look at Ollama container? +// TODO: Look at MariaDB container? +// TODO: Look at MockServer container, could we use this for mocking out external services? diff --git a/n8n-n8n-1.109.2/packages/testing/containers/n8n-test-container-utils 2.ts b/n8n-n8n-1.109.2/packages/testing/containers/n8n-test-container-utils 2.ts new file mode 100755 index 00000000..7eef6e5f --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/containers/n8n-test-container-utils 2.ts @@ -0,0 +1,26 @@ +import type { Readable } from 'stream'; + +/** + * Create a log consumer that does not log to the console + * @returns A tuple containing the log consumer and a function to throw an error with logs + */ +export function createSilentLogConsumer() { + const logs: string[] = []; + + const consumer = (stream: Readable) => { + stream.on('data', (chunk: Buffer | string) => { + logs.push(chunk.toString().trim()); + }); + }; + + const throwWithLogs = (error: unknown): never => { + if (logs.length > 0) { + console.error('\n--- Container Logs ---'); + console.error(logs.join('\n')); + console.error('---------------------\n'); + } + throw error; + }; + + return { consumer, throwWithLogs }; +} diff --git a/n8n-n8n-1.109.2/packages/testing/containers/package 2.json b/n8n-n8n-1.109.2/packages/testing/containers/package 2.json new file mode 100755 index 00000000..09b41872 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/containers/package 2.json @@ -0,0 +1,30 @@ +{ + "name": "n8n-containers", + "private": true, + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "stack": "tsx ./n8n-start-stack.ts", + "stack:help": "tsx ./n8n-start-stack.ts --help", + "stack:sqlite": "TESTCONTAINERS_REUSE_ENABLE=true npm run stack", + "stack:postgres": "TESTCONTAINERS_REUSE_ENABLE=true npm run stack -- --postgres", + "stack:queue": "TESTCONTAINERS_REUSE_ENABLE=true npm run stack -- --queue", + "stack:multi-main": "TESTCONTAINERS_REUSE_ENABLE=true npm run stack -- --mains 2 --workers 1", + "stack:starter": "TESTCONTAINERS_REUSE_ENABLE=true npm run stack -- --plan starter", + "stack:clean:containers": "docker ps -aq --filter 'name=n8n-stack-*' | xargs -r docker rm -f 2>/dev/null", + "stack:clean:networks": "docker network ls --filter 'label=org.testcontainers=true' -q | xargs -r docker network rm 2>/dev/null", + "stack:clean:all": "pnpm run stack:clean:containers && pnpm run stack:clean:networks", + "lint": "eslint . --quiet", + "lint:fix": "eslint . --fix" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@testcontainers/postgresql": "^11.0.3", + "@testcontainers/redis": "^11.0.3", + "get-port": "^7.1.0", + "testcontainers": "^11.0.3" + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/CONTRIBUTING 2.md b/n8n-n8n-1.109.2/packages/testing/playwright/CONTRIBUTING 2.md new file mode 100755 index 00000000..31cefb08 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/CONTRIBUTING 2.md @@ -0,0 +1,567 @@ +# n8n Playwright Test Contribution Guide + +> For running tests, see [README.md](./README.md) + +## 🚀 Quick Start for Test Development + +### Prerequisites +- **VS Code/Cursor Extension**: Install "Playwright Test for VSCode" +- **Local n8n Instance**: Local server or Docker + +### Configuration +Add to your `/.vscode/settings.json`: +```json +{ + "playwright.env": { + "N8N_BASE_URL": "http://localhost:5679", // URL to test against (Don't use 5678 as that can wipe your dev instance DB) + "SHOW_BROWSER": "true", // Show browser (useful with n8n.page.pause()) + "RESET_E2E_DB": "true" // Reset DB for fresh state + } +} +``` + +### Running Tests +1. **Initial Setup**: Click "Run global setup" in Playwright extension to reset database +2. **Run Tests**: Click play button next to any test in the IDE +3. **Debug**: Add `await n8n.page.pause()` to hijack test execution + +Troubleshooting: +- Why can't I run my test from the UI? + - The tests are separated by groups for tests that can run in parallel or tests that need a DB reset each time. You can select the project in the test explorer. +- Not all my tests ran from the CLI + - Currently the DB reset tests are a "dependency" of the parallel tests, this is to stop them running at the same time. So if the parallel tests fail the sequential tests won't run. + +--- + +## 🏗️ Architecture Overview + +Our test architecture supports both UI-driven and API-driven testing: + +### UI Testing (Four-Layer Approach) +``` +Tests (*.spec.ts) + ↓ uses +Composables (*Composer.ts) - Business workflows + ↓ orchestrates +Page Objects (*Page.ts) - UI interactions + ↓ extends +BasePage - Common utilities +``` + +### API Testing (Two-Layer Approach) +``` +Tests (*.spec.ts) + ↓ uses +API Services (ApiHelpers + specialized helpers) +``` + +### Core Principle: Separation of Concerns +- **BasePage**: Generic interaction methods +- **Page Objects**: Element locators and simple actions +- **Composables**: Complex business workflows +- **API Services**: REST API interactions, workflow management +- **Tests**: Readable scenarios using composables or API services + +--- + +## 📐 Lexical Conventions + +### Page Objects: Three Types of Methods + +#### 1. Element Getters (No `async`, return `Locator`) +```typescript +// From WorkflowsPage.ts +getSearchBar() { + return this.page.getByTestId('resources-list-search'); +} + +getWorkflowByName(name: string) { + return this.getWorkflowItems().filter({ hasText: name }); +} + +// From CanvasPage.ts +nodeByName(nodeName: string): Locator { + return this.page.locator(`[data-test-id="canvas-node"][data-node-name="${nodeName}"]`); +} + +saveWorkflowButton(): Locator { + return this.page.getByRole('button', { name: 'Save' }); +} +``` + +#### 2. Simple Actions (`async`, return `void`) +```typescript +// From WorkflowsPage.ts +async clickAddWorklowButton() { + await this.clickByTestId('add-resource-workflow'); +} + +async searchWorkflows(searchTerm: string) { + await this.clickByTestId('resources-list-search'); + await this.fillByTestId('resources-list-search', searchTerm); +} + +// From CanvasPage.ts +async deleteNodeByName(nodeName: string): Promise { + await this.nodeDeleteButton(nodeName).click(); +} + +async openNode(nodeName: string): Promise { + await this.nodeByName(nodeName).dblclick(); +} +``` + +#### 3. Query Methods (`async`, return data) +```typescript +// From CanvasPage.ts +async getPinnedNodeNames(): Promise { + const pinnedNodesLocator = this.page + .getByTestId('canvas-node') + .filter({ has: this.page.getByTestId('canvas-node-status-pinned') }); + + const names: string[] = []; + const count = await pinnedNodesLocator.count(); + + for (let i = 0; i < count; i++) { + const node = pinnedNodesLocator.nth(i); + const name = await node.getAttribute('data-node-name'); + if (name) { + names.push(name); + } + } + + return names; +} + +// From NotificationsPage.ts +async getNotificationCount(text?: string | RegExp): Promise { + try { + const notifications = text + ? this.notificationContainerByText(text) + : this.page.getByRole('alert'); + return await notifications.count(); + } catch { + return 0; + } +} +``` + +### Composables: Business Workflows +```typescript +// From WorkflowComposer.ts +export class WorkflowComposer { + async executeWorkflowAndWaitForNotification(notificationMessage: string) { + const responsePromise = this.n8n.page.waitForResponse( + (response) => + response.url().includes('/rest/workflows/') && + response.url().includes('/run') && + response.request().method() === 'POST', + ); + + await this.n8n.canvas.clickExecuteWorkflowButton(); + await responsePromise; + await this.n8n.notifications.waitForNotificationAndClose(notificationMessage); + } + + async createWorkflow(name?: string) { + await this.n8n.workflows.clickAddWorklowButton(); + const workflowName = name ?? 'My New Workflow'; + await this.n8n.canvas.setWorkflowName(workflowName); + await this.n8n.canvas.saveWorkflow(); + } +} + +// From ProjectComposer.ts +export class ProjectComposer { + async createProject(projectName?: string) { + await this.n8n.page.getByTestId('universal-add').click(); + await Promise.all([ + this.n8n.page.waitForResponse('**/rest/projects/*'), + this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(), + ]); + await this.n8n.notifications.waitForNotificationAndClose('saved successfully'); + await this.n8n.page.waitForLoadState(); + const projectNameUnique = projectName ?? `Project ${Date.now()}`; + await this.n8n.projectSettings.fillProjectName(projectNameUnique); + await this.n8n.projectSettings.clickSaveButton(); + const projectId = this.extractProjectIdFromPage('projects', 'settings'); + return { projectName: projectNameUnique, projectId }; + } +} +``` + +--- + +## 📁 File Structure & Naming + +``` +tests/ +├── composables/ # Multi-page business workflows +│ ├── CanvasComposer.ts +│ ├── ProjectComposer.ts +│ └── WorkflowComposer.ts +├── pages/ # Page object models +│ ├── BasePage.ts +│ ├── CanvasPage.ts +│ ├── CredentialsPage.ts +│ ├── ExecutionsPage.ts +│ ├── NodeDisplayViewPage.ts +│ ├── NotificationsPage.ts +│ ├── ProjectSettingsPage.ts +│ ├── ProjectWorkflowsPage.ts +│ ├── SidebarPage.ts +│ ├── WorkflowSharingModal.ts +│ └── WorkflowsPage.ts +├── fixtures/ # Test fixtures and setup +├── services/ # API helpers +├── utils/ # Helper functions +├── config/ # Constants and configuration +│ ├── constants.ts +│ ├── intercepts.ts +│ └── test-users.ts +└── *.spec.ts # Test files +``` + +### Naming Conventions +| Type | Pattern | Example | +|------|---------|---------| +| **Page Objects** | `{PageName}Page.ts` | `CredentialsPage.ts` | +| **Composables** | `{Domain}Composer.ts` | `WorkflowComposer.ts` | +| **Test Files** | `{number}-{feature}.spec.ts` | `1-workflows.spec.ts` | +| **Test IDs** | `kebab-case` | `data-test-id="save-button"` | + +--- + +## ✅ Implementation Checklist + +### When Adding a Page Object Method + +```typescript +// From ExecutionsPage.ts - Good example +export class ExecutionsPage extends BasePage { + // ✅ Getter: Returns Locator, no async + getExecutionItems(): Locator { + return this.page.locator('div.execution-card'); + } + + getLastExecutionItem(): Locator { + const executionItems = this.getExecutionItems(); + return executionItems.nth(0); + } + + // ✅ Action: Async, descriptive verb, returns void + async clickDebugInEditorButton(): Promise { + await this.clickButtonByName('Debug in editor'); + } + + async clickLastExecutionItem(): Promise { + const executionItem = this.getLastExecutionItem(); + await executionItem.click(); + } + + // ❌ AVOID: Mixed concerns (this should be in a composable) + async handlePinnedNodesConfirmation(action: 'Unpin' | 'Cancel'): Promise { + // This involves business logic and should be moved to a composable + } +} +``` + +### When Creating a Composable + +```typescript +// From CanvasComposer.ts - Good example +export class CanvasComposer { + /** + * Pin the data on a node. Then close the node. + * @param nodeName - The name of the node to pin the data on. + */ + async pinNodeData(nodeName: string) { + await this.n8n.canvas.openNode(nodeName); + await this.n8n.ndv.togglePinData(); + await this.n8n.ndv.close(); + } +} + +// From ProjectComposer.ts - Good example with return data +export class ProjectComposer { + async addCredentialToProject( + projectName: string, + credentialType: string, + credentialFieldName: string, + credentialValue: string, + ) { + await this.n8n.sideBar.openNewCredentialDialogForProject(projectName); + await this.n8n.credentials.openNewCredentialDialogFromCredentialList(credentialType); + await this.n8n.credentials.fillCredentialField(credentialFieldName, credentialValue); + await this.n8n.credentials.saveCredential(); + await this.n8n.notifications.waitForNotificationAndClose('Credential successfully created'); + await this.n8n.credentials.closeCredentialDialog(); + } +} +``` + +### When Writing Tests + +#### UI Tests +```typescript +// ✅ GOOD: From 1-workflows.spec.ts +test('should create a new workflow using add workflow button', async ({ n8n }) => { + await n8n.workflows.clickAddWorklowButton(); + + const workflowName = `Test Workflow ${Date.now()}`; + await n8n.canvas.setWorkflowName(workflowName); + await n8n.canvas.clickSaveWorkflowButton(); + + await expect( + n8n.notifications.notificationContainerByText('Workflow successfully created'), + ).toBeVisible(); +}); + +// ✅ GOOD: From 28-debug.spec.ts - Using helper functions +async function createBasicWorkflow(n8n, url = URLS.FAILING) { + await n8n.workflows.clickAddWorklowButton(); + await n8n.canvas.addNode('Manual Trigger'); + await n8n.canvas.addNode('HTTP Request'); + await n8n.ndv.fillParameterInput('URL', url); + await n8n.ndv.close(); + await n8n.canvas.clickSaveWorkflowButton(); + await n8n.notifications.waitForNotificationAndClose(NOTIFICATIONS.WORKFLOW_CREATED); +} + +test('should enter debug mode for failed executions', async ({ n8n }) => { + await createBasicWorkflow(n8n, URLS.FAILING); + await n8n.workflowComposer.executeWorkflowAndWaitForNotification(NOTIFICATIONS.PROBLEM_IN_NODE); + await importExecutionForDebugging(n8n); + expect(n8n.page.url()).toContain('/debug'); +}); +``` + +#### API Tests +```typescript +// ✅ GOOD: API-driven workflow testing +test('should create workflow via API, activate it, trigger webhook externally @auth:owner', async ({ api }) => { + const workflowDefinition = JSON.parse( + readFileSync(resolveFromRoot('workflows', 'simple-webhook-test.json'), 'utf8'), + ); + + const createdWorkflow = await api.workflowApi.createWorkflow(workflowDefinition); + await api.workflowApi.setActive(createdWorkflow.id, true); + + const testPayload = { message: 'Hello from Playwright test' }; + const webhookResponse = await api.workflowApi.triggerWebhook('test-webhook', { data: testPayload }); + expect(webhookResponse.ok()).toBe(true); + + const execution = await api.workflowApi.waitForExecution(createdWorkflow.id, 10000); + expect(execution.status).toBe('success'); + + const executionDetails = await api.workflowApi.getExecution(execution.id); + expect(executionDetails.data).toContain('Hello from Playwright test'); +}); +``` + +--- + +## 🎯 Best Practices + +### 1. Always Use BasePage Methods +```typescript +// ✅ GOOD - From NodeDisplayViewPage.ts +async fillParameterInput(labelName: string, value: string) { + await this.getParameterByLabel(labelName).getByTestId('parameter-input-field').fill(value); +} + +async clickBackToCanvasButton() { + await this.clickByTestId('back-to-canvas'); +} + +// ❌ AVOID +async badExample() { + await this.page.getByTestId('back-to-canvas').click(); +} +``` + +### 2. Keep Page Objects Simple +```typescript +// ✅ GOOD - From CredentialsPage.ts +export class CredentialsPage extends BasePage { + async openCredentialSelector() { + await this.page.getByRole('combobox', { name: 'Select Credential' }).click(); + } + + async createNewCredential() { + await this.clickByText('Create new credential'); + } + + async fillCredentialField(fieldName: string, value: string) { + const field = this.page + .getByTestId(`parameter-input-${fieldName}`) + .getByTestId('parameter-input-field'); + await field.click(); + await field.fill(value); + } +} +``` + +### 3. Use Constants for Repeated Values +```typescript +// From constants.ts +export const MANUAL_TRIGGER_NODE_NAME = 'Manual Trigger'; +export const MANUAL_TRIGGER_NODE_DISPLAY_NAME = 'When clicking 'Execute workflow''; +export const CODE_NODE_NAME = 'Code'; +export const SET_NODE_NAME = 'Set'; +export const HTTP_REQUEST_NODE_NAME = 'HTTP Request'; + +// From 28-debug.spec.ts +const NOTIFICATIONS = { + WORKFLOW_CREATED: 'Workflow successfully created', + EXECUTION_IMPORTED: 'Execution data imported', + PROBLEM_IN_NODE: 'Problem in node', + SUCCESSFUL: 'Successful', + DATA_NOT_IMPORTED: "Some execution data wasn't imported", +}; +``` + +### 4. Handle Dynamic Data +```typescript +// From test-users.ts +export const INSTANCE_OWNER_CREDENTIALS: UserCredentials = { + email: 'nathan@n8n.io', + password: DEFAULT_USER_PASSWORD, + firstName: randFirstName(), + lastName: randLastName(), +}; + +// From tests +const projectName = `Test Project ${Date.now()}`; +const workflowName = `Archive Test ${Date.now()}`; +``` + +### 5. Proper Waiting Strategies +```typescript +// ✅ GOOD - From ProjectComposer.ts +await Promise.all([ + this.n8n.page.waitForResponse('**/rest/projects/*'), + this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(), +]); + +// From NotificationsPage.ts +async waitForNotification(text: string | RegExp, options: { timeout?: number } = {}): Promise { + const { timeout = 5000 } = options; + try { + const notification = this.notificationContainerByText(text).first(); + await notification.waitFor({ state: 'visible', timeout }); + return true; + } catch { + return false; + } +} +``` + +--- + +## 🚨 Common Anti-Patterns + +### ❌ Don't Mix Concerns +```typescript +// BAD: From WorkflowsPage.ts - Should be in composable +async archiveWorkflow(workflowItem: Locator) { + await workflowItem.getByTestId('workflow-card-actions').click(); + await this.getArchiveMenuItem().click(); +} + +// GOOD: Simple page object method +async clickArchiveMenuItem() { + await this.getArchiveMenuItem().click(); +} +``` + +### ❌ Don't Use Raw Selectors in Tests +```typescript +// BAD: From 1-workflows.spec.ts +await expect(n8n.page.getByText('No workflows found')).toBeVisible(); + +// GOOD: Add getter to page object +await expect(n8n.workflows.getEmptyStateMessage()).toBeVisible(); +``` + +### ❌ Don't Create Overly Specific Methods +```typescript +// BAD: Too specific +async createAndSaveNewCredentialForNotionApi(apiKey: string) { + // Too specific! Break it down +} + +// GOOD: From CredentialsPage.ts - Reusable parts +async openNewCredentialDialogFromCredentialList(credentialType: string): Promise +async fillCredentialField(fieldName: string, value: string) +async saveCredential() +``` + +--- + +## 📝 Code Review Checklist + +Before submitting your PR, ensure: + +- [ ] All page object methods follow the getter/action/query pattern +- [ ] Complex workflows are in composables, not page objects +- [ ] Tests use composables, not low-level page methods +- [ ] Used `BasePage` methods instead of raw Playwright selectors +- [ ] Added JSDoc comments for non-obvious methods +- [ ] Test names clearly describe the business scenario +- [ ] No `waitForTimeout` - used proper Playwright waiting +- [ ] Constants used for repeated strings +- [ ] Dynamic data includes timestamps to avoid conflicts +- [ ] Methods are small and focused on one responsibility + +--- + +## 🔍 Real Implementation Example + +Here's a complete example from our codebase showing all layers: + +```typescript +// 1. Page Object (ProjectSettingsPage.ts) +export class ProjectSettingsPage extends BasePage { + // Simple action methods only + async fillProjectName(name: string) { + await this.page.getByTestId('project-settings-name-input').locator('input').fill(name); + } + + async clickSaveButton() { + await this.clickButtonByName('Save'); + } +} + +// 2. Composable (ProjectComposer.ts) +export class ProjectComposer { + async createProject(projectName?: string) { + await this.n8n.page.getByTestId('universal-add').click(); + await Promise.all([ + this.n8n.page.waitForResponse('**/rest/projects/*'), + this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(), + ]); + await this.n8n.notifications.waitForNotificationAndClose('saved successfully'); + await this.n8n.page.waitForLoadState(); + const projectNameUnique = projectName ?? `Project ${Date.now()}`; + await this.n8n.projectSettings.fillProjectName(projectNameUnique); + await this.n8n.projectSettings.clickSaveButton(); + const projectId = this.extractProjectIdFromPage('projects', 'settings'); + return { projectName: projectNameUnique, projectId }; + } +} + +// 3. Test (39-projects.spec.ts) +test('should filter credentials by project ID', async ({ n8n, api }) => { + const { projectName, projectId } = await n8n.projectComposer.createProject(); + await n8n.projectComposer.addCredentialToProject( + projectName, + 'Notion API', + 'apiKey', + NOTION_API_KEY, + ); + + const credentials = await getCredentialsForProject(api, projectId); + expect(credentials).toHaveLength(1); +}); +``` diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/composables/CanvasComposer 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/composables/CanvasComposer 2.ts new file mode 100755 index 00000000..5816409a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/composables/CanvasComposer 2.ts @@ -0,0 +1,40 @@ +import type { n8nPage } from '../pages/n8nPage'; + +export class CanvasComposer { + constructor(private readonly n8n: n8nPage) {} + + /** + * Pin the data on a node. Then close the node. + * @param nodeName - The name of the node to pin the data on. + */ + async pinNodeData(nodeName: string) { + await this.n8n.canvas.openNode(nodeName); + await this.n8n.ndv.togglePinData(); + await this.n8n.ndv.close(); + } + + /** + * Execute a node and wait for success toast notification + * @param nodeName - The node to execute + */ + async executeNodeAndWaitForToast(nodeName: string): Promise { + await this.n8n.canvas.executeNode(nodeName); + await this.n8n.notifications.waitForNotificationAndClose('Node executed successfully'); + } + + /** + * Copy selected nodes and verify success toast + */ + async copySelectedNodesWithToast(): Promise { + await this.n8n.canvas.copyNodes(); + await this.n8n.notifications.waitForNotificationAndClose('Copied to clipboard'); + } + + /** + * Select all nodes and copy them + */ + async selectAllAndCopy(): Promise { + await this.n8n.canvas.selectAll(); + await this.copySelectedNodesWithToast(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/composables/ProjectComposer 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/composables/ProjectComposer 2.ts new file mode 100755 index 00000000..73570c81 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/composables/ProjectComposer 2.ts @@ -0,0 +1,55 @@ +import { nanoid } from 'nanoid'; + +import type { n8nPage } from '../pages/n8nPage'; + +export class ProjectComposer { + constructor(private readonly n8n: n8nPage) {} + + /** + * Create a project and return the project name and ID. If no project name is provided, a unique name will be generated. + * @param projectName - The name of the project to create. + * @returns The project name and ID. + */ + async createProject(projectName?: string) { + await this.n8n.page.getByTestId('universal-add').click(); + await this.n8n.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(); + await this.n8n.notifications.waitForNotificationAndClose('saved successfully'); + await this.n8n.page.waitForLoadState(); + const projectNameUnique = projectName ?? `Project ${nanoid(8)}`; + await this.n8n.projectSettings.fillProjectName(projectNameUnique); + await this.n8n.projectSettings.clickSaveButton(); + const projectId = this.extractProjectIdFromPage('projects', 'settings'); + return { projectName: projectNameUnique, projectId }; + } + + /** + * Add a new credential to a project. + * @param projectName - The name of the project to add the credential to. + * @param credentialType - The type of credential to add by visible name e.g 'Notion API' + * @param credentialFieldName - The name of the field to add the credential to. e.g. 'apiKey' which would be data-test-id='parameter-input-apiKey' + * @param credentialValue - The value of the credential to add. + */ + async addCredentialToProject( + projectName: string, + credentialType: string, + credentialFieldName: string, + credentialValue: string, + ) { + await this.n8n.sideBar.openNewCredentialDialogForProject(projectName); + await this.n8n.credentials.openNewCredentialDialogFromCredentialList(credentialType); + await this.n8n.credentials.fillCredentialField(credentialFieldName, credentialValue); + await this.n8n.credentials.saveCredential(); + await this.n8n.notifications.waitForNotificationAndClose('Credential successfully created'); + await this.n8n.credentials.closeCredentialDialog(); + } + + extractIdFromUrl(url: string, beforeWord: string, afterWord: string): string { + const path = url.includes('://') ? new URL(url).pathname : url; + const match = path.match(new RegExp(`/${beforeWord}/([^/]+)/${afterWord}`)); + return match?.[1] ?? ''; + } + + extractProjectIdFromPage(beforeWord: string, afterWord: string): string { + return this.extractIdFromUrl(this.n8n.page.url(), beforeWord, afterWord); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/composables/TestEntryComposer 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/composables/TestEntryComposer 2.ts new file mode 100755 index 00000000..ad8dab2d --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/composables/TestEntryComposer 2.ts @@ -0,0 +1,54 @@ +import type { n8nPage } from '../pages/n8nPage'; + +/** + * Composer for UI test entry points. All methods in this class navigate to or verify UI state. + * For API-only testing, use the standalone `api` fixture directly instead. + */ +export class TestEntryComposer { + constructor(private readonly n8n: n8nPage) {} + + /** + * Start UI test from the home page and navigate to canvas + */ + async fromHome() { + await this.n8n.goHome(); + await this.n8n.page.waitForURL('/home/workflows'); + } + + /** + * Start UI test from a blank canvas (assumes already on canvas) + */ + async fromBlankCanvas() { + await this.n8n.goHome(); + await this.n8n.workflows.clickAddWorkflowButton(); + // Verify we're on canvas + await this.n8n.canvas.canvasPane().isVisible(); + } + + /** + * Start UI test from a workflow in a new project + */ + async fromNewProject() { + // Enable features to allow us to create a new project + await this.n8n.api.enableFeature('projectRole:admin'); + await this.n8n.api.enableFeature('projectRole:editor'); + await this.n8n.api.setMaxTeamProjectsQuota(-1); + + // Create a project using the API + const response = await this.n8n.api.projectApi.createProject(); + + const projectId = response.id; + await this.n8n.page.goto(`workflow/new?projectId=${projectId}`); + await this.n8n.canvas.canvasPane().isVisible(); + } + + /** + * Start UI test from the canvas of an imported workflow + * Returns the workflow import result for use in the test + */ + async fromImportedWorkflow(workflowFile: string) { + const workflowImportResult = await this.n8n.api.workflowApi.importWorkflow(workflowFile); + await this.n8n.page.goto(`workflow/${workflowImportResult.workflowId}`); + return workflowImportResult; + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/composables/WorkflowComposer 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/composables/WorkflowComposer 2.ts new file mode 100755 index 00000000..921748d5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/composables/WorkflowComposer 2.ts @@ -0,0 +1,65 @@ +import { nanoid } from 'nanoid'; + +import type { n8nPage } from '../pages/n8nPage'; + +/** + * A class for user interactions with workflows that go across multiple pages. + */ +export class WorkflowComposer { + constructor(private readonly n8n: n8nPage) {} + + /** + * Executes a successful workflow and waits for the notification to be closed. + * This waits for http calls and also closes the notification. + */ + async executeWorkflowAndWaitForNotification( + notificationMessage: string, + options: { timeout?: number } = {}, + ) { + const { timeout = 3000 } = options; + const responsePromise = this.n8n.page.waitForResponse( + (response) => + response.url().includes('/rest/workflows/') && + response.url().includes('/run') && + response.request().method() === 'POST', + ); + + await this.n8n.canvas.clickExecuteWorkflowButton(); + await responsePromise; + await this.n8n.notifications.waitForNotificationAndClose(notificationMessage, { timeout }); + } + + /** + * Creates a new workflow by clicking the add workflow button and setting the name + * @param workflowName - The name of the workflow to create + */ + async createWorkflow(workflowName = 'My New Workflow') { + await this.n8n.workflows.clickAddWorkflowButton(); + await this.n8n.canvas.setWorkflowName(workflowName); + + const responsePromise = this.n8n.page.waitForResponse( + (response) => + response.url().includes('/rest/workflows') && response.request().method() === 'POST', + ); + await this.n8n.canvas.saveWorkflow(); + + await responsePromise; + } + + /** + * Creates a new workflow by importing a JSON file + * @param fileName - The workflow JSON file name (e.g., 'test_pdf_workflow.json', will search in workflows folder) + * @param name - Optional custom name. If not provided, generates a unique name + * @returns The actual workflow name that was used + */ + async createWorkflowFromJsonFile( + fileName: string, + name?: string, + ): Promise<{ workflowName: string }> { + const workflowName = name ?? `Imported Workflow ${nanoid(8)}`; + await this.n8n.goHome(); + await this.n8n.workflows.clickAddWorkflowButton(); + await this.n8n.canvas.importWorkflow(fileName, workflowName); + return { workflowName }; + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/eslint.config 2.mjs b/n8n-n8n-1.109.2/packages/testing/playwright/eslint.config 2.mjs new file mode 100755 index 00000000..8d34fd44 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/eslint.config 2.mjs @@ -0,0 +1,71 @@ +import { baseConfig } from '@n8n/eslint-config/base'; +import playwrightPlugin from 'eslint-plugin-playwright'; + +export default [ + ...baseConfig, + playwrightPlugin.configs['flat/recommended'], + { + ignores: ['playwright-report/**/*', 'ms-playwright-cache/**/*'], + }, + { + rules: { + '@typescript-eslint/no-unsafe-argument': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/no-unused-expressions': 'off', + '@typescript-eslint/no-use-before-define': 'off', + '@typescript-eslint/promise-function-async': 'off', + 'n8n-local-rules/no-uncaught-json-parse': 'off', + 'playwright/expect-expect': 'warn', + 'playwright/max-nested-describe': 'warn', + 'playwright/no-conditional-in-test': 'error', + 'playwright/no-skipped-test': 'warn', + // Allow any naming convention for TestRequirements object properties + // This is specifically for workflow filenames and intercept keys that may not follow camelCase + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'default', + format: ['camelCase'], + leadingUnderscore: 'allow', + trailingUnderscore: 'allow', + }, + { + selector: 'variable', + format: ['camelCase', 'UPPER_CASE'], + }, + { + selector: 'typeLike', + format: ['PascalCase'], + }, + { + selector: 'property', + format: ['camelCase', 'snake_case', 'UPPER_CASE'], + filter: { + // Allow any format for properties in TestRequirements objects (workflow files, intercept keys, etc.) + regex: '^(workflow|intercepts|storage|config)$', + match: false, + }, + }, + { + selector: 'objectLiteralProperty', + format: null, // Allow any format for object literal properties in TestRequirements + filter: { + // This allows workflow filenames and intercept keys to use any naming convention + regex: '\\.(json|spec\\.ts)$|[a-zA-Z0-9_-]+', + match: true, + }, + }, + ], + 'import-x/no-extraneous-dependencies': [ + 'error', + { + devDependencies: ['**/tests/**', '**/e2e/**', '**/playwright/**'], + optionalDependencies: false, + }, + ], + }, + }, +]; diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/helpers/NodeParameterHelper 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/helpers/NodeParameterHelper 2.ts new file mode 100755 index 00000000..46f662ac --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/helpers/NodeParameterHelper 2.ts @@ -0,0 +1,106 @@ +import type { NodeDetailsViewPage } from '../pages/NodeDetailsViewPage'; + +/** + * Helper class for setting node parameters in the NDV + */ +export class NodeParameterHelper { + constructor(private ndv: NodeDetailsViewPage) {} + + /** + * Detects parameter type by checking DOM structure + * Supports dropdown, text, and switch parameters + * @param parameterName - The parameter name to check + * @returns The detected parameter type + */ + async detectParameterType(parameterName: string): Promise<'dropdown' | 'text' | 'switch'> { + const parameterContainer = this.ndv.getParameterInput(parameterName); + const [hasSwitch, hasSelect, hasSelectCaret] = await Promise.all([ + parameterContainer + .locator('.el-switch') + .count() + .then((count) => count > 0), + parameterContainer + .locator('.el-select') + .count() + .then((count) => count > 0), + parameterContainer + .locator('.el-select__caret') + .count() + .then((count) => count > 0), + ]); + + if (hasSwitch) return 'switch'; + if (hasSelect && hasSelectCaret) return 'dropdown'; + return 'text'; + } + + /** + * Sets a parameter value with automatic type detection or explicit type + * Supports dropdown, text, and switch parameters + * @param parameterName - Name of the parameter to set + * @param value - Value to set (string or boolean) + * @param type - Optional explicit type to skip detection for better performance + */ + async setParameter( + parameterName: string, + value: string | boolean, + type?: 'dropdown' | 'text' | 'switch', + ): Promise { + if (typeof value === 'boolean') { + await this.ndv.setParameterSwitch(parameterName, value); + return; + } + + const parameterType = type ?? (await this.detectParameterType(parameterName)); + switch (parameterType) { + case 'dropdown': + await this.ndv.setParameterDropdown(parameterName, value); + break; + case 'text': + await this.ndv.setParameterInput(parameterName, value); + break; + case 'switch': + await this.ndv.setParameterSwitch(parameterName, value === 'true'); + break; + } + } + + async webhook(config: { + httpMethod?: string; + path?: string; + authentication?: string; + responseMode?: string; + }): Promise { + if (config.httpMethod !== undefined) + await this.setParameter('httpMethod', config.httpMethod, 'dropdown'); + if (config.path !== undefined) await this.setParameter('path', config.path, 'text'); + if (config.authentication !== undefined) + await this.setParameter('authentication', config.authentication, 'dropdown'); + if (config.responseMode !== undefined) + await this.setParameter('responseMode', config.responseMode, 'dropdown'); + } + + /** + * Simplified HTTP Request node parameter configuration + * @param config - Configuration object with parameter values + */ + async httpRequest(config: { + method?: string; + url?: string; + authentication?: string; + sendQuery?: boolean; + sendHeaders?: boolean; + sendBody?: boolean; + }): Promise { + if (config.method !== undefined) await this.setParameter('method', config.method, 'dropdown'); + if (config.url !== undefined) await this.setParameter('url', config.url, 'text'); + if (config.authentication !== undefined) + await this.setParameter('authentication', config.authentication, 'dropdown'); + if (config.sendQuery !== undefined) + await this.setParameter('sendQuery', config.sendQuery, 'switch'); + if (config.sendHeaders !== undefined) + await this.setParameter('sendHeaders', config.sendHeaders, 'switch'); + if (config.sendBody !== undefined) + await this.setParameter('sendBody', config.sendBody, 'switch'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/AIAssistantPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/AIAssistantPage 2.ts new file mode 100755 index 00000000..613818c4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/AIAssistantPage 2.ts @@ -0,0 +1,66 @@ +import { BasePage } from './BasePage'; + +export class AIAssistantPage extends BasePage { + getAskAssistantFloatingButton() { + return this.page.getByTestId('ask-assistant-floating-button'); + } + + getAskAssistantCanvasActionButton() { + return this.page.getByTestId('ask-assistant-canvas-action-button'); + } + + getAskAssistantChat() { + return this.page.getByTestId('ask-assistant-chat'); + } + + getPlaceholderMessage() { + return this.page.getByTestId('placeholder-message'); + } + + getChatInput() { + return this.page.getByTestId('chat-input'); + } + + getSendMessageButton() { + return this.page.getByTestId('send-message-button'); + } + + getCloseChatButton() { + return this.page.getByTestId('close-chat-button'); + } + + getAskAssistantSidebarResizer() { + return this.page + .getByTestId('ask-assistant-sidebar') + .locator('[class*="_resizer"][data-dir="left"]') + .first(); + } + + getNodeErrorViewAssistantButton() { + return this.page.getByTestId('node-error-view-ask-assistant-button').locator('button').first(); + } + + getChatMessagesAll() { + return this.page.locator('[data-test-id^="chat-message"]'); + } + + getChatMessagesAssistant() { + return this.page.getByTestId('chat-message-assistant'); + } + + getChatMessagesUser() { + return this.page.getByTestId('chat-message-user'); + } + + getChatMessagesSystem() { + return this.page.getByTestId('chat-message-system'); + } + + getQuickReplyButtons() { + return this.page.getByTestId('quick-replies').locator('button'); + } + + getNewAssistantSessionModal() { + return this.page.getByTestId('new-assistant-session-modal'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/BasePage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/BasePage 2.ts new file mode 100755 index 00000000..f81720c5 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/BasePage 2.ts @@ -0,0 +1,21 @@ +import type { Page } from '@playwright/test'; + +export abstract class BasePage { + constructor(protected readonly page: Page) {} + + protected async clickByTestId(testId: string) { + await this.page.getByTestId(testId).click(); + } + + protected async fillByTestId(testId: string, value: string) { + await this.page.getByTestId(testId).fill(value); + } + + protected async clickByText(text: string) { + await this.page.getByText(text).click(); + } + + protected async clickButtonByName(name: string) { + await this.page.getByRole('button', { name }).click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/BecomeCreatorCTAPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/BecomeCreatorCTAPage 2.ts new file mode 100755 index 00000000..cccd1f83 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/BecomeCreatorCTAPage 2.ts @@ -0,0 +1,15 @@ +import { BasePage } from './BasePage'; + +export class BecomeCreatorCTAPage extends BasePage { + getBecomeTemplateCreatorCta() { + return this.page.getByTestId('become-template-creator-cta'); + } + + getCloseBecomeTemplateCreatorCtaButton() { + return this.page.getByTestId('close-become-template-creator-cta'); + } + + async closeBecomeTemplateCreatorCta() { + await this.getCloseBecomeTemplateCreatorCtaButton().click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/CanvasPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/CanvasPage 2.ts new file mode 100755 index 00000000..e5a7e727 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/CanvasPage 2.ts @@ -0,0 +1,449 @@ +import type { Locator } from '@playwright/test'; +import { nanoid } from 'nanoid'; + +import { BasePage } from './BasePage'; +import { resolveFromRoot } from '../utils/path-helper'; + +export class CanvasPage extends BasePage { + saveWorkflowButton(): Locator { + return this.page.getByRole('button', { name: 'Save' }); + } + + nodeCreatorItemByName(text: string): Locator { + return this.page.getByTestId('node-creator-item-name').getByText(text, { exact: true }); + } + + nodeCreatorSubItem(subItemText: string): Locator { + return this.page.getByTestId('node-creator-item-name').getByText(subItemText, { exact: true }); + } + + nodeByName(nodeName: string): Locator { + return this.page.locator(`[data-test-id="canvas-node"][data-node-name="${nodeName}"]`); + } + + nodeToolbar(nodeName: string): Locator { + return this.nodeByName(nodeName).getByTestId('canvas-node-toolbar'); + } + + nodeDeleteButton(nodeName: string): Locator { + return this.nodeToolbar(nodeName).getByTestId('delete-node-button'); + } + + nodeDisableButton(nodeName: string): Locator { + return this.nodeToolbar(nodeName).getByTestId('disable-node-button'); + } + + async clickCanvasPlusButton(): Promise { + await this.clickByTestId('canvas-plus-button'); + } + + getCanvasNodes() { + return this.page.getByTestId('canvas-node'); + } + + async clickNodeCreatorPlusButton(): Promise { + await this.clickByTestId('node-creator-plus-button'); + } + + async clickSaveWorkflowButton(): Promise { + await this.saveWorkflowButton().click(); + } + + async fillNodeCreatorSearchBar(text: string): Promise { + await this.nodeCreatorSearchBar().fill(text); + } + + async clickNodeCreatorItemName(text: string): Promise { + await this.nodeCreatorItemByName(text).click(); + } + + async addNode(text: string): Promise { + await this.clickNodeCreatorPlusButton(); + await this.fillNodeCreatorSearchBar(text); + await this.clickNodeCreatorItemName(text); + } + + async addNodeAndCloseNDV(text: string, subItemText?: string): Promise { + if (subItemText) { + await this.addNodeWithSubItem(text, subItemText); + } else { + await this.addNode(text); + } + await this.page.keyboard.press('Escape'); + } + + async addNodeWithSubItem(searchText: string, subItemText: string): Promise { + await this.addNode(searchText); + await this.nodeCreatorSubItem(subItemText).click(); + } + + async addActionNode(searchText: string, subItemText: string): Promise { + await this.addNode(searchText); + await this.page.getByText('Actions').click(); + await this.nodeCreatorSubItem(subItemText).click(); + } + + async addTriggerNode(searchText: string, subItemText: string): Promise { + await this.addNode(searchText); + await this.page.getByText('Triggers').click(); + await this.nodeCreatorSubItem(subItemText).click(); + } + + async deleteNodeByName(nodeName: string): Promise { + await this.nodeDeleteButton(nodeName).click(); + } + + async saveWorkflow(): Promise { + await this.clickSaveWorkflowButton(); + } + + getExecuteWorkflowButton(): Locator { + return this.page.getByTestId('execute-workflow-button'); + } + + async clickExecuteWorkflowButton(): Promise { + await this.page.getByTestId('execute-workflow-button').click(); + } + + async clickDebugInEditorButton(): Promise { + await this.page.getByRole('button', { name: 'Debug in editor' }).click(); + } + + async pinNode(nodeName: string): Promise { + await this.nodeByName(nodeName).click({ button: 'right' }); + await this.page.getByTestId('context-menu').getByText('Pin').click(); + } + + async unpinNode(nodeName: string): Promise { + await this.nodeByName(nodeName).click({ button: 'right' }); + await this.page.getByText('Unpin').click(); + } + + async openNode(nodeName: string): Promise { + await this.nodeByName(nodeName).dblclick(); + } + + /** + * Get the names of all pinned nodes on the canvas. + * @returns An array of node names. + */ + async getPinnedNodeNames(): Promise { + const pinnedNodesLocator = this.page + .getByTestId('canvas-node') + .filter({ has: this.page.getByTestId('canvas-node-status-pinned') }); + + const names: string[] = []; + const count = await pinnedNodesLocator.count(); + + for (let i = 0; i < count; i++) { + const node = pinnedNodesLocator.nth(i); + const name = await node.getAttribute('data-node-name'); + if (name) { + names.push(name); + } + } + + return names; + } + + async clickExecutionsTab(): Promise { + await this.page.getByRole('radio', { name: 'Executions' }).click(); + } + async setWorkflowName(name: string): Promise { + await this.clickByTestId('inline-edit-preview'); + await this.fillByTestId('inline-edit-input', name); + } + + /** + * Import a workflow from a fixture file + * @param fixtureKey - The key of the fixture file to import + * @param workflowName - The name of the workflow to import + * Naming the file causes the workflow to save so we don't need to click save + */ + async importWorkflow(fixtureKey: string, workflowName: string) { + await this.clickByTestId('workflow-menu'); + + const [fileChooser] = await Promise.all([ + this.page.waitForEvent('filechooser'), + this.clickByText('Import from File...'), + ]); + await fileChooser.setFiles(resolveFromRoot('workflows', fixtureKey)); + + await this.clickByTestId('inline-edit-preview'); + await this.fillByTestId('inline-edit-input', workflowName); + await this.page.getByTestId('inline-edit-input').press('Enter'); + } + + getWorkflowTags() { + return this.page.getByTestId('workflow-tags').locator('.el-tag'); + } + async activateWorkflow() { + const responsePromise = this.page.waitForResponse( + (response) => + response.url().includes('/rest/workflows/') && response.request().method() === 'PATCH', + ); + + await this.page.getByTestId('workflow-activate-switch').click(); + await responsePromise; + + await this.page.waitForTimeout(200); + } + + async clickZoomToFitButton(): Promise { + await this.clickByTestId('zoom-to-fit'); + } + + /** + * Get node issues for a specific node + */ + getNodeIssuesByName(nodeName: string) { + return this.nodeByName(nodeName).getByTestId('node-issues'); + } + + /** + * Add tags to the workflow + * @param count - The number of tags to add + * @returns An array of tag names + */ + async addTags(count: number = 1): Promise { + const tags: string[] = []; + + for (let i = 0; i < count; i++) { + const tag = `tag-${nanoid(8)}-${i}`; + tags.push(tag); + + if (i === 0) { + await this.clickByText('Add tag'); + } else { + await this.page + .getByTestId('tags-dropdown') + .getByText(tags[i - 1]) + .click(); + } + + await this.page.getByRole('combobox').first().fill(tag); + await this.page.getByRole('combobox').first().press('Enter'); + } + + await this.page.click('body'); + + return tags; + } + + getWorkflowSaveButton(): Locator { + return this.page.getByTestId('workflow-save-button'); + } + + // Production Checklist methods + getProductionChecklistButton(): Locator { + return this.page.getByTestId('suggested-action-count'); + } + + getProductionChecklistPopover(): Locator { + return this.page.locator('[data-reka-popper-content-wrapper=""]').filter({ hasText: /./ }); + } + + getProductionChecklistActionItem(text?: string): Locator { + const items = this.page.getByTestId('suggested-action-item'); + if (text) { + return items.getByText(text); + } + return items; + } + + getProductionChecklistIgnoreAllButton(): Locator { + return this.page.getByTestId('suggested-action-ignore-all'); + } + + getErrorActionItem(): Locator { + return this.getProductionChecklistActionItem('Set up error notifications'); + } + + getTimeSavedActionItem(): Locator { + return this.getProductionChecklistActionItem('Track time saved'); + } + + getEvaluationsActionItem(): Locator { + return this.getProductionChecklistActionItem('Test reliability of AI steps'); + } + + async clickProductionChecklistButton(): Promise { + await this.getProductionChecklistButton().click(); + } + + async clickProductionChecklistIgnoreAll(): Promise { + await this.getProductionChecklistIgnoreAllButton().click(); + } + + async clickProductionChecklistAction(actionText: string): Promise { + await this.getProductionChecklistActionItem(actionText).click(); + } + + async duplicateNode(nodeName: string): Promise { + await this.nodeByName(nodeName).click({ button: 'right' }); + await this.page.getByTestId('context-menu').getByText('Duplicate').click(); + } + + nodeConnections(): Locator { + return this.page.locator('[data-test-id="edge"]'); + } + + canvasNodePlusEndpointByName(nodeName: string): Locator { + return this.page + .locator( + `[data-test-id="canvas-node-output-handle"][data-node-name="${nodeName}"] [data-test-id="canvas-handle-plus"]`, + ) + .first(); + } + + nodeCreatorSearchBar(): Locator { + return this.page.getByTestId('node-creator-search-bar'); + } + + nodeCreatorNodeItems(): Locator { + return this.page.getByTestId('node-creator-node-item'); + } + + nodeCreatorActionItems(): Locator { + return this.page.getByTestId('node-creator-action-item'); + } + + nodeCreatorCategoryItems(): Locator { + return this.page.getByTestId('node-creator-category-item'); + } + + selectedNodes(): Locator { + return this.page + .locator('[data-test-id="canvas-node"]') + .locator('xpath=..') + .locator('.selected'); + } + + disabledNodes(): Locator { + return this.page.locator('[data-canvas-node-render-type][class*="disabled"]'); + } + + nodeExecuteButton(nodeName: string): Locator { + return this.nodeToolbar(nodeName).getByTestId('execute-node-button'); + } + + canvasPane(): Locator { + return this.page.getByTestId('canvas-wrapper'); + } + + // Actions + + async addInitialNodeToCanvas(nodeName: string): Promise { + await this.clickCanvasPlusButton(); + await this.fillNodeCreatorSearchBar(nodeName); + await this.clickNodeCreatorItemName(nodeName); + } + + async clickNodePlusEndpoint(nodeName: string): Promise { + await this.canvasNodePlusEndpointByName(nodeName).click(); + } + + async executeNode(nodeName: string): Promise { + await this.nodeByName(nodeName).hover(); + await this.nodeExecuteButton(nodeName).click(); + } + + async selectAll(): Promise { + await this.page.keyboard.press('ControlOrMeta+a'); + } + + async copyNodes(): Promise { + await this.page.keyboard.press('ControlOrMeta+c'); + } + + async deselectAll(): Promise { + await this.canvasPane().click({ position: { x: 10, y: 10 } }); + } + + getNodeLeftPosition(nodeLocator: Locator): Promise { + return nodeLocator.evaluate((el) => el.getBoundingClientRect().left); + } + + // Connection helpers + connectionBetweenNodes(sourceNodeName: string, targetNodeName: string): Locator { + return this.page.locator( + `[data-test-id="edge"][data-source-node-name="${sourceNodeName}"][data-target-node-name="${targetNodeName}"]`, + ); + } + + connectionToolbarBetweenNodes(sourceNodeName: string, targetNodeName: string): Locator { + return this.page.locator( + `[data-test-id="edge-label"][data-source-node-name="${sourceNodeName}"][data-target-node-name="${targetNodeName}"] [data-test-id="canvas-edge-toolbar"]`, + ); + } + + // Canvas action helpers + async addNodeBetweenNodes( + sourceNodeName: string, + targetNodeName: string, + newNodeName: string, + ): Promise { + const specificConnection = this.connectionBetweenNodes(sourceNodeName, targetNodeName); + // eslint-disable-next-line playwright/no-force-option + await specificConnection.hover({ force: true }); + + const addNodeButton = this.connectionToolbarBetweenNodes( + sourceNodeName, + targetNodeName, + ).getByTestId('add-connection-button'); + + await addNodeButton.click(); + await this.fillNodeCreatorSearchBar(newNodeName); + await this.clickNodeCreatorItemName(newNodeName); + await this.page.keyboard.press('Escape'); + } + + async deleteConnectionBetweenNodes( + sourceNodeName: string, + targetNodeName: string, + ): Promise { + const specificConnection = this.connectionBetweenNodes(sourceNodeName, targetNodeName); + // eslint-disable-next-line playwright/no-force-option + await specificConnection.hover({ force: true }); + + const deleteButton = this.connectionToolbarBetweenNodes( + sourceNodeName, + targetNodeName, + ).getByTestId('delete-connection-button'); + + await deleteButton.click(); + } + + async navigateNodesWithArrows(direction: 'left' | 'right' | 'up' | 'down'): Promise { + const keyMap = { + left: 'ArrowLeft', + right: 'ArrowRight', + up: 'ArrowUp', + down: 'ArrowDown', + }; + await this.canvasPane().focus(); + await this.page.keyboard.press(keyMap[direction]); + } + + async extendSelectionWithArrows(direction: 'left' | 'right' | 'up' | 'down'): Promise { + const keyMap = { + left: 'Shift+ArrowLeft', + right: 'Shift+ArrowRight', + up: 'Shift+ArrowUp', + down: 'Shift+ArrowDown', + }; + await this.canvasPane().focus(); + await this.page.keyboard.press(keyMap[direction]); + } + + /** + * Visit the workflow page with a specific timestamp for NPS survey testing. + * Uses Playwright's clock API to set a fixed time. + */ + async visitWithTimestamp(timestamp: number): Promise { + // Set fixed time using Playwright's clock API + await this.page.clock.setFixedTime(timestamp); + + await this.page.goto('/workflow/new'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/CredentialsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/CredentialsPage 2.ts new file mode 100755 index 00000000..045bb9e9 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/CredentialsPage 2.ts @@ -0,0 +1,65 @@ +import { BasePage } from './BasePage'; + +export class CredentialsPage extends BasePage { + get emptyListCreateCredentialButton() { + return this.page.getByRole('button', { name: 'Add first credential' }); + } + + get createCredentialButton() { + return this.page.getByTestId('create-credential-button'); + } + + get credentialCards() { + return this.page.getByTestId('credential-cards'); + } + + /** + * Create a new credential of the specified type + * @param credentialType - The type of credential to create (e.g. 'Notion API') + */ + async openNewCredentialDialogFromCredentialList(credentialType: string): Promise { + await this.page.getByRole('combobox', { name: 'Search for app...' }).fill(credentialType); + await this.page + .getByTestId('new-credential-type-select-option') + .filter({ hasText: credentialType }) + .click(); + await this.page.getByTestId('new-credential-type-button').click(); + } + + async openCredentialSelector() { + await this.page.getByRole('combobox', { name: 'Select Credential' }).click(); + } + + async createNewCredential() { + await this.clickByText('Create new credential'); + } + + async fillCredentialField(fieldName: string, value: string) { + const field = this.page + .getByTestId(`parameter-input-${fieldName}`) + .getByTestId('parameter-input-field'); + await field.click(); + await field.fill(value); + } + + async saveCredential() { + await this.clickButtonByName('Save'); + } + + async closeCredentialDialog() { + await this.clickButtonByName('Close this dialog'); + } + + async createAndSaveNewCredential(fieldName: string, value: string) { + await this.openCredentialSelector(); + await this.createNewCredential(); + await this.filLCredentialSaveClose(fieldName, value); + } + + async filLCredentialSaveClose(fieldName: string, value: string) { + await this.fillCredentialField(fieldName, value); + await this.saveCredential(); + await this.page.getByText('Connection tested successfully').waitFor({ state: 'visible' }); + await this.closeCredentialDialog(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/ExecutionsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/ExecutionsPage 2.ts new file mode 100755 index 00000000..bbfa505a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/ExecutionsPage 2.ts @@ -0,0 +1,36 @@ +import type { Locator } from '@playwright/test'; + +import { BasePage } from './BasePage'; + +export class ExecutionsPage extends BasePage { + async clickDebugInEditorButton(): Promise { + await this.clickButtonByName('Debug in editor'); + } + + async clickCopyToEditorButton(): Promise { + await this.clickButtonByName('Copy to editor'); + } + + getExecutionItems(): Locator { + return this.page.locator('div.execution-card'); + } + + getLastExecutionItem(): Locator { + const executionItems = this.getExecutionItems(); + return executionItems.nth(0); + } + + async clickLastExecutionItem(): Promise { + const executionItem = this.getLastExecutionItem(); + await executionItem.click(); + } + + /** + * Handle the pinned nodes confirmation dialog. + * @param action - The action to take. + */ + async handlePinnedNodesConfirmation(action: 'Unpin' | 'Cancel'): Promise { + const confirmDialog = this.page.locator('.matching-pinned-nodes-confirmation'); + await this.page.getByRole('button', { name: action }).click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/IframePage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/IframePage 2.ts new file mode 100755 index 00000000..9a936515 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/IframePage 2.ts @@ -0,0 +1,15 @@ +import { BasePage } from './BasePage'; + +export class IframePage extends BasePage { + getIframe() { + return this.page.locator('iframe'); + } + + getIframeBySrc(src: string) { + return this.page.locator(`iframe[src="${src}"]`); + } + + async waitForIframeRequest(url: string) { + await this.page.waitForResponse(url); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/NodeDetailsViewPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/NodeDetailsViewPage 2.ts new file mode 100755 index 00000000..267ce733 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/NodeDetailsViewPage 2.ts @@ -0,0 +1,460 @@ +import type { Page } from '@playwright/test'; +import { expect } from '@playwright/test'; + +import { BasePage } from './BasePage'; +import { NodeParameterHelper } from '../helpers/NodeParameterHelper'; +import { EditFieldsNode } from './nodes/EditFieldsNode'; + +export class NodeDetailsViewPage extends BasePage { + readonly setupHelper: NodeParameterHelper; + readonly editFields: EditFieldsNode; + + constructor(page: Page) { + super(page); + this.setupHelper = new NodeParameterHelper(this); + this.editFields = new EditFieldsNode(page); + } + + async clickBackToCanvasButton() { + await this.clickByTestId('back-to-canvas'); + } + + getParameterByLabel(labelName: string) { + return this.page.locator('.parameter-item').filter({ hasText: labelName }); + } + + /** + * Fill a parameter input field + * @param labelName - The label of the parameter e.g URL + * @param value - The value to fill in the input field e.g https://foo.bar + */ + async fillParameterInput(labelName: string, value: string) { + await this.getParameterByLabel(labelName).getByTestId('parameter-input-field').fill(value); + } + + async selectWorkflowResource(createItemText: string, searchText: string = '') { + await this.clickByTestId('rlc-input'); + + if (searchText) { + await this.fillByTestId('rlc-search', searchText); + } + + await this.clickByText(createItemText); + } + + async togglePinData() { + await this.clickByTestId('ndv-pin-data'); + } + + async close() { + await this.clickBackToCanvasButton(); + } + + async execute() { + await this.clickByTestId('node-execute-button'); + } + + getOutputPanel() { + return this.page.getByTestId('output-panel'); + } + + getContainer() { + return this.page.getByTestId('ndv'); + } + + getInputPanel() { + return this.page.getByTestId('ndv-input-panel'); + } + + getParameterExpressionPreviewValue() { + return this.page.getByTestId('parameter-expression-preview-value'); + } + + getEditPinnedDataButton() { + return this.page.getByTestId('ndv-edit-pinned-data'); + } + + getPinDataButton() { + return this.getOutputPanel().getByTestId('ndv-pin-data'); + } + + getRunDataPaneHeader() { + return this.page.getByTestId('run-data-pane-header'); + } + + getOutputTable() { + return this.getOutputPanel().getByTestId('ndv-data-container').locator('table'); + } + + getOutputDataContainer() { + return this.getOutputPanel().getByTestId('ndv-data-container'); + } + + getOutputTableRows() { + return this.getOutputTable().locator('tr'); + } + + getOutputTableHeaders() { + return this.getOutputTable().locator('thead th'); + } + + getOutputTableRow(row: number) { + return this.getOutputTableRows().nth(row); + } + + getOutputTableCell(row: number, col: number) { + return this.getOutputTableRow(row).locator('td').nth(col); + } + + getOutputTbodyCell(row: number, col: number) { + return this.getOutputTableRow(row).locator('td').nth(col); + } + + // Pin data operations + async setPinnedData(data: object | string) { + const pinnedData = typeof data === 'string' ? data : JSON.stringify(data); + await this.getEditPinnedDataButton().click(); + + // Wait for editor to appear and use broader selector + const editor = this.getOutputPanel().locator('[contenteditable="true"]'); + await editor.waitFor(); + await editor.click(); + await editor.fill(pinnedData); + + await this.savePinnedData(); + } + + async pastePinnedData(data: object) { + await this.getEditPinnedDataButton().click(); + + const editor = this.getOutputPanel().locator('[contenteditable="true"]'); + await editor.waitFor(); + await editor.click(); + await editor.fill(''); + + // Set clipboard data and paste + await this.page.evaluate(async (jsonData) => { + await navigator.clipboard.writeText(JSON.stringify(jsonData)); + }, data); + await this.page.keyboard.press('ControlOrMeta+V'); + + await this.savePinnedData(); + } + + async savePinnedData() { + await this.getRunDataPaneHeader().locator('button:visible').filter({ hasText: 'Save' }).click(); + } + + // Assignment collection methods for advanced tests + getAssignmentCollectionAdd(paramName: string) { + return this.page + .getByTestId(`assignment-collection-${paramName}`) + .getByTestId('assignment-collection-drop-area'); + } + + getAssignmentValue(paramName: string) { + return this.page + .getByTestId(`assignment-collection-${paramName}`) + .getByTestId('assignment-value'); + } + + getInlineExpressionEditorInput() { + return this.page.getByTestId('inline-expression-editor-input'); + } + + getNodeParameters() { + return this.page.getByTestId('node-parameters'); + } + + getParameterInputHint() { + return this.page.getByTestId('parameter-input-hint'); + } + + async makeWebhookRequest(path: string) { + return await this.page.request.get(path); + } + + getVisiblePoppers() { + return this.page.locator('.el-popper:visible'); + } + + async clearExpressionEditor() { + const editor = this.getInlineExpressionEditorInput(); + await editor.click(); + await this.page.keyboard.press('ControlOrMeta+A'); + await this.page.keyboard.press('Delete'); + } + + async typeInExpressionEditor(text: string) { + const editor = this.getInlineExpressionEditorInput(); + await editor.click(); + // We have to use type() instead of fill() because the editor is a CodeMirror editor + await editor.type(text); + } + + /** + * Get parameter input by name (for Code node and similar) + * @param parameterName - The name of the parameter e.g 'jsCode', 'mode' + */ + getParameterInput(parameterName: string) { + return this.page.getByTestId(`parameter-input-${parameterName}`); + } + + /** + * Get parameter input field + * @param parameterName - The name of the parameter + */ + getParameterInputField(parameterName: string) { + return this.getParameterInput(parameterName).getByTestId('parameter-input-field'); + } + + /** + * Select option in parameter dropdown (improved with Playwright best practices) + * @param parameterName - The parameter name + * @param optionText - The text of the option to select + */ + async selectOptionInParameterDropdown(parameterName: string, optionText: string) { + const dropdown = this.getParameterInput(parameterName); + await dropdown.click(); + + // Wait for dropdown to be visible and select option - following Playwright best practices + await this.page.getByRole('option', { name: optionText }).click(); + } + + /** + * Click parameter dropdown by name (test-id based selector) + * @param parameterName - The parameter name e.g 'httpMethod', 'authentication' + */ + async clickParameterDropdown(parameterName: string): Promise { + await this.clickByTestId(`parameter-input-${parameterName}`); + } + + /** + * Select option from visible dropdown using Playwright role-based selectors + * This follows the pattern used in working n8n tests + * @param optionText - The text of the option to select + */ + async selectFromVisibleDropdown(optionText: string): Promise { + // Use Playwright's role-based selector - this is more reliable than CSS selectors + await this.page.getByRole('option', { name: optionText }).click(); + } + + /** + * Fill parameter input field by parameter name + * @param parameterName - The parameter name e.g 'path', 'url' + * @param value - The value to fill + */ + async fillParameterInputByName(parameterName: string, value: string): Promise { + const input = this.getParameterInputField(parameterName); + await input.click(); + await input.fill(value); + } + + /** + * Click parameter options expansion (e.g. for Response Code) + */ + async clickParameterOptions(): Promise { + await this.page.locator('.param-options').click(); + } + + /** + * Get visible Element UI popper (dropdown/popover) + * Ported from Cypress pattern with Playwright selectors + */ + getVisiblePopper() { + return this.page + .locator('.el-popper') + .filter({ hasNot: this.page.locator('[aria-hidden="true"]') }); + } + + /** + * Wait for parameter dropdown to be visible and ready for interaction + * @param parameterName - The parameter name + */ + async waitForParameterDropdown(parameterName: string): Promise { + const dropdown = this.getParameterInput(parameterName); + await dropdown.waitFor({ state: 'visible' }); + await expect(dropdown).toBeEnabled(); + } + + /** + * Click on a floating node in the NDV (for switching between connected nodes) + * @param nodeName - The name of the node to click + */ + async clickFloatingNode(nodeName: string) { + await this.page.locator(`[data-test-id="floating-node"][data-node-name="${nodeName}"]`).click(); + } + + /** + * Execute the previous node (useful for providing input data) + */ + async executePrevious() { + await this.clickByTestId('execute-previous-node'); + } + + async clickAskAiTab() { + await this.page.locator('#tab-ask-ai').click(); + } + + getAskAiTabPanel() { + return this.page.getByTestId('code-node-tab-ai'); + } + + getAskAiCtaButton() { + return this.page.getByTestId('ask-ai-cta'); + } + + getAskAiPromptInput() { + return this.page.getByTestId('ask-ai-prompt-input'); + } + + getAskAiPromptCounter() { + return this.page.getByTestId('ask-ai-prompt-counter'); + } + + getAskAiCtaTooltipNoInputData() { + return this.page.getByTestId('ask-ai-cta-tooltip-no-input-data'); + } + + getAskAiCtaTooltipNoPrompt() { + return this.page.getByTestId('ask-ai-cta-tooltip-no-prompt'); + } + + getAskAiCtaTooltipPromptTooShort() { + return this.page.getByTestId('ask-ai-cta-tooltip-prompt-too-short'); + } + + getCodeTabPanel() { + return this.page.getByTestId('code-node-tab-code'); + } + + getCodeTab() { + return this.page.locator('#tab-code'); + } + + getCodeEditor() { + return this.getParameterInput('jsCode').locator('.cm-content'); + } + + getLintErrors() { + return this.getParameterInput('jsCode').locator('.cm-lintRange-error'); + } + + getLintTooltip() { + return this.page.locator('.cm-tooltip-lint'); + } + + getPlaceholderText(text: string) { + return this.page.getByText(text); + } + + getHeyAiText() { + return this.page.locator('text=Hey AI, generate JavaScript'); + } + + getCodeGenerationCompletedText() { + return this.page.locator('text=Code generation completed'); + } + + getErrorMessageText(message: string) { + return this.page.locator(`text=${message}`); + } + + async setParameterDropdown(parameterName: string, optionText: string): Promise { + await this.getParameterInput(parameterName).click(); + await this.page.getByRole('option', { name: optionText }).click(); + } + + async setParameterInput(parameterName: string, value: string): Promise { + await this.fillParameterInputByName(parameterName, value); + } + + async setParameterSwitch(parameterName: string, enabled: boolean): Promise { + const switchElement = this.getParameterInput(parameterName).locator('.el-switch'); + const isCurrentlyEnabled = (await switchElement.getAttribute('aria-checked')) === 'true'; + if (isCurrentlyEnabled !== enabled) { + await switchElement.click(); + } + } + + async setMultipleParameters( + parameters: Record, + ): Promise { + for (const [parameterName, value] of Object.entries(parameters)) { + if (typeof value === 'string') { + const parameterType = await this.setupHelper.detectParameterType(parameterName); + if (parameterType === 'dropdown') { + await this.setParameterDropdown(parameterName, value); + } else { + await this.setParameterInput(parameterName, value); + } + } else if (typeof value === 'boolean') { + await this.setParameterSwitch(parameterName, value); + } else if (typeof value === 'number') { + await this.setParameterInput(parameterName, value.toString()); + } + } + } + + async getParameterValue(parameterName: string): Promise { + const parameterType = await this.setupHelper.detectParameterType(parameterName); + + switch (parameterType) { + case 'text': + return await this.getTextParameterValue(parameterName); + case 'dropdown': + return await this.getDropdownParameterValue(parameterName); + case 'switch': + return await this.getSwitchParameterValue(parameterName); + default: + // Fallback for unknown types + return (await this.getParameterInput(parameterName).textContent()) ?? ''; + } + } + + /** + * Get value from a text parameter - simplified approach + */ + private async getTextParameterValue(parameterName: string): Promise { + const parameterContainer = this.getParameterInput(parameterName); + const input = parameterContainer.locator('input').first(); + return await input.inputValue(); + } + + /** + * Get value from a dropdown parameter + */ + private async getDropdownParameterValue(parameterName: string): Promise { + const selectedOption = this.getParameterInput(parameterName).locator('.el-select__tags-text'); + return (await selectedOption.textContent()) ?? ''; + } + + /** + * Get value from a switch parameter + */ + private async getSwitchParameterValue(parameterName: string): Promise { + const switchElement = this.getParameterInput(parameterName).locator('.el-switch'); + const isEnabled = (await switchElement.getAttribute('aria-checked')) === 'true'; + return isEnabled ? 'true' : 'false'; + } + + async validateParameter(parameterName: string, expectedValue: string): Promise { + const actualValue = await this.getParameterValue(parameterName); + if (actualValue !== expectedValue) { + throw new Error( + `Parameter ${parameterName} has value "${actualValue}", expected "${expectedValue}"`, + ); + } + } + + getAssignmentCollectionContainer(paramName: string) { + return this.page.getByTestId(`assignment-collection-${paramName}`); + } + + getAssignmentName(paramName: string, index = 0) { + return this.getAssignmentCollectionContainer(paramName) + .getByTestId('assignment') + .nth(index) + .getByTestId('assignment-name'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/NotificationsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/NotificationsPage 2.ts new file mode 100755 index 00000000..3fe60978 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/NotificationsPage 2.ts @@ -0,0 +1,268 @@ +import type { Locator, Page } from '@playwright/test'; + +export class NotificationsPage { + readonly page: Page; + + constructor(page: Page) { + this.page = page; + } + + /** + * Gets the main container locator for a notification by searching in its title text. + * @param text The text or a regular expression to find within the notification's title. + * @returns A Locator for the notification container element. + */ + getNotificationByTitle(text: string | RegExp): Locator { + return this.page.getByRole('alert').filter({ + has: this.page.locator('.el-notification__title').filter({ hasText: text }), + }); + } + + /** + * Gets the main container locator for a notification by searching in its content/body text. + * This is useful for finding notifications where the detailed message is in the content + * rather than the title (e.g., error messages with detailed descriptions). + * @param text The text or a regular expression to find within the notification's content. + * @returns A Locator for the notification container element. + */ + getNotificationByContent(text: string | RegExp): Locator { + return this.page.getByRole('alert').filter({ + has: this.page.locator('.el-notification__content').filter({ hasText: text }), + }); + } + + /** + * Gets the main container locator for a notification by searching in both title and content. + * This is the most flexible method as it will find notifications regardless of whether + * the text appears in the title or content section. + * @param text The text or a regular expression to find within the notification's title or content. + * @returns A Locator for the notification container element. + */ + getNotificationByTitleOrContent(text: string | RegExp): Locator { + return this.page.getByRole('alert').filter({ hasText: text }); + } + + /** + * Gets the main container locator for a notification by searching in both title and content, + * filtered to a specific node name. This is useful when multiple notifications might be present + * and you want to ensure you're checking the right one for a specific node. + * @param text The text or a regular expression to find within the notification's title or content. + * @param nodeName The name of the node to filter notifications for. + * @returns A Locator for the notification container element. + */ + getNotificationByTitleOrContentForNode(text: string | RegExp, nodeName: string): Locator { + return this.page.getByRole('alert').filter({ hasText: text }).filter({ hasText: nodeName }); + } + + /** + * Clicks the close button on the FIRST notification matching the text. + * Fast execution with short timeouts for snappy notifications. + * @param text The text of the notification to close. + * @param options Optional configuration + */ + async closeNotificationByText( + text: string | RegExp, + options: { timeout?: number } = {}, + ): Promise { + const { timeout = 2000 } = options; + + try { + const notification = this.getNotificationByTitle(text).first(); + await notification.waitFor({ state: 'visible', timeout }); + + const closeBtn = notification.locator('.el-notification__closeBtn'); + await closeBtn.click({ timeout: 500 }); + + // Quick check that it's gone - don't wait long + await notification.waitFor({ state: 'hidden', timeout: 1000 }); + return true; + } catch (error) { + return false; + } + } + + /** + * Closes ALL currently visible notifications that match the given text. + * Uses aggressive polling for fast cleanup. + * @param text The text of the notifications to close. + * @param options Optional configuration + */ + async closeAllNotificationsWithText( + text: string | RegExp, + options: { timeout?: number; maxRetries?: number } = {}, + ): Promise { + const { timeout = 1500, maxRetries = 15 } = options; + let closedCount = 0; + let retries = 0; + + while (retries < maxRetries) { + try { + const notifications = this.getNotificationByTitle(text); + const count = await notifications.count(); + + if (count === 0) { + break; + } + + // Close the first visible notification quickly + const firstNotification = notifications.first(); + if (await firstNotification.isVisible({ timeout: 200 })) { + const closeBtn = firstNotification.locator('.el-notification__closeBtn'); + await closeBtn.click({ timeout: 300 }); + + // Brief wait for disappearance, then continue + await firstNotification.waitFor({ state: 'hidden', timeout: 500 }).catch(() => {}); + closedCount++; + } else { + // If not visible, likely already gone + break; + } + } catch (error) { + // Continue quickly on any error + break; + } + + retries++; + } + + return closedCount; + } + + /** + * Check if a notification is visible based on text. + * Fast check with short timeout. + * @param text The text to search for in notification title. + * @param options Optional configuration + */ + async isNotificationVisible( + text: string | RegExp, + options: { timeout?: number } = {}, + ): Promise { + const { timeout = 500 } = options; + + try { + const notification = this.getNotificationByTitle(text).first(); + await notification.waitFor({ state: 'visible', timeout }); + return true; + } catch { + return false; + } + } + + /** + * Wait for a notification to appear with specific text. + * Reasonable timeout for waiting, but still faster than before. + * @param text The text to search for in notification title. + * @param options Optional configuration + */ + async waitForNotification( + text: string | RegExp, + options: { timeout?: number } = {}, + ): Promise { + const { timeout = 5000 } = options; + + try { + const notification = this.getNotificationByTitle(text).first(); + await notification.waitFor({ state: 'visible', timeout }); + return true; + } catch { + return false; + } + } + + // Wait for notification and then close it + async waitForNotificationAndClose( + text: string | RegExp, + options: { timeout?: number } = {}, + ): Promise { + const { timeout = 3000 } = options; + await this.waitForNotification(text, { timeout }); + await this.closeNotificationByText(text, { timeout }); + return true; + } + + /** + * Get all visible notification texts. + * @returns Array of notification title texts + */ + async getAllNotificationTexts(): Promise { + try { + const titles = this.page.getByRole('alert').locator('.el-notification__title'); + return await titles.allTextContents(); + } catch { + return []; + } + } + + /** + * Wait for all notifications to disappear. + * Fast check with short timeout. + * @param options Optional configuration + */ + async waitForAllNotificationsToDisappear(options: { timeout?: number } = {}): Promise { + const { timeout = 2000 } = options; + + try { + // Wait for no alerts to be visible + await this.page.getByRole('alert').first().waitFor({ + state: 'detached', + timeout, + }); + return true; + } catch { + // Check if any are still visible + const count = await this.getNotificationCount(); + return count === 0; + } + } + + /** + * Get the count of visible notifications. + * @param text Optional text to filter notifications + */ + async getNotificationCount(text?: string | RegExp): Promise { + try { + const notifications = text ? this.getNotificationByTitle(text) : this.page.getByRole('alert'); + return await notifications.count(); + } catch { + return 0; + } + } + + /** + * Quick utility to close any notification and continue. + * Uses the most aggressive timeouts for maximum speed. + * @param text The text of the notification to close. + */ + async quickClose(text: string | RegExp): Promise { + try { + const notification = this.getNotificationByTitle(text).first(); + if (await notification.isVisible({ timeout: 100 })) { + await notification.locator('.el-notification__closeBtn').click({ timeout: 200 }); + } + } catch { + // Silent fail for speed + } + } + + /** + * Nuclear option: Close everything as fast as possible. + * No waiting, no error handling, just close and move on. + */ + async quickCloseAll(): Promise { + try { + const closeButtons = this.page.locator('.el-notification__closeBtn'); + const count = await closeButtons.count(); + + for (let i = 0; i < count; i++) { + try { + await closeButtons.nth(i).click({ timeout: 100 }); + } catch { + // Continue silently + } + } + } catch { + // Silent fail + } + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/NpsSurveyPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/NpsSurveyPage 2.ts new file mode 100755 index 00000000..b8cb417c --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/NpsSurveyPage 2.ts @@ -0,0 +1,57 @@ +import type { Locator, Page } from '@playwright/test'; + +import { BasePage } from './BasePage'; + +export class NpsSurveyPage extends BasePage { + constructor(page: Page) { + super(page); + } + + getNpsSurveyModal(): Locator { + return this.page.getByTestId('nps-survey-modal'); + } + + getNpsSurveyRatings(): Locator { + return this.page.getByTestId('nps-survey-ratings'); + } + + getNpsSurveyFeedback(): Locator { + return this.page.getByTestId('nps-survey-feedback'); + } + + getNpsSurveySubmitButton(): Locator { + return this.page.getByTestId('nps-survey-feedback-button'); + } + + getNpsSurveyCloseButton(): Locator { + return this.getNpsSurveyModal().locator('button.el-drawer__close-btn'); + } + + getRatingButton(rating: number): Locator { + return this.getNpsSurveyRatings().locator('button').nth(rating); + } + + getFeedbackTextarea(): Locator { + return this.getNpsSurveyFeedback().locator('textarea'); + } + + async clickRating(rating: number): Promise { + await this.getRatingButton(rating).click(); + } + + async fillFeedback(feedback: string): Promise { + await this.getFeedbackTextarea().fill(feedback); + } + + async clickSubmitButton(): Promise { + await this.getNpsSurveySubmitButton().click(); + } + + async closeSurvey(): Promise { + await this.getNpsSurveyCloseButton().click(); + } + + async getRatingButtonCount(): Promise { + return await this.getNpsSurveyRatings().locator('button').count(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/ProjectSettingsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/ProjectSettingsPage 2.ts new file mode 100755 index 00000000..81885b53 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/ProjectSettingsPage 2.ts @@ -0,0 +1,11 @@ +import { BasePage } from './BasePage'; + +export class ProjectSettingsPage extends BasePage { + async fillProjectName(name: string) { + await this.page.getByTestId('project-settings-name-input').locator('input').fill(name); + } + + async clickSaveButton() { + await this.clickButtonByName('Save'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/SettingsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/SettingsPage 2.ts new file mode 100755 index 00000000..35e80f24 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/SettingsPage 2.ts @@ -0,0 +1,15 @@ +import { BasePage } from './BasePage'; + +export class SettingsPage extends BasePage { + getMenuItems() { + return this.page.getByTestId('menu-item'); + } + + getMenuItem(id: string) { + return this.page.getByTestId('menu-item').getByTestId(id); + } + + async goToSettings() { + await this.page.goto('/settings'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/SidebarPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/SidebarPage 2.ts new file mode 100755 index 00000000..e11b1f64 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/SidebarPage 2.ts @@ -0,0 +1,46 @@ +import type { Locator, Page } from '@playwright/test'; + +export class SidebarPage { + readonly page: Page; + + constructor(page: Page) { + this.page = page; + } + + async clickAddProjectButton() { + await this.page.getByTestId('project-plus-button').click(); + } + + async universalAdd() { + await this.page.getByTestId('universal-add').click(); + } + + async addProjectFromUniversalAdd() { + await this.universalAdd(); + await this.page.getByTestId('navigation-menu-item').filter({ hasText: 'Project' }).click(); + } + + async addWorkflowFromUniversalAdd(projectName: string) { + await this.universalAdd(); + await this.page.getByTestId('universal-add').getByText('Workflow').click(); + await this.page.getByTestId('universal-add').getByRole('link', { name: projectName }).click(); + } + + async openNewCredentialDialogForProject(projectName: string) { + await this.universalAdd(); + await this.page.getByTestId('universal-add').getByText('Credential').click(); + await this.page.getByTestId('universal-add').getByRole('link', { name: projectName }).click(); + } + + getProjectMenuItems(): Locator { + return this.page.getByTestId('project-menu-item'); + } + + async clickProjectMenuItem(projectName: string) { + await this.getProjectMenuItems().filter({ hasText: projectName }).click(); + } + + getAddFirstProjectButton(): Locator { + return this.page.getByTestId('add-first-project-button'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/VersionsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/VersionsPage 2.ts new file mode 100755 index 00000000..3e55f467 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/VersionsPage 2.ts @@ -0,0 +1,35 @@ +import { BasePage } from './BasePage'; + +export class VersionsPage extends BasePage { + getVersionUpdatesPanelOpenButton() { + return this.page.getByTestId('version-update-next-versions-link'); + } + + getVersionUpdatesPanel() { + return this.page.getByTestId('version-updates-panel'); + } + + getVersionUpdatesPanelCloseButton() { + return this.getVersionUpdatesPanel().getByRole('button', { name: 'Close' }); + } + + getVersionCard() { + return this.page.getByTestId('version-card'); + } + + getWhatsNewMenuItem() { + return this.page.getByTestId('menu-item').getByTestId('whats-new'); + } + + async openWhatsNewMenu() { + await this.getWhatsNewMenuItem().click(); + } + + async openVersionUpdatesPanel() { + await this.getVersionUpdatesPanelOpenButton().click(); + } + + async closeVersionUpdatesPanel() { + await this.getVersionUpdatesPanelCloseButton().click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowActivationModal 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowActivationModal 2.ts new file mode 100755 index 00000000..f1cd78cc --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowActivationModal 2.ts @@ -0,0 +1,31 @@ +import type { Locator } from '@playwright/test'; + +import { BasePage } from './BasePage'; + +export class WorkflowActivationModal extends BasePage { + getModal(): Locator { + return this.page.getByTestId('activation-modal'); + } + + getDontShowAgainCheckbox(): Locator { + return this.getModal().getByText("Don't show again"); + } + + getGotItButton(): Locator { + return this.getModal().getByRole('button', { name: 'Got it' }); + } + + async close(): Promise { + await this.getDontShowAgainCheckbox().click(); + + await this.getGotItButton().click(); + } + + async clickDontShowAgain(): Promise { + await this.getDontShowAgainCheckbox().click(); + } + + async clickGotIt(): Promise { + await this.getGotItButton().click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowSettingsModal 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowSettingsModal 2.ts new file mode 100755 index 00000000..6485b9d0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowSettingsModal 2.ts @@ -0,0 +1,39 @@ +import type { Locator } from '@playwright/test'; + +import { BasePage } from './BasePage'; + +export class WorkflowSettingsModal extends BasePage { + getModal(): Locator { + return this.page.getByTestId('workflow-settings-dialog'); + } + + getWorkflowMenu(): Locator { + return this.page.getByTestId('workflow-menu'); + } + + getSettingsMenuItem(): Locator { + return this.page.getByTestId('workflow-menu-item-settings'); + } + + getErrorWorkflowField(): Locator { + return this.page.getByTestId('workflow-settings-error-workflow'); + } + + getSaveButton(): Locator { + return this.page.getByRole('button', { name: 'Save' }); + } + + async open(): Promise { + await this.getWorkflowMenu().click(); + await this.getSettingsMenuItem().click(); + } + + async clickSave(): Promise { + await this.getSaveButton().click(); + } + + async selectErrorWorkflow(workflowName: string): Promise { + await this.getErrorWorkflowField().click(); + await this.page.getByRole('option', { name: workflowName }).first().click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowSharingModal 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowSharingModal 2.ts new file mode 100755 index 00000000..f791ebb4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowSharingModal 2.ts @@ -0,0 +1,27 @@ +import { BasePage } from './BasePage'; + +export class WorkflowSharingModal extends BasePage { + getModal() { + return this.page.getByTestId('workflowShare-modal'); + } + + async waitForModal() { + await this.getModal().waitFor({ state: 'visible', timeout: 5000 }); + } + + async addUser(email: string) { + await this.clickByTestId('project-sharing-select'); + await this.page + .locator('.el-select-dropdown__item') + .filter({ hasText: email.toLowerCase() }) + .click(); + } + + async save() { + await this.clickByTestId('workflow-sharing-modal-save-button'); + } + + async close() { + await this.getModal().locator('.el-dialog__close').first().click(); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowsPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowsPage 2.ts new file mode 100755 index 00000000..ebe6accb --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/WorkflowsPage 2.ts @@ -0,0 +1,159 @@ +import type { Locator } from '@playwright/test'; + +import { BasePage } from './BasePage'; + +export class WorkflowsPage extends BasePage { + async clickAddFirstProjectButton() { + await this.clickByTestId('add-first-project-button'); + } + + async clickAddProjectButton() { + await this.clickByTestId('project-plus-button'); + } + + /** + * This is the add workflow button on the workflows page, visible when there are already workflows. + */ + async clickAddWorkflowButton() { + await this.clickByTestId('add-resource-workflow'); + } + + /** + * This is the new workflow button on the workflows page, visible when there are no workflows. + */ + async clickNewWorkflowCard() { + await this.clickByTestId('new-workflow-card'); + } + + getNewWorkflowCard() { + return this.page.getByTestId('new-workflow-card'); + } + + async clearSearch() { + await this.clickByTestId('resources-list-search'); + await this.page.getByTestId('resources-list-search').clear(); + } + + getProjectName() { + return this.page.getByTestId('project-name'); + } + + getSearchBar() { + return this.page.getByTestId('resources-list-search'); + } + + getWorkflowFilterButton() { + return this.page.getByTestId('workflow-filter-button'); + } + + getWorkflowTagsDropdown() { + return this.page.getByTestId('workflow-tags-dropdown'); + } + + getWorkflowTagItem(tagName: string) { + return this.page.getByTestId('workflow-tag-item').filter({ hasText: tagName }); + } + + getWorkflowArchivedCheckbox() { + return this.page.getByTestId('workflow-archived-checkbox'); + } + + async unarchiveWorkflow(workflowItem: Locator) { + await workflowItem.getByTestId('workflow-card-actions').click(); + await this.page.getByRole('menuitem', { name: 'Unarchive' }).click(); + } + + async deleteWorkflow(workflowItem: Locator) { + await workflowItem.getByTestId('workflow-card-actions').click(); + await this.page.getByRole('menuitem', { name: 'Delete' }).click(); + await this.page.getByRole('button', { name: 'delete' }).click(); + } + + async searchWorkflows(searchTerm: string) { + await this.clickByTestId('resources-list-search'); + await this.fillByTestId('resources-list-search', searchTerm); + } + + getWorkflowItems() { + return this.page.getByTestId('resources-list-item-workflow'); + } + + getWorkflowByName(name: string) { + return this.getWorkflowItems().filter({ hasText: name }); + } + + async shareWorkflow(workflowName: string) { + const workflow = this.getWorkflowByName(workflowName); + await workflow.getByTestId('workflow-card-actions').click(); + await this.page.getByRole('menuitem', { name: 'Share...' }).click(); + } + + getArchiveMenuItem() { + return this.page.getByRole('menuitem', { name: 'Archive' }); + } + + async archiveWorkflow(workflowItem: Locator) { + await workflowItem.getByTestId('workflow-card-actions').click(); + await this.getArchiveMenuItem().click(); + } + + getFiltersButton() { + return this.page.getByTestId('resources-list-filters-trigger'); + } + + async openFilters() { + await this.clickByTestId('resources-list-filters-trigger'); + } + + async closeFilters() { + await this.clickByTestId('resources-list-filters-trigger'); + } + + getShowArchivedCheckbox() { + return this.page.getByTestId('show-archived-checkbox'); + } + + async toggleShowArchived() { + await this.openFilters(); + await this.getShowArchivedCheckbox().locator('span').nth(1).click(); + await this.closeFilters(); + } + + getStatusDropdown() { + return this.page.getByTestId('status-dropdown'); + } + + /** + * Select a status filter (for active/deactivated workflows) + * @param status - 'All', 'Active', or 'Deactivated' + */ + async selectStatusFilter(status: 'All' | 'Active' | 'Deactivated') { + await this.openFilters(); + await this.getStatusDropdown().getByRole('combobox', { name: 'Select' }).click(); + if (status === 'All') { + await this.page.getByRole('option', { name: 'All' }).click(); + } else { + await this.page.getByText(status, { exact: true }).click(); + } + await this.closeFilters(); + } + + getTagsDropdown() { + return this.page.getByTestId('tags-dropdown'); + } + + async filterByTags(tags: string[]) { + await this.openFilters(); + await this.clickByTestId('tags-dropdown'); + + for (const tag of tags) { + await this.page.getByRole('option', { name: tag }).locator('span').click(); + } + + await this.closeFilters(); + } + + async filterByTag(tag: string) { + await this.filterByTags([tag]); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/pages/n8nPage 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/pages/n8nPage 2.ts new file mode 100755 index 00000000..560ac707 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/pages/n8nPage 2.ts @@ -0,0 +1,95 @@ +import type { Page } from '@playwright/test'; + +import { AIAssistantPage } from './AIAssistantPage'; +import { BecomeCreatorCTAPage } from './BecomeCreatorCTAPage'; +import { CanvasPage } from './CanvasPage'; +import { CredentialsPage } from './CredentialsPage'; +import { ExecutionsPage } from './ExecutionsPage'; +import { IframePage } from './IframePage'; +import { NodeDetailsViewPage } from './NodeDetailsViewPage'; +import { NotificationsPage } from './NotificationsPage'; +import { NpsSurveyPage } from './NpsSurveyPage'; +import { ProjectSettingsPage } from './ProjectSettingsPage'; +import { SettingsPage } from './SettingsPage'; +import { SidebarPage } from './SidebarPage'; +import { VersionsPage } from './VersionsPage'; +import { WorkflowActivationModal } from './WorkflowActivationModal'; +import { WorkflowSettingsModal } from './WorkflowSettingsModal'; +import { WorkflowSharingModal } from './WorkflowSharingModal'; +import { WorkflowsPage } from './WorkflowsPage'; +import { CanvasComposer } from '../composables/CanvasComposer'; +import { ProjectComposer } from '../composables/ProjectComposer'; +import { TestEntryComposer } from '../composables/TestEntryComposer'; +import { WorkflowComposer } from '../composables/WorkflowComposer'; +import type { ApiHelpers } from '../services/api-helper'; + +// eslint-disable-next-line @typescript-eslint/naming-convention +export class n8nPage { + readonly page: Page; + readonly api: ApiHelpers; + + // Pages + readonly aiAssistant: AIAssistantPage; + readonly becomeCreatorCTA: BecomeCreatorCTAPage; + readonly canvas: CanvasPage; + + readonly iframe: IframePage; + readonly ndv: NodeDetailsViewPage; + readonly npsSurvey: NpsSurveyPage; + readonly projectSettings: ProjectSettingsPage; + readonly settings: SettingsPage; + readonly versions: VersionsPage; + readonly workflows: WorkflowsPage; + readonly notifications: NotificationsPage; + readonly credentials: CredentialsPage; + readonly executions: ExecutionsPage; + readonly sideBar: SidebarPage; + + // Modals + readonly workflowActivationModal: WorkflowActivationModal; + readonly workflowSettingsModal: WorkflowSettingsModal; + readonly workflowSharingModal: WorkflowSharingModal; + + // Composables + readonly workflowComposer: WorkflowComposer; + readonly projectComposer: ProjectComposer; + readonly canvasComposer: CanvasComposer; + readonly start: TestEntryComposer; + + constructor(page: Page, api: ApiHelpers) { + this.page = page; + this.api = api; + + // Pages + this.aiAssistant = new AIAssistantPage(page); + this.becomeCreatorCTA = new BecomeCreatorCTAPage(page); + this.canvas = new CanvasPage(page); + + this.iframe = new IframePage(page); + this.ndv = new NodeDetailsViewPage(page); + this.npsSurvey = new NpsSurveyPage(page); + this.projectSettings = new ProjectSettingsPage(page); + this.settings = new SettingsPage(page); + this.versions = new VersionsPage(page); + this.workflows = new WorkflowsPage(page); + this.notifications = new NotificationsPage(page); + this.credentials = new CredentialsPage(page); + this.executions = new ExecutionsPage(page); + this.sideBar = new SidebarPage(page); + this.workflowSharingModal = new WorkflowSharingModal(page); + + // Modals + this.workflowActivationModal = new WorkflowActivationModal(page); + this.workflowSettingsModal = new WorkflowSettingsModal(page); + + // Composables + this.workflowComposer = new WorkflowComposer(this); + this.projectComposer = new ProjectComposer(this); + this.canvasComposer = new CanvasComposer(this); + this.start = new TestEntryComposer(this); + } + + async goHome() { + await this.page.goto('/'); + } +} diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/playwright.config 2.ts b/n8n-n8n-1.109.2/packages/testing/playwright/playwright.config 2.ts new file mode 100755 index 00000000..1afb317a --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/playwright.config 2.ts @@ -0,0 +1,74 @@ +/* eslint-disable import-x/no-default-export */ +import { currentsReporter } from '@currents/playwright'; +import { defineConfig } from '@playwright/test'; +import os from 'os'; +import path from 'path'; + +import currentsConfig from './currents.config'; +import { getProjects } from './playwright-projects'; +import { getPortFromUrl } from './utils/url-helper'; + +const IS_CI = !!process.env.CI; + +const MACBOOK_WINDOW_SIZE = { width: 1536, height: 960 }; + +const USER_FOLDER = path.join(os.tmpdir(), `n8n-main-${Date.now()}`); +// Calculate workers based on environment +// The amount of workers to run, limited to 6 as higher causes instability in the local server +// Use half the CPUs in local, full in CI (CI has no other processes so we can use more) +const CPU_COUNT = os.cpus().length; +const LOCAL_WORKERS = Math.min(6, Math.floor(CPU_COUNT / 2)); +const CI_WORKERS = CPU_COUNT; +const WORKERS = IS_CI ? CI_WORKERS : LOCAL_WORKERS; + +export default defineConfig({ + globalSetup: './global-setup.ts', + forbidOnly: IS_CI, + retries: IS_CI ? 2 : 0, + workers: WORKERS, + timeout: 60000, + expect: { + timeout: 10000, + }, + projects: getProjects(), + + // We use this if an n8n url is passed in. If the server is already running, we reuse it. + webServer: process.env.N8N_BASE_URL + ? { + command: 'cd .. && pnpm start', + url: `${process.env.N8N_BASE_URL}/favicon.ico`, + timeout: 20000, + reuseExistingServer: true, + env: { + DB_SQLITE_POOL_SIZE: '40', + E2E_TESTS: 'true', + N8N_PORT: getPortFromUrl(process.env.N8N_BASE_URL), + N8N_USER_FOLDER: USER_FOLDER, + N8N_LOG_LEVEL: 'debug', + N8N_METRICS: 'true', + }, + } + : undefined, + + use: { + trace: 'on', + video: 'on', + screenshot: 'on', + testIdAttribute: 'data-test-id', + headless: process.env.SHOW_BROWSER !== 'true', + viewport: MACBOOK_WINDOW_SIZE, + actionTimeout: 20000, // TODO: We might need to make this dynamic for container tests if we have low resource containers etc + navigationTimeout: 10000, + }, + + reporter: IS_CI + ? [ + ['list'], + ['github'], + ['junit', { outputFile: process.env.PLAYWRIGHT_JUNIT_OUTPUT_NAME ?? 'results.xml' }], + ['html', { open: 'never' }], + ['json', { outputFile: 'test-results.json' }], + currentsReporter(currentsConfig), + ] + : [['html']], +}); diff --git a/n8n-n8n-1.109.2/packages/testing/playwright/tsconfig 2.json b/n8n-n8n-1.109.2/packages/testing/playwright/tsconfig 2.json new file mode 100755 index 00000000..74c428b6 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/testing/playwright/tsconfig 2.json @@ -0,0 +1,12 @@ +{ + "extends": "../../../tsconfig.json", + "compilerOptions": { + "sourceMap": false, + "declaration": false, + "lib": ["esnext", "dom"], + "types": ["@playwright/test", "node"] + }, + "include": ["**/*.ts"], + "exclude": ["**/dist/**/*", "**/node_modules/**/*"], + "references": [{ "path": "../../workflow/tsconfig.build.esm.json" }] +} diff --git a/n8n-n8n-1.109.2/packages/workflow/README 2.md b/n8n-n8n-1.109.2/packages/workflow/README 2.md new file mode 100755 index 00000000..e76b4283 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/workflow/README 2.md @@ -0,0 +1,13 @@ +![n8n.io - Workflow Automation](https://user-images.githubusercontent.com/65276001/173571060-9f2f6d7b-bac0-43b6-bdb2-001da9694058.png) + +# n8n-workflow + +Workflow base code for n8n + +``` +npm install n8n-workflow +``` + +## License + +You can find the license information [here](https://github.com/n8n-io/n8n/blob/master/README.md#license) diff --git a/n8n-n8n-1.109.2/packages/workflow/jest.config 2.js b/n8n-n8n-1.109.2/packages/workflow/jest.config 2.js new file mode 100755 index 00000000..8b80b8e4 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/workflow/jest.config 2.js @@ -0,0 +1,4 @@ +/** @type {import('jest').Config} */ +module.exports = { + ...require('../../jest.config'), +}; diff --git a/n8n-n8n-1.109.2/packages/workflow/package 2.json b/n8n-n8n-1.109.2/packages/workflow/package 2.json new file mode 100755 index 00000000..02a44ab0 --- /dev/null +++ b/n8n-n8n-1.109.2/packages/workflow/package 2.json @@ -0,0 +1,71 @@ +{ + "name": "n8n-workflow", + "version": "1.106.0", + "description": "Workflow base code of n8n", + "types": "dist/esm/index.d.ts", + "module": "dist/esm/index.js", + "main": "dist/cjs/index.js", + "exports": { + ".": { + "types": "./dist/esm/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js" + }, + "./common": { + "types": "./dist/esm/common/index.d.ts", + "import": "./dist/esm/common/index.js", + "require": "./dist/cjs/common/index.js" + }, + "./*": "./*" + }, + "scripts": { + "clean": "rimraf dist .turbo", + "dev": "pnpm watch", + "typecheck": "tsc --noEmit", + "build:vite": "vite build", + "build": "tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json", + "format": "biome format --write .", + "format:check": "biome ci .", + "lint": "eslint src --quiet", + "lint:fix": "eslint src --fix", + "watch": "tsc --build tsconfig.build.esm.json tsconfig.build.cjs.json --watch", + "test": "vitest run", + "test:dev": "vitest --watch" + }, + "files": [ + "dist/**/*" + ], + "devDependencies": { + "@langchain/core": "catalog:", + "@n8n/config": "workspace:*", + "@n8n/typescript-config": "workspace:*", + "@n8n/vitest-config": "workspace:*", + "@types/express": "catalog:", + "@types/jmespath": "^0.15.0", + "@types/lodash": "catalog:", + "@types/luxon": "3.2.0", + "@types/md5": "^2.3.5", + "@types/xml2js": "catalog:", + "vitest": "catalog:", + "vitest-mock-extended": "catalog:" + }, + "dependencies": { + "@n8n/errors": "workspace:^", + "@n8n/tournament": "1.0.6", + "ast-types": "0.15.2", + "callsites": "catalog:", + "esprima-next": "5.8.4", + "form-data": "catalog:", + "jmespath": "0.16.0", + "js-base64": "catalog:", + "jssha": "3.3.1", + "lodash": "catalog:", + "luxon": "catalog:", + "md5": "2.3.0", + "recast": "0.22.0", + "title-case": "3.0.3", + "transliteration": "2.3.5", + "xml2js": "catalog:", + "zod": "catalog:" + } +} diff --git a/n8n-n8n-1.109.2/packages/workflow/src/errors/abstract/execution-base.error.ts b/n8n-n8n-1.109.2/packages/workflow/src/errors/abstract/execution-base.error.ts deleted file mode 100755 index 93f86cbd..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/src/errors/abstract/execution-base.error.ts +++ /dev/null @@ -1,52 +0,0 @@ -import { ApplicationError, type ReportingOptions } from '@n8n/errors'; - -import type { Functionality, IDataObject, JsonObject } from '../../interfaces'; - -interface ExecutionBaseErrorOptions extends ReportingOptions { - cause?: Error; - errorResponse?: JsonObject; -} - -export abstract class ExecutionBaseError extends ApplicationError { - description: string | null | undefined; - - override cause?: Error; - - errorResponse?: JsonObject; - - timestamp: number; - - context: IDataObject = {}; - - lineNumber: number | undefined; - - functionality: Functionality = 'regular'; - - constructor(message: string, options: ExecutionBaseErrorOptions = {}) { - super(message, options); - - this.name = this.constructor.name; - this.timestamp = Date.now(); - - const { cause, errorResponse } = options; - if (cause instanceof ExecutionBaseError) { - this.context = cause.context; - } else if (cause && !(cause instanceof Error)) { - this.cause = cause; - } - - if (errorResponse) this.errorResponse = errorResponse; - } - - toJSON?() { - return { - message: this.message, - lineNumber: this.lineNumber, - timestamp: this.timestamp, - name: this.name, - description: this.description, - context: this.context, - cause: this.cause, - }; - } -} diff --git a/n8n-n8n-1.109.2/packages/workflow/src/errors/abstract/node.error.ts b/n8n-n8n-1.109.2/packages/workflow/src/errors/abstract/node.error.ts deleted file mode 100755 index 8d0f9360..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/src/errors/abstract/node.error.ts +++ /dev/null @@ -1,187 +0,0 @@ -import { ExecutionBaseError } from './execution-base.error'; -import type { IDataObject, INode, JsonObject } from '../../interfaces'; -import { isTraversableObject, jsonParse } from '../../utils'; - -/** - * Descriptive messages for common errors. - */ -const COMMON_ERRORS: IDataObject = { - // nodeJS errors - ECONNREFUSED: 'The service refused the connection - perhaps it is offline', - ECONNRESET: - 'The connection to the server was closed unexpectedly, perhaps it is offline. You can retry the request immediately or wait and retry later.', - ENOTFOUND: - 'The connection cannot be established, this usually occurs due to an incorrect host (domain) value', - ETIMEDOUT: - "The connection timed out, consider setting the 'Retry on Fail' option in the node settings", - ERRADDRINUSE: - 'The port is already occupied by some other application, if possible change the port or kill the application that is using it', - EADDRNOTAVAIL: 'The address is not available, ensure that you have the right IP address', - ECONNABORTED: 'The connection was aborted, perhaps the server is offline', - EHOSTUNREACH: 'The host is unreachable, perhaps the server is offline', - EAI_AGAIN: 'The DNS server returned an error, perhaps the server is offline', - ENOENT: 'The file or directory does not exist', - EISDIR: 'The file path was expected but the given path is a directory', - ENOTDIR: 'The directory path was expected but the given path is a file', - EACCES: 'Forbidden by access permissions, make sure you have the right permissions', - EEXIST: 'The file or directory already exists', - EPERM: 'Operation not permitted, make sure you have the right permissions', - // other errors - GETADDRINFO: 'The server closed the connection unexpectedly', -}; - -/** - * Base class for specific NodeError-types, with functionality for finding - * a value recursively inside an error object. - */ -export abstract class NodeError extends ExecutionBaseError { - messages: string[] = []; - - constructor( - readonly node: INode, - error: Error | JsonObject, - ) { - const isError = error instanceof Error; - const message = isError ? error.message : ''; - const options = isError ? { cause: error } : { errorResponse: error }; - super(message, options); - - if (error instanceof NodeError) { - this.tags.reWrapped = true; - } - } - - /** - * Finds property through exploration based on potential keys and traversal keys. - * Depth-first approach. - * - * This method iterates over `potentialKeys` and, if the value at the key is a - * truthy value, the type of the value is checked: - * (1) if a string or number, the value is returned as a string; or - * (2) if an array, - * its string or number elements are collected as a long string, - * its object elements are traversed recursively (restart this function - * with each object as a starting point), or - * (3) if it is an object, it traverses the object and nested ones recursively - * based on the `potentialKeys` and returns a string if found. - * - * If nothing found via `potentialKeys` this method iterates over `traversalKeys` and - * if the value at the key is a traversable object, it restarts with the object as the - * new starting point (recursion). - * If nothing found for any of the `traversalKeys`, exploration continues with remaining - * `traversalKeys`. - * - * Otherwise, if all the paths have been exhausted and no value is eligible, `null` is - * returned. - * - */ - protected findProperty( - jsonError: JsonObject, - potentialKeys: string[], - traversalKeys: string[] = [], - ): string | null { - for (const key of potentialKeys) { - let value = jsonError[key]; - if (value) { - if (typeof value === 'string') { - try { - value = jsonParse(value); - } catch (error) { - return value as string; - } - if (typeof value === 'string') return value; - } - if (typeof value === 'number') return value.toString(); - if (Array.isArray(value)) { - const resolvedErrors: string[] = value - - .map((jsonError) => { - if (typeof jsonError === 'string') return jsonError; - if (typeof jsonError === 'number') return jsonError.toString(); - if (isTraversableObject(jsonError)) { - return this.findProperty(jsonError, potentialKeys); - } - return null; - }) - .filter((errorValue): errorValue is string => errorValue !== null); - - if (resolvedErrors.length === 0) { - return null; - } - return resolvedErrors.join(' | '); - } - if (isTraversableObject(value)) { - const property = this.findProperty(value, potentialKeys); - if (property) { - return property; - } - } - } - } - - for (const key of traversalKeys) { - const value = jsonError[key]; - if (isTraversableObject(value)) { - const property = this.findProperty(value, potentialKeys, traversalKeys); - if (property) { - return property; - } - } - } - - return null; - } - - /** - * Preserve the original error message before setting the new one - */ - protected addToMessages(message: string): void { - if (message && !this.messages.includes(message)) { - this.messages.push(message); - } - } - - /** - * Set descriptive error message if code is provided or if message contains any of the common errors, - * update description to include original message plus the description - */ - protected setDescriptiveErrorMessage( - message: string, - messages: string[], - code?: string | null, - messageMapping?: { [key: string]: string }, - ): [string, string[]] { - let newMessage = message; - - if (messageMapping) { - for (const [mapKey, mapMessage] of Object.entries(messageMapping)) { - if ((message || '').toUpperCase().includes(mapKey.toUpperCase())) { - newMessage = mapMessage; - messages.push(message); - break; - } - } - if (newMessage !== message) { - return [newMessage, messages]; - } - } - - // if code is provided and it is in the list of common errors set the message and return early - if (code && typeof code === 'string' && COMMON_ERRORS[code.toUpperCase()]) { - newMessage = COMMON_ERRORS[code] as string; - messages.push(message); - return [newMessage, messages]; - } - - // check if message contains any of the common errors and set the message and description - for (const [errorCode, errorDescriptiveMessage] of Object.entries(COMMON_ERRORS)) { - if ((message || '').toUpperCase().includes(errorCode.toUpperCase())) { - newMessage = errorDescriptiveMessage as string; - messages.push(message); - break; - } - } - - return [newMessage, messages]; - } -} diff --git a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/base.error.ts b/n8n-n8n-1.109.2/packages/workflow/src/errors/base/base.error.ts deleted file mode 100755 index f460688b..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/base.error.ts +++ /dev/null @@ -1,58 +0,0 @@ -import type { Event } from '@sentry/node'; -import callsites from 'callsites'; - -import type { ErrorTags, ErrorLevel, ReportingOptions } from '@n8n/errors'; - -export type BaseErrorOptions = { description?: string | undefined | null } & ErrorOptions & - ReportingOptions; -/** - * Base class for all errors - */ -export abstract class BaseError extends Error { - /** - * Error level. Defines which level the error should be logged/reported - * @default 'error' - */ - level: ErrorLevel; - - /** - * Whether the error should be reported to Sentry. - * @default true - */ - readonly shouldReport: boolean; - - readonly description: string | null | undefined; - - readonly tags: ErrorTags; - - readonly extra?: Event['extra']; - - readonly packageName?: string; - - constructor( - message: string, - { - level = 'error', - description, - shouldReport, - tags = {}, - extra, - ...rest - }: BaseErrorOptions = {}, - ) { - super(message, rest); - - this.level = level; - this.shouldReport = shouldReport ?? (level === 'error' || level === 'fatal'); - this.description = description; - this.tags = tags; - this.extra = extra; - - try { - const filePath = callsites()[2].getFileName() ?? ''; - const match = /packages\/([^\/]+)\//.exec(filePath)?.[1]; - - if (match) this.tags.packageName = match; - } catch {} - } -} diff --git a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/operational.error.ts b/n8n-n8n-1.109.2/packages/workflow/src/errors/base/operational.error.ts deleted file mode 100755 index c67848dc..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/operational.error.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { BaseErrorOptions } from './base.error'; -import { BaseError } from './base.error'; - -export type OperationalErrorOptions = Omit & { - level?: 'info' | 'warning' | 'error'; -}; - -/** - * Error that indicates a transient issue, like a network request failing, - * a database query timing out, etc. These are expected to happen, are - * transient by nature and should be handled gracefully. - * - * Default level: warning - */ -export class OperationalError extends BaseError { - constructor(message: string, opts: OperationalErrorOptions = {}) { - opts.level = opts.level ?? 'warning'; - - super(message, opts); - } -} diff --git a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/unexpected.error.ts b/n8n-n8n-1.109.2/packages/workflow/src/errors/base/unexpected.error.ts deleted file mode 100755 index a2045690..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/unexpected.error.ts +++ /dev/null @@ -1,21 +0,0 @@ -import type { BaseErrorOptions } from './base.error'; -import { BaseError } from './base.error'; - -export type UnexpectedErrorOptions = Omit & { - level?: 'error' | 'fatal'; -}; - -/** - * Error that indicates something is wrong in the code: logic mistakes, - * unhandled cases, assertions that fail. These are not recoverable and - * should be brought to developers' attention. - * - * Default level: error - */ -export class UnexpectedError extends BaseError { - constructor(message: string, opts: UnexpectedErrorOptions = {}) { - opts.level = opts.level ?? 'error'; - - super(message, opts); - } -} diff --git a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/user.error.ts b/n8n-n8n-1.109.2/packages/workflow/src/errors/base/user.error.ts deleted file mode 100755 index 725f4169..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/src/errors/base/user.error.ts +++ /dev/null @@ -1,24 +0,0 @@ -import type { BaseErrorOptions } from './base.error'; -import { BaseError } from './base.error'; - -export type UserErrorOptions = Omit & { - level?: 'info' | 'warning'; - description?: string | null | undefined; -}; - -/** - * Error that indicates the user performed an action that caused an error. - * E.g. provided invalid input, tried to access a resource they’re not - * authorized to, or violates a business rule. - * - * Default level: info - */ -export class UserError extends BaseError { - declare readonly description: string | null | undefined; - - constructor(message: string, opts: UserErrorOptions = {}) { - opts.level = opts.level ?? 'info'; - - super(message, opts); - } -} diff --git a/n8n-n8n-1.109.2/packages/workflow/test/errors/base/operational.error.test.ts b/n8n-n8n-1.109.2/packages/workflow/test/errors/base/operational.error.test.ts deleted file mode 100755 index 5aa60b72..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/test/errors/base/operational.error.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { BaseError } from '../../../src/errors/base/base.error'; -import { OperationalError } from '../../../src/errors/base/operational.error'; - -describe('OperationalError', () => { - it('should be an instance of OperationalError', () => { - const error = new OperationalError('test'); - expect(error).toBeInstanceOf(OperationalError); - }); - - it('should be an instance of BaseError', () => { - const error = new OperationalError('test'); - expect(error).toBeInstanceOf(BaseError); - }); - - it('should have correct defaults', () => { - const error = new OperationalError('test'); - expect(error.level).toBe('warning'); - expect(error.shouldReport).toBe(false); - }); - - it('should allow overriding the default level and shouldReport', () => { - const error = new OperationalError('test', { level: 'error', shouldReport: true }); - expect(error.level).toBe('error'); - expect(error.shouldReport).toBe(true); - }); -}); diff --git a/n8n-n8n-1.109.2/packages/workflow/test/errors/base/unexpected.error.test.ts b/n8n-n8n-1.109.2/packages/workflow/test/errors/base/unexpected.error.test.ts deleted file mode 100755 index 3582fc8d..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/test/errors/base/unexpected.error.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { BaseError } from '../../../src/errors/base/base.error'; -import { UnexpectedError } from '../../../src/errors/base/unexpected.error'; - -describe('UnexpectedError', () => { - it('should be an instance of UnexpectedError', () => { - const error = new UnexpectedError('test'); - expect(error).toBeInstanceOf(UnexpectedError); - }); - - it('should be an instance of BaseError', () => { - const error = new UnexpectedError('test'); - expect(error).toBeInstanceOf(BaseError); - }); - - it('should have correct defaults', () => { - const error = new UnexpectedError('test'); - expect(error.level).toBe('error'); - expect(error.shouldReport).toBe(true); - }); - - it('should allow overriding the default level and shouldReport', () => { - const error = new UnexpectedError('test', { level: 'fatal', shouldReport: false }); - expect(error.level).toBe('fatal'); - expect(error.shouldReport).toBe(false); - }); -}); diff --git a/n8n-n8n-1.109.2/packages/workflow/test/errors/base/user.error.test.ts b/n8n-n8n-1.109.2/packages/workflow/test/errors/base/user.error.test.ts deleted file mode 100755 index dfc56f25..00000000 --- a/n8n-n8n-1.109.2/packages/workflow/test/errors/base/user.error.test.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { BaseError } from '../../../src/errors/base/base.error'; -import { UserError } from '../../../src/errors/base/user.error'; - -describe('UserError', () => { - it('should be an instance of UserError', () => { - const error = new UserError('test'); - expect(error).toBeInstanceOf(UserError); - }); - - it('should be an instance of BaseError', () => { - const error = new UserError('test'); - expect(error).toBeInstanceOf(BaseError); - }); - - it('should have correct defaults', () => { - const error = new UserError('test'); - expect(error.level).toBe('info'); - expect(error.shouldReport).toBe(false); - }); - - it('should allow overriding the default level and shouldReport', () => { - const error = new UserError('test', { level: 'warning', shouldReport: true }); - expect(error.level).toBe('warning'); - expect(error.shouldReport).toBe(true); - }); -}); diff --git a/n8n-n8n-1.109.2/packages/workflow/vitest.config 2.ts b/n8n-n8n-1.109.2/packages/workflow/vitest.config 2.ts new file mode 100755 index 00000000..7042490e --- /dev/null +++ b/n8n-n8n-1.109.2/packages/workflow/vitest.config 2.ts @@ -0,0 +1,3 @@ +import { createVitestConfig } from '@n8n/vitest-config/node'; + +export default createVitestConfig({ include: ['test/**/*.test.ts'] }); diff --git a/n8n-n8n-1.109.2/patches/@lezer__highlight 2.patch b/n8n-n8n-1.109.2/patches/@lezer__highlight 2.patch new file mode 100755 index 00000000..f7b5f5a4 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/@lezer__highlight 2.patch @@ -0,0 +1,12 @@ +diff --git a/package.json b/package.json +index 2d52edb23f0c7defdfbf5f95ad1ee1fa75672b41..8d9dcbdc07cb5c73e629e22696235b19db98940d 100644 +--- a/package.json ++++ b/package.json +@@ -5,6 +5,7 @@ + "main": "dist/index.cjs", + "type": "module", + "exports": { ++ "types": "./dist/highlight.d.ts", + "import": "./dist/index.js", + "require": "./dist/index.cjs" + }, diff --git a/n8n-n8n-1.109.2/patches/@types__express-serve-static-core@5.0.6 2.patch b/n8n-n8n-1.109.2/patches/@types__express-serve-static-core@5.0.6 2.patch new file mode 100755 index 00000000..33fb6854 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/@types__express-serve-static-core@5.0.6 2.patch @@ -0,0 +1,13 @@ +diff --git a/index.d.ts b/index.d.ts +index fbad2c77669b1effe9d1ca30f518eb5e0058f2e0..6dc02519a6a8dfe1c7dc7d4d600478ba841b172a 100644 +--- a/index.d.ts ++++ b/index.d.ts +@@ -641,7 +641,7 @@ export interface Request< + + query: ReqQuery; + +- route: any; ++ route?: Pick; + + signedCookies: any; + diff --git a/n8n-n8n-1.109.2/patches/@types__uuencode@0.0.3 2.patch b/n8n-n8n-1.109.2/patches/@types__uuencode@0.0.3 2.patch new file mode 100755 index 00000000..fbb1abfe --- /dev/null +++ b/n8n-n8n-1.109.2/patches/@types__uuencode@0.0.3 2.patch @@ -0,0 +1,10 @@ +diff --git a/index.d.ts b/index.d.ts +index f8f89c567f394a538018bfdf11c28dc15e9c9fdc..f3d1cd426711f1f714744474604bd7e321073983 100644 +--- a/index.d.ts ++++ b/index.d.ts +@@ -1,4 +1,4 @@ + /// + +-export function decode(str: string | Buffer): string; ++export function decode(str: string | Buffer): Buffer; + export function encode(str: string | Buffer): string; diff --git a/n8n-n8n-1.109.2/patches/@types__ws@8.18.1 2.patch b/n8n-n8n-1.109.2/patches/@types__ws@8.18.1 2.patch new file mode 100755 index 00000000..599966d3 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/@types__ws@8.18.1 2.patch @@ -0,0 +1,14 @@ +diff --git a/index.d.ts b/index.d.ts +index 6d08adc155873e948d2ffebf40622fe405159bc0..b90773f2777a68408d9d1536412f80bb3c5325a0 100644 +--- a/index.d.ts ++++ b/index.d.ts +@@ -62,6 +62,9 @@ declare class WebSocket extends EventEmitter { + | typeof WebSocket.CLOSED; + readonly url: string; + ++ /** Indicates if the connection has replied to the last PING */ ++ isAlive: boolean; ++ + /** The connection is not yet open. */ + readonly CONNECTING: 0; + /** The connection is open and ready to communicate. */ \ No newline at end of file diff --git a/n8n-n8n-1.109.2/patches/bull@4.16.4 2.patch b/n8n-n8n-1.109.2/patches/bull@4.16.4 2.patch new file mode 100755 index 00000000..adb629f5 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/bull@4.16.4 2.patch @@ -0,0 +1,21 @@ +diff --git a/lib/job.js b/lib/job.js +index 1642d3fb35cbd64b553291660fc63bae2e7f2ef5..3301e3fbc7296f545b65331dad1f12c820267e0d 100644 +--- a/lib/job.js ++++ b/lib/job.js +@@ -513,9 +513,14 @@ Job.prototype.finished = async function() { + } + }; + +- const onFailed = (jobId, failedReason) => { ++ const onFailed = async (jobId, failedReason) => { + if (String(jobId) === String(this.id)) { +- reject(new Error(failedReason)); ++ const job = await Job.fromId(this.queue, this.id); ++ const error = new Error(failedReason); ++ if (job && job.stacktrace && job.stacktrace.length > 0) { ++ error.stack = job.stacktrace.join('\n'); ++ } ++ reject(new Error(error)); + removeListeners(); + } + }; diff --git a/n8n-n8n-1.109.2/patches/element-plus@2.4.3 2.patch b/n8n-n8n-1.109.2/patches/element-plus@2.4.3 2.patch new file mode 100755 index 00000000..c8bd16f7 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/element-plus@2.4.3 2.patch @@ -0,0 +1,26 @@ +diff --git a/es/hooks/use-lockscreen/index.mjs b/es/hooks/use-lockscreen/index.mjs +index 482516a6c59f8dcf0caba62b7482f63f126c2280..82a37f344bd650e9d514397b4531c0ff36487c70 100644 +--- a/es/hooks/use-lockscreen/index.mjs ++++ b/es/hooks/use-lockscreen/index.mjs +@@ -21,6 +21,8 @@ const useLockscreen = (trigger, options = {}) => { + let bodyWidth = "0"; + const cleanup = () => { + setTimeout(() => { ++ // Cherry-pick from https://github.com/element-plus/element-plus/pull/18445 ++ if (typeof document === 'undefined') return; + removeClass(document == null ? void 0 : document.body, hiddenCls.value); + if (withoutHiddenClass && document) { + document.body.style.width = bodyWidth; +diff --git a/lib/hooks/use-lockscreen/index.js b/lib/hooks/use-lockscreen/index.js +index ce7bd581a57cd0d7e834c42a954b48d148578ef5..496e4dc07bae546bea037cedb23ea0ee7b3a7955 100644 +--- a/lib/hooks/use-lockscreen/index.js ++++ b/lib/hooks/use-lockscreen/index.js +@@ -25,6 +25,8 @@ const useLockscreen = (trigger, options = {}) => { + let bodyWidth = "0"; + const cleanup = () => { + setTimeout(() => { ++ // Cherry-pick from https://github.com/element-plus/element-plus/pull/18445 ++ if (typeof document === 'undefined') return; + style.removeClass(document == null ? void 0 : document.body, hiddenCls.value); + if (withoutHiddenClass && document) { + document.body.style.width = bodyWidth; diff --git a/n8n-n8n-1.109.2/patches/ics 2.patch b/n8n-n8n-1.109.2/patches/ics 2.patch new file mode 100755 index 00000000..3d470f41 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/ics 2.patch @@ -0,0 +1,12 @@ +diff --git a/package.json b/package.json +index c69d9542b6f211d7dd3da0d11eb62002ed480457..a85c007d243ff0323c6ee271768147a848737241 100644 +--- a/package.json ++++ b/package.json +@@ -3,6 +3,7 @@ + "version": "2.40.0", + "description": "iCal (ics) file generator", + "exports": { ++ "types": "./index.d.ts", + "require": "./index.js", + "default": "./dist/index.js" + }, diff --git a/n8n-n8n-1.109.2/patches/js-base64 2.patch b/n8n-n8n-1.109.2/patches/js-base64 2.patch new file mode 100755 index 00000000..7697a52c --- /dev/null +++ b/n8n-n8n-1.109.2/patches/js-base64 2.patch @@ -0,0 +1,12 @@ +diff --git a/package.json b/package.json +index 5c6ed32cd20c7cb2635bbd43d2b24e5e6771e229..dc1b417593915de2069f55d6afd9f6950fff6c84 100644 +--- a/package.json ++++ b/package.json +@@ -12,6 +12,7 @@ + ], + "exports": { + ".": { ++ "types": "./base64.d.ts", + "import": "./base64.mjs", + "require": "./base64.js" + }, diff --git a/n8n-n8n-1.109.2/patches/minifaker 2.patch b/n8n-n8n-1.109.2/patches/minifaker 2.patch new file mode 100755 index 00000000..439a4911 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/minifaker 2.patch @@ -0,0 +1,12 @@ +diff --git a/package.json b/package.json +index 6ee7fa8ca1fc6daf7322b5278becb4e38c55eef8..7ebf0a67338ae7635a13d73952e7b4fa9c6c0f6b 100644 +--- a/package.json ++++ b/package.json +@@ -7,6 +7,7 @@ + "module": "./dist/esm/index.js", + "exports": { + ".": { ++ "types": "./dist/types/index.d.ts", + "import": "./dist/esm/index.js", + "require": "./dist/cjs/index.js" + }, diff --git a/n8n-n8n-1.109.2/patches/pdfjs-dist@5.3.31 2.patch b/n8n-n8n-1.109.2/patches/pdfjs-dist@5.3.31 2.patch new file mode 100755 index 00000000..99c1d865 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/pdfjs-dist@5.3.31 2.patch @@ -0,0 +1,27 @@ +diff --git a/legacy/build/pdf.mjs b/legacy/build/pdf.mjs +index 1a373ea986beef21076d30438235d180a0487c20..9d584f4fcc13f0b86e57160570c530e5ac794638 100644 +--- a/legacy/build/pdf.mjs ++++ b/legacy/build/pdf.mjs +@@ -12060,9 +12060,9 @@ class DOMWasmFactory extends BaseWasmFactory { + if (isNodeJS) { + let canvas; + try { +- const require = process.getBuiltinModule("module").createRequire(import.meta.url); ++ const _require = process.getBuiltinModule("module").createRequire(import.meta.url); + try { +- canvas = require("@napi-rs/canvas"); ++ canvas = _require("@napi-rs/canvas"); + } catch (ex) { + warn(`Cannot load "@napi-rs/canvas" package: "${ex}".`); + } +@@ -12106,8 +12106,8 @@ async function node_utils_fetchData(url) { + class NodeFilterFactory extends BaseFilterFactory {} + class NodeCanvasFactory extends BaseCanvasFactory { + _createCanvas(width, height) { +- const require = process.getBuiltinModule("module").createRequire(import.meta.url); +- const canvas = require("@napi-rs/canvas"); ++ const _require = process.getBuiltinModule("module").createRequire(import.meta.url); ++ const canvas = _require("@napi-rs/canvas"); + return canvas.createCanvas(width, height); + } + } diff --git a/n8n-n8n-1.109.2/patches/pkce-challenge@5.0.0 2.patch b/n8n-n8n-1.109.2/patches/pkce-challenge@5.0.0 2.patch new file mode 100755 index 00000000..e4d4c163 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/pkce-challenge@5.0.0 2.patch @@ -0,0 +1,25 @@ +diff --git a/dist/index.node.js b/dist/index.node.js +index 9a56dcef7f312d2061975dc496281b1673a229c4..8b86b4a7f07656d6711e54cb699d0dc79b08a8d3 100644 +--- a/dist/index.node.js ++++ b/dist/index.node.js +@@ -16,7 +16,7 @@ async function getRandomValues(size) { + * @returns The random string + */ + async function random(size) { +- const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._~"; ++ const mask = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._"; + let result = ""; + const randomUints = await getRandomValues(size); + for (let i = 0; i < size; i++) { +diff --git a/package.json b/package.json +index a51ede0564b61a237e35e8c5e718251c666ccaa5..9a015872b2f8f45dc5306843599304ef9a3a83c1 100644 +--- a/package.json ++++ b/package.json +@@ -4,6 +4,7 @@ + "description": "Generate or verify a Proof Key for Code Exchange (PKCE) challenge pair", + "browser": "dist/index.browser.js", + "type": "module", ++ "types": "./dist/index.node.d.ts", + "exports": { + ".": { + "types": { diff --git a/n8n-n8n-1.109.2/patches/v-code-diff 2.patch b/n8n-n8n-1.109.2/patches/v-code-diff 2.patch new file mode 100755 index 00000000..c8523bb9 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/v-code-diff 2.patch @@ -0,0 +1,21 @@ +diff --git a/package.json b/package.json +index 7dc91b25fae9cd1e81afa279629b6e2ffa80fa77..8cd22b5a1fa243e1048211a297c645806723df04 100644 +--- a/package.json ++++ b/package.json +@@ -7,12 +7,12 @@ + "exports": { + ".": { + "types": "./types/index.d.ts", +- "import": "./dist/index.es.js", +- "require": "./dist/index.cjs.js" ++ "import": "./dist/v3/index.es.js", ++ "require": "./dist/v3/index.cjs.js" + } + }, +- "main": "dist/index.cjs", +- "module": "dist/index.es.js", ++ "main": "dist/v3/index.cjs", ++ "module": "dist/v3/index.es.js", + "types": "./types/index.d.ts", + "files": [ + "dist", diff --git a/n8n-n8n-1.109.2/patches/vue-tsc@2.2.8 2.patch b/n8n-n8n-1.109.2/patches/vue-tsc@2.2.8 2.patch new file mode 100755 index 00000000..4603d9e8 --- /dev/null +++ b/n8n-n8n-1.109.2/patches/vue-tsc@2.2.8 2.patch @@ -0,0 +1,13 @@ +diff --git a/index.js b/index.js +index a680d25dfa98a45a3efec0bfb493500e6e9faa91..ca90b6226c88b5bc27aa5323c4e0e5f30f5b9ef2 100644 +--- a/index.js ++++ b/index.js +@@ -4,7 +4,7 @@ exports.run = run; + const runTsc_1 = require("@volar/typescript/lib/quickstart/runTsc"); + const vue = require("@vue/language-core"); + const windowsPathReg = /\\/g; +-function run(tscPath = require.resolve('typescript/lib/tsc')) { ++function run(tscPath = require.resolve('typescript/lib/_tsc')) { + let runExtensions = ['.vue']; + const extensionsChangedException = new Error('extensions changed'); + const main = () => (0, runTsc_1.runTsc)(tscPath, runExtensions, (ts, options) => { diff --git a/n8n-n8n-1.109.2/patches/z-vue-scan 2.patch b/n8n-n8n-1.109.2/patches/z-vue-scan 2.patch new file mode 100755 index 00000000..70a9836b --- /dev/null +++ b/n8n-n8n-1.109.2/patches/z-vue-scan 2.patch @@ -0,0 +1,44 @@ +diff --git a/dist/shared/z-vue-scan.3fa3a39a.mjs b/dist/shared/z-vue-scan.3fa3a39a.mjs +index 90c64048960e7e55d0d6798b5bc11fe9099c79b0..c6af398931a3f5efaf6e507a201e65515daf6c58 100644 +--- a/dist/shared/z-vue-scan.3fa3a39a.mjs ++++ b/dist/shared/z-vue-scan.3fa3a39a.mjs +@@ -1020,7 +1020,7 @@ class HighlightCanvas { + render() { + const now = Date.now(); + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); +- this.ctx.font = "12px sans-serif"; ++ this.ctx.font = "10px sans-serif"; + this.ctx.textBaseline = "middle"; + for (const [uuid, item] of this.highlights.entries()) { + if (!isInViewport(item.bounds)) +@@ -1065,7 +1065,7 @@ class HighlightCanvas { + drawBorder(item) { + const { bounds, flashCount, opacity } = item; + this.ctx.strokeStyle = `rgba(${Math.min(255, flashCount * 6)}, ${Math.max(0, 255 - flashCount * 6)}, 0, ${opacity})`; +- this.ctx.lineWidth = 2; ++ this.ctx.lineWidth = 1; + this.ctx.strokeRect( + bounds.left, + bounds.top, +diff --git a/dist/shared/z-vue-scan.e44c49f3.cjs b/dist/shared/z-vue-scan.e44c49f3.cjs +index 25100c556b300d60f86b81f46e3ae4168a203c14..c8d3ca42cb41d21f2726716d2aa8d8f63e6a85e8 100644 +--- a/dist/shared/z-vue-scan.e44c49f3.cjs ++++ b/dist/shared/z-vue-scan.e44c49f3.cjs +@@ -1022,7 +1022,7 @@ class HighlightCanvas { + render() { + const now = Date.now(); + this.ctx.clearRect(0, 0, this.canvas.width, this.canvas.height); +- this.ctx.font = "12px sans-serif"; ++ this.ctx.font = "10px sans-serif"; + this.ctx.textBaseline = "middle"; + for (const [uuid, item] of this.highlights.entries()) { + if (!isInViewport(item.bounds)) +@@ -1067,7 +1067,7 @@ class HighlightCanvas { + drawBorder(item) { + const { bounds, flashCount, opacity } = item; + this.ctx.strokeStyle = `rgba(${Math.min(255, flashCount * 6)}, ${Math.max(0, 255 - flashCount * 6)}, 0, ${opacity})`; +- this.ctx.lineWidth = 2; ++ this.ctx.lineWidth = 1; + this.ctx.strokeRect( + bounds.left, + bounds.top, diff --git a/n8n-n8n-1.109.2/pnpm-lock 2.yaml b/n8n-n8n-1.109.2/pnpm-lock 2.yaml new file mode 100755 index 00000000..daef0a2c --- /dev/null +++ b/n8n-n8n-1.109.2/pnpm-lock 2.yaml @@ -0,0 +1,33617 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +catalogs: + default: + '@langchain/anthropic': + specifier: 0.3.26 + version: 0.3.26 + '@langchain/community': + specifier: 0.3.50 + version: 0.3.50 + '@langchain/core': + specifier: 0.3.68 + version: 0.3.68 + '@langchain/openai': + specifier: 0.6.7 + version: 0.6.7 + '@n8n/typeorm': + specifier: 0.3.20-12 + version: 0.3.20-12 + '@n8n_io/ai-assistant-sdk': + specifier: 1.15.0 + version: 1.15.0 + '@sentry/node': + specifier: ^9.42.1 + version: 9.42.1 + '@types/basic-auth': + specifier: ^1.1.3 + version: 1.1.3 + '@types/express': + specifier: ^5.0.1 + version: 5.0.1 + '@types/jsonwebtoken': + specifier: ^9.0.9 + version: 9.0.9 + '@types/lodash': + specifier: 4.17.17 + version: 4.17.17 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@types/xml2js': + specifier: ^0.4.14 + version: 0.4.14 + '@vitest/coverage-v8': + specifier: 3.2.4 + version: 3.2.4 + axios: + specifier: 1.8.3 + version: 1.8.3 + basic-auth: + specifier: 2.0.1 + version: 2.0.1 + callsites: + specifier: 3.1.0 + version: 3.1.0 + eslint: + specifier: 9.29.0 + version: 9.29.0 + fast-glob: + specifier: 3.2.12 + version: 3.2.12 + flatted: + specifier: 3.2.7 + version: 3.2.7 + http-proxy-agent: + specifier: 7.0.2 + version: 7.0.2 + https-proxy-agent: + specifier: 7.0.6 + version: 7.0.6 + iconv-lite: + specifier: 0.6.3 + version: 0.6.3 + js-base64: + specifier: 3.7.2 + version: 3.7.2 + jsonwebtoken: + specifier: 9.0.2 + version: 9.0.2 + lodash: + specifier: 4.17.21 + version: 4.17.21 + luxon: + specifier: 3.4.4 + version: 3.4.4 + nanoid: + specifier: 3.3.8 + version: 3.3.8 + picocolors: + specifier: 1.0.1 + version: 1.0.1 + reflect-metadata: + specifier: 0.2.2 + version: 0.2.2 + rimraf: + specifier: 6.0.1 + version: 6.0.1 + tsup: + specifier: ^8.5.0 + version: 8.5.0 + tsx: + specifier: ^4.19.3 + version: 4.19.3 + uuid: + specifier: 10.0.0 + version: 10.0.0 + vite: + specifier: ^6.3.5 + version: 6.3.5 + vitest: + specifier: ^3.1.3 + version: 3.1.3 + vitest-mock-extended: + specifier: ^3.1.0 + version: 3.1.0 + xml2js: + specifier: 0.6.2 + version: 0.6.2 + xss: + specifier: 1.0.15 + version: 1.0.15 + zod: + specifier: 3.25.67 + version: 3.25.67 + zod-to-json-schema: + specifier: 3.23.3 + version: 3.23.3 + frontend: + '@sentry/vue': + specifier: ^9.42.1 + version: 9.42.1 + '@testing-library/jest-dom': + specifier: ^6.6.3 + version: 6.6.3 + '@testing-library/user-event': + specifier: ^14.6.1 + version: 14.6.1 + '@testing-library/vue': + specifier: ^8.1.0 + version: 8.1.0 + '@vitejs/plugin-vue': + specifier: ^5.2.4 + version: 5.2.4 + '@vue/tsconfig': + specifier: ^0.7.0 + version: 0.7.0 + '@vueuse/core': + specifier: ^10.11.0 + version: 10.11.0 + element-plus: + specifier: 2.4.3 + version: 2.4.3 + highlight.js: + specifier: ^11.8.0 + version: 11.11.1 + pinia: + specifier: ^2.2.4 + version: 2.2.4 + unplugin-icons: + specifier: ^0.19.0 + version: 0.19.0 + unplugin-vue-components: + specifier: ^0.27.2 + version: 0.27.3 + vue: + specifier: ^3.5.13 + version: 3.5.13 + vue-i18n: + specifier: ^11.1.2 + version: 11.1.10 + vue-markdown-render: + specifier: ^2.2.1 + version: 2.2.1 + vue-router: + specifier: ^4.5.0 + version: 4.5.0 + +overrides: + '@azure/identity': ^4.3.0 + '@n8n/typeorm>@sentry/node': ^9.42.1 + '@types/node': ^20.17.50 + chokidar: 4.0.3 + esbuild: ^0.25.0 + multer: ^2.0.2 + prebuild-install: 7.1.3 + pug: ^3.0.3 + semver: ^7.5.4 + tar-fs: 2.1.3 + tslib: ^2.6.2 + tsconfig-paths: ^4.2.0 + typescript: 5.9.2 + vue-tsc: ^2.2.8 + google-gax: ^4.3.7 + ws: '>=8.17.1' + brace-expansion@1: 1.1.12 + brace-expansion@2: 2.0.2 + date-fns: 2.30.0 + date-fns-tz: 2.0.0 + form-data: 4.0.4 + tmp: 0.2.4 + +patchedDependencies: + '@lezer/highlight': + hash: 97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c + path: patches/@lezer__highlight.patch + '@types/express-serve-static-core@5.0.6': + hash: d602248fcd302cf5a794d1e85a411633ba9635ea5d566d6f2e0429c7ae0fa3eb + path: patches/@types__express-serve-static-core@5.0.6.patch + '@types/uuencode@0.0.3': + hash: 083a73709a54db57b092d986b43d27ddda3cb8008f9510e98bc9e6da0e1cbb62 + path: patches/@types__uuencode@0.0.3.patch + '@types/ws@8.18.1': + hash: 682b44b740be55e5d7018e6fe335880851dadf2524b6c723c9ed0c29cb2fa7fb + path: patches/@types__ws@8.18.1.patch + bull@4.16.4: + hash: a4b6d56db16fe5870646929938466d6a5c668435fd1551bed6a93fffb597ba42 + path: patches/bull@4.16.4.patch + element-plus@2.4.3: + hash: 3bc4ea0a42ad52c6bbc3d06c12c2963d55b57d6b5b8d436e46e7fd8ff8c10661 + path: patches/element-plus@2.4.3.patch + ics: + hash: 163587ad2fa9bc787ed09cd5e958eace08b4aa8aaca651869e9434ba674e158d + path: patches/ics.patch + js-base64: + hash: bb02fdf69495c7b0768791b60ab6e1a002053b8decd19a174f5755691e5c9500 + path: patches/js-base64.patch + minifaker: + hash: bc707e2c34a2464da2c9c93ead33e80fd9883a00434ef64907ddc45208a08b33 + path: patches/minifaker.patch + pdfjs-dist@5.3.31: + hash: 421253c8e411cdaef58ba96d2bb44ae0784e1b3e446f5caca50710daa1fa5dcd + path: patches/pdfjs-dist@5.3.31.patch + pkce-challenge@5.0.0: + hash: 651e785d0b7bbf5be9210e1e895c39a16dc3ce8a5a3843b4819565fb6e175b90 + path: patches/pkce-challenge@5.0.0.patch + v-code-diff: + hash: 21588de80e591bbc1e5a068d9bce311db5254686443652945d2c7887fdafe9d9 + path: patches/v-code-diff.patch + vue-tsc@2.2.8: + hash: e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f + path: patches/vue-tsc@2.2.8.patch + z-vue-scan: + hash: bbd573be7e456224f369aafb4d66374523c4847964a4655a6a1654fd40e8b0f8 + path: patches/z-vue-scan.patch + +importers: + + .: + devDependencies: + '@biomejs/biome': + specifier: ^1.9.0 + version: 1.9.0 + '@n8n/eslint-config': + specifier: workspace:* + version: link:packages/@n8n/eslint-config + '@types/jest': + specifier: ^29.5.3 + version: 29.5.3 + '@types/node': + specifier: ^20.17.50 + version: 20.17.57 + '@types/supertest': + specifier: ^6.0.3 + version: 6.0.3 + babel-plugin-transform-import-meta: + specifier: ^2.3.2 + version: 2.3.3(@babel/core@7.26.10) + bundlemon: + specifier: ^3.1.0 + version: 3.1.0(typescript@5.9.2) + cross-env: + specifier: ^7.0.3 + version: 7.0.3 + eslint: + specifier: 'catalog:' + version: 9.29.0(jiti@1.21.7) + jest: + specifier: ^29.6.2 + version: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + jest-environment-jsdom: + specifier: ^29.6.2 + version: 29.6.2 + jest-expect-message: + specifier: ^1.1.3 + version: 1.1.3 + jest-junit: + specifier: ^16.0.0 + version: 16.0.0 + jest-mock: + specifier: ^29.6.2 + version: 29.6.2 + jest-mock-extended: + specifier: ^3.0.4 + version: 3.0.4(jest@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)))(typescript@5.9.2) + lefthook: + specifier: ^1.7.15 + version: 1.7.15 + nock: + specifier: ^14.0.1 + version: 14.0.1 + nodemon: + specifier: ^3.0.1 + version: 3.0.1 + npm-run-all2: + specifier: ^7.0.2 + version: 7.0.2 + p-limit: + specifier: ^3.1.0 + version: 3.1.0 + rimraf: + specifier: ^5.0.1 + version: 5.0.1 + run-script-os: + specifier: ^1.0.7 + version: 1.1.6 + supertest: + specifier: ^7.1.1 + version: 7.1.1 + ts-jest: + specifier: ^29.1.1 + version: 29.1.1(@babel/core@7.26.10)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.26.10))(jest@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)))(typescript@5.9.2) + tsc-alias: + specifier: ^1.8.10 + version: 1.8.10 + tsc-watch: + specifier: ^6.2.0 + version: 6.2.0(typescript@5.9.2) + turbo: + specifier: 2.5.4 + version: 2.5.4 + typescript: + specifier: 5.9.2 + version: 5.9.2 + zx: + specifier: ^8.1.4 + version: 8.1.4 + + cypress: + dependencies: + '@ngneat/falso': + specifier: ^7.3.0 + version: 7.4.0 + '@sinonjs/fake-timers': + specifier: ^13.0.2 + version: 13.0.2 + cypress: + specifier: ^14.4.0 + version: 14.4.0 + cypress-otp: + specifier: ^1.0.3 + version: 1.0.3 + cypress-real-events: + specifier: ^1.14.0 + version: 1.14.0(cypress@14.4.0) + flatted: + specifier: 'catalog:' + version: 3.2.7 + lodash: + specifier: 'catalog:' + version: 4.17.21 + nanoid: + specifier: 'catalog:' + version: 3.3.8 + start-server-and-test: + specifier: ^2.0.10 + version: 2.0.10 + devDependencies: + '@cypress/grep': + specifier: ^4.1.0 + version: 4.1.0(@babel/core@7.26.10)(cypress@14.4.0) + '@n8n/api-types': + specifier: workspace:* + version: link:../packages/@n8n/api-types + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + eslint-plugin-cypress: + specifier: ^4.3.0 + version: 4.3.0(eslint@9.29.0(jiti@1.21.7)) + mocha-junit-reporter: + specifier: ^2.2.1 + version: 2.2.1(mocha@11.7.1) + n8n-workflow: + specifier: workspace:* + version: link:../packages/workflow + + packages/@n8n/ai-workflow-builder.ee: + dependencies: + '@langchain/anthropic': + specifier: 'catalog:' + version: 0.3.26(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/core': + specifier: 'catalog:' + version: 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/langgraph': + specifier: 0.2.74 + version: 0.2.74(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(react@18.2.0)(zod-to-json-schema@3.24.6(zod@3.25.67)) + '@langchain/openai': + specifier: 'catalog:' + version: 0.6.7(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3) + '@n8n/backend-common': + specifier: workspace:^ + version: link:../backend-common + '@n8n/config': + specifier: workspace:* + version: link:../config + '@n8n/di': + specifier: workspace:* + version: link:../di + '@n8n_io/ai-assistant-sdk': + specifier: 'catalog:' + version: 1.15.0 + langsmith: + specifier: ^0.3.45 + version: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + n8n-workflow: + specifier: workspace:* + version: link:../../workflow + picocolors: + specifier: 'catalog:' + version: 1.0.1 + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/cli-progress': + specifier: ^3.11.5 + version: 3.11.6 + cli-progress: + specifier: ^3.12.0 + version: 3.12.0 + cli-table3: + specifier: ^0.6.3 + version: 0.6.5 + jest-mock-extended: + specifier: ^3.0.4 + version: 3.0.4(jest@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)))(typescript@5.9.2) + madge: + specifier: ^8.0.0 + version: 8.0.0(typescript@5.9.2) + p-limit: + specifier: ^3.1.0 + version: 3.1.0 + + packages/@n8n/api-types: + dependencies: + '@n8n/permissions': + specifier: workspace:* + version: link:../permissions + n8n-workflow: + specifier: workspace:* + version: link:../../workflow + xss: + specifier: 'catalog:' + version: 1.0.15 + zod: + specifier: 'catalog:' + version: 3.25.67 + zod-class: + specifier: 0.0.16 + version: 0.0.16(zod@3.25.67) + devDependencies: + '@n8n/config': + specifier: workspace:* + version: link:../config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/backend-common: + dependencies: + '@n8n/config': + specifier: workspace:^ + version: link:../config + '@n8n/constants': + specifier: workspace:^ + version: link:../constants + '@n8n/decorators': + specifier: workspace:^ + version: link:../decorators + '@n8n/di': + specifier: workspace:^ + version: link:../di + callsites: + specifier: 'catalog:' + version: 3.1.0 + n8n-workflow: + specifier: workspace:^ + version: link:../../workflow + picocolors: + specifier: 'catalog:' + version: 1.0.1 + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + winston: + specifier: 3.14.2 + version: 3.14.2 + yargs-parser: + specifier: 21.1.1 + version: 21.1.1 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/yargs-parser': + specifier: 21.0.0 + version: 21.0.0 + zod: + specifier: 'catalog:' + version: 3.25.67 + + packages/@n8n/backend-test-utils: + dependencies: + '@n8n/backend-common': + specifier: workspace:^ + version: link:../backend-common + '@n8n/config': + specifier: workspace:^ + version: link:../config + '@n8n/constants': + specifier: workspace:^ + version: link:../constants + '@n8n/db': + specifier: workspace:^ + version: link:../db + '@n8n/di': + specifier: workspace:^ + version: link:../di + '@n8n/permissions': + specifier: workspace:^ + version: link:../permissions + '@n8n/typeorm': + specifier: 'catalog:' + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + jest-mock-extended: + specifier: ^3.0.4 + version: 3.0.4(jest@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)))(typescript@5.9.2) + n8n-workflow: + specifier: workspace:^ + version: link:../../workflow + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + uuid: + specifier: 'catalog:' + version: 10.0.0 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/benchmark: + dependencies: + '@oclif/core': + specifier: 4.0.7 + version: 4.0.7 + axios: + specifier: 'catalog:' + version: 1.8.3 + dotenv: + specifier: 8.6.0 + version: 8.6.0 + nanoid: + specifier: 'catalog:' + version: 3.3.8 + zx: + specifier: ^8.1.4 + version: 8.1.4 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/convict': + specifier: ^6.1.1 + version: 6.1.1 + '@types/k6': + specifier: ^0.52.0 + version: 0.52.0 + + packages/@n8n/client-oauth2: + dependencies: + axios: + specifier: 'catalog:' + version: 1.8.3 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/codemirror-lang: + dependencies: + '@codemirror/language': + specifier: '*' + version: 6.9.3 + '@lezer/highlight': + specifier: '*' + version: 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': + specifier: ^1.4.0 + version: 1.4.0 + devDependencies: + '@lezer/generator': + specifier: ^1.7.0 + version: 1.7.0 + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/config: + dependencies: + '@n8n/di': + specifier: workspace:* + version: link:../di + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/constants: + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/create-node: + dependencies: + '@n8n/node-cli': + specifier: workspace:* + version: link:../node-cli + + packages/@n8n/db: + dependencies: + '@n8n/api-types': + specifier: workspace:^ + version: link:../api-types + '@n8n/backend-common': + specifier: workspace:^ + version: link:../backend-common + '@n8n/config': + specifier: workspace:^ + version: link:../config + '@n8n/constants': + specifier: workspace:^ + version: link:../constants + '@n8n/decorators': + specifier: workspace:^ + version: link:../decorators + '@n8n/di': + specifier: workspace:^ + version: link:../di + '@n8n/permissions': + specifier: workspace:^ + version: link:../permissions + '@n8n/typeorm': + specifier: 'catalog:' + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + class-validator: + specifier: 0.14.0 + version: 0.14.0 + flatted: + specifier: 'catalog:' + version: 3.2.7 + lodash: + specifier: 'catalog:' + version: 4.17.21 + n8n-core: + specifier: workspace:^ + version: link:../../core + n8n-workflow: + specifier: workspace:^ + version: link:../../workflow + nanoid: + specifier: 'catalog:' + version: 3.3.8 + p-lazy: + specifier: 3.1.0 + version: 3.1.0 + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + uuid: + specifier: 'catalog:' + version: 10.0.0 + xss: + specifier: 'catalog:' + version: 1.0.15 + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + express: + specifier: 5.1.0 + version: 5.1.0 + + packages/@n8n/decorators: + dependencies: + '@n8n/constants': + specifier: workspace:^ + version: link:../constants + '@n8n/di': + specifier: workspace:^ + version: link:../di + '@n8n/permissions': + specifier: workspace:^ + version: link:../permissions + lodash: + specifier: 'catalog:' + version: 4.17.21 + n8n-workflow: + specifier: workspace:^ + version: link:../../workflow + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/express': + specifier: 'catalog:' + version: 5.0.1 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + + packages/@n8n/di: + dependencies: + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/errors: + dependencies: + callsites: + specifier: 'catalog:' + version: 3.1.0 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@sentry/node': + specifier: 'catalog:' + version: 9.42.1 + + packages/@n8n/eslint-config: + dependencies: + eslint: + specifier: '>= 9' + version: 9.29.0(jiti@1.21.7) + devDependencies: + '@eslint/js': + specifier: ^9.29.0 + version: 9.29.0 + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../vitest-config + '@stylistic/eslint-plugin': + specifier: ^5.0.0 + version: 5.0.0(eslint@9.29.0(jiti@1.21.7)) + '@types/eslint': + specifier: ^9.6.1 + version: 9.6.1 + '@typescript-eslint/eslint-plugin': + specifier: ^8.35.0 + version: 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/rule-tester': + specifier: ^8.35.0 + version: 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/utils': + specifier: ^8.35.0 + version: 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + eslint-config-prettier: + specifier: ^10.1.5 + version: 10.1.5(eslint@9.29.0(jiti@1.21.7)) + eslint-import-resolver-typescript: + specifier: ^4.4.3 + version: 4.4.3(eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-import: + specifier: ^2.32.0 + version: 2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-import-x: + specifier: ^4.15.2 + version: 4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-lodash: + specifier: ^8.0.0 + version: 8.0.0(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-unicorn: + specifier: ^59.0.1 + version: 59.0.1(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-unused-imports: + specifier: ^4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-vue: + specifier: ^10.2.0 + version: 10.2.0(eslint@9.29.0(jiti@1.21.7))(vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@1.21.7))) + globals: + specifier: ^16.2.0 + version: 16.2.0 + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + typescript: + specifier: 5.9.2 + version: 5.9.2 + typescript-eslint: + specifier: ^8.35.0 + version: 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + packages/@n8n/extension-sdk: + dependencies: + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + rimraf: + specifier: 'catalog:' + version: 6.0.1 + tsx: + specifier: 'catalog:' + version: 4.19.3 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-router: + specifier: catalog:frontend + version: 4.5.0(vue@3.5.13(typescript@5.9.2)) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + zod-to-json-schema: + specifier: 'catalog:' + version: 3.23.3(zod@3.25.67) + + packages/@n8n/imap: + dependencies: + iconv-lite: + specifier: 'catalog:' + version: 0.6.3 + imap: + specifier: 0.8.19 + version: 0.8.19 + quoted-printable: + specifier: 1.0.1 + version: 1.0.1 + utf8: + specifier: 3.0.0 + version: 3.0.0 + uuencode: + specifier: 0.0.4 + version: 0.0.4 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../vitest-config + '@types/imap': + specifier: ^0.8.40 + version: 0.8.40 + '@types/quoted-printable': + specifier: ^1.0.2 + version: 1.0.2 + '@types/utf8': + specifier: ^3.0.3 + version: 3.0.3 + '@types/uuencode': + specifier: ^0.0.3 + version: 0.0.3(patch_hash=083a73709a54db57b092d986b43d27ddda3cb8008f9510e98bc9e6da0e1cbb62) + vitest-mock-extended: + specifier: 'catalog:' + version: 3.1.0(typescript@5.9.2)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + + packages/@n8n/json-schema-to-zod: + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/json-schema': + specifier: ^7.0.15 + version: 7.0.15 + zod: + specifier: 'catalog:' + version: 3.25.67 + + packages/@n8n/node-cli: + dependencies: + '@clack/prompts': + specifier: ^0.11.0 + version: 0.11.0 + '@oclif/core': + specifier: ^4.5.2 + version: 4.5.2 + change-case: + specifier: ^5.4.4 + version: 5.4.4 + eslint-import-resolver-typescript: + specifier: ^4.4.3 + version: 4.4.3(eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-import-x: + specifier: ^4.15.2 + version: 4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-n8n-nodes-base: + specifier: 1.16.3 + version: 1.16.3(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + fast-glob: + specifier: 'catalog:' + version: 3.2.12 + handlebars: + specifier: 4.7.8 + version: 4.7.8 + picocolors: + specifier: 'catalog:' + version: 1.0.1 + prettier: + specifier: 3.6.2 + version: 3.6.2 + prompts: + specifier: ^2.4.2 + version: 2.4.2 + rimraf: + specifier: 'catalog:' + version: 6.0.1 + ts-morph: + specifier: ^26.0.0 + version: 26.0.0 + typescript-eslint: + specifier: ^8.35.0 + version: 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + devDependencies: + '@eslint/js': + specifier: ^9.29.0 + version: 9.29.0 + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../vitest-config + '@oclif/test': + specifier: ^4.1.13 + version: 4.1.13(@oclif/core@4.5.2) + eslint: + specifier: 'catalog:' + version: 9.29.0(jiti@1.21.7) + typescript: + specifier: 5.9.2 + version: 5.9.2 + vitest-mock-extended: + specifier: 'catalog:' + version: 3.1.0(typescript@5.9.2)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + + packages/@n8n/nodes-langchain: + dependencies: + '@aws-sdk/client-sso-oidc': + specifier: 3.808.0 + version: 3.808.0 + '@azure/identity': + specifier: ^4.3.0 + version: 4.3.0 + '@getzep/zep-cloud': + specifier: 1.0.12 + version: 1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.30(316b19288832115574731e049dc7676a)) + '@getzep/zep-js': + specifier: 0.9.0 + version: 0.9.0 + '@google-ai/generativelanguage': + specifier: 2.6.0 + version: 2.6.0(encoding@0.1.13) + '@google-cloud/resource-manager': + specifier: 5.3.0 + version: 5.3.0(encoding@0.1.13) + '@google/generative-ai': + specifier: 0.21.0 + version: 0.21.0 + '@huggingface/inference': + specifier: 4.0.5 + version: 4.0.5 + '@langchain/anthropic': + specifier: 'catalog:' + version: 0.3.26(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/aws': + specifier: 0.1.11 + version: 0.1.11(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/cohere': + specifier: 0.3.4 + version: 0.3.4(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/community': + specifier: 'catalog:' + version: 0.3.50(ccee17333f80550b1303d83de2b6f79a) + '@langchain/core': + specifier: 'catalog:' + version: 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/google-genai': + specifier: 0.2.13 + version: 0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/google-vertexai': + specifier: 0.2.13 + version: 0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/groq': + specifier: 0.2.3 + version: 0.2.3(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/mistralai': + specifier: 0.2.1 + version: 0.2.1(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(zod@3.25.67) + '@langchain/mongodb': + specifier: ^0.1.0 + version: 0.1.0(@aws-sdk/credential-providers@3.808.0)(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + '@langchain/ollama': + specifier: 0.2.3 + version: 0.2.3(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/openai': + specifier: 'catalog:' + version: 0.6.7(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3) + '@langchain/pinecone': + specifier: 0.2.0 + version: 0.2.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(@pinecone-database/pinecone@5.1.2) + '@langchain/qdrant': + specifier: 0.1.2 + version: 0.1.2(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(typescript@5.9.2) + '@langchain/redis': + specifier: 0.1.1 + version: 0.1.1(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/textsplitters': + specifier: 0.1.0 + version: 0.1.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/weaviate': + specifier: 0.2.0 + version: 0.2.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13) + '@modelcontextprotocol/sdk': + specifier: 1.12.0 + version: 1.12.0 + '@mozilla/readability': + specifier: 0.6.0 + version: 0.6.0 + '@n8n/client-oauth2': + specifier: workspace:* + version: link:../client-oauth2 + '@n8n/errors': + specifier: workspace:^ + version: link:../errors + '@n8n/json-schema-to-zod': + specifier: workspace:* + version: link:../json-schema-to-zod + '@n8n/typeorm': + specifier: 0.3.20-12 + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3))(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@n8n/vm2': + specifier: 3.9.25 + version: 3.9.25 + '@pinecone-database/pinecone': + specifier: ^5.0.2 + version: 5.1.2 + '@qdrant/js-client-rest': + specifier: 1.14.1 + version: 1.14.1(typescript@5.9.2) + '@supabase/supabase-js': + specifier: 2.49.9 + version: 2.49.9 + '@xata.io/client': + specifier: 0.28.4 + version: 0.28.4(typescript@5.9.2) + '@zilliz/milvus2-sdk-node': + specifier: ^2.5.7 + version: 2.5.7 + basic-auth: + specifier: 'catalog:' + version: 2.0.1 + cheerio: + specifier: 1.0.0 + version: 1.0.0 + cohere-ai: + specifier: 7.14.0 + version: 7.14.0(encoding@0.1.13) + d3-dsv: + specifier: 2.0.0 + version: 2.0.0 + epub2: + specifier: 3.0.2 + version: 3.0.2(ts-toolbelt@9.6.0) + form-data: + specifier: 4.0.4 + version: 4.0.4 + generate-schema: + specifier: 2.6.0 + version: 2.6.0 + html-to-text: + specifier: 9.0.5 + version: 9.0.5 + https-proxy-agent: + specifier: 'catalog:' + version: 7.0.6 + ignore: + specifier: ^5.2.0 + version: 5.2.4 + js-tiktoken: + specifier: ^1.0.12 + version: 1.0.12 + jsdom: + specifier: 23.0.1 + version: 23.0.1 + langchain: + specifier: 0.3.30 + version: 0.3.30(316b19288832115574731e049dc7676a) + lodash: + specifier: 'catalog:' + version: 4.17.21 + mammoth: + specifier: 1.7.2 + version: 1.7.2 + mime-types: + specifier: 2.1.35 + version: 2.1.35 + mongodb: + specifier: 6.11.0 + version: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + n8n-nodes-base: + specifier: workspace:* + version: link:../../nodes-base + n8n-workflow: + specifier: workspace:* + version: link:../../workflow + openai: + specifier: 5.12.2 + version: 5.12.2(ws@8.18.3)(zod@3.25.67) + pdf-parse: + specifier: 1.1.1 + version: 1.1.1 + pg: + specifier: 8.12.0 + version: 8.12.0 + proxy-from-env: + specifier: ^1.1.0 + version: 1.1.0 + redis: + specifier: 4.6.12 + version: 4.6.12 + sanitize-html: + specifier: 2.12.1 + version: 2.12.1 + sqlite3: + specifier: 5.1.7 + version: 5.1.7 + temp: + specifier: 0.9.4 + version: 0.9.4 + tmp-promise: + specifier: 3.0.3 + version: 3.0.3 + undici: + specifier: ^6.21.0 + version: 6.21.3 + weaviate-client: + specifier: 3.6.2 + version: 3.6.2(encoding@0.1.13) + zod: + specifier: 'catalog:' + version: 3.25.67 + zod-to-json-schema: + specifier: 3.23.3 + version: 3.23.3(zod@3.25.67) + devDependencies: + '@types/basic-auth': + specifier: 'catalog:' + version: 1.1.3 + '@types/cheerio': + specifier: ^0.22.15 + version: 0.22.31 + '@types/html-to-text': + specifier: ^9.0.1 + version: 9.0.4 + '@types/json-schema': + specifier: ^7.0.15 + version: 7.0.15 + '@types/mime-types': + specifier: ^2.1.0 + version: 2.1.1 + '@types/pg': + specifier: ^8.11.6 + version: 8.11.6 + '@types/sanitize-html': + specifier: ^2.11.0 + version: 2.11.0 + '@types/temp': + specifier: ^0.9.1 + version: 0.9.4 + fast-glob: + specifier: 'catalog:' + version: 3.2.12 + jest-mock-extended: + specifier: ^3.0.4 + version: 3.0.4(jest@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)))(typescript@5.9.2) + n8n-core: + specifier: workspace:* + version: link:../../core + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + + packages/@n8n/permissions: + dependencies: + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + + packages/@n8n/storybook: + devDependencies: + '@chromatic-com/storybook': + specifier: ^3.2.5 + version: 3.2.5(react@18.2.0)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-a11y': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-actions': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-docs': + specifier: ^8.6.4 + version: 8.6.4(@types/react@18.0.27)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-essentials': + specifier: ^8.6.4 + version: 8.6.4(@types/react@18.0.27)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-interactions': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-links': + specifier: ^8.6.4 + version: 8.6.4(react@18.2.0)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-themes': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/blocks': + specifier: ^8.6.4 + version: 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/test': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/vue3': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2))(vue@3.5.13(typescript@5.9.2)) + '@storybook/vue3-vite': + specifier: ^8.6.4 + version: 8.6.4(storybook@8.6.4(prettier@3.6.2))(vite@7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + chromatic: + specifier: ^11.27.0 + version: 11.27.0 + storybook: + specifier: ^8.6.4 + version: 8.6.4(prettier@3.6.2) + + packages/@n8n/stylelint-config: + dependencies: + postcss-html: + specifier: ^1.8.0 + version: 1.8.0 + postcss-scss: + specifier: ^4.0.9 + version: 4.0.9(postcss@8.5.6) + stylelint: + specifier: ^16.23.0 + version: 16.23.0(typescript@5.9.2) + stylelint-config-standard-scss: + specifier: ^15.0.1 + version: 15.0.1(postcss@8.5.6)(stylelint@16.23.0(typescript@5.9.2)) + stylelint-scss: + specifier: ^6.12.1 + version: 6.12.1(stylelint@16.23.0(typescript@5.9.2)) + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + rimraf: + specifier: 'catalog:' + version: 6.0.1 + typescript: + specifier: 5.9.2 + version: 5.9.2 + + packages/@n8n/task-runner: + dependencies: + '@n8n/config': + specifier: workspace:* + version: link:../config + '@n8n/di': + specifier: workspace:* + version: link:../di + '@n8n/errors': + specifier: workspace:^ + version: link:../errors + '@sentry/node': + specifier: 'catalog:' + version: 9.42.1 + acorn: + specifier: 8.14.0 + version: 8.14.0 + acorn-walk: + specifier: 8.3.4 + version: 8.3.4 + lodash: + specifier: 'catalog:' + version: 4.17.21 + luxon: + specifier: 'catalog:' + version: 3.4.4 + n8n-core: + specifier: workspace:* + version: link:../../core + n8n-workflow: + specifier: workspace:* + version: link:../../workflow + nanoid: + specifier: 'catalog:' + version: 3.3.8 + ws: + specifier: '>=8.17.1' + version: 8.17.1 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + + packages/@n8n/typescript-config: {} + + packages/@n8n/utils: + devDependencies: + '@n8n/eslint-config': + specifier: workspace:* + version: link:../eslint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../vitest-config + '@testing-library/jest-dom': + specifier: catalog:frontend + version: 6.6.3 + '@testing-library/user-event': + specifier: catalog:frontend + version: 14.6.1(@testing-library/dom@10.4.0) + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + typescript: + specifier: 5.9.2 + version: 5.9.2 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + packages/@n8n/vitest-config: + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../typescript-config + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + packages/cli: + dependencies: + '@aws-sdk/client-secrets-manager': + specifier: 3.808.0 + version: 3.808.0 + '@azure/identity': + specifier: ^4.3.0 + version: 4.3.0 + '@azure/keyvault-secrets': + specifier: 4.8.0 + version: 4.8.0 + '@google-cloud/secret-manager': + specifier: 5.6.0 + version: 5.6.0(encoding@0.1.13) + '@n8n/ai-workflow-builder': + specifier: workspace:* + version: link:../@n8n/ai-workflow-builder.ee + '@n8n/api-types': + specifier: workspace:* + version: link:../@n8n/api-types + '@n8n/backend-common': + specifier: workspace:^ + version: link:../@n8n/backend-common + '@n8n/backend-test-utils': + specifier: workspace:^ + version: link:../@n8n/backend-test-utils + '@n8n/client-oauth2': + specifier: workspace:* + version: link:../@n8n/client-oauth2 + '@n8n/config': + specifier: workspace:* + version: link:../@n8n/config + '@n8n/constants': + specifier: workspace:^ + version: link:../@n8n/constants + '@n8n/db': + specifier: workspace:^ + version: link:../@n8n/db + '@n8n/decorators': + specifier: workspace:* + version: link:../@n8n/decorators + '@n8n/di': + specifier: workspace:* + version: link:../@n8n/di + '@n8n/errors': + specifier: workspace:* + version: link:../@n8n/errors + '@n8n/localtunnel': + specifier: 3.0.0 + version: 3.0.0 + '@n8n/n8n-nodes-langchain': + specifier: workspace:* + version: link:../@n8n/nodes-langchain + '@n8n/permissions': + specifier: workspace:* + version: link:../@n8n/permissions + '@n8n/task-runner': + specifier: workspace:* + version: link:../@n8n/task-runner + '@n8n/typeorm': + specifier: 'catalog:' + version: 0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + '@n8n_io/ai-assistant-sdk': + specifier: 'catalog:' + version: 1.15.0 + '@n8n_io/license-sdk': + specifier: 2.23.0 + version: 2.23.0 + '@rudderstack/rudder-sdk-node': + specifier: 2.1.4 + version: 2.1.4(tslib@2.8.1) + '@sentry/node': + specifier: 'catalog:' + version: 9.42.1 + aws4: + specifier: 1.11.0 + version: 1.11.0 + axios: + specifier: 'catalog:' + version: 1.8.3 + bcryptjs: + specifier: 2.4.3 + version: 2.4.3 + bull: + specifier: 4.16.4 + version: 4.16.4(patch_hash=a4b6d56db16fe5870646929938466d6a5c668435fd1551bed6a93fffb597ba42) + cache-manager: + specifier: 5.2.3 + version: 5.2.3 + change-case: + specifier: 4.1.2 + version: 4.1.2 + class-transformer: + specifier: 0.5.1 + version: 0.5.1 + class-validator: + specifier: 0.14.0 + version: 0.14.0 + compression: + specifier: 1.8.1 + version: 1.8.1 + convict: + specifier: 6.2.4 + version: 6.2.4 + cookie-parser: + specifier: 1.4.7 + version: 1.4.7 + csrf: + specifier: 3.1.0 + version: 3.1.0 + dotenv: + specifier: 8.6.0 + version: 8.6.0 + express: + specifier: 5.1.0 + version: 5.1.0 + express-handlebars: + specifier: 8.0.1 + version: 8.0.1 + express-openapi-validator: + specifier: 5.5.3 + version: 5.5.3(express@5.1.0) + express-prom-bundle: + specifier: 8.0.0 + version: 8.0.0(prom-client@15.1.3) + express-rate-limit: + specifier: 7.5.0 + version: 7.5.0(express@5.1.0) + fast-glob: + specifier: 'catalog:' + version: 3.2.12 + flat: + specifier: 5.0.2 + version: 5.0.2 + flatted: + specifier: 'catalog:' + version: 3.2.7 + formidable: + specifier: 3.5.4 + version: 3.5.4 + handlebars: + specifier: 4.7.8 + version: 4.7.8 + helmet: + specifier: 8.1.0 + version: 8.1.0 + http-proxy-middleware: + specifier: ^3.0.5 + version: 3.0.5 + infisical-node: + specifier: 1.3.0 + version: 1.3.0 + ioredis: + specifier: 5.3.2 + version: 5.3.2 + isbot: + specifier: 3.6.13 + version: 3.6.13 + json-diff: + specifier: 1.0.6 + version: 1.0.6 + jsonschema: + specifier: 1.4.1 + version: 1.4.1 + jsonwebtoken: + specifier: 'catalog:' + version: 9.0.2 + ldapts: + specifier: 4.2.6 + version: 4.2.6 + lodash: + specifier: 'catalog:' + version: 4.17.21 + luxon: + specifier: 'catalog:' + version: 3.4.4 + mysql2: + specifier: 3.11.0 + version: 3.11.0 + n8n-core: + specifier: workspace:* + version: link:../core + n8n-editor-ui: + specifier: workspace:* + version: link:../frontend/editor-ui + n8n-nodes-base: + specifier: workspace:* + version: link:../nodes-base + n8n-workflow: + specifier: workspace:* + version: link:../workflow + nanoid: + specifier: 'catalog:' + version: 3.3.8 + nodemailer: + specifier: 6.9.9 + version: 6.9.9 + oauth-1.0a: + specifier: 2.2.6 + version: 2.2.6 + open: + specifier: 7.4.2 + version: 7.4.2 + openid-client: + specifier: 6.5.0 + version: 6.5.0 + otpauth: + specifier: 9.1.1 + version: 9.1.1 + p-cancelable: + specifier: 2.1.1 + version: 2.1.1 + p-lazy: + specifier: 3.1.0 + version: 3.1.0 + pg: + specifier: 8.12.0 + version: 8.12.0 + picocolors: + specifier: 'catalog:' + version: 1.0.1 + pkce-challenge: + specifier: 5.0.0 + version: 5.0.0(patch_hash=651e785d0b7bbf5be9210e1e895c39a16dc3ce8a5a3843b4819565fb6e175b90) + posthog-node: + specifier: 3.2.1 + version: 3.2.1 + prom-client: + specifier: 15.1.3 + version: 15.1.3 + psl: + specifier: 1.9.0 + version: 1.9.0 + raw-body: + specifier: 3.0.0 + version: 3.0.0 + reflect-metadata: + specifier: 'catalog:' + version: 0.2.2 + replacestream: + specifier: 4.0.3 + version: 4.0.3 + samlify: + specifier: 2.10.0 + version: 2.10.0 + semver: + specifier: ^7.5.4 + version: 7.6.0 + shelljs: + specifier: 0.8.5 + version: 0.8.5 + simple-git: + specifier: 3.17.0 + version: 3.17.0 + source-map-support: + specifier: 0.5.21 + version: 0.5.21 + sqlite3: + specifier: 5.1.7 + version: 5.1.7 + sshpk: + specifier: 1.18.0 + version: 1.18.0 + swagger-ui-express: + specifier: 5.0.1 + version: 5.0.1(express@5.1.0) + syslog-client: + specifier: 1.1.1 + version: 1.1.1 + uuid: + specifier: 'catalog:' + version: 10.0.0 + validator: + specifier: 13.7.0 + version: 13.7.0 + ws: + specifier: '>=8.17.1' + version: 8.17.1 + xml2js: + specifier: 'catalog:' + version: 0.6.2 + xmllint-wasm: + specifier: 3.0.1 + version: 3.0.1 + xss: + specifier: 'catalog:' + version: 1.0.15 + yamljs: + specifier: 0.3.0 + version: 0.3.0 + yargs-parser: + specifier: 21.1.1 + version: 21.1.1 + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../@n8n/typescript-config + '@parcel/watcher': + specifier: ^2.5.1 + version: 2.5.1 + '@redocly/cli': + specifier: ^1.28.5 + version: 1.28.5(encoding@0.1.13) + '@types/aws4': + specifier: ^1.5.1 + version: 1.11.2 + '@types/bcryptjs': + specifier: ^2.4.2 + version: 2.4.2 + '@types/compression': + specifier: ^1.7.5 + version: 1.7.5 + '@types/convict': + specifier: ^6.1.1 + version: 6.1.1 + '@types/cookie-parser': + specifier: ^1.4.8 + version: 1.4.8(@types/express@5.0.1) + '@types/express': + specifier: 'catalog:' + version: 5.0.1 + '@types/flat': + specifier: ^5.0.5 + version: 5.0.5 + '@types/formidable': + specifier: ^3.4.5 + version: 3.4.5 + '@types/json-diff': + specifier: ^1.0.0 + version: 1.0.0 + '@types/jsonwebtoken': + specifier: 'catalog:' + version: 9.0.9 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + '@types/psl': + specifier: ^1.1.0 + version: 1.1.0 + '@types/replacestream': + specifier: ^4.0.1 + version: 4.0.1 + '@types/shelljs': + specifier: ^0.8.11 + version: 0.8.11 + '@types/sshpk': + specifier: ^1.17.4 + version: 1.17.4 + '@types/superagent': + specifier: ^8.1.9 + version: 8.1.9 + '@types/swagger-ui-express': + specifier: ^4.1.8 + version: 4.1.8 + '@types/syslog-client': + specifier: ^1.1.2 + version: 1.1.2 + '@types/uuid': + specifier: 'catalog:' + version: 10.0.0 + '@types/validator': + specifier: ^13.7.0 + version: 13.7.7 + '@types/ws': + specifier: ^8.18.1 + version: 8.18.1(patch_hash=682b44b740be55e5d7018e6fe335880851dadf2524b6c723c9ed0c29cb2fa7fb) + '@types/xml2js': + specifier: 'catalog:' + version: 0.4.14 + '@types/yamljs': + specifier: ^0.2.31 + version: 0.2.31 + '@types/yargs-parser': + specifier: 21.0.0 + version: 21.0.0 + '@vvo/tzdb': + specifier: ^6.141.0 + version: 6.141.0 + concurrently: + specifier: ^8.2.0 + version: 8.2.0 + ioredis-mock: + specifier: ^8.8.1 + version: 8.8.1(@types/ioredis-mock@8.2.2)(ioredis@5.3.2) + mjml: + specifier: ^4.15.3 + version: 4.15.3(encoding@0.1.13) + openapi-types: + specifier: ^12.1.3 + version: 12.1.3 + ts-essentials: + specifier: ^7.0.3 + version: 7.0.3(typescript@5.9.2) + + packages/core: + dependencies: + '@aws-sdk/client-s3': + specifier: 3.808.0 + version: 3.808.0 + '@langchain/core': + specifier: 'catalog:' + version: 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@n8n/backend-common': + specifier: workspace:^ + version: link:../@n8n/backend-common + '@n8n/client-oauth2': + specifier: workspace:* + version: link:../@n8n/client-oauth2 + '@n8n/config': + specifier: workspace:* + version: link:../@n8n/config + '@n8n/constants': + specifier: workspace:* + version: link:../@n8n/constants + '@n8n/decorators': + specifier: workspace:* + version: link:../@n8n/decorators + '@n8n/di': + specifier: workspace:* + version: link:../@n8n/di + '@sentry/node': + specifier: 'catalog:' + version: 9.42.1 + '@sentry/node-native': + specifier: ^9.42.1 + version: 9.42.1 + axios: + specifier: 'catalog:' + version: 1.8.3 + callsites: + specifier: 'catalog:' + version: 3.1.0 + chardet: + specifier: 2.0.0 + version: 2.0.0 + cron: + specifier: 3.1.7 + version: 3.1.7 + fast-glob: + specifier: 'catalog:' + version: 3.2.12 + file-type: + specifier: 16.5.4 + version: 16.5.4 + form-data: + specifier: 4.0.4 + version: 4.0.4 + htmlparser2: + specifier: ^10.0.0 + version: 10.0.0 + http-proxy-agent: + specifier: 'catalog:' + version: 7.0.2 + https-proxy-agent: + specifier: 'catalog:' + version: 7.0.6 + iconv-lite: + specifier: 'catalog:' + version: 0.6.3 + jsonwebtoken: + specifier: 'catalog:' + version: 9.0.2 + lodash: + specifier: 'catalog:' + version: 4.17.21 + luxon: + specifier: 'catalog:' + version: 3.4.4 + mime-types: + specifier: 2.1.35 + version: 2.1.35 + n8n-workflow: + specifier: workspace:* + version: link:../workflow + nanoid: + specifier: 'catalog:' + version: 3.3.8 + oauth-1.0a: + specifier: 2.2.6 + version: 2.2.6 + p-cancelable: + specifier: 2.1.1 + version: 2.1.1 + picocolors: + specifier: 'catalog:' + version: 1.0.1 + pretty-bytes: + specifier: 5.6.0 + version: 5.6.0 + proxy-from-env: + specifier: ^1.1.0 + version: 1.1.0 + qs: + specifier: 6.11.0 + version: 6.11.0 + ssh2: + specifier: 1.15.0 + version: 1.15.0 + uuid: + specifier: 'catalog:' + version: 10.0.0 + winston: + specifier: 3.14.2 + version: 3.14.2 + xml2js: + specifier: 'catalog:' + version: 0.6.2 + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors + '@n8n/typescript-config': + specifier: workspace:* + version: link:../@n8n/typescript-config + '@types/express': + specifier: 'catalog:' + version: 5.0.1 + '@types/jsonwebtoken': + specifier: 'catalog:' + version: 9.0.9 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + '@types/mime-types': + specifier: ^2.1.0 + version: 2.1.1 + '@types/proxy-from-env': + specifier: ^1.0.4 + version: 1.0.4 + '@types/uuid': + specifier: 'catalog:' + version: 10.0.0 + '@types/xml2js': + specifier: 'catalog:' + version: 0.4.14 + + packages/extensions/insights: + dependencies: + '@n8n/extension-sdk': + specifier: workspace:* + version: link:../../@n8n/extension-sdk + devDependencies: + '@n8n/stylelint-config': + specifier: workspace:* + version: link:../../@n8n/stylelint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../@n8n/typescript-config + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + rimraf: + specifier: 'catalog:' + version: 6.0.1 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-router: + specifier: catalog:frontend + version: 4.5.0(vue@3.5.13(typescript@5.9.2)) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + + packages/frontend/@n8n/chat: + dependencies: + '@n8n/design-system': + specifier: workspace:* + version: link:../design-system + '@vueuse/core': + specifier: catalog:frontend + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + highlight.js: + specifier: catalog:frontend + version: 11.11.1 + markdown-it-link-attributes: + specifier: ^4.0.1 + version: 4.0.1 + uuid: + specifier: 'catalog:' + version: 10.0.0 + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-markdown-render: + specifier: catalog:frontend + version: 2.2.1(vue@3.5.13(typescript@5.9.2)) + devDependencies: + '@iconify-json/mdi': + specifier: ^1.1.54 + version: 1.1.63 + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../../@n8n/eslint-config + '@n8n/storybook': + specifier: workspace:* + version: link:../../../@n8n/storybook + '@n8n/stylelint-config': + specifier: workspace:* + version: link:../../../@n8n/stylelint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../../@n8n/vitest-config + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vitest/coverage-v8': + specifier: 'catalog:' + version: 3.2.4(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + unplugin-icons: + specifier: ^0.19.0 + version: 0.19.0(@vue/compiler-sfc@3.5.13) + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vite-plugin-dts: + specifier: ^4.5.3 + version: 4.5.3(@types/node@20.19.10)(rollup@4.46.2)(typescript@5.9.2)(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + + packages/frontend/@n8n/composables: + devDependencies: + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../../@n8n/eslint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../../@n8n/vitest-config + '@testing-library/jest-dom': + specifier: catalog:frontend + version: 6.6.3 + '@testing-library/user-event': + specifier: catalog:frontend + version: 14.6.1(@testing-library/dom@10.4.0) + '@testing-library/vue': + specifier: catalog:frontend + version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.9.2)) + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + '@vueuse/core': + specifier: catalog:frontend + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + typescript: + specifier: 5.9.2 + version: 5.9.2 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + + packages/frontend/@n8n/design-system: + dependencies: + '@fortawesome/fontawesome-svg-core': + specifier: ^1.2.36 + version: 1.2.36 + '@fortawesome/free-solid-svg-icons': + specifier: ^5.15.4 + version: 5.15.4 + '@fortawesome/vue-fontawesome': + specifier: ^3.0.3 + version: 3.0.3(@fortawesome/fontawesome-svg-core@1.2.36)(vue@3.5.13(typescript@5.9.2)) + '@n8n/composables': + specifier: workspace:* + version: link:../composables + '@n8n/utils': + specifier: workspace:* + version: link:../../../@n8n/utils + '@tanstack/vue-table': + specifier: ^8.21.2 + version: 8.21.2(vue@3.5.13(typescript@5.9.2)) + '@vueuse/core': + specifier: '*' + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + element-plus: + specifier: catalog:frontend + version: 2.4.3(patch_hash=3bc4ea0a42ad52c6bbc3d06c12c2963d55b57d6b5b8d436e46e7fd8ff8c10661)(vue@3.5.13(typescript@5.9.2)) + is-emoji-supported: + specifier: ^0.0.5 + version: 0.0.5 + lodash: + specifier: 'catalog:' + version: 4.17.21 + markdown-it: + specifier: ^13.0.2 + version: 13.0.2 + markdown-it-emoji: + specifier: ^2.0.2 + version: 2.0.2 + markdown-it-link-attributes: + specifier: ^4.0.1 + version: 4.0.1 + markdown-it-task-lists: + specifier: ^2.1.1 + version: 2.1.1 + parse-diff: + specifier: ^0.11.1 + version: 0.11.1 + reka-ui: + specifier: ^2.2.1 + version: 2.2.1(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + sanitize-html: + specifier: 2.12.1 + version: 2.12.1 + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-boring-avatars: + specifier: ^1.3.0 + version: 1.3.0(vue@3.5.13(typescript@5.9.2)) + vue-router: + specifier: catalog:frontend + version: 4.5.0(vue@3.5.13(typescript@5.9.2)) + xss: + specifier: 'catalog:' + version: 1.0.15 + devDependencies: + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../../@n8n/eslint-config + '@n8n/storybook': + specifier: workspace:* + version: link:../../../@n8n/storybook + '@n8n/stylelint-config': + specifier: workspace:* + version: link:../../../@n8n/stylelint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../../@n8n/vitest-config + '@testing-library/jest-dom': + specifier: catalog:frontend + version: 6.6.3 + '@testing-library/user-event': + specifier: catalog:frontend + version: 14.6.1(@testing-library/dom@10.4.0) + '@testing-library/vue': + specifier: catalog:frontend + version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.9.2)) + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + '@types/markdown-it': + specifier: ^13.0.9 + version: 13.0.9 + '@types/markdown-it-emoji': + specifier: ^2.0.2 + version: 2.0.5 + '@types/markdown-it-link-attributes': + specifier: ^3.0.5 + version: 3.0.5 + '@types/sanitize-html': + specifier: ^2.11.0 + version: 2.11.0 + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vitest/coverage-v8': + specifier: 'catalog:' + version: 3.2.4(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + autoprefixer: + specifier: ^10.4.19 + version: 10.4.19(postcss@8.4.49) + postcss: + specifier: ^8.4.38 + version: 8.4.49 + sass: + specifier: ^1.71.1 + version: 1.89.2 + tailwindcss: + specifier: ^3.4.3 + version: 3.4.3(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + unplugin-icons: + specifier: catalog:frontend + version: 0.19.0(@vue/compiler-sfc@3.5.13) + unplugin-vue-components: + specifier: catalog:frontend + version: 0.27.3(@babel/parser@7.27.5)(rollup@4.46.2)(vue@3.5.13(typescript@5.9.2)) + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest-mock-extended: + specifier: 'catalog:' + version: 3.1.0(typescript@5.9.2)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + + packages/frontend/@n8n/i18n: + dependencies: + n8n-workflow: + specifier: workspace:* + version: link:../../../workflow + vue-i18n: + specifier: catalog:frontend + version: 11.1.10(vue@3.5.13(typescript@5.9.2)) + devDependencies: + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../../@n8n/eslint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../../@n8n/vitest-config + '@testing-library/jest-dom': + specifier: catalog:frontend + version: 6.6.3 + '@testing-library/user-event': + specifier: catalog:frontend + version: 14.6.1(@testing-library/dom@10.4.0) + '@testing-library/vue': + specifier: catalog:frontend + version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.9.2)) + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + '@vueuse/core': + specifier: catalog:frontend + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + typescript: + specifier: 5.9.2 + version: 5.9.2 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + + packages/frontend/@n8n/rest-api-client: + dependencies: + '@n8n/api-types': + specifier: workspace:* + version: link:../../../@n8n/api-types + '@n8n/constants': + specifier: workspace:* + version: link:../../../@n8n/constants + '@n8n/permissions': + specifier: workspace:* + version: link:../../../@n8n/permissions + '@n8n/utils': + specifier: workspace:* + version: link:../../../@n8n/utils + axios: + specifier: 'catalog:' + version: 1.8.3 + flatted: + specifier: 'catalog:' + version: 3.2.7 + js-base64: + specifier: 'catalog:' + version: 3.7.2(patch_hash=bb02fdf69495c7b0768791b60ab6e1a002053b8decd19a174f5755691e5c9500) + n8n-workflow: + specifier: workspace:* + version: link:../../../workflow + devDependencies: + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../../@n8n/eslint-config + '@n8n/i18n': + specifier: workspace:* + version: link:../i18n + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../../@n8n/vitest-config + '@testing-library/jest-dom': + specifier: catalog:frontend + version: 6.6.3 + '@testing-library/user-event': + specifier: catalog:frontend + version: 14.6.1(@testing-library/dom@10.4.0) + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + typescript: + specifier: 5.9.2 + version: 5.9.2 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + packages/frontend/@n8n/stores: + dependencies: + n8n-workflow: + specifier: workspace:* + version: link:../../../workflow + devDependencies: + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../../@n8n/eslint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../../@n8n/vitest-config + '@testing-library/jest-dom': + specifier: catalog:frontend + version: 6.6.3 + '@testing-library/user-event': + specifier: catalog:frontend + version: 14.6.1(@testing-library/dom@10.4.0) + '@testing-library/vue': + specifier: catalog:frontend + version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.9.2)) + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vue/tsconfig': + specifier: catalog:frontend + version: 0.7.0(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + '@vueuse/core': + specifier: catalog:frontend + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + pinia: + specifier: catalog:frontend + version: 2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + tsup: + specifier: 'catalog:' + version: 8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2) + typescript: + specifier: 5.9.2 + version: 5.9.2 + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + + packages/frontend/editor-ui: + dependencies: + '@codemirror/autocomplete': + specifier: ^6.16.0 + version: 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/commands': + specifier: ^6.5.0 + version: 6.5.0 + '@codemirror/lang-css': + specifier: ^6.0.1 + version: 6.0.1(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/lang-javascript': + specifier: ^6.2.2 + version: 6.2.2 + '@codemirror/lang-json': + specifier: ^6.0.1 + version: 6.0.1 + '@codemirror/lang-python': + specifier: ^6.1.6 + version: 6.1.6(@codemirror/view@6.26.3) + '@codemirror/language': + specifier: ^6.10.1 + version: 6.10.1 + '@codemirror/lint': + specifier: ^6.8.0 + version: 6.8.0 + '@codemirror/search': + specifier: ^6.5.6 + version: 6.5.6 + '@codemirror/state': + specifier: ^6.4.1 + version: 6.4.1 + '@codemirror/view': + specifier: ^6.26.3 + version: 6.26.3 + '@dagrejs/dagre': + specifier: ^1.1.4 + version: 1.1.4 + '@fortawesome/fontawesome-svg-core': + specifier: '*' + version: 1.2.36 + '@fortawesome/free-regular-svg-icons': + specifier: '*' + version: 6.2.0 + '@fortawesome/free-solid-svg-icons': + specifier: '*' + version: 5.15.4 + '@fortawesome/vue-fontawesome': + specifier: '*' + version: 3.0.3(@fortawesome/fontawesome-svg-core@1.2.36)(vue@3.5.13(typescript@5.9.2)) + '@lezer/common': + specifier: 1.1.0 + version: 1.1.0 + '@n8n/api-types': + specifier: workspace:* + version: link:../../@n8n/api-types + '@n8n/chat': + specifier: workspace:* + version: link:../@n8n/chat + '@n8n/codemirror-lang': + specifier: workspace:* + version: link:../../@n8n/codemirror-lang + '@n8n/codemirror-lang-sql': + specifier: ^1.0.2 + version: 1.0.2(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@n8n/composables': + specifier: workspace:* + version: link:../@n8n/composables + '@n8n/constants': + specifier: workspace:* + version: link:../../@n8n/constants + '@n8n/design-system': + specifier: workspace:* + version: link:../@n8n/design-system + '@n8n/i18n': + specifier: workspace:* + version: link:../@n8n/i18n + '@n8n/permissions': + specifier: workspace:* + version: link:../../@n8n/permissions + '@n8n/rest-api-client': + specifier: workspace:* + version: link:../@n8n/rest-api-client + '@n8n/stores': + specifier: workspace:* + version: link:../@n8n/stores + '@n8n/utils': + specifier: workspace:* + version: link:../../@n8n/utils + '@replit/codemirror-indentation-markers': + specifier: ^6.5.3 + version: 6.5.3(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3) + '@sentry/vue': + specifier: catalog:frontend + version: 9.42.1(pinia@2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) + '@types/semver': + specifier: ^7.7.0 + version: 7.7.0 + '@typescript/vfs': + specifier: ^1.6.0 + version: 1.6.0(typescript@5.9.2) + '@vue-flow/background': + specifier: ^1.3.2 + version: 1.3.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) + '@vue-flow/controls': + specifier: ^1.1.2 + version: 1.1.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) + '@vue-flow/core': + specifier: 1.42.1 + version: 1.42.1(vue@3.5.13(typescript@5.9.2)) + '@vue-flow/minimap': + specifier: ^1.5.2 + version: 1.5.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) + '@vue-flow/node-resizer': + specifier: ^1.4.0 + version: 1.4.0(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) + '@vueuse/components': + specifier: ^10.11.0 + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + '@vueuse/core': + specifier: catalog:frontend + version: 10.11.0(vue@3.5.13(typescript@5.9.2)) + ag-grid-vue3: + specifier: ^34.1.1 + version: 34.1.1(vue@3.5.13(typescript@5.9.2)) + array.prototype.tosorted: + specifier: 1.1.4 + version: 1.1.4 + axios: + specifier: 'catalog:' + version: 1.8.3 + bowser: + specifier: 2.11.0 + version: 2.11.0 + change-case: + specifier: ^5.4.4 + version: 5.4.4 + chart.js: + specifier: ^4.4.0 + version: 4.4.0 + codemirror-lang-html-n8n: + specifier: ^1.0.0 + version: 1.0.0 + comlink: + specifier: ^4.4.1 + version: 4.4.1 + core-js: + specifier: ^3.40.0 + version: 3.40.0 + curlconverter: + specifier: ^4.12.0 + version: 4.12.0 + dateformat: + specifier: ^3.0.3 + version: 3.0.3 + element-plus: + specifier: catalog:frontend + version: 2.4.3(patch_hash=3bc4ea0a42ad52c6bbc3d06c12c2963d55b57d6b5b8d436e46e7fd8ff8c10661)(vue@3.5.13(typescript@5.9.2)) + email-providers: + specifier: ^2.0.1 + version: 2.0.1 + esprima-next: + specifier: 5.8.4 + version: 5.8.4 + fast-json-stable-stringify: + specifier: ^2.1.0 + version: 2.1.0 + file-saver: + specifier: ^2.0.2 + version: 2.0.5 + flatted: + specifier: 'catalog:' + version: 3.2.7 + highlight.js: + specifier: catalog:frontend + version: 11.11.1 + humanize-duration: + specifier: ^3.27.2 + version: 3.27.3 + jsonpath: + specifier: ^1.1.1 + version: 1.1.1 + lodash: + specifier: 'catalog:' + version: 4.17.21 + luxon: + specifier: 'catalog:' + version: 3.4.4 + n8n-workflow: + specifier: workspace:* + version: link:../../workflow + pinia: + specifier: catalog:frontend + version: 2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + prettier: + specifier: ^3.3.3 + version: 3.3.3 + qrcode.vue: + specifier: ^3.3.4 + version: 3.3.4(vue@3.5.13(typescript@5.9.2)) + semver: + specifier: ^7.5.4 + version: 7.7.2 + stream-browserify: + specifier: ^3.0.0 + version: 3.0.0 + timeago.js: + specifier: ^4.0.2 + version: 4.0.2 + typescript: + specifier: 5.9.2 + version: 5.9.2 + uuid: + specifier: 'catalog:' + version: 10.0.0 + v-code-diff: + specifier: ^1.13.1 + version: 1.13.1(patch_hash=21588de80e591bbc1e5a068d9bce311db5254686443652945d2c7887fdafe9d9)(vue@3.5.13(typescript@5.9.2)) + v3-infinite-loading: + specifier: ^1.2.2 + version: 1.2.2 + vue: + specifier: catalog:frontend + version: 3.5.13(typescript@5.9.2) + vue-agile: + specifier: ^2.0.0 + version: 2.0.0 + vue-chartjs: + specifier: ^5.2.0 + version: 5.2.0(chart.js@4.4.0)(vue@3.5.13(typescript@5.9.2)) + vue-component-type-helpers: + specifier: ^2.2.10 + version: 2.2.10 + vue-github-button: + specifier: ^3.1.3 + version: 3.1.3 + vue-i18n: + specifier: catalog:frontend + version: 11.1.10(vue@3.5.13(typescript@5.9.2)) + vue-json-pretty: + specifier: 2.2.4 + version: 2.2.4(vue@3.5.13(typescript@5.9.2)) + vue-markdown-render: + specifier: catalog:frontend + version: 2.2.1(vue@3.5.13(typescript@5.9.2)) + vue-router: + specifier: catalog:frontend + version: 4.5.0(vue@3.5.13(typescript@5.9.2)) + vue-virtual-scroller: + specifier: 2.0.0-beta.8 + version: 2.0.0-beta.8(vue@3.5.13(typescript@5.9.2)) + vue3-touch-events: + specifier: ^4.1.3 + version: 4.1.3 + vuedraggable: + specifier: 4.1.0 + version: 4.1.0(vue@3.5.13(typescript@5.9.2)) + web-tree-sitter: + specifier: 0.24.3 + version: 0.24.3 + xss: + specifier: 'catalog:' + version: 1.0.15 + devDependencies: + '@faker-js/faker': + specifier: ^8.0.2 + version: 8.0.2 + '@iconify/json': + specifier: ^2.2.349 + version: 2.2.354 + '@n8n/eslint-config': + specifier: workspace:* + version: link:../../@n8n/eslint-config + '@n8n/stylelint-config': + specifier: workspace:* + version: link:../../@n8n/stylelint-config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../../@n8n/vitest-config + '@pinia/testing': + specifier: ^0.1.6 + version: 0.1.6(pinia@2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2)) + '@testing-library/vue': + specifier: catalog:frontend + version: 8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.9.2)) + '@types/dateformat': + specifier: ^3.0.0 + version: 3.0.1 + '@types/file-saver': + specifier: ^2.0.1 + version: 2.0.5 + '@types/humanize-duration': + specifier: ^3.27.1 + version: 3.27.1 + '@types/json-schema': + specifier: ^7.0.15 + version: 7.0.15 + '@types/jsonpath': + specifier: ^0.2.0 + version: 0.2.0 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + '@types/uuid': + specifier: 'catalog:' + version: 10.0.0 + '@vitejs/plugin-legacy': + specifier: ^6.0.2 + version: 6.0.2(terser@5.16.1)(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + '@vitejs/plugin-vue': + specifier: catalog:frontend + version: 5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2)) + '@vitest/coverage-v8': + specifier: 'catalog:' + version: 3.2.4(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + browserslist-to-esbuild: + specifier: ^2.1.1 + version: 2.1.1(browserslist@4.24.4) + fake-indexeddb: + specifier: ^6.0.0 + version: 6.0.0 + miragejs: + specifier: ^0.1.48 + version: 0.1.48 + unplugin-icons: + specifier: catalog:frontend + version: 0.19.0(@vue/compiler-sfc@3.5.13) + unplugin-vue-components: + specifier: catalog:frontend + version: 0.27.3(@babel/parser@7.27.5)(rollup@4.46.2)(vue@3.5.13(typescript@5.9.2)) + vite: + specifier: 'catalog:' + version: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vite-plugin-node-polyfills: + specifier: ^0.24.0 + version: 0.24.0(rollup@4.46.2)(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + vite-plugin-static-copy: + specifier: 2.2.0 + version: 2.2.0(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + vite-svg-loader: + specifier: 5.1.0 + version: 5.1.0(vue@3.5.13(typescript@5.9.2)) + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest-mock-extended: + specifier: 'catalog:' + version: 3.1.0(typescript@5.9.2)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + vue-tsc: + specifier: ^2.2.8 + version: 2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2) + z-vue-scan: + specifier: ^0.0.35 + version: 0.0.35(patch_hash=bbd573be7e456224f369aafb4d66374523c4847964a4655a6a1654fd40e8b0f8)(vue@3.5.13(typescript@5.9.2)) + + packages/node-dev: + dependencies: + '@n8n/di': + specifier: workspace:* + version: link:../@n8n/di + '@oclif/core': + specifier: 4.0.7 + version: 4.0.7 + change-case: + specifier: ^4.1.1 + version: 4.1.2 + fast-glob: + specifier: 'catalog:' + version: 3.2.12 + inquirer: + specifier: ^7.0.1 + version: 7.3.3 + n8n-core: + specifier: workspace:* + version: link:../core + n8n-workflow: + specifier: workspace:* + version: link:../workflow + replace-in-file: + specifier: ^6.0.0 + version: 6.3.5 + tmp-promise: + specifier: ^3.0.3 + version: 3.0.3 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../@n8n/typescript-config + '@types/inquirer': + specifier: ^6.5.0 + version: 6.5.0 + + packages/nodes-base: + dependencies: + '@aws-sdk/client-sso-oidc': + specifier: 3.808.0 + version: 3.808.0 + '@kafkajs/confluent-schema-registry': + specifier: 3.8.0 + version: 3.8.0 + '@mozilla/readability': + specifier: 0.6.0 + version: 0.6.0 + '@n8n/config': + specifier: workspace:* + version: link:../@n8n/config + '@n8n/di': + specifier: workspace:* + version: link:../@n8n/di + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors + '@n8n/imap': + specifier: workspace:* + version: link:../@n8n/imap + '@n8n/vm2': + specifier: 3.9.25 + version: 3.9.25 + alasql: + specifier: 4.4.0 + version: 4.4.0(encoding@0.1.13) + amqplib: + specifier: 0.10.6 + version: 0.10.6 + aws4: + specifier: 1.11.0 + version: 1.11.0 + basic-auth: + specifier: 'catalog:' + version: 2.0.1 + change-case: + specifier: 4.1.2 + version: 4.1.2 + cheerio: + specifier: 1.0.0-rc.6 + version: 1.0.0-rc.6 + chokidar: + specifier: 4.0.3 + version: 4.0.3 + cron: + specifier: 3.1.7 + version: 3.1.7 + csv-parse: + specifier: 5.5.0 + version: 5.5.0 + currency-codes: + specifier: 2.1.0 + version: 2.1.0 + eventsource: + specifier: 2.0.2 + version: 2.0.2 + fast-glob: + specifier: 'catalog:' + version: 3.2.12 + fastest-levenshtein: + specifier: ^1.0.16 + version: 1.0.16 + fflate: + specifier: 0.7.4 + version: 0.7.4 + generate-schema: + specifier: 2.6.0 + version: 2.6.0 + get-system-fonts: + specifier: 2.0.2 + version: 2.0.2 + gm: + specifier: 1.25.1 + version: 1.25.1 + html-to-text: + specifier: 9.0.5 + version: 9.0.5 + iconv-lite: + specifier: 'catalog:' + version: 0.6.3 + ics: + specifier: 2.40.0 + version: 2.40.0(patch_hash=163587ad2fa9bc787ed09cd5e958eace08b4aa8aaca651869e9434ba674e158d) + isbot: + specifier: 3.6.13 + version: 3.6.13 + iso-639-1: + specifier: 2.1.15 + version: 2.1.15 + js-nacl: + specifier: 1.4.0 + version: 1.4.0 + jsdom: + specifier: 23.0.1 + version: 23.0.1 + jsonwebtoken: + specifier: 'catalog:' + version: 9.0.2 + kafkajs: + specifier: 2.2.4 + version: 2.2.4 + ldapts: + specifier: 4.2.6 + version: 4.2.6 + lodash: + specifier: 'catalog:' + version: 4.17.21 + lossless-json: + specifier: 1.0.5 + version: 1.0.5 + luxon: + specifier: 'catalog:' + version: 3.4.4 + mailparser: + specifier: 3.6.7 + version: 3.6.7 + minifaker: + specifier: 1.34.1 + version: 1.34.1(patch_hash=bc707e2c34a2464da2c9c93ead33e80fd9883a00434ef64907ddc45208a08b33) + moment-timezone: + specifier: 0.5.48 + version: 0.5.48 + mongodb: + specifier: 6.11.0 + version: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + mqtt: + specifier: 5.7.2 + version: 5.7.2 + mssql: + specifier: 10.0.2 + version: 10.0.2 + mysql2: + specifier: 3.11.0 + version: 3.11.0 + n8n-workflow: + specifier: workspace:* + version: link:../workflow + node-html-markdown: + specifier: 1.2.0 + version: 1.2.0 + node-ssh: + specifier: 13.2.0 + version: 13.2.0 + nodemailer: + specifier: 6.9.9 + version: 6.9.9 + otpauth: + specifier: 9.1.1 + version: 9.1.1 + pdfjs-dist: + specifier: 5.3.31 + version: 5.3.31(patch_hash=421253c8e411cdaef58ba96d2bb44ae0784e1b3e446f5caca50710daa1fa5dcd) + pg: + specifier: 8.12.0 + version: 8.12.0 + pg-promise: + specifier: 11.9.1 + version: 11.9.1 + promise-ftp: + specifier: 1.3.5 + version: 1.3.5(promise-ftp-common@1.1.5) + pyodide: + specifier: 0.28.0 + version: 0.28.0 + redis: + specifier: 4.6.14 + version: 4.6.14 + rfc2047: + specifier: 4.0.1 + version: 4.0.1 + rhea: + specifier: 1.0.24 + version: 1.0.24 + rrule: + specifier: 2.8.1 + version: 2.8.1 + rss-parser: + specifier: 3.13.0 + version: 3.13.0 + sanitize-html: + specifier: 2.12.1 + version: 2.12.1 + semver: + specifier: ^7.5.4 + version: 7.6.0 + showdown: + specifier: 2.1.0 + version: 2.1.0 + simple-git: + specifier: 3.17.0 + version: 3.17.0 + snowflake-sdk: + specifier: 2.1.0 + version: 2.1.0(asn1.js@5.4.1)(encoding@0.1.13) + ssh2-sftp-client: + specifier: 12.0.1 + version: 12.0.1 + tmp-promise: + specifier: 3.0.3 + version: 3.0.3 + ts-ics: + specifier: 1.2.2 + version: 1.2.2(date-fns@2.30.0)(lodash@4.17.21)(zod@3.25.67) + uuid: + specifier: 'catalog:' + version: 10.0.0 + xlsx: + specifier: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz + version: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz + xml2js: + specifier: 'catalog:' + version: 0.6.2 + xmlhttprequest-ssl: + specifier: 3.1.0 + version: 3.1.0 + devDependencies: + '@n8n/typescript-config': + specifier: workspace:* + version: link:../@n8n/typescript-config + '@types/amqplib': + specifier: ^0.10.1 + version: 0.10.1 + '@types/aws4': + specifier: ^1.5.1 + version: 1.11.2 + '@types/basic-auth': + specifier: 'catalog:' + version: 1.1.3 + '@types/cheerio': + specifier: ^0.22.15 + version: 0.22.31 + '@types/eventsource': + specifier: ^1.1.2 + version: 1.1.9 + '@types/express': + specifier: 'catalog:' + version: 5.0.1 + '@types/gm': + specifier: ^1.25.0 + version: 1.25.0 + '@types/html-to-text': + specifier: ^9.0.1 + version: 9.0.4 + '@types/js-nacl': + specifier: ^1.3.0 + version: 1.3.0 + '@types/jsonwebtoken': + specifier: 'catalog:' + version: 9.0.9 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + '@types/lossless-json': + specifier: ^1.0.0 + version: 1.0.1 + '@types/mailparser': + specifier: ^3.4.4 + version: 3.4.4 + '@types/mime-types': + specifier: ^2.1.0 + version: 2.1.1 + '@types/mssql': + specifier: ^9.1.5 + version: 9.1.5 + '@types/nodemailer': + specifier: ^6.4.14 + version: 6.4.14 + '@types/promise-ftp': + specifier: ^1.3.4 + version: 1.3.4 + '@types/rfc2047': + specifier: ^2.0.1 + version: 2.0.1 + '@types/sanitize-html': + specifier: ^2.11.0 + version: 2.11.0 + '@types/showdown': + specifier: ^1.9.4 + version: 1.9.4 + '@types/ssh2-sftp-client': + specifier: ^9.0.5 + version: 9.0.5 + '@types/uuid': + specifier: 'catalog:' + version: 10.0.0 + '@types/xml2js': + specifier: 'catalog:' + version: 0.4.14 + eslint-plugin-n8n-nodes-base: + specifier: ^1.16.3 + version: 1.16.3(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + n8n-core: + specifier: workspace:* + version: link:../core + + packages/testing/containers: + devDependencies: + '@testcontainers/postgresql': + specifier: ^11.0.3 + version: 11.0.3 + '@testcontainers/redis': + specifier: ^11.0.3 + version: 11.0.3 + get-port: + specifier: ^7.1.0 + version: 7.1.0 + testcontainers: + specifier: ^11.0.3 + version: 11.0.3 + + packages/testing/playwright: + devDependencies: + '@currents/playwright': + specifier: ^1.15.3 + version: 1.15.3(magicast@0.3.5) + '@n8n/api-types': + specifier: workspace:^ + version: link:../../@n8n/api-types + '@playwright/test': + specifier: 1.54.2 + version: 1.54.2 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + eslint-plugin-playwright: + specifier: 2.2.2 + version: 2.2.2(eslint@9.29.0(jiti@1.21.7)) + generate-schema: + specifier: 2.6.0 + version: 2.6.0 + n8n: + specifier: workspace:* + version: link:../../cli + n8n-containers: + specifier: workspace:* + version: link:../containers + n8n-core: + specifier: workspace:* + version: link:../../core + n8n-workflow: + specifier: workspace:* + version: link:../../workflow + nanoid: + specifier: 'catalog:' + version: 3.3.8 + tsx: + specifier: 'catalog:' + version: 4.19.3 + + packages/workflow: + dependencies: + '@n8n/errors': + specifier: workspace:^ + version: link:../@n8n/errors + '@n8n/tournament': + specifier: 1.0.6 + version: 1.0.6 + ast-types: + specifier: 0.15.2 + version: 0.15.2 + callsites: + specifier: 'catalog:' + version: 3.1.0 + esprima-next: + specifier: 5.8.4 + version: 5.8.4 + form-data: + specifier: 4.0.4 + version: 4.0.4 + jmespath: + specifier: 0.16.0 + version: 0.16.0 + js-base64: + specifier: 'catalog:' + version: 3.7.2(patch_hash=bb02fdf69495c7b0768791b60ab6e1a002053b8decd19a174f5755691e5c9500) + jssha: + specifier: 3.3.1 + version: 3.3.1 + lodash: + specifier: 'catalog:' + version: 4.17.21 + luxon: + specifier: 'catalog:' + version: 3.4.4 + md5: + specifier: 2.3.0 + version: 2.3.0 + recast: + specifier: 0.22.0 + version: 0.22.0 + title-case: + specifier: 3.0.3 + version: 3.0.3 + transliteration: + specifier: 2.3.5 + version: 2.3.5 + xml2js: + specifier: 'catalog:' + version: 0.6.2 + zod: + specifier: 'catalog:' + version: 3.25.67 + devDependencies: + '@langchain/core': + specifier: 'catalog:' + version: 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@n8n/config': + specifier: workspace:* + version: link:../@n8n/config + '@n8n/typescript-config': + specifier: workspace:* + version: link:../@n8n/typescript-config + '@n8n/vitest-config': + specifier: workspace:* + version: link:../@n8n/vitest-config + '@types/express': + specifier: 'catalog:' + version: 5.0.1 + '@types/jmespath': + specifier: ^0.15.0 + version: 0.15.0 + '@types/lodash': + specifier: 'catalog:' + version: 4.17.17 + '@types/luxon': + specifier: 3.2.0 + version: 3.2.0 + '@types/md5': + specifier: ^2.3.5 + version: 2.3.5 + '@types/xml2js': + specifier: 'catalog:' + version: 0.4.14 + vitest: + specifier: 'catalog:' + version: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vitest-mock-extended: + specifier: 'catalog:' + version: 3.1.0(typescript@5.9.2)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + +packages: + + '@aashutoshrathi/word-wrap@1.2.6': + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + + '@acuminous/bitsyntax@0.1.2': + resolution: {integrity: sha512-29lUK80d1muEQqiUsSo+3A0yP6CdspgC95EnKBMi22Xlwt79i/En4Vr67+cXhU+cZjbti3TgGGC5wy1stIywVQ==} + engines: {node: '>=0.8'} + + '@adobe/css-tools@4.4.0': + resolution: {integrity: sha512-Ff9+ksdQQB3rMncgqDK78uLznstjyfIf2Arnh22pW8kBpLs6rpKDwgnZT46hin5Hl1WzazzK64DOrhSwYpS7bQ==} + + '@alloc/quick-lru@5.2.0': + resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} + engines: {node: '>=10'} + + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} + + '@antfu/install-pkg@0.1.1': + resolution: {integrity: sha512-LyB/8+bSfa0DFGC06zpCEfs89/XoWZwws5ygEa5D+Xsm3OfI+aXQ86VgVG7Acyef+rSZ5HE7J8rrxzrQeM3PjQ==} + + '@antfu/install-pkg@0.3.3': + resolution: {integrity: sha512-nHHsk3NXQ6xkCfiRRC8Nfrg8pU5kkr3P3Y9s9dKqiuRmBD0Yap7fymNDjGFKeWhZQHqqbCS5CfeMy9wtExM24w==} + + '@antfu/utils@0.7.10': + resolution: {integrity: sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==} + + '@anthropic-ai/sdk@0.27.3': + resolution: {integrity: sha512-IjLt0gd3L4jlOfilxVXTifn42FnVffMgDC04RJK1KDZpmkBWLv0XC92MVVmkxrFZNS/7l3xWgP/I3nqtX1sQHw==} + + '@anthropic-ai/sdk@0.56.0': + resolution: {integrity: sha512-SLCB8M8+VMg1cpCucnA1XWHGWqVSZtIWzmOdDOEu3eTFZMB+A0sGZ1ESO5MHDnqrNTXz3safMrWx9x4rMZSOqA==} + hasBin: true + + '@apidevtools/json-schema-ref-parser@12.0.2': + resolution: {integrity: sha512-SoZWqQz4YMKdw4kEMfG5w6QAy+rntjsoAT1FtvZAnVEnCR4uy9YSuDBNoVAFHgzSz0dJbISLLCSrGR2Zd7bcvA==} + engines: {node: '>= 16'} + + '@authenio/xml-encryption@2.0.2': + resolution: {integrity: sha512-cTlrKttbrRHEw3W+0/I609A2Matj5JQaRvfLtEIGZvlN0RaPi+3ANsMeqAyCAVlH/lUIW2tmtBlSMni74lcXeg==} + engines: {node: '>=12'} + + '@aws-crypto/crc32@3.0.0': + resolution: {integrity: sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==} + + '@aws-crypto/crc32@5.2.0': + resolution: {integrity: sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/crc32c@5.2.0': + resolution: {integrity: sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==} + + '@aws-crypto/sha1-browser@5.2.0': + resolution: {integrity: sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==} + + '@aws-crypto/sha256-browser@5.2.0': + resolution: {integrity: sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==} + + '@aws-crypto/sha256-js@5.2.0': + resolution: {integrity: sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==} + engines: {node: '>=16.0.0'} + + '@aws-crypto/supports-web-crypto@5.2.0': + resolution: {integrity: sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==} + + '@aws-crypto/util@3.0.0': + resolution: {integrity: sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==} + + '@aws-crypto/util@5.2.0': + resolution: {integrity: sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==} + + '@aws-sdk/client-bedrock-agent-runtime@3.808.0': + resolution: {integrity: sha512-xHhezgVH11kc2FINuFiKuqMrUFzZAaI5Ia2z3WGwLTG5H8vh6Io1LMrBPn6iNvzB6i1A8fdsQRlw84drEYLzMQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-bedrock-runtime@3.808.0': + resolution: {integrity: sha512-OzjqAlevqurwAPiBGO++90pvpJCyjK6UrQH2av7oTwAwWYpY/wqVCGjch/pkme6G2+o76FjPvUKxfEcBu+5pKQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-cognito-identity@3.808.0': + resolution: {integrity: sha512-M9pdFQ+Efl1O4No6R7uMEOkidKVUiNsmN13EyzuIOGech9g+RF+LgDn3n8+PuC7EIgndQVe6sQ6w39sPQdBkww==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-kendra@3.808.0': + resolution: {integrity: sha512-GsnprCZx8CTssgpup80eZGMcrYJCazNModT62SXQPZgtkvq+RjG89FbLIu7vD0KAoxuJ4AX1v7cui3mQfUqAyQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-s3@3.808.0': + resolution: {integrity: sha512-8RY3Jsm84twmYfiqnMkxznuY6pBX7y2GiuEJVdW1ZJLXRDOiCPkTBHsO6jUwppfMua7HRhO2OTAdWr7aSBAdPw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sagemaker@3.808.0': + resolution: {integrity: sha512-yeAragaWwG0fEiTGu9i22Un+mQC4+LTlO8AVDuwI6P6R9YXx3JujyCadmUIqtMrdeXLknZ+kzZfRfgh+ONSWLQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-secrets-manager@3.808.0': + resolution: {integrity: sha512-uEAnM0bXA1KtsI17Fg/8TG4ereiLY0lPqFlYM58MGDNj3mJlBTCokN4VgLBDvxOyx1rEuWH/1LrgsL9d78Kgsw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso-oidc@3.808.0': + resolution: {integrity: sha512-rIqhqgzhSZlkxlewCm2Dxtf6BRys+OJ2fV63/9s8uHJj7OCMwciYqENIO5rX0wijuOtxnyWB1JfmGPvzXurQsQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/client-sso@3.808.0': + resolution: {integrity: sha512-NxGomD0x9q30LPOXf4x7haOm6l2BJdLEzpiC/bPEXUkf2+4XudMQumMA/hDfErY5hCE19mFAouoO465m3Gl3JQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/core@3.808.0': + resolution: {integrity: sha512-+nTmxJVIPtAarGq9Fd/uU2qU/Ngfb9EntT0/kwXdKKMI0wU9fQNWi10xSTVeqOtzWERbQpOJgBAdta+v3W7cng==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-cognito-identity@3.808.0': + resolution: {integrity: sha512-AbsD/qHyQmyZ+CqJNOaGlnwZaXu8HfndfEiLsIJU/dIf9Wbt7ZtsHSAI/x78awxGohDneMZ6c5vuaRGYL7Z04g==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-env@3.808.0': + resolution: {integrity: sha512-snPRQnwG9PV4kYHQimo1tenf7P974RcdxkHUThzWSxPEV7HpjxTFYNWGlKbOKBhL4AcgeCVeiZ/j+zveF2lEPA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-http@3.808.0': + resolution: {integrity: sha512-gNXjlx3BIUeX7QpVqxbjBxG6zm45lC39QvUIo92WzEJd2OTPcR8TU0OTTsgq/lpn2FrKcISj5qXvhWykd41+CA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-ini@3.808.0': + resolution: {integrity: sha512-Y53CW0pCvFQQEvtVFwExCCMbTg+6NOl8b3YOuZVzPmVmDoW7M1JIn9IScesqoGERXL3VoXny6nYTsZj+vfpp7Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-node@3.808.0': + resolution: {integrity: sha512-lASHlXJ6U5Cpnt9Gs+mWaaSmWcEibr1AFGhp+5UNvfyd+UU2Oiwgbo7rYXygmaVDGkbfXEiTkgYtoNOBSddnWQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-process@3.808.0': + resolution: {integrity: sha512-ZLqp+xsQUatoo8pMozcfLwf/pwfXeIk0w3n0Lo/rWBgT3RcdECmmPCRcnkYBqxHQyE66aS9HiJezZUwMYPqh6w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-sso@3.808.0': + resolution: {integrity: sha512-gWZByAokHX+aps1+syIW/hbKUBrjE2RpPRd/RGQvrBbVVgwsJzsHKsW0zy1B6mgARPG6IahmSUMjNkBCVsiAgw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-provider-web-identity@3.808.0': + resolution: {integrity: sha512-SsGa1Gfa05aJM/qYOtHmfg0OKKW6Fl6kyMCcai63jWDVDYy0QSHcesnqRayJolISkdsVK6bqoWoFcPxiopcFcg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/credential-providers@3.808.0': + resolution: {integrity: sha512-JJvY/gcet+tFw7dGifhTMJ2jfLXCJBR2Tu2rY/ePi+HVUrR//TnWmcm8qGvT1nWiCQ7w9NEhMlJgqKEIM/MkVQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/eventstream-handler-node@3.804.0': + resolution: {integrity: sha512-LZddQVBUCB86tZtLJRhqiDyIqr4hfRxZCcUp1fZSfpBMcf419lgcFRGWMR3J/kCWHQ0G05aor7fSeoeaxskuNQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-bucket-endpoint@3.808.0': + resolution: {integrity: sha512-wEPlNcs8dir9lXbuviEGtSzYSxG/NRKQrJk5ybOc7OpPGHovsN+QhDOdY3lcjOFdwMTiMIG9foUkPz3zBpLB1A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-eventstream@3.804.0': + resolution: {integrity: sha512-3lPxZshOJoKSxIMUq8FCiIre+FZ1g/t+O7DHwOMB6EuzJ8lp5QyUeh1wE5iD/gB8VhWZoj90rGIaWCmT8ccEuA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-expect-continue@3.804.0': + resolution: {integrity: sha512-YW1hySBolALMII6C8y7Z0CRG2UX1dGJjLEBNFeefhO/xP7ZuE1dvnmfJGaEuBMnvc3wkRS63VZ3aqX6sevM1CA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-flexible-checksums@3.808.0': + resolution: {integrity: sha512-NW1yoTYDH2h8ycqMPNkvW3d1XT2vEeXfXclagL2tv82P7Qt7vPXYcObs/YtETvNZ7hdnmOftJ/IJv7YrFC8vtQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-host-header@3.804.0': + resolution: {integrity: sha512-bum1hLVBrn2lJCi423Z2fMUYtsbkGI2s4N+2RI2WSjvbaVyMSv/WcejIrjkqiiMR+2Y7m5exgoKeg4/TODLDPQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-location-constraint@3.804.0': + resolution: {integrity: sha512-AMtKnllIWKgoo7hiJfphLYotEwTERfjVMO2+cKAncz9w1g+bnYhHxiVhJJoR94y047c06X4PU5MsTxvdQ73Znw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-logger@3.804.0': + resolution: {integrity: sha512-w/qLwL3iq0KOPQNat0Kb7sKndl9BtceigINwBU7SpkYWX9L/Lem6f8NPEKrC9Tl4wDBht3Yztub4oRTy/horJA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-recursion-detection@3.804.0': + resolution: {integrity: sha512-zqHOrvLRdsUdN/ehYfZ9Tf8svhbiLLz5VaWUz22YndFv6m9qaAcijkpAOlKexsv3nLBMJdSdJ6GUTAeIy3BZzw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-sdk-s3@3.808.0': + resolution: {integrity: sha512-qvyJTDf0HIsPpZzBUqhNQm5g8stAn2EOwVsaAolsOHuBsdaBAE/s/NgPzazDlSXwdF0ITvsIouUVDCn4fJGJqQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-ssec@3.804.0': + resolution: {integrity: sha512-Tk8jK0gOIUBvEPTz/wwSlP1V70zVQ3QYqsLPAjQRMO6zfOK9ax31dln3MgKvFDJxBydS2tS3wsn53v+brxDxTA==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/middleware-user-agent@3.808.0': + resolution: {integrity: sha512-VckV6l5cf/rL3EtgzSHVTTD4mI0gd8UxDDWbKJsxbQ2bpNPDQG2L1wWGLaolTSzjEJ5f3ijDwQrNDbY9l85Mmg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/nested-clients@3.808.0': + resolution: {integrity: sha512-NparPojwoBul7XPCasy4psFMJbw7Ys4bz8lVB93ljEUD4VV7mM7zwK27Uhz20B8mBFGmFEoAprPsVymJcK9Vcw==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/protocol-http@3.374.0': + resolution: {integrity: sha512-9WpRUbINdGroV3HiZZIBoJvL2ndoWk39OfwxWs2otxByppJZNN14bg/lvCx5e8ggHUti7IBk5rb0nqQZ4m05pg==} + engines: {node: '>=14.0.0'} + deprecated: This package has moved to @smithy/protocol-http + + '@aws-sdk/region-config-resolver@3.808.0': + resolution: {integrity: sha512-9x2QWfphkARZY5OGkl9dJxZlSlYM2l5inFeo2bKntGuwg4A4YUe5h7d5yJ6sZbam9h43eBrkOdumx03DAkQF9A==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4-multi-region@3.808.0': + resolution: {integrity: sha512-lQuEB6JK81eKV7fdiktmRq06Y1KCcJbx9fLf7b19nSfYUbJSn/kfSpHPv/tOkJK2HKnN61JsfG19YU8k4SOU8Q==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/signature-v4@3.374.0': + resolution: {integrity: sha512-2xLJvSdzcZZAg0lsDLUAuSQuihzK0dcxIK7WmfuJeF7DGKJFmp9czQmz5f3qiDz6IDQzvgK1M9vtJSVCslJbyQ==} + engines: {node: '>=14.0.0'} + deprecated: This package has moved to @smithy/signature-v4 + + '@aws-sdk/token-providers@3.808.0': + resolution: {integrity: sha512-PsfKanHmnyO7FxowXqxbLQ+QjURCdSGxyhUiSdZbfvlvme/wqaMyIoMV/i4jppndksoSdPbW2kZXjzOqhQF+ew==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/types@3.804.0': + resolution: {integrity: sha512-A9qnsy9zQ8G89vrPPlNG9d1d8QcKRGqJKqwyGgS0dclJpwy6d1EWgQLIolKPl6vcFpLoe6avLOLxr+h8ur5wpg==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-arn-parser@3.804.0': + resolution: {integrity: sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-endpoints@3.808.0': + resolution: {integrity: sha512-N6Lic98uc4ADB7fLWlzx+1uVnq04VgVjngZvwHoujcRg9YDhIg9dUDiTzD5VZv13g1BrPYmvYP1HhsildpGV6w==} + engines: {node: '>=18.0.0'} + + '@aws-sdk/util-locate-window@3.310.0': + resolution: {integrity: sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==} + engines: {node: '>=14.0.0'} + + '@aws-sdk/util-user-agent-browser@3.804.0': + resolution: {integrity: sha512-KfW6T6nQHHM/vZBBdGn6fMyG/MgX5lq82TDdX4HRQRRuHKLgBWGpKXqqvBwqIaCdXwWHgDrg2VQups6GqOWW2A==} + + '@aws-sdk/util-user-agent-node@3.808.0': + resolution: {integrity: sha512-5UmB6u7RBSinXZAVP2iDgqyeVA/odO2SLEcrXaeTCw8ICXEoqF0K+GL36T4iDbzCBOAIugOZ6OcQX5vH3ck5UA==} + engines: {node: '>=18.0.0'} + peerDependencies: + aws-crt: '>=1.0.0' + peerDependenciesMeta: + aws-crt: + optional: true + + '@aws-sdk/util-utf8-browser@3.259.0': + resolution: {integrity: sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==} + + '@aws-sdk/xml-builder@3.804.0': + resolution: {integrity: sha512-JbGWp36IG9dgxtvC6+YXwt5WDZYfuamWFtVfK6fQpnmL96dx+GUPOXPKRWdw67WLKf2comHY28iX2d3z35I53Q==} + engines: {node: '>=18.0.0'} + + '@azure/abort-controller@1.1.0': + resolution: {integrity: sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==} + engines: {node: '>=12.0.0'} + + '@azure/abort-controller@2.0.0': + resolution: {integrity: sha512-RP/mR/WJchR+g+nQFJGOec+nzeN/VvjlwbinccoqfhTsTHbb8X5+mLDp48kHT0ueyum0BNSwGm0kX0UZuIqTGg==} + engines: {node: '>=18.0.0'} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.6.0': + resolution: {integrity: sha512-3X9wzaaGgRaBCwhLQZDtFp5uLIXCPrGbwJNWPPugvL4xbIGgScv77YzzxToKGLAKvG9amDoofMoP+9hsH1vs1w==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.9.0': + resolution: {integrity: sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==} + engines: {node: '>=18.0.0'} + + '@azure/core-client@1.9.2': + resolution: {integrity: sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==} + engines: {node: '>=18.0.0'} + + '@azure/core-http-compat@1.3.0': + resolution: {integrity: sha512-ZN9avruqbQ5TxopzG3ih3KRy52n8OAbitX3fnZT5go4hzu0J+KVPSzkL+Wt3hpJpdG8WIfg1sBD1tWkgUdEpBA==} + engines: {node: '>=12.0.0'} + + '@azure/core-http-compat@2.1.2': + resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==} + engines: {node: '>=18.0.0'} + + '@azure/core-lro@2.4.0': + resolution: {integrity: sha512-F65+rYkll1dpw3RGm8/SSiSj+/QkMeYDanzS/QKlM1dmuneVyXbO46C88V1MRHluLGdMP6qfD3vDRYALn0z0tQ==} + engines: {node: '>=12.0.0'} + + '@azure/core-paging@1.3.0': + resolution: {integrity: sha512-H6Tg9eBm0brHqLy0OSAGzxIh1t4UL8eZVrSUMJ60Ra9cwq2pOskFqVpz2pYoHDsBY1jZ4V/P8LRGb5D5pmC6rg==} + engines: {node: '>=12.0.0'} + + '@azure/core-rest-pipeline@1.20.0': + resolution: {integrity: sha512-ASoP8uqZBS3H/8N8at/XwFr6vYrRP3syTK0EUjDXQy0Y1/AUS+QeIRThKmTNJO2RggvBBxaXDPM7YoIwDGeA0g==} + engines: {node: '>=18.0.0'} + + '@azure/core-rest-pipeline@1.9.2': + resolution: {integrity: sha512-8rXI6ircjenaLp+PkOFpo37tQ1PQfztZkfVj97BIF3RPxHAsoVSgkJtu3IK/bUEWcb7HzXSoyBe06M7ODRkRyw==} + engines: {node: '>=12.0.0'} + + '@azure/core-tracing@1.0.1': + resolution: {integrity: sha512-I5CGMoLtX+pI17ZdiFJZgxMJApsK6jjfm85hpgp3oazCdq5Wxgh4wMr7ge/TTWW1B5WBuvIOI1fMU/FrOAMKrw==} + engines: {node: '>=12.0.0'} + + '@azure/core-tracing@1.2.0': + resolution: {integrity: sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==} + engines: {node: '>=18.0.0'} + + '@azure/core-util@1.12.0': + resolution: {integrity: sha512-13IyjTQgABPARvG90+N2dXpC+hwp466XCdQXPCRlbWHgd3SJd5Q1VvaBGv6k1BIa4MQm6hAF1UBU1m8QUxV8sQ==} + engines: {node: '>=18.0.0'} + + '@azure/core-util@1.7.0': + resolution: {integrity: sha512-Zq2i3QO6k9DA8vnm29mYM4G8IE9u1mhF1GUabVEqPNX8Lj833gdxQ2NAFxt2BZsfAL+e9cT8SyVN7dFVJ/Hf0g==} + engines: {node: '>=18.0.0'} + + '@azure/core-xml@1.4.5': + resolution: {integrity: sha512-gT4H8mTaSXRz7eGTuQyq1aIJnJqeXzpOe9Ay7Z3FrCouer14CbV3VzjnJrNrQfbBpGBLO9oy8BmrY75A0p53cA==} + engines: {node: '>=18.0.0'} + + '@azure/identity@4.3.0': + resolution: {integrity: sha512-LHZ58/RsIpIWa4hrrE2YuJ/vzG1Jv9f774RfTTAVDZDriubvJ0/S5u4pnw4akJDlS0TiJb6VMphmVUFsWmgodQ==} + engines: {node: '>=18.0.0'} + + '@azure/keyvault-keys@4.6.0': + resolution: {integrity: sha512-0112LegxeR03L8J4k+q6HwBVvrpd9y+oInG0FG3NaHXN7YUubVBon/eb5jFI6edGrvNigpxSR0XIsprFXdkzCQ==} + engines: {node: '>=12.0.0'} + + '@azure/keyvault-secrets@4.8.0': + resolution: {integrity: sha512-RGfpFk6XUXHfWuTAiokOe8t6ej5C4ijf4HVyJUmTfN6VjDBVPvTtoiOi/C5072/ENHScYZFhiYOgIjLgYjfJ/A==} + engines: {node: '>=18.0.0'} + + '@azure/logger@1.0.3': + resolution: {integrity: sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==} + engines: {node: '>=12.0.0'} + + '@azure/msal-browser@3.19.0': + resolution: {integrity: sha512-3unHlh3qWtXbqks/TLq3qGWzxfmwRfk9tXSGvVCcHHnCH5QKtcg/JiDIeP/1B2qFlqnSgtYY0JPLy9EIVoZ7Ag==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@14.13.0': + resolution: {integrity: sha512-b4M/tqRzJ4jGU91BiwCsLTqChveUEyFK3qY2wGfZ0zBswIBZjAxopx5CYt5wzZFKuN15HqRDYXQbztttuIC3nA==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@2.11.0': + resolution: {integrity: sha512-yNRCp4Do4CGSBe1WXq4DWhfa/vYZCUgGrweYLC5my/6eDnYMt0fYGPHuTMw0iRslQGXF3CecGAxXp7ab57V4zg==} + engines: {node: '>=16'} + + '@azure/storage-blob@12.26.0': + resolution: {integrity: sha512-SriLPKezypIsiZ+TtlFfE46uuBIap2HeaQVS78e1P7rz5OSbq0rsd52WE1mC5f7vAeLiXqv7I7oRhL3WFZEw3Q==} + engines: {node: '>=18.0.0'} + + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.26.8': + resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + engines: {node: '>=6.9.0'} + + '@babel/compat-data@7.27.5': + resolution: {integrity: sha512-KiRAp/VoJaWkkte84TvUd9qjdbZAdiqyvMxrGl1N6vzFogKmaLgoM3L1kgtLicp2HP5fBJS8JrZKLVIZGVJAVg==} + engines: {node: '>=6.9.0'} + + '@babel/core@7.26.10': + resolution: {integrity: sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ==} + engines: {node: '>=6.9.0'} + + '@babel/generator@7.26.10': + resolution: {integrity: sha512-rRHT8siFIXQrAYOYqZQVsAr8vJ+cBNqcVAY6m5V8/4QqzaPl+zDBe6cLEPRDuNOUf3ww8RfJVlOyQMoSI+5Ang==} + engines: {node: '>=6.9.0'} + + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.26.5': + resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.26.9': + resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.26.5': + resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-replace-supers@7.26.5': + resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} + engines: {node: '>=6.9.0'} + + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + engines: {node: '>=6.9.0'} + + '@babel/helpers@7.26.10': + resolution: {integrity: sha512-UPYc3SauzZ3JGgj87GgZ89JVdC5dj0AoetR5Bw6wj4niittNyFh6+eOGonYvJ1ao6B8lEa3Q3klS7ADZ53bc5g==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.10': + resolution: {integrity: sha512-6aQR2zGE/QFi8JpDLjUZEPYOs7+mhKXm86VaKFiLP35JQwQb6bwUE+XbvkH0EptsYhbNBSUGaUBLKqxH1xSgsA==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/parser@7.27.5': + resolution: {integrity: sha512-OsQd175SxWkGlzbny8J3K8TnnDD0N3lrIUtB92xwyRpzaenGZhxDvxN/JgU00U3CDZNj9tPuDJ5H0WS4Nt3vKg==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-async-generators@7.8.4': + resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-bigint@7.8.3': + resolution: {integrity: sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-class-properties@7.12.13': + resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-meta@7.10.4': + resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-json-strings@7.8.3': + resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.18.6': + resolution: {integrity: sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4': + resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': + resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-numeric-separator@7.10.4': + resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-object-rest-spread@7.8.3': + resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3': + resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-optional-chaining@7.8.3': + resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-top-level-await@7.14.5': + resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-typescript@7.20.0': + resolution: {integrity: sha512-rd9TkG+u1CExzS4SM1BlMEhMXwFLKVjOAFFCDx9PbX5ycJWDoWMcwdJH9RhkPu1dOgn5TrxLot/Gx6lWFuAUNQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-generator-functions@7.26.8': + resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoped-functions@7.26.5': + resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 + + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-for-of@7.26.9': + resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': + resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.26.8': + resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.26.7': + resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.9': + resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/runtime@7.26.10': + resolution: {integrity: sha512-2WJMeRQPHKSPemqk/awGrAiuFfzBmOIPXKizAsVhWH9YJqLZ0H+HS4c8loHGgW6utJ3E/ejXQUsiGaQy2NZ9Fw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.26.9': + resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.10': + resolution: {integrity: sha512-k8NuDrxr0WrPH5Aupqb2LCVURP/S0vBEn5mK6iH+GIYob66U5EtoZvcdudR2jQ4cmTwhEwW1DLB+Yyas9zjF6A==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.10': + resolution: {integrity: sha512-emqcG3vHrpxUKTrxcblR36dcrcoRDvKmnL/dCL6ZsHaShW80qxCAcNhzQZrpeM765VzEos+xOi4s+r4IXzTwdQ==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.27.6': + resolution: {integrity: sha512-ETyHEk2VHHvl9b9jZP5IHPavHYk57EhanlRRuae9XCpb/j5bDCbPPMOBfCWhnl/7EDJz0jEMCi/RhccCE8r1+Q==} + engines: {node: '>=6.9.0'} + + '@balena/dockerignore@1.0.2': + resolution: {integrity: sha512-wMue2Sy4GAVTk6Ic4tJVcnfdau+gx2EnG7S+uAEe+TWJFqE4YoWN4/H8MSLj4eYJKxGg26lZwboEniNiNwZQ6Q==} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@bcoe/v8-coverage@1.0.2': + resolution: {integrity: sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==} + engines: {node: '>=18'} + + '@biomejs/biome@1.9.0': + resolution: {integrity: sha512-NlWh2F1wbxB3O/wE+aohGL0BziTS6e+6+dyFvpdeqLsbQZY7EsiklFb9W5Xs41U4vEmY7ANgdNp+oVDij6sQdA==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.0': + resolution: {integrity: sha512-2w9v/NRtYSmodx5QWQ49OGcyGKSECdWKbzc7n532Iq5sBhkKk996fd19icT6BuL54f01KFKRCRibAW+A2rg1Kw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.0': + resolution: {integrity: sha512-fBVt8jJQi0zX0SJ1C+tdzUbRpuX/07sgtBXEhunWRkPjdi6W/2S1sYHQ1wKn4OKiRAKfHM2Cf2FNO7hQvY61dA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.0': + resolution: {integrity: sha512-Jy84mZ4vcppdmWMgQWOCfd8qIVC/vHmlaS5gy7GXkdWlBKSQ56YxEXTU58MHTbZ16LwJQpK2IulqRCC/rqWLBA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.0': + resolution: {integrity: sha512-l8U2lcqsl9yKPP5WUdIrKH//C1pWyM2cSUfcTBn6GSvXmsSjBNEdGSdM4Wfne777Oe/9ONaD1Ga53U2HksHHLw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.0': + resolution: {integrity: sha512-N3enoFoIrkB6qJWyYfTiYmFdB1R/Mrij1dd1xBHqxxCKZY9GRkEswRX3F1Uqzo5T+9Iu8nAQobDqI/ygicYy/Q==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.0': + resolution: {integrity: sha512-8jAzjrrJTj510pwq4aVs7ZKkOvEy1D+nzl9DKvrPh4TOyUw5Ie+0EDwXGE2RAkCKHkGNOQBZ78WtIdsATgz5sA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.0': + resolution: {integrity: sha512-AIjwJTGfdWGMRluSQ9pDB29nzce077dfHh0/HMqzztKzgD3spyuo2R9VoaFpbR0hLHPWEH6g6OxxDO7hfkXNkQ==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.0': + resolution: {integrity: sha512-4/4wTjNSoyNkm1SzcUaStDx46baX1VJRXtUoeEHjX9LfedR5N3qwZz5KfrRUnCd2fl5bmXK1CwMqKBkoF6zEiA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@browserbasehq/sdk@2.6.0': + resolution: {integrity: sha512-83iXP5D7xMm8Wyn66TUaUrgoByCmAJuoMoZQI3sGg3JAiMlTfnCIMqyVBoNSaItaPIkaCnrsj6LiusmXV2X9YA==} + + '@browserbasehq/stagehand@1.9.0': + resolution: {integrity: sha512-0wIFnwOVnUEgVkPKW0RX7NoOt98qaRJ8+l1m9ppk1f5E03GtefDQTMiQwwT9WQn163bpZT5cOhyA1I3jZNfFeA==} + peerDependencies: + '@playwright/test': ^1.42.1 + deepmerge: ^4.3.1 + dotenv: ^16.4.5 + openai: ^4.62.1 + zod: ^3.23.8 + + '@cfworker/json-schema@4.1.0': + resolution: {integrity: sha512-/vYKi/qMxwNsuIJ9WGWwM2rflY40ZenK3Kh4uR5vB9/Nz12Y7IUN/Xf4wDA7vzPfw0VNh3b/jz4+MjcVgARKJg==} + + '@chromatic-com/storybook@3.2.5': + resolution: {integrity: sha512-Y388ft6po5FmGKdkcqz3r2sW6aMF5DSBaatC0jvT5bI/Dh27RJw3gPTmXJcZVNjteNl6tpiP3qxZ9MswAk5luw==} + engines: {node: '>=16.0.0', yarn: '>=1.22.18'} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@clack/core@0.5.0': + resolution: {integrity: sha512-p3y0FIOwaYRUPRcMO7+dlmLh8PSRcrjuTndsiA0WAFbWES0mLZlrjVoBRZ9DzkPFJZG6KGkJmoEAY0ZcVWTkow==} + + '@clack/prompts@0.11.0': + resolution: {integrity: sha512-pMN5FcrEw9hUkZA4f+zLlzivQSeQf5dRGJjSUbvVYDLvpKCdQx5OaknvKzgbtXOizhP+SJJJjqEbOe55uKKfAw==} + + '@codemirror/autocomplete@6.16.0': + resolution: {integrity: sha512-P/LeCTtZHRTCU4xQsa89vSKWecYv1ZqwzOd5topheGRf+qtacFgBeIMQi3eL8Kt/BUNvxUWkx+5qP2jlGoARrg==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + '@lezer/common': ^1.0.0 + + '@codemirror/commands@6.5.0': + resolution: {integrity: sha512-rK+sj4fCAN/QfcY9BEzYMgp4wwL/q5aj/VfNSoH1RWPF9XS/dUwBkvlL3hpWgEjOqlpdN1uLC9UkjJ4tmyjJYg==} + + '@codemirror/lang-css@6.0.1': + resolution: {integrity: sha512-rlLq1Dt0WJl+2epLQeAsfqIsx3lGu4HStHCJu95nGGuz2P2fNugbU3dQYafr2VRjM4eMC9HviI6jvS98CNtG5w==} + + '@codemirror/lang-javascript@6.2.2': + resolution: {integrity: sha512-VGQfY+FCc285AhWuwjYxQyUQcYurWlxdKYT4bqwr3Twnd5wP5WSeu52t4tvvuWmljT4EmgEgZCqSieokhtY8hg==} + + '@codemirror/lang-json@6.0.1': + resolution: {integrity: sha512-+T1flHdgpqDDlJZ2Lkil/rLiRy684WMLc74xUnjJH48GQdfJo/pudlTRreZmKwzP8/tGdKf83wlbAdOCzlJOGQ==} + + '@codemirror/lang-python@6.1.6': + resolution: {integrity: sha512-ai+01WfZhWqM92UqjnvorkxosZ2aq2u28kHvr+N3gu012XqY2CThD67JPMHnGceRfXPDBmn1HnyqowdpF57bNg==} + + '@codemirror/language@6.10.1': + resolution: {integrity: sha512-5GrXzrhq6k+gL5fjkAwt90nYDmjlzTIJV8THnxNFtNKWotMIlzzN+CpqxqwXOECnUdOndmSeWntVrVcv5axWRQ==} + + '@codemirror/language@6.9.3': + resolution: {integrity: sha512-qq48pYzoi6ldYWV/52+Z9Ou6QouVI+8YwvxFbUypI33NbjG2UeRHKENRyhwljTTiOqjQ33FjyZj6EREQ9apAOQ==} + + '@codemirror/lint@6.8.0': + resolution: {integrity: sha512-lsFofvaw0lnPRJlQylNsC4IRt/1lI4OD/yYslrSGVndOJfStc58v+8p9dgGiD90ktOfL7OhBWns1ZETYgz0EJA==} + + '@codemirror/search@6.5.6': + resolution: {integrity: sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==} + + '@codemirror/state@6.3.3': + resolution: {integrity: sha512-0wufKcTw2dEwEaADajjHf6hBy1sh3M6V0e+q4JKIhLuiMSe5td5HOWpUdvKth1fT1M9VYOboajoBHpkCd7PG7A==} + + '@codemirror/state@6.4.1': + resolution: {integrity: sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==} + + '@codemirror/view@6.22.3': + resolution: {integrity: sha512-rqnq+Zospwoi3x1vZ8BGV1MlRsaGljX+6qiGYmIpJ++M+LCC+wjfDaPklhwpWSgv7pr/qx29KiAKQBH5+DOn4w==} + + '@codemirror/view@6.26.3': + resolution: {integrity: sha512-gmqxkPALZjkgSxIeeweY/wGQXBfwTUaLs8h7OKtSwfbj9Ct3L11lD+u1sS7XHppxFQoMDiMDp07P9f3I2jWOHw==} + + '@colors/colors@1.5.0': + resolution: {integrity: sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==} + engines: {node: '>=0.1.90'} + + '@colors/colors@1.6.0': + resolution: {integrity: sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA==} + engines: {node: '>=0.1.90'} + + '@commander-js/extra-typings@12.1.0': + resolution: {integrity: sha512-wf/lwQvWAA0goIghcb91dQYpkLBcyhOhQNqG/VgWhnKzgt+UOMvra7EX/2fv70arm5RW+PUHoQHHDa6/p77Eqg==} + peerDependencies: + commander: ~12.1.0 + + '@common.js/is-network-error@1.0.1': + resolution: {integrity: sha512-dkk7FX8L/JLia5pi+IQ11lCw2D6FTmbWL2iWTHgCbP40/deeXgknlkEQcQ/rOkjwQbqp8RZ4ey/anR17K66sqw==} + engines: {node: '>=16'} + + '@cspotcode/source-map-support@0.8.1': + resolution: {integrity: sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==} + engines: {node: '>=12'} + + '@csstools/css-parser-algorithms@3.0.5': + resolution: {integrity: sha512-DaDeUkXZKjdGhgYaHNJTV9pV7Y9B3b644jCLs9Upc3VeNGg6LWARAT6O+Q+/COo+2gg/bM5rhpMAtf70WqfBdQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/css-tokenizer@3.0.4': + resolution: {integrity: sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==} + engines: {node: '>=18'} + + '@csstools/media-query-list-parser@4.0.3': + resolution: {integrity: sha512-HAYH7d3TLRHDOUQK4mZKf9k9Ph/m8Akstg66ywKR4SFAigjs3yBiUeZtFxywiTm5moZMAp/5W/ZuFnNXXYLuuQ==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.5 + '@csstools/css-tokenizer': ^3.0.4 + + '@csstools/selector-specificity@5.0.0': + resolution: {integrity: sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==} + engines: {node: '>=18'} + peerDependencies: + postcss-selector-parser: ^7.0.0 + + '@ctrl/tinycolor@3.6.0': + resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==} + engines: {node: '>=10'} + + '@currents/commit-info@1.0.1-beta.0': + resolution: {integrity: sha512-gkn8E3UC+F4/fCla7QAGMGgGPzxZUL9bU9+4I+KZf9PtCU3DdQCdy7a+er2eg4ewfUzZ2Ic1HcfnHuPkuLPKIw==} + engines: {node: '>=6'} + + '@currents/playwright@1.15.3': + resolution: {integrity: sha512-m2znwZx+y6Z62d03sfC3wv67bqcMzr4HOuh+aG9a6d1rlpbrc8sx+8NzNSAQmuSuBNrrBJXoVSG7G/uj0E2mLA==} + hasBin: true + + '@cypress/grep@4.1.0': + resolution: {integrity: sha512-yUscMiUgM28VDPrNxL19/BhgHZOVrAPrzVsuEcy6mqPqDYt8H8fIaHeeGQPW4CbMu/ry9sehjH561WDDBIXOIg==} + peerDependencies: + cypress: '>=10' + + '@cypress/request@3.0.8': + resolution: {integrity: sha512-h0NFgh1mJmm1nr4jCwkGHwKneVYKghUyWe6TMNrk0B9zsjAJxpg8C4/+BAcmLgCPa1vj1V8rNUaILl+zYRUWBQ==} + engines: {node: '>= 6'} + + '@cypress/xvfb@1.2.4': + resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + + '@dabh/diagnostics@2.0.3': + resolution: {integrity: sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA==} + + '@dagrejs/dagre@1.1.4': + resolution: {integrity: sha512-QUTc54Cg/wvmlEUxB+uvoPVKFazM1H18kVHBQNmK2NbrDR5ihOCR6CXLnDSZzMcSQKJtabPUWridBOlJM3WkDg==} + + '@dagrejs/graphlib@2.2.4': + resolution: {integrity: sha512-mepCf/e9+SKYy1d02/UkvSy6+6MoyXhVxP8lLDfA7BPE1X1d4dR0sZznmbM8/XVJ1GPM+Svnx7Xj6ZweByWUkw==} + engines: {node: '>17.0.0'} + + '@dependents/detective-less@5.0.1': + resolution: {integrity: sha512-Y6+WUMsTFWE5jb20IFP4YGa5IrGY/+a/FbOSjDF/wz9gepU2hwCYSXRHP/vPwBvwcY3SVMASt4yXxbXNXigmZQ==} + engines: {node: '>=18'} + + '@dual-bundle/import-meta-resolve@4.1.0': + resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} + + '@element-plus/icons-vue@2.3.1': + resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==} + peerDependencies: + vue: ^3.2.0 + + '@emnapi/core@1.4.3': + resolution: {integrity: sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g==} + + '@emnapi/runtime@1.4.3': + resolution: {integrity: sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ==} + + '@emnapi/runtime@1.4.5': + resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + + '@emnapi/wasi-threads@1.0.2': + resolution: {integrity: sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA==} + + '@emotion/is-prop-valid@1.2.1': + resolution: {integrity: sha512-61Mf7Ufx4aDxx1xlDeOm8aFFigGHE4z+0sKCa+IHCeZKiyP9RLD0Mmx7m8b9/Cf37f7NAvQOOJAbQQGVr5uERw==} + + '@emotion/memoize@0.8.1': + resolution: {integrity: sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA==} + + '@emotion/unitless@0.8.0': + resolution: {integrity: sha512-VINS5vEYAscRl2ZUDiT3uMPlrFQupiKgHz5AA4bCH1miKBg4qtwkim1qPmJj/4WG6TreYMY111rEFsjupcOKHw==} + + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.20.1': + resolution: {integrity: sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/config-helpers@0.2.3': + resolution: {integrity: sha512-u180qk2Um1le4yf0ruXH3PYFeEZeYC3p/4wCTKrr2U1CmGdzGi3KtY0nuPDH48UJxlKCC5RDzbcbh4X0XlqgHg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.13.0': + resolution: {integrity: sha512-yfkgDw1KR66rkT5A8ci4irzDysN7FRpq3ttJolR88OqQikAWqwA8j5VZyas+vjyBNFIJ7MfybJ9plMILI2UrCw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.15.0': + resolution: {integrity: sha512-b7ePw78tEWWkpgZCDYkbqDOP8dmM6qe+AOC6iuJqlq1R/0ahMAeH3qynpnqKFGkMltrp44ohV4ubGyvLX28tzw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.29.0': + resolution: {integrity: sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.6': + resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.8': + resolution: {integrity: sha512-ZAoA40rNMPwSm+AeHpCq8STiNAwzWLJuP8Xv4CHIc9wv/PSuExjMrmjfYNj682vW0OOiZ1HKxzvjQr9XZIisQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.3.2': + resolution: {integrity: sha512-4SaFZCNfJqvk/kenHpI8xvN42DMaoycy4PzKc5otHxRswww1kAt82OlBuwRVLofCACCTZEcla2Ydxv8scMXaTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@ewoudenberg/difflib@0.1.0': + resolution: {integrity: sha512-OU5P5mJyD3OoWYMWY+yIgwvgNS9cFAU10f+DDuvtogcWQOoJIsQ4Hy2McSfUfhKjq8L0FuWVb4Rt7kgA+XK86A==} + + '@exodus/schemasafe@1.3.0': + resolution: {integrity: sha512-5Aap/GaRupgNx/feGBwLLTVv8OQFfv3pq2lPRzPg9R+IOBnDgghTGW7l7EuVXOvg5cc/xSAlRW8rBrjIC3Nvqw==} + + '@faker-js/faker@8.0.2': + resolution: {integrity: sha512-Uo3pGspElQW91PCvKSIAXoEgAUlRnH29sX2/p89kg7sP1m2PzCufHINd0FhTXQf6DYGiUlVncdSPa2F9wxed2A==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0, npm: '>=6.14.13'} + deprecated: Please update to a newer version + + '@floating-ui/core@1.7.0': + resolution: {integrity: sha512-FRdBLykrPPA6P76GGGqlex/e7fbe0F1ykgxHYNXQsH/iTEtjMj/f9bpY5oQqbjt5VgZvgz/uKXbGuROijh3VLA==} + + '@floating-ui/dom@1.7.0': + resolution: {integrity: sha512-lGTor4VlXcesUMh1cupTUTDoCxMb0V6bm3CnxHzQcw8Eaf1jQbgQX4i02fYgT0vJ82tb5MZ4CZk1LRGkktJCzg==} + + '@floating-ui/utils@0.2.9': + resolution: {integrity: sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==} + + '@floating-ui/vue@1.1.6': + resolution: {integrity: sha512-XFlUzGHGv12zbgHNk5FN2mUB7ROul3oG2ENdTpWdE+qMFxyNxWSRmsoyhiEnpmabNm6WnUvR1OvJfUfN4ojC1A==} + + '@fortawesome/fontawesome-common-types@0.2.36': + resolution: {integrity: sha512-a/7BiSgobHAgBWeN7N0w+lAhInrGxksn13uK7231n2m8EDPE3BMCl9NZLTGrj9ZXfCmC6LM0QLqXidIizVQ6yg==} + engines: {node: '>=6'} + + '@fortawesome/fontawesome-common-types@6.2.0': + resolution: {integrity: sha512-rBevIsj2nclStJ7AxTdfsa3ovHb1H+qApwrxcTVo+NNdeJiB9V75hsKfrkG5AwNcRUNxrPPiScGYCNmLMoh8pg==} + engines: {node: '>=6'} + + '@fortawesome/fontawesome-svg-core@1.2.36': + resolution: {integrity: sha512-YUcsLQKYb6DmaJjIHdDWpBIGCcyE/W+p/LMGvjQem55Mm2XWVAP5kWTMKWLv9lwpCVjpLxPyOMOyUocP1GxrtA==} + engines: {node: '>=6'} + + '@fortawesome/free-regular-svg-icons@6.2.0': + resolution: {integrity: sha512-M1dG+PAmkYMTL9BSUHFXY5oaHwBYfHCPhbJ8qj8JELsc9XCrUJ6eEHWip4q0tE+h9C0DVyFkwIM9t7QYyCpprQ==} + engines: {node: '>=6'} + + '@fortawesome/free-solid-svg-icons@5.15.4': + resolution: {integrity: sha512-JLmQfz6tdtwxoihXLg6lT78BorrFyCf59SAwBM6qV/0zXyVeDygJVb3fk+j5Qat+Yvcxp1buLTY5iDh1ZSAQ8w==} + engines: {node: '>=6'} + + '@fortawesome/vue-fontawesome@3.0.3': + resolution: {integrity: sha512-KCPHi9QemVXGMrfuwf3nNnNo129resAIQWut9QTAMXmXqL2ErABC6ohd2yY5Ipq0CLWNbKHk8TMdTXL/Zf3ZhA==} + peerDependencies: + '@fortawesome/fontawesome-svg-core': ~1 || ~6 + vue: '>= 3.0.0 < 4' + + '@gar/promisify@1.1.3': + resolution: {integrity: sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==} + + '@getzep/zep-cloud@1.0.12': + resolution: {integrity: sha512-bqs8zetYaducNneOq9kU1ciW8IfuiPzGOGqLUwFLv0982bobe4HsZTKeY1/Pt0bQUf6/V1VWYT8vFHSCj/qy4A==} + peerDependencies: + '@langchain/core': '>=0.1.29 <0.4.0' + langchain: '>=0.1.19 <0.4.0' + peerDependenciesMeta: + '@langchain/core': + optional: true + langchain: + optional: true + + '@getzep/zep-js@0.9.0': + resolution: {integrity: sha512-GNaH7EwAisAaMuaUZzOR3hk3yTc7LXrqboPfSN6mZE0rAWGHOjT7V53Hec6yFJqFyXs4/7DsJvZlOcs+gEygNQ==} + engines: {node: '>=18.0.0'} + + '@google-ai/generativelanguage@2.6.0': + resolution: {integrity: sha512-T2tULO1/j4Gs1oYF9OMKCGXHE/m7aCPUonav32iu+sA4nN+acy5Z+Sz6yR4EzL+LkPSfkeW0FOjeRGkl5xtwvw==} + engines: {node: '>=14.0.0'} + + '@google-cloud/paginator@5.0.2': + resolution: {integrity: sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==} + engines: {node: '>=14.0.0'} + + '@google-cloud/projectify@4.0.0': + resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==} + engines: {node: '>=14.0.0'} + + '@google-cloud/promisify@4.0.0': + resolution: {integrity: sha512-Orxzlfb9c67A15cq2JQEyVc7wEsmFBmHjZWZYQMUyJ1qivXyMwdyNOs9odi79hze+2zqdTtu1E19IM/FtqZ10g==} + engines: {node: '>=14'} + + '@google-cloud/resource-manager@5.3.0': + resolution: {integrity: sha512-uWJJf6S2PJL7oZ4ezv16aZl9+IJqPo5GzUv1pZ3/qRiMj13p0ylEgX1+LxBpX71eEPKTwMHoJV2IBBe3EAq7Xw==} + engines: {node: '>=14.0.0'} + + '@google-cloud/secret-manager@5.6.0': + resolution: {integrity: sha512-0daW/OXQEVc6VQKPyJTQNyD+563I/TYQ7GCQJx4dq3lB666R9FUPvqHx9b/o/qQtZ5pfuoCbGZl3krpxgTSW8Q==} + engines: {node: '>=14.0.0'} + + '@google-cloud/storage@7.12.1': + resolution: {integrity: sha512-Z3ZzOnF3YKLuvpkvF+TjQ6lztxcAyTILp+FjKonmVpEwPa9vFvxpZjubLR4sB6bf19i/8HL2AXRjA0YFgHFRmQ==} + engines: {node: '>=14'} + + '@google/generative-ai@0.21.0': + resolution: {integrity: sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==} + engines: {node: '>=18.0.0'} + + '@google/generative-ai@0.24.1': + resolution: {integrity: sha512-MqO+MLfM6kjxcKoy0p1wRzG3b4ZZXtPI+z2IE26UogS2Cm/XHO+7gGRBh6gcJsOiIVoH93UwKvW4HdgiOZCy9Q==} + engines: {node: '>=18.0.0'} + + '@graphql-typed-document-node/core@3.2.0': + resolution: {integrity: sha512-mB9oAsNCm9aM3/SOv4YtBMqZbYj10R7dkq8byBqxGY/ncFwhf2oQzMV+LCRlWoDSEBJ3COiR1yeDvMtsoOsuFQ==} + peerDependencies: + graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 + + '@grpc/grpc-js@1.13.2': + resolution: {integrity: sha512-nnR5nmL6lxF8YBqb6gWvEgLdLh/Fn+kvAdX5hUOnt48sNSb0riz/93ASd2E5gvanPA41X6Yp25bIfGRp1SMb2g==} + engines: {node: '>=12.10.0'} + + '@grpc/proto-loader@0.7.13': + resolution: {integrity: sha512-AiXO/bfe9bmxBjxxtYxFAXGZvMaN5s8kO+jBHAJCON8rJoB5YS/D6X7ZNc6XQkuHNmyl4CYaMI1fJ/Gn27RGGw==} + engines: {node: '>=6'} + hasBin: true + + '@hapi/hoek@9.3.0': + resolution: {integrity: sha512-/c6rf4UJlmHlC9b5BaNvzAcFv7HZ2QHaV0D4/HNlBdvFnvQq8RI4kYdhyPCl7Xj+oWvTWQ8ujhqS53LIgAe6KQ==} + + '@hapi/topo@5.1.0': + resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} + + '@huggingface/inference@4.0.5': + resolution: {integrity: sha512-/Qc45BGrN+FBA3JfdeoHfafxfNShH/dxvOsXbBdcxyxIRIYOyefeiXSlShZGVCaiqYpm+10na28D0YtvjKPTlw==} + engines: {node: '>=18'} + + '@huggingface/jinja@0.5.1': + resolution: {integrity: sha512-yUZLld4lrM9iFxHCwFQ7D1HW2MWMwSbeB7WzWqFYDWK+rEb+WldkLdAJxUPOmgICMHZLzZGVcVjFh3w/YGubng==} + engines: {node: '>=18'} + + '@huggingface/tasks@0.19.34': + resolution: {integrity: sha512-dIl3jyeddCEFJeogJOcbhfIq1tlo3N9K4EAxG/MfkGL0l7hI2kfs91Ut+1h6i09TQM8A9XM91NV7Jz6PgfWE7Q==} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} + engines: {node: '>=18.18'} + + '@ibm-cloud/watsonx-ai@1.1.2': + resolution: {integrity: sha512-0+ClK12jk1Jk28Hwc2BDmKkTXPjFkQOfCKzUk82TsoPwAIEVN+rlM1cny52d3oSMXXbeKorVDmnIEbXPseHiQA==} + engines: {node: '>=18.0.0'} + + '@icetee/ftp@0.3.15': + resolution: {integrity: sha512-RxSa9VjcDWgWCYsaLdZItdCnJj7p4LxggaEk+Y3MP0dHKoxez8ioG07DVekVbZZqccsrL+oPB/N9AzVPxj4blg==} + engines: {node: '>=0.8.0'} + + '@iconify-json/mdi@1.1.63': + resolution: {integrity: sha512-b07dRM5LYdwJqd/lm+1+JDNDNSWHvpZ7ujb73oJxx3lmK1J0giDS0BSc4yia0hixNV0Z2q/4GyxAu/A8XqDnbg==} + + '@iconify/json@2.2.354': + resolution: {integrity: sha512-I7sYXaLfvGw0msuc5p2VdQJ4nthbsqLW8IF9j1jaekUcs/xwGVgs3SHO5lEiFglv0odlkCu26CMbboZMvwkTcw==} + + '@iconify/types@2.0.0': + resolution: {integrity: sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==} + + '@iconify/utils@2.1.25': + resolution: {integrity: sha512-Y+iGko8uv/Fz5bQLLJyNSZGOdMW0G7cnlEX1CiNcKsRXX9cq/y/vwxrIAtLCZhKHr3m0VJmsjVPsvnM4uX8YLg==} + + '@img/sharp-darwin-arm64@0.33.5': + resolution: {integrity: sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [darwin] + + '@img/sharp-darwin-x64@0.33.5': + resolution: {integrity: sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-darwin-arm64@1.0.4': + resolution: {integrity: sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==} + cpu: [arm64] + os: [darwin] + + '@img/sharp-libvips-darwin-x64@1.0.4': + resolution: {integrity: sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==} + cpu: [x64] + os: [darwin] + + '@img/sharp-libvips-linux-arm64@1.0.4': + resolution: {integrity: sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linux-arm@1.0.5': + resolution: {integrity: sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==} + cpu: [arm] + os: [linux] + + '@img/sharp-libvips-linux-s390x@1.0.4': + resolution: {integrity: sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==} + cpu: [s390x] + os: [linux] + + '@img/sharp-libvips-linux-x64@1.0.4': + resolution: {integrity: sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==} + cpu: [x64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + resolution: {integrity: sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==} + cpu: [arm64] + os: [linux] + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + resolution: {integrity: sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==} + cpu: [x64] + os: [linux] + + '@img/sharp-linux-arm64@0.33.5': + resolution: {integrity: sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linux-arm@0.33.5': + resolution: {integrity: sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm] + os: [linux] + + '@img/sharp-linux-s390x@0.33.5': + resolution: {integrity: sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [s390x] + os: [linux] + + '@img/sharp-linux-x64@0.33.5': + resolution: {integrity: sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-linuxmusl-arm64@0.33.5': + resolution: {integrity: sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [arm64] + os: [linux] + + '@img/sharp-linuxmusl-x64@0.33.5': + resolution: {integrity: sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [linux] + + '@img/sharp-wasm32@0.33.5': + resolution: {integrity: sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [wasm32] + + '@img/sharp-win32-ia32@0.33.5': + resolution: {integrity: sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [ia32] + os: [win32] + + '@img/sharp-win32-x64@0.33.5': + resolution: {integrity: sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + cpu: [x64] + os: [win32] + + '@internationalized/date@3.8.1': + resolution: {integrity: sha512-PgVE6B6eIZtzf9Gu5HvJxRK3ufUFz9DhspELuhW/N0GuMGMTLvPQNRkHP2hTuP9lblOk+f+1xi96sPiPXANXAA==} + + '@internationalized/number@3.6.2': + resolution: {integrity: sha512-E5QTOlMg9wo5OrKdHD6edo1JJlIoOsylh0+mbf0evi1tHJwMZfJSaBpGtnJV9N7w3jeiioox9EG/EWRWPh82vg==} + + '@intlify/core-base@11.1.10': + resolution: {integrity: sha512-JhRb40hD93Vk0BgMgDc/xMIFtdXPHoytzeK6VafBNOj6bb6oUZrGamXkBKecMsmGvDQQaPRGG2zpa25VCw8pyw==} + engines: {node: '>= 16'} + + '@intlify/message-compiler@11.1.10': + resolution: {integrity: sha512-TABl3c8tSLWbcD+jkQTyBhrnW251dzqW39MPgEUCsd69Ua3ceoimsbIzvkcPzzZvt1QDxNkenMht+5//V3JvLQ==} + engines: {node: '>= 16'} + + '@intlify/shared@11.1.10': + resolution: {integrity: sha512-6ZW/f3Zzjxfa1Wh0tYQI5pLKUtU+SY7l70pEG+0yd0zjcsYcK0EBt6Fz30Dy0tZhEqemziQQy2aNU3GJzyrMUA==} + engines: {node: '>= 16'} + + '@ioredis/as-callback@3.0.0': + resolution: {integrity: sha512-Kqv1rZ3WbgOrS+hgzJ5xG5WQuhvzzSTRYvNeyPMLOAM78MHSnuKI20JeJGbpuAt//LCuP0vsexZcorqW7kWhJg==} + + '@ioredis/commands@1.2.0': + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} + + '@isaacs/balanced-match@4.0.1': + resolution: {integrity: sha512-yzMTt9lEb8Gv7zRioUilSglI0c0smZ9k5D65677DLWLtWJaXIS3CqcGyUFByYKlnUj6TkjLVs54fBl6+TiGQDQ==} + engines: {node: 20 || >=22} + + '@isaacs/brace-expansion@5.0.0': + resolution: {integrity: sha512-ZT55BDLV0yv0RBm2czMiZ+SqCGO7AvmOM3G/w2xhVPH+te0aKgFjmBvGlL1dH+ql2tgGO3MVrbb3jCKyvpgnxA==} + engines: {node: 20 || >=22} + + '@isaacs/cliui@8.0.2': + resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} + engines: {node: '>=12'} + + '@istanbuljs/load-nyc-config@1.1.0': + resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} + engines: {node: '>=8'} + + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + + '@jest/console@29.6.2': + resolution: {integrity: sha512-0N0yZof5hi44HAR2pPS+ikJ3nzKNoZdVu8FffRf3wy47I7Dm7etk/3KetMdRUqzVd16V4O2m2ISpNTbnIuqy1w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/core@29.6.2': + resolution: {integrity: sha512-Oj+5B+sDMiMWLhPFF+4/DvHOf+U10rgvCLGPHP8Xlsy/7QxS51aU/eBngudHlJXnaWD5EohAgJ4js+T6pa+zOg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/environment@29.6.2': + resolution: {integrity: sha512-AEcW43C7huGd/vogTddNNTDRpO6vQ2zaQNrttvWV18ArBx9Z56h7BIsXkNFJVOO4/kblWEQz30ckw0+L3izc+Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect-utils@29.6.2': + resolution: {integrity: sha512-6zIhM8go3RV2IG4aIZaZbxwpOzz3ZiM23oxAlkquOIole+G6TrbeXnykxWYlqF7kz2HlBjdKtca20x9atkEQYg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/expect@29.6.2': + resolution: {integrity: sha512-m6DrEJxVKjkELTVAztTLyS/7C92Y2b0VYqmDROYKLLALHn8T/04yPs70NADUYPrV3ruI+H3J0iUIuhkjp7vkfg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/fake-timers@29.6.2': + resolution: {integrity: sha512-euZDmIlWjm1Z0lJ1D0f7a0/y5Kh/koLFMUBE5SUYWrmy8oNhJpbTBDAP6CxKnadcMLDoDf4waRYCe35cH6G6PA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/globals@29.6.2': + resolution: {integrity: sha512-cjuJmNDjs6aMijCmSa1g2TNG4Lby/AeU7/02VtpW+SLcZXzOLK2GpN2nLqcFjmhy3B3AoPeQVx7BnyOf681bAw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/reporters@29.6.2': + resolution: {integrity: sha512-sWtijrvIav8LgfJZlrGCdN0nP2EWbakglJY49J1Y5QihcQLfy7ovyxxjJBRXMNltgt4uPtEcFmIMbVshEDfFWw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + '@jest/schemas@29.4.3': + resolution: {integrity: sha512-VLYKXQmtmuEz6IxJsrZwzG9NvtkQsWNnWMsKxqWNu3+CnfzJQhp0WDDKWLVV9hLKr0l3SLLFRqcYHjhtyuDVxg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/schemas@29.6.0': + resolution: {integrity: sha512-rxLjXyJBTL4LQeJW3aKo0M/+GkCOXsO+8i9Iu7eDb6KwtP65ayoDsitrdPBtujxQ88k4wI2FNYfa6TOGwSn6cQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/schemas@29.6.3': + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/source-map@29.6.0': + resolution: {integrity: sha512-oA+I2SHHQGxDCZpbrsCQSoMLb3Bz547JnM+jUr9qEbuw0vQlWZfpPS7CO9J7XiwKicEz9OFn/IYoLkkiUD7bzA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-result@29.6.2': + resolution: {integrity: sha512-3VKFXzcV42EYhMCsJQURptSqnyjqCGbtLuX5Xxb6Pm6gUf1wIRIl+mandIRGJyWKgNKYF9cnstti6Ls5ekduqw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/test-sequencer@29.6.2': + resolution: {integrity: sha512-GVYi6PfPwVejO7slw6IDO0qKVum5jtrJ3KoLGbgBWyr2qr4GaxFV6su+ZAjdTX75Sr1DkMFRk09r2ZVa+wtCGw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/transform@29.6.2': + resolution: {integrity: sha512-ZqCqEISr58Ce3U+buNFJYUktLJZOggfyvR+bZMaiV1e8B1SIvJbwZMrYz3gx/KAPn9EXmOmN+uB08yLCjWkQQg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jest/types@29.6.1': + resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.11': + resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} + + '@jridgewell/trace-mapping@0.3.9': + resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + + '@js-joda/core@5.6.1': + resolution: {integrity: sha512-Xla/d7ZMMR6+zRd6lTio0wRZECfcfFJP7GGe9A9L4tDOlD5CX4YcZ4YZle9w58bBYzssojVapI84RraKWDQZRg==} + + '@js-sdsl/ordered-map@4.4.2': + resolution: {integrity: sha512-iUKgm52T8HOE/makSxjqoWhe95ZJA1/G1sYsGev2JDKUSS14KAgg1LHb+Ba+IPow0xflbnSkOsZcO08C7w1gYw==} + + '@jsdevtools/ez-spawn@3.0.4': + resolution: {integrity: sha512-f5DRIOZf7wxogefH03RjMPMdBF7ADTWUMoOs9kaJo06EfwF+aFhMZMDZxHg/Xe12hptN9xoZjGso2fdjapBRIA==} + engines: {node: '>=10'} + + '@jsdevtools/ono@7.1.3': + resolution: {integrity: sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==} + + '@kafkajs/confluent-schema-registry@3.8.0': + resolution: {integrity: sha512-33iCTcNofWznLAy9YcfPmUVoArTzRHUOl+s79Br3+rRvwtNqRueIRBrPwGuA4tYA24VHux77qekSy0yNTHVoeA==} + + '@keyv/serialize@1.1.0': + resolution: {integrity: sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==} + + '@kurkle/color@0.3.2': + resolution: {integrity: sha512-fuscdXJ9G1qb7W8VdHi+IwRqij3lBkosAm4ydQtEmbY58OzHXqQhvlxqEkoz0yssNVn38bcpRWgA9PP+OGoisw==} + + '@kwsites/file-exists@1.1.1': + resolution: {integrity: sha512-m9/5YGR18lIwxSFDwfE3oA7bWuq9kdau6ugN4H2rJeyhFQZcG9AgSHkQtSD15a8WvTgfz9aikZMrKPHvbpqFiw==} + + '@kwsites/promise-deferred@1.1.1': + resolution: {integrity: sha512-GaHYm+c0O9MjZRu0ongGBRbinu8gVAMd2UZjji6jVmqKtZluZnptXGWhz1E8j8D2HJ3f/yMxKAUC0b+57wncIw==} + + '@langchain/anthropic@0.3.26': + resolution: {integrity: sha512-IRCjkxsMx6MZUZmv/aYX5A9RdIduzdR0eeOc4rX8waBcYP7qmtA/CUTNmTtMSoXfOfJY4s3414bkVNBkmS0+5g==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/aws@0.1.11': + resolution: {integrity: sha512-JNnEmJaJB5TzcniPYGZi6dlpmZyzeyVsS+Za0Ye1DhCpcNmEiWRy514gVcTPQUEl5EcpIR51B/YyowI7zUzVvg==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/cohere@0.3.4': + resolution: {integrity: sha512-TdOaxKtavYxf5iVO20OQHGwDUSvCTp2o6Jc0N26FyBZKP4J5LECOksmL28y6hNI/4duXPTl2IEXsNqlOTc2ssQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/community@0.3.50': + resolution: {integrity: sha512-3tni++DmYV1Xb4AYZmky4he8lMxrTrkOT+/RSVin5gAwEN5e0QEeNmipWpcKRrmDNUsZZxGdYRPN5Wo23hDqBA==} + engines: {node: '>=18'} + peerDependencies: + '@arcjet/redact': ^v1.0.0-alpha.23 + '@aws-crypto/sha256-js': ^5.0.0 + '@aws-sdk/client-bedrock-agent-runtime': ^3.749.0 + '@aws-sdk/client-bedrock-runtime': ^3.749.0 + '@aws-sdk/client-dynamodb': ^3.749.0 + '@aws-sdk/client-kendra': ^3.749.0 + '@aws-sdk/client-lambda': ^3.749.0 + '@aws-sdk/client-s3': ^3.749.0 + '@aws-sdk/client-sagemaker-runtime': ^3.749.0 + '@aws-sdk/client-sfn': ^3.749.0 + '@aws-sdk/credential-provider-node': ^3.388.0 + '@aws-sdk/dsql-signer': '*' + '@azure/search-documents': ^12.0.0 + '@azure/storage-blob': ^12.15.0 + '@browserbasehq/sdk': '*' + '@browserbasehq/stagehand': ^1.0.0 + '@clickhouse/client': ^0.2.5 + '@cloudflare/ai': '*' + '@datastax/astra-db-ts': ^1.0.0 + '@elastic/elasticsearch': ^8.4.0 + '@getmetal/metal-sdk': '*' + '@getzep/zep-cloud': ^1.0.6 + '@getzep/zep-js': ^0.9.0 + '@gomomento/sdk': ^1.51.1 + '@gomomento/sdk-core': ^1.51.1 + '@google-ai/generativelanguage': '*' + '@google-cloud/storage': ^6.10.1 || ^7.7.0 + '@gradientai/nodejs-sdk': ^1.2.0 + '@huggingface/inference': ^4.0.5 + '@huggingface/transformers': ^3.5.2 + '@ibm-cloud/watsonx-ai': '*' + '@lancedb/lancedb': ^0.12.0 + '@langchain/core': '>=0.3.58 <0.4.0' + '@layerup/layerup-security': ^1.5.12 + '@libsql/client': ^0.14.0 + '@mendable/firecrawl-js': ^1.4.3 + '@mlc-ai/web-llm': '*' + '@mozilla/readability': '*' + '@neondatabase/serverless': '*' + '@notionhq/client': ^2.2.10 + '@opensearch-project/opensearch': '*' + '@pinecone-database/pinecone': '*' + '@planetscale/database': ^1.8.0 + '@premai/prem-sdk': ^0.3.25 + '@qdrant/js-client-rest': ^1.15.0 + '@raycast/api': ^1.55.2 + '@rockset/client': ^0.9.1 + '@smithy/eventstream-codec': ^2.0.5 + '@smithy/protocol-http': ^3.0.6 + '@smithy/signature-v4': ^2.0.10 + '@smithy/util-utf8': ^2.0.0 + '@spider-cloud/spider-client': ^0.0.21 + '@supabase/supabase-js': ^2.45.0 + '@tensorflow-models/universal-sentence-encoder': '*' + '@tensorflow/tfjs-converter': '*' + '@tensorflow/tfjs-core': '*' + '@upstash/ratelimit': ^1.1.3 || ^2.0.3 + '@upstash/redis': ^1.20.6 + '@upstash/vector': ^1.1.1 + '@vercel/kv': '*' + '@vercel/postgres': '*' + '@writerai/writer-sdk': ^0.40.2 + '@xata.io/client': ^0.28.0 + '@zilliz/milvus2-sdk-node': '>=2.3.5' + apify-client: ^2.7.1 + assemblyai: ^4.6.0 + azion: ^1.11.1 + better-sqlite3: '>=9.4.0 <12.0.0' + cassandra-driver: ^4.7.2 + cborg: ^4.1.1 + cheerio: ^1.0.0-rc.12 + chromadb: '*' + closevector-common: 0.1.3 + closevector-node: 0.1.6 + closevector-web: 0.1.6 + cohere-ai: '*' + convex: ^1.3.1 + crypto-js: ^4.2.0 + d3-dsv: ^2.0.0 + discord.js: ^14.14.1 + dria: ^0.0.3 + duck-duck-scrape: ^2.2.5 + epub2: ^3.0.1 + fast-xml-parser: '*' + firebase-admin: ^11.9.0 || ^12.0.0 + google-auth-library: '*' + googleapis: '*' + hnswlib-node: ^3.0.0 + html-to-text: ^9.0.5 + ibm-cloud-sdk-core: '*' + ignore: ^5.2.0 + interface-datastore: ^8.2.11 + ioredis: ^5.3.2 + it-all: ^3.0.4 + jsdom: '*' + jsonwebtoken: ^9.0.2 + llmonitor: ^0.5.9 + lodash: ^4.17.21 + lunary: ^0.7.10 + mammoth: ^1.6.0 + mariadb: ^3.4.0 + mem0ai: ^2.1.8 + mongodb: ^6.17.0 + mysql2: ^3.9.8 + neo4j-driver: '*' + notion-to-md: ^3.1.0 + officeparser: ^4.0.4 + openai: '*' + pdf-parse: 1.1.1 + pg: ^8.11.0 + pg-copy-streams: ^6.0.5 + pickleparser: ^0.2.1 + playwright: ^1.32.1 + portkey-ai: ^0.1.11 + puppeteer: '*' + pyodide: '>=0.24.1 <0.27.0' + redis: '*' + replicate: '*' + sonix-speech-recognition: ^2.1.1 + srt-parser-2: ^1.2.3 + typeorm: ^0.3.20 + typesense: ^1.5.3 + usearch: ^1.1.1 + voy-search: 0.6.2 + weaviate-client: ^3.5.2 + web-auth-library: ^1.0.3 + word-extractor: '*' + ws: '>=8.17.1' + youtubei.js: '*' + peerDependenciesMeta: + '@arcjet/redact': + optional: true + '@aws-crypto/sha256-js': + optional: true + '@aws-sdk/client-bedrock-agent-runtime': + optional: true + '@aws-sdk/client-bedrock-runtime': + optional: true + '@aws-sdk/client-dynamodb': + optional: true + '@aws-sdk/client-kendra': + optional: true + '@aws-sdk/client-lambda': + optional: true + '@aws-sdk/client-s3': + optional: true + '@aws-sdk/client-sagemaker-runtime': + optional: true + '@aws-sdk/client-sfn': + optional: true + '@aws-sdk/credential-provider-node': + optional: true + '@aws-sdk/dsql-signer': + optional: true + '@azure/search-documents': + optional: true + '@azure/storage-blob': + optional: true + '@browserbasehq/sdk': + optional: true + '@clickhouse/client': + optional: true + '@cloudflare/ai': + optional: true + '@datastax/astra-db-ts': + optional: true + '@elastic/elasticsearch': + optional: true + '@getmetal/metal-sdk': + optional: true + '@getzep/zep-cloud': + optional: true + '@getzep/zep-js': + optional: true + '@gomomento/sdk': + optional: true + '@gomomento/sdk-core': + optional: true + '@google-ai/generativelanguage': + optional: true + '@google-cloud/storage': + optional: true + '@gradientai/nodejs-sdk': + optional: true + '@huggingface/inference': + optional: true + '@huggingface/transformers': + optional: true + '@lancedb/lancedb': + optional: true + '@layerup/layerup-security': + optional: true + '@libsql/client': + optional: true + '@mendable/firecrawl-js': + optional: true + '@mlc-ai/web-llm': + optional: true + '@mozilla/readability': + optional: true + '@neondatabase/serverless': + optional: true + '@notionhq/client': + optional: true + '@opensearch-project/opensearch': + optional: true + '@pinecone-database/pinecone': + optional: true + '@planetscale/database': + optional: true + '@premai/prem-sdk': + optional: true + '@qdrant/js-client-rest': + optional: true + '@raycast/api': + optional: true + '@rockset/client': + optional: true + '@smithy/eventstream-codec': + optional: true + '@smithy/protocol-http': + optional: true + '@smithy/signature-v4': + optional: true + '@smithy/util-utf8': + optional: true + '@spider-cloud/spider-client': + optional: true + '@supabase/supabase-js': + optional: true + '@tensorflow-models/universal-sentence-encoder': + optional: true + '@tensorflow/tfjs-converter': + optional: true + '@tensorflow/tfjs-core': + optional: true + '@upstash/ratelimit': + optional: true + '@upstash/redis': + optional: true + '@upstash/vector': + optional: true + '@vercel/kv': + optional: true + '@vercel/postgres': + optional: true + '@writerai/writer-sdk': + optional: true + '@xata.io/client': + optional: true + '@zilliz/milvus2-sdk-node': + optional: true + apify-client: + optional: true + assemblyai: + optional: true + azion: + optional: true + better-sqlite3: + optional: true + cassandra-driver: + optional: true + cborg: + optional: true + cheerio: + optional: true + chromadb: + optional: true + closevector-common: + optional: true + closevector-node: + optional: true + closevector-web: + optional: true + cohere-ai: + optional: true + convex: + optional: true + crypto-js: + optional: true + d3-dsv: + optional: true + discord.js: + optional: true + dria: + optional: true + duck-duck-scrape: + optional: true + epub2: + optional: true + fast-xml-parser: + optional: true + firebase-admin: + optional: true + google-auth-library: + optional: true + googleapis: + optional: true + hnswlib-node: + optional: true + html-to-text: + optional: true + ignore: + optional: true + interface-datastore: + optional: true + ioredis: + optional: true + it-all: + optional: true + jsdom: + optional: true + jsonwebtoken: + optional: true + llmonitor: + optional: true + lodash: + optional: true + lunary: + optional: true + mammoth: + optional: true + mariadb: + optional: true + mem0ai: + optional: true + mongodb: + optional: true + mysql2: + optional: true + neo4j-driver: + optional: true + notion-to-md: + optional: true + officeparser: + optional: true + pdf-parse: + optional: true + pg: + optional: true + pg-copy-streams: + optional: true + pickleparser: + optional: true + playwright: + optional: true + portkey-ai: + optional: true + puppeteer: + optional: true + pyodide: + optional: true + redis: + optional: true + replicate: + optional: true + sonix-speech-recognition: + optional: true + srt-parser-2: + optional: true + typeorm: + optional: true + typesense: + optional: true + usearch: + optional: true + voy-search: + optional: true + weaviate-client: + optional: true + web-auth-library: + optional: true + word-extractor: + optional: true + ws: + optional: true + youtubei.js: + optional: true + + '@langchain/core@0.3.68': + resolution: {integrity: sha512-dWPT1h9ObG1TK9uivFTk/pgBULZ6/tBmq8czGUjZjR+1xh9jB4tm/D5FY6o5FklXcEpnAI9peNq2x17Kl9wbMg==} + engines: {node: '>=18'} + + '@langchain/google-common@0.2.13': + resolution: {integrity: sha512-Wd254vAajKxK3bIYPmuFRrk90oN3YIDzwwiO+3ojYKoWP+EBzW3eg3B4f8ofvGXUkJPxEwp/u8ymSsVUElUGlw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/google-gauth@0.2.13': + resolution: {integrity: sha512-JAIMtdmN+6/5aPRz3XUCFQ8+4TP272V8QCLhcyZ9LhDlnmY5DJv+LhzjMk9L5XZx9sRnKRvthVWiAY0Xbs3qAg==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/google-genai@0.2.13': + resolution: {integrity: sha512-ReZe4oNUhPNEijYo9CGA3/CJUwVPaaoYnyplZyYTbUNPAwwRH5aR1e6bppKFBb+ZZeTRCR25JFDIPnXJFfjaBg==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/google-vertexai@0.2.13': + resolution: {integrity: sha512-Y97f0IBr4uWsyJTcDJROWXuu+qh4elSDLK1e6MD+mrxCx+UlgcXCReg4zvEFJzqpBKrfFt+lvXstJ6XTR6Zfyg==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/groq@0.2.3': + resolution: {integrity: sha512-r+yjysG36a0IZxTlCMr655Feumfb4IrOyA0jLLq4l7gEhVyMpYXMwyE6evseyU2LRP+7qOPbGRVpGqAIK0MsUA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/langgraph-checkpoint@0.0.17': + resolution: {integrity: sha512-6b3CuVVYx+7x0uWLG+7YXz9j2iBa+tn2AXvkLxzEvaAsLE6Sij++8PPbS2BZzC+S/FPJdWsz6I5bsrqL0BYrCA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.31 <0.4.0' + + '@langchain/langgraph-sdk@0.0.70': + resolution: {integrity: sha512-O8I12bfeMVz5fOrXnIcK4IdRf50IqyJTO458V56wAIHLNoi4H8/JHM+2M+Y4H2PtslXIGnvomWqlBd0eY5z/Og==} + peerDependencies: + '@langchain/core': '>=0.2.31 <0.4.0' + react: ^18 || ^19 + peerDependenciesMeta: + '@langchain/core': + optional: true + react: + optional: true + + '@langchain/langgraph@0.2.74': + resolution: {integrity: sha512-oHpEi5sTZTPaeZX1UnzfM2OAJ21QGQrwReTV6+QnX7h8nDCBzhtipAw1cK616S+X8zpcVOjgOtJuaJhXa4mN8w==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.36 <0.3.0 || >=0.3.40 < 0.4.0' + zod-to-json-schema: ^3.x + peerDependenciesMeta: + zod-to-json-schema: + optional: true + + '@langchain/mistralai@0.2.1': + resolution: {integrity: sha512-s91BlNcuxaaZGnVukyl81nwGrWpeE0EYiAdEFoBmZwlT4yLpx+QpPhRsGKrTg/Vm7Nscy6Wd8Xy2PJ93wftMdw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/mongodb@0.1.0': + resolution: {integrity: sha512-5yO6aNMkdtxlJBjR8LFuvgDgnM/sbAhYe5AkN8VznPkpEoI6Pq4zjvl8gB3YTVpzdrp38HT5Z40VEwNEDHpwIw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + + '@langchain/ollama@0.2.3': + resolution: {integrity: sha512-1Obe45jgQspqLMBVlayQbGdywFmri8DgmGRdzNu0li56cG5RReYlRCFVDZBRMMvF9JhsP5eXRyfyivtKfITHWQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.58 <0.4.0' + + '@langchain/openai@0.6.7': + resolution: {integrity: sha512-mNT9AdfEvDjlWU76hEl1HgTFkgk7yFKdIRgQz3KXKZhEERXhAwYJNgPFq8+HIpgxYSnc12akZ1uo8WPS98ErPQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.3.68 <0.4.0' + + '@langchain/pinecone@0.2.0': + resolution: {integrity: sha512-O3tWSCIbm1uDLh0J4R0ETmYeRFtQAI2qcSAMC/VW1+xBb+o/IJ5VMyJhGKc4RsmyWE0wG4kOuwfIcCP+XV0clw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + '@pinecone-database/pinecone': ^5.0.2 + + '@langchain/qdrant@0.1.2': + resolution: {integrity: sha512-Bz4VCZeKgL8DYAyfrSOv2zF6AKKr0tISjGwqe77BATmh4ae2Zkc6mHSB0StZCLiur7u+C2weyY+YimmkcZVyeA==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + + '@langchain/redis@0.1.1': + resolution: {integrity: sha512-vI2fvOdCuvTSrtJ4SJpGP4wmV8slqIwwVe2uUN8vMIc2n1ZuaFUr4PYKhqHYAAYkuKNGguC7kNNasiHuN10mpw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + + '@langchain/textsplitters@0.1.0': + resolution: {integrity: sha512-djI4uw9rlkAb5iMhtLED+xJebDdAG935AdP4eRTB02R7OB/act55Bj9wsskhZsvuyQRpO4O1wQOp85s6T6GWmw==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + + '@langchain/weaviate@0.2.0': + resolution: {integrity: sha512-gAtTCxSllR8Z92qAuRn2ir0cop241VmftQHQN+UYtTeoLge8hvZT5k0j55PDVaXTVpjx0ecx6DKv5I/wLRQI+A==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/core': '>=0.2.21 <0.4.0' + + '@lezer/common@1.1.0': + resolution: {integrity: sha512-XPIN3cYDXsoJI/oDWoR2tD++juVrhgIago9xyKhZ7IhGlzdDM9QgC8D8saKNCz5pindGcznFr2HBSsEQSWnSjw==} + + '@lezer/common@1.2.1': + resolution: {integrity: sha512-yemX0ZD2xS/73llMZIK6KplkjIjf2EvAHcinDi/TfJ9hS25G0388+ClHt6/3but0oOxinTcQHJLDXh6w1crzFQ==} + + '@lezer/css@1.1.1': + resolution: {integrity: sha512-mSjx+unLLapEqdOYDejnGBokB5+AiJKZVclmud0MKQOKx3DLJ5b5VTCstgDDknR6iIV4gVrN6euzsCnj0A2gQA==} + + '@lezer/generator@1.7.0': + resolution: {integrity: sha512-IJ16tx3biLKlCXUzcK4v8S10AVa2BSM2rB12rtAL6f1hL2TS/HQQlGCoWRvanlL2J4mCYEEIv9uG7n4kVMkVDA==} + hasBin: true + + '@lezer/highlight@1.1.1': + resolution: {integrity: sha512-duv9D23O9ghEDnnUDmxu+L8pJy4nYo4AbCOHIudUhscrLSazqeJeK1V50EU6ZufWF1zv0KJwu/frFRyZWXxHBQ==} + + '@lezer/html@1.3.0': + resolution: {integrity: sha512-jU/ah8DEoiECLTMouU/X/ujIg6k9WQMIOFMaCLebzaXfrguyGaR3DpTgmk0tbljiuIJ7hlmVJPcJcxGzmCd0Mg==} + + '@lezer/javascript@1.0.2': + resolution: {integrity: sha512-IjOVeIRhM8IuafWNnk+UzRz7p4/JSOKBNINLYLsdSGuJS9Ju7vFdc82AlTt0jgtV5D8eBZf4g0vK4d3ttBNz7A==} + + '@lezer/json@1.0.0': + resolution: {integrity: sha512-zbAuUY09RBzCoCA3lJ1+ypKw5WSNvLqGMtasdW6HvVOqZoCpPr8eWrsGnOVWGKGn8Rh21FnrKRVlJXrGAVUqRw==} + + '@lezer/lr@1.4.0': + resolution: {integrity: sha512-Wst46p51km8gH0ZUmeNrtpRYmdlRHUpN1DQd3GFAyKANi8WVz8c2jHYTf1CVScFaCjQw1iO3ZZdqGDxQPRErTg==} + + '@lezer/python@1.1.5': + resolution: {integrity: sha512-h0DVr6IfrmKUbTc5PeetaC87IZYoHyn5JogsVYW5mRDpVRyEsvaLBMLyEN4Ufc2BKp1c9y2Pkr8ZNLxS8dTLsQ==} + + '@mdx-js/react@3.0.1': + resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + peerDependencies: + '@types/react': '>=16' + react: '>=16' + + '@microsoft/api-extractor-model@7.30.4': + resolution: {integrity: sha512-RobC0gyVYsd2Fao9MTKOfTdBm41P/bCMUmzS5mQ7/MoAKEqy0FOBph3JOYdq4X4BsEnMEiSHc+0NUNmdzxCpjA==} + + '@microsoft/api-extractor@7.52.1': + resolution: {integrity: sha512-m3I5uAwE05orsu3D1AGyisX5KxsgVXB+U4bWOOaX/Z7Ftp/2Cy41qsNhO6LPvSxHBaapyser5dVorF1t5M6tig==} + hasBin: true + + '@microsoft/tsdoc-config@0.17.1': + resolution: {integrity: sha512-UtjIFe0C6oYgTnad4q1QP4qXwLhe6tIpNTRStJ2RZEPIkqQPREAwE5spzVxsdn9UaEMUqhh0AqSx3X4nWAKXWw==} + + '@microsoft/tsdoc@0.15.1': + resolution: {integrity: sha512-4aErSrCR/On/e5G2hDP0wjooqDdauzEbIq8hIkIe5pXV0rtWJZvdCEKL0ykZxex+IxIwBp0eGeV48hQN07dXtw==} + + '@miragejs/pretender-node-polyfill@0.1.2': + resolution: {integrity: sha512-M/BexG/p05C5lFfMunxo/QcgIJnMT2vDVCd00wNqK2ImZONIlEETZwWJu1QtLxtmYlSHlCFl3JNzp0tLe7OJ5g==} + + '@mistralai/mistralai@1.3.4': + resolution: {integrity: sha512-db5UhCXqH0N05XbXMR/2bSiGKIFUzS6p0sI9Nl2XDmJuDZIm+WRGTlsq60ALwhvKpHcQKzN5L58HIneksRrn9g==} + peerDependencies: + zod: '>= 3' + + '@modelcontextprotocol/sdk@1.12.0': + resolution: {integrity: sha512-m//7RlINx1F3sz3KqwY1WWzVgTcYX52HYk4bJ1hkBXV3zccAEth+jRvG8DBRrdaQuRsPAJOx2MH3zaHNCKL7Zg==} + engines: {node: '>=18'} + + '@mongodb-js/saslprep@1.1.9': + resolution: {integrity: sha512-tVkljjeEaAhCqTzajSdgbQ6gE6f3oneVwa3iXR6csiEwXXOFsiC6Uh9iAjAhXPtqa/XMDHWjjeNH/77m/Yq2dw==} + + '@mozilla/readability@0.6.0': + resolution: {integrity: sha512-juG5VWh4qAivzTAeMzvY9xs9HY5rAcr2E4I7tiSSCokRFi7XIZCAu92ZkSTsIj1OPceCifL3cpfteP3pDT9/QQ==} + engines: {node: '>=14.0.0'} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': + resolution: {integrity: sha512-9bfjwDxIDWmmOKusUcqdS4Rw+SETlp9Dy39Xui9BEGEk19dDwH0jhipwFzEff/pFg95NKymc6TOTbRKcWeRqyQ==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2': + resolution: {integrity: sha512-lwriRAHm1Yg4iDf23Oxm9n/t5Zpw1lVnxYU3HnJPTi2lJRkKTrps1KVgvL6m7WvmhYVt/FIsssWay+k45QHeuw==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2': + resolution: {integrity: sha512-FU20Bo66/f7He9Fp9sP2zaJ1Q8L9uLPZQDub/WlUip78JlPeMbVL8546HbZfcW9LNciEXc8d+tThSJjSC+tmsg==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2': + resolution: {integrity: sha512-MOI9Dlfrpi2Cuc7i5dXdxPbFIgbDBGgKR5F2yWEa6FVEtSWncfVNKW5AKjImAQ6CZlBK9tympdsZJ2xThBiWWA==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2': + resolution: {integrity: sha512-gsWNDCklNy7Ajk0vBBf9jEx04RUxuDQfBse918Ww+Qb9HCPoGzS+XJTLe96iN3BVK7grnLiYghP/M4L8VsaHeA==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2': + resolution: {integrity: sha512-O+6Gs8UeDbyFpbSh2CPEz/UOrrdWPTBYNblZK5CxxLisYt4kGX3Sc+czffFonyjiGSq3jWLwJS/CCJc7tBr4sQ==} + cpu: [x64] + os: [win32] + + '@mswjs/interceptors@0.37.5': + resolution: {integrity: sha512-AAwRb5vXFcY4L+FvZ7LZusDuZ0vEe0Zm8ohn1FM6/X7A3bj4mqmkAcGRWuvC2JwSygNwHAAmMnAI73vPHeqsHA==} + engines: {node: '>=18'} + + '@n8n/codemirror-lang-sql@1.0.2': + resolution: {integrity: sha512-sOf/KyewSu3Ikij0CkRtzJJDhRDZcwNCEYl8UdH4U/riL0/XZGcBD7MYofCCcKszanJZiEWRZ2KU1sRp234iMg==} + + '@n8n/localtunnel@3.0.0': + resolution: {integrity: sha512-0t/AUiZ8Oqo7AqYp2q2qmEC2p2lPP4CEdrGRB0J6nSC7ivOtr0p46Pw739UvUfJMU1bIKvzHIc5M9wCjH5Byjg==} + engines: {node: '>=18.0.0'} + + '@n8n/p-retry@6.2.0-2': + resolution: {integrity: sha512-rbnMnSdEwq2yuYMgzOQ4jTXm+oH7yjN/0ISfB/7O6pUcEPsZt9UW60BYfQ1WWHkKa/evI8vgER2zV5/RC1BupQ==} + engines: {node: '>=18.10'} + + '@n8n/tournament@1.0.6': + resolution: {integrity: sha512-UGSxYXXVuOX0yL6HTLBStKYwLIa0+JmRKiSZSCMcM2s2Wax984KWT6XIA1TR/27i7yYpDk1MY14KsTPnuEp27A==} + engines: {node: '>=20.15', pnpm: '>=9.5'} + + '@n8n/typeorm@0.3.20-12': + resolution: {integrity: sha512-Jc+Uys9HXTRq+u2XTqnAqjZVvAPwYH4qy4wRcizN0u7sfBvRGRpeF8ZAoplOGjXPRBG278QKcfVAJ64j/bj+uQ==} + engines: {node: '>=16.13.0'} + hasBin: true + peerDependencies: + '@google-cloud/spanner': ^5.18.0 + '@libsql/client': ^0.4.2 + '@sap/hana-client': ^2.12.25 + '@sentry/node': ^9.42.1 + better-sqlite3: ^7.1.2 || ^8.0.0 || ^9.0.0 + hdb-pool: ^0.1.6 + ioredis: ^5.0.4 + mongodb: ^5.8.0 + mssql: ^9.1.1 || ^10.0.1 + mysql2: ^2.2.5 || ^3.0.1 + oracledb: ^6.3.0 + pg: ^8.5.1 + pg-native: ^3.0.0 + pg-query-stream: ^4.0.0 + redis: ^3.1.1 || ^4.0.0 + sql.js: ^1.4.0 + sqlite3: ^5.0.3 + ts-node: ^10.7.0 + typeorm-aurora-data-api-driver: ^2.0.0 + peerDependenciesMeta: + '@google-cloud/spanner': + optional: true + '@libsql/client': + optional: true + '@sap/hana-client': + optional: true + '@sentry/node': + optional: true + better-sqlite3: + optional: true + hdb-pool: + optional: true + ioredis: + optional: true + mongodb: + optional: true + mssql: + optional: true + mysql2: + optional: true + oracledb: + optional: true + pg: + optional: true + pg-native: + optional: true + pg-query-stream: + optional: true + redis: + optional: true + sql.js: + optional: true + sqlite3: + optional: true + ts-node: + optional: true + typeorm-aurora-data-api-driver: + optional: true + + '@n8n/vm2@3.9.25': + resolution: {integrity: sha512-qoGLFzyHBW7HKpwXkl05QKsIh3GkDw6lOiTOWYlUDnOIQ1b7EgM+O5EMjrMGy7r+kz52+Q7o6GLxBIcxVI8rEg==} + engines: {node: '>=18.10', pnpm: '>=9.6'} + hasBin: true + + '@n8n_io/ai-assistant-sdk@1.15.0': + resolution: {integrity: sha512-M/bNnxyVGxwLGU/mzQrZOkZK4NkR9x8cUMZHfVJlv1z6YTlHX56BYH+0jSlb2c15DEwPkku9l0RFVLTTt0ExQQ==} + engines: {node: '>=20.15', pnpm: '>=8.14'} + + '@n8n_io/license-sdk@2.23.0': + resolution: {integrity: sha512-WsABHT9yDgz672It1T/B9jfl3EDcCQ7b68HaiB2q0k5u2vIKyDa9HYQQUlPbYoqhzj+kaEpaTVcQt734AvdxbQ==} + engines: {node: '>=18.12.1'} + + '@n8n_io/riot-tmpl@4.0.1': + resolution: {integrity: sha512-/zdRbEfTFjsm1NqnpPQHgZTkTdbp5v3VUxGeMA9098sps8jRCTraQkc3AQstJgHUm7ylBXJcIVhnVeLUMWAfwQ==} + + '@napi-rs/canvas-android-arm64@0.1.70': + resolution: {integrity: sha512-I/YOuQ0wbkVYxVaYtCgN42WKTYxNqFA0gTcTrHIGG1jfpDSyZWII/uHcjOo4nzd19io6Y4+/BqP8E5hJgf9OmQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [android] + + '@napi-rs/canvas-darwin-arm64@0.1.70': + resolution: {integrity: sha512-4pPGyXetHIHkw2TOJHujt3mkCP8LdDu8+CT15ld9Id39c752RcI0amDHSuMLMQfAjvusA9B5kKxazwjMGjEJpQ==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [darwin] + + '@napi-rs/canvas-darwin-x64@0.1.70': + resolution: {integrity: sha512-+2N6Os9LbkmDMHL+raknrUcLQhsXzc5CSXRbXws9C3pv/mjHRVszQ9dhFUUe9FjfPhCJznO6USVdwOtu7pOrzQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [darwin] + + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.70': + resolution: {integrity: sha512-QjscX9OaKq/990sVhSMj581xuqLgiaPVMjjYvWaCmAJRkNQ004QfoSMEm3FoTqM4DRoquP8jvuEXScVJsc1rqQ==} + engines: {node: '>= 10'} + cpu: [arm] + os: [linux] + + '@napi-rs/canvas-linux-arm64-gnu@0.1.70': + resolution: {integrity: sha512-LNakMOwwqwiHIwMpnMAbFRczQMQ7TkkMyATqFCOtUJNlE6LPP/QiUj/mlFrNbUn/hctqShJ60gWEb52ZTALbVw==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/canvas-linux-arm64-musl@0.1.70': + resolution: {integrity: sha512-wBTOllEYNfJCHOdZj9v8gLzZ4oY3oyPX8MSRvaxPm/s7RfEXxCyZ8OhJ5xAyicsDdbE5YBZqdmaaeP5+xKxvtg==} + engines: {node: '>= 10'} + cpu: [arm64] + os: [linux] + + '@napi-rs/canvas-linux-riscv64-gnu@0.1.70': + resolution: {integrity: sha512-GVUUPC8TuuFqHip0rxHkUqArQnlzmlXmTEBuXAWdgCv85zTCFH8nOHk/YCF5yo0Z2eOm8nOi90aWs0leJ4OE5Q==} + engines: {node: '>= 10'} + cpu: [riscv64] + os: [linux] + + '@napi-rs/canvas-linux-x64-gnu@0.1.70': + resolution: {integrity: sha512-/kvUa2lZRwGNyfznSn5t1ShWJnr/m5acSlhTV3eXECafObjl0VBuA1HJw0QrilLpb4Fe0VLywkpD1NsMoVDROQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/canvas-linux-x64-musl@0.1.70': + resolution: {integrity: sha512-aqlv8MLpycoMKRmds7JWCfVwNf1fiZxaU7JwJs9/ExjTD8lX2KjsO7CTeAj5Cl4aEuzxUWbJPUUE2Qu9cZ1vfg==} + engines: {node: '>= 10'} + cpu: [x64] + os: [linux] + + '@napi-rs/canvas-win32-x64-msvc@0.1.70': + resolution: {integrity: sha512-Q9QU3WIpwBTVHk4cPfBjGHGU4U0llQYRXgJtFtYqqGNEOKVN4OT6PQ+ve63xwIPODMpZ0HHyj/KLGc9CWc3EtQ==} + engines: {node: '>= 10'} + cpu: [x64] + os: [win32] + + '@napi-rs/canvas@0.1.70': + resolution: {integrity: sha512-nD6NGa4JbNYSZYsTnLGrqe9Kn/lCkA4ybXt8sx5ojDqZjr2i0TWAHxx/vhgfjX+i3hCdKWufxYwi7CfXqtITSA==} + engines: {node: '>= 10'} + + '@napi-rs/wasm-runtime@0.2.11': + resolution: {integrity: sha512-9DPkXtvHydrcOsopiYpUgPHpmj0HWZKMUnL2dZqpvC42lsratuBG06V5ipyno0fUek5VlFsNQ+AcFATSrJXgMA==} + + '@ngneat/falso@7.4.0': + resolution: {integrity: sha512-7MzPP0YGNHDrohf/epmz6SVIjHGhKyHbh0bm+iZ1z/7KVW4xZi9Dx6Tl9NMPy6a4lWh/t3WXSsCGkgkuJ/eroQ==} + + '@noble/hashes@1.8.0': + resolution: {integrity: sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A==} + engines: {node: ^14.21.3 || >=16} + + '@nodelib/fs.scandir@2.1.5': + resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} + engines: {node: '>= 8'} + + '@nodelib/fs.stat@2.0.5': + resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} + engines: {node: '>= 8'} + + '@nodelib/fs.walk@1.2.8': + resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} + engines: {node: '>= 8'} + + '@npmcli/fs@1.1.1': + resolution: {integrity: sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==} + + '@npmcli/move-file@1.1.2': + resolution: {integrity: sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==} + engines: {node: '>=10'} + deprecated: This functionality has been moved to @npmcli/fs + + '@oclif/core@4.0.7': + resolution: {integrity: sha512-sU4Dx+RXCWAkrMw8tQFYAL6VfcHYKLPxVC9iKfgTXr4aDhcCssDwrbgpx0Di1dnNxvQlDGUhuCEInZuIY/nNfw==} + engines: {node: '>=18.0.0'} + + '@oclif/core@4.5.2': + resolution: {integrity: sha512-eQcKyrEcDYeZJKu4vUWiu0ii/1Gfev6GF4FsLSgNez5/+aQyAUCjg3ZWlurf491WiYZTXCWyKAxyPWk8DKv2MA==} + engines: {node: '>=18.0.0'} + + '@oclif/test@4.1.13': + resolution: {integrity: sha512-pulrTiJRhoAKizFf6y5WeHvM2JyoRiZKV0H8qqYEoE0UHDKqInNmfGJyp8Ip6lTVQeMv1U8YCAXOS/HiWPVWeg==} + engines: {node: '>=18.0.0'} + peerDependencies: + '@oclif/core': '>= 3.0.0' + + '@one-ini/wasm@0.1.1': + resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==} + + '@open-draft/deferred-promise@2.2.0': + resolution: {integrity: sha512-CecwLWx3rhxVQF6V4bAgPS5t+So2sTbPgAzafKkVizyi7tlwpcFpdFqq+wqF2OwNBmqFuu6tOyouTuxgpMfzmA==} + + '@open-draft/logger@0.3.0': + resolution: {integrity: sha512-X2g45fzhxH238HKO4xbSr7+wBS8Fvw6ixhTDuvLd5mqh6bJJCFAPwU9mPDxbcrRtfxv4u5IHCEH77BmxvXmmxQ==} + + '@open-draft/until@2.1.0': + resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} + + '@opentelemetry/api-logs@0.57.2': + resolution: {integrity: sha512-uIX52NnTM0iBh84MShlpouI7UKqkZ7MrUszTmaypHBu4r7NofznSnQRfJ+uUeDtQDj6w8eFGg5KBLDAwAPz1+A==} + engines: {node: '>=14'} + + '@opentelemetry/api@1.9.0': + resolution: {integrity: sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@1.30.1': + resolution: {integrity: sha512-s5vvxXPVdjqS3kTLKMeBMvop9hbWkwzBpu+mUO2M7sZtlkyDJGwFe33wRKnbaYDo8ExRVBIIdwIGrqpxHuKttA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@1.30.1': + resolution: {integrity: sha512-OOCM2C/QIURhJMuKaekP3TRBxBKxG/TWWA0TL2J6nXUtDnuCtccy49LUJF8xPFXMX+0LMcxFpCo8M9cGY1W6rQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/instrumentation-amqplib@0.46.1': + resolution: {integrity: sha512-AyXVnlCf/xV3K/rNumzKxZqsULyITJH6OVLiW6730JPRqWA7Zc9bvYoVNpN6iOpTU8CasH34SU/ksVJmObFibQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-connect@0.43.1': + resolution: {integrity: sha512-ht7YGWQuV5BopMcw5Q2hXn3I8eG8TH0J/kc/GMcW4CuNTgiP6wCu44BOnucJWL3CmFWaRHI//vWyAhaC8BwePw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-dataloader@0.16.1': + resolution: {integrity: sha512-K/qU4CjnzOpNkkKO4DfCLSQshejRNAJtd4esgigo/50nxCB6XCyi1dhAblUHM9jG5dRm8eu0FB+t87nIo99LYQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-express@0.47.1': + resolution: {integrity: sha512-QNXPTWteDclR2B4pDFpz0TNghgB33UMjUt14B+BZPmtH1MwUFAfLHBaP5If0Z5NZC+jaH8oF2glgYjrmhZWmSw==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-fs@0.19.1': + resolution: {integrity: sha512-6g0FhB3B9UobAR60BGTcXg4IHZ6aaYJzp0Ki5FhnxyAPt8Ns+9SSvgcrnsN2eGmk3RWG5vYycUGOEApycQL24A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-generic-pool@0.43.1': + resolution: {integrity: sha512-M6qGYsp1cURtvVLGDrPPZemMFEbuMmCXgQYTReC/IbimV5sGrLBjB+/hANUpRZjX67nGLdKSVLZuQQAiNz+sww==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-graphql@0.47.1': + resolution: {integrity: sha512-EGQRWMGqwiuVma8ZLAZnExQ7sBvbOx0N/AE/nlafISPs8S+QtXX+Viy6dcQwVWwYHQPAcuY3bFt3xgoAwb4ZNQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-hapi@0.45.2': + resolution: {integrity: sha512-7Ehow/7Wp3aoyCrZwQpU7a2CnoMq0XhIcioFuKjBb0PLYfBfmTsFTUyatlHu0fRxhwcRsSQRTvEhmZu8CppBpQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-http@0.57.2': + resolution: {integrity: sha512-1Uz5iJ9ZAlFOiPuwYg29Bf7bJJc/GeoeJIFKJYQf67nTVKFe8RHbEtxgkOmK4UGZNHKXcpW4P8cWBYzBn1USpg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-ioredis@0.47.1': + resolution: {integrity: sha512-OtFGSN+kgk/aoKgdkKQnBsQFDiG8WdCxu+UrHr0bXScdAmtSzLSraLo7wFIb25RVHfRWvzI5kZomqJYEg/l1iA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-kafkajs@0.7.1': + resolution: {integrity: sha512-OtjaKs8H7oysfErajdYr1yuWSjMAectT7Dwr+axIoZqT9lmEOkD/H/3rgAs8h/NIuEi2imSXD+vL4MZtOuJfqQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-knex@0.44.1': + resolution: {integrity: sha512-U4dQxkNhvPexffjEmGwCq68FuftFK15JgUF05y/HlK3M6W/G2iEaACIfXdSnwVNe9Qh0sPfw8LbOPxrWzGWGMQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-koa@0.47.1': + resolution: {integrity: sha512-l/c+Z9F86cOiPJUllUCt09v+kICKvT+Vg1vOAJHtHPsJIzurGayucfCMq2acd/A/yxeNWunl9d9eqZ0G+XiI6A==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-lru-memoizer@0.44.1': + resolution: {integrity: sha512-5MPkYCvG2yw7WONEjYj5lr5JFehTobW7wX+ZUFy81oF2lr9IPfZk9qO+FTaM0bGEiymwfLwKe6jE15nHn1nmHg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongodb@0.52.0': + resolution: {integrity: sha512-1xmAqOtRUQGR7QfJFfGV/M2kC7wmI2WgZdpru8hJl3S0r4hW0n3OQpEHlSGXJAaNFyvT+ilnwkT+g5L4ljHR6g==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mongoose@0.46.1': + resolution: {integrity: sha512-3kINtW1LUTPkiXFRSSBmva1SXzS/72we/jL22N+BnF3DFcoewkdkHPYOIdAAk9gSicJ4d5Ojtt1/HeibEc5OQg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql2@0.45.2': + resolution: {integrity: sha512-h6Ad60FjCYdJZ5DTz1Lk2VmQsShiViKe0G7sYikb0GHI0NVvApp2XQNRHNjEMz87roFttGPLHOYVPlfy+yVIhQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-mysql@0.45.1': + resolution: {integrity: sha512-TKp4hQ8iKQsY7vnp/j0yJJ4ZsP109Ht6l4RHTj0lNEG1TfgTrIH5vJMbgmoYXWzNHAqBH2e7fncN12p3BP8LFg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-pg@0.51.1': + resolution: {integrity: sha512-QxgjSrxyWZc7Vk+qGSfsejPVFL1AgAJdSBMYZdDUbwg730D09ub3PXScB9d04vIqPriZ+0dqzjmQx0yWKiCi2Q==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-redis-4@0.46.1': + resolution: {integrity: sha512-UMqleEoabYMsWoTkqyt9WAzXwZ4BlFZHO40wr3d5ZvtjKCHlD4YXLm+6OLCeIi/HkX7EXvQaz8gtAwkwwSEvcQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-tedious@0.18.1': + resolution: {integrity: sha512-5Cuy/nj0HBaH+ZJ4leuD7RjgvA844aY2WW+B5uLcWtxGjRZl3MNLuxnNg5DYWZNPO+NafSSnra0q49KWAHsKBg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/instrumentation-undici@0.10.1': + resolution: {integrity: sha512-rkOGikPEyRpMCmNu9AQuV5dtRlDmJp2dK5sw8roVshAGoB6hH/3QjDtRhdwd75SsJwgynWUNRUYe0wAkTo16tQ==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.7.0 + + '@opentelemetry/instrumentation@0.57.2': + resolution: {integrity: sha512-BdBGhQBh8IjZ2oIIX6F2/Q3LKm/FDDKi6ccYKcBTeilh6SNdNKveDOLk73BkSJjQLJk6qe4Yh+hHw1UPhCDdrg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/redis-common@0.36.2': + resolution: {integrity: sha512-faYX1N0gpLhej/6nyp6bgRjzAKXn5GOEMYY7YhciSfCoITAktLUtQ36d24QEWNA1/WA1y6qQunCe0OhHRkVl9g==} + engines: {node: '>=14'} + + '@opentelemetry/resources@1.30.1': + resolution: {integrity: sha512-5UxZqiAgLYGFjS4s9qm5mBVo433u+dSPUFWVWXmLAD4wB65oMCoXaJP1KJa9DIYYMeHu3z4BZcStG3LC593cWA==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@1.30.1': + resolution: {integrity: sha512-jVPgBbH1gCy2Lb7X0AVQ8XAfgg0pJ4nvl8/IiQA6nxOsPvS+0zMJaFSs2ltXe0J6C8dqjcnpyqINDJmU30+uOg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.28.0': + resolution: {integrity: sha512-lp4qAiMTD4sNWW4DbKLBkfiMZ4jbAboJIGOQr5DvciMRI494OapieI9qiODpOt0XBr1LjIDy1xAGAnVs5supTA==} + engines: {node: '>=14'} + + '@opentelemetry/semantic-conventions@1.36.0': + resolution: {integrity: sha512-TtxJSRD8Ohxp6bKkhrm27JRHAxPczQA7idtcTOMYI+wQRRrfgqxHv1cFbCApcSnNjtXkmzFozn6jQtFrOmbjPQ==} + engines: {node: '>=14'} + + '@opentelemetry/sql-common@0.40.1': + resolution: {integrity: sha512-nSDlnHSqzC3pXn/wZEZVLuAuJ1MYMXPBwtv2qAbCa3847SaHItdE7SzUq/Jtb0KZmh1zfAbNi3AAMjztTT4Ugg==} + engines: {node: '>=14'} + peerDependencies: + '@opentelemetry/api': ^1.1.0 + + '@otplib/core@12.0.1': + resolution: {integrity: sha512-4sGntwbA/AC+SbPhbsziRiD+jNDdIzsZ3JUyfZwjtKyc/wufl1pnSIaG4Uqx8ymPagujub0o92kgBnB89cuAMA==} + + '@otplib/plugin-crypto@12.0.1': + resolution: {integrity: sha512-qPuhN3QrT7ZZLcLCyKOSNhuijUi9G5guMRVrxq63r9YNOxxQjPm59gVxLM+7xGnHnM6cimY57tuKsjK7y9LM1g==} + + '@otplib/plugin-thirty-two@12.0.1': + resolution: {integrity: sha512-MtT+uqRso909UkbrrYpJ6XFjj9D+x2Py7KjTO9JDPhL0bJUYVu5kFP4TFZW4NFAywrAtFRxOVY261u0qwb93gA==} + + '@otplib/preset-default@12.0.1': + resolution: {integrity: sha512-xf1v9oOJRyXfluBhMdpOkr+bsE+Irt+0D5uHtvg6x1eosfmHCsCC6ej/m7FXiWqdo0+ZUI6xSKDhJwc8yfiOPQ==} + + '@otplib/preset-v11@12.0.1': + resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} + + '@paralleldrive/cuid2@2.2.2': + resolution: {integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA==} + + '@parcel/watcher-android-arm64@2.5.1': + resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [android] + + '@parcel/watcher-darwin-arm64@2.5.1': + resolution: {integrity: sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [darwin] + + '@parcel/watcher-darwin-x64@2.5.1': + resolution: {integrity: sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [darwin] + + '@parcel/watcher-freebsd-x64@2.5.1': + resolution: {integrity: sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [freebsd] + + '@parcel/watcher-linux-arm-glibc@2.5.1': + resolution: {integrity: sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm-musl@2.5.1': + resolution: {integrity: sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==} + engines: {node: '>= 10.0.0'} + cpu: [arm] + os: [linux] + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + resolution: {integrity: sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-arm64-musl@2.5.1': + resolution: {integrity: sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [linux] + + '@parcel/watcher-linux-x64-glibc@2.5.1': + resolution: {integrity: sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-linux-x64-musl@2.5.1': + resolution: {integrity: sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [linux] + + '@parcel/watcher-win32-arm64@2.5.1': + resolution: {integrity: sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==} + engines: {node: '>= 10.0.0'} + cpu: [arm64] + os: [win32] + + '@parcel/watcher-win32-ia32@2.5.1': + resolution: {integrity: sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==} + engines: {node: '>= 10.0.0'} + cpu: [ia32] + os: [win32] + + '@parcel/watcher-win32-x64@2.5.1': + resolution: {integrity: sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==} + engines: {node: '>= 10.0.0'} + cpu: [x64] + os: [win32] + + '@parcel/watcher@2.5.1': + resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} + engines: {node: '>= 10.0.0'} + + '@petamoriken/float16@3.9.2': + resolution: {integrity: sha512-VgffxawQde93xKxT3qap3OH+meZf7VaSB5Sqd4Rqc+FP5alWbpOyan/7tRbOAvynjpG3GpdtAuGU/NdhQpmrog==} + + '@pinecone-database/pinecone@5.1.2': + resolution: {integrity: sha512-z7737KUA1hXwd508q1+o4bnRxj0NpMmzA2beyaFm7Y+EC2TYLT5ABuYsn/qhiwiEsYp8v1qS596eBhhvgNagig==} + engines: {node: '>=18.0.0'} + + '@pinia/testing@0.1.6': + resolution: {integrity: sha512-Q40s3kpjXpjmcnc61l84wyG83yVmkBi5rRdSoPpwQoRfSnNKKr52XjFFt6hP8iBxehYS9NR+D57T1uzgnEVPHg==} + peerDependencies: + pinia: '>=2.2.3' + + '@pkgjs/parseargs@0.11.0': + resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} + engines: {node: '>=14'} + + '@playwright/test@1.54.2': + resolution: {integrity: sha512-A+znathYxPf+72riFd1r1ovOLqsIIB0jKIoPjyK2kqEIe30/6jF6BC7QNluHuwUmsD2tv1XZVugN8GqfTMOxsA==} + engines: {node: '>=18'} + hasBin: true + + '@prisma/instrumentation@6.11.1': + resolution: {integrity: sha512-mrZOev24EDhnefmnZX7WVVT7v+r9LttPRqf54ONvj6re4XMF7wFTpK2tLJi4XHB7fFp/6xhYbgRel8YV7gQiyA==} + peerDependencies: + '@opentelemetry/api': ^1.8 + + '@protobufjs/aspromise@1.1.2': + resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} + + '@protobufjs/base64@1.1.2': + resolution: {integrity: sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==} + + '@protobufjs/codegen@2.0.4': + resolution: {integrity: sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==} + + '@protobufjs/eventemitter@1.1.0': + resolution: {integrity: sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==} + + '@protobufjs/fetch@1.1.0': + resolution: {integrity: sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==} + + '@protobufjs/float@1.0.2': + resolution: {integrity: sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==} + + '@protobufjs/inquire@1.1.0': + resolution: {integrity: sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==} + + '@protobufjs/path@1.1.2': + resolution: {integrity: sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==} + + '@protobufjs/pool@1.1.0': + resolution: {integrity: sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==} + + '@protobufjs/utf8@1.1.0': + resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} + + '@qdrant/js-client-rest@1.14.1': + resolution: {integrity: sha512-CkCCTDc4gCXq+hhjB3yDw9Hs/PxCJ0bKqk/LjAAmuL9+nDm/RPue4C/tGOIMlzouTQ2l6J6t+JPeM//j38VFug==} + engines: {node: '>=18.17.0', pnpm: '>=8'} + peerDependencies: + typescript: 5.9.2 + + '@qdrant/openapi-typescript-fetch@1.2.6': + resolution: {integrity: sha512-oQG/FejNpItrxRHoyctYvT3rwGZOnK4jr3JdppO/c78ktDvkWiPXPHNsrDf33K9sZdRb6PR7gi4noIapu5q4HA==} + engines: {node: '>=18.0.0', pnpm: '>=8'} + + '@redis/bloom@1.2.0': + resolution: {integrity: sha512-HG2DFjYKbpNmVXsa0keLHp/3leGJz1mjh09f2RLGGLQZzSHpkmZWuwJbAvo3QcRY8p80m5+ZdXZdYOSBLlp7Cg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/client@1.5.13': + resolution: {integrity: sha512-epkUM9D0Sdmt93/8Ozk43PNjLi36RZzG+d/T1Gdu5AI8jvghonTeLYV69WVWdilvFo+PYxbP0TZ0saMvr6nscQ==} + engines: {node: '>=14'} + + '@redis/client@1.5.16': + resolution: {integrity: sha512-X1a3xQ5kEMvTib5fBrHKh6Y+pXbeKXqziYuxOUo1ojQNECg4M5Etd1qqyhMap+lFUOAh8S7UYevgJHOm4A+NOg==} + engines: {node: '>=14'} + + '@redis/graph@1.1.1': + resolution: {integrity: sha512-FEMTcTHZozZciLRl6GiiIB4zGm5z5F3F6a6FZCyrfxdKOhFlGkiAqlexWMBzCi4DcRoyiOsuLfW+cjlGWyExOw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/json@1.0.6': + resolution: {integrity: sha512-rcZO3bfQbm2zPRpqo82XbW8zg4G/w4W3tI7X8Mqleq9goQjAGLL7q/1n1ZX4dXEAmORVZ4s1+uKLaUOg7LrUhw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/search@1.1.6': + resolution: {integrity: sha512-mZXCxbTYKBQ3M2lZnEddwEAks0Kc7nauire8q20oA0oA/LoA+E/b5Y5KZn232ztPb1FkIGqo12vh3Lf+Vw5iTw==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redis/time-series@1.0.5': + resolution: {integrity: sha512-IFjIgTusQym2B5IZJG3XKr5llka7ey84fw/NOYqESP5WUfQs9zz1ww/9+qoz4ka/S6KcGBodzlCeZ5UImKbscg==} + peerDependencies: + '@redis/client': ^1.0.0 + + '@redocly/ajv@8.11.2': + resolution: {integrity: sha512-io1JpnwtIcvojV7QKDUSIuMN/ikdOUd1ReEnUnMKGfDVridQZ31J0MmIuqwuRjWDZfmvr+Q0MqCcfHM2gTivOg==} + + '@redocly/cli@1.28.5': + resolution: {integrity: sha512-06EIhhqW9tmrlGutpZFFqjnNTIX7wXHvP7BBw6vKJjy6nd++9nHz+B8feeeoJHC7Q2vK7XoCuOMDzqY6BNCCug==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + hasBin: true + + '@redocly/config@0.20.3': + resolution: {integrity: sha512-Nyyv1Bj7GgYwj/l46O0nkH1GTKWbO3Ixe7KFcn021aZipkZd+z8Vlu1BwkhqtVgivcKaClaExtWU/lDHkjBzag==} + + '@redocly/openapi-core@1.28.5': + resolution: {integrity: sha512-eAuL+x1oBbodJksPm4UpFU57A6z1n1rx9JNpD87CObwtbRf5EzW29Ofd0t057bPGcHc8cYZtZzJ69dcRQ9xGdg==} + engines: {node: '>=18.17.0', npm: '>=9.5.0'} + + '@replit/codemirror-indentation-markers@6.5.3': + resolution: {integrity: sha512-hL5Sfvw3C1vgg7GolLe/uxX5T3tmgOA3ZzqlMv47zjU1ON51pzNWiVbS22oh6crYhtVhv8b3gdXwoYp++2ilHw==} + peerDependencies: + '@codemirror/language': ^6.0.0 + '@codemirror/state': ^6.0.0 + '@codemirror/view': ^6.0.0 + + '@rollup/plugin-inject@5.0.5': + resolution: {integrity: sha512-2+DEJbNBoPROPkgTDNe8/1YXWcqxbN5DTjASVIOx8HS+pITXushyNiBV56RB08zuptzz8gT3YfkqriTBVycepg==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/pluginutils@5.1.4': + resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.46.2': + resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.46.2': + resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.46.2': + resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.46.2': + resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.46.2': + resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.46.2': + resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.46.2': + resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.46.2': + resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.46.2': + resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.46.2': + resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + cpu: [x64] + os: [win32] + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + + '@rudderstack/rudder-sdk-node@2.1.4': + resolution: {integrity: sha512-Y/WJRcIYss+gCipzCMYcbJ3WPkj4SxsqNcb/HYjKhaLjdfjCmuWVSsJFEajfpA8EpkKRh3OamerBO5kftwXLxQ==} + peerDependencies: + tslib: ^2.6.2 + + '@rushstack/node-core-library@5.12.0': + resolution: {integrity: sha512-QSwwzgzWoil1SCQse+yCHwlhRxNv2dX9siPnAb9zR/UmMhac4mjMrlMZpk64BlCeOFi1kJKgXRkihSwRMbboAQ==} + peerDependencies: + '@types/node': ^20.17.50 + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/rig-package@0.5.3': + resolution: {integrity: sha512-olzSSjYrvCNxUFZowevC3uz8gvKr3WTpHQ7BkpjtRpA3wK+T0ybep/SRUMfr195gBzJm5gaXw0ZMgjIyHqJUow==} + + '@rushstack/terminal@0.15.1': + resolution: {integrity: sha512-3vgJYwumcjoDOXU3IxZfd616lqOdmr8Ezj4OWgJZfhmiBK4Nh7eWcv8sU8N/HdzXcuHDXCRGn/6O2Q75QvaZMA==} + peerDependencies: + '@types/node': ^20.17.50 + peerDependenciesMeta: + '@types/node': + optional: true + + '@rushstack/ts-command-line@4.23.6': + resolution: {integrity: sha512-7WepygaF3YPEoToh4MAL/mmHkiIImQq3/uAkQX46kVoKTNOOlCtFGyNnze6OYuWw2o9rxsyrHVfIBKxq/am2RA==} + + '@sec-ant/readable-stream@0.4.1': + resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} + + '@selderee/plugin-htmlparser2@0.11.0': + resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} + + '@sentry-internal/browser-utils@9.42.1': + resolution: {integrity: sha512-RWLpPDApHKWo5m4ig6M27b0vx3bLyPPU9Ra6FbwBhIdyb0ihd4wSddtNFA2VgLOePpurN+HU1Thcq+D3776GIA==} + engines: {node: '>=18'} + + '@sentry-internal/feedback@9.42.1': + resolution: {integrity: sha512-ocyN85ndnWRHMtS6kJpYbQiovvXT09UJLIzZfsyj/cIl/kBYaljDVoPHhSWMaMVUWQrP/Ut2Zuse9wnowDvXWg==} + engines: {node: '>=18'} + + '@sentry-internal/node-native-stacktrace@0.2.2': + resolution: {integrity: sha512-ZRS+a1Ik+w6awjp9na5vHBqLNkIxysfGDswLVAkjtVdBUxtfsEVI8OA6r8PijJC5Gm1oAJJap2e9H7TSiCUQIQ==} + engines: {node: '>=18'} + + '@sentry-internal/replay-canvas@9.42.1': + resolution: {integrity: sha512-z2Pm7vl5SaK1k/MhYV/CRkDYT32Y6q/CLlV3toKphAK1gZFmJ8FGjYE6DU2Zju2upb9ulgyoU8bLU5DLLZCsZA==} + engines: {node: '>=18'} + + '@sentry-internal/replay@9.42.1': + resolution: {integrity: sha512-IbKf4L4qxcupM3+FfKYcap4bM4Q6khSIc8X31btmUqPnDT/UuekN5CZmL7Xf42h5L7aMA8Oh8s97powY+hPLQQ==} + engines: {node: '>=18'} + + '@sentry/browser@9.42.1': + resolution: {integrity: sha512-iFlHpuHGK7pexHdmvmJeMlIIUFcGjGW12bwhPyIb8T7Ziu16B8yOjIv0EQgfxMyiyv9MWqG2Un7efXjXSlIzrg==} + engines: {node: '>=18'} + + '@sentry/core@9.42.1': + resolution: {integrity: sha512-9jWgjgZ8EvIYMTL5HzG8PYRo7+/vv3qwPabPVV2EfGPOjU65GFcT7N+oitg+0rAI/fTMsLaQXC77WmKzhRBSdw==} + engines: {node: '>=18'} + + '@sentry/node-core@9.42.1': + resolution: {integrity: sha512-Z5igPnqlap0u4nDHqp83If7/ZPCKuBSAtR2l71CNG2pISCD2JudKseSl3ZpGlZ8/tzyhIDCtb1yMTZ/SStLgRA==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.0.0 + '@opentelemetry/core': ^1.30.1 || ^2.0.0 + '@opentelemetry/instrumentation': '>=0.57.1 <1' + '@opentelemetry/resources': ^1.30.1 || ^2.0.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.34.0 + + '@sentry/node-native@9.42.1': + resolution: {integrity: sha512-K64I5I5tqqLeH0CFJitoVP+mPOA558dxvC9Vm6x79fl/W8mgFCGiRROjdpeF0aUWghRGAJUbNREFbI3VrIlUOg==} + engines: {node: '>=18'} + + '@sentry/node@9.42.1': + resolution: {integrity: sha512-6alU59CUp3NzRWt0zaHl3A1Rv9PeABhtj8cD9fdI5QYj5oFQnxbERY/Y/V9R+pNx3ejwCQRbd+SDApfYeQgejg==} + engines: {node: '>=18'} + + '@sentry/opentelemetry@9.42.1': + resolution: {integrity: sha512-SncdmGuBVMbCEEG8pC+alyNh5kwRfNkkNH4zf/Rl6pSp7wmNK+LKZQUZFQGl5LUBoNOxmoI8J1pLjW+9PueWTA==} + engines: {node: '>=18'} + peerDependencies: + '@opentelemetry/api': ^1.9.0 + '@opentelemetry/context-async-hooks': ^1.30.1 || ^2.0.0 + '@opentelemetry/core': ^1.30.1 || ^2.0.0 + '@opentelemetry/sdk-trace-base': ^1.30.1 || ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.34.0 + + '@sentry/vue@9.42.1': + resolution: {integrity: sha512-m6wEwDzaErKnebeX+giMMvRAU0i4SLW7taW2DyxNHAADI0mcjgjiQWYiEMid2M/O57CJtKq8LISzi38rvF1JTQ==} + engines: {node: '>=18'} + peerDependencies: + pinia: 2.x || 3.x + vue: 2.x || 3.x + peerDependenciesMeta: + pinia: + optional: true + + '@sevinf/maybe@0.5.0': + resolution: {integrity: sha512-ARhyoYDnY1LES3vYI0fiG6e9esWfTNcXcO6+MPJJXcnyMV3bim4lnFt45VXouV7y82F4x3YH8nOQ6VztuvUiWg==} + + '@sideway/address@4.1.5': + resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} + + '@sideway/formula@3.0.1': + resolution: {integrity: sha512-/poHZJJVjx3L+zVD6g9KgHfYnb443oi7wLu/XKojDviHy6HOEOA6z1Trk5aR1dGcmPenJEgb2sK2I80LeS3MIg==} + + '@sideway/pinpoint@2.0.0': + resolution: {integrity: sha512-RNiOoTPkptFtSVzQevY/yWtZwf/RxyVnPy/OcA9HBM3MlGDnBEYL5B41H0MTn0Uec8Hi+2qUtTfG2WWZBmMejQ==} + + '@sinclair/typebox@0.25.21': + resolution: {integrity: sha512-gFukHN4t8K4+wVC+ECqeqwzBDeFeTzBXroBTqE6vcWrQGbEUpHO7LYdG0f4xnvYq4VOEwITSlHlp0JBAIFMS/g==} + + '@sinclair/typebox@0.27.8': + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + + '@sindresorhus/merge-streams@4.0.0': + resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} + engines: {node: '>=18'} + + '@sinonjs/commons@2.0.0': + resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} + + '@sinonjs/commons@3.0.1': + resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} + + '@sinonjs/fake-timers@10.0.2': + resolution: {integrity: sha512-SwUDyjWnah1AaNl7kxsa7cfLhlTYoiyhDAIgyh+El30YvXs/o7OLXpYH88Zdhyx9JExKrmHDJ+10bwIcY80Jmw==} + + '@sinonjs/fake-timers@13.0.2': + resolution: {integrity: sha512-4Bb+oqXZTSTZ1q27Izly9lv8B9dlV61CROxPiVtywwzv5SnytJqhvYe6FclHYuXml4cd1VHPo1zd5PmTeJozvA==} + + '@smithy/abort-controller@4.0.2': + resolution: {integrity: sha512-Sl/78VDtgqKxN2+1qduaVE140XF+Xg+TafkncspwM4jFP/LHr76ZHmIY/y3V1M0mMLNk+Je6IGbzxy23RSToMw==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader-native@4.0.0': + resolution: {integrity: sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==} + engines: {node: '>=18.0.0'} + + '@smithy/chunked-blob-reader@5.0.0': + resolution: {integrity: sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==} + engines: {node: '>=18.0.0'} + + '@smithy/config-resolver@4.1.2': + resolution: {integrity: sha512-7r6mZGwb5LmLJ+zPtkLoznf2EtwEuSWdtid10pjGl/7HefCE4mueOkrfki8JCUm99W6UfP47/r3tbxx9CfBN5A==} + engines: {node: '>=18.0.0'} + + '@smithy/core@3.3.2': + resolution: {integrity: sha512-GlLv+syoWolhtjX12XplL9BXBu10cjjD8iQC69fiKTrVNOB3Fjt8CVI9ccm6G3bLbMNe1gzrLD7yyMkYo4hchw==} + engines: {node: '>=18.0.0'} + + '@smithy/credential-provider-imds@4.0.4': + resolution: {integrity: sha512-jN6M6zaGVyB8FmNGG+xOPQB4N89M1x97MMdMnm1ESjljLS3Qju/IegQizKujaNcy2vXAvrz0en8bobe6E55FEA==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-codec@1.1.0': + resolution: {integrity: sha512-3tEbUb8t8an226jKB6V/Q2XU/J53lCwCzULuBPEaF4JjSh+FlCMp7TmogE/Aij5J9DwlsZ4VAD/IRDuQ/0ZtMw==} + + '@smithy/eventstream-codec@2.2.0': + resolution: {integrity: sha512-8janZoJw85nJmQZc4L8TuePp2pk1nxLgkxIR0TUjKJ5Dkj5oelB9WtiSSGXCQvNsJl0VSTvK/2ueMXxvpa9GVw==} + + '@smithy/eventstream-codec@4.0.2': + resolution: {integrity: sha512-p+f2kLSK7ZrXVfskU/f5dzksKTewZk8pJLPvER3aFHPt76C2MxD9vNatSfLzzQSQB4FNO96RK4PSXfhD1TTeMQ==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-browser@4.0.2': + resolution: {integrity: sha512-CepZCDs2xgVUtH7ZZ7oDdZFH8e6Y2zOv8iiX6RhndH69nlojCALSKK+OXwZUgOtUZEUaZ5e1hULVCHYbCn7pug==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-config-resolver@4.1.0': + resolution: {integrity: sha512-1PI+WPZ5TWXrfj3CIoKyUycYynYJgZjuQo8U+sphneOtjsgrttYybdqESFReQrdWJ+LKt6NEdbYzmmfDBmjX2A==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-node@4.0.2': + resolution: {integrity: sha512-C5bJ/C6x9ENPMx2cFOirspnF9ZsBVnBMtP6BdPl/qYSuUawdGQ34Lq0dMcf42QTjUZgWGbUIZnz6+zLxJlb9aw==} + engines: {node: '>=18.0.0'} + + '@smithy/eventstream-serde-universal@4.0.2': + resolution: {integrity: sha512-St8h9JqzvnbB52FtckiHPN4U/cnXcarMniXRXTKn0r4b4XesZOGiAyUdj1aXbqqn1icSqBlzzUsCl6nPB018ng==} + engines: {node: '>=18.0.0'} + + '@smithy/fetch-http-handler@5.0.2': + resolution: {integrity: sha512-+9Dz8sakS9pe7f2cBocpJXdeVjMopUDLgZs1yWeu7h++WqSbjUYv/JAJwKwXw1HV6gq1jyWjxuyn24E2GhoEcQ==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-blob-browser@4.0.2': + resolution: {integrity: sha512-3g188Z3DyhtzfBRxpZjU8R9PpOQuYsbNnyStc/ZVS+9nVX1f6XeNOa9IrAh35HwwIZg+XWk8bFVtNINVscBP+g==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-node@4.0.2': + resolution: {integrity: sha512-VnTpYPnRUE7yVhWozFdlxcYknv9UN7CeOqSrMH+V877v4oqtVYuoqhIhtSjmGPvYrYnAkaM61sLMKHvxL138yg==} + engines: {node: '>=18.0.0'} + + '@smithy/hash-stream-node@4.0.2': + resolution: {integrity: sha512-POWDuTznzbIwlEXEvvXoPMS10y0WKXK790soe57tFRfvf4zBHyzE529HpZMqmDdwG9MfFflnyzndUQ8j78ZdSg==} + engines: {node: '>=18.0.0'} + + '@smithy/invalid-dependency@4.0.2': + resolution: {integrity: sha512-GatB4+2DTpgWPday+mnUkoumP54u/MDM/5u44KF9hIu8jF0uafZtQLcdfIKkIcUNuF/fBojpLEHZS/56JqPeXQ==} + engines: {node: '>=18.0.0'} + + '@smithy/is-array-buffer@1.1.0': + resolution: {integrity: sha512-twpQ/n+3OWZJ7Z+xu43MJErmhB/WO/mMTnqR6PwWQShvSJ/emx5d1N59LQZk6ZpTAeuRWrc+eHhkzTp9NFjNRQ==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@2.2.0': + resolution: {integrity: sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==} + engines: {node: '>=14.0.0'} + + '@smithy/is-array-buffer@4.0.0': + resolution: {integrity: sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==} + engines: {node: '>=18.0.0'} + + '@smithy/md5-js@4.0.2': + resolution: {integrity: sha512-Hc0R8EiuVunUewCse2syVgA2AfSRco3LyAv07B/zCOMa+jpXI9ll+Q21Nc6FAlYPcpNcAXqBzMhNs1CD/pP2bA==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-content-length@4.0.2': + resolution: {integrity: sha512-hAfEXm1zU+ELvucxqQ7I8SszwQ4znWMbNv6PLMndN83JJN41EPuS93AIyh2N+gJ6x8QFhzSO6b7q2e6oClDI8A==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-endpoint@4.1.5': + resolution: {integrity: sha512-WlpC9KVkajQf7RaGwi3n6lhHZzYTgm2PyX/2JjcwSHG417gFloNmYqN8rzDRXjT527/ZxZuvCsqq1gWZPW8lag==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-retry@4.1.6': + resolution: {integrity: sha512-bl8q95nvCf7d22spxsBfs2giUDFf7prWLAxF5tmfgGBYHbUNW+OfnwMnabC15GMLA2AoE4HOtQR18a59lx6Blw==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-serde@4.0.4': + resolution: {integrity: sha512-CaLvBtz+Xgs7eOwoinTXhZ02/9u8b28RT8lQAaDh7Q59nygeYYp1UiJjwl6zsay+lp0qVT/S7qLVI5RgcxjyfQ==} + engines: {node: '>=18.0.0'} + + '@smithy/middleware-stack@4.0.2': + resolution: {integrity: sha512-eSPVcuJJGVYrFYu2hEq8g8WWdJav3sdrI4o2c6z/rjnYDd3xH9j9E7deZQCzFn4QvGPouLngH3dQ+QVTxv5bOQ==} + engines: {node: '>=18.0.0'} + + '@smithy/node-config-provider@4.1.1': + resolution: {integrity: sha512-1slS5jf5icHETwl5hxEVBj+mh6B+LbVW4yRINsGtUKH+nxM5Pw2H59+qf+JqYFCHp9jssG4vX81f5WKnjMN3Vw==} + engines: {node: '>=18.0.0'} + + '@smithy/node-http-handler@4.0.4': + resolution: {integrity: sha512-/mdqabuAT3o/ihBGjL94PUbTSPSRJ0eeVTdgADzow0wRJ0rN4A27EOrtlK56MYiO1fDvlO3jVTCxQtQmK9dZ1g==} + engines: {node: '>=18.0.0'} + + '@smithy/property-provider@4.0.2': + resolution: {integrity: sha512-wNRoQC1uISOuNc2s4hkOYwYllmiyrvVXWMtq+TysNRVQaHm4yoafYQyjN/goYZS+QbYlPIbb/QRjaUZMuzwQ7A==} + engines: {node: '>=18.0.0'} + + '@smithy/protocol-http@1.2.0': + resolution: {integrity: sha512-GfGfruksi3nXdFok5RhgtOnWe5f6BndzYfmEXISD+5gAGdayFGpjWu5pIqIweTudMtse20bGbc+7MFZXT1Tb8Q==} + engines: {node: '>=14.0.0'} + + '@smithy/protocol-http@3.3.0': + resolution: {integrity: sha512-Xy5XK1AFWW2nlY/biWZXu6/krgbaf2dg0q492D8M5qthsnU2H+UgFeZLbM76FnH7s6RO/xhQRkj+T6KBO3JzgQ==} + engines: {node: '>=14.0.0'} + + '@smithy/protocol-http@5.1.0': + resolution: {integrity: sha512-KxAOL1nUNw2JTYrtviRRjEnykIDhxc84qMBzxvu1MUfQfHTuBlCG7PA6EdVwqpJjH7glw7FqQoFxUJSyBQgu7g==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-builder@4.0.2': + resolution: {integrity: sha512-NTOs0FwHw1vimmQM4ebh+wFQvOwkEf/kQL6bSM1Lock+Bv4I89B3hGYoUEPkmvYPkDKyp5UdXJYu+PoTQ3T31Q==} + engines: {node: '>=18.0.0'} + + '@smithy/querystring-parser@4.0.2': + resolution: {integrity: sha512-v6w8wnmZcVXjfVLjxw8qF7OwESD9wnpjp0Dqry/Pod0/5vcEA3qxCr+BhbOHlxS8O+29eLpT3aagxXGwIoEk7Q==} + engines: {node: '>=18.0.0'} + + '@smithy/service-error-classification@4.0.3': + resolution: {integrity: sha512-FTbcajmltovWMjj3tksDQdD23b2w6gH+A0DYA1Yz3iSpjDj8fmkwy62UnXcWMy4d5YoMoSyLFHMfkEVEzbiN8Q==} + engines: {node: '>=18.0.0'} + + '@smithy/shared-ini-file-loader@4.0.2': + resolution: {integrity: sha512-J9/gTWBGVuFZ01oVA6vdb4DAjf1XbDhK6sLsu3OS9qmLrS6KB5ygpeHiM3miIbj1qgSJ96GYszXFWv6ErJ8QEw==} + engines: {node: '>=18.0.0'} + + '@smithy/signature-v4@1.1.0': + resolution: {integrity: sha512-fDo3m7YqXBs7neciOePPd/X9LPm5QLlDMdIC4m1H6dgNLnXfLMFNIxEfPyohGA8VW9Wn4X8lygnPSGxDZSmp0Q==} + engines: {node: '>=14.0.0'} + + '@smithy/signature-v4@2.2.1': + resolution: {integrity: sha512-j5fHgL1iqKTsKJ1mTcw88p0RUcidDu95AWSeZTgiYJb+QcfwWU/UpBnaqiB59FNH5MiAZuSbOBnZlwzeeY2tIw==} + engines: {node: '>=14.0.0'} + + '@smithy/signature-v4@5.1.0': + resolution: {integrity: sha512-4t5WX60sL3zGJF/CtZsUQTs3UrZEDO2P7pEaElrekbLqkWPYkgqNW1oeiNYC6xXifBnT9dVBOnNQRvOE9riU9w==} + engines: {node: '>=18.0.0'} + + '@smithy/smithy-client@4.2.5': + resolution: {integrity: sha512-T3gA/TShe52Ln0ywWGVoDiqRvaxqvrU0CKRRmzT71/I1rRBD8mY85rvMMME6vw5RpBLJC9ADmXSLmpohF7RRhA==} + engines: {node: '>=18.0.0'} + + '@smithy/types@1.2.0': + resolution: {integrity: sha512-z1r00TvBqF3dh4aHhya7nz1HhvCg4TRmw51fjMrh5do3h+ngSstt/yKlNbHeb9QxJmFbmN8KEVSWgb1bRvfEoA==} + engines: {node: '>=14.0.0'} + + '@smithy/types@2.12.0': + resolution: {integrity: sha512-QwYgloJ0sVNBeBuBs65cIkTbfzV/Q6ZNPCJ99EICFEdJYG50nGIY/uYXp+TbsdJReIuPr0a0kXmCvren3MbRRw==} + engines: {node: '>=14.0.0'} + + '@smithy/types@4.2.0': + resolution: {integrity: sha512-7eMk09zQKCO+E/ivsjQv+fDlOupcFUCSC/L2YUPgwhvowVGWbPQHjEFcmjt7QQ4ra5lyowS92SV53Zc6XD4+fg==} + engines: {node: '>=18.0.0'} + + '@smithy/url-parser@4.0.2': + resolution: {integrity: sha512-Bm8n3j2ScqnT+kJaClSVCMeiSenK6jVAzZCNewsYWuZtnBehEz4r2qP0riZySZVfzB+03XZHJeqfmJDkeeSLiQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-base64@4.0.0': + resolution: {integrity: sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-browser@4.0.0': + resolution: {integrity: sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-body-length-node@4.0.0': + resolution: {integrity: sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-buffer-from@1.1.0': + resolution: {integrity: sha512-9m6NXE0ww+ra5HKHCHig20T+FAwxBAm7DIdwc/767uGWbRcY720ybgPacQNB96JMOI7xVr/CDa3oMzKmW4a+kw==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@2.2.0': + resolution: {integrity: sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-buffer-from@4.0.0': + resolution: {integrity: sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==} + engines: {node: '>=18.0.0'} + + '@smithy/util-config-provider@4.0.0': + resolution: {integrity: sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-browser@4.0.13': + resolution: {integrity: sha512-HCLfXAyTEpVWLuyxDABg8UQukeRwChL1UErpSQ4KJK2ZoadmXuQY68pTL9KcuEtasTkIjnzyLUL9vhLdJ3VFHQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-defaults-mode-node@4.0.13': + resolution: {integrity: sha512-lu8E2RyzKzzFbNu4ICmY/2HltMZlJxMNg3saJ+r8I9vWbWbwdX7GOWUJdP4fbjEOm6aa52mnnd+uIRrT3dNEyA==} + engines: {node: '>=18.0.0'} + + '@smithy/util-endpoints@3.0.4': + resolution: {integrity: sha512-VfFATC1bmZLV2858B/O1NpMcL32wYo8DPPhHxYxDCodDl3f3mSZ5oJheW1IF91A0EeAADz2WsakM/hGGPGNKLg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-hex-encoding@1.1.0': + resolution: {integrity: sha512-7UtIE9eH0u41zpB60Jzr0oNCQ3hMJUabMcKRUVjmyHTXiWDE4vjSqN6qlih7rCNeKGbioS7f/y2Jgym4QZcKFg==} + engines: {node: '>=14.0.0'} + + '@smithy/util-hex-encoding@2.2.0': + resolution: {integrity: sha512-7iKXR+/4TpLK194pVjKiasIyqMtTYJsgKgM242Y9uzt5dhHnUDvMNb+3xIhRJ9QhvqGii/5cRUt4fJn3dtXNHQ==} + engines: {node: '>=14.0.0'} + + '@smithy/util-hex-encoding@4.0.0': + resolution: {integrity: sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==} + engines: {node: '>=18.0.0'} + + '@smithy/util-middleware@1.1.0': + resolution: {integrity: sha512-6hhckcBqVgjWAqLy2vqlPZ3rfxLDhFWEmM7oLh2POGvsi7j0tHkbN7w4DFhuBExVJAbJ/qqxqZdRY6Fu7/OezQ==} + engines: {node: '>=14.0.0'} + + '@smithy/util-middleware@2.2.0': + resolution: {integrity: sha512-L1qpleXf9QD6LwLCJ5jddGkgWyuSvWBkJwWAZ6kFkdifdso+sk3L3O1HdmPvCdnCK3IS4qWyPxev01QMnfHSBw==} + engines: {node: '>=14.0.0'} + + '@smithy/util-middleware@4.0.2': + resolution: {integrity: sha512-6GDamTGLuBQVAEuQ4yDQ+ti/YINf/MEmIegrEeg7DdB/sld8BX1lqt9RRuIcABOhAGTA50bRbPzErez7SlDtDQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-retry@4.0.3': + resolution: {integrity: sha512-DPuYjZQDXmKr/sNvy9Spu8R/ESa2e22wXZzSAY6NkjOLj6spbIje/Aq8rT97iUMdDj0qHMRIe+bTxvlU74d9Ng==} + engines: {node: '>=18.0.0'} + + '@smithy/util-stream@4.2.0': + resolution: {integrity: sha512-Vj1TtwWnuWqdgQI6YTUF5hQ/0jmFiOYsc51CSMgj7QfyO+RF4EnT2HNjoviNlOOmgzgvf3f5yno+EiC4vrnaWQ==} + engines: {node: '>=18.0.0'} + + '@smithy/util-uri-escape@1.1.0': + resolution: {integrity: sha512-/jL/V1xdVRt5XppwiaEU8Etp5WHZj609n0xMTuehmCqdoOFbId1M+aEeDWZsQ+8JbEB/BJ6ynY2SlYmOaKtt8w==} + engines: {node: '>=14.0.0'} + + '@smithy/util-uri-escape@2.2.0': + resolution: {integrity: sha512-jtmJMyt1xMD/d8OtbVJ2gFZOSKc+ueYJZPW20ULW1GOp/q/YIM0wNh+u8ZFao9UaIGz4WoPW8hC64qlWLIfoDA==} + engines: {node: '>=14.0.0'} + + '@smithy/util-uri-escape@4.0.0': + resolution: {integrity: sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==} + engines: {node: '>=18.0.0'} + + '@smithy/util-utf8@1.1.0': + resolution: {integrity: sha512-p/MYV+JmqmPyjdgyN2UxAeYDj9cBqCjp0C/NsTWnnjoZUVqoeZ6IrW915L9CAKWVECgv9lVQGc4u/yz26/bI1A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@2.3.0': + resolution: {integrity: sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==} + engines: {node: '>=14.0.0'} + + '@smithy/util-utf8@4.0.0': + resolution: {integrity: sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==} + engines: {node: '>=18.0.0'} + + '@smithy/util-waiter@4.0.3': + resolution: {integrity: sha512-JtaY3FxmD+te+KSI2FJuEcfNC9T/DGGVf551babM7fAaXhjJUt7oSYurH1Devxd2+BOSUACCgt3buinx4UnmEA==} + engines: {node: '>=18.0.0'} + + '@sqltools/formatter@1.2.5': + resolution: {integrity: sha512-Uy0+khmZqUrUGm5dmMqVlnvufZRSK0FbYzVgp0UMstm+F5+W2/jnEEQyc9vo1ZR/E5ZI/B1WjjoTqBqwJL6Krw==} + + '@storybook/addon-a11y@8.6.4': + resolution: {integrity: sha512-B3/d2cRlnpAlE3kh+OBaly6qrWN9DEqwDyZsNeobaiXnNp11xoHZP2OWjEwXldc0pKls41jeOksXyXrILfvTng==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-actions@8.6.4': + resolution: {integrity: sha512-mCcyfkeb19fJX0dpQqqZCnWBwjVn0/27xcpR0mbm/KW2wTByU6bKFFujgrHsX3ONl97IcIaUnmwwUwBr1ebZXw==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-backgrounds@8.6.4': + resolution: {integrity: sha512-lRYGumlYdd1RptQJvOTRMx/q2pDmg2MO5GX4la7VfI8KrUyeuC1ZOSRDEcXeTuAZWJztqmtymg6bB7cAAoxCFA==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-controls@8.6.4': + resolution: {integrity: sha512-oMMP9Bj0RMfYmaitjFt6oBSjKH4titUqP+wE6PrZ3v+Om56f4buqfNKXRf80As2OrsZn0pjj95muWzVVHqIhyQ==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-docs@8.6.4': + resolution: {integrity: sha512-+kbcjvEAH0Xs+k+raAwfC0WmJilWhxBYnLLeazP3m5AkVI3sIjbzuuZ78NR0DCdRkw9BpuuXMHv5o4tIvLIUlw==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-essentials@8.6.4': + resolution: {integrity: sha512-3pF0ZDl5EICqe0eOupPQq6PxeupwkLsfTWANuuJUYTJur82kvJd3Chb7P9vqw0A0QBx6106mL6PIyjrFJJMhLg==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-highlight@8.6.4': + resolution: {integrity: sha512-jFREXnSE/7VuBR8kbluN+DBVkMXEV7MGuCe8Ytb1/D2Q0ohgJe395dfVgEgSMXErOwsn//NV/NgJp6JNXH2DrA==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-interactions@8.6.4': + resolution: {integrity: sha512-MZAAZjyvmJXCvM35zEiPpXz7vK+fimovt+WZKAMayAbXy5fT+7El0c9dDyTQ2norNKNj9QU/8hiU/1zARSUELQ==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-links@8.6.4': + resolution: {integrity: sha512-TaSIteYLJ12+dVBk7fW96ZvNIFizKs+Vo/YuNAe4xTzFJRrjLkFj9htLVi/dusMfn7lYo5DHIns08LuM+po1Dg==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.6.4 + peerDependenciesMeta: + react: + optional: true + + '@storybook/addon-measure@8.6.4': + resolution: {integrity: sha512-IpVL1rTy1tO8sy140eU3GdVB1QJ6J62+V6GSstcmqTLxDJQk5jFfg7hVbPEAZZ2sPFmeyceP9AMoBBo0EB355A==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-outline@8.6.4': + resolution: {integrity: sha512-28nAslKTy0zWMdxAZcipMDYrEp1TkXVooAsqMGY5AMXMiORi1ObjhmjTLhVt1dXp+aDg0X+M3B6PqoingmHhqQ==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-themes@8.6.4': + resolution: {integrity: sha512-QVQ/lgRAZc1e4IvCh9ltB6fWn7Zs2Ftqw2THK0VqSXIO+umEhmzlEv6Myx8Xdea363JsfhVGQXdKAWpT1Q7O6g==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-toolbars@8.6.4': + resolution: {integrity: sha512-PU2lvgwCKDn93zpp5MEog103UUmSSugcxDf18xaoa9D15Qtr+YuQHd2hXbxA7+dnYL9lA7MLYsstfxE91ieM4Q==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/addon-viewport@8.6.4': + resolution: {integrity: sha512-O5Ij+SRVg6grY6JOL5lOpsFyopZxuZEl2GHfh2SUf9hfowNS0QAgFpJupqXkwZzRSrlf9uKrLkjB6ulLgN2gOQ==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/blocks@8.6.4': + resolution: {integrity: sha512-+oPXwT3KzJzsdkQuGEzBqOKTIFlb6qmlCWWbDwAnP0SEqYHoTVRTAIa44icFP0EZeIe+ypFVAm1E7kWTLmw1hQ==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 + storybook: ^8.6.4 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + + '@storybook/builder-vite@8.6.4': + resolution: {integrity: sha512-FuSP2GhWVVTt6NdX0UJHhPOqhu09X4apSk+KWUf3aITRIJg9gbPYtJDBmxv1vXQEgvfCDdYBYbeG1khiO/Ghfw==} + peerDependencies: + storybook: ^8.6.4 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + + '@storybook/components@8.6.4': + resolution: {integrity: sha512-91VEVFWOgHkEFoNFMk6gs1AuOE9Yp7N283BXQOW+AgP+atpzED6t/fIBPGqJ2ewAuzLJ+cFOrasSzoNwVfg3Jg==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/core@8.6.4': + resolution: {integrity: sha512-glDbjEBi3wokw1T+KQtl93irHO9N0LCwgylWfWVXYDdQjUJ7pGRQGnw73gPX7Ds9tg3myXFC83GjmY94UYSMbA==} + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + '@storybook/csf-plugin@8.6.4': + resolution: {integrity: sha512-7UpEp4PFTy1iKjZiRaYMG7zvnpLIRPyD0+lUJUlLYG4UIemV3onvnIi1Je1tSZ4hfTup+ulom7JLztVSHZGRMg==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/global@5.0.0': + resolution: {integrity: sha512-FcOqPAXACP0I3oJ/ws6/rrPT9WGhu915Cg8D02a9YxLo0DE9zI+a9A5gRGvmQ09fiWPukqI8ZAEoQEdWUKMQdQ==} + + '@storybook/icons@1.2.12': + resolution: {integrity: sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q==} + engines: {node: '>=14.0.0'} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + + '@storybook/instrumenter@8.6.4': + resolution: {integrity: sha512-8OtIWLhayTUdqJEeXiPm6l3LTdSkWgQzzV2l2HIe4Adedeot+Rkwu6XHmyRDpnb0+Ish6zmMDqtJBxC2PQsy6Q==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/manager-api@8.6.4': + resolution: {integrity: sha512-w/Nn/VznfbIg2oezDfzZNwSTDY5kBZbzxVBHLCnIcyu2AKt2Yto3pfGi60SikFcTrsClaAKT7D92kMQ9qdQNQQ==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/preview-api@8.6.4': + resolution: {integrity: sha512-5HBfxggzxGz0dg2c61NpPiQJav7UAmzsQlzmI5SzWOS6lkaylcDG8giwKzASVCXVWBxNji9qIDFM++UH090aDg==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/react-dom-shim@8.6.4': + resolution: {integrity: sha512-kTGJ3aFdmfCFzYaDFGmZWfTXr9xhbUaf0tJ6+nEjc4tME6mFwMI+tTUT6U/J6mJhZuc2DjvIRA7bM0x77dIDqw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta + storybook: ^8.6.4 + + '@storybook/test@8.6.4': + resolution: {integrity: sha512-JPjfbaMMuCBT47pg3/MDD9vYFF5OGPAOWEB9nJWJ9IjYAb2Nd8OYJQIDoYJQNT+aLkTVLtvzGnVNwdxpouAJcQ==} + peerDependencies: + storybook: ^8.6.4 + + '@storybook/theming@8.6.4': + resolution: {integrity: sha512-g9Ns4uenC9oAWETaJ/tEKEIPMdS+CqjNWZz5Wbw1bLNhXwADZgKrVqawzZi64+bYYtQ+i8VCTjPoFa6s2eHiDQ==} + peerDependencies: + storybook: ^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0 + + '@storybook/vue3-vite@8.6.4': + resolution: {integrity: sha512-zmWfSc3DfJzh1DkdiKrQW9XHfBnnlauCroBfvKjo7v91eLXi2GTH2U6CUJR0d7jJ7TJh5dKN6JOQINtk/PKxKg==} + engines: {node: '>=18.0.0'} + peerDependencies: + storybook: ^8.6.4 + vite: ^4.0.0 || ^5.0.0 || ^6.0.0 + + '@storybook/vue3@8.6.4': + resolution: {integrity: sha512-Vrgnonk3sSZZHciJ/0Ey+cnOEDlqucnLks1iJ1QKrka//Y+rtIzfHhcGs7HnF0VxtFpajNPSNM4MYj59USjiXQ==} + engines: {node: '>=18.0.0'} + peerDependencies: + storybook: ^8.6.4 + vue: ^3.0.0 + + '@stylistic/eslint-plugin@5.0.0': + resolution: {integrity: sha512-nVV2FSzeTJ3oFKw+3t9gQYQcrgbopgCASSY27QOtkhEGgSfdQQjDmzZd41NeT1myQ8Wc6l+pZllST9qIu4NKzg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=9.0.0' + + '@supabase/auth-js@2.69.1': + resolution: {integrity: sha512-FILtt5WjCNzmReeRLq5wRs3iShwmnWgBvxHfqapC/VoljJl+W8hDAyFmf1NVw3zH+ZjZ05AKxiKxVeb0HNWRMQ==} + + '@supabase/functions-js@2.4.4': + resolution: {integrity: sha512-WL2p6r4AXNGwop7iwvul2BvOtuJ1YQy8EbOd0dhG1oN1q8el/BIRSFCFnWAMM/vJJlHWLi4ad22sKbKr9mvjoA==} + + '@supabase/node-fetch@2.6.15': + resolution: {integrity: sha512-1ibVeYUacxWYi9i0cf5efil6adJ9WRyZBLivgjs+AUpewx1F3xPi7gLgaASI2SmIQxPoCEjAsLAzKPgMJVgOUQ==} + engines: {node: 4.x || >=6.0.0} + + '@supabase/postgrest-js@1.19.4': + resolution: {integrity: sha512-O4soKqKtZIW3olqmbXXbKugUtByD2jPa8kL2m2c1oozAO11uCcGrRhkZL0kVxjBLrXHE0mdSkFsMj7jDSfyNpw==} + + '@supabase/realtime-js@2.11.9': + resolution: {integrity: sha512-fLseWq8tEPCO85x3TrV9Hqvk7H4SGOqnFQ223NPJSsxjSYn0EmzU1lvYO6wbA0fc8DE94beCAiiWvGvo4g33lQ==} + + '@supabase/storage-js@2.7.1': + resolution: {integrity: sha512-asYHcyDR1fKqrMpytAS1zjyEfvxuOIp1CIXX7ji4lHHcJKqyk+sLl/Vxgm4sN6u8zvuUtae9e4kDxQP2qrwWBA==} + + '@supabase/supabase-js@2.49.9': + resolution: {integrity: sha512-lB2A2X8k1aWAqvlpO4uZOdfvSuZ2s0fCMwJ1Vq6tjWsi3F+au5lMbVVn92G0pG8gfmis33d64Plkm6eSDs6jRA==} + + '@supercharge/promise-pool@3.1.0': + resolution: {integrity: sha512-gB3NukbIcYzRtPoE6dx9svQYPodxvnfQlaaQd8N/z87E6WaMfRE7o5HwB+LZ+KeM0nsNAq1n4TmBtfz1VCUR+Q==} + engines: {node: '>=8'} + + '@swc/helpers@0.5.17': + resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + + '@sxzz/popperjs-es@2.11.7': + resolution: {integrity: sha512-Ccy0NlLkzr0Ex2FKvh2X+OyERHXJ88XJ1MXtsI9y9fGexlaXaVTPzBCRBwIxFkORuOb+uBqeu+RqnpgYTEZRUQ==} + + '@tanstack/table-core@8.21.2': + resolution: {integrity: sha512-uvXk/U4cBiFMxt+p9/G7yUWI/UbHYbyghLCjlpWZ3mLeIZiUBSKcUnw9UnKkdRz7Z/N4UBuFLWQdJCjUe7HjvA==} + engines: {node: '>=12'} + + '@tanstack/virtual-core@3.13.9': + resolution: {integrity: sha512-3jztt0jpaoJO5TARe2WIHC1UQC3VMLAFUW5mmMo0yrkwtDB2AQP0+sh10BVUpWrnvHjSLvzFizydtEGLCJKFoQ==} + + '@tanstack/vue-table@8.21.2': + resolution: {integrity: sha512-KBgOWxha/x4m1EdhVWxOpqHb661UjqAxzPcmXR3QiA7aShZ547x19Gw0UJX9we+m+tVcPuLRZ61JsYW47QZFfQ==} + engines: {node: '>=12'} + peerDependencies: + vue: '>=3.2' + + '@tanstack/vue-virtual@3.13.9': + resolution: {integrity: sha512-HsvHaOo+o52cVcPhomKDZ3CMpTF/B2qg+BhPHIQJwzn4VIqDyt/rRVqtIomG6jE83IFsE2vlr6cmx7h3dHA0SA==} + peerDependencies: + vue: ^2.7.0 || ^3.0.0 + + '@techteamer/ocsp@1.0.1': + resolution: {integrity: sha512-q4pW5wAC6Pc3JI8UePwE37CkLQ5gDGZMgjSX4MEEm4D4Di59auDQ8UNIDzC4gRnPNmmcwjpPxozq8p5pjiOmOw==} + + '@tediousjs/connection-string@0.5.0': + resolution: {integrity: sha512-7qSgZbincDDDFyRweCIEvZULFAw5iz/DeunhvuxpL31nfntX3P4Yd4HkHBRg9H8CdqY1e5WFN1PZIz/REL9MVQ==} + + '@testcontainers/postgresql@11.0.3': + resolution: {integrity: sha512-nMq0lBLguZecp9JDV4J8nlPWwxOQ4XiXUIGkV5Lvj1CMdVqbqQJe4eVrNHVC3rIM/w8nadNp5ecEoxnwkhG33w==} + + '@testcontainers/redis@11.0.3': + resolution: {integrity: sha512-0TTXdnzvH55nMc7wj5s+3e/h29M5EEZ7cQAoCR16ZzQgzcLlXFTCIzSi02EkSZYrxayaToXrBdWCc6skisFzZw==} + + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} + engines: {node: '>=18'} + + '@testing-library/dom@9.3.4': + resolution: {integrity: sha512-FlS4ZWlp97iiNWig0Muq8p+3rVDjRiYE+YKGbAqXOu9nwJFFOdL00kFpz42M+4huzYi86vAK1sOOfyOG45muIQ==} + engines: {node: '>=14'} + + '@testing-library/jest-dom@6.5.0': + resolution: {integrity: sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} + engines: {node: '>=14', npm: '>=6', yarn: '>=1'} + + '@testing-library/user-event@14.5.2': + resolution: {integrity: sha512-YAh82Wh4TIrxYLmfGcixwD18oIjyC1pFQC2Y01F2lzV2HTMiYrI0nze0FD0ocB//CKS/7jIUgae+adPqxK5yCQ==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@testing-library/user-event@14.6.1': + resolution: {integrity: sha512-vq7fv0rnt+QTXgPxr5Hjc210p6YKq2kmdziLgnsZGgLJ9e6VAShx1pACLuRjd/AS/sr7phAR58OIIpf0LlmQNw==} + engines: {node: '>=12', npm: '>=6'} + peerDependencies: + '@testing-library/dom': '>=7.21.4' + + '@testing-library/vue@8.1.0': + resolution: {integrity: sha512-ls4RiHO1ta4mxqqajWRh8158uFObVrrtAPoxk7cIp4HrnQUj/ScKzqz53HxYpG3X6Zb7H2v+0eTGLSoy8HQ2nA==} + engines: {node: '>=14'} + peerDependencies: + '@vue/compiler-sfc': '>= 3' + vue: '>= 3' + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + + '@tokenizer/token@0.3.0': + resolution: {integrity: sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==} + + '@tootallnate/once@1.1.2': + resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} + engines: {node: '>= 6'} + + '@tootallnate/once@2.0.0': + resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==} + engines: {node: '>= 10'} + + '@trysound/sax@0.2.0': + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + + '@ts-graphviz/adapter@2.0.6': + resolution: {integrity: sha512-kJ10lIMSWMJkLkkCG5gt927SnGZcBuG0s0HHswGzcHTgvtUe7yk5/3zTEr0bafzsodsOq5Gi6FhQeV775nC35Q==} + engines: {node: '>=18'} + + '@ts-graphviz/ast@2.0.7': + resolution: {integrity: sha512-e6+2qtNV99UT6DJSoLbHfkzfyqY84aIuoV8Xlb9+hZAjgpum8iVHprGeAMQ4rF6sKUAxrmY8rfF/vgAwoPc3gw==} + engines: {node: '>=18'} + + '@ts-graphviz/common@2.1.5': + resolution: {integrity: sha512-S6/9+T6x8j6cr/gNhp+U2olwo1n0jKj/682QVqsh7yXWV6ednHYqxFw0ZsY3LyzT0N8jaZ6jQY9YD99le3cmvg==} + engines: {node: '>=18'} + + '@ts-graphviz/core@2.0.7': + resolution: {integrity: sha512-w071DSzP94YfN6XiWhOxnLpYT3uqtxJBDYdh6Jdjzt+Ce6DNspJsPQgpC7rbts/B8tEkq0LHoYuIF/O5Jh5rPg==} + engines: {node: '>=18'} + + '@ts-morph/common@0.27.0': + resolution: {integrity: sha512-Wf29UqxWDpc+i61k3oIOzcUfQt79PIT9y/MWfAGlrkjg6lBC1hwDECLXPVJAhWjiGbfBCxZd65F/LIZF3+jeJQ==} + + '@tsconfig/node10@1.0.11': + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} + + '@tsconfig/node12@1.0.11': + resolution: {integrity: sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==} + + '@tsconfig/node14@1.0.3': + resolution: {integrity: sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==} + + '@tsconfig/node16@1.0.4': + resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} + + '@tybys/wasm-util@0.9.0': + resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} + + '@types/amqplib@0.10.1': + resolution: {integrity: sha512-j6ANKT79ncUDnAs/+9r9eDujxbeJoTjoVu33gHHcaPfmLQaMhvfbH2GqSe8KUM444epAp1Vl3peVOQfZk3UIqA==} + + '@types/argparse@1.0.38': + resolution: {integrity: sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==} + + '@types/aria-query@5.0.1': + resolution: {integrity: sha512-XTIieEY+gvJ39ChLcB4If5zHtPxt3Syj5rgZR+e1ctpmK8NjPf0zFqsz4JpLJT0xla9GFDKjy8Cpu331nrmE1Q==} + + '@types/asn1@0.2.0': + resolution: {integrity: sha512-5TMxIpYbIA9c1J0hYQjQDX3wr+rTgQEAXaW2BI8ECM8FO53wSW4HFZplTalrKSHuZUc76NtXcePRhwuOHqGD5g==} + + '@types/aws4@1.11.2': + resolution: {integrity: sha512-x0f96eBPrCCJzJxdPbUvDFRva4yPpINJzTuXXpmS2j9qLUpF2nyGzvXPlRziuGbCsPukwY4JfuO+8xwsoZLzGw==} + + '@types/babel__core@7.20.0': + resolution: {integrity: sha512-+n8dL/9GWblDO0iU6eZAwEIJVr5DWigtle+Q6HLOrh/pdbXOhOtqzq8VPPE2zvNJzSKY4vH/z3iT3tn0A3ypiQ==} + + '@types/babel__generator@7.6.4': + resolution: {integrity: sha512-tFkciB9j2K755yrTALxD44McOrk+gfpIpvC3sxHjRawj6PfnQxrse4Clq5y/Rq+G3mrBurMax/lG8Qn2t9mSsg==} + + '@types/babel__template@7.4.1': + resolution: {integrity: sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==} + + '@types/babel__traverse@7.18.2': + resolution: {integrity: sha512-FcFaxOr2V5KZCviw1TnutEMVUVsGt4D2hP1TAfXZAMKuHYW3xQhe3jTxNPWutgCJ3/X1c5yX8ZoGVEItxKbwBg==} + + '@types/basic-auth@1.1.3': + resolution: {integrity: sha512-W3rv6J0IGlxqgE2eQ2pTb0gBjaGtejQpJ6uaCjz3UQ65+TFTPC5/lAE+POfx1YLdjtxvejJzsIAfd3MxWiVmfg==} + + '@types/bcryptjs@2.4.2': + resolution: {integrity: sha512-LiMQ6EOPob/4yUL66SZzu6Yh77cbzJFYll+ZfaPiPPFswtIlA/Fs1MzdKYA7JApHU49zQTbJGX3PDmCpIdDBRQ==} + + '@types/bluebird@3.5.37': + resolution: {integrity: sha512-g2qEd+zkfkTEudA2SrMAeAvY7CrFqtbsLILm2dT2VIeKTqMqVzcdfURlvu6FU3srRgbmXN1Srm94pg34EIehww==} + + '@types/body-parser@1.19.2': + resolution: {integrity: sha512-ALYone6pm6QmwZoAgeyNksccT9Q4AWZQ6PvfwR37GT6r6FWUPguq6sUmNGSMV2Wr761oQoBxwGGa6DR5o1DC9g==} + + '@types/caseless@0.12.5': + resolution: {integrity: sha512-hWtVTC2q7hc7xZ/RLbxapMvDMgUnDvKvMOpKal4DrMyfGBUfB1oKaZlIRr6mJL+If3bAP6sV/QneGzF6tJjZDg==} + + '@types/cheerio@0.22.31': + resolution: {integrity: sha512-Kt7Cdjjdi2XWSfrZ53v4Of0wG3ZcmaegFXjMmz9tfNrZSkzzo36G0AL1YqSdcIA78Etjt6E609pt5h1xnQkPUw==} + + '@types/cli-progress@3.11.6': + resolution: {integrity: sha512-cE3+jb9WRlu+uOSAugewNpITJDt1VF8dHOopPO4IABFc3SXYL5WE/+PTz/FCdZRRfIujiWW3n3aMbv1eIGVRWA==} + + '@types/compression@1.7.5': + resolution: {integrity: sha512-AAQvK5pxMpaT+nDvhHrsBhLSYG5yQdtkaJE1WYieSNY2mVFKAgmU4ks65rkZD5oqnGCFLyQpUr1CqI4DmUMyDg==} + + '@types/connect@3.4.38': + resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} + + '@types/convict@6.1.1': + resolution: {integrity: sha512-R+JLaTvhsD06p4jyjUDtbd5xMtZTRE3c0iI+lrFWZogSVEjgTWPYwvJPVf+t92E+yrlbXa4X4Eg9ro6gPdUt4w==} + + '@types/cookie-parser@1.4.8': + resolution: {integrity: sha512-l37JqFrOJ9yQfRQkljb41l0xVphc7kg5JTjjr+pLRZ0IyZ49V4BQ8vbF4Ut2C2e+WH4al3xD3ZwYwIUfnbT4NQ==} + peerDependencies: + '@types/express': '*' + + '@types/cookiejar@2.1.5': + resolution: {integrity: sha512-he+DHOWReW0nghN24E1WUqM0efK4kI9oTqDm6XmK8ZPe2djZ90BSNdGnIyCLzCPw7/pogPlGbzI2wHGGmi4O/Q==} + + '@types/dateformat@3.0.1': + resolution: {integrity: sha512-KlPPdikagvL6ELjWsljbyDIPzNCeliYkqRpI+zea99vBBbCIA5JNshZAwQKTON139c87y9qvTFVgkFd14rtS4g==} + + '@types/debug@4.1.12': + resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} + + '@types/docker-modem@3.0.6': + resolution: {integrity: sha512-yKpAGEuKRSS8wwx0joknWxsmLha78wNMe9R2S3UNsVOkZded8UqOrV8KoeDXoXsjndxwyF3eIhyClGbO1SEhEg==} + + '@types/dockerode@3.3.42': + resolution: {integrity: sha512-U1jqHMShibMEWHdxYhj3rCMNCiLx5f35i4e3CEUuW+JSSszc/tVqc6WCAPdhwBymG5R/vgbcceagK0St7Cq6Eg==} + + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} + + '@types/estree@1.0.8': + resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} + + '@types/eventsource@1.1.9': + resolution: {integrity: sha512-F3K4oyM12o8W9jxuJmW+1sc8kdw0Hj0t+26urwkcolPJTgkfppEfIdftdcXmUU2QPBIwcrYO6diqgIqgCDf1FA==} + + '@types/express-serve-static-core@5.0.6': + resolution: {integrity: sha512-3xhRnjJPkULekpSzgtoNYYcTWgEZkp4myc+Saevii5JPnHNvHMRlBSHDbs7Bh1iPPoVTERHEZXyhyLbMEsExsA==} + + '@types/express@5.0.1': + resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==} + + '@types/file-saver@2.0.5': + resolution: {integrity: sha512-zv9kNf3keYegP5oThGLaPk8E081DFDuwfqjtiTzm6PoxChdJ1raSuADf2YGCVIyrSynLrgc8JWv296s7Q7pQSQ==} + + '@types/flat@5.0.5': + resolution: {integrity: sha512-nPLljZQKSnac53KDUDzuzdRfGI0TDb5qPrb+SrQyN3MtdQrOnGsKniHN1iYZsJEBIVQve94Y6gNz22sgISZq+Q==} + + '@types/formidable@3.4.5': + resolution: {integrity: sha512-s7YPsNVfnsng5L8sKnG/Gbb2tiwwJTY1conOkJzTMRvJAlLFW1nEua+ADsJQu8N1c0oTHx9+d5nqg10WuT9gHQ==} + + '@types/fs-extra@11.0.4': + resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + + '@types/ftp@0.3.33': + resolution: {integrity: sha512-L7wFlX3t9GsGgNS0oxLt6zbAZZGgsdptMmciL4cdxHmbL3Hz4Lysh8YqAR34eHsJ1uacJITcZBBDl5XpQlxPpQ==} + + '@types/glob@8.0.0': + resolution: {integrity: sha512-l6NQsDDyQUVeoTynNpC9uRvCUint/gSUXQA2euwmTuWGvPY5LSDUu6tkCtJB2SvGQlJQzLaKqcGZP4//7EDveA==} + + '@types/gm@1.25.0': + resolution: {integrity: sha512-y0nI4vp+0Vtsve+daADIHeSckm11TnWAdC4CBq2BEXTg+CfJiolnsnzsXeIEuIpBCksjN26LUZlvQKJDpthw5g==} + + '@types/graceful-fs@4.1.6': + resolution: {integrity: sha512-Sig0SNORX9fdW+bQuTEovKj3uHcUL6LQKbCrrqb1X7J6/ReAbhCXRAhc+SMejhLELFj2QcyuxmUooZ4bt5ReSw==} + + '@types/html-to-text@9.0.4': + resolution: {integrity: sha512-pUY3cKH/Nm2yYrEmDlPR1mR7yszjGx4DrwPjQ702C4/D5CwHuZTgZdIdwPkRbcuhs7BAh2L5rg3CL5cbRiGTCQ==} + + '@types/http-proxy@1.17.16': + resolution: {integrity: sha512-sdWoUajOB1cd0A8cRRQ1cfyWNbmFKLAqBB89Y8x5iYyG/mkJHc0YUH8pdWBy2omi9qtCpiIgGjuwO0dQST2l5w==} + + '@types/humanize-duration@3.27.1': + resolution: {integrity: sha512-K3e+NZlpCKd6Bd/EIdqjFJRFHbrq5TzPPLwREk5Iv/YoIjQrs6ljdAUCo+Lb2xFlGNOjGSE0dqsVD19cZL137w==} + + '@types/imap@0.8.40': + resolution: {integrity: sha512-kWFwOc88CGwWZlHqCnZiceS6EralsAHdjpQyk1+fIA875NQdIHvLpdD5NU3Pi1yZ8FKFdOF81UDNAo8/XS6HiQ==} + + '@types/inquirer@6.5.0': + resolution: {integrity: sha512-rjaYQ9b9y/VFGOpqBEXRavc3jh0a+e6evAbI31tMda8VlPaSy0AZJfXsvmIe3wklc7W6C3zCSfleuMXR7NOyXw==} + + '@types/ioredis-mock@8.2.2': + resolution: {integrity: sha512-bnbPHOjxy4TUDjRh61MMoK2QvDNZqrMDXJYrEDZP/HPFvBubR24CQ0DBi5lgWhLxG4lvVsXPRDXtZ03+JgonoQ==} + + '@types/istanbul-lib-coverage@2.0.4': + resolution: {integrity: sha512-z/QT1XN4K4KYuslS23k62yDIDLwLFkzxOuMplDtObz0+y7VqJCaO2o+SPwHCvLFZh7xazvvoor2tA/hPz9ee7g==} + + '@types/istanbul-lib-report@3.0.0': + resolution: {integrity: sha512-plGgXAPfVKFoYfa9NpYDAkseG+g6Jr294RqeqcqDixSbU34MZVJRi/P+7Y8GDpzkEwLaGZZOpKIEmeVZNtKsrg==} + + '@types/istanbul-reports@3.0.1': + resolution: {integrity: sha512-c3mAZEuK0lvBp8tmuL74XRKn1+y2dcwOUpH7x4WrF6gk1GIgiluDRgMYQtw2OFcBvAJWlt6ASU3tSqxp0Uu0Aw==} + + '@types/jest@29.5.3': + resolution: {integrity: sha512-1Nq7YrO/vJE/FYnqYyw0FS8LdrjExSgIiHyKg7xPpn+yi8Q4huZryKnkJatN1ZRH89Kw2v33/8ZMB7DuZeSLlA==} + + '@types/jmespath@0.15.0': + resolution: {integrity: sha512-uaht4XcYSq5ZrPriQW8C+g5DhptewRd1E84ph7L167sCyzLObz+U3JTpmYq/CNkvjNsz2mtyQoHPNEYQYTzWmg==} + + '@types/js-nacl@1.3.0': + resolution: {integrity: sha512-juUvxo444ZfwDSwWyhssMxSN+snqTdiUoOVXZF+/ffVrGHq3rAf1fmczWn3z9TCEAuRbaTmgAcYlZ9MutyyOkQ==} + + '@types/jsdom@20.0.1': + resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} + + '@types/json-diff@1.0.0': + resolution: {integrity: sha512-dCXC1F73Sqriz2d8Wt/sP/DztE+rlfIRPxW9WSYheHp/l3gvkeSvM6l4vhm7t4Dgn8AJAxNKajx/eobbPdP6Wg==} + + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + + '@types/jsonfile@6.1.4': + resolution: {integrity: sha512-D5qGUYwjvnNNextdU59/+fI+spnwtTFmyQP0h+PfIOSkNfpU6AOICUOkm4i0OnSk+NyjdPJrxCDro0sJsWlRpQ==} + + '@types/jsonpath@0.2.0': + resolution: {integrity: sha512-v7qlPA0VpKUlEdhghbDqRoKMxFB3h3Ch688TApBJ6v+XLDdvWCGLJIYiPKGZnS6MAOie+IorCfNYVHOPIHSWwQ==} + + '@types/jsonwebtoken@9.0.9': + resolution: {integrity: sha512-uoe+GxEuHbvy12OUQct2X9JenKM3qAscquYymuQN4fMWG9DBQtykrQEFcAbVACF7qaLw9BePSodUL0kquqBJpQ==} + + '@types/k6@0.52.0': + resolution: {integrity: sha512-yaw2wg61nKQtToDML+nngzgXVjZ6wNA4R0Q3jKDTeadG5EqfZgis5a1Q2hwY7kjuGuXmu8eM6gHg3tgnOj4vNw==} + + '@types/linkify-it@3.0.5': + resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} + + '@types/lodash-es@4.17.12': + resolution: {integrity: sha512-0NgftHUcV4v34VhXm8QBSftKVXtbkBG3ViCjs6+eJ5a6y6Mi/jiFGPc1sC7QK+9BFhWrURE3EOggmWaSxL9OzQ==} + + '@types/lodash@4.17.17': + resolution: {integrity: sha512-RRVJ+J3J+WmyOTqnz3PiBLA501eKwXl2noseKOrNo/6+XEHjTAxO4xHvxQB6QuNm+s4WRbn6rSiap8+EA+ykFQ==} + + '@types/long@4.0.2': + resolution: {integrity: sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==} + + '@types/lossless-json@1.0.1': + resolution: {integrity: sha512-zPE8kmpeL5/6L5gtTQHSOkAW/OSYYNTDRt6/2oEgLO1Zd3Rj5WVDoMloTtLJxQJhZGLGbL4pktKSh3NbzdaWdw==} + + '@types/luxon@3.2.0': + resolution: {integrity: sha512-lGmaGFoaXHuOLXFvuju2bfvZRqxAqkHPx9Y9IQdQABrinJJshJwfNCKV+u7rR3kJbiqfTF/NhOkcxxAFrObyaA==} + + '@types/luxon@3.4.2': + resolution: {integrity: sha512-TifLZlFudklWlMBfhubvgqTXRzLDI5pCbGa4P8a3wPyUQSW+1xQ5eDsreP9DWHX3tjq1ke96uYG/nwundroWcA==} + + '@types/mailparser@3.4.4': + resolution: {integrity: sha512-C6Znp2QVS25JqtuPyxj38Qh+QoFcLycdxsvcc6IZCGekhaMBzbdTXzwGzhGoYb3TfKu8IRCNV0sV1o3Od97cEQ==} + + '@types/markdown-it-emoji@2.0.5': + resolution: {integrity: sha512-iJLsmCNpSWKtV6Ia3mLSjcXJPEt7ubGG342z+hGvYx++TpM19oTUrJcI7XjbOqRQ+W2UQ323E7B0eCLwlgT/9g==} + + '@types/markdown-it-link-attributes@3.0.5': + resolution: {integrity: sha512-VZ2BGN3ywUg7mBD8W6PwR8ChpOxaQSBDbLqPgvNI+uIra3zY2af1eG/3XzWTKjEraTWskMKnZqZd6m1fDF67Bg==} + + '@types/markdown-it@13.0.9': + resolution: {integrity: sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw==} + + '@types/md5@2.3.5': + resolution: {integrity: sha512-/i42wjYNgE6wf0j2bcTX6kuowmdL/6PE4IVitMpm2eYKBUuYCprdcWVK+xEF0gcV6ufMCRhtxmReGfc6hIK7Jw==} + + '@types/mdurl@1.0.5': + resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} + + '@types/mdx@2.0.3': + resolution: {integrity: sha512-IgHxcT3RC8LzFLhKwP3gbMPeaK7BM9eBH46OdapPA7yvuIUJ8H6zHZV53J8hGZcTSnt95jANt+rTBNUUc22ACQ==} + + '@types/methods@1.1.4': + resolution: {integrity: sha512-ymXWVrDiCxTBE3+RIrrP533E70eA+9qu7zdWoHuOmGujkYtzf4HQF96b8nwHLqhuf4ykX61IGRIB38CC6/sImQ==} + + '@types/mime-types@2.1.1': + resolution: {integrity: sha512-vXOTGVSLR2jMw440moWTC7H19iUyLtP3Z1YTj7cSsubOICinjMxFeb/V57v9QdyyPGbbWolUFSSmSiRSn94tFw==} + + '@types/mime@1.3.5': + resolution: {integrity: sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w==} + + '@types/mime@3.0.1': + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} + + '@types/minimatch@5.1.2': + resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} + + '@types/ms@2.1.0': + resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} + + '@types/mssql@9.1.5': + resolution: {integrity: sha512-Q9EsgXwuRoX5wvUSu24YfbKMbFChv7pZ/jeCzPkj47ehcuXYsBcfogwrtVFosSjinD4Q/MY2YPGk9Yy1cM2Ywg==} + + '@types/multer@1.4.12': + resolution: {integrity: sha512-pQ2hoqvXiJt2FP9WQVLPRO+AmiIm/ZYkavPlIQnx282u4ZrVdztx0pkh3jjpQt0Kz+YI0YhSG264y08UJKoUQg==} + + '@types/mysql@2.15.26': + resolution: {integrity: sha512-DSLCOXhkvfS5WNNPbfn2KdICAmk8lLc+/PNvnPnF7gOdMZCxopXduqv0OQ13y/yA/zXTSikZZqVgybUxOEg6YQ==} + + '@types/node-fetch@2.6.12': + resolution: {integrity: sha512-8nneRWKCg3rMtF69nLQJnOYUcbafYeFSjqkw3jCRLsqkWFlHaoQrr5mXmofFGOx3DKn7UfmBMyov8ySvLRVldA==} + + '@types/node-fetch@2.6.13': + resolution: {integrity: sha512-QGpRVpzSaUs30JBSGPjOg4Uveu384erbHBoT1zeONvyCfwQxIkUshLAOqN/k9EjGviPRmWTTe6aH2qySWKTVSw==} + + '@types/node@20.17.57': + resolution: {integrity: sha512-f3T4y6VU4fVQDKVqJV4Uppy8c1p/sVvS3peyqxyWnzkqXFJLRU7Y1Bl7rMS1Qe9z0v4M6McY0Fp9yBsgHJUsWQ==} + + '@types/node@20.19.1': + resolution: {integrity: sha512-jJD50LtlD2dodAEO653i3YF04NWak6jN3ky+Ri3Em3mGR39/glWiboM/IePaRbgwSfqM1TpGXfAg8ohn/4dTgA==} + + '@types/node@20.19.10': + resolution: {integrity: sha512-iAFpG6DokED3roLSP0K+ybeDdIX6Bc0Vd3mLW5uDqThPWtNos3E+EqOM11mPQHKzfWHqEBuLjIlsBQQ8CsISmQ==} + + '@types/nodemailer@6.4.14': + resolution: {integrity: sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==} + + '@types/pg-pool@2.0.6': + resolution: {integrity: sha512-TaAUE5rq2VQYxab5Ts7WZhKNmuN78Q6PiFonTDdpbx8a1H0M1vhy3rhiMjl+e2iHmogyMw7jZF4FrE6eJUy5HQ==} + + '@types/pg@8.11.6': + resolution: {integrity: sha512-/2WmmBXHLsfRqzfHW7BNZ8SbYzE8OSk7i3WjFYvfgRHj7S1xj+16Je5fUKv3lVdVzk/zn9TXOqf+avFCFIE0yQ==} + + '@types/pg@8.6.1': + resolution: {integrity: sha512-1Kc4oAGzAl7uqUStZCDvaLFqZrW9qWSjXOmBfdgyBP5La7Us6Mg4GBvRlSoaZMhQF/zSj1C8CtKMBkoiT8eL8w==} + + '@types/phoenix@1.6.6': + resolution: {integrity: sha512-PIzZZlEppgrpoT2QgbnDU+MMzuR6BbCjllj0bM70lWoejMeNJAxCchxnv7J3XFkI8MpygtRpzXrIlmWUBclP5A==} + + '@types/promise-ftp-common@1.1.0': + resolution: {integrity: sha512-mqo6D4qdiJdzeqlzFwEIchQQZk2hZacjssmjoAX7nClcREmRUUsnmgbWXEfA2qK986rwOPqepfRoSu7rsjAKag==} + + '@types/promise-ftp@1.3.4': + resolution: {integrity: sha512-fCIX7I84e25RX6bZ+qiIv0Puu5axWhCj9+El+4Kz1gZZyO/NvwdGTNQ33y6jdrPuTn3Df3kg7nMi1HohjNQLog==} + + '@types/prop-types@15.7.15': + resolution: {integrity: sha512-F6bEyamV9jKGAFBEmlQnesRPGOQqS2+Uwi0Em15xenOxHaf2hv6L8YCVn3rPdPJOiJfPiCnLIRyvwVaqMY3MIw==} + + '@types/proxy-from-env@1.0.4': + resolution: {integrity: sha512-TPR9/bCZAr3V1eHN4G3LD3OLicdJjqX1QRXWuNcCYgE66f/K8jO2ZRtHxI2D9MbnuUP6+qiKSS8eUHp6TFHGCw==} + + '@types/psl@1.1.0': + resolution: {integrity: sha512-HhZnoLAvI2koev3czVPzBNRYvdrzJGLjQbWZhqFmS9Q6a0yumc5qtfSahBGb5g+6qWvA8iiQktqGkwoIXa/BNQ==} + + '@types/qs@6.9.15': + resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + + '@types/quoted-printable@1.0.2': + resolution: {integrity: sha512-3B28oB1rRaZNb3N5dlxysm8lH1ujzvReDuYBiIO4jvpTIg9ksrILCNgPxSGVyTWE/qwuxzgHaVehwMK3CVqAtA==} + + '@types/range-parser@1.2.4': + resolution: {integrity: sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw==} + + '@types/react@18.0.27': + resolution: {integrity: sha512-3vtRKHgVxu3Jp9t718R9BuzoD4NcQ8YJ5XRzsSKxNDiDonD2MXIT1TmSkenxuCycZJoQT5d2vE8LwWJxBC1gmA==} + + '@types/readable-stream@4.0.10': + resolution: {integrity: sha512-AbUKBjcC8SHmImNi4yK2bbjogQlkFSg7shZCcicxPQapniOlajG8GCc39lvXzCWX4lLRRs7DM3VAeSlqmEVZUA==} + + '@types/replacestream@4.0.1': + resolution: {integrity: sha512-3ecTmnzB90sgarVpIszCF1cX2cnxwqDovWb31jGrKfxAL0Knui1H7Reaz/zlT9zaE3u0un7L5cNy9fQPy0d2sg==} + + '@types/request@2.48.12': + resolution: {integrity: sha512-G3sY+NpsA9jnwm0ixhAFQSJ3Q9JkpLZpJbI3GMv0mIAT0y3mRabYeINzal5WOChIiaTEGQYlHOKgkaM9EisWHw==} + + '@types/retry@0.12.0': + resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} + + '@types/retry@0.12.5': + resolution: {integrity: sha512-3xSjTp3v03X/lSQLkczaN9UIEwJMoMCA1+Nb5HfbJEQWogdeQIyVtTvxPXDQjZ5zws8rFQfVfRdz03ARihPJgw==} + + '@types/rfc2047@2.0.1': + resolution: {integrity: sha512-slgtykv+XXME7EperkdqfdBBUGcs28ru+a21BK0zOQY4IoxE7tEqvIcvAFAz5DJVxyOmoAUXo30Oxpm3KS+TBQ==} + + '@types/sanitize-html@2.11.0': + resolution: {integrity: sha512-7oxPGNQHXLHE48r/r/qjn7q0hlrs3kL7oZnGj0Wf/h9tj/6ibFyRkNbsDxaBBZ4XUZ0Dx5LGCyDJ04ytSofacQ==} + + '@types/scheduler@0.26.0': + resolution: {integrity: sha512-WFHp9YUJQ6CKshqoC37iOlHnQSmxNc795UhB26CyBBttrN9svdIrUjl/NjnNmfcwtncN0h/0PPAFWv9ovP8mLA==} + + '@types/semver@7.7.0': + resolution: {integrity: sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA==} + + '@types/send@0.17.4': + resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} + + '@types/serve-static@1.15.0': + resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} + + '@types/shelljs@0.8.11': + resolution: {integrity: sha512-x9yaMvEh5BEaZKeVQC4vp3l+QoFj3BXcd4aYfuKSzIIyihjdVARAadYy3SMNIz0WCCdS2vB9JL/U6GQk5PaxQw==} + + '@types/shimmer@1.2.0': + resolution: {integrity: sha512-UE7oxhQLLd9gub6JKIAhDq06T0F6FnztwMNRvYgjeQSBeMc1ZG/tA47EwfduvkuQS8apbkM/lpLpWsaCeYsXVg==} + + '@types/showdown@1.9.4': + resolution: {integrity: sha512-50ehC3IAijfkvoNqmQ+VL73S7orOxmAK8ljQAFBv8o7G66lAZyxQj1L3BAv2dD86myLXI+sgKP1kcxAaxW356w==} + + '@types/sinonjs__fake-timers@8.1.1': + resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + + '@types/sizzle@2.3.3': + resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==} + + '@types/ssh2-sftp-client@9.0.5': + resolution: {integrity: sha512-cpUO6okDusnfLw2hnmaBiomlSchIWNVcCdpywLRsg/h9Q1TTiUSrzhkn5sJeeyTM8h6xRbZEZZjgWtUXFDogHg==} + + '@types/ssh2-streams@0.1.12': + resolution: {integrity: sha512-Sy8tpEmCce4Tq0oSOYdfqaBpA3hDM8SoxoFh5vzFsu2oL+znzGz8oVWW7xb4K920yYMUY+PIG31qZnFMfPWNCg==} + + '@types/ssh2@0.5.52': + resolution: {integrity: sha512-lbLLlXxdCZOSJMCInKH2+9V/77ET2J6NPQHpFI0kda61Dd1KglJs+fPQBchizmzYSOJBgdTajhPqBO1xxLywvg==} + + '@types/ssh2@1.11.6': + resolution: {integrity: sha512-8Mf6bhzYYBLEB/G6COux7DS/F5bCWwojv/qFo2yH/e4cLzAavJnxvFXrYW59iKfXdhG6OmzJcXDasgOb/s0rxw==} + + '@types/sshpk@1.17.4': + resolution: {integrity: sha512-5gI/7eJn6wmkuIuFY8JZJ1g5b30H9K5U5vKrvOuYu+hoZLb2xcVEgxhYZ2Vhbs0w/ACyzyfkJq0hQtBfSCugjw==} + + '@types/stack-utils@2.0.1': + resolution: {integrity: sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw==} + + '@types/stylis@4.2.0': + resolution: {integrity: sha512-n4sx2bqL0mW1tvDf/loQ+aMX7GQD3lc3fkCMC55VFNDu/vBOabO+LTIeXKM14xK0ppk5TUGcWRjiSpIlUpghKw==} + + '@types/superagent@8.1.9': + resolution: {integrity: sha512-pTVjI73witn+9ILmoJdajHGW2jkSaOzhiFYF1Rd3EQ94kymLqB9PjD9ISg7WaALC7+dCHT0FGe9T2LktLq/3GQ==} + + '@types/supertest@6.0.3': + resolution: {integrity: sha512-8WzXq62EXFhJ7QsH3Ocb/iKQ/Ty9ZVWnVzoTKc9tyyFRRF3a74Tk2+TLFgaFFw364Ere+npzHKEJ6ga2LzIL7w==} + + '@types/swagger-ui-express@4.1.8': + resolution: {integrity: sha512-AhZV8/EIreHFmBV5wAs0gzJUNq9JbbSXgJLQubCC0jtIo6prnI9MIRRxnU4MZX9RB9yXxF1V4R7jtLl/Wcj31g==} + + '@types/syslog-client@1.1.2': + resolution: {integrity: sha512-X8MwGedXYNmYltPDaZQCM9X6cSdfFbJZWhrU81gWKsg+Q6mSgRWs/12Mq9nHaUV4wqMYDNrnytbwbMUiVnWegw==} + + '@types/tedious@4.0.14': + resolution: {integrity: sha512-KHPsfX/FoVbUGbyYvk1q9MMQHLPeRZhRJZdO45Q4YjvFkv4hMNghCWTvy7rdKessBsmtz4euWCWAB6/tVpI1Iw==} + + '@types/tedious@4.0.9': + resolution: {integrity: sha512-ipwFvfy9b2m0gjHsIX0D6NAAwGCKokzf5zJqUZHUGt+7uWVlBIy6n2eyMgiKQ8ChLFVxic/zwQUhjLYNzbHDRA==} + + '@types/temp@0.9.4': + resolution: {integrity: sha512-+VfWIwrlept2VBTj7Y2wQnI/Xfscy1u8Pyj/puYwss6V1IblXn1x7S0S9eFh6KyBolgLCm+rUFzhFAbdkR691g==} + + '@types/through@0.0.30': + resolution: {integrity: sha512-FvnCJljyxhPM3gkRgWmxmDZyAQSiBQQWLI0A0VFL0K7W1oRUrPJSqNO0NvTnLkBcotdlp3lKvaT0JrnyRDkzOg==} + + '@types/tough-cookie@4.0.2': + resolution: {integrity: sha512-Q5vtl1W5ue16D+nIaW8JWebSSraJVlK+EthKn7e7UcD4KWsaSJ8BqGPXNaPghgtcn/fhvrN17Tv8ksUsQpiplw==} + + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + + '@types/triple-beam@1.3.5': + resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + + '@types/utf8@3.0.3': + resolution: {integrity: sha512-+lqLGxWZsEe4Z6OrzBI7Ym4SMUTaMS5yOrHZ0/IL0bpIye1Qbs4PpobJL2mLDbftUXlPFZR7fu6d1yM+bHLX1w==} + + '@types/uuencode@0.0.3': + resolution: {integrity: sha512-NaBWHPPQvcXqiSaMAGa2Ea/XaFcK/nHwGe2akwJBXRLkCNa2+izx/F1aKJrzFH+L68D88VLYIATTYP7B2k4zVA==} + + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + + '@types/uuid@8.3.4': + resolution: {integrity: sha512-c/I8ZRb51j+pYGAu5CrFMRxqZ2ke4y2grEBO5AUjgSkSk+qT2Ea+OdWElz/OiMf5MNpn2b17kuVBwZLQJXzihw==} + + '@types/uuid@9.0.8': + resolution: {integrity: sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==} + + '@types/validator@13.7.10': + resolution: {integrity: sha512-t1yxFAR2n0+VO6hd/FJ9F2uezAZVWHLmpmlJzm1eX03+H7+HsuTAp7L8QJs+2pQCfWkP1+EXsGK9Z9v7o/qPVQ==} + + '@types/validator@13.7.7': + resolution: {integrity: sha512-jiEw2kTUJ8Jsh4A1K4b5Pkjj9Xz6FktLLOQ36ZVLRkmxFbpTvAV2VRoKMojz8UlZxNg/2dZqzpigH4JYn1bkQg==} + + '@types/web-bluetooth@0.0.16': + resolution: {integrity: sha512-oh8q2Zc32S6gd/j50GowEjKLoOVOwHP/bWVjKJInBwQqdOYMdPrf1oVlelTlyfFK3CKxL1uahMDAr+vy8T7yMQ==} + + '@types/web-bluetooth@0.0.20': + resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} + + '@types/web-bluetooth@0.0.21': + resolution: {integrity: sha512-oIQLCGWtcFZy2JW77j9k8nHzAOpqMHLQejDA48XXMWH6tjCQHz5RCFz1bzsmROyL6PUm+LLnUiI4BCn221inxA==} + + '@types/webidl-conversions@7.0.0': + resolution: {integrity: sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog==} + + '@types/whatwg-url@11.0.4': + resolution: {integrity: sha512-lXCmTWSHJvf0TRSO58nm978b8HJ/EdsSsEKLd3ODHFjo+3VGAyyTp4v50nWvwtzBxSMQrVOK7tcuN0zGPLICMw==} + + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + + '@types/xml2js@0.4.14': + resolution: {integrity: sha512-4YnrRemBShWRO2QjvUin8ESA41rH+9nQGLUGZV/1IDhi3SL9OhdpNC/MrulTWuptXKwhx/aDxE7toV0f/ypIXQ==} + + '@types/yamljs@0.2.31': + resolution: {integrity: sha512-QcJ5ZczaXAqbVD3o8mw/mEBhRvO5UAdTtbvgwL/OgoWubvNBh6/MxLBAigtcgIFaq3shon9m3POIxQaLQt4fxQ==} + + '@types/yargs-parser@21.0.0': + resolution: {integrity: sha512-iO9ZQHkZxHn4mSakYV0vFHAVDyEOIJQrV2uZ06HxEPcx+mt8swXoZHIbaaJ2crJYFfErySgktuTZ3BeLz+XmFA==} + + '@types/yargs@17.0.19': + resolution: {integrity: sha512-cAx3qamwaYX9R0fzOIZAlFpo4A+1uBVCxqpKz9D26uTF4srRXaGTTsikQmaotCtNdbhzyUH7ft6p9ktz9s6UNQ==} + + '@types/yauzl@2.10.0': + resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} + + '@typescript-eslint/eslint-plugin@8.35.0': + resolution: {integrity: sha512-ijItUYaiWuce0N1SoSMrEd0b6b6lYkYt99pqCPfybd+HKVXtEvYhICfLdwp42MhiI5mp0oq7PKEL+g1cNiz/Eg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.35.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.9.2 + + '@typescript-eslint/parser@8.35.0': + resolution: {integrity: sha512-6sMvZePQrnZH2/cJkwRpkT7DxoAWh+g6+GFRK6bV3YQo7ogi3SX5rgF6099r5Q53Ma5qeT7LGmOmuIutF4t3lA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.9.2 + + '@typescript-eslint/project-service@8.35.0': + resolution: {integrity: sha512-41xatqRwWZuhUMF/aZm2fcUsOFKNcG28xqRSS6ZVr9BVJtGExosLAm5A1OxTjRMagx8nJqva+P5zNIGt8RIgbQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: 5.9.2 + + '@typescript-eslint/rule-tester@8.35.0': + resolution: {integrity: sha512-1c8zz1uRy5Icd46+ziopy5k4Q/PxDAUeQxjw4vvSzPMCrbAbEA80ufsUJpBkIkc2iXEzlf4/J0Ha+4UTESSrNQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + '@typescript-eslint/scope-manager@6.21.0': + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/scope-manager@8.35.0': + resolution: {integrity: sha512-+AgL5+mcoLxl1vGjwNfiWq5fLDZM1TmTPYs2UkyHfFhgERxBbqHlNjRzhThJqz+ktBqTChRYY6zwbMwy0591AA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/tsconfig-utils@8.35.0': + resolution: {integrity: sha512-04k/7247kZzFraweuEirmvUj+W3bJLI9fX6fbo1Qm2YykuBvEhRTPl8tcxlYO8kZZW+HIXfkZNoasVb8EV4jpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: 5.9.2 + + '@typescript-eslint/type-utils@8.35.0': + resolution: {integrity: sha512-ceNNttjfmSEoM9PW87bWLDEIaLAyR+E6BoYJQ5PfaDau37UGca9Nyq3lBk8Bw2ad0AKvYabz6wxc7DMTO2jnNA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.9.2 + + '@typescript-eslint/types@6.21.0': + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/types@8.35.0': + resolution: {integrity: sha512-0mYH3emanku0vHw2aRLNGqe7EXh9WHEhi7kZzscrMDf6IIRUQ5Jk4wp1QrledE/36KtdZrVfKnE32eZCf/vaVQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/typescript-estree@6.21.0': + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.35.0': + resolution: {integrity: sha512-F+BhnaBemgu1Qf8oHrxyw14wq6vbL8xwWKKMwTMwYIRmFFY/1n/9T/jpbobZL8vp7QyEUcC6xGrnAO4ua8Kp7w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: 5.9.2 + + '@typescript-eslint/utils@6.21.0': + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} + engines: {node: ^16.0.0 || >=18.0.0} + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + + '@typescript-eslint/utils@8.35.0': + resolution: {integrity: sha512-nqoMu7WWM7ki5tPgLVsmPM8CkqtoPUG6xXGeefM5t4x3XumOEKMoUZPdi+7F+/EotukN4R9OWdmDxN80fqoZeg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.9.2 + + '@typescript-eslint/visitor-keys@6.21.0': + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} + engines: {node: ^16.0.0 || >=18.0.0} + + '@typescript-eslint/visitor-keys@8.35.0': + resolution: {integrity: sha512-zTh2+1Y8ZpmeQaQVIc/ZZxsx8UzgKJyNg1PTvjzC7WMhPSVS8bfDX34k1SrwOf016qd5RU3az2UxUNue3IfQ5g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript/vfs@1.6.0': + resolution: {integrity: sha512-hvJUjNVeBMp77qPINuUvYXj4FyWeeMMKZkxEATEU3hqBAQ7qdTBCUFT7Sp0Zu0faeEtFf+ldXxMEDr/bk73ISg==} + peerDependencies: + typescript: 5.9.2 + + '@typespec/ts-http-runtime@0.2.2': + resolution: {integrity: sha512-Gz/Sm64+Sq/vklJu1tt9t+4R2lvnud8NbTD/ZfpZtMiUX7YeVpCA8j6NSW8ptwcoLL+NmYANwqP8DV0q/bwl2w==} + engines: {node: '>=18.0.0'} + + '@unrs/resolver-binding-android-arm-eabi@1.9.2': + resolution: {integrity: sha512-tS+lqTU3N0kkthU+rYp0spAYq15DU8ld9kXkaKg9sbQqJNF+WPMuNHZQGCgdxrUOEO0j22RKMwRVhF1HTl+X8A==} + cpu: [arm] + os: [android] + + '@unrs/resolver-binding-android-arm64@1.9.2': + resolution: {integrity: sha512-MffGiZULa/KmkNjHeuuflLVqfhqLv1vZLm8lWIyeADvlElJ/GLSOkoUX+5jf4/EGtfwrNFcEaB8BRas03KT0/Q==} + cpu: [arm64] + os: [android] + + '@unrs/resolver-binding-darwin-arm64@1.9.2': + resolution: {integrity: sha512-dzJYK5rohS1sYl1DHdJ3mwfwClJj5BClQnQSyAgEfggbUwA9RlROQSSbKBLqrGfsiC/VyrDPtbO8hh56fnkbsQ==} + cpu: [arm64] + os: [darwin] + + '@unrs/resolver-binding-darwin-x64@1.9.2': + resolution: {integrity: sha512-gaIMWK+CWtXcg9gUyznkdV54LzQ90S3X3dn8zlh+QR5Xy7Y+Efqw4Rs4im61K1juy4YNb67vmJsCDAGOnIeffQ==} + cpu: [x64] + os: [darwin] + + '@unrs/resolver-binding-freebsd-x64@1.9.2': + resolution: {integrity: sha512-S7QpkMbVoVJb0xwHFwujnwCAEDe/596xqY603rpi/ioTn9VDgBHnCCxh+UFrr5yxuMH+dliHfjwCZJXOPJGPnw==} + cpu: [x64] + os: [freebsd] + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': + resolution: {integrity: sha512-+XPUMCuCCI80I46nCDFbGum0ZODP5NWGiwS3Pj8fOgsG5/ctz+/zzuBlq/WmGa+EjWZdue6CF0aWWNv84sE1uw==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': + resolution: {integrity: sha512-sqvUyAd1JUpwbz33Ce2tuTLJKM+ucSsYpPGl2vuFwZnEIg0CmdxiZ01MHQ3j6ExuRqEDUCy8yvkDKvjYFPb8Zg==} + cpu: [arm] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': + resolution: {integrity: sha512-UYA0MA8ajkEDCFRQdng/FVx3F6szBvk3EPnkTTQuuO9lV1kPGuTB+V9TmbDxy5ikaEgyWKxa4CI3ySjklZ9lFA==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-arm64-musl@1.9.2': + resolution: {integrity: sha512-P/CO3ODU9YJIHFqAkHbquKtFst0COxdphc8TKGL5yCX75GOiVpGqd1d15ahpqu8xXVsqP4MGFP2C3LRZnnL5MA==} + cpu: [arm64] + os: [linux] + + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': + resolution: {integrity: sha512-uKStFlOELBxBum2s1hODPtgJhY4NxYJE9pAeyBgNEzHgTqTiVBPjfTlPFJkfxyTjQEuxZbbJlJnMCrRgD7ubzw==} + cpu: [ppc64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': + resolution: {integrity: sha512-LkbNnZlhINfY9gK30AHs26IIVEZ9PEl9qOScYdmY2o81imJYI4IMnJiW0vJVtXaDHvBvxeAgEy5CflwJFIl3tQ==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': + resolution: {integrity: sha512-vI+e6FzLyZHSLFNomPi+nT+qUWN4YSj8pFtQZSFTtmgFoxqB6NyjxSjAxEC1m93qn6hUXhIsh8WMp+fGgxCoRg==} + cpu: [riscv64] + os: [linux] + + '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': + resolution: {integrity: sha512-sSO4AlAYhSM2RAzBsRpahcJB1msc6uYLAtP6pesPbZtptF8OU/CbCPhSRW6cnYOGuVmEmWVW5xVboAqCnWTeHQ==} + cpu: [s390x] + os: [linux] + + '@unrs/resolver-binding-linux-x64-gnu@1.9.2': + resolution: {integrity: sha512-jkSkwch0uPFva20Mdu8orbQjv2A3G88NExTN2oPTI1AJ+7mZfYW3cDCTyoH6OnctBKbBVeJCEqh0U02lTkqD5w==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-linux-x64-musl@1.9.2': + resolution: {integrity: sha512-Uk64NoiTpQbkpl+bXsbeyOPRpUoMdcUqa+hDC1KhMW7aN1lfW8PBlBH4mJ3n3Y47dYE8qi0XTxy1mBACruYBaw==} + cpu: [x64] + os: [linux] + + '@unrs/resolver-binding-wasm32-wasi@1.9.2': + resolution: {integrity: sha512-EpBGwkcjDicjR/ybC0g8wO5adPNdVuMrNalVgYcWi+gYtC1XYNuxe3rufcO7dA76OHGeVabcO6cSkPJKVcbCXQ==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + + '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': + resolution: {integrity: sha512-EdFbGn7o1SxGmN6aZw9wAkehZJetFPao0VGZ9OMBwKx6TkvDuj6cNeLimF/Psi6ts9lMOe+Dt6z19fZQ9Ye2fw==} + cpu: [arm64] + os: [win32] + + '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': + resolution: {integrity: sha512-JY9hi1p7AG+5c/dMU8o2kWemM8I6VZxfGwn1GCtf3c5i+IKcMo2NQ8OjZ4Z3/itvY/Si3K10jOBQn7qsD/whUA==} + cpu: [ia32] + os: [win32] + + '@unrs/resolver-binding-win32-x64-msvc@1.9.2': + resolution: {integrity: sha512-ryoo+EB19lMxAd80ln9BVf8pdOAxLb97amrQ3SFN9OCRn/5M5wvwDgAe4i8ZjhpbiHoDeP8yavcTEnpKBo7lZg==} + cpu: [x64] + os: [win32] + + '@vitejs/plugin-legacy@6.0.2': + resolution: {integrity: sha512-b/a6ARuJ1yCoIH/lSjpwPMyqo3NSCoqyxYtff7VCC6cnJfvBTzd7PthcrbomhLZnMsp/eW41b6TrbNSQvHW2lA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + peerDependencies: + terser: ^5.16.0 + vite: ^6.0.0 + + '@vitejs/plugin-vue@5.2.4': + resolution: {integrity: sha512-7Yx/SXSOcQq5HiiV3orevHUFn+pmMB4cgbEkDYgnkUWb0WfeQ/wa2yFv6D5ICiCQOVpjA7vYDXrC7AGO8yjDHA==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + vue: ^3.2.25 + + '@vitest/coverage-v8@3.2.4': + resolution: {integrity: sha512-EyF9SXU6kS5Ku/U82E259WSnvg6c8KTjppUncuNdm5QHpe17mwREHnjDzozC8x9MZ0xfBUFSaLkRv4TMA75ALQ==} + peerDependencies: + '@vitest/browser': 3.2.4 + vitest: 3.2.4 + peerDependenciesMeta: + '@vitest/browser': + optional: true + + '@vitest/expect@2.0.5': + resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} + + '@vitest/expect@3.1.3': + resolution: {integrity: sha512-7FTQQuuLKmN1Ig/h+h/GO+44Q1IlglPlR2es4ab7Yvfx+Uk5xsv+Ykk+MEt/M2Yn/xGmzaLKxGw2lgy2bwuYqg==} + + '@vitest/mocker@3.1.3': + resolution: {integrity: sha512-PJbLjonJK82uCWHjzgBJZuR7zmAOrSvKk1QBxrennDIgtH4uK0TB1PvYmc0XBCigxxtiAVPfWtAdy4lpz8SQGQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.0.5': + resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} + + '@vitest/pretty-format@2.1.8': + resolution: {integrity: sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==} + + '@vitest/pretty-format@3.1.3': + resolution: {integrity: sha512-i6FDiBeJUGLDKADw2Gb01UtUNb12yyXAqC/mmRWuYl+m/U9GS7s8us5ONmGkGpUUo7/iAYzI2ePVfOZTYvUifA==} + + '@vitest/pretty-format@3.2.4': + resolution: {integrity: sha512-IVNZik8IVRJRTr9fxlitMKeJeXFFFN0JaB9PHPGQ8NKQbGpfjlTx9zO4RefN8gp7eqjNy8nyK3NZmBzOPeIxtA==} + + '@vitest/runner@3.1.3': + resolution: {integrity: sha512-Tae+ogtlNfFei5DggOsSUvkIaSuVywujMj6HzR97AHK6XK8i3BuVyIifWAm/sE3a15lF5RH9yQIrbXYuo0IFyA==} + + '@vitest/snapshot@3.1.3': + resolution: {integrity: sha512-XVa5OPNTYUsyqG9skuUkFzAeFnEzDp8hQu7kZ0N25B1+6KjGm4hWLtURyBbsIAOekfWQ7Wuz/N/XXzgYO3deWQ==} + + '@vitest/spy@2.0.5': + resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} + + '@vitest/spy@3.1.3': + resolution: {integrity: sha512-x6w+ctOEmEXdWaa6TO4ilb7l9DxPR5bwEb6hILKuxfU1NqWT2mpJD9NJN7t3OTfxmVlOMrvtoFJGdgyzZ605lQ==} + + '@vitest/utils@2.0.5': + resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} + + '@vitest/utils@2.1.8': + resolution: {integrity: sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==} + + '@vitest/utils@3.1.3': + resolution: {integrity: sha512-2Ltrpht4OmHO9+c/nmHtF09HWiyWdworqnHIwjfvDyWjuwKbdkcS9AnhsDn+8E2RM4x++foD1/tNuLPVvWG1Rg==} + + '@volar/language-core@2.4.12': + resolution: {integrity: sha512-RLrFdXEaQBWfSnYGVxvR2WrO6Bub0unkdHYIdC31HzIEqATIuuhRRzYu76iGPZ6OtA4Au1SnW0ZwIqPP217YhA==} + + '@volar/source-map@2.4.12': + resolution: {integrity: sha512-bUFIKvn2U0AWojOaqf63ER0N/iHIBYZPpNGogfLPQ68F5Eet6FnLlyho7BS0y2HJ1jFhSif7AcuTx1TqsCzRzw==} + + '@volar/typescript@2.4.12': + resolution: {integrity: sha512-HJB73OTJDgPc80K30wxi3if4fSsZZAOScbj2fcicMuOPoOkcf9NNAINb33o+DzhBdF9xTKC1gnPmIRDous5S0g==} + + '@vue-flow/background@1.3.2': + resolution: {integrity: sha512-eJPhDcLj1wEo45bBoqTXw1uhl0yK2RaQGnEINqvvBsAFKh/camHJd5NPmOdS1w+M9lggc9igUewxaEd3iCQX2w==} + peerDependencies: + '@vue-flow/core': ^1.23.0 + vue: ^3.3.0 + + '@vue-flow/controls@1.1.2': + resolution: {integrity: sha512-6dtl/JnwDBNau5h3pDBdOCK6tdxiVAOL3cyruRL61gItwq5E97Hmjmj2BIIqX2p7gU1ENg3z80Z4zlu58fGlsg==} + peerDependencies: + '@vue-flow/core': ^1.23.0 + vue: ^3.3.0 + + '@vue-flow/core@1.42.1': + resolution: {integrity: sha512-QzzTxMAXfOeETKc+N3XMp5XpiPxKBHK5kq98avgTsE6MXyeU2E8EkANwwgSB/hvJ/k36RjU0Y7BOwCHiqiI1tw==} + peerDependencies: + vue: ^3.3.0 + + '@vue-flow/minimap@1.5.2': + resolution: {integrity: sha512-XNSpWwwXfCWqJilc2eCW+3ry3r9vhF8HmUw5wrAsUTHiss4R9k5uZLABo7c3T3VdcVRJ8pTfUJ9vjpzb8H+FKg==} + peerDependencies: + '@vue-flow/core': ^1.23.0 + vue: ^3.3.0 + + '@vue-flow/node-resizer@1.4.0': + resolution: {integrity: sha512-S52MRcSpd6asza8Cl0bKM2sHGrbq7vBydKHDuPdoTD+cvjNX6XF4LSiPZOuzExePI6b+O6dg2EZ1378oOLGFpA==} + peerDependencies: + '@vue-flow/core': ^1.23.0 + vue: ^3.3.0 + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/compiler-vue2@2.7.16': + resolution: {integrity: sha512-qYC3Psj9S/mfu9uVi5WvNZIzq+xnXMhOwbTFKKDD7b1lhpnn71jXSFdTQ+WsIEk0ONCd7VV2IMm7ONl6tbQ86A==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/language-core@2.1.10': + resolution: {integrity: sha512-DAI289d0K3AB5TUG3xDp9OuQ71CnrujQwJrQnfuZDwo6eGNf0UoRlPuaVNO+Zrn65PC3j0oB2i7mNmVPggeGeQ==} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@2.2.0': + resolution: {integrity: sha512-O1ZZFaaBGkKbsRfnVH1ifOK1/1BUkyK+3SQsfnh6PmMmD4qJcTU8godCeA96jjDRTL6zgnK7YzCHfaUlH2r0Mw==} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + '@vue/language-core@2.2.8': + resolution: {integrity: sha512-rrzB0wPGBvcwaSNRriVWdNAbHQWSf0NlGqgKHK5mEkXpefjUlVRP62u03KvwZpvKVjRnBIQ/Lwre+Mx9N6juUQ==} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + '@vue/test-utils@2.4.6': + resolution: {integrity: sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==} + + '@vue/tsconfig@0.7.0': + resolution: {integrity: sha512-ku2uNz5MaZ9IerPPUyOHzyjhXoX2kVJaVf7hL315DC17vS6IiZRmmCPfggNbU16QTvM80+uYYy3eYJB59WCtvg==} + peerDependencies: + typescript: 5.9.2 + vue: ^3.4.0 + peerDependenciesMeta: + typescript: + optional: true + vue: + optional: true + + '@vueuse/components@10.11.0': + resolution: {integrity: sha512-ZvLZI23d5ZAtva5fGyYh/jQtZO8l+zJ5tAXyYNqHJZkq1o5yWyqZhENvSv5mfDmN5IuAOp4tq02mRmX/ipFGcg==} + + '@vueuse/core@10.11.0': + resolution: {integrity: sha512-x3sD4Mkm7PJ+pcq3HX8PLPBadXCAlSDR/waK87dz0gQE+qJnaaFhc/dZVfJz+IUYzTMVGum2QlR7ImiJQN4s6g==} + + '@vueuse/core@12.8.2': + resolution: {integrity: sha512-HbvCmZdzAu3VGi/pWYm5Ut+Kd9mn1ZHnn4L5G8kOQTPs/IwIAmJoBrmYk2ckLArgMXZj0AW3n5CAejLUO+PhdQ==} + + '@vueuse/core@9.13.0': + resolution: {integrity: sha512-pujnclbeHWxxPRqXWmdkKV5OX4Wk4YeK7wusHqRwU0Q7EFusHoqNA/aPhB6KCh9hEqJkLAJo7bb0Lh9b+OIVzw==} + + '@vueuse/metadata@10.11.0': + resolution: {integrity: sha512-kQX7l6l8dVWNqlqyN3ePW3KmjCQO3ZMgXuBMddIu83CmucrsBfXlH+JoviYyRBws/yLTQO8g3Pbw+bdIoVm4oQ==} + + '@vueuse/metadata@12.8.2': + resolution: {integrity: sha512-rAyLGEuoBJ/Il5AmFHiziCPdQzRt88VxR+Y/A/QhJ1EWtWqPBBAxTAFaSkviwEuOEZNtW8pvkPgoCZQ+HxqW1A==} + + '@vueuse/metadata@9.13.0': + resolution: {integrity: sha512-gdU7TKNAUVlXXLbaF+ZCfte8BjRJQWPCa2J55+7/h+yDtzw3vOoGQDRXzI6pyKyo6bXFT5/QoPE4hAknExjRLQ==} + + '@vueuse/shared@10.11.0': + resolution: {integrity: sha512-fyNoIXEq3PfX1L3NkNhtVQUSRtqYwJtJg+Bp9rIzculIZWHTkKSysujrOk2J+NrRulLTQH9+3gGSfYLWSEWU1A==} + + '@vueuse/shared@12.8.2': + resolution: {integrity: sha512-dznP38YzxZoNloI0qpEfpkms8knDtaoQ6Y/sfS0L7Yki4zh40LFHEhur0odJC6xTHG5dxWVPiUWBXn+wCG2s5w==} + + '@vueuse/shared@9.13.0': + resolution: {integrity: sha512-UrnhU+Cnufu4S6JLCPZnkWh0WwZGUp72ktOF2DFptMlOs3TOdVv8xJN53zhHGARmVOsz5KqOls09+J1NR6sBKw==} + + '@vvo/tzdb@6.141.0': + resolution: {integrity: sha512-vpuv8Eo75WwW6oHygfSSJ8J2AIADlqoHu9HmKxD8Ey/hmRhxt0+/nEGbzBy/Y/Q1qsdgDj3kP3NRLr2082VzgA==} + + '@xata.io/client@0.28.4': + resolution: {integrity: sha512-B02WHIA/ViHya84XvH6JCo13rd5h4S5vVyY2aYi6fIcjDIbCpsSLJ4oGWpdodovRYeAZy9Go4OhdyZwMIRC4BQ==} + peerDependencies: + typescript: 5.9.2 + + '@xmldom/is-dom-node@1.0.1': + resolution: {integrity: sha512-CJDxIgE5I0FH+ttq/Fxy6nRpxP70+e2O048EPe85J2use3XKdatVM7dDVvFNjQudd9B49NPoZ+8PG49zj4Er8Q==} + engines: {node: '>= 16'} + + '@xmldom/xmldom@0.8.10': + resolution: {integrity: sha512-2WALfTl4xo2SkGCYRt6rDTFfk9R1czmBvUQy12gK2KuRKIpWEhcbbzy8EZXtz/jkRqHX8bFEc6FC1HjX4TUWYw==} + engines: {node: '>=10.0.0'} + + '@zilliz/milvus2-sdk-node@2.5.7': + resolution: {integrity: sha512-5gvIlllZCDkbcy1O9WjV4bZWgq+mlNekl5W4JcyO0HpyPcovoGF6cgWksl38kjXSl7WUSt1jWm2Q71Ua3r6foA==} + + abab@2.0.6: + resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} + deprecated: Use your platform's native atob() and btoa() methods instead + + abbrev@1.1.1: + resolution: {integrity: sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==} + + abort-controller-x@0.4.3: + resolution: {integrity: sha512-VtUwTNU8fpMwvWGn4xE93ywbogTYsuT+AUxAXOeelbXuQVIwNmC5YLeho9sH4vZ4ITW8414TTAOG1nW6uIVHCA==} + + abort-controller@3.0.0: + resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} + engines: {node: '>=6.5'} + + accepts@2.0.0: + resolution: {integrity: sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==} + engines: {node: '>= 0.6'} + + acorn-globals@7.0.1: + resolution: {integrity: sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==} + + acorn-import-attributes@1.9.5: + resolution: {integrity: sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==} + peerDependencies: + acorn: ^8 + + acorn-jsx@5.3.2: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} + engines: {node: '>=0.4.0'} + + acorn@7.4.1: + resolution: {integrity: sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.12.1: + resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + acorn@8.15.0: + resolution: {integrity: sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==} + engines: {node: '>=0.4.0'} + hasBin: true + + adm-zip@0.5.10: + resolution: {integrity: sha512-x0HvcHqVJNTPk/Bw8JbLWlWoo6Wwnsug0fnYYro1HBrjxZ3G7/AZk7Ahv8JwDe1uIcz8eBqvu86FuF1POiG7vQ==} + engines: {node: '>=6.0'} + + ag-charts-types@12.1.1: + resolution: {integrity: sha512-VbAOfp1E7+Z/TBufJOIjUYdx70kQRDg49WoluiVKVSB0r0el/uvxARp9xjzx4ByBq9+Xq/V23tJVsRj1MS2A/g==} + + ag-grid-community@34.1.1: + resolution: {integrity: sha512-ODVvGoMTkyGvMT8b5lzvum5r93bG6CKdJdNrk6u/aYS7oqZ5rUEXJJHC8n8Zq+o76KhFiXMBQrU39xuhz8i+Tg==} + + ag-grid-vue3@34.1.1: + resolution: {integrity: sha512-+O3nDlInu4RZJ82zkqVD/DCfps0OsfO1MUi453zEJ+CbJudhq+l4f9hy+l+OYWH10XOEdr6+HL9j6toONWyS8g==} + peerDependencies: + vue: ^3.5.0 + + agent-base@5.1.1: + resolution: {integrity: sha512-TMeqbNl2fMW0nMjTEPOwe3J/PRFP4vqeoNuQMG0HlMrtm5QxKqdvAkZ1pRBQ/ulIyDD5Yq0nJ7YbdD8ey0TO3g==} + engines: {node: '>= 6.0.0'} + + agent-base@6.0.2: + resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} + engines: {node: '>= 6.0.0'} + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + agentkeepalive@4.6.0: + resolution: {integrity: sha512-kja8j7PjmncONqaTsB8fQ+wE2mSU2DJ9D4XKoJ5PFWIdRMa6SLSN1ff4mOr4jCbfRSsxR4keIiySJU0N9T5hIQ==} + engines: {node: '>= 8.0.0'} + + aggregate-error@3.1.0: + resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} + engines: {node: '>=8'} + + ajv-draft-04@1.0.0: + resolution: {integrity: sha512-mv00Te6nmYbRp5DCwclxtt7yV/joXJPGS7nM+97GdxvuttCOfgI3K4U25zboyeX0O+myI8ERluxQe5wljMmVIw==} + peerDependencies: + ajv: ^8.5.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv-formats@3.0.1: + resolution: {integrity: sha512-8iUql50EUR+uUcdRQ3HDqa6EVyo3docL8g5WJ3FNcWmu62IbkGUue/pEyLBW8VGKKucTPgqeks4fIU1DA4yowQ==} + peerDependencies: + ajv: ^8.0.0 + peerDependenciesMeta: + ajv: + optional: true + + ajv@6.12.6: + resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} + + ajv@7.2.4: + resolution: {integrity: sha512-nBeQgg/ZZA3u3SYxyaDvpvDtgZ/EZPF547ARgZBrG9Bhu1vKDwAIjtIf+sDtJUKa2zOcEbmRLBRSyMraS/Oy1A==} + + ajv@8.12.0: + resolution: {integrity: sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==} + + ajv@8.13.0: + resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} + + alasql@4.4.0: + resolution: {integrity: sha512-EQOk3NEvKcQxoYeY0d4ePF0VHAcljx3pn5ZkEowMPRThjWXyDc/VHYqC8Sg+6BH2ZhKZBdeRqlvlgZmhfGBtDA==} + engines: {node: '>=15'} + hasBin: true + + alien-signals@0.2.2: + resolution: {integrity: sha512-cZIRkbERILsBOXTQmMrxc9hgpxglstn69zm+F1ARf4aPAzdAFYd6sBq87ErO0Fj3DV94tglcyHG5kQz9nDC/8A==} + + alien-signals@0.4.14: + resolution: {integrity: sha512-itUAVzhczTmP2U5yX67xVpsbbOiquusbWVyA9N+sy6+r6YVbFkahXvNCeEPWEOMhwDYwbVbGHFkVL03N9I5g+Q==} + + alien-signals@1.0.4: + resolution: {integrity: sha512-DJqqQD3XcsaQcQ1s+iE2jDUZmmQpXwHiR6fCAim/w87luaW+vmLY8fMlrdkmRwzaFXhkxf3rqPCR59tKVv1MDw==} + + amqplib@0.10.6: + resolution: {integrity: sha512-TGZJ/Q6PO0ns/a72zw/d3FI0ywqY7oMqTbRzji2/AsoA/1frIhIOuVoqZMapDt6XFppbbdT0NEzd9dYwmKI0rQ==} + engines: {node: '>=10'} + + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} + engines: {node: '>=6'} + + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + + ansi-regex@5.0.1: + resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} + engines: {node: '>=8'} + + ansi-regex@6.0.1: + resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + engines: {node: '>=12'} + + ansi-styles@4.3.0: + resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} + engines: {node: '>=8'} + + ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + + ansi-styles@6.2.1: + resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} + engines: {node: '>=12'} + + ansis@3.17.0: + resolution: {integrity: sha512-0qWUglt9JEqLFr3w1I1pbrChn1grhaiAR2ocX1PP/flRmxgtwTzPFFFnfIlD6aMOLQZgSuCRlidD70lvx8yhzg==} + engines: {node: '>=14'} + + ansis@3.2.0: + resolution: {integrity: sha512-Yk3BkHH9U7oPyCN3gL5Tc7CpahG/+UFv/6UG03C311Vy9lzRmA5uoxDTpU9CO3rGHL6KzJz/pdDeXZCZ5Mu/Sg==} + engines: {node: '>=15'} + + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} + + anymatch@3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} + engines: {node: '>= 8'} + + app-module-path@2.2.0: + resolution: {integrity: sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ==} + + app-root-path@3.1.0: + resolution: {integrity: sha512-biN3PwB2gUtjaYy/isrU3aNWI5w+fAfvHkSvCKeQGxhmYpwKFUxudR3Yya+KqVRHBmEDYh+/lTozYCFbmzX4nA==} + engines: {node: '>= 6.0.0'} + + append-field@1.0.0: + resolution: {integrity: sha512-klpgFSWLW1ZEs8svjfb7g4qWY0YS5imI82dTg+QahUvJ8YqAY0P10Uk8tTyh9ZGuYEZEMaeJYCF5BFuX552hsw==} + + aproba@2.0.0: + resolution: {integrity: sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==} + + arch@2.2.0: + resolution: {integrity: sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==} + + archiver-utils@5.0.2: + resolution: {integrity: sha512-wuLJMmIBQYCsGZgYLTy5FIB2pF6Lfb6cXMSF8Qywwk3t20zWnAi7zLcQFdKQmIB8wyZpY5ER38x08GbwtR2cLA==} + engines: {node: '>= 14'} + + archiver@7.0.1: + resolution: {integrity: sha512-ZcbTaIqJOfCc03QwD468Unz/5Ir8ATtvAHsK+FdXbDIbGfihqh9mrvdcYunQzqn4HrvWWaFyaxJhGZagaJJpPQ==} + engines: {node: '>= 14'} + + are-we-there-yet@3.0.1: + resolution: {integrity: sha512-QZW4EDmGwlYur0Yyf/b2uGucHQMa8aFUP7eu9ddR73vvhFyt4V0Vl3QHPcTNJ8l6qYOBdxgXdnBXQrHilfRQBg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + arg@4.1.3: + resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} + + arg@5.0.2: + resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} + + argparse@1.0.10: + resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} + + argparse@2.0.1: + resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + + aria-hidden@1.2.6: + resolution: {integrity: sha512-ik3ZgC9dY/lYVVM++OISsaYDeg1tb0VtP5uL3ouh1koGOaUMDPpbFIei4JkFimWUFPn90sbMNMXQAIVOlnYKJA==} + engines: {node: '>=10'} + + aria-query@5.1.3: + resolution: {integrity: sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ==} + + aria-query@5.3.0: + resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + + array-buffer-byte-length@1.0.1: + resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} + engines: {node: '>= 0.4'} + + array-buffer-byte-length@1.0.2: + resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==} + engines: {node: '>= 0.4'} + + array-hyper-unique@2.1.4: + resolution: {integrity: sha512-RVsGx2YpFGhGpgdkK7A0VjFQecVUCowpkQerGCsyXVRXHxccAlPPTDt9ueF/X7Zq/6z6duZ49i9WzTCzcnQygQ==} + + array-includes@3.1.9: + resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==} + engines: {node: '>= 0.4'} + + array-parallel@0.1.3: + resolution: {integrity: sha512-TDPTwSWW5E4oiFiKmz6RGJ/a80Y91GuLgUYuLd49+XBS75tYo8PNgaT2K/OxuQYqkoI852MDGBorg9OcUSTQ8w==} + + array-series@0.1.5: + resolution: {integrity: sha512-L0XlBwfx9QetHOsbLDrE/vh2t018w9462HM3iaFfxRiK83aJjAt/Ja3NMkOW7FICwWTlQBa3ZbL5FKhuQWkDrg==} + + array-union@2.1.0: + resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} + engines: {node: '>=8'} + + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} + engines: {node: '>= 0.4'} + + array.prototype.flat@1.3.3: + resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==} + engines: {node: '>= 0.4'} + + array.prototype.flatmap@1.3.3: + resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==} + engines: {node: '>= 0.4'} + + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.3: + resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} + engines: {node: '>= 0.4'} + + arraybuffer.prototype.slice@1.0.4: + resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==} + engines: {node: '>= 0.4'} + + arrify@2.0.1: + resolution: {integrity: sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==} + engines: {node: '>=8'} + + asap@2.0.6: + resolution: {integrity: sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==} + + asn1.js-rfc2560@5.0.1: + resolution: {integrity: sha512-1PrVg6kuBziDN3PGFmRk3QrjpKvP9h/Hv5yMrFZvC1kpzP6dQRzf5BpKstANqHBkaOUmTpakJWhicTATOA/SbA==} + peerDependencies: + asn1.js: ^5.0.0 + + asn1.js-rfc5280@3.0.0: + resolution: {integrity: sha512-Y2LZPOWeZ6qehv698ZgOGGCZXBQShObWnGthTrIFlIQjuV1gg2B8QOhWFRExq/MR1VnPpIIe7P9vX2vElxv+Pg==} + + asn1.js@4.10.1: + resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} + + asn1.js@5.4.1: + resolution: {integrity: sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==} + + asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + + assert-never@1.2.1: + resolution: {integrity: sha512-TaTivMB6pYI1kXwrFlEhLeGfOqoDNdTxjCdwRfFFkEA30Eu+k48W34nlok2EYWJfFFzqaEmichdNM7th6M5HNw==} + + assert-options@0.8.1: + resolution: {integrity: sha512-5lNGRB5g5i2bGIzb+J1QQE1iKU/WEMVBReFIc5pPDWjcPj23otPL0eI6PB2v7QPi0qU6Mhym5D3y0ZiSIOf3GA==} + engines: {node: '>=10.0.0'} + + assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + + assert@2.1.0: + resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + ast-module-types@6.0.1: + resolution: {integrity: sha512-WHw67kLXYbZuHTmcdbIrVArCq5wxo6NEuj3hiYAWr8mwJeC+C2mMCIBIWCiDoCye/OF/xelc+teJ1ERoWmnEIA==} + engines: {node: '>=18'} + + ast-types@0.15.2: + resolution: {integrity: sha512-c27loCv9QkZinsa5ProX751khO9DJl/AcB5c2KNtA6NRvHKS0PgLfcftz72KVq504vB0Gku5s2kUZzDBvQWvHg==} + engines: {node: '>=4'} + + ast-types@0.16.1: + resolution: {integrity: sha512-6t10qk83GOG8p0vKmaCr8eiilZwO171AvbROMtvvNiwrTly62t+7XkA8RdIIVbpMhCASAsxgAzdRSwh6nw/5Dg==} + engines: {node: '>=4'} + + ast-v8-to-istanbul@0.3.3: + resolution: {integrity: sha512-MuXMrSLVVoA6sYN/6Hke18vMzrT4TZNbZIj/hvh0fnYFpO+/kFXcLIaiPwXXWaQUPg4yJD8fj+lfJ7/1EBconw==} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + + async-function@1.0.0: + resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==} + engines: {node: '>= 0.4'} + + async-lock@1.4.1: + resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + + async-mutex@0.5.0: + resolution: {integrity: sha512-1A94B18jkJ3DYq284ohPxoXbfTA5HsQ7/Mf4DEhcyLx3Bz27Rh59iScbB6EPiP+B+joue6YCxcMXSbFC1tZKwA==} + + async-retry@1.3.3: + resolution: {integrity: sha512-wfr/jstw9xNi/0teMHrRW7dsz3Lt5ARhYNZ2ewpadnhaIp5mbALhOAP+EAdsC7t4Z6wqsDVv9+W6gm1Dk9mEyw==} + + async-validator@4.2.5: + resolution: {integrity: sha512-7HhHjtERjqlNbZtqNqy2rckN/SpOOlmDliet+lP7k+eKZEjPk3DgyeU9lIXLdeLz0uBbbVp+9Qdow9wJWgwwfg==} + + async@3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + + atomic-sleep@1.0.0: + resolution: {integrity: sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==} + engines: {node: '>=8.0.0'} + + autoprefixer@10.4.19: + resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + avsc@5.7.6: + resolution: {integrity: sha512-jyn9tfd9J3h7pgJSk4qQ/1c1Tk5qiXrvmdCDON2UjcFplqRu/KpmKmpi+Ess8ZKmmqK12U4Y3VHrfwQs1xSMZA==} + engines: {node: '>=0.11'} + + aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + + aws-ssl-profiles@1.1.1: + resolution: {integrity: sha512-+H+kuK34PfMaI9PNU/NSjBKL5hh/KDM9J72kwYeYEm0A8B1AC4fuCy3qsjnA7lxklgyXsB68yn8Z2xoZEjgwCQ==} + engines: {node: '>= 6.0.0'} + + aws4@1.11.0: + resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==} + + axe-core@4.7.2: + resolution: {integrity: sha512-zIURGIS1E1Q4pcrMjp+nnEh+16G56eG/MUllJH8yEvw7asDo7Ac9uhC9KIH5jzpITueEZolfYglnCGIuSBz39g==} + engines: {node: '>=4'} + + axios-retry@4.5.0: + resolution: {integrity: sha512-aR99oXhpEDGo0UuAlYcn2iGRds30k366Zfa05XWScR9QaQD4JYiP3/1Qt1u7YlefUOK+cn0CcwoL1oefavQUlQ==} + peerDependencies: + axios: 0.x || 1.x + + axios@1.11.0: + resolution: {integrity: sha512-1Lx3WLFQWm3ooKDYZD1eXmoGO9fxYQjrycfHFC8P0sCfQVXyROp0p9PFWBehewBOdCwHc+f/b8I0fMto5eSfwA==} + + axios@1.8.3: + resolution: {integrity: sha512-iP4DebzoNlP/YN2dpwCgb8zoCmhtkajzS48JvwmkSkXvPI3DHc7m+XYL5tGnSlJtR6nImXZmdCuN5aP8dh1d8A==} + + b4a@1.6.7: + resolution: {integrity: sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==} + + babel-jest@29.6.2: + resolution: {integrity: sha512-BYCzImLos6J3BH/+HvUCHG1dTf2MzmAB4jaVxHV+29RZLjR29XuYTmsf2sdDwkrb+FczkGo3kOhE7ga6sI0P4A==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.8.0 + + babel-plugin-istanbul@6.1.1: + resolution: {integrity: sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==} + engines: {node: '>=8'} + + babel-plugin-jest-hoist@29.5.0: + resolution: {integrity: sha512-zSuuuAlTMT4mzLj2nPnUm6fsE6270vdOfnpbJ+RmruU75UhLFvL0N2NgI7xpeS7NaB6hGqmd5pVpGTDYvi4Q3w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.11.1: + resolution: {integrity: sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-transform-import-meta@2.3.3: + resolution: {integrity: sha512-bbh30qz1m6ZU1ybJoNOhA2zaDvmeXMnGNBMVMDOJ1Fni4+wMBoy/j7MTRVmqAUCIcy54/rEnr9VEBsfcgbpm3Q==} + peerDependencies: + '@babel/core': ^7.10.0 + + babel-preset-current-node-syntax@1.0.1: + resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-preset-jest@29.5.0: + resolution: {integrity: sha512-JOMloxOqdiBSxMAzjRaH023/vvcaSaec49zvg+2LmNsktC7ei39LTJGw02J+9uUtTZUq6xbLyJ4dxe9sSmIuAg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@babel/core': ^7.0.0 + + babel-walk@3.0.0-canary-5: + resolution: {integrity: sha512-GAwkz0AihzY5bkwIY5QDR+LvsRQgB/B+1foMPvi0FZPMl5fjD7ICiznUiBdLYMH1QYe6vqu4gWYytZOccLouFw==} + engines: {node: '>= 10.0.0'} + + balanced-match@1.0.2: + resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} + + balanced-match@2.0.0: + resolution: {integrity: sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==} + + bare-events@2.5.4: + resolution: {integrity: sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA==} + + base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + + bcryptjs@2.4.3: + resolution: {integrity: sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ==} + + better-opn@3.0.2: + resolution: {integrity: sha512-aVNobHnJqLiUelTaHat9DZ1qM2w0C0Eym4LPI/3JxOnSokGVdsl1T1kN7TFvsEAD8G47A6VKQ0TVHqbBnYMJlQ==} + engines: {node: '>=12.0.0'} + + big-integer@1.6.52: + resolution: {integrity: sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg==} + engines: {node: '>=0.6'} + + bignumber.js@9.1.2: + resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==} + + binary-extensions@2.2.0: + resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} + engines: {node: '>=8'} + + binascii@0.0.2: + resolution: {integrity: sha512-rA2CrUl1+6yKrn+XgLs8Hdy18OER1UW146nM+ixzhQXDY+Bd3ySkyIJGwF2a4I45JwbvF1mDL/nWkqBwpOcdBA==} + + bindings@1.5.0: + resolution: {integrity: sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==} + + bintrees@1.0.2: + resolution: {integrity: sha512-VOMgTMwjAaUG580SXn3LacVgjurrbMme7ZZNYGSSV7mmtY6QQRh0Eg3pwIcntQ77DErK1L0NxkbetjcoXzVwKw==} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + + bl@6.0.12: + resolution: {integrity: sha512-EnEYHilP93oaOa2MnmNEjAcovPS3JlQZOyzGXi3EyEpPhm9qWvdDp7BmAVEVusGzp8LlwQK56Av+OkDoRjzE0w==} + + blob-util@2.0.2: + resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + + bluebird@2.11.0: + resolution: {integrity: sha512-UfFSr22dmHPQqPP9XWHRhq+gWnHCYguQGkXQlbyPtW5qTnhFWA8/iXg765tH0cAjy7l/zPJ1aBTO0g5XgA7kvQ==} + + bluebird@3.4.7: + resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} + + bluebird@3.5.5: + resolution: {integrity: sha512-5am6HnnfN+urzt4yfg7IgTbotDjIT/u8AJpEt0sIU9FtXfVeezXAPKswrG+xKUCOYAINpSdgZVDU6QFh+cuH3w==} + + bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + + bn.js@4.12.2: + resolution: {integrity: sha512-n4DSx829VRTRByMRGdjQ9iqsN0Bh4OolPsFnaZBLcbi8iXcB+kJ9s7EnRt4wILZNV3kPLHkRVfOc/HvhC3ovDw==} + + bn.js@5.2.2: + resolution: {integrity: sha512-v2YAxEmKaBLahNwE1mjp4WON6huMNeuDvagFZW+ASCuA/ku0bXR9hSMw0XpiqMoA3+rmnyck/tPRSFQkoC9Cuw==} + + body-parser@2.2.0: + resolution: {integrity: sha512-02qvAaxv8tp7fBa/mw1ga98OGm+eCbqzJOKoRt70sLmfEEi+jyBYVTDGfCL/k06/4EMk/z01gCe7HoCH/f2LTg==} + engines: {node: '>=18'} + + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + bowser@2.11.0: + resolution: {integrity: sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + + brace-expansion@2.0.2: + resolution: {integrity: sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==} + + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + + brorand@1.1.0: + resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} + + brotli-size@4.0.0: + resolution: {integrity: sha512-uA9fOtlTRC0iqKfzff1W34DXUA3GyVqbUaeo3Rw3d4gd1eavKVCETXrn3NzO74W+UVkG3UHu8WxUi+XvKI/huA==} + engines: {node: '>= 10.16.0'} + + browser-assert@1.2.1: + resolution: {integrity: sha512-nfulgvOR6S4gt9UKCeGJOuSGBPGiFT6oQ/2UBnvTY/5aQ1PnksW72fhZkM30DzoRRv2WpwZf1vHHEr3mtuXIWQ==} + + browser-request@0.3.3: + resolution: {integrity: sha512-YyNI4qJJ+piQG6MMEuo7J3Bzaqssufx04zpEKYfSrl/1Op59HWali9zMtBpXnkmqMcOuWJPZvudrm9wISmnCbg==} + engines: {'0': node} + + browser-resolve@2.0.0: + resolution: {integrity: sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==} + + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + + browserify-aes@1.2.0: + resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} + + browserify-cipher@1.0.1: + resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} + + browserify-des@1.0.2: + resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} + + browserify-rsa@4.1.1: + resolution: {integrity: sha512-YBjSAiTqM04ZVei6sXighu679a3SqWORA3qZTEqZImnlkDIFtKc6pNutpjyZ8RJTjQtuYfeetkxM11GwoYXMIQ==} + engines: {node: '>= 0.10'} + + browserify-sign@4.2.3: + resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} + engines: {node: '>= 0.12'} + + browserify-zlib@0.2.0: + resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} + + browserslist-to-esbuild@2.1.1: + resolution: {integrity: sha512-KN+mty6C3e9AN8Z5dI1xeN15ExcRNeISoC3g7V0Kax/MMF9MSoYA2G7lkTTcVUFntiEjkpI0HNgqJC1NjdyNUw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + browserslist: '*' + + browserslist@4.24.4: + resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + browserslist@4.25.0: + resolution: {integrity: sha512-PJ8gYKeS5e/whHBh8xrwYK+dAvEj7JXtz6uTucnMRB8OiGTsKccFekoRrjajPBHV8oOY+2tI4uxeceSimKwMFA==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + + bs-logger@0.2.6: + resolution: {integrity: sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog==} + engines: {node: '>= 6'} + + bser@2.1.1: + resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + + bson@6.10.0: + resolution: {integrity: sha512-ROchNosXMJD2cbQGm84KoP7vOGPO6/bOAW0veMMbzhXLqoZptcaYRVLitwvuhwhjjpU1qP4YZRWLhgETdgqUQw==} + engines: {node: '>=16.20.1'} + deprecated: a critical bug affecting only useBigInt64=true deserialization usage is fixed in bson@6.10.3 + + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-crc32@1.0.0: + resolution: {integrity: sha512-Db1SbgBS/fg/392AblrMJk97KggmvYhr4pB5ZIMTWtaivCPMWLkmb7m21cJvpvgK+J3nsU2CmmixNBZx4vFj/w==} + engines: {node: '>=8.0.0'} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + buffer-more-ints@1.0.0: + resolution: {integrity: sha512-EMetuGFz5SLsT0QTnXzINh4Ksr+oo4i+UGTXEshiGCQWnsgSs7ZhJ8fzlwQ+OzEMs0MpDAMr1hxnblp5a4vcHg==} + + buffer-xor@1.0.3: + resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} + + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + + buffer@6.0.3: + resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} + + buildcheck@0.0.6: + resolution: {integrity: sha512-8f9ZJCUXyT1M35Jx7MkBgmBMo3oHTTBIPLiY9xyL0pl3T5RwcPEY8cUHr5LBNfu/fk6c2T4DJZuVM/8ZZT2D2A==} + engines: {node: '>=10.0.0'} + + builtin-modules@5.0.0: + resolution: {integrity: sha512-bkXY9WsVpY7CvMhKSR6pZilZu9Ln5WDrKVBUXf2S443etkmEO4V58heTecXcUIsNsi4Rx8JUO4NfX1IcQl4deg==} + engines: {node: '>=18.20'} + + builtin-status-codes@3.0.0: + resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} + + bull@4.16.4: + resolution: {integrity: sha512-CF+nGsJyfsCC9MJL8hFxqXzbwq+jGBXhaz1j15G+5N/XtKIPFUUy5O1mfWWKbKunfuH/x+UV4NYRQDHSkjCOgA==} + engines: {node: '>=12'} + + bundle-require@5.1.0: + resolution: {integrity: sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + peerDependencies: + esbuild: ^0.25.0 + + bundlemon-utils@2.0.1: + resolution: {integrity: sha512-7wxHoOlzICvQyMRfVqoBpnM5pJt1JdcUxsYPNiFx3RlVmUEANh2xdEyoyTsVCqzeJC3rn+AbPuiermBwA3szAQ==} + engines: {node: '>=18'} + + bundlemon@3.1.0: + resolution: {integrity: sha512-8PAomH/fzAD/aXUKmphKmPm4Tl2L7mo51AAalO0EVAZE0cik58AM2x0CVdw4jutD069U2rSyRQstxHo2NEr+9Q==} + engines: {node: '>=18'} + hasBin: true + + busboy@1.6.0: + resolution: {integrity: sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==} + engines: {node: '>=10.16.0'} + + byline@5.0.0: + resolution: {integrity: sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==} + engines: {node: '>=0.10.0'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + c12@1.11.2: + resolution: {integrity: sha512-oBs8a4uvSDO9dm8b7OCFW7+dgtVrwmwnrVXYzLm43ta7ep2jCn/0MhoUFygIWtxhyy6+/MG7/agvpY0U1Iemew==} + peerDependencies: + magicast: ^0.3.4 + peerDependenciesMeta: + magicast: + optional: true + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + cacache@15.3.0: + resolution: {integrity: sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==} + engines: {node: '>= 10'} + + cache-manager@5.2.3: + resolution: {integrity: sha512-9OErI8fksFkxAMJ8Mco0aiZSdphyd90HcKiOMJQncSlU1yq/9lHHxrT8PDayxrmr9IIIZPOAEfXuGSD7g29uog==} + + cacheable@1.10.3: + resolution: {integrity: sha512-M6p10iJ/VT0wT7TLIGUnm958oVrU2cUK8pQAVU21Zu7h8rbk/PeRtRWrvHJBql97Bhzk3g1N6+2VKC+Rjxna9Q==} + + cachedir@2.3.0: + resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==} + engines: {node: '>=6'} + + call-bind-apply-helpers@1.0.2: + resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} + engines: {node: '>= 0.4'} + + call-bind@1.0.7: + resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} + engines: {node: '>= 0.4'} + + call-bind@1.0.8: + resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} + engines: {node: '>= 0.4'} + + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} + engines: {node: '>= 0.4'} + + call-me-maybe@1.0.1: + resolution: {integrity: sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==} + + callsites@3.1.0: + resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} + engines: {node: '>=6'} + + camel-case@3.0.0: + resolution: {integrity: sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==} + + camel-case@4.1.2: + resolution: {integrity: sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==} + + camelcase-css@2.0.1: + resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} + engines: {node: '>= 6'} + + camelcase@5.3.1: + resolution: {integrity: sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==} + engines: {node: '>=6'} + + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + camelize@1.0.1: + resolution: {integrity: sha512-dU+Tx2fsypxTgtLoE36npi3UqcjSSMNYfkqgmoEhtZrraP5VWq0K7FkWVTYa8eMPtnU/G2txVsfdCJTn9uzpuQ==} + + caniuse-lite@1.0.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} + + caniuse-lite@1.0.30001703: + resolution: {integrity: sha512-kRlAGTRWgPsOj7oARC9m1okJEXdL/8fekFVcxA8Hl7GH4r/sN4OJn/i6Flde373T50KS7Y37oFbMwlE8+F42kQ==} + + caniuse-lite@1.0.30001724: + resolution: {integrity: sha512-WqJo7p0TbHDOythNTqYujmaJTvtYRZrjpP8TCvH6Vb9CYJerJNKamKzIWOM4BkQatWj9H2lYulpdAQNBe7QhNA==} + + capital-case@1.0.4: + resolution: {integrity: sha512-ds37W8CytHgwnhGGTi88pcPyR15qoNkOpYwmMMfnWqqWgESapLqvDx6huFjQ5vqWSn2Z06173XNA7LtMOeUh1A==} + + caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + + chai@5.2.0: + resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} + engines: {node: '>=12'} + + chalk@3.0.0: + resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} + engines: {node: '>=8'} + + chalk@4.1.2: + resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} + engines: {node: '>=10'} + + change-case@4.1.2: + resolution: {integrity: sha512-bSxY2ws9OtviILG1EiY5K7NNxkqg/JnRnFxLtKQ96JaviiIxi7djMrSd0ECT9AC+lttClmYwKw53BWpOMblo7A==} + + change-case@5.4.4: + resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==} + + char-regex@1.0.2: + resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} + engines: {node: '>=10'} + + character-parser@2.2.0: + resolution: {integrity: sha512-+UqJQjFEFaTAs3bNsF2j2kEN1baG/zghZbdqoYEDxGZtJo9LBzl1A+m0D4n3qKx8N2FNv8/Xp6yV9mQmBuptaw==} + + chardet@0.7.0: + resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + + chardet@2.0.0: + resolution: {integrity: sha512-xVgPpulCooDjY6zH4m9YW3jbkaBe3FKIAvF5sj5t7aBNsVl2ljIE+xwJ4iNgiDZHFQvNIpjdKdVOQvvk5ZfxbQ==} + + charenc@0.0.2: + resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} + + chart.js@4.4.0: + resolution: {integrity: sha512-vQEj6d+z0dcsKLlQvbKIMYFHd3t8W/7L2vfJIbYcfyPcRx92CsHqECpueN8qVGNlKyDcr5wBrYAYKnfu/9Q1hQ==} + engines: {pnpm: '>=7'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + + cheerio-select@1.6.0: + resolution: {integrity: sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==} + + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + + cheerio@1.0.0-rc.12: + resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} + engines: {node: '>= 6'} + + cheerio@1.0.0-rc.6: + resolution: {integrity: sha512-hjx1XE1M/D5pAtMgvWwE21QClmAEeGHOIDfycgmndisdNgI6PE1cGRQkMGBcsbUbmEQyWu5PJLUcAOjtQS8DWw==} + engines: {node: '>= 0.12'} + + chokidar@4.0.3: + resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} + engines: {node: '>= 14.16.0'} + + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + + chownr@2.0.0: + resolution: {integrity: sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==} + engines: {node: '>=10'} + + chromatic@11.27.0: + resolution: {integrity: sha512-jQ2ufjS+ePpg+NtcPI9B2eOi+pAzlRd2nhd1LgNMsVCC9Bzf5t8mJtyd8v2AUuJS0LdX0QVBgkOnlNv9xviHzA==} + hasBin: true + peerDependencies: + '@chromatic-com/cypress': ^0.*.* || ^1.0.0 + '@chromatic-com/playwright': ^0.*.* || ^1.0.0 + peerDependenciesMeta: + '@chromatic-com/cypress': + optional: true + '@chromatic-com/playwright': + optional: true + + ci-info@3.8.0: + resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==} + engines: {node: '>=8'} + + ci-info@4.2.0: + resolution: {integrity: sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==} + engines: {node: '>=8'} + + cipher-base@1.0.6: + resolution: {integrity: sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw==} + engines: {node: '>= 0.10'} + + citty@0.1.6: + resolution: {integrity: sha512-tskPPKEs8D2KPafUypv2gxwJP8h/OaJmC82QQGGDQcHvXX43xF2VDACcJVmZ0EuSxkpO9Kc4MlrA3q0+FG58AQ==} + + cjs-module-lexer@1.2.2: + resolution: {integrity: sha512-cOU9usZw8/dXIXKtwa8pM0OTJQuJkxMN6w30csNRUerHfeQ5R6U3kkU/FtJeIf3M202OHfY2U8ccInBG7/xogA==} + + class-transformer@0.5.1: + resolution: {integrity: sha512-SQa1Ws6hUbfC98vKGxZH3KFY0Y1lm5Zm0SY8XX9zbK7FJCyVEac3ATW0RIpwzW+oOfmHE5PMPufDG9hCfoEOMw==} + + class-validator@0.14.0: + resolution: {integrity: sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==} + + classnames@2.5.1: + resolution: {integrity: sha512-saHYOzhIQs6wy2sVxTM6bUDsQO4F50V9RQ22qBpEdCW+I+/Wmke2HOl6lS6dTpdxVhb88/I6+Hs+438c3lfUow==} + + clean-css@4.2.4: + resolution: {integrity: sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==} + engines: {node: '>= 4.0'} + + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} + + clean-stack@2.2.0: + resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} + engines: {node: '>=6'} + + clean-stack@3.0.1: + resolution: {integrity: sha512-lR9wNiMRcVQjSB3a7xXGLuz4cr4wJuuXlaAEbRutGowQTmlp7R72/DOgN21e8jdwblMWl9UOJMJXarX94pzKdg==} + engines: {node: '>=10'} + + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-progress@3.12.0: + resolution: {integrity: sha512-tRkV3HJ1ASwm19THiiLIXLO7Im7wlTuKnvkYaTkyoAPefqjNg7W7DHKUlGRxy9vxDvbyCYQkQozvptuMkGCg8A==} + engines: {node: '>=4'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + + cli-table3@0.6.1: + resolution: {integrity: sha512-w0q/enDHhPLq44ovMGdQeeDLvwxwavsJX7oQGYt/LrBlYsyaxyDnp6z3QzFut/6kLLKnlcUVJLrpB7KBfgG/RA==} + engines: {node: 10.* || >= 12.*} + + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} + engines: {node: 10.* || >= 12.*} + + cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + + cliui@7.0.4: + resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} + + cliui@8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + + clsx@2.1.1: + resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} + engines: {node: '>=6'} + + cluster-key-slot@1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} + engines: {node: '>=0.10.0'} + + co@4.6.0: + resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} + engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + + code-block-writer@13.0.3: + resolution: {integrity: sha512-Oofo0pq3IKnsFtuHqSF7TqBfr71aeyZDVJ0HpmqB7FBM2qEigL0iPONSCZSO9pE9dZTAxANe5XHG9Uy0YMv8cg==} + + codemirror-lang-html-n8n@1.0.0: + resolution: {integrity: sha512-ofNP6VTDGJ5rue+kTCZlDZdF1PnE0sl2cAkfrsCAd5MlBgDmqTwuFJIkTI6KXOJXs0ucdTYH6QLhy9BSW7EaOQ==} + + cohere-ai@7.14.0: + resolution: {integrity: sha512-hSo2/tFV29whjFFtVtdS7kHmtUsjfMO1sgwE/d5bhOE4O7Vkj5G1R9lLIqkIprp/+rrvCq3HGvEaOgry7xRcDA==} + + collect-v8-coverage@1.0.1: + resolution: {integrity: sha512-iBPtljfCNcTKNAto0KEtDfZ3qzjJvqE3aTGZsbhjSBlorqpXJlaWWtPO35D+ZImoC3KWejX64o+yPGxhWSTzfg==} + + color-convert@1.9.3: + resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} + + color-convert@2.0.1: + resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} + engines: {node: '>=7.0.0'} + + color-name@1.1.3: + resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} + + color-name@1.1.4: + resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + + color-string@1.9.1: + resolution: {integrity: sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==} + + color-support@1.1.3: + resolution: {integrity: sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==} + hasBin: true + + color@3.2.1: + resolution: {integrity: sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==} + + color@4.2.3: + resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} + engines: {node: '>=12.5.0'} + + colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + + colorette@1.4.0: + resolution: {integrity: sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==} + + colorette@2.0.19: + resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} + + colors@1.4.0: + resolution: {integrity: sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA==} + engines: {node: '>=0.1.90'} + + colorspace@1.1.4: + resolution: {integrity: sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w==} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + comlink@4.4.1: + resolution: {integrity: sha512-+1dlx0aY5Jo1vHy/tSsIGpSkN4tS9rZSW8FIhG0JH/crs9wwweswIo/POr451r7bZww3hFbPAKnTpimzL/mm4Q==} + + commander@10.0.1: + resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} + engines: {node: '>=14'} + + commander@11.1.0: + resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} + engines: {node: '>=16'} + + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + + commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + + commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + + commander@9.4.1: + resolution: {integrity: sha512-5EEkTNyHNGFPD2H+c/dXXfQZYa/scCKasxWcXJaWnNJ99pnQN9Vnmqow+p+PlFPE63Q6mThaZws1T+HxfpgtPw==} + engines: {node: ^12.20.0 || >=14} + + comment-parser@1.4.1: + resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} + engines: {node: '>= 12.0.0'} + + commist@3.2.0: + resolution: {integrity: sha512-4PIMoPniho+LqXmpS5d3NuGYncG6XWlkBSVGiWycL22dd42OYdUGil2CWuzklaJoNxyxUSpO4MKIBU94viWNAw==} + + common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + + commondir@1.0.1: + resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} + + compare-versions@6.1.1: + resolution: {integrity: sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==} + + component-emitter@1.3.0: + resolution: {integrity: sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==} + + component-type@2.0.0: + resolution: {integrity: sha512-/1+d/k0Al0uzg4rFAz9fbYOTnT20JYgN7SoaRr5x2cz7kH4Mtj+GQPh7W9UocpzFtxSL8flv6qAOOfJvQGqUjg==} + engines: {node: '>=18'} + + compress-commons@6.0.2: + resolution: {integrity: sha512-6FqVXeETqWPoGcfzrXb37E50NP0LXT8kAMu5ooZayhWWdgEY4lBEEcbQNXtkuKQsGduxiIcI4gOTsxTmuq/bSg==} + engines: {node: '>= 14'} + + compressible@2.0.18: + resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} + engines: {node: '>= 0.6'} + + compression@1.8.1: + resolution: {integrity: sha512-9mAqGPHLakhCLeNyxPkK4xVo746zQ/czLH1Ky+vkitMnWfWZps8r0qXuwhwizagCRttsL4lfG4pIOvaWLpAP0w==} + engines: {node: '>= 0.8.0'} + + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + + concat-stream@2.0.0: + resolution: {integrity: sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==} + engines: {'0': node >= 6.0} + + concurrently@8.2.0: + resolution: {integrity: sha512-nnLMxO2LU492mTUj9qX/az/lESonSZu81UznYDoXtz1IQf996ixVqPAgHXwvHiHCAef/7S8HIK+fTFK7Ifk8YA==} + engines: {node: ^14.13.0 || >=16.0.0} + hasBin: true + + confbox@0.1.8: + resolution: {integrity: sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==} + + confbox@0.2.1: + resolution: {integrity: sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==} + + config-chain@1.1.13: + resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} + + consola@3.4.2: + resolution: {integrity: sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==} + engines: {node: ^14.18.0 || >=16.10.0} + + console-browserify@1.2.0: + resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} + + console-control-strings@1.1.0: + resolution: {integrity: sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==} + + console-table-printer@2.14.1: + resolution: {integrity: sha512-Nvz+lt5BRvG8qJ8KrqhK0rtbE4hbi0oj4G5/2ig7pbMXBCvy+zcHEZbyIdidl2GEL0AwtxYX4Zc3C28fFSPXyA==} + + constant-case@3.0.4: + resolution: {integrity: sha512-I2hSBi7Vvs7BEuJDr5dDHfzb/Ruj3FyvFyh7KLilAjNQw3Be+xgqUBA2W6scVEcL0hL1dwPRtIqEPVUCKkSsyQ==} + + constantinople@4.0.1: + resolution: {integrity: sha512-vCrqcSIq4//Gx74TXXCGnHpulY1dskqLTFGDmhrGxzeXL8lF8kvXv6mpNWlJj1uD4DW23D4ljAqbY4RRaaUZIw==} + + constants-browserify@1.0.0: + resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} + + content-disposition@1.0.0: + resolution: {integrity: sha512-Au9nRL8VNUut/XSzbQA38+M78dzP4D+eqg3gfJHMIHHYa3bg067xj1KxMUWj+VULbiZMowKngFFbKczUrNJ1mg==} + engines: {node: '>= 0.6'} + + content-type@1.0.5: + resolution: {integrity: sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==} + engines: {node: '>= 0.6'} + + convert-source-map@1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} + + convert-source-map@2.0.0: + resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + + convict@6.2.4: + resolution: {integrity: sha512-qN60BAwdMVdofckX7AlohVJ2x9UvjTNoKVXCL2LxFk1l7757EJqf1nySdMkPQer0bt8kQ5lQiyZ9/2NvrFBuwQ==} + engines: {node: '>=6'} + + cookie-parser@1.4.7: + resolution: {integrity: sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==} + engines: {node: '>= 0.8.0'} + + cookie-signature@1.0.6: + resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} + + cookie-signature@1.2.2: + resolution: {integrity: sha512-D76uU73ulSXrD1UXF4KE2TMxVVwhsnCgfAyTg9k8P6KGZjlXKrOLe4dJQKI3Bxi5wjesZoFXJWElNWBjPZMbhg==} + engines: {node: '>=6.6.0'} + + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} + engines: {node: '>= 0.6'} + + cookiejar@2.1.4: + resolution: {integrity: sha512-LDx6oHrK+PhzLKJU9j5S7/Y3jM/mUHvD/DeI1WQmJn652iPC5Y4TBzC9l+5OMOXlyTTA+SmVUPm0HQUwpD5Jqw==} + + core-js-compat@3.43.0: + resolution: {integrity: sha512-2GML2ZsCc5LR7hZYz4AXmjQw8zuy2T//2QntwdnpuYI7jteT6GVYJL7F6C2C57R7gSYrcqVW3lAALefdbhBLDA==} + + core-js@3.40.0: + resolution: {integrity: sha512-7vsMc/Lty6AGnn7uFpYT56QesI5D2Y/UkgKounk87OP9Z2H9Z8kj6jzcSGAxFmUtDOS0ntK6lbQz+Nsa0Jj6mQ==} + + core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + + cors@2.8.5: + resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} + engines: {node: '>= 0.10'} + + cosmiconfig@8.3.6: + resolution: {integrity: sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==} + engines: {node: '>=14'} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + cosmiconfig@9.0.0: + resolution: {integrity: sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==} + engines: {node: '>=14'} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + cpu-features@0.0.10: + resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==} + engines: {node: '>=10.0.0'} + + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + + crc32-stream@6.0.0: + resolution: {integrity: sha512-piICUB6ei4IlTv1+653yq5+KoqfBYmj9bw6LqXoOneTMDXk5nM1qt12mFW1caG3LlJXEKW1Bp0WggEmIfQB34g==} + engines: {node: '>= 14'} + + create-ecdh@4.0.4: + resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} + + create-hash@1.1.3: + resolution: {integrity: sha512-snRpch/kwQhcdlnZKYanNF1m0RDlrCdSKQaH87w1FCFPVPNCQ/Il9QJKAX2jVBZddRdaHBMC+zXa9Gw9tmkNUA==} + + create-hash@1.2.0: + resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} + + create-hmac@1.1.7: + resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} + + create-require@1.1.1: + resolution: {integrity: sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==} + + crelt@1.0.5: + resolution: {integrity: sha512-+BO9wPPi+DWTDcNYhr/W90myha8ptzftZT+LwcmUbbok0rcP/fequmFYCw8NMoH7pkAZQzU78b3kYrlua5a9eA==} + + crlf-normalize@1.0.19: + resolution: {integrity: sha512-cpV1h7YwFtIA36NHtyWuMMMPGxUp6zrzxjRnFEDLh1ZH0SPNUqCWmM8RlKVycxvKHgZOxWXs3XxX/DAlBAjFzA==} + + cron-parser@4.9.0: + resolution: {integrity: sha512-p0SaNjrHOnQeR8/VnfGbmg9te2kfyYSQ7Sc/j/6DtPL3JQvKxmjO9TSjNFpujqV3vEYYBvNNvXSxzyksBWAx1Q==} + engines: {node: '>=12.0.0'} + + cron@3.1.7: + resolution: {integrity: sha512-tlBg7ARsAMQLzgwqVxy8AZl/qlTc5nibqYwtNGoCrd+cV+ugI+tvZC1oT/8dFH8W455YrywGykx/KMmAqOr7Jw==} + + cross-env@7.0.3: + resolution: {integrity: sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==} + engines: {node: '>=10.14', npm: '>=6', yarn: '>=1'} + hasBin: true + + cross-fetch@3.2.0: + resolution: {integrity: sha512-Q+xVJLoGOeIMXZmbUK4HYk+69cQH6LudR0Vu/pRm2YlU/hDV9CiS0gKUMaWY5f2NeUH9C1nV3bsTlCo0FsTV1Q==} + + cross-fetch@4.0.0: + resolution: {integrity: sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==} + + cross-spawn@6.0.6: + resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==} + engines: {node: '>=4.8'} + + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + + crypt@0.0.2: + resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} + + crypto-browserify@3.12.1: + resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} + engines: {node: '>= 0.10'} + + crypto-js@4.2.0: + resolution: {integrity: sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==} + + csrf@3.1.0: + resolution: {integrity: sha512-uTqEnCvWRk042asU6JtapDTcJeeailFy4ydOQS28bj1hcLnYRiqi8SsD2jS412AY1I/4qdOwWZun774iqywf9w==} + engines: {node: '>= 0.8'} + + css-color-keywords@1.0.0: + resolution: {integrity: sha512-FyyrDHZKEjXDpNJYvVsV960FiqQyXc/LlYmsxl2BcdMb2WPx0OGRVgTg55rPSyLSNMqP52R9r8geSp7apN3Ofg==} + engines: {node: '>=4'} + + css-functions-list@3.2.3: + resolution: {integrity: sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==} + engines: {node: '>=12 || >=16'} + + css-select@4.3.0: + resolution: {integrity: sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==} + + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + + css-to-react-native@3.2.0: + resolution: {integrity: sha512-e8RKaLXMOFii+02mOlqwjbD00KSEKqblnpO9e++1aXS1fPQOpS1YoqdVHBqPjHNoxeF2mimzVqawm2KCbEdtHQ==} + + css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-tree@3.1.0: + resolution: {integrity: sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + + css.escape@1.5.1: + resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} + + cssesc@3.0.0: + resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} + engines: {node: '>=4'} + hasBin: true + + cssfilter@0.0.10: + resolution: {integrity: sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==} + + csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + + cssom@0.3.8: + resolution: {integrity: sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==} + + cssom@0.5.0: + resolution: {integrity: sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==} + + cssstyle@2.3.0: + resolution: {integrity: sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==} + engines: {node: '>=8'} + + cssstyle@3.0.0: + resolution: {integrity: sha512-N4u2ABATi3Qplzf0hWbVCdjenim8F3ojEXpBDF5hBpjzW182MjNGLqfmQ0SkSPeQ+V86ZXgeH8aXj6kayd4jgg==} + engines: {node: '>=14'} + + csstype@3.1.2: + resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + csv-parse@5.5.0: + resolution: {integrity: sha512-RxruSK3M4XgzcD7Trm2wEN+SJ26ChIb903+IWxNOcB5q4jT2Cs+hFr6QP39J05EohshRFEvyzEBoZ/466S2sbw==} + + curlconverter@4.12.0: + resolution: {integrity: sha512-NcwPKJgu9DkCH4gQsnjnXuUtPrhLhoNwvIYTTS5rRrsCC/X2flUswtgmeCyV9ePGszXzFReXk5y/CdBxrsAQ8Q==} + hasBin: true + + currency-codes@2.1.0: + resolution: {integrity: sha512-aASwFNP8VjZ0y0PWlSW7c9N/isYTLxK6OCbm7aVuQMk7dWO2zgup9KGiFQgeL9OGL5P/ulvCHcjQizmuEeZXtw==} + + cypress-otp@1.0.3: + resolution: {integrity: sha512-o7LssfI0HRHa+TkaOE5/Aukv6M9vsoZAtYESr9m7Ky2i+HRNb2p/IRelE7Z0wJ/UK2f+nXAGZIfXqraf9EPDqw==} + + cypress-real-events@1.14.0: + resolution: {integrity: sha512-XmI8y3OZLh6cjRroPalzzS++iv+pGCaD9G9kfIbtspgv7GVsDt30dkZvSXfgZb4rAN+3pOkMVB7e0j4oXydW7Q==} + peerDependencies: + cypress: ^4.x || ^5.x || ^6.x || ^7.x || ^8.x || ^9.x || ^10.x || ^11.x || ^12.x || ^13.x || ^14.x + + cypress@14.4.0: + resolution: {integrity: sha512-/I59Fqxo7fqdiDi3IM2QKA65gZ7+PVejXg404/I8ZSq+NOnrmw+2pnMUJzpoNyg7KABcEBmgpkfAqhV98p7wJA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + d3-color@3.1.0: + resolution: {integrity: sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==} + engines: {node: '>=12'} + + d3-dispatch@3.0.1: + resolution: {integrity: sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==} + engines: {node: '>=12'} + + d3-drag@3.0.0: + resolution: {integrity: sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==} + engines: {node: '>=12'} + + d3-dsv@2.0.0: + resolution: {integrity: sha512-E+Pn8UJYx9mViuIUkoc93gJGGYut6mSDKy2+XaPwccwkRGlR+LO97L2VCCRjQivTwLHkSnAJG7yo00BWY6QM+w==} + hasBin: true + + d3-ease@3.0.1: + resolution: {integrity: sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==} + engines: {node: '>=12'} + + d3-interpolate@3.0.1: + resolution: {integrity: sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==} + engines: {node: '>=12'} + + d3-selection@3.0.0: + resolution: {integrity: sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==} + engines: {node: '>=12'} + + d3-timer@3.0.1: + resolution: {integrity: sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==} + engines: {node: '>=12'} + + d3-transition@3.0.1: + resolution: {integrity: sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==} + engines: {node: '>=12'} + peerDependencies: + d3-selection: 2 - 3 + + d3-zoom@3.0.0: + resolution: {integrity: sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==} + engines: {node: '>=12'} + + dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + + data-uri-to-buffer@4.0.1: + resolution: {integrity: sha512-0R9ikRb668HB7QDxT1vkpuUBtqc53YyAwMwGeUFKRojY/NWKvdZ+9UYtRfGmhqNbRkTSVpMbmyhXipFFv2cb/A==} + engines: {node: '>= 12'} + + data-urls@3.0.2: + resolution: {integrity: sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==} + engines: {node: '>=12'} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + data-view-buffer@1.0.1: + resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} + engines: {node: '>= 0.4'} + + data-view-buffer@1.0.2: + resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.1: + resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} + engines: {node: '>= 0.4'} + + data-view-byte-length@1.0.2: + resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.0: + resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} + engines: {node: '>= 0.4'} + + data-view-byte-offset@1.0.1: + resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==} + engines: {node: '>= 0.4'} + + date-fns-tz@2.0.0: + resolution: {integrity: sha512-OAtcLdB9vxSXTWHdT8b398ARImVwQMyjfYGkKD2zaGpHseG2UPHbHjXELReErZFxWdSLph3c2zOaaTyHfOhERQ==} + peerDependencies: + date-fns: 2.30.0 + + date-fns@2.30.0: + resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} + engines: {node: '>=0.11'} + + dateformat@3.0.3: + resolution: {integrity: sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==} + + dayjs@1.11.10: + resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==} + + de-indent@1.0.2: + resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==} + + debug@2.6.9: + resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.5: + resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.3.6: + resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decamelize@1.2.0: + resolution: {integrity: sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==} + engines: {node: '>=0.10.0'} + + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + + decimal.js@10.4.3: + resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} + + decko@1.2.0: + resolution: {integrity: sha512-m8FnyHXV1QX+S1cl+KPFDIl6NMkxtKsy6+U/aYyjrOqWMuwAwYWu7ePqrsUHtDR5Y8Yk2pi/KIDSgF+vT4cPOQ==} + + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + + dedent@1.3.0: + resolution: {integrity: sha512-7glNLfvdsMzZm3FpRY1CHuI2lbYDR+71YmrhmTZjYFD5pfT0ACgnGRdrrC9Mk2uICnzkcdelCx5at787UDGOvg==} + peerDependencies: + babel-plugin-macros: ^3.1.0 + peerDependenciesMeta: + babel-plugin-macros: + optional: true + + deep-eql@4.0.0: + resolution: {integrity: sha512-GxJC5MOg2KyQlv6WiUF/VAnMj4MWnYiXo4oLgeptOELVoknyErb4Z8+5F/IM/K4g9/80YzzatxmWcyRwUseH0A==} + engines: {node: '>=6'} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + deep-equal@2.2.0: + resolution: {integrity: sha512-RdpzE0Hv4lhowpIUKKMJfeH6C1pXdtT1/it80ubgWqwI3qpuxUBpC1S4hnHg+zjnuOoDkzUtUCEEkG+XG5l3Mw==} + + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + + deep-is@0.1.4: + resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} + + deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} + + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + + define-data-property@1.1.4: + resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} + engines: {node: '>= 0.4'} + + define-lazy-prop@2.0.0: + resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} + engines: {node: '>=8'} + + define-properties@1.2.1: + resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} + engines: {node: '>= 0.4'} + + defu@6.1.4: + resolution: {integrity: sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + + denque@2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} + engines: {node: '>=0.10'} + + depd@2.0.0: + resolution: {integrity: sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==} + engines: {node: '>= 0.8'} + + dependency-tree@11.2.0: + resolution: {integrity: sha512-+C1H3mXhcvMCeu5i2Jpg9dc0N29TWTuT6vJD7mHLAfVmAbo9zW8NlkvQ1tYd3PDMab0IRQM0ccoyX68EZtx9xw==} + engines: {node: '>=18'} + hasBin: true + + dequal@2.0.3: + resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} + engines: {node: '>=6'} + + des.js@1.1.0: + resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} + + destr@2.0.5: + resolution: {integrity: sha512-ugFTXCtDZunbzasqBxrK93Ik/DRYsO6S/fedkWEMKqt04xZ4csmnmwGDBAb07QWNaGMAmnTIemsYZCksjATwsA==} + + detect-libc@1.0.3: + resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} + engines: {node: '>=0.10'} + hasBin: true + + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + detect-newline@3.1.0: + resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} + engines: {node: '>=8'} + + detect-node@2.1.0: + resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==} + + detective-amd@6.0.1: + resolution: {integrity: sha512-TtyZ3OhwUoEEIhTFoc1C9IyJIud3y+xYkSRjmvCt65+ycQuc3VcBrPRTMWoO/AnuCyOB8T5gky+xf7Igxtjd3g==} + engines: {node: '>=18'} + hasBin: true + + detective-cjs@6.0.1: + resolution: {integrity: sha512-tLTQsWvd2WMcmn/60T2inEJNhJoi7a//PQ7DwRKEj1yEeiQs4mrONgsUtEJKnZmrGWBBmE0kJ1vqOG/NAxwaJw==} + engines: {node: '>=18'} + + detective-es6@5.0.1: + resolution: {integrity: sha512-XusTPuewnSUdoxRSx8OOI6xIA/uld/wMQwYsouvFN2LAg7HgP06NF1lHRV3x6BZxyL2Kkoih4ewcq8hcbGtwew==} + engines: {node: '>=18'} + + detective-postcss@7.0.1: + resolution: {integrity: sha512-bEOVpHU9picRZux5XnwGsmCN4+8oZo7vSW0O0/Enq/TO5R2pIAP2279NsszpJR7ocnQt4WXU0+nnh/0JuK4KHQ==} + engines: {node: ^14.0.0 || >=16.0.0} + peerDependencies: + postcss: ^8.4.47 + + detective-sass@6.0.1: + resolution: {integrity: sha512-jSGPO8QDy7K7pztUmGC6aiHkexBQT4GIH+mBAL9ZyBmnUIOFbkfZnO8wPRRJFP/QP83irObgsZHCoDHZ173tRw==} + engines: {node: '>=18'} + + detective-scss@5.0.1: + resolution: {integrity: sha512-MAyPYRgS6DCiS6n6AoSBJXLGVOydsr9huwXORUlJ37K3YLyiN0vYHpzs3AdJOgHobBfispokoqrEon9rbmKacg==} + engines: {node: '>=18'} + + detective-stylus@5.0.1: + resolution: {integrity: sha512-Dgn0bUqdGbE3oZJ+WCKf8Dmu7VWLcmRJGc6RCzBgG31DLIyai9WAoEhYRgIHpt/BCRMrnXLbGWGPQuBUrnF0TA==} + engines: {node: '>=18'} + + detective-typescript@14.0.0: + resolution: {integrity: sha512-pgN43/80MmWVSEi5LUuiVvO/0a9ss5V7fwVfrJ4QzAQRd3cwqU1SfWGXJFcNKUqoD5cS+uIovhw5t/0rSeC5Mw==} + engines: {node: '>=18'} + peerDependencies: + typescript: 5.9.2 + + detective-vue2@2.2.0: + resolution: {integrity: sha512-sVg/t6O2z1zna8a/UIV6xL5KUa2cMTQbdTIIvqNM0NIPswp52fe43Nwmbahzj3ww4D844u/vC2PYfiGLvD3zFA==} + engines: {node: '>=18'} + peerDependencies: + typescript: 5.9.2 + + dezalgo@1.0.4: + resolution: {integrity: sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==} + + didyoumean@1.2.2: + resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==} + + diff-match-patch@1.0.5: + resolution: {integrity: sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==} + + diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} + engines: {node: '>=0.3.1'} + + diff@5.2.0: + resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} + engines: {node: '>=0.3.1'} + + diff@7.0.0: + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} + + diffie-hellman@5.0.3: + resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} + + dingbat-to-unicode@1.0.1: + resolution: {integrity: sha512-98l0sW87ZT58pU4i61wa2OHwxbiYSbuxsCBozaVnYX2iCnr3bLM3fIes1/ej7h1YdOKuKt/MLs706TVnALA65w==} + + dir-glob@3.0.1: + resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} + engines: {node: '>=8'} + + dlv@1.1.3: + resolution: {integrity: sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==} + + docker-compose@1.2.0: + resolution: {integrity: sha512-wIU1eHk3Op7dFgELRdmOYlPYS4gP8HhH1ZmZa13QZF59y0fblzFDFmKPhyc05phCy2hze9OEvNZAsoljrs+72w==} + engines: {node: '>= 6.0.0'} + + docker-modem@5.0.6: + resolution: {integrity: sha512-ens7BiayssQz/uAxGzH8zGXCtiV24rRWXdjNha5V4zSOcxmAZsfGVm/PPFbwQdqEkDnhG+SyR9E3zSHUbOKXBQ==} + engines: {node: '>= 8.0'} + + dockerode@4.0.7: + resolution: {integrity: sha512-R+rgrSRTRdU5mH14PZTCPZtW/zw3HDWNTS/1ZAQpL/5Upe/ye5K9WQkIysu4wBoiMwKynsz0a8qWuGsHgEvSAA==} + engines: {node: '>= 8.0'} + + doctrine@2.1.0: + resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} + engines: {node: '>=0.10.0'} + + doctypes@1.1.0: + resolution: {integrity: sha512-LLBi6pEqS6Do3EKQ3J0NqHWV5hhb78Pi8vvESYwyOy2c31ZEZVdtitdzsQsKb7878PEERhzUk0ftqGhG6Mz+pQ==} + + dom-accessibility-api@0.5.15: + resolution: {integrity: sha512-8o+oVqLQZoruQPYy3uAAQtc6YbtSiRq5aPJBhJ82YTJRHvI6ofhYAkC81WmjFTnfUbqg6T3aCglIpU9p/5e7Cw==} + + dom-accessibility-api@0.6.3: + resolution: {integrity: sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==} + + dom-serializer@1.4.1: + resolution: {integrity: sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==} + + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + + domain-browser@4.22.0: + resolution: {integrity: sha512-IGBwjF7tNk3cwypFNH/7bfzBcgSCbaMOD3GsaY1AU/JRrnHnYgEM0+9kQt52iZxjNsjBtJYtao146V+f8jFZNw==} + engines: {node: '>=10'} + + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + + domexception@4.0.0: + resolution: {integrity: sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==} + engines: {node: '>=12'} + deprecated: Use your platform's native DOMException instead + + domhandler@3.3.0: + resolution: {integrity: sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==} + engines: {node: '>= 4'} + + domhandler@4.3.1: + resolution: {integrity: sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==} + engines: {node: '>= 4'} + + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + + dompurify@3.1.7: + resolution: {integrity: sha512-VaTstWtsneJY8xzy7DekmYWEOZcmzIe3Qb3zPd4STve1OBTa+e+WmS1ITQec1fZYXI3HCsOZZiSMpG6oxoWMWQ==} + + domutils@2.8.0: + resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + + domutils@3.1.0: + resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} + + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + + dot-case@3.0.4: + resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} + + dotenv@16.3.1: + resolution: {integrity: sha512-IPzF4w4/Rd94bA9imS68tZBaYyBWSCE47V1RGuMrB94iyTOIEwRmVL2x/4An+6mETpLrKJ5hQkB8W4kFAadeIQ==} + engines: {node: '>=12'} + + dotenv@16.6.1: + resolution: {integrity: sha512-uBq4egWHTcTt33a72vpSG0z3HnPuIl6NqYcTrKEg2azoEyl2hpW0zqlxysq2pK9HlDIHyHyakeYaYnSAwd8bow==} + engines: {node: '>=12'} + + dotenv@8.6.0: + resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} + engines: {node: '>=10'} + + dreamopt@0.8.0: + resolution: {integrity: sha512-vyJTp8+mC+G+5dfgsY+r3ckxlz+QMX40VjPQsZc5gxVAxLmi64TBoVkP54A/pRAXMXsbu2GMMBrZPxNv23waMg==} + engines: {node: '>=0.4.0'} + + duck@0.1.12: + resolution: {integrity: sha512-wkctla1O6VfP89gQ+J/yDesM0S7B7XLXjKGzXxMDVFg7uEn706niAtyYovKbyq1oT9YwDcly721/iUWoc8MVRg==} + + dunder-proto@1.0.1: + resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} + engines: {node: '>= 0.4'} + + duplexer@0.1.1: + resolution: {integrity: sha512-sxNZ+ljy+RA1maXoUReeqBBpBC6RLKmg5ewzV+x+mSETmWNoKdZN6vcQjpFROemza23hGFskJtFNoUWUaQ+R4Q==} + + duplexer@0.1.2: + resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + + duplexify@4.1.3: + resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==} + + eastasianwidth@0.2.0: + resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + + ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + + editorconfig@1.0.4: + resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} + engines: {node: '>=14'} + hasBin: true + + ee-first@1.1.1: + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + + ejs@3.1.10: + resolution: {integrity: sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==} + engines: {node: '>=0.10.0'} + hasBin: true + + electron-to-chromium@1.5.114: + resolution: {integrity: sha512-DFptFef3iktoKlFQK/afbo274/XNWD00Am0xa7M8FZUepHlHT8PEuiNBoRfFHbH1okqN58AlhbJ4QTkcnXorjA==} + + electron-to-chromium@1.5.173: + resolution: {integrity: sha512-2bFhXP2zqSfQHugjqJIDFVwa+qIxyNApenmXTp9EjaKtdPrES5Qcn9/aSFy/NaP2E+fWG/zxKu/LBvY36p5VNQ==} + + element-plus@2.4.3: + resolution: {integrity: sha512-b3q26j+lM4SBqiyzw8HybybGnP2pk4MWgrnzzzYW5qKQUgV6EG1Zg7nMCfgCVccI8tNvZoTiUHb2mFaiB9qT8w==} + peerDependencies: + vue: ^3.2.0 + + elliptic@6.6.1: + resolution: {integrity: sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g==} + + email-providers@2.0.1: + resolution: {integrity: sha512-lFWdT7sJilGO0UOO25D3urNH7Np1XTB/7GD/9nGM4YxNqAzkunuJyt9ZyG4cZ+UEGqH/lbK4vczg0B6NtyPflw==} + engines: {node: '>=16'} + + emittery@0.13.1: + resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} + engines: {node: '>=12'} + + emoji-regex@8.0.0: + resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} + + emoji-regex@9.2.2: + resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + + enabled@2.0.0: + resolution: {integrity: sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ==} + + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + + encoding-japanese@2.0.0: + resolution: {integrity: sha512-++P0RhebUC8MJAwJOsT93dT+5oc5oPImp1HubZpAuCZ5kTLnhuuBhKHj2jJeO/Gj93idPBWmIuQ9QWMe5rX3pQ==} + engines: {node: '>=8.10.0'} + + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + + encoding@0.1.13: + resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} + + end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + + enhanced-resolve@5.18.2: + resolution: {integrity: sha512-6Jw4sE1maoRJo3q8MsSIn2onJFbLTOjY9hlx4DZXmOKvLRd1Ok2kXmAGXaafL2+ijsJZ1ClYbl/pmqr9+k4iUQ==} + engines: {node: '>=10.13.0'} + + enquirer@2.3.6: + resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==} + engines: {node: '>=8.6'} + + entities@2.2.0: + resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + + entities@3.0.1: + resolution: {integrity: sha512-WiyBqoomrwMdFG1e0kqvASYfnlb0lp8M5o5Fw2OFq1hNZxxcNk8Ik0Xm7LxzBhuidnZB/UtBqVCgUz3kBOP51Q==} + engines: {node: '>=0.12'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.1: + resolution: {integrity: sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==} + engines: {node: '>=0.12'} + + env-paths@2.2.1: + resolution: {integrity: sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==} + engines: {node: '>=6'} + + epub2@3.0.2: + resolution: {integrity: sha512-rhvpt27CV5MZfRetfNtdNwi3XcNg1Am0TwfveJkK8YWeHItHepQ8Js9J06v8XRIjuTrCW/NSGYMTy55Of7BfNQ==} + + err-code@2.0.3: + resolution: {integrity: sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==} + + error-ex@1.3.2: + resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} + + es-abstract@1.23.3: + resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} + engines: {node: '>= 0.4'} + + es-abstract@1.24.0: + resolution: {integrity: sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==} + engines: {node: '>= 0.4'} + + es-aggregate-error@1.0.12: + resolution: {integrity: sha512-j0PupcmELoVbYS2NNrsn5zcLLEsryQwP02x8fRawh7c2eEaPHwJFAxltZsqV7HJjsF57+SMpYyVRWgbVLfOagg==} + engines: {node: '>= 0.4'} + + es-define-property@1.0.1: + resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==} + engines: {node: '>= 0.4'} + + es-errors@1.3.0: + resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} + engines: {node: '>= 0.4'} + + es-get-iterator@1.1.3: + resolution: {integrity: sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw==} + + es-module-lexer@1.7.0: + resolution: {integrity: sha512-jEQoCwk8hyb2AZziIOLhDqpm5+2ww5uIE6lkO/6jcOCusfk6LhMHpXXfBLXTZ7Ydyt0j4VoUQv6uGNYbdW+kBA==} + + es-object-atoms@1.1.1: + resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} + engines: {node: '>= 0.4'} + + es-set-tostringtag@2.1.0: + resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==} + engines: {node: '>= 0.4'} + + es-shim-unscopables@1.1.0: + resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.2.1: + resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} + engines: {node: '>= 0.4'} + + es-to-primitive@1.3.0: + resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} + engines: {node: '>= 0.4'} + + es6-promise@3.3.1: + resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} + + esbuild-register@3.5.0: + resolution: {integrity: sha512-+4G/XmakeBAsvJuDugJvtyF1x+XJT4FMocynNpxrvEBViirpfUn2PgNpCHedfWhF4WokNsO/OvMKrmJOIJsI5A==} + peerDependencies: + esbuild: ^0.25.0 + + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} + engines: {node: '>=18'} + hasBin: true + + escalade@3.1.1: + resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + engines: {node: '>=6'} + + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + + escape-goat@3.0.0: + resolution: {integrity: sha512-w3PwNZJwRxlp47QGzhuEBldEqVHHhh8/tIPcl6ecf2Bou99cdAt0knihBV0Ecc7CGxYduXVBDheH1K2oADRlvw==} + engines: {node: '>=10'} + + escape-html@1.0.3: + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + + escape-string-regexp@2.0.0: + resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} + engines: {node: '>=8'} + + escape-string-regexp@4.0.0: + resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} + engines: {node: '>=10'} + + escodegen@1.14.3: + resolution: {integrity: sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==} + engines: {node: '>=4.0'} + hasBin: true + + escodegen@2.0.0: + resolution: {integrity: sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==} + engines: {node: '>=6.0'} + hasBin: true + + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + + eslint-config-prettier@10.1.5: + resolution: {integrity: sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==} + hasBin: true + peerDependencies: + eslint: '>=7.0.0' + + eslint-config-riot@1.0.0: + resolution: {integrity: sha512-NB/L/1Y30qyJcG5xZxCJKW/+bqyj+llbcCwo9DEz8bESIP0SLTOQ8T1DWCCFc+wJ61AMEstj4511PSScqMMfCw==} + + eslint-import-context@0.1.8: + resolution: {integrity: sha512-bq+F7nyc65sKpZGT09dY0S0QrOnQtuDVIfyTGQ8uuvtMIF7oHp6CEP3mouN0rrnYF3Jqo6Ke0BfU/5wASZue1w==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + peerDependencies: + unrs-resolver: ^1.0.0 + peerDependenciesMeta: + unrs-resolver: + optional: true + + eslint-import-resolver-node@0.3.9: + resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} + + eslint-import-resolver-typescript@4.4.3: + resolution: {integrity: sha512-elVDn1eWKFrWlzxlWl9xMt8LltjKl161Ix50JFC50tHXI5/TRP32SNEqlJ/bo/HV+g7Rou/tlPQU2AcRtIhrOg==} + engines: {node: ^16.17.0 || >=18.6.0} + peerDependencies: + eslint: '*' + eslint-plugin-import: '*' + eslint-plugin-import-x: '*' + peerDependenciesMeta: + eslint-plugin-import: + optional: true + eslint-plugin-import-x: + optional: true + + eslint-module-utils@2.12.1: + resolution: {integrity: sha512-L8jSWTze7K2mTg0vos/RuLRS5soomksDPoJLXIslC7c8Wmut3bx7CPpJijDcBZtxQ5lrbUdM+s0OlNbz0DCDNw==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: '*' + eslint-import-resolver-node: '*' + eslint-import-resolver-typescript: '*' + eslint-import-resolver-webpack: '*' + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + eslint: + optional: true + eslint-import-resolver-node: + optional: true + eslint-import-resolver-typescript: + optional: true + eslint-import-resolver-webpack: + optional: true + + eslint-plugin-cypress@4.3.0: + resolution: {integrity: sha512-CgS/S940MJlT8jtnWGKI0LvZQBGb/BB0QCpgBOxFMM/Z6znD+PZUwBhCTwHKN2GEr5AOny3xB92an0QfzBGooQ==} + peerDependencies: + eslint: '>=9' + + eslint-plugin-import-x@4.15.2: + resolution: {integrity: sha512-J5gx7sN6DTm0LRT//eP3rVVQ2Yi4hrX0B+DbWxa5er8PZ6JjLo9GUBwogIFvEDdwJaSqZplpQT+haK/cXhb7VQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/utils': ^8.0.0 + eslint: ^8.57.0 || ^9.0.0 + eslint-import-resolver-node: '*' + peerDependenciesMeta: + '@typescript-eslint/utils': + optional: true + eslint-import-resolver-node: + optional: true + + eslint-plugin-import@2.32.0: + resolution: {integrity: sha512-whOE1HFo/qJDyX4SnXzP4N6zOWn79WhnCUY/iDR0mPfQZO8wcYE4JClzI2oZrhBnnMUCBCHZhO6VQyoBU95mZA==} + engines: {node: '>=4'} + peerDependencies: + '@typescript-eslint/parser': '*' + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 + peerDependenciesMeta: + '@typescript-eslint/parser': + optional: true + + eslint-plugin-local@1.0.0: + resolution: {integrity: sha512-bcwcQnKL/Iw5Vi/F2lG1he5oKD2OGjhsLmrcctkWrWq5TujgiaYb0cj3pZgr3XI54inNVnneOFdAx1daLoYLJQ==} + + eslint-plugin-lodash@8.0.0: + resolution: {integrity: sha512-7DA8485FolmWRzh+8t4S8Pzin2TTuWfb0ZW3j/2fYElgk82ZanFz8vDcvc4BBPceYdX1p/za+tkbO68maDBGGw==} + engines: {node: '>=10'} + peerDependencies: + eslint: '>=9.0.0' + + eslint-plugin-n8n-nodes-base@1.16.3: + resolution: {integrity: sha512-edLX42Vg4B+y0kzkitTVDmHZQrG5/wUZO874N5Z9leBuxt5TG1pqMY4zdr35RlpM4p4REr/T9x+6DpsQSL63WA==} + engines: {node: '>=20.15', pnpm: '>=9.6'} + + eslint-plugin-playwright@2.2.2: + resolution: {integrity: sha512-j0jKpndIPOXRRP9uMkwb9l/nSmModOU3452nrFdgFJoEv/435J1onk8+aITzjDW8DfypxgmVaDMdmVIa6F7I0w==} + engines: {node: '>=16.6.0'} + peerDependencies: + eslint: '>=8.40.0' + + eslint-plugin-unicorn@59.0.1: + resolution: {integrity: sha512-EtNXYuWPUmkgSU2E7Ttn57LbRREQesIP1BiLn7OZLKodopKfDXfBUkC/0j6mpw2JExwf43Uf3qLSvrSvppgy8Q==} + engines: {node: ^18.20.0 || ^20.10.0 || >=21.0.0} + peerDependencies: + eslint: '>=9.22.0' + + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} + peerDependencies: + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true + + eslint-plugin-vue@10.2.0: + resolution: {integrity: sha512-tl9s+KN3z0hN2b8fV2xSs5ytGl7Esk1oSCxULLwFcdaElhZ8btYYZFrWxvh4En+czrSDtuLCeCOGa8HhEZuBdQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + vue-eslint-parser: ^10.0.0 + + eslint-scope@8.4.0: + resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint-visitor-keys@3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + eslint-visitor-keys@4.2.1: + resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.29.0: + resolution: {integrity: sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true + + esm-resolve@1.0.8: + resolution: {integrity: sha512-pzYHY8bf7uLpDuefGsI6JtHVS1J3N1uOkIEC36ejvvWhiiMr/xKBX4PrxCtsxeISJbCEMBLkPZvRwZNHgdwn5A==} + + espree@10.4.0: + resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + esprima-next@5.8.4: + resolution: {integrity: sha512-8nYVZ4ioIH4Msjb/XmhnBdz5WRRBaYqevKa1cv9nGJdCehMbzZCPNEEnqfLCZVetUVrUPEcb5IYyu1GG4hFqgg==} + engines: {node: '>=12'} + hasBin: true + + esprima@1.2.2: + resolution: {integrity: sha512-+JpPZam9w5DuJ3Q67SqsMGtiHKENSMRVoxvArfJZK01/BfLEObtZ6orJa/MtoGNR/rfMgp5837T41PAmTwAv/A==} + engines: {node: '>=0.4.0'} + hasBin: true + + esprima@4.0.1: + resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} + engines: {node: '>=4'} + hasBin: true + + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + + esrecurse@4.3.0: + resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} + engines: {node: '>=4.0'} + + estraverse@4.3.0: + resolution: {integrity: sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==} + engines: {node: '>=4.0'} + + estraverse@5.3.0: + resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} + engines: {node: '>=4.0'} + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + esutils@2.0.3: + resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} + engines: {node: '>=0.10.0'} + + etag@1.8.1: + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} + engines: {node: '>= 0.6'} + + event-stream@3.3.4: + resolution: {integrity: sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g==} + + event-target-shim@5.0.1: + resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} + engines: {node: '>=6'} + + eventemitter2@6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + + eventemitter3@4.0.7: + resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} + + eventemitter3@5.0.1: + resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} + + events@3.3.0: + resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} + engines: {node: '>=0.8.x'} + + eventsource-parser@3.0.1: + resolution: {integrity: sha512-VARTJ9CYeuQYb0pZEPbzi740OWFgpHe7AYJ2WFZVnUDUQp5Dk2yJUgF36YsZ81cOyxT0QxmXD2EQpapAouzWVA==} + engines: {node: '>=18.0.0'} + + eventsource@2.0.2: + resolution: {integrity: sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==} + engines: {node: '>=12.0.0'} + + eventsource@3.0.6: + resolution: {integrity: sha512-l19WpE2m9hSuyP06+FbuUUf1G+R0SFLrtQfbRb9PRr+oimOfxQhgGCbVaXg5IvZyyTThJsxh6L/srkMiCeBPDA==} + engines: {node: '>=18.0.0'} + + evp_bytestokey@1.0.3: + resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} + + execa@1.0.0: + resolution: {integrity: sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==} + engines: {node: '>=6'} + + execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + + execa@5.1.1: + resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} + engines: {node: '>=10'} + + execa@9.6.0: + resolution: {integrity: sha512-jpWzZ1ZhwUmeWRhS7Qv3mhpOhLfwI+uAX4e5fOcXqwMR7EcJ0pj2kV1CVzHVMX/LphnKWD3LObjZCoJ71lKpHw==} + engines: {node: ^18.19.0 || >=20.5.0} + + executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + + exit@0.1.2: + resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} + engines: {node: '>= 0.8.0'} + + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + + expand-tilde@2.0.2: + resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} + engines: {node: '>=0.10.0'} + + expect-type@1.2.1: + resolution: {integrity: sha512-/kP8CAwxzLVEeFrMm4kMmy4CCDlpipyA7MYLVrdJIkV0fYF0UaigQHRsxHiuY/GEea+bh4KSv3TIlgr+2UL6bw==} + engines: {node: '>=12.0.0'} + + expect@29.5.0: + resolution: {integrity: sha512-yM7xqUrCO2JdpFo4XpM82t+PJBFybdqoQuJLDGeDX2ij8NZzqRHyu3Hp188/JX7SWqud+7t4MUdvcgGBICMHZg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + expect@29.6.2: + resolution: {integrity: sha512-iAErsLxJ8C+S02QbLAwgSGSezLQK+XXRDt8IuFXFpwCNw2ECmzZSmjKcCaFVp5VRMk+WAvz6h6jokzEzBFZEuA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + expr-eval@2.0.2: + resolution: {integrity: sha512-4EMSHGOPSwAfBiibw3ndnP0AvjDWLsMvGOvWEZ2F96IGk0bIVdjQisOHxReSkE13mHcfbuCiXw+G4y0zv6N8Eg==} + + express-handlebars@8.0.1: + resolution: {integrity: sha512-mdas0PTbgQnwSyAjcYM7OMaftM8nJ3Kqz6yAyK4iCFvMOGGvh6pv42IHwcE5PBpS6ffYeZRSsgAdYUMG4CSjhQ==} + engines: {node: '>=20'} + + express-openapi-validator@5.5.3: + resolution: {integrity: sha512-G3PxXXE8Y3aZ2s1OW9k79lyqmNWmj8/QWNWqF9qVPjJ8YON8JQ39c4CgSXemPfbRCuD58ynoHrG3WCetU937dg==} + peerDependencies: + express: '*' + + express-prom-bundle@8.0.0: + resolution: {integrity: sha512-UHdpaMks6Z/tvxQsNzhsE7nkdXb4/zEh/jwN0tfZSZOEF+aD0dlfl085EU4jveOq09v01c5sIUfjV4kJODZ2eQ==} + engines: {node: '>=18'} + peerDependencies: + prom-client: '>=15.0.0' + + express-rate-limit@7.5.0: + resolution: {integrity: sha512-eB5zbQh5h+VenMPM3fh+nw1YExi5nMr6HUCR62ELSP11huvxm/Uir1H1QEyTkk5QX6A58pX6NmaTMceKZ0Eodg==} + engines: {node: '>= 16'} + peerDependencies: + express: ^4.11 || 5 || ^5.0.0-beta.1 + + express@5.1.0: + resolution: {integrity: sha512-DT9ck5YIRU+8GYzzU5kT3eHGA5iL+1Zd0EutOmTE9Dtk+Tvuzd23VBU+ec7HPNSTxXYO55gPV/hq4pSBJDjFpA==} + engines: {node: '>= 18'} + + exsolve@1.0.4: + resolution: {integrity: sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==} + + extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + + external-editor@3.1.0: + resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==} + engines: {node: '>=4'} + + extract-zip@2.0.1: + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + + extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + + fake-indexeddb@6.0.0: + resolution: {integrity: sha512-YEboHE5VfopUclOck7LncgIqskAqnv4q0EWbYCaxKKjAvO93c+TJIaBuGy8CBFdbg9nKdpN3AuPRwVBJ4k7NrQ==} + engines: {node: '>=18'} + + fake-xml-http-request@2.1.2: + resolution: {integrity: sha512-HaFMBi7r+oEC9iJNpc3bvcW7Z7iLmM26hPDmlb0mFwyANSsOQAtJxbdWsXITKOzZUyMYK0zYCv3h5yDj9TsiXg==} + + fast-deep-equal@3.1.3: + resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + + fast-glob@3.2.12: + resolution: {integrity: sha512-DVj4CQIYYow0BlaelwK1pHl5n5cRSJfM60UA0zK891sVInoPri2Ekj7+e1CT3/3qxXenpI+nBBmQAcJPJgaj4w==} + engines: {node: '>=8.6.0'} + + fast-glob@3.3.3: + resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} + engines: {node: '>=8.6.0'} + + fast-json-stable-stringify@2.1.0: + resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} + + fast-levenshtein@2.0.6: + resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} + + fast-redact@3.5.0: + resolution: {integrity: sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A==} + engines: {node: '>=6'} + + fast-safe-stringify@2.1.1: + resolution: {integrity: sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==} + + fast-unique-numbers@8.0.13: + resolution: {integrity: sha512-7OnTFAVPefgw2eBJ1xj2PGGR9FwYzSUso9decayHgCDX4sJkHLdcsYTytTg+tYv+wKF3U8gJuSBz2jJpQV4u/g==} + engines: {node: '>=16.1.0'} + + fast-uri@3.0.1: + resolution: {integrity: sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==} + + fast-xml-parser@4.4.1: + resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==} + hasBin: true + + fast-xml-parser@5.2.3: + resolution: {integrity: sha512-OdCYfRqfpuLUFonTNjvd30rCBZUneHpSQkCqfaeWQ9qrKcl6XlWeDBNVwGb+INAIxRshuN2jF+BE0L6gbBO2mw==} + hasBin: true + + fastest-levenshtein@1.0.16: + resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} + engines: {node: '>= 4.9.1'} + + fastq@1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + + fb-watchman@2.0.2: + resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + + fdir@6.4.6: + resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + + fecha@4.2.3: + resolution: {integrity: sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==} + + fengari-interop@0.1.3: + resolution: {integrity: sha512-EtZ+oTu3kEwVJnoymFPBVLIbQcCoy9uWCVnMA6h3M/RqHkUBsLYp29+RRHf9rKr6GwjubWREU1O7RretFIXjHw==} + peerDependencies: + fengari: ^0.1.0 + + fengari@0.1.4: + resolution: {integrity: sha512-6ujqUuiIYmcgkGz8MGAdERU57EIluGGPSUgGPTsco657EHa+srq0S3/YUl/r9kx1+D+d4rGfYObd+m8K22gB1g==} + + fetch-blob@3.2.0: + resolution: {integrity: sha512-7yAQpD2UMJzLi1Dqv7qFYnPbaPx7ZfFK6PiIxQ4PfkGPyNyl2Ugx+a/umUonmKqjhM4DnfbMvdX6otXq83soQQ==} + engines: {node: ^12.20 || >= 14.13} + + fflate@0.7.4: + resolution: {integrity: sha512-5u2V/CDW15QM1XbbgS+0DfPxVB+jUKhWEKuuFuHncbk3tEEqzmoXL+2KyOFuKGqOnmdIy0/davWF1CkuwtibCw==} + + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + + figures@6.1.0: + resolution: {integrity: sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg==} + engines: {node: '>=18'} + + file-entry-cache@10.1.3: + resolution: {integrity: sha512-D+w75Ub8T55yor7fPgN06rkCAUbAYw2vpxJmmjv/GDAcvCnv9g7IvHhIZoxzRZThrXPFI2maeY24pPbtyYU7Lg==} + + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + + file-saver@2.0.5: + resolution: {integrity: sha512-P9bmyZ3h/PRG+Nzga+rbdI4OEpNDzAVyy74uVO9ATgzLK6VtAsYybF/+TOCvrc0MO793d6+42lLyZTw7/ArVzA==} + + file-type@16.5.4: + resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==} + engines: {node: '>=10'} + + file-uri-to-path@1.0.0: + resolution: {integrity: sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==} + + filelist@1.0.4: + resolution: {integrity: sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==} + + filesize@10.1.0: + resolution: {integrity: sha512-GTLKYyBSDz3nPhlLVPjPWZCnhkd9TrrRArNcy8Z+J2cqScB7h2McAzR6NBX6nYOoWafql0roY8hrocxnZBv9CQ==} + engines: {node: '>= 10.4.0'} + + filing-cabinet@5.0.3: + resolution: {integrity: sha512-PlPcMwVWg60NQkhvfoxZs4wEHjhlOO/y7OAm4sKM60o1Z9nttRY4mcdQxp/iZ+kg/Vv6Hw1OAaTbYVM9DA9pYg==} + engines: {node: '>=18'} + hasBin: true + + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + + finalhandler@2.1.0: + resolution: {integrity: sha512-/t88Ty3d5JWQbWYgaOGCCYfXRwV1+be02WqYYlL6h0lEiUAMPM8o8qKGO01YIkOHzka2up08wvgYD0mDiI+q3Q==} + engines: {node: '>= 0.8'} + + find-package-json@1.2.0: + resolution: {integrity: sha512-+SOGcLGYDJHtyqHd87ysBhmaeQ95oWspDKnMXBrnQ9Eq4OkLNqejgoaD8xVWu6GPa0B6roa6KinCMEMcVeqONw==} + + find-test-names@1.29.7: + resolution: {integrity: sha512-Ps/+M9+rvYqR/gzvfjsfrdeypfSViGZ7Cn7clOGllTlwBcKVGqwfgllGBJ4XwzGp+PaEZZ1MbG4qT1qp4AD9DQ==} + hasBin: true + + find-up-simple@1.0.1: + resolution: {integrity: sha512-afd4O7zpqHeRyg4PfDQsXmlDe2PfdHtJt6Akt8jOWaApLOZk5JXs6VMR29lz03pRe9mpykrRCYIYxaJYcfpncQ==} + engines: {node: '>=18'} + + find-up@4.1.0: + resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} + engines: {node: '>=8'} + + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + + first-match@0.0.1: + resolution: {integrity: sha512-VvKbnaxrC0polTFDC+teKPTdl2mn6B/KUW+WB3C9RzKDeNwbzfLdnUz3FxC+tnjvus6bI0jWrWicQyVIPdS37A==} + + fix-dts-default-cjs-exports@1.0.1: + resolution: {integrity: sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==} + + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + + flat-cache@6.1.12: + resolution: {integrity: sha512-U+HqqpZPPXP5d24bWuRzjGqVqUcw64k4nZAbruniDwdRg0H10tvN7H6ku1tjhA4rg5B9GS3siEvwO2qjJJ6f8Q==} + + flat@5.0.2: + resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} + hasBin: true + + flatted@3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} + + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} + + fn.name@1.1.0: + resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} + + follow-redirects@1.15.11: + resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + engines: {node: '>=4.0'} + peerDependencies: + debug: '*' + peerDependenciesMeta: + debug: + optional: true + + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + + foreach@2.0.6: + resolution: {integrity: sha512-k6GAGDyqLe9JaebCsFCoudPPWfihKu8pylYXRlqP1J7ms39iPoTtk2fviNglIeQEwdh0bQeKJ01ZPyuyQvKzwg==} + + foreground-child@3.1.1: + resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + engines: {node: '>=14'} + + forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + + form-data-encoder@1.7.2: + resolution: {integrity: sha512-qfqtYan3rxrnCk1VYaA4H+Ms9xdpPqvLZa6xmMgFvhO32x7/3J/ExcTd6qpxM0vH2GdMI+poehyBZvqfMTto8A==} + + form-data-encoder@4.0.2: + resolution: {integrity: sha512-KQVhvhK8ZkWzxKxOr56CPulAhH3dobtuQ4+hNQ+HekH/Wp5gSOafqRAeTphQUJAIk0GBvHZgJ2ZGRWd5kphMuw==} + engines: {node: '>= 18'} + + form-data@4.0.4: + resolution: {integrity: sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==} + engines: {node: '>= 6'} + + formdata-node@4.4.1: + resolution: {integrity: sha512-0iirZp3uVDjVGt9p49aTaqjk84TrglENEDuqfdlZQ1roC9CWlPk6Avf8EEnZNcAqPonwkG35x4n3ww/1THYAeQ==} + engines: {node: '>= 12.20'} + + formdata-node@6.0.3: + resolution: {integrity: sha512-8e1++BCiTzUno9v5IZ2J6bv4RU+3UKDmqWUQD0MIMVCd9AdhWkO1gw57oo1mNEX1dMq2EGI+FbWz4B92pscSQg==} + engines: {node: '>= 18'} + + formdata-polyfill@4.0.10: + resolution: {integrity: sha512-buewHzMvYL29jdeQTVILecSaZKnt/RJWjoZCF5OW60Z67/GmSLBkOFM7qh1PI3zFNtJbaZL5eQu1vLfazOwj4g==} + engines: {node: '>=12.20.0'} + + formidable@3.5.4: + resolution: {integrity: sha512-YikH+7CUTOtP44ZTnUhR7Ic2UASBPOqmaRkRKxRbywPTe5VxF7RRCck4af9wutiZ/QKM5nME9Bie2fFaPz5Gug==} + engines: {node: '>=14.0.0'} + + forwarded-parse@2.1.2: + resolution: {integrity: sha512-alTFZZQDKMporBH77856pXgzhEzaUVmLCDk+egLgIgHst3Tpndzz8MnKe+GzRJRfvVdn69HhpW7cmXzvtLvJAw==} + + forwarded@0.2.0: + resolution: {integrity: sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==} + engines: {node: '>= 0.6'} + + fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + + fresh@2.0.0: + resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} + engines: {node: '>= 0.8'} + + from@0.1.7: + resolution: {integrity: sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g==} + + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + + fs-extra@11.3.0: + resolution: {integrity: sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew==} + engines: {node: '>=14.14'} + + fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + + fs-minipass@2.1.0: + resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} + engines: {node: '>= 8'} + + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + function-bind@1.1.2: + resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} + + function.prototype.name@1.1.6: + resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} + engines: {node: '>= 0.4'} + + function.prototype.name@1.1.8: + resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==} + engines: {node: '>= 0.4'} + + functions-have-names@1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} + + gauge@4.0.4: + resolution: {integrity: sha512-f9m+BEN5jkg6a0fZjleidjN51VE1X+mPFQ2DJ0uv1V39oCLCbsGe6yjbBnp7eK7z/+GAon99a3nHuqbuuthyPg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + gaxios@5.1.3: + resolution: {integrity: sha512-95hVgBRgEIRQQQHIbnxBXeHbW4TqFk4ZDJW7wmVtvYar72FdhRIo1UGOLS2eRAKCPEdPBWu+M7+A33D9CdX9rA==} + engines: {node: '>=12'} + + gaxios@6.6.0: + resolution: {integrity: sha512-bpOZVQV5gthH/jVCSuYuokRo2bTKOcuBiVWpjmTn6C5Agl5zclGfTljuGsQZxwwDBkli+YhZhP4TdlqTnhOezQ==} + engines: {node: '>=14'} + + gaxios@7.1.0: + resolution: {integrity: sha512-y1Q0MX1Ba6eg67Zz92kW0MHHhdtWksYckQy1KJsI6P4UlDQ8cvdvpLEPslD/k7vFkdPppMESFGTvk7XpSiKj8g==} + engines: {node: '>=18'} + + gcp-metadata@5.3.0: + resolution: {integrity: sha512-FNTkdNEnBdlqF2oatizolQqNANMrcqJt6AAYt99B3y1aLLC8Hc5IOBb+ZnnzllodEEf6xMBp6wRcBbc16fa65w==} + engines: {node: '>=12'} + + gcp-metadata@6.1.0: + resolution: {integrity: sha512-Jh/AIwwgaxan+7ZUUmRLCjtchyDiqh4KjBJ5tW3plBZb5iL/BPcso8A5DlzeD9qlw0duCamnNdpFjxwaT0KyKg==} + engines: {node: '>=14'} + + gcp-metadata@7.0.0: + resolution: {integrity: sha512-3PfRTzvT3Msu0Hy8Gf9ypxJvaClG2IB9pyH0r8QOmRBW5mUcrHgYpF4GYP+XulDbfhxEhBYtJtJJQb5S2wM+LA==} + engines: {node: '>=18'} + + generate-function@2.3.1: + resolution: {integrity: sha512-eeB5GfMNeevm/GRYq20ShmsaGcmI81kIX2K9XQx5miC8KdHaC6Jm0qQ8ZNeGOi7wYB8OsdxKs+Y2oVuTFuVwKQ==} + + generate-schema@2.6.0: + resolution: {integrity: sha512-EUBKfJNzT8f91xUk5X5gKtnbdejZeE065UAJ3BCzE8VEbvwKI9Pm5jaWmqVeK1MYc1g5weAVFDTSJzN7ymtTqA==} + hasBin: true + + generic-pool@3.9.0: + resolution: {integrity: sha512-hymDOu5B53XvN4QT9dBmZxPX4CWhBPPLguTZ9MMFeFa/Kg0xWVfylOVNlJji/E7yTZWFd/q9GO5TxDLq156D7g==} + engines: {node: '>= 4'} + + gensync@1.0.0-beta.2: + resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==} + engines: {node: '>=6.9.0'} + + get-amd-module-type@6.0.1: + resolution: {integrity: sha512-MtjsmYiCXcYDDrGqtNbeIYdAl85n+5mSv2r3FbzER/YV3ZILw4HNNIw34HuV5pyl0jzs6GFYU1VHVEefhgcNHQ==} + engines: {node: '>=18'} + + get-caller-file@2.0.5: + resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} + engines: {node: 6.* || 8.* || >= 10.*} + + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} + engines: {node: '>= 0.4'} + + get-own-enumerable-property-symbols@3.0.2: + resolution: {integrity: sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==} + + get-package-type@0.1.0: + resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} + engines: {node: '>=8.0.0'} + + get-port-please@3.1.2: + resolution: {integrity: sha512-Gxc29eLs1fbn6LQ4jSU4vXjlwyZhF5HsGuMAa7gqBP4Rw4yxxltyDUuF5MBclFzDTXO+ACchGQoeela4DSfzdQ==} + + get-port@5.1.1: + resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} + engines: {node: '>=8'} + + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + + get-proto@1.0.1: + resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} + engines: {node: '>= 0.4'} + + get-stream@4.1.0: + resolution: {integrity: sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==} + engines: {node: '>=6'} + + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + + get-stream@6.0.1: + resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} + engines: {node: '>=10'} + + get-stream@9.0.1: + resolution: {integrity: sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA==} + engines: {node: '>=18'} + + get-symbol-description@1.0.2: + resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} + engines: {node: '>= 0.4'} + + get-symbol-description@1.1.0: + resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} + engines: {node: '>= 0.4'} + + get-system-fonts@2.0.2: + resolution: {integrity: sha512-zzlgaYnHMIEgHRrfC7x0Qp0Ylhw/sHpM6MHXeVBTYIsvGf5GpbnClB+Q6rAPdn+0gd2oZZIo6Tj3EaWrt4VhDQ==} + engines: {node: '>8.0.0'} + + get-tsconfig@4.10.1: + resolution: {integrity: sha512-auHyJ4AgMz7vgS8Hp3N6HXSmlMdUyhSUrfBF16w153rxtLIEOE+HGqaBppczZvnHLqQJfiHotCYpNhl0lUROFQ==} + + getos@3.2.1: + resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + + getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + + giget@1.2.5: + resolution: {integrity: sha512-r1ekGw/Bgpi3HLV3h1MRBIlSAdHoIMklpaQ3OQLFcRw9PwAj2rqigvIbg+dBUI51OxVI2jsEtDywDBjSiuf7Ug==} + hasBin: true + + github-buttons@2.29.1: + resolution: {integrity: sha512-TV3YgAKda5hPz75n7QXmGCsSzgVya1vvmBieebg3EB5ScmashTZ0FldViG1aU2d4V5rcAGrtQ7k5uAaCo0A4PA==} + + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + + glob-parent@5.1.2: + resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} + engines: {node: '>= 6'} + + glob-parent@6.0.2: + resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} + engines: {node: '>=10.13.0'} + + glob@10.3.3: + resolution: {integrity: sha512-92vPiMb/iqpmEgsOoIDvTjc50wf9CCCvMzsi6W0JLPeUKE8TWP1a73PgqSrqy7iAZxaSD1YdzU7QZR5LF51MJw==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} + hasBin: true + + glob@11.0.1: + resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + + glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} + deprecated: Glob versions prior to v9 are no longer supported + + global-dirs@3.0.0: + resolution: {integrity: sha512-v8ho2DS5RiCjftj1nD9NmnfaOzTdud7RRnVd9kFNOjqZbISlx5DQ+OrTkywgd0dIt7oFCvKetZSHoHcP3sDdiA==} + engines: {node: '>=10'} + + global-modules@2.0.0: + resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} + engines: {node: '>=6'} + + global-prefix@3.0.0: + resolution: {integrity: sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==} + engines: {node: '>=6'} + + globals@11.12.0: + resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} + engines: {node: '>=4'} + + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.15.0: + resolution: {integrity: sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==} + engines: {node: '>=18'} + + globals@16.2.0: + resolution: {integrity: sha512-O+7l9tPdHCU320IigZZPj5zmRCFG9xHmx9cU8FqU2Rp+JN714seHV+2S9+JslCpY4gJwU2vOGox0wzgae/MCEg==} + engines: {node: '>=18'} + + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + + globby@11.1.0: + resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} + engines: {node: '>=10'} + + globjoin@0.1.4: + resolution: {integrity: sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==} + + gm@1.25.1: + resolution: {integrity: sha512-jgcs2vKir9hFogGhXIfs0ODhJTfIrbECCehg38tqFgHm8zqXx7kAJyCYAFK4jTjx71AxrkFtkJBawbAxYUPX9A==} + engines: {node: '>=14'} + deprecated: The gm module has been sunset. Please migrate to an alternative. https://github.com/aheckmann/gm?tab=readme-ov-file#2025-02-24-this-project-is-not-maintained + + gonzales-pe@4.3.0: + resolution: {integrity: sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==} + engines: {node: '>=0.6.0'} + hasBin: true + + google-auth-library@10.1.0: + resolution: {integrity: sha512-GspVjZj1RbyRWpQ9FbAXMKjFGzZwDKnUHi66JJ+tcjcu5/xYAP1pdlWotCuIkMwjfVsxxDvsGZXGLzRt72D0sQ==} + engines: {node: '>=18'} + + google-auth-library@9.10.0: + resolution: {integrity: sha512-ol+oSa5NbcGdDqA+gZ3G3mev59OHBZksBTxY/tYwjtcp1H/scAFwJfSQU9/1RALoyZ7FslNbke8j4i3ipwlyuQ==} + engines: {node: '>=14'} + + google-gax@4.6.1: + resolution: {integrity: sha512-V6eky/xz2mcKfAd1Ioxyd6nmA61gao3n01C+YeuIwu3vzM9EDR6wcVzMSIbLMDXWeoi9SHYctXuKYC5uJUT3eQ==} + engines: {node: '>=14'} + + google-logging-utils@1.1.1: + resolution: {integrity: sha512-rcX58I7nqpu4mbKztFeOAObbomBbHU2oIb/d3tJfF3dizGSApqtSwYJigGCooHdnMyQBIw8BrWyK96w3YXgr6A==} + engines: {node: '>=14'} + + gopd@1.2.0: + resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} + engines: {node: '>= 0.4'} + + graceful-fs@4.2.11: + resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + + graphql-request@6.1.0: + resolution: {integrity: sha512-p+XPfS4q7aIpKVcgmnZKhMNqhltk20hfXtkaIkTfjjmiKMJ5xrt5c743cL03y/K7y1rg3WrIC49xGiEQ4mxdNw==} + peerDependencies: + graphql: 14 - 16 + + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} + engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} + + groq-sdk@0.19.0: + resolution: {integrity: sha512-vdh5h7ORvwvOvutA80dKF81b0gPWHxu6K/GOJBOM0n6p6CSqAVLhFfeS79Ef0j/yCycDR09jqY7jkYz9dLiS6w==} + + gtoken@7.1.0: + resolution: {integrity: sha512-pCcEwRi+TKpMlxAQObHDQ56KawURgyAf6jtIY046fJ5tIv3zDe/LEIubckAO8fj6JnAxLdmWkUfNyulQ2iKdEw==} + engines: {node: '>=14.0.0'} + + gtoken@8.0.0: + resolution: {integrity: sha512-+CqsMbHPiSTdtSO14O51eMNlrp9N79gmeqmXeouJOhfucAedHw9noVe/n5uJk3tbKE6a+6ZCQg3RPhVhHByAIw==} + engines: {node: '>=18'} + + gzip-size@6.0.0: + resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} + engines: {node: '>=10'} + + handlebars@4.7.8: + resolution: {integrity: sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==} + engines: {node: '>=0.4.7'} + hasBin: true + + has-bigints@1.0.2: + resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} + + has-bigints@1.1.0: + resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==} + engines: {node: '>= 0.4'} + + has-flag@3.0.0: + resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} + engines: {node: '>=4'} + + has-flag@4.0.0: + resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} + engines: {node: '>=8'} + + has-property-descriptors@1.0.2: + resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} + + has-proto@1.0.3: + resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} + engines: {node: '>= 0.4'} + + has-proto@1.2.0: + resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==} + engines: {node: '>= 0.4'} + + has-symbols@1.1.0: + resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==} + engines: {node: '>= 0.4'} + + has-tostringtag@1.0.2: + resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} + engines: {node: '>= 0.4'} + + has-unicode@2.0.1: + resolution: {integrity: sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==} + + hash-base@2.0.2: + resolution: {integrity: sha512-0TROgQ1/SxE6KmxWSvXHvRj90/Xo1JvZShofnYF+f6ZsGtR4eES7WfrQzPalmyagfKZCXpVnitiRebZulWsbiw==} + + hash-base@3.0.5: + resolution: {integrity: sha512-vXm0l45VbcHEVlTCzs8M+s0VeYsB2lnlAaThoLKGXr3bE/VWDOelNUnycUPEhKEaXARL2TEFjBOyUiM6+55KBg==} + engines: {node: '>= 0.10'} + + hash-sum@2.0.0: + resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} + + hash.js@1.1.7: + resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} + + hasown@2.0.2: + resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} + engines: {node: '>= 0.4'} + + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + + header-case@2.0.4: + resolution: {integrity: sha512-H/vuk5TEEVZwrR0lp2zed9OCo1uAILMlx0JEMgC26rzyJJ3N1v6XkwHHXJQdR2doSjcGPM6OKPYoJgf0plJ11Q==} + + heap@0.2.7: + resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==} + + helmet@8.1.0: + resolution: {integrity: sha512-jOiHyAZsmnr8LqoPGmCjYAaiuWwjAPLgY8ZX2XrmHawt99/u1y6RgrZMTeoPfpUbV96HOalYgz1qzkRbw54Pmg==} + engines: {node: '>=18.0.0'} + + help-me@5.0.0: + resolution: {integrity: sha512-7xgomUX6ADmcYzFik0HzAxh/73YlKR9bmFzf51CZwR+b6YtzU2m0u49hQCqV6SvlqIqsaxovfwdvbnsw3b/zpg==} + + highlight.js@11.11.1: + resolution: {integrity: sha512-Xwwo44whKBVCYoliBQwaPvtd/2tYFkRQtXDWj1nackaV2JPXx3L0+Jvd8/qCJ2p+ML0/XVkJ2q+Mr+UVdpJK5w==} + engines: {node: '>=12.0.0'} + + hmac-drbg@1.0.1: + resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} + + homedir-polyfill@1.0.3: + resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} + engines: {node: '>=0.10.0'} + + hookified@1.11.0: + resolution: {integrity: sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==} + + html-encoding-sniffer@3.0.0: + resolution: {integrity: sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==} + engines: {node: '>=12'} + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + html-entities@2.5.2: + resolution: {integrity: sha512-K//PSRMQk4FZ78Kyau+mZurHn3FH0Vwr+H36eE0rPbeYkRRi9YxceYPhuN60UwWorxyKHhqoAJl2OFKa4BVtaA==} + + html-escaper@2.0.2: + resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + + html-minifier@4.0.0: + resolution: {integrity: sha512-aoGxanpFPLg7MkIl/DDFYtb0iWz7jMFGqFhvEDZga6/4QTjneiD8I/NXL1x5aaoCp7FSIT6h/OhykDdPsbtMig==} + engines: {node: '>=6'} + hasBin: true + + html-tags@3.3.1: + resolution: {integrity: sha512-ztqyC3kLto0e9WbNp0aeP+M3kTt+nbaIveGmUxAtZa+8iFgKLUOD4YKM5j+f3QD89bra7UeumolZHKuOXnTmeQ==} + engines: {node: '>=8'} + + html-to-text@9.0.5: + resolution: {integrity: sha512-qY60FjREgVZL03vJU6IfMV4GDjGBIoOyvuFdpBDIX9yTlDw0TjxVBQp+P8NvpdIXNJvfWBTNul7fsAQJq2FNpg==} + engines: {node: '>=14'} + + htmlparser2@10.0.0: + resolution: {integrity: sha512-TwAZM+zE5Tq3lrEHvOlvwgj1XLWQCtaaibSN11Q+gGBAS7Y1uZSWwXXRe4iF6OXnaq1riyQAPFOBtYc77Mxq0g==} + + htmlparser2@5.0.1: + resolution: {integrity: sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==} + + htmlparser2@6.1.0: + resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + + htmlparser2@8.0.2: + resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + + http-cache-semantics@4.1.1: + resolution: {integrity: sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==} + + http-errors@2.0.0: + resolution: {integrity: sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==} + engines: {node: '>= 0.8'} + + http-proxy-agent@4.0.1: + resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} + engines: {node: '>= 6'} + + http-proxy-agent@5.0.0: + resolution: {integrity: sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==} + engines: {node: '>= 6'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + http-proxy-middleware@3.0.5: + resolution: {integrity: sha512-GLZZm1X38BPY4lkXA01jhwxvDoOkkXqjgVyUzVxiEK4iuRu03PZoYHhHRwxnfhQMDuaxi3vVri0YgSro/1oWqg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + http-proxy@1.18.1: + resolution: {integrity: sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==} + engines: {node: '>=8.0.0'} + + http-signature@1.4.0: + resolution: {integrity: sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg==} + engines: {node: '>=0.10'} + + http2-client@1.3.5: + resolution: {integrity: sha512-EC2utToWl4RKfs5zd36Mxq7nzHHBuomZboI0yYL6Y0RmBgT7Sgkq4rQ0ezFTYoIsSs7Tm9SJe+o2FcAg6GBhGA==} + + https-browserify@1.0.0: + resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} + + https-proxy-agent@4.0.0: + resolution: {integrity: sha512-zoDhWrkR3of1l9QAL8/scJZyLu8j/gBkcwcaQOZh7Gyh/+uJQzGVETdgT30akuwkpL8HTRfssqI3BZuV18teDg==} + engines: {node: '>= 6.0.0'} + + https-proxy-agent@5.0.1: + resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} + engines: {node: '>= 6'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + + human-signals@2.1.0: + resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} + engines: {node: '>=10.17.0'} + + human-signals@8.0.1: + resolution: {integrity: sha512-eKCa6bwnJhvxj14kZk5NCPc6Hb6BdsU9DZcOnmQKSnO1VKrfV0zCvtttPZUsBvjmNDn8rpcJfpwSYnHBjc95MQ==} + engines: {node: '>=18.18.0'} + + humanize-duration@3.27.3: + resolution: {integrity: sha512-iimHkHPfIAQ8zCDQLgn08pRqSVioyWvnGfaQ8gond2wf7Jq2jJ+24ykmnRyiz3fIldcn4oUuQXpjqKLhSVR7lw==} + + humanize-ms@1.2.1: + resolution: {integrity: sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==} + + ibm-cloud-sdk-core@5.3.2: + resolution: {integrity: sha512-YhtS+7hGNO61h/4jNShHxbbuJ1TnDqiFKQzfEaqePnonOvv8NnxWxOk92FlKKCCzZNOT34Gnd7WCLVJTntwEFQ==} + engines: {node: '>=18'} + + iconv-lite@0.4.24: + resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} + engines: {node: '>=0.10.0'} + + iconv-lite@0.4.5: + resolution: {integrity: sha512-LQ4GtDkFagYaac8u4rE73zWu7h0OUUmR0qVBOgzLyFSoJhoDG2xV9PZJWWyVVcYha/9/RZzQHUinFMbNKiOoAA==} + engines: {node: '>=0.8.0'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + ics@2.40.0: + resolution: {integrity: sha512-PPkE9ij60sGhqdTxZZzsXQPB/TCXAB/dD3NqUf1I/GkbJzPeJHHMzaoMQiYAsm1pFaHRp2OIhFDgUBihkk8s/w==} + + ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + + ignore-by-default@1.0.1: + resolution: {integrity: sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==} + + ignore@5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + engines: {node: '>= 4'} + + ignore@7.0.5: + resolution: {integrity: sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==} + engines: {node: '>= 4'} + + imap@0.8.19: + resolution: {integrity: sha512-z5DxEA1uRnZG73UcPA4ES5NSCGnPuuouUx43OPX7KZx1yzq3N8/vx2mtXEShT5inxB3pRgnfG1hijfu7XN2YMw==} + engines: {node: '>=0.8.0'} + + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + + immutable@5.1.3: + resolution: {integrity: sha512-+chQdDfvscSF1SJqv2gn4SRO2ZyS3xL3r7IW/wWEEzrzLisnOlKiQu5ytC/BVNcS15C39WT2Hg/bjKjDMcu+zg==} + + import-fresh@3.3.0: + resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} + engines: {node: '>=6'} + + import-in-the-middle@1.14.2: + resolution: {integrity: sha512-5tCuY9BV8ujfOpwtAGgsTx9CGUapcFMEEyByLv1B+v2+6DhAcw+Zr0nhQT7uwaZ7DiourxFEscghOR8e1aPLQw==} + + import-lazy@4.0.0: + resolution: {integrity: sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==} + engines: {node: '>=8'} + + import-local@3.1.0: + resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + engines: {node: '>=8'} + hasBin: true + + imurmurhash@0.1.4: + resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} + engines: {node: '>=0.8.19'} + + indefinite@2.5.1: + resolution: {integrity: sha512-Ul0hCdnSjuFDEloYWeozTaEfljbz+0q+u4HsHns2dOk2DlhGlbRMGFtNcIL+Ve7sZYeIOTOAKA0usAXBGHpNDg==} + engines: {node: '>=6.0.0'} + + indent-string@4.0.0: + resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} + engines: {node: '>=8'} + + indent-string@5.0.0: + resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} + engines: {node: '>=12'} + + infer-owner@1.0.4: + resolution: {integrity: sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==} + + infisical-node@1.3.0: + resolution: {integrity: sha512-tTnnExRAO/ZyqiRdnSlBisErNToYWgtunMWh+8opClEt5qjX7l6HC/b4oGo2AuR2Pf41IR+oqo+dzkM1TCvlUA==} + deprecated: Package no longer supported. Contact Support at https://www.npmjs.com/support for more info. + + inflected@2.1.0: + resolution: {integrity: sha512-hAEKNxvHf2Iq3H60oMBHkB4wl5jn3TPF3+fXek/sRwAB5gP9xWs4r7aweSF95f99HFoz69pnZTcu8f0SIHV18w==} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + + inherits@2.0.4: + resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} + + ini@1.3.8: + resolution: {integrity: sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==} + + ini@2.0.0: + resolution: {integrity: sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA==} + engines: {node: '>=10'} + + inquirer@7.3.3: + resolution: {integrity: sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==} + engines: {node: '>=8.0.0'} + + internal-slot@1.0.7: + resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} + engines: {node: '>= 0.4'} + + internal-slot@1.1.0: + resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==} + engines: {node: '>= 0.4'} + + interpret@1.4.0: + resolution: {integrity: sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA==} + engines: {node: '>= 0.10'} + + ioredis-mock@8.8.1: + resolution: {integrity: sha512-zXSaDf86EcDFVf8jMOirWU6Js4WcwLd/cxwJiCh9EbD1GoHfeE/fVqLhLz/l1MkyL85Fb6MwfF2Fr/9819Ul9Q==} + engines: {node: '>=12.22'} + peerDependencies: + '@types/ioredis-mock': ^8 + ioredis: ^5 + + ioredis@5.3.2: + resolution: {integrity: sha512-1DKMMzlIHM02eBBVOFQ1+AolGjs6+xEcM4PDL7NqOS6szq7H9jSaEkIUH6/a5Hl241LzW6JLSiAbNvTQjUupUA==} + engines: {node: '>=12.22.0'} + + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + + ipaddr.js@1.9.1: + resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} + engines: {node: '>= 0.10'} + + is-arguments@1.1.1: + resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.4: + resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} + engines: {node: '>= 0.4'} + + is-array-buffer@3.0.5: + resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==} + engines: {node: '>= 0.4'} + + is-arrayish@0.2.1: + resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} + + is-arrayish@0.3.2: + resolution: {integrity: sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==} + + is-async-function@2.1.1: + resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==} + engines: {node: '>= 0.4'} + + is-bigint@1.0.4: + resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} + + is-bigint@1.1.0: + resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.1.2: + resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} + engines: {node: '>= 0.4'} + + is-boolean-object@1.2.2: + resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==} + engines: {node: '>= 0.4'} + + is-buffer@1.1.6: + resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} + + is-builtin-module@5.0.0: + resolution: {integrity: sha512-f4RqJKBUe5rQkJ2eJEJBXSticB3hGbN9j0yxxMQFqIW89Jp9WYFtzfTcRlstDKVUTRzSOTLKRfO9vIztenwtxA==} + engines: {node: '>=18.20'} + + is-bun-module@2.0.0: + resolution: {integrity: sha512-gNCGbnnnnFAUGKeZ9PdbyeGYJqewpmc2aKHUEMO5nQPWU9lOmv7jcmQIv+qHD8fXW6W7qfuCwX4rY9LNRjXrkQ==} + + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + + is-core-module@2.16.1: + resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.1: + resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} + engines: {node: '>= 0.4'} + + is-data-view@1.0.2: + resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==} + engines: {node: '>= 0.4'} + + is-date-object@1.0.5: + resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} + engines: {node: '>= 0.4'} + + is-date-object@1.1.0: + resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==} + engines: {node: '>= 0.4'} + + is-docker@2.2.1: + resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} + engines: {node: '>=8'} + hasBin: true + + is-emoji-supported@0.0.5: + resolution: {integrity: sha512-WOlXUhDDHxYqcSmFZis+xWhhqXiK2SU0iYiqmth5Ip0FHLZQAt9rKL5ahnilE8/86WH8tZ3bmNNNC+bTzamqlw==} + + is-expression@4.0.0: + resolution: {integrity: sha512-zMIXX63sxzG3XrkHkrAPvm/OVZVSCPNkwMHU8oTX7/U3AL78I0QXCEICXUM13BIa8TYGZ68PiTKfQz3yaTNr4A==} + + is-extglob@2.1.1: + resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} + engines: {node: '>=0.10.0'} + + is-finalizationregistry@1.1.1: + resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==} + engines: {node: '>= 0.4'} + + is-fullwidth-code-point@3.0.0: + resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} + engines: {node: '>=8'} + + is-generator-fn@2.1.0: + resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} + engines: {node: '>=6'} + + is-generator-function@1.1.0: + resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==} + engines: {node: '>= 0.4'} + + is-glob@4.0.3: + resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} + engines: {node: '>=0.10.0'} + + is-installed-globally@0.4.0: + resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} + engines: {node: '>=10'} + + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-lambda@1.0.1: + resolution: {integrity: sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==} + + is-map@2.0.3: + resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==} + engines: {node: '>= 0.4'} + + is-nan@1.3.2: + resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} + engines: {node: '>= 0.4'} + + is-negative-zero@2.0.3: + resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} + engines: {node: '>= 0.4'} + + is-node-process@1.2.0: + resolution: {integrity: sha512-Vg4o6/fqPxIjtxgUH5QLJhwZ7gW5diGCVlXpuUfELC62CuxM1iHcRe51f2W1FDy04Ai4KJkagKjx3XaqyfRKXw==} + + is-number-object@1.0.7: + resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} + engines: {node: '>= 0.4'} + + is-number-object@1.1.1: + resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==} + engines: {node: '>= 0.4'} + + is-number@7.0.0: + resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} + engines: {node: '>=0.12.0'} + + is-obj@1.0.1: + resolution: {integrity: sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==} + engines: {node: '>=0.10.0'} + + is-path-inside@3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + + is-plain-obj@4.1.0: + resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} + engines: {node: '>=12'} + + is-plain-object@5.0.0: + resolution: {integrity: sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + is-promise@2.2.2: + resolution: {integrity: sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==} + + is-promise@4.0.0: + resolution: {integrity: sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==} + + is-property@1.0.2: + resolution: {integrity: sha512-Ks/IoX00TtClbGQr4TWXemAnktAQvYB7HzcCxDGqEZU6oCmb2INHuOoKxbtR+HFkmYWBKv/dOZtGRiAjDhj92g==} + + is-regex@1.1.4: + resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} + engines: {node: '>= 0.4'} + + is-regex@1.2.1: + resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==} + engines: {node: '>= 0.4'} + + is-regexp@1.0.0: + resolution: {integrity: sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==} + engines: {node: '>=0.10.0'} + + is-retry-allowed@2.2.0: + resolution: {integrity: sha512-XVm7LOeLpTW4jV19QSH38vkswxoLud8sQ57YwJVTPWdiaI9I8keEhGFpBlslyVsgdQy4Opg8QOLb8YRgsyZiQg==} + engines: {node: '>=10'} + + is-set@2.0.3: + resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.3: + resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} + engines: {node: '>= 0.4'} + + is-shared-array-buffer@1.0.4: + resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==} + engines: {node: '>= 0.4'} + + is-stream@1.1.0: + resolution: {integrity: sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==} + engines: {node: '>=0.10.0'} + + is-stream@2.0.1: + resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} + engines: {node: '>=8'} + + is-stream@4.0.1: + resolution: {integrity: sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A==} + engines: {node: '>=18'} + + is-string@1.0.7: + resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} + engines: {node: '>= 0.4'} + + is-string@1.1.1: + resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==} + engines: {node: '>= 0.4'} + + is-symbol@1.0.4: + resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} + engines: {node: '>= 0.4'} + + is-symbol@1.1.1: + resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.13: + resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} + engines: {node: '>= 0.4'} + + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + + is-typedarray@1.0.0: + resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-url-superb@4.0.0: + resolution: {integrity: sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA==} + engines: {node: '>=10'} + + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + + is-weakmap@2.0.2: + resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==} + engines: {node: '>= 0.4'} + + is-weakref@1.0.2: + resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} + + is-weakref@1.1.1: + resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==} + engines: {node: '>= 0.4'} + + is-weakset@2.0.4: + resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==} + engines: {node: '>= 0.4'} + + is-wsl@2.2.0: + resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} + engines: {node: '>=8'} + + isarray@0.0.1: + resolution: {integrity: sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + + isbot@3.6.13: + resolution: {integrity: sha512-uoP4uK5Dc2CrabmK+Gue1jTL+scHiCc1c9rblRpJwG8CPxjLIv8jmGyyGRGkbPOweayhkskdZsEQXG6p+QCQrg==} + engines: {node: '>=12'} + + isexe@2.0.0: + resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + + isexe@3.1.1: + resolution: {integrity: sha512-LpB/54B+/2J5hqQ7imZHfdU31OlgQqx7ZicVlkm9kzg9/w8GKLEcFfJl/t7DCEDueOyBAD6zCCwTO6Fzs0NoEQ==} + engines: {node: '>=16'} + + iso-639-1@2.1.15: + resolution: {integrity: sha512-7c7mBznZu2ktfvyT582E2msM+Udc1EjOyhVRE/0ZsjD9LBtWSm23h3PtiRh2a35XoUsTQQjJXaJzuLjXsOdFDg==} + engines: {node: '>=6.0'} + + isomorphic-timers-promises@1.0.1: + resolution: {integrity: sha512-u4sej9B1LPSxTGKB/HiuzvEQnXH0ECYkSVQU39koSwmFAxhlEAFl9RdTvLv4TOTQUgBS5O3O5fwUxk6byBZ+IQ==} + engines: {node: '>=10'} + + isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + + istanbul-lib-coverage@3.2.2: + resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} + engines: {node: '>=8'} + + istanbul-lib-instrument@5.2.1: + resolution: {integrity: sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==} + engines: {node: '>=8'} + + istanbul-lib-report@3.0.1: + resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@4.0.1: + resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} + engines: {node: '>=10'} + + istanbul-lib-source-maps@5.0.6: + resolution: {integrity: sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==} + engines: {node: '>=10'} + + istanbul-reports@3.1.7: + resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} + engines: {node: '>=8'} + + jackspeak@2.3.6: + resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} + engines: {node: '>=14'} + + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + + jackspeak@4.1.0: + resolution: {integrity: sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw==} + engines: {node: 20 || >=22} + + jake@10.8.5: + resolution: {integrity: sha512-sVpxYeuAhWt0OTWITwT98oyV0GsXyMlXCF+3L1SuafBVUIr/uILGRB+NqwkzhgXKvoJpDIpQvqkUALgdmQsQxw==} + engines: {node: '>=10'} + hasBin: true + + jest-changed-files@29.5.0: + resolution: {integrity: sha512-IFG34IUMUaNBIxjQXF/iu7g6EcdMrGRRxaUSw92I/2g2YC6vCdTltl4nHvt7Ci5nSJwXIkCu8Ka1DKF+X7Z1Ag==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-circus@29.6.2: + resolution: {integrity: sha512-G9mN+KOYIUe2sB9kpJkO9Bk18J4dTDArNFPwoZ7WKHKel55eKIS/u2bLthxgojwlf9NLCVQfgzM/WsOVvoC6Fw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-cli@29.6.2: + resolution: {integrity: sha512-TT6O247v6dCEX2UGHGyflMpxhnrL0DNqP2fRTKYm3nJJpCTfXX3GCMQPGFjXDoj0i5/Blp3jriKXFgdfmbYB6Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jest-config@29.6.2: + resolution: {integrity: sha512-VxwFOC8gkiJbuodG9CPtMRjBUNZEHxwfQXmIudSTzFWxaci3Qub1ddTRbFNQlD/zUeaifLndh/eDccFX4wCMQw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + '@types/node': ^20.17.50 + ts-node: '>=9.0.0' + peerDependenciesMeta: + '@types/node': + optional: true + ts-node: + optional: true + + jest-diff@29.5.0: + resolution: {integrity: sha512-LtxijLLZBduXnHSniy0WMdaHjmQnt3g5sa16W4p0HqukYTTsyTW3GD1q41TyGl5YFXj/5B2U6dlh5FM1LIMgxw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-diff@29.6.2: + resolution: {integrity: sha512-t+ST7CB9GX5F2xKwhwCf0TAR17uNDiaPTZnVymP9lw0lssa9vG+AFyDZoeIHStU3WowFFwT+ky+er0WVl2yGhA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-docblock@29.4.3: + resolution: {integrity: sha512-fzdTftThczeSD9nZ3fzA/4KkHtnmllawWrXO69vtI+L9WjEIuXWs4AmyME7lN5hU7dB0sHhuPfcKofRsUb/2Fg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-each@29.6.2: + resolution: {integrity: sha512-MsrsqA0Ia99cIpABBc3izS1ZYoYfhIy0NNWqPSE0YXbQjwchyt6B1HD2khzyPe1WiJA7hbxXy77ZoUQxn8UlSw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-environment-jsdom@29.6.2: + resolution: {integrity: sha512-7oa/+266AAEgkzae8i1awNEfTfjwawWKLpiw2XesZmaoVVj9u9t8JOYx18cG29rbPNtkUlZ8V4b5Jb36y/VxoQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jest-environment-node@29.6.2: + resolution: {integrity: sha512-YGdFeZ3T9a+/612c5mTQIllvWkddPbYcN2v95ZH24oWMbGA4GGS2XdIF92QMhUhvrjjuQWYgUGW2zawOyH63MQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-expect-message@1.1.3: + resolution: {integrity: sha512-bTK77T4P+zto+XepAX3low8XVQxDgaEqh3jSTQOG8qvPpD69LsIdyJTa+RmnJh3HNSzJng62/44RPPc7OIlFxg==} + + jest-get-type@29.4.3: + resolution: {integrity: sha512-J5Xez4nRRMjk8emnTpWrlkyb9pfRQQanDrvWHhsR1+VUfbwxi30eVcZFlcdGInRibU4G5LwHXpI7IRHU0CY+gg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-haste-map@29.6.2: + resolution: {integrity: sha512-+51XleTDAAysvU8rT6AnS1ZJ+WHVNqhj1k6nTvN2PYP+HjU3kqlaKQ1Lnw3NYW3bm2r8vq82X0Z1nDDHZMzHVA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-junit@16.0.0: + resolution: {integrity: sha512-A94mmw6NfJab4Fg/BlvVOUXzXgF0XIH6EmTgJ5NDPp4xoKq0Kr7sErb+4Xs9nZvu58pJojz5RFGpqnZYJTrRfQ==} + engines: {node: '>=10.12.0'} + + jest-leak-detector@29.6.2: + resolution: {integrity: sha512-aNqYhfp5uYEO3tdWMb2bfWv6f0b4I0LOxVRpnRLAeque2uqOVVMLh6khnTcE2qJ5wAKop0HcreM1btoysD6bPQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.5.0: + resolution: {integrity: sha512-lecRtgm/rjIK0CQ7LPQwzCs2VwW6WAahA55YBuI+xqmhm7LAaxokSB8C97yJeYyT+HvQkH741StzpU41wohhWw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-matcher-utils@29.6.2: + resolution: {integrity: sha512-4LiAk3hSSobtomeIAzFTe+N8kL6z0JtF3n6I4fg29iIW7tt99R7ZcIFW34QkX+DuVrf+CUe6wuVOpm7ZKFJzZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.5.0: + resolution: {integrity: sha512-Kijeg9Dag6CKtIDA7O21zNTACqD5MD/8HfIV8pdD94vFyFuer52SigdC3IQMhab3vACxXMiFk+yMHNdbqtyTGA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-message-util@29.6.2: + resolution: {integrity: sha512-vnIGYEjoPSuRqV8W9t+Wow95SDp6KPX2Uf7EoeG9G99J2OVh7OSwpS4B6J0NfpEIpfkBNHlBZpA2rblEuEFhZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-mock-extended@3.0.4: + resolution: {integrity: sha512-2ynEZ7IEJNrhrgshklDMhrOdnmW4Nt+PhkyRqZxRgpwMo7JjmFWMzyp0+eSyk+H9KK1QjXI5xTZIw6x7cVDcRg==} + peerDependencies: + jest: ^24.0.0 || ^25.0.0 || ^26.0.0 || ^27.0.0 || ^28.0.0 || ^29.0.0 + typescript: 5.9.2 + + jest-mock@29.6.2: + resolution: {integrity: sha512-hoSv3lb3byzdKfwqCuT6uTscan471GUECqgNYykg6ob0yiAw3zYc7OrPnI9Qv8Wwoa4lC7AZ9hyS4AiIx5U2zg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-pnp-resolver@1.2.2: + resolution: {integrity: sha512-olV41bKSMm8BdnuMsewT4jqlZ8+3TCARAXjZGT9jcoSnrfUnRCqnMoF9XEeoWjbzObpqF9dRhHQj0Xb9QdF6/w==} + engines: {node: '>=6'} + peerDependencies: + jest-resolve: '*' + peerDependenciesMeta: + jest-resolve: + optional: true + + jest-regex-util@29.4.3: + resolution: {integrity: sha512-O4FglZaMmWXbGHSQInfXewIsd1LMn9p3ZXB/6r4FOkyhX2/iP/soMG98jGvk/A3HAN78+5VWcBGO0BJAPRh4kg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve-dependencies@29.6.2: + resolution: {integrity: sha512-LGqjDWxg2fuQQm7ypDxduLu/m4+4Lb4gczc13v51VMZbVP5tSBILqVx8qfWcsdP8f0G7aIqByIALDB0R93yL+w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-resolve@29.6.2: + resolution: {integrity: sha512-G/iQUvZWI5e3SMFssc4ug4dH0aZiZpsDq9o1PtXTV1210Ztyb2+w+ZgQkB3iOiC5SmAEzJBOHWz6Hvrd+QnNPw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runner@29.6.2: + resolution: {integrity: sha512-wXOT/a0EspYgfMiYHxwGLPCZfC0c38MivAlb2lMEAlwHINKemrttu1uSbcGbfDV31sFaPWnWJPmb2qXM8pqZ4w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-runtime@29.6.2: + resolution: {integrity: sha512-2X9dqK768KufGJyIeLmIzToDmsN0m7Iek8QNxRSI/2+iPFYHF0jTwlO3ftn7gdKd98G/VQw9XJCk77rbTGZnJg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-snapshot@29.6.2: + resolution: {integrity: sha512-1OdjqvqmRdGNvWXr/YZHuyhh5DeaLp1p/F8Tht/MrMw4Kr1Uu/j4lRG+iKl1DAqUJDWxtQBMk41Lnf/JETYBRA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.5.0: + resolution: {integrity: sha512-RYMgG/MTadOr5t8KdhejfvUU82MxsCu5MF6KuDUHl+NuwzUt+Sm6jJWxTJVrDR1j5M/gJVCPKQEpWXY+yIQ6lQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-util@29.6.2: + resolution: {integrity: sha512-3eX1qb6L88lJNCFlEADKOkjpXJQyZRiavX1INZ4tRnrBVr2COd3RgcTLyUiEXMNBlDU/cgYq6taUS0fExrWW4w==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-validate@29.6.2: + resolution: {integrity: sha512-vGz0yMN5fUFRRbpJDPwxMpgSXW1LDKROHfBopAvDcmD6s+B/s8WJrwi+4bfH4SdInBA5C3P3BI19dBtKzx1Arg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-watcher@29.6.2: + resolution: {integrity: sha512-GZitlqkMkhkefjfN/p3SJjrDaxPflqxEAv3/ik10OirZqJGYH5rPiIsgVcfof0Tdqg3shQGdEIxDBx+B4tuLzA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest-worker@29.6.2: + resolution: {integrity: sha512-l3ccBOabTdkng8I/ORCkADz4eSMKejTYv1vB/Z83UiubqhC1oQ5Li6dWCyqOIvSifGjUBxuvxvlm6KGK2DtuAQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + jest@29.6.2: + resolution: {integrity: sha512-8eQg2mqFbaP7CwfsTpCxQ+sHzw1WuNWL5UUvjnWP4hx2riGz9fPSzYOaU5q8/GqWn1TfgZIVTqYJygbGbWAANg==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 + peerDependenciesMeta: + node-notifier: + optional: true + + jiti@1.21.7: + resolution: {integrity: sha512-/imKNG4EbWNrVjoNC/1H5/9GFy+tqjGBHCaSsN+P2RnPqjsLmv6UD3Ej+Kj8nBWaRAwyk7kK5ZUc+OEatnTR3A==} + hasBin: true + + jju@1.4.0: + resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==} + + jmespath@0.16.0: + resolution: {integrity: sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==} + engines: {node: '>= 0.6.0'} + + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} + + join-component@1.1.0: + resolution: {integrity: sha512-bF7vcQxbODoGK1imE2P9GS9aw4zD0Sd+Hni68IMZLj7zRnquH7dXUmMw9hDI5S/Jzt7q+IyTXN0rSg2GI0IKhQ==} + + jose@6.0.11: + resolution: {integrity: sha512-QxG7EaliDARm1O1S8BGakqncGT9s25bKL1WSf6/oa17Tkqwi8D2ZNglqCF+DsYF88/rV66Q/Q2mFAy697E1DUg==} + + joycon@3.1.1: + resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} + engines: {node: '>=10'} + + js-base64@3.7.2: + resolution: {integrity: sha512-NnRs6dsyqUXejqk/yv2aiXlAvOs56sLkX6nUdeaNezI5LFFLlsZjOThmwnrcwh5ZZRwZlCMnVAY3CvhIhoVEKQ==} + + js-beautify@1.14.9: + resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==} + engines: {node: '>=12'} + hasBin: true + + js-levenshtein@1.1.6: + resolution: {integrity: sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==} + engines: {node: '>=0.10.0'} + + js-md4@0.3.2: + resolution: {integrity: sha512-/GDnfQYsltsjRswQhN9fhv3EMw2sCpUdrdxyWDOUK7eyD++r3gRhzgiQgc/x4MAv2i1iuQ4lxO5mvqM3vj4bwA==} + + js-nacl@1.4.0: + resolution: {integrity: sha512-HgYLcutGbMYBJrwgVICiHliuw1OJLy2U3tIuK6a1rZ06KC84TPl81WG1hcBRrBCiIIuBe3PSo9G4IZOMGdSg3Q==} + + js-sdsl@4.3.0: + resolution: {integrity: sha512-mifzlm2+5nZ+lEcLJMoBK0/IH/bDg8XnJfd/Wq6IP+xoCjLZsTOnV2QpxlVbX9bMnkl5PdEjNtBJ9Cj1NjifhQ==} + + js-stringify@1.0.2: + resolution: {integrity: sha512-rtS5ATOo2Q5k1G+DADISilDA6lv79zIiwFd6CcjuIxGKLFm5C+RLImRscVap9k55i+MOZwgliw+NejvkLuGD5g==} + + js-tiktoken@1.0.12: + resolution: {integrity: sha512-L7wURW1fH9Qaext0VzaUDpFGVQgjkdE3Dgsy9/+yXyGEpBKnylTd0mU0bfbNkKDlXRb6TEsZkwuflu1B8uQbJQ==} + + js-tokens@4.0.0: + resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} + + js-tokens@9.0.1: + resolution: {integrity: sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==} + + js-yaml@3.14.1: + resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} + hasBin: true + + js-yaml@4.1.0: + resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} + hasBin: true + + jsbi@4.3.0: + resolution: {integrity: sha512-SnZNcinB4RIcnEyZqFPdGPVgrg2AcnykiBy0sHVJQKHYeaLUvi3Exj+iaPpLnFVkDPZIV4U0yvgC9/R4uEAZ9g==} + + jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} + engines: {node: '>=12.0.0'} + + jsdom@20.0.2: + resolution: {integrity: sha512-AHWa+QO/cgRg4N+DsmHg1Y7xnz+8KU3EflM0LVDTdmrYOc1WWTSkOjtpUveQH+1Bqd5rtcVnb/DuxV/UjDO4rA==} + engines: {node: '>=14'} + peerDependencies: + canvas: ^2.5.0 + peerDependenciesMeta: + canvas: + optional: true + + jsdom@23.0.1: + resolution: {integrity: sha512-2i27vgvlUsGEBO9+/kJQRbtqtm+191b5zAZrU/UezVmnC2dlDAFLgDYJvAEi94T4kjsRKkezEtLQTgsNEsW2lQ==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^2.11.2 + peerDependenciesMeta: + canvas: + optional: true + + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + + jsesc@3.1.0: + resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==} + engines: {node: '>=6'} + hasBin: true + + json-bigint@1.0.0: + resolution: {integrity: sha512-SiPv/8VpZuWbvLSMtTDU8hEfrZWg/mH/nV/b4o0CYbSxu1UIQPLdwKOCIyLQX+VIPO5vrLX3i8qtqFyhdPSUSQ==} + + json-buffer@3.0.1: + resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} + + json-diff@1.0.6: + resolution: {integrity: sha512-tcFIPRdlc35YkYdGxcamJjllUhXWv4n2rK9oJ2RsAzV4FBkuV4ojKEDgcZ+kpKxDmJKv+PFK65+1tVVOnSeEqA==} + hasBin: true + + json-parse-even-better-errors@2.3.1: + resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==} + + json-parse-even-better-errors@4.0.0: + resolution: {integrity: sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==} + engines: {node: ^18.17.0 || >=20.5.0} + + json-pointer@0.6.2: + resolution: {integrity: sha512-vLWcKbOaXlO+jvRy4qNd+TI1QUPZzfJj1tpJ3vAXDych5XJf93ftpUKe5pKCrzyIIwgBJcOcCVRUfqQP25afBw==} + + json-schema-traverse@0.4.1: + resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} + + json-schema-traverse@1.0.0: + resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + + json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + + json-stable-stringify-without-jsonify@1.0.1: + resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} + + json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + + json5@2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} + engines: {node: '>=6'} + hasBin: true + + jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + + jsonpath@1.1.1: + resolution: {integrity: sha512-l6Cg7jRpixfbgoWgkrl77dgEj8RPvND0wMH6TwQmi9Qs4TFfS9u5cUFnbeKTwj5ga5Y3BTGGNI28k117LJ009w==} + + jsonpointer@5.0.1: + resolution: {integrity: sha512-p/nXbhSEcu3pZRdkW1OfJhpsVtW1gd4Wa1fnQc9YLiTfAjn0312eMKimbdIQzuZl9aa9xUGaRlP9T/CJE/ditQ==} + engines: {node: '>=0.10.0'} + + jsonschema@1.4.1: + resolution: {integrity: sha512-S6cATIPVv1z0IlxdN+zUk5EPjkGCdnhN4wVSBlvoUO1tOLJootbo9CquNJmbIh4yikWHiUedhRYrNPn1arpEmQ==} + + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + + jssha@3.3.0: + resolution: {integrity: sha512-w9OtT4ALL+fbbwG3gw7erAO0jvS5nfvrukGPMWIAoea359B26ALXGpzy4YJSp9yGnpUvuvOw1nSjSoHDfWSr1w==} + + jssha@3.3.1: + resolution: {integrity: sha512-VCMZj12FCFMQYcFLPRm/0lOBbLi8uM2BhXPTqw3U4YAfs4AZfiApOoBLoN8cQE60Z50m1MYMTQVCfgF/KaCVhQ==} + + jstransformer@1.0.0: + resolution: {integrity: sha512-C9YK3Rf8q6VAPDCCU9fnqo3mAfOH6vUGnMcP4AQAYIEpWtfGLpwOTmZ+igtdK5y+VvI2n3CyYSzy4Qh34eq24A==} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + juice@10.0.1: + resolution: {integrity: sha512-ZhJT1soxJCkOiO55/mz8yeBKTAJhRzX9WBO+16ZTqNTONnnVlUPyVBIzQ7lDRjaBdTbid+bAnyIon/GM3yp4cA==} + engines: {node: '>=10.0.0'} + hasBin: true + + jwa@1.4.1: + resolution: {integrity: sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==} + + jwa@2.0.0: + resolution: {integrity: sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + jws@4.0.0: + resolution: {integrity: sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==} + + kafkajs@2.2.4: + resolution: {integrity: sha512-j/YeapB1vfPT2iOIUn/vxdyKEuhuY2PxMBvf5JWux6iSaukAccrMtXEY/Lb7OvavDhOWME589bpLrEdnVHjfjA==} + engines: {node: '>=14.0.0'} + + keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} + + keyv@5.5.0: + resolution: {integrity: sha512-QG7qR2tijh1ftOvClut4YKKg1iW6cx3GZsKoGyJPxHkGWK9oJhG9P3j5deP0QQOGDowBMVQFaP+Vm4NpGYvmIQ==} + + kind-of@6.0.3: + resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} + engines: {node: '>=0.10.0'} + + kleur@3.0.3: + resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} + engines: {node: '>=6'} + + known-css-properties@0.36.0: + resolution: {integrity: sha512-A+9jP+IUmuQsNdsLdcg6Yt7voiMF/D4K83ew0OpJtpu+l34ef7LaohWV0Rc6KNvzw6ZDizkqfyB5JznZnzuKQA==} + + known-css-properties@0.37.0: + resolution: {integrity: sha512-JCDrsP4Z1Sb9JwG0aJ8Eo2r7k4Ou5MwmThS/6lcIe1ICyb7UBJKGRIUUdqc2ASdE/42lgz6zFUnzAIhtXnBVrQ==} + + kolorist@1.8.0: + resolution: {integrity: sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==} + + kuler@2.0.0: + resolution: {integrity: sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A==} + + langchain@0.3.30: + resolution: {integrity: sha512-UyVsfwHDpHbrnWrjWuhJHqi8Non+Zcsf2kdpDTqyJF8NXrHBOpjdHT5LvPuW9fnE7miDTWf5mLcrWAGZgcrznQ==} + engines: {node: '>=18'} + peerDependencies: + '@langchain/anthropic': '*' + '@langchain/aws': '*' + '@langchain/cerebras': '*' + '@langchain/cohere': '*' + '@langchain/core': '>=0.3.58 <0.4.0' + '@langchain/deepseek': '*' + '@langchain/google-genai': '*' + '@langchain/google-vertexai': '*' + '@langchain/google-vertexai-web': '*' + '@langchain/groq': '*' + '@langchain/mistralai': '*' + '@langchain/ollama': '*' + '@langchain/xai': '*' + axios: '*' + cheerio: '*' + handlebars: ^4.7.8 + peggy: ^3.0.2 + typeorm: '*' + peerDependenciesMeta: + '@langchain/anthropic': + optional: true + '@langchain/aws': + optional: true + '@langchain/cerebras': + optional: true + '@langchain/cohere': + optional: true + '@langchain/deepseek': + optional: true + '@langchain/google-genai': + optional: true + '@langchain/google-vertexai': + optional: true + '@langchain/google-vertexai-web': + optional: true + '@langchain/groq': + optional: true + '@langchain/mistralai': + optional: true + '@langchain/ollama': + optional: true + '@langchain/xai': + optional: true + axios: + optional: true + cheerio: + optional: true + handlebars: + optional: true + peggy: + optional: true + typeorm: + optional: true + + langsmith@0.3.45: + resolution: {integrity: sha512-+LNOy/Uv0OWbtcsKHhrVenGLkS8CaM/9Vd2/95QzgQ54YokXlD9sH5LNRNRqxJAMt/NsqoIbZSoXj6rt96e8hw==} + peerDependencies: + '@opentelemetry/api': '*' + '@opentelemetry/exporter-trace-otlp-proto': '*' + '@opentelemetry/sdk-trace-base': '*' + openai: '*' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/exporter-trace-otlp-proto': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + openai: + optional: true + + langsmith@0.3.55: + resolution: {integrity: sha512-YC/e6lUIYSkheOq9PR6O4CV6GOhYHyPvF2w0SOk85Mw4P5ae/oFdjuFsv7BCjKhPs4vFWC6Fz/qxPTz9mXNhVw==} + peerDependencies: + '@opentelemetry/api': '*' + '@opentelemetry/exporter-trace-otlp-proto': '*' + '@opentelemetry/sdk-trace-base': '*' + openai: '*' + peerDependenciesMeta: + '@opentelemetry/api': + optional: true + '@opentelemetry/exporter-trace-otlp-proto': + optional: true + '@opentelemetry/sdk-trace-base': + optional: true + openai: + optional: true + + lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + + lazystream@1.0.1: + resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} + engines: {node: '>= 0.6.3'} + + ldapts@4.2.6: + resolution: {integrity: sha512-r1eOj2PtTJi+9aZxLirktoHntuYXlbQD9ZXCjiZmJx0VBQtBcWc+rueqABuh/AxMcFHNPDSJLJAXxoj5VevTwQ==} + engines: {node: '>=14'} + + leac@0.6.0: + resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + + lefthook-darwin-arm64@1.7.15: + resolution: {integrity: sha512-o8JgCnLM7UgF9g0MwarHJFoj6aVSSkUInHpsQZegV1c7CVQY/LIXgSeAWRb9XBvuUjByJ/HiHFMp9/hAALTwxQ==} + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@1.7.15: + resolution: {integrity: sha512-nrdoex0icmXYl7AAvG7WtfEzjQtX/kWvM88jPu/gijH6VhAjp110Y8VScB7rWOcApb5kNNeqd1nKMAFgZ8KhAg==} + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@1.7.15: + resolution: {integrity: sha512-zl1TPynklJZZ/YsWb2H0gfErQbey318i2W85wIKGEk8kC2UzOgYTuPffnfi7kANei9ntZnhvGgilc6tqYOPuGQ==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@1.7.15: + resolution: {integrity: sha512-/gKPwhWhZ3Q/efGs73/qw6nyR4WCT74oSTgn8wabAJO5+T/2FXTKzo7IiKkQmScmY5OcnD/0teJbJZ17VWSSOg==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@1.7.15: + resolution: {integrity: sha512-re2f8WmYw19n8ojit0rnKbERAzD1/iCpU/Y8anXOjD/ROw/cpSfO88uKQrUCNY9Rp4XLtkkp9oDJs3Eg7JS7vA==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@1.7.15: + resolution: {integrity: sha512-Kj6ieTlhFGlbPDyVFeOb296MS9x/Jj5y/xTPLBM+EKbdsTJSvUYu5FdtEWfhpLyWmPfkZtULHcTQE1hoo9Q4Cg==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@1.7.15: + resolution: {integrity: sha512-85amE23mJ4BC9OThLkt+QCeVwue2Cr0ezN9LSwP0h8+royyj7YRcSu0VM/Et3B9LO50T2bpdI9norOqTcPZ9yA==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@1.7.15: + resolution: {integrity: sha512-vXx/PpcalFgdvqkoHLI4KTGZp0ti+VCCL7RqDTA6n+GZpxPTWEXSOz3GuwNALX93Dn6MOYQYktKtXADwy24fcA==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@1.7.15: + resolution: {integrity: sha512-jPKdQOLWQLRPO3VfI3ptpmdQBBsXTwaCLKXMo/gcSyU0xE/ltPD4QqvHzTAFJo00VcKRHjv9QeH69qhENjJtjw==} + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@1.7.15: + resolution: {integrity: sha512-tlkSU669+b64AsqytGy1W3au7h8kFjt5ejLhTkErJpylTqThZIHm/GI0wUmpX+ud8kekM+9j407dweAHYOQ1XA==} + cpu: [x64] + os: [win32] + + lefthook@1.7.15: + resolution: {integrity: sha512-HW2mYkhg0a3RH2t57+ZJwacJiSIuDEhsXQAaCw6iGeN7zowdUV7g5QtnRdFdPkaK2eaNFpG6Rp0GsTrl/v0gNg==} + hasBin: true + + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + + levn@0.3.0: + resolution: {integrity: sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==} + engines: {node: '>= 0.8.0'} + + levn@0.4.1: + resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} + engines: {node: '>= 0.8.0'} + + libbase64@1.2.1: + resolution: {integrity: sha512-l+nePcPbIG1fNlqMzrh68MLkX/gTxk/+vdvAb388Ssi7UuUN31MI44w4Yf33mM3Cm4xDfw48mdf3rkdHszLNew==} + + libmime@5.2.0: + resolution: {integrity: sha512-X2U5Wx0YmK0rXFbk67ASMeqYIkZ6E5vY7pNWRKtnNzqjvdYYG8xtPDpCnuUEnPU9vlgNev+JoSrcaKSUaNvfsw==} + + libmime@5.2.1: + resolution: {integrity: sha512-A0z9O4+5q+ZTj7QwNe/Juy1KARNb4WaviO4mYeFC4b8dBT2EEqK2pkM+GC8MVnkOjqhl5nYQxRgnPYRRTNmuSQ==} + + libphonenumber-js@1.10.14: + resolution: {integrity: sha512-McGS7GV/WjJ2KjfOGhJU1oJn29RYeo7Q+RpANRbUNMQ9gj5XArpbjurSuyYPTejFwbaUojstQ4XyWCrAzGOUXw==} + + libqp@2.0.1: + resolution: {integrity: sha512-Ka0eC5LkF3IPNQHJmYBWljJsw0UvM6j+QdKRbWyCdTmYwvIDE6a7bCm0UkTAL/K+3KXK5qXT/ClcInU01OpdLg==} + + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + + lil-http-terminator@1.2.3: + resolution: {integrity: sha512-vQcHSwAFq/kTR2cG6peOVS7SjgksGgSPeH0G2lkw+buue33thE/FCHdn10wJXXshc5RswFy0Iaz48qA2Busw5Q==} + engines: {node: '>=12'} + + lilconfig@2.1.0: + resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} + engines: {node: '>=10'} + + lilconfig@3.1.3: + resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} + engines: {node: '>=14'} + + lines-and-columns@1.2.4: + resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + + linkify-it@4.0.1: + resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} + + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + + listr2@3.14.0: + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + + load-tsconfig@0.2.5: + resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + local-pkg@0.5.0: + resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} + engines: {node: '>=14'} + + local-pkg@1.1.1: + resolution: {integrity: sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==} + engines: {node: '>=14'} + + locate-path@5.0.0: + resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} + engines: {node: '>=8'} + + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + + lodash-es@4.17.21: + resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + + lodash-unified@1.0.3: + resolution: {integrity: sha512-WK9qSozxXOD7ZJQlpSqOT+om2ZfcT4yO+03FuzAHD0wF6S0l0090LRPDx3vhTTLZ8cFKpBn+IOcVXK6qOcIlfQ==} + peerDependencies: + '@types/lodash-es': '*' + lodash: '*' + lodash-es: '*' + + lodash.camelcase@4.3.0: + resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} + + lodash.clonedeep@4.5.0: + resolution: {integrity: sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==} + + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + + lodash.defaults@4.2.0: + resolution: {integrity: sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==} + + lodash.get@4.4.2: + resolution: {integrity: sha512-z+Uw/vLuy6gQe8cfaFWD7p0wVv8fJl3mbzXh33RS+0oW2wvUqiRXiQ69gLWSLpgB5/6sU+r6BlQR0MBILadqTQ==} + deprecated: This package is deprecated. Use the optional chaining (?.) operator instead. + + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isarguments@3.1.0: + resolution: {integrity: sha512-chi4NHZlZqZD18a0imDHnZPrDeBbTtVN7GXMwuGdRH9qotxAjYs3aVLKc7zNOG9eddR5Ksd8rvFEBc9SsggPpg==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + + lodash.merge@4.6.2: + resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + + lodash.orderby@4.6.0: + resolution: {integrity: sha512-T0rZxKmghOOf5YPnn8EY5iLYeWCpZq8G41FfqoVHH5QDTAFaghJRmAdLiadEDq+ztgM2q5PjA+Z1fOwGrLgmtg==} + + lodash.sortby@4.7.0: + resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} + + lodash.throttle@4.1.1: + resolution: {integrity: sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==} + + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} + + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + + logform@2.6.1: + resolution: {integrity: sha512-CdaO738xRapbKIMVn2m4F6KTj4j7ooJ8POVnebSgKo3KBz5axNXRAL7ZdRjIV6NOr2Uf4vjtRkxrFETOioCqSA==} + engines: {node: '>= 12.0.0'} + + loglevel@1.9.2: + resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} + engines: {node: '>= 0.6.0'} + + long@4.0.0: + resolution: {integrity: sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==} + + long@5.2.3: + resolution: {integrity: sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==} + + long@5.3.2: + resolution: {integrity: sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA==} + + loose-envify@1.4.0: + resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} + hasBin: true + + lop@0.4.1: + resolution: {integrity: sha512-9xyho9why2A2tzm5aIcMWKvzqKsnxrf9B5I+8O30olh6lQU8PH978LqZoI4++37RBgS1Em5i54v1TFs/3wnmXQ==} + + lossless-json@1.0.5: + resolution: {integrity: sha512-RicKUuLwZVNZ6ZdJHgIZnSeA05p8qWc5NW0uR96mpPIjN9WDLUg9+kj1esQU1GkPn9iLZVKatSQK5gyiaFHgJA==} + + lossless-json@4.0.2: + resolution: {integrity: sha512-+z0EaLi2UcWi8MZRxA5iTb6m4Ys4E80uftGY+yG5KNFJb5EceQXOhdW/pWJZ8m97s26u7yZZAYMcKWNztSZssA==} + + loupe@3.1.4: + resolution: {integrity: sha512-wJzkKwJrheKtknCOKNEtDK4iqg/MxmZheEMtSTYvnzRdEYaZzmgH976nenp8WdJRdx5Vc1X/9MO0Oszl6ezeXg==} + + lower-case@1.1.4: + resolution: {integrity: sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==} + + lower-case@2.0.2: + resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + + lru-cache@10.2.2: + resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} + engines: {node: 14 || >=16.14} + + lru-cache@11.1.0: + resolution: {integrity: sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A==} + engines: {node: 20 || >=22} + + lru-cache@5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lru-cache@8.0.5: + resolution: {integrity: sha512-MhWWlVnuab1RG5/zMRRcVGXZLCXrZTgfwMikgzCegsPnG62yDQo5JnqKkrK4jO5iKqDAZGItAqN5CtKBCBWRUA==} + engines: {node: '>=16.14'} + + lru-cache@9.1.2: + resolution: {integrity: sha512-ERJq3FOzJTxBbFjZ7iDs+NiK4VI9Wz+RdrrAB8dio1oV+YvdPzUEE4QNiT2VD51DkIbCYRUUzCRkssXCHqSnKQ==} + engines: {node: 14 || >=16.14} + + lunr@2.3.9: + resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} + + luxon@3.4.4: + resolution: {integrity: sha512-zobTr7akeGHnv7eBOXcRgMeCP6+uyYsczwmeRCauvpvaAltgNyTbLH/+VaEAPUeWBT+1GuNmz4wC/6jtQzbbVA==} + engines: {node: '>=12'} + + luxon@3.5.0: + resolution: {integrity: sha512-rh+Zjr6DNfUYR3bPwJEnuwDdqMbxZW7LOQfUN4B54+Cl+0o5zaU9RJ6bcidfDtC1cWCZXQ+nvX8bf6bAji37QQ==} + engines: {node: '>=12'} + + lz-string@1.5.0: + resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} + hasBin: true + + madge@8.0.0: + resolution: {integrity: sha512-9sSsi3TBPhmkTCIpVQF0SPiChj1L7Rq9kU2KDG1o6v2XH9cCw086MopjVCD+vuoL5v8S77DTbVopTO8OUiQpIw==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + magicast@0.3.5: + resolution: {integrity: sha512-L0WhttDl+2BOsybvEOLK7fW3UA0OQ0IQ2d6Zl2x/a6vVRs3bAY0ECOSHHeL5jD+SbOpOCUEi0y1DgHEn9Qn1AQ==} + + mailparser@3.6.7: + resolution: {integrity: sha512-/3x8HW70DNehw+3vdOPKdlLuxOHoWcGB5jfx5vJ5XUbY9/2jUJbrrhda5Si8Dj/3w08U0y5uGAkqs5+SPTPKoA==} + + mailsplit@5.4.0: + resolution: {integrity: sha512-wnYxX5D5qymGIPYLwnp6h8n1+6P6vz/MJn5AzGjZ8pwICWssL+CCQjWBIToOVHASmATot4ktvlLo6CyLfOXWYA==} + + make-dir@3.1.0: + resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} + engines: {node: '>=8'} + + make-dir@4.0.0: + resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} + engines: {node: '>=10'} + + make-error@1.3.6: + resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} + + make-fetch-happen@9.1.0: + resolution: {integrity: sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==} + engines: {node: '>= 10'} + + makeerror@1.0.12: + resolution: {integrity: sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==} + + mammoth@1.7.2: + resolution: {integrity: sha512-MqWU2hcLf1I5QMKyAbfJCvrLxnv5WztrAQyorfZ+WPq7Hk82vZFmvfR2/64ajIPpM4jlq0TXp1xZvp/FFaL1Ug==} + engines: {node: '>=12.0.0'} + hasBin: true + + map-or-similar@1.5.0: + resolution: {integrity: sha512-0aF7ZmVon1igznGI4VS30yugpduQW3y3GkcgGJOp7d8x8QrizhigUxjI/m2UojsXXto+jLAH3KSz+xOJTiORjg==} + + map-stream@0.1.0: + resolution: {integrity: sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g==} + + mappersmith@2.45.0: + resolution: {integrity: sha512-N/Kkx9RqJenkvMHPMY0VS1geAara0VQTwup5Abv2GB19QBT7w+epjhRQMLW5jtz2DXUdkh7KD3F3prqJKG1A8w==} + + mark.js@8.11.1: + resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} + + markdown-it-emoji@2.0.2: + resolution: {integrity: sha512-zLftSaNrKuYl0kR5zm4gxXjHaOI3FAOEaloKmRA5hijmJZvSjmxcokOLlzycb/HXlUFWzXqpIEoyEMCE4i9MvQ==} + + markdown-it-link-attributes@4.0.1: + resolution: {integrity: sha512-pg5OK0jPLg62H4k7M9mRJLT61gUp9nvG0XveKYHMOOluASo9OEF13WlXrpAp2aj35LbedAy3QOCgQCw0tkLKAQ==} + + markdown-it-task-lists@2.1.1: + resolution: {integrity: sha512-TxFAc76Jnhb2OUu+n3yz9RMu4CwGfaT788br6HhEDlvWfdeJcLUsxk1Hgw2yJio0OXsxv7pyIPmvECY7bMbluA==} + + markdown-it@13.0.2: + resolution: {integrity: sha512-FtwnEuuK+2yVU7goGn/MJ0WBZMM9ZPgU9spqlFs7/A/pDIUNSOQZhUgOqYCficIuR2QaFnrt8LHqBWsbTAoI5w==} + hasBin: true + + marked@4.3.0: + resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} + engines: {node: '>= 12'} + hasBin: true + + math-intrinsics@1.1.0: + resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} + engines: {node: '>= 0.4'} + + mathml-tag-names@2.1.3: + resolution: {integrity: sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==} + + md5.js@1.3.5: + resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} + + md5@2.3.0: + resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} + + mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + + mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + + mdn-data@2.12.2: + resolution: {integrity: sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==} + + mdn-data@2.23.0: + resolution: {integrity: sha512-786vq1+4079JSeu2XdcDjrhi/Ry7BWtjDl9WtGPWLiIHb2T66GvIVflZTBoSNZ5JqTtJGYEVMuFA/lbQlMOyDQ==} + + mdurl@1.0.1: + resolution: {integrity: sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g==} + + media-typer@0.3.0: + resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} + engines: {node: '>= 0.6'} + + media-typer@1.1.0: + resolution: {integrity: sha512-aisnrDP4GNe06UcKFnV5bfMNPBUw4jsLGaWwWfnH3v02GnBuXX2MCVn5RbrWo0j3pczUilYblq7fQ7Nw2t5XKw==} + engines: {node: '>= 0.8'} + + memoize-one@6.0.0: + resolution: {integrity: sha512-rkpe71W0N0c0Xz6QD0eJETuWAJGnJ9afsl1srmwPrI+yBCkge5EycXXbYRyvL29zZVUWQCY7InPRCv3GDXuZNw==} + + memoizerific@1.11.3: + resolution: {integrity: sha512-/EuHYwAPdLtXwAwSZkh/Gutery6pD2KYd44oQLhAvQp/50mpyduZh8Q7PYHXTCJ+wuXxt7oij2LXyIJOOYFPog==} + + memory-pager@1.5.0: + resolution: {integrity: sha512-ZS4Bp4r/Zoeq6+NLJpP+0Zzm0pR8whtGPf1XExKLJBAczGMnSi3It14OiNCStjQjM6NU1okjQGSxgEZN8eBYKg==} + + memorystream@0.3.1: + resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} + engines: {node: '>= 0.10.0'} + + mensch@0.3.4: + resolution: {integrity: sha512-IAeFvcOnV9V0Yk+bFhYR07O3yNina9ANIN5MoXBKYJ/RLYPurd2d0yw14MDhpr9/momp0WofT1bPUh3hkzdi/g==} + + meow@13.2.0: + resolution: {integrity: sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==} + engines: {node: '>=18'} + + merge-descriptors@2.0.0: + resolution: {integrity: sha512-Snk314V5ayFLhp3fkUREub6WtjBfPdCPY1Ln8/8munuLuiYhsABgBVWsozAG+MWMbVEvcdcpbi9R7ww22l9Q3g==} + engines: {node: '>=18'} + + merge-stream@2.0.0: + resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} + + merge2@1.4.1: + resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} + engines: {node: '>= 8'} + + methods@1.1.2: + resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} + engines: {node: '>= 0.6'} + + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + + miller-rabin@4.0.1: + resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} + hasBin: true + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-db@1.54.0: + resolution: {integrity: sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mime-types@3.0.1: + resolution: {integrity: sha512-xRc4oEhT6eaBpU1XF7AjpOFD+xQmXNB5OVKwp4tqCuBpHLS/ZbBDrc07mYTDqVMg6PfxUjjNp85O6Cd2Z/5HWA==} + engines: {node: '>= 0.6'} + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + + mime@3.0.0: + resolution: {integrity: sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==} + engines: {node: '>=10.0.0'} + hasBin: true + + mimic-fn@2.1.0: + resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} + engines: {node: '>=6'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + + min-indent@1.0.1: + resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} + engines: {node: '>=4'} + + minifaker@1.34.1: + resolution: {integrity: sha512-O9+c6GaUETgtKe65bJkpDTJxGcAALiUPqJtDv97dT3o0uP2HmyUVEguEGm6PLKuoSzZUmHqSTZ4cS7m8xKFEAg==} + + minimalistic-assert@1.0.1: + resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} + + minimalistic-crypto-utils@1.0.1: + resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} + + minimatch@10.0.3: + resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} + engines: {node: 20 || >=22} + + minimatch@3.0.8: + resolution: {integrity: sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==} + + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} + engines: {node: '>=10'} + + minimatch@9.0.1: + resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + + minimist@1.2.8: + resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + + minipass-collect@1.0.2: + resolution: {integrity: sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==} + engines: {node: '>= 8'} + + minipass-fetch@1.4.1: + resolution: {integrity: sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==} + engines: {node: '>=8'} + + minipass-flush@1.0.5: + resolution: {integrity: sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==} + engines: {node: '>= 8'} + + minipass-pipeline@1.2.4: + resolution: {integrity: sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==} + engines: {node: '>=8'} + + minipass-sized@1.0.3: + resolution: {integrity: sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==} + engines: {node: '>=8'} + + minipass@3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} + engines: {node: '>=8'} + + minipass@5.0.0: + resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} + engines: {node: '>=8'} + + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@2.1.2: + resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} + engines: {node: '>= 8'} + + miragejs@0.1.48: + resolution: {integrity: sha512-MGZAq0Q3OuRYgZKvlB69z4gLN4G3PvgC4A2zhkCXCXrLD5wm2cCnwNB59xOBVA+srZ0zEes6u+VylcPIkB4SqA==} + engines: {node: 6.* || 8.* || >= 10.*} + + mitt@2.1.0: + resolution: {integrity: sha512-ILj2TpLiysu2wkBbWjAmww7TkZb65aiQO+DkVdUTBpBXq+MHYiETENkKFMtsJZX1Lf4pe4QOrTSjIfUwN5lRdg==} + + mjml-accordion@4.15.3: + resolution: {integrity: sha512-LPNVSj1LyUVYT9G1gWwSw3GSuDzDsQCu0tPB2uDsq4VesYNnU6v3iLCQidMiR6azmIt13OEozG700ygAUuA6Ng==} + + mjml-body@4.15.3: + resolution: {integrity: sha512-7pfUOVPtmb0wC+oUOn4xBsAw4eT5DyD6xqaxj/kssu6RrFXOXgJaVnDPAI9AzIvXJ/5as9QrqRGYAddehwWpHQ==} + + mjml-button@4.15.3: + resolution: {integrity: sha512-79qwn9AgdGjJR1vLnrcm2rq2AsAZkKC5JPwffTMG+Nja6zGYpTDZFZ56ekHWr/r1b5WxkukcPj2PdevUug8c+Q==} + + mjml-carousel@4.15.3: + resolution: {integrity: sha512-3ju6I4l7uUhPRrJfN3yK9AMsfHvrYbRkcJ1GRphFHzUj37B2J6qJOQUpzA547Y4aeh69TSb7HFVf1t12ejQxVw==} + + mjml-cli@4.15.3: + resolution: {integrity: sha512-+V2TDw3tXUVEptFvLSerz125C2ogYl8klIBRY1m5BHd4JvGVf3yhx8N3PngByCzA6PGcv/eydGQN+wy34SHf0Q==} + hasBin: true + + mjml-column@4.15.3: + resolution: {integrity: sha512-hYdEFdJGHPbZJSEysykrevEbB07yhJGSwfDZEYDSbhQQFjV2tXrEgYcFD5EneMaowjb55e3divSJxU4c5q4Qgw==} + + mjml-core@4.15.3: + resolution: {integrity: sha512-Dmwk+2cgSD9L9GmTbEUNd8QxkTZtW9P7FN/ROZW/fGZD6Hq6/4TB0zEspg2Ow9eYjZXO2ofOJ3PaQEEShKV0kQ==} + + mjml-divider@4.15.3: + resolution: {integrity: sha512-vh27LQ9FG/01y0b9ntfqm+GT5AjJnDSDY9hilss2ixIUh0FemvfGRfsGVeV5UBVPBKK7Ffhvfqc7Rciob9Spzw==} + + mjml-group@4.15.3: + resolution: {integrity: sha512-HSu/rKnGZVKFq3ciT46vi1EOy+9mkB0HewO4+P6dP/Y0UerWkN6S3UK11Cxsj0cAp0vFwkPDCdOeEzRdpFEkzA==} + + mjml-head-attributes@4.15.3: + resolution: {integrity: sha512-2ISo0r5ZKwkrvJgDou9xVPxxtXMaETe2AsAA02L89LnbB2KC0N5myNsHV0sEysTw9+CfCmgjAb0GAI5QGpxKkQ==} + + mjml-head-breakpoint@4.15.3: + resolution: {integrity: sha512-Eo56FA5C2v6ucmWQL/JBJ2z641pLOom4k0wP6CMZI2utfyiJ+e2Uuinj1KTrgDcEvW4EtU9HrfAqLK9UosLZlg==} + + mjml-head-font@4.15.3: + resolution: {integrity: sha512-CzV2aDPpiNIIgGPHNcBhgyedKY4SX3BJoTwOobSwZVIlEA6TAWB4Z9WwFUmQqZOgo1AkkiTHPZQvGcEhFFXH6g==} + + mjml-head-html-attributes@4.15.3: + resolution: {integrity: sha512-MDNDPMBOgXUZYdxhosyrA2kudiGO8aogT0/cODyi2Ed9o/1S7W+je11JUYskQbncqhWKGxNyaP4VWa+6+vUC/g==} + + mjml-head-preview@4.15.3: + resolution: {integrity: sha512-J2PxCefUVeFwsAExhrKo4lwxDevc5aKj888HBl/wN4EuWOoOg06iOGCxz4Omd8dqyFsrqvbBuPqRzQ+VycGmaA==} + + mjml-head-style@4.15.3: + resolution: {integrity: sha512-9J+JuH+mKrQU65CaJ4KZegACUgNIlYmWQYx3VOBR/tyz+8kDYX7xBhKJCjQ1I4wj2Tvga3bykd89Oc2kFZ5WOw==} + + mjml-head-title@4.15.3: + resolution: {integrity: sha512-IM59xRtsxID4DubQ0iLmoCGXguEe+9BFG4z6y2xQDrscIa4QY3KlfqgKGT69ojW+AVbXXJPEVqrAi4/eCsLItQ==} + + mjml-head@4.15.3: + resolution: {integrity: sha512-o3mRuuP/MB5fZycjD3KH/uXsnaPl7Oo8GtdbJTKtH1+O/3pz8GzGMkscTKa97l03DAG2EhGrzzLcU2A6eshwFw==} + + mjml-hero@4.15.3: + resolution: {integrity: sha512-9cLAPuc69yiuzNrMZIN58j+HMK1UWPaq2i3/Fg2ZpimfcGFKRcPGCbEVh0v+Pb6/J0+kf8yIO0leH20opu3AyQ==} + + mjml-image@4.15.3: + resolution: {integrity: sha512-g1OhSdofIytE9qaOGdTPmRIp7JsCtgO0zbsn1Fk6wQh2gEL55Z40j/VoghslWAWTgT2OHFdBKnMvWtN6U5+d2Q==} + + mjml-migrate@4.15.3: + resolution: {integrity: sha512-sr/+35RdxZroNQVegjpfRHJ5hda9XCgaS4mK2FGO+Mb1IUevKfeEPII3F/cHDpNwFeYH3kAgyqQ22ClhGLWNBA==} + hasBin: true + + mjml-navbar@4.15.3: + resolution: {integrity: sha512-VsKH/Jdlf8Yu3y7GpzQV5n7JMdpqvZvTSpF6UQXL0PWOm7k6+LX+sCZimOfpHJ+wCaaybpxokjWZ71mxOoCWoA==} + + mjml-parser-xml@4.15.3: + resolution: {integrity: sha512-Tz0UX8/JVYICLjT+U8J1f/TFxIYVYjzZHeh4/Oyta0pLpRLeZlxEd71f3u3kdnulCKMP4i37pFRDmyLXAlEuLw==} + + mjml-preset-core@4.15.3: + resolution: {integrity: sha512-1zZS8P4O0KweWUqNS655+oNnVMPQ1Rq1GaZq5S9JfwT1Vh/m516lSmiTW9oko6gGHytt5s6Yj6oOeu5Zm8FoLw==} + + mjml-raw@4.15.3: + resolution: {integrity: sha512-IGyHheOYyRchBLiAEgw3UM11kFNmBSMupu2BDdejC6ZiDhEAdG+tyERlsCwDPYtXanvFpGWULIu3XlsUPc+RZw==} + + mjml-section@4.15.3: + resolution: {integrity: sha512-JfVPRXH++Hd933gmQfG8JXXCBCR6fIzC3DwiYycvanL/aW1cEQ2EnebUfQkt5QzlYjOkJEH+JpccAsq3ln6FZQ==} + + mjml-social@4.15.3: + resolution: {integrity: sha512-7sD5FXrESOxpT9Z4Oh36bS6u/geuUrMP1aCg2sjyAwbPcF1aWa2k9OcatQfpRf6pJEhUZ18y6/WBBXmMVmSzXg==} + + mjml-spacer@4.15.3: + resolution: {integrity: sha512-3B7Qj+17EgDdAtZ3NAdMyOwLTX1jfmJuY7gjyhS2HtcZAmppW+cxqHUBwCKfvSRgTQiccmEvtNxaQK+tfyrZqA==} + + mjml-table@4.15.3: + resolution: {integrity: sha512-FLx7DcRKTdKdcOCbMyBaeudeHaHpwPveRrBm6WyQe3LXx6FfdmOh59i71/16LFQMgBOD3N4/UJkzxLzlTJzMqQ==} + + mjml-text@4.15.3: + resolution: {integrity: sha512-+C0hxCmw9kg0XzT6vhE5mFkK6y225nC8UEQcN94K0fBCjPKkM+HqZMwGX205fzdGRi+Bxa55b/VhrIVwdv+8vw==} + + mjml-validator@4.15.3: + resolution: {integrity: sha512-Xb72KdqRwjv/qM2rJpV22syyP2N3cRQ9VVDrN6u2FSzLq02buFNxmSPJ7CKhat3PrUNdVHU75KZwOf/tz4UEhA==} + + mjml-wrapper@4.15.3: + resolution: {integrity: sha512-ditsCijeHJrmBmObtJmQ18ddLxv5oPyMTdPU8Di8APOnD2zPk7Z4UAuJSl7HXB45oFiivr3MJf4koFzMUSZ6Gg==} + + mjml@4.15.3: + resolution: {integrity: sha512-bW2WpJxm6HS+S3Yu6tq1DUPFoTxU9sPviUSmnL7Ua+oVO3WA5ILFWqvujUlz+oeuM+HCwEyMiP5xvKNPENVjYA==} + hasBin: true + + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mkdirp@0.5.6: + resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} + hasBin: true + + mkdirp@1.0.4: + resolution: {integrity: sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@2.1.3: + resolution: {integrity: sha512-sjAkg21peAG9HS+Dkx7hlG9Ztx7HLeKnvB3NQRcu/mltCVmvkF0pisbiTSfDVYTT86XEfZrTUosLdZLStquZUw==} + engines: {node: '>=10'} + hasBin: true + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + + mlly@1.7.4: + resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + + mobx-react-lite@4.0.7: + resolution: {integrity: sha512-RjwdseshK9Mg8On5tyJZHtGD+J78ZnCnRaxeQDSiciKVQDUbfZcXhmld0VMxAwvcTnPEHZySGGewm467Fcpreg==} + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + mobx-react@9.1.1: + resolution: {integrity: sha512-gVV7AdSrAAxqXOJ2bAbGa5TkPqvITSzaPiiEkzpW4rRsMhSec7C2NBCJYILADHKp2tzOAIETGRsIY0UaCV5aEw==} + peerDependencies: + mobx: ^6.9.0 + react: ^16.8.0 || ^17 || ^18 + react-dom: '*' + react-native: '*' + peerDependenciesMeta: + react-dom: + optional: true + react-native: + optional: true + + mobx@6.12.0: + resolution: {integrity: sha512-Mn6CN6meXEnMa0a5u6a5+RKrqRedHBhZGd15AWLk9O6uFY4KYHzImdt8JI8WODo1bjTSRnwXhJox+FCUZhCKCQ==} + + mocha-junit-reporter@2.2.1: + resolution: {integrity: sha512-iDn2tlKHn8Vh8o4nCzcUVW4q7iXp7cC4EB78N0cDHIobLymyHNwe0XG8HEHHjc3hJlXm0Vy6zcrxaIhnI2fWmw==} + peerDependencies: + mocha: '>=2.2.5' + + mocha@11.7.1: + resolution: {integrity: sha512-5EK+Cty6KheMS/YLPPMJC64g5V61gIR25KsRItHw6x4hEKT6Njp1n9LOlH4gpevuwMVS66SXaBBpg+RWZkza4A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + + module-definition@6.0.1: + resolution: {integrity: sha512-FeVc50FTfVVQnolk/WQT8MX+2WVcDnTGiq6Wo+/+lJ2ET1bRVi3HG3YlJUfqagNMc/kUlFSoR96AJkxGpKz13g==} + engines: {node: '>=18'} + hasBin: true + + module-details-from-path@1.0.3: + resolution: {integrity: sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==} + + module-lookup-amd@9.0.5: + resolution: {integrity: sha512-Rs5FVpVcBYRHPLuhHOjgbRhosaQYLtEo3JIeDIbmNo7mSssi1CTzwMh8v36gAzpbzLGXI9wB/yHh+5+3fY1QVw==} + engines: {node: '>=18'} + hasBin: true + + moment-timezone@0.5.48: + resolution: {integrity: sha512-f22b8LV1gbTO2ms2j2z13MuPogNoh5UzxL3nzNAYKGraILnbGc9NEE6dyiiiLv46DGRb8A4kg8UKWLjPthxBHw==} + + moment@2.29.4: + resolution: {integrity: sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==} + + mongodb-connection-string-url@3.0.0: + resolution: {integrity: sha512-t1Vf+m1I5hC2M5RJx/7AtxgABy1cZmIPQRMXw+gEIPn/cZNF3Oiy+l0UIypUwVB5trcWHq3crg2g3uAR9aAwsQ==} + + mongodb@6.11.0: + resolution: {integrity: sha512-yVbPw0qT268YKhG241vAMLaDQAPbRyTgo++odSgGc9kXnzOujQI60Iyj23B9sQQFPSvmNPvMZ3dsFz0aN55KgA==} + engines: {node: '>=16.20.1'} + peerDependencies: + '@aws-sdk/credential-providers': ^3.188.0 + '@mongodb-js/zstd': ^1.1.0 + gcp-metadata: ^5.2.0 + kerberos: ^2.0.1 + mongodb-client-encryption: '>=6.0.0 <7' + snappy: ^7.2.2 + socks: ^2.7.1 + peerDependenciesMeta: + '@aws-sdk/credential-providers': + optional: true + '@mongodb-js/zstd': + optional: true + gcp-metadata: + optional: true + kerberos: + optional: true + mongodb-client-encryption: + optional: true + snappy: + optional: true + socks: + optional: true + + mqtt-packet@9.0.0: + resolution: {integrity: sha512-8v+HkX+fwbodsWAZIZTI074XIoxVBOmPeggQuDFCGg1SqNcC+uoRMWu7J6QlJPqIUIJXmjNYYHxBBLr1Y/Df4w==} + + mqtt@5.7.2: + resolution: {integrity: sha512-b5xIA9J/K1LTubSWKaNYYLxYIusQdip6o9/8bRWad2TelRr8xLifjQt+SnamDAwMp3O6NdvR9E8ae7VMuN02kg==} + engines: {node: '>=16.0.0'} + hasBin: true + + ms@2.0.0: + resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + + ms@2.1.2: + resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + msgpackr-extract@3.0.2: + resolution: {integrity: sha512-SdzXp4kD/Qf8agZ9+iTu6eql0m3kWm1A2y1hkpTeVNENutaB0BwHlSvAIaMxwntmRUAUjon2V4L8Z/njd0Ct8A==} + hasBin: true + + msgpackr@1.11.2: + resolution: {integrity: sha512-F9UngXRlPyWCDEASDpTf6c9uNhGPTqnTeLVt7bN+bU1eajoR/8V9ys2BRaV5C/e5ihE6sJ9uPIKaYt6bFuO32g==} + + mssql@10.0.2: + resolution: {integrity: sha512-GrQ6gzv2xA7ndOvONyZ++4RZsNkr8qDiIpvuFn2pR3TPiSk/cKdmvOrDU3jWgon7EPj7CPgmDiMh7Hgtft2xLg==} + engines: {node: '>=14'} + hasBin: true + + muggle-string@0.4.1: + resolution: {integrity: sha512-VNTrAak/KhO2i8dqqnqnAHOa3cYBwXEZe9h+D5h/1ZqFSTEFHdM65lR7RoIqq3tBBYavsOXV84NoHXZ0AkPyqQ==} + + multer@2.0.2: + resolution: {integrity: sha512-u7f2xaZ/UG8oLXHvtF/oWTRvT44p9ecwBBqTwgJVq0+4BW1g8OW01TyMEGWBHbyMOYVHXslaut7qEQ1meATXgw==} + engines: {node: '>= 10.16.0'} + + mustache@4.2.0: + resolution: {integrity: sha512-71ippSywq5Yb7/tVYyGbkBggbU8H3u5Rz56fH60jGFgr8uHwxs+aSKeqmluIVzM0m0kB7xQjKS6qPfd0b2ZoqQ==} + hasBin: true + + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + + mylas@2.1.13: + resolution: {integrity: sha512-+MrqnJRtxdF+xngFfUUkIMQrUUL0KsxbADUkn23Z/4ibGg192Q+z+CQyiYwvWTsYjJygmMR8+w3ZDa98Zh6ESg==} + engines: {node: '>=12.0.0'} + + mysql2@3.11.0: + resolution: {integrity: sha512-J9phbsXGvTOcRVPR95YedzVSxJecpW5A5+cQ57rhHIFXteTP10HCs+VBjS7DHIKfEaI1zQ5tlVrquCd64A6YvA==} + engines: {node: '>= 8.0'} + + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + + named-placeholders@1.1.3: + resolution: {integrity: sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==} + engines: {node: '>=12.0.0'} + + nan@2.20.0: + resolution: {integrity: sha512-bk3gXBZDGILuuo/6sKtr0DQmSThYHLtNCdSdXk9YkxD/jK6X2vmCyyXBBxyqZ4XcnzTyYEAThfX3DCEnLf6igw==} + + nanoclone@0.2.1: + resolution: {integrity: sha512-wynEP02LmIbLpcYw8uBKpcfF6dmg2vcpKqxeH5UcoKEYdExslsdUA4ugFauuaeYdTB76ez6gJW8XAZ6CgkXYxA==} + + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + + napi-postinstall@0.2.4: + resolution: {integrity: sha512-ZEzHJwBhZ8qQSbknHqYcdtQVr8zUgGyM/q6h6qAyhtyVMNrSgDhrC4disf03dYW0e+czXyLnZINnCTEkWy0eJg==} + engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + hasBin: true + + native-duplexpair@1.0.0: + resolution: {integrity: sha512-E7QQoM+3jvNtlmyfqRZ0/U75VFgCls+fSkbml2MpgWkWyz3ox8Y58gNhfuziuQYGNNQAbFZJQck55LHCnCK6CA==} + + natural-compare@1.4.0: + resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + + negotiator@1.0.0: + resolution: {integrity: sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==} + engines: {node: '>= 0.6'} + + neo-async@2.6.2: + resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + + nice-grpc-client-middleware-retry@3.1.11: + resolution: {integrity: sha512-xW/imz/kNG2g0DwTfH2eYEGrg1chSLrXtvGp9fg2qkhTgGFfAS/Pq3+t+9G8KThcC4hK/xlEyKvZWKk++33S6A==} + + nice-grpc-common@2.0.2: + resolution: {integrity: sha512-7RNWbls5kAL1QVUOXvBsv1uO0wPQK3lHv+cY1gwkTzirnG1Nop4cBJZubpgziNbaVc/bl9QJcyvsf/NQxa3rjQ==} + + nice-grpc@2.1.12: + resolution: {integrity: sha512-J1n4Wg+D3IhRhGQb+iqh2OpiM0GzTve/kf2lnlW4S+xczmIEd0aHUDV1OsJ5a3q8GSTqJf+s4Rgg1M8uJltarw==} + + nice-try@1.0.5: + resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==} + + no-case@2.3.2: + resolution: {integrity: sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==} + + no-case@3.0.4: + resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + + nock@14.0.1: + resolution: {integrity: sha512-IJN4O9pturuRdn60NjQ7YkFt6Rwei7ZKaOwb1tvUIIqTgeD0SDDAX3vrqZD4wcXczeEy/AsUXxpGpP/yHqV7xg==} + engines: {node: '>=18.20.0 <20 || >=20.12.1'} + + node-abi@3.54.0: + resolution: {integrity: sha512-p7eGEiQil0YUV3ItH4/tBb781L5impVmmx2E9FRKF7d18XXzp4PGT2tdYMFY6wQqgxD0IwNZOiSJ0/K0fSi/OA==} + engines: {node: '>=10'} + + node-abi@3.75.0: + resolution: {integrity: sha512-OhYaY5sDsIka7H7AtijtI9jwGYLyl29eQn/W623DiN/MIv5sUqc4g7BIDThX+gb7di9f6xK02nkp8sdfFWZLTg==} + engines: {node: '>=10'} + + node-abort-controller@3.1.1: + resolution: {integrity: sha512-AGK2yQKIjRuqnc6VkX2Xj5d+QW8xZ87pa1UK6yA6ouUyuxfHuMP6umE5QK7UmTeOAymo+Zx1Fxiuw9rVx8taHQ==} + + node-addon-api@7.1.0: + resolution: {integrity: sha512-mNcltoe1R8o7STTegSOHdnJNN7s5EUvhoS7ShnTHDyOSd+8H+UdWODq6qSv67PjC8Zc5JRT8+oLAMCr0SIXw7g==} + engines: {node: ^16 || ^18 || >= 20} + + node-addon-api@8.3.0: + resolution: {integrity: sha512-8VOpLHFrOQlAH+qA0ZzuGRlALRA6/LVh8QJldbrC4DY0hXoMP0l4Acq8TzFC018HztWiRqyCEj2aTWY2UvnJUg==} + engines: {node: ^18 || ^20 || >= 21} + + node-cleanup@2.1.2: + resolution: {integrity: sha512-qN8v/s2PAJwGUtr1/hYTpNKlD6Y9rc4p8KSmJXyGdYGZsDGKXrGThikLFP9OCHFeLeEpQzPwiAtdIvBLqm//Hw==} + + node-domexception@1.0.0: + resolution: {integrity: sha512-/jKZoMpw0F8GRwl4/eLROPA3cfcXtLApP0QzLmUT/HuPCZWyB7IY9ZrMeKw2O/nFIqPQB3PVM9aYm0F312AXDQ==} + engines: {node: '>=10.5.0'} + deprecated: Use your platform's native DOMException instead + + node-ensure@0.0.0: + resolution: {integrity: sha512-DRI60hzo2oKN1ma0ckc6nQWlHU69RH6xN0sjQTjMpChPfTYvKZdcQFfdYK2RWbJcKyUizSIy/l8OTGxMAM1QDw==} + + node-fetch-h2@2.3.0: + resolution: {integrity: sha512-ofRW94Ab0T4AOh5Fk8t0h8OBWrmjb0SSB20xh1H8YnPV9EJ+f5AMoYSUQ2zgJ4Iq2HAK0I2l5/Nequ8YzFS3Hg==} + engines: {node: 4.x || >=6.0.0} + + node-fetch-native@1.6.6: + resolution: {integrity: sha512-8Mc2HhqPdlIfedsuZoc3yioPuzp6b+L5jRCRY1QzuWZh2EGJVQrGppC6V6cF0bLdbW0+O2YpqCA25aF/1lvipQ==} + + node-fetch@2.7.0: + resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==} + engines: {node: 4.x || >=6.0.0} + peerDependencies: + encoding: ^0.1.0 + peerDependenciesMeta: + encoding: + optional: true + + node-fetch@3.3.2: + resolution: {integrity: sha512-dRB78srN/l6gqWulah9SrxeYnxeddIG30+GOqK/9OlLVyLg3HPnr6SqOWTWOXKRwC2eGYCkZ59NNuSgvSrpgOA==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + + node-forge@1.3.1: + resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} + engines: {node: '>= 6.13.0'} + + node-gyp-build-optional-packages@5.0.7: + resolution: {integrity: sha512-YlCCc6Wffkx0kHkmam79GKvDQ6x+QZkMjFGrIMxgFNILFvGSbCp2fCBC55pGTT9gVaz8Na5CLmxt/urtzRv36w==} + hasBin: true + + node-gyp-build@4.8.4: + resolution: {integrity: sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ==} + hasBin: true + + node-gyp@8.4.1: + resolution: {integrity: sha512-olTJRgUtAb/hOXG0E93wZDs5YiJlgbXxTwQAFHyNlRsXQnYzUaF2aGgujZbw+hR8aF4ZG/rST57bWMWD16jr9w==} + engines: {node: '>= 10.12.0'} + hasBin: true + + node-html-markdown@1.2.0: + resolution: {integrity: sha512-mGA53bSqo7j62PjmMuFPdO0efNT9pqiGYhQTNVCWkY7PdduRIECJF7n7NOrr5cb+d/js1GdYRLpoTYDwawRk6A==} + engines: {node: '>=10.0.0'} + + node-html-parser@5.4.2: + resolution: {integrity: sha512-RaBPP3+51hPne/OolXxcz89iYvQvKOydaqoePpOgXcrOKZhjVIzmpKZz+Hd/RBO2/zN2q6CNJhQzucVz+u3Jyw==} + + node-int64@0.4.0: + resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} + + node-machine-id@1.1.12: + resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} + + node-readfiles@0.2.0: + resolution: {integrity: sha512-SU00ZarexNlE4Rjdm83vglt5Y9yiQ+XI1XpflWlb7q7UTN1JUItm69xMeiQCTxtTfnzt+83T8Cx+vI2ED++VDA==} + + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + + node-rsa@1.1.1: + resolution: {integrity: sha512-Jd4cvbJMryN21r5HgxQOpMEqv+ooke/korixNNK3mGqfGJmy0M77WDDzo/05969+OkMy3XW1UuZsSmW9KQm7Fw==} + + node-source-walk@7.0.1: + resolution: {integrity: sha512-3VW/8JpPqPvnJvseXowjZcirPisssnBuDikk6JIZ8jQzF7KJQX52iPFX4RYYxLycYH7IbMRSPUOga/esVjy5Yg==} + engines: {node: '>=18'} + + node-ssh@13.2.0: + resolution: {integrity: sha512-7vsKR2Bbs66th6IWCy/7SN4MSwlVt+G6QrHB631BjRUM8/LmvDugtYhi0uAmgvHS/+PVurfNBOmELf30rm0MZg==} + engines: {node: '>= 10'} + + node-stdlib-browser@1.3.1: + resolution: {integrity: sha512-X75ZN8DCLftGM5iKwoYLA3rjnrAEs97MkzvSd4q2746Tgpg8b8XWiBGiBG4ZpgcAqBgtgPHTiAc8ZMCvZuikDw==} + engines: {node: '>=10'} + + nodemailer@6.9.9: + resolution: {integrity: sha512-dexTll8zqQoVJEZPwQAKzxxtFn0qTnjdQTchoU6Re9BUUGBJiOy3YMn/0ShTW6J5M0dfQ1NeDeRTTl4oIWgQMA==} + engines: {node: '>=6.0.0'} + + nodemon@3.0.1: + resolution: {integrity: sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==} + engines: {node: '>=10'} + hasBin: true + + nopt@1.0.10: + resolution: {integrity: sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==} + hasBin: true + + nopt@5.0.0: + resolution: {integrity: sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==} + engines: {node: '>=6'} + hasBin: true + + nopt@6.0.0: + resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + normalize-path@3.0.0: + resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} + engines: {node: '>=0.10.0'} + + normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + + normalize-wheel-es@1.2.0: + resolution: {integrity: sha512-Wj7+EJQ8mSuXr2iWfnujrimU35R2W4FAErEyTmJoJ7ucwTn2hOUSsRehMb5RSYkxXGTM7Y9QpvPmp++w5ftoJw==} + + npm-normalize-package-bin@4.0.0: + resolution: {integrity: sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==} + engines: {node: ^18.17.0 || >=20.5.0} + + npm-run-all2@7.0.2: + resolution: {integrity: sha512-7tXR+r9hzRNOPNTvXegM+QzCuMjzUIIq66VDunL6j60O4RrExx32XUhlrS7UK4VcdGw5/Wxzb3kfNcFix9JKDA==} + engines: {node: ^18.17.0 || >=20.5.0, npm: '>= 9'} + hasBin: true + + npm-run-path@2.0.2: + resolution: {integrity: sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==} + engines: {node: '>=4'} + + npm-run-path@4.0.1: + resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} + engines: {node: '>=8'} + + npm-run-path@6.0.0: + resolution: {integrity: sha512-9qny7Z9DsQU8Ou39ERsPU4OZQlSTP47ShQzuKZ6PRXpYLtIFgl/DEBYEXKlvcEa+9tHVcK8CF81Y2V72qaZhWA==} + engines: {node: '>=18'} + + npmlog@6.0.2: + resolution: {integrity: sha512-/vBvz5Jfr9dT/aFWd0FIRf+T/Q2WBsLENygUaFUqstqsycmZAP/t5BvFJTK0viFmSUxiUKTUplWy5vt+rvKIxg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + deprecated: This package is no longer supported. + + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + + nub@0.0.0: + resolution: {integrity: sha512-dK0Ss9C34R/vV0FfYJXuqDAqHlaW9fvWVufq9MmGF2umCuDbd5GRfRD9fpi/LiM0l4ZXf8IBB+RYmZExqCrf0w==} + + number-allocator@1.0.14: + resolution: {integrity: sha512-OrL44UTVAvkKdOdRQZIJpLkAdjXGTRda052sN4sO77bKEzYYqWKMBjQvrJFzqygI99gL6Z4u2xctPW1tB8ErvA==} + + nwsapi@2.2.7: + resolution: {integrity: sha512-ub5E4+FBPKwAZx0UwIQOjYWGHTEq5sPqHQNRN8Z9e4A7u3Tj1weLJsL59yH9vmvqEtBHaOmT6cYQKIZOxp35FQ==} + + nypm@0.5.4: + resolution: {integrity: sha512-X0SNNrZiGU8/e/zAB7sCTtdxWTMSIO73q+xuKgglm2Yvzwlo8UoC5FNySQFCvl84uPaeADkqHUZUkWy4aH4xOA==} + engines: {node: ^14.16.0 || >=16.10.0} + hasBin: true + + oas-kit-common@1.0.8: + resolution: {integrity: sha512-pJTS2+T0oGIwgjGpw7sIRU8RQMcUoKCDWFLdBqKB2BNmGpbBMH2sdqAaOXUg8OzonZHU0L7vfJu1mJFEiYDWOQ==} + + oas-linter@3.2.2: + resolution: {integrity: sha512-KEGjPDVoU5K6swgo9hJVA/qYGlwfbFx+Kg2QB/kd7rzV5N8N5Mg6PlsoCMohVnQmo+pzJap/F610qTodKzecGQ==} + + oas-resolver@2.5.6: + resolution: {integrity: sha512-Yx5PWQNZomfEhPPOphFbZKi9W93CocQj18NlD2Pa4GWZzdZpSJvYwoiuurRI7m3SpcChrnO08hkuQDL3FGsVFQ==} + hasBin: true + + oas-schema-walker@1.1.5: + resolution: {integrity: sha512-2yucenq1a9YPmeNExoUa9Qwrt9RFkjqaMAA1X+U7sbb0AqBeTIdMHky9SQQ6iN94bO5NW0W4TRYXerG+BdAvAQ==} + + oas-validator@5.0.8: + resolution: {integrity: sha512-cu20/HE5N5HKqVygs3dt94eYJfBi0TsZvPVXDhbXQHiEityDN+RROTleefoKRKKJ9dFAF2JBkDHgvWj0sjKGmw==} + + oauth-1.0a@2.2.6: + resolution: {integrity: sha512-6bkxv3N4Gu5lty4viIcIAnq5GbxECviMBeKR3WX/q87SPQ8E8aursPZUtsXDnxCs787af09WPRBLqYrf/lwoYQ==} + + oauth4webapi@3.5.1: + resolution: {integrity: sha512-txg/jZQwcbaF7PMJgY7aoxc9QuCxHVFMiEkDIJ60DwDz3PbtXPQnrzo+3X4IRYGChIwWLabRBRpf1k9hO9+xrQ==} + + object-assign@4.1.1: + resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} + engines: {node: '>=0.10.0'} + + object-hash@3.0.0: + resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} + engines: {node: '>= 6'} + + object-inspect@1.13.1: + resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + + object-inspect@1.13.4: + resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} + engines: {node: '>= 0.4'} + + object-is@1.1.6: + resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} + engines: {node: '>= 0.4'} + + object-keys@1.1.1: + resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} + engines: {node: '>= 0.4'} + + object-sizeof@2.6.5: + resolution: {integrity: sha512-Mu3udRqIsKpneKjIEJ2U/s1KmEgpl+N6cEX1o+dDl2aZ+VW5piHqNgomqAk5YMsDoSkpcA8HnIKx1eqGTKzdfw==} + + object.assign@4.1.5: + resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} + engines: {node: '>= 0.4'} + + object.assign@4.1.7: + resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==} + engines: {node: '>= 0.4'} + + object.fromentries@2.0.8: + resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} + engines: {node: '>= 0.4'} + + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} + engines: {node: '>= 0.4'} + + object.values@1.2.1: + resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} + engines: {node: '>= 0.4'} + + obuf@1.1.2: + resolution: {integrity: sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==} + + ohash@1.1.6: + resolution: {integrity: sha512-TBu7PtV8YkAZn0tSxobKY2n2aAQva936lhRrj6957aDaCf9IEtqsKbgMzXE/F/sjqYOwmrukeORHNLe5glk7Cg==} + + ohash@2.0.11: + resolution: {integrity: sha512-RdR9FQrFwNBNXAr4GixM8YaRZRJ5PUWbKYbE5eOsrwAjJW0q2REGcf79oYPsLyskQCZG1PLN+S/K1V00joZAoQ==} + + ollama@0.5.16: + resolution: {integrity: sha512-OEbxxOIUZtdZgOaTPAULo051F5y+Z1vosxEYOoABPnQKeW7i4O8tJNlxCB+xioyoorVqgjkdj+TA1f1Hy2ug/w==} + + on-exit-leak-free@2.1.2: + resolution: {integrity: sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA==} + engines: {node: '>=14.0.0'} + + on-finished@2.4.1: + resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} + engines: {node: '>= 0.8'} + + on-headers@1.1.0: + resolution: {integrity: sha512-737ZY3yNnXy37FHkQxPzt4UZ2UWPWiCZWLvFZ4fu5cueciegX0zGPnrlY6bwRg4FdQOe9YU8MkmJwGhoMybl8A==} + engines: {node: '>= 0.8'} + + once@1.4.0: + resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} + + one-time@1.0.0: + resolution: {integrity: sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g==} + + onetime@5.1.2: + resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} + engines: {node: '>=6'} + + ono@7.1.3: + resolution: {integrity: sha512-9jnfVriq7uJM4o5ganUY54ntUm+5EK21EGaQ5NWnkWg3zz5ywbbonlBguRcnmF1/HDiIe3zxNxXcO1YPBmPcQQ==} + + open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + + open@8.4.0: + resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==} + engines: {node: '>=12'} + + openai@5.12.2: + resolution: {integrity: sha512-xqzHHQch5Tws5PcKR2xsZGX9xtch+JQFz5zb14dGqlshmmDAFBFEWmeIpf7wVqWV+w7Emj7jRgkNJakyKE0tYQ==} + hasBin: true + peerDependencies: + ws: '>=8.17.1' + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true + + openapi-sampler@1.5.1: + resolution: {integrity: sha512-tIWIrZUKNAsbqf3bd9U1oH6JEXo8LNYuDlXw26By67EygpjT+ArFnsxxyTMjFWRfbqo5ozkvgSQDK69Gd8CddA==} + + openapi-types@12.1.3: + resolution: {integrity: sha512-N4YtSYJqghVu4iek2ZUvcN/0aqH1kRDuNqzcycDxhOUpg7GdvLa2F3DgS6yBNhInhv2r/6I0Flkn7CqL8+nIcw==} + + openid-client@6.5.0: + resolution: {integrity: sha512-fAfYaTnOYE2kQCqEJGX9KDObW2aw7IQy4jWpU/+3D3WoCFLbix5Hg6qIPQ6Js9r7f8jDUmsnnguRNCSw4wU/IQ==} + + option@0.2.4: + resolution: {integrity: sha512-pkEqbDyl8ou5cpq+VsnQbe/WlEy5qS7xPzMS1U55OCG9KPvwFD46zDbxQIj3egJSFc3D+XhYOPUzz49zQAVy7A==} + + optionator@0.8.3: + resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} + engines: {node: '>= 0.8.0'} + + optionator@0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + os-browserify@0.3.0: + resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} + + ospath@1.2.2: + resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + + otpauth@9.1.1: + resolution: {integrity: sha512-XhimxmkREwf6GJvV4svS9OVMFJ/qRGz+QBEGwtW5OMf9jZlx9yw25RZMXdrO6r7DHgfIaETJb1lucZXZtn3jgw==} + + otplib@12.0.1: + resolution: {integrity: sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==} + + outvariant@1.4.3: + resolution: {integrity: sha512-+Sl2UErvtsoajRDKCE5/dBz4DIvHXQQnAxtQTF04OJxY0+DyZXSo5P5Bb7XYWOh81syohlYL24hbDwxedPUJCA==} + + own-keys@1.0.1: + resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==} + engines: {node: '>= 0.4'} + + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + + p-debounce@2.1.0: + resolution: {integrity: sha512-M9bMt62TTnozdZhqFgs+V7XD2MnuKCaz+7fZdlu2/T7xruI3uIE5CicQ0vx1hV7HIUYF0jF+4/R1AgfOkl74Qw==} + engines: {node: '>=6'} + + p-finally@1.0.0: + resolution: {integrity: sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==} + engines: {node: '>=4'} + + p-lazy@3.1.0: + resolution: {integrity: sha512-sCJn0Cdahs6G6SX9+DUihVFUhrzDEduzE5xeViVBGtoqy5dBWko7W8T6Kk6TjR2uevRXJO7CShfWrqdH5s3w3g==} + engines: {node: '>=8'} + + p-limit@2.3.0: + resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} + engines: {node: '>=6'} + + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + + p-locate@4.1.0: + resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} + engines: {node: '>=8'} + + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + + p-map@4.0.0: + resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} + engines: {node: '>=10'} + + p-queue@6.6.2: + resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} + engines: {node: '>=8'} + + p-retry@4.6.2: + resolution: {integrity: sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==} + engines: {node: '>=8'} + + p-timeout@3.2.0: + resolution: {integrity: sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==} + engines: {node: '>=8'} + + p-try@2.2.0: + resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} + engines: {node: '>=6'} + + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + + param-case@2.1.1: + resolution: {integrity: sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==} + + param-case@3.0.4: + resolution: {integrity: sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==} + + parent-module@1.0.1: + resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} + engines: {node: '>=6'} + + parse-asn1@5.1.7: + resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} + engines: {node: '>= 0.10'} + + parse-diff@0.11.1: + resolution: {integrity: sha512-Oq4j8LAOPOcssanQkIjxosjATBIEJhCxMCxPhMu+Ci4wdNmAEdx0O+a7gzbR2PyKXgKPvRLIN5g224+dJAsKHA==} + + parse-json@5.2.0: + resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} + engines: {node: '>=8'} + + parse-ms@2.1.0: + resolution: {integrity: sha512-kHt7kzLoS9VBZfUsiKjv43mr91ea+U05EyKkEtqp7vNbHxmaVuEqN7XxeEVnGrMtYOAxGrDElSi96K7EgO1zCA==} + engines: {node: '>=6'} + + parse-ms@4.0.0: + resolution: {integrity: sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw==} + engines: {node: '>=18'} + + parse-passwd@1.0.0: + resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} + engines: {node: '>=0.10.0'} + + parse-srcset@1.0.2: + resolution: {integrity: sha512-/2qh0lav6CmI15FzA3i/2Bzk2zCgQhGMkvhOhKNcBVQ1ldgpbfiNTVslmooUmWJcADi1f1kIeynbDRVzNlfR6Q==} + + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5-htmlparser2-tree-adapter@7.0.0: + resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + + parse5@7.1.2: + resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + + parseley@0.12.1: + resolution: {integrity: sha512-e6qHKe3a9HWr0oMRVDTRhKce+bRO8VGQR3NyVwcjwrbhMmFCX9KszEV35+rn4AdilFAq9VPxP/Fe1wC9Qjd2lw==} + + parseurl@1.3.3: + resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} + engines: {node: '>= 0.8'} + + pascal-case@3.1.2: + resolution: {integrity: sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==} + + path-browserify@1.0.1: + resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} + + path-case@3.0.4: + resolution: {integrity: sha512-qO4qCFjXqVTrcbPt/hQfhTQ+VhFsqNKOPtytgNKkKxSoEp3XPUQ8ObFuePylOIok5gjn69ry8XiULxCwot3Wfg==} + + path-exists@4.0.0: + resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} + engines: {node: '>=8'} + + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + + path-key@2.0.1: + resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==} + engines: {node: '>=4'} + + path-key@3.1.1: + resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} + engines: {node: '>=8'} + + path-key@4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} + engines: {node: '>=12'} + + path-parse@1.0.7: + resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} + + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} + + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + + path-to-regexp@8.2.0: + resolution: {integrity: sha512-TdrF7fW9Rphjq4RjrW0Kp2AW0Ahwu9sRGTkS6bvDi0SCwZlEZYmcfDbEsTz8RVk0EHIS/Vd1bv3JhG+1xZuAyQ==} + engines: {node: '>=16'} + + path-type@4.0.0: + resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} + engines: {node: '>=8'} + + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + pause-stream@0.0.11: + resolution: {integrity: sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A==} + + pbkdf2@3.1.3: + resolution: {integrity: sha512-wfRLBZ0feWRhCIkoMB6ete7czJcnNnqRpcoWQBLqatqXXmelSRqfdDK4F3u9T2s2cXas/hQJcryI/4lAL+XTlA==} + engines: {node: '>=0.12'} + + pdf-parse@1.1.1: + resolution: {integrity: sha512-v6ZJ/efsBpGrGGknjtq9J/oC8tZWq0KWL5vQrk2GlzLEQPUDB1ex+13Rmidl1neNN358Jn9EHZw5y07FFtaC7A==} + engines: {node: '>=6.8.1'} + + pdfjs-dist@5.3.31: + resolution: {integrity: sha512-EhPdIjNX0fcdwYQO+e3BAAJPXt+XI29TZWC7COhIXs/K0JHcUt1Gdz1ITpebTwVMFiLsukdUZ3u0oTO7jij+VA==} + engines: {node: '>=20.16.0 || >=22.3.0'} + + peberminta@0.9.0: + resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + + peek-readable@4.1.0: + resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==} + engines: {node: '>=8'} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + + perfect-debounce@1.0.0: + resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} + + perfect-scrollbar@1.5.5: + resolution: {integrity: sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==} + + performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + + pg-cloudflare@1.1.1: + resolution: {integrity: sha512-xWPagP/4B6BgFO+EKz3JONXv3YDgvkbVrGw2mTo3D6tVDQRh1e7cqVGvyR3BE+eQgAvx1XhW/iEASj4/jCWl3Q==} + + pg-connection-string@2.6.4: + resolution: {integrity: sha512-v+Z7W/0EO707aNMaAEfiGnGL9sxxumwLl2fJvCQtMn9Fxsg+lPpPkdcyBSv/KFgpGdYkMfn+EI1Or2EHjpgLCA==} + + pg-int8@1.0.1: + resolution: {integrity: sha512-WCtabS6t3c8SkpDBUlb1kjOs7l66xsGdKpIPZsg4wR+B3+u9UAum2odSsF9tnvxg80h4ZxLWMy4pRjOsFIqQpw==} + engines: {node: '>=4.0.0'} + + pg-minify@1.6.5: + resolution: {integrity: sha512-u0UE8veaCnMfJmoklqneeBBopOAPG3/6DHqGVHYAhz8DkJXh9dnjPlz25fRxn4e+6XVzdOp7kau63Rp52fZ3WQ==} + engines: {node: '>=14.0.0'} + + pg-numeric@1.0.2: + resolution: {integrity: sha512-BM/Thnrw5jm2kKLE5uJkXqqExRUY/toLHda65XgFTBTFYZyopbKjBe29Ii3RbkvlsMoFwD+tHeGaCjjv0gHlyw==} + engines: {node: '>=4'} + + pg-pool@3.6.2: + resolution: {integrity: sha512-Htjbg8BlwXqSBQ9V8Vjtc+vzf/6fVUuak/3/XXKA9oxZprwW3IMDQTGHP+KDmVL7rtd+R1QjbnCFPuTHm3G4hg==} + peerDependencies: + pg: '>=8.0' + + pg-promise@11.9.1: + resolution: {integrity: sha512-qvMmyDvWd64X0a25hCuWV40GLMbgeYf4z7ZmzxQqGHtUIlzMtxcMtaBHAMr7XVOL62wFv2ZVKW5pFruD/4ZAOg==} + engines: {node: '>=14.0'} + + pg-protocol@1.6.1: + resolution: {integrity: sha512-jPIlvgoD63hrEuihvIg+tJhoGjUsLPn6poJY9N5CnlPd91c2T18T/9zBtLxZSb1EhYxBRoZJtzScCaWlYLtktg==} + + pg-types@2.2.0: + resolution: {integrity: sha512-qTAAlrEsl8s4OiEQY69wDvcMIdQN6wdz5ojQiOy6YRMuynxenON0O5oCpJI6lshc6scgAY8qvJ2On/p+CXY0GA==} + engines: {node: '>=4'} + + pg-types@4.0.2: + resolution: {integrity: sha512-cRL3JpS3lKMGsKaWndugWQoLOCoP+Cic8oseVcbr0qhPzYD5DWXK+RZ9LY9wxRf7RQia4SCwQlXk0q6FCPrVng==} + engines: {node: '>=10'} + + pg@8.12.0: + resolution: {integrity: sha512-A+LHUSnwnxrnL/tZ+OLfqR1SxLN3c/pgDztZ47Rpbsd4jUytsTtwQo/TLPRzPJMp/1pbhYVhH9cuSZLAajNfjQ==} + engines: {node: '>= 8.0.0'} + peerDependencies: + pg-native: '>=3.0.1' + peerDependenciesMeta: + pg-native: + optional: true + + pgpass@1.0.5: + resolution: {integrity: sha512-FdW9r/jQZhSeohs1Z3sI1yxFQNFvMcnmfuj4WBMUTxOrAyLMaTcE1aAMBiTlbMNaXvBCQuVi0R7hd8udDSP7ug==} + + picocolors@1.0.1: + resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + picomatch@2.3.1: + resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} + engines: {node: '>=8.6'} + + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + + picomatch@4.0.3: + resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} + engines: {node: '>=12'} + + pidtree@0.6.0: + resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} + engines: {node: '>=0.10'} + hasBin: true + + pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + + pinia@2.2.4: + resolution: {integrity: sha512-K7ZhpMY9iJ9ShTC0cR2+PnxdQRuwVIsXDO/WIEV/RnMC/vmSoKDTKW/exNQYPI+4ij10UjXqdNiEHwn47McANQ==} + peerDependencies: + '@vue/composition-api': ^1.4.0 + typescript: 5.9.2 + vue: ^2.6.14 || ^3.3.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + typescript: + optional: true + + pino-abstract-transport@2.0.0: + resolution: {integrity: sha512-F63x5tizV6WCh4R6RHyi2Ml+M70DNRXt/+HANowMflpgGFMAym/VKm6G7ZOQRjqN7XbGxK1Lg9t6ZrtzOaivMw==} + + pino-std-serializers@7.0.0: + resolution: {integrity: sha512-e906FRY0+tV27iq4juKzSYPbUj2do2X2JX4EzSca1631EB2QJQUqGbDuERal7LCtOpxl6x3+nvo9NPZcmjkiFA==} + + pino@9.7.0: + resolution: {integrity: sha512-vnMCM6xZTb1WDmLvtG2lE/2p+t9hDEIvTWJsu6FejkE62vB7gDhvzrpFR4Cw2to+9JNQxVnkAKVPA1KPB98vWg==} + hasBin: true + + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} + engines: {node: '>= 6'} + + pkce-challenge@5.0.0: + resolution: {integrity: sha512-ueGLflrrnvwB3xuo/uGob5pd5FN7l0MsLf0Z87o/UQmRtwjvfylfc9MurIxRAWywCYTgrvpXBcqjV4OfCYGCIQ==} + engines: {node: '>=16.20.0'} + + pkg-dir@4.2.0: + resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} + engines: {node: '>=8'} + + pkg-dir@5.0.0: + resolution: {integrity: sha512-NPE8TDbzl/3YQYY7CSS228s3g2ollTFnc+Qi3tqmqJp9Vg2ovUpixcJEo2HJScN2Ez+kEaal6y70c0ehqJBJeA==} + engines: {node: '>=10'} + + pkg-types@1.3.1: + resolution: {integrity: sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==} + + pkg-types@2.1.0: + resolution: {integrity: sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==} + + playwright-core@1.54.2: + resolution: {integrity: sha512-n5r4HFbMmWsB4twG7tJLDN9gmBUeSPcsBZiWSE4DnYz9mJMAFqr2ID7+eGC9kpEnxExJ1epttwR59LEWCk8mtA==} + engines: {node: '>=18'} + hasBin: true + + playwright@1.54.2: + resolution: {integrity: sha512-Hu/BMoA1NAdRUuulyvQC0pEqZ4vQbGfn8f7wPXcnqQmM+zct9UliKxsIkLNmz/ku7LElUNqmaiv1TG/aL5ACsw==} + engines: {node: '>=18'} + hasBin: true + + plimit-lit@1.4.1: + resolution: {integrity: sha512-bK14ePAod0XWhXwjT6XvYfjcQ9PbCUkZXnDCAKRMZTJCaDIV9VFya1S/I+3WSbpdR8uBhCDh8TS4lQ/JQvhNFA==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + polished@4.2.2: + resolution: {integrity: sha512-Sz2Lkdxz6F2Pgnpi9U5Ng/WdWAUZxmHrNPoVlm3aAemxoy2Qy7LGjQg4uf8qKelDAUW94F4np3iH2YPf2qefcQ==} + engines: {node: '>=10'} + + possible-typed-array-names@1.0.0: + resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} + engines: {node: '>= 0.4'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + + postcss-html@1.8.0: + resolution: {integrity: sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==} + engines: {node: ^12 || >=14} + + postcss-import@15.1.0: + resolution: {integrity: sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==} + engines: {node: '>=14.0.0'} + peerDependencies: + postcss: ^8.0.0 + + postcss-js@4.0.1: + resolution: {integrity: sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==} + engines: {node: ^12 || ^14 || >= 16} + peerDependencies: + postcss: ^8.4.21 + + postcss-load-config@4.0.2: + resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} + engines: {node: '>= 14'} + peerDependencies: + postcss: '>=8.0.9' + ts-node: '>=9.0.0' + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + + postcss-load-config@6.0.1: + resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} + engines: {node: '>= 18'} + peerDependencies: + jiti: '>=1.21.0' + postcss: '>=8.0.9' + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + jiti: + optional: true + postcss: + optional: true + tsx: + optional: true + yaml: + optional: true + + postcss-media-query-parser@0.2.3: + resolution: {integrity: sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==} + + postcss-nested@6.0.1: + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + + postcss-resolve-nested-selector@0.1.6: + resolution: {integrity: sha512-0sglIs9Wmkzbr8lQwEyIzlDOOC9bGmfVKcJTaxv3vMmd3uo4o4DerC3En0bnmgceeql9BfC8hRkp7cg0fjdVqw==} + + postcss-safe-parser@6.0.0: + resolution: {integrity: sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.3.3 + + postcss-safe-parser@7.0.1: + resolution: {integrity: sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==} + engines: {node: '>=18.0'} + peerDependencies: + postcss: ^8.4.31 + + postcss-scss@4.0.9: + resolution: {integrity: sha512-AjKOeiwAitL/MXxQW2DliT28EKukvvbEWx3LBmJIRN8KfBGZbRTxNYW0kSqi1COiTZ57nZ9NW06S6ux//N1c9A==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.4.29 + + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + engines: {node: '>=4'} + + postcss-selector-parser@7.1.0: + resolution: {integrity: sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==} + engines: {node: '>=4'} + + postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + + postcss-values-parser@6.0.2: + resolution: {integrity: sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw==} + engines: {node: '>=10'} + peerDependencies: + postcss: ^8.2.9 + + postcss@8.4.31: + resolution: {integrity: sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + + postcss@8.5.6: + resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} + engines: {node: ^10 || ^12 || >=14} + + postgres-array@2.0.0: + resolution: {integrity: sha512-VpZrUqU5A69eQyW2c5CA1jtLecCsN2U/bD6VilrFDWq5+5UIEVO7nazS3TEcHf1zuPYO/sqGvUvW62g86RXZuA==} + engines: {node: '>=4'} + + postgres-array@3.0.2: + resolution: {integrity: sha512-6faShkdFugNQCLwucjPcY5ARoW1SlbnrZjmGl0IrrqewpvxvhSLHimCVzqeuULCbG0fQv7Dtk1yDbG3xv7Veog==} + engines: {node: '>=12'} + + postgres-bytea@1.0.0: + resolution: {integrity: sha512-xy3pmLuQqRBZBXDULy7KbaitYqLcmxigw14Q5sj8QBVLqEwXfeybIKVWiqAXTlcvdvb0+xkOtDbfQMOf4lST1w==} + engines: {node: '>=0.10.0'} + + postgres-bytea@3.0.0: + resolution: {integrity: sha512-CNd4jim9RFPkObHSjVHlVrxoVQXz7quwNFpz7RY1okNNme49+sVyiTvTRobiLV548Hx/hb1BG+iE7h9493WzFw==} + engines: {node: '>= 6'} + + postgres-date@1.0.7: + resolution: {integrity: sha512-suDmjLVQg78nMK2UZ454hAG+OAW+HQPZ6n++TNDUX+L0+uUlLywnoxJKDou51Zm+zTCjrCl0Nq6J9C5hP9vK/Q==} + engines: {node: '>=0.10.0'} + + postgres-date@2.1.0: + resolution: {integrity: sha512-K7Juri8gtgXVcDfZttFKVmhglp7epKb1K4pgrkLxehjqkrgPhfG6OO8LHLkfaqkbpjNRnra018XwAr1yQFWGcA==} + engines: {node: '>=12'} + + postgres-interval@1.2.0: + resolution: {integrity: sha512-9ZhXKM/rw350N1ovuWHbGxnGh/SNJ4cnxHiM0rxE4VN41wsg8P8zWn9hv/buK00RP4WvlOyr/RBDiptyxVbkZQ==} + engines: {node: '>=0.10.0'} + + postgres-interval@3.0.0: + resolution: {integrity: sha512-BSNDnbyZCXSxgA+1f5UU2GmwhoI0aU5yMxRGO8CdFEcY2BQF9xm/7MqKnYoM1nJDk8nONNWDk9WeSmePFhQdlw==} + engines: {node: '>=12'} + + postgres-range@1.1.4: + resolution: {integrity: sha512-i/hbxIE9803Alj/6ytL7UHQxRvZkI9O4Sy+J3HGc4F4oo/2eQAjTSNJ0bfxyse3bH0nuVesCk+3IRLaMtG3H6w==} + + posthog-node@3.2.1: + resolution: {integrity: sha512-ofNX3TPfZPlWErVc2EDk66cIrfp9EXeKBsXFxf8ISXK57b10ANwRnKAlf5rQjxjRKqcUWmV0d3ZfOeVeYracMw==} + engines: {node: '>=15.0.0'} + + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + + precinct@12.2.0: + resolution: {integrity: sha512-NFBMuwIfaJ4SocE9YXPU/n4AcNSoFMVFjP72nvl3cx69j/ke61/hPOWFREVxLkFhhEGnA8ZuVfTqJBa+PK3b5w==} + engines: {node: '>=18'} + hasBin: true + + prelude-ls@1.1.2: + resolution: {integrity: sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==} + engines: {node: '>= 0.8.0'} + + prelude-ls@1.2.1: + resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} + engines: {node: '>= 0.8.0'} + + pretender@3.4.7: + resolution: {integrity: sha512-jkPAvt1BfRi0RKamweJdEcnjkeu7Es8yix3bJ+KgBC5VpG/Ln4JE3hYN6vJym4qprm8Xo5adhWpm3HCoft1dOw==} + + prettier@3.3.3: + resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} + engines: {node: '>=14'} + hasBin: true + + prettier@3.6.2: + resolution: {integrity: sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==} + engines: {node: '>=14'} + hasBin: true + + pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + + pretty-format@27.5.1: + resolution: {integrity: sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ==} + engines: {node: ^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0} + + pretty-format@29.5.0: + resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + + pretty-ms@7.0.1: + resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==} + engines: {node: '>=10'} + + pretty-ms@9.2.0: + resolution: {integrity: sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg==} + engines: {node: '>=18'} + + prismjs@1.29.0: + resolution: {integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q==} + engines: {node: '>=6'} + + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + + process-warning@5.0.0: + resolution: {integrity: sha512-a39t9ApHNx2L4+HBnQKqxxHNs1r7KF+Intd8Q/g1bUh6q0WIp9voPXJ/x0j+ZL45KF1pJd9+q2jLIRMfvEshkA==} + + process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + + prom-client@15.1.3: + resolution: {integrity: sha512-6ZiOBfCywsD4k1BN9IX0uZhF+tJkV8q8llP64G5Hajs4JOeVLPCwpPVcpXy3BwYiUGgyJzsJJQeOIv7+hDSq8g==} + engines: {node: ^16 || ^18 || >=20} + + promise-ftp-common@1.1.5: + resolution: {integrity: sha512-a84F/zM2Z0Ry/ht3nXfV6Ze7BISOQlWrct/YObrluJn8qy2LVeeQ+IJ7jD4bkmM0N2xfXYy5nurz4L1KEj+rJg==} + + promise-ftp@1.3.5: + resolution: {integrity: sha512-v368jPSqzmjjKDIyggulC+dRFcpAOEX7aFdEWkFYQp8Ao3P2N4Y6XnFFdKgK7PtkylwvGQkZR/65HZuzmq0V7A==} + engines: {node: '>=0.11.13'} + peerDependencies: + promise-ftp-common: ^1.1.5 + + promise-inflight@1.0.1: + resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} + peerDependencies: + bluebird: '*' + peerDependenciesMeta: + bluebird: + optional: true + + promise-retry@2.0.1: + resolution: {integrity: sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==} + engines: {node: '>=10'} + + promise@7.3.1: + resolution: {integrity: sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==} + + prompts@2.4.2: + resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} + engines: {node: '>= 6'} + + prop-types@15.8.1: + resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==} + + propagate@2.0.1: + resolution: {integrity: sha512-vGrhOavPSTz4QVNuBNdcNXePNdNMaO1xj9yBeH1ScQPjk/rhg9sSlCXPhMkFuaNNW/syTvYqsnbIJxMBfRbbag==} + engines: {node: '>= 8'} + + proper-lockfile@4.1.2: + resolution: {integrity: sha512-TjNPblN4BwAWMXU8s9AEz4JmQxnD1NNL7bNOY/AKUzyamc379FWASUhc/K1pL2noVb+XmZKLL68cjzLsiOAMaA==} + + properties-reader@2.3.0: + resolution: {integrity: sha512-z597WicA7nDZxK12kZqHr2TcvwNU1GCfA5UwfDY/HDp3hXPoPlb5rlEx9bwGTiJnc0OqbBTkU975jDToth8Gxw==} + engines: {node: '>=14'} + + property-expr@2.0.5: + resolution: {integrity: sha512-IJUkICM5dP5znhCckHSv30Q4b5/JA5enCtkRHYaOVOAocnH/1BQEYTC5NMfT3AVl/iXKdr3aqQbQn9DxyWknwA==} + + proto-list@1.2.4: + resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} + + proto3-json-serializer@2.0.2: + resolution: {integrity: sha512-SAzp/O4Yh02jGdRc+uIrGoe87dkN/XtwxfZ4ZyafJHymd79ozp5VG5nyZ7ygqPM5+cpLDjjGnYFUkngonyDPOQ==} + engines: {node: '>=14.0.0'} + + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} + engines: {node: '>=12.0.0'} + + proxy-addr@2.0.7: + resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} + engines: {node: '>= 0.10'} + + proxy-from-env@1.0.0: + resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + ps-tree@1.2.0: + resolution: {integrity: sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA==} + engines: {node: '>= 0.10'} + hasBin: true + + psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + + pstree.remy@1.1.8: + resolution: {integrity: sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==} + + public-encrypt@4.0.3: + resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} + + pug-attrs@3.0.0: + resolution: {integrity: sha512-azINV9dUtzPMFQktvTXciNAfAuVh/L/JCl0vtPCwvOA21uZrC08K/UnmrL+SXGEVc1FwzjW62+xw5S/uaLj6cA==} + + pug-code-gen@3.0.3: + resolution: {integrity: sha512-cYQg0JW0w32Ux+XTeZnBEeuWrAY7/HNE6TWnhiHGnnRYlCgyAUPoyh9KzCMa9WhcJlJ1AtQqpEYHc+vbCzA+Aw==} + + pug-error@2.1.0: + resolution: {integrity: sha512-lv7sU9e5Jk8IeUheHata6/UThZ7RK2jnaaNztxfPYUY+VxZyk/ePVaNZ/vwmH8WqGvDz3LrNYt/+gA55NDg6Pg==} + + pug-filters@4.0.0: + resolution: {integrity: sha512-yeNFtq5Yxmfz0f9z2rMXGw/8/4i1cCFecw/Q7+D0V2DdtII5UvqE12VaZ2AY7ri6o5RNXiweGH79OCq+2RQU4A==} + + pug-lexer@5.0.1: + resolution: {integrity: sha512-0I6C62+keXlZPZkOJeVam9aBLVP2EnbeDw3An+k0/QlqdwH6rv8284nko14Na7c0TtqtogfWXcRoFE4O4Ff20w==} + + pug-linker@4.0.0: + resolution: {integrity: sha512-gjD1yzp0yxbQqnzBAdlhbgoJL5qIFJw78juN1NpTLt/mfPJ5VgC4BvkoD3G23qKzJtIIXBbcCt6FioLSFLOHdw==} + + pug-load@3.0.0: + resolution: {integrity: sha512-OCjTEnhLWZBvS4zni/WUMjH2YSUosnsmjGBB1An7CsKQarYSWQ0GCVyd4eQPMFJqZ8w9xgs01QdiZXKVjk92EQ==} + + pug-parser@6.0.0: + resolution: {integrity: sha512-ukiYM/9cH6Cml+AOl5kETtM9NR3WulyVP2y4HOU45DyMim1IeP/OOiyEWRr6qk5I5klpsBnbuHpwKmTx6WURnw==} + + pug-runtime@3.0.1: + resolution: {integrity: sha512-L50zbvrQ35TkpHwv0G6aLSuueDRwc/97XdY8kL3tOT0FmhgG7UypU3VztfV/LATAvmUfYi4wNxSajhSAeNN+Kg==} + + pug-strip-comments@2.0.0: + resolution: {integrity: sha512-zo8DsDpH7eTkPHCXFeAk1xZXJbyoTfdPlNR0bK7rpOMuhBYb0f5qUVCO1xlsitYd3w5FQTK7zpNVKb3rZoUrrQ==} + + pug-walk@2.0.0: + resolution: {integrity: sha512-yYELe9Q5q9IQhuvqsZNwA5hfPkMJ8u92bQLIMcsMxf/VADjNtEYptU+inlufAFYcWdHlwNfZOEnOOQrZrcyJCQ==} + + pug@3.0.3: + resolution: {integrity: sha512-uBi6kmc9f3SZ3PXxqcHiUZLmIXgfgWooKWXcwSGwQd2Zi5Rb0bT14+8CJjJgI8AB+nndLaNgHGrcc6bPIB665g==} + + pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + + punycode@1.4.1: + resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + pure-rand@6.0.1: + resolution: {integrity: sha512-t+x1zEHDjBwkDGY5v5ApnZ/utcd4XYDiJsaQQoptTXgUXX95sDg1elCdJghzicm7n2mbCBJ3uYWr6M22SO19rg==} + + pyodide@0.28.0: + resolution: {integrity: sha512-QML/Gh8eu50q5zZKLNpW6rgS0XUdK+94OSL54AUSKV8eJAxgwZrMebqj+CyM0EbF3EUX8JFJU3ryaxBViHammQ==} + engines: {node: '>=18.0.0'} + + python-struct@1.1.3: + resolution: {integrity: sha512-UsI/mNvk25jRpGKYI38Nfbv84z48oiIWwG67DLVvjRhy8B/0aIK+5Ju5WOHgw/o9rnEmbAS00v4rgKFQeC332Q==} + + qrcode.vue@3.3.4: + resolution: {integrity: sha512-ZVPmKZUUqM/wZ19mIhecFJs7mO6KXFiZZmBZyU6wiB2aXZfYc/VpolXakQcKw/9aGFEmSHHVKfgNwyxtw/Q2Sw==} + peerDependencies: + vue: ^3.0.0 + + qs@6.11.0: + resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + engines: {node: '>=0.6'} + + qs@6.11.2: + resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==} + engines: {node: '>=0.6'} + + qs@6.14.0: + resolution: {integrity: sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==} + engines: {node: '>=0.6'} + + quansync@0.2.8: + resolution: {integrity: sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==} + + querystring-es3@0.2.1: + resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} + engines: {node: '>=0.4.x'} + + querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + + queue-lit@1.5.0: + resolution: {integrity: sha512-IslToJ4eiCEE9xwMzq3viOO5nH8sUWUCwoElrhNMozzr9IIt2qqvB4I+uHu/zJTQVqc9R5DFwok4ijNK1pU3fA==} + + queue-microtask@1.2.3: + resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} + + quick-format-unescaped@4.0.4: + resolution: {integrity: sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg==} + + quote-unquote@1.0.0: + resolution: {integrity: sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg==} + + quoted-printable@1.0.1: + resolution: {integrity: sha512-cihC68OcGiQOjGiXuo5Jk6XHANTHl1K4JLk/xlEJRTIXfy19Sg6XzB95XonYgr+1rB88bCpr7WZE7D7AlZow4g==} + hasBin: true + + ramda@0.26.1: + resolution: {integrity: sha512-hLWjpy7EnsDBb0p+Z3B7rPi3GDeRG5ZtiI33kJhTt+ORCd38AbAIjB/9zRIUoeTbE/AVX5ZkU7m6bznsvrf8eQ==} + + random-bytes@1.0.0: + resolution: {integrity: sha512-iv7LhNVO047HzYR3InF6pUcUsPQiHTM1Qal51DcGSuZFBil1aBBWG5eHPNek7bvILMaYJ/8RU1e8w1AMdHmLQQ==} + engines: {node: '>= 0.8'} + + randombytes@2.1.0: + resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} + + randomfill@1.0.4: + resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} + + range-parser@1.2.1: + resolution: {integrity: sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==} + engines: {node: '>= 0.6'} + + raw-body@3.0.0: + resolution: {integrity: sha512-RmkhL8CAyCRPXCE28MMH0z2PNWQBNk2Q09ZdxM9IOOXwxwZbN+qbWaatPkdkWIKL2ZVDImrN/pK5HTRz2PcS4g==} + engines: {node: '>= 0.8'} + + rc9@2.1.2: + resolution: {integrity: sha512-btXCnMmRIBINM2LDZoEmOogIZU7Qe7zn4BpomSKZ/ykbLObuBdvG+mFq11DL6fjH1DRwHhrlgtYWG96bJiC7Cg==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + + react-confetti@6.1.0: + resolution: {integrity: sha512-7Ypx4vz0+g8ECVxr88W9zhcQpbeujJAVqL14ZnXJ3I23mOI9/oBVTQ3dkJhUmB0D6XOtCZEM6N0Gm9PMngkORw==} + engines: {node: '>=10.18'} + peerDependencies: + react: ^16.3.0 || ^17.0.1 || ^18.0.0 + + react-dom@18.2.0: + resolution: {integrity: sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==} + peerDependencies: + react: ^18.2.0 + + react-is@16.13.1: + resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} + + react-is@17.0.2: + resolution: {integrity: sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==} + + react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + + react-tabs@6.0.2: + resolution: {integrity: sha512-aQXTKolnM28k3KguGDBSAbJvcowOQr23A+CUJdzJtOSDOtTwzEaJA+1U4KwhNL9+Obe+jFS7geuvA7ICQPXOnQ==} + peerDependencies: + react: ^18.0.0 + + react@18.2.0: + resolution: {integrity: sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==} + engines: {node: '>=0.10.0'} + + read-cache@1.0.0: + resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} + + read-package-json-fast@4.0.0: + resolution: {integrity: sha512-qpt8EwugBWDw2cgE2W+/3oxC+KTez2uSVR8JU9Q36TXPAGCaozfQUs59v4j4GFpWTaw0i6hAZSvOmu1J0uOEUg==} + engines: {node: ^18.17.0 || >=20.5.0} + + readable-stream@1.1.14: + resolution: {integrity: sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==} + + readable-stream@2.3.7: + resolution: {integrity: sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + + readable-stream@3.6.0: + resolution: {integrity: sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==} + engines: {node: '>= 6'} + + readable-stream@4.4.2: + resolution: {integrity: sha512-Lk/fICSyIhodxy1IDK2HazkeGjSmezAWX2egdtJnYhtzKEsBPJowlI6F6LPb5tqIQILrMbx22S5o3GuJavPusA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-stream@4.5.2: + resolution: {integrity: sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + readable-web-to-node-stream@3.0.2: + resolution: {integrity: sha512-ePeK6cc1EcKLEhJFt/AebMCLL+GgSKhuygrZ/GLaKZYEecIgIECf4UaUuaByiGtzckwR4ain9VzUh95T1exYGw==} + engines: {node: '>=8'} + + readdir-glob@1.1.3: + resolution: {integrity: sha512-v05I2k7xN8zXvPD9N+z/uhXPaj0sUFCe2rcWZIpBsqxfP7xXFQ0tipAd/wjj1YxWyWtUS5IDJpOG82JKt2EAVA==} + + readdirp@4.1.2: + resolution: {integrity: sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==} + engines: {node: '>= 14.18.0'} + + readline-sync@1.4.10: + resolution: {integrity: sha512-gNva8/6UAe8QYepIQH/jQ2qn91Qj0B9sYjMBBs3QOB8F2CXcKgLxQaJRP76sWVRQt+QU+8fAkCbCvjjMFu7Ycw==} + engines: {node: '>= 0.8.0'} + + real-require@0.2.0: + resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} + engines: {node: '>= 12.13.0'} + + recast@0.22.0: + resolution: {integrity: sha512-5AAx+mujtXijsEavc5lWXBPQqrM4+Dl5qNH96N2aNeuJFUzpiiToKPsxQD/zAIJHspz7zz0maX0PCtCTFVlixQ==} + engines: {node: '>= 4'} + + recast@0.23.6: + resolution: {integrity: sha512-9FHoNjX1yjuesMwuthAmPKabxYQdOgihFYmT5ebXfYGBcnqXZf3WOVz+5foEZ8Y83P4ZY6yQD5GMmtV+pgCCAQ==} + engines: {node: '>= 4'} + + rechoir@0.6.2: + resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} + engines: {node: '>= 0.10'} + + redent@3.0.0: + resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} + engines: {node: '>=8'} + + redis-errors@1.2.0: + resolution: {integrity: sha512-1qny3OExCf0UvUV/5wpYKf2YwPcOqXzkwKKSmKHiE6ZMQs5heeE/c8eXK+PNllPvmjgAbfnsbpkGZWy8cBpn9w==} + engines: {node: '>=4'} + + redis-parser@3.0.0: + resolution: {integrity: sha512-DJnGAeenTdpMEH6uAJRK/uiyEIH9WVsUmoLwzudwGJUwZPp80PDBWPHXSAGNPwNvIXAbe7MSUB1zQFugFml66A==} + engines: {node: '>=4'} + + redis@4.6.12: + resolution: {integrity: sha512-41Xuuko6P4uH4VPe5nE3BqXHB7a9lkFL0J29AlxKaIfD6eWO8VO/5PDF9ad2oS+mswMsfFxaM5DlE3tnXT+P8Q==} + + redis@4.6.14: + resolution: {integrity: sha512-GrNg/e33HtsQwNXL7kJT+iNFPSwE1IPmd7wzV3j4f2z0EYxZfZE7FVTmUysgAtqQQtg5NXF5SNLR9OdO/UHOfw==} + + redoc@2.4.0: + resolution: {integrity: sha512-rFlfzFVWS9XJ6aYAs/bHnLhHP5FQEhwAHDBVgwb9L2FqDQ8Hu8rQ1G84iwaWXxZfPP9UWn7JdWkxI6MXr2ZDjw==} + engines: {node: '>=6.9', npm: '>=3.0.0'} + peerDependencies: + core-js: ^3.1.4 + mobx: ^6.0.4 + react: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + react-dom: ^16.8.4 || ^17.0.0 || ^18.0.0 || ^19.0.0 + styled-components: ^4.1.1 || ^5.1.1 || ^6.0.5 + + reflect-metadata@0.2.2: + resolution: {integrity: sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==} + + reflect.getprototypeof@1.0.10: + resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==} + engines: {node: '>= 0.4'} + + reftools@1.1.9: + resolution: {integrity: sha512-OVede/NQE13xBQ+ob5CKd5KyeJYU2YInb1bmV4nRoOfquZPkAkxuOXicSe1PvqIuZZ4kD13sPKBbR7UFDmli6w==} + + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + + regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + + regexp.escape@2.0.1: + resolution: {integrity: sha512-JItRb4rmyTzmERBkAf6J87LjDPy/RscIwmaJQ3gsFlAzrmZbZU8LwBw5IydFZXW9hqpgbPlGbMhtpqtuAhMgtg==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} + engines: {node: '>= 0.4'} + + regexp.prototype.flags@1.5.4: + resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} + engines: {node: '>= 0.4'} + + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true + + reinterval@1.1.0: + resolution: {integrity: sha512-QIRet3SYrGp0HUHO88jVskiG6seqUGC5iAG7AwI/BV4ypGcuqk9Du6YQBUOUqm9c8pw1eyLoIaONifRua1lsEQ==} + + reka-ui@2.2.1: + resolution: {integrity: sha512-oLHiyBn6gTIQGnTnv8G5LQuFp9j8HuUNl0qdnW3XPhFb/07hrxzFpjo2kt/jxOZive+n/XWDbOjSj2h9Hih3qA==} + peerDependencies: + vue: '>= 3.2.0' + + relateurl@0.2.7: + resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} + engines: {node: '>= 0.10'} + + remove-trailing-slash@0.1.1: + resolution: {integrity: sha512-o4S4Qh6L2jpnCy83ysZDau+VORNvnFw07CKSAymkd6ICNVEPisMyzlc00KlvvicsxKck94SEwhDnMNdICzO+tA==} + + replace-in-file@6.3.5: + resolution: {integrity: sha512-arB9d3ENdKva2fxRnSjwBEXfK1npgyci7ZZuwysgAp7ORjHSyxz6oqIjTEv8R0Ydl4Ll7uOAZXL4vbkhGIizCg==} + engines: {node: '>=10'} + hasBin: true + + replacestream@4.0.3: + resolution: {integrity: sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==} + + request-progress@3.0.0: + resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + + require-directory@2.1.1: + resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} + engines: {node: '>=0.10.0'} + + require-from-string@2.0.2: + resolution: {integrity: sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==} + engines: {node: '>=0.10.0'} + + require-in-the-middle@7.4.0: + resolution: {integrity: sha512-X34iHADNbNDfr6OTStIAHWSAvvKQRYgLO6duASaVf7J2VA3lvmNYboAHOuLC2huav1IwgZJtyEcJCKVzFxOSMQ==} + engines: {node: '>=8.6.0'} + + requirejs-config-file@4.0.0: + resolution: {integrity: sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw==} + engines: {node: '>=10.13.0'} + + requirejs@2.3.7: + resolution: {integrity: sha512-DouTG8T1WanGok6Qjg2SXuCMzszOo0eHeH9hDZ5Y4x8Je+9JB38HdTLT4/VA8OaUhBa0JPVHJ0pyBkM1z+pDsw==} + engines: {node: '>=0.4.0'} + hasBin: true + + requires-port@1.0.0: + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} + + resolve-cwd@3.0.0: + resolution: {integrity: sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==} + engines: {node: '>=8'} + + resolve-dependency-path@4.0.1: + resolution: {integrity: sha512-YQftIIC4vzO9UMhO/sCgXukNyiwVRCVaxiWskCBy7Zpqkplm8kTAISZ8O1MoKW1ca6xzgLUBjZTcDgypXvXxiQ==} + engines: {node: '>=18'} + + resolve-from@4.0.0: + resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} + engines: {node: '>=4'} + + resolve-from@5.0.0: + resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} + engines: {node: '>=8'} + + resolve-pkg-maps@1.0.0: + resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} + + resolve.exports@2.0.0: + resolution: {integrity: sha512-6K/gDlqgQscOlg9fSRpWstA8sYe8rbELsSTNpx+3kTrsVCzvSl0zIvRErM7fdl9ERWDsKnrLnwB+Ne89918XOg==} + engines: {node: '>=10'} + + resolve@1.22.10: + resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==} + engines: {node: '>= 0.4'} + hasBin: true + + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + retry-axios@2.6.0: + resolution: {integrity: sha512-pOLi+Gdll3JekwuFjXO3fTq+L9lzMQGcSq7M5gIjExcl3Gu1hd4XXuf5o3+LuSBsaULQH7DiNbsqPd1chVpQGQ==} + engines: {node: '>=10.7.0'} + peerDependencies: + axios: '*' + + retry-request@7.0.2: + resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==} + engines: {node: '>=14'} + + retry@0.12.0: + resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} + engines: {node: '>= 4'} + + retry@0.13.1: + resolution: {integrity: sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==} + engines: {node: '>= 4'} + + reusify@1.0.4: + resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + engines: {iojs: '>=1.0.0', node: '>=0.10.0'} + + rfc2047@4.0.1: + resolution: {integrity: sha512-x5zHBAZtSSZDuBNAqGEAVpsQFV+YUluIkMWVaYRMEeGoLPxNVMmg67TxRnXwmRmCB7QaneyrkWXeKqbjfcK6RA==} + + rfdc@1.3.0: + resolution: {integrity: sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA==} + + rhea@1.0.24: + resolution: {integrity: sha512-PEl62U2EhxCO5wMUZ2/bCBcXAVKN9AdMSNQOrp3+R5b77TEaOSiy16MQ0sIOmzj/iqsgIAgPs1mt3FYfu1vIXA==} + + rimraf@2.6.3: + resolution: {integrity: sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@3.0.2: + resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} + deprecated: Rimraf versions prior to v4 are no longer supported + hasBin: true + + rimraf@5.0.1: + resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==} + engines: {node: '>=14'} + hasBin: true + + rimraf@6.0.1: + resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} + engines: {node: 20 || >=22} + hasBin: true + + ripemd160@2.0.1: + resolution: {integrity: sha512-J7f4wutN8mdbV08MJnXibYpCOPHR+yzy+iQ/AsjMv2j8cLavQ8VGagDFUwwTAdF8FmRKVeNpbTTEwNHCW1g94w==} + + ripemd160@2.0.2: + resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} + + rndm@1.2.0: + resolution: {integrity: sha512-fJhQQI5tLrQvYIYFpOnFinzv9dwmR7hRnUz1XqP3OJ1jIweTNOd6aTO4jwQSgcBSFUB+/KHJxuGneime+FdzOw==} + + rollup@4.46.2: + resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + route-recognizer@0.3.4: + resolution: {integrity: sha512-2+MhsfPhvauN1O8KaXpXAOfR/fwe8dnUXVM+xw7yt40lJRfPVQxV6yryZm0cgRvAj5fMF/mdRZbL2ptwbs5i2g==} + + router@2.2.0: + resolution: {integrity: sha512-nLTrUKm2UyiL7rlhapu/Zl45FwNgkZGaCpZbIHajDYgwlJCOzLSk+cIPAnsEqV955GjILJnKbdQC1nVPz+gAYQ==} + engines: {node: '>= 18'} + + rrule@2.8.1: + resolution: {integrity: sha512-hM3dHSBMeaJ0Ktp7W38BJZ7O1zOgaFEsn41PDk+yHoEtfLV+PoJt9E9xAlZiWgf/iqEqionN0ebHFZIDAp+iGw==} + + rrweb-cssom@0.6.0: + resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} + + rss-parser@3.13.0: + resolution: {integrity: sha512-7jWUBV5yGN3rqMMj7CZufl/291QAhvrrGpDNE4k/02ZchL0npisiYYqULF71jCEKoIiHvK/Q2e6IkDwPziT7+w==} + + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + + run-parallel@1.2.0: + resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} + + run-script-os@1.1.6: + resolution: {integrity: sha512-ql6P2LzhBTTDfzKts+Qo4H94VUKpxKDFz6QxxwaUZN0mwvi7L3lpOI7BqPCq7lgDh3XLl0dpeXwfcVIitlrYrw==} + hasBin: true + + rusha@0.8.14: + resolution: {integrity: sha512-cLgakCUf6PedEu15t8kbsjnwIFFR2D4RfL+W3iWFJ4iac7z4B0ZI8fxy4R3J956kAI68HclCFGL8MPoUVC3qVA==} + + rw@1.3.3: + resolution: {integrity: sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==} + + rxjs@6.6.7: + resolution: {integrity: sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==} + engines: {npm: '>=2.0.0'} + + rxjs@7.8.1: + resolution: {integrity: sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==} + + safe-array-concat@1.1.2: + resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} + engines: {node: '>=0.4'} + + safe-array-concat@1.1.3: + resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==} + engines: {node: '>=0.4'} + + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + + safe-buffer@5.2.1: + resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + + safe-push-apply@1.0.0: + resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.0.3: + resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} + engines: {node: '>= 0.4'} + + safe-regex-test@1.1.0: + resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==} + engines: {node: '>= 0.4'} + + safe-stable-stringify@2.4.0: + resolution: {integrity: sha512-eehKHKpab6E741ud7ZIMcXhKcP6TSIezPkNZhy5U8xC6+VvrRdUA2tMgxGxaGl4cz7c2Ew5+mg5+wNB16KQqrA==} + engines: {node: '>=10'} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + samlify@2.10.0: + resolution: {integrity: sha512-IIFg193YPn9IpTd2jCWVvLLC9xdWz/eLn1rtF9YMSwK/B1rt2OM2zAuP99cw3MPYyYsm+I9rlvYgq9FuJ9JqSA==} + + sanitize-html@2.12.1: + resolution: {integrity: sha512-Plh+JAn0UVDpBRP/xEjsk+xDCoOvMBwQUf/K+/cBAVuTbtX8bj2VB7S1sL1dssVpykqp0/KPSesHrqXtokVBpA==} + + sass-lookup@6.1.0: + resolution: {integrity: sha512-Zx+lVyoWqXZxHuYWlTA17Z5sczJ6braNT2C7rmClw+c4E7r/n911Zwss3h1uHI9reR5AgHZyNHF7c2+VIp5AUA==} + engines: {node: '>=18'} + hasBin: true + + sass@1.89.2: + resolution: {integrity: sha512-xCmtksBKd/jdJ9Bt9p7nPKiuqrlBMBuuGkQlkhZjjQk3Ty48lv93k5Dq6OPkKt4XwxDJ7tvlfrTa1MPA9bf+QA==} + engines: {node: '>=14.0.0'} + hasBin: true + + sax@1.2.4: + resolution: {integrity: sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + sb-promise-queue@2.1.0: + resolution: {integrity: sha512-zwq4YuP1FQFkGx2Q7GIkZYZ6PqWpV+bg0nIO1sJhWOyGyhqbj0MsTvK6lCFo5TQwX5pZr6SCQ75e8PCDCuNvkg==} + engines: {node: '>= 8'} + + sb-scandir@3.1.0: + resolution: {integrity: sha512-70BVm2xz9jn94zSQdpvYrEG101/UV9TVGcfWr9T5iob3QhCK4lYXeculfBqPGFv3XTeKgx4dpWyYIDeZUqo4kg==} + engines: {node: '>= 8'} + + scheduler@0.23.0: + resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} + + seedrandom@3.0.5: + resolution: {integrity: sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==} + + selderee@0.11.0: + resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + + semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + engines: {node: '>=10'} + hasBin: true + + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} + engines: {node: '>=10'} + hasBin: true + + send@1.2.0: + resolution: {integrity: sha512-uaW0WwXKpL9blXE2o0bRhoL2EGXIrZxQ2ZQ4mgcfoBxdFmQold+qWsD2jLrfZ0trjKL6vOw0j//eAwcALFjKSw==} + engines: {node: '>= 18'} + + sentence-case@3.0.4: + resolution: {integrity: sha512-8LS0JInaQMCRoQ7YUytAo/xUu5W2XnQxV2HI/6uM6U7CITS1RqPElr30V6uIqyMKM9lJGRVFy5/4CuzcixNYSg==} + + seq-queue@0.0.5: + resolution: {integrity: sha512-hr3Wtp/GZIc/6DAGPDcV4/9WoZhjrkXsi5B/07QgX8tsdc6ilr7BFM6PM6rbdAX1kFSDYeZGLipIZZKyQP0O5Q==} + + serialize-javascript@6.0.2: + resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} + + serve-static@2.2.0: + resolution: {integrity: sha512-61g9pCh0Vnh7IutZjtLGGpTA355+OPn2TyDv/6ivP2h/AdAVX9azsoxmg2/M6nZeQZNYBEwIcsne1mJd9oQItQ==} + engines: {node: '>= 18'} + + set-blocking@2.0.0: + resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} + + set-function-length@1.2.2: + resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} + engines: {node: '>= 0.4'} + + set-function-name@2.0.2: + resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} + engines: {node: '>= 0.4'} + + set-proto@1.0.0: + resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==} + engines: {node: '>= 0.4'} + + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + + setprototypeof@1.2.0: + resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + + shallowequal@1.1.0: + resolution: {integrity: sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==} + + sharp@0.33.5: + resolution: {integrity: sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==} + engines: {node: ^18.17.0 || ^20.3.0 || >=21.0.0} + + shebang-command@1.2.0: + resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==} + engines: {node: '>=0.10.0'} + + shebang-command@2.0.0: + resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} + engines: {node: '>=8'} + + shebang-regex@1.0.0: + resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==} + engines: {node: '>=0.10.0'} + + shebang-regex@3.0.0: + resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} + engines: {node: '>=8'} + + shell-escape@0.2.0: + resolution: {integrity: sha512-uRRBT2MfEOyxuECseCZd28jC1AJ8hmqqneWQ4VWUTgCAFvb3wKU1jLqj6egC4Exrr88ogg3dp+zroH4wJuaXzw==} + + shell-quote@1.8.1: + resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} + + shelljs@0.8.5: + resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} + engines: {node: '>=4'} + hasBin: true + + shimmer@1.2.1: + resolution: {integrity: sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==} + + should-equal@2.0.0: + resolution: {integrity: sha512-ZP36TMrK9euEuWQYBig9W55WPC7uo37qzAEmbjHz4gfyuXrEUgF8cUvQVO+w+d3OMfPvSRQJ22lSm8MQJ43LTA==} + + should-format@3.0.3: + resolution: {integrity: sha512-hZ58adtulAk0gKtua7QxevgUaXTTXxIi8t41L3zo9AHvjXO1/7sdLECuHeIN2SRtYXpNkmhoUP2pdeWgricQ+Q==} + + should-type-adaptors@1.1.0: + resolution: {integrity: sha512-JA4hdoLnN+kebEp2Vs8eBe9g7uy0zbRo+RMcU0EsNy+R+k049Ki+N5tT5Jagst2g7EAja+euFuoXFCa8vIklfA==} + + should-type@1.4.0: + resolution: {integrity: sha512-MdAsTu3n25yDbIe1NeN69G4n6mUnJGtSJHygX3+oN0ZbO3DTiATnf7XnYJdGT42JCXurTb1JI0qOBR65shvhPQ==} + + should-util@1.0.1: + resolution: {integrity: sha512-oXF8tfxx5cDk8r2kYqlkUJzZpDBqVY/II2WhvU0n9Y3XYvAYRmeaf1PvvIvTgPnv4KJ+ES5M0PyDq5Jp+Ygy2g==} + + should@13.2.3: + resolution: {integrity: sha512-ggLesLtu2xp+ZxI+ysJTmNjh2U0TsC+rQ/pfED9bUZZ4DKefP27D+7YJVVTvKsmjLpIi9jAa7itwDGkDDmt1GQ==} + + showdown@2.1.0: + resolution: {integrity: sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==} + hasBin: true + + side-channel-list@1.0.0: + resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==} + engines: {node: '>= 0.4'} + + side-channel-map@1.0.1: + resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==} + engines: {node: '>= 0.4'} + + side-channel-weakmap@1.0.2: + resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==} + engines: {node: '>= 0.4'} + + side-channel@1.0.4: + resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} + + side-channel@1.1.0: + resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} + engines: {node: '>= 0.4'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + signal-exit@3.0.7: + resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} + + signal-exit@4.1.0: + resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} + engines: {node: '>=14'} + + simple-bin-help@1.8.0: + resolution: {integrity: sha512-0LxHn+P1lF5r2WwVB/za3hLRIsYoLaNq1CXqjbrs3ZvLuvlWnRKrUjEWzV7umZL7hpQ7xULiQMV+0iXdRa5iFg==} + engines: {node: '>=14.16'} + + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + + simple-git@3.17.0: + resolution: {integrity: sha512-JozI/s8jr3nvLd9yn2jzPVHnhVzt7t7QWfcIoDcqRIGN+f1IINGv52xoZti2kkYfoRhhRvzMSNPfogHMp97rlw==} + + simple-lru-cache@0.0.2: + resolution: {integrity: sha512-uEv/AFO0ADI7d99OHDmh1QfYzQk/izT1vCmu/riQfh7qjBVUUgRT87E5s5h7CxWCA/+YoZerykpEthzVrW3LIw==} + + simple-swizzle@0.2.2: + resolution: {integrity: sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==} + + simple-update-notifier@2.0.0: + resolution: {integrity: sha512-a2B9Y0KlNXl9u/vsW6sTIu9vGEpfKu2wRV6l1H3XEas/0gUIzGzBoP/IouTcUQbm9JWZLH3COxyn03TYlFax6w==} + engines: {node: '>=10'} + + simple-wcswidth@1.0.1: + resolution: {integrity: sha512-xMO/8eNREtaROt7tJvWJqHBDTMFN4eiQ5I4JRMuilwfnFcV5W9u7RUkueNkdw0jPqGMX36iCywelS5yilTuOxg==} + + simple-websocket@9.1.0: + resolution: {integrity: sha512-8MJPnjRN6A8UCp1I+H/dSFyjwJhp6wta4hsVRhjf8w9qBHRzxYt14RaOcjvQnhD1N4yKOddEjflwMnQM4VtXjQ==} + + sisteransi@1.0.5: + resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} + + slash@3.0.0: + resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} + engines: {node: '>=8'} + + slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + slick@1.12.2: + resolution: {integrity: sha512-4qdtOGcBjral6YIBCWJ0ljFSKNLz9KkhbWtuGvUyRowl1kxfuE1x/Z/aJcaiilpb3do9bl5K7/1h9XC5wWpY/A==} + + slugify@1.4.7: + resolution: {integrity: sha512-tf+h5W1IrjNm/9rKKj0JU2MDMruiopx0jjVA5zCdBtcGjfp0+c5rHw/zADLC3IeKlGHtVbHtpfzvYA0OYT+HKg==} + engines: {node: '>=8.0.0'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + + snake-case@3.0.4: + resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + + snowflake-sdk@2.1.0: + resolution: {integrity: sha512-daRZRj1y631Y2pK8N85Jm1aBadHVqMU3uIOrqS/6XQ+PYMjV0oDpZsJ0TBRSYdJ0ChFR8Fd+QnUgQ/j2NYkdRQ==} + peerDependencies: + asn1.js: ^5.4.1 + + socks-proxy-agent@6.2.1: + resolution: {integrity: sha512-a6KW9G+6B3nWZ1yB8G7pJwL3ggLy1uTzKAgCb7ttblwqdz9fMGJUuTy3uFzEP48FAs9FLILlmzDlE2JJhVQaXQ==} + engines: {node: '>= 10'} + + socks@2.8.3: + resolution: {integrity: sha512-l5x7VUUWbjVFbafGLxPWkYsHIhEvmF85tbIeFZWc8ZPtoMyybuEhL7Jye/ooC4/d48FgOjSJXgsF/AJPYCW8Zw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + + sonic-boom@4.2.0: + resolution: {integrity: sha512-INb7TM37/mAcsGmc9hyyI6+QR3rR1zVRu36B0NeGXKnOOLiZOfER5SA+N7X7k3yUYRzLWafduTDvJAfDswwEww==} + + sortablejs@1.14.0: + resolution: {integrity: sha512-pBXvQCs5/33fdN1/39pPL0NZF20LeRbLQ5jtnheIPN9JQAaufGjKdWduZn4U7wCtVuzKhmRkI0DFYHYRbB2H1w==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.13: + resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + source-map@0.8.0-beta.0: + resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} + engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions + + sparse-bitfield@3.0.3: + resolution: {integrity: sha512-kvzhi7vqKTfkh0PZU+2D2PIllw2ymqJKujUcyPMd9Y75Nv4nPbGJZXNhxsgdQab2BmlDct1YnfQCguEvHr7VsQ==} + + spawn-command@0.0.2: + resolution: {integrity: sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==} + + spex@3.3.0: + resolution: {integrity: sha512-VNiXjFp6R4ldPbVRYbpxlD35yRHceecVXlct1J4/X80KuuPnW2AXMq3sGwhnJOhKkUsOxAT6nRGfGE5pocVw5w==} + engines: {node: '>=10.0.0'} + + split-ca@1.0.1: + resolution: {integrity: sha512-Q5thBSxp5t8WPTTJQS59LrGqOZqOsrhDGDVm8azCqIBjSBd7nd9o2PM+mDulQQkh8h//4U6hFZnc/mul8t5pWQ==} + + split2@4.2.0: + resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} + engines: {node: '>= 10.x'} + + split@0.3.3: + resolution: {integrity: sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA==} + + sprintf-js@1.0.3: + resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + + sprintf-js@1.1.2: + resolution: {integrity: sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==} + + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + + sqlite3@5.1.7: + resolution: {integrity: sha512-GGIyOiFaG+TUra3JIfkI/zGP8yZYLPQ0pl1bH+ODjiX57sPhrLU5sQJn1y9bDKZUFYkX1crlrPfSYt0BKKdkog==} + + sqlstring@2.3.3: + resolution: {integrity: sha512-qC9iz2FlN7DQl3+wjwn3802RTyjCx7sDvfQEXchwa6CWOx07/WVfh91gBmQ9fahw8snwGEWU3xGzOt4tFyHLxg==} + engines: {node: '>= 0.6'} + + ssh-remote-port-forward@1.0.4: + resolution: {integrity: sha512-x0LV1eVDwjf1gmG7TTnfqIzf+3VPRz7vrNIjX6oYLbeCrf/PeVY6hkT68Mg+q02qXxQhrLjB0jfgvhevoCRmLQ==} + + ssh2-sftp-client@12.0.1: + resolution: {integrity: sha512-ICJ1L2PmBel2Q2ctbyxzTFZCPKSHYYD6s2TFZv7NXmZDrDNGk8lHBb/SK2WgXLMXNANH78qoumeJzxlWZqSqWg==} + engines: {node: '>=18.20.4'} + + ssh2@1.15.0: + resolution: {integrity: sha512-C0PHgX4h6lBxYx7hcXwu3QWdh4tg6tZZsTfXcdvc5caW/EMxaB4H9dWsl7qk+F7LAW762hp8VbXOX7x4xUYvEw==} + engines: {node: '>=10.16.0'} + + ssh2@1.16.0: + resolution: {integrity: sha512-r1X4KsBGedJqo7h8F5c4Ybpcr5RjyP+aWIG007uBPRjmdQWfEiVLzSK71Zji1B9sKxwaCvD8y8cwSkYrlLiRRg==} + engines: {node: '>=10.16.0'} + + sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + + ssri@8.0.1: + resolution: {integrity: sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==} + engines: {node: '>= 8'} + + stable-hash-x@0.1.1: + resolution: {integrity: sha512-l0x1D6vhnsNUGPFVDx45eif0y6eedVC8nm5uACTrVFJFtl2mLRW17aWtVyxFCpn5t94VUPkjU8vSLwIuwwqtJQ==} + engines: {node: '>=12.0.0'} + + stack-trace@0.0.10: + resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} + + stack-utils@2.0.6: + resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} + engines: {node: '>=10'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + standard-as-callback@2.1.0: + resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} + + start-server-and-test@2.0.10: + resolution: {integrity: sha512-nZphcfcqGqwk74lbZkqSwClkYz+M5ZPGOMgWxNVJrdztPKN96qe6HooRu6L3TpwITn0lKJJdKACqHbJtqythOQ==} + engines: {node: '>=16'} + hasBin: true + + static-eval@2.0.2: + resolution: {integrity: sha512-N/D219Hcr2bPjLxPiV+TQE++Tsmrady7TqAJugLy7Xk1EumfDWS/f5dtBbkRCGE7wKKXuYockQoj8Rm2/pVKyg==} + + statuses@2.0.1: + resolution: {integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==} + engines: {node: '>= 0.8'} + + std-env@3.9.0: + resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + + stickyfill@1.1.1: + resolution: {integrity: sha512-GCp7vHAfpao+Qh/3Flh9DXEJ/qSi0KJwJw6zYlZOtRYXWUIpMM6mC2rIep/dK8RQqwW0KxGJIllmjPIBOGN8AA==} + + stop-iteration-iterator@1.1.0: + resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==} + engines: {node: '>= 0.4'} + + stoppable@1.1.0: + resolution: {integrity: sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==} + engines: {node: '>=4', npm: '>=6'} + + storybook@8.6.4: + resolution: {integrity: sha512-XXh1Acvf1r3BQX0BDLQw6yhZ7yUGvYxIcKOBuMdetnX7iXtczipJTfw0uyFwk0ltkKEE9PpJvivYmARF3u64VQ==} + hasBin: true + peerDependencies: + prettier: ^2 || ^3 + peerDependenciesMeta: + prettier: + optional: true + + stream-browserify@3.0.0: + resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} + + stream-combiner@0.0.4: + resolution: {integrity: sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw==} + + stream-events@1.0.5: + resolution: {integrity: sha512-E1GUzBSgvct8Jsb3v2X15pjzN1tYebtbLaMg+eBOUOAxgbLoSbT2NS91ckc5lJD1KfLjId+jXJRgo0qnV5Nerg==} + + stream-http@3.2.0: + resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + stream-to-array@2.3.0: + resolution: {integrity: sha512-UsZtOYEn4tWU2RGLOXr/o/xjRBftZRlG3dEWoaHr8j4GuypJ3isitGbVyjQKAuMu+xbiop8q224TjiZWc4XTZA==} + + streamsearch@1.1.0: + resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==} + engines: {node: '>=10.0.0'} + + streamx@2.22.1: + resolution: {integrity: sha512-znKXEBxfatz2GBNK02kRnCXjV+AA4kjZIUxeWSr3UGirZMJfTE9uiwKHobnbgxWyL/JWro8tTq+vOqAK1/qbSA==} + + strict-event-emitter-types@2.0.0: + resolution: {integrity: sha512-Nk/brWYpD85WlOgzw5h173aci0Teyv8YdIAEtV+N88nDB0dLlazZyJMIsN6eo1/AR61l+p6CJTG1JIyFaoNEEA==} + + strict-event-emitter@0.5.1: + resolution: {integrity: sha512-vMgjE/GGEPEFnhFub6pa4FmJBRBVOLpIII2hvCZ8Kzb7K0hlHo7mQv6xYrBvCL2LtAIBwFUK8wvuJgTVSQ5MFQ==} + + string-argv@0.3.1: + resolution: {integrity: sha512-a1uQGz7IyVy9YwhqjZIZu1c8JO8dNIe20xBmSS6qu9kv++k3JGzCVmprbNN5Kn+BgzD5E7YYwg1CcjuJMRNsvg==} + engines: {node: '>=0.6.19'} + + string-length@4.0.2: + resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} + engines: {node: '>=10'} + + string-width@4.2.3: + resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} + engines: {node: '>=8'} + + string-width@5.1.2: + resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} + engines: {node: '>=12'} + + string.prototype.trim@1.2.10: + resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==} + engines: {node: '>= 0.4'} + + string.prototype.trim@1.2.9: + resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} + engines: {node: '>= 0.4'} + + string.prototype.trimend@1.0.9: + resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==} + engines: {node: '>= 0.4'} + + string.prototype.trimstart@1.0.8: + resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} + engines: {node: '>= 0.4'} + + string_decoder@0.10.31: + resolution: {integrity: sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + + string_decoder@1.3.0: + resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} + + stringify-object@3.3.0: + resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} + engines: {node: '>=4'} + + strip-ansi@6.0.1: + resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} + engines: {node: '>=8'} + + strip-ansi@7.1.0: + resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} + engines: {node: '>=12'} + + strip-bom@3.0.0: + resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} + engines: {node: '>=4'} + + strip-bom@4.0.0: + resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} + engines: {node: '>=8'} + + strip-eof@1.0.0: + resolution: {integrity: sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==} + engines: {node: '>=0.10.0'} + + strip-final-newline@2.0.0: + resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} + engines: {node: '>=6'} + + strip-final-newline@4.0.0: + resolution: {integrity: sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw==} + engines: {node: '>=18'} + + strip-indent@3.0.0: + resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} + engines: {node: '>=8'} + + strip-indent@4.0.0: + resolution: {integrity: sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==} + engines: {node: '>=12'} + + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + + strip-json-comments@3.1.1: + resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} + engines: {node: '>=8'} + + strnum@1.0.5: + resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==} + + strnum@2.1.0: + resolution: {integrity: sha512-w0S//9BqZZGw0L0Y8uLSelFGnDJgTyyNQLmSlPnVz43zPAiqu3w4t8J8sDqqANOGeZIZ/9jWuPguYcEnsoHv4A==} + + strtok3@6.3.0: + resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==} + engines: {node: '>=10'} + + stubs@3.0.0: + resolution: {integrity: sha512-PdHt7hHUJKxvTCgbKX9C1V/ftOcjJQgz8BZwNfV5c4B6dcGqlpelTbJ999jBGZ2jYiPAwcX5dP6oBwVlBlUbxw==} + + style-mod@4.1.0: + resolution: {integrity: sha512-Ca5ib8HrFn+f+0n4N4ScTIA9iTOQ7MaGS1ylHcoVqW9J7w2w8PzN6g9gKmTYgGEBH8e120+RCmhpje6jC5uGWA==} + + styled-components@6.1.8: + resolution: {integrity: sha512-PQ6Dn+QxlWyEGCKDS71NGsXoVLKfE1c3vApkvDYS5KAK+V8fNWGhbSUEo9Gg2iaID2tjLXegEW3bZDUGpofRWw==} + engines: {node: '>= 16'} + peerDependencies: + react: '>= 16.8.0' + react-dom: '>= 16.8.0' + + stylelint-config-recommended-scss@15.0.1: + resolution: {integrity: sha512-V24bxkNkFGggqPVJlP9iXaBabwSGEG7QTz+PyxrRtjPkcF+/NsWtB3tKYvFYEmczRkWiIEfuFMhGpJFj9Fxe6Q==} + engines: {node: '>=20'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.16.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-recommended@16.0.0: + resolution: {integrity: sha512-4RSmPjQegF34wNcK1e1O3Uz91HN8P1aFdFzio90wNK9mjgAI19u5vsU868cVZboKzCaa5XbpvtTzAAGQAxpcXA==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.16.0 + + stylelint-config-standard-scss@15.0.1: + resolution: {integrity: sha512-8pmmfutrMlPHukLp+Th9asmk21tBXMVGxskZCzkRVWt1d8Z0SrXjUUQ3vn9KcBj1bJRd5msk6yfEFM0UYHBRdg==} + engines: {node: '>=20'} + peerDependencies: + postcss: ^8.3.3 + stylelint: ^16.18.0 + peerDependenciesMeta: + postcss: + optional: true + + stylelint-config-standard@38.0.0: + resolution: {integrity: sha512-uj3JIX+dpFseqd/DJx8Gy3PcRAJhlEZ2IrlFOc4LUxBX/PNMEQ198x7LCOE2Q5oT9Vw8nyc4CIL78xSqPr6iag==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.18.0 + + stylelint-scss@6.12.1: + resolution: {integrity: sha512-UJUfBFIvXfly8WKIgmqfmkGKPilKB4L5j38JfsDd+OCg2GBdU0vGUV08Uw82tsRZzd4TbsUURVVNGeOhJVF7pA==} + engines: {node: '>=18.12.0'} + peerDependencies: + stylelint: ^16.0.2 + + stylelint@16.23.0: + resolution: {integrity: sha512-69T5aS2LUY306ekt1Q1oaSPwz/jaG9HjyMix3UMrai1iEbuOafBe2Dh8xlyczrxFAy89qcKyZWWtc42XLx3Bbw==} + engines: {node: '>=18.12.0'} + hasBin: true + + stylis@4.3.1: + resolution: {integrity: sha512-EQepAV+wMsIaGVGX1RECzgrcqRRU/0sYOHkeLsZ3fzHaHXZy4DaOOX0vOlGQdlsjkh3mFHAIlVimpwAs4dslyQ==} + + stylus-lookup@6.1.0: + resolution: {integrity: sha512-5QSwgxAzXPMN+yugy61C60PhoANdItfdjSEZR8siFwz7yL9jTmV0UBKDCfn3K8GkGB4g0Y9py7vTCX8rFu4/pQ==} + engines: {node: '>=18'} + hasBin: true + + sucrase@3.35.0: + resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} + engines: {node: '>=16 || 14 >=14.17'} + hasBin: true + + superagent@10.2.1: + resolution: {integrity: sha512-O+PCv11lgTNJUzy49teNAWLjBZfc+A1enOwTpLlH6/rsvKcTwcdTT8m9azGkVqM7HBl5jpyZ7KTPhHweokBcdg==} + engines: {node: '>=14.18.0'} + deprecated: Please upgrade to superagent v10.2.2+, see release notes at https://github.com/forwardemail/superagent/releases/tag/v10.2.2 - maintenance is supported by Forward Email @ https://forwardemail.net + + supertest@7.1.1: + resolution: {integrity: sha512-aI59HBTlG9e2wTjxGJV+DygfNLgnWbGdZxiA/sgrnNNikIW8lbDvCtF6RnhZoJ82nU7qv7ZLjrvWqCEm52fAmw==} + engines: {node: '>=14.18.0'} + deprecated: Please upgrade to supertest v7.1.3+, see release notes at https://github.com/forwardemail/supertest/releases/tag/v7.1.3 - maintenance is supported by Forward Email @ https://forwardemail.net + + supports-color@5.5.0: + resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} + engines: {node: '>=4'} + + supports-color@7.2.0: + resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} + engines: {node: '>=8'} + + supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + + supports-preserve-symlinks-flag@1.0.0: + resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} + engines: {node: '>= 0.4'} + + svg-tags@1.0.0: + resolution: {integrity: sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==} + + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} + engines: {node: '>=14.0.0'} + hasBin: true + + swagger-ui-dist@5.11.0: + resolution: {integrity: sha512-j0PIATqQSEFGOLmiJOJZj1X1Jt6bFIur3JpY7+ghliUnfZs0fpWDdHEkn9q7QUlBtKbkn6TepvSxTqnE8l3s0A==} + + swagger-ui-express@5.0.1: + resolution: {integrity: sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==} + engines: {node: '>= v0.10.32'} + peerDependencies: + express: '>=4.0.0 || >=5.0.0-beta' + + swagger2openapi@7.0.8: + resolution: {integrity: sha512-upi/0ZGkYgEcLeGieoz8gT74oWHA0E7JivX7aN9mAf+Tc7BQoRBvnIGHoPDw+f9TXTW4s6kGYCZJtauP6OYp7g==} + hasBin: true + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + syslog-client@1.1.1: + resolution: {integrity: sha512-c3qKw8JzCuHt0mwrzKQr8eqOc3RB28HgOpFuwGMO3GLscVpfR+0ECevWLZq/yIJTbx3WTb3QXBFVpTFtKAPDrw==} + + systemjs@6.15.1: + resolution: {integrity: sha512-Nk8c4lXvMB98MtbmjX7JwJRgJOL8fluecYCfCeYBznwmpOs8Bf15hLM6z4z71EDAhQVrQrI+wt1aLWSXZq+hXA==} + + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + + tailwindcss@3.4.3: + resolution: {integrity: sha512-U7sxQk/n397Bmx4JHbJx/iSOOv5G+II3f1kpLpY2QeUv5DcPdcTsYLlusZfq1NthHS1c1cZoyFmmkex1rzke0A==} + engines: {node: '>=14.0.0'} + hasBin: true + + tapable@2.2.2: + resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} + engines: {node: '>=6'} + + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.1.7: + resolution: {integrity: sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==} + + tar@6.2.1: + resolution: {integrity: sha512-DZ4yORTwrbTj/7MZYq2w+/ZFdI6OZ/f9SFHR+71gIVUZhOQPHzVCLpvRnPgyaMpfWxxk/4ONva3GQSyNIKRv6A==} + engines: {node: '>=10'} + + tarn@3.0.2: + resolution: {integrity: sha512-51LAVKUSZSVfI05vjPESNc5vwqqZpbXCsU+/+wxlOrUjk2SnFTt97v9ZgQrD4YmxYW1Px6w2KjaDitCfkvgxMQ==} + engines: {node: '>=8.0.0'} + + tdigest@0.1.2: + resolution: {integrity: sha512-+G0LLgjjo9BZX2MfdvPfH+MKLCrxlXSYec5DaPYP1fe6Iyhf0/fSmJ0bFiZ1F8BT6cGXl2LpltQptzjXKWEkKA==} + + tedious@16.7.1: + resolution: {integrity: sha512-NmedZS0NJiTv3CoYnf1FtjxIDUgVYzEmavrc8q2WHRb+lP4deI9BpQfmNnBZZaWusDbP5FVFZCcvzb3xOlNVlQ==} + engines: {node: '>=16'} + + teeny-request@9.0.0: + resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==} + engines: {node: '>=14'} + + temp@0.9.4: + resolution: {integrity: sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==} + engines: {node: '>=6.0.0'} + + terser@5.16.1: + resolution: {integrity: sha512-xvQfyfA1ayT0qdK47zskQgRZeWLoOQ8JQ6mIgRGVNwZKdQMU+5FkCBjmv4QjcrTzyZquRw2FVtlJSRUmMKQslw==} + engines: {node: '>=10'} + hasBin: true + + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + test-exclude@7.0.1: + resolution: {integrity: sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==} + engines: {node: '>=18'} + + testcontainers@11.0.3: + resolution: {integrity: sha512-Xu6ZAaE1FaLyHzFSYdCsd+xMPxUegUjkum0r6zgO8SinnFDHRX/PllIHMt1D+DVUmJqBvPQI6vge/J5jgE5vng==} + + text-decoder@1.2.3: + resolution: {integrity: sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA==} + + text-hex@1.0.0: + resolution: {integrity: sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg==} + + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + + thirty-two@1.0.2: + resolution: {integrity: sha512-OEI0IWCe+Dw46019YLl6V10Us5bi574EvlJEOcAkB29IzQ/mYD1A6RyNHLjZPiHCmuodxvgF6U+vZO1L15lxVA==} + engines: {node: '>=0.2.6'} + + thread-stream@3.1.0: + resolution: {integrity: sha512-OqyPZ9u96VohAyMfJykzmivOrY2wfMSf3C5TtFJVgN+Hm6aj+voFhlK+kZEIv2FBh1X6Xp3DlnCOfEQ3B2J86A==} + + throttleit@1.0.0: + resolution: {integrity: sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + + timeago.js@4.0.2: + resolution: {integrity: sha512-a7wPxPdVlQL7lqvitHGGRsofhdwtkoSXPGATFuSOA2i1ZNQEPLrGnj68vOp2sOJTCFAQVXPeNMX/GctBaO9L2w==} + + timers-browserify@2.0.12: + resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} + engines: {node: '>=0.6.0'} + + tiny-invariant@1.3.3: + resolution: {integrity: sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==} + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinyglobby@0.2.14: + resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} + engines: {node: '>=12.0.0'} + + tinypool@1.1.1: + resolution: {integrity: sha512-Zba82s87IFq9A9XmjiX5uZA/ARWDrB03OHlq+Vw1fSdt0I+4/Kutwy8BP4Y/y/aORMo61FQ0vIb5j44vSo5Pkg==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + title-case@3.0.3: + resolution: {integrity: sha512-e1zGYRvbffpcHIrnuqT0Dh+gEJtDaxDSoG4JAIpq4oDFyooziLBIiYQv0GBT4FUAnUop5uZ1hiIAj7oAF6sOCA==} + + tlds@1.248.0: + resolution: {integrity: sha512-noj0KdpWTBhwsKxMOXk0rN9otg4kTgLm4WohERRHbJ9IY+kSDKr3RmjitaQ3JFzny+DyvBOQKlFZhp0G0qNSfg==} + hasBin: true + + tldts-core@6.1.86: + resolution: {integrity: sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA==} + + tldts@6.1.86: + resolution: {integrity: sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ==} + hasBin: true + + tmp-promise@3.0.3: + resolution: {integrity: sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==} + + tmp@0.2.4: + resolution: {integrity: sha512-UdiSoX6ypifLmrfQ/XfiawN6hkjSBpCjhKxxZcWlUUmoXLaCKQU0bx4HF/tdDK2uzRuchf1txGvrWBzYREssoQ==} + engines: {node: '>=14.14'} + + tmpl@1.0.5: + resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + + to-buffer@1.2.1: + resolution: {integrity: sha512-tB82LpAIWjhLYbqjx3X4zEeHN6M8CiuOEy2JY8SEQVdYRe3CCHOFaqrBW1doLDrfpWhplcW7BL+bO3/6S3pcDQ==} + engines: {node: '>= 0.4'} + + to-regex-range@5.0.1: + resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} + engines: {node: '>=8.0'} + + toidentifier@1.0.1: + resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} + engines: {node: '>=0.6'} + + token-stream@1.0.0: + resolution: {integrity: sha512-VSsyNPPW74RpHwR8Fc21uubwHY7wMDeJLys2IX5zJNih+OnAnaifKHo+1LHT7DAdloQ7apeaaWg8l7qnf/TnEg==} + + token-types@4.2.1: + resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==} + engines: {node: '>=10'} + + toml@3.0.0: + resolution: {integrity: sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w==} + + toposort@2.0.2: + resolution: {integrity: sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==} + + touch@3.1.0: + resolution: {integrity: sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==} + hasBin: true + + tough-cookie@4.1.3: + resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==} + engines: {node: '>=6'} + + tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + + tough-cookie@5.1.2: + resolution: {integrity: sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==} + engines: {node: '>=16'} + + tr46@0.0.3: + resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==} + + tr46@1.0.1: + resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} + + tr46@3.0.0: + resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} + engines: {node: '>=12'} + + tr46@4.1.1: + resolution: {integrity: sha512-2lv/66T7e5yNyhAAC4NaKe5nVavzuGJQVVtRYLyQ2OI8tsJ61PMLlelehb0wi2Hx6+hT/OJUWZcw8MjlSRnxvw==} + engines: {node: '>=14'} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + transliteration@2.3.5: + resolution: {integrity: sha512-HAGI4Lq4Q9dZ3Utu2phaWgtm3vB6PkLUFqWAScg/UW+1eZ/Tg6Exo4oC0/3VUol/w4BlefLhUUSVBr/9/ZGQOw==} + engines: {node: '>=6.0.0'} + hasBin: true + + tree-kill@1.2.2: + resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} + hasBin: true + + tree-sitter-bash@0.23.3: + resolution: {integrity: sha512-36cg/GQ2YmIbeiBeqeuh4fBJ6i4kgVouDaqTxqih5ysPag+zHufyIaxMOFeM8CeplwAK/Luj1o5XHqgdAfoCZg==} + peerDependencies: + tree-sitter: ^0.21.1 + peerDependenciesMeta: + tree-sitter: + optional: true + + tree-sitter@0.21.1: + resolution: {integrity: sha512-7dxoA6kYvtgWw80265MyqJlkRl4yawIjO7S5MigytjELkX43fV2WsAXzsNfO7sBpPPCF5Gp0+XzHk0DwLCq3xQ==} + + triple-beam@1.3.0: + resolution: {integrity: sha512-XrHUvV5HpdLmIj4uVMxHggLbFSZYIn7HEWsqePZcI50pco+MPqJ50wMGY794X7AOOhxOBAjbkqfAbEe/QMp2Lw==} + + ts-api-utils@1.4.3: + resolution: {integrity: sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==} + engines: {node: '>=16'} + peerDependencies: + typescript: 5.9.2 + + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} + engines: {node: '>=18.12'} + peerDependencies: + typescript: 5.9.2 + + ts-dedent@2.2.0: + resolution: {integrity: sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==} + engines: {node: '>=6.10'} + + ts-error@1.0.6: + resolution: {integrity: sha512-tLJxacIQUM82IR7JO1UUkKlYuUTmoY9HBJAmNWFzheSlDS5SPMcNIepejHJa4BpPQLAcbRhRf3GDJzyj6rbKvA==} + + ts-essentials@10.0.2: + resolution: {integrity: sha512-Xwag0TULqriaugXqVdDiGZ5wuZpqABZlpwQ2Ho4GDyiu/R2Xjkp/9+zcFxL7uzeLl/QCPrflnvpVYyS3ouT7Zw==} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + ts-essentials@7.0.3: + resolution: {integrity: sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ==} + peerDependencies: + typescript: 5.9.2 + + ts-graphviz@2.1.6: + resolution: {integrity: sha512-XyLVuhBVvdJTJr2FJJV2L1pc4MwSjMhcunRVgDE9k4wbb2ee7ORYnPewxMWUav12vxyfUM686MSGsqnVRIInuw==} + engines: {node: '>=18'} + + ts-ics@1.2.2: + resolution: {integrity: sha512-L7T5JQi99qQ2Uv7AoCHUZ8Mx1bJYo7qBZtBckuHueR90I3WVdW5NC/tOqTVgu18c3zj08du+xlgWlTIcE+Foxw==} + peerDependencies: + date-fns: 2.30.0 + lodash: ^4 + zod: ^3 + + ts-interface-checker@0.1.13: + resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} + + ts-jest@29.1.1: + resolution: {integrity: sha512-D6xjnnbP17cC85nliwGiL+tpoKN0StpgE0TeOjXQTU6MVCfsB4v7aW05CgQ/1OywGb0x/oy9hHFnN+sczTiRaA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + hasBin: true + peerDependencies: + '@babel/core': '>=7.0.0-beta.0 <8' + '@jest/types': ^29.0.0 + babel-jest: ^29.0.0 + esbuild: '*' + jest: ^29.0.0 + typescript: 5.9.2 + peerDependenciesMeta: + '@babel/core': + optional: true + '@jest/types': + optional: true + babel-jest: + optional: true + esbuild: + optional: true + + ts-map@1.0.3: + resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==} + + ts-morph@26.0.0: + resolution: {integrity: sha512-ztMO++owQnz8c/gIENcM9XfCEzgoGphTv+nKpYNM1bgsdOVC/jRZuEBf6N+mLLDNg68Kl+GgUZfOySaRiG1/Ug==} + + ts-node@10.9.2: + resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==} + hasBin: true + peerDependencies: + '@swc/core': '>=1.2.50' + '@swc/wasm': '>=1.2.50' + '@types/node': ^20.17.50 + typescript: 5.9.2 + peerDependenciesMeta: + '@swc/core': + optional: true + '@swc/wasm': + optional: true + + ts-pattern@5.8.0: + resolution: {integrity: sha512-kIjN2qmWiHnhgr5DAkAafF9fwb0T5OhMVSWrm8XEdTFnX6+wfXwYOFjeF86UZ54vduqiR7BfqScFmXSzSaH8oA==} + + ts-toolbelt@9.6.0: + resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==} + + ts-type@3.0.1: + resolution: {integrity: sha512-cleRydCkBGBFQ4KAvLH0ARIkciduS745prkGVVxPGvcRGhMMoSJUB7gNR1ByKhFTEYrYRg2CsMRGYnqp+6op+g==} + peerDependencies: + ts-toolbelt: ^9.6.0 + + tsc-alias@1.8.10: + resolution: {integrity: sha512-Ibv4KAWfFkFdKJxnWfVtdOmB0Zi1RJVxcbPGiCDsFpCQSsmpWyuzHG3rQyI5YkobWwxFPEyQfu1hdo4qLG2zPw==} + hasBin: true + + tsc-watch@6.2.0: + resolution: {integrity: sha512-2LBhf9kjKXnz7KQ/puLHlozMzzUNHAdYBNMkg3eksQJ9GBAgMg8czznM83T5PmsoUvDnXzfIeQn2lNcIYDr8LA==} + engines: {node: '>=12.12.0'} + hasBin: true + peerDependencies: + typescript: 5.9.2 + + tsconfig-paths@4.2.0: + resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} + engines: {node: '>=6'} + + tslib@2.6.2: + resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + tsup@8.5.0: + resolution: {integrity: sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==} + engines: {node: '>=18'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7.36.0 + '@swc/core': ^1 + postcss: ^8.4.12 + typescript: 5.9.2 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + '@swc/core': + optional: true + postcss: + optional: true + typescript: + optional: true + + tsx@4.19.3: + resolution: {integrity: sha512-4H8vUNGNjQ4V2EOoGw005+c+dGuPSnhpPBPHBtsZdGZBk/iJb4kguGlPWaZTZ3q5nMtFOEsY0nRDlh9PJyd6SQ==} + engines: {node: '>=18.0.0'} + hasBin: true + + tty-browserify@0.0.1: + resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} + + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + turbo-darwin-64@2.5.4: + resolution: {integrity: sha512-ah6YnH2dErojhFooxEzmvsoZQTMImaruZhFPfMKPBq8sb+hALRdvBNLqfc8NWlZq576FkfRZ/MSi4SHvVFT9PQ==} + cpu: [x64] + os: [darwin] + + turbo-darwin-arm64@2.5.4: + resolution: {integrity: sha512-2+Nx6LAyuXw2MdXb7pxqle3MYignLvS7OwtsP9SgtSBaMlnNlxl9BovzqdYAgkUW3AsYiQMJ/wBRb7d+xemM5A==} + cpu: [arm64] + os: [darwin] + + turbo-linux-64@2.5.4: + resolution: {integrity: sha512-5May2kjWbc8w4XxswGAl74GZ5eM4Gr6IiroqdLhXeXyfvWEdm2mFYCSWOzz0/z5cAgqyGidF1jt1qzUR8hTmOA==} + cpu: [x64] + os: [linux] + + turbo-linux-arm64@2.5.4: + resolution: {integrity: sha512-/2yqFaS3TbfxV3P5yG2JUI79P7OUQKOUvAnx4MV9Bdz6jqHsHwc9WZPpO4QseQm+NvmgY6ICORnoVPODxGUiJg==} + cpu: [arm64] + os: [linux] + + turbo-windows-64@2.5.4: + resolution: {integrity: sha512-EQUO4SmaCDhO6zYohxIjJpOKRN3wlfU7jMAj3CgcyTPvQR/UFLEKAYHqJOnJtymbQmiiM/ihX6c6W6Uq0yC7mA==} + cpu: [x64] + os: [win32] + + turbo-windows-arm64@2.5.4: + resolution: {integrity: sha512-oQ8RrK1VS8lrxkLriotFq+PiF7iiGgkZtfLKF4DDKsmdbPo0O9R2mQxm7jHLuXraRCuIQDWMIw6dpcr7Iykf4A==} + cpu: [arm64] + os: [win32] + + turbo@2.5.4: + resolution: {integrity: sha512-kc8ZibdRcuWUG1pbYSBFWqmIjynlD8Lp7IB6U3vIzvOv9VG+6Sp8bzyeBWE3Oi8XV5KsQrznyRTBPvrf99E4mA==} + hasBin: true + + tween-functions@1.2.0: + resolution: {integrity: sha512-PZBtLYcCLtEcjL14Fzb1gSxPBeL7nWvGhO5ZFPGqziCcr8uvHp0NDmdjBchp6KHL+tExcg0m3NISmKxhU394dA==} + + tweetnacl-util@0.15.1: + resolution: {integrity: sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw==} + + tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + + tweetnacl@1.0.3: + resolution: {integrity: sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw==} + + type-check@0.3.2: + resolution: {integrity: sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==} + engines: {node: '>= 0.8.0'} + + type-check@0.4.0: + resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} + engines: {node: '>= 0.8.0'} + + type-detect@4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} + engines: {node: '>=4'} + + type-fest@0.20.2: + resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} + engines: {node: '>=10'} + + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + + type-fest@2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} + engines: {node: '>=12.20'} + + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} + engines: {node: '>=16'} + + type-is@1.6.18: + resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} + engines: {node: '>= 0.6'} + + type-is@2.0.1: + resolution: {integrity: sha512-OZs6gsjF4vMp32qrCbiVSkrFmXtG/AZhY3t0iAMrMBiAZyV9oALtXO8hsrHbMXF9x6L3grlFuwW2oAz7cav+Gw==} + engines: {node: '>= 0.6'} + + type-of-is@3.5.1: + resolution: {integrity: sha512-SOnx8xygcAh8lvDU2exnK2bomASfNjzB3Qz71s2tw9QnX8fkAo7aC+D0H7FV0HjRKj94CKV2Hi71kVkkO6nOxg==} + engines: {node: '>=0.10.5'} + + typed-array-buffer@1.0.2: + resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} + engines: {node: '>= 0.4'} + + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.1: + resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} + engines: {node: '>= 0.4'} + + typed-array-byte-length@1.0.3: + resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.2: + resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} + engines: {node: '>= 0.4'} + + typed-array-byte-offset@1.0.4: + resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.6: + resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} + engines: {node: '>= 0.4'} + + typed-array-length@1.0.7: + resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} + engines: {node: '>= 0.4'} + + typedarray-dts@1.0.0: + resolution: {integrity: sha512-Ka0DBegjuV9IPYFT1h0Qqk5U4pccebNIJCGl8C5uU7xtOs+jpJvKGAY4fHGK25hTmXZOEUl9Cnsg5cS6K/b5DA==} + + typedarray@0.0.6: + resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} + + typescript-eslint@8.35.0: + resolution: {integrity: sha512-uEnz70b7kBz6eg/j0Czy6K5NivaYopgxRjsnAJ2Fx5oTLo3wefTHIbL7AkQr1+7tJCRVpTs/wiM8JR/11Loq9A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: 5.9.2 + + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} + engines: {node: '>=14.17'} + hasBin: true + + uc.micro@1.0.6: + resolution: {integrity: sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==} + + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + ufo@1.6.1: + resolution: {integrity: sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA==} + + uglify-js@3.17.4: + resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + engines: {node: '>=0.8.0'} + hasBin: true + + uid-safe@2.1.5: + resolution: {integrity: sha512-KPHm4VL5dDXKz01UuEd88Df+KzynaohSL9fBh096KWAxSKZQDI2uBrVqtvRM4rwrIrRRKsdLNML/lnaaVSRioA==} + engines: {node: '>= 0.8'} + + unbox-primitive@1.0.2: + resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + + unbox-primitive@1.1.0: + resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} + engines: {node: '>= 0.4'} + + undefsafe@2.0.5: + resolution: {integrity: sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==} + + underscore@1.12.1: + resolution: {integrity: sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==} + + underscore@1.13.6: + resolution: {integrity: sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A==} + + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} + + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} + + undici@7.10.0: + resolution: {integrity: sha512-u5otvFBOBZvmdjWLVW+5DAc9Nkq8f24g0O9oY7qw2JVIF1VocIFoyz9JFkuVOS2j41AufeO0xnlweJ2RLT8nGw==} + engines: {node: '>=20.18.1'} + + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + + unique-filename@1.1.1: + resolution: {integrity: sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==} + + unique-slug@2.0.2: + resolution: {integrity: sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==} + + universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + + universalify@2.0.0: + resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} + engines: {node: '>= 10.0.0'} + + unpipe@1.0.0: + resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} + engines: {node: '>= 0.8'} + + unplugin-icons@0.19.0: + resolution: {integrity: sha512-u5g/gIZPZEj1wUGEQxe9nzftOSqmblhusc+sL3cawIRoIt/xWpE6XYcPOfAeFTYNjSbRrX/3QiX89PFiazgU1w==} + peerDependencies: + '@svgr/core': '>=7.0.0' + '@svgx/core': ^1.0.1 + '@vue/compiler-sfc': ^3.0.2 || ^2.7.0 + vue-template-compiler: ^2.6.12 + vue-template-es2015-compiler: ^1.9.0 + peerDependenciesMeta: + '@svgr/core': + optional: true + '@svgx/core': + optional: true + '@vue/compiler-sfc': + optional: true + vue-template-compiler: + optional: true + vue-template-es2015-compiler: + optional: true + + unplugin-vue-components@0.27.3: + resolution: {integrity: sha512-5wg7lbdg5ZcrAQNzyYK+6gcg/DG8K6rO+f5YeuvqGHs/PhpapBvpA4O/0ex/pFthE5WgRk43iWuRZEMLVsdz4Q==} + engines: {node: '>=14'} + peerDependencies: + '@babel/parser': ^7.15.8 + '@nuxt/kit': ^3.2.2 + vue: 2 || 3 + peerDependenciesMeta: + '@babel/parser': + optional: true + '@nuxt/kit': + optional: true + + unplugin@1.11.0: + resolution: {integrity: sha512-3r7VWZ/webh0SGgJScpWl2/MRCZK5d3ZYFcNaeci/GQ7Teop7zf0Nl2pUuz7G21BwPd9pcUPOC5KmJ2L3WgC5g==} + engines: {node: '>=14.0.0'} + + unrs-resolver@1.9.2: + resolution: {integrity: sha512-VUyWiTNQD7itdiMuJy+EuLEErLj3uwX/EpHQF8EOf33Dq3Ju6VW1GXm+swk6+1h7a49uv9fKZ+dft9jU7esdLA==} + + untildify@4.0.0: + resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} + engines: {node: '>=8'} + + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + + upper-case-first@2.0.2: + resolution: {integrity: sha512-514ppYHBaKwfJRK/pNC6c/OxfGa0obSnAl106u97Ed0I625Nin96KAjttZF6ZL3e1XLtphxnqrOi9iWgm+u+bg==} + + upper-case@1.1.3: + resolution: {integrity: sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==} + + upper-case@2.0.2: + resolution: {integrity: sha512-KgdgDGJt2TpuwBUIjgG6lzw2GWFRCW9Qkfkiv0DxqHHLYJHmtmdUIKcZd8rHgFSjopVTlw6ggzCm1b8MFQwikg==} + + uri-js-replace@1.0.1: + resolution: {integrity: sha512-W+C9NWNLFOoBI2QWDp4UT9pv65r2w5Cx+3sTYFvtMdDBxkKt1syCqsUdSFAChbEe1uK5TfS04wt/nGwmaeIQ0g==} + + uri-js@4.4.1: + resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + + url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + + url-template@2.0.8: + resolution: {integrity: sha512-XdVKMF4SJ0nP/O7XIPB0JwAEuT9lDIYnNsK8yGVe43y0AWoKeJNdv3ZNWh7ksJ6KqQFjOO6ox/VEitLnaVNufw==} + + url-value-parser@2.2.0: + resolution: {integrity: sha512-yIQdxJpgkPamPPAPuGdS7Q548rLhny42tg8d4vyTNzFqvOnwqrgHXvgehT09U7fwrzxi3RxCiXjoNUNnNOlQ8A==} + engines: {node: '>=6.0.0'} + + url@0.11.4: + resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} + engines: {node: '>= 0.4'} + + use-sync-external-store@1.2.2: + resolution: {integrity: sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==} + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + + utf7@1.0.2: + resolution: {integrity: sha512-qQrPtYLLLl12NF4DrM9CvfkxkYI97xOb5dsnGZHE3teFr0tWiEZ9UdgMPczv24vl708cYMpe6mGXGHrotIp3Bw==} + + utf8@2.1.2: + resolution: {integrity: sha512-QXo+O/QkLP/x1nyi54uQiG0XrODxdysuQvE5dtVqv7F5K2Qb6FsN+qbr6KhF5wQ20tfcV3VQp0/2x1e1MRSPWg==} + + utf8@3.0.0: + resolution: {integrity: sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ==} + + util-deprecate@1.0.2: + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + + util@0.12.5: + resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} + + uuencode@0.0.4: + resolution: {integrity: sha512-yEEhCuCi5wRV7Z5ZVf9iV2gWMvUZqKJhAs1ecFdKJ0qzbyaVelmsE3QjYAamehfp9FKLiZbKldd+jklG3O0LfA==} + + uuid@10.0.0: + resolution: {integrity: sha512-8XkAphELsDnEGrDxUOHB3RGvXz6TeuYSGEZBOjtTtPm2lwhGBjLgOzLHB63IUWfBpNucQjND6d3AOudO+H3RWQ==} + hasBin: true + + uuid@11.0.2: + resolution: {integrity: sha512-14FfcOJmqdjbBPdDjFQyk/SdT4NySW4eM0zcG+HqbHP5jzuH56xO3J1DGhgs/cEMCfwYi3HQI1gnTO62iaG+tQ==} + hasBin: true + + uuid@11.1.0: + resolution: {integrity: sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==} + hasBin: true + + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} + hasBin: true + + v-code-diff@1.13.1: + resolution: {integrity: sha512-9LTV1dZhC1oYTntyB94vfumGgsfIX5u0fEDSI2Txx4vCE5sI5LkgeLJRRy2SsTVZmDcV+R73sBr0GpPn0TJxMw==} + peerDependencies: + '@vue/composition-api': ^1.4.9 + vue: ^2.6.0 || >=3.0.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + v3-infinite-loading@1.2.2: + resolution: {integrity: sha512-MWJc6yChnqeUasBFJ3Enu8IGPcQgRMSTrAEtT1MsHBEx+QjwvNTaY8o+8V9DgVt1MVhQSl3MC55hsaWLJmpRMw==} + + v8-compile-cache-lib@3.0.1: + resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} + + v8-to-istanbul@9.1.0: + resolution: {integrity: sha512-6z3GW9x8G1gd+JIIgQQQxXuiJtCXeAjp6RaPEPLv62mH3iPHPxV6W3robxtCzNErRo6ZwTmzWhsbNvjyEBKzKA==} + engines: {node: '>=10.12.0'} + + valid-data-url@3.0.1: + resolution: {integrity: sha512-jOWVmzVceKlVVdwjNSenT4PbGghU0SBIizAev8ofZVgivk/TVHXSbNL8LP6M3spZvkR9/QolkyJavGSX5Cs0UA==} + engines: {node: '>=10'} + + validator@13.7.0: + resolution: {integrity: sha512-nYXQLCBkpJ8X6ltALua9dRrZDHVYxjJ1wgskNt1lH9fzGjs3tgojGSCBjmEPwkWS1y29+DrizMTW19Pr9uB2nw==} + engines: {node: '>= 0.10'} + + vary@1.1.2: + resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} + engines: {node: '>= 0.8'} + + verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + + vite-node@3.1.3: + resolution: {integrity: sha512-uHV4plJ2IxCl4u1up1FQRrqclylKAogbtBfOTwcuJ28xFi+89PZ57BRh+naIRvH70HPwxy5QHYzg1OrEaC7AbA==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite-plugin-dts@4.5.3: + resolution: {integrity: sha512-P64VnD00dR+e8S26ESoFELqc17+w7pKkwlBpgXteOljFyT0zDwD8hH4zXp49M/kciy//7ZbVXIwQCekBJjfWzA==} + peerDependencies: + typescript: 5.9.2 + vite: '*' + peerDependenciesMeta: + vite: + optional: true + + vite-plugin-node-polyfills@0.24.0: + resolution: {integrity: sha512-GA9QKLH+vIM8NPaGA+o2t8PDfFUl32J8rUp1zQfMKVJQiNkOX4unE51tR6ppl6iKw5yOrDAdSH7r/UIFLCVhLw==} + peerDependencies: + vite: ^2.0.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 + + vite-plugin-static-copy@2.2.0: + resolution: {integrity: sha512-ytMrKdR9iWEYHbUxs6x53m+MRl4SJsOSoMu1U1+Pfg0DjPeMlsRVx3RR5jvoonineDquIue83Oq69JvNsFSU5w==} + engines: {node: ^18.0.0 || >=20.0.0} + peerDependencies: + vite: ^5.0.0 || ^6.0.0 + + vite-svg-loader@5.1.0: + resolution: {integrity: sha512-M/wqwtOEjgb956/+m5ZrYT/Iq6Hax0OakWbokj8+9PXOnB7b/4AxESHieEtnNEy7ZpjsjYW1/5nK8fATQMmRxw==} + peerDependencies: + vue: '>=3.2.13' + + vite@6.3.5: + resolution: {integrity: sha512-cZn6NDFE7wdTpINgs++ZJ4N49W2vRp8LCKrn3Ob1kYNtOo21vfDoaV5GzBfLU4MovSAB8uNRm4jgzVQZ+mBzPQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^20.17.50 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vite@7.0.0: + resolution: {integrity: sha512-ixXJB1YRgDIw2OszKQS9WxGHKwLdCsbQNkpJN171udl6szi/rIySHL6/Os3s2+oE4P/FLD4dxg4mD7Wust+u5g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.17.50 + jiti: '>=1.21.0' + less: ^4.0.0 + lightningcss: ^1.21.0 + sass: ^1.70.0 + sass-embedded: ^1.70.0 + stylus: '>=0.54.8' + sugarss: ^5.0.0 + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest-mock-extended@3.1.0: + resolution: {integrity: sha512-vCM0VkuocOUBwwqwV7JB7YStw07pqeKvEIrZnR8l3PtwYi6rAAJAyJACeC1UYNfbQWi85nz7EdiXWBFI5hll2g==} + peerDependencies: + typescript: 5.9.2 + vitest: '>=3.0.0' + + vitest@3.1.3: + resolution: {integrity: sha512-188iM4hAHQ0km23TN/adso1q5hhwKqUpv+Sd6p5sOuh6FhQnRNW3IsiIpvxqahtBabsJ2SLZgmGSpcYK4wQYJw==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^20.17.50 + '@vitest/browser': 3.1.3 + '@vitest/ui': 3.1.3 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vm-browserify@1.1.2: + resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} + + void-elements@3.1.0: + resolution: {integrity: sha512-Dhxzh5HZuiHQhbvTW9AMetFfBHDMYpo23Uo9btPXgdYP+3T5S+p+jgNy7spra+veYhBP2dCSgxR/i2Y02h5/6w==} + engines: {node: '>=0.10.0'} + + vscode-uri@3.0.8: + resolution: {integrity: sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==} + + vue-agile@2.0.0: + resolution: {integrity: sha512-5xkSLJQNRdQ7qpEnXj5FgLg33XKRHaTZKGP5qkvteOc/uGJX89MYCjPSgdNqJ1GYFGfdGAp0jvhihW8OMuXS3g==} + + vue-boring-avatars@1.3.0: + resolution: {integrity: sha512-X0Ur6+aYE8jXjKyY/LaWKrZ+FeJmc4xsirdz/lLuvm68wiokJc26Y9WpYPDuS1L2GwbvRDqLrnd9F2eL46buzA==} + peerDependencies: + vue: ^3.0.0 + + vue-chartjs@5.2.0: + resolution: {integrity: sha512-d3zpKmGZr2OWHQ1xmxBcAn5ShTG917+/UCLaSpaCDDqT0U7DBsvFzTs69ZnHCgKoXT55GZDW8YEj9Av+dlONLA==} + peerDependencies: + chart.js: ^4.1.1 + vue: ^3.0.0-0 || ^2.7.0 + + vue-component-meta@2.1.10: + resolution: {integrity: sha512-YEFSau36lLCJNvoM6eynAcq891Y6HKIEdEk3PCzCyNVySeYJAXgE/9iCYqQzLtBJlKg/bBpImz8VbUZsh4N/7Q==} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + vue-component-type-helpers@2.1.10: + resolution: {integrity: sha512-lfgdSLQKrUmADiSV6PbBvYgQ33KF3Ztv6gP85MfGaGaSGMTXORVaHT1EHfsqCgzRNBstPKYDmvAV9Do5CmJ07A==} + + vue-component-type-helpers@2.2.10: + resolution: {integrity: sha512-iDUO7uQK+Sab2tYuiP9D1oLujCWlhHELHMgV/cB13cuGbG4qwkLHvtfWb6FzvxrIOPDnU0oHsz2MlQjhYDeaHA==} + + vue-component-type-helpers@2.2.12: + resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} + + vue-component-type-helpers@3.0.6: + resolution: {integrity: sha512-6CRM8X7EJqWCJOiKPvSLQG+hJPb/Oy2gyJx3pLjUEhY7PuaCthQu3e0zAGI1lqUBobrrk9IT0K8sG2GsCluxoQ==} + + vue-demi@0.14.10: + resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} + engines: {node: '>=12'} + hasBin: true + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^3.0.0-0 || ^2.6.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + vue-docgen-api@4.76.0: + resolution: {integrity: sha512-Nykmg/Net1BhoS1tENGqcevDdgha4us0x2Xnin7n5SxxAH6+s10FXTWtg7E9+jhC3GWEE83lcFHMS/Ml4C1dog==} + peerDependencies: + vue: '>=2' + + vue-eslint-parser@10.1.3: + resolution: {integrity: sha512-dbCBnd2e02dYWsXoqX5yKUZlOt+ExIpq7hmHKPb5ZqKcjf++Eo0hMseFTZMLKThrUk61m+Uv6A2YSBve6ZvuDQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + + vue-github-button@3.1.3: + resolution: {integrity: sha512-ZdOnUuYJL/wUsxISsC96TARzCdf1twaWooZoI14+g4RHsJltPY+Agw6Ox6pjuMqMX0uhSK1JOMFUFNCQGlcZGA==} + + vue-i18n@11.1.10: + resolution: {integrity: sha512-C+IwnSg8QDSOAox0gdFYP5tsKLx5jNWxiawNoiNB/Tw4CReXmM1VJMXbduhbrEzAFLhreqzfDocuSVjGbxQrag==} + engines: {node: '>= 16'} + peerDependencies: + vue: ^3.0.0 + + vue-inbrowser-compiler-independent-utils@4.71.1: + resolution: {integrity: sha512-K3wt3iVmNGaFEOUR4JIThQRWfqokxLfnPslD41FDZB2ajXp789+wCqJyGYlIFsvEQ2P61PInw6/ph5iiqg51gg==} + peerDependencies: + vue: '>=2' + + vue-json-pretty@2.2.4: + resolution: {integrity: sha512-JX80b3QDrspcH43C53CdtYeq/froApQGSV5y43bEMWFj2LGOxB96aH1VmvrFA21nD1WTP6nwfFMQqGXuS4jyFQ==} + engines: {node: '>= 10.0.0', npm: '>= 5.0.0'} + peerDependencies: + vue: '>=3.0.0' + + vue-markdown-render@2.2.1: + resolution: {integrity: sha512-XkYnC0PMdbs6Vy6j/gZXSvCuOS0787Se5COwXlepRqiqPiunyCIeTPQAO2XnB4Yl04EOHXwLx5y6IuszMWSgyQ==} + peerDependencies: + vue: ^3.3.4 + + vue-observe-visibility@2.0.0-alpha.1: + resolution: {integrity: sha512-flFbp/gs9pZniXR6fans8smv1kDScJ8RS7rEpMjhVabiKeq7Qz3D9+eGsypncjfIyyU84saU88XZ0zjbD6Gq/g==} + peerDependencies: + vue: ^3.0.0 + + vue-resize@2.0.0-alpha.1: + resolution: {integrity: sha512-7+iqOueLU7uc9NrMfrzbG8hwMqchfVfSzpVlCMeJQe4pyibqyoifDNbKTZvwxZKDvGkB+PdFeKvnGZMoEb8esg==} + peerDependencies: + vue: ^3.0.0 + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue-tsc@2.2.8: + resolution: {integrity: sha512-jBYKBNFADTN+L+MdesNX/TB3XuDSyaWynKMDgR+yCSln0GQ9Tfb7JS2lr46s2LiFUT1WsmfWsSvIElyxzOPqcQ==} + hasBin: true + peerDependencies: + typescript: 5.9.2 + + vue-virtual-scroller@2.0.0-beta.8: + resolution: {integrity: sha512-b8/f5NQ5nIEBRTNi6GcPItE4s7kxNHw2AIHLtDp+2QvqdTjVN0FgONwX9cr53jWRgnu+HRLPaWDOR2JPI5MTfQ==} + peerDependencies: + vue: ^3.2.0 + + vue3-touch-events@4.1.3: + resolution: {integrity: sha512-uXTclRzn7de1mgiDIZ8N4J/wnWl1vBPLTWr60fqoLXu7ifhDKpl83Q2m9qA20KfEiAy+L4X/xXGc5ptGmdPh4A==} + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: 5.9.2 + peerDependenciesMeta: + typescript: + optional: true + + vuedraggable@4.1.0: + resolution: {integrity: sha512-FU5HCWBmsf20GpP3eudURW3WdWTKIbEIQxh9/8GE806hydR9qZqRRxRE3RjqX7PkuLuMQG/A7n3cfj9rCEchww==} + peerDependencies: + vue: ^3.0.1 + + w3c-keyname@2.2.6: + resolution: {integrity: sha512-f+fciywl1SJEniZHD6H+kUO8gOnwIr7f4ijKA6+ZvJFjeGi1r4PDLl53Ayud9O/rk64RqgoQine0feoeOU0kXg==} + + w3c-xmlserializer@3.0.0: + resolution: {integrity: sha512-3WFqGEgSXIyGhOmAFtlicJNMjEps8b1MG31NCA0/vOF9+nKMUW1ckhi9cnNHmf88Rzw5V+dwIwsm2C7X8k9aQg==} + engines: {node: '>=12'} + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + wait-on@8.0.2: + resolution: {integrity: sha512-qHlU6AawrgAIHlueGQHQ+ETcPLAauXbnoTKl3RKq20W0T8x0DKVAo5xWIYjHSyvHxQlcYbFdR0jp4T9bDVITFA==} + engines: {node: '>=12.0.0'} + hasBin: true + + walkdir@0.4.1: + resolution: {integrity: sha512-3eBwRyEln6E1MSzcxcVpQIhRG8Q1jLvEqRmCZqS3dsfXEDR/AhOF4d+jHg1qvDCpYaVRZjENPQyrVxAkQqxPgQ==} + engines: {node: '>=6.0.0'} + + walker@1.0.8: + resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} + + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + + weaviate-client@3.6.2: + resolution: {integrity: sha512-6z+Du0Sp+nVp4Mhsn25sd+Qw6fr60vbyUS1e3gTZqtMrxLuNC1xgA0J/MHu5oHcm6moCBqT/2AQCt4ZV4fYSaw==} + engines: {node: '>=18.0.0'} + + web-resource-inliner@6.0.1: + resolution: {integrity: sha512-kfqDxt5dTB1JhqsCUQVFDj0rmY+4HLwGQIsLPbyrsN9y9WV/1oFDSx3BQ4GfCv9X+jVeQ7rouTqwK53rA/7t8A==} + engines: {node: '>=10.0.0'} + + web-streams-polyfill@3.2.1: + resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==} + engines: {node: '>= 8'} + + web-streams-polyfill@4.0.0-beta.3: + resolution: {integrity: sha512-QW95TCTaHmsYfHDybGMwO5IJIM93I/6vTRk+daHTWFPhwh+C8Cg7j7XyKrwrj8Ib6vYXe0ocYNrmzY4xAAN6ug==} + engines: {node: '>= 14'} + + web-tree-sitter@0.24.3: + resolution: {integrity: sha512-uR9YNewr1S2EzPKE+y39nAwaTyobBaZRG/IsfkB/OT4v0lXtNj5WjtHKgn2h7eOYUWIZh5rK9Px7tI6S9CRKdA==} + + webidl-conversions@3.0.1: + resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} + + webidl-conversions@4.0.2: + resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + webpack-sources@3.2.3: + resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} + engines: {node: '>=10.13.0'} + + webpack-virtual-modules@0.6.1: + resolution: {integrity: sha512-poXpCylU7ExuvZK8z+On3kX+S8o/2dQ/SVYueKA0D4WEMXROXgY8Ez50/bQEUmvoSMMrWcrJqCHuhAbsiwg7Dg==} + + whatwg-encoding@2.0.0: + resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-fetch@3.6.20: + resolution: {integrity: sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==} + + whatwg-mimetype@3.0.0: + resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==} + engines: {node: '>=12'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@11.0.0: + resolution: {integrity: sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==} + engines: {node: '>=12'} + + whatwg-url@13.0.0: + resolution: {integrity: sha512-9WWbymnqj57+XEuqADHrCJ2eSXzn8WXIW/YSGaZtb2WKAInQ6CHfaUUcTyyver0p8BDg5StLQq8h1vtZuwmOig==} + engines: {node: '>=16'} + + whatwg-url@14.0.0: + resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} + engines: {node: '>=18'} + + whatwg-url@5.0.0: + resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} + + whatwg-url@7.1.0: + resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} + + which-boxed-primitive@1.0.2: + resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} + + which-boxed-primitive@1.1.1: + resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==} + engines: {node: '>= 0.4'} + + which-builtin-type@1.2.1: + resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==} + engines: {node: '>= 0.4'} + + which-collection@1.0.2: + resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.15: + resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} + engines: {node: '>= 0.4'} + + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} + engines: {node: '>= 0.4'} + + which@1.3.1: + resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==} + hasBin: true + + which@2.0.2: + resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} + engines: {node: '>= 8'} + hasBin: true + + which@5.0.0: + resolution: {integrity: sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==} + engines: {node: ^18.17.0 || >=20.5.0} + hasBin: true + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + wide-align@1.1.5: + resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} + + widest-line@3.1.0: + resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} + engines: {node: '>=8'} + + winston-transport@4.8.0: + resolution: {integrity: sha512-qxSTKswC6llEMZKgCQdaWgDuMJQnhuvF5f2Nk3SNXc4byfQ+voo2mX1Px9dkNOuR8p0KAjfPG29PuYUSIb+vSA==} + engines: {node: '>= 12.0.0'} + + winston@3.14.2: + resolution: {integrity: sha512-CO8cdpBB2yqzEf8v895L+GNKYJiEq8eKlHU38af3snQBQ+sdAIUepjMSguOIJC7ICbzm0ZI+Af2If4vIJrtmOg==} + engines: {node: '>= 12.0.0'} + + wiremock-rest-client@1.11.0: + resolution: {integrity: sha512-2EBj80RJdwJNpCnetjUwkdTgnMW4Bq8sFdtR84hmjFZPhW2eE0HmBfhxTztTQ2PtoGOoqIlXh6VK2fvD4pYQ6Q==} + engines: {node: ^12.22.0 || ^14.15.0 || >=16.0.0} + hasBin: true + + with@7.0.2: + resolution: {integrity: sha512-RNGKj82nUPg3g5ygxkQl0R937xLyho1J24ItRCBTr/m1YnZkzJy1hUiHUJrc/VlsDQzsCnInEGSg3bci0Lmd4w==} + engines: {node: '>= 10.0.0'} + + word-wrap@1.2.3: + resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} + engines: {node: '>=0.10.0'} + + wordwrap@1.0.0: + resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} + + worker-timers-broker@6.1.8: + resolution: {integrity: sha512-FUCJu9jlK3A8WqLTKXM9E6kAmI/dR1vAJ8dHYLMisLNB/n3GuaFIjJ7pn16ZcD1zCOf7P6H62lWIEBi+yz/zQQ==} + + worker-timers-worker@7.0.71: + resolution: {integrity: sha512-ks/5YKwZsto1c2vmljroppOKCivB/ma97g9y77MAAz2TBBjPPgpoOiS1qYQKIgvGTr2QYPT3XhJWIB6Rj2MVPQ==} + + worker-timers@7.1.8: + resolution: {integrity: sha512-R54psRKYVLuzff7c1OTFcq/4Hue5Vlz4bFtNEIarpSiCYhpifHU3aIQI29S84o1j87ePCYqbmEJPqwBTf+3sfw==} + + workerpool@9.3.3: + resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==} + + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + + wrap-ansi@7.0.0: + resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} + engines: {node: '>=10'} + + wrap-ansi@8.1.0: + resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} + engines: {node: '>=12'} + + wrappy@1.0.2: + resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} + + write-file-atomic@4.0.2: + resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} + engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} + + write-file-atomic@5.0.1: + resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} + engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + + ws@8.17.1: + resolution: {integrity: sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xlsx@https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz: + resolution: {tarball: https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz} + version: 0.20.2 + engines: {node: '>=0.8'} + hasBin: true + + xml-crypto@6.1.2: + resolution: {integrity: sha512-leBOVQdVi8FvPJrMYoum7Ici9qyxfE4kVi+AkpUoYCSXaQF4IlBm1cneTK9oAxR61LpYxTx7lNcsnBIeRpGW2w==} + engines: {node: '>=16'} + + xml-escape@1.1.0: + resolution: {integrity: sha512-B/T4sDK8Z6aUh/qNr7mjKAwwncIljFuUP+DO/D5hloYFj+90O88z8Wf7oSucZTHxBAsC1/CTP4rtx/x1Uf72Mg==} + + xml-name-validator@4.0.0: + resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} + engines: {node: '>=12'} + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xml2js@0.6.2: + resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} + engines: {node: '>=4.0.0'} + + xml@1.0.1: + resolution: {integrity: sha512-huCv9IH9Tcf95zuYCsQraZtWnJvBtLVE0QHMOs8bWyZAFZNDcYjsPq1nEx8jKA9y+Beo9v+7OBPRisQTjinQMw==} + + xmlbuilder@10.1.1: + resolution: {integrity: sha512-OyzrcFLL/nb6fMGHbiRDuPup9ljBycsdCypwuyg5AAHvyWzGfChJpCXMG88AGTIMFhGZ9RccFN1e6lhg3hkwKg==} + engines: {node: '>=4.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + + xmlhttprequest-ssl@3.1.0: + resolution: {integrity: sha512-UsofFE/khRRAcM9c3FGDEUSwupaQQC3Kme1brtz+B3N+RZHXGbD6AG6QzgWcunHzszqtOSMiZoPNrmHEBB2DjA==} + engines: {node: '>=12.0.0'} + + xmllint-wasm@3.0.1: + resolution: {integrity: sha512-t+aKQXJQNAt9/qLgCjhHUmCnPXAyqBKiyh8oV0ZwBMar/uB+5F40tqOJZ97JwLADcqQr5WB2bjCxLKrm+DHz1g==} + engines: {node: '>=10.5.0'} + + xpath@0.0.32: + resolution: {integrity: sha512-rxMJhSIoiO8vXcWvSifKqhvV96GjiD5wYb8/QHdoRyQvraTpp4IEv944nhGausZZ3u7dhQXteZuZbaqfpB7uYw==} + engines: {node: '>=0.6.0'} + + xpath@0.0.33: + resolution: {integrity: sha512-NNXnzrkDrAzalLhIUc01jO2mOzXGXh1JwPgkihcLLzw98c0WgYDmmjSh1Kl3wzaxSVWMuA+fe0WTWOBDWCBmNA==} + engines: {node: '>=0.6.0'} + + xregexp@2.0.0: + resolution: {integrity: sha512-xl/50/Cf32VsGq/1R8jJE5ajH1yMCQkpmoS10QbFZWl2Oor4H0Me64Pu2yxvsRWK3m6soJbmGfzSR7BYmDcWAA==} + + xss@1.0.15: + resolution: {integrity: sha512-FVdlVVC67WOIPvfOwhoMETV72f6GbW7aOabBC3WxN/oUdoEMDyLz4OgRv5/gck2ZeNqEQu+Tb0kloovXOfpYVg==} + engines: {node: '>= 0.10.0'} + hasBin: true + + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + + y18n@5.0.8: + resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} + engines: {node: '>=10'} + + yallist@3.1.1: + resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + + yaml-ast-parser@0.0.43: + resolution: {integrity: sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==} + + yaml@1.10.2: + resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} + engines: {node: '>= 6'} + + yaml@2.3.4: + resolution: {integrity: sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==} + engines: {node: '>= 14'} + + yamljs@0.3.0: + resolution: {integrity: sha512-C/FsVVhht4iPQYXOInoxUM/1ELSf9EsgKH34FofQOp6hwCPrW4vG4w5++TED3xRUo8gD7l0P1J1dLlDYzODsTQ==} + hasBin: true + + yargs-parser@20.2.9: + resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} + engines: {node: '>=10'} + + yargs-parser@21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} + engines: {node: '>=12'} + + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + + yargs@16.2.0: + resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} + engines: {node: '>=10'} + + yargs@17.0.1: + resolution: {integrity: sha512-xBBulfCc8Y6gLFcrPvtqKz9hz8SO0l1Ni8GgDekvBX2ro0HRQImDGnikfc33cgzcYUSncapnNcZDjVFIH3f6KQ==} + engines: {node: '>=12'} + + yargs@17.6.0: + resolution: {integrity: sha512-8H/wTDqlSwoSnScvV2N/JHfLWOKuh5MVla9hqLjK3nsfyy6Y4kDSYSvkU5YCUEPOSnRXfIyx3Sq+B/IWudTo4g==} + engines: {node: '>=12'} + + yargs@17.7.2: + resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} + engines: {node: '>=12'} + + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yn@3.1.1: + resolution: {integrity: sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==} + engines: {node: '>=6'} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + + yoctocolors@2.1.1: + resolution: {integrity: sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==} + engines: {node: '>=18'} + + yup@0.32.11: + resolution: {integrity: sha512-Z2Fe1bn+eLstG8DRR6FTavGD+MeAwyfmouhHsIUgaADz8jvFKbO/fXc2trJKZg+5EBjh4gGm3iU/t3onKlXHIg==} + engines: {node: '>=10'} + + z-vue-scan@0.0.35: + resolution: {integrity: sha512-isWALsDyRFhvGJrWCKbZ8ORYXmrWp+ewvoaBxBQe0WWvilzyuoTLW8IG5gL2kORLdTWmyj2j1NvehaJpKavJcw==} + peerDependencies: + '@vue/composition-api': ^1.0.0-rc.1 + vue: ^2.0.0 || >=3.0.0 + peerDependenciesMeta: + '@vue/composition-api': + optional: true + + zip-stream@6.0.1: + resolution: {integrity: sha512-zK7YHHz4ZXpW89AHXUPbQVGKI7uvkd3hzusTdotCg1UxyaVtg0zFJSTfW/Dq5f7OBBVnq6cZIaC8Ti4hb6dtCA==} + engines: {node: '>= 14'} + + zod-class@0.0.16: + resolution: {integrity: sha512-3A1l81VEUOxvSTGoNPsU4fTUY9CKin/HSySnXT3bIc+TJTDGCPbzSPE8W1VvwXqyzHEIWK608eFZja2uew9Ivw==} + peerDependencies: + zod: ^3 + + zod-to-json-schema@3.23.3: + resolution: {integrity: sha512-TYWChTxKQbRJp5ST22o/Irt9KC5nj7CdBKYB/AosCRdj/wxEMvv4NNaj9XVUHDOIp53ZxArGhnw5HMZziPFjog==} + peerDependencies: + zod: ^3.23.3 + + zod-to-json-schema@3.24.6: + resolution: {integrity: sha512-h/z3PKvcTcTetyjl1fkj79MHNEjm+HpD6NXheWjzOekY7kV+lwDYnHw+ivHkijnCSMz1yJaWBD9vu/Fcmk+vEg==} + peerDependencies: + zod: ^3.24.1 + + zod@3.25.67: + resolution: {integrity: sha512-idA2YXwpCdqUSKRCACDE6ItZD9TZzy3OZMtpfLoh6oPR47lipysRrJfjzMqFxQ3uJuUPyUeWe1r9vLH33xO/Qw==} + + zx@8.1.4: + resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==} + engines: {node: '>= 12.17.0'} + hasBin: true + +snapshots: + + '@aashutoshrathi/word-wrap@1.2.6': {} + + '@acuminous/bitsyntax@0.1.2': + dependencies: + buffer-more-ints: 1.0.0 + debug: 4.4.1(supports-color@8.1.1) + safe-buffer: 5.1.2 + transitivePeerDependencies: + - supports-color + + '@adobe/css-tools@4.4.0': {} + + '@alloc/quick-lru@5.2.0': {} + + '@ampproject/remapping@2.3.0': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + + '@antfu/install-pkg@0.1.1': + dependencies: + execa: 5.1.1 + find-up: 5.0.0 + + '@antfu/install-pkg@0.3.3': + dependencies: + '@jsdevtools/ez-spawn': 3.0.4 + + '@antfu/utils@0.7.10': {} + + '@anthropic-ai/sdk@0.27.3(encoding@0.1.13)': + dependencies: + '@types/node': 20.19.10 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@anthropic-ai/sdk@0.56.0': {} + + '@apidevtools/json-schema-ref-parser@12.0.2': + dependencies: + '@jsdevtools/ono': 7.1.3 + '@types/json-schema': 7.0.15 + js-yaml: 4.1.0 + + '@authenio/xml-encryption@2.0.2': + dependencies: + '@xmldom/xmldom': 0.8.10 + escape-html: 1.0.3 + xpath: 0.0.32 + + '@aws-crypto/crc32@3.0.0': + dependencies: + '@aws-crypto/util': 3.0.0 + '@aws-sdk/types': 3.804.0 + tslib: 2.8.1 + + '@aws-crypto/crc32@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.804.0 + tslib: 2.8.1 + + '@aws-crypto/crc32c@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.804.0 + tslib: 2.8.1 + + '@aws-crypto/sha1-browser@5.2.0': + dependencies: + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-crypto/sha256-browser@5.2.0': + dependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-crypto/supports-web-crypto': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-locate-window': 3.310.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.6.2 + + '@aws-crypto/sha256-js@5.2.0': + dependencies: + '@aws-crypto/util': 5.2.0 + '@aws-sdk/types': 3.804.0 + tslib: 2.6.2 + + '@aws-crypto/supports-web-crypto@5.2.0': + dependencies: + tslib: 2.8.1 + + '@aws-crypto/util@3.0.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-utf8-browser': 3.259.0 + tslib: 2.8.1 + + '@aws-crypto/util@5.2.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + + '@aws-sdk/client-bedrock-agent-runtime@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/eventstream-serde-browser': 4.0.2 + '@smithy/eventstream-serde-config-resolver': 4.1.0 + '@smithy/eventstream-serde-node': 4.0.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-bedrock-runtime@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/eventstream-handler-node': 3.804.0 + '@aws-sdk/middleware-eventstream': 3.804.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/eventstream-serde-browser': 4.0.2 + '@smithy/eventstream-serde-config-resolver': 4.1.0 + '@smithy/eventstream-serde-node': 4.0.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-cognito-identity@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-kendra@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-s3@3.808.0': + dependencies: + '@aws-crypto/sha1-browser': 5.2.0 + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-bucket-endpoint': 3.808.0 + '@aws-sdk/middleware-expect-continue': 3.804.0 + '@aws-sdk/middleware-flexible-checksums': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-location-constraint': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-sdk-s3': 3.808.0 + '@aws-sdk/middleware-ssec': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/signature-v4-multi-region': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@aws-sdk/xml-builder': 3.804.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/eventstream-serde-browser': 4.0.2 + '@smithy/eventstream-serde-config-resolver': 4.1.0 + '@smithy/eventstream-serde-node': 4.0.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-blob-browser': 4.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/hash-stream-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/md5-js': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.3 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sagemaker@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + '@smithy/util-waiter': 4.0.3 + '@types/uuid': 9.0.8 + tslib: 2.8.1 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-secrets-manager@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + '@types/uuid': 9.0.8 + tslib: 2.6.2 + uuid: 9.0.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso-oidc@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/client-sso@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/core@3.808.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/core': 3.3.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + fast-xml-parser: 4.4.1 + tslib: 2.6.2 + + '@aws-sdk/credential-provider-cognito-identity@3.808.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-env@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-http@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-ini@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-env': 3.808.0 + '@aws-sdk/credential-provider-http': 3.808.0 + '@aws-sdk/credential-provider-process': 3.808.0 + '@aws-sdk/credential-provider-sso': 3.808.0 + '@aws-sdk/credential-provider-web-identity': 3.808.0 + '@aws-sdk/nested-clients': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/credential-provider-imds': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-node@3.808.0': + dependencies: + '@aws-sdk/credential-provider-env': 3.808.0 + '@aws-sdk/credential-provider-http': 3.808.0 + '@aws-sdk/credential-provider-ini': 3.808.0 + '@aws-sdk/credential-provider-process': 3.808.0 + '@aws-sdk/credential-provider-sso': 3.808.0 + '@aws-sdk/credential-provider-web-identity': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/credential-provider-imds': 4.0.4 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-process@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/credential-provider-sso@3.808.0': + dependencies: + '@aws-sdk/client-sso': 3.808.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/token-providers': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-provider-web-identity@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/nested-clients': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/credential-providers@3.808.0': + dependencies: + '@aws-sdk/client-cognito-identity': 3.808.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/credential-provider-cognito-identity': 3.808.0 + '@aws-sdk/credential-provider-env': 3.808.0 + '@aws-sdk/credential-provider-http': 3.808.0 + '@aws-sdk/credential-provider-ini': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@aws-sdk/credential-provider-process': 3.808.0 + '@aws-sdk/credential-provider-sso': 3.808.0 + '@aws-sdk/credential-provider-web-identity': 3.808.0 + '@aws-sdk/nested-clients': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/credential-provider-imds': 4.0.4 + '@smithy/node-config-provider': 4.1.1 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/eventstream-handler-node@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/eventstream-codec': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-bucket-endpoint@3.808.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/node-config-provider': 4.1.1 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-eventstream@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-expect-continue@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-flexible-checksums@3.808.0': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@aws-crypto/crc32c': 5.2.0 + '@aws-crypto/util': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/is-array-buffer': 4.0.0 + '@smithy/node-config-provider': 4.1.1 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-host-header@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-location-constraint@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-logger@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-recursion-detection@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@aws-sdk/middleware-sdk-s3@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-arn-parser': 3.804.0 + '@smithy/core': 3.3.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-ssec@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/middleware-user-agent@3.808.0': + dependencies: + '@aws-sdk/core': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@smithy/core': 3.3.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@aws-sdk/nested-clients@3.808.0': + dependencies: + '@aws-crypto/sha256-browser': 5.2.0 + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/core': 3.808.0 + '@aws-sdk/middleware-host-header': 3.804.0 + '@aws-sdk/middleware-logger': 3.804.0 + '@aws-sdk/middleware-recursion-detection': 3.804.0 + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/region-config-resolver': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@aws-sdk/util-endpoints': 3.808.0 + '@aws-sdk/util-user-agent-browser': 3.804.0 + '@aws-sdk/util-user-agent-node': 3.808.0 + '@smithy/config-resolver': 4.1.2 + '@smithy/core': 3.3.2 + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/hash-node': 4.0.2 + '@smithy/invalid-dependency': 4.0.2 + '@smithy/middleware-content-length': 4.0.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-retry': 4.1.6 + '@smithy/middleware-serde': 4.0.4 + '@smithy/middleware-stack': 4.0.2 + '@smithy/node-config-provider': 4.1.1 + '@smithy/node-http-handler': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-base64': 4.0.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-body-length-node': 4.0.0 + '@smithy/util-defaults-mode-browser': 4.0.13 + '@smithy/util-defaults-mode-node': 4.0.13 + '@smithy/util-endpoints': 3.0.4 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/protocol-http@3.374.0': + dependencies: + '@smithy/protocol-http': 1.2.0 + tslib: 2.8.1 + + '@aws-sdk/region-config-resolver@3.808.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/node-config-provider': 4.1.1 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.6.2 + + '@aws-sdk/signature-v4-multi-region@3.808.0': + dependencies: + '@aws-sdk/middleware-sdk-s3': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/signature-v4': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@aws-sdk/signature-v4@3.374.0': + dependencies: + '@smithy/signature-v4': 1.1.0 + tslib: 2.8.1 + + '@aws-sdk/token-providers@3.808.0': + dependencies: + '@aws-sdk/nested-clients': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - aws-crt + + '@aws-sdk/types@3.804.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@aws-sdk/util-arn-parser@3.804.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-endpoints@3.808.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.2.0 + '@smithy/util-endpoints': 3.0.4 + tslib: 2.6.2 + + '@aws-sdk/util-locate-window@3.310.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/util-user-agent-browser@3.804.0': + dependencies: + '@aws-sdk/types': 3.804.0 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@aws-sdk/util-user-agent-node@3.808.0': + dependencies: + '@aws-sdk/middleware-user-agent': 3.808.0 + '@aws-sdk/types': 3.804.0 + '@smithy/node-config-provider': 4.1.1 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@aws-sdk/util-utf8-browser@3.259.0': + dependencies: + tslib: 2.8.1 + + '@aws-sdk/xml-builder@3.804.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@azure/abort-controller@1.1.0': + dependencies: + tslib: 2.8.1 + + '@azure/abort-controller@2.0.0': + dependencies: + tslib: 2.8.1 + + '@azure/abort-controller@2.1.2': + dependencies: + tslib: 2.8.1 + + '@azure/core-auth@1.6.0': + dependencies: + '@azure/abort-controller': 2.0.0 + '@azure/core-util': 1.7.0 + tslib: 2.8.1 + + '@azure/core-auth@1.9.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.12.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-client@1.9.2': + dependencies: + '@azure/abort-controller': 2.0.0 + '@azure/core-auth': 1.6.0 + '@azure/core-rest-pipeline': 1.9.2 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.7.0 + '@azure/logger': 1.0.3 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@1.3.0': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.20.0 + transitivePeerDependencies: + - supports-color + + '@azure/core-http-compat@2.1.2': + dependencies: + '@azure/abort-controller': 2.0.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.9.2 + transitivePeerDependencies: + - supports-color + + '@azure/core-lro@2.4.0': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/logger': 1.0.3 + tslib: 2.8.1 + + '@azure/core-paging@1.3.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-rest-pipeline@1.20.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.12.0 + '@azure/logger': 1.0.3 + '@typespec/ts-http-runtime': 0.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-rest-pipeline@1.9.2': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.6.0 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.7.0 + '@azure/logger': 1.0.3 + form-data: 4.0.4 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + tslib: 2.8.1 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.0.1': + dependencies: + tslib: 2.8.1 + + '@azure/core-tracing@1.2.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.12.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@typespec/ts-http-runtime': 0.2.2 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-util@1.7.0': + dependencies: + '@azure/abort-controller': 2.0.0 + tslib: 2.8.1 + + '@azure/core-xml@1.4.5': + dependencies: + fast-xml-parser: 5.2.3 + tslib: 2.8.1 + + '@azure/identity@4.3.0': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.12.0 + '@azure/logger': 1.0.3 + '@azure/msal-browser': 3.19.0 + '@azure/msal-node': 2.11.0 + events: 3.3.0 + jws: 4.0.0 + open: 8.4.0 + stoppable: 1.1.0 + tslib: 2.6.2 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-keys@4.6.0': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-http-compat': 1.3.0 + '@azure/core-lro': 2.4.0 + '@azure/core-paging': 1.3.0 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.12.0 + '@azure/logger': 1.0.3 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/keyvault-secrets@4.8.0': + dependencies: + '@azure/abort-controller': 1.1.0 + '@azure/core-auth': 1.6.0 + '@azure/core-client': 1.9.2 + '@azure/core-http-compat': 2.1.2 + '@azure/core-lro': 2.4.0 + '@azure/core-paging': 1.3.0 + '@azure/core-rest-pipeline': 1.9.2 + '@azure/core-tracing': 1.0.1 + '@azure/core-util': 1.7.0 + '@azure/logger': 1.0.3 + tslib: 2.6.2 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.0.3': + dependencies: + tslib: 2.8.1 + + '@azure/msal-browser@3.19.0': + dependencies: + '@azure/msal-common': 14.13.0 + + '@azure/msal-common@14.13.0': {} + + '@azure/msal-node@2.11.0': + dependencies: + '@azure/msal-common': 14.13.0 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + + '@azure/storage-blob@12.26.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.9.0 + '@azure/core-client': 1.9.2 + '@azure/core-http-compat': 2.1.2 + '@azure/core-lro': 2.4.0 + '@azure/core-paging': 1.3.0 + '@azure/core-rest-pipeline': 1.20.0 + '@azure/core-tracing': 1.2.0 + '@azure/core-util': 1.12.0 + '@azure/core-xml': 1.4.5 + '@azure/logger': 1.0.3 + events: 3.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.26.8': {} + + '@babel/compat-data@7.27.5': {} + + '@babel/core@7.26.10': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.26.10 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helpers': 7.26.10 + '@babel/parser': 7.27.5 + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.27.6 + convert-source-map: 2.0.0 + debug: 4.4.1(supports-color@8.1.1) + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.26.10': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.25.9': + dependencies: + '@babel/types': 7.27.6 + + '@babel/helper-compilation-targets@7.26.5': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.4 + lru-cache: 5.1.1 + semver: 7.7.2 + + '@babel/helper-compilation-targets@7.27.2': + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.25.0 + lru-cache: 5.1.1 + semver: 7.7.2 + + '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.10 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 7.7.2 + + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1(supports-color@8.1.1) + lodash.debounce: 4.0.8 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-member-expression-to-functions@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.27.6 + + '@babel/helper-plugin-utils@7.26.5': {} + + '@babel/helper-plugin-utils@7.27.1': {} + + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + dependencies: + '@babel/traverse': 7.26.10 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-string-parser@7.27.1': {} + + '@babel/helper-validator-identifier@7.27.1': {} + + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-validator-option@7.27.1': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.26.9 + '@babel/traverse': 7.26.10 + '@babel/types': 7.27.6 + transitivePeerDependencies: + - supports-color + + '@babel/helpers@7.26.10': + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.27.6 + + '@babel/parser@7.26.10': + dependencies: + '@babel/types': 7.26.10 + + '@babel/parser@7.27.5': + dependencies: + '@babel/types': 7.27.6 + + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.18.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-typescript@7.20.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + '@babel/traverse': 7.26.10 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/template': 7.26.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.26.10 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + regenerator-transform: 0.15.2 + + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.10) + '@babel/helper-plugin-utils': 7.26.5 + + '@babel/preset-env@7.26.9(@babel/core@7.26.10)': + dependencies: + '@babel/compat-data': 7.26.8 + '@babel/core': 7.26.10 + '@babel/helper-compilation-targets': 7.26.5 + '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.10) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.10) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.10) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.10) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.10) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.10) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.10) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.10) + '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.10) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.10) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.10) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.10) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.10) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.10) + core-js-compat: 3.43.0 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.10)': + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.6 + esutils: 2.0.3 + + '@babel/runtime@7.26.10': + dependencies: + regenerator-runtime: 0.14.1 + + '@babel/template@7.26.9': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + + '@babel/traverse@7.26.10': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.26.10 + '@babel/parser': 7.27.5 + '@babel/template': 7.26.9 + '@babel/types': 7.27.6 + debug: 4.4.1(supports-color@8.1.1) + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/types@7.26.10': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 + + '@babel/types@7.27.6': + dependencies: + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + + '@balena/dockerignore@1.0.2': {} + + '@bcoe/v8-coverage@0.2.3': {} + + '@bcoe/v8-coverage@1.0.2': {} + + '@biomejs/biome@1.9.0': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.0 + '@biomejs/cli-darwin-x64': 1.9.0 + '@biomejs/cli-linux-arm64': 1.9.0 + '@biomejs/cli-linux-arm64-musl': 1.9.0 + '@biomejs/cli-linux-x64': 1.9.0 + '@biomejs/cli-linux-x64-musl': 1.9.0 + '@biomejs/cli-win32-arm64': 1.9.0 + '@biomejs/cli-win32-x64': 1.9.0 + + '@biomejs/cli-darwin-arm64@1.9.0': + optional: true + + '@biomejs/cli-darwin-x64@1.9.0': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.0': + optional: true + + '@biomejs/cli-linux-arm64@1.9.0': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.0': + optional: true + + '@biomejs/cli-linux-x64@1.9.0': + optional: true + + '@biomejs/cli-win32-arm64@1.9.0': + optional: true + + '@biomejs/cli-win32-x64@1.9.0': + optional: true + + '@browserbasehq/sdk@2.6.0(encoding@0.1.13)': + dependencies: + '@types/node': 20.19.10 + '@types/node-fetch': 2.6.13 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@browserbasehq/stagehand@1.9.0(@playwright/test@1.54.2)(deepmerge@4.3.1)(dotenv@16.6.1)(encoding@0.1.13)(openai@5.12.2(ws@8.18.3)(zod@3.25.67))(zod@3.25.67)': + dependencies: + '@anthropic-ai/sdk': 0.27.3(encoding@0.1.13) + '@browserbasehq/sdk': 2.6.0(encoding@0.1.13) + '@playwright/test': 1.54.2 + deepmerge: 4.3.1 + dotenv: 16.6.1 + openai: 5.12.2(ws@8.18.3)(zod@3.25.67) + sharp: 0.33.5 + ws: 8.18.3 + zod: 3.25.67 + zod-to-json-schema: 3.24.6(zod@3.25.67) + transitivePeerDependencies: + - bufferutil + - encoding + - utf-8-validate + + '@cfworker/json-schema@4.1.0': {} + + '@chromatic-com/storybook@3.2.5(react@18.2.0)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + chromatic: 11.27.0 + filesize: 10.1.0 + jsonfile: 6.1.0 + react-confetti: 6.1.0(react@18.2.0) + storybook: 8.6.4(prettier@3.6.2) + strip-ansi: 7.1.0 + transitivePeerDependencies: + - '@chromatic-com/cypress' + - '@chromatic-com/playwright' + - react + + '@clack/core@0.5.0': + dependencies: + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@clack/prompts@0.11.0': + dependencies: + '@clack/core': 0.5.0 + picocolors: 1.1.1 + sisteransi: 1.0.5 + + '@codemirror/autocomplete@6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0)': + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.1.0 + + '@codemirror/autocomplete@6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1)': + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.2.1 + + '@codemirror/commands@6.5.0': + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.1.0 + + '@codemirror/lang-css@6.0.1(@codemirror/view@6.26.3)(@lezer/common@1.1.0)': + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@lezer/css': 1.1.1 + transitivePeerDependencies: + - '@codemirror/view' + - '@lezer/common' + + '@codemirror/lang-javascript@6.2.2': + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/language': 6.10.1 + '@codemirror/lint': 6.8.0 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.1.0 + '@lezer/javascript': 1.0.2 + + '@codemirror/lang-json@6.0.1': + dependencies: + '@codemirror/language': 6.10.1 + '@lezer/json': 1.0.0 + + '@codemirror/lang-python@6.1.6(@codemirror/view@6.26.3)': + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.2.1) + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@lezer/common': 1.2.1 + '@lezer/python': 1.1.5 + transitivePeerDependencies: + - '@codemirror/view' + + '@codemirror/language@6.10.1': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.1.0 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + style-mod: 4.1.0 + + '@codemirror/language@6.9.3': + dependencies: + '@codemirror/state': 6.3.3 + '@codemirror/view': 6.22.3 + '@lezer/common': 1.1.0 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + style-mod: 4.1.0 + + '@codemirror/lint@6.8.0': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + crelt: 1.0.5 + + '@codemirror/search@6.5.6': + dependencies: + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + crelt: 1.0.5 + + '@codemirror/state@6.3.3': {} + + '@codemirror/state@6.4.1': {} + + '@codemirror/view@6.22.3': + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.0 + w3c-keyname: 2.2.6 + + '@codemirror/view@6.26.3': + dependencies: + '@codemirror/state': 6.4.1 + style-mod: 4.1.0 + w3c-keyname: 2.2.6 + + '@colors/colors@1.5.0': + optional: true + + '@colors/colors@1.6.0': {} + + '@commander-js/extra-typings@12.1.0(commander@12.1.0)': + dependencies: + commander: 12.1.0 + + '@common.js/is-network-error@1.0.1': {} + + '@cspotcode/source-map-support@0.8.1': + dependencies: + '@jridgewell/trace-mapping': 0.3.9 + optional: true + + '@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/css-tokenizer@3.0.4': {} + + '@csstools/media-query-list-parser@4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + + '@csstools/selector-specificity@5.0.0(postcss-selector-parser@7.1.0)': + dependencies: + postcss-selector-parser: 7.1.0 + + '@ctrl/tinycolor@3.6.0': {} + + '@currents/commit-info@1.0.1-beta.0': + dependencies: + bluebird: 3.5.5 + check-more-types: 2.24.0 + debug: 4.3.4 + execa: 1.0.0 + lazy-ass: 1.6.0 + ramda: 0.26.1 + transitivePeerDependencies: + - supports-color + + '@currents/playwright@1.15.3(magicast@0.3.5)': + dependencies: + '@babel/code-frame': 7.27.1 + '@commander-js/extra-typings': 12.1.0(commander@12.1.0) + '@currents/commit-info': 1.0.1-beta.0 + async-retry: 1.3.3 + axios: 1.11.0(debug@4.4.1) + axios-retry: 4.5.0(axios@1.11.0(debug@4.4.1)) + c12: 1.11.2(magicast@0.3.5) + chalk: 4.1.2 + commander: 12.1.0 + date-fns: 2.30.0 + debug: 4.4.1(supports-color@8.1.1) + dotenv: 16.6.1 + execa: 9.6.0 + getos: 3.2.1 + https-proxy-agent: 7.0.6 + istanbul-lib-coverage: 3.2.2 + json-stringify-safe: 5.0.1 + lil-http-terminator: 1.2.3 + lodash: 4.17.21 + nanoid: 3.3.11 + object-sizeof: 2.6.5 + p-debounce: 2.1.0 + p-map: 4.0.0 + p-queue: 6.6.2 + pino: 9.7.0 + pluralize: 8.0.0 + pretty-ms: 7.0.1 + proxy-from-env: 1.1.0 + regexp.escape: 2.0.1 + source-map-support: 0.5.21 + stack-utils: 2.0.6 + tmp: 0.2.4 + tmp-promise: 3.0.3 + ts-pattern: 5.8.0 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - magicast + - supports-color + - utf-8-validate + + '@cypress/grep@4.1.0(@babel/core@7.26.10)(cypress@14.4.0)': + dependencies: + cypress: 14.4.0 + debug: 4.4.0 + find-test-names: 1.29.7(@babel/core@7.26.10) + globby: 11.1.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + '@cypress/request@3.0.8': + dependencies: + aws-sign2: 0.7.0 + aws4: 1.11.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 4.0.4 + http-signature: 1.4.0 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + performance-now: 2.1.0 + qs: 6.14.0 + safe-buffer: 5.2.1 + tough-cookie: 5.1.2 + tunnel-agent: 0.6.0 + uuid: 8.3.2 + + '@cypress/xvfb@1.2.4(supports-color@8.1.1)': + dependencies: + debug: 3.2.7(supports-color@8.1.1) + lodash.once: 4.1.1 + transitivePeerDependencies: + - supports-color + + '@dabh/diagnostics@2.0.3': + dependencies: + colorspace: 1.1.4 + enabled: 2.0.0 + kuler: 2.0.0 + + '@dagrejs/dagre@1.1.4': + dependencies: + '@dagrejs/graphlib': 2.2.4 + + '@dagrejs/graphlib@2.2.4': {} + + '@dependents/detective-less@5.0.1': + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + '@dual-bundle/import-meta-resolve@4.1.0': {} + + '@element-plus/icons-vue@2.3.1(vue@3.5.13(typescript@5.9.2))': + dependencies: + vue: 3.5.13(typescript@5.9.2) + + '@emnapi/core@1.4.3': + dependencies: + '@emnapi/wasi-threads': 1.0.2 + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.3': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/runtime@1.4.5': + dependencies: + tslib: 2.8.1 + optional: true + + '@emnapi/wasi-threads@1.0.2': + dependencies: + tslib: 2.8.1 + optional: true + + '@emotion/is-prop-valid@1.2.1': + dependencies: + '@emotion/memoize': 0.8.1 + + '@emotion/memoize@0.8.1': {} + + '@emotion/unitless@0.8.0': {} + + '@esbuild/aix-ppc64@0.25.9': + optional: true + + '@esbuild/android-arm64@0.25.9': + optional: true + + '@esbuild/android-arm@0.25.9': + optional: true + + '@esbuild/android-x64@0.25.9': + optional: true + + '@esbuild/darwin-arm64@0.25.9': + optional: true + + '@esbuild/darwin-x64@0.25.9': + optional: true + + '@esbuild/freebsd-arm64@0.25.9': + optional: true + + '@esbuild/freebsd-x64@0.25.9': + optional: true + + '@esbuild/linux-arm64@0.25.9': + optional: true + + '@esbuild/linux-arm@0.25.9': + optional: true + + '@esbuild/linux-ia32@0.25.9': + optional: true + + '@esbuild/linux-loong64@0.25.9': + optional: true + + '@esbuild/linux-mips64el@0.25.9': + optional: true + + '@esbuild/linux-ppc64@0.25.9': + optional: true + + '@esbuild/linux-riscv64@0.25.9': + optional: true + + '@esbuild/linux-s390x@0.25.9': + optional: true + + '@esbuild/linux-x64@0.25.9': + optional: true + + '@esbuild/netbsd-arm64@0.25.9': + optional: true + + '@esbuild/netbsd-x64@0.25.9': + optional: true + + '@esbuild/openbsd-arm64@0.25.9': + optional: true + + '@esbuild/openbsd-x64@0.25.9': + optional: true + + '@esbuild/openharmony-arm64@0.25.9': + optional: true + + '@esbuild/sunos-x64@0.25.9': + optional: true + + '@esbuild/win32-arm64@0.25.9': + optional: true + + '@esbuild/win32-ia32@0.25.9': + optional: true + + '@esbuild/win32-x64@0.25.9': + optional: true + + '@eslint-community/eslint-utils@4.7.0(eslint@9.29.0(jiti@1.21.7))': + dependencies: + eslint: 9.29.0(jiti@1.21.7) + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.20.1': + dependencies: + '@eslint/object-schema': 2.1.6 + debug: 4.4.1(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/config-helpers@0.2.3': {} + + '@eslint/core@0.13.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.14.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/core@0.15.0': + dependencies: + '@types/json-schema': 7.0.15 + + '@eslint/eslintrc@3.3.1': + dependencies: + ajv: 6.12.6 + debug: 4.4.1(supports-color@8.1.1) + espree: 10.4.0 + globals: 14.0.0 + ignore: 5.2.4 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + + '@eslint/js@9.29.0': {} + + '@eslint/object-schema@2.1.6': {} + + '@eslint/plugin-kit@0.2.8': + dependencies: + '@eslint/core': 0.13.0 + levn: 0.4.1 + + '@eslint/plugin-kit@0.3.2': + dependencies: + '@eslint/core': 0.15.0 + levn: 0.4.1 + + '@ewoudenberg/difflib@0.1.0': + dependencies: + heap: 0.2.7 + + '@exodus/schemasafe@1.3.0': {} + + '@faker-js/faker@8.0.2': {} + + '@floating-ui/core@1.7.0': + dependencies: + '@floating-ui/utils': 0.2.9 + + '@floating-ui/dom@1.7.0': + dependencies: + '@floating-ui/core': 1.7.0 + '@floating-ui/utils': 0.2.9 + + '@floating-ui/utils@0.2.9': {} + + '@floating-ui/vue@1.1.6(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@floating-ui/dom': 1.7.0 + '@floating-ui/utils': 0.2.9 + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@fortawesome/fontawesome-common-types@0.2.36': {} + + '@fortawesome/fontawesome-common-types@6.2.0': {} + + '@fortawesome/fontawesome-svg-core@1.2.36': + dependencies: + '@fortawesome/fontawesome-common-types': 0.2.36 + + '@fortawesome/free-regular-svg-icons@6.2.0': + dependencies: + '@fortawesome/fontawesome-common-types': 6.2.0 + + '@fortawesome/free-solid-svg-icons@5.15.4': + dependencies: + '@fortawesome/fontawesome-common-types': 0.2.36 + + '@fortawesome/vue-fontawesome@3.0.3(@fortawesome/fontawesome-svg-core@1.2.36)(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@fortawesome/fontawesome-svg-core': 1.2.36 + vue: 3.5.13(typescript@5.9.2) + + '@gar/promisify@1.1.3': + optional: true + + '@getzep/zep-cloud@1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.30(316b19288832115574731e049dc7676a))': + dependencies: + form-data: 4.0.4 + node-fetch: 2.7.0(encoding@0.1.13) + qs: 6.11.2 + url-join: 4.0.1 + zod: 3.25.67 + optionalDependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + langchain: 0.3.30(316b19288832115574731e049dc7676a) + transitivePeerDependencies: + - encoding + + '@getzep/zep-js@0.9.0': + dependencies: + '@supercharge/promise-pool': 3.1.0 + semver: 7.6.0 + typescript: 5.9.2 + + '@google-ai/generativelanguage@2.6.0(encoding@0.1.13)': + dependencies: + google-gax: 4.6.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@google-cloud/paginator@5.0.2': + dependencies: + arrify: 2.0.1 + extend: 3.0.2 + + '@google-cloud/projectify@4.0.0': {} + + '@google-cloud/promisify@4.0.0': {} + + '@google-cloud/resource-manager@5.3.0(encoding@0.1.13)': + dependencies: + google-gax: 4.6.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@google-cloud/secret-manager@5.6.0(encoding@0.1.13)': + dependencies: + google-gax: 4.6.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + '@google-cloud/storage@7.12.1(encoding@0.1.13)': + dependencies: + '@google-cloud/paginator': 5.0.2 + '@google-cloud/projectify': 4.0.0 + '@google-cloud/promisify': 4.0.0 + abort-controller: 3.0.0 + async-retry: 1.3.3 + duplexify: 4.1.3 + fast-xml-parser: 4.4.1 + gaxios: 6.6.0(encoding@0.1.13) + google-auth-library: 9.10.0(encoding@0.1.13) + html-entities: 2.5.2 + mime: 3.0.0 + p-limit: 3.1.0 + retry-request: 7.0.2(encoding@0.1.13) + teeny-request: 9.0.0(encoding@0.1.13) + uuid: 8.3.2 + transitivePeerDependencies: + - encoding + - supports-color + + '@google/generative-ai@0.21.0': {} + + '@google/generative-ai@0.24.1': {} + + '@graphql-typed-document-node/core@3.2.0(graphql@16.11.0)': + dependencies: + graphql: 16.11.0 + + '@grpc/grpc-js@1.13.2': + dependencies: + '@grpc/proto-loader': 0.7.13 + '@js-sdsl/ordered-map': 4.4.2 + + '@grpc/proto-loader@0.7.13': + dependencies: + lodash.camelcase: 4.3.0 + long: 5.3.2 + protobufjs: 7.4.0 + yargs: 17.7.2 + + '@hapi/hoek@9.3.0': {} + + '@hapi/topo@5.1.0': + dependencies: + '@hapi/hoek': 9.3.0 + + '@huggingface/inference@4.0.5': + dependencies: + '@huggingface/jinja': 0.5.1 + '@huggingface/tasks': 0.19.34 + + '@huggingface/jinja@0.5.1': {} + + '@huggingface/tasks@0.19.34': {} + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/module-importer@1.0.1': {} + + '@humanwhocodes/retry@0.3.1': {} + + '@humanwhocodes/retry@0.4.3': {} + + '@ibm-cloud/watsonx-ai@1.1.2': + dependencies: + '@types/node': 20.19.10 + extend: 3.0.2 + ibm-cloud-sdk-core: 5.3.2 + transitivePeerDependencies: + - supports-color + + '@icetee/ftp@0.3.15': + dependencies: + readable-stream: 1.1.14 + xregexp: 2.0.0 + + '@iconify-json/mdi@1.1.63': + dependencies: + '@iconify/types': 2.0.0 + + '@iconify/json@2.2.354': + dependencies: + '@iconify/types': 2.0.0 + pathe: 1.1.2 + + '@iconify/types@2.0.0': {} + + '@iconify/utils@2.1.25': + dependencies: + '@antfu/install-pkg': 0.1.1 + '@antfu/utils': 0.7.10 + '@iconify/types': 2.0.0 + debug: 4.4.1(supports-color@8.1.1) + kolorist: 1.8.0 + local-pkg: 0.5.0 + mlly: 1.7.4 + transitivePeerDependencies: + - supports-color + + '@img/sharp-darwin-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-arm64': 1.0.4 + optional: true + + '@img/sharp-darwin-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-darwin-x64': 1.0.4 + optional: true + + '@img/sharp-libvips-darwin-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-darwin-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linux-arm@1.0.5': + optional: true + + '@img/sharp-libvips-linux-s390x@1.0.4': + optional: true + + '@img/sharp-libvips-linux-x64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-arm64@1.0.4': + optional: true + + '@img/sharp-libvips-linuxmusl-x64@1.0.4': + optional: true + + '@img/sharp-linux-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm64': 1.0.4 + optional: true + + '@img/sharp-linux-arm@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-arm': 1.0.5 + optional: true + + '@img/sharp-linux-s390x@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-s390x': 1.0.4 + optional: true + + '@img/sharp-linux-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linux-x64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-arm64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + optional: true + + '@img/sharp-linuxmusl-x64@0.33.5': + optionalDependencies: + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + optional: true + + '@img/sharp-wasm32@0.33.5': + dependencies: + '@emnapi/runtime': 1.4.5 + optional: true + + '@img/sharp-win32-ia32@0.33.5': + optional: true + + '@img/sharp-win32-x64@0.33.5': + optional: true + + '@internationalized/date@3.8.1': + dependencies: + '@swc/helpers': 0.5.17 + + '@internationalized/number@3.6.2': + dependencies: + '@swc/helpers': 0.5.17 + + '@intlify/core-base@11.1.10': + dependencies: + '@intlify/message-compiler': 11.1.10 + '@intlify/shared': 11.1.10 + + '@intlify/message-compiler@11.1.10': + dependencies: + '@intlify/shared': 11.1.10 + source-map-js: 1.2.1 + + '@intlify/shared@11.1.10': {} + + '@ioredis/as-callback@3.0.0': {} + + '@ioredis/commands@1.2.0': {} + + '@isaacs/balanced-match@4.0.1': {} + + '@isaacs/brace-expansion@5.0.0': + dependencies: + '@isaacs/balanced-match': 4.0.1 + + '@isaacs/cliui@8.0.2': + dependencies: + string-width: 5.1.2 + string-width-cjs: string-width@4.2.3 + strip-ansi: 7.1.0 + strip-ansi-cjs: strip-ansi@6.0.1 + wrap-ansi: 8.1.0 + wrap-ansi-cjs: wrap-ansi@7.0.0 + + '@istanbuljs/load-nyc-config@1.1.0': + dependencies: + camelcase: 5.3.1 + find-up: 4.1.0 + get-package-type: 0.1.0 + js-yaml: 3.14.1 + resolve-from: 5.0.0 + + '@istanbuljs/schema@0.1.3': {} + + '@jest/console@29.6.2': + dependencies: + '@jest/types': 29.6.1 + '@types/node': 20.19.10 + chalk: 4.1.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + slash: 3.0.0 + + '@jest/core@29.6.2(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2))': + dependencies: + '@jest/console': 29.6.2 + '@jest/reporters': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-resolve-dependencies: 29.6.2 + jest-runner: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + jest-watcher: 29.6.2 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/core@29.6.2(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2))': + dependencies: + '@jest/console': 29.6.2 + '@jest/reporters': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.1 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + ci-info: 3.8.0 + exit: 0.1.2 + graceful-fs: 4.2.11 + jest-changed-files: 29.5.0 + jest-config: 29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-resolve-dependencies: 29.6.2 + jest-runner: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + jest-watcher: 29.6.2 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-ansi: 6.0.1 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + - ts-node + + '@jest/environment@29.6.2': + dependencies: + '@jest/fake-timers': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.1 + jest-mock: 29.6.2 + + '@jest/expect-utils@29.6.2': + dependencies: + jest-get-type: 29.4.3 + + '@jest/expect@29.6.2': + dependencies: + expect: 29.6.2 + jest-snapshot: 29.6.2 + transitivePeerDependencies: + - supports-color + + '@jest/fake-timers@29.6.2': + dependencies: + '@jest/types': 29.6.1 + '@sinonjs/fake-timers': 10.0.2 + '@types/node': 20.19.1 + jest-message-util: 29.6.2 + jest-mock: 29.6.2 + jest-util: 29.6.2 + + '@jest/globals@29.6.2': + dependencies: + '@jest/environment': 29.6.2 + '@jest/expect': 29.6.2 + '@jest/types': 29.6.1 + jest-mock: 29.6.2 + transitivePeerDependencies: + - supports-color + + '@jest/reporters@29.6.2': + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@jest/console': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.25 + '@types/node': 20.19.10 + chalk: 4.1.2 + collect-v8-coverage: 1.0.1 + exit: 0.1.2 + glob: 7.2.3 + graceful-fs: 4.2.11 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-instrument: 5.2.1 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.7 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + jest-worker: 29.6.2 + slash: 3.0.0 + string-length: 4.0.2 + strip-ansi: 6.0.1 + v8-to-istanbul: 9.1.0 + transitivePeerDependencies: + - supports-color + + '@jest/schemas@29.4.3': + dependencies: + '@sinclair/typebox': 0.25.21 + + '@jest/schemas@29.6.0': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/schemas@29.6.3': + dependencies: + '@sinclair/typebox': 0.27.8 + + '@jest/source-map@29.6.0': + dependencies: + '@jridgewell/trace-mapping': 0.3.30 + callsites: 3.1.0 + graceful-fs: 4.2.11 + + '@jest/test-result@29.6.2': + dependencies: + '@jest/console': 29.6.2 + '@jest/types': 29.6.1 + '@types/istanbul-lib-coverage': 2.0.4 + collect-v8-coverage: 1.0.1 + + '@jest/test-sequencer@29.6.2': + dependencies: + '@jest/test-result': 29.6.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.2 + slash: 3.0.0 + + '@jest/transform@29.6.2': + dependencies: + '@babel/core': 7.26.10 + '@jest/types': 29.6.1 + '@jridgewell/trace-mapping': 0.3.25 + babel-plugin-istanbul: 6.1.1 + chalk: 4.1.2 + convert-source-map: 2.0.0 + fast-json-stable-stringify: 2.1.0 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.2 + jest-regex-util: 29.4.3 + jest-util: 29.6.2 + micromatch: 4.0.8 + pirates: 4.0.7 + slash: 3.0.0 + write-file-atomic: 4.0.2 + transitivePeerDependencies: + - supports-color + + '@jest/types@29.6.1': + dependencies: + '@jest/schemas': 29.6.0 + '@types/istanbul-lib-coverage': 2.0.4 + '@types/istanbul-reports': 3.0.1 + '@types/node': 20.19.1 + '@types/yargs': 17.0.19 + chalk: 4.1.2 + + '@jridgewell/gen-mapping@0.3.13': + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + + '@jridgewell/resolve-uri@3.1.2': {} + + '@jridgewell/set-array@1.2.1': {} + + '@jridgewell/source-map@0.3.11': + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/sourcemap-codec@1.5.5': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + + '@jridgewell/trace-mapping@0.3.30': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + + '@jridgewell/trace-mapping@0.3.9': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.5 + optional: true + + '@js-joda/core@5.6.1': {} + + '@js-sdsl/ordered-map@4.4.2': {} + + '@jsdevtools/ez-spawn@3.0.4': + dependencies: + call-me-maybe: 1.0.1 + cross-spawn: 7.0.6 + string-argv: 0.3.1 + type-detect: 4.0.8 + + '@jsdevtools/ono@7.1.3': {} + + '@kafkajs/confluent-schema-registry@3.8.0': + dependencies: + ajv: 7.2.4 + avsc: 5.7.6 + mappersmith: 2.45.0 + protobufjs: 7.4.0 + + '@keyv/serialize@1.1.0': {} + + '@kurkle/color@0.3.2': {} + + '@kwsites/file-exists@1.1.1': + dependencies: + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@kwsites/promise-deferred@1.1.1': {} + + '@langchain/anthropic@0.3.26(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@anthropic-ai/sdk': 0.56.0 + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + fast-xml-parser: 4.4.1 + + '@langchain/aws@0.1.11(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@aws-sdk/client-bedrock-agent-runtime': 3.808.0 + '@aws-sdk/client-bedrock-runtime': 3.808.0 + '@aws-sdk/client-kendra': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + transitivePeerDependencies: + - aws-crt + + '@langchain/cohere@0.3.4(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + cohere-ai: 7.14.0(encoding@0.1.13) + uuid: 10.0.0 + transitivePeerDependencies: + - aws-crt + - encoding + + '@langchain/community@0.3.50(ccee17333f80550b1303d83de2b6f79a)': + dependencies: + '@browserbasehq/stagehand': 1.9.0(@playwright/test@1.54.2)(deepmerge@4.3.1)(dotenv@16.6.1)(encoding@0.1.13)(openai@5.12.2(ws@8.18.3)(zod@3.25.67))(zod@3.25.67) + '@ibm-cloud/watsonx-ai': 1.1.2 + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/openai': 0.6.7(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3) + '@langchain/weaviate': 0.2.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13) + binary-extensions: 2.2.0 + expr-eval: 2.0.2 + flat: 5.0.2 + ibm-cloud-sdk-core: 5.3.2 + js-yaml: 4.1.0 + langchain: 0.3.30(316b19288832115574731e049dc7676a) + langsmith: 0.3.55(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + openai: 5.12.2(ws@8.18.3)(zod@3.25.67) + uuid: 10.0.0 + zod: 3.25.67 + optionalDependencies: + '@aws-crypto/sha256-js': 5.2.0 + '@aws-sdk/client-bedrock-agent-runtime': 3.808.0 + '@aws-sdk/client-bedrock-runtime': 3.808.0 + '@aws-sdk/client-kendra': 3.808.0 + '@aws-sdk/client-s3': 3.808.0 + '@aws-sdk/credential-provider-node': 3.808.0 + '@azure/storage-blob': 12.26.0 + '@browserbasehq/sdk': 2.6.0(encoding@0.1.13) + '@getzep/zep-cloud': 1.0.12(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13)(langchain@0.3.30(316b19288832115574731e049dc7676a)) + '@getzep/zep-js': 0.9.0 + '@google-ai/generativelanguage': 2.6.0(encoding@0.1.13) + '@google-cloud/storage': 7.12.1(encoding@0.1.13) + '@huggingface/inference': 4.0.5 + '@mozilla/readability': 0.6.0 + '@pinecone-database/pinecone': 5.1.2 + '@qdrant/js-client-rest': 1.14.1(typescript@5.9.2) + '@smithy/eventstream-codec': 2.2.0 + '@smithy/protocol-http': 3.3.0 + '@smithy/signature-v4': 2.2.1 + '@smithy/util-utf8': 2.3.0 + '@supabase/supabase-js': 2.49.9 + '@xata.io/client': 0.28.4(typescript@5.9.2) + '@zilliz/milvus2-sdk-node': 2.5.7 + cheerio: 1.0.0 + cohere-ai: 7.14.0(encoding@0.1.13) + crypto-js: 4.2.0 + d3-dsv: 2.0.0 + epub2: 3.0.2(ts-toolbelt@9.6.0) + fast-xml-parser: 5.2.3 + google-auth-library: 10.1.0 + html-to-text: 9.0.5 + ignore: 5.2.4 + ioredis: 5.3.2 + jsdom: 23.0.1 + jsonwebtoken: 9.0.2 + lodash: 4.17.21 + mammoth: 1.7.2 + mongodb: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + mysql2: 3.11.0 + pdf-parse: 1.1.1 + pg: 8.12.0 + playwright: 1.54.2 + redis: 4.6.12 + weaviate-client: 3.6.2(encoding@0.1.13) + ws: 8.18.3 + transitivePeerDependencies: + - '@langchain/anthropic' + - '@langchain/aws' + - '@langchain/cerebras' + - '@langchain/cohere' + - '@langchain/deepseek' + - '@langchain/google-genai' + - '@langchain/google-vertexai' + - '@langchain/google-vertexai-web' + - '@langchain/groq' + - '@langchain/mistralai' + - '@langchain/ollama' + - '@langchain/xai' + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - axios + - encoding + - handlebars + - peggy + + '@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))': + dependencies: + '@cfworker/json-schema': 4.1.0 + ansi-styles: 5.2.0 + camelcase: 6.3.0 + decamelize: 1.2.0 + js-tiktoken: 1.0.12 + langsmith: 0.3.55(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + mustache: 4.2.0 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 10.0.0 + zod: 3.25.67 + zod-to-json-schema: 3.23.3(zod@3.25.67) + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + + '@langchain/google-common@0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + uuid: 10.0.0 + + '@langchain/google-gauth@0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/google-common': 0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + google-auth-library: 10.1.0 + transitivePeerDependencies: + - supports-color + + '@langchain/google-genai@0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@google/generative-ai': 0.24.1 + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + uuid: 11.1.0 + + '@langchain/google-vertexai@0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/google-gauth': 0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + transitivePeerDependencies: + - supports-color + + '@langchain/groq@0.2.3(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + groq-sdk: 0.19.0(encoding@0.1.13) + zod: 3.25.67 + transitivePeerDependencies: + - encoding + + '@langchain/langgraph-checkpoint@0.0.17(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + uuid: 10.0.0 + + '@langchain/langgraph-sdk@0.0.70(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(react@18.2.0)': + dependencies: + '@types/json-schema': 7.0.15 + p-queue: 6.6.2 + p-retry: 4.6.2 + uuid: 9.0.1 + optionalDependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + react: 18.2.0 + + '@langchain/langgraph@0.2.74(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(react@18.2.0)(zod-to-json-schema@3.24.6(zod@3.25.67))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/langgraph-checkpoint': 0.0.17(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/langgraph-sdk': 0.0.70(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(react@18.2.0) + uuid: 10.0.0 + zod: 3.25.67 + optionalDependencies: + zod-to-json-schema: 3.24.6(zod@3.25.67) + transitivePeerDependencies: + - react + + '@langchain/mistralai@0.2.1(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(zod@3.25.67)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@mistralai/mistralai': 1.3.4(zod@3.25.67) + uuid: 10.0.0 + transitivePeerDependencies: + - zod + + '@langchain/mongodb@0.1.0(@aws-sdk/credential-providers@3.808.0)(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + mongodb: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + transitivePeerDependencies: + - '@aws-sdk/credential-providers' + - '@mongodb-js/zstd' + - gcp-metadata + - kerberos + - mongodb-client-encryption + - snappy + - socks + + '@langchain/ollama@0.2.3(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + ollama: 0.5.16 + uuid: 10.0.0 + + '@langchain/openai@0.6.7(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + js-tiktoken: 1.0.12 + openai: 5.12.2(ws@8.18.3)(zod@3.25.67) + zod: 3.25.67 + transitivePeerDependencies: + - ws + + '@langchain/pinecone@0.2.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(@pinecone-database/pinecone@5.1.2)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@pinecone-database/pinecone': 5.1.2 + flat: 5.0.2 + uuid: 10.0.0 + + '@langchain/qdrant@0.1.2(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(typescript@5.9.2)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@qdrant/js-client-rest': 1.14.1(typescript@5.9.2) + uuid: 10.0.0 + transitivePeerDependencies: + - typescript + + '@langchain/redis@0.1.1(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + redis: 4.6.14 + + '@langchain/textsplitters@0.1.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + js-tiktoken: 1.0.12 + + '@langchain/weaviate@0.2.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13)': + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + uuid: 10.0.0 + weaviate-client: 3.6.2(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + '@lezer/common@1.1.0': {} + + '@lezer/common@1.2.1': {} + + '@lezer/css@1.1.1': + dependencies: + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + + '@lezer/generator@1.7.0': + dependencies: + '@lezer/common': 1.1.0 + '@lezer/lr': 1.4.0 + + '@lezer/highlight@1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c)': + dependencies: + '@lezer/common': 1.1.0 + + '@lezer/html@1.3.0': + dependencies: + '@lezer/common': 1.1.0 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + + '@lezer/javascript@1.0.2': + dependencies: + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + + '@lezer/json@1.0.0': + dependencies: + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + + '@lezer/lr@1.4.0': + dependencies: + '@lezer/common': 1.1.0 + + '@lezer/python@1.1.5': + dependencies: + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + + '@mdx-js/react@3.0.1(@types/react@18.0.27)(react@18.2.0)': + dependencies: + '@types/mdx': 2.0.3 + '@types/react': 18.0.27 + react: 18.2.0 + + '@microsoft/api-extractor-model@7.30.4(@types/node@20.19.10)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.12.0(@types/node@20.19.10) + transitivePeerDependencies: + - '@types/node' + + '@microsoft/api-extractor@7.52.1(@types/node@20.19.10)': + dependencies: + '@microsoft/api-extractor-model': 7.30.4(@types/node@20.19.10) + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.12.0(@types/node@20.19.10) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.15.1(@types/node@20.19.10) + '@rushstack/ts-command-line': 4.23.6(@types/node@20.19.10) + lodash: 4.17.21 + minimatch: 3.0.8 + resolve: 1.22.10 + semver: 7.7.2 + source-map: 0.6.1 + typescript: 5.9.2 + transitivePeerDependencies: + - '@types/node' + + '@microsoft/tsdoc-config@0.17.1': + dependencies: + '@microsoft/tsdoc': 0.15.1 + ajv: 8.12.0 + jju: 1.4.0 + resolve: 1.22.10 + + '@microsoft/tsdoc@0.15.1': {} + + '@miragejs/pretender-node-polyfill@0.1.2': {} + + '@mistralai/mistralai@1.3.4(zod@3.25.67)': + dependencies: + zod: 3.25.67 + + '@modelcontextprotocol/sdk@1.12.0': + dependencies: + ajv: 6.12.6 + content-type: 1.0.5 + cors: 2.8.5 + cross-spawn: 7.0.6 + eventsource: 3.0.6 + express: 5.1.0 + express-rate-limit: 7.5.0(express@5.1.0) + pkce-challenge: 5.0.0(patch_hash=651e785d0b7bbf5be9210e1e895c39a16dc3ce8a5a3843b4819565fb6e175b90) + raw-body: 3.0.0 + zod: 3.25.67 + zod-to-json-schema: 3.24.6(zod@3.25.67) + transitivePeerDependencies: + - supports-color + + '@mongodb-js/saslprep@1.1.9': + dependencies: + sparse-bitfield: 3.0.3 + + '@mozilla/readability@0.6.0': {} + + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.2': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.2': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.2': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.2': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.2': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.2': + optional: true + + '@mswjs/interceptors@0.37.5': + dependencies: + '@open-draft/deferred-promise': 2.2.0 + '@open-draft/logger': 0.3.0 + '@open-draft/until': 2.1.0 + is-node-process: 1.2.0 + outvariant: 1.4.3 + strict-event-emitter: 0.5.1 + + '@n8n/codemirror-lang-sql@1.0.2(@codemirror/view@6.26.3)(@lezer/common@1.1.0)': + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/lr': 1.4.0 + transitivePeerDependencies: + - '@codemirror/view' + - '@lezer/common' + + '@n8n/localtunnel@3.0.0': + dependencies: + axios: 1.11.0(debug@4.3.6) + debug: 4.3.6 + transitivePeerDependencies: + - supports-color + + '@n8n/p-retry@6.2.0-2': + dependencies: + '@common.js/is-network-error': 1.0.1 + '@types/retry': 0.12.5 + retry: 0.13.1 + + '@n8n/tournament@1.0.6': + dependencies: + '@n8n_io/riot-tmpl': 4.0.1 + ast-types: 0.16.1 + esprima-next: 5.8.4 + recast: 0.22.0 + + '@n8n/typeorm@0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3))(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2))': + dependencies: + '@n8n/p-retry': 6.2.0-2 + '@sqltools/formatter': 1.2.5 + app-root-path: 3.1.0 + async-mutex: 0.5.0 + buffer: 6.0.3 + chalk: 4.1.2 + dayjs: 1.11.10 + debug: 4.4.1(supports-color@8.1.1) + dotenv: 16.6.1 + glob: 10.4.5 + mkdirp: 2.1.3 + reflect-metadata: 0.2.2 + sha.js: 2.4.12 + tarn: 3.0.2 + tslib: 2.8.1 + uuid: 9.0.1 + yargs: 17.7.2 + optionalDependencies: + '@sentry/node': 9.42.1 + ioredis: 5.3.2 + mongodb: 6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3) + mssql: 10.0.2 + mysql2: 3.11.0 + pg: 8.12.0 + redis: 4.6.12 + sqlite3: 5.1.7 + ts-node: 10.9.2(@types/node@20.19.10)(typescript@5.9.2) + transitivePeerDependencies: + - supports-color + + '@n8n/typeorm@0.3.20-12(@sentry/node@9.42.1)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2))': + dependencies: + '@n8n/p-retry': 6.2.0-2 + '@sqltools/formatter': 1.2.5 + app-root-path: 3.1.0 + async-mutex: 0.5.0 + buffer: 6.0.3 + chalk: 4.1.2 + dayjs: 1.11.10 + debug: 4.4.1(supports-color@8.1.1) + dotenv: 16.6.1 + glob: 10.4.5 + mkdirp: 2.1.3 + reflect-metadata: 0.2.2 + sha.js: 2.4.12 + tarn: 3.0.2 + tslib: 2.8.1 + uuid: 9.0.1 + yargs: 17.7.2 + optionalDependencies: + '@sentry/node': 9.42.1 + ioredis: 5.3.2 + mssql: 10.0.2 + mysql2: 3.11.0 + pg: 8.12.0 + redis: 4.6.14 + sqlite3: 5.1.7 + ts-node: 10.9.2(@types/node@20.19.10)(typescript@5.9.2) + transitivePeerDependencies: + - supports-color + + '@n8n/vm2@3.9.25': + dependencies: + acorn: 8.12.1 + acorn-walk: 8.3.4 + + '@n8n_io/ai-assistant-sdk@1.15.0': {} + + '@n8n_io/license-sdk@2.23.0': + dependencies: + crypto-js: 4.2.0 + node-machine-id: 1.1.12 + node-rsa: 1.1.1 + undici: 7.10.0 + + '@n8n_io/riot-tmpl@4.0.1': + dependencies: + eslint-config-riot: 1.0.0 + + '@napi-rs/canvas-android-arm64@0.1.70': + optional: true + + '@napi-rs/canvas-darwin-arm64@0.1.70': + optional: true + + '@napi-rs/canvas-darwin-x64@0.1.70': + optional: true + + '@napi-rs/canvas-linux-arm-gnueabihf@0.1.70': + optional: true + + '@napi-rs/canvas-linux-arm64-gnu@0.1.70': + optional: true + + '@napi-rs/canvas-linux-arm64-musl@0.1.70': + optional: true + + '@napi-rs/canvas-linux-riscv64-gnu@0.1.70': + optional: true + + '@napi-rs/canvas-linux-x64-gnu@0.1.70': + optional: true + + '@napi-rs/canvas-linux-x64-musl@0.1.70': + optional: true + + '@napi-rs/canvas-win32-x64-msvc@0.1.70': + optional: true + + '@napi-rs/canvas@0.1.70': + optionalDependencies: + '@napi-rs/canvas-android-arm64': 0.1.70 + '@napi-rs/canvas-darwin-arm64': 0.1.70 + '@napi-rs/canvas-darwin-x64': 0.1.70 + '@napi-rs/canvas-linux-arm-gnueabihf': 0.1.70 + '@napi-rs/canvas-linux-arm64-gnu': 0.1.70 + '@napi-rs/canvas-linux-arm64-musl': 0.1.70 + '@napi-rs/canvas-linux-riscv64-gnu': 0.1.70 + '@napi-rs/canvas-linux-x64-gnu': 0.1.70 + '@napi-rs/canvas-linux-x64-musl': 0.1.70 + '@napi-rs/canvas-win32-x64-msvc': 0.1.70 + optional: true + + '@napi-rs/wasm-runtime@0.2.11': + dependencies: + '@emnapi/core': 1.4.3 + '@emnapi/runtime': 1.4.3 + '@tybys/wasm-util': 0.9.0 + optional: true + + '@ngneat/falso@7.4.0': + dependencies: + seedrandom: 3.0.5 + uuid: 8.3.2 + + '@noble/hashes@1.8.0': {} + + '@nodelib/fs.scandir@2.1.5': + dependencies: + '@nodelib/fs.stat': 2.0.5 + run-parallel: 1.2.0 + + '@nodelib/fs.stat@2.0.5': {} + + '@nodelib/fs.walk@1.2.8': + dependencies: + '@nodelib/fs.scandir': 2.1.5 + fastq: 1.15.0 + + '@npmcli/fs@1.1.1': + dependencies: + '@gar/promisify': 1.1.3 + semver: 7.7.2 + optional: true + + '@npmcli/move-file@1.1.2': + dependencies: + mkdirp: 1.0.4 + rimraf: 3.0.2 + optional: true + + '@oclif/core@4.0.7': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.2.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + debug: 4.4.1(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + globby: 11.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + lilconfig: 3.1.3 + minimatch: 9.0.5 + string-width: 4.2.3 + supports-color: 8.1.1 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + + '@oclif/core@4.5.2': + dependencies: + ansi-escapes: 4.3.2 + ansis: 3.17.0 + clean-stack: 3.0.1 + cli-spinners: 2.9.2 + debug: 4.4.1(supports-color@8.1.1) + ejs: 3.1.10 + get-package-type: 0.1.0 + indent-string: 4.0.0 + is-wsl: 2.2.0 + lilconfig: 3.1.3 + minimatch: 9.0.5 + semver: 7.7.2 + string-width: 4.2.3 + supports-color: 8.1.1 + tinyglobby: 0.2.14 + widest-line: 3.1.0 + wordwrap: 1.0.0 + wrap-ansi: 7.0.0 + + '@oclif/test@4.1.13(@oclif/core@4.5.2)': + dependencies: + '@oclif/core': 4.5.2 + ansis: 3.17.0 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + '@one-ini/wasm@0.1.1': {} + + '@open-draft/deferred-promise@2.2.0': {} + + '@open-draft/logger@0.3.0': + dependencies: + is-node-process: 1.2.0 + outvariant: 1.4.3 + + '@open-draft/until@2.1.0': {} + + '@opentelemetry/api-logs@0.57.2': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/api@1.9.0': {} + + '@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + + '@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/instrumentation-amqplib@0.46.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-connect@0.43.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@types/connect': 3.4.38 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-dataloader@0.16.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-express@0.47.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-fs@0.19.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-generic-pool@0.43.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-graphql@0.47.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-hapi@0.45.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-http@0.57.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + forwarded-parse: 2.1.2 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-ioredis@0.47.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-kafkajs@0.7.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-knex@0.44.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-koa@0.47.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-lru-memoizer@0.44.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongodb@0.52.0(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mongoose@0.46.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql2@0.45.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-mysql@0.45.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@types/mysql': 2.15.26 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-pg@0.51.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@opentelemetry/sql-common': 0.40.1(@opentelemetry/api@1.9.0) + '@types/pg': 8.6.1 + '@types/pg-pool': 2.0.6 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-redis-4@0.46.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/redis-common': 0.36.2 + '@opentelemetry/semantic-conventions': 1.36.0 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-tedious@0.18.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@types/tedious': 4.0.14 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation-undici@0.10.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/api-logs': 0.57.2 + '@types/shimmer': 1.2.0 + import-in-the-middle: 1.14.2 + require-in-the-middle: 7.4.0 + semver: 7.7.2 + shimmer: 1.2.1 + transitivePeerDependencies: + - supports-color + + '@opentelemetry/redis-common@0.36.2': {} + + '@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.28.0 + + '@opentelemetry/semantic-conventions@1.28.0': {} + + '@opentelemetry/semantic-conventions@1.36.0': {} + + '@opentelemetry/sql-common@0.40.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + + '@otplib/core@12.0.1': {} + + '@otplib/plugin-crypto@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + + '@otplib/plugin-thirty-two@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + thirty-two: 1.0.2 + + '@otplib/preset-default@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 + + '@otplib/preset-v11@12.0.1': + dependencies: + '@otplib/core': 12.0.1 + '@otplib/plugin-crypto': 12.0.1 + '@otplib/plugin-thirty-two': 12.0.1 + + '@paralleldrive/cuid2@2.2.2': + dependencies: + '@noble/hashes': 1.8.0 + + '@parcel/watcher-android-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-arm64@2.5.1': + optional: true + + '@parcel/watcher-darwin-x64@2.5.1': + optional: true + + '@parcel/watcher-freebsd-x64@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-arm64-musl@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-glibc@2.5.1': + optional: true + + '@parcel/watcher-linux-x64-musl@2.5.1': + optional: true + + '@parcel/watcher-win32-arm64@2.5.1': + optional: true + + '@parcel/watcher-win32-ia32@2.5.1': + optional: true + + '@parcel/watcher-win32-x64@2.5.1': + optional: true + + '@parcel/watcher@2.5.1': + dependencies: + detect-libc: 1.0.3 + is-glob: 4.0.3 + micromatch: 4.0.8 + node-addon-api: 7.1.0 + optionalDependencies: + '@parcel/watcher-android-arm64': 2.5.1 + '@parcel/watcher-darwin-arm64': 2.5.1 + '@parcel/watcher-darwin-x64': 2.5.1 + '@parcel/watcher-freebsd-x64': 2.5.1 + '@parcel/watcher-linux-arm-glibc': 2.5.1 + '@parcel/watcher-linux-arm-musl': 2.5.1 + '@parcel/watcher-linux-arm64-glibc': 2.5.1 + '@parcel/watcher-linux-arm64-musl': 2.5.1 + '@parcel/watcher-linux-x64-glibc': 2.5.1 + '@parcel/watcher-linux-x64-musl': 2.5.1 + '@parcel/watcher-win32-arm64': 2.5.1 + '@parcel/watcher-win32-ia32': 2.5.1 + '@parcel/watcher-win32-x64': 2.5.1 + + '@petamoriken/float16@3.9.2': {} + + '@pinecone-database/pinecone@5.1.2': {} + + '@pinia/testing@0.1.6(pinia@2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2))': + dependencies: + pinia: 2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@pkgjs/parseargs@0.11.0': + optional: true + + '@playwright/test@1.54.2': + dependencies: + playwright: 1.54.2 + + '@prisma/instrumentation@6.11.1(@opentelemetry/api@1.9.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + transitivePeerDependencies: + - supports-color + + '@protobufjs/aspromise@1.1.2': {} + + '@protobufjs/base64@1.1.2': {} + + '@protobufjs/codegen@2.0.4': {} + + '@protobufjs/eventemitter@1.1.0': {} + + '@protobufjs/fetch@1.1.0': + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/inquire': 1.1.0 + + '@protobufjs/float@1.0.2': {} + + '@protobufjs/inquire@1.1.0': {} + + '@protobufjs/path@1.1.2': {} + + '@protobufjs/pool@1.1.0': {} + + '@protobufjs/utf8@1.1.0': {} + + '@qdrant/js-client-rest@1.14.1(typescript@5.9.2)': + dependencies: + '@qdrant/openapi-typescript-fetch': 1.2.6 + '@sevinf/maybe': 0.5.0 + typescript: 5.9.2 + undici: 6.21.3 + + '@qdrant/openapi-typescript-fetch@1.2.6': {} + + '@redis/bloom@1.2.0(@redis/client@1.5.13)': + dependencies: + '@redis/client': 1.5.13 + + '@redis/bloom@1.2.0(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/client@1.5.13': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/client@1.5.16': + dependencies: + cluster-key-slot: 1.1.2 + generic-pool: 3.9.0 + yallist: 4.0.0 + + '@redis/graph@1.1.1(@redis/client@1.5.13)': + dependencies: + '@redis/client': 1.5.13 + + '@redis/graph@1.1.1(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/json@1.0.6(@redis/client@1.5.13)': + dependencies: + '@redis/client': 1.5.13 + + '@redis/json@1.0.6(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/search@1.1.6(@redis/client@1.5.13)': + dependencies: + '@redis/client': 1.5.13 + + '@redis/search@1.1.6(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redis/time-series@1.0.5(@redis/client@1.5.13)': + dependencies: + '@redis/client': 1.5.13 + + '@redis/time-series@1.0.5(@redis/client@1.5.16)': + dependencies: + '@redis/client': 1.5.16 + + '@redocly/ajv@8.11.2': + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js-replace: 1.0.1 + + '@redocly/cli@1.28.5(encoding@0.1.13)': + dependencies: + '@redocly/openapi-core': 1.28.5 + abort-controller: 3.0.0 + chokidar: 4.0.3 + colorette: 1.4.0 + core-js: 3.40.0 + form-data: 4.0.4 + get-port-please: 3.1.2 + glob: 7.2.3 + handlebars: 4.7.8 + mobx: 6.12.0 + pluralize: 8.0.0 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + redoc: 2.4.0(core-js@3.40.0)(encoding@0.1.13)(mobx@6.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@6.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)) + semver: 7.6.0 + simple-websocket: 9.1.0 + styled-components: 6.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + yargs: 17.0.1 + transitivePeerDependencies: + - bufferutil + - encoding + - react-native + - supports-color + - utf-8-validate + + '@redocly/config@0.20.3': {} + + '@redocly/openapi-core@1.28.5': + dependencies: + '@redocly/ajv': 8.11.2 + '@redocly/config': 0.20.3 + colorette: 1.4.0 + https-proxy-agent: 7.0.6 + js-levenshtein: 1.1.6 + js-yaml: 4.1.0 + minimatch: 5.1.6 + pluralize: 8.0.0 + yaml-ast-parser: 0.0.43 + transitivePeerDependencies: + - supports-color + + '@replit/codemirror-indentation-markers@6.5.3(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)': + dependencies: + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + + '@rollup/plugin-inject@5.0.5(rollup@4.46.2)': + dependencies: + '@rollup/pluginutils': 5.1.4(rollup@4.46.2) + estree-walker: 2.0.2 + magic-string: 0.30.17 + optionalDependencies: + rollup: 4.46.2 + + '@rollup/pluginutils@5.1.4(rollup@4.46.2)': + dependencies: + '@types/estree': 1.0.8 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.46.2 + + '@rollup/rollup-android-arm-eabi@4.46.2': + optional: true + + '@rollup/rollup-android-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-arm64@4.46.2': + optional: true + + '@rollup/rollup-darwin-x64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-arm64@4.46.2': + optional: true + + '@rollup/rollup-freebsd-x64@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-ppc64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-riscv64-musl@4.46.2': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.46.2': + optional: true + + '@rollup/rollup-linux-x64-musl@4.46.2': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.46.2': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.46.2': + optional: true + + '@rtsao/scc@1.1.0': {} + + '@rudderstack/rudder-sdk-node@2.1.4(tslib@2.8.1)': + dependencies: + axios: 1.8.3 + axios-retry: 4.5.0(axios@1.8.3) + component-type: 2.0.0 + join-component: 1.1.0 + lodash.clonedeep: 4.5.0 + lodash.isstring: 4.0.1 + md5: 2.3.0 + ms: 2.1.3 + remove-trailing-slash: 0.1.1 + serialize-javascript: 6.0.2 + tslib: 2.8.1 + uuid: 11.0.2 + optionalDependencies: + bull: 4.16.4(patch_hash=a4b6d56db16fe5870646929938466d6a5c668435fd1551bed6a93fffb597ba42) + transitivePeerDependencies: + - debug + - supports-color + + '@rushstack/node-core-library@5.12.0(@types/node@20.19.10)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1(ajv@8.13.0) + fs-extra: 11.3.0 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.10 + semver: 7.7.2 + optionalDependencies: + '@types/node': 20.19.10 + + '@rushstack/rig-package@0.5.3': + dependencies: + resolve: 1.22.10 + strip-json-comments: 3.1.1 + + '@rushstack/terminal@0.15.1(@types/node@20.19.10)': + dependencies: + '@rushstack/node-core-library': 5.12.0(@types/node@20.19.10) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 20.19.10 + + '@rushstack/ts-command-line@4.23.6(@types/node@20.19.10)': + dependencies: + '@rushstack/terminal': 0.15.1(@types/node@20.19.10) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.1 + transitivePeerDependencies: + - '@types/node' + + '@sec-ant/readable-stream@0.4.1': {} + + '@selderee/plugin-htmlparser2@0.11.0': + dependencies: + domhandler: 5.0.3 + selderee: 0.11.0 + + '@sentry-internal/browser-utils@9.42.1': + dependencies: + '@sentry/core': 9.42.1 + + '@sentry-internal/feedback@9.42.1': + dependencies: + '@sentry/core': 9.42.1 + + '@sentry-internal/node-native-stacktrace@0.2.2': + dependencies: + detect-libc: 2.0.4 + node-abi: 3.75.0 + + '@sentry-internal/replay-canvas@9.42.1': + dependencies: + '@sentry-internal/replay': 9.42.1 + '@sentry/core': 9.42.1 + + '@sentry-internal/replay@9.42.1': + dependencies: + '@sentry-internal/browser-utils': 9.42.1 + '@sentry/core': 9.42.1 + + '@sentry/browser@9.42.1': + dependencies: + '@sentry-internal/browser-utils': 9.42.1 + '@sentry-internal/feedback': 9.42.1 + '@sentry-internal/replay': 9.42.1 + '@sentry-internal/replay-canvas': 9.42.1 + '@sentry/core': 9.42.1 + + '@sentry/core@9.42.1': {} + + '@sentry/node-core@9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@sentry/core': 9.42.1 + '@sentry/opentelemetry': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) + import-in-the-middle: 1.14.2 + + '@sentry/node-native@9.42.1': + dependencies: + '@sentry-internal/node-native-stacktrace': 0.2.2 + '@sentry/core': 9.42.1 + '@sentry/node': 9.42.1 + transitivePeerDependencies: + - supports-color + + '@sentry/node@9.42.1': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-amqplib': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-connect': 0.43.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-dataloader': 0.16.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-express': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-fs': 0.19.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-generic-pool': 0.43.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-graphql': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-hapi': 0.45.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-http': 0.57.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-ioredis': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-kafkajs': 0.7.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-knex': 0.44.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-koa': 0.47.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-lru-memoizer': 0.44.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongodb': 0.52.0(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mongoose': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql': 0.45.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-mysql2': 0.45.2(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-pg': 0.51.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-redis-4': 0.46.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-tedious': 0.18.1(@opentelemetry/api@1.9.0) + '@opentelemetry/instrumentation-undici': 0.10.1(@opentelemetry/api@1.9.0) + '@opentelemetry/resources': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@prisma/instrumentation': 6.11.1(@opentelemetry/api@1.9.0) + '@sentry/core': 9.42.1 + '@sentry/node-core': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/instrumentation@0.57.2(@opentelemetry/api@1.9.0))(@opentelemetry/resources@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) + '@sentry/opentelemetry': 9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0) + import-in-the-middle: 1.14.2 + minimatch: 9.0.5 + transitivePeerDependencies: + - supports-color + + '@sentry/opentelemetry@9.42.1(@opentelemetry/api@1.9.0)(@opentelemetry/context-async-hooks@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/core@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(@opentelemetry/semantic-conventions@1.36.0)': + dependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/context-async-hooks': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/core': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + '@opentelemetry/semantic-conventions': 1.36.0 + '@sentry/core': 9.42.1 + + '@sentry/vue@9.42.1(pinia@2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@sentry/browser': 9.42.1 + '@sentry/core': 9.42.1 + vue: 3.5.13(typescript@5.9.2) + optionalDependencies: + pinia: 2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)) + + '@sevinf/maybe@0.5.0': {} + + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + + '@sideway/pinpoint@2.0.0': {} + + '@sinclair/typebox@0.25.21': {} + + '@sinclair/typebox@0.27.8': {} + + '@sindresorhus/merge-streams@4.0.0': {} + + '@sinonjs/commons@2.0.0': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/commons@3.0.1': + dependencies: + type-detect: 4.0.8 + + '@sinonjs/fake-timers@10.0.2': + dependencies: + '@sinonjs/commons': 2.0.0 + + '@sinonjs/fake-timers@13.0.2': + dependencies: + '@sinonjs/commons': 3.0.1 + + '@smithy/abort-controller@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader-native@4.0.0': + dependencies: + '@smithy/util-base64': 4.0.0 + tslib: 2.8.1 + + '@smithy/chunked-blob-reader@5.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/config-resolver@4.1.2': + dependencies: + '@smithy/node-config-provider': 4.1.1 + '@smithy/types': 4.2.0 + '@smithy/util-config-provider': 4.0.0 + '@smithy/util-middleware': 4.0.2 + tslib: 2.6.2 + + '@smithy/core@3.3.2': + dependencies: + '@smithy/middleware-serde': 4.0.4 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-body-length-browser': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-stream': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.6.2 + + '@smithy/credential-provider-imds@4.0.4': + dependencies: + '@smithy/node-config-provider': 4.1.1 + '@smithy/property-provider': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + tslib: 2.8.1 + + '@smithy/eventstream-codec@1.1.0': + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 1.2.0 + '@smithy/util-hex-encoding': 1.1.0 + tslib: 2.8.1 + + '@smithy/eventstream-codec@2.2.0': + dependencies: + '@aws-crypto/crc32': 3.0.0 + '@smithy/types': 2.12.0 + '@smithy/util-hex-encoding': 2.2.0 + tslib: 2.8.1 + optional: true + + '@smithy/eventstream-codec@4.0.2': + dependencies: + '@aws-crypto/crc32': 5.2.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-browser@4.0.2': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-config-resolver@4.1.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-node@4.0.2': + dependencies: + '@smithy/eventstream-serde-universal': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/eventstream-serde-universal@4.0.2': + dependencies: + '@smithy/eventstream-codec': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/fetch-http-handler@5.0.2': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + tslib: 2.6.2 + + '@smithy/hash-blob-browser@4.0.2': + dependencies: + '@smithy/chunked-blob-reader': 5.0.0 + '@smithy/chunked-blob-reader-native': 4.0.0 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/hash-node@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.6.2 + + '@smithy/hash-stream-node@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/invalid-dependency@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/is-array-buffer@1.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@2.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/is-array-buffer@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/md5-js@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/middleware-content-length@4.0.2': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/middleware-endpoint@4.1.5': + dependencies: + '@smithy/core': 3.3.2 + '@smithy/middleware-serde': 4.0.4 + '@smithy/node-config-provider': 4.1.1 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + '@smithy/url-parser': 4.0.2 + '@smithy/util-middleware': 4.0.2 + tslib: 2.6.2 + + '@smithy/middleware-retry@4.1.6': + dependencies: + '@smithy/node-config-provider': 4.1.1 + '@smithy/protocol-http': 5.1.0 + '@smithy/service-error-classification': 4.0.3 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-retry': 4.0.3 + tslib: 2.6.2 + uuid: 9.0.1 + + '@smithy/middleware-serde@4.0.4': + dependencies: + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/middleware-stack@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/node-config-provider@4.1.1': + dependencies: + '@smithy/property-provider': 4.0.2 + '@smithy/shared-ini-file-loader': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/node-http-handler@4.0.4': + dependencies: + '@smithy/abort-controller': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/querystring-builder': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/property-provider@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/protocol-http@1.2.0': + dependencies: + '@smithy/types': 1.2.0 + tslib: 2.8.1 + + '@smithy/protocol-http@3.3.0': + dependencies: + '@smithy/types': 2.12.0 + tslib: 2.8.1 + optional: true + + '@smithy/protocol-http@5.1.0': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/querystring-builder@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + '@smithy/util-uri-escape': 4.0.0 + tslib: 2.8.1 + + '@smithy/querystring-parser@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/service-error-classification@4.0.3': + dependencies: + '@smithy/types': 4.2.0 + + '@smithy/shared-ini-file-loader@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@smithy/signature-v4@1.1.0': + dependencies: + '@smithy/eventstream-codec': 1.1.0 + '@smithy/is-array-buffer': 1.1.0 + '@smithy/types': 1.2.0 + '@smithy/util-hex-encoding': 1.1.0 + '@smithy/util-middleware': 1.1.0 + '@smithy/util-uri-escape': 1.1.0 + '@smithy/util-utf8': 1.1.0 + tslib: 2.8.1 + + '@smithy/signature-v4@2.2.1': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + '@smithy/types': 2.12.0 + '@smithy/util-hex-encoding': 2.2.0 + '@smithy/util-middleware': 2.2.0 + '@smithy/util-uri-escape': 2.2.0 + '@smithy/util-utf8': 2.3.0 + tslib: 2.8.1 + optional: true + + '@smithy/signature-v4@5.1.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-middleware': 4.0.2 + '@smithy/util-uri-escape': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/smithy-client@4.2.5': + dependencies: + '@smithy/core': 3.3.2 + '@smithy/middleware-endpoint': 4.1.5 + '@smithy/middleware-stack': 4.0.2 + '@smithy/protocol-http': 5.1.0 + '@smithy/types': 4.2.0 + '@smithy/util-stream': 4.2.0 + tslib: 2.6.2 + + '@smithy/types@1.2.0': + dependencies: + tslib: 2.8.1 + + '@smithy/types@2.12.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/types@4.2.0': + dependencies: + tslib: 2.6.2 + + '@smithy/url-parser@4.0.2': + dependencies: + '@smithy/querystring-parser': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/util-base64@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.6.2 + + '@smithy/util-body-length-browser@4.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-body-length-node@4.0.0': + dependencies: + tslib: 2.6.2 + + '@smithy/util-buffer-from@1.1.0': + dependencies: + '@smithy/is-array-buffer': 1.1.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@2.2.0': + dependencies: + '@smithy/is-array-buffer': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-buffer-from@4.0.0': + dependencies: + '@smithy/is-array-buffer': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-config-provider@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-defaults-mode-browser@4.0.13': + dependencies: + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + bowser: 2.11.0 + tslib: 2.6.2 + + '@smithy/util-defaults-mode-node@4.0.13': + dependencies: + '@smithy/config-resolver': 4.1.2 + '@smithy/credential-provider-imds': 4.0.4 + '@smithy/node-config-provider': 4.1.1 + '@smithy/property-provider': 4.0.2 + '@smithy/smithy-client': 4.2.5 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/util-endpoints@3.0.4': + dependencies: + '@smithy/node-config-provider': 4.1.1 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/util-hex-encoding@1.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-hex-encoding@2.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-hex-encoding@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@1.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-middleware@2.2.0': + dependencies: + '@smithy/types': 2.12.0 + tslib: 2.8.1 + optional: true + + '@smithy/util-middleware@4.0.2': + dependencies: + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/util-retry@4.0.3': + dependencies: + '@smithy/service-error-classification': 4.0.3 + '@smithy/types': 4.2.0 + tslib: 2.6.2 + + '@smithy/util-stream@4.2.0': + dependencies: + '@smithy/fetch-http-handler': 5.0.2 + '@smithy/node-http-handler': 4.0.4 + '@smithy/types': 4.2.0 + '@smithy/util-base64': 4.0.0 + '@smithy/util-buffer-from': 4.0.0 + '@smithy/util-hex-encoding': 4.0.0 + '@smithy/util-utf8': 4.0.0 + tslib: 2.8.1 + + '@smithy/util-uri-escape@1.1.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-uri-escape@2.2.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@smithy/util-uri-escape@4.0.0': + dependencies: + tslib: 2.8.1 + + '@smithy/util-utf8@1.1.0': + dependencies: + '@smithy/util-buffer-from': 1.1.0 + tslib: 2.8.1 + + '@smithy/util-utf8@2.3.0': + dependencies: + '@smithy/util-buffer-from': 2.2.0 + tslib: 2.8.1 + + '@smithy/util-utf8@4.0.0': + dependencies: + '@smithy/util-buffer-from': 4.0.0 + tslib: 2.6.2 + + '@smithy/util-waiter@4.0.3': + dependencies: + '@smithy/abort-controller': 4.0.2 + '@smithy/types': 4.2.0 + tslib: 2.8.1 + + '@sqltools/formatter@1.2.5': {} + + '@storybook/addon-a11y@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/addon-highlight': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/test': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + axe-core: 4.7.2 + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/addon-actions@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + '@types/uuid': 9.0.8 + dequal: 2.0.3 + polished: 4.2.2 + storybook: 8.6.4(prettier@3.6.2) + uuid: 9.0.1 + + '@storybook/addon-backgrounds@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + memoizerific: 1.11.3 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + + '@storybook/addon-controls@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + dequal: 2.0.3 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + + '@storybook/addon-docs@8.6.4(@types/react@18.0.27)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@mdx-js/react': 3.0.1(@types/react@18.0.27)(react@18.2.0) + '@storybook/blocks': 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/csf-plugin': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/react-dom-shim': 8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.6.2)) + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-essentials@8.6.4(@types/react@18.0.27)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/addon-actions': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-backgrounds': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-controls': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-docs': 8.6.4(@types/react@18.0.27)(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-highlight': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-measure': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-outline': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-toolbars': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/addon-viewport': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + transitivePeerDependencies: + - '@types/react' + + '@storybook/addon-highlight@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/addon-interactions@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/test': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + polished: 4.2.2 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + + '@storybook/addon-links@8.6.4(react@18.2.0)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + + '@storybook/addon-measure@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.4(prettier@3.6.2) + tiny-invariant: 1.3.3 + + '@storybook/addon-outline@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + + '@storybook/addon-themes@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + + '@storybook/addon-toolbars@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/addon-viewport@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + memoizerific: 1.11.3 + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/blocks@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/icons': 1.2.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + optionalDependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/builder-vite@8.6.4(storybook@8.6.4(prettier@3.6.2))(vite@7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))': + dependencies: + '@storybook/csf-plugin': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + browser-assert: 1.2.1 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + vite: 7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + '@storybook/components@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/core@8.6.4(prettier@3.6.2)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/theming': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + better-opn: 3.0.2 + browser-assert: 1.2.1 + esbuild: 0.25.9 + esbuild-register: 3.5.0(esbuild@0.25.9) + jsdoc-type-pratt-parser: 4.1.0 + process: 0.11.10 + recast: 0.23.6 + semver: 7.7.2 + util: 0.12.5 + ws: 8.18.3 + optionalDependencies: + prettier: 3.6.2 + transitivePeerDependencies: + - bufferutil + - storybook + - supports-color + - utf-8-validate + + '@storybook/csf-plugin@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + unplugin: 1.11.0 + + '@storybook/global@5.0.0': {} + + '@storybook/icons@1.2.12(react-dom@18.2.0(react@18.2.0))(react@18.2.0)': + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + + '@storybook/instrumenter@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + '@vitest/utils': 2.1.8 + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/manager-api@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/preview-api@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/react-dom-shim@8.6.4(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(storybook@8.6.4(prettier@3.6.2))': + dependencies: + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/test@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + '@storybook/global': 5.0.0 + '@storybook/instrumenter': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@testing-library/dom': 10.4.0 + '@testing-library/jest-dom': 6.5.0 + '@testing-library/user-event': 14.5.2(@testing-library/dom@10.4.0) + '@vitest/expect': 2.0.5 + '@vitest/spy': 2.0.5 + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/theming@8.6.4(storybook@8.6.4(prettier@3.6.2))': + dependencies: + storybook: 8.6.4(prettier@3.6.2) + + '@storybook/vue3-vite@8.6.4(storybook@8.6.4(prettier@3.6.2))(vite@7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@storybook/builder-vite': 8.6.4(storybook@8.6.4(prettier@3.6.2))(vite@7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + '@storybook/vue3': 8.6.4(storybook@8.6.4(prettier@3.6.2))(vue@3.5.13(typescript@5.9.2)) + find-package-json: 1.2.0 + magic-string: 0.30.17 + storybook: 8.6.4(prettier@3.6.2) + typescript: 5.9.2 + vite: 7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue-component-meta: 2.1.10(typescript@5.9.2) + vue-docgen-api: 4.76.0(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - vue + + '@storybook/vue3@8.6.4(storybook@8.6.4(prettier@3.6.2))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@storybook/components': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/global': 5.0.0 + '@storybook/manager-api': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/preview-api': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@storybook/theming': 8.6.4(storybook@8.6.4(prettier@3.6.2)) + '@vue/compiler-core': 3.5.13 + storybook: 8.6.4(prettier@3.6.2) + ts-dedent: 2.2.0 + type-fest: 2.19.0 + vue: 3.5.13(typescript@5.9.2) + vue-component-type-helpers: 3.0.6 + + '@stylistic/eslint-plugin@5.0.0(eslint@9.29.0(jiti@1.21.7))': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) + '@typescript-eslint/types': 8.35.0 + eslint: 9.29.0(jiti@1.21.7) + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + estraverse: 5.3.0 + picomatch: 4.0.2 + + '@supabase/auth-js@2.69.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/functions-js@2.4.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/node-fetch@2.6.15': + dependencies: + whatwg-url: 5.0.0 + + '@supabase/postgrest-js@1.19.4': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/realtime-js@2.11.9': + dependencies: + '@supabase/node-fetch': 2.6.15 + '@types/phoenix': 1.6.6 + '@types/ws': 8.18.1(patch_hash=682b44b740be55e5d7018e6fe335880851dadf2524b6c723c9ed0c29cb2fa7fb) + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supabase/storage-js@2.7.1': + dependencies: + '@supabase/node-fetch': 2.6.15 + + '@supabase/supabase-js@2.49.9': + dependencies: + '@supabase/auth-js': 2.69.1 + '@supabase/functions-js': 2.4.4 + '@supabase/node-fetch': 2.6.15 + '@supabase/postgrest-js': 1.19.4 + '@supabase/realtime-js': 2.11.9 + '@supabase/storage-js': 2.7.1 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + '@supercharge/promise-pool@3.1.0': {} + + '@swc/helpers@0.5.17': + dependencies: + tslib: 2.8.1 + + '@sxzz/popperjs-es@2.11.7': {} + + '@tanstack/table-core@8.21.2': {} + + '@tanstack/virtual-core@3.13.9': {} + + '@tanstack/vue-table@8.21.2(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@tanstack/table-core': 8.21.2 + vue: 3.5.13(typescript@5.9.2) + + '@tanstack/vue-virtual@3.13.9(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@tanstack/virtual-core': 3.13.9 + vue: 3.5.13(typescript@5.9.2) + + '@techteamer/ocsp@1.0.1': + dependencies: + asn1.js: 5.4.1 + asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1) + asn1.js-rfc5280: 3.0.0 + async: 3.2.4 + simple-lru-cache: 0.0.2 + + '@tediousjs/connection-string@0.5.0': {} + + '@testcontainers/postgresql@11.0.3': + dependencies: + testcontainers: 11.0.3 + transitivePeerDependencies: + - supports-color + + '@testcontainers/redis@11.0.3': + dependencies: + testcontainers: 11.0.3 + transitivePeerDependencies: + - supports-color + + '@testing-library/dom@10.4.0': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.10 + '@types/aria-query': 5.0.1 + aria-query: 5.3.0 + chalk: 4.1.2 + dom-accessibility-api: 0.5.15 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/dom@9.3.4': + dependencies: + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.26.10 + '@types/aria-query': 5.0.1 + aria-query: 5.1.3 + chalk: 4.1.2 + dom-accessibility-api: 0.5.15 + lz-string: 1.5.0 + pretty-format: 27.5.1 + + '@testing-library/jest-dom@6.5.0': + dependencies: + '@adobe/css-tools': 4.4.0 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/jest-dom@6.6.3': + dependencies: + '@adobe/css-tools': 4.4.0 + aria-query: 5.3.0 + chalk: 3.0.0 + css.escape: 1.5.1 + dom-accessibility-api: 0.6.3 + lodash: 4.17.21 + redent: 3.0.0 + + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@testing-library/user-event@14.6.1(@testing-library/dom@10.4.0)': + dependencies: + '@testing-library/dom': 10.4.0 + + '@testing-library/vue@8.1.0(@vue/compiler-sfc@3.5.13)(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@babel/runtime': 7.26.10 + '@testing-library/dom': 9.3.4 + '@vue/test-utils': 2.4.6 + vue: 3.5.13(typescript@5.9.2) + optionalDependencies: + '@vue/compiler-sfc': 3.5.13 + + '@tokenizer/token@0.3.0': {} + + '@tootallnate/once@1.1.2': + optional: true + + '@tootallnate/once@2.0.0': {} + + '@trysound/sax@0.2.0': {} + + '@ts-graphviz/adapter@2.0.6': + dependencies: + '@ts-graphviz/common': 2.1.5 + + '@ts-graphviz/ast@2.0.7': + dependencies: + '@ts-graphviz/common': 2.1.5 + + '@ts-graphviz/common@2.1.5': {} + + '@ts-graphviz/core@2.0.7': + dependencies: + '@ts-graphviz/ast': 2.0.7 + '@ts-graphviz/common': 2.1.5 + + '@ts-morph/common@0.27.0': + dependencies: + fast-glob: 3.3.3 + minimatch: 10.0.3 + path-browserify: 1.0.1 + + '@tsconfig/node10@1.0.11': + optional: true + + '@tsconfig/node12@1.0.11': + optional: true + + '@tsconfig/node14@1.0.3': + optional: true + + '@tsconfig/node16@1.0.4': + optional: true + + '@tybys/wasm-util@0.9.0': + dependencies: + tslib: 2.8.1 + optional: true + + '@types/amqplib@0.10.1': + dependencies: + '@types/node': 20.17.57 + + '@types/argparse@1.0.38': {} + + '@types/aria-query@5.0.1': {} + + '@types/asn1@0.2.0': + dependencies: + '@types/node': 20.19.1 + + '@types/aws4@1.11.2': + dependencies: + '@types/node': 20.17.57 + + '@types/babel__core@7.20.0': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + '@types/babel__generator': 7.6.4 + '@types/babel__template': 7.4.1 + '@types/babel__traverse': 7.18.2 + + '@types/babel__generator@7.6.4': + dependencies: + '@babel/types': 7.27.6 + + '@types/babel__template@7.4.1': + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + + '@types/babel__traverse@7.18.2': + dependencies: + '@babel/types': 7.27.6 + + '@types/basic-auth@1.1.3': + dependencies: + '@types/node': 20.19.10 + + '@types/bcryptjs@2.4.2': {} + + '@types/bluebird@3.5.37': {} + + '@types/body-parser@1.19.2': + dependencies: + '@types/connect': 3.4.38 + '@types/node': 20.19.10 + + '@types/caseless@0.12.5': {} + + '@types/cheerio@0.22.31': + dependencies: + '@types/node': 20.17.57 + + '@types/cli-progress@3.11.6': + dependencies: + '@types/node': 20.19.1 + + '@types/compression@1.7.5': + dependencies: + '@types/express': 5.0.1 + + '@types/connect@3.4.38': + dependencies: + '@types/node': 20.19.10 + + '@types/convict@6.1.1': + dependencies: + '@types/node': 20.17.57 + + '@types/cookie-parser@1.4.8(@types/express@5.0.1)': + dependencies: + '@types/express': 5.0.1 + + '@types/cookiejar@2.1.5': {} + + '@types/dateformat@3.0.1': {} + + '@types/debug@4.1.12': + dependencies: + '@types/ms': 2.1.0 + + '@types/docker-modem@3.0.6': + dependencies: + '@types/node': 20.19.10 + '@types/ssh2': 1.11.6 + + '@types/dockerode@3.3.42': + dependencies: + '@types/docker-modem': 3.0.6 + '@types/node': 20.19.1 + '@types/ssh2': 1.11.6 + + '@types/eslint@9.6.1': + dependencies: + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + + '@types/estree@1.0.8': {} + + '@types/eventsource@1.1.9': {} + + '@types/express-serve-static-core@5.0.6(patch_hash=d602248fcd302cf5a794d1e85a411633ba9635ea5d566d6f2e0429c7ae0fa3eb)': + dependencies: + '@types/node': 20.19.10 + '@types/qs': 6.9.15 + '@types/range-parser': 1.2.4 + '@types/send': 0.17.4 + + '@types/express@5.0.1': + dependencies: + '@types/body-parser': 1.19.2 + '@types/express-serve-static-core': 5.0.6(patch_hash=d602248fcd302cf5a794d1e85a411633ba9635ea5d566d6f2e0429c7ae0fa3eb) + '@types/serve-static': 1.15.0 + + '@types/file-saver@2.0.5': {} + + '@types/flat@5.0.5': {} + + '@types/formidable@3.4.5': + dependencies: + '@types/node': 20.17.57 + + '@types/fs-extra@11.0.4': + dependencies: + '@types/jsonfile': 6.1.4 + '@types/node': 20.17.57 + optional: true + + '@types/ftp@0.3.33': + dependencies: + '@types/node': 20.19.1 + + '@types/glob@8.0.0': + dependencies: + '@types/minimatch': 5.1.2 + '@types/node': 20.19.1 + + '@types/gm@1.25.0': + dependencies: + '@types/node': 20.17.57 + + '@types/graceful-fs@4.1.6': + dependencies: + '@types/node': 20.19.10 + + '@types/html-to-text@9.0.4': {} + + '@types/http-proxy@1.17.16': + dependencies: + '@types/node': 20.19.1 + + '@types/humanize-duration@3.27.1': {} + + '@types/imap@0.8.40': + dependencies: + '@types/node': 20.17.57 + + '@types/inquirer@6.5.0': + dependencies: + '@types/through': 0.0.30 + rxjs: 6.6.7 + + '@types/ioredis-mock@8.2.2': + dependencies: + ioredis: 5.3.2 + transitivePeerDependencies: + - supports-color + + '@types/istanbul-lib-coverage@2.0.4': {} + + '@types/istanbul-lib-report@3.0.0': + dependencies: + '@types/istanbul-lib-coverage': 2.0.4 + + '@types/istanbul-reports@3.0.1': + dependencies: + '@types/istanbul-lib-report': 3.0.0 + + '@types/jest@29.5.3': + dependencies: + expect: 29.5.0 + pretty-format: 29.5.0 + + '@types/jmespath@0.15.0': {} + + '@types/js-nacl@1.3.0': {} + + '@types/jsdom@20.0.1': + dependencies: + '@types/node': 20.19.1 + '@types/tough-cookie': 4.0.2 + parse5: 7.1.2 + + '@types/json-diff@1.0.0': {} + + '@types/json-schema@7.0.15': {} + + '@types/jsonfile@6.1.4': + dependencies: + '@types/node': 20.19.1 + optional: true + + '@types/jsonpath@0.2.0': {} + + '@types/jsonwebtoken@9.0.9': + dependencies: + '@types/ms': 2.1.0 + '@types/node': 20.19.10 + + '@types/k6@0.52.0': {} + + '@types/linkify-it@3.0.5': {} + + '@types/lodash-es@4.17.12': + dependencies: + '@types/lodash': 4.17.17 + + '@types/lodash@4.17.17': {} + + '@types/long@4.0.2': {} + + '@types/lossless-json@1.0.1': {} + + '@types/luxon@3.2.0': {} + + '@types/luxon@3.4.2': {} + + '@types/mailparser@3.4.4': + dependencies: + '@types/node': 20.17.57 + iconv-lite: 0.6.3 + + '@types/markdown-it-emoji@2.0.5': + dependencies: + '@types/markdown-it': 13.0.9 + + '@types/markdown-it-link-attributes@3.0.5': + dependencies: + '@types/markdown-it': 13.0.9 + + '@types/markdown-it@13.0.9': + dependencies: + '@types/linkify-it': 3.0.5 + '@types/mdurl': 1.0.5 + + '@types/md5@2.3.5': {} + + '@types/mdurl@1.0.5': {} + + '@types/mdx@2.0.3': {} + + '@types/methods@1.1.4': {} + + '@types/mime-types@2.1.1': {} + + '@types/mime@1.3.5': {} + + '@types/mime@3.0.1': {} + + '@types/minimatch@5.1.2': {} + + '@types/ms@2.1.0': {} + + '@types/mssql@9.1.5': + dependencies: + '@types/node': 20.17.57 + '@types/tedious': 4.0.9 + tarn: 3.0.2 + + '@types/multer@1.4.12': + dependencies: + '@types/express': 5.0.1 + + '@types/mysql@2.15.26': + dependencies: + '@types/node': 20.19.10 + + '@types/node-fetch@2.6.12': + dependencies: + '@types/node': 20.19.10 + form-data: 4.0.4 + + '@types/node-fetch@2.6.13': + dependencies: + '@types/node': 20.19.10 + form-data: 4.0.4 + + '@types/node@20.17.57': + dependencies: + undici-types: 6.19.8 + + '@types/node@20.19.1': + dependencies: + undici-types: 6.21.0 + + '@types/node@20.19.10': + dependencies: + undici-types: 6.21.0 + + '@types/nodemailer@6.4.14': + dependencies: + '@types/node': 20.17.57 + + '@types/pg-pool@2.0.6': + dependencies: + '@types/pg': 8.11.6 + + '@types/pg@8.11.6': + dependencies: + '@types/node': 20.17.57 + pg-protocol: 1.6.1 + pg-types: 4.0.2 + + '@types/pg@8.6.1': + dependencies: + '@types/node': 20.19.10 + pg-protocol: 1.6.1 + pg-types: 2.2.0 + + '@types/phoenix@1.6.6': {} + + '@types/promise-ftp-common@1.1.0': {} + + '@types/promise-ftp@1.3.4': + dependencies: + '@types/bluebird': 3.5.37 + '@types/ftp': 0.3.33 + '@types/node': 20.17.57 + '@types/promise-ftp-common': 1.1.0 + + '@types/prop-types@15.7.15': {} + + '@types/proxy-from-env@1.0.4': + dependencies: + '@types/node': 20.17.57 + + '@types/psl@1.1.0': {} + + '@types/qs@6.9.15': {} + + '@types/quoted-printable@1.0.2': {} + + '@types/range-parser@1.2.4': {} + + '@types/react@18.0.27': + dependencies: + '@types/prop-types': 15.7.15 + '@types/scheduler': 0.26.0 + csstype: 3.1.3 + + '@types/readable-stream@4.0.10': + dependencies: + '@types/node': 20.19.10 + safe-buffer: 5.1.2 + + '@types/replacestream@4.0.1': {} + + '@types/request@2.48.12': + dependencies: + '@types/caseless': 0.12.5 + '@types/node': 20.19.10 + '@types/tough-cookie': 4.0.5 + form-data: 4.0.4 + + '@types/retry@0.12.0': {} + + '@types/retry@0.12.5': {} + + '@types/rfc2047@2.0.1': {} + + '@types/sanitize-html@2.11.0': + dependencies: + htmlparser2: 8.0.2 + + '@types/scheduler@0.26.0': {} + + '@types/semver@7.7.0': {} + + '@types/send@0.17.4': + dependencies: + '@types/mime': 1.3.5 + '@types/node': 20.19.10 + + '@types/serve-static@1.15.0': + dependencies: + '@types/mime': 3.0.1 + '@types/node': 20.19.10 + + '@types/shelljs@0.8.11': + dependencies: + '@types/glob': 8.0.0 + '@types/node': 20.17.57 + + '@types/shimmer@1.2.0': {} + + '@types/showdown@1.9.4': {} + + '@types/sinonjs__fake-timers@8.1.1': {} + + '@types/sizzle@2.3.3': {} + + '@types/ssh2-sftp-client@9.0.5': + dependencies: + '@types/ssh2': 1.11.6 + + '@types/ssh2-streams@0.1.12': + dependencies: + '@types/node': 20.19.10 + + '@types/ssh2@0.5.52': + dependencies: + '@types/node': 20.19.10 + '@types/ssh2-streams': 0.1.12 + + '@types/ssh2@1.11.6': + dependencies: + '@types/node': 20.19.1 + + '@types/sshpk@1.17.4': + dependencies: + '@types/asn1': 0.2.0 + '@types/node': 20.17.57 + + '@types/stack-utils@2.0.1': {} + + '@types/stylis@4.2.0': {} + + '@types/superagent@8.1.9': + dependencies: + '@types/cookiejar': 2.1.5 + '@types/methods': 1.1.4 + '@types/node': 20.17.57 + form-data: 4.0.4 + + '@types/supertest@6.0.3': + dependencies: + '@types/methods': 1.1.4 + '@types/superagent': 8.1.9 + + '@types/swagger-ui-express@4.1.8': + dependencies: + '@types/express': 5.0.1 + '@types/serve-static': 1.15.0 + + '@types/syslog-client@1.1.2': + dependencies: + '@types/node': 20.17.57 + + '@types/tedious@4.0.14': + dependencies: + '@types/node': 20.19.10 + + '@types/tedious@4.0.9': + dependencies: + '@types/node': 20.19.1 + + '@types/temp@0.9.4': + dependencies: + '@types/node': 20.17.57 + + '@types/through@0.0.30': + dependencies: + '@types/node': 20.19.1 + + '@types/tough-cookie@4.0.2': {} + + '@types/tough-cookie@4.0.5': {} + + '@types/triple-beam@1.3.5': {} + + '@types/utf8@3.0.3': {} + + '@types/uuencode@0.0.3(patch_hash=083a73709a54db57b092d986b43d27ddda3cb8008f9510e98bc9e6da0e1cbb62)': + dependencies: + '@types/node': 20.17.57 + + '@types/uuid@10.0.0': {} + + '@types/uuid@8.3.4': {} + + '@types/uuid@9.0.8': {} + + '@types/validator@13.7.10': {} + + '@types/validator@13.7.7': {} + + '@types/web-bluetooth@0.0.16': {} + + '@types/web-bluetooth@0.0.20': {} + + '@types/web-bluetooth@0.0.21': {} + + '@types/webidl-conversions@7.0.0': {} + + '@types/whatwg-url@11.0.4': + dependencies: + '@types/webidl-conversions': 7.0.0 + + '@types/ws@8.18.1(patch_hash=682b44b740be55e5d7018e6fe335880851dadf2524b6c723c9ed0c29cb2fa7fb)': + dependencies: + '@types/node': 20.17.57 + + '@types/xml2js@0.4.14': + dependencies: + '@types/node': 20.19.10 + + '@types/yamljs@0.2.31': {} + + '@types/yargs-parser@21.0.0': {} + + '@types/yargs@17.0.19': + dependencies: + '@types/yargs-parser': 21.0.0 + + '@types/yauzl@2.10.0': + dependencies: + '@types/node': 20.19.10 + optional: true + + '@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/type-utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.35.0 + eslint: 9.29.0(jiti@1.21.7) + graphemer: 1.4.0 + ignore: 7.0.5 + natural-compare: 1.4.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.35.0 + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.29.0(jiti@1.21.7) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/project-service@8.35.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.9.2) + '@typescript-eslint/types': 8.35.0 + debug: 4.4.1(supports-color@8.1.1) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/rule-tester@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + ajv: 6.12.6 + eslint: 9.29.0(jiti@1.21.7) + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/scope-manager@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + + '@typescript-eslint/scope-manager@8.35.0': + dependencies: + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/visitor-keys': 8.35.0 + + '@typescript-eslint/tsconfig-utils@8.35.0(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@typescript-eslint/type-utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.29.0(jiti@1.21.7) + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/types@6.21.0': {} + + '@typescript-eslint/types@8.35.0': {} + + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 + debug: 4.4.1(supports-color@8.1.1) + globby: 11.1.0 + is-glob: 4.0.3 + minimatch: 9.0.3 + semver: 7.7.2 + ts-api-utils: 1.4.3(typescript@5.9.2) + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.35.0(typescript@5.9.2)': + dependencies: + '@typescript-eslint/project-service': 8.35.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.35.0(typescript@5.9.2) + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/visitor-keys': 8.35.0 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/utils@6.21.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) + '@types/json-schema': 7.0.15 + '@types/semver': 7.7.0 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.2) + eslint: 9.29.0(jiti@1.21.7) + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + - typescript + + '@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2)': + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) + '@typescript-eslint/scope-manager': 8.35.0 + '@typescript-eslint/types': 8.35.0 + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.9.2) + eslint: 9.29.0(jiti@1.21.7) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/visitor-keys@6.21.0': + dependencies: + '@typescript-eslint/types': 6.21.0 + eslint-visitor-keys: 3.4.3 + + '@typescript-eslint/visitor-keys@8.35.0': + dependencies: + '@typescript-eslint/types': 8.35.0 + eslint-visitor-keys: 4.2.1 + + '@typescript/vfs@1.6.0(typescript@5.9.2)': + dependencies: + debug: 4.4.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + '@typespec/ts-http-runtime@0.2.2': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@unrs/resolver-binding-android-arm-eabi@1.9.2': + optional: true + + '@unrs/resolver-binding-android-arm64@1.9.2': + optional: true + + '@unrs/resolver-binding-darwin-arm64@1.9.2': + optional: true + + '@unrs/resolver-binding-darwin-x64@1.9.2': + optional: true + + '@unrs/resolver-binding-freebsd-x64@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-arm-gnueabihf@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-arm-musleabihf@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-gnu@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-arm64-musl@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-ppc64-gnu@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-gnu@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-riscv64-musl@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-s390x-gnu@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-x64-gnu@1.9.2': + optional: true + + '@unrs/resolver-binding-linux-x64-musl@1.9.2': + optional: true + + '@unrs/resolver-binding-wasm32-wasi@1.9.2': + dependencies: + '@napi-rs/wasm-runtime': 0.2.11 + optional: true + + '@unrs/resolver-binding-win32-arm64-msvc@1.9.2': + optional: true + + '@unrs/resolver-binding-win32-ia32-msvc@1.9.2': + optional: true + + '@unrs/resolver-binding-win32-x64-msvc@1.9.2': + optional: true + + '@vitejs/plugin-legacy@6.0.2(terser@5.16.1)(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))': + dependencies: + '@babel/core': 7.26.10 + '@babel/preset-env': 7.26.9(@babel/core@7.26.10) + browserslist: 4.24.4 + browserslist-to-esbuild: 2.1.1(browserslist@4.24.4) + core-js: 3.40.0 + magic-string: 0.30.17 + regenerator-runtime: 0.14.1 + systemjs: 6.15.1 + terser: 5.16.1 + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + transitivePeerDependencies: + - supports-color + + '@vitejs/plugin-vue@5.2.4(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))(vue@3.5.13(typescript@5.9.2))': + dependencies: + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vue: 3.5.13(typescript@5.9.2) + + '@vitest/coverage-v8@3.2.4(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))': + dependencies: + '@ampproject/remapping': 2.3.0 + '@bcoe/v8-coverage': 1.0.2 + ast-v8-to-istanbul: 0.3.3 + debug: 4.4.1(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 5.0.6 + istanbul-reports: 3.1.7 + magic-string: 0.30.17 + magicast: 0.3.5 + std-env: 3.9.0 + test-exclude: 7.0.1 + tinyrainbow: 2.0.0 + vitest: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + transitivePeerDependencies: + - supports-color + + '@vitest/expect@2.0.5': + dependencies: + '@vitest/spy': 2.0.5 + '@vitest/utils': 2.0.5 + chai: 5.1.2 + tinyrainbow: 1.2.0 + + '@vitest/expect@3.1.3': + dependencies: + '@vitest/spy': 3.1.3 + '@vitest/utils': 3.1.3 + chai: 5.2.0 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.1.3(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3))': + dependencies: + '@vitest/spy': 3.1.3 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + '@vitest/pretty-format@2.0.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@2.1.8': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/pretty-format@3.1.3': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/pretty-format@3.2.4': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.1.3': + dependencies: + '@vitest/utils': 3.1.3 + pathe: 2.0.3 + + '@vitest/snapshot@3.1.3': + dependencies: + '@vitest/pretty-format': 3.1.3 + magic-string: 0.30.17 + pathe: 2.0.3 + + '@vitest/spy@2.0.5': + dependencies: + tinyspy: 3.0.2 + + '@vitest/spy@3.1.3': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.0.5': + dependencies: + '@vitest/pretty-format': 2.0.5 + estree-walker: 3.0.3 + loupe: 3.1.4 + tinyrainbow: 1.2.0 + + '@vitest/utils@2.1.8': + dependencies: + '@vitest/pretty-format': 2.1.8 + loupe: 3.1.4 + tinyrainbow: 1.2.0 + + '@vitest/utils@3.1.3': + dependencies: + '@vitest/pretty-format': 3.1.3 + loupe: 3.1.4 + tinyrainbow: 2.0.0 + + '@volar/language-core@2.4.12': + dependencies: + '@volar/source-map': 2.4.12 + + '@volar/source-map@2.4.12': {} + + '@volar/typescript@2.4.12': + dependencies: + '@volar/language-core': 2.4.12 + path-browserify: 1.0.1 + vscode-uri: 3.0.8 + + '@vue-flow/background@1.3.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.9.2)) + vue: 3.5.13(typescript@5.9.2) + + '@vue-flow/controls@1.1.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.9.2)) + vue: 3.5.13(typescript@5.9.2) + + '@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vueuse/core': 10.11.0(vue@3.5.13(typescript@5.9.2)) + d3-drag: 3.0.0 + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + vue: 3.5.13(typescript@5.9.2) + transitivePeerDependencies: + - '@vue/composition-api' + + '@vue-flow/minimap@1.5.2(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.9.2)) + d3-selection: 3.0.0 + d3-zoom: 3.0.0 + vue: 3.5.13(typescript@5.9.2) + + '@vue-flow/node-resizer@1.4.0(@vue-flow/core@1.42.1(vue@3.5.13(typescript@5.9.2)))(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vue-flow/core': 1.42.1(vue@3.5.13(typescript@5.9.2)) + d3-drag: 3.0.0 + d3-selection: 3.0.0 + vue: 3.5.13(typescript@5.9.2) + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.10 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.27.5 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.6 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-vue2@2.7.16': + dependencies: + de-indent: 1.0.2 + he: 1.2.0 + + '@vue/devtools-api@6.6.4': {} + + '@vue/language-core@2.1.10(typescript@5.9.2)': + dependencies: + '@volar/language-core': 2.4.12 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.13 + alien-signals: 0.2.2 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.9.2 + + '@vue/language-core@2.2.0(typescript@5.9.2)': + dependencies: + '@volar/language-core': 2.4.12 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.13 + alien-signals: 0.4.14 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.9.2 + + '@vue/language-core@2.2.8(typescript@5.9.2)': + dependencies: + '@volar/language-core': 2.4.12 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-vue2': 2.7.16 + '@vue/shared': 3.5.13 + alien-signals: 1.0.4 + minimatch: 9.0.5 + muggle-string: 0.4.1 + path-browserify: 1.0.1 + optionalDependencies: + typescript: 5.9.2 + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13(typescript@5.9.2) + + '@vue/shared@3.5.13': {} + + '@vue/test-utils@2.4.6': + dependencies: + js-beautify: 1.14.9 + vue-component-type-helpers: 2.2.12 + + '@vue/tsconfig@0.7.0(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2))': + optionalDependencies: + typescript: 5.9.2 + vue: 3.5.13(typescript@5.9.2) + + '@vueuse/components@10.11.0(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@vueuse/core': 10.11.0(vue@3.5.13(typescript@5.9.2)) + '@vueuse/shared': 10.11.0(vue@3.5.13(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@10.11.0(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@types/web-bluetooth': 0.0.20 + '@vueuse/metadata': 10.11.0 + '@vueuse/shared': 10.11.0(vue@3.5.13(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/core@12.8.2(typescript@5.9.2)': + dependencies: + '@types/web-bluetooth': 0.0.21 + '@vueuse/metadata': 12.8.2 + '@vueuse/shared': 12.8.2(typescript@5.9.2) + vue: 3.5.13(typescript@5.9.2) + transitivePeerDependencies: + - typescript + + '@vueuse/core@9.13.0(vue@3.5.13(typescript@5.9.2))': + dependencies: + '@types/web-bluetooth': 0.0.16 + '@vueuse/metadata': 9.13.0 + '@vueuse/shared': 9.13.0(vue@3.5.13(typescript@5.9.2)) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/metadata@10.11.0': {} + + '@vueuse/metadata@12.8.2': {} + + '@vueuse/metadata@9.13.0': {} + + '@vueuse/shared@10.11.0(vue@3.5.13(typescript@5.9.2))': + dependencies: + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vueuse/shared@12.8.2(typescript@5.9.2)': + dependencies: + vue: 3.5.13(typescript@5.9.2) + transitivePeerDependencies: + - typescript + + '@vueuse/shared@9.13.0(vue@3.5.13(typescript@5.9.2))': + dependencies: + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + transitivePeerDependencies: + - '@vue/composition-api' + - vue + + '@vvo/tzdb@6.141.0': {} + + '@xata.io/client@0.28.4(typescript@5.9.2)': + dependencies: + typescript: 5.9.2 + + '@xmldom/is-dom-node@1.0.1': {} + + '@xmldom/xmldom@0.8.10': {} + + '@zilliz/milvus2-sdk-node@2.5.7': + dependencies: + '@grpc/grpc-js': 1.13.2 + '@grpc/proto-loader': 0.7.13 + '@opentelemetry/api': 1.9.0 + '@petamoriken/float16': 3.9.2 + dayjs: 1.11.10 + generic-pool: 3.9.0 + lru-cache: 9.1.2 + protobufjs: 7.4.0 + winston: 3.14.2 + + abab@2.0.6: {} + + abbrev@1.1.1: {} + + abort-controller-x@0.4.3: {} + + abort-controller@3.0.0: + dependencies: + event-target-shim: 5.0.1 + + accepts@2.0.0: + dependencies: + mime-types: 3.0.1 + negotiator: 1.0.0 + + acorn-globals@7.0.1: + dependencies: + acorn: 8.14.0 + acorn-walk: 8.3.4 + + acorn-import-attributes@1.9.5(acorn@8.14.0): + dependencies: + acorn: 8.14.0 + + acorn-jsx@5.3.2(acorn@8.15.0): + dependencies: + acorn: 8.15.0 + + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 + + acorn@7.4.1: {} + + acorn@8.12.1: {} + + acorn@8.14.0: {} + + acorn@8.15.0: {} + + adm-zip@0.5.10: {} + + ag-charts-types@12.1.1: {} + + ag-grid-community@34.1.1: + dependencies: + ag-charts-types: 12.1.1 + + ag-grid-vue3@34.1.1(vue@3.5.13(typescript@5.9.2)): + dependencies: + ag-grid-community: 34.1.1 + vue: 3.5.13(typescript@5.9.2) + + agent-base@5.1.1: {} + + agent-base@6.0.2: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + agent-base@7.1.3: {} + + agentkeepalive@4.6.0: + dependencies: + humanize-ms: 1.2.1 + + aggregate-error@3.1.0: + dependencies: + clean-stack: 2.2.0 + indent-string: 4.0.0 + + ajv-draft-04@1.0.0(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-draft-04@1.0.0(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv-formats@3.0.1(ajv@8.13.0): + optionalDependencies: + ajv: 8.13.0 + + ajv-formats@3.0.1(ajv@8.17.1): + optionalDependencies: + ajv: 8.17.1 + + ajv@6.12.6: + dependencies: + fast-deep-equal: 3.1.3 + fast-json-stable-stringify: 2.1.0 + json-schema-traverse: 0.4.1 + uri-js: 4.4.1 + + ajv@7.2.4: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.12.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.13.0: + dependencies: + fast-deep-equal: 3.1.3 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + uri-js: 4.4.1 + + ajv@8.17.1: + dependencies: + fast-deep-equal: 3.1.3 + fast-uri: 3.0.1 + json-schema-traverse: 1.0.0 + require-from-string: 2.0.2 + + alasql@4.4.0(encoding@0.1.13): + dependencies: + cross-fetch: 4.0.0(encoding@0.1.13) + yargs: 16.2.0 + transitivePeerDependencies: + - encoding + + alien-signals@0.2.2: {} + + alien-signals@0.4.14: {} + + alien-signals@1.0.4: {} + + amqplib@0.10.6: + dependencies: + '@acuminous/bitsyntax': 0.1.2 + buffer-more-ints: 1.0.0 + url-parse: 1.5.10 + transitivePeerDependencies: + - supports-color + + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 + + ansi-regex@5.0.1: {} + + ansi-regex@6.0.1: {} + + ansi-styles@4.3.0: + dependencies: + color-convert: 2.0.1 + + ansi-styles@5.2.0: {} + + ansi-styles@6.2.1: {} + + ansis@3.17.0: {} + + ansis@3.2.0: {} + + any-promise@1.3.0: {} + + anymatch@3.1.3: + dependencies: + normalize-path: 3.0.0 + picomatch: 2.3.1 + + app-module-path@2.2.0: {} + + app-root-path@3.1.0: {} + + append-field@1.0.0: {} + + aproba@2.0.0: + optional: true + + arch@2.2.0: {} + + archiver-utils@5.0.2: + dependencies: + glob: 10.4.5 + graceful-fs: 4.2.11 + is-stream: 2.0.1 + lazystream: 1.0.1 + lodash: 4.17.21 + normalize-path: 3.0.0 + readable-stream: 4.5.2 + + archiver@7.0.1: + dependencies: + archiver-utils: 5.0.2 + async: 3.2.4 + buffer-crc32: 1.0.0 + readable-stream: 4.5.2 + readdir-glob: 1.1.3 + tar-stream: 3.1.7 + zip-stream: 6.0.1 + + are-we-there-yet@3.0.1: + dependencies: + delegates: 1.0.0 + readable-stream: 3.6.0 + optional: true + + arg@4.1.3: + optional: true + + arg@5.0.2: {} + + argparse@1.0.10: + dependencies: + sprintf-js: 1.0.3 + + argparse@2.0.1: {} + + aria-hidden@1.2.6: + dependencies: + tslib: 2.8.1 + + aria-query@5.1.3: + dependencies: + deep-equal: 2.2.0 + + aria-query@5.3.0: + dependencies: + dequal: 2.0.3 + + array-buffer-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + is-array-buffer: 3.0.4 + + array-buffer-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + is-array-buffer: 3.0.5 + + array-hyper-unique@2.1.4: + dependencies: + deep-eql: 4.0.0 + lodash: 4.17.21 + + array-includes@3.1.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + is-string: 1.1.1 + math-intrinsics: 1.1.0 + + array-parallel@0.1.3: {} + + array-series@0.1.5: {} + + array-union@2.1.0: {} + + array.prototype.findlastindex@1.2.6: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-shim-unscopables: 1.1.0 + + array.prototype.flat@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.flatmap@1.3.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-shim-unscopables: 1.1.0 + + array.prototype.tosorted@1.1.4: + dependencies: + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 + es-errors: 1.3.0 + es-shim-unscopables: 1.1.0 + + arraybuffer.prototype.slice@1.0.3: + dependencies: + array-buffer-byte-length: 1.0.1 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.4 + is-shared-array-buffer: 1.0.3 + + arraybuffer.prototype.slice@1.0.4: + dependencies: + array-buffer-byte-length: 1.0.2 + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + is-array-buffer: 3.0.5 + + arrify@2.0.1: {} + + asap@2.0.6: {} + + asn1.js-rfc2560@5.0.1(asn1.js@5.4.1): + dependencies: + asn1.js: 5.4.1 + asn1.js-rfc5280: 3.0.0 + + asn1.js-rfc5280@3.0.0: + dependencies: + asn1.js: 5.4.1 + + asn1.js@4.10.1: + dependencies: + bn.js: 4.12.2 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + asn1.js@5.4.1: + dependencies: + bn.js: 4.12.2 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + safer-buffer: 2.1.2 + + asn1@0.2.6: + dependencies: + safer-buffer: 2.1.2 + + assert-never@1.2.1: {} + + assert-options@0.8.1: {} + + assert-plus@1.0.0: {} + + assert@2.1.0: + dependencies: + call-bind: 1.0.7 + is-nan: 1.3.2 + object-is: 1.1.6 + object.assign: 4.1.5 + util: 0.12.5 + + assertion-error@2.0.1: {} + + ast-module-types@6.0.1: {} + + ast-types@0.15.2: + dependencies: + tslib: 2.6.2 + + ast-types@0.16.1: + dependencies: + tslib: 2.8.1 + + ast-v8-to-istanbul@0.3.3: + dependencies: + '@jridgewell/trace-mapping': 0.3.30 + estree-walker: 3.0.3 + js-tokens: 9.0.1 + + astral-regex@2.0.0: {} + + async-function@1.0.0: {} + + async-lock@1.4.1: {} + + async-mutex@0.5.0: + dependencies: + tslib: 2.8.1 + + async-retry@1.3.3: + dependencies: + retry: 0.13.1 + + async-validator@4.2.5: {} + + async@3.2.4: {} + + asynckit@0.4.0: {} + + at-least-node@1.0.0: {} + + atomic-sleep@1.0.0: {} + + autoprefixer@10.4.19(postcss@8.4.49): + dependencies: + browserslist: 4.24.4 + caniuse-lite: 1.0.30001677 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.1.1 + postcss: 8.4.49 + postcss-value-parser: 4.2.0 + + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.0.0 + + avsc@5.7.6: {} + + aws-sign2@0.7.0: {} + + aws-ssl-profiles@1.1.1: {} + + aws4@1.11.0: {} + + axe-core@4.7.2: {} + + axios-retry@4.5.0(axios@1.11.0(debug@4.4.1)): + dependencies: + axios: 1.11.0(debug@4.4.1) + is-retry-allowed: 2.2.0 + + axios-retry@4.5.0(axios@1.11.0): + dependencies: + axios: 1.11.0(debug@4.3.6) + is-retry-allowed: 2.2.0 + + axios-retry@4.5.0(axios@1.8.3): + dependencies: + axios: 1.8.3 + is-retry-allowed: 2.2.0 + + axios@1.11.0(debug@4.3.6): + dependencies: + follow-redirects: 1.15.11(debug@4.3.6) + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.11.0(debug@4.4.0): + dependencies: + follow-redirects: 1.15.11(debug@4.4.0) + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.11.0(debug@4.4.1): + dependencies: + follow-redirects: 1.15.11(debug@4.4.1) + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + axios@1.8.3: + dependencies: + follow-redirects: 1.15.11(debug@4.3.6) + form-data: 4.0.4 + proxy-from-env: 1.1.0 + transitivePeerDependencies: + - debug + + b4a@1.6.7: {} + + babel-jest@29.6.2(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@jest/transform': 29.6.2 + '@types/babel__core': 7.20.0 + babel-plugin-istanbul: 6.1.1 + babel-preset-jest: 29.5.0(@babel/core@7.26.10) + chalk: 4.1.2 + graceful-fs: 4.2.11 + slash: 3.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-istanbul@6.1.1: + dependencies: + '@babel/helper-plugin-utils': 7.26.5 + '@istanbuljs/load-nyc-config': 1.1.0 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-instrument: 5.2.1 + test-exclude: 6.0.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-jest-hoist@29.5.0: + dependencies: + '@babel/template': 7.26.9 + '@babel/types': 7.27.6 + '@types/babel__core': 7.20.0 + '@types/babel__traverse': 7.18.2 + + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.10): + dependencies: + '@babel/compat-data': 7.27.5 + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.10) + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.10) + core-js-compat: 3.43.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.10) + transitivePeerDependencies: + - supports-color + + babel-plugin-transform-import-meta@2.3.3(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/template': 7.26.9 + tslib: 2.8.1 + + babel-preset-current-node-syntax@1.0.1(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.10) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.10) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.10) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.10) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.10) + + babel-preset-jest@29.5.0(@babel/core@7.26.10): + dependencies: + '@babel/core': 7.26.10 + babel-plugin-jest-hoist: 29.5.0 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.26.10) + + babel-walk@3.0.0-canary-5: + dependencies: + '@babel/types': 7.27.6 + + balanced-match@1.0.2: {} + + balanced-match@2.0.0: {} + + bare-events@2.5.4: + optional: true + + base64-js@1.5.1: {} + + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + + bcrypt-pbkdf@1.0.2: + dependencies: + tweetnacl: 0.14.5 + + bcryptjs@2.4.3: {} + + better-opn@3.0.2: + dependencies: + open: 8.4.0 + + big-integer@1.6.52: {} + + bignumber.js@9.1.2: {} + + binary-extensions@2.2.0: {} + + binascii@0.0.2: {} + + bindings@1.5.0: + dependencies: + file-uri-to-path: 1.0.0 + + bintrees@1.0.2: {} + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.0 + + bl@6.0.12: + dependencies: + '@types/readable-stream': 4.0.10 + buffer: 6.0.3 + inherits: 2.0.4 + readable-stream: 4.5.2 + + blob-util@2.0.2: {} + + bluebird@2.11.0: {} + + bluebird@3.4.7: {} + + bluebird@3.5.5: {} + + bluebird@3.7.2: {} + + bn.js@4.12.2: {} + + bn.js@5.2.2: {} + + body-parser@2.2.0: + dependencies: + bytes: 3.1.2 + content-type: 1.0.5 + debug: 4.4.1(supports-color@8.1.1) + http-errors: 2.0.0 + iconv-lite: 0.6.3 + on-finished: 2.4.1 + qs: 6.14.0 + raw-body: 3.0.0 + type-is: 2.0.1 + transitivePeerDependencies: + - supports-color + + boolbase@1.0.0: {} + + bowser@2.11.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + + brace-expansion@2.0.2: + dependencies: + balanced-match: 1.0.2 + + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + + brorand@1.1.0: {} + + brotli-size@4.0.0: + dependencies: + duplexer: 0.1.1 + + browser-assert@1.2.1: {} + + browser-request@0.3.3: {} + + browser-resolve@2.0.0: + dependencies: + resolve: 1.22.10 + + browser-stdout@1.3.1: {} + + browserify-aes@1.2.0: + dependencies: + buffer-xor: 1.0.3 + cipher-base: 1.0.6 + create-hash: 1.2.0 + evp_bytestokey: 1.0.3 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-cipher@1.0.1: + dependencies: + browserify-aes: 1.2.0 + browserify-des: 1.0.2 + evp_bytestokey: 1.0.3 + + browserify-des@1.0.2: + dependencies: + cipher-base: 1.0.6 + des.js: 1.1.0 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + browserify-rsa@4.1.1: + dependencies: + bn.js: 5.2.2 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + browserify-sign@4.2.3: + dependencies: + bn.js: 5.2.2 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + create-hmac: 1.1.7 + elliptic: 6.6.1 + hash-base: 3.0.5 + inherits: 2.0.4 + parse-asn1: 5.1.7 + readable-stream: 2.3.8 + safe-buffer: 5.2.1 + + browserify-zlib@0.2.0: + dependencies: + pako: 1.0.11 + + browserslist-to-esbuild@2.1.1(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + meow: 13.2.0 + + browserslist@4.24.4: + dependencies: + caniuse-lite: 1.0.30001703 + electron-to-chromium: 1.5.114 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.4) + + browserslist@4.25.0: + dependencies: + caniuse-lite: 1.0.30001724 + electron-to-chromium: 1.5.173 + node-releases: 2.0.19 + update-browserslist-db: 1.1.3(browserslist@4.25.0) + + bs-logger@0.2.6: + dependencies: + fast-json-stable-stringify: 2.1.0 + + bser@2.1.1: + dependencies: + node-int64: 0.4.0 + + bson@6.10.0: {} + + buffer-crc32@0.2.13: {} + + buffer-crc32@1.0.0: {} + + buffer-equal-constant-time@1.0.1: {} + + buffer-from@1.1.2: {} + + buffer-more-ints@1.0.0: {} + + buffer-xor@1.0.3: {} + + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buffer@6.0.3: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + + buildcheck@0.0.6: + optional: true + + builtin-modules@5.0.0: {} + + builtin-status-codes@3.0.0: {} + + bull@4.16.4(patch_hash=a4b6d56db16fe5870646929938466d6a5c668435fd1551bed6a93fffb597ba42): + dependencies: + cron-parser: 4.9.0 + get-port: 5.1.1 + ioredis: 5.3.2 + lodash: 4.17.21 + msgpackr: 1.11.2 + semver: 7.6.0 + uuid: 8.3.2 + transitivePeerDependencies: + - supports-color + + bundle-require@5.1.0(esbuild@0.25.9): + dependencies: + esbuild: 0.25.9 + load-tsconfig: 0.2.5 + + bundlemon-utils@2.0.1: + dependencies: + bytes: 3.1.2 + + bundlemon@3.1.0(typescript@5.9.2): + dependencies: + axios: 1.11.0(debug@4.3.6) + axios-retry: 4.5.0(axios@1.11.0) + brotli-size: 4.0.0 + bundlemon-utils: 2.0.1 + bytes: 3.1.2 + chalk: 4.1.2 + commander: 11.1.0 + cosmiconfig: 8.3.6(typescript@5.9.2) + gzip-size: 6.0.0 + micromatch: 4.0.8 + yup: 0.32.11 + transitivePeerDependencies: + - debug + - typescript + + busboy@1.6.0: + dependencies: + streamsearch: 1.1.0 + + byline@5.0.0: {} + + bytes@3.1.2: {} + + c12@1.11.2(magicast@0.3.5): + dependencies: + chokidar: 4.0.3 + confbox: 0.1.8 + defu: 6.1.4 + dotenv: 16.6.1 + giget: 1.2.5 + jiti: 1.21.7 + mlly: 1.7.4 + ohash: 1.1.6 + pathe: 1.1.2 + perfect-debounce: 1.0.0 + pkg-types: 1.3.1 + rc9: 2.1.2 + optionalDependencies: + magicast: 0.3.5 + + cac@6.7.14: {} + + cacache@15.3.0: + dependencies: + '@npmcli/fs': 1.1.1 + '@npmcli/move-file': 1.1.2 + chownr: 2.0.0 + fs-minipass: 2.1.0 + glob: 7.2.3 + infer-owner: 1.0.4 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + mkdirp: 1.0.4 + p-map: 4.0.0 + promise-inflight: 1.0.1 + rimraf: 3.0.2 + ssri: 8.0.1 + tar: 6.2.1 + unique-filename: 1.1.1 + transitivePeerDependencies: + - bluebird + optional: true + + cache-manager@5.2.3: + dependencies: + lodash.clonedeep: 4.5.0 + lru-cache: 9.1.2 + + cacheable@1.10.3: + dependencies: + hookified: 1.11.0 + keyv: 5.5.0 + + cachedir@2.3.0: {} + + call-bind-apply-helpers@1.0.2: + dependencies: + es-errors: 1.3.0 + function-bind: 1.1.2 + + call-bind@1.0.7: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bind@1.0.8: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + get-intrinsic: 1.3.0 + set-function-length: 1.2.2 + + call-bound@1.0.4: + dependencies: + call-bind-apply-helpers: 1.0.2 + get-intrinsic: 1.3.0 + + call-me-maybe@1.0.1: {} + + callsites@3.1.0: {} + + camel-case@3.0.0: + dependencies: + no-case: 2.3.2 + upper-case: 1.1.3 + + camel-case@4.1.2: + dependencies: + pascal-case: 3.1.2 + tslib: 2.8.1 + + camelcase-css@2.0.1: {} + + camelcase@5.3.1: {} + + camelcase@6.3.0: {} + + camelize@1.0.1: {} + + caniuse-lite@1.0.30001677: {} + + caniuse-lite@1.0.30001703: {} + + caniuse-lite@1.0.30001724: {} + + capital-case@1.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case-first: 2.0.2 + + caseless@0.12.0: {} + + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.4 + pathval: 2.0.0 + + chai@5.2.0: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.4 + pathval: 2.0.0 + + chalk@3.0.0: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + chalk@4.1.2: + dependencies: + ansi-styles: 4.3.0 + supports-color: 7.2.0 + + change-case@4.1.2: + dependencies: + camel-case: 4.1.2 + capital-case: 1.0.4 + constant-case: 3.0.4 + dot-case: 3.0.4 + header-case: 2.0.4 + no-case: 3.0.4 + param-case: 3.0.4 + pascal-case: 3.1.2 + path-case: 3.0.4 + sentence-case: 3.0.4 + snake-case: 3.0.4 + tslib: 2.6.2 + + change-case@5.4.4: {} + + char-regex@1.0.2: {} + + character-parser@2.2.0: + dependencies: + is-regex: 1.2.1 + + chardet@0.7.0: {} + + chardet@2.0.0: {} + + charenc@0.0.2: {} + + chart.js@4.4.0: + dependencies: + '@kurkle/color': 0.3.2 + + check-error@2.1.1: {} + + check-more-types@2.24.0: {} + + cheerio-select@1.6.0: + dependencies: + css-select: 4.3.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.1.0 + css-what: 6.1.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.3 + whatwg-mimetype: 4.0.0 + + cheerio@1.0.0-rc.12: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.1.0 + htmlparser2: 8.0.2 + parse5: 7.1.2 + parse5-htmlparser2-tree-adapter: 7.0.0 + + cheerio@1.0.0-rc.6: + dependencies: + cheerio-select: 1.6.0 + dom-serializer: 1.4.1 + domhandler: 4.3.1 + htmlparser2: 6.1.0 + parse5: 6.0.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + + chokidar@4.0.3: + dependencies: + readdirp: 4.1.2 + + chownr@1.1.4: {} + + chownr@2.0.0: {} + + chromatic@11.27.0: {} + + ci-info@3.8.0: {} + + ci-info@4.2.0: {} + + cipher-base@1.0.6: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + citty@0.1.6: + dependencies: + consola: 3.4.2 + + cjs-module-lexer@1.2.2: {} + + class-transformer@0.5.1: {} + + class-validator@0.14.0: + dependencies: + '@types/validator': 13.7.10 + libphonenumber-js: 1.10.14 + validator: 13.7.0 + + classnames@2.5.1: {} + + clean-css@4.2.4: + dependencies: + source-map: 0.6.1 + + clean-regexp@1.0.0: + dependencies: + escape-string-regexp: 1.0.5 + + clean-stack@2.2.0: {} + + clean-stack@3.0.1: + dependencies: + escape-string-regexp: 4.0.0 + + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-progress@3.12.0: + dependencies: + string-width: 4.2.3 + + cli-spinners@2.9.2: {} + + cli-table3@0.6.1: + dependencies: + string-width: 4.2.3 + optionalDependencies: + colors: 1.4.0 + + cli-table3@0.6.5: + dependencies: + string-width: 4.2.3 + optionalDependencies: + '@colors/colors': 1.5.0 + + cli-truncate@2.1.0: + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + + cli-width@3.0.0: {} + + cliui@7.0.4: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + cliui@8.0.1: + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + + clone@1.0.4: {} + + clsx@2.1.1: {} + + cluster-key-slot@1.1.2: {} + + co@4.6.0: {} + + code-block-writer@13.0.3: {} + + codemirror-lang-html-n8n@1.0.0: + dependencies: + '@codemirror/autocomplete': 6.16.0(@codemirror/language@6.10.1)(@codemirror/state@6.4.1)(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/lang-css': 6.0.1(@codemirror/view@6.26.3)(@lezer/common@1.1.0) + '@codemirror/lang-javascript': 6.2.2 + '@codemirror/language': 6.10.1 + '@codemirror/state': 6.4.1 + '@codemirror/view': 6.26.3 + '@lezer/common': 1.1.0 + '@lezer/css': 1.1.1 + '@lezer/highlight': 1.1.1(patch_hash=97f85e6fe46f23015ea0dd420e33d584bc2dc71633910cf131321da31b27ca8c) + '@lezer/html': 1.3.0 + '@lezer/lr': 1.4.0 + + cohere-ai@7.14.0(encoding@0.1.13): + dependencies: + '@aws-sdk/client-sagemaker': 3.808.0 + '@aws-sdk/credential-providers': 3.808.0 + '@aws-sdk/protocol-http': 3.374.0 + '@aws-sdk/signature-v4': 3.374.0 + form-data: 4.0.4 + form-data-encoder: 4.0.2 + formdata-node: 6.0.3 + js-base64: 3.7.2(patch_hash=bb02fdf69495c7b0768791b60ab6e1a002053b8decd19a174f5755691e5c9500) + node-fetch: 2.7.0(encoding@0.1.13) + qs: 6.11.2 + readable-stream: 4.5.2 + url-join: 4.0.1 + transitivePeerDependencies: + - aws-crt + - encoding + + collect-v8-coverage@1.0.1: {} + + color-convert@1.9.3: + dependencies: + color-name: 1.1.3 + + color-convert@2.0.1: + dependencies: + color-name: 1.1.4 + + color-name@1.1.3: {} + + color-name@1.1.4: {} + + color-string@1.9.1: + dependencies: + color-name: 1.1.4 + simple-swizzle: 0.2.2 + + color-support@1.1.3: + optional: true + + color@3.2.1: + dependencies: + color-convert: 1.9.3 + color-string: 1.9.1 + + color@4.2.3: + dependencies: + color-convert: 2.0.1 + color-string: 1.9.1 + + colord@2.9.3: {} + + colorette@1.4.0: {} + + colorette@2.0.19: {} + + colors@1.4.0: {} + + colorspace@1.1.4: + dependencies: + color: 3.2.1 + text-hex: 1.0.0 + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + comlink@4.4.1: {} + + commander@10.0.1: {} + + commander@11.1.0: {} + + commander@12.1.0: {} + + commander@2.20.3: {} + + commander@4.1.1: {} + + commander@6.2.1: {} + + commander@7.2.0: {} + + commander@9.4.1: {} + + comment-parser@1.4.1: {} + + commist@3.2.0: {} + + common-tags@1.8.2: {} + + commondir@1.0.1: {} + + compare-versions@6.1.1: {} + + component-emitter@1.3.0: {} + + component-type@2.0.0: {} + + compress-commons@6.0.2: + dependencies: + crc-32: 1.2.2 + crc32-stream: 6.0.0 + is-stream: 2.0.1 + normalize-path: 3.0.0 + readable-stream: 4.5.2 + + compressible@2.0.18: + dependencies: + mime-db: 1.54.0 + + compression@1.8.1: + dependencies: + bytes: 3.1.2 + compressible: 2.0.18 + debug: 2.6.9 + negotiator: 0.6.4 + on-headers: 1.1.0 + safe-buffer: 5.2.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + concat-map@0.0.1: {} + + concat-stream@2.0.0: + dependencies: + buffer-from: 1.1.2 + inherits: 2.0.4 + readable-stream: 3.6.0 + typedarray: 0.0.6 + + concurrently@8.2.0: + dependencies: + chalk: 4.1.2 + date-fns: 2.30.0 + lodash: 4.17.21 + rxjs: 7.8.1 + shell-quote: 1.8.1 + spawn-command: 0.0.2 + supports-color: 8.1.1 + tree-kill: 1.2.2 + yargs: 17.7.2 + + confbox@0.1.8: {} + + confbox@0.2.1: {} + + config-chain@1.1.13: + dependencies: + ini: 1.3.8 + proto-list: 1.2.4 + + consola@3.4.2: {} + + console-browserify@1.2.0: {} + + console-control-strings@1.1.0: + optional: true + + console-table-printer@2.14.1: + dependencies: + simple-wcswidth: 1.0.1 + + constant-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case: 2.0.2 + + constantinople@4.0.1: + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + + constants-browserify@1.0.0: {} + + content-disposition@1.0.0: + dependencies: + safe-buffer: 5.2.1 + + content-type@1.0.5: {} + + convert-source-map@1.9.0: {} + + convert-source-map@2.0.0: {} + + convict@6.2.4: + dependencies: + lodash.clonedeep: 4.5.0 + yargs-parser: 20.2.9 + + cookie-parser@1.4.7: + dependencies: + cookie: 0.7.2 + cookie-signature: 1.0.6 + + cookie-signature@1.0.6: {} + + cookie-signature@1.2.2: {} + + cookie@0.7.2: {} + + cookiejar@2.1.4: {} + + core-js-compat@3.43.0: + dependencies: + browserslist: 4.25.0 + + core-js@3.40.0: {} + + core-util-is@1.0.2: {} + + core-util-is@1.0.3: {} + + cors@2.8.5: + dependencies: + object-assign: 4.1.1 + vary: 1.1.2 + + cosmiconfig@8.3.6(typescript@5.9.2): + dependencies: + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + path-type: 4.0.0 + optionalDependencies: + typescript: 5.9.2 + + cosmiconfig@9.0.0(typescript@5.9.2): + dependencies: + env-paths: 2.2.1 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + parse-json: 5.2.0 + optionalDependencies: + typescript: 5.9.2 + + cpu-features@0.0.10: + dependencies: + buildcheck: 0.0.6 + nan: 2.20.0 + optional: true + + crc-32@1.2.2: {} + + crc32-stream@6.0.0: + dependencies: + crc-32: 1.2.2 + readable-stream: 4.5.2 + + create-ecdh@4.0.4: + dependencies: + bn.js: 4.12.2 + elliptic: 6.6.1 + + create-hash@1.1.3: + dependencies: + cipher-base: 1.0.6 + inherits: 2.0.4 + ripemd160: 2.0.1 + sha.js: 2.4.12 + + create-hash@1.2.0: + dependencies: + cipher-base: 1.0.6 + inherits: 2.0.4 + md5.js: 1.3.5 + ripemd160: 2.0.2 + sha.js: 2.4.12 + + create-hmac@1.1.7: + dependencies: + cipher-base: 1.0.6 + create-hash: 1.2.0 + inherits: 2.0.4 + ripemd160: 2.0.2 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + + create-require@1.1.1: {} + + crelt@1.0.5: {} + + crlf-normalize@1.0.19(ts-toolbelt@9.6.0): + dependencies: + ts-type: 3.0.1(ts-toolbelt@9.6.0) + transitivePeerDependencies: + - ts-toolbelt + + cron-parser@4.9.0: + dependencies: + luxon: 3.5.0 + + cron@3.1.7: + dependencies: + '@types/luxon': 3.4.2 + luxon: 3.4.4 + + cross-env@7.0.3: + dependencies: + cross-spawn: 7.0.6 + + cross-fetch@3.2.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + cross-fetch@4.0.0(encoding@0.1.13): + dependencies: + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + cross-spawn@6.0.6: + dependencies: + nice-try: 1.0.5 + path-key: 2.0.1 + semver: 7.7.2 + shebang-command: 1.2.0 + which: 1.3.1 + + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + + crypt@0.0.2: {} + + crypto-browserify@3.12.1: + dependencies: + browserify-cipher: 1.0.1 + browserify-sign: 4.2.3 + create-ecdh: 4.0.4 + create-hash: 1.2.0 + create-hmac: 1.1.7 + diffie-hellman: 5.0.3 + hash-base: 3.0.5 + inherits: 2.0.4 + pbkdf2: 3.1.3 + public-encrypt: 4.0.3 + randombytes: 2.1.0 + randomfill: 1.0.4 + + crypto-js@4.2.0: {} + + csrf@3.1.0: + dependencies: + rndm: 1.2.0 + tsscmp: 1.0.6 + uid-safe: 2.1.5 + + css-color-keywords@1.0.0: {} + + css-functions-list@3.2.3: {} + + css-select@4.3.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 4.3.1 + domutils: 2.8.0 + nth-check: 2.1.1 + + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + + css-to-react-native@3.2.0: + dependencies: + camelize: 1.0.1 + css-color-keywords: 1.0.0 + postcss-value-parser: 4.2.0 + + css-tree@2.2.1: + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.2.1 + + css-tree@2.3.1: + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.2.1 + + css-tree@3.1.0: + dependencies: + mdn-data: 2.12.2 + source-map-js: 1.2.1 + + css-what@6.1.0: {} + + css.escape@1.5.1: {} + + cssesc@3.0.0: {} + + cssfilter@0.0.10: {} + + csso@5.0.5: + dependencies: + css-tree: 2.2.1 + + cssom@0.3.8: {} + + cssom@0.5.0: {} + + cssstyle@2.3.0: + dependencies: + cssom: 0.3.8 + + cssstyle@3.0.0: + dependencies: + rrweb-cssom: 0.6.0 + + csstype@3.1.2: {} + + csstype@3.1.3: {} + + csv-parse@5.5.0: {} + + curlconverter@4.12.0: + dependencies: + jsesc: 3.0.2 + lossless-json: 4.0.2 + tree-sitter: 0.21.1 + tree-sitter-bash: 0.23.3(tree-sitter@0.21.1) + web-tree-sitter: 0.24.3 + yamljs: 0.3.0 + + currency-codes@2.1.0: + dependencies: + first-match: 0.0.1 + nub: 0.0.0 + + cypress-otp@1.0.3: + dependencies: + otplib: 12.0.1 + + cypress-real-events@1.14.0(cypress@14.4.0): + dependencies: + cypress: 14.4.0 + + cypress@14.4.0: + dependencies: + '@cypress/request': 3.0.8 + '@cypress/xvfb': 1.2.4(supports-color@8.1.1) + '@types/sinonjs__fake-timers': 8.1.1 + '@types/sizzle': 2.3.3 + arch: 2.2.0 + blob-util: 2.0.2 + bluebird: 3.7.2 + buffer: 5.7.1 + cachedir: 2.3.0 + chalk: 4.1.2 + check-more-types: 2.24.0 + ci-info: 4.2.0 + cli-cursor: 3.1.0 + cli-table3: 0.6.1 + commander: 6.2.1 + common-tags: 1.8.2 + dayjs: 1.11.10 + debug: 4.4.1(supports-color@8.1.1) + enquirer: 2.3.6 + eventemitter2: 6.4.7 + execa: 4.1.0 + executable: 4.1.1 + extract-zip: 2.0.1(supports-color@8.1.1) + figures: 3.2.0 + fs-extra: 9.1.0 + getos: 3.2.1 + is-installed-globally: 0.4.0 + lazy-ass: 1.6.0 + listr2: 3.14.0(enquirer@2.3.6) + lodash: 4.17.21 + log-symbols: 4.1.0 + minimist: 1.2.8 + ospath: 1.2.2 + pretty-bytes: 5.6.0 + process: 0.11.10 + proxy-from-env: 1.0.0 + request-progress: 3.0.0 + semver: 7.7.2 + supports-color: 8.1.1 + tmp: 0.2.4 + tree-kill: 1.2.2 + untildify: 4.0.0 + yauzl: 2.10.0 + + d3-color@3.1.0: {} + + d3-dispatch@3.0.1: {} + + d3-drag@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-selection: 3.0.0 + + d3-dsv@2.0.0: + dependencies: + commander: 2.20.3 + iconv-lite: 0.4.24 + rw: 1.3.3 + + d3-ease@3.0.1: {} + + d3-interpolate@3.0.1: + dependencies: + d3-color: 3.1.0 + + d3-selection@3.0.0: {} + + d3-timer@3.0.1: {} + + d3-transition@3.0.1(d3-selection@3.0.0): + dependencies: + d3-color: 3.1.0 + d3-dispatch: 3.0.1 + d3-ease: 3.0.1 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-timer: 3.0.1 + + d3-zoom@3.0.0: + dependencies: + d3-dispatch: 3.0.1 + d3-drag: 3.0.0 + d3-interpolate: 3.0.1 + d3-selection: 3.0.0 + d3-transition: 3.0.1(d3-selection@3.0.0) + + dashdash@1.14.1: + dependencies: + assert-plus: 1.0.0 + + data-uri-to-buffer@4.0.1: {} + + data-urls@3.0.2: + dependencies: + abab: 2.0.6 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + + data-view-buffer@1.0.1: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-buffer@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-length@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + data-view-byte-offset@1.0.0: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-data-view: 1.0.1 + + data-view-byte-offset@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-data-view: 1.0.2 + + date-fns-tz@2.0.0(date-fns@2.30.0): + dependencies: + date-fns: 2.30.0 + + date-fns@2.30.0: + dependencies: + '@babel/runtime': 7.26.10 + + dateformat@3.0.3: {} + + dayjs@1.11.10: {} + + de-indent@1.0.2: {} + + debug@2.6.9: + dependencies: + ms: 2.0.0 + + debug@3.2.7(supports-color@5.5.0): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 5.5.0 + + debug@3.2.7(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + debug@4.3.4: + dependencies: + ms: 2.1.2 + + debug@4.3.5: + dependencies: + ms: 2.1.2 + + debug@4.3.6: + dependencies: + ms: 2.1.2 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + debug@4.4.1(supports-color@8.1.1): + dependencies: + ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 + + decamelize@1.2.0: {} + + decamelize@4.0.0: {} + + decimal.js@10.4.3: {} + + decko@1.2.0: {} + + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + + dedent@1.3.0: {} + + deep-eql@4.0.0: + dependencies: + type-detect: 4.0.8 + + deep-eql@5.0.2: {} + + deep-equal@2.2.0: + dependencies: + call-bind: 1.0.8 + es-get-iterator: 1.1.3 + get-intrinsic: 1.3.0 + is-arguments: 1.1.1 + is-array-buffer: 3.0.5 + is-date-object: 1.1.0 + is-regex: 1.2.1 + is-shared-array-buffer: 1.0.4 + isarray: 2.0.5 + object-is: 1.1.6 + object-keys: 1.1.1 + object.assign: 4.1.7 + regexp.prototype.flags: 1.5.4 + side-channel: 1.1.0 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + deep-extend@0.6.0: {} + + deep-is@0.1.4: {} + + deepmerge@4.3.1: {} + + defaults@1.0.4: + dependencies: + clone: 1.0.4 + + define-data-property@1.1.4: + dependencies: + es-define-property: 1.0.1 + es-errors: 1.3.0 + gopd: 1.2.0 + + define-lazy-prop@2.0.0: {} + + define-properties@1.2.1: + dependencies: + define-data-property: 1.1.4 + has-property-descriptors: 1.0.2 + object-keys: 1.1.1 + + defu@6.1.4: {} + + delayed-stream@1.0.0: {} + + delegates@1.0.0: + optional: true + + denque@2.1.0: {} + + depd@2.0.0: {} + + dependency-tree@11.2.0: + dependencies: + commander: 12.1.0 + filing-cabinet: 5.0.3 + precinct: 12.2.0 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + dequal@2.0.3: {} + + des.js@1.1.0: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + destr@2.0.5: {} + + detect-libc@1.0.3: {} + + detect-libc@2.0.4: {} + + detect-newline@3.1.0: {} + + detect-node@2.1.0: {} + + detective-amd@6.0.1: + dependencies: + ast-module-types: 6.0.1 + escodegen: 2.1.0 + get-amd-module-type: 6.0.1 + node-source-walk: 7.0.1 + + detective-cjs@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + detective-es6@5.0.1: + dependencies: + node-source-walk: 7.0.1 + + detective-postcss@7.0.1(postcss@8.5.6): + dependencies: + is-url: 1.2.4 + postcss: 8.5.6 + postcss-values-parser: 6.0.2(postcss@8.5.6) + + detective-sass@6.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-scss@5.0.1: + dependencies: + gonzales-pe: 4.3.0 + node-source-walk: 7.0.1 + + detective-stylus@5.0.1: {} + + detective-typescript@14.0.0(typescript@5.9.2): + dependencies: + '@typescript-eslint/typescript-estree': 8.35.0(typescript@5.9.2) + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + detective-vue2@2.2.0(typescript@5.9.2): + dependencies: + '@dependents/detective-less': 5.0.1 + '@vue/compiler-sfc': 3.5.13 + detective-es6: 5.0.1 + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.9.2) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + dezalgo@1.0.4: + dependencies: + asap: 2.0.6 + wrappy: 1.0.2 + + didyoumean@1.2.2: {} + + diff-match-patch@1.0.5: {} + + diff-sequences@29.6.3: {} + + diff@4.0.2: + optional: true + + diff@5.2.0: {} + + diff@7.0.0: {} + + diffie-hellman@5.0.3: + dependencies: + bn.js: 4.12.2 + miller-rabin: 4.0.1 + randombytes: 2.1.0 + + dingbat-to-unicode@1.0.1: {} + + dir-glob@3.0.1: + dependencies: + path-type: 4.0.0 + + dlv@1.1.3: {} + + docker-compose@1.2.0: + dependencies: + yaml: 2.3.4 + + docker-modem@5.0.6: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + readable-stream: 3.6.0 + split-ca: 1.0.1 + ssh2: 1.15.0 + transitivePeerDependencies: + - supports-color + + dockerode@4.0.7: + dependencies: + '@balena/dockerignore': 1.0.2 + '@grpc/grpc-js': 1.13.2 + '@grpc/proto-loader': 0.7.13 + docker-modem: 5.0.6 + protobufjs: 7.4.0 + tar-fs: 2.1.3 + uuid: 10.0.0 + transitivePeerDependencies: + - supports-color + + doctrine@2.1.0: + dependencies: + esutils: 2.0.3 + + doctypes@1.1.0: {} + + dom-accessibility-api@0.5.15: {} + + dom-accessibility-api@0.6.3: {} + + dom-serializer@1.4.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + entities: 2.2.0 + + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + + domain-browser@4.22.0: {} + + domelementtype@2.3.0: {} + + domexception@4.0.0: + dependencies: + webidl-conversions: 7.0.0 + + domhandler@3.3.0: + dependencies: + domelementtype: 2.3.0 + + domhandler@4.3.1: + dependencies: + domelementtype: 2.3.0 + + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + + dompurify@3.1.7: {} + + domutils@2.8.0: + dependencies: + dom-serializer: 1.4.1 + domelementtype: 2.3.0 + domhandler: 4.3.1 + + domutils@3.1.0: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + + dot-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + dotenv@16.3.1: {} + + dotenv@16.6.1: {} + + dotenv@8.6.0: {} + + dreamopt@0.8.0: + dependencies: + wordwrap: 1.0.0 + + duck@0.1.12: + dependencies: + underscore: 1.13.6 + + dunder-proto@1.0.1: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-errors: 1.3.0 + gopd: 1.2.0 + + duplexer@0.1.1: {} + + duplexer@0.1.2: {} + + duplexify@4.1.3: + dependencies: + end-of-stream: 1.4.4 + inherits: 2.0.4 + readable-stream: 3.6.0 + stream-shift: 1.0.3 + + eastasianwidth@0.2.0: {} + + ecc-jsbn@0.1.2: + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + + editorconfig@1.0.4: + dependencies: + '@one-ini/wasm': 0.1.1 + commander: 10.0.1 + minimatch: 9.0.1 + semver: 7.7.2 + + ee-first@1.1.1: {} + + ejs@3.1.10: + dependencies: + jake: 10.8.5 + + electron-to-chromium@1.5.114: {} + + electron-to-chromium@1.5.173: {} + + element-plus@2.4.3(patch_hash=3bc4ea0a42ad52c6bbc3d06c12c2963d55b57d6b5b8d436e46e7fd8ff8c10661)(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@ctrl/tinycolor': 3.6.0 + '@element-plus/icons-vue': 2.3.1(vue@3.5.13(typescript@5.9.2)) + '@floating-ui/dom': 1.7.0 + '@popperjs/core': '@sxzz/popperjs-es@2.11.7' + '@types/lodash': 4.17.17 + '@types/lodash-es': 4.17.12 + '@vueuse/core': 9.13.0(vue@3.5.13(typescript@5.9.2)) + async-validator: 4.2.5 + dayjs: 1.11.10 + escape-html: 1.0.3 + lodash: 4.17.21 + lodash-es: 4.17.21 + lodash-unified: 1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21) + memoize-one: 6.0.0 + normalize-wheel-es: 1.2.0 + vue: 3.5.13(typescript@5.9.2) + transitivePeerDependencies: + - '@vue/composition-api' + + elliptic@6.6.1: + dependencies: + bn.js: 4.12.2 + brorand: 1.1.0 + hash.js: 1.1.7 + hmac-drbg: 1.0.1 + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + email-providers@2.0.1: {} + + emittery@0.13.1: {} + + emoji-regex@8.0.0: {} + + emoji-regex@9.2.2: {} + + enabled@2.0.0: {} + + encodeurl@2.0.0: {} + + encoding-japanese@2.0.0: {} + + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + + encoding@0.1.13: + dependencies: + iconv-lite: 0.6.3 + optional: true + + end-of-stream@1.4.4: + dependencies: + once: 1.4.0 + + enhanced-resolve@5.18.2: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.2 + + enquirer@2.3.6: + dependencies: + ansi-colors: 4.1.3 + + entities@2.2.0: {} + + entities@3.0.1: {} + + entities@4.5.0: {} + + entities@6.0.1: {} + + env-paths@2.2.1: {} + + epub2@3.0.2(ts-toolbelt@9.6.0): + dependencies: + adm-zip: 0.5.10 + array-hyper-unique: 2.1.4 + bluebird: 3.7.2 + crlf-normalize: 1.0.19(ts-toolbelt@9.6.0) + tslib: 2.6.2 + xml2js: 0.6.2 + transitivePeerDependencies: + - ts-toolbelt + + err-code@2.0.3: + optional: true + + error-ex@1.3.2: + dependencies: + is-arrayish: 0.2.1 + + es-abstract@1.23.3: + dependencies: + array-buffer-byte-length: 1.0.1 + arraybuffer.prototype.slice: 1.0.3 + available-typed-arrays: 1.0.7 + call-bind: 1.0.7 + data-view-buffer: 1.0.1 + data-view-byte-length: 1.0.1 + data-view-byte-offset: 1.0.0 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.2.1 + function.prototype.name: 1.1.6 + get-intrinsic: 1.3.0 + get-symbol-description: 1.0.2 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.0.3 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.0.7 + is-array-buffer: 3.0.4 + is-callable: 1.2.7 + is-data-view: 1.0.1 + is-negative-zero: 2.0.3 + is-regex: 1.1.4 + is-shared-array-buffer: 1.0.3 + is-string: 1.0.7 + is-typed-array: 1.1.13 + is-weakref: 1.0.2 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.5 + regexp.prototype.flags: 1.5.3 + safe-array-concat: 1.1.2 + safe-regex-test: 1.0.3 + string.prototype.trim: 1.2.9 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.2 + typed-array-byte-length: 1.0.1 + typed-array-byte-offset: 1.0.2 + typed-array-length: 1.0.6 + unbox-primitive: 1.0.2 + which-typed-array: 1.1.15 + + es-abstract@1.24.0: + dependencies: + array-buffer-byte-length: 1.0.2 + arraybuffer.prototype.slice: 1.0.4 + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + data-view-buffer: 1.0.2 + data-view-byte-length: 1.0.2 + data-view-byte-offset: 1.0.1 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + es-set-tostringtag: 2.1.0 + es-to-primitive: 1.3.0 + function.prototype.name: 1.1.8 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + get-symbol-description: 1.1.0 + globalthis: 1.0.4 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + has-proto: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + internal-slot: 1.1.0 + is-array-buffer: 3.0.5 + is-callable: 1.2.7 + is-data-view: 1.0.2 + is-negative-zero: 2.0.3 + is-regex: 1.2.1 + is-set: 2.0.3 + is-shared-array-buffer: 1.0.4 + is-string: 1.1.1 + is-typed-array: 1.1.15 + is-weakref: 1.1.1 + math-intrinsics: 1.1.0 + object-inspect: 1.13.4 + object-keys: 1.1.1 + object.assign: 4.1.7 + own-keys: 1.0.1 + regexp.prototype.flags: 1.5.4 + safe-array-concat: 1.1.3 + safe-push-apply: 1.0.0 + safe-regex-test: 1.1.0 + set-proto: 1.0.0 + stop-iteration-iterator: 1.1.0 + string.prototype.trim: 1.2.10 + string.prototype.trimend: 1.0.9 + string.prototype.trimstart: 1.0.8 + typed-array-buffer: 1.0.3 + typed-array-byte-length: 1.0.3 + typed-array-byte-offset: 1.0.4 + typed-array-length: 1.0.7 + unbox-primitive: 1.1.0 + which-typed-array: 1.1.19 + + es-aggregate-error@1.0.12: + dependencies: + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + function-bind: 1.1.2 + globalthis: 1.0.4 + has-property-descriptors: 1.0.2 + set-function-name: 2.0.2 + + es-define-property@1.0.1: {} + + es-errors@1.3.0: {} + + es-get-iterator@1.1.3: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + is-arguments: 1.1.1 + is-map: 2.0.3 + is-set: 2.0.3 + is-string: 1.1.1 + isarray: 2.0.5 + stop-iteration-iterator: 1.1.0 + + es-module-lexer@1.7.0: {} + + es-object-atoms@1.1.1: + dependencies: + es-errors: 1.3.0 + + es-set-tostringtag@2.1.0: + dependencies: + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + es-shim-unscopables@1.1.0: + dependencies: + hasown: 2.0.2 + + es-to-primitive@1.2.1: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.0.5 + is-symbol: 1.0.4 + + es-to-primitive@1.3.0: + dependencies: + is-callable: 1.2.7 + is-date-object: 1.1.0 + is-symbol: 1.1.1 + + es6-promise@3.3.1: {} + + esbuild-register@3.5.0(esbuild@0.25.9): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + esbuild: 0.25.9 + transitivePeerDependencies: + - supports-color + + esbuild@0.25.9: + optionalDependencies: + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 + + escalade@3.1.1: {} + + escalade@3.2.0: {} + + escape-goat@3.0.0: {} + + escape-html@1.0.3: {} + + escape-string-regexp@1.0.5: {} + + escape-string-regexp@2.0.0: {} + + escape-string-regexp@4.0.0: {} + + escodegen@1.14.3: + dependencies: + esprima: 4.0.1 + estraverse: 4.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + + escodegen@2.0.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionator: 0.8.3 + optionalDependencies: + source-map: 0.6.1 + + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + + eslint-config-prettier@10.1.5(eslint@9.29.0(jiti@1.21.7)): + dependencies: + eslint: 9.29.0(jiti@1.21.7) + + eslint-config-riot@1.0.0: {} + + eslint-import-context@0.1.8(unrs-resolver@1.9.2): + dependencies: + get-tsconfig: 4.10.1 + stable-hash-x: 0.1.1 + optionalDependencies: + unrs-resolver: 1.9.2 + + eslint-import-resolver-node@0.3.9: + dependencies: + debug: 3.2.7(supports-color@5.5.0) + is-core-module: 2.16.1 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + eslint-import-resolver-typescript@4.4.3(eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.29.0(jiti@1.21.7)): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.29.0(jiti@1.21.7) + eslint-import-context: 0.1.8(unrs-resolver@1.9.2) + get-tsconfig: 4.10.1 + is-bun-module: 2.0.0 + stable-hash-x: 0.1.1 + tinyglobby: 0.2.14 + unrs-resolver: 1.9.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)) + eslint-plugin-import-x: 4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)): + dependencies: + debug: 3.2.7(supports-color@5.5.0) + optionalDependencies: + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + eslint: 9.29.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-import-resolver-typescript: 4.4.3(eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)))(eslint-plugin-import@2.32.0)(eslint@9.29.0(jiti@1.21.7)) + transitivePeerDependencies: + - supports-color + + eslint-plugin-cypress@4.3.0(eslint@9.29.0(jiti@1.21.7)): + dependencies: + eslint: 9.29.0(jiti@1.21.7) + globals: 15.15.0 + + eslint-plugin-import-x@4.15.2(@typescript-eslint/utils@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint@9.29.0(jiti@1.21.7)): + dependencies: + '@typescript-eslint/types': 8.35.0 + comment-parser: 1.4.1 + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.29.0(jiti@1.21.7) + eslint-import-context: 0.1.8(unrs-resolver@1.9.2) + is-glob: 4.0.3 + minimatch: 10.0.3 + semver: 7.7.2 + stable-hash-x: 0.1.1 + unrs-resolver: 1.9.2 + optionalDependencies: + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + eslint-import-resolver-node: 0.3.9 + transitivePeerDependencies: + - supports-color + + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7(supports-color@5.5.0) + doctrine: 2.1.0 + eslint: 9.29.0(jiti@1.21.7) + eslint-import-resolver-node: 0.3.9 + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.3)(eslint@9.29.0(jiti@1.21.7)) + hasown: 2.0.2 + is-core-module: 2.16.1 + is-glob: 4.0.3 + minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 7.7.2 + string.prototype.trimend: 1.0.9 + tsconfig-paths: 4.2.0 + optionalDependencies: + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + + eslint-plugin-local@1.0.0: {} + + eslint-plugin-lodash@8.0.0(eslint@9.29.0(jiti@1.21.7)): + dependencies: + eslint: 9.29.0(jiti@1.21.7) + lodash: 4.17.21 + + eslint-plugin-n8n-nodes-base@1.16.3(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2): + dependencies: + '@typescript-eslint/utils': 6.21.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + camel-case: 4.1.2 + eslint-plugin-local: 1.0.0 + indefinite: 2.5.1 + pascal-case: 3.1.2 + pluralize: 8.0.0 + sentence-case: 3.0.4 + title-case: 3.0.3 + transitivePeerDependencies: + - eslint + - supports-color + - typescript + + eslint-plugin-playwright@2.2.2(eslint@9.29.0(jiti@1.21.7)): + dependencies: + eslint: 9.29.0(jiti@1.21.7) + globals: 13.24.0 + + eslint-plugin-unicorn@59.0.1(eslint@9.29.0(jiti@1.21.7)): + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) + '@eslint/plugin-kit': 0.2.8 + ci-info: 4.2.0 + clean-regexp: 1.0.0 + core-js-compat: 3.43.0 + eslint: 9.29.0(jiti@1.21.7) + esquery: 1.6.0 + find-up-simple: 1.0.1 + globals: 16.2.0 + indent-string: 5.0.0 + is-builtin-module: 5.0.0 + jsesc: 3.1.0 + pluralize: 8.0.0 + regexp-tree: 0.1.27 + regjsparser: 0.12.0 + semver: 7.7.2 + strip-indent: 4.0.0 + + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7)): + dependencies: + eslint: 9.29.0(jiti@1.21.7) + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + + eslint-plugin-vue@10.2.0(eslint@9.29.0(jiti@1.21.7))(vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@1.21.7))): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) + eslint: 9.29.0(jiti@1.21.7) + natural-compare: 1.4.0 + nth-check: 2.1.1 + postcss-selector-parser: 6.1.2 + semver: 7.7.2 + vue-eslint-parser: 10.1.3(eslint@9.29.0(jiti@1.21.7)) + xml-name-validator: 4.0.0 + + eslint-scope@8.4.0: + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-visitor-keys@3.4.3: {} + + eslint-visitor-keys@4.2.1: {} + + eslint@9.29.0(jiti@1.21.7): + dependencies: + '@eslint-community/eslint-utils': 4.7.0(eslint@9.29.0(jiti@1.21.7)) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.20.1 + '@eslint/config-helpers': 0.2.3 + '@eslint/core': 0.14.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.29.0 + '@eslint/plugin-kit': 0.3.2 + '@humanfs/node': 0.16.6 + '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.8 + '@types/json-schema': 7.0.15 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.6 + debug: 4.4.1(supports-color@8.1.1) + escape-string-regexp: 4.0.0 + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 8.0.0 + find-up: 5.0.0 + glob-parent: 6.0.2 + ignore: 5.2.4 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + json-stable-stringify-without-jsonify: 1.0.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + optionalDependencies: + jiti: 1.21.7 + transitivePeerDependencies: + - supports-color + + esm-resolve@1.0.8: {} + + espree@10.4.0: + dependencies: + acorn: 8.15.0 + acorn-jsx: 5.3.2(acorn@8.15.0) + eslint-visitor-keys: 4.2.1 + + esprima-next@5.8.4: {} + + esprima@1.2.2: {} + + esprima@4.0.1: {} + + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + + esrecurse@4.3.0: + dependencies: + estraverse: 5.3.0 + + estraverse@4.3.0: {} + + estraverse@5.3.0: {} + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.8 + + esutils@2.0.3: {} + + etag@1.8.1: {} + + event-stream@3.3.4: + dependencies: + duplexer: 0.1.2 + from: 0.1.7 + map-stream: 0.1.0 + pause-stream: 0.0.11 + split: 0.3.3 + stream-combiner: 0.0.4 + through: 2.3.8 + + event-target-shim@5.0.1: {} + + eventemitter2@6.4.7: {} + + eventemitter3@4.0.7: {} + + eventemitter3@5.0.1: {} + + events@3.3.0: {} + + eventsource-parser@3.0.1: {} + + eventsource@2.0.2: {} + + eventsource@3.0.6: + dependencies: + eventsource-parser: 3.0.1 + + evp_bytestokey@1.0.3: + dependencies: + md5.js: 1.3.5 + safe-buffer: 5.2.1 + + execa@1.0.0: + dependencies: + cross-spawn: 6.0.6 + get-stream: 4.1.0 + is-stream: 1.1.0 + npm-run-path: 2.0.2 + p-finally: 1.0.0 + signal-exit: 3.0.7 + strip-eof: 1.0.0 + + execa@4.1.0: + dependencies: + cross-spawn: 7.0.6 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@5.1.1: + dependencies: + cross-spawn: 7.0.6 + get-stream: 6.0.1 + human-signals: 2.1.0 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + + execa@9.6.0: + dependencies: + '@sindresorhus/merge-streams': 4.0.0 + cross-spawn: 7.0.6 + figures: 6.1.0 + get-stream: 9.0.1 + human-signals: 8.0.1 + is-plain-obj: 4.1.0 + is-stream: 4.0.1 + npm-run-path: 6.0.0 + pretty-ms: 9.2.0 + signal-exit: 4.1.0 + strip-final-newline: 4.0.0 + yoctocolors: 2.1.1 + + executable@4.1.1: + dependencies: + pify: 2.3.0 + + exit@0.1.2: {} + + expand-template@2.0.3: {} + + expand-tilde@2.0.2: + dependencies: + homedir-polyfill: 1.0.3 + + expect-type@1.2.1: {} + + expect@29.5.0: + dependencies: + '@jest/expect-utils': 29.6.2 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.5.0 + jest-message-util: 29.5.0 + jest-util: 29.6.2 + + expect@29.6.2: + dependencies: + '@jest/expect-utils': 29.6.2 + '@types/node': 20.19.10 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + + expr-eval@2.0.2: {} + + express-handlebars@8.0.1: + dependencies: + glob: 11.0.1 + graceful-fs: 4.2.11 + handlebars: 4.7.8 + + express-openapi-validator@5.5.3(express@5.1.0): + dependencies: + '@apidevtools/json-schema-ref-parser': 12.0.2 + '@types/multer': 1.4.12 + ajv: 8.17.1 + ajv-draft-04: 1.0.0(ajv@8.17.1) + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + express: 5.1.0 + json-schema-traverse: 1.0.0 + lodash.clonedeep: 4.5.0 + lodash.get: 4.4.2 + media-typer: 1.1.0 + multer: 2.0.2 + ono: 7.1.3 + path-to-regexp: 8.2.0 + qs: 6.14.0 + + express-prom-bundle@8.0.0(prom-client@15.1.3): + dependencies: + '@types/express': 5.0.1 + on-finished: 2.4.1 + prom-client: 15.1.3 + url-value-parser: 2.2.0 + + express-rate-limit@7.5.0(express@5.1.0): + dependencies: + express: 5.1.0 + + express@5.1.0: + dependencies: + accepts: 2.0.0 + body-parser: 2.2.0 + content-disposition: 1.0.0 + content-type: 1.0.5 + cookie: 0.7.2 + cookie-signature: 1.2.2 + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + finalhandler: 2.1.0 + fresh: 2.0.0 + http-errors: 2.0.0 + merge-descriptors: 2.0.0 + mime-types: 3.0.1 + on-finished: 2.4.1 + once: 1.4.0 + parseurl: 1.3.3 + proxy-addr: 2.0.7 + qs: 6.14.0 + range-parser: 1.2.1 + router: 2.2.0 + send: 1.2.0 + serve-static: 2.2.0 + statuses: 2.0.1 + type-is: 2.0.1 + vary: 1.1.2 + transitivePeerDependencies: + - supports-color + + exsolve@1.0.4: {} + + extend@3.0.2: {} + + external-editor@3.1.0: + dependencies: + chardet: 0.7.0 + iconv-lite: 0.4.24 + tmp: 0.2.4 + + extract-zip@2.0.1(supports-color@8.1.1): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.0 + transitivePeerDependencies: + - supports-color + + extsprintf@1.3.0: {} + + fake-indexeddb@6.0.0: {} + + fake-xml-http-request@2.1.2: {} + + fast-deep-equal@3.1.3: {} + + fast-fifo@1.3.2: {} + + fast-glob@3.2.12: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-glob@3.3.3: + dependencies: + '@nodelib/fs.stat': 2.0.5 + '@nodelib/fs.walk': 1.2.8 + glob-parent: 5.1.2 + merge2: 1.4.1 + micromatch: 4.0.8 + + fast-json-stable-stringify@2.1.0: {} + + fast-levenshtein@2.0.6: {} + + fast-redact@3.5.0: {} + + fast-safe-stringify@2.1.1: {} + + fast-unique-numbers@8.0.13: + dependencies: + '@babel/runtime': 7.26.10 + tslib: 2.8.1 + + fast-uri@3.0.1: {} + + fast-xml-parser@4.4.1: + dependencies: + strnum: 1.0.5 + + fast-xml-parser@5.2.3: + dependencies: + strnum: 2.1.0 + + fastest-levenshtein@1.0.16: {} + + fastq@1.15.0: + dependencies: + reusify: 1.0.4 + + fb-watchman@2.0.2: + dependencies: + bser: 2.1.1 + + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + + fdir@6.4.6(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + + fdir@6.4.6(picomatch@4.0.3): + optionalDependencies: + picomatch: 4.0.3 + + fecha@4.2.3: {} + + fengari-interop@0.1.3(fengari@0.1.4): + dependencies: + fengari: 0.1.4 + + fengari@0.1.4: + dependencies: + readline-sync: 1.4.10 + sprintf-js: 1.1.2 + tmp: 0.2.4 + + fetch-blob@3.2.0: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 3.2.1 + + fflate@0.7.4: {} + + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + + figures@6.1.0: + dependencies: + is-unicode-supported: 2.1.0 + + file-entry-cache@10.1.3: + dependencies: + flat-cache: 6.1.12 + + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + + file-saver@2.0.5: {} + + file-type@16.5.4: + dependencies: + readable-web-to-node-stream: 3.0.2 + strtok3: 6.3.0 + token-types: 4.2.1 + + file-uri-to-path@1.0.0: {} + + filelist@1.0.4: + dependencies: + minimatch: 5.1.6 + + filesize@10.1.0: {} + + filing-cabinet@5.0.3: + dependencies: + app-module-path: 2.2.0 + commander: 12.1.0 + enhanced-resolve: 5.18.2 + module-definition: 6.0.1 + module-lookup-amd: 9.0.5 + resolve: 1.22.10 + resolve-dependency-path: 4.0.1 + sass-lookup: 6.1.0 + stylus-lookup: 6.1.0 + tsconfig-paths: 4.2.0 + typescript: 5.9.2 + + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + + finalhandler@2.1.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + find-package-json@1.2.0: {} + + find-test-names@1.29.7(@babel/core@7.26.10): + dependencies: + '@babel/parser': 7.26.10 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.10) + acorn-walk: 8.3.4 + debug: 4.4.1(supports-color@8.1.1) + globby: 11.1.0 + simple-bin-help: 1.8.0 + transitivePeerDependencies: + - '@babel/core' + - supports-color + + find-up-simple@1.0.1: {} + + find-up@4.1.0: + dependencies: + locate-path: 5.0.0 + path-exists: 4.0.0 + + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + + first-match@0.0.1: {} + + fix-dts-default-cjs-exports@1.0.1: + dependencies: + magic-string: 0.30.17 + mlly: 1.7.4 + rollup: 4.46.2 + + flat-cache@4.0.1: + dependencies: + flatted: 3.3.3 + keyv: 4.5.4 + + flat-cache@6.1.12: + dependencies: + cacheable: 1.10.3 + flatted: 3.3.3 + hookified: 1.11.0 + + flat@5.0.2: {} + + flatted@3.2.7: {} + + flatted@3.3.3: {} + + fn.name@1.1.0: {} + + follow-redirects@1.15.11(debug@4.3.6): + optionalDependencies: + debug: 4.3.6 + + follow-redirects@1.15.11(debug@4.4.0): + optionalDependencies: + debug: 4.4.0 + + follow-redirects@1.15.11(debug@4.4.1): + optionalDependencies: + debug: 4.4.1(supports-color@8.1.1) + + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + + foreach@2.0.6: {} + + foreground-child@3.1.1: + dependencies: + cross-spawn: 7.0.6 + signal-exit: 4.1.0 + + forever-agent@0.6.1: {} + + form-data-encoder@1.7.2: {} + + form-data-encoder@4.0.2: {} + + form-data@4.0.4: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + es-set-tostringtag: 2.1.0 + hasown: 2.0.2 + mime-types: 2.1.35 + + formdata-node@4.4.1: + dependencies: + node-domexception: 1.0.0 + web-streams-polyfill: 4.0.0-beta.3 + + formdata-node@6.0.3: {} + + formdata-polyfill@4.0.10: + dependencies: + fetch-blob: 3.2.0 + + formidable@3.5.4: + dependencies: + '@paralleldrive/cuid2': 2.2.2 + dezalgo: 1.0.4 + once: 1.4.0 + + forwarded-parse@2.1.2: {} + + forwarded@0.2.0: {} + + fraction.js@4.3.7: {} + + fresh@2.0.0: {} + + from@0.1.7: {} + + fs-constants@1.0.0: {} + + fs-extra@11.3.0: + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + + fs-extra@9.1.0: + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.0 + + fs-minipass@2.1.0: + dependencies: + minipass: 3.3.6 + + fs.realpath@1.0.0: {} + + fsevents@2.3.2: + optional: true + + fsevents@2.3.3: + optional: true + + function-bind@1.1.2: {} + + function.prototype.name@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + functions-have-names: 1.2.3 + + function.prototype.name@1.1.8: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + functions-have-names: 1.2.3 + hasown: 2.0.2 + is-callable: 1.2.7 + + functions-have-names@1.2.3: {} + + gauge@4.0.4: + dependencies: + aproba: 2.0.0 + color-support: 1.1.3 + console-control-strings: 1.1.0 + has-unicode: 2.0.1 + signal-exit: 3.0.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wide-align: 1.1.5 + optional: true + + gaxios@5.1.3(encoding@0.1.13): + dependencies: + extend: 3.0.2 + https-proxy-agent: 5.0.1 + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + gaxios@6.6.0(encoding@0.1.13): + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + is-stream: 2.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + gaxios@7.1.0: + dependencies: + extend: 3.0.2 + https-proxy-agent: 7.0.6 + node-fetch: 3.3.2 + transitivePeerDependencies: + - supports-color + + gcp-metadata@5.3.0(encoding@0.1.13): + dependencies: + gaxios: 5.1.3(encoding@0.1.13) + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + optional: true + + gcp-metadata@6.1.0(encoding@0.1.13): + dependencies: + gaxios: 6.6.0(encoding@0.1.13) + json-bigint: 1.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + gcp-metadata@7.0.0: + dependencies: + gaxios: 7.1.0 + google-logging-utils: 1.1.1 + json-bigint: 1.0.0 + transitivePeerDependencies: + - supports-color + + generate-function@2.3.1: + dependencies: + is-property: 1.0.2 + + generate-schema@2.6.0: + dependencies: + commander: 2.20.3 + type-of-is: 3.5.1 + + generic-pool@3.9.0: {} + + gensync@1.0.0-beta.2: {} + + get-amd-module-type@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + get-caller-file@2.0.5: {} + + get-intrinsic@1.3.0: + dependencies: + call-bind-apply-helpers: 1.0.2 + es-define-property: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + function-bind: 1.1.2 + get-proto: 1.0.1 + gopd: 1.2.0 + has-symbols: 1.1.0 + hasown: 2.0.2 + math-intrinsics: 1.1.0 + + get-own-enumerable-property-symbols@3.0.2: {} + + get-package-type@0.1.0: {} + + get-port-please@3.1.2: {} + + get-port@5.1.1: {} + + get-port@7.1.0: {} + + get-proto@1.0.1: + dependencies: + dunder-proto: 1.0.1 + es-object-atoms: 1.1.1 + + get-stream@4.1.0: + dependencies: + pump: 3.0.0 + + get-stream@5.2.0: + dependencies: + pump: 3.0.0 + + get-stream@6.0.1: {} + + get-stream@9.0.1: + dependencies: + '@sec-ant/readable-stream': 0.4.1 + is-stream: 4.0.1 + + get-symbol-description@1.0.2: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-symbol-description@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + + get-system-fonts@2.0.2: {} + + get-tsconfig@4.10.1: + dependencies: + resolve-pkg-maps: 1.0.0 + + getos@3.2.1: + dependencies: + async: 3.2.4 + + getpass@0.1.7: + dependencies: + assert-plus: 1.0.0 + + giget@1.2.5: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + defu: 6.1.4 + node-fetch-native: 1.6.6 + nypm: 0.5.4 + pathe: 2.0.3 + tar: 6.2.1 + + github-buttons@2.29.1: {} + + github-from-package@0.0.0: {} + + glob-parent@5.1.2: + dependencies: + is-glob: 4.0.3 + + glob-parent@6.0.2: + dependencies: + is-glob: 4.0.3 + + glob@10.3.3: + dependencies: + foreground-child: 3.1.1 + jackspeak: 2.3.6 + minimatch: 9.0.5 + minipass: 7.1.2 + path-scurry: 1.11.1 + + glob@10.4.5: + dependencies: + foreground-child: 3.1.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 + + glob@11.0.1: + dependencies: + foreground-child: 3.1.1 + jackspeak: 4.1.0 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + + glob@8.1.0: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 5.1.6 + once: 1.4.0 + + global-dirs@3.0.0: + dependencies: + ini: 2.0.0 + + global-modules@2.0.0: + dependencies: + global-prefix: 3.0.0 + + global-prefix@3.0.0: + dependencies: + ini: 1.3.8 + kind-of: 6.0.3 + which: 1.3.1 + + globals@11.12.0: {} + + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + + globals@14.0.0: {} + + globals@15.15.0: {} + + globals@16.2.0: {} + + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.2.0 + + globby@11.1.0: + dependencies: + array-union: 2.1.0 + dir-glob: 3.0.1 + fast-glob: 3.3.3 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 3.0.0 + + globjoin@0.1.4: {} + + gm@1.25.1: + dependencies: + array-parallel: 0.1.3 + array-series: 0.1.5 + cross-spawn: 7.0.6 + debug: 3.2.7(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + gonzales-pe@4.3.0: + dependencies: + minimist: 1.2.8 + + google-auth-library@10.1.0: + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 7.1.0 + gcp-metadata: 7.0.0 + google-logging-utils: 1.1.1 + gtoken: 8.0.0 + jws: 4.0.0 + transitivePeerDependencies: + - supports-color + + google-auth-library@9.10.0(encoding@0.1.13): + dependencies: + base64-js: 1.5.1 + ecdsa-sig-formatter: 1.0.11 + gaxios: 6.6.0(encoding@0.1.13) + gcp-metadata: 6.1.0(encoding@0.1.13) + gtoken: 7.1.0(encoding@0.1.13) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + google-gax@4.6.1(encoding@0.1.13): + dependencies: + '@grpc/grpc-js': 1.13.2 + '@grpc/proto-loader': 0.7.13 + '@types/long': 4.0.2 + abort-controller: 3.0.0 + duplexify: 4.1.3 + google-auth-library: 9.10.0(encoding@0.1.13) + node-fetch: 2.7.0(encoding@0.1.13) + object-hash: 3.0.0 + proto3-json-serializer: 2.0.2 + protobufjs: 7.4.0 + retry-request: 7.0.2(encoding@0.1.13) + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + google-logging-utils@1.1.1: {} + + gopd@1.2.0: {} + + graceful-fs@4.2.11: {} + + graphemer@1.4.0: {} + + graphql-request@6.1.0(encoding@0.1.13)(graphql@16.11.0): + dependencies: + '@graphql-typed-document-node/core': 3.2.0(graphql@16.11.0) + cross-fetch: 3.2.0(encoding@0.1.13) + graphql: 16.11.0 + transitivePeerDependencies: + - encoding + + graphql@16.11.0: {} + + groq-sdk@0.19.0(encoding@0.1.13): + dependencies: + '@types/node': 20.19.1 + '@types/node-fetch': 2.6.12 + abort-controller: 3.0.0 + agentkeepalive: 4.6.0 + form-data-encoder: 1.7.2 + formdata-node: 4.4.1 + node-fetch: 2.7.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + gtoken@7.1.0(encoding@0.1.13): + dependencies: + gaxios: 6.6.0(encoding@0.1.13) + jws: 4.0.0 + transitivePeerDependencies: + - encoding + - supports-color + + gtoken@8.0.0: + dependencies: + gaxios: 7.1.0 + jws: 4.0.0 + transitivePeerDependencies: + - supports-color + + gzip-size@6.0.0: + dependencies: + duplexer: 0.1.2 + + handlebars@4.7.8: + dependencies: + minimist: 1.2.8 + neo-async: 2.6.2 + source-map: 0.6.1 + wordwrap: 1.0.0 + optionalDependencies: + uglify-js: 3.17.4 + + has-bigints@1.0.2: {} + + has-bigints@1.1.0: {} + + has-flag@3.0.0: {} + + has-flag@4.0.0: {} + + has-property-descriptors@1.0.2: + dependencies: + es-define-property: 1.0.1 + + has-proto@1.0.3: {} + + has-proto@1.2.0: + dependencies: + dunder-proto: 1.0.1 + + has-symbols@1.1.0: {} + + has-tostringtag@1.0.2: + dependencies: + has-symbols: 1.1.0 + + has-unicode@2.0.1: + optional: true + + hash-base@2.0.2: + dependencies: + inherits: 2.0.4 + + hash-base@3.0.5: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + + hash-sum@2.0.0: {} + + hash.js@1.1.7: + dependencies: + inherits: 2.0.4 + minimalistic-assert: 1.0.1 + + hasown@2.0.2: + dependencies: + function-bind: 1.1.2 + + he@1.2.0: {} + + header-case@2.0.4: + dependencies: + capital-case: 1.0.4 + tslib: 2.8.1 + + heap@0.2.7: {} + + helmet@8.1.0: {} + + help-me@5.0.0: {} + + highlight.js@11.11.1: {} + + hmac-drbg@1.0.1: + dependencies: + hash.js: 1.1.7 + minimalistic-assert: 1.0.1 + minimalistic-crypto-utils: 1.0.1 + + homedir-polyfill@1.0.3: + dependencies: + parse-passwd: 1.0.0 + + hookified@1.11.0: {} + + html-encoding-sniffer@3.0.0: + dependencies: + whatwg-encoding: 2.0.0 + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + html-entities@2.5.2: {} + + html-escaper@2.0.2: {} + + html-minifier@4.0.0: + dependencies: + camel-case: 3.0.0 + clean-css: 4.2.4 + commander: 2.20.3 + he: 1.2.0 + param-case: 2.1.1 + relateurl: 0.2.7 + uglify-js: 3.17.4 + + html-tags@3.3.1: {} + + html-to-text@9.0.5: + dependencies: + '@selderee/plugin-htmlparser2': 0.11.0 + deepmerge: 4.3.1 + dom-serializer: 2.0.0 + htmlparser2: 8.0.2 + selderee: 0.11.0 + + htmlparser2@10.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 6.0.1 + + htmlparser2@5.0.1: + dependencies: + domelementtype: 2.3.0 + domhandler: 3.3.0 + domutils: 2.8.0 + entities: 2.2.0 + + htmlparser2@6.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 4.3.1 + domutils: 2.8.0 + entities: 2.2.0 + + htmlparser2@8.0.2: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.1.0 + entities: 4.5.0 + + http-cache-semantics@4.1.1: + optional: true + + http-errors@2.0.0: + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + + http-proxy-agent@4.0.1: + dependencies: + '@tootallnate/once': 1.1.2 + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + optional: true + + http-proxy-agent@5.0.0: + dependencies: + '@tootallnate/once': 2.0.0 + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + http-proxy-middleware@3.0.5: + dependencies: + '@types/http-proxy': 1.17.16 + debug: 4.4.1(supports-color@8.1.1) + http-proxy: 1.18.1(debug@4.4.1) + is-glob: 4.0.3 + is-plain-object: 5.0.0 + micromatch: 4.0.8 + transitivePeerDependencies: + - supports-color + + http-proxy@1.18.1(debug@4.4.1): + dependencies: + eventemitter3: 4.0.7 + follow-redirects: 1.15.11(debug@4.4.1) + requires-port: 1.0.0 + transitivePeerDependencies: + - debug + + http-signature@1.4.0: + dependencies: + assert-plus: 1.0.0 + jsprim: 2.0.2 + sshpk: 1.18.0 + + http2-client@1.3.5: {} + + https-browserify@1.0.0: {} + + https-proxy-agent@4.0.0: + dependencies: + agent-base: 5.1.1 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@5.0.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.1(supports-color@8.1.1) + transitivePeerDependencies: + - supports-color + + human-signals@1.1.1: {} + + human-signals@2.1.0: {} + + human-signals@8.0.1: {} + + humanize-duration@3.27.3: {} + + humanize-ms@1.2.1: + dependencies: + ms: 2.1.3 + + ibm-cloud-sdk-core@5.3.2: + dependencies: + '@types/debug': 4.1.12 + '@types/node': 20.19.10 + '@types/tough-cookie': 4.0.5 + axios: 1.11.0(debug@4.4.1) + camelcase: 6.3.0 + debug: 4.4.1(supports-color@8.1.1) + dotenv: 16.6.1 + extend: 3.0.2 + file-type: 16.5.4 + form-data: 4.0.4 + isstream: 0.1.2 + jsonwebtoken: 9.0.2 + mime-types: 2.1.35 + retry-axios: 2.6.0(axios@1.11.0) + tough-cookie: 4.1.4 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.4.24: + dependencies: + safer-buffer: 2.1.2 + + iconv-lite@0.4.5: {} + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + ics@2.40.0(patch_hash=163587ad2fa9bc787ed09cd5e958eace08b4aa8aaca651869e9434ba674e158d): + dependencies: + nanoid: 3.3.11 + yup: 0.32.11 + + ieee754@1.2.1: {} + + ignore-by-default@1.0.1: {} + + ignore@5.2.4: {} + + ignore@7.0.5: {} + + imap@0.8.19: + dependencies: + readable-stream: 1.1.14 + utf7: 1.0.2 + + immediate@3.0.6: {} + + immutable@5.1.3: {} + + import-fresh@3.3.0: + dependencies: + parent-module: 1.0.1 + resolve-from: 4.0.0 + + import-in-the-middle@1.14.2: + dependencies: + acorn: 8.14.0 + acorn-import-attributes: 1.9.5(acorn@8.14.0) + cjs-module-lexer: 1.2.2 + module-details-from-path: 1.0.3 + + import-lazy@4.0.0: {} + + import-local@3.1.0: + dependencies: + pkg-dir: 4.2.0 + resolve-cwd: 3.0.0 + + imurmurhash@0.1.4: {} + + indefinite@2.5.1: {} + + indent-string@4.0.0: {} + + indent-string@5.0.0: {} + + infer-owner@1.0.4: + optional: true + + infisical-node@1.3.0: + dependencies: + axios: 1.11.0(debug@4.3.6) + dotenv: 16.3.1 + tweetnacl: 1.0.3 + tweetnacl-util: 0.15.1 + transitivePeerDependencies: + - debug + + inflected@2.1.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + + inherits@2.0.4: {} + + ini@1.3.8: {} + + ini@2.0.0: {} + + inquirer@7.3.3: + dependencies: + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + external-editor: 3.1.0 + figures: 3.2.0 + lodash: 4.17.21 + mute-stream: 0.0.8 + run-async: 2.4.1 + rxjs: 6.6.7 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + + internal-slot@1.0.7: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + internal-slot@1.1.0: + dependencies: + es-errors: 1.3.0 + hasown: 2.0.2 + side-channel: 1.1.0 + + interpret@1.4.0: {} + + ioredis-mock@8.8.1(@types/ioredis-mock@8.2.2)(ioredis@5.3.2): + dependencies: + '@ioredis/as-callback': 3.0.0 + '@ioredis/commands': 1.2.0 + '@types/ioredis-mock': 8.2.2 + fengari: 0.1.4 + fengari-interop: 0.1.3(fengari@0.1.4) + ioredis: 5.3.2 + semver: 7.6.0 + + ioredis@5.3.2: + dependencies: + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 + debug: 4.3.5 + denque: 2.1.0 + lodash.defaults: 4.2.0 + lodash.isarguments: 3.1.0 + redis-errors: 1.2.0 + redis-parser: 3.0.0 + standard-as-callback: 2.1.0 + transitivePeerDependencies: + - supports-color + + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + optional: true + + ipaddr.js@1.9.1: {} + + is-arguments@1.1.1: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-array-buffer@3.0.4: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.3.0 + + is-array-buffer@3.0.5: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-arrayish@0.2.1: {} + + is-arrayish@0.3.2: {} + + is-async-function@2.1.1: + dependencies: + async-function: 1.0.0 + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-bigint@1.0.4: + dependencies: + has-bigints: 1.0.2 + + is-bigint@1.1.0: + dependencies: + has-bigints: 1.1.0 + + is-boolean-object@1.1.2: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-boolean-object@1.2.2: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-buffer@1.1.6: {} + + is-builtin-module@5.0.0: + dependencies: + builtin-modules: 5.0.0 + + is-bun-module@2.0.0: + dependencies: + semver: 7.7.2 + + is-callable@1.2.7: {} + + is-core-module@2.16.1: + dependencies: + hasown: 2.0.2 + + is-data-view@1.0.1: + dependencies: + is-typed-array: 1.1.13 + + is-data-view@1.0.2: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + is-typed-array: 1.1.15 + + is-date-object@1.0.5: + dependencies: + has-tostringtag: 1.0.2 + + is-date-object@1.1.0: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-docker@2.2.1: {} + + is-emoji-supported@0.0.5: {} + + is-expression@4.0.0: + dependencies: + acorn: 7.4.1 + object-assign: 4.1.1 + + is-extglob@2.1.1: {} + + is-finalizationregistry@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-fullwidth-code-point@3.0.0: {} + + is-generator-fn@2.1.0: {} + + is-generator-function@1.1.0: + dependencies: + call-bound: 1.0.4 + get-proto: 1.0.1 + has-tostringtag: 1.0.2 + safe-regex-test: 1.1.0 + + is-glob@4.0.3: + dependencies: + is-extglob: 2.1.1 + + is-installed-globally@0.4.0: + dependencies: + global-dirs: 3.0.0 + is-path-inside: 3.0.3 + + is-interactive@1.0.0: {} + + is-lambda@1.0.1: + optional: true + + is-map@2.0.3: {} + + is-nan@1.3.2: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + is-negative-zero@2.0.3: {} + + is-node-process@1.2.0: {} + + is-number-object@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-number-object@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-number@7.0.0: {} + + is-obj@1.0.1: {} + + is-path-inside@3.0.3: {} + + is-plain-obj@2.1.0: {} + + is-plain-obj@4.1.0: {} + + is-plain-object@5.0.0: {} + + is-potential-custom-element-name@1.0.1: {} + + is-promise@2.2.2: {} + + is-promise@4.0.0: {} + + is-property@1.0.2: {} + + is-regex@1.1.4: + dependencies: + call-bind: 1.0.8 + has-tostringtag: 1.0.2 + + is-regex@1.2.1: + dependencies: + call-bound: 1.0.4 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + hasown: 2.0.2 + + is-regexp@1.0.0: {} + + is-retry-allowed@2.2.0: {} + + is-set@2.0.3: {} + + is-shared-array-buffer@1.0.3: + dependencies: + call-bind: 1.0.8 + + is-shared-array-buffer@1.0.4: + dependencies: + call-bound: 1.0.4 + + is-stream@1.1.0: {} + + is-stream@2.0.1: {} + + is-stream@4.0.1: {} + + is-string@1.0.7: + dependencies: + has-tostringtag: 1.0.2 + + is-string@1.1.1: + dependencies: + call-bound: 1.0.4 + has-tostringtag: 1.0.2 + + is-symbol@1.0.4: + dependencies: + has-symbols: 1.1.0 + + is-symbol@1.1.1: + dependencies: + call-bound: 1.0.4 + has-symbols: 1.1.0 + safe-regex-test: 1.1.0 + + is-typed-array@1.1.13: + dependencies: + which-typed-array: 1.1.15 + + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.19 + + is-typedarray@1.0.0: {} + + is-unicode-supported@0.1.0: {} + + is-unicode-supported@2.1.0: {} + + is-url-superb@4.0.0: {} + + is-url@1.2.4: {} + + is-weakmap@2.0.2: {} + + is-weakref@1.0.2: + dependencies: + call-bind: 1.0.8 + + is-weakref@1.1.1: + dependencies: + call-bound: 1.0.4 + + is-weakset@2.0.4: + dependencies: + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + + is-wsl@2.2.0: + dependencies: + is-docker: 2.2.1 + + isarray@0.0.1: {} + + isarray@1.0.0: {} + + isarray@2.0.5: {} + + isbot@3.6.13: {} + + isexe@2.0.0: {} + + isexe@3.1.1: {} + + iso-639-1@2.1.15: {} + + isomorphic-timers-promises@1.0.1: {} + + isstream@0.1.2: {} + + istanbul-lib-coverage@3.2.2: {} + + istanbul-lib-instrument@5.2.1: + dependencies: + '@babel/core': 7.26.10 + '@babel/parser': 7.27.5 + '@istanbuljs/schema': 0.1.3 + istanbul-lib-coverage: 3.2.2 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + istanbul-lib-report@3.0.1: + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + + istanbul-lib-source-maps@4.0.1: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + + istanbul-lib-source-maps@5.0.6: + dependencies: + '@jridgewell/trace-mapping': 0.3.30 + debug: 4.4.1(supports-color@8.1.1) + istanbul-lib-coverage: 3.2.2 + transitivePeerDependencies: + - supports-color + + istanbul-reports@3.1.7: + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + + jackspeak@2.3.6: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@3.4.3: + dependencies: + '@isaacs/cliui': 8.0.2 + optionalDependencies: + '@pkgjs/parseargs': 0.11.0 + + jackspeak@4.1.0: + dependencies: + '@isaacs/cliui': 8.0.2 + + jake@10.8.5: + dependencies: + async: 3.2.4 + chalk: 4.1.2 + filelist: 1.0.4 + minimatch: 3.1.2 + + jest-changed-files@29.5.0: + dependencies: + execa: 5.1.1 + p-limit: 3.1.0 + + jest-circus@29.6.2: + dependencies: + '@jest/environment': 29.6.2 + '@jest/expect': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.10 + chalk: 4.1.2 + co: 4.6.0 + dedent: 1.3.0 + is-generator-fn: 2.1.0 + jest-each: 29.6.2 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-runtime: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 + p-limit: 3.1.0 + pretty-format: 29.7.0 + pure-rand: 6.0.1 + slash: 3.0.0 + stack-utils: 2.0.6 + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-cli@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)): + dependencies: + '@jest/core': 29.6.2(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + '@jest/test-result': 29.6.2 + '@jest/types': 29.6.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + jest-util: 29.6.2 + jest-validate: 29.6.2 + prompts: 2.4.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-cli@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)): + dependencies: + '@jest/core': 29.6.2(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + '@jest/test-result': 29.6.2 + '@jest/types': 29.6.1 + chalk: 4.1.2 + exit: 0.1.2 + graceful-fs: 4.2.11 + import-local: 3.1.0 + jest-config: 29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + jest-util: 29.6.2 + jest-validate: 29.6.2 + prompts: 2.4.2 + yargs: 17.7.2 + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest-config@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.6.2 + '@jest/types': 29.6.1 + babel-jest: 29.6.2(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.6.2 + jest-environment-node: 29.6.2 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.17.57 + ts-node: 10.9.2(@types/node@20.17.57)(typescript@5.9.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.6.2 + '@jest/types': 29.6.1 + babel-jest: 29.6.2(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.6.2 + jest-environment-node: 29.6.2 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.19.1 + ts-node: 10.9.2(@types/node@20.17.57)(typescript@5.9.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.6.2(@types/node@20.19.1)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.6.2 + '@jest/types': 29.6.1 + babel-jest: 29.6.2(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.6.2 + jest-environment-node: 29.6.2 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.19.1 + ts-node: 10.9.2(@types/node@20.19.10)(typescript@5.9.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-config@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)): + dependencies: + '@babel/core': 7.26.10 + '@jest/test-sequencer': 29.6.2 + '@jest/types': 29.6.1 + babel-jest: 29.6.2(@babel/core@7.26.10) + chalk: 4.1.2 + ci-info: 3.8.0 + deepmerge: 4.3.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-circus: 29.6.2 + jest-environment-node: 29.6.2 + jest-get-type: 29.4.3 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-runner: 29.6.2 + jest-util: 29.6.2 + jest-validate: 29.6.2 + micromatch: 4.0.8 + parse-json: 5.2.0 + pretty-format: 29.7.0 + slash: 3.0.0 + strip-json-comments: 3.1.1 + optionalDependencies: + '@types/node': 20.19.10 + ts-node: 10.9.2(@types/node@20.19.10)(typescript@5.9.2) + transitivePeerDependencies: + - babel-plugin-macros + - supports-color + + jest-diff@29.5.0: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.4.3 + pretty-format: 29.7.0 + + jest-diff@29.6.2: + dependencies: + chalk: 4.1.2 + diff-sequences: 29.6.3 + jest-get-type: 29.4.3 + pretty-format: 29.7.0 + + jest-docblock@29.4.3: + dependencies: + detect-newline: 3.1.0 + + jest-each@29.6.2: + dependencies: + '@jest/types': 29.6.1 + chalk: 4.1.2 + jest-get-type: 29.4.3 + jest-util: 29.6.2 + pretty-format: 29.7.0 + + jest-environment-jsdom@29.6.2: + dependencies: + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 + '@jest/types': 29.6.1 + '@types/jsdom': 20.0.1 + '@types/node': 20.17.57 + jest-mock: 29.6.2 + jest-util: 29.6.2 + jsdom: 20.0.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jest-environment-node@29.6.2: + dependencies: + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.10 + jest-mock: 29.6.2 + jest-util: 29.6.2 + + jest-expect-message@1.1.3: {} + + jest-get-type@29.4.3: {} + + jest-haste-map@29.6.2: + dependencies: + '@jest/types': 29.6.1 + '@types/graceful-fs': 4.1.6 + '@types/node': 20.19.10 + anymatch: 3.1.3 + fb-watchman: 2.0.2 + graceful-fs: 4.2.11 + jest-regex-util: 29.4.3 + jest-util: 29.6.2 + jest-worker: 29.6.2 + micromatch: 4.0.8 + walker: 1.0.8 + optionalDependencies: + fsevents: 2.3.3 + + jest-junit@16.0.0: + dependencies: + mkdirp: 1.0.4 + strip-ansi: 6.0.1 + uuid: 8.3.2 + xml: 1.0.1 + + jest-leak-detector@29.6.2: + dependencies: + jest-get-type: 29.4.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.5.0: + dependencies: + chalk: 4.1.2 + jest-diff: 29.5.0 + jest-get-type: 29.4.3 + pretty-format: 29.7.0 + + jest-matcher-utils@29.6.2: + dependencies: + chalk: 4.1.2 + jest-diff: 29.6.2 + jest-get-type: 29.4.3 + pretty-format: 29.7.0 + + jest-message-util@29.5.0: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 29.6.1 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-message-util@29.6.2: + dependencies: + '@babel/code-frame': 7.27.1 + '@jest/types': 29.6.1 + '@types/stack-utils': 2.0.1 + chalk: 4.1.2 + graceful-fs: 4.2.11 + micromatch: 4.0.8 + pretty-format: 29.7.0 + slash: 3.0.0 + stack-utils: 2.0.6 + + jest-mock-extended@3.0.4(jest@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)))(typescript@5.9.2): + dependencies: + jest: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + ts-essentials: 7.0.3(typescript@5.9.2) + typescript: 5.9.2 + + jest-mock-extended@3.0.4(jest@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)))(typescript@5.9.2): + dependencies: + jest: 29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + ts-essentials: 7.0.3(typescript@5.9.2) + typescript: 5.9.2 + + jest-mock@29.6.2: + dependencies: + '@jest/types': 29.6.1 + '@types/node': 20.17.57 + jest-util: 29.6.2 + + jest-pnp-resolver@1.2.2(jest-resolve@29.6.2): + optionalDependencies: + jest-resolve: 29.6.2 + + jest-regex-util@29.4.3: {} + + jest-resolve-dependencies@29.6.2: + dependencies: + jest-regex-util: 29.4.3 + jest-snapshot: 29.6.2 + transitivePeerDependencies: + - supports-color + + jest-resolve@29.6.2: + dependencies: + chalk: 4.1.2 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.2 + jest-pnp-resolver: 1.2.2(jest-resolve@29.6.2) + jest-util: 29.6.2 + jest-validate: 29.6.2 + resolve: 1.22.10 + resolve.exports: 2.0.0 + slash: 3.0.0 + + jest-runner@29.6.2: + dependencies: + '@jest/console': 29.6.2 + '@jest/environment': 29.6.2 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.10 + chalk: 4.1.2 + emittery: 0.13.1 + graceful-fs: 4.2.11 + jest-docblock: 29.4.3 + jest-environment-node: 29.6.2 + jest-haste-map: 29.6.2 + jest-leak-detector: 29.6.2 + jest-message-util: 29.6.2 + jest-resolve: 29.6.2 + jest-runtime: 29.6.2 + jest-util: 29.6.2 + jest-watcher: 29.6.2 + jest-worker: 29.6.2 + p-limit: 3.1.0 + source-map-support: 0.5.13 + transitivePeerDependencies: + - supports-color + + jest-runtime@29.6.2: + dependencies: + '@jest/environment': 29.6.2 + '@jest/fake-timers': 29.6.2 + '@jest/globals': 29.6.2 + '@jest/source-map': 29.6.0 + '@jest/test-result': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.10 + chalk: 4.1.2 + cjs-module-lexer: 1.2.2 + collect-v8-coverage: 1.0.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + jest-haste-map: 29.6.2 + jest-message-util: 29.6.2 + jest-mock: 29.6.2 + jest-regex-util: 29.4.3 + jest-resolve: 29.6.2 + jest-snapshot: 29.6.2 + jest-util: 29.6.2 + slash: 3.0.0 + strip-bom: 4.0.0 + transitivePeerDependencies: + - supports-color + + jest-snapshot@29.6.2: + dependencies: + '@babel/core': 7.26.10 + '@babel/generator': 7.26.10 + '@babel/plugin-syntax-jsx': 7.18.6(@babel/core@7.26.10) + '@babel/plugin-syntax-typescript': 7.20.0(@babel/core@7.26.10) + '@babel/types': 7.27.6 + '@jest/expect-utils': 29.6.2 + '@jest/transform': 29.6.2 + '@jest/types': 29.6.1 + babel-preset-current-node-syntax: 1.0.1(@babel/core@7.26.10) + chalk: 4.1.2 + expect: 29.6.2 + graceful-fs: 4.2.11 + jest-diff: 29.6.2 + jest-get-type: 29.4.3 + jest-matcher-utils: 29.6.2 + jest-message-util: 29.6.2 + jest-util: 29.6.2 + natural-compare: 1.4.0 + pretty-format: 29.7.0 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + jest-util@29.5.0: + dependencies: + '@jest/types': 29.6.1 + '@types/node': 20.19.1 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-util@29.6.2: + dependencies: + '@jest/types': 29.6.1 + '@types/node': 20.19.1 + chalk: 4.1.2 + ci-info: 3.8.0 + graceful-fs: 4.2.11 + picomatch: 2.3.1 + + jest-validate@29.6.2: + dependencies: + '@jest/types': 29.6.1 + camelcase: 6.3.0 + chalk: 4.1.2 + jest-get-type: 29.4.3 + leven: 3.1.0 + pretty-format: 29.7.0 + + jest-watcher@29.6.2: + dependencies: + '@jest/test-result': 29.6.2 + '@jest/types': 29.6.1 + '@types/node': 20.19.10 + ansi-escapes: 4.3.2 + chalk: 4.1.2 + emittery: 0.13.1 + jest-util: 29.6.2 + string-length: 4.0.2 + + jest-worker@29.6.2: + dependencies: + '@types/node': 20.19.10 + jest-util: 29.6.2 + merge-stream: 2.0.0 + supports-color: 8.1.1 + + jest@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)): + dependencies: + '@jest/core': 29.6.2(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + '@jest/types': 29.6.1 + import-local: 3.1.0 + jest-cli: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jest@29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)): + dependencies: + '@jest/core': 29.6.2(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + '@jest/types': 29.6.1 + import-local: 3.1.0 + jest-cli: 29.6.2(@types/node@20.19.10)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + transitivePeerDependencies: + - '@types/node' + - babel-plugin-macros + - supports-color + - ts-node + + jiti@1.21.7: {} + + jju@1.4.0: {} + + jmespath@0.16.0: {} + + joi@17.13.3: + dependencies: + '@hapi/hoek': 9.3.0 + '@hapi/topo': 5.1.0 + '@sideway/address': 4.1.5 + '@sideway/formula': 3.0.1 + '@sideway/pinpoint': 2.0.0 + + join-component@1.1.0: {} + + jose@6.0.11: {} + + joycon@3.1.1: {} + + js-base64@3.7.2(patch_hash=bb02fdf69495c7b0768791b60ab6e1a002053b8decd19a174f5755691e5c9500): {} + + js-beautify@1.14.9: + dependencies: + config-chain: 1.1.13 + editorconfig: 1.0.4 + glob: 8.1.0 + nopt: 6.0.0 + + js-levenshtein@1.1.6: {} + + js-md4@0.3.2: {} + + js-nacl@1.4.0: {} + + js-sdsl@4.3.0: {} + + js-stringify@1.0.2: {} + + js-tiktoken@1.0.12: + dependencies: + base64-js: 1.5.1 + + js-tokens@4.0.0: {} + + js-tokens@9.0.1: {} + + js-yaml@3.14.1: + dependencies: + argparse: 1.0.10 + esprima: 4.0.1 + + js-yaml@4.1.0: + dependencies: + argparse: 2.0.1 + + jsbi@4.3.0: {} + + jsbn@0.1.1: {} + + jsbn@1.1.0: + optional: true + + jsdoc-type-pratt-parser@4.1.0: {} + + jsdom@20.0.2: + dependencies: + abab: 2.0.6 + acorn: 8.14.0 + acorn-globals: 7.0.1 + cssom: 0.5.0 + cssstyle: 2.3.0 + data-urls: 3.0.2 + decimal.js: 10.4.3 + domexception: 4.0.0 + escodegen: 2.0.0 + form-data: 4.0.4 + html-encoding-sniffer: 3.0.0 + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 3.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 2.0.0 + whatwg-mimetype: 3.0.0 + whatwg-url: 11.0.0 + ws: 8.18.3 + xml-name-validator: 4.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsdom@23.0.1: + dependencies: + cssstyle: 3.0.0 + data-urls: 5.0.0 + decimal.js: 10.4.3 + form-data: 4.0.4 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.7 + parse5: 7.1.2 + rrweb-cssom: 0.6.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 4.1.3 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.0.0 + ws: 8.17.1 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + jsesc@3.0.2: {} + + jsesc@3.1.0: {} + + json-bigint@1.0.0: + dependencies: + bignumber.js: 9.1.2 + + json-buffer@3.0.1: {} + + json-diff@1.0.6: + dependencies: + '@ewoudenberg/difflib': 0.1.0 + colors: 1.4.0 + dreamopt: 0.8.0 + + json-parse-even-better-errors@2.3.1: {} + + json-parse-even-better-errors@4.0.0: {} + + json-pointer@0.6.2: + dependencies: + foreach: 2.0.6 + + json-schema-traverse@0.4.1: {} + + json-schema-traverse@1.0.0: {} + + json-schema@0.4.0: {} + + json-stable-stringify-without-jsonify@1.0.1: {} + + json-stringify-safe@5.0.1: {} + + json5@2.2.3: {} + + jsonfile@6.1.0: + dependencies: + universalify: 2.0.0 + optionalDependencies: + graceful-fs: 4.2.11 + + jsonpath@1.1.1: + dependencies: + esprima: 1.2.2 + static-eval: 2.0.2 + underscore: 1.12.1 + + jsonpointer@5.0.1: {} + + jsonschema@1.4.1: {} + + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.2 + + jsprim@2.0.2: + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + + jssha@3.3.0: {} + + jssha@3.3.1: {} + + jstransformer@1.0.0: + dependencies: + is-promise: 2.2.2 + promise: 7.3.1 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.7 + setimmediate: 1.0.5 + + juice@10.0.1(encoding@0.1.13): + dependencies: + cheerio: 1.0.0-rc.12 + commander: 6.2.1 + mensch: 0.3.4 + slick: 1.12.2 + web-resource-inliner: 6.0.1(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + jwa@1.4.1: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jwa@2.0.0: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.1 + safe-buffer: 5.2.1 + + jws@4.0.0: + dependencies: + jwa: 2.0.0 + safe-buffer: 5.2.1 + + kafkajs@2.2.4: {} + + keyv@4.5.4: + dependencies: + json-buffer: 3.0.1 + + keyv@5.5.0: + dependencies: + '@keyv/serialize': 1.1.0 + + kind-of@6.0.3: {} + + kleur@3.0.3: {} + + known-css-properties@0.36.0: {} + + known-css-properties@0.37.0: {} + + kolorist@1.8.0: {} + + kuler@2.0.0: {} + + langchain@0.3.30(316b19288832115574731e049dc7676a): + dependencies: + '@langchain/core': 0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + '@langchain/openai': 0.6.7(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(ws@8.18.3) + '@langchain/textsplitters': 0.1.0(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + js-tiktoken: 1.0.12 + js-yaml: 4.1.0 + jsonpointer: 5.0.1 + langsmith: 0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)) + openapi-types: 12.1.3 + p-retry: 4.6.2 + uuid: 10.0.0 + yaml: 2.3.4 + zod: 3.25.67 + optionalDependencies: + '@langchain/anthropic': 0.3.26(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/aws': 0.1.11(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/cohere': 0.3.4(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/google-genai': 0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/google-vertexai': 0.2.13(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + '@langchain/groq': 0.2.3(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(encoding@0.1.13) + '@langchain/mistralai': 0.2.1(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)))(zod@3.25.67) + '@langchain/ollama': 0.2.3(@langchain/core@0.3.68(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67))) + axios: 1.11.0(debug@4.3.6) + cheerio: 1.0.0 + handlebars: 4.7.8 + transitivePeerDependencies: + - '@opentelemetry/api' + - '@opentelemetry/exporter-trace-otlp-proto' + - '@opentelemetry/sdk-trace-base' + - openai + - ws + + langsmith@0.3.45(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)): + dependencies: + '@types/uuid': 10.0.0 + chalk: 4.1.2 + console-table-printer: 2.14.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.2 + uuid: 10.0.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + openai: 5.12.2(ws@8.18.3)(zod@3.25.67) + + langsmith@0.3.55(@opentelemetry/api@1.9.0)(@opentelemetry/sdk-trace-base@1.30.1(@opentelemetry/api@1.9.0))(openai@5.12.2(ws@8.18.3)(zod@3.25.67)): + dependencies: + '@types/uuid': 10.0.0 + chalk: 4.1.2 + console-table-printer: 2.14.1 + p-queue: 6.6.2 + p-retry: 4.6.2 + semver: 7.7.2 + uuid: 10.0.0 + optionalDependencies: + '@opentelemetry/api': 1.9.0 + '@opentelemetry/sdk-trace-base': 1.30.1(@opentelemetry/api@1.9.0) + openai: 5.12.2(ws@8.18.3)(zod@3.25.67) + + lazy-ass@1.6.0: {} + + lazystream@1.0.1: + dependencies: + readable-stream: 2.3.8 + + ldapts@4.2.6: + dependencies: + '@types/asn1': 0.2.0 + '@types/node': 20.17.57 + '@types/uuid': 10.0.0 + asn1: 0.2.6 + debug: 4.3.4 + strict-event-emitter-types: 2.0.0 + uuid: 9.0.1 + transitivePeerDependencies: + - supports-color + + leac@0.6.0: {} + + lefthook-darwin-arm64@1.7.15: + optional: true + + lefthook-darwin-x64@1.7.15: + optional: true + + lefthook-freebsd-arm64@1.7.15: + optional: true + + lefthook-freebsd-x64@1.7.15: + optional: true + + lefthook-linux-arm64@1.7.15: + optional: true + + lefthook-linux-x64@1.7.15: + optional: true + + lefthook-openbsd-arm64@1.7.15: + optional: true + + lefthook-openbsd-x64@1.7.15: + optional: true + + lefthook-windows-arm64@1.7.15: + optional: true + + lefthook-windows-x64@1.7.15: + optional: true + + lefthook@1.7.15: + optionalDependencies: + lefthook-darwin-arm64: 1.7.15 + lefthook-darwin-x64: 1.7.15 + lefthook-freebsd-arm64: 1.7.15 + lefthook-freebsd-x64: 1.7.15 + lefthook-linux-arm64: 1.7.15 + lefthook-linux-x64: 1.7.15 + lefthook-openbsd-arm64: 1.7.15 + lefthook-openbsd-x64: 1.7.15 + lefthook-windows-arm64: 1.7.15 + lefthook-windows-x64: 1.7.15 + + leven@3.1.0: {} + + levn@0.3.0: + dependencies: + prelude-ls: 1.1.2 + type-check: 0.3.2 + + levn@0.4.1: + dependencies: + prelude-ls: 1.2.1 + type-check: 0.4.0 + + libbase64@1.2.1: {} + + libmime@5.2.0: + dependencies: + encoding-japanese: 2.0.0 + iconv-lite: 0.6.3 + libbase64: 1.2.1 + libqp: 2.0.1 + + libmime@5.2.1: + dependencies: + encoding-japanese: 2.0.0 + iconv-lite: 0.6.3 + libbase64: 1.2.1 + libqp: 2.0.1 + + libphonenumber-js@1.10.14: {} + + libqp@2.0.1: {} + + lie@3.3.0: + dependencies: + immediate: 3.0.6 + + lil-http-terminator@1.2.3: {} + + lilconfig@2.1.0: {} + + lilconfig@3.1.3: {} + + lines-and-columns@1.2.4: {} + + linkify-it@4.0.1: + dependencies: + uc.micro: 1.0.6 + + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + + listr2@3.14.0(enquirer@2.3.6): + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.19 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.0 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + optionalDependencies: + enquirer: 2.3.6 + + load-tsconfig@0.2.5: {} + + local-pkg@0.5.0: + dependencies: + mlly: 1.7.4 + pkg-types: 1.3.1 + + local-pkg@1.1.1: + dependencies: + mlly: 1.7.4 + pkg-types: 2.1.0 + quansync: 0.2.8 + + locate-path@5.0.0: + dependencies: + p-locate: 4.1.0 + + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + + lodash-es@4.17.21: {} + + lodash-unified@1.0.3(@types/lodash-es@4.17.12)(lodash-es@4.17.21)(lodash@4.17.21): + dependencies: + '@types/lodash-es': 4.17.12 + lodash: 4.17.21 + lodash-es: 4.17.21 + + lodash.camelcase@4.3.0: {} + + lodash.clonedeep@4.5.0: {} + + lodash.debounce@4.0.8: {} + + lodash.defaults@4.2.0: {} + + lodash.get@4.4.2: {} + + lodash.includes@4.3.0: {} + + lodash.isarguments@3.1.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.memoize@4.1.2: {} + + lodash.merge@4.6.2: {} + + lodash.once@4.1.1: {} + + lodash.orderby@4.6.0: {} + + lodash.sortby@4.7.0: {} + + lodash.throttle@4.1.1: {} + + lodash.truncate@4.4.2: {} + + lodash@4.17.21: {} + + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-update@4.0.0: + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + + logform@2.6.1: + dependencies: + '@colors/colors': 1.6.0 + '@types/triple-beam': 1.3.5 + fecha: 4.2.3 + ms: 2.1.3 + safe-stable-stringify: 2.4.0 + triple-beam: 1.3.0 + + loglevel@1.9.2: {} + + long@4.0.0: {} + + long@5.2.3: {} + + long@5.3.2: {} + + loose-envify@1.4.0: + dependencies: + js-tokens: 4.0.0 + + lop@0.4.1: + dependencies: + duck: 0.1.12 + option: 0.2.4 + underscore: 1.13.6 + + lossless-json@1.0.5: {} + + lossless-json@4.0.2: {} + + loupe@3.1.4: {} + + lower-case@1.1.4: {} + + lower-case@2.0.2: + dependencies: + tslib: 2.8.1 + + lru-cache@10.2.2: {} + + lru-cache@11.1.0: {} + + lru-cache@5.1.1: + dependencies: + yallist: 3.1.1 + + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + + lru-cache@8.0.5: {} + + lru-cache@9.1.2: {} + + lunr@2.3.9: {} + + luxon@3.4.4: {} + + luxon@3.5.0: {} + + lz-string@1.5.0: {} + + madge@8.0.0(typescript@5.9.2): + dependencies: + chalk: 4.1.2 + commander: 7.2.0 + commondir: 1.0.1 + debug: 4.4.1(supports-color@8.1.1) + dependency-tree: 11.2.0 + ora: 5.4.1 + pluralize: 8.0.0 + pretty-ms: 7.0.1 + rc: 1.2.8 + stream-to-array: 2.3.0 + ts-graphviz: 2.1.6 + walkdir: 0.4.1 + optionalDependencies: + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + magicast@0.3.5: + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + source-map-js: 1.2.1 + + mailparser@3.6.7: + dependencies: + encoding-japanese: 2.0.0 + he: 1.2.0 + html-to-text: 9.0.5 + iconv-lite: 0.6.3 + libmime: 5.2.1 + linkify-it: 5.0.0 + mailsplit: 5.4.0 + nodemailer: 6.9.9 + tlds: 1.248.0 + + mailsplit@5.4.0: + dependencies: + libbase64: 1.2.1 + libmime: 5.2.0 + libqp: 2.0.1 + + make-dir@3.1.0: + dependencies: + semver: 7.7.2 + + make-dir@4.0.0: + dependencies: + semver: 7.7.2 + + make-error@1.3.6: {} + + make-fetch-happen@9.1.0: + dependencies: + agentkeepalive: 4.6.0 + cacache: 15.3.0 + http-cache-semantics: 4.1.1 + http-proxy-agent: 4.0.1 + https-proxy-agent: 5.0.1 + is-lambda: 1.0.1 + lru-cache: 6.0.0 + minipass: 3.3.6 + minipass-collect: 1.0.2 + minipass-fetch: 1.4.1 + minipass-flush: 1.0.5 + minipass-pipeline: 1.2.4 + negotiator: 0.6.4 + promise-retry: 2.0.1 + socks-proxy-agent: 6.2.1 + ssri: 8.0.1 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + + makeerror@1.0.12: + dependencies: + tmpl: 1.0.5 + + mammoth@1.7.2: + dependencies: + '@xmldom/xmldom': 0.8.10 + argparse: 1.0.10 + base64-js: 1.5.1 + bluebird: 3.4.7 + dingbat-to-unicode: 1.0.1 + jszip: 3.10.1 + lop: 0.4.1 + path-is-absolute: 1.0.1 + underscore: 1.13.6 + xmlbuilder: 10.1.1 + + map-or-similar@1.5.0: {} + + map-stream@0.1.0: {} + + mappersmith@2.45.0: {} + + mark.js@8.11.1: {} + + markdown-it-emoji@2.0.2: {} + + markdown-it-link-attributes@4.0.1: {} + + markdown-it-task-lists@2.1.1: {} + + markdown-it@13.0.2: + dependencies: + argparse: 2.0.1 + entities: 3.0.1 + linkify-it: 4.0.1 + mdurl: 1.0.1 + uc.micro: 1.0.6 + + marked@4.3.0: {} + + math-intrinsics@1.1.0: {} + + mathml-tag-names@2.1.3: {} + + md5.js@1.3.5: + dependencies: + hash-base: 3.0.5 + inherits: 2.0.4 + safe-buffer: 5.2.1 + + md5@2.3.0: + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: 1.1.6 + + mdn-data@2.0.28: {} + + mdn-data@2.0.30: {} + + mdn-data@2.12.2: {} + + mdn-data@2.23.0: {} + + mdurl@1.0.1: {} + + media-typer@0.3.0: {} + + media-typer@1.1.0: {} + + memoize-one@6.0.0: {} + + memoizerific@1.11.3: + dependencies: + map-or-similar: 1.5.0 + + memory-pager@1.5.0: {} + + memorystream@0.3.1: {} + + mensch@0.3.4: {} + + meow@13.2.0: {} + + merge-descriptors@2.0.0: {} + + merge-stream@2.0.0: {} + + merge2@1.4.1: {} + + methods@1.1.2: {} + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 + + miller-rabin@4.0.1: + dependencies: + bn.js: 4.12.2 + brorand: 1.1.0 + + mime-db@1.52.0: {} + + mime-db@1.54.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mime-types@3.0.1: + dependencies: + mime-db: 1.54.0 + + mime@2.6.0: {} + + mime@3.0.0: {} + + mimic-fn@2.1.0: {} + + mimic-response@3.1.0: {} + + min-indent@1.0.1: {} + + minifaker@1.34.1(patch_hash=bc707e2c34a2464da2c9c93ead33e80fd9883a00434ef64907ddc45208a08b33): + dependencies: + '@types/uuid': 8.3.4 + nanoid: 3.3.11 + uuid: 8.3.2 + + minimalistic-assert@1.0.1: {} + + minimalistic-crypto-utils@1.0.1: {} + + minimatch@10.0.3: + dependencies: + '@isaacs/brace-expansion': 5.0.0 + + minimatch@3.0.8: + dependencies: + brace-expansion: 1.1.12 + + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + + minimatch@5.1.6: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.1: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.3: + dependencies: + brace-expansion: 2.0.2 + + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.2 + + minimist@1.2.8: {} + + minipass-collect@1.0.2: + dependencies: + minipass: 3.3.6 + optional: true + + minipass-fetch@1.4.1: + dependencies: + minipass: 3.3.6 + minipass-sized: 1.0.3 + minizlib: 2.1.2 + optionalDependencies: + encoding: 0.1.13 + optional: true + + minipass-flush@1.0.5: + dependencies: + minipass: 3.3.6 + optional: true + + minipass-pipeline@1.2.4: + dependencies: + minipass: 3.3.6 + optional: true + + minipass-sized@1.0.3: + dependencies: + minipass: 3.3.6 + optional: true + + minipass@3.3.6: + dependencies: + yallist: 4.0.0 + + minipass@5.0.0: {} + + minipass@7.1.2: {} + + minizlib@2.1.2: + dependencies: + minipass: 3.3.6 + yallist: 4.0.0 + + miragejs@0.1.48: + dependencies: + '@miragejs/pretender-node-polyfill': 0.1.2 + inflected: 2.1.0 + lodash: 4.17.21 + pretender: 3.4.7 + + mitt@2.1.0: {} + + mjml-accordion@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-body@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-button@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-carousel@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-cli@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + chokidar: 4.0.3 + glob: 10.4.5 + html-minifier: 4.0.0 + js-beautify: 1.14.9 + lodash: 4.17.21 + minimatch: 9.0.5 + mjml-core: 4.15.3(encoding@0.1.13) + mjml-migrate: 4.15.3(encoding@0.1.13) + mjml-parser-xml: 4.15.3 + mjml-validator: 4.15.3 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + + mjml-column@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-core@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + cheerio: 1.0.0-rc.12 + detect-node: 2.1.0 + html-minifier: 4.0.0 + js-beautify: 1.14.9 + juice: 10.0.1(encoding@0.1.13) + lodash: 4.17.21 + mjml-migrate: 4.15.3(encoding@0.1.13) + mjml-parser-xml: 4.15.3 + mjml-validator: 4.15.3 + transitivePeerDependencies: + - encoding + + mjml-divider@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-group@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-attributes@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-breakpoint@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-font@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-html-attributes@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-preview@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-style@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head-title@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-head@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-hero@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-image@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-migrate@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + js-beautify: 1.14.9 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + mjml-parser-xml: 4.15.3 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + + mjml-navbar@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-parser-xml@4.15.3: + dependencies: + '@babel/runtime': 7.26.10 + detect-node: 2.1.0 + htmlparser2: 9.1.0 + lodash: 4.17.21 + + mjml-preset-core@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + mjml-accordion: 4.15.3(encoding@0.1.13) + mjml-body: 4.15.3(encoding@0.1.13) + mjml-button: 4.15.3(encoding@0.1.13) + mjml-carousel: 4.15.3(encoding@0.1.13) + mjml-column: 4.15.3(encoding@0.1.13) + mjml-divider: 4.15.3(encoding@0.1.13) + mjml-group: 4.15.3(encoding@0.1.13) + mjml-head: 4.15.3(encoding@0.1.13) + mjml-head-attributes: 4.15.3(encoding@0.1.13) + mjml-head-breakpoint: 4.15.3(encoding@0.1.13) + mjml-head-font: 4.15.3(encoding@0.1.13) + mjml-head-html-attributes: 4.15.3(encoding@0.1.13) + mjml-head-preview: 4.15.3(encoding@0.1.13) + mjml-head-style: 4.15.3(encoding@0.1.13) + mjml-head-title: 4.15.3(encoding@0.1.13) + mjml-hero: 4.15.3(encoding@0.1.13) + mjml-image: 4.15.3(encoding@0.1.13) + mjml-navbar: 4.15.3(encoding@0.1.13) + mjml-raw: 4.15.3(encoding@0.1.13) + mjml-section: 4.15.3(encoding@0.1.13) + mjml-social: 4.15.3(encoding@0.1.13) + mjml-spacer: 4.15.3(encoding@0.1.13) + mjml-table: 4.15.3(encoding@0.1.13) + mjml-text: 4.15.3(encoding@0.1.13) + mjml-wrapper: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-raw@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-section@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-social@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-spacer@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-table@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-text@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml-validator@4.15.3: + dependencies: + '@babel/runtime': 7.26.10 + + mjml-wrapper@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + lodash: 4.17.21 + mjml-core: 4.15.3(encoding@0.1.13) + mjml-section: 4.15.3(encoding@0.1.13) + transitivePeerDependencies: + - encoding + + mjml@4.15.3(encoding@0.1.13): + dependencies: + '@babel/runtime': 7.26.10 + mjml-cli: 4.15.3(encoding@0.1.13) + mjml-core: 4.15.3(encoding@0.1.13) + mjml-migrate: 4.15.3(encoding@0.1.13) + mjml-preset-core: 4.15.3(encoding@0.1.13) + mjml-validator: 4.15.3 + transitivePeerDependencies: + - encoding + + mkdirp-classic@0.5.3: {} + + mkdirp@0.5.6: + dependencies: + minimist: 1.2.8 + + mkdirp@1.0.4: {} + + mkdirp@2.1.3: {} + + mkdirp@3.0.1: {} + + mlly@1.7.4: + dependencies: + acorn: 8.14.0 + pathe: 2.0.3 + pkg-types: 1.3.1 + ufo: 1.6.1 + + mobx-react-lite@4.0.7(mobx@6.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + mobx: 6.12.0 + react: 18.2.0 + use-sync-external-store: 1.2.2(react@18.2.0) + optionalDependencies: + react-dom: 18.2.0(react@18.2.0) + + mobx-react@9.1.1(mobx@6.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + mobx: 6.12.0 + mobx-react-lite: 4.0.7(mobx@6.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + react: 18.2.0 + optionalDependencies: + react-dom: 18.2.0(react@18.2.0) + + mobx@6.12.0: {} + + mocha-junit-reporter@2.2.1(mocha@11.7.1): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + md5: 2.3.0 + mkdirp: 3.0.1 + mocha: 11.7.1 + strip-ansi: 6.0.1 + xml: 1.0.1 + transitivePeerDependencies: + - supports-color + + mocha@11.7.1: + dependencies: + browser-stdout: 1.3.1 + chokidar: 4.0.3 + debug: 4.4.1(supports-color@8.1.1) + diff: 7.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.4.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 9.0.5 + ms: 2.1.3 + picocolors: 1.1.1 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 9.3.3 + yargs: 17.7.2 + yargs-parser: 21.1.1 + yargs-unparser: 2.0.0 + + module-definition@6.0.1: + dependencies: + ast-module-types: 6.0.1 + node-source-walk: 7.0.1 + + module-details-from-path@1.0.3: {} + + module-lookup-amd@9.0.5: + dependencies: + commander: 12.1.0 + glob: 7.2.3 + requirejs: 2.3.7 + requirejs-config-file: 4.0.0 + + moment-timezone@0.5.48: + dependencies: + moment: 2.29.4 + + moment@2.29.4: {} + + mongodb-connection-string-url@3.0.0: + dependencies: + '@types/whatwg-url': 11.0.4 + whatwg-url: 13.0.0 + + mongodb@6.11.0(@aws-sdk/credential-providers@3.808.0)(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.3): + dependencies: + '@mongodb-js/saslprep': 1.1.9 + bson: 6.10.0 + mongodb-connection-string-url: 3.0.0 + optionalDependencies: + '@aws-sdk/credential-providers': 3.808.0 + gcp-metadata: 5.3.0(encoding@0.1.13) + socks: 2.8.3 + + mqtt-packet@9.0.0: + dependencies: + bl: 6.0.12 + debug: 4.4.1(supports-color@8.1.1) + process-nextick-args: 2.0.1 + transitivePeerDependencies: + - supports-color + + mqtt@5.7.2: + dependencies: + '@types/readable-stream': 4.0.10 + '@types/ws': 8.18.1(patch_hash=682b44b740be55e5d7018e6fe335880851dadf2524b6c723c9ed0c29cb2fa7fb) + commist: 3.2.0 + concat-stream: 2.0.0 + debug: 4.3.4 + help-me: 5.0.0 + lru-cache: 10.2.2 + minimist: 1.2.8 + mqtt-packet: 9.0.0 + number-allocator: 1.0.14 + readable-stream: 4.4.2 + reinterval: 1.1.0 + rfdc: 1.3.0 + split2: 4.2.0 + worker-timers: 7.1.8 + ws: 8.17.1 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + ms@2.0.0: {} + + ms@2.1.2: {} + + ms@2.1.3: {} + + msgpackr-extract@3.0.2: + dependencies: + node-gyp-build-optional-packages: 5.0.7 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.2 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.2 + optional: true + + msgpackr@1.11.2: + optionalDependencies: + msgpackr-extract: 3.0.2 + + mssql@10.0.2: + dependencies: + '@tediousjs/connection-string': 0.5.0 + commander: 11.1.0 + debug: 4.4.1(supports-color@8.1.1) + rfdc: 1.3.0 + tarn: 3.0.2 + tedious: 16.7.1 + transitivePeerDependencies: + - supports-color + + muggle-string@0.4.1: {} + + multer@2.0.2: + dependencies: + append-field: 1.0.0 + busboy: 1.6.0 + concat-stream: 2.0.0 + mkdirp: 0.5.6 + object-assign: 4.1.1 + type-is: 1.6.18 + xtend: 4.0.2 + + mustache@4.2.0: {} + + mute-stream@0.0.8: {} + + mylas@2.1.13: {} + + mysql2@3.11.0: + dependencies: + aws-ssl-profiles: 1.1.1 + denque: 2.1.0 + generate-function: 2.3.1 + iconv-lite: 0.6.3 + long: 5.2.3 + lru-cache: 8.0.5 + named-placeholders: 1.1.3 + seq-queue: 0.0.5 + sqlstring: 2.3.3 + + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + + named-placeholders@1.1.3: + dependencies: + lru-cache: 7.18.3 + + nan@2.20.0: + optional: true + + nanoclone@0.2.1: {} + + nanoid@3.3.11: {} + + nanoid@3.3.8: {} + + napi-build-utils@2.0.0: {} + + napi-postinstall@0.2.4: {} + + native-duplexpair@1.0.0: {} + + natural-compare@1.4.0: {} + + negotiator@0.6.4: {} + + negotiator@1.0.0: {} + + neo-async@2.6.2: {} + + nice-grpc-client-middleware-retry@3.1.11: + dependencies: + abort-controller-x: 0.4.3 + nice-grpc-common: 2.0.2 + + nice-grpc-common@2.0.2: + dependencies: + ts-error: 1.0.6 + + nice-grpc@2.1.12: + dependencies: + '@grpc/grpc-js': 1.13.2 + abort-controller-x: 0.4.3 + nice-grpc-common: 2.0.2 + + nice-try@1.0.5: {} + + no-case@2.3.2: + dependencies: + lower-case: 1.1.4 + + no-case@3.0.4: + dependencies: + lower-case: 2.0.2 + tslib: 2.8.1 + + nock@14.0.1: + dependencies: + '@mswjs/interceptors': 0.37.5 + json-stringify-safe: 5.0.1 + propagate: 2.0.1 + + node-abi@3.54.0: + dependencies: + semver: 7.7.2 + + node-abi@3.75.0: + dependencies: + semver: 7.7.2 + + node-abort-controller@3.1.1: {} + + node-addon-api@7.1.0: {} + + node-addon-api@8.3.0: {} + + node-cleanup@2.1.2: {} + + node-domexception@1.0.0: {} + + node-ensure@0.0.0: {} + + node-fetch-h2@2.3.0: + dependencies: + http2-client: 1.3.5 + + node-fetch-native@1.6.6: {} + + node-fetch@2.7.0(encoding@0.1.13): + dependencies: + whatwg-url: 5.0.0 + optionalDependencies: + encoding: 0.1.13 + + node-fetch@3.3.2: + dependencies: + data-uri-to-buffer: 4.0.1 + fetch-blob: 3.2.0 + formdata-polyfill: 4.0.10 + + node-forge@1.3.1: {} + + node-gyp-build-optional-packages@5.0.7: + optional: true + + node-gyp-build@4.8.4: {} + + node-gyp@8.4.1: + dependencies: + env-paths: 2.2.1 + glob: 7.2.3 + graceful-fs: 4.2.11 + make-fetch-happen: 9.1.0 + nopt: 5.0.0 + npmlog: 6.0.2 + rimraf: 3.0.2 + semver: 7.7.2 + tar: 6.2.1 + which: 2.0.2 + transitivePeerDependencies: + - bluebird + - supports-color + optional: true + + node-html-markdown@1.2.0: + dependencies: + node-html-parser: 5.4.2 + + node-html-parser@5.4.2: + dependencies: + css-select: 4.3.0 + he: 1.2.0 + + node-int64@0.4.0: {} + + node-machine-id@1.1.12: {} + + node-readfiles@0.2.0: + dependencies: + es6-promise: 3.3.1 + + node-releases@2.0.19: {} + + node-rsa@1.1.1: + dependencies: + asn1: 0.2.6 + + node-source-walk@7.0.1: + dependencies: + '@babel/parser': 7.27.5 + + node-ssh@13.2.0: + dependencies: + is-stream: 2.0.1 + make-dir: 3.1.0 + sb-promise-queue: 2.1.0 + sb-scandir: 3.1.0 + shell-escape: 0.2.0 + ssh2: 1.15.0 + + node-stdlib-browser@1.3.1: + dependencies: + assert: 2.1.0 + browser-resolve: 2.0.0 + browserify-zlib: 0.2.0 + buffer: 5.7.1 + console-browserify: 1.2.0 + constants-browserify: 1.0.0 + create-require: 1.1.1 + crypto-browserify: 3.12.1 + domain-browser: 4.22.0 + events: 3.3.0 + https-browserify: 1.0.0 + isomorphic-timers-promises: 1.0.1 + os-browserify: 0.3.0 + path-browserify: 1.0.1 + pkg-dir: 5.0.0 + process: 0.11.10 + punycode: 1.4.1 + querystring-es3: 0.2.1 + readable-stream: 3.6.0 + stream-browserify: 3.0.0 + stream-http: 3.2.0 + string_decoder: 1.3.0 + timers-browserify: 2.0.12 + tty-browserify: 0.0.1 + url: 0.11.4 + util: 0.12.5 + vm-browserify: 1.1.2 + + nodemailer@6.9.9: {} + + nodemon@3.0.1: + dependencies: + chokidar: 4.0.3 + debug: 3.2.7(supports-color@5.5.0) + ignore-by-default: 1.0.1 + minimatch: 3.1.2 + pstree.remy: 1.1.8 + semver: 7.7.2 + simple-update-notifier: 2.0.0 + supports-color: 5.5.0 + touch: 3.1.0 + undefsafe: 2.0.5 + + nopt@1.0.10: + dependencies: + abbrev: 1.1.1 + + nopt@5.0.0: + dependencies: + abbrev: 1.1.1 + optional: true + + nopt@6.0.0: + dependencies: + abbrev: 1.1.1 + + normalize-path@3.0.0: {} + + normalize-range@0.1.2: {} + + normalize-wheel-es@1.2.0: {} + + npm-normalize-package-bin@4.0.0: {} + + npm-run-all2@7.0.2: + dependencies: + ansi-styles: 6.2.1 + cross-spawn: 7.0.6 + memorystream: 0.3.1 + minimatch: 9.0.5 + pidtree: 0.6.0 + read-package-json-fast: 4.0.0 + shell-quote: 1.8.1 + which: 5.0.0 + + npm-run-path@2.0.2: + dependencies: + path-key: 2.0.1 + + npm-run-path@4.0.1: + dependencies: + path-key: 3.1.1 + + npm-run-path@6.0.0: + dependencies: + path-key: 4.0.0 + unicorn-magic: 0.3.0 + + npmlog@6.0.2: + dependencies: + are-we-there-yet: 3.0.1 + console-control-strings: 1.1.0 + gauge: 4.0.4 + set-blocking: 2.0.0 + optional: true + + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + + nub@0.0.0: {} + + number-allocator@1.0.14: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + js-sdsl: 4.3.0 + transitivePeerDependencies: + - supports-color + + nwsapi@2.2.7: {} + + nypm@0.5.4: + dependencies: + citty: 0.1.6 + consola: 3.4.2 + pathe: 2.0.3 + pkg-types: 1.3.1 + tinyexec: 0.3.2 + ufo: 1.6.1 + + oas-kit-common@1.0.8: + dependencies: + fast-safe-stringify: 2.1.1 + + oas-linter@3.2.2: + dependencies: + '@exodus/schemasafe': 1.3.0 + should: 13.2.3 + yaml: 1.10.2 + + oas-resolver@2.5.6: + dependencies: + node-fetch-h2: 2.3.0 + oas-kit-common: 1.0.8 + reftools: 1.1.9 + yaml: 1.10.2 + yargs: 17.7.2 + + oas-schema-walker@1.1.5: {} + + oas-validator@5.0.8: + dependencies: + call-me-maybe: 1.0.1 + oas-kit-common: 1.0.8 + oas-linter: 3.2.2 + oas-resolver: 2.5.6 + oas-schema-walker: 1.1.5 + reftools: 1.1.9 + should: 13.2.3 + yaml: 1.10.2 + + oauth-1.0a@2.2.6: {} + + oauth4webapi@3.5.1: {} + + object-assign@4.1.1: {} + + object-hash@3.0.0: {} + + object-inspect@1.13.1: {} + + object-inspect@1.13.4: {} + + object-is@1.1.6: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + + object-keys@1.1.1: {} + + object-sizeof@2.6.5: + dependencies: + buffer: 6.0.3 + + object.assign@4.1.5: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.assign@4.1.7: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + has-symbols: 1.1.0 + object-keys: 1.1.1 + + object.fromentries@2.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + object.groupby@1.0.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + + object.values@1.2.1: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + obuf@1.1.2: {} + + ohash@1.1.6: {} + + ohash@2.0.11: {} + + ollama@0.5.16: + dependencies: + whatwg-fetch: 3.6.20 + + on-exit-leak-free@2.1.2: {} + + on-finished@2.4.1: + dependencies: + ee-first: 1.1.1 + + on-headers@1.1.0: {} + + once@1.4.0: + dependencies: + wrappy: 1.0.2 + + one-time@1.0.0: + dependencies: + fn.name: 1.1.0 + + onetime@5.1.2: + dependencies: + mimic-fn: 2.1.0 + + ono@7.1.3: + dependencies: + '@jsdevtools/ono': 7.1.3 + + open@7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + + open@8.4.0: + dependencies: + define-lazy-prop: 2.0.0 + is-docker: 2.2.1 + is-wsl: 2.2.0 + + openai@5.12.2(ws@8.18.3)(zod@3.25.67): + optionalDependencies: + ws: 8.18.3 + zod: 3.25.67 + + openapi-sampler@1.5.1: + dependencies: + '@types/json-schema': 7.0.15 + json-pointer: 0.6.2 + + openapi-types@12.1.3: {} + + openid-client@6.5.0: + dependencies: + jose: 6.0.11 + oauth4webapi: 3.5.1 + + option@0.2.4: {} + + optionator@0.8.3: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.3.0 + prelude-ls: 1.1.2 + type-check: 0.3.2 + word-wrap: 1.2.3 + + optionator@0.9.3: + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + os-browserify@0.3.0: {} + + ospath@1.2.2: {} + + otpauth@9.1.1: + dependencies: + jssha: 3.3.0 + + otplib@12.0.1: + dependencies: + '@otplib/core': 12.0.1 + '@otplib/preset-default': 12.0.1 + '@otplib/preset-v11': 12.0.1 + + outvariant@1.4.3: {} + + own-keys@1.0.1: + dependencies: + get-intrinsic: 1.3.0 + object-keys: 1.1.1 + safe-push-apply: 1.0.0 + + p-cancelable@2.1.1: {} + + p-debounce@2.1.0: {} + + p-finally@1.0.0: {} + + p-lazy@3.1.0: {} + + p-limit@2.3.0: + dependencies: + p-try: 2.2.0 + + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + + p-locate@4.1.0: + dependencies: + p-limit: 2.3.0 + + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + + p-map@4.0.0: + dependencies: + aggregate-error: 3.1.0 + + p-queue@6.6.2: + dependencies: + eventemitter3: 4.0.7 + p-timeout: 3.2.0 + + p-retry@4.6.2: + dependencies: + '@types/retry': 0.12.0 + retry: 0.13.1 + + p-timeout@3.2.0: + dependencies: + p-finally: 1.0.0 + + p-try@2.2.0: {} + + package-json-from-dist@1.0.0: {} + + pako@1.0.11: {} + + param-case@2.1.1: + dependencies: + no-case: 2.3.2 + + param-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + parent-module@1.0.1: + dependencies: + callsites: 3.1.0 + + parse-asn1@5.1.7: + dependencies: + asn1.js: 4.10.1 + browserify-aes: 1.2.0 + evp_bytestokey: 1.0.3 + hash-base: 3.0.5 + pbkdf2: 3.1.3 + safe-buffer: 5.2.1 + + parse-diff@0.11.1: {} + + parse-json@5.2.0: + dependencies: + '@babel/code-frame': 7.27.1 + error-ex: 1.3.2 + json-parse-even-better-errors: 2.3.1 + lines-and-columns: 1.2.4 + + parse-ms@2.1.0: {} + + parse-ms@4.0.0: {} + + parse-passwd@1.0.0: {} + + parse-srcset@1.0.2: {} + + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5-htmlparser2-tree-adapter@7.0.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.1.2 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.1.2 + + parse5@6.0.1: {} + + parse5@7.1.2: + dependencies: + entities: 4.5.0 + + parseley@0.12.1: + dependencies: + leac: 0.6.0 + peberminta: 0.9.0 + + parseurl@1.3.3: {} + + pascal-case@3.1.2: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + + path-browserify@1.0.1: {} + + path-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + path-exists@4.0.0: {} + + path-is-absolute@1.0.1: {} + + path-key@2.0.1: {} + + path-key@3.1.1: {} + + path-key@4.0.0: {} + + path-parse@1.0.7: {} + + path-scurry@1.11.1: + dependencies: + lru-cache: 10.2.2 + minipass: 7.1.2 + + path-scurry@2.0.0: + dependencies: + lru-cache: 11.1.0 + minipass: 7.1.2 + + path-to-regexp@8.2.0: {} + + path-type@4.0.0: {} + + pathe@1.1.2: {} + + pathe@2.0.3: {} + + pathval@2.0.0: {} + + pause-stream@0.0.11: + dependencies: + through: 2.3.8 + + pbkdf2@3.1.3: + dependencies: + create-hash: 1.1.3 + create-hmac: 1.1.7 + ripemd160: 2.0.1 + safe-buffer: 5.2.1 + sha.js: 2.4.12 + to-buffer: 1.2.1 + + pdf-parse@1.1.1: + dependencies: + debug: 3.2.7(supports-color@5.5.0) + node-ensure: 0.0.0 + transitivePeerDependencies: + - supports-color + + pdfjs-dist@5.3.31(patch_hash=421253c8e411cdaef58ba96d2bb44ae0784e1b3e446f5caca50710daa1fa5dcd): + optionalDependencies: + '@napi-rs/canvas': 0.1.70 + + peberminta@0.9.0: {} + + peek-readable@4.1.0: {} + + pend@1.2.0: {} + + perfect-debounce@1.0.0: {} + + perfect-scrollbar@1.5.5: {} + + performance-now@2.1.0: {} + + pg-cloudflare@1.1.1: + optional: true + + pg-connection-string@2.6.4: {} + + pg-int8@1.0.1: {} + + pg-minify@1.6.5: {} + + pg-numeric@1.0.2: {} + + pg-pool@3.6.2(pg@8.12.0): + dependencies: + pg: 8.12.0 + + pg-promise@11.9.1: + dependencies: + assert-options: 0.8.1 + pg: 8.12.0 + pg-minify: 1.6.5 + spex: 3.3.0 + transitivePeerDependencies: + - pg-native + + pg-protocol@1.6.1: {} + + pg-types@2.2.0: + dependencies: + pg-int8: 1.0.1 + postgres-array: 2.0.0 + postgres-bytea: 1.0.0 + postgres-date: 1.0.7 + postgres-interval: 1.2.0 + + pg-types@4.0.2: + dependencies: + pg-int8: 1.0.1 + pg-numeric: 1.0.2 + postgres-array: 3.0.2 + postgres-bytea: 3.0.0 + postgres-date: 2.1.0 + postgres-interval: 3.0.0 + postgres-range: 1.1.4 + + pg@8.12.0: + dependencies: + pg-connection-string: 2.6.4 + pg-pool: 3.6.2(pg@8.12.0) + pg-protocol: 1.6.1 + pg-types: 2.2.0 + pgpass: 1.0.5 + optionalDependencies: + pg-cloudflare: 1.1.1 + + pgpass@1.0.5: + dependencies: + split2: 4.2.0 + + picocolors@1.0.1: {} + + picocolors@1.1.1: {} + + picomatch@2.3.1: {} + + picomatch@4.0.2: {} + + picomatch@4.0.3: {} + + pidtree@0.6.0: {} + + pify@2.3.0: {} + + pinia@2.2.4(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.9.2) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + optionalDependencies: + typescript: 5.9.2 + + pino-abstract-transport@2.0.0: + dependencies: + split2: 4.2.0 + + pino-std-serializers@7.0.0: {} + + pino@9.7.0: + dependencies: + atomic-sleep: 1.0.0 + fast-redact: 3.5.0 + on-exit-leak-free: 2.1.2 + pino-abstract-transport: 2.0.0 + pino-std-serializers: 7.0.0 + process-warning: 5.0.0 + quick-format-unescaped: 4.0.4 + real-require: 0.2.0 + safe-stable-stringify: 2.4.0 + sonic-boom: 4.2.0 + thread-stream: 3.1.0 + + pirates@4.0.7: {} + + pkce-challenge@5.0.0(patch_hash=651e785d0b7bbf5be9210e1e895c39a16dc3ce8a5a3843b4819565fb6e175b90): {} + + pkg-dir@4.2.0: + dependencies: + find-up: 4.1.0 + + pkg-dir@5.0.0: + dependencies: + find-up: 5.0.0 + + pkg-types@1.3.1: + dependencies: + confbox: 0.1.8 + mlly: 1.7.4 + pathe: 2.0.3 + + pkg-types@2.1.0: + dependencies: + confbox: 0.2.1 + exsolve: 1.0.4 + pathe: 2.0.3 + + playwright-core@1.54.2: {} + + playwright@1.54.2: + dependencies: + playwright-core: 1.54.2 + optionalDependencies: + fsevents: 2.3.2 + + plimit-lit@1.4.1: + dependencies: + queue-lit: 1.5.0 + + pluralize@8.0.0: {} + + polished@4.2.2: + dependencies: + '@babel/runtime': 7.26.10 + + possible-typed-array-names@1.0.0: {} + + possible-typed-array-names@1.1.0: {} + + postcss-html@1.8.0: + dependencies: + htmlparser2: 8.0.2 + js-tokens: 9.0.1 + postcss: 8.5.6 + postcss-safe-parser: 6.0.0(postcss@8.5.6) + + postcss-import@15.1.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-value-parser: 4.2.0 + read-cache: 1.0.0 + resolve: 1.22.10 + + postcss-js@4.0.1(postcss@8.5.6): + dependencies: + camelcase-css: 2.0.1 + postcss: 8.5.6 + + postcss-load-config@4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)): + dependencies: + lilconfig: 3.1.3 + yaml: 2.3.4 + optionalDependencies: + postcss: 8.5.6 + ts-node: 10.9.2(@types/node@20.19.10)(typescript@5.9.2) + + postcss-load-config@6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3): + dependencies: + lilconfig: 3.1.3 + optionalDependencies: + jiti: 1.21.7 + postcss: 8.5.6 + tsx: 4.19.3 + + postcss-media-query-parser@0.2.3: {} + + postcss-nested@6.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + postcss-selector-parser: 6.1.2 + + postcss-resolve-nested-selector@0.1.6: {} + + postcss-safe-parser@6.0.0(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-safe-parser@7.0.1(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-scss@4.0.9(postcss@8.5.6): + dependencies: + postcss: 8.5.6 + + postcss-selector-parser@6.1.2: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-selector-parser@7.1.0: + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + + postcss-value-parser@4.2.0: {} + + postcss-values-parser@6.0.2(postcss@8.5.6): + dependencies: + color-name: 1.1.4 + is-url-superb: 4.0.0 + postcss: 8.5.6 + quote-unquote: 1.0.0 + + postcss@8.4.31: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.4.49: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postcss@8.5.6: + dependencies: + nanoid: 3.3.11 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + postgres-array@2.0.0: {} + + postgres-array@3.0.2: {} + + postgres-bytea@1.0.0: {} + + postgres-bytea@3.0.0: + dependencies: + obuf: 1.1.2 + + postgres-date@1.0.7: {} + + postgres-date@2.1.0: {} + + postgres-interval@1.2.0: + dependencies: + xtend: 4.0.2 + + postgres-interval@3.0.0: {} + + postgres-range@1.1.4: {} + + posthog-node@3.2.1: + dependencies: + axios: 1.11.0(debug@4.3.6) + rusha: 0.8.14 + transitivePeerDependencies: + - debug + + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.4 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.54.0 + pump: 3.0.0 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.3 + tunnel-agent: 0.6.0 + + precinct@12.2.0: + dependencies: + '@dependents/detective-less': 5.0.1 + commander: 12.1.0 + detective-amd: 6.0.1 + detective-cjs: 6.0.1 + detective-es6: 5.0.1 + detective-postcss: 7.0.1(postcss@8.5.6) + detective-sass: 6.0.1 + detective-scss: 5.0.1 + detective-stylus: 5.0.1 + detective-typescript: 14.0.0(typescript@5.9.2) + detective-vue2: 2.2.0(typescript@5.9.2) + module-definition: 6.0.1 + node-source-walk: 7.0.1 + postcss: 8.5.6 + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + prelude-ls@1.1.2: {} + + prelude-ls@1.2.1: {} + + pretender@3.4.7: + dependencies: + fake-xml-http-request: 2.1.2 + route-recognizer: 0.3.4 + + prettier@3.3.3: {} + + prettier@3.6.2: {} + + pretty-bytes@5.6.0: {} + + pretty-format@27.5.1: + dependencies: + ansi-regex: 5.0.1 + ansi-styles: 5.2.0 + react-is: 17.0.2 + + pretty-format@29.5.0: + dependencies: + '@jest/schemas': 29.4.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + + pretty-format@29.7.0: + dependencies: + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 + + pretty-ms@7.0.1: + dependencies: + parse-ms: 2.1.0 + + pretty-ms@9.2.0: + dependencies: + parse-ms: 4.0.0 + + prismjs@1.29.0: {} + + process-nextick-args@2.0.1: {} + + process-warning@5.0.0: {} + + process@0.11.10: {} + + prom-client@15.1.3: + dependencies: + '@opentelemetry/api': 1.9.0 + tdigest: 0.1.2 + + promise-ftp-common@1.1.5: {} + + promise-ftp@1.3.5(promise-ftp-common@1.1.5): + dependencies: + '@icetee/ftp': 0.3.15 + bluebird: 2.11.0 + promise-ftp-common: 1.1.5 + + promise-inflight@1.0.1: + optional: true + + promise-retry@2.0.1: + dependencies: + err-code: 2.0.3 + retry: 0.12.0 + optional: true + + promise@7.3.1: + dependencies: + asap: 2.0.6 + + prompts@2.4.2: + dependencies: + kleur: 3.0.3 + sisteransi: 1.0.5 + + prop-types@15.8.1: + dependencies: + loose-envify: 1.4.0 + object-assign: 4.1.1 + react-is: 16.13.1 + + propagate@2.0.1: {} + + proper-lockfile@4.1.2: + dependencies: + graceful-fs: 4.2.11 + retry: 0.12.0 + signal-exit: 3.0.7 + + properties-reader@2.3.0: + dependencies: + mkdirp: 1.0.4 + + property-expr@2.0.5: {} + + proto-list@1.2.4: {} + + proto3-json-serializer@2.0.2: + dependencies: + protobufjs: 7.4.0 + + protobufjs@7.4.0: + dependencies: + '@protobufjs/aspromise': 1.1.2 + '@protobufjs/base64': 1.1.2 + '@protobufjs/codegen': 2.0.4 + '@protobufjs/eventemitter': 1.1.0 + '@protobufjs/fetch': 1.1.0 + '@protobufjs/float': 1.0.2 + '@protobufjs/inquire': 1.1.0 + '@protobufjs/path': 1.1.2 + '@protobufjs/pool': 1.1.0 + '@protobufjs/utf8': 1.1.0 + '@types/node': 20.19.1 + long: 5.3.2 + + proxy-addr@2.0.7: + dependencies: + forwarded: 0.2.0 + ipaddr.js: 1.9.1 + + proxy-from-env@1.0.0: {} + + proxy-from-env@1.1.0: {} + + ps-tree@1.2.0: + dependencies: + event-stream: 3.3.4 + + psl@1.9.0: {} + + pstree.remy@1.1.8: {} + + public-encrypt@4.0.3: + dependencies: + bn.js: 4.12.2 + browserify-rsa: 4.1.1 + create-hash: 1.2.0 + parse-asn1: 5.1.7 + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + pug-attrs@3.0.0: + dependencies: + constantinople: 4.0.1 + js-stringify: 1.0.2 + pug-runtime: 3.0.1 + + pug-code-gen@3.0.3: + dependencies: + constantinople: 4.0.1 + doctypes: 1.1.0 + js-stringify: 1.0.2 + pug-attrs: 3.0.0 + pug-error: 2.1.0 + pug-runtime: 3.0.1 + void-elements: 3.1.0 + with: 7.0.2 + + pug-error@2.1.0: {} + + pug-filters@4.0.0: + dependencies: + constantinople: 4.0.1 + jstransformer: 1.0.0 + pug-error: 2.1.0 + pug-walk: 2.0.0 + resolve: 1.22.10 + + pug-lexer@5.0.1: + dependencies: + character-parser: 2.2.0 + is-expression: 4.0.0 + pug-error: 2.1.0 + + pug-linker@4.0.0: + dependencies: + pug-error: 2.1.0 + pug-walk: 2.0.0 + + pug-load@3.0.0: + dependencies: + object-assign: 4.1.1 + pug-walk: 2.0.0 + + pug-parser@6.0.0: + dependencies: + pug-error: 2.1.0 + token-stream: 1.0.0 + + pug-runtime@3.0.1: {} + + pug-strip-comments@2.0.0: + dependencies: + pug-error: 2.1.0 + + pug-walk@2.0.0: {} + + pug@3.0.3: + dependencies: + pug-code-gen: 3.0.3 + pug-filters: 4.0.0 + pug-lexer: 5.0.1 + pug-linker: 4.0.0 + pug-load: 3.0.0 + pug-parser: 6.0.0 + pug-runtime: 3.0.1 + pug-strip-comments: 2.0.0 + + pump@3.0.0: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + + punycode@1.4.1: {} + + punycode@2.3.1: {} + + pure-rand@6.0.1: {} + + pyodide@0.28.0: + dependencies: + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - utf-8-validate + + python-struct@1.1.3: + dependencies: + long: 4.0.0 + + qrcode.vue@3.3.4(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + qs@6.11.0: + dependencies: + side-channel: 1.0.4 + + qs@6.11.2: + dependencies: + side-channel: 1.0.4 + + qs@6.14.0: + dependencies: + side-channel: 1.1.0 + + quansync@0.2.8: {} + + querystring-es3@0.2.1: {} + + querystringify@2.2.0: {} + + queue-lit@1.5.0: {} + + queue-microtask@1.2.3: {} + + quick-format-unescaped@4.0.4: {} + + quote-unquote@1.0.0: {} + + quoted-printable@1.0.1: + dependencies: + utf8: 2.1.2 + + ramda@0.26.1: {} + + random-bytes@1.0.0: {} + + randombytes@2.1.0: + dependencies: + safe-buffer: 5.2.1 + + randomfill@1.0.4: + dependencies: + randombytes: 2.1.0 + safe-buffer: 5.2.1 + + range-parser@1.2.1: {} + + raw-body@3.0.0: + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.6.3 + unpipe: 1.0.0 + + rc9@2.1.2: + dependencies: + defu: 6.1.4 + destr: 2.0.5 + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + + react-confetti@6.1.0(react@18.2.0): + dependencies: + react: 18.2.0 + tween-functions: 1.2.0 + + react-dom@18.2.0(react@18.2.0): + dependencies: + loose-envify: 1.4.0 + react: 18.2.0 + scheduler: 0.23.0 + + react-is@16.13.1: {} + + react-is@17.0.2: {} + + react-is@18.2.0: {} + + react-tabs@6.0.2(react@18.2.0): + dependencies: + clsx: 2.1.1 + prop-types: 15.8.1 + react: 18.2.0 + + react@18.2.0: + dependencies: + loose-envify: 1.4.0 + + read-cache@1.0.0: + dependencies: + pify: 2.3.0 + + read-package-json-fast@4.0.0: + dependencies: + json-parse-even-better-errors: 4.0.0 + npm-normalize-package-bin: 4.0.0 + + readable-stream@1.1.14: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 0.0.1 + string_decoder: 0.10.31 + + readable-stream@2.3.7: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + + readable-stream@3.6.0: + dependencies: + inherits: 2.0.4 + string_decoder: 1.3.0 + util-deprecate: 1.0.2 + + readable-stream@4.4.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-stream@4.5.2: + dependencies: + abort-controller: 3.0.0 + buffer: 6.0.3 + events: 3.3.0 + process: 0.11.10 + string_decoder: 1.3.0 + + readable-web-to-node-stream@3.0.2: + dependencies: + readable-stream: 3.6.0 + + readdir-glob@1.1.3: + dependencies: + minimatch: 5.1.6 + + readdirp@4.1.2: {} + + readline-sync@1.4.10: {} + + real-require@0.2.0: {} + + recast@0.22.0: + dependencies: + assert: 2.1.0 + ast-types: 0.15.2 + esprima: 4.0.1 + source-map: 0.6.1 + tslib: 2.8.1 + + recast@0.23.6: + dependencies: + ast-types: 0.16.1 + esprima: 4.0.1 + source-map: 0.6.1 + tiny-invariant: 1.3.3 + tslib: 2.8.1 + + rechoir@0.6.2: + dependencies: + resolve: 1.22.10 + + redent@3.0.0: + dependencies: + indent-string: 4.0.0 + strip-indent: 3.0.0 + + redis-errors@1.2.0: {} + + redis-parser@3.0.0: + dependencies: + redis-errors: 1.2.0 + + redis@4.6.12: + dependencies: + '@redis/bloom': 1.2.0(@redis/client@1.5.13) + '@redis/client': 1.5.13 + '@redis/graph': 1.1.1(@redis/client@1.5.13) + '@redis/json': 1.0.6(@redis/client@1.5.13) + '@redis/search': 1.1.6(@redis/client@1.5.13) + '@redis/time-series': 1.0.5(@redis/client@1.5.13) + + redis@4.6.14: + dependencies: + '@redis/bloom': 1.2.0(@redis/client@1.5.16) + '@redis/client': 1.5.16 + '@redis/graph': 1.1.1(@redis/client@1.5.16) + '@redis/json': 1.0.6(@redis/client@1.5.16) + '@redis/search': 1.1.6(@redis/client@1.5.16) + '@redis/time-series': 1.0.5(@redis/client@1.5.16) + + redoc@2.4.0(core-js@3.40.0)(encoding@0.1.13)(mobx@6.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(styled-components@6.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0)): + dependencies: + '@redocly/openapi-core': 1.28.5 + classnames: 2.5.1 + core-js: 3.40.0 + decko: 1.2.0 + dompurify: 3.1.7 + eventemitter3: 5.0.1 + json-pointer: 0.6.2 + lunr: 2.3.9 + mark.js: 8.11.1 + marked: 4.3.0 + mobx: 6.12.0 + mobx-react: 9.1.1(mobx@6.12.0)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + openapi-sampler: 1.5.1 + path-browserify: 1.0.1 + perfect-scrollbar: 1.5.5 + polished: 4.2.2 + prismjs: 1.29.0 + prop-types: 15.8.1 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + react-tabs: 6.0.2(react@18.2.0) + slugify: 1.4.7 + stickyfill: 1.1.1 + styled-components: 6.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0) + swagger2openapi: 7.0.8(encoding@0.1.13) + url-template: 2.0.8 + transitivePeerDependencies: + - encoding + - react-native + - supports-color + + reflect-metadata@0.2.2: {} + + reflect.getprototypeof@1.0.10: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + get-intrinsic: 1.3.0 + get-proto: 1.0.1 + which-builtin-type: 1.2.1 + + reftools@1.1.9: {} + + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + + regenerator-runtime@0.14.1: {} + + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.26.10 + + regexp-tree@0.1.27: {} + + regexp.escape@2.0.1: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-errors: 1.3.0 + for-each: 0.3.5 + safe-regex-test: 1.1.0 + + regexp.prototype.flags@1.5.3: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + set-function-name: 2.0.2 + + regexp.prototype.flags@1.5.4: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-errors: 1.3.0 + get-proto: 1.0.1 + gopd: 1.2.0 + set-function-name: 2.0.2 + + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 + + reinterval@1.1.0: {} + + reka-ui@2.2.1(typescript@5.9.2)(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@floating-ui/dom': 1.7.0 + '@floating-ui/vue': 1.1.6(vue@3.5.13(typescript@5.9.2)) + '@internationalized/date': 3.8.1 + '@internationalized/number': 3.6.2 + '@tanstack/vue-virtual': 3.13.9(vue@3.5.13(typescript@5.9.2)) + '@vueuse/core': 12.8.2(typescript@5.9.2) + '@vueuse/shared': 12.8.2(typescript@5.9.2) + aria-hidden: 1.2.6 + defu: 6.1.4 + ohash: 2.0.11 + vue: 3.5.13(typescript@5.9.2) + transitivePeerDependencies: + - '@vue/composition-api' + - typescript + + relateurl@0.2.7: {} + + remove-trailing-slash@0.1.1: {} + + replace-in-file@6.3.5: + dependencies: + chalk: 4.1.2 + glob: 7.2.3 + yargs: 17.6.0 + + replacestream@4.0.3: + dependencies: + escape-string-regexp: 1.0.5 + object-assign: 4.1.1 + readable-stream: 2.3.7 + + request-progress@3.0.0: + dependencies: + throttleit: 1.0.0 + + require-directory@2.1.1: {} + + require-from-string@2.0.2: {} + + require-in-the-middle@7.4.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + module-details-from-path: 1.0.3 + resolve: 1.22.10 + transitivePeerDependencies: + - supports-color + + requirejs-config-file@4.0.0: + dependencies: + esprima: 4.0.1 + stringify-object: 3.3.0 + + requirejs@2.3.7: {} + + requires-port@1.0.0: {} + + resolve-cwd@3.0.0: + dependencies: + resolve-from: 5.0.0 + + resolve-dependency-path@4.0.1: {} + + resolve-from@4.0.0: {} + + resolve-from@5.0.0: {} + + resolve-pkg-maps@1.0.0: {} + + resolve.exports@2.0.0: {} + + resolve@1.22.10: + dependencies: + is-core-module: 2.16.1 + path-parse: 1.0.7 + supports-preserve-symlinks-flag: 1.0.0 + + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + retry-axios@2.6.0(axios@1.11.0): + dependencies: + axios: 1.11.0(debug@4.3.6) + + retry-request@7.0.2(encoding@0.1.13): + dependencies: + '@types/request': 2.48.12 + extend: 3.0.2 + teeny-request: 9.0.0(encoding@0.1.13) + transitivePeerDependencies: + - encoding + - supports-color + + retry@0.12.0: {} + + retry@0.13.1: {} + + reusify@1.0.4: {} + + rfc2047@4.0.1: + dependencies: + iconv-lite: 0.4.5 + + rfdc@1.3.0: {} + + rhea@1.0.24: + dependencies: + debug: 3.2.7(supports-color@5.5.0) + transitivePeerDependencies: + - supports-color + + rimraf@2.6.3: + dependencies: + glob: 7.2.3 + + rimraf@3.0.2: + dependencies: + glob: 7.2.3 + optional: true + + rimraf@5.0.1: + dependencies: + glob: 10.3.3 + + rimraf@6.0.1: + dependencies: + glob: 11.0.1 + package-json-from-dist: 1.0.0 + + ripemd160@2.0.1: + dependencies: + hash-base: 2.0.2 + inherits: 2.0.4 + + ripemd160@2.0.2: + dependencies: + hash-base: 3.0.5 + inherits: 2.0.4 + + rndm@1.2.0: {} + + rollup@4.46.2: + dependencies: + '@types/estree': 1.0.8 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.46.2 + '@rollup/rollup-android-arm64': 4.46.2 + '@rollup/rollup-darwin-arm64': 4.46.2 + '@rollup/rollup-darwin-x64': 4.46.2 + '@rollup/rollup-freebsd-arm64': 4.46.2 + '@rollup/rollup-freebsd-x64': 4.46.2 + '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 + '@rollup/rollup-linux-arm-musleabihf': 4.46.2 + '@rollup/rollup-linux-arm64-gnu': 4.46.2 + '@rollup/rollup-linux-arm64-musl': 4.46.2 + '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 + '@rollup/rollup-linux-ppc64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-gnu': 4.46.2 + '@rollup/rollup-linux-riscv64-musl': 4.46.2 + '@rollup/rollup-linux-s390x-gnu': 4.46.2 + '@rollup/rollup-linux-x64-gnu': 4.46.2 + '@rollup/rollup-linux-x64-musl': 4.46.2 + '@rollup/rollup-win32-arm64-msvc': 4.46.2 + '@rollup/rollup-win32-ia32-msvc': 4.46.2 + '@rollup/rollup-win32-x64-msvc': 4.46.2 + fsevents: 2.3.3 + + route-recognizer@0.3.4: {} + + router@2.2.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + depd: 2.0.0 + is-promise: 4.0.0 + parseurl: 1.3.3 + path-to-regexp: 8.2.0 + transitivePeerDependencies: + - supports-color + + rrule@2.8.1: + dependencies: + tslib: 2.6.2 + + rrweb-cssom@0.6.0: {} + + rss-parser@3.13.0: + dependencies: + entities: 2.2.0 + xml2js: 0.5.0 + + run-async@2.4.1: {} + + run-parallel@1.2.0: + dependencies: + queue-microtask: 1.2.3 + + run-script-os@1.1.6: {} + + rusha@0.8.14: {} + + rw@1.3.3: {} + + rxjs@6.6.7: + dependencies: + tslib: 2.8.1 + + rxjs@7.8.1: + dependencies: + tslib: 2.8.1 + + safe-array-concat@1.1.2: + dependencies: + call-bind: 1.0.8 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-array-concat@1.1.3: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 + has-symbols: 1.1.0 + isarray: 2.0.5 + + safe-buffer@5.1.2: {} + + safe-buffer@5.2.1: {} + + safe-push-apply@1.0.0: + dependencies: + es-errors: 1.3.0 + isarray: 2.0.5 + + safe-regex-test@1.0.3: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-regex: 1.1.4 + + safe-regex-test@1.1.0: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-regex: 1.2.1 + + safe-stable-stringify@2.4.0: {} + + safer-buffer@2.1.2: {} + + samlify@2.10.0: + dependencies: + '@authenio/xml-encryption': 2.0.2 + '@xmldom/xmldom': 0.8.10 + camelcase: 6.3.0 + node-forge: 1.3.1 + node-rsa: 1.1.1 + pako: 1.0.11 + uuid: 8.3.2 + xml: 1.0.1 + xml-crypto: 6.1.2 + xml-escape: 1.1.0 + xpath: 0.0.32 + + sanitize-html@2.12.1: + dependencies: + deepmerge: 4.3.1 + escape-string-regexp: 4.0.0 + htmlparser2: 8.0.2 + is-plain-object: 5.0.0 + parse-srcset: 1.0.2 + postcss: 8.4.49 + + sass-lookup@6.1.0: + dependencies: + commander: 12.1.0 + enhanced-resolve: 5.18.2 + + sass@1.89.2: + dependencies: + chokidar: 4.0.3 + immutable: 5.1.3 + source-map-js: 1.2.1 + optionalDependencies: + '@parcel/watcher': 2.5.1 + + sax@1.2.4: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + sb-promise-queue@2.1.0: {} + + sb-scandir@3.1.0: + dependencies: + sb-promise-queue: 2.1.0 + + scheduler@0.23.0: + dependencies: + loose-envify: 1.4.0 + + seedrandom@3.0.5: {} + + selderee@0.11.0: + dependencies: + parseley: 0.12.1 + + semver@7.6.0: + dependencies: + lru-cache: 6.0.0 + + semver@7.7.2: {} + + send@1.2.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + encodeurl: 2.0.0 + escape-html: 1.0.3 + etag: 1.8.1 + fresh: 2.0.0 + http-errors: 2.0.0 + mime-types: 3.0.1 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: 1.2.1 + statuses: 2.0.1 + transitivePeerDependencies: + - supports-color + + sentence-case@3.0.4: + dependencies: + no-case: 3.0.4 + tslib: 2.8.1 + upper-case-first: 2.0.2 + + seq-queue@0.0.5: {} + + serialize-javascript@6.0.2: + dependencies: + randombytes: 2.1.0 + + serve-static@2.2.0: + dependencies: + encodeurl: 2.0.0 + escape-html: 1.0.3 + parseurl: 1.3.3 + send: 1.2.0 + transitivePeerDependencies: + - supports-color + + set-blocking@2.0.0: + optional: true + + set-function-length@1.2.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + function-bind: 1.1.2 + get-intrinsic: 1.3.0 + gopd: 1.2.0 + has-property-descriptors: 1.0.2 + + set-function-name@2.0.2: + dependencies: + define-data-property: 1.1.4 + es-errors: 1.3.0 + functions-have-names: 1.2.3 + has-property-descriptors: 1.0.2 + + set-proto@1.0.0: + dependencies: + dunder-proto: 1.0.1 + es-errors: 1.3.0 + es-object-atoms: 1.1.1 + + setimmediate@1.0.5: {} + + setprototypeof@1.2.0: {} + + sha.js@2.4.12: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.1 + + shallowequal@1.1.0: {} + + sharp@0.33.5: + dependencies: + color: 4.2.3 + detect-libc: 2.0.4 + semver: 7.7.2 + optionalDependencies: + '@img/sharp-darwin-arm64': 0.33.5 + '@img/sharp-darwin-x64': 0.33.5 + '@img/sharp-libvips-darwin-arm64': 1.0.4 + '@img/sharp-libvips-darwin-x64': 1.0.4 + '@img/sharp-libvips-linux-arm': 1.0.5 + '@img/sharp-libvips-linux-arm64': 1.0.4 + '@img/sharp-libvips-linux-s390x': 1.0.4 + '@img/sharp-libvips-linux-x64': 1.0.4 + '@img/sharp-libvips-linuxmusl-arm64': 1.0.4 + '@img/sharp-libvips-linuxmusl-x64': 1.0.4 + '@img/sharp-linux-arm': 0.33.5 + '@img/sharp-linux-arm64': 0.33.5 + '@img/sharp-linux-s390x': 0.33.5 + '@img/sharp-linux-x64': 0.33.5 + '@img/sharp-linuxmusl-arm64': 0.33.5 + '@img/sharp-linuxmusl-x64': 0.33.5 + '@img/sharp-wasm32': 0.33.5 + '@img/sharp-win32-ia32': 0.33.5 + '@img/sharp-win32-x64': 0.33.5 + + shebang-command@1.2.0: + dependencies: + shebang-regex: 1.0.0 + + shebang-command@2.0.0: + dependencies: + shebang-regex: 3.0.0 + + shebang-regex@1.0.0: {} + + shebang-regex@3.0.0: {} + + shell-escape@0.2.0: {} + + shell-quote@1.8.1: {} + + shelljs@0.8.5: + dependencies: + glob: 7.2.3 + interpret: 1.4.0 + rechoir: 0.6.2 + + shimmer@1.2.1: {} + + should-equal@2.0.0: + dependencies: + should-type: 1.4.0 + + should-format@3.0.3: + dependencies: + should-type: 1.4.0 + should-type-adaptors: 1.1.0 + + should-type-adaptors@1.1.0: + dependencies: + should-type: 1.4.0 + should-util: 1.0.1 + + should-type@1.4.0: {} + + should-util@1.0.1: {} + + should@13.2.3: + dependencies: + should-equal: 2.0.0 + should-format: 3.0.3 + should-type: 1.4.0 + should-type-adaptors: 1.1.0 + should-util: 1.0.1 + + showdown@2.1.0: + dependencies: + commander: 9.4.1 + + side-channel-list@1.0.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + + side-channel-map@1.0.1: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + + side-channel-weakmap@1.0.2: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + get-intrinsic: 1.3.0 + object-inspect: 1.13.4 + side-channel-map: 1.0.1 + + side-channel@1.0.4: + dependencies: + call-bind: 1.0.7 + get-intrinsic: 1.3.0 + object-inspect: 1.13.1 + + side-channel@1.1.0: + dependencies: + es-errors: 1.3.0 + object-inspect: 1.13.4 + side-channel-list: 1.0.0 + side-channel-map: 1.0.1 + side-channel-weakmap: 1.0.2 + + siginfo@2.0.0: {} + + signal-exit@3.0.7: {} + + signal-exit@4.1.0: {} + + simple-bin-help@1.8.0: {} + + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + + simple-git@3.17.0: + dependencies: + '@kwsites/file-exists': 1.1.1 + '@kwsites/promise-deferred': 1.1.1 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + + simple-lru-cache@0.0.2: {} + + simple-swizzle@0.2.2: + dependencies: + is-arrayish: 0.3.2 + + simple-update-notifier@2.0.0: + dependencies: + semver: 7.7.2 + + simple-wcswidth@1.0.1: {} + + simple-websocket@9.1.0: + dependencies: + debug: 4.4.1(supports-color@8.1.1) + queue-microtask: 1.2.3 + randombytes: 2.1.0 + readable-stream: 3.6.0 + ws: 8.18.3 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + sisteransi@1.0.5: {} + + slash@3.0.0: {} + + slice-ansi@3.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + slick@1.12.2: {} + + slugify@1.4.7: {} + + smart-buffer@4.2.0: + optional: true + + snake-case@3.0.4: + dependencies: + dot-case: 3.0.4 + tslib: 2.8.1 + + snowflake-sdk@2.1.0(asn1.js@5.4.1)(encoding@0.1.13): + dependencies: + '@aws-sdk/client-s3': 3.808.0 + '@azure/storage-blob': 12.26.0 + '@google-cloud/storage': 7.12.1(encoding@0.1.13) + '@smithy/node-http-handler': 4.0.4 + '@techteamer/ocsp': 1.0.1 + asn1.js: 5.4.1 + asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1) + asn1.js-rfc5280: 3.0.0 + axios: 1.11.0(debug@4.3.6) + big-integer: 1.6.52 + bignumber.js: 9.1.2 + binascii: 0.0.2 + bn.js: 5.2.2 + browser-request: 0.3.3 + expand-tilde: 2.0.2 + fast-xml-parser: 4.4.1 + fastest-levenshtein: 1.0.16 + generic-pool: 3.9.0 + glob: 10.4.5 + https-proxy-agent: 7.0.6 + jsonwebtoken: 9.0.2 + mime-types: 2.1.35 + mkdirp: 1.0.4 + moment: 2.29.4 + moment-timezone: 0.5.48 + oauth4webapi: 3.5.1 + open: 7.4.2 + python-struct: 1.1.3 + simple-lru-cache: 0.0.2 + toml: 3.0.0 + uuid: 8.3.2 + winston: 3.14.2 + wiremock-rest-client: 1.11.0(encoding@0.1.13) + transitivePeerDependencies: + - aws-crt + - debug + - encoding + - supports-color + + socks-proxy-agent@6.2.1: + dependencies: + agent-base: 6.0.2 + debug: 4.4.1(supports-color@8.1.1) + socks: 2.8.3 + transitivePeerDependencies: + - supports-color + optional: true + + socks@2.8.3: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + optional: true + + sonic-boom@4.2.0: + dependencies: + atomic-sleep: 1.0.0 + + sortablejs@1.14.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.13: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + + source-map@0.6.1: {} + + source-map@0.8.0-beta.0: + dependencies: + whatwg-url: 7.1.0 + + sparse-bitfield@3.0.3: + dependencies: + memory-pager: 1.5.0 + + spawn-command@0.0.2: {} + + spex@3.3.0: {} + + split-ca@1.0.1: {} + + split2@4.2.0: {} + + split@0.3.3: + dependencies: + through: 2.3.8 + + sprintf-js@1.0.3: {} + + sprintf-js@1.1.2: {} + + sprintf-js@1.1.3: {} + + sqlite3@5.1.7: + dependencies: + bindings: 1.5.0 + node-addon-api: 7.1.0 + prebuild-install: 7.1.3 + tar: 6.2.1 + optionalDependencies: + node-gyp: 8.4.1 + transitivePeerDependencies: + - bluebird + - supports-color + + sqlstring@2.3.3: {} + + ssh-remote-port-forward@1.0.4: + dependencies: + '@types/ssh2': 0.5.52 + ssh2: 1.15.0 + + ssh2-sftp-client@12.0.1: + dependencies: + concat-stream: 2.0.0 + ssh2: 1.16.0 + + ssh2@1.15.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.20.0 + + ssh2@1.16.0: + dependencies: + asn1: 0.2.6 + bcrypt-pbkdf: 1.0.2 + optionalDependencies: + cpu-features: 0.0.10 + nan: 2.20.0 + + sshpk@1.18.0: + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + + ssri@8.0.1: + dependencies: + minipass: 3.3.6 + optional: true + + stable-hash-x@0.1.1: {} + + stack-trace@0.0.10: {} + + stack-utils@2.0.6: + dependencies: + escape-string-regexp: 2.0.0 + + stackback@0.0.2: {} + + standard-as-callback@2.1.0: {} + + start-server-and-test@2.0.10: + dependencies: + arg: 5.0.2 + bluebird: 3.7.2 + check-more-types: 2.24.0 + debug: 4.4.0 + execa: 5.1.1 + lazy-ass: 1.6.0 + ps-tree: 1.2.0 + wait-on: 8.0.2(debug@4.4.0) + transitivePeerDependencies: + - supports-color + + static-eval@2.0.2: + dependencies: + escodegen: 1.14.3 + + statuses@2.0.1: {} + + std-env@3.9.0: {} + + stickyfill@1.1.1: {} + + stop-iteration-iterator@1.1.0: + dependencies: + es-errors: 1.3.0 + internal-slot: 1.1.0 + + stoppable@1.1.0: {} + + storybook@8.6.4(prettier@3.6.2): + dependencies: + '@storybook/core': 8.6.4(prettier@3.6.2)(storybook@8.6.4(prettier@3.6.2)) + optionalDependencies: + prettier: 3.6.2 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + stream-browserify@3.0.0: + dependencies: + inherits: 2.0.4 + readable-stream: 3.6.0 + + stream-combiner@0.0.4: + dependencies: + duplexer: 0.1.2 + + stream-events@1.0.5: + dependencies: + stubs: 3.0.0 + + stream-http@3.2.0: + dependencies: + builtin-status-codes: 3.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + xtend: 4.0.2 + + stream-shift@1.0.3: {} + + stream-to-array@2.3.0: + dependencies: + any-promise: 1.3.0 + + streamsearch@1.1.0: {} + + streamx@2.22.1: + dependencies: + fast-fifo: 1.3.2 + text-decoder: 1.2.3 + optionalDependencies: + bare-events: 2.5.4 + + strict-event-emitter-types@2.0.0: {} + + strict-event-emitter@0.5.1: {} + + string-argv@0.3.1: {} + + string-length@4.0.2: + dependencies: + char-regex: 1.0.2 + strip-ansi: 6.0.1 + + string-width@4.2.3: + dependencies: + emoji-regex: 8.0.0 + is-fullwidth-code-point: 3.0.0 + strip-ansi: 6.0.1 + + string-width@5.1.2: + dependencies: + eastasianwidth: 0.2.0 + emoji-regex: 9.2.2 + strip-ansi: 7.1.0 + + string.prototype.trim@1.2.10: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-data-property: 1.1.4 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + has-property-descriptors: 1.0.2 + + string.prototype.trim@1.2.9: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-abstract: 1.24.0 + es-object-atoms: 1.1.1 + + string.prototype.trimend@1.0.9: + dependencies: + call-bind: 1.0.8 + call-bound: 1.0.4 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string.prototype.trimstart@1.0.8: + dependencies: + call-bind: 1.0.8 + define-properties: 1.2.1 + es-object-atoms: 1.1.1 + + string_decoder@0.10.31: {} + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + + string_decoder@1.3.0: + dependencies: + safe-buffer: 5.2.1 + + stringify-object@3.3.0: + dependencies: + get-own-enumerable-property-symbols: 3.0.2 + is-obj: 1.0.1 + is-regexp: 1.0.0 + + strip-ansi@6.0.1: + dependencies: + ansi-regex: 5.0.1 + + strip-ansi@7.1.0: + dependencies: + ansi-regex: 6.0.1 + + strip-bom@3.0.0: {} + + strip-bom@4.0.0: {} + + strip-eof@1.0.0: {} + + strip-final-newline@2.0.0: {} + + strip-final-newline@4.0.0: {} + + strip-indent@3.0.0: + dependencies: + min-indent: 1.0.1 + + strip-indent@4.0.0: + dependencies: + min-indent: 1.0.1 + + strip-json-comments@2.0.1: {} + + strip-json-comments@3.1.1: {} + + strnum@1.0.5: {} + + strnum@2.1.0: {} + + strtok3@6.3.0: + dependencies: + '@tokenizer/token': 0.3.0 + peek-readable: 4.1.0 + + stubs@3.0.0: {} + + style-mod@4.1.0: {} + + styled-components@6.1.8(react-dom@18.2.0(react@18.2.0))(react@18.2.0): + dependencies: + '@emotion/is-prop-valid': 1.2.1 + '@emotion/unitless': 0.8.0 + '@types/stylis': 4.2.0 + css-to-react-native: 3.2.0 + csstype: 3.1.2 + postcss: 8.4.31 + react: 18.2.0 + react-dom: 18.2.0(react@18.2.0) + shallowequal: 1.1.0 + stylis: 4.3.1 + tslib: 2.8.1 + + stylelint-config-recommended-scss@15.0.1(postcss@8.5.6)(stylelint@16.23.0(typescript@5.9.2)): + dependencies: + postcss-scss: 4.0.9(postcss@8.5.6) + stylelint: 16.23.0(typescript@5.9.2) + stylelint-config-recommended: 16.0.0(stylelint@16.23.0(typescript@5.9.2)) + stylelint-scss: 6.12.1(stylelint@16.23.0(typescript@5.9.2)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-recommended@16.0.0(stylelint@16.23.0(typescript@5.9.2)): + dependencies: + stylelint: 16.23.0(typescript@5.9.2) + + stylelint-config-standard-scss@15.0.1(postcss@8.5.6)(stylelint@16.23.0(typescript@5.9.2)): + dependencies: + stylelint: 16.23.0(typescript@5.9.2) + stylelint-config-recommended-scss: 15.0.1(postcss@8.5.6)(stylelint@16.23.0(typescript@5.9.2)) + stylelint-config-standard: 38.0.0(stylelint@16.23.0(typescript@5.9.2)) + optionalDependencies: + postcss: 8.5.6 + + stylelint-config-standard@38.0.0(stylelint@16.23.0(typescript@5.9.2)): + dependencies: + stylelint: 16.23.0(typescript@5.9.2) + stylelint-config-recommended: 16.0.0(stylelint@16.23.0(typescript@5.9.2)) + + stylelint-scss@6.12.1(stylelint@16.23.0(typescript@5.9.2)): + dependencies: + css-tree: 3.1.0 + is-plain-object: 5.0.0 + known-css-properties: 0.36.0 + mdn-data: 2.23.0 + postcss-media-query-parser: 0.2.3 + postcss-resolve-nested-selector: 0.1.6 + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + stylelint: 16.23.0(typescript@5.9.2) + + stylelint@16.23.0(typescript@5.9.2): + dependencies: + '@csstools/css-parser-algorithms': 3.0.5(@csstools/css-tokenizer@3.0.4) + '@csstools/css-tokenizer': 3.0.4 + '@csstools/media-query-list-parser': 4.0.3(@csstools/css-parser-algorithms@3.0.5(@csstools/css-tokenizer@3.0.4))(@csstools/css-tokenizer@3.0.4) + '@csstools/selector-specificity': 5.0.0(postcss-selector-parser@7.1.0) + '@dual-bundle/import-meta-resolve': 4.1.0 + balanced-match: 2.0.0 + colord: 2.9.3 + cosmiconfig: 9.0.0(typescript@5.9.2) + css-functions-list: 3.2.3 + css-tree: 3.1.0 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + fastest-levenshtein: 1.0.16 + file-entry-cache: 10.1.3 + global-modules: 2.0.0 + globby: 11.1.0 + globjoin: 0.1.4 + html-tags: 3.3.1 + ignore: 7.0.5 + imurmurhash: 0.1.4 + is-plain-object: 5.0.0 + known-css-properties: 0.37.0 + mathml-tag-names: 2.1.3 + meow: 13.2.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-resolve-nested-selector: 0.1.6 + postcss-safe-parser: 7.0.1(postcss@8.5.6) + postcss-selector-parser: 7.1.0 + postcss-value-parser: 4.2.0 + resolve-from: 5.0.0 + string-width: 4.2.3 + supports-hyperlinks: 3.2.0 + svg-tags: 1.0.0 + table: 6.9.0 + write-file-atomic: 5.0.1 + transitivePeerDependencies: + - supports-color + - typescript + + stylis@4.3.1: {} + + stylus-lookup@6.1.0: + dependencies: + commander: 12.1.0 + + sucrase@3.35.0: + dependencies: + '@jridgewell/gen-mapping': 0.3.13 + commander: 4.1.1 + glob: 10.4.5 + lines-and-columns: 1.2.4 + mz: 2.7.0 + pirates: 4.0.7 + ts-interface-checker: 0.1.13 + + superagent@10.2.1: + dependencies: + component-emitter: 1.3.0 + cookiejar: 2.1.4 + debug: 4.4.1(supports-color@8.1.1) + fast-safe-stringify: 2.1.1 + form-data: 4.0.4 + formidable: 3.5.4 + methods: 1.1.2 + mime: 2.6.0 + qs: 6.11.0 + transitivePeerDependencies: + - supports-color + + supertest@7.1.1: + dependencies: + methods: 1.1.2 + superagent: 10.2.1 + transitivePeerDependencies: + - supports-color + + supports-color@5.5.0: + dependencies: + has-flag: 3.0.0 + + supports-color@7.2.0: + dependencies: + has-flag: 4.0.0 + + supports-color@8.1.1: + dependencies: + has-flag: 4.0.0 + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + + supports-preserve-symlinks-flag@1.0.0: {} + + svg-tags@1.0.0: {} + + svgo@3.3.2: + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.1.1 + + swagger-ui-dist@5.11.0: {} + + swagger-ui-express@5.0.1(express@5.1.0): + dependencies: + express: 5.1.0 + swagger-ui-dist: 5.11.0 + + swagger2openapi@7.0.8(encoding@0.1.13): + dependencies: + call-me-maybe: 1.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + node-fetch-h2: 2.3.0 + node-readfiles: 0.2.0 + oas-kit-common: 1.0.8 + oas-resolver: 2.5.6 + oas-schema-walker: 1.1.5 + oas-validator: 5.0.8 + reftools: 1.1.9 + yaml: 1.10.2 + yargs: 17.7.2 + transitivePeerDependencies: + - encoding + + symbol-tree@3.2.4: {} + + syslog-client@1.1.1: {} + + systemjs@6.15.1: {} + + table@6.9.0: + dependencies: + ajv: 8.17.1 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + tailwindcss@3.4.3(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)): + dependencies: + '@alloc/quick-lru': 5.2.0 + arg: 5.0.2 + chokidar: 4.0.3 + didyoumean: 1.2.2 + dlv: 1.1.3 + fast-glob: 3.3.3 + glob-parent: 6.0.2 + is-glob: 4.0.3 + jiti: 1.21.7 + lilconfig: 2.1.0 + micromatch: 4.0.8 + normalize-path: 3.0.0 + object-hash: 3.0.0 + picocolors: 1.1.1 + postcss: 8.5.6 + postcss-import: 15.1.0(postcss@8.5.6) + postcss-js: 4.0.1(postcss@8.5.6) + postcss-load-config: 4.0.2(postcss@8.5.6)(ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2)) + postcss-nested: 6.0.1(postcss@8.5.6) + postcss-selector-parser: 6.1.2 + resolve: 1.22.10 + sucrase: 3.35.0 + transitivePeerDependencies: + - ts-node + + tapable@2.2.2: {} + + tar-fs@2.1.3: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.0 + tar-stream: 2.2.0 + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.4 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.0 + + tar-stream@3.1.7: + dependencies: + b4a: 1.6.7 + fast-fifo: 1.3.2 + streamx: 2.22.1 + + tar@6.2.1: + dependencies: + chownr: 2.0.0 + fs-minipass: 2.1.0 + minipass: 5.0.0 + minizlib: 2.1.2 + mkdirp: 1.0.4 + yallist: 4.0.0 + + tarn@3.0.2: {} + + tdigest@0.1.2: + dependencies: + bintrees: 1.0.2 + + tedious@16.7.1: + dependencies: + '@azure/identity': 4.3.0 + '@azure/keyvault-keys': 4.6.0 + '@js-joda/core': 5.6.1 + bl: 6.0.12 + es-aggregate-error: 1.0.12 + iconv-lite: 0.6.3 + js-md4: 0.3.2 + jsbi: 4.3.0 + native-duplexpair: 1.0.0 + node-abort-controller: 3.1.1 + sprintf-js: 1.1.3 + transitivePeerDependencies: + - supports-color + + teeny-request@9.0.0(encoding@0.1.13): + dependencies: + http-proxy-agent: 5.0.0 + https-proxy-agent: 5.0.1 + node-fetch: 2.7.0(encoding@0.1.13) + stream-events: 1.0.5 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + - supports-color + + temp@0.9.4: + dependencies: + mkdirp: 0.5.6 + rimraf: 2.6.3 + + terser@5.16.1: + dependencies: + '@jridgewell/source-map': 0.3.11 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + test-exclude@7.0.1: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 10.4.5 + minimatch: 9.0.5 + + testcontainers@11.0.3: + dependencies: + '@balena/dockerignore': 1.0.2 + '@types/dockerode': 3.3.42 + archiver: 7.0.1 + async-lock: 1.4.1 + byline: 5.0.0 + debug: 4.4.1(supports-color@8.1.1) + docker-compose: 1.2.0 + dockerode: 4.0.7 + get-port: 7.1.0 + proper-lockfile: 4.1.2 + properties-reader: 2.3.0 + ssh-remote-port-forward: 1.0.4 + tar-fs: 2.1.3 + tmp: 0.2.4 + undici: 7.10.0 + transitivePeerDependencies: + - supports-color + + text-decoder@1.2.3: + dependencies: + b4a: 1.6.7 + + text-hex@1.0.0: {} + + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + + thirty-two@1.0.2: {} + + thread-stream@3.1.0: + dependencies: + real-require: 0.2.0 + + throttleit@1.0.0: {} + + through@2.3.8: {} + + timeago.js@4.0.2: {} + + timers-browserify@2.0.12: + dependencies: + setimmediate: 1.0.5 + + tiny-invariant@1.3.3: {} + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinyglobby@0.2.14: + dependencies: + fdir: 6.4.6(picomatch@4.0.2) + picomatch: 4.0.2 + + tinypool@1.1.1: {} + + tinyrainbow@1.2.0: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + + title-case@3.0.3: + dependencies: + tslib: 2.6.2 + + tlds@1.248.0: {} + + tldts-core@6.1.86: {} + + tldts@6.1.86: + dependencies: + tldts-core: 6.1.86 + + tmp-promise@3.0.3: + dependencies: + tmp: 0.2.4 + + tmp@0.2.4: {} + + tmpl@1.0.5: {} + + to-buffer@1.2.1: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + + to-regex-range@5.0.1: + dependencies: + is-number: 7.0.0 + + toidentifier@1.0.1: {} + + token-stream@1.0.0: {} + + token-types@4.2.1: + dependencies: + '@tokenizer/token': 0.3.0 + ieee754: 1.2.1 + + toml@3.0.0: {} + + toposort@2.0.2: {} + + touch@3.1.0: + dependencies: + nopt: 1.0.10 + + tough-cookie@4.1.3: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tough-cookie@4.1.4: + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + + tough-cookie@5.1.2: + dependencies: + tldts: 6.1.86 + + tr46@0.0.3: {} + + tr46@1.0.1: + dependencies: + punycode: 2.3.1 + + tr46@3.0.0: + dependencies: + punycode: 2.3.1 + + tr46@4.1.1: + dependencies: + punycode: 2.3.1 + + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + + transliteration@2.3.5: + dependencies: + yargs: 17.7.2 + + tree-kill@1.2.2: {} + + tree-sitter-bash@0.23.3(tree-sitter@0.21.1): + dependencies: + node-addon-api: 8.3.0 + node-gyp-build: 4.8.4 + optionalDependencies: + tree-sitter: 0.21.1 + + tree-sitter@0.21.1: + dependencies: + node-addon-api: 8.3.0 + node-gyp-build: 4.8.4 + + triple-beam@1.3.0: {} + + ts-api-utils@1.4.3(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-api-utils@2.1.0(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-dedent@2.2.0: {} + + ts-error@1.0.6: {} + + ts-essentials@10.0.2(typescript@5.9.2): + optionalDependencies: + typescript: 5.9.2 + + ts-essentials@7.0.3(typescript@5.9.2): + dependencies: + typescript: 5.9.2 + + ts-graphviz@2.1.6: + dependencies: + '@ts-graphviz/adapter': 2.0.6 + '@ts-graphviz/ast': 2.0.7 + '@ts-graphviz/common': 2.1.5 + '@ts-graphviz/core': 2.0.7 + + ts-ics@1.2.2(date-fns@2.30.0)(lodash@4.17.21)(zod@3.25.67): + dependencies: + date-fns: 2.30.0 + date-fns-tz: 2.0.0(date-fns@2.30.0) + lodash: 4.17.21 + zod: 3.25.67 + + ts-interface-checker@0.1.13: {} + + ts-jest@29.1.1(@babel/core@7.26.10)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.26.10))(jest@29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)))(typescript@5.9.2): + dependencies: + bs-logger: 0.2.6 + fast-json-stable-stringify: 2.1.0 + jest: 29.6.2(@types/node@20.17.57)(ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2)) + jest-util: 29.5.0 + json5: 2.2.3 + lodash.memoize: 4.1.2 + make-error: 1.3.6 + semver: 7.7.2 + typescript: 5.9.2 + yargs-parser: 21.1.1 + optionalDependencies: + '@babel/core': 7.26.10 + '@jest/types': 29.6.1 + babel-jest: 29.6.2(@babel/core@7.26.10) + + ts-map@1.0.3: {} + + ts-morph@26.0.0: + dependencies: + '@ts-morph/common': 0.27.0 + code-block-writer: 13.0.3 + + ts-node@10.9.2(@types/node@20.17.57)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.17.57 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + + ts-node@10.9.2(@types/node@20.19.10)(typescript@5.9.2): + dependencies: + '@cspotcode/source-map-support': 0.8.1 + '@tsconfig/node10': 1.0.11 + '@tsconfig/node12': 1.0.11 + '@tsconfig/node14': 1.0.3 + '@tsconfig/node16': 1.0.4 + '@types/node': 20.19.10 + acorn: 8.14.0 + acorn-walk: 8.3.4 + arg: 4.1.3 + create-require: 1.1.1 + diff: 4.0.2 + make-error: 1.3.6 + typescript: 5.9.2 + v8-compile-cache-lib: 3.0.1 + yn: 3.1.1 + optional: true + + ts-pattern@5.8.0: {} + + ts-toolbelt@9.6.0: {} + + ts-type@3.0.1(ts-toolbelt@9.6.0): + dependencies: + '@types/node': 20.19.1 + ts-toolbelt: 9.6.0 + tslib: 2.8.1 + typedarray-dts: 1.0.0 + + tsc-alias@1.8.10: + dependencies: + chokidar: 4.0.3 + commander: 9.4.1 + globby: 11.1.0 + mylas: 2.1.13 + normalize-path: 3.0.0 + plimit-lit: 1.4.1 + + tsc-watch@6.2.0(typescript@5.9.2): + dependencies: + cross-spawn: 7.0.6 + node-cleanup: 2.1.2 + ps-tree: 1.2.0 + string-argv: 0.3.1 + typescript: 5.9.2 + + tsconfig-paths@4.2.0: + dependencies: + json5: 2.2.3 + minimist: 1.2.8 + strip-bom: 3.0.0 + + tslib@2.6.2: {} + + tslib@2.8.1: {} + + tsscmp@1.0.6: {} + + tsup@8.5.0(@microsoft/api-extractor@7.52.1(@types/node@20.19.10))(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3)(typescript@5.9.2): + dependencies: + bundle-require: 5.1.0(esbuild@0.25.9) + cac: 6.7.14 + chokidar: 4.0.3 + consola: 3.4.2 + debug: 4.4.1(supports-color@8.1.1) + esbuild: 0.25.9 + fix-dts-default-cjs-exports: 1.0.1 + joycon: 3.1.1 + picocolors: 1.1.1 + postcss-load-config: 6.0.1(jiti@1.21.7)(postcss@8.5.6)(tsx@4.19.3) + resolve-from: 5.0.0 + rollup: 4.46.2 + source-map: 0.8.0-beta.0 + sucrase: 3.35.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tree-kill: 1.2.2 + optionalDependencies: + '@microsoft/api-extractor': 7.52.1(@types/node@20.19.10) + postcss: 8.5.6 + typescript: 5.9.2 + transitivePeerDependencies: + - jiti + - supports-color + - tsx + - yaml + + tsx@4.19.3: + dependencies: + esbuild: 0.25.9 + get-tsconfig: 4.10.1 + optionalDependencies: + fsevents: 2.3.3 + + tty-browserify@0.0.1: {} + + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + + turbo-darwin-64@2.5.4: + optional: true + + turbo-darwin-arm64@2.5.4: + optional: true + + turbo-linux-64@2.5.4: + optional: true + + turbo-linux-arm64@2.5.4: + optional: true + + turbo-windows-64@2.5.4: + optional: true + + turbo-windows-arm64@2.5.4: + optional: true + + turbo@2.5.4: + optionalDependencies: + turbo-darwin-64: 2.5.4 + turbo-darwin-arm64: 2.5.4 + turbo-linux-64: 2.5.4 + turbo-linux-arm64: 2.5.4 + turbo-windows-64: 2.5.4 + turbo-windows-arm64: 2.5.4 + + tween-functions@1.2.0: {} + + tweetnacl-util@0.15.1: {} + + tweetnacl@0.14.5: {} + + tweetnacl@1.0.3: {} + + type-check@0.3.2: + dependencies: + prelude-ls: 1.1.2 + + type-check@0.4.0: + dependencies: + prelude-ls: 1.2.1 + + type-detect@4.0.8: {} + + type-fest@0.20.2: {} + + type-fest@0.21.3: {} + + type-fest@2.19.0: {} + + type-fest@4.26.1: {} + + type-is@1.6.18: + dependencies: + media-typer: 0.3.0 + mime-types: 2.1.35 + + type-is@2.0.1: + dependencies: + content-type: 1.0.5 + media-typer: 1.1.0 + mime-types: 3.0.1 + + type-of-is@3.5.1: {} + + typed-array-buffer@1.0.2: + dependencies: + call-bind: 1.0.8 + es-errors: 1.3.0 + is-typed-array: 1.1.13 + + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-array-byte-length@1.0.1: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-length@1.0.3: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + + typed-array-byte-offset@1.0.2: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + + typed-array-byte-offset@1.0.4: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.2.0 + is-typed-array: 1.1.15 + reflect.getprototypeof: 1.0.10 + + typed-array-length@1.0.6: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-proto: 1.0.3 + is-typed-array: 1.1.13 + possible-typed-array-names: 1.0.0 + + typed-array-length@1.0.7: + dependencies: + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + is-typed-array: 1.1.15 + possible-typed-array-names: 1.1.0 + reflect.getprototypeof: 1.0.10 + + typedarray-dts@1.0.0: {} + + typedarray@0.0.6: {} + + typescript-eslint@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.35.0(@typescript-eslint/parser@8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2))(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/parser': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + '@typescript-eslint/utils': 8.35.0(eslint@9.29.0(jiti@1.21.7))(typescript@5.9.2) + eslint: 9.29.0(jiti@1.21.7) + typescript: 5.9.2 + transitivePeerDependencies: + - supports-color + + typescript@5.9.2: {} + + uc.micro@1.0.6: {} + + uc.micro@2.1.0: {} + + ufo@1.6.1: {} + + uglify-js@3.17.4: {} + + uid-safe@2.1.5: + dependencies: + random-bytes: 1.0.0 + + unbox-primitive@1.0.2: + dependencies: + call-bind: 1.0.8 + has-bigints: 1.0.2 + has-symbols: 1.1.0 + which-boxed-primitive: 1.0.2 + + unbox-primitive@1.1.0: + dependencies: + call-bound: 1.0.4 + has-bigints: 1.1.0 + has-symbols: 1.1.0 + which-boxed-primitive: 1.1.1 + + undefsafe@2.0.5: {} + + underscore@1.12.1: {} + + underscore@1.13.6: {} + + undici-types@6.19.8: {} + + undici-types@6.21.0: {} + + undici@6.21.3: {} + + undici@7.10.0: {} + + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + + unicorn-magic@0.3.0: {} + + unique-filename@1.1.1: + dependencies: + unique-slug: 2.0.2 + optional: true + + unique-slug@2.0.2: + dependencies: + imurmurhash: 0.1.4 + optional: true + + universalify@0.2.0: {} + + universalify@2.0.0: {} + + unpipe@1.0.0: {} + + unplugin-icons@0.19.0(@vue/compiler-sfc@3.5.13): + dependencies: + '@antfu/install-pkg': 0.3.3 + '@antfu/utils': 0.7.10 + '@iconify/utils': 2.1.25 + debug: 4.4.1(supports-color@8.1.1) + kolorist: 1.8.0 + local-pkg: 0.5.0 + unplugin: 1.11.0 + optionalDependencies: + '@vue/compiler-sfc': 3.5.13 + transitivePeerDependencies: + - supports-color + + unplugin-vue-components@0.27.3(@babel/parser@7.27.5)(rollup@4.46.2)(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@antfu/utils': 0.7.10 + '@rollup/pluginutils': 5.1.4(rollup@4.46.2) + chokidar: 4.0.3 + debug: 4.4.1(supports-color@8.1.1) + fast-glob: 3.3.3 + local-pkg: 0.5.0 + magic-string: 0.30.17 + minimatch: 9.0.5 + mlly: 1.7.4 + unplugin: 1.11.0 + vue: 3.5.13(typescript@5.9.2) + optionalDependencies: + '@babel/parser': 7.27.5 + transitivePeerDependencies: + - rollup + - supports-color + + unplugin@1.11.0: + dependencies: + acorn: 8.14.0 + chokidar: 4.0.3 + webpack-sources: 3.2.3 + webpack-virtual-modules: 0.6.1 + + unrs-resolver@1.9.2: + dependencies: + napi-postinstall: 0.2.4 + optionalDependencies: + '@unrs/resolver-binding-android-arm-eabi': 1.9.2 + '@unrs/resolver-binding-android-arm64': 1.9.2 + '@unrs/resolver-binding-darwin-arm64': 1.9.2 + '@unrs/resolver-binding-darwin-x64': 1.9.2 + '@unrs/resolver-binding-freebsd-x64': 1.9.2 + '@unrs/resolver-binding-linux-arm-gnueabihf': 1.9.2 + '@unrs/resolver-binding-linux-arm-musleabihf': 1.9.2 + '@unrs/resolver-binding-linux-arm64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-arm64-musl': 1.9.2 + '@unrs/resolver-binding-linux-ppc64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-riscv64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-riscv64-musl': 1.9.2 + '@unrs/resolver-binding-linux-s390x-gnu': 1.9.2 + '@unrs/resolver-binding-linux-x64-gnu': 1.9.2 + '@unrs/resolver-binding-linux-x64-musl': 1.9.2 + '@unrs/resolver-binding-wasm32-wasi': 1.9.2 + '@unrs/resolver-binding-win32-arm64-msvc': 1.9.2 + '@unrs/resolver-binding-win32-ia32-msvc': 1.9.2 + '@unrs/resolver-binding-win32-x64-msvc': 1.9.2 + + untildify@4.0.0: {} + + update-browserslist-db@1.1.1(browserslist@4.24.4): + dependencies: + browserslist: 4.24.4 + escalade: 3.2.0 + picocolors: 1.1.1 + + update-browserslist-db@1.1.3(browserslist@4.25.0): + dependencies: + browserslist: 4.25.0 + escalade: 3.2.0 + picocolors: 1.1.1 + + upper-case-first@2.0.2: + dependencies: + tslib: 2.8.1 + + upper-case@1.1.3: {} + + upper-case@2.0.2: + dependencies: + tslib: 2.8.1 + + uri-js-replace@1.0.1: {} + + uri-js@4.4.1: + dependencies: + punycode: 2.3.1 + + url-join@4.0.1: {} + + url-parse@1.5.10: + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + + url-template@2.0.8: {} + + url-value-parser@2.2.0: {} + + url@0.11.4: + dependencies: + punycode: 1.4.1 + qs: 6.14.0 + + use-sync-external-store@1.2.2(react@18.2.0): + dependencies: + react: 18.2.0 + + utf7@1.0.2: + dependencies: + semver: 7.7.2 + + utf8@2.1.2: {} + + utf8@3.0.0: {} + + util-deprecate@1.0.2: {} + + util@0.12.5: + dependencies: + inherits: 2.0.4 + is-arguments: 1.1.1 + is-generator-function: 1.1.0 + is-typed-array: 1.1.15 + which-typed-array: 1.1.19 + + uuencode@0.0.4: {} + + uuid@10.0.0: {} + + uuid@11.0.2: {} + + uuid@11.1.0: {} + + uuid@8.3.2: {} + + uuid@9.0.1: {} + + v-code-diff@1.13.1(patch_hash=21588de80e591bbc1e5a068d9bce311db5254686443652945d2c7887fdafe9d9)(vue@3.5.13(typescript@5.9.2)): + dependencies: + diff: 5.2.0 + diff-match-patch: 1.0.5 + highlight.js: 11.11.1 + vue: 3.5.13(typescript@5.9.2) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + + v3-infinite-loading@1.2.2: {} + + v8-compile-cache-lib@3.0.1: + optional: true + + v8-to-istanbul@9.1.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.30 + '@types/istanbul-lib-coverage': 2.0.4 + convert-source-map: 1.9.0 + + valid-data-url@3.0.1: {} + + validator@13.7.0: {} + + vary@1.1.2: {} + + verror@1.10.0: + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + + vite-node@3.1.3(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3): + dependencies: + cac: 6.7.14 + debug: 4.4.1(supports-color@8.1.1) + es-module-lexer: 1.7.0 + pathe: 2.0.3 + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite-plugin-dts@4.5.3(@types/node@20.19.10)(rollup@4.46.2)(typescript@5.9.2)(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)): + dependencies: + '@microsoft/api-extractor': 7.52.1(@types/node@20.19.10) + '@rollup/pluginutils': 5.1.4(rollup@4.46.2) + '@volar/typescript': 2.4.12 + '@vue/language-core': 2.2.0(typescript@5.9.2) + compare-versions: 6.1.1 + debug: 4.4.0 + kolorist: 1.8.0 + local-pkg: 1.1.1 + magic-string: 0.30.17 + typescript: 5.9.2 + optionalDependencies: + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + transitivePeerDependencies: + - '@types/node' + - rollup + - supports-color + + vite-plugin-node-polyfills@0.24.0(rollup@4.46.2)(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)): + dependencies: + '@rollup/plugin-inject': 5.0.5(rollup@4.46.2) + node-stdlib-browser: 1.3.1 + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + transitivePeerDependencies: + - rollup + + vite-plugin-static-copy@2.2.0(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)): + dependencies: + chokidar: 4.0.3 + fast-glob: 3.3.3 + fs-extra: 11.3.0 + picocolors: 1.1.1 + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + vite-svg-loader@5.1.0(vue@3.5.13(typescript@5.9.2)): + dependencies: + svgo: 3.3.2 + vue: 3.5.13(typescript@5.9.2) + + vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3): + dependencies: + esbuild: 0.25.9 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.46.2 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 20.19.10 + fsevents: 2.3.3 + jiti: 1.21.7 + sass: 1.89.2 + terser: 5.16.1 + tsx: 4.19.3 + + vite@7.0.0(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3): + dependencies: + esbuild: 0.25.9 + fdir: 6.4.6(picomatch@4.0.3) + picomatch: 4.0.3 + postcss: 8.5.6 + rollup: 4.46.2 + tinyglobby: 0.2.14 + optionalDependencies: + '@types/node': 20.19.10 + fsevents: 2.3.3 + jiti: 1.21.7 + sass: 1.89.2 + terser: 5.16.1 + tsx: 4.19.3 + + vitest-mock-extended@3.1.0(typescript@5.9.2)(vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)): + dependencies: + ts-essentials: 10.0.2(typescript@5.9.2) + typescript: 5.9.2 + vitest: 3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + + vitest@3.1.3(@types/debug@4.1.12)(@types/node@20.19.10)(jiti@1.21.7)(jsdom@23.0.1)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3): + dependencies: + '@vitest/expect': 3.1.3 + '@vitest/mocker': 3.1.3(vite@6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3)) + '@vitest/pretty-format': 3.2.4 + '@vitest/runner': 3.1.3 + '@vitest/snapshot': 3.1.3 + '@vitest/spy': 3.1.3 + '@vitest/utils': 3.1.3 + chai: 5.2.0 + debug: 4.4.1(supports-color@8.1.1) + expect-type: 1.2.1 + magic-string: 0.30.17 + pathe: 2.0.3 + std-env: 3.9.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinyglobby: 0.2.14 + tinypool: 1.1.1 + tinyrainbow: 2.0.0 + vite: 6.3.5(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + vite-node: 3.1.3(@types/node@20.19.10)(jiti@1.21.7)(sass@1.89.2)(terser@5.16.1)(tsx@4.19.3) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/debug': 4.1.12 + '@types/node': 20.19.10 + jsdom: 23.0.1 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vm-browserify@1.1.2: {} + + void-elements@3.1.0: {} + + vscode-uri@3.0.8: {} + + vue-agile@2.0.0: + dependencies: + lodash.orderby: 4.6.0 + lodash.throttle: 4.1.1 + + vue-boring-avatars@1.3.0(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + vue-chartjs@5.2.0(chart.js@4.4.0)(vue@3.5.13(typescript@5.9.2)): + dependencies: + chart.js: 4.4.0 + vue: 3.5.13(typescript@5.9.2) + + vue-component-meta@2.1.10(typescript@5.9.2): + dependencies: + '@volar/typescript': 2.4.12 + '@vue/language-core': 2.1.10(typescript@5.9.2) + path-browserify: 1.0.1 + vue-component-type-helpers: 2.1.10 + optionalDependencies: + typescript: 5.9.2 + + vue-component-type-helpers@2.1.10: {} + + vue-component-type-helpers@2.2.10: {} + + vue-component-type-helpers@2.2.12: {} + + vue-component-type-helpers@3.0.6: {} + + vue-demi@0.14.10(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + vue-docgen-api@4.76.0(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@babel/parser': 7.26.10 + '@babel/types': 7.26.10 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + ast-types: 0.16.1 + esm-resolve: 1.0.8 + hash-sum: 2.0.0 + lru-cache: 8.0.5 + pug: 3.0.3 + recast: 0.23.6 + ts-map: 1.0.3 + vue: 3.5.13(typescript@5.9.2) + vue-inbrowser-compiler-independent-utils: 4.71.1(vue@3.5.13(typescript@5.9.2)) + + vue-eslint-parser@10.1.3(eslint@9.29.0(jiti@1.21.7)): + dependencies: + debug: 4.4.1(supports-color@8.1.1) + eslint: 9.29.0(jiti@1.21.7) + eslint-scope: 8.4.0 + eslint-visitor-keys: 4.2.1 + espree: 10.4.0 + esquery: 1.6.0 + lodash: 4.17.21 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + vue-github-button@3.1.3: + dependencies: + github-buttons: 2.29.1 + + vue-i18n@11.1.10(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@intlify/core-base': 11.1.10 + '@intlify/shared': 11.1.10 + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.9.2) + + vue-inbrowser-compiler-independent-utils@4.71.1(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + vue-json-pretty@2.2.4(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + vue-markdown-render@2.2.1(vue@3.5.13(typescript@5.9.2)): + dependencies: + markdown-it: 13.0.2 + vue: 3.5.13(typescript@5.9.2) + + vue-observe-visibility@2.0.0-alpha.1(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + vue-resize@2.0.0-alpha.1(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + + vue-router@4.5.0(vue@3.5.13(typescript@5.9.2)): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13(typescript@5.9.2) + + vue-tsc@2.2.8(patch_hash=e2aee939ccac8a57fe449bfd92bedd8117841579526217bc39aca26c6b8c317f)(typescript@5.9.2): + dependencies: + '@volar/typescript': 2.4.12 + '@vue/language-core': 2.2.8(typescript@5.9.2) + typescript: 5.9.2 + + vue-virtual-scroller@2.0.0-beta.8(vue@3.5.13(typescript@5.9.2)): + dependencies: + mitt: 2.1.0 + vue: 3.5.13(typescript@5.9.2) + vue-observe-visibility: 2.0.0-alpha.1(vue@3.5.13(typescript@5.9.2)) + vue-resize: 2.0.0-alpha.1(vue@3.5.13(typescript@5.9.2)) + + vue3-touch-events@4.1.3: {} + + vue@3.5.13(typescript@5.9.2): + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13(typescript@5.9.2)) + '@vue/shared': 3.5.13 + optionalDependencies: + typescript: 5.9.2 + + vuedraggable@4.1.0(vue@3.5.13(typescript@5.9.2)): + dependencies: + sortablejs: 1.14.0 + vue: 3.5.13(typescript@5.9.2) + + w3c-keyname@2.2.6: {} + + w3c-xmlserializer@3.0.0: + dependencies: + xml-name-validator: 4.0.0 + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + wait-on@8.0.2(debug@4.4.0): + dependencies: + axios: 1.11.0(debug@4.4.0) + joi: 17.13.3 + lodash: 4.17.21 + minimist: 1.2.8 + rxjs: 7.8.1 + transitivePeerDependencies: + - debug + + walkdir@0.4.1: {} + + walker@1.0.8: + dependencies: + makeerror: 1.0.12 + + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + + weaviate-client@3.6.2(encoding@0.1.13): + dependencies: + abort-controller-x: 0.4.3 + graphql: 16.11.0 + graphql-request: 6.1.0(encoding@0.1.13)(graphql@16.11.0) + long: 5.3.2 + nice-grpc: 2.1.12 + nice-grpc-client-middleware-retry: 3.1.11 + nice-grpc-common: 2.0.2 + uuid: 9.0.1 + transitivePeerDependencies: + - encoding + + web-resource-inliner@6.0.1(encoding@0.1.13): + dependencies: + ansi-colors: 4.1.3 + escape-goat: 3.0.0 + htmlparser2: 5.0.1 + mime: 2.6.0 + node-fetch: 2.7.0(encoding@0.1.13) + valid-data-url: 3.0.1 + transitivePeerDependencies: + - encoding + + web-streams-polyfill@3.2.1: {} + + web-streams-polyfill@4.0.0-beta.3: {} + + web-tree-sitter@0.24.3: {} + + webidl-conversions@3.0.1: {} + + webidl-conversions@4.0.2: {} + + webidl-conversions@7.0.0: {} + + webpack-sources@3.2.3: {} + + webpack-virtual-modules@0.6.1: {} + + whatwg-encoding@2.0.0: + dependencies: + iconv-lite: 0.6.3 + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-fetch@3.6.20: {} + + whatwg-mimetype@3.0.0: {} + + whatwg-mimetype@4.0.0: {} + + whatwg-url@11.0.0: + dependencies: + tr46: 3.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@13.0.0: + dependencies: + tr46: 4.1.1 + webidl-conversions: 7.0.0 + + whatwg-url@14.0.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + + whatwg-url@5.0.0: + dependencies: + tr46: 0.0.3 + webidl-conversions: 3.0.1 + + whatwg-url@7.1.0: + dependencies: + lodash.sortby: 4.7.0 + tr46: 1.0.1 + webidl-conversions: 4.0.2 + + which-boxed-primitive@1.0.2: + dependencies: + is-bigint: 1.0.4 + is-boolean-object: 1.1.2 + is-number-object: 1.0.7 + is-string: 1.1.1 + is-symbol: 1.0.4 + + which-boxed-primitive@1.1.1: + dependencies: + is-bigint: 1.1.0 + is-boolean-object: 1.2.2 + is-number-object: 1.1.1 + is-string: 1.1.1 + is-symbol: 1.1.1 + + which-builtin-type@1.2.1: + dependencies: + call-bound: 1.0.4 + function.prototype.name: 1.1.8 + has-tostringtag: 1.0.2 + is-async-function: 2.1.1 + is-date-object: 1.1.0 + is-finalizationregistry: 1.1.1 + is-generator-function: 1.1.0 + is-regex: 1.2.1 + is-weakref: 1.1.1 + isarray: 2.0.5 + which-boxed-primitive: 1.1.1 + which-collection: 1.0.2 + which-typed-array: 1.1.19 + + which-collection@1.0.2: + dependencies: + is-map: 2.0.3 + is-set: 2.0.3 + is-weakmap: 2.0.2 + is-weakset: 2.0.4 + + which-typed-array@1.1.15: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + for-each: 0.3.5 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which-typed-array@1.1.19: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.8 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + + which@1.3.1: + dependencies: + isexe: 2.0.0 + + which@2.0.2: + dependencies: + isexe: 2.0.0 + + which@5.0.0: + dependencies: + isexe: 3.1.1 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + wide-align@1.1.5: + dependencies: + string-width: 4.2.3 + optional: true + + widest-line@3.1.0: + dependencies: + string-width: 4.2.3 + + winston-transport@4.8.0: + dependencies: + logform: 2.6.1 + readable-stream: 4.5.2 + triple-beam: 1.3.0 + + winston@3.14.2: + dependencies: + '@colors/colors': 1.6.0 + '@dabh/diagnostics': 2.0.3 + async: 3.2.4 + is-stream: 2.0.1 + logform: 2.6.1 + one-time: 1.0.0 + readable-stream: 3.6.0 + safe-stable-stringify: 2.4.0 + stack-trace: 0.0.10 + triple-beam: 1.3.0 + winston-transport: 4.8.0 + + wiremock-rest-client@1.11.0(encoding@0.1.13): + dependencies: + commander: 6.2.1 + cross-fetch: 3.2.0(encoding@0.1.13) + https-proxy-agent: 4.0.0 + json5: 2.2.3 + loglevel: 1.9.2 + nanoid: 3.3.11 + transitivePeerDependencies: + - encoding + - supports-color + + with@7.0.2: + dependencies: + '@babel/parser': 7.27.5 + '@babel/types': 7.27.6 + assert-never: 1.2.1 + babel-walk: 3.0.0-canary-5 + + word-wrap@1.2.3: {} + + wordwrap@1.0.0: {} + + worker-timers-broker@6.1.8: + dependencies: + '@babel/runtime': 7.26.10 + fast-unique-numbers: 8.0.13 + tslib: 2.8.1 + worker-timers-worker: 7.0.71 + + worker-timers-worker@7.0.71: + dependencies: + '@babel/runtime': 7.26.10 + tslib: 2.8.1 + + worker-timers@7.1.8: + dependencies: + '@babel/runtime': 7.26.10 + tslib: 2.8.1 + worker-timers-broker: 6.1.8 + worker-timers-worker: 7.0.71 + + workerpool@9.3.3: {} + + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@7.0.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + + wrap-ansi@8.1.0: + dependencies: + ansi-styles: 6.2.1 + string-width: 5.1.2 + strip-ansi: 7.1.0 + + wrappy@1.0.2: {} + + write-file-atomic@4.0.2: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 3.0.7 + + write-file-atomic@5.0.1: + dependencies: + imurmurhash: 0.1.4 + signal-exit: 4.1.0 + + ws@8.17.1: {} + + ws@8.18.3: {} + + xlsx@https://cdn.sheetjs.com/xlsx-0.20.2/xlsx-0.20.2.tgz: {} + + xml-crypto@6.1.2: + dependencies: + '@xmldom/is-dom-node': 1.0.1 + '@xmldom/xmldom': 0.8.10 + xpath: 0.0.33 + + xml-escape@1.1.0: {} + + xml-name-validator@4.0.0: {} + + xml-name-validator@5.0.0: {} + + xml2js@0.5.0: + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + + xml2js@0.6.2: + dependencies: + sax: 1.2.4 + xmlbuilder: 11.0.1 + + xml@1.0.1: {} + + xmlbuilder@10.1.1: {} + + xmlbuilder@11.0.1: {} + + xmlchars@2.2.0: {} + + xmlhttprequest-ssl@3.1.0: {} + + xmllint-wasm@3.0.1: {} + + xpath@0.0.32: {} + + xpath@0.0.33: {} + + xregexp@2.0.0: {} + + xss@1.0.15: + dependencies: + commander: 2.20.3 + cssfilter: 0.0.10 + + xtend@4.0.2: {} + + y18n@5.0.8: {} + + yallist@3.1.1: {} + + yallist@4.0.0: {} + + yaml-ast-parser@0.0.43: {} + + yaml@1.10.2: {} + + yaml@2.3.4: {} + + yamljs@0.3.0: + dependencies: + argparse: 1.0.10 + glob: 7.2.3 + + yargs-parser@20.2.9: {} + + yargs-parser@21.1.1: {} + + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + + yargs@16.2.0: + dependencies: + cliui: 7.0.4 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.0.1: + dependencies: + cliui: 7.0.4 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 20.2.9 + + yargs@17.6.0: + dependencies: + cliui: 8.0.1 + escalade: 3.1.1 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yargs@17.7.2: + dependencies: + cliui: 8.0.1 + escalade: 3.2.0 + get-caller-file: 2.0.5 + require-directory: 2.1.1 + string-width: 4.2.3 + y18n: 5.0.8 + yargs-parser: 21.1.1 + + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yn@3.1.1: + optional: true + + yocto-queue@0.1.0: {} + + yoctocolors@2.1.1: {} + + yup@0.32.11: + dependencies: + '@babel/runtime': 7.26.10 + '@types/lodash': 4.17.17 + lodash: 4.17.21 + lodash-es: 4.17.21 + nanoclone: 0.2.1 + property-expr: 2.0.5 + toposort: 2.0.2 + + z-vue-scan@0.0.35(patch_hash=bbd573be7e456224f369aafb4d66374523c4847964a4655a6a1654fd40e8b0f8)(vue@3.5.13(typescript@5.9.2)): + dependencies: + vue: 3.5.13(typescript@5.9.2) + vue-demi: 0.14.10(vue@3.5.13(typescript@5.9.2)) + + zip-stream@6.0.1: + dependencies: + archiver-utils: 5.0.2 + compress-commons: 6.0.2 + readable-stream: 4.5.2 + + zod-class@0.0.16(zod@3.25.67): + dependencies: + type-fest: 4.26.1 + zod: 3.25.67 + + zod-to-json-schema@3.23.3(zod@3.25.67): + dependencies: + zod: 3.25.67 + + zod-to-json-schema@3.24.6(zod@3.25.67): + dependencies: + zod: 3.25.67 + + zod@3.25.67: {} + + zx@8.1.4: + optionalDependencies: + '@types/fs-extra': 11.0.4 + '@types/node': 20.17.57 diff --git a/n8n-n8n-1.109.2/pnpm-workspace 2.yaml b/n8n-n8n-1.109.2/pnpm-workspace 2.yaml new file mode 100755 index 00000000..b82257f3 --- /dev/null +++ b/n8n-n8n-1.109.2/pnpm-workspace 2.yaml @@ -0,0 +1,74 @@ +packages: + - packages/* + - packages/@n8n/* + - packages/frontend/** + - packages/extensions/** + - cypress + - packages/testing/** + +catalog: + '@n8n/typeorm': 0.3.20-12 + '@n8n_io/ai-assistant-sdk': 1.15.0 + '@langchain/core': 0.3.68 + '@langchain/openai': 0.6.7 + '@langchain/anthropic': 0.3.26 + '@langchain/community': 0.3.50 + '@sentry/node': ^9.42.1 + '@types/basic-auth': ^1.1.3 + '@types/express': ^5.0.1 + '@types/jsonwebtoken': ^9.0.9 + '@types/lodash': 4.17.17 + '@types/uuid': ^10.0.0 + '@types/xml2js': ^0.4.14 + '@vitest/coverage-v8': 3.2.4 + axios: 1.8.3 + basic-auth: 2.0.1 + callsites: 3.1.0 + chokidar: 4.0.3 + fast-glob: 3.2.12 + flatted: 3.2.7 + form-data: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + iconv-lite: 0.6.3 + jsonwebtoken: 9.0.2 + js-base64: 3.7.2 + lodash: 4.17.21 + luxon: 3.4.4 + nanoid: 3.3.8 + picocolors: 1.0.1 + reflect-metadata: 0.2.2 + rimraf: 6.0.1 + tsup: ^8.5.0 + tsx: ^4.19.3 + uuid: 10.0.0 + vite: ^6.3.5 + vite-plugin-dts: ^4.5.4 + vitest: ^3.1.3 + vitest-mock-extended: ^3.1.0 + xml2js: 0.6.2 + xss: 1.0.15 + zod: 3.25.67 + zod-to-json-schema: 3.23.3 + typescript: 5.9.2 + eslint: 9.29.0 + +catalogs: + frontend: + '@sentry/vue': ^9.42.1 + '@testing-library/jest-dom': ^6.6.3 + '@testing-library/user-event': ^14.6.1 + '@testing-library/vue': ^8.1.0 + '@vue/tsconfig': ^0.7.0 + '@vueuse/core': ^10.11.0 + '@vitejs/plugin-vue': ^5.2.4 + pinia: ^2.2.4 + unplugin-icons: ^0.19.0 + unplugin-vue-components: ^0.27.2 + vue: ^3.5.13 + vue-i18n: ^11.1.2 + vue-router: ^4.5.0 + vue-tsc: ^2.2.8 + vue-markdown-render: ^2.2.1 + highlight.js: ^11.8.0 + element-plus: 2.4.3 diff --git a/n8n-n8n-1.109.2/renovate 2.json b/n8n-n8n-1.109.2/renovate 2.json new file mode 100755 index 00000000..358f5872 --- /dev/null +++ b/n8n-n8n-1.109.2/renovate 2.json @@ -0,0 +1,95 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended", + ":dependencyDashboard", + ":semanticCommits", + ":separateMajorReleases", + ":enableVulnerabilityAlertsWithLabel(security)" + ], + "schedule": ["after 2am and before 4am"], + "timezone": "UTC", + "prConcurrentLimit": 3, + "prHourlyLimit": 1, + "packageRules": [ + { + "description": "Use pnpm catalog for shared dependencies", + "matchFileNames": ["pnpm-workspace.yaml"], + "matchManagers": ["npm"], + "enabled": true + }, + { + "description": "Group all catalog updates together", + "matchFileNames": ["pnpm-workspace.yaml"], + "groupName": "pnpm catalog", + "commitMessageTopic": "pnpm catalog" + }, + { + "description": "Dev dependencies", + "matchDepTypes": ["devDependencies"], + "matchUpdateTypes": ["patch", "minor"], + "automerge": false + }, + { + "description": "Patch updates", + "matchUpdateTypes": ["patch", "pin", "digest"], + "automerge": false + }, + { + "description": "TypeScript types", + "matchPackageNames": ["@types/**"], + "automerge": false + }, + { + "description": "Require approval for major updates", + "matchUpdateTypes": ["major"], + "dependencyDashboardApproval": true + }, + { + "description": "Group ESLint related packages", + "matchPackageNames": ["*eslint*"], + "groupName": "ESLint" + }, + { + "description": "Group Vue ecosystem packages", + "matchPackageNames": ["*vue*", "@vue/**", "@vueuse/**"], + "groupName": "Vue ecosystem" + }, + { + "description": "Group testing packages", + "matchPackageNames": [ + "*vitest*", + "*playwright*", + "*cypress*", + "@testing-library/**", + "*jest*" + ], + "groupName": "testing packages" + }, + { + "description": "Group TypeScript packages", + "matchPackageNames": ["typescript", "*tsx*", "*tsup*"], + "groupName": "TypeScript" + } + ], + "lockFileMaintenance": { + "enabled": true, + "schedule": ["before 6am on monday"] + }, + "vulnerabilityAlerts": { + "enabled": true, + "labels": ["security", "vulnerability"] + }, + "osvVulnerabilityAlerts": true, + "labels": ["dependencies"], + "branchPrefix": "renovate/", + "commitMessagePrefix": "chore: ", + "commitMessageTopic": "{{depName}}", + "commitMessageExtra": "to {{newVersion}}", + "commitMessageAction": "Update", + "ignoreDeps": [], + "ignorePaths": ["**/node_modules/**", "**/dist/**", "**/build/**"], + "enabledManagers": ["npm", "dockerfile", "github-actions"], + "npmrc": "auto-detect", + "updateNotScheduled": false +} diff --git a/n8n-n8n-1.109.2/scripts/block-npm-install 2.js b/n8n-n8n-1.109.2/scripts/block-npm-install 2.js new file mode 100755 index 00000000..4fbcda5b --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/block-npm-install 2.js @@ -0,0 +1,12 @@ +const { npm_config_user_agent: UA } = process.env; +const [packageManager] = (UA ?? '').split(' '); +const [name, version] = packageManager.split('/'); +if (name !== 'pnpm') { + const suggestion = '\033[1;92mpnpm\033[0;31m'; + console.error('\033[0;31m'); + console.error('╭───────────────────────────────────────────╮'); + console.error(`│\tPlease use ${suggestion} instead of ${name} \t │`); + console.error('╰───────────────────────────────────────────╯'); + console.error('\033[0m'); + process.exit(1); +} diff --git a/n8n-n8n-1.109.2/scripts/build-n8n 2.mjs b/n8n-n8n-1.109.2/scripts/build-n8n 2.mjs new file mode 100755 index 00000000..bfa61afe --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/build-n8n 2.mjs @@ -0,0 +1,252 @@ +#!/usr/bin/env node +/** + * This script is used to build the n8n application for production. + * It will: + * 1. Clean the previous build output + * 2. Run pnpm install and build + * 3. Prepare for deployment - clean package.json files + * 4. Create a pruned production deployment in 'compiled' + */ + +import { $, echo, fs, chalk } from 'zx'; +import path from 'path'; + +// Check if running in a CI environment +const isCI = process.env.CI === 'true'; + +// Check if test controller should be excluded (CI + flag not set) +const excludeTestController = + process.env.CI === 'true' && process.env.INCLUDE_TEST_CONTROLLER !== 'true'; + +// Disable verbose output and force color only if not in CI +$.verbose = !isCI; +process.env.FORCE_COLOR = isCI ? '0' : '1'; + +const scriptDir = path.dirname(new URL(import.meta.url).pathname); +const isInScriptsDir = path.basename(scriptDir) === 'scripts'; +const rootDir = isInScriptsDir ? path.join(scriptDir, '..') : scriptDir; + +// #region ===== Configuration ===== +const config = { + compiledAppDir: path.join(rootDir, 'compiled'), + rootDir: rootDir, +}; + +// Define backend patches to keep during deployment +const PATCHES_TO_KEEP = ['pdfjs-dist', 'pkce-challenge', 'bull']; + +// #endregion ===== Configuration ===== + +// #region ===== Helper Functions ===== +const timers = new Map(); + +function startTimer(name) { + timers.set(name, Date.now()); +} + +function getElapsedTime(name) { + const start = timers.get(name); + if (!start) return 0; + return Math.floor((Date.now() - start) / 1000); +} + +function formatDuration(seconds) { + const hours = Math.floor(seconds / 3600); + const minutes = Math.floor((seconds % 3600) / 60); + const secs = seconds % 60; + + if (hours > 0) return `${hours}h ${minutes}m ${secs}s`; + if (minutes > 0) return `${minutes}m ${secs}s`; + return `${secs}s`; +} + +function printHeader(title) { + echo(''); + echo(chalk.blue.bold(`===== ${title} =====`)); +} + +function printDivider() { + echo(chalk.gray('-----------------------------------------------')); +} + +// #endregion ===== Helper Functions ===== + +// #region ===== Main Build Process ===== +printHeader('n8n Build & Production Preparation'); +echo(`INFO: Output Directory: ${config.compiledAppDir}`); +printDivider(); + +startTimer('total_build'); + +// 0. Clean Previous Build Output +echo(chalk.yellow(`INFO: Cleaning previous output directory: ${config.compiledAppDir}...`)); +await fs.remove(config.compiledAppDir); +printDivider(); + +// 1. Local Application Pre-build +echo(chalk.yellow('INFO: Starting local application pre-build...')); +startTimer('package_build'); + +echo(chalk.yellow('INFO: Running pnpm install and build...')); +try { + const installProcess = $`cd ${config.rootDir} && pnpm install --frozen-lockfile`; + installProcess.pipe(process.stdout); + await installProcess; + + const buildProcess = $`cd ${config.rootDir} && pnpm build`; + buildProcess.pipe(process.stdout); + await buildProcess; + + echo(chalk.green('✅ pnpm install and build completed')); +} catch (error) { + console.error(chalk.red('\n🛑 BUILD PROCESS FAILED!')); + console.error(chalk.red('An error occurred during the build process:')); + process.exit(1); +} + +const packageBuildTime = getElapsedTime('package_build'); +echo(chalk.green(`✅ Package build completed in ${formatDuration(packageBuildTime)}`)); +printDivider(); + +// 2. Prepare for deployment - clean package.json files +echo(chalk.yellow('INFO: Performing pre-deploy cleanup on package.json files...')); + +// Find and backup package.json files +const packageJsonFiles = await $`cd ${config.rootDir} && find . -name "package.json" \ +-not -path "./node_modules/*" \ +-not -path "*/node_modules/*" \ +-not -path "./compiled/*" \ +-type f`.lines(); + +// Backup all package.json files +// This is only needed locally, not in CI +if (process.env.CI !== 'true') { + for (const file of packageJsonFiles) { + if (file) { + const fullPath = path.join(config.rootDir, file); + await fs.copy(fullPath, `${fullPath}.bak`); + } + } +} +// Run FE trim script +await $`cd ${config.rootDir} && node .github/scripts/trim-fe-packageJson.js`; +echo(chalk.yellow('INFO: Performing selective patch cleanup...')); + +const packageJsonPath = path.join(config.rootDir, 'package.json'); + +if (await fs.pathExists(packageJsonPath)) { + try { + // 1. Read the package.json file + const packageJsonContent = await fs.readFile(packageJsonPath, 'utf8'); + let packageJson = JSON.parse(packageJsonContent); + + // 2. Modify the patchedDependencies directly in JavaScript + if (packageJson.pnpm && packageJson.pnpm.patchedDependencies) { + const filteredPatches = {}; + for (const [key, value] of Object.entries(packageJson.pnpm.patchedDependencies)) { + // Check if the key (patch name) starts with any of the allowed patches + const shouldKeep = PATCHES_TO_KEEP.some((patchPrefix) => key.startsWith(patchPrefix)); + if (shouldKeep) { + filteredPatches[key] = value; + } + } + packageJson.pnpm.patchedDependencies = filteredPatches; + } + + // 3. Write the modified package.json back + await fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2), 'utf8'); + + echo(chalk.green('✅ Kept backend patches: ' + PATCHES_TO_KEEP.join(', '))); + echo( + chalk.gray( + `Removed FE/dev patches that are not in the list of backend patches to keep: ${PATCHES_TO_KEEP.join(', ')}`, + ), + ); + } catch (error) { + echo(chalk.red(`ERROR: Failed to cleanup patches in package.json: ${error.message}`)); + process.exit(1); + } +} + +echo(chalk.yellow(`INFO: Creating pruned production deployment in '${config.compiledAppDir}'...`)); +startTimer('package_deploy'); + +await fs.ensureDir(config.compiledAppDir); + +if (excludeTestController) { + const cliPackagePath = path.join(config.rootDir, 'packages/cli/package.json'); + const content = await fs.readFile(cliPackagePath, 'utf8'); + const packageJson = JSON.parse(content); + packageJson.files.push('!dist/**/e2e.*'); + await fs.writeFile(cliPackagePath, JSON.stringify(packageJson, null, 2)); + echo(chalk.gray(' - Excluded test controller from packages/cli/package.json')); +} + +await $`cd ${config.rootDir} && NODE_ENV=production DOCKER_BUILD=true pnpm --filter=n8n --prod --legacy deploy --no-optional ./compiled`; + +const packageDeployTime = getElapsedTime('package_deploy'); + +// Restore package.json files +// This is only needed locally, not in CI +if (process.env.CI !== 'true') { + for (const file of packageJsonFiles) { + if (file) { + const fullPath = path.join(config.rootDir, file); + const backupPath = `${fullPath}.bak`; + if (await fs.pathExists(backupPath)) { + await fs.move(backupPath, fullPath, { overwrite: true }); + } + } + } +} + +// Calculate output size +const compiledAppOutputSize = (await $`du -sh ${config.compiledAppDir} | cut -f1`).stdout.trim(); + +// Generate build manifest +const buildManifest = { + buildTime: new Date().toISOString(), + artifactSize: compiledAppOutputSize, + buildDuration: { + packageBuild: packageBuildTime, + packageDeploy: packageDeployTime, + total: getElapsedTime('total_build'), + }, +}; + +await fs.writeJson(path.join(config.compiledAppDir, 'build-manifest.json'), buildManifest, { + spaces: 2, +}); + +echo(chalk.green(`✅ Package deployment completed in ${formatDuration(packageDeployTime)}`)); +echo(`INFO: Size of ${config.compiledAppDir}: ${compiledAppOutputSize}`); +printDivider(); + +// Calculate total time +const totalBuildTime = getElapsedTime('total_build'); + +// #endregion ===== Main Build Process ===== + +// #region ===== Final Output ===== +echo(''); +echo(chalk.green.bold('================ BUILD SUMMARY ================')); +echo(chalk.green(`✅ n8n built successfully!`)); +echo(''); +echo(chalk.blue('📦 Build Output:')); +echo(` Directory: ${path.resolve(config.compiledAppDir)}`); +echo(` Size: ${compiledAppOutputSize}`); +echo(''); +echo(chalk.blue('⏱️ Build Times:')); +echo(` Package Build: ${formatDuration(packageBuildTime)}`); +echo(` Package Deploy: ${formatDuration(packageDeployTime)}`); +echo(chalk.gray(' -----------------------------')); +echo(chalk.bold(` Total Time: ${formatDuration(totalBuildTime)}`)); +echo(''); +echo(chalk.blue('📋 Build Manifest:')); +echo(` ${path.resolve(config.compiledAppDir)}/build-manifest.json`); +echo(chalk.green.bold('==============================================')); + +// #endregion ===== Final Output ===== + +// Exit with success +process.exit(0); diff --git a/n8n-n8n-1.109.2/scripts/dockerize-n8n 2.mjs b/n8n-n8n-1.109.2/scripts/dockerize-n8n 2.mjs new file mode 100755 index 00000000..ded701dd --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/dockerize-n8n 2.mjs @@ -0,0 +1,171 @@ +#!/usr/bin/env node +/** + * Build n8n Docker image locally + * + * This script simulates the CI build process for local testing. + * Default output: 'n8nio/n8n:local' + * Override with IMAGE_BASE_NAME and IMAGE_TAG environment variables. + */ + +import { $, echo, fs, chalk, os } from 'zx'; +import { fileURLToPath } from 'url'; +import path from 'path'; + +// Disable verbose mode for cleaner output +$.verbose = false; +process.env.FORCE_COLOR = '1'; + +// #region ===== Helper Functions ===== + +/** + * Get Docker platform string based on host architecture + * @returns {string} Platform string (e.g., 'linux/amd64') + */ +function getDockerPlatform() { + const arch = os.arch(); + const dockerArch = { + x64: 'amd64', + arm64: 'arm64', + }[arch]; + + if (!dockerArch) { + throw new Error(`Unsupported architecture: ${arch}. Only x64 and arm64 are supported.`); + } + + return `linux/${dockerArch}`; +} + +/** + * Format duration in seconds + * @param {number} ms - Duration in milliseconds + * @returns {string} Formatted duration + */ +function formatDuration(ms) { + return `${Math.floor(ms / 1000)}s`; +} + +/** + * Get Docker image size + * @param {string} imageName - Full image name with tag + * @returns {Promise} Image size or 'Unknown' + */ +async function getImageSize(imageName) { + try { + const { stdout } = await $`docker images ${imageName} --format "{{.Size}}"`; + return stdout.trim(); + } catch { + return 'Unknown'; + } +} + +/** + * Check if a command exists + * @param {string} command - Command to check + * @returns {Promise} True if command exists + */ +async function commandExists(command) { + try { + await $`command -v ${command}`; + return true; + } catch { + return false; + } +} + +// #endregion ===== Helper Functions ===== + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const isInScriptsDir = path.basename(__dirname) === 'scripts'; +const rootDir = isInScriptsDir ? path.join(__dirname, '..') : __dirname; + +const config = { + dockerfilePath: path.join(rootDir, 'docker/images/n8n/Dockerfile'), + imageBaseName: process.env.IMAGE_BASE_NAME || 'n8nio/n8n', + imageTag: process.env.IMAGE_TAG || 'local', + buildContext: rootDir, + compiledAppDir: path.join(rootDir, 'compiled'), + get fullImageName() { + return `${this.imageBaseName}:${this.imageTag}`; + }, +}; + +// #region ===== Main Build Process ===== + +const platform = getDockerPlatform(); + +async function main() { + echo(chalk.blue.bold('===== Docker Build for n8n =====')); + echo(`INFO: Image: ${config.fullImageName}`); + echo(`INFO: Platform: ${platform}`); + echo(chalk.gray('-'.repeat(47))); + + await checkPrerequisites(); + + // Build Docker image + const buildTime = await buildDockerImage(); + + // Get image details + const imageSize = await getImageSize(config.fullImageName); + + // Display summary + displaySummary({ + imageName: config.fullImageName, + platform, + size: imageSize, + buildTime, + }); +} + +async function checkPrerequisites() { + if (!(await fs.pathExists(config.compiledAppDir))) { + echo(chalk.red(`Error: Compiled app directory not found at ${config.compiledAppDir}`)); + echo(chalk.yellow('Please run build-n8n.mjs first!')); + process.exit(1); + } + + if (!(await commandExists('docker'))) { + echo(chalk.red('Error: Docker is not installed or not in PATH')); + process.exit(1); + } +} + +async function buildDockerImage() { + const startTime = Date.now(); + echo(chalk.yellow('INFO: Building Docker image...')); + + try { + const { stdout } = await $`docker build \ + --platform ${platform} \ + --build-arg TARGETPLATFORM=${platform} \ + -t ${config.fullImageName} \ + -f ${config.dockerfilePath} \ + --load \ + ${config.buildContext}`; + + echo(stdout); + return formatDuration(Date.now() - startTime); + } catch (error) { + echo(chalk.red(`ERROR: Docker build failed: ${error.stderr || error.message}`)); + process.exit(1); + } +} + +function displaySummary({ imageName, platform, size, buildTime }) { + echo(''); + echo(chalk.green.bold('═'.repeat(54))); + echo(chalk.green.bold(' DOCKER BUILD COMPLETE')); + echo(chalk.green.bold('═'.repeat(54))); + echo(chalk.green(`✅ Image built: ${imageName}`)); + echo(` Platform: ${platform}`); + echo(` Size: ${size}`); + echo(` Build time: ${buildTime}`); + echo(chalk.green.bold('═'.repeat(54))); +} + +// #endregion ===== Main Build Process ===== + +main().catch((error) => { + echo(chalk.red(`Unexpected error: ${error.message}`)); + process.exit(1); +}); diff --git a/n8n-n8n-1.109.2/scripts/ensure-zx 2.mjs b/n8n-n8n-1.109.2/scripts/ensure-zx 2.mjs new file mode 100755 index 00000000..61f3265b --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/ensure-zx 2.mjs @@ -0,0 +1,17 @@ +import { accessSync, constants } from 'node:fs'; +import { execSync } from 'node:child_process'; + +const ZX_PATH = 'node_modules/.bin/zx'; + +if (!zxExists()) { + execSync('pnpm --frozen-lockfile --filter n8n-monorepo install', { stdio: 'inherit' }); +} + +function zxExists() { + try { + accessSync(ZX_PATH, constants.F_OK); + return true; + } catch { + return false; + } +} diff --git a/n8n-n8n-1.109.2/scripts/format 2.mjs b/n8n-n8n-1.109.2/scripts/format 2.mjs new file mode 100755 index 00000000..69bbfce0 --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/format 2.mjs @@ -0,0 +1,65 @@ +#!/usr/bin/env node + +import fs from 'fs'; +import path from 'path'; +import { execSync } from 'child_process'; + +const prettier = path.resolve('node_modules', '.bin', 'prettier'); +const biome = path.resolve('node_modules', '.bin', 'biome'); + +[prettier, biome].forEach((bin) => { + if (!fs.existsSync(bin)) { + throw new Error( + [`${path.basename(bin)} not found at path: ${bin}`, 'Please run `pnpm i` first'].join('\n'), + ); + } +}); + +const prettierConfig = path.resolve('.prettierrc.js'); +const biomeConfig = path.resolve('biome.jsonc'); +const ignore = path.resolve('.prettierignore'); + +const ROOT_DIRS_TO_SKIP = ['.git', 'node_modules', 'packages', '.turbo', 'cypress']; +const EXTENSIONS_TO_FORMAT_WITH_PRETTIER = ['.yml']; +const EXTENSIONS_TO_FORMAT_WITH_BIOME = ['.js', '.json', '.ts']; + +const isDir = (path) => fs.lstatSync(path).isDirectory(); + +const isPrettierTarget = (path) => + EXTENSIONS_TO_FORMAT_WITH_PRETTIER.some((ext) => path.endsWith(ext)); +const isBiomeTarget = (path) => EXTENSIONS_TO_FORMAT_WITH_BIOME.some((ext) => path.endsWith(ext)); + +const biomeTargets = []; +const prettierTargets = []; + +const walk = (dir) => { + fs.readdirSync(dir).forEach((entry) => { + const entryPath = path.resolve(dir, entry); + if (isDir(entryPath)) walk(entryPath); + if (isPrettierTarget(entryPath)) prettierTargets.push(entryPath); + if (isBiomeTarget(entryPath)) biomeTargets.push(entryPath); + }); +}; + +fs.readdirSync('.').forEach((cur) => { + if (ROOT_DIRS_TO_SKIP.includes(cur)) return; + if (isDir(cur)) walk(cur); + if (isPrettierTarget(cur)) prettierTargets.push(cur); + if (isBiomeTarget(cur)) biomeTargets.push(cur); +}); + +execSync( + [ + prettier, + '--config', + prettierConfig, + '--ignore-path', + ignore, + '--write', + prettierTargets.join(' '), + ].join(' '), +); + +execSync( + [biome, 'format', '--write', `--config-path=${biomeConfig}`, biomeTargets.join(' ')].join(' '), +); diff --git a/n8n-n8n-1.109.2/scripts/prepare 2.mjs b/n8n-n8n-1.109.2/scripts/prepare 2.mjs new file mode 100755 index 00000000..2ad91f77 --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/prepare 2.mjs @@ -0,0 +1,10 @@ +#!/usr/bin/env node + +import { execSync } from 'node:child_process'; + +// Skip lefthook install in CI or Docker build +if (process.env.CI || process.env.DOCKER_BUILD) { + process.exit(0); +} + +execSync('pnpm lefthook install', { stdio: 'inherit' }); diff --git a/n8n-n8n-1.109.2/scripts/reset 2.mjs b/n8n-n8n-1.109.2/scripts/reset 2.mjs new file mode 100755 index 00000000..c3082042 --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/reset 2.mjs @@ -0,0 +1,30 @@ +// Resets the repository by deleting all untracked files except for few exceptions. +import { $, echo, fs } from 'zx'; + +$.verbose = true; +process.env.FORCE_COLOR = '1'; + +const excludePatterns = ['/.vscode/', '/.idea/', '.env', '/.claude/']; +const excludeFlags = excludePatterns.map((exclude) => ['-e', exclude]).flat(); + +echo( + `This will delete all untracked files except for those matching the following patterns: ${excludePatterns.map((x) => `"${x}"`).join(', ')}.`, +); + +const answer = await question('❓ Do you want to continue? (y/n) '); + +if (!['y', 'Y', ''].includes(answer)) { + echo('Aborting...'); + process.exit(0); +} + +echo('🧹 Cleaning untracked files...'); +await $({ verbose: false })`git clean -fxd ${excludeFlags}`; +// In case node_modules is not removed by git clean +fs.removeSync('node_modules'); + +echo('⏬ Running pnpm install...'); +await $`pnpm install`; + +echo('🏗️ Running pnpm build...'); +await $`pnpm build`; diff --git a/n8n-n8n-1.109.2/scripts/run-e2e 2.js b/n8n-n8n-1.109.2/scripts/run-e2e 2.js new file mode 100755 index 00000000..e69de29b diff --git a/n8n-n8n-1.109.2/scripts/scan-n8n-image 2.mjs b/n8n-n8n-1.109.2/scripts/scan-n8n-image 2.mjs new file mode 100755 index 00000000..79c3a5f8 --- /dev/null +++ b/n8n-n8n-1.109.2/scripts/scan-n8n-image 2.mjs @@ -0,0 +1,156 @@ +#!/usr/bin/env node +/** + * This script is used to scan the n8n docker image for vulnerabilities. + * It uses Trivy to scan the image. + */ + +import { $, echo, fs, chalk } from 'zx'; +import path from 'path'; + +$.verbose = false; +process.env.FORCE_COLOR = '1'; + +const scriptDir = path.dirname(new URL(import.meta.url).pathname); +const isInScriptsDir = path.basename(scriptDir) === 'scripts'; +const rootDir = isInScriptsDir ? path.join(scriptDir, '..') : scriptDir; + +// #region ===== Configuration ===== +const config = { + imageBaseName: process.env.IMAGE_BASE_NAME || 'n8nio/n8n', + imageTag: process.env.IMAGE_TAG || 'local', + trivyImage: process.env.TRIVY_IMAGE || 'aquasec/trivy:latest', + severity: process.env.TRIVY_SEVERITY || 'CRITICAL,HIGH,MEDIUM,LOW', + outputFormat: process.env.TRIVY_FORMAT || 'table', + outputFile: process.env.TRIVY_OUTPUT || null, + scanTimeout: process.env.TRIVY_TIMEOUT || '10m', + ignoreUnfixed: process.env.TRIVY_IGNORE_UNFIXED === 'true', + scanners: process.env.TRIVY_SCANNERS || 'vuln', + quiet: process.env.TRIVY_QUIET === 'true', + rootDir: rootDir, +}; + +config.fullImageName = `${config.imageBaseName}:${config.imageTag}`; + +const printHeader = (title) => + !config.quiet && echo(`\n${chalk.blue.bold(`===== ${title} =====`)}`); + +const printSummary = (status, time, message) => { + if (config.quiet) return; + + echo('\n' + chalk.blue.bold('===== Scan Summary =====')); + echo(status === 'success' ? chalk.green.bold(message) : chalk.yellow.bold(message)); + echo(chalk[status === 'success' ? 'green' : 'yellow'](` Scan time: ${time}s`)); + + if (config.outputFile) { + const resolvedPath = path.isAbsolute(config.outputFile) + ? config.outputFile + : path.join(config.rootDir, config.outputFile); + echo(chalk[status === 'success' ? 'green' : 'yellow'](` Report saved to: ${resolvedPath}`)); + } + + echo('\n' + chalk.gray('Scan Configuration:')); + echo(chalk.gray(` • Target Image: ${config.fullImageName}`)); + echo(chalk.gray(` • Severity Levels: ${config.severity}`)); + echo(chalk.gray(` • Scanners: ${config.scanners}`)); + if (config.ignoreUnfixed) echo(chalk.gray(` • Ignored unfixed: yes`)); + echo(chalk.blue.bold('========================')); +}; + +// #endregion ===== Configuration ===== + +// #region ===== Main Process ===== +(async () => { + printHeader('Trivy Security Scan for n8n Image'); + + try { + await $`command -v docker`; + } catch { + echo(chalk.red('Error: Docker is not installed or not in PATH')); + process.exit(1); + } + + try { + await $`docker image inspect ${config.fullImageName} > /dev/null 2>&1`; + } catch { + echo(chalk.red(`Error: Docker image '${config.fullImageName}' not found`)); + echo(chalk.yellow('Please run dockerize-n8n.mjs first!')); + process.exit(1); + } + + // Pull latest Trivy image silently + try { + await $`docker pull ${config.trivyImage} > /dev/null 2>&1`; + } catch { + // Silent fallback to cached version + } + + // Build Trivy command + const trivyArgs = [ + 'run', + '--rm', + '-v', + '/var/run/docker.sock:/var/run/docker.sock', + config.trivyImage, + 'image', + '--severity', + config.severity, + '--format', + config.outputFormat, + '--timeout', + config.scanTimeout, + '--scanners', + config.scanners, + '--no-progress', + ]; + + if (config.ignoreUnfixed) trivyArgs.push('--ignore-unfixed'); + if (config.quiet && config.outputFormat === 'table') trivyArgs.push('--quiet'); + + // Handle output file - resolve relative to root directory + if (config.outputFile) { + const outputPath = path.isAbsolute(config.outputFile) + ? config.outputFile + : path.join(config.rootDir, config.outputFile); + await fs.ensureDir(path.dirname(outputPath)); + trivyArgs.push('--output', '/tmp/trivy-output', '-v', `${outputPath}:/tmp/trivy-output`); + } + + trivyArgs.push(config.fullImageName); + + // Run the scan + const startTime = Date.now(); + + try { + const result = await $`docker ${trivyArgs}`; + + // Print Trivy output first + if (!config.outputFile && result.stdout) { + echo(result.stdout); + } + + // Then print our summary + const scanTime = Math.floor((Date.now() - startTime) / 1000); + printSummary('success', scanTime, '✅ Security scan completed successfully'); + + process.exit(0); + } catch (error) { + const scanTime = Math.floor((Date.now() - startTime) / 1000); + + // Trivy returns exit code 1 when vulnerabilities are found + if (error.exitCode === 1) { + // Print Trivy output first + if (!config.outputFile && error.stdout) { + echo(error.stdout); + } + + // Then print our summary + printSummary('warning', scanTime, '⚠️ Vulnerabilities found!'); + process.exit(1); + } else { + echo(chalk.red(`❌ Scan failed: ${error.message}`)); + process.exit(error.exitCode || 1); + } + } +})(); + +// #endregion ===== Main Process ===== diff --git a/web_frontend/data/Agent_prompt/会展策划专家.md b/web_frontend/data/Agent_prompt/会展策划专家.md index e69de29b..8a022148 100644 --- a/web_frontend/data/Agent_prompt/会展策划专家.md +++ b/web_frontend/data/Agent_prompt/会展策划专家.md @@ -0,0 +1,39 @@ +# Role: 经验丰富且富有创意的会展设计师 + +## Profile +- author: LangGPT +- version: 1.0 +- language: 中文 +- description: 你是一位经验老道、创意新颖的会展设计师,擅长展会的整体策划,包括选址、展陈设计、预算编制、活动日期安排、营销宣传等。 + +## Skills +1. 能快速理解并吸收外部资料与内容,整合成为实操性的策划要点。 +2. 擅长将抽象主题具体化,策划方案具有逻辑清晰、创意突出、实用可行的特点。 +3. 熟练掌握会展项目全过程,从前期调研、设计策划,到中期执行与后期评估。 +4. 能使用专业术语和严谨的结构表达完整策划内容。 + +## Background +用户提供了三个节点文档:{{ $('When chat message received').item.json.chatInput }}代表整个会展的主题,{{ $json.text }}包含会展主题相关的资料和参考信息,{{ $json.text }}定义了文章的结构和写作范式。你的任务是理解这两个节点,并结合自身专业知识输出一份完整的策划书。 + +## Goals +- 全文必须按照{{ $('When chat message received').item.json.chatInput }}的主题 +- 阅读并充分理解{{ $json.text }}中提供的信息和资料; +- 遵循{{ $json.text }}所规定的文章结构与格式; +- 撰写一份主题吸引人、语言专业、结构合理的会展策划方案书; +- 策划书内容必须涵盖选址(中国长三角地区)、展陈设计、预算、时间安排、宣传推广等环节; +- 正文长度不少于3000字。 + +## Rules +1. 必须严格参考{{ $json.text }}内容进行创作,体现理解与重构能力; +2. 主题需吸引眼球,具有创意性; +3. 逻辑严密,段落结构清晰; +4. 专业术语准确,语句通顺; +5. 不允许出现“AI生成”、“我是AI”等措辞; +6. 最终输出不得少于3000字。 + +## Workflows +1. 阅读并吸收{{ $json.text }}内容,提炼核心信息; +2. 确认所{{ $json.text }}规定的写作框架; +3. 围绕会展策划关键点进行内容创作; +4. 审核文字逻辑、术语准确性与字数; +5. 以Json格式输出完整的策划方案书文本。 diff --git a/web_frontend/data/Agent_prompt/营销宣传专家.md b/web_frontend/data/Agent_prompt/营销宣传专家.md index e69de29b..4294aeb2 100644 --- a/web_frontend/data/Agent_prompt/营销宣传专家.md +++ b/web_frontend/data/Agent_prompt/营销宣传专家.md @@ -0,0 +1,62 @@ +# Role: 会展营销宣传专家 + +## Profile +- author: LangGPT +- version: 1.0 +- language: 中文 +- description: 你是一位精通线上与线下整合传播的会展营销专家,擅长为展会项目量身定制多渠道宣传策略,提升展会曝光度、观众到场率及品牌影响力。 + +## Skills +1. 能基于展会定位制定精准的营销目标与内容策略; +2. 熟悉抖音、小红书、公众号等新媒体平台营销玩法; +3. 精通线下地推、户外广告、合作联动等传统宣传方式; +4. 善于制定分阶段、分人群的推广计划与内容排期; +5. 输出结构标准化、逻辑清晰的整合营销方案(含推广时间表、渠道矩阵、内容主题等); + +## Goals +- 为展会制定一套完整的整合营销传播方案; +- 输出方案需包含目标设定、策略框架、渠道矩阵、内容主题、执行时间表等; +- 内容格式需支持结构化输出,方便项目管理或汇报使用; + +## OutputFormat + +```json +{ + "展会名称": "2025数字经济博览会", + "目标受众": ["B端科技企业", "C端泛科技爱好者"], + "营销目标": "提升展会曝光率、提升参展报名转化率", + "营销策略": { + "总体策略": "线上线下联动,内容驱动,精准触达", + "分阶段策略": { + "预热期": "内容种草 + 社媒曝光", + "引流期": "强内容发布 + 用户互动", + "转化期": "落地活动 + 渠道转化" + } + }, + "渠道矩阵": { + "线上渠道": ["抖音", "小红书", "微信公众号", "官网", "知乎"], + "线下渠道": ["户外广告", "地铁灯箱", "异业联动门店", "校园推广"] + }, + "内容主题规划": [ + {"主题": "行业趋势", "形式": "图文、视频", "平台": "知乎、公众号"}, + {"主题": "展会亮点", "形式": "短视频、直播", "平台": "抖音、小红书"}, + {"主题": "嘉宾预告", "形式": "人物专访", "平台": "视频号、公众号"} + ], + "时间与执行表": [ + { + "阶段": "预热期", + "时间范围": "2025-02-01 ~ 2025-02-14", + "重点动作": "达人种草、开设话题标签、内容预告" + }, + { + "阶段": "引流期", + "时间范围": "2025-02-15 ~ 2025-02-28", + "重点动作": "高频内容推送、互动抽奖、报名链接投放" + }, + { + "阶段": "转化期", + "时间范围": "2025-03-01 ~ 2025-03-08", + "重点动作": "地推执行、户外广告投放、现场报名引导" + } + ] +} \ No newline at end of file diff --git a/web_frontend/doc/会展策划工作流.md b/web_frontend/doc/会展策划工作流.md new file mode 100644 index 00000000..3a6ec02f --- /dev/null +++ b/web_frontend/doc/会展策划工作流.md @@ -0,0 +1,145 @@ +# 会展策划专家系统工作流 + +## 工作流架构图 + +```mermaid +graph TB + %% 定义节点样式 + classDef chatNode fill:#4a5568,stroke:#718096,color:#fff,stroke-width:2px + classDef triggerNode fill:#d69e2e,stroke:#ecc94b,color:#fff,stroke-width:2px + classDef splitNode fill:#805ad5,stroke:#9f7aea,color:#fff,stroke-width:2px + classDef notionNode fill:#e53e3e,stroke:#fc8181,color:#fff,stroke-width:2px + classDef summaryNode fill:#2b6cb0,stroke:#4299e1,color:#fff,stroke-width:3px + + %% 节点定义 + Start[["🗨️ When chat message
received"]]:::triggerNode + + %% 第一阶段:专业分析 + subgraph Phase1 [" 第一阶段:专业分析 "] + Expert1["🔗 设计专家
Google Gemini Chat
Model2"]:::chatNode + Expert2["🔗 财务预算专家
DeepSeek Chat
Model2"]:::chatNode + Expert3["🔗 信息检索专家
DeepSeek Chat
Model5"]:::chatNode + end + + %% 中心汇总节点 + Summary["📝 会展策划专家
Chat Models + Memories
(汇总与协调)"]:::summaryNode + + %% 第二阶段:执行规划 + subgraph Phase2 [" 第二阶段:执行规划 "] + Expert4["🔗 格式编辑专家
DeepSeek Chat
Model4"]:::chatNode + Expert5["🔗 活动执行专家
DeepSeek Chat
Model1"]:::chatNode + Expert6["🔗 营销宣传专家
DeepSeek Chat
Model3"]:::chatNode + end + + %% 输出节点 + Split["⚡ Split Out
(输出分流)"]:::splitNode + Notion["📕 存储
Create Page
(Notion)"]:::notionNode + + %% 连接关系 - 第一阶段 + Start --> Expert1 + Start --> Expert2 + Start --> Expert3 + + Expert1 --> Summary + Expert2 --> Summary + Expert3 --> Summary + + %% 连接关系 - 第二阶段 + Summary --> Expert4 + Summary --> Expert5 + Summary --> Expert6 + + Expert4 --> Summary + Expert5 --> Summary + Expert6 --> Summary + + %% 输出连接 + Summary --> Split + Split --> Notion +``` + +## 工作流说明 + +### 整体架构 +这是一个**双向循环的专家系统工作流**,采用中心化协调模式,通过多个专业AI模型协同工作,完成复杂的会展策划任务。 + +### 核心组件 + +#### 1. 触发器 (Trigger) +- **组件**: When chat message received +- **功能**: 接收用户输入,启动整个工作流程 + +#### 2. 第一阶段专家组 +- **设计专家** (Google Gemini Chat Model2) + - 负责展会视觉设计、空间布局 + - 品牌形象和创意方案 + +- **财务预算专家** (DeepSeek Chat Model2) + - 成本核算与预算规划 + - 投资回报率分析 + +- **信息检索专家** (DeepSeek Chat Model5) + - 市场调研和数据收集 + - 竞品分析和行业趋势 + +#### 3. 中央协调器 +- **会展策划专家** (Chat Models + Memories) + - 汇总各专家意见 + - 协调不同领域的建议 + - 维护上下文记忆 + - 生成综合策划方案 + +#### 4. 第二阶段专家组 +- **格式编辑专家** (DeepSeek Chat Model4) + - 文档格式化和排版 + - 确保输出规范性 + +- **活动执行专家** (DeepSeek Chat Model1) + - 制定执行计划 + - 时间线和任务分配 + +- **营销宣传专家** (DeepSeek Chat Model3) + - 推广策略制定 + - 媒体渠道规划 + +#### 5. 输出处理 +- **Split Out**: 将最终方案分流输出 +- **Notion存储**: 将策划方案保存到Notion页面 + +### 工作流特点 + +1. **双向循环机制** + - 第一阶段:收集专业意见 + - 中央处理:汇总协调 + - 第二阶段:细化执行 + - 反馈优化:返回中央节点 + +2. **多模型协同** + - 使用不同的AI模型处理不同专业领域 + - Google Gemini用于创意设计 + - DeepSeek用于逻辑分析和执行 + +3. **记忆保持** + - 中央节点维护对话历史 + - 确保上下文连贯性 + +4. **结构化输出** + - 通过格式编辑专家规范化输出 + - 自动存储到知识管理系统 + +## 使用场景 + +适用于: +- 大型展会策划 +- 商业活动组织 +- 品牌发布会 +- 行业峰会论坛 +- 产品展示会 + +## 优势 + +1. **专业性**: 每个领域都有专门的AI专家处理 +2. **全面性**: 覆盖策划的各个方面 +3. **协调性**: 中央节点确保各部分协调一致 +4. **可追溯**: 所有决策过程都有记录 +5. **自动化**: 减少人工干预,提高效率 \ No newline at end of file diff --git a/web_frontend/doc/可行性分析.md b/web_frontend/doc/可行性分析.md index a4a3285f..cba088c6 100644 --- a/web_frontend/doc/可行性分析.md +++ b/web_frontend/doc/可行性分析.md @@ -1,10 +1,65 @@ -# 需求评估 +# 会展策划多Agent演示系统 - 技术实施方案 -我现在想做一个演示的DEMO, +## 项目定义 +构建一个基于React的Web演示系统,实时展示多Agent协同生成会展策划方案的完整过程。 + +## 技术决策 +- **框架**: React 18 + TypeScript +- **动画**: Framer Motion + CSS Animations +- **样式**: Tailwind CSS (参考字节跳动、Flowith、Raycast设计风格) +- **状态管理**: Zustand +- **构建工具**: Vite + +## 演示参数 +- **总时长**: 3分钟 +- **文字生成速度**: 30-40字/秒 +- **Agent Prompt展示**: 完整展示,逐步显示 +- **交互控制**: 暂时不支持跳过,保证演示完整性 + +## 设计风格指南 +- **视觉风格**: 简洁实用、年轻化、高端感 +- **参考产品**: 火山引擎、Trea、Flowith、Raycast +- **核心特征**: + - 精致的微动画 + - 清晰的信息层级 + - 中性色调搭配品牌色 + - 优雅的过渡效果 -模拟一个Agent生成状态 +## 内容板块 +网页的Page形式按照一级标题进行独立输出,每一个一级标题都是一个独立页面 +分为 +- 策划案 +- 展会介绍与预期效果 +- 营销方案 +- 现场运营方案 +- 预算与收益分析 +- 风险评估与应急预案 + +这个六个页面是必须要创建的 + +## 演示流程 +- 可以先出一个页面,上面有一个run的按钮 +- 当点击run按钮的时候,开始执行mermaid的流程,每个流程独立输出对应Agent的Prompt,加一些延迟和loading动画,让它像终端生成一样生成每个内容的文字内容和图片内容 +- 需要增加文字生成的动画 +- 图片加载的时候,需要有loading转圈的动画,模拟延迟 + +## 整体目标 +其实就是仿真模拟出一个多Agent生成各个方案的一个演示动画 + +## 页面内容完善 + +- 创建一个TODO清单,扩展每个一级标题中信息缺失和不完善的部分 + +- 让每个板块中的内容更加充实,符合现实业务场景,尽可能多 + +## 构建网页规范 + +- 在构建网页的时候需要满足参考claude.md中的superdesign规范 +- 现代化网页,符合UX设计规范的交互 + +## Agent角色 **Agent的角色有** 1.信息检索专家:`web_frontend/data/Agent_prompt/信息检索专家.md` @@ -20,7 +75,3 @@ 6.活动执行专家:`web_frontend/data/Agent_prompt/活动执行专家.md` 7.营销宣传专家:`web_frontend/data/Agent_prompt/会展营销宣传专家.md` - - -# 演示输出文档 -https://www.notion.so/266405c1652381f9b607ecd178ad93dd diff --git a/web_frontend/doc/可行性分析_优化版.md b/web_frontend/doc/可行性分析_优化版.md new file mode 100644 index 00000000..76ae185b --- /dev/null +++ b/web_frontend/doc/可行性分析_优化版.md @@ -0,0 +1,385 @@ +# 会展策划多Agent演示系统 - 需求与可行性分析文档 + +## 一、项目概述 + +### 1.1 项目背景 +基于n8n工作流平台构建的多Agent协作系统,需要创建一个Web演示界面,直观展示AI Agent协同生成会展策划方案的完整过程。 + +### 1.2 项目目标 +- **主要目标**:构建一个高保真的多Agent协作演示系统 +- **演示效果**:实时展示7个专业AI Agent协同工作,生成完整的汽车展会策划方案 +- **用户体验**:提供流畅的动画效果和交互体验,让观众理解Agent协作机制 + +### 1.3 项目范围 +- **核心功能**:Agent工作流可视化、内容生成动画、成果展示 +- **演示内容**:基于`web_frontend/data/会展策划/汽车展会展策划案_DEMO.md` +- **技术边界**:前端演示系统,不涉及真实的AI调用 + +--- + +## 二、需求分析 + +### 2.1 功能需求 + +#### 2.1.1 核心功能模块 + +| 模块 | 功能描述 | 优先级 | +|------|---------|--------| +| **启动界面** | 展示系统介绍,提供"开始演示"按钮 | P0 | +| **工作流可视化** | 基于Mermaid图动态展示Agent协作流程 | P0 | +| **Agent执行动画** | 展示每个Agent的输入/输出,模拟思考过程 | P0 | +| **内容生成展示** | 打字机效果展示文本,渐显效果展示图片 | P0 | +| **成果展示页面** | 分页展示6个策划模块的完整内容 | P0 | +| **进度指示器** | 显示当前执行阶段和整体进度 | P1 | +| **交互控制** | 暂停/继续/重新开始功能 | P1 | + +#### 2.1.2 Agent角色定义 + +```javascript +const agents = { + "信息检索专家": { + icon: "🔍", + model: "DeepSeek Chat Model5", + role: "市场调研、数据收集、竞品分析", + promptFile: "web_frontend/data/Agent_prompt/信息检索专家.md" + }, + "设计专家": { + icon: "🎨", + model: "Google Gemini Chat Model2", + role: "视觉设计、空间布局、品牌形象", + promptFile: "web_frontend/data/Agent_prompt/设计师专家.md" + }, + "财务预算专家": { + icon: "💰", + model: "DeepSeek Chat Model2", + role: "成本核算、预算规划、ROI分析", + promptFile: "web_frontend/data/Agent_prompt/财务预算专家.md" + }, + "格式编辑专家": { + icon: "📝", + model: "DeepSeek Chat Model4", + role: "文档格式化、内容结构优化", + promptFile: "web_frontend/data/Agent_prompt/格式编辑专家.md" + }, + "活动执行专家": { + icon: "⚡", + model: "DeepSeek Chat Model1", + role: "执行计划、时间线管理、任务分配", + promptFile: "web_frontend/data/Agent_prompt/活动执行专家.md" + }, + "营销宣传专家": { + icon: "📢", + model: "DeepSeek Chat Model3", + role: "推广策略、媒体规划、品牌传播", + promptFile: "web_frontend/data/Agent_prompt/会展营销宣传专家.md" + }, + "会展策划专家": { + icon: "🎯", + model: "Chat Models + Memories", + role: "中央协调、方案整合、决策支持", + promptFile: "web_frontend/data/Agent_prompt/会展策划专家.md" + } +} +``` + +### 2.2 内容需求 + +#### 2.2.1 展示内容结构 + +```yaml +展会策划方案: + 1. 策划案概述: + - 封面信息 + - 策划背景 + - 策划目的 + - 策划依据 + + 2. 展会介绍与预期效果: + - 展会主题 + - 展会地址 + - 展品范围 + - 目标参展商/观众 + - 预计规模 + - 预期效果 + + 3. 营销方案: + - 整体推广策略 + - 线下推广方案 + - 线上推广方案 + - 精准邀请与对接 + + 4. 现场运营方案: + - 展区规划 + - 现场服务 + - 活动安排 + - 展陈设计 + + 5. 预算与收益分析: + - 支出预算明细 + - 收入预算明细 + - 收益预测 + - 投资回报率 + + 6. 风险评估与应急预案: + - 风险分析矩阵 + - 应对措施 + - 应急预案 + - 保障体系 +``` + +### 2.3 交互需求 + +#### 2.3.1 用户流程 + +```mermaid +graph LR + A[访问页面] --> B[查看介绍] + B --> C[点击开始演示] + C --> D[观看Agent协作] + D --> E[查看生成内容] + E --> F[浏览完整方案] + F --> G[重新演示/退出] +``` + +#### 2.3.2 动画效果需求 + +| 动画类型 | 应用场景 | 实现方式 | 时长 | +|---------|---------|---------|------| +| **淡入淡出** | Agent切换 | CSS transition | 0.3s | +| **打字机效果** | 文本生成 | JavaScript逐字显示 | 30-50字/秒 | +| **流光效果** | 工作流连线 | SVG animation | 持续 | +| **加载动画** | 图片加载 | CSS spinner | 1-2s | +| **进度条** | 整体进度 | CSS/JS动态更新 | 实时 | +| **脉冲效果** | 当前Active Agent | CSS animation | 持续 | + +### 2.4 非功能需求 + +#### 2.4.1 性能要求 +- 页面加载时间 < 3秒 +- 动画帧率 ≥ 30fps +- 响应时间 < 200ms + +#### 2.4.2 兼容性要求 +- 浏览器:Chrome 90+, Firefox 88+, Safari 14+, Edge 90+ +- 分辨率:1366x768 ~ 3840x2160 +- 设备:桌面端优先,平板端适配 + +#### 2.4.3 设计规范 +- 遵循`claude.md`中的superdesign规范 +- 采用现代化UI设计语言 +- 保持视觉一致性和品牌调性 + +--- + +## 三、技术方案 + +### 3.1 技术栈选择 + +```javascript +const techStack = { + framework: "React 18 / Vue 3", + styling: "Tailwind CSS + Framer Motion", + stateManagement: "Zustand / Pinia", + visualization: "D3.js / Mermaid.js", + animation: "GSAP / Lottie", + build: "Vite", + deployment: "Vercel / Netlify" +} +``` + +### 3.2 架构设计 + +```mermaid +graph TB + subgraph Frontend[前端架构] + UI[UI层] + State[状态管理] + Animation[动画引擎] + Data[数据层] + end + + subgraph Components[核心组件] + Workflow[工作流组件] + Agent[Agent组件] + Content[内容展示组件] + Control[控制组件] + end + + UI --> State + State --> Animation + Animation --> Data + + Workflow --> Agent + Agent --> Content + Content --> Control +``` + +### 3.3 数据流设计 + +```typescript +interface DemoState { + // 演示状态 + status: 'idle' | 'running' | 'paused' | 'completed' + currentPhase: number + currentAgent: string + progress: number + + // Agent状态 + agents: { + [key: string]: { + status: 'waiting' | 'thinking' | 'generating' | 'done' + input: string + output: string + startTime: number + endTime: number + } + } + + // 内容状态 + generatedContent: { + [section: string]: { + title: string + content: string + images: string[] + isComplete: boolean + } + } + + // 控制状态 + controls: { + speed: number // 1-5倍速 + autoAdvance: boolean + showDetails: boolean + } +} +``` + +--- + +## 四、实施计划 + +### 4.1 开发阶段 + +| 阶段 | 任务 | 工时 | 依赖 | +|------|------|------|------| +| **Phase 1** | 环境搭建、基础框架 | 4h | - | +| **Phase 2** | 工作流可视化组件 | 8h | Phase 1 | +| **Phase 3** | Agent执行动画 | 12h | Phase 2 | +| **Phase 4** | 内容生成展示 | 8h | Phase 3 | +| **Phase 5** | 成果展示页面 | 6h | Phase 4 | +| **Phase 6** | 交互优化、调试 | 6h | Phase 5 | +| **总计** | - | **44h** | - | + +### 4.2 内容准备 + +```yaml +需要完善的内容: + 1. Agent Prompts: + - 确保每个Agent的prompt文件完整 + - 添加具体的输入输出示例 + + 2. 演示数据: + - 完善汽车展会策划案内容 + - 准备配图资源(至少20张) + - 编写Agent对话脚本 + + 3. 文案优化: + - 系统介绍文案 + - 操作引导文案 + - 加载提示文案 +``` + +--- + +## 五、风险评估 + +### 5.1 技术风险 + +| 风险项 | 概率 | 影响 | 应对措施 | +|--------|------|------|----------| +| 动画性能问题 | 中 | 高 | 使用CSS动画优先,避免复杂计算 | +| 浏览器兼容性 | 低 | 中 | 使用成熟框架,充分测试 | +| 内容加载慢 | 中 | 中 | 实施懒加载,CDN加速 | + +### 5.2 内容风险 + +| 风险项 | 概率 | 影响 | 应对措施 | +|--------|------|------|----------| +| 内容不完整 | 高 | 高 | 提前准备,建立内容审核机制 | +| Agent逻辑不清 | 中 | 高 | 详细设计Agent交互脚本 | +| 演示时间过长 | 中 | 中 | 提供快进功能,优化内容长度 | + +--- + +## 六、成功标准 + +### 6.1 功能完成度 +- [ ] 所有P0功能100%实现 +- [ ] P1功能至少80%实现 +- [ ] 无阻塞性bug + +### 6.2 用户体验 +- [ ] 演示流程流畅,无明显卡顿 +- [ ] 动画效果自然,符合预期 +- [ ] 内容展示清晰,易于理解 + +### 6.3 演示效果 +- [ ] 能够完整展示Agent协作过程 +- [ ] 生成内容质量高,业务逻辑合理 +- [ ] 观众能够理解系统价值 + +--- + +## 七、附录 + +### 7.1 参考资源 +- 工作流定义:`web_frontend/doc/会展策划工作流.md` +- 演示内容:`web_frontend/data/会展策划/汽车展会展策划案_DEMO.md` +- Agent定义:`web_frontend/data/Agent_prompt/` +- 设计规范:`claude.md` (superdesign section) + +### 7.2 关键决策点 + +需要与您确认的问题: + +1. **技术栈选择** + - 倾向于React还是Vue? + - 是否需要SSR支持? + +2. **演示节奏** + - 完整演示时长目标?(建议3-5分钟) + - 是否需要支持手动控制每个步骤? + +3. **内容深度** + - 每个Agent输出内容的详细程度? + - 是否需要展示完整的prompt和response? + +4. **视觉风格** + - 偏向科技感还是商务风? + - 颜色主题偏好? + +5. **部署方式** + - 静态部署还是需要后端支持? + - 是否需要数据统计功能? + +### 7.3 下一步行动 + +1. **立即行动** + - 确认技术方案 + - 完善内容素材 + - 搭建开发环境 + +2. **短期目标**(1周内) + - 完成核心功能开发 + - 实现基础动画效果 + +3. **长期优化** + - 性能优化 + - 用户反馈收集 + - 迭代改进 + +--- + +*文档版本:v2.0* +*更新时间:2025-09-08* +*负责人:[待定]* \ No newline at end of file diff --git a/web_frontend/exhibition-demo/README.md b/web_frontend/exhibition-demo/README.md new file mode 100644 index 00000000..d71ffd3b --- /dev/null +++ b/web_frontend/exhibition-demo/README.md @@ -0,0 +1,151 @@ +# AI 会展策划系统 - 多Agent协同演示 + +## 🚀 项目概述 + +这是一个基于React构建的多Agent协同演示系统,展示了7个专业AI Agent如何协同工作,生成完整的会展策划方案。设计风格参考了字节跳动、Flowith、Raycast等现代化产品。 + +## ✨ 核心特性 + +- **7个专业Agent**:信息检索、设计、财务预算、格式编辑、活动执行、营销宣传、中央协调 +- **实时工作流可视化**:动态展示Agent协作流程 +- **打字机效果**:30-40字/秒的文字生成动画 +- **现代化UI设计**:简洁、实用、年轻化的界面风格 +- **完整演示流程**:约3分钟完整展示策划方案生成过程 + +## 🛠 技术栈 + +- **框架**: React 18 + TypeScript +- **样式**: Tailwind CSS +- **动画**: Framer Motion +- **状态管理**: Zustand +- **构建工具**: Vite + +## 📦 安装与运行 + +### 前置要求 + +- Node.js >= 16.0.0 +- npm >= 7.0.0 或 pnpm >= 6.0.0 + +### 安装步骤 + +```bash +# 进入项目目录 +cd web_frontend/exhibition-demo + +# 安装依赖(推荐使用pnpm) +pnpm install +# 或使用npm +npm install + +# 启动开发服务器 +pnpm dev +# 或 +npm run dev +``` + +开发服务器将在 `http://localhost:5173` 启动 + +### 构建生产版本 + +```bash +# 构建项目 +pnpm build +# 或 +npm run build + +# 预览构建结果 +pnpm preview +# 或 +npm run preview +``` + +## 📁 项目结构 + +``` +exhibition-demo/ +├── src/ +│ ├── components/ # React组件 +│ │ ├── AgentCard.tsx # Agent卡片组件 +│ │ ├── ContentGenerator.tsx # 内容生成器 +│ │ ├── ProgressBar.tsx # 进度条 +│ │ └── WorkflowVisualization.tsx # 工作流可视化 +│ ├── pages/ # 页面组件 +│ │ ├── LandingPage.tsx # 启动页 +│ │ ├── WorkflowPage.tsx # 工作流演示页 +│ │ └── ResultPage.tsx # 结果展示页 +│ ├── store/ # 状态管理 +│ │ └── demoStore.ts # Zustand store +│ ├── styles/ # 样式文件 +│ ├── utils/ # 工具函数 +│ ├── App.tsx # 主应用组件 +│ ├── main.tsx # 入口文件 +│ └── index.css # 全局样式 +├── public/ # 静态资源 +├── index.html # HTML模板 +├── package.json # 项目配置 +├── tailwind.config.js # Tailwind配置 +├── vite.config.ts # Vite配置 +└── tsconfig.json # TypeScript配置 +``` + +## 🎯 使用说明 + +1. **启动演示**:访问首页,点击"开始演示"按钮 +2. **观看流程**:系统将自动展示Agent协作过程 +3. **查看结果**:演示完成后,可以浏览完整的策划方案 +4. **控制选项**:支持暂停/继续/重新开始 + +## 🎨 设计特点 + +- **Glass Morphism**:玻璃态效果,增强层次感 +- **渐变色彩**:蓝紫渐变主题,科技感十足 +- **微动画**:精致的过渡和交互动画 +- **响应式布局**:适配不同屏幕尺寸 + +## 📊 演示内容 + +演示案例为"2024长三角国际新能源汽车与智能交通产业博览会",包含: + +1. **策划案概述** +2. **展会介绍与预期效果** +3. **营销方案** +4. **现场运营方案** +5. **预算与收益分析** +6. **风险评估与应急预案** + +## 🔧 配置说明 + +### 调整演示速度 + +在 `src/store/demoStore.ts` 中修改: + +```typescript +controls: { + speed: 1, // 1-5倍速 + // ... +} +``` + +### 修改文字生成速度 + +在组件中调整 `speed` 参数(默认35字/秒) + +## 🤝 贡献指南 + +欢迎提交Issue和Pull Request来改进项目。 + +## 📝 许可证 + +MIT License + +## 🙏 致谢 + +- n8n Workflow Platform +- DeepSeek AI +- Google Gemini +- 所有开源项目贡献者 + +--- + +如有问题,请联系项目维护者。 \ No newline at end of file diff --git a/web_frontend/exhibition-demo/index.html b/web_frontend/exhibition-demo/index.html new file mode 100644 index 00000000..15e7dc82 --- /dev/null +++ b/web_frontend/exhibition-demo/index.html @@ -0,0 +1,16 @@ + + + + + + + AI 会展策划系统 - 多Agent协同演示 + + + + + +
+ + + \ No newline at end of file diff --git a/web_frontend/exhibition-demo/package.json b/web_frontend/exhibition-demo/package.json new file mode 100644 index 00000000..fa89e099 --- /dev/null +++ b/web_frontend/exhibition-demo/package.json @@ -0,0 +1,38 @@ +{ + "name": "exhibition-demo", + "private": true, + "version": "0.0.0", + "type": "module", + "scripts": { + "dev": "vite", + "build": "tsc && vite build", + "preview": "vite preview" + }, + "dependencies": { + "react": "^18.2.0", + "react-dom": "^18.2.0", + "framer-motion": "^11.0.0", + "zustand": "^4.5.0", + "react-markdown": "^9.0.0", + "react-syntax-highlighter": "^15.5.0", + "lucide-react": "^0.300.0", + "clsx": "^2.1.0", + "tailwind-merge": "^2.2.0" + }, + "devDependencies": { + "@types/react": "^18.2.43", + "@types/react-dom": "^18.2.17", + "@types/react-syntax-highlighter": "^15.5.11", + "@typescript-eslint/eslint-plugin": "^6.14.0", + "@typescript-eslint/parser": "^6.14.0", + "@vitejs/plugin-react": "^4.2.1", + "autoprefixer": "^10.4.16", + "eslint": "^8.55.0", + "eslint-plugin-react-hooks": "^4.6.0", + "eslint-plugin-react-refresh": "^0.4.5", + "postcss": "^8.4.32", + "tailwindcss": "^3.4.0", + "typescript": "^5.2.2", + "vite": "^5.0.8" + } +} \ No newline at end of file diff --git a/web_frontend/exhibition-demo/postcss.config.js b/web_frontend/exhibition-demo/postcss.config.js new file mode 100644 index 00000000..e99ebc2c --- /dev/null +++ b/web_frontend/exhibition-demo/postcss.config.js @@ -0,0 +1,6 @@ +export default { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/App.tsx b/web_frontend/exhibition-demo/src/App.tsx new file mode 100644 index 00000000..7341a94b --- /dev/null +++ b/web_frontend/exhibition-demo/src/App.tsx @@ -0,0 +1,72 @@ +import React, { useState } from 'react'; +import { AnimatePresence, motion } from 'framer-motion'; +import LandingPage from './pages/LandingPage'; +import WorkflowPage from './pages/WorkflowPage'; +import ResultPage from './pages/ResultPage'; +import { useDemoStore } from './store/demoStore'; + +type PageType = 'landing' | 'workflow' | 'result'; + +function App() { + const [currentPage, setCurrentPage] = useState('landing'); + const { status } = useDemoStore(); + + React.useEffect(() => { + if (status === 'completed') { + setCurrentPage('result'); + } + }, [status]); + + const handleStartDemo = () => { + setCurrentPage('workflow'); + }; + + const handleRestart = () => { + useDemoStore.getState().reset(); + setCurrentPage('landing'); + }; + + return ( +
+ + {currentPage === 'landing' && ( + + + + )} + + {currentPage === 'workflow' && ( + + + + )} + + {currentPage === 'result' && ( + + + + )} + +
+ ); +} + +export default App; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/components/AgentCard.tsx b/web_frontend/exhibition-demo/src/components/AgentCard.tsx new file mode 100644 index 00000000..51098679 --- /dev/null +++ b/web_frontend/exhibition-demo/src/components/AgentCard.tsx @@ -0,0 +1,156 @@ +import React from 'react'; +import { motion } from 'framer-motion'; +import { Agent } from '../store/demoStore'; +import { Loader2, Check, Brain } from 'lucide-react'; + +interface AgentCardProps { + agent: Agent; + isActive: boolean; + compact?: boolean; +} + +const AgentCard: React.FC = ({ agent, isActive, compact = false }) => { + const getStatusIcon = () => { + switch (agent.status) { + case 'thinking': + return ; + case 'generating': + return ; + case 'done': + return ; + default: + return null; + } + }; + + const getStatusColor = () => { + switch (agent.status) { + case 'thinking': + return 'bg-blue-500'; + case 'generating': + return 'bg-purple-500'; + case 'done': + return 'bg-green-500'; + default: + return 'bg-neutral-400'; + } + }; + + if (compact) { + return ( + + {/* Status Indicator */} +
+ +
+ {agent.icon} +
+

{agent.name}

+

+ {agent.model} +

+
+ {getStatusIcon()} +
+ + ); + } + + return ( + + {/* Header */} +
+
+
{agent.icon}
+
+

{agent.name}

+

+ {agent.model} +

+
+
+
+ {getStatusIcon()} +
+
+
+ + {/* Role Description */} +

+ {agent.role} +

+ + {/* Prompt Display (if active) */} + {isActive && agent.prompt && ( + +

+ Prompt: +

+ +
+ )} + + {/* Output Display (if available) */} + {agent.output && ( + +

+ 输出: +

+

+ {agent.output} +

+
+ )} + + ); +}; + +// Typewriter Component +const TypewriterText: React.FC<{ text: string; speed: number }> = ({ text, speed }) => { + const [displayedText, setDisplayedText] = React.useState(''); + const [currentIndex, setCurrentIndex] = React.useState(0); + + React.useEffect(() => { + if (currentIndex < text.length) { + const timeout = setTimeout(() => { + setDisplayedText(prev => prev + text[currentIndex]); + setCurrentIndex(prev => prev + 1); + }, speed); + return () => clearTimeout(timeout); + } + }, [currentIndex, text, speed]); + + return ( +

+ {displayedText} + {currentIndex < text.length && ( + + )} +

+ ); +}; + +export default AgentCard; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/components/ContentGenerator.tsx b/web_frontend/exhibition-demo/src/components/ContentGenerator.tsx new file mode 100644 index 00000000..e9569e71 --- /dev/null +++ b/web_frontend/exhibition-demo/src/components/ContentGenerator.tsx @@ -0,0 +1,104 @@ +import React, { useState, useEffect } from 'react'; +import { motion } from 'framer-motion'; +import { FileText, Image, Loader2 } from 'lucide-react'; + +interface ContentGeneratorProps { + content?: string; + images?: string[]; + speed?: number; +} + +const ContentGenerator: React.FC = ({ + content = "正在生成会展策划方案内容...", + images = [], + speed = 35 +}) => { + const [displayedContent, setDisplayedContent] = useState(''); + const [currentIndex, setCurrentIndex] = useState(0); + const [loadingImages, setLoadingImages] = useState>(new Set()); + + useEffect(() => { + if (currentIndex < content.length) { + const timeout = setTimeout(() => { + setDisplayedContent(prev => prev + content[currentIndex]); + setCurrentIndex(prev => prev + 1); + }, speed); + return () => clearTimeout(timeout); + } + }, [currentIndex, content, speed]); + + const handleImageLoad = (index: number) => { + setLoadingImages(prev => { + const newSet = new Set(prev); + newSet.delete(index); + return newSet; + }); + }; + + return ( +
+ {/* Text Content */} +
+
+ + + 生成中... + +
+ +
+ {displayedContent} + {currentIndex < content.length && ( + + )} +
+
+ + {/* Images */} + {images.length > 0 && ( +
+
+ + + 相关图片 + +
+ +
+ {images.map((src, index) => ( + + {loadingImages.has(index) && ( +
+ +
+ )} + {`Generated handleImageLoad(index)} + onLoadStart={() => setLoadingImages(prev => new Set(prev).add(index))} + /> +
+ ))} +
+
+ )} + + {/* Stats */} +
+ 字符: {displayedContent.length} + 速度: {speed}字/秒 + 进度: {Math.round((currentIndex / content.length) * 100)}% +
+
+ ); +}; + +export default ContentGenerator; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/components/ProgressBar.tsx b/web_frontend/exhibition-demo/src/components/ProgressBar.tsx new file mode 100644 index 00000000..81e29cef --- /dev/null +++ b/web_frontend/exhibition-demo/src/components/ProgressBar.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import { motion } from 'framer-motion'; + +interface ProgressBarProps { + progress: number; +} + +const ProgressBar: React.FC = ({ progress }) => { + return ( +
+ + {/* Shimmer effect */} +
+ + + {/* Progress text */} +
+ 进度: {Math.round(progress)}% +
+
+ ); +}; + +export default ProgressBar; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/components/WorkflowVisualization.tsx b/web_frontend/exhibition-demo/src/components/WorkflowVisualization.tsx new file mode 100644 index 00000000..258a0a07 --- /dev/null +++ b/web_frontend/exhibition-demo/src/components/WorkflowVisualization.tsx @@ -0,0 +1,178 @@ +import React from 'react'; +import { motion } from 'framer-motion'; +import { Agent } from '../store/demoStore'; + +interface WorkflowVisualizationProps { + agents: Agent[]; + currentAgent: string | null; +} + +const WorkflowVisualization: React.FC = ({ + agents, + currentAgent +}) => { + // 定义工作流布局 + const layout = { + phase1: ['retrieval', 'design', 'budget'], + coordinator: ['coordinator'], + phase2: ['format', 'execution', 'marketing'], + }; + + const getNodePosition = (agentId: string) => { + if (layout.phase1.includes(agentId)) { + const index = layout.phase1.indexOf(agentId); + return { x: 100 + index * 150, y: 50 }; + } + if (agentId === 'coordinator') { + return { x: 250, y: 200 }; + } + if (layout.phase2.includes(agentId)) { + const index = layout.phase2.indexOf(agentId); + return { x: 100 + index * 150, y: 350 }; + } + return { x: 0, y: 0 }; + }; + + return ( +
+ + {/* Draw connections */} + {/* Phase 1 to Coordinator */} + {layout.phase1.map((agentId) => { + const start = getNodePosition(agentId); + const end = getNodePosition('coordinator'); + return ( + + ); + })} + + {/* Coordinator to Phase 2 */} + {layout.phase2.map((agentId) => { + const start = getNodePosition('coordinator'); + const end = getNodePosition(agentId); + return ( + + ); + })} + + {/* Phase 2 back to Coordinator */} + {layout.phase2.map((agentId) => { + const start = getNodePosition(agentId); + const end = getNodePosition('coordinator'); + return ( + + ); + })} + + {/* Gradient definition */} + + + + + + + + + {/* Agent Nodes */} + {agents.map((agent) => { + const position = getNodePosition(agent.id); + const isActive = currentAgent === agent.id; + + return ( + + + {agent.icon} + + + {agent.name.split('专家')[0]} + + + {/* Status dot */} +
+ + ); + })} + + {/* Labels */} +
+ 第一阶段:信息收集 +
+
+ 中央协调 +
+
+ 第二阶段:方案细化 +
+
+ ); +}; + +export default WorkflowVisualization; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/index.css b/web_frontend/exhibition-demo/src/index.css new file mode 100644 index 00000000..90bcc031 --- /dev/null +++ b/web_frontend/exhibition-demo/src/index.css @@ -0,0 +1,140 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 222.2 84% 4.9%; + --primary: 217.2 91.2% 59.8%; + --primary-foreground: 222.2 47.4% 11.2%; + } + + .dark { + --background: 222.2 84% 4.9%; + --foreground: 210 40% 98%; + --primary: 217.2 91.2% 59.8%; + --primary-foreground: 222.2 47.4% 11.2%; + } + + * { + @apply border-neutral-200 dark:border-neutral-800; + } + + body { + @apply bg-white dark:bg-neutral-950 text-neutral-900 dark:text-neutral-50; + font-feature-settings: "rlig" 1, "calt" 1; + } +} + +@layer components { + .glass-morphism { + @apply backdrop-blur-xl bg-white/80 dark:bg-neutral-900/80 border border-neutral-200/50 dark:border-neutral-800/50; + } + + .gradient-border { + background: linear-gradient(white, white) padding-box, + linear-gradient(to right, #3b82f6, #8b5cf6) border-box; + border: 2px solid transparent; + } + + .text-gradient { + @apply bg-gradient-to-r from-blue-500 to-purple-500 bg-clip-text text-transparent; + } + + .animate-typewriter { + overflow: hidden; + white-space: nowrap; + border-right: 2px solid; + animation: typing 3.5s steps(40, end), blink-caret 0.75s step-end infinite; + } + + @keyframes typing { + from { width: 0 } + to { width: 100% } + } + + @keyframes blink-caret { + from, to { border-color: transparent } + 50% { border-color: currentColor } + } + + .loading-spinner { + @apply inline-block w-8 h-8 border-4 border-neutral-200 dark:border-neutral-800 rounded-full; + border-top-color: #3b82f6; + animation: spin 0.8s linear infinite; + } + + @keyframes spin { + to { transform: rotate(360deg) } + } + + .agent-card { + @apply relative overflow-hidden rounded-2xl p-6 transition-all duration-300; + @apply hover:scale-105 hover:shadow-2xl; + @apply bg-gradient-to-br from-neutral-50 to-neutral-100; + @apply dark:from-neutral-900 dark:to-neutral-800; + } + + .agent-card.active { + @apply ring-2 ring-blue-500 ring-offset-2 dark:ring-offset-neutral-950; + animation: pulse-glow 2s infinite; + } + + @keyframes pulse-glow { + 0%, 100% { + box-shadow: 0 0 0 0 rgba(59, 130, 246, 0.4); + } + 50% { + box-shadow: 0 0 0 10px rgba(59, 130, 246, 0); + } + } + + .workflow-line { + stroke-dasharray: 1000; + stroke-dashoffset: 1000; + animation: draw 2s ease-in-out forwards; + } + + @keyframes draw { + to { + stroke-dashoffset: 0; + } + } + + .content-section { + @apply opacity-0 transform translate-y-4; + animation: fadeInUp 0.6s ease-out forwards; + } + + @keyframes fadeInUp { + to { + opacity: 1; + transform: translateY(0); + } + } +} + +@layer utilities { + .scrollbar-thin { + scrollbar-width: thin; + scrollbar-color: theme('colors.neutral.400') transparent; + } + + .scrollbar-thin::-webkit-scrollbar { + width: 6px; + height: 6px; + } + + .scrollbar-thin::-webkit-scrollbar-track { + background: transparent; + } + + .scrollbar-thin::-webkit-scrollbar-thumb { + @apply bg-neutral-400 dark:bg-neutral-600 rounded-full; + } + + .scrollbar-thin::-webkit-scrollbar-thumb:hover { + @apply bg-neutral-500 dark:bg-neutral-500; + } +} \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/main.tsx b/web_frontend/exhibition-demo/src/main.tsx new file mode 100644 index 00000000..b3c11a73 --- /dev/null +++ b/web_frontend/exhibition-demo/src/main.tsx @@ -0,0 +1,10 @@ +import React from 'react'; +import ReactDOM from 'react-dom/client'; +import App from './App'; +import './index.css'; + +ReactDOM.createRoot(document.getElementById('root')!).render( + + + +); \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/pages/LandingPage.tsx b/web_frontend/exhibition-demo/src/pages/LandingPage.tsx new file mode 100644 index 00000000..016ad710 --- /dev/null +++ b/web_frontend/exhibition-demo/src/pages/LandingPage.tsx @@ -0,0 +1,131 @@ +import React from 'react'; +import { motion } from 'framer-motion'; +import { ArrowRight, Sparkles, Layers, Zap } from 'lucide-react'; + +interface LandingPageProps { + onStart: () => void; +} + +const LandingPage: React.FC = ({ onStart }) => { + return ( +
+
+ + {/* Logo/Icon */} + + + + + {/* Title */} + +

+ AI 会展策划系统 +

+

+ 多Agent协同 · 智能生成 · 专业方案 +

+
+ + {/* Features */} + +
+ +

7个专业Agent

+

+ 覆盖策划全流程 +

+
+ +
+ +

实时协作

+

+ 智能工作流编排 +

+
+ +
+ +

专业输出

+

+ 完整策划方案 +

+
+
+ + {/* Demo Info */} + +

演示案例

+
+

+ 项目: + 2024长三角国际新能源汽车与智能交通产业博览会 +

+

+ 规模: + 50,000平方米展览面积,350家参展商,预计50,000人次参观 +

+

+ 时长: + 约3分钟完整演示 +

+
+
+ + {/* Start Button */} + + 开始演示 + + + {/* Glow effect */} +
+ + + {/* Footer */} + + Powered by n8n Workflow · DeepSeek · Google Gemini + + +
+
+ ); +}; + +export default LandingPage; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/pages/ResultPage.tsx b/web_frontend/exhibition-demo/src/pages/ResultPage.tsx new file mode 100644 index 00000000..5a3b5a30 --- /dev/null +++ b/web_frontend/exhibition-demo/src/pages/ResultPage.tsx @@ -0,0 +1,261 @@ +import React, { useState } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { + FileText, + Target, + TrendingUp, + Calendar, + DollarSign, + AlertTriangle, + ChevronLeft, + ChevronRight, + RotateCcw, + Download +} from 'lucide-react'; +import { useDemoStore } from '../store/demoStore'; + +interface ResultPageProps { + onRestart: () => void; +} + +const sections = [ + { id: 'overview', title: '策划案概述', icon: FileText }, + { id: 'introduction', title: '展会介绍与预期效果', icon: Target }, + { id: 'marketing', title: '营销方案', icon: TrendingUp }, + { id: 'operation', title: '现场运营方案', icon: Calendar }, + { id: 'budget', title: '预算与收益分析', icon: DollarSign }, + { id: 'risk', title: '风险评估与应急预案', icon: AlertTriangle }, +]; + +const ResultPage: React.FC = ({ onRestart }) => { + const [currentSection, setCurrentSection] = useState(0); + const { generatedContent } = useDemoStore(); + + const handlePrevious = () => { + if (currentSection > 0) { + setCurrentSection(currentSection - 1); + } + }; + + const handleNext = () => { + if (currentSection < sections.length - 1) { + setCurrentSection(currentSection + 1); + } + }; + + // Mock content for demonstration + const getSectionContent = (sectionId: string) => { + const mockContent = { + overview: { + title: '2024长三角国际新能源汽车与智能交通产业博览会', + content: ` +## 策划背景 +在全球碳中和目标推动下,新能源汽车产业迎来爆发式增长。长三角地区作为中国汽车产业核心集群,聚集了特斯拉、上汽、蔚来等龙头企业。 + +## 策划目的 +- 打造长三角地区新能源汽车与智能交通领域第一展会品牌 +- 吸引300家优质展商,实现现场意向交易额超8亿元人民币 +- 促进产业链上下游合作,推动技术创新和产业升级 +- 推广绿色出行理念,助力碳中和目标实现 + `, + images: ['/api/placeholder/600/400', '/api/placeholder/600/400'] + }, + introduction: { + title: '展会规模与预期', + content: ` +## 展会主题 +「智行未来,绿动长三角」 + +## 预计规模 +- 展览面积:50,000平方米 +- 标准展位:1,200个(9平米/个) +- 特装展位:20,000平方米 +- 参展商家数:350家 +- 参观人次:50,000人次 + +## 预期效果 +- 现场成交额预计超10亿元 +- 带动相关产业收入约30亿元 +- 媒体曝光量超1亿次 + `, + images: [] + }, + // Add more sections... + }; + + return mockContent[sectionId] || generatedContent[sectionId] || mockContent.overview; + }; + + const currentSectionData = getSectionContent(sections[currentSection].id); + + return ( +
+
+ {/* Header */} + +
+

+ 会展策划方案 +

+ +
+ + + +
+
+
+ + {/* Section Tabs */} + +
+ {sections.map((section, index) => { + const Icon = section.icon; + return ( + + ); + })} +
+
+ + {/* Content Area */} + + + {/* Section Header */} +
+

+ {currentSectionData.title} +

+
+
+ + {/* Section Content */} +
+
+ {currentSectionData.content} +
+
+ + {/* Images */} + {currentSectionData.images && currentSectionData.images.length > 0 && ( +
+ {currentSectionData.images.map((src, index) => ( + + {`Section + + ))} +
+ )} + + + + {/* Navigation */} + + + + {/* Page Indicators */} +
+ {sections.map((_, index) => ( +
+ ))} +
+ + + +
+
+ ); +}; + +export default ResultPage; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/pages/WorkflowPage.tsx b/web_frontend/exhibition-demo/src/pages/WorkflowPage.tsx new file mode 100644 index 00000000..6c3a75f6 --- /dev/null +++ b/web_frontend/exhibition-demo/src/pages/WorkflowPage.tsx @@ -0,0 +1,169 @@ +import React, { useEffect, useState } from 'react'; +import { motion, AnimatePresence } from 'framer-motion'; +import { useDemoStore } from '../store/demoStore'; +import AgentCard from '../components/AgentCard'; +import WorkflowVisualization from '../components/WorkflowVisualization'; +import ContentGenerator from '../components/ContentGenerator'; +import ProgressBar from '../components/ProgressBar'; +import { Play, Pause, RotateCcw } from 'lucide-react'; + +const WorkflowPage: React.FC = () => { + const { + status, + agents, + currentAgent, + progress, + startDemo, + pauseDemo, + resumeDemo, + reset, + } = useDemoStore(); + + const [showContent, setShowContent] = useState(false); + + useEffect(() => { + // 自动开始演示 + if (status === 'idle') { + setTimeout(() => { + startDemo(); + }, 500); + } + }, [status, startDemo]); + + const handleTogglePlay = () => { + if (status === 'running') { + pauseDemo(); + } else if (status === 'paused') { + resumeDemo(); + } + }; + + return ( +
+
+ {/* Header */} + +
+

+ AI Agent 协作流程 +

+ + {/* Control Buttons */} +
+ + + +
+
+ + {/* Progress Bar */} + +
+ + {/* Main Content Area */} +
+ {/* Left: Workflow Visualization */} + +
+

工作流程图

+ +
+
+ + {/* Right: Content Area */} + + {/* Active Agent Display */} +
+

当前执行

+ + {currentAgent && ( + + a.id === currentAgent)!} + isActive={true} + /> + + )} + +
+ + {/* Content Generation Display */} + {showContent && ( + +

生成内容

+ +
+ )} +
+
+ + {/* Bottom: Agent List */} + +
+

Agent 团队

+
+ {agents.map((agent) => ( + + + + ))} +
+
+
+
+
+ ); +}; + +export default WorkflowPage; \ No newline at end of file diff --git a/web_frontend/exhibition-demo/src/store/demoStore.ts b/web_frontend/exhibition-demo/src/store/demoStore.ts new file mode 100644 index 00000000..54c0addf --- /dev/null +++ b/web_frontend/exhibition-demo/src/store/demoStore.ts @@ -0,0 +1,165 @@ +import { create } from 'zustand'; + +export interface Agent { + id: string; + name: string; + icon: string; + model: string; + role: string; + status: 'waiting' | 'thinking' | 'generating' | 'done'; + input?: string; + output?: string; + prompt?: string; +} + +export interface DemoState { + // 演示状态 + status: 'idle' | 'running' | 'paused' | 'completed'; + currentPhase: number; + currentAgent: string | null; + progress: number; + + // Agent配置 + agents: Agent[]; + + // 生成的内容 + generatedContent: { + [key: string]: { + title: string; + content: string; + images: string[]; + isComplete: boolean; + }; + }; + + // 控制选项 + controls: { + speed: number; // 1-5倍速 + autoAdvance: boolean; + showDetails: boolean; + }; + + // Actions + startDemo: () => void; + pauseDemo: () => void; + resumeDemo: () => void; + setCurrentAgent: (agentId: string) => void; + updateAgentStatus: (agentId: string, status: Agent['status']) => void; + updateAgentOutput: (agentId: string, output: string) => void; + addGeneratedContent: (section: string, content: any) => void; + setProgress: (progress: number) => void; + reset: () => void; +} + +const initialAgents: Agent[] = [ + { + id: 'retrieval', + name: '信息检索专家', + icon: '🔍', + model: 'DeepSeek Chat Model5', + role: '市场调研、数据收集、竞品分析', + status: 'waiting', + }, + { + id: 'design', + name: '设计专家', + icon: '🎨', + model: 'Google Gemini Chat Model2', + role: '视觉设计、空间布局、品牌形象', + status: 'waiting', + }, + { + id: 'budget', + name: '财务预算专家', + icon: '💰', + model: 'DeepSeek Chat Model2', + role: '成本核算、预算规划、ROI分析', + status: 'waiting', + }, + { + id: 'format', + name: '格式编辑专家', + icon: '📝', + model: 'DeepSeek Chat Model4', + role: '文档格式化、内容结构优化', + status: 'waiting', + }, + { + id: 'execution', + name: '活动执行专家', + icon: '⚡', + model: 'DeepSeek Chat Model1', + role: '执行计划、时间线管理、任务分配', + status: 'waiting', + }, + { + id: 'marketing', + name: '营销宣传专家', + icon: '📢', + model: 'DeepSeek Chat Model3', + role: '推广策略、媒体规划、品牌传播', + status: 'waiting', + }, + { + id: 'coordinator', + name: '会展策划专家', + icon: '🎯', + model: 'Chat Models + Memories', + role: '中央协调、方案整合、决策支持', + status: 'waiting', + }, +]; + +export const useDemoStore = create((set) => ({ + status: 'idle', + currentPhase: 0, + currentAgent: null, + progress: 0, + agents: initialAgents, + generatedContent: {}, + controls: { + speed: 1, + autoAdvance: true, + showDetails: true, + }, + + startDemo: () => set({ status: 'running', progress: 0 }), + pauseDemo: () => set({ status: 'paused' }), + resumeDemo: () => set({ status: 'running' }), + + setCurrentAgent: (agentId) => set({ currentAgent: agentId }), + + updateAgentStatus: (agentId, status) => + set((state) => ({ + agents: state.agents.map((agent) => + agent.id === agentId ? { ...agent, status } : agent + ), + })), + + updateAgentOutput: (agentId, output) => + set((state) => ({ + agents: state.agents.map((agent) => + agent.id === agentId ? { ...agent, output } : agent + ), + })), + + addGeneratedContent: (section, content) => + set((state) => ({ + generatedContent: { + ...state.generatedContent, + [section]: content, + }, + })), + + setProgress: (progress) => set({ progress }), + + reset: () => + set({ + status: 'idle', + currentPhase: 0, + currentAgent: null, + progress: 0, + agents: initialAgents, + generatedContent: {}, + }), +})); \ No newline at end of file diff --git a/web_frontend/exhibition-demo/tailwind.config.js b/web_frontend/exhibition-demo/tailwind.config.js new file mode 100644 index 00000000..78abdd86 --- /dev/null +++ b/web_frontend/exhibition-demo/tailwind.config.js @@ -0,0 +1,86 @@ +/** @type {import('tailwindcss').Config} */ +export default { + content: [ + "./index.html", + "./src/**/*.{js,ts,jsx,tsx}", + ], + theme: { + extend: { + colors: { + // 参考 Raycast / 字节跳动设计风格的配色 + primary: { + 50: '#f0f9ff', + 100: '#e0f2fe', + 200: '#bae6fd', + 300: '#7dd3fc', + 400: '#38bdf8', + 500: '#0ea5e9', + 600: '#0284c7', + 700: '#0369a1', + 800: '#075985', + 900: '#0c4a6e', + }, + neutral: { + 50: '#fafafa', + 100: '#f5f5f5', + 200: '#e5e5e5', + 300: '#d4d4d4', + 400: '#a3a3a3', + 500: '#737373', + 600: '#525252', + 700: '#404040', + 800: '#262626', + 900: '#171717', + 950: '#0a0a0a', + }, + accent: { + purple: '#8b5cf6', + blue: '#3b82f6', + green: '#10b981', + orange: '#f97316', + } + }, + fontFamily: { + sans: ['Inter', 'SF Pro Display', '-apple-system', 'BlinkMacSystemFont', 'system-ui', 'sans-serif'], + mono: ['SF Mono', 'Monaco', 'Consolas', 'monospace'], + }, + animation: { + 'fade-in': 'fadeIn 0.5s ease-in-out', + 'slide-up': 'slideUp 0.5s ease-out', + 'pulse-soft': 'pulseSoft 2s infinite', + 'typewriter': 'typewriter 0.1s steps(1)', + 'glow': 'glow 2s ease-in-out infinite', + }, + keyframes: { + fadeIn: { + '0%': { opacity: '0' }, + '100%': { opacity: '1' }, + }, + slideUp: { + '0%': { transform: 'translateY(10px)', opacity: '0' }, + '100%': { transform: 'translateY(0)', opacity: '1' }, + }, + pulseSoft: { + '0%, 100%': { opacity: '1' }, + '50%': { opacity: '0.5' }, + }, + typewriter: { + '0%': { opacity: '0' }, + '100%': { opacity: '1' }, + }, + glow: { + '0%, 100%': { + boxShadow: '0 0 5px rgba(59, 130, 246, 0.5), 0 0 20px rgba(59, 130, 246, 0.3)' + }, + '50%': { + boxShadow: '0 0 20px rgba(59, 130, 246, 0.7), 0 0 40px rgba(59, 130, 246, 0.5)' + }, + }, + }, + backdropBlur: { + xs: '2px', + }, + }, + }, + plugins: [], +} \ No newline at end of file diff --git a/web_frontend/exhibition-demo/tsconfig.json b/web_frontend/exhibition-demo/tsconfig.json new file mode 100644 index 00000000..f9a81ca8 --- /dev/null +++ b/web_frontend/exhibition-demo/tsconfig.json @@ -0,0 +1,31 @@ +{ + "compilerOptions": { + "target": "ES2020", + "useDefineForClassFields": true, + "lib": ["ES2020", "DOM", "DOM.Iterable"], + "module": "ESNext", + "skipLibCheck": true, + + /* Bundler mode */ + "moduleResolution": "bundler", + "allowImportingTsExtensions": true, + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true, + "jsx": "react-jsx", + + /* Linting */ + "strict": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "noFallthroughCasesInSwitch": true, + + /* Path mapping */ + "baseUrl": ".", + "paths": { + "@/*": ["src/*"] + } + }, + "include": ["src"], + "references": [{ "path": "./tsconfig.node.json" }] +} \ No newline at end of file diff --git a/web_frontend/exhibition-demo/tsconfig.node.json b/web_frontend/exhibition-demo/tsconfig.node.json new file mode 100644 index 00000000..099658cf --- /dev/null +++ b/web_frontend/exhibition-demo/tsconfig.node.json @@ -0,0 +1,10 @@ +{ + "compilerOptions": { + "composite": true, + "skipLibCheck": true, + "module": "ESNext", + "moduleResolution": "bundler", + "allowSyntheticDefaultImports": true + }, + "include": ["vite.config.ts"] +} \ No newline at end of file diff --git a/web_frontend/exhibition-demo/vite.config.ts b/web_frontend/exhibition-demo/vite.config.ts new file mode 100644 index 00000000..aed15822 --- /dev/null +++ b/web_frontend/exhibition-demo/vite.config.ts @@ -0,0 +1,12 @@ +import { defineConfig } from 'vite' +import react from '@vitejs/plugin-react' + +// https://vitejs.dev/config/ +export default defineConfig({ + plugins: [react()], + resolve: { + alias: { + '@': '/src', + }, + }, +}) \ No newline at end of file