n8n-nodes-jitterflow 0.1.0 → 0.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE CHANGED
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Jitterflow
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Jitterflow
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -35,6 +35,8 @@ All jitter math, TPS guarding, and DLQ decisioning happen server-side in Jitterf
35
35
 
36
36
  ## 🔑 Credential
37
37
 
38
+ No Jitterflow account yet? [Sign up free](https://jitterflow.io/signup/?ref=n8n-node) — takes about two minutes.
39
+
38
40
  Create a **Jitterflow API** credential:
39
41
 
40
42
  - [ ] Grab your tenant API key from the Jitterflow dashboard → **API Keys** (starts with `wjg_`)
@@ -67,4 +69,4 @@ npm run release
67
69
  | `npm run release` | Bumps the version, tags, and pushes |
68
70
  | `.github/workflows/publish.yml` | Takes it from there — build, `n8n-node lint`, publish to npm with provenance |
69
71
 
70
- > **⚠️ Requires** the `NPM_TOKEN` repo secret to be set.
72
+ > **🔑 Auth:** publishing uses npm's OIDC Trusted Publishing (configured on npmjs.com against this exact repo + workflow) — no `NPM_TOKEN` secret needed or used.
@@ -14,7 +14,7 @@ class JitterflowApi {
14
14
  typeOptions: { password: true },
15
15
  default: '',
16
16
  required: true,
17
- description: 'Your Jitterflow tenant API key (starts with wjg_). Find it in the Jitterflow dashboard under API Keys.',
17
+ description: 'Your Jitterflow tenant API key (starts with wjg_). Find it in the Jitterflow dashboard under API Keys. No account yet? Sign up free: https://jitterflow.io/signup/?ref=n8n-node',
18
18
  },
19
19
  {
20
20
  displayName: 'Base URL',
@@ -1,4 +1,4 @@
1
- <svg width="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="60" height="60" rx="12" fill="#4F46E5"/>
3
- <path d="M14 38 L22 38 L26 24 L32 44 L36 30 L40 38 L46 38" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
4
- </svg>
1
+ <svg width="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="60" height="60" rx="12" fill="#4F46E5"/>
3
+ <path d="M14 38 L22 38 L26 24 L32 44 L36 30 L40 38 L46 38" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
@@ -1,6 +1,17 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.jitterflowApiRequest = jitterflowApiRequest;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const SIGNUP_HINT = "Don't have a Jitterflow API key yet? Sign up free: https://jitterflow.io/signup/?ref=n8n-node";
6
+ // The API's own 401 body ("Missing or malformed API key." / "Invalid API
7
+ // key.") is the exact moment a user without an account hits a wall — the
8
+ // highest-converting place to point them at signup, per the SEO/AEO audit's
9
+ // finding 06. Matched on message content rather than a status-code field
10
+ // since n8n's http helper's thrown-error shape isn't stable across versions;
11
+ // "API key" only appears in that one family of auth failures server-side.
12
+ function isMissingOrInvalidApiKeyError(error) {
13
+ return error instanceof Error && /api key/i.test(error.message);
14
+ }
4
15
  async function jitterflowApiRequest(method, path, body, qs) {
5
16
  const credentials = await this.getCredentials('jitterflowApi');
6
17
  const baseUrl = String(credentials.baseUrl || 'https://jitterflow.io').replace(/\/+$/, '');
@@ -11,5 +22,13 @@ async function jitterflowApiRequest(method, path, body, qs) {
11
22
  qs,
12
23
  json: true,
13
24
  };
14
- return this.helpers.httpRequestWithAuthentication.call(this, 'jitterflowApi', options);
25
+ try {
26
+ return await this.helpers.httpRequestWithAuthentication.call(this, 'jitterflowApi', options);
27
+ }
28
+ catch (error) {
29
+ if (isMissingOrInvalidApiKeyError(error)) {
30
+ error.message = `${error.message} ${SIGNUP_HINT}`;
31
+ }
32
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
33
+ }
15
34
  }
@@ -1,4 +1,4 @@
1
- <svg width="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
2
- <rect width="60" height="60" rx="12" fill="#4F46E5"/>
3
- <path d="M14 38 L22 38 L26 24 L32 44 L36 30 L40 38 L46 38" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
4
- </svg>
1
+ <svg width="60" height="60" viewBox="0 0 60 60" xmlns="http://www.w3.org/2000/svg">
2
+ <rect width="60" height="60" rx="12" fill="#4F46E5"/>
3
+ <path d="M14 38 L22 38 L26 24 L32 44 L36 30 L40 38 L46 38" stroke="#FFFFFF" stroke-width="4" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
4
+ </svg>
package/package.json CHANGED
@@ -1,55 +1,56 @@
1
- {
2
- "name": "n8n-nodes-jitterflow",
3
- "version": "0.1.0",
4
- "description": "n8n community node for Jitterflow — send webhooks through jittered, rate-limited delivery and manage the dead-letter queue (list, replay, resolve) from inside a workflow.",
5
- "keywords": [
6
- "n8n-community-node-package"
7
- ],
8
- "license": "MIT",
9
- "publishConfig": {
10
- "access": "public"
11
- },
12
- "homepage": "https://jitterflow.io/integrations/n8n",
13
- "bugs": {
14
- "url": "https://github.com/jitterflow/n8n-nodes-jitterflow/issues"
15
- },
16
- "author": {
17
- "name": "Jitterflow",
18
- "email": "support@jitterflow.io"
19
- },
20
- "repository": {
21
- "type": "git",
22
- "url": "git+https://github.com/jitterflow/n8n-nodes-jitterflow.git"
23
- },
24
- "files": [
25
- "dist"
26
- ],
27
- "n8n": {
28
- "n8nNodesApiVersion": 1,
29
- "credentials": [
30
- "dist/credentials/JitterflowApi.credentials.js"
31
- ],
32
- "nodes": [
33
- "dist/nodes/Jitterflow/Jitterflow.node.js"
34
- ]
35
- },
36
- "scripts": {
37
- "build": "n8n-node build",
38
- "dev": "n8n-node dev",
39
- "lint": "n8n-node lint",
40
- "release": "n8n-node release",
41
- "test": "jest"
42
- },
43
- "peerDependencies": {
44
- "n8n-workflow": "*"
45
- },
46
- "devDependencies": {
47
- "@n8n/node-cli": "^0.44.5",
48
- "n8n-workflow": "^2.16.0",
49
- "typescript": "^5.6.3",
50
- "jest": "^29.7.0",
51
- "ts-jest": "^29.2.5",
52
- "@types/jest": "^29.5.13",
53
- "@types/node": "^20.16.10"
54
- }
55
- }
1
+ {
2
+ "name": "n8n-nodes-jitterflow",
3
+ "version": "0.1.4",
4
+ "description": "n8n community node for Jitterflow — send webhooks through jittered, rate-limited delivery and manage the dead-letter queue (list, replay, resolve) from inside a workflow.",
5
+ "keywords": [
6
+ "n8n-community-node-package"
7
+ ],
8
+ "license": "MIT",
9
+ "publishConfig": {
10
+ "access": "public"
11
+ },
12
+ "homepage": "https://jitterflow.io/integrations/n8n",
13
+ "bugs": {
14
+ "url": "https://github.com/jitterflow/n8n-nodes-jitterflow/issues"
15
+ },
16
+ "author": {
17
+ "name": "Jitterflow",
18
+ "email": "support@jitterflow.io"
19
+ },
20
+ "repository": {
21
+ "type": "git",
22
+ "url": "git+https://github.com/jitterflow/n8n-nodes-jitterflow.git"
23
+ },
24
+ "files": [
25
+ "dist"
26
+ ],
27
+ "n8n": {
28
+ "n8nNodesApiVersion": 1,
29
+ "credentials": [
30
+ "dist/credentials/JitterflowApi.credentials.js"
31
+ ],
32
+ "nodes": [
33
+ "dist/nodes/Jitterflow/Jitterflow.node.js"
34
+ ]
35
+ },
36
+ "scripts": {
37
+ "build": "n8n-node build",
38
+ "dev": "n8n-node dev",
39
+ "lint": "n8n-node lint",
40
+ "release": "n8n-node release",
41
+ "test": "jest"
42
+ },
43
+ "peerDependencies": {
44
+ "n8n-workflow": "*"
45
+ },
46
+ "devDependencies": {
47
+ "@n8n/node-cli": "^0.44.5",
48
+ "eslint": "9.29.0",
49
+ "n8n-workflow": "^2.16.0",
50
+ "typescript": "^5.6.3",
51
+ "jest": "^29.7.0",
52
+ "ts-jest": "^29.2.5",
53
+ "@types/jest": "^29.5.13",
54
+ "@types/node": "^20.16.10"
55
+ }
56
+ }