eservices-back-core 1.2.41 → 1.2.43
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/errors/api-error.d.ts +1 -0
- package/dist/errors/api-error.d.ts.map +1 -1
- package/dist/errors/api-error.js +3 -0
- package/dist/errors/api-error.js.map +1 -1
- package/dist/middleware/refresh-middleware.d.ts +4 -0
- package/dist/middleware/refresh-middleware.d.ts.map +1 -0
- package/dist/middleware/refresh-middleware.js +32 -0
- package/dist/middleware/refresh-middleware.js.map +1 -0
- package/dist/middleware/user-middleware.d.ts.map +1 -1
- package/dist/middleware/user-middleware.js +1 -9
- package/dist/middleware/user-middleware.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js +2 -0
- package/dist/router/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -8,6 +8,7 @@ export default class ApiError extends Error {
|
|
|
8
8
|
static AppServerError(details?: any): ApiError;
|
|
9
9
|
static AppServerInvalidResponse(): ApiError;
|
|
10
10
|
static BadRequest(message?: string): ApiError;
|
|
11
|
+
static InvalidAccess(message?: string): ApiError;
|
|
11
12
|
static UsageContextNotFounded(url: string): ApiError;
|
|
12
13
|
static UndefinedId(): ApiError;
|
|
13
14
|
static: any;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-error.d.ts","sourceRoot":"","sources":["../../src/errors/api-error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK;IAGV,MAAM,EAAE,MAAM;IAD9C,OAAO,EAAE,GAAG,CAAA;gBACA,GAAG,EAAE,MAAM,EAAS,MAAM,GAAE,MAAY,EAAE,OAAO,CAAC,EAAE,GAAG;IAInE,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAG3C,MAAM,CAAC,aAAa;IAGpB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG;IAGzB,MAAM,CAAC,cAAc,CAAC,OAAO,GAAE,GAAQ;IAIvC,MAAM,CAAC,wBAAwB;IAG/B,MAAM,CAAC,UAAU,CAAC,OAAO,GAAE,MAAsB;
|
|
1
|
+
{"version":3,"file":"api-error.d.ts","sourceRoot":"","sources":["../../src/errors/api-error.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,KAAK;IAGV,MAAM,EAAE,MAAM;IAD9C,OAAO,EAAE,GAAG,CAAA;gBACA,GAAG,EAAE,MAAM,EAAS,MAAM,GAAE,MAAY,EAAE,OAAO,CAAC,EAAE,GAAG;IAInE,MAAM,CAAC,kBAAkB,CAAC,QAAQ,CAAC,EAAE,MAAM;IAG3C,MAAM,CAAC,aAAa;IAGpB,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG;IAGzB,MAAM,CAAC,cAAc,CAAC,OAAO,GAAE,GAAQ;IAIvC,MAAM,CAAC,wBAAwB;IAG/B,MAAM,CAAC,UAAU,CAAC,OAAO,GAAE,MAAsB;IAGjD,MAAM,CAAC,aAAa,CAAC,OAAO,GAAE,MAA0G;IAGxI,MAAM,CAAC,sBAAsB,CAAC,GAAG,EAAE,MAAM;IAGzC,MAAM,CAAC,WAAW;IAGlB,MAAM,MAAA;CACN"}
|
package/dist/errors/api-error.js
CHANGED
|
@@ -25,6 +25,9 @@ class ApiError extends Error {
|
|
|
25
25
|
static BadRequest(message = 'Bad Request') {
|
|
26
26
|
return new ApiError(message, 400);
|
|
27
27
|
}
|
|
28
|
+
static InvalidAccess(message = 'It looks like we have some problems with authentication, you may try to refresh page or relogin') {
|
|
29
|
+
return new ApiError(message, 401);
|
|
30
|
+
}
|
|
28
31
|
static UsageContextNotFounded(url) {
|
|
29
32
|
return new ApiError(`Metadata can't be founded for url(${url}).`, 500);
|
|
30
33
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api-error.js","sourceRoot":"","sources":["../../src/errors/api-error.ts"],"names":[],"mappings":";;AAAA,MAAqB,QAAS,SAAQ,KAAK;IAG1C,YAAY,GAAW,EAAS,SAAiB,GAAG,EAAE,OAAa;QAClE,KAAK,CAAC,GAAG,CAAC,CAAC;QADoB,WAAM,GAAN,MAAM,CAAc;QAEnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IACD,MAAM,CAAC,kBAAkB,CAAC,QAAiB;QAC1C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,GAAG,QAAQ,CAAA,CAAC,CAAC,OAAO,QAAQ,GAAG,CAAA,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,aAAa;QACnB,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,IAAS;QACxB,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,UAAe,EAAE;QACtC,OAAO,IAAI,QAAQ,CAAC;4EACsD,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,CAAC,wBAAwB;QAC9B,OAAO,IAAI,QAAQ,CAAC,wDAAwD,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,UAAkB,aAAa;QAChD,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;
|
|
1
|
+
{"version":3,"file":"api-error.js","sourceRoot":"","sources":["../../src/errors/api-error.ts"],"names":[],"mappings":";;AAAA,MAAqB,QAAS,SAAQ,KAAK;IAG1C,YAAY,GAAW,EAAS,SAAiB,GAAG,EAAE,OAAa;QAClE,KAAK,CAAC,GAAG,CAAC,CAAC;QADoB,WAAM,GAAN,MAAM,CAAc;QAEnD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,CAAC;IACD,MAAM,CAAC,kBAAkB,CAAC,QAAiB;QAC1C,OAAO,IAAI,QAAQ,CAAC,qBAAqB,GAAG,QAAQ,CAAA,CAAC,CAAC,OAAO,QAAQ,GAAG,CAAA,CAAC,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,aAAa;QACnB,OAAO,IAAI,KAAK,CAAC,eAAe,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,QAAQ,CAAC,IAAS;QACxB,OAAO,IAAI,QAAQ,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,CAAC,cAAc,CAAC,UAAe,EAAE;QACtC,OAAO,IAAI,QAAQ,CAAC;4EACsD,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;IAC3F,CAAC;IACD,MAAM,CAAC,wBAAwB;QAC9B,OAAO,IAAI,QAAQ,CAAC,wDAAwD,EAAE,GAAG,CAAC,CAAC;IACpF,CAAC;IACD,MAAM,CAAC,UAAU,CAAC,UAAkB,aAAa;QAChD,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,aAAa,CAAC,UAAkB,iGAAiG;QACvI,OAAO,IAAI,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,sBAAsB,CAAC,GAAW;QACxC,OAAO,IAAI,QAAQ,CAAC,qCAAqC,GAAG,IAAI,EAAE,GAAG,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,CAAC,WAAW;QACjB,OAAO,IAAI,QAAQ,CAAC,kCAAkC,CAAC,CAAA;IACxD,CAAC;CAED;AApCD,2BAoCC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/refresh-middleware.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAC,MAAM,SAAS,CAAC;oCAIpC,OAAO,OAAO,QAAQ,QAAQ,YAAY;AAF9D,wBAgBC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
const api_error_1 = __importDefault(require("../errors/api-error"));
|
|
16
|
+
exports.default = () => {
|
|
17
|
+
return (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
18
|
+
try {
|
|
19
|
+
// Updating access token
|
|
20
|
+
const accessToken = req.oidc.accessToken;
|
|
21
|
+
if (accessToken.isExpired()) {
|
|
22
|
+
const promiseRefresh = accessToken.refresh();
|
|
23
|
+
yield promiseRefresh;
|
|
24
|
+
}
|
|
25
|
+
next();
|
|
26
|
+
}
|
|
27
|
+
catch (e) {
|
|
28
|
+
next(api_error_1.default.InvalidAccess());
|
|
29
|
+
}
|
|
30
|
+
});
|
|
31
|
+
};
|
|
32
|
+
//# sourceMappingURL=refresh-middleware.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"refresh-middleware.js","sourceRoot":"","sources":["../../src/middleware/refresh-middleware.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AACA,oEAA2C;AAC3C,kBAAe,GAAG,EAAE;IAEnB,OAAO,CAAO,GAAY,EAAE,GAAa,EAAE,IAAkB,EAAE,EAAE;QAChE,IAAI;YACH,wBAAwB;YACxB,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;YACzC,IAAI,WAAW,CAAC,SAAS,EAAE,EAAE;gBAC5B,MAAM,cAAc,GAAG,WAAW,CAAC,OAAO,EAAE,CAAA;gBAC5C,MAAM,cAAc,CAAC;aACrB;YAED,IAAI,EAAE,CAAA;SACN;QAAC,OAAO,CAAC,EAAE;YACX,IAAI,CAAC,mBAAQ,CAAC,aAAa,EAAE,CAAC,CAAC;SAC/B;IACF,CAAC,CAAA,CAAA;AACF,CAAC,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/user-middleware.ts"],"names":[],"mappings":";AAEA,
|
|
1
|
+
{"version":3,"file":"user-middleware.d.ts","sourceRoot":"","sources":["../../src/middleware/user-middleware.ts"],"names":[],"mappings":";AAEA,wBA2BC"}
|
|
@@ -13,15 +13,7 @@ const winston_1 = require("winston");
|
|
|
13
13
|
exports.default = (req, res, next) => __awaiter(void 0, void 0, void 0, function* () {
|
|
14
14
|
try {
|
|
15
15
|
const tokenLogger = winston_1.loggers.get("tokens");
|
|
16
|
-
const
|
|
17
|
-
let accessToken = req.oidc.accessToken;
|
|
18
|
-
if (accessToken.isExpired()) {
|
|
19
|
-
accessToken = yield accessToken.refresh()
|
|
20
|
-
.catch(err => {
|
|
21
|
-
errorLogger.error(err);
|
|
22
|
-
throw err;
|
|
23
|
-
});
|
|
24
|
-
}
|
|
16
|
+
const accessToken = req.oidc.accessToken;
|
|
25
17
|
req.__token = `${accessToken.token_type} ${accessToken.access_token}`;
|
|
26
18
|
req.userInfo = yield req.oidc.fetchUserInfo();
|
|
27
19
|
req.session.user = req.userInfo;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-middleware.js","sourceRoot":"","sources":["../../src/middleware/user-middleware.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,qCAAgC;AAEhC,kBAAe,CAAO,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAEvC,IAAI;
|
|
1
|
+
{"version":3,"file":"user-middleware.js","sourceRoot":"","sources":["../../src/middleware/user-middleware.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,qCAAgC;AAEhC,kBAAe,CAAO,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IAEvC,IAAI;QACH,MAAM,WAAW,GAAG,iBAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,GAAG,CAAC,IAAI,CAAC,WAAW,CAAC;QAEzC,GAAG,CAAC,OAAO,GAAG,GAAG,WAAW,CAAC,UAAU,IAAI,WAAW,CAAC,YAAY,EAAE,CAAC;QACtE,GAAG,CAAC,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;QAI9C,GAAG,CAAC,OAAO,CAAC,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;QAChC,aAAa;QACb,GAAG,CAAC,OAAO,CAAC,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC;QACtC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;QAC9D,GAAG,CAAC,OAAO,CAAC,QAAQ,GAAE,GAAG,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;QAEjE,WAAW,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE;YAC7B,IAAI,EAAE,GAAG,CAAC,OAAO,CAAC,IAAI;SACtB,CAAC,CAAC;QAEH,IAAI,EAAE,CAAC;KACP;IAAC,OAAO,CAAC,EAAE;QAEX,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;QAC1B,IAAI,CAAC,CAAC,CAAC,CAAC;KACR;AACF,CAAC,CAAA,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"AAuBA,MAAM,CAAC,OAAO,UAAU,SAAS,SAmEhC"}
|
package/dist/router/index.js
CHANGED
|
@@ -27,6 +27,7 @@ const cookie_parser_1 = __importDefault(require("cookie-parser"));
|
|
|
27
27
|
const Server_1 = __importDefault(require("../Server"));
|
|
28
28
|
const api_error_1 = __importDefault(require("../errors/api-error"));
|
|
29
29
|
const open_api_router_1 = __importDefault(require("./open/open-api-router"));
|
|
30
|
+
const refresh_middleware_1 = __importDefault(require("../middleware/refresh-middleware"));
|
|
30
31
|
function useRouter() {
|
|
31
32
|
const server = Server_1.default.getServer();
|
|
32
33
|
const app = server.app;
|
|
@@ -52,6 +53,7 @@ function useRouter() {
|
|
|
52
53
|
app.use("/open-api", open_api_router_1.default);
|
|
53
54
|
// Protect level
|
|
54
55
|
app.use((0, auth_middleware_1.default)());
|
|
56
|
+
app.use((0, refresh_middleware_1.default)());
|
|
55
57
|
app.use(user_middleware_1.default);
|
|
56
58
|
app.use("/close-api", (0, close_1.default)());
|
|
57
59
|
app.get("/main*", (req, res) => __awaiter(this, void 0, void 0, function* () {
|
package/dist/router/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;AAAA,8DAAsC;AACtC,sDAA+B;AAC/B,gDAA0B;AAE1B,oDAAkC;AAClC,kFAAwD;AAExD,oFAA4D;AAC5D,wFAA+D;AAC/D,oFAA2D;AAC3D,sFAA6D;AAC7D,0FAAiE;AACjE,gDAAwB;AACxB,kEAAyC;AAGzC,uDAA+B;AAE/B,oEAA2C;AAC3C,6EAAmD;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/router/index.ts"],"names":[],"mappings":"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"}
|