@@ -96,9 +96,14 @@ export interface LarkHistoryMessage {
9696 content : MessageContent ;
9797}
9898
99+ /** 部署域:feishu = 国内飞书 (open.feishu.cn),lark = 海外 Lark (open.larksuite.com) */
100+ export type LarkDomain = 'feishu' | 'lark' ;
101+
99102export interface LarkServiceOptions {
100103 appId : string ;
101104 appSecret : string ;
105+ /** 默认 'feishu' */
106+ domain ?: LarkDomain ;
102107 userIdType : LarkUserIdType ;
103108 logger ?: ILogger ;
104109 filterEvent : ( eventId : string ) => Promise < boolean > ;
@@ -112,6 +117,7 @@ export class LarkService implements IChannelService {
112117 private lastCallTime = 0 ;
113118 private readonly callInterval = 200 ; // ms
114119 private larkConfig : { appId : string , appSecret : string } ;
120+ private domain : LarkDomain ;
115121 private larkClient : Lark . Client ;
116122 private larkWsClient : Lark . WSClient ;
117123 private logger ?: ILogger ;
@@ -132,6 +138,8 @@ export class LarkService implements IChannelService {
132138 this . userIdType = options . userIdType ;
133139 this . logger = options . logger ;
134140 this . larkConfig = { appId : options . appId , appSecret : options . appSecret } ;
141+ this . domain = options . domain ?? 'feishu' ;
142+ const sdkDomain = this . domain === 'lark' ? Lark . Domain . Lark : Lark . Domain . Feishu ;
135143 this . loggerLevel = Lark . LoggerLevel . warn ;
136144 this . larkLogger = options . logger ? {
137145 trace : ( msg : string , ...args : any [ ] ) => options . logger ?. debug ( msg , ...args ) ,
@@ -140,8 +148,8 @@ export class LarkService implements IChannelService {
140148 warn : ( msg : string , ...args : any [ ] ) => options . logger ?. warn ( msg , ...args ) ,
141149 error : ( msg : string , ...args : any [ ] ) => options . logger ?. error ( msg , ...args ) ,
142150 } : undefined ;
143- this . larkClient = new Lark . Client ( { ...this . larkConfig , logger : this . larkLogger , loggerLevel : this . loggerLevel } ) ;
144- this . larkWsClient = new Lark . WSClient ( { ...this . larkConfig , logger : this . larkLogger , loggerLevel : this . loggerLevel } ) ;
151+ this . larkClient = new Lark . Client ( { ...this . larkConfig , domain : sdkDomain , logger : this . larkLogger , loggerLevel : this . loggerLevel } ) ;
152+ this . larkWsClient = new Lark . WSClient ( { ...this . larkConfig , domain : sdkDomain , logger : this . larkLogger , loggerLevel : this . loggerLevel } ) ;
145153 }
146154
147155 createSessionHandler ( session : SessionService ) : ChannelSessionHandler {
@@ -462,10 +470,10 @@ export class LarkService implements IChannelService {
462470 if ( this . botOpenId ) return this . botOpenId ;
463471 try {
464472 const token = await this . getTenantAccessToken ( ) ;
465- const response = await fetch ( 'https://open.feishu.cn/open-apis/bot/v3/info/' , {
466- headers : { Authorization : `Bearer ${ token } ` } ,
467- } ) ;
468- const data = await response . json ( ) as any ;
473+ const data = await this . larkClient . request ( {
474+ method : 'GET' ,
475+ url : '/open-apis/bot/v3/info' ,
476+ } , Lark . withTenantToken ( token ) ) as any ;
469477 if ( data . code === 0 && data . bot ?. open_id ) {
470478 this . botOpenId = data . bot . open_id ;
471479 this . logger ?. debug ( `Bot open_id: ${ this . botOpenId } ` ) ;
0 commit comments