UNPKG

raiden-ts

Version:

Raiden Light Client Typescript/Javascript SDK

30 lines 2.46 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transferAutoExpireEpic = void 0; const rxjs_1 = require("rxjs"); const operators_1 = require("rxjs/operators"); const error_1 = require("../../utils/error"); const rx_1 = require("../../utils/rx"); const actions_1 = require("../actions"); const state_1 = require("../state"); /** * Process newBlocks, emits transferExpire.request (request to compose&sign LockExpired for a * transfer) if pending transfer's lock expired and transfer didn't unlock (succeed) in time * Also, emits transfer.failure, to notify users that a transfer has failed (although it'll only be * considered as completed with fail once the transferExpireProcessed arrives). * * @param action$ - Observable of newBlock|transferExpire.success|transferExpire.failure actions * @param state$ - Observable of RaidenStates * @param deps - Epics dependencies * @param deps.config$ - Config observable * @returns Observable of transferExpire.request|transfer.failure actions */ function transferAutoExpireEpic({}, state$, { config$ }) { const transferIsGone$ = ({ key }) => state$.pipe((0, operators_1.filter)(({ transfers }) => !(key in transfers))); return state$.pipe((0, operators_1.pluck)('transfers'), (0, operators_1.mergeMap)((transfers) => Object.values(transfers)), (0, operators_1.filter)(({ direction }) => direction === state_1.Direction.SENT), (0, operators_1.groupBy)(({ _id }) => _id, { duration: transferIsGone$ }), (0, operators_1.mergeMap)((grouped$) => grouped$.pipe((0, operators_1.withLatestFrom)(config$), (0, operators_1.exhaustMap)(([{ expiration, transfer: locked }, { httpTimeout }]) => { const meta = { secrethash: locked.lock.secrethash, direction: state_1.Direction.SENT }; return (0, rxjs_1.timer)(new Date((expiration + 1) * 1e3)).pipe((0, operators_1.mergeMapTo)((0, rxjs_1.timer)(httpTimeout).pipe((0, operators_1.mapTo)(actions_1.transferExpire.request(undefined, meta)), (0, operators_1.startWith)(actions_1.transfer.failure(new error_1.RaidenError(error_1.ErrorCodes.XFER_EXPIRED, { expiration }), meta))))); }), (0, operators_1.takeUntil)(grouped$.pipe((0, operators_1.filter)((t) => !!(t.unlock || t.expired || t.secretRegistered || t.channelClosed)), (0, operators_1.mergeWith)(transferIsGone$(grouped$)))), (0, rx_1.completeWith)(state$)))); } exports.transferAutoExpireEpic = transferAutoExpireEpic; //# sourceMappingURL=expire.js.map