mirror of
https://github.com/n8n-io/n8n-nodes-starter.git
synced 2025-10-28 14:12:24 -05:00
Update to support new features (#70)
This commit is contained in:
parent
73c99818fa
commit
3624c920ed
9 changed files with 121 additions and 4308 deletions
102
.eslintrc.js
102
.eslintrc.js
|
|
@ -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',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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.
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
|
|
@ -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',
|
||||||
|
|
|
||||||
21
package.json
21
package.json
|
|
@ -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
4284
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load diff
Loading…
Add table
Add a link
Reference in a new issue