nestjs-base 0.0.1 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- package/dist/controllers/base.controller.d.ts +8 -0
- package/dist/controllers/base.controller.js +7 -0
- package/dist/controllers/base.controller.js.map +1 -0
- package/dist/dicts/check-status.dict.d.ts +4 -0
- package/dist/dicts/check-status.dict.js +18 -0
- package/dist/dicts/check-status.dict.js.map +1 -0
- package/dist/dicts/enable-status.dict.d.ts +4 -0
- package/dist/dicts/enable-status.dict.js +14 -0
- package/dist/dicts/enable-status.dict.js.map +1 -0
- package/dist/dicts/gender.dict.d.ts +4 -0
- package/dist/dicts/gender.dict.js +18 -0
- package/dist/dicts/gender.dict.js.map +1 -0
- package/dist/dicts/is.dict.d.ts +4 -0
- package/dist/dicts/is.dict.js +14 -0
- package/dist/dicts/is.dict.js.map +1 -0
- package/dist/entities/base.entity.d.ts +4 -0
- package/dist/entities/base.entity.js +29 -0
- package/dist/entities/base.entity.js.map +1 -0
- package/dist/enums/check-status.enum.d.ts +5 -0
- package/dist/enums/check-status.enum.js +10 -0
- package/dist/enums/check-status.enum.js.map +1 -0
- package/dist/enums/enable-status.enum.d.ts +4 -0
- package/dist/enums/enable-status.enum.js +9 -0
- package/dist/enums/enable-status.enum.js.map +1 -0
- package/dist/enums/gender.enum.d.ts +5 -0
- package/dist/enums/gender.enum.js +10 -0
- package/dist/enums/gender.enum.js.map +1 -0
- package/dist/enums/is.enum.d.ts +4 -0
- package/dist/enums/is.enum.js +9 -0
- package/dist/enums/is.enum.js.map +1 -0
- package/dist/enums/platform.enum.d.ts +8 -0
- package/dist/enums/platform.enum.js +13 -0
- package/dist/enums/platform.enum.js.map +1 -0
- package/dist/enums/publish-status.enum.d.ts +4 -0
- package/dist/enums/publish-status.enum.js +9 -0
- package/dist/enums/publish-status.enum.js.map +1 -0
- package/dist/filters/http-exceptions.filter.d.ts +4 -0
- package/dist/filters/http-exceptions.filter.js +33 -0
- package/dist/filters/http-exceptions.filter.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.js +38 -0
- package/dist/index.js.map +1 -0
- package/dist/pipes/validation.pipe.d.ts +5 -0
- package/dist/pipes/validation.pipe.js +40 -0
- package/dist/pipes/validation.pipe.js.map +1 -0
- package/dist/tsconfig.build.tsbuildinfo +1 -0
- package/dist/utils/base.util.d.ts +10 -0
- package/dist/utils/base.util.js +37 -0
- package/dist/utils/base.util.js.map +1 -0
- package/dist/utils/bcrypt.util.d.ts +4 -0
- package/dist/utils/bcrypt.util.js +16 -0
- package/dist/utils/bcrypt.util.js.map +1 -0
- package/dist/utils/jwt.util.d.ts +10 -0
- package/dist/utils/jwt.util.js +15 -0
- package/dist/utils/jwt.util.js.map +1 -0
- package/dist/utils/sms-captcha.util.d.ts +20 -0
- package/dist/utils/sms-captcha.util.js +57 -0
- package/dist/utils/sms-captcha.util.js.map +1 -0
- package/dist/utils/svg-captcha.util.d.ts +13 -0
- package/dist/utils/svg-captcha.util.js +48 -0
- package/dist/utils/svg-captcha.util.js.map +1 -0
- package/dist/utils/tencent-cloud-sms.util.d.ts +14 -0
- package/dist/utils/tencent-cloud-sms.util.js +31 -0
- package/dist/utils/tencent-cloud-sms.util.js.map +1 -0
- package/dist/validators/base.validator.d.ts +5 -0
- package/dist/validators/base.validator.js +23 -0
- package/dist/validators/base.validator.js.map +1 -0
- package/dist/validators/is-phone-number.validator.d.ts +5 -0
- package/dist/validators/is-phone-number.validator.js +23 -0
- package/dist/validators/is-phone-number.validator.js.map +1 -0
- package/package.json +87 -11
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"bcrypt.util.js","sourceRoot":"","sources":["../../src/utils/bcrypt.util.ts"],"names":[],"mappings":";;;AAAA,iCAAiC;AAEjC,MAAa,UAAU;IACrB,MAAM,CAAC,IAAI,CAAC,QAAQ;QAElB,MAAM,WAAW,GAAG,EAAE,CAAC;QAGvB,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAG7C,OAAO,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,CAAC,OAAO,CAAC,QAAQ,EAAE,cAAc;QACrC,OAAO,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,cAAc,IAAI,EAAE,CAAC,CAAC;IAC5D,CAAC;CACF;AAfD,gCAeC"}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.JwtUtil = void 0;
|
4
|
+
const jwt = require("jsonwebtoken");
|
5
|
+
class JwtUtil {
|
6
|
+
static sign({ config, data }) {
|
7
|
+
const { secret, expiresIn } = config;
|
8
|
+
return jwt.sign({ data }, secret, { expiresIn });
|
9
|
+
}
|
10
|
+
static verify({ config, authorization }) {
|
11
|
+
return jwt.verify((authorization || "").substring(7), config.secret);
|
12
|
+
}
|
13
|
+
}
|
14
|
+
exports.JwtUtil = JwtUtil;
|
15
|
+
//# sourceMappingURL=jwt.util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"jwt.util.js","sourceRoot":"","sources":["../../src/utils/jwt.util.ts"],"names":[],"mappings":";;;AAAA,oCAAoC;AAEpC,MAAa,OAAO;IAClB,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE;QAC1B,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC;QAErC,OAAO,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE;QACrC,OAAO,GAAG,CAAC,MAAM,CAAC,CAAC,aAAa,IAAI,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACvE,CAAC;CACF;AAVD,0BAUC"}
|
@@ -0,0 +1,20 @@
|
|
1
|
+
import Redis from "ioredis";
|
2
|
+
export declare class SmsCaptchaUtil {
|
3
|
+
private readonly redis;
|
4
|
+
constructor(redis: Redis);
|
5
|
+
send({ config, countryCode, phoneNumber }: {
|
6
|
+
config: any;
|
7
|
+
countryCode?: string;
|
8
|
+
phoneNumber: any;
|
9
|
+
}): Promise<{
|
10
|
+
phoneNumber: any;
|
11
|
+
captcha: any;
|
12
|
+
}>;
|
13
|
+
verify({ phoneNumber, captcha }: {
|
14
|
+
phoneNumber: any;
|
15
|
+
captcha: any;
|
16
|
+
}): Promise<{
|
17
|
+
phoneNumber: any;
|
18
|
+
captcha: any;
|
19
|
+
}>;
|
20
|
+
}
|
@@ -0,0 +1,57 @@
|
|
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.SmsCaptchaUtil = void 0;
|
16
|
+
const common_1 = require("@nestjs/common");
|
17
|
+
const nestjs_redis_1 = require("@songkeys/nestjs-redis");
|
18
|
+
const ioredis_1 = require("ioredis");
|
19
|
+
const tencent_cloud_sms_util_1 = require("./tencent-cloud-sms.util");
|
20
|
+
const REDIS_KEY_PREFIX = "smsCaptcha:";
|
21
|
+
const WAIT_REDIS_KEY_PREFIX = "smsCaptchaWait:";
|
22
|
+
let SmsCaptchaUtil = class SmsCaptchaUtil {
|
23
|
+
constructor(redis) {
|
24
|
+
this.redis = redis;
|
25
|
+
}
|
26
|
+
async send({ config, countryCode = "86", phoneNumber }) {
|
27
|
+
const { captcha: { storage: { expiresIn, waitExpiresIn }, }, } = config;
|
28
|
+
if (await this.redis.get(`${WAIT_REDIS_KEY_PREFIX}${phoneNumber}`)) {
|
29
|
+
throw new common_1.NotAcceptableException("服务器忙,请稍后");
|
30
|
+
}
|
31
|
+
const { captcha } = await tencent_cloud_sms_util_1.TencentCloudSmsUtil.sendCaptcha({
|
32
|
+
config,
|
33
|
+
countryCode,
|
34
|
+
phoneNumber,
|
35
|
+
});
|
36
|
+
await this.redis.set(`${REDIS_KEY_PREFIX}${phoneNumber}`, captcha, "EX", expiresIn / 1000);
|
37
|
+
await this.redis.set(`${WAIT_REDIS_KEY_PREFIX}${phoneNumber}`, captcha, "EX", waitExpiresIn / 1000);
|
38
|
+
return { phoneNumber, captcha };
|
39
|
+
}
|
40
|
+
async verify({ phoneNumber, captcha }) {
|
41
|
+
const value = await this.redis.get(`${REDIS_KEY_PREFIX}${phoneNumber}`);
|
42
|
+
if (!value) {
|
43
|
+
throw new common_1.NotFoundException("验证码不存在");
|
44
|
+
}
|
45
|
+
if (captcha !== value) {
|
46
|
+
throw new common_1.NotFoundException("验证码错误");
|
47
|
+
}
|
48
|
+
return { phoneNumber, captcha };
|
49
|
+
}
|
50
|
+
};
|
51
|
+
exports.SmsCaptchaUtil = SmsCaptchaUtil;
|
52
|
+
exports.SmsCaptchaUtil = SmsCaptchaUtil = __decorate([
|
53
|
+
(0, common_1.Injectable)(),
|
54
|
+
__param(0, (0, nestjs_redis_1.InjectRedis)()),
|
55
|
+
__metadata("design:paramtypes", [ioredis_1.default])
|
56
|
+
], SmsCaptchaUtil);
|
57
|
+
//# sourceMappingURL=sms-captcha.util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"sms-captcha.util.js","sourceRoot":"","sources":["../../src/utils/sms-captcha.util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAIwB;AACxB,yDAAqD;AACrD,qCAA4B;AAC5B,qEAA+D;AAE/D,MAAM,gBAAgB,GAAG,aAAa,CAAC;AACvC,MAAM,qBAAqB,GAAG,iBAAiB,CAAC;AAGzC,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAA4C,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAE5D,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,EAAE,WAAW,EAAE;QACpD,MAAM,EACJ,OAAO,EAAE,EACP,OAAO,EAAE,EAAE,SAAS,EAAE,aAAa,EAAE,GACtC,GACF,GAAG,MAAM,CAAC;QAEX,IAAI,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,qBAAqB,GAAG,WAAW,EAAE,CAAC,EAAE,CAAC;YACnE,MAAM,IAAI,+BAAsB,CAAC,UAAU,CAAC,CAAC;QAC/C,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,4CAAmB,CAAC,WAAW,CAAC;YACxD,MAAM;YACN,WAAW;YACX,WAAW;SACZ,CAAC,CAAC;QAEH,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,GAAG,gBAAgB,GAAG,WAAW,EAAE,EACnC,OAAO,EACP,IAAI,EACJ,SAAS,GAAG,IAAI,CACjB,CAAC;QAEF,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAClB,GAAG,qBAAqB,GAAG,WAAW,EAAE,EACxC,OAAO,EACP,IAAI,EACJ,aAAa,GAAG,IAAI,CACrB,CAAC;QAEF,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;QACnC,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,WAAW,EAAE,CAAC,CAAC;QAExE,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,0BAAiB,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,EAAE,CAAC;YACtB,MAAM,IAAI,0BAAiB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,CAAC;IAClC,CAAC;CACF,CAAA;AAlDY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,0BAAW,GAAE,CAAA;qCAAyB,iBAAK;GAD7C,cAAc,CAkD1B"}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
import Redis from "ioredis";
|
2
|
+
export declare class SvgCaptchaUtil {
|
3
|
+
private readonly redis;
|
4
|
+
constructor(redis: Redis);
|
5
|
+
send({ clientId, options }?: {
|
6
|
+
clientId?: string;
|
7
|
+
options?: {};
|
8
|
+
}): Promise<any>;
|
9
|
+
verify({ ip, captchaText }: {
|
10
|
+
ip: any;
|
11
|
+
captchaText: any;
|
12
|
+
}): Promise<any>;
|
13
|
+
}
|
@@ -0,0 +1,48 @@
|
|
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.SvgCaptchaUtil = void 0;
|
16
|
+
const common_1 = require("@nestjs/common");
|
17
|
+
const svgCaptcha = require("svg-captcha");
|
18
|
+
const nestjs_redis_1 = require("@songkeys/nestjs-redis");
|
19
|
+
const ioredis_1 = require("ioredis");
|
20
|
+
const REDIS_KEY_PREFIX = "svgCaptcha:";
|
21
|
+
const REDIS_EXPIRE_SECONDS = 60 * 10;
|
22
|
+
let SvgCaptchaUtil = class SvgCaptchaUtil {
|
23
|
+
constructor(redis) {
|
24
|
+
this.redis = redis;
|
25
|
+
}
|
26
|
+
async send({ clientId = "", options = {} } = {}) {
|
27
|
+
const captcha = svgCaptcha.create(options);
|
28
|
+
await this.redis.setex(`${REDIS_KEY_PREFIX}${clientId}`, REDIS_EXPIRE_SECONDS, captcha.text);
|
29
|
+
return captcha;
|
30
|
+
}
|
31
|
+
async verify({ ip, captchaText }) {
|
32
|
+
const value = await this.redis.get(`${REDIS_KEY_PREFIX}${ip}`);
|
33
|
+
if (!value) {
|
34
|
+
throw new common_1.NotFoundException("验证码不存在");
|
35
|
+
}
|
36
|
+
if (captchaText !== value) {
|
37
|
+
throw new common_1.NotFoundException("验证码错误");
|
38
|
+
}
|
39
|
+
return { ip, captchaText };
|
40
|
+
}
|
41
|
+
};
|
42
|
+
exports.SvgCaptchaUtil = SvgCaptchaUtil;
|
43
|
+
exports.SvgCaptchaUtil = SvgCaptchaUtil = __decorate([
|
44
|
+
(0, common_1.Injectable)(),
|
45
|
+
__param(0, (0, nestjs_redis_1.InjectRedis)()),
|
46
|
+
__metadata("design:paramtypes", [ioredis_1.default])
|
47
|
+
], SvgCaptchaUtil);
|
48
|
+
//# sourceMappingURL=svg-captcha.util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"svg-captcha.util.js","sourceRoot":"","sources":["../../src/utils/svg-captcha.util.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAAA,2CAA+D;AAC/D,0CAA0C;AAC1C,yDAAqD;AACrD,qCAA4B;AAE5B,MAAM,gBAAgB,GAAG,aAAa,CAAC;AACvC,MAAM,oBAAoB,GAAG,EAAE,GAAG,EAAE,CAAC;AAG9B,IAAM,cAAc,GAApB,MAAM,cAAc;IACzB,YAA4C,KAAY;QAAZ,UAAK,GAAL,KAAK,CAAO;IAAG,CAAC;IAE5D,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,GAAG,EAAE,EAAE,OAAO,GAAG,EAAE,EAAE,GAAG,EAAE;QAC7C,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAE3C,MAAM,IAAI,CAAC,KAAK,CAAC,KAAK,CACpB,GAAG,gBAAgB,GAAG,QAAQ,EAAE,EAChC,oBAAoB,EACpB,OAAO,CAAC,IAAI,CACb,CAAC;QAEF,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE;QAC9B,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,gBAAgB,GAAG,EAAE,EAAE,CAAC,CAAC;QAE/D,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,MAAM,IAAI,0BAAiB,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC;QAED,IAAI,WAAW,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,IAAI,0BAAiB,CAAC,OAAO,CAAC,CAAC;QACvC,CAAC;QAED,OAAO,EAAE,EAAE,EAAE,WAAW,EAAE,CAAC;IAC7B,CAAC;CACF,CAAA;AA5BY,wCAAc;yBAAd,cAAc;IAD1B,IAAA,mBAAU,GAAE;IAEE,WAAA,IAAA,0BAAW,GAAE,CAAA;qCAAyB,iBAAK;GAD7C,cAAc,CA4B1B"}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
export declare class TencentCloudSmsUtil {
|
2
|
+
static sendMessage({ config, countryCode, phoneNumber, templateId, params, }: {
|
3
|
+
config: any;
|
4
|
+
countryCode?: string;
|
5
|
+
phoneNumber: any;
|
6
|
+
templateId: any;
|
7
|
+
params: any;
|
8
|
+
}): Promise<unknown>;
|
9
|
+
static sendCaptcha({ config, countryCode, phoneNumber, }: {
|
10
|
+
config: any;
|
11
|
+
countryCode?: string;
|
12
|
+
phoneNumber: any;
|
13
|
+
}): Promise<any>;
|
14
|
+
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
"use strict";
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
3
|
+
exports.TencentCloudSmsUtil = void 0;
|
4
|
+
const QCloudSms = require("qcloudsms_js");
|
5
|
+
const base_util_1 = require("./base.util");
|
6
|
+
class TencentCloudSmsUtil {
|
7
|
+
static sendMessage({ config, countryCode = "86", phoneNumber, templateId, params, }) {
|
8
|
+
const { appId, appKey, sign } = config.config;
|
9
|
+
return new Promise((resolve, reject) => {
|
10
|
+
QCloudSms(appId, appKey)
|
11
|
+
.SmsSingleSender()
|
12
|
+
.sendWithParam(countryCode, phoneNumber, templateId, params, sign, "", "", (err, res, resData) => {
|
13
|
+
err ? reject(err) : resolve(resData);
|
14
|
+
});
|
15
|
+
});
|
16
|
+
}
|
17
|
+
static sendCaptcha({ config, countryCode = "86", phoneNumber, }) {
|
18
|
+
const { config: { appId, appKey, sign }, captcha: { templateId }, } = config;
|
19
|
+
const random = base_util_1.BaseUtil.getRandomNumber(6);
|
20
|
+
const params = [random, "10"];
|
21
|
+
return new Promise((resolve, reject) => {
|
22
|
+
QCloudSms(appId, appKey)
|
23
|
+
.SmsSingleSender()
|
24
|
+
.sendWithParam(countryCode, phoneNumber, templateId, params, sign, "", "", (err, res, resData) => {
|
25
|
+
err ? reject(err) : resolve({ ...resData, captcha: random });
|
26
|
+
});
|
27
|
+
});
|
28
|
+
}
|
29
|
+
}
|
30
|
+
exports.TencentCloudSmsUtil = TencentCloudSmsUtil;
|
31
|
+
//# sourceMappingURL=tencent-cloud-sms.util.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"tencent-cloud-sms.util.js","sourceRoot":"","sources":["../../src/utils/tencent-cloud-sms.util.ts"],"names":[],"mappings":";;;AAAA,0CAA0C;AAC1C,2CAAuC;AAEvC,MAAa,mBAAmB;IAC9B,MAAM,CAAC,WAAW,CAAC,EACjB,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,WAAW,EACX,UAAU,EACV,MAAM,GACP;QACC,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC,MAAM,CAAC;QAE9C,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;iBACrB,eAAe,EAAE;iBACjB,aAAa,CACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,MAAM,EACN,IAAI,EACJ,EAAE,EACF,EAAE,EACF,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;gBACpB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YACvC,CAAC,CACF,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,WAAW,CAAC,EACjB,MAAM,EACN,WAAW,GAAG,IAAI,EAClB,WAAW,GACZ;QACC,MAAM,EACJ,MAAM,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,EAC/B,OAAO,EAAE,EAAE,UAAU,EAAE,GACxB,GAAG,MAAM,CAAC;QACX,MAAM,MAAM,GAAG,oBAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAC3C,MAAM,MAAM,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QAE9B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YACrC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC;iBACrB,eAAe,EAAE;iBACjB,aAAa,CACZ,WAAW,EACX,WAAW,EACX,UAAU,EACV,MAAM,EACN,IAAI,EACJ,EAAE,EACF,EAAE,EACF,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE;gBACpB,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,GAAG,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAAC;YAC/D,CAAC,CACF,CAAC;QACN,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AAzDD,kDAyDC"}
|
@@ -0,0 +1,5 @@
|
|
1
|
+
import { ValidationArguments, ValidatorConstraintInterface } from "class-validator";
|
2
|
+
export declare class BaseValidator implements ValidatorConstraintInterface {
|
3
|
+
validate(text: string, args: ValidationArguments): boolean;
|
4
|
+
defaultMessage(args: ValidationArguments): string;
|
5
|
+
}
|
@@ -0,0 +1,23 @@
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
9
|
+
exports.BaseValidator = void 0;
|
10
|
+
const class_validator_1 = require("class-validator");
|
11
|
+
let BaseValidator = class BaseValidator {
|
12
|
+
validate(text, args) {
|
13
|
+
return (text.length >= args.constraints[0] && text.length <= args.constraints[1]);
|
14
|
+
}
|
15
|
+
defaultMessage(args) {
|
16
|
+
return `${args.constraints[0]}-${args.constraints[1]}`;
|
17
|
+
}
|
18
|
+
};
|
19
|
+
exports.BaseValidator = BaseValidator;
|
20
|
+
exports.BaseValidator = BaseValidator = __decorate([
|
21
|
+
(0, class_validator_1.ValidatorConstraint)()
|
22
|
+
], BaseValidator);
|
23
|
+
//# sourceMappingURL=base.validator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"base.validator.js","sourceRoot":"","sources":["../../src/validators/base.validator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qDAIyB;AAGlB,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,QAAQ,CAAC,IAAY,EAAE,IAAyB;QAC9C,OAAO,CACL,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CACzE,CAAC;IACJ,CAAC;IAED,cAAc,CAAC,IAAyB;QACtC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,CAAC;CACF,CAAA;AAVY,sCAAa;wBAAb,aAAa;IADzB,IAAA,qCAAmB,GAAE;GACT,aAAa,CAUzB"}
|
@@ -0,0 +1,23 @@
|
|
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
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
9
|
+
exports.IsPhoneNumber = void 0;
|
10
|
+
const class_validator_1 = require("class-validator");
|
11
|
+
let IsPhoneNumber = class IsPhoneNumber {
|
12
|
+
validate(text) {
|
13
|
+
return /^1\d{2}\s?\d{4}\s?\d{4}$/.test(text);
|
14
|
+
}
|
15
|
+
defaultMessage() {
|
16
|
+
return "手机号格式错误";
|
17
|
+
}
|
18
|
+
};
|
19
|
+
exports.IsPhoneNumber = IsPhoneNumber;
|
20
|
+
exports.IsPhoneNumber = IsPhoneNumber = __decorate([
|
21
|
+
(0, class_validator_1.ValidatorConstraint)()
|
22
|
+
], IsPhoneNumber);
|
23
|
+
//# sourceMappingURL=is-phone-number.validator.js.map
|
@@ -0,0 +1 @@
|
|
1
|
+
{"version":3,"file":"is-phone-number.validator.js","sourceRoot":"","sources":["../../src/validators/is-phone-number.validator.ts"],"names":[],"mappings":";;;;;;;;;AAAA,qDAGyB;AAGlB,IAAM,aAAa,GAAnB,MAAM,aAAa;IACxB,QAAQ,CAAC,IAAY;QACnB,OAAO,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;IAED,cAAc;QACZ,OAAO,SAAS,CAAC;IACnB,CAAC;CACF,CAAA;AARY,sCAAa;wBAAb,aAAa;IADzB,IAAA,qCAAmB,GAAE;GACT,aAAa,CAQzB"}
|
package/package.json
CHANGED
@@ -1,11 +1,87 @@
|
|
1
|
-
{
|
2
|
-
"name": "nestjs-base",
|
3
|
-
"version": "
|
4
|
-
"description": "",
|
5
|
-
"
|
6
|
-
"
|
7
|
-
|
8
|
-
|
9
|
-
"
|
10
|
-
"
|
11
|
-
|
1
|
+
{
|
2
|
+
"name": "nestjs-base",
|
3
|
+
"version": "1.0.1",
|
4
|
+
"description": "Nest Toolkit",
|
5
|
+
"author": "zhaojintian",
|
6
|
+
"license": "UNLICENSED",
|
7
|
+
"main": "dist/index.js",
|
8
|
+
"typings": "dist/index.d.ts",
|
9
|
+
"files": ["dist"],
|
10
|
+
"scripts": {
|
11
|
+
"build": "nest build",
|
12
|
+
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
|
13
|
+
"start": "nest start",
|
14
|
+
"start:dev": "nest start --watch",
|
15
|
+
"start:debug": "nest start --debug --watch",
|
16
|
+
"start:prod": "node dist/main",
|
17
|
+
"lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
|
18
|
+
"test": "jest",
|
19
|
+
"test:watch": "jest --watch",
|
20
|
+
"test:cov": "jest --coverage",
|
21
|
+
"test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
|
22
|
+
"test:e2e": "jest --config ./test/jest-e2e.json"
|
23
|
+
},
|
24
|
+
"dependencies": {
|
25
|
+
"@nestjs/common": "^10.0.0",
|
26
|
+
"@nestjs/core": "^10.0.0",
|
27
|
+
"@nestjs/platform-express": "^10.0.0",
|
28
|
+
"@nestjs/swagger": "^7.1.17",
|
29
|
+
"@songkeys/nestjs-redis": "^10.0.0",
|
30
|
+
"bcrypt": "^5.1.1",
|
31
|
+
"class-transformer": "^0.5.1",
|
32
|
+
"class-validator": "^0.14.0",
|
33
|
+
"dayjs": "^1.11.10",
|
34
|
+
"express": "^4.18.2",
|
35
|
+
"ioredis": "^5.3.2",
|
36
|
+
"jsonwebtoken": "^9.0.2",
|
37
|
+
"lodash": "^4.17.21",
|
38
|
+
"qcloudsms_js": "^0.1.1",
|
39
|
+
"reflect-metadata": "^0.1.13",
|
40
|
+
"rxjs": "^7.8.1",
|
41
|
+
"sequelize": "^6.35.2",
|
42
|
+
"sequelize-typescript": "^2.1.6",
|
43
|
+
"snowflake-id": "^1.1.0",
|
44
|
+
"svg-captcha": "^1.4.0"
|
45
|
+
},
|
46
|
+
"devDependencies": {
|
47
|
+
"@nestjs/cli": "^10.0.0",
|
48
|
+
"@nestjs/schematics": "^10.0.0",
|
49
|
+
"@nestjs/testing": "^10.0.0",
|
50
|
+
"@types/express": "^4.17.17",
|
51
|
+
"@types/jest": "^29.5.2",
|
52
|
+
"@types/lodash": "^4.14.202",
|
53
|
+
"@types/node": "^20.3.1",
|
54
|
+
"@types/supertest": "^2.0.12",
|
55
|
+
"@typescript-eslint/eslint-plugin": "^6.0.0",
|
56
|
+
"@typescript-eslint/parser": "^6.0.0",
|
57
|
+
"eslint": "^8.42.0",
|
58
|
+
"eslint-config-prettier": "^9.0.0",
|
59
|
+
"eslint-plugin-prettier": "^5.0.0",
|
60
|
+
"jest": "^29.5.0",
|
61
|
+
"prettier": "^3.0.0",
|
62
|
+
"source-map-support": "^0.5.21",
|
63
|
+
"supertest": "^6.3.3",
|
64
|
+
"ts-jest": "^29.1.0",
|
65
|
+
"ts-loader": "^9.4.3",
|
66
|
+
"ts-node": "^10.9.1",
|
67
|
+
"tsconfig-paths": "^4.2.0",
|
68
|
+
"typescript": "^5.1.3"
|
69
|
+
},
|
70
|
+
"jest": {
|
71
|
+
"moduleFileExtensions": [
|
72
|
+
"js",
|
73
|
+
"json",
|
74
|
+
"ts"
|
75
|
+
],
|
76
|
+
"rootDir": "src",
|
77
|
+
"testRegex": ".*\\.spec\\.ts$",
|
78
|
+
"transform": {
|
79
|
+
"^.+\\.(t|j)s$": "ts-jest"
|
80
|
+
},
|
81
|
+
"collectCoverageFrom": [
|
82
|
+
"**/*.(t|j)s"
|
83
|
+
],
|
84
|
+
"coverageDirectory": "../coverage",
|
85
|
+
"testEnvironment": "node"
|
86
|
+
}
|
87
|
+
}
|