@core-ease/telegram-kit 3.0.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/LICENSE +21 -0
- package/README.md +299 -0
- package/dist/animation/index.d.mts +4 -0
- package/dist/animation/index.d.ts +4 -0
- package/dist/animation/index.js +2413 -0
- package/dist/animation/index.mjs +5 -0
- package/dist/animation/lottie/index.d.mts +10 -0
- package/dist/animation/lottie/index.d.ts +10 -0
- package/dist/animation/lottie/index.js +2313 -0
- package/dist/animation/lottie/index.mjs +4 -0
- package/dist/animation/tgs/index.d.mts +18 -0
- package/dist/animation/tgs/index.d.ts +18 -0
- package/dist/animation/tgs/index.js +2402 -0
- package/dist/animation/tgs/index.mjs +4 -0
- package/dist/bot/index.d.mts +477 -0
- package/dist/bot/index.d.ts +477 -0
- package/dist/bot/index.js +870 -0
- package/dist/bot/index.mjs +847 -0
- package/dist/bot-D8BnLWIi.d.mts +2041 -0
- package/dist/bot-D8BnLWIi.d.ts +2041 -0
- package/dist/browser.global.js +23 -0
- package/dist/chunk-7AARTHNW.mjs +40 -0
- package/dist/chunk-7CVYPKAL.mjs +15 -0
- package/dist/chunk-B3PWALX5.mjs +4418 -0
- package/dist/chunk-BQEUEAVK.mjs +2262 -0
- package/dist/chunk-FPWYSKK2.mjs +3089 -0
- package/dist/chunk-JXK5HCDV.mjs +254 -0
- package/dist/chunk-OMH2JGOH.mjs +88 -0
- package/dist/chunk-PXO36YTU.mjs +38 -0
- package/dist/core/index.d.mts +151 -0
- package/dist/core/index.d.ts +151 -0
- package/dist/core/index.js +3837 -0
- package/dist/core/index.mjs +495 -0
- package/dist/dev/index.d.mts +77 -0
- package/dist/dev/index.d.ts +77 -0
- package/dist/dev/index.js +3214 -0
- package/dist/dev/index.mjs +151 -0
- package/dist/engine-BDm1_hzn.d.mts +382 -0
- package/dist/engine-BDm1_hzn.d.ts +382 -0
- package/dist/format/index.d.mts +61 -0
- package/dist/format/index.d.ts +61 -0
- package/dist/format/index.js +121 -0
- package/dist/format/index.mjs +112 -0
- package/dist/hooks/index.d.mts +1 -0
- package/dist/hooks/index.d.ts +1 -0
- package/dist/hooks/index.js +4234 -0
- package/dist/hooks/index.mjs +3 -0
- package/dist/hooks-C5Per70R.d.mts +1066 -0
- package/dist/hooks-C5Per70R.d.ts +1066 -0
- package/dist/index.d.mts +849 -0
- package/dist/index.d.ts +849 -0
- package/dist/index.js +5026 -0
- package/dist/index.mjs +478 -0
- package/dist/keyboards/index.d.mts +50 -0
- package/dist/keyboards/index.d.ts +50 -0
- package/dist/keyboards/index.js +127 -0
- package/dist/keyboards/index.mjs +124 -0
- package/dist/links/index.d.mts +53 -0
- package/dist/links/index.d.ts +53 -0
- package/dist/links/index.js +139 -0
- package/dist/links/index.mjs +133 -0
- package/dist/lottie/index.d.mts +3 -0
- package/dist/lottie/index.d.ts +3 -0
- package/dist/lottie/index.js +2313 -0
- package/dist/lottie/index.mjs +4 -0
- package/dist/qr/index.d.mts +75 -0
- package/dist/qr/index.d.ts +75 -0
- package/dist/qr/index.js +983 -0
- package/dist/qr/index.mjs +946 -0
- package/dist/sdk/index.d.mts +322 -0
- package/dist/sdk/index.d.ts +322 -0
- package/dist/sdk/index.js +3138 -0
- package/dist/sdk/index.mjs +2 -0
- package/dist/server/index.d.mts +28 -0
- package/dist/server/index.d.ts +28 -0
- package/dist/server/index.js +254 -0
- package/dist/server/index.mjs +246 -0
- package/dist/tgs/index.d.mts +3 -0
- package/dist/tgs/index.d.ts +3 -0
- package/dist/tgs/index.js +2402 -0
- package/dist/tgs/index.mjs +4 -0
- package/dist/webapp-B-3_74nK.d.mts +842 -0
- package/dist/webapp-B-3_74nK.d.ts +842 -0
- package/dist/webapp-BDi9q3-a.d.mts +42 -0
- package/dist/webapp-YvmwFYUQ.d.ts +42 -0
- package/package.json +165 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/utils/keyboards.ts
|
|
4
|
+
var InlineKeyboardBuilder = class _InlineKeyboardBuilder {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.rows = [[]];
|
|
7
|
+
}
|
|
8
|
+
currentRow() {
|
|
9
|
+
return this.rows[this.rows.length - 1];
|
|
10
|
+
}
|
|
11
|
+
add(button) {
|
|
12
|
+
this.currentRow().push(button);
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
text(text, callbackData) {
|
|
16
|
+
return this.add({ text, callback_data: callbackData });
|
|
17
|
+
}
|
|
18
|
+
url(text, url) {
|
|
19
|
+
return this.add({ text, url });
|
|
20
|
+
}
|
|
21
|
+
webApp(text, url) {
|
|
22
|
+
return this.add({ text, web_app: { url } });
|
|
23
|
+
}
|
|
24
|
+
login(text, loginUrl) {
|
|
25
|
+
return this.add({ text, login_url: typeof loginUrl === "string" ? { url: loginUrl } : loginUrl });
|
|
26
|
+
}
|
|
27
|
+
switchInline(text, query = "") {
|
|
28
|
+
return this.add({ text, switch_inline_query: query });
|
|
29
|
+
}
|
|
30
|
+
switchInlineCurrentChat(text, query = "") {
|
|
31
|
+
return this.add({ text, switch_inline_query_current_chat: query });
|
|
32
|
+
}
|
|
33
|
+
switchInlineChosenChat(text, query) {
|
|
34
|
+
return this.add({ text, switch_inline_query_chosen_chat: query != null ? query : {} });
|
|
35
|
+
}
|
|
36
|
+
copyText(text, copyText) {
|
|
37
|
+
return this.add({ text, copy_text: typeof copyText === "string" ? { text: copyText } : copyText });
|
|
38
|
+
}
|
|
39
|
+
pay(text = "Pay") {
|
|
40
|
+
return this.add({ text, pay: true });
|
|
41
|
+
}
|
|
42
|
+
callbackGame(text) {
|
|
43
|
+
return this.add({ text, callback_game: {} });
|
|
44
|
+
}
|
|
45
|
+
button(button) {
|
|
46
|
+
return this.add(button);
|
|
47
|
+
}
|
|
48
|
+
row() {
|
|
49
|
+
if (this.currentRow().length > 0) this.rows.push([]);
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
static columns(buttons, perRow) {
|
|
53
|
+
const builder = new _InlineKeyboardBuilder();
|
|
54
|
+
buttons.forEach((button, i) => {
|
|
55
|
+
if (i > 0 && i % perRow === 0) builder.row();
|
|
56
|
+
builder.button(button);
|
|
57
|
+
});
|
|
58
|
+
return builder;
|
|
59
|
+
}
|
|
60
|
+
build() {
|
|
61
|
+
const rows = this.rows.filter((row) => row.length > 0);
|
|
62
|
+
return { inline_keyboard: rows };
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
var ReplyKeyboardBuilder = class {
|
|
66
|
+
constructor() {
|
|
67
|
+
this.rows = [[]];
|
|
68
|
+
}
|
|
69
|
+
currentRow() {
|
|
70
|
+
return this.rows[this.rows.length - 1];
|
|
71
|
+
}
|
|
72
|
+
add(button) {
|
|
73
|
+
this.currentRow().push(button);
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
text(label) {
|
|
77
|
+
return this.add({ text: label });
|
|
78
|
+
}
|
|
79
|
+
requestContact(label) {
|
|
80
|
+
return this.add({ text: label, request_contact: true });
|
|
81
|
+
}
|
|
82
|
+
requestLocation(label) {
|
|
83
|
+
return this.add({ text: label, request_location: true });
|
|
84
|
+
}
|
|
85
|
+
requestPoll(label, type) {
|
|
86
|
+
return this.add({ text: label, request_poll: { type } });
|
|
87
|
+
}
|
|
88
|
+
webApp(label, url) {
|
|
89
|
+
return this.add({ text: label, web_app: { url } });
|
|
90
|
+
}
|
|
91
|
+
requestUsers(label, params) {
|
|
92
|
+
return this.add({ text: label, request_users: params });
|
|
93
|
+
}
|
|
94
|
+
requestChat(label, params) {
|
|
95
|
+
return this.add({ text: label, request_chat: params });
|
|
96
|
+
}
|
|
97
|
+
button(button) {
|
|
98
|
+
return this.add(button);
|
|
99
|
+
}
|
|
100
|
+
row() {
|
|
101
|
+
if (this.currentRow().length > 0) this.rows.push([]);
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
build(options = {}) {
|
|
105
|
+
var _a;
|
|
106
|
+
const rows = this.rows.filter((row) => row.length > 0);
|
|
107
|
+
return {
|
|
108
|
+
keyboard: rows,
|
|
109
|
+
resize_keyboard: (_a = options.resize) != null ? _a : true,
|
|
110
|
+
one_time_keyboard: options.oneTime,
|
|
111
|
+
selective: options.selective,
|
|
112
|
+
input_field_placeholder: options.placeholder,
|
|
113
|
+
is_persistent: options.persistent
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
function removeKeyboard(selective) {
|
|
118
|
+
return { remove_keyboard: true, selective };
|
|
119
|
+
}
|
|
120
|
+
function forceReply(options) {
|
|
121
|
+
return { force_reply: true, input_field_placeholder: options == null ? void 0 : options.placeholder, selective: options == null ? void 0 : options.selective };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
exports.InlineKeyboardBuilder = InlineKeyboardBuilder;
|
|
125
|
+
exports.ReplyKeyboardBuilder = ReplyKeyboardBuilder;
|
|
126
|
+
exports.forceReply = forceReply;
|
|
127
|
+
exports.removeKeyboard = removeKeyboard;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import '../chunk-7AARTHNW.mjs';
|
|
2
|
+
|
|
3
|
+
// src/utils/keyboards.ts
|
|
4
|
+
var InlineKeyboardBuilder = class _InlineKeyboardBuilder {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.rows = [[]];
|
|
7
|
+
}
|
|
8
|
+
currentRow() {
|
|
9
|
+
return this.rows[this.rows.length - 1];
|
|
10
|
+
}
|
|
11
|
+
add(button) {
|
|
12
|
+
this.currentRow().push(button);
|
|
13
|
+
return this;
|
|
14
|
+
}
|
|
15
|
+
text(text, callbackData) {
|
|
16
|
+
return this.add({ text, callback_data: callbackData });
|
|
17
|
+
}
|
|
18
|
+
url(text, url) {
|
|
19
|
+
return this.add({ text, url });
|
|
20
|
+
}
|
|
21
|
+
webApp(text, url) {
|
|
22
|
+
return this.add({ text, web_app: { url } });
|
|
23
|
+
}
|
|
24
|
+
login(text, loginUrl) {
|
|
25
|
+
return this.add({ text, login_url: typeof loginUrl === "string" ? { url: loginUrl } : loginUrl });
|
|
26
|
+
}
|
|
27
|
+
switchInline(text, query = "") {
|
|
28
|
+
return this.add({ text, switch_inline_query: query });
|
|
29
|
+
}
|
|
30
|
+
switchInlineCurrentChat(text, query = "") {
|
|
31
|
+
return this.add({ text, switch_inline_query_current_chat: query });
|
|
32
|
+
}
|
|
33
|
+
switchInlineChosenChat(text, query) {
|
|
34
|
+
return this.add({ text, switch_inline_query_chosen_chat: query != null ? query : {} });
|
|
35
|
+
}
|
|
36
|
+
copyText(text, copyText) {
|
|
37
|
+
return this.add({ text, copy_text: typeof copyText === "string" ? { text: copyText } : copyText });
|
|
38
|
+
}
|
|
39
|
+
pay(text = "Pay") {
|
|
40
|
+
return this.add({ text, pay: true });
|
|
41
|
+
}
|
|
42
|
+
callbackGame(text) {
|
|
43
|
+
return this.add({ text, callback_game: {} });
|
|
44
|
+
}
|
|
45
|
+
button(button) {
|
|
46
|
+
return this.add(button);
|
|
47
|
+
}
|
|
48
|
+
row() {
|
|
49
|
+
if (this.currentRow().length > 0) this.rows.push([]);
|
|
50
|
+
return this;
|
|
51
|
+
}
|
|
52
|
+
static columns(buttons, perRow) {
|
|
53
|
+
const builder = new _InlineKeyboardBuilder();
|
|
54
|
+
buttons.forEach((button, i) => {
|
|
55
|
+
if (i > 0 && i % perRow === 0) builder.row();
|
|
56
|
+
builder.button(button);
|
|
57
|
+
});
|
|
58
|
+
return builder;
|
|
59
|
+
}
|
|
60
|
+
build() {
|
|
61
|
+
const rows = this.rows.filter((row) => row.length > 0);
|
|
62
|
+
return { inline_keyboard: rows };
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
var ReplyKeyboardBuilder = class {
|
|
66
|
+
constructor() {
|
|
67
|
+
this.rows = [[]];
|
|
68
|
+
}
|
|
69
|
+
currentRow() {
|
|
70
|
+
return this.rows[this.rows.length - 1];
|
|
71
|
+
}
|
|
72
|
+
add(button) {
|
|
73
|
+
this.currentRow().push(button);
|
|
74
|
+
return this;
|
|
75
|
+
}
|
|
76
|
+
text(label) {
|
|
77
|
+
return this.add({ text: label });
|
|
78
|
+
}
|
|
79
|
+
requestContact(label) {
|
|
80
|
+
return this.add({ text: label, request_contact: true });
|
|
81
|
+
}
|
|
82
|
+
requestLocation(label) {
|
|
83
|
+
return this.add({ text: label, request_location: true });
|
|
84
|
+
}
|
|
85
|
+
requestPoll(label, type) {
|
|
86
|
+
return this.add({ text: label, request_poll: { type } });
|
|
87
|
+
}
|
|
88
|
+
webApp(label, url) {
|
|
89
|
+
return this.add({ text: label, web_app: { url } });
|
|
90
|
+
}
|
|
91
|
+
requestUsers(label, params) {
|
|
92
|
+
return this.add({ text: label, request_users: params });
|
|
93
|
+
}
|
|
94
|
+
requestChat(label, params) {
|
|
95
|
+
return this.add({ text: label, request_chat: params });
|
|
96
|
+
}
|
|
97
|
+
button(button) {
|
|
98
|
+
return this.add(button);
|
|
99
|
+
}
|
|
100
|
+
row() {
|
|
101
|
+
if (this.currentRow().length > 0) this.rows.push([]);
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
build(options = {}) {
|
|
105
|
+
var _a;
|
|
106
|
+
const rows = this.rows.filter((row) => row.length > 0);
|
|
107
|
+
return {
|
|
108
|
+
keyboard: rows,
|
|
109
|
+
resize_keyboard: (_a = options.resize) != null ? _a : true,
|
|
110
|
+
one_time_keyboard: options.oneTime,
|
|
111
|
+
selective: options.selective,
|
|
112
|
+
input_field_placeholder: options.placeholder,
|
|
113
|
+
is_persistent: options.persistent
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
function removeKeyboard(selective) {
|
|
118
|
+
return { remove_keyboard: true, selective };
|
|
119
|
+
}
|
|
120
|
+
function forceReply(options) {
|
|
121
|
+
return { force_reply: true, input_field_placeholder: options == null ? void 0 : options.placeholder, selective: options == null ? void 0 : options.selective };
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export { InlineKeyboardBuilder, ReplyKeyboardBuilder, forceReply, removeKeyboard };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
declare function isValidStartParam(param: string): boolean;
|
|
2
|
+
declare function encodeStartParam(value: string): string;
|
|
3
|
+
declare function decodeStartParam(param: string): string;
|
|
4
|
+
interface StartParamInput {
|
|
5
|
+
startParam?: string;
|
|
6
|
+
data?: string;
|
|
7
|
+
}
|
|
8
|
+
interface BuildStartLinkOptions extends StartParamInput {
|
|
9
|
+
botUsername: string;
|
|
10
|
+
}
|
|
11
|
+
declare function buildStartLink(options: BuildStartLinkOptions): string;
|
|
12
|
+
interface BuildStartAppLinkOptions extends StartParamInput {
|
|
13
|
+
botUsername: string;
|
|
14
|
+
appName?: string;
|
|
15
|
+
mode?: 'compact' | 'fullscreen';
|
|
16
|
+
}
|
|
17
|
+
declare function buildStartAppLink(options: BuildStartAppLinkOptions): string;
|
|
18
|
+
interface BuildShareLinkOptions {
|
|
19
|
+
url: string;
|
|
20
|
+
text?: string;
|
|
21
|
+
}
|
|
22
|
+
declare function buildShareLink(options: BuildShareLinkOptions): string;
|
|
23
|
+
type ParsedTelegramLink = {
|
|
24
|
+
type: 'profile';
|
|
25
|
+
username: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'bot-start';
|
|
28
|
+
username: string;
|
|
29
|
+
startParam: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'mini-app';
|
|
32
|
+
username: string;
|
|
33
|
+
appName?: string;
|
|
34
|
+
startParam?: string;
|
|
35
|
+
mode?: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'join-chat';
|
|
38
|
+
inviteHash: string;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'private-channel-post';
|
|
41
|
+
internalChatId: string;
|
|
42
|
+
messageId: number;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'share';
|
|
45
|
+
url?: string;
|
|
46
|
+
text?: string;
|
|
47
|
+
} | {
|
|
48
|
+
type: 'unknown';
|
|
49
|
+
url: string;
|
|
50
|
+
};
|
|
51
|
+
declare function parseTelegramLink(link: string): ParsedTelegramLink;
|
|
52
|
+
|
|
53
|
+
export { type BuildShareLinkOptions, type BuildStartAppLinkOptions, type BuildStartLinkOptions, type ParsedTelegramLink, buildShareLink, buildStartAppLink, buildStartLink, decodeStartParam, encodeStartParam, isValidStartParam, parseTelegramLink };
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
declare function isValidStartParam(param: string): boolean;
|
|
2
|
+
declare function encodeStartParam(value: string): string;
|
|
3
|
+
declare function decodeStartParam(param: string): string;
|
|
4
|
+
interface StartParamInput {
|
|
5
|
+
startParam?: string;
|
|
6
|
+
data?: string;
|
|
7
|
+
}
|
|
8
|
+
interface BuildStartLinkOptions extends StartParamInput {
|
|
9
|
+
botUsername: string;
|
|
10
|
+
}
|
|
11
|
+
declare function buildStartLink(options: BuildStartLinkOptions): string;
|
|
12
|
+
interface BuildStartAppLinkOptions extends StartParamInput {
|
|
13
|
+
botUsername: string;
|
|
14
|
+
appName?: string;
|
|
15
|
+
mode?: 'compact' | 'fullscreen';
|
|
16
|
+
}
|
|
17
|
+
declare function buildStartAppLink(options: BuildStartAppLinkOptions): string;
|
|
18
|
+
interface BuildShareLinkOptions {
|
|
19
|
+
url: string;
|
|
20
|
+
text?: string;
|
|
21
|
+
}
|
|
22
|
+
declare function buildShareLink(options: BuildShareLinkOptions): string;
|
|
23
|
+
type ParsedTelegramLink = {
|
|
24
|
+
type: 'profile';
|
|
25
|
+
username: string;
|
|
26
|
+
} | {
|
|
27
|
+
type: 'bot-start';
|
|
28
|
+
username: string;
|
|
29
|
+
startParam: string;
|
|
30
|
+
} | {
|
|
31
|
+
type: 'mini-app';
|
|
32
|
+
username: string;
|
|
33
|
+
appName?: string;
|
|
34
|
+
startParam?: string;
|
|
35
|
+
mode?: string;
|
|
36
|
+
} | {
|
|
37
|
+
type: 'join-chat';
|
|
38
|
+
inviteHash: string;
|
|
39
|
+
} | {
|
|
40
|
+
type: 'private-channel-post';
|
|
41
|
+
internalChatId: string;
|
|
42
|
+
messageId: number;
|
|
43
|
+
} | {
|
|
44
|
+
type: 'share';
|
|
45
|
+
url?: string;
|
|
46
|
+
text?: string;
|
|
47
|
+
} | {
|
|
48
|
+
type: 'unknown';
|
|
49
|
+
url: string;
|
|
50
|
+
};
|
|
51
|
+
declare function parseTelegramLink(link: string): ParsedTelegramLink;
|
|
52
|
+
|
|
53
|
+
export { type BuildShareLinkOptions, type BuildStartAppLinkOptions, type BuildStartLinkOptions, type ParsedTelegramLink, buildShareLink, buildStartAppLink, buildStartLink, decodeStartParam, encodeStartParam, isValidStartParam, parseTelegramLink };
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// src/utils/links.ts
|
|
4
|
+
function bytesToBase64Url(bytes) {
|
|
5
|
+
let binary = "";
|
|
6
|
+
for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
|
|
7
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
8
|
+
}
|
|
9
|
+
function base64UrlToBytes(base64url) {
|
|
10
|
+
const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
|
|
11
|
+
const padded = base64 + "=".repeat((4 - base64.length % 4) % 4);
|
|
12
|
+
const binary = atob(padded);
|
|
13
|
+
const bytes = new Uint8Array(binary.length);
|
|
14
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
15
|
+
return bytes;
|
|
16
|
+
}
|
|
17
|
+
var START_PARAM_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
18
|
+
function isValidStartParam(param) {
|
|
19
|
+
return START_PARAM_PATTERN.test(param);
|
|
20
|
+
}
|
|
21
|
+
function encodeStartParam(value) {
|
|
22
|
+
const encoded = bytesToBase64Url(new TextEncoder().encode(value));
|
|
23
|
+
if (encoded.length > 64) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
`[@core-ease/telegram-kit] encodeStartParam: the encoded value is ${encoded.length} characters, exceeding Telegram's 64-character limit for start parameters. Pass a shorter payload (e.g. a numeric/short ID you look up server-side, instead of embedding full data).`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return encoded;
|
|
29
|
+
}
|
|
30
|
+
function decodeStartParam(param) {
|
|
31
|
+
return new TextDecoder().decode(base64UrlToBytes(param));
|
|
32
|
+
}
|
|
33
|
+
function resolveStartParam(options) {
|
|
34
|
+
if (options.startParam !== void 0 && options.data !== void 0) {
|
|
35
|
+
throw new Error("[@core-ease/telegram-kit] Provide either `startParam` or `data`, not both.");
|
|
36
|
+
}
|
|
37
|
+
if (options.data !== void 0) return encodeStartParam(options.data);
|
|
38
|
+
if (options.startParam !== void 0) {
|
|
39
|
+
if (!isValidStartParam(options.startParam)) {
|
|
40
|
+
throw new Error(
|
|
41
|
+
`[@core-ease/telegram-kit] "${options.startParam}" is not a valid Telegram start parameter (allowed characters: A-Z a-z 0-9 _ -, max 64 chars). Use \`data\` instead to auto-encode arbitrary text.`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return options.startParam;
|
|
45
|
+
}
|
|
46
|
+
return void 0;
|
|
47
|
+
}
|
|
48
|
+
function buildStartLink(options) {
|
|
49
|
+
const param = resolveStartParam(options);
|
|
50
|
+
const base = `https://t.me/${options.botUsername}`;
|
|
51
|
+
return param ? `${base}?start=${param}` : base;
|
|
52
|
+
}
|
|
53
|
+
function buildStartAppLink(options) {
|
|
54
|
+
const param = resolveStartParam(options);
|
|
55
|
+
const base = options.appName ? `https://t.me/${options.botUsername}/${options.appName}` : `https://t.me/${options.botUsername}`;
|
|
56
|
+
const query = new URLSearchParams();
|
|
57
|
+
if (param) query.set("startapp", param);
|
|
58
|
+
if (options.mode) query.set("mode", options.mode);
|
|
59
|
+
const queryString = query.toString();
|
|
60
|
+
return queryString ? `${base}?${queryString}` : base;
|
|
61
|
+
}
|
|
62
|
+
function buildShareLink(options) {
|
|
63
|
+
const query = new URLSearchParams({ url: options.url });
|
|
64
|
+
if (options.text) query.set("text", options.text);
|
|
65
|
+
return `https://t.me/share/url?${query.toString()}`;
|
|
66
|
+
}
|
|
67
|
+
var TME_HOSTNAMES = /* @__PURE__ */ new Set(["t.me", "telegram.me", "telegram.dog"]);
|
|
68
|
+
function parseTelegramLink(link) {
|
|
69
|
+
var _a, _b, _c, _d;
|
|
70
|
+
let url;
|
|
71
|
+
try {
|
|
72
|
+
url = new URL(link);
|
|
73
|
+
} catch (e) {
|
|
74
|
+
return { type: "unknown", url: link };
|
|
75
|
+
}
|
|
76
|
+
if (url.protocol === "tg:") {
|
|
77
|
+
const action = url.hostname || url.pathname.replace(/^\/+/, "");
|
|
78
|
+
if (action === "resolve") {
|
|
79
|
+
const domain = url.searchParams.get("domain");
|
|
80
|
+
const start2 = url.searchParams.get("start");
|
|
81
|
+
const startapp2 = url.searchParams.get("startapp");
|
|
82
|
+
const mode2 = (_a = url.searchParams.get("mode")) != null ? _a : void 0;
|
|
83
|
+
if (domain && start2) return { type: "bot-start", username: domain, startParam: start2 };
|
|
84
|
+
if (domain && startapp2 !== null) {
|
|
85
|
+
return { type: "mini-app", username: domain, startParam: startapp2 || void 0, mode: mode2 };
|
|
86
|
+
}
|
|
87
|
+
if (domain) return { type: "profile", username: domain };
|
|
88
|
+
}
|
|
89
|
+
if (action === "join") {
|
|
90
|
+
const invite = url.searchParams.get("invite");
|
|
91
|
+
if (invite) return { type: "join-chat", inviteHash: invite };
|
|
92
|
+
}
|
|
93
|
+
return { type: "unknown", url: link };
|
|
94
|
+
}
|
|
95
|
+
if (!TME_HOSTNAMES.has(url.hostname)) {
|
|
96
|
+
return { type: "unknown", url: link };
|
|
97
|
+
}
|
|
98
|
+
const segments = url.pathname.split("/").filter(Boolean);
|
|
99
|
+
if (segments.length === 0) return { type: "unknown", url: link };
|
|
100
|
+
if (segments[0].startsWith("+")) {
|
|
101
|
+
return { type: "join-chat", inviteHash: segments[0].slice(1) };
|
|
102
|
+
}
|
|
103
|
+
if (segments[0] === "joinchat" && segments[1]) {
|
|
104
|
+
return { type: "join-chat", inviteHash: segments[1] };
|
|
105
|
+
}
|
|
106
|
+
if (segments[0] === "share" && segments[1] === "url") {
|
|
107
|
+
return {
|
|
108
|
+
type: "share",
|
|
109
|
+
url: (_b = url.searchParams.get("url")) != null ? _b : void 0,
|
|
110
|
+
text: (_c = url.searchParams.get("text")) != null ? _c : void 0
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (segments[0] === "c" && segments[1] && segments[2]) {
|
|
114
|
+
const messageId = Number(segments[2]);
|
|
115
|
+
return { type: "private-channel-post", internalChatId: segments[1], messageId };
|
|
116
|
+
}
|
|
117
|
+
const username = segments[0];
|
|
118
|
+
const startapp = url.searchParams.get("startapp");
|
|
119
|
+
const start = url.searchParams.get("start");
|
|
120
|
+
const mode = (_d = url.searchParams.get("mode")) != null ? _d : void 0;
|
|
121
|
+
if (segments.length >= 2) {
|
|
122
|
+
return { type: "mini-app", username, appName: segments[1], startParam: startapp != null ? startapp : void 0, mode };
|
|
123
|
+
}
|
|
124
|
+
if (startapp !== null) {
|
|
125
|
+
return { type: "mini-app", username, startParam: startapp || void 0, mode };
|
|
126
|
+
}
|
|
127
|
+
if (start !== null) {
|
|
128
|
+
return { type: "bot-start", username, startParam: start };
|
|
129
|
+
}
|
|
130
|
+
return { type: "profile", username };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
exports.buildShareLink = buildShareLink;
|
|
134
|
+
exports.buildStartAppLink = buildStartAppLink;
|
|
135
|
+
exports.buildStartLink = buildStartLink;
|
|
136
|
+
exports.decodeStartParam = decodeStartParam;
|
|
137
|
+
exports.encodeStartParam = encodeStartParam;
|
|
138
|
+
exports.isValidStartParam = isValidStartParam;
|
|
139
|
+
exports.parseTelegramLink = parseTelegramLink;
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import '../chunk-7AARTHNW.mjs';
|
|
2
|
+
|
|
3
|
+
// src/utils/links.ts
|
|
4
|
+
function bytesToBase64Url(bytes) {
|
|
5
|
+
let binary = "";
|
|
6
|
+
for (let i = 0; i < bytes.length; i++) binary += String.fromCharCode(bytes[i]);
|
|
7
|
+
return btoa(binary).replace(/\+/g, "-").replace(/\//g, "_").replace(/=+$/, "");
|
|
8
|
+
}
|
|
9
|
+
function base64UrlToBytes(base64url) {
|
|
10
|
+
const base64 = base64url.replace(/-/g, "+").replace(/_/g, "/");
|
|
11
|
+
const padded = base64 + "=".repeat((4 - base64.length % 4) % 4);
|
|
12
|
+
const binary = atob(padded);
|
|
13
|
+
const bytes = new Uint8Array(binary.length);
|
|
14
|
+
for (let i = 0; i < binary.length; i++) bytes[i] = binary.charCodeAt(i);
|
|
15
|
+
return bytes;
|
|
16
|
+
}
|
|
17
|
+
var START_PARAM_PATTERN = /^[A-Za-z0-9_-]{1,64}$/;
|
|
18
|
+
function isValidStartParam(param) {
|
|
19
|
+
return START_PARAM_PATTERN.test(param);
|
|
20
|
+
}
|
|
21
|
+
function encodeStartParam(value) {
|
|
22
|
+
const encoded = bytesToBase64Url(new TextEncoder().encode(value));
|
|
23
|
+
if (encoded.length > 64) {
|
|
24
|
+
throw new Error(
|
|
25
|
+
`[@core-ease/telegram-kit] encodeStartParam: the encoded value is ${encoded.length} characters, exceeding Telegram's 64-character limit for start parameters. Pass a shorter payload (e.g. a numeric/short ID you look up server-side, instead of embedding full data).`
|
|
26
|
+
);
|
|
27
|
+
}
|
|
28
|
+
return encoded;
|
|
29
|
+
}
|
|
30
|
+
function decodeStartParam(param) {
|
|
31
|
+
return new TextDecoder().decode(base64UrlToBytes(param));
|
|
32
|
+
}
|
|
33
|
+
function resolveStartParam(options) {
|
|
34
|
+
if (options.startParam !== void 0 && options.data !== void 0) {
|
|
35
|
+
throw new Error("[@core-ease/telegram-kit] Provide either `startParam` or `data`, not both.");
|
|
36
|
+
}
|
|
37
|
+
if (options.data !== void 0) return encodeStartParam(options.data);
|
|
38
|
+
if (options.startParam !== void 0) {
|
|
39
|
+
if (!isValidStartParam(options.startParam)) {
|
|
40
|
+
throw new Error(
|
|
41
|
+
`[@core-ease/telegram-kit] "${options.startParam}" is not a valid Telegram start parameter (allowed characters: A-Z a-z 0-9 _ -, max 64 chars). Use \`data\` instead to auto-encode arbitrary text.`
|
|
42
|
+
);
|
|
43
|
+
}
|
|
44
|
+
return options.startParam;
|
|
45
|
+
}
|
|
46
|
+
return void 0;
|
|
47
|
+
}
|
|
48
|
+
function buildStartLink(options) {
|
|
49
|
+
const param = resolveStartParam(options);
|
|
50
|
+
const base = `https://t.me/${options.botUsername}`;
|
|
51
|
+
return param ? `${base}?start=${param}` : base;
|
|
52
|
+
}
|
|
53
|
+
function buildStartAppLink(options) {
|
|
54
|
+
const param = resolveStartParam(options);
|
|
55
|
+
const base = options.appName ? `https://t.me/${options.botUsername}/${options.appName}` : `https://t.me/${options.botUsername}`;
|
|
56
|
+
const query = new URLSearchParams();
|
|
57
|
+
if (param) query.set("startapp", param);
|
|
58
|
+
if (options.mode) query.set("mode", options.mode);
|
|
59
|
+
const queryString = query.toString();
|
|
60
|
+
return queryString ? `${base}?${queryString}` : base;
|
|
61
|
+
}
|
|
62
|
+
function buildShareLink(options) {
|
|
63
|
+
const query = new URLSearchParams({ url: options.url });
|
|
64
|
+
if (options.text) query.set("text", options.text);
|
|
65
|
+
return `https://t.me/share/url?${query.toString()}`;
|
|
66
|
+
}
|
|
67
|
+
var TME_HOSTNAMES = /* @__PURE__ */ new Set(["t.me", "telegram.me", "telegram.dog"]);
|
|
68
|
+
function parseTelegramLink(link) {
|
|
69
|
+
var _a, _b, _c, _d;
|
|
70
|
+
let url;
|
|
71
|
+
try {
|
|
72
|
+
url = new URL(link);
|
|
73
|
+
} catch (e) {
|
|
74
|
+
return { type: "unknown", url: link };
|
|
75
|
+
}
|
|
76
|
+
if (url.protocol === "tg:") {
|
|
77
|
+
const action = url.hostname || url.pathname.replace(/^\/+/, "");
|
|
78
|
+
if (action === "resolve") {
|
|
79
|
+
const domain = url.searchParams.get("domain");
|
|
80
|
+
const start2 = url.searchParams.get("start");
|
|
81
|
+
const startapp2 = url.searchParams.get("startapp");
|
|
82
|
+
const mode2 = (_a = url.searchParams.get("mode")) != null ? _a : void 0;
|
|
83
|
+
if (domain && start2) return { type: "bot-start", username: domain, startParam: start2 };
|
|
84
|
+
if (domain && startapp2 !== null) {
|
|
85
|
+
return { type: "mini-app", username: domain, startParam: startapp2 || void 0, mode: mode2 };
|
|
86
|
+
}
|
|
87
|
+
if (domain) return { type: "profile", username: domain };
|
|
88
|
+
}
|
|
89
|
+
if (action === "join") {
|
|
90
|
+
const invite = url.searchParams.get("invite");
|
|
91
|
+
if (invite) return { type: "join-chat", inviteHash: invite };
|
|
92
|
+
}
|
|
93
|
+
return { type: "unknown", url: link };
|
|
94
|
+
}
|
|
95
|
+
if (!TME_HOSTNAMES.has(url.hostname)) {
|
|
96
|
+
return { type: "unknown", url: link };
|
|
97
|
+
}
|
|
98
|
+
const segments = url.pathname.split("/").filter(Boolean);
|
|
99
|
+
if (segments.length === 0) return { type: "unknown", url: link };
|
|
100
|
+
if (segments[0].startsWith("+")) {
|
|
101
|
+
return { type: "join-chat", inviteHash: segments[0].slice(1) };
|
|
102
|
+
}
|
|
103
|
+
if (segments[0] === "joinchat" && segments[1]) {
|
|
104
|
+
return { type: "join-chat", inviteHash: segments[1] };
|
|
105
|
+
}
|
|
106
|
+
if (segments[0] === "share" && segments[1] === "url") {
|
|
107
|
+
return {
|
|
108
|
+
type: "share",
|
|
109
|
+
url: (_b = url.searchParams.get("url")) != null ? _b : void 0,
|
|
110
|
+
text: (_c = url.searchParams.get("text")) != null ? _c : void 0
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (segments[0] === "c" && segments[1] && segments[2]) {
|
|
114
|
+
const messageId = Number(segments[2]);
|
|
115
|
+
return { type: "private-channel-post", internalChatId: segments[1], messageId };
|
|
116
|
+
}
|
|
117
|
+
const username = segments[0];
|
|
118
|
+
const startapp = url.searchParams.get("startapp");
|
|
119
|
+
const start = url.searchParams.get("start");
|
|
120
|
+
const mode = (_d = url.searchParams.get("mode")) != null ? _d : void 0;
|
|
121
|
+
if (segments.length >= 2) {
|
|
122
|
+
return { type: "mini-app", username, appName: segments[1], startParam: startapp != null ? startapp : void 0, mode };
|
|
123
|
+
}
|
|
124
|
+
if (startapp !== null) {
|
|
125
|
+
return { type: "mini-app", username, startParam: startapp || void 0, mode };
|
|
126
|
+
}
|
|
127
|
+
if (start !== null) {
|
|
128
|
+
return { type: "bot-start", username, startParam: start };
|
|
129
|
+
}
|
|
130
|
+
return { type: "profile", username };
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
export { buildShareLink, buildStartAppLink, buildStartLink, decodeStartParam, encodeStartParam, isValidStartParam, parseTelegramLink };
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import 'react';
|
|
2
|
+
export { L as LottieAnimation, a as LottieAnimationController, T as LottieSource, P as PlayMode, b as PlayerState, l as loadLottieSource, r as renderDocumentFrame } from '../engine-BDm1_hzn.mjs';
|
|
3
|
+
export { LottiePlayer, LottiePlayerHandle, LottiePlayerProps } from '../animation/lottie/index.mjs';
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import 'react';
|
|
2
|
+
export { L as LottieAnimation, a as LottieAnimationController, T as LottieSource, P as PlayMode, b as PlayerState, l as loadLottieSource, r as renderDocumentFrame } from '../engine-BDm1_hzn.js';
|
|
3
|
+
export { LottiePlayer, LottiePlayerHandle, LottiePlayerProps } from '../animation/lottie/index.js';
|