n8n-workflow 2.37.0 → 2.37.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/dist/cjs/build.tsbuildinfo +1 -1
- package/dist/cjs/credential-domain-restrictions.d.ts +14 -1
- package/dist/cjs/credential-domain-restrictions.d.ts.map +1 -1
- package/dist/cjs/credential-domain-restrictions.js +39 -12
- package/dist/cjs/credential-domain-restrictions.js.map +1 -1
- package/dist/esm/credential-domain-restrictions.d.ts +14 -1
- package/dist/esm/credential-domain-restrictions.d.ts.map +1 -1
- package/dist/esm/credential-domain-restrictions.js +39 -12
- package/dist/esm/credential-domain-restrictions.js.map +1 -1
- package/dist/esm/typecheck.tsbuildinfo +1 -1
- package/package.json +5 -5
|
@@ -14,11 +14,24 @@ export declare function assertUrlAllowed(options: {
|
|
|
14
14
|
allowedDomains?: string;
|
|
15
15
|
node?: INode;
|
|
16
16
|
}): void;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Returns the allowlist for forwarding to per-hop redirect checks; `undefined` means allow-all.
|
|
19
|
+
*
|
|
20
|
+
* `'none'` blocks the caller outright, unless `credentialOwnedSurface` says the URL comes from
|
|
21
|
+
* a node definition rather than from the user — set that only for such callers, never for a
|
|
22
|
+
* URL that arrives as request input.
|
|
23
|
+
*
|
|
24
|
+
* On such a surface, pass `nodeEndpointUrl` and its host joins the `'domains'` allowlist, so a
|
|
25
|
+
* list the user wrote with the HTTP Request node in mind does not stop the credential working in
|
|
26
|
+
* the node it belongs to. A node that decides its endpoint later — in `preSend`, or in the
|
|
27
|
+
* credential's own `authenticate` — has no host to offer here and stays subject to the list.
|
|
28
|
+
*/
|
|
18
29
|
export declare function getCredentialAllowedDomains(options: {
|
|
19
30
|
node: INode;
|
|
20
31
|
credentialData: ICredentialDataDecryptedObject;
|
|
21
32
|
surface?: string;
|
|
33
|
+
credentialOwnedSurface?: boolean;
|
|
34
|
+
nodeEndpointUrl?: string;
|
|
22
35
|
}): string | undefined;
|
|
23
36
|
/**
|
|
24
37
|
* Passing `pinnedUrl` switches `'none'` mode from "block all" to "allow only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-domain-restrictions.d.ts","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,8BAA8B,EAC9B,eAAe,EACf,KAAK,EACL,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAI/D,eAAO,MAAM,yBAAyB,EAAE,eAAe,EAuCtD,CAAC;AAoCF,4CAA4C;AAC5C,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,eAAe,GAAG,eAAe,EAAE,CAShG;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"credential-domain-restrictions.d.ts","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,8BAA8B,EAC9B,eAAe,EACf,KAAK,EACL,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAI/D,eAAO,MAAM,yBAAyB,EAAE,eAAe,EAuCtD,CAAC;AAoCF,4CAA4C;AAC5C,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,eAAe,GAAG,eAAe,EAAE,CAShG;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAyBzF;AA2BD,qHAAqH;AACrH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC;CACb,GAAG,IAAI,CAOP;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACpD,IAAI,EAAE,KAAK,CAAC;IACZ,cAAc,EAAE,8BAA8B,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAwCrB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,IAAI,EAAE,KAAK,CAAC;IACZ,cAAc,EAAE,8BAA8B,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,GAAG,SAAS,CAkCrB"}
|
|
@@ -90,14 +90,7 @@ function isDomainAllowed(options) {
|
|
|
90
90
|
if (!allowedDomains || allowedDomains.trim() === '') {
|
|
91
91
|
return true;
|
|
92
92
|
}
|
|
93
|
-
|
|
94
|
-
try {
|
|
95
|
-
url = new URL(urlString);
|
|
96
|
-
}
|
|
97
|
-
catch {
|
|
98
|
-
return false;
|
|
99
|
-
}
|
|
100
|
-
const hostname = url.hostname.toLowerCase().replace(/\.$/, '');
|
|
93
|
+
const hostname = toHostname(urlString);
|
|
101
94
|
if (!hostname)
|
|
102
95
|
return false;
|
|
103
96
|
const allowedDomainsList = allowedDomains
|
|
@@ -133,6 +126,17 @@ function toDisplayHost(url) {
|
|
|
133
126
|
return url.split(/[?#]/)[0].replace(/^([A-Za-z][\w+.-]*:\/\/)[^/@]*@/, '$1');
|
|
134
127
|
}
|
|
135
128
|
}
|
|
129
|
+
/** Hostname of an absolute URL, normalised for matching. `undefined` when there is none. */
|
|
130
|
+
function toHostname(url) {
|
|
131
|
+
if (!url)
|
|
132
|
+
return undefined;
|
|
133
|
+
try {
|
|
134
|
+
return new URL(url).hostname.toLowerCase().replace(/\.$/, '') || undefined;
|
|
135
|
+
}
|
|
136
|
+
catch {
|
|
137
|
+
return undefined;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
136
140
|
/** Throws `UserError` when `node` is omitted, so callers without an `INode` (axios helper) get a wrappable error. */
|
|
137
141
|
function assertUrlAllowed(options) {
|
|
138
142
|
const { url, allowedDomains, node } = options;
|
|
@@ -143,19 +147,42 @@ function assertUrlAllowed(options) {
|
|
|
143
147
|
const message = `Domain not allowed: This credential is restricted from accessing ${toDisplayHost(url)}. Only the following domains are allowed: ${allowedDomains}`;
|
|
144
148
|
throw node ? new node_operation_error_1.NodeOperationError(node, message) : new errors_1.UserError(message);
|
|
145
149
|
}
|
|
146
|
-
/**
|
|
150
|
+
/**
|
|
151
|
+
* Returns the allowlist for forwarding to per-hop redirect checks; `undefined` means allow-all.
|
|
152
|
+
*
|
|
153
|
+
* `'none'` blocks the caller outright, unless `credentialOwnedSurface` says the URL comes from
|
|
154
|
+
* a node definition rather than from the user — set that only for such callers, never for a
|
|
155
|
+
* URL that arrives as request input.
|
|
156
|
+
*
|
|
157
|
+
* On such a surface, pass `nodeEndpointUrl` and its host joins the `'domains'` allowlist, so a
|
|
158
|
+
* list the user wrote with the HTTP Request node in mind does not stop the credential working in
|
|
159
|
+
* the node it belongs to. A node that decides its endpoint later — in `preSend`, or in the
|
|
160
|
+
* credential's own `authenticate` — has no host to offer here and stays subject to the list.
|
|
161
|
+
*/
|
|
147
162
|
function getCredentialAllowedDomains(options) {
|
|
148
|
-
const { node, credentialData, surface = DEFAULT_SURFACE } = options;
|
|
163
|
+
const { node, credentialData, surface = DEFAULT_SURFACE, credentialOwnedSurface, nodeEndpointUrl, } = options;
|
|
149
164
|
const mode = readMode(credentialData);
|
|
165
|
+
// Guarded on the flag: a surface where the user picks the URL must never widen its allowlist.
|
|
166
|
+
const endpointHost = credentialOwnedSurface ? toHostname(nodeEndpointUrl) : undefined;
|
|
167
|
+
// A comma is a legal host character and would split into extra allowlist entries.
|
|
168
|
+
const ownHost = endpointHost?.includes(',') ? undefined : endpointHost;
|
|
150
169
|
if (mode === 'none') {
|
|
151
|
-
|
|
170
|
+
if (!credentialOwnedSurface) {
|
|
171
|
+
throw new node_operation_error_1.NodeOperationError(node, `This credential is configured to prevent use within an ${surface} node`);
|
|
172
|
+
}
|
|
173
|
+
return undefined;
|
|
152
174
|
}
|
|
153
175
|
if (mode === 'domains') {
|
|
154
176
|
const allowedDomains = readAllowedDomainsField(credentialData);
|
|
155
177
|
if (!allowedDomains) {
|
|
178
|
+
if (ownHost)
|
|
179
|
+
return ownHost;
|
|
156
180
|
throw new node_operation_error_1.NodeOperationError(node, 'No allowed domains specified. Configure allowed domains or change restriction setting.');
|
|
157
181
|
}
|
|
158
|
-
|
|
182
|
+
if (!ownHost || isDomainAllowed({ url: `https://${ownHost}`, allowedDomains })) {
|
|
183
|
+
return allowedDomains;
|
|
184
|
+
}
|
|
185
|
+
return `${ownHost}, ${allowedDomains}`;
|
|
159
186
|
}
|
|
160
187
|
return undefined;
|
|
161
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-domain-restrictions.js","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"credential-domain-restrictions.js","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"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"}
|
|
@@ -14,11 +14,24 @@ export declare function assertUrlAllowed(options: {
|
|
|
14
14
|
allowedDomains?: string;
|
|
15
15
|
node?: INode;
|
|
16
16
|
}): void;
|
|
17
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Returns the allowlist for forwarding to per-hop redirect checks; `undefined` means allow-all.
|
|
19
|
+
*
|
|
20
|
+
* `'none'` blocks the caller outright, unless `credentialOwnedSurface` says the URL comes from
|
|
21
|
+
* a node definition rather than from the user — set that only for such callers, never for a
|
|
22
|
+
* URL that arrives as request input.
|
|
23
|
+
*
|
|
24
|
+
* On such a surface, pass `nodeEndpointUrl` and its host joins the `'domains'` allowlist, so a
|
|
25
|
+
* list the user wrote with the HTTP Request node in mind does not stop the credential working in
|
|
26
|
+
* the node it belongs to. A node that decides its endpoint later — in `preSend`, or in the
|
|
27
|
+
* credential's own `authenticate` — has no host to offer here and stays subject to the list.
|
|
28
|
+
*/
|
|
18
29
|
export declare function getCredentialAllowedDomains(options: {
|
|
19
30
|
node: INode;
|
|
20
31
|
credentialData: ICredentialDataDecryptedObject;
|
|
21
32
|
surface?: string;
|
|
33
|
+
credentialOwnedSurface?: boolean;
|
|
34
|
+
nodeEndpointUrl?: string;
|
|
22
35
|
}): string | undefined;
|
|
23
36
|
/**
|
|
24
37
|
* Passing `pinnedUrl` switches `'none'` mode from "block all" to "allow only
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-domain-restrictions.d.ts","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,8BAA8B,EAC9B,eAAe,EACf,KAAK,EACL,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAI/D,eAAO,MAAM,yBAAyB,EAAE,eAAe,EAuCtD,CAAC;AAoCF,4CAA4C;AAC5C,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,eAAe,GAAG,eAAe,EAAE,CAShG;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"credential-domain-restrictions.d.ts","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACX,8BAA8B,EAC9B,eAAe,EACf,KAAK,EACL,eAAe,EACf,MAAM,cAAc,CAAC;AAEtB,MAAM,MAAM,qBAAqB,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAI/D,eAAO,MAAM,yBAAyB,EAAE,eAAe,EAuCtD,CAAC;AAoCF,4CAA4C;AAC5C,wBAAgB,6BAA6B,CAAC,cAAc,EAAE,eAAe,GAAG,eAAe,EAAE,CAShG;AAED,sEAAsE;AACtE,wBAAgB,eAAe,CAAC,OAAO,EAAE;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAyBzF;AA2BD,qHAAqH;AACrH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACzC,GAAG,EAAE,MAAM,CAAC;IACZ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,CAAC,EAAE,KAAK,CAAC;CACb,GAAG,IAAI,CAOP;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,2BAA2B,CAAC,OAAO,EAAE;IACpD,IAAI,EAAE,KAAK,CAAC;IACZ,cAAc,EAAE,8BAA8B,CAAC;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,eAAe,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,GAAG,SAAS,CAwCrB;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE;IAClD,IAAI,EAAE,KAAK,CAAC;IACZ,cAAc,EAAE,8BAA8B,CAAC;IAC/C,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB,GAAG,MAAM,GAAG,SAAS,CAkCrB"}
|
|
@@ -82,14 +82,7 @@ export function isDomainAllowed(options) {
|
|
|
82
82
|
if (!allowedDomains || allowedDomains.trim() === '') {
|
|
83
83
|
return true;
|
|
84
84
|
}
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
url = new URL(urlString);
|
|
88
|
-
}
|
|
89
|
-
catch {
|
|
90
|
-
return false;
|
|
91
|
-
}
|
|
92
|
-
const hostname = url.hostname.toLowerCase().replace(/\.$/, '');
|
|
85
|
+
const hostname = toHostname(urlString);
|
|
93
86
|
if (!hostname)
|
|
94
87
|
return false;
|
|
95
88
|
const allowedDomainsList = allowedDomains
|
|
@@ -125,6 +118,17 @@ function toDisplayHost(url) {
|
|
|
125
118
|
return url.split(/[?#]/)[0].replace(/^([A-Za-z][\w+.-]*:\/\/)[^/@]*@/, '$1');
|
|
126
119
|
}
|
|
127
120
|
}
|
|
121
|
+
/** Hostname of an absolute URL, normalised for matching. `undefined` when there is none. */
|
|
122
|
+
function toHostname(url) {
|
|
123
|
+
if (!url)
|
|
124
|
+
return undefined;
|
|
125
|
+
try {
|
|
126
|
+
return new URL(url).hostname.toLowerCase().replace(/\.$/, '') || undefined;
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return undefined;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
128
132
|
/** Throws `UserError` when `node` is omitted, so callers without an `INode` (axios helper) get a wrappable error. */
|
|
129
133
|
export function assertUrlAllowed(options) {
|
|
130
134
|
const { url, allowedDomains, node } = options;
|
|
@@ -135,19 +139,42 @@ export function assertUrlAllowed(options) {
|
|
|
135
139
|
const message = `Domain not allowed: This credential is restricted from accessing ${toDisplayHost(url)}. Only the following domains are allowed: ${allowedDomains}`;
|
|
136
140
|
throw node ? new NodeOperationError(node, message) : new UserError(message);
|
|
137
141
|
}
|
|
138
|
-
/**
|
|
142
|
+
/**
|
|
143
|
+
* Returns the allowlist for forwarding to per-hop redirect checks; `undefined` means allow-all.
|
|
144
|
+
*
|
|
145
|
+
* `'none'` blocks the caller outright, unless `credentialOwnedSurface` says the URL comes from
|
|
146
|
+
* a node definition rather than from the user — set that only for such callers, never for a
|
|
147
|
+
* URL that arrives as request input.
|
|
148
|
+
*
|
|
149
|
+
* On such a surface, pass `nodeEndpointUrl` and its host joins the `'domains'` allowlist, so a
|
|
150
|
+
* list the user wrote with the HTTP Request node in mind does not stop the credential working in
|
|
151
|
+
* the node it belongs to. A node that decides its endpoint later — in `preSend`, or in the
|
|
152
|
+
* credential's own `authenticate` — has no host to offer here and stays subject to the list.
|
|
153
|
+
*/
|
|
139
154
|
export function getCredentialAllowedDomains(options) {
|
|
140
|
-
const { node, credentialData, surface = DEFAULT_SURFACE } = options;
|
|
155
|
+
const { node, credentialData, surface = DEFAULT_SURFACE, credentialOwnedSurface, nodeEndpointUrl, } = options;
|
|
141
156
|
const mode = readMode(credentialData);
|
|
157
|
+
// Guarded on the flag: a surface where the user picks the URL must never widen its allowlist.
|
|
158
|
+
const endpointHost = credentialOwnedSurface ? toHostname(nodeEndpointUrl) : undefined;
|
|
159
|
+
// A comma is a legal host character and would split into extra allowlist entries.
|
|
160
|
+
const ownHost = endpointHost?.includes(',') ? undefined : endpointHost;
|
|
142
161
|
if (mode === 'none') {
|
|
143
|
-
|
|
162
|
+
if (!credentialOwnedSurface) {
|
|
163
|
+
throw new NodeOperationError(node, `This credential is configured to prevent use within an ${surface} node`);
|
|
164
|
+
}
|
|
165
|
+
return undefined;
|
|
144
166
|
}
|
|
145
167
|
if (mode === 'domains') {
|
|
146
168
|
const allowedDomains = readAllowedDomainsField(credentialData);
|
|
147
169
|
if (!allowedDomains) {
|
|
170
|
+
if (ownHost)
|
|
171
|
+
return ownHost;
|
|
148
172
|
throw new NodeOperationError(node, 'No allowed domains specified. Configure allowed domains or change restriction setting.');
|
|
149
173
|
}
|
|
150
|
-
|
|
174
|
+
if (!ownHost || isDomainAllowed({ url: `https://${ownHost}`, allowedDomains })) {
|
|
175
|
+
return allowedDomains;
|
|
176
|
+
}
|
|
177
|
+
return `${ownHost}, ${allowedDomains}`;
|
|
151
178
|
}
|
|
152
179
|
return undefined;
|
|
153
180
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"credential-domain-restrictions.js","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"credential-domain-restrictions.js","sourceRoot":"","sources":["../../src/credential-domain-restrictions.ts"],"names":[],"mappings":"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"}
|