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:
kappa
2026-01-23 12:59:54 +09:00
parent 347a5cc598
commit 758266d8cb
21 changed files with 2193 additions and 194 deletions

131
TELEGRAM_INTEGRATION.md Normal file
View 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