@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
JavaScript
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;
};