8d00d71072
카카오톡처럼 PC에 OS 토스트가 뜨도록 Web Notifications(Level1) +
Web Push/서비스워커(Level2)를 기존 인앱·SSE 알림 위에 얹는다.
중복 방지: 페이지가 열려 있으면 SSE 로컬 알림(포커스면 인앱만),
닫혀 있으면 서비스워커 푸시가 담당한다.
- 백엔드: push_subscriptions 엔티티 + WebPushService(VAPID 설정·
type→{title,body,url} 포매터·만료 구독 정리), notify()가 SSE와
함께 푸시 발송, push/subscribe·unsubscribe 엔드포인트, 마이그레이션,
web-push 의존성
- 프론트: public/sw.js(push/클릭), usePush 컴포저블(권한·구독, 결과
안내), notification.store 로컬 토스트, AppShell 'PC 알림 켜기' 버튼
- env/compose: VAPID 키 주입(공개키→프론트, 비밀키→백엔드)
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
17 lines
627 B
TypeScript
17 lines
627 B
TypeScript
/// <reference types="vite/client" />
|
|
|
|
// Vite 환경변수 타입 정의 — VITE_ prefix 만 클라이언트 번들에 포함됨
|
|
interface ImportMetaEnv {
|
|
readonly VITE_API_BASE_URL: string
|
|
/** AI 요청 타임아웃(ms) — 백엔드 AI_TIMEOUT_MS 와 동일 값 */
|
|
readonly VITE_AI_TIMEOUT_MS: string
|
|
/** 브라우저가 접속할 LiveKit WebSocket URL (예: ws://localhost:7880) */
|
|
readonly VITE_LIVEKIT_URL: string
|
|
/** 웹 푸시(VAPID) 공개키 — 푸시 구독에 사용. 미설정 시 푸시 비활성 */
|
|
readonly VITE_VAPID_PUBLIC_KEY: string
|
|
}
|
|
|
|
interface ImportMeta {
|
|
readonly env: ImportMetaEnv
|
|
}
|