98 lines
3.7 KiB
TypeScript
98 lines
3.7 KiB
TypeScript
import { Module } from '@nestjs/common';
|
|
import { BullModule } from '@nestjs/bullmq';
|
|
import { loadAppConfig } from '@dukang/shared-types';
|
|
import { SmsCodeStore } from './sms/sms-code.store';
|
|
import { SmsMockProvider } from './sms/sms.mock.provider';
|
|
import { SmsAliyunProvider } from './sms/sms.aliyun.provider';
|
|
import { PayMockProvider } from './pay/pay.mock.provider';
|
|
import { PayWechatProvider } from './pay/pay.wechat.provider';
|
|
import { DeliveryMockProvider } from './delivery/delivery.mock.provider';
|
|
import { WechatApiProvider } from './wechat/wechat.api.provider';
|
|
import { WechatDisabledProvider } from './wechat/wechat.disabled.provider';
|
|
import { WechatMockProvider } from './wechat/wechat.mock.provider';
|
|
import { OssMockProvider } from './oss/oss.mock.provider';
|
|
import { OssAliyunProvider } from './oss/oss.aliyun.provider';
|
|
import { TencentLbsProvider } from './map/tencent-lbs.provider';
|
|
import {
|
|
SMS_PROVIDER,
|
|
PAY_PROVIDER,
|
|
DELIVERY_PROVIDER,
|
|
WECHAT_PROVIDER,
|
|
OSS_PROVIDER,
|
|
MAP_PROVIDER,
|
|
} from './integrations.constants';
|
|
import { CourierModule } from './courier/courier.module';
|
|
import { DELIVERY_QUEUE } from '../jobs/jobs.constants';
|
|
import type { IWechatProvider } from './wechat/wechat.interface';
|
|
import type { IPayProvider } from './pay/pay.interface';
|
|
import type { IOssProvider } from './oss/oss.interface';
|
|
import type { ISmsProvider } from './sms/sms.interface';
|
|
|
|
@Module({
|
|
imports: [BullModule.registerQueue({ name: DELIVERY_QUEUE }), CourierModule],
|
|
providers: [
|
|
SmsCodeStore,
|
|
SmsMockProvider,
|
|
SmsAliyunProvider,
|
|
{
|
|
provide: SMS_PROVIDER,
|
|
useFactory: (mock: SmsMockProvider, aliyun: SmsAliyunProvider): ISmsProvider => {
|
|
const cfg = loadAppConfig();
|
|
if (cfg.mockSms) return mock;
|
|
if (!aliyun.isEnabled()) {
|
|
throw new Error('MOCK_SMS=false but Aliyun SMS credentials are missing');
|
|
}
|
|
return aliyun;
|
|
},
|
|
inject: [SmsMockProvider, SmsAliyunProvider],
|
|
},
|
|
WechatApiProvider,
|
|
WechatDisabledProvider,
|
|
WechatMockProvider,
|
|
{
|
|
provide: WECHAT_PROVIDER,
|
|
useFactory: (
|
|
api: WechatApiProvider,
|
|
disabled: WechatDisabledProvider,
|
|
mock: WechatMockProvider,
|
|
): IWechatProvider => {
|
|
const cfg = loadAppConfig();
|
|
const enabled =
|
|
(cfg.wechatAuthEnabled || cfg.wechatPayEnabled) &&
|
|
(!!cfg.wxAppId || !!process.env.WX_MCH_ID);
|
|
if (enabled) return api;
|
|
// preV1:真实微信未配置但开启 Mock 授权登录
|
|
if (cfg.mockWechat) return mock;
|
|
return disabled;
|
|
},
|
|
inject: [WechatApiProvider, WechatDisabledProvider, WechatMockProvider],
|
|
},
|
|
PayMockProvider,
|
|
PayWechatProvider,
|
|
{
|
|
provide: PAY_PROVIDER,
|
|
useFactory: (mock: PayMockProvider, wechat: PayWechatProvider): IPayProvider => {
|
|
const cfg = loadAppConfig();
|
|
return cfg.mockPay ? mock : wechat;
|
|
},
|
|
inject: [PayMockProvider, PayWechatProvider],
|
|
},
|
|
{ provide: DELIVERY_PROVIDER, useClass: DeliveryMockProvider },
|
|
OssMockProvider,
|
|
OssAliyunProvider,
|
|
{
|
|
provide: OSS_PROVIDER,
|
|
useFactory: (mock: OssMockProvider, aliyun: OssAliyunProvider): IOssProvider => {
|
|
const cfg = loadAppConfig();
|
|
return cfg.ossEnabled && aliyun.isEnabled() ? aliyun : mock;
|
|
},
|
|
inject: [OssMockProvider, OssAliyunProvider],
|
|
},
|
|
DeliveryMockProvider,
|
|
TencentLbsProvider,
|
|
{ provide: MAP_PROVIDER, useExisting: TencentLbsProvider },
|
|
],
|
|
exports: [SMS_PROVIDER, SmsCodeStore, PAY_PROVIDER, DELIVERY_PROVIDER, WECHAT_PROVIDER, OSS_PROVIDER, MAP_PROVIDER, TencentLbsProvider, CourierModule],
|
|
})
|
|
export class IntegrationsModule {}
|