This commit is contained in:
qq
2026-04-22 14:45:05 +08:00
parent 01cbdcd695
commit d8ceb298aa
10 changed files with 59 additions and 54 deletions
+6 -4
View File
@@ -26,11 +26,13 @@ class CommonCaptchaController {
this.captchaService = captchaService; this.captchaService = captchaService;
} }
async getCaptcha(query) { async getCaptcha(query) {
const type = query.type ?? 'text';
const size = query.size ?? 4; const size = query.size ?? 4;
const result = type === 'math' const color = query.color ?? '#028304';
? await this.captchaService.generateMath() const result = await this.captchaService.generate({
: await this.captchaService.generate({ size }); size,
noise: 4,
color,
});
return api_1.Api.success({ return api_1.Api.success({
svg: result.svg, svg: result.svg,
key: result.key, key: result.key,
@@ -1 +1 @@
{"version":3,"file":"common_captcha.controller.js","sourceRoot":"","sources":["../../../../src/app/common/controller/common_captcha.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAA+C;AAE/C,gCAA6B;AAC7B,iDAA6C;AAC7C,gEAA2D;AAC3D,oEAA2D;AAE3D,MAAsB,uBAAuB;IACZ;IAA/B,YAA+B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAQ3D,AAAN,KAAK,CAAC,UAAU,CAAU,KAAsB;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,MAAM,CAAC;QAClC,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAE7B,MAAM,MAAM,GACV,IAAI,KAAK,MAAM;YACb,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,EAAE;YAC1C,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,OAAO,SAAG,CAAC,OAAO,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;CACF;AAtBD,0DAsBC;AAbO;IANL,IAAA,6BAAU,GAAE;IACZ,IAAA,YAAG,GAAE;IACL,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACpC,SAAG,CAAC,WAAW,CAAC;QACf,KAAK,EAAE,sBAAS;KACjB,CAAC;;IACgB,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAQ,mCAAe;;yDAY/C"} {"version":3,"file":"common_captcha.controller.js","sourceRoot":"","sources":["../../../../src/app/common/controller/common_captcha.controller.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,2CAA4C;AAC5C,6CAA+C;AAE/C,gCAA6B;AAC7B,iDAA6C;AAC7C,gEAA2D;AAC3D,oEAA2D;AAE3D,MAAsB,uBAAuB;IACZ;IAA/B,YAA+B,cAA8B;QAA9B,mBAAc,GAAd,cAAc,CAAgB;IAAG,CAAC;IAQ3D,AAAN,KAAK,CAAC,UAAU,CAAU,KAAsB;QAC9C,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,SAAS,CAAC;QAEvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC;YAChD,IAAI;YACJ,KAAK,EAAE,CAAC;YACR,KAAK;SACN,CAAC,CAAC;QACH,OAAO,SAAG,CAAC,OAAO,CAAC;YACjB,GAAG,EAAE,MAAM,CAAC,GAAG;YACf,GAAG,EAAE,MAAM,CAAC,GAAG;SAChB,CAAC,CAAC;IACL,CAAC;CACF;AAvBD,0DAuBC;AAdO;IANL,IAAA,6BAAU,GAAE;IACZ,IAAA,YAAG,GAAE;IACL,IAAA,sBAAY,EAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;IACpC,SAAG,CAAC,WAAW,CAAC;QACf,KAAK,EAAE,sBAAS;KACjB,CAAC;;IACgB,WAAA,IAAA,cAAK,GAAE,CAAA;;qCAAQ,mCAAe;;yDAa/C"}
+1 -1
View File
@@ -1,4 +1,4 @@
export declare class CaptchaQueryDto { export declare class CaptchaQueryDto {
type?: 'text' | 'math';
size?: number; size?: number;
color?: string;
} }
+8 -13
View File
@@ -13,26 +13,15 @@ exports.CaptchaQueryDto = void 0;
const openapi = require("@nestjs/swagger"); const openapi = require("@nestjs/swagger");
const api_optional_decorator_1 = require("../decorator/api_optional.decorator"); const api_optional_decorator_1 = require("../decorator/api_optional.decorator");
const class_validator_1 = require("class-validator"); const class_validator_1 = require("class-validator");
const swagger_1 = require("@nestjs/swagger");
const class_transformer_1 = require("class-transformer"); const class_transformer_1 = require("class-transformer");
class CaptchaQueryDto { class CaptchaQueryDto {
type = 'text';
size; size;
color;
static _OPENAPI_METADATA_FACTORY() { static _OPENAPI_METADATA_FACTORY() {
return { type: { required: false, type: () => Object, default: "text", enum: ['text', 'math'] }, size: { required: false, type: () => Number } }; return { size: { required: false, type: () => Number }, color: { required: false, type: () => String } };
} }
} }
exports.CaptchaQueryDto = CaptchaQueryDto; exports.CaptchaQueryDto = CaptchaQueryDto;
__decorate([
(0, swagger_1.ApiPropertyOptional)({
description: '验证码类型:text=文本验证码,math=数学验证码',
enum: ['text', 'math'],
default: 'text',
}),
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsIn)(['text', 'math']),
__metadata("design:type", String)
], CaptchaQueryDto.prototype, "type", void 0);
__decorate([ __decorate([
(0, api_optional_decorator_1.ApiOptional)({ description: '验证码长度(仅 text 类型有效)', default: 4 }), (0, api_optional_decorator_1.ApiOptional)({ description: '验证码长度(仅 text 类型有效)', default: 4 }),
(0, class_validator_1.IsOptional)(), (0, class_validator_1.IsOptional)(),
@@ -40,4 +29,10 @@ __decorate([
(0, class_validator_1.IsInt)(), (0, class_validator_1.IsInt)(),
__metadata("design:type", Number) __metadata("design:type", Number)
], CaptchaQueryDto.prototype, "size", void 0); ], CaptchaQueryDto.prototype, "size", void 0);
__decorate([
(0, api_optional_decorator_1.ApiOptional)({ description: '验证码颜色,16进制:#ff0000' }),
(0, class_validator_1.IsOptional)(),
(0, class_validator_1.IsString)(),
__metadata("design:type", String)
], CaptchaQueryDto.prototype, "color", void 0);
//# sourceMappingURL=captcha-query.dto.js.map //# sourceMappingURL=captcha-query.dto.js.map
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"captcha-query.dto.js","sourceRoot":"","sources":["../../../../src/app/common/dto/captcha-query.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,gFAAkE;AAClE,qDAA0D;AAC1D,6CAAsD;AACtD,yDAAyC;AAEzC,MAAa,eAAe;IAQ1B,IAAI,GAAqB,MAAM,CAAC;IAMhC,IAAI,CAAU;;qFAPR,CAAC,MAAM,EAAE,MAAM,CAAC;;CAQvB;AAfD,0CAeC;AAPC;IAPC,IAAA,6BAAmB,EAAC;QACnB,WAAW,EAAE,6BAA6B;QAC1C,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC;QACtB,OAAO,EAAE,MAAM;KAChB,CAAC;IACD,IAAA,4BAAU,GAAE;IACZ,IAAA,sBAAI,EAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;;6CACS;AAMhC;IAJC,IAAA,oCAAW,EAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC9D,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,uBAAK,GAAE;;6CACM"} {"version":3,"file":"captcha-query.dto.js","sourceRoot":"","sources":["../../../../src/app/common/dto/captcha-query.dto.ts"],"names":[],"mappings":";;;;;;;;;;;;;AAAA,gFAAkE;AAClE,qDAA8D;AAC9D,yDAAyC;AAEzC,MAAa,eAAe;IAK1B,IAAI,CAAU;IAKd,KAAK,CAAU;;;;CAChB;AAXD,0CAWC;AANC;IAJC,IAAA,oCAAW,EAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC9D,IAAA,4BAAU,GAAE;IACZ,IAAA,wBAAI,EAAC,GAAG,EAAE,CAAC,MAAM,CAAC;IAClB,IAAA,uBAAK,GAAE;;6CACM;AAKd;IAHC,IAAA,oCAAW,EAAC,EAAE,WAAW,EAAE,oBAAoB,EAAE,CAAC;IAClD,IAAA,4BAAU,GAAE;IACZ,IAAA,0BAAQ,GAAE;;8CACI"}
+1 -7
View File
@@ -13,13 +13,7 @@ export declare class CaptchaService {
width?: number; width?: number;
height?: number; height?: number;
fontSize?: number; fontSize?: number;
inverse?: boolean; color?: string;
}): Promise<CaptchaResult>;
generateMath(options?: {
noise?: number;
width?: number;
height?: number;
fontSize?: number;
}): Promise<CaptchaResult>; }): Promise<CaptchaResult>;
validate(key: string, code: string): Promise<boolean>; validate(key: string, code: string): Promise<boolean>;
} }
+39 -24
View File
@@ -15,22 +15,51 @@ Object.defineProperty(exports, "__esModule", { value: true });
exports.CaptchaService = void 0; exports.CaptchaService = void 0;
const common_1 = require("@nestjs/common"); const common_1 = require("@nestjs/common");
const cache_manager_1 = require("@nestjs/cache-manager"); const cache_manager_1 = require("@nestjs/cache-manager");
const svgCaptcha = require('svg-captcha'); const CHAR_PRESET = '23456789ABCDEFGHJKLMNPQRSTUVWXYZ';
function randomChars(pool, count) {
const chars = [];
for (let i = 0; i < count; i++) {
chars.push(pool[Math.floor(Math.random() * pool.length)]);
}
return chars;
}
function randomColor() {
const h = Math.floor(Math.random() * 360);
return `hsl(${h}, 70%, 40%)`;
}
function createSolidSvg(chars, width, height, fontSize, noise, color) {
const text = chars.join('');
let svg = `<svg xmlns="http://www.w3.org/2000/svg" width="${width}" height="${height}" viewBox="0 0 ${width} ${height}">`;
for (let i = 0; i < noise; i++) {
const x1 = Math.random() * width;
const y1 = Math.random() * height;
const x2 = Math.random() * width;
const y2 = Math.random() * height;
svg += `<line x1="${x1.toFixed(1)}" y1="${y1.toFixed(1)}" x2="${x2.toFixed(1)}" y2="${y2.toFixed(1)}" stroke="${randomColor()}" stroke-width="1" opacity="0.4"/>`;
}
const padding = width * 0.12;
const usableWidth = width - padding * 2;
const charStep = usableWidth / chars.length;
const startY = height / 2 + fontSize / 3.5;
for (let i = 0; i < chars.length; i++) {
const x = padding + charStep * (i + 0.5);
const rotation = (Math.random() - 0.5) * 15;
const dy = (Math.random() - 0.5) * 4;
const charColor = color || randomColor();
const y = startY + dy;
svg += `<text x="${x.toFixed(1)}" y="${y.toFixed(1)}" font-family="Arial, Helvetica, sans-serif" font-size="${fontSize}" font-weight="bold" fill="${charColor}" text-anchor="middle" dominant-baseline="middle" transform="rotate(${rotation.toFixed(1)}, ${x.toFixed(1)}, ${y.toFixed(1)})">${chars[i]}</text>`;
}
svg += '</svg>';
return { data: svg, text };
}
let CaptchaService = class CaptchaService { let CaptchaService = class CaptchaService {
cacheManager; cacheManager;
constructor(cacheManager) { constructor(cacheManager) {
this.cacheManager = cacheManager; this.cacheManager = cacheManager;
} }
async generate(options) { async generate(options) {
const captcha = svgCaptcha.create({ const chars = randomChars(options?.charPreset ?? CHAR_PRESET, options?.size ?? 4);
size: options?.size ?? 4, const captcha = createSolidSvg(chars, options?.width ?? 120, options?.height ?? 40, options?.fontSize ?? 30, options?.noise ?? 3, options?.color);
ignoreChars: options?.charPreset ?? '23456789ABCDEFGHJKLMNPQRSTUVWXYZ',
noise: options?.noise ?? 3,
width: options?.width ?? 120,
height: options?.height ?? 40,
fontSize: options?.fontSize ?? 30,
inverse: options?.inverse ?? false,
});
const key = `captcha:${Date.now()}:${Math.random().toString(36).substring(2, 11)}`; const key = `captcha:${Date.now()}:${Math.random().toString(36).substring(2, 11)}`;
await this.cacheManager.set(key, captcha.text.toLowerCase(), 5 * 60 * 1000); await this.cacheManager.set(key, captcha.text.toLowerCase(), 5 * 60 * 1000);
return { return {
@@ -38,20 +67,6 @@ let CaptchaService = class CaptchaService {
key, key,
}; };
} }
async generateMath(options) {
const captcha = svgCaptcha.createMathExpr({
noise: options?.noise ?? 3,
width: options?.width ?? 120,
height: options?.height ?? 40,
fontSize: options?.fontSize ?? 30,
});
const key = `captcha:${Date.now()}:${Math.random().toString(36).substring(2, 11)}`;
await this.cacheManager.set(key, captcha.text, 5 * 60 * 1000);
return {
svg: captcha.data,
key,
};
}
async validate(key, code) { async validate(key, code) {
if (code == '8888') { if (code == '8888') {
return true; return true;
+1 -1
View File
@@ -1 +1 @@
{"version":3,"file":"captcha.service.js","sourceRoot":"","sources":["../../../../src/app/common/service/captcha.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAEA,2CAAoD;AAEpD,yDAAsD;AAGtD,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;AAUnC,IAAM,cAAc,GAApB,MAAM,cAAc;IACkB;IAA3C,YAA2C,YAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;IAAG,CAAC;IAOlE,KAAK,CAAC,QAAQ,CAAC,OAed;QACC,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC;YAChC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,CAAC;YACxB,WAAW,EAAE,OAAO,EAAE,UAAU,IAAI,kCAAkC;YACtE,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;YAC1B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG;YAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE;YAC7B,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;YACjC,OAAO,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;SACnC,CAAC,CAAC;QAGH,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAGnF,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CACzB,GAAG,EACF,OAAO,CAAC,IAAe,CAAC,WAAW,EAAE,EACtC,CAAC,GAAG,EAAE,GAAG,IAAI,CACd,CAAC;QAEF,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,IAAc;YAC3B,GAAG;SACJ,CAAC;IACJ,CAAC;IAOD,KAAK,CAAC,YAAY,CAAC,OASlB;QACC,MAAM,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC;YACxC,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,CAAC;YAC1B,KAAK,EAAE,OAAO,EAAE,KAAK,IAAI,GAAG;YAC5B,MAAM,EAAE,OAAO,EAAE,MAAM,IAAI,EAAE;YAC7B,QAAQ,EAAE,OAAO,EAAE,QAAQ,IAAI,EAAE;SAClC,CAAC,CAAC;QAGH,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAGnF,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAc,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAExE,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,IAAc;YAC3B,GAAG;SACJ,CAAC;IACJ,CAAC;IAQD,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,IAAY;QACtC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAGD,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;CACF,CAAA;AAvGY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;;GADvB,cAAc,CAuG1B"} {"version":3,"file":"captcha.service.js","sourceRoot":"","sources":["../../../../src/app/common/service/captcha.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAAoD;AAEpD,yDAAsD;AAYtD,MAAM,WAAW,GAAG,kCAAkC,CAAC;AAKvD,SAAS,WAAW,CAAC,IAAY,EAAE,KAAa;IAC9C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAKD,SAAS,WAAW;IAClB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,CAAC;IAC1C,OAAO,OAAO,CAAC,aAAa,CAAC;AAC/B,CAAC;AAKD,SAAS,cAAc,CACrB,KAAe,EACf,KAAa,EACb,MAAc,EACd,QAAgB,EAChB,KAAa,EACb,KAAc;IAEd,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE5B,IAAI,GAAG,GAAG,kDAAkD,KAAK,aAAa,MAAM,kBAAkB,KAAK,IAAI,MAAM,IAAI,CAAC;IAG1H,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC;QAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;QAClC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,KAAK,CAAC;QACjC,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,MAAM,CAAC;QAClC,GAAG,IAAI,aAAa,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,WAAW,EAAE,oCAAoC,CAAC;IACpK,CAAC;IAGD,MAAM,OAAO,GAAG,KAAK,GAAG,IAAI,CAAC;IAC7B,MAAM,WAAW,GAAG,KAAK,GAAG,OAAO,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,WAAW,GAAG,KAAK,CAAC,MAAM,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,GAAG,QAAQ,GAAG,GAAG,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,CAAC,GAAG,OAAO,GAAG,QAAQ,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC;QACzC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,EAAE,CAAC;QAC5C,MAAM,EAAE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACrC,MAAM,SAAS,GAAG,KAAK,IAAI,WAAW,EAAE,CAAC;QACzC,MAAM,CAAC,GAAG,MAAM,GAAG,EAAE,CAAC;QACtB,GAAG,IAAI,YAAY,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2DAA2D,QAAQ,8BAA8B,SAAS,uEAAuE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;IACnT,CAAC;IAED,GAAG,IAAI,QAAQ,CAAC;IAEhB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AAC7B,CAAC;AAGM,IAAM,cAAc,GAApB,MAAM,cAAc;IACkB;IAA3C,YAA2C,YAAmB;QAAnB,iBAAY,GAAZ,YAAY,CAAO;IAAG,CAAC;IAOlE,KAAK,CAAC,QAAQ,CAAC,OAed;QACC,MAAM,KAAK,GAAG,WAAW,CACvB,OAAO,EAAE,UAAU,IAAI,WAAW,EAClC,OAAO,EAAE,IAAI,IAAI,CAAC,CACnB,CAAC;QACF,MAAM,OAAO,GAAG,cAAc,CAC5B,KAAK,EACL,OAAO,EAAE,KAAK,IAAI,GAAG,EACrB,OAAO,EAAE,MAAM,IAAI,EAAE,EACrB,OAAO,EAAE,QAAQ,IAAI,EAAE,EACvB,OAAO,EAAE,KAAK,IAAI,CAAC,EACnB,OAAO,EAAE,KAAK,CACf,CAAC;QAEF,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;QAEnF,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC;QAE5E,OAAO;YACL,GAAG,EAAE,OAAO,CAAC,IAAI;YACjB,GAAG;SACJ,CAAC;IACJ,CAAC;IAQD,KAAK,CAAC,QAAQ,CAAC,GAAW,EAAE,IAAY;QACtC,IAAI,IAAI,IAAI,MAAM,EAAE,CAAC;YACnB,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAS,GAAG,CAAC,CAAC;QAC7D,IAAI,CAAC,WAAW,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACjC,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,KAAK,WAAW,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,CAAC;IACxE,CAAC;CACF,CAAA;AAjEY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,eAAM,EAAC,6BAAa,CAAC,CAAA;;GADvB,cAAc,CAiE1B"}
+1 -1
View File
File diff suppressed because one or more lines are too long
-1
View File
@@ -54,7 +54,6 @@
"mysql2": "^3.14.1", "mysql2": "^3.14.1",
"reflect-metadata": "^0.2.2", "reflect-metadata": "^0.2.2",
"rxjs": "^7.8.1", "rxjs": "^7.8.1",
"svg-captcha": "^1.4.0",
"tls-sig-api-v2-typescript": "^1.0.4", "tls-sig-api-v2-typescript": "^1.0.4",
"tweetnacl": "^1.0.3", "tweetnacl": "^1.0.3",
"typeorm": "^0.3.25", "typeorm": "^0.3.25",