max-nestjs 0.0.4 → 0.0.5
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/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/max-auth.guard.d.ts +3 -3
- package/dist/max-auth.guard.js +7 -82
- package/dist/max-auth.guard.js.map +1 -1
- package/dist/max-user.decorator.js +1 -1
- package/dist/max-user.decorator.js.map +1 -1
- package/dist/max.module.js +3 -1
- package/dist/max.module.js.map +1 -1
- package/dist/max.validation.d.ts +9 -0
- package/dist/max.validation.js +108 -0
- package/dist/max.validation.js.map +1 -0
- package/dist/types.d.ts +0 -1
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -2,6 +2,7 @@ export * from './max.constants';
|
|
|
2
2
|
export * from './max.interface';
|
|
3
3
|
export * from './max.module';
|
|
4
4
|
export * from './max-auth.guard';
|
|
5
|
+
export * from './max.validation';
|
|
5
6
|
export { MaxUser } from './max-user.decorator';
|
|
6
7
|
export type { MaxInitData, MaxRequest, MaxUserData } from './types';
|
|
7
8
|
export type { MaxBridgeInitData, MaxBridgeInitDataChat, MaxBridgeInitDataUser } from 'max-bridge';
|
package/dist/index.js
CHANGED
|
@@ -19,6 +19,7 @@ __exportStar(require("./max.constants"), exports);
|
|
|
19
19
|
__exportStar(require("./max.interface"), exports);
|
|
20
20
|
__exportStar(require("./max.module"), exports);
|
|
21
21
|
__exportStar(require("./max-auth.guard"), exports);
|
|
22
|
+
__exportStar(require("./max.validation"), exports);
|
|
22
23
|
var max_user_decorator_1 = require("./max-user.decorator");
|
|
23
24
|
Object.defineProperty(exports, "MaxUser", { enumerable: true, get: function () { return max_user_decorator_1.MaxUser; } });
|
|
24
25
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,kDAA+B;AAC/B,+CAA4B;AAC5B,mDAAgC;AAChC,2DAA8C;AAArC,6GAAA,OAAO,OAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;AAAA,kDAA+B;AAC/B,kDAA+B;AAC/B,+CAA4B;AAC5B,mDAAgC;AAChC,mDAAgC;AAChC,2DAA8C;AAArC,6GAAA,OAAO,OAAA"}
|
package/dist/max-auth.guard.d.ts
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { CanActivate, type ExecutionContext } from '@nestjs/common';
|
|
2
2
|
import type { MaxResolvedModuleOptions } from './max.interface';
|
|
3
|
+
import { MaxValidationService } from './max.validation';
|
|
3
4
|
export declare class MaxAuthGuard implements CanActivate {
|
|
4
5
|
private readonly options;
|
|
5
|
-
|
|
6
|
+
private readonly maxValidationService;
|
|
7
|
+
constructor(options: MaxResolvedModuleOptions, maxValidationService: MaxValidationService);
|
|
6
8
|
canActivate(context: ExecutionContext): boolean;
|
|
7
|
-
private validateInitData;
|
|
8
|
-
private parseInitData;
|
|
9
9
|
}
|
package/dist/max-auth.guard.js
CHANGED
|
@@ -15,12 +15,11 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
15
15
|
exports.MaxAuthGuard = void 0;
|
|
16
16
|
const common_1 = require("@nestjs/common");
|
|
17
17
|
const max_constants_1 = require("./max.constants");
|
|
18
|
-
const
|
|
19
|
-
const max_constants_2 = require("./max.constants");
|
|
20
|
-
const utils_nodejs_1 = require("@companix/utils-nodejs");
|
|
18
|
+
const max_validation_1 = require("./max.validation");
|
|
21
19
|
let MaxAuthGuard = class MaxAuthGuard {
|
|
22
|
-
constructor(options) {
|
|
20
|
+
constructor(options, maxValidationService) {
|
|
23
21
|
this.options = options;
|
|
22
|
+
this.maxValidationService = maxValidationService;
|
|
24
23
|
}
|
|
25
24
|
canActivate(context) {
|
|
26
25
|
const request = context.switchToHttp().getRequest();
|
|
@@ -28,89 +27,15 @@ let MaxAuthGuard = class MaxAuthGuard {
|
|
|
28
27
|
if (!rawInitData || typeof rawInitData !== 'string') {
|
|
29
28
|
throw new common_1.UnauthorizedException('MAX init data is missing');
|
|
30
29
|
}
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
throw new common_1.UnauthorizedException('Invalid MAX init data signature');
|
|
35
|
-
}
|
|
36
|
-
request.maxInitData = initData;
|
|
37
|
-
request.maxUser = initData.user;
|
|
38
|
-
return true;
|
|
39
|
-
}
|
|
40
|
-
catch (error) {
|
|
41
|
-
if (error instanceof common_1.HttpException) {
|
|
42
|
-
throw error;
|
|
43
|
-
}
|
|
44
|
-
throw new common_1.UnauthorizedException('Failed to validate Max init data');
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
validateInitData(entities, hash) {
|
|
48
|
-
const dataCheckString = entities
|
|
49
|
-
.filter(([key]) => key !== 'hash')
|
|
50
|
-
.sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))
|
|
51
|
-
.map(([key, value]) => `${key}=${value}`)
|
|
52
|
-
.join('\n');
|
|
53
|
-
const secretKey = (0, crypto_1.createHmac)('sha256', max_constants_2.MAX_WEB_APP_DATA_KEY).update(this.options.botToken).digest();
|
|
54
|
-
const calculatedHash = (0, crypto_1.createHmac)('sha256', secretKey).update(dataCheckString).digest('hex');
|
|
55
|
-
return (0, utils_nodejs_1.safeEqual)(calculatedHash, hash);
|
|
56
|
-
}
|
|
57
|
-
parseInitData(rawInitData) {
|
|
58
|
-
const params = new URLSearchParams(rawInitData);
|
|
59
|
-
const entities = Array.from(params.entries());
|
|
60
|
-
const initData = {};
|
|
61
|
-
for (const [key, value] of entities) {
|
|
62
|
-
switch (key) {
|
|
63
|
-
case 'auth_date':
|
|
64
|
-
initData.auth_date = parseRequiredInteger(key, value);
|
|
65
|
-
break;
|
|
66
|
-
case 'hash':
|
|
67
|
-
initData.hash = value;
|
|
68
|
-
break;
|
|
69
|
-
case 'ip':
|
|
70
|
-
initData.ip = value;
|
|
71
|
-
break;
|
|
72
|
-
case 'query_id':
|
|
73
|
-
initData.query_id = value;
|
|
74
|
-
break;
|
|
75
|
-
case 'start_param':
|
|
76
|
-
initData.start_param = value;
|
|
77
|
-
break;
|
|
78
|
-
case 'chat':
|
|
79
|
-
initData.chat = parseJsonValue(key, value);
|
|
80
|
-
break;
|
|
81
|
-
case 'user':
|
|
82
|
-
initData.user = parseJsonValue(key, value);
|
|
83
|
-
break;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (!initData.hash || !initData.auth_date || !initData.user) {
|
|
87
|
-
throw new common_1.BadRequestException('Invalid init data format');
|
|
88
|
-
}
|
|
89
|
-
return {
|
|
90
|
-
entities,
|
|
91
|
-
initData: initData
|
|
92
|
-
};
|
|
30
|
+
const initData = this.maxValidationService.verify(rawInitData);
|
|
31
|
+
request.maxInitData = initData;
|
|
32
|
+
return true;
|
|
93
33
|
}
|
|
94
34
|
};
|
|
95
35
|
exports.MaxAuthGuard = MaxAuthGuard;
|
|
96
36
|
exports.MaxAuthGuard = MaxAuthGuard = __decorate([
|
|
97
37
|
(0, common_1.Injectable)(),
|
|
98
38
|
__param(0, (0, common_1.Inject)(max_constants_1.MAX_OPTIONS_SYMBOL)),
|
|
99
|
-
__metadata("design:paramtypes", [Object])
|
|
39
|
+
__metadata("design:paramtypes", [Object, max_validation_1.MaxValidationService])
|
|
100
40
|
], MaxAuthGuard);
|
|
101
|
-
const parseRequiredInteger = (key, value) => {
|
|
102
|
-
const parsed = Number.parseInt(value, 10);
|
|
103
|
-
if (!Number.isFinite(parsed)) {
|
|
104
|
-
throw new common_1.BadRequestException(`Invalid MAX init data numeric value for "${key}"`);
|
|
105
|
-
}
|
|
106
|
-
return parsed;
|
|
107
|
-
};
|
|
108
|
-
const parseJsonValue = (key, value) => {
|
|
109
|
-
try {
|
|
110
|
-
return JSON.parse(value);
|
|
111
|
-
}
|
|
112
|
-
catch {
|
|
113
|
-
throw new common_1.BadRequestException(`Invalid MAX init data JSON value for "${key}"`);
|
|
114
|
-
}
|
|
115
|
-
};
|
|
116
41
|
//# sourceMappingURL=max-auth.guard.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"max-auth.guard.js","sourceRoot":"","sources":["../src/max-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"max-auth.guard.js","sourceRoot":"","sources":["../src/max-auth.guard.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAMuB;AACvB,mDAAoD;AAGpD,qDAAuD;AAGhD,IAAM,YAAY,GAAlB,MAAM,YAAY;IACvB,YAEmB,OAAiC,EACjC,oBAA0C;QAD1C,YAAO,GAAP,OAAO,CAA0B;QACjC,yBAAoB,GAApB,oBAAoB,CAAsB;IAC1D,CAAC;IAEG,WAAW,CAAC,OAAyB;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,UAAU,EAAc,CAAA;QAC/D,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAA;QAE5D,IAAI,CAAC,WAAW,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACpD,MAAM,IAAI,8BAAqB,CAAC,0BAA0B,CAAC,CAAA;QAC7D,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;QAE9D,OAAO,CAAC,WAAW,GAAG,QAAQ,CAAA;QAE9B,OAAO,IAAI,CAAA;IACb,CAAC;CACF,CAAA;AArBY,oCAAY;uBAAZ,YAAY;IADxB,IAAA,mBAAU,GAAE;IAGR,WAAA,IAAA,eAAM,EAAC,kCAAkB,CAAC,CAAA;6CAEY,qCAAoB;GAJlD,YAAY,CAqBxB"}
|
|
@@ -4,7 +4,7 @@ exports.MaxUser = void 0;
|
|
|
4
4
|
const common_1 = require("@nestjs/common");
|
|
5
5
|
exports.MaxUser = (0, common_1.createParamDecorator)((prop = null, ctx) => {
|
|
6
6
|
const request = ctx.switchToHttp().getRequest();
|
|
7
|
-
const user = request
|
|
7
|
+
const user = request?.maxInitData?.user;
|
|
8
8
|
if (!user) {
|
|
9
9
|
return null;
|
|
10
10
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"max-user.decorator.js","sourceRoot":"","sources":["../src/max-user.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA4E;AAG/D,QAAA,OAAO,GAAG,IAAA,6BAAoB,EACzC,CAAC,OAAiC,IAAI,EAAE,GAAqB,EAAE,EAAE;IAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAc,CAAA;IAC3D,MAAM,IAAI,GAAG,OAAO,
|
|
1
|
+
{"version":3,"file":"max-user.decorator.js","sourceRoot":"","sources":["../src/max-user.decorator.ts"],"names":[],"mappings":";;;AAAA,2CAA4E;AAG/D,QAAA,OAAO,GAAG,IAAA,6BAAoB,EACzC,CAAC,OAAiC,IAAI,EAAE,GAAqB,EAAE,EAAE;IAC/D,MAAM,OAAO,GAAG,GAAG,CAAC,YAAY,EAAE,CAAC,UAAU,EAAc,CAAA;IAC3D,MAAM,IAAI,GAAG,OAAO,EAAE,WAAW,EAAE,IAAI,CAAA;IAEvC,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;AACjC,CAAC,CACF,CAAA"}
|
package/dist/max.module.js
CHANGED
|
@@ -11,6 +11,7 @@ exports.MaxModule = void 0;
|
|
|
11
11
|
const common_1 = require("@nestjs/common");
|
|
12
12
|
const max_constants_1 = require("./max.constants");
|
|
13
13
|
const max_auth_guard_1 = require("./max-auth.guard");
|
|
14
|
+
const max_validation_1 = require("./max.validation");
|
|
14
15
|
let MaxModule = MaxModule_1 = class MaxModule {
|
|
15
16
|
static forRoot(options) {
|
|
16
17
|
return {
|
|
@@ -20,9 +21,10 @@ let MaxModule = MaxModule_1 = class MaxModule {
|
|
|
20
21
|
provide: max_constants_1.MAX_OPTIONS_SYMBOL,
|
|
21
22
|
useValue: normalizeOptions(options)
|
|
22
23
|
},
|
|
24
|
+
max_validation_1.MaxValidationService,
|
|
23
25
|
max_auth_guard_1.MaxAuthGuard
|
|
24
26
|
],
|
|
25
|
-
exports: [max_constants_1.MAX_OPTIONS_SYMBOL, max_auth_guard_1.MaxAuthGuard],
|
|
27
|
+
exports: [max_constants_1.MAX_OPTIONS_SYMBOL, max_auth_guard_1.MaxAuthGuard, max_validation_1.MaxValidationService],
|
|
26
28
|
global: true
|
|
27
29
|
};
|
|
28
30
|
}
|
package/dist/max.module.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"max.module.js","sourceRoot":"","sources":["../src/max.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAmE;AACnE,mDAAkF;AAElF,qDAA+C;
|
|
1
|
+
{"version":3,"file":"max.module.js","sourceRoot":"","sources":["../src/max.module.ts"],"names":[],"mappings":";;;;;;;;;;AAAA,2CAAmE;AACnE,mDAAkF;AAElF,qDAA+C;AAC/C,qDAAuD;AAIhD,IAAM,SAAS,iBAAf,MAAM,SAAS;IACb,MAAM,CAAC,OAAO,CAAC,OAAyB;QAC7C,OAAO;YACL,MAAM,EAAE,WAAS;YACjB,SAAS,EAAE;gBACT;oBACE,OAAO,EAAE,kCAAkB;oBAC3B,QAAQ,EAAE,gBAAgB,CAAC,OAAO,CAAC;iBACpC;gBACD,qCAAoB;gBACpB,6BAAY;aACb;YACD,OAAO,EAAE,CAAC,kCAAkB,EAAE,6BAAY,EAAE,qCAAoB,CAAC;YACjE,MAAM,EAAE,IAAI;SACb,CAAA;IACH,CAAC;CACF,CAAA;AAhBY,8BAAS;oBAAT,SAAS;IAFrB,IAAA,eAAM,GAAE;IACR,IAAA,eAAM,EAAC,EAAE,CAAC;GACE,SAAS,CAgBrB;AAED,MAAM,gBAAgB,GAAG,CAAC,OAAyB,EAA4B,EAAE;IAC/E,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAA;IAExC,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAA;IAC9C,CAAC;IAED,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,4CAA4B,CAAA;IAE7E,OAAO;QACL,QAAQ;QACR,UAAU;KACX,CAAA;AACH,CAAC,CAAA"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { MaxResolvedModuleOptions } from './max.interface';
|
|
2
|
+
import type { MaxInitData } from './types';
|
|
3
|
+
export declare class MaxValidationService {
|
|
4
|
+
private readonly options;
|
|
5
|
+
constructor(options: MaxResolvedModuleOptions);
|
|
6
|
+
verify(rawInitData: string): MaxInitData;
|
|
7
|
+
private validateInitData;
|
|
8
|
+
private parseInitData;
|
|
9
|
+
}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var __param = (this && this.__param) || function (paramIndex, decorator) {
|
|
12
|
+
return function (target, key) { decorator(target, key, paramIndex); }
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.MaxValidationService = void 0;
|
|
16
|
+
const common_1 = require("@nestjs/common");
|
|
17
|
+
const crypto_1 = require("crypto");
|
|
18
|
+
const max_constants_1 = require("./max.constants");
|
|
19
|
+
const utils_nodejs_1 = require("@companix/utils-nodejs");
|
|
20
|
+
let MaxValidationService = class MaxValidationService {
|
|
21
|
+
constructor(options) {
|
|
22
|
+
this.options = options;
|
|
23
|
+
}
|
|
24
|
+
verify(rawInitData) {
|
|
25
|
+
try {
|
|
26
|
+
const { initData, entities } = this.parseInitData(rawInitData);
|
|
27
|
+
if (!this.validateInitData(entities, initData.hash)) {
|
|
28
|
+
throw new common_1.UnauthorizedException('Invalid MAX init data signature');
|
|
29
|
+
}
|
|
30
|
+
return initData;
|
|
31
|
+
}
|
|
32
|
+
catch (error) {
|
|
33
|
+
if (error instanceof common_1.HttpException) {
|
|
34
|
+
throw error;
|
|
35
|
+
}
|
|
36
|
+
throw new common_1.UnauthorizedException('Failed to validate Max init data');
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
validateInitData(entities, hash) {
|
|
40
|
+
const dataCheckString = entities
|
|
41
|
+
.filter(([key]) => key !== 'hash')
|
|
42
|
+
.sort(([leftKey], [rightKey]) => leftKey.localeCompare(rightKey))
|
|
43
|
+
.map(([key, value]) => `${key}=${value}`)
|
|
44
|
+
.join('\n');
|
|
45
|
+
const secretKey = (0, crypto_1.createHmac)('sha256', max_constants_1.MAX_WEB_APP_DATA_KEY).update(this.options.botToken).digest();
|
|
46
|
+
const calculatedHash = (0, crypto_1.createHmac)('sha256', secretKey).update(dataCheckString).digest('hex');
|
|
47
|
+
return (0, utils_nodejs_1.safeEqual)(calculatedHash, hash);
|
|
48
|
+
}
|
|
49
|
+
parseInitData(rawInitData) {
|
|
50
|
+
const params = new URLSearchParams(rawInitData);
|
|
51
|
+
const entities = Array.from(params.entries());
|
|
52
|
+
const initData = {};
|
|
53
|
+
for (const [key, value] of entities) {
|
|
54
|
+
switch (key) {
|
|
55
|
+
case 'auth_date':
|
|
56
|
+
initData.auth_date = parseRequiredInteger(key, value);
|
|
57
|
+
break;
|
|
58
|
+
case 'hash':
|
|
59
|
+
initData.hash = value;
|
|
60
|
+
break;
|
|
61
|
+
case 'ip':
|
|
62
|
+
initData.ip = value;
|
|
63
|
+
break;
|
|
64
|
+
case 'query_id':
|
|
65
|
+
initData.query_id = value;
|
|
66
|
+
break;
|
|
67
|
+
case 'start_param':
|
|
68
|
+
initData.start_param = value;
|
|
69
|
+
break;
|
|
70
|
+
case 'chat':
|
|
71
|
+
initData.chat = parseJsonValue(key, value);
|
|
72
|
+
break;
|
|
73
|
+
case 'user':
|
|
74
|
+
initData.user = parseJsonValue(key, value);
|
|
75
|
+
break;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (!initData.hash || !initData.auth_date || !initData.user) {
|
|
79
|
+
throw new common_1.BadRequestException('Invalid init data format');
|
|
80
|
+
}
|
|
81
|
+
return {
|
|
82
|
+
entities,
|
|
83
|
+
initData: initData
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
exports.MaxValidationService = MaxValidationService;
|
|
88
|
+
exports.MaxValidationService = MaxValidationService = __decorate([
|
|
89
|
+
(0, common_1.Injectable)(),
|
|
90
|
+
__param(0, (0, common_1.Inject)(max_constants_1.MAX_OPTIONS_SYMBOL)),
|
|
91
|
+
__metadata("design:paramtypes", [Object])
|
|
92
|
+
], MaxValidationService);
|
|
93
|
+
const parseRequiredInteger = (key, value) => {
|
|
94
|
+
const parsed = Number.parseInt(value, 10);
|
|
95
|
+
if (!Number.isFinite(parsed)) {
|
|
96
|
+
throw new common_1.BadRequestException(`Invalid MAX init data numeric value for "${key}"`);
|
|
97
|
+
}
|
|
98
|
+
return parsed;
|
|
99
|
+
};
|
|
100
|
+
const parseJsonValue = (key, value) => {
|
|
101
|
+
try {
|
|
102
|
+
return JSON.parse(value);
|
|
103
|
+
}
|
|
104
|
+
catch {
|
|
105
|
+
throw new common_1.BadRequestException(`Invalid MAX init data JSON value for "${key}"`);
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
//# sourceMappingURL=max.validation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"max.validation.js","sourceRoot":"","sources":["../src/max.validation.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED