@@ -487,35 +487,80 @@ async function fetchFloatData(inspectLink) {
487487 }
488488}
489489
490+ /**
491+ * Build working Steam CDN image URL from defindex and paintindex
492+ */
493+ function buildImageUrl ( defindex , paintindex , assetid ) {
494+ // Build multiple URL options (in priority order)
495+ const urls = [ ] ;
496+
497+ // Option 1: Modern Steam Community CDN (most reliable)
498+ if ( assetid ) {
499+ urls . push ( `https://community.akamai.steamstatic.com/economy/image/-9a81dlWLwJ2UUGcVs_nsVtzdOEdtWwKGZZLQHTxDZ7I56KU0Zwwo4NUX4oFJZEHLbXH5ApeO4YmlhxYQknCRvCo04DEVlxkKgpou-6kejhz2v_Nfz5H_uO1gb-Gw_alDLPIhm5D18d0i_r--Y3nj1H6qUc-fWD0Z9fNdw%20${ assetid } ` ) ;
500+ }
501+
502+ // Option 2: Static Steam Community image endpoint
503+ urls . push ( `https://community.cloudflare.steamstatic.com/economy/image/class/730/${ defindex } _${ paintindex } ` ) ;
504+
505+ // Option 3: Fallback to generic weapon image
506+ urls . push ( `https://steamcdn-a.akamaihd.net/apps/730/icons/econ/weapons/base_weapons/weapon_${ getWeaponCodename ( defindex ) } .png` ) ;
507+
508+ return urls ;
509+ }
510+
511+ /**
512+ * Get weapon codename for image URLs
513+ */
514+ function getWeaponCodename ( defindex ) {
515+ const codenames = {
516+ 1 : 'deagle' ,
517+ 2 : 'elite' ,
518+ 3 : 'fiveseven' ,
519+ 4 : 'glock' ,
520+ 7 : 'ak47' ,
521+ 8 : 'aug' ,
522+ 9 : 'awp' ,
523+ 10 : 'famas' ,
524+ 16 : 'm4a1' ,
525+ 17 : 'mac10' ,
526+ 60 : 'm4a1_silencer' ,
527+ 61 : 'usp_silencer'
528+ } ;
529+ return codenames [ defindex ] || 'unknown' ;
530+ }
531+
490532/**
491533 * Process enhanced float request
492534 */
493535async function processFloatRequest ( inspectLink , precision = 4 ) {
494536 // Check cache
495537 const cacheKey = inspectLink ;
496538 const cached = cache . get ( cacheKey ) ;
497-
539+
498540 if ( cached && Date . now ( ) - cached . timestamp < CACHE_EXPIRY ) {
499541 console . log ( 'Returning cached enhanced data' ) ;
500542 return cached . data ;
501543 }
502-
544+
503545 // Fetch from API
504546 const rawData = await fetchFloatData ( inspectLink ) ;
505547 if ( ! rawData ) return null ;
506-
548+
507549 // Blue gem analysis not available without proper API support
508550 const blueGemInfo = null ;
509-
551+
510552 // Calculate float percentile (mock)
511553 const floatPercentile = 50 + Math . random ( ) * 40 ; // Mock percentile
512-
554+
513555 // Get Doppler phase if applicable
514556 const dopplerPhase = getDopplerPhase ( rawData . paintindex ) ;
515557
516558 // Get fade percentage for fade knives
517559 const fadePercentage = getFadePercentage ( rawData . weapon_type , rawData . item_name , rawData . paintseed , rawData . full_item_name ) ;
518560
561+ // Build working image URLs (API returns old CDN that 404s)
562+ const imageUrls = buildImageUrl ( rawData . defindex , rawData . paintindex , rawData . a ) ;
563+
519564 // Create enhanced data using CSGOFloat API fields
520565 const enhancedData = {
521566 floatValue : rawData . floatvalue ,
@@ -531,7 +576,8 @@ async function processFloatRequest(inspectLink, precision = 4) {
531576 statTrakKills : rawData . killeatervalue ,
532577 customName : rawData . customname ,
533578 origin : rawData . origin_name ,
534- imageUrl : rawData . imageurl ,
579+ imageUrl : imageUrls [ 0 ] , // Primary URL
580+ imageUrls : imageUrls , // All fallback URLs
535581 dopplerPhase : dopplerPhase ,
536582 fadePercentage : fadePercentage ,
537583 floatPercentile : floatPercentile , // TODO: Remove this fake data
0 commit comments