n8n-workflow 2.36.3 → 2.36.4
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 +6 -6
|
@@ -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;AAYD,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
|
|
@@ -118,6 +111,17 @@ function isDomainAllowed(options) {
|
|
|
118
111
|
}
|
|
119
112
|
return false;
|
|
120
113
|
}
|
|
114
|
+
/** Hostname of an absolute URL, normalised for matching. `undefined` when there is none. */
|
|
115
|
+
function toHostname(url) {
|
|
116
|
+
if (!url)
|
|
117
|
+
return undefined;
|
|
118
|
+
try {
|
|
119
|
+
return new URL(url).hostname.toLowerCase().replace(/\.$/, '') || undefined;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
return undefined;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
121
125
|
/** Throws `UserError` when `node` is omitted, so callers without an `INode` (axios helper) get a wrappable error. */
|
|
122
126
|
function assertUrlAllowed(options) {
|
|
123
127
|
const { url, allowedDomains, node } = options;
|
|
@@ -128,19 +132,42 @@ function assertUrlAllowed(options) {
|
|
|
128
132
|
const message = `Domain not allowed: This credential is restricted from accessing ${url}. Only the following domains are allowed: ${allowedDomains}`;
|
|
129
133
|
throw node ? new node_operation_error_1.NodeOperationError(node, message) : new errors_1.UserError(message);
|
|
130
134
|
}
|
|
131
|
-
/**
|
|
135
|
+
/**
|
|
136
|
+
* Returns the allowlist for forwarding to per-hop redirect checks; `undefined` means allow-all.
|
|
137
|
+
*
|
|
138
|
+
* `'none'` blocks the caller outright, unless `credentialOwnedSurface` says the URL comes from
|
|
139
|
+
* a node definition rather than from the user — set that only for such callers, never for a
|
|
140
|
+
* URL that arrives as request input.
|
|
141
|
+
*
|
|
142
|
+
* On such a surface, pass `nodeEndpointUrl` and its host joins the `'domains'` allowlist, so a
|
|
143
|
+
* list the user wrote with the HTTP Request node in mind does not stop the credential working in
|
|
144
|
+
* the node it belongs to. A node that decides its endpoint later — in `preSend`, or in the
|
|
145
|
+
* credential's own `authenticate` — has no host to offer here and stays subject to the list.
|
|
146
|
+
*/
|
|
132
147
|
function getCredentialAllowedDomains(options) {
|
|
133
|
-
const { node, credentialData, surface = DEFAULT_SURFACE } = options;
|
|
148
|
+
const { node, credentialData, surface = DEFAULT_SURFACE, credentialOwnedSurface, nodeEndpointUrl, } = options;
|
|
134
149
|
const mode = readMode(credentialData);
|
|
150
|
+
// Guarded on the flag: a surface where the user picks the URL must never widen its allowlist.
|
|
151
|
+
const endpointHost = credentialOwnedSurface ? toHostname(nodeEndpointUrl) : undefined;
|
|
152
|
+
// A comma is a legal host character and would split into extra allowlist entries.
|
|
153
|
+
const ownHost = endpointHost?.includes(',') ? undefined : endpointHost;
|
|
135
154
|
if (mode === 'none') {
|
|
136
|
-
|
|
155
|
+
if (!credentialOwnedSurface) {
|
|
156
|
+
throw new node_operation_error_1.NodeOperationError(node, `This credential is configured to prevent use within an ${surface} node`);
|
|
157
|
+
}
|
|
158
|
+
return undefined;
|
|
137
159
|
}
|
|
138
160
|
if (mode === 'domains') {
|
|
139
161
|
const allowedDomains = readAllowedDomainsField(credentialData);
|
|
140
162
|
if (!allowedDomains) {
|
|
163
|
+
if (ownHost)
|
|
164
|
+
return ownHost;
|
|
141
165
|
throw new node_operation_error_1.NodeOperationError(node, 'No allowed domains specified. Configure allowed domains or change restriction setting.');
|
|
142
166
|
}
|
|
143
|
-
|
|
167
|
+
if (!ownHost || isDomainAllowed({ url: `https://${ownHost}`, allowedDomains })) {
|
|
168
|
+
return allowedDomains;
|
|
169
|
+
}
|
|
170
|
+
return `${ownHost}, ${allowedDomains}`;
|
|
144
171
|
}
|
|
145
172
|
return undefined;
|
|
146
173
|
}
|
|
@@ -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;AAYD,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
|
|
@@ -110,6 +103,17 @@ export function isDomainAllowed(options) {
|
|
|
110
103
|
}
|
|
111
104
|
return false;
|
|
112
105
|
}
|
|
106
|
+
/** Hostname of an absolute URL, normalised for matching. `undefined` when there is none. */
|
|
107
|
+
function toHostname(url) {
|
|
108
|
+
if (!url)
|
|
109
|
+
return undefined;
|
|
110
|
+
try {
|
|
111
|
+
return new URL(url).hostname.toLowerCase().replace(/\.$/, '') || undefined;
|
|
112
|
+
}
|
|
113
|
+
catch {
|
|
114
|
+
return undefined;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
113
117
|
/** Throws `UserError` when `node` is omitted, so callers without an `INode` (axios helper) get a wrappable error. */
|
|
114
118
|
export function assertUrlAllowed(options) {
|
|
115
119
|
const { url, allowedDomains, node } = options;
|
|
@@ -120,19 +124,42 @@ export function assertUrlAllowed(options) {
|
|
|
120
124
|
const message = `Domain not allowed: This credential is restricted from accessing ${url}. Only the following domains are allowed: ${allowedDomains}`;
|
|
121
125
|
throw node ? new NodeOperationError(node, message) : new UserError(message);
|
|
122
126
|
}
|
|
123
|
-
/**
|
|
127
|
+
/**
|
|
128
|
+
* Returns the allowlist for forwarding to per-hop redirect checks; `undefined` means allow-all.
|
|
129
|
+
*
|
|
130
|
+
* `'none'` blocks the caller outright, unless `credentialOwnedSurface` says the URL comes from
|
|
131
|
+
* a node definition rather than from the user — set that only for such callers, never for a
|
|
132
|
+
* URL that arrives as request input.
|
|
133
|
+
*
|
|
134
|
+
* On such a surface, pass `nodeEndpointUrl` and its host joins the `'domains'` allowlist, so a
|
|
135
|
+
* list the user wrote with the HTTP Request node in mind does not stop the credential working in
|
|
136
|
+
* the node it belongs to. A node that decides its endpoint later — in `preSend`, or in the
|
|
137
|
+
* credential's own `authenticate` — has no host to offer here and stays subject to the list.
|
|
138
|
+
*/
|
|
124
139
|
export function getCredentialAllowedDomains(options) {
|
|
125
|
-
const { node, credentialData, surface = DEFAULT_SURFACE } = options;
|
|
140
|
+
const { node, credentialData, surface = DEFAULT_SURFACE, credentialOwnedSurface, nodeEndpointUrl, } = options;
|
|
126
141
|
const mode = readMode(credentialData);
|
|
142
|
+
// Guarded on the flag: a surface where the user picks the URL must never widen its allowlist.
|
|
143
|
+
const endpointHost = credentialOwnedSurface ? toHostname(nodeEndpointUrl) : undefined;
|
|
144
|
+
// A comma is a legal host character and would split into extra allowlist entries.
|
|
145
|
+
const ownHost = endpointHost?.includes(',') ? undefined : endpointHost;
|
|
127
146
|
if (mode === 'none') {
|
|
128
|
-
|
|
147
|
+
if (!credentialOwnedSurface) {
|
|
148
|
+
throw new NodeOperationError(node, `This credential is configured to prevent use within an ${surface} node`);
|
|
149
|
+
}
|
|
150
|
+
return undefined;
|
|
129
151
|
}
|
|
130
152
|
if (mode === 'domains') {
|
|
131
153
|
const allowedDomains = readAllowedDomainsField(credentialData);
|
|
132
154
|
if (!allowedDomains) {
|
|
155
|
+
if (ownHost)
|
|
156
|
+
return ownHost;
|
|
133
157
|
throw new NodeOperationError(node, 'No allowed domains specified. Configure allowed domains or change restriction setting.');
|
|
134
158
|
}
|
|
135
|
-
|
|
159
|
+
if (!ownHost || isDomainAllowed({ url: `https://${ownHost}`, allowedDomains })) {
|
|
160
|
+
return allowedDomains;
|
|
161
|
+
}
|
|
162
|
+
return `${ownHost}, ${allowedDomains}`;
|
|
136
163
|
}
|
|
137
164
|
return undefined;
|
|
138
165
|
}
|
|
@@ -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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"}
|