UNPKG

@renproject/rentx

Version:

XState Statemachines for tracking RenVM transactions reactively

79 lines (78 loc) 2.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.burnMachine = void 0; const xstate_1 = require("xstate"); const getFirstTx = (tx) => Object.values(tx.transactions)[0]; exports.burnMachine = xstate_1.Machine({ id: "RenVMBurnMachine", initial: "restoring", states: { restoring: { entry: xstate_1.send("RESTORE"), on: { RESTORE: [ { target: "srcConfirmed", cond: "isSrcConfirmed" }, { target: "srcSettling", cond: "isSrcSettling" }, { target: "created" }, ], }, }, created: { invoke: { src: "burnCreator", onDone: { target: "srcSettling", actions: xstate_1.assign({ tx: (ctx, evt) => (Object.assign(Object.assign({}, ctx.tx), evt.data)), }), }, onError: { target: "createError", actions: xstate_1.assign({ tx: (ctx, evt) => (Object.assign(Object.assign({}, ctx.tx), { error: evt.data })), }), }, }, }, createError: { on: { RETRY: "created", }, }, srcSettling: { invoke: { src: "burnListener", }, on: { CONFIRMATION: { // update src confs actions: xstate_1.assign({ tx: (ctx, evt) => evt.data ? Object.assign(Object.assign({}, ctx.tx), { transactions: { [evt.data.sourceTxHash]: evt.data, } }) : ctx.tx, }), }, CONFIRMED: { target: "srcConfirmed", }, }, }, srcConfirmed: { on: { RELEASED: "destInitiated", }, }, destInitiated: {}, }, }, { guards: { isSrcSettling: (ctx, _evt) => { var _a; return ((_a = getFirstTx(ctx.tx)) === null || _a === void 0 ? void 0 : _a.sourceTxHash) ? true : false; }, isSrcConfirmed: (ctx, _evt) => { var _a, _b; return ((_a = getFirstTx(ctx.tx)) === null || _a === void 0 ? void 0 : _a.sourceTxConfs) >= (((_b = getFirstTx(ctx.tx)) === null || _b === void 0 ? void 0 : _b.sourceTxConfTarget) || Number.POSITIVE_INFINITY); }, }, });