@furystack/rest-service 10.0.28 → 10.1.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/README.md +249 -12
- package/esm/api-manager.d.ts +1 -3
- package/esm/api-manager.d.ts.map +1 -1
- package/esm/api-manager.js +4 -6
- package/esm/api-manager.js.map +1 -1
- package/esm/header-processor.d.ts +39 -0
- package/esm/header-processor.d.ts.map +1 -0
- package/esm/header-processor.js +113 -0
- package/esm/header-processor.js.map +1 -0
- package/esm/header-processor.spec.d.ts +2 -0
- package/esm/header-processor.spec.d.ts.map +1 -0
- package/esm/header-processor.spec.js +420 -0
- package/esm/header-processor.spec.js.map +1 -0
- package/esm/helpers.d.ts +69 -1
- package/esm/helpers.d.ts.map +1 -1
- package/esm/helpers.js +70 -1
- package/esm/helpers.js.map +1 -1
- package/esm/helpers.spec.js +21 -5
- package/esm/helpers.spec.js.map +1 -1
- package/esm/http-proxy-handler.d.ts +53 -0
- package/esm/http-proxy-handler.d.ts.map +1 -0
- package/esm/http-proxy-handler.js +179 -0
- package/esm/http-proxy-handler.js.map +1 -0
- package/esm/http-user-context.d.ts +4 -4
- package/esm/http-user-context.d.ts.map +1 -1
- package/esm/http-user-context.js +4 -4
- package/esm/http-user-context.js.map +1 -1
- package/esm/index.d.ts +1 -0
- package/esm/index.d.ts.map +1 -1
- package/esm/index.js +1 -0
- package/esm/index.js.map +1 -1
- package/esm/path-processor.d.ts +33 -0
- package/esm/path-processor.d.ts.map +1 -0
- package/esm/path-processor.js +58 -0
- package/esm/path-processor.js.map +1 -0
- package/esm/path-processor.spec.d.ts +2 -0
- package/esm/path-processor.spec.d.ts.map +1 -0
- package/esm/path-processor.spec.js +256 -0
- package/esm/path-processor.spec.js.map +1 -0
- package/esm/proxy-manager.d.ts +52 -0
- package/esm/proxy-manager.d.ts.map +1 -0
- package/esm/proxy-manager.js +84 -0
- package/esm/proxy-manager.js.map +1 -0
- package/esm/proxy-manager.spec.d.ts +2 -0
- package/esm/proxy-manager.spec.d.ts.map +1 -0
- package/esm/proxy-manager.spec.js +1781 -0
- package/esm/proxy-manager.spec.js.map +1 -0
- package/esm/server-manager.d.ts +7 -0
- package/esm/server-manager.d.ts.map +1 -1
- package/esm/server-manager.js +12 -0
- package/esm/server-manager.js.map +1 -1
- package/esm/static-server-manager.d.ts.map +1 -1
- package/esm/static-server-manager.js +5 -7
- package/esm/static-server-manager.js.map +1 -1
- package/esm/websocket-proxy-handler.d.ts +44 -0
- package/esm/websocket-proxy-handler.d.ts.map +1 -0
- package/esm/websocket-proxy-handler.js +157 -0
- package/esm/websocket-proxy-handler.js.map +1 -0
- package/package.json +12 -10
- package/src/api-manager.ts +5 -15
- package/src/header-processor.spec.ts +514 -0
- package/src/header-processor.ts +140 -0
- package/src/helpers.spec.ts +23 -5
- package/src/helpers.ts +72 -1
- package/src/http-proxy-handler.ts +215 -0
- package/src/http-user-context.ts +6 -6
- package/src/index.ts +1 -0
- package/src/path-processor.spec.ts +318 -0
- package/src/path-processor.ts +69 -0
- package/src/proxy-manager.spec.ts +2094 -0
- package/src/proxy-manager.ts +101 -0
- package/src/server-manager.ts +19 -0
- package/src/static-server-manager.ts +5 -7
- package/src/websocket-proxy-handler.ts +204 -0
package/esm/helpers.spec.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
import { getPort } from '@furystack/core/port-generator';
|
|
1
2
|
import { Injector } from '@furystack/inject';
|
|
2
3
|
import { usingAsync } from '@furystack/utils';
|
|
4
|
+
import { describe, expect, it } from 'vitest';
|
|
3
5
|
import { ApiManager } from './api-manager.js';
|
|
6
|
+
import { useHttpAuthentication, useProxy, useRestService, useStaticFiles } from './helpers.js';
|
|
4
7
|
import { HttpAuthenticationSettings } from './http-authentication-settings.js';
|
|
5
|
-
import {
|
|
8
|
+
import { ProxyManager } from './proxy-manager.js';
|
|
6
9
|
import { StaticServerManager } from './static-server-manager.js';
|
|
7
|
-
import { describe, it, expect } from 'vitest';
|
|
8
|
-
import { getPort } from '@furystack/core/port-generator';
|
|
9
10
|
describe('Injector extensions', () => {
|
|
10
11
|
describe('useHttpAuthentication', () => {
|
|
11
12
|
it('Should set up HTTP Authentication', async () => {
|
|
@@ -24,8 +25,8 @@ describe('Injector extensions', () => {
|
|
|
24
25
|
});
|
|
25
26
|
});
|
|
26
27
|
});
|
|
27
|
-
describe('
|
|
28
|
-
it('Should set up a
|
|
28
|
+
describe('useStaticFiles()', () => {
|
|
29
|
+
it('Should set up a static file server', async () => {
|
|
29
30
|
await usingAsync(new Injector(), async (i) => {
|
|
30
31
|
const port = getPort();
|
|
31
32
|
await useStaticFiles({ injector: i, baseUrl: '/', path: '.', port });
|
|
@@ -33,5 +34,20 @@ describe('Injector extensions', () => {
|
|
|
33
34
|
});
|
|
34
35
|
});
|
|
35
36
|
});
|
|
37
|
+
describe('useProxy()', () => {
|
|
38
|
+
it('Should set up a proxy server', async () => {
|
|
39
|
+
await usingAsync(new Injector(), async (i) => {
|
|
40
|
+
const sourcePort = getPort();
|
|
41
|
+
const targetPort = getPort();
|
|
42
|
+
await useProxy({
|
|
43
|
+
injector: i,
|
|
44
|
+
sourceBaseUrl: '/api',
|
|
45
|
+
targetBaseUrl: `http://localhost:${targetPort}`,
|
|
46
|
+
sourcePort,
|
|
47
|
+
});
|
|
48
|
+
expect(i.cachedSingletons.get(ProxyManager)).toBeDefined();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
});
|
|
36
52
|
});
|
|
37
53
|
//# sourceMappingURL=helpers.spec.js.map
|
package/esm/helpers.spec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"helpers.spec.js","sourceRoot":"","sources":["../src/helpers.spec.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import type { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from 'http';
|
|
2
|
+
export interface HttpProxyOptions {
|
|
3
|
+
sourceBaseUrl: string;
|
|
4
|
+
targetBaseUrl: string;
|
|
5
|
+
pathRewrite?: (sourcePath: string) => string;
|
|
6
|
+
headers?: (originalHeaders: OutgoingHttpHeaders) => OutgoingHttpHeaders;
|
|
7
|
+
cookies?: (originalCookies: string[]) => string[];
|
|
8
|
+
responseCookies?: (responseCookies: string[]) => string[];
|
|
9
|
+
timeout?: number;
|
|
10
|
+
onError?: (error: {
|
|
11
|
+
from: string;
|
|
12
|
+
to: string;
|
|
13
|
+
error: unknown;
|
|
14
|
+
}) => void;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Handles HTTP request proxying with streaming support
|
|
18
|
+
*/
|
|
19
|
+
export declare class HttpProxyHandler {
|
|
20
|
+
private readonly options;
|
|
21
|
+
private readonly headerProcessor;
|
|
22
|
+
private readonly pathProcessor;
|
|
23
|
+
constructor(options: HttpProxyOptions);
|
|
24
|
+
/**
|
|
25
|
+
* Sets up abort controller and timeout for request cancellation
|
|
26
|
+
*/
|
|
27
|
+
private setupAbortHandling;
|
|
28
|
+
/**
|
|
29
|
+
* Extracts Set-Cookie headers from the response, handling both standard and undici formats
|
|
30
|
+
*/
|
|
31
|
+
private extractSetCookieHeaders;
|
|
32
|
+
/**
|
|
33
|
+
* Copies response headers from proxy response to client response
|
|
34
|
+
*/
|
|
35
|
+
private copyResponseHeaders;
|
|
36
|
+
/**
|
|
37
|
+
* Handles Set-Cookie headers with optional transformation
|
|
38
|
+
*/
|
|
39
|
+
private handleSetCookieHeaders;
|
|
40
|
+
/**
|
|
41
|
+
* Streams the response body from proxy to client
|
|
42
|
+
*/
|
|
43
|
+
private streamResponseBody;
|
|
44
|
+
/**
|
|
45
|
+
* Handles proxy errors and sends appropriate response to client
|
|
46
|
+
*/
|
|
47
|
+
private handleProxyError;
|
|
48
|
+
/**
|
|
49
|
+
* Main handler for proxying HTTP requests
|
|
50
|
+
*/
|
|
51
|
+
handle(req: IncomingMessage, res: ServerResponse): Promise<void>;
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=http-proxy-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-proxy-handler.d.ts","sourceRoot":"","sources":["../src/http-proxy-handler.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,MAAM,CAAA;AAKhF,MAAM,WAAW,gBAAgB;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,aAAa,EAAE,MAAM,CAAA;IACrB,WAAW,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;IAC5C,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,mBAAmB,KAAK,mBAAmB,CAAA;IACvE,OAAO,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAA;IACjD,eAAe,CAAC,EAAE,CAAC,eAAe,EAAE,MAAM,EAAE,KAAK,MAAM,EAAE,CAAA;IACzD,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;CACxE;AAED;;GAEG;AACH,qBAAa,gBAAgB;IAIf,OAAO,CAAC,QAAQ,CAAC,OAAO;IAHpC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAwB;IACxD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;gBAEvB,OAAO,EAAE,gBAAgB;IAEtD;;OAEG;IACH,OAAO,CAAC,kBAAkB;IA0B1B;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAkB/B;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAU3B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAS9B;;OAEG;YACW,kBAAkB;IA6BhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiBxB;;OAEG;IACU,MAAM,CAAC,GAAG,EAAE,eAAe,EAAE,GAAG,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;CA2D9E"}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import { Readable } from 'stream';
|
|
2
|
+
import { HeaderProcessor } from './header-processor.js';
|
|
3
|
+
import { PathProcessor } from './path-processor.js';
|
|
4
|
+
/**
|
|
5
|
+
* Handles HTTP request proxying with streaming support
|
|
6
|
+
*/
|
|
7
|
+
export class HttpProxyHandler {
|
|
8
|
+
options;
|
|
9
|
+
headerProcessor = new HeaderProcessor();
|
|
10
|
+
pathProcessor = new PathProcessor();
|
|
11
|
+
constructor(options) {
|
|
12
|
+
this.options = options;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Sets up abort controller and timeout for request cancellation
|
|
16
|
+
*/
|
|
17
|
+
setupAbortHandling(req, res, timeoutMs) {
|
|
18
|
+
const abortController = new AbortController();
|
|
19
|
+
const abortUpstream = () => {
|
|
20
|
+
try {
|
|
21
|
+
abortController.abort();
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Ignore abort errors
|
|
25
|
+
}
|
|
26
|
+
// Clean up listeners to prevent memory leaks
|
|
27
|
+
res.off('close', abortUpstream);
|
|
28
|
+
req.off('aborted', abortUpstream);
|
|
29
|
+
};
|
|
30
|
+
res.once('close', abortUpstream);
|
|
31
|
+
req.once('aborted', abortUpstream);
|
|
32
|
+
const timeoutId = setTimeout(() => abortController.abort(), timeoutMs);
|
|
33
|
+
return { abortController, timeoutId };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Extracts Set-Cookie headers from the response, handling both standard and undici formats
|
|
37
|
+
*/
|
|
38
|
+
extractSetCookieHeaders(proxyResponse) {
|
|
39
|
+
const setCookieHeaders = [];
|
|
40
|
+
const anyHeaders = proxyResponse.headers;
|
|
41
|
+
const fromGetter = anyHeaders.getSetCookie?.();
|
|
42
|
+
if (fromGetter && Array.isArray(fromGetter) && fromGetter.length) {
|
|
43
|
+
setCookieHeaders.push(...fromGetter);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
proxyResponse.headers.forEach((value, key) => {
|
|
47
|
+
if (key.toLowerCase() === 'set-cookie') {
|
|
48
|
+
setCookieHeaders.push(value);
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
return setCookieHeaders;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Copies response headers from proxy response to client response
|
|
56
|
+
*/
|
|
57
|
+
copyResponseHeaders(proxyResponse, res) {
|
|
58
|
+
proxyResponse.headers.forEach((value, key) => {
|
|
59
|
+
if (!this.headerProcessor.isHopByHopHeader(key)) {
|
|
60
|
+
if (key.toLowerCase() !== 'set-cookie') {
|
|
61
|
+
res.setHeader(key, value);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Handles Set-Cookie headers with optional transformation
|
|
68
|
+
*/
|
|
69
|
+
handleSetCookieHeaders(setCookieHeaders, res) {
|
|
70
|
+
if (setCookieHeaders.length > 0) {
|
|
71
|
+
const finalSetCookies = this.options.responseCookies
|
|
72
|
+
? this.options.responseCookies(setCookieHeaders)
|
|
73
|
+
: setCookieHeaders;
|
|
74
|
+
res.setHeader('set-cookie', finalSetCookies);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Streams the response body from proxy to client
|
|
79
|
+
*/
|
|
80
|
+
async streamResponseBody(proxyResponse, res) {
|
|
81
|
+
if (!proxyResponse.body) {
|
|
82
|
+
res.end();
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const reader = proxyResponse.body.getReader();
|
|
86
|
+
try {
|
|
87
|
+
while (true) {
|
|
88
|
+
const { done, value } = await reader.read();
|
|
89
|
+
if (done)
|
|
90
|
+
break;
|
|
91
|
+
if (!res.write(value)) {
|
|
92
|
+
await new Promise((resolve) => res.once('drain', resolve));
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
res.end();
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
try {
|
|
99
|
+
await reader.cancel();
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
// Ignore cancel errors
|
|
103
|
+
}
|
|
104
|
+
if (!res.destroyed) {
|
|
105
|
+
res.destroy();
|
|
106
|
+
}
|
|
107
|
+
throw error;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Handles proxy errors and sends appropriate response to client
|
|
112
|
+
*/
|
|
113
|
+
handleProxyError(error, res) {
|
|
114
|
+
if (this.options.onError) {
|
|
115
|
+
this.options.onError({
|
|
116
|
+
from: this.options.sourceBaseUrl,
|
|
117
|
+
to: this.options.targetBaseUrl,
|
|
118
|
+
error,
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
if (!res.headersSent) {
|
|
122
|
+
res.writeHead(502, { 'Content-Type': 'text/plain' });
|
|
123
|
+
res.end('Bad Gateway');
|
|
124
|
+
}
|
|
125
|
+
else if (!res.destroyed) {
|
|
126
|
+
res.destroy();
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Main handler for proxying HTTP requests
|
|
131
|
+
*/
|
|
132
|
+
async handle(req, res) {
|
|
133
|
+
try {
|
|
134
|
+
// Build target URL
|
|
135
|
+
const targetUrl = this.pathProcessor.processUrl(req.url, this.options.sourceBaseUrl, this.options.targetBaseUrl, this.options.pathRewrite);
|
|
136
|
+
const parsedTargetUrl = new URL(targetUrl);
|
|
137
|
+
// Process headers
|
|
138
|
+
const { proxyHeaders } = this.headerProcessor.processRequestHeaders(req, parsedTargetUrl.host, {
|
|
139
|
+
headers: this.options.headers,
|
|
140
|
+
cookies: this.options.cookies,
|
|
141
|
+
});
|
|
142
|
+
// Set up timeout and abort handling
|
|
143
|
+
const timeoutMs = this.options.timeout ?? 30000;
|
|
144
|
+
const { abortController, timeoutId } = this.setupAbortHandling(req, res, timeoutMs);
|
|
145
|
+
try {
|
|
146
|
+
// Make the proxy request
|
|
147
|
+
const proxyResponse = await fetch(targetUrl, {
|
|
148
|
+
method: req.method,
|
|
149
|
+
headers: proxyHeaders,
|
|
150
|
+
body: req.method !== 'GET' && req.method !== 'HEAD'
|
|
151
|
+
? Readable.toWeb(req)
|
|
152
|
+
: undefined,
|
|
153
|
+
// @ts-expect-error - duplex is not in the types yet, but required for streaming bodies
|
|
154
|
+
duplex: 'half',
|
|
155
|
+
signal: abortController.signal,
|
|
156
|
+
});
|
|
157
|
+
clearTimeout(timeoutId);
|
|
158
|
+
// Extract and handle Set-Cookie headers
|
|
159
|
+
const setCookieHeaders = this.extractSetCookieHeaders(proxyResponse);
|
|
160
|
+
// Copy other response headers
|
|
161
|
+
this.copyResponseHeaders(proxyResponse, res);
|
|
162
|
+
// Handle Set-Cookie headers with transformation
|
|
163
|
+
this.handleSetCookieHeaders(setCookieHeaders, res);
|
|
164
|
+
// Set status code
|
|
165
|
+
res.writeHead(proxyResponse.status, res.getHeaders());
|
|
166
|
+
// Stream the response body
|
|
167
|
+
await this.streamResponseBody(proxyResponse, res);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
clearTimeout(timeoutId);
|
|
171
|
+
throw error;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
catch (error) {
|
|
175
|
+
this.handleProxyError(error, res);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
//# sourceMappingURL=http-proxy-handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-proxy-handler.js","sourceRoot":"","sources":["../src/http-proxy-handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { IncomingMessage } from 'http';
|
|
2
1
|
import type { User } from '@furystack/core';
|
|
2
|
+
import type { IncomingMessage } from 'http';
|
|
3
3
|
import { HttpAuthenticationSettings } from './http-authentication-settings.js';
|
|
4
4
|
import type { DefaultSession } from './models/default-session.js';
|
|
5
5
|
/**
|
|
@@ -13,14 +13,14 @@ export declare class HttpUserContext {
|
|
|
13
13
|
private user?;
|
|
14
14
|
/**
|
|
15
15
|
* @param request The request to be authenticated
|
|
16
|
-
* @returns
|
|
16
|
+
* @returns whether the current user is authenticated
|
|
17
17
|
*/
|
|
18
18
|
isAuthenticated(request: IncomingMessage): Promise<boolean>;
|
|
19
19
|
/**
|
|
20
|
-
* Returns
|
|
20
|
+
* Returns whether the current user can be authorized with ALL of the specified roles
|
|
21
21
|
* @param request The request to be authenticated
|
|
22
22
|
* @param roles The list of roles to authorize
|
|
23
|
-
* @returns a boolean value that indicates
|
|
23
|
+
* @returns a boolean value that indicates whether the user is authorized
|
|
24
24
|
*/
|
|
25
25
|
isAuthorized(request: IncomingMessage, ...roles: string[]): Promise<boolean>;
|
|
26
26
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-user-context.d.ts","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"http-user-context.d.ts","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAA;AAK3C,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,MAAM,CAAA;AAC3C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAA;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAA;AAEjE;;GAEG;AACH,qBACa,eAAe;IACnB,YAAY,8HAA4D;IAExE,eAAe,sKAA+D;IAErF,OAAO,CAAC,aAAa,CAOpB;IAED,OAAO,CAAC,cAAc,CAOrB;IAED,OAAO,CAAC,IAAI,CAAC,CAAM;IAEnB;;;OAGG;IACU,eAAe,CAAC,OAAO,EAAE,eAAe;IASrD;;;;;OAKG;IACU,YAAY,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAUzF;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;IAanD,cAAc,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC;IAQ9D,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,MAAM,GAAG,IAAI;IAkB3E,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAuB1F;;;;;OAKG;IACU,WAAW,CACtB,IAAI,EAAE,IAAI,EACV,cAAc,EAAE;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,GACrE,OAAO,CAAC,IAAI,CAAC;IAQH,YAAY,CACvB,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,SAAS,CAAC,EACzC,QAAQ,EAAE;QAAE,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE;IAalE,SACwB,cAAc,EAAE,0BAA0B,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;IAExF,iBACyB,YAAY,CAAc;IAEnD,iBACyB,aAAa,CAAuB;IAEtD,IAAI;CAiBZ"}
|
package/esm/http-user-context.js
CHANGED
|
@@ -9,9 +9,9 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { StoreManager } from '@furystack/core';
|
|
11
11
|
import { Injectable, Injected } from '@furystack/inject';
|
|
12
|
-
import { HttpAuthenticationSettings } from './http-authentication-settings.js';
|
|
13
12
|
import { PasswordAuthenticator, UnauthenticatedError } from '@furystack/security';
|
|
14
13
|
import { randomBytes } from 'crypto';
|
|
14
|
+
import { HttpAuthenticationSettings } from './http-authentication-settings.js';
|
|
15
15
|
/**
|
|
16
16
|
* Injectable UserContext for FuryStack HTTP Api
|
|
17
17
|
*/
|
|
@@ -37,7 +37,7 @@ let HttpUserContext = class HttpUserContext {
|
|
|
37
37
|
user;
|
|
38
38
|
/**
|
|
39
39
|
* @param request The request to be authenticated
|
|
40
|
-
* @returns
|
|
40
|
+
* @returns whether the current user is authenticated
|
|
41
41
|
*/
|
|
42
42
|
async isAuthenticated(request) {
|
|
43
43
|
try {
|
|
@@ -49,10 +49,10 @@ let HttpUserContext = class HttpUserContext {
|
|
|
49
49
|
}
|
|
50
50
|
}
|
|
51
51
|
/**
|
|
52
|
-
* Returns
|
|
52
|
+
* Returns whether the current user can be authorized with ALL of the specified roles
|
|
53
53
|
* @param request The request to be authenticated
|
|
54
54
|
* @param roles The list of roles to authorize
|
|
55
|
-
* @returns a boolean value that indicates
|
|
55
|
+
* @returns a boolean value that indicates whether the user is authorized
|
|
56
56
|
*/
|
|
57
57
|
async isAuthorized(request, ...roles) {
|
|
58
58
|
const currentUser = await this.getCurrentUser(request);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-user-context.js","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":";;;;;;;;;
|
|
1
|
+
{"version":3,"file":"http-user-context.js","sourceRoot":"","sources":["../src/http-user-context.ts"],"names":[],"mappings":"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"}
|
package/esm/index.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export * from './http-authentication-settings.js';
|
|
|
10
10
|
export * from './http-user-context.js';
|
|
11
11
|
export * from './mime-types.js';
|
|
12
12
|
export * from './models/index.js';
|
|
13
|
+
export * from './proxy-manager.js';
|
|
13
14
|
export * from './read-post-body.js';
|
|
14
15
|
export * from './request-action-implementation.js';
|
|
15
16
|
export * from './schema-validator/index.js';
|
package/esm/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA"}
|
package/esm/index.js
CHANGED
|
@@ -10,6 +10,7 @@ export * from './http-authentication-settings.js';
|
|
|
10
10
|
export * from './http-user-context.js';
|
|
11
11
|
export * from './mime-types.js';
|
|
12
12
|
export * from './models/index.js';
|
|
13
|
+
export * from './proxy-manager.js';
|
|
13
14
|
export * from './read-post-body.js';
|
|
14
15
|
export * from './request-action-implementation.js';
|
|
15
16
|
export * from './schema-validator/index.js';
|
package/esm/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA;AACpC,cAAc,kBAAkB,CAAA;AAChC,cAAc,mBAAmB,CAAA;AACjC,cAAc,gBAAgB,CAAA;AAC9B,cAAc,gCAAgC,CAAA;AAC9C,cAAc,0BAA0B,CAAA;AACxC,cAAc,cAAc,CAAA;AAC5B,cAAc,mCAAmC,CAAA;AACjD,cAAc,wBAAwB,CAAA;AACtC,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,qBAAqB,CAAA;AACnC,cAAc,oCAAoC,CAAA;AAClD,cAAc,6BAA6B,CAAA;AAC3C,cAAc,qBAAqB,CAAA;AACnC,cAAc,iCAAiC,CAAA;AAC/C,cAAc,4BAA4B,CAAA;AAC1C,cAAc,eAAe,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Handles URL validation, path extraction, and path rewriting for proxy requests
|
|
3
|
+
*/
|
|
4
|
+
export declare class PathProcessor {
|
|
5
|
+
/**
|
|
6
|
+
* Validates that a URL string is properly formatted
|
|
7
|
+
* @throws Error if URL is invalid
|
|
8
|
+
*/
|
|
9
|
+
validateUrl(url: string, context?: string): URL;
|
|
10
|
+
/**
|
|
11
|
+
* Validates that a URL uses HTTP or HTTPS protocol
|
|
12
|
+
* @throws Error if protocol is not HTTP/HTTPS
|
|
13
|
+
*/
|
|
14
|
+
validateHttpProtocol(url: URL): void;
|
|
15
|
+
/**
|
|
16
|
+
* Extracts the path portion after the source base URL
|
|
17
|
+
*/
|
|
18
|
+
extractSourcePath(requestUrl: string, sourceBaseUrl: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Applies path rewrite function if provided, otherwise returns the path as-is
|
|
21
|
+
*/
|
|
22
|
+
applyPathRewrite(sourcePath: string, pathRewrite?: (path: string) => string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Builds the complete target URL from base URL and processed path
|
|
25
|
+
*/
|
|
26
|
+
buildTargetUrl(targetBaseUrl: string, targetPath: string): string;
|
|
27
|
+
/**
|
|
28
|
+
* Processes the full request URL to produce a target URL
|
|
29
|
+
* @throws Error if the resulting target URL is invalid
|
|
30
|
+
*/
|
|
31
|
+
processUrl(requestUrl: string, sourceBaseUrl: string, targetBaseUrl: string, pathRewrite?: (path: string) => string): string;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=path-processor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-processor.d.ts","sourceRoot":"","sources":["../src/path-processor.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,qBAAa,aAAa;IACxB;;;OAGG;IACI,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,SAAQ,GAAG,GAAG;IAQrD;;;OAGG;IACI,oBAAoB,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI;IAM3C;;OAEG;IACI,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM;IAI3E;;OAEG;IACI,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,MAAM;IAI3F;;OAEG;IACI,cAAc,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAIxE;;;OAGG;IACI,UAAU,CACf,UAAU,EAAE,MAAM,EAClB,aAAa,EAAE,MAAM,EACrB,aAAa,EAAE,MAAM,EACrB,WAAW,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GACrC,MAAM;CAUV"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { PathHelper } from '@furystack/utils';
|
|
2
|
+
/**
|
|
3
|
+
* Handles URL validation, path extraction, and path rewriting for proxy requests
|
|
4
|
+
*/
|
|
5
|
+
export class PathProcessor {
|
|
6
|
+
/**
|
|
7
|
+
* Validates that a URL string is properly formatted
|
|
8
|
+
* @throws Error if URL is invalid
|
|
9
|
+
*/
|
|
10
|
+
validateUrl(url, context = 'URL') {
|
|
11
|
+
try {
|
|
12
|
+
return new URL(url);
|
|
13
|
+
}
|
|
14
|
+
catch (error) {
|
|
15
|
+
throw new Error(`Invalid ${context}: ${url}${error instanceof Error ? ` (${error.message})` : ''}`);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Validates that a URL uses HTTP or HTTPS protocol
|
|
20
|
+
* @throws Error if protocol is not HTTP/HTTPS
|
|
21
|
+
*/
|
|
22
|
+
validateHttpProtocol(url) {
|
|
23
|
+
if (!url.protocol.startsWith('http')) {
|
|
24
|
+
throw new Error(`Invalid targetBaseUrl protocol: ${url.protocol} (must be http or https)`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Extracts the path portion after the source base URL
|
|
29
|
+
*/
|
|
30
|
+
extractSourcePath(requestUrl, sourceBaseUrl) {
|
|
31
|
+
return PathHelper.extractPath(requestUrl, sourceBaseUrl);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Applies path rewrite function if provided, otherwise returns the path as-is
|
|
35
|
+
*/
|
|
36
|
+
applyPathRewrite(sourcePath, pathRewrite) {
|
|
37
|
+
return pathRewrite ? pathRewrite(sourcePath) : sourcePath;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Builds the complete target URL from base URL and processed path
|
|
41
|
+
*/
|
|
42
|
+
buildTargetUrl(targetBaseUrl, targetPath) {
|
|
43
|
+
return PathHelper.joinUrl(targetBaseUrl, targetPath);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Processes the full request URL to produce a target URL
|
|
47
|
+
* @throws Error if the resulting target URL is invalid
|
|
48
|
+
*/
|
|
49
|
+
processUrl(requestUrl, sourceBaseUrl, targetBaseUrl, pathRewrite) {
|
|
50
|
+
const sourcePath = this.extractSourcePath(requestUrl, sourceBaseUrl);
|
|
51
|
+
const targetPath = this.applyPathRewrite(sourcePath, pathRewrite);
|
|
52
|
+
const targetUrl = this.buildTargetUrl(targetBaseUrl, targetPath);
|
|
53
|
+
// Validate the resulting target URL
|
|
54
|
+
this.validateUrl(targetUrl, 'target URL');
|
|
55
|
+
return targetUrl;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
//# sourceMappingURL=path-processor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-processor.js","sourceRoot":"","sources":["../src/path-processor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAE7C;;GAEG;AACH,MAAM,OAAO,aAAa;IACxB;;;OAGG;IACI,WAAW,CAAC,GAAW,EAAE,OAAO,GAAG,KAAK;QAC7C,IAAI,CAAC;YACH,OAAO,IAAI,GAAG,CAAC,GAAG,CAAC,CAAA;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,WAAW,OAAO,KAAK,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;QACrG,CAAC;IACH,CAAC;IAED;;;OAGG;IACI,oBAAoB,CAAC,GAAQ;QAClC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACrC,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,CAAC,QAAQ,0BAA0B,CAAC,CAAA;QAC5F,CAAC;IACH,CAAC;IAED;;OAEG;IACI,iBAAiB,CAAC,UAAkB,EAAE,aAAqB;QAChE,OAAO,UAAU,CAAC,WAAW,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;IAC1D,CAAC;IAED;;OAEG;IACI,gBAAgB,CAAC,UAAkB,EAAE,WAAsC;QAChF,OAAO,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,UAAU,CAAA;IAC3D,CAAC;IAED;;OAEG;IACI,cAAc,CAAC,aAAqB,EAAE,UAAkB;QAC7D,OAAO,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;IACtD,CAAC;IAED;;;OAGG;IACI,UAAU,CACf,UAAkB,EAClB,aAAqB,EACrB,aAAqB,EACrB,WAAsC;QAEtC,MAAM,UAAU,GAAG,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAA;QACpE,MAAM,UAAU,GAAG,IAAI,CAAC,gBAAgB,CAAC,UAAU,EAAE,WAAW,CAAC,CAAA;QACjE,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,aAAa,EAAE,UAAU,CAAC,CAAA;QAEhE,oCAAoC;QACpC,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;QAEzC,OAAO,SAAS,CAAA;IAClB,CAAC;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-processor.spec.d.ts","sourceRoot":"","sources":["../src/path-processor.spec.ts"],"names":[],"mappings":""}
|