@open-norantec/herbal 1.0.2-alpha.8 → 1.0.2-alpha.9
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/decorators/index.js
CHANGED
|
@@ -16,3 +16,4 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
|
16
16
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
17
|
__exportStar(require("./auth-adapter.decorator"), exports);
|
|
18
18
|
__exportStar(require("./client-groups.decorator"), exports);
|
|
19
|
+
__exportStar(require("./no-transaction.decorator"), exports);
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.NoTransaction = void 0;
|
|
4
|
+
require("reflect-metadata");
|
|
5
|
+
var _ = require("lodash");
|
|
6
|
+
var TRANSACTION_DISABLED = Symbol();
|
|
7
|
+
function NoTransaction() {
|
|
8
|
+
return function (target, propertyKey) {
|
|
9
|
+
Reflect.defineMetadata(TRANSACTION_DISABLED, true, target, propertyKey);
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
exports.NoTransaction = NoTransaction;
|
|
13
|
+
NoTransaction.isDisabled = function (target, propertyKey) {
|
|
14
|
+
var result = _.attempt(function () { return Reflect.getMetadata(TRANSACTION_DISABLED, target, propertyKey); });
|
|
15
|
+
return result === true;
|
|
16
|
+
};
|
|
@@ -86,6 +86,7 @@ var rxjs_1 = require("rxjs");
|
|
|
86
86
|
var operators_1 = require("rxjs/operators");
|
|
87
87
|
var logger_service_1 = require("../modules/logger/logger.service");
|
|
88
88
|
var sequelize_typescript_1 = require("sequelize-typescript");
|
|
89
|
+
var decorators_1 = require("../decorators");
|
|
89
90
|
var IS_CONTROLLER = Symbol();
|
|
90
91
|
function isHerbalController(target) {
|
|
91
92
|
return _.attempt(function () { return Reflect.getMetadata(IS_CONTROLLER, target.prototype); }) === true;
|
|
@@ -156,19 +157,13 @@ function HerbalGuard(options) {
|
|
|
156
157
|
var _a, e_1, _b, _c;
|
|
157
158
|
var _d, _e, _f, _g, _h, _j, _k;
|
|
158
159
|
return __awaiter(this, void 0, void 0, function () {
|
|
159
|
-
var sequelizeInstance, transaction, request, response, traceId, chunks, _l, request_1, request_1_1, chunk, e_1_1, _m, parsedBody, handlerName, authAdapters, _i, authAdapters_1, AuthAdapterClass, adapter, authenticateResult, error_1, _o;
|
|
160
|
+
var sequelizeInstance, transaction, request, response, traceId, chunks, _l, request_1, request_1_1, chunk, e_1_1, _m, parsedBody, rawHandlerName, handlerPropertype, handlerName, authAdapters, e_2, _i, authAdapters_1, AuthAdapterClass, adapter, authenticateResult, error_1, _o;
|
|
160
161
|
var _this = this;
|
|
161
162
|
return __generator(this, function (_p) {
|
|
162
163
|
switch (_p.label) {
|
|
163
164
|
case 0:
|
|
164
165
|
sequelizeInstance = _.attempt(function () { return _this.ref.get(sequelize_typescript_1.Sequelize, { strict: false }); });
|
|
165
166
|
transaction = undefined;
|
|
166
|
-
if (!!(sequelizeInstance instanceof Error)) return [3, 2];
|
|
167
|
-
return [4, ((_e = (_d = sequelizeInstance === null || sequelizeInstance === void 0 ? void 0 : sequelizeInstance.transaction) === null || _d === void 0 ? void 0 : _d.call(sequelizeInstance)) === null || _e === void 0 ? void 0 : _e.catch(function () { return Promise.resolve(undefined); }))];
|
|
168
|
-
case 1:
|
|
169
|
-
transaction = _p.sent();
|
|
170
|
-
_p.label = 2;
|
|
171
|
-
case 2:
|
|
172
167
|
request = context.switchToHttp().getRequest();
|
|
173
168
|
response = context.switchToHttp().getResponse();
|
|
174
169
|
traceId = typeof (options === null || options === void 0 ? void 0 : options.getTraceId) === 'function'
|
|
@@ -178,50 +173,49 @@ function HerbalGuard(options) {
|
|
|
178
173
|
traceId = uuid_util_class_1.UUIDUtil.generateV4();
|
|
179
174
|
request.traceId = traceId;
|
|
180
175
|
request.methodName = request.url.split('/').pop();
|
|
181
|
-
request.transaction = transaction;
|
|
182
176
|
response.setHeader(headers_constant_1.HEADERS.TRACE_ID, traceId);
|
|
183
177
|
chunks = [];
|
|
178
|
+
_p.label = 1;
|
|
179
|
+
case 1:
|
|
180
|
+
_p.trys.push([1, 14, , 15]);
|
|
181
|
+
_p.label = 2;
|
|
182
|
+
case 2:
|
|
183
|
+
_p.trys.push([2, 7, 8, 13]);
|
|
184
|
+
_l = true, request_1 = __asyncValues(request);
|
|
184
185
|
_p.label = 3;
|
|
185
|
-
case 3:
|
|
186
|
-
_p.trys.push([3, 16, , 17]);
|
|
187
|
-
_p.label = 4;
|
|
186
|
+
case 3: return [4, request_1.next()];
|
|
188
187
|
case 4:
|
|
189
|
-
_p.
|
|
190
|
-
_l = true, request_1 = __asyncValues(request);
|
|
191
|
-
_p.label = 5;
|
|
192
|
-
case 5: return [4, request_1.next()];
|
|
193
|
-
case 6:
|
|
194
|
-
if (!(request_1_1 = _p.sent(), _a = request_1_1.done, !_a)) return [3, 8];
|
|
188
|
+
if (!(request_1_1 = _p.sent(), _a = request_1_1.done, !_a)) return [3, 6];
|
|
195
189
|
_c = request_1_1.value;
|
|
196
190
|
_l = false;
|
|
197
191
|
chunk = _c;
|
|
198
192
|
chunks.push(chunk);
|
|
199
|
-
_p.label =
|
|
200
|
-
case
|
|
193
|
+
_p.label = 5;
|
|
194
|
+
case 5:
|
|
201
195
|
_l = true;
|
|
202
|
-
return [3,
|
|
203
|
-
case
|
|
204
|
-
case
|
|
196
|
+
return [3, 3];
|
|
197
|
+
case 6: return [3, 13];
|
|
198
|
+
case 7:
|
|
205
199
|
e_1_1 = _p.sent();
|
|
206
200
|
e_1 = { error: e_1_1 };
|
|
207
|
-
return [3,
|
|
208
|
-
case
|
|
209
|
-
_p.trys.push([
|
|
210
|
-
if (!(!_l && !_a && (_b = request_1.return))) return [3,
|
|
201
|
+
return [3, 13];
|
|
202
|
+
case 8:
|
|
203
|
+
_p.trys.push([8, , 11, 12]);
|
|
204
|
+
if (!(!_l && !_a && (_b = request_1.return))) return [3, 10];
|
|
211
205
|
return [4, _b.call(request_1)];
|
|
212
|
-
case
|
|
206
|
+
case 9:
|
|
213
207
|
_p.sent();
|
|
214
|
-
_p.label =
|
|
215
|
-
case
|
|
216
|
-
case
|
|
208
|
+
_p.label = 10;
|
|
209
|
+
case 10: return [3, 12];
|
|
210
|
+
case 11:
|
|
217
211
|
if (e_1) throw e_1.error;
|
|
218
212
|
return [7];
|
|
219
|
-
case
|
|
220
|
-
case
|
|
221
|
-
case
|
|
213
|
+
case 12: return [7];
|
|
214
|
+
case 13: return [3, 15];
|
|
215
|
+
case 14:
|
|
222
216
|
_m = _p.sent();
|
|
223
|
-
return [3,
|
|
224
|
-
case
|
|
217
|
+
return [3, 15];
|
|
218
|
+
case 15:
|
|
225
219
|
parsedBody = _.attempt(function () { return Buffer.concat(chunks).toString('utf8'); });
|
|
226
220
|
if (!(parsedBody instanceof Error)) {
|
|
227
221
|
request.rawBody = parsedBody;
|
|
@@ -230,47 +224,68 @@ function HerbalGuard(options) {
|
|
|
230
224
|
request.rawBody = null;
|
|
231
225
|
}
|
|
232
226
|
_.attempt(function () { return _this.getLogger().log("[trace:".concat(request === null || request === void 0 ? void 0 : request.traceId, ":request:body] ").concat(request.rawBody)); });
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
227
|
+
rawHandlerName = (_e = (_d = context === null || context === void 0 ? void 0 : context.getHandler) === null || _d === void 0 ? void 0 : _d.call(context)) === null || _e === void 0 ? void 0 : _e.name;
|
|
228
|
+
handlerPropertype = (_g = (_f = context === null || context === void 0 ? void 0 : context.getClass) === null || _f === void 0 ? void 0 : _f.call(context)) === null || _g === void 0 ? void 0 : _g.prototype;
|
|
229
|
+
handlerName = string_util_class_1.StringUtil.isFalsyString(rawHandlerName) ? request.methodName : rawHandlerName;
|
|
230
|
+
authAdapters = auth_adapter_decorator_1.AuthAdapters.getAdapters(handlerPropertype, handlerName);
|
|
231
|
+
if (!(!(sequelizeInstance instanceof Error) && !decorators_1.NoTransaction.isDisabled(handlerPropertype, handlerName))) return [3, 20];
|
|
232
|
+
_p.label = 16;
|
|
233
|
+
case 16:
|
|
234
|
+
_p.trys.push([16, 18, , 19]);
|
|
235
|
+
return [4, ((_j = (_h = sequelizeInstance === null || sequelizeInstance === void 0 ? void 0 : sequelizeInstance.transaction) === null || _h === void 0 ? void 0 : _h.call(sequelizeInstance)) === null || _j === void 0 ? void 0 : _j.catch(function () { return Promise.resolve(undefined); }))];
|
|
236
|
+
case 17:
|
|
237
|
+
transaction = _p.sent();
|
|
238
|
+
request.transaction = transaction;
|
|
239
|
+
this.getLogger().log("[trace:".concat(request === null || request === void 0 ? void 0 : request.traceId, ":transaction] Started transaction for route: ").concat(handlerName));
|
|
240
|
+
return [3, 19];
|
|
236
241
|
case 18:
|
|
237
|
-
_p.
|
|
238
|
-
|
|
242
|
+
e_2 = _p.sent();
|
|
243
|
+
this.getLogger().error("[trace:".concat(request === null || request === void 0 ? void 0 : request.traceId, ":transaction] Failed to start transaction: ").concat(e_2 === null || e_2 === void 0 ? void 0 : e_2.message, "\n").concat(e_2 === null || e_2 === void 0 ? void 0 : e_2.stack));
|
|
244
|
+
return [3, 19];
|
|
245
|
+
case 19: return [3, 21];
|
|
246
|
+
case 20:
|
|
247
|
+
if (decorators_1.NoTransaction.isDisabled(handlerPropertype, handlerName)) {
|
|
248
|
+
this.getLogger().log("[trace:".concat(request === null || request === void 0 ? void 0 : request.traceId, ":transaction] Transaction is disabled for this route: ").concat(handlerName));
|
|
249
|
+
}
|
|
250
|
+
_p.label = 21;
|
|
251
|
+
case 21:
|
|
252
|
+
_p.trys.push([21, 27, , 32]);
|
|
253
|
+
if (!(Array.isArray(authAdapters) && authAdapters.length > 0)) return [3, 26];
|
|
239
254
|
_i = 0, authAdapters_1 = authAdapters;
|
|
240
|
-
_p.label =
|
|
241
|
-
case
|
|
242
|
-
if (!(_i < authAdapters_1.length)) return [3,
|
|
255
|
+
_p.label = 22;
|
|
256
|
+
case 22:
|
|
257
|
+
if (!(_i < authAdapters_1.length)) return [3, 25];
|
|
243
258
|
AuthAdapterClass = authAdapters_1[_i];
|
|
244
259
|
adapter = new AuthAdapterClass(request, this.ref);
|
|
245
260
|
if (!adapter.match())
|
|
246
|
-
return [3,
|
|
261
|
+
return [3, 24];
|
|
247
262
|
return [4, adapter.authenticate(transaction)];
|
|
248
|
-
case
|
|
263
|
+
case 23:
|
|
249
264
|
authenticateResult = _p.sent();
|
|
250
265
|
if (!authenticateResult)
|
|
251
|
-
return [3,
|
|
266
|
+
return [3, 25];
|
|
252
267
|
request.authenticateResult = __assign({ AuthenticatorClass: AuthAdapterClass }, authenticateResult);
|
|
253
268
|
return [2, true];
|
|
254
|
-
case 21:
|
|
255
|
-
_i++;
|
|
256
|
-
return [3, 19];
|
|
257
|
-
case 22: throw new common_2.UnauthorizedException();
|
|
258
|
-
case 23: return [3, 29];
|
|
259
269
|
case 24:
|
|
270
|
+
_i++;
|
|
271
|
+
return [3, 22];
|
|
272
|
+
case 25: throw new common_2.UnauthorizedException();
|
|
273
|
+
case 26: return [3, 32];
|
|
274
|
+
case 27:
|
|
260
275
|
error_1 = _p.sent();
|
|
261
|
-
_p.label =
|
|
262
|
-
case
|
|
263
|
-
_p.trys.push([
|
|
276
|
+
_p.label = 28;
|
|
277
|
+
case 28:
|
|
278
|
+
_p.trys.push([28, 30, , 31]);
|
|
264
279
|
this.getLogger().error("Got error when handling route: ".concat(error_1 === null || error_1 === void 0 ? void 0 : error_1.message, " ").concat(error_1 === null || error_1 === void 0 ? void 0 : error_1.stack));
|
|
265
280
|
return [4, ((_k = transaction === null || transaction === void 0 ? void 0 : transaction.rollback) === null || _k === void 0 ? void 0 : _k.call(transaction))];
|
|
266
|
-
case
|
|
281
|
+
case 29:
|
|
267
282
|
_p.sent();
|
|
268
|
-
return [3,
|
|
269
|
-
case
|
|
283
|
+
return [3, 31];
|
|
284
|
+
case 30:
|
|
270
285
|
_o = _p.sent();
|
|
271
|
-
return [3,
|
|
272
|
-
case
|
|
273
|
-
case
|
|
286
|
+
return [3, 31];
|
|
287
|
+
case 31: throw error_1;
|
|
288
|
+
case 32: return [2, true];
|
|
274
289
|
}
|
|
275
290
|
});
|
|
276
291
|
});
|