Update to support new features (#70)

This commit is contained in:
Jon 2025-05-13 14:26:01 +01:00 committed by GitHub
commit 3624c920ed
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
9 changed files with 121 additions and 4308 deletions

View file

@ -34,8 +34,19 @@ module.exports = {
plugins: ['eslint-plugin-n8n-nodes-base'], plugins: ['eslint-plugin-n8n-nodes-base'],
extends: ['plugin:n8n-nodes-base/credentials'], extends: ['plugin:n8n-nodes-base/credentials'],
rules: { rules: {
'n8n-nodes-base/cred-class-field-documentation-url-missing': 'off', 'n8n-nodes-base/cred-class-field-authenticate-type-assertion': 'error',
'n8n-nodes-base/cred-class-field-display-name-missing-oauth2': 'error',
'n8n-nodes-base/cred-class-field-display-name-miscased': 'error',
'n8n-nodes-base/cred-class-field-documentation-url-missing': 'error',
'n8n-nodes-base/cred-class-field-documentation-url-miscased': 'off', 'n8n-nodes-base/cred-class-field-documentation-url-miscased': 'off',
'n8n-nodes-base/cred-class-field-name-missing-oauth2': 'error',
'n8n-nodes-base/cred-class-field-name-unsuffixed': 'error',
'n8n-nodes-base/cred-class-field-name-uppercase-first-char': 'error',
'n8n-nodes-base/cred-class-field-properties-assertion': 'error',
'n8n-nodes-base/cred-class-field-type-options-password-missing': 'error',
'n8n-nodes-base/cred-class-name-missing-oauth2-suffix': 'error',
'n8n-nodes-base/cred-class-name-unsuffixed': 'error',
'n8n-nodes-base/cred-filename-against-convention': 'error',
}, },
}, },
{ {
@ -43,9 +54,92 @@ module.exports = {
plugins: ['eslint-plugin-n8n-nodes-base'], plugins: ['eslint-plugin-n8n-nodes-base'],
extends: ['plugin:n8n-nodes-base/nodes'], extends: ['plugin:n8n-nodes-base/nodes'],
rules: { rules: {
'n8n-nodes-base/node-execute-block-missing-continue-on-fail': 'off', 'n8n-nodes-base/node-class-description-credentials-name-unsuffixed': 'error',
'n8n-nodes-base/node-resource-description-filename-against-convention': 'off', 'n8n-nodes-base/node-class-description-display-name-unsuffixed-trigger-node': 'error',
'n8n-nodes-base/node-param-fixed-collection-type-unsorted-items': 'off', 'n8n-nodes-base/node-class-description-empty-string': 'error',
'n8n-nodes-base/node-class-description-icon-not-svg': 'error',
'n8n-nodes-base/node-class-description-inputs-wrong-regular-node': 'off',
'n8n-nodes-base/node-class-description-inputs-wrong-trigger-node': 'error',
'n8n-nodes-base/node-class-description-missing-subtitle': 'error',
'n8n-nodes-base/node-class-description-non-core-color-present': 'error',
'n8n-nodes-base/node-class-description-name-miscased': 'error',
'n8n-nodes-base/node-class-description-name-unsuffixed-trigger-node': 'error',
'n8n-nodes-base/node-class-description-outputs-wrong': 'off',
'n8n-nodes-base/node-dirname-against-convention': 'error',
'n8n-nodes-base/node-execute-block-double-assertion-for-items': 'error',
'n8n-nodes-base/node-execute-block-wrong-error-thrown': 'error',
'n8n-nodes-base/node-filename-against-convention': 'error',
'n8n-nodes-base/node-param-array-type-assertion': 'error',
'n8n-nodes-base/node-param-color-type-unused': 'error',
'n8n-nodes-base/node-param-default-missing': 'error',
'n8n-nodes-base/node-param-default-wrong-for-boolean': 'error',
'n8n-nodes-base/node-param-default-wrong-for-collection': 'error',
'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error',
'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error',
'n8n-nodes-base/node-param-default-wrong-for-multi-options': 'error',
'n8n-nodes-base/node-param-default-wrong-for-number': 'error',
'n8n-nodes-base/node-param-default-wrong-for-simplify': 'error',
'n8n-nodes-base/node-param-default-wrong-for-string': 'error',
'n8n-nodes-base/node-param-description-boolean-without-whether': 'error',
'n8n-nodes-base/node-param-description-comma-separated-hyphen': 'error',
'n8n-nodes-base/node-param-description-empty-string': 'error',
'n8n-nodes-base/node-param-description-excess-final-period': 'error',
'n8n-nodes-base/node-param-description-excess-inner-whitespace': 'error',
'n8n-nodes-base/node-param-description-identical-to-display-name': 'error',
'n8n-nodes-base/node-param-description-line-break-html-tag': 'error',
'n8n-nodes-base/node-param-description-lowercase-first-char': 'error',
'n8n-nodes-base/node-param-description-miscased-id': 'error',
'n8n-nodes-base/node-param-description-miscased-json': 'error',
'n8n-nodes-base/node-param-description-miscased-url': 'error',
'n8n-nodes-base/node-param-description-missing-final-period': 'error',
'n8n-nodes-base/node-param-description-missing-for-ignore-ssl-issues': 'error',
'n8n-nodes-base/node-param-description-missing-for-return-all': 'error',
'n8n-nodes-base/node-param-description-missing-for-simplify': 'error',
'n8n-nodes-base/node-param-description-missing-from-dynamic-multi-options': 'error',
'n8n-nodes-base/node-param-description-missing-from-dynamic-options': 'error',
'n8n-nodes-base/node-param-description-missing-from-limit': 'error',
'n8n-nodes-base/node-param-description-unencoded-angle-brackets': 'error',
'n8n-nodes-base/node-param-description-unneeded-backticks': 'error',
'n8n-nodes-base/node-param-description-untrimmed': 'error',
'n8n-nodes-base/node-param-description-url-missing-protocol': 'error',
'n8n-nodes-base/node-param-description-weak': 'error',
'n8n-nodes-base/node-param-description-wrong-for-dynamic-multi-options': 'error',
'n8n-nodes-base/node-param-description-wrong-for-dynamic-options': 'error',
'n8n-nodes-base/node-param-description-wrong-for-ignore-ssl-issues': 'error',
'n8n-nodes-base/node-param-description-wrong-for-limit': 'error',
'n8n-nodes-base/node-param-description-wrong-for-return-all': 'error',
'n8n-nodes-base/node-param-description-wrong-for-simplify': 'error',
'n8n-nodes-base/node-param-description-wrong-for-upsert': 'error',
'n8n-nodes-base/node-param-display-name-excess-inner-whitespace': 'error',
'n8n-nodes-base/node-param-display-name-miscased-id': 'error',
'n8n-nodes-base/node-param-display-name-miscased': 'error',
'n8n-nodes-base/node-param-display-name-not-first-position': 'error',
'n8n-nodes-base/node-param-display-name-untrimmed': 'error',
'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-multi-options': 'error',
'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options': 'error',
'n8n-nodes-base/node-param-display-name-wrong-for-simplify': 'error',
'n8n-nodes-base/node-param-display-name-wrong-for-update-fields': 'error',
'n8n-nodes-base/node-param-min-value-wrong-for-limit': 'error',
'n8n-nodes-base/node-param-multi-options-type-unsorted-items': 'error',
'n8n-nodes-base/node-param-name-untrimmed': 'error',
'n8n-nodes-base/node-param-operation-option-action-wrong-for-get-many': 'error',
'n8n-nodes-base/node-param-operation-option-description-wrong-for-get-many': 'error',
'n8n-nodes-base/node-param-operation-option-without-action': 'error',
'n8n-nodes-base/node-param-operation-without-no-data-expression': 'error',
'n8n-nodes-base/node-param-option-description-identical-to-name': 'error',
'n8n-nodes-base/node-param-option-name-containing-star': 'error',
'n8n-nodes-base/node-param-option-name-duplicate': 'error',
'n8n-nodes-base/node-param-option-name-wrong-for-get-many': 'error',
'n8n-nodes-base/node-param-option-name-wrong-for-upsert': 'error',
'n8n-nodes-base/node-param-option-value-duplicate': 'error',
'n8n-nodes-base/node-param-options-type-unsorted-items': 'error',
'n8n-nodes-base/node-param-placeholder-miscased-id': 'error',
'n8n-nodes-base/node-param-placeholder-missing-email': 'error',
'n8n-nodes-base/node-param-required-false': 'error',
'n8n-nodes-base/node-param-resource-with-plural-option': 'error',
'n8n-nodes-base/node-param-resource-without-no-data-expression': 'error',
'n8n-nodes-base/node-param-type-options-missing-from-limit': 'error',
'n8n-nodes-base/node-param-type-options-password-missing': 'error',
}, },
}, },
], ],

