create-bunspace 0.2.5 → 0.3.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/dist/templates/monorepo/apps/example/package.json +1 -1
- package/dist/templates/monorepo/core/packages/utils/rolldown.config.ts +30 -0
- package/dist/templates/monorepo/tsconfig.json +3 -1
- package/dist/templates/telegram-bot/CLAUDE.deploy.md +2 -3
- package/dist/templates/telegram-bot/CLAUDE.dev.md +304 -5
- package/dist/templates/telegram-bot/CLAUDE.md +166 -89
- package/dist/templates/telegram-bot/README.md +252 -129
- package/dist/templates/telegram-bot/bun.lock +132 -3
- package/dist/templates/telegram-bot/core/.env.example +6 -0
- package/dist/templates/telegram-bot/core/package.json +11 -0
- package/dist/templates/telegram-bot/core/rolldown.config.ts +11 -0
- package/dist/templates/telegram-bot/core/src/config/env.ts +130 -1
- package/dist/templates/telegram-bot/core/src/config/logging.ts +4 -4
- package/dist/templates/telegram-bot/core/src/handlers/config-export.ts +123 -0
- package/dist/templates/telegram-bot/core/src/handlers/control.ts +46 -11
- package/dist/templates/telegram-bot/core/src/handlers/demo-full.ts +58 -0
- package/dist/templates/telegram-bot/core/src/handlers/demo-keyboard.ts +49 -0
- package/dist/templates/telegram-bot/core/src/handlers/demo-media.ts +163 -0
- package/dist/templates/telegram-bot/core/src/handlers/demo-text.ts +27 -0
- package/dist/templates/telegram-bot/core/src/handlers/health.ts +40 -37
- package/dist/templates/telegram-bot/core/src/handlers/info.ts +189 -0
- package/dist/templates/telegram-bot/core/src/handlers/listener.ts +168 -0
- package/dist/templates/telegram-bot/core/src/handlers/logs.ts +16 -7
- package/dist/templates/telegram-bot/core/src/index.ts +49 -1
- package/dist/templates/telegram-bot/core/src/utils/formatters.ts +14 -33
- package/dist/templates/telegram-bot/core/src/utils/instance-manager.ts +6 -2
- package/dist/templates/telegram-bot/core/src/utils/message-builder.ts +180 -0
- package/dist/templates/telegram-bot/core/tsconfig.json +2 -0
- package/dist/templates/telegram-bot/docs/automatizacion_integral_de_bots_de_telegram_con_type_script.md +326 -0
- package/dist/templates/telegram-bot/docs/cli-commands.md +514 -5
- package/dist/templates/telegram-bot/docs/environment.md +191 -3
- package/dist/templates/telegram-bot/docs/getting-started.md +202 -15
- package/dist/templates/telegram-bot/package.json +7 -3
- package/dist/templates/telegram-bot/packages/utils/package.json +12 -1
- package/dist/templates/telegram-bot/packages/utils/rolldown.config.ts +11 -0
- package/dist/templates/telegram-bot/packages/utils/src/logger.ts +1 -0
- package/dist/templates/telegram-bot/packages/utils/tsconfig.json +10 -0
- package/dist/templates/telegram-bot/tools/commands/doctor.ts +62 -0
- package/dist/templates/telegram-bot/tools/commands/setup.ts +984 -170
- package/dist/templates/telegram-bot/tsconfig.json +7 -2
- package/package.json +1 -1
- package/templates/monorepo/apps/example/package.json +1 -1
- package/templates/monorepo/core/packages/utils/rolldown.config.ts +30 -0
- package/templates/monorepo/tsconfig.json +3 -1
- package/templates/telegram-bot/CLAUDE.deploy.md +2 -3
- package/templates/telegram-bot/CLAUDE.dev.md +304 -5
- package/templates/telegram-bot/CLAUDE.md +166 -89
- package/templates/telegram-bot/README.md +252 -129
- package/templates/telegram-bot/bun.lock +132 -3
- package/templates/telegram-bot/core/.env.example +6 -0
- package/templates/telegram-bot/core/package.json +11 -0
- package/templates/telegram-bot/core/rolldown.config.ts +11 -0
- package/templates/telegram-bot/core/src/config/env.ts +130 -1
- package/templates/telegram-bot/core/src/config/logging.ts +4 -4
- package/templates/telegram-bot/core/src/handlers/config-export.ts +123 -0
- package/templates/telegram-bot/core/src/handlers/control.ts +46 -11
- package/templates/telegram-bot/core/src/handlers/demo-full.ts +58 -0
- package/templates/telegram-bot/core/src/handlers/demo-keyboard.ts +49 -0
- package/templates/telegram-bot/core/src/handlers/demo-media.ts +163 -0
- package/templates/telegram-bot/core/src/handlers/demo-text.ts +27 -0
- package/templates/telegram-bot/core/src/handlers/health.ts +40 -37
- package/templates/telegram-bot/core/src/handlers/info.ts +189 -0
- package/templates/telegram-bot/core/src/handlers/listener.ts +168 -0
- package/templates/telegram-bot/core/src/handlers/logs.ts +16 -7
- package/templates/telegram-bot/core/src/index.ts +49 -1
- package/templates/telegram-bot/core/src/utils/formatters.ts +14 -33
- package/templates/telegram-bot/core/src/utils/instance-manager.ts +6 -2
- package/templates/telegram-bot/core/tsconfig.json +2 -0
- package/templates/telegram-bot/docs/automatizacion_integral_de_bots_de_telegram_con_type_script.md +326 -0
- package/templates/telegram-bot/docs/cli-commands.md +514 -5
- package/templates/telegram-bot/docs/environment.md +191 -3
- package/templates/telegram-bot/docs/getting-started.md +202 -15
- package/templates/telegram-bot/package.json +7 -3
- package/templates/telegram-bot/packages/utils/package.json +12 -1
- package/templates/telegram-bot/packages/utils/rolldown.config.ts +11 -0
- package/templates/telegram-bot/packages/utils/src/logger.ts +1 -0
- package/templates/telegram-bot/packages/utils/tsconfig.json +10 -0
- package/templates/telegram-bot/tools/commands/doctor.ts +62 -0
- package/templates/telegram-bot/tools/commands/setup.ts +984 -170
- package/templates/telegram-bot/tsconfig.json +7 -2
|
@@ -1,14 +1,20 @@
|
|
|
1
1
|
{
|
|
2
2
|
"lockfileVersion": 1,
|
|
3
|
+
"configVersion": 0,
|
|
3
4
|
"workspaces": {
|
|
4
5
|
"": {
|
|
5
6
|
"name": "mks-telegram-bot",
|
|
6
7
|
"dependencies": {
|
|
7
8
|
"@inquirer/prompts": "^8.1.0",
|
|
9
|
+
"@mks2508/telegram-bot-utils": "workspace:*",
|
|
10
|
+
"@mks2508/telegram-message-builder": "0.3.1",
|
|
8
11
|
"chalk": "^5.6.2",
|
|
9
12
|
"commander": "^14.0.2",
|
|
10
13
|
"dotenv": "^17.2.3",
|
|
11
14
|
"glob": "^13.0.0",
|
|
15
|
+
"ora": "^9.0.0",
|
|
16
|
+
"telegraf": "^4.16.3",
|
|
17
|
+
"telegram": "^2.26.22",
|
|
12
18
|
},
|
|
13
19
|
"devDependencies": {
|
|
14
20
|
"@types/bun": "latest",
|
|
@@ -23,6 +29,7 @@
|
|
|
23
29
|
"version": "0.1.0",
|
|
24
30
|
"dependencies": {
|
|
25
31
|
"@mks2508/telegram-bot-utils": "workspace:*",
|
|
32
|
+
"@mks2508/telegram-message-builder": "0.3.1",
|
|
26
33
|
"telegraf": "^4.16.3",
|
|
27
34
|
"zod": "^3.24.0",
|
|
28
35
|
},
|
|
@@ -37,6 +44,8 @@
|
|
|
37
44
|
},
|
|
38
45
|
},
|
|
39
46
|
"packages": {
|
|
47
|
+
"@cryptography/aes": ["@cryptography/aes@0.1.1", "", {}, "sha512-PcYz4FDGblO6tM2kSC+VzhhK62vml6k6/YAkiWtyPvrgJVfnDRoHGDtKn5UiaRRUrvUTTocBpvc2rRgTCqxjsg=="],
|
|
48
|
+
|
|
40
49
|
"@inquirer/ansi": ["@inquirer/ansi@2.0.2", "", {}, "sha512-SYLX05PwJVnW+WVegZt1T4Ip1qba1ik+pNJPDiqvk6zS5Y/i8PhRzLpGEtVd7sW0G8cMtkD8t4AZYhQwm8vnww=="],
|
|
41
50
|
|
|
42
51
|
"@inquirer/checkbox": ["@inquirer/checkbox@5.0.3", "", { "dependencies": { "@inquirer/ansi": "^2.0.2", "@inquirer/core": "^11.1.0", "@inquirer/figures": "^2.0.2", "@inquirer/type": "^4.0.2" }, "peerDependencies": { "@types/node": ">=18" }, "optionalPeers": ["@types/node"] }, "sha512-xtQP2eXMFlOcAhZ4ReKP2KZvDIBb1AnCfZ81wWXG3DXLVH0f0g4obE0XDPH+ukAEMRcZT0kdX2AS1jrWGXbpxw=="],
|
|
@@ -81,6 +90,8 @@
|
|
|
81
90
|
|
|
82
91
|
"@mks2508/telegram-bot-utils": ["@mks2508/telegram-bot-utils@workspace:packages/utils"],
|
|
83
92
|
|
|
93
|
+
"@mks2508/telegram-message-builder": ["@mks2508/telegram-message-builder@0.3.1", "", {}, "sha512-i/BdbxVq13l8XzCUq8jMkFfYjrTXiCdErpzo9tEazLLqqEucAm2aY9HE5i8U+15mEWeSV4D6I9gfU8a5dSn1Cw=="],
|
|
94
|
+
|
|
84
95
|
"@oxlint/darwin-arm64": ["@oxlint/darwin-arm64@1.38.0", "", { "os": "darwin", "cpu": "arm64" }, "sha512-9rN3047QTyA4i73FKikDUBdczRcLtOsIwZ5TsEx5Q7jr5nBjolhYQOFQf9QdhBLdInxw1iX4+lgdMCf1g74zjg=="],
|
|
85
96
|
|
|
86
97
|
"@oxlint/darwin-x64": ["@oxlint/darwin-x64@1.38.0", "", { "os": "darwin", "cpu": "x64" }, "sha512-Y1UHW4KOlg5NvyrSn/bVBQP8/LRuid7Pnu+BWGbAVVsFcK0b565YgMSO3Eu9nU3w8ke91dr7NFpUmS+bVkdkbw=="],
|
|
@@ -101,7 +112,7 @@
|
|
|
101
112
|
|
|
102
113
|
"@types/bun": ["@types/bun@1.3.5", "", { "dependencies": { "bun-types": "1.3.5" } }, "sha512-RnygCqNrd3srIPEWBd5LFeUYG7plCoH2Yw9WaZGyNmdTEei+gWaHqydbaIRkIkcbXwhBT94q78QljxN0Sk838w=="],
|
|
103
114
|
|
|
104
|
-
"@types/node": ["@types/node@
|
|
115
|
+
"@types/node": ["@types/node@20.19.27", "", { "dependencies": { "undici-types": "~6.21.0" } }, "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug=="],
|
|
105
116
|
|
|
106
117
|
"@typescript/native-preview": ["@typescript/native-preview@7.0.0-dev.20260106.1", "", { "optionalDependencies": { "@typescript/native-preview-darwin-arm64": "7.0.0-dev.20260106.1", "@typescript/native-preview-darwin-x64": "7.0.0-dev.20260106.1", "@typescript/native-preview-linux-arm": "7.0.0-dev.20260106.1", "@typescript/native-preview-linux-arm64": "7.0.0-dev.20260106.1", "@typescript/native-preview-linux-x64": "7.0.0-dev.20260106.1", "@typescript/native-preview-win32-arm64": "7.0.0-dev.20260106.1", "@typescript/native-preview-win32-x64": "7.0.0-dev.20260106.1" }, "bin": { "tsgo": "bin/tsgo.js" } }, "sha512-EeH81rQsgLjewxuVOBN0MnQWAyf5YNeHRP3+Et6wJyr4d7HuA7zFwfNaEdfX1k366kgpKOR5K6dakorBhKZGng=="],
|
|
107
118
|
|
|
@@ -125,38 +136,98 @@
|
|
|
125
136
|
|
|
126
137
|
"ansi-styles": ["ansi-styles@6.2.3", "", {}, "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg=="],
|
|
127
138
|
|
|
139
|
+
"async-mutex": ["async-mutex@0.3.2", "", { "dependencies": { "tslib": "^2.3.1" } }, "sha512-HuTK7E7MT7jZEh1P9GtRW9+aTWiDWWi9InbZ5hjxrnRa39KS4BW04+xLBhYNS2aXhHUIKZSw3gj4Pn1pj+qGAA=="],
|
|
140
|
+
|
|
141
|
+
"base64-js": ["base64-js@1.5.1", "", {}, "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA=="],
|
|
142
|
+
|
|
143
|
+
"big-integer": ["big-integer@1.6.52", "", {}, "sha512-QxD8cf2eVqJOOz63z6JIN9BzvVs/dlySa5HGSBH5xtR8dPteIRQnBxxKqkNTiT6jbDTF6jAfrd4oMcND9RGbQg=="],
|
|
144
|
+
|
|
145
|
+
"buffer": ["buffer@6.0.3", "", { "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA=="],
|
|
146
|
+
|
|
128
147
|
"buffer-alloc": ["buffer-alloc@1.2.0", "", { "dependencies": { "buffer-alloc-unsafe": "^1.1.0", "buffer-fill": "^1.0.0" } }, "sha512-CFsHQgjtW1UChdXgbyJGtnm+O/uLQeZdtbDo8mfUgYXCHSM1wgrVxXm6bSyrUuErEb+4sYVGCzASBRot7zyrow=="],
|
|
129
148
|
|
|
130
149
|
"buffer-alloc-unsafe": ["buffer-alloc-unsafe@1.1.0", "", {}, "sha512-TEM2iMIEQdJ2yjPJoSIsldnleVaAk1oW3DBVUykyOLsEsFmEc9kn+SFFPz+gl54KQNxlDnAwCXosOS9Okx2xAg=="],
|
|
131
150
|
|
|
132
151
|
"buffer-fill": ["buffer-fill@1.0.0", "", {}, "sha512-T7zexNBwiiaCOGDg9xNX9PBmjrubblRkENuptryuI64URkXDFum9il/JGL8Lm8wYfAXpredVXXZz7eMHilimiQ=="],
|
|
133
152
|
|
|
153
|
+
"bufferutil": ["bufferutil@4.1.0", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-ZMANVnAixE6AWWnPzlW2KpUrxhm9woycYvPOo67jWHyFowASTEd9s+QN1EIMsSDtwhIxN4sWE1jotpuDUIgyIw=="],
|
|
154
|
+
|
|
134
155
|
"bun-types": ["bun-types@1.3.5", "", { "dependencies": { "@types/node": "*" } }, "sha512-inmAYe2PFLs0SUbFOWSVD24sg1jFlMPxOjOSSCYqUgn4Hsc3rDc7dFvfVYjFPNHtov6kgUeulV4SxbuIV/stPw=="],
|
|
135
156
|
|
|
136
157
|
"chalk": ["chalk@5.6.2", "", {}, "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA=="],
|
|
137
158
|
|
|
138
159
|
"chardet": ["chardet@2.1.1", "", {}, "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ=="],
|
|
139
160
|
|
|
161
|
+
"cli-cursor": ["cli-cursor@5.0.0", "", { "dependencies": { "restore-cursor": "^5.0.0" } }, "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw=="],
|
|
162
|
+
|
|
163
|
+
"cli-spinners": ["cli-spinners@3.3.0", "", {}, "sha512-/+40ljC3ONVnYIttjMWrlL51nItDAbBrq2upN8BPyvGU/2n5Oxw3tbNwORCaNuNqLJnxGqOfjUuhsv7l5Q4IsQ=="],
|
|
164
|
+
|
|
140
165
|
"cli-width": ["cli-width@4.1.0", "", {}, "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ=="],
|
|
141
166
|
|
|
142
167
|
"commander": ["commander@14.0.2", "", {}, "sha512-TywoWNNRbhoD0BXs1P3ZEScW8W5iKrnbithIl0YH+uCmBd0QpPOA8yc82DS3BIE5Ma6FnBVUsJ7wVUDz4dvOWQ=="],
|
|
143
168
|
|
|
169
|
+
"d": ["d@1.0.2", "", { "dependencies": { "es5-ext": "^0.10.64", "type": "^2.7.2" } }, "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw=="],
|
|
170
|
+
|
|
144
171
|
"debug": ["debug@4.4.3", "", { "dependencies": { "ms": "^2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="],
|
|
145
172
|
|
|
173
|
+
"dom-serializer": ["dom-serializer@1.4.1", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.2.0", "entities": "^2.0.0" } }, "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag=="],
|
|
174
|
+
|
|
175
|
+
"domelementtype": ["domelementtype@2.3.0", "", {}, "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw=="],
|
|
176
|
+
|
|
177
|
+
"domhandler": ["domhandler@4.3.1", "", { "dependencies": { "domelementtype": "^2.2.0" } }, "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ=="],
|
|
178
|
+
|
|
179
|
+
"domutils": ["domutils@2.8.0", "", { "dependencies": { "dom-serializer": "^1.0.1", "domelementtype": "^2.2.0", "domhandler": "^4.2.0" } }, "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A=="],
|
|
180
|
+
|
|
146
181
|
"dotenv": ["dotenv@17.2.3", "", {}, "sha512-JVUnt+DUIzu87TABbhPmNfVdBDt18BLOWjMUFJMSi/Qqg7NTYtabbvSNJGOJ7afbRuv9D/lngizHtP7QyLQ+9w=="],
|
|
147
182
|
|
|
148
183
|
"emoji-regex": ["emoji-regex@10.6.0", "", {}, "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A=="],
|
|
149
184
|
|
|
185
|
+
"entities": ["entities@2.2.0", "", {}, "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="],
|
|
186
|
+
|
|
187
|
+
"es5-ext": ["es5-ext@0.10.64", "", { "dependencies": { "es6-iterator": "^2.0.3", "es6-symbol": "^3.1.3", "esniff": "^2.0.1", "next-tick": "^1.1.0" } }, "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg=="],
|
|
188
|
+
|
|
189
|
+
"es6-iterator": ["es6-iterator@2.0.3", "", { "dependencies": { "d": "1", "es5-ext": "^0.10.35", "es6-symbol": "^3.1.1" } }, "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g=="],
|
|
190
|
+
|
|
191
|
+
"es6-symbol": ["es6-symbol@3.1.4", "", { "dependencies": { "d": "^1.0.2", "ext": "^1.7.0" } }, "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg=="],
|
|
192
|
+
|
|
193
|
+
"esniff": ["esniff@2.0.1", "", { "dependencies": { "d": "^1.0.1", "es5-ext": "^0.10.62", "event-emitter": "^0.3.5", "type": "^2.7.2" } }, "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg=="],
|
|
194
|
+
|
|
195
|
+
"event-emitter": ["event-emitter@0.3.5", "", { "dependencies": { "d": "1", "es5-ext": "~0.10.14" } }, "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA=="],
|
|
196
|
+
|
|
150
197
|
"event-target-shim": ["event-target-shim@5.0.1", "", {}, "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ=="],
|
|
151
198
|
|
|
199
|
+
"ext": ["ext@1.7.0", "", { "dependencies": { "type": "^2.7.2" } }, "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw=="],
|
|
200
|
+
|
|
152
201
|
"get-east-asian-width": ["get-east-asian-width@1.4.0", "", {}, "sha512-QZjmEOC+IT1uk6Rx0sX22V6uHWVwbdbxf1faPqJ1QhLdGgsRGCZoyaQBm/piRdJy/D2um6hM1UP7ZEeQ4EkP+Q=="],
|
|
153
202
|
|
|
154
203
|
"glob": ["glob@13.0.0", "", { "dependencies": { "minimatch": "^10.1.1", "minipass": "^7.1.2", "path-scurry": "^2.0.0" } }, "sha512-tvZgpqk6fz4BaNZ66ZsRaZnbHvP/jG3uKJvAZOwEVUL4RTA5nJeeLYfyN9/VA8NX/V3IBG+hkeuGpKjvELkVhA=="],
|
|
155
204
|
|
|
205
|
+
"graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="],
|
|
206
|
+
|
|
207
|
+
"htmlparser2": ["htmlparser2@6.1.0", "", { "dependencies": { "domelementtype": "^2.0.1", "domhandler": "^4.0.0", "domutils": "^2.5.2", "entities": "^2.0.0" } }, "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A=="],
|
|
208
|
+
|
|
156
209
|
"iconv-lite": ["iconv-lite@0.7.1", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw=="],
|
|
157
210
|
|
|
211
|
+
"ieee754": ["ieee754@1.2.1", "", {}, "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA=="],
|
|
212
|
+
|
|
213
|
+
"imurmurhash": ["imurmurhash@0.1.4", "", {}, "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA=="],
|
|
214
|
+
|
|
215
|
+
"ip-address": ["ip-address@10.1.0", "", {}, "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q=="],
|
|
216
|
+
|
|
217
|
+
"is-interactive": ["is-interactive@2.0.0", "", {}, "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ=="],
|
|
218
|
+
|
|
219
|
+
"is-typedarray": ["is-typedarray@1.0.0", "", {}, "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="],
|
|
220
|
+
|
|
221
|
+
"is-unicode-supported": ["is-unicode-supported@2.1.0", "", {}, "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ=="],
|
|
222
|
+
|
|
223
|
+
"log-symbols": ["log-symbols@7.0.1", "", { "dependencies": { "is-unicode-supported": "^2.0.0", "yoctocolors": "^2.1.1" } }, "sha512-ja1E3yCr9i/0hmBVaM0bfwDjnGy8I/s6PP4DFp+yP+a+mrHO4Rm7DtmnqROTUkHIkqffC84YY7AeqX6oFk0WFg=="],
|
|
224
|
+
|
|
158
225
|
"lru-cache": ["lru-cache@11.2.4", "", {}, "sha512-B5Y16Jr9LB9dHVkh6ZevG+vAbOsNOYCX+sXvFWFu7B3Iz5mijW3zdbMyhsh8ANd2mSWBYdJgnqi+mL7/LrOPYg=="],
|
|
159
226
|
|
|
227
|
+
"mime": ["mime@3.0.0", "", { "bin": { "mime": "cli.js" } }, "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A=="],
|
|
228
|
+
|
|
229
|
+
"mimic-function": ["mimic-function@5.0.1", "", {}, "sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA=="],
|
|
230
|
+
|
|
160
231
|
"minimatch": ["minimatch@10.1.1", "", { "dependencies": { "@isaacs/brace-expansion": "^5.0.0" } }, "sha512-enIvLvRAFZYXJzkCYG5RKmPfrFArdLv+R+lbQ53BmIMLIry74bjKzX6iHAm8WYamJkhSSEabrWN5D97XnKObjQ=="],
|
|
161
232
|
|
|
162
233
|
"minipass": ["minipass@7.1.2", "", {}, "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw=="],
|
|
@@ -167,16 +238,34 @@
|
|
|
167
238
|
|
|
168
239
|
"mute-stream": ["mute-stream@3.0.0", "", {}, "sha512-dkEJPVvun4FryqBmZ5KhDo0K9iDXAwn08tMLDinNdRBNPcYEDiWYysLcc6k3mjTMlbP9KyylvRpd4wFtwrT9rw=="],
|
|
169
240
|
|
|
241
|
+
"next-tick": ["next-tick@1.1.0", "", {}, "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ=="],
|
|
242
|
+
|
|
170
243
|
"node-fetch": ["node-fetch@2.7.0", "", { "dependencies": { "whatwg-url": "^5.0.0" }, "peerDependencies": { "encoding": "^0.1.0" }, "optionalPeers": ["encoding"] }, "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A=="],
|
|
171
244
|
|
|
245
|
+
"node-gyp-build": ["node-gyp-build@4.8.4", "", { "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", "node-gyp-build-test": "build-test.js" } }, "sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ=="],
|
|
246
|
+
|
|
247
|
+
"node-localstorage": ["node-localstorage@2.2.1", "", { "dependencies": { "write-file-atomic": "^1.1.4" } }, "sha512-vv8fJuOUCCvSPjDjBLlMqYMHob4aGjkmrkaE42/mZr0VT+ZAU10jRF8oTnX9+pgU9/vYJ8P7YT3Vd6ajkmzSCw=="],
|
|
248
|
+
|
|
249
|
+
"onetime": ["onetime@7.0.0", "", { "dependencies": { "mimic-function": "^5.0.0" } }, "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ=="],
|
|
250
|
+
|
|
251
|
+
"ora": ["ora@9.0.0", "", { "dependencies": { "chalk": "^5.6.2", "cli-cursor": "^5.0.0", "cli-spinners": "^3.2.0", "is-interactive": "^2.0.0", "is-unicode-supported": "^2.1.0", "log-symbols": "^7.0.1", "stdin-discarder": "^0.2.2", "string-width": "^8.1.0", "strip-ansi": "^7.1.2" } }, "sha512-m0pg2zscbYgWbqRR6ABga5c3sZdEon7bSgjnlXC64kxtxLOyjRcbbUkLj7HFyy/FTD+P2xdBWu8snGhYI0jc4A=="],
|
|
252
|
+
|
|
172
253
|
"oxlint": ["oxlint@1.38.0", "", { "optionalDependencies": { "@oxlint/darwin-arm64": "1.38.0", "@oxlint/darwin-x64": "1.38.0", "@oxlint/linux-arm64-gnu": "1.38.0", "@oxlint/linux-arm64-musl": "1.38.0", "@oxlint/linux-x64-gnu": "1.38.0", "@oxlint/linux-x64-musl": "1.38.0", "@oxlint/win32-arm64": "1.38.0", "@oxlint/win32-x64": "1.38.0" }, "peerDependencies": { "oxlint-tsgolint": ">=0.10.0" }, "optionalPeers": ["oxlint-tsgolint"], "bin": { "oxlint": "bin/oxlint" } }, "sha512-XT7tBinQS+hVLxtfJOnokJ9qVBiQvZqng40tDgR6qEJMRMnpVq/JwYfbYyGntSq8MO+Y+N9M1NG4bAMFUtCJiw=="],
|
|
173
254
|
|
|
174
255
|
"p-timeout": ["p-timeout@4.1.0", "", {}, "sha512-+/wmHtzJuWii1sXn3HCuH/FTwGhrp4tmJTxSKJbfS+vkipci6osxXM5mY0jUiRzWKMTgUT8l7HFbeSwZAynqHw=="],
|
|
175
256
|
|
|
257
|
+
"pako": ["pako@2.1.0", "", {}, "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug=="],
|
|
258
|
+
|
|
259
|
+
"path-browserify": ["path-browserify@1.0.1", "", {}, "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g=="],
|
|
260
|
+
|
|
176
261
|
"path-scurry": ["path-scurry@2.0.1", "", { "dependencies": { "lru-cache": "^11.0.0", "minipass": "^7.1.2" } }, "sha512-oWyT4gICAu+kaA7QWk/jvCHWarMKNs6pXOGWKDTr7cw4IGcUbW+PeTfbaQiLGheFRpjo6O9J0PmyMfQPjH71oA=="],
|
|
177
262
|
|
|
178
263
|
"prettier": ["prettier@3.7.4", "", { "bin": { "prettier": "bin/prettier.cjs" } }, "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA=="],
|
|
179
264
|
|
|
265
|
+
"real-cancellable-promise": ["real-cancellable-promise@1.2.3", "", {}, "sha512-hBI5Gy/55VEeeMtImMgEirD7eq5UmqJf1J8dFZtbJZA/3rB0pYFZ7PayMGueb6v4UtUtpKpP+05L0VwyE1hI9Q=="],
|
|
266
|
+
|
|
267
|
+
"restore-cursor": ["restore-cursor@5.1.0", "", { "dependencies": { "onetime": "^7.0.0", "signal-exit": "^4.1.0" } }, "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA=="],
|
|
268
|
+
|
|
180
269
|
"safe-compare": ["safe-compare@1.1.4", "", { "dependencies": { "buffer-alloc": "^1.2.0" } }, "sha512-b9wZ986HHCo/HbKrRpBJb2kqXMK9CEWIE1egeEvZsYn69ay3kdfl9nG3RyOcR+jInTDf7a86WQ1d4VJX7goSSQ=="],
|
|
181
270
|
|
|
182
271
|
"safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="],
|
|
@@ -185,24 +274,64 @@
|
|
|
185
274
|
|
|
186
275
|
"signal-exit": ["signal-exit@4.1.0", "", {}, "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw=="],
|
|
187
276
|
|
|
188
|
-
"
|
|
277
|
+
"slide": ["slide@1.1.6", "", {}, "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw=="],
|
|
278
|
+
|
|
279
|
+
"smart-buffer": ["smart-buffer@4.2.0", "", {}, "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="],
|
|
280
|
+
|
|
281
|
+
"socks": ["socks@2.8.7", "", { "dependencies": { "ip-address": "^10.0.1", "smart-buffer": "^4.2.0" } }, "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A=="],
|
|
282
|
+
|
|
283
|
+
"stdin-discarder": ["stdin-discarder@0.2.2", "", {}, "sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ=="],
|
|
284
|
+
|
|
285
|
+
"store2": ["store2@2.14.4", "", {}, "sha512-srTItn1GOvyvOycgxjAnPA63FZNwy0PTyUBFMHRM+hVFltAeoh0LmNBz9SZqUS9mMqGk8rfyWyXn3GH5ReJ8Zw=="],
|
|
286
|
+
|
|
287
|
+
"string-width": ["string-width@8.1.0", "", { "dependencies": { "get-east-asian-width": "^1.3.0", "strip-ansi": "^7.1.0" } }, "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg=="],
|
|
189
288
|
|
|
190
289
|
"strip-ansi": ["strip-ansi@7.1.2", "", { "dependencies": { "ansi-regex": "^6.0.1" } }, "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA=="],
|
|
191
290
|
|
|
192
291
|
"telegraf": ["telegraf@4.16.3", "", { "dependencies": { "@telegraf/types": "^7.1.0", "abort-controller": "^3.0.0", "debug": "^4.3.4", "mri": "^1.2.0", "node-fetch": "^2.7.0", "p-timeout": "^4.1.0", "safe-compare": "^1.1.4", "sandwich-stream": "^2.0.2" }, "bin": { "telegraf": "lib/cli.mjs" } }, "sha512-yjEu2NwkHlXu0OARWoNhJlIjX09dRktiMQFsM678BAH/PEPVwctzL67+tvXqLCRQQvm3SDtki2saGO9hLlz68w=="],
|
|
193
292
|
|
|
293
|
+
"telegram": ["telegram@2.26.22", "", { "dependencies": { "@cryptography/aes": "^0.1.1", "async-mutex": "^0.3.0", "big-integer": "^1.6.48", "buffer": "^6.0.3", "htmlparser2": "^6.1.0", "mime": "^3.0.0", "node-localstorage": "^2.2.1", "pako": "^2.0.3", "path-browserify": "^1.0.1", "real-cancellable-promise": "^1.1.1", "socks": "^2.6.2", "store2": "^2.13.0", "ts-custom-error": "^3.2.0", "websocket": "^1.0.34" }, "optionalDependencies": { "bufferutil": "^4.0.3", "utf-8-validate": "^5.0.5" } }, "sha512-EIj7Yrjiu0Yosa3FZ/7EyPg9s6UiTi/zDQrFmR/2Mg7pIUU+XjAit1n1u9OU9h2oRnRM5M+67/fxzQluZpaJJg=="],
|
|
294
|
+
|
|
194
295
|
"tr46": ["tr46@0.0.3", "", {}, "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw=="],
|
|
195
296
|
|
|
297
|
+
"ts-custom-error": ["ts-custom-error@3.3.1", "", {}, "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A=="],
|
|
298
|
+
|
|
299
|
+
"tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="],
|
|
300
|
+
|
|
301
|
+
"type": ["type@2.7.3", "", {}, "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ=="],
|
|
302
|
+
|
|
303
|
+
"typedarray-to-buffer": ["typedarray-to-buffer@3.1.5", "", { "dependencies": { "is-typedarray": "^1.0.0" } }, "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q=="],
|
|
304
|
+
|
|
196
305
|
"typescript": ["typescript@5.9.3", "", { "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" } }, "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw=="],
|
|
197
306
|
|
|
198
|
-
"undici-types": ["undici-types@
|
|
307
|
+
"undici-types": ["undici-types@6.21.0", "", {}, "sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ=="],
|
|
308
|
+
|
|
309
|
+
"utf-8-validate": ["utf-8-validate@5.0.10", "", { "dependencies": { "node-gyp-build": "^4.3.0" } }, "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ=="],
|
|
199
310
|
|
|
200
311
|
"webidl-conversions": ["webidl-conversions@3.0.1", "", {}, "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ=="],
|
|
201
312
|
|
|
313
|
+
"websocket": ["websocket@1.0.35", "", { "dependencies": { "bufferutil": "^4.0.1", "debug": "^2.2.0", "es5-ext": "^0.10.63", "typedarray-to-buffer": "^3.1.5", "utf-8-validate": "^5.0.2", "yaeti": "^0.0.6" } }, "sha512-/REy6amwPZl44DDzvRCkaI1q1bIiQB0mEFQLUrhz3z2EK91cp3n72rAjUlrTP0zV22HJIUOVHQGPxhFRjxjt+Q=="],
|
|
314
|
+
|
|
202
315
|
"whatwg-url": ["whatwg-url@5.0.0", "", { "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" } }, "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw=="],
|
|
203
316
|
|
|
204
317
|
"wrap-ansi": ["wrap-ansi@9.0.2", "", { "dependencies": { "ansi-styles": "^6.2.1", "string-width": "^7.0.0", "strip-ansi": "^7.1.0" } }, "sha512-42AtmgqjV+X1VpdOfyTGOYRi0/zsoLqtXQckTmqTeybT+BDIbM/Guxo7x3pE2vtpr1ok6xRqM9OpBe+Jyoqyww=="],
|
|
205
318
|
|
|
319
|
+
"write-file-atomic": ["write-file-atomic@1.3.4", "", { "dependencies": { "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", "slide": "^1.1.5" } }, "sha512-SdrHoC/yVBPpV0Xq/mUZQIpW2sWXAShb/V4pomcJXh92RuaO+f3UTWItiR3Px+pLnV2PvC2/bfn5cwr5X6Vfxw=="],
|
|
320
|
+
|
|
321
|
+
"yaeti": ["yaeti@0.0.6", "", {}, "sha512-MvQa//+KcZCUkBTIC9blM+CU9J2GzuTytsOUwf2lidtvkx/6gnEp1QvJv34t9vdjhFmha/mUiNDbN0D0mJWdug=="],
|
|
322
|
+
|
|
323
|
+
"yoctocolors": ["yoctocolors@2.1.2", "", {}, "sha512-CzhO+pFNo8ajLM2d2IW/R93ipy99LWjtwblvC1RsoSUMZgyLbYFr221TnSNT7GjGdYui6P459mw9JH/g/zW2ug=="],
|
|
324
|
+
|
|
206
325
|
"zod": ["zod@3.25.76", "", {}, "sha512-gzUt/qt81nXsFGKIFcC3YnfEAx5NkunCfnDlvuBSSFS02bcXu4Lmea0AFIUwbLWxWPx3d9p8S5QoaujKcNQxcQ=="],
|
|
326
|
+
|
|
327
|
+
"bun-types/@types/node": ["@types/node@25.0.3", "", { "dependencies": { "undici-types": "~7.16.0" } }, "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA=="],
|
|
328
|
+
|
|
329
|
+
"websocket/debug": ["debug@2.6.9", "", { "dependencies": { "ms": "2.0.0" } }, "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA=="],
|
|
330
|
+
|
|
331
|
+
"wrap-ansi/string-width": ["string-width@7.2.0", "", { "dependencies": { "emoji-regex": "^10.3.0", "get-east-asian-width": "^1.0.0", "strip-ansi": "^7.1.0" } }, "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ=="],
|
|
332
|
+
|
|
333
|
+
"bun-types/@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="],
|
|
334
|
+
|
|
335
|
+
"websocket/debug/ms": ["ms@2.0.0", "", {}, "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A=="],
|
|
207
336
|
}
|
|
208
337
|
}
|
|
@@ -7,6 +7,12 @@ TG_BOT_TOKEN=123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11
|
|
|
7
7
|
# Options: polling, webhook
|
|
8
8
|
TG_MODE=polling
|
|
9
9
|
|
|
10
|
+
# === MTProto API Credentials (for bootstrap command) ===
|
|
11
|
+
# Get these from https://my.telegram.org
|
|
12
|
+
# Required for: bun run bootstrap
|
|
13
|
+
# TG_API_ID=12345678
|
|
14
|
+
# TG_API_HASH=abc123def456789...
|
|
15
|
+
|
|
10
16
|
# === Required if TG_MODE=webhook ===
|
|
11
17
|
# TG_WEBHOOK_URL=https://your-domain.com/webhook
|
|
12
18
|
# TG_WEBHOOK_SECRET=random_secret_token_min_16_chars
|
|
@@ -3,13 +3,24 @@
|
|
|
3
3
|
"version": "0.1.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"scripts": {
|
|
6
|
+
"build": "rolldown --config rolldown.config.ts && tsgo --emitDeclarationOnly",
|
|
6
7
|
"dev": "bun run --watch src/index.ts",
|
|
7
8
|
"start": "bun run src/index.ts",
|
|
8
9
|
"typecheck": "tsgo --noEmit"
|
|
9
10
|
},
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
10
17
|
"dependencies": {
|
|
11
18
|
"@mks2508/telegram-bot-utils": "workspace:*",
|
|
19
|
+
"@mks2508/telegram-message-builder": "0.3.1",
|
|
12
20
|
"telegraf": "^4.16.3",
|
|
13
21
|
"zod": "^3.24.0"
|
|
22
|
+
},
|
|
23
|
+
"devDependencies": {
|
|
24
|
+
"rolldown": "^1.0.0-beta.58"
|
|
14
25
|
}
|
|
15
26
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { defineConfig } from 'rolldown';
|
|
2
|
+
|
|
3
|
+
export default defineConfig({
|
|
4
|
+
input: './src/index.ts',
|
|
5
|
+
output: {
|
|
6
|
+
file: './dist/index.js',
|
|
7
|
+
format: 'esm',
|
|
8
|
+
sourcemap: true,
|
|
9
|
+
},
|
|
10
|
+
external: ['grammy', 'telegraf', '@mks2508/telegram-bot-utils', '@mks2508/telegram-message-builder', 'zod'],
|
|
11
|
+
});
|
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod'
|
|
2
2
|
import { BotTimeouts, BotLimits } from '../types/constants.js'
|
|
3
|
+
import { readFileSync, existsSync, readlinkSync } from 'fs'
|
|
4
|
+
import { resolve, dirname } from 'path'
|
|
5
|
+
import { fileURLToPath } from 'url'
|
|
3
6
|
|
|
4
7
|
export enum Environment {
|
|
5
8
|
LOCAL = 'local',
|
|
@@ -85,13 +88,139 @@ const envSchema = z.object({
|
|
|
85
88
|
message: 'TG_WEBHOOK_URL is required when TG_MODE=webhook and TG_NGROK_ENABLED=false',
|
|
86
89
|
})
|
|
87
90
|
|
|
91
|
+
/**
|
|
92
|
+
* Get the directory of the current module
|
|
93
|
+
*/
|
|
94
|
+
function getModuleDir(): string {
|
|
95
|
+
const __filename = fileURLToPath(import.meta.url)
|
|
96
|
+
return dirname(__filename)
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
/**
|
|
100
|
+
* Load .env file from the new .envs/ structure
|
|
101
|
+
* @param botUsername Bot username (without @)
|
|
102
|
+
* @param environment Environment (local, staging, production)
|
|
103
|
+
* @returns Parsed environment variables or null if file doesn't exist
|
|
104
|
+
*/
|
|
105
|
+
function loadEnvFile(botUsername: string, environment: string): Record<string, string> | null {
|
|
106
|
+
const coreDir = resolve(getModuleDir(), '../..')
|
|
107
|
+
const envPath = resolve(coreDir, '.envs', botUsername, `${environment}.env`)
|
|
108
|
+
|
|
109
|
+
if (!existsSync(envPath)) {
|
|
110
|
+
return null
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const content = readFileSync(envPath, 'utf-8')
|
|
114
|
+
const envVars: Record<string, string> = {}
|
|
115
|
+
|
|
116
|
+
for (const line of content.split('\n')) {
|
|
117
|
+
const trimmed = line.trim()
|
|
118
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
119
|
+
continue
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
const [key, ...valueParts] = trimmed.split('=')
|
|
123
|
+
if (key && valueParts.length > 0) {
|
|
124
|
+
envVars[key] = valueParts.join('=')
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
return envVars
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Get the active bot username from TG_BOT env var or .active symlink
|
|
133
|
+
* @returns Bot username or null if not found
|
|
134
|
+
*/
|
|
135
|
+
function getActiveBot(): string | null {
|
|
136
|
+
// Check TG_BOT env var first
|
|
137
|
+
if (process.env.TG_BOT) {
|
|
138
|
+
return process.env.TG_BOT
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Check .active symlink
|
|
142
|
+
const coreDir = resolve(getModuleDir(), '../..')
|
|
143
|
+
const activeSymlink = resolve(coreDir, '.envs', '.active')
|
|
144
|
+
|
|
145
|
+
if (!existsSync(activeSymlink)) {
|
|
146
|
+
return null
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
try {
|
|
150
|
+
const target = readlinkSync(activeSymlink)
|
|
151
|
+
return target
|
|
152
|
+
} catch {
|
|
153
|
+
return null
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
88
157
|
/**
|
|
89
158
|
* Loads and validates environment variables.
|
|
159
|
+
* Supports both the new .envs/ structure and legacy .env.{environment} files.
|
|
90
160
|
* @returns EnvConfig on success, throws on validation failure
|
|
91
161
|
* @throws Error if environment variables are invalid or required variables are missing
|
|
92
162
|
*/
|
|
93
163
|
export function loadEnvConfig(): EnvConfig {
|
|
94
|
-
|
|
164
|
+
// Try to load from new .envs/ structure first
|
|
165
|
+
const activeBot = getActiveBot()
|
|
166
|
+
const environment = process.env.TG_ENV || 'local'
|
|
167
|
+
|
|
168
|
+
// Filter out undefined values from process.env
|
|
169
|
+
const processEnvClean: Record<string, string> = {}
|
|
170
|
+
for (const [key, value] of Object.entries(process.env)) {
|
|
171
|
+
if (value !== undefined) {
|
|
172
|
+
processEnvClean[key] = value
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
let envVars: Record<string, string> = { ...processEnvClean }
|
|
177
|
+
|
|
178
|
+
if (activeBot) {
|
|
179
|
+
// Load bot-specific environment file
|
|
180
|
+
const botEnvVars = loadEnvFile(activeBot, environment)
|
|
181
|
+
if (botEnvVars) {
|
|
182
|
+
// Merge bot env vars with process.env (bot vars take precedence)
|
|
183
|
+
envVars = { ...processEnvClean, ...botEnvVars }
|
|
184
|
+
} else {
|
|
185
|
+
// Fallback to old structure
|
|
186
|
+
const coreDir = resolve(getModuleDir(), '../..')
|
|
187
|
+
const oldEnvPath = resolve(coreDir, `.env.${environment}`)
|
|
188
|
+
|
|
189
|
+
if (existsSync(oldEnvPath)) {
|
|
190
|
+
const content = readFileSync(oldEnvPath, 'utf-8')
|
|
191
|
+
for (const line of content.split('\n')) {
|
|
192
|
+
const trimmed = line.trim()
|
|
193
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
194
|
+
continue
|
|
195
|
+
}
|
|
196
|
+
const [key, ...valueParts] = trimmed.split('=')
|
|
197
|
+
if (key && valueParts.length > 0) {
|
|
198
|
+
envVars[key] = valueParts.join('=')
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
} else {
|
|
204
|
+
// No active bot, try old structure
|
|
205
|
+
const coreDir = resolve(getModuleDir(), '../..')
|
|
206
|
+
const oldEnvPath = resolve(coreDir, `.env.${environment}`)
|
|
207
|
+
|
|
208
|
+
if (existsSync(oldEnvPath)) {
|
|
209
|
+
const content = readFileSync(oldEnvPath, 'utf-8')
|
|
210
|
+
for (const line of content.split('\n')) {
|
|
211
|
+
const trimmed = line.trim()
|
|
212
|
+
if (!trimmed || trimmed.startsWith('#')) {
|
|
213
|
+
continue
|
|
214
|
+
}
|
|
215
|
+
const [key, ...valueParts] = trimmed.split('=')
|
|
216
|
+
if (key && valueParts.length > 0) {
|
|
217
|
+
envVars[key] = valueParts.join('=')
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
const result = envSchema.safeParse(envVars)
|
|
95
224
|
|
|
96
225
|
if (!result.success) {
|
|
97
226
|
const errors = result.error.errors.map((e) => ` ${e.path.join('.')}: ${e.message}`).join('\n')
|
|
@@ -13,7 +13,7 @@ export interface FileLoggingConfig {
|
|
|
13
13
|
logDir: string
|
|
14
14
|
maxFileSize: number
|
|
15
15
|
maxFiles: number
|
|
16
|
-
fileLogLevels: ('debug' | 'info' | 'warn' | 'error' | 'critical')[]
|
|
16
|
+
fileLogLevels: ('debug' | 'info' | 'success' | 'warn' | 'error' | 'critical')[]
|
|
17
17
|
}
|
|
18
18
|
|
|
19
19
|
const DEFAULT_CONFIG: FileLoggingConfig = {
|
|
@@ -22,7 +22,9 @@ const DEFAULT_CONFIG: FileLoggingConfig = {
|
|
|
22
22
|
maxFileSize: Number(process.env.TG_LOG_MAX_SIZE) || 1024 * 1024, // 1MB default
|
|
23
23
|
maxFiles: Number(process.env.TG_LOG_MAX_FILES) || 5,
|
|
24
24
|
fileLogLevels: (process.env.TG_LOG_LEVELS?.split(',') || [
|
|
25
|
+
'debug',
|
|
25
26
|
'info',
|
|
27
|
+
'success',
|
|
26
28
|
'warn',
|
|
27
29
|
'error',
|
|
28
30
|
'critical',
|
|
@@ -52,9 +54,7 @@ let fileHandlersInitialized = false
|
|
|
52
54
|
* fileLogLevels: ['error', 'critical']
|
|
53
55
|
* })
|
|
54
56
|
*/
|
|
55
|
-
export function initializeFileLogging(
|
|
56
|
-
config: Partial<FileLoggingConfig> = {}
|
|
57
|
-
): void {
|
|
57
|
+
export function initializeFileLogging(config: Partial<FileLoggingConfig> = {}): void {
|
|
58
58
|
// Setup logger with debug/logLevel options
|
|
59
59
|
const appConfig = getConfig()
|
|
60
60
|
setupLogger({ debug: appConfig.debug, logLevel: appConfig.logLevel })
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
import type { Context } from 'telegraf'
|
|
2
|
+
import { badge, kv, colors, colorText } from '../middleware/logging.js'
|
|
3
|
+
import { getConfig } from '../config/index.js'
|
|
4
|
+
import { configLogger } from '@mks2508/telegram-bot-utils'
|
|
5
|
+
import { TelegramMessageBuilder } from '@mks2508/telegram-message-builder'
|
|
6
|
+
|
|
7
|
+
const collectedTopics = new Map<number, string>()
|
|
8
|
+
|
|
9
|
+
export async function handleExportConfig(ctx: Context): Promise<void> {
|
|
10
|
+
const userId = ctx.from?.id ?? 'unknown'
|
|
11
|
+
const chat = ctx.chat
|
|
12
|
+
|
|
13
|
+
configLogger.info(
|
|
14
|
+
`${badge('CONFIG', 'rounded')} ${kv({
|
|
15
|
+
cmd: '/exportconfig',
|
|
16
|
+
user: colorText(String(userId), colors.user),
|
|
17
|
+
chat: chat?.id,
|
|
18
|
+
})}`
|
|
19
|
+
)
|
|
20
|
+
|
|
21
|
+
const config = getConfig()
|
|
22
|
+
const builder = TelegramMessageBuilder.text()
|
|
23
|
+
|
|
24
|
+
// Title
|
|
25
|
+
builder.title('🔧 Current Configuration')
|
|
26
|
+
builder.newline()
|
|
27
|
+
|
|
28
|
+
// Environment
|
|
29
|
+
builder.section('Environment')
|
|
30
|
+
builder.line('TG_ENV', config.environment, { code: true })
|
|
31
|
+
builder.line('TG_INSTANCE_NAME', config.instanceName, { code: true })
|
|
32
|
+
builder.line('TG_MODE', config.mode, { code: true })
|
|
33
|
+
builder.newline()
|
|
34
|
+
|
|
35
|
+
// Bot Token (masked)
|
|
36
|
+
if (config.botToken) {
|
|
37
|
+
const masked = config.botToken.slice(0, 6) + '...' + config.botToken.slice(-6)
|
|
38
|
+
builder.section('Bot')
|
|
39
|
+
builder.line('TG_BOT_TOKEN', masked, { code: true })
|
|
40
|
+
builder.newline()
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Control
|
|
44
|
+
builder.section('Control Commands')
|
|
45
|
+
if (config.controlChatId) {
|
|
46
|
+
builder.line('TG_CONTROL_CHAT_ID', String(config.controlChatId), { code: true })
|
|
47
|
+
} else {
|
|
48
|
+
builder.text('# TG_CONTROL_CHAT_ID=not_set')
|
|
49
|
+
}
|
|
50
|
+
if (config.controlTopicId) {
|
|
51
|
+
builder.line('TG_CONTROL_TOPIC_ID', String(config.controlTopicId), { code: true })
|
|
52
|
+
} else {
|
|
53
|
+
builder.text('# TG_CONTROL_TOPIC_ID=not_set')
|
|
54
|
+
}
|
|
55
|
+
if (config.authorizedUserIds && config.authorizedUserIds.size > 0) {
|
|
56
|
+
builder.line('TG_AUTHORIZED_USER_IDS', [...config.authorizedUserIds].join(','), { code: true })
|
|
57
|
+
builder.newline()
|
|
58
|
+
} else {
|
|
59
|
+
builder.text('# TG_AUTHORIZED_USER_IDS=not_set')
|
|
60
|
+
builder.newline()
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Logging
|
|
64
|
+
builder.section('Logging')
|
|
65
|
+
if (config.logChatId) {
|
|
66
|
+
builder.line('TG_LOG_CHAT_ID', String(config.logChatId), { code: true })
|
|
67
|
+
} else {
|
|
68
|
+
builder.text('# TG_LOG_CHAT_ID=not_set')
|
|
69
|
+
}
|
|
70
|
+
if (config.logTopicId) {
|
|
71
|
+
builder.line('TG_LOG_TOPIC_ID', String(config.logTopicId), { code: true })
|
|
72
|
+
builder.newline()
|
|
73
|
+
} else {
|
|
74
|
+
builder.text('# TG_LOG_TOPIC_ID=not_set')
|
|
75
|
+
builder.newline()
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
// Webhook
|
|
79
|
+
if (config.mode === 'webhook') {
|
|
80
|
+
builder.section('Webhook')
|
|
81
|
+
builder.line('TG_WEBHOOK_URL', config.webhookUrl || 'not_set', { code: true })
|
|
82
|
+
builder.line('TG_WEBHOOK_SECRET', config.webhookSecret || 'not_set', { code: true })
|
|
83
|
+
builder.newline()
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
builder.newline()
|
|
87
|
+
builder.text('💡 Copy this to your .env file')
|
|
88
|
+
builder.newline()
|
|
89
|
+
builder.newline()
|
|
90
|
+
|
|
91
|
+
// Instructions
|
|
92
|
+
builder.section('📋 Quick Setup')
|
|
93
|
+
builder.listItem('Create topics: General, Control, Logs')
|
|
94
|
+
builder.listItem('Mention @bot_username in each topic')
|
|
95
|
+
builder.listItem('Use /getinfo to get Thread IDs')
|
|
96
|
+
builder.listItem('Update .env with the IDs')
|
|
97
|
+
|
|
98
|
+
const message = builder.build()
|
|
99
|
+
await ctx.reply(message.text || '', { parse_mode: (message.parse_mode || 'HTML') as any })
|
|
100
|
+
configLogger.success(`Config exported for user ${userId}`)
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* Register a topic when user mentions bot in a topic
|
|
105
|
+
* Call this from the mention middleware
|
|
106
|
+
*/
|
|
107
|
+
export function registerTopic(threadId: number, topicName: string): void {
|
|
108
|
+
collectedTopics.set(threadId, topicName)
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get all collected topics
|
|
113
|
+
*/
|
|
114
|
+
export function getCollectedTopics(): Map<number, string> {
|
|
115
|
+
return collectedTopics
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Clear collected topics
|
|
120
|
+
*/
|
|
121
|
+
export function clearCollectedTopics(): void {
|
|
122
|
+
collectedTopics.clear()
|
|
123
|
+
}
|