🔀 Merge master

This commit is contained in:
Iván Ovejero 2021-06-16 19:24:14 +02:00
commit 9ab673946b
422 changed files with 4936 additions and 1593 deletions

View file

@ -29,7 +29,7 @@ FROM node:14.15-alpine
USER root
RUN apk add --update graphicsmagick tzdata tini su-exec
RUN apk add --update graphicsmagick tzdata tini su-exec git
WORKDIR /data

View file

@ -6,7 +6,7 @@ RUN if [ -z "$N8N_VERSION" ] ; then echo "The N8N_VERSION argument is missing!"
RUN \
apt-get update && \
apt-get -y install graphicsmagick gosu
apt-get -y install graphicsmagick gosu git
# Set a custom user to not have n8n run as root
USER root

View file

@ -6,7 +6,7 @@ RUN if [ -z "$N8N_VERSION" ] ; then echo "The N8N_VERSION argument is missing!"
RUN \
apt-get update && \
apt-get -y install graphicsmagick gosu
apt-get -y install graphicsmagick gosu git
RUN npm_config_user=root npm install -g full-icu n8n@${N8N_VERSION}

View file

@ -1,6 +1,6 @@
{
"name": "n8n",
"version": "0.122.1",
"version": "0.124.1",
"description": "n8n Workflow Automation Tool",
"license": "SEE LICENSE IN LICENSE.md",
"homepage": "https://n8n.io",
@ -106,10 +106,10 @@
"localtunnel": "^2.0.0",
"lodash.get": "^4.4.2",
"mysql2": "~2.2.0",
"n8n-core": "~0.73.0",
"n8n-editor-ui": "~0.92.0",
"n8n-nodes-base": "~0.119.1",
"n8n-workflow": "~0.60.0",
"n8n-core": "~0.74.0",
"n8n-editor-ui": "~0.94.1",
"n8n-nodes-base": "~0.121.0",
"n8n-workflow": "~0.61.1",
"oauth-1.0a": "^2.2.6",
"open": "^7.0.0",
"pg": "^8.3.0",
@ -118,7 +118,8 @@
"sqlite3": "^5.0.1",
"sse-channel": "^3.1.1",
"tslib": "1.14.1",
"typeorm": "^0.2.30"
"typeorm": "^0.2.30",
"winston": "^3.3.3"
},
"jest": {
"transform": {

View file

@ -313,7 +313,6 @@ export class ActiveWorkflowRunner {
try {
await Db.collections.Webhook?.insert(webhook);
const webhookExists = await workflow.runWebhookMethod('checkExists', webhookData, NodeExecuteFunctions, mode, activation, false);
if (webhookExists !== true) {
// If webhook does not exist yet create it
@ -341,7 +340,7 @@ export class ActiveWorkflowRunner {
errorMessage = error.message;
}
throw new Error(errorMessage);
throw error;
}
}
// Save static data!

View file

@ -336,12 +336,45 @@ export interface IPackageVersions {
cli: string;
}
export interface IPushData {
data: IPushDataExecutionFinished | IPushDataNodeExecuteAfter | IPushDataNodeExecuteBefore | IPushDataTestWebhook | IPushDataConsoleMessage;
type: IPushDataType;
}
export type IPushDataType = IPushData['type'];
export type IPushDataType = 'executionFinished' | 'executionStarted' | 'nodeExecuteAfter' | 'nodeExecuteBefore' | 'sendConsoleMessage' | 'testWebhookDeleted' | 'testWebhookReceived';
export type IPushData =
| PushDataExecutionFinished
| PushDataExecutionStarted
| PushDataExecuteAfter
| PushDataExecuteBefore
| PushDataConsoleMessage
| PushDataTestWebhook;
type PushDataExecutionFinished = {
data: IPushDataExecutionFinished;
type: 'executionFinished';
};
type PushDataExecutionStarted = {
data: IPushDataExecutionStarted;
type: 'executionStarted';
};
type PushDataExecuteAfter = {
data: IPushDataNodeExecuteAfter;
type: 'nodeExecuteAfter';
};
type PushDataExecuteBefore = {
data: IPushDataNodeExecuteBefore;
type: 'nodeExecuteBefore';
};
type PushDataConsoleMessage = {
data: IPushDataConsoleMessage;
type: 'sendConsoleMessage';
};
type PushDataTestWebhook = {
data: IPushDataTestWebhook;
type: 'testWebhookDeleted' | 'testWebhookReceived';
};
export interface IPushDataExecutionFinished {
data: IRun;

View file

@ -93,6 +93,10 @@ export function sendErrorResponse(res: Response, error: ResponseError) {
message: 'Unknown error',
};
if (error.name === 'NodeApiError') {
Object.assign(response, error);
}
if (error.errorCode) {
response.code = error.errorCode;
}

View file

@ -673,10 +673,13 @@ class App {
await WorkflowHelpers.validateWorkflow(updateData);
await Db.collections.Workflow!.update(id, updateData).catch(WorkflowHelpers.throwDuplicateEntryError);
const tablePrefix = config.get('database.tablePrefix');
await TagHelpers.removeRelations(req.params.id, tablePrefix);
if (tags?.length) {
await TagHelpers.createRelations(req.params.id, tags, tablePrefix);
if (tags) {
const tablePrefix = config.get('database.tablePrefix');
await TagHelpers.removeRelations(req.params.id, tablePrefix);
if (tags.length) {
await TagHelpers.createRelations(req.params.id, tags, tablePrefix);
}
}
// We sadly get nothing back from "update". Neither if it updated a record

View file

@ -387,7 +387,12 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks {
}
// Leave log message before flatten as that operation increased memory usage a lot and the chance of a crash is highest here
Logger.debug(`Save execution data to database for execution ID ${this.executionId}`, { executionId: this.executionId, workflowId: this.workflowData.id });
Logger.debug(`Save execution data to database for execution ID ${this.executionId}`, {
executionId: this.executionId,
workflowId: this.workflowData.id,
finished: fullExecutionData.finished,
stoppedAt: fullExecutionData.stoppedAt,
});
const executionData = ResponseHelper.flattenExecutionData(fullExecutionData);
@ -404,6 +409,12 @@ function hookFunctionsSave(parentProcessMode?: string): IWorkflowExecuteHooks {
executeErrorWorkflow(this.workflowData, fullRunData, this.mode, this.executionId, this.retryOf);
}
} catch (error) {
Logger.error(`Failed saving execution data to DB on execution ID ${this.executionId}`, {
executionId: this.executionId,
workflowId: this.workflowData.id,
error,
});
if (!isManualMode) {
executeErrorWorkflow(this.workflowData, fullRunData, this.mode, undefined, this.retryOf);
}
@ -438,14 +449,8 @@ function hookFunctionsSaveWorker(): IWorkflowExecuteHooks {
}
}
// Check config to know if execution should be saved or not
let saveDataErrorExecution = config.get('executions.saveDataOnError') as string;
if (this.workflowData.settings !== undefined) {
saveDataErrorExecution = (this.workflowData.settings.saveDataErrorExecution as string) || saveDataErrorExecution;
}
const workflowDidSucceed = !fullRunData.data.resultData.error;
if (workflowDidSucceed === false && saveDataErrorExecution === 'none') {
if (workflowDidSucceed === false) {
executeErrorWorkflow(this.workflowData, fullRunData, this.mode, undefined, this.retryOf);
}
@ -473,7 +478,6 @@ function hookFunctionsSaveWorker(): IWorkflowExecuteHooks {
if (fullRunData.finished === true && this.retryOf !== undefined) {
// If the retry was successful save the reference it on the original execution
// await Db.collections.Execution!.save(executionData as IExecutionFlattedDb);
await Db.collections.Execution!.update(this.retryOf, { retrySuccessId: this.executionId });
}
} catch (error) {
@ -663,7 +667,7 @@ export async function executeWorkflow(workflowInfo: IExecuteWorkflowInfo, additi
}
export function sendMessageToUI(source: string, message: string) {
export function sendMessageToUI(source: string, message: any) { // tslint:disable-line:no-any
if (this.sessionId === undefined) {
return;
}

View file

@ -137,7 +137,7 @@ export class WorkflowRunnerProcess {
const additionalData = await WorkflowExecuteAdditionalData.getBase(this.data.credentials, undefined, workflowTimeout <= 0 ? undefined : Date.now() + workflowTimeout * 1000);
additionalData.hooks = this.getProcessForwardHooks();
additionalData.sendMessageToUI = async (source: string, message: string) => {
additionalData.sendMessageToUI = async (source: string, message: any) => { // tslint:disable-line:no-any
if (workflowRunner.data!.executionMode !== 'manual') {
return;
}

View file

@ -13,27 +13,27 @@ export class UniqueWorkflowNames1620826335440 implements MigrationInterface {
`);
for (const { name } of workflowNames) {
const duplicates = await queryRunner.query(`
const [duplicatesQuery, parameters] = queryRunner.connection.driver.escapeQueryWithParameters(`
SELECT id, name
FROM ${tablePrefix}workflow_entity
WHERE name = '${name}'
WHERE name = :name
ORDER BY createdAt ASC
`);
`, { name }, {});
const duplicates = await queryRunner.query(duplicatesQuery, parameters);
if (duplicates.length > 1) {
await Promise.all(duplicates.map(({ id, name }: { id: number; name: string; }, index: number) => {
if (index === 0) return Promise.resolve();
return queryRunner.query(`
const [updateQuery, updateParams] = queryRunner.connection.driver.escapeQueryWithParameters(`
UPDATE ${tablePrefix}workflow_entity
SET name = '${name} ${index + 1}'
SET name = :name
WHERE id = '${id}'
`);
`, { name: `${name} ${index + 1}`}, {});
return queryRunner.query(updateQuery, updateParams);
}));
}
}
await queryRunner.query('ALTER TABLE `' + tablePrefix + 'workflow_entity` ADD UNIQUE INDEX `IDX_' + tablePrefix + '943d8f922be094eb507cb9a7f9` (`name`)');

View file

@ -12,34 +12,33 @@ export class UniqueWorkflowNames1620824779533 implements MigrationInterface {
tablePrefix = schema + '.' + tablePrefix;
}
const workflowNames = await queryRunner.query(`
SELECT name
FROM ${tablePrefix}workflow_entity
`);
for (const { name } of workflowNames) {
const duplicates = await queryRunner.query(`
const [duplicatesQuery, parameters] = queryRunner.connection.driver.escapeQueryWithParameters(`
SELECT id, name
FROM ${tablePrefix}workflow_entity
WHERE name = '${name}'
WHERE name = :name
ORDER BY "createdAt" ASC
`);
`, { name }, {});
const duplicates = await queryRunner.query(duplicatesQuery, parameters);
if (duplicates.length > 1) {
await Promise.all(duplicates.map(({ id, name }: { id: number; name: string; }, index: number) => {
if (index === 0) return Promise.resolve();
return queryRunner.query(`
const [updateQuery, updateParams] = queryRunner.connection.driver.escapeQueryWithParameters(`
UPDATE ${tablePrefix}workflow_entity
SET name = '${name} ${index + 1}'
SET name = :name
WHERE id = '${id}'
`);
`, { name: `${name} ${index + 1}`}, {});
return queryRunner.query(updateQuery, updateParams);
}));
}
}
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_${tablePrefixPure}a252c527c4c89237221fe2c0ab" ON ${tablePrefix}workflow_entity ("name") `);

View file

@ -13,27 +13,27 @@ export class UniqueWorkflowNames1620821879465 implements MigrationInterface {
`);
for (const { name } of workflowNames) {
const duplicates = await queryRunner.query(`
const [duplicatesQuery, parameters] = queryRunner.connection.driver.escapeQueryWithParameters(`
SELECT id, name
FROM "${tablePrefix}workflow_entity"
WHERE name = "${name}"
WHERE name = :name
ORDER BY createdAt ASC
`);
`, { name }, {});
const duplicates = await queryRunner.query(duplicatesQuery, parameters);
if (duplicates.length > 1) {
await Promise.all(duplicates.map(({ id, name }: { id: number; name: string; }, index: number) => {
if (index === 0) return Promise.resolve();
return queryRunner.query(`
const [updateQuery, updateParams] = queryRunner.connection.driver.escapeQueryWithParameters(`
UPDATE "${tablePrefix}workflow_entity"
SET name = "${name} ${index + 1}"
SET name = :name
WHERE id = '${id}'
`);
`, { name: `${name} ${index + 1}`}, {});
return queryRunner.query(updateQuery, updateParams);
}));
}
}
await queryRunner.query(`CREATE UNIQUE INDEX "IDX_${tablePrefix}943d8f922be094eb507cb9a7f9" ON "${tablePrefix}workflow_entity" ("name") `);

View file

@ -1,6 +1,6 @@
{
"name": "n8n-core",
"version": "0.73.0",
"version": "0.74.0",
"description": "Core functionality of n8n",
"license": "SEE LICENSE IN LICENSE.md",
"homepage": "https://n8n.io",
@ -47,7 +47,7 @@
"file-type": "^14.6.2",
"lodash.get": "^4.4.2",
"mime-types": "^2.1.27",
"n8n-workflow": "~0.60.0",
"n8n-workflow": "~0.61.0",
"oauth-1.0a": "^2.2.6",
"p-cancelable": "^2.0.0",
"request": "^2.88.2",

View file

@ -749,7 +749,7 @@ export function getExecuteFunctions(workflow: Workflow, runExecutionData: IRunEx
return workflow.getStaticData(type, node);
},
prepareOutputData: NodeHelpers.prepareOutputData,
sendMessageToUI(message: string): void {
sendMessageToUI(message: any): void { // tslint:disable-line:no-any
if (mode !== 'manual') {
return;
}

View file

@ -1,6 +1,6 @@
{
"name": "n8n-editor-ui",
"version": "0.92.0",
"version": "0.94.1",
"description": "Workflow Editor UI for n8n",
"license": "SEE LICENSE IN LICENSE.md",
"homepage": "https://n8n.io",
@ -67,7 +67,7 @@
"lodash.debounce": "^4.0.8",
"lodash.get": "^4.4.2",
"lodash.set": "^4.3.2",
"n8n-workflow": "~0.60.0",
"n8n-workflow": "~0.61.0",
"node-sass": "^4.12.0",
"normalize-wheel": "^1.0.1",
"prismjs": "^1.17.1",

View file

@ -355,12 +355,45 @@ export interface IExecutionDeleteFilter {
ids?: string[];
}
export interface IPushData {
data: IPushDataExecutionFinished | IPushDataNodeExecuteAfter | IPushDataNodeExecuteBefore | IPushDataTestWebhook | IPushDataConsoleMessage;
type: IPushDataType;
}
export type IPushDataType = IPushData['type'];
export type IPushDataType = 'executionFinished' | 'executionStarted' | 'nodeExecuteAfter' | 'nodeExecuteBefore' | 'sendConsoleMessage' | 'testWebhookDeleted' | 'testWebhookReceived';
export type IPushData =
| PushDataExecutionFinished
| PushDataExecutionStarted
| PushDataExecuteAfter
| PushDataExecuteBefore
| PushDataConsoleMessage
| PushDataTestWebhook;
type PushDataExecutionFinished = {
data: IPushDataExecutionFinished;
type: 'executionFinished';
};
type PushDataExecutionStarted = {
data: IPushDataExecutionStarted;
type: 'executionStarted';
};
type PushDataExecuteAfter = {
data: IPushDataNodeExecuteAfter;
type: 'nodeExecuteAfter';
};
type PushDataExecuteBefore = {
data: IPushDataNodeExecuteBefore;
type: 'nodeExecuteBefore';
};
type PushDataConsoleMessage = {
data: IPushDataConsoleMessage;
type: 'sendConsoleMessage';
};
type PushDataTestWebhook = {
data: IPushDataTestWebhook;
type: 'testWebhookDeleted' | 'testWebhookReceived';
};
export interface IPushDataExecutionStarted {
executionId: string;

View file

@ -68,9 +68,14 @@ export async function makeRestApiRequest(context: IRestApiContext, method: Metho
const errorResponseData = error.response.data;
if (errorResponseData !== undefined && errorResponseData.message !== undefined) {
if (errorResponseData.name === 'NodeApiError') {
errorResponseData.httpStatusCode = error.response.status;
throw errorResponseData;
}
throw new ResponseError(errorResponseData.message, {errorCode: errorResponseData.code, httpStatusCode: error.response.status, stack: errorResponseData.stack});
}
throw error;
}
}
}

View file

@ -37,10 +37,11 @@
<span class="box-card__subtitle">Data below may contain sensitive information. Proceed with caution when sharing.</span>
</div>
<div>
<el-button class="copy-button" @click="copyCause" circle type="text" title="Copy to clipboard">
<el-button v-if="displayCause" class="copy-button" @click="copyCause" circle type="text" title="Copy to clipboard">
<font-awesome-icon icon="copy" />
</el-button>
<vue-json-pretty
v-if="displayCause"
:data="error.cause"
:deep="3"
:showLength="true"
@ -48,6 +49,9 @@
path="error"
class="json-data"
/>
<span v-else>
The exact cause can sadly not displayed right now as the returned data is too large.
</span>
</div>
</el-card>
</div>
@ -67,13 +71,14 @@
</template>
<script lang="ts">
import Vue from 'vue';
//@ts-ignore
import VueJsonPretty from 'vue-json-pretty';
import { copyPaste } from '@/components/mixins/copyPaste';
import { showMessage } from '@/components/mixins/showMessage';
import mixins from 'vue-typed-mixins';
import {
MAX_DISPLAY_DATA_SIZE,
} from '@/constants';
export default mixins(
copyPaste,
@ -86,6 +91,11 @@ export default mixins(
components: {
VueJsonPretty,
},
computed: {
displayCause(): boolean {
return JSON.stringify(this.error.cause).length < MAX_DISPLAY_DATA_SIZE;
},
},
methods: {
copyCause() {
this.copyToClipboard(JSON.stringify(this.error.cause));

View file

@ -73,9 +73,15 @@ export default mixins(
};
},
methods: {
valueChanged (value: string) {
valueChanged (value: string, forceUpdate = false) {
this.latestValue = value;
this.callDebounced('updateDisplayValue', 500);
if (forceUpdate === true) {
this.updateDisplayValue();
this.$emit('valueChanged', this.latestValue);
} else {
this.callDebounced('updateDisplayValue', 500);
}
},
updateDisplayValue () {

View file

@ -233,12 +233,14 @@ export default mixins(
this.update();
} else {
// If no position got found add it to end
let newValue = this.value;
if (newValue !== '=') {
newValue += ` `;
let newValue = this.getValue();
if (newValue === '=' || newValue === '=0') {
newValue = `{{${eventData.variable}}}\n`;
} else {
newValue += ` {{${eventData.variable}}}\n`;
}
newValue += `{{${eventData.variable}}}\n`;
this.$emit('change', newValue);
this.$emit('change', newValue, true);
if (!this.resolvedValue) {
Vue.nextTick(() => {
this.initValue();

View file

@ -431,7 +431,11 @@ export default mixins(
const importConfirm = await this.confirmMessage(`When you switch workflows your current workflow changes will be lost.`, 'Save your Changes?', 'warning', 'Yes, switch workflows and forget changes');
if (importConfirm === true) {
this.$store.commit('setStateDirty', false);
this.$router.push({ name: 'NodeViewNew' });
if (this.$router.currentRoute.name === 'NodeViewNew') {
this.$root.$emit('newWorkflow');
} else {
this.$router.push({ name: 'NodeViewNew' });
}
this.$showMessage({
title: 'Workflow created',
@ -440,7 +444,9 @@ export default mixins(
});
}
} else {
this.$router.push({ name: 'NodeViewNew' });
if (this.$router.currentRoute.name !== 'NodeViewNew') {
this.$router.push({ name: 'NodeViewNew' });
}
this.$showMessage({
title: 'Workflow created',

View file

@ -533,7 +533,7 @@ export default mixins(
// @ts-ignore
if (this.$refs.inputField.$el) {
// @ts-ignore
(this.$refs.inputField.$el.querySelector('input') as HTMLInputElement).focus();
(this.$refs.inputField.$el.querySelector(this.getStringInputType === 'textarea' ? 'textarea' : 'input') as HTMLInputElement).focus();
}
});
},

View file

@ -6,6 +6,7 @@
v-for="tag in tags"
:key="tag.id"
:class="{clickable: !tag.hidden}"
@click="(e) => onClick(e, tag)"
>
<el-tag
:title="tag.title"
@ -108,7 +109,9 @@ export default Vue.extend({
}
},
onClick(e: MouseEvent, tag: TagEl) {
e.stopPropagation();
if (this.clickable) {
e.stopPropagation();
}
// if tag is hidden or not displayed
if (!tag.hidden) {

View file

@ -32,7 +32,7 @@
<template slot-scope="scope">
<div :key="scope.row.id">
<span class="name">{{scope.row.name}}</span>
<TagsContainer class="hidden-sm-and-down" :tagIds="getIds(scope.row.tags)" :limit="3" @click="onTagClick" />
<TagsContainer class="hidden-sm-and-down" :tagIds="getIds(scope.row.tags)" :limit="3" />
</div>
</template>
</el-table-column>
@ -124,11 +124,6 @@ export default mixins(
updateTagsFilter(tags: string[]) {
this.filterTagIds = tags;
},
onTagClick(tagId: string) {
if (tagId !== 'count' && !this.filterTagIds.includes(tagId)) {
this.filterTagIds.push(tagId);
}
},
async openWorkflow (data: IWorkflowShortResponse, column: any) { // tslint:disable-line:no-any
if (column.label !== 'Active') {

View file

@ -163,7 +163,7 @@ export const pushConnection = mixins(
}
if (receivedData.type === 'sendConsoleMessage') {
const pushData = receivedData.data as IPushDataConsoleMessage;
const pushData = receivedData.data;
console.log(pushData.source, pushData.message); // eslint-disable-line no-console
return true;
}
@ -175,12 +175,12 @@ export const pushConnection = mixins(
return false;
}
if (['nodeExecuteAfter', 'nodeExecuteBefore'].includes(receivedData.type)) {
if (receivedData.type === 'nodeExecuteAfter' || receivedData.type === 'nodeExecuteBefore') {
if (this.$store.getters.isActionActive('workflowRunning') === false) {
// No workflow is running so ignore the messages
return false;
}
const pushData = receivedData.data as IPushDataNodeExecuteBefore;
const pushData = receivedData.data;
if (this.$store.getters.activeExecutionId !== pushData.executionId) {
// The data is not for the currently active execution or
// we do not have the execution id yet.
@ -193,7 +193,7 @@ export const pushConnection = mixins(
if (receivedData.type === 'executionFinished') {
// The workflow finished executing
const pushData = receivedData.data as IPushDataExecutionFinished;
const pushData = receivedData.data;
this.$store.commit('finishActiveExecution', pushData);
@ -279,7 +279,7 @@ export const pushConnection = mixins(
});
} else if (receivedData.type === 'executionStarted') {
const pushData = receivedData.data as IPushDataExecutionStarted;
const pushData = receivedData.data;
const executionData: IExecutionsCurrentSummaryExtended = {
id: pushData.executionId,
@ -294,15 +294,15 @@ export const pushConnection = mixins(
this.$store.commit('addActiveExecution', executionData);
} else if (receivedData.type === 'nodeExecuteAfter') {
// A node finished to execute. Add its data
const pushData = receivedData.data as IPushDataNodeExecuteAfter;
const pushData = receivedData.data;
this.$store.commit('addNodeExecutionData', pushData);
} else if (receivedData.type === 'nodeExecuteBefore') {
// A node started to be executed. Set it as executing.
const pushData = receivedData.data as IPushDataNodeExecuteBefore;
const pushData = receivedData.data;
this.$store.commit('setExecutingNode', pushData.nodeName);
} else if (receivedData.type === 'testWebhookDeleted') {
// A test-webhook got deleted
const pushData = receivedData.data as IPushDataTestWebhook;
const pushData = receivedData.data;
if (pushData.workflowId === this.$store.getters.workflowId) {
this.$store.commit('setExecutionWaitingForWebhook', false);
@ -310,7 +310,7 @@ export const pushConnection = mixins(
}
} else if (receivedData.type === 'testWebhookReceived') {
// A test-webhook did get called
const pushData = receivedData.data as IPushDataTestWebhook;
const pushData = receivedData.data;
if (pushData.workflowId === this.$store.getters.workflowId) {
this.$store.commit('setExecutionWaitingForWebhook', false);

View file

@ -1,16 +1,12 @@
import Vue from 'vue';
import { Notification } from 'element-ui';
import { ElNotificationOptions } from 'element-ui/types/notification';
import mixins from 'vue-typed-mixins';
import { externalHooks } from '@/components/mixins/externalHooks';
// export const showMessage = {
export const showMessage = mixins(externalHooks).extend({
methods: {
$showMessage (messageData: ElNotificationOptions) {
$showMessage(messageData: ElNotificationOptions) {
messageData.dangerouslyUseHTMLString = true;
if (messageData.position === undefined) {
messageData.position = 'bottom-right';
@ -18,14 +14,47 @@ export const showMessage = mixins(externalHooks).extend({
return Notification(messageData);
},
$showError (error: Error, title: string, message: string) {
$showError(error: Error, title: string, message: string) {
this.$showMessage({
title,
message: `${message}<br /><i>${error.message}</i>`,
message: `
${message}
<br>
<i>${error.message}</i>
${this.collapsableDetails(error)}`,
type: 'error',
duration: 0,
});
this.$externalHooks().run('showMessage.showError', { title, message, errorMessage: error.message });
this.$externalHooks().run('showMessage.showError', {
title,
message,
errorMessage: error.message,
});
},
// @ts-ignore
collapsableDetails({ description, node }: Error) {
if (!description) return '';
const errorDescription =
description.length > 500
? `${description.slice(0, 500)}...`
: description;
return `
<br>
<br>
<details>
<summary
style="color: #ff6d5a; font-weight: bold; cursor: pointer;"
>
Show Details
</summary>
<p>${node.name}: ${errorDescription}</p>
</details>
`;
},
},
});

View file

@ -495,10 +495,14 @@ export default mixins(
e.stopPropagation();
e.preventDefault();
this.$router.push({ name: 'NodeViewNew' });
if (this.$router.currentRoute.name === 'NodeViewNew') {
this.$root.$emit('newWorkflow');
} else {
this.$router.push({ name: 'NodeViewNew' });
}
this.$showMessage({
title: 'Created',
title: 'Workflow created',
message: 'A new workflow got created!',
type: 'success',
});
@ -2063,6 +2067,8 @@ export default mixins(
const resData = await this.importWorkflowData(data.data as IWorkflowDataUpdate);
});
this.$root.$on('newWorkflow', this.newWorkflow);
this.$root.$on('importWorkflowUrl', async (data: IDataObject) => {
const workflowData = await this.getWorkflowDataFromUrl(data.url as string);
if (workflowData !== undefined) {

View file

@ -1,6 +1,6 @@
{
"name": "n8n-node-dev",
"version": "0.13.0",
"version": "0.14.0",
"description": "CLI to simplify n8n credentials/node development",
"license": "SEE LICENSE IN LICENSE.md",
"homepage": "https://n8n.io",
@ -59,8 +59,8 @@
"change-case": "^4.1.1",
"copyfiles": "^2.1.1",
"inquirer": "^7.0.1",
"n8n-core": "~0.71.0",
"n8n-workflow": "~0.58.0",
"n8n-core": "~0.74.0",
"n8n-workflow": "~0.61.0",
"oauth-1.0a": "^2.2.6",
"replace-in-file": "^6.0.0",
"request": "^2.88.2",

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,17 +8,17 @@ export class ActiveCampaignApi implements ICredentialType {
name = 'activeCampaignApi';
displayName = 'ActiveCampaign API';
documentationUrl = 'activeCampaign';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API URL',
name: 'apiUrl',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,23 +1,23 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AcuitySchedulingApi implements ICredentialType {
name = 'acuitySchedulingApi';
displayName = 'Acuity Scheduling API';
documentationUrl = 'acuityScheduling';
properties = [
properties: INodeProperties[] = [
{
displayName: 'User ID',
name: 'userId',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -11,38 +11,38 @@ export class AcuitySchedulingOAuth2Api implements ICredentialType {
];
displayName = 'AcuityScheduling OAuth2 API';
documentationUrl = 'acuityScheduling';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://acuityscheduling.com/oauth2/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://acuityscheduling.com/oauth2/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'api-v1',
required: true,
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AffinityApi implements ICredentialType {
name = 'affinityApi';
displayName = 'Affinity API';
documentationUrl = 'affinity';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,29 +1,29 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AgileCrmApi implements ICredentialType {
name = 'agileCrmApi';
displayName = 'AgileCRM API';
documentationUrl = 'agileCrm';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Email',
name: 'email',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Subdomain',
name: 'subdomain',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'example',
description: 'If the domain is https://example.agilecrm.com "example" would have to be entered.',

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,11 +8,11 @@ export class AirtableApi implements ICredentialType {
name = 'airtableApi';
displayName = 'Airtable API';
documentationUrl = 'airtable';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,29 +8,29 @@ export class Amqp implements ICredentialType {
name = 'amqp';
displayName = 'AMQP';
documentationUrl = 'amqp';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Hostname',
name: 'hostname',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Port',
name: 'port',
type: 'number' as NodePropertyTypes,
type: 'number',
default: 5672,
},
{
displayName: 'User',
name: 'username',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Password',
name: 'password',
type: 'string' as NodePropertyTypes,
type: 'string',
typeOptions: {
password: true,
},
@ -39,7 +39,7 @@ export class Amqp implements ICredentialType {
{
displayName: 'Transport Type',
name: 'transportType',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Optional Transport Type to use.',
},

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class ApiTemplateIoApi implements ICredentialType {
name = 'apiTemplateIoApi';
displayName = 'APITemplate.io API';
documentationUrl = 'apiTemplateIo';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AsanaApi implements ICredentialType {
name = 'asanaApi';
displayName = 'Asana API';
documentationUrl = 'asana';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AsanaOAuth2Api implements ICredentialType {
@ -10,37 +10,37 @@ export class AsanaOAuth2Api implements ICredentialType {
];
displayName = 'Asana OAuth2 API';
documentationUrl = 'asana';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://app.asana.com/-/oauth_authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://app.asana.com/-/oauth_token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
description: 'Resource to consume.',
},

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AutomizyApi implements ICredentialType {
name = 'automizyApi';
displayName = 'Automizy API';
documentationUrl = 'automizy';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Token',
name: 'apiToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class AutopilotApi implements ICredentialType {
name = 'autopilotApi';
displayName = 'Autopilot API';
documentationUrl = 'autopilot';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,23 +8,23 @@ export class Aws implements ICredentialType {
name = 'aws';
displayName = 'AWS';
documentationUrl = 'aws';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Region',
name: 'region',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'us-east-1',
},
{
displayName: 'Access Key Id',
name: 'accessKeyId',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Secret Access Key',
name: 'secretAccessKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
typeOptions: {
password: true,
@ -33,14 +33,14 @@ export class Aws implements ICredentialType {
{
displayName: 'Custom Endpoints',
name: 'customEndpoints',
type: 'boolean' as NodePropertyTypes,
type: 'boolean',
default: false,
},
{
displayName: 'Rekognition Endpoint',
name: 'rekognitionEndpoint',
description: 'If you use Amazon VPC to host n8n, you can establish a connection between your VPC and Rekognition using a VPC endpoint. Leave blank to use the default endpoint.',
type: 'string' as NodePropertyTypes,
type: 'string',
displayOptions: {
show: {
customEndpoints: [
@ -55,7 +55,7 @@ export class Aws implements ICredentialType {
displayName: 'Lambda Endpoint',
name: 'lambdaEndpoint',
description: 'If you use Amazon VPC to host n8n, you can establish a connection between your VPC and Lambda using a VPC endpoint. Leave blank to use the default endpoint.',
type: 'string' as NodePropertyTypes,
type: 'string',
displayOptions: {
show: {
customEndpoints: [
@ -70,7 +70,7 @@ export class Aws implements ICredentialType {
displayName: 'SNS Endpoint',
name: 'snsEndpoint',
description: 'If you use Amazon VPC to host n8n, you can establish a connection between your VPC and SNS using a VPC endpoint. Leave blank to use the default endpoint.',
type: 'string' as NodePropertyTypes,
type: 'string',
displayOptions: {
show: {
customEndpoints: [
@ -85,7 +85,7 @@ export class Aws implements ICredentialType {
displayName: 'SES Endpoint',
name: 'sesEndpoint',
description: 'If you use Amazon VPC to host n8n, you can establish a connection between your VPC and SES using a VPC endpoint. Leave blank to use the default endpoint.',
type: 'string' as NodePropertyTypes,
type: 'string',
displayOptions: {
show: {
customEndpoints: [
@ -100,7 +100,7 @@ export class Aws implements ICredentialType {
displayName: 'SQS Endpoint',
name: 'sqsEndpoint',
description: 'If you use Amazon VPC to host n8n, you can establish a connection between your VPC and SQS using a VPC endpoint. Leave blank to use the default endpoint.',
type: 'string' as NodePropertyTypes,
type: 'string',
displayOptions: {
show: {
customEndpoints: [
@ -115,7 +115,7 @@ export class Aws implements ICredentialType {
displayName: 'S3 Endpoint',
name: 's3Endpoint',
description: 'If you use Amazon VPC to host n8n, you can establish a connection between your VPC and S3 using a VPC endpoint. Leave blank to use the default endpoint.',
type: 'string' as NodePropertyTypes,
type: 'string',
displayOptions: {
show: {
customEndpoints: [

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BannerbearApi implements ICredentialType {
name = 'bannerbearApi';
displayName = 'Bannerbear API';
documentationUrl = 'bannerbear';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Project API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,22 +1,22 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BeeminderApi implements ICredentialType {
name = 'beeminderApi';
displayName = 'Beeminder API';
properties = [
properties: INodeProperties[] = [
{
displayName: 'User',
name: 'user',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Auth Token',
name: 'authToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,23 +1,23 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BitbucketApi implements ICredentialType {
name = 'bitbucketApi';
displayName = 'Bitbucket API';
documentationUrl = 'bitbucket';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Username',
name: 'username',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'App Password',
name: 'appPassword',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BitlyApi implements ICredentialType {
name = 'bitlyApi';
displayName = 'Bitly API';
documentationUrl = 'bitly';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -11,32 +11,32 @@ export class BitlyOAuth2Api implements ICredentialType {
extends = [
'oAuth2Api',
];
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://bitly.com/oauth/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api-ssl.bitly.com/oauth/access_token',
required: true,
},
{
displayName: 'Client ID',
name: 'clientId',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
required: true,
},
{
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string' as NodePropertyTypes,
type: 'string',
typeOptions: {
password: true,
},
@ -46,13 +46,13 @@ export class BitlyOAuth2Api implements ICredentialType {
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
description: 'For some services additional query parameters have to be set which can be defined here.',
placeholder: '',
@ -60,7 +60,7 @@ export class BitlyOAuth2Api implements ICredentialType {
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
description: 'Resource to consume.',
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
// https://bitwarden.com/help/article/public-api/#authentication
@ -9,23 +9,23 @@ export class BitwardenApi implements ICredentialType {
name = 'bitwardenApi';
displayName = 'Bitwarden API';
documentationUrl = 'bitwarden';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Client ID',
name: 'clientId',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Client Secret',
name: 'clientSecret',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Environment',
name: 'environment',
type: 'options' as NodePropertyTypes,
type: 'options',
default: 'cloudHosted',
options: [
{
@ -41,7 +41,7 @@ export class BitwardenApi implements ICredentialType {
{
displayName: 'Self-hosted domain',
name: 'domain',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'https://www.mydomain.com',
displayOptions: {

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BoxOAuth2Api implements ICredentialType {
@ -10,37 +10,37 @@ export class BoxOAuth2Api implements ICredentialType {
];
displayName = 'Box OAuth2 API';
documentationUrl = 'box';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://account.box.com/api/oauth2/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api.box.com/oauth2/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BrandfetchApi implements ICredentialType {
name = 'brandfetchApi';
displayName = 'Brandfetch API';
documentationUrl = 'brandfetch';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,29 +1,29 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class BubbleApi implements ICredentialType {
name = 'bubbleApi';
displayName = 'Bubble API';
documentationUrl = 'bubble';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Token',
name: 'apiToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'App Name',
name: 'appName',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Environment',
name: 'environment',
type: 'options' as NodePropertyTypes,
type: 'options',
default: 'live',
options: [
{
@ -39,7 +39,7 @@ export class BubbleApi implements ICredentialType {
{
displayName: 'Hosting',
name: 'hosting',
type: 'options' as NodePropertyTypes,
type: 'options',
default: 'bubbleHosted',
options: [
{
@ -55,7 +55,7 @@ export class BubbleApi implements ICredentialType {
{
displayName: 'Domain',
name: 'domain',
type: 'string' as NodePropertyTypes,
type: 'string',
placeholder: 'mydomain.com',
default: '',
displayOptions: {

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class CalendlyApi implements ICredentialType {
name = 'calendlyApi';
displayName = 'Calendly API';
documentationUrl = 'calendly';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,17 +8,17 @@ export class ChargebeeApi implements ICredentialType {
name = 'chargebeeApi';
displayName = 'Chargebee API';
documentationUrl = 'chargebee';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Account Name',
name: 'accountName',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Api Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class CircleCiApi implements ICredentialType {
name = 'circleCiApi';
displayName = 'CircleCI API';
documentationUrl = 'circleCi';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Personal API Token',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class ClearbitApi implements ICredentialType {
name = 'clearbitApi';
displayName = 'Clearbit API';
documentationUrl = 'clearbit';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class ClickUpApi implements ICredentialType {
name = 'clickUpApi';
displayName = 'ClickUp API';
documentationUrl = 'clickUp';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class ClickUpOAuth2Api implements ICredentialType {
@ -10,37 +10,37 @@ export class ClickUpOAuth2Api implements ICredentialType {
];
displayName = 'ClickUp OAuth2 API';
documentationUrl = 'clickUp';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://app.clickup.com/api',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api.clickup.com/api/v2/oauth/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
description: 'Resource to consume.',
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,14 +8,14 @@ export class ClockifyApi implements ICredentialType {
name = 'clockifyApi';
displayName = 'Clockify API';
documentationUrl = 'clockify';
properties = [
properties: INodeProperties[] = [
// The credentials to get from user and save encrypted.
// Properties can be defined exactly in the same way
// as node properties.
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,24 +1,24 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class CockpitApi implements ICredentialType {
name = 'cockpitApi';
displayName = 'Cockpit API';
documentationUrl = 'cockpit';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Cockpit URL',
name: 'url',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'https://example.com',
},
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class CodaApi implements ICredentialType {
name = 'codaApi';
displayName = 'Coda API';
documentationUrl = 'coda';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
//https://www.contentful.com/developers/docs/references/authentication/
@ -8,11 +8,11 @@ export class ContentfulApi implements ICredentialType {
name = 'contentfulApi';
displayName = 'Contenful API';
documentationUrl = 'contentful';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Space ID',
name: 'spaceId',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
required: true,
description: 'The id for the Contentful space.',
@ -20,14 +20,14 @@ export class ContentfulApi implements ICredentialType {
{
displayName: 'Content Delivery API Access token',
name: 'ContentDeliveryaccessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Access token that has access to the space. Can be left empty if only Delivery API should be used.',
},
{
displayName: 'Content Preview API Access token',
name: 'ContentPreviewaccessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Access token that has access to the space. Can be left empty if only Preview API should be used.',
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,11 +8,11 @@ export class ConvertKitApi implements ICredentialType {
name = 'convertKitApi';
displayName = 'ConvertKit API';
documentationUrl = 'convertKit';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Secret',
name: 'apiSecret',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
typeOptions: {
password: true,

View file

@ -1,25 +1,25 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class CopperApi implements ICredentialType {
name = 'copperApi';
displayName = 'Copper API';
documentationUrl = 'copper';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
required: true,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Email',
name: 'email',
required: true,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,17 +8,17 @@ export class CortexApi implements ICredentialType {
name = 'cortexApi';
displayName = 'Cortex API';
documentationUrl = 'cortex';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'cortexApiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Cortex Instance',
name: 'host',
type: 'string' as NodePropertyTypes,
type: 'string',
description: 'The URL of the Cortex instance',
default: '',
placeholder: 'https://localhost:9001',

View file

@ -1,32 +1,32 @@
import { ICredentialType, NodePropertyTypes } from 'n8n-workflow';
import { ICredentialType, INodeProperties } from 'n8n-workflow';
export class CrateDb implements ICredentialType {
name = 'crateDb';
displayName = 'CrateDB';
documentationUrl = 'crateDb';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Host',
name: 'host',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'localhost',
},
{
displayName: 'Database',
name: 'database',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'doc',
},
{
displayName: 'User',
name: 'user',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'crate',
},
{
displayName: 'Password',
name: 'password',
type: 'string' as NodePropertyTypes,
type: 'string',
typeOptions: {
password: true,
},
@ -35,7 +35,7 @@ export class CrateDb implements ICredentialType {
{
displayName: 'SSL',
name: 'ssl',
type: 'options' as NodePropertyTypes,
type: 'options',
options: [
{
name: 'disable',
@ -63,7 +63,7 @@ export class CrateDb implements ICredentialType {
{
displayName: 'Port',
name: 'port',
type: 'number' as NodePropertyTypes,
type: 'number',
default: 5432,
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,11 +8,11 @@ export class CustomerIoApi implements ICredentialType {
name = 'customerIoApi';
displayName = 'Customer.io API';
documentationUrl = 'customerIo';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Tracking API Key',
name: 'trackingApiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Required for tracking API.',
required: true,
@ -20,14 +20,14 @@ export class CustomerIoApi implements ICredentialType {
{
displayName: 'Tracking Site ID',
name: 'trackingSiteId',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Required for tracking API.',
},
{
displayName: 'App API Key',
name: 'appApiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Required for App API.',
},

View file

@ -1,20 +1,20 @@
import { ICredentialType, NodePropertyTypes } from 'n8n-workflow';
import { ICredentialType, INodeProperties } from 'n8n-workflow';
export class DeepLApi implements ICredentialType {
name = 'deepLApi';
displayName = 'DeepL API';
documentationUrl = 'deepL';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Plan',
name: 'apiPlan',
type: 'options' as NodePropertyTypes,
type: 'options',
options: [
{
name: 'Pro Plan',

View file

@ -1,23 +1,23 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class DemioApi implements ICredentialType {
name = 'demioApi';
displayName = 'Demio API';
documentationUrl = 'demio';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Secret',
name: 'apiSecret',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,33 +1,33 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class DiscourseApi implements ICredentialType {
name = 'discourseApi';
displayName = 'Discourse API';
documentationUrl = 'discourse';
properties = [
properties: INodeProperties[] = [
{
displayName: 'URL',
name: 'url',
required: true,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Key',
name: 'apiKey',
required: true,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Username',
name: 'username',
required: true,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];
}
}

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class DisqusApi implements ICredentialType {
name = 'disqusApi';
displayName = 'Disqus API';
documentationUrl = 'disqus';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Visit your account details page, and grab the Access Token. See <a href="https://disqus.com/api/docs/auth/">Disqus auth</a>.',
},

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class DriftApi implements ICredentialType {
name = 'driftApi';
displayName = 'Drift API';
documentationUrl = 'drift';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Personal Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Visit your account details page, and grab the Access Token. See <a href="https://devdocs.drift.com/docs/quick-start">Drift auth</a>.',
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -11,37 +11,37 @@ export class DriftOAuth2Api implements ICredentialType {
];
displayName = 'Drift OAuth2 API';
documentationUrl = 'drift';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://dev.drift.com/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://driftapi.com/oauth2/token',
required: true,
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
},
];

View file

@ -1,23 +1,23 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class DropboxApi implements ICredentialType {
name = 'dropboxApi';
displayName = 'Dropbox API';
documentationUrl = 'dropbox';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'APP Access Type',
name: 'accessType',
type: 'options' as NodePropertyTypes,
type: 'options',
options: [
{
name: 'App Folder',

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
const scopes = [
@ -17,43 +17,43 @@ export class DropboxOAuth2Api implements ICredentialType {
];
displayName = 'Dropbox OAuth2 API';
documentationUrl = 'dropbox';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://www.dropbox.com/oauth2/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api.dropboxapi.com/oauth2/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: scopes.join(' '),
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'token_access_type=offline&force_reapprove=true',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'header',
},
{
displayName: 'APP Access Type',
name: 'accessType',
type: 'options' as NodePropertyTypes,
type: 'options',
options: [
{
name: 'App Folder',

View file

@ -1,29 +1,29 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class ERPNextApi implements ICredentialType {
name = 'erpNextApi';
displayName = 'ERPNext API';
documentationUrl = 'erpnext';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'API Secret',
name: 'apiSecret',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Environment',
name: 'environment',
type: 'options' as NodePropertyTypes,
type: 'options',
default: 'cloudHosted',
options: [
{
@ -39,7 +39,7 @@ export class ERPNextApi implements ICredentialType {
{
displayName: 'Subdomain',
name: 'subdomain',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'n8n',
description: 'Subdomain of cloud-hosted ERPNext instance. For example, "n8n" is the subdomain in: <code>https://n8n.erpnext.com</code>',
@ -54,7 +54,7 @@ export class ERPNextApi implements ICredentialType {
{
displayName: 'Domain',
name: 'domain',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'https://www.mydomain.com',
description: 'Fully qualified domain name of self-hosted ERPNext instance.',

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,14 +8,14 @@ export class EgoiApi implements ICredentialType {
name = 'egoiApi';
displayName = 'E-goi API';
documentationUrl = 'egoi';
properties = [
properties: INodeProperties[] = [
// The credentials to get from user and save encrypted.
// Properties can be defined exactly in the same way
// as node properties.
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class EmeliaApi implements ICredentialType {
name = 'emeliaApi';
displayName = 'Emelia API';
documentationUrl = 'emelia';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,17 +1,17 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class EventbriteApi implements ICredentialType {
name = 'eventbriteApi';
displayName = 'Eventbrite API';
documentationUrl = 'eventbrite';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Private Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -11,37 +11,37 @@ export class EventbriteOAuth2Api implements ICredentialType {
];
displayName = 'Eventbrite OAuth2 API';
documentationUrl = 'eventbrite';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://www.eventbrite.com/oauth/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://www.eventbrite.com/oauth/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,11 +8,11 @@ export class FacebookGraphApi implements ICredentialType {
name = 'facebookGraphApi';
displayName = 'Facebook Graph API';
documentationUrl = 'facebookGraph';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class FacebookGraphAppApi implements ICredentialType {
@ -10,11 +10,11 @@ export class FacebookGraphAppApi implements ICredentialType {
extends = [
'facebookGraphApi',
];
properties = [
properties: INodeProperties[] = [
{
displayName: 'App Secret',
name: 'appSecret',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: '(Optional) When the app secret is set the node will verify this signature to validate the integrity and origin of the payload.',
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,29 +8,29 @@ export class FileMaker implements ICredentialType {
name = 'fileMaker';
displayName = 'FileMaker API';
documentationUrl = 'fileMaker';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Host',
name: 'host',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Database',
name: 'db',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Login',
name: 'login',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Password',
name: 'password',
type: 'string' as NodePropertyTypes,
type: 'string',
typeOptions: {
password: true,
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,17 +8,17 @@ export class FlowApi implements ICredentialType {
name = 'flowApi';
displayName = 'Flow API';
documentationUrl = 'flow';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Organization ID',
name: 'organizationId',
type: 'number' as NodePropertyTypes,
type: 'number',
default: 0,
},
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,17 +8,17 @@ export class FreshdeskApi implements ICredentialType {
name = 'freshdeskApi';
displayName = 'Freshdesk API';
documentationUrl = 'freshdesk';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Domain',
name: 'domain',
type: 'string' as NodePropertyTypes,
type: 'string',
placeholder: 'company',
description: 'If the URL you get displayed on Freshdesk is "https://company.freshdesk.com" enter "company"',
default: '',

View file

@ -1,18 +1,18 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class Ftp implements ICredentialType {
name = 'ftp';
displayName = 'FTP';
documentationUrl = 'ftp';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Host',
name: 'host',
required: true,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'localhost',
},
@ -20,19 +20,19 @@ export class Ftp implements ICredentialType {
displayName: 'Port',
name: 'port',
required: true,
type: 'number' as NodePropertyTypes,
type: 'number',
default: 21,
},
{
displayName: 'Username',
name: 'username',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Password',
name: 'password',
type: 'string' as NodePropertyTypes,
type: 'string',
typeOptions: {
password: true,
},

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
const scopes = [
@ -17,11 +17,11 @@ export class GSuiteAdminOAuth2Api implements ICredentialType {
];
displayName = 'G Suite Admin OAuth2 API';
documentationUrl = 'google';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: scopes.join(' '),
},
];

View file

@ -1,16 +1,16 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class GetResponseApi implements ICredentialType {
name = 'getResponseApi';
displayName = 'GetResponse API';
properties = [
properties: INodeProperties[] = [
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class GetResponseOAuth2Api implements ICredentialType {
@ -9,37 +9,37 @@ export class GetResponseOAuth2Api implements ICredentialType {
'oAuth2Api',
];
displayName = 'GetResponse OAuth2 API';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://app.getresponse.com/oauth2_authorize.html',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api.getresponse.com/v3/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'header',
description: 'Resource to consume.',
},

View file

@ -1,24 +1,24 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class GhostAdminApi implements ICredentialType {
name = 'ghostAdminApi';
displayName = 'Ghost Admin API';
documentationUrl = 'ghost';
properties = [
properties: INodeProperties[] = [
{
displayName: 'URL',
name: 'url',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'http://localhost:3001',
},
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,24 +1,24 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class GhostContentApi implements ICredentialType {
name = 'ghostContentApi';
displayName = 'Ghost Content API';
documentationUrl = 'ghost';
properties = [
properties: INodeProperties[] = [
{
displayName: 'URL',
name: 'url',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
placeholder: 'http://localhost:3001',
},
{
displayName: 'API Key',
name: 'apiKey',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -0,0 +1,28 @@
import {
ICredentialType,
INodeProperties,
} from 'n8n-workflow';
export class GitPassword implements ICredentialType {
name = 'gitPassword';
displayName = 'Git';
properties: INodeProperties[] = [
{
displayName: 'Username',
name: 'username',
type: 'string',
default: '',
description: 'The username to authenticate with.',
},
{
displayName: 'Password',
name: 'password',
type: 'string',
typeOptions: {
password: true,
},
default: '',
description: 'The password to use in combination with the user',
},
];
}

View file

@ -1,30 +1,30 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class GithubApi implements ICredentialType {
name = 'githubApi';
displayName = 'Github API';
documentationUrl = 'github';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Github Server',
name: 'server',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'https://api.github.com',
description: 'The server to connect to. Does only have to get changed if Github Enterprise gets used.',
},
{
displayName: 'User',
name: 'user',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -11,44 +11,44 @@ export class GithubOAuth2Api implements ICredentialType {
];
displayName = 'Github OAuth2 API';
documentationUrl = 'github';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Github Server',
name: 'server',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'https://api.github.com',
description: 'The server to connect to. Does only have to get changed if Github Enterprise gets used.',
},
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '={{$self["server"] === "https://api.github.com" ? "https://github.com" : $self["server"]}}/login/oauth/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '={{$self["server"] === "https://api.github.com" ? "https://github.com" : $self["server"]}}/login/oauth/access_token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'repo,admin:repo_hook,admin:org,admin:org_hook,gist,notifications,user,write:packages,read:packages,delete:packages,worfklow',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'header',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,17 +8,17 @@ export class GitlabApi implements ICredentialType {
name = 'gitlabApi';
displayName = 'Gitlab API';
documentationUrl = 'gitlab';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Gitlab Server',
name: 'server',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'https://gitlab.com',
},
{
displayName: 'Access Token',
name: 'accessToken',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -11,43 +11,43 @@ export class GitlabOAuth2Api implements ICredentialType {
];
displayName = 'Gitlab OAuth2 API';
documentationUrl = 'gitlab';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Gitlab Server',
name: 'server',
type: 'string' as NodePropertyTypes,
type: 'string',
default: 'https://gitlab.com',
},
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '={{$self["server"]}}/oauth/authorize',
required: true,
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '={{$self["server"]}}/oauth/token',
required: true,
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'api',
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'body',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
const scopes = [
@ -20,11 +20,11 @@ export class GmailOAuth2Api implements ICredentialType {
];
displayName = 'Gmail OAuth2 API';
documentationUrl = 'google';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: scopes.join(' '),
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
export class GoToWebinarOAuth2Api implements ICredentialType {
@ -10,35 +10,35 @@ export class GoToWebinarOAuth2Api implements ICredentialType {
];
displayName = 'GoToWebinar OAuth2 API';
documentationUrl = 'goToWebinar';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Authorization URL',
name: 'authUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api.getgo.com/oauth/v2/authorize',
},
{
displayName: 'Access Token URL',
name: 'accessTokenUrl',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'https://api.getgo.com/oauth/v2/token',
},
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '', // set when creating the OAuth client
},
{
displayName: 'Auth URI Query Parameters',
name: 'authQueryParameters',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: '',
},
{
displayName: 'Authentication',
name: 'authentication',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: 'header',
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
const scopes = [
@ -16,11 +16,11 @@ export class GoogleAnalyticsOAuth2Api implements ICredentialType {
];
displayName = 'Google Analytics OAuth2 API';
documentationUrl = 'google';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: scopes.join(' '),
},
];

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
@ -8,11 +8,11 @@ export class GoogleApi implements ICredentialType {
name = 'googleApi';
displayName = 'Google API';
documentationUrl = 'google';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Service Account Email',
name: 'email',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'The Google Service account similar to user-808@project.iam.gserviceaccount.com.',
@ -20,21 +20,20 @@ export class GoogleApi implements ICredentialType {
{
displayName: 'Private Key',
name: 'privateKey',
lines: 5,
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
description: 'Use the multiline editor. Make sure there are exactly 3 lines.<br />-----BEGIN PRIVATE KEY-----<br />KEY IN A SINGLE LINE<br />-----END PRIVATE KEY-----',
},
{
displayName: ' Impersonate a User',
name: 'inpersonate',
type: 'boolean' as NodePropertyTypes,
type: 'boolean',
default: false,
},
{
displayName: 'Email',
name: 'delegatedEmail',
type: 'string' as NodePropertyTypes,
type: 'string',
default: '',
displayOptions: {
show: {

View file

@ -1,6 +1,6 @@
import {
ICredentialType,
NodePropertyTypes,
INodeProperties,
} from 'n8n-workflow';
const scopes = [
@ -14,11 +14,11 @@ export class GoogleBigQueryOAuth2Api implements ICredentialType {
];
displayName = 'Google BigQuery OAuth2 API';
documentationUrl = 'google';
properties = [
properties: INodeProperties[] = [
{
displayName: 'Scope',
name: 'scope',
type: 'hidden' as NodePropertyTypes,
type: 'hidden',
default: scopes.join(' '),
},
];

Some files were not shown because too many files have changed in this diff Show more