Skip to content

Commit 6591760

Browse files
committed
v0 of n8n nodes
1 parent c7be441 commit 6591760

20 files changed

+6432
-0
lines changed
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
root = true
2+
3+
[*]
4+
charset = utf-8
5+
indent_style = tab
6+
indent_size = 2
7+
end_of_line = lf
8+
insert_final_newline = true
9+
trim_trailing_whitespace = true
10+
11+
[package.json]
12+
indent_style = space
13+
indent_size = 2
14+
15+
[*.md]
16+
trim_trailing_whitespace = false
17+
18+
[*.yml]
19+
indent_style = space
20+
indent_size = 2
Lines changed: 146 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,146 @@
1+
/**
2+
* @type {import('@types/eslint').ESLint.ConfigData}
3+
*/
4+
module.exports = {
5+
root: true,
6+
7+
env: {
8+
browser: true,
9+
es6: true,
10+
node: true,
11+
},
12+
13+
parser: '@typescript-eslint/parser',
14+
15+
parserOptions: {
16+
project: ['./tsconfig.json'],
17+
sourceType: 'module',
18+
extraFileExtensions: ['.json'],
19+
},
20+
21+
ignorePatterns: ['.eslintrc.js', '**/*.js', '**/node_modules/**', '**/dist/**'],
22+
23+
overrides: [
24+
{
25+
files: ['package.json'],
26+
plugins: ['eslint-plugin-n8n-nodes-base'],
27+
extends: ['plugin:n8n-nodes-base/community'],
28+
rules: {
29+
'n8n-nodes-base/community-package-json-name-still-default': 'off',
30+
},
31+
},
32+
{
33+
files: ['./credentials/**/*.ts'],
34+
plugins: ['eslint-plugin-n8n-nodes-base'],
35+
extends: ['plugin:n8n-nodes-base/credentials'],
36+
rules: {
37+
'n8n-nodes-base/cred-class-field-authenticate-type-assertion': 'error',
38+
'n8n-nodes-base/cred-class-field-display-name-missing-oauth2': 'error',
39+
'n8n-nodes-base/cred-class-field-display-name-miscased': 'error',
40+
'n8n-nodes-base/cred-class-field-documentation-url-missing': 'error',
41+
'n8n-nodes-base/cred-class-field-documentation-url-miscased': 'off',
42+
'n8n-nodes-base/cred-class-field-name-missing-oauth2': 'error',
43+
'n8n-nodes-base/cred-class-field-name-unsuffixed': 'error',
44+
'n8n-nodes-base/cred-class-field-name-uppercase-first-char': 'error',
45+
'n8n-nodes-base/cred-class-field-properties-assertion': 'error',
46+
'n8n-nodes-base/cred-class-field-type-options-password-missing': 'error',
47+
'n8n-nodes-base/cred-class-name-missing-oauth2-suffix': 'error',
48+
'n8n-nodes-base/cred-class-name-unsuffixed': 'error',
49+
'n8n-nodes-base/cred-filename-against-convention': 'error',
50+
},
51+
},
52+
{
53+
files: ['./nodes/**/*.ts'],
54+
plugins: ['eslint-plugin-n8n-nodes-base'],
55+
extends: ['plugin:n8n-nodes-base/nodes'],
56+
rules: {
57+
'n8n-nodes-base/node-class-description-credentials-name-unsuffixed': 'error',
58+
'n8n-nodes-base/node-class-description-display-name-unsuffixed-trigger-node': 'error',
59+
'n8n-nodes-base/node-class-description-empty-string': 'error',
60+
'n8n-nodes-base/node-class-description-icon-not-svg': 'error',
61+
'n8n-nodes-base/node-class-description-inputs-wrong-regular-node': 'off',
62+
'n8n-nodes-base/node-class-description-inputs-wrong-trigger-node': 'error',
63+
'n8n-nodes-base/node-class-description-missing-subtitle': 'error',
64+
'n8n-nodes-base/node-class-description-non-core-color-present': 'error',
65+
'n8n-nodes-base/node-class-description-name-miscased': 'error',
66+
'n8n-nodes-base/node-class-description-name-unsuffixed-trigger-node': 'error',
67+
'n8n-nodes-base/node-class-description-outputs-wrong': 'off',
68+
'n8n-nodes-base/node-dirname-against-convention': 'error',
69+
'n8n-nodes-base/node-execute-block-double-assertion-for-items': 'error',
70+
'n8n-nodes-base/node-execute-block-wrong-error-thrown': 'error',
71+
'n8n-nodes-base/node-filename-against-convention': 'error',
72+
'n8n-nodes-base/node-param-array-type-assertion': 'error',
73+
'n8n-nodes-base/node-param-color-type-unused': 'error',
74+
'n8n-nodes-base/node-param-default-missing': 'error',
75+
'n8n-nodes-base/node-param-default-wrong-for-boolean': 'error',
76+
'n8n-nodes-base/node-param-default-wrong-for-collection': 'error',
77+
'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error',
78+
'n8n-nodes-base/node-param-default-wrong-for-fixed-collection': 'error',
79+
'n8n-nodes-base/node-param-default-wrong-for-multi-options': 'error',
80+
'n8n-nodes-base/node-param-default-wrong-for-number': 'error',
81+
'n8n-nodes-base/node-param-default-wrong-for-simplify': 'error',
82+
'n8n-nodes-base/node-param-default-wrong-for-string': 'error',
83+
'n8n-nodes-base/node-param-description-boolean-without-whether': 'error',
84+
'n8n-nodes-base/node-param-description-comma-separated-hyphen': 'error',
85+
'n8n-nodes-base/node-param-description-empty-string': 'error',
86+
'n8n-nodes-base/node-param-description-excess-final-period': 'error',
87+
'n8n-nodes-base/node-param-description-excess-inner-whitespace': 'error',
88+
'n8n-nodes-base/node-param-description-identical-to-display-name': 'error',
89+
'n8n-nodes-base/node-param-description-line-break-html-tag': 'error',
90+
'n8n-nodes-base/node-param-description-lowercase-first-char': 'error',
91+
'n8n-nodes-base/node-param-description-miscased-id': 'error',
92+
'n8n-nodes-base/node-param-description-miscased-json': 'error',
93+
'n8n-nodes-base/node-param-description-miscased-url': 'error',
94+
'n8n-nodes-base/node-param-description-missing-final-period': 'error',
95+
'n8n-nodes-base/node-param-description-missing-for-ignore-ssl-issues': 'error',
96+
'n8n-nodes-base/node-param-description-missing-for-return-all': 'error',
97+
'n8n-nodes-base/node-param-description-missing-for-simplify': 'error',
98+
'n8n-nodes-base/node-param-description-missing-from-dynamic-multi-options': 'error',
99+
'n8n-nodes-base/node-param-description-missing-from-dynamic-options': 'error',
100+
'n8n-nodes-base/node-param-description-missing-from-limit': 'error',
101+
'n8n-nodes-base/node-param-description-unencoded-angle-brackets': 'error',
102+
'n8n-nodes-base/node-param-description-unneeded-backticks': 'error',
103+
'n8n-nodes-base/node-param-description-untrimmed': 'error',
104+
'n8n-nodes-base/node-param-description-url-missing-protocol': 'error',
105+
'n8n-nodes-base/node-param-description-weak': 'error',
106+
'n8n-nodes-base/node-param-description-wrong-for-dynamic-multi-options': 'error',
107+
'n8n-nodes-base/node-param-description-wrong-for-dynamic-options': 'error',
108+
'n8n-nodes-base/node-param-description-wrong-for-ignore-ssl-issues': 'error',
109+
'n8n-nodes-base/node-param-description-wrong-for-limit': 'error',
110+
'n8n-nodes-base/node-param-description-wrong-for-return-all': 'error',
111+
'n8n-nodes-base/node-param-description-wrong-for-simplify': 'error',
112+
'n8n-nodes-base/node-param-description-wrong-for-upsert': 'error',
113+
'n8n-nodes-base/node-param-display-name-excess-inner-whitespace': 'error',
114+
'n8n-nodes-base/node-param-display-name-miscased-id': 'error',
115+
'n8n-nodes-base/node-param-display-name-miscased': 'error',
116+
'n8n-nodes-base/node-param-display-name-not-first-position': 'error',
117+
'n8n-nodes-base/node-param-display-name-untrimmed': 'error',
118+
'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-multi-options': 'error',
119+
'n8n-nodes-base/node-param-display-name-wrong-for-dynamic-options': 'error',
120+
'n8n-nodes-base/node-param-display-name-wrong-for-simplify': 'error',
121+
'n8n-nodes-base/node-param-display-name-wrong-for-update-fields': 'error',
122+
'n8n-nodes-base/node-param-min-value-wrong-for-limit': 'error',
123+
'n8n-nodes-base/node-param-multi-options-type-unsorted-items': 'error',
124+
'n8n-nodes-base/node-param-name-untrimmed': 'error',
125+
'n8n-nodes-base/node-param-operation-option-action-wrong-for-get-many': 'error',
126+
'n8n-nodes-base/node-param-operation-option-description-wrong-for-get-many': 'error',
127+
'n8n-nodes-base/node-param-operation-option-without-action': 'error',
128+
'n8n-nodes-base/node-param-operation-without-no-data-expression': 'error',
129+
'n8n-nodes-base/node-param-option-description-identical-to-name': 'error',
130+
'n8n-nodes-base/node-param-option-name-containing-star': 'error',
131+
'n8n-nodes-base/node-param-option-name-duplicate': 'error',
132+
'n8n-nodes-base/node-param-option-name-wrong-for-get-many': 'error',
133+
'n8n-nodes-base/node-param-option-name-wrong-for-upsert': 'error',
134+
'n8n-nodes-base/node-param-option-value-duplicate': 'error',
135+
'n8n-nodes-base/node-param-options-type-unsorted-items': 'error',
136+
'n8n-nodes-base/node-param-placeholder-miscased-id': 'error',
137+
'n8n-nodes-base/node-param-placeholder-missing-email': 'error',
138+
'n8n-nodes-base/node-param-required-false': 'error',
139+
'n8n-nodes-base/node-param-resource-with-plural-option': 'error',
140+
'n8n-nodes-base/node-param-resource-without-no-data-expression': 'error',
141+
'n8n-nodes-base/node-param-type-options-missing-from-limit': 'error',
142+
'n8n-nodes-base/node-param-type-options-password-missing': 'error',
143+
},
144+
},
145+
],
146+
};
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* @type {import('@types/eslint').ESLint.ConfigData}
3+
*/
4+
module.exports = {
5+
extends: "./.eslintrc.js",
6+
7+
overrides: [
8+
{
9+
files: ['package.json'],
10+
plugins: ['eslint-plugin-n8n-nodes-base'],
11+
rules: {
12+
'n8n-nodes-base/community-package-json-name-still-default': 'error',
13+
},
14+
},
15+
],
16+
};

