n8n-nodes-speedtest-net 0.2.3 → 0.2.5
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/README.md
CHANGED
|
@@ -22,7 +22,7 @@ npm run build
|
|
|
22
22
|
npm pack
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Install the generated `n8n-nodes-speedtest-net-0.2.
|
|
25
|
+
Install the generated `n8n-nodes-speedtest-net-0.2.5.tgz` into your self-hosted n8n community-package directory (typically `~/.n8n/nodes`) with npm, using the n8n file owner's account, then restart n8n. Install on all workers in queue mode. Each worker automatically provisions its CLI when first needed.
|
|
26
26
|
|
|
27
27
|
For local development, point `N8N_CUSTOM_EXTENSIONS` at the built `dist/nodes` directory and make the project's dependencies available alongside it. Real n8n discovery and real Ookla requests still require verification in your environment.
|
|
28
28
|
|
|
@@ -40,7 +40,7 @@ Failures use native n8n error handling. There is no separate error-data switch:
|
|
|
40
40
|
- **Continue (using error output)**: failed items go to n8n's **Error** output with the structured JSON below. Successful items stay on the **Success** output.
|
|
41
41
|
- **Continue (using regular output)**: explicitly keeps failed items on the regular output with the same structured JSON.
|
|
42
42
|
|
|
43
|
-
Configure this under **Settings → On Error**. Each continued failure retains its input-item link and uses a JSON-only `{ "error": { ... } }` envelope recognized by n8n's error router. Do not add a top-level execution-item `error` marker: n8n normalizes it to a plain message and discards the structured JSON. Existing saved `returnErrors` parameters are ignored. On regular output, detect failures with `{{ !!$json.error }}`.
|
|
43
|
+
Configure this under **Settings → On Error**. Each continued failure contains only the `error` field (no copied trigger/input fields), retains its input-item link using n8n's numeric `pairedItem` form, and uses a JSON-only `{ "error": { ... } }` envelope recognized by n8n's error router. Do not add a top-level execution-item `error` marker: n8n normalizes it to a plain message and discards the structured JSON. Object-form pairing enters n8n's automatic input-JSON merge path for error outputs; numeric pairing avoids that merge while retaining the input index. This behavior depends on the n8n engine's routing implementation and should be rechecked on n8n upgrades. Existing saved `returnErrors` parameters are ignored. On regular output, detect failures with `{{ !!$json.error }}`.
|
|
44
44
|
|
|
45
45
|
Example for the reported Ookla rate limit:
|
|
46
46
|
|
|
@@ -53,16 +53,13 @@ Example for the reported Ookla rate limit:
|
|
|
53
53
|
"retryAfterSeconds": null,
|
|
54
54
|
"retryAt": null,
|
|
55
55
|
"retrySource": null,
|
|
56
|
-
"
|
|
57
|
-
"stderr": "[2026-10-30 14:30:58.565] [error] Limit reached: Too many requests received.",
|
|
58
|
-
"exitCode": 1,
|
|
59
|
-
"signal": null
|
|
56
|
+
"exitCode": 1
|
|
60
57
|
}
|
|
61
58
|
}
|
|
62
59
|
```
|
|
63
60
|
|
|
64
61
|
### What we can and cannot know
|
|
65
|
-
The wrapper
|
|
62
|
+
The wrapper keeps raw stdout/stderr and termination signal internally for classification, but omits them from serialized errors. The exit code remains available when present. It can classify rate limits and recognize an explicit `retry after N seconds` or `retry in N seconds` message if the CLI emits one. This is parsed CLI text, not an HTTP header or a documented promise from Ookla.
|
|
66
63
|
|
|
67
64
|
**A direct CLI wrapper cannot expose hidden HTTP response headers.** If Ookla does not print a retry duration, it remains `null`. `retryAt` is currently always `null`; a log timestamp is never treated as a quota reset. No fabricated cooldown, automatic retries, or rate-limit bypass is implemented. A rate-limit/licensing error can require more than simply waiting.
|
|
68
65
|
|
|
@@ -103,11 +103,11 @@ class Speedtest {
|
|
|
103
103
|
});
|
|
104
104
|
nodeError.context.speedtest = diagnostics;
|
|
105
105
|
if (this.continueOnFail()) {
|
|
106
|
-
//
|
|
107
|
-
//
|
|
106
|
+
// JSON-only errors survive normalization. Numeric pairing preserves lineage
|
|
107
|
+
// without entering n8n's object-pairing input-JSON merge path.
|
|
108
108
|
output.push({
|
|
109
109
|
json: { error: diagnostics },
|
|
110
|
-
pairedItem:
|
|
110
|
+
pairedItem: itemIndex,
|
|
111
111
|
});
|
|
112
112
|
continue;
|
|
113
113
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Speedtest.node.js","sourceRoot":"","sources":["../../../nodes/Speedtest/Speedtest.node.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Speedtest.node.js","sourceRoot":"","sources":["../../../nodes/Speedtest/Speedtest.node.ts"],"names":[],"mappings":"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"}
|
|
@@ -25,7 +25,7 @@ class SpeedtestError extends Error {
|
|
|
25
25
|
retryAfterSeconds,
|
|
26
26
|
retryAt: null,
|
|
27
27
|
retrySource: retryAfterSeconds === null ? null : 'cli_message',
|
|
28
|
-
...this.diagnostics,
|
|
28
|
+
...(this.diagnostics.exitCode !== undefined ? { exitCode: this.diagnostics.exitCode } : {}),
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
31
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"speedtestError.js","sourceRoot":"","sources":["../../../nodes/Speedtest/speedtestError.ts"],"names":[],"mappings":";;;;AASA,oBAA4B,SAAQ,KAAK;IAGvB,IAAI;IACJ,WAAW;IAH5B,YACC,OAAe,EACC,IAAY,EACZ,WAAW,GAAmB,EAAE;QAEhD,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHC,IAAI;2BACJ,WAAW;QAG3B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC9B,CAAC;IAED,MAAM;QACL,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxG,MAAM,WAAW,GAAG,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7E,wFAAwF;QACxF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,iBAAiB,GAAG,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,OAAO;YACN,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;YAC9C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW;YACX,iBAAiB;YACjB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;YAC9D,GAAG,IAAI,CAAC,WAAW;
|
|
1
|
+
{"version":3,"file":"speedtestError.js","sourceRoot":"","sources":["../../../nodes/Speedtest/speedtestError.ts"],"names":[],"mappings":";;;;AASA,oBAA4B,SAAQ,KAAK;IAGvB,IAAI;IACJ,WAAW;IAH5B,YACC,OAAe,EACC,IAAY,EACZ,WAAW,GAAmB,EAAE;QAEhD,KAAK,CAAC,OAAO,CAAC,CAAC;oBAHC,IAAI;2BACJ,WAAW;QAG3B,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;IAC9B,CAAC;IAED,MAAM;QACL,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACxG,MAAM,WAAW,GAAG,8CAA8C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7E,wFAAwF;QACxF,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,4CAA4C,CAAC,CAAC;QACtE,MAAM,OAAO,GAAG,WAAW,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC/D,MAAM,iBAAiB,GAAG,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;QAC7F,OAAO;YACN,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI;YAC9C,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,WAAW;YACX,iBAAiB;YACjB,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,iBAAiB,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,aAAa;YAC9D,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAC3F,CAAC;IACH,CAAC;CACD;;AAED,yBAAgC,KAAY;IAC3C,OAAO,KAAK,YAAY,cAAc;QACrC,CAAC,CAAC,KAAK,CAAC,MAAM,EAAE;QAChB,CAAC,CAAC,IAAI,cAAc,CAAC,KAAK,CAAC,OAAO,EAAE,uBAAuB,CAAC,CAAC,MAAM,EAAE,CAAC;AACxE,CAAC"}
|