feat: implement userInfo() and cdn*() API calls into UI
This commit is contained in:
102
app.js
102
app.js
@ -772,6 +772,9 @@ app.post('/api/user', async (req, res) => {
|
||||
case 'friendsList':
|
||||
data = await fetchWithTimeout(() => API.Me.friendsList());
|
||||
break;
|
||||
case 'userInfo':
|
||||
data = await fetchWithTimeout(() => API.Me.userInfo());
|
||||
break;
|
||||
// case "settings":
|
||||
// data = await fetchWithTimeout(() =>
|
||||
// API.Me.settings(username, platform)
|
||||
@ -807,6 +810,105 @@ app.post('/api/user', async (req, res) => {
|
||||
}
|
||||
});
|
||||
|
||||
// API endpoint for CDN-related API calls
|
||||
app.post('/api/cdn', async (req, res) => {
|
||||
logger.debug('Received request for /api/cdn');
|
||||
logger.debug(
|
||||
`Request IP: ${
|
||||
req.headers['x-forwarded-for'] || req.ip || req.connection.remoteAddress
|
||||
}`
|
||||
);
|
||||
logger.debug(
|
||||
`Request JSON: ${JSON.stringify({
|
||||
cdnCall: req.body.cdnCall,
|
||||
})}`
|
||||
);
|
||||
|
||||
try {
|
||||
let { ssoToken, cdnCall } = req.body;
|
||||
|
||||
/*
|
||||
logger.debug(
|
||||
`Request details - User Call: ${cdnCall}`
|
||||
);
|
||||
|
||||
logger.debug("=== USER DATA REQUEST ===");
|
||||
logger.debug(`CDN Call: ${cdnCall}`);
|
||||
logger.debug("========================="); */
|
||||
|
||||
const defaultToken = demoTracker.getDefaultSsoToken();
|
||||
if (!ssoToken && defaultToken) {
|
||||
ssoToken = defaultToken;
|
||||
logger.info('Using default SSO token for demo mode');
|
||||
} else if (!ssoToken) {
|
||||
return res.status(200).json({
|
||||
status: 'error',
|
||||
message: 'SSO Token is required',
|
||||
timestamp: global.Utils.toIsoString(new Date()),
|
||||
});
|
||||
}
|
||||
|
||||
try {
|
||||
await ensureLogin(ssoToken);
|
||||
} catch (loginError) {
|
||||
return res.status(200).json({
|
||||
status: 'error',
|
||||
error_type: 'LoginError',
|
||||
message: 'SSO token login failed',
|
||||
details: loginError.message || 'Unknown login error',
|
||||
timestamp: global.Utils.toIsoString(new Date()),
|
||||
});
|
||||
}
|
||||
|
||||
// Create a wrapped function for each API call to handle timeout
|
||||
const fetchWithTimeout = async (apiFn) => {
|
||||
return Promise.race([
|
||||
apiFn(),
|
||||
timeoutPromise(30000), // 30 second timeout
|
||||
]);
|
||||
};
|
||||
|
||||
try {
|
||||
logger.debug(`Attempting to fetch CDN data for ${cdnCall}`);
|
||||
let data;
|
||||
|
||||
// Fetch user data based on cdnCall
|
||||
switch (cdnCall) {
|
||||
case 'accolades':
|
||||
data = await fetchWithTimeout(() => API.CDN.accolades());
|
||||
break;
|
||||
case 'allCDNData':
|
||||
data = await fetchWithTimeout(() => API.CDN.allCDNData());
|
||||
break;
|
||||
|
||||
default:
|
||||
return res.status(200).json({
|
||||
status: 'error',
|
||||
message: 'Invalid user API call selected',
|
||||
timestamp: global.Utils.toIsoString(new Date()),
|
||||
});
|
||||
}
|
||||
|
||||
demoTracker.incrementDemoCounter(req, ssoToken);
|
||||
|
||||
return res.json({
|
||||
// status: "success",
|
||||
data: data,
|
||||
timestamp: global.Utils.toIsoString(new Date()),
|
||||
});
|
||||
} catch (apiError) {
|
||||
return handleApiError(apiError, res);
|
||||
}
|
||||
} catch (serverError) {
|
||||
return res.status(200).json({
|
||||
status: 'server_error',
|
||||
message: 'The server encountered an unexpected error',
|
||||
error_details: serverError.message || 'Unknown server error',
|
||||
timestamp: global.Utils.toIsoString(new Date()),
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// API endpoint for fuzzy search
|
||||
app.post('/api/search', async (req, res) => {
|
||||
logger.debug('Received request for /api/search');
|
||||
|
Reference in New Issue
Block a user