@yaebal/test 0.2.0 → 0.2.1
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 +2 -1
- package/lib/api.d.ts +5 -6
- package/lib/api.d.ts.map +1 -1
- package/lib/api.js +10 -13
- package/lib/api.js.map +1 -1
- package/lib/api.test.js +1 -1
- package/lib/api.test.js.map +1 -1
- package/package.json +2 -2
- package/src/api.test.ts +1 -1
- package/src/api.ts +14 -22
package/README.md
CHANGED
|
@@ -274,6 +274,7 @@ try {
|
|
|
274
274
|
} catch (error) {
|
|
275
275
|
error instanceof TelegramError; // true
|
|
276
276
|
error.code; // 403
|
|
277
|
+
error.parameters; // response_parameters when Telegram sends them
|
|
277
278
|
}
|
|
278
279
|
```
|
|
279
280
|
|
|
@@ -391,7 +392,7 @@ downloads.
|
|
|
391
392
|
| `ChatActor` | class | `id`, `type`, `title?`, `username?`, `members`, `setMembership`/`membershipOf`, `post` |
|
|
392
393
|
| `apiError` | `(code, description, parameters?) => ApiErrorSentinel` | simulate a real Telegram error response |
|
|
393
394
|
| `isApiErrorSentinel` | `(value) => value is ApiErrorSentinel` | typeguard for a stored `apiError(...)` |
|
|
394
|
-
| `TestApiError` | class extends `TelegramError` |
|
|
395
|
+
| `TestApiError` | class extends `TelegramError` | test subclass carrying the same structured `.parameters` |
|
|
395
396
|
| `installTestClock` | `(startAt?) => TestClock` | standalone virtual clock: `.now()`, `.advance(ms)`, `.restore()` |
|
|
396
397
|
| `mockApi` | `(options?) => MockApi` | the fake `Api` underneath `TestEnv` — usable standalone |
|
|
397
398
|
| `findButton` | `(markup, match) => FoundButton \| undefined` | find an inline keyboard button by text |
|
package/lib/api.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type AfterHook, type Api, type BeforeHook, type ErrorHook, TelegramError } from "@yaebal/core";
|
|
1
|
+
import { type AfterHook, type Api, type BeforeHook, type ErrorHook, type ResponseParameters, TelegramError } from "@yaebal/core";
|
|
2
2
|
/** a single recorded api call: the method, the params it was given, and how it resolved. */
|
|
3
3
|
export interface RecordedCall {
|
|
4
4
|
method: string;
|
|
@@ -17,7 +17,7 @@ export interface ApiErrorSentinel {
|
|
|
17
17
|
readonly __yaebalApiError: true;
|
|
18
18
|
code: number;
|
|
19
19
|
description: string;
|
|
20
|
-
parameters?:
|
|
20
|
+
parameters?: ResponseParameters;
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* simulate a real Telegram Bot API error response — the bot sees exactly what it would see
|
|
@@ -27,13 +27,12 @@ export interface ApiErrorSentinel {
|
|
|
27
27
|
* env.onApi("sendMessage", apiError(403, "Forbidden: bot was blocked by the user"));
|
|
28
28
|
* env.onApi("sendMessage", apiError(429, "Too Many Requests", { retry_after: 30 }));
|
|
29
29
|
*/
|
|
30
|
-
export declare function apiError(code: number, description: string, parameters?:
|
|
30
|
+
export declare function apiError(code: number, description: string, parameters?: ResponseParameters): ApiErrorSentinel;
|
|
31
31
|
/** typeguard for a stored `apiError(...)` sentinel. */
|
|
32
32
|
export declare function isApiErrorSentinel(value: unknown): value is ApiErrorSentinel;
|
|
33
33
|
/** a {@link TelegramError} carrying the optional `parameters` bag (e.g. `retry_after`) real errors ship. */
|
|
34
34
|
export declare class TestApiError extends TelegramError {
|
|
35
|
-
|
|
36
|
-
constructor(method: string, code: number, description: string, parameters?: Record<string, unknown>);
|
|
35
|
+
constructor(method: string, code: number, description: string, parameters?: ResponseParameters);
|
|
37
36
|
}
|
|
38
37
|
/** options accepted by `{ times }` overrides: one-shot (or N-shot) replies. */
|
|
39
38
|
export interface OnApiOptions {
|
|
@@ -74,7 +73,7 @@ export interface MockApi {
|
|
|
74
73
|
* `calls` and resolves to a sensible default (auto-incrementing `message_id` for `send*`, `true`
|
|
75
74
|
* for `answerCallbackQuery`, `{}` otherwise) — or to whatever `onApi`/`options.results` says.
|
|
76
75
|
* `before`/`after`/`onError` are real hook registrars (not no-ops): register a hook the same way
|
|
77
|
-
* you would on the production `Api` and it actually runs, including retries requested by an
|
|
76
|
+
* you would on the production `Api` and it actually runs on each attempt, including retries requested by an
|
|
78
77
|
* `onError` hook. the mock never actually waits on a requested `delayMs` — retries settle
|
|
79
78
|
* instantly, so tests stay fast (pair with {@link installTestClock} if the code under test
|
|
80
79
|
* schedules the retry itself via `setTimeout`).
|
package/lib/api.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EACd,KAAK,GAAG,EACR,KAAK,UAAU,EAEf,KAAK,SAAS,EACd,aAAa,EACb,MAAM,cAAc,CAAC;AAGtB,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5C,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAC;CACX;AAED,iIAAiI;AACjI,MAAM,MAAM,UAAU,GACnB,OAAO,GACP,KAAK,GACL,gBAAgB,GAChB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;AAE/E,uGAAuG;AACvG,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,SAAS,EACd,KAAK,GAAG,EACR,KAAK,UAAU,EAEf,KAAK,SAAS,EACd,KAAK,kBAAkB,EACvB,aAAa,EACb,MAAM,cAAc,CAAC;AAGtB,4FAA4F;AAC5F,MAAM,WAAW,YAAY;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC5C,kDAAkD;IAClD,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+EAA+E;IAC/E,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qFAAqF;IACrF,EAAE,EAAE,MAAM,CAAC;CACX;AAED,iIAAiI;AACjI,MAAM,MAAM,UAAU,GACnB,OAAO,GACP,KAAK,GACL,gBAAgB,GAChB,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAAE,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,CAAC;AAE/E,uGAAuG;AACvG,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;CAChC;AAED;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CACvB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,UAAU,CAAC,EAAE,kBAAkB,GAC7B,gBAAgB,CAElB;AAED,uDAAuD;AACvD,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,gBAAgB,CAE5E;AAED,4GAA4G;AAC5G,qBAAa,YAAa,SAAQ,aAAa;gBAClC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,kBAAkB;CAG9F;AAED,+EAA+E;AAC/E,MAAM,WAAW,YAAY;IAC5B,8IAA8I;IAC9I,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC9B,qJAAqJ;IACrJ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACrC,gLAAgL;IAChL,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+EAA+E;IAC/E,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAED,sGAAsG;AACtG,MAAM,WAAW,OAAO;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,uGAAuG;IACvG,KAAK,EAAE;QAAE,MAAM,EAAE,UAAU,EAAE,CAAC;QAAC,KAAK,EAAE,SAAS,EAAE,CAAC;QAAC,OAAO,EAAE,SAAS,EAAE,CAAA;KAAE,CAAC;IAC1E,sEAAsE;IACtE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS,CAAC;IACpD,4DAA4D;IAC5D,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IACxC,8JAA8J;IAC9J,KAAK,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,CAAC,EAAE,YAAY,GAAG,IAAI,CAAC;IACpE,qGAAqG;IACrG,MAAM,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,uFAAuF;IACvF,KAAK,IAAI,IAAI,CAAC;CACd;AAmCD;;;;;;;;;GASG;AACH,wBAAgB,OAAO,CAAC,OAAO,GAAE,cAAmB,GAAG,OAAO,CA0I7D"}
|
package/lib/api.js
CHANGED
|
@@ -17,10 +17,8 @@ export function isApiErrorSentinel(value) {
|
|
|
17
17
|
}
|
|
18
18
|
/** a {@link TelegramError} carrying the optional `parameters` bag (e.g. `retry_after`) real errors ship. */
|
|
19
19
|
export class TestApiError extends TelegramError {
|
|
20
|
-
parameters;
|
|
21
20
|
constructor(method, code, description, parameters) {
|
|
22
|
-
super(method, code, description);
|
|
23
|
-
this.parameters = parameters;
|
|
21
|
+
super(method, code, description, parameters);
|
|
24
22
|
}
|
|
25
23
|
}
|
|
26
24
|
/** default results for known methods; everything else resolves to `{}` (or throws, with `strictApi`). */
|
|
@@ -46,7 +44,7 @@ function hasBuiltin(method) {
|
|
|
46
44
|
* `calls` and resolves to a sensible default (auto-incrementing `message_id` for `send*`, `true`
|
|
47
45
|
* for `answerCallbackQuery`, `{}` otherwise) — or to whatever `onApi`/`options.results` says.
|
|
48
46
|
* `before`/`after`/`onError` are real hook registrars (not no-ops): register a hook the same way
|
|
49
|
-
* you would on the production `Api` and it actually runs, including retries requested by an
|
|
47
|
+
* you would on the production `Api` and it actually runs on each attempt, including retries requested by an
|
|
50
48
|
* `onError` hook. the mock never actually waits on a requested `delayMs` — retries settle
|
|
51
49
|
* instantly, so tests stay fast (pair with {@link installTestClock} if the code under test
|
|
52
50
|
* schedules the retry itself via `setTimeout`).
|
|
@@ -95,13 +93,13 @@ export function mockApi(options = {}) {
|
|
|
95
93
|
return reply;
|
|
96
94
|
}
|
|
97
95
|
const call = async (method, rawParams) => {
|
|
98
|
-
let p = normalizeParams(rawParams);
|
|
99
|
-
for (const hook of hooks.before) {
|
|
100
|
-
const next = await hook(method, p);
|
|
101
|
-
if (next !== undefined)
|
|
102
|
-
p = next;
|
|
103
|
-
}
|
|
104
96
|
for (let attempt = 1;; attempt++) {
|
|
97
|
+
let p = normalizeParams(rawParams);
|
|
98
|
+
for (const hook of hooks.before) {
|
|
99
|
+
const next = await hook(method, p);
|
|
100
|
+
if (next !== undefined)
|
|
101
|
+
p = next;
|
|
102
|
+
}
|
|
105
103
|
let result;
|
|
106
104
|
try {
|
|
107
105
|
result = resolveReply(method, p);
|
|
@@ -111,10 +109,9 @@ export function mockApi(options = {}) {
|
|
|
111
109
|
catch (error) {
|
|
112
110
|
let retry;
|
|
113
111
|
for (const hook of hooks.onError) {
|
|
114
|
-
const action = await hook(method, error, attempt);
|
|
115
|
-
if (action?.retry) {
|
|
112
|
+
const action = await hook(method, error, attempt, p);
|
|
113
|
+
if (!retry && action?.retry) {
|
|
116
114
|
retry = action;
|
|
117
|
-
break;
|
|
118
115
|
}
|
|
119
116
|
}
|
|
120
117
|
calls.push({ method, params: p, error, at: now() });
|
package/lib/api.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
|
package/lib/api.test.js
CHANGED
|
@@ -42,7 +42,7 @@ test("mockApi results: a function sees params and a running attempt count", asyn
|
|
|
42
42
|
const { api } = mockApi({
|
|
43
43
|
results: {
|
|
44
44
|
sendMessage: (params, attempt) => attempt <= 2
|
|
45
|
-
? new TelegramError("sendMessage", 429, "
|
|
45
|
+
? new TelegramError("sendMessage", 429, "Too Many Requests", { retry_after: 0 })
|
|
46
46
|
: { message_id: 1, echo: params?.text },
|
|
47
47
|
},
|
|
48
48
|
});
|
package/lib/api.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.test.js","sourceRoot":"","sources":["../src/api.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,kBAAkB,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAE/E,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACvE,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,EAAE,CAAC;IAEjC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAE1C,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,mBAAmB,CAAC,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC;IAC3E,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAE7B,MAAM,OAAO,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,eAAe,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,CAAC;IAClE,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAE9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC9B,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/D,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uCAAuC,EAAE,GAAG,EAAE;IAClD,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAC1B,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,EAC3B,GAAG,CACH,CAAC;IACF,MAAM,CAAC,KAAK,CACX,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAC3B,GAAG,CACH,CAAC;AACH,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;IACxE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,EAAE,CAAC;IAE1B,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAC/D,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC,CAAC;IAEhE,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;IAC3C,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAAC;AAC7C,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,gEAAgE,EAAE,KAAK,IAAI,EAAE;IACjF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;IAE1E,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC;AAC7E,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,sDAAsD,EAAE,KAAK,IAAI,EAAE;IACvE,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QACvB,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,aAAa,CAAC,aAAa,EAAE,GAAG,EAAE,aAAa,CAAC,EAAE;KAC9E,CAAC,CAAC;IAEH,MAAM,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC,EAAE,aAAa,CAAC,CAAC;AACtE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;IACtF,MAAM,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC;QACvB,OAAO,EAAE;YACR,WAAW,EAAE,CAAC,MAA2C,EAAE,OAAe,EAAE,EAAE,CAC7E,OAAO,IAAI,CAAC;gBACX,CAAC,CAAC,IAAI,aAAa,CAAC,aAAa,EAAE,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"api.test.js","sourceRoot":"","sources":["../src/api.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@yaebal/test",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"description": "yaebal test — an actor-driven test framework for yaebal bots: users/chats that send real updates, a virtual clock, apiError stubs, and satellite-plugin test packs.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@yaebal/core": "0.0.
|
|
19
|
+
"@yaebal/core": "0.0.9"
|
|
20
20
|
},
|
|
21
21
|
"devDependencies": {
|
|
22
22
|
"@types/node": "latest"
|
package/src/api.test.ts
CHANGED
|
@@ -63,7 +63,7 @@ test("mockApi results: a function sees params and a running attempt count", asyn
|
|
|
63
63
|
results: {
|
|
64
64
|
sendMessage: (params: Record<string, unknown> | undefined, attempt: number) =>
|
|
65
65
|
attempt <= 2
|
|
66
|
-
? new TelegramError("sendMessage", 429, "
|
|
66
|
+
? new TelegramError("sendMessage", 429, "Too Many Requests", { retry_after: 0 })
|
|
67
67
|
: { message_id: 1, echo: params?.text },
|
|
68
68
|
},
|
|
69
69
|
});
|
package/src/api.ts
CHANGED
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
type BeforeHook,
|
|
5
5
|
type ErrorAction,
|
|
6
6
|
type ErrorHook,
|
|
7
|
+
type ResponseParameters,
|
|
7
8
|
TelegramError,
|
|
8
9
|
} from "@yaebal/core";
|
|
9
10
|
import { normalizeParams } from "./normalize.js";
|
|
@@ -32,7 +33,7 @@ export interface ApiErrorSentinel {
|
|
|
32
33
|
readonly __yaebalApiError: true;
|
|
33
34
|
code: number;
|
|
34
35
|
description: string;
|
|
35
|
-
parameters?:
|
|
36
|
+
parameters?: ResponseParameters;
|
|
36
37
|
}
|
|
37
38
|
|
|
38
39
|
/**
|
|
@@ -46,7 +47,7 @@ export interface ApiErrorSentinel {
|
|
|
46
47
|
export function apiError(
|
|
47
48
|
code: number,
|
|
48
49
|
description: string,
|
|
49
|
-
parameters?:
|
|
50
|
+
parameters?: ResponseParameters,
|
|
50
51
|
): ApiErrorSentinel {
|
|
51
52
|
return { __yaebalApiError: true, code, description, parameters };
|
|
52
53
|
}
|
|
@@ -58,16 +59,8 @@ export function isApiErrorSentinel(value: unknown): value is ApiErrorSentinel {
|
|
|
58
59
|
|
|
59
60
|
/** a {@link TelegramError} carrying the optional `parameters` bag (e.g. `retry_after`) real errors ship. */
|
|
60
61
|
export class TestApiError extends TelegramError {
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
constructor(
|
|
64
|
-
method: string,
|
|
65
|
-
code: number,
|
|
66
|
-
description: string,
|
|
67
|
-
parameters?: Record<string, unknown>,
|
|
68
|
-
) {
|
|
69
|
-
super(method, code, description);
|
|
70
|
-
this.parameters = parameters;
|
|
62
|
+
constructor(method: string, code: number, description: string, parameters?: ResponseParameters) {
|
|
63
|
+
super(method, code, description, parameters);
|
|
71
64
|
}
|
|
72
65
|
}
|
|
73
66
|
|
|
@@ -142,7 +135,7 @@ interface MethodOverride {
|
|
|
142
135
|
* `calls` and resolves to a sensible default (auto-incrementing `message_id` for `send*`, `true`
|
|
143
136
|
* for `answerCallbackQuery`, `{}` otherwise) — or to whatever `onApi`/`options.results` says.
|
|
144
137
|
* `before`/`after`/`onError` are real hook registrars (not no-ops): register a hook the same way
|
|
145
|
-
* you would on the production `Api` and it actually runs, including retries requested by an
|
|
138
|
+
* you would on the production `Api` and it actually runs on each attempt, including retries requested by an
|
|
146
139
|
* `onError` hook. the mock never actually waits on a requested `delayMs` — retries settle
|
|
147
140
|
* instantly, so tests stay fast (pair with {@link installTestClock} if the code under test
|
|
148
141
|
* schedules the retry itself via `setTimeout`).
|
|
@@ -198,13 +191,13 @@ export function mockApi(options: MockApiOptions = {}): MockApi {
|
|
|
198
191
|
}
|
|
199
192
|
|
|
200
193
|
const call = async (method: string, rawParams?: Record<string, unknown>): Promise<never> => {
|
|
201
|
-
let p = normalizeParams(rawParams);
|
|
202
|
-
for (const hook of hooks.before) {
|
|
203
|
-
const next = await hook(method, p);
|
|
204
|
-
if (next !== undefined) p = next;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
194
|
for (let attempt = 1; ; attempt++) {
|
|
195
|
+
let p = normalizeParams(rawParams);
|
|
196
|
+
for (const hook of hooks.before) {
|
|
197
|
+
const next = await hook(method, p);
|
|
198
|
+
if (next !== undefined) p = next;
|
|
199
|
+
}
|
|
200
|
+
|
|
208
201
|
let result: unknown;
|
|
209
202
|
|
|
210
203
|
try {
|
|
@@ -213,10 +206,9 @@ export function mockApi(options: MockApiOptions = {}): MockApi {
|
|
|
213
206
|
} catch (error) {
|
|
214
207
|
let retry: ErrorAction | undefined;
|
|
215
208
|
for (const hook of hooks.onError) {
|
|
216
|
-
const action = await hook(method, error, attempt);
|
|
217
|
-
if (action?.retry) {
|
|
209
|
+
const action = await hook(method, error, attempt, p);
|
|
210
|
+
if (!retry && action?.retry) {
|
|
218
211
|
retry = action;
|
|
219
|
-
break;
|
|
220
212
|
}
|
|
221
213
|
}
|
|
222
214
|
|