فهرست منبع

feat(rcs-number): 新增 dashboard 服务实现

- 添加 dashboard服务类,实现 RCS 号码相关功能
- 在 RCS 号码模块中注册 dashboard 服务- 更新 RCS 号码服务,支持 dashboard 服务
- 在任务服务中添加 dashboard 余额查询功能
wui 1 سال پیش
والد
کامیت
dd7a0aedc7

+ 3 - 1
src/rcs-number/entities/rcs-number.entity.ts

@@ -2,6 +2,7 @@ import { Column, CreateDateColumn, Entity, Index, PrimaryGeneratedColumn } from
 import { JsonTransformer } from '../../transformers/json.transformer'
 import { JsonTransformer } from '../../transformers/json.transformer'
 import { Exclude } from 'class-transformer'
 import { Exclude } from 'class-transformer'
 import { durainus } from '../impl/durainus.service'
 import { durainus } from '../impl/durainus.service'
+import { dashboard } from '../impl/dashboard.service'
 
 
 export enum RcsNumberStatus {
 export enum RcsNumberStatus {
     PENDING = 'pending',
     PENDING = 'pending',
@@ -29,7 +30,8 @@ export enum RcsNumberSource {
     cowboy = 'cowboy',
     cowboy = 'cowboy',
     durainus = 'durainus',
     durainus = 'durainus',
     textverified = 'textverified',
     textverified = 'textverified',
-    usapanel = 'usapanel'
+    usapanel = 'usapanel',
+    dashboard = 'dashboard'
 }
 }
 
 
 @Entity()
 @Entity()

+ 67 - 0
src/rcs-number/impl/dashboard.service.ts

@@ -0,0 +1,67 @@
+import { GetNumberResponse, GetNumberService } from './get-number-service'
+import { RcsNumberSource } from '../entities/rcs-number.entity'
+import axios from 'axios'
+import { InternalServerErrorException } from '@nestjs/common'
+
+const API_KEY = '6619f084-363c-4518-b5b8-57b5e01a9c95'
+const SERVICE_ID = 'e6099b02-1221-476a-8423-6417a8dad0be'
+
+const axiosInstance = axios.create({
+    baseURL: 'https://code.smscodes.io/api/sms/'
+})
+
+const countryMap = {
+    US: 'US',
+    GB: 'UK',
+    AE: 'AE'
+}
+
+export class dashboard extends GetNumberService {
+    source: RcsNumberSource = RcsNumberSource.dashboard
+
+    async getNumber(country: string, num?: number): Promise<GetNumberResponse> {
+        const countryCode = countryMap[country]
+        if (!countryCode) {
+            throw new Error('No available country')
+        }
+        const res = await axiosInstance.get('GetServiceNumber', {
+            params: {
+                key: API_KEY,
+                iso: countryCode,
+                serv: SERVICE_ID
+            }
+        })
+        if (res.data.Status !== 'Success') {
+            throw new InternalServerErrorException(res.data.Error)
+        }
+
+        return {
+            number: res.data.Number,
+            orderId: res.data.SecurityId,
+            operatorCode: '',
+            operatorName: '',
+            rawResponse: res.data
+        }
+    }
+
+    async releaseNumber(number: string) {}
+
+    async retriveMessage(orderId: string, num?: number): Promise<string> {
+        const res = await axiosInstance.get('GetSMSCode', {
+            params: {
+                key: API_KEY,
+                sid: orderId,
+                number: num
+            }
+        })
+        if (res.data.Status === 'Success' && res.data.SMS !== 'Message not received yet') {
+            return res.data.SMS
+        }
+    }
+
+    async blockNumber(number: string) {}
+
+    async cacheNumber(country: string, size: number) {
+        return null
+    }
+}

+ 3 - 1
src/rcs-number/rcs-number.module.ts

@@ -22,6 +22,7 @@ import { durainus } from './impl/durainus.service'
 import { SysConfigModule } from 'src/sys-config/sys-config.module'
 import { SysConfigModule } from 'src/sys-config/sys-config.module'
 import { usapanel } from './impl/usapanel.service'
 import { usapanel } from './impl/usapanel.service'
 import { textverified } from './impl/textverified.service'
 import { textverified } from './impl/textverified.service'
+import { dashboard } from './impl/dashboard.service'
 
 
 @Module({
 @Module({
     imports: [
     imports: [
@@ -46,7 +47,8 @@ import { textverified } from './impl/textverified.service'
         cowboy,
         cowboy,
         durainus,
         durainus,
         usapanel,
         usapanel,
-        textverified
+        textverified,
+        dashboard
     ],
     ],
     controllers: [RcsNumberController],
     controllers: [RcsNumberController],
     exports: [RcsNumberService]
     exports: [RcsNumberService]

+ 4 - 0
src/rcs-number/rcs-number.service.ts

@@ -32,6 +32,7 @@ import Redis from 'ioredis'
 import { Channel } from '../channel/entities/channel.entities'
 import { Channel } from '../channel/entities/channel.entities'
 import { durainus } from './impl/durainus.service'
 import { durainus } from './impl/durainus.service'
 import { usapanel } from './impl/usapanel.service'
 import { usapanel } from './impl/usapanel.service'
+import { dashboard } from './impl/dashboard.service'
 
 
 @Injectable()
 @Injectable()
 export class RcsNumberService {
 export class RcsNumberService {
@@ -68,6 +69,7 @@ export class RcsNumberService {
         private durainus: durainus,
         private durainus: durainus,
         private usapanel: usapanel,
         private usapanel: usapanel,
         private textverified: textverified,
         private textverified: textverified,
+        private dashboard: dashboard,
         private readonly redisService: RedisService
         private readonly redisService: RedisService
     ) {
     ) {
         this.cloud033 = new cloud214('100033', '1e40ca9795b1fc038db76512175d59b5', RcsNumberSource.cloud033)
         this.cloud033 = new cloud214('100033', '1e40ca9795b1fc038db76512175d59b5', RcsNumberSource.cloud033)
@@ -311,6 +313,8 @@ export class RcsNumberService {
                 return this.textverified
                 return this.textverified
             case RcsNumberSource.usapanel:
             case RcsNumberSource.usapanel:
                 return this.usapanel
                 return this.usapanel
+            case RcsNumberSource.dashboard:
+                return this.dashboard
             default:
             default:
                 throw new ServiceUnavailableException('不支持的短信通道')
                 throw new ServiceUnavailableException('不支持的短信通道')
         }
         }

+ 18 - 1
src/task/task.service.ts

@@ -38,6 +38,7 @@ import { BalanceRecord, BalanceType } from '../balance/entities/balance-record.e
 import { Device } from '../device/entities/device.entity'
 import { Device } from '../device/entities/device.entity'
 import Decimal from 'decimal.js'
 import Decimal from 'decimal.js'
 import { CountryConfigService } from '../country-config/country-config.service'
 import { CountryConfigService } from '../country-config/country-config.service'
+import { dashboard } from '../rcs-number/impl/dashboard.service'
 
 
 @Injectable()
 @Injectable()
 export class TaskService implements OnModuleInit {
 export class TaskService implements OnModuleInit {
@@ -686,7 +687,8 @@ export class TaskService implements OnModuleInit {
             cloud050: 0,
             cloud050: 0,
             xyz: 0,
             xyz: 0,
             cowboy: 0,
             cowboy: 0,
-            usapanel: 0
+            usapanel: 0,
+            dashboard: 0
         }
         }
         const cloudInstance = axios.create({
         const cloudInstance = axios.create({
             baseURL: 'http://52.77.17.214:9001/api/'
             baseURL: 'http://52.77.17.214:9001/api/'
@@ -697,6 +699,9 @@ export class TaskService implements OnModuleInit {
         const panelInstance = axios.create({
         const panelInstance = axios.create({
             baseURL: 'https://panel.hellomeetyou.com/api/'
             baseURL: 'https://panel.hellomeetyou.com/api/'
         })
         })
+        const dashboardInstance = axios.create({
+            baseURL: 'https://code.smscodes.io/api/sms/'
+        })
         await Promise.all([
         await Promise.all([
             (async () => {
             (async () => {
                 try {
                 try {
@@ -832,6 +837,18 @@ export class TaskService implements OnModuleInit {
                         res.usapanel = panelRes.data.balance
                         res.usapanel = panelRes.data.balance
                     }
                     }
                 } catch (e) {}
                 } catch (e) {}
+            })(),
+            (async () => {
+                try {
+                    const dashboardRes = await dashboardInstance.get('GetBalance', {
+                        params: {
+                            key: '6619f084-363c-4518-b5b8-57b5e01a9c95'
+                        }
+                    })
+                    if (dashboardRes.data.Status === 'Success') {
+                        res.dashboard = dashboardRes.data.Balance
+                    }
+                } catch (e) {}
             })()
             })()
         ])
         ])
         return res
         return res