redis-smq-web-server 9.0.0-next.13 → 9.0.0-next.15
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/CHANGELOG.md +16 -0
- package/README.md +10 -16
- package/dist/cjs/src/config/parse-config.d.ts.map +1 -1
- package/dist/cjs/src/config/parse-config.js +13 -2
- package/dist/cjs/src/config/parse-config.js.map +1 -1
- package/dist/cjs/src/index.d.ts.map +1 -1
- package/dist/cjs/src/index.js +21 -15
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/tests/tests/test00001.test.js +5 -9
- package/dist/cjs/tests/tests/test00001.test.js.map +1 -1
- package/dist/cjs/tests/tests/test00002.test.js +5 -3
- package/dist/cjs/tests/tests/test00002.test.js.map +1 -1
- package/dist/cjs/tests/tests/test00003.test.js +6 -4
- package/dist/cjs/tests/tests/test00003.test.js.map +1 -1
- package/dist/esm/src/config/parse-config.d.ts.map +1 -1
- package/dist/esm/src/config/parse-config.js +12 -2
- package/dist/esm/src/config/parse-config.js.map +1 -1
- package/dist/esm/src/index.d.ts.map +1 -1
- package/dist/esm/src/index.js +21 -15
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/tests/tests/test00001.test.js +5 -9
- package/dist/esm/tests/tests/test00001.test.js.map +1 -1
- package/dist/esm/tests/tests/test00002.test.js +5 -3
- package/dist/esm/tests/tests/test00002.test.js.map +1 -1
- package/dist/esm/tests/tests/test00003.test.js +6 -4
- package/dist/esm/tests/tests/test00003.test.js.map +1 -1
- package/package.json +5 -5
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,22 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
## [9.0.0-next.15](https://github.com/weyoss/redis-smq/compare/v9.0.0-next.14...v9.0.0-next.15) (2025-10-31)
|
|
7
|
+
|
|
8
|
+
### 📝 Documentation
|
|
9
|
+
|
|
10
|
+
- **redis-smq-web-server:** add reverse proxy deployment guide ([c19a48c](https://github.com/weyoss/redis-smq/commit/c19a48c58c1e384a0d484cb79ee461503fa0a306))
|
|
11
|
+
|
|
12
|
+
## [9.0.0-next.14](https://github.com/weyoss/redis-smq/compare/v9.0.0-next.13...v9.0.0-next.14) (2025-10-28)
|
|
13
|
+
|
|
14
|
+
### ⚠ BREAKING CHANGES
|
|
15
|
+
|
|
16
|
+
- **redis-smq-web-server:** fix base path routing and improve middleware setup
|
|
17
|
+
|
|
18
|
+
### 🐛 Bug Fixes
|
|
19
|
+
|
|
20
|
+
- **redis-smq-web-server:** fix base path routing and improve middleware setup ([45d6c6d](https://github.com/weyoss/redis-smq/commit/45d6c6dbb35999676575f7f3373a495c9c2e3731))
|
|
21
|
+
|
|
6
22
|
## [9.0.0-next.13](https://github.com/weyoss/redis-smq/compare/v9.0.0-next.12...v9.0.0-next.13) (2025-10-28)
|
|
7
23
|
|
|
8
24
|
### 🐛 Bug Fixes
|
package/README.md
CHANGED
|
@@ -80,7 +80,7 @@ npx redis-smq-web-server \
|
|
|
80
80
|
--api-proxy-target http://127.0.0.1:7210
|
|
81
81
|
```
|
|
82
82
|
|
|
83
|
-
When `--api-proxy-target` is provided, requests to `<basePath>/api` and `<basePath>/
|
|
83
|
+
When `--api-proxy-target` is provided, requests to `<basePath>/api` and `<basePath>/swagger` are forwarded
|
|
84
84
|
to the upstream. In this mode, Redis connection options on the web server are not used; the upstream API service manages Redis.
|
|
85
85
|
|
|
86
86
|
### Programmatically (optional)
|
|
@@ -95,7 +95,7 @@ import { EConsoleLoggerLevel, ERedisConfigClient } from 'redis-smq-common';
|
|
|
95
95
|
const server = new RedisSMQWebServer({
|
|
96
96
|
webServer: {
|
|
97
97
|
port: 8080,
|
|
98
|
-
basePath: '/', // UI at '/', API at '/api',
|
|
98
|
+
basePath: '/', // UI at '/', API at '/api', swagger at '/swagger'
|
|
99
99
|
},
|
|
100
100
|
// The following options are used only when apiProxyTarget is NOT set
|
|
101
101
|
redis: {
|
|
@@ -140,15 +140,15 @@ await srv.run();
|
|
|
140
140
|
- Example: basePath = / → API at /api
|
|
141
141
|
- Example: basePath = /redis-smq → API at /redis-smq/api
|
|
142
142
|
|
|
143
|
-
- Swagger UI: mounted under <basePath>/
|
|
144
|
-
- Example: basePath = / → Swagger UI at /
|
|
145
|
-
- Example: basePath = /redis-smq → Swagger UI at /redis-smq/
|
|
143
|
+
- Swagger UI: mounted under <basePath>/swagger
|
|
144
|
+
- Example: basePath = / → Swagger UI at /swagger
|
|
145
|
+
- Example: basePath = /redis-smq → Swagger UI at /redis-smq/swagger
|
|
146
146
|
|
|
147
147
|
Proxying behavior:
|
|
148
148
|
|
|
149
149
|
- When apiProxyTarget is set, the server forwards:
|
|
150
150
|
- <basePath>/api → ${apiProxyTarget}
|
|
151
|
-
- <basePath>/
|
|
151
|
+
- <basePath>/swagger → ${apiProxyTarget}
|
|
152
152
|
- When apiProxyTarget is not set, the server hosts the embedded REST API in-process.
|
|
153
153
|
|
|
154
154
|
## Configuration
|
|
@@ -167,7 +167,7 @@ interface IRedisSMQWebServerConfig extends IRedisSMQRestApiConfig {
|
|
|
167
167
|
port?: number;
|
|
168
168
|
|
|
169
169
|
/**
|
|
170
|
-
* Base public path for the RedisSMQ Web UI and the local API/
|
|
170
|
+
* Base public path for the RedisSMQ Web UI and the local API/Swagger when embedded.
|
|
171
171
|
* Default: '/'
|
|
172
172
|
*/
|
|
173
173
|
basePath?: string;
|
|
@@ -184,7 +184,7 @@ interface IRedisSMQWebServerConfig extends IRedisSMQRestApiConfig {
|
|
|
184
184
|
|
|
185
185
|
Notes:
|
|
186
186
|
|
|
187
|
-
- When `webServer.apiProxyTarget` is set, the server proxies `<basePath>/api` and `<basePath>/
|
|
187
|
+
- When `webServer.apiProxyTarget` is set, the server proxies `<basePath>/api` and `<basePath>/swagger` to the target. In this mode, redis and logger options are not used by the web server (they are
|
|
188
188
|
handled by the upstream API service).
|
|
189
189
|
|
|
190
190
|
- When `webServer.apiProxyTarget` is not set, the web server mounts the embedded `redis-smq-rest-api` using the provided
|
|
@@ -195,7 +195,7 @@ Notes:
|
|
|
195
195
|
```shell
|
|
196
196
|
-p, --port <number> Port to run the server on (default: "8080")
|
|
197
197
|
-b, --base-path <string> Base public path for the RedisSMQ Web UI SPA (default: "/")
|
|
198
|
-
-t, --api-proxy-target <string> Proxy target for API (/api, /
|
|
198
|
+
-t, --api-proxy-target <string> Proxy target for API (/api, /swagger). Example: http://127.0.0.1:6000
|
|
199
199
|
-c, --redis-client <ioredis|redis> Redis client. Valid options are: ioredis, redis. (default: "ioredis")
|
|
200
200
|
-r, --redis-host <string> Redis server host (default: "127.0.0.1")
|
|
201
201
|
-o, --redis-port <number> Redis server port (default: "6379")
|
|
@@ -207,13 +207,7 @@ Notes:
|
|
|
207
207
|
|
|
208
208
|
## Deploying behind a reverse proxy
|
|
209
209
|
|
|
210
|
-
|
|
211
|
-
- Ensure your proxy forwards both the UI and API prefixes:
|
|
212
|
-
- /redis-smq → web server
|
|
213
|
-
- If you terminate TLS at the proxy, no additional config is needed here.
|
|
214
|
-
- If you also proxy the API to an external service, combine with `--api-proxy-target`:
|
|
215
|
-
- Client → reverse proxy → web server (/redis-smq)
|
|
216
|
-
- Web server proxies /redis-smq/api, /redis-smq/docs → external API
|
|
210
|
+
See [Deploying behind a reverse proxy](docs/deploying-behind-a-reverse-proxy.md).
|
|
217
211
|
|
|
218
212
|
## License
|
|
219
213
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,aAAa,EAAE,wBAM3B,CAAC;AAMF,wBAAgB,WAAW,CACzB,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,8BAA8B,
|
|
1
|
+
{"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,aAAa,EAAE,wBAM3B,CAAC;AAMF,wBAAgB,WAAW,CACzB,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,8BAA8B,CA0ChC"}
|
|
@@ -11,12 +11,23 @@ exports.defaultConfig = {
|
|
|
11
11
|
},
|
|
12
12
|
};
|
|
13
13
|
function parseConfig(config = {}) {
|
|
14
|
+
var _a;
|
|
14
15
|
const restApiParsedConfig = (0, redis_smq_rest_api_1.parseConfig)(config);
|
|
16
|
+
const normalizePath = (path) => {
|
|
17
|
+
const s = path
|
|
18
|
+
.split('/')
|
|
19
|
+
.map((i) => i.trim())
|
|
20
|
+
.filter((i) => !!i)
|
|
21
|
+
.join('/');
|
|
22
|
+
return `/${s}`;
|
|
23
|
+
};
|
|
24
|
+
const basePath = ((_a = config.webServer) === null || _a === void 0 ? void 0 : _a.basePath) !== undefined
|
|
25
|
+
? normalizePath(config.webServer.basePath)
|
|
26
|
+
: restApiParsedConfig.apiServer.basePath;
|
|
15
27
|
const webServer = Object.assign(Object.assign({}, exports.defaultConfig.webServer), config.webServer);
|
|
16
|
-
const basePath = String(webServer.basePath).replace(/\/+$/, '') || '/';
|
|
17
28
|
return Object.assign(Object.assign({}, restApiParsedConfig), { apiServer: Object.assign(Object.assign({}, restApiParsedConfig.apiServer), { basePath: basePath }), webServer: {
|
|
18
29
|
port: Number(webServer.port),
|
|
19
|
-
basePath,
|
|
30
|
+
basePath: basePath,
|
|
20
31
|
apiProxyTarget: webServer.apiProxyTarget
|
|
21
32
|
? String(webServer.apiProxyTarget)
|
|
22
33
|
: undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":";;;AA2BA,
|
|
1
|
+
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":";;;AA2BA,kCA4CC;AA1DD,2DAAuE;AAE1D,QAAA,aAAa,GAA6B;IACrD,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,GAAG;QACb,cAAc,EAAE,SAAS;KAC1B;CACF,CAAC;AAMF,SAAgB,WAAW,CACzB,SAA4C,EAAE;;IAE9C,MAAM,mBAAmB,GAAG,IAAA,gCAAkB,EAAC,MAAM,CAAC,CAAC;IAIvD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE;QAC7C,MAAM,CAAC,GAAG,IAAI;aACX,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC,CAAC;IAKF,MAAM,QAAQ,GACZ,CAAA,MAAA,MAAM,CAAC,SAAS,0CAAE,QAAQ,MAAK,SAAS;QACtC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC1C,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC;IAG7C,MAAM,SAAS,mCACV,qBAAa,CAAC,SAAS,GACvB,MAAM,CAAC,SAAS,CACpB,CAAC;IAEF,uCACK,mBAAmB,KACtB,SAAS,kCACJ,mBAAmB,CAAC,SAAS,KAChC,QAAQ,EAAE,QAAQ,KAEpB,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAC5B,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,SAAS,CAAC,cAAc;gBACtC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;gBAClC,CAAC,CAAC,SAAS;SACd,IACD;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,wBAAwB,EAEzB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAgB,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,wBAAwB,EAEzB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAgB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMzD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAA4B;IAC9C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEd,MAAM,GAAE,wBAA6B;YAYnC,eAAe;YA0Bf,QAAQ;IAsCtB,OAAO,CAAC,aAAa;YAeP,WAAW;YA6BX,SAAS;IAQV,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAepB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBvC"}
|
package/dist/cjs/src/index.js
CHANGED
|
@@ -21,7 +21,6 @@ const redis_smq_rest_api_1 = require("redis-smq-rest-api");
|
|
|
21
21
|
const parse_config_js_1 = require("./config/parse-config.js");
|
|
22
22
|
const http_proxy_middleware_1 = require("http-proxy-middleware");
|
|
23
23
|
const redis_smq_common_1 = require("redis-smq-common");
|
|
24
|
-
const express_rate_limit_1 = __importDefault(require("express-rate-limit"));
|
|
25
24
|
class RedisSMQWebServer {
|
|
26
25
|
constructor(config = {}) {
|
|
27
26
|
var _a;
|
|
@@ -41,16 +40,15 @@ class RedisSMQWebServer {
|
|
|
41
40
|
}
|
|
42
41
|
setupMiddleware() {
|
|
43
42
|
return __awaiter(this, void 0, void 0, function* () {
|
|
44
|
-
this.
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
this.app.use(express_1.default.static(this.webUIPath, {
|
|
43
|
+
const { basePath } = this.config.webServer;
|
|
44
|
+
this.app.set('trust proxy', true);
|
|
45
|
+
this.logger.info('Trusting reverse proxy headers.');
|
|
46
|
+
this.app.use(basePath, express_1.default.static(this.webUIPath, {
|
|
49
47
|
etag: true,
|
|
50
48
|
lastModified: true,
|
|
51
49
|
index: false,
|
|
52
50
|
setHeaders: (res, filePath) => {
|
|
53
|
-
if (filePath.match(/\.(
|
|
51
|
+
if (filePath.match(/\.(png|jpg|jpeg|gif|ico|svg|css|js)$/)) {
|
|
54
52
|
res.setHeader('Cache-Control', 'public, max-age=86400');
|
|
55
53
|
}
|
|
56
54
|
else {
|
|
@@ -64,8 +62,8 @@ class RedisSMQWebServer {
|
|
|
64
62
|
return __awaiter(this, void 0, void 0, function* () {
|
|
65
63
|
const basePath = this.config.webServer.basePath;
|
|
66
64
|
const apiPath = path_1.default.posix.join(basePath, 'api');
|
|
67
|
-
const
|
|
68
|
-
const apiBasePaths = [apiPath,
|
|
65
|
+
const swaggerPath = path_1.default.posix.join(basePath, 'swagger');
|
|
66
|
+
const apiBasePaths = [apiPath, swaggerPath];
|
|
69
67
|
const isApiRequest = (path) => apiBasePaths.some((base) => path === base || path.startsWith(`${base}/`));
|
|
70
68
|
const target = this.config.webServer.apiProxyTarget;
|
|
71
69
|
if (target) {
|
|
@@ -107,15 +105,23 @@ class RedisSMQWebServer {
|
|
|
107
105
|
setupRoutes() {
|
|
108
106
|
return __awaiter(this, void 0, void 0, function* () {
|
|
109
107
|
yield this.setupApi();
|
|
110
|
-
const basePath = this.config.webServer
|
|
108
|
+
const { basePath } = this.config.webServer;
|
|
111
109
|
if (basePath !== '/') {
|
|
112
110
|
this.app.get('/', (_req, res) => res.redirect(basePath));
|
|
113
111
|
}
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
112
|
+
this.app.get('*', (req, res, next) => {
|
|
113
|
+
if (req.path.startsWith(path_1.default.posix.join(basePath, 'api')) ||
|
|
114
|
+
req.path.startsWith(path_1.default.posix.join(basePath, 'swagger'))) {
|
|
115
|
+
return next();
|
|
116
|
+
}
|
|
117
|
+
if (path_1.default.extname(req.path)) {
|
|
118
|
+
return next();
|
|
119
|
+
}
|
|
120
|
+
if (req.headers.accept && !req.headers.accept.includes('text/html')) {
|
|
121
|
+
return next();
|
|
122
|
+
}
|
|
123
|
+
this.sendIndexHtml(res);
|
|
124
|
+
});
|
|
119
125
|
});
|
|
120
126
|
}
|
|
121
127
|
bootstrap() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AASA,sDAA8B;AAC9B,gDAAwB;AACxB,4CAAoB;AAEpB,uDAA+C;AAK/C,2DAAqD;AACrD,8DAAuD;AAEvD,iEAA8D;AAC9D,uDAAyD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -16,6 +16,7 @@ const vitest_1 = require("vitest");
|
|
|
16
16
|
const supertest_1 = __importDefault(require("supertest"));
|
|
17
17
|
const config_js_1 = require("../common/config.js");
|
|
18
18
|
const start_web_server_js_1 = require("../common/start-web-server.js");
|
|
19
|
+
const path_1 = __importDefault(require("path"));
|
|
19
20
|
(0, vitest_1.describe)('RedisSMQWebServer E2E Tests', () => {
|
|
20
21
|
var _a;
|
|
21
22
|
const serverUrl = `http://localhost:${(_a = config_js_1.config.webServer) === null || _a === void 0 ? void 0 : _a.port}`;
|
|
@@ -45,7 +46,8 @@ const start_web_server_js_1 = require("../common/start-web-server.js");
|
|
|
45
46
|
const assetPath = scriptSrc.startsWith('http')
|
|
46
47
|
? scriptSrc.replace(serverUrl, '')
|
|
47
48
|
: scriptSrc;
|
|
48
|
-
const
|
|
49
|
+
const absolutePath = path_1.default.resolve('/', assetPath);
|
|
50
|
+
const assetRes = yield (0, supertest_1.default)(serverUrl).get(absolutePath).expect(200);
|
|
49
51
|
(0, vitest_1.expect)(assetRes.headers['cache-control']).toBeDefined();
|
|
50
52
|
}));
|
|
51
53
|
(0, vitest_1.it)('should return 404 for non-existent static files', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -79,17 +81,11 @@ const start_web_server_js_1 = require("../common/start-web-server.js");
|
|
|
79
81
|
const response = yield (0, supertest_1.default)(serverUrl).get('/api/v1/queues');
|
|
80
82
|
(0, vitest_1.expect)(response.headers['content-type']).not.toContain('text/html');
|
|
81
83
|
}));
|
|
82
|
-
(0, vitest_1.it)('should not serve index.html for /
|
|
84
|
+
(0, vitest_1.it)('should not serve index.html for /swagger routes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
83
85
|
yield (0, start_web_server_js_1.startWebServer)();
|
|
84
|
-
const response = yield (0, supertest_1.default)(serverUrl).get('/
|
|
86
|
+
const response = yield (0, supertest_1.default)(serverUrl).get('/swagger');
|
|
85
87
|
(0, vitest_1.expect)(response.text).toContain('Swagger UI');
|
|
86
88
|
}));
|
|
87
|
-
(0, vitest_1.it)('should include rate limit headers', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
88
|
-
yield (0, start_web_server_js_1.startWebServer)();
|
|
89
|
-
const response = yield (0, supertest_1.default)(serverUrl).get('/');
|
|
90
|
-
(0, vitest_1.expect)(response.headers['x-ratelimit-limit']).toBeDefined();
|
|
91
|
-
(0, vitest_1.expect)(response.headers['x-ratelimit-remaining']).toBeDefined();
|
|
92
|
-
}));
|
|
93
89
|
(0, vitest_1.it)('should handle concurrent requests', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
94
90
|
yield (0, start_web_server_js_1.startWebServer)();
|
|
95
91
|
const requests = Array(50)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test00001.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00001.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,mCAA8C;AAC9C,0DAAgC;AAChC,mDAA6C;AAC7C,uEAGuC;
|
|
1
|
+
{"version":3,"file":"test00001.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00001.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -18,6 +18,7 @@ const start_api_server_js_1 = require("../common/start-api-server.js");
|
|
|
18
18
|
const index_js_1 = require("../../index.js");
|
|
19
19
|
const config_js_1 = require("../common/config.js");
|
|
20
20
|
const redis_smq_common_1 = require("redis-smq-common");
|
|
21
|
+
const path_1 = __importDefault(require("path"));
|
|
21
22
|
(0, vitest_1.describe)('RedisSMQWebServer with apiProxyTarget', () => {
|
|
22
23
|
let webServerUrl;
|
|
23
24
|
let webServer;
|
|
@@ -42,8 +43,8 @@ const redis_smq_common_1 = require("redis-smq-common");
|
|
|
42
43
|
.expect(200)
|
|
43
44
|
.expect('Content-Type', /application\/json/);
|
|
44
45
|
}));
|
|
45
|
-
(0, vitest_1.it)('proxies /
|
|
46
|
-
const res = yield (0, supertest_1.default)(webServerUrl).get('/
|
|
46
|
+
(0, vitest_1.it)('proxies /swagger', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
47
|
+
const res = yield (0, supertest_1.default)(webServerUrl).get('/swagger').expect(200);
|
|
47
48
|
(0, vitest_1.expect)(res.text).toContain('Swagger UI');
|
|
48
49
|
}));
|
|
49
50
|
(0, vitest_1.it)('serves SPA index.html for non-API routes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -61,7 +62,8 @@ const redis_smq_common_1 = require("redis-smq-common");
|
|
|
61
62
|
const assetPath = scriptSrc.startsWith('http')
|
|
62
63
|
? scriptSrc.replace(webServerUrl, '')
|
|
63
64
|
: scriptSrc;
|
|
64
|
-
const
|
|
65
|
+
const absolutePath = path_1.default.resolve('/', assetPath);
|
|
66
|
+
const assetRes = yield (0, supertest_1.default)(webServerUrl).get(absolutePath).expect(200);
|
|
65
67
|
(0, vitest_1.expect)(assetRes.headers['cache-control']).toBeDefined();
|
|
66
68
|
}));
|
|
67
69
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test00002.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00002.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,mCAAqE;AACrE,0DAAgC;AAChC,uEAA8E;AAC9E,6CAAmD;AACnD,mDAA6C;AAC7C,uDAAuC;
|
|
1
|
+
{"version":3,"file":"test00002.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00002.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,mCAAqE;AACrE,0DAAgC;AAChC,uEAA8E;AAC9E,6CAAmD;AACnD,mDAA6C;AAC7C,uDAAuC;AACvC,gDAAwB;AAExB,IAAA,iBAAQ,EAAC,uCAAuC,EAAE,GAAG,EAAE;IACrD,IAAI,YAAoB,CAAC;IACzB,IAAI,SAA4B,CAAC;IAEjC,IAAA,mBAAU,EAAC,GAAS,EAAE;QACpB,MAAM,OAAO,GAAG,MAAM,IAAA,oCAAc,GAAE,CAAC;QACvC,MAAM,cAAc,GAAG,oBAAoB,OAAO,EAAE,CAAC;QACrD,MAAM,aAAa,GAAG,MAAM,sBAAG,CAAC,aAAa,EAAE,CAAC;QAChD,SAAS,GAAG,IAAI,4BAAiB,iCAC5B,kBAAM,KACT,SAAS,EAAE;gBACT,IAAI,EAAE,aAAa;gBACnB,cAAc;aACf,IACD,CAAC;QACH,MAAM,SAAS,CAAC,GAAG,EAAE,CAAC;QACtB,YAAY,GAAG,oBAAoB,aAAa,EAAE,CAAC;IACrD,CAAC,CAAA,CAAC,CAAC;IAEH,IAAA,kBAAS,EAAC,GAAS,EAAE;QACnB,MAAM,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC3B,MAAM,IAAA,mCAAa,GAAE,CAAC;IACxB,CAAC,CAAA,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,2BAA2B,EAAE,GAAS,EAAE;QACzC,MAAM,IAAA,mBAAO,EAAC,YAAY,CAAC;aACxB,GAAG,CAAC,gBAAgB,CAAC;aACrB,MAAM,CAAC,GAAG,CAAC;aACX,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;IACjD,CAAC,CAAA,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,kBAAkB,EAAE,GAAS,EAAE;QAChC,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAO,EAAC,YAAY,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACpE,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;IAC3C,CAAC,CAAA,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,0CAA0C,EAAE,GAAS,EAAE;QACxD,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAO,EAAC,YAAY,CAAC;aACpC,GAAG,CAAC,kBAAkB,CAAC;aACvB,MAAM,CAAC,GAAG,CAAC;aACX,MAAM,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACxC,IAAA,eAAM,EAAC,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC,CAAA,CAAC,CAAC;IAEH,IAAA,WAAE,EAAC,+BAA+B,EAAE,GAAS,EAAE;QAC7C,MAAM,GAAG,GAAG,MAAM,IAAA,mBAAO,EAAC,YAAY,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAE7D,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAClE,IAAA,eAAM,EAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAG,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAG,CAAC,CAAC,KAAI,EAAE,CAAC;QAEnC,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;YAC5C,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC;YACrC,CAAC,CAAC,SAAS,CAAC;QAEd,MAAM,YAAY,GAAG,cAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAG,MAAM,IAAA,mBAAO,EAAC,YAAY,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAA,eAAM,EAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IAC1D,CAAC,CAAA,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -16,6 +16,7 @@ const vitest_1 = require("vitest");
|
|
|
16
16
|
const supertest_1 = __importDefault(require("supertest"));
|
|
17
17
|
const start_api_server_js_1 = require("../common/start-api-server.js");
|
|
18
18
|
const start_cli_js_1 = require("../common/start-cli.js");
|
|
19
|
+
const path_1 = __importDefault(require("path"));
|
|
19
20
|
(0, vitest_1.describe)('RedisSMQ Web Server CLI e2e tests', () => {
|
|
20
21
|
(0, vitest_1.describe)('serves SPA with default basePath "/"', () => {
|
|
21
22
|
let started;
|
|
@@ -41,7 +42,8 @@ const start_cli_js_1 = require("../common/start-cli.js");
|
|
|
41
42
|
const assetPath = scriptSrc.startsWith('http')
|
|
42
43
|
? scriptSrc.replace(started.url, '')
|
|
43
44
|
: scriptSrc;
|
|
44
|
-
const
|
|
45
|
+
const absolutePath = path_1.default.resolve('/', assetPath);
|
|
46
|
+
const assetRes = yield (0, supertest_1.default)(started.url).get(absolutePath).expect(200);
|
|
45
47
|
(0, vitest_1.expect)(assetRes.headers['cache-control']).toBeDefined();
|
|
46
48
|
(0, vitest_1.expect)(assetRes.headers['cache-control']).toMatch(/max-age=\d+/);
|
|
47
49
|
}));
|
|
@@ -68,7 +70,7 @@ const start_cli_js_1 = require("../common/start-cli.js");
|
|
|
68
70
|
(0, vitest_1.expect)(res.headers.location).toBe('/ui');
|
|
69
71
|
}));
|
|
70
72
|
(0, vitest_1.it)('serves index.html at "/ui" and SPA fallback under it', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
71
|
-
const res = yield (0, supertest_1.default)(started.url).get('/ui').expect(200);
|
|
73
|
+
const res = yield (0, supertest_1.default)(started.url).get('/ui/').expect(200);
|
|
72
74
|
(0, vitest_1.expect)(res.headers['content-type']).toMatch(/text\/html/);
|
|
73
75
|
const sub = yield (0, supertest_1.default)(started.url).get('/ui/queues').expect(200);
|
|
74
76
|
(0, vitest_1.expect)(sub.headers['content-type']).toMatch(/text\/html/);
|
|
@@ -104,8 +106,8 @@ const start_cli_js_1 = require("../common/start-cli.js");
|
|
|
104
106
|
.expect(200)
|
|
105
107
|
.expect('Content-Type', /application\/json/);
|
|
106
108
|
}));
|
|
107
|
-
(0, vitest_1.it)('proxies /
|
|
108
|
-
const res = yield (0, supertest_1.default)(started.url).get('/
|
|
109
|
+
(0, vitest_1.it)('proxies /swagger', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
110
|
+
const res = yield (0, supertest_1.default)(started.url).get('/swagger').expect(200);
|
|
109
111
|
(0, vitest_1.expect)(res.text).toMatch(/<html|<!doctype/i);
|
|
110
112
|
}));
|
|
111
113
|
(0, vitest_1.it)('keeps SPA behavior for non-API routes', () => __awaiter(void 0, void 0, void 0, function* () {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test00003.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00003.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AASA,mCAAmE;AACnE,0DAAgC;AAChC,uEAA8E;AAC9E,yDAA0E;
|
|
1
|
+
{"version":3,"file":"test00003.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00003.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,aAAa,EAAE,wBAM3B,CAAC;AAMF,wBAAgB,WAAW,CACzB,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,8BAA8B,
|
|
1
|
+
{"version":3,"file":"parse-config.d.ts","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":"AASA,OAAO,EACL,wBAAwB,EACxB,8BAA8B,EAC/B,MAAM,kBAAkB,CAAC;AAG1B,eAAO,MAAM,aAAa,EAAE,wBAM3B,CAAC;AAMF,wBAAgB,WAAW,CACzB,MAAM,GAAE,OAAO,CAAC,wBAAwB,CAAM,GAC7C,8BAA8B,CA0ChC"}
|
|
@@ -8,11 +8,21 @@ export const defaultConfig = {
|
|
|
8
8
|
};
|
|
9
9
|
export function parseConfig(config = {}) {
|
|
10
10
|
const restApiParsedConfig = parseRestApiConfig(config);
|
|
11
|
+
const normalizePath = (path) => {
|
|
12
|
+
const s = path
|
|
13
|
+
.split('/')
|
|
14
|
+
.map((i) => i.trim())
|
|
15
|
+
.filter((i) => !!i)
|
|
16
|
+
.join('/');
|
|
17
|
+
return `/${s}`;
|
|
18
|
+
};
|
|
19
|
+
const basePath = config.webServer?.basePath !== undefined
|
|
20
|
+
? normalizePath(config.webServer.basePath)
|
|
21
|
+
: restApiParsedConfig.apiServer.basePath;
|
|
11
22
|
const webServer = {
|
|
12
23
|
...defaultConfig.webServer,
|
|
13
24
|
...config.webServer,
|
|
14
25
|
};
|
|
15
|
-
const basePath = String(webServer.basePath).replace(/\/+$/, '') || '/';
|
|
16
26
|
return {
|
|
17
27
|
...restApiParsedConfig,
|
|
18
28
|
apiServer: {
|
|
@@ -21,7 +31,7 @@ export function parseConfig(config = {}) {
|
|
|
21
31
|
},
|
|
22
32
|
webServer: {
|
|
23
33
|
port: Number(webServer.port),
|
|
24
|
-
basePath,
|
|
34
|
+
basePath: basePath,
|
|
25
35
|
apiProxyTarget: webServer.apiProxyTarget
|
|
26
36
|
? String(webServer.apiProxyTarget)
|
|
27
37
|
: undefined,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,GAAG;QACb,cAAc,EAAE,SAAS;KAC1B;CACF,CAAC;AAMF,MAAM,UAAU,WAAW,CACzB,SAA4C,EAAE;IAE9C,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"parse-config.js","sourceRoot":"","sources":["../../../../src/config/parse-config.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,WAAW,IAAI,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAEvE,MAAM,CAAC,MAAM,aAAa,GAA6B;IACrD,SAAS,EAAE;QACT,IAAI,EAAE,IAAI;QACV,QAAQ,EAAE,GAAG;QACb,cAAc,EAAE,SAAS;KAC1B;CACF,CAAC;AAMF,MAAM,UAAU,WAAW,CACzB,SAA4C,EAAE;IAE9C,MAAM,mBAAmB,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAIvD,MAAM,aAAa,GAAG,CAAC,IAAY,EAAU,EAAE;QAC7C,MAAM,CAAC,GAAG,IAAI;aACX,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;aAClB,IAAI,CAAC,GAAG,CAAC,CAAC;QACb,OAAO,IAAI,CAAC,EAAE,CAAC;IACjB,CAAC,CAAC;IAKF,MAAM,QAAQ,GACZ,MAAM,CAAC,SAAS,EAAE,QAAQ,KAAK,SAAS;QACtC,CAAC,CAAC,aAAa,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAC1C,CAAC,CAAC,mBAAmB,CAAC,SAAS,CAAC,QAAQ,CAAC;IAG7C,MAAM,SAAS,GAAG;QAChB,GAAG,aAAa,CAAC,SAAS;QAC1B,GAAG,MAAM,CAAC,SAAS;KACpB,CAAC;IAEF,OAAO;QACL,GAAG,mBAAmB;QACtB,SAAS,EAAE;YACT,GAAG,mBAAmB,CAAC,SAAS;YAChC,QAAQ,EAAE,QAAQ;SACnB;QACD,SAAS,EAAE;YACT,IAAI,EAAE,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;YAC5B,QAAQ,EAAE,QAAQ;YAClB,cAAc,EAAE,SAAS,CAAC,cAAc;gBACtC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;gBAClC,CAAC,CAAC,SAAS;SACd;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,wBAAwB,EAEzB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAgB,OAAO,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AAcA,OAAO,EACL,wBAAwB,EAEzB,MAAM,yBAAyB,CAAC;AAKjC,OAAO,EAAgB,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAMzD,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAa;IACjC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAiC;IACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAuB;IACnD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,OAAO,CAAgC;IAC/C,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,UAAU,CAA4B;IAC9C,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC;gBAEd,MAAM,GAAE,wBAA6B;YAYnC,eAAe;YA0Bf,QAAQ;IAsCtB,OAAO,CAAC,aAAa;YAeP,WAAW;YA6BX,SAAS;IAQV,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IAepB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAgBvC"}
|
package/dist/esm/src/index.js
CHANGED
|
@@ -6,7 +6,6 @@ import { RedisSMQRestApi } from 'redis-smq-rest-api';
|
|
|
6
6
|
import { parseConfig } from './config/parse-config.js';
|
|
7
7
|
import { createProxyMiddleware } from 'http-proxy-middleware';
|
|
8
8
|
import { createLogger } from 'redis-smq-common';
|
|
9
|
-
import rateLimit from 'express-rate-limit';
|
|
10
9
|
export class RedisSMQWebServer {
|
|
11
10
|
app = express();
|
|
12
11
|
config;
|
|
@@ -28,16 +27,15 @@ export class RedisSMQWebServer {
|
|
|
28
27
|
this.logger = createLogger(this.config.logger, 'RedisSMQWebServer');
|
|
29
28
|
}
|
|
30
29
|
async setupMiddleware() {
|
|
31
|
-
this.
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
this.app.use(express.static(this.webUIPath, {
|
|
30
|
+
const { basePath } = this.config.webServer;
|
|
31
|
+
this.app.set('trust proxy', true);
|
|
32
|
+
this.logger.info('Trusting reverse proxy headers.');
|
|
33
|
+
this.app.use(basePath, express.static(this.webUIPath, {
|
|
36
34
|
etag: true,
|
|
37
35
|
lastModified: true,
|
|
38
36
|
index: false,
|
|
39
37
|
setHeaders: (res, filePath) => {
|
|
40
|
-
if (filePath.match(/\.(
|
|
38
|
+
if (filePath.match(/\.(png|jpg|jpeg|gif|ico|svg|css|js)$/)) {
|
|
41
39
|
res.setHeader('Cache-Control', 'public, max-age=86400');
|
|
42
40
|
}
|
|
43
41
|
else {
|
|
@@ -49,8 +47,8 @@ export class RedisSMQWebServer {
|
|
|
49
47
|
async setupApi() {
|
|
50
48
|
const basePath = this.config.webServer.basePath;
|
|
51
49
|
const apiPath = path.posix.join(basePath, 'api');
|
|
52
|
-
const
|
|
53
|
-
const apiBasePaths = [apiPath,
|
|
50
|
+
const swaggerPath = path.posix.join(basePath, 'swagger');
|
|
51
|
+
const apiBasePaths = [apiPath, swaggerPath];
|
|
54
52
|
const isApiRequest = (path) => apiBasePaths.some((base) => path === base || path.startsWith(`${base}/`));
|
|
55
53
|
const target = this.config.webServer.apiProxyTarget;
|
|
56
54
|
if (target) {
|
|
@@ -90,15 +88,23 @@ export class RedisSMQWebServer {
|
|
|
90
88
|
}
|
|
91
89
|
async setupRoutes() {
|
|
92
90
|
await this.setupApi();
|
|
93
|
-
const basePath = this.config.webServer
|
|
91
|
+
const { basePath } = this.config.webServer;
|
|
94
92
|
if (basePath !== '/') {
|
|
95
93
|
this.app.get('/', (_req, res) => res.redirect(basePath));
|
|
96
94
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
95
|
+
this.app.get('*', (req, res, next) => {
|
|
96
|
+
if (req.path.startsWith(path.posix.join(basePath, 'api')) ||
|
|
97
|
+
req.path.startsWith(path.posix.join(basePath, 'swagger'))) {
|
|
98
|
+
return next();
|
|
99
|
+
}
|
|
100
|
+
if (path.extname(req.path)) {
|
|
101
|
+
return next();
|
|
102
|
+
}
|
|
103
|
+
if (req.headers.accept && !req.headers.accept.includes('text/html')) {
|
|
104
|
+
return next();
|
|
105
|
+
}
|
|
106
|
+
this.sendIndexHtml(res);
|
|
107
|
+
});
|
|
102
108
|
}
|
|
103
109
|
async bootstrap() {
|
|
104
110
|
if (!this.bootstrapped) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AASA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAW,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/index.ts"],"names":[],"mappings":"AASA,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AAEpB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAK/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAW,MAAM,kBAAkB,CAAC;AAMzD,MAAM,OAAO,iBAAiB;IACX,GAAG,GAAG,OAAO,EAAE,CAAC;IAChB,MAAM,CAAiC;IACvC,SAAS,CAAS;IAClB,WAAW,CAAuB;IAClC,cAAc,GAAkB,IAAI,CAAC;IAC9C,OAAO,GAA2B,IAAI,CAAC;IACvC,YAAY,GAAG,KAAK,CAAC;IACrB,UAAU,GAAuB,IAAI,CAAC;IACpC,MAAM,CAAU;IAE1B,YAAY,SAAmC,EAAE;QAE/C,IAAI,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,GAAG;YACjB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;YACzC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;SACxC,CAAC;QACF,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,IAAI,IAAI,CAAC;QACnE,IAAI,CAAC,SAAS,GAAG,WAAW,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACtE,CAAC;IAEO,KAAK,CAAC,eAAe;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAE3C,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;QAGpD,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,QAAQ,EAER,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE;YAC7B,IAAI,EAAE,IAAI;YACV,YAAY,EAAE,IAAI;YAClB,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,CAAC,GAA8B,EAAE,QAAQ,EAAE,EAAE;gBAEvD,IAAI,QAAQ,CAAC,KAAK,CAAC,sCAAsC,CAAC,EAAE,CAAC;oBAC3D,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,uBAAuB,CAAC,CAAC;gBAC1D,CAAC;qBAAM,CAAC;oBACN,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAC;gBAC7C,CAAC;YACH,CAAC;SACF,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,KAAK,CAAC,QAAQ;QACpB,MAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC;QAChD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACjD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QAEzD,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;QAC5C,MAAM,YAAY,GAAG,CAAC,IAAY,EAAE,EAAE,CACpC,YAAY,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC;QAE5E,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC;QAEpD,IAAI,MAAM,EAAE,CAAC;YACX,MAAM,KAAK,GAAG,qBAAqB,CAAC;gBAClC,MAAM;gBACN,YAAY,EAAE,IAAI;gBAClB,EAAE,EAAE,IAAI;aACT,CAAC,CAAC;YACH,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,CAAC,GAAa,EAAE,GAAc,EAAE,IAA0B,EAAE,EAAE;gBAC5D,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;oBAC3B,OAAO,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;gBAC/B,CAAC;gBACD,IAAI,EAAE,CAAC;YACT,CAAC,CACF,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACvD,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,cAAc,EAAE,CAAC;QAC5D,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAa,EAAE,GAAc,EAAE,IAAa,EAAE,EAAE;YAC5D,IAAI,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,OAAO,eAAe,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;YACnC,CAAC;YACD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,aAAa,CAAC,GAA8B;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QAC1D,EAAE,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,2BAA2B,EAAE,GAAG,CAAC,CAAC;gBACpD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAC;YAC3D,CAAC;YACD,MAAM,YAAY,GAAG,4BAA4B,IAAI,CAAC,SAAS,CAC7D,IAAI,CAAC,WAAW,CACjB,YAAY,CAAC;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,GAAG,YAAY,SAAS,CAAC,CAAC;YACvE,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,WAAW;QACvB,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;QAEtB,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC;QAE3C,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;YACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,IAAc,EAAE,GAAc,EAAE,EAAE,CACnD,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,CACvB,CAAC;QACJ,CAAC;QAGD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAa,EAAE,GAAc,EAAE,IAAa,EAAE,EAAE;YACjE,IACE,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;gBACrD,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,EACzD,CAAC;gBACD,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,IAAI,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBACpE,OAAO,IAAI,EAAE,CAAC;YAChB,CAAC;YACD,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;QAC1B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,SAAS;QACrB,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;YAC7B,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC;YACzB,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC;QAC3B,CAAC;IACH,CAAC;IAEM,KAAK,CAAC,GAAG;QACd,MAAM,IAAI,CAAC,SAAS,EAAE,CAAC;QACvB,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;QACxC,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,GAAG,EAAE;YAC3C,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,IAAI,EAAE,CAAC,CAAC;YACjE,IAAI,IAAI,CAAC,cAAc,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,4BAA4B,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC;YACtE,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;YAC7D,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,+BAA+B,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ,IAAI,GAAG,EAAE,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;IACL,CAAC;IAEM,KAAK,CAAC,QAAQ;QACnB,IAAI,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC;YACjD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,GAAW,EAAE,EAAE;oBACrC,IAAI,GAAG;wBAAE,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC5B,OAAO,EAAE,CAAC;gBACZ,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;YACH,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC;QAC9D,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YACjB,MAAM,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACtB,CAAC;IACH,CAAC;CACF"}
|
|
@@ -2,6 +2,7 @@ import { describe, it, expect } from 'vitest';
|
|
|
2
2
|
import request from 'supertest';
|
|
3
3
|
import { config } from '../common/config.js';
|
|
4
4
|
import { shutdownWebServer, startWebServer, } from '../common/start-web-server.js';
|
|
5
|
+
import path from 'path';
|
|
5
6
|
describe('RedisSMQWebServer E2E Tests', () => {
|
|
6
7
|
const serverUrl = `http://localhost:${config.webServer?.port}`;
|
|
7
8
|
it('should serve index.html for root path', async () => {
|
|
@@ -30,7 +31,8 @@ describe('RedisSMQWebServer E2E Tests', () => {
|
|
|
30
31
|
const assetPath = scriptSrc.startsWith('http')
|
|
31
32
|
? scriptSrc.replace(serverUrl, '')
|
|
32
33
|
: scriptSrc;
|
|
33
|
-
const
|
|
34
|
+
const absolutePath = path.resolve('/', assetPath);
|
|
35
|
+
const assetRes = await request(serverUrl).get(absolutePath).expect(200);
|
|
34
36
|
expect(assetRes.headers['cache-control']).toBeDefined();
|
|
35
37
|
});
|
|
36
38
|
it('should return 404 for non-existent static files', async () => {
|
|
@@ -64,17 +66,11 @@ describe('RedisSMQWebServer E2E Tests', () => {
|
|
|
64
66
|
const response = await request(serverUrl).get('/api/v1/queues');
|
|
65
67
|
expect(response.headers['content-type']).not.toContain('text/html');
|
|
66
68
|
});
|
|
67
|
-
it('should not serve index.html for /
|
|
69
|
+
it('should not serve index.html for /swagger routes', async () => {
|
|
68
70
|
await startWebServer();
|
|
69
|
-
const response = await request(serverUrl).get('/
|
|
71
|
+
const response = await request(serverUrl).get('/swagger');
|
|
70
72
|
expect(response.text).toContain('Swagger UI');
|
|
71
73
|
});
|
|
72
|
-
it('should include rate limit headers', async () => {
|
|
73
|
-
await startWebServer();
|
|
74
|
-
const response = await request(serverUrl).get('/');
|
|
75
|
-
expect(response.headers['x-ratelimit-limit']).toBeDefined();
|
|
76
|
-
expect(response.headers['x-ratelimit-remaining']).toBeDefined();
|
|
77
|
-
});
|
|
78
74
|
it('should handle concurrent requests', async () => {
|
|
79
75
|
await startWebServer();
|
|
80
76
|
const requests = Array(50)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test00001.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00001.test.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EACL,iBAAiB,EACjB,cAAc,GACf,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"test00001.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00001.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,7 @@ import { startApiServer, stopApiServer } from '../common/start-api-server.js';
|
|
|
4
4
|
import { RedisSMQWebServer } from '../../index.js';
|
|
5
5
|
import { config } from '../common/config.js';
|
|
6
6
|
import { net } from 'redis-smq-common';
|
|
7
|
+
import path from 'path';
|
|
7
8
|
describe('RedisSMQWebServer with apiProxyTarget', () => {
|
|
8
9
|
let webServerUrl;
|
|
9
10
|
let webServer;
|
|
@@ -31,8 +32,8 @@ describe('RedisSMQWebServer with apiProxyTarget', () => {
|
|
|
31
32
|
.expect(200)
|
|
32
33
|
.expect('Content-Type', /application\/json/);
|
|
33
34
|
});
|
|
34
|
-
it('proxies /
|
|
35
|
-
const res = await request(webServerUrl).get('/
|
|
35
|
+
it('proxies /swagger', async () => {
|
|
36
|
+
const res = await request(webServerUrl).get('/swagger').expect(200);
|
|
36
37
|
expect(res.text).toContain('Swagger UI');
|
|
37
38
|
});
|
|
38
39
|
it('serves SPA index.html for non-API routes', async () => {
|
|
@@ -50,7 +51,8 @@ describe('RedisSMQWebServer with apiProxyTarget', () => {
|
|
|
50
51
|
const assetPath = scriptSrc.startsWith('http')
|
|
51
52
|
? scriptSrc.replace(webServerUrl, '')
|
|
52
53
|
: scriptSrc;
|
|
53
|
-
const
|
|
54
|
+
const absolutePath = path.resolve('/', assetPath);
|
|
55
|
+
const assetRes = await request(webServerUrl).get(absolutePath).expect(200);
|
|
54
56
|
expect(assetRes.headers['cache-control']).toBeDefined();
|
|
55
57
|
});
|
|
56
58
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test00002.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00002.test.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAC7C,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"test00002.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00002.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
|
|
|
2
2
|
import request from 'supertest';
|
|
3
3
|
import { startApiServer, stopApiServer } from '../common/start-api-server.js';
|
|
4
4
|
import { startCliWithArgs } from '../common/start-cli.js';
|
|
5
|
+
import path from 'path';
|
|
5
6
|
describe('RedisSMQ Web Server CLI e2e tests', () => {
|
|
6
7
|
describe('serves SPA with default basePath "/"', () => {
|
|
7
8
|
let started;
|
|
@@ -26,7 +27,8 @@ describe('RedisSMQ Web Server CLI e2e tests', () => {
|
|
|
26
27
|
const assetPath = scriptSrc.startsWith('http')
|
|
27
28
|
? scriptSrc.replace(started.url, '')
|
|
28
29
|
: scriptSrc;
|
|
29
|
-
const
|
|
30
|
+
const absolutePath = path.resolve('/', assetPath);
|
|
31
|
+
const assetRes = await request(started.url).get(absolutePath).expect(200);
|
|
30
32
|
expect(assetRes.headers['cache-control']).toBeDefined();
|
|
31
33
|
expect(assetRes.headers['cache-control']).toMatch(/max-age=\d+/);
|
|
32
34
|
});
|
|
@@ -53,7 +55,7 @@ describe('RedisSMQ Web Server CLI e2e tests', () => {
|
|
|
53
55
|
expect(res.headers.location).toBe('/ui');
|
|
54
56
|
});
|
|
55
57
|
it('serves index.html at "/ui" and SPA fallback under it', async () => {
|
|
56
|
-
const res = await request(started.url).get('/ui').expect(200);
|
|
58
|
+
const res = await request(started.url).get('/ui/').expect(200);
|
|
57
59
|
expect(res.headers['content-type']).toMatch(/text\/html/);
|
|
58
60
|
const sub = await request(started.url).get('/ui/queues').expect(200);
|
|
59
61
|
expect(sub.headers['content-type']).toMatch(/text\/html/);
|
|
@@ -89,8 +91,8 @@ describe('RedisSMQ Web Server CLI e2e tests', () => {
|
|
|
89
91
|
.expect(200)
|
|
90
92
|
.expect('Content-Type', /application\/json/);
|
|
91
93
|
});
|
|
92
|
-
it('proxies /
|
|
93
|
-
const res = await request(started.url).get('/
|
|
94
|
+
it('proxies /swagger', async () => {
|
|
95
|
+
const res = await request(started.url).get('/swagger').expect(200);
|
|
94
96
|
expect(res.text).toMatch(/<html|<!doctype/i);
|
|
95
97
|
});
|
|
96
98
|
it('keeps SPA behavior for non-API routes', async () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test00003.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00003.test.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"test00003.test.js","sourceRoot":"","sources":["../../../../tests/tests/test00003.test.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACnE,OAAO,OAAO,MAAM,WAAW,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,gBAAgB,EAAkB,MAAM,wBAAwB,CAAC;AAC1E,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,QAAQ,CAAC,mCAAmC,EAAE,GAAG,EAAE;IACjD,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,IAAI,OAAuB,CAAC;QAE5B,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,OAAO,GAAG,MAAM,gBAAgB,CAAC;gBAC/B,aAAa;gBACb,GAAG;gBACH,cAAc;gBACd,GAAG;aACJ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;YAC1D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAE1D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;YAEzD,MAAM,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;YAClE,MAAM,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,CAAC;YAC3B,MAAM,SAAS,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACnC,MAAM,SAAS,GAAG,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC;gBAC5C,CAAC,CAAC,SAAS,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC;gBACpC,CAAC,CAAC,SAAS,CAAC;YACd,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC1E,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YACxD,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,eAAe,CAAC,CAAC,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,qCAAqC,EAAE,KAAK,IAAI,EAAE;YACnD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACvE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,gCAAgC,EAAE,GAAG,EAAE;QAC9C,IAAI,OAAuB,CAAC;QAE5B,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,OAAO,GAAG,MAAM,gBAAgB,CAAC;gBAC/B,aAAa;gBACb,KAAK;gBACL,cAAc;gBACd,GAAG;aACJ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;QACvB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE;YACtC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC5D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;YACpE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC/D,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAE1D,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACrE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;YACzD,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;iBACvB,GAAG,CAAC,mBAAmB,CAAC;iBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;gBACZ,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;YAC9D,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,wCAAwC,EAAE,GAAG,EAAE;QACtD,IAAI,OAAuB,CAAC;QAE5B,SAAS,CAAC,KAAK,IAAI,EAAE;YACnB,MAAM,IAAI,GAAG,MAAM,cAAc,EAAE,CAAC;YACpC,OAAO,GAAG,MAAM,gBAAgB,CAAC;gBAC/B,aAAa;gBACb,GAAG;gBACH,oBAAoB;gBACpB,oBAAoB,IAAI,EAAE;gBAC1B,cAAc;gBACd,GAAG;aACJ,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;YAClB,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;YACrB,MAAM,aAAa,EAAE,CAAC;QACxB,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2BAA2B,EAAE,KAAK,IAAI,EAAE;YACzC,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC;iBACvB,GAAG,CAAC,gBAAgB,CAAC;iBACrB,MAAM,CAAC,GAAG,CAAC;iBACX,MAAM,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kBAAkB,EAAE,KAAK,IAAI,EAAE;YAChC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnE,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC;QAC/C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;YACrD,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACjE,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QAC5D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "redis-smq-web-server",
|
|
3
|
-
"version": "9.0.0-next.
|
|
3
|
+
"version": "9.0.0-next.15",
|
|
4
4
|
"description": "Web server for RedisSMQ Web UI: serves the SPA and hosts or proxies the RedisSMQ REST API.",
|
|
5
5
|
"author": "Weyoss <weyoss@protonmail.com>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -46,10 +46,10 @@
|
|
|
46
46
|
"peerDependencies": {
|
|
47
47
|
"@redis/client": "^5",
|
|
48
48
|
"ioredis": "^5",
|
|
49
|
-
"redis-smq": "^9.0.0-next.
|
|
50
|
-
"redis-smq-common": "^9.0.0-next.
|
|
51
|
-
"redis-smq-rest-api": "^9.0.0-next.
|
|
52
|
-
"redis-smq-web-ui": "^9.0.0-next.
|
|
49
|
+
"redis-smq": "^9.0.0-next.15",
|
|
50
|
+
"redis-smq-common": "^9.0.0-next.15",
|
|
51
|
+
"redis-smq-rest-api": "^9.0.0-next.15",
|
|
52
|
+
"redis-smq-web-ui": "^9.0.0-next.15"
|
|
53
53
|
},
|
|
54
54
|
"peerDependenciesMeta": {
|
|
55
55
|
"@redis/client": {
|