Snapshot of uncommitted work: landing, bots, prod infra, partner cabinet, backoffice stage 1
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
1 parent
45d7512d2b
commit
d452824c62
314 files changed
+44394
-121
No files matched your search
@@ -0,0 +1,37 @@
|
||||
/**
|
||||
* Локальная разработка без Telegram: печатает ссылки на Mini App с подписанным initData.
|
||||
*
|
||||
* pnpm dev:initdata — ссылки для всех тестовых пользователей из seed
|
||||
* pnpm dev:initdata -- client 100000001 — конкретный пользователь
|
||||
*
|
||||
* Подпись делается тем же токеном, которым API проверяет initData (настоящий или DEV_*).
|
||||
*/
|
||||
import { env } from '../src/env.ts';
|
||||
import { signInitData } from '../src/auth/telegram.ts';
|
||||
|
||||
if (env.isProd) throw new Error('Только для разработки');
|
||||
|
||||
const users: { app: 'client' | 'pro'; id: number; name: string; lang: string }[] = [
|
||||
{ app: 'client', id: 100000001, name: 'Анна', lang: 'ru' },
|
||||
{ app: 'client', id: 100000002, name: 'John', lang: 'en' },
|
||||
{ app: 'client', id: 100000003, name: '李明', lang: 'zh' },
|
||||
{ app: 'client', id: 100000004, name: 'Ольга', lang: 'ru' },
|
||||
{ app: 'client', id: 100000099, name: 'Новый клиент', lang: 'ru' },
|
||||
{ app: 'pro', id: 200000001, name: 'Мария (клинер)', lang: 'ru' },
|
||||
{ app: 'pro', id: 200000003, name: 'Elena (клинер)', lang: 'es' },
|
||||
{ app: 'pro', id: 200000011, name: 'Лусине (сотрудник компании)', lang: 'hy' },
|
||||
{ app: 'pro', id: 300000001, name: 'Карен (диспетчер компании)', lang: 'ru' },
|
||||
{ app: 'pro', id: 300000010, name: 'Арам (собственник Lumen Coffee)', lang: 'ru' },
|
||||
{ app: 'pro', id: 300000011, name: 'Гаяне (сотрудник Lumen Coffee)', lang: 'ru' },
|
||||
];
|
||||
|
||||
const [appArg, idArg] = process.argv.slice(2).filter((a) => a !== '--');
|
||||
const selected = appArg && idArg ? [{ app: appArg as 'client' | 'pro', id: Number(idArg), name: `user ${idArg}`, lang: 'ru' }] : users;
|
||||
|
||||
for (const u of selected) {
|
||||
const token = u.app === 'client' ? env.clientBotToken : env.proBotToken;
|
||||
// initData живёт TG_INIT_DATA_MAX_AGE секунд — для разработки этого достаточно
|
||||
const initData = signInitData(token, { id: u.id, first_name: u.name.split(' ')[0], language_code: u.lang });
|
||||
const base = u.app === 'client' ? env.CLIENT_MINIAPP_URL : env.PRO_MINIAPP_URL;
|
||||
console.log(`${u.app.padEnd(6)} ${u.name}\n ${base}/#tgWebAppData=${encodeURIComponent(initData)}\n`);
|
||||
}
|
||||
Reference in new issue
Block a user