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