@frogbotai/piece-telegram-bot 0.29.0 → 0.31.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/dist/actions/index.d.ts +5 -5
- package/dist/actions/index.d.ts.map +1 -1
- package/dist/actions/index.js +165 -91
- package/dist/actions/index.js.map +1 -1
- package/dist/adapter.js +10 -9
- package/dist/adapter.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +36 -26
- package/dist/client.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +15 -10
- package/dist/config.js.map +1 -1
- package/dist/define.js +1 -0
- package/dist/define.js.map +1 -1
- package/dist/files.d.ts.map +1 -1
- package/dist/files.js +23 -20
- package/dist/files.js.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.js +21 -13
- package/dist/index.js.map +1 -1
- package/dist/questions/index.js +2 -1
- package/dist/questions/index.js.map +1 -1
- package/dist/questions/keyboard.d.ts.map +1 -1
- package/dist/questions/keyboard.js +132 -76
- package/dist/questions/keyboard.js.map +1 -1
- package/dist/questions/notify.js +38 -23
- package/dist/questions/notify.js.map +1 -1
- package/dist/questions/parse.js +128 -53
- package/dist/questions/parse.js.map +1 -1
- package/dist/questions/render.js +21 -5
- package/dist/questions/render.js.map +1 -1
- package/dist/questions/settled.js +30 -9
- package/dist/questions/settled.js.map +1 -1
- package/dist/questions/state.js +10 -8
- package/dist/questions/state.js.map +1 -1
- package/dist/questions/supports.js +2 -1
- package/dist/questions/supports.js.map +1 -1
- package/dist/questions/telegramThread.js +11 -7
- package/dist/questions/telegramThread.js.map +1 -1
- package/dist/questions/updated.js +19 -14
- package/dist/questions/updated.js.map +1 -1
- package/dist/triggers/newUpdate.d.ts +2 -2
- package/dist/triggers/newUpdate.d.ts.map +1 -1
- package/dist/triggers/newUpdate.js +35 -21
- package/dist/triggers/newUpdate.js.map +1 -1
- package/dist/webhook.d.ts.map +1 -1
- package/dist/webhook.js +8 -7
- package/dist/webhook.js.map +1 -1
- package/package.json +4 -4
package/dist/client.js
CHANGED
|
@@ -1,19 +1,17 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { telegramBotAuth } from './config.js';
|
|
3
|
-
const telegramResponse = z
|
|
4
|
-
.object({
|
|
3
|
+
const telegramResponse = z.object({
|
|
5
4
|
ok: z.boolean(),
|
|
6
5
|
result: z.unknown().optional(),
|
|
7
6
|
error_code: z.number().optional(),
|
|
8
7
|
description: z.string().optional(),
|
|
9
|
-
parameters: z.record(z.string(), z.unknown()).optional()
|
|
10
|
-
})
|
|
11
|
-
.passthrough();
|
|
8
|
+
parameters: z.record(z.string(), z.unknown()).optional()
|
|
9
|
+
}).passthrough();
|
|
12
10
|
export class TelegramApiError extends Error {
|
|
13
11
|
code;
|
|
14
12
|
description;
|
|
15
13
|
retryAfter;
|
|
16
|
-
constructor({ code, description, method, retryAfter
|
|
14
|
+
constructor({ code, description, method, retryAfter }){
|
|
17
15
|
super(`Telegram API ${method} failed${code ? ` (${code})` : ''}: ${description}`);
|
|
18
16
|
this.name = 'TelegramApiError';
|
|
19
17
|
this.code = code;
|
|
@@ -23,20 +21,21 @@ export class TelegramApiError extends Error {
|
|
|
23
21
|
}
|
|
24
22
|
function queryString(query) {
|
|
25
23
|
const params = new URLSearchParams();
|
|
26
|
-
Object.entries(query ?? {}).forEach(([key, value])
|
|
27
|
-
if (value !== undefined && value !== null)
|
|
28
|
-
params.set(key, String(value));
|
|
24
|
+
Object.entries(query ?? {}).forEach(([key, value])=>{
|
|
25
|
+
if (value !== undefined && value !== null) params.set(key, String(value));
|
|
29
26
|
});
|
|
30
27
|
const value = params.toString();
|
|
31
28
|
return value ? `?${value}` : '';
|
|
32
29
|
}
|
|
33
|
-
function apiError({ method, response, result
|
|
30
|
+
function apiError({ method, response, result }) {
|
|
34
31
|
const retryAfter = result.parameters?.retry_after;
|
|
35
32
|
return new TelegramApiError({
|
|
36
33
|
method,
|
|
37
34
|
code: result.error_code,
|
|
38
35
|
description: result.description ?? response.statusText,
|
|
39
|
-
...
|
|
36
|
+
...typeof retryAfter === 'number' ? {
|
|
37
|
+
retryAfter
|
|
38
|
+
} : {}
|
|
40
39
|
});
|
|
41
40
|
}
|
|
42
41
|
export function createTelegramBotClient({ auth: value }) {
|
|
@@ -44,43 +43,54 @@ export function createTelegramBotClient({ auth: value }) {
|
|
|
44
43
|
const apiUrl = (process.env.TELEGRAM_API_BASE_URL ?? 'https://api.telegram.org').replace(/\/+$/, '');
|
|
45
44
|
const baseUrl = `${apiUrl}/bot${auth.botToken}`;
|
|
46
45
|
return {
|
|
47
|
-
fileUrl(path) {
|
|
46
|
+
fileUrl (path) {
|
|
48
47
|
return `${apiUrl}/file/bot${auth.botToken}/${path.replace(/^\/+/, '')}`;
|
|
49
48
|
},
|
|
50
|
-
async call(method, body) {
|
|
49
|
+
async call (method, body) {
|
|
51
50
|
const multipart = body instanceof FormData;
|
|
52
51
|
const response = await fetch(`${baseUrl}/${method}`, {
|
|
53
52
|
method: 'POST',
|
|
54
|
-
headers: multipart ? undefined : {
|
|
55
|
-
|
|
53
|
+
headers: multipart ? undefined : {
|
|
54
|
+
'Content-Type': 'application/json'
|
|
55
|
+
},
|
|
56
|
+
body: multipart ? body : JSON.stringify(body ?? {})
|
|
56
57
|
});
|
|
57
58
|
const result = telegramResponse.parse(await response.json());
|
|
58
|
-
if (!response.ok || !result.ok)
|
|
59
|
-
|
|
59
|
+
if (!response.ok || !result.ok) throw apiError({
|
|
60
|
+
method,
|
|
61
|
+
response,
|
|
62
|
+
result
|
|
63
|
+
});
|
|
60
64
|
return result;
|
|
61
65
|
},
|
|
62
|
-
async request(endpoint, request) {
|
|
66
|
+
async request (endpoint, request) {
|
|
63
67
|
const path = endpoint.replace(/^\/+/, '');
|
|
64
68
|
const response = await fetch(`${baseUrl}/${path}${queryString(request.query)}`, {
|
|
65
69
|
method: request.method ?? 'GET',
|
|
66
|
-
headers: request.body === undefined
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
+
headers: request.body === undefined ? request.headers : {
|
|
71
|
+
'Content-Type': 'application/json',
|
|
72
|
+
...request.headers
|
|
73
|
+
},
|
|
74
|
+
body: request.body === undefined ? undefined : JSON.stringify(request.body)
|
|
70
75
|
});
|
|
71
76
|
const result = telegramResponse.parse(await response.json());
|
|
72
|
-
if (!response.ok ||
|
|
73
|
-
throw apiError({
|
|
77
|
+
if (!response.ok || typeof result.ok === 'boolean' && !result.ok) {
|
|
78
|
+
throw apiError({
|
|
79
|
+
method: path,
|
|
80
|
+
response,
|
|
81
|
+
result
|
|
82
|
+
});
|
|
74
83
|
}
|
|
75
84
|
return result;
|
|
76
85
|
},
|
|
77
|
-
async downloadFile(path) {
|
|
86
|
+
async downloadFile (path) {
|
|
78
87
|
const response = await fetch(this.fileUrl(path));
|
|
79
88
|
if (!response.ok) {
|
|
80
89
|
throw new Error(`Telegram file download failed (${response.status}): ${response.statusText}`);
|
|
81
90
|
}
|
|
82
91
|
return Buffer.from(await response.arrayBuffer()).toString('base64');
|
|
83
|
-
}
|
|
92
|
+
}
|
|
84
93
|
};
|
|
85
94
|
}
|
|
95
|
+
|
|
86
96
|
//# sourceMappingURL=client.js.map
|
package/dist/client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/client.ts"],"names":["z","telegramBotAuth","telegramResponse","object","ok","boolean","result","unknown","optional","error_code","number","description","string","parameters","record","passthrough","TelegramApiError","Error","code","retryAfter","method","name","queryString","query","params","URLSearchParams","Object","entries","forEach","key","value","undefined","set","String","toString","apiError","response","retry_after","statusText","createTelegramBotClient","auth","parse","apiUrl","process","env","TELEGRAM_API_BASE_URL","replace","baseUrl","botToken","fileUrl","path","call","body","multipart","FormData","fetch","headers","JSON","stringify","json","request","endpoint","downloadFile","status","Buffer","from","arrayBuffer"],"mappings":"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","file":"client.js"}
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;iBAE1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;iBAa7B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,eAAe;;iBAE1B,CAAC;AAEH,eAAO,MAAM,kBAAkB;;;;iBAa7B,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,eAAe,CAAC,CAAC;AAE/D,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,kBAAkB,CAAC,CAAC"}
|
package/dist/config.js
CHANGED
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export const telegramBotAuth = z.object({
|
|
3
|
-
botToken: z.string().min(1).meta({
|
|
3
|
+
botToken: z.string().min(1).meta({
|
|
4
|
+
label: 'Bot token',
|
|
5
|
+
secret: true
|
|
6
|
+
})
|
|
4
7
|
});
|
|
5
8
|
export const telegramBotOptions = z.object({
|
|
6
|
-
webhookSecret: z
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
webhookSecret: z.string().min(1).max(256).regex(/^[A-Za-z0-9_-]+$/, 'Webhook secret may contain letters, numbers, underscores, and hyphens.').optional().meta({
|
|
10
|
+
label: 'Webhook secret',
|
|
11
|
+
secret: true
|
|
12
|
+
}),
|
|
13
|
+
botUsername: z.string().min(1).optional().meta({
|
|
14
|
+
label: 'Bot username'
|
|
15
|
+
}),
|
|
16
|
+
allowedUserIds: z.array(z.string().min(1)).optional().meta({
|
|
17
|
+
label: 'Allowed user IDs'
|
|
18
|
+
})
|
|
15
19
|
});
|
|
20
|
+
|
|
16
21
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/config.ts"],"names":["z","telegramBotAuth","object","botToken","string","min","meta","label","secret","telegramBotOptions","webhookSecret","max","regex","optional","botUsername","allowedUserIds","array"],"mappings":"AAAA,SAASA,CAAC,QAAQ,MAAM;AAExB,OAAO,MAAMC,kBAAkBD,EAAEE,MAAM,CAAC;IACtCC,UAAUH,EAAEI,MAAM,GAAGC,GAAG,CAAC,GAAGC,IAAI,CAAC;QAAEC,OAAO;QAAaC,QAAQ;IAAK;AACtE,GAAG;AAEH,OAAO,MAAMC,qBAAqBT,EAAEE,MAAM,CAAC;IACzCQ,eAAeV,EACZI,MAAM,GACNC,GAAG,CAAC,GACJM,GAAG,CAAC,KACJC,KAAK,CACJ,oBACA,0EAEDC,QAAQ,GACRP,IAAI,CAAC;QAAEC,OAAO;QAAkBC,QAAQ;IAAK;IAChDM,aAAad,EAAEI,MAAM,GAAGC,GAAG,CAAC,GAAGQ,QAAQ,GAAGP,IAAI,CAAC;QAAEC,OAAO;IAAe;IACvEQ,gBAAgBf,EAAEgB,KAAK,CAAChB,EAAEI,MAAM,GAAGC,GAAG,CAAC,IAAIQ,QAAQ,GAAGP,IAAI,CAAC;QAAEC,OAAO;IAAmB;AACzF,GAAG","file":"config.js"}
|
package/dist/define.js
CHANGED
package/dist/define.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/define.ts"],"names":["createPieceHelpers","defineAction","defineAppTrigger"],"mappings":"AAAA,SAASA,kBAAkB,QAAQ,iBAAiB;AAKpD,OAAO,MAAM,EAAEC,YAAY,EAAEC,gBAAgB,EAAE,GAAGF,qBAG9C","file":"define.js"}
|
package/dist/files.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../src/files.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;iBAGvB,CAAC;AAQH,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,cAAc,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,YAAY,CAAC;;;GA+C/F"}
|
package/dist/files.js
CHANGED
|
@@ -1,56 +1,59 @@
|
|
|
1
|
+
import { findPieceFile } from 'frogbot/pieces';
|
|
1
2
|
import { z } from 'zod';
|
|
2
3
|
export const telegramFile = z.object({
|
|
3
|
-
fileId: z.union([
|
|
4
|
-
|
|
4
|
+
fileId: z.union([
|
|
5
|
+
z.string(),
|
|
6
|
+
z.number()
|
|
7
|
+
]),
|
|
8
|
+
name: z.string().optional()
|
|
5
9
|
});
|
|
6
10
|
const storedFile = z.object({
|
|
7
11
|
url: z.string(),
|
|
8
12
|
filename: z.string().optional(),
|
|
9
|
-
name: z.string().optional()
|
|
13
|
+
name: z.string().optional()
|
|
10
14
|
});
|
|
11
15
|
export async function loadTelegramFile(req, value) {
|
|
12
|
-
const
|
|
13
|
-
if (!collection) {
|
|
14
|
-
throw new Error('[frogbot] Telegram uploads require the files collection to be configured.');
|
|
15
|
-
}
|
|
16
|
-
const result = await req.frogbot.findByID({
|
|
17
|
-
collection,
|
|
16
|
+
const result = await findPieceFile(req, 'Telegram', {
|
|
18
17
|
id: value.fileId,
|
|
19
18
|
depth: 0,
|
|
20
19
|
req,
|
|
21
|
-
overrideAccess: false
|
|
20
|
+
overrideAccess: false
|
|
22
21
|
});
|
|
23
22
|
const file = storedFile.safeParse(result);
|
|
24
|
-
if (!file.success)
|
|
25
|
-
throw new Error(`[frogbot] File '${value.fileId}' is unavailable.`);
|
|
23
|
+
if (!file.success) throw new Error(`[frogbot] File '${value.fileId}' is unavailable.`);
|
|
26
24
|
const config = await req.frogbot.config._internal.payloadConfig;
|
|
27
25
|
const baseUrl = config.serverURL ?? req.url;
|
|
28
|
-
if (!baseUrl)
|
|
29
|
-
throw new Error(`[frogbot] File '${value.fileId}' has no resolvable URL.`);
|
|
26
|
+
if (!baseUrl) throw new Error(`[frogbot] File '${value.fileId}' has no resolvable URL.`);
|
|
30
27
|
const url = new URL(file.data.url, baseUrl);
|
|
31
28
|
const base = new URL(baseUrl);
|
|
32
29
|
const headers = new Headers();
|
|
33
|
-
if (![
|
|
30
|
+
if (![
|
|
31
|
+
'http:',
|
|
32
|
+
'https:'
|
|
33
|
+
].includes(url.protocol) || url.username || url.password) {
|
|
34
34
|
throw new Error(`[frogbot] File '${value.fileId}' has an unsafe URL.`);
|
|
35
35
|
}
|
|
36
36
|
if (url.origin === base.origin) {
|
|
37
|
-
for (const name of [
|
|
37
|
+
for (const name of [
|
|
38
|
+
'authorization',
|
|
39
|
+
'cookie'
|
|
40
|
+
]){
|
|
38
41
|
const header = req.headers.get(name);
|
|
39
|
-
if (header)
|
|
40
|
-
headers.set(name, header);
|
|
42
|
+
if (header) headers.set(name, header);
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
45
|
const response = await fetch(url, {
|
|
44
46
|
headers,
|
|
45
47
|
redirect: 'error',
|
|
46
|
-
signal: req.signal ?? undefined
|
|
48
|
+
signal: req.signal ?? undefined
|
|
47
49
|
});
|
|
48
50
|
if (!response.ok) {
|
|
49
51
|
throw new Error(`[frogbot] File '${value.fileId}' is unavailable (${response.status}).`);
|
|
50
52
|
}
|
|
51
53
|
return {
|
|
52
54
|
data: await response.blob(),
|
|
53
|
-
name: value.name ?? file.data.filename ?? file.data.name ?? 'upload'
|
|
55
|
+
name: value.name ?? file.data.filename ?? file.data.name ?? 'upload'
|
|
54
56
|
};
|
|
55
57
|
}
|
|
58
|
+
|
|
56
59
|
//# sourceMappingURL=files.js.map
|
package/dist/files.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/files.ts"],"names":["findPieceFile","z","telegramFile","object","fileId","union","string","number","name","optional","storedFile","url","filename","loadTelegramFile","req","value","result","id","depth","overrideAccess","file","safeParse","success","Error","config","frogbot","_internal","payloadConfig","baseUrl","serverURL","URL","data","base","headers","Headers","includes","protocol","username","password","origin","header","get","set","response","fetch","redirect","signal","undefined","ok","status","blob"],"mappings":"AACA,SAASA,aAAa,QAAQ,iBAAiB;AAC/C,SAASC,CAAC,QAAQ,MAAM;AAExB,OAAO,MAAMC,eAAeD,EAAEE,MAAM,CAAC;IACnCC,QAAQH,EAAEI,KAAK,CAAC;QAACJ,EAAEK,MAAM;QAAIL,EAAEM,MAAM;KAAG;IACxCC,MAAMP,EAAEK,MAAM,GAAGG,QAAQ;AAC3B,GAAG;AAEH,MAAMC,aAAaT,EAAEE,MAAM,CAAC;IAC1BQ,KAAKV,EAAEK,MAAM;IACbM,UAAUX,EAAEK,MAAM,GAAGG,QAAQ;IAC7BD,MAAMP,EAAEK,MAAM,GAAGG,QAAQ;AAC3B;AAEA,OAAO,eAAeI,iBAAiBC,GAAmB,EAAEC,KAAoC;IAC9F,MAAMC,SAAS,MAAMhB,cAAcc,KAAK,YAAY;QAClDG,IAAIF,MAAMX,MAAM;QAChBc,OAAO;QACPJ;QACAK,gBAAgB;IAClB;IAEA,MAAMC,OAAOV,WAAWW,SAAS,CAACL;IAElC,IAAI,CAACI,KAAKE,OAAO,EAAE,MAAM,IAAIC,MAAM,CAAC,gBAAgB,EAAER,MAAMX,MAAM,CAAC,iBAAiB,CAAC;IAErF,MAAMoB,SAAS,MAAMV,IAAIW,OAAO,CAACD,MAAM,CAACE,SAAS,CAACC,aAAa;IAC/D,MAAMC,UAAUJ,OAAOK,SAAS,IAAIf,IAAIH,GAAG;IAE3C,IAAI,CAACiB,SAAS,MAAM,IAAIL,MAAM,CAAC,gBAAgB,EAAER,MAAMX,MAAM,CAAC,wBAAwB,CAAC;IAEvF,MAAMO,MAAM,IAAImB,IAAIV,KAAKW,IAAI,CAACpB,GAAG,EAAEiB;IACnC,MAAMI,OAAO,IAAIF,IAAIF;IACrB,MAAMK,UAAU,IAAIC;IAEpB,IAAI,CAAC;QAAC;QAAS;KAAS,CAACC,QAAQ,CAACxB,IAAIyB,QAAQ,KAAKzB,IAAI0B,QAAQ,IAAI1B,IAAI2B,QAAQ,EAAE;QAC/E,MAAM,IAAIf,MAAM,CAAC,gBAAgB,EAAER,MAAMX,MAAM,CAAC,oBAAoB,CAAC;IACvE;IAEA,IAAIO,IAAI4B,MAAM,KAAKP,KAAKO,MAAM,EAAE;QAC9B,KAAK,MAAM/B,QAAQ;YAAC;YAAiB;SAAS,CAAE;YAC9C,MAAMgC,SAAS1B,IAAImB,OAAO,CAACQ,GAAG,CAACjC;YAE/B,IAAIgC,QAAQP,QAAQS,GAAG,CAAClC,MAAMgC;QAChC;IACF;IAEA,MAAMG,WAAW,MAAMC,MAAMjC,KAAK;QAChCsB;QACAY,UAAU;QACVC,QAAQhC,IAAIgC,MAAM,IAAIC;IACxB;IAEA,IAAI,CAACJ,SAASK,EAAE,EAAE;QAChB,MAAM,IAAIzB,MAAM,CAAC,gBAAgB,EAAER,MAAMX,MAAM,CAAC,kBAAkB,EAAEuC,SAASM,MAAM,CAAC,EAAE,CAAC;IACzF;IAEA,OAAO;QACLlB,MAAM,MAAMY,SAASO,IAAI;QACzB1C,MAAMO,MAAMP,IAAI,IAAIY,KAAKW,IAAI,CAACnB,QAAQ,IAAIQ,KAAKW,IAAI,CAACvB,IAAI,IAAI;IAC9D;AACF","file":"files.js"}
|
package/dist/index.d.ts
CHANGED
|
@@ -85,10 +85,10 @@ export declare const createTelegramBot: import("frogbot").PieceFactory<{
|
|
|
85
85
|
protectContent: z.ZodDefault<z.ZodBoolean>;
|
|
86
86
|
chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
87
87
|
mediaType: z.ZodEnum<{
|
|
88
|
-
animation: "animation";
|
|
89
88
|
photo: "photo";
|
|
90
|
-
sticker: "sticker";
|
|
91
89
|
video: "video";
|
|
90
|
+
sticker: "sticker";
|
|
91
|
+
animation: "animation";
|
|
92
92
|
}>;
|
|
93
93
|
media: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
94
94
|
fileId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
@@ -230,10 +230,10 @@ export declare const createTelegramBot: import("frogbot").PieceFactory<{
|
|
|
230
230
|
chatId: z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>;
|
|
231
231
|
media: z.ZodArray<z.ZodObject<{
|
|
232
232
|
type: z.ZodEnum<{
|
|
233
|
-
audio: "audio";
|
|
234
|
-
document: "document";
|
|
235
233
|
photo: "photo";
|
|
236
234
|
video: "video";
|
|
235
|
+
document: "document";
|
|
236
|
+
audio: "audio";
|
|
237
237
|
}>;
|
|
238
238
|
media: z.ZodString;
|
|
239
239
|
caption: z.ZodOptional<z.ZodString>;
|
|
@@ -578,8 +578,8 @@ export declare const createTelegramBot: import("frogbot").PieceFactory<{
|
|
|
578
578
|
slug: "answerCallbackQuery";
|
|
579
579
|
}, import("frogbot").PieceActionDefinition<z.ZodObject<{
|
|
580
580
|
method: z.ZodDefault<z.ZodEnum<{
|
|
581
|
-
POST: "POST";
|
|
582
581
|
GET: "GET";
|
|
582
|
+
POST: "POST";
|
|
583
583
|
PUT: "PUT";
|
|
584
584
|
PATCH: "PATCH";
|
|
585
585
|
DELETE: "DELETE";
|
|
@@ -610,10 +610,10 @@ export declare const createTelegramBot: import("frogbot").PieceFactory<{
|
|
|
610
610
|
edited_message: "edited_message";
|
|
611
611
|
channel_post: "channel_post";
|
|
612
612
|
edited_channel_post: "edited_channel_post";
|
|
613
|
-
poll: "poll";
|
|
614
613
|
callback_query: "callback_query";
|
|
615
614
|
inline_query: "inline_query";
|
|
616
615
|
chosen_inline_result: "chosen_inline_result";
|
|
616
|
+
poll: "poll";
|
|
617
617
|
poll_answer: "poll_answer";
|
|
618
618
|
my_chat_member: "my_chat_member";
|
|
619
619
|
chat_member: "chat_member";
|
|
@@ -631,7 +631,7 @@ export declare const createTelegramBot: import("frogbot").PieceFactory<{
|
|
|
631
631
|
type: "app";
|
|
632
632
|
event: string;
|
|
633
633
|
run(args: import("frogbot").PieceRunArgs<{
|
|
634
|
-
updateTypes: ("message" | "edited_message" | "channel_post" | "edited_channel_post" | "
|
|
634
|
+
updateTypes: ("message" | "edited_message" | "channel_post" | "edited_channel_post" | "callback_query" | "inline_query" | "chosen_inline_result" | "poll" | "poll_answer" | "my_chat_member" | "chat_member" | "chat_join_request")[];
|
|
635
635
|
}, {
|
|
636
636
|
webhookSecret?: string | undefined;
|
|
637
637
|
botUsername?: string | undefined;
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { definePiece } from 'frogbot/pieces';
|
|
2
|
-
import { answerCallbackQuery, createInviteLink, customApiCall, deleteMessage, editMessageText, forwardMessage, getChat, getChatMember, getFile, pinMessage, sendAudio, sendChatAction, sendDocument, sendLocation, sendMedia, sendMediaGroup, sendPoll, sendTextMessage, unpinMessage
|
|
2
|
+
import { answerCallbackQuery, createInviteLink, customApiCall, deleteMessage, editMessageText, forwardMessage, getChat, getChatMember, getFile, pinMessage, sendAudio, sendChatAction, sendDocument, sendLocation, sendMedia, sendMediaGroup, sendPoll, sendTextMessage, unpinMessage } from './actions/index.js';
|
|
3
3
|
import { createFrogBotTelegramAdapter } from './adapter.js';
|
|
4
4
|
import { createTelegramBotClient } from './client.js';
|
|
5
5
|
import { telegramBotAuth, telegramBotOptions } from './config.js';
|
|
@@ -25,18 +25,20 @@ export const telegramBotActions = [
|
|
|
25
25
|
'getFile',
|
|
26
26
|
'createInviteLink',
|
|
27
27
|
'answerCallbackQuery',
|
|
28
|
-
'customApiCall'
|
|
28
|
+
'customApiCall'
|
|
29
|
+
];
|
|
30
|
+
export const telegramBotTriggers = [
|
|
31
|
+
'newUpdate'
|
|
29
32
|
];
|
|
30
|
-
export const telegramBotTriggers = ['newUpdate'];
|
|
31
33
|
export const telegramBotScopes = [];
|
|
32
34
|
const telegramBotWebhook = {
|
|
33
35
|
verify: verifyTelegramWebhook,
|
|
34
|
-
parse() {
|
|
36
|
+
parse () {
|
|
35
37
|
return parseTelegramWebhook();
|
|
36
|
-
}
|
|
38
|
+
}
|
|
37
39
|
};
|
|
38
40
|
const telegramBotChannel = {
|
|
39
|
-
adapter({ auth, options }) {
|
|
41
|
+
adapter ({ auth, options }) {
|
|
40
42
|
if (!options.webhookSecret) {
|
|
41
43
|
throw new Error('Telegram channels require a webhookSecret option.');
|
|
42
44
|
}
|
|
@@ -45,18 +47,21 @@ const telegramBotChannel = {
|
|
|
45
47
|
secretToken: options.webhookSecret,
|
|
46
48
|
userName: options.botUsername,
|
|
47
49
|
allowedUserIds: options.allowedUserIds,
|
|
48
|
-
mode: 'webhook'
|
|
50
|
+
mode: 'webhook'
|
|
49
51
|
});
|
|
50
52
|
},
|
|
51
|
-
|
|
52
|
-
return null;
|
|
53
|
+
identity () {
|
|
54
|
+
return Promise.resolve(null);
|
|
53
55
|
},
|
|
54
|
-
questions: telegramQuestions
|
|
56
|
+
questions: telegramQuestions
|
|
55
57
|
};
|
|
56
58
|
export const createTelegramBot = definePiece({
|
|
57
59
|
slug: 'telegramBot',
|
|
58
60
|
label: 'Telegram',
|
|
59
|
-
admin: {
|
|
61
|
+
admin: {
|
|
62
|
+
description: 'Build chatbots and respond to Telegram updates',
|
|
63
|
+
group: 'Communication'
|
|
64
|
+
},
|
|
60
65
|
auth: telegramBotAuth,
|
|
61
66
|
options: telegramBotOptions,
|
|
62
67
|
client: createTelegramBotClient,
|
|
@@ -81,8 +86,11 @@ export const createTelegramBot = definePiece({
|
|
|
81
86
|
getFile,
|
|
82
87
|
createInviteLink,
|
|
83
88
|
answerCallbackQuery,
|
|
84
|
-
customApiCall
|
|
89
|
+
customApiCall
|
|
85
90
|
],
|
|
86
|
-
triggers: [
|
|
91
|
+
triggers: [
|
|
92
|
+
newUpdate
|
|
93
|
+
]
|
|
87
94
|
});
|
|
95
|
+
|
|
88
96
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"names":["definePiece","answerCallbackQuery","createInviteLink","customApiCall","deleteMessage","editMessageText","forwardMessage","getChat","getChatMember","getFile","pinMessage","sendAudio","sendChatAction","sendDocument","sendLocation","sendMedia","sendMediaGroup","sendPoll","sendTextMessage","unpinMessage","createFrogBotTelegramAdapter","createTelegramBotClient","telegramBotAuth","telegramBotOptions","telegramQuestions","newUpdate","parseTelegramWebhook","verifyTelegramWebhook","telegramBotActions","telegramBotTriggers","telegramBotScopes","telegramBotWebhook","verify","parse","telegramBotChannel","adapter","auth","options","webhookSecret","Error","botToken","secretToken","userName","botUsername","allowedUserIds","mode","identity","Promise","resolve","questions","createTelegramBot","slug","label","admin","description","group","client","webhook","channel","actions","triggers"],"mappings":"AAAA,SAASA,WAAW,QAA8C,iBAAiB;AAGnF,SACEC,mBAAmB,EACnBC,gBAAgB,EAChBC,aAAa,EACbC,aAAa,EACbC,eAAe,EACfC,cAAc,EACdC,OAAO,EACPC,aAAa,EACbC,OAAO,EACPC,UAAU,EACVC,SAAS,EACTC,cAAc,EACdC,YAAY,EACZC,YAAY,EACZC,SAAS,EACTC,cAAc,EACdC,QAAQ,EACRC,eAAe,EACfC,YAAY,QACP,qBAAqB;AAC5B,SAASC,4BAA4B,QAAQ,eAAe;AAC5D,SAASC,uBAAuB,QAAgC,cAAc;AAC9E,SAASC,eAAe,EAAEC,kBAAkB,QAAQ,cAAc;AAClE,SAASC,iBAAiB,QAAQ,uBAAuB;AACzD,SAASC,SAAS,QAAQ,0BAA0B;AACpD,SAASC,oBAAoB,EAAEC,qBAAqB,QAAQ,eAAe;AAE3E,OAAO,MAAMC,qBAAqB;IAChC;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;CACD,CAAU;AACX,OAAO,MAAMC,sBAAsB;IAAC;CAAY,CAAU;AAC1D,OAAO,MAAMC,oBAAoB,EAAE,CAAU;AAE7C,MAAMC,qBAAqB;IACzBC,QAAQL;IACRM;QACE,OAAOP;IACT;AACF;AAEA,MAAMQ,qBAAqB;IACzBC,SAAQ,EAAEC,IAAI,EAAEC,OAAO,EAAE;QACvB,IAAI,CAACA,QAAQC,aAAa,EAAE;YAC1B,MAAM,IAAIC,MAAM;QAClB;QAEA,OAAOnB,6BAA6B;YAClCoB,UAAUJ,KAAKI,QAAQ;YACvBC,aAAaJ,QAAQC,aAAa;YAClCI,UAAUL,QAAQM,WAAW;YAC7BC,gBAAgBP,QAAQO,cAAc;YACtCC,MAAM;QACR;IACF;IACAC;QACE,OAAOC,QAAQC,OAAO,CAAC;IACzB;IACAC,WAAWzB;AACb;AAMA,OAAO,MAAM0B,oBAAoBlD,YAAY;IAC3CmD,MAAM;IACNC,OAAO;IACPC,OAAO;QAAEC,aAAa;QAAkDC,OAAO;IAAgB;IAC/FnB,MAAMd;IACNe,SAASd;IACTiC,QAAQnC;IACRoC,SAAS1B;IACT2B,SAASxB;IACTyB,SAAS;QACPzC;QACAH;QACAF;QACAF;QACAG;QACAE;QACAC;QACAL;QACAP;QACAD;QACAE;QACAI;QACAS;QACAZ;QACAC;QACAC;QACAP;QACAD;QACAE;KACD;IACDyD,UAAU;QAACnC;KAAU;AACvB,GAAG","file":"index.js"}
|
package/dist/questions/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"
|
|
1
|
+
{"version":3,"sources":["../../src/questions/index.ts"],"names":["denyTelegramQuestion","rejectTelegramQuestion","staleTelegramQuestion","parseTelegramQuestion","renderTelegramQuestion","settleTelegramQuestion","supportsTelegramQuestion","updateTelegramQuestion","telegramQuestions","supports","render","parse","settled","updated","rejected","denied","stale"],"mappings":"AAGA,SAASA,oBAAoB,EAAEC,sBAAsB,EAAEC,qBAAqB,QAAQ,cAAc;AAClG,SAASC,qBAAqB,QAAQ,aAAa;AACnD,SAASC,sBAAsB,QAAQ,cAAc;AACrD,SAASC,sBAAsB,QAAQ,eAAe;AACtD,SAASC,wBAAwB,QAAQ,gBAAgB;AACzD,SAASC,sBAAsB,QAAQ,eAAe;AAEtD,OAAO,MAAMC,oBAA8D;IACzEC,UAAUH;IACVI,QAAQN;IACRO,OAAOR;IACPS,SAASP;IACTQ,SAASN;IACTO,UAAUb;IACVc,QAAQf;IACRgB,OAAOd;AACT,EAAE","file":"index.js"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/questions/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,WAAW,OAAO,CAAC;AAYhC,KAAK,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"keyboard.d.ts","sourceRoot":"","sources":["../../src/questions/keyboard.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,KAAK,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEhF,eAAO,MAAM,gBAAgB,KAAK,CAAC;AACnC,eAAO,MAAM,WAAW,OAAO,CAAC;AAYhC,KAAK,YAAY,GAAG,aAAa,CAAC,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAMvD,MAAM,MAAM,cAAc,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,CAAC;AAErE,MAAM,MAAM,mBAAmB,GAAG;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,oBAAoB,EAAE;QAAE,WAAW,EAAE,IAAI,CAAA;KAAE,CAAC;IAC5C,YAAY,EAAE;QAAE,eAAe,EAAE,cAAc,EAAE,EAAE,CAAA;KAAE,CAAC;CACvD,CAAC;AAEF,MAAM,MAAM,sBAAsB,GAC9B;IAAE,IAAI,EAAE,QAAQ,GAAG,QAAQ,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACvD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACzC;IAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,GAC7C;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAC;AAExB,eAAO,MAAM,SAAS;gBACR,MAAM,SAAS,MAAM;gBACrB,MAAM,SAAS,MAAM;cACvB,MAAM,QAAQ,MAAM;cACpB,MAAM;cACN,MAAM;cACN,MAAM;;CAEjB,CAAC;AAOF,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,sBAAsB,GAAG,SAAS,CAkBzF;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,CAwB1D;AAED,wBAAgB,eAAe,CAAC,EAC9B,IAAI,EACJ,KAAK,GACN,EAAE;IACD,IAAI,EAAE,mBAAmB,CAAC;IAC1B,KAAK,EAAE,qBAAqB,CAAC;CAC9B,GAAG,mBAAmB,CAyEtB;AAED,wBAAgB,cAAc,CAAC,EAC7B,KAAK,EACL,OAAO,EACP,IAAI,GACL,EAAE;IACD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,sBAAsB,EAAE,CAAC;IACnC,IAAI,EAAE,mBAAmB,CAAC;CAC3B,GAAG,mBAAmB,CA+BtB;AAED,wBAAgB,cAAc,CAAC,EAC7B,IAAI,EACJ,QAAQ,GACT,EAAE;IACD,IAAI,EAAE,YAAY,CAAC;IACnB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,MAAM,EAAE,CAIX;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
|