@@ -94,32 +94,47 @@ export class Utils implements BaseUtils {
9494
9595 const createNode = nodeType . create ;
9696
97+ const getField = ( fields : RecordField [ ] , label : string ) => fields . find ( ( f ) => f . label === label ) ?. value ?. sum ;
98+
9799 // Check if it's the correct template
98100 const template = createNode . templateId ;
99- if ( template ?. entityName !== 'AmuletTransferInstruction' ) return ;
100-
101- // Now parse the 'create' argument
102- if ( createNode . argument ?. sum ?. oneofKind !== 'record' ) return ;
103- const fields = createNode . argument ?. sum ?. record ?. fields ;
101+ const argSum = createNode . argument ?. sum ;
102+ if ( ! argSum || argSum . oneofKind !== 'record' ) return ;
103+ const fields = argSum . record ?. fields ;
104104 if ( ! fields ) return ;
105-
106- // Find the 'transfer' field
107- const transferField = fields . find ( ( f ) => f . label === 'transfer' ) ;
108- if ( transferField ?. value ?. sum ?. oneofKind !== 'record' ) return ;
109- const transferRecord = transferField ?. value ?. sum ?. record ?. fields ;
110- if ( ! transferRecord ) return ;
111-
112- const getField = ( fields : RecordField [ ] , label : string ) => fields . find ( ( f ) => f . label === label ) ?. value ?. sum ;
113-
114- const senderData = getField ( transferRecord , 'sender' ) ;
115- if ( ! senderData || senderData . oneofKind !== 'party' ) return ;
116- sender = senderData . party ;
117- const receiverData = getField ( transferRecord , 'receiver' ) ;
118- if ( ! receiverData || receiverData . oneofKind !== 'party' ) return ;
119- receiver = receiverData . party ;
120- const amountData = getField ( transferRecord , 'amount' ) ;
121- if ( ! amountData || amountData . oneofKind !== 'numeric' ) return ;
122- amount = amountData . numeric ;
105+ if ( template ?. entityName === 'AmuletTransferInstruction' ) {
106+ const transferField = fields . find ( ( f ) => f . label === 'transfer' ) ;
107+ const transferSum = transferField ?. value ?. sum ;
108+ if ( ! transferSum || transferSum . oneofKind !== 'record' ) return ;
109+ const transferRecord = transferSum . record ?. fields ;
110+ if ( ! transferRecord ) return ;
111+ const senderData = getField ( transferRecord , 'sender' ) ;
112+ if ( senderData ?. oneofKind === 'party' ) sender = senderData . party ?? '' ;
113+
114+ const receiverData = getField ( transferRecord , 'receiver' ) ;
115+ if ( receiverData ?. oneofKind === 'party' ) receiver = receiverData . party ?? '' ;
116+
117+ const amountData = getField ( transferRecord , 'amount' ) ;
118+ if ( amountData ?. oneofKind === 'numeric' ) amount = amountData . numeric ?? '' ;
119+ } else if ( template ?. entityName === 'Amulet' ) {
120+ const dsoData = getField ( fields , 'dso' ) ;
121+ if ( dsoData ?. oneofKind === 'party' ) sender = dsoData . party ?? '' ;
122+ const ownerData = getField ( fields , 'owner' ) ;
123+ if ( ownerData ?. oneofKind === 'party' ) receiver = ownerData . party ?? '' ;
124+ const amountField = getField ( fields , 'amount' ) ;
125+ if ( ! amountField || amountField . oneofKind !== 'record' ) return ;
126+
127+ const amountRecord = amountField . record ?. fields ;
128+ if ( ! amountRecord ) return ;
129+ const initialAmountData = getField ( amountRecord , 'initialAmount' ) ;
130+ if ( initialAmountData ?. oneofKind === 'numeric' ) amount = initialAmountData . numeric ?? '' ;
131+ } else if ( template ?. entityName === 'TransferPreapprovalProposal' ) {
132+ const receiverData = getField ( fields , 'receiver' ) ;
133+ if ( receiverData ?. oneofKind === 'party' ) receiver = receiverData . party ?? '' ;
134+ const providerData = getField ( fields , 'provider' ) ;
135+ if ( providerData ?. oneofKind === 'party' ) sender = providerData . party ?? '' ;
136+ amount = '0' ;
137+ }
123138 } ) ;
124139 if ( ! sender || ! receiver || ! amount ) {
125140 const missingFields : string [ ] = [ ] ;
0 commit comments