@ironfang/n8n-nodes-ironfang 0.3.1 → 0.4.1
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 +127 -65
- package/dist/credentials/IronfangApi.credentials.js +5 -5
- package/dist/credentials/IronfangWebhookApi.credentials.js +2 -2
- package/dist/lib/renderwolf.d.ts +2 -2
- package/dist/lib/renderwolf.js +8 -4
- package/dist/nodes/Ironfang/Ironfang.node.js +10 -5
- package/dist/nodes/Ironfang/IronfangTrigger.node.js +2 -2
- package/dist/nodes/Ironfang/catalog.js +1851 -169
- package/dist/nodes/Ironfang/credentialTest.js +9 -6
- package/dist/nodes/Ironfang/execute.js +32 -20
- package/dist/nodes/Ironfang/parameters.js +12 -9
- package/dist/nodes/Ironfang/renderOptions.js +2 -2
- package/dist/nodes/Ironfang/transport.d.ts +1 -0
- package/dist/nodes/Ironfang/transport.js +14 -6
- package/dist/nodes/Ironfang/types.d.ts +7 -3
- package/dist/nodes/Ironfang/webhook.js +3 -1
- package/docs/n8n-re-review-0.3.1.md +5 -3
- package/docs/operations.md +992 -280
- package/docs/validation.md +37 -2
- package/examples/invoice-job-report.json +127 -0
- package/examples/rig-callback-wait.json +131 -0
- package/package.json +7 -6
package/README.md
CHANGED
|
@@ -2,53 +2,67 @@
|
|
|
2
2
|
|
|
3
3
|
# @ironfang/n8n-nodes-ironfang
|
|
4
4
|
|
|
5
|
-
Use
|
|
6
|
-
n8n. The Ironfang action node has **
|
|
7
|
-
Trigger receives signed
|
|
8
|
-
|
|
9
|
-
**Release: 0.
|
|
10
|
-
|
|
11
|
-
It includes the
|
|
5
|
+
Use Ironfang Render, Finance, Audit and Rig, and Ironfang's public developer
|
|
6
|
+
tools, in n8n. The Ironfang action node has **162 operations**, grouped by
|
|
7
|
+
product. Ironfang Trigger receives signed Audit, Finance and Render events.
|
|
8
|
+
|
|
9
|
+
**Release: 0.4.1.** This patch makes the package installable on n8n releases
|
|
10
|
+
before 2.33 that use PostgreSQL; see [Installation](#installation-and-credentials).
|
|
11
|
+
It includes 0.4.0, in which the products are named Ironfang Render, Finance and Audit
|
|
12
|
+
(formerly Renderwolf, Financewolf and Auditwolf), and the node follows: requests
|
|
13
|
+
go to the `/render`, `/finance` and `/audit` API prefixes and scopes are shown as
|
|
14
|
+
`render:*`, `finance:*` and `audit:*`. It adds Ironfang Rig, Finance jobs,
|
|
15
|
+
batches, destinations, deliveries, signed reports and PDFs, the newer Audit and
|
|
16
|
+
Render lists, and paging for Audit lists. Saved workflows and credentials need no
|
|
17
|
+
change; see [Compatibility with earlier names](#compatibility-with-earlier-names).
|
|
12
18
|
|
|
13
19
|
## Installation and credentials
|
|
14
20
|
|
|
15
21
|
On self-hosted n8n, open **Settings → Community Nodes → Install** and enter
|
|
16
22
|
`@ironfang/n8n-nodes-ironfang`. The old `@ironfang/n8n-nodes-renderwolf` package
|
|
17
|
-
is deprecated.
|
|
23
|
+
is deprecated. Versions 0.2.3 to 0.4.0 cannot be installed on n8n releases
|
|
24
|
+
before 2.33 that use PostgreSQL: n8n reports `Failed to save installed package`
|
|
25
|
+
with `invalid input syntax for type integer`, because those releases store a
|
|
26
|
+
node's newest version as an integer and these packages' newest node version was
|
|
27
|
+
1.1 or 1.2. Install 0.4.1 or later, or upgrade n8n. n8n Cloud installation requires n8n's manual package verification;
|
|
18
28
|
npm publishing and automated checks do not establish that approval.
|
|
19
29
|
|
|
20
30
|
Create an `if_live_` platform API key at [portal.ironfang.uk](https://portal.ironfang.uk)
|
|
21
31
|
with the scopes your workflow needs, then select an Ironfang API credential.
|
|
22
|
-
Existing `rw_live_`
|
|
32
|
+
Existing `rw_live_` Render keys and both origin-only and `/renderwolf` base
|
|
23
33
|
URLs remain supported. Other product bases and custom gateway prefixes work too.
|
|
24
34
|
A successful credential test confirms authentication by a product, including
|
|
25
35
|
an explicit scope refusal; it does not grant other operation permissions.
|
|
26
36
|
|
|
27
|
-
Public tools need no credential.
|
|
28
|
-
|
|
29
|
-
An invalid API key never falls back to public access.
|
|
30
|
-
cannot use idempotency keys or access an organisation's
|
|
37
|
+
Public tools need no credential. Finance validation, generation, ruleset reads
|
|
38
|
+
and signed-report verification offer an explicit **Public** mode; saved results
|
|
39
|
+
require authentication. An invalid API key never falls back to public access.
|
|
40
|
+
Public Finance calls cannot use idempotency keys or access an organisation's
|
|
41
|
+
retained results.
|
|
31
42
|
|
|
32
43
|
## Products and operations
|
|
33
44
|
|
|
34
45
|
| Resource | Operations |
|
|
35
46
|
| --- | --- |
|
|
36
|
-
|
|
|
37
|
-
|
|
|
38
|
-
|
|
|
47
|
+
| Render | Screenshot, PDF, template image, video clip, signed URL, usage, QR, site preview, templates, jobs, batches and their lists, capabilities, request history, destinations and deliveries |
|
|
48
|
+
| Finance | Validate XML; generate a validated UBL invoice or credit note; async jobs and ordered batches; webhook and S3 destinations, deliveries and retries; signed reports and their verification; readable PDFs of saved generations; list/get rulesets; list/get/delete saved results; usage |
|
|
49
|
+
| Audit | Sites, audits, pages, findings and decisions, rules and rule packs, monitors across the organisation or a site, changes and comparisons, evidence, artifacts, export destinations/jobs, webhooks and deliveries across the organisation or an endpoint, events and usage |
|
|
50
|
+
| Rig | Projects, suites and versions; runs, holds and receipts; email, callback, mock and connector resources; mock rules; faults; the event timeline, waits, payloads and callback replay; evidence bundles; usage and environment |
|
|
39
51
|
| Public Tool | Image conversion, favicon ZIP, QR generation and verification, UUID generation and inspection, free screenshot |
|
|
40
52
|
|
|
41
53
|
The [operation reference](docs/operations.md) lists each action's endpoint,
|
|
42
54
|
permission, query fields and request example. Complex API bodies use a JSON
|
|
43
55
|
editor so nested fields remain available. Replace the example values before
|
|
44
56
|
running a write operation. Request definitions are available in the product
|
|
45
|
-
specifications: [
|
|
46
|
-
[
|
|
47
|
-
[
|
|
57
|
+
specifications: [Render](https://api.ironfang.uk/render/openapi.yaml),
|
|
58
|
+
[Finance](https://api.ironfang.uk/finance/openapi.yaml),
|
|
59
|
+
[Audit](https://api.ironfang.uk/audit/openapi.yaml),
|
|
60
|
+
[Rig](https://api.ironfang.uk/rig/openapi.yaml).
|
|
48
61
|
|
|
49
62
|
Screenshots support PNG/JPEG/WebP and phone/tablet device presets. Advanced
|
|
50
|
-
Render Options accepts
|
|
51
|
-
|
|
63
|
+
Render Options accepts custom `css`, a page `script`, ordered `actions` (click,
|
|
64
|
+
hover, wait for a selector, delay), waits, blocking, selectors, request headers,
|
|
65
|
+
cookies, user agent and pixel density. For PDFs it also accepts `paper_format` and
|
|
52
66
|
`margin` (numeric inches); screenshot region capture uses `clip`. For template images it accepts
|
|
53
67
|
inline `qr` variables. The source and template variables have their own fields.
|
|
54
68
|
The template picker loads pages without HTML and requires template-read scope;
|
|
@@ -56,26 +70,46 @@ entering a template ID directly needs only render scope.
|
|
|
56
70
|
|
|
57
71
|
Job and batch submission require a stable idempotency key. Get the returned ID,
|
|
58
72
|
use n8n's Wait node between status checks, then Download Job Result. Signed result
|
|
59
|
-
URLs are validated against the configured
|
|
73
|
+
URLs are validated against the configured Render endpoint and downloaded
|
|
60
74
|
without an API key. Site Preview returns the MP4 in the selected binary field
|
|
61
75
|
and a JPEG in `poster`. A result download can return this same two-file bundle.
|
|
62
76
|
|
|
63
|
-
|
|
77
|
+
Finance Validate accepts XML text or an n8n binary field, including filesystem
|
|
64
78
|
and external binary storage. A standards-invalid invoice is a normal result:
|
|
65
79
|
branch on `outcome`, rather than treating HTTP 200 as an invoice approval.
|
|
66
80
|
Generation requires explicit ruleset/profile selectors and preserves decimal
|
|
67
81
|
strings. It returns validation metadata and XML binary data after checking the
|
|
68
82
|
artifact's byte count and SHA-256. Authenticated artifacts/findings are retained
|
|
69
|
-
by
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
83
|
+
by Finance for 30 days; deletion does not remove n8n's own execution records.
|
|
84
|
+
|
|
85
|
+
Finance jobs and batches run validation or generation asynchronously: create one
|
|
86
|
+
with a stable idempotency key, poll it with n8n's Wait node, or register a
|
|
87
|
+
destination and let Ironfang Trigger receive the signed result. Download Signed
|
|
88
|
+
Report and Render E-Invoice PDF return files for a saved result's
|
|
89
|
+
`operation_id`; Verify Signed Report takes the report ZIP from a binary field
|
|
90
|
+
and needs no key. `verified` means the report is intact, not that the invoice
|
|
91
|
+
is valid: read `invoice_outcome` as well.
|
|
92
|
+
|
|
93
|
+
Rig drives an integration test run from a workflow: start a run for a suite,
|
|
94
|
+
allocate inboxes, callback URLs and mocks, arm faults, and use Wait For Event to
|
|
95
|
+
hold until your system under test has called in. A wait that times out is an
|
|
96
|
+
ordinary result with `matched: false`; continue from `next_since`. The node
|
|
97
|
+
allows a wait its full 90 seconds. Export Run Evidence returns the ZIP bundle.
|
|
98
|
+
Create Connector returns a one-time bootstrap token in its output.
|
|
99
|
+
|
|
100
|
+
Paginated lists have Return All, Limit and a starting cursor, offset or
|
|
101
|
+
sequence. Each row becomes an output item with its input link. Audit lists that
|
|
102
|
+
were released without paging (audits, audit pages, finding events, rule
|
|
103
|
+
revisions, exports, monitor runs and an endpoint's deliveries) page from node
|
|
104
|
+
version 1.2; in workflows saved with an earlier version they keep returning the
|
|
105
|
+
API's single JSON response, which now carries `next_cursor`. Re-add the node to
|
|
106
|
+
move a saved workflow to paged output. Other list actions retain the API's JSON
|
|
107
|
+
envelope and API-imposed result caps. Pagination stops at 1,000 pages and
|
|
108
|
+
refuses repeated cursors.
|
|
109
|
+
|
|
110
|
+
S3 destination creation for Render, Finance and Audit reads secret fields from
|
|
111
|
+
an **Ironfang S3 Destination** credential; Finance Update Destination replaces
|
|
112
|
+
stored keys the same way. Do not put them in Request Body JSON. Its connection check validates
|
|
79
113
|
that fields are present; the product's Test Destination operation verifies
|
|
80
114
|
actual S3 access once the bucket/region are registered. One-time webhook secrets
|
|
81
115
|
returned by creation/rotation need to be saved securely; n8n execution retention
|
|
@@ -85,45 +119,53 @@ also applies to these outputs.
|
|
|
85
119
|
|
|
86
120
|
| Actions | API key scopes |
|
|
87
121
|
| --- | --- |
|
|
88
|
-
|
|
|
89
|
-
| Signed URL | `
|
|
90
|
-
| Templates | `
|
|
91
|
-
| Usage and request history | `
|
|
92
|
-
| Destinations and redelivery | `
|
|
93
|
-
|
|
|
94
|
-
|
|
|
95
|
-
|
|
|
96
|
-
|
|
|
97
|
-
|
|
|
98
|
-
|
|
|
99
|
-
|
|
100
|
-
|
|
122
|
+
| Render rendering, jobs/batches, delivery reads | `render:render` |
|
|
123
|
+
| Signed URL | `render:sign` |
|
|
124
|
+
| Templates | `render:templates:read` / `render:templates:write` |
|
|
125
|
+
| Usage and request history | `render:usage:read` |
|
|
126
|
+
| Destinations and redelivery | `render:destinations` |
|
|
127
|
+
| Finance validation, generation, jobs, batches, result deletion | `finance:einvoices:write` |
|
|
128
|
+
| Finance saved results, job/batch/delivery reads, reports and PDFs | `finance:einvoices:read` |
|
|
129
|
+
| Finance authenticated ruleset reads | `finance:einvoices:rulesets:read` |
|
|
130
|
+
| Finance destinations and delivery retries | `finance:einvoices:destinations:manage` |
|
|
131
|
+
| Finance usage | `finance:billing:manage` |
|
|
132
|
+
| Audit reads / running audits / managing resources | `audit:read` / `audit:run` / `audit:manage` |
|
|
133
|
+
| Audit evidence and artifacts | `audit:evidence` |
|
|
134
|
+
| Audit webhooks and exports | `audit:integrations` |
|
|
135
|
+
| Rig reads, waits and evidence / projects and suites / runs, resources and faults / connectors | `rig:read` / `rig:write` / `rig:run` / `rig:connector` |
|
|
136
|
+
|
|
137
|
+
Keys created with the earlier `renderwolf:*`, `financewolf:*` and `auditwolf:*`
|
|
138
|
+
scopes keep working: the platform treats them as the scopes above.
|
|
139
|
+
|
|
140
|
+
Render includes **250 free credits each month**, with no card required.
|
|
101
141
|
A screenshot or template image costs 1 credit, a PDF 2, and QR codes 0. Clip
|
|
102
142
|
costs depend on duration and output size. Cache hits consume no credits.
|
|
103
|
-
Free renders can carry
|
|
104
|
-
allowance belongs to
|
|
143
|
+
Free renders can carry an Ironfang Render badge; QR codes never carry one. This
|
|
144
|
+
allowance belongs to Render; other products have their own usage policies.
|
|
105
145
|
|
|
106
146
|
Public tools use no account credits and share a 60/minute/address limit. The
|
|
107
147
|
public screenshot service also has a 20/hour/address limit and a shared daily
|
|
108
148
|
ceiling. Shared n8n egress addresses share these limits. Use authenticated
|
|
109
|
-
|
|
149
|
+
Render rendering for account-based automation.
|
|
110
150
|
|
|
111
|
-
Billing changes, administration, unreleased Peppol transport/registration
|
|
112
|
-
|
|
151
|
+
Billing changes, administration, unreleased Peppol transport/registration
|
|
152
|
+
and Financial Promotions are outside this package.
|
|
113
153
|
|
|
114
154
|
## Signed event trigger
|
|
115
155
|
|
|
116
156
|
1. Add **Ironfang Trigger** and copy its production webhook URL.
|
|
117
|
-
2. Use
|
|
118
|
-
that URL and the events you want.
|
|
157
|
+
2. Use Audit Create Webhook, or Finance or Render Create Destination, to
|
|
158
|
+
register that URL and the events you want.
|
|
119
159
|
3. Save the returned secret in an **Ironfang Webhook API** credential. Select
|
|
120
160
|
its product, attach it to the trigger, and activate the workflow.
|
|
121
161
|
4. Run Test Webhook/Test Destination to send a signed test event.
|
|
122
162
|
|
|
123
163
|
The trigger verifies HMAC-SHA256 over the timestamp and exact body bytes using
|
|
124
164
|
constant-time comparison, accepts timestamps within five minutes, and rejects
|
|
125
|
-
invalid signatures before starting a workflow.
|
|
126
|
-
from hex;
|
|
165
|
+
invalid signatures before starting a workflow. Render and Finance secrets are
|
|
166
|
+
decoded from hex; Audit secrets are used as returned. Deliveries are signed in
|
|
167
|
+
the `Renderwolf-`, `Financewolf-` and `Auditwolf-` headers the products launched
|
|
168
|
+
with; the trigger reads the ones for the credential's product. The signed event ID, rather
|
|
127
169
|
than the unsigned header ID, is used for duplicate detection.
|
|
128
170
|
|
|
129
171
|
Duplicate state covers seven days/up to 10,000 IDs in n8n workflow static data.
|
|
@@ -141,43 +183,63 @@ The required `checkExists`, `create` and `delete` lifecycle hooks acknowledge
|
|
|
141
183
|
this external setup. They do not call the product management API or verify
|
|
142
184
|
remote registration. Use Test Webhook/Test Destination to check delivery.
|
|
143
185
|
|
|
186
|
+
## Compatibility with earlier names
|
|
187
|
+
|
|
188
|
+
Nothing saved needs editing. Workflows store the resource as `renderwolf`,
|
|
189
|
+
`financewolf` or `auditwolf`, and webhook credentials store the same product
|
|
190
|
+
values; these identifiers are unchanged and only their labels are new. A
|
|
191
|
+
credential whose base URL is an origin, `/renderwolf` or any other product path
|
|
192
|
+
is routed to the current prefix for the operation. The API still answers the
|
|
193
|
+
earlier prefixes, but its own links (for example a job result's signed download
|
|
194
|
+
location) use the current ones, which is why 0.3.1 and earlier fail Download Job
|
|
195
|
+
Result against the current API: upgrade to fix it.
|
|
196
|
+
|
|
144
197
|
## Outputs, examples and compatibility
|
|
145
198
|
|
|
146
|
-
Existing
|
|
147
|
-
fields. Version 1.1 uses numeric `bytes` and structured errors
|
|
199
|
+
Existing version 1 workflows retain string `bytes` and `error`
|
|
200
|
+
fields. Version 1.1 uses numeric `bytes` and structured errors; version 1.2 adds
|
|
201
|
+
paging to the Audit lists named above and is otherwise identical. Version 2,
|
|
202
|
+
which new nodes use, behaves as 1.2 does. All expose exact
|
|
148
203
|
`byteLength`, item links and `_ironfang` response metadata when available:
|
|
149
204
|
request ID, HTTP status, cache status and charged credits. Continued errors
|
|
150
205
|
include available problem codes and retry information. New file operations use
|
|
151
206
|
numeric sizes; the output binary field defaults to `data`.
|
|
152
207
|
|
|
153
|
-
Requests have explicit timeouts: 30 seconds for JSON
|
|
154
|
-
rendering. The node does not automatically repeat a paid operation. Reuse the
|
|
208
|
+
Requests have explicit timeouts: 30 seconds for JSON (100 for a Rig wait) and
|
|
209
|
+
120 seconds for binary rendering. The node does not automatically repeat a paid operation. Reuse the
|
|
155
210
|
same idempotency key only for an identical business operation and respect
|
|
156
211
|
returned retry information when configuring n8n retries.
|
|
157
212
|
|
|
158
213
|
Import the [template render](examples/template-image.json),
|
|
159
214
|
[invoice validation](examples/invoice-validation.json),
|
|
160
|
-
[invoice generation to storage](examples/invoice-generation-storage.json),
|
|
161
|
-
[
|
|
215
|
+
[invoice generation to storage](examples/invoice-generation-storage.json),
|
|
216
|
+
[invoice job and signed report](examples/invoice-job-report.json) (one pause
|
|
217
|
+
before reading the job; loop as the audit example does for larger documents),
|
|
218
|
+
[audit status polling](examples/audit-polling.json), or
|
|
219
|
+
[Rig run with a callback wait](examples/rig-callback-wait.json) workflow. Select credentials
|
|
162
220
|
and replace placeholder IDs, bucket names and example invoice data before running.
|
|
163
221
|
All examples are inactive on import.
|
|
164
222
|
|
|
165
223
|
The tested n8n runtime is **2.38.1**, using its filesystem binary storage.
|
|
166
|
-
Compilation/lint/unit checks run under Node.js 22 and 24. Saved version 1
|
|
167
|
-
1.
|
|
224
|
+
Compilation/lint/unit checks run under Node.js 22 and 24. Saved version 1, 1.1,
|
|
225
|
+
1.2 and 2 workflows are exercised; older n8n host releases are not certified by this
|
|
168
226
|
matrix. The published node has no external runtime dependencies.
|
|
169
227
|
|
|
170
228
|
## Development and releases
|
|
171
229
|
|
|
172
230
|
Run `npm ci --ignore-scripts` and `npm run check`. With Docker, run
|
|
173
|
-
`bash scripts/check-runtime.sh
|
|
174
|
-
|
|
231
|
+
`bash scripts/check-runtime.sh`, `bash scripts/check-webhook-runtime.sh` and
|
|
232
|
+
`bash scripts/check-postgres-install.sh`. The last installs the build through
|
|
233
|
+
n8n's community-package API on PostgreSQL, against n8n 2.32.4, from a throwaway
|
|
234
|
+
local registry. The first two execute local fixtures, including multipart/file handling and signed
|
|
175
235
|
webhooks; they make no paid API calls. CI requires both before release.
|
|
176
236
|
Lint runs with inline configuration disabled, matching the submission scanner's
|
|
177
237
|
handling of suppression comments. Shared code in `lib/` is also linted and packaged.
|
|
178
238
|
|
|
179
239
|
To refresh the catalogue from an Ironfang source checkout, use
|
|
180
240
|
`python3 scripts/sync-contracts.py /path/to/ironfang` (development-only PyYAML).
|
|
241
|
+
Catalogue `product` values are the saved resource identifiers; the script maps
|
|
242
|
+
each to its API prefix and scope family.
|
|
181
243
|
Review endpoint handlers alongside OpenAPI changes. See [RELEASING.md](RELEASING.md)
|
|
182
244
|
and the [validation record](docs/validation.md) for the release procedure and
|
|
183
245
|
qualification of automated checks. License: MIT.
|
|
@@ -5,7 +5,7 @@ class IronfangApi {
|
|
|
5
5
|
name = 'ironfangApi';
|
|
6
6
|
icon = { light: 'file:ironfang.svg', dark: 'file:ironfang.dark.svg' };
|
|
7
7
|
displayName = 'Ironfang API';
|
|
8
|
-
documentationUrl = 'https://ironfang.uk/
|
|
8
|
+
documentationUrl = 'https://ironfang.uk/render/docs';
|
|
9
9
|
properties = [
|
|
10
10
|
{
|
|
11
11
|
displayName: 'API Key',
|
|
@@ -14,18 +14,18 @@ class IronfangApi {
|
|
|
14
14
|
typeOptions: { password: true },
|
|
15
15
|
default: '',
|
|
16
16
|
required: true,
|
|
17
|
-
description: 'An if_live_ platform API key from the Ironfang portal. Existing rw_live_
|
|
17
|
+
description: 'An if_live_ platform API key from the Ironfang portal. Existing rw_live_ Render keys remain supported.',
|
|
18
18
|
},
|
|
19
19
|
{
|
|
20
20
|
displayName: 'Base URL',
|
|
21
21
|
name: 'baseUrl',
|
|
22
22
|
type: 'string',
|
|
23
|
-
default: 'https://api.ironfang.uk/
|
|
24
|
-
description: 'API origin or product base URL.
|
|
23
|
+
default: 'https://api.ironfang.uk/render',
|
|
24
|
+
description: 'API origin or product base URL. Origin-only and /renderwolf values saved by earlier versions remain valid; the node selects the requested product path.',
|
|
25
25
|
},
|
|
26
26
|
{
|
|
27
27
|
displayName: 'Test Product', name: 'testProduct', type: 'options', default: 'auto',
|
|
28
|
-
options: [{ name: 'Auto', value: 'auto' }, { name: '
|
|
28
|
+
options: [{ name: 'Auto', value: 'auto' }, { name: 'Audit', value: 'auditwolf' }, { name: 'Finance', value: 'financewolf' }, { name: 'Render', value: 'renderwolf' }, { name: 'Rig', value: 'rig' }],
|
|
29
29
|
description: 'Choose a product for the read-only connection check, or discover which product accepts the key',
|
|
30
30
|
},
|
|
31
31
|
];
|
|
@@ -5,9 +5,9 @@ class IronfangWebhookApi {
|
|
|
5
5
|
name = 'ironfangWebhookApi';
|
|
6
6
|
displayName = 'Ironfang Webhook API';
|
|
7
7
|
icon = { light: 'file:ironfang.svg', dark: 'file:ironfang.dark.svg' };
|
|
8
|
-
documentationUrl = 'https://ironfang.uk/
|
|
8
|
+
documentationUrl = 'https://ironfang.uk/audit/docs';
|
|
9
9
|
properties = [
|
|
10
|
-
{ displayName: 'Product', name: 'product', type: 'options', default: 'auditwolf', options: [{ name: '
|
|
10
|
+
{ displayName: 'Product', name: 'product', type: 'options', default: 'auditwolf', options: [{ name: 'Audit', value: 'auditwolf' }, { name: 'Finance', value: 'financewolf' }, { name: 'Render', value: 'renderwolf' }] },
|
|
11
11
|
{ displayName: 'Signing Secret', name: 'signingSecret', type: 'string', typeOptions: { password: true }, default: '', required: true, description: 'The one-time secret returned when creating the webhook endpoint or destination. This is not an API key.' },
|
|
12
12
|
];
|
|
13
13
|
}
|
package/dist/lib/renderwolf.d.ts
CHANGED
|
@@ -2,8 +2,8 @@ import type { IExecuteFunctions, INodeExecutionData, INodeTypeDescription } from
|
|
|
2
2
|
import { credentialTest } from '../nodes/Ironfang/credentialTest';
|
|
3
3
|
/**
|
|
4
4
|
* Ironfang node. One node per vendor: pick a product with Resource, then an
|
|
5
|
-
* operation within it.
|
|
6
|
-
* first product; later ones are added as further resources rather than as
|
|
5
|
+
* operation within it. Ironfang Render (https://ironfang.uk/render/docs) was the
|
|
6
|
+
* first product, and its saved resource value keeps the name it launched under; later ones are added as further resources rather than as
|
|
7
7
|
* separate nodes.
|
|
8
8
|
*
|
|
9
9
|
* Render operations return binary data; sign and usage return JSON.
|
package/dist/lib/renderwolf.js
CHANGED
|
@@ -6,8 +6,8 @@ const transport_1 = require("../nodes/Ironfang/transport");
|
|
|
6
6
|
const credentialTest_1 = require("../nodes/Ironfang/credentialTest");
|
|
7
7
|
/**
|
|
8
8
|
* Ironfang node. One node per vendor: pick a product with Resource, then an
|
|
9
|
-
* operation within it.
|
|
10
|
-
* first product; later ones are added as further resources rather than as
|
|
9
|
+
* operation within it. Ironfang Render (https://ironfang.uk/render/docs) was the
|
|
10
|
+
* first product, and its saved resource value keeps the name it launched under; later ones are added as further resources rather than as
|
|
11
11
|
* separate nodes.
|
|
12
12
|
*
|
|
13
13
|
* Render operations return binary data; sign and usage return JSON.
|
|
@@ -19,7 +19,11 @@ exports.renderwolf = {
|
|
|
19
19
|
icon: { light: 'file:ironfang.svg', dark: 'file:ironfang.dark.svg' },
|
|
20
20
|
usableAsTool: true,
|
|
21
21
|
group: ['transform'],
|
|
22
|
-
version
|
|
22
|
+
// n8n before 2.33 stores a community node's newest version in an integer
|
|
23
|
+
// column on PostgreSQL and cannot install a package whose newest version
|
|
24
|
+
// is fractional, so the newest version here is always a whole number.
|
|
25
|
+
// Version 2 behaves as 1.2 does.
|
|
26
|
+
version: [1, 1.1, 1.2, 2],
|
|
23
27
|
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
24
28
|
description: 'Rendering and developer APIs from Ironfang',
|
|
25
29
|
defaults: { name: 'Ironfang' },
|
|
@@ -35,7 +39,7 @@ exports.renderwolf = {
|
|
|
35
39
|
default: 'renderwolf',
|
|
36
40
|
options: [
|
|
37
41
|
{
|
|
38
|
-
name: '
|
|
42
|
+
name: 'Render',
|
|
39
43
|
value: 'renderwolf',
|
|
40
44
|
description: 'Screenshots, PDFs and templated images',
|
|
41
45
|
},
|
|
@@ -29,6 +29,11 @@ const operationParameters = [
|
|
|
29
29
|
default: 'screenshot', displayOptions: { show: { resource: ['renderwolf'] } },
|
|
30
30
|
options: operationOptions('renderwolf'),
|
|
31
31
|
},
|
|
32
|
+
{
|
|
33
|
+
displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true,
|
|
34
|
+
default: 'listRuns', displayOptions: { show: { resource: ['rig'] } },
|
|
35
|
+
options: operationOptions('rig'),
|
|
36
|
+
},
|
|
32
37
|
{
|
|
33
38
|
displayName: 'Operation', name: 'operation', type: 'options', noDataExpression: true,
|
|
34
39
|
default: 'convertImage', displayOptions: { show: { resource: ['tools'] } },
|
|
@@ -40,14 +45,14 @@ class Ironfang {
|
|
|
40
45
|
...legacy.description,
|
|
41
46
|
usableAsTool: true,
|
|
42
47
|
icon: { light: 'file:ironfang.svg', dark: 'file:ironfang.dark.svg' },
|
|
43
|
-
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
|
|
44
|
-
description: '
|
|
48
|
+
subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"].replace("wolf", "")}}',
|
|
49
|
+
description: 'Ironfang Render, Finance, Audit and Rig, and public developer tools',
|
|
45
50
|
credentials: [
|
|
46
|
-
{ name: 'ironfangS3', required: true, testedBy: 'ironfangS3Test', displayOptions: { show: { operation: ['createDestination', 'createExportDestinations'] }, hide: { destinationType: ['webhook'] } } },
|
|
47
|
-
{ name: 'ironfangApi', required: true, testedBy: 'ironfangApiTest', displayOptions: { show: { resource: ['renderwolf', 'auditwolf', 'financewolf'] }, hide: { authentication: ['public'] } } },
|
|
51
|
+
{ name: 'ironfangS3', required: true, testedBy: 'ironfangS3Test', displayOptions: { show: { operation: ['createDestination', 'createExportDestinations', 'createEinvoiceDestination', 'updateEinvoiceDestination'] }, hide: { destinationType: ['webhook'] } } },
|
|
52
|
+
{ name: 'ironfangApi', required: true, testedBy: 'ironfangApiTest', displayOptions: { show: { resource: ['renderwolf', 'auditwolf', 'financewolf', 'rig'] }, hide: { authentication: ['public'] } } },
|
|
48
53
|
],
|
|
49
54
|
properties: [
|
|
50
|
-
{ displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, default: 'renderwolf', options: [{ name: '
|
|
55
|
+
{ displayName: 'Resource', name: 'resource', type: 'options', noDataExpression: true, default: 'renderwolf', options: [{ name: 'Audit', value: 'auditwolf', description: 'Site audits, findings, monitors and evidence' }, { name: 'Finance', value: 'financewolf', description: 'E-invoice generation, validation, jobs and delivery' }, { name: 'Public Tool', value: 'tools', description: 'Free developer tools that need no account' }, { name: 'Render', value: 'renderwolf', description: 'Screenshots, PDFs, video clips and templated images' }, { name: 'Rig', value: 'rig', description: 'Integration test runs, mocks, faults and evidence' }] },
|
|
51
56
|
...operationParameters,
|
|
52
57
|
...legacy.description.properties.slice(2).map(field => ({ ...field, displayOptions: { ...field.displayOptions, show: { ...field.displayOptions?.show, resource: ['renderwolf'] } } })),
|
|
53
58
|
...renderOptions_1.renderOptions,
|
|
@@ -7,12 +7,12 @@ class IronfangTrigger {
|
|
|
7
7
|
description = {
|
|
8
8
|
displayName: 'Ironfang Trigger', name: 'ironfangTrigger', group: ['trigger'], version: 1,
|
|
9
9
|
icon: { light: 'file:ironfang.svg', dark: 'file:ironfang.dark.svg' },
|
|
10
|
-
subtitle: 'Signed product events', description: 'Receive signed
|
|
10
|
+
subtitle: 'Signed product events', description: 'Receive signed Ironfang Audit, Finance and Render events', defaults: { name: 'Ironfang Trigger' },
|
|
11
11
|
inputs: [], outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
|
|
12
12
|
credentials: [{ name: 'ironfangWebhookApi', required: true, testedBy: 'ironfangWebhookTest' }],
|
|
13
13
|
webhooks: [{ name: 'default', httpMethod: 'POST', responseMode: 'onReceived', path: 'events' }],
|
|
14
14
|
properties: [
|
|
15
|
-
{ displayName: 'Register this node’s production webhook URL using Create
|
|
15
|
+
{ displayName: 'Register this node’s production webhook URL using Create Webhook (Audit) or Create Destination (Finance or Render), save the returned signing secret in its credential, then activate the workflow and test the endpoint. Signatures and timestamps are checked before execution.', name: 'setupNotice', type: 'notice', default: '' },
|
|
16
16
|
],
|
|
17
17
|
};
|
|
18
18
|
methods = { credentialTest: { ironfangWebhookTest: webhook_1.webhookCredentialTest } };
|