examples/integrations/n8n/.gitignore

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
node_modules
2+
.DS_Store
3+
.tmp
4+
tmp
5+
dist
6+
npm-debug.log*
7+
yarn.lock
8+
.vscode/launch.json

examples/integrations/n8n/.npmignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.DS_Store
2+
*.tsbuildinfo
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
module.exports = {
2+
/**
3+
* https://prettier.io/docs/en/options.html#semicolons
4+
*/
5+
semi: true,
6+
7+
/**
8+
* https://prettier.io/docs/en/options.html#trailing-commas
9+
*/
10+
trailingComma: 'all',
11+
12+
/**
13+
* https://prettier.io/docs/en/options.html#bracket-spacing
14+
*/
15+
bracketSpacing: true,
16+
17+
/**
18+
* https://prettier.io/docs/en/options.html#tabs
19+
*/
20+
useTabs: true,
21+
22+
/**
23+
* https://prettier.io/docs/en/options.html#tab-width
24+
*/
25+
tabWidth: 2,
26+
27+
/**
28+
* https://prettier.io/docs/en/options.html#arrow-function-parentheses
29+
*/
30+
arrowParens: 'always',
31+
32+
/**
33+
* https://prettier.io/docs/en/options.html#quotes
34+
*/
35+
singleQuote: true,
36+
37+
/**
38+
* https://prettier.io/docs/en/options.html#quote-props
39+
*/
40+
quoteProps: 'as-needed',
41+
42+
/**
43+
* https://prettier.io/docs/en/options.html#end-of-line
44+
*/
45+
endOfLine: 'lf',
46+
47+
/**
48+
* https://prettier.io/docs/en/options.html#print-width
49+
*/
50+
printWidth: 100,
51+
};
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
# Contributor Covenant Code of Conduct
2+
3+
## Our Pledge
4+
5+
In the interest of fostering an open and welcoming environment, we as
6+
contributors and maintainers pledge to making participation in our project and
7+
our community a harassment-free experience for everyone, regardless of age, body
8+
size, disability, ethnicity, sex characteristics, gender identity and expression,
9+
level of experience, education, socio-economic status, nationality, personal
10+
appearance, race, religion, or sexual identity and orientation.
11+
12+
## Our Standards
13+
14+
Examples of behavior that contributes to creating a positive environment
15+
include:
16+
17+
* Using welcoming and inclusive language
18+
* Being respectful of differing viewpoints and experiences
19+
* Gracefully accepting constructive criticism
20+
* Focusing on what is best for the community
21+
* Showing empathy towards other community members
22+
23+
Examples of unacceptable behavior by participants include:
24+
25+
* The use of sexualized language or imagery and unwelcome sexual attention or
26+
advances
27+
* Trolling, insulting/derogatory comments, and personal or political attacks
28+
* Public or private harassment
29+
* Publishing others' private information, such as a physical or electronic
30+
address, without explicit permission
31+
* Other conduct which could reasonably be considered inappropriate in a
32+
professional setting
33+
34+
## Our Responsibilities
35+
36+
Project maintainers are responsible for clarifying the standards of acceptable
37+
behavior and are expected to take appropriate and fair corrective action in
38+
response to any instances of unacceptable behavior.
39+
40+
Project maintainers have the right and responsibility to remove, edit, or
41+
reject comments, commits, code, wiki edits, issues, and other contributions
42+
that are not aligned to this Code of Conduct, or to ban temporarily or
43+
permanently any contributor for other behaviors that they deem inappropriate,
44+
threatening, offensive, or harmful.
45+
46+
## Scope
47+
48+
This Code of Conduct applies both within project spaces and in public spaces
49+
when an individual is representing the project or its community. Examples of
50+
representing a project or community include using an official project e-mail
51+
address, posting via an official social media account, or acting as an appointed
52+
representative at an online or offline event. Representation of a project may be
53+
further defined and clarified by project maintainers.
54+
55+
## Enforcement
56+
57+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
58+
reported by contacting the project team at [email protected]. All
59+
complaints will be reviewed and investigated and will result in a response that
60+
is deemed necessary and appropriate to the circumstances. The project team is
61+
obligated to maintain confidentiality with regard to the reporter of an incident.
62+
Further details of specific enforcement policies may be posted separately.
63+
64+
Project maintainers who do not follow or enforce the Code of Conduct in good
65+
faith may face temporary or permanent repercussions as determined by other
66+
members of the project's leadership.
67+
68+
## Attribution
69+
70+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71+
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72+
73+
[homepage]: https://www.contributor-covenant.org
74+
75+
For answers to common questions about this code of conduct, see
76+
https://www.contributor-covenant.org/faq

