UNPKG

raiden-ts

Version:

Raiden Light Client Typescript/Javascript SDK

61 lines 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.transferProcessedSendEpic = exports.transferProcessedReceivedEpic = void 0; const operators_1 = require("rxjs/operators"); const actions_1 = require("../../messages/actions"); const types_1 = require("../../messages/types"); const utils_1 = require("../../messages/utils"); const actions_2 = require("../../utils/actions"); const types_2 = require("../../utils/types"); const actions_3 = require("../actions"); const state_1 = require("../state"); const utils_2 = require("../utils"); /** * Handles receiving a signed Processed for some sent LockedTransfer, Unlock or LockExpired * This will persist the Processed reply in transfer state and stop message retry * * @param action$ - Observable of messageReceived actions * @param state$ - Observable of RaidenStates * @returns Observable of transfer*Processed|transfer.success actions */ function transferProcessedReceivedEpic(action$, state$) { return action$.pipe((0, operators_1.filter)((0, utils_1.isMessageReceivedOfType)((0, types_2.Signed)(types_1.Processed))), (0, operators_1.withLatestFrom)(state$), (0, operators_1.mergeMap)(function* ([action, { transfers }]) { for (const transferState of Object.values(transfers)) { if (transferState.direction !== state_1.Direction.SENT || transferState.partner !== action.meta.address) continue; const meta = { secrethash: transferState.secrethash, direction: state_1.Direction.SENT }; if (action.payload.message.message_identifier.eq(transferState.transfer.message_identifier)) { yield (0, actions_3.transferProcessed)({ message: action.payload.message }, meta); } if (action.payload.message.message_identifier.eq(transferState.unlock?.message_identifier ?? -1)) { // Unlock's Processed also notifies whole transfer as success yield actions_3.transfer.success({ balanceProof: (0, utils_1.getBalanceProofFromEnvelopeMessage)(transferState.unlock) }, meta); yield (0, actions_3.transferUnlockProcessed)({ message: action.payload.message }, meta); } if (action.payload.message.message_identifier.eq(transferState.expired?.message_identifier ?? -1)) { yield (0, actions_3.transferExpireProcessed)({ message: action.payload.message }, meta); } } })); } exports.transferProcessedReceivedEpic = transferProcessedReceivedEpic; /** * Handles sending Processed for a received EnvelopeMessages * * @param action$ - Observable of transferProcessed actions * @param state$ - Observable of RaidenStates * @param deps - Epics dependencies * @param deps.db - Database instance * @returns Observable of messageSend.request actions */ function transferProcessedSendEpic(action$, state$, { db }) { return action$.pipe((0, operators_1.filter)((0, actions_2.isActionOf)([actions_3.transferProcessed, actions_3.transferUnlockProcessed, actions_3.transferExpireProcessed])), // transfer direction is RECEIVED, not message direction (which is outbound) (0, operators_1.filter)((action) => action.meta.direction === state_1.Direction.RECEIVED), (0, operators_1.withLatestFrom)(state$), (0, operators_1.mergeMap)(([action, state]) => (0, utils_2.getTransfer)(state, db, action.meta).then((transferState) => [action, transferState])), (0, operators_1.map)(([action, transferState]) => actions_1.messageSend.request(action.payload, { address: transferState.partner, msgId: action.payload.message.message_identifier.toString(), }))); } exports.transferProcessedSendEpic = transferProcessedSendEpic; //# sourceMappingURL=processed.js.map