@@ -78,6 +78,26 @@ public record LeaseCreatedEvent(
7878 int MaxHours
7979 ) ;
8080
81+ /// <summary>Parsed sentinel.node.v3.EventRefund.</summary>
82+ public record SessionRefundEvent ( long SessionId , string AccAddress , string Amount ) ;
83+
84+ /// <summary>Parsed sentinel.node.v3.EventUpdateStatus.</summary>
85+ public record NodeStatusEvent ( string Address , int Status ) ;
86+
87+ /// <summary>Parsed sentinel.session.v3.EventUpdateDetails (bandwidth report).</summary>
88+ public record SessionDetailsEvent ( long SessionId , string AccAddress , string NodeAddress ,
89+ string DownloadBytes , string UploadBytes , string Duration ) ;
90+
91+ /// <summary>Parsed sentinel.subscription.v3.EventPay.</summary>
92+ public record SubscriptionPayEvent ( long SubscriptionId , long PlanId , string AccAddress ,
93+ string ProvAddress , string Payment , string StakingReward ) ;
94+
95+ /// <summary>Parsed sentinel.subscription.v3.EventEnd.</summary>
96+ public record SubscriptionEndEvent ( long SubscriptionId , long PlanId , string AccAddress ) ;
97+
98+ /// <summary>Parsed sentinel.lease.v1.EventEnd.</summary>
99+ public record LeaseEndEvent ( long LeaseId , string NodeAddress , string ProvAddress ) ;
100+
81101 // ─── Parsing Methods ───────────────────────────────────────────
82102
83103 /// <summary>
@@ -198,6 +218,83 @@ int MaxHours
198218 ) ;
199219 }
200220
221+ /// <summary>Parse a SessionRefundEvent from TX result events.</summary>
222+ public static SessionRefundEvent ? ParseSessionRefund ( string ? txEventsJson )
223+ {
224+ var attrs = FindEvent ( txEventsJson , EventTypes . NodeRefund ) ;
225+ if ( attrs is null ) return null ;
226+ return new SessionRefundEvent (
227+ SessionId : ParseLong ( attrs . GetValueOrDefault ( "session_id" ) ) ,
228+ AccAddress : attrs . GetValueOrDefault ( "acc_address" ) ?? "" ,
229+ Amount : attrs . GetValueOrDefault ( "amount" ) ?? attrs . GetValueOrDefault ( "value" ) ?? "0"
230+ ) ;
231+ }
232+
233+ /// <summary>Parse a NodeStatusEvent from TX result events.</summary>
234+ public static NodeStatusEvent ? ParseNodeStatus ( string ? txEventsJson )
235+ {
236+ var attrs = FindEvent ( txEventsJson , EventTypes . NodeUpdateStatus ) ;
237+ if ( attrs is null ) return null ;
238+ return new NodeStatusEvent (
239+ Address : attrs . GetValueOrDefault ( "address" ) ?? "" ,
240+ Status : int . TryParse ( attrs . GetValueOrDefault ( "status" ) , out var s ) ? s : 0
241+ ) ;
242+ }
243+
244+ /// <summary>Parse a SessionDetailsEvent (bandwidth update) from TX result events.</summary>
245+ public static SessionDetailsEvent ? ParseSessionDetails ( string ? txEventsJson )
246+ {
247+ var attrs = FindEvent ( txEventsJson , EventTypes . SessionUpdateDetails ) ;
248+ if ( attrs is null ) return null ;
249+ return new SessionDetailsEvent (
250+ SessionId : ParseLong ( attrs . GetValueOrDefault ( "session_id" ) ?? attrs . GetValueOrDefault ( "id" ) ) ,
251+ AccAddress : attrs . GetValueOrDefault ( "acc_address" ) ?? "" ,
252+ NodeAddress : attrs . GetValueOrDefault ( "node_address" ) ?? "" ,
253+ DownloadBytes : attrs . GetValueOrDefault ( "download_bytes" ) ?? "0" ,
254+ UploadBytes : attrs . GetValueOrDefault ( "upload_bytes" ) ?? "0" ,
255+ Duration : attrs . GetValueOrDefault ( "duration" ) ?? "0"
256+ ) ;
257+ }
258+
259+ /// <summary>Parse a SubscriptionPayEvent from TX result events.</summary>
260+ public static SubscriptionPayEvent ? ParseSubscriptionPay ( string ? txEventsJson )
261+ {
262+ var attrs = FindEvent ( txEventsJson , EventTypes . SubscriptionPay ) ;
263+ if ( attrs is null ) return null ;
264+ return new SubscriptionPayEvent (
265+ SubscriptionId : ParseLong ( attrs . GetValueOrDefault ( "subscription_id" ) ?? attrs . GetValueOrDefault ( "id" ) ) ,
266+ PlanId : ParseLong ( attrs . GetValueOrDefault ( "plan_id" ) ) ,
267+ AccAddress : attrs . GetValueOrDefault ( "acc_address" ) ?? "" ,
268+ ProvAddress : attrs . GetValueOrDefault ( "prov_address" ) ?? "" ,
269+ Payment : attrs . GetValueOrDefault ( "payment" ) ?? "0" ,
270+ StakingReward : attrs . GetValueOrDefault ( "staking_reward" ) ?? "0"
271+ ) ;
272+ }
273+
274+ /// <summary>Parse a SubscriptionEndEvent from TX result events.</summary>
275+ public static SubscriptionEndEvent ? ParseSubscriptionEnd ( string ? txEventsJson )
276+ {
277+ var attrs = FindEvent ( txEventsJson , EventTypes . SubscriptionEnd ) ;
278+ if ( attrs is null ) return null ;
279+ return new SubscriptionEndEvent (
280+ SubscriptionId : ParseLong ( attrs . GetValueOrDefault ( "subscription_id" ) ?? attrs . GetValueOrDefault ( "id" ) ) ,
281+ PlanId : ParseLong ( attrs . GetValueOrDefault ( "plan_id" ) ) ,
282+ AccAddress : attrs . GetValueOrDefault ( "acc_address" ) ?? ""
283+ ) ;
284+ }
285+
286+ /// <summary>Parse a LeaseEndEvent from TX result events.</summary>
287+ public static LeaseEndEvent ? ParseLeaseEnd ( string ? txEventsJson )
288+ {
289+ var attrs = FindEvent ( txEventsJson , EventTypes . LeaseEnd ) ;
290+ if ( attrs is null ) return null ;
291+ return new LeaseEndEvent (
292+ LeaseId : ParseLong ( attrs . GetValueOrDefault ( "lease_id" ) ?? attrs . GetValueOrDefault ( "id" ) ) ,
293+ NodeAddress : attrs . GetValueOrDefault ( "node_address" ) ?? "" ,
294+ ProvAddress : attrs . GetValueOrDefault ( "prov_address" ) ?? ""
295+ ) ;
296+ }
297+
201298 // ─── Helpers ───────────────────────────────────────────────────
202299
203300 private static long ? TryExtractSessionIdFromEvent ( JsonElement ev )
0 commit comments