@budibase/backend-core 3.23.38 → 3.23.48
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/index.js +15 -15
- package/dist/index.js.map +2 -2
- package/dist/package.json +3 -2
- package/dist/plugins.js +1 -1
- package/dist/src/db/Replication.d.ts +1 -1
- package/dist/src/db/Replication.js +32 -15
- package/dist/src/db/Replication.js.map +1 -1
- package/dist/src/docIds/ids.d.ts +2 -1
- package/dist/src/docIds/ids.js +8 -4
- package/dist/src/docIds/ids.js.map +1 -1
- package/dist/src/environment.d.ts +1 -0
- package/dist/src/environment.js +1 -1
- package/dist/src/environment.js.map +1 -1
- package/dist/src/objectStore/objectStore.js +9 -0
- package/dist/src/objectStore/objectStore.js.map +1 -1
- package/dist/src/utils/fetch.d.ts +10 -10
- package/dist/src/utils/fetch.js +117 -42
- package/dist/src/utils/fetch.js.map +1 -1
- package/package.json +3 -2
package/dist/src/utils/fetch.js
CHANGED
|
@@ -1,80 +1,155 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.resetProxyDispatcherCache = resetProxyDispatcherCache;
|
|
3
|
+
exports.getDispatcher = getDispatcher;
|
|
5
4
|
const undici_1 = require("undici");
|
|
6
5
|
/**
|
|
7
|
-
*
|
|
8
|
-
*
|
|
9
|
-
* the global-agent proxy configuration.
|
|
6
|
+
* Check if a URL matches any pattern in the NO_PROXY list.
|
|
7
|
+
* Supports patterns like: *.foo.com, baz.com, .example.com
|
|
10
8
|
*
|
|
11
|
-
* @param
|
|
12
|
-
* @
|
|
9
|
+
* @param url The URL to check
|
|
10
|
+
* @param noProxy Comma or space separated list of NO_PROXY patterns
|
|
11
|
+
* @returns true if the URL should bypass the proxy
|
|
13
12
|
*/
|
|
14
|
-
function
|
|
13
|
+
function isUrlMatchingNoProxy(url, noProxy) {
|
|
14
|
+
let hostname;
|
|
15
|
+
let port = null;
|
|
16
|
+
try {
|
|
17
|
+
const parsed = new URL(url);
|
|
18
|
+
hostname = parsed.hostname;
|
|
19
|
+
port = parsed.port || null;
|
|
20
|
+
}
|
|
21
|
+
catch (_a) {
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
const rules = noProxy.split(/[\s,]+/).filter(r => r.length > 0);
|
|
25
|
+
for (const rule of rules) {
|
|
26
|
+
// Handle leading dot (e.g., .foo.com) by converting to wildcard
|
|
27
|
+
const normalizedRule = rule.replace(/^\./, "*");
|
|
28
|
+
// Parse rule into hostname and optional port
|
|
29
|
+
// Match: hostname optionally followed by :port
|
|
30
|
+
const ruleMatch = normalizedRule.match(/^(.+?)(?::(\d+))?$/);
|
|
31
|
+
if (!ruleMatch || !ruleMatch[1]) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const ruleHostname = ruleMatch[1].toLowerCase();
|
|
35
|
+
const rulePort = ruleMatch[2] || null;
|
|
36
|
+
// Check hostname match (supports wildcards like *.foo.com)
|
|
37
|
+
let hostnameMatches = false;
|
|
38
|
+
if (ruleHostname === "*") {
|
|
39
|
+
hostnameMatches = true;
|
|
40
|
+
}
|
|
41
|
+
else if (ruleHostname.startsWith("*")) {
|
|
42
|
+
// Wildcard pattern like *.foo.com
|
|
43
|
+
const suffix = ruleHostname.slice(1); // .foo.com
|
|
44
|
+
hostnameMatches =
|
|
45
|
+
hostname === suffix.slice(1) || hostname.endsWith(suffix);
|
|
46
|
+
}
|
|
47
|
+
else {
|
|
48
|
+
hostnameMatches = hostname === ruleHostname;
|
|
49
|
+
}
|
|
50
|
+
// Check port match (if rule specifies a port)
|
|
51
|
+
const portMatches = !rulePort || port === rulePort;
|
|
52
|
+
if (hostnameMatches && portMatches) {
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Determines if the request should bypass the proxy.
|
|
60
|
+
*
|
|
61
|
+
* @param url The target URL
|
|
62
|
+
* @returns true if the request should go direct (no proxy)
|
|
63
|
+
*/
|
|
64
|
+
function shouldBypassProxy(url) {
|
|
15
65
|
const httpProxy = process.env.GLOBAL_AGENT_HTTP_PROXY || process.env.HTTP_PROXY;
|
|
16
66
|
const httpsProxy = process.env.GLOBAL_AGENT_HTTPS_PROXY || process.env.HTTPS_PROXY;
|
|
17
67
|
const proxyUrl = httpsProxy || httpProxy;
|
|
68
|
+
// No proxy configured
|
|
18
69
|
if (!proxyUrl || !proxyUrl.trim()) {
|
|
19
|
-
return
|
|
70
|
+
return true;
|
|
20
71
|
}
|
|
21
|
-
|
|
22
|
-
// Validate URL format
|
|
72
|
+
// Validate proxy URL format
|
|
23
73
|
try {
|
|
24
|
-
new URL(
|
|
74
|
+
new URL(proxyUrl.trim());
|
|
25
75
|
}
|
|
26
|
-
catch (
|
|
76
|
+
catch (_a) {
|
|
27
77
|
console.log("[fetch] Invalid proxy URL format:", proxyUrl);
|
|
28
|
-
return
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
// Check NO_PROXY patterns
|
|
81
|
+
if (url) {
|
|
82
|
+
const noProxy = process.env.GLOBAL_AGENT_NO_PROXY || process.env.NO_PROXY || "";
|
|
83
|
+
if (noProxy && isUrlMatchingNoProxy(url, noProxy)) {
|
|
84
|
+
console.log("[fetch] URL matches NO_PROXY pattern, bypassing proxy", {
|
|
85
|
+
url,
|
|
86
|
+
noProxy,
|
|
87
|
+
});
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
29
90
|
}
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Creates a direct Agent (no proxy).
|
|
95
|
+
*/
|
|
96
|
+
function createDirectAgent(rejectUnauthorized) {
|
|
97
|
+
return new undici_1.Agent({
|
|
98
|
+
connect: {
|
|
99
|
+
rejectUnauthorized,
|
|
100
|
+
},
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Creates a ProxyAgent for proxied requests.
|
|
105
|
+
*/
|
|
106
|
+
function createProxyAgent(rejectUnauthorized) {
|
|
107
|
+
const httpProxy = process.env.GLOBAL_AGENT_HTTP_PROXY || process.env.HTTP_PROXY;
|
|
108
|
+
const httpsProxy = process.env.GLOBAL_AGENT_HTTPS_PROXY || process.env.HTTPS_PROXY;
|
|
109
|
+
const proxyUrl = (httpsProxy || httpProxy).trim();
|
|
33
110
|
console.log("[fetch] Creating ProxyAgent", {
|
|
34
|
-
proxyUrl
|
|
111
|
+
proxyUrl,
|
|
35
112
|
rejectUnauthorized,
|
|
36
113
|
});
|
|
37
114
|
const proxyConfig = {
|
|
38
|
-
uri:
|
|
115
|
+
uri: proxyUrl,
|
|
39
116
|
requestTls: {
|
|
40
117
|
rejectUnauthorized,
|
|
41
118
|
},
|
|
42
119
|
};
|
|
43
120
|
// Only configure proxyTls if the proxy itself uses HTTPS
|
|
44
|
-
if (
|
|
121
|
+
if (proxyUrl.startsWith("https://")) {
|
|
45
122
|
proxyConfig.proxyTls = {
|
|
46
123
|
rejectUnauthorized,
|
|
47
124
|
};
|
|
48
125
|
}
|
|
49
|
-
|
|
50
|
-
return new undici_1.ProxyAgent(proxyConfig);
|
|
51
|
-
}
|
|
52
|
-
catch (error) {
|
|
53
|
-
console.log("[fetch] Failed to create ProxyAgent:", error);
|
|
54
|
-
return false;
|
|
55
|
-
}
|
|
126
|
+
return new undici_1.ProxyAgent(proxyConfig);
|
|
56
127
|
}
|
|
57
|
-
let cachedDispatcher = null;
|
|
58
128
|
/**
|
|
59
|
-
*
|
|
60
|
-
*
|
|
129
|
+
* Creates a fetch dispatcher that respects global-agent environment variables.
|
|
130
|
+
* Always returns a usable Dispatcher - either a ProxyAgent or a direct Agent.
|
|
61
131
|
*
|
|
62
|
-
* @param options
|
|
132
|
+
* @param options Configuration for the dispatcher
|
|
133
|
+
* @returns A Dispatcher (ProxyAgent for proxied requests, Agent for direct requests)
|
|
63
134
|
*/
|
|
64
|
-
function
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (cachedDispatcher === null) {
|
|
70
|
-
cachedDispatcher = createProxyDispatcher();
|
|
135
|
+
function createDispatcher(options) {
|
|
136
|
+
var _a;
|
|
137
|
+
const rejectUnauthorized = (_a = options === null || options === void 0 ? void 0 : options.rejectUnauthorized) !== null && _a !== void 0 ? _a : true;
|
|
138
|
+
if (shouldBypassProxy(options === null || options === void 0 ? void 0 : options.url)) {
|
|
139
|
+
return createDirectAgent(rejectUnauthorized);
|
|
71
140
|
}
|
|
72
|
-
return
|
|
141
|
+
return createProxyAgent(rejectUnauthorized);
|
|
73
142
|
}
|
|
74
143
|
/**
|
|
75
|
-
*
|
|
144
|
+
* Get a dispatcher for fetch requests.
|
|
145
|
+
* Always returns a usable Dispatcher - either a ProxyAgent or a direct Agent.
|
|
146
|
+
* The dispatcher respects GLOBAL_AGENT_HTTP_PROXY, GLOBAL_AGENT_HTTPS_PROXY,
|
|
147
|
+
* GLOBAL_AGENT_NO_PROXY, and their standard equivalents.
|
|
148
|
+
*
|
|
149
|
+
* @param options Configuration for the dispatcher
|
|
150
|
+
* @returns A Dispatcher ready to use with fetch
|
|
76
151
|
*/
|
|
77
|
-
function
|
|
78
|
-
|
|
152
|
+
function getDispatcher(options) {
|
|
153
|
+
return createDispatcher(options);
|
|
79
154
|
}
|
|
80
155
|
//# sourceMappingURL=fetch.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/utils/fetch.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/utils/fetch.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@budibase/backend-core",
|
|
3
|
-
"version": "3.23.
|
|
3
|
+
"version": "3.23.48",
|
|
4
4
|
"description": "Budibase backend core libraries used in server and worker",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/src/index.d.ts",
|
|
@@ -39,6 +39,7 @@
|
|
|
39
39
|
"@budibase/shared-core": "*",
|
|
40
40
|
"@budibase/types": "*",
|
|
41
41
|
"@koa/router": "13.1.0",
|
|
42
|
+
"@smithy/node-http-handler": "^4.1.1",
|
|
42
43
|
"@techpass/passport-openidconnect": "0.3.3",
|
|
43
44
|
"aws-cloudfront-sign": "3.0.2",
|
|
44
45
|
"aws-sdk": "2.1692.0",
|
|
@@ -112,5 +113,5 @@
|
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
115
|
},
|
|
115
|
-
"gitHead": "
|
|
116
|
+
"gitHead": "0a78faa2adbb8fb3b81de2b9b00352e60178f12f"
|
|
116
117
|
}
|