-
diff --git a/packages/design-system/src/css/_tokens.dark.scss b/packages/design-system/src/css/_tokens.dark.scss
index 6a812552ac..8865fb2e3e 100644
--- a/packages/design-system/src/css/_tokens.dark.scss
+++ b/packages/design-system/src/css/_tokens.dark.scss
@@ -71,6 +71,7 @@
--color-canvas-dot: var(--prim-gray-670);
--color-canvas-read-only-line: var(--prim-gray-800);
--color-canvas-selected: var(--prim-gray-0-alpha-025);
+ --color-canvas-selected-transparent: var(--color-canvas-selected);
// Nodes
--color-node-background: var(--prim-gray-740);
diff --git a/packages/design-system/src/css/_tokens.scss b/packages/design-system/src/css/_tokens.scss
index e65856f192..7b1adf0d36 100644
--- a/packages/design-system/src/css/_tokens.scss
+++ b/packages/design-system/src/css/_tokens.scss
@@ -79,6 +79,7 @@
--color-canvas-dot: var(--prim-gray-120);
--color-canvas-read-only-line: var(--prim-gray-30);
--color-canvas-selected: var(--prim-gray-70);
+ --color-canvas-selected-transparent: hsla(var(--prim-gray-h), 47%, 30%, 0.1);
// Nodes
--color-node-background: var(--color-background-xlight);
diff --git a/packages/design-system/src/locale/lang/en.ts b/packages/design-system/src/locale/lang/en.ts
index 444acc61c0..449a617f91 100644
--- a/packages/design-system/src/locale/lang/en.ts
+++ b/packages/design-system/src/locale/lang/en.ts
@@ -32,7 +32,7 @@ export default {
'askAssistantButton.askAssistant': 'Ask Assistant',
'assistantChat.errorParsingMarkdown': 'Error parsing markdown content',
'assistantChat.aiAssistantLabel': 'AI Assistant',
- 'assistantChat.aiAssistantName': 'Ava',
+ 'assistantChat.aiAssistantName': 'Assistant',
'assistantChat.sessionEndMessage.1':
'This Assistant session has ended. To start a new session with the Assistant, click an',
'assistantChat.sessionEndMessage.2': 'button in n8n',
diff --git a/packages/design-system/src/utils/index.ts b/packages/design-system/src/utils/index.ts
index 3f4ed339f0..be6ddc6375 100644
--- a/packages/design-system/src/utils/index.ts
+++ b/packages/design-system/src/utils/index.ts
@@ -4,3 +4,4 @@ export * from './markdown';
export * from './typeguards';
export * from './uid';
export * from './valueByPath';
+export * from './testUtils';
diff --git a/packages/design-system/src/utils/testUtils.ts b/packages/design-system/src/utils/testUtils.ts
new file mode 100644
index 0000000000..e632d3e1bf
--- /dev/null
+++ b/packages/design-system/src/utils/testUtils.ts
@@ -0,0 +1,18 @@
+const DYNAMIC_ATTRIBUTES = ['aria-controls'];
+
+/**
+ * Deletes dynamic attributes from the container children so snapshots can be tested.
+ *
+ * Background:
+ * Vue test utils use server rendering to render components (https://v1.test-utils.vuejs.org/api/render.html#render).
+ * Element UI in SSR mode adds dynamic attributes to the rendered HTML each time the test is run (https://element-plus.org/en-US/guide/ssr#provide-an-id).
+ *
+ * NOTE: Make sure to manually remove same attributes from the expected snapshot.
+ */
+// TODO: Find a way to inject static value for dynamic attributes in tests
+export function removeDynamicAttributes(container: Element): void {
+ DYNAMIC_ATTRIBUTES.forEach((attribute) => {
+ const elements = container.querySelectorAll(`[${attribute}]`);
+ elements.forEach((element) => element.removeAttribute(attribute));
+ });
+}
diff --git a/packages/editor-ui/package.json b/packages/editor-ui/package.json
index 279233c94f..c81e9b960a 100644
--- a/packages/editor-ui/package.json
+++ b/packages/editor-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "n8n-editor-ui",
- "version": "1.55.0",
+ "version": "1.56.0",
"description": "Workflow Editor UI for n8n",
"main": "index.js",
"scripts": {
@@ -44,6 +44,7 @@
"@vueuse/components": "^10.11.0",
"@vueuse/core": "^10.11.0",
"axios": "catalog:",
+ "bowser": "2.11.0",
"chart.js": "^4.4.0",
"codemirror-lang-html-n8n": "^1.0.0",
"dateformat": "^3.0.3",
diff --git a/packages/editor-ui/src/App.vue b/packages/editor-ui/src/App.vue
index 835ddd11c0..cc9c141500 100644
--- a/packages/editor-ui/src/App.vue
+++ b/packages/editor-ui/src/App.vue
@@ -47,7 +47,7 @@ import AskAssistantFloatingButton from '@/components/AskAssistant/AskAssistantFl
import { HIRING_BANNER, VIEWS } from '@/constants';
import { loadLanguage } from '@/plugins/i18n';
-import useGlobalLinkActions from '@/composables/useGlobalLinkActions';
+import { useGlobalLinkActions } from '@/composables/useGlobalLinkActions';
import { useExternalHooks } from '@/composables/useExternalHooks';
import { useToast } from '@/composables/useToast';
import { useCloudPlanStore } from '@/stores/cloudPlan.store';
diff --git a/packages/editor-ui/src/Interface.ts b/packages/editor-ui/src/Interface.ts
index 05c40402f1..a3f17a5582 100644
--- a/packages/editor-ui/src/Interface.ts
+++ b/packages/editor-ui/src/Interface.ts
@@ -48,6 +48,7 @@ import type {
NodeConnectionType,
INodeCredentialsDetails,
StartNodeData,
+ IPersonalizationSurveyAnswersV4,
} from 'n8n-workflow';
import type { BulkCommand, Undoable } from '@/models/history';
import type { PartialBy, TupleToUnion } from '@/utils/typeHelpers';
@@ -648,24 +649,6 @@ export type IPersonalizationSurveyAnswersV3 = {
email?: string | null;
};
-export type IPersonalizationSurveyAnswersV4 = {
- version: 'v4';
- automationGoalDevops?: string[] | null;
- automationGoalDevopsOther?: string | null;
- companyIndustryExtended?: string[] | null;
- otherCompanyIndustryExtended?: string[] | null;
- companySize?: string | null;
- companyType?: string | null;
- automationGoalSm?: string[] | null;
- automationGoalSmOther?: string | null;
- usageModes?: string[] | null;
- email?: string | null;
- role?: string | null;
- roleOther?: string | null;
- reportedSource?: string | null;
- reportedSourceOther?: string | null;
-};
-
export type IPersonalizationLatestVersion = IPersonalizationSurveyAnswersV4;
export type IPersonalizationSurveyVersions =
diff --git a/packages/editor-ui/src/__tests__/mocks.ts b/packages/editor-ui/src/__tests__/mocks.ts
index dad814f6eb..dac9c9c478 100644
--- a/packages/editor-ui/src/__tests__/mocks.ts
+++ b/packages/editor-ui/src/__tests__/mocks.ts
@@ -25,7 +25,7 @@ import {
SET_NODE_TYPE,
STICKY_NODE_TYPE,
} from '@/constants';
-import type { INodeUi } from '@/Interface';
+import type { INodeUi, IWorkflowDb } from '@/Interface';
export const mockNode = ({
id = uuid(),
@@ -147,6 +147,35 @@ export function createTestWorkflowObject({
});
}
+export function createTestWorkflow({
+ id = uuid(),
+ name = 'Test Workflow',
+ nodes = [],
+ connections = {},
+ active = false,
+ settings = {
+ timezone: 'DEFAULT',
+ executionOrder: 'v1',
+ },
+ pinData = {},
+ ...rest
+}: Partial
= {}): IWorkflowDb {
+ return {
+ createdAt: '',
+ updatedAt: '',
+ id,
+ name,
+ nodes,
+ connections,
+ active,
+ settings,
+ versionId: '1',
+ meta: {},
+ pinData,
+ ...rest,
+ };
+}
+
export function createTestNode(node: Partial = {}): INode {
return {
id: uuid(),
diff --git a/packages/editor-ui/src/__tests__/utils.ts b/packages/editor-ui/src/__tests__/utils.ts
index 8090227ee5..ccbcd13bd3 100644
--- a/packages/editor-ui/src/__tests__/utils.ts
+++ b/packages/editor-ui/src/__tests__/utils.ts
@@ -72,7 +72,7 @@ export const SETTINGS_STORE_DEFAULT_STATE: ISettingsState = {
};
export const getDropdownItems = async (dropdownTriggerParent: HTMLElement) => {
- await userEvent.click(within(dropdownTriggerParent).getByRole('textbox'));
+ await userEvent.click(within(dropdownTriggerParent).getByRole('combobox'));
const selectTrigger = dropdownTriggerParent.querySelector(
'.select-trigger[aria-describedby]',
) as HTMLElement;
@@ -84,3 +84,9 @@ export const getDropdownItems = async (dropdownTriggerParent: HTMLElement) => {
return selectDropdown.querySelectorAll('.el-select-dropdown__item');
};
+
+export const getSelectedDropdownValue = async (items: NodeListOf) => {
+ const selectedItem = Array.from(items).find((item) => item.classList.contains('selected'));
+ expect(selectedItem).toBeInTheDocument();
+ return selectedItem?.querySelector('p')?.textContent?.trim();
+};
diff --git a/packages/editor-ui/src/api/assistant.ts b/packages/editor-ui/src/api/assistant.ts
index d9e9ec0cde..4b1d127ef1 100644
--- a/packages/editor-ui/src/api/assistant.ts
+++ b/packages/editor-ui/src/api/assistant.ts
@@ -9,7 +9,14 @@ export function chatWithAssistant(
onDone: () => void,
onError: (e: Error) => void,
): void {
- void streamRequest(ctx, '/ai-assistant/chat', payload, onMessageUpdated, onDone, onError);
+ void streamRequest(
+ ctx,
+ '/ai-assistant/chat',
+ payload,
+ onMessageUpdated,
+ onDone,
+ onError,
+ );
}
export async function replaceCode(
diff --git a/packages/editor-ui/src/api/users.ts b/packages/editor-ui/src/api/users.ts
index a27faea7b7..aedbd0b594 100644
--- a/packages/editor-ui/src/api/users.ts
+++ b/packages/editor-ui/src/api/users.ts
@@ -90,7 +90,6 @@ export async function changePassword(
}
export type UpdateCurrentUserParams = {
- id?: string;
firstName?: string;
lastName?: string;
email: string;
diff --git a/packages/editor-ui/src/components/AskAssistant/AskAssistantChat.vue b/packages/editor-ui/src/components/AskAssistant/AskAssistantChat.vue
index 073b7f937f..6a379e0a5f 100644
--- a/packages/editor-ui/src/components/AskAssistant/AskAssistantChat.vue
+++ b/packages/editor-ui/src/components/AskAssistant/AskAssistantChat.vue
@@ -71,6 +71,7 @@ function onClose() {
:supported-directions="['left']"
:width="assistantStore.chatWidth"
:class="$style.container"
+ data-test-id="ask-assistant-sidebar"
@resize="onResizeDebounced"
>
{
const onClick = () => {
assistantStore.openChat();
- telemetry.track(
- 'User opened assistant',
- {
- source: 'canvas',
- task: 'placeholder',
- has_existing_session: !assistantStore.isSessionEnded,
- workflow_id: workflowStore.workflowId,
- },
- { withPostHog: true },
- );
+ telemetry.track('User opened assistant', {
+ source: 'canvas',
+ task: 'placeholder',
+ has_existing_session: !assistantStore.isSessionEnded,
+ workflow_id: workflowStore.workflowId,
+ });
};
@@ -45,6 +41,7 @@ const onClick = () => {
{
const startNewSession = async () => {
await assistantStore.initErrorHelper(props.data.context);
- telemetry.track(
- 'User opened assistant',
- {
- source: 'error',
- task: 'error',
- has_existing_session: true,
- workflow_id: workflowsStore.workflowId,
- node_type: props.data.context.node.type,
- error: props.data.context.error,
- chat_session_id: assistantStore.currentSessionId,
- },
- { withPostHog: true },
- );
+ telemetry.track('User opened assistant', {
+ source: 'error',
+ task: 'error',
+ has_existing_session: true,
+ workflow_id: workflowsStore.workflowId,
+ node_type: props.data.context.node.type,
+ error: props.data.context.error,
+ chat_session_id: assistantStore.currentSessionId,
+ });
close();
};
-
+
{{ i18n.baseText('aiAssistant.newSessionModal.title.part1') }}
diff --git a/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue b/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue
index 0708a4ea0d..39f77f0fcf 100644
--- a/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue
+++ b/packages/editor-ui/src/components/ButtonParameter/ButtonParameter.vue
@@ -68,16 +68,6 @@ function getPath(parameter: string) {
return (props.path ? `${props.path}.` : '') + parameter;
}
-function createPrompt(prompt: string) {
- return `
-Important! The original input must remain unchanged. If there is a risk of modifying the original input, create a copy of it before making any changes. Use appropriate methods to ensure that the properties of objects are not directly altered.
-
-Always return an array
-
-${prompt}
-`;
-}
-
async function onSubmit() {
const { activeNode } = useNDVStore();
const { showMessage } = useToast();
@@ -111,7 +101,7 @@ async function onSubmit() {
: 'gpt-3.5-turbo-16k';
const payload = {
- question: createPrompt(prompt.value),
+ question: prompt.value,
context: {
schema: schemas.parentNodesSchemas,
inputSchema: schemas.inputSchema!,
diff --git a/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue b/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue
index 36a5d169e1..1e19e4400f 100644
--- a/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue
+++ b/packages/editor-ui/src/components/CodeNodeEditor/CodeNodeEditor.vue
@@ -118,7 +118,7 @@ const i18n = useI18n();
const telemetry = useTelemetry();
onMounted(() => {
- if (!props.isReadOnly) codeNodeEditorEventBus.on('error-line-number', highlightLine);
+ if (!props.isReadOnly) codeNodeEditorEventBus.on('highlightLine', highlightLine);
codeNodeEditorEventBus.on('codeDiffApplied', diffApplied);
@@ -188,7 +188,7 @@ onMounted(() => {
onBeforeUnmount(() => {
codeNodeEditorEventBus.off('codeDiffApplied', diffApplied);
- if (!props.isReadOnly) codeNodeEditorEventBus.off('error-line-number', highlightLine);
+ if (!props.isReadOnly) codeNodeEditorEventBus.off('highlightLine', highlightLine);
});
const aiEnabled = computed(() => {
diff --git a/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue b/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue
index 13bfcf9c75..0fd54b0a73 100644
--- a/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue
+++ b/packages/editor-ui/src/components/ContextMenu/ContextMenu.vue
@@ -2,11 +2,13 @@
import { type ContextMenuAction, useContextMenu } from '@/composables/useContextMenu';
import { N8nActionDropdown } from 'n8n-design-system';
import { watch, ref } from 'vue';
+import { onClickOutside } from '@vueuse/core';
const contextMenu = useContextMenu();
const { position, isOpen, actions, target } = contextMenu;
const dropdown = ref>();
const emit = defineEmits<{ action: [action: ContextMenuAction, nodeIds: string[]] }>();
+const container = ref();
watch(
isOpen,
@@ -26,7 +28,7 @@ function onActionSelect(item: string) {
emit('action', action, contextMenu.targetNodeIds.value);
}
-function onClickOutside(event: MouseEvent) {
+function closeMenu(event: MouseEvent) {
event.preventDefault();
event.stopPropagation();
contextMenu.close();
@@ -37,12 +39,14 @@ function onVisibleChange(open: boolean) {
contextMenu.close();
}
}
+
+onClickOutside(container, closeMenu);
-
diff --git a/packages/editor-ui/src/components/ExpandableInput/ExpandableInputEdit.vue b/packages/editor-ui/src/components/ExpandableInput/ExpandableInputEdit.vue
index abf7ac6a09..939701e141 100644
--- a/packages/editor-ui/src/components/ExpandableInput/ExpandableInputEdit.vue
+++ b/packages/editor-ui/src/components/ExpandableInput/ExpandableInputEdit.vue
@@ -2,7 +2,6 @@
{
+ if (inputRef.value) {
emit('blur', inputRef.value.value);
}
-}
+});
function onEscape() {
emit('esc');
diff --git a/packages/editor-ui/src/components/ExpressionParameterInput.vue b/packages/editor-ui/src/components/ExpressionParameterInput.vue
index 86e4c540a2..cb0c22ec30 100644
--- a/packages/editor-ui/src/components/ExpressionParameterInput.vue
+++ b/packages/editor-ui/src/components/ExpressionParameterInput.vue
@@ -1,5 +1,6 @@
-
+
diff --git a/packages/editor-ui/src/components/FilterConditions/OperatorSelect.vue b/packages/editor-ui/src/components/FilterConditions/OperatorSelect.vue
index ec7090bd2a..0cc0bec7dd 100644
--- a/packages/editor-ui/src/components/FilterConditions/OperatorSelect.vue
+++ b/packages/editor-ui/src/components/FilterConditions/OperatorSelect.vue
@@ -4,13 +4,15 @@ import { computed, ref } from 'vue';
import { OPERATOR_GROUPS } from './constants';
import type { FilterOperator } from './types';
import { getFilterOperator } from './utils';
+import type { FilterOperatorType } from 'n8n-workflow';
interface Props {
selected: string;
+ suggestedType?: FilterOperatorType;
readOnly?: boolean;
}
-const props = withDefaults(defineProps
(), { readOnly: false });
+const props = withDefaults(defineProps(), { readOnly: false, suggestedType: 'any' });
const selected = ref(props.selected);
const menuOpen = ref(false);
@@ -31,6 +33,8 @@ const selectedGroupIcon = computed(
const selectedOperator = computed(() => getFilterOperator(selected.value));
+const selectedType = computed(() => selectedOperator.value.type);
+
const onOperatorChange = (operator: string): void => {
selected.value = operator;
emit('operatorChange', operator);
@@ -65,12 +69,7 @@ function onGroupSelect(group: string) {
@mouseenter="shouldRenderItems = true"
>
-
+
@@ -84,12 +83,18 @@ function onGroupSelect(group: string) {
>
onGroupSelect(group.id)"
@click="() => onGroupSelect(group.id)"
>
-
+
{{ i18n.baseText(group.name) }}
@@ -116,7 +121,7 @@ function onGroupSelect(group: string) {
diff --git a/packages/editor-ui/src/components/ResourceLocator/resourceLocator.scss b/packages/editor-ui/src/components/ResourceLocator/resourceLocator.scss
new file mode 100644
index 0000000000..d2ec38a981
--- /dev/null
+++ b/packages/editor-ui/src/components/ResourceLocator/resourceLocator.scss
@@ -0,0 +1,121 @@
+$--mode-selector-width: 92px;
+
+.modeSelector {
+ --input-background-color: initial;
+ --input-font-color: initial;
+ --input-border-color: initial;
+ flex-basis: $--mode-selector-width;
+
+ input {
+ border-radius: var(--border-radius-base) 0 0 var(--border-radius-base);
+ border-right: none;
+ overflow: hidden;
+
+ &:focus {
+ border-right: var(--border-base);
+ }
+
+ &:disabled {
+ cursor: not-allowed !important;
+ }
+ }
+}
+
+.resourceLocator {
+ display: flex;
+ flex-wrap: wrap;
+ position: relative;
+
+ --input-issues-width: 28px;
+
+ .inputContainer {
+ display: flex;
+ align-items: center;
+ width: 100%;
+
+ --input-border-top-left-radius: 0;
+ --input-border-bottom-left-radius: 0;
+
+ > div {
+ width: 100%;
+ }
+ }
+
+ .background {
+ position: absolute;
+ background-color: var(--color-background-input-triple);
+ top: 0;
+ bottom: 0;
+ left: 0;
+ right: var(--input-issues-width);
+ border: 1px solid var(--border-color-base);
+ border-radius: var(--border-radius-base);
+ }
+
+ &.multipleModes {
+ .inputContainer {
+ display: flex;
+ align-items: center;
+ flex-basis: calc(100% - $--mode-selector-width);
+ flex-grow: 1;
+
+ input {
+ border-radius: 0 var(--border-radius-base) var(--border-radius-base) 0;
+ }
+ }
+ }
+}
+
+.droppable {
+ --input-border-color: var(--color-secondary-tint-1);
+ --input-border-style: dashed;
+}
+
+.activeDrop {
+ --input-border-color: var(--color-success);
+ --input-background-color: var(--color-success-tint-2);
+ --input-border-style: solid;
+
+ textarea,
+ input {
+ cursor: grabbing !important;
+ }
+}
+
+.selectInput input {
+ padding-right: 30px !important;
+ overflow: hidden;
+ text-overflow: ellipsis;
+}
+
+.selectIcon {
+ cursor: pointer;
+ font-size: 14px;
+ transition: transform 0.3s;
+ transform: rotateZ(0);
+
+ &.isReverse {
+ transform: rotateZ(180deg);
+ }
+}
+
+.listModeInputContainer * {
+ cursor: pointer;
+}
+
+.error {
+ max-width: 170px;
+ word-break: normal;
+ text-align: center;
+}
+
+.openResourceLink {
+ width: 25px !important;
+ padding-left: var(--spacing-2xs);
+ padding-top: var(--spacing-4xs);
+ align-self: flex-start;
+}
+
+.parameter-issues {
+ width: 25px !important;
+}
diff --git a/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue b/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue
index 1aa80a769f..502d83af1a 100644
--- a/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue
+++ b/packages/editor-ui/src/components/ResourceMapper/MatchingColumnsSelect.vue
@@ -93,6 +93,7 @@ const fieldDescription = computed
(() => {
resourceMapperTypeOptions.value?.multiKeyMatch === true
? `${pluralFieldWord.value}`
: `${singularFieldWord.value}`,
+ nodeDisplayName: props.serviceName,
},
});
});
diff --git a/packages/editor-ui/src/components/RunData.vue b/packages/editor-ui/src/components/RunData.vue
index a9188f2358..ec26ef9964 100644
--- a/packages/editor-ui/src/components/RunData.vue
+++ b/packages/editor-ui/src/components/RunData.vue
@@ -50,15 +50,17 @@
data-test-id="run-data-pane-header"
@click.stop
>
-
+
+
+
nodes.value.filter((node) => !props.search || !isDataEmpty(node.schema)),
);
+const nodeAdditionalInfo = (node: INodeUi) => {
+ const returnData: string[] = [];
+ if (node.disabled) {
+ returnData.push(i18n.baseText('node.disabled'));
+ }
+
+ const connections = ndvStore.ndvNodeInputNumber[node.name];
+ if (connections) {
+ if (connections.length === 1) {
+ returnData.push(`Input ${connections}`);
+ } else {
+ returnData.push(`Inputs ${connections.join(', ')}`);
+ }
+ }
+
+ return returnData.length ? `(${returnData.join(' | ')})` : '';
+};
+
const isDataEmpty = (schema: Schema | null) => {
if (!schema) return true;
// Utilize the generated schema instead of looping over the entire data again
@@ -292,7 +310,9 @@ watch(
{{ currentNode.node.name }}
- ({{ $locale.baseText('node.disabled') }})
+ {{
+ nodeAdditionalInfo(currentNode.node)
+ }}
div {
margin-bottom: var(--spacing-xs);
@@ -477,6 +498,13 @@ watch(
cursor: pointer;
}
+.subtitle {
+ margin-left: auto;
+ padding-left: var(--spacing-2xs);
+ color: var(--color-text-light);
+ font-weight: var(--font-weight-regular);
+}
+
.header {
display: flex;
align-items: center;
diff --git a/packages/editor-ui/src/components/RunDataSchemaItem.vue b/packages/editor-ui/src/components/RunDataSchemaItem.vue
index 34979053f7..18b1419329 100644
--- a/packages/editor-ui/src/components/RunDataSchemaItem.vue
+++ b/packages/editor-ui/src/components/RunDataSchemaItem.vue
@@ -198,6 +198,8 @@ const getIconBySchemaType = (type: Schema['type']): string => {
display: flex;
gap: var(--spacing-2xs);
align-items: baseline;
+ flex-grow: 1;
+ min-width: 0;
}
.sub {
@@ -212,6 +214,7 @@ const getIconBySchemaType = (type: Schema['type']): string => {
display: inline-flex;
flex-direction: column;
order: -1;
+ min-width: 0;
.innerSub > div:first-child {
margin-top: var(--spacing-2xs);
@@ -242,21 +245,14 @@ const getIconBySchemaType = (type: Schema['type']): string => {
height: 24px;
padding: 0 var(--spacing-3xs);
border: 1px solid var(--color-foreground-light);
- border-radius: 4px;
+ border-radius: var(--border-radius-base);
background-color: var(--color-background-xlight);
font-size: var(--font-size-2xs);
color: var(--color-text-dark);
+ max-width: 50%;
- span {
- display: flex;
- height: 100%;
- align-items: center;
-
- svg {
- path {
- fill: var(--color-text-light);
- }
- }
+ path {
+ fill: var(--color-text-light);
}
&.mappable {
@@ -273,11 +269,26 @@ const getIconBySchemaType = (type: Schema['type']): string => {
}
.label {
+ display: flex;
+ min-width: 0;
+ align-items: center;
+
> span {
+ display: flex;
+ align-items: center;
+
margin-left: var(--spacing-3xs);
padding-left: var(--spacing-3xs);
border-left: 1px solid var(--color-foreground-light);
+ overflow: hidden;
+
+ span {
+ overflow: hidden;
+ text-overflow: ellipsis;
+ white-space: nowrap;
+ }
+
&.arrayIndex {
border: 0;
padding-left: 0;
diff --git a/packages/editor-ui/src/components/SqlEditor/SqlEditor.vue b/packages/editor-ui/src/components/SqlEditor/SqlEditor.vue
index b6ef67981e..06ec2606b4 100644
--- a/packages/editor-ui/src/components/SqlEditor/SqlEditor.vue
+++ b/packages/editor-ui/src/components/SqlEditor/SqlEditor.vue
@@ -154,7 +154,7 @@ watch(segments, () => {
});
onMounted(() => {
- codeNodeEditorEventBus.on('error-line-number', highlightLine);
+ codeNodeEditorEventBus.on('highlightLine', highlightLine);
if (props.fullscreen) {
focus();
@@ -162,7 +162,7 @@ onMounted(() => {
});
onBeforeUnmount(() => {
- codeNodeEditorEventBus.off('error-line-number', highlightLine);
+ codeNodeEditorEventBus.off('highlightLine', highlightLine);
});
function line(lineNumber: number): Line | null {
diff --git a/packages/editor-ui/src/components/Sticky.vue b/packages/editor-ui/src/components/Sticky.vue
index f2ab61580a..8c2cd1fdd3 100644
--- a/packages/editor-ui/src/components/Sticky.vue
+++ b/packages/editor-ui/src/components/Sticky.vue
@@ -47,6 +47,7 @@
();
+
const setForceActions = (value: boolean) => {
forceActions.value = value;
};
@@ -200,6 +205,8 @@ export default defineComponent({
emit: emit as (event: string, ...args: unknown[]) => void,
});
+ onClickOutside(stickOptions, () => setColorPopoverVisible(false));
+
return {
deviceSupport,
toast,
@@ -209,6 +216,7 @@ export default defineComponent({
setForceActions,
isColorPopoverVisible,
setColorPopoverVisible,
+ stickOptions,
};
},
data() {
diff --git a/packages/editor-ui/src/components/TagsDropdown.vue b/packages/editor-ui/src/components/TagsDropdown.vue
index bcd02fd6fa..2b799f96a5 100644
--- a/packages/editor-ui/src/components/TagsDropdown.vue
+++ b/packages/editor-ui/src/components/TagsDropdown.vue
@@ -1,9 +1,5 @@
-
+
;
type TagRef = InstanceType;
@@ -116,6 +113,8 @@ export default defineComponent({
const focused = ref(false);
const preventUpdate = ref(false);
+ const container = ref();
+
const allTags = computed(() => {
return tagsStore.allTags;
});
@@ -252,18 +251,13 @@ export default defineComponent({
});
}
- function onClickOutside(e: Event) {
- const tagsDropdown = document.querySelector('.tags-dropdown');
- const tagsModal = document.querySelector('#tags-manager-modal');
-
- const clickInsideTagsDropdowns =
- tagsDropdown?.contains(e.target as Node) ?? tagsDropdown === e.target;
- const clickInsideTagsModal = tagsModal?.contains(e.target as Node) ?? tagsModal === e.target;
-
- if (!clickInsideTagsDropdowns && !clickInsideTagsModal && e.type === 'click') {
+ onClickOutside(
+ container,
+ () => {
emit('blur');
- }
- }
+ },
+ { ignore: ['.tags-dropdown', '#tags-manager-modal'] },
+ );
return {
i18n,
@@ -285,7 +279,7 @@ export default defineComponent({
filterOptions,
onVisibleChange,
onRemoveTag,
- onClickOutside,
+ container,
...useToast(),
};
},
diff --git a/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue
new file mode 100644
index 0000000000..41ba8d1a1b
--- /dev/null
+++ b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/WorkflowSelectorParameterInput.vue
@@ -0,0 +1,315 @@
+
+
+
+
+
+
+
+
+ {{ i18n.baseText('resourceLocator.mode.list.error.title') }}
+
+
+
+
+
+
+
+
+ {{ getModeLabel(mode) }}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourceLocatorDropdown.ts b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourceLocatorDropdown.ts
new file mode 100644
index 0000000000..f63b9207a9
--- /dev/null
+++ b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourceLocatorDropdown.ts
@@ -0,0 +1,34 @@
+import type { Ref } from 'vue';
+import { nextTick, ref } from 'vue';
+
+export function useWorkflowResourceLocatorDropdown(
+ isListMode: Ref,
+ inputRef: Ref,
+) {
+ const isDropdownVisible = ref(false);
+ const resourceDropdownHiding = ref(false);
+
+ function showDropdown() {
+ if (!isListMode.value || resourceDropdownHiding.value) {
+ return;
+ }
+
+ isDropdownVisible.value = true;
+ }
+
+ function hideDropdown() {
+ isDropdownVisible.value = false;
+
+ resourceDropdownHiding.value = true;
+ void nextTick(() => {
+ inputRef.value?.blur?.();
+ resourceDropdownHiding.value = false;
+ });
+ }
+
+ return {
+ isDropdownVisible,
+ showDropdown,
+ hideDropdown,
+ };
+}
diff --git a/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourceLocatorModes.ts b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourceLocatorModes.ts
new file mode 100644
index 0000000000..1e6cae4db5
--- /dev/null
+++ b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourceLocatorModes.ts
@@ -0,0 +1,67 @@
+import type { Ref } from 'vue';
+import { computed } from 'vue';
+import { useI18n } from '@/composables/useI18n';
+import type {
+ INodeParameterResourceLocator,
+ INodePropertyMode,
+ ResourceLocatorModes,
+} from 'n8n-workflow';
+import type { Router } from 'vue-router';
+import { useWorkflowResourcesLocator } from './useWorkflowResourcesLocator';
+
+export function useWorkflowResourceLocatorModes(
+ modelValue: Ref,
+ router: Router,
+) {
+ const i18n = useI18n();
+ const { getWorkflowName } = useWorkflowResourcesLocator(router);
+
+ const supportedModes = computed(() => [
+ {
+ name: 'list',
+ type: 'list',
+ displayName: i18n.baseText('resourceLocator.mode.list'),
+ },
+ {
+ type: 'string',
+ name: 'id',
+ displayName: i18n.baseText('resourceLocator.mode.id'),
+ },
+ ]);
+
+ const selectedMode = computed(() => modelValue.value?.mode || 'list');
+ const isListMode = computed(() => selectedMode.value === 'list');
+
+ function getUpdatedModePayload(value: ResourceLocatorModes): INodeParameterResourceLocator {
+ if (typeof modelValue !== 'object') {
+ return { __rl: true, value: modelValue, mode: value };
+ }
+
+ if (value === 'id' && selectedMode.value === 'list' && modelValue.value.value) {
+ return { __rl: true, mode: value, value: modelValue.value.value };
+ }
+
+ return {
+ __rl: true,
+ mode: value,
+ value: modelValue.value.value,
+ cachedResultName: getWorkflowName(modelValue.value.value?.toString() ?? ''),
+ };
+ }
+
+ function getModeLabel(mode: INodePropertyMode): string | null {
+ if (mode.name === 'id' || mode.name === 'list') {
+ return i18n.baseText(`resourceLocator.mode.${mode.name}`);
+ }
+
+ return mode.displayName;
+ }
+
+ return {
+ supportedModes,
+ selectedMode,
+ isListMode,
+ getUpdatedModePayload,
+ getModeLabel,
+ };
+}
diff --git a/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourcesLocator.ts b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourcesLocator.ts
new file mode 100644
index 0000000000..a34e9018e9
--- /dev/null
+++ b/packages/editor-ui/src/components/WorkflowSelectorParameterInput/useWorkflowResourcesLocator.ts
@@ -0,0 +1,93 @@
+import { ref, computed } from 'vue';
+import { useWorkflowsStore } from '@/stores/workflows.store';
+import { sortBy } from 'lodash-es';
+import type { Router } from 'vue-router';
+import { VIEWS } from '@/constants';
+
+import type { IWorkflowDb } from '@/Interface';
+
+export function useWorkflowResourcesLocator(router: Router) {
+ const workflowsStore = useWorkflowsStore();
+ const workflowsResources = ref>([]);
+ const isLoadingResources = ref(true);
+ const searchFilter = ref('');
+ const PAGE_SIZE = 40;
+
+ const sortedWorkflows = computed(() =>
+ sortBy(workflowsStore.allWorkflows, (workflow) =>
+ new Date(workflow.updatedAt).valueOf(),
+ ).reverse(),
+ );
+
+ const hasMoreWorkflowsToLoad = computed(
+ () => workflowsStore.allWorkflows.length > workflowsResources.value.length,
+ );
+
+ const filteredResources = computed(() => {
+ if (!searchFilter.value) return workflowsResources.value;
+
+ return workflowsStore.allWorkflows
+ .filter((resource) => resource.name.toLowerCase().includes(searchFilter.value.toLowerCase()))
+ .map(workflowDbToResourceMapper);
+ });
+
+ async function populateNextWorkflowsPage() {
+ if (workflowsStore.allWorkflows.length <= 1) {
+ await workflowsStore.fetchAllWorkflows();
+ }
+ const nextPage = sortedWorkflows.value.slice(
+ workflowsResources.value.length,
+ workflowsResources.value.length + PAGE_SIZE,
+ );
+
+ workflowsResources.value.push(...nextPage.map(workflowDbToResourceMapper));
+ }
+
+ async function setWorkflowsResources() {
+ isLoadingResources.value = true;
+ await populateNextWorkflowsPage();
+ isLoadingResources.value = false;
+ }
+
+ function workflowDbToResourceMapper(workflow: IWorkflowDb) {
+ return {
+ name: getWorkflowName(workflow.id),
+ value: workflow.id,
+ url: getWorkflowUrl(workflow.id),
+ };
+ }
+
+ function getWorkflowUrl(workflowId: string) {
+ const { href } = router.resolve({ name: VIEWS.WORKFLOW, params: { name: workflowId } });
+ return href;
+ }
+
+ function getWorkflowName(id: string): string {
+ const workflow = workflowsStore.getWorkflowById(id);
+ if (workflow) {
+ // Add the project name if it's not a personal project
+ if (workflow.homeProject && workflow.homeProject.type !== 'personal') {
+ return `${workflow.homeProject.name} — ${workflow.name}`;
+ }
+ return workflow.name;
+ }
+ return id;
+ }
+
+ function onSearchFilter(filter: string) {
+ searchFilter.value = filter;
+ }
+
+ return {
+ workflowsResources,
+ isLoadingResources,
+ hasMoreWorkflowsToLoad,
+ filteredResources,
+ searchFilter,
+ getWorkflowUrl,
+ onSearchFilter,
+ getWorkflowName,
+ populateNextWorkflowsPage,
+ setWorkflowsResources,
+ };
+}
diff --git a/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts b/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts
index afc9a6cf03..96f627026e 100644
--- a/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts
+++ b/packages/editor-ui/src/components/__tests__/ResourceMapper.test.ts
@@ -182,13 +182,18 @@ describe('ResourceMapper.vue', () => {
},
{ merge: true },
);
+
await waitAllPromises();
expect(getByText('Set the value for each foo')).toBeInTheDocument();
expect(
getByText('Look for incoming data that matches the foos in the service'),
).toBeInTheDocument();
expect(getByText('Foos to Match On')).toBeInTheDocument();
- expect(getByText('The foos that identify the row(s) to modify')).toBeInTheDocument();
+ expect(
+ getByText(
+ 'The foos to use when matching rows in the service to the input items of this node. Usually an ID.',
+ ),
+ ).toBeInTheDocument();
});
it('should render correct fields based on saved schema', async () => {
diff --git a/packages/editor-ui/src/components/__tests__/WorkflowLMChatModal.test.ts b/packages/editor-ui/src/components/__tests__/WorkflowLMChatModal.test.ts
index 41134e47ee..44716b1173 100644
--- a/packages/editor-ui/src/components/__tests__/WorkflowLMChatModal.test.ts
+++ b/packages/editor-ui/src/components/__tests__/WorkflowLMChatModal.test.ts
@@ -116,8 +116,10 @@ describe('WorkflowLMChatModal', () => {
await fireEvent.click(chatSendButton);
}
- await waitFor(() => expect(chatDialog.querySelectorAll('.chat-message')).toHaveLength(1));
+ await waitFor(() =>
+ expect(chatDialog.querySelectorAll('.chat-message-from-user')).toHaveLength(1),
+ );
- expect(chatDialog.querySelector('.chat-message')).toHaveTextContent('Hello!');
+ expect(chatDialog.querySelector('.chat-message-from-user')).toHaveTextContent('Hello!');
});
});
diff --git a/packages/editor-ui/src/components/canvas/Canvas.spec.ts b/packages/editor-ui/src/components/canvas/Canvas.spec.ts
index 9a3293738e..86a23e4651 100644
--- a/packages/editor-ui/src/components/canvas/Canvas.spec.ts
+++ b/packages/editor-ui/src/components/canvas/Canvas.spec.ts
@@ -8,16 +8,16 @@ import { createCanvasConnection, createCanvasNodeElement } from '@/__tests__/dat
import { NodeConnectionType } from 'n8n-workflow';
import type { useDeviceSupport } from 'n8n-design-system';
+const matchMedia = global.window.matchMedia;
// @ts-expect-error Initialize window object
global.window = jsdom.window as unknown as Window & typeof globalThis;
+global.window.matchMedia = matchMedia;
vi.mock('n8n-design-system', async (importOriginal) => {
const actual = await importOriginal();
return { ...actual, useDeviceSupport: vi.fn(() => ({ isCtrlKeyPressed: vi.fn() })) };
});
-vi.mock('@/composables/useDeviceSupport');
-
let renderComponent: ReturnType;
beforeEach(() => {
const pinia = createPinia();
diff --git a/packages/editor-ui/src/components/canvas/Canvas.vue b/packages/editor-ui/src/components/canvas/Canvas.vue
index c5995c5cd6..866bc644f7 100644
--- a/packages/editor-ui/src/components/canvas/Canvas.vue
+++ b/packages/editor-ui/src/components/canvas/Canvas.vue
@@ -1,9 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/packages/editor-ui/src/components/canvas/elements/buttons/__snapshots__/CanvasControlButtons.spec.ts.snap b/packages/editor-ui/src/components/canvas/elements/buttons/__snapshots__/CanvasControlButtons.spec.ts.snap
new file mode 100644
index 0000000000..6c9b638b90
--- /dev/null
+++ b/packages/editor-ui/src/components/canvas/elements/buttons/__snapshots__/CanvasControlButtons.spec.ts.snap
@@ -0,0 +1,25 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`CanvasChatButton > should render correctly 1`] = `
+"
+
+
+
+
+
+
+
+
+
+
"
+`;
diff --git a/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdgeToolbar.vue b/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdgeToolbar.vue
index acd164f5fe..fab32bf008 100644
--- a/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdgeToolbar.vue
+++ b/packages/editor-ui/src/components/canvas/elements/edges/CanvasEdgeToolbar.vue
@@ -35,6 +35,7 @@ function onDelete() {
+
+
diff --git a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue
index 4a62ee0e18..2f50454baa 100644
--- a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue
+++ b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/CanvasNodeDefault.vue
@@ -123,6 +123,7 @@ function openContextMenu(event: MouseEvent) {
--configurable-node--icon-offset: 40px;
--configurable-node--icon-size: 30px;
--trigger-node--border-radius: 36px;
+ --canvas-node--status-icons-offset: var(--spacing-2xs);
height: var(--canvas-node--height);
width: var(--canvas-node--width);
@@ -184,7 +185,7 @@ function openContextMenu(event: MouseEvent) {
*/
&.selected {
- box-shadow: 0 0 0 4px var(--color-canvas-selected);
+ box-shadow: 0 0 0 8px var(--color-canvas-selected-transparent);
}
&.success {
@@ -213,7 +214,7 @@ function openContextMenu(event: MouseEvent) {
top: 100%;
position: absolute;
width: 100%;
- min-width: 200px;
+ min-width: calc(var(--canvas-node--width) * 2);
margin-top: var(--spacing-2xs);
display: flex;
flex-direction: column;
@@ -223,22 +224,33 @@ function openContextMenu(event: MouseEvent) {
.label {
font-size: var(--font-size-m);
- line-height: var(--font-line-height-compact);
text-align: center;
+ text-overflow: ellipsis;
+ display: -webkit-box;
+ -webkit-box-orient: vertical;
+ -webkit-line-clamp: 2;
+ overflow: hidden;
+ overflow-wrap: anywhere;
+ font-weight: var(--font-weight-bold);
+ line-height: var(--font-line-height-compact);
}
.subtitle {
+ width: 100%;
+ text-align: center;
color: var(--color-text-light);
font-size: var(--font-size-xs);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
+ line-height: var(--font-line-height-compact);
+ font-weight: 400;
}
.statusIcons {
position: absolute;
- bottom: var(--spacing-2xs);
- right: var(--spacing-2xs);
+ bottom: var(--canvas-node--status-icons-offset);
+ right: var(--canvas-node--status-icons-offset);
}
.triggerIcon {
diff --git a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.spec.ts b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.spec.ts
index 5327d71524..1488006841 100644
--- a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.spec.ts
+++ b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.spec.ts
@@ -15,7 +15,7 @@ describe('CanvasNodeStatusIcons', () => {
},
});
- expect(getByTestId('canvas-node-status-pinned')).toHaveTextContent('5');
+ expect(getByTestId('canvas-node-status-pinned')).toBeInTheDocument();
});
it('should render correctly for a running node', () => {
diff --git a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue
index 6c5136bcdf..cd730f885a 100644
--- a/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue
+++ b/packages/editor-ui/src/components/canvas/elements/nodes/render-types/parts/CanvasNodeStatusIcons.vue
@@ -7,7 +7,6 @@ import { useCanvasNode } from '@/composables/useCanvasNode';
const nodeHelpers = useNodeHelpers();
const {
- pinnedDataCount,
hasPinnedData,
issues,
hasIssues,
@@ -51,7 +50,6 @@ const hideNodeIssues = computed(() => false); // @TODO Implement this
:class="[$style.status, $style.pinnedData]"
>
- {{ pinnedDataCount }}
@@ -90,7 +88,13 @@ const hideNodeIssues = computed(() => false); // @TODO Implement this
}
.running {
- color: var(--color-primary);
+ width: calc(100% - 2 * var(--canvas-node--status-icons-offset));
+ height: calc(100% - 2 * var(--canvas-node--status-icons-offset));
+ display: flex;
+ align-items: center;
+ justify-content: center;
+ font-size: 3.75em;
+ color: hsla(var(--color-primary-h), var(--color-primary-s), var(--color-primary-l), 0.7);
}
.issues {
diff --git a/packages/editor-ui/src/composables/__tests__/useWorkflowHelpers.spec.ts b/packages/editor-ui/src/composables/__tests__/useWorkflowHelpers.spec.ts
index 81643f52aa..f50261a1aa 100644
--- a/packages/editor-ui/src/composables/__tests__/useWorkflowHelpers.spec.ts
+++ b/packages/editor-ui/src/composables/__tests__/useWorkflowHelpers.spec.ts
@@ -3,6 +3,10 @@ import { useWorkflowHelpers } from '@/composables/useWorkflowHelpers';
import router from '@/router';
import { createTestingPinia } from '@pinia/testing';
import { setActivePinia } from 'pinia';
+import { useWorkflowsStore } from '@/stores/workflows.store';
+import { useWorkflowsEEStore } from '@/stores/workflows.ee.store';
+import { useTagsStore } from '@/stores/tags.store';
+import { createTestWorkflow } from '@/__tests__/mocks';
const getDuplicateTestWorkflow = (): IWorkflowDataUpdate => ({
name: 'Duplicate webhook test',
@@ -50,32 +54,23 @@ const getDuplicateTestWorkflow = (): IWorkflowDataUpdate => ({
connections: {},
});
-vi.mock('@/stores/workflows.store', () => ({
- useWorkflowsStore: vi.fn(() => ({
- workflowsById: {},
- createNewWorkflow: vi.fn(() => {}),
- addWorkflow: vi.fn(() => {}),
- setActive: vi.fn(() => {}),
- setWorkflowId: vi.fn(() => {}),
- setWorkflowVersionId: vi.fn(() => {}),
- setWorkflowName: vi.fn(() => {}),
- setWorkflowSettings: vi.fn(() => {}),
- setNodeValue: vi.fn(() => {}),
- setWorkflowTagIds: vi.fn(() => {}),
- getCurrentWorkflow: vi.fn(() => ({})),
- })),
-}));
-
describe('useWorkflowHelpers', () => {
+ let workflowsStore: ReturnType
;
+ let workflowsEEStore: ReturnType;
+ let tagsStore: ReturnType;
+
+ beforeAll(() => {
+ setActivePinia(createTestingPinia());
+ workflowsStore = useWorkflowsStore();
+ workflowsEEStore = useWorkflowsEEStore();
+ tagsStore = useTagsStore();
+ });
+
+ afterEach(() => {
+ vi.clearAllMocks();
+ });
+
describe('saveAsNewWorkflow', () => {
- beforeAll(() => {
- setActivePinia(createTestingPinia());
- });
-
- afterEach(() => {
- vi.clearAllMocks();
- });
-
it('should respect `resetWebhookUrls: false` when duplicating workflows', async () => {
const workflow = getDuplicateTestWorkflow();
if (!workflow.nodes) {
@@ -120,4 +115,101 @@ describe('useWorkflowHelpers', () => {
expect(pathsPreSave).not.toEqual(pathsPostSave);
});
});
+
+ describe('initState', () => {
+ it('should initialize workflow state with provided data', () => {
+ const { initState } = useWorkflowHelpers({ router });
+
+ const workflowData = createTestWorkflow({
+ id: '1',
+ name: 'Test Workflow',
+ active: true,
+ pinData: {},
+ meta: {},
+ scopes: ['workflow:create'],
+ usedCredentials: [],
+ sharedWithProjects: [],
+ tags: [],
+ });
+ const addWorkflowSpy = vi.spyOn(workflowsStore, 'addWorkflow');
+ const setActiveSpy = vi.spyOn(workflowsStore, 'setActive');
+ const setWorkflowIdSpy = vi.spyOn(workflowsStore, 'setWorkflowId');
+ const setWorkflowNameSpy = vi.spyOn(workflowsStore, 'setWorkflowName');
+ const setWorkflowSettingsSpy = vi.spyOn(workflowsStore, 'setWorkflowSettings');
+ const setWorkflowPinDataSpy = vi.spyOn(workflowsStore, 'setWorkflowPinData');
+ const setWorkflowVersionIdSpy = vi.spyOn(workflowsStore, 'setWorkflowVersionId');
+ const setWorkflowMetadataSpy = vi.spyOn(workflowsStore, 'setWorkflowMetadata');
+ const setWorkflowScopesSpy = vi.spyOn(workflowsStore, 'setWorkflowScopes');
+ const setUsedCredentialsSpy = vi.spyOn(workflowsStore, 'setUsedCredentials');
+ const setWorkflowSharedWithSpy = vi.spyOn(workflowsEEStore, 'setWorkflowSharedWith');
+ const setWorkflowTagIdsSpy = vi.spyOn(workflowsStore, 'setWorkflowTagIds');
+ const upsertTagsSpy = vi.spyOn(tagsStore, 'upsertTags');
+
+ initState(workflowData);
+
+ expect(addWorkflowSpy).toHaveBeenCalledWith(workflowData);
+ expect(setActiveSpy).toHaveBeenCalledWith(true);
+ expect(setWorkflowIdSpy).toHaveBeenCalledWith('1');
+ expect(setWorkflowNameSpy).toHaveBeenCalledWith({
+ newName: 'Test Workflow',
+ setStateDirty: false,
+ });
+ expect(setWorkflowSettingsSpy).toHaveBeenCalledWith({
+ executionOrder: 'v1',
+ timezone: 'DEFAULT',
+ });
+ expect(setWorkflowPinDataSpy).toHaveBeenCalledWith({});
+ expect(setWorkflowVersionIdSpy).toHaveBeenCalledWith('1');
+ expect(setWorkflowMetadataSpy).toHaveBeenCalledWith({});
+ expect(setWorkflowScopesSpy).toHaveBeenCalledWith(['workflow:create']);
+ expect(setUsedCredentialsSpy).toHaveBeenCalledWith([]);
+ expect(setWorkflowSharedWithSpy).toHaveBeenCalledWith({
+ workflowId: '1',
+ sharedWithProjects: [],
+ });
+ expect(setWorkflowTagIdsSpy).toHaveBeenCalledWith([]);
+ expect(upsertTagsSpy).toHaveBeenCalledWith([]);
+ });
+
+ it('should handle missing `usedCredentials` and `sharedWithProjects` gracefully', () => {
+ const { initState } = useWorkflowHelpers({ router });
+
+ const workflowData = createTestWorkflow({
+ id: '1',
+ name: 'Test Workflow',
+ active: true,
+ pinData: {},
+ meta: {},
+ scopes: [],
+ tags: [],
+ });
+ const setUsedCredentialsSpy = vi.spyOn(workflowsStore, 'setUsedCredentials');
+ const setWorkflowSharedWithSpy = vi.spyOn(workflowsEEStore, 'setWorkflowSharedWith');
+
+ initState(workflowData);
+
+ expect(setUsedCredentialsSpy).not.toHaveBeenCalled();
+ expect(setWorkflowSharedWithSpy).not.toHaveBeenCalled();
+ });
+
+ it('should handle missing `tags` gracefully', () => {
+ const { initState } = useWorkflowHelpers({ router });
+
+ const workflowData = createTestWorkflow({
+ id: '1',
+ name: 'Test Workflow',
+ active: true,
+ pinData: {},
+ meta: {},
+ scopes: [],
+ });
+ const setWorkflowTagIdsSpy = vi.spyOn(workflowsStore, 'setWorkflowTagIds');
+ const upsertTagsSpy = vi.spyOn(tagsStore, 'upsertTags');
+
+ initState(workflowData);
+
+ expect(setWorkflowTagIdsSpy).toHaveBeenCalledWith([]);
+ expect(upsertTagsSpy).toHaveBeenCalledWith([]);
+ });
+ });
});
diff --git a/packages/editor-ui/src/composables/useBeforeUnload.spec.ts b/packages/editor-ui/src/composables/useBeforeUnload.spec.ts
new file mode 100644
index 0000000000..725b6fe1f2
--- /dev/null
+++ b/packages/editor-ui/src/composables/useBeforeUnload.spec.ts
@@ -0,0 +1,86 @@
+import { useBeforeUnload } from '@/composables/useBeforeUnload';
+import { STORES, VIEWS } from '@/constants';
+import { useUIStore } from '@/stores/ui.store';
+import { useCanvasStore } from '@/stores/canvas.store';
+import type { useRoute } from 'vue-router';
+import { setActivePinia } from 'pinia';
+import { createTestingPinia } from '@pinia/testing';
+import { mock } from 'vitest-mock-extended';
+import { describe } from 'vitest';
+
+describe('useBeforeUnload', () => {
+ const defaultRoute = mock>({ name: 'someRoute' });
+
+ let uiStore: ReturnType;
+ let canvasStore: ReturnType;
+
+ beforeEach(() => {
+ const pinia = createTestingPinia({
+ initialState: {
+ [STORES.UI]: {
+ stateIsDirty: false,
+ },
+ },
+ });
+ setActivePinia(pinia);
+
+ uiStore = useUIStore();
+ canvasStore = useCanvasStore();
+ });
+
+ describe('onBeforeUnload', () => {
+ it('should do nothing if route is demo', () => {
+ const route = mock>({ name: VIEWS.DEMO });
+ const { onBeforeUnload } = useBeforeUnload({ route });
+ const event = new Event('beforeunload');
+
+ const result = onBeforeUnload(event);
+
+ expect(result).toBeUndefined();
+ });
+
+ it('should prompt user if state is dirty', () => {
+ uiStore.stateIsDirty = true;
+ const { onBeforeUnload } = useBeforeUnload({ route: defaultRoute });
+ const event = new Event('beforeunload');
+
+ const result = onBeforeUnload(event);
+
+ expect(result).toBe(true);
+ });
+
+ it('should start loading if state is not dirty', () => {
+ uiStore.stateIsDirty = false;
+ const startLoadingSpy = vi.spyOn(canvasStore, 'startLoading');
+ const { onBeforeUnload } = useBeforeUnload({ route: defaultRoute });
+ const event = new Event('beforeunload');
+
+ const result = onBeforeUnload(event);
+
+ expect(startLoadingSpy).toHaveBeenCalledWith(expect.any(String));
+ expect(result).toBeUndefined();
+ });
+ });
+
+ describe('addBeforeUnloadEventBindings', () => {
+ it('should add beforeunload event listener', () => {
+ const { addBeforeUnloadEventBindings } = useBeforeUnload({ route: defaultRoute });
+ const addEventListenerSpy = vi.spyOn(window, 'addEventListener');
+
+ addBeforeUnloadEventBindings();
+
+ expect(addEventListenerSpy).toHaveBeenCalledWith('beforeunload', expect.any(Function));
+ });
+ });
+
+ describe('removeBeforeUnloadEventBindings', () => {
+ it('should remove beforeunload event listener', () => {
+ const { removeBeforeUnloadEventBindings } = useBeforeUnload({ route: defaultRoute });
+ const removeEventListenerSpy = vi.spyOn(window, 'removeEventListener');
+
+ removeBeforeUnloadEventBindings();
+
+ expect(removeEventListenerSpy).toHaveBeenCalledWith('beforeunload', expect.any(Function));
+ });
+ });
+});
diff --git a/packages/editor-ui/src/composables/useBeforeUnload.ts b/packages/editor-ui/src/composables/useBeforeUnload.ts
new file mode 100644
index 0000000000..5469c43ee8
--- /dev/null
+++ b/packages/editor-ui/src/composables/useBeforeUnload.ts
@@ -0,0 +1,48 @@
+import { useCanvasStore } from '@/stores/canvas.store';
+import { useUIStore } from '@/stores/ui.store';
+import { useI18n } from '@/composables/useI18n';
+import { computed } from 'vue';
+import { VIEWS } from '@/constants';
+import type { useRoute } from 'vue-router';
+
+/**
+ * Composable to handle the beforeunload event in canvas views.
+ *
+ * This hook will prevent closing the tab and prompt the user if the ui state is dirty
+ * (workflow has changes) and the user tries to leave the page.
+ */
+
+export function useBeforeUnload({ route }: { route: ReturnType }) {
+ const uiStore = useUIStore();
+ const canvasStore = useCanvasStore();
+
+ const i18n = useI18n();
+
+ const isDemoRoute = computed(() => route.name === VIEWS.DEMO);
+
+ function onBeforeUnload(e: BeforeUnloadEvent) {
+ if (isDemoRoute.value || window.preventNodeViewBeforeUnload) {
+ return;
+ } else if (uiStore.stateIsDirty) {
+ e.returnValue = true; //Gecko + IE
+ return true; //Gecko + Webkit, Safari, Chrome etc.
+ } else {
+ canvasStore.startLoading(i18n.baseText('nodeView.redirecting'));
+ return;
+ }
+ }
+
+ function addBeforeUnloadEventBindings() {
+ window.addEventListener('beforeunload', onBeforeUnload);
+ }
+
+ function removeBeforeUnloadEventBindings() {
+ window.removeEventListener('beforeunload', onBeforeUnload);
+ }
+
+ return {
+ onBeforeUnload,
+ addBeforeUnloadEventBindings,
+ removeBeforeUnloadEventBindings,
+ };
+}
diff --git a/packages/editor-ui/src/composables/useCanvasOperations.ts b/packages/editor-ui/src/composables/useCanvasOperations.ts
index 11e40f39b3..63fa57c7fd 100644
--- a/packages/editor-ui/src/composables/useCanvasOperations.ts
+++ b/packages/editor-ui/src/composables/useCanvasOperations.ts
@@ -105,6 +105,7 @@ type AddNodeOptions = {
openNDV?: boolean;
trackHistory?: boolean;
isAutoAdd?: boolean;
+ telemetry?: boolean;
};
export function useCanvasOperations({ router }: { router: ReturnType }) {
@@ -434,6 +435,7 @@ export function useCanvasOperations({ router }: { router: ReturnType,
+ customActions: {} as Record,
delegatedClickHandler: null as null | ((e: MouseEvent) => void),
});
-export default () => {
- function registerCustomAction({ key, action }: { key: string; action: Function }) {
+export function useGlobalLinkActions() {
+ function registerCustomAction({ key, action }: RegisterCustomActionOpts) {
state.customActions[key] = action;
}
function unregisterCustomAction(key: string) {
@@ -51,7 +52,7 @@ export default () => {
}
}
- const availableActions = computed<{ [key: string]: Function }>(() => ({
+ const availableActions = computed<{ [key: string]: LinkActionFn }>(() => ({
reload,
...state.customActions,
}));
@@ -76,4 +77,4 @@ export default () => {
registerCustomAction,
unregisterCustomAction,
};
-};
+}
diff --git a/packages/editor-ui/src/composables/useNodeHelpers.ts b/packages/editor-ui/src/composables/useNodeHelpers.ts
index a8c763b11f..fd2fb50a81 100644
--- a/packages/editor-ui/src/composables/useNodeHelpers.ts
+++ b/packages/editor-ui/src/composables/useNodeHelpers.ts
@@ -63,6 +63,7 @@ import { useCanvasStore } from '@/stores/canvas.store';
import { getEndpointScope } from '@/utils/nodeViewUtils';
import { useSourceControlStore } from '@/stores/sourceControl.store';
import { getConnectionInfo } from '@/utils/canvasUtils';
+import type { UnpinNodeDataEvent } from '@/event-bus/data-pinning';
declare namespace HttpRequestNode {
namespace V2 {
@@ -992,8 +993,8 @@ export function useNodeHelpers() {
});
}
- function removePinDataConnections(pinData: IPinData) {
- Object.keys(pinData).forEach((nodeName) => {
+ function removePinDataConnections(event: UnpinNodeDataEvent) {
+ for (const nodeName of event.nodeNames) {
const node = workflowsStore.getNodeByName(nodeName);
if (!node) {
return;
@@ -1015,7 +1016,7 @@ export function useNodeHelpers() {
canvasStore.jsPlumbInstance.setSuspendDrawing(true);
connectionsArray.forEach(NodeViewUtils.resetConnection);
canvasStore.jsPlumbInstance.setSuspendDrawing(false, true);
- });
+ }
}
function getOutputEndpointUUID(
diff --git a/packages/editor-ui/src/composables/usePushConnection.ts b/packages/editor-ui/src/composables/usePushConnection.ts
index 7c5c229a19..77d7201ca1 100644
--- a/packages/editor-ui/src/composables/usePushConnection.ts
+++ b/packages/editor-ui/src/composables/usePushConnection.ts
@@ -295,7 +295,7 @@ export function usePushConnection({ router }: { router: ReturnType
🚫
-Your n8n server is configured to use a secure cookie,
however you are visiting this via an insecure URL
+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, try using localhost instead
+ - 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
@@ -852,3 +859,6 @@ export const INSECURE_CONNECTION_WARNING = `
export const CanvasNodeKey = 'canvasNode' as unknown as InjectionKey;
export const CanvasNodeHandleKey =
'canvasNodeHandle' as unknown as InjectionKey;
+
+/** Auth */
+export const BROWSER_ID_STORAGE_KEY = 'n8n-browserId';
diff --git a/packages/editor-ui/src/event-bus/code-node-editor.ts b/packages/editor-ui/src/event-bus/code-node-editor.ts
index 128e07606f..6ba3a32a7c 100644
--- a/packages/editor-ui/src/event-bus/code-node-editor.ts
+++ b/packages/editor-ui/src/event-bus/code-node-editor.ts
@@ -1,3 +1,13 @@
import { createEventBus } from 'n8n-design-system/utils';
-export const codeNodeEditorEventBus = createEventBus();
+export type HighlightLineEvent = number | 'final';
+
+export interface CodeNodeEditorEventBusEvents {
+ /** Event that a diff have been applied to the code node editor */
+ codeDiffApplied: never;
+
+ /** Command to highlight a specific line in the code node editor */
+ highlightLine: HighlightLineEvent;
+}
+
+export const codeNodeEditorEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/data-pinning.ts b/packages/editor-ui/src/event-bus/data-pinning.ts
index aa6548741f..4f29fdc772 100644
--- a/packages/editor-ui/src/event-bus/data-pinning.ts
+++ b/packages/editor-ui/src/event-bus/data-pinning.ts
@@ -1,3 +1,23 @@
import { createEventBus } from 'n8n-design-system/utils';
+import type { IPinData } from 'n8n-workflow';
-export const dataPinningEventBus = createEventBus();
+export type DataPinningDiscoveryEvent = {
+ isTooltipVisible: boolean;
+};
+
+export type UnpinNodeDataEvent = {
+ nodeNames: string[];
+};
+
+export interface DataPinningEventBusEvents {
+ /** Command to show or hide the data pinning discovery tooltip */
+ 'data-pinning-discovery': DataPinningDiscoveryEvent;
+
+ /** Event that data has been pinned for workflow */
+ 'pin-data': IPinData;
+
+ /** Event that data has been unpinned for specific nodes */
+ 'unpin-data': UnpinNodeDataEvent;
+}
+
+export const dataPinningEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/global-link-actions.ts b/packages/editor-ui/src/event-bus/global-link-actions.ts
new file mode 100644
index 0000000000..11e482ffe7
--- /dev/null
+++ b/packages/editor-ui/src/event-bus/global-link-actions.ts
@@ -0,0 +1,16 @@
+import { createEventBus } from 'n8n-design-system/utils';
+
+// eslint-disable-next-line @typescript-eslint/no-explicit-any
+export type LinkActionFn = (...args: any[]) => void;
+
+export type RegisterCustomActionOpts = {
+ key: string;
+ action: LinkActionFn;
+};
+
+export interface GlobalLinkActionsEventBusEvents {
+ /** See useGlobalLinkActions.ts */
+ registerGlobalLinkAction: RegisterCustomActionOpts;
+}
+
+export const globalLinkActionsEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/html-editor.ts b/packages/editor-ui/src/event-bus/html-editor.ts
index 7a53bf86a4..e40e7dd16c 100644
--- a/packages/editor-ui/src/event-bus/html-editor.ts
+++ b/packages/editor-ui/src/event-bus/html-editor.ts
@@ -1,3 +1,8 @@
import { createEventBus } from 'n8n-design-system/utils';
-export const htmlEditorEventBus = createEventBus();
+export interface HtmlEditorEventBusEvents {
+ /** Command to format the content in the HtmlEditor */
+ 'format-html': never;
+}
+
+export const htmlEditorEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/import-curl.ts b/packages/editor-ui/src/event-bus/import-curl.ts
index 7a517bf3f4..3ff4df697b 100644
--- a/packages/editor-ui/src/event-bus/import-curl.ts
+++ b/packages/editor-ui/src/event-bus/import-curl.ts
@@ -1,3 +1,9 @@
+import type { CurlToJSONResponse } from '@/Interface';
import { createEventBus } from 'n8n-design-system/utils';
-export const importCurlEventBus = createEventBus();
+export interface ImportCurlEventBusEvents {
+ /** Command to set the HTTP node parameters based on the curl to JSON response */
+ setHttpNodeParameters: CurlToJSONResponse;
+}
+
+export const importCurlEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/index.ts b/packages/editor-ui/src/event-bus/index.ts
index 91d9a1a542..b094684a94 100644
--- a/packages/editor-ui/src/event-bus/index.ts
+++ b/packages/editor-ui/src/event-bus/index.ts
@@ -1,6 +1,6 @@
export * from './code-node-editor';
export * from './data-pinning';
-export * from './link-actions';
+export * from './global-link-actions';
export * from './html-editor';
export * from './import-curl';
export * from './node-view';
diff --git a/packages/editor-ui/src/event-bus/link-actions.ts b/packages/editor-ui/src/event-bus/link-actions.ts
deleted file mode 100644
index 41386147ea..0000000000
--- a/packages/editor-ui/src/event-bus/link-actions.ts
+++ /dev/null
@@ -1,3 +0,0 @@
-import { createEventBus } from 'n8n-design-system/utils';
-
-export const globalLinkActionsEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/ndv.ts b/packages/editor-ui/src/event-bus/ndv.ts
index a6d705b4ef..e8c9233c39 100644
--- a/packages/editor-ui/src/event-bus/ndv.ts
+++ b/packages/editor-ui/src/event-bus/ndv.ts
@@ -1,3 +1,21 @@
+import type { IUpdateInformation } from '@/Interface';
import { createEventBus } from 'n8n-design-system/utils';
-export const ndvEventBus = createEventBus();
+export type Position = 'minLeft' | 'maxRight' | 'initial';
+
+export type CreateNewCredentialOpts = {
+ type: string;
+ showAuthOptions: boolean;
+};
+
+export interface NdvEventBusEvents {
+ /** Command to let the user create a new credential by opening the credentials modal */
+ 'credential.createNew': CreateNewCredentialOpts;
+
+ /** Command to set the NDV panels' (input, output, main) positions based on the given value */
+ setPositionByName: Position;
+
+ updateParameterValue: IUpdateInformation;
+}
+
+export const ndvEventBus = createEventBus();
diff --git a/packages/editor-ui/src/event-bus/source-control.ts b/packages/editor-ui/src/event-bus/source-control.ts
index 2f79901a1f..17dae99952 100644
--- a/packages/editor-ui/src/event-bus/source-control.ts
+++ b/packages/editor-ui/src/event-bus/source-control.ts
@@ -1,3 +1,8 @@
import { createEventBus } from 'n8n-design-system/utils';
-export const sourceControlEventBus = createEventBus();
+export interface SourceControlEventBusEvents {
+ /** Event when latest changes were pulled from the source control */
+ pull: never;
+}
+
+export const sourceControlEventBus = createEventBus();
diff --git a/packages/editor-ui/src/plugins/directives.ts b/packages/editor-ui/src/plugins/directives.ts
index 8b092b4c4f..c490fa5dab 100644
--- a/packages/editor-ui/src/plugins/directives.ts
+++ b/packages/editor-ui/src/plugins/directives.ts
@@ -1,10 +1,8 @@
import type { Plugin } from 'vue';
import VueTouchEvents from 'vue3-touch-events';
-import { vOnClickOutside } from '@vueuse/components';
export const GlobalDirectivesPlugin: Plugin = {
install(app) {
app.use(VueTouchEvents);
- app.directive('on-click-outside', vOnClickOutside);
},
};
diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json
index b082675d2d..7f94aec41c 100644
--- a/packages/editor-ui/src/plugins/i18n/locales/en.json
+++ b/packages/editor-ui/src/plugins/i18n/locales/en.json
@@ -131,7 +131,7 @@
"auth.signup.setupYourAccount": "Set up your account",
"auth.signup.setupYourAccountError": "Problem setting up your account",
"auth.signup.tokenValidationError": "Issue validating invite token",
- "aiAssistant.name": "Ava",
+ "aiAssistant.name": "Assistant",
"aiAssistant.assistant": "AI Assistant",
"aiAssistant.newSessionModal.title.part1": "Start new",
"aiAssistant.newSessionModal.title.part2": "session",
@@ -139,7 +139,7 @@
"aiAssistant.newSessionModal.question": "Are you sure you want to start a new session?",
"aiAssistant.newSessionModal.confirm": "Start new session",
"aiAssistant.serviceError.message": "Unable to connect to n8n's AI service",
- "aiAssistant.codeUpdated.message.title": "Ava modified workflow",
+ "aiAssistant.codeUpdated.message.title": "Assistant modified workflow",
"aiAssistant.codeUpdated.message.body": "Open the {nodeName} node to see the changes",
"banners.confirmEmail.message.1": "To secure your account and prevent future access issues, please confirm your",
"banners.confirmEmail.message.2": "email address.",
@@ -1491,8 +1491,8 @@
"resourceMapper.fetchingFields.errorMessage": "Can't get {fieldWord}.",
"resourceMapper.fetchingFields.noFieldsFound": "No {fieldWord} found in {serviceName}.",
"resourceMapper.columnsToMatchOn.label": "{fieldWord} to Match On",
- "resourceMapper.columnsToMatchOn.multi.description": "The {fieldWord} that identify the row(s) to modify",
- "resourceMapper.columnsToMatchOn.single.description": "The {fieldWord} that identifies the row(s) to modify",
+ "resourceMapper.columnsToMatchOn.multi.description": "The {fieldWord} to use when matching rows in {nodeDisplayName} to the input items of this node. Usually an ID.",
+ "resourceMapper.columnsToMatchOn.single.description": "The {fieldWord} to use when matching rows in {nodeDisplayName} to the input items of this node. Usually an ID.",
"resourceMapper.columnsToMatchOn.tooltip": "The {fieldWord} to compare when finding the rows to update",
"resourceMapper.columnsToMatchOn.noFieldsFound": "No {fieldWord} that can be used for matching found in {serviceName}.",
"resourceMapper.valuesToSend.label": "Values to Send",
@@ -2202,7 +2202,8 @@
"workflows.empty.description.readOnlyEnv": "No workflows here yet",
"workflows.empty.description.noPermission": "There are currently no workflows to view",
"workflows.empty.startFromScratch": "Start from scratch",
- "workflows.empty.browseTemplates": "Browse {category} templates",
+ "workflows.empty.browseTemplates": "Explore workflow templates",
+ "workflows.empty.learnN8n": "Learn n8n",
"workflows.empty.button.disabled.tooltip": "Your current role in the project does not allow you to create workflows",
"workflows.shareModal.title": "Share '{name}'",
"workflows.shareModal.title.static": "Shared with {projectName}",
diff --git a/packages/editor-ui/src/stores/assistant.store.ts b/packages/editor-ui/src/stores/assistant.store.ts
index 229e2227f5..75ee335cfc 100644
--- a/packages/editor-ui/src/stores/assistant.store.ts
+++ b/packages/editor-ui/src/stores/assistant.store.ts
@@ -245,10 +245,14 @@ export const useAssistantStore = defineStore(STORES.ASSISTANT, () => {
function onEachStreamingMessage(response: ChatRequest.ResponsePayload, id: string) {
if (response.sessionId && !currentSessionId.value) {
currentSessionId.value = response.sessionId;
- telemetry.track('Assistant session started', {
- chat_session_id: currentSessionId.value,
- task: 'error',
- });
+ telemetry.track(
+ 'Assistant session started',
+ {
+ chat_session_id: currentSessionId.value,
+ task: 'error',
+ },
+ { withPostHog: true },
+ );
} else if (currentSessionId.value !== response.sessionId) {
return;
}
diff --git a/packages/editor-ui/src/stores/ndv.store.ts b/packages/editor-ui/src/stores/ndv.store.ts
index dbaf8c94a1..1e7d5da363 100644
--- a/packages/editor-ui/src/stores/ndv.store.ts
+++ b/packages/editor-ui/src/stores/ndv.store.ts
@@ -177,6 +177,26 @@ export const useNDVStore = defineStore(STORES.NDV, {
isNDVOpen(): boolean {
return this.activeNodeName !== null;
},
+ ndvNodeInputNumber() {
+ const returnData: { [nodeName: string]: number[] } = {};
+ const workflow = useWorkflowsStore().getCurrentWorkflow();
+ const activeNodeConections = (
+ workflow.connectionsByDestinationNode[this.activeNode?.name || ''] ?? {}
+ ).main;
+
+ if (!activeNodeConections || activeNodeConections.length < 2) return returnData;
+
+ for (const [index, connection] of activeNodeConections.entries()) {
+ for (const node of connection) {
+ if (!returnData[node.node]) {
+ returnData[node.node] = [];
+ }
+ returnData[node.node].push(index + 1);
+ }
+ }
+
+ return returnData;
+ },
},
actions: {
setActiveNodeName(nodeName: string | null): void {
diff --git a/packages/editor-ui/src/stores/settings.store.ts b/packages/editor-ui/src/stores/settings.store.ts
index 0275a87047..2886aff1ba 100644
--- a/packages/editor-ui/src/stores/settings.store.ts
+++ b/packages/editor-ui/src/stores/settings.store.ts
@@ -1,3 +1,6 @@
+import { computed, ref } from 'vue';
+import Bowser from 'bowser';
+
import * as publicApiApi from '@/api/api-keys';
import * as ldapApi from '@/api/ldap';
import * as settingsApi from '@/api/settings';
@@ -21,7 +24,6 @@ import { makeRestApiRequest } from '@/utils/apiUtils';
import { useTitleChange } from '@/composables/useTitleChange';
import { useToast } from '@/composables/useToast';
import { i18n } from '@/plugins/i18n';
-import { computed, ref } from 'vue';
export const useSettingsStore = defineStore(STORES.SETTINGS, () => {
const initialized = ref(false);
@@ -189,13 +191,15 @@ export const useSettingsStore = defineStore(STORES.SETTINGS, () => {
useRootStore().setVersionCli(settings.value.versionCli);
}
- if (
- settings.value.authCookie.secure &&
- location.protocol === 'http:' &&
- !['localhost', '127.0.0.1'].includes(location.hostname)
- ) {
- document.write(INSECURE_CONNECTION_WARNING);
- return;
+ if (settings.value.authCookie.secure) {
+ const { browser } = Bowser.parse(navigator.userAgent);
+ if (
+ location.protocol === 'http:' &&
+ (!['localhost', '127.0.0.1'].includes(location.hostname) || browser.name === 'Safari')
+ ) {
+ document.write(INSECURE_CONNECTION_WARNING);
+ return;
+ }
}
const isV1BannerDismissedPermanently = (settings.value.banners?.dismissed || []).includes('V1');
diff --git a/packages/editor-ui/src/stores/sso.store.ts b/packages/editor-ui/src/stores/sso.store.ts
index 63c71c3899..d9d522274c 100644
--- a/packages/editor-ui/src/stores/sso.store.ts
+++ b/packages/editor-ui/src/stores/sso.store.ts
@@ -70,7 +70,6 @@ export const useSSOStore = defineStore('sso', () => {
const updateUser = async (params: { firstName: string; lastName: string }) =>
await updateCurrentUser(rootStore.restApiContext, {
- id: usersStore.currentUser!.id,
email: usersStore.currentUser!.email!,
...params,
});
diff --git a/packages/editor-ui/src/stores/users.store.ts b/packages/editor-ui/src/stores/users.store.ts
index ef153bb4b7..613d2ea48d 100644
--- a/packages/editor-ui/src/stores/users.store.ts
+++ b/packages/editor-ui/src/stores/users.store.ts
@@ -1,6 +1,6 @@
import type { IUpdateUserSettingsReqPayload, UpdateGlobalRolePayload } from '@/api/users';
import * as usersApi from '@/api/users';
-import { PERSONALIZATION_MODAL_KEY, STORES, ROLE } from '@/constants';
+import { BROWSER_ID_STORAGE_KEY, PERSONALIZATION_MODAL_KEY, STORES, ROLE } from '@/constants';
import type {
Cloud,
IPersonalizationLatestVersion,
@@ -180,6 +180,8 @@ export const useUsersStore = defineStore(STORES.USERS, () => {
postHogStore.reset();
uiStore.clearBannerStack();
npsSurveyStore.resetNpsSurveyOnLogOut();
+
+ localStorage.removeItem(BROWSER_ID_STORAGE_KEY);
};
const createOwner = async (params: {
diff --git a/packages/editor-ui/src/stores/workflows.store.ts b/packages/editor-ui/src/stores/workflows.store.ts
index 18fc0261bf..45f8a4c658 100644
--- a/packages/editor-ui/src/stores/workflows.store.ts
+++ b/packages/editor-ui/src/stores/workflows.store.ts
@@ -669,14 +669,14 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => {
};
}
- function setWorkflowPinData(pinData: IPinData) {
+ function setWorkflowPinData(pinData?: IPinData) {
workflow.value = {
...workflow.value,
- pinData: pinData || {},
+ pinData: pinData ?? {},
};
updateCachedWorkflow();
- dataPinningEventBus.emit('pin-data', pinData || {});
+ dataPinningEventBus.emit('pin-data', pinData ?? {});
}
function setWorkflowTagIds(tags: string[]) {
@@ -699,6 +699,10 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => {
};
}
+ function setWorkflowScopes(scopes: IWorkflowDb['scopes']): void {
+ workflow.value.scopes = scopes;
+ }
+
function setWorkflowMetadata(metadata: WorkflowMetadata | undefined): void {
workflow.value.meta = metadata;
}
@@ -764,7 +768,9 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => {
uiStore.stateIsDirty = true;
updateCachedWorkflow();
- dataPinningEventBus.emit('unpin-data', { [payload.node.name]: undefined });
+ dataPinningEventBus.emit('unpin-data', {
+ nodeNames: [payload.node.name],
+ });
}
function addConnection(data: { connection: IConnection[] }): void {
@@ -1634,6 +1640,7 @@ export const useWorkflowsStore = defineStore(STORES.WORKFLOWS, () => {
setWorkflowTagIds,
addWorkflowTagIds,
removeWorkflowTagId,
+ setWorkflowScopes,
setWorkflowMetadata,
addToWorkflowMetadata,
setWorkflow,
diff --git a/packages/editor-ui/src/styles/plugins/_vueflow.scss b/packages/editor-ui/src/styles/plugins/_vueflow.scss
index b10e9f4f9d..3f0eff92a9 100644
--- a/packages/editor-ui/src/styles/plugins/_vueflow.scss
+++ b/packages/editor-ui/src/styles/plugins/_vueflow.scss
@@ -5,3 +5,43 @@
.vue-flow__resize-control.handle {
background-color: transparent;
}
+
+.vue-flow__minimap {
+ height: 120px;
+ overflow: hidden;
+ margin-bottom: calc(48px + 2 * var(--spacing-xs));
+ border: var(--border-base);
+ border-radius: var(--border-radius-base);
+ background: var(--color-background-light);
+
+ .minimap-node-default {
+ fill: var(--color-foreground-dark);
+ }
+
+ .minimap-node-n8n-nodes-base-stickyNote {
+ fill: var(--color-foreground-dark);
+ opacity: 0.2;
+ }
+}
+
+.vue-flow__pane {
+ &,
+ &.draggable {
+ cursor: default;
+ }
+
+ &.dragging {
+ cursor: grabbing;
+ }
+}
+
+.vue-flow__node {
+ &,
+ &.draggable {
+ cursor: pointer;
+ }
+
+ &.dragging {
+ cursor: grabbing;
+ }
+}
diff --git a/packages/editor-ui/src/utils/__tests__/apiUtils.spec.ts b/packages/editor-ui/src/utils/__tests__/apiUtils.spec.ts
new file mode 100644
index 0000000000..cefb6f3389
--- /dev/null
+++ b/packages/editor-ui/src/utils/__tests__/apiUtils.spec.ts
@@ -0,0 +1,112 @@
+import { STREAM_SEPERATOR, streamRequest } from '../apiUtils';
+
+describe('streamRequest', () => {
+ it('should stream data from the API endpoint', async () => {
+ const encoder = new TextEncoder();
+ const mockResponse = new ReadableStream({
+ start(controller) {
+ controller.enqueue(encoder.encode(`${JSON.stringify({ chunk: 1 })}${STREAM_SEPERATOR}`));
+ controller.enqueue(encoder.encode(`${JSON.stringify({ chunk: 2 })}${STREAM_SEPERATOR}`));
+ controller.enqueue(encoder.encode(`${JSON.stringify({ chunk: 3 })}${STREAM_SEPERATOR}`));
+ controller.close();
+ },
+ });
+
+ const mockFetch = vi.fn().mockResolvedValue({
+ ok: true,
+ body: mockResponse,
+ });
+
+ global.fetch = mockFetch;
+
+ const onChunkMock = vi.fn();
+ const onDoneMock = vi.fn();
+ const onErrorMock = vi.fn();
+
+ await streamRequest(
+ {
+ baseUrl: 'https://api.example.com',
+ pushRef: '',
+ },
+ '/data',
+ { key: 'value' },
+ onChunkMock,
+ onDoneMock,
+ onErrorMock,
+ );
+
+ expect(mockFetch).toHaveBeenCalledWith('https://api.example.com/data', {
+ method: 'POST',
+ body: JSON.stringify({ key: 'value' }),
+ credentials: 'include',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'browser-id': expect.stringContaining('-'),
+ },
+ });
+
+ expect(onChunkMock).toHaveBeenCalledTimes(3);
+ expect(onChunkMock).toHaveBeenNthCalledWith(1, { chunk: 1 });
+ expect(onChunkMock).toHaveBeenNthCalledWith(2, { chunk: 2 });
+ expect(onChunkMock).toHaveBeenNthCalledWith(3, { chunk: 3 });
+
+ expect(onDoneMock).toHaveBeenCalledTimes(1);
+ expect(onErrorMock).not.toHaveBeenCalled();
+ });
+
+ it('should handle broken stream data', async () => {
+ const encoder = new TextEncoder();
+ const mockResponse = new ReadableStream({
+ start(controller) {
+ controller.enqueue(
+ encoder.encode(`${JSON.stringify({ chunk: 1 })}${STREAM_SEPERATOR}{"chunk": `),
+ );
+ controller.enqueue(encoder.encode(`2}${STREAM_SEPERATOR}{"ch`));
+ controller.enqueue(encoder.encode('unk":'));
+ controller.enqueue(encoder.encode(`3}${STREAM_SEPERATOR}`));
+ controller.close();
+ },
+ });
+
+ const mockFetch = vi.fn().mockResolvedValue({
+ ok: true,
+ body: mockResponse,
+ });
+
+ global.fetch = mockFetch;
+
+ const onChunkMock = vi.fn();
+ const onDoneMock = vi.fn();
+ const onErrorMock = vi.fn();
+
+ await streamRequest(
+ {
+ baseUrl: 'https://api.example.com',
+ pushRef: '',
+ },
+ '/data',
+ { key: 'value' },
+ onChunkMock,
+ onDoneMock,
+ onErrorMock,
+ );
+
+ expect(mockFetch).toHaveBeenCalledWith('https://api.example.com/data', {
+ method: 'POST',
+ body: JSON.stringify({ key: 'value' }),
+ credentials: 'include',
+ headers: {
+ 'Content-Type': 'application/json',
+ 'browser-id': expect.stringContaining('-'),
+ },
+ });
+
+ expect(onChunkMock).toHaveBeenCalledTimes(3);
+ expect(onChunkMock).toHaveBeenNthCalledWith(1, { chunk: 1 });
+ expect(onChunkMock).toHaveBeenNthCalledWith(2, { chunk: 2 });
+ expect(onChunkMock).toHaveBeenNthCalledWith(3, { chunk: 3 });
+
+ expect(onDoneMock).toHaveBeenCalledTimes(1);
+ expect(onErrorMock).not.toHaveBeenCalled();
+ });
+});
diff --git a/packages/editor-ui/src/utils/apiUtils.ts b/packages/editor-ui/src/utils/apiUtils.ts
index e9201b7c33..fef135769e 100644
--- a/packages/editor-ui/src/utils/apiUtils.ts
+++ b/packages/editor-ui/src/utils/apiUtils.ts
@@ -1,19 +1,23 @@
import type { AxiosRequestConfig, Method, RawAxiosRequestHeaders } from 'axios';
import axios from 'axios';
import { ApplicationError, jsonParse, type GenericValue, type IDataObject } from 'n8n-workflow';
-import type { IExecutionFlattedResponse, IExecutionResponse, IRestApiContext } from '@/Interface';
import { parse } from 'flatted';
-import type { ChatRequest } from '@/types/assistant.types';
import { assert } from '@/utils/assert';
-const BROWSER_ID_STORAGE_KEY = 'n8n-browserId';
-let browserId = localStorage.getItem(BROWSER_ID_STORAGE_KEY);
-if (!browserId && 'randomUUID' in crypto) {
- browserId = crypto.randomUUID();
- localStorage.setItem(BROWSER_ID_STORAGE_KEY, browserId);
-}
+import { BROWSER_ID_STORAGE_KEY } from '@/constants';
+import type { IExecutionFlattedResponse, IExecutionResponse, IRestApiContext } from '@/Interface';
+
+const getBrowserId = () => {
+ let browserId = localStorage.getItem(BROWSER_ID_STORAGE_KEY);
+ if (!browserId && 'randomUUID' in crypto) {
+ browserId = crypto.randomUUID();
+ localStorage.setItem(BROWSER_ID_STORAGE_KEY, browserId);
+ }
+ return browserId!;
+};
export const NO_NETWORK_ERROR_CODE = 999;
+export const STREAM_SEPERATOR = '⧉⇋⇋➽⌑⧉§§\n';
export class ResponseError extends ApplicationError {
// The HTTP status code of response
@@ -82,8 +86,8 @@ export async function request(config: {
baseURL,
headers: headers ?? {},
};
- if (baseURL.startsWith('/') && browserId) {
- options.headers!['browser-id'] = browserId;
+ if (baseURL.startsWith('/')) {
+ options.headers!['browser-id'] = getBrowserId();
}
if (
import.meta.env.NODE_ENV !== 'production' &&
@@ -194,21 +198,19 @@ export function unflattenExecutionData(fullExecutionData: IExecutionFlattedRespo
return returnData;
}
-export const streamRequest = async (
+export async function streamRequest(
context: IRestApiContext,
apiEndpoint: string,
- payload: ChatRequest.RequestPayload,
- onChunk?: (chunk: ChatRequest.ResponsePayload) => void,
+ payload: object,
+ onChunk?: (chunk: T) => void,
onDone?: () => void,
onError?: (e: Error) => void,
- separator = '⧉⇋⇋➽⌑⧉§§\n',
-): Promise => {
+ separator = STREAM_SEPERATOR,
+): Promise {
const headers: Record = {
+ 'browser-id': getBrowserId(),
'Content-Type': 'application/json',
};
- if (browserId) {
- headers['browser-id'] = browserId;
- }
const assistantRequest: RequestInit = {
headers,
method: 'POST',
@@ -223,23 +225,36 @@ export const streamRequest = async (
const reader = response.body.getReader();
const decoder = new TextDecoder('utf-8');
+ let buffer = '';
+
async function readStream() {
const { done, value } = await reader.read();
if (done) {
onDone?.();
return;
}
-
const chunk = decoder.decode(value);
- const splitChunks = chunk.split(separator);
+ buffer += chunk;
+ const splitChunks = buffer.split(separator);
+
+ buffer = '';
for (const splitChunk of splitChunks) {
- if (splitChunk && onChunk) {
+ if (splitChunk) {
+ let data: T;
try {
- onChunk(jsonParse(splitChunk, { errorMessage: 'Invalid json chunk in stream' }));
+ data = jsonParse(splitChunk, { errorMessage: 'Invalid json' });
+ } catch (e) {
+ // incomplete json. append to buffer to complete
+ buffer += splitChunk;
+
+ continue;
+ }
+
+ try {
+ onChunk?.(data);
} catch (e: unknown) {
if (e instanceof Error) {
- console.log(`${e.message}: ${splitChunk}`);
onError?.(e);
}
}
@@ -257,4 +272,4 @@ export const streamRequest = async (
assert(e instanceof Error);
onError?.(e);
}
-};
+}
diff --git a/packages/editor-ui/src/utils/userUtils.ts b/packages/editor-ui/src/utils/userUtils.ts
index 3d8aa21637..ff862ecfd8 100644
--- a/packages/editor-ui/src/utils/userUtils.ts
+++ b/packages/editor-ui/src/utils/userUtils.ts
@@ -65,11 +65,11 @@ import type {
IPersonalizationSurveyAnswersV1,
IPersonalizationSurveyAnswersV2,
IPersonalizationSurveyAnswersV3,
- IPersonalizationSurveyAnswersV4,
IPersonalizationSurveyVersions,
IUser,
ILogInStatus,
} from '@/Interface';
+import type { IPersonalizationSurveyAnswersV4 } from 'n8n-workflow';
/*
Utility functions used to handle users in n8n
diff --git a/packages/editor-ui/src/views/NodeView.v2.vue b/packages/editor-ui/src/views/NodeView.v2.vue
index 465505cc43..bbce98a844 100644
--- a/packages/editor-ui/src/views/NodeView.v2.vue
+++ b/packages/editor-ui/src/views/NodeView.v2.vue
@@ -3,8 +3,10 @@ import {
computed,
defineAsyncComponent,
nextTick,
+ onActivated,
onBeforeMount,
onBeforeUnmount,
+ onDeactivated,
onMounted,
ref,
useCssModule,
@@ -18,6 +20,7 @@ import CanvasRunWorkflowButton from '@/components/canvas/elements/buttons/Canvas
import { useI18n } from '@/composables/useI18n';
import { useWorkflowsStore } from '@/stores/workflows.store';
import { useRunWorkflow } from '@/composables/useRunWorkflow';
+import { useGlobalLinkActions } from '@/composables/useGlobalLinkActions';
import type {
AddedNodesAndConnections,
IExecutionResponse,
@@ -91,6 +94,7 @@ import { useTemplatesStore } from '@/stores/templates.store';
import { createEventBus } from 'n8n-design-system';
import type { PinDataSource } from '@/composables/usePinnedData';
import { useClipboard } from '@/composables/useClipboard';
+import { useBeforeUnload } from '@/composables/useBeforeUnload';
const LazyNodeCreation = defineAsyncComponent(
async () => await import('@/components/Node/NodeCreation.vue'),
@@ -135,6 +139,10 @@ const templatesStore = useTemplatesStore();
const canvasEventBus = createEventBus();
+const { addBeforeUnloadEventBindings, removeBeforeUnloadEventBindings } = useBeforeUnload({
+ route,
+});
+const { registerCustomAction } = useGlobalLinkActions();
const { runWorkflow, stopCurrentExecution, stopWaitingForWebhook } = useRunWorkflow({ router });
const {
updateNodePosition,
@@ -801,7 +809,7 @@ async function onAddNodesAndConnections(
return;
}
- await addNodes(nodes, { dragAndDrop, position, trackHistory: true });
+ await addNodes(nodes, { dragAndDrop, position, trackHistory: true, telemetry: true });
await nextTick();
const offsetIndex = editableWorkflow.value.nodes.length - nodes.length;
@@ -844,6 +852,10 @@ async function onOpenSelectiveNodeCreator(node: string, connectionType: NodeConn
nodeCreatorStore.openSelectiveNodeCreator({ node, connectionType });
}
+async function onOpenNodeCreatorForTriggerNodes(source: NodeCreatorOpenSource) {
+ nodeCreatorStore.openNodeCreatorForTriggerNodes(source);
+}
+
function onOpenNodeCreatorFromCanvas(source: NodeCreatorOpenSource) {
onOpenNodeCreator({ createNodeActive: true, source });
}
@@ -1347,29 +1359,36 @@ function onClickPane(position: CanvasNode['position']) {
*/
function registerCustomActions() {
- // @TODO Implement these
- // this.registerCustomAction({
- // key: 'openNodeDetail',
- // action: ({ node }: { node: string }) => {
- // this.nodeSelectedByName(node, true);
- // },
- // });
- //
- // this.registerCustomAction({
- // key: 'openSelectiveNodeCreator',
- // action: this.openSelectiveNodeCreator,
- // });
- //
- // this.registerCustomAction({
- // key: 'showNodeCreator',
- // action: () => {
- // this.ndvStore.activeNodeName = null;
- //
- // void this.$nextTick(() => {
- // this.showTriggerCreator(NODE_CREATOR_OPEN_SOURCES.TAB);
- // });
- // },
- // });
+ registerCustomAction({
+ key: 'openNodeDetail',
+ action: ({ node }: { node: string }) => {
+ setNodeActiveByName(node);
+ },
+ });
+
+ registerCustomAction({
+ key: 'openSelectiveNodeCreator',
+ action: ({
+ connectiontype: connectionType,
+ node,
+ }: {
+ connectiontype: NodeConnectionType;
+ node: string;
+ }) => {
+ void onOpenSelectiveNodeCreator(node, connectionType);
+ },
+ });
+
+ registerCustomAction({
+ key: 'showNodeCreator',
+ action: () => {
+ ndvStore.activeNodeName = null;
+
+ void nextTick(() => {
+ void onOpenNodeCreatorForTriggerNodes(NODE_CREATOR_OPEN_SOURCES.TAB);
+ });
+ },
+ });
}
/**
@@ -1432,6 +1451,10 @@ onMounted(async () => {
void externalHooks.run('nodeView.mount').catch(() => {});
});
+onActivated(() => {
+ addBeforeUnloadEventBindings();
+});
+
onBeforeUnmount(() => {
removeUndoRedoEventBindings();
removePostMessageEventBindings();
@@ -1440,6 +1463,10 @@ onBeforeUnmount(() => {
removeExecutionOpenedEventBindings();
removeWorkflowSavedEventBindings();
});
+
+onDeactivated(() => {
+ removeBeforeUnloadEventBindings();
+});
diff --git a/packages/editor-ui/src/views/NodeView.vue b/packages/editor-ui/src/views/NodeView.vue
index 4ef91b2b1a..6bcc74bd2b 100644
--- a/packages/editor-ui/src/views/NodeView.vue
+++ b/packages/editor-ui/src/views/NodeView.vue
@@ -261,7 +261,7 @@ import {
VALID_WORKFLOW_IMPORT_URL_REGEX,
} from '@/constants';
-import useGlobalLinkActions from '@/composables/useGlobalLinkActions';
+import { useGlobalLinkActions } from '@/composables/useGlobalLinkActions';
import { useNodeHelpers } from '@/composables/useNodeHelpers';
import useCanvasMouseSelect from '@/composables/useCanvasMouseSelect';
import { useExecutionDebugging } from '@/composables/useExecutionDebugging';
@@ -327,7 +327,7 @@ import type {
NodeFilterType,
} from '@/Interface';
-import { type RouteLocation, useRouter } from 'vue-router';
+import { type RouteLocation, useRoute, useRouter } from 'vue-router';
import { dataPinningEventBus, nodeViewEventBus } from '@/event-bus';
import { useCanvasStore } from '@/stores/canvas.store';
import { useCredentialsStore } from '@/stores/credentials.store';
@@ -401,6 +401,7 @@ import { isJSPlumbEndpointElement, isJSPlumbConnection } from '@/utils/typeGuard
import { usePostHog } from '@/stores/posthog.store';
import { useNpsSurveyStore } from '@/stores/npsSurvey.store';
import { getResourcePermissions } from '@/permissions';
+import { useBeforeUnload } from '@/composables/useBeforeUnload';
interface AddNodeOptions {
position?: XYPosition;
@@ -437,6 +438,7 @@ export default defineComponent({
const nodeViewRef = ref(null);
const onMouseMoveEnd = ref<((e: MouseEvent | TouchEvent) => void) | null>(null);
const router = useRouter();
+ const route = useRoute();
const ndvStore = useNDVStore();
const externalHooks = useExternalHooks();
@@ -452,6 +454,9 @@ export default defineComponent({
const canvasPanning = useCanvasPanning(nodeViewRootRef, { onMouseMoveEnd });
const workflowHelpers = useWorkflowHelpers({ router });
const { runWorkflow, stopCurrentExecution } = useRunWorkflow({ router });
+ const { addBeforeUnloadEventBindings, removeBeforeUnloadEventBindings } = useBeforeUnload({
+ route,
+ });
return {
locale,
@@ -477,6 +482,8 @@ export default defineComponent({
...useMessage(),
...useUniqueNodeName(),
...useExecutionDebugging(),
+ addBeforeUnloadEventBindings,
+ removeBeforeUnloadEventBindings,
};
},
data() {
@@ -510,7 +517,6 @@ export default defineComponent({
suspendRecordingDetachedConnections: false,
NODE_CREATOR_OPEN_SOURCES,
eventsAttached: false,
- unloadTimeout: undefined as undefined | ReturnType,
canOpenNDV: true,
hideNodeIssues: false,
};
@@ -926,13 +932,14 @@ export default defineComponent({
nodeViewEventBus.on('saveWorkflow', this.saveCurrentWorkflowExternal);
this.canvasStore.isDemo = this.isDemo;
+
+ this.addBeforeUnloadEventBindings();
},
deactivated() {
this.unbindCanvasEvents();
document.removeEventListener('keydown', this.keyDown);
document.removeEventListener('keyup', this.keyUp);
window.removeEventListener('message', this.onPostMessageReceived);
- window.removeEventListener('beforeunload', this.onBeforeUnload);
window.removeEventListener('pageshow', this.onPageShow);
nodeViewEventBus.off('newWorkflow', this.newWorkflow);
@@ -950,6 +957,8 @@ export default defineComponent({
dataPinningEventBus.off('pin-data', this.nodeHelpers.addPinDataConnections);
dataPinningEventBus.off('unpin-data', this.nodeHelpers.removePinDataConnections);
nodeViewEventBus.off('saveWorkflow', this.saveCurrentWorkflowExternal);
+
+ this.removeBeforeUnloadEventBindings();
},
beforeMount() {
if (!this.isDemo) {
@@ -3524,22 +3533,6 @@ export default defineComponent({
this.eventsAttached = false;
},
- onBeforeUnload(e: BeforeUnloadEvent) {
- if (this.isDemo || window.preventNodeViewBeforeUnload) {
- return;
- } else if (this.uiStore.stateIsDirty) {
- e.returnValue = true; //Gecko + IE
- return true; //Gecko + Webkit, Safari, Chrome etc.
- } else {
- this.canvasStore.startLoading(this.$locale.baseText('nodeView.redirecting'));
- return;
- }
- },
- onUnload() {
- // This will fire if users decides to leave the page after prompted
- // Clear the interval to prevent the notification from being sent
- clearTimeout(this.unloadTimeout);
- },
makeNewWorkflowShareable() {
const { currentProject, personalProject } = this.projectsStore;
const homeProject = currentProject ?? personalProject ?? {};
@@ -3674,8 +3667,6 @@ export default defineComponent({
document.addEventListener('keydown', this.keyDown);
document.addEventListener('keyup', this.keyUp);
- window.addEventListener('beforeunload', this.onBeforeUnload);
- window.addEventListener('unload', this.onUnload);
// Once view is initialized, pick up all toast notifications
// waiting in the store and display them
this.showNotificationForViews([VIEWS.WORKFLOW, VIEWS.NEW_WORKFLOW]);
diff --git a/packages/editor-ui/src/views/SettingsPersonalView.vue b/packages/editor-ui/src/views/SettingsPersonalView.vue
index 60b40fb686..0ddbe6e5a5 100644
--- a/packages/editor-ui/src/views/SettingsPersonalView.vue
+++ b/packages/editor-ui/src/views/SettingsPersonalView.vue
@@ -173,7 +173,6 @@ async function updateUserBasicInfo(userBasicInfo: UserBasicDetailsWithMfa) {
}
await usersStore.updateUser({
- id: usersStore.currentUserId,
firstName: userBasicInfo.firstName,
lastName: userBasicInfo.lastName,
email: userBasicInfo.email,
diff --git a/packages/editor-ui/src/views/SetupView.vue b/packages/editor-ui/src/views/SetupView.vue
index eb67935bb0..c85735374c 100644
--- a/packages/editor-ui/src/views/SetupView.vue
+++ b/packages/editor-ui/src/views/SetupView.vue
@@ -13,11 +13,12 @@ import { defineComponent } from 'vue';
import { useToast } from '@/composables/useToast';
import type { IFormBoxConfig } from '@/Interface';
-import { VIEWS } from '@/constants';
+import { MORE_ONBOARDING_OPTIONS_EXPERIMENT, VIEWS } from '@/constants';
import { mapStores } from 'pinia';
import { useUIStore } from '@/stores/ui.store';
import { useSettingsStore } from '@/stores/settings.store';
import { useUsersStore } from '@/stores/users.store';
+import { usePostHog } from '@/stores/posthog.store';
export default defineComponent({
name: 'SetupView',
@@ -91,12 +92,15 @@ export default defineComponent({
};
},
computed: {
- ...mapStores(useSettingsStore, useUIStore, useUsersStore),
+ ...mapStores(useSettingsStore, useUIStore, useUsersStore, usePostHog),
},
methods: {
async onSubmit(values: { [key: string]: string | boolean }) {
try {
const forceRedirectedHere = this.settingsStore.showSetupPage;
+ const isPartOfOnboardingExperiment =
+ this.posthogStore.getVariant(MORE_ONBOARDING_OPTIONS_EXPERIMENT.name) ===
+ MORE_ONBOARDING_OPTIONS_EXPERIMENT.variant;
this.loading = true;
await this.usersStore.createOwner(
values as { firstName: string; lastName: string; email: string; password: string },
@@ -109,7 +113,11 @@ export default defineComponent({
}
if (forceRedirectedHere) {
- await this.$router.push({ name: VIEWS.HOMEPAGE });
+ if (isPartOfOnboardingExperiment) {
+ await this.$router.push({ name: VIEWS.WORKFLOWS });
+ } else {
+ await this.$router.push({ name: VIEWS.NEW_WORKFLOW });
+ }
} else {
await this.$router.push({ name: VIEWS.USERS_SETTINGS });
}
diff --git a/packages/editor-ui/src/views/WorkflowsView.vue b/packages/editor-ui/src/views/WorkflowsView.vue
index 55e61c4fb1..564ff672a2 100644
--- a/packages/editor-ui/src/views/WorkflowsView.vue
+++ b/packages/editor-ui/src/views/WorkflowsView.vue
@@ -61,29 +61,14 @@
: $locale.baseText('workflows.empty.heading.userNotSetup')
}}
- {{ emptyListDescription }}
+
+ {{ emptyListDescription }}
+
@@ -144,7 +163,7 @@
import { defineComponent } from 'vue';
import ResourcesListLayout, { type IResource } from '@/components/layouts/ResourcesListLayout.vue';
import WorkflowCard from '@/components/WorkflowCard.vue';
-import { EnterpriseEditionFeature, VIEWS } from '@/constants';
+import { EnterpriseEditionFeature, MORE_ONBOARDING_OPTIONS_EXPERIMENT, VIEWS } from '@/constants';
import type { ITag, IUser, IWorkflowDb } from '@/Interface';
import TagsDropdown from '@/components/TagsDropdown.vue';
import { mapStores } from 'pinia';
@@ -158,6 +177,7 @@ import { useProjectsStore } from '@/stores/projects.store';
import ProjectTabs from '@/components/Projects/ProjectTabs.vue';
import { useTemplatesStore } from '@/stores/templates.store';
import { getResourcePermissions } from '@/permissions';
+import { usePostHog } from '@/stores/posthog.store';
interface Filters {
search: string;
@@ -202,6 +222,7 @@ const WorkflowsView = defineComponent({
useTagsStore,
useProjectsStore,
useTemplatesStore,
+ usePostHog,
),
readOnlyEnv(): boolean {
return this.sourceControlStore.preferences.branchReadOnly;
@@ -245,6 +266,12 @@ const WorkflowsView = defineComponent({
return undefined;
},
+ isOnboardingExperimentEnabled() {
+ return (
+ this.posthogStore.getVariant(MORE_ONBOARDING_OPTIONS_EXPERIMENT.name) ===
+ MORE_ONBOARDING_OPTIONS_EXPERIMENT.variant
+ );
+ },
isSalesUser() {
if (!this.userRole) {
return false;
@@ -312,10 +339,19 @@ const WorkflowsView = defineComponent({
this.$telemetry.track('User clicked add workflow button', {
source: 'Workflows list',
});
+ this.trackEmptyCardClick('blank');
},
getTemplateRepositoryURL() {
return this.templatesStore.websiteTemplateRepositoryURL;
},
+ trackEmptyCardClick(option: 'blank' | 'templates' | 'courses') {
+ this.$telemetry.track('User clicked empty page option', {
+ option,
+ });
+ if (option === 'templates' && this.isSalesUser) {
+ this.trackCategoryLinkClick('Sales');
+ }
+ },
trackCategoryLinkClick(category: string) {
this.$telemetry.track(`User clicked Browse ${category} Templates`, {
role: this.usersStore.currentUserCloudInfo?.role,
diff --git a/packages/editor-ui/src/views/__tests__/SettingsSourceControl.test.ts b/packages/editor-ui/src/views/__tests__/SettingsSourceControl.test.ts
index 163e81c284..aa0a100e4e 100644
--- a/packages/editor-ui/src/views/__tests__/SettingsSourceControl.test.ts
+++ b/packages/editor-ui/src/views/__tests__/SettingsSourceControl.test.ts
@@ -105,7 +105,7 @@ describe('SettingsSourceControl', () => {
expect(saveSettingsButton).toBeDisabled();
const branchSelect = getByTestId('source-control-branch-select');
- await userEvent.click(within(branchSelect).getByRole('textbox'));
+ await userEvent.click(within(branchSelect).getByRole('combobox'));
await waitFor(() => expect(getByText('main')).toBeVisible());
await userEvent.click(getByText('main'));
@@ -137,7 +137,7 @@ describe('SettingsSourceControl', () => {
expect(refreshSshKeyButton).toBeVisible();
});
- await userEvent.click(within(sshKeyTypeSelect).getByRole('textbox'));
+ await userEvent.click(within(sshKeyTypeSelect).getByRole('combobox'));
await waitFor(() => expect(getByText('RSA')).toBeVisible());
await userEvent.click(getByText('RSA'));
await userEvent.click(refreshSshKeyButton);
diff --git a/packages/node-dev/package.json b/packages/node-dev/package.json
index 87083a81cd..256b992fa2 100644
--- a/packages/node-dev/package.json
+++ b/packages/node-dev/package.json
@@ -1,6 +1,6 @@
{
"name": "n8n-node-dev",
- "version": "1.55.0",
+ "version": "1.56.0",
"description": "CLI to simplify n8n credentials/node development",
"main": "dist/src/index",
"types": "dist/src/index.d.ts",
diff --git a/packages/nodes-base/credentials/CrateDb.credentials.ts b/packages/nodes-base/credentials/CrateDb.credentials.ts
index 8993f58b76..8b5aa627be 100644
--- a/packages/nodes-base/credentials/CrateDb.credentials.ts
+++ b/packages/nodes-base/credentials/CrateDb.credentials.ts
@@ -52,14 +52,6 @@ export class CrateDb implements ICredentialType {
name: 'Require',
value: 'require',
},
- {
- name: 'Verify (Not Implemented)',
- value: 'verify',
- },
- {
- name: 'Verify-Full (Not Implemented)',
- value: 'verify-full',
- },
],
default: 'disable',
},
diff --git a/packages/nodes-base/credentials/Postgres.credentials.ts b/packages/nodes-base/credentials/Postgres.credentials.ts
index d8916475b3..12eaddd5f4 100644
--- a/packages/nodes-base/credentials/Postgres.credentials.ts
+++ b/packages/nodes-base/credentials/Postgres.credentials.ts
@@ -65,14 +65,6 @@ export class Postgres implements ICredentialType {
name: 'Require',
value: 'require',
},
- {
- name: 'Verify (Not Implemented)',
- value: 'verify',
- },
- {
- name: 'Verify-Full (Not Implemented)',
- value: 'verify-full',
- },
],
default: 'disable',
},
diff --git a/packages/nodes-base/credentials/QuestDb.credentials.ts b/packages/nodes-base/credentials/QuestDb.credentials.ts
index d44ecdaea9..4f763c394f 100644
--- a/packages/nodes-base/credentials/QuestDb.credentials.ts
+++ b/packages/nodes-base/credentials/QuestDb.credentials.ts
@@ -52,14 +52,6 @@ export class QuestDb implements ICredentialType {
name: 'Require',
value: 'require',
},
- {
- name: 'Verify (Not Implemented)',
- value: 'verify',
- },
- {
- name: 'Verify-Full (Not Implemented)',
- value: 'verify-full',
- },
],
default: 'disable',
},
diff --git a/packages/nodes-base/credentials/TimescaleDb.credentials.ts b/packages/nodes-base/credentials/TimescaleDb.credentials.ts
index 5211e942b7..04226a8d04 100644
--- a/packages/nodes-base/credentials/TimescaleDb.credentials.ts
+++ b/packages/nodes-base/credentials/TimescaleDb.credentials.ts
@@ -64,14 +64,6 @@ export class TimescaleDb implements ICredentialType {
name: 'Require',
value: 'require',
},
- {
- name: 'Verify (Not Implemented)',
- value: 'verify',
- },
- {
- name: 'Verify-Full (Not Implemented)',
- value: 'verify-full',
- },
],
default: 'disable',
},
diff --git a/packages/nodes-base/credentials/TogglApi.credentials.ts b/packages/nodes-base/credentials/TogglApi.credentials.ts
index eb4eb5b4a6..30145b168c 100644
--- a/packages/nodes-base/credentials/TogglApi.credentials.ts
+++ b/packages/nodes-base/credentials/TogglApi.credentials.ts
@@ -1,4 +1,9 @@
-import type { ICredentialType, INodeProperties } from 'n8n-workflow';
+import type {
+ IAuthenticateGeneric,
+ ICredentialTestRequest,
+ ICredentialType,
+ INodeProperties,
+} from 'n8n-workflow';
export class TogglApi implements ICredentialType {
name = 'togglApi';
@@ -9,7 +14,7 @@ export class TogglApi implements ICredentialType {
properties: INodeProperties[] = [
{
- displayName: 'Username',
+ displayName: 'Email Address',
name: 'username',
type: 'string',
default: '',
@@ -22,4 +27,21 @@ export class TogglApi implements ICredentialType {
default: '',
},
];
+
+ authenticate: IAuthenticateGeneric = {
+ type: 'generic',
+ properties: {
+ auth: {
+ username: '={{$credentials.username}}',
+ password: '={{$credentials.password}}',
+ },
+ },
+ };
+
+ test: ICredentialTestRequest = {
+ request: {
+ baseURL: 'https://api.track.toggl.com/api/v9',
+ url: '/me',
+ },
+ };
}
diff --git a/packages/nodes-base/nodes/Calendly/CalendlyTrigger.node.ts b/packages/nodes-base/nodes/Calendly/CalendlyTrigger.node.ts
index e272caee93..c6328fa801 100644
--- a/packages/nodes-base/nodes/Calendly/CalendlyTrigger.node.ts
+++ b/packages/nodes-base/nodes/Calendly/CalendlyTrigger.node.ts
@@ -116,7 +116,7 @@ export class CalendlyTrigger implements INodeType {
async checkExists(this: IHookFunctions): Promise {
const webhookUrl = this.getNodeWebhookUrl('default');
const webhookData = this.getWorkflowStaticData('node');
- const events = this.getNodeParameter('events') as string;
+ const events = this.getNodeParameter('events') as string[];
const authenticationType = await getAuthenticationType.call(this);
@@ -160,16 +160,14 @@ export class CalendlyTrigger implements INodeType {
const { collection } = await calendlyApiRequest.call(this, 'GET', endpoint, {}, qs);
for (const webhook of collection) {
- if (webhook.callback_url === webhookUrl) {
- for (const event of events) {
- if (!webhook.events.includes(event)) {
- return false;
- }
- }
+ if (
+ webhook.callback_url === webhookUrl &&
+ events.length === webhook.events.length &&
+ events.every((event: string) => webhook.events.includes(event))
+ ) {
+ webhookData.webhookURI = webhook.uri;
+ return true;
}
-
- webhookData.webhookURI = webhook.uri;
- return true;
}
}
@@ -178,7 +176,7 @@ export class CalendlyTrigger implements INodeType {
async create(this: IHookFunctions): Promise {
const webhookData = this.getWorkflowStaticData('node');
const webhookUrl = this.getNodeWebhookUrl('default');
- const events = this.getNodeParameter('events') as string;
+ const events = this.getNodeParameter('events') as string[];
const authenticationType = await getAuthenticationType.call(this);
diff --git a/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts b/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts
index 6ab3c4cbf1..0dfd4b2edf 100644
--- a/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts
+++ b/packages/nodes-base/nodes/ExecuteWorkflow/ExecuteWorkflow.node.ts
@@ -16,7 +16,7 @@ export class ExecuteWorkflow implements INodeType {
icon: 'fa:sign-in-alt',
iconColor: 'orange-red',
group: ['transform'],
- version: 1,
+ version: [1, 1.1],
subtitle: '={{"Workflow: " + $parameter["workflowId"]}}',
description: 'Execute another workflow',
defaults: {
@@ -79,6 +79,7 @@ export class ExecuteWorkflow implements INodeType {
displayOptions: {
show: {
source: ['database'],
+ '@version': [1],
},
},
default: '',
@@ -87,7 +88,20 @@ export class ExecuteWorkflow implements INodeType {
description:
"Note on using an expression here: if this node is set to run once with all items, they will all be sent to the same workflow. That workflow's ID will be calculated by evaluating the expression for the first input item.",
},
-
+ {
+ displayName: 'Workflow',
+ name: 'workflowId',
+ type: 'workflowSelector',
+ displayOptions: {
+ show: {
+ source: ['database'],
+ '@version': [{ _cnd: { gte: 1.1 } }],
+ },
+ },
+ default: '',
+ required: true,
+ hint: "Note on using an expression here: if this node is set to run once with all items, they will all be sent to the same workflow. That workflow's ID will be calculated by evaluating the expression for the first input item.",
+ },
// ----------------------------------
// source:localFile
// ----------------------------------
diff --git a/packages/nodes-base/nodes/ExecuteWorkflow/GenericFunctions.ts b/packages/nodes-base/nodes/ExecuteWorkflow/GenericFunctions.ts
index 9e212eb194..7588040bf8 100644
--- a/packages/nodes-base/nodes/ExecuteWorkflow/GenericFunctions.ts
+++ b/packages/nodes-base/nodes/ExecuteWorkflow/GenericFunctions.ts
@@ -1,13 +1,27 @@
import { readFile as fsReadFile } from 'fs/promises';
import { NodeOperationError, jsonParse } from 'n8n-workflow';
-import type { IExecuteFunctions, IExecuteWorkflowInfo, IRequestOptions } from 'n8n-workflow';
+import type {
+ IExecuteFunctions,
+ IExecuteWorkflowInfo,
+ INodeParameterResourceLocator,
+ IRequestOptions,
+} from 'n8n-workflow';
export async function getWorkflowInfo(this: IExecuteFunctions, source: string, itemIndex = 0) {
const workflowInfo: IExecuteWorkflowInfo = {};
-
+ const nodeVersion = this.getNode().typeVersion;
if (source === 'database') {
// Read workflow from database
- workflowInfo.id = this.getNodeParameter('workflowId', itemIndex) as string;
+ if (nodeVersion === 1) {
+ workflowInfo.id = this.getNodeParameter('workflowId', itemIndex) as string;
+ } else {
+ const { value } = this.getNodeParameter(
+ 'workflowId',
+ itemIndex,
+ {},
+ ) as INodeParameterResourceLocator;
+ workflowInfo.id = value as string;
+ }
} else if (source === 'localFile') {
// Read workflow from filesystem
const workflowPath = this.getNodeParameter('workflowPath', itemIndex) as string;
diff --git a/packages/nodes-base/nodes/Facebook/FacebookGraphApi.node.ts b/packages/nodes-base/nodes/Facebook/FacebookGraphApi.node.ts
index 9a88354d2a..0a4a4eb7f9 100644
--- a/packages/nodes-base/nodes/Facebook/FacebookGraphApi.node.ts
+++ b/packages/nodes-base/nodes/Facebook/FacebookGraphApi.node.ts
@@ -80,6 +80,18 @@ export class FacebookGraphApi implements INodeType {
name: 'Default',
value: '',
},
+ {
+ name: 'v20.0',
+ value: 'v20.0',
+ },
+ {
+ name: 'v19.0',
+ value: 'v19.0',
+ },
+ {
+ name: 'v18.0',
+ value: 'v18.0',
+ },
{
name: 'v17.0',
value: 'v17.0',
diff --git a/packages/nodes-base/nodes/Files/ReadWriteFile/actions/read.operation.ts b/packages/nodes-base/nodes/Files/ReadWriteFile/actions/read.operation.ts
index 3c62c7c093..e8e7b8e69a 100644
--- a/packages/nodes-base/nodes/Files/ReadWriteFile/actions/read.operation.ts
+++ b/packages/nodes-base/nodes/Files/ReadWriteFile/actions/read.operation.ts
@@ -1,4 +1,10 @@
-import type { IExecuteFunctions, INodeExecutionData, INodeProperties } from 'n8n-workflow';
+import { NodeApiError } from 'n8n-workflow';
+import type {
+ IExecuteFunctions,
+ INodeExecutionData,
+ INodeProperties,
+ JsonObject,
+} from 'n8n-workflow';
import glob from 'fast-glob';
import { errorMapper } from '../helpers/utils';
@@ -124,7 +130,6 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData
},
});
}
-
returnData.push(...newItems);
} catch (error) {
const nodeOperatioinError = errorMapper.call(this, error, itemIndex, {
@@ -142,7 +147,7 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData
});
continue;
}
- throw nodeOperatioinError;
+ throw new NodeApiError(this.getNode(), error as JsonObject, { itemIndex });
}
}
diff --git a/packages/nodes-base/nodes/Files/ReadWriteFile/actions/write.operation.ts b/packages/nodes-base/nodes/Files/ReadWriteFile/actions/write.operation.ts
index 55796b8064..27eb340f4e 100644
--- a/packages/nodes-base/nodes/Files/ReadWriteFile/actions/write.operation.ts
+++ b/packages/nodes-base/nodes/Files/ReadWriteFile/actions/write.operation.ts
@@ -1,6 +1,11 @@
import type { Readable } from 'stream';
-import type { IExecuteFunctions, INodeExecutionData, INodeProperties } from 'n8n-workflow';
-import { BINARY_ENCODING } from 'n8n-workflow';
+import type {
+ IExecuteFunctions,
+ INodeExecutionData,
+ INodeProperties,
+ JsonObject,
+} from 'n8n-workflow';
+import { BINARY_ENCODING, NodeApiError } from 'n8n-workflow';
import { errorMapper } from '../helpers/utils';
import { updateDisplayOptions } from '@utils/utilities';
@@ -114,7 +119,7 @@ export async function execute(this: IExecuteFunctions, items: INodeExecutionData
});
continue;
}
- throw nodeOperatioinError;
+ throw new NodeApiError(this.getNode(), error as JsonObject, { itemIndex });
}
}
diff --git a/packages/nodes-base/nodes/Filter/Filter.node.ts b/packages/nodes-base/nodes/Filter/Filter.node.ts
index 69a46d4a4f..7eb36ca4f0 100644
--- a/packages/nodes-base/nodes/Filter/Filter.node.ts
+++ b/packages/nodes-base/nodes/Filter/Filter.node.ts
@@ -13,11 +13,13 @@ export class Filter extends VersionedNodeType {
iconColor: 'light-blue',
group: ['transform'],
description: 'Remove items matching a condition',
+ defaultVersion: 2.1,
};
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
1: new FilterV1(baseDescription),
2: new FilterV2(baseDescription),
+ 2.1: new FilterV2(baseDescription),
};
super(nodeVersions, baseDescription);
diff --git a/packages/nodes-base/nodes/Filter/V2/FilterV2.node.ts b/packages/nodes-base/nodes/Filter/V2/FilterV2.node.ts
index 6c7e50c197..06df074cd5 100644
--- a/packages/nodes-base/nodes/Filter/V2/FilterV2.node.ts
+++ b/packages/nodes-base/nodes/Filter/V2/FilterV2.node.ts
@@ -1,12 +1,16 @@
import set from 'lodash/set';
-import type {
- IExecuteFunctions,
- INodeExecutionData,
- INodeType,
- INodeTypeBaseDescription,
- INodeTypeDescription,
+import {
+ ApplicationError,
+ NodeOperationError,
+ type IExecuteFunctions,
+ type INodeExecutionData,
+ type INodeType,
+ type INodeTypeBaseDescription,
+ type INodeTypeDescription,
} from 'n8n-workflow';
import { ENABLE_LESS_STRICT_TYPE_VALIDATION } from '../../../utils/constants';
+import { getTypeValidationParameter, getTypeValidationStrictness } from '../../If/V2/utils';
+import { looseTypeValidationProperty } from '../../../utils/descriptions';
export class FilterV2 implements INodeType {
description: INodeTypeDescription;
@@ -14,7 +18,7 @@ export class FilterV2 implements INodeType {
constructor(baseDescription: INodeTypeBaseDescription) {
this.description = {
...baseDescription,
- version: 2,
+ version: [2, 2.1],
defaults: {
name: 'Filter',
color: '#229eff',
@@ -33,7 +37,16 @@ export class FilterV2 implements INodeType {
typeOptions: {
filter: {
caseSensitive: '={{!$parameter.options.ignoreCase}}',
- typeValidation: '={{$parameter.options.looseTypeValidation ? "loose" : "strict"}}',
+ typeValidation: getTypeValidationStrictness(2.1),
+ },
+ },
+ },
+ {
+ ...looseTypeValidationProperty,
+ default: false,
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { gte: 2.1 } }],
},
},
},
@@ -52,11 +65,12 @@ export class FilterV2 implements INodeType {
default: true,
},
{
- displayName: 'Less Strict Type Validation',
- description: 'Whether to try casting value types based on the selected operator',
- name: 'looseTypeValidation',
- type: 'boolean',
- default: true,
+ ...looseTypeValidationProperty,
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { lt: 2.1 } }],
+ },
+ },
},
],
},
@@ -80,7 +94,10 @@ export class FilterV2 implements INodeType {
extractValue: true,
}) as boolean;
} catch (error) {
- if (!options.looseTypeValidation && !error.description) {
+ if (
+ !getTypeValidationParameter(2.1)(this, itemIndex, options.looseTypeValidation) &&
+ !error.description
+ ) {
set(error, 'description', ENABLE_LESS_STRICT_TYPE_VALIDATION);
}
set(error, 'context.itemIndex', itemIndex);
@@ -101,7 +118,18 @@ export class FilterV2 implements INodeType {
if (this.continueOnFail(error)) {
discardedItems.push(item);
} else {
- throw error;
+ if (error instanceof NodeOperationError) {
+ throw error;
+ }
+
+ if (error instanceof ApplicationError) {
+ set(error, 'context.itemIndex', itemIndex);
+ throw error;
+ }
+
+ throw new NodeOperationError(this.getNode(), error, {
+ itemIndex,
+ });
}
}
});
diff --git a/packages/nodes-base/nodes/Form/utils.ts b/packages/nodes-base/nodes/Form/utils.ts
index 079ae4278c..35f06496ce 100644
--- a/packages/nodes-base/nodes/Form/utils.ts
+++ b/packages/nodes-base/nodes/Form/utils.ts
@@ -170,8 +170,8 @@ export async function formWebhook(
}
} catch (error) {
if (error instanceof WebhookAuthorizationError) {
- res.writeHead(error.responseCode, { 'WWW-Authenticate': 'Basic realm="Webhook"' });
- res.end(error.message);
+ res.setHeader('WWW-Authenticate', 'Basic realm="Enter credentials"');
+ res.status(401).send();
return { noWebhookResponse: true };
}
throw error;
diff --git a/packages/nodes-base/nodes/Google/Sheet/GoogleSheets.node.ts b/packages/nodes-base/nodes/Google/Sheet/GoogleSheets.node.ts
index 293cea5414..da0befd1fb 100644
--- a/packages/nodes-base/nodes/Google/Sheet/GoogleSheets.node.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/GoogleSheets.node.ts
@@ -11,7 +11,7 @@ export class GoogleSheets extends VersionedNodeType {
name: 'googleSheets',
icon: 'file:googleSheets.svg',
group: ['input', 'output'],
- defaultVersion: 4.4,
+ defaultVersion: 4.5,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Read, update and write data to Google Sheets',
};
@@ -25,6 +25,7 @@ export class GoogleSheets extends VersionedNodeType {
4.2: new GoogleSheetsV2(baseDescription),
4.3: new GoogleSheetsV2(baseDescription),
4.4: new GoogleSheetsV2(baseDescription),
+ 4.5: new GoogleSheetsV2(baseDescription),
};
super(nodeVersions, baseDescription);
diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/append.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/append.operation.ts
index 4ec7b16c5e..42b255ac1a 100644
--- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/append.operation.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/append.operation.ts
@@ -14,7 +14,7 @@ import {
mapFields,
untilSheetSelected,
} from '../../helpers/GoogleSheets.utils';
-import { cellFormat, handlingExtraData } from './commonDescription';
+import { cellFormat, handlingExtraData, useAppendOption } from './commonDescription';
export const description: SheetProperties = [
{
@@ -198,14 +198,7 @@ export const description: SheetProperties = [
...handlingExtraData,
displayOptions: { show: { '/columns.mappingMode': ['autoMapInputData'] } },
},
- {
- displayName: 'Use Append',
- name: 'useAppend',
- type: 'boolean',
- default: false,
- description:
- 'Whether to use append instead of update(default), this is more efficient but in some cases data might be misaligned',
- },
+ useAppendOption,
],
},
];
diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts
index 0260c889ed..469181ecb2 100644
--- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/appendOrUpdate.operation.ts
@@ -18,7 +18,12 @@ import {
checkForSchemaChanges,
untilSheetSelected,
} from '../../helpers/GoogleSheets.utils';
-import { cellFormat, handlingExtraData, locationDefine } from './commonDescription';
+import {
+ cellFormat,
+ handlingExtraData,
+ locationDefine,
+ useAppendOption,
+} from './commonDescription';
export const description: SheetProperties = [
{
@@ -212,14 +217,7 @@ export const description: SheetProperties = [
...handlingExtraData,
displayOptions: { show: { '/columns.mappingMode': ['autoMapInputData'] } },
},
- {
- displayName: 'Use Append',
- name: 'useAppend',
- type: 'boolean',
- default: false,
- description:
- 'Whether to use append instead of update(default), this is more efficient but in some cases data might be misaligned',
- },
+ useAppendOption,
],
},
];
@@ -340,8 +338,18 @@ export async function execute(
} else {
const valueToMatchOn =
nodeVersion < 4
- ? (this.getNodeParameter('valueToMatchOn', i) as string)
- : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i) as string);
+ ? (this.getNodeParameter('valueToMatchOn', i, '') as string)
+ : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i, '') as string);
+
+ if (valueToMatchOn === '') {
+ throw new NodeOperationError(
+ this.getNode(),
+ "The 'Column to Match On' parameter is required",
+ {
+ itemIndex: i,
+ },
+ );
+ }
if (nodeVersion < 4) {
const valuesToSend = this.getNodeParameter('fieldsUi.values', i, []) as IDataObject[];
diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/commonDescription.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/commonDescription.ts
index 66fdd1166c..bd73aaaebf 100644
--- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/commonDescription.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/commonDescription.ts
@@ -258,3 +258,13 @@ export const handlingExtraData: INodeProperties = {
default: 'insertInNewColumn',
description: "What do to with fields that don't match any columns in the Google Sheet",
};
+
+export const useAppendOption: INodeProperties = {
+ displayName: 'Minimise API Calls',
+ name: 'useAppend',
+ type: 'boolean',
+ default: false,
+ hint: 'Use if your sheet has no gaps between rows or columns',
+ description:
+ 'Whether to use append instead of update(default), this is more efficient but in some cases data might be misaligned',
+};
diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/read.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/read.operation.ts
index 5f87c8baa5..8f8959a463 100644
--- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/read.operation.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/read.operation.ts
@@ -135,6 +135,19 @@ export const description: SheetProperties = [
options: [
dataLocationOnSheet,
outputFormatting,
+ {
+ displayName: 'Return only First Matching Row',
+ name: 'returnFirstMatch',
+ type: 'boolean',
+ default: false,
+ description:
+ 'Whether to select the first row of the sheet or the first matching row (if filters are set)',
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { gte: 4.5 } }],
+ },
+ },
+ },
{
displayName: 'When Filter Has Multiple Matches',
name: 'returnAllMatches',
@@ -154,6 +167,11 @@ export const description: SheetProperties = [
],
description:
'By default only the first result gets returned, Set to "Return All Matches" to get multiple matches',
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { lt: 4.5 } }],
+ },
+ },
},
],
},
@@ -219,7 +237,12 @@ export async function execute(
const inputData = data as string[][];
if (lookupValues.length) {
- const returnAllMatches = options.returnAllMatches === 'returnAllMatches' ? true : false;
+ let returnAllMatches;
+ if (nodeVersion < 4.5) {
+ returnAllMatches = options.returnAllMatches === 'returnAllMatches' ? true : false;
+ } else {
+ returnAllMatches = options.returnFirstMatch ? false : true;
+ }
if (nodeVersion <= 4.1) {
for (let i = 1; i < items.length; i++) {
diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts
index 3d69573c43..ba72e993d9 100644
--- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/sheet/update.operation.ts
@@ -318,8 +318,18 @@ export async function execute(
} else {
const valueToMatchOn =
nodeVersion < 4
- ? (this.getNodeParameter('valueToMatchOn', i) as string)
- : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i) as string);
+ ? (this.getNodeParameter('valueToMatchOn', i, '') as string)
+ : (this.getNodeParameter(`columns.value[${columnsToMatchOn[0]}]`, i, '') as string);
+
+ if (valueToMatchOn === '') {
+ throw new NodeOperationError(
+ this.getNode(),
+ "The 'Column to Match On' parameter is required",
+ {
+ itemIndex: i,
+ },
+ );
+ }
if (nodeVersion < 4) {
const valuesToSend = this.getNodeParameter('fieldsUi.values', i, []) as IDataObject[];
diff --git a/packages/nodes-base/nodes/Google/Sheet/v2/actions/versionDescription.ts b/packages/nodes-base/nodes/Google/Sheet/v2/actions/versionDescription.ts
index 013b4bd702..ebaa2e40ba 100644
--- a/packages/nodes-base/nodes/Google/Sheet/v2/actions/versionDescription.ts
+++ b/packages/nodes-base/nodes/Google/Sheet/v2/actions/versionDescription.ts
@@ -9,7 +9,7 @@ export const versionDescription: INodeTypeDescription = {
name: 'googleSheets',
icon: 'file:googleSheets.svg',
group: ['input', 'output'],
- version: [3, 4, 4.1, 4.2, 4.3, 4.4],
+ version: [3, 4, 4.1, 4.2, 4.3, 4.4, 4.5],
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
description: 'Read, update and write data to Google Sheets',
defaults: {
@@ -20,7 +20,7 @@ export const versionDescription: INodeTypeDescription = {
hints: [
{
message:
- "Use the 'Use Append' option for greater efficiency if your sheet is uniformly formatted without gaps between columns or rows",
+ "Use the 'Minimise API Calls' option for greater efficiency if your sheet is uniformly formatted without gaps between columns or rows",
displayCondition:
'={{$parameter["operation"] === "append" && !$parameter["options"]["useAppend"]}}',
whenToDisplay: 'beforeExecution',
diff --git a/packages/nodes-base/nodes/If/If.node.ts b/packages/nodes-base/nodes/If/If.node.ts
index 7bc1d459ca..4942fdebf2 100644
--- a/packages/nodes-base/nodes/If/If.node.ts
+++ b/packages/nodes-base/nodes/If/If.node.ts
@@ -13,12 +13,13 @@ export class If extends VersionedNodeType {
iconColor: 'green',
group: ['transform'],
description: 'Route items to different branches (true/false)',
- defaultVersion: 2,
+ defaultVersion: 2.1,
};
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
1: new IfV1(baseDescription),
2: new IfV2(baseDescription),
+ 2.1: new IfV2(baseDescription),
};
super(nodeVersions, baseDescription);
diff --git a/packages/nodes-base/nodes/If/V2/IfV2.node.ts b/packages/nodes-base/nodes/If/V2/IfV2.node.ts
index 2e90747bed..691fc2e0b9 100644
--- a/packages/nodes-base/nodes/If/V2/IfV2.node.ts
+++ b/packages/nodes-base/nodes/If/V2/IfV2.node.ts
@@ -1,12 +1,16 @@
import set from 'lodash/set';
-import type {
- IExecuteFunctions,
- INodeExecutionData,
- INodeType,
- INodeTypeBaseDescription,
- INodeTypeDescription,
+import {
+ ApplicationError,
+ NodeOperationError,
+ type IExecuteFunctions,
+ type INodeExecutionData,
+ type INodeType,
+ type INodeTypeBaseDescription,
+ type INodeTypeDescription,
} from 'n8n-workflow';
import { ENABLE_LESS_STRICT_TYPE_VALIDATION } from '../../../utils/constants';
+import { looseTypeValidationProperty } from '../../../utils/descriptions';
+import { getTypeValidationParameter, getTypeValidationStrictness } from './utils';
export class IfV2 implements INodeType {
description: INodeTypeDescription;
@@ -14,7 +18,7 @@ export class IfV2 implements INodeType {
constructor(baseDescription: INodeTypeBaseDescription) {
this.description = {
...baseDescription,
- version: 2,
+ version: [2, 2.1],
defaults: {
name: 'If',
color: '#408000',
@@ -33,7 +37,16 @@ export class IfV2 implements INodeType {
typeOptions: {
filter: {
caseSensitive: '={{!$parameter.options.ignoreCase}}',
- typeValidation: '={{$parameter.options.looseTypeValidation ? "loose" : "strict"}}',
+ typeValidation: getTypeValidationStrictness(2.1),
+ },
+ },
+ },
+ {
+ ...looseTypeValidationProperty,
+ default: false,
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { gte: 2.1 } }],
},
},
},
@@ -52,11 +65,12 @@ export class IfV2 implements INodeType {
default: true,
},
{
- displayName: 'Less Strict Type Validation',
- description: 'Whether to try casting value types based on the selected operator',
- name: 'looseTypeValidation',
- type: 'boolean',
- default: true,
+ ...looseTypeValidationProperty,
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { lt: 2.1 } }],
+ },
+ },
},
],
},
@@ -80,7 +94,10 @@ export class IfV2 implements INodeType {
extractValue: true,
}) as boolean;
} catch (error) {
- if (!options.looseTypeValidation && !error.description) {
+ if (
+ !getTypeValidationParameter(2.1)(this, itemIndex, options.looseTypeValidation) &&
+ !error.description
+ ) {
set(error, 'description', ENABLE_LESS_STRICT_TYPE_VALIDATION);
}
set(error, 'context.itemIndex', itemIndex);
@@ -101,7 +118,18 @@ export class IfV2 implements INodeType {
if (this.continueOnFail(error)) {
falseItems.push(item);
} else {
- throw error;
+ if (error instanceof NodeOperationError) {
+ throw error;
+ }
+
+ if (error instanceof ApplicationError) {
+ set(error, 'context.itemIndex', itemIndex);
+ throw error;
+ }
+
+ throw new NodeOperationError(this.getNode(), error, {
+ itemIndex,
+ });
}
}
});
diff --git a/packages/nodes-base/nodes/If/V2/utils.ts b/packages/nodes-base/nodes/If/V2/utils.ts
new file mode 100644
index 0000000000..21af372421
--- /dev/null
+++ b/packages/nodes-base/nodes/If/V2/utils.ts
@@ -0,0 +1,15 @@
+import type { IExecuteFunctions } from 'n8n-workflow';
+
+export const getTypeValidationStrictness = (version: number) => {
+ return `={{ ($nodeVersion < ${version} ? $parameter.options.looseTypeValidation : $parameter.looseTypeValidation) ? "loose" : "strict" }}`;
+};
+
+export const getTypeValidationParameter = (version: number) => {
+ return (context: IExecuteFunctions, itemIndex: number, option: boolean | undefined) => {
+ if (context.getNode().typeVersion < version) {
+ return option;
+ } else {
+ return context.getNodeParameter('looseTypeValidation', itemIndex, false) as boolean;
+ }
+ };
+};
diff --git a/packages/nodes-base/nodes/InvoiceNinja/ExpenseDescription.ts b/packages/nodes-base/nodes/InvoiceNinja/ExpenseDescription.ts
index 729c6a8b77..a53d0e271e 100644
--- a/packages/nodes-base/nodes/InvoiceNinja/ExpenseDescription.ts
+++ b/packages/nodes-base/nodes/InvoiceNinja/ExpenseDescription.ts
@@ -53,6 +53,7 @@ export const expenseFields: INodeProperties[] = [
default: {},
displayOptions: {
show: {
+ apiVersion: ['v4'],
operation: ['create'],
resource: ['expense'],
},
@@ -120,11 +121,6 @@ export const expenseFields: INodeProperties[] = [
displayName: 'Payment Type',
name: 'paymentType',
type: 'options',
- displayOptions: {
- show: {
- apiVersion: ['v4'],
- },
- },
options: [
{
name: 'ACH',
@@ -257,15 +253,137 @@ export const expenseFields: INodeProperties[] = [
],
default: 1,
},
+ {
+ displayName: 'Private Notes',
+ name: 'privateNotes',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Public Notes',
+ name: 'publicNotes',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Tax Name 1',
+ name: 'taxName1',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Tax Name 2',
+ name: 'taxName2',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Tax Rate 1',
+ name: 'taxRate1',
+ type: 'number',
+ default: 0,
+ },
+ {
+ displayName: 'Tax Rate 2',
+ name: 'taxRate2',
+ type: 'number',
+ default: 0,
+ },
+ {
+ displayName: 'Transaction Reference',
+ name: 'transactionReference',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Vendor Name or ID',
+ name: 'vendor',
+ type: 'options',
+ description:
+ 'Choose from the list, or specify an ID using an expression',
+ typeOptions: {
+ loadOptionsMethod: 'getVendors',
+ },
+ default: '',
+ },
+ ],
+ },
+ {
+ displayName: 'Additional Fields',
+ name: 'additionalFields',
+ type: 'collection',
+ placeholder: 'Add Field',
+ default: {},
+ displayOptions: {
+ show: {
+ apiVersion: ['v5'],
+ operation: ['create'],
+ resource: ['expense'],
+ },
+ },
+ options: [
+ {
+ displayName: 'Amount',
+ name: 'amount',
+ type: 'number',
+ default: 0,
+ },
+ {
+ displayName: 'Billable',
+ name: 'billable',
+ type: 'boolean',
+ default: false,
+ },
+ {
+ displayName: 'Client Name or ID',
+ name: 'client',
+ type: 'options',
+ description:
+ 'Choose from the list, or specify an ID using an expression',
+ typeOptions: {
+ loadOptionsMethod: 'getClients',
+ },
+ default: '',
+ },
+ {
+ displayName: 'Custom Value 1',
+ name: 'customValue1',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Custom Value 2',
+ name: 'customValue2',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Category Name or ID',
+ name: 'category',
+ type: 'options',
+ description:
+ 'Choose from the list, or specify an ID using an expression',
+ typeOptions: {
+ loadOptionsMethod: 'getExpenseCategories',
+ },
+ default: '',
+ },
+ {
+ displayName: 'Expense Date',
+ name: 'expenseDate',
+ type: 'dateTime',
+ default: '',
+ },
+ {
+ displayName: 'Payment Date',
+ name: 'paymentDate',
+ type: 'dateTime',
+ default: '',
+ },
{
displayName: 'Payment Type',
name: 'paymentType',
type: 'options',
- displayOptions: {
- show: {
- apiVersion: ['v5'],
- },
- },
options: [
{
name: 'Bank Transfer',
diff --git a/packages/nodes-base/nodes/InvoiceNinja/PaymentDescription.ts b/packages/nodes-base/nodes/InvoiceNinja/PaymentDescription.ts
index 17ae0938e9..82680ef85e 100644
--- a/packages/nodes-base/nodes/InvoiceNinja/PaymentDescription.ts
+++ b/packages/nodes-base/nodes/InvoiceNinja/PaymentDescription.ts
@@ -85,6 +85,7 @@ export const paymentFields: INodeProperties[] = [
default: {},
displayOptions: {
show: {
+ apiVersion: ['v4'],
operation: ['create'],
resource: ['payment'],
},
@@ -94,11 +95,6 @@ export const paymentFields: INodeProperties[] = [
displayName: 'Payment Type',
name: 'paymentType',
type: 'options',
- displayOptions: {
- show: {
- apiVersion: ['v4'],
- },
- },
options: [
{
name: 'ACH',
@@ -231,15 +227,38 @@ export const paymentFields: INodeProperties[] = [
],
default: 1,
},
+ {
+ displayName: 'Transfer Reference',
+ name: 'transferReference',
+ type: 'string',
+ default: '',
+ },
+ {
+ displayName: 'Private Notes',
+ name: 'privateNotes',
+ type: 'string',
+ default: '',
+ },
+ ],
+ },
+ {
+ displayName: 'Additional Fields',
+ name: 'additionalFields',
+ type: 'collection',
+ placeholder: 'Add Field',
+ default: {},
+ displayOptions: {
+ show: {
+ apiVersion: ['v5'],
+ operation: ['create'],
+ resource: ['payment'],
+ },
+ },
+ options: [
{
displayName: 'Payment Type',
name: 'paymentType',
type: 'options',
- displayOptions: {
- show: {
- apiVersion: ['v5'],
- },
- },
options: [
{
name: 'Bank Transfer',
diff --git a/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts b/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts
index 6c5db84770..c6c866cf5a 100644
--- a/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts
+++ b/packages/nodes-base/nodes/Postgres/v2/actions/database/update.operation.ts
@@ -82,7 +82,7 @@ const properties: INodeProperties[] = [
loadOptionsDependsOn: ['schema.value', 'table.value'],
},
default: '',
- hint: 'The column that identifies the row(s) to modify',
+ hint: 'The column to use when matching rows in Postgres to the input items of this node. Usually an ID.',
displayOptions: {
show: {
'@version': [2, 2.1],
diff --git a/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts b/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts
index d9de41cc15..fbb1a6af56 100644
--- a/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts
+++ b/packages/nodes-base/nodes/RespondToWebhook/RespondToWebhook.node.ts
@@ -290,7 +290,11 @@ export class RespondToWebhook implements INodeType {
const items = this.getInputData();
const nodeVersion = this.getNode().typeVersion;
- const WEBHOOK_NODE_TYPES = ['n8n-nodes-base.webhook', 'n8n-nodes-base.formTrigger'];
+ const WEBHOOK_NODE_TYPES = [
+ 'n8n-nodes-base.webhook',
+ 'n8n-nodes-base.formTrigger',
+ '@n8n/n8n-nodes-langchain.chatTrigger',
+ ];
try {
if (nodeVersion >= 1.1) {
diff --git a/packages/nodes-base/nodes/Schedule/tests/ScheduleTrigger.node.test.ts b/packages/nodes-base/nodes/Schedule/tests/ScheduleTrigger.node.test.ts
index fa1d2cd615..0693806f4c 100644
--- a/packages/nodes-base/nodes/Schedule/tests/ScheduleTrigger.node.test.ts
+++ b/packages/nodes-base/nodes/Schedule/tests/ScheduleTrigger.node.test.ts
@@ -1,6 +1,6 @@
import * as n8nWorkflow from 'n8n-workflow';
import type { INode, ITriggerFunctions, Workflow } from 'n8n-workflow';
-import { returnJsonArray } from 'n8n-core';
+import { type InstanceSettings, returnJsonArray } from 'n8n-core';
import { ScheduledTaskManager } from 'n8n-core/dist/ScheduledTaskManager';
import { mock } from 'jest-mock-extended';
import { ScheduleTrigger } from '../ScheduleTrigger.node';
@@ -18,7 +18,8 @@ describe('ScheduleTrigger', () => {
const node = mock({ typeVersion: 1 });
const workflow = mock({ timezone });
- const scheduledTaskManager = new ScheduledTaskManager();
+ const instanceSettings = mock({ isLeader: true });
+ const scheduledTaskManager = new ScheduledTaskManager(instanceSettings);
const helpers = mock({
returnJsonArray,
registerCron: (cronExpression, onTick) =>
diff --git a/packages/nodes-base/nodes/Switch/Switch.node.ts b/packages/nodes-base/nodes/Switch/Switch.node.ts
index c54f5b55da..fb7262f742 100644
--- a/packages/nodes-base/nodes/Switch/Switch.node.ts
+++ b/packages/nodes-base/nodes/Switch/Switch.node.ts
@@ -14,13 +14,14 @@ export class Switch extends VersionedNodeType {
iconColor: 'light-blue',
group: ['transform'],
description: 'Route items depending on defined expression or rules',
- defaultVersion: 3,
+ defaultVersion: 3.1,
};
const nodeVersions: IVersionedNodeType['nodeVersions'] = {
1: new SwitchV1(baseDescription),
2: new SwitchV2(baseDescription),
3: new SwitchV3(baseDescription),
+ 3.1: new SwitchV3(baseDescription),
};
super(nodeVersions, baseDescription);
diff --git a/packages/nodes-base/nodes/Switch/V3/SwitchV3.node.ts b/packages/nodes-base/nodes/Switch/V3/SwitchV3.node.ts
index 42939ddec6..c4ac82c990 100644
--- a/packages/nodes-base/nodes/Switch/V3/SwitchV3.node.ts
+++ b/packages/nodes-base/nodes/Switch/V3/SwitchV3.node.ts
@@ -9,10 +9,12 @@ import type {
INodeTypeBaseDescription,
INodeTypeDescription,
} from 'n8n-workflow';
-import { NodeConnectionType, NodeOperationError } from 'n8n-workflow';
+import { ApplicationError, NodeConnectionType, NodeOperationError } from 'n8n-workflow';
import set from 'lodash/set';
import { capitalize } from '@utils/utilities';
import { ENABLE_LESS_STRICT_TYPE_VALIDATION } from '../../../utils/constants';
+import { looseTypeValidationProperty } from '../../../utils/descriptions';
+import { getTypeValidationParameter, getTypeValidationStrictness } from '../../If/V2/utils';
const configuredOutputs = (parameters: INodeParameters) => {
const mode = parameters.mode as string;
@@ -48,7 +50,7 @@ export class SwitchV3 implements INodeType {
this.description = {
...baseDescription,
subtitle: `=mode: {{(${capitalize})($parameter["mode"])}}`,
- version: [3],
+ version: [3, 3.1],
defaults: {
name: 'Switch',
color: '#506000',
@@ -157,8 +159,7 @@ export class SwitchV3 implements INodeType {
multipleValues: false,
filter: {
caseSensitive: '={{!$parameter.options.ignoreCase}}',
- typeValidation:
- '={{$parameter.options.looseTypeValidation ? "loose" : "strict"}}',
+ typeValidation: getTypeValidationStrictness(3.1),
},
},
},
@@ -184,6 +185,15 @@ export class SwitchV3 implements INodeType {
},
],
},
+ {
+ ...looseTypeValidationProperty,
+ default: false,
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { gte: 3.1 } }],
+ },
+ },
+ },
{
displayName: 'Options',
name: 'options',
@@ -218,11 +228,12 @@ export class SwitchV3 implements INodeType {
default: true,
},
{
- displayName: 'Less Strict Type Validation',
- description: 'Whether to try casting value types based on the selected operator',
- name: 'looseTypeValidation',
- type: 'boolean',
- default: true,
+ ...looseTypeValidationProperty,
+ displayOptions: {
+ show: {
+ '@version': [{ _cnd: { lt: 3.1 } }],
+ },
+ },
},
{
displayName: 'Rename Fallback Output',
@@ -349,7 +360,14 @@ export class SwitchV3 implements INodeType {
},
) as boolean;
} catch (error) {
- if (!options.looseTypeValidation && !error.description) {
+ if (
+ !getTypeValidationParameter(3.1)(
+ this,
+ itemIndex,
+ options.looseTypeValidation as boolean,
+ ) &&
+ !error.description
+ ) {
error.description = ENABLE_LESS_STRICT_TYPE_VALIDATION;
}
set(error, 'context.itemIndex', itemIndex);
@@ -382,7 +400,18 @@ export class SwitchV3 implements INodeType {
returnData[0].push({ json: { error: error.message } });
continue;
}
- throw new NodeOperationError(this.getNode(), error);
+ if (error instanceof NodeOperationError) {
+ throw error;
+ }
+
+ if (error instanceof ApplicationError) {
+ set(error, 'context.itemIndex', itemIndex);
+ throw error;
+ }
+
+ throw new NodeOperationError(this.getNode(), error, {
+ itemIndex,
+ });
}
}
diff --git a/packages/nodes-base/nodes/Toggl/GenericFunctions.ts b/packages/nodes-base/nodes/Toggl/GenericFunctions.ts
index 48b018a215..6b766730c8 100644
--- a/packages/nodes-base/nodes/Toggl/GenericFunctions.ts
+++ b/packages/nodes-base/nodes/Toggl/GenericFunctions.ts
@@ -24,21 +24,10 @@ export async function togglApiRequest(
query?: IDataObject,
uri?: string,
) {
- const credentials = await this.getCredentials('togglApi');
- const headerWithAuthentication = Object.assign(
- {},
- {
- Authorization: ` Basic ${Buffer.from(
- `${credentials.username}:${credentials.password}`,
- ).toString('base64')}`,
- },
- );
-
const options: IRequestOptions = {
- headers: headerWithAuthentication,
method,
qs: query,
- uri: uri || `https://api.track.toggl.com/api/v8${resource}`,
+ uri: uri || `https://api.track.toggl.com/api/v9/me${resource}`,
body,
json: true,
};
@@ -46,7 +35,7 @@ export async function togglApiRequest(
delete options.body;
}
try {
- return await this.helpers.request(options);
+ return await this.helpers.requestWithAuthentication.call(this, 'togglApi', options);
} catch (error) {
throw new NodeApiError(this.getNode(), error as JsonObject);
}
diff --git a/packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts b/packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts
index fcfcf87846..a95d35ce13 100644
--- a/packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts
+++ b/packages/nodes-base/nodes/Toggl/TogglTrigger.node.ts
@@ -9,6 +9,7 @@ import type {
import { NodeApiError, NodeOperationError } from 'n8n-workflow';
import moment from 'moment-timezone';
+import { DateTime } from 'luxon';
import { togglApiRequest } from './GenericFunctions';
export class TogglTrigger implements INodeType {
@@ -62,7 +63,7 @@ export class TogglTrigger implements INodeType {
const qs: IDataObject = {};
let timeEntries = [];
- qs.start_date = webhookData.lastTimeChecked;
+ qs.start_date = webhookData.lastTimeChecked ?? DateTime.now().toISODate();
qs.end_date = moment().format();
try {
diff --git a/packages/nodes-base/package.json b/packages/nodes-base/package.json
index b4c524520b..db05bf38c1 100644
--- a/packages/nodes-base/package.json
+++ b/packages/nodes-base/package.json
@@ -1,6 +1,6 @@
{
"name": "n8n-nodes-base",
- "version": "1.55.0",
+ "version": "1.56.0",
"description": "Base nodes of n8n",
"main": "index.js",
"scripts": {
@@ -822,7 +822,7 @@
"@types/promise-ftp": "^1.3.4",
"@types/rfc2047": "^2.0.1",
"@types/showdown": "^1.9.4",
- "@types/snowflake-sdk": "^1.6.20",
+ "@types/snowflake-sdk": "^1.6.24",
"@types/ssh2-sftp-client": "^5.1.0",
"@types/uuid": "catalog:",
"@types/xml2js": "catalog:",
@@ -885,7 +885,7 @@
"semver": "7.5.4",
"showdown": "2.1.0",
"simple-git": "3.17.0",
- "snowflake-sdk": "1.9.2",
+ "snowflake-sdk": "1.12.0",
"ssh2-sftp-client": "7.2.3",
"tmp-promise": "3.0.3",
"ts-ics": "^1.2.2",
diff --git a/packages/nodes-base/utils/descriptions.ts b/packages/nodes-base/utils/descriptions.ts
index 1465d3e314..fb6772a12b 100644
--- a/packages/nodes-base/utils/descriptions.ts
+++ b/packages/nodes-base/utils/descriptions.ts
@@ -33,6 +33,14 @@ export const returnAllOrLimit: INodeProperties[] = [
},
];
+export const looseTypeValidationProperty: INodeProperties = {
+ displayName: 'Less Strict Type Validation',
+ description: 'Whether to try casting value types based on the selected operator',
+ name: 'looseTypeValidation',
+ type: 'boolean',
+ default: true,
+};
+
export const encodeDecodeOptions: INodePropertyOptions[] = [
{
name: 'armscii8',
diff --git a/packages/workflow/package.json b/packages/workflow/package.json
index 49d904bdf2..bbddb85cd4 100644
--- a/packages/workflow/package.json
+++ b/packages/workflow/package.json
@@ -1,6 +1,6 @@
{
"name": "n8n-workflow",
- "version": "1.54.0",
+ "version": "1.55.0",
"description": "Workflow base code of n8n",
"main": "dist/index.js",
"module": "src/index.ts",
diff --git a/packages/workflow/src/Interfaces.ts b/packages/workflow/src/Interfaces.ts
index 3faa825f7b..cab0c6d0e1 100644
--- a/packages/workflow/src/Interfaces.ts
+++ b/packages/workflow/src/Interfaces.ts
@@ -1204,7 +1204,8 @@ export type NodePropertyTypes =
| 'resourceMapper'
| 'filter'
| 'assignmentCollection'
- | 'credentials';
+ | 'credentials'
+ | 'workflowSelector';
export type CodeAutocompleteTypes = 'function' | 'functionItem';
@@ -2789,3 +2790,23 @@ export type Functionality = 'regular' | 'configuration-node' | 'pairedItem';
export type Result = { ok: true; result: T } | { ok: false; error: E };
export type CallbackManager = CallbackManagerLC;
+
+export type IPersonalizationSurveyAnswersV4 = {
+ version: 'v4';
+ personalization_survey_submitted_at: string;
+ personalization_survey_n8n_version: string;
+ automationGoalDevops?: string[] | null;
+ automationGoalDevopsOther?: string | null;
+ companyIndustryExtended?: string[] | null;
+ otherCompanyIndustryExtended?: string[] | null;
+ companySize?: string | null;
+ companyType?: string | null;
+ automationGoalSm?: string[] | null;
+ automationGoalSmOther?: string | null;
+ usageModes?: string[] | null;
+ email?: string | null;
+ role?: string | null;
+ roleOther?: string | null;
+ reportedSource?: string | null;
+ reportedSourceOther?: string | null;
+};
diff --git a/packages/workflow/src/NodeHelpers.ts b/packages/workflow/src/NodeHelpers.ts
index 1f27bacee9..485ad0d9b1 100644
--- a/packages/workflow/src/NodeHelpers.ts
+++ b/packages/workflow/src/NodeHelpers.ts
@@ -1580,7 +1580,7 @@ export function addToIssuesIfMissing(
(nodeProperties.type === 'multiOptions' && Array.isArray(value) && value.length === 0) ||
(nodeProperties.type === 'dateTime' && value === undefined) ||
(nodeProperties.type === 'options' && (value === '' || value === undefined)) ||
- (nodeProperties.type === 'resourceLocator' &&
+ ((nodeProperties.type === 'resourceLocator' || nodeProperties.type === 'workflowSelector') &&
!isValidResourceLocatorParameterValue(value as INodeParameterResourceLocator))
) {
// Parameter is required but empty
@@ -1654,7 +1654,10 @@ export function getParameterIssues(
}
}
- if (nodeProperties.type === 'resourceLocator' && isDisplayed) {
+ if (
+ (nodeProperties.type === 'resourceLocator' || nodeProperties.type === 'workflowSelector') &&
+ isDisplayed
+ ) {
const value = getParameterValueByPath(nodeValues, nodeProperties.name, path);
if (isINodeParameterResourceLocator(value)) {
const mode = nodeProperties.modes?.find((option) => option.name === value.mode);
diff --git a/packages/workflow/src/NodeParameters/FilterParameter.ts b/packages/workflow/src/NodeParameters/FilterParameter.ts
index 1d8c1a9a25..2c2fabf96b 100644
--- a/packages/workflow/src/NodeParameters/FilterParameter.ts
+++ b/packages/workflow/src/NodeParameters/FilterParameter.ts
@@ -94,14 +94,61 @@ function parseFilterConditionValues(
)} ${suffix}`;
};
- const invalidTypeDescription = 'Try changing the type of comparison.';
+ const getTypeDescription = (isStrict: boolean) => {
+ if (isStrict)
+ return 'Try changing the type of the comparison, or enabling less strict type validation.';
+ return 'Try changing the type of the comparison.';
+ };
+
+ const composeInvalidTypeDescription = (
+ type: string,
+ fromType: string,
+ valuePosition: 'first' | 'second',
+ ) => {
+ fromType = fromType.toLocaleLowerCase();
+ const expectedType = withIndefiniteArticle(type);
+
+ let convertionFunction = '';
+ if (type === 'string') {
+ convertionFunction = '.toString()';
+ } else if (type === 'number') {
+ convertionFunction = '.toNumber()';
+ } else if (type === 'boolean') {
+ convertionFunction = '.toBoolean()';
+ }
+
+ if (strict && convertionFunction) {
+ const suggestFunction = ` by adding ${convertionFunction}
`;
+ return `
+Try either:
+
+ - Enabling less strict type validation
+ - Converting the ${valuePosition} field to ${expectedType}${suggestFunction}
+
+ `;
+ }
+
+ return getTypeDescription(strict);
+ };
+
+ if (!leftValid && !rightValid && typeof condition.leftValue === typeof condition.rightValue) {
+ return {
+ ok: false,
+ error: new FilterError(
+ `Comparison type expects ${withIndefiniteArticle(operator.type)} but both fields are ${withIndefiniteArticle(
+ typeof condition.leftValue,
+ )}`,
+ getTypeDescription(strict),
+ ),
+ };
+ }
if (!leftValid) {
return {
ok: false,
error: new FilterError(
composeInvalidTypeMessage(operator.type, typeof condition.leftValue, leftValueString),
- invalidTypeDescription,
+ composeInvalidTypeDescription(operator.type, typeof condition.leftValue, 'first'),
),
};
}
@@ -111,7 +158,7 @@ function parseFilterConditionValues(
ok: false,
error: new FilterError(
composeInvalidTypeMessage(rightType, typeof condition.rightValue, rightValueString),
- invalidTypeDescription,
+ composeInvalidTypeDescription(rightType, typeof condition.rightValue, 'second'),
),
};
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f62ed3f36a..a59c4cf562 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -21,6 +21,9 @@ catalogs:
'@types/xml2js':
specifier: ^0.4.14
version: 0.4.14
+ axios:
+ specifier: 1.7.4
+ version: 1.7.4
basic-auth:
specifier: 2.0.1
version: 2.0.1
@@ -73,7 +76,6 @@ catalogs:
overrides:
'@types/node': ^18.16.16
- axios: 1.7.3
chokidar: 3.5.2
esbuild: ^0.20.2
formidable: 3.5.1
@@ -123,7 +125,7 @@ importers:
version: 6.0.2
jest:
specifier: ^29.6.2
- version: 29.6.2(@types/node@18.16.16)
+ version: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
jest-environment-jsdom:
specifier: ^29.6.2
version: 29.6.2
@@ -135,7 +137,7 @@ importers:
version: 29.6.2
jest-mock-extended:
specifier: ^3.0.4
- version: 3.0.4(jest@29.6.2(@types/node@18.16.16))(typescript@5.5.2)
+ version: 3.0.4(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(typescript@5.5.2)
nock:
specifier: ^13.3.2
version: 13.3.2
@@ -156,7 +158,7 @@ importers:
version: 7.0.0
ts-jest:
specifier: ^29.1.1
- version: 29.1.1(@babel/core@7.24.0)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.24.0))(jest@29.6.2(@types/node@18.16.16))(typescript@5.5.2)
+ version: 29.1.1(@babel/core@7.24.0)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.24.0))(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(typescript@5.5.2)
tsc-alias:
specifier: ^1.8.7
version: 1.8.7
@@ -194,8 +196,8 @@ importers:
specifier: 'catalog:'
version: 3.3.6
start-server-and-test:
- specifier: ^2.0.3
- version: 2.0.3
+ specifier: ^2.0.5
+ version: 2.0.5
devDependencies:
'@types/lodash':
specifier: 'catalog:'
@@ -207,6 +209,40 @@ importers:
specifier: workspace:*
version: link:../packages/workflow
+ packages/@n8n/benchmark:
+ dependencies:
+ '@oclif/core':
+ specifier: 4.0.7
+ version: 4.0.7
+ axios:
+ specifier: 'catalog:'
+ version: 1.7.4(debug@4.3.6)
+ convict:
+ specifier: 6.2.4
+ version: 6.2.4
+ dotenv:
+ specifier: 8.6.0
+ version: 8.6.0
+ zx:
+ specifier: ^8.1.4
+ version: 8.1.4
+ devDependencies:
+ '@types/convict':
+ specifier: ^6.1.1
+ version: 6.1.1
+ '@types/k6':
+ specifier: ^0.52.0
+ version: 0.52.0
+ '@types/node':
+ specifier: ^18.16.16
+ version: 18.16.16
+ tsc-alias:
+ specifier: ^1.8.7
+ version: 1.8.7
+ typescript:
+ specifier: ^5.5.2
+ version: 5.5.2
+
packages/@n8n/chat:
dependencies:
'@vueuse/core':
@@ -256,8 +292,8 @@ importers:
packages/@n8n/client-oauth2:
dependencies:
axios:
- specifier: 1.7.3
- version: 1.7.3(debug@3.2.7)
+ specifier: 'catalog:'
+ version: 1.7.4(debug@4.3.6)
packages/@n8n/codemirror-lang:
dependencies:
@@ -349,10 +385,10 @@ importers:
version: 0.0.10(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))
'@langchain/community':
specifier: 0.2.20
- version: 0.2.20(32xju6nqoe2wrsbntqq2x5vcke)
+ version: 0.2.20(a4iyb3banmlkrbqqp5ye37i4cm)
'@langchain/core':
specifier: 0.2.18
- version: 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ version: 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@langchain/google-genai':
specifier: 0.0.23
version: 0.0.23(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
@@ -370,25 +406,25 @@ importers:
version: 0.0.2(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))
'@langchain/openai':
specifier: 0.2.5
- version: 0.2.5(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))
+ version: 0.2.5(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))
'@langchain/pinecone':
specifier: 0.0.8
- version: 0.0.8(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ version: 0.0.8(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@langchain/qdrant':
specifier: ^0.0.5
- version: 0.0.5(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))(typescript@5.5.2)
+ version: 0.0.5(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))(typescript@5.5.2)
'@langchain/redis':
specifier: 0.0.5
- version: 0.0.5(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ version: 0.0.5(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@langchain/textsplitters':
specifier: 0.0.3
- version: 0.0.3(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ version: 0.0.3(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@mozilla/readability':
specifier: ^0.5.0
version: 0.5.0
'@n8n/typeorm':
specifier: 0.3.20-10
- version: 0.3.20-10(@sentry/node@7.87.0)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)
+ version: 0.3.20-10(@sentry/node@7.87.0)(ioredis@5.3.2)(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@18.16.16)(typescript@5.5.2))
'@n8n/vm2':
specifier: 3.9.25
version: 3.9.25
@@ -439,7 +475,7 @@ importers:
version: 2.1.0
langchain:
specifier: 0.2.11
- version: 0.2.11(6hdkxymucpmkiknmt5geracdu4)
+ version: 0.2.11(m7otbkpxyspoz5trt2pa3dcs6u)
lodash:
specifier: 'catalog:'
version: 4.17.21
@@ -520,7 +556,7 @@ importers:
version: 8.1.4(@types/react@18.0.27)(encoding@0.1.13)(prettier@3.2.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@storybook/addon-interactions':
specifier: ^8.1.4
- version: 8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
+ version: 8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
'@storybook/addon-links':
specifier: ^8.1.4
version: 8.1.4(react@18.2.0)
@@ -532,7 +568,7 @@ importers:
version: 8.1.4(@types/react@18.0.27)(encoding@0.1.13)(prettier@3.2.5)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@storybook/test':
specifier: ^8.1.4
- version: 8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
+ version: 8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
'@storybook/vue3':
specifier: ^8.1.4
version: 8.1.4(encoding@0.1.13)(prettier@3.2.5)(vue@3.4.21(typescript@5.5.2))
@@ -628,7 +664,7 @@ importers:
version: link:../@n8n/permissions
'@n8n/typeorm':
specifier: 0.3.20-10
- version: 0.3.20-10(@sentry/node@7.87.0)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)
+ version: 0.3.20-10(@sentry/node@7.87.0)(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@18.16.16)(typescript@5.5.2))
'@n8n_io/ai-assistant-sdk':
specifier: 1.9.4
version: 1.9.4
@@ -639,8 +675,8 @@ importers:
specifier: 4.0.7
version: 4.0.7
'@rudderstack/rudder-sdk-node':
- specifier: 2.0.7
- version: 2.0.7(tslib@2.6.2)
+ specifier: 2.0.9
+ version: 2.0.9(tslib@2.6.2)
'@sentry/integrations':
specifier: 7.87.0
version: 7.87.0
@@ -651,8 +687,8 @@ importers:
specifier: 1.11.0
version: 1.11.0
axios:
- specifier: 1.7.3
- version: 1.7.3(debug@3.2.7)
+ specifier: 'catalog:'
+ version: 1.7.4(debug@4.3.6)
bcryptjs:
specifier: 2.4.3
version: 2.4.3
@@ -872,6 +908,9 @@ importers:
xmllint-wasm:
specifier: 3.0.1
version: 3.0.1
+ xss:
+ specifier: ^1.0.14
+ version: 1.0.14
yamljs:
specifier: 0.3.0
version: 0.3.0
@@ -976,8 +1015,8 @@ importers:
specifier: 1.11.0
version: 1.11.0
axios:
- specifier: 1.7.3
- version: 1.7.3(debug@3.2.7)
+ specifier: 'catalog:'
+ version: 1.7.4(debug@4.3.6)
concat-stream:
specifier: 2.0.0
version: 2.0.0
@@ -1064,8 +1103,8 @@ importers:
specifier: ^3.0.3
version: 3.0.3(@fortawesome/fontawesome-svg-core@1.2.36)(vue@3.4.21(typescript@5.5.2))
element-plus:
- specifier: ^2.3.6
- version: 2.3.6(vue@3.4.21(typescript@5.5.2))
+ specifier: 2.4.3
+ version: 2.4.3(vue@3.4.21(typescript@5.5.2))
markdown-it:
specifier: ^13.0.2
version: 13.0.2
@@ -1102,7 +1141,7 @@ importers:
version: link:../@n8n/storybook
'@testing-library/jest-dom':
specifier: ^6.1.5
- version: 6.1.5(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1))
+ version: 6.1.5(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1))
'@testing-library/user-event':
specifier: ^14.5.1
version: 14.5.1(@testing-library/dom@9.3.4)
@@ -1141,7 +1180,7 @@ importers:
version: 1.64.1
tailwindcss:
specifier: ^3.4.3
- version: 3.4.3
+ version: 3.4.3(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
unplugin-icons:
specifier: ^0.19.0
version: 0.19.0(@vue/compiler-sfc@3.4.21)(vue-template-compiler@2.7.14)
@@ -1257,8 +1296,11 @@ importers:
specifier: ^10.11.0
version: 10.11.0(vue@3.4.21(typescript@5.5.2))
axios:
- specifier: 1.7.3
- version: 1.7.3(debug@3.2.7)
+ specifier: 'catalog:'
+ version: 1.7.4(debug@4.3.6)
+ bowser:
+ specifier: 2.11.0
+ version: 2.11.0
chart.js:
specifier: ^4.4.0
version: 4.4.0
@@ -1613,8 +1655,8 @@ importers:
specifier: 3.17.0
version: 3.17.0
snowflake-sdk:
- specifier: 1.9.2
- version: 1.9.2(asn1.js@5.4.1)(encoding@0.1.13)
+ specifier: 1.12.0
+ version: 1.12.0(asn1.js@5.4.1)(encoding@0.1.13)
ssh2-sftp-client:
specifier: 7.2.3
version: 7.2.3
@@ -1695,8 +1737,8 @@ importers:
specifier: ^1.9.4
version: 1.9.4
'@types/snowflake-sdk':
- specifier: ^1.6.20
- version: 1.6.20
+ specifier: ^1.6.24
+ version: 1.6.24
'@types/ssh2-sftp-client':
specifier: ^5.1.0
version: 5.3.2
@@ -1725,8 +1767,8 @@ importers:
specifier: 0.15.2
version: 0.15.2
axios:
- specifier: 1.7.3
- version: 1.7.3(debug@3.2.7)
+ specifier: 'catalog:'
+ version: 1.7.4(debug@4.3.6)
callsites:
specifier: 3.1.0
version: 3.1.0
@@ -1772,7 +1814,7 @@ importers:
devDependencies:
'@langchain/core':
specifier: ^0.2.18
- version: 0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
+ version: 0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
'@types/deep-equal':
specifier: ^1.0.1
version: 1.0.1
@@ -2016,6 +2058,11 @@ packages:
resolution: {integrity: sha512-Uvb2WJ+zdHdCOtsWVPI/M0BcfNrjOYsicDZWtaljucRJKLclY5gNWwD+RwIC+8b5TvfnVOlH+N5jhvpi5Impog==}
engines: {node: '>=14.0.0'}
+ '@aws-sdk/node-http-handler@3.374.0':
+ resolution: {integrity: sha512-v1Z6m0wwkf65/tKuhwrtPRqVoOtNkDTRn2MBMtxCwEw+8V8Q+YRFqVgGN+J1n53ktE0G5OYVBux/NHiAjJHReQ==}
+ engines: {node: '>=14.0.0'}
+ deprecated: This package has moved to @smithy/node-http-handler
+
'@aws-sdk/region-config-resolver@3.470.0':
resolution: {integrity: sha512-C1o1J06iIw8cyAAOvHqT4Bbqf+PgQ/RDlSyjt2gFfP2OovDpc2o2S90dE8f8iZdSGpg70N5MikT1DBhW9NbhtQ==}
engines: {node: '>=14.0.0'}
@@ -2115,9 +2162,10 @@ packages:
resolution: {integrity: sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ==}
engines: {node: '>=18.0.0'}
- '@azure/core-http@2.3.2':
- resolution: {integrity: sha512-Z4dfbglV9kNZO177CNx4bo5ekFuYwwsvjLiKdZI4r84bYGv3irrbQz7JC3/rUfFH2l4T/W6OFleJaa2X0IaQqw==}
+ '@azure/core-http@3.0.4':
+ resolution: {integrity: sha512-Fok9VVhMdxAFOtqiiAtg74fL0UJkt0z3D+ouUUxcRLzZNBioPRAMJFVxiWoJljYpXsRi4GDQHzQHDc9AiYaIUQ==}
engines: {node: '>=14.0.0'}
+ deprecated: deprecating as we migrated to core v2
'@azure/core-lro@2.4.0':
resolution: {integrity: sha512-F65+rYkll1dpw3RGm8/SSiSj+/QkMeYDanzS/QKlM1dmuneVyXbO46C88V1MRHluLGdMP6qfD3vDRYALn0z0tQ==}
@@ -2163,10 +2211,6 @@ packages:
resolution: {integrity: sha512-aK4s3Xxjrx3daZr3VylxejK3vG5ExXck5WOHDJ8in/k9AqlfIyFMMT1uG7u8mNjX+QRILTIn0/Xgschfh/dQ9g==}
engines: {node: '>=12.0.0'}
- '@azure/msal-browser@3.10.0':
- resolution: {integrity: sha512-mnmi8dCXVNZI+AGRq0jKQ3YiodlIC4W9npr6FCB9WN6NQT+6rq+cIlxgUb//BjLyzKsnYo+i4LROGeMyU+6v1A==}
- engines: {node: '>=0.8.0'}
-
'@azure/msal-browser@3.19.0':
resolution: {integrity: sha512-3unHlh3qWtXbqks/TLq3qGWzxfmwRfk9tXSGvVCcHHnCH5QKtcg/JiDIeP/1B2qFlqnSgtYY0JPLy9EIVoZ7Ag==}
engines: {node: '>=0.8.0'}
@@ -2175,21 +2219,13 @@ packages:
resolution: {integrity: sha512-b4M/tqRzJ4jGU91BiwCsLTqChveUEyFK3qY2wGfZ0zBswIBZjAxopx5CYt5wzZFKuN15HqRDYXQbztttuIC3nA==}
engines: {node: '>=0.8.0'}
- '@azure/msal-common@14.7.1':
- resolution: {integrity: sha512-v96btzjM7KrAu4NSEdOkhQSTGOuNUIIsUdB8wlyB9cdgl5KqEKnTonHUZ8+khvZ6Ap542FCErbnTyDWl8lZ2rA==}
- engines: {node: '>=0.8.0'}
-
'@azure/msal-node@2.11.0':
resolution: {integrity: sha512-yNRCp4Do4CGSBe1WXq4DWhfa/vYZCUgGrweYLC5my/6eDnYMt0fYGPHuTMw0iRslQGXF3CecGAxXp7ab57V4zg==}
engines: {node: '>=16'}
- '@azure/msal-node@2.6.4':
- resolution: {integrity: sha512-nNvEPx009/80UATCToF+29NZYocn01uKrB91xtFr7bSqkqO1PuQGXRyYwryWRztUrYZ1YsSbw9A+LmwOhpVvcg==}
- engines: {node: '>=16'}
-
- '@azure/storage-blob@12.11.0':
- resolution: {integrity: sha512-na+FisoARuaOWaHWpmdtk3FeuTWf2VWamdJ9/TJJzj5ZdXPLC3juoDgFs6XVuJIoK30yuBpyFBEDXVRK4pB7Tg==}
- engines: {node: '>=12.0.0'}
+ '@azure/storage-blob@12.18.0':
+ resolution: {integrity: sha512-BzBZJobMoDyjJsPRMLNHvqHycTGrT8R/dtcTx9qUFcqwSRfGVK9A/cZ7Nx38UQydT9usZGbaDCN75QRNjezSAA==}
+ engines: {node: '>=14.0.0'}
'@babel/code-frame@7.22.5':
resolution: {integrity: sha512-Xmwn266vad+6DAqEB2A6V/CcZVp62BbwVmcOJc2RPuwih1kw02TjQvWVWlcKGbBPd+8/0V5DEkOcizRGYsspYQ==}
@@ -2399,10 +2435,6 @@ packages:
resolution: {integrity: sha512-CvLSkwXGWnYlF9+J3iZUvwgAxKiYzK3BWuo+mLzD/MDGOZDj7Gq8+hqaOkMxmJwmlv0iu86uH5fdADd9Hxkymw==}
engines: {node: '>=6.9.0'}
- '@babel/helper-string-parser@7.23.4':
- resolution: {integrity: sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==}
- engines: {node: '>=6.9.0'}
-
'@babel/helper-string-parser@7.24.6':
resolution: {integrity: sha512-WdJjwMEkmBicq5T9fm/cHND3+UlFa2Yj8ALLgmoSQAJZysYbBjw+azChSGPN4DSPLXOcooGRvDwZWMcF/mLO2Q==}
engines: {node: '>=6.9.0'}
@@ -3008,10 +3040,6 @@ packages:
resolution: {integrity: sha512-OsNjaJwT9Zn8ozxcfoBc+RaHdj3gFmCmYoQLUII1o6ZrUwku0BMg80FoOTPx+Gi6XhcQxAYE4xyjPTo4SxEQqw==}
engines: {node: '>=6.9.0'}
- '@babel/types@7.23.6':
- resolution: {integrity: sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==}
- engines: {node: '>=6.9.0'}
-
'@babel/types@7.24.0':
resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==}
engines: {node: '>=6.9.0'}
@@ -3079,6 +3107,10 @@ packages:
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'}
+
'@ctrl/tinycolor@3.6.0':
resolution: {integrity: sha512-/Z3l6pXthq0JvMYdUFyX9j0MaCltlIn6mfh9jLyQwg5aPKxkyNa0PTHtU1AlFXLNk55ZuAeJRcpvq+tmLfKmaQ==}
engines: {node: '>=10'}
@@ -3105,8 +3137,8 @@ packages:
resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==}
engines: {node: '>=10.0.0'}
- '@element-plus/icons-vue@2.1.0':
- resolution: {integrity: sha512-PSBn3elNoanENc1vnCfh+3WA9fimRC7n+fWkf3rE5jvv+aBohNHABC/KAR5KWPecxWxDTVT1ERpRbOMRcOV/vA==}
+ '@element-plus/icons-vue@2.3.1':
+ resolution: {integrity: sha512-XxVUZv48RZAd87ucGS48jPf6pKu0yV5UCg9f4FFwtrYxXOwWuVJo6wOvSLKEoMQKjv8GsX/mhP6UsC1lRwbUWg==}
peerDependencies:
vue: ^3.2.0
@@ -3354,17 +3386,17 @@ packages:
resolution: {integrity: sha512-M3ihN10el2mfoDWdnpzWNv8vcoqKFNmDaY7IviujAv5c+/p8kSwvjk2haTcOQ8lQOiihAWX3I7YtP1K4UaGnyA==}
engines: {node: '>=14.0.0'}
- '@google-cloud/paginator@3.0.7':
- resolution: {integrity: sha512-jJNutk0arIQhmpUUQJPJErsojqo834KcyB6X7a1mxuic8i1tKXxde8E69IZxNZawRIlZdIK2QY4WALvlK5MzYQ==}
- engines: {node: '>=10'}
+ '@google-cloud/paginator@5.0.2':
+ resolution: {integrity: sha512-DJS3s0OVH4zFDB1PzjxAsHqJT6sKVbRwwML0ZBP9PbU7Yebtu/7SWMRzvO2J3nUi9pRNITCfu4LJeooM2w4pjg==}
+ engines: {node: '>=14.0.0'}
- '@google-cloud/projectify@3.0.0':
- resolution: {integrity: sha512-HRkZsNmjScY6Li8/kb70wjGlDDyLkVk3KvoEo9uIoxSjYLJasGiCch9+PqRVDOCGUFvEIqyogl+BeqILL4OJHA==}
- engines: {node: '>=12.0.0'}
+ '@google-cloud/projectify@4.0.0':
+ resolution: {integrity: sha512-MmaX6HeSvyPbWGwFq7mXdo0uQZLGBYCwziiLIGq5JVX+/bdI3SAq6bP98trV5eTWfLuvsMcIC1YJOF2vfteLFA==}
+ engines: {node: '>=14.0.0'}
- '@google-cloud/promisify@3.0.1':
- resolution: {integrity: sha512-z1CjRjtQyBOYL+5Qr9DdYIfrdLBe746jRTYfaYU6MeXkqp7UfYs/jX16lFFVzZ7PGEJvqZNqYUEtb1mvDww4pA==}
- engines: {node: '>=12'}
+ '@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==}
@@ -3374,9 +3406,9 @@ packages:
resolution: {integrity: sha512-0daW/OXQEVc6VQKPyJTQNyD+563I/TYQ7GCQJx4dq3lB666R9FUPvqHx9b/o/qQtZ5pfuoCbGZl3krpxgTSW8Q==}
engines: {node: '>=14.0.0'}
- '@google-cloud/storage@6.11.0':
- resolution: {integrity: sha512-p5VX5K2zLTrMXlKdS1CiQNkKpygyn7CBFm5ZvfhVj6+7QUsjWvYx9YDMkYXdarZ6JDt4cxiu451y9QUIH82ZTw==}
- engines: {node: '>=12'}
+ '@google-cloud/storage@7.12.1':
+ resolution: {integrity: sha512-Z3ZzOnF3YKLuvpkvF+TjQ6lztxcAyTILp+FjKonmVpEwPa9vFvxpZjubLR4sB6bf19i/8HL2AXRjA0YFgHFRmQ==}
+ engines: {node: '>=14'}
'@google/generative-ai@0.11.4':
resolution: {integrity: sha512-hlw+E9Prv9aUIQISRnLSXi4rukFqKe5WhxPvzBccTvIvXjw2BHMFOJWSC/Gq7WE0W+L/qRHGmYxopmx9qjrB9w==}
@@ -3549,10 +3581,6 @@ packages:
resolution: {integrity: sha512-tPKQNMPuXgvdOn2/Lg9HNfUvjYVGolt04Hp03f5hAk878uwOLikN+JzeLY0HcVgKgFl9Hs3EIqpu3WX27XNhnw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- '@jridgewell/gen-mapping@0.3.2':
- resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==}
- engines: {node: '>=6.0.0'}
-
'@jridgewell/gen-mapping@0.3.5':
resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==}
engines: {node: '>=6.0.0'}
@@ -3561,10 +3589,6 @@ packages:
resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==}
engines: {node: '>=6.0.0'}
- '@jridgewell/set-array@1.1.2':
- resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
- engines: {node: '>=6.0.0'}
-
'@jridgewell/set-array@1.2.1':
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
engines: {node: '>=6.0.0'}
@@ -3578,6 +3602,9 @@ packages:
'@jridgewell/trace-mapping@0.3.25':
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
+ '@jridgewell/trace-mapping@0.3.9':
+ resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==}
+
'@js-joda/core@5.6.1':
resolution: {integrity: sha512-Xla/d7ZMMR6+zRd6lTio0wRZECfcfFJP7GGe9A9L4tDOlD5CX4YcZ4YZle9w58bBYzssojVapI84RraKWDQZRg==}
@@ -4647,8 +4674,8 @@ packages:
cpu: [x64]
os: [win32]
- '@rudderstack/rudder-sdk-node@2.0.7':
- resolution: {integrity: sha512-V8SWlryHDHSleM51udW3DbmCyADa7Naa9OTtG/YjgTStxFsyLnGRYd9Mr616qR94Gi1h/zYhE/tvWio+0fiSzA==}
+ '@rudderstack/rudder-sdk-node@2.0.9':
+ resolution: {integrity: sha512-Icm7a2x+CrVM9cHsXDRaFqGyvlaRDdALsrhzLHyRE+gIXubzJT730+fHS8KNdv9/r4Et/Cy1epjbkT3Qagd1VQ==}
engines: {node: '>=12'}
peerDependencies:
tslib: ^2.6.2
@@ -4760,6 +4787,10 @@ packages:
'@sinonjs/fake-timers@11.2.2':
resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==}
+ '@smithy/abort-controller@1.1.0':
+ resolution: {integrity: sha512-5imgGUlZL4dW4YWdMYAKLmal9ny/tlenM81QZY7xYyb76z9Z/QOg7oM5Ak9HQl8QfFTlGVWwcMXl+54jroRgEQ==}
+ engines: {node: '>=14.0.0'}
+
'@smithy/abort-controller@2.2.0':
resolution: {integrity: sha512-wRlta7GuLWpTqtFfGo+nZyOO1vEvewdNR1R4rTxpC8XU6vG/NDyrFBhwLZsqg1NUoR1noVaXJPC/7ZK47QCySw==}
engines: {node: '>=14.0.0'}
@@ -4849,6 +4880,10 @@ packages:
resolution: {integrity: sha512-0elK5/03a1JPWMDPaS726Iw6LpQg80gFut1tNpPfxFuChEEklo2yL823V94SpTZTxmKlXFtFgsP55uh3dErnIg==}
engines: {node: '>=14.0.0'}
+ '@smithy/node-http-handler@1.1.0':
+ resolution: {integrity: sha512-d3kRriEgaIiGXLziAM8bjnaLn1fthCJeTLZIwEIpzQqe6yPX0a+yQoLCTyjb2fvdLwkMoG4p7THIIB5cj5lkbg==}
+ engines: {node: '>=14.0.0'}
+
'@smithy/node-http-handler@2.5.0':
resolution: {integrity: sha512-mVGyPBzkkGQsPoxQUbxlEfRjrj6FPyA3u3u2VXGr9hT8wilsoQdZdvKpMBFMB8Crfhv5dNkKHIW0Yyuc7eABqA==}
engines: {node: '>=14.0.0'}
@@ -4857,10 +4892,18 @@ packages:
resolution: {integrity: sha512-+xiil2lFhtTRzXkx8F053AV46QnIw6e7MV8od5Mi68E1ICOjCeCHw2XfLnDEUHnT9WGUIkwcqavXjfwuJbGlpg==}
engines: {node: '>=14.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/querystring-builder@1.1.0':
+ resolution: {integrity: sha512-gDEi4LxIGLbdfjrjiY45QNbuDmpkwh9DX4xzrR2AzjjXpxwGyfSpbJaYhXARw9p17VH0h9UewnNQXNwaQyYMDA==}
+ engines: {node: '>=14.0.0'}
+
'@smithy/querystring-builder@2.2.0':
resolution: {integrity: sha512-L1kSeviUWL+emq3CUVSgdogoM/D9QMFaqxL/dd0X7PCNWmPXqt+ExtrBjqT0V7HLN03Vs9SuiLrG3zy3JGnE5A==}
engines: {node: '>=14.0.0'}
@@ -4885,6 +4928,10 @@ packages:
resolution: {integrity: sha512-jrbSQrYCho0yDaaf92qWgd+7nAeap5LtHTI51KXqmpIFCceKU3K9+vIVTUH72bOJngBMqa4kyu1VJhRcSrk/CQ==}
engines: {node: '>=14.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'}
@@ -4939,6 +4986,10 @@ packages:
resolution: {integrity: sha512-17faEXbYWIRst1aU9SvPZyMdWmqIrduZjVOqCPMIsWFNxs5yQQgFrJL6b2SdiCzyW9mJoDjFtgi53xx7EH+BXA==}
engines: {node: '>=14.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'}
@@ -5259,6 +5310,18 @@ packages:
resolution: {integrity: sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==}
engines: {node: '>= 10'}
+ '@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==}
+
'@types/amqplib@0.10.1':
resolution: {integrity: sha512-j6ANKT79ncUDnAs/+9r9eDujxbeJoTjoVu33gHHcaPfmLQaMhvfbH2GqSe8KUM444epAp1Vl3peVOQfZk3UIqA==}
@@ -5376,6 +5439,9 @@ packages:
'@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==}
@@ -5433,12 +5499,18 @@ packages:
'@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.6':
resolution: {integrity: sha512-/5hndP5dCjloafCXns6SZyESp3Ldq7YjH3zwzwczYnjxIT0Fqzk5ROSYVGfFyczIue7IUEj8hkvLbPoLQ18vQw==}
+ '@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==}
@@ -5592,8 +5664,8 @@ packages:
'@types/sizzle@2.3.3':
resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==}
- '@types/snowflake-sdk@1.6.20':
- resolution: {integrity: sha512-Dr7oIXrWthlk9wVWpZgpm49BT8cFFXz43u7SkJKyiZK3WHiHQo4b+m2/p3WIpkYzZCcOZZ/t1B09XMd7+u1Wjw==}
+ '@types/snowflake-sdk@1.6.24':
+ resolution: {integrity: sha512-CgRp971LQJr970YSySCeIoNfX/29s9ZUnwhVjl8uL62kC7UoTNdNRwwyGCQ7Ca/fECRu8nK47pZpw8xmVWDn9Q==}
'@types/ssh2-sftp-client@5.3.2':
resolution: {integrity: sha512-s5R3hsnI3/7Ar57LG++gm2kxgONHtOZY2A3AgGzEwiJlHR8j7MRPDw1n/hG6oMnOUJ4zuoLNtDXgDfmmxV4lDA==}
@@ -6145,6 +6217,9 @@ packages:
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==}
@@ -6313,8 +6388,8 @@ packages:
axios-retry@3.7.0:
resolution: {integrity: sha512-ZTnCkJbRtfScvwiRnoVskFAfvU0UG3xNcsjwTR0mawSbIJoothxn67gKsMaNAFHRXJ1RmuLhmZBzvyXi3+9WyQ==}
- axios@1.7.3:
- resolution: {integrity: sha512-Ar7ND9pU99eJ9GpoGQKhKf58GpUOgnzuaB7ueNQ5BMi0p+LZ5oaEnfF999fAArcTIBwXTCHAmGcHOZJaWPq9Nw==}
+ axios@1.7.4:
+ resolution: {integrity: sha512-DukmaFRnY6AzAALSH4J2M3k6PkaC+MfaAGdEERRWcC9q3/TWQwLpHR8ZRLKTdQ3aBDL64EdluRDjJqKw+BPZEw==}
babel-core@7.0.0-bridge.0:
resolution: {integrity: sha512-poPX9mZH/5CSanm50Q+1toVci6pv5KSRv/5TWCwtzQS5XEwn40BcCrgIeMFWP9CKKIniKXNxoIOnOq4VVlGXhg==}
@@ -6709,10 +6784,6 @@ packages:
resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==}
engines: {node: '>=8'}
- cli-spinners@2.9.0:
- resolution: {integrity: sha512-4/aL9X3Wh0yiMQlE+eeRhWP6vclO3QRtw1JHKIT0FFUs5FjpFmESqtMvYZ0+lbzBw900b95mS0hohy+qn2VK/g==}
- engines: {node: '>=6'}
-
cli-spinners@2.9.2:
resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==}
engines: {node: '>=6'}
@@ -6952,6 +7023,9 @@ packages:
resolution: {integrity: sha512-9IkYqtX3YHPCzoVg1Py+o9057a3i0fp7S530UWokCSaFVTc7CwXPRiOjRjBQQ18ZCNafx78YfnG+HALxtVmOGA==}
engines: {node: '>=10.0.0'}
+ 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==}
@@ -7137,9 +7211,6 @@ packages:
dayjs@1.11.10:
resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
- dayjs@1.11.6:
- resolution: {integrity: sha512-zZbY5giJAinCG+7AGaw0wIhNZ6J8AhWuSXKvuc1KAyMiRsvGQWqh4L+MomvhdAYjN+lqvVCMq1I41e3YHvXkyQ==}
-
de-indent@1.0.2:
resolution: {integrity: sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==}
@@ -7324,6 +7395,10 @@ packages:
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'}
@@ -7424,6 +7499,9 @@ packages:
duplexify@4.1.2:
resolution: {integrity: sha512-fz3OjcNCHmRP12MJoZMPglx8m4rrFP8rovnk4vT8Fs+aonZoCwGg10dSsQsfP/E62eZcPTMSMP6686fu9Qlqtw==}
+ duplexify@4.1.3:
+ resolution: {integrity: sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==}
+
eastasianwidth@0.2.0:
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
@@ -7449,8 +7527,8 @@ packages:
electron-to-chromium@1.4.703:
resolution: {integrity: sha512-094ZZC4nHXPKl/OwPinSMtLN9+hoFkdfQGKnvXbY+3WEAYtVDpz9UhJIViiY6Zb8agvqxiaJzNG9M+pRZWvSZw==}
- element-plus@2.3.6:
- resolution: {integrity: sha512-GLz0pXUYI2zRfIgyI6W7SWmHk6dSEikP9yR++hsQUyy63+WjutoiGpA3SZD4cGPSXUzRFeKfVr8CnYhK5LqXZw==}
+ element-plus@2.4.3:
+ resolution: {integrity: sha512-b3q26j+lM4SBqiyzw8HybybGnP2pk4MWgrnzzzYW5qKQUgV6EG1Zg7nMCfgCVccI8tNvZoTiUHb2mFaiB9qT8w==}
peerDependencies:
vue: ^3.2.0
@@ -7493,9 +7571,6 @@ packages:
resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
engines: {node: '>=8.6'}
- ent@2.2.0:
- resolution: {integrity: sha512-GHrMyVZQWvTIdDtpiEXdHZnFQKzeO09apj8Cbl4pKWy4i0Oprcq17usfDt5aO63swf0JOeMWjWQE/LzgSRuWpA==}
-
entities@2.2.0:
resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==}
@@ -7948,14 +8023,14 @@ packages:
resolution: {integrity: sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==}
hasBin: true
- fast-xml-parser@4.2.7:
- resolution: {integrity: sha512-J8r6BriSLO1uj2miOk1NW0YVm8AGOOu3Si2HQp/cSmo6EA4m3fcwu2WKjJ4RK9wMLBtg69y1kS8baDiQBR41Ig==}
- hasBin: true
-
fast-xml-parser@4.3.5:
resolution: {integrity: sha512-sWvP1Pl8H03B8oFJpFR3HE31HUfwtX7Rlf9BNsvdpujD4n7WMhfmu8h9wOV2u+c1k0ZilTADhPqypzx2J690ZQ==}
hasBin: true
+ fast-xml-parser@4.4.1:
+ resolution: {integrity: sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==}
+ hasBin: true
+
fastest-levenshtein@1.0.16:
resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==}
engines: {node: '>= 4.9.1'}
@@ -8506,6 +8581,9 @@ packages:
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==}
@@ -9370,7 +9448,7 @@ packages:
'@xata.io/client': ^0.28.0
apify-client: ^2.7.1
assemblyai: ^4.6.0
- axios: 1.7.3
+ axios: '*'
cheerio: ^1.0.0-rc.12
chromadb: '*'
convex: ^1.3.1
@@ -9608,10 +9686,6 @@ packages:
resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==}
engines: {node: '>=10'}
- lilconfig@3.0.0:
- resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==}
- engines: {node: '>=14'}
-
lilconfig@3.1.2:
resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==}
engines: {node: '>=14'}
@@ -9984,10 +10058,6 @@ packages:
resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
engines: {node: '>=16 || 14 >=14.17'}
- minimatch@9.0.4:
- resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==}
- engines: {node: '>=16 || 14 >=14.17'}
-
minimatch@9.0.5:
resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==}
engines: {node: '>=16 || 14 >=14.17'}
@@ -10985,10 +11055,6 @@ packages:
resolution: {integrity: sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw==}
engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
- pretty-format@29.6.2:
- resolution: {integrity: sha512-1q0oC8eRveTg5nnBEWMXAU2qpv65Gnuf2eCQzSjxpWFkPaPARwqZZDGuNE0zPAZfTCHzIk3A8dIjwlQKKLphyg==}
- 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}
@@ -11470,10 +11536,6 @@ packages:
resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==}
engines: {node: '>=8'}
- retry-request@5.0.2:
- resolution: {integrity: sha512-wfI3pk7EE80lCIXprqh7ym48IHYdwmAAzESdbU8Q9l7pnRCk9LEhpbOTNKjz6FARLm/Bl5m+4F0ABxOkYUujSQ==}
- engines: {node: '>=12'}
-
retry-request@7.0.2:
resolution: {integrity: sha512-dUOvLMJ0/JJYEn8NrpOaGNE7X3vpI5XlZS/u0ANjqtcZVKnIxP7IgCFwrKTxENw29emmwug53awKtaMm4i9g5w==}
engines: {node: '>=14'}
@@ -11777,8 +11839,8 @@ packages:
snake-case@3.0.4:
resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==}
- snowflake-sdk@1.9.2:
- resolution: {integrity: sha512-pPTE8V6RHw78KBAn56rGVri3LRciuJDz/oDUmkJej3fUnOHP28YBLl3kjiW0J5bbPzDPHhSAkeeCsjrbGyAB/w==}
+ snowflake-sdk@1.12.0:
+ resolution: {integrity: sha512-ZUFYR327vh+Tgo4s/1NhZTjg24g6t7rA3VTgP13sy9WBxdgPVuKN2G4rgeoml8vYKfARPCYmQBr6ysVF/y7EKw==}
peerDependencies:
asn1.js: ^5.4.1
@@ -11890,8 +11952,8 @@ packages:
standard-as-callback@2.1.0:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
- start-server-and-test@2.0.3:
- resolution: {integrity: sha512-QsVObjfjFZKJE6CS6bSKNwWZCKBG6975/jKRPPGFfFh+yOQglSeGXiNWjzgQNXdphcBI9nXbyso9tPfX4YAUhg==}
+ start-server-and-test@2.0.5:
+ resolution: {integrity: sha512-2CV4pz69NJVJKQmJeSr+O+SPtOreu0yxvhPmSXclzmAKkPREuMabyMh+Txpzemjx0RDzXOcG2XkhiUuxjztSQw==}
engines: {node: '>=16'}
hasBin: true
@@ -11935,6 +11997,9 @@ packages:
stream-shift@1.0.1:
resolution: {integrity: sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==}
+ stream-shift@1.0.3:
+ resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==}
+
streamsearch@1.1.0:
resolution: {integrity: sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==}
engines: {node: '>=10.0.0'}
@@ -12139,10 +12204,6 @@ packages:
resolution: {integrity: sha512-NmedZS0NJiTv3CoYnf1FtjxIDUgVYzEmavrc8q2WHRb+lP4deI9BpQfmNnBZZaWusDbP5FVFZCcvzb3xOlNVlQ==}
engines: {node: '>=16'}
- teeny-request@8.0.3:
- resolution: {integrity: sha512-jJZpA5He2y52yUhA7pyAGZlgQpcB+xLjcN0eUFxr9c8hP/H7uOXbBNVo/O0C/xVfJLJs680jvkFgVJEEvk9+ww==}
- engines: {node: '>=12'}
-
teeny-request@9.0.0:
resolution: {integrity: sha512-resvxdc6Mgb7YEThw6G6bExlXKkv6+YbuzGg9xuXxSgxJF7Ozs+o8Y9+2R3sArdWdW8nOokoQb1yrpFB0pQK2g==}
engines: {node: '>=14'}
@@ -12261,6 +12322,9 @@ packages:
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==}
@@ -12356,6 +12420,20 @@ packages:
ts-map@1.0.3:
resolution: {integrity: sha512-vDWbsl26LIcPGmDpoVzjEP6+hvHZkBkLW7JpvwbCv/5IYPJlsbzCVXY3wsCeAxAUeTclNOUZxnLdGh3VBD/J6w==}
+ 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': ^18.16.16
+ typescript: ^5.5.2
+ peerDependenciesMeta:
+ '@swc/core':
+ optional: true
+ '@swc/wasm':
+ optional: true
+
ts-toolbelt@9.6.0:
resolution: {integrity: sha512-nsZd8ZeNUzukXPlJmTBwUAuABDe/9qtVDelJeT/qW0ow3ZS3BsQJtNkan1802aM9Uf68/Y8ljw86Hu0h5IUW3w==}
@@ -12756,6 +12834,9 @@ packages:
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'}
@@ -12895,17 +12976,6 @@ packages:
'@vue/composition-api':
optional: true
- vue-demi@0.14.6:
- resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
- 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-demi@0.14.8:
resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==}
engines: {node: '>=12'}
@@ -13278,6 +13348,10 @@ packages:
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'}
@@ -13306,6 +13380,11 @@ packages:
zod@3.23.8:
resolution: {integrity: sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==}
+ zx@8.1.4:
+ resolution: {integrity: sha512-QFDYYpnzdpRiJ3dL2102Cw26FpXpWshW4QLTGxiYfIcwdAqg084jRCkK/kuP/NOSkxOjydRwNFG81qzA5r1a6w==}
+ engines: {node: '>= 12.17.0'}
+ hasBin: true
+
snapshots:
'@aashutoshrathi/word-wrap@1.2.6': {}
@@ -13313,7 +13392,7 @@ snapshots:
'@acuminous/bitsyntax@0.1.2':
dependencies:
buffer-more-ints: 1.0.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
safe-buffer: 5.1.2
transitivePeerDependencies:
- supports-color
@@ -14039,6 +14118,11 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.6.2
+ '@aws-sdk/node-http-handler@3.374.0':
+ dependencies:
+ '@smithy/node-http-handler': 1.1.0
+ tslib: 2.6.2
+
'@aws-sdk/region-config-resolver@3.470.0':
dependencies:
'@smithy/node-config-provider': 2.3.0
@@ -14229,7 +14313,7 @@ snapshots:
transitivePeerDependencies:
- supports-color
- '@azure/core-http@2.3.2(encoding@0.1.13)':
+ '@azure/core-http@3.0.4(encoding@0.1.13)':
dependencies:
'@azure/abort-controller': 1.1.0
'@azure/core-auth': 1.6.0
@@ -14241,7 +14325,6 @@ snapshots:
form-data: 4.0.0
node-fetch: 2.7.0(encoding@0.1.13)
process: 0.11.10
- tough-cookie: 4.1.3
tslib: 2.6.2
tunnel: 0.0.6
uuid: 8.3.2
@@ -14297,8 +14380,8 @@ snapshots:
'@azure/core-tracing': 1.0.1
'@azure/core-util': 1.7.0
'@azure/logger': 1.0.3
- '@azure/msal-browser': 3.10.0
- '@azure/msal-node': 2.6.4
+ '@azure/msal-browser': 3.19.0
+ '@azure/msal-node': 2.11.0
events: 3.3.0
jws: 4.0.0
open: 8.4.0
@@ -14362,34 +14445,22 @@ snapshots:
dependencies:
tslib: 2.6.2
- '@azure/msal-browser@3.10.0':
- dependencies:
- '@azure/msal-common': 14.7.1
-
'@azure/msal-browser@3.19.0':
dependencies:
'@azure/msal-common': 14.13.0
'@azure/msal-common@14.13.0': {}
- '@azure/msal-common@14.7.1': {}
-
'@azure/msal-node@2.11.0':
dependencies:
'@azure/msal-common': 14.13.0
jsonwebtoken: 9.0.2
uuid: 8.3.2
- '@azure/msal-node@2.6.4':
- dependencies:
- '@azure/msal-common': 14.7.1
- jsonwebtoken: 9.0.2
- uuid: 8.3.2
-
- '@azure/storage-blob@12.11.0(encoding@0.1.13)':
+ '@azure/storage-blob@12.18.0(encoding@0.1.13)':
dependencies:
'@azure/abort-controller': 1.1.0
- '@azure/core-http': 2.3.2(encoding@0.1.13)
+ '@azure/core-http': 3.0.4(encoding@0.1.13)
'@azure/core-lro': 2.4.0
'@azure/core-paging': 1.3.0
'@azure/core-tracing': 1.0.0-preview.13
@@ -14430,7 +14501,7 @@ snapshots:
'@babel/traverse': 7.24.0
'@babel/types': 7.24.6
convert-source-map: 2.0.0
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 7.6.0
@@ -14450,7 +14521,7 @@ snapshots:
'@babel/traverse': 7.24.6
'@babel/types': 7.24.6
convert-source-map: 2.0.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
gensync: 1.0.0-beta.2
json5: 2.2.3
semver: 7.6.0
@@ -14551,7 +14622,7 @@ snapshots:
'@babel/core': 7.24.6
'@babel/helper-compilation-targets': 7.24.6
'@babel/helper-plugin-utils': 7.24.6
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
@@ -14562,7 +14633,7 @@ snapshots:
'@babel/core': 7.24.6
'@babel/helper-compilation-targets': 7.24.6
'@babel/helper-plugin-utils': 7.24.6
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
lodash.debounce: 4.0.8
resolve: 1.22.8
transitivePeerDependencies:
@@ -14692,8 +14763,6 @@ snapshots:
dependencies:
'@babel/types': 7.24.6
- '@babel/helper-string-parser@7.23.4': {}
-
'@babel/helper-string-parser@7.24.6': {}
'@babel/helper-validator-identifier@7.22.20': {}
@@ -14731,7 +14800,7 @@ snapshots:
'@babel/highlight@7.23.4':
dependencies:
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-validator-identifier': 7.24.6
chalk: 2.4.2
js-tokens: 4.0.0
@@ -14744,7 +14813,7 @@ snapshots:
'@babel/parser@7.24.0':
dependencies:
- '@babel/types': 7.23.6
+ '@babel/types': 7.24.6
'@babel/parser@7.24.6':
dependencies:
@@ -15446,7 +15515,7 @@ snapshots:
'@babel/helper-split-export-declaration': 7.22.6
'@babel/parser': 7.24.6
'@babel/types': 7.24.6
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
@@ -15461,21 +15530,15 @@ snapshots:
'@babel/helper-split-export-declaration': 7.24.6
'@babel/parser': 7.24.6
'@babel/types': 7.24.6
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
globals: 11.12.0
transitivePeerDependencies:
- supports-color
- '@babel/types@7.23.6':
- dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
- to-fast-properties: 2.0.0
-
'@babel/types@7.24.0':
dependencies:
- '@babel/helper-string-parser': 7.23.4
- '@babel/helper-validator-identifier': 7.22.20
+ '@babel/helper-string-parser': 7.24.6
+ '@babel/helper-validator-identifier': 7.24.6
to-fast-properties: 2.0.0
'@babel/types@7.24.6':
@@ -15598,6 +15661,11 @@ snapshots:
'@common.js/is-network-error@1.0.1': {}
+ '@cspotcode/source-map-support@0.8.1':
+ dependencies:
+ '@jridgewell/trace-mapping': 0.3.9
+ optional: true
+
'@ctrl/tinycolor@3.6.0': {}
'@curlconverter/yargs-parser@0.0.1': {}
@@ -15648,7 +15716,7 @@ snapshots:
'@discoveryjs/json-ext@0.5.7': {}
- '@element-plus/icons-vue@2.1.0(vue@3.4.21(typescript@5.5.2))':
+ '@element-plus/icons-vue@2.3.1(vue@3.4.21(typescript@5.5.2))':
dependencies:
vue: 3.4.21(typescript@5.5.2)
@@ -15743,7 +15811,7 @@ snapshots:
'@eslint/eslintrc@2.1.4':
dependencies:
ajv: 6.12.6
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
espree: 9.6.1
globals: 13.20.0
ignore: 5.2.4
@@ -15808,8 +15876,8 @@ snapshots:
url-join: 4.0.1
zod: 3.23.8
optionalDependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- langchain: 0.2.11(6hdkxymucpmkiknmt5geracdu4)
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ langchain: 0.2.11(m7otbkpxyspoz5trt2pa3dcs6u)
transitivePeerDependencies:
- encoding
@@ -15826,14 +15894,14 @@ snapshots:
- encoding
- supports-color
- '@google-cloud/paginator@3.0.7':
+ '@google-cloud/paginator@5.0.2':
dependencies:
arrify: 2.0.1
extend: 3.0.2
- '@google-cloud/projectify@3.0.0': {}
+ '@google-cloud/projectify@4.0.0': {}
- '@google-cloud/promisify@3.0.1': {}
+ '@google-cloud/promisify@4.0.0': {}
'@google-cloud/resource-manager@5.3.0(encoding@0.1.13)':
dependencies:
@@ -15849,24 +15917,22 @@ snapshots:
- encoding
- supports-color
- '@google-cloud/storage@6.11.0(encoding@0.1.13)':
+ '@google-cloud/storage@7.12.1(encoding@0.1.13)':
dependencies:
- '@google-cloud/paginator': 3.0.7
- '@google-cloud/projectify': 3.0.0
- '@google-cloud/promisify': 3.0.1
+ '@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
- compressible: 2.0.18
- duplexify: 4.1.2
- ent: 2.2.0
- extend: 3.0.2
- gaxios: 5.1.0(encoding@0.1.13)
- google-auth-library: 8.9.0(encoding@0.1.13)
+ 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
- mime-types: 2.1.35
p-limit: 3.1.0
- retry-request: 5.0.2
- teeny-request: 8.0.3(encoding@0.1.13)
+ retry-request: 7.0.2(encoding@0.1.13)
+ teeny-request: 9.0.0(encoding@0.1.13)
uuid: 8.3.2
transitivePeerDependencies:
- encoding
@@ -15903,7 +15969,7 @@ snapshots:
'@humanwhocodes/config-array@0.11.14':
dependencies:
'@humanwhocodes/object-schema': 2.0.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
minimatch: 3.1.2
transitivePeerDependencies:
- supports-color
@@ -15933,7 +15999,7 @@ snapshots:
'@antfu/install-pkg': 0.1.1
'@antfu/utils': 0.7.10
'@iconify/types': 2.0.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
kolorist: 1.8.0
local-pkg: 0.5.0
mlly: 1.7.1
@@ -15995,7 +16061,7 @@ snapshots:
jest-util: 29.6.2
slash: 3.0.0
- '@jest/core@29.6.2':
+ '@jest/core@29.6.2(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))':
dependencies:
'@jest/console': 29.6.2
'@jest/reporters': 29.6.2
@@ -16009,7 +16075,7 @@ snapshots:
exit: 0.1.2
graceful-fs: 4.2.11
jest-changed-files: 29.5.0
- jest-config: 29.6.2(@types/node@18.16.16)
+ jest-config: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
jest-haste-map: 29.6.2
jest-message-util: 29.6.2
jest-regex-util: 29.4.3
@@ -16022,7 +16088,7 @@ snapshots:
jest-validate: 29.6.2
jest-watcher: 29.6.2
micromatch: 4.0.5
- pretty-format: 29.6.2
+ pretty-format: 29.7.0
slash: 3.0.0
strip-ansi: 6.0.1
transitivePeerDependencies:
@@ -16156,12 +16222,6 @@ snapshots:
'@types/yargs': 17.0.19
chalk: 4.1.2
- '@jridgewell/gen-mapping@0.3.2':
- dependencies:
- '@jridgewell/set-array': 1.1.2
- '@jridgewell/sourcemap-codec': 1.4.15
- '@jridgewell/trace-mapping': 0.3.25
-
'@jridgewell/gen-mapping@0.3.5':
dependencies:
'@jridgewell/set-array': 1.2.1
@@ -16170,8 +16230,6 @@ snapshots:
'@jridgewell/resolve-uri@3.1.0': {}
- '@jridgewell/set-array@1.1.2': {}
-
'@jridgewell/set-array@1.2.1': {}
'@jridgewell/source-map@0.3.2':
@@ -16187,6 +16245,12 @@ snapshots:
'@jridgewell/resolve-uri': 3.1.0
'@jridgewell/sourcemap-codec': 1.4.15
+ '@jridgewell/trace-mapping@0.3.9':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.0
+ '@jridgewell/sourcemap-codec': 1.4.15
+ optional: true
+
'@js-joda/core@5.6.1': {}
'@js-sdsl/ordered-map@4.4.2': {}
@@ -16227,7 +16291,7 @@ snapshots:
'@kwsites/file-exists@1.1.1':
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -16236,7 +16300,7 @@ snapshots:
'@langchain/anthropic@0.2.9(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))':
dependencies:
'@anthropic-ai/sdk': 0.22.0(encoding@0.1.13)
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
fast-xml-parser: 4.3.5
zod: 3.23.8
zod-to-json-schema: 3.23.0(zod@3.23.8)
@@ -16248,23 +16312,23 @@ snapshots:
'@langchain/cohere@0.0.10(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
cohere-ai: 7.10.1(encoding@0.1.13)
transitivePeerDependencies:
- encoding
- langchain
- openai
- '@langchain/community@0.2.20(32xju6nqoe2wrsbntqq2x5vcke)':
+ '@langchain/community@0.2.20(a4iyb3banmlkrbqqp5ye37i4cm)':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- '@langchain/openai': 0.2.5(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/openai': 0.2.5(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))
binary-extensions: 2.2.0
expr-eval: 2.0.2
flat: 5.0.2
js-yaml: 4.1.0
- langchain: 0.2.11(6hdkxymucpmkiknmt5geracdu4)
- langsmith: 0.1.34(@langchain/core@0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ langchain: 0.2.11(m7otbkpxyspoz5trt2pa3dcs6u)
+ langsmith: 0.1.34(@langchain/core@0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
uuid: 10.0.0
zod: 3.23.8
zod-to-json-schema: 3.23.0(zod@3.23.8)
@@ -16272,10 +16336,11 @@ snapshots:
'@aws-sdk/client-bedrock-runtime': 3.535.0
'@aws-sdk/client-s3': 3.478.0
'@aws-sdk/credential-provider-node': 3.535.0
+ '@azure/storage-blob': 12.18.0(encoding@0.1.13)
'@getzep/zep-cloud': 1.0.11(@langchain/core@0.2.18)(encoding@0.1.13)(langchain@0.2.11)
'@getzep/zep-js': 0.9.0
'@google-ai/generativelanguage': 2.5.0(encoding@0.1.13)
- '@google-cloud/storage': 6.11.0(encoding@0.1.13)
+ '@google-cloud/storage': 7.12.1(encoding@0.1.13)
'@huggingface/inference': 2.7.0
'@mozilla/readability': 0.5.0
'@pinecone-database/pinecone': 3.0.0
@@ -16325,13 +16390,13 @@ snapshots:
- pyodide
- supports-color
- '@langchain/core@0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))':
+ '@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)':
dependencies:
ansi-styles: 5.2.0
camelcase: 6.3.0
decamelize: 1.2.0
js-tiktoken: 1.0.12
- langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
ml-distance: 4.0.1
mustache: 4.2.0
p-queue: 6.6.2
@@ -16343,13 +16408,13 @@ snapshots:
- langchain
- openai
- '@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)':
+ '@langchain/core@0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))':
dependencies:
ansi-styles: 5.2.0
camelcase: 6.3.0
decamelize: 1.2.0
js-tiktoken: 1.0.12
- langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
+ langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
ml-distance: 4.0.1
mustache: 4.2.0
p-queue: 6.6.2
@@ -16361,9 +16426,9 @@ snapshots:
- langchain
- openai
- '@langchain/google-common@0.0.22(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)':
+ '@langchain/google-common@0.0.22(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
uuid: 10.0.0
zod-to-json-schema: 3.23.0(zod@3.23.8)
transitivePeerDependencies:
@@ -16371,10 +16436,10 @@ snapshots:
- openai
- zod
- '@langchain/google-gauth@0.0.21(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)':
+ '@langchain/google-gauth@0.0.21(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- '@langchain/google-common': 0.0.22(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/google-common': 0.0.22(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
google-auth-library: 8.9.0(encoding@0.1.13)
transitivePeerDependencies:
- encoding
@@ -16386,7 +16451,7 @@ snapshots:
'@langchain/google-genai@0.0.23(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)':
dependencies:
'@google/generative-ai': 0.7.1
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
zod-to-json-schema: 3.23.0(zod@3.23.8)
transitivePeerDependencies:
- langchain
@@ -16395,8 +16460,8 @@ snapshots:
'@langchain/google-vertexai@0.0.21(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- '@langchain/google-gauth': 0.0.21(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/google-gauth': 0.0.21(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
transitivePeerDependencies:
- encoding
- langchain
@@ -16406,8 +16471,8 @@ snapshots:
'@langchain/groq@0.0.15(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- '@langchain/openai': 0.2.5(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/openai': 0.2.5(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))
groq-sdk: 0.3.2(encoding@0.1.13)
zod: 3.23.8
zod-to-json-schema: 3.23.0(zod@3.23.8)
@@ -16419,7 +16484,7 @@ snapshots:
'@langchain/mistralai@0.0.27(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@mistralai/mistralai': 0.4.0(encoding@0.1.13)
uuid: 10.0.0
zod: 3.23.8
@@ -16431,16 +16496,16 @@ snapshots:
'@langchain/ollama@0.0.2(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
ollama: 0.5.6
uuid: 10.0.0
transitivePeerDependencies:
- langchain
- openai
- '@langchain/openai@0.2.5(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))':
+ '@langchain/openai@0.2.5(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
js-tiktoken: 1.0.12
openai: 4.53.0(encoding@0.1.13)
zod: 3.23.8
@@ -16450,9 +16515,9 @@ snapshots:
- langchain
- supports-color
- '@langchain/openai@0.2.5(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))':
+ '@langchain/openai@0.2.5(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
+ '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
js-tiktoken: 1.0.12
openai: 4.53.0(encoding@0.1.13)
zod: 3.23.8
@@ -16463,9 +16528,9 @@ snapshots:
- supports-color
optional: true
- '@langchain/pinecone@0.0.8(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))':
+ '@langchain/pinecone@0.0.8(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@pinecone-database/pinecone': 3.0.0
flat: 5.0.2
uuid: 10.0.0
@@ -16473,9 +16538,9 @@ snapshots:
- langchain
- openai
- '@langchain/qdrant@0.0.5(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))(typescript@5.5.2)':
+ '@langchain/qdrant@0.0.5(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))(typescript@5.5.2)':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
'@qdrant/js-client-rest': 1.9.0(typescript@5.5.2)
uuid: 9.0.1
transitivePeerDependencies:
@@ -16483,31 +16548,31 @@ snapshots:
- openai
- typescript
- '@langchain/redis@0.0.5(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))':
+ '@langchain/redis@0.0.5(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
redis: 4.6.13
transitivePeerDependencies:
- langchain
- openai
- '@langchain/textsplitters@0.0.3(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))':
+ '@langchain/textsplitters@0.0.3(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)':
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- js-tiktoken: 1.0.12
- transitivePeerDependencies:
- - langchain
- - openai
-
- '@langchain/textsplitters@0.0.3(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)':
- dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
+ '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
js-tiktoken: 1.0.12
transitivePeerDependencies:
- langchain
- openai
optional: true
+ '@langchain/textsplitters@0.0.3(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))':
+ dependencies:
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ js-tiktoken: 1.0.12
+ transitivePeerDependencies:
+ - langchain
+ - openai
+
'@lezer/common@1.1.0': {}
'@lezer/common@1.2.1': {}
@@ -16637,8 +16702,8 @@ snapshots:
'@n8n/localtunnel@3.0.0':
dependencies:
- axios: 1.7.3(debug@4.3.6)
- debug: 4.3.6
+ axios: 1.7.4(debug@4.3.6)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -16655,7 +16720,7 @@ snapshots:
esprima-next: 5.8.4
recast: 0.22.0
- '@n8n/typeorm@0.3.20-10(@sentry/node@7.87.0)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.12)(sqlite3@5.1.7)':
+ '@n8n/typeorm@0.3.20-10(@sentry/node@7.87.0)(ioredis@5.3.2)(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@18.16.16)(typescript@5.5.2))':
dependencies:
'@n8n/p-retry': 6.2.0-2
'@sqltools/formatter': 1.2.5
@@ -16664,7 +16729,7 @@ snapshots:
buffer: 6.0.3
chalk: 4.1.2
dayjs: 1.11.10
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
dotenv: 16.3.1
glob: 10.3.10
mkdirp: 2.1.3
@@ -16682,10 +16747,11 @@ snapshots:
pg: 8.12.0
redis: 4.6.12
sqlite3: 5.1.7
+ ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.5.2)
transitivePeerDependencies:
- supports-color
- '@n8n/typeorm@0.3.20-10(@sentry/node@7.87.0)(ioredis@5.3.2)(mssql@10.0.2)(mysql2@3.11.0)(pg@8.12.0)(redis@4.6.14)(sqlite3@5.1.7)':
+ '@n8n/typeorm@0.3.20-10(@sentry/node@7.87.0)(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@18.16.16)(typescript@5.5.2))':
dependencies:
'@n8n/p-retry': 6.2.0-2
'@sqltools/formatter': 1.2.5
@@ -16694,7 +16760,7 @@ snapshots:
buffer: 6.0.3
chalk: 4.1.2
dayjs: 1.11.10
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
dotenv: 16.3.1
glob: 10.3.10
mkdirp: 2.1.3
@@ -16712,6 +16778,7 @@ snapshots:
pg: 8.12.0
redis: 4.6.14
sqlite3: 5.1.7
+ ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.5.2)
transitivePeerDependencies:
- supports-color
@@ -16780,14 +16847,14 @@ snapshots:
ansis: 3.2.0
clean-stack: 3.0.1
cli-spinners: 2.9.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(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.2
- minimatch: 9.0.4
+ minimatch: 9.0.5
string-width: 4.2.3
supports-color: 8.1.1
widest-line: 3.1.0
@@ -16875,25 +16942,25 @@ snapshots:
'@radix-ui/primitive@1.0.1':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-compose-refs@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
react: 18.2.0
optionalDependencies:
'@types/react': 18.0.27
'@radix-ui/react-context@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
react: 18.2.0
optionalDependencies:
'@types/react': 18.0.27
'@radix-ui/react-dialog@1.0.5(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0)
'@radix-ui/react-context': 1.0.1(@types/react@18.0.27)(react@18.2.0)
@@ -16915,7 +16982,7 @@ snapshots:
'@radix-ui/react-dismissable-layer@1.0.5(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/primitive': 1.0.1
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
@@ -16928,14 +16995,14 @@ snapshots:
'@radix-ui/react-focus-guards@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
react: 18.2.0
optionalDependencies:
'@types/react': 18.0.27
'@radix-ui/react-focus-scope@1.0.4(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0)
'@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0)
@@ -16946,7 +17013,7 @@ snapshots:
'@radix-ui/react-id@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0)
react: 18.2.0
optionalDependencies:
@@ -16954,7 +17021,7 @@ snapshots:
'@radix-ui/react-portal@1.0.4(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-primitive': 1.0.3(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -16963,7 +17030,7 @@ snapshots:
'@radix-ui/react-presence@1.0.1(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0)
'@radix-ui/react-use-layout-effect': 1.0.1(@types/react@18.0.27)(react@18.2.0)
react: 18.2.0
@@ -16973,7 +17040,7 @@ snapshots:
'@radix-ui/react-primitive@1.0.3(@types/react@18.0.27)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-slot': 1.0.2(@types/react@18.0.27)(react@18.2.0)
react: 18.2.0
react-dom: 18.2.0(react@18.2.0)
@@ -16982,7 +17049,7 @@ snapshots:
'@radix-ui/react-slot@1.0.2(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-compose-refs': 1.0.1(@types/react@18.0.27)(react@18.2.0)
react: 18.2.0
optionalDependencies:
@@ -16990,14 +17057,14 @@ snapshots:
'@radix-ui/react-use-callback-ref@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
react: 18.2.0
optionalDependencies:
'@types/react': 18.0.27
'@radix-ui/react-use-controllable-state@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0)
react: 18.2.0
optionalDependencies:
@@ -17005,7 +17072,7 @@ snapshots:
'@radix-ui/react-use-escape-keydown@1.0.3(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
'@radix-ui/react-use-callback-ref': 1.0.1(@types/react@18.0.27)(react@18.2.0)
react: 18.2.0
optionalDependencies:
@@ -17013,7 +17080,7 @@ snapshots:
'@radix-ui/react-use-layout-effect@1.0.1(@types/react@18.0.27)(react@18.2.0)':
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
react: 18.2.0
optionalDependencies:
'@types/react': 18.0.27
@@ -17199,9 +17266,9 @@ snapshots:
'@rollup/rollup-win32-x64-msvc@4.18.0':
optional: true
- '@rudderstack/rudder-sdk-node@2.0.7(tslib@2.6.2)':
+ '@rudderstack/rudder-sdk-node@2.0.9(tslib@2.6.2)':
dependencies:
- axios: 1.7.3(debug@3.2.7)
+ axios: 1.7.4(debug@4.3.6)
axios-retry: 3.7.0
component-type: 1.2.1
join-component: 1.1.0
@@ -17364,6 +17431,11 @@ snapshots:
dependencies:
'@sinonjs/commons': 3.0.1
+ '@smithy/abort-controller@1.1.0':
+ dependencies:
+ '@smithy/types': 1.2.0
+ tslib: 2.6.2
+
'@smithy/abort-controller@2.2.0':
dependencies:
'@smithy/types': 2.12.0
@@ -17523,6 +17595,14 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.6.2
+ '@smithy/node-http-handler@1.1.0':
+ dependencies:
+ '@smithy/abort-controller': 1.1.0
+ '@smithy/protocol-http': 1.2.0
+ '@smithy/querystring-builder': 1.1.0
+ '@smithy/types': 1.2.0
+ tslib: 2.6.2
+
'@smithy/node-http-handler@2.5.0':
dependencies:
'@smithy/abort-controller': 2.2.0
@@ -17536,11 +17616,22 @@ snapshots:
'@smithy/types': 2.12.0
tslib: 2.6.2
+ '@smithy/protocol-http@1.2.0':
+ dependencies:
+ '@smithy/types': 1.2.0
+ tslib: 2.6.2
+
'@smithy/protocol-http@3.3.0':
dependencies:
'@smithy/types': 2.12.0
tslib: 2.6.2
+ '@smithy/querystring-builder@1.1.0':
+ dependencies:
+ '@smithy/types': 1.2.0
+ '@smithy/util-uri-escape': 1.1.0
+ tslib: 2.6.2
+
'@smithy/querystring-builder@2.2.0':
dependencies:
'@smithy/types': 2.12.0
@@ -17580,6 +17671,10 @@ snapshots:
'@smithy/util-stream': 2.2.0
tslib: 2.6.2
+ '@smithy/types@1.2.0':
+ dependencies:
+ tslib: 2.6.2
+
'@smithy/types@2.12.0':
dependencies:
tslib: 2.6.2
@@ -17663,6 +17758,10 @@ snapshots:
'@smithy/util-utf8': 2.3.0
tslib: 2.6.2
+ '@smithy/util-uri-escape@1.1.0':
+ dependencies:
+ tslib: 2.6.2
+
'@smithy/util-uri-escape@2.2.0':
dependencies:
tslib: 2.6.2
@@ -17772,11 +17871,11 @@ snapshots:
dependencies:
'@storybook/global': 5.0.0
- '@storybook/addon-interactions@8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))':
+ '@storybook/addon-interactions@8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))':
dependencies:
'@storybook/global': 5.0.0
'@storybook/instrumenter': 8.1.4
- '@storybook/test': 8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
+ '@storybook/test': 8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
'@storybook/types': 8.1.4
polished: 4.2.2
ts-dedent: 2.2.0
@@ -17962,7 +18061,7 @@ snapshots:
dependencies:
'@babel/core': 7.24.6
'@babel/preset-env': 7.24.6(@babel/core@7.24.6)
- '@babel/types': 7.24.0
+ '@babel/types': 7.24.6
'@storybook/csf': 0.1.7
'@storybook/csf-tools': 8.1.4
'@storybook/node-logger': 8.1.4
@@ -18224,14 +18323,14 @@ snapshots:
- prettier
- supports-color
- '@storybook/test@8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))':
+ '@storybook/test@8.1.4(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))':
dependencies:
'@storybook/client-logger': 8.1.4
'@storybook/core-events': 8.1.4
'@storybook/instrumenter': 8.1.4
'@storybook/preview-api': 8.1.4
'@testing-library/dom': 9.3.4
- '@testing-library/jest-dom': 6.4.2(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
+ '@testing-library/jest-dom': 6.4.2(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))
'@testing-library/user-event': 14.5.2(@testing-library/dom@9.3.4)
'@vitest/expect': 1.3.1
'@vitest/spy': 1.3.1
@@ -18378,7 +18477,7 @@ snapshots:
lz-string: 1.5.0
pretty-format: 27.5.1
- '@testing-library/jest-dom@6.1.5(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1))':
+ '@testing-library/jest-dom@6.1.5(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1))':
dependencies:
'@adobe/css-tools': 4.3.2
'@babel/runtime': 7.22.6
@@ -18391,10 +18490,10 @@ snapshots:
optionalDependencies:
'@jest/globals': 29.6.2
'@types/jest': 29.5.3
- jest: 29.6.2(@types/node@18.16.16)
+ jest: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
vitest: 1.6.0(@types/node@18.16.16)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)
- '@testing-library/jest-dom@6.4.2(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))':
+ '@testing-library/jest-dom@6.4.2(@jest/globals@29.6.2)(@types/jest@29.5.3)(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(vitest@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1))':
dependencies:
'@adobe/css-tools': 4.3.2
'@babel/runtime': 7.23.6
@@ -18407,7 +18506,7 @@ snapshots:
optionalDependencies:
'@jest/globals': 29.6.2
'@types/jest': 29.5.3
- jest: 29.6.2(@types/node@18.16.16)
+ jest: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
vitest: 1.6.0(@types/node@18.16.16)(jsdom@23.0.1)(sass@1.64.1)(terser@5.16.1)
'@testing-library/user-event@14.5.1(@testing-library/dom@9.3.4)':
@@ -18435,6 +18534,18 @@ snapshots:
'@tootallnate/once@2.0.0': {}
+ '@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
+
'@types/amqplib@0.10.1':
dependencies:
'@types/node': 18.16.16
@@ -18566,6 +18677,12 @@ snapshots:
dependencies:
'@types/node': 18.16.16
+ '@types/fs-extra@11.0.4':
+ dependencies:
+ '@types/jsonfile': 6.1.4
+ '@types/node': 18.16.16
+ optional: true
+
'@types/ftp@0.3.33':
dependencies:
'@types/node': 18.16.16
@@ -18635,12 +18752,19 @@ snapshots:
'@types/json-schema@7.0.15': {}
+ '@types/jsonfile@6.1.4':
+ dependencies:
+ '@types/node': 18.16.16
+ optional: true
+
'@types/jsonpath@0.2.0': {}
'@types/jsonwebtoken@9.0.6':
dependencies:
'@types/node': 18.16.16
+ '@types/k6@0.52.0': {}
+
'@types/linkify-it@3.0.5': {}
'@types/lodash-es@4.17.6':
@@ -18798,7 +18922,7 @@ snapshots:
'@types/sizzle@2.3.3': {}
- '@types/snowflake-sdk@1.6.20':
+ '@types/snowflake-sdk@1.6.24':
dependencies:
'@types/node': 18.16.16
generic-pool: 3.9.0
@@ -18956,7 +19080,7 @@ snapshots:
dependencies:
'@typescript-eslint/typescript-estree': 7.2.0(typescript@5.5.2)
'@typescript-eslint/utils': 7.2.0(eslint@8.57.0)(typescript@5.5.2)
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
eslint: 8.57.0
ts-api-utils: 1.0.1(typescript@5.5.2)
optionalDependencies:
@@ -18972,7 +19096,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 6.7.5
'@typescript-eslint/visitor-keys': 6.7.5
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
semver: 7.6.0
@@ -18986,7 +19110,7 @@ snapshots:
dependencies:
'@typescript-eslint/types': 7.2.0
'@typescript-eslint/visitor-keys': 7.2.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
globby: 11.1.0
is-glob: 4.0.3
minimatch: 9.0.3
@@ -19046,7 +19170,7 @@ snapshots:
dependencies:
'@ampproject/remapping': 2.2.1
'@bcoe/v8-coverage': 0.2.3
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
istanbul-lib-coverage: 3.2.2
istanbul-lib-report: 3.0.1
istanbul-lib-source-maps: 5.0.4
@@ -19169,7 +19293,7 @@ snapshots:
'@vue/compiler-core@3.4.21':
dependencies:
- '@babel/parser': 7.24.0
+ '@babel/parser': 7.24.6
'@vue/shared': 3.4.21
entities: 4.5.0
estree-walker: 2.0.2
@@ -19229,7 +19353,7 @@ snapshots:
'@vue/compiler-dom': 3.4.21
'@vue/shared': 3.4.21
computeds: 0.0.1
- minimatch: 9.0.4
+ minimatch: 9.0.5
muggle-string: 0.3.1
path-browserify: 1.0.1
vue-template-compiler: 2.7.14
@@ -19303,7 +19427,7 @@ snapshots:
'@types/web-bluetooth': 0.0.16
'@vueuse/metadata': 9.13.0
'@vueuse/shared': 9.13.0(vue@3.4.21(typescript@5.5.2))
- vue-demi: 0.14.6(vue@3.4.21(typescript@5.5.2))
+ vue-demi: 0.14.8(vue@3.4.21(typescript@5.5.2))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -19321,7 +19445,7 @@ snapshots:
'@vueuse/shared@9.13.0(vue@3.4.21(typescript@5.5.2))':
dependencies:
- vue-demi: 0.14.6(vue@3.4.21(typescript@5.5.2))
+ vue-demi: 0.14.8(vue@3.4.21(typescript@5.5.2))
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -19385,19 +19509,19 @@ snapshots:
agent-base@6.0.2:
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
agent-base@7.1.0:
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
agentkeepalive@4.2.1:
dependencies:
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
depd: 1.1.2
humanize-ms: 1.2.1
transitivePeerDependencies:
@@ -19494,6 +19618,9 @@ snapshots:
readable-stream: 3.6.0
optional: true
+ arg@4.1.3:
+ optional: true
+
arg@5.0.2: {}
argparse@1.0.10:
@@ -19677,26 +19804,10 @@ snapshots:
axios-retry@3.7.0:
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
is-retry-allowed: 2.2.0
- axios@1.7.3(debug@3.2.7):
- dependencies:
- follow-redirects: 1.15.6(debug@3.2.7)
- form-data: 4.0.0
- proxy-from-env: 1.1.0
- transitivePeerDependencies:
- - debug
-
- axios@1.7.3(debug@4.3.4):
- dependencies:
- follow-redirects: 1.15.6(debug@4.3.4)
- form-data: 4.0.0
- proxy-from-env: 1.1.0
- transitivePeerDependencies:
- - debug
-
- axios@1.7.3(debug@4.3.6):
+ axios@1.7.4(debug@4.3.6):
dependencies:
follow-redirects: 1.15.6(debug@4.3.6)
form-data: 4.0.0
@@ -20190,8 +20301,6 @@ snapshots:
dependencies:
restore-cursor: 3.1.0
- cli-spinners@2.9.0: {}
-
cli-spinners@2.9.2: {}
cli-table3@0.6.3:
@@ -20444,6 +20553,9 @@ snapshots:
nan: 2.20.0
optional: true
+ create-require@1.1.1:
+ optional: true
+
crelt@1.0.5: {}
crlf-normalize@1.0.19(ts-toolbelt@9.6.0):
@@ -20689,8 +20801,6 @@ snapshots:
dayjs@1.11.10: {}
- dayjs@1.11.6: {}
-
de-indent@1.0.2: {}
debug@2.6.9:
@@ -20715,16 +20825,16 @@ snapshots:
optionalDependencies:
supports-color: 8.1.1
- debug@4.3.5(supports-color@8.1.1):
+ debug@4.3.5:
+ dependencies:
+ ms: 2.1.2
+
+ debug@4.3.6(supports-color@8.1.1):
dependencies:
ms: 2.1.2
optionalDependencies:
supports-color: 8.1.1
- debug@4.3.6:
- dependencies:
- ms: 2.1.2
-
decamelize@1.2.0: {}
decimal.js@10.4.3: {}
@@ -20844,7 +20954,7 @@ snapshots:
detect-port@1.5.1:
dependencies:
address: 1.2.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -20857,6 +20967,9 @@ snapshots:
diff-sequences@29.6.3: {}
+ diff@4.0.2:
+ optional: true
+
diff@5.2.0: {}
digest-fetch@1.3.0:
@@ -20963,6 +21076,13 @@ snapshots:
readable-stream: 3.6.0
stream-shift: 1.0.1
+ 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:
@@ -20989,17 +21109,17 @@ snapshots:
electron-to-chromium@1.4.703: {}
- element-plus@2.3.6(vue@3.4.21(typescript@5.5.2)):
+ element-plus@2.4.3(vue@3.4.21(typescript@5.5.2)):
dependencies:
'@ctrl/tinycolor': 3.6.0
- '@element-plus/icons-vue': 2.1.0(vue@3.4.21(typescript@5.5.2))
+ '@element-plus/icons-vue': 2.3.1(vue@3.4.21(typescript@5.5.2))
'@floating-ui/dom': 1.4.5
'@popperjs/core': '@sxzz/popperjs-es@2.11.7'
'@types/lodash': 4.14.195
'@types/lodash-es': 4.17.6
'@vueuse/core': 9.13.0(vue@3.4.21(typescript@5.5.2))
async-validator: 4.2.5
- dayjs: 1.11.6
+ dayjs: 1.11.10
escape-html: 1.0.3
lodash: 4.17.21
lodash-es: 4.17.21
@@ -21041,8 +21161,6 @@ snapshots:
dependencies:
ansi-colors: 4.1.3
- ent@2.2.0: {}
-
entities@2.2.0: {}
entities@3.0.1: {}
@@ -21218,7 +21336,7 @@ snapshots:
esbuild-register@3.5.0(esbuild@0.20.2):
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
esbuild: 0.20.2
transitivePeerDependencies:
- supports-color
@@ -21303,7 +21421,7 @@ snapshots:
eslint-import-resolver-node@0.3.9:
dependencies:
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7(supports-color@5.5.0)
is-core-module: 2.13.1
resolve: 1.22.8
transitivePeerDependencies:
@@ -21328,7 +21446,7 @@ snapshots:
eslint-module-utils@2.8.0(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.2.0(eslint@8.57.0)(typescript@5.5.2))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0):
dependencies:
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7(supports-color@5.5.0)
optionalDependencies:
'@typescript-eslint/parser': 7.2.0(eslint@8.57.0)(typescript@5.5.2)
eslint: 8.57.0
@@ -21348,7 +21466,7 @@ snapshots:
array.prototype.findlastindex: 1.2.3
array.prototype.flat: 1.3.2
array.prototype.flatmap: 1.3.2
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7(supports-color@5.5.0)
doctrine: 2.1.0
eslint: 8.57.0
eslint-import-resolver-node: 0.3.9
@@ -21700,7 +21818,7 @@ snapshots:
extract-zip@2.0.1(supports-color@8.1.1):
dependencies:
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
get-stream: 5.2.0
yauzl: 2.10.0
optionalDependencies:
@@ -21751,11 +21869,11 @@ snapshots:
dependencies:
strnum: 1.0.5
- fast-xml-parser@4.2.7:
+ fast-xml-parser@4.3.5:
dependencies:
strnum: 1.0.5
- fast-xml-parser@4.3.5:
+ fast-xml-parser@4.4.1:
dependencies:
strnum: 1.0.5
@@ -21879,17 +21997,9 @@ snapshots:
fn.name@1.1.0: {}
- follow-redirects@1.15.6(debug@3.2.7):
- optionalDependencies:
- debug: 3.2.7(supports-color@8.1.1)
-
- follow-redirects@1.15.6(debug@4.3.4):
- optionalDependencies:
- debug: 4.3.4(supports-color@8.1.1)
-
follow-redirects@1.15.6(debug@4.3.6):
optionalDependencies:
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
for-each@0.3.3:
dependencies:
@@ -22161,7 +22271,7 @@ snapshots:
dependencies:
foreground-child: 3.1.1
jackspeak: 2.3.6
- minimatch: 9.0.3
+ minimatch: 9.0.5
minipass: 7.0.2
path-scurry: 1.10.1
@@ -22226,7 +22336,7 @@ snapshots:
array-parallel: 0.1.3
array-series: 0.1.5
cross-spawn: 4.0.2
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -22423,6 +22533,8 @@ snapshots:
dependencies:
whatwg-encoding: 3.1.1
+ html-entities@2.5.2: {}
+
html-escaper@2.0.2: {}
html-to-text@9.0.5:
@@ -22445,7 +22557,7 @@ snapshots:
domelementtype: 2.3.0
domhandler: 5.0.3
domutils: 3.0.1
- entities: 4.4.0
+ entities: 4.5.0
http-cache-semantics@4.1.1:
optional: true
@@ -22462,7 +22574,7 @@ snapshots:
dependencies:
'@tootallnate/once': 1.1.2
agent-base: 6.0.2
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
optional: true
@@ -22471,14 +22583,14 @@ snapshots:
dependencies:
'@tootallnate/once': 2.0.0
agent-base: 6.0.2
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
http-proxy-agent@7.0.0:
dependencies:
agent-base: 7.1.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -22493,14 +22605,14 @@ snapshots:
https-proxy-agent@5.0.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
https-proxy-agent@7.0.2:
dependencies:
agent-base: 7.1.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
transitivePeerDependencies:
- supports-color
@@ -22569,7 +22681,7 @@ snapshots:
infisical-node@1.3.0:
dependencies:
- axios: 1.7.3(debug@3.2.7)
+ axios: 1.7.4(debug@4.3.6)
dotenv: 16.3.1
tweetnacl: 1.0.3
tweetnacl-util: 0.15.1
@@ -22637,7 +22749,7 @@ snapshots:
dependencies:
'@ioredis/commands': 1.2.0
cluster-key-slot: 1.1.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.5
denque: 2.1.0
lodash.defaults: 4.2.0
lodash.isarguments: 3.1.0
@@ -22872,7 +22984,7 @@ snapshots:
istanbul-lib-source-maps@4.0.1:
dependencies:
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
istanbul-lib-coverage: 3.2.2
source-map: 0.6.1
transitivePeerDependencies:
@@ -22881,7 +22993,7 @@ snapshots:
istanbul-lib-source-maps@5.0.4:
dependencies:
'@jridgewell/trace-mapping': 0.3.25
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
istanbul-lib-coverage: 3.2.2
transitivePeerDependencies:
- supports-color
@@ -22935,16 +23047,16 @@ snapshots:
- babel-plugin-macros
- supports-color
- jest-cli@29.6.2(@types/node@18.16.16):
+ jest-cli@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)):
dependencies:
- '@jest/core': 29.6.2
+ '@jest/core': 29.6.2(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.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@18.16.16)
+ jest-config: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
jest-util: 29.6.2
jest-validate: 29.6.2
prompts: 2.4.2
@@ -22955,7 +23067,7 @@ snapshots:
- supports-color
- ts-node
- jest-config@29.6.2(@types/node@18.16.16):
+ jest-config@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)):
dependencies:
'@babel/core': 7.24.0
'@jest/test-sequencer': 29.6.2
@@ -22981,6 +23093,7 @@ snapshots:
strip-json-comments: 3.1.1
optionalDependencies:
'@types/node': 18.16.16
+ ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.5.2)
transitivePeerDependencies:
- babel-plugin-macros
- supports-color
@@ -23098,9 +23211,9 @@ snapshots:
slash: 3.0.0
stack-utils: 2.0.6
- jest-mock-extended@3.0.4(jest@29.6.2(@types/node@18.16.16))(typescript@5.5.2):
+ jest-mock-extended@3.0.4(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(typescript@5.5.2):
dependencies:
- jest: 29.6.2(@types/node@18.16.16)
+ jest: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
ts-essentials: 7.0.3(typescript@5.5.2)
typescript: 5.5.2
@@ -23258,12 +23371,12 @@ snapshots:
merge-stream: 2.0.0
supports-color: 8.1.1
- jest@29.6.2(@types/node@18.16.16):
+ jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)):
dependencies:
- '@jest/core': 29.6.2
+ '@jest/core': 29.6.2(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
'@jest/types': 29.6.1
import-local: 3.1.0
- jest-cli: 29.6.2(@types/node@18.16.16)
+ jest-cli: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
transitivePeerDependencies:
- '@types/node'
- babel-plugin-macros
@@ -23540,17 +23653,43 @@ snapshots:
kuler@2.0.0: {}
- langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4):
+ langchain@0.2.11(axios@1.7.4)(openai@4.53.0):
dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- '@langchain/openai': 0.2.5(encoding@0.1.13)(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))
- '@langchain/textsplitters': 0.0.3(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
+ '@langchain/openai': 0.2.5(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))
+ '@langchain/textsplitters': 0.0.3(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
binary-extensions: 2.2.0
js-tiktoken: 1.0.12
js-yaml: 4.1.0
jsonpointer: 5.0.1
langchainhub: 0.0.8
- langsmith: 0.1.34(@langchain/core@0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
+ langsmith: 0.1.34(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
+ ml-distance: 4.0.1
+ openapi-types: 12.1.3
+ p-retry: 4.6.2
+ uuid: 10.0.0
+ yaml: 2.3.4
+ zod: 3.23.8
+ zod-to-json-schema: 3.23.0(zod@3.23.8)
+ optionalDependencies:
+ axios: 1.7.4(debug@4.3.6)
+ transitivePeerDependencies:
+ - encoding
+ - openai
+ - supports-color
+ optional: true
+
+ langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u):
+ dependencies:
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ '@langchain/openai': 0.2.5(encoding@0.1.13)(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))
+ '@langchain/textsplitters': 0.0.3(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ binary-extensions: 2.2.0
+ js-tiktoken: 1.0.12
+ js-yaml: 4.1.0
+ jsonpointer: 5.0.1
+ langchainhub: 0.0.8
+ langsmith: 0.1.34(@langchain/core@0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
ml-distance: 4.0.1
openapi-types: 12.1.3
p-retry: 4.6.2
@@ -23561,9 +23700,10 @@ snapshots:
optionalDependencies:
'@aws-sdk/client-s3': 3.478.0
'@aws-sdk/credential-provider-node': 3.535.0
+ '@azure/storage-blob': 12.18.0(encoding@0.1.13)
'@langchain/anthropic': 0.2.9(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))
'@langchain/cohere': 0.0.10(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))
- '@langchain/community': 0.2.20(32xju6nqoe2wrsbntqq2x5vcke)
+ '@langchain/community': 0.2.20(a4iyb3banmlkrbqqp5ye37i4cm)
'@langchain/google-genai': 0.0.23(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
'@langchain/google-vertexai': 0.0.21(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))(zod@3.23.8)
'@langchain/groq': 0.0.15(encoding@0.1.13)(langchain@0.2.11)(openai@4.53.0(encoding@0.1.13))
@@ -23572,11 +23712,11 @@ snapshots:
'@pinecone-database/pinecone': 3.0.0
'@supabase/supabase-js': 2.43.4
'@xata.io/client': 0.28.4(typescript@5.5.2)
- axios: 1.7.3(debug@3.2.7)
+ axios: 1.7.4(debug@4.3.6)
cheerio: 1.0.0-rc.12
d3-dsv: 2.0.0
epub2: 3.0.2(ts-toolbelt@9.6.0)
- fast-xml-parser: 4.3.5
+ fast-xml-parser: 4.4.1
handlebars: 4.7.8
html-to-text: 9.0.5
ignore: 5.2.4
@@ -23591,35 +23731,9 @@ snapshots:
- openai
- supports-color
- langchain@0.2.11(axios@1.7.3)(openai@4.53.0):
- dependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
- '@langchain/openai': 0.2.5(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))
- '@langchain/textsplitters': 0.0.3(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
- binary-extensions: 2.2.0
- js-tiktoken: 1.0.12
- js-yaml: 4.1.0
- jsonpointer: 5.0.1
- langchainhub: 0.0.8
- langsmith: 0.1.34(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
- ml-distance: 4.0.1
- openapi-types: 12.1.3
- p-retry: 4.6.2
- uuid: 10.0.0
- yaml: 2.3.4
- zod: 3.23.8
- zod-to-json-schema: 3.23.0(zod@3.23.8)
- optionalDependencies:
- axios: 1.7.3(debug@3.2.7)
- transitivePeerDependencies:
- - encoding
- - openai
- - supports-color
- optional: true
-
langchainhub@0.0.8: {}
- langsmith@0.1.34(@langchain/core@0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)):
+ langsmith@0.1.34(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0):
dependencies:
'@types/uuid': 9.0.7
commander: 10.0.1
@@ -23628,37 +23742,25 @@ snapshots:
p-retry: 4.6.2
uuid: 9.0.1
optionalDependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- langchain: 0.2.11(6hdkxymucpmkiknmt5geracdu4)
- openai: 4.53.0(encoding@0.1.13)
-
- langsmith@0.1.34(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0):
- dependencies:
- '@types/uuid': 9.0.7
- commander: 10.0.1
- lodash.set: 4.3.2
- p-queue: 6.6.2
- p-retry: 4.6.2
- uuid: 9.0.1
- optionalDependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
- langchain: 0.2.11(axios@1.7.3)(openai@4.53.0)
+ '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
+ langchain: 0.2.11(axios@1.7.4)(openai@4.53.0)
openai: 4.53.0(encoding@0.1.13)
optional: true
- langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13)):
+ langsmith@0.1.34(@langchain/core@0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)):
dependencies:
'@types/uuid': 9.0.7
commander: 10.0.1
+ lodash.set: 4.3.2
p-queue: 6.6.2
p-retry: 4.6.2
uuid: 9.0.1
optionalDependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(6hdkxymucpmkiknmt5geracdu4))(openai@4.53.0(encoding@0.1.13))
- langchain: 0.2.11(6hdkxymucpmkiknmt5geracdu4)
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ langchain: 0.2.11(m7otbkpxyspoz5trt2pa3dcs6u)
openai: 4.53.0(encoding@0.1.13)
- langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0):
+ langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0))(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0):
dependencies:
'@types/uuid': 9.0.7
commander: 10.0.1
@@ -23666,8 +23768,20 @@ snapshots:
p-retry: 4.6.2
uuid: 9.0.1
optionalDependencies:
- '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.3)(openai@4.53.0))(openai@4.53.0)
- langchain: 0.2.11(axios@1.7.3)(openai@4.53.0)
+ '@langchain/core': 0.2.18(langchain@0.2.11(axios@1.7.4)(openai@4.53.0))(openai@4.53.0)
+ langchain: 0.2.11(axios@1.7.4)(openai@4.53.0)
+ openai: 4.53.0(encoding@0.1.13)
+
+ langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)))(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13)):
+ dependencies:
+ '@types/uuid': 9.0.7
+ commander: 10.0.1
+ p-queue: 6.6.2
+ p-retry: 4.6.2
+ uuid: 9.0.1
+ optionalDependencies:
+ '@langchain/core': 0.2.18(langchain@0.2.11(m7otbkpxyspoz5trt2pa3dcs6u))(openai@4.53.0(encoding@0.1.13))
+ langchain: 0.2.11(m7otbkpxyspoz5trt2pa3dcs6u)
openai: 4.53.0(encoding@0.1.13)
lazy-ass@1.6.0: {}
@@ -23734,8 +23848,6 @@ snapshots:
lilconfig@2.1.0: {}
- lilconfig@3.0.0: {}
-
lilconfig@3.1.2: {}
lines-and-columns@1.2.4: {}
@@ -24106,10 +24218,6 @@ snapshots:
dependencies:
brace-expansion: 2.0.1
- minimatch@9.0.4:
- dependencies:
- brace-expansion: 2.0.1
-
minimatch@9.0.5:
dependencies:
brace-expansion: 2.0.1
@@ -24252,7 +24360,7 @@ snapshots:
mqtt-packet@9.0.0:
dependencies:
bl: 6.0.12
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
process-nextick-args: 2.0.1
transitivePeerDependencies:
- supports-color
@@ -24308,7 +24416,7 @@ snapshots:
dependencies:
'@tediousjs/connection-string': 0.5.0
commander: 11.1.0
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
rfdc: 1.3.0
tarn: 3.0.2
tedious: 16.7.1
@@ -24547,7 +24655,7 @@ snapshots:
number-allocator@1.0.14:
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
js-sdsl: 4.3.0
transitivePeerDependencies:
- supports-color
@@ -24740,7 +24848,7 @@ snapshots:
bl: 4.1.0
chalk: 4.1.2
cli-cursor: 3.1.0
- cli-spinners: 2.9.0
+ cli-spinners: 2.9.2
is-interactive: 1.0.0
is-unicode-supported: 0.1.0
log-symbols: 4.1.0
@@ -24906,7 +25014,7 @@ snapshots:
pdf-parse@1.1.1:
dependencies:
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7(supports-color@5.5.0)
node-ensure: 0.0.0
transitivePeerDependencies:
- supports-color
@@ -25060,12 +25168,13 @@ snapshots:
camelcase-css: 2.0.1
postcss: 8.4.38
- postcss-load-config@4.0.2(postcss@8.4.38):
+ postcss-load-config@4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)):
dependencies:
- lilconfig: 3.0.0
+ lilconfig: 3.1.2
yaml: 2.3.4
optionalDependencies:
postcss: 8.4.38
+ ts-node: 10.9.2(@types/node@18.16.16)(typescript@5.5.2)
postcss-nested@6.0.1(postcss@8.4.38):
dependencies:
@@ -25115,7 +25224,7 @@ snapshots:
posthog-node@3.2.1:
dependencies:
- axios: 1.7.3(debug@3.2.7)
+ axios: 1.7.4(debug@4.3.6)
rusha: 0.8.14
transitivePeerDependencies:
- debug
@@ -25164,12 +25273,6 @@ snapshots:
ansi-styles: 5.2.0
react-is: 18.2.0
- pretty-format@29.6.2:
- dependencies:
- '@jest/schemas': 29.6.0
- ansi-styles: 5.2.0
- react-is: 18.2.0
-
pretty-format@29.7.0:
dependencies:
'@jest/schemas': 29.6.3
@@ -25663,7 +25766,7 @@ snapshots:
regenerator-transform@0.15.2:
dependencies:
- '@babel/runtime': 7.23.6
+ '@babel/runtime': 7.24.7
regexp-tree@0.1.27: {}
@@ -25772,13 +25875,6 @@ snapshots:
onetime: 5.1.2
signal-exit: 3.0.7
- retry-request@5.0.2:
- dependencies:
- debug: 4.3.6
- extend: 3.0.2
- transitivePeerDependencies:
- - supports-color
-
retry-request@7.0.2(encoding@0.1.13):
dependencies:
'@types/request': 2.48.12
@@ -25802,7 +25898,7 @@ snapshots:
rhea@1.0.24:
dependencies:
- debug: 3.2.7(supports-color@8.1.1)
+ debug: 3.2.7(supports-color@5.5.0)
transitivePeerDependencies:
- supports-color
@@ -26122,7 +26218,7 @@ snapshots:
simple-websocket@9.1.0:
dependencies:
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
queue-microtask: 1.2.3
randombytes: 2.1.0
readable-stream: 3.6.0
@@ -26160,29 +26256,27 @@ snapshots:
dot-case: 3.0.4
tslib: 2.6.2
- snowflake-sdk@1.9.2(asn1.js@5.4.1)(encoding@0.1.13):
+ snowflake-sdk@1.12.0(asn1.js@5.4.1)(encoding@0.1.13):
dependencies:
'@aws-sdk/client-s3': 3.478.0
- '@azure/storage-blob': 12.11.0(encoding@0.1.13)
- '@google-cloud/storage': 6.11.0(encoding@0.1.13)
+ '@aws-sdk/node-http-handler': 3.374.0
+ '@azure/storage-blob': 12.18.0(encoding@0.1.13)
+ '@google-cloud/storage': 7.12.1(encoding@0.1.13)
'@techteamer/ocsp': 1.0.1
- agent-base: 6.0.2
asn1.js: 5.4.1
asn1.js-rfc2560: 5.0.1(asn1.js@5.4.1)
asn1.js-rfc5280: 3.0.0
- axios: 1.7.3(debug@3.2.7)
+ axios: 1.7.4(debug@4.3.6)
big-integer: 1.6.51
bignumber.js: 9.1.2
binascii: 0.0.2
bn.js: 5.2.1
browser-request: 0.3.3
- debug: 3.2.7(supports-color@8.1.1)
expand-tilde: 2.0.2
- extend: 3.0.2
- fast-xml-parser: 4.2.7
+ fast-xml-parser: 4.3.5
fastest-levenshtein: 1.0.16
generic-pool: 3.9.0
- glob: 9.3.2
+ glob: 10.3.10
https-proxy-agent: 7.0.2
jsonwebtoken: 9.0.2
mime-types: 2.1.35
@@ -26192,18 +26286,19 @@ snapshots:
open: 7.4.2
python-struct: 1.1.3
simple-lru-cache: 0.0.2
- tmp: 0.2.1
+ toml: 3.0.0
uuid: 8.3.2
winston: 3.8.2
transitivePeerDependencies:
- aws-crt
+ - debug
- encoding
- supports-color
socks-proxy-agent@6.2.1:
dependencies:
agent-base: 6.0.2
- debug: 4.3.6
+ debug: 4.3.6(supports-color@8.1.1)
socks: 2.7.1
transitivePeerDependencies:
- supports-color
@@ -26324,16 +26419,16 @@ snapshots:
standard-as-callback@2.1.0: {}
- start-server-and-test@2.0.3:
+ start-server-and-test@2.0.5:
dependencies:
arg: 5.0.2
bluebird: 3.7.2
check-more-types: 2.24.0
- debug: 4.3.4(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
execa: 5.1.1
lazy-ass: 1.6.0
ps-tree: 1.2.0
- wait-on: 7.2.0(debug@4.3.4)
+ wait-on: 7.2.0(debug@4.3.6)
transitivePeerDependencies:
- supports-color
@@ -26382,6 +26477,8 @@ snapshots:
stream-shift@1.0.1: {}
+ stream-shift@1.0.3: {}
+
streamsearch@1.1.0: {}
strict-event-emitter-types@2.0.0: {}
@@ -26515,7 +26612,7 @@ snapshots:
sucrase@3.35.0:
dependencies:
- '@jridgewell/gen-mapping': 0.3.2
+ '@jridgewell/gen-mapping': 0.3.5
commander: 4.1.1
glob: 10.3.10
lines-and-columns: 1.2.4
@@ -26527,7 +26624,7 @@ snapshots:
dependencies:
component-emitter: 1.3.0
cookiejar: 2.1.4
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
fast-safe-stringify: 2.1.1
form-data: 4.0.0
formidable: 3.5.1
@@ -26590,7 +26687,7 @@ snapshots:
syslog-client@1.1.1: {}
- tailwindcss@3.4.3:
+ tailwindcss@3.4.3(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)):
dependencies:
'@alloc/quick-lru': 5.2.0
arg: 5.0.2
@@ -26609,7 +26706,7 @@ snapshots:
postcss: 8.4.38
postcss-import: 15.1.0(postcss@8.4.38)
postcss-js: 4.0.1(postcss@8.4.38)
- postcss-load-config: 4.0.2(postcss@8.4.38)
+ postcss-load-config: 4.0.2(postcss@8.4.38)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
postcss-nested: 6.0.1(postcss@8.4.38)
postcss-selector-parser: 6.0.16
resolve: 1.22.8
@@ -26665,17 +26762,6 @@ snapshots:
transitivePeerDependencies:
- supports-color
- teeny-request@8.0.3(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
-
teeny-request@9.0.0(encoding@0.1.13):
dependencies:
http-proxy-agent: 5.0.0
@@ -26794,6 +26880,8 @@ snapshots:
'@tokenizer/token': 0.3.0
ieee754: 1.2.1
+ toml@3.0.0: {}
+
toposort@2.0.2: {}
touch@3.1.0:
@@ -26852,11 +26940,11 @@ snapshots:
ts-interface-checker@0.1.13: {}
- ts-jest@29.1.1(@babel/core@7.24.0)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.24.0))(jest@29.6.2(@types/node@18.16.16))(typescript@5.5.2):
+ ts-jest@29.1.1(@babel/core@7.24.0)(@jest/types@29.6.1)(babel-jest@29.6.2(@babel/core@7.24.0))(jest@29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2)))(typescript@5.5.2):
dependencies:
bs-logger: 0.2.6
fast-json-stable-stringify: 2.1.0
- jest: 29.6.2(@types/node@18.16.16)
+ jest: 29.6.2(@types/node@18.16.16)(ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.2))
jest-util: 29.5.0
json5: 2.2.3
lodash.memoize: 4.1.2
@@ -26871,6 +26959,25 @@ snapshots:
ts-map@1.0.3: {}
+ ts-node@10.9.2(@types/node@18.16.16)(typescript@5.5.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': 18.16.16
+ acorn: 8.12.1
+ acorn-walk: 8.3.2
+ arg: 4.1.3
+ create-require: 1.1.1
+ diff: 4.0.2
+ make-error: 1.3.6
+ typescript: 5.5.2
+ v8-compile-cache-lib: 3.0.1
+ yn: 3.1.1
+ optional: true
+
ts-toolbelt@9.6.0: {}
ts-type@3.0.1(ts-toolbelt@9.6.0):
@@ -27133,7 +27240,7 @@ snapshots:
'@antfu/install-pkg': 0.3.3
'@antfu/utils': 0.7.10
'@iconify/utils': 2.1.25
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.5
kolorist: 1.8.0
local-pkg: 0.5.0
unplugin: 1.11.0
@@ -27148,7 +27255,7 @@ snapshots:
'@antfu/utils': 0.7.10
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
chokidar: 3.5.2
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.5
fast-glob: 3.3.2
local-pkg: 0.5.0
magic-string: 0.30.10
@@ -27259,6 +27366,9 @@ snapshots:
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.25
@@ -27283,7 +27393,7 @@ snapshots:
vite-node@1.6.0(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1):
dependencies:
cac: 6.7.14
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
pathe: 1.1.2
picocolors: 1.0.1
vite: 5.2.12(@types/node@18.16.16)(sass@1.64.1)(terser@5.16.1)
@@ -27302,7 +27412,7 @@ snapshots:
'@microsoft/api-extractor': 7.43.0(@types/node@18.16.16)
'@rollup/pluginutils': 5.1.0(rollup@4.18.0)
'@vue/language-core': 1.8.27(typescript@5.5.2)
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.5
kolorist: 1.8.0
magic-string: 0.30.8
typescript: 5.5.2
@@ -27340,7 +27450,7 @@ snapshots:
'@vitest/utils': 1.6.0
acorn-walk: 8.3.2
chai: 4.3.10
- debug: 4.3.5(supports-color@8.1.1)
+ debug: 4.3.6(supports-color@8.1.1)
execa: 8.0.1
local-pkg: 0.5.0
magic-string: 0.30.10
@@ -27400,10 +27510,6 @@ snapshots:
dependencies:
vue: 3.4.21(typescript@5.5.2)
- vue-demi@0.14.6(vue@3.4.21(typescript@5.5.2)):
- dependencies:
- vue: 3.4.21(typescript@5.5.2)
-
vue-demi@0.14.8(vue@3.4.21(typescript@5.5.2)):
dependencies:
vue: 3.4.21(typescript@5.5.2)
@@ -27504,9 +27610,9 @@ snapshots:
dependencies:
xml-name-validator: 5.0.0
- wait-on@7.2.0(debug@4.3.4):
+ wait-on@7.2.0(debug@4.3.6):
dependencies:
- axios: 1.7.3(debug@4.3.4)
+ axios: 1.7.4(debug@4.3.6)
joi: 17.11.0
lodash: 4.17.21
minimist: 1.2.8
@@ -27821,6 +27927,9 @@ snapshots:
buffer-crc32: 0.2.13
fd-slicer: 1.1.0
+ yn@3.1.1:
+ optional: true
+
yocto-queue@0.1.0: {}
yocto-queue@1.0.0: {}
@@ -27850,3 +27959,8 @@ snapshots:
zod@3.22.4: {}
zod@3.23.8: {}
+
+ zx@8.1.4:
+ optionalDependencies:
+ '@types/fs-extra': 11.0.4
+ '@types/node': 18.16.16
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index cff49d0172..6d78dbe6bf 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -10,7 +10,7 @@ catalog:
'@types/lodash': ^4.14.195
'@types/uuid': ^8.3.2
'@types/xml2js': ^0.4.14
- axios: 1.7.3
+ axios: 1.7.4
basic-auth: 2.0.1
fast-glob: 3.2.12
form-data: 4.0.0