@@ -1106,6 +1106,51 @@ class SnapProcessor extends BaseProcessor {
11061106 useMessageRecording = 1 ;
11071107 }
11081108
1109+ // Handle image data from button.parameters.imageData or button.image (data URL)
1110+ let pageSetImageId : number | null = null ;
1111+ if ( button . parameters ?. imageData && Buffer . isBuffer ( button . parameters . imageData ) ) {
1112+ // Use existing image data buffer
1113+ const imageIdentifier : string =
1114+ ( button . parameters . image_id as string ) || `IMG_${ buttonIdCounter } ` ;
1115+ let imageId = pageSetDataIdentifierMap . get ( imageIdentifier ) ;
1116+ if ( ! imageId ) {
1117+ imageId = pageSetDataIdCounter ++ ;
1118+ insertPageSetData . run ( imageId , imageIdentifier , button . parameters . imageData , 1 ) ;
1119+ pageSetDataIdentifierMap . set ( imageIdentifier , imageId ) ;
1120+ } else {
1121+ incrementRefCount . run ( imageId ) ;
1122+ }
1123+ pageSetImageId = imageId ;
1124+ } else if (
1125+ button . image &&
1126+ typeof button . image === 'string' &&
1127+ button . image . startsWith ( 'data:image' )
1128+ ) {
1129+ // Convert data URL to buffer
1130+ try {
1131+ const matches = button . image . match ( / ^ d a t a : i m a g e \/ ( \w + ) ; b a s e 6 4 , ( .+ ) $ / ) ;
1132+ if ( matches && matches [ 2 ] ) {
1133+ const imageData = Buffer . from ( matches [ 2 ] , 'base64' ) ;
1134+ const imageIdentifier : string =
1135+ ( button . parameters ?. image_id as string ) || `IMG_${ buttonIdCounter } ` ;
1136+ let imageId = pageSetDataIdentifierMap . get ( imageIdentifier ) ;
1137+ if ( ! imageId ) {
1138+ imageId = pageSetDataIdCounter ++ ;
1139+ insertPageSetData . run ( imageId , imageIdentifier , imageData , 1 ) ;
1140+ pageSetDataIdentifierMap . set ( imageIdentifier , imageId ) ;
1141+ } else {
1142+ incrementRefCount . run ( imageId ) ;
1143+ }
1144+ pageSetImageId = imageId ;
1145+ }
1146+ } catch ( err ) {
1147+ console . warn (
1148+ `[SnapProcessor] Failed to convert data URL to Buffer for button ${ button . id } :` ,
1149+ err
1150+ ) ;
1151+ }
1152+ }
1153+
11091154 // Retry logic for SQLite operations
11101155 let retries = 3 ;
11111156 while ( retries > 0 ) {
@@ -1116,8 +1161,8 @@ class SnapProcessor extends BaseProcessor {
11161161 button . message || button . label || '' ,
11171162 navigatePageId ,
11181163 elementRefId ,
1119- null ,
1120- null ,
1164+ null , // LibrarySymbolId - not used for embedded images
1165+ pageSetImageId , // PageSetImageId - references embedded image in PageSetData
11211166 messageRecordingId ,
11221167 serializedMetadata ,
11231168 useMessageRecording ,
0 commit comments