n8n-nodes-matrix42 0.2.1 → 0.3.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 CHANGED
@@ -1,17 +1,27 @@
1
1
  # n8n-nodes-matrix42
2
2
 
3
- This is an n8n community node that integrates with the Matrix42 ESMP Web Services API. It allows you to retrieve and work with Data Fragments from Matrix42 Data Definitions directly in your n8n workflows.
3
+ [![CI](https://github.com/sus-tech-gmbh/n8n-nodes-matrix42/actions/workflows/ci.yml/badge.svg)](https://github.com/sus-tech-gmbh/n8n-nodes-matrix42/actions/workflows/ci.yml)
4
+ [![npm version](https://img.shields.io/npm/v/n8n-nodes-matrix42.svg)](https://www.npmjs.com/package/n8n-nodes-matrix42)
5
+ [![npm downloads](https://img.shields.io/npm/dm/n8n-nodes-matrix42.svg)](https://www.npmjs.com/package/n8n-nodes-matrix42)
6
+ [![node](https://img.shields.io/node/v/n8n-nodes-matrix42.svg)](https://nodejs.org)
7
+ [![License: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE.md)
8
+ [![n8n](https://img.shields.io/badge/n8n-community_node-EA4B71.svg)](https://docs.n8n.io/integrations/community-nodes/)
9
+ [![PRs welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md)
4
10
 
5
- Matrix42’s ESMP API exposes CRUD‑style endpoints for data fragments, supporting OData‑like filtering, column selection, paging, sorting, and more.
11
+ This is an n8n community node that integrates with the Matrix42 ESMP Web Services API: tickets, data fragments and objects, data queries, imports, file storage, and a polling trigger.
6
12
 
7
13
  [n8n](https://n8n.io/) is a [fair-code licensed](https://docs.n8n.io/reference/license/) workflow automation platform.
8
14
 
9
- [Installation](#installation)
10
- [Operations](#operations)
11
- [Credentials](#credentials)
12
- [Compatibility](#compatibility)
13
- [Resources](#resources)
14
- [Version history](#version-history)
15
+ | Contents | |
16
+ | --- | --- |
17
+ | [Installation](#installation) | Install as an n8n community node |
18
+ | [Operations](#operations) | All resources, operations and the trigger node |
19
+ | [Credentials](#credentials) | Webservice Token and Basic auth setup |
20
+ | [Compatibility](#compatibility) | Supported n8n, Node.js and Matrix42 versions |
21
+ | [Resources](#resources) | Documentation links |
22
+ | [Version History](#version-history) | What changed in each release |
23
+ | [Project](#project) | Contributing, code of conduct, security policy, releases |
24
+ | [Legal & Disclaimer](#legal--disclaimer) | Trademark and API-usage notes |
15
25
 
16
26
  ## Installation
17
27
 
@@ -19,91 +29,76 @@ Follow the [installation guide](https://docs.n8n.io/integrations/community-nodes
19
29
 
20
30
  ## Operations
21
31
 
22
- This node supports multiple operations across different resources:
23
-
24
32
  ### Data Fragment
25
33
 
26
- - **Get Many** (`getAll`): Retrieve data fragments matching a search expression, with Return All / Limit paging.
27
-
28
- - **Create** (`create`): Create a new data fragment in the specified Data Definition.
29
-
30
- - **Update** (`update`): Update an existing data fragment.
31
-
32
- - **Delete** (`delete`): Delete a data fragment by its ID.
33
-
34
+ - **Get Many** (`getAll`): Retrieve data fragments matching a search expression, with Return All / Limit paging.
35
+ - **Create** (`create`): Create a new data fragment in the specified Data Definition.
36
+ - **Update** (`update`): Update an existing data fragment.
37
+ - **Delete** (`delete`): Delete a data fragment by its ID.
34
38
 
35
39
  ### Data Object
36
40
 
37
- - **Create** (`create`): Create a new object for a Configuration Item.
38
-
39
- - **Get** (`get`): Retrieve a single object by its ID.
40
-
41
- - **Update** (`update`): Update an existing object.
42
-
43
- - **Delete** (`delete`): Delete an object by its ID.
44
-
41
+ - **Create** (`create`): Create a new object for a Configuration Item.
42
+ - **Get** (`get`): Retrieve a single object by its ID.
43
+ - **Update** (`update`): Update an existing object.
44
+ - **Delete** (`delete`): Delete an object by its ID.
45
45
 
46
46
  ### Data Query
47
47
 
48
- - **Get Data** (`getData`): Read the list items of a data query, with Return All / paging (zero-based pages). Uses the `POST` variant so a structured **User Filters** group (`QueryFilterGroup`) can be passed in the body for ad-hoc filtering.
48
+ - **Get Data** (`getData`): Read the list items of a data query, with paging and an optional structured **User Filters** body.
49
49
 
50
50
  ### Ticket
51
51
 
52
- - **Create** (`create`): Open a new ticket in the Service Desk (with a selectable initial **State**).
53
-
54
- - **Close** (`close`): Close an Incident or Service Request.
55
-
56
- - **Transform** (`transform`): Transform a ticket into another type.
57
-
58
- - **Add Journal Entry** (`addJournalEntry`): Add a journal entry to a ticket.
52
+ - **Create** (`create`): Open a new ticket in the Service Desk, with a selectable initial State.
53
+ - **Close** (`close`): Close an Incident or Service Request.
54
+ - **Transform** (`transform`): Transform a ticket into another type.
55
+ - **Add Journal Entry** (`addJournalEntry`): Add a comment to a ticket, optionally with template parameters (Name/Value/Format rows) and a custom creator.
59
56
 
60
57
  ### Storage
61
58
 
62
- - **Upload** (`upload`): Upload a file and attach it to a Configuration Item.
59
+ - **Upload** (`upload`): Upload a file and attach it to a Configuration Item.
63
60
 
64
61
  ### Import
65
62
 
66
- - **Execute** (`execute`): Run a predefined import definition to ingest data.
63
+ - **Execute** (`execute`): Run a predefined import definition to ingest data.
67
64
 
68
- ## Credentials
65
+ ### Matrix42 Trigger
69
66
 
70
- > **Prerequisite:** You must have access to a running Matrix42 instance with appropriate API permissions.
67
+ The package also ships a **Matrix42 Trigger** node - a polling trigger that starts workflows when records appear in Matrix42:
71
68
 
72
- This node supports two authentication methods. Configure these under **Workflow Credentials**.
69
+ - **Ticket Created** (default): fires for every new Service Desk ticket, with an optional ticket-type filter (e.g. only Incidents).
70
+ - **Object Created**: same for any data definition, watched through a configurable creation-date attribute.
71
+ - **Object Created or Updated**: fires for new and changed records of any class, via the universal `TimeStamp` column.
73
72
 
74
- ### Matrix42 Webservice Token Auth
75
-
76
- 1. **Server URL** — Your Matrix42 server URL (e.g. `https://matrix42.example.com`).
73
+ An ASQL filter, extra output columns, a per-poll limit and a Fetch Full Object option are available under Additional Fields. Output rows include the object ID as `ObjectID`, ready for the ticket operations. On activation the trigger starts from the newest existing record, so historic records never fire; "Fetch Test Event" just returns the newest matching record as a sample.
77
74
 
78
- 2. **Webservice Token** — Your Matrix42 API Token.
79
-
80
- 3. **Ignore SSL Issues (Insecure)** — Enable when the server uses a self‑signed certificate.
75
+ ## Credentials
81
76
 
77
+ > **Prerequisite:** You must have access to a running Matrix42 instance with appropriate API permissions.
82
78
 
83
- On execution, the node:
79
+ This node supports two authentication methods. Configure these under **Workflow -> Credentials**.
84
80
 
85
- - Exchanges the API Token for a short‑lived Bearer (JWT) access token via `GenerateAccessTokenFromApiToken` (handled automatically in the credential's pre‑authentication step; the access token is cached and refreshed on expiry).
81
+ ### Matrix42 Webservice Token Auth
86
82
 
87
- - Uses the access token in the `Authorization` header for all subsequent calls.
83
+ 1. **Server URL** - Your Matrix42 server URL (e.g. `https://matrix42.example.com`).
84
+ 2. **Webservice Token** - Your Matrix42 API Token.
85
+ 3. **Ignore SSL Issues (Insecure)** - Enable when the server uses a self-signed certificate.
88
86
 
87
+ The node exchanges the API Token for a short-lived access token and refreshes it automatically before it expires, then sends it as the Bearer token on every request.
89
88
 
90
- > **Selfsigned certificates**: enable **Ignore SSL Issues (Insecure)** on the credential, or add the server's CA certificate to n8n's trusted store (see https://docs.n8n.io/hosting/configuration/configuration-examples/custom-certificate-authority/).
89
+ > **Self-signed certificates**: enable **Ignore SSL Issues (Insecure)** on the credential, or add the server's CA certificate to n8n's trusted store (see https://docs.n8n.io/hosting/configuration/configuration-examples/custom-certificate-authority/).
91
90
 
92
91
  ### Matrix42 Basic Auth
93
92
 
94
- 1. **Server URL** As above.
95
-
96
- 2. **User** and **Password** Your Matrix42 user credentials.
97
-
98
- 3. **Ignore SSL Issues (Insecure)** — As above.
93
+ 1. **Server URL** - As above.
94
+ 2. **User** and **Password** - Your Matrix42 user credentials.
95
+ 3. **Ignore SSL Issues (Insecure)** - As above.
99
96
 
100
97
  ## Compatibility
101
98
 
102
- - **n8n**: Node API version 1; built and tested against `n8n-workflow` 2.x. Requires n8n 1.85 or later (uses `NodeConnectionTypes`). Last tested with n8n 2.2.3.
103
-
104
- - **Node.js**: v22 or higher.
105
-
106
- - **Matrix42 ESMP API**: Last tested against Matrix42 26.1.0.1390.
99
+ - **n8n**: Node API version 1; built and tested against `n8n-workflow` 2.x. Requires n8n 1.85 or later. Last tested with n8n 2.36.9.
100
+ - **Node.js**: v22 or higher.
101
+ - **Matrix42 ESMP API**: Last tested against Matrix42 26.1.
107
102
 
108
103
  ## Resources
109
104
 
@@ -112,41 +107,47 @@ On execution, the node:
112
107
 
113
108
  ## Version History
114
109
 
110
+ **0.3.1:**
111
+ - Network/TLS errors (no HTTP status) are now wrapped in `NodeApiError` and surface as readable errors in the n8n UI.
112
+
113
+ **0.3.0:**
114
+ - New **Matrix42 Trigger** node: polling trigger with Ticket Created (default), Object Created and Object Created or Updated events, server-side type/ASQL filtering and an optional full-object fetch.
115
+ - Fixed Webservice Token auth failing once the access token expired (Matrix42 answers HTTP 406, which n8n's built-in refresh never reacts to); the node now refreshes the token itself.
116
+ - **Add Journal Entry** reworked: Parameters as Name/Value/Format rows, Creator optional (empty = API user), Type ID validated.
117
+ - Matrix42 validation rejections now name the rejected fields instead of a bare "Bad request".
118
+
115
119
  **0.2.1:**
116
- - Wrap runtime execution errors in `NodeApiError` so HTTP status codes and response context surface in the n8n UI.
117
- - Set the codex `nodeVersion` to `1.0` (schema value, independent of the node's runtime version).
120
+ - Wrap runtime execution errors in `NodeApiError` so HTTP status codes surface in the n8n UI.
121
+ - Set the codex `nodeVersion` to `1.0`.
118
122
 
119
123
  **0.2.0:**
120
- - **Breaking (node v2):** the `ASQL` resource was split into **Data Fragment** and **Data Object**, and operations were renamed to the standard CRUD set (`Get Many`, `Create`, `Update`, `Delete`, `Get`, `Transform`, `Close`, `Add Journal Entry`, `Upload`, `Execute`). Existing workflows using the node must reselect the resource/operation.
121
- - Token auth now performs the documented APItoken accesstoken exchange
122
- - Added an **Ignore SSL Issues (Insecure)** toggle to both credentials.
123
- - Added a **Data Query** resource with **Get Data** (POST-based, paged, with Return All and a structured **User Filters** body).
124
- - Ticket **Create** gained a selectable **State** field (loaded from the instance's activity states; defaults to New/200) and an **Extra Properties** collection for setting arbitrary/custom ticket attributes as name/value pairs.
125
- - Added an optional **Response Language** credential field, sent as the `Explicit-Language` header on every request.
126
- - `Get Many` (fragments) gained **Return All / Limit** paging.
124
+ - **Breaking (node v2):** the `ASQL` resource was split into **Data Fragment** and **Data Object**, and operations were renamed to the standard CRUD set. Existing workflows must reselect the resource/operation.
125
+ - Token auth now performs the documented API-token -> access-token exchange.
126
+ - New **Data Query** resource (Get Data with paging and User Filters).
127
+ - Ticket **Create**: selectable **State** field and an **Extra Properties** collection for custom attributes.
128
+ - **Ignore SSL Issues (Insecure)** toggle and optional **Response Language** field on the credentials.
129
+ - **Get Many** (fragments) gained Return All / Limit paging.
127
130
 
128
131
  **0.1.3:**
129
- - Added Operations:
130
- - Tickets: `addJournalEntry`
132
+ - Added Ticket: `addJournalEntry`.
131
133
 
132
134
  **0.1.2:**
133
- - Added Operations:
134
- - Storage Operations: `uploadFile`
135
+ - Added Storage: `uploadFile`.
135
136
 
136
137
  **0.1.1:**
137
- - Bug Fixes
138
+ - Bug fixes.
138
139
 
139
140
  **0.1.0:**
140
- - Initial release supporting operations across multiple resources:
141
- - Data Fragments: `getFragments`, `addFragment`, `updateFragment`, `deleteFragment`
142
- - Data Objects: `addObject`, `getObject`, `updateObject`, `deleteObject`
143
- - Tickets: `createTicket`, `closeTicket`, `transformTicket`
144
- - Import: `executeImportDefinition`
141
+ - Initial release: Data Fragment and Data Object CRUD, Ticket create/close/transform, Import execute; Token and Basic authentication.
142
+
143
+ ## Project
145
144
 
146
- - Authentication methods:
147
- - Matrix42 Token API (API Token ↔︎ Bearer JWT exchange)
148
- - Matrix42 Basic API (HTTP Basic Authentication)
149
-
145
+ | | |
146
+ | --- | --- |
147
+ | **Contributing** | [CONTRIBUTING.md](CONTRIBUTING.md) |
148
+ | **Code of conduct** | [CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md) |
149
+ | **Security policy** | [SECURITY.md](SECURITY.md) |
150
+ | **Releases** | [GitHub releases](https://github.com/sus-tech-gmbh/n8n-nodes-matrix42/releases), published to npm from CI |
150
151
 
151
152
  ## Legal & Disclaimer
152
153
 
@@ -156,7 +157,7 @@ It uses only documented, publicly available endpoints as described in the offici
156
157
 
157
158
  Matrix42 **explicitly provides** a Public API and token-based authentication mechanism to support
158
159
  third-party integrations. This node simply wraps those endpoints for easier use within n8n.
159
- There is **no violation** of Matrix42s licensing or terms of service in doing so.
160
+ There is **no violation** of Matrix42's licensing or terms of service in doing so.
160
161
 
161
162
  > **No Affiliation:**
162
163
  > This project is **not affiliated with, endorsed, or sponsored by Matrix42 GmbH**.
@@ -49,6 +49,7 @@ class Matrix42TokenApi {
49
49
  type: 'hidden',
50
50
  typeOptions: {
51
51
  expirable: true,
52
+ password: true,
52
53
  },
53
54
  default: '',
54
55
  },
@@ -1 +1 @@
1
- {"version":3,"file":"Matrix42TokenApi.credentials.js","sourceRoot":"","sources":["../../credentials/Matrix42TokenApi.credentials.ts"],"names":[],"mappings":";;;AASA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAE1B,gBAAW,GAAG,oCAAoC,CAAC;QAEnD,qBAAgB,GACf,0FAA0F,CAAC;QAE5F,SAAI,GAAG,mBAA4B,CAAC;QAEpC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,mCAAmC;gBAChD,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,iGAAiG;gBACvG,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,8BAA8B;gBAC3C,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EACV,qIAAqI;aACtI;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,mJAAmJ;aACzJ;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,SAAS,EAAE,IAAI;iBACf;gBACD,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAoBF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,sCAAsC;iBACrD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kDAAkD;gBAC3D,GAAG,EAAE,iEAAiE;gBACtE,EAAE,EAAE;oBACH,QAAQ,EAAE,CAAC;iBACX;gBACD,4BAA4B,EAAE,0CAA0C;aACxE;SACD,CAAC;IACH,CAAC;IArCA,KAAK,CAAC,iBAAiB,CAA2B,WAA2C;QAC5F,MAAM,SAAS,GAAI,WAAW,CAAC,SAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAExE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACpD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,SAAS,2DAA2D;YAC5E,4BAA4B,EAAE,WAAW,CAAC,sBAAsB,KAAK,IAAI;YACzE,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,CAAC,eAAe,EAAE;aACtD;YACD,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,IAAI;SACV,CAAC,CAAyB,CAAC;QAE5B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;CAqBD;AA/FD,4CA+FC"}
1
+ {"version":3,"file":"Matrix42TokenApi.credentials.js","sourceRoot":"","sources":["../../credentials/Matrix42TokenApi.credentials.ts"],"names":[],"mappings":";;;AASA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAE1B,gBAAW,GAAG,oCAAoC,CAAC;QAEnD,qBAAgB,GACf,0FAA0F,CAAC;QAE5F,SAAI,GAAG,mBAA4B,CAAC;QAEpC,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,mCAAmC;gBAChD,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,kBAAkB;gBAC/B,IAAI,EAAE,iBAAiB;gBACvB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,iGAAiG;gBACvG,QAAQ,EAAE,IAAI;aACd;YACD;gBACC,WAAW,EAAE,8BAA8B;gBAC3C,IAAI,EAAE,wBAAwB;gBAC9B,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,KAAK;gBACd,WAAW,EACV,qIAAqI;aACtI;YACD;gBACC,WAAW,EAAE,mBAAmB;gBAChC,IAAI,EAAE,kBAAkB;gBACxB,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,EAAE;gBACX,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,mJAAmJ;aACzJ;YACD;gBACC,WAAW,EAAE,cAAc;gBAC3B,IAAI,EAAE,aAAa;gBACnB,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE;oBACZ,SAAS,EAAE,IAAI;oBACf,QAAQ,EAAE,IAAI;iBACd;gBACD,OAAO,EAAE,EAAE;aACX;SACD,CAAC;QAoBF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,sCAAsC;iBACrD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,kDAAkD;gBAC3D,GAAG,EAAE,iEAAiE;gBACtE,EAAE,EAAE;oBACH,QAAQ,EAAE,CAAC;iBACX;gBACD,4BAA4B,EAAE,0CAA0C;aACxE;SACD,CAAC;IACH,CAAC;IArCA,KAAK,CAAC,iBAAiB,CAA2B,WAA2C;QAC5F,MAAM,SAAS,GAAI,WAAW,CAAC,SAAoB,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAExE,MAAM,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC;YACpD,MAAM,EAAE,MAAM;YACd,GAAG,EAAE,GAAG,SAAS,2DAA2D;YAC5E,4BAA4B,EAAE,WAAW,CAAC,sBAAsB,KAAK,IAAI;YACzE,OAAO,EAAE;gBACR,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,WAAW,CAAC,eAAe,EAAE;aACtD;YACD,IAAI,EAAE,EAAE;YACR,IAAI,EAAE,IAAI;SACV,CAAC,CAAyB,CAAC;QAE5B,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;IAClC,CAAC;CAqBD;AAhGD,4CAgGC"}
@@ -1,4 +1,6 @@
1
- import type { IDataObject, IExecuteFunctions, IHookFunctions, IHttpRequestMethods, ILoadOptionsFunctions } from 'n8n-workflow';
1
+ import type { IDataObject, IExecuteFunctions, IHookFunctions, IHttpRequestMethods, ILoadOptionsFunctions, IPollFunctions } from 'n8n-workflow';
2
+ type Matrix42Context = IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions | IPollFunctions;
2
3
  export declare function normalizeServerUrl(serverUrl: string): string;
3
4
  export declare function escapeAsqlString(value: string): string;
4
- export declare function matrix42ApiRequest(this: IHookFunctions | IExecuteFunctions | ILoadOptionsFunctions, method: IHttpRequestMethods, endpoint: `/${string}`, body: object, query?: IDataObject, uri?: string, contentType?: string): Promise<any>;
5
+ export declare function matrix42ApiRequest(this: Matrix42Context, method: IHttpRequestMethods, endpoint: `/${string}`, body: object, query?: IDataObject, uri?: string, contentType?: string): Promise<any>;
6
+ export {};
@@ -3,16 +3,85 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.normalizeServerUrl = normalizeServerUrl;
4
4
  exports.escapeAsqlString = escapeAsqlString;
5
5
  exports.matrix42ApiRequest = matrix42ApiRequest;
6
+ const n8n_workflow_1 = require("n8n-workflow");
7
+ const EXPIRY_BUFFER_MS = 60000;
8
+ const FALLBACK_LIFETIME_MS = 5 * 60000;
9
+ const accessTokenCache = new WeakMap();
6
10
  function normalizeServerUrl(serverUrl) {
7
11
  return serverUrl.replace(/\/+$/, '');
8
12
  }
9
13
  function escapeAsqlString(value) {
10
14
  return String(value !== null && value !== void 0 ? value : '').replace(/'/g, "''");
11
15
  }
16
+ function decodeJwtExpiryMs(token) {
17
+ try {
18
+ const payload = JSON.parse(Buffer.from(token.split('.')[1], 'base64url').toString('utf8'));
19
+ if (typeof payload.exp === 'number' && Number.isFinite(payload.exp)) {
20
+ return payload.exp * 1000;
21
+ }
22
+ }
23
+ catch {
24
+ }
25
+ return undefined;
26
+ }
27
+ async function matrix42RawRequest(options) {
28
+ var _a, _b, _c;
29
+ try {
30
+ const response = (await this.helpers.httpRequest({
31
+ ...options,
32
+ returnFullResponse: true,
33
+ ignoreHttpStatusErrors: true,
34
+ }));
35
+ return { statusCode: response.statusCode, body: response.body };
36
+ }
37
+ catch (error) {
38
+ const thrown = error;
39
+ const statusCode = Number((_b = (_a = thrown === null || thrown === void 0 ? void 0 : thrown.response) === null || _a === void 0 ? void 0 : _a.status) !== null && _b !== void 0 ? _b : thrown === null || thrown === void 0 ? void 0 : thrown.httpCode);
40
+ if (Number.isFinite(statusCode) && statusCode > 0) {
41
+ return { statusCode, body: (_c = thrown === null || thrown === void 0 ? void 0 : thrown.response) === null || _c === void 0 ? void 0 : _c.data, raw: error };
42
+ }
43
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), error);
44
+ }
45
+ }
46
+ async function getAccessToken(credentials, forceRefresh = false) {
47
+ var _a, _b, _c, _d;
48
+ const cached = accessTokenCache.get(this);
49
+ if (!forceRefresh && cached && cached.expiresAt - EXPIRY_BUFFER_MS > Date.now()) {
50
+ return cached.accessToken;
51
+ }
52
+ const response = await matrix42RawRequest.call(this, {
53
+ method: 'POST',
54
+ url: `${normalizeServerUrl(credentials.serverUrl)}/m42Services/api/ApiToken/GenerateAccessTokenFromApiToken`,
55
+ headers: {
56
+ 'Content-Type': 'application/json',
57
+ Authorization: `Bearer ${credentials.webserviceToken}`,
58
+ },
59
+ body: {},
60
+ json: true,
61
+ skipSslCertificateValidation: credentials.allowUnauthorizedCerts === true,
62
+ });
63
+ const rawToken = response.statusCode >= 200 && response.statusCode < 300
64
+ ? (_a = response.body) === null || _a === void 0 ? void 0 : _a.RawToken
65
+ : undefined;
66
+ if (!rawToken) {
67
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), ((_c = (_b = response.raw) !== null && _b !== void 0 ? _b : response.body) !== null && _c !== void 0 ? _c : {}), {
68
+ message: `Matrix42 rejected the access-token exchange (HTTP ${response.statusCode})`,
69
+ description: 'Check the Webservice Token and Server URL on the Matrix42 credential. The token may have been revoked or expired.',
70
+ httpCode: String(response.statusCode),
71
+ });
72
+ }
73
+ accessTokenCache.set(this, {
74
+ accessToken: rawToken,
75
+ expiresAt: (_d = decodeJwtExpiryMs(rawToken)) !== null && _d !== void 0 ? _d : Date.now() + FALLBACK_LIFETIME_MS,
76
+ });
77
+ return rawToken;
78
+ }
12
79
  async function matrix42ApiRequest(method, endpoint, body, query, uri, contentType = 'application/json') {
80
+ var _a, _b;
13
81
  const authenticationMethod = this.getNodeParameter('authentication', 0);
14
82
  const credentialType = authenticationMethod === 'basic' ? 'matrix42BasicApi' : 'matrix42TokenApi';
15
- const { serverUrl, allowUnauthorizedCerts, explicitLanguage } = await this.getCredentials(credentialType);
83
+ const credentials = await this.getCredentials(credentialType);
84
+ const { serverUrl, allowUnauthorizedCerts, explicitLanguage } = credentials;
16
85
  const isJson = contentType === null || contentType === void 0 ? void 0 : contentType.toLowerCase().includes('application/json');
17
86
  const hasBody = method !== 'GET' && method !== 'HEAD' && body != null && Object.keys(body).length > 0;
18
87
  const headers = {
@@ -33,6 +102,44 @@ async function matrix42ApiRequest(method, endpoint, body, query, uri, contentTyp
33
102
  if (options.body === undefined) {
34
103
  delete options.body;
35
104
  }
36
- return await this.helpers.httpRequestWithAuthentication.call(this, credentialType, options);
105
+ if (authenticationMethod === 'basic') {
106
+ return await this.helpers.httpRequestWithAuthentication.call(this, credentialType, options);
107
+ }
108
+ const sendWithToken = async (accessToken) => await matrix42RawRequest.call(this, {
109
+ ...options,
110
+ headers: { ...headers, Authorization: `Bearer ${accessToken}` },
111
+ });
112
+ let response = await sendWithToken(await getAccessToken.call(this, credentials));
113
+ if (response.statusCode === 401 || response.statusCode === 406) {
114
+ response = await sendWithToken(await getAccessToken.call(this, credentials, true));
115
+ }
116
+ if (response.statusCode >= 200 && response.statusCode < 300) {
117
+ return response.body;
118
+ }
119
+ const isAuthFailure = response.statusCode === 401 || response.statusCode === 406;
120
+ throw new n8n_workflow_1.NodeApiError(this.getNode(), ((_b = (_a = response.raw) !== null && _a !== void 0 ? _a : response.body) !== null && _b !== void 0 ? _b : {}), {
121
+ message: `Matrix42 request failed (HTTP ${response.statusCode})`,
122
+ description: isAuthFailure
123
+ ? 'Matrix42 rejected the access token even after refreshing it. Check that the Webservice Token is still valid and its account has API access.'
124
+ : describeResponseBody(response.body),
125
+ httpCode: String(response.statusCode),
126
+ });
127
+ }
128
+ function describeResponseBody(body) {
129
+ if (Array.isArray(body) &&
130
+ body.length > 0 &&
131
+ body.every((entry) => entry !== null && typeof entry === 'object' && 'Name' in entry)) {
132
+ const fields = body.map((entry) => {
133
+ var _a;
134
+ const message = String((_a = entry.Message) !== null && _a !== void 0 ? _a : '').trim();
135
+ return message ? `${String(entry.Name)} (${message})` : String(entry.Name);
136
+ });
137
+ return `The server rejected the following field(s): ${fields.join(', ')}`;
138
+ }
139
+ if (typeof body === 'string')
140
+ return body;
141
+ if (body !== undefined && body !== null)
142
+ return JSON.stringify(body);
143
+ return undefined;
37
144
  }
38
145
  //# sourceMappingURL=GenericFunctions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Matrix42/GenericFunctions.ts"],"names":[],"mappings":";;AAgBA,gDAEC;AAMD,4CAEC;AAED,gDAyCC;AArDD,SAAgB,kBAAkB,CAAC,SAAiB;IACnD,OAAO,SAAS,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AACtC,CAAC;AAMD,SAAgB,gBAAgB,CAAC,KAAa;IAC7C,OAAO,MAAM,CAAC,KAAK,aAAL,KAAK,cAAL,KAAK,GAAI,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChD,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAEvC,MAA2B,EAC3B,QAAsB,EACtB,IAAY,EACZ,KAAmB,EACnB,GAAY,EACZ,cAAsB,kBAAkB;IAExC,MAAM,oBAAoB,GAAG,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,CAAW,CAAC;IAClF,MAAM,cAAc,GAAG,oBAAoB,KAAK,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,kBAAkB,CAAC;IAClG,MAAM,EAAE,SAAS,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,GAC5D,MAAM,IAAI,CAAC,cAAc,CAAsB,cAAc,CAAC,CAAC;IAEhE,MAAM,MAAM,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,WAAW,GAAG,QAAQ,CAAC,kBAAkB,CAAC,CAAC;IACvE,MAAM,OAAO,GACZ,MAAM,KAAK,KAAK,IAAI,MAAM,KAAK,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvF,MAAM,OAAO,GAAgB;QAC5B,cAAc,EAAE,WAAW;KAC3B,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACtB,OAAO,CAAC,mBAAmB,CAAC,GAAG,gBAAgB,CAAC;IACjD,CAAC;IAED,MAAM,OAAO,GAAwB;QACpC,OAAO;QACP,MAAM;QACN,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS;QAChC,EAAE,EAAE,KAAK;QACT,GAAG,EAAE,GAAG,IAAI,GAAG,kBAAkB,CAAC,SAAS,CAAC,mBAAmB,QAAQ,EAAE;QACzE,IAAI,EAAE,MAAM;QACZ,4BAA4B,EAAE,sBAAsB,KAAK,IAAI;KAC7D,CAAC;IAEF,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAChC,OAAO,OAAO,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AAC7F,CAAC"}
1
+ {"version":3,"file":"GenericFunctions.js","sourceRoot":"","sources":["../../../nodes/Matrix42/GenericFunctions.ts"],"names":[],"mappings":"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"}
@@ -148,28 +148,71 @@ async function transformTicket(i) {
148
148
  const returnData = [{ Message: 'Success' }];
149
149
  return returnData;
150
150
  }
151
+ const GUID_RE = /^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/;
152
+ function isBlankParameterRow(raw) {
153
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
154
+ return false;
155
+ }
156
+ return Object.values(raw).every((value) => value === '' || value === undefined || value === null);
157
+ }
158
+ function toJournalParameter(raw, index) {
159
+ var _a, _b, _c, _d, _e;
160
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw)) {
161
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Journal parameter ${index + 1} must be an object with "Name" and "Value" keys`);
162
+ }
163
+ const entry = raw;
164
+ const name = (_a = entry.Name) !== null && _a !== void 0 ? _a : entry.name;
165
+ if (typeof name !== 'string' || name.trim() === '') {
166
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `Journal parameter ${index + 1} needs a non-empty "Name"`);
167
+ }
168
+ const parameter = { Name: name, Value: (_c = (_b = entry.Value) !== null && _b !== void 0 ? _b : entry.value) !== null && _c !== void 0 ? _c : '' };
169
+ const format = (_d = entry.Format) !== null && _d !== void 0 ? _d : entry.format;
170
+ if (typeof format === 'string' && format !== '') {
171
+ parameter.Format = format;
172
+ }
173
+ const isCurrency = (_e = entry.IsCurrency) !== null && _e !== void 0 ? _e : entry.isCurrency;
174
+ if (typeof isCurrency === 'boolean') {
175
+ parameter.IsCurrency = isCurrency;
176
+ }
177
+ return parameter;
178
+ }
151
179
  async function addJournalEntry(i) {
152
- var _a, _b;
180
+ var _a, _b, _c, _d;
153
181
  const ticketEoid = this.getNodeParameter('ticketEoid', i);
154
182
  const comments = this.getNodeParameter('comments', i);
155
183
  const entryType = toNumber.call(this, this.getNodeParameter('entryType', i), 'Type');
156
- const creator = this.getNodeParameter('creator', i);
184
+ const creator = this.getNodeParameter('creator', i, '');
157
185
  const visibleInPortal = this.getNodeParameter('visibleInPortal', i);
158
186
  const additionalFields = this.getNodeParameter('additionalFields', i, {});
187
+ const rawParameters = [
188
+ ...((_b = (_a = additionalFields.journalParameters) === null || _a === void 0 ? void 0 : _a.parameter) !== null && _b !== void 0 ? _b : []),
189
+ ...parseJsonArray(additionalFields.parameters, 'Parameters'),
190
+ ];
191
+ const parameters = rawParameters
192
+ .filter((raw) => !isBlankParameterRow(raw))
193
+ .map((raw, index) => toJournalParameter.call(this, raw, index));
159
194
  const body = {
160
195
  ObjectId: ticketEoid,
161
- Publish: (_a = additionalFields.publish) !== null && _a !== void 0 ? _a : false,
196
+ Publish: (_c = additionalFields.publish) !== null && _c !== void 0 ? _c : false,
162
197
  Comments: comments,
163
198
  EntryType: entryType,
164
- Creator: creator,
165
199
  VisibleInPortal: visibleInPortal,
166
- Parameters: parseJsonArray(additionalFields.parameters, 'Parameters'),
167
- IsFromEditDialog: (_b = additionalFields.isFromEditDialog) !== null && _b !== void 0 ? _b : false,
168
- ...(additionalFields.typeId !== undefined && { TypeId: additionalFields.typeId }),
200
+ Parameters: parameters,
201
+ IsFromEditDialog: (_d = additionalFields.isFromEditDialog) !== null && _d !== void 0 ? _d : false,
169
202
  ...(additionalFields.fileIds !== undefined && {
170
203
  FileIds: parseJsonArray(additionalFields.fileIds, 'File IDs'),
171
204
  }),
172
205
  };
206
+ if (!isBlankRelation(creator)) {
207
+ body.Creator = creator;
208
+ }
209
+ const typeId = additionalFields.typeId;
210
+ if (typeId !== undefined && typeId !== '') {
211
+ if (!GUID_RE.test(typeId)) {
212
+ throw new n8n_workflow_1.NodeOperationError(this.getNode(), `The "Type ID" field must be a GUID, got: ${typeId}`);
213
+ }
214
+ body.TypeId = typeId;
215
+ }
173
216
  await GenericFunctions_1.matrix42ApiRequest.call(this, 'POST', '/journal/Add', body, {});
174
217
  const returnData = [{ Message: 'Success' }];
175
218
  return returnData;
@@ -1 +1 @@
1
- {"version":3,"file":"Matrix42TicketFunctions.js","sourceRoot":"","sources":["../../../nodes/Matrix42/Matrix42TicketFunctions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Matrix42TicketFunctions.js","sourceRoot":"","sources":["../../../nodes/Matrix42/Matrix42TicketFunctions.ts"],"names":[],"mappings":"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"}