@rarimo/swap
Version:
Internal tools that other Rarimo packages use to swap tokens.
148 lines (147 loc) • 5.42 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
Object.defineProperty(exports, "createEVMSwapper", {
enumerable: true,
get: function() {
return createEVMSwapper;
}
});
const _reactivity = require(/*#__PURE__*/ "@distributedlab/reactivity");
const _bridge = require("@rarimo/bridge");
const _executedata = require("./execute-data/index");
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
try {
var info = gen[key](arg);
var value = info.value;
} catch (error) {
reject(error);
return;
}
if (info.done) {
resolve(value);
} else {
Promise.resolve(value).then(_next, _throw);
}
}
function _async_to_generator(fn) {
return function() {
var self = this, args = arguments;
return new Promise(function(resolve, reject) {
var gen = fn.apply(self, args);
function _next(value) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
}
function _throw(err) {
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
}
_next(undefined);
});
};
}
function _define_property(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}
return obj;
}
function _object_spread(target) {
for(var i = 1; i < arguments.length; i++){
var source = arguments[i] != null ? arguments[i] : {};
var ownKeys = Object.keys(source);
if (typeof Object.getOwnPropertySymbols === "function") {
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
}));
}
ownKeys.forEach(function(key) {
_define_property(target, key, source[key]);
});
}
return target;
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) {
symbols = symbols.filter(function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
}
keys.push.apply(keys, symbols);
}
return keys;
}
function _object_spread_props(target, source) {
source = source != null ? source : {};
if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
/**
* @description Instead of using this function directly, run token swaps as transactions with the [@rarimo/nft-checkout]() package.
* For more information about swaps, see [Swapping tokens](https://docs.rarimo.com/overview/swapping-tokens) in the Rarimo documentation.
*/ const createEVMSwapper = (provider)=>{
const bridger = (0, _bridge.createBridger)(_bridge.createEVMBridger, provider);
const isInitialized = (0, _reactivity.ref)(false);
const init = function() {
var _ref = _async_to_generator(function*() {
if (isInitialized.value) return;
yield bridger.init();
isInitialized.value = true;
});
return function init() {
return _ref.apply(this, arguments);
};
}();
const execute = function() {
var _ref = _async_to_generator(function*(args) {
var _args_swapOpts_find, _args_swapOpts_find_amountIn;
yield init();
yield approveMultipleIfNeeded(args);
return provider.signAndSendTx({
from: provider.address,
to: args.chainFrom.contractAddress,
data: (0, _executedata.getExecuteData)(_object_spread_props(_object_spread({}, args), {
receiver: args.receiver || provider.address
})),
value: (_args_swapOpts_find = args.swapOpts.find((i)=>i.from.isNative)) === null || _args_swapOpts_find === void 0 ? void 0 : (_args_swapOpts_find_amountIn = _args_swapOpts_find.amountIn) === null || _args_swapOpts_find_amountIn === void 0 ? void 0 : _args_swapOpts_find_amountIn.value
});
});
return function execute(args) {
return _ref.apply(this, arguments);
};
}();
const approveMultipleIfNeeded = function() {
var _ref = _async_to_generator(function*(executeArgs) {
for (const arg of executeArgs.swapOpts){
const { from , amountIn } = arg;
yield bridger.approveIfNeeded(from, from.chain.contractAddress, amountIn);
}
});
return function approveMultipleIfNeeded(executeArgs) {
return _ref.apply(this, arguments);
};
}();
return (0, _reactivity.toRaw)((0, _reactivity.extend)({
bridger,
isInitialized,
init,
execute
}, bridger));
};
//# sourceMappingURL=evm-swapper.js.map