View file

@ -11,10 +11,10 @@ To make your custom node available to the community, you must create it as an np
You need the following installed on your development machine: You need the following installed on your development machine:
* [git](https://git-scm.com/downloads) * [git](https://git-scm.com/downloads)
* Node.js and pnpm. Minimum version Node 18. You can find instructions on how to install both using nvm (Node Version Manager) for Linux, Mac, and WSL [here](https://github.com/nvm-sh/nvm). For Windows users, refer to Microsoft's guide to [Install NodeJS on Windows](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows). * Node.js and pnpm. Minimum version Node 20. You can find instructions on how to install both using nvm (Node Version Manager) for Linux, Mac, and WSL [here](https://github.com/nvm-sh/nvm). For Windows users, refer to Microsoft's guide to [Install NodeJS on Windows](https://docs.microsoft.com/en-us/windows/dev-environment/javascript/nodejs-on-windows).
* Install n8n with: * Install n8n with:
``` ```
pnpm install n8n -g npm install n8n -g
``` ```
* Recommended: follow n8n's guide to [set up your development environment](https://docs.n8n.io/integrations/creating-nodes/build/node-development-environment/). * Recommended: follow n8n's guide to [set up your development environment](https://docs.n8n.io/integrations/creating-nodes/build/node-development-environment/).
@ -27,11 +27,11 @@ These are the basic steps for working with the starter. For detailed guidance on
``` ```
git clone https://github.com/<your organization>/<your-repo-name>.git git clone https://github.com/<your organization>/<your-repo-name>.git
``` ```
3. Run `pnpm i` to install dependencies. 3. Run `npm i` to install dependencies.
4. Open the project in your editor. 4. Open the project in your editor.
5. Browse the examples in `/nodes` and `/credentials`. Modify the examples, or replace them with your own nodes. 5. Browse the examples in `/nodes` and `/credentials`. Modify the examples, or replace them with your own nodes.
6. Update the `package.json` to match your details. 6. Update the `package.json` to match your details.
7. Run `pnpm lint` to check for errors or `pnpm lintfix` to automatically fix errors when possible. 7. Run `npm lint` to check for errors or `npm lintfix` to automatically fix errors when possible.
8. Test your node locally. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for guidance. 8. Test your node locally. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for guidance.
9. Replace this README with documentation for your node. Use the [README_TEMPLATE](README_TEMPLATE.md) to get started. 9. Replace this README with documentation for your node. Use the [README_TEMPLATE](README_TEMPLATE.md) to get started.
10. Update the LICENSE file to use your details. 10. Update the LICENSE file to use your details.

View file

@ -8,6 +8,9 @@ import {
export class ExampleCredentialsApi implements ICredentialType { export class ExampleCredentialsApi implements ICredentialType {
name = 'exampleCredentialsApi'; name = 'exampleCredentialsApi';
displayName = 'Example Credentials API'; displayName = 'Example Credentials API';
documentationUrl = 'https://your-docs-url';
properties: INodeProperties[] = [ properties: INodeProperties[] = [
// The credentials to get from user and save encrypted. // The credentials to get from user and save encrypted.
// Properties can be defined exactly in the same way // Properties can be defined exactly in the same way

View file

@ -8,7 +8,7 @@ import {
export class HttpBinApi implements ICredentialType { export class HttpBinApi implements ICredentialType {
name = 'httpbinApi'; name = 'httpbinApi';
displayName = 'HttpBin API'; displayName = 'HttpBin API';
documentationUrl = '<your-docs-url>'; documentationUrl = 'https://your-docs-url';
properties: INodeProperties[] = [ properties: INodeProperties[] = [
{ {
displayName: 'Token', displayName: 'Token',

View file

@ -18,6 +18,7 @@ export class ExampleNode implements INodeType {
}, },
inputs: [NodeConnectionType.Main], inputs: [NodeConnectionType.Main],
outputs: [NodeConnectionType.Main], outputs: [NodeConnectionType.Main],
usableAsTool: true,
properties: [ properties: [
// Node properties which the user gets displayed and // Node properties which the user gets displayed and
// can change on the node. // can change on the node.

View file

@ -1,4 +1,4 @@
import { INodeType, INodeTypeDescription } from 'n8n-workflow'; import { INodeType, INodeTypeDescription, NodeConnectionType } from 'n8n-workflow';
import { httpVerbFields, httpVerbOperations } from './HttpVerbDescription'; import { httpVerbFields, httpVerbOperations } from './HttpVerbDescription';
export class HttpBin implements INodeType { export class HttpBin implements INodeType {
@ -13,8 +13,8 @@ export class HttpBin implements INodeType {
defaults: { defaults: {
name: 'HttpBin', name: 'HttpBin',
}, },
inputs: ['main'], inputs: [NodeConnectionType.Main],
outputs: ['main'], outputs: [NodeConnectionType.Main],
credentials: [ credentials: [
{ {
name: 'httpbinApi', name: 'httpbinApi',

View file

@ -18,6 +18,7 @@ export const httpVerbOperations: INodeProperties[] = [
name: 'GET', name: 'GET',
value: 'get', value: 'get',
description: 'Perform a GET request', description: 'Perform a GET request',
action: 'Perform a GET request',
routing: { routing: {
request: { request: {
method: 'GET', method: 'GET',
@ -29,6 +30,7 @@ export const httpVerbOperations: INodeProperties[] = [
name: 'DELETE', name: 'DELETE',
value: 'delete', value: 'delete',
description: 'Perform a DELETE request', description: 'Perform a DELETE request',
action: 'Perform a DELETE request',
routing: { routing: {
request: { request: {
method: 'DELETE', method: 'DELETE',

View file

@ -16,19 +16,16 @@
"url": "https://github.com/<...>/n8n-nodes-<...>.git" "url": "https://github.com/<...>/n8n-nodes-<...>.git"
}, },
"engines": { "engines": {
"node": ">=18.10", "node": ">=20.15"
"pnpm": ">=9.1"
}, },
"packageManager": "pnpm@9.1.4",
"main": "index.js", "main": "index.js",
"scripts": { "scripts": {
"preinstall": "npx only-allow pnpm",
"build": "tsc && gulp build:icons", "build": "tsc && gulp build:icons",
"dev": "tsc --watch", "dev": "tsc --watch",
"format": "prettier nodes credentials --write", "format": "prettier nodes credentials --write",
"lint": "eslint nodes credentials package.json", "lint": "eslint nodes credentials package.json",
"lintfix": "eslint nodes credentials package.json --fix", "lintfix": "eslint nodes credentials package.json --fix",
"prepublishOnly": "pnpm build && pnpm lint -c .eslintrc.prepublish.js nodes credentials package.json" "prepublishOnly": "npm build && npm lint -c .eslintrc.prepublish.js nodes credentials package.json"
}, },
"files": [ "files": [
"dist" "dist"
@ -45,14 +42,14 @@
] ]
}, },
"devDependencies": { "devDependencies": {
"@typescript-eslint/parser": "^7.15.0", "@typescript-eslint/parser": "~8.32.0",
"eslint": "^8.56.0", "eslint": "^8.57.0",
"eslint-plugin-n8n-nodes-base": "^1.16.1", "eslint-plugin-n8n-nodes-base": "^1.16.3",
"gulp": "^4.0.2", "gulp": "^5.0.0",
"prettier": "^3.3.2", "prettier": "^3.5.3",
"typescript": "^5.5.3" "typescript": "^5.8.2"
}, },
"peerDependencies": { "peerDependencies": {
"n8n-workflow": "*" "n8n-workflow": "*"
} }
} }

4284
pnpm-lock.yaml generated

File diff suppressed because it is too large Load diff