@ihazz/bitrix24 1.1.9 → 1.1.11
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/README.md +1 -0
- package/dist/src/channel.d.ts.map +1 -1
- package/dist/src/channel.js +59 -10
- package/dist/src/channel.js.map +1 -1
- package/dist/src/i18n.d.ts +1 -0
- package/dist/src/i18n.d.ts.map +1 -1
- package/dist/src/i18n.js +17 -6
- package/dist/src/i18n.js.map +1 -1
- package/dist/src/polling-service.d.ts +2 -1
- package/dist/src/polling-service.d.ts.map +1 -1
- package/dist/src/polling-service.js +17 -4
- package/dist/src/polling-service.js.map +1 -1
- package/dist/src/send-service.d.ts +1 -0
- package/dist/src/send-service.d.ts.map +1 -1
- package/dist/src/send-service.js +3 -0
- package/dist/src/send-service.js.map +1 -1
- package/dist/src/types.d.ts +2 -1
- package/dist/src/types.d.ts.map +1 -1
- package/package.json +1 -1
- package/src/channel.ts +83 -13
- package/src/i18n.ts +19 -6
- package/src/polling-service.ts +24 -4
- package/src/send-service.ts +10 -1
- package/src/types.ts +2 -1
package/src/polling-service.ts
CHANGED
|
@@ -95,7 +95,8 @@ export class PollingService {
|
|
|
95
95
|
|
|
96
96
|
/**
|
|
97
97
|
* Start the blocking polling loop.
|
|
98
|
-
* Uses imbot.v2.Event.get which returns { events,
|
|
98
|
+
* Uses imbot.v2.Event.get which returns { events, nextOffset, hasMore }.
|
|
99
|
+
* Older payloads may still include lastEventId, so we tolerate both shapes.
|
|
99
100
|
*/
|
|
100
101
|
async start(): Promise<void> {
|
|
101
102
|
this.offset = await this.loadOffset();
|
|
@@ -115,7 +116,12 @@ export class PollingService {
|
|
|
115
116
|
backoff.reset();
|
|
116
117
|
this.rateLimitStreak = 0;
|
|
117
118
|
|
|
118
|
-
const {
|
|
119
|
+
const {
|
|
120
|
+
events,
|
|
121
|
+
nextOffset: reportedNextOffset,
|
|
122
|
+
lastEventId,
|
|
123
|
+
hasMore,
|
|
124
|
+
} = result;
|
|
119
125
|
let nextOffset = this.offset;
|
|
120
126
|
|
|
121
127
|
// Process events sequentially
|
|
@@ -133,11 +139,15 @@ export class PollingService {
|
|
|
133
139
|
}
|
|
134
140
|
}
|
|
135
141
|
|
|
142
|
+
if (typeof reportedNextOffset === 'number' && reportedNextOffset >= 0) {
|
|
143
|
+
nextOffset = Math.max(nextOffset, reportedNextOffset);
|
|
144
|
+
}
|
|
145
|
+
|
|
136
146
|
// Advance offset only for events that were processed successfully.
|
|
137
|
-
if (
|
|
147
|
+
if (nextOffset > this.offset) {
|
|
138
148
|
this.offset = nextOffset;
|
|
139
149
|
await this.persistOffset(this.offset);
|
|
140
|
-
} else if (events.length > 0 && lastEventId < this.offset) {
|
|
150
|
+
} else if (events.length > 0 && typeof lastEventId === 'number' && lastEventId < this.offset) {
|
|
141
151
|
this.logger.warn('Polling: lastEventId regressed', {
|
|
142
152
|
lastEventId,
|
|
143
153
|
currentOffset: this.offset,
|
|
@@ -162,6 +172,16 @@ export class PollingService {
|
|
|
162
172
|
throw err;
|
|
163
173
|
}
|
|
164
174
|
|
|
175
|
+
if (err.code === 'HTTP_404' && this.offset > 0) {
|
|
176
|
+
this.logger.warn('Polling offset is no longer valid, resetting to 0 after HTTP 404', {
|
|
177
|
+
previousOffset: this.offset,
|
|
178
|
+
});
|
|
179
|
+
this.offset = 0;
|
|
180
|
+
await this.persistOffset(this.offset);
|
|
181
|
+
backoff.reset();
|
|
182
|
+
continue;
|
|
183
|
+
}
|
|
184
|
+
|
|
165
185
|
// Rate limit — short pause without exponential backoff
|
|
166
186
|
if (err.code === RATE_LIMIT_CODE) {
|
|
167
187
|
this.rateLimitStreak++;
|
package/src/send-service.ts
CHANGED
|
@@ -38,7 +38,12 @@ export class SendService {
|
|
|
38
38
|
async sendText(
|
|
39
39
|
ctx: SendContext,
|
|
40
40
|
text: string,
|
|
41
|
-
options?: {
|
|
41
|
+
options?: {
|
|
42
|
+
keyboard?: B24Keyboard;
|
|
43
|
+
convertMarkdown?: boolean;
|
|
44
|
+
forwardMessages?: number[];
|
|
45
|
+
system?: boolean;
|
|
46
|
+
},
|
|
42
47
|
): Promise<SendMessageResult> {
|
|
43
48
|
const convertedText = options?.convertMarkdown !== false
|
|
44
49
|
? markdownToBbCode(text)
|
|
@@ -54,6 +59,7 @@ export class SendService {
|
|
|
54
59
|
const msgOptions: {
|
|
55
60
|
keyboard?: B24Keyboard;
|
|
56
61
|
forwardMessages?: number[];
|
|
62
|
+
system?: boolean;
|
|
57
63
|
} = {};
|
|
58
64
|
|
|
59
65
|
if (isLast && options?.keyboard) {
|
|
@@ -62,6 +68,9 @@ export class SendService {
|
|
|
62
68
|
if (isFirst && options?.forwardMessages?.length) {
|
|
63
69
|
msgOptions.forwardMessages = options.forwardMessages;
|
|
64
70
|
}
|
|
71
|
+
if (options?.system !== undefined) {
|
|
72
|
+
msgOptions.system = options.system;
|
|
73
|
+
}
|
|
65
74
|
|
|
66
75
|
try {
|
|
67
76
|
lastMessageId = await this.api.sendMessage(
|
package/src/types.ts
CHANGED
|
@@ -208,7 +208,8 @@ export interface B24V2FetchEventItem {
|
|
|
208
208
|
/** Response from imbot.v2.Event.get */
|
|
209
209
|
export interface B24V2EventGetResult {
|
|
210
210
|
events: B24V2FetchEventItem[];
|
|
211
|
-
|
|
211
|
+
nextOffset?: number;
|
|
212
|
+
lastEventId?: number;
|
|
212
213
|
hasMore: boolean;
|
|
213
214
|
}
|
|
214
215
|
|