@stuntman/server 0.1.9 → 0.1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/api/validators.d.ts.map +1 -1
- package/dist/api/validators.js +22 -7
- package/dist/api/validators.js.map +1 -1
- package/package.json +1 -1
- package/src/api/validators.ts +31 -7
package/README.md
CHANGED
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
[][npmjs]
|
|
4
4
|
[][build]
|
|
5
5
|
[][coverage]
|
|
6
|
+

|
|
6
7
|
|
|
7
8
|
[npmjs]: https://www.npmjs.com/package/@stuntman/server
|
|
8
9
|
[build]: https://github.com/andrzej-woof/stuntman/actions/workflows/ci.yaml
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,gCAAgC,SAAU,SAAS,cAAc,KAAG,
|
|
1
|
+
{"version":3,"file":"validators.d.ts","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,QAAQ,MAAM,kBAAkB,CAAC;AAElD,eAAO,MAAM,gCAAgC,SAAU,SAAS,cAAc,KAAG,IA2HhF,CAAC;AAEF,eAAO,MAAM,wBAAwB,qBAAsB,SAAS,IAAI,SA2BvE,CAAC"}
|
package/dist/api/validators.js
CHANGED
|
@@ -6,13 +6,17 @@ const validateSerializedRuleProperties = (rule) => {
|
|
|
6
6
|
if (!rule) {
|
|
7
7
|
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid serialized rule' });
|
|
8
8
|
}
|
|
9
|
-
|
|
9
|
+
// TODO make a nice regex to limit rule names
|
|
10
|
+
if (typeof rule.id !== 'string' || !rule.id.trim()) {
|
|
10
11
|
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid rule.id' });
|
|
11
12
|
}
|
|
12
|
-
if (typeof rule.matches !== 'object' ||
|
|
13
|
+
if (typeof rule.matches !== 'object' ||
|
|
14
|
+
!('remoteFn' in rule.matches) ||
|
|
15
|
+
typeof rule.matches.remoteFn !== 'string' ||
|
|
16
|
+
!rule.matches.remoteFn.trim()) {
|
|
13
17
|
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid rule.matches' });
|
|
14
18
|
}
|
|
15
|
-
if (rule.priority && typeof rule.priority !== 'number') {
|
|
19
|
+
if (typeof rule.priority !== 'undefined' && (typeof rule.priority !== 'number' || rule.priority < 0)) {
|
|
16
20
|
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid rule.priority' });
|
|
17
21
|
}
|
|
18
22
|
if (typeof rule.actions !== 'object') {
|
|
@@ -28,13 +32,20 @@ const validateSerializedRuleProperties = (rule) => {
|
|
|
28
32
|
});
|
|
29
33
|
}
|
|
30
34
|
if (typeof rule.actions.mockResponse !== 'undefined') {
|
|
31
|
-
if (typeof rule.actions.mockResponse !== 'object') {
|
|
35
|
+
if (typeof rule.actions.mockResponse !== 'object' || Array.isArray(rule.actions.mockResponse)) {
|
|
32
36
|
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid rule.actions.mockResponse' });
|
|
33
37
|
}
|
|
34
|
-
if ('remoteFn' in rule.actions.mockResponse &&
|
|
38
|
+
if ('remoteFn' in rule.actions.mockResponse &&
|
|
39
|
+
('rawHeaders' in rule.actions.mockResponse ||
|
|
40
|
+
'status' in rule.actions.mockResponse ||
|
|
41
|
+
'body' in rule.actions.mockResponse)) {
|
|
35
42
|
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid rule.actions.mockResponse' });
|
|
36
43
|
}
|
|
37
|
-
|
|
44
|
+
if ('remoteFn' in rule.actions.mockResponse &&
|
|
45
|
+
(typeof rule.actions.mockResponse.remoteFn !== 'string' || !rule.actions.mockResponse.remoteFn.trim())) {
|
|
46
|
+
throw new shared_1.AppError({ httpCode: shared_1.HttpCode.BAD_REQUEST, message: 'invalid rule.actions.mockResponse' });
|
|
47
|
+
}
|
|
48
|
+
if (!('remoteFn' in rule.actions.mockResponse)) {
|
|
38
49
|
if (typeof rule.actions.mockResponse.status !== 'number') {
|
|
39
50
|
throw new shared_1.AppError({
|
|
40
51
|
httpCode: shared_1.HttpCode.BAD_REQUEST,
|
|
@@ -43,6 +54,7 @@ const validateSerializedRuleProperties = (rule) => {
|
|
|
43
54
|
}
|
|
44
55
|
if (typeof rule.actions.mockResponse.rawHeaders !== 'undefined' &&
|
|
45
56
|
(!Array.isArray(rule.actions.mockResponse.rawHeaders) ||
|
|
57
|
+
rule.actions.mockResponse.rawHeaders.length % 2 !== 0 ||
|
|
46
58
|
rule.actions.mockResponse.rawHeaders.some((header) => typeof header !== 'string'))) {
|
|
47
59
|
throw new shared_1.AppError({
|
|
48
60
|
httpCode: shared_1.HttpCode.BAD_REQUEST,
|
|
@@ -80,7 +92,10 @@ const validateSerializedRuleProperties = (rule) => {
|
|
|
80
92
|
message: 'rule.actions.mockResponse and rule.actions.modifyResponse are mutually exclusive',
|
|
81
93
|
});
|
|
82
94
|
}
|
|
83
|
-
if (!rule.ttlSeconds ||
|
|
95
|
+
if (!rule.ttlSeconds ||
|
|
96
|
+
typeof rule.ttlSeconds !== 'number' ||
|
|
97
|
+
rule.ttlSeconds < shared_1.MIN_RULE_TTL_SECONDS ||
|
|
98
|
+
rule.ttlSeconds > shared_1.MAX_RULE_TTL_SECONDS) {
|
|
84
99
|
throw new shared_1.AppError({
|
|
85
100
|
httpCode: shared_1.HttpCode.BAD_REQUEST,
|
|
86
101
|
message: `rule.ttlSeconds should be within ${shared_1.MIN_RULE_TTL_SECONDS} and ${shared_1.MAX_RULE_TTL_SECONDS}`,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":";;;AAAA,6CAAsH;AAG/G,MAAM,gCAAgC,GAAG,CAAC,IAA6B,EAAQ,EAAE;IACpF,IAAI,CAAC,IAAI,EAAE;QACP,MAAM,IAAI,iBAAQ,CAAC,EAAE,QAAQ,EAAE,iBAAQ,CAAC,WAAW,EAAE,OAAO,EAAE,yBAAyB,EAAE,CAAC,CAAC;KAC9F;IACD,IAAI,OAAO,IAAI,CAAC,EAAE,KAAK,QAAQ,EAAE;
|
|
1
|
+
{"version":3,"file":"validators.js","sourceRoot":"","sources":["../../src/api/validators.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/src/api/validators.ts
CHANGED
|
@@ -5,13 +5,19 @@ export const validateSerializedRuleProperties = (rule: Stuntman.SerializedRule):
|
|
|
5
5
|
if (!rule) {
|
|
6
6
|
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid serialized rule' });
|
|
7
7
|
}
|
|
8
|
-
|
|
8
|
+
// TODO make a nice regex to limit rule names
|
|
9
|
+
if (typeof rule.id !== 'string' || !rule.id.trim()) {
|
|
9
10
|
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid rule.id' });
|
|
10
11
|
}
|
|
11
|
-
if (
|
|
12
|
+
if (
|
|
13
|
+
typeof rule.matches !== 'object' ||
|
|
14
|
+
!('remoteFn' in rule.matches) ||
|
|
15
|
+
typeof rule.matches.remoteFn !== 'string' ||
|
|
16
|
+
!rule.matches.remoteFn.trim()
|
|
17
|
+
) {
|
|
12
18
|
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid rule.matches' });
|
|
13
19
|
}
|
|
14
|
-
if (rule.priority && typeof rule.priority !== 'number') {
|
|
20
|
+
if (typeof rule.priority !== 'undefined' && (typeof rule.priority !== 'number' || rule.priority < 0)) {
|
|
15
21
|
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid rule.priority' });
|
|
16
22
|
}
|
|
17
23
|
if (typeof rule.actions !== 'object') {
|
|
@@ -29,12 +35,24 @@ export const validateSerializedRuleProperties = (rule: Stuntman.SerializedRule):
|
|
|
29
35
|
});
|
|
30
36
|
}
|
|
31
37
|
if (typeof rule.actions.mockResponse !== 'undefined') {
|
|
32
|
-
if (typeof rule.actions.mockResponse !== 'object') {
|
|
38
|
+
if (typeof rule.actions.mockResponse !== 'object' || Array.isArray(rule.actions.mockResponse)) {
|
|
39
|
+
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid rule.actions.mockResponse' });
|
|
40
|
+
}
|
|
41
|
+
if (
|
|
42
|
+
'remoteFn' in rule.actions.mockResponse &&
|
|
43
|
+
('rawHeaders' in rule.actions.mockResponse ||
|
|
44
|
+
'status' in rule.actions.mockResponse ||
|
|
45
|
+
'body' in rule.actions.mockResponse)
|
|
46
|
+
) {
|
|
33
47
|
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid rule.actions.mockResponse' });
|
|
34
48
|
}
|
|
35
|
-
if (
|
|
49
|
+
if (
|
|
50
|
+
'remoteFn' in rule.actions.mockResponse &&
|
|
51
|
+
(typeof rule.actions.mockResponse.remoteFn !== 'string' || !rule.actions.mockResponse.remoteFn.trim())
|
|
52
|
+
) {
|
|
36
53
|
throw new AppError({ httpCode: HttpCode.BAD_REQUEST, message: 'invalid rule.actions.mockResponse' });
|
|
37
|
-
}
|
|
54
|
+
}
|
|
55
|
+
if (!('remoteFn' in rule.actions.mockResponse)) {
|
|
38
56
|
if (typeof rule.actions.mockResponse.status !== 'number') {
|
|
39
57
|
throw new AppError({
|
|
40
58
|
httpCode: HttpCode.BAD_REQUEST,
|
|
@@ -44,6 +62,7 @@ export const validateSerializedRuleProperties = (rule: Stuntman.SerializedRule):
|
|
|
44
62
|
if (
|
|
45
63
|
typeof rule.actions.mockResponse.rawHeaders !== 'undefined' &&
|
|
46
64
|
(!Array.isArray(rule.actions.mockResponse.rawHeaders) ||
|
|
65
|
+
rule.actions.mockResponse.rawHeaders.length % 2 !== 0 ||
|
|
47
66
|
rule.actions.mockResponse.rawHeaders.some((header) => typeof header !== 'string'))
|
|
48
67
|
) {
|
|
49
68
|
throw new AppError({
|
|
@@ -88,7 +107,12 @@ export const validateSerializedRuleProperties = (rule: Stuntman.SerializedRule):
|
|
|
88
107
|
message: 'rule.actions.mockResponse and rule.actions.modifyResponse are mutually exclusive',
|
|
89
108
|
});
|
|
90
109
|
}
|
|
91
|
-
if (
|
|
110
|
+
if (
|
|
111
|
+
!rule.ttlSeconds ||
|
|
112
|
+
typeof rule.ttlSeconds !== 'number' ||
|
|
113
|
+
rule.ttlSeconds < MIN_RULE_TTL_SECONDS ||
|
|
114
|
+
rule.ttlSeconds > MAX_RULE_TTL_SECONDS
|
|
115
|
+
) {
|
|
92
116
|
throw new AppError({
|
|
93
117
|
httpCode: HttpCode.BAD_REQUEST,
|
|
94
118
|
message: `rule.ttlSeconds should be within ${MIN_RULE_TTL_SECONDS} and ${MAX_RULE_TTL_SECONDS}`,
|