// Pure builder for the Telegram native popup (showPopup) used by the deep-link info modals // (StaleInviteModal / WelcomeRedeemModal) inside the Mini App. Kept free of the SDK and the DOM so // it unit-tests in the node environment; the showPopup transport wrapper lives in telegram.ts and // the wiring (native inside Telegram, the in-app Modal elsewhere) in the modal components. import type { TelegramPopupParams } from './telegram'; /** BOT_BUTTON_ID is the showPopup button id that means "open the bot chat". */ export const BOT_BUTTON_ID = 'bot'; /** LOGIN_BUTTON_ID is the game-limit popup button that opens the sign-in funnel. */ export const LOGIN_BUTTON_ID = 'login'; /** gameLimitGuestPopup builds the native popup that nudges a guest to sign in when a New-Game start * is capped for guests: a cancel button and a login button (the sign-in funnel). */ export function gameLimitGuestPopup(title: string, message: string, cancelText: string, loginText: string): TelegramPopupParams { return { title, message, buttons: [{ id: 'cancel', text: cancelText }, { id: LOGIN_BUTTON_ID, text: loginText }] }; } /** gameLimitDurablePopup builds the native notice shown to a durable account at its per-kind cap: * an OK button only (finish a current game first). */ export function gameLimitDurablePopup(title: string, message: string, okText: string): TelegramPopupParams { return { title, message, buttons: [{ id: 'ok', text: okText }] }; } /** * botInfoPopup builds the native popup for a deep-link info modal: the message with the `{bot}` * token replaced by the `@username` as plain text (a native popup has no inline link, unlike the * in-app Modal), plus an "open bot" button when a username is known and a closing OK button. With * no username it is the message (token removed) and OK only. */ export function botInfoPopup(title: string, message: string, username: string, okText: string): TelegramPopupParams { const handle = username ? `@${username}` : ''; const text = (username ? message.replace('{bot}', handle) : message.replace('{bot}', '').replace(' ', ' ')).trim(); const buttons = username ? [{ id: BOT_BUTTON_ID, text: handle }, { id: 'ok', text: okText }] : [{ id: 'ok', text: okText }]; return { title, message: text, buttons }; }