examples/integrations/n8n/LICENSE.md

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
Copyright 2022 n8n
2+
3+
Permission is hereby granted, free of charge, to any person obtaining a copy of
4+
this software and associated documentation files (the "Software"), to deal in
5+
the Software without restriction, including without limitation the rights to
6+
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
7+
of the Software, and to permit persons to whom the Software is furnished to do
8+
so, subject to the following conditions:
9+
10+
The above copyright notice and this permission notice shall be included in all
11+
copies or substantial portions of the Software.
12+
13+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
14+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
15+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
16+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
17+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
18+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
19+
SOFTWARE.

examples/integrations/n8n/README.md

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
![Banner image](https://user-images.githubusercontent.com/10284570/173569848-c624317f-42b1-45a6-ab09-f0ea3c247648.png)
2+
3+
# n8n-nodes-starter
4+
5+
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.
6+
7+
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).
8+
9+
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/).
10+
11+
## Prerequisites
12+
13+
You need the following installed on your development machine:
14+
15+
* [git](https://git-scm.com/downloads)
16+
* 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).
17+
* Install n8n with:
18+
```
19+
npm install n8n -g
20+
```
21+
* Recommended: follow n8n's guide to [set up your development environment](https://docs.n8n.io/integrations/creating-nodes/build/node-development-environment/).
22+
23+
## Using this starter
24+
25+
These are the basic steps for working with the starter. For detailed guidance on creating and publishing nodes, refer to the [documentation](https://docs.n8n.io/integrations/creating-nodes/).
26+
27+
1. [Generate a new repository](https://github.com/n8n-io/n8n-nodes-starter/generate) from this template repository.
28+
2. Clone your new repo:
29+
```
30+
git clone https://github.com/<your organization>/<your-repo-name>.git
31+
```
32+
3. Run `npm i` to install dependencies.
33+
4. Open the project in your editor.
34+
5. Browse the examples in `/nodes` and `/credentials`. Modify the examples, or replace them with your own nodes.
35+
6. Update the `package.json` to match your details.
36+
7. Run `npm run lint` to check for errors or `npm run lintfix` to automatically fix errors when possible.
37+
8. Test your node locally. Refer to [Run your node locally](https://docs.n8n.io/integrations/creating-nodes/test/run-node-locally/) for guidance.
38+
9. Replace this README with documentation for your node. Use the [README_TEMPLATE](README_TEMPLATE.md) to get started.
39+
10. Update the LICENSE file to use your details.
40+
11. [Publish](https://docs.npmjs.com/packages-and-modules/contributing-packages-to-the-registry) your package to npm.
41+
42+
## More information
43+
44+
Refer to our [documentation on creating nodes](https://docs.n8n.io/integrations/creating-nodes/) for detailed information on building your own nodes.
45+
46+
## License
47+
48+
[MIT](https://github.com/n8n-io/n8n-nodes-starter/blob/master/LICENSE.md)

0 commit comments

Comments
 (0)