@@ -3110,5 +3110,68 @@ export const webviewMessageHandler = async (
31103110 } )
31113111 break
31123112 }
3113+ case "getUsagePreview" : {
3114+ try {
3115+ // Get the CloudAPI instance and fetch usage preview
3116+ const cloudApi = CloudService . instance . cloudAPI
3117+ if ( ! cloudApi ) {
3118+ // User is not authenticated
3119+ provider . log ( "[webviewMessageHandler] User not authenticated for usage preview" )
3120+ await provider . postMessageToWebview ( {
3121+ type : "usagePreviewData" ,
3122+ error : "Authentication required" ,
3123+ data : null ,
3124+ } )
3125+ break
3126+ }
3127+
3128+ // Fetch usage preview data
3129+ const rawUsageData = await cloudApi . getUsagePreview ( )
3130+
3131+ // Transform the data to match UI expectations
3132+ // The API returns data with separate arrays, but UI expects an array of day objects
3133+ const dates = rawUsageData . data ?. dates ?? [ ]
3134+ const tasks = rawUsageData . data ?. tasks ?? [ ]
3135+ const tokens = rawUsageData . data ?. tokens ?? [ ]
3136+ const costs = rawUsageData . data ?. costs ?? [ ]
3137+ const len = Math . min ( dates . length , tasks . length , tokens . length , costs . length )
3138+
3139+ const transformedData = {
3140+ days : Array . from ( { length : len } ) . map ( ( _ , index ) => ( {
3141+ date : dates [ index ] ?? "" ,
3142+ taskCount : tasks [ index ] ?? 0 ,
3143+ tokenCount : tokens [ index ] ?? 0 ,
3144+ cost : costs [ index ] ?? 0 ,
3145+ } ) ) ,
3146+ totals : rawUsageData . data ?. totals || {
3147+ tasks : 0 ,
3148+ tokens : 0 ,
3149+ cost : 0 ,
3150+ } ,
3151+ }
3152+
3153+ // Send the transformed data back to the webview
3154+ await provider . postMessageToWebview ( {
3155+ type : "usagePreviewData" ,
3156+ data : transformedData ,
3157+ error : undefined ,
3158+ } )
3159+ } catch ( error ) {
3160+ provider . log (
3161+ `[webviewMessageHandler] Failed to fetch usage preview: ${ error instanceof Error ? error . message : String ( error ) } ` ,
3162+ )
3163+ provider . log (
3164+ `[webviewMessageHandler] Error stack trace: ${ error instanceof Error ? error . stack : "No stack trace" } ` ,
3165+ )
3166+
3167+ // Send error back to webview
3168+ await provider . postMessageToWebview ( {
3169+ type : "usagePreviewData" ,
3170+ error : error instanceof Error ? error . message : "Failed to load usage data" ,
3171+ data : null ,
3172+ } )
3173+ }
3174+ break
3175+ }
31133176 }
31143177}
0 commit comments