n8n-nodes-ldxhub 0.9.0 → 0.9.2

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
@@ -14,6 +14,7 @@ n8n community node for **LDX hub** — AI-powered document processing platform:
14
14
  ## Table of Contents
15
15
 
16
16
  - [Features](#features)
17
+ - [Quick Start](#quick-start)
17
18
  - [Installation](#installation)
18
19
  - [Prerequisites](#prerequisites)
19
20
  - [Credentials Setup](#credentials-setup)
@@ -30,6 +31,22 @@ n8n community node for **LDX hub** — AI-powered document processing platform:
30
31
  - [Changelog](#changelog)
31
32
  - [License](#license)
32
33
 
34
+ ## Quick Start
35
+
36
+ After [installation](#installation):
37
+
38
+ 1. Get a free API key at [gw.portal.ldxhub.io](https://gw.portal.ldxhub.io) (no credit card)
39
+ 2. Import [`all-services-demo.json`](examples/all-services-demo.json)
40
+ 3. Create an **LDXhub API** credential with both fields set to expressions:
41
+ - **Base URL**: `={{ $('On form submission').item.json.host }}`
42
+ - **API Key**: `={{ $('On form submission').item.json.api_key }}`
43
+ 4. Select this credential in each LDXhub node
44
+ 5. Run the workflow — enter your API key (and optionally a custom host) in the form
45
+
46
+ All 5 services (StructFlow / RefineLoop / RenderOCR / CastDoc / ExtractDoc) accessible from a single Form Trigger. **The API key is consumed per execution, never stored in n8n.**
47
+
48
+ For traditional single-service usage with a static credential, see [Usage](#usage) below.
49
+
33
50
  ## Features
34
51
 
35
52
  - **StructFlow**: Extract structured JSON from unstructured text using AI models (medical records, customer feedback, legal documents, and more)
@@ -64,28 +81,29 @@ In your n8n instance:
64
81
  5. In n8n, create a new **LDXhub API** credential:
65
82
  - **Base URL**: `https://gw.ldxhub.io` (default; leave as-is for production)
66
83
  - **API Key**: paste the key from step 4
67
- 6. Click **Save** — n8n will automatically test the credential by listing available models
84
+ 6. Click **Save**
68
85
 
69
- If the credential test fails, verify:
86
+ If API calls fail with 401 Unauthorized, verify:
70
87
  - The API key is active (shown with a green dot in the DevPortal)
71
88
  - The Base URL has no trailing slash
72
89
  - Your network allows outbound HTTPS to `gw.ldxhub.io`
73
90
 
74
- ### Dynamic Credentials (Advanced)
91
+ ### Dynamic API Key (Advanced)
75
92
 
76
- For workflows where the API key should be provided dynamically per execution (e.g., from a Form Trigger, an upstream node, or an AI agent context), use the **LDXhub Dynamic API** credential variant:
93
+ For workflows where the API key should be provided dynamically per execution (e.g., from a Form Trigger, an upstream node, or an AI agent context), set the **API Key** field of your LDXhub API credential to an n8n expression instead of a static value:
77
94
 
78
- 1. Create a new **LDXhub Dynamic API** credential
79
- 2. Set **API Key** to an n8n expression that resolves at execution time, e.g., `{{ $json.api_key }}`
80
- 3. In the LDXhub node, change **Authentication** from `API Key` to `API Key (Dynamic)` and select this credential
95
+ 1. Create a new **LDXhub API** credential
96
+ 2. Switch the **API Key** field to **Expression** mode
97
+ 3. Enter an expression that resolves at execution time, e.g., `{{ $json.api_key }}`
98
+ 4. Save the credential
81
99
 
82
- The Model dropdown loads from LDX hub's public metadata endpoints without authentication, so the node UI works normally during workflow design.
100
+ The Model and Engine dropdowns load from LDX hub's public metadata endpoints without authentication, so the node UI works normally during workflow design even when the API Key is an unresolved expression.
83
101
 
84
102
  **Example**: [Dynamic credentials workflow](examples/structflow-dynamic-inline-demo.json)
85
103
 
86
104
  ## Usage
87
105
 
88
- > 💡 **Quick start**: Import ready-to-use example workflows from [`examples/`](examples/). Each example requires a **LDXhub API** credential and a placeholder input file path to be updated.
106
+ > 💡 **Examples**: All ready-to-use workflows are in [`examples/`](examples/). Each individual demo requires a **LDXhub API** credential and a placeholder input file path to be updated.
89
107
 
90
108
  1. Add **LDXhub API** credentials (see [Credentials Setup](#credentials-setup))
91
109
  2. Add the **LDXhub** node to your workflow
@@ -99,7 +117,7 @@ The Model dropdown loads from LDX hub's public metadata endpoints without authen
99
117
  - **Inline Inputs**: Provide ID + Data pairs directly in the workflow (good for small batches, quick prototyping)
100
118
  - **Binary File**: Provide a JSONL file as binary input (good for large batches, or as part of an ExtractDoc → StructFlow pipeline)
101
119
 
102
- **Examples**: [Inline mode](examples/structflow-inline-demo.json) · [Binary mode](examples/structflow-binary-demo.json)
120
+ **Examples**: [Inline mode](examples/structflow-inline-demo.json) · [Binary mode](examples/structflow-binary-demo.json) · [Dynamic API key](examples/structflow-dynamic-inline-demo.json)
103
121
 
104
122
  ### RefineLoop — XLIFF translation refinement
105
123
 
@@ -1,4 +1,4 @@
1
- import type { IAuthenticateGeneric, Icon, ICredentialTestRequest, ICredentialType, INodeProperties } from 'n8n-workflow';
1
+ import type { IAuthenticateGeneric, Icon, ICredentialType, INodeProperties } from 'n8n-workflow';
2
2
  export declare class LdxHubApi implements ICredentialType {
3
3
  name: string;
4
4
  displayName: string;
@@ -6,5 +6,4 @@ export declare class LdxHubApi implements ICredentialType {
6
6
  documentationUrl: string;
7
7
  properties: INodeProperties[];
8
8
  authenticate: IAuthenticateGeneric;
9
- test: ICredentialTestRequest;
10
9
  }
@@ -23,7 +23,7 @@ class LdxHubApi {
23
23
  typeOptions: { password: true },
24
24
  default: '',
25
25
  required: true,
26
- description: 'Get a free API key from https://gw.portal.ldxhub.io (25,000 credits/month, no credit card).',
26
+ description: 'Your LDX hub API key. Supports expressions for per-execution keys (e.g., {{ $json.api_key }}). Get a free key at https://gw.portal.ldxhub.io.',
27
27
  },
28
28
  ];
29
29
  this.authenticate = {
@@ -34,13 +34,6 @@ class LdxHubApi {
34
34
  },
35
35
  },
36
36
  };
37
- this.test = {
38
- request: {
39
- baseURL: '={{$credentials.baseUrl}}',
40
- url: '/refineloop/models',
41
- method: 'GET',
42
- },
43
- };
44
37
  }
45
38
  }
46
39
  exports.LdxHubApi = LdxHubApi;
@@ -1 +1 @@
1
- {"version":3,"file":"LdxHubApi.credentials.js","sourceRoot":"","sources":["../../credentials/LdxHubApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,SAAS;IAAtB;QACC,SAAI,GAAG,WAAW,CAAC;QAEnB,gBAAW,GAAG,YAAY,CAAC;QAE3B,SAAI,GAAS,iBAAiB,CAAC;QAE/B,qBAAgB,GAAG,0CAA0C,CAAC;QAE9D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sBAAsB;gBAC/B,WAAW,EAAE,sBAAsB;gBACnC,WAAW,EAAE,mDAAmD;aAChE;YACD;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,6FAA6F;aAC1G;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,kCAAkC;iBACjD;aACD;SACD,CAAC;QAEF,SAAI,GAA2B;YAC9B,OAAO,EAAE;gBACR,OAAO,EAAE,2BAA2B;gBACpC,GAAG,EAAE,oBAAoB;gBACzB,MAAM,EAAE,KAAK;aACb;SACD,CAAC;IACH,CAAC;CAAA;AA7CD,8BA6CC"}
1
+ {"version":3,"file":"LdxHubApi.credentials.js","sourceRoot":"","sources":["../../credentials/LdxHubApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,SAAS;IAAtB;QACC,SAAI,GAAG,WAAW,CAAC;QAEnB,gBAAW,GAAG,YAAY,CAAC;QAE3B,SAAI,GAAS,iBAAiB,CAAC;QAE/B,qBAAgB,GAAG,0CAA0C,CAAC;QAE9D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sBAAsB;gBAC/B,WAAW,EAAE,sBAAsB;gBACnC,WAAW,EAAE,mDAAmD;aAChE;YACD;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,+IAA+I;aAC5J;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,kCAAkC;iBACjD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AArCD,8BAqCC"}
@@ -41,40 +41,9 @@ class LdxHub {
41
41
  {
42
42
  name: 'ldxHubApi',
43
43
  required: true,
44
- displayOptions: {
45
- show: {
46
- authentication: ['apiKey'],
47
- },
48
- },
49
- },
50
- {
51
- name: 'ldxHubDynamicApi',
52
- required: true,
53
- displayOptions: {
54
- show: {
55
- authentication: ['apiKeyDynamic'],
56
- },
57
- },
58
44
  },
59
45
  ],
60
46
  properties: [
61
- {
62
- displayName: 'Authentication',
63
- name: 'authentication',
64
- type: 'options',
65
- options: [
66
- {
67
- name: 'API Key',
68
- value: 'apiKey',
69
- },
70
- {
71
- name: 'API Key (Dynamic)',
72
- value: 'apiKeyDynamic',
73
- },
74
- ],
75
- default: 'apiKey',
76
- description: 'How to authenticate. Use "Dynamic" for per-execution API keys via expressions (e.g., form input).',
77
- },
78
47
  {
79
48
  displayName: 'Resource',
80
49
  name: 'resource',
@@ -1 +1 @@
1
- {"version":3,"file":"LdxHub.node.js","sourceRoot":"","sources":["../../../nodes/LdxHub/LdxHub.node.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LdxHub.node.js","sourceRoot":"","sources":["../../../nodes/LdxHub/LdxHub.node.ts"],"names":[],"mappings":"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"}
@@ -4,32 +4,18 @@ exports.DEFAULT_LDX_HUB_BASE_URL = void 0;
4
4
  exports.getBaseUrl = getBaseUrl;
5
5
  exports.ldxHubApiRequest = ldxHubApiRequest;
6
6
  exports.DEFAULT_LDX_HUB_BASE_URL = 'https://gw.ldxhub.io';
7
- async function getAuthenticationMode() {
8
- try {
9
- return this.getNodeParameter('authentication', 0, 'apiKey');
10
- }
11
- catch {
12
- return 'apiKey';
13
- }
14
- }
15
- function getCredentialNameForMode(authentication) {
16
- return authentication === 'apiKeyDynamic' ? 'ldxHubDynamicApi' : 'ldxHubApi';
17
- }
18
7
  function isPublicEndpoint(endpoint) {
19
8
  return /\/(models|engines)$/.test(endpoint);
20
9
  }
21
10
  async function getBaseUrl() {
22
11
  var _a;
23
- const authentication = await getAuthenticationMode.call(this);
24
- const credentialName = getCredentialNameForMode(authentication);
25
- const credentials = await this.getCredentials(credentialName);
12
+ const credentials = await this.getCredentials('ldxHubApi');
26
13
  const raw = (_a = credentials.baseUrl) !== null && _a !== void 0 ? _a : exports.DEFAULT_LDX_HUB_BASE_URL;
27
14
  const trimmed = raw.trim().replace(/\/+$/, '');
28
15
  return trimmed.length > 0 ? trimmed : exports.DEFAULT_LDX_HUB_BASE_URL;
29
16
  }
30
17
  async function ldxHubApiRequest(method, endpoint, body = undefined, qs = {}) {
31
- const authentication = await getAuthenticationMode.call(this);
32
- if (authentication === 'apiKeyDynamic' && isPublicEndpoint(endpoint)) {
18
+ if (isPublicEndpoint(endpoint)) {
33
19
  const options = {
34
20
  method,
35
21
  url: `${exports.DEFAULT_LDX_HUB_BASE_URL}${endpoint}`,
@@ -47,7 +33,6 @@ async function ldxHubApiRequest(method, endpoint, body = undefined, qs = {}) {
47
33
  body,
48
34
  json: true,
49
35
  };
50
- const credentialName = getCredentialNameForMode(authentication);
51
- return this.helpers.httpRequestWithAuthentication.call(this, credentialName, options);
36
+ return this.helpers.httpRequestWithAuthentication.call(this, 'ldxHubApi', options);
52
37
  }
53
38
  //# sourceMappingURL=transport.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../nodes/LdxHub/shared/transport.ts"],"names":[],"mappings":";;;AA6BA,gCASC;AAED,4CAmCC;AAlEY,QAAA,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,KAAK,UAAU,qBAAqB;IAGnC,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,CAAC,EAAE,QAAQ,CAAW,CAAC;IACvE,CAAC;IAAC,MAAM,CAAC;QACR,OAAO,QAAQ,CAAC;IACjB,CAAC;AACF,CAAC;AAED,SAAS,wBAAwB,CAAC,cAAsB;IACvD,OAAO,cAAc,KAAK,eAAe,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,WAAW,CAAC;AAC9E,CAAC;AAED,SAAS,gBAAgB,CAAC,QAAgB;IACzC,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,UAAU;;IAG/B,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAChE,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,CAAC;IAC9D,MAAM,GAAG,GAAG,MAAC,WAAW,CAAC,OAA8B,mCAAI,gCAAwB,CAAC;IACpF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAwB,CAAC;AAChE,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAErC,MAA2B,EAC3B,QAAgB,EAChB,OAAgC,SAAS,EACzC,KAAkB,EAAE;IAEpB,MAAM,cAAc,GAAG,MAAM,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAM9D,IAAI,cAAc,KAAK,eAAe,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtE,MAAM,OAAO,GAAwB;YACpC,MAAM;YACN,GAAG,EAAE,GAAG,gCAAwB,GAAG,QAAQ,EAAE;YAC7C,EAAE;YACF,IAAI;YACJ,IAAI,EAAE,IAAI;SACV,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG,EAAE,GAAG,OAAO,GAAG,QAAQ,EAAE;QAC5B,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,IAAI;KACV,CAAC;IAEF,MAAM,cAAc,GAAG,wBAAwB,CAAC,cAAc,CAAC,CAAC;IAChE,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACvF,CAAC"}
1
+ {"version":3,"file":"transport.js","sourceRoot":"","sources":["../../../../nodes/LdxHub/shared/transport.ts"],"names":[],"mappings":";;;AAeA,gCAOC;AAED,4CA2BC;AA1CY,QAAA,wBAAwB,GAAG,sBAAsB,CAAC;AAE/D,SAAS,gBAAgB,CAAC,QAAgB;IACzC,OAAO,qBAAqB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAEM,KAAK,UAAU,UAAU;;IAG/B,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;IAC3D,MAAM,GAAG,GAAG,MAAC,WAAW,CAAC,OAA8B,mCAAI,gCAAwB,CAAC;IACpF,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC/C,OAAO,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,gCAAwB,CAAC;AAChE,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAErC,MAA2B,EAC3B,QAAgB,EAChB,OAAgC,SAAS,EACzC,KAAkB,EAAE;IAEpB,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAwB;YACpC,MAAM;YACN,GAAG,EAAE,GAAG,gCAAwB,GAAG,QAAQ,EAAE;YAC7C,EAAE;YACF,IAAI;YACJ,IAAI,EAAE,IAAI;SACV,CAAC;QACF,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAwB;QACpC,MAAM;QACN,GAAG,EAAE,GAAG,OAAO,GAAG,QAAQ,EAAE;QAC5B,EAAE;QACF,IAAI;QACJ,IAAI,EAAE,IAAI;KACV,CAAC;IACF,OAAO,IAAI,CAAC,OAAO,CAAC,6BAA6B,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;AACpF,CAAC"}
package/dist/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-ldxhub",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "description": "n8n community node for LDX hub — AI-powered document processing platform with structured data extraction (StructFlow), layout-preserving OCR (RenderOCR), text-based PDF conversion (CastDoc), and XLIFF translation refinement (RefineLoop)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://ldxlab.io/ldxhub",
@@ -59,8 +59,7 @@
59
59
  "n8nNodesApiVersion": 1,
60
60
  "strict": true,
61
61
  "credentials": [
62
- "dist/credentials/LdxHubApi.credentials.js",
63
- "dist/credentials/LdxHubDynamicApi.credentials.js"
62
+ "dist/credentials/LdxHubApi.credentials.js"
64
63
  ],
65
64
  "nodes": [
66
65
  "dist/nodes/LdxHub/LdxHub.node.js"
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "n8n-nodes-ldxhub",
3
- "version": "0.9.0",
3
+ "version": "0.9.2",
4
4
  "description": "n8n community node for LDX hub — AI-powered document processing platform with structured data extraction (StructFlow), layout-preserving OCR (RenderOCR), text-based PDF conversion (CastDoc), and XLIFF translation refinement (RefineLoop)",
5
5
  "license": "MIT",
6
6
  "homepage": "https://ldxlab.io/ldxhub",
@@ -59,8 +59,7 @@
59
59
  "n8nNodesApiVersion": 1,
60
60
  "strict": true,
61
61
  "credentials": [
62
- "dist/credentials/LdxHubApi.credentials.js",
63
- "dist/credentials/LdxHubDynamicApi.credentials.js"
62
+ "dist/credentials/LdxHubApi.credentials.js"
64
63
  ],
65
64
  "nodes": [
66
65
  "dist/nodes/LdxHub/LdxHub.node.js"
@@ -1,9 +0,0 @@
1
- import type { IAuthenticateGeneric, Icon, ICredentialType, INodeProperties } from 'n8n-workflow';
2
- export declare class LdxHubDynamicApi implements ICredentialType {
3
- name: string;
4
- displayName: string;
5
- icon: Icon;
6
- documentationUrl: string;
7
- properties: INodeProperties[];
8
- authenticate: IAuthenticateGeneric;
9
- }
@@ -1,40 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.LdxHubDynamicApi = void 0;
4
- class LdxHubDynamicApi {
5
- constructor() {
6
- this.name = 'ldxHubDynamicApi';
7
- this.displayName = 'LDXhub Dynamic API';
8
- this.icon = 'file:ldxhub.svg';
9
- this.documentationUrl = 'https://gw.portal.ldxhub.io/introduction';
10
- this.properties = [
11
- {
12
- displayName: 'Base URL',
13
- name: 'baseUrl',
14
- type: 'string',
15
- default: 'https://gw.ldxhub.io',
16
- placeholder: 'https://gw.ldxhub.io',
17
- description: 'LDX hub API base URL (e.g., https://gw.ldxhub.io)',
18
- },
19
- {
20
- displayName: 'API Key',
21
- name: 'apiKey',
22
- type: 'string',
23
- typeOptions: { password: true },
24
- default: '',
25
- required: true,
26
- description: 'API Key for per-execution authentication. Use expressions to resolve at runtime (e.g., {{ $json.api_key }}). No connection test on save.',
27
- },
28
- ];
29
- this.authenticate = {
30
- type: 'generic',
31
- properties: {
32
- headers: {
33
- Authorization: '=Bearer {{$credentials?.apiKey}}',
34
- },
35
- },
36
- };
37
- }
38
- }
39
- exports.LdxHubDynamicApi = LdxHubDynamicApi;
40
- //# sourceMappingURL=LdxHubDynamicApi.credentials.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"LdxHubDynamicApi.credentials.js","sourceRoot":"","sources":["../../credentials/LdxHubDynamicApi.credentials.ts"],"names":[],"mappings":";;;AAQA,MAAa,gBAAgB;IAA7B;QACC,SAAI,GAAG,kBAAkB,CAAC;QAE1B,gBAAW,GAAG,oBAAoB,CAAC;QAEnC,SAAI,GAAS,iBAAiB,CAAC;QAE/B,qBAAgB,GAAG,0CAA0C,CAAC;QAE9D,eAAU,GAAsB;YAC/B;gBACC,WAAW,EAAE,UAAU;gBACvB,IAAI,EAAE,SAAS;gBACf,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,sBAAsB;gBAC/B,WAAW,EAAE,sBAAsB;gBACnC,WAAW,EAAE,mDAAmD;aAChE;YACD;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,0IAA0I;aACvJ;SACD,CAAC;QAEF,iBAAY,GAAyB;YACpC,IAAI,EAAE,SAAS;YACf,UAAU,EAAE;gBACX,OAAO,EAAE;oBACR,aAAa,EAAE,kCAAkC;iBACjD;aACD;SACD,CAAC;IACH,CAAC;CAAA;AArCD,4CAqCC"}