Преглед изворни кода

chore: Update dependencies and add country-related packages

x1ongzhu пре 1 година
родитељ
комит
d11d6463f8

+ 2 - 0
package.json

@@ -53,6 +53,8 @@
     "bignumber.js": "^9.1.1",
     "class-transformer": "^0.5.1",
     "class-validator": "^0.13.0",
+    "countries-list": "^3.1.1",
+    "country-list-with-dial-code-and-flag": "^5.0.5",
     "crypto": "^1.0.1",
     "date-fns": "^2.29.3",
     "decimal.js": "^10.4.3",

+ 8 - 0
src/device/device.service.ts

@@ -115,4 +115,12 @@ export class DeviceService {
             await this.deviceRepository.save(device)
         }
     }
+
+    async changeProfile(id: string) {
+        const device = await this.deviceRepository.findOneBy({ id })
+        if (device && device.pinCountry) {
+            const profiles = await this.ipmoyuProvider.genProfiles(device.pinCountry, 1)
+            await this.deviceRepository.update(id, { clashProfile: profiles[0] })
+        }
+    }
 }

+ 69 - 51
src/rcs-number/helpers.ts

@@ -1,60 +1,78 @@
 import { OperatorConfig } from 'src/operator_config/entities/operator-config.entiy'
+import { getCountryCode, getCountryData, getCountryDataList, getEmojiFlag } from 'countries-list'
+import type { ICountry, ICountryData, ILanguage, TContinentCode, TCountryCode, TLanguageCode } from 'countries-list'
+import CountryList from 'country-list-with-dial-code-and-flag'
 
 export function checkAndFormatNumber(country: string, number: string, carrierName?: string) {
-    if (/no service/i.test(carrierName) || /emergency calls only/i.test(carrierName) || /solo llamadas de emergencia/i.test(carrierName)) {
+    if (
+        /no service/i.test(carrierName) ||
+        /emergency calls only/i.test(carrierName) ||
+        /solo llamadas de emergencia/i.test(carrierName)
+    ) {
         throw new Error('Error carrierName')
     }
-    switch (country.toLowerCase()) {
-        case 'us':
-            number = number.replace(/^\+1/, '').replace(/^1(\d{10})$/, '$1')
-            if (!/^\d{10}$/.test(number)) {
-                throw new Error('Invalid US number')
-            }
-            break
-        case 'br':
-            // 巴西,11位,12位去掉前导0
-            if (number.length === 12 && number.charAt(0) === '0') {
-                number = number.substring(1)
-            }
-            if (number.length == 13 && number.includes('55')) {
-                number = number.substring(2)
-            }
-            if (!/^\d{11}$/.test(number)) {
-                throw new Error('Invalid Brazilian number')
-            }
-            break
-        case 'vn':
-            number = number.replace(/^\+84/, '').replace(/^84(\d{9})$/, '$1')
-            // 越南,号码为9位
-            if (!/^\d{9}$/.test(number)) {
-                throw new Error('Invalid Vietnamese number')
-            }
-            break
-        case 'in':
-            number = number.replace(/^\+91/, '').replace(/^91(\d{10})$/, '$1')
-            // 印度,号码为10位
-            if (!/^\d{10}$/.test(number)) {
-                throw new Error('Invalid Indian number')
-            }
-            break
-        case 'za':
-            // 南非号码为9位
-            number = number.replace(/^\+27/, '').replace(/^27(\d{9})$/, '$1')
-            if (!/^\d{9}$/.test(number)) {
-                throw new Error('Invalid South African number')
-            }
-            break
-        // case 'tr':
-        //     number = number.replace(/^\+90/, '').replace(/^90(\d{10})$/, '$1')
-        //     if (!/^\d{10}$/.test(number)) {
-        //         throw new Error('Invalid Turkish number')
-        //     }
-        //     if (!/vodafone TR/i.test(carrierName)){
-        //         throw new Error('Turkish Error carrierName')
-        //     }
-        //     break
-        default:
+    const countryData = CountryList.findOneByCountryCode(country.toUpperCase())
+
+    if (!countryData) {
+        throw new Error('Invalid country')
     }
+    let regex = new RegExp(`^(\\+?)(${countryData.countryCode.replace('+', '')})`)
+    number = number.replace(regex, '')
+
+    // switch (country.toLowerCase()) {
+    //     case 'us':
+    //         number = number.replace(/^\+1/, '').replace(/^1(\d{10})$/, '$1')
+    //         if (!/^\d{10}$/.test(number)) {
+    //             throw new Error('Invalid US number')
+    //         }
+    //         break
+    //     case 'br':
+    //         // 巴西,11位,12位去掉前导0
+    //         if (number.length === 12 && number.charAt(0) === '0') {
+    //             number = number.substring(1)
+    //         }
+    //         if (number.length == 13 && number.includes('55')) {
+    //             number = number.substring(2)
+    //         }
+    //         if (!/^\d{11}$/.test(number)) {
+    //             throw new Error('Invalid Brazilian number')
+    //         }
+    //         break
+    //     case 'vn':
+    //         number = number.replace(/^\+84/, '').replace(/^84(\d{9})$/, '$1')
+    //         // 越南,号码为9位
+    //         if (!/^\d{9}$/.test(number)) {
+    //             throw new Error('Invalid Vietnamese number')
+    //         }
+    //         break
+    //     case 'in':
+    //         number = number.replace(/^\+91/, '').replace(/^91(\d{10})$/, '$1')
+    //         // 印度,号码为10位
+    //         if (!/^\d{10}$/.test(number)) {
+    //             throw new Error('Invalid Indian number')
+    //         }
+    //         break
+    //     case 'za':
+    //         // 南非号码为9位
+    //         number = number.replace(/^\+27/, '').replace(/^27(\d{9})$/, '$1')
+    //         if (!/^\d{9}$/.test(number)) {
+    //             throw new Error('Invalid South African number')
+    //         }
+    //         break
+    //     case 've':
+    //         number = number.replace(/^\+/, '').replace(/^58/, '')
+    //         break
+    //     // case 'tr':
+    //     //     number = number.replace(/^\+90/, '').replace(/^90(\d{10})$/, '$1')
+    //     //     if (!/^\d{10}$/.test(number)) {
+    //     //         throw new Error('Invalid Turkish number')
+    //     //     }
+    //     //     if (!/vodafone TR/i.test(carrierName)){
+    //     //         throw new Error('Turkish Error carrierName')
+    //     //     }
+    //     //     break
+    //     default:
+    // }
     return number
 }
 

+ 8 - 8
src/rcs-number/impl/durian.service.ts

@@ -35,13 +35,13 @@ export class durian extends GetNumberService {
             throw new InternalServerErrorException(res.data.msg)
         }
         const number = res.data.data
-        const imsiRes = await durianInstance.get('getMobileUserCode', {
-            params: {
-                name,
-                ApiKey,
-                pn: number
-            }
-        })
+        // const imsiRes = await durianInstance.get('getMobileUserCode', {
+        //     params: {
+        //         name,
+        //         ApiKey,
+        //         pn: number
+        //     }
+        // })
         // if (imsiRes.data.code !== 200) {
         //     throw new InternalServerErrorException(imsiRes.data.msg)
         // }
@@ -59,7 +59,7 @@ export class durian extends GetNumberService {
             number: number.replace(/^\+/, ''),
             orderId: number,
             operatorCode: '',
-            rawResponse: [res.data, imsiRes.data]
+            rawResponse: [res.data]
         }
     }
 

+ 7 - 1
src/rcs-number/rcs-number.service.ts

@@ -144,7 +144,13 @@ export class RcsNumberService {
         number.expiryTime = addMinutes(new Date(), 5)
         number.taskId = taskId
         number.rawResponse = JSON.stringify(res.rawResponse)
-        return await this.rcsNumberRepository.save(number)
+        await this.rcsNumberRepository.save(number)
+
+        if (deviceId) {
+            await this.deviceService.changeProfile(deviceId)
+        }
+
+        return number
     }
 
     async delete(id: number): Promise<void> {

+ 10 - 0
yarn.lock

@@ -3091,6 +3091,16 @@ cosmiconfig@^7.0.1:
     path-type "^4.0.0"
     yaml "^1.10.0"
 
+countries-list@^3.1.1:
+  version "3.1.1"
+  resolved "https://registry.npmmirror.com/countries-list/-/countries-list-3.1.1.tgz#f3a339a06228ff053c0e8e44f17fa5ad4f3cab58"
+  integrity sha512-nPklKJ5qtmY5MdBKw1NiBAoyx5Sa7p2yPpljZyQ7gyCN1m+eMFs9I6CT37Mxt8zvR5L3VzD3DJBE4WQzX3WF4A==
+
+country-list-with-dial-code-and-flag@^5.0.5:
+  version "5.0.5"
+  resolved "https://registry.npmmirror.com/country-list-with-dial-code-and-flag/-/country-list-with-dial-code-and-flag-5.0.5.tgz#6debc85367094ba4b9ab840896c4500ef143462f"
+  integrity sha512-y9Rng5zNHxT7W7dDBn2xbt7p+8DFlt8FZUT4b2aEpTfJ073n+uOMg7zxsoMT7X0wuCO7l1lAwj/VaYvIMumnQA==
+
 crc-32@^1.2.0, crc-32@~1.2.0, crc-32@~1.2.1:
   version "1.2.2"
   resolved "https://registry.npmmirror.com/crc-32/-/crc-32-1.2.2.tgz#3cad35a934b8bf71f25ca524b6da51fb7eace2ff"