@furystack/rest-service 7.0.3 → 7.0.5
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/esm/static-server-manager.d.ts.map +1 -1
- package/esm/static-server-manager.js +4 -3
- package/esm/static-server-manager.js.map +1 -1
- package/package.json +10 -10
- package/src/rest-service.integration.spec.ts +33 -15
- package/src/static-server-manager.ts +5 -4
- package/src/validate.integration.spec.ts +2 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-server-manager.d.ts","sourceRoot":"","sources":["../src/static-server-manager.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAkB,MAAM,MAAM,CAAA;AAKhF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED,qBACa,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;YAEhC,QAAQ;
|
|
1
|
+
{"version":3,"file":"static-server-manager.d.ts","sourceRoot":"","sources":["../src/static-server-manager.ts"],"names":[],"mappings":";AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,mBAAmB,EAAkB,MAAM,MAAM,CAAA;AAKhF,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,OAAO,CAAC,EAAE,mBAAmB,CAAA;CAC9B;AAED,qBACa,mBAAmB;IAE9B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;YAEhC,QAAQ;IAwBf,UAAU,YACL,MAAM;aACC,KAAK,eAAe,EAAE,KAAK,GAAG,QAAQ,CAAC;kBAK7C;IAEb,OAAO,CAAC,SAAS,CA0BhB;IAEY,aAAa,CAAC,OAAO,EAAE,mBAAmB;CAQxD"}
|
|
@@ -9,7 +9,7 @@ var __metadata = (this && this.__metadata) || function (k, v) {
|
|
|
9
9
|
};
|
|
10
10
|
import { Injectable, Injected } from '@furystack/inject';
|
|
11
11
|
import { createReadStream } from 'fs';
|
|
12
|
-
import { stat } from 'fs/promises';
|
|
12
|
+
import { access, stat } from 'fs/promises';
|
|
13
13
|
import { getMimeForFile } from './mime-types.js';
|
|
14
14
|
import { join, normalize, sep } from 'path';
|
|
15
15
|
import { ServerManager } from './server-manager.js';
|
|
@@ -29,7 +29,7 @@ let StaticServerManager = class StaticServerManager {
|
|
|
29
29
|
}
|
|
30
30
|
catch (error) {
|
|
31
31
|
if (fallback) {
|
|
32
|
-
await this.sendFile({ fullPath: join(path, fallback), res, headers });
|
|
32
|
+
await this.sendFile({ fullPath: normalize(join(path, fallback)), res, headers });
|
|
33
33
|
}
|
|
34
34
|
else {
|
|
35
35
|
res.writeHead(404, { 'Content-Type': 'text/plain' });
|
|
@@ -41,12 +41,13 @@ let StaticServerManager = class StaticServerManager {
|
|
|
41
41
|
}
|
|
42
42
|
async sendFile({ fullPath, headers, res, }) {
|
|
43
43
|
const { size } = await stat(fullPath);
|
|
44
|
+
await access(fullPath);
|
|
44
45
|
const head = {
|
|
45
46
|
...headers,
|
|
46
47
|
'Content-Length': size,
|
|
47
48
|
'Content-Type': getMimeForFile(fullPath),
|
|
48
49
|
};
|
|
49
|
-
res.
|
|
50
|
+
Object.entries(head).map(([key, value]) => res.setHeader(key, value));
|
|
50
51
|
await new Promise((resolve, reject) => createReadStream(fullPath, { autoClose: true }).once('finish', resolve).once('error', reject).pipe(res));
|
|
51
52
|
}
|
|
52
53
|
async addStaticSite(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"static-server-manager.js","sourceRoot":"","sources":["../src/static-server-manager.ts"],"names":[],"mappings":";;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,IAAI,CAAA;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"static-server-manager.js","sourceRoot":"","sources":["../src/static-server-manager.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@furystack/rest-service",
|
|
3
|
-
"version": "7.0.
|
|
3
|
+
"version": "7.0.5",
|
|
4
4
|
"description": "Repository implementation for FuryStack",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
@@ -37,22 +37,22 @@
|
|
|
37
37
|
},
|
|
38
38
|
"homepage": "https://github.com/furystack/furystack",
|
|
39
39
|
"dependencies": {
|
|
40
|
-
"@furystack/core": "^12.0.
|
|
41
|
-
"@furystack/inject": "^8.0.
|
|
42
|
-
"@furystack/repository": "^7.0.
|
|
43
|
-
"@furystack/rest": "^5.0.
|
|
44
|
-
"@furystack/security": "^3.0.
|
|
45
|
-
"@furystack/utils": "^4.0.
|
|
40
|
+
"@furystack/core": "^12.0.4",
|
|
41
|
+
"@furystack/inject": "^8.0.4",
|
|
42
|
+
"@furystack/repository": "^7.0.4",
|
|
43
|
+
"@furystack/rest": "^5.0.4",
|
|
44
|
+
"@furystack/security": "^3.0.4",
|
|
45
|
+
"@furystack/utils": "^4.0.4",
|
|
46
46
|
"ajv": "^8.12.0",
|
|
47
47
|
"ajv-formats": "^2.1.1",
|
|
48
48
|
"path-to-regexp": "^6.2.1",
|
|
49
49
|
"semaphore-async-await": "^1.5.1"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
|
-
"@furystack/rest-client-fetch": "^5.0.
|
|
53
|
-
"@types/node": "^
|
|
52
|
+
"@furystack/rest-client-fetch": "^5.0.4",
|
|
53
|
+
"@types/node": "^20.2.0",
|
|
54
54
|
"typescript": "^5.0.4",
|
|
55
|
-
"vitest": "^0.
|
|
55
|
+
"vitest": "^0.31.1"
|
|
56
56
|
},
|
|
57
57
|
"gitHead": "1045d854bfd8c475b7035471d130d401417a2321"
|
|
58
58
|
}
|
|
@@ -27,11 +27,21 @@ interface IntegrationTestApi extends RestApi {
|
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
29
|
|
|
30
|
-
const
|
|
31
|
-
const
|
|
32
|
-
|
|
30
|
+
const portGenerator = function* () {
|
|
31
|
+
const initialPort = 19090
|
|
32
|
+
let port = initialPort
|
|
33
|
+
while (true) {
|
|
34
|
+
yield port++
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
const getPort = () => portGenerator().next().value
|
|
33
39
|
|
|
34
40
|
const prepareInjector = async (i: Injector) => {
|
|
41
|
+
const port = getPort()
|
|
42
|
+
const hostName = 'localhost'
|
|
43
|
+
const root = 'test-api'
|
|
44
|
+
|
|
35
45
|
addStore(i, new InMemoryStore({ model: User, primaryKey: 'username' })).addStore(
|
|
36
46
|
new InMemoryStore({ model: DefaultSession, primaryKey: 'sessionId' }),
|
|
37
47
|
)
|
|
@@ -42,7 +52,7 @@ const prepareInjector = async (i: Injector) => {
|
|
|
42
52
|
await useRestService<IntegrationTestApi>({
|
|
43
53
|
injector: i,
|
|
44
54
|
root,
|
|
45
|
-
port,
|
|
55
|
+
port: getPort(),
|
|
46
56
|
hostName,
|
|
47
57
|
cors: {
|
|
48
58
|
credentials: true,
|
|
@@ -67,9 +77,13 @@ const prepareInjector = async (i: Injector) => {
|
|
|
67
77
|
},
|
|
68
78
|
},
|
|
69
79
|
})
|
|
70
|
-
}
|
|
71
80
|
|
|
72
|
-
|
|
81
|
+
return {
|
|
82
|
+
apiUrl: `http://${hostName}:${port}/${root}`,
|
|
83
|
+
port,
|
|
84
|
+
hostName,
|
|
85
|
+
}
|
|
86
|
+
}
|
|
73
87
|
|
|
74
88
|
describe('@furystack/rest-service inregration tests', () => {
|
|
75
89
|
it('Should be started and disposed', async () => {
|
|
@@ -80,7 +94,7 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
80
94
|
|
|
81
95
|
it('Should respond with 404 when a route is not found', async () => {
|
|
82
96
|
await usingAsync(new Injector(), async (i) => {
|
|
83
|
-
await prepareInjector(i)
|
|
97
|
+
const { apiUrl } = await prepareInjector(i)
|
|
84
98
|
const result = await fetch(PathHelper.joinPaths(apiUrl, 'some-route-that-does-not-exists'))
|
|
85
99
|
expect(result.ok).toBe(false)
|
|
86
100
|
expect(result.status).toBe(404)
|
|
@@ -91,7 +105,7 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
91
105
|
|
|
92
106
|
it('Should respond with 401 for unauthorized request errors', async () => {
|
|
93
107
|
await usingAsync(new Injector(), async (i) => {
|
|
94
|
-
await prepareInjector(i)
|
|
108
|
+
const { apiUrl } = await prepareInjector(i)
|
|
95
109
|
const result = await fetch(PathHelper.joinPaths(apiUrl, 'currentUser'))
|
|
96
110
|
expect(result.ok).toBe(false)
|
|
97
111
|
expect(result.status).toBe(401)
|
|
@@ -102,7 +116,7 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
102
116
|
|
|
103
117
|
it('Should respond with 401 for unauthorized request errors', async () => {
|
|
104
118
|
await usingAsync(new Injector(), async (i) => {
|
|
105
|
-
await prepareInjector(i)
|
|
119
|
+
const { apiUrl } = await prepareInjector(i)
|
|
106
120
|
const result = await fetch(PathHelper.joinPaths(apiUrl, 'currentUser'))
|
|
107
121
|
expect(result.ok).toBe(false)
|
|
108
122
|
expect(result.status).toBe(401)
|
|
@@ -113,7 +127,7 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
113
127
|
|
|
114
128
|
it('Should respond with the correct result body', async () => {
|
|
115
129
|
await usingAsync(new Injector(), async (i) => {
|
|
116
|
-
await prepareInjector(i)
|
|
130
|
+
const { apiUrl } = await prepareInjector(i)
|
|
117
131
|
const response = await fetch(PathHelper.joinPaths(apiUrl, 'isAuthenticated'))
|
|
118
132
|
expect(response.status).toBe(200)
|
|
119
133
|
const result = await response.json()
|
|
@@ -123,7 +137,8 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
123
137
|
|
|
124
138
|
it('Should be able to read query parameters', async () => {
|
|
125
139
|
await usingAsync(new Injector(), async (i) => {
|
|
126
|
-
await prepareInjector(i)
|
|
140
|
+
const { apiUrl } = await prepareInjector(i)
|
|
141
|
+
|
|
127
142
|
const response = await fetch(PathHelper.joinPaths(apiUrl, 'testQuery?param1=foo'))
|
|
128
143
|
expect(response.status).toBe(200)
|
|
129
144
|
const result = await response.json()
|
|
@@ -133,7 +148,8 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
133
148
|
|
|
134
149
|
it('Should be able to read url parameters', async () => {
|
|
135
150
|
await usingAsync(new Injector(), async (i) => {
|
|
136
|
-
await prepareInjector(i)
|
|
151
|
+
const { apiUrl } = await prepareInjector(i)
|
|
152
|
+
|
|
137
153
|
const response = await fetch(PathHelper.joinPaths(apiUrl, 'testUrlParams/bar'))
|
|
138
154
|
expect(response.status).toBe(200)
|
|
139
155
|
const result = await response.json()
|
|
@@ -143,7 +159,8 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
143
159
|
|
|
144
160
|
it('Should be able to read post body', async () => {
|
|
145
161
|
await usingAsync(new Injector(), async (i) => {
|
|
146
|
-
await prepareInjector(i)
|
|
162
|
+
const { apiUrl } = await prepareInjector(i)
|
|
163
|
+
|
|
147
164
|
const response = await fetch(PathHelper.joinPaths(apiUrl, 'testPostBody'), {
|
|
148
165
|
method: 'POST',
|
|
149
166
|
body: JSON.stringify({ value: 'baz' }),
|
|
@@ -156,7 +173,8 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
156
173
|
|
|
157
174
|
it('Should respond with OK to OPTIONS requests', async () => {
|
|
158
175
|
await usingAsync(new Injector(), async (i) => {
|
|
159
|
-
await prepareInjector(i)
|
|
176
|
+
const { apiUrl } = await prepareInjector(i)
|
|
177
|
+
|
|
160
178
|
const response = await fetch(PathHelper.joinPaths(apiUrl, 'testPostBody'), {
|
|
161
179
|
method: 'OPTIONS',
|
|
162
180
|
})
|
|
@@ -166,7 +184,7 @@ describe('@furystack/rest-service inregration tests', () => {
|
|
|
166
184
|
|
|
167
185
|
it('Should reject requests outside of the API Root', async () => {
|
|
168
186
|
await usingAsync(new Injector(), async (i) => {
|
|
169
|
-
await prepareInjector(i)
|
|
187
|
+
const { hostName, port } = await prepareInjector(i)
|
|
170
188
|
await expect(fetch(PathHelper.joinPaths(`http://${hostName}:${port}`, 'not-my-api-root'))).rejects.toThrowError(
|
|
171
189
|
'fetch failed',
|
|
172
190
|
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Injectable, Injected } from '@furystack/inject'
|
|
2
2
|
import { createReadStream } from 'fs'
|
|
3
|
-
import { stat } from 'fs/promises'
|
|
3
|
+
import { access, stat } from 'fs/promises'
|
|
4
4
|
import type { IncomingMessage, OutgoingHttpHeaders, ServerResponse } from 'http'
|
|
5
5
|
import { getMimeForFile } from './mime-types.js'
|
|
6
6
|
import { join, normalize, sep } from 'path'
|
|
@@ -31,13 +31,14 @@ export class StaticServerManager {
|
|
|
31
31
|
}) {
|
|
32
32
|
const { size } = await stat(fullPath)
|
|
33
33
|
|
|
34
|
+
await access(fullPath)
|
|
35
|
+
|
|
34
36
|
const head = {
|
|
35
37
|
...headers,
|
|
36
38
|
'Content-Length': size,
|
|
37
39
|
'Content-Type': getMimeForFile(fullPath),
|
|
38
40
|
}
|
|
39
|
-
|
|
40
|
-
res.writeHead(200, head)
|
|
41
|
+
Object.entries(head).map(([key, value]) => res.setHeader(key, value))
|
|
41
42
|
await new Promise<void>((resolve, reject) =>
|
|
42
43
|
createReadStream(fullPath, { autoClose: true }).once('finish', resolve).once('error', reject).pipe(res),
|
|
43
44
|
)
|
|
@@ -71,7 +72,7 @@ export class StaticServerManager {
|
|
|
71
72
|
await this.sendFile({ fullPath, res, headers })
|
|
72
73
|
} catch (error) {
|
|
73
74
|
if (fallback) {
|
|
74
|
-
await this.sendFile({ fullPath: join(path, fallback), res, headers })
|
|
75
|
+
await this.sendFile({ fullPath: normalize(join(path, fallback)), res, headers })
|
|
75
76
|
} else {
|
|
76
77
|
res.writeHead(404, { 'Content-Type': 'text/plain' })
|
|
77
78
|
res.end('Not found')
|
|
@@ -5,10 +5,11 @@ import { JsonResult } from './request-action-implementation'
|
|
|
5
5
|
import { Validate } from './validate'
|
|
6
6
|
import './helpers'
|
|
7
7
|
|
|
8
|
-
import schema from './validate.integration.spec.schema.json'
|
|
8
|
+
import schema from './validate.integration.spec.schema.json' assert { type: 'json' }
|
|
9
9
|
import type { ValidationApi } from './validate.integration.schema'
|
|
10
10
|
import { useRestService } from './helpers'
|
|
11
11
|
import { describe, it, expect } from 'vitest'
|
|
12
|
+
import { assert } from 'console'
|
|
12
13
|
|
|
13
14
|
// To recreate: yarn ts-json-schema-generator -f tsconfig.json --no-type-check -p packages/rest-service/src/validate.integration.schema.ts -o packages/rest-service/src/validate.integration.spec.schema.json
|
|
14
15
|
|