modified instancev1 controller sometimes returns string instead of number

This commit is contained in:
Siddharth Singh 2025-04-03 17:23:43 +05:30
parent 65c51c2293
commit d17f117408
No known key found for this signature in database

View file

@ -2,6 +2,7 @@ import denoJson from 'deno.json' with { type: 'json' };
import { AppController } from '@/app.ts'; import { AppController } from '@/app.ts';
import { getInstanceMetadata } from '@/utils/instance.ts'; import { getInstanceMetadata } from '@/utils/instance.ts';
import { logi } from '@soapbox/logi';
const version = `3.0.0 (compatible; Ditto ${denoJson.version})`; const version = `3.0.0 (compatible; Ditto ${denoJson.version})`;
@ -15,17 +16,26 @@ const features = [
'v2_suggestions', 'v2_suggestions',
]; ];
const cache = (f: () => (number | undefined) | Promise<number | undefined>, interval: number) => { const cache = (f: () => Promise<number | undefined>, interval: number) => {
let lastCheck = Date.now(); let lastCheck = 0;
let value: number | undefined = undefined; let value: number | undefined;
return async () => { return async () => {
const now = Date.now(); const now = Date.now();
if (value === null || now - lastCheck > interval) { if (value === undefined || now - lastCheck > interval) {
lastCheck = now; lastCheck = now;
value = await f(); try {
value = await f();
} catch (error) {
logi({
level: 'error',
ns: 'ditto.routes.instanceV1',
message: `Error fetching cached value: ${error}`
});
value = undefined; // Ensure we retry next time
}
} }
return Number(value || 0); return value ?? 0; // Prevent returning undefined
}; };
}; };
@ -96,9 +106,9 @@ const instanceV1Controller: AppController = async (c) => {
}, },
languages: ['en'], languages: ['en'],
stats: { stats: {
domain_count: await domainCount(), domain_count: Number(await domainCount()),
status_count: await statusCount(), status_count: Number(await statusCount()),
user_count: await userCount(), user_count: Number(await userCount()),
}, },
urls: { urls: {
streaming_api: `${wsProtocol}//${host}`, streaming_api: `${wsProtocol}//${host}`,