88} from '0x-v2-order-utils'
99import * as ethUtils from 'ethereumjs-util'
1010import { utils , Wallet } from 'ethers'
11+ import axios from 'axios'
1112import { BigNumber , orderBNToString } from '../utils'
1213
1314const EIP712_ORDER_SCHEMA = {
@@ -113,8 +114,29 @@ async function signByMMPSigner(
113114 return signatureUtils . convertToSignatureWithType ( walletSign , SignatureType . Wallet )
114115}
115116
117+ export const forwardUnsignedOrder = async ( signingUrl : string , orderInfo : any ) : Promise < string > => {
118+ const resp = await axios . post ( signingUrl , orderInfo )
119+ const body = resp . data
120+ if ( body . signature ) {
121+ return body . signature
122+ } else {
123+ throw new Error ( 'Invalid signature' )
124+ }
125+ }
126+
116127// Move fee factor to salt field
117- export const buildSignedOrder = async ( signer : Wallet , order , userAddr , pmm ) : Promise < any > => {
128+ export const buildSignedOrder = async (
129+ signer : Wallet ,
130+ order ,
131+ userAddr ,
132+ chainId ,
133+ pmm ,
134+ options ?: {
135+ signingUrl ?: string
136+ salt ?: string
137+ }
138+ ) : Promise < any > => {
139+ const signingUrl = options ? options . signingUrl : undefined
118140 const feeFactor = order . feeFactor
119141 order . takerAddress = pmm . toLowerCase ( )
120142 order . senderAddress = pmm . toLowerCase ( )
@@ -130,10 +152,24 @@ export const buildSignedOrder = async (signer: Wallet, order, userAddr, pmm): Pr
130152 console . log ( `orderHash: ${ orderHash } ` )
131153 const orderSignDigest = orderHashUtils . getOrderHashHex ( o )
132154 console . log ( `orderSignDigest: ${ orderSignDigest } ` )
133- const makerWalletSignature =
134- signer . address . toLowerCase ( ) == o . makerAddress . toLowerCase ( )
135- ? await signByEOA ( orderSignDigest , signer )
136- : await signByMMPSigner ( orderSignDigest , userAddr , feeFactor , signer )
155+ let makerWalletSignature
156+ if ( ! signingUrl ) {
157+ makerWalletSignature =
158+ signer . address . toLowerCase ( ) == o . makerAddress . toLowerCase ( )
159+ ? await signByEOA ( orderSignDigest , signer )
160+ : await signByMMPSigner ( orderSignDigest , userAddr , feeFactor , signer )
161+ } else {
162+ makerWalletSignature = await forwardUnsignedOrder ( signingUrl , {
163+ pmmOrder : o ,
164+ feeFactor : feeFactor ,
165+ orderHash : orderHash ,
166+ orderSignDigest : orderSignDigest ,
167+ userAddr : userAddr ,
168+ signer : signer . address ,
169+ chainId : chainId ,
170+ pmmAddr : pmm ,
171+ } )
172+ }
137173
138174 const signedOrder = {
139175 ...o ,
0 commit comments