mirror of
https://github.com/certd/certd.git
synced 2026-06-27 05:47:34 +08:00
feat: 通过插件配置懒加载依赖,动态加载第三方依赖包,精简安装镜像大小
This commit is contained in:
@@ -6,6 +6,7 @@ import { SmsServiceFactory } from "../sms/factory.js";
|
||||
import { CaptchaService } from "./captcha-service.js";
|
||||
import { EmailService } from "./email-service.js";
|
||||
import { CaptchaRequest } from "../../../plugins/plugin-captcha/api.js";
|
||||
import { RuntimeDepsService } from "../../runtime-deps/runtime-deps-service.js";
|
||||
|
||||
// {data: '<svg.../svg>', text: 'abcd'}
|
||||
/**
|
||||
@@ -24,6 +25,9 @@ export class CodeService {
|
||||
@Inject()
|
||||
captchaService: CaptchaService;
|
||||
|
||||
@Inject()
|
||||
runtimeDepsService: RuntimeDepsService;
|
||||
|
||||
async checkCaptcha(body: any, req: CaptchaRequest) {
|
||||
return await this.captchaService.doValidate({ form: body, req });
|
||||
}
|
||||
@@ -53,9 +57,10 @@ export class CodeService {
|
||||
const smsConfig = sysSettings.sms.config;
|
||||
const sender: ISmsService = await SmsServiceFactory.createSmsService(smsType);
|
||||
const accessGetter = new AccessSysGetter(this.accessService);
|
||||
sender.setCtx({
|
||||
await sender.setCtx({
|
||||
accessService: accessGetter,
|
||||
config: smsConfig,
|
||||
runtimeDepsService: this.runtimeDepsService,
|
||||
});
|
||||
const smsCode = randomNumber(verificationCodeLength);
|
||||
await sender.sendSmsCode({
|
||||
|
||||
@@ -44,7 +44,7 @@ export class AliyunSmsService implements ISmsService {
|
||||
|
||||
ctx: SmsPluginCtx<AliyunSmsConfig>;
|
||||
|
||||
setCtx(ctx: any) {
|
||||
async setCtx(ctx: any) {
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
import { FormItemProps, IAccessService } from "@certd/pipeline";
|
||||
import type { RuntimeDepsService } from "../../runtime-deps/runtime-deps-service.js";
|
||||
|
||||
export interface ISmsService {
|
||||
sendSmsCode(opts: { mobile: string; code: string; phoneCode: string }): Promise<void>;
|
||||
setCtx(ctx: { accessService: IAccessService; config: { [key: string]: any } }): void;
|
||||
setCtx(ctx: { accessService: IAccessService; config: { [key: string]: any }; runtimeDepsService?: RuntimeDepsService }): Promise<void>;
|
||||
}
|
||||
|
||||
export type PluginInputs<T = any> = {
|
||||
@@ -12,4 +13,5 @@ export type PluginInputs<T = any> = {
|
||||
export type SmsPluginCtx<T = any> = {
|
||||
accessService: IAccessService;
|
||||
config: T;
|
||||
runtimeDepsService?: RuntimeDepsService;
|
||||
};
|
||||
|
||||
@@ -68,12 +68,20 @@ export class TencentSmsService implements ISmsService {
|
||||
|
||||
ctx: SmsPluginCtx<TencentSmsConfig>;
|
||||
|
||||
setCtx(ctx: any) {
|
||||
async setCtx(ctx: any) {
|
||||
this.ctx = ctx;
|
||||
if (this.ctx.runtimeDepsService) {
|
||||
await this.ctx.runtimeDepsService.ensureDependencies({
|
||||
"tencentcloud-sdk-nodejs": "^4.1.112",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
async getClient() {
|
||||
const sdk = await import("tencentcloud-sdk-nodejs/tencentcloud/services/sms/v20210111/index.js");
|
||||
if (!this.ctx.runtimeDepsService) {
|
||||
throw new Error("动态依赖服务未初始化,无法加载腾讯云短信SDK");
|
||||
}
|
||||
const sdk = await this.ctx.runtimeDepsService.importRuntime("tencentcloud-sdk-nodejs/tencentcloud/services/sms/v20210111/index.js");
|
||||
const client = sdk.v20210111.Client;
|
||||
const access = await this.ctx.accessService.getById<TencentAccess>(this.ctx.config.accessId);
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ export class YfySmsService implements ISmsService {
|
||||
|
||||
ctx: SmsPluginCtx<YfySmsConfig>;
|
||||
|
||||
setCtx(ctx: any) {
|
||||
async setCtx(ctx: SmsPluginCtx<YfySmsConfig>) {
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user