@yaebal/test 0.0.1 → 0.2.0
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 +400 -15
- package/lib/api.d.ts +83 -0
- package/lib/api.d.ts.map +1 -0
- package/lib/api.js +186 -0
- package/lib/api.js.map +1 -0
- package/lib/api.test.d.ts +2 -0
- package/lib/api.test.d.ts.map +1 -0
- package/lib/api.test.js +131 -0
- package/lib/api.test.js.map +1 -0
- package/lib/bot-messages.d.ts +42 -0
- package/lib/bot-messages.d.ts.map +1 -0
- package/lib/bot-messages.js +72 -0
- package/lib/bot-messages.js.map +1 -0
- package/lib/chat-actor.d.ts +45 -0
- package/lib/chat-actor.d.ts.map +1 -0
- package/lib/chat-actor.js +72 -0
- package/lib/chat-actor.js.map +1 -0
- package/lib/clock.d.ts +22 -0
- package/lib/clock.d.ts.map +1 -0
- package/lib/clock.js +72 -0
- package/lib/clock.js.map +1 -0
- package/lib/clock.test.d.ts +2 -0
- package/lib/clock.test.d.ts.map +1 -0
- package/lib/clock.test.js +69 -0
- package/lib/clock.test.js.map +1 -0
- package/lib/env.d.ts +100 -0
- package/lib/env.d.ts.map +1 -0
- package/lib/env.js +164 -0
- package/lib/env.js.map +1 -0
- package/lib/env.test.d.ts +2 -0
- package/lib/env.test.d.ts.map +1 -0
- package/lib/env.test.js +302 -0
- package/lib/env.test.js.map +1 -0
- package/lib/fetch.d.ts +3 -0
- package/lib/fetch.d.ts.map +1 -0
- package/lib/fetch.js +12 -0
- package/lib/fetch.js.map +1 -0
- package/lib/index.d.ts +19 -52
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +19 -115
- package/lib/index.js.map +1 -1
- package/lib/internal.d.ts +25 -0
- package/lib/internal.d.ts.map +1 -0
- package/lib/internal.js +19 -0
- package/lib/internal.js.map +1 -0
- package/lib/keyboard.d.ts +15 -0
- package/lib/keyboard.d.ts.map +1 -0
- package/lib/keyboard.js +25 -0
- package/lib/keyboard.js.map +1 -0
- package/lib/keyboard.test.d.ts +2 -0
- package/lib/keyboard.test.d.ts.map +1 -0
- package/lib/keyboard.test.js +31 -0
- package/lib/keyboard.test.js.map +1 -0
- package/lib/normalize.d.ts +10 -0
- package/lib/normalize.d.ts.map +1 -0
- package/lib/normalize.js +27 -0
- package/lib/normalize.js.map +1 -0
- package/lib/reactions.d.ts +3 -0
- package/lib/reactions.d.ts.map +1 -0
- package/lib/reactions.js +17 -0
- package/lib/reactions.js.map +1 -0
- package/lib/updates.d.ts +126 -0
- package/lib/updates.d.ts.map +1 -0
- package/lib/updates.js +200 -0
- package/lib/updates.js.map +1 -0
- package/lib/updates.test.d.ts +2 -0
- package/lib/updates.test.d.ts.map +1 -0
- package/lib/updates.test.js +72 -0
- package/lib/updates.test.js.map +1 -0
- package/lib/user-actor.d.ts +188 -0
- package/lib/user-actor.d.ts.map +1 -0
- package/lib/user-actor.js +465 -0
- package/lib/user-actor.js.map +1 -0
- package/lib/webhook.d.ts +18 -0
- package/lib/webhook.d.ts.map +1 -0
- package/lib/webhook.js +25 -0
- package/lib/webhook.js.map +1 -0
- package/lib/webhook.test.d.ts +2 -0
- package/lib/webhook.test.d.ts.map +1 -0
- package/lib/webhook.test.js +36 -0
- package/lib/webhook.test.js.map +1 -0
- package/package.json +7 -5
- package/src/api.test.ts +180 -0
- package/src/api.ts +289 -0
- package/src/bot-messages.ts +117 -0
- package/src/chat-actor.ts +101 -0
- package/src/clock.test.ts +80 -0
- package/src/clock.ts +118 -0
- package/src/env.test.ts +370 -0
- package/src/env.ts +235 -0
- package/src/fetch.ts +11 -0
- package/src/index.ts +79 -169
- package/src/internal.ts +43 -0
- package/src/keyboard.test.ts +35 -0
- package/src/keyboard.ts +38 -0
- package/src/normalize.ts +34 -0
- package/src/reactions.ts +18 -0
- package/src/updates.test.ts +107 -0
- package/src/updates.ts +354 -0
- package/src/user-actor.ts +702 -0
- package/src/webhook.test.ts +54 -0
- package/src/webhook.ts +48 -0
- package/lib/index.test.d.ts +0 -2
- package/lib/index.test.d.ts.map +0 -1
- package/lib/index.test.js +0 -66
- package/lib/index.test.js.map +0 -1
- package/src/index.test.ts +0 -101
package/lib/internal.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
function isFormatResult(value) {
|
|
2
|
+
return (typeof value === "object" &&
|
|
3
|
+
value !== null &&
|
|
4
|
+
"text" in value &&
|
|
5
|
+
"entities" in value &&
|
|
6
|
+
Array.isArray(value.entities));
|
|
7
|
+
}
|
|
8
|
+
/** resolve a `SendText` into `{ text, entities }`, merging in any `extraEntities`. */
|
|
9
|
+
export function resolveSendText(text, extraEntities = []) {
|
|
10
|
+
const resolved = isFormatResult(text) ? text : { text, entities: [] };
|
|
11
|
+
return { text: resolved.text, entities: [...resolved.entities, ...extraEntities] };
|
|
12
|
+
}
|
|
13
|
+
let fileCounter = 0;
|
|
14
|
+
/** a fake `{ file_id, file_unique_id }` pair — good enough for tests, never a real download. */
|
|
15
|
+
export function fakeFile(prefix) {
|
|
16
|
+
const n = ++fileCounter;
|
|
17
|
+
return { file_id: `${prefix}_${n}`, file_unique_id: `u${prefix}${n}` };
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=internal.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAiBA,SAAS,cAAc,CAAC,KAAc;IACrC,OAAO,CACN,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,UAAU,IAAI,KAAK;QACnB,KAAK,CAAC,OAAO,CAAE,KAAsB,CAAC,QAAQ,CAAC,CAC/C,CAAC;AACH,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,eAAe,CAC9B,IAAc,EACd,gBAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;IACtE,OAAO,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,QAAQ,EAAE,GAAG,aAAa,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,IAAI,WAAW,GAAG,CAAC,CAAC;AAEpB,gGAAgG;AAChG,MAAM,UAAU,QAAQ,CAAC,MAAc;IACtC,MAAM,CAAC,GAAG,EAAE,WAAW,CAAC;IACxB,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,IAAI,CAAC,EAAE,EAAE,cAAc,EAAE,IAAI,MAAM,GAAG,CAAC,EAAE,EAAE,CAAC;AACxE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** an inline keyboard button found by {@link findButton}, with its position. */
|
|
2
|
+
export interface FoundButton {
|
|
3
|
+
text: string;
|
|
4
|
+
row: number;
|
|
5
|
+
col: number;
|
|
6
|
+
[key: string]: unknown;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* search an inline keyboard (a `reply_markup`-shaped object — or an `InlineKeyboard`/`Keyboard`
|
|
10
|
+
* builder instance, unwrapped via `toJSON()` automatically — e.g. from a recorded call's params,
|
|
11
|
+
* or a {@link BotMessage}'s `reply_markup`) for a button whose text matches a string or regex.
|
|
12
|
+
* returns the button (plus its `row`/`col`) or `undefined`.
|
|
13
|
+
*/
|
|
14
|
+
export declare function findButton(markup: unknown, match: string | RegExp): FoundButton | undefined;
|
|
15
|
+
//# sourceMappingURL=keyboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAEA,gFAAgF;AAChF,MAAM,WAAW,WAAW;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,WAAW,GAAG,SAAS,CAqB3F"}
|
package/lib/keyboard.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { toPlain } from "./normalize.js";
|
|
2
|
+
/**
|
|
3
|
+
* search an inline keyboard (a `reply_markup`-shaped object — or an `InlineKeyboard`/`Keyboard`
|
|
4
|
+
* builder instance, unwrapped via `toJSON()` automatically — e.g. from a recorded call's params,
|
|
5
|
+
* or a {@link BotMessage}'s `reply_markup`) for a button whose text matches a string or regex.
|
|
6
|
+
* returns the button (plus its `row`/`col`) or `undefined`.
|
|
7
|
+
*/
|
|
8
|
+
export function findButton(markup, match) {
|
|
9
|
+
const plain = toPlain(markup);
|
|
10
|
+
const rows = plain?.inline_keyboard ?? [];
|
|
11
|
+
for (let row = 0; row < rows.length; row++) {
|
|
12
|
+
const cols = rows[row] ?? [];
|
|
13
|
+
for (let col = 0; col < cols.length; col++) {
|
|
14
|
+
const button = cols[col];
|
|
15
|
+
if (!button)
|
|
16
|
+
continue;
|
|
17
|
+
const text = typeof button.text === "string" ? button.text : "";
|
|
18
|
+
const matches = typeof match === "string" ? text === match : match.test(text);
|
|
19
|
+
if (matches)
|
|
20
|
+
return { ...button, text, row, col };
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=keyboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.js","sourceRoot":"","sources":["../src/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AAUzC;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,MAAe,EAAE,KAAsB;IACjE,MAAM,KAAK,GAAG,OAAO,CACpB,MAAM,CACN,CAAC;IACF,MAAM,IAAI,GAAG,KAAK,EAAE,eAAe,IAAI,EAAE,CAAC;IAE1C,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;QAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;QAE7B,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE,CAAC;YAC5C,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC;YACzB,IAAI,CAAC,MAAM;gBAAE,SAAS;YAEtB,MAAM,IAAI,GAAG,OAAO,MAAM,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,MAAM,OAAO,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAE9E,IAAI,OAAO;gBAAE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;QACnD,CAAC;IACF,CAAC;IAED,OAAO,SAAS,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.test.d.ts","sourceRoot":"","sources":["../src/keyboard.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { findButton } from "./keyboard.js";
|
|
4
|
+
test("findButton locates a button by text and reports its position", () => {
|
|
5
|
+
const markup = {
|
|
6
|
+
inline_keyboard: [
|
|
7
|
+
[{ text: "a", callback_data: "a" }],
|
|
8
|
+
[
|
|
9
|
+
{ text: "b", callback_data: "b" },
|
|
10
|
+
{ text: "Next", callback_data: "page:2" },
|
|
11
|
+
],
|
|
12
|
+
],
|
|
13
|
+
};
|
|
14
|
+
const found = findButton(markup, "Next");
|
|
15
|
+
assert.equal(found?.callback_data, "page:2");
|
|
16
|
+
assert.equal(found?.row, 1);
|
|
17
|
+
assert.equal(found?.col, 1);
|
|
18
|
+
assert.equal(findButton(markup, /^n/i)?.text, "Next");
|
|
19
|
+
assert.equal(findButton(markup, "missing"), undefined);
|
|
20
|
+
assert.equal(findButton(undefined, "missing"), undefined);
|
|
21
|
+
});
|
|
22
|
+
test("findButton unwraps a builder instance via toJSON()", () => {
|
|
23
|
+
class FakeInlineKeyboard {
|
|
24
|
+
toJSON() {
|
|
25
|
+
return { inline_keyboard: [[{ text: "Restart", callback_data: "restart" }]] };
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const found = findButton(new FakeInlineKeyboard(), "Restart");
|
|
29
|
+
assert.equal(found?.callback_data, "restart");
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=keyboard.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"keyboard.test.js","sourceRoot":"","sources":["../src/keyboard.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAE3C,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;IACzE,MAAM,MAAM,GAAG;QACd,eAAe,EAAE;YAChB,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YACnC;gBACC,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,GAAG,EAAE;gBACjC,EAAE,IAAI,EAAE,MAAM,EAAE,aAAa,EAAE,QAAQ,EAAE;aACzC;SACD;KACD,CAAC;IAEF,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,QAAQ,CAAC,CAAC;IAC7C,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAC5B,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC;IAE5B,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;IACvD,MAAM,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,SAAS,CAAC,CAAC;AAC3D,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;IAC/D,MAAM,kBAAkB;QACvB,MAAM;YACL,OAAO,EAAE,eAAe,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,CAAC;QAC/E,CAAC;KACD;IAED,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,kBAAkB,EAAE,EAAE,SAAS,CAAC,CAAC;IAC9D,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;AAC/C,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* builder instances (e.g. `InlineKeyboard`/`Keyboard` from `@yaebal/keyboard`) expose a
|
|
3
|
+
* `toJSON()` the same way `Date`/`Map`-like classes do. unwrap them so recorded calls and
|
|
4
|
+
* assertions see plain JSON, never a class instance — no `@yaebal/keyboard` dependency needed,
|
|
5
|
+
* this is just duck typing on the standard `toJSON` convention.
|
|
6
|
+
*/
|
|
7
|
+
export declare function toPlain<T = unknown>(value: unknown): T;
|
|
8
|
+
/** shallow-clone `params`, normalizing `reply_markup` (and, for `answerInlineQuery`, each `results[].reply_markup`) via {@link toPlain}. */
|
|
9
|
+
export declare function normalizeParams(params: Record<string, unknown> | undefined): Record<string, unknown> | undefined;
|
|
10
|
+
//# sourceMappingURL=normalize.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,wBAAgB,OAAO,CAAC,CAAC,GAAG,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,CAAC,CAMtD;AAED,4IAA4I;AAC5I,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,GACzC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAgBrC"}
|
package/lib/normalize.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* builder instances (e.g. `InlineKeyboard`/`Keyboard` from `@yaebal/keyboard`) expose a
|
|
3
|
+
* `toJSON()` the same way `Date`/`Map`-like classes do. unwrap them so recorded calls and
|
|
4
|
+
* assertions see plain JSON, never a class instance — no `@yaebal/keyboard` dependency needed,
|
|
5
|
+
* this is just duck typing on the standard `toJSON` convention.
|
|
6
|
+
*/
|
|
7
|
+
export function toPlain(value) {
|
|
8
|
+
if (value && typeof value.toJSON === "function") {
|
|
9
|
+
return value.toJSON();
|
|
10
|
+
}
|
|
11
|
+
return value;
|
|
12
|
+
}
|
|
13
|
+
/** shallow-clone `params`, normalizing `reply_markup` (and, for `answerInlineQuery`, each `results[].reply_markup`) via {@link toPlain}. */
|
|
14
|
+
export function normalizeParams(params) {
|
|
15
|
+
if (!params)
|
|
16
|
+
return params;
|
|
17
|
+
const out = { ...params };
|
|
18
|
+
if ("reply_markup" in out)
|
|
19
|
+
out.reply_markup = toPlain(out.reply_markup);
|
|
20
|
+
if (Array.isArray(out.results)) {
|
|
21
|
+
out.results = out.results.map((item) => item && typeof item === "object" && "reply_markup" in item
|
|
22
|
+
? { ...item, reply_markup: toPlain(item.reply_markup) }
|
|
23
|
+
: item);
|
|
24
|
+
}
|
|
25
|
+
return out;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=normalize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.js","sourceRoot":"","sources":["../src/normalize.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,UAAU,OAAO,CAAc,KAAc;IAClD,IAAI,KAAK,IAAI,OAAQ,KAA8B,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC3E,OAAQ,KAAyB,CAAC,MAAM,EAAE,CAAC;IAC5C,CAAC;IAED,OAAO,KAAU,CAAC;AACnB,CAAC;AAED,4IAA4I;AAC5I,MAAM,UAAU,eAAe,CAC9B,MAA2C;IAE3C,IAAI,CAAC,MAAM;QAAE,OAAO,MAAM,CAAC;IAE3B,MAAM,GAAG,GAAG,EAAE,GAAG,MAAM,EAAE,CAAC;IAE1B,IAAI,cAAc,IAAI,GAAG;QAAE,GAAG,CAAC,YAAY,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;IAExE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAChC,GAAG,CAAC,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACtC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,cAAc,IAAI,IAAI;YACzD,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,YAAY,EAAE,OAAO,CAAE,IAAgC,CAAC,YAAY,CAAC,EAAE;YACpF,CAAC,CAAC,IAAI,CACP,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactions.d.ts","sourceRoot":"","sources":["../src/reactions.ts"],"names":[],"mappings":"AAQA,iGAAiG;AACjG,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAQlE"}
|
package/lib/reactions.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* per-message reaction state, so {@link UserActor.react} never needs `oldReaction` spelled out
|
|
3
|
+
* by hand — it's inferred from whatever that user's last `react()` on this message left behind.
|
|
4
|
+
* keyed by the `Message` object's identity (a `WeakMap`, so it costs nothing once a message is
|
|
5
|
+
* no longer referenced) rather than `message_id`, since ids aren't guaranteed unique across chats.
|
|
6
|
+
*/
|
|
7
|
+
const store = new WeakMap();
|
|
8
|
+
/** the emojis a given user currently has on `message` (per-message, per-user reaction state). */
|
|
9
|
+
export function reactionsOf(message) {
|
|
10
|
+
let state = store.get(message);
|
|
11
|
+
if (!state) {
|
|
12
|
+
state = new Map();
|
|
13
|
+
store.set(message, state);
|
|
14
|
+
}
|
|
15
|
+
return state;
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=reactions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactions.js","sourceRoot":"","sources":["../src/reactions.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,KAAK,GAAG,IAAI,OAAO,EAAiC,CAAC;AAE3D,iGAAiG;AACjG,MAAM,UAAU,WAAW,CAAC,OAAe;IAC1C,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IAC/B,IAAI,CAAC,KAAK,EAAE,CAAC;QACZ,KAAK,GAAG,IAAI,GAAG,EAAE,CAAC;QAClB,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;IAC3B,CAAC;IAED,OAAO,KAAK,CAAC;AACd,CAAC"}
|
package/lib/updates.d.ts
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* fixture builders — the escape hatch beneath the actor api. every actor
|
|
3
|
+
* method ({@link UserActor.sendMessage} & co.) is sugar over one of these;
|
|
4
|
+
* reach for them directly when you need an update shape the actors don't
|
|
5
|
+
* cover, or want full control over every field.
|
|
6
|
+
*/
|
|
7
|
+
import type { Message, Update, UpdateName, User } from "@yaebal/core";
|
|
8
|
+
/** the payload type for a given update kind — reuses core's `Update` shape, no extra types package needed. */
|
|
9
|
+
type Payload<K extends UpdateName> = NonNullable<Update[K]>;
|
|
10
|
+
/** build an {@link Update} from a partial, filling in a fresh `update_id`. */
|
|
11
|
+
export declare function createUpdate(partial?: Partial<Update>): Update;
|
|
12
|
+
/** options for {@link buildUser}. */
|
|
13
|
+
export interface BuildUserOptions {
|
|
14
|
+
id?: number;
|
|
15
|
+
firstName?: string;
|
|
16
|
+
lastName?: string;
|
|
17
|
+
username?: string;
|
|
18
|
+
languageCode?: string;
|
|
19
|
+
isBot?: boolean;
|
|
20
|
+
}
|
|
21
|
+
/** build a {@link User}, auto-allocating an id if none is given. */
|
|
22
|
+
export declare function buildUser(options?: BuildUserOptions): User;
|
|
23
|
+
/** options shared by the message-shaped factories (`message`, `edited_message`, `channel_post`, ...). */
|
|
24
|
+
export interface MessageUpdateOptions {
|
|
25
|
+
text?: string;
|
|
26
|
+
chatId?: number;
|
|
27
|
+
fromId?: number;
|
|
28
|
+
chatType?: "private" | "group" | "supergroup" | "channel";
|
|
29
|
+
}
|
|
30
|
+
/** build a `message` {@link Update}. */
|
|
31
|
+
export declare function messageUpdate(options?: MessageUpdateOptions): Update;
|
|
32
|
+
/** build an `edited_message` {@link Update}. */
|
|
33
|
+
export declare function editedMessageUpdate(options?: MessageUpdateOptions): Update;
|
|
34
|
+
/** build a `channel_post` {@link Update}. */
|
|
35
|
+
export declare function channelPostUpdate(options?: MessageUpdateOptions): Update;
|
|
36
|
+
/** build an `edited_channel_post` {@link Update}. */
|
|
37
|
+
export declare function editedChannelPostUpdate(options?: MessageUpdateOptions): Update;
|
|
38
|
+
/** options for {@link callbackUpdate}. */
|
|
39
|
+
export interface CallbackUpdateOptions {
|
|
40
|
+
data?: string;
|
|
41
|
+
chatId?: number;
|
|
42
|
+
fromId?: number;
|
|
43
|
+
message?: Message;
|
|
44
|
+
}
|
|
45
|
+
/** build a `callback_query` {@link Update}. */
|
|
46
|
+
export declare function callbackUpdate(options?: CallbackUpdateOptions): Update;
|
|
47
|
+
/** options for {@link inlineQueryUpdate}. */
|
|
48
|
+
export interface InlineQueryUpdateOptions {
|
|
49
|
+
query?: string;
|
|
50
|
+
fromId?: number;
|
|
51
|
+
id?: string;
|
|
52
|
+
offset?: string;
|
|
53
|
+
chatType?: Payload<"inline_query">["chat_type"];
|
|
54
|
+
}
|
|
55
|
+
/** build an `inline_query` {@link Update}. */
|
|
56
|
+
export declare function inlineQueryUpdate(options?: InlineQueryUpdateOptions): Update;
|
|
57
|
+
/** options for {@link chosenInlineResultUpdate}. */
|
|
58
|
+
export interface ChosenInlineResultUpdateOptions {
|
|
59
|
+
resultId?: string;
|
|
60
|
+
fromId?: number;
|
|
61
|
+
query?: string;
|
|
62
|
+
inlineMessageId?: string;
|
|
63
|
+
}
|
|
64
|
+
/** build a `chosen_inline_result` {@link Update}. */
|
|
65
|
+
export declare function chosenInlineResultUpdate(options?: ChosenInlineResultUpdateOptions): Update;
|
|
66
|
+
/** options for {@link shippingQueryUpdate}. */
|
|
67
|
+
export interface ShippingQueryUpdateOptions {
|
|
68
|
+
id?: string;
|
|
69
|
+
fromId?: number;
|
|
70
|
+
invoicePayload?: string;
|
|
71
|
+
shippingAddress?: Partial<Payload<"shipping_query">["shipping_address"]>;
|
|
72
|
+
}
|
|
73
|
+
/** build a `shipping_query` {@link Update}. */
|
|
74
|
+
export declare function shippingQueryUpdate(options?: ShippingQueryUpdateOptions): Update;
|
|
75
|
+
/** options for {@link preCheckoutQueryUpdate}. */
|
|
76
|
+
export interface PreCheckoutQueryUpdateOptions {
|
|
77
|
+
id?: string;
|
|
78
|
+
fromId?: number;
|
|
79
|
+
currency?: string;
|
|
80
|
+
totalAmount?: number;
|
|
81
|
+
invoicePayload?: string;
|
|
82
|
+
}
|
|
83
|
+
/** build a `pre_checkout_query` {@link Update}. */
|
|
84
|
+
export declare function preCheckoutQueryUpdate(options?: PreCheckoutQueryUpdateOptions): Update;
|
|
85
|
+
/** options for {@link pollUpdate}. */
|
|
86
|
+
export interface PollUpdateOptions {
|
|
87
|
+
id?: string;
|
|
88
|
+
question?: string;
|
|
89
|
+
options?: string[];
|
|
90
|
+
isClosed?: boolean;
|
|
91
|
+
}
|
|
92
|
+
/** build a `poll` {@link Update}. */
|
|
93
|
+
export declare function pollUpdate(options?: PollUpdateOptions): Update;
|
|
94
|
+
/** options for {@link pollAnswerUpdate}. */
|
|
95
|
+
export interface PollAnswerUpdateOptions {
|
|
96
|
+
pollId?: string;
|
|
97
|
+
fromId?: number;
|
|
98
|
+
optionIds?: number[];
|
|
99
|
+
}
|
|
100
|
+
/** build a `poll_answer` {@link Update}. */
|
|
101
|
+
export declare function pollAnswerUpdate(options?: PollAnswerUpdateOptions): Update;
|
|
102
|
+
/** options for {@link myChatMemberUpdate} / {@link chatMemberUpdate}. */
|
|
103
|
+
export interface ChatMemberUpdateOptions {
|
|
104
|
+
chatId?: number;
|
|
105
|
+
fromId?: number;
|
|
106
|
+
userId?: number;
|
|
107
|
+
oldStatus?: string;
|
|
108
|
+
newStatus?: string;
|
|
109
|
+
}
|
|
110
|
+
/** build a `my_chat_member` {@link Update} (the bot's own membership changed). */
|
|
111
|
+
export declare function myChatMemberUpdate(options?: ChatMemberUpdateOptions): Update;
|
|
112
|
+
/** build a `chat_member` {@link Update} (another member's membership changed). */
|
|
113
|
+
export declare function chatMemberUpdate(options?: ChatMemberUpdateOptions): Update;
|
|
114
|
+
/** options for {@link chatJoinRequestUpdate}. */
|
|
115
|
+
export interface ChatJoinRequestUpdateOptions {
|
|
116
|
+
chatId?: number;
|
|
117
|
+
fromId?: number;
|
|
118
|
+
userChatId?: number;
|
|
119
|
+
bio?: string;
|
|
120
|
+
}
|
|
121
|
+
/** build a `chat_join_request` {@link Update}. */
|
|
122
|
+
export declare function chatJoinRequestUpdate(options?: ChatJoinRequestUpdateOptions): Update;
|
|
123
|
+
/** infer which payload key an update carries; defaults to `"message"`. */
|
|
124
|
+
export declare function detectUpdateType(update: Update): UpdateName;
|
|
125
|
+
export type { Message, Update, UpdateName, User };
|
|
126
|
+
//# sourceMappingURL=updates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.d.ts","sourceRoot":"","sources":["../src/updates.ts"],"names":[],"mappings":"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"}
|
package/lib/updates.js
ADDED
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
let updateIdCounter = 0;
|
|
2
|
+
let userIdCounter = 0;
|
|
3
|
+
/** build an {@link Update} from a partial, filling in a fresh `update_id`. */
|
|
4
|
+
export function createUpdate(partial = {}) {
|
|
5
|
+
return { update_id: ++updateIdCounter, ...partial };
|
|
6
|
+
}
|
|
7
|
+
/** build a {@link User}, auto-allocating an id if none is given. */
|
|
8
|
+
export function buildUser(options = {}) {
|
|
9
|
+
const { id = ++userIdCounter, firstName = "u", lastName, username, languageCode, isBot = false, } = options;
|
|
10
|
+
return {
|
|
11
|
+
id,
|
|
12
|
+
is_bot: isBot,
|
|
13
|
+
first_name: firstName,
|
|
14
|
+
...(lastName !== undefined ? { last_name: lastName } : {}),
|
|
15
|
+
...(username !== undefined ? { username } : {}),
|
|
16
|
+
...(languageCode !== undefined ? { language_code: languageCode } : {}),
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
const stubUser = (id) => buildUser({ id });
|
|
20
|
+
function buildMessage(options, defaultChatType) {
|
|
21
|
+
const { text = "", chatId = 1, fromId = chatId, chatType = defaultChatType } = options;
|
|
22
|
+
return {
|
|
23
|
+
message_id: 1,
|
|
24
|
+
date: 0,
|
|
25
|
+
chat: { id: chatId, type: chatType },
|
|
26
|
+
from: stubUser(fromId),
|
|
27
|
+
text,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
/** build a `message` {@link Update}. */
|
|
31
|
+
export function messageUpdate(options = {}) {
|
|
32
|
+
return createUpdate({ message: buildMessage(options, "private") });
|
|
33
|
+
}
|
|
34
|
+
/** build an `edited_message` {@link Update}. */
|
|
35
|
+
export function editedMessageUpdate(options = {}) {
|
|
36
|
+
return createUpdate({ edited_message: buildMessage(options, "private") });
|
|
37
|
+
}
|
|
38
|
+
/** build a `channel_post` {@link Update}. */
|
|
39
|
+
export function channelPostUpdate(options = {}) {
|
|
40
|
+
return createUpdate({ channel_post: buildMessage(options, "channel") });
|
|
41
|
+
}
|
|
42
|
+
/** build an `edited_channel_post` {@link Update}. */
|
|
43
|
+
export function editedChannelPostUpdate(options = {}) {
|
|
44
|
+
return createUpdate({ edited_channel_post: buildMessage(options, "channel") });
|
|
45
|
+
}
|
|
46
|
+
/** build a `callback_query` {@link Update}. */
|
|
47
|
+
export function callbackUpdate(options = {}) {
|
|
48
|
+
const { data = "", chatId = 1, fromId = chatId, message } = options;
|
|
49
|
+
return createUpdate({
|
|
50
|
+
callback_query: {
|
|
51
|
+
id: "1",
|
|
52
|
+
chat_instance: "0",
|
|
53
|
+
from: stubUser(fromId),
|
|
54
|
+
message: message ?? {
|
|
55
|
+
message_id: 1,
|
|
56
|
+
date: 0,
|
|
57
|
+
chat: { id: chatId, type: "private" },
|
|
58
|
+
},
|
|
59
|
+
data,
|
|
60
|
+
},
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
/** build an `inline_query` {@link Update}. */
|
|
64
|
+
export function inlineQueryUpdate(options = {}) {
|
|
65
|
+
const { query = "", fromId = 1, id = "1", offset = "", chatType } = options;
|
|
66
|
+
return createUpdate({
|
|
67
|
+
inline_query: {
|
|
68
|
+
id,
|
|
69
|
+
from: stubUser(fromId),
|
|
70
|
+
query,
|
|
71
|
+
offset,
|
|
72
|
+
...(chatType ? { chat_type: chatType } : {}),
|
|
73
|
+
},
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
/** build a `chosen_inline_result` {@link Update}. */
|
|
77
|
+
export function chosenInlineResultUpdate(options = {}) {
|
|
78
|
+
const { resultId = "1", fromId = 1, query = "", inlineMessageId } = options;
|
|
79
|
+
return createUpdate({
|
|
80
|
+
chosen_inline_result: {
|
|
81
|
+
result_id: resultId,
|
|
82
|
+
from: stubUser(fromId),
|
|
83
|
+
query,
|
|
84
|
+
...(inlineMessageId ? { inline_message_id: inlineMessageId } : {}),
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
/** build a `shipping_query` {@link Update}. */
|
|
89
|
+
export function shippingQueryUpdate(options = {}) {
|
|
90
|
+
const { id = "1", fromId = 1, invoicePayload = "", shippingAddress = {} } = options;
|
|
91
|
+
return createUpdate({
|
|
92
|
+
shipping_query: {
|
|
93
|
+
id,
|
|
94
|
+
from: stubUser(fromId),
|
|
95
|
+
invoice_payload: invoicePayload,
|
|
96
|
+
shipping_address: {
|
|
97
|
+
country_code: "US",
|
|
98
|
+
state: "",
|
|
99
|
+
city: "New York",
|
|
100
|
+
street_line1: "",
|
|
101
|
+
street_line2: "",
|
|
102
|
+
post_code: "10001",
|
|
103
|
+
...shippingAddress,
|
|
104
|
+
},
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
/** build a `pre_checkout_query` {@link Update}. */
|
|
109
|
+
export function preCheckoutQueryUpdate(options = {}) {
|
|
110
|
+
const { id = "1", fromId = 1, currency = "USD", totalAmount = 100, invoicePayload = "", } = options;
|
|
111
|
+
return createUpdate({
|
|
112
|
+
pre_checkout_query: {
|
|
113
|
+
id,
|
|
114
|
+
from: stubUser(fromId),
|
|
115
|
+
currency,
|
|
116
|
+
total_amount: totalAmount,
|
|
117
|
+
invoice_payload: invoicePayload,
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
/** build a `poll` {@link Update}. */
|
|
122
|
+
export function pollUpdate(options = {}) {
|
|
123
|
+
const { id = "1", question = "", options: choices = ["yes", "no"], isClosed = false } = options;
|
|
124
|
+
return createUpdate({
|
|
125
|
+
poll: {
|
|
126
|
+
id,
|
|
127
|
+
question,
|
|
128
|
+
options: choices.map((text, i) => ({ persistent_id: String(i), text, voter_count: 0 })),
|
|
129
|
+
total_voter_count: 0,
|
|
130
|
+
is_closed: isClosed,
|
|
131
|
+
is_anonymous: true,
|
|
132
|
+
type: "regular",
|
|
133
|
+
allows_multiple_answers: false,
|
|
134
|
+
allows_revoting: false,
|
|
135
|
+
members_only: false,
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
/** build a `poll_answer` {@link Update}. */
|
|
140
|
+
export function pollAnswerUpdate(options = {}) {
|
|
141
|
+
const { pollId = "1", fromId = 1, optionIds = [0] } = options;
|
|
142
|
+
return createUpdate({
|
|
143
|
+
poll_answer: {
|
|
144
|
+
poll_id: pollId,
|
|
145
|
+
user: stubUser(fromId),
|
|
146
|
+
option_ids: optionIds,
|
|
147
|
+
option_persistent_ids: optionIds.map(String),
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
function buildChatMemberUpdate(options) {
|
|
152
|
+
const { chatId = 1, fromId = chatId, userId = fromId, oldStatus = "member", newStatus = "member", } = options;
|
|
153
|
+
const user = stubUser(userId);
|
|
154
|
+
return {
|
|
155
|
+
chat: { id: chatId, type: "group" },
|
|
156
|
+
from: stubUser(fromId),
|
|
157
|
+
date: 0,
|
|
158
|
+
old_chat_member: { status: oldStatus, user },
|
|
159
|
+
new_chat_member: { status: newStatus, user },
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
/** build a `my_chat_member` {@link Update} (the bot's own membership changed). */
|
|
163
|
+
export function myChatMemberUpdate(options = {}) {
|
|
164
|
+
return createUpdate({ my_chat_member: buildChatMemberUpdate(options) });
|
|
165
|
+
}
|
|
166
|
+
/** build a `chat_member` {@link Update} (another member's membership changed). */
|
|
167
|
+
export function chatMemberUpdate(options = {}) {
|
|
168
|
+
return createUpdate({ chat_member: buildChatMemberUpdate(options) });
|
|
169
|
+
}
|
|
170
|
+
/** build a `chat_join_request` {@link Update}. */
|
|
171
|
+
export function chatJoinRequestUpdate(options = {}) {
|
|
172
|
+
const { chatId = 1, fromId = 1, userChatId = fromId, bio } = options;
|
|
173
|
+
return createUpdate({
|
|
174
|
+
chat_join_request: {
|
|
175
|
+
chat: { id: chatId, type: "group" },
|
|
176
|
+
from: stubUser(fromId),
|
|
177
|
+
user_chat_id: userChatId,
|
|
178
|
+
date: 0,
|
|
179
|
+
...(bio ? { bio } : {}),
|
|
180
|
+
},
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
/** infer which payload key an update carries; defaults to `"message"`. */
|
|
184
|
+
export function detectUpdateType(update) {
|
|
185
|
+
if (update.message)
|
|
186
|
+
return "message";
|
|
187
|
+
if (update.edited_message)
|
|
188
|
+
return "edited_message";
|
|
189
|
+
if (update.channel_post)
|
|
190
|
+
return "channel_post";
|
|
191
|
+
if (update.callback_query)
|
|
192
|
+
return "callback_query";
|
|
193
|
+
const bag = update;
|
|
194
|
+
for (const key of Object.keys(bag)) {
|
|
195
|
+
if (key !== "update_id" && bag[key] !== undefined)
|
|
196
|
+
return key;
|
|
197
|
+
}
|
|
198
|
+
return "message";
|
|
199
|
+
}
|
|
200
|
+
//# sourceMappingURL=updates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.js","sourceRoot":"","sources":["../src/updates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.test.d.ts","sourceRoot":"","sources":["../src/updates.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import assert from "node:assert/strict";
|
|
2
|
+
import test from "node:test";
|
|
3
|
+
import { buildUser, callbackUpdate, channelPostUpdate, chatJoinRequestUpdate, chatMemberUpdate, chosenInlineResultUpdate, createUpdate, detectUpdateType, editedMessageUpdate, inlineQueryUpdate, messageUpdate, myChatMemberUpdate, pollAnswerUpdate, pollUpdate, preCheckoutQueryUpdate, shippingQueryUpdate, } from "./updates.js";
|
|
4
|
+
test("messageUpdate produces a valid message update", () => {
|
|
5
|
+
const update = messageUpdate({ text: "hello", chatId: 42, chatType: "group" });
|
|
6
|
+
assert.ok(update.update_id > 0);
|
|
7
|
+
assert.equal(update.message?.text, "hello");
|
|
8
|
+
assert.equal(update.message?.chat.id, 42);
|
|
9
|
+
assert.equal(update.message?.chat.type, "group");
|
|
10
|
+
assert.equal(update.message?.from?.id, 42);
|
|
11
|
+
});
|
|
12
|
+
test("callbackUpdate produces a valid callback_query update", () => {
|
|
13
|
+
const update = callbackUpdate({ data: "click", chatId: 7, fromId: 9 });
|
|
14
|
+
assert.equal(update.callback_query?.data, "click");
|
|
15
|
+
assert.equal(update.callback_query?.from.id, 9);
|
|
16
|
+
assert.equal(update.callback_query?.message?.chat.id, 7);
|
|
17
|
+
});
|
|
18
|
+
test("createUpdate fills a fresh update_id", () => {
|
|
19
|
+
const a = createUpdate();
|
|
20
|
+
const b = createUpdate();
|
|
21
|
+
assert.notEqual(a.update_id, b.update_id);
|
|
22
|
+
});
|
|
23
|
+
test("buildUser auto-allocates distinct ids and fills defaults", () => {
|
|
24
|
+
const a = buildUser();
|
|
25
|
+
const b = buildUser({ firstName: "Linia", username: "linia" });
|
|
26
|
+
assert.notEqual(a.id, b.id);
|
|
27
|
+
assert.equal(b.first_name, "Linia");
|
|
28
|
+
assert.equal(b.username, "linia");
|
|
29
|
+
assert.equal(b.is_bot, false);
|
|
30
|
+
});
|
|
31
|
+
test("channelPostUpdate / editedMessageUpdate build the right update key", () => {
|
|
32
|
+
assert.equal(channelPostUpdate({ text: "hi" }).channel_post?.text, "hi");
|
|
33
|
+
assert.equal(channelPostUpdate().channel_post?.chat.type, "channel");
|
|
34
|
+
assert.equal(editedMessageUpdate({ text: "hi" }).edited_message?.text, "hi");
|
|
35
|
+
});
|
|
36
|
+
test("inlineQueryUpdate / chosenInlineResultUpdate build their payloads", () => {
|
|
37
|
+
const iq = inlineQueryUpdate({ query: "cats", fromId: 5 });
|
|
38
|
+
assert.equal(iq.inline_query?.query, "cats");
|
|
39
|
+
assert.equal(iq.inline_query?.from.id, 5);
|
|
40
|
+
const cir = chosenInlineResultUpdate({ resultId: "r1", query: "cats" });
|
|
41
|
+
assert.equal(cir.chosen_inline_result?.result_id, "r1");
|
|
42
|
+
});
|
|
43
|
+
test("shippingQueryUpdate / preCheckoutQueryUpdate build valid payloads", () => {
|
|
44
|
+
const sq = shippingQueryUpdate({ shippingAddress: { city: "Berlin" } });
|
|
45
|
+
assert.equal(sq.shipping_query?.shipping_address.city, "Berlin");
|
|
46
|
+
const pcq = preCheckoutQueryUpdate({ currency: "EUR", totalAmount: 500 });
|
|
47
|
+
assert.equal(pcq.pre_checkout_query?.currency, "EUR");
|
|
48
|
+
assert.equal(pcq.pre_checkout_query?.total_amount, 500);
|
|
49
|
+
});
|
|
50
|
+
test("pollUpdate / pollAnswerUpdate build valid payloads", () => {
|
|
51
|
+
const poll = pollUpdate({ question: "?", options: ["a", "b", "c"] });
|
|
52
|
+
assert.equal(poll.poll?.options.length, 3);
|
|
53
|
+
assert.equal(poll.poll?.options[1]?.text, "b");
|
|
54
|
+
const answer = pollAnswerUpdate({ optionIds: [1] });
|
|
55
|
+
assert.deepEqual(answer.poll_answer?.option_ids, [1]);
|
|
56
|
+
});
|
|
57
|
+
test("myChatMemberUpdate / chatMemberUpdate / chatJoinRequestUpdate build valid payloads", () => {
|
|
58
|
+
const my = myChatMemberUpdate({ oldStatus: "left", newStatus: "member" });
|
|
59
|
+
assert.equal(my.my_chat_member?.old_chat_member.status, "left");
|
|
60
|
+
assert.equal(my.my_chat_member?.new_chat_member.status, "member");
|
|
61
|
+
const other = chatMemberUpdate({ userId: 7 });
|
|
62
|
+
assert.equal(other.chat_member?.new_chat_member.user.id, 7);
|
|
63
|
+
const join = chatJoinRequestUpdate({ chatId: 3, fromId: 4, bio: "hi" });
|
|
64
|
+
assert.equal(join.chat_join_request?.chat.id, 3);
|
|
65
|
+
assert.equal(join.chat_join_request?.bio, "hi");
|
|
66
|
+
});
|
|
67
|
+
test("detectUpdateType infers the payload key", () => {
|
|
68
|
+
assert.equal(detectUpdateType(messageUpdate()), "message");
|
|
69
|
+
assert.equal(detectUpdateType(callbackUpdate()), "callback_query");
|
|
70
|
+
assert.equal(detectUpdateType(pollUpdate()), "poll");
|
|
71
|
+
});
|
|
72
|
+
//# sourceMappingURL=updates.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"updates.test.js","sourceRoot":"","sources":["../src/updates.test.ts"],"names":[],"mappings":"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"}
|