@hooklink/cli 0.1.8 → 0.1.10
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.
|
@@ -5,6 +5,9 @@ export declare class HttpForwarder {
|
|
|
5
5
|
forward(request: WSRequestMessage): Promise<WSResponseMessage>;
|
|
6
6
|
private filterHeaders;
|
|
7
7
|
private sanitizeHeaders;
|
|
8
|
+
private getLocalOrigins;
|
|
9
|
+
private rewriteUrls;
|
|
10
|
+
private rewriteUrl;
|
|
8
11
|
setTargetUrl(url: string): void;
|
|
9
12
|
}
|
|
10
13
|
//# sourceMappingURL=http-forwarder.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-forwarder.d.ts","sourceRoot":"","sources":["../../src/core/http-forwarder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"http-forwarder.d.ts","sourceRoot":"","sources":["../../src/core/http-forwarder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAyC/D,qBAAa,aAAa;IACxB,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,EAAE,MAAM;IAIvB,OAAO,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC;IA+FpE,OAAO,CAAC,aAAa;IAsBrB,OAAO,CAAC,eAAe;IAevB,OAAO,CAAC,eAAe;IAavB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,UAAU;IAUlB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;CAGhC"}
|
|
@@ -21,12 +21,27 @@ const BINARY_CONTENT_TYPE_PATTERNS = [
|
|
|
21
21
|
/^application\/x-font/,
|
|
22
22
|
/^application\/vnd\./,
|
|
23
23
|
];
|
|
24
|
+
const TEXT_CONTENT_TYPE_PATTERNS = [
|
|
25
|
+
/^text\//,
|
|
26
|
+
/^application\/json/,
|
|
27
|
+
/^application\/javascript/,
|
|
28
|
+
/^application\/x-javascript/,
|
|
29
|
+
/^application\/xml/,
|
|
30
|
+
/^application\/xhtml\+xml/,
|
|
31
|
+
/^application\/manifest\+json/,
|
|
32
|
+
];
|
|
24
33
|
function isBinaryContentType(contentType) {
|
|
25
34
|
if (!contentType)
|
|
26
35
|
return false;
|
|
27
36
|
const ct = contentType.toLowerCase().split(';')[0].trim();
|
|
28
37
|
return BINARY_CONTENT_TYPE_PATTERNS.some((pattern) => pattern.test(ct));
|
|
29
38
|
}
|
|
39
|
+
function isTextContentType(contentType) {
|
|
40
|
+
if (!contentType)
|
|
41
|
+
return false;
|
|
42
|
+
const ct = contentType.toLowerCase().split(';')[0].trim();
|
|
43
|
+
return TEXT_CONTENT_TYPE_PATTERNS.some((pattern) => pattern.test(ct));
|
|
44
|
+
}
|
|
30
45
|
class HttpForwarder {
|
|
31
46
|
constructor(targetUrl) {
|
|
32
47
|
this.targetUrl = targetUrl;
|
|
@@ -65,15 +80,27 @@ class HttpForwarder {
|
|
|
65
80
|
? response.data
|
|
66
81
|
: Buffer.from(response.data);
|
|
67
82
|
const binary = isBinaryContentType(responseContentType);
|
|
83
|
+
// Build remote origin from proxy headers for URL rewriting
|
|
84
|
+
const remoteHost = request.headers['x-forwarded-host'] || request.headers['X-Forwarded-Host'];
|
|
85
|
+
const remoteProto = request.headers['x-forwarded-proto'] || request.headers['X-Forwarded-Proto'] || 'https';
|
|
86
|
+
const remoteOrigin = remoteHost ? `${remoteProto}://${remoteHost}` : null;
|
|
87
|
+
// Rewrite local URLs to remote URLs in text responses
|
|
88
|
+
let bodyStr = binary ? '' : responseBuffer.toString('utf8');
|
|
89
|
+
if (!binary && remoteOrigin && isTextContentType(responseContentType)) {
|
|
90
|
+
bodyStr = this.rewriteUrls(bodyStr, remoteOrigin);
|
|
91
|
+
}
|
|
92
|
+
// Rewrite Location header for redirects
|
|
93
|
+
const sanitizedHeaders = this.sanitizeHeaders(response.headers);
|
|
94
|
+
if (remoteOrigin && sanitizedHeaders['location']) {
|
|
95
|
+
sanitizedHeaders['location'] = this.rewriteUrl(sanitizedHeaders['location'], remoteOrigin);
|
|
96
|
+
}
|
|
68
97
|
// Return response with appropriate encoding
|
|
69
98
|
return {
|
|
70
99
|
type: 'response',
|
|
71
100
|
requestId: request.requestId,
|
|
72
101
|
statusCode: response.status,
|
|
73
|
-
headers:
|
|
74
|
-
body: binary
|
|
75
|
-
? responseBuffer.toString('base64')
|
|
76
|
-
: responseBuffer.toString('utf8'),
|
|
102
|
+
headers: sanitizedHeaders,
|
|
103
|
+
body: binary ? responseBuffer.toString('base64') : bodyStr,
|
|
77
104
|
bodyEncoding: binary ? 'base64' : 'utf8',
|
|
78
105
|
};
|
|
79
106
|
}
|
|
@@ -125,6 +152,33 @@ class HttpForwarder {
|
|
|
125
152
|
}
|
|
126
153
|
return sanitized;
|
|
127
154
|
}
|
|
155
|
+
getLocalOrigins() {
|
|
156
|
+
const parsed = new URL(this.targetUrl);
|
|
157
|
+
const origins = [parsed.origin];
|
|
158
|
+
// Also match the opposite protocol variant (http↔https)
|
|
159
|
+
// WordPress and other apps may hardcode https://localhost in their output
|
|
160
|
+
const altProtocol = parsed.protocol === 'https:' ? 'http:' : 'https:';
|
|
161
|
+
const altOrigin = `${altProtocol}//${parsed.host}`;
|
|
162
|
+
origins.push(altOrigin);
|
|
163
|
+
return origins;
|
|
164
|
+
}
|
|
165
|
+
rewriteUrls(body, remoteOrigin) {
|
|
166
|
+
const origins = this.getLocalOrigins();
|
|
167
|
+
let result = body;
|
|
168
|
+
for (const origin of origins) {
|
|
169
|
+
result = result.split(origin).join(remoteOrigin);
|
|
170
|
+
}
|
|
171
|
+
return result;
|
|
172
|
+
}
|
|
173
|
+
rewriteUrl(url, remoteOrigin) {
|
|
174
|
+
const origins = this.getLocalOrigins();
|
|
175
|
+
for (const origin of origins) {
|
|
176
|
+
if (url.startsWith(origin)) {
|
|
177
|
+
return remoteOrigin + url.slice(origin.length);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
return url;
|
|
181
|
+
}
|
|
128
182
|
setTargetUrl(url) {
|
|
129
183
|
this.targetUrl = url;
|
|
130
184
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-forwarder.js","sourceRoot":"","sources":["../../src/core/http-forwarder.ts"],"names":[],"mappings":";;;;;;AAAA,kDAA6C;AAE7C,4CAAyC;AACzC,4CAAmD;AAEnD,MAAM,4BAA4B,GAAG;IACnC,UAAU;IACV,UAAU;IACV,UAAU;IACV,SAAS;IACT,4BAA4B;IAC5B,mBAAmB;IACnB,mBAAmB;IACnB,oBAAoB;IACpB,oBAAoB;IACpB,qBAAqB;IACrB,sBAAsB;IACtB,qBAAqB;CACtB,CAAC;AAEF,SAAS,mBAAmB,CAAC,WAA+B;IAC1D,IAAI,CAAC,WAAW;QAAE,OAAO,KAAK,CAAC;IAC/B,MAAM,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAC1D,OAAO,4BAA4B,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1E,CAAC;AAED,MAAa,aAAa;IAGxB,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC7B,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,OAAyB;QACrC,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAE7B,IAAI,CAAC;YACH,mCAAmC;YACnC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;YAClD,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE;gBACrD,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YAEH,wCAAwC;YACxC,IAAI,WAAW,GAAgC,OAAO,CAAC,IAAI,CAAC;YAC5D,IAAI,OAAO,CAAC,YAAY,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;gBACtD,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;YACpD,CAAC;YAED,kDAAkD;YAClD,MAAM,QAAQ,GAA0B,MAAM,IAAA,eAAK,EAAC;gBAClD,MAAM,EAAE,OAAO,CAAC,MAAM;gBACtB,GAAG,EAAE,GAAG,CAAC,QAAQ,EAAE;gBACnB,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC;gBAC5C,IAAI,EAAE,WAAW;gBACjB,cAAc,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE,yBAAyB;gBACrD,YAAY,EAAE,CAAC;gBACf,OAAO,EAAE,KAAK;gBACd,YAAY,EAAE,aAAa;aAC5B,CAAC,CAAC;YAEH,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,kBAAkB;YAClB,eAAM,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;YAC9D,eAAM,CAAC,KAAK,CAAC,kBAAkB,QAAQ,IAAI,CAAC,CAAC;YAE7C,kCAAkC;YAClC,MAAM,mBAAmB,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAE9C,CAAC;YACd,MAAM,cAAc,GAAG,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACnD,CAAC,CAAC,QAAQ,CAAC,IAAI;gBACf,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAC/B,MAAM,MAAM,GAAG,mBAAmB,CAAC,mBAAmB,CAAC,CAAC;YAExD,
|
|
1
|
+
{"version":3,"file":"http-forwarder.js","sourceRoot":"","sources":["../../src/core/http-forwarder.ts"],"names":[],"mappings":"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"}
|