refactor: app.js를 ES6 모듈로 분리
## 변경사항 - app.js (1370줄) → 7개 모듈 (1427줄) - ES6 import/export 문법 사용 - Alpine.js 호환성 유지 (window 전역 노출) ## 모듈 구조 - js/config.js: 상수/설정 (WIZARD_CONFIG, PRICING_DATA, MOCK_*) - js/api.js: ApiService - js/utils.js: formatPrice, switchTab, ping 시뮬레이션 - js/wizard.js: 서버 추천 마법사 로직 - js/pricing.js: 가격표 컴포넌트 - js/dashboard.js: 대시보드 및 텔레그램 연동 - js/app.js: 메인 통합 (모든 모듈 import) ## HTML 변경 - <script type="module" src="js/app.js">로 변경 - 기존 기능 모두 정상 작동 Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
131
TELEGRAM_INTEGRATION.md
Normal file
131
TELEGRAM_INTEGRATION.md
Normal file
@@ -0,0 +1,131 @@
|
||||
# Telegram Mini App Integration - Implementation Summary
|
||||
|
||||
## Changes Made
|
||||
|
||||
### 1. index.html Modifications
|
||||
|
||||
#### Added Telegram Web App SDK (Line 35)
|
||||
```html
|
||||
<script src="https://telegram.org/js/telegram-web-app.js"></script>
|
||||
```
|
||||
|
||||
#### Updated Content Security Policy (Line 6)
|
||||
- Added `https://telegram.org` to `script-src` directive
|
||||
- Allows loading Telegram SDK from official CDN
|
||||
|
||||
#### Added User Info Display in Navbar (Lines 86-93)
|
||||
Two conditional displays:
|
||||
- **Telegram Mode**: Shows user info `👤 @username (ID: 123456)`
|
||||
- **Web Browser Mode**: Shows `🌐 웹 브라우저`
|
||||
|
||||
### 2. app.js Modifications
|
||||
|
||||
#### Added Telegram State (Lines 88-92)
|
||||
```javascript
|
||||
telegram: {
|
||||
isAvailable: false, // Whether running in Telegram environment
|
||||
user: null, // User information object
|
||||
initData: null // Validation data
|
||||
}
|
||||
```
|
||||
|
||||
#### Added telegram_id to config (Line 100)
|
||||
```javascript
|
||||
config: {
|
||||
region: null,
|
||||
plan: null,
|
||||
os: null,
|
||||
payment: null,
|
||||
telegram_id: null // NEW: Telegram user ID
|
||||
}
|
||||
```
|
||||
|
||||
#### Added init() Method (Lines 120-140)
|
||||
- Detects Telegram Web App environment
|
||||
- Initializes Telegram SDK (`tg.ready()`, `tg.expand()`)
|
||||
- Stores user information and init data
|
||||
- Logs initialization status
|
||||
|
||||
#### Updated startLaunch() Method (Lines 227-229)
|
||||
- Automatically includes `telegram_id` when creating server
|
||||
- Only adds ID if user is authenticated via Telegram
|
||||
|
||||
#### Updated resetLauncher() Method (Line 281)
|
||||
- Resets `telegram_id` along with other config values
|
||||
|
||||
## Features
|
||||
|
||||
### Backward Compatibility
|
||||
- ✅ Works in regular web browsers without errors
|
||||
- ✅ Gracefully degrades when Telegram SDK is unavailable
|
||||
- ✅ All existing functionality preserved
|
||||
|
||||
### Telegram Integration
|
||||
- ✅ Auto-detects Telegram Mini App environment
|
||||
- ✅ Displays user information in navbar
|
||||
- ✅ Includes telegram_id in server creation payload
|
||||
- ✅ Console logging for debugging
|
||||
|
||||
### Security
|
||||
- ✅ CSP updated to allow Telegram SDK
|
||||
- ✅ Optional chaining prevents errors
|
||||
- ✅ initData available for backend verification
|
||||
|
||||
## Testing Scenarios
|
||||
|
||||
### 1. Web Browser Test
|
||||
**Expected**:
|
||||
- `telegram.isAvailable = false`
|
||||
- Shows "🌐 웹 브라우저" badge
|
||||
- Server creation works without telegram_id
|
||||
- No console errors
|
||||
|
||||
### 2. Telegram Mini App Test
|
||||
**Expected**:
|
||||
- `telegram.isAvailable = true`
|
||||
- Shows "👤 @username (ID: 123456)" badge
|
||||
- Server creation includes `telegram_id` field
|
||||
- Console logs show user info
|
||||
|
||||
## Usage
|
||||
|
||||
### For End Users
|
||||
1. Open in Telegram: Access via bot inline button
|
||||
2. Open in Browser: Direct URL access
|
||||
|
||||
### For Developers
|
||||
```javascript
|
||||
// Access Telegram data in console
|
||||
console.log(window.Telegram?.WebApp?.initDataUnsafe);
|
||||
|
||||
// Check if running in Telegram
|
||||
Alpine.store('telegram.isAvailable');
|
||||
|
||||
// Get user ID
|
||||
Alpine.store('telegram.user.id');
|
||||
```
|
||||
|
||||
## API Integration
|
||||
|
||||
When backend receives server creation request, `config` object will include:
|
||||
|
||||
```json
|
||||
{
|
||||
"region": "Seoul",
|
||||
"plan": "Pro",
|
||||
"os": "Debian 12",
|
||||
"payment": "yearly",
|
||||
"telegram_id": 123456789 // Only present when launched from Telegram
|
||||
}
|
||||
```
|
||||
|
||||
Backend can use `telegram_id` to:
|
||||
- Link server to Telegram user
|
||||
- Send notifications via bot
|
||||
- Verify user identity using `initData`
|
||||
|
||||
## Notes
|
||||
|
||||
- Theme color integration is commented out (Line 131)
|
||||
- Can be enabled if desired: `document.body.style.backgroundColor = tg.backgroundColor;`
|
||||
- initData should be validated on backend for security
|
||||
Reference in New Issue
Block a user