@stuntman/shared 0.1.6 → 0.1.8
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/dist/appError.d.ts +1 -2
- package/dist/appError.d.ts.map +1 -0
- package/dist/appError.js +1 -0
- package/dist/appError.js.map +1 -0
- package/dist/config.d.ts +7 -2
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +27 -11
- package/dist/config.js.map +1 -0
- package/dist/constants.d.ts +2 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +3 -1
- package/dist/constants.js.map +1 -0
- package/dist/escapeStringRegexp.d.ts +2 -0
- package/dist/escapeStringRegexp.d.ts.map +1 -0
- package/dist/escapeStringRegexp.js +6 -0
- package/dist/escapeStringRegexp.js.map +1 -0
- package/dist/gqlParser.d.ts +4 -0
- package/dist/gqlParser.d.ts.map +1 -0
- package/dist/gqlParser.js +48 -0
- package/dist/gqlParser.js.map +1 -0
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +7 -2
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +1 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +1 -0
- package/dist/logger.js.map +1 -0
- package/dist/rawHeaders.d.ts +1 -0
- package/dist/rawHeaders.d.ts.map +1 -0
- package/dist/rawHeaders.js +10 -5
- package/dist/rawHeaders.js.map +1 -0
- package/dist/stringify.d.ts +1 -0
- package/dist/stringify.d.ts.map +1 -0
- package/dist/stringify.js +2 -1
- package/dist/stringify.js.map +1 -0
- package/package.json +4 -4
- package/src/appError.ts +0 -2
- package/src/config.ts +27 -10
- package/src/constants.ts +1 -0
- package/src/escapeStringRegexp.ts +1 -0
- package/src/gqlParser.ts +40 -0
- package/src/index.ts +16 -9
- package/src/rawHeaders.ts +7 -6
- package/src/stringify.ts +1 -1
package/dist/appError.d.ts
CHANGED
|
@@ -6,9 +6,8 @@ export interface AppErrorInterface {
|
|
|
6
6
|
isOperational?: boolean;
|
|
7
7
|
}
|
|
8
8
|
export declare class AppError extends Error {
|
|
9
|
-
readonly name: string;
|
|
10
9
|
readonly httpCode: Stuntman.HttpCode;
|
|
11
|
-
readonly uuid?: string;
|
|
12
10
|
readonly isOperational: boolean;
|
|
13
11
|
constructor(args: AppErrorInterface);
|
|
14
12
|
}
|
|
13
|
+
//# sourceMappingURL=appError.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appError.d.ts","sourceRoot":"","sources":["../src/appError.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,GAAG,CAAC;AAEnC,MAAM,WAAW,iBAAiB;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa,CAAC,EAAE,OAAO,CAAC;CAC3B;AAED,qBAAa,QAAS,SAAQ,KAAK;IAC/B,SAAgB,QAAQ,EAAE,QAAQ,CAAC,QAAQ,CAAC;IAC5C,SAAgB,aAAa,EAAE,OAAO,CAAQ;gBAElC,IAAI,EAAE,iBAAiB;CActC"}
|
package/dist/appError.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appError.js","sourceRoot":"","sources":["../src/appError.ts"],"names":[],"mappings":";;;AASA,MAAa,QAAS,SAAQ,KAAK;IAI/B,YAAY,IAAuB;QAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAHR,kBAAa,GAAY,IAAI,CAAC;QAK1C,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAElD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,IAAI,OAAO,CAAC;QACjC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAE9B,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE;YAClC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;SAC3C;QAED,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAClC,CAAC;CACJ;AAlBD,4BAkBC"}
|
package/dist/config.d.ts
CHANGED
|
@@ -1,2 +1,7 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { Config } from '.';
|
|
2
|
+
declare class ConfigWrapper {
|
|
3
|
+
get stuntmanConfig(): Config;
|
|
4
|
+
}
|
|
5
|
+
declare const configWrapper: ConfigWrapper;
|
|
6
|
+
export = configWrapper;
|
|
7
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,MAAM,EAST,MAAM,GAAG,CAAC;AAwCX,cAAM,aAAa;IACf,IAAI,cAAc,IAAI,MAAM,CAc3B;CACJ;AACD,QAAA,MAAM,aAAa,eAAsB,CAAC;AAE1C,SAAS,aAAa,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -2,8 +2,6 @@
|
|
|
2
2
|
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.serverConfig = void 0;
|
|
7
5
|
const _1 = require(".");
|
|
8
6
|
const config_1 = __importDefault(require("config"));
|
|
9
7
|
const path_1 = __importDefault(require("path"));
|
|
@@ -32,14 +30,32 @@ const defaultConfig = {
|
|
|
32
30
|
webgui: {
|
|
33
31
|
disabled: false,
|
|
34
32
|
},
|
|
33
|
+
client: {
|
|
34
|
+
timeout: 60000,
|
|
35
|
+
host: 'localhost',
|
|
36
|
+
protocol: 'http',
|
|
37
|
+
port: _1.DEFAULT_API_PORT,
|
|
38
|
+
},
|
|
35
39
|
};
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
let configFromFile = null;
|
|
41
|
+
class ConfigWrapper {
|
|
42
|
+
get stuntmanConfig() {
|
|
43
|
+
if (!configFromFile) {
|
|
44
|
+
config_1.default.util.setModuleDefaults('stuntman', defaultConfig);
|
|
45
|
+
try {
|
|
46
|
+
configFromFile = config_1.default.get('stuntman');
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
// eslint-disable-next-line no-console
|
|
50
|
+
console.warn('unable to find correct config - starting with defaults');
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
if (!configFromFile) {
|
|
54
|
+
throw new Error('error getting config');
|
|
55
|
+
}
|
|
56
|
+
return configFromFile;
|
|
57
|
+
}
|
|
44
58
|
}
|
|
45
|
-
|
|
59
|
+
const configWrapper = new ConfigWrapper();
|
|
60
|
+
module.exports = configWrapper;
|
|
61
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;AAAA,wBAUW;AACX,oDAA4B;AAC5B,gDAAwB;AAExB,6BAA6B;AAE7B,MAAM,aAAa,GAAW;IAC1B,GAAG,EAAE;QACD,QAAQ,EAAE,KAAK;QACf,IAAI,EAAE,mBAAgB;QACtB,cAAc,EAAE,IAAI;QACpB,eAAe,EAAE,IAAI;KACxB;IACD,IAAI,EAAE;QACF,MAAM,EAAE,sBAAmB;QAC3B,WAAW,EAAE,eAAY;QACzB,IAAI,EAAE,oBAAiB;QACvB,OAAO,EAAE,wBAAqB;QAC9B,SAAS,EAAE,cAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC;KAC/C;IACD,OAAO,EAAE;QACL,OAAO,EAAE;YACL,UAAU,EAAE,4BAAyB;YACrC,SAAS,EAAE,yBAAsB;YACjC,GAAG,EAAE,oBAAiB;SACzB;KACJ;IACD,MAAM,EAAE;QACJ,QAAQ,EAAE,KAAK;KAClB;IACD,MAAM,EAAE;QACJ,OAAO,EAAE,KAAK;QACd,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,MAAM;QAChB,IAAI,EAAE,mBAAgB;KACzB;CACJ,CAAC;AAEF,IAAI,cAAc,GAAkB,IAAI,CAAC;AAEzC,MAAM,aAAa;IACf,IAAI,cAAc;QACd,IAAI,CAAC,cAAc,EAAE;YACjB,gBAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;YACzD,IAAI;gBACA,cAAc,GAAG,gBAAM,CAAC,GAAG,CAAS,UAAU,CAAC,CAAC;aACnD;YAAC,OAAO,KAAK,EAAE;gBACZ,sCAAsC;gBACtC,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAC;aAC1E;SACJ;QACD,IAAI,CAAC,cAAc,EAAE;YACjB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SAC3C;QACD,OAAO,cAAc,CAAC;IAC1B,CAAC;CACJ;AACD,MAAM,aAAa,GAAG,IAAI,aAAa,EAAE,CAAC;AAE1C,iBAAS,aAAa,CAAC"}
|
package/dist/constants.d.ts
CHANGED
|
@@ -12,3 +12,5 @@ export declare const MAX_RULE_TTL_SECONDS: number;
|
|
|
12
12
|
export declare const CATCH_ALL_RULE_PRIORITY: number;
|
|
13
13
|
export declare const CATCH_RULE_NAME = "internal/catch-all";
|
|
14
14
|
export declare const EXTERNAL_DNS: string[];
|
|
15
|
+
export declare const VALID_HOSTNAME_REGEX: RegExp;
|
|
16
|
+
//# sourceMappingURL=constants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,qBAAqB,QAAQ,CAAC;AAC3C,eAAO,MAAM,qBAAqB,MAAM,CAAC;AACzC,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,gBAAgB,OAAO,CAAC;AACrC,eAAO,MAAM,yBAAyB,MAAM,CAAC;AAC7C,eAAO,MAAM,sBAAsB,QAAoB,CAAC;AACxD,eAAO,MAAM,iBAAiB,QAAiB,CAAC;AAChD,eAAO,MAAM,mBAAmB,aAAa,CAAC;AAC9C,eAAO,MAAM,wBAAwB,QAAU,CAAC;AAChD,eAAO,MAAM,oBAAoB,KAAK,CAAC;AACvC,eAAO,MAAM,oBAAoB,QAAU,CAAC;AAC5C,eAAO,MAAM,uBAAuB,QAAW,CAAC;AAChD,eAAO,MAAM,eAAe,uBAAuB,CAAC;AACpD,eAAO,MAAM,YAAY,UAAyB,CAAC;AACnD,eAAO,MAAM,oBAAoB,QAA2F,CAAC"}
|
package/dist/constants.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.EXTERNAL_DNS = exports.CATCH_RULE_NAME = exports.CATCH_ALL_RULE_PRIORITY = exports.MAX_RULE_TTL_SECONDS = exports.MIN_RULE_TTL_SECONDS = exports.DEFAULT_RULE_TTL_SECONDS = exports.DEFAULT_MOCK_DOMAIN = exports.DEFAULT_CACHE_TTL = exports.DEFAULT_CACHE_MAX_SIZE = exports.DEFAULT_CACHE_MAX_ENTRIES = exports.DEFAULT_API_PORT = exports.DEFAULT_MOCK_PORT = exports.DEFAULT_RULE_PRIORITY = exports.DEFAULT_PROXY_TIMEOUT = void 0;
|
|
3
|
+
exports.VALID_HOSTNAME_REGEX = exports.EXTERNAL_DNS = exports.CATCH_RULE_NAME = exports.CATCH_ALL_RULE_PRIORITY = exports.MAX_RULE_TTL_SECONDS = exports.MIN_RULE_TTL_SECONDS = exports.DEFAULT_RULE_TTL_SECONDS = exports.DEFAULT_MOCK_DOMAIN = exports.DEFAULT_CACHE_TTL = exports.DEFAULT_CACHE_MAX_SIZE = exports.DEFAULT_CACHE_MAX_ENTRIES = exports.DEFAULT_API_PORT = exports.DEFAULT_MOCK_PORT = exports.DEFAULT_RULE_PRIORITY = exports.DEFAULT_PROXY_TIMEOUT = void 0;
|
|
4
4
|
exports.DEFAULT_PROXY_TIMEOUT = 60000;
|
|
5
5
|
exports.DEFAULT_RULE_PRIORITY = 100;
|
|
6
6
|
exports.DEFAULT_MOCK_PORT = 2015;
|
|
@@ -15,3 +15,5 @@ exports.MAX_RULE_TTL_SECONDS = 60 * 60;
|
|
|
15
15
|
exports.CATCH_ALL_RULE_PRIORITY = Infinity;
|
|
16
16
|
exports.CATCH_RULE_NAME = 'internal/catch-all';
|
|
17
17
|
exports.EXTERNAL_DNS = ['8.8.8.8', '1.1.1.1'];
|
|
18
|
+
exports.VALID_HOSTNAME_REGEX = /^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$/i;
|
|
19
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";;;AAAa,QAAA,qBAAqB,GAAG,KAAK,CAAC;AAC9B,QAAA,qBAAqB,GAAG,GAAG,CAAC;AAC5B,QAAA,iBAAiB,GAAG,IAAI,CAAC;AACzB,QAAA,gBAAgB,GAAG,IAAI,CAAC;AACxB,QAAA,yBAAyB,GAAG,GAAG,CAAC;AAChC,QAAA,sBAAsB,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,CAAC;AAC3C,QAAA,iBAAiB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,CAAC;AACnC,QAAA,mBAAmB,GAAG,UAAU,CAAC;AACjC,QAAA,wBAAwB,GAAG,EAAE,GAAG,EAAE,CAAC;AACnC,QAAA,oBAAoB,GAAG,EAAE,CAAC;AAC1B,QAAA,oBAAoB,GAAG,EAAE,GAAG,EAAE,CAAC;AAC/B,QAAA,uBAAuB,GAAG,QAAQ,CAAC;AACnC,QAAA,eAAe,GAAG,oBAAoB,CAAC;AACvC,QAAA,YAAY,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACtC,QAAA,oBAAoB,GAAG,wFAAwF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeStringRegexp.d.ts","sourceRoot":"","sources":["../src/escapeStringRegexp.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,kBAAkB,UAAW,MAAM,WAAwE,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeStringRegexp = void 0;
|
|
4
|
+
const escapeStringRegexp = (input) => input.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
|
|
5
|
+
exports.escapeStringRegexp = escapeStringRegexp;
|
|
6
|
+
//# sourceMappingURL=escapeStringRegexp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"escapeStringRegexp.js","sourceRoot":"","sources":["../src/escapeStringRegexp.ts"],"names":[],"mappings":";;;AAAO,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAA5G,QAAA,kBAAkB,sBAA0F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gqlParser.d.ts","sourceRoot":"","sources":["../src/gqlParser.ts"],"names":[],"mappings":";AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,SAAS,CAAC;AAGzC,eAAO,MAAM,cAAc,SAAU,MAAM,GAAG,MAAM,KAAG,SAAS,cAAc,GAAG,SAoChF,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.naiveGQLParser = void 0;
|
|
4
|
+
const logger_1 = require("./logger");
|
|
5
|
+
const naiveGQLParser = (body) => {
|
|
6
|
+
// TODO consider real parser :P
|
|
7
|
+
try {
|
|
8
|
+
let json = undefined;
|
|
9
|
+
try {
|
|
10
|
+
json = JSON.parse(Buffer.isBuffer(body) ? body.toString('utf-8') : body);
|
|
11
|
+
}
|
|
12
|
+
catch (kiss) {
|
|
13
|
+
// and swallow
|
|
14
|
+
}
|
|
15
|
+
if (!(json === null || json === void 0 ? void 0 : json.query) && !(json === null || json === void 0 ? void 0 : json.operationName)) {
|
|
16
|
+
return undefined;
|
|
17
|
+
}
|
|
18
|
+
const lines = json.query
|
|
19
|
+
.split('\n')
|
|
20
|
+
.map((l) => l.replace(/^\s+/g, '').trim())
|
|
21
|
+
.filter((l) => !!l);
|
|
22
|
+
if (!lines[0]) {
|
|
23
|
+
throw new Error('unable to find query');
|
|
24
|
+
}
|
|
25
|
+
if (/^query /.test(lines[0])) {
|
|
26
|
+
json.type = 'query';
|
|
27
|
+
}
|
|
28
|
+
else if (/^mutation /.test(lines[0])) {
|
|
29
|
+
json.type = 'mutation';
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
throw new Error(`Unable to resolve query type of ${lines[0]}`);
|
|
33
|
+
}
|
|
34
|
+
if (json.operationName && lines[1]) {
|
|
35
|
+
json.methodName = lines[1].split('(')[0].split('{')[0];
|
|
36
|
+
}
|
|
37
|
+
else if (json.operationName) {
|
|
38
|
+
json.methodName = lines[0].split('(')[0].split('{')[0];
|
|
39
|
+
}
|
|
40
|
+
return json;
|
|
41
|
+
}
|
|
42
|
+
catch (error) {
|
|
43
|
+
logger_1.logger.debug(error, 'unable to parse GQL');
|
|
44
|
+
}
|
|
45
|
+
return undefined;
|
|
46
|
+
};
|
|
47
|
+
exports.naiveGQLParser = naiveGQLParser;
|
|
48
|
+
//# sourceMappingURL=gqlParser.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gqlParser.js","sourceRoot":"","sources":["../src/gqlParser.ts"],"names":[],"mappings":";;;AACA,qCAAkC;AAE3B,MAAM,cAAc,GAAG,CAAC,IAAqB,EAAuC,EAAE;IACzF,+BAA+B;IAC/B,IAAI;QACA,IAAI,IAAI,GAAwC,SAAS,CAAC;QAC1D,IAAI;YACA,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;SAC5E;QAAC,OAAO,IAAI,EAAE;YACX,cAAc;SACjB;QACD,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,KAAK,CAAA,IAAI,CAAC,CAAA,IAAI,aAAJ,IAAI,uBAAJ,IAAI,CAAE,aAAa,CAAA,EAAE;YACtC,OAAO,SAAS,CAAC;SACpB;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK;aACnB,KAAK,CAAC,IAAI,CAAC;aACX,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;aACzC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACxB,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;YACX,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;SAC3C;QACD,IAAI,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YAC1B,IAAI,CAAC,IAAI,GAAG,OAAO,CAAC;SACvB;aAAM,IAAI,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE;YACpC,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;SAC1B;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAClE;QACD,IAAI,IAAI,CAAC,aAAa,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE;YAChC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;SAC5D;aAAM,IAAI,IAAI,CAAC,aAAa,EAAE;YAC3B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAE,CAAC;SAC5D;QACD,OAAO,IAAI,CAAC;KACf;IAAC,OAAO,KAAK,EAAE;QACZ,eAAM,CAAC,KAAK,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;KAC9C;IACD,OAAO,SAAS,CAAC;AACrB,CAAC,CAAC;AApCW,QAAA,cAAc,kBAoCzB"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ export * from './appError';
|
|
|
3
3
|
export * from './logger';
|
|
4
4
|
export * from './stringify';
|
|
5
5
|
export * from './rawHeaders';
|
|
6
|
-
export * from './
|
|
6
|
+
export * from './gqlParser';
|
|
7
|
+
export * from './escapeStringRegexp';
|
|
8
|
+
export declare const stuntmanConfig: Config;
|
|
7
9
|
export declare const INDEX_DTS: string;
|
|
8
10
|
type NonObject = string | number | boolean | symbol | undefined | null | any[];
|
|
9
11
|
interface SerializableTypesRecord<T> {
|
|
@@ -62,7 +64,7 @@ export type BaseRequest = {
|
|
|
62
64
|
export type Request = BaseRequest & {
|
|
63
65
|
id: string;
|
|
64
66
|
timestamp: number;
|
|
65
|
-
gqlBody?: GQLRequestBody;
|
|
67
|
+
gqlBody?: GQLRequestBody | undefined;
|
|
66
68
|
};
|
|
67
69
|
export type Response = {
|
|
68
70
|
rawHeaders?: RawHeadersInterface;
|
|
@@ -72,7 +74,7 @@ export type Response = {
|
|
|
72
74
|
};
|
|
73
75
|
export type LogEntry = {
|
|
74
76
|
originalRequest: Request;
|
|
75
|
-
labels?: string[];
|
|
77
|
+
labels?: string[] | undefined;
|
|
76
78
|
mockRuleId?: string;
|
|
77
79
|
originalResponse?: Response;
|
|
78
80
|
modifiedRequest?: Request;
|
|
@@ -139,10 +141,11 @@ export type ApiConfig = {
|
|
|
139
141
|
apiKeyReadOnly: string | null;
|
|
140
142
|
};
|
|
141
143
|
export type ClientConfig = {
|
|
142
|
-
protocol
|
|
143
|
-
host
|
|
144
|
-
port
|
|
145
|
-
timeout
|
|
144
|
+
protocol: 'http' | 'https';
|
|
145
|
+
host: string;
|
|
146
|
+
port: number;
|
|
147
|
+
timeout: number;
|
|
148
|
+
apiKey?: string;
|
|
146
149
|
};
|
|
147
150
|
export type MockConfig = {
|
|
148
151
|
domain: string;
|
|
@@ -160,13 +163,14 @@ export type StorageConfig = {
|
|
|
160
163
|
limitSize: number;
|
|
161
164
|
ttl: number;
|
|
162
165
|
};
|
|
163
|
-
export type
|
|
166
|
+
export type Config = {
|
|
164
167
|
webgui: WebGuiConfig;
|
|
165
168
|
api: ApiConfig;
|
|
166
169
|
mock: MockConfig;
|
|
167
170
|
storage: {
|
|
168
171
|
traffic: StorageConfig;
|
|
169
172
|
};
|
|
173
|
+
client: ClientConfig;
|
|
170
174
|
};
|
|
171
175
|
export interface RuleExecutorInterface {
|
|
172
176
|
addRule: (rule: Rule, overwrite?: boolean) => Promise<LiveRule>;
|
|
@@ -177,3 +181,4 @@ export interface RuleExecutorInterface {
|
|
|
177
181
|
getRules: () => Promise<readonly LiveRule[]>;
|
|
178
182
|
getRule: (id: string) => Promise<LiveRule | undefined>;
|
|
179
183
|
}
|
|
184
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -17,15 +17,19 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
17
17
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
18
18
|
};
|
|
19
19
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
-
exports.HttpCode = exports.INDEX_DTS = void 0;
|
|
20
|
+
exports.HttpCode = exports.INDEX_DTS = exports.stuntmanConfig = void 0;
|
|
21
21
|
/* eslint-disable @typescript-eslint/ban-types */
|
|
22
22
|
__exportStar(require("./constants"), exports);
|
|
23
23
|
__exportStar(require("./appError"), exports);
|
|
24
24
|
__exportStar(require("./logger"), exports);
|
|
25
25
|
__exportStar(require("./stringify"), exports);
|
|
26
26
|
__exportStar(require("./rawHeaders"), exports);
|
|
27
|
-
__exportStar(require("./
|
|
27
|
+
__exportStar(require("./gqlParser"), exports);
|
|
28
|
+
__exportStar(require("./escapeStringRegexp"), exports);
|
|
28
29
|
const fs_1 = __importDefault(require("fs"));
|
|
30
|
+
const config_1 = __importDefault(require("./config"));
|
|
31
|
+
exports.stuntmanConfig = config_1.default.stuntmanConfig;
|
|
32
|
+
// TODO this file read sucks
|
|
29
33
|
exports.INDEX_DTS = fs_1.default.readFileSync(`${__dirname}/index.d.ts`, 'utf-8');
|
|
30
34
|
var HttpCode;
|
|
31
35
|
(function (HttpCode) {
|
|
@@ -38,3 +42,4 @@ var HttpCode;
|
|
|
38
42
|
HttpCode[HttpCode["UNPROCESSABLE_ENTITY"] = 422] = "UNPROCESSABLE_ENTITY";
|
|
39
43
|
HttpCode[HttpCode["INTERNAL_SERVER_ERROR"] = 500] = "INTERNAL_SERVER_ERROR";
|
|
40
44
|
})(HttpCode = exports.HttpCode || (exports.HttpCode = {}));
|
|
45
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA,iDAAiD;AACjD,8CAA4B;AAC5B,6CAA2B;AAC3B,2CAAyB;AACzB,8CAA4B;AAC5B,+CAA6B;AAC7B,8CAA4B;AAC5B,uDAAqC;AACrC,4CAAoB;AAEpB,sDAA8B;AACjB,QAAA,cAAc,GAAG,gBAAM,CAAC,cAAc,CAAC;AAEpD,4BAA4B;AACf,QAAA,SAAS,GAAG,YAAE,CAAC,YAAY,CAAC,GAAG,SAAS,aAAa,EAAE,OAAO,CAAC,CAAC;AAsB7E,IAAY,QASX;AATD,WAAY,QAAQ;IAChB,qCAAQ,CAAA;IACR,qDAAgB,CAAA;IAChB,uDAAiB,CAAA;IACjB,yDAAkB,CAAA;IAClB,mDAAe,CAAA;IACf,iDAAc,CAAA;IACd,yEAA0B,CAAA;IAC1B,2EAA2B,CAAA;AAC/B,CAAC,EATW,QAAQ,GAAR,gBAAQ,KAAR,gBAAQ,QASnB"}
|
package/dist/logger.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,MAAM;;;;;;;;EAQjB,CAAC"}
|
package/dist/logger.js
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":";;;;;;;AAAA,gDAAwB;AAEX,QAAA,MAAM,GAAG,IAAA,cAAI,EAAC;IACvB,KAAK,EAAE,MAAA,OAAO,CAAC,GAAG,CAAC,SAAS,mCAAI,MAAM;IACtC,UAAU,EAAE,SAAS;IACrB,UAAU,EAAE;QACR,KAAK,CAAC,KAAK;YACP,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC5B,CAAC;KACJ;CACJ,CAAC,CAAC"}
|
package/dist/rawHeaders.d.ts
CHANGED
|
@@ -10,3 +10,4 @@ export declare class RawHeaders extends Array<string> implements Stuntman.RawHea
|
|
|
10
10
|
static fromHeadersRecord(headersRecord: Record<string, string | string[] | undefined>): RawHeaders;
|
|
11
11
|
static toHeaderPairs(rawHeaders: string[]): readonly [string, string][];
|
|
12
12
|
}
|
|
13
|
+
//# sourceMappingURL=rawHeaders.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawHeaders.d.ts","sourceRoot":"","sources":["../src/rawHeaders.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,QAAQ,MAAM,GAAG,CAAC;AAEnC,qBAAa,UAAW,SAAQ,KAAK,CAAC,MAAM,CAAE,YAAW,QAAQ,CAAC,mBAAmB;IACjF,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAYrC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO;IAQ1C,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAiBtC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAe1B,aAAa,IAAI,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;IAI5C,MAAM,CAAC,eAAe,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,GAAG,UAAU;IAInE,MAAM,CAAC,iBAAiB,CAAC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,SAAS,CAAC,GAAG,UAAU;IAclG,MAAM,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE;CAO1E"}
|
package/dist/rawHeaders.js
CHANGED
|
@@ -3,13 +3,14 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.RawHeaders = void 0;
|
|
4
4
|
class RawHeaders extends Array {
|
|
5
5
|
get(name) {
|
|
6
|
+
var _a;
|
|
6
7
|
const headers = this.toHeaderPairs();
|
|
7
8
|
const matchingHeaders = headers.filter((h) => h[0].toLowerCase() === name.toLowerCase());
|
|
8
9
|
if (matchingHeaders.length === 0) {
|
|
9
|
-
return;
|
|
10
|
+
return undefined;
|
|
10
11
|
}
|
|
11
12
|
if (matchingHeaders.length === 1) {
|
|
12
|
-
return matchingHeaders[0][1];
|
|
13
|
+
return (_a = matchingHeaders[0]) === null || _a === void 0 ? void 0 : _a[1];
|
|
13
14
|
}
|
|
14
15
|
throw new Error('Multiple headers with same name. Manipulate rawHeaders instead');
|
|
15
16
|
}
|
|
@@ -21,15 +22,17 @@ class RawHeaders extends Array {
|
|
|
21
22
|
return foundValue === value;
|
|
22
23
|
}
|
|
23
24
|
set(name, value) {
|
|
25
|
+
var _a;
|
|
24
26
|
let foundHeaders = 0;
|
|
25
27
|
for (let headerIndex = 0; headerIndex < this.length; headerIndex += 2) {
|
|
26
|
-
if (this[headerIndex].toLowerCase() === name.toLowerCase()) {
|
|
28
|
+
if (((_a = this[headerIndex]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === name.toLowerCase()) {
|
|
27
29
|
this[headerIndex + 1] = value;
|
|
28
30
|
++foundHeaders;
|
|
29
31
|
}
|
|
30
32
|
}
|
|
31
33
|
if (foundHeaders === 0) {
|
|
32
|
-
|
|
34
|
+
this.add(name, value);
|
|
35
|
+
return;
|
|
33
36
|
}
|
|
34
37
|
if (foundHeaders > 1) {
|
|
35
38
|
throw new Error('Multiple headers with same name. Manipulate rawHeaders instead');
|
|
@@ -40,10 +43,11 @@ class RawHeaders extends Array {
|
|
|
40
43
|
this.push(value);
|
|
41
44
|
}
|
|
42
45
|
remove(name) {
|
|
46
|
+
var _a;
|
|
43
47
|
const headersCopy = [...this];
|
|
44
48
|
let foundHeaders = 0;
|
|
45
49
|
for (let headerIndex = 0; headerIndex < headersCopy.length; headerIndex += 2) {
|
|
46
|
-
if (this[headerIndex - foundHeaders * 2].toLowerCase() === name.toLowerCase()) {
|
|
50
|
+
if (((_a = this[headerIndex - foundHeaders * 2]) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === name.toLowerCase()) {
|
|
47
51
|
delete this[headerIndex];
|
|
48
52
|
delete this[headerIndex];
|
|
49
53
|
++foundHeaders;
|
|
@@ -81,3 +85,4 @@ class RawHeaders extends Array {
|
|
|
81
85
|
}
|
|
82
86
|
}
|
|
83
87
|
exports.RawHeaders = RawHeaders;
|
|
88
|
+
//# sourceMappingURL=rawHeaders.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rawHeaders.js","sourceRoot":"","sources":["../src/rawHeaders.ts"],"names":[],"mappings":"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"}
|
package/dist/stringify.d.ts
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify.d.ts","sourceRoot":"","sources":["../src/stringify.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS,QAAS,GAAG,WAM5B,CAAC"}
|
package/dist/stringify.js
CHANGED
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.stringify = void 0;
|
|
4
|
-
const stringify = (obj) => JSON.stringify(obj, (
|
|
4
|
+
const stringify = (obj) => JSON.stringify(obj, (_key, value) => {
|
|
5
5
|
if (typeof value === 'function' || value instanceof RegExp) {
|
|
6
6
|
return value.toString();
|
|
7
7
|
}
|
|
8
8
|
return value;
|
|
9
9
|
});
|
|
10
10
|
exports.stringify = stringify;
|
|
11
|
+
//# sourceMappingURL=stringify.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stringify.js","sourceRoot":"","sources":["../src/stringify.ts"],"names":[],"mappings":";;;AAAO,MAAM,SAAS,GAAG,CAAC,GAAQ,EAAE,EAAE,CAClC,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;IAChC,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,KAAK,YAAY,MAAM,EAAE;QACxD,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;KAC3B;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC,CAAC;AANM,QAAA,SAAS,aAMf"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stuntman/shared",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"description": "Stuntman - HTTP proxy / mock shared types and utils",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"repository": {
|
|
@@ -49,10 +49,10 @@
|
|
|
49
49
|
"CHANGELOG.md"
|
|
50
50
|
],
|
|
51
51
|
"scripts": {
|
|
52
|
-
"test": "SUPPRESS_NO_CONFIG_WARNING=1 jest",
|
|
52
|
+
"test": "SUPPRESS_NO_CONFIG_WARNING=1 jest --coverage",
|
|
53
53
|
"clean": "rm -fr dist",
|
|
54
54
|
"build": "tsc",
|
|
55
|
-
"lint": "prettier --check
|
|
56
|
-
"lint:fix": "prettier --write ./{src,test} && eslint ./{src,test} --
|
|
55
|
+
"lint": "prettier --check \"./{src,test}/**/*\" && eslint \"./{src,test}/**/*\"",
|
|
56
|
+
"lint:fix": "prettier --write \"./{src,test}/**/*\" && eslint \"./{src,test}/**/*\" --fix"
|
|
57
57
|
}
|
|
58
58
|
}
|
package/src/appError.ts
CHANGED
|
@@ -8,9 +8,7 @@ export interface AppErrorInterface {
|
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
export class AppError extends Error {
|
|
11
|
-
public readonly name: string;
|
|
12
11
|
public readonly httpCode: Stuntman.HttpCode;
|
|
13
|
-
public readonly uuid?: string;
|
|
14
12
|
public readonly isOperational: boolean = true;
|
|
15
13
|
|
|
16
14
|
constructor(args: AppErrorInterface) {
|
package/src/config.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
-
|
|
2
|
+
Config,
|
|
3
3
|
DEFAULT_API_PORT,
|
|
4
4
|
DEFAULT_MOCK_DOMAIN,
|
|
5
5
|
EXTERNAL_DNS,
|
|
@@ -14,7 +14,7 @@ import path from 'path';
|
|
|
14
14
|
|
|
15
15
|
// TODO safeguards & defaults
|
|
16
16
|
|
|
17
|
-
const defaultConfig:
|
|
17
|
+
const defaultConfig: Config = {
|
|
18
18
|
api: {
|
|
19
19
|
disabled: false,
|
|
20
20
|
port: DEFAULT_API_PORT,
|
|
@@ -38,16 +38,33 @@ const defaultConfig: ServerConfig = {
|
|
|
38
38
|
webgui: {
|
|
39
39
|
disabled: false,
|
|
40
40
|
},
|
|
41
|
+
client: {
|
|
42
|
+
timeout: 60000,
|
|
43
|
+
host: 'localhost',
|
|
44
|
+
protocol: 'http',
|
|
45
|
+
port: DEFAULT_API_PORT,
|
|
46
|
+
},
|
|
41
47
|
};
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
let configFromFile: Config | null = null;
|
|
44
50
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
+
class ConfigWrapper {
|
|
52
|
+
get stuntmanConfig(): Config {
|
|
53
|
+
if (!configFromFile) {
|
|
54
|
+
config.util.setModuleDefaults('stuntman', defaultConfig);
|
|
55
|
+
try {
|
|
56
|
+
configFromFile = config.get<Config>('stuntman');
|
|
57
|
+
} catch (error) {
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
59
|
+
console.warn('unable to find correct config - starting with defaults');
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (!configFromFile) {
|
|
63
|
+
throw new Error('error getting config');
|
|
64
|
+
}
|
|
65
|
+
return configFromFile;
|
|
66
|
+
}
|
|
51
67
|
}
|
|
68
|
+
const configWrapper = new ConfigWrapper();
|
|
52
69
|
|
|
53
|
-
export
|
|
70
|
+
export = configWrapper;
|
package/src/constants.ts
CHANGED
|
@@ -12,3 +12,4 @@ export const MAX_RULE_TTL_SECONDS = 60 * 60;
|
|
|
12
12
|
export const CATCH_ALL_RULE_PRIORITY = Infinity;
|
|
13
13
|
export const CATCH_RULE_NAME = 'internal/catch-all';
|
|
14
14
|
export const EXTERNAL_DNS = ['8.8.8.8', '1.1.1.1'];
|
|
15
|
+
export const VALID_HOSTNAME_REGEX = /^(([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])\.)*([a-z0-9]|[a-z0-9][a-z0-9\\-]*[a-z0-9])$/i;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export const escapeStringRegexp = (input: string) => input.replace(/[|\\{}()[\]^$+*?.]/g, '\\$&').replace(/-/g, '\\x2d');
|
package/src/gqlParser.ts
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type * as Stuntman from './index';
|
|
2
|
+
import { logger } from './logger';
|
|
3
|
+
|
|
4
|
+
export const naiveGQLParser = (body: Buffer | string): Stuntman.GQLRequestBody | undefined => {
|
|
5
|
+
// TODO consider real parser :P
|
|
6
|
+
try {
|
|
7
|
+
let json: Stuntman.GQLRequestBody | undefined = undefined;
|
|
8
|
+
try {
|
|
9
|
+
json = JSON.parse(Buffer.isBuffer(body) ? body.toString('utf-8') : body);
|
|
10
|
+
} catch (kiss) {
|
|
11
|
+
// and swallow
|
|
12
|
+
}
|
|
13
|
+
if (!json?.query && !json?.operationName) {
|
|
14
|
+
return undefined;
|
|
15
|
+
}
|
|
16
|
+
const lines = json.query
|
|
17
|
+
.split('\n')
|
|
18
|
+
.map((l) => l.replace(/^\s+/g, '').trim())
|
|
19
|
+
.filter((l) => !!l);
|
|
20
|
+
if (!lines[0]) {
|
|
21
|
+
throw new Error('unable to find query');
|
|
22
|
+
}
|
|
23
|
+
if (/^query /.test(lines[0])) {
|
|
24
|
+
json.type = 'query';
|
|
25
|
+
} else if (/^mutation /.test(lines[0])) {
|
|
26
|
+
json.type = 'mutation';
|
|
27
|
+
} else {
|
|
28
|
+
throw new Error(`Unable to resolve query type of ${lines[0]}`);
|
|
29
|
+
}
|
|
30
|
+
if (json.operationName && lines[1]) {
|
|
31
|
+
json.methodName = lines[1].split('(')[0]!.split('{')[0]!;
|
|
32
|
+
} else if (json.operationName) {
|
|
33
|
+
json.methodName = lines[0].split('(')[0]!.split('{')[0]!;
|
|
34
|
+
}
|
|
35
|
+
return json;
|
|
36
|
+
} catch (error) {
|
|
37
|
+
logger.debug(error, 'unable to parse GQL');
|
|
38
|
+
}
|
|
39
|
+
return undefined;
|
|
40
|
+
};
|
package/src/index.ts
CHANGED
|
@@ -4,9 +4,14 @@ export * from './appError';
|
|
|
4
4
|
export * from './logger';
|
|
5
5
|
export * from './stringify';
|
|
6
6
|
export * from './rawHeaders';
|
|
7
|
-
export * from './
|
|
8
|
-
|
|
7
|
+
export * from './gqlParser';
|
|
8
|
+
export * from './escapeStringRegexp';
|
|
9
9
|
import fs from 'fs';
|
|
10
|
+
|
|
11
|
+
import config from './config';
|
|
12
|
+
export const stuntmanConfig = config.stuntmanConfig;
|
|
13
|
+
|
|
14
|
+
// TODO this file read sucks
|
|
10
15
|
export const INDEX_DTS = fs.readFileSync(`${__dirname}/index.d.ts`, 'utf-8');
|
|
11
16
|
|
|
12
17
|
type NonObject = string | number | boolean | symbol | undefined | null | any[];
|
|
@@ -92,7 +97,7 @@ export type BaseRequest = {
|
|
|
92
97
|
export type Request = BaseRequest & {
|
|
93
98
|
id: string;
|
|
94
99
|
timestamp: number;
|
|
95
|
-
gqlBody?: GQLRequestBody;
|
|
100
|
+
gqlBody?: GQLRequestBody | undefined;
|
|
96
101
|
};
|
|
97
102
|
|
|
98
103
|
export type Response = {
|
|
@@ -104,7 +109,7 @@ export type Response = {
|
|
|
104
109
|
|
|
105
110
|
export type LogEntry = {
|
|
106
111
|
originalRequest: Request;
|
|
107
|
-
labels?: string[];
|
|
112
|
+
labels?: string[] | undefined;
|
|
108
113
|
mockRuleId?: string;
|
|
109
114
|
originalResponse?: Response;
|
|
110
115
|
modifiedRequest?: Request;
|
|
@@ -185,10 +190,11 @@ export type ApiConfig = {
|
|
|
185
190
|
};
|
|
186
191
|
|
|
187
192
|
export type ClientConfig = {
|
|
188
|
-
protocol
|
|
189
|
-
host
|
|
190
|
-
port
|
|
191
|
-
timeout
|
|
193
|
+
protocol: 'http' | 'https';
|
|
194
|
+
host: string;
|
|
195
|
+
port: number;
|
|
196
|
+
timeout: number;
|
|
197
|
+
apiKey?: string;
|
|
192
198
|
};
|
|
193
199
|
|
|
194
200
|
export type MockConfig = {
|
|
@@ -209,13 +215,14 @@ export type StorageConfig = {
|
|
|
209
215
|
ttl: number;
|
|
210
216
|
};
|
|
211
217
|
|
|
212
|
-
export type
|
|
218
|
+
export type Config = {
|
|
213
219
|
webgui: WebGuiConfig;
|
|
214
220
|
api: ApiConfig;
|
|
215
221
|
mock: MockConfig;
|
|
216
222
|
storage: {
|
|
217
223
|
traffic: StorageConfig;
|
|
218
224
|
};
|
|
225
|
+
client: ClientConfig;
|
|
219
226
|
};
|
|
220
227
|
|
|
221
228
|
export interface RuleExecutorInterface {
|
package/src/rawHeaders.ts
CHANGED
|
@@ -5,10 +5,10 @@ export class RawHeaders extends Array<string> implements Stuntman.RawHeadersInte
|
|
|
5
5
|
const headers = this.toHeaderPairs();
|
|
6
6
|
const matchingHeaders = headers.filter((h) => h[0].toLowerCase() === name.toLowerCase());
|
|
7
7
|
if (matchingHeaders.length === 0) {
|
|
8
|
-
return;
|
|
8
|
+
return undefined;
|
|
9
9
|
}
|
|
10
10
|
if (matchingHeaders.length === 1) {
|
|
11
|
-
return matchingHeaders[0][1];
|
|
11
|
+
return matchingHeaders[0]?.[1];
|
|
12
12
|
}
|
|
13
13
|
throw new Error('Multiple headers with same name. Manipulate rawHeaders instead');
|
|
14
14
|
}
|
|
@@ -24,13 +24,14 @@ export class RawHeaders extends Array<string> implements Stuntman.RawHeadersInte
|
|
|
24
24
|
set(name: string, value: string): void {
|
|
25
25
|
let foundHeaders = 0;
|
|
26
26
|
for (let headerIndex = 0; headerIndex < this.length; headerIndex += 2) {
|
|
27
|
-
if (this[headerIndex]
|
|
27
|
+
if (this[headerIndex]?.toLowerCase() === name.toLowerCase()) {
|
|
28
28
|
this[headerIndex + 1] = value;
|
|
29
29
|
++foundHeaders;
|
|
30
30
|
}
|
|
31
31
|
}
|
|
32
32
|
if (foundHeaders === 0) {
|
|
33
|
-
|
|
33
|
+
this.add(name, value);
|
|
34
|
+
return;
|
|
34
35
|
}
|
|
35
36
|
if (foundHeaders > 1) {
|
|
36
37
|
throw new Error('Multiple headers with same name. Manipulate rawHeaders instead');
|
|
@@ -46,7 +47,7 @@ export class RawHeaders extends Array<string> implements Stuntman.RawHeadersInte
|
|
|
46
47
|
const headersCopy = [...this];
|
|
47
48
|
let foundHeaders = 0;
|
|
48
49
|
for (let headerIndex = 0; headerIndex < headersCopy.length; headerIndex += 2) {
|
|
49
|
-
if (this[headerIndex - foundHeaders * 2]
|
|
50
|
+
if (this[headerIndex - foundHeaders * 2]?.toLowerCase() === name.toLowerCase()) {
|
|
50
51
|
delete this[headerIndex];
|
|
51
52
|
delete this[headerIndex];
|
|
52
53
|
++foundHeaders;
|
|
@@ -82,7 +83,7 @@ export class RawHeaders extends Array<string> implements Stuntman.RawHeadersInte
|
|
|
82
83
|
static toHeaderPairs(rawHeaders: string[]): readonly [string, string][] {
|
|
83
84
|
const headers = new Array<[string, string]>();
|
|
84
85
|
for (let headerIndex = 0; headerIndex < rawHeaders.length; headerIndex += 2) {
|
|
85
|
-
headers.push([rawHeaders[headerIndex]
|
|
86
|
+
headers.push([rawHeaders[headerIndex]!, rawHeaders[headerIndex + 1]!]);
|
|
86
87
|
}
|
|
87
88
|
return headers;
|
|
88
89
|
}
|
package/src/stringify.ts
CHANGED