n8n-nodes-tracepass 1.0.0

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.md ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 TracePass LTD
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 ADDED
@@ -0,0 +1,99 @@
1
+ # n8n-nodes-tracepass
2
+
3
+ This is an n8n community node. It lets you automate
4
+ **[TracePass](https://www.tracepass.eu)** — the EU Digital Product
5
+ Passport platform — in your n8n workflows.
6
+
7
+ TracePass generates compliant Digital Product Passports (DPPs) for EU
8
+ regulations (ESPR, the Battery Regulation, and more). This node lets
9
+ you create and manage products, passports, and GS1 EPCIS 2.0
10
+ supply-chain events directly from n8n — no code.
11
+
12
+ [n8n](https://n8n.io) is a fair-code licensed workflow automation
13
+ platform.
14
+
15
+ [Installation](#installation) ·
16
+ [Operations](#operations) ·
17
+ [Credentials](#credentials) ·
18
+ [Example workflows](#example-workflows) ·
19
+ [Resources](#resources)
20
+
21
+ ## Installation
22
+
23
+ Follow the
24
+ [community nodes installation guide](https://docs.n8n.io/integrations/community-nodes/installation/)
25
+ in the n8n documentation.
26
+
27
+ In n8n: **Settings → Community Nodes → Install**, then enter
28
+ `n8n-nodes-tracepass`.
29
+
30
+ ## Operations
31
+
32
+ ### Product
33
+
34
+ - **Create** — add a product to the catalogue
35
+ - **Get** — retrieve a product by ID
36
+ - **Get Many** — list products, with category / search filters
37
+ - **Update** — update a product's name, model, or description
38
+
39
+ ### Passport
40
+
41
+ - **Create** — create a Digital Product Passport (consumes a plan
42
+ DPP slot — billable; opt in to overage with *Confirm Overage
43
+ Charge*)
44
+ - **Get** / **Get by Serial** — retrieve a passport by ID or by its
45
+ serial number
46
+ - **Get Many** — list passports, with status / product filters
47
+ - **Update Field** — set the value of one passport field
48
+ - **Suspend** — suspend a published passport (reversible)
49
+ - **Archive** — archive a passport (**irreversible** — the public QR
50
+ permanently 404s)
51
+
52
+ ### EPCIS Event
53
+
54
+ - **Export** — export a passport's events as a GS1 EPCIS 2.0
55
+ document (included on Starter plans and up)
56
+ - **Capture** — submit EPCIS 2.0 events (requires the EPCIS add-on)
57
+ - **Get Capture Job** — poll an async capture job
58
+ - **Query** — query the EPCIS event store with the standard EPCIS
59
+ query filters (requires the EPCIS add-on)
60
+
61
+ ## Credentials
62
+
63
+ You need a TracePass API key. In the TracePass dashboard, go to
64
+ **Developer → API Keys** and create a key (it starts with `tp_`).
65
+
66
+ In n8n, create a **TracePass API** credential and paste the key. The
67
+ *Base URL* defaults to `https://app.tracepass.eu` — change it only
68
+ for a self-hosted or staging deployment. Use **Test** to verify the
69
+ key before building a workflow.
70
+
71
+ ## Example workflows
72
+
73
+ **Shopify → TracePass** — on a new Shopify order, create a passport
74
+ (product mapped by SKU, serial = order ID), then email the QR code
75
+ to the customer.
76
+
77
+ **Daily analytics digest** — a Schedule trigger lists yesterday's
78
+ passports and posts a summary to Slack.
79
+
80
+ **CSV → passports** — read a CSV of serial numbers and create a
81
+ passport per row.
82
+
83
+ **Supplier follow-up** — a Schedule trigger lists supplier requests
84
+ older than seven days and sends reminder emails.
85
+
86
+ ## Compatibility
87
+
88
+ Requires n8n 1.x. Tested against the current n8n community-node API
89
+ (`n8nNodesApiVersion: 1`).
90
+
91
+ ## Resources
92
+
93
+ - [TracePass API documentation](https://www.tracepass.eu/docs)
94
+ - [TracePass](https://www.tracepass.eu)
95
+ - [n8n community nodes documentation](https://docs.n8n.io/integrations/#community-nodes)
96
+
97
+ ## License
98
+
99
+ [MIT](LICENSE.md)
@@ -0,0 +1,10 @@
1
+ import type { IAuthenticateGeneric, ICredentialTestRequest, ICredentialType, Icon, INodeProperties } from 'n8n-workflow';
2
+ export declare class TracePassApi implements ICredentialType {
3
+ name: string;
4
+ displayName: string;
5
+ documentationUrl: string;
6
+ icon: Icon;
7
+ properties: INodeProperties[];
8
+ authenticate: IAuthenticateGeneric;
9
+ test: ICredentialTestRequest;
10
+ }
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TracePassApi = void 0;
4
+ class TracePassApi {
5
+ constructor() {
6
+ this.name = 'tracePassApi';
7
+ this.displayName = 'TracePass API';
8
+ this.documentationUrl = 'https://www.tracepass.eu/docs/authentication';
9
+ this.icon = { light: 'file:../icons/tracepass.svg', dark: 'file:../icons/tracepass.dark.svg' };
10
+ this.properties = [
11
+ {
12
+ displayName: 'API Key',
13
+ name: 'apiKey',
14
+ type: 'string',
15
+ typeOptions: { password: true },
16
+ default: '',
17
+ required: true,
18
+ placeholder: 'e.g. tp_0123456789abcdef0123456789abcdef',
19
+ description: 'Your TracePass API key (starts with "tp_"). Create one in the TracePass dashboard under Developer → API Keys.',
20
+ },
21
+ {
22
+ displayName: 'Base URL',
23
+ name: 'baseUrl',
24
+ type: 'string',
25
+ default: 'https://app.tracepass.eu',
26
+ placeholder: 'e.g. https://app.tracepass.eu',
27
+ description: 'The TracePass app base URL. Change this only for a self-hosted or staging deployment.',
28
+ },
29
+ ];
30
+ this.authenticate = {
31
+ type: 'generic',
32
+ properties: {
33
+ headers: {
34
+ Authorization: '=Bearer {{$credentials.apiKey}}',
35
+ },
36
+ },
37
+ };
38
+ this.test = {
39
+ request: {
40
+ baseURL: '={{$credentials.baseUrl}}',
41
+ url: '/api/v1/products',
42
+ method: 'GET',
43
+ qs: { limit: 1 },
44
+ },
45
+ };
46
+ }
47
+ }
48
+ exports.TracePassApi = TracePassApi;
49
+ //# sourceMappingURL=TracePassApi.credentials.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TracePassApi.credentials.js","sourceRoot":"","sources":["../../credentials/TracePassApi.credentials.ts"],"names":[],"mappings":";;;AAmBA,MAAa,YAAY;IAAzB;QACC,SAAI,GAAG,cAAc,CAAC;QAEtB,gBAAW,GAAG,eAAe,CAAC;QAE9B,qBAAgB,GAAG,8CAA8C,CAAC;QAElE,SAAI,GAAS,EAAE,KAAK,EAAE,6BAA6B,EAAE,IAAI,EAAE,kCAAkC,EAAE,CAAC;QAEhG,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,SAAS;gBACtB,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE;gBAC/B,OAAO,EAAE,EAAE;gBACX,QAAQ,EAAE,IAAI;gBACd,WAAW,EAAE,0CAA0C;gBACvD,WAAW,EACV,+GAA+G;aAChH;YACD;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,0BAA0B;gBACnC,WAAW,EAAE,+BAA+B;gBAC5C,WAAW,EACV,uFAAuF;aACxF;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,iCAAiC;iBAChD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,kBAAkB;gBACvB,MAAM,EAAE,KAAK;gBACb,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE;aAChB;SACD,CAAC;IACH,CAAC;CAAA;AAjDD,oCAiDC"}
@@ -0,0 +1,35 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60" role="img" aria-label="TracePass">
2
+ <title>TracePass</title>
3
+ <defs>
4
+ <linearGradient id="tpGlyphDark" x1="0" y1="0" x2="30" y2="19" gradientUnits="userSpaceOnUse">
5
+ <stop offset="0%" stop-color="#FB923C"/>
6
+ <stop offset="100%" stop-color="#F97316"/>
7
+ </linearGradient>
8
+ </defs>
9
+ <rect width="60" height="60" rx="12" fill="#1F2937"/>
10
+ <svg x="8" y="17.5" width="44" height="27.87" viewBox="0 0 30 19" preserveAspectRatio="xMidYMid meet">
11
+ <g fill="url(#tpGlyphDark)">
12
+ <!-- T -->
13
+ <rect x="0" y="0" width="3" height="3" rx="0.5"/>
14
+ <rect x="4" y="0" width="3" height="3" rx="0.5"/>
15
+ <rect x="8" y="0" width="3" height="3" rx="0.5"/>
16
+ <rect x="4" y="4" width="3" height="3" rx="0.5"/>
17
+ <rect x="4" y="8" width="3" height="3" rx="0.5"/>
18
+ <rect x="4" y="12" width="3" height="3" rx="0.5"/>
19
+ <rect x="4" y="16" width="3" height="3" rx="0.5"/>
20
+ <!-- P -->
21
+ <rect x="15" y="0" width="3" height="3" rx="0.5"/>
22
+ <rect x="15" y="4" width="3" height="3" rx="0.5"/>
23
+ <rect x="15" y="8" width="3" height="3" rx="0.5"/>
24
+ <rect x="15" y="12" width="3" height="3" rx="0.5"/>
25
+ <rect x="15" y="16" width="3" height="3" rx="0.5"/>
26
+ <rect x="19" y="0" width="3" height="3" rx="0.5"/>
27
+ <rect x="23" y="0" width="3" height="3" rx="0.5"/>
28
+ <rect x="27" y="0" width="3" height="3" rx="0.5"/>
29
+ <rect x="27" y="4" width="3" height="3" rx="0.5"/>
30
+ <rect x="27" y="8" width="3" height="3" rx="0.5"/>
31
+ <rect x="19" y="8" width="3" height="3" rx="0.5"/>
32
+ <rect x="23" y="8" width="3" height="3" rx="0.5"/>
33
+ </g>
34
+ </svg>
35
+ </svg>
@@ -0,0 +1,49 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 60 60" width="60" height="60" role="img" aria-label="TracePass">
2
+ <title>TracePass</title>
3
+ <defs>
4
+ <!--
5
+ Pixel-grid TP, lifted 1:1 from the canonical brand mark in
6
+ tracepass/public/tracepass-logo.svg. Each pixel is 3 units wide
7
+ on a 4-unit pitch (1-unit gap). The glyph block tightly bounds
8
+ to x:0..30 (P right edge at 27+3), y:0..19 (bottom-most pixel
9
+ at y=16 with height 3).
10
+
11
+ Inner viewBox is 30×19 (the tight bound), scaled to width=44 →
12
+ height ≈ 27.87 on the 60×60 card. Geometric center would be
13
+ y=(60-27.87)/2≈16.07 but the glyph's visual mass sits in the
14
+ upper half (T bar + P bowl both at the top), so pure-geometric
15
+ centering reads as top-heavy. Optical center: nudge y down ~3u
16
+ so the visual weight balances around the card's midline.
17
+ -->
18
+ <linearGradient id="tpCard" x1="0" y1="0" x2="1" y2="1">
19
+ <stop offset="0" stop-color="#111827"/>
20
+ <stop offset="1" stop-color="#F97316"/>
21
+ </linearGradient>
22
+ </defs>
23
+ <rect width="60" height="60" rx="12" fill="url(#tpCard)"/>
24
+ <svg x="8" y="17.5" width="44" height="27.87" viewBox="0 0 30 19" preserveAspectRatio="xMidYMid meet">
25
+ <g fill="#ffffff">
26
+ <!-- T: top bar (3 pixels) + stem (5 pixels down from the bar) -->
27
+ <rect x="0" y="0" width="3" height="3" rx="0.5"/>
28
+ <rect x="4" y="0" width="3" height="3" rx="0.5"/>
29
+ <rect x="8" y="0" width="3" height="3" rx="0.5"/>
30
+ <rect x="4" y="4" width="3" height="3" rx="0.5"/>
31
+ <rect x="4" y="8" width="3" height="3" rx="0.5"/>
32
+ <rect x="4" y="12" width="3" height="3" rx="0.5"/>
33
+ <rect x="4" y="16" width="3" height="3" rx="0.5"/>
34
+ <!-- P: left stem (5 pixels) + top bar (3) + right loop edge (3) + loop bottom (2) -->
35
+ <rect x="15" y="0" width="3" height="3" rx="0.5"/>
36
+ <rect x="15" y="4" width="3" height="3" rx="0.5"/>
37
+ <rect x="15" y="8" width="3" height="3" rx="0.5"/>
38
+ <rect x="15" y="12" width="3" height="3" rx="0.5"/>
39
+ <rect x="15" y="16" width="3" height="3" rx="0.5"/>
40
+ <rect x="19" y="0" width="3" height="3" rx="0.5"/>
41
+ <rect x="23" y="0" width="3" height="3" rx="0.5"/>
42
+ <rect x="27" y="0" width="3" height="3" rx="0.5"/>
43
+ <rect x="27" y="4" width="3" height="3" rx="0.5"/>
44
+ <rect x="27" y="8" width="3" height="3" rx="0.5"/>
45
+ <rect x="19" y="8" width="3" height="3" rx="0.5"/>
46
+ <rect x="23" y="8" width="3" height="3" rx="0.5"/>
47
+ </g>
48
+ </svg>
49
+ </svg>
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const epcisOperations: INodeProperties[];
3
+ export declare const epcisFields: INodeProperties[];
@@ -0,0 +1,159 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.epcisFields = exports.epcisOperations = void 0;
4
+ exports.epcisOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: { resource: ['epcis'] },
12
+ },
13
+ options: [
14
+ {
15
+ name: 'Export',
16
+ value: 'export',
17
+ action: 'Export EPCIS events for a passport',
18
+ description: "Retrieve a passport's supply-chain events as an EPCIS 2.0 document. Included on Starter and up.",
19
+ routing: {
20
+ request: {
21
+ method: 'GET',
22
+ url: '=/api/v1/passports/{{$parameter["passportId"]}}/epcis',
23
+ },
24
+ },
25
+ },
26
+ {
27
+ name: 'Capture',
28
+ value: 'capture',
29
+ action: 'Capture EPCIS events',
30
+ description: 'Submit EPCIS 2.0 events to the capture interface. Requires the EPCIS add-on.',
31
+ routing: {
32
+ request: {
33
+ method: 'POST',
34
+ url: '/api/v1/epcis/capture',
35
+ },
36
+ },
37
+ },
38
+ {
39
+ name: 'Get Capture Job',
40
+ value: 'captureJob',
41
+ action: 'Get an EPCIS capture job',
42
+ description: 'Check the status of an async EPCIS capture job',
43
+ routing: {
44
+ request: {
45
+ method: 'GET',
46
+ url: '=/api/v1/epcis/capture/{{$parameter["jobId"]}}',
47
+ },
48
+ },
49
+ },
50
+ {
51
+ name: 'Query',
52
+ value: 'query',
53
+ action: 'Query the EPCIS event store',
54
+ description: 'Query captured EPCIS events. Requires the EPCIS add-on.',
55
+ routing: {
56
+ request: {
57
+ method: 'GET',
58
+ url: '/api/v1/epcis/events',
59
+ },
60
+ },
61
+ },
62
+ ],
63
+ default: 'export',
64
+ },
65
+ ];
66
+ exports.epcisFields = [
67
+ {
68
+ displayName: 'Passport ID',
69
+ name: 'passportId',
70
+ type: 'string',
71
+ required: true,
72
+ default: '',
73
+ placeholder: 'e.g. 65a0f1b2c3d4e5f6a7b8c9d0',
74
+ description: 'The TracePass ID of the passport whose events to export',
75
+ displayOptions: {
76
+ show: { resource: ['epcis'], operation: ['export'] },
77
+ },
78
+ },
79
+ {
80
+ displayName: 'Capture Job ID',
81
+ name: 'jobId',
82
+ type: 'string',
83
+ required: true,
84
+ default: '',
85
+ placeholder: 'e.g. cap_8f3d2a1b9c7e6d5f',
86
+ description: 'The capture job ID returned by a Capture operation',
87
+ displayOptions: {
88
+ show: { resource: ['epcis'], operation: ['captureJob'] },
89
+ },
90
+ },
91
+ {
92
+ displayName: 'Events (JSON)',
93
+ name: 'events',
94
+ type: 'json',
95
+ required: true,
96
+ default: '={}',
97
+ description: 'An EPCIS 2.0 EPCISDocument, a single event, or an array of events (JSON-LD). See the EPCIS docs at /docs/epcis.',
98
+ displayOptions: {
99
+ show: { resource: ['epcis'], operation: ['capture'] },
100
+ },
101
+ routing: {
102
+ send: { type: 'body', property: 'epcisBody' },
103
+ },
104
+ },
105
+ {
106
+ displayName: 'Query Filters',
107
+ name: 'queryFilters',
108
+ type: 'collection',
109
+ placeholder: 'Add Filter',
110
+ default: {},
111
+ description: 'Standard EPCIS 2.0 query parameters',
112
+ displayOptions: {
113
+ show: { resource: ['epcis'], operation: ['query'] },
114
+ },
115
+ options: [
116
+ {
117
+ displayName: 'Business Step (EQ_bizStep)',
118
+ name: 'EQ_bizStep',
119
+ type: 'string',
120
+ default: '',
121
+ description: 'Match events with this CBV business step',
122
+ routing: { send: { type: 'query', property: 'EQ_bizStep' } },
123
+ },
124
+ {
125
+ displayName: 'Disposition (EQ_disposition)',
126
+ name: 'EQ_disposition',
127
+ type: 'string',
128
+ default: '',
129
+ description: 'Match events with this CBV disposition',
130
+ routing: { send: { type: 'query', property: 'EQ_disposition' } },
131
+ },
132
+ {
133
+ displayName: 'EPC Matches (MATCH_epc)',
134
+ name: 'MATCH_epc',
135
+ type: 'string',
136
+ default: '',
137
+ description: 'Match events that reference this EPC',
138
+ routing: { send: { type: 'query', property: 'MATCH_epc' } },
139
+ },
140
+ {
141
+ displayName: 'Event Time From (GE_eventTime)',
142
+ name: 'GE_eventTime',
143
+ type: 'dateTime',
144
+ default: '',
145
+ description: 'Match events at or after this time',
146
+ routing: { send: { type: 'query', property: 'GE_eventTime' } },
147
+ },
148
+ {
149
+ displayName: 'Event Time To (LT_eventTime)',
150
+ name: 'LT_eventTime',
151
+ type: 'dateTime',
152
+ default: '',
153
+ description: 'Match events before this time',
154
+ routing: { send: { type: 'query', property: 'LT_eventTime' } },
155
+ },
156
+ ],
157
+ },
158
+ ];
159
+ //# sourceMappingURL=EpcisDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EpcisDescription.js","sourceRoot":"","sources":["../../../nodes/TracePass/EpcisDescription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const passportOperations: INodeProperties[];
3
+ export declare const passportFields: INodeProperties[];
@@ -0,0 +1,267 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.passportFields = exports.passportOperations = void 0;
4
+ exports.passportOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: { resource: ['passport'] },
12
+ },
13
+ options: [
14
+ {
15
+ name: 'Archive',
16
+ value: 'archive',
17
+ action: 'Archive a passport',
18
+ description: 'Permanently archive a passport. The public QR will return 404.',
19
+ routing: {
20
+ request: {
21
+ method: 'POST',
22
+ url: '=/api/v1/passports/{{$parameter["passportId"]}}/archive',
23
+ },
24
+ },
25
+ },
26
+ {
27
+ name: 'Create',
28
+ value: 'create',
29
+ action: 'Create a passport',
30
+ description: 'Create a new Digital Product Passport. Consumes a plan DPP slot.',
31
+ routing: {
32
+ request: {
33
+ method: 'POST',
34
+ url: '/api/v1/passports',
35
+ },
36
+ },
37
+ },
38
+ {
39
+ name: 'Get',
40
+ value: 'get',
41
+ action: 'Get a passport',
42
+ description: 'Retrieve a passport by ID',
43
+ routing: {
44
+ request: {
45
+ method: 'GET',
46
+ url: '=/api/v1/passports/{{$parameter["passportId"]}}',
47
+ },
48
+ },
49
+ },
50
+ {
51
+ name: 'Get by Serial',
52
+ value: 'getBySerial',
53
+ action: 'Get a passport by serial',
54
+ description: 'Retrieve a passport by its serial number',
55
+ routing: {
56
+ request: {
57
+ method: 'GET',
58
+ url: '=/api/v1/passports/by-serial/{{$parameter["serialNumber"]}}',
59
+ },
60
+ },
61
+ },
62
+ {
63
+ name: 'Get Many',
64
+ value: 'getAll',
65
+ action: 'Get many passports',
66
+ description: 'List many passports',
67
+ routing: {
68
+ request: {
69
+ method: 'GET',
70
+ url: '/api/v1/passports',
71
+ },
72
+ },
73
+ },
74
+ {
75
+ name: 'Suspend',
76
+ value: 'suspend',
77
+ action: 'Suspend a passport',
78
+ description: 'Suspend a published passport. Reversible. The QR shows a suspended state.',
79
+ routing: {
80
+ request: {
81
+ method: 'POST',
82
+ url: '=/api/v1/passports/{{$parameter["passportId"]}}/suspend',
83
+ },
84
+ },
85
+ },
86
+ {
87
+ name: 'Update Field',
88
+ value: 'updateField',
89
+ action: 'Update a passport field',
90
+ description: 'Set the value of one field on a passport',
91
+ routing: {
92
+ request: {
93
+ method: 'PATCH',
94
+ url: '=/api/v1/passports/{{$parameter["passportId"]}}/fields/{{$parameter["fieldKey"]}}',
95
+ },
96
+ },
97
+ },
98
+ ],
99
+ default: 'getAll',
100
+ },
101
+ ];
102
+ exports.passportFields = [
103
+ {
104
+ displayName: 'Passport ID',
105
+ name: 'passportId',
106
+ type: 'string',
107
+ required: true,
108
+ default: '',
109
+ placeholder: 'e.g. 65a0f1b2c3d4e5f6a7b8c9d0',
110
+ description: 'The TracePass ID of the passport',
111
+ displayOptions: {
112
+ show: {
113
+ resource: ['passport'],
114
+ operation: ['get', 'updateField', 'suspend', 'archive'],
115
+ },
116
+ },
117
+ },
118
+ {
119
+ displayName: 'Serial Number',
120
+ name: 'serialNumber',
121
+ type: 'string',
122
+ required: true,
123
+ default: '',
124
+ placeholder: 'e.g. SN-2026-00042',
125
+ description: 'The product unit serial number',
126
+ displayOptions: {
127
+ show: { resource: ['passport'], operation: ['getBySerial'] },
128
+ },
129
+ },
130
+ {
131
+ displayName: 'Product ID',
132
+ name: 'createProductId',
133
+ type: 'string',
134
+ required: true,
135
+ default: '',
136
+ placeholder: 'e.g. 65a0f1b2c3d4e5f6a7b8c9d0',
137
+ description: 'The product this passport belongs to',
138
+ displayOptions: {
139
+ show: { resource: ['passport'], operation: ['create'] },
140
+ },
141
+ routing: {
142
+ send: { type: 'body', property: 'productId' },
143
+ },
144
+ },
145
+ {
146
+ displayName: 'GTIN',
147
+ name: 'gtin',
148
+ type: 'string',
149
+ required: true,
150
+ default: '',
151
+ placeholder: 'e.g. 04012345678901',
152
+ description: 'The 14-digit GS1 GTIN',
153
+ displayOptions: {
154
+ show: { resource: ['passport'], operation: ['create'] },
155
+ },
156
+ routing: {
157
+ send: { type: 'body', property: 'gs1.gtin' },
158
+ },
159
+ },
160
+ {
161
+ displayName: 'Serial Number',
162
+ name: 'createSerialNumber',
163
+ type: 'string',
164
+ required: true,
165
+ default: '',
166
+ placeholder: 'e.g. SN-2026-00042',
167
+ description: 'A unique serial number for this product unit',
168
+ displayOptions: {
169
+ show: { resource: ['passport'], operation: ['create'] },
170
+ },
171
+ routing: {
172
+ send: { type: 'body', property: 'gs1.serialNumber' },
173
+ },
174
+ },
175
+ {
176
+ displayName: 'Confirm Overage Charge',
177
+ name: 'confirmOverage',
178
+ type: 'boolean',
179
+ default: false,
180
+ description: 'Whether to accept a per-passport overage charge if the account is over its plan DPP quota. Leave off to fail safely when over quota.',
181
+ displayOptions: {
182
+ show: { resource: ['passport'], operation: ['create'] },
183
+ },
184
+ routing: {
185
+ send: { type: 'body', property: 'confirmOverage' },
186
+ },
187
+ },
188
+ {
189
+ displayName: 'Field Key',
190
+ name: 'fieldKey',
191
+ type: 'string',
192
+ required: true,
193
+ default: '',
194
+ placeholder: 'e.g. batteryCapacity',
195
+ description: 'The template field key to update',
196
+ displayOptions: {
197
+ show: { resource: ['passport'], operation: ['updateField'] },
198
+ },
199
+ },
200
+ {
201
+ displayName: 'Value',
202
+ name: 'fieldValue',
203
+ type: 'string',
204
+ default: '',
205
+ placeholder: 'e.g. 5000',
206
+ description: 'The new value for the field',
207
+ displayOptions: {
208
+ show: { resource: ['passport'], operation: ['updateField'] },
209
+ },
210
+ routing: {
211
+ send: { type: 'body', property: 'value' },
212
+ },
213
+ },
214
+ {
215
+ displayName: 'Filters',
216
+ name: 'filters',
217
+ type: 'collection',
218
+ placeholder: 'Add Filter',
219
+ default: {},
220
+ displayOptions: {
221
+ show: { resource: ['passport'], operation: ['getAll'] },
222
+ },
223
+ options: [
224
+ {
225
+ displayName: 'Product ID',
226
+ name: 'productId',
227
+ type: 'string',
228
+ default: '',
229
+ description: 'Filter to one product\'s passports',
230
+ routing: { send: { type: 'query', property: 'productId' } },
231
+ },
232
+ {
233
+ displayName: 'Status',
234
+ name: 'status',
235
+ type: 'options',
236
+ default: 'published',
237
+ options: [
238
+ { name: 'Approved', value: 'approved' },
239
+ { name: 'Archived', value: 'archived' },
240
+ { name: 'Draft', value: 'draft' },
241
+ { name: 'Expired', value: 'expired' },
242
+ { name: 'In Review', value: 'in_review' },
243
+ { name: 'Published', value: 'published' },
244
+ { name: 'Suspended', value: 'suspended' },
245
+ ],
246
+ routing: { send: { type: 'query', property: 'status' } },
247
+ },
248
+ {
249
+ displayName: 'Search',
250
+ name: 'search',
251
+ type: 'string',
252
+ default: '',
253
+ routing: { send: { type: 'query', property: 'search' } },
254
+ },
255
+ {
256
+ displayName: 'Limit',
257
+ name: 'limit',
258
+ type: 'number',
259
+ typeOptions: { minValue: 1, maxValue: 100 },
260
+ default: 50,
261
+ description: 'Max number of results to return',
262
+ routing: { send: { type: 'query', property: 'limit' } },
263
+ },
264
+ ],
265
+ },
266
+ ];
267
+ //# sourceMappingURL=PassportDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PassportDescription.js","sourceRoot":"","sources":["../../../nodes/TracePass/PassportDescription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { INodeProperties } from 'n8n-workflow';
2
+ export declare const productOperations: INodeProperties[];
3
+ export declare const productFields: INodeProperties[];
@@ -0,0 +1,222 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.productFields = exports.productOperations = void 0;
4
+ exports.productOperations = [
5
+ {
6
+ displayName: 'Operation',
7
+ name: 'operation',
8
+ type: 'options',
9
+ noDataExpression: true,
10
+ displayOptions: {
11
+ show: { resource: ['product'] },
12
+ },
13
+ options: [
14
+ {
15
+ name: 'Create',
16
+ value: 'create',
17
+ action: 'Create a product',
18
+ description: 'Create a new product in the catalogue',
19
+ routing: {
20
+ request: {
21
+ method: 'POST',
22
+ url: '/api/v1/products',
23
+ },
24
+ },
25
+ },
26
+ {
27
+ name: 'Get',
28
+ value: 'get',
29
+ action: 'Get a product',
30
+ description: 'Retrieve a product by ID',
31
+ routing: {
32
+ request: {
33
+ method: 'GET',
34
+ url: '=/api/v1/products/{{$parameter["productId"]}}',
35
+ },
36
+ },
37
+ },
38
+ {
39
+ name: 'Get Many',
40
+ value: 'getAll',
41
+ action: 'Get many products',
42
+ description: 'List many products',
43
+ routing: {
44
+ request: {
45
+ method: 'GET',
46
+ url: '/api/v1/products',
47
+ },
48
+ },
49
+ },
50
+ {
51
+ name: 'Update',
52
+ value: 'update',
53
+ action: 'Update a product',
54
+ description: 'Update one or more product fields',
55
+ routing: {
56
+ request: {
57
+ method: 'PATCH',
58
+ url: '=/api/v1/products/{{$parameter["productId"]}}',
59
+ },
60
+ },
61
+ },
62
+ ],
63
+ default: 'getAll',
64
+ },
65
+ ];
66
+ exports.productFields = [
67
+ {
68
+ displayName: 'Product ID',
69
+ name: 'productId',
70
+ type: 'string',
71
+ required: true,
72
+ default: '',
73
+ placeholder: 'e.g. 65a0f1b2c3d4e5f6a7b8c9d0',
74
+ description: 'The TracePass ID of the product',
75
+ displayOptions: {
76
+ show: { resource: ['product'], operation: ['get', 'update'] },
77
+ },
78
+ },
79
+ {
80
+ displayName: 'Name',
81
+ name: 'name',
82
+ type: 'string',
83
+ required: true,
84
+ default: '',
85
+ placeholder: 'e.g. Acme Cordless Drill',
86
+ description: 'Name of the product',
87
+ displayOptions: {
88
+ show: { resource: ['product'], operation: ['create'] },
89
+ },
90
+ routing: {
91
+ send: { type: 'body', property: 'name' },
92
+ },
93
+ },
94
+ {
95
+ displayName: 'Model',
96
+ name: 'model',
97
+ type: 'string',
98
+ required: true,
99
+ default: '',
100
+ placeholder: 'e.g. ACD-2024-PRO',
101
+ description: 'Model or SKU identifier of the product',
102
+ displayOptions: {
103
+ show: { resource: ['product'], operation: ['create'] },
104
+ },
105
+ routing: {
106
+ send: { type: 'body', property: 'model' },
107
+ },
108
+ },
109
+ {
110
+ displayName: 'Category',
111
+ name: 'category',
112
+ type: 'options',
113
+ required: true,
114
+ default: 'battery',
115
+ description: 'Product category — determines the DPP template',
116
+ options: [
117
+ { name: 'Battery', value: 'battery' },
118
+ { name: 'Chemicals', value: 'chemicals' },
119
+ { name: 'Construction', value: 'construction' },
120
+ { name: 'Electronics', value: 'electronics' },
121
+ { name: 'FMCG', value: 'fmcg' },
122
+ { name: 'Furniture', value: 'furniture' },
123
+ { name: 'Jewelry', value: 'jewelry' },
124
+ { name: 'Packaging', value: 'packaging' },
125
+ { name: 'Steel', value: 'steel' },
126
+ { name: 'Textile', value: 'textile' },
127
+ { name: 'Toys', value: 'toys' },
128
+ { name: 'Tyres', value: 'tyres' },
129
+ ],
130
+ displayOptions: {
131
+ show: { resource: ['product'], operation: ['create'] },
132
+ },
133
+ routing: {
134
+ send: { type: 'body', property: 'category' },
135
+ },
136
+ },
137
+ {
138
+ displayName: 'Description',
139
+ name: 'description',
140
+ type: 'string',
141
+ default: '',
142
+ placeholder: 'e.g. 18V brushless cordless drill with two-speed transmission',
143
+ description: 'Optional description of the product',
144
+ displayOptions: {
145
+ show: { resource: ['product'], operation: ['create'] },
146
+ },
147
+ routing: {
148
+ send: { type: 'body', property: 'description' },
149
+ },
150
+ },
151
+ {
152
+ displayName: 'Update Fields',
153
+ name: 'updateFields',
154
+ type: 'collection',
155
+ placeholder: 'Add Field',
156
+ default: {},
157
+ displayOptions: {
158
+ show: { resource: ['product'], operation: ['update'] },
159
+ },
160
+ options: [
161
+ {
162
+ displayName: 'Name',
163
+ name: 'name',
164
+ type: 'string',
165
+ default: '',
166
+ routing: { send: { type: 'body', property: 'name' } },
167
+ },
168
+ {
169
+ displayName: 'Model',
170
+ name: 'model',
171
+ type: 'string',
172
+ default: '',
173
+ routing: { send: { type: 'body', property: 'model' } },
174
+ },
175
+ {
176
+ displayName: 'Description',
177
+ name: 'description',
178
+ type: 'string',
179
+ default: '',
180
+ routing: { send: { type: 'body', property: 'description' } },
181
+ },
182
+ ],
183
+ },
184
+ {
185
+ displayName: 'Filters',
186
+ name: 'filters',
187
+ type: 'collection',
188
+ placeholder: 'Add Filter',
189
+ default: {},
190
+ displayOptions: {
191
+ show: { resource: ['product'], operation: ['getAll'] },
192
+ },
193
+ options: [
194
+ {
195
+ displayName: 'Category',
196
+ name: 'category',
197
+ type: 'string',
198
+ default: '',
199
+ description: 'Filter by category key',
200
+ routing: { send: { type: 'query', property: 'category' } },
201
+ },
202
+ {
203
+ displayName: 'Search',
204
+ name: 'search',
205
+ type: 'string',
206
+ default: '',
207
+ description: 'Free-text search over product name and model',
208
+ routing: { send: { type: 'query', property: 'search' } },
209
+ },
210
+ {
211
+ displayName: 'Limit',
212
+ name: 'limit',
213
+ type: 'number',
214
+ typeOptions: { minValue: 1, maxValue: 100 },
215
+ default: 50,
216
+ description: 'Max number of results to return',
217
+ routing: { send: { type: 'query', property: 'limit' } },
218
+ },
219
+ ],
220
+ },
221
+ ];
222
+ //# sourceMappingURL=ProductDescription.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProductDescription.js","sourceRoot":"","sources":["../../../nodes/TracePass/ProductDescription.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { INodeType, INodeTypeDescription } from 'n8n-workflow';
2
+ export declare class TracePass implements INodeType {
3
+ description: INodeTypeDescription;
4
+ }
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TracePass = void 0;
4
+ const n8n_workflow_1 = require("n8n-workflow");
5
+ const ProductDescription_1 = require("./ProductDescription");
6
+ const PassportDescription_1 = require("./PassportDescription");
7
+ const EpcisDescription_1 = require("./EpcisDescription");
8
+ class TracePass {
9
+ constructor() {
10
+ this.description = {
11
+ displayName: 'TracePass',
12
+ name: 'tracePass',
13
+ icon: { light: 'file:../../icons/tracepass.svg', dark: 'file:../../icons/tracepass.dark.svg' },
14
+ group: ['transform'],
15
+ version: 1,
16
+ subtitle: '={{$parameter["operation"] + ": " + $parameter["resource"]}}',
17
+ description: 'Automate EU Digital Product Passport workflows with TracePass',
18
+ defaults: {
19
+ name: 'TracePass',
20
+ },
21
+ inputs: [n8n_workflow_1.NodeConnectionTypes.Main],
22
+ outputs: [n8n_workflow_1.NodeConnectionTypes.Main],
23
+ credentials: [
24
+ {
25
+ name: 'tracePassApi',
26
+ required: true,
27
+ },
28
+ ],
29
+ requestDefaults: {
30
+ baseURL: '={{$credentials.baseUrl}}',
31
+ headers: {
32
+ Accept: 'application/json',
33
+ 'Content-Type': 'application/json',
34
+ },
35
+ },
36
+ properties: [
37
+ {
38
+ displayName: 'Resource',
39
+ name: 'resource',
40
+ type: 'options',
41
+ noDataExpression: true,
42
+ options: [
43
+ {
44
+ name: 'EPCIS Event',
45
+ value: 'epcis',
46
+ description: 'GS1 EPCIS 2.0 supply-chain events',
47
+ },
48
+ {
49
+ name: 'Passport',
50
+ value: 'passport',
51
+ description: 'Create, read, and run lifecycle actions on Digital Product Passports',
52
+ },
53
+ {
54
+ name: 'Product',
55
+ value: 'product',
56
+ description: 'The catalogue layer — one product can have many passports',
57
+ },
58
+ ],
59
+ default: 'passport',
60
+ },
61
+ ...ProductDescription_1.productOperations,
62
+ ...ProductDescription_1.productFields,
63
+ ...PassportDescription_1.passportOperations,
64
+ ...PassportDescription_1.passportFields,
65
+ ...EpcisDescription_1.epcisOperations,
66
+ ...EpcisDescription_1.epcisFields,
67
+ ],
68
+ usableAsTool: true,
69
+ };
70
+ }
71
+ }
72
+ exports.TracePass = TracePass;
73
+ //# sourceMappingURL=TracePass.node.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TracePass.node.js","sourceRoot":"","sources":["../../../nodes/TracePass/TracePass.node.ts"],"names":[],"mappings":";;;AACA,+CAAmD;AAEnD,6DAAwE;AACxE,+DAA2E;AAC3E,yDAAkE;AAgBlE,MAAa,SAAS;IAAtB;QACC,gBAAW,GAAyB;YACnC,WAAW,EAAE,WAAW;YACxB,IAAI,EAAE,WAAW;YACjB,IAAI,EAAE,EAAE,KAAK,EAAE,gCAAgC,EAAE,IAAI,EAAE,qCAAqC,EAAE;YAC9F,KAAK,EAAE,CAAC,WAAW,CAAC;YACpB,OAAO,EAAE,CAAC;YACV,QAAQ,EAAE,8DAA8D;YACxE,WAAW,EAAE,+DAA+D;YAM5E,QAAQ,EAAE;gBACT,IAAI,EAAE,WAAW;aACjB;YACD,MAAM,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YAClC,OAAO,EAAE,CAAC,kCAAmB,CAAC,IAAI,CAAC;YACnC,WAAW,EAAE;gBACZ;oBACC,IAAI,EAAE,cAAc;oBACpB,QAAQ,EAAE,IAAI;iBACd;aACD;YACD,eAAe,EAAE;gBAChB,OAAO,EAAE,2BAA2B;gBACpC,OAAO,EAAE;oBACR,MAAM,EAAE,kBAAkB;oBAC1B,cAAc,EAAE,kBAAkB;iBAClC;aACD;YACD,UAAU,EAAE;gBACX;oBACC,WAAW,EAAE,UAAU;oBACvB,IAAI,EAAE,UAAU;oBAChB,IAAI,EAAE,SAAS;oBACf,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE;wBACR;4BACC,IAAI,EAAE,aAAa;4BACnB,KAAK,EAAE,OAAO;4BACd,WAAW,EAAE,mCAAmC;yBAChD;wBACD;4BACC,IAAI,EAAE,UAAU;4BAChB,KAAK,EAAE,UAAU;4BACjB,WAAW,EAAE,sEAAsE;yBACnF;wBACD;4BACC,IAAI,EAAE,SAAS;4BACf,KAAK,EAAE,SAAS;4BAChB,WAAW,EAAE,2DAA2D;yBACxE;qBACD;oBACD,OAAO,EAAE,UAAU;iBACnB;gBACD,GAAG,sCAAiB;gBACpB,GAAG,kCAAa;gBAChB,GAAG,wCAAkB;gBACrB,GAAG,oCAAc;gBACjB,GAAG,kCAAe;gBAClB,GAAG,8BAAW;aACd;YACD,YAAY,EAAE,IAAI;SAClB,CAAC;IACH,CAAC;CAAA;AAlED,8BAkEC"}
@@ -0,0 +1,31 @@
1
+ {
2
+ "node": "n8n-nodes-base.tracePass",
3
+ "nodeVersion": "1.0",
4
+ "codexVersion": "1.0",
5
+ "categories": ["Productivity", "Development"],
6
+ "alias": [
7
+ "DPP",
8
+ "Digital Product Passport",
9
+ "EPCIS",
10
+ "GS1",
11
+ "ESPR",
12
+ "EU Battery Regulation",
13
+ "Battery Passport",
14
+ "Sustainability",
15
+ "Supply Chain",
16
+ "Traceability",
17
+ "Compliance"
18
+ ],
19
+ "resources": {
20
+ "credentialDocumentation": [
21
+ {
22
+ "url": "https://www.tracepass.eu/docs/authentication"
23
+ }
24
+ ],
25
+ "primaryDocumentation": [
26
+ {
27
+ "url": "https://www.tracepass.eu/docs"
28
+ }
29
+ ]
30
+ }
31
+ }
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "n8n-nodes-tracepass",
3
+ "version": "1.0.0",
4
+ "description": "n8n community node for TracePass — automate EU Digital Product Passport workflows: products, passports, EPCIS supply-chain events.",
5
+ "keywords": [
6
+ "n8n-community-node-package",
7
+ "n8n",
8
+ "tracepass",
9
+ "digital-product-passport",
10
+ "dpp",
11
+ "epcis",
12
+ "gs1",
13
+ "espr",
14
+ "battery-passport",
15
+ "eu-battery-regulation",
16
+ "sustainability",
17
+ "supply-chain",
18
+ "traceability",
19
+ "compliance"
20
+ ],
21
+ "license": "MIT",
22
+ "homepage": "https://www.tracepass.eu",
23
+ "author": {
24
+ "name": "TracePass LTD",
25
+ "email": "info@tracepass.eu"
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/malinoto/n8n-nodes-tracepass.git"
30
+ },
31
+ "engines": {
32
+ "node": ">=20.15"
33
+ },
34
+ "scripts": {
35
+ "build": "n8n-node build",
36
+ "dev": "n8n-node dev",
37
+ "lint": "n8n-node lint",
38
+ "lint:fix": "n8n-node lint --fix",
39
+ "release": "n8n-node release",
40
+ "prepublishOnly": "n8n-node prerelease"
41
+ },
42
+ "files": [
43
+ "dist"
44
+ ],
45
+ "n8n": {
46
+ "n8nNodesApiVersion": 1,
47
+ "strict": true,
48
+ "credentials": [
49
+ "dist/credentials/TracePassApi.credentials.js"
50
+ ],
51
+ "nodes": [
52
+ "dist/nodes/TracePass/TracePass.node.js"
53
+ ]
54
+ },
55
+ "peerDependencies": {
56
+ "n8n-workflow": "*"
57
+ },
58
+ "devDependencies": {
59
+ "@n8n/node-cli": "*",
60
+ "eslint": "9.39.4",
61
+ "prettier": "3.8.3",
62
+ "typescript": "5.9.3"
63
+ }
64
+ }
package/package.json ADDED
@@ -0,0 +1,64 @@
1
+ {
2
+ "name": "n8n-nodes-tracepass",
3
+ "version": "1.0.0",
4
+ "description": "n8n community node for TracePass — automate EU Digital Product Passport workflows: products, passports, EPCIS supply-chain events.",
5
+ "keywords": [
6
+ "n8n-community-node-package",
7
+ "n8n",
8
+ "tracepass",
9
+ "digital-product-passport",
10
+ "dpp",
11
+ "epcis",
12
+ "gs1",
13
+ "espr",
14
+ "battery-passport",
15
+ "eu-battery-regulation",
16
+ "sustainability",
17
+ "supply-chain",
18
+ "traceability",
19
+ "compliance"
20
+ ],
21
+ "license": "MIT",
22
+ "homepage": "https://www.tracepass.eu",
23
+ "author": {
24
+ "name": "TracePass LTD",
25
+ "email": "info@tracepass.eu"
26
+ },
27
+ "repository": {
28
+ "type": "git",
29
+ "url": "git+https://github.com/malinoto/n8n-nodes-tracepass.git"
30
+ },
31
+ "engines": {
32
+ "node": ">=20.15"
33
+ },
34
+ "scripts": {
35
+ "build": "n8n-node build",
36
+ "dev": "n8n-node dev",
37
+ "lint": "n8n-node lint",
38
+ "lint:fix": "n8n-node lint --fix",
39
+ "release": "n8n-node release",
40
+ "prepublishOnly": "n8n-node prerelease"
41
+ },
42
+ "files": [
43
+ "dist"
44
+ ],
45
+ "n8n": {
46
+ "n8nNodesApiVersion": 1,
47
+ "strict": true,
48
+ "credentials": [
49
+ "dist/credentials/TracePassApi.credentials.js"
50
+ ],
51
+ "nodes": [
52
+ "dist/nodes/TracePass/TracePass.node.js"
53
+ ]
54
+ },
55
+ "peerDependencies": {
56
+ "n8n-workflow": "*"
57
+ },
58
+ "devDependencies": {
59
+ "@n8n/node-cli": "*",
60
+ "eslint": "9.39.4",
61
+ "prettier": "3.8.3",
62
+ "typescript": "5.9.3"
63
+ }
64
+ }