{"version":3,"file":"exchangeOrderBuilderV1.cjs","names":["contractAddress: string","chainId: number","signer: ClobSigner","generateOrderSalt","getSignerAddress","SignatureTypeV1","takerAddress: string","feeRateBpsResolved: string","nonceResolved: string","EIP712_DOMAIN","CTF_EXCHANGE_V1_ORDER_STRUCT","CTF_EXCHANGE_V1_DOMAIN_NAME","CTF_EXCHANGE_V1_DOMAIN_VERSION","signTypedDataWithSigner"],"sources":["../../src/order-utils/exchangeOrderBuilderV1.ts"],"sourcesContent":["import { hashTypedData } from \"viem\";\nimport { type ClobSigner, getSignerAddress, signTypedDataWithSigner } from \"../signing/signer.js\";\nimport {\n\tCTF_EXCHANGE_V1_DOMAIN_NAME,\n\tCTF_EXCHANGE_V1_DOMAIN_VERSION,\n\tCTF_EXCHANGE_V1_ORDER_STRUCT,\n} from \"./model/ctfExchangeV1TypedData.js\";\nimport { EIP712_DOMAIN, type EIP712TypedData } from \"./model/eip712.js\";\nimport type { OrderHash, OrderSignature } from \"./model/order.js\";\nimport type { OrderDataV1, OrderV1, SignedOrderV1 } from \"./model/orderDataV1.js\";\nimport { SignatureTypeV1 } from \"./model/signatureTypeV1.js\";\nimport { generateOrderSalt } from \"./utils.js\";\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\n\nexport class ExchangeOrderBuilderV1 {\n\tconstructor(\n\t\tprivate readonly contractAddress: string,\n\t\tprivate readonly chainId: number,\n\t\tprivate readonly signer: ClobSigner,\n\t\tprivate readonly generateSalt = generateOrderSalt,\n\t) {}\n\n\t/**\n\t * build an order object including the signature.\n\t * @param orderData\n\t * @returns a SignedOrder object (order + signature)\n\t */\n\tasync buildSignedOrder(orderData: OrderDataV1): Promise<SignedOrderV1> {\n\t\tconst order = await this.buildOrder(orderData);\n\t\tconst orderTypedData = this.buildOrderTypedData(order);\n\t\tconst orderSignature = await this.buildOrderSignature(orderTypedData);\n\t\treturn {\n\t\t\t...order,\n\t\t\tsignature: orderSignature,\n\t\t} as SignedOrderV1;\n\t}\n\n\t/**\n\t * Creates an Order object from order data.\n\t * @param OrderData\n\t * @returns a Order object (not signed)\n\t */\n\tasync buildOrder({\n\t\tmaker,\n\t\ttaker,\n\t\ttokenId,\n\t\tmakerAmount,\n\t\ttakerAmount,\n\t\tside,\n\t\tfeeRateBps,\n\t\tnonce,\n\t\tsigner,\n\t\texpiration,\n\t\tsignatureType,\n\t}: OrderDataV1): Promise<OrderV1> {\n\t\tif (!signer) {\n\t\t\tsigner = maker;\n\t\t}\n\n\t\tconst signerAddress = await getSignerAddress(this.signer);\n\t\tif (signer !== signerAddress) {\n\t\t\tthrow new Error(\"signer does not match\");\n\t\t}\n\n\t\tif (!expiration) {\n\t\t\texpiration = \"0\";\n\t\t}\n\n\t\tif (!signatureType) {\n\t\t\t// Default to EOA 712 sig type\n\t\t\tsignatureType = SignatureTypeV1.EOA;\n\t\t}\n\n\t\tlet takerAddress: string;\n\t\tif (typeof taker !== \"undefined\" && taker) {\n\t\t\ttakerAddress = taker;\n\t\t} else {\n\t\t\ttakerAddress = ZERO_ADDRESS;\n\t\t}\n\n\t\tlet feeRateBpsResolved: string;\n\t\tif (typeof feeRateBps !== \"undefined\" && feeRateBps) {\n\t\t\tfeeRateBpsResolved = feeRateBps.toString();\n\t\t} else {\n\t\t\tfeeRateBpsResolved = \"0\";\n\t\t}\n\n\t\tlet nonceResolved: string;\n\t\tif (typeof nonce !== \"undefined\" && nonce) {\n\t\t\tnonceResolved = nonce.toString();\n\t\t} else {\n\t\t\tnonceResolved = \"0\";\n\t\t}\n\n\t\treturn {\n\t\t\tsalt: this.generateSalt(),\n\t\t\tmaker,\n\t\t\tsigner,\n\t\t\ttaker: takerAddress,\n\t\t\ttokenId,\n\t\t\tmakerAmount,\n\t\t\ttakerAmount,\n\t\t\texpiration,\n\t\t\tnonce: nonceResolved,\n\t\t\tfeeRateBps: feeRateBpsResolved,\n\t\t\tside,\n\t\t\tsignatureType,\n\t\t};\n\t}\n\n\t/**\n\t * Parses an Order object to EIP712 typed data\n\t * @param order\n\t * @returns a EIP712TypedData object\n\t */\n\tbuildOrderTypedData(order: OrderV1): EIP712TypedData {\n\t\treturn {\n\t\t\tprimaryType: \"Order\",\n\t\t\ttypes: {\n\t\t\t\tEIP712Domain: EIP712_DOMAIN,\n\t\t\t\tOrder: CTF_EXCHANGE_V1_ORDER_STRUCT,\n\t\t\t},\n\t\t\tdomain: {\n\t\t\t\tname: CTF_EXCHANGE_V1_DOMAIN_NAME,\n\t\t\t\tversion: CTF_EXCHANGE_V1_DOMAIN_VERSION,\n\t\t\t\tchainId: this.chainId,\n\t\t\t\tverifyingContract: this.contractAddress,\n\t\t\t},\n\t\t\tmessage: {\n\t\t\t\tsalt: order.salt,\n\t\t\t\tmaker: order.maker,\n\t\t\t\tsigner: order.signer,\n\t\t\t\ttaker: order.taker,\n\t\t\t\ttokenId: order.tokenId,\n\t\t\t\tmakerAmount: order.makerAmount,\n\t\t\t\ttakerAmount: order.takerAmount,\n\t\t\t\texpiration: order.expiration,\n\t\t\t\tnonce: order.nonce,\n\t\t\t\tfeeRateBps: order.feeRateBps,\n\t\t\t\tside: order.side === \"BUY\" ? 0 : 1,\n\t\t\t\tsignatureType: order.signatureType,\n\t\t\t},\n\t\t};\n\t}\n\n\t/**\n\t * Generates order's signature from a EIP712TypedData object + the signer address\n\t * @param typedData\n\t * @returns a OrderSignature that is an string\n\t */\n\tbuildOrderSignature(typedData: EIP712TypedData): Promise<OrderSignature> {\n\t\tdelete typedData.types.EIP712Domain;\n\t\treturn signTypedDataWithSigner({\n\t\t\tsigner: this.signer,\n\t\t\tdomain: typedData.domain,\n\t\t\ttypes: typedData.types,\n\t\t\tvalue: typedData.message,\n\t\t\tprimaryType: typedData.primaryType,\n\t\t});\n\t}\n\n\t/**\n\t * Generates the hash of the order from a EIP712TypedData object.\n\t * @param orderTypedData\n\t * @returns a OrderHash that is an string\n\t */\n\tbuildOrderHash(orderTypedData: EIP712TypedData): OrderHash {\n\t\tconst digest = hashTypedData(orderTypedData);\n\t\treturn digest;\n\t}\n}\n"],"mappings":";;;;;;;;;AAaA,MAAM,eAAe;AAErB,IAAa,yBAAb,MAAoC;CACnC,YACC,AAAiBA,iBACjB,AAAiBC,SACjB,AAAiBC,QACjB,AAAiB,eAAeC,iCAC/B;EAJgB;EACA;EACA;EACA;;;;;;;CAQlB,MAAM,iBAAiB,WAAgD;EACtE,MAAM,QAAQ,MAAM,KAAK,WAAW,UAAU;EAC9C,MAAM,iBAAiB,KAAK,oBAAoB,MAAM;EACtD,MAAM,iBAAiB,MAAM,KAAK,oBAAoB,eAAe;AACrE,SAAO;GACN,GAAG;GACH,WAAW;GACX;;;;;;;CAQF,MAAM,WAAW,EAChB,OACA,OACA,SACA,aACA,aACA,MACA,YACA,OACA,QACA,YACA,iBACiC;AACjC,MAAI,CAAC,OACJ,UAAS;EAGV,MAAM,gBAAgB,MAAMC,gCAAiB,KAAK,OAAO;AACzD,MAAI,WAAW,cACd,OAAM,IAAI,MAAM,wBAAwB;AAGzC,MAAI,CAAC,WACJ,cAAa;AAGd,MAAI,CAAC,cAEJ,iBAAgBC,wCAAgB;EAGjC,IAAIC;AACJ,MAAI,OAAO,UAAU,eAAe,MACnC,gBAAe;MAEf,gBAAe;EAGhB,IAAIC;AACJ,MAAI,OAAO,eAAe,eAAe,WACxC,sBAAqB,WAAW,UAAU;MAE1C,sBAAqB;EAGtB,IAAIC;AACJ,MAAI,OAAO,UAAU,eAAe,MACnC,iBAAgB,MAAM,UAAU;MAEhC,iBAAgB;AAGjB,SAAO;GACN,MAAM,KAAK,cAAc;GACzB;GACA;GACA,OAAO;GACP;GACA;GACA;GACA;GACA,OAAO;GACP,YAAY;GACZ;GACA;GACA;;;;;;;CAQF,oBAAoB,OAAiC;AACpD,SAAO;GACN,aAAa;GACb,OAAO;IACN,cAAcC;IACd,OAAOC;IACP;GACD,QAAQ;IACP,MAAMC;IACN,SAASC;IACT,SAAS,KAAK;IACd,mBAAmB,KAAK;IACxB;GACD,SAAS;IACR,MAAM,MAAM;IACZ,OAAO,MAAM;IACb,QAAQ,MAAM;IACd,OAAO,MAAM;IACb,SAAS,MAAM;IACf,aAAa,MAAM;IACnB,aAAa,MAAM;IACnB,YAAY,MAAM;IAClB,OAAO,MAAM;IACb,YAAY,MAAM;IAClB,MAAM,MAAM,SAAS,QAAQ,IAAI;IACjC,eAAe,MAAM;IACrB;GACD;;;;;;;CAQF,oBAAoB,WAAqD;AACxE,SAAO,UAAU,MAAM;AACvB,SAAOC,uCAAwB;GAC9B,QAAQ,KAAK;GACb,QAAQ,UAAU;GAClB,OAAO,UAAU;GACjB,OAAO,UAAU;GACjB,aAAa,UAAU;GACvB,CAAC;;;;;;;CAQH,eAAe,gBAA4C;AAE1D,iCAD6B,eAAe"}