forked from boos/BoosAPI
feat: Add normalized types and utility functions for handling chat formats
- Introduced `NormalizedContentBlock`, `NormalizedUsage`, and related types for structured data handling. - Implemented utility functions for creating and merging normalized usage statistics. - Added a new module for shared transformers to manage chat formats. feat: Implement app local state management - Created functions to clear application installation state and manage local storage keys. - Added constants for theme and user profile storage keys. test: Add tests for BrandIcon component rendering - Implemented tests to ensure BrandIcon does not force a colored background for recognized brands. test: Enhance ModelAnalysisPanel tests - Added tests for rendering token summaries with compact units in ModelAnalysisPanel. test: Add tests for ModernSelect component - Implemented tests to verify icon rendering for selected options in ModernSelect. test: Add number formatting tests - Created tests for `formatCompactTokenMetric` to validate token formatting logic. feat: Implement account creation intent handling - Added logic to handle session and API key creation intents in the Accounts page. test: Add tests for dashboard performance card - Implemented tests to verify rendering of performance metrics in the dashboard. feat: Implement default connection segment resolution - Added logic to determine initial connection segments based on platform types. test: Add tests for settings factory reset functionality - Implemented tests to verify the factory reset process and local state clearing. test: Add tests for site creation redirect logic - Implemented tests to verify redirection based on site capabilities during creation. test: Add tests for token routes refresh decision action - Implemented tests to verify refresh decision actions in TokenRoutes. test: Add tests for token routes snapshot load - Implemented tests to verify loading of cached snapshot data in TokenRoutes.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
import { eq, inArray } from 'drizzle-orm';
|
||||
import { db, schema } from '../db/index.js';
|
||||
import { formatUtcSqlDateTime } from './localTimeService.js';
|
||||
|
||||
function serializeSnapshot(snapshot: unknown): string | null {
|
||||
if (snapshot == null) return null;
|
||||
return JSON.stringify(snapshot);
|
||||
}
|
||||
|
||||
export function parseRouteDecisionSnapshot(value: string | null | undefined): unknown | null {
|
||||
if (typeof value !== 'string' || value.trim().length === 0) return null;
|
||||
try {
|
||||
return JSON.parse(value);
|
||||
} catch {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
export async function saveRouteDecisionSnapshot(routeId: number, snapshot: unknown): Promise<void> {
|
||||
const refreshedAt = formatUtcSqlDateTime(new Date());
|
||||
await db.update(schema.tokenRoutes)
|
||||
.set({
|
||||
decisionSnapshot: serializeSnapshot(snapshot),
|
||||
decisionRefreshedAt: refreshedAt,
|
||||
})
|
||||
.where(eq(schema.tokenRoutes.id, routeId))
|
||||
.run();
|
||||
}
|
||||
|
||||
export async function saveRouteDecisionSnapshots(entries: Array<{ routeId: number; snapshot: unknown }>): Promise<void> {
|
||||
for (const entry of entries) {
|
||||
await saveRouteDecisionSnapshot(entry.routeId, entry.snapshot);
|
||||
}
|
||||
}
|
||||
|
||||
export async function clearRouteDecisionSnapshot(routeId: number): Promise<void> {
|
||||
await clearRouteDecisionSnapshots([routeId]);
|
||||
}
|
||||
|
||||
export async function clearRouteDecisionSnapshots(routeIds: number[]): Promise<void> {
|
||||
const normalizedRouteIds = Array.from(new Set(
|
||||
routeIds
|
||||
.map((routeId) => Math.trunc(routeId))
|
||||
.filter((routeId) => routeId > 0),
|
||||
));
|
||||
if (normalizedRouteIds.length === 0) return;
|
||||
|
||||
await db.update(schema.tokenRoutes)
|
||||
.set({
|
||||
decisionSnapshot: null,
|
||||
decisionRefreshedAt: null,
|
||||
})
|
||||
.where(inArray(schema.tokenRoutes.id, normalizedRouteIds))
|
||||
.run();
|
||||
}
|
||||
|
||||
export async function clearAllRouteDecisionSnapshots(): Promise<void> {
|
||||
await db.update(schema.tokenRoutes)
|
||||
.set({
|
||||
decisionSnapshot: null,
|
||||
decisionRefreshedAt: null,
|
||||
})
|
||||
.run();
|
||||
}
|
||||
Reference in New Issue
Block a user