1 Commits

Author SHA1 Message Date
dependabot[bot]
162aed43cd ⬆️ Bump es5-ext from 0.10.61 to 0.10.64
Bumps [es5-ext](https://github.com/medikoo/es5-ext) from 0.10.61 to 0.10.64.
- [Release notes](https://github.com/medikoo/es5-ext/releases)
- [Changelog](https://github.com/medikoo/es5-ext/blob/main/CHANGELOG.md)
- [Commits](https://github.com/medikoo/es5-ext/compare/v0.10.61...v0.10.64)

---
updated-dependencies:
- dependency-name: es5-ext
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-03 11:08:20 +00:00
10 changed files with 4314 additions and 128 deletions

View File

@@ -34,19 +34,8 @@ 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-authenticate-type-assertion': 'error', 'n8n-nodes-base/cred-class-field-documentation-url-missing': 'off',
'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',
}, },
}, },
{ {
@@ -54,92 +43,9 @@ 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-class-description-credentials-name-unsuffixed': 'error', 'n8n-nodes-base/node-execute-block-missing-continue-on-fail': 'off',
'n8n-nodes-base/node-class-description-display-name-unsuffixed-trigger-node': 'error', 'n8n-nodes-base/node-resource-description-filename-against-convention': 'off',
'n8n-nodes-base/node-class-description-empty-string': 'error', 'n8n-nodes-base/node-param-fixed-collection-type-unsorted-items': 'off',
'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

@@ -2,21 +2,19 @@
# n8n-nodes-starter # n8n-nodes-starter
This repo contains example nodes to help you get started building your own custom integrations for [n8n](https://n8n.io). It includes the node linter and other dependencies. This repo contains example nodes to help you get started building your own custom integrations for [n8n](n8n.io). It includes the node linter and other dependencies.
To make your custom node available to the community, you must create it as an npm package, and [submit it to the npm registry](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry). To make your custom node available to the community, you must create it as an npm package, and [submit it to the npm registry](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry).
If you would like your node to be available on n8n cloud you can also [submit your node for verification](https://docs.n8n.io/integrations/creating-nodes/deploy/submit-community-nodes/).
## Prerequisites ## Prerequisites
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 npm. 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). * 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).
* Install n8n with: * Install n8n with:
``` ```
npm install n8n -g pnpm 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/).
@@ -29,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 `npm i` to install dependencies. 3. Run `pnpm 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 `npm run lint` to check for errors or `npm run lintfix` to automatically fix errors when possible. 7. Run `pnpm lint` to check for errors or `pnpm 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

@@ -38,7 +38,7 @@ _By the time users are looking for community nodes, they probably already know n
## Resources ## Resources
* [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes) * [n8n community nodes documentation](https://docs.n8n.io/integrations/community-nodes/)
* _Link to app/service documentation._ * _Link to app/service documentation._
## Version history ## Version history

View File

@@ -8,9 +8,6 @@ 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 = 'https://your-docs-url'; documentationUrl = '<your-docs-url>';
properties: INodeProperties[] = [ properties: INodeProperties[] = [
{ {
displayName: 'Token', displayName: 'Token',

View File

@@ -18,7 +18,6 @@ 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,11 +1,11 @@
import { INodeType, INodeTypeDescription, NodeConnectionType } from 'n8n-workflow'; import { INodeType, INodeTypeDescription } from 'n8n-workflow';
import { httpVerbFields, httpVerbOperations } from './HttpVerbDescription'; import { httpVerbFields, httpVerbOperations } from './HttpVerbDescription';
export class HttpBin implements INodeType { export class HttpBin implements INodeType {
description: INodeTypeDescription = { description: INodeTypeDescription = {
displayName: 'HttpBin', displayName: 'HttpBin',
name: 'httpBin', name: 'httpBin',
icon: { light: 'file:httpbin.svg', dark: 'file:httpbin.svg' }, icon: 'file:httpbin.svg',
group: ['transform'], group: ['transform'],
version: 1, version: 1,
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}', subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
@@ -13,9 +13,8 @@ export class HttpBin implements INodeType {
defaults: { defaults: {
name: 'HttpBin', name: 'HttpBin',
}, },
inputs: [NodeConnectionType.Main], inputs: ['main'],
outputs: [NodeConnectionType.Main], outputs: ['main'],
usableAsTool: true,
credentials: [ credentials: [
{ {
name: 'httpbinApi', name: 'httpbinApi',

View File

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

4286
pnpm-lock.yaml generated Normal file

File diff suppressed because it is too large Load Diff