mirror of
https://github.com/Abdulazizzn/n8n-enterprise-unlocked.git
synced 2025-12-19 19:11:13 +00:00
✨ Nodes as JSON and authentication redesign (#2401)
* ✨ change FE to handle new object type * 🚸 improve UX of handling invalid credentials * 🚧 WIP * 🎨 fix typescript issues * 🐘 add migrations for all supported dbs * ✏️ add description to migrations * ⚡ add credential update on import * ⚡ resolve after merge issues * 👕 fix lint issues * ⚡ check credentials on workflow create/update * update interface * 👕 fix ts issues * ⚡ adaption to new credentials UI * 🐛 intialize cache on BE for credentials check * 🐛 fix undefined oldCredentials * 🐛 fix deleting credential * 🐛 fix check for undefined keys * 🐛 fix disabling edit in execution * 🎨 just show credential name on execution view * ✏️ remove TODO * ⚡ implement review suggestions * ⚡ add cache to getCredentialsByType * ⏪ use getter instead of cache * ✏️ fix variable name typo * 🐘 include waiting nodes to migrations * 🐛 fix reverting migrations command * ⚡ update typeorm command * ✨ create db:revert command * 👕 fix lint error * ✨ Add optional authenticate method to credentials * ⚡ Simplify code and add authentication support to MattermostApi * 👕 Fix lint issue * ⚡ Add support to own-mode * 👕 Fix lint issue * ✨ Add support for predefined auth types bearer and headerAuth * ⚡ Make sure that DateTime Node always returns strings * ⚡ Add support for moment types to If Node * ⚡ Make it possible for HTTP Request Node to use all credential types * ✨ Add basicAuth support * Add a new dropcontact node * ✨ First basic implementation of mainly JSON based nodes * ✨ Add fixedCollection support, added value parameter and expression support for value and property * Improvements to #2389 * ⚡ Add credentials verification * ⚡ Small improvement * ⚡ set default time to 45 seconds * ✨ Add support for preSend and postReceive methods * ➕ Add lodash merge and set depedency to workflow * 👕 Fix lint issue * ⚡ Improvements * ⚡ Improvements * ⚡ Improvements * ⚡ Improvements * ⚡ Improvements * 🐛 Set siren and language correctly * ⚡ Add support for requestDefaults * ⚡ Add support for baseURL to httpRequest * ⚡ Move baseURL to correct location * ✨ Add support for options loading * 🐛 Fix error with fullAccess nodes * ✨ Add credential test functionality * 🐛 Fix issue with OAuth autentication and lint issue * ⚡ Fix build issue * 🐛 Fix issue that url got always overwritten to empty * ✨ Add pagination support * ⚡ Code fix required after merge * ⚡ Remove not needed imports * ⚡ Fix credential test * ✨ Add expression support for request properties and $self support on properties * ⚡ Rename $self to $value * 👕 Fix lint issue * ⚡ Add example how to send data in path * ✨ Make it possible to not sent in dot notation * ✨ Add support for postReceive:rootProperty * ⚡ Fix typo * ✨ Add support for postReceive:set * ⚡ Some fixes * ⚡ Small improvement * ;zap: Separate RoutingNode code * ⚡ Simplify code and fix bug * ⚡ Remove unused code * ✨ Make it possible to define "request" and "requestProperty" on options * 👕 Fix lint issue * ⚡ Change $credentials variables name * ✨ Enable expressions and access to credentials in requestDefaults * ⚡ Make parameter option loading use RoutingNode.makeRoutingRequest * ✨ Allow requestOperations overwrite on LoadOptions * ✨ Make it possible to access current node parameters in loadOptions * ⚡ Rename parameters variable to make future proof * ⚡ Make it possible to use offset-pagination with body * ✨ Add support for queryAuth * ⚡ Never return more items than requested * ✨ Make it possible to overwrite requestOperations on parameter and option level * 👕 Fix lint issue * ✨ Allow simplified auth also with regular nodes * ✨ Add support for receiving binary data * 🐛 Fix example node * ⚡ Rename property "name" to "displayName" in loadOptions * ⚡ Send data by default as "query" if nothing is set * ⚡ Rename $self to $parent * ⚡ Change to work with INodeExecutionData instead of IDataObject * ⚡ Improve binaryData handling * ⚡ Property design improvements * ⚡ Fix property name * 🚨 Add some tests * ⚡ Add also test for request * ⚡ Improve test and fix issues * ⚡ Improvements to loadOptions * ⚡ Normalize loadOptions with rest of code * ⚡ Add info text * ✨ Add support for $value in postReceive * 🚨 Add tests for RoutingNode.runNode * ⚡ Remove TODOs and make url property optional * ⚡ Fix bug and lint issue * 🐛 Fix bug that not the correct property got used * 🚨 Add tests for CredentialsHelper.authenticate * ⚡ Improve code and resolve expressions also everywhere for loadOptions and credential test requests * ✨ Make it possible to define multiple preSend and postReceive actions * ✨ Allow to define tests on credentials * ⚡ Remove test data * ⬆️ Update package-lock.json file * ⚡ Remove old not longer used code Co-authored-by: Ben Hesseldieck <b.hesseldieck@gmail.com> Co-authored-by: Mutasem <mutdmour@gmail.com> Co-authored-by: PaulineDropcontact <pauline@dropcontact.io> Co-authored-by: ricardo <ricardoespinoza105@gmail.com>
This commit is contained in:
@@ -12,8 +12,14 @@ import { WorkflowHooks } from './WorkflowHooks';
|
||||
import { WorkflowOperationError } from './WorkflowErrors';
|
||||
import { NodeApiError, NodeOperationError } from './NodeErrors';
|
||||
|
||||
export interface IAdditionalCredentialOptions {
|
||||
oauth2?: IOAuth2Options;
|
||||
credentialsDecrypted?: ICredentialsDecrypted;
|
||||
}
|
||||
|
||||
export type IAllExecuteFunctions =
|
||||
| IExecuteFunctions
|
||||
| IExecutePaginationFunctions
|
||||
| IExecuteSingleFunctions
|
||||
| IHookFunctions
|
||||
| ILoadOptionsFunctions
|
||||
@@ -128,6 +134,17 @@ export interface ICredentialsExpressionResolveValues {
|
||||
workflow: Workflow;
|
||||
}
|
||||
|
||||
// Simplified options of request library
|
||||
export interface IRequestOptionsSimplified {
|
||||
auth?: {
|
||||
username: string;
|
||||
password: string;
|
||||
};
|
||||
body: IDataObject;
|
||||
headers: IDataObject;
|
||||
qs: IDataObject;
|
||||
}
|
||||
|
||||
export abstract class ICredentialsHelper {
|
||||
encryptionKey: string;
|
||||
|
||||
@@ -135,6 +152,16 @@ export abstract class ICredentialsHelper {
|
||||
this.encryptionKey = encryptionKey;
|
||||
}
|
||||
|
||||
abstract getParentTypes(name: string): string[];
|
||||
|
||||
abstract authenticate(
|
||||
credentials: ICredentialDataDecryptedObject,
|
||||
typeName: string,
|
||||
requestOptions: IHttpRequestOptions | IRequestOptionsSimplified,
|
||||
workflow: Workflow,
|
||||
node: INode,
|
||||
): Promise<IHttpRequestOptions>;
|
||||
|
||||
abstract getCredentials(
|
||||
nodeCredentials: INodeCredentialsDetails,
|
||||
type: string,
|
||||
@@ -155,6 +182,80 @@ export abstract class ICredentialsHelper {
|
||||
): Promise<void>;
|
||||
}
|
||||
|
||||
export interface IAuthenticateBase {
|
||||
type: string;
|
||||
properties: {
|
||||
[key: string]: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IAuthenticateBasicAuth extends IAuthenticateBase {
|
||||
type: 'basicAuth';
|
||||
properties: {
|
||||
userPropertyName?: string;
|
||||
passwordPropertyName?: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IAuthenticateBearer extends IAuthenticateBase {
|
||||
type: 'bearer';
|
||||
properties: {
|
||||
tokenPropertyName?: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IAuthenticateHeaderAuth extends IAuthenticateBase {
|
||||
type: 'headerAuth';
|
||||
properties: {
|
||||
name: string;
|
||||
value: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IAuthenticateQueryAuth extends IAuthenticateBase {
|
||||
type: 'queryAuth';
|
||||
properties: {
|
||||
key: string;
|
||||
value: string;
|
||||
};
|
||||
}
|
||||
|
||||
export type IAuthenticate =
|
||||
| ((
|
||||
credentials: ICredentialDataDecryptedObject,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
) => Promise<IHttpRequestOptions>)
|
||||
| IAuthenticateBasicAuth
|
||||
| IAuthenticateBearer
|
||||
| IAuthenticateHeaderAuth
|
||||
| IAuthenticateQueryAuth;
|
||||
|
||||
export interface IAuthenticateRuleBase {
|
||||
type: string;
|
||||
properties: {
|
||||
[key: string]: string | number;
|
||||
};
|
||||
errorMessage?: string;
|
||||
}
|
||||
|
||||
export interface IAuthenticateRuleResponseCode extends IAuthenticateRuleBase {
|
||||
type: 'responseCode';
|
||||
properties: {
|
||||
value: number;
|
||||
message: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface ICredentialTestRequest {
|
||||
request: IHttpRequestOptions;
|
||||
rules?: IAuthenticateRuleResponseCode[];
|
||||
}
|
||||
|
||||
export interface ICredentialTestRequestData {
|
||||
nodeType?: INodeType;
|
||||
testRequest: ICredentialTestRequest;
|
||||
}
|
||||
|
||||
export interface ICredentialType {
|
||||
name: string;
|
||||
displayName: string;
|
||||
@@ -163,13 +264,13 @@ export interface ICredentialType {
|
||||
properties: INodeProperties[];
|
||||
documentationUrl?: string;
|
||||
__overwrittenProperties?: string[];
|
||||
authenticate?: IAuthenticate;
|
||||
test?: ICredentialTestRequest;
|
||||
}
|
||||
|
||||
export interface ICredentialTypes {
|
||||
credentialTypes?: {
|
||||
[key: string]: ICredentialType;
|
||||
};
|
||||
init(credentialTypes?: { [key: string]: ICredentialType }): Promise<void>;
|
||||
credentialTypes?: ICredentialTypeData;
|
||||
init(credentialTypes?: ICredentialTypeData): Promise<void>;
|
||||
getAll(): ICredentialType[];
|
||||
getByName(credentialType: string): ICredentialType;
|
||||
}
|
||||
@@ -301,10 +402,13 @@ export interface IExecuteContextData {
|
||||
[key: string]: IContextObject;
|
||||
}
|
||||
|
||||
export type IHttpRequestMethods = 'DELETE' | 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT';
|
||||
|
||||
export interface IHttpRequestOptions {
|
||||
url: string;
|
||||
baseURL?: string;
|
||||
headers?: IDataObject;
|
||||
method?: 'DELETE' | 'GET' | 'HEAD' | 'PATCH' | 'POST' | 'PUT';
|
||||
method?: IHttpRequestMethods;
|
||||
body?: FormData | GenericValue | GenericValue[] | Buffer | URLSearchParams;
|
||||
qs?: IDataObject;
|
||||
arrayFormat?: 'indices' | 'brackets' | 'repeat' | 'comma';
|
||||
@@ -338,6 +442,33 @@ export interface IN8nHttpFullResponse {
|
||||
statusMessage?: string;
|
||||
}
|
||||
|
||||
export interface IN8nRequestOperations {
|
||||
pagination?:
|
||||
| IN8nRequestOperationPaginationOffset
|
||||
| ((
|
||||
this: IExecutePaginationFunctions,
|
||||
requestOptions: IRequestOptionsFromParameters,
|
||||
) => Promise<INodeExecutionData[]>);
|
||||
}
|
||||
|
||||
export interface IN8nRequestOperationPaginationBase {
|
||||
type: string;
|
||||
properties: {
|
||||
[key: string]: string | number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IN8nRequestOperationPaginationOffset extends IN8nRequestOperationPaginationBase {
|
||||
type: 'offset';
|
||||
properties: {
|
||||
limitParameter: string;
|
||||
offsetParameter: string;
|
||||
pageSize: number;
|
||||
rootProperty?: string; // Optional Path to option array
|
||||
type: 'body' | 'query';
|
||||
};
|
||||
}
|
||||
|
||||
export interface IExecuteFunctions {
|
||||
continueOnFail(): boolean;
|
||||
evaluateExpression(
|
||||
@@ -382,6 +513,12 @@ export interface IExecuteFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
@@ -410,15 +547,32 @@ export interface IExecuteSingleFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
|
||||
export interface IExecutePaginationFunctions extends IExecuteSingleFunctions {
|
||||
makeRoutingRequest(
|
||||
this: IAllExecuteFunctions,
|
||||
requestOptions: IRequestOptionsFromParameters,
|
||||
): Promise<INodeExecutionData[]>;
|
||||
}
|
||||
export interface IExecuteWorkflowInfo {
|
||||
code?: IWorkflowBase;
|
||||
id?: string;
|
||||
}
|
||||
|
||||
export type ICredentialTestFunction = (
|
||||
this: ICredentialTestFunctions,
|
||||
credential: ICredentialsDecrypted,
|
||||
) => Promise<INodeCredentialTestResult>;
|
||||
|
||||
export interface ICredentialTestFunctions {
|
||||
helpers: {
|
||||
[key: string]: (...args: any[]) => any;
|
||||
@@ -448,6 +602,20 @@ export interface ILoadOptionsFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
// TODO: Remove from here. Add it only now to LoadOptions as many nodes do import
|
||||
// from n8n-workflow instead of n8n-core
|
||||
requestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: any, // tslint:disable-line:no-any
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<any>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: ((...args: any[]) => any) | undefined; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
@@ -471,6 +639,12 @@ export interface IHookFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
@@ -493,6 +667,12 @@ export interface IPollFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
@@ -518,6 +698,12 @@ export interface ITriggerFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
@@ -549,6 +735,12 @@ export interface IWebhookFunctions {
|
||||
httpRequest(
|
||||
requestOptions: IHttpRequestOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
httpRequestWithAuthentication(
|
||||
this: IAllExecuteFunctions,
|
||||
credentialsType: string,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
additionalCredentialOptions?: IAdditionalCredentialOptions,
|
||||
): Promise<IN8nHttpResponse | IN8nHttpFullResponse>;
|
||||
[key: string]: (...args: any[]) => any; // tslint:disable-line:no-any
|
||||
};
|
||||
}
|
||||
@@ -636,12 +828,21 @@ export type CodeAutocompleteTypes = 'function' | 'functionItem';
|
||||
|
||||
export type EditorTypes = 'code' | 'json';
|
||||
|
||||
export interface ILoadOptions {
|
||||
routing?: {
|
||||
operations?: IN8nRequestOperations;
|
||||
output?: INodeRequestOutput;
|
||||
request?: IHttpRequestOptionsFromParameters;
|
||||
};
|
||||
}
|
||||
|
||||
export interface INodePropertyTypeOptions {
|
||||
alwaysOpenEditWindow?: boolean; // Supported by: string
|
||||
codeAutocomplete?: CodeAutocompleteTypes; // Supported by: string
|
||||
editor?: EditorTypes; // Supported by: string
|
||||
loadOptionsDependsOn?: string[]; // Supported by: options
|
||||
loadOptionsMethod?: string; // Supported by: options
|
||||
loadOptions?: ILoadOptions; // Supported by: options
|
||||
maxValue?: number; // Supported by: number
|
||||
minValue?: number; // Supported by: number
|
||||
multipleValues?: boolean; // Supported by: <All>
|
||||
@@ -651,7 +852,7 @@ export interface INodePropertyTypeOptions {
|
||||
rows?: number; // Supported by: string
|
||||
showAlpha?: boolean; // Supported by: color
|
||||
sortable?: boolean; // Supported when "multipleValues" set to true
|
||||
[key: string]: boolean | number | string | EditorTypes | undefined | string[];
|
||||
[key: string]: any;
|
||||
}
|
||||
|
||||
export interface IDisplayOptions {
|
||||
@@ -677,11 +878,13 @@ export interface INodeProperties {
|
||||
isNodeSetting?: boolean;
|
||||
noDataExpression?: boolean;
|
||||
required?: boolean;
|
||||
routing?: INodePropertyRouting;
|
||||
}
|
||||
export interface INodePropertyOptions {
|
||||
name: string;
|
||||
value: string | number | boolean;
|
||||
description?: string;
|
||||
routing?: INodePropertyRouting;
|
||||
}
|
||||
|
||||
export interface INodePropertyCollection {
|
||||
@@ -723,10 +926,7 @@ export interface INodeType {
|
||||
};
|
||||
credentialTest?: {
|
||||
// Contains a group of functins that test credentials.
|
||||
[functionName: string]: (
|
||||
this: ICredentialTestFunctions,
|
||||
credential: ICredentialsDecrypted,
|
||||
) => Promise<NodeCredentialTestResult>;
|
||||
[functionName: string]: ICredentialTestFunction;
|
||||
};
|
||||
};
|
||||
webhookMethods?: {
|
||||
@@ -742,12 +942,12 @@ export interface INodeVersionedType {
|
||||
description: INodeTypeBaseDescription;
|
||||
getNodeType: (version?: number) => INodeType;
|
||||
}
|
||||
export interface NodeCredentialTestResult {
|
||||
export interface INodeCredentialTestResult {
|
||||
status: 'OK' | 'Error';
|
||||
message: string;
|
||||
}
|
||||
|
||||
export interface NodeCredentialTestRequest {
|
||||
export interface INodeCredentialTestRequest {
|
||||
nodeToTestWith?: string; // node name i.e. slack
|
||||
credentials: ICredentialsDecrypted;
|
||||
}
|
||||
@@ -765,7 +965,7 @@ export interface INodeCredentialDescription {
|
||||
name: string;
|
||||
required?: boolean;
|
||||
displayOptions?: IDisplayOptions;
|
||||
testedBy?: string; // Name of a function inside `loadOptions.credentialTest`
|
||||
testedBy?: ICredentialTestRequest | string; // Name of a function inside `loadOptions.credentialTest`
|
||||
}
|
||||
|
||||
export type INodeIssueTypes = 'credentials' | 'execution' | 'parameters' | 'typeUnknown';
|
||||
@@ -804,6 +1004,105 @@ export interface INodeTypeBaseDescription {
|
||||
codex?: CodexData;
|
||||
}
|
||||
|
||||
export interface INodePropertyRouting {
|
||||
operations?: IN8nRequestOperations; // Should be changed, does not sound right
|
||||
output?: INodeRequestOutput;
|
||||
request?: IHttpRequestOptionsFromParameters;
|
||||
send?: INodeRequestSend;
|
||||
}
|
||||
|
||||
export type PostReceiveAction =
|
||||
| ((
|
||||
this: IExecuteSingleFunctions,
|
||||
items: INodeExecutionData[],
|
||||
response: IN8nHttpFullResponse,
|
||||
) => Promise<INodeExecutionData[]>)
|
||||
| IPostReceiveBinaryData
|
||||
| IPostReceiveRootProperty
|
||||
| IPostReceiveSet
|
||||
| IPostReceiveSetKeyValue
|
||||
| IPostReceiveSort;
|
||||
|
||||
export type PreSendAction = (
|
||||
this: IExecuteSingleFunctions,
|
||||
requestOptions: IHttpRequestOptions,
|
||||
) => Promise<IHttpRequestOptions>;
|
||||
|
||||
export interface INodeRequestOutput {
|
||||
maxResults?: number | string;
|
||||
postReceive?: PostReceiveAction[];
|
||||
}
|
||||
|
||||
export interface INodeRequestSend {
|
||||
preSend?: PreSendAction[];
|
||||
paginate?: boolean | string; // Where should this life?
|
||||
property?: string; // Maybe: propertyName, destinationProperty?
|
||||
propertyInDotNotation?: boolean; // Enabled by default
|
||||
type?: 'body' | 'query';
|
||||
value?: string;
|
||||
}
|
||||
|
||||
export interface IPostReceiveBase {
|
||||
type: string;
|
||||
properties: {
|
||||
[key: string]: string | number | IDataObject;
|
||||
};
|
||||
errorMessage?: string;
|
||||
}
|
||||
|
||||
export interface IPostReceiveBinaryData extends IPostReceiveBase {
|
||||
type: 'binaryData';
|
||||
properties: {
|
||||
destinationProperty: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IPostReceiveRootProperty extends IPostReceiveBase {
|
||||
type: 'rootProperty';
|
||||
properties: {
|
||||
property: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IPostReceiveSet extends IPostReceiveBase {
|
||||
type: 'set';
|
||||
properties: {
|
||||
value: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IPostReceiveSetKeyValue extends IPostReceiveBase {
|
||||
type: 'setKeyValue';
|
||||
properties: {
|
||||
[key: string]: string | number;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IPostReceiveSort extends IPostReceiveBase {
|
||||
type: 'sort';
|
||||
properties: {
|
||||
key: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface IHttpRequestOptionsFromParameters extends Partial<IHttpRequestOptions> {
|
||||
url?: string;
|
||||
}
|
||||
|
||||
export interface IRequestOptionsFromParameters {
|
||||
maxResults?: number | string;
|
||||
options: IHttpRequestOptionsFromParameters;
|
||||
paginate?: boolean | string;
|
||||
preSend: PreSendAction[];
|
||||
postReceive: Array<{
|
||||
data: {
|
||||
parameterValue: string | IDataObject | undefined;
|
||||
};
|
||||
actions: PostReceiveAction[];
|
||||
}>;
|
||||
requestOperations?: IN8nRequestOperations;
|
||||
}
|
||||
|
||||
export interface INodeTypeDescription extends INodeTypeBaseDescription {
|
||||
version: number;
|
||||
defaults: INodeParameters;
|
||||
@@ -817,6 +1116,8 @@ export interface INodeTypeDescription extends INodeTypeBaseDescription {
|
||||
credentials?: INodeCredentialDescription[];
|
||||
maxNodes?: number; // How many nodes of that type can be created in a workflow
|
||||
polling?: boolean;
|
||||
requestDefaults?: IHttpRequestOptionsFromParameters;
|
||||
requestOperations?: IN8nRequestOperations;
|
||||
hooks?: {
|
||||
[key: string]: INodeHookDescription[] | undefined;
|
||||
activate?: INodeHookDescription[];
|
||||
@@ -869,9 +1170,7 @@ export interface IWorkflowDataProxyData {
|
||||
$workflow: any;
|
||||
}
|
||||
|
||||
export interface IWorkflowDataProxyAdditionalKeys {
|
||||
[key: string]: string | number | undefined;
|
||||
}
|
||||
export type IWorkflowDataProxyAdditionalKeys = IDataObject;
|
||||
|
||||
export interface IWorkflowMetadata {
|
||||
id?: number | string;
|
||||
@@ -898,6 +1197,13 @@ export interface INodeTypes {
|
||||
getByNameAndVersion(nodeType: string, version?: number): INodeType | undefined;
|
||||
}
|
||||
|
||||
export interface ICredentialTypeData {
|
||||
[key: string]: {
|
||||
type: ICredentialType;
|
||||
sourcePath: string;
|
||||
};
|
||||
}
|
||||
|
||||
export interface INodeTypeData {
|
||||
[key: string]: {
|
||||
type: INodeType | INodeVersionedType;
|
||||
|
||||
Reference in New Issue
Block a user