@storyous/errors 1.0.7 → 1.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/errorHandler.js +40 -6
- package/lib/errorHandler.ts +56 -6
- package/package.json +3 -3
- package/lib/appError.d.ts +0 -15
- package/lib/appError.js +0 -85
- package/lib/errorHandler.d.ts +0 -3
- package/lib/errorHandler.js +0 -71
- package/lib/index.d.ts +0 -3
- package/lib/index.js +0 -11
package/dist/errorHandler.js
CHANGED
|
@@ -5,6 +5,25 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
const lodash_1 = require("lodash");
|
|
7
7
|
const appError_1 = __importDefault(require("./appError"));
|
|
8
|
+
/**
|
|
9
|
+
* recursively mask the 'Authorization' field in the meta object
|
|
10
|
+
*/
|
|
11
|
+
const maskAuthorizationField = (obj) => {
|
|
12
|
+
try {
|
|
13
|
+
// Stringify the object
|
|
14
|
+
const jsonString = JSON.stringify(obj);
|
|
15
|
+
const maskedString = jsonString
|
|
16
|
+
.replaceAll(/("Authorization":\s?")[^"]*(")/g, '$1***$2')
|
|
17
|
+
.replaceAll(/(\\"Authorization\\":\s?\\"(?:Bearer\s?)?)[^"]*(\\")/ig, '$1***$2');
|
|
18
|
+
// Parse back into the object
|
|
19
|
+
return JSON.parse(maskedString);
|
|
20
|
+
}
|
|
21
|
+
catch (error) {
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
23
|
+
console.error('Error stringifying or parsing object:', error);
|
|
24
|
+
return obj; // Fallback to original object in case of error
|
|
25
|
+
}
|
|
26
|
+
};
|
|
8
27
|
const initErrHandler = (log) => async function (ctx, next) {
|
|
9
28
|
try {
|
|
10
29
|
await next();
|
|
@@ -50,14 +69,29 @@ const initErrHandler = (log) => async function (ctx, next) {
|
|
|
50
69
|
metaData.meta = err.meta;
|
|
51
70
|
}
|
|
52
71
|
err.setMeta(metaData);
|
|
53
|
-
|
|
54
|
-
|
|
72
|
+
const maskBearerToken = (error) => {
|
|
73
|
+
try {
|
|
74
|
+
const clonedError = (0, lodash_1.cloneDeep)(error);
|
|
75
|
+
if (clonedError.meta) {
|
|
76
|
+
// Recursively mask authorization fields within meta
|
|
77
|
+
clonedError.meta = maskAuthorizationField(clonedError.meta);
|
|
78
|
+
}
|
|
79
|
+
return clonedError;
|
|
80
|
+
}
|
|
81
|
+
catch (parseError) {
|
|
82
|
+
// eslint-disable-next-line no-console
|
|
83
|
+
log.warn('Failed to sanitize authorization fields', parseError);
|
|
84
|
+
return error;
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
if ([404, 401, 429].includes(err.httpStatus)) {
|
|
88
|
+
log.warn(maskBearerToken(err));
|
|
55
89
|
}
|
|
56
|
-
else if (
|
|
57
|
-
log.error(err);
|
|
90
|
+
else if ([500, 408].includes(err.httpStatus)) {
|
|
91
|
+
log.error(maskBearerToken(err));
|
|
58
92
|
}
|
|
59
93
|
else {
|
|
60
|
-
log.info(err);
|
|
94
|
+
log.info(maskBearerToken(err));
|
|
61
95
|
}
|
|
62
96
|
ctx.body = {
|
|
63
97
|
code: err.code,
|
|
@@ -68,4 +102,4 @@ const initErrHandler = (log) => async function (ctx, next) {
|
|
|
68
102
|
}
|
|
69
103
|
};
|
|
70
104
|
exports.default = initErrHandler;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
105
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vbGliL2Vycm9ySGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1DQUVnQjtBQUVoQiwwREFBa0M7QUFFbEM7O0lBRUk7QUFDSixNQUFNLHNCQUFzQixHQUFHLENBQUMsR0FBUSxFQUFFLEVBQUU7SUFDeEMsSUFBSTtRQUNBLHVCQUF1QjtRQUN2QixNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRXZDLE1BQU0sWUFBWSxHQUFHLFVBQVU7YUFDMUIsVUFBVSxDQUFDLGlDQUFpQyxFQUFFLFNBQVMsQ0FBQzthQUN4RCxVQUFVLENBQUMsd0RBQXdELEVBQUUsU0FBUyxDQUFDLENBQUM7UUFFckYsNkJBQTZCO1FBQzdCLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQztLQUNuQztJQUFDLE9BQU8sS0FBSyxFQUFFO1FBQ1osc0NBQXNDO1FBQ3RDLE9BQU8sQ0FBQyxLQUFLLENBQUMsdUNBQXVDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDOUQsT0FBTyxHQUFHLENBQUMsQ0FBQywrQ0FBK0M7S0FDOUQ7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxXQUFXLEdBQVEsRUFBRSxJQUFjO0lBQzVFLElBQUk7UUFDQSxNQUFNLElBQUksRUFBRSxDQUFDO0tBQ2hCO0lBQUMsT0FBTyxhQUFpQixFQUFFO1FBRXhCLElBQUksR0FBRyxHQUFRLGFBQWEsQ0FBQztRQUU3QixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksa0JBQVEsQ0FBQyxFQUFFO1lBRTVCLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRTtnQkFDdEIsYUFBYTtnQkFDYixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztnQkFDdEMs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
|
package/lib/errorHandler.ts
CHANGED
|
@@ -1,7 +1,30 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
cloneDeep, isEmpty, pick,
|
|
3
|
+
} from 'lodash';
|
|
2
4
|
import { Logger } from 'winston';
|
|
3
5
|
import AppError from './appError';
|
|
4
6
|
|
|
7
|
+
/**
|
|
8
|
+
* recursively mask the 'Authorization' field in the meta object
|
|
9
|
+
*/
|
|
10
|
+
const maskAuthorizationField = (obj: any) => {
|
|
11
|
+
try {
|
|
12
|
+
// Stringify the object
|
|
13
|
+
const jsonString = JSON.stringify(obj);
|
|
14
|
+
|
|
15
|
+
const maskedString = jsonString
|
|
16
|
+
.replaceAll(/("Authorization":\s?")[^"]*(")/g, '$1***$2')
|
|
17
|
+
.replaceAll(/(\\"Authorization\\":\s?\\"(?:Bearer\s?)?)[^"]*(\\")/ig, '$1***$2');
|
|
18
|
+
|
|
19
|
+
// Parse back into the object
|
|
20
|
+
return JSON.parse(maskedString);
|
|
21
|
+
} catch (error) {
|
|
22
|
+
// eslint-disable-next-line no-console
|
|
23
|
+
console.error('Error stringifying or parsing object:', error);
|
|
24
|
+
return obj; // Fallback to original object in case of error
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
5
28
|
const initErrHandler = (log: Logger) => async function (ctx: any, next: Function) {
|
|
6
29
|
try {
|
|
7
30
|
await next();
|
|
@@ -59,14 +82,41 @@ const initErrHandler = (log: Logger) => async function (ctx: any, next: Function
|
|
|
59
82
|
|
|
60
83
|
err.setMeta(metaData);
|
|
61
84
|
|
|
62
|
-
|
|
63
|
-
|
|
85
|
+
interface ErrorMeta {
|
|
86
|
+
request?: {
|
|
87
|
+
body?: any;
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
interface ErrorObject extends AppError {
|
|
92
|
+
meta?: ErrorMeta;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
const maskBearerToken = (error: ErrorObject): ErrorObject => {
|
|
96
|
+
try {
|
|
97
|
+
const clonedError: ErrorObject = cloneDeep(error);
|
|
98
|
+
|
|
99
|
+
if (clonedError.meta) {
|
|
100
|
+
// Recursively mask authorization fields within meta
|
|
101
|
+
clonedError.meta = maskAuthorizationField(clonedError.meta);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
return clonedError;
|
|
105
|
+
} catch (parseError) {
|
|
106
|
+
// eslint-disable-next-line no-console
|
|
107
|
+
log.warn('Failed to sanitize authorization fields', parseError);
|
|
108
|
+
return error;
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
|
|
112
|
+
if ([404, 401, 429].includes(err.httpStatus)) {
|
|
113
|
+
log.warn(maskBearerToken(err));
|
|
64
114
|
|
|
65
|
-
} else if (
|
|
66
|
-
log.error(err);
|
|
115
|
+
} else if ([500, 408].includes(err.httpStatus)) {
|
|
116
|
+
log.error(maskBearerToken(err));
|
|
67
117
|
|
|
68
118
|
} else {
|
|
69
|
-
log.info(err);
|
|
119
|
+
log.info(maskBearerToken(err));
|
|
70
120
|
}
|
|
71
121
|
|
|
72
122
|
ctx.body = {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@storyous/errors",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.8",
|
|
4
4
|
"description": "",
|
|
5
5
|
"homepage": "https://github.com/Storyous/mono-utils#readme",
|
|
6
6
|
"license": "ISC",
|
|
@@ -39,7 +39,7 @@
|
|
|
39
39
|
"winston": "^3.7.2"
|
|
40
40
|
},
|
|
41
41
|
"devDependencies": {
|
|
42
|
-
"@storyous/test-utils": "^2.0.
|
|
42
|
+
"@storyous/test-utils": "^2.0.1"
|
|
43
43
|
},
|
|
44
|
-
"gitHead": "
|
|
44
|
+
"gitHead": "be4c1cf7f6ec0a60ef04fe16cc4f75abc6644a2c"
|
|
45
45
|
}
|
package/lib/appError.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
export default class AppError extends Error {
|
|
2
|
-
code?: number;
|
|
3
|
-
httpStatus: number | string;
|
|
4
|
-
meta?: Record<string, any>;
|
|
5
|
-
redirect?: string;
|
|
6
|
-
constructor(message: string, meta?: any);
|
|
7
|
-
setMeta(meta: Record<string, any>): AppError;
|
|
8
|
-
static purifyStack(error: AppError): AppError;
|
|
9
|
-
static notFound(message?: string, meta?: Record<string, any>): AppError;
|
|
10
|
-
static badRequest(message?: string, meta?: Record<string, any>): AppError;
|
|
11
|
-
static concurrentRequest(message?: string, meta?: Record<string, any>): AppError;
|
|
12
|
-
static internal(message?: string, meta?: Record<string, any>): AppError;
|
|
13
|
-
static unauthorized(message?: string, meta?: Record<string, any>): AppError;
|
|
14
|
-
static isConcurrentRequestError(err: Error): boolean;
|
|
15
|
-
}
|
package/lib/appError.js
DELETED
|
@@ -1,85 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
class AppError extends Error {
|
|
4
|
-
constructor(message, meta) {
|
|
5
|
-
super();
|
|
6
|
-
this.message = message;
|
|
7
|
-
this.code = (meta && meta.code) || null;
|
|
8
|
-
this.httpStatus = (meta && meta.httpStatus) || 500;
|
|
9
|
-
this.meta = meta || undefined;
|
|
10
|
-
this.redirect = undefined;
|
|
11
|
-
}
|
|
12
|
-
setMeta(meta) {
|
|
13
|
-
this.meta = meta;
|
|
14
|
-
return this;
|
|
15
|
-
}
|
|
16
|
-
static purifyStack(error) {
|
|
17
|
-
error.stack = error?.stack?.split('\n').filter((line, index) => index !== 1).join('\n');
|
|
18
|
-
return error;
|
|
19
|
-
}
|
|
20
|
-
static notFound(message, meta) {
|
|
21
|
-
let allMessage = 'Not found';
|
|
22
|
-
if (message) {
|
|
23
|
-
allMessage += `: ${message}`;
|
|
24
|
-
}
|
|
25
|
-
const error = new AppError(allMessage, ({
|
|
26
|
-
code: 404,
|
|
27
|
-
httpStatus: 404,
|
|
28
|
-
...meta,
|
|
29
|
-
}));
|
|
30
|
-
return AppError.purifyStack(error);
|
|
31
|
-
}
|
|
32
|
-
static badRequest(message, meta) {
|
|
33
|
-
let allMessage = 'Bad request';
|
|
34
|
-
if (message) {
|
|
35
|
-
allMessage += `: ${message}`;
|
|
36
|
-
}
|
|
37
|
-
const error = new AppError(allMessage, ({
|
|
38
|
-
code: 400,
|
|
39
|
-
httpStatus: 400,
|
|
40
|
-
...meta,
|
|
41
|
-
}));
|
|
42
|
-
return AppError.purifyStack(error);
|
|
43
|
-
}
|
|
44
|
-
static concurrentRequest(message, meta) {
|
|
45
|
-
let allMessage = 'Concurrent request';
|
|
46
|
-
if (message) {
|
|
47
|
-
allMessage += `: ${message}`;
|
|
48
|
-
}
|
|
49
|
-
const error = new AppError(allMessage, ({
|
|
50
|
-
code: 409,
|
|
51
|
-
httpStatus: 409,
|
|
52
|
-
...meta,
|
|
53
|
-
}));
|
|
54
|
-
return AppError.purifyStack(error);
|
|
55
|
-
}
|
|
56
|
-
static internal(message, meta) {
|
|
57
|
-
let allMessage = 'Internal';
|
|
58
|
-
if (message) {
|
|
59
|
-
allMessage += `: ${message}`;
|
|
60
|
-
}
|
|
61
|
-
const error = new AppError(allMessage, ({
|
|
62
|
-
code: 500,
|
|
63
|
-
httpStatus: 500,
|
|
64
|
-
...meta,
|
|
65
|
-
}));
|
|
66
|
-
return AppError.purifyStack(error);
|
|
67
|
-
}
|
|
68
|
-
static unauthorized(message, meta) {
|
|
69
|
-
let allMessage = 'Unauthorized';
|
|
70
|
-
if (message) {
|
|
71
|
-
allMessage += `: ${message}`;
|
|
72
|
-
}
|
|
73
|
-
const error = new AppError(allMessage, ({
|
|
74
|
-
code: 401,
|
|
75
|
-
httpStatus: 401,
|
|
76
|
-
...meta,
|
|
77
|
-
}));
|
|
78
|
-
return AppError.purifyStack(error);
|
|
79
|
-
}
|
|
80
|
-
static isConcurrentRequestError(err) {
|
|
81
|
-
return err instanceof AppError && err.code === 409 && /^Concurrent request/.test(err.message);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
exports.default = AppError;
|
|
85
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwRXJyb3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJhcHBFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLE1BQXFCLFFBQVMsU0FBUSxLQUFLO0lBVXZDLFlBQWEsT0FBZSxFQUFFLElBQVU7UUFDcEMsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztRQUV2QixJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLENBQUM7UUFFeEMsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksR0FBRyxDQUFDO1FBRW5ELElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLFNBQVMsQ0FBQztRQUU5QixJQUFJLENBQUMsUUFBUSxHQUFHLFNBQVMsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTyxDQUFFLElBQXlCO1FBQzlCLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBRWpCLE9BQU8sSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFFRCxNQUFNLENBQUMsV0FBVyxDQUFFLEtBQWU7UUFDL0IsS0FBSyxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsS0FBSyxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBRXhGLE9BQU8sS0FBSyxDQUFDO0lBQ2pCLENBQUM7SUFFRCxNQUFNLENBQUMsUUFBUSxDQUFFLE9BQWdCLEVBQUUsSUFBMEI7UUFFekQsSUFBSSxVQUFVLEdBQUcsV0FBVyxDQUFDO1FBQzdCLElBQUksT0FBTyxFQUFFO1lBQ1QsVUFBVSxJQUFJLEtBQUssT0FBTyxFQUFFLENBQUM7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
|
package/lib/errorHandler.d.ts
DELETED
package/lib/errorHandler.js
DELETED
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
const lodash_1 = require("lodash");
|
|
7
|
-
const appError_1 = __importDefault(require("./appError"));
|
|
8
|
-
const initErrHandler = (log) => async function (ctx, next) {
|
|
9
|
-
try {
|
|
10
|
-
await next();
|
|
11
|
-
}
|
|
12
|
-
catch (originalError) {
|
|
13
|
-
let err = originalError;
|
|
14
|
-
if (!(err instanceof appError_1.default)) {
|
|
15
|
-
if (err instanceof Error) {
|
|
16
|
-
// @ts-ignore
|
|
17
|
-
const redirect = err.redirect || null;
|
|
18
|
-
err = new appError_1.default(`${err.name}: ${err.message}`);
|
|
19
|
-
err.redirect = redirect;
|
|
20
|
-
}
|
|
21
|
-
else if (typeof err === 'string') {
|
|
22
|
-
err = new appError_1.default(err);
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
err = new appError_1.default('Unknown error');
|
|
26
|
-
}
|
|
27
|
-
err.stack = originalError.stack;
|
|
28
|
-
}
|
|
29
|
-
const metaData = {
|
|
30
|
-
httpStatus: err.httpStatus || 500,
|
|
31
|
-
url: ctx.request.originalUrl,
|
|
32
|
-
query: ctx.request.query,
|
|
33
|
-
method: ctx.req.method,
|
|
34
|
-
remoteAddress: ctx.get('x-forwarded-for') || ctx.req.connection.remoteAddress,
|
|
35
|
-
};
|
|
36
|
-
if (err.code) {
|
|
37
|
-
metaData.code = err.code;
|
|
38
|
-
}
|
|
39
|
-
if (!ctx.request.is('multipart/*')) {
|
|
40
|
-
metaData.body = ctx.request.body;
|
|
41
|
-
}
|
|
42
|
-
if (ctx.req.headers && ctx.req.headers.referer) {
|
|
43
|
-
metaData.referer = ctx.req.headers.referer;
|
|
44
|
-
}
|
|
45
|
-
if (err.redirect) {
|
|
46
|
-
metaData.redirect = err.redirect;
|
|
47
|
-
}
|
|
48
|
-
const originalMeta = err.meta;
|
|
49
|
-
if (!(0, lodash_1.isEmpty)(err.meta)) {
|
|
50
|
-
metaData.meta = err.meta;
|
|
51
|
-
}
|
|
52
|
-
err.setMeta(metaData);
|
|
53
|
-
if (err.httpStatus === 404 || err.httpStatus === 401 || err.httpStatus === 429) {
|
|
54
|
-
log.warn(err);
|
|
55
|
-
}
|
|
56
|
-
else if (err.httpStatus === 500 || err.httpStatus === 408) {
|
|
57
|
-
log.error(err);
|
|
58
|
-
}
|
|
59
|
-
else {
|
|
60
|
-
log.info(err);
|
|
61
|
-
}
|
|
62
|
-
ctx.body = {
|
|
63
|
-
code: err.code,
|
|
64
|
-
message: err.message,
|
|
65
|
-
...(0, lodash_1.pick)(originalMeta, err.publicFields || []),
|
|
66
|
-
};
|
|
67
|
-
ctx.status = err.httpStatus;
|
|
68
|
-
}
|
|
69
|
-
};
|
|
70
|
-
exports.default = initErrHandler;
|
|
71
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXJyb3JIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXJyb3JIYW5kbGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQXVDO0FBRXZDLDBEQUFrQztBQUVsQyxNQUFNLGNBQWMsR0FBRyxDQUFDLEdBQVcsRUFBRSxFQUFFLENBQUMsS0FBSyxXQUFXLEdBQVEsRUFBRSxJQUFjO0lBQzVFLElBQUk7UUFDQSxNQUFNLElBQUksRUFBRSxDQUFDO0tBQ2hCO0lBQUMsT0FBTyxhQUFpQixFQUFFO1FBRXhCLElBQUksR0FBRyxHQUFRLGFBQWEsQ0FBQztRQUU3QixJQUFJLENBQUMsQ0FBQyxHQUFHLFlBQVksa0JBQVEsQ0FBQyxFQUFFO1lBRTVCLElBQUksR0FBRyxZQUFZLEtBQUssRUFBRTtnQkFDdEIsYUFBYTtnQkFDYixNQUFNLFFBQVEsR0FBRyxHQUFHLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQztnQkFDdEMsR0FBRyxHQUFHLElBQUksa0JBQVEsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQ2xELEdBQUcsQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO2FBRTNCO2lCQUFNLElBQUksT0FBTyxHQUFHLEtBQUssUUFBUSxFQUFFO2dCQUNoQyxHQUFHLEdBQUcsSUFBSSxrQkFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDO2FBRTNCO2lCQUFNO2dCQUNILEdBQUcsR0FBRyxJQUFJLGtCQUFRLENBQUMsZUFBZSxDQUFDLENBQUM7YUFDdkM7WUFFRCxHQUFHLENBQUMsS0FBSyxHQUFHLGFBQWEsQ0FBQyxLQUFLLENBQUM7U0FDbkM7UUFFRCxNQUFNLFFBQVEsR0FBUTtZQUNsQixVQUFVLEVBQUUsR0FBRyxDQUFDLFVBQVUsSUFBSSxHQUFHO1lBQ2pDLEdBQUcsRUFBRSxHQUFHLENBQUMsT0FBTyxDQUFDLFdBQVc7WUFDNUIsS0FBSyxFQUFFLEdBQUcsQ0FBQyxPQUFPLENBQUMsS0FBSztZQUN4QixNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxNQUFNO1lBQ3RCLGFBQWEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLGlCQUFpQixDQUFDLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsYUFBYTtTQUNoRixDQUFDO1FBRUYsSUFBSSxHQUFHLENBQUMsSUFBSSxFQUFFO1lBQ1YsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1NBQzVCO1FBRUQsSUFBSSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFO1lBQ2hDLFFBQVEsQ0FBQyxJQUFJLEdBQUcsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7U0FDcEM7UUFFRCxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxJQUFJLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sRUFBRTtZQUM1QyxRQUFRLENBQUMsT0FBTyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQztTQUM5QztRQUVELElBQUksR0FBRyxDQUFDLFFBQVEsRUFBRTtZQUNkLFFBQVEsQ0FBQyxRQUFRLEdBQUcsR0FBRyxDQUFDLFFBQVEsQ0FBQztTQUNwQztRQUVELE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxJQUFJLENBQUM7UUFFOUIsSUFBSSxDQUFDLElBQUEsZ0JBQU8sRUFBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDcEIsUUFBUSxDQUFDLElBQUksR0FBRyxHQUFHLENBQUMsSUFBSSxDQUFDO1NBQzVCO1FBRUQsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUV0QixJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1lBQzVFLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FFakI7YUFBTSxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxJQUFJLEdBQUcsQ0FBQyxVQUFVLEtBQUssR0FBRyxFQUFFO1lBQ3pELEdBQUcsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUM7U0FFbEI7YUFBTTtZQUNILEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7U0FDakI7UUFFRCxHQUFHLENBQUMsSUFBSSxHQUFHO1lBQ1AsSUFBSSxFQUFFLEdBQUcsQ0FBQyxJQUFJO1lBQ2QsT0FBTyxFQUFFLEdBQUcsQ0FBQyxPQUFPO1lBQ3BCLEdBQUcsSUFBQSxhQUFJLEVBQUMsWUFBWSxFQUFFLEdBQUcsQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDO1NBQ2hELENBQUM7UUFDRixHQUFHLENBQUMsTUFBTSxHQUFHLEdBQUcsQ0FBQyxVQUFVLENBQUM7S0FDL0I7QUFDTCxDQUFDLENBQUM7QUFFRixrQkFBZSxjQUFjLENBQUMifQ==
|
package/lib/index.d.ts
DELETED
package/lib/index.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.initErrHandler = exports.AppError = void 0;
|
|
7
|
-
const appError_1 = __importDefault(require("./appError"));
|
|
8
|
-
exports.AppError = appError_1.default;
|
|
9
|
-
const errorHandler_1 = __importDefault(require("./errorHandler"));
|
|
10
|
-
exports.initErrHandler = errorHandler_1.default;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSwwREFBa0M7QUFHekIsbUJBSEYsa0JBQVEsQ0FHRTtBQUZqQixrRUFBNEM7QUFFekIseUJBRlosc0JBQWMsQ0FFWSJ9
|