4040import makeWASocket , {
4141 AnyMessageContent ,
4242 BaileysEventMap ,
43+ Browsers ,
4344 BufferedEventData ,
4445 CacheStore ,
4546 Chat ,
@@ -148,6 +149,7 @@ import {
148149 constants ,
149150 existsSync ,
150151 readFileSync ,
152+ rmSync ,
151153 unlinkSync ,
152154 writeFileSync ,
153155} from 'fs' ;
@@ -162,7 +164,7 @@ type InstanceQrCode = {
162164} ;
163165
164166type InstanceStateConnection = {
165- state : 'open' | 'close' | ' refused' | WAConnectionState ;
167+ state : 'refused' | WAConnectionState ;
166168 statusReason ?: number ;
167169} ;
168170
@@ -194,6 +196,20 @@ export class WAStartupService {
194196 public client : WASocket ;
195197 private authState : Partial < AuthState > = { } ;
196198 private authStateProvider : AuthStateProvider ;
199+ private phoneNumber : string ;
200+
201+ public async setPhoneNumber ( v : string ) {
202+ this . phoneNumber = v ;
203+ try {
204+ if ( this . configService . get < ProviderSession > ( 'PROVIDER' ) ?. ENABLED ) {
205+ await this . providerFiles . removeSession ( this . instance . name ) ;
206+ } else {
207+ rmSync ( join ( INSTANCE_DIR , this . instance . name ) ) ;
208+ }
209+ } catch {
210+ //
211+ }
212+ }
197213
198214 public async setInstanceName ( name : string ) {
199215 const i = await this . repository . instance . findUnique ( {
@@ -399,14 +415,21 @@ export class WAStartupService {
399415 color : { light : qrCodeOptions . LIGHT_COLOR , dark : qrCodeOptions . DARK_COLOR } ,
400416 } ;
401417
418+ let code : string ;
419+
420+ if ( this . phoneNumber && ! this . client ?. authState ?. creds ?. registered ) {
421+ code = await this . client . requestPairingCode ( this . phoneNumber ) ;
422+ this . eventEmitter . emit ( 'code.connection' , { code } ) ;
423+ }
424+
402425 qrcode . toDataURL ( qr , optsQrcode , ( error , base64 ) => {
403426 if ( error ) {
404427 this . logger . error ( 'Qrcode generate failed:' + error . toString ( ) ) ;
405428 return ;
406429 }
407430
408431 this . instanceQr . base64 = base64 ;
409- this . instanceQr . code = qr ;
432+ this . instanceQr . code = code ?? qr ;
410433
411434 this . ws . send ( this . instance . name , 'qrcode.updated' , { code : qr , base64 } ) ;
412435
@@ -417,8 +440,15 @@ export class WAStartupService {
417440
418441 qrcodeTerminal . generate ( qr , { small : true } , ( qrcode ) =>
419442 this . logger . log (
420- `\n{ instance: ${ this . instance . name } , qrcodeCount: ${ this . instanceQr . count } }\n` +
421- qrcode ,
443+ `\n${ JSON . stringify (
444+ {
445+ instanceName : this . instance . name ,
446+ qrCount : this . instanceQr . count ,
447+ code : this . instanceQr . code ?? code ,
448+ } ,
449+ null ,
450+ 2 ,
451+ ) } \n` + qrcode ,
422452 ) ,
423453 ) ;
424454 }
@@ -504,9 +534,7 @@ export class WAStartupService {
504534 }
505535
506536 private async defineAuthState ( ) {
507- const provider = this . configService . get < ProviderSession > ( 'PROVIDER' ) ;
508-
509- if ( provider ?. ENABLED ) {
537+ if ( this . configService . get < ProviderSession > ( 'PROVIDER' ) ?. ENABLED ) {
510538 return await this . authStateProvider . authStateProvider ( this . instance . name ) ;
511539 }
512540
@@ -520,11 +548,17 @@ export class WAStartupService {
520548
521549 const { version } = await fetchLatestBaileysVersionV2 ( ) ;
522550 const session = this . configService . get < ConfigSessionPhone > ( 'CONFIG_SESSION_PHONE' ) ;
523- const browser : WABrowserDescription = [ session . CLIENT , session . NAME , release ( ) ] ;
551+ const browser : WABrowserDescription = ! this . phoneNumber
552+ ? [ session . CLIENT , session . NAME , release ( ) ]
553+ : Browsers . macOS ( 'Chrome' ) ;
524554
525- const { EXPIRATION_TIME } = this . configService . get < QrCode > ( 'QRCODE' ) ;
555+ let { EXPIRATION_TIME } = this . configService . get < QrCode > ( 'QRCODE' ) ;
526556 const CONNECTION_TIMEOUT = this . configService . get < number > ( 'CONNECTION_TIMEOUT' ) ;
527557
558+ if ( this . phoneNumber ) {
559+ EXPIRATION_TIME = CONNECTION_TIMEOUT ;
560+ }
561+
528562 const proxy = this . configService . get < EnvProxy > ( 'PROXY' ) ;
529563 const agents = createProxyAgents ( proxy ?. WS , proxy ?. FETCH ) ;
530564
@@ -1874,140 +1908,6 @@ export class WAStartupService {
18741908 ) ;
18751909 }
18761910
1877- public async buttonsMessage ( data : SendButtonsDto ) {
1878- const generate = await ( async ( ) => {
1879- if ( data . buttonsMessage ?. thumbnailUrl ) {
1880- return await this . prepareMediaMessage ( {
1881- mediatype : 'image' ,
1882- media : data . buttonsMessage . thumbnailUrl ,
1883- } ) ;
1884- }
1885- } ) ( ) ;
1886-
1887- const message : proto . IMessage = {
1888- viewOnceMessageV2 : {
1889- message : {
1890- messageContextInfo : {
1891- deviceListMetadata : { } ,
1892- deviceListMetadataVersion : 2 ,
1893- } ,
1894- interactiveMessage : {
1895- body : {
1896- text : ( ( ) => {
1897- let t = '*' + data . buttonsMessage . title + '*' ;
1898- if ( data . buttonsMessage ?. description ) {
1899- t += '\n\n' ;
1900- t += data . buttonsMessage . description ;
1901- t += '\n' ;
1902- }
1903- return t ;
1904- } ) ( ) ,
1905- } ,
1906- footer : {
1907- text : data . buttonsMessage ?. footer ,
1908- } ,
1909- header : ( ( ) => {
1910- if ( generate ?. message ?. imageMessage ) {
1911- return {
1912- hasMediaAttachment : ! ! generate . message . imageMessage ,
1913- imageMessage : generate . message . imageMessage ,
1914- } ;
1915- }
1916- } ) ( ) ,
1917- nativeFlowMessage : {
1918- buttons : data . buttonsMessage . buttons . map ( ( value ) => {
1919- return {
1920- name : value . typeButton ,
1921- buttonParamsJson : value . toJSONString ( ) ,
1922- } ;
1923- } ) ,
1924- messageParamsJson : JSON . stringify ( {
1925- from : 'api' ,
1926- templateId : ulid ( Date . now ( ) ) ,
1927- } ) ,
1928- } ,
1929- } ,
1930- } ,
1931- } ,
1932- } ;
1933-
1934- return await this . sendMessageWithTyping ( data . number , message , data ?. options ) ;
1935- }
1936-
1937- public async listButtons ( data : SendListDto ) {
1938- const generate = await ( async ( ) => {
1939- if ( data . listMessage ?. thumbnailUrl ) {
1940- return await this . prepareMediaMessage ( {
1941- mediatype : 'image' ,
1942- media : data . listMessage . thumbnailUrl ,
1943- } ) ;
1944- }
1945- } ) ( ) ;
1946-
1947- const message : proto . IMessage = {
1948- viewOnceMessageV2 : {
1949- message : {
1950- messageContextInfo : {
1951- deviceListMetadata : { } ,
1952- deviceListMetadataVersion : 2 ,
1953- } ,
1954- interactiveMessage : {
1955- body : {
1956- text : ( ( ) => {
1957- let t = '*' + data . listMessage . title + '*' ;
1958- if ( data . listMessage ?. description ) {
1959- t += '\n\n' ;
1960- t += data . listMessage . description ;
1961- t += '\n' ;
1962- }
1963- return t ;
1964- } ) ( ) ,
1965- } ,
1966- footer : {
1967- text : data . listMessage ?. footer ,
1968- } ,
1969- header : ( ( ) => {
1970- if ( generate ?. message ?. imageMessage ) {
1971- return {
1972- hasMediaAttachment : ! ! generate . message . imageMessage ,
1973- imageMessage : generate . message . imageMessage ,
1974- } ;
1975- }
1976- } ) ( ) ,
1977- nativeFlowMessage : {
1978- buttons : data . listMessage . sections . map ( ( value ) => {
1979- return {
1980- name : 'single_select' ,
1981- buttonParamsJson : value . toSectionsString ( ) ,
1982- } ;
1983- } ) ,
1984- } ,
1985- } ,
1986- } ,
1987- } ,
1988- } ;
1989-
1990- return await this . sendMessageWithTyping ( data . number , message , data ?. options ) ;
1991- }
1992-
1993- public async listLegacy ( data : SendListLegacyDto ) {
1994- const msg = data . listMessage ;
1995- return await this . sendMessageWithTyping ( data . number , {
1996- viewOnceMessageV2 : {
1997- message : {
1998- listMessage : {
1999- title : msg . title ,
2000- description : msg ?. description ,
2001- footerText : msg ?. footer ,
2002- buttonText : msg . buttonText ,
2003- sections : msg . sections ,
2004- listType : proto . Message . ListMessage . ListType . SINGLE_SELECT ,
2005- } ,
2006- } ,
2007- } ,
2008- } ) ;
2009- }
2010-
20111911 public async linkMessage ( data : SendLinkDto ) {
20121912 return await this . sendMessageWithTyping ( data . number , {
20131913 extendedTextMessage : {
0 commit comments