Files
n8n-enterprise-unlocked/packages/editor-ui/src/utils/credentialOnlyNodes.ts
T
14035e1244 feat(editor): Add HTTP request nodes for credentials without a node (#7157)
Github issue / Community forum post (link here to close automatically):

---------

Co-authored-by: Giulio Andreini <g.andreini@gmail.com>
Co-authored-by: कारतोफ्फेलस्क्रिप्ट™ <aditya@netroy.in>
2023-11-13 12:11:16 +01:00

91 lines
2.9 KiB
TypeScript

import { deepCopy, type ICredentialType, type INodeTypeDescription } from 'n8n-workflow';
import { CREDENTIAL_ONLY_NODE_PREFIX } from '../constants';
import { i18n } from '@/plugins/i18n';
export function isCredentialOnlyNodeType(nodeTypeName: string): boolean {
return nodeTypeName?.startsWith(CREDENTIAL_ONLY_NODE_PREFIX) ?? false;
}
export function getCredentialTypeName(nodeTypeName: string): string {
return nodeTypeName.split('.')[1];
}
export function getCredentialOnlyNodeTypeName(credentialTypeName: string): string {
return `${CREDENTIAL_ONLY_NODE_PREFIX}.${credentialTypeName}`;
}
export function getCredentialOnlyNodeType(
httpNode?: INodeTypeDescription | null,
credentialType?: ICredentialType,
): INodeTypeDescription | undefined {
const { httpRequestNode } = credentialType ?? {};
if (!httpNode || !credentialType || !httpRequestNode) return undefined;
const { docsUrl, name: displayName } = httpRequestNode;
const credentialOnlyNode = deepCopy(httpNode);
const httpIcon = httpNode.iconUrl;
credentialOnlyNode.name = getCredentialOnlyNodeTypeName(credentialType.name);
credentialOnlyNode.extendsCredential = credentialType.name;
credentialOnlyNode.displayName = displayName ?? credentialType.displayName;
credentialOnlyNode.description = 'HTTP request';
credentialOnlyNode.defaults.name = `${displayName} HTTP Request`;
credentialOnlyNode.codex = {
...credentialOnlyNode.codex,
alias: [],
categories: [],
subcategories: {},
};
credentialOnlyNode.credentials = [{ name: credentialType.name, required: true }];
if (credentialType.icon ?? credentialType.iconUrl) {
credentialOnlyNode.icon = credentialType.icon;
credentialOnlyNode.iconUrl = credentialType.iconUrl;
credentialOnlyNode.badgeIconUrl = httpIcon;
} else {
credentialOnlyNode.iconUrl = httpIcon;
}
credentialOnlyNode.properties = httpNode.properties.map((prop) => {
switch (prop.name) {
case 'authentication':
return { ...prop, type: 'hidden', default: 'predefinedCredentialType' };
case 'nodeCredentialType':
return { ...prop, type: 'hidden', default: credentialType.name };
case 'url':
const properties = { ...prop };
if ('apiBaseUrl' in httpRequestNode) {
const { apiBaseUrl } = httpRequestNode;
properties.default = apiBaseUrl;
properties.placeholder = apiBaseUrl ? `e.g. ${apiBaseUrl}` : prop.placeholder;
} else {
properties.placeholder = httpRequestNode.apiBaseUrlPlaceholder;
}
return properties;
default:
return prop;
}
});
credentialOnlyNode.properties.splice(1, 0, {
type: 'notice',
displayName: i18n.baseText('ndv.httpRequest.credentialOnly.docsNotice', {
interpolate: { nodeName: displayName, docsUrl },
}),
name: 'httpVariantWarning',
default: '',
});
credentialOnlyNode.properties.splice(4, 0, {
type: 'credentials',
displayName: '',
name: '',
default: '',
});
return credentialOnlyNode;
}