@satorijs/adapter-lark 3.8.2 → 3.8.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/lib/index.cjs CHANGED
@@ -390,10 +390,20 @@ var LarkMessageEncoder = class extends import_core3.MessageEncoder {
390
390
  card;
391
391
  noteElements;
392
392
  actionElements = [];
393
+ editMessageIds;
393
394
  async post(data) {
394
395
  try {
395
396
  let resp;
396
- if (this.quote?.id) {
397
+ if (this.editMessageIds) {
398
+ const messageId = this.editMessageIds.pop();
399
+ if (!messageId) throw new Error("No message to edit");
400
+ if (data.msg_type === "interactive") {
401
+ delete data.msg_type;
402
+ await this.bot.internal.patchImMessage(messageId, data);
403
+ } else {
404
+ await this.bot.internal.updateImMessage(messageId, data);
405
+ }
406
+ } else if (this.quote?.id) {
397
407
  resp = await this.bot.internal.replyImMessage(this.quote.id, {
398
408
  ...data,
399
409
  reply_in_thread: this.quote.replyInThread
@@ -404,6 +414,7 @@ var LarkMessageEncoder = class extends import_core3.MessageEncoder {
404
414
  receive_id_type: extractIdType(this.channelId)
405
415
  });
406
416
  }
417
+ if (!resp) return;
407
418
  const session = this.bot.session();
408
419
  session.messageId = resp.message_id;
409
420
  session.timestamp = Number(resp.create_time) * 1e3;
@@ -445,6 +456,7 @@ var LarkMessageEncoder = class extends import_core3.MessageEncoder {
445
456
  await this.post({
446
457
  msg_type: "interactive",
447
458
  content: JSON.stringify({
459
+ header: this.card.header,
448
460
  elements: this.card.elements
449
461
  })
450
462
  });
@@ -3341,7 +3353,7 @@ var LarkBot = class extends import_core5.Bot {
3341
3353
  this.logger.debug("refreshed token %s", token);
3342
3354
  this.token = token;
3343
3355
  if (this._refresher) clearTimeout(this._refresher);
3344
- this._refresher = setTimeout(() => this.refreshToken(), 3600 * 1e3);
3356
+ this._refresher = setTimeout(() => this.refreshToken(), import_core5.Time.minute * 100);
3345
3357
  this.online();
3346
3358
  }
3347
3359
  get token() {
@@ -3352,10 +3364,9 @@ var LarkBot = class extends import_core5.Bot {
3352
3364
  this.http.config.headers.Authorization = `Bearer ${v}`;
3353
3365
  }
3354
3366
  async editMessage(channelId, messageId, content) {
3355
- await this.internal.updateImMessage(messageId, {
3356
- content: import_core5.h.normalize(content).join(""),
3357
- msg_type: "text"
3358
- });
3367
+ const encoder = new LarkMessageEncoder(this, channelId);
3368
+ encoder.editMessageIds = [messageId];
3369
+ await encoder.send(content);
3359
3370
  }
3360
3371
  async deleteMessage(channelId, messageId) {
3361
3372
  await this.internal.deleteImMessage(messageId);
package/lib/message.d.ts CHANGED
@@ -7,6 +7,7 @@ export declare class LarkMessageEncoder<C extends Context = Context> extends Mes
7
7
  private card;
8
8
  private noteElements;
9
9
  private actionElements;
10
+ editMessageIds: string[] | undefined;
10
11
  post(data?: any): Promise<void>;
11
12
  private flushText;
12
13
  flush(): Promise<void>;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@satorijs/adapter-lark",
3
3
  "description": "Lark (飞书) Adapter for Satorijs",
4
- "version": "3.8.2",
4
+ "version": "3.8.4",
5
5
  "type": "module",
6
6
  "main": "lib/index.cjs",
7
7
  "types": "lib/index.d.ts",
@@ -35,10 +35,10 @@
35
35
  ],
36
36
  "devDependencies": {
37
37
  "@cordisjs/plugin-server": "^0.2.5",
38
- "@satorijs/core": "^4.3.2",
38
+ "@satorijs/core": "^4.3.3",
39
39
  "cordis": "^3.18.1"
40
40
  },
41
41
  "peerDependencies": {
42
- "@satorijs/core": "^4.3.2"
42
+ "@satorijs/core": "^4.3.3"
43
43
  }
44
44
  }
package/src/bot.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { Bot, Context, h, HTTP, Schema, Universal } from '@satorijs/core'
1
+ import { Bot, Context, h, HTTP, Schema, Time, Universal } from '@satorijs/core'
2
2
 
3
3
  import { HttpServer } from './http'
4
4
  import { LarkMessageEncoder } from './message'
@@ -71,10 +71,12 @@ export class LarkBot<C extends Context = Context> extends Bot<C, LarkBot.Config>
71
71
  })
72
72
  this.logger.debug('refreshed token %s', token)
73
73
  this.token = token
74
- // Token would be expired in 2 hours, refresh it every 1 hour
75
- // see https://open.larksuite.com/document/ukTMukTMukTM/ukDNz4SO0MjL5QzM/auth-v3/auth/tenant_access_token_internal
74
+ // tenant_access_token 的最大有效期是 2 小时。
75
+ // 剩余有效期小于 30 分钟时,调用本接口会返回一个新的 tenant_access_token,这会同时存在两个有效的 tenant_access_token。
76
+ // 剩余有效期大于等于 30 分钟时,调用本接口会返回原有的 tenant_access_token。
77
+ // https://open.feishu.cn/document/server-docs/authentication-management/access-token/tenant_access_token_internal
76
78
  if (this._refresher) clearTimeout(this._refresher)
77
- this._refresher = setTimeout(() => this.refreshToken(), 3600 * 1000)
79
+ this._refresher = setTimeout(() => this.refreshToken(), Time.minute * 100)
78
80
  this.online()
79
81
  }
80
82
 
@@ -88,10 +90,9 @@ export class LarkBot<C extends Context = Context> extends Bot<C, LarkBot.Config>
88
90
  }
89
91
 
90
92
  async editMessage(channelId: string, messageId: string, content: h.Fragment) {
91
- await this.internal.updateImMessage(messageId, {
92
- content: h.normalize(content).join(''),
93
- msg_type: 'text',
94
- })
93
+ const encoder = new LarkMessageEncoder(this, channelId)
94
+ encoder.editMessageIds = [messageId]
95
+ await encoder.send(content)
95
96
  }
96
97
 
97
98
  async deleteMessage(channelId: string, messageId: string) {
package/src/message.ts CHANGED
@@ -11,10 +11,21 @@ export class LarkMessageEncoder<C extends Context = Context> extends MessageEnco
11
11
  private noteElements: MessageContent.Card.NoteElement.InnerElement[] | undefined
12
12
  private actionElements: MessageContent.Card.Element[] = []
13
13
 
14
+ public editMessageIds: string[] | undefined
15
+
14
16
  async post(data?: any) {
15
17
  try {
16
18
  let resp: Lark.Message
17
- if (this.quote?.id) {
19
+ if (this.editMessageIds) {
20
+ const messageId = this.editMessageIds.pop()
21
+ if (!messageId) throw new Error('No message to edit')
22
+ if (data.msg_type === 'interactive') {
23
+ delete data.msg_type
24
+ await this.bot.internal.patchImMessage(messageId, data)
25
+ } else {
26
+ await this.bot.internal.updateImMessage(messageId, data)
27
+ }
28
+ } else if (this.quote?.id) {
18
29
  resp = await this.bot.internal.replyImMessage(this.quote.id, {
19
30
  ...data,
20
31
  reply_in_thread: this.quote.replyInThread,
@@ -25,6 +36,7 @@ export class LarkMessageEncoder<C extends Context = Context> extends MessageEnco
25
36
  receive_id_type: extractIdType(this.channelId),
26
37
  })
27
38
  }
39
+ if (!resp) return
28
40
  const session = this.bot.session()
29
41
  session.messageId = resp.message_id
30
42
  session.timestamp = Number(resp.create_time) * 1000
@@ -70,6 +82,7 @@ export class LarkMessageEncoder<C extends Context = Context> extends MessageEnco
70
82
  await this.post({
71
83
  msg_type: 'interactive',
72
84
  content: JSON.stringify({
85
+ header: this.card.header,
73
86
  elements: this.card.elements,
74
87
  }),
75
88
  })