yaebal 0.0.3 → 0.0.5
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.d.ts +4 -4
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +3 -3
- package/lib/index.js.map +1 -1
- package/lib/index.test.js +43 -0
- package/lib/index.test.js.map +1 -1
- package/package.json +10 -10
- package/src/index.test.ts +53 -1
- package/src/index.ts +7 -8
package/lib/index.d.ts
CHANGED
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
* a single import. `createBot()` wires the rich per-update contexts (with their
|
|
5
5
|
* auto-generated shortcut methods) onto every update via the core context factory.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export { callbackData } from "@yaebal/callback-data";
|
|
8
8
|
export * from "@yaebal/contexts";
|
|
9
|
+
export * from "@yaebal/core";
|
|
9
10
|
export { and, filters, not, or } from "@yaebal/filters";
|
|
10
11
|
export { html, htmlToEntities, md, mdToEntities } from "@yaebal/fmt";
|
|
12
|
+
export { i18n } from "@yaebal/i18n";
|
|
11
13
|
export { InlineKeyboard, Keyboard } from "@yaebal/keyboard";
|
|
12
|
-
export { callbackData } from "@yaebal/callback-data";
|
|
13
14
|
export { session } from "@yaebal/session";
|
|
14
|
-
export { i18n } from "@yaebal/i18n";
|
|
15
15
|
export { deleteWebhook, serve, setWebhook, webhook } from "@yaebal/web";
|
|
16
16
|
import { type ContextByType } from "@yaebal/contexts";
|
|
17
|
-
import { type BotOptions, Context, Bot as CoreBot, type
|
|
17
|
+
import { type BotOptions, Context, Bot as CoreBot, type Filtered, type FilterQuery, type Middleware } from "@yaebal/core";
|
|
18
18
|
type ContextFactory = NonNullable<BotOptions["contextFactory"]>;
|
|
19
19
|
/**
|
|
20
20
|
* build a base {@link Context} and graft the auto-generated shortcut methods
|
package/lib/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,EAAE,IAAI,EAAE,MAAM,cAAc,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5D,OAAO,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,KAAK,aAAa,EAAc,MAAM,kBAAkB,CAAC;AAClE,OAAO,EACN,KAAK,UAAU,EACf,OAAO,EACP,GAAG,IAAI,OAAO,EAEd,KAAK,QAAQ,EACb,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,MAAM,cAAc,CAAC;AAEtB,KAAK,cAAc,GAAG,WAAW,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAC,CAAC;AA0BhE;;;;GAIG;AACH,eAAO,MAAM,WAAW,EAAE,cA0CzB,CAAC;AAGF,KAAK,SAAS,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,IAAI,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC;AAC5E,KAAK,OAAO,CAAC,CAAC,SAAS,MAAM,IAC5B,SAAS,CAAC,CAAC,CAAC,SAAS,MAAM,aAAa,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAE/F;;;;;GAKG;AACH,qBAAa,GAAG,CAAC,CAAC,SAAS,OAAO,GAAG,OAAO,CAAE,SAAQ,OAAO,CAAC,CAAC,CAAC;gBACnD,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe;IAK1C,EAAE,CAAC,CAAC,SAAS,WAAW,EAChC,KAAK,EAAE,CAAC,EACR,GAAG,QAAQ,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GACpD,IAAI;IAIE,OAAO,CACf,IAAI,EAAE,MAAM,EACZ,GAAG,QAAQ,EAAE,UAAU,CAAC,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC,EAAE,GAC3F,IAAI;CAMP;AAED,kGAAkG;AAClG,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,GAAE,UAAe,GAAG,GAAG,CAEtE"}
|
package/lib/index.js
CHANGED
|
@@ -4,14 +4,14 @@
|
|
|
4
4
|
* a single import. `createBot()` wires the rich per-update contexts (with their
|
|
5
5
|
* auto-generated shortcut methods) onto every update via the core context factory.
|
|
6
6
|
*/
|
|
7
|
-
export
|
|
7
|
+
export { callbackData } from "@yaebal/callback-data";
|
|
8
8
|
export * from "@yaebal/contexts";
|
|
9
|
+
export * from "@yaebal/core";
|
|
9
10
|
export { and, filters, not, or } from "@yaebal/filters";
|
|
10
11
|
export { html, htmlToEntities, md, mdToEntities } from "@yaebal/fmt";
|
|
12
|
+
export { i18n } from "@yaebal/i18n";
|
|
11
13
|
export { InlineKeyboard, Keyboard } from "@yaebal/keyboard";
|
|
12
|
-
export { callbackData } from "@yaebal/callback-data";
|
|
13
14
|
export { session } from "@yaebal/session";
|
|
14
|
-
export { i18n } from "@yaebal/i18n";
|
|
15
15
|
export { deleteWebhook, serve, setWebhook, webhook } from "@yaebal/web";
|
|
16
16
|
import { contextFor } from "@yaebal/contexts";
|
|
17
17
|
import { Context, Bot as CoreBot, } from "@yaebal/core";
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/index.test.js
CHANGED
|
@@ -43,6 +43,49 @@ test("typed routers expose the generated shortcuts + narrowed fields", () => {
|
|
|
43
43
|
void args;
|
|
44
44
|
void ctx.react; // command handlers get the message context
|
|
45
45
|
});
|
|
46
|
+
bot.on("guest_message", (ctx) => {
|
|
47
|
+
void ctx.answer; // GuestMessageContext shortcut — answerGuestQuery, not sendMessage
|
|
48
|
+
void ctx.guest_bot_caller_user; // who summoned the guest bot
|
|
49
|
+
});
|
|
46
50
|
assert.ok(bot);
|
|
47
51
|
});
|
|
52
|
+
test("guest_message answer() posts a real message via answerGuestQuery", async () => {
|
|
53
|
+
const guestUpdate = {
|
|
54
|
+
update_id: 1,
|
|
55
|
+
guest_message: {
|
|
56
|
+
message_id: 5,
|
|
57
|
+
date: 0,
|
|
58
|
+
chat: { id: 42, type: "private" },
|
|
59
|
+
guest_query_id: "gq1",
|
|
60
|
+
guest_bot_caller_user: { id: 7, is_bot: false, first_name: "u" },
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
const calls = [];
|
|
64
|
+
const stubApi = {
|
|
65
|
+
call: (method, params) => {
|
|
66
|
+
calls.push({ method, params });
|
|
67
|
+
return Promise.resolve({ inline_message_id: "im1" });
|
|
68
|
+
},
|
|
69
|
+
};
|
|
70
|
+
const ctx = richContext(stubApi, guestUpdate, "guest_message");
|
|
71
|
+
assert.equal(ctx.guest_bot_caller_user?.first_name, "u");
|
|
72
|
+
await ctx.answer({
|
|
73
|
+
type: "article",
|
|
74
|
+
id: "1",
|
|
75
|
+
title: "hi",
|
|
76
|
+
input_message_content: { message_text: "hi" },
|
|
77
|
+
});
|
|
78
|
+
assert.deepEqual(calls[0], {
|
|
79
|
+
method: "answerGuestQuery",
|
|
80
|
+
params: {
|
|
81
|
+
guest_query_id: "gq1",
|
|
82
|
+
result: {
|
|
83
|
+
type: "article",
|
|
84
|
+
id: "1",
|
|
85
|
+
title: "hi",
|
|
86
|
+
input_message_content: { message_text: "hi" },
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
});
|
|
48
91
|
//# sourceMappingURL=index.test.js.map
|
package/lib/index.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,oBAAoB,CAAC;AACxC,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,YAAY,CAAC;AAE7D,MAAM,GAAG,GAAG,EAAW,CAAC;AAExB,MAAM,aAAa,GAAG;IACrB,SAAS,EAAE,CAAC;IACZ,OAAO,EAAE;QACR,UAAU,EAAE,CAAC;QACb,IAAI,EAAE,CAAC;QACP,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACjC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,EAAE;QAC/C,IAAI,EAAE,IAAI;KACV;CACQ,CAAC;AAEX,IAAI,CAAC,wEAAwE,EAAE,GAAG,EAAE;IACnF,MAAM,GAAG,GAAG,WAAW,CAAC,GAAG,EAAE,aAAa,EAAE,SAAS,CAAC,CAAC;IAEvD,MAAM,CAAC,EAAE,CAAC,GAAG,YAAY,OAAO,CAAC,CAAC,CAAC,8CAA8C;IAEjF,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,0BAA0B;IACxD,MAAM,CAAC,KAAK,CAAE,GAAwC,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAC,2BAA2B;IAClG,MAAM,CAAC,KAAK,CAAC,OAAQ,GAAoC,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,8BAA8B;IAC5G,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,wBAAwB;AACpE,CAAC,CAAC,CAAC;AAEH,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;IAChE,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;IAClD,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC5C,CAAC,CAAC,CAAC;AAEH,mFAAmF;AACnF,4EAA4E;AAC5E,IAAI,CAAC,gEAAgE,EAAE,GAAG,EAAE;IAC3E,MAAM,GAAG,GAAG,SAAS,CAAC,SAAS,CAAC,CAAC;IAEjC,GAAG,CAAC,EAAE,CAAC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE;QAC9B,MAAM,CAAC,GAAW,GAAG,CAAC,IAAI,CAAC,CAAC,yCAAyC;QAErE,KAAK,CAAC,CAAC;QACP,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,oDAAoD;QACpE,KAAK,GAAG,CAAC,QAAQ,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,EAAE,CAAC,qBAAqB,EAAE,CAAC,GAAG,EAAE,EAAE;QACrC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,gCAAgC;IAClD,CAAC,CAAC,CAAC;IAEH,GAAG,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;QAC5B,MAAM,IAAI,GAAa,GAAG,CAAC,IAAI,CAAC;QAEhC,KAAK,IAAI,CAAC;QACV,KAAK,GAAG,CAAC,KAAK,CAAC,CAAC,2CAA2C;IAC5D,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.test.js","sourceRoot":"","sources":["../src/index.test.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "yaebal",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "yaebal — batteries-included Telegram Bot API framework: core + auto-generated contexts + the common plugins, one import.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./lib/index.js",
|
|
@@ -16,15 +16,15 @@
|
|
|
16
16
|
"src"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@yaebal/
|
|
20
|
-
"@yaebal/
|
|
21
|
-
"@yaebal/filters": "0.0.
|
|
22
|
-
"@yaebal/
|
|
23
|
-
"@yaebal/
|
|
24
|
-
"@yaebal/
|
|
25
|
-
"@yaebal/
|
|
26
|
-
"@yaebal/
|
|
27
|
-
"@yaebal/web": "0.0.
|
|
19
|
+
"@yaebal/contexts": "0.0.4",
|
|
20
|
+
"@yaebal/callback-data": "0.0.2",
|
|
21
|
+
"@yaebal/filters": "0.0.2",
|
|
22
|
+
"@yaebal/core": "0.0.7",
|
|
23
|
+
"@yaebal/fmt": "0.0.2",
|
|
24
|
+
"@yaebal/session": "0.0.2",
|
|
25
|
+
"@yaebal/i18n": "0.0.3",
|
|
26
|
+
"@yaebal/keyboard": "0.1.0",
|
|
27
|
+
"@yaebal/web": "0.0.2"
|
|
28
28
|
},
|
|
29
29
|
"devDependencies": {
|
|
30
30
|
"@types/node": "latest"
|
package/src/index.test.ts
CHANGED
|
@@ -56,6 +56,58 @@ test("typed routers expose the generated shortcuts + narrowed fields", () => {
|
|
|
56
56
|
void args;
|
|
57
57
|
void ctx.react; // command handlers get the message context
|
|
58
58
|
});
|
|
59
|
-
|
|
59
|
+
|
|
60
|
+
bot.on("guest_message", (ctx) => {
|
|
61
|
+
void ctx.answer; // GuestMessageContext shortcut — answerGuestQuery, not sendMessage
|
|
62
|
+
void ctx.guest_bot_caller_user; // who summoned the guest bot
|
|
63
|
+
});
|
|
64
|
+
|
|
60
65
|
assert.ok(bot);
|
|
61
66
|
});
|
|
67
|
+
|
|
68
|
+
test("guest_message answer() posts a real message via answerGuestQuery", async () => {
|
|
69
|
+
const guestUpdate = {
|
|
70
|
+
update_id: 1,
|
|
71
|
+
guest_message: {
|
|
72
|
+
message_id: 5,
|
|
73
|
+
date: 0,
|
|
74
|
+
chat: { id: 42, type: "private" },
|
|
75
|
+
guest_query_id: "gq1",
|
|
76
|
+
guest_bot_caller_user: { id: 7, is_bot: false, first_name: "u" },
|
|
77
|
+
},
|
|
78
|
+
} as never;
|
|
79
|
+
|
|
80
|
+
const calls: { method: string; params: unknown }[] = [];
|
|
81
|
+
const stubApi = {
|
|
82
|
+
call: (method: string, params: unknown) => {
|
|
83
|
+
calls.push({ method, params });
|
|
84
|
+
return Promise.resolve({ inline_message_id: "im1" });
|
|
85
|
+
},
|
|
86
|
+
} as never;
|
|
87
|
+
|
|
88
|
+
const ctx = richContext(stubApi, guestUpdate, "guest_message") as Context & {
|
|
89
|
+
answer: (result: unknown) => Promise<unknown>;
|
|
90
|
+
guest_bot_caller_user?: { first_name: string };
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
assert.equal(ctx.guest_bot_caller_user?.first_name, "u");
|
|
94
|
+
|
|
95
|
+
await ctx.answer({
|
|
96
|
+
type: "article",
|
|
97
|
+
id: "1",
|
|
98
|
+
title: "hi",
|
|
99
|
+
input_message_content: { message_text: "hi" },
|
|
100
|
+
});
|
|
101
|
+
assert.deepEqual(calls[0], {
|
|
102
|
+
method: "answerGuestQuery",
|
|
103
|
+
params: {
|
|
104
|
+
guest_query_id: "gq1",
|
|
105
|
+
result: {
|
|
106
|
+
type: "article",
|
|
107
|
+
id: "1",
|
|
108
|
+
title: "hi",
|
|
109
|
+
input_message_content: { message_text: "hi" },
|
|
110
|
+
},
|
|
111
|
+
},
|
|
112
|
+
});
|
|
113
|
+
});
|
package/src/index.ts
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
* auto-generated shortcut methods) onto every update via the core context factory.
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
-
export
|
|
8
|
+
export { callbackData } from "@yaebal/callback-data";
|
|
9
9
|
export * from "@yaebal/contexts";
|
|
10
|
+
export * from "@yaebal/core";
|
|
10
11
|
export { and, filters, not, or } from "@yaebal/filters";
|
|
11
12
|
export { html, htmlToEntities, md, mdToEntities } from "@yaebal/fmt";
|
|
13
|
+
export { i18n } from "@yaebal/i18n";
|
|
12
14
|
export { InlineKeyboard, Keyboard } from "@yaebal/keyboard";
|
|
13
|
-
export { callbackData } from "@yaebal/callback-data";
|
|
14
15
|
export { session } from "@yaebal/session";
|
|
15
|
-
export { i18n } from "@yaebal/i18n";
|
|
16
16
|
export { deleteWebhook, serve, setWebhook, webhook } from "@yaebal/web";
|
|
17
17
|
|
|
18
18
|
import { type ContextByType, contextFor } from "@yaebal/contexts";
|
|
@@ -21,8 +21,8 @@ import {
|
|
|
21
21
|
Context,
|
|
22
22
|
Bot as CoreBot,
|
|
23
23
|
type FileReader,
|
|
24
|
-
type FilterQuery,
|
|
25
24
|
type Filtered,
|
|
25
|
+
type FilterQuery,
|
|
26
26
|
type Middleware,
|
|
27
27
|
} from "@yaebal/core";
|
|
28
28
|
|
|
@@ -46,7 +46,7 @@ const autoReadFile: FileReader = async (path) => {
|
|
|
46
46
|
if (g.Deno) return g.Deno.readFile(path);
|
|
47
47
|
if (g.Bun) return g.Bun.file(path).bytes();
|
|
48
48
|
if (g.process?.versions?.node) return (await import("node:fs/promises")).readFile(path);
|
|
49
|
-
|
|
49
|
+
|
|
50
50
|
throw new Error(
|
|
51
51
|
"yaebal: no filesystem in this runtime — send media.buffer()/url() instead of media.path().",
|
|
52
52
|
);
|
|
@@ -103,9 +103,8 @@ export const richContext: ContextFactory = (api, update, updateType) => {
|
|
|
103
103
|
|
|
104
104
|
// map a filter query to the matching generated context (the part before `:`).
|
|
105
105
|
type QueryHead<Q extends string> = Q extends `${infer H}:${string}` ? H : Q;
|
|
106
|
-
type RichFor<Q extends string> =
|
|
107
|
-
? ContextByType[QueryHead<Q>]
|
|
108
|
-
: Record<never, never>;
|
|
106
|
+
type RichFor<Q extends string> =
|
|
107
|
+
QueryHead<Q> extends keyof ContextByType ? ContextByType[QueryHead<Q>] : Record<never, never>;
|
|
109
108
|
|
|
110
109
|
/**
|
|
111
110
|
* a {@link CoreBot} whose routers type the handler context to the matching
|