@@ -41,14 +41,35 @@ export type SwiftOrderSubscriberConfig = {
4141 keypair : Keypair ;
4242} ;
4343
44+ /**
45+ * Swift order message received from WebSocket
46+ */
47+ export interface SwiftOrderMessage {
48+ /** Hex string of the order message */
49+ order_message : string ;
50+ /** Base58 string of taker authority */
51+ taker_authority : string ;
52+ /** Base58 string of signing authority */
53+ signing_authority : string ;
54+ /** Base64 string containing the order signature */
55+ order_signature : string ;
56+ /** Swift order UUID */
57+ uuid : string ;
58+ /** Whether the order auction params are likely to be sanitized on submission to program */
59+ will_sanitize ?: boolean ;
60+ /** Base64 string of a prerequisite deposit tx. The swift order_message should be bundled
61+ * after the deposit when present */
62+ depositTx ?: string ;
63+ }
64+
4465export class SwiftOrderSubscriber {
4566 private heartbeatTimeout : ReturnType < typeof setTimeout > | null = null ;
4667 private readonly heartbeatIntervalMs = 60000 ;
4768 private ws : WebSocket | null = null ;
4869 private driftClient : DriftClient ;
4970 public userAccountGetter ?: AccountGetter ; // In practice, this for now is just an OrderSubscriber or a UserMap
5071 public onOrder : (
51- orderMessageRaw : any ,
72+ orderMessageRaw : SwiftOrderMessage ,
5273 signedMessage :
5374 | SignedMsgOrderParamsMessage
5475 | SignedMsgOrderParamsDelegateMessage ,
@@ -120,13 +141,14 @@ export class SwiftOrderSubscriber {
120141
121142 async subscribe (
122143 onOrder : (
123- orderMessageRaw : any ,
144+ orderMessageRaw : SwiftOrderMessage ,
124145 signedMessage :
125146 | SignedMsgOrderParamsMessage
126147 | SignedMsgOrderParamsDelegateMessage ,
127148 isDelegateSigner ?: boolean
128149 ) => Promise < void > ,
129- acceptSanitized = false
150+ acceptSanitized = false ,
151+ acceptDepositTrade = false
130152 ) : Promise < void > {
131153 this . onOrder = onOrder ;
132154
@@ -150,13 +172,20 @@ export class SwiftOrderSubscriber {
150172 }
151173
152174 if ( message [ 'order' ] ) {
153- const order = message [ 'order' ] ;
175+ const order = message [ 'order' ] as SwiftOrderMessage ;
154176 // ignore likely sanitized orders by default
155- if ( order [ ' will_sanitize' ] === true && ! acceptSanitized ) {
177+ if ( order . will_sanitize === true && ! acceptSanitized ) {
156178 return ;
157179 }
180+ // order has a prerequisite deposit tx attached
181+ if ( message [ 'deposit' ] ) {
182+ order . depositTx = message [ 'deposit' ] ;
183+ if ( ! acceptDepositTrade ) {
184+ return ;
185+ }
186+ }
158187 const signedMsgOrderParamsBuf = Buffer . from (
159- order [ ' order_message' ] ,
188+ order . order_message ,
160189 'hex'
161190 ) ;
162191 const isDelegateSigner = signedMsgOrderParamsBuf
@@ -224,7 +253,7 @@ export class SwiftOrderSubscriber {
224253 }
225254
226255 async getPlaceAndMakeSignedMsgOrderIxs (
227- orderMessageRaw : any ,
256+ orderMessageRaw : SwiftOrderMessage ,
228257 signedMsgOrderParamsMessage :
229258 | SignedMsgOrderParamsMessage
230259 | SignedMsgOrderParamsDelegateMessage ,
@@ -235,7 +264,7 @@ export class SwiftOrderSubscriber {
235264 }
236265
237266 const signedMsgOrderParamsBuf = Buffer . from (
238- orderMessageRaw [ ' order_message' ] ,
267+ orderMessageRaw . order_message ,
239268 'hex'
240269 ) ;
241270
@@ -256,10 +285,8 @@ export class SwiftOrderSubscriber {
256285 isDelegateSigner
257286 ) ;
258287
259- const takerAuthority = new PublicKey ( orderMessageRaw [ 'taker_authority' ] ) ;
260- const signingAuthority = new PublicKey (
261- orderMessageRaw [ 'signing_authority' ]
262- ) ;
288+ const takerAuthority = new PublicKey ( orderMessageRaw . taker_authority ) ;
289+ const signingAuthority = new PublicKey ( orderMessageRaw . signing_authority ) ;
263290 const takerUserPubkey = isDelegateSigner
264291 ? ( signedMessage as SignedMsgOrderParamsDelegateMessage ) . takerPubkey
265292 : await getUserAccountPublicKey (
@@ -273,9 +300,9 @@ export class SwiftOrderSubscriber {
273300 const ixs = await this . driftClient . getPlaceAndMakeSignedMsgPerpOrderIxs (
274301 {
275302 orderParams : signedMsgOrderParamsBuf ,
276- signature : Buffer . from ( orderMessageRaw [ ' order_signature' ] , 'base64' ) ,
303+ signature : Buffer . from ( orderMessageRaw . order_signature , 'base64' ) ,
277304 } ,
278- decodeUTF8 ( orderMessageRaw [ ' uuid' ] ) ,
305+ decodeUTF8 ( orderMessageRaw . uuid ) ,
279306 {
280307 taker : takerUserPubkey ,
281308 takerUserAccount,
0 commit comments