@deliquifiedlabs/uniswapx-sdk
Version:
SDK for the UniswapX protocol
109 lines • 4.89 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.RelayOrderBuilder = void 0;
const tslib_1 = require("tslib");
const tiny_invariant_1 = tslib_1.__importDefault(require("tiny-invariant"));
const constants_1 = require("../constants");
const errors_1 = require("../errors");
const order_1 = require("../order");
/**
* Helper builder for generating relay orders
*/
class RelayOrderBuilder {
static fromOrder(order) {
// note chainId not used if passing in true reactor address
const builder = new RelayOrderBuilder(order.chainId, order.info.reactor)
.deadline(order.info.deadline)
.swapper(order.info.swapper)
.nonce(order.info.nonce)
.universalRouterCalldata(order.info.universalRouterCalldata)
.input(order.info.input)
.fee(order.info.fee)
.feeStartTime(order.info.fee.startTime)
.feeEndTime(order.info.fee.endTime);
return builder;
}
constructor(chainId, reactorAddress, permit2Address) {
this.chainId = chainId;
this.permit2Address = permit2Address;
this.info = {};
const mappedReactorAddress = constants_1.REACTOR_ADDRESS_MAPPING[chainId]
? constants_1.REACTOR_ADDRESS_MAPPING[chainId][constants_1.OrderType.Relay]
: undefined;
if (reactorAddress) {
this.reactor(reactorAddress);
}
else if (mappedReactorAddress) {
this.reactor(mappedReactorAddress);
}
else {
throw new errors_1.MissingConfiguration("reactor", chainId.toString());
}
}
reactor(reactor) {
this.info.reactor = reactor;
return this;
}
deadline(deadline) {
this.info.deadline = deadline;
return this;
}
nonce(nonce) {
this.info.nonce = nonce;
return this;
}
swapper(swapper) {
this.info.swapper = swapper;
return this;
}
// TODO: perform some calldata validation here
universalRouterCalldata(universalRouterCalldata) {
this.info.universalRouterCalldata = universalRouterCalldata;
return this;
}
feeStartTime(feeStartTime) {
(0, tiny_invariant_1.default)(this.info.fee !== undefined, "fee not set");
this.info.fee = Object.assign(Object.assign({}, this.info.fee), { startTime: feeStartTime });
return this;
}
feeEndTime(feeEndTime) {
(0, tiny_invariant_1.default)(this.info.fee !== undefined, "fee not set");
if (this.info.deadline === undefined) {
this.info.deadline = feeEndTime;
}
this.info.fee = Object.assign(Object.assign({}, this.info.fee), { endTime: feeEndTime });
return this;
}
input(input) {
this.info.input = input;
return this;
}
fee(fee) {
(0, tiny_invariant_1.default)(fee.startAmount.lte(fee.endAmount), `startAmount must be less than or equal than endAmount: ${fee.startAmount.toString()}`);
this.info.fee = fee;
return this;
}
build() {
(0, tiny_invariant_1.default)(this.info.reactor !== undefined, "reactor not set");
(0, tiny_invariant_1.default)(this.info.nonce !== undefined, "nonce not set");
(0, tiny_invariant_1.default)(this.info.deadline !== undefined, "deadline not set");
(0, tiny_invariant_1.default)(this.info.deadline > Date.now() / 1000, `Deadline must be in the future: ${this.info.deadline}`);
(0, tiny_invariant_1.default)(this.info.swapper !== undefined, "swapper not set");
(0, tiny_invariant_1.default)(this.info.universalRouterCalldata !== undefined, "universalRouterCalldata not set");
(0, tiny_invariant_1.default)(this.info.input !== undefined, "input not set");
(0, tiny_invariant_1.default)(this.info.fee !== undefined, "fee not set");
(0, tiny_invariant_1.default)(!this.info.deadline || this.info.fee.startTime <= this.info.deadline, `feeStartTime must be before or same as deadline: ${this.info.fee.startTime}`);
(0, tiny_invariant_1.default)(!this.info.deadline || this.info.fee.endTime <= this.info.deadline, `feeEndTime must be before or same as deadline: ${this.info.fee.endTime}`);
return new order_1.RelayOrder(Object.assign(this.info, {
reactor: this.info.reactor,
swapper: this.info.swapper,
nonce: this.info.nonce,
deadline: this.info.deadline,
input: this.info.input,
fee: this.info.fee,
universalRouterCalldata: this.info.universalRouterCalldata,
}), this.chainId, this.permit2Address);
}
}
exports.RelayOrderBuilder = RelayOrderBuilder;
//# sourceMappingURL=RelayOrderBuilder.js.map