@asapjs/router 0.0.7 → 0.0.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/assets/default-swagger.json +3 -19
- package/dist/middleware/jwtVerification.js +1 -1
- package/dist/middleware/jwtVerification.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/swagger/index.d.ts.map +1 -1
- package/dist/swagger/index.js +13 -1
- package/dist/swagger/index.js.map +1 -1
- package/package.json +4 -2
|
@@ -1,25 +1,9 @@
|
|
|
1
1
|
{
|
|
2
2
|
"openapi": "3.0.0",
|
|
3
|
-
"servers": [
|
|
4
|
-
{
|
|
5
|
-
"url": "https://ms.dev.pangaiacreators.com/shop",
|
|
6
|
-
"description": "pangaia-b4c-ms-shop-dev",
|
|
7
|
-
"variables": {}
|
|
8
|
-
},
|
|
9
|
-
{
|
|
10
|
-
"url": "https://ms.stg.pangaiacreators.com/shop",
|
|
11
|
-
"description": "pangaia-b4c-ms-shop-stg",
|
|
12
|
-
"variables": {}
|
|
13
|
-
},
|
|
14
|
-
{
|
|
15
|
-
"url": "http://localhost:3000/shop",
|
|
16
|
-
"description": "localhost",
|
|
17
|
-
"variables": {}
|
|
18
|
-
}
|
|
19
|
-
],
|
|
3
|
+
"servers": [],
|
|
20
4
|
"info": {
|
|
21
|
-
"version": "
|
|
22
|
-
"title": "
|
|
5
|
+
"version": "",
|
|
6
|
+
"title": "",
|
|
23
7
|
"description": "",
|
|
24
8
|
"termsOfService": "",
|
|
25
9
|
"contact": {},
|
|
@@ -16,7 +16,7 @@ const jwtVerification = (auth = false) => (req, res, next) => {
|
|
|
16
16
|
}
|
|
17
17
|
else {
|
|
18
18
|
const token = authorization.split(' ')[1];
|
|
19
|
-
jsonwebtoken_1.default.verify(token, (0, core_1.getConfig)().
|
|
19
|
+
jsonwebtoken_1.default.verify(token, (0, core_1.getConfig)().auth.jwt_secret, (err, decoded) => {
|
|
20
20
|
if (err && auth === true) {
|
|
21
21
|
if (err.message === 'invalid signature') {
|
|
22
22
|
return res.status(403).json({
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jwtVerification.js","sourceRoot":"","sources":["../../src/middleware/jwtVerification.ts"],"names":[],"mappings":";;;;;AAAA,uCAAyC;AAGzC,gEAA+B;AAE/B,iDAA+C;AAU/C,MAAM,eAAe,GACnB,CAAC,OAAgB,KAAK,EAAE,EAAE,CAC1B,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAClD,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IACtC,IAAI,CAAC,aAAa,EAAE;QAClB,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,4BAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;SACnD;QACD,IAAI,EAAE,CAAC;KACR;SAAM;QACL,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAG,IAAA,gBAAS,GAAU,CAAC,UAAU,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"jwtVerification.js","sourceRoot":"","sources":["../../src/middleware/jwtVerification.ts"],"names":[],"mappings":";;;;;AAAA,uCAAyC;AAGzC,gEAA+B;AAE/B,iDAA+C;AAU/C,MAAM,eAAe,GACnB,CAAC,OAAgB,KAAK,EAAE,EAAE,CAC1B,CAAC,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;IAClD,MAAM,EAAE,aAAa,EAAE,GAAG,GAAG,CAAC,OAAO,CAAC;IACtC,IAAI,CAAC,aAAa,EAAE;QAClB,IAAI,IAAI,KAAK,IAAI,EAAE;YACjB,MAAM,IAAI,4BAAa,CAAC,GAAG,EAAE,mBAAmB,CAAC,CAAC;SACnD;QACD,IAAI,EAAE,CAAC;KACR;SAAM;QACL,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1C,sBAAG,CAAC,MAAM,CAAC,KAAK,EAAG,IAAA,gBAAS,GAAU,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,GAAQ,EAAE,OAAY,EAAE,EAAE;YACjF,IAAI,GAAG,IAAI,IAAI,KAAK,IAAI,EAAE;gBACxB,IAAI,GAAG,CAAC,OAAO,KAAK,mBAAmB,EAAE;oBACvC,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;wBAC1B,KAAK,EAAE,IAAI;wBACX,OAAO,EAAE,8CAA8C;qBACxD,CAAC,CAAC;iBACJ;gBACD,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC;oBAC1B,KAAK,EAAE,IAAI;oBACX,OAAO,EAAE,2CAA2C;iBACrD,CAAC,CAAC;aACJ;YACD,GAAG,CAAC,IAAI,GAAG,OAAO,CAAC;YACnB,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAChC,IAAI,EAAE,CAAC;QACT,CAAC,CAAC,CAAC;KACJ;AACH,CAAC,CAAC;AAEJ,kBAAe,eAAe,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAEA,OAAO,OAAO,MAAM,SAAS,CAAC;AAS9B,MAAM,CAAC,OAAO,OAAO,YAAY;IAC/B,OAAO,CAAC,MAAM,CAAM;IAEb,GAAG,EAAE,OAAO,CAAC,WAAW,CAAC;gBAEpB,OAAO,EAAE,MAAM;IAQ3B,OAAO,CAAC,UAAU;IAgClB,OAAO,CAAC,eAAe;CAKxB"}
|
package/dist/router/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,uCAAyC;AAEzC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,uCAAyC;AAEzC,sDAA8B;AAC9B,8DAAqC;AACrC,gDAAwB;AACxB,4EAA2C;AAE3C,8EAAsD;AACtD,+DAAuC;AACvC,wCAA4C;AAE5C,MAAqB,YAAY;IAK/B,YAAY,OAAe;QACzB,IAAI,CAAC,MAAM,GAAG,IAAA,gBAAS,GAAE,CAAC;QAC1B,IAAI,CAAC,GAAG,GAAG,IAAA,iBAAO,GAAE,CAAC;QACrB,IAAI,CAAC,eAAe,EAAE,CAAC;QACvB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,sBAAY,CAAC,CAAC;IAC7B,CAAC;IAEO,UAAU,CAAC,OAAe;QAChC,MAAM,MAAM,GAAmB,iBAAO,CAAC,MAAM,EAAE,CAAC;QAChD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,QAAQ,CAAC,CAAC,OAAO,CAAC;QACnD,MAAM,CAAC,OAAO,CAAC,CAAC,KAAU,EAAE,EAAE;YAC5B,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,CAAC,aAAa,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QACjG,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE;YAC9D,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,eAAe,EAAE,CAAC,GAAQ,EAAE,GAAQ,EAAE,EAAE;YACnD,GAAG,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,oBAAoB,CAAC,CAAC;QACpD,CAAC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG;YACd,cAAc,EAAE;gBACd,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,oBAAoB;aAClD;SACF,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,uBAAuB,EAC/C,4BAAS,CAAC,UAAU,CAAC,SAAS,EAAE,OAAO,CAAC,EACxC,4BAAS,CAAC,KAAK,CAAC,SAAS,EAAE,OAAO,CAAC,CACpC,CAAC;QACF,IAAI,CAAC,GAAG,CAAC,GAAG,CACV,IAAI,IAAI,CAAC,MAAM,CAAC,QAAQ,oBAAoB,EAC5C,IAAA,iBAAO,EAAC,GAAS,EAAE;YACjB,MAAM,WAAW,GAAG,IAAA,wBAAc,GAAE,CAAC;YACrC,OAAO,WAAW,CAAC;QACrB,CAAC,CAAA,CAAC,CACH,CAAC;IACJ,CAAC;IAEO,eAAe;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAA,cAAI,GAAE,CAAC,CAAC;QACrB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAU,CAAC,IAAI,EAAE,CAAC,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,qBAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;IAC1D,CAAC;CACF;AAlDD,+BAkDC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"AAsEA,eAAO,MAAQ,QAAQ,SAnDU,GAAG,oBAmDX,cAAc;;QAA0B,CAAC"}
|
package/dist/swagger/index.js
CHANGED
|
@@ -15,10 +15,12 @@ var _a;
|
|
|
15
15
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
16
16
|
exports.getSwaggerData = exports.addPaths = void 0;
|
|
17
17
|
/* eslint-disable no-nested-ternary */
|
|
18
|
+
const core_1 = require("@asapjs/core");
|
|
18
19
|
const default_swagger_json_1 = __importDefault(require("../assets/default-swagger.json"));
|
|
19
|
-
const methods = [
|
|
20
|
+
const methods = ['get', 'post', 'put', 'delete'];
|
|
20
21
|
class DocsApplication {
|
|
21
22
|
constructor() {
|
|
23
|
+
this.config = null;
|
|
22
24
|
this.swaggerData = Object.assign({}, default_swagger_json_1.default);
|
|
23
25
|
this.swaggerPath = [];
|
|
24
26
|
this.generatedSwaggerData = null;
|
|
@@ -26,6 +28,15 @@ class DocsApplication {
|
|
|
26
28
|
this.swaggerPath.push(data);
|
|
27
29
|
});
|
|
28
30
|
this.generateSwaggerData = () => {
|
|
31
|
+
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k, _l, _m;
|
|
32
|
+
this.swaggerData.info.title = ((_b = (_a = this.config) === null || _a === void 0 ? void 0 : _a.swagger) === null || _b === void 0 ? void 0 : _b.name) || '';
|
|
33
|
+
this.swaggerData.info.version = ((_d = (_c = this.config) === null || _c === void 0 ? void 0 : _c.swagger) === null || _d === void 0 ? void 0 : _d.version) || '';
|
|
34
|
+
this.swaggerData.info.description = ((_f = (_e = this.config) === null || _e === void 0 ? void 0 : _e.swagger) === null || _f === void 0 ? void 0 : _f.description) || '';
|
|
35
|
+
this.swaggerData.servers = [
|
|
36
|
+
{
|
|
37
|
+
url: `${(_h = (_g = this.config) === null || _g === void 0 ? void 0 : _g.swagger) === null || _h === void 0 ? void 0 : _h.scheme}://${(_k = (_j = this.config) === null || _j === void 0 ? void 0 : _j.swagger) === null || _k === void 0 ? void 0 : _k.host}${((_l = this.config) === null || _l === void 0 ? void 0 : _l.basePath) ? `/${(_m = this.config) === null || _m === void 0 ? void 0 : _m.basePath}` : ''}`,
|
|
38
|
+
},
|
|
39
|
+
];
|
|
29
40
|
this.swaggerPath.sort((a, b) => {
|
|
30
41
|
var _a, _b, _c, _d;
|
|
31
42
|
const ix1 = methods.indexOf(a.method.toLowerCase());
|
|
@@ -58,6 +69,7 @@ class DocsApplication {
|
|
|
58
69
|
}
|
|
59
70
|
return this.generatedSwaggerData;
|
|
60
71
|
};
|
|
72
|
+
this.config = (0, core_1.getConfig)();
|
|
61
73
|
}
|
|
62
74
|
}
|
|
63
75
|
_a = new DocsApplication(), exports.addPaths = _a.addPaths, exports.getSwaggerData = _a.getSwaggerData;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,sCAAsC;AACtC,0FAA4D;AAE5D,MAAM,OAAO,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;AAEjD,MAAM,eAAe;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/swagger/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@asapjs/router",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"author": "",
|
|
11
11
|
"license": "ISC",
|
|
12
12
|
"dependencies": {
|
|
13
|
+
"@asapjs/core": "^0.0.9",
|
|
13
14
|
"body-parser": "^1.19.2",
|
|
14
15
|
"cors": "^2.8.5",
|
|
15
16
|
"express": "^4.17.3",
|
|
@@ -21,6 +22,7 @@
|
|
|
21
22
|
"winston": "^3.6.0"
|
|
22
23
|
},
|
|
23
24
|
"devDependencies": {
|
|
25
|
+
"@asapjs/sequelize": "^0.1.0",
|
|
24
26
|
"@types/body-parser": "^1.19.2",
|
|
25
27
|
"@types/cors": "^2.8.12",
|
|
26
28
|
"@types/express": "^4.17.13",
|
|
@@ -30,7 +32,7 @@
|
|
|
30
32
|
"typescript": "^4.6.2"
|
|
31
33
|
},
|
|
32
34
|
"peerDependencies": {
|
|
33
|
-
"@asapjs/core": "^0.0.
|
|
35
|
+
"@asapjs/core": "^0.0.9",
|
|
34
36
|
"@asapjs/sequelize": "^0.0.8"
|
|
35
37
|
}
|
|
36
38
|
}
|