UNPKG

@hhoangphuoc/escape-room-cli

Version:

A CLI for playing AI-generated escape room games. Install globally with: npm install -g @hhoangphuoc/escape-room-cli

101 lines (100 loc) 3.12 kB
import { jsx as _jsx } from "react/jsx-runtime"; import { createContext, useState, useContext } from 'react'; export const AuthContext = createContext(undefined); export const AuthProvider = ({ children }) => { const [auth, setAuth] = useState({ costTracking: { currentSessionCost: 0, currentSessionTokens: 0, lastRequestCost: 0, lastRequestTokens: 0, totalCost: 0, totalTokens: 0, } }); const login = (userData) => { setAuth({ userId: userData.userId, sessionToken: userData.sessionToken, userName: userData.userName, apiKey: userData.apiKey, apiKeyProvider: userData.apiKeyProvider, costTracking: userData.costTracking || { currentSessionCost: 0, currentSessionTokens: 0, lastRequestCost: 0, lastRequestTokens: 0, totalCost: 0, totalTokens: 0, } }); }; const logout = () => { setAuth({ costTracking: { currentSessionCost: 0, currentSessionTokens: 0, lastRequestCost: 0, lastRequestTokens: 0, totalCost: 0, totalTokens: 0, } }); }; const updateCostTracking = (costData) => { setAuth(prev => ({ ...prev, costTracking: { ...prev.costTracking, ...costData } })); }; const resetSessionCosts = () => { setAuth(prev => ({ ...prev, costTracking: { ...prev.costTracking, currentSessionCost: 0, currentSessionTokens: 0, lastRequestCost: 0, lastRequestTokens: 0, totalCost: 0, totalTokens: 0, budgetAlert: undefined } })); }; const apiCall = async (endpoint, options = {}) => { const baseUrl = process.env['API_BASE_URL'] || 'http://localhost:3001'; const url = `${baseUrl}${endpoint}`; const headers = { 'Content-Type': 'application/json', ...(auth.sessionToken && { 'Authorization': `Bearer ${auth.sessionToken}` }), ...options.headers }; const response = await fetch(url, { ...options, headers }); if (!response.ok) { throw new Error(`API call failed: ${response.status} ${response.statusText}`); } return response.json(); }; return (_jsx(AuthContext.Provider, { value: { auth, login, logout, apiCall, updateCostTracking, resetSessionCosts }, children: children })); }; export const useAuth = () => { const context = useContext(AuthContext); if (!context) { throw new Error('useAuth must be used within an AuthProvider'); } return context; };