{"version":3,"file":"src_app_lnd_lnd_module_ts.0fea6d7c18422440.js","mappings":"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BACMjN,KAAK+N,SAAShN,MAAQf,KAAK+N,SAAShN,KAAKwD,OAAS,GACpDvE,KAAKkB,cAAcgM,aAAalN,KAAK+N,SAAShN,KAAM,gBAExD,CAEA8qB,oBAAoBZ,GAClB,OAAQA,EAAsB,KAAO1gB,WAAa,GACpD,CAEAtF,cACEjF,KAAK+B,OAAOmD,QAASC,IACnBA,EAAYX,KAAU,MACtBW,EAAYC,UAAQ,EAExB,CAAC3E,kDAlZUwpB,IAAyBvpB,iJAAzBupB,GAAyBtpB,6EAEzByM,KAAO,QACPC,KAAY,4GAPZ,CACT,CAAEC,QAASC,KAAkBC,YAAUC,MAAkB,gBAC1DC,y3HDtCH9N,iBAA6C,WAEzCA,iBACAA,iBAAuH,qBAAvHA,CAAuH,kBAElDA,2DAAyB,gDAA8B,GAAI0F,eAAa,GACvI1F,+BACFA,UAEFA,4BAA4B,aACyBA,yDAAuB,0BAAU0F,eAAa,EAA9C1F,CAAuB,0BAAkC0F,eAAa,GAAzH1F,cAINA,iBACEA,sCACAA,wBACEA,aACEA,yBACAA,yBAIFA,QACAA,aACEA,yBACAA,yBAIFA,QACAA,aACEA,yBACAA,yBAKFA,QACAA,aACEA,yBACAA,yBAKFA,QACAA,aACEA,yBACAA,yBAKFA,QACAA,aACEA,yBACAA,yBAKFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBAMFA,QACAA,aACEA,yBASAA,0BAaFA,QACAA,aACEA,yBAMFA,QA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jtB,cACEjF,KAAK+B,OAAOmD,QAASC,IACnBA,EAAYX,KAAU,MACtBW,EAAYC,UAAQ,EAExB,CAAC3E,kDAxRU8uB,IAA4B7uB,yEAA5B6uB,GAA4B5uB,+EAE5ByM,KAAO,inFD3BpBxN,iBAAoC,YACTA,2BAA0EA,QACnGA,2BACEA,qCACAA,iCAAoE,+BAApEA,CAAoE,qBAE/CA,SAA4CA,UAE/DA,kBACEA,sCACAA,sBACEA,YACEA,wBACAA,yBAKFA,QACAA,aACEA,wBACAA,yBAKFA,QACAA,aACEA,wBACAA,yBAKFA,QACAA,aACEA,wBACAA,yBACFA,QACAA,aACEA,wBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBAGAA,yBASFA,QACAA,aACEA,yBAKFA,QACAA,yBACAA,yBACAA,yBACFA,YAGJA,sCACAA,kCAAoE,gCAApEA,CAAoE,sBAE/CA,UAA6DA,UAEhFA,kBAA+E,iBAE3EA,aACEA,wBACAA,yBAKFA,QACAA,YACEA,wBACAA,yBAKFA,QACAA,aACEA,wBACAA,yBAKFA,QACAA,aACEA,wBACAA,yBAKFA,QACAA,aACEA,wBACAA,yBACFA,QACAA,aACEA,wBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,yBACAA,yBACFA,QACAA,aACEA,0BACAA,0BACFA,QACAA,cACEA,0BACAA,0BACFA,QACAA,cACEA,0BAGAA,0BAGFA,QACAA,cACEA,0BAKFA,QACAA,0BACAA,0BACAA,0BACFA,YAGJA,uCACAA,mCAAoE,iCAApEA,CAAoE,uBAE/CA,WAAkDA,UAErEA,mBAA+E,kBAE3EA,cACEA,yBACAA,0BAKFA,QACAA,a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","names":["i0","LNDRootComponent","constructor","router","this","events","subscribe","event","NavigationStart","loading","NavigationEnd","NavigationCancel","NavigationError","static","core","selectors","routeAnimation","CreateInvoiceComponent","dialogRef","data","store","decimalPipe","commonService","actions","faExclamationTriangle","PAGE_SIZE","TimeUnitEnum","TIME_UNITS","Subject","ngOnInit","pageSize","select","lndNodeSettings","pipe","takeUntil","unSubs","nodeSettings","selNode","lndNodeInformation","nodeInfo","information","filter","action","type","LNDActions","payload","invoiceError","message","status","APICallStatusEnum","close","onAddInvoice","form","expiryInSecs","expiry","selTimeUnit","convertTime","dispatch","saveNewInvoice","uiMessage","UI_MESSAGES","memo","value","invoiceValue","private","is_amp","isAmp","openModal","resetData","invoiceValueHint","onInvoiceValueChange","fiatConversion","convertCurrency","CurrencyUnitEnum","currencyUnits","length","next","symbol","transform","OTHER","CURRENCY_UNIT_FORMATS","unit","error","err","onTimeUnitChange","ngOnDestroy","forEach","completeSub","complete","MAT_DIALOG_DATA","ctx","LightningInvoicesComponent","logger","datePipe","camelCaseWithReplace","faEye","faEyeSlash","faHistory","faArrowsTurnToDots","faArrowsTurnRight","faBurst","faMoneyBill1","LND_PAGE_DEFS","tableId","recordsPerPage","sortBy","sortOrder","SortOrderEnum","MatTableDataSource","PAGE_SIZE_OPTIONS","ScreenSizeEnum","screenSize","getScreenSize","lndPageSettings","settings","errorMessage","apiCallStatus","tableSetting","pageSettings","find","page","pageId","PAGE_ID","tables","table","LND_DEFAULT_PAGE_SETTINGS","displayedColumns","JSON","parse","stringify","columnSelectionSM","columnSelection","unshift","push","colWidth","getContainerSize","width","info","invoices","invoicesSelector","totalInvoices","listInvoices","total_invoices","firstOffset","first_index_offset","lastOffset","last_index_offset","invoicesData","sort","paginator","loadInvoicesTable","resLookup","updateInvoicesData","ngAfterViewInit","newlyAddedInvoiceMemo","newlyAddedInvoiceValue","onInvoiceClick","selInvoice","openAlert","invoice","newlyAdded","component","InvoiceInformationComponent","onRefreshInvoice","r_hash","invoiceLookup","openSnackBar","paymentHash","Buffer","from","trim","toString","replace","newInvoice","map","applyFilter","selFilter","toLowerCase","getLabel","column","returnColumn","nodePageDefs","allowedColumns","col","label","titleCase","setFilterPredicate","filterPredicate","rowData","fltr","rowToFilter","selFilterBy","creation_date","Date","settle_date","is_keysend","indexOf","includes","sortingDataAccessor","sortHeaderId","isNaN","toLocaleLowerCase","id","start","disableClear","onPageChange","reverse","index_offset","pageIndex","previousPageIndex","fetchInvoices","num_max_invoices","reversed","onDownloadCSV","downloadFile","openCreateInvoiceModal","MatSort","MatPaginator","provide","MatPaginatorIntl","useValue","getPaginatorLabel","decls","LightningSendPaymentsComponent","dataService","UntypedFormControl","FEE_LIMIT_TYPES","channels","channelsSelector","activeChannels","channel","active","filteredMinAmtActvChannels","selectedChannelCtrl","enable","disable","paymentDecoded","num_satoshis","paymentError","x","y","c1","c2","remote_alias","chan_id","valueChanges","filterChannels","local_balance","displayFn","onSelectedChannelChanged","foundChannels","alias","setValue","setErrors","notfound","onSendPayment","paymentRequest","zeroAmtInvoice","paymentAmount","timestamp","sendPayment","onPaymentRequestEntry","selFeeLimitType","feeLimitTypes","feeLimit","num_msat","paymentReq","outgoingChannel","feeLimitType","fromDialog","onAmountChange","paymentDecodedHint","control","decodePayment","take","decodedPayment","onAdvancedPanelToggle","description","decodeError","isClosed","isReset","advancedTitle","name","LightningPaymentsComponent","rtlEffects","peers","peersSelector","htlcColumns","payments","paymentsSelector","paymentJSONArr","listPayments","totalPayments","loadPaymentsTable","slice","newlyAddedPayment","payment_hash","reorderedPaymentDecoded","key","title","destination","DataTypeEnum","cltv_expiry","openConfirmation","AlertTypeEnum","alertTitle","noBtnText","yesBtnText","closeConfirm","confirmRes","titleMsg","titleMessage","flgShowInput","getInputs","placeholder","inputType","inputValue","openSendPaymentModal","starting_index","is_group","index","payment","htlcs","resetForm","getHopDetails","currentHop","self","Promise","resolve","reject","peerFound","peer","pub_key","padEnd","amt_to_forward","getAliasesFromPubkeys","res","node","substring","onHTLCClick","selHtlc","selPayment","payment_request","setTimeout","showHTLCView","route","hops","all","hop","then","detailsAll","prepareData","scrollable","hopsDetails","modifiedData","preimage","attempt_time_ns","resolve_time_ns","total_amt","total_fees","total_time_lock","splice","onPaymentClick","nodePubkeys","reduce","pubkeys","nodes","showPaymentView","pathAliases","reorderedPayment","payment_preimage","value_msat","fee_msat","openPaymentAlert","shouldScroll","failure_reason","payms","paymentsDataCopy","paymentRequests","paymentReqs","decodePayments","decodedPayments","increament","idx","flattenedPayments","acc","curr","concat","NodeInfoComponent","ngOnChanges","chains","chain","network","BalancesInfoComponent","onchain","lightning","total","FeeInfoComponent","fees","month_fee_sum","totalFees","week_fee_sum","day_fee_sum","m","Math","ceil","log","LN10","maxFeeValue","Object","assign","ChannelStatusInfoComponent","ChannelCapacityInfoComponent","faBalanceScale","faDumbbell","goToChannels","navigateByUrl","ChannelLiquidityInfoComponent","loopService","showLoop","swapServerUrl","onLoopOut","getLoopOutTermsAndQuotes","targetConf","response","minHeight","minQuote","maxQuote","direction","LoopTypeEnum","LoopModalComponent","HomeComponent","faSmile","faFrown","faAngleDoubleDown","faAngleDoubleUp","faChartPie","faBolt","faServer","faNetworkWired","UserPersonaEnum","localBalance","remoteBalance","balancedness","operatorCards","goToOptions","links","icon","cols","rows","merchantCards","nodeInfoAndNodeSettingsAndAPIStatus","infoSettingsStatusSelector","errorMessages","apiCallStatusNodeInfo","feesSelector","apiCallStatusFees","blockchainBalance","bcBalanceSelector","apiCallStatusBlockchainBalance","balances","total_balance","pendingChannels","pendingChannelsSelector","apiCallStatusPendingChannels","channelsStatus","pending","num_channels","pendingChannelsSummary","open","capacity","limbo_balance","closing","force_closing","waiting_close","total_limbo_balance","apiCallStatusChannels","local","lightningBalance","remote","channelBalances","abs","toFixed","channelsSummary","inactiveChannels","inactive","totalInboundLiquidity","totalOutboundLiquidity","allChannels","allChannelsCapacity","sortDescByKey","allInboundChannels","remote_balance","allOutboundChannels","flgChildInfoUpdated","onNavigateTo","link","state","onsortChannelsBy","sortField","a","b","ConnectionsComponent","faUsers","dataValue","activeLink","findIndex","url","lastIndexOf","e","ResolveEnd","urlAfterRedirects","activePeers","confirmed_balance","unconfirmed_balance","onSelectedTabChange","OpenChannelComponent","TRANS_TYPES","totalBalance","balance","isPrivate","unannouncedChannels","channelConnectionError","sortedPeers","p1","p2","filteredPeers","selectedPeer","startWith","filterPeers","newlySelectedPeer","onSelectedPeerChanged","selectedPubkey","selPeer","onClose","fundingAmount","spendUnconfirmed","selTransType","transTypeValue","onOpenChannel","saveNewChannel","selectedPeerPubkey","transType","ConnectPeerComponent","lndEffects","formBuilder","peerFormGroup","group","hiddenAddress","Validators","peerAddress","channelFormGroup","disabled","hiddenAmount","statusFormGroup","controls","setValidators","flgEditable","newlyAddedPeer","stepper","peerConnectionError","onConnectPeer","deviderIndex","search","pubkey","host","connectPeerWithParams","fetchGraphNode","setGraphNode","graphNode","addresses","addr","saveNewPeer","perm","stepSelectionChanged","selectedIndex","peerFormLabel","channelFormLabel","previouslySelectedIndex","PeersComponent","availableBalance","peersData","loadPeersTable","onPeerClick","reorderedPeer","address","inbound","ping_time","sat_sent","sat_recv","bytes_sent","bytes_recv","showQRName","showQRField","peerToAddChannel","peerToAddChannelMessage","onPeerDetach","peerToDetach","msg","detachPeer","sync_type","ChannelsTablesComponent","numOpenChannels","numActiveHTLCs","totalHTLCs","pending_htlcs","numPendingChannels","total_channels","closedChannels","closedChannelsSelector","numClosedChannels","ChannelInformationComponent","snackBar","faReceipt","showCopy","onShowAdvanced","showAdvanced","onCopyChanID","ChannelRebalanceInfographicsComponent","EventEmitter","onSwipe","stepNumber","animationDirection","stepNumberChange","emit","sliderAnimation","ChannelRebalanceComponent","faInfoCircle","selChannel","FEE_LIMIT_TYPE","i","inputFormGroup","rebalanceAmount","selRebalancePeer","feeFormGroup","hiddenFeeLimit","queryRoute","flgPaymentSent","paymentStatus","flgInvoiceGenerated","get","amount","filteredActiveChannels","of","filterActiveChannels","onSelectFee","reset","required","inputFormLabel","feeFormLabel","remote_pubkey","routes","total_fees_msat","onRebalance","flgReusingInvoice","unsettledInvoice","findUnsettledInvoice","payReq","allowSelfPayment","lastHopPubkey","showInfo","flgShowInfo","onStepChanged","onRestart","opacityAnimation","CloseChannelComponent","channelToClose","filteredChannel","flgPendingHtlcs","onCloseChannel","blocks","closeChannelParams","channelPoint","channel_point","forcibly","satPerByte","closeChannel","ChannelOpenTableComponent","getCurrentNavigation","extras","version","versionsArr","split","numPeers","channelsData","calculateUptime","loadChannelsTable","onViewRemotePolicy","channelLookup","channelID","identity_pubkey","setLookup","fee_base_msat","fee_rate_milli_msat","time_lock_delta","reorderedChannelPolicy","digitsInfo","onCircularRebalance","channelsToRebalanceMessage","onChannelUpdate","channelToUpdate","confirmationMsg","step","min","hintFunction","percentHintFunction","base_fee","fee_rate","updateChannel","baseFeeMsat","feeRate","timeLockDelta","chanPoint","myChanPolicy","min_htlc_msat","max_htlc_msat","node1_pub","node1_policy","node2_pub","node2_policy","hasAdvanced","min_htlc","advancedField","updateChanPayload","minHtlcMsat","maxHtlcMsat","onChannelClose","fetchChannels","onChannelClick","total_satoshis_sent","total_satoshis_received","commit_fee","mychannels","maxDivider","minutesDivider","minDivider","max_uptime","uptime","hoursDivider","timeUnit","daysDivider","yearsDivider","uptime_str","floor","round","lifetime_str","lifetime","BumpFeeComponent","faCopy","outIdx","outputIdx","transTypes","bumpFeeChannel","pendingChannel","channelPointArr","txid_str","output_index","onBumpFee","outputIndex","pendingChannelOutputIndex","bumpFee","bumpFeeError","onCopyID","ChannelPendingTableComponent","openTableSetting","displayedOpenColumns","forceClosingTableSetting","displayedForceClosingColumns","closingTableSetting","displayedClosingColumns","waitingCloseTableSetting","displayedWaitClosingColumns","pending_open_channels","loadOpenChannelsTable","pending_force_closing_channels","loadForceClosingChannelsTable","pending_closing_channels","loadClosingChannelsTable","waiting_close_channels","loadWaitClosingChannelsTable","onOpenClick","fcChannelObj1","fcChannelObj2","preOrderedChannel","reorderedChannel","remote_node_pub","confirmation_height","fee_per_kw","commit_weight","onForceClosingClick","closing_txid","maturity_height","blocks_til_maturity","recovered_balance","onClosingClick","onWaitClosingClick","fcChannelObj3","commitments","local_txid","pendingOpenChannelsLength","pendingOpenChannels","pendingForceClosingChannelsLength","pendingForceClosingChannels","pendingClosingChannelsLength","pendingClosingChannels","pendingWaitClosingChannelsLength","pendingWaitClosingChannels","ChannelClosedTableComponent","CHANNEL_CLOSURE_TYPE","closedChannelsData","loadClosedChannelsTable","close_type","channelClosureType","onClosedChannelClick","settled_balance","time_locked_balance","close_height","closing_tx_hash","ChannelActiveHTLCsTableComponent","channelsJSONArr","loadHTLCsTable","reorderedHTLC","incoming","expiration_height","hash_lock","htlc","sortByKey","flattenHTLCs","UnlockWalletComponent","walletPassword","onUnlockWallet","unlockWallet","pwd","window","btoa","matchedPasswords","initWalletPassword","initWalletConfirmPassword","unmatchedPasswords","cipherSeedLength","cipherArr","invalidCipher","InitializeWalletComponent","passwordFormGroup","validators","cipherFormGroup","existingCipher","cipherSeed","passphraseFormGroup","enterPassphrase","passphrase","unsubs","checked","insecureLND","location","protocol","initWalletRes","initWalletResponse","genSeedResponse","genSeedRes","initWallet","cipher","onInitWallet","invalid","genSeed","onGoToHome","updateSelectedNodeOptions","fetchInfoLND","loadPage","unsub","MatStepper","STEPPER_GLOBAL_OPTIONS","displayDefaultIndicatorType","WalletComponent","faWallet","TransactionsComponent","faExchangeAlt","tooltip","linkFound","withLatestFrom","userPersona","GraphComponent","faSearch","QueryRoutesComponent","faRoute","setQueryRoutes","qrHops","flgLoading","onQueryRoutes","destinationPubkey","getQueryRoutes","destPubkey","onHopClick","selHop","reorderedHop","hop_sequence","chan_capacity","pubkey_alias","ChannelLookupComponent","lookupResult","node1_match","node2_match","NodeLookupComponent","NodeFeaturesLND","onCopyNodeURI","LookupsComponent","selectedFieldId","hasOwnProperty","lookupValue","flgSetLookupValue","onLookup","lookupKey","peerLookup","onSelectChange","clearLookupValue","RoutingComponent","faMapSigns","now","today","getFullYear","getMonth","getDate","lastMonthDay","onEventsFetch","setForwardingHistory","forwarding_events","endDate","startDate","getForwardingHistory","end_time","getTime","start_time","ForwardingHistoryComponent","forwardingHistory","fhSelector","eventsData","forwardingHistoryData","loadForwardingEventsTable","changes","currentValue","firstChange","onForwardingEventClick","selFEvent","reorderedFHEvent","amt_in","amt_out","alias_in","chan_id_in","alias_out","chan_id_out","forwardingHistoryEvents","forwardingEvents","RoutingPeersComponent","routingPeersData","sortIn","paginatorIn","sortOut","paginatorOut","loadRoutingPeersTable","onRoutingPeerClick","selRPeer","reorderedRoutingPeer","total_amount","applyFilterIncoming","routingPeersIncoming","filterIn","applyFilterOutgoing","routingPeersOutgoing","filterOut","rowDataIn","rowToFilterIn","selFilterByIn","rowDataOut","rowToFilterOut","selFilterByOut","results","groupRoutingPeers","incomingResults","outgoingResults","result","outgoing","ReportsComponent","faChartBar","RoutingReportComponent","SCROLL_RANGES","ReportBy","getMonthDays","showYAxisLabel","fetchEvents","containerSizeUpdated","CONTAINER_SIZE","screenPaddingX","view","height","end","startDateInSeconds","endDateInSeconds","routingReportData","selReportBy","reportBy","EVENTS","prepareEventsReport","prepareFeeReport","total_fee_msat","onChartMouseUp","srcElement","tagName","classList","eventFilterValue","onChartBarSelected","reportPeriod","padStart","MONTHS","feeReport","extra","totalEvents","monthNumber","dateNumber","secondsInADay","eventsReport","onSelectionChange","selectedValues","selMonth","selDate","selYear","selScrollRange","days","onSelReportByChange","yAxisLabel","fadeIn","TransactionsReportComponent","paymentsSelectedPeriod","invoicesSelectedPeriod","amountPaidSelectedPeriod","amountReceivedSelectedPeriod","date","series","amount_paid","amount_received","num_invoices","num_payments","clnPageSettings","allLightningTransactions","allLTSelector","getAllLightningTransactions","listPaymentsAll","listInvoicesAll","transactionsReportData","filterTransactionsForSelectedPeriod","transactionsNonZeroReportData","prepareTableData","transactionFilterValue","transactionsReport","transactionsReportSummary","filteredPayments","filteredInvoices","settled","amt_paid_msat","OnChainLabelModalComponent","utxo","onLabelUTXO","labelError","labelUTXO","outpoint","txid_bytes","fetchTransactions","fetchUTXOs","OnChainUTXOsComponent","faMoneyBillWave","WALLET_ADDRESS_TYPE","isDustUTXO","utxos","utxosSelector","dustUtxos","amount_sat","dustAmount","loadUTXOsTable","listUTXOs","address_type","addressType","confirmations","onUTXOClick","selUTXO","reorderedUTXOs","pk_script","UTXOs","onLeaseUTXO","utxoDetails","informationMessage","leaseUTXO","OnChainTransactionHistoryComponent","transactions","transactionsSelector","loadTransactionsTable","onTransactionClick","selTransaction","reorderedTransactions","block_hash","tx_hash","time_stamp","block_height","num_confirmations","dest_addresses","listTransactions","UTXOTablesComponent","numUtxos","numDustUtxos","DUST_AMOUNT","numTransactions","onSelectedIndexChanged","selectedTableIndexChange","OnChainComponent","activatedRoute","selectedTable","onSelectedTableIndexChanged","navigate","relativeTo","OnChainReceiveComponent","ADDRESS_TYPES","flgVersionCompatible","isVersionCompatible","addressTypes","at","addressId","onGenerateAddress","getNewAddress","selectedAddressType","setNewAddress","newAddress","addressTp","OnChainGeneratedAddressComponent","OnChainSendModalComponent","CURRENCY_UNITS","sweepAll","hiddenPassword","password","sendFundFormGroup","transactionAddress","transactionBlocks","transactionFees","confirmFormGroup","rootAppConfig","appConfig","rootSelectedNode","amountUnits","sendFundError","onAuthenticate","flgValidated","isAuthorized","sha256","isAuthorizedRes","authRes","onSendFunds","invalidValues","postTransaction","transactionAmount","sendAll","selAmountUnit","currencyUnitFormats","setChannelTransaction","amountError","passwordFormLabel","sendFundFormLabel","onAmountUnitChange","prevSelectedUnit","currSelectedUnit","OnChainSendComponent","routeData","openSendFundsModal","NetworkInfoComponent","faProjectDiagram","networkCards","nodeCards","networkInfo","networkInfoSelector","apiCallStatusNetwork","BackupComponent","faDownload","ChannelRestoreTableComponent","restoreChannelsList","setRestoreChannelList","resRCList","allRestoreExists","all_restore_exists","files","loadRestoreTable","onRestoreChannels","restoreChannels","ChannelBackupTableComponent","faArchive","channelsSeletor","loadBackupTable","RTLActions","selectedChannel","onBackupChannels","backupChannels","showMessage","onVerifyChannels","verifyChannel","onDownloadBackup","fetchFile","SignVerifyMessageComponent","faUserCheck","SignComponent","onSign","signMessage","signedMessage","signature","onMessageChange","onCopyField","VerifyComponent","valid","onVerify","verifyMessage","verifyRes","showVerifyStatus","verifiedMessage","verifiedSignature","onChange","NonRoutingPeersComponent","loadNonRoutingPeersTable","onManagePeer","selNonRoutingChannel","nonRoutingPeers","filteredNonRoutingChannels","actvChnl","evnt","PaymentLookupComponent","paths","InvoiceLookupComponent","qrWidth","getDecimalFormat","amt_msat","LookupTransactionsComponent","extractErrorMessage","paymentLookup","LndRoutes","path","children","pathMatch","redirectTo","canActivate","LNDUnlockedGuard","AuthGuard","NotFoundComponent","LNDRouting","RouterModule","LNDModule","bootstrap","imports","CommonModule","SharedModule"],"sourceRoot":"webpack:///","sources":["./src/app/lnd/lnd-root.component.html","./src/app/lnd/lnd-root.component.ts","./src/app/lnd/transactions/create-invoice-modal/create-invoice.component.html","./src/app/lnd/transactions/create-invoice-modal/create-invoice.component.ts","./src/app/lnd/transactions/invoices/lightning-invoices.component.html","./src/app/lnd/transactions/invoices/lightning-invoices.component.ts","./src/app/lnd/transactions/send-payment-modal/send-payment.component.html","./src/app/lnd/transactions/send-payment-modal/send-payment.component.ts","./src/app/lnd/transactions/payments/lightning-payments.component.html","./src/app/lnd/transactions/payments/lightning-payments.component.ts","./src/app/lnd/home/node-info/node-info.component.html","./src/app/lnd/home/node-info/node-info.component.ts","./src/app/lnd/home/balances-info/balances-info.component.html","./src/app/lnd/home/balances-info/balances-info.component.ts","./src/app/lnd/home/fee-info/fee-info.component.html","./src/app/lnd/home/fee-info/fee-info.component.ts","./src/app/lnd/home/channel-status-info/channel-status-info.component.html","./src/app/lnd/home/channel-status-info/channel-status-info.component.ts","./src/app/lnd/home/channel-capacity-info/channel-capacity-info.component.html","./src/app/lnd/home/channel-capacity-info/channel-capacity-info.component.ts","./src/app/lnd/home/channel-liquidity-info/channel-liquidity-info.component.html","./src/app/lnd/home/channel-liquidity-info/channel-liquidity-info.component.ts","./src/app/lnd/home/home.component.html","./src/app/lnd/home/home.component.ts","./src/app/lnd/peers-channels/connections.component.html","./src/app/lnd/peers-channels/connections.component.ts","./src/app/lnd/peers-channels/channels/open-channel-modal/open-channel.component.html","./src/app/lnd/peers-channels/channels/open-channel-modal/open-channel.component.ts","./src/app/lnd/peers-channels/connect-peer/connect-peer.component.html","./src/app/lnd/peers-channels/connect-peer/connect-peer.component.ts","./src/app/lnd/peers-channels/peers/peers.component.html","./src/app/lnd/peers-channels/peers/peers.component.ts","./src/app/lnd/peers-channels/channels/channels-tables/channels-tables.component.html","./src/app/lnd/peers-channels/channels/channels-tables/channels-tables.component.ts","./src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.html","./src/app/lnd/peers-channels/channels/channel-information-modal/channel-information.component.ts","./src/app/lnd/peers-channels/channels/channel-rebalance-infographics/channel-rebalance-infographics.component.html","./src/app/lnd/peers-channels/channels/channel-rebalance-infographics/channel-rebalance-infographics.component.ts","./src/app/lnd/peers-channels/channels/channel-rebalance-modal/channel-rebalance.component.html","./src/app/lnd/peers-channels/channels/channel-rebalance-modal/channel-rebalance.component.ts","./src/app/lnd/peers-channels/channels/close-channel-modal/close-channel.component.html","./src/app/lnd/peers-channels/channels/close-channel-modal/close-channel.component.ts","./src/app/lnd/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.html","./src/app/lnd/peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component.ts","./src/app/lnd/peers-channels/channels/bump-fee-modal/bump-fee.component.html","./src/app/lnd/peers-channels/channels/bump-fee-modal/bump-fee.component.ts","./src/app/lnd/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.html","./src/app/lnd/peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component.ts","./src/app/lnd/peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component.html","./src/app/lnd/peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component.ts","./src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.html","./src/app/lnd/peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component.ts","./src/app/lnd/wallet/unlock/unlock.component.html","./src/app/lnd/wallet/unlock/unlock.component.ts","./src/app/lnd/wallet/initialize/initialize.component.html","./src/app/lnd/wallet/initialize/initialize.component.ts","./src/app/lnd/wallet/wallet.component.ts","./src/app/lnd/wallet/wallet.component.html","./src/app/lnd/transactions/transactions.component.html","./src/app/lnd/transactions/transactions.component.ts","./src/app/lnd/graph/graph.component.html","./src/app/lnd/graph/graph.component.ts","./src/app/lnd/graph/query-routes/query-routes.component.html","./src/app/lnd/graph/query-routes/query-routes.component.ts","./src/app/lnd/graph/lookups/channel-lookup/channel-lookup.component.html","./src/app/lnd/graph/lookups/channel-lookup/channel-lookup.component.ts","./src/app/lnd/graph/lookups/node-lookup/node-lookup.component.html","./src/app/lnd/graph/lookups/node-lookup/node-lookup.component.ts","./src/app/lnd/graph/lookups/lookups.component.html","./src/app/lnd/graph/lookups/lookups.component.ts","./src/app/lnd/routing/routing.component.html","./src/app/lnd/routing/routing.component.ts","./src/app/lnd/routing/forwarding-history/forwarding-history.component.html","./src/app/lnd/routing/forwarding-history/forwarding-history.component.ts","./src/app/lnd/routing/routing-peers/routing-peers.component.html","./src/app/lnd/routing/routing-peers/routing-peers.component.ts","./src/app/lnd/reports/reports.component.html","./src/app/lnd/reports/reports.component.ts","./src/app/lnd/reports/routing/routing-report.component.html","./src/app/lnd/reports/routing/routing-report.component.ts","./src/app/lnd/reports/transactions/transactions-report.component.html","./src/app/lnd/reports/transactions/transactions-report.component.ts","./src/app/lnd/on-chain/on-chain-label-modal/on-chain-label-modal.component.html","./src/app/lnd/on-chain/on-chain-label-modal/on-chain-label-modal.component.ts","./src/app/lnd/on-chain/utxo-tables/utxos/utxos.component.html","./src/app/lnd/on-chain/utxo-tables/utxos/utxos.component.ts","./src/app/lnd/on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component.html","./src/app/lnd/on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component.ts","./src/app/lnd/on-chain/utxo-tables/utxo-tables.component.html","./src/app/lnd/on-chain/utxo-tables/utxo-tables.component.ts","./src/app/lnd/on-chain/on-chain.component.html","./src/app/lnd/on-chain/on-chain.component.ts","./src/app/lnd/on-chain/on-chain-receive/on-chain-receive.component.html","./src/app/lnd/on-chain/on-chain-receive/on-chain-receive.component.ts","./src/app/lnd/on-chain/on-chain-send-modal/on-chain-send-modal.component.html","./src/app/lnd/on-chain/on-chain-send-modal/on-chain-send-modal.component.ts","./src/app/lnd/on-chain/on-chain-send/on-chain-send.component.ts","./src/app/lnd/on-chain/on-chain-send/on-chain-send.component.html","./src/app/lnd/network-info/network-info.component.html","./src/app/lnd/network-info/network-info.component.ts","./src/app/lnd/backup/backup.component.html","./src/app/lnd/backup/backup.component.ts","./src/app/lnd/backup/channel-restore-table/channel-restore-table.component.html","./src/app/lnd/backup/channel-restore-table/channel-restore-table.component.ts","./src/app/lnd/backup/channel-backup-table/channel-backup-table.component.html","./src/app/lnd/backup/channel-backup-table/channel-backup-table.component.ts","./src/app/lnd/sign-verify-message/sign-verify-message.component.html","./src/app/lnd/sign-verify-message/sign-verify-message.component.ts","./src/app/lnd/sign-verify-message/sign/sign.component.html","./src/app/lnd/sign-verify-message/sign/sign.component.ts","./src/app/lnd/sign-verify-message/verify/verify.component.html","./src/app/lnd/sign-verify-message/verify/verify.component.ts","./src/app/lnd/routing/non-routing-peers/non-routing-peers.component.html","./src/app/lnd/routing/non-routing-peers/non-routing-peers.component.ts","./src/app/lnd/transactions/lookup-transactions/payment-lookup/payment-lookup.component.ts","./src/app/lnd/transactions/lookup-transactions/payment-lookup/payment-lookup.component.html","./src/app/lnd/transactions/lookup-transactions/invoice-lookup/invoice-lookup.component.html","./src/app/lnd/transactions/lookup-transactions/invoice-lookup/invoice-lookup.component.ts","./src/app/lnd/transactions/lookup-transactions/lookup-transactions.component.html","./src/app/lnd/transactions/lookup-transactions/lookup-transactions.component.ts","./src/app/lnd/lnd.routing.ts","./src/app/lnd/lnd.module.ts"],"sourcesContent":["
\n \n \n
\n","import { Component } from '@angular/core';\nimport { Event, NavigationCancel, NavigationEnd, NavigationError, NavigationStart, Router } from '@angular/router';\nimport { routeAnimation } from '../shared/animation/route-animation';\n\n@Component({\n selector: 'rtl-lnd-root',\n templateUrl: './lnd-root.component.html',\n styleUrls: ['./lnd-root.component.scss'],\n animations: [routeAnimation]\n})\nexport class LNDRootComponent {\n\n loading = false;\n\n constructor(private router: Router) {\n this.router.events.subscribe((event: Event) => {\n switch (true) {\n case event instanceof NavigationStart: {\n this.loading = true;\n break;\n }\n case event instanceof NavigationEnd:\n case event instanceof NavigationCancel:\n case event instanceof NavigationError: {\n this.loading = false;\n break;\n }\n default: {\n break;\n }\n }\n });\n }\n\n}\n","
\n
\n \n
\n Create Invoice\n
\n \n
\n \n
\n \n \n \n \n \n Sats \n {{invoiceValueHint}} \n \n \n \n {{selTimeUnit | titlecase}} \n \n \n \n {{timeUnit | titlecase}}\n \n \n
\n
\n Private Routing Hints\n info_outline\n
\n
\n AMP Invoice\n info_outline\n
\n
\n
\n \n {{invoiceError}}\n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, Inject } from '@angular/core';\nimport { DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport { InvoiceInformation } from '../../../shared/models/alertData';\nimport { LNDActions, TimeUnitEnum, CurrencyUnitEnum, TIME_UNITS, CURRENCY_UNIT_FORMATS, PAGE_SIZE, APICallStatusEnum, UI_MESSAGES } from '../../../shared/services/consts-enums-functions';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { GetInfo } from '../../../shared/models/lndModels';\nimport { CommonService } from '../../../shared/services/common.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { saveNewInvoice } from '../../store/lnd.actions';\nimport { lndNodeInformation, lndNodeSettings } from '../../store/lnd.selector';\n\n@Component({\n selector: 'rtl-create-invoices',\n templateUrl: './create-invoice.component.html',\n styleUrls: ['./create-invoice.component.scss']\n})\nexport class CreateInvoiceComponent implements OnInit, OnDestroy {\n\n public faExclamationTriangle = faExclamationTriangle;\n public selNode: SelNodeChild | null = {};\n public memo = '';\n public expiry: number | null;\n public isAmp = false;\n public invoiceValue: number | null;\n public invoiceValueHint = '';\n public invoicePaymentReq = '';\n public information: GetInfo = {};\n public private = false;\n public expiryStep = 100;\n public pageSize = PAGE_SIZE;\n public timeUnitEnum = TimeUnitEnum;\n public timeUnits = TIME_UNITS;\n public selTimeUnit = TimeUnitEnum.SECS;\n public invoiceError = '';\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: InvoiceInformation, private store: Store, private decimalPipe: DecimalPipe, private commonService: CommonService, private actions: Actions) { }\n\n ngOnInit() {\n this.pageSize = this.data.pageSize;\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[1])).subscribe((nodeInfo: GetInfo) => { this.information = nodeInfo; });\n this.actions.pipe(takeUntil(this.unSubs[2]),\n filter((action) => action.type === LNDActions.UPDATE_API_CALL_STATUS_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.UPDATE_API_CALL_STATUS_LND && action.payload.action === 'SaveNewInvoice') {\n this.invoiceError = action.payload.message;\n if (action.payload.status === APICallStatusEnum.ERROR) {\n this.invoiceError = action.payload.message;\n }\n if (action.payload.status === APICallStatusEnum.COMPLETED) {\n this.dialogRef.close();\n }\n }\n });\n }\n\n onAddInvoice(form: any) {\n this.invoiceError = '';\n let expiryInSecs = 0;\n if (this.expiry) {\n if (this.selTimeUnit !== TimeUnitEnum.SECS) {\n expiryInSecs = this.commonService.convertTime(this.expiry, this.selTimeUnit, TimeUnitEnum.SECS);\n } else {\n expiryInSecs = this.expiry;\n }\n } else {\n expiryInSecs = 3600;\n }\n this.store.dispatch(saveNewInvoice({\n payload: {\n uiMessage: UI_MESSAGES.ADD_INVOICE, memo: this.memo, value: this.invoiceValue!, private: this.private, expiry: expiryInSecs, is_amp: this.isAmp, pageSize: this.pageSize, openModal: true\n }\n }));\n }\n\n resetData() {\n this.memo = '';\n this.invoiceValue = null;\n this.private = false;\n this.isAmp = false;\n this.expiry = null;\n this.invoiceValueHint = '';\n this.selTimeUnit = TimeUnitEnum.SECS;\n this.invoiceError = '';\n }\n\n onInvoiceValueChange() {\n if (this.selNode && this.selNode.fiatConversion && this.invoiceValue && this.invoiceValue > 99) {\n this.invoiceValueHint = '';\n this.commonService.convertCurrency(this.invoiceValue, CurrencyUnitEnum.SATS, CurrencyUnitEnum.OTHER, (this.selNode.currencyUnits && this.selNode.currencyUnits.length > 2 ? this.selNode.currencyUnits[2] : ''), this.selNode.fiatConversion).\n pipe(takeUntil(this.unSubs[3])).\n subscribe({\n next: (data) => {\n this.invoiceValueHint = '= ' + data.symbol + this.decimalPipe.transform(data.OTHER, CURRENCY_UNIT_FORMATS.OTHER) + ' ' + data.unit;\n }, error: (err) => {\n this.invoiceValueHint = 'Conversion Error: ' + err;\n }\n });\n }\n }\n\n onTimeUnitChange(event: any) {\n if (this.expiry && this.selTimeUnit !== event.value) {\n this.expiry = this.commonService.convertTime(this.expiry, this.selTimeUnit, event.value);\n }\n this.selTimeUnit = event.value;\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n \n \n \n \n Sats \n {{invoiceValueHint}} \n \n
\n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n Invoices History\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n Date Created\n {{(invoice?.creation_date * 1000) | date:'dd/MMM/y HH:mm'}}Date Settled{{(+invoice?.settle_date !== 0 ? ((+invoice?.settle_date * 1000) | date:'dd/MMM/y HH:mm') : '-')}}Memo\n
\n {{invoice?.memo}}\n
\n
Preimage\n
\n {{invoice?.r_preimage}}\n
\n
Preimage Hash\n
\n {{invoice?.r_hash}}\n
\n
Payment Address\n
\n {{invoice?.payment_addr}}\n
\n
Payment Request\n
\n {{invoice?.payment_request}}\n
\n
Description Hash\n
\n {{invoice?.description_hash}}\n
\n
Expiry{{invoice?.expiry | number}} CLTV Expiry{{invoice?.cltv_expiry | number}} Add Index{{invoice?.add_index | number}} Settle Index{{invoice?.settle_index | number}} Amount (Sats){{invoice?.value | number}} Amount Settled (Sats){{invoice?.amt_paid_sat | number}} \n
\n \n \n Download CSV\n \n
\n
\n
\n \n \n View Info\n Refresh\n \n
\n
\n

No invoice available.

\n

Getting invoices...

\n

{{errorMessage}}

\n
\n \n
\n
\n
","import { Component, OnInit, OnDestroy, ViewChild, Input, AfterViewInit } from '@angular/core';\nimport { DatePipe, DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faHistory, faEye, faEyeSlash, faBurst, faMoneyBill1, faArrowsTurnToDots, faArrowsTurnRight } from '@fortawesome/free-solid-svg-icons';\nimport { MatPaginator, MatPaginatorIntl, PageEvent } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { CurrencyUnitEnum, CURRENCY_UNIT_FORMATS, PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, ScreenSizeEnum, APICallStatusEnum, UI_MESSAGES, LNDActions, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { GetInfo, Invoice, ListInvoices } from '../../../shared/models/lndModels';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\n\nimport { CreateInvoiceComponent } from '../create-invoice-modal/create-invoice.component';\nimport { InvoiceInformationComponent } from '../invoice-information-modal/invoice-information.component';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert } from '../../../store/rtl.actions';\nimport { fetchInvoices, invoiceLookup, saveNewInvoice } from '../../store/lnd.actions';\nimport { invoices, lndNodeInformation, lndNodeSettings, lndPageSettings } from '../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-lightning-invoices',\n templateUrl: './lightning-invoices.component.html',\n styleUrls: ['./lightning-invoices.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Invoices') }\n ]\n})\nexport class LightningInvoicesComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() calledFrom = 'transactions'; // Transactions/home\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public faEye = faEye;\n public faEyeSlash = faEyeSlash;\n public faHistory = faHistory;\n public faArrowsTurnToDots = faArrowsTurnToDots;\n public faArrowsTurnRight = faArrowsTurnRight;\n public faBurst = faBurst;\n public faMoneyBill1 = faMoneyBill1;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'transactions';\n public tableSetting: TableSetting = { tableId: 'invoices', recordsPerPage: PAGE_SIZE, sortBy: 'creation_date', sortOrder: SortOrderEnum.DESCENDING };\n public selNode: SelNodeChild | null = {};\n public newlyAddedInvoiceMemo: string | null = null;\n public newlyAddedInvoiceValue: number | null = null;\n public memo = '';\n public expiry: number | null;\n public invoiceValue: number | null;\n public invoiceValueHint = '';\n public displayedColumns: any[] = [];\n public invoicePaymentReq = '';\n public invoicesData: Invoice[] = [];\n public invoices: any = new MatTableDataSource([]);\n public information: GetInfo = {};\n public selFilter = '';\n public private = false;\n public expiryStep = 100;\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n private firstOffset = -1;\n private lastOffset = -1;\n public totalInvoices = 0;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private decimalPipe: DecimalPipe, private commonService: CommonService, private datePipe: DatePipe, private actions: Actions, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[1])).subscribe((nodeInfo: GetInfo) => { this.information = nodeInfo; });\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[2])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.unshift('state');\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(invoices).pipe(takeUntil(this.unSubs[3])).\n subscribe((invoicesSelector: { listInvoices: ListInvoices, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = invoicesSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.totalInvoices = (invoicesSelector.listInvoices.total_invoices || 0);\n this.firstOffset = +(invoicesSelector.listInvoices.first_index_offset || -1);\n this.lastOffset = +(invoicesSelector.listInvoices.last_index_offset || -1);\n this.invoicesData = invoicesSelector.listInvoices.invoices || [];\n if (this.invoicesData.length > 0 && this.sort && this.paginator && this.displayedColumns.length > 0) {\n this.loadInvoicesTable(this.invoicesData);\n }\n this.logger.info(invoicesSelector);\n });\n this.actions.pipe(takeUntil(this.unSubs[4]), filter((action) => (action.type === LNDActions.SET_LOOKUP_LND || action.type === LNDActions.UPDATE_API_CALL_STATUS_LND))).\n subscribe((resLookup: any) => {\n if (resLookup.type === LNDActions.SET_LOOKUP_LND) {\n if (this.invoicesData.length > 0 && this.sort && this.paginator && resLookup.payload) {\n this.updateInvoicesData(JSON.parse(JSON.stringify(resLookup.payload)));\n this.loadInvoicesTable(this.invoicesData);\n }\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.invoicesData.length > 0) {\n this.loadInvoicesTable(this.invoicesData);\n }\n }\n\n\n onAddInvoice(form: any) {\n const expiryInSecs = (this.expiry ? this.expiry : 3600);\n this.newlyAddedInvoiceMemo = this.memo;\n this.newlyAddedInvoiceValue = this.invoiceValue;\n this.store.dispatch(saveNewInvoice({\n payload: {\n uiMessage: UI_MESSAGES.ADD_INVOICE, memo: this.memo, value: this.invoiceValue!, private: this.private, expiry: expiryInSecs, is_amp: false, pageSize: this.pageSize, openModal: true\n }\n }));\n this.resetData();\n }\n\n onInvoiceClick(selInvoice: Invoice) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n invoice: selInvoice,\n newlyAdded: false,\n component: InvoiceInformationComponent\n }\n }\n }));\n }\n\n onRefreshInvoice(selInvoice: Invoice) {\n if (selInvoice && selInvoice.r_hash) {\n this.store.dispatch(invoiceLookup({ payload: { openSnackBar: true, paymentHash: Buffer.from(selInvoice.r_hash.trim(), 'hex').toString('base64')?.replace(/\\+/g, '-')?.replace(/[/]/g, '_') } }));\n }\n }\n\n updateInvoicesData(newInvoice: Invoice) {\n this.invoicesData = this.invoicesData?.map((invoice) => ((invoice.r_hash === newInvoice.r_hash) ? newInvoice : invoice));\n }\n\n\n applyFilter() {\n this.invoices.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.invoices.filterPredicate = (rowData: Invoice, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = (rowData.creation_date ? this.datePipe.transform(new Date(rowData.creation_date * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() : '')! +\n (rowData.settle_date ? this.datePipe.transform(new Date(rowData.settle_date * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() : '') + JSON.stringify(rowData).toLowerCase();\n break;\n\n case 'creation_date':\n case 'settle_date':\n rowToFilter = this.datePipe.transform(new Date((rowData[this.selFilterBy] || 0) * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() || '';\n break;\n\n case 'private':\n rowToFilter = rowData?.private ? 'private' : 'public';\n break;\n\n case 'is_keysend':\n rowToFilter = rowData?.is_keysend ? 'keysend invoices' : 'non keysend invoices';\n break;\n\n case 'is_amp':\n rowToFilter = rowData?.is_amp ? 'atomic multi path payment' : 'non atomic payment';\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return (this.selFilterBy === 'is_keysend' || this.selFilterBy === 'is_amp') ? rowToFilter.indexOf(fltr) === 0 : rowToFilter.includes(fltr);\n };\n }\n\n loadInvoicesTable(invoices) {\n this.invoices = invoices ? new MatTableDataSource([...invoices]) : new MatTableDataSource([]);\n this.invoices.sort = this.sort;\n this.invoices.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.invoices.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.invoices);\n }\n\n resetData() {\n this.memo = '';\n this.invoiceValue = null;\n this.private = false;\n this.expiry = null;\n this.invoiceValueHint = '';\n }\n\n onPageChange(event: PageEvent) {\n let reverse = true;\n let index_offset = this.lastOffset;\n this.pageSize = event.pageSize;\n if (event.pageIndex === 0) {\n reverse = true;\n index_offset = 0;\n } else if (event.previousPageIndex && event.pageIndex < event.previousPageIndex) {\n reverse = false;\n index_offset = this.lastOffset;\n } else if (event.previousPageIndex && event.pageIndex > event.previousPageIndex && (event.length > ((event.pageIndex + 1) * event.pageSize))) {\n reverse = true;\n index_offset = this.firstOffset;\n } else if (event.length <= ((event.pageIndex + 1) * event.pageSize)) {\n reverse = false;\n index_offset = 0;\n }\n this.store.dispatch(fetchInvoices({ payload: { num_max_invoices: event.pageSize, index_offset: index_offset, reversed: reverse } }));\n }\n\n onInvoiceValueChange() {\n if (this.selNode && this.selNode.fiatConversion && this.invoiceValue && this.invoiceValue > 99) {\n this.invoiceValueHint = '';\n this.commonService.convertCurrency(this.invoiceValue, CurrencyUnitEnum.SATS, CurrencyUnitEnum.OTHER, (this.selNode.currencyUnits && this.selNode.currencyUnits.length > 2 ? this.selNode.currencyUnits[2] : ''), this.selNode.fiatConversion).\n pipe(takeUntil(this.unSubs[5])).\n subscribe({\n next: (data) => {\n this.invoiceValueHint = '= ' + data.symbol + this.decimalPipe.transform(data.OTHER, CURRENCY_UNIT_FORMATS.OTHER) + ' ' + data.unit;\n }, error: (err) => {\n this.invoiceValueHint = 'Conversion Error: ' + err;\n }\n });\n }\n }\n\n onDownloadCSV() {\n if (this.invoices.data && this.invoices.data.length > 0) {\n this.commonService.downloadFile(this.invoices.data, 'Invoices');\n }\n }\n\n openCreateInvoiceModal() {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n pageSize: this.pageSize,\n component: CreateInvoiceComponent\n }\n }\n }));\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n Send Payment\n
\n \n
\n \n
\n \n \n {{paymentDecodedHint}}\n Payment request is required.\n {{paymentDecodedHint}}\n \n \n \n It is a zero amount invoice, enter amount to be paid.\n Payment amount is required.\n \n \n \n \n {{advancedTitle}}\n \n \n
\n \n \n \n {{feeLimitType?.name}}\n \n \n \n \n \n {{selFeeLimitType?.placeholder}} is required.\n \n \n \n \n {{activeChannel?.remote_alias || activeChannel?.chan_id}}\n \n Channel not found in the list.\n \n
\n
\n
\n \n {{paymentError}}\n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\nimport { UntypedFormControl, NgModel } from '@angular/forms';\nimport { DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { MatDialogRef } from '@angular/material/dialog';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { PayRequest, Channel, ChannelsSummary, LightningBalance } from '../../../shared/models/lndModels';\nimport { APICallStatusEnum, CurrencyUnitEnum, CURRENCY_UNIT_FORMATS, FEE_LIMIT_TYPES, LNDActions, UI_MESSAGES } from '../../../shared/services/consts-enums-functions';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { DataService } from '../../../shared/services/data.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { sendPayment } from '../../store/lnd.actions';\nimport { channels, lndNodeSettings } from '../../store/lnd.selector';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\n\n@Component({\n selector: 'rtl-lightning-send-payments',\n templateUrl: './send-payment.component.html',\n styleUrls: ['./send-payment.component.scss']\n})\nexport class LightningSendPaymentsComponent implements OnInit, OnDestroy {\n\n @ViewChild('paymentReq', { static: false }) paymentReq: NgModel;\n public faExclamationTriangle = faExclamationTriangle;\n public selNode: SelNodeChild | null = {};\n public paymentDecoded: PayRequest = {};\n public zeroAmtInvoice = false;\n public paymentAmount: number | null = null;\n public paymentRequest = '';\n public paymentDecodedHint = '';\n public showAdvanced = false;\n public activeChannels: Channel[] = [];\n public filteredMinAmtActvChannels: Channel[] = [];\n public selectedChannelCtrl = new UntypedFormControl();\n public feeLimit: number | null = null;\n public selFeeLimitType = FEE_LIMIT_TYPES[0];\n public feeLimitTypes = FEE_LIMIT_TYPES;\n public advancedTitle = 'Advanced Options';\n public paymentError = '';\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, private store: Store, private logger: LoggerService, private commonService: CommonService, private decimalPipe: DecimalPipe, private actions: Actions, private dataService: DataService) { }\n\n ngOnInit() {\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(channels).pipe(takeUntil(this.unSubs[1])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.activeChannels = channelsSelector.channels && channelsSelector.channels.length ? channelsSelector.channels?.filter((channel) => channel.active) : [];\n this.filteredMinAmtActvChannels = this.activeChannels;\n if (this.filteredMinAmtActvChannels.length && this.filteredMinAmtActvChannels.length > 0) {\n this.selectedChannelCtrl.enable();\n } else {\n this.selectedChannelCtrl.disable();\n }\n this.logger.info(channelsSelector);\n });\n this.actions.pipe(\n takeUntil(this.unSubs[2]),\n filter((action) => action.type === LNDActions.UPDATE_API_CALL_STATUS_LND || action.type === LNDActions.SEND_PAYMENT_STATUS_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.SEND_PAYMENT_STATUS_LND) {\n this.dialogRef.close();\n }\n if (action.type === LNDActions.UPDATE_API_CALL_STATUS_LND && action.payload.status === APICallStatusEnum.ERROR && action.payload.action === 'SendPayment') {\n delete this.paymentDecoded.num_satoshis;\n this.paymentError = action.payload.message;\n }\n });\n let x = '';\n let y = '';\n this.activeChannels = this.activeChannels.sort((c1: Channel, c2: Channel) => {\n x = c1.remote_alias ? c1.remote_alias.toLowerCase() : c1.chan_id ? c1.chan_id.toLowerCase() : '';\n y = c2.remote_alias ? c2.remote_alias.toLowerCase() : c2.chan_id ? c2.chan_id.toLowerCase() : '';\n return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n });\n this.selectedChannelCtrl.valueChanges.pipe(takeUntil(this.unSubs[3])).\n subscribe((channel) => {\n if (typeof channel === 'string') {\n this.filteredMinAmtActvChannels = this.filterChannels();\n }\n });\n }\n\n private filterChannels(): Channel[] {\n return this.activeChannels && this.activeChannels.length ? this.activeChannels?.filter((channel) => {\n const alias = channel.remote_alias ? channel.remote_alias.toLowerCase() : channel.chan_id ? channel.chan_id.toLowerCase() : '';\n return alias.indexOf(this.selectedChannelCtrl.value ? this.selectedChannelCtrl.value.toLowerCase() : '') === 0 && (channel.local_balance || 0) >= +(this.paymentDecoded.num_satoshis ? this.paymentDecoded.num_satoshis : 0);\n }) : [];\n }\n\n displayFn(channel: Channel): string {\n return (channel && channel.remote_alias) ? channel.remote_alias : (channel && channel.chan_id) ? channel.chan_id : '';\n }\n\n onSelectedChannelChanged() {\n if (this.selectedChannelCtrl.value && this.selectedChannelCtrl.value.length > 0 && typeof this.selectedChannelCtrl.value === 'string') {\n const foundChannels = this.activeChannels && this.activeChannels.length ? this.activeChannels?.filter((channel) => {\n const alias = channel.remote_alias ? channel.remote_alias.toLowerCase() : channel.chan_id ? channel.chan_id.toLowerCase() : '';\n return alias.length === this.selectedChannelCtrl.value.length && alias.indexOf(this.selectedChannelCtrl.value ? this.selectedChannelCtrl.value.toLowerCase() : '') === 0;\n }) : [];\n if (foundChannels && foundChannels.length > 0) {\n this.selectedChannelCtrl.setValue(foundChannels[0]);\n this.selectedChannelCtrl.setErrors(null);\n } else {\n this.selectedChannelCtrl.setErrors({ notfound: true });\n }\n }\n }\n\n onSendPayment(): boolean | void {\n if (this.selectedChannelCtrl.value && typeof this.selectedChannelCtrl.value === 'string') {\n this.onSelectedChannelChanged();\n }\n if (!this.paymentRequest || (this.zeroAmtInvoice && (!this.paymentAmount || this.paymentAmount <= 0)) || typeof this.selectedChannelCtrl.value === 'string') {\n return true;\n }\n if (this.paymentDecoded.timestamp) {\n this.sendPayment();\n } else {\n this.onPaymentRequestEntry(this.paymentRequest);\n }\n }\n\n sendPayment(): boolean | void {\n if (this.selFeeLimitType !== this.feeLimitTypes[0] && !this.feeLimit) {\n return true;\n }\n if (this.paymentDecoded.num_msat && !this.paymentDecoded.num_satoshis) {\n this.paymentDecoded.num_satoshis = (+this.paymentDecoded.num_msat / 1000).toString();\n }\n if (!this.paymentDecoded.num_satoshis || this.paymentDecoded.num_satoshis === '' || this.paymentDecoded.num_satoshis === '0') {\n this.zeroAmtInvoice = true;\n this.paymentDecoded.num_satoshis = this.paymentAmount?.toString() || '';\n this.store.dispatch(sendPayment({ payload: { uiMessage: UI_MESSAGES.SEND_PAYMENT, paymentReq: this.paymentRequest, paymentAmount: this.paymentAmount || 0, outgoingChannel: this.selectedChannelCtrl.value, feeLimitType: this.selFeeLimitType.id, feeLimit: this.feeLimit, fromDialog: true } }));\n } else {\n this.zeroAmtInvoice = false;\n this.store.dispatch(sendPayment({ payload: { uiMessage: UI_MESSAGES.SEND_PAYMENT, paymentReq: this.paymentRequest, outgoingChannel: this.selectedChannelCtrl.value, feeLimitType: this.selFeeLimitType.id, feeLimit: this.feeLimit, fromDialog: true } }));\n }\n }\n\n onAmountChange(event: any) {\n delete this.paymentDecoded.num_satoshis;\n }\n\n onPaymentRequestEntry(event: any) {\n this.paymentRequest = event;\n this.paymentAmount = null;\n this.paymentError = '';\n this.paymentDecodedHint = '';\n this.zeroAmtInvoice = false;\n if (this.paymentRequest && this.paymentRequest.length > 100) {\n this.paymentReq.control.setErrors(null);\n this.zeroAmtInvoice = false;\n this.dataService.decodePayment(this.paymentRequest, true).\n pipe(take(1)).subscribe({\n next: (decodedPayment: PayRequest) => {\n this.paymentDecoded = decodedPayment;\n this.selectedChannelCtrl.setValue(null);\n this.onAdvancedPanelToggle(true, true);\n if (this.paymentDecoded.num_msat && !this.paymentDecoded.num_satoshis) {\n this.paymentDecoded.num_satoshis = (+this.paymentDecoded.num_msat / 1000).toString();\n }\n if (this.paymentDecoded.num_satoshis && this.paymentDecoded.num_satoshis !== '' && this.paymentDecoded.num_satoshis !== '0') {\n this.filteredMinAmtActvChannels = this.filterChannels();\n if (this.filteredMinAmtActvChannels.length && this.filteredMinAmtActvChannels.length > 0) {\n this.selectedChannelCtrl.enable();\n } else {\n this.selectedChannelCtrl.disable();\n }\n this.zeroAmtInvoice = false;\n if (this.selNode && this.selNode.fiatConversion) {\n this.commonService.convertCurrency(+this.paymentDecoded.num_satoshis, CurrencyUnitEnum.SATS, CurrencyUnitEnum.OTHER, (this.selNode.currencyUnits && this.selNode.currencyUnits.length > 2 ? this.selNode.currencyUnits[2] : 'BTC'), this.selNode.fiatConversion).\n pipe(takeUntil(this.unSubs[4])).\n subscribe({\n next: (data) => {\n this.paymentDecodedHint = 'Sending: ' + this.decimalPipe.transform(this.paymentDecoded.num_satoshis) +\n ' Sats (' + data.symbol + ' ' + this.decimalPipe.transform((data.OTHER ? data.OTHER : 0), CURRENCY_UNIT_FORMATS.OTHER) + ') | Memo: ' +\n (this.paymentDecoded.description ? this.paymentDecoded.description : 'None');\n }, error: (error) => {\n this.paymentDecodedHint = 'Sending: ' + this.decimalPipe.transform(this.paymentDecoded.num_satoshis) + ' Sats | Memo: ' + (this.paymentDecoded.description ? this.paymentDecoded.description : 'None') + '. Unable to convert currency.';\n }\n });\n } else {\n this.paymentDecodedHint = 'Sending: ' + this.decimalPipe.transform(this.paymentDecoded.num_satoshis) + ' Sats | Memo: ' + (this.paymentDecoded.description ? this.paymentDecoded.description : 'None');\n }\n } else {\n this.zeroAmtInvoice = true;\n this.filteredMinAmtActvChannels = this.activeChannels;\n if (this.filteredMinAmtActvChannels.length && this.filteredMinAmtActvChannels.length > 0) {\n this.selectedChannelCtrl.enable();\n } else {\n this.selectedChannelCtrl.disable();\n }\n this.paymentDecodedHint = 'Memo: ' + (this.paymentDecoded.description ? this.paymentDecoded.description : 'None');\n }\n }, error: (err) => {\n this.logger.error(err);\n this.paymentDecodedHint = 'ERROR: ' + err.message;\n this.paymentReq.control.setErrors({ decodeError: true });\n }\n });\n }\n }\n\n onAdvancedPanelToggle(isClosed: boolean, isReset: boolean) {\n if (isClosed && !isReset) {\n const alias = (this.selectedChannelCtrl.value && this.selectedChannelCtrl.value.remote_alias) ? this.selectedChannelCtrl.value.remote_alias : (this.selectedChannelCtrl.value && this.selectedChannelCtrl.value.chan_id) ? this.selectedChannelCtrl.value.chan_id : '';\n this.advancedTitle = 'Advanced Options | ' + this.selFeeLimitType.name + (this.selFeeLimitType.id === 'none' ? '' : (': ' + this.feeLimit)) + ((alias !== '') ? ' | First Outgoing Channel: ' + alias : '');\n } else {\n this.advancedTitle = 'Advanced Options';\n }\n }\n\n resetData() {\n this.paymentDecoded = {};\n this.paymentRequest = '';\n this.selectedChannelCtrl.setValue(null);\n this.filteredMinAmtActvChannels = this.activeChannels;\n if (this.filteredMinAmtActvChannels.length && this.filteredMinAmtActvChannels.length > 0) {\n this.selectedChannelCtrl.enable();\n } else {\n this.selectedChannelCtrl.disable();\n }\n this.feeLimit = null;\n this.selFeeLimitType = FEE_LIMIT_TYPES[0];\n this.advancedTitle = 'Advanced Options';\n this.zeroAmtInvoice = false;\n this.paymentReq.control.setErrors(null);\n this.paymentError = '';\n this.paymentDecodedHint = '';\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n \n {{paymentDecodedHint}}\n Payment request is required.\n \n
\n \n \n
\n
\n
\n \n
\n
\n
\n
\n \n Payments History\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
\n \n \n Creation Date\n {{(payment?.creation_date * 1000) | date:'dd/MMM/y HH:mm'}}\n Payment Hash\n \n {{payment?.payment_hash}}\n \n Payment Request\n \n {{payment?.payment_request}}\n \n Payment Preimage\n \n {{payment?.payment_preimage}}\n \n Description\n \n {{payment?.description}}\n \n Description Hash\n \n {{payment?.description_hash}}\n \n Failure Reason\n {{payment?.failure_reason | camelcaseWithReplace:'failure_reason':'_'}}\n Payment Index{{payment?.payment_index | number}}Fee (Sats){{payment?.fee | number}}Value (Sats){{payment?.value | number}}Hops{{payment?.htlcs[0]?.route?.hops?.length || 0}}\n
\n \n \n Download CSV\n \n
\n
\n \n \n

No payment available.

\n

Getting payments...

\n

{{errorMessage}}

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n Total Attempts: {{payment?.htlcs?.length}}\n \n \n \n {{(htlc.attempt_time_ns / 1000000) | date:'dd/MMM/y HH:mm'}}\n \n \n \n \n {{payment?.payment_hash}}\n \n \n \n HTLC {{i + 1}}\n \n \n \n \n {{payment?.payment_request}}\n \n \n \n \n \n \n \n {{payment?.payment_preimage}}\n \n \n \n {{htlc?.preimage}}\n \n \n \n \n {{payment?.description}}\n \n \n \n \n \n \n \n {{payment?.description_hash}}\n \n \n \n \n \n \n \n {{payment?.failure_reason | camelcaseWithReplace:'failure_reason':'_'}}\n \n \n \n \n \n \n {{payment?.payment_index | number}}\n \n \n {{htlc.attempt_id | number}}\n \n \n \n {{payment?.fee | number:'1.0-0'}}\n \n \n {{htlc.route?.total_fees | number:'1.0-0'}}\n \n \n \n {{payment?.value | number:'1.0-0'}}\n \n \n {{htlc.route?.total_amt | number:'1.0-0'}}\n \n \n \n -\n \n \n {{(htlc.route?.hops?.length || 0) | number:'1.0-0'}}\n \n \n \n \n \n \n
\n
\n \n
\n
\n
\n \n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild, Input, AfterViewInit } from '@angular/core';\nimport { DatePipe, DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faHistory } from '@fortawesome/free-solid-svg-icons';\n\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { GetInfo, Payment, PayRequest, PaymentHTLC, Peer, Hop, ListPayments } from '../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, CurrencyUnitEnum, CURRENCY_UNIT_FORMATS, APICallStatusEnum, UI_MESSAGES, LND_DEFAULT_PAGE_SETTINGS, SortOrderEnum, LND_PAGE_DEFS } from '../../../shared/services/consts-enums-functions';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { DataService } from '../../../shared/services/data.service';\n\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { LightningSendPaymentsComponent } from '../send-payment-modal/send-payment.component';\n\nimport { RTLEffects } from '../../../store/rtl.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert, openConfirmation } from '../../../store/rtl.actions';\nimport { sendPayment } from '../../store/lnd.actions';\nimport { lndNodeInformation, lndNodeSettings, lndPageSettings, payments, peers } from '../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-lightning-payments',\n templateUrl: './lightning-payments.component.html',\n styleUrls: ['./lightning-payments.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Payments') }\n ]\n})\nexport class LightningPaymentsComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @Input() calledFrom = 'transactions'; // Transactions/home\n @ViewChild('sendPaymentForm', { static: false }) form; // Static should be false due to ngIf on form element\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public faHistory = faHistory;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'transactions';\n public tableSetting: TableSetting = { tableId: 'payments', recordsPerPage: PAGE_SIZE, sortBy: 'creation_date', sortOrder: SortOrderEnum.DESCENDING };\n public newlyAddedPayment = '';\n public selNode: SelNodeChild | null = {};\n public information: GetInfo = {};\n public peers: Peer[] = [];\n public payments: any = new MatTableDataSource([]);\n public totalPayments = 100;\n public paymentJSONArr: Payment[] = [];\n public displayedColumns: any[] = [];\n public htlcColumns: any[] = [];\n public paymentDecoded: PayRequest = {};\n public paymentRequest = '';\n public paymentDecodedHint = '';\n private firstOffset = -1;\n private lastOffset = -1;\n public selFilter = '';\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private dataService: DataService, private store: Store, private rtlEffects: RTLEffects, private decimalPipe: DecimalPipe, private datePipe: DatePipe, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[1])).subscribe((nodeInfo: GetInfo) => { this.information = nodeInfo; });\n this.store.select(peers).pipe(takeUntil(this.unSubs[2])).\n subscribe((peersSelector: { peers: Peer[], apiCallStatus: ApiCallStatusPayload }) => {\n this.peers = peersSelector.peers;\n });\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[3])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.unshift('status');\n this.displayedColumns.push('actions');\n this.htlcColumns = [];\n this.displayedColumns.map((col) => this.htlcColumns.push('group_' + col));\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(payments).pipe(takeUntil(this.unSubs[5])).\n subscribe((paymentsSelector: { listPayments: ListPayments, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = paymentsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.paymentJSONArr = paymentsSelector.listPayments.payments || [];\n this.totalPayments = this.paymentJSONArr.length;\n this.firstOffset = +(paymentsSelector.listPayments.first_index_offset || -1);\n this.lastOffset = +(paymentsSelector.listPayments.last_index_offset || -1);\n if (this.paymentJSONArr && this.paymentJSONArr.length > 0 && this.sort && this.paginator && this.displayedColumns.length > 0) {\n // this.loadPaymentsTable(this.paymentJSONArr);\n this.loadPaymentsTable(this.paymentJSONArr.slice(0, this.pageSize));\n }\n this.logger.info(paymentsSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.paymentJSONArr && this.paymentJSONArr.length > 0) {\n // this.loadPaymentsTable(this.paymentJSONArr);\n this.loadPaymentsTable(this.paymentJSONArr.slice(0, this.pageSize));\n }\n }\n\n onSendPayment(): boolean | void {\n if (!this.paymentRequest) {\n return true;\n }\n if (this.paymentDecoded.timestamp) {\n this.sendPayment();\n } else {\n this.dataService.decodePayment(this.paymentRequest, false).\n pipe(take(1)).subscribe((decodedPayment: PayRequest) => {\n this.paymentDecoded = decodedPayment;\n if (this.paymentDecoded.timestamp) {\n if (this.paymentDecoded.num_msat && !this.paymentDecoded.num_satoshis) {\n this.paymentDecoded.num_satoshis = (+this.paymentDecoded.num_msat / 1000).toString();\n } else {\n this.paymentDecoded.num_satoshis = '0';\n }\n this.sendPayment();\n } else {\n this.resetData();\n }\n });\n }\n }\n\n sendPayment() {\n this.newlyAddedPayment = this.paymentDecoded.payment_hash || '';\n if (this.paymentDecoded.num_msat && !this.paymentDecoded.num_satoshis) {\n this.paymentDecoded.num_satoshis = (+this.paymentDecoded.num_msat / 1000).toString();\n }\n if (!this.paymentDecoded.num_satoshis || this.paymentDecoded.num_satoshis === '' || this.paymentDecoded.num_satoshis === '0') {\n const reorderedPaymentDecoded = [\n [{ key: 'payment_hash', value: this.paymentDecoded.payment_hash, title: 'Payment Hash', width: 100 }],\n [{ key: 'destination', value: this.paymentDecoded.destination, title: 'Destination', width: 100 }],\n [{ key: 'description', value: this.paymentDecoded.description, title: 'Description', width: 100 }],\n [{ key: 'timestamp', value: this.paymentDecoded.timestamp, title: 'Creation Date', width: 40, type: DataTypeEnum.DATE_TIME },\n { key: 'expiry', value: this.paymentDecoded.expiry, title: 'Expiry', width: 30, type: DataTypeEnum.NUMBER },\n { key: 'cltv_expiry', value: this.paymentDecoded.cltv_expiry, title: 'CLTV Expiry', width: 30 }]\n ];\n const titleMsg = 'It is a zero amount invoice. Enter the amount (Sats) to pay.';\n this.store.dispatch(openConfirmation({\n payload: {\n data: {\n type: AlertTypeEnum.CONFIRM,\n alertTitle: 'Enter Amount and Confirm Send Payment',\n titleMessage: titleMsg,\n message: reorderedPaymentDecoded,\n noBtnText: 'Cancel',\n yesBtnText: 'Send Payment',\n flgShowInput: true,\n getInputs: [\n { placeholder: 'Amount (Sats)', inputType: DataTypeEnum.NUMBER, inputValue: '', width: 30 }\n ]\n }\n }\n }));\n this.rtlEffects.closeConfirm.\n pipe(take(1)).\n subscribe((confirmRes) => {\n if (confirmRes) {\n this.paymentDecoded.num_satoshis = confirmRes[0].inputValue;\n this.store.dispatch(sendPayment({ payload: { uiMessage: UI_MESSAGES.SEND_PAYMENT, paymentReq: this.paymentRequest, paymentAmount: confirmRes[0].inputValue, fromDialog: false } }));\n this.resetData();\n }\n });\n } else {\n const reorderedPaymentDecoded = [\n [{ key: 'payment_hash', value: this.paymentDecoded.payment_hash, title: 'Payment Hash', width: 100 }],\n [{ key: 'destination', value: this.paymentDecoded.destination, title: 'Destination', width: 100 }],\n [{ key: 'description', value: this.paymentDecoded.description, title: 'Description', width: 100 }],\n [{ key: 'timestamp', value: this.paymentDecoded.timestamp, title: 'Creation Date', width: 50, type: DataTypeEnum.DATE_TIME },\n { key: 'num_satoshis', value: this.paymentDecoded.num_satoshis, title: 'Amount (Sats)', width: 50, type: DataTypeEnum.NUMBER }],\n [{ key: 'expiry', value: this.paymentDecoded.expiry, title: 'Expiry', width: 50, type: DataTypeEnum.NUMBER },\n { key: 'cltv_expiry', value: this.paymentDecoded.cltv_expiry, title: 'CLTV Expiry', width: 50 }]\n ];\n this.store.dispatch(openConfirmation({\n payload: {\n data: {\n type: AlertTypeEnum.CONFIRM,\n alertTitle: 'Confirm Send Payment',\n noBtnText: 'Cancel',\n yesBtnText: 'Send Payment',\n message: reorderedPaymentDecoded\n }\n }\n }));\n this.rtlEffects.closeConfirm.\n pipe(take(1)).\n subscribe((confirmRes) => {\n if (confirmRes) {\n this.store.dispatch(sendPayment({ payload: { uiMessage: UI_MESSAGES.SEND_PAYMENT, paymentReq: this.paymentRequest, fromDialog: false } }));\n this.resetData();\n }\n });\n }\n }\n\n openSendPaymentModal() {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n component: LightningSendPaymentsComponent\n }\n }\n }));\n }\n\n onPaymentRequestEntry(event: any) {\n this.paymentRequest = event;\n this.paymentDecodedHint = '';\n if (this.paymentRequest && this.paymentRequest.length > 100) {\n this.dataService.decodePayment(this.paymentRequest, false).\n pipe(take(1)).subscribe((decodedPayment: PayRequest) => {\n this.paymentDecoded = decodedPayment;\n if (this.paymentDecoded.num_msat && !this.paymentDecoded.num_satoshis) {\n this.paymentDecoded.num_satoshis = (+this.paymentDecoded.num_msat / 1000).toString();\n }\n if (this.paymentDecoded.num_satoshis) {\n if (this.selNode && this.selNode.fiatConversion) {\n this.commonService.convertCurrency(+this.paymentDecoded.num_satoshis, CurrencyUnitEnum.SATS, CurrencyUnitEnum.OTHER, (this.selNode.currencyUnits && this.selNode.currencyUnits.length > 2 ? this.selNode.currencyUnits[2] : ''), this.selNode.fiatConversion).\n pipe(takeUntil(this.unSubs[6])).\n subscribe({\n next: (data) => {\n this.paymentDecodedHint = 'Sending: ' + this.decimalPipe.transform(this.paymentDecoded.num_satoshis ? this.paymentDecoded.num_satoshis : 0) + ' Sats (' + data.symbol +\n this.decimalPipe.transform((data.OTHER ? data.OTHER : 0), CURRENCY_UNIT_FORMATS.OTHER) + ') | Memo: ' + this.paymentDecoded.description;\n }, error: (error) => {\n this.paymentDecodedHint = 'Sending: ' + this.decimalPipe.transform(this.paymentDecoded.num_satoshis ? this.paymentDecoded.num_satoshis : 0) + ' Sats | Memo: ' + this.paymentDecoded.description + '. Unable to convert currency.';\n }\n });\n } else {\n this.paymentDecodedHint = 'Sending: ' + this.decimalPipe.transform(this.paymentDecoded.num_satoshis ? this.paymentDecoded.num_satoshis : 0) + ' Sats | Memo: ' + this.paymentDecoded.description;\n }\n } else {\n this.paymentDecodedHint = 'Zero Amount Invoice | Memo: ' + this.paymentDecoded.description;\n }\n });\n }\n }\n\n onPageChange(event: any) {\n let reverse = true;\n let index_offset = this.lastOffset;\n this.pageSize = event.pageSize;\n if (event.pageIndex === 0) {\n reverse = true;\n index_offset = 0;\n } else if (event.pageIndex < event.previousPageIndex) {\n reverse = false;\n index_offset = this.lastOffset;\n } else if (event.pageIndex > event.previousPageIndex && (event.length > ((event.pageIndex + 1) * event.pageSize))) {\n reverse = true;\n index_offset = this.firstOffset;\n } else if (event.length <= ((event.pageIndex + 1) * event.pageSize)) {\n reverse = false;\n index_offset = 0;\n }\n const starting_index = event.pageIndex * this.pageSize;\n this.loadPaymentsTable(this.paymentJSONArr.slice(starting_index, (starting_index + this.pageSize)));\n // this.store.dispatch(fetchPayments({ payload: { max_payments: page_size, index_offset: index_offset, reversed: reverse } }));\n }\n\n is_group(index: number, payment: Payment) {\n return payment.htlcs && payment.htlcs.length > 1;\n }\n\n resetData() {\n this.paymentDecoded = {};\n this.paymentRequest = '';\n this.form.resetForm();\n }\n\n getHopDetails(currentHop: Hop) {\n const self = this;\n return new Promise((resolve, reject) => {\n const peerFound = self.peers.find((peer) => peer.pub_key === currentHop.pub_key);\n if (peerFound && peerFound.alias) {\n resolve('
Channel: ' + peerFound.alias.padEnd(20) + '			Amount (Sats): ' + self.decimalPipe.transform(currentHop.amt_to_forward) + '
');\n } else {\n self.dataService.getAliasesFromPubkeys((currentHop.pub_key || ''), false).\n pipe(takeUntil(self.unSubs[7])).\n subscribe({\n next: (res: any) => resolve('
Channel: ' + (res.node && res.node.alias ? res.node.alias.padEnd(20) : (currentHop.pub_key?.substring(0, 17) + '...')) + '			Amount (Sats): ' + self.decimalPipe.transform(currentHop.amt_to_forward) + '
'),\n error: (error) => resolve('
Channel: ' + (currentHop.pub_key ? (currentHop.pub_key?.substring(0, 17) + '...') : '') + '			Amount (Sats): ' + self.decimalPipe.transform(currentHop.amt_to_forward) + '
')\n });\n }\n });\n }\n\n onHTLCClick(selHtlc: PaymentHTLC, selPayment: Payment) {\n if (selPayment.payment_request && selPayment.payment_request.trim() !== '') {\n this.dataService.decodePayment(selPayment.payment_request, false).\n pipe(take(1)).subscribe({\n next: (decodedPayment: PayRequest) => {\n setTimeout(() => {\n this.showHTLCView(selHtlc, selPayment, decodedPayment);\n }, 0);\n }, error: (error) => {\n this.showHTLCView(selHtlc, selPayment);\n }\n });\n } else {\n this.showHTLCView(selHtlc, selPayment);\n }\n }\n\n showHTLCView(selHtlc: PaymentHTLC, selPayment: Payment, decodedPayment?: PayRequest) {\n if (selHtlc.route && selHtlc.route.hops && selHtlc.route.hops.length) {\n Promise.all(selHtlc.route.hops.map((hop) => this.getHopDetails(hop))).then((detailsAll: any) => {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'HTLC Information',\n message: this.prepareData(selHtlc, selPayment, decodedPayment, detailsAll),\n scrollable: selHtlc.route && selHtlc.route.hops && selHtlc.route.hops.length > 1\n }\n }\n }));\n });\n } else {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'HTLC Information',\n message: this.prepareData(selHtlc, selPayment, decodedPayment, []),\n scrollable: selHtlc.route && selHtlc.route.hops && selHtlc.route.hops.length > 1\n }\n }\n }));\n }\n }\n\n prepareData(selHtlc: PaymentHTLC, selPayment: Payment, decodedPayment?: PayRequest, hopsDetails?: any) {\n const modifiedData = [\n [{ key: 'payment_hash', value: selPayment.payment_hash, title: 'Payment Hash', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'preimage', value: selHtlc.preimage, title: 'Preimage', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'payment_request', value: selPayment.payment_request, title: 'Payment Request', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'status', value: selHtlc.status, title: 'Status', width: 33, type: DataTypeEnum.STRING },\n { key: 'attempt_time_ns', value: +(selHtlc.attempt_time_ns || 0) / 1000000000, title: 'Attempt Time', width: 33, type: DataTypeEnum.DATE_TIME },\n { key: 'resolve_time_ns', value: +(selHtlc.resolve_time_ns || 0) / 1000000000, title: 'Resolve Time', width: 34, type: DataTypeEnum.DATE_TIME }],\n [{ key: 'total_amt', value: selHtlc.route?.total_amt, title: 'Amount (Sats)', width: 33, type: DataTypeEnum.NUMBER },\n { key: 'total_fees', value: selHtlc.route?.total_fees, title: 'Fee (Sats)', width: 33, type: DataTypeEnum.NUMBER },\n { key: 'total_time_lock', value: selHtlc.route?.total_time_lock, title: 'Total Time Lock', width: 34, type: DataTypeEnum.NUMBER }],\n [{ key: 'hops', value: hopsDetails, title: 'Hops', width: 100, type: DataTypeEnum.ARRAY }]\n ];\n if (decodedPayment && decodedPayment.description && decodedPayment.description !== '') {\n modifiedData.splice(3, 0, [{ key: 'description', value: decodedPayment.description, title: 'Description', width: 100, type: DataTypeEnum.STRING }]);\n }\n return modifiedData;\n }\n\n onPaymentClick(selPayment: Payment) {\n if (selPayment.htlcs && selPayment.htlcs[0] && selPayment.htlcs[0].route && selPayment.htlcs[0].route.hops && selPayment.htlcs[0].route.hops.length > 0) {\n const nodePubkeys = selPayment.htlcs[0].route.hops?.reduce((pubkeys, hop) => (hop.pub_key && pubkeys === '' ? hop.pub_key : pubkeys + ',' + hop.pub_key), '');\n this.dataService.getAliasesFromPubkeys(nodePubkeys, true).pipe(takeUntil(this.unSubs[8])).\n subscribe((nodes: any) => {\n this.showPaymentView(selPayment, nodes?.reduce((pathAliases, node) => (pathAliases === '' ? node : pathAliases + '\\n' + node), ''));\n });\n } else {\n this.showPaymentView(selPayment, '');\n }\n }\n\n showPaymentView(selPayment: Payment, pathAliases: string) {\n const reorderedPayment = [\n [{ key: 'payment_hash', value: selPayment.payment_hash, title: 'Payment Hash', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'payment_preimage', value: selPayment.payment_preimage, title: 'Payment Preimage', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'payment_request', value: selPayment.payment_request, title: 'Payment Request', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'status', value: selPayment.status, title: 'Status', width: 50, type: DataTypeEnum.STRING },\n { key: 'creation_date', value: selPayment.creation_date, title: 'Creation Date', width: 50, type: DataTypeEnum.DATE_TIME }],\n [{ key: 'value_msat', value: selPayment.value_msat, title: 'Value (mSats)', width: 50, type: DataTypeEnum.NUMBER },\n { key: 'fee_msat', value: selPayment.fee_msat, title: 'Fee (mSats)', width: 50, type: DataTypeEnum.NUMBER }],\n [{ key: 'path', value: pathAliases, title: 'Path', width: 100, type: DataTypeEnum.STRING }]\n ];\n if (selPayment.payment_request && selPayment.payment_request.trim() !== '') {\n this.dataService.decodePayment(selPayment.payment_request, false).\n pipe(take(1)).subscribe((decodedPayment: PayRequest) => {\n if (decodedPayment && decodedPayment.description && decodedPayment.description !== '') {\n reorderedPayment.splice(3, 0, [{ key: 'description', value: decodedPayment.description, title: 'Description', width: 100, type: DataTypeEnum.STRING }]);\n }\n setTimeout(() => {\n this.openPaymentAlert(reorderedPayment, !!(selPayment.htlcs && selPayment.htlcs[0] && selPayment.htlcs[0].route && selPayment.htlcs[0].route.hops && selPayment.htlcs[0].route.hops.length > 1));\n }, 0);\n });\n } else {\n this.openPaymentAlert(reorderedPayment, false);\n }\n }\n\n openPaymentAlert(data: any, shouldScroll: boolean) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Payment Information',\n message: data,\n scrollable: shouldScroll\n }\n }\n }));\n }\n\n applyFilter() {\n this.payments.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.payments.filterPredicate = (rowData: Payment, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = ((rowData.creation_date) ? this.datePipe.transform(new Date(rowData.creation_date * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() : '') + JSON.stringify(rowData).toLowerCase();\n break;\n\n case 'status':\n case 'group_status':\n rowToFilter = rowData?.status === 'SUCCEEDED' ? 'succeeded' : 'failed';\n break;\n\n case 'creation_date':\n rowToFilter = this.datePipe.transform(new Date((rowData[this.selFilterBy] || 0) * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() || '';\n break;\n\n case 'failure_reason':\n case 'group_failure_reason':\n rowToFilter = this.camelCaseWithReplace.transform((rowData.failure_reason || ''), 'failure_reason', '_').trim().toLowerCase();\n break;\n\n case 'hops':\n rowToFilter = rowData.htlcs && rowData.htlcs[0] && rowData.htlcs[0].route && rowData.htlcs[0].route.hops && rowData.htlcs[0].route.hops.length ? rowData.htlcs[0].route.hops.length.toString() : '0';\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return (this.selFilterBy === 'failure_reason' || this.selFilterBy === 'group_failure_reason') ? rowToFilter.indexOf(fltr) === 0 : rowToFilter.includes(fltr);\n };\n }\n\n loadPaymentsTable(payms) {\n this.payments = payms ? new MatTableDataSource([...payms]) : new MatTableDataSource([]);\n this.payments.sortingDataAccessor = (data: any, sortHeaderId: string) => {\n switch (sortHeaderId) {\n case 'hops':\n return (data.htlcs.length && data.htlcs[0] && data.htlcs[0].route && data.htlcs[0].route.hops && data.htlcs[0].route.hops.length) ? data.htlcs[0].route.hops.length : 0;\n\n default:\n return (data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null;\n }\n };\n this.payments.sort = this.sort;\n this.payments.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.setFilterPredicate();\n this.applyFilter();\n }\n\n onDownloadCSV() {\n if (this.payments.data && this.payments.data.length > 0) {\n const paymentsDataCopy = JSON.parse(JSON.stringify(this.payments.data));\n const paymentRequests = paymentsDataCopy?.reduce((paymentReqs, payment) => {\n if (payment.payment_request && payment.payment_request.trim() !== '') {\n paymentReqs = (paymentReqs === '') ? payment.payment_request : paymentReqs + ',' + payment.payment_request;\n }\n return paymentReqs;\n }, '');\n this.dataService.decodePayments(paymentRequests).\n pipe(takeUntil(this.unSubs[9])).\n subscribe((decodedPayments: PayRequest[]) => {\n let increament = 0;\n decodedPayments.forEach((decodedPayment, idx) => {\n if (decodedPayment) {\n while (paymentsDataCopy[idx + increament].payment_hash !== decodedPayment.payment_hash) {\n increament = increament + 1;\n }\n paymentsDataCopy[idx + increament].description = decodedPayment.description;\n }\n });\n const flattenedPayments = paymentsDataCopy?.reduce((acc, curr) => acc.concat(curr), []);\n this.commonService.downloadFile(flattenedPayments, 'Payments');\n });\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n

Alias

\n
\n {{information?.alias}}\n \n
\n
\n
\n

Color

\n
\n \n {{information?.color | uppercase}}\n
\n
\n
\n

Implementation

\n
{{(information?.lnImplementation || information?.version) ? information?.lnImplementation + ' ' + information?.version : ''}}
\n
\n
\n

Chain

\n \n \n {{chain}}\n
\n
\n","import { Component, OnChanges, Input } from '@angular/core';\nimport { GetInfo } from '../../../shared/models/lndModels';\nimport { CommonService } from '../../../shared/services/common.service';\n\n@Component({\n selector: 'rtl-node-info',\n templateUrl: './node-info.component.html',\n styleUrls: ['./node-info.component.scss']\n})\nexport class NodeInfoComponent implements OnChanges {\n\n @Input() information: GetInfo;\n @Input() showColorFieldSeparately: boolean;\n public chains: Array = [''];\n\n constructor(private commonService: CommonService) { }\n\n ngOnChanges() {\n if (this.information && this.information.chains && this.information.chains.length > 0) {\n this.chains = [''];\n this.information.chains.forEach((chain) => {\n this.chains.push(this.commonService.titleCase(chain.chain) + ' ' + this.commonService.titleCase(chain.network));\n });\n }\n }\n\n}\n","
\n
\n

Lightning

\n
{{balances?.lightning | number}} Sats
\n \n
\n
\n

On-chain

\n
{{balances?.onchain | number}} Sats
\n \n
\n
\n

Total

\n
{{balances?.total | number}} Sats
\n
\n
\n\n
\n

{{errorMessage}}

\n
\n
\n","import { Component, Input } from '@angular/core';\n\n@Component({\n selector: 'rtl-balances-info',\n templateUrl: './balances-info.component.html',\n styleUrls: ['./balances-info.component.scss']\n})\nexport class BalancesInfoComponent {\n\n @Input() balances = { onchain: 0, lightning: 0, total: 0 };\n @Input() errorMessage: string;\n\n constructor() {}\n\n}\n","
\n
\n
\n

Daily

\n
{{fees?.day_fee_sum | number}} Sats
\n
\n
\n

Weekly

\n
{{fees?.week_fee_sum | number}} Sats
\n
\n
\n

Monthly

\n
{{fees?.month_fee_sum | number}} Sats
\n
\n
\n

\n \n
\n
\n
\n
\n

Transactions

\n
{{fees?.daily_tx_count | number}}
\n
\n
\n

Transactions

\n
{{fees?.weekly_tx_count | number}}
\n
\n
\n

Transactions

\n
{{fees?.monthly_tx_count | number}}
\n
\n
\n

\n \n
\n
\n
\n\n
\n

{{errorMessage}}

\n
\n
\n","import { Component, OnChanges, Input } from '@angular/core';\nimport { Fees } from '../../../shared/models/lndModels';\n\n@Component({\n selector: 'rtl-fee-info',\n templateUrl: './fee-info.component.html',\n styleUrls: ['./fee-info.component.scss']\n})\nexport class FeeInfoComponent implements OnChanges {\n\n @Input() fees: Fees;\n @Input() errorMessage: string;\n totalFees = [{ name: 'Monthly', value: 0 }, { name: 'Weekly', value: 0 }, { name: 'Daily', value: 0 }];\n maxFeeValue = 100;\n\n constructor() { }\n\n ngOnChanges() {\n if (this.fees.month_fee_sum) {\n this.totalFees = [{ name: 'Monthly', value: this.fees.month_fee_sum }, { name: 'Weekly', value: (this.fees.week_fee_sum || 0) }, { name: 'Daily ', value: (this.fees.day_fee_sum || 0) }];\n const e = Math.ceil(Math.log(this.fees.month_fee_sum + 1) / Math.LN10);\n const m = 10 ** (e - 1);\n this.maxFeeValue = (Math.ceil(this.fees.month_fee_sum / m) * m) / 5 || 100;\n Object.assign(this, this.totalFees);\n } else {\n this.totalFees = [{ name: 'Monthly', value: 0 }, { name: 'Weekly', value: 0 }, { name: 'Daily', value: 0 }];\n this.maxFeeValue = 100;\n Object.assign(this, this.totalFees);\n }\n }\n\n}\n","
\n
\n
\n

Active

\n
{{(channelsStatus?.active?.num_channels || 0) | number}}
\n
\n
\n

Pending

\n
{{(channelsStatus?.pending?.num_channels || 0) | number}}
\n
\n
\n

Inactive

\n
{{(channelsStatus?.inactive?.num_channels || 0) | number}}
\n
\n
\n

Closing

\n
{{(channelsStatus?.closing?.num_channels || 0) | number}}
\n
\n
\n
\n
\n

Capacity

\n
{{(channelsStatus?.active?.capacity || 0) | number}} Sats
\n
\n
\n

Capacity

\n
{{(channelsStatus?.pending?.capacity || 0) | number}} Sats
\n
\n
\n

Capacity

\n
{{(channelsStatus?.inactive?.capacity || 0) | number}} Sats
\n
\n
\n

Capacity

\n
{{(channelsStatus?.closing?.capacity || 0) | number}} Sats
\n
\n
\n
\n\n
\n

{{errorMessage}}

\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { ChannelsStatus } from '../../../shared/models/lndModels';\n\n@Component({\n selector: 'rtl-channel-status-info',\n templateUrl: './channel-status-info.component.html',\n styleUrls: ['./channel-status-info.component.scss']\n})\nexport class ChannelStatusInfoComponent {\n\n @Input() channelsStatus: ChannelsStatus = {};\n @Input() errorMessage: string;\n\n constructor() {}\n\n}\n","
\n
\n Total Capacity\n
\n Local:{{channelBalances?.localBalance || 0 | number}} Sats\n \n \n ({{channelBalances?.balancedness || 0 | number}})\n \n Remote:{{channelBalances?.remoteBalance || 0 | number}} Sats\n
\n 0 ? ((+channelBalances?.localBalance/((+channelBalances?.localBalance)+(+channelBalances?.remoteBalance)))*100) : 0}}\">\n
\n
\n
\n
0; else noChannelBlock\" fxLayout=\"column\"fxFlex=\"100\">\n
\n \n {{(channel.remote_alias || channel.remote_pubkey) | slice:0:24}}{{(channel.remote_alias || channel.remote_pubkey).length > 25 ? '...' : ''}}\n \n
\n Local:{{channel.local_balance || 0 | number}} Sats\n \n \n ({{channel.balancedness || 0 | number}})\n \n Remote:{{channel.remote_balance || 0 | number}} Sats\n
\n 0 ? ((+channel.local_balance/((+channel.local_balance)+(+channel.remote_balance)))*100) : 0}}\">\n
\n
\n
\n
\n\n
\n No channels available.\n \n
\n
\n\n
\n

{{errorMessage}}

\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { faBalanceScale, faDumbbell } from '@fortawesome/free-solid-svg-icons';\n\nimport { Channel } from '../../../shared/models/lndModels';\n\n@Component({\n selector: 'rtl-channel-capacity-info',\n templateUrl: './channel-capacity-info.component.html',\n styleUrls: ['./channel-capacity-info.component.scss']\n})\nexport class ChannelCapacityInfoComponent {\n\n public faBalanceScale = faBalanceScale;\n public faDumbbell = faDumbbell;\n @Input() channelBalances: {localBalance: number, remoteBalance: number, balancedness: number};\n @Input() allChannels: Channel[];\n @Input() sortBy = 'Balance Score';\n @Input() errorMessage: string;\n\n constructor(private router: Router) {}\n\n goToChannels() {\n this.router.navigateByUrl('/lnd/connections');\n }\n\n}\n","
\n
\n Total Capacity\n {{totalLiquidity | number}} Sats\n \n
\n
\n
0; else noChannelBlock\"[perfectScrollbar]>\n
\n \n {{(channel.remote_alias || channel.remote_pubkey) | slice:0:24}}{{(channel.remote_alias || channel.remote_pubkey).length > 25 ? '...' : ''}}\n \n
\n Capacity: {{channel.remote_balance || 0 | number}} Sats\n
\n Capacity: {{channel.local_balance || 0 | number}} Sats\n \n
\n
\n 0) ? ((+channel.remote_balance || 0)/(totalLiquidity) * 100) : 0}}\">\n 0) ? ((+channel.local_balance || 0)/(totalLiquidity) * 100) : 0}}\">\n
\n
\n
\n\n
\n No channels available.\n \n
\n
\n\n
\n

{{errorMessage}}

\n
\n
\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { ScreenSizeEnum, LoopTypeEnum } from '../../../shared/services/consts-enums-functions';\nimport { Channel } from '../../../shared/models/lndModels';\nimport { LoopModalComponent } from '../../../shared/components/ln-services/loop/loop-modal/loop-modal.component';\nimport { LoopService } from '../../../shared/services/loop.service';\nimport { CommonService } from '../../../shared/services/common.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert } from '../../../store/rtl.actions';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { lndNodeSettings } from '../../store/lnd.selector';\n\n@Component({\n selector: 'rtl-channel-liquidity-info',\n templateUrl: './channel-liquidity-info.component.html',\n styleUrls: ['./channel-liquidity-info.component.scss']\n})\nexport class ChannelLiquidityInfoComponent implements OnInit, OnDestroy {\n\n @Input() direction: string;\n @Input() totalLiquidity: number;\n @Input() allChannels: Channel[];\n @Input() errorMessage: string;\n public showLoop: boolean;\n private targetConf = 6;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private router: Router, private loopService: LoopService, private commonService: CommonService, private store: Store) { }\n\n ngOnInit() {\n this.screenSize = this.commonService.getScreenSize();\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => {\n this.showLoop = !!((nodeSettings?.swapServerUrl && nodeSettings.swapServerUrl.trim() !== ''));\n });\n }\n\n goToChannels() {\n this.router.navigateByUrl('/lnd/connections');\n }\n\n onLoopOut(channel: Channel) {\n this.loopService.getLoopOutTermsAndQuotes(this.targetConf).\n pipe(takeUntil(this.unSubs[1])).\n subscribe((response) => {\n this.store.dispatch(openAlert({\n payload: {\n minHeight: '56rem', data: {\n channel: channel,\n minQuote: response[0],\n maxQuote: response[1],\n direction: LoopTypeEnum.LOOP_OUT,\n component: LoopModalComponent\n }\n }\n }));\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n {{apiCallStatusNodeInfo.status === apiCallStatusEnum.COMPLETED ? 'Welcome ' + information.alias + '! Your node is up and running.' : apiCallStatusNodeInfo.status === apiCallStatusEnum.INITIATED ? 'Wait! Getting your node information...' : 'Error! Please check the server connection.'}}\n
\n \n \n \n \n \n
\n \n {{card.title}}\n
\n
\n \n \n \n \n \n
\n
\n
\n \n \n
\n \n \n \n \n \n

Error! Unable to find information!

\n
\n
\n
\n
\n
\n
\n\n
\n \n Welcome {{information.alias}}! Your node is up and running.\n
\n \n \n \n \n \n
\n \n {{card.title}}\n
\n
\n \n \n \n \n
\n
\n
\n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n

Error! Unable to find information!

\n
\n
\n
\n
\n
\n
","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faSmile, faFrown } from '@fortawesome/free-regular-svg-icons';\nimport { faAngleDoubleDown, faAngleDoubleUp, faChartPie, faBolt, faServer, faNetworkWired } from '@fortawesome/free-solid-svg-icons';\n\nimport { LoggerService } from '../../shared/services/logger.service';\nimport { CommonService } from '../../shared/services/common.service';\nimport { UserPersonaEnum, ScreenSizeEnum, APICallStatusEnum, LNDActions } from '../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';\nimport { ChannelsStatus, GetInfo, Fees, Channel, BlockchainBalance, PendingChannels, PendingChannelsSummary, ChannelsSummary, LightningBalance } from '../../shared/models/lndModels';\nimport { SelNodeChild } from '../../shared/models/RTLconfig';\n\nimport { RTLState } from '../../store/rtl.state';\nimport { blockchainBalance, channels, fees, nodeInfoAndNodeSettingsAndAPIStatus, pendingChannels } from '../store/lnd.selector';\n\nexport interface Tile {\n id: string;\n title: string;\n cols: number;\n rows: number;\n goToOptions?: string[];\n links?: string[];\n icon?: any;\n}\n\n@Component({\n selector: 'rtl-home',\n templateUrl: './home.component.html',\n styleUrls: ['./home.component.scss']\n})\nexport class HomeComponent implements OnInit, OnDestroy {\n\n public faSmile = faSmile;\n public faFrown = faFrown;\n public faAngleDoubleDown = faAngleDoubleDown;\n public faAngleDoubleUp = faAngleDoubleUp;\n public faChartPie = faChartPie;\n public faBolt = faBolt;\n public faServer = faServer;\n public faNetworkWired = faNetworkWired;\n public flgChildInfoUpdated = false;\n public userPersonaEnum = UserPersonaEnum;\n public activeChannels = 0;\n public inactiveChannels = 0;\n public channelBalances = { localBalance: 0, remoteBalance: 0, balancedness: 0 };\n public selNode: SelNodeChild | null = {};\n public fees: Fees;\n public information: GetInfo = {};\n public balances = { onchain: -1, lightning: -1, total: 0 };\n public allChannels: Channel[] = [];\n public channelsStatus: ChannelsStatus = {};\n public allChannelsCapacity: Channel[] = [];\n public allInboundChannels: Channel[] = [];\n public allOutboundChannels: Channel[] = [];\n public totalInboundLiquidity = 0;\n public totalOutboundLiquidity = 0;\n public operatorCards: Tile[] = [];\n public merchantCards: Tile[] = [];\n public screenSize = '';\n public operatorCardHeight = '390px';\n public merchantCardHeight = '62px';\n public sortField = 'Balance Score';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessages = ['', '', '', '', ''];\n public apiCallStatusNodeInfo: ApiCallStatusPayload | null = null;\n public apiCallStatusFees: ApiCallStatusPayload | null = null;\n public apiCallStatusBlockchainBalance: ApiCallStatusPayload | null = null;\n public apiCallStatusChannels: ApiCallStatusPayload | null = null;\n public apiCallStatusPendingChannels: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private actions: Actions, private commonService: CommonService, private router: Router) {\n this.screenSize = this.commonService.getScreenSize();\n switch (this.screenSize) {\n case ScreenSizeEnum.XS:\n this.operatorCards = [\n { id: 'node', goToOptions: [], links: [], icon: this.faServer, title: 'Node Information', cols: 10, rows: 1 },\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 10, rows: 1 },\n { id: 'fee', goToOptions: ['Routing', 'Fees Summary'], links: ['routing', 'reports'], icon: this.faBolt, title: 'Routing Fee', cols: 10, rows: 1 },\n { id: 'status', goToOptions: ['Channels', 'Inactive Channels'], links: ['connections', 'inactive'], icon: this.faNetworkWired, title: 'Channels', cols: 10, rows: 1 },\n { id: 'capacity', goToOptions: ['Channels'], links: ['connections'], icon: this.faNetworkWired, title: 'Channels Capacity', cols: 10, rows: 2 }\n ];\n this.merchantCards = [\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 6, rows: 4 },\n { id: 'transactions', goToOptions: ['Transactions', 'Transactions Summary'], links: ['transactions', 'reports/transactions'], title: '', cols: 6, rows: 6 },\n { id: 'inboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleDown, title: 'In-Bound Liquidity', cols: 6, rows: 8 },\n { id: 'outboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleUp, title: 'Out-Bound Liquidity', cols: 6, rows: 8 }\n ];\n break;\n\n case ScreenSizeEnum.SM:\n this.operatorCards = [\n { id: 'node', goToOptions: [], links: [], icon: this.faServer, title: 'Node Information', cols: 5, rows: 1 },\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 5, rows: 1 },\n { id: 'fee', goToOptions: ['Routing', 'Fees Summary'], links: ['routing', 'reports'], icon: this.faBolt, title: 'Routing Fee', cols: 5, rows: 1 },\n { id: 'status', goToOptions: ['Channels', 'Inactive Channels'], links: ['connections', 'inactive'], icon: this.faNetworkWired, title: 'Channels', cols: 5, rows: 1 },\n { id: 'capacity', goToOptions: ['Channels'], links: ['connections'], icon: this.faNetworkWired, title: 'Channels Capacity', cols: 10, rows: 2 }\n ];\n this.merchantCards = [\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 3, rows: 4 },\n { id: 'transactions', goToOptions: ['Transactions', 'Transactions Summary'], links: ['transactions', 'reports/transactions'], title: '', cols: 3, rows: 4 },\n { id: 'inboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleDown, title: 'In-Bound Liquidity', cols: 3, rows: 8 },\n { id: 'outboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleUp, title: 'Out-Bound Liquidity', cols: 3, rows: 8 }\n ];\n break;\n\n case ScreenSizeEnum.MD:\n this.operatorCards = [\n { id: 'node', goToOptions: [], links: [], icon: this.faServer, title: 'Node Information', cols: 5, rows: 1 },\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 5, rows: 1 },\n { id: 'fee', goToOptions: ['Routing', 'Fees Summary'], links: ['routing', 'reports'], icon: this.faBolt, title: 'Routing Fee', cols: 5, rows: 1 },\n { id: 'status', goToOptions: ['Channels', 'Inactive Channels'], links: ['connections', 'inactive'], icon: this.faNetworkWired, title: 'Channels', cols: 5, rows: 1 },\n { id: 'capacity', goToOptions: ['Channels'], links: ['connections'], icon: this.faNetworkWired, title: 'Channels Capacity', cols: 10, rows: 2 }\n ];\n this.merchantCards = [\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 3, rows: 4 },\n { id: 'transactions', goToOptions: ['Transactions', 'Transactions Summary'], links: ['transactions', 'reports/transactions'], title: '', cols: 3, rows: 4 },\n { id: 'inboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleDown, title: 'In-Bound Liquidity', cols: 3, rows: 8 },\n { id: 'outboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleUp, title: 'Out-Bound Liquidity', cols: 3, rows: 8 }\n ];\n break;\n\n default:\n this.operatorCards = [\n { id: 'node', goToOptions: [], links: [], icon: this.faServer, title: 'Node Information', cols: 3, rows: 1 },\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 3, rows: 1 },\n { id: 'capacity', goToOptions: ['Channels'], links: ['connections'], icon: this.faNetworkWired, title: 'Channels Capacity', cols: 4, rows: 2 },\n { id: 'fee', goToOptions: ['Routing', 'Fees Summary'], links: ['routing', 'reports'], icon: this.faBolt, title: 'Routing Fee', cols: 3, rows: 1 },\n { id: 'status', goToOptions: ['Channels', 'Inactive Channels'], links: ['connections', 'inactive'], icon: this.faNetworkWired, title: 'Channels', cols: 3, rows: 1 }\n ];\n this.merchantCards = [\n { id: 'balance', goToOptions: ['On-Chain'], links: ['onchain'], icon: this.faChartPie, title: 'Balances', cols: 2, rows: 5 },\n { id: 'inboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleDown, title: 'In-Bound Liquidity', cols: 2, rows: 10 },\n { id: 'outboundLiq', goToOptions: ['Channels'], links: ['connections'], icon: this.faAngleDoubleUp, title: 'Out-Bound Liquidity', cols: 2, rows: 10 },\n { id: 'transactions', goToOptions: ['Transactions', 'Transactions Summary'], links: ['transactions', 'reports/transactions'], title: '', cols: 2, rows: 5 }\n ];\n break;\n }\n }\n\n ngOnInit() {\n this.store.select(nodeInfoAndNodeSettingsAndAPIStatus).pipe(takeUntil(this.unSubs[0])).\n subscribe((infoSettingsStatusSelector: { information: GetInfo, nodeSettings: SelNodeChild | null, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[0] = '';\n this.apiCallStatusNodeInfo = infoSettingsStatusSelector.apiCallStatus;\n if (this.apiCallStatusNodeInfo.status === APICallStatusEnum.ERROR) {\n this.errorMessages[0] = (typeof (this.apiCallStatusNodeInfo.message) === 'object') ? JSON.stringify(this.apiCallStatusNodeInfo.message) : this.apiCallStatusNodeInfo.message ? this.apiCallStatusNodeInfo.message : '';\n }\n this.selNode = infoSettingsStatusSelector.nodeSettings;\n this.information = infoSettingsStatusSelector.information;\n });\n this.store.select(fees).pipe(takeUntil(this.unSubs[1])).\n subscribe((feesSelector: { fees: Fees, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[1] = '';\n this.apiCallStatusFees = feesSelector.apiCallStatus;\n if (this.apiCallStatusFees.status === APICallStatusEnum.ERROR) {\n this.errorMessages[1] = (typeof (this.apiCallStatusFees.message) === 'object') ? JSON.stringify(this.apiCallStatusFees.message) : this.apiCallStatusFees.message ? this.apiCallStatusFees.message : '';\n }\n this.fees = feesSelector.fees;\n });\n this.store.select(blockchainBalance).pipe(takeUntil(this.unSubs[2])).\n subscribe((bcBalanceSelector: { blockchainBalance: BlockchainBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[2] = '';\n this.apiCallStatusBlockchainBalance = bcBalanceSelector.apiCallStatus;\n if (this.apiCallStatusBlockchainBalance.status === APICallStatusEnum.ERROR) {\n this.errorMessages[2] = (typeof (this.apiCallStatusBlockchainBalance.message) === 'object') ? JSON.stringify(this.apiCallStatusBlockchainBalance.message) : this.apiCallStatusBlockchainBalance.message ? this.apiCallStatusBlockchainBalance.message : '';\n }\n this.balances.onchain = (bcBalanceSelector.blockchainBalance.total_balance && +bcBalanceSelector.blockchainBalance.total_balance >= 0) ? +bcBalanceSelector.blockchainBalance.total_balance : 0;\n this.balances.total = this.balances.lightning + this.balances.onchain;\n this.balances = Object.assign({}, this.balances);\n });\n this.store.select(pendingChannels).pipe(takeUntil(this.unSubs[3])).\n subscribe((pendingChannelsSelector: { pendingChannels: PendingChannels, pendingChannelsSummary: PendingChannelsSummary, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[4] = '';\n this.apiCallStatusPendingChannels = pendingChannelsSelector.apiCallStatus;\n if (this.apiCallStatusPendingChannels.status === APICallStatusEnum.ERROR) {\n this.errorMessages[4] = (typeof (this.apiCallStatusPendingChannels.message) === 'object') ? JSON.stringify(this.apiCallStatusPendingChannels.message) : this.apiCallStatusPendingChannels.message ? this.apiCallStatusPendingChannels.message : '';\n }\n this.channelsStatus.pending = { num_channels: pendingChannelsSelector.pendingChannelsSummary.open?.num_channels, capacity: pendingChannelsSelector.pendingChannelsSummary.open?.limbo_balance };\n this.channelsStatus.closing = {\n num_channels: (pendingChannelsSelector.pendingChannelsSummary.closing?.num_channels || 0) + (pendingChannelsSelector.pendingChannelsSummary.force_closing?.num_channels || 0) + (pendingChannelsSelector.pendingChannelsSummary.waiting_close?.num_channels || 0),\n capacity: pendingChannelsSelector.pendingChannelsSummary.total_limbo_balance\n };\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[4])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[3] = '';\n this.apiCallStatusChannels = channelsSelector.apiCallStatus;\n if (this.apiCallStatusChannels.status === APICallStatusEnum.ERROR) {\n this.errorMessages[3] = (typeof (this.apiCallStatusChannels.message) === 'object') ? JSON.stringify(this.apiCallStatusChannels.message) : this.apiCallStatusChannels.message ? this.apiCallStatusChannels.message : '';\n }\n const local = (channelsSelector.lightningBalance && channelsSelector.lightningBalance.local) ? +channelsSelector.lightningBalance.local : 0;\n const remote = (channelsSelector.lightningBalance && channelsSelector.lightningBalance.remote) ? +channelsSelector.lightningBalance.remote : 0;\n const total = local + remote;\n this.channelBalances = { localBalance: local, remoteBalance: remote, balancedness: +(1 - Math.abs((local - remote) / total)).toFixed(3) };\n this.balances.lightning = channelsSelector.lightningBalance.local || 0;\n this.balances.total = this.balances.lightning + this.balances.onchain;\n this.balances = Object.assign({}, this.balances);\n this.activeChannels = channelsSelector.channelsSummary.active?.num_channels || 0;\n this.inactiveChannels = channelsSelector.channelsSummary.inactive?.num_channels || 0;\n this.channelsStatus.active = channelsSelector.channelsSummary.active;\n this.channelsStatus.inactive = channelsSelector.channelsSummary.inactive;\n this.totalInboundLiquidity = 0;\n this.totalOutboundLiquidity = 0;\n this.allChannels = channelsSelector.channels?.filter((channel) => channel.active === true);\n this.allChannelsCapacity = JSON.parse(JSON.stringify(this.commonService.sortDescByKey(this.allChannels, 'balancedness')));\n this.allInboundChannels = JSON.parse(JSON.stringify(this.commonService.sortDescByKey(this.allChannels?.filter((channel) => channel.remote_balance && channel.remote_balance > 0), 'remote_balance')));\n this.allOutboundChannels = JSON.parse(JSON.stringify(this.commonService.sortDescByKey(this.allChannels?.filter((channel) => channel.local_balance && channel.local_balance > 0), 'local_balance')));\n this.allChannels.forEach((channel) => {\n this.totalInboundLiquidity = this.totalInboundLiquidity + +(channel.remote_balance || 0);\n this.totalOutboundLiquidity = this.totalOutboundLiquidity + +(channel.local_balance || 0);\n });\n if (this.balances.lightning >= 0 && this.balances.onchain >= 0 && this.fees.month_fee_sum && this.fees.month_fee_sum >= 0) {\n this.flgChildInfoUpdated = true;\n } else {\n this.flgChildInfoUpdated = false;\n }\n this.logger.info(channelsSelector);\n });\n this.actions.pipe(\n takeUntil(this.unSubs[5]),\n filter((action) => action.type === LNDActions.FETCH_FEES_LND || action.type === LNDActions.SET_FEES_LND)).\n subscribe((action) => {\n if (action.type === LNDActions.FETCH_FEES_LND) {\n this.flgChildInfoUpdated = false;\n }\n if (action.type === LNDActions.SET_FEES_LND) {\n this.flgChildInfoUpdated = true;\n }\n });\n }\n\n onNavigateTo(link: string) {\n if (link === 'inactive') {\n this.router.navigateByUrl('/lnd/connections', { state: { filter: link } });\n } else {\n this.router.navigateByUrl('/lnd/' + link);\n }\n }\n\n onsortChannelsBy() {\n if (this.sortField === 'Balance Score') {\n this.sortField = 'Capacity';\n this.allChannelsCapacity = this.allChannels.sort((a, b) => {\n const x = +(a.local_balance || 0) + +(a.remote_balance || 0);\n const y = +(b.local_balance || 0) + +(b.remote_balance || 0);\n return ((x > y) ? -1 : ((x < y) ? 1 : 0));\n });\n } else {\n this.sortField = 'Balance Score';\n this.allChannelsCapacity = JSON.parse(JSON.stringify(this.commonService.sortDescByKey(this.allChannels, 'balancedness')));\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n On-chain Balance\n
\n
\n \n \n \n \n \n
\n
\n \n Connections\n
\n
\n \n \n \n \n \n Channels\n \n \n \n \n Peers\n \n \n \n
\n \n
\n
\n
\n
","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faUsers, faChartPie } from '@fortawesome/free-solid-svg-icons';\n\nimport { SelNodeChild } from '../../shared/models/RTLconfig';\nimport { LoggerService } from '../../shared/services/logger.service';\n\nimport { RTLState } from '../../store/rtl.state';\nimport { blockchainBalance, channels, lndNodeSettings, peers } from '../store/lnd.selector';\nimport { ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';\nimport { BlockchainBalance, Channel, ChannelsSummary, LightningBalance, Peer } from '../../shared/models/lndModels';\n\n@Component({\n selector: 'rtl-connections',\n templateUrl: './connections.component.html',\n styleUrls: ['./connections.component.scss']\n})\nexport class ConnectionsComponent implements OnInit, OnDestroy {\n\n public selNode: SelNodeChild | null = {};\n public activePeers = 0;\n public activeChannels = 0;\n public faUsers = faUsers;\n public faChartPie = faChartPie;\n public balances = [{ title: 'Total Balance', dataValue: 0 }, { title: 'Confirmed', dataValue: 0 }, { title: 'Unconfirmed', dataValue: 0 }];\n public links = [{ link: 'channels', name: 'Channels' }, { link: 'peers', name: 'Peers' }];\n public activeLink = 0;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private store: Store, private logger: LoggerService, private router: Router) { }\n\n ngOnInit() {\n this.activeLink = this.links.findIndex((link) => link.link === this.router.url.substring(this.router.url.lastIndexOf('/') + 1));\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n this.activeLink = this.links.findIndex((link) => link.link === (value).urlAfterRedirects.substring((value).urlAfterRedirects.lastIndexOf('/') + 1));\n }\n });\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[1])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(peers).pipe(takeUntil(this.unSubs[2])).\n subscribe((peersSelector: { peers: Peer[], apiCallStatus: ApiCallStatusPayload }) => {\n this.activePeers = (peersSelector.peers && peersSelector.peers.length) ? peersSelector.peers.length : 0;\n this.logger.info(peersSelector);\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[3])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.activeChannels = channelsSelector.channelsSummary.active?.num_channels || 0;\n this.logger.info(channelsSelector);\n });\n this.store.select(blockchainBalance).pipe(takeUntil(this.unSubs[4])).\n subscribe((bcBalanceSelector: { blockchainBalance: BlockchainBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.balances = [{ title: 'Total Balance', dataValue: bcBalanceSelector.blockchainBalance.total_balance || 0 }, { title: 'Confirmed', dataValue: (bcBalanceSelector.blockchainBalance.confirmed_balance || 0) }, { title: 'Unconfirmed', dataValue: (bcBalanceSelector.blockchainBalance.unconfirmed_balance || 0) }];\n this.logger.info(bcBalanceSelector);\n });\n }\n\n onSelectedTabChange(event) {\n this.router.navigateByUrl('/lnd/connections/' + this.links[event.index].link);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n {{alertTitle}}\n
\n \n
\n \n
\n
\n 0\" fxFlex=\"100\">\n \n \n {{peer.alias ? peer.alias : peer.pub_key ? peer.pub_key : ''}}\n \n Peer alias is required.\n Peer not found in the list.\n \n
\n \n
\n
\n \n \n (Remaining Bal: {{totalBalance - ((fundingAmount) ? fundingAmount : 0) | number}})\n Sats \n Amount is required.\n Amount must be less than or equal to {{totalBalance}}.\n \n
\n Private Channel\n
\n
\n \n \n \n {{advancedTitle}}\n \n \n
\n
\n \n \n \n {{transType.name}}\n \n \n \n \n \n {{selTransType === '1' ? 'Target Confirmation Blocks' : 'Fee'}} is required.\n \n
\n
\n
\n Spend Unconfirmed Output\n
\n
\n
\n
\n
\n
\n \n {{channelConnectionError}}\n
\n
\n \n \n
\n
\n
\n
\n
\n\n\n \n \n \n Peer:  {{peer?.alias || peer?.address}}\n \n \n
\n
\n
\n

Pubkey

\n {{peer.pub_key}}\n
\n
\n \n
\n
\n

Address

\n {{peer?.address}}\n
\n
\n

Inbound

\n {{peer?.inbound ? 'True' : 'False'}}\n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, Inject, ViewChild } from '@angular/core';\nimport { UntypedFormControl } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject, Observable } from 'rxjs';\nimport { takeUntil, filter, startWith, map } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport { Peer, GetInfo } from '../../../../shared/models/lndModels';\nimport { OpenChannelAlert } from '../../../../shared/models/alertData';\nimport { APICallStatusEnum, LNDActions, TRANS_TYPES } from '../../../../shared/services/consts-enums-functions';\n\nimport { RTLState } from '../../../../store/rtl.state';\nimport { saveNewChannel } from '../../../store/lnd.actions';\nimport { SelNodeChild } from '../../../../shared/models/RTLconfig';\nimport { lndNodeSettings } from '../../../store/lnd.selector';\n\n@Component({\n selector: 'rtl-open-channel',\n templateUrl: './open-channel.component.html',\n styleUrls: ['./open-channel.component.scss']\n})\nexport class OpenChannelComponent implements OnInit, OnDestroy {\n\n @ViewChild('form', { static: true }) form: any;\n public selectedPeer = new UntypedFormControl();\n public selNode: SelNodeChild | null = {};\n public amount = new UntypedFormControl();\n public faExclamationTriangle = faExclamationTriangle;\n public alertTitle: string;\n public peer: Peer | null;\n public peers: Peer[];\n public sortedPeers: Peer[];\n public filteredPeers: Observable;\n public channelConnectionError = '';\n public advancedTitle = 'Advanced Options';\n public information: GetInfo;\n public totalBalance = 0;\n public fundingAmount: number | null;\n public selectedPubkey = '';\n public isPrivate = false;\n public selTransType = '0';\n public spendUnconfirmed = false;\n public transTypeValue = '';\n public transTypes = TRANS_TYPES;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: OpenChannelAlert, private store: Store, private actions: Actions) { }\n\n ngOnInit() {\n if (this.data.message) {\n this.information = this.data.message.information;\n this.totalBalance = this.data.message.balance;\n this.peer = this.data.message.peer || null;\n this.peers = this.data.message.peers || [];\n } else {\n this.information = {};\n this.totalBalance = 0;\n this.peer = null;\n this.peers = [];\n }\n this.alertTitle = this.data.alertTitle || 'Alert';\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((nodeSettings: SelNodeChild | null) => {\n this.selNode = nodeSettings;\n this.isPrivate = !!nodeSettings?.unannouncedChannels;\n });\n this.actions.pipe(\n takeUntil(this.unSubs[1]),\n filter((action) => action.type === LNDActions.UPDATE_API_CALL_STATUS_LND || action.type === LNDActions.FETCH_CHANNELS_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.UPDATE_API_CALL_STATUS_LND && action.payload.status === APICallStatusEnum.ERROR && action.payload.action === 'SaveNewChannel') {\n this.channelConnectionError = action.payload.message;\n }\n if (action.type === LNDActions.FETCH_CHANNELS_LND) {\n this.dialogRef.close();\n }\n });\n let x = '';\n let y = '';\n this.sortedPeers = this.peers.sort((p1, p2) => {\n x = p1.alias ? p1.alias.toLowerCase() : p1.pub_key ? p1.pub_key.toLowerCase() : '';\n y = p2.alias ? p2.alias.toLowerCase() : p1.pub_key ? p1.pub_key.toLowerCase() : '';\n return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n });\n this.filteredPeers = this.selectedPeer.valueChanges.pipe(\n takeUntil(this.unSubs[2]), startWith(''),\n map((peer) => (typeof peer === 'string' ? peer : peer.alias ? peer.alias : peer.pub_key)),\n map((alias) => (alias ? this.filterPeers(alias) : this.sortedPeers.slice()))\n );\n }\n\n private filterPeers(newlySelectedPeer: string): Peer[] {\n return this.sortedPeers?.filter((peer) => peer.alias?.toLowerCase().indexOf(newlySelectedPeer ? newlySelectedPeer.toLowerCase() : '') === 0);\n }\n\n displayFn(peer: Peer): string {\n return (peer && peer.alias) ? peer.alias : (peer && peer.pub_key) ? peer.pub_key : '';\n }\n\n onSelectedPeerChanged() {\n this.channelConnectionError = '';\n this.selectedPubkey = (this.selectedPeer.value && this.selectedPeer.value.pub_key) ? this.selectedPeer.value.pub_key : null;\n if (typeof this.selectedPeer.value === 'string') {\n const selPeer = this.peers?.filter((peer) => peer.alias?.length === this.selectedPeer.value.length && peer.alias?.toLowerCase().indexOf(this.selectedPeer.value ? this.selectedPeer.value.toLowerCase() : '') === 0);\n if (selPeer.length === 1 && selPeer[0].pub_key) {\n this.selectedPubkey = selPeer[0].pub_key;\n }\n }\n if (this.selectedPeer.value && !this.selectedPubkey) {\n this.selectedPeer.setErrors({ notfound: true });\n } else {\n this.selectedPeer.setErrors(null);\n }\n }\n\n onClose() {\n this.dialogRef.close(false);\n }\n\n resetData() {\n this.selectedPeer.setValue('');\n this.fundingAmount = null;\n this.isPrivate = !!this.selNode?.unannouncedChannels;\n this.spendUnconfirmed = false;\n this.selTransType = '0';\n this.transTypeValue = '';\n this.channelConnectionError = '';\n this.advancedTitle = 'Advanced Options';\n this.form.resetForm();\n }\n\n onOpenChannel(): boolean | void {\n if ((!this.peer && !this.selectedPubkey) || (!this.fundingAmount || ((this.totalBalance - this.fundingAmount) < 0) || ((this.selTransType === '1' || this.selTransType === '2') && !this.transTypeValue))) {\n return true;\n }\n this.store.dispatch(saveNewChannel({\n payload: {\n selectedPeerPubkey: ((!this.peer || !this.peer.pub_key) ? this.selectedPubkey : this.peer.pub_key), fundingAmount: this.fundingAmount, private: this.isPrivate,\n transType: this.selTransType, transTypeValue: this.transTypeValue, spendUnconfirmed: this.spendUnconfirmed\n }\n }));\n }\n\n onAdvancedPanelToggle(isClosed: boolean) {\n if (isClosed) {\n this.advancedTitle = 'Advanced Options | ' + (this.selTransType === '1' ? 'Target Confirmation Blocks: ' : this.selTransType === '2' ?\n 'Fee (Sats/vByte): ' : 'Default') + ((this.selTransType === '1' || this.selTransType === '2') ? this.transTypeValue : '') +\n ' | Spend Unconfirmed Output: ' + (this.spendUnconfirmed ? 'Yes' : 'No');\n } else {\n this.advancedTitle = 'Advanced Options';\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n Connect to a new peer\n
\n \n
\n \n
\n \n \n
\n {{peerFormLabel}} \n \n \n Address is required.\n \n
\n \n {{peerConnectionError}}\n
\n
\n \n
\n
\n
\n \n
\n {{channelFormLabel}}\n
\n
\n \n \n Remaining Bal: {{totalBalance - ((channelFormGroup.controls.fundingAmount.value) ? channelFormGroup.controls.fundingAmount.value : 0)}}\n Sats \n Amount is required.\n Amount must be a positive number.\n Amount must be less than or equal to {{totalBalance}}.\n \n
\n Private Channel\n
\n
\n
\n \n \n \n {{transType.name}}\n \n \n \n \n \n {{channelFormGroup.controls.selTransType.value === '0' ? 'Default' : channelFormGroup.controls.selTransType.value === '1' ? 'Target Confirmation Blocks' : 'Fee (Sats/vByte)'}} is required.\n \n
\n Spend Unconfirmed Output\n
\n
\n
\n
\n \n {{channelConnectionError}}\n
\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';\nimport { UntypedFormGroup, UntypedFormBuilder, Validators } from '@angular/forms';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatStepper } from '@angular/material/stepper';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { Peer } from '../../../shared/models/lndModels';\nimport { OpenChannelAlert } from '../../../shared/models/alertData';\nimport { APICallStatusEnum, LNDActions, TRANS_TYPES } from '../../../shared/services/consts-enums-functions';\n\nimport { LNDEffects } from '../../store/lnd.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { fetchGraphNode, saveNewChannel, saveNewPeer } from '../../store/lnd.actions';\nimport { lndNodeSettings } from '../../store/lnd.selector';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\n\n@Component({\n selector: 'rtl-connect-peer',\n templateUrl: './connect-peer.component.html',\n styleUrls: ['./connect-peer.component.scss']\n})\nexport class ConnectPeerComponent implements OnInit, OnDestroy {\n\n @ViewChild('peersForm', { static: false }) form: any;\n @ViewChild('stepper', { static: false }) stepper: MatStepper;\n public faExclamationTriangle = faExclamationTriangle;\n public selNode: SelNodeChild | null = {};\n public peerAddress = '';\n public totalBalance = 0;\n public transTypes = TRANS_TYPES;\n public flgChannelOpened = false;\n public channelOpenStatus = null;\n public newlyAddedPeer: Peer | null = null;\n public flgEditable = true;\n public peerConnectionError = '';\n public channelConnectionError = '';\n public peerFormLabel = 'Peer Details';\n public channelFormLabel = 'Open Channel (Optional)';\n peerFormGroup: UntypedFormGroup;\n channelFormGroup: UntypedFormGroup;\n statusFormGroup: UntypedFormGroup;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: OpenChannelAlert, private store: Store, private lndEffects: LNDEffects, private formBuilder: UntypedFormBuilder, private actions: Actions, private logger: LoggerService) { }\n\n ngOnInit() {\n this.totalBalance = this.data.message?.balance || 0;\n this.peerFormGroup = this.formBuilder.group({\n hiddenAddress: ['', [Validators.required]],\n peerAddress: ['', [Validators.required]]\n });\n this.channelFormGroup = this.formBuilder.group({\n fundingAmount: ['', [Validators.required, Validators.min(1), Validators.max(this.totalBalance)]],\n isPrivate: [!!this.selNode?.unannouncedChannels],\n selTransType: [TRANS_TYPES[0].id],\n transTypeValue: [{ value: '', disabled: true }],\n spendUnconfirmed: [false],\n hiddenAmount: ['', [Validators.required]]\n });\n this.statusFormGroup = this.formBuilder.group({});\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((nodeSettings: SelNodeChild | null) => {\n this.selNode = nodeSettings;\n this.channelFormGroup.controls.isPrivate.setValue(!!nodeSettings?.unannouncedChannels);\n });\n this.channelFormGroup.controls.selTransType.valueChanges.pipe(takeUntil(this.unSubs[1])).subscribe((transType) => {\n if (transType === TRANS_TYPES[0].id) {\n this.channelFormGroup.controls.transTypeValue.setValue('');\n this.channelFormGroup.controls.transTypeValue.disable();\n this.channelFormGroup.controls.transTypeValue.setValidators(null);\n this.channelFormGroup.controls.transTypeValue.setErrors(null);\n } else {\n this.channelFormGroup.controls.transTypeValue.setValue('');\n this.channelFormGroup.controls.transTypeValue.enable();\n this.channelFormGroup.controls.transTypeValue.setValidators([Validators.required]);\n }\n });\n this.actions.pipe(\n takeUntil(this.unSubs[2]),\n filter((action) => action.type === LNDActions.NEWLY_ADDED_PEER_LND || action.type === LNDActions.FETCH_PENDING_CHANNELS_LND || action.type === LNDActions.UPDATE_API_CALL_STATUS_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.NEWLY_ADDED_PEER_LND) {\n this.logger.info(action.payload);\n this.flgEditable = false;\n this.newlyAddedPeer = action.payload.peer;\n this.peerFormGroup.controls.hiddenAddress.setValue(this.peerFormGroup.controls.peerAddress.value);\n this.stepper.next();\n }\n if (action.type === LNDActions.FETCH_PENDING_CHANNELS_LND) {\n this.dialogRef.close();\n }\n if (action.type === LNDActions.UPDATE_API_CALL_STATUS_LND && action.payload.status === APICallStatusEnum.ERROR) {\n if (action.payload.action === 'SaveNewPeer' || action.payload.action === 'FetchGraphNode') {\n this.peerConnectionError = action.payload.message;\n } else if (action.payload.action === 'SaveNewChannel') {\n this.channelConnectionError = action.payload.message;\n }\n }\n });\n }\n\n onConnectPeer(): boolean | void {\n if (!this.peerFormGroup.controls.peerAddress.value) {\n return true;\n }\n this.peerConnectionError = '';\n const deviderIndex = this.peerFormGroup.controls.peerAddress.value.search('@');\n let pubkey = '';\n let host = '';\n if (deviderIndex > -1) {\n pubkey = this.peerFormGroup.controls.peerAddress.value.substring(0, deviderIndex);\n host = this.peerFormGroup.controls.peerAddress.value.substring(deviderIndex + 1);\n this.connectPeerWithParams(pubkey, host);\n } else {\n this.store.dispatch(fetchGraphNode({ payload: { pubkey: this.peerFormGroup.controls.peerAddress.value } }));\n this.lndEffects.setGraphNode.pipe(take(1)).subscribe((graphNode) => {\n setTimeout(() => {\n host = (graphNode.node.addresses && graphNode.node.addresses.length && graphNode.node.addresses.length > 0 && graphNode.node.addresses[0].addr) ? graphNode.node.addresses[0].addr : '';\n this.connectPeerWithParams(this.peerFormGroup.controls.peerAddress.value, host);\n }, 0);\n });\n }\n }\n\n connectPeerWithParams(pubkey: string, host: string) {\n this.store.dispatch(saveNewPeer({ payload: { pubkey: pubkey, host: host, perm: false } }));\n }\n\n onOpenChannel(): boolean | void {\n if (!this.channelFormGroup.controls.fundingAmount.value || ((this.totalBalance - this.channelFormGroup.controls.fundingAmount.value) < 0) ||\n (this.channelFormGroup.controls.selTransType.value === '1' && !this.channelFormGroup.controls.transTypeValue.value) || (this.channelFormGroup.controls.selTransType.value === '2' && !this.channelFormGroup.controls.transTypeValue.value)) {\n return true;\n }\n this.channelConnectionError = '';\n this.store.dispatch(saveNewChannel({\n payload: {\n selectedPeerPubkey: this.newlyAddedPeer?.pub_key!, fundingAmount: this.channelFormGroup.controls.fundingAmount.value, private: this.channelFormGroup.controls.isPrivate.value,\n transType: this.channelFormGroup.controls.selTransType.value, transTypeValue: this.channelFormGroup.controls.transTypeValue.value, spendUnconfirmed: this.channelFormGroup.controls.spendUnconfirmed.value\n }\n }));\n }\n\n onClose() {\n this.dialogRef.close(false);\n }\n\n stepSelectionChanged(event: any) {\n switch (event.selectedIndex) {\n case 0:\n this.peerFormLabel = 'Peer Details';\n this.channelFormLabel = 'Open Channel (Optional)';\n break;\n\n case 1:\n if (this.peerFormGroup.controls.peerAddress.value) {\n this.peerFormLabel = 'Peer Added: ' + this.newlyAddedPeer?.alias;\n } else {\n this.peerFormLabel = 'Peer Details';\n }\n this.channelFormLabel = 'Open Channel (Optional)';\n break;\n\n case 2:\n if (this.peerFormGroup.controls.peerAddress.value) {\n this.peerFormLabel = 'Peer Added: ' + this.newlyAddedPeer?.alias;\n } else {\n this.peerFormLabel = 'Peer Details';\n }\n if (this.channelFormGroup.controls.fundingAmount.value) {\n this.channelFormLabel = 'Opening Channel for ' + this.channelFormGroup.controls.fundingAmount.value + ' Sats';\n } else {\n this.channelFormLabel = 'Open Channel (Optional)';\n }\n break;\n\n default:\n this.peerFormLabel = 'Peer Details';\n this.channelFormLabel = 'Open Channel (Optional)';\n break;\n }\n if (event.selectedIndex < event.previouslySelectedIndex) {\n if (event.selectedIndex === 0) {\n this.peerFormGroup.controls.hiddenAddress.setValue('');\n } else if (event.selectedIndex === 1) {\n this.channelFormGroup.controls.hiddenAmount.setValue('');\n }\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n
\n
\n
\n \n Connected Peers\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Alias\n
\n {{peer?.alias}}\n
\n
Public Key\n
\n {{peer?.pub_key}}\n
\n
Address\n
\n {{peer?.address}}\n
\n
Sync Type{{peer?.sync_type | camelcaseWithReplace:'sync':'_'}}Inbound{{peer?.inbound ? 'Yes' : 'No'}}Bytes Sent{{peer?.bytes_sent | number}} Bytes Received{{peer?.bytes_recv | number}} Sats Sent{{peer?.sat_sent | number}} Sats Received{{peer?.sat_recv | number}} Ping Time (µs){{peer?.ping_time | number}} \n \n
\n \n \n Download CSV\n \n
\n
\n
\n \n \n View Info\n Open Channel\n Disconnect\n \n
\n
\n

No connected peer.

\n

Getting peers...

\n

{{errorMessage}}

\n
\n
\n \n
\n
","import { Component, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faUsers } from '@fortawesome/free-solid-svg-icons';\n\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Peer, GetInfo, BlockchainBalance } from '../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, APICallStatusEnum, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { OpenChannelComponent } from '../channels/open-channel-modal/open-channel.component';\nimport { ConnectPeerComponent } from '../connect-peer/connect-peer.component';\n\nimport { RTLEffects } from '../../../store/rtl.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert, openConfirmation } from '../../../store/rtl.actions';\nimport { detachPeer } from '../../store/lnd.actions';\nimport { blockchainBalance, lndNodeInformation, lndPageSettings, peers } from '../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-peers',\n templateUrl: './peers.component.html',\n styleUrls: ['./peers.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Peers') }\n ]\n})\nexport class PeersComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'peers_channels';\n public tableSetting: TableSetting = { tableId: 'peers', recordsPerPage: PAGE_SIZE, sortBy: 'alias', sortOrder: SortOrderEnum.DESCENDING };\n public availableBalance = 0;\n public faUsers = faUsers;\n public displayedColumns: any[] = [];\n public peersData: Peer[] = [];\n public peers: any = new MatTableDataSource([]);\n public information: GetInfo = {};\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private rtlEffects: RTLEffects, private commonService: CommonService, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[0])).subscribe((nodeInfo: GetInfo) => { this.information = nodeInfo; });\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[1])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(blockchainBalance).pipe(takeUntil(this.unSubs[2])).\n subscribe((bcBalanceSelector: { blockchainBalance: BlockchainBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.availableBalance = bcBalanceSelector.blockchainBalance.total_balance || 0;\n });\n this.store.select(peers).pipe(takeUntil(this.unSubs[3])).\n subscribe((peersSelector: { peers: Peer[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = peersSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.peersData = peersSelector.peers;\n if (this.peersData.length > 0) {\n this.loadPeersTable(this.peersData);\n }\n this.logger.info(peersSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.peersData.length > 0) {\n this.loadPeersTable(this.peersData);\n }\n }\n\n onPeerClick(selPeer: Peer, event: any) {\n // const encodedStr = encodeURIComponent('µ');\n const reorderedPeer = [\n [{ key: 'pub_key', value: selPeer.pub_key, title: 'Public Key', width: 100 }],\n [{ key: 'address', value: selPeer.address, title: 'Address', width: 100 }],\n [{ key: 'alias', value: selPeer.alias, title: 'Alias', width: 40 }, { key: 'inbound', value: selPeer.inbound ? 'True' : 'False', title: 'Inbound', width: 30 }, { key: 'ping_time', value: selPeer.ping_time, title: 'Ping Time (\\u00B5s)', width: 30, type: DataTypeEnum.NUMBER }],\n [{ key: 'sat_sent', value: selPeer.sat_sent, title: 'Satoshis Sent', width: 50, type: DataTypeEnum.NUMBER }, { key: 'sat_recv', value: selPeer.sat_recv, title: 'Satoshis Received', width: 50, type: DataTypeEnum.NUMBER }],\n [{ key: 'bytes_sent', value: selPeer.bytes_sent, title: 'Bytes Sent', width: 50, type: DataTypeEnum.NUMBER }, { key: 'bytes_recv', value: selPeer.bytes_recv, title: 'Bytes Received', width: 50, type: DataTypeEnum.NUMBER }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Peer Information',\n showQRName: 'Public Key',\n showQRField: selPeer.pub_key,\n message: reorderedPeer\n }\n }\n }));\n }\n\n onConnectPeer() {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n message: { peer: null, information: this.information, balance: this.availableBalance },\n component: ConnectPeerComponent\n }\n }\n }));\n }\n\n onOpenChannel(peerToAddChannel: Peer) {\n const peerToAddChannelMessage = {\n peer: peerToAddChannel,\n information: this.information,\n balance: this.availableBalance\n };\n this.store.dispatch(openAlert({\n payload: {\n data: {\n alertTitle: 'Open Channel',\n message: peerToAddChannelMessage,\n component: OpenChannelComponent\n }\n }\n }));\n }\n\n onPeerDetach(peerToDetach: Peer) {\n const msg = 'Disconnect peer: ' + ((peerToDetach.alias) ? peerToDetach.alias : peerToDetach.pub_key);\n this.store.dispatch(openConfirmation({\n payload: {\n data: {\n type: AlertTypeEnum.CONFIRM,\n alertTitle: 'Disconnect Peer',\n titleMessage: msg,\n noBtnText: 'Cancel',\n yesBtnText: 'Disconnect'\n }\n }\n }));\n this.rtlEffects.closeConfirm.\n pipe(takeUntil(this.unSubs[4])).\n subscribe((confirmRes) => {\n if (confirmRes) {\n this.store.dispatch(detachPeer({ payload: { pubkey: peerToDetach.pub_key! } }));\n }\n });\n }\n\n applyFilter() {\n this.peers.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.peers.filterPredicate = (rowData: Peer, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = JSON.stringify(rowData).toLowerCase();\n break;\n\n case 'sync_type':\n rowToFilter = this.camelCaseWithReplace.transform((rowData.sync_type || ''), 'sync', '_').trim().toLowerCase();\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return this.selFilterBy === 'sync_type' ? rowToFilter.indexOf(fltr) === 0 : rowToFilter.includes(fltr);\n };\n }\n\n loadPeersTable(peers: Peer[]) {\n this.peers = peers ? new MatTableDataSource([...peers]) : new MatTableDataSource([]);\n this.peers.sort = this.sort;\n this.peers.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.peers.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.peers.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n }\n\n onDownloadCSV() {\n if (this.peers.data && this.peers.data.length > 0) {\n this.commonService.downloadFile(this.peers.data, 'Peers');\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n
\n \n \n \n Open\n \n \n \n \n Pending\n \n \n \n \n Closed\n \n \n \n \n Active HTLCs\n \n \n \n
\n \n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { OpenChannelComponent } from '../open-channel-modal/open-channel.component';\nimport { Peer, GetInfo, Channel, ChannelsSummary, LightningBalance, PendingChannelsSummary, PendingChannels, ClosedChannel, BlockchainBalance } from '../../../../shared/models/lndModels';\nimport { LoggerService } from '../../../../shared/services/logger.service';\n\nimport { RTLState } from '../../../../store/rtl.state';\nimport { openAlert } from '../../../../store/rtl.actions';\nimport { blockchainBalance, channels, closedChannels, lndNodeInformation, peers, pendingChannels } from '../../../store/lnd.selector';\nimport { ApiCallStatusPayload } from '../../../../shared/models/apiCallsPayload';\n\n@Component({\n selector: 'rtl-channels-tables',\n templateUrl: './channels-tables.component.html',\n styleUrls: ['./channels-tables.component.scss']\n})\nexport class ChannelsTablesComponent implements OnInit, OnDestroy {\n\n public numOpenChannels = 0;\n public numPendingChannels = 0;\n public numClosedChannels = 0;\n public numActiveHTLCs = 0;\n public peers: Peer[] = [];\n public information: GetInfo = {};\n public totalBalance = 0;\n public links = [{ link: 'open', name: 'Open' }, { link: 'pending', name: 'Pending' }, { link: 'closed', name: 'Closed' }, { link: 'activehtlcs', name: 'Active HTLCs' }];\n public activeLink = 0;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private router: Router) { }\n\n ngOnInit() {\n this.activeLink = this.links.findIndex((link) => link.link === this.router.url.substring(this.router.url.lastIndexOf('/') + 1));\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n this.activeLink = this.links.findIndex((link) => link.link === (value).urlAfterRedirects.substring((value).urlAfterRedirects.lastIndexOf('/') + 1));\n }\n });\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[1])).subscribe((nodeInfo: GetInfo) => { this.information = nodeInfo; });\n this.store.select(channels).pipe(takeUntil(this.unSubs[2])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.numOpenChannels = (channelsSelector.channels && channelsSelector.channels.length) ? channelsSelector.channels.length : 0;\n this.numActiveHTLCs = channelsSelector.channels?.reduce((totalHTLCs, channel) => totalHTLCs + (channel.pending_htlcs && channel.pending_htlcs.length > 0 ? channel.pending_htlcs.length : 0), 0);\n this.logger.info(channelsSelector);\n });\n this.store.select(pendingChannels).pipe(takeUntil(this.unSubs[3])).\n subscribe((pendingChannelsSelector: { pendingChannels: PendingChannels, pendingChannelsSummary: PendingChannelsSummary, apiCallStatus: ApiCallStatusPayload }) => {\n this.numPendingChannels = (pendingChannelsSelector.pendingChannelsSummary.total_channels) ? pendingChannelsSelector.pendingChannelsSummary.total_channels : 0;\n });\n this.store.select(closedChannels).pipe(takeUntil(this.unSubs[4])).\n subscribe((closedChannelsSelector: { closedChannels: ClosedChannel[], apiCallStatus: ApiCallStatusPayload }) => {\n this.numClosedChannels = (closedChannelsSelector.closedChannels && closedChannelsSelector.closedChannels.length) ? closedChannelsSelector.closedChannels.length : 0;\n });\n this.store.select(blockchainBalance).pipe(takeUntil(this.unSubs[5])).\n subscribe((bcBalanceSelector: { blockchainBalance: BlockchainBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.totalBalance = +(bcBalanceSelector.blockchainBalance.total_balance || 0);\n });\n this.store.select(peers).pipe(takeUntil(this.unSubs[6])).\n subscribe((peersSelector: { peers: Peer[], apiCallStatus: ApiCallStatusPayload }) => {\n this.peers = peersSelector.peers;\n this.peers.forEach((peer) => {\n if (!peer.alias || peer.alias === '') {\n peer.alias = peer.pub_key?.substring(0, 20);\n }\n });\n this.logger.info(peersSelector);\n });\n }\n\n onOpenChannel() {\n const peerToAddChannelMessage = {\n peers: this.peers,\n information: this.information,\n balance: this.totalBalance\n };\n this.store.dispatch(openAlert({\n payload: {\n data: {\n alertTitle: 'Open Channel',\n message: peerToAddChannelMessage,\n component: OpenChannelComponent\n }\n }\n }));\n }\n\n onSelectedTabChange(event) {\n this.router.navigateByUrl('/lnd/connections/channels/' + this.links[event.index].link);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n \n Channel Information\n
\n \n
\n \n
\n
\n
\n

Channel ID

\n {{channel.chan_id}}\n
\n
\n

Peer Alias

\n {{channel.remote_alias}}\n
\n
\n \n
\n
\n

Channel Point

\n {{channel.channel_point}}\n
\n
\n \n
\n
\n

Peer Public Key

\n {{channel.remote_pubkey}}\n
\n
\n \n
\n
\n

Local Balance

\n {{channel.local_balance | number}}\n
\n
\n

Remote Balance

\n {{channel.remote_balance | number}}\n
\n
\n

Capacity

\n {{channel.capacity | number}}\n
\n
\n

Uptime (Seconds)

\n {{channel.uptime | number}}\n
\n
\n \n
\n
\n

Active

\n {{channel.active ? 'Yes' : 'No'}}\n
\n
\n

Private

\n {{channel.private ? 'Yes' : 'No'}}\n
\n
\n

Initiator

\n {{channel.initiator ? 'Yes' : 'No'}}\n
\n
\n

Number of Updates

\n {{channel.num_updates | number}}\n
\n
\n \n
\n
\n
\n

Commit Fee

\n {{channel.commit_fee | number}}\n
\n
\n

Commit Weight

\n {{channel.commit_weight | number}}\n
\n
\n

Fee/KW

\n {{channel.fee_per_kw | number}}\n
\n
\n

Static Remote Key

\n {{channel.static_remote_key ? 'Yes' : 'No'}}\n
\n
\n \n
\n
\n

{{screenSize === screenSizeEnum.XS ? 'Total Sats Sent' : 'Total Satoshis Sent'}}

\n {{channel.total_satoshis_sent | number}}\n
\n
\n

{{screenSize === screenSizeEnum.XS ? 'Total Sats Recv' : 'Total Satoshis Received'}}

\n {{channel.total_satoshis_received | number}}\n
\n
\n

Unsettled Balance

\n {{channel.unsettled_balance | number}}\n
\n
\n

CSV Delay

\n {{channel.csv_delay | number}}\n
\n
\n \n
\n
\n

Local Reserve (Sats)

\n {{channel.local_chan_reserve_sat | number}}\n
\n
\n

Remote Reserve (Sats)

\n {{channel.remote_chan_reserve_sat | number}}\n
\n
\n

Lifetime (Seconds)

\n {{channel.lifetime | number}}\n
\n
\n

Pending HTLCs

\n {{channel?.pending_htlcs?.length | number}}\n
\n
\n \n
\n
\n \n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, Inject } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { faReceipt } from '@fortawesome/free-solid-svg-icons';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { LoggerService } from '../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../shared/services/common.service';\nimport { ChannelInformation } from '../../../../shared/models/alertData';\nimport { Channel } from '../../../../shared/models/lndModels';\nimport { ScreenSizeEnum } from '../../../../shared/services/consts-enums-functions';\n\n@Component({\n selector: 'rtl-channel-information',\n templateUrl: './channel-information.component.html',\n styleUrls: ['./channel-information.component.scss']\n})\nexport class ChannelInformationComponent implements OnInit {\n\n public faReceipt = faReceipt;\n public showAdvanced = false;\n public showCopy = true;\n public showCopyField = null;\n public channel: Channel;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: ChannelInformation, private logger: LoggerService, private commonService: CommonService, private snackBar: MatSnackBar) { }\n\n ngOnInit() {\n this.channel = this.data.channel;\n this.showCopy = !!this.data.showCopy;\n this.screenSize = this.commonService.getScreenSize();\n }\n\n onClose() {\n this.dialogRef.close(false);\n }\n\n onShowAdvanced() {\n this.showAdvanced = !this.showAdvanced;\n }\n\n onCopyChanID(payload: string) {\n this.snackBar.open('Channel ID ' + payload + ' copied.');\n this.logger.info('Copied Text: ' + payload);\n }\n\n}\n","\n\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Circular rebalancing explained.\n
\n
\n \n Circular payments are a completely off-chain rebalancing strategy where a node makes a payment to itself across a circular path of chained payment channels.\n \n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Step 1: Unbalanced channel\n
\n
\n \n It starts with an unbalanced channel, that needs to be rebalanced in order to continue to route payments.\n \n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Step 2: Invoice/Payment\n
\n
\n \n All you have to do is make a payment to yourself in a favorable direction by generating and paying an invoice. This is taken care automatically by your node.\n \n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Step 3: Rebalance amount\n
\n
\n \n You will be moving part or all of the local balance to the remote side. For the route to be circular, there should be at least 3 nodes involved.\n \n
\n
\n
\n\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n Rebalance successful!\n
\n
\n \n Your channel is successfully rebalanced and is able to continue to route payments.\n \n
\n
\n
","import { Component, OnInit, Input, Output, EventEmitter } from '@angular/core';\nimport { ScreenSizeEnum } from '../../../../shared/services/consts-enums-functions';\n\nimport { sliderAnimation } from '../../../../shared/animation/slider-animation';\nimport { CommonService } from '../../../../shared/services/common.service';\n\n@Component({\n selector: 'rtl-channel-rebalance-infographics',\n templateUrl: './channel-rebalance-infographics.component.html',\n styleUrls: ['./channel-rebalance-infographics.component.scss'],\n animations: [sliderAnimation]\n})\nexport class ChannelRebalanceInfographicsComponent implements OnInit {\n\n @Input() animationDirection = 'forward';\n @Input() stepNumber = 1;\n @Output() readonly stepNumberChange = new EventEmitter();\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n\n constructor(private commonService: CommonService) { }\n\n ngOnInit() {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n onSwipe(event: any) {\n if (event.direction === 2 && this.stepNumber < 5) {\n this.stepNumber++;\n this.animationDirection = 'forward';\n this.stepNumberChange.emit(this.stepNumber);\n } else if (event.direction === 4 && this.stepNumber > 1) {\n this.stepNumber--;\n this.animationDirection = 'backward';\n this.stepNumberChange.emit(this.stepNumber);\n }\n }\n\n}\n","
\n
\n \n
{{channel ? ('Channel ' + loopDirectionCaption) : loopDirectionCaption}}
\n
\n \n \n
\n
\n \n
\n
\n
\n \n Circular Rebalance is a payment you make to *yourselves* to affect a relative change in the balances of two channels.\n This is accomplished by sending payment out from the selected channel and receiving it back on the channel with the selected peer.\n Please note, you will be paying routing fee to balance the channels in this manner.\n
\n
\n
\n

Channel Peer: {{selChannel.remote_alias | titlecase}}

\n

Channel ID: {{selChannel.chan_id}}

\n
\n \n \n
\n {{inputFormLabel}}\n
\n \n \n (Local Bal: {{selChannel?.local_balance}}, Remaining: {{selChannel?.local_balance - ((inputFormGroup.controls.rebalanceAmount.value) ? inputFormGroup.controls.rebalanceAmount.value : 0)}})\n Sats\n Amount is required.\n Amount must be a positive number.\n Amount must be less than or equal to {{selChannel?.local_balance}}.\n \n \n \n \n {{activeChannel.remote_alias}} - {{activeChannel.chan_id}}\n \n Receive from Peer is required.\n Receive from Peer not found in the list.\n \n
\n
\n \n
\n
\n
\n \n
\n {{feeFormLabel}}\n
\n
\n \n \n \n {{feeLimitType.name}}\n \n \n \n \n \n {{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} is required.\n {{feeFormGroup.controls.selFeeLimitType.value ? feeFormGroup.controls.selFeeLimitType.value.placeholder : feeLimitTypes[0].placeholder}} must be a positive number.\n \n
\n
\n
\n \n
\n
\n
\n \n
\n Invoice/Payment\n
\n \n \n \n {{!flgInvoiceGenerated ? 'Generating invoice...' : flgReusingInvoice ? 'Invoice re-used' : 'Invoice generated'}}check\n \n \n
{{paymentRequest}}
\n
\n \n \n \n \n {{!flgInvoiceGenerated && !flgPaymentSent ? 'Payment waiting for Invoice' : (!flgPaymentSent ? 'Processing payment...' : (paymentStatus?.error ? 'Payment failed' : 'Payment successful'))}}{{paymentStatus?.error ? 'close' : 'check'}}\n \n \n
\n
\n \n
\n

{{paymentStatus && paymentStatus.payment_hash ? 'Rebalance Successful.' : 'Rebalance Failed.'}}

\n
\n \n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n
\n\n \n\n\n
Error: {{paymentStatus.error}}
\n
\n\n
\n
\n
\n

Payment Hash

\n {{paymentStatus.payment_hash}}\n
\n
\n \n
\n
\n

Total Fees ({{paymentStatus.payment_route.total_fees_msat ? 'mSats' : 'Sats'}})

\n {{paymentStatus.payment_route.total_fees_msat ? paymentStatus.payment_route.total_fees_msat : paymentStatus.payment_route.total_fees ? paymentStatus.payment_route.total_fees : 0}}\n
\n
\n

Number of Hops

\n {{paymentStatus && paymentStatus.payment_route && paymentStatus.payment_route.hops && paymentStatus.payment_route.hops.length ? paymentStatus.payment_route.hops.length : 0}}\n
\n
\n
\n
\n
\n
\n \n
\n
\n \n
\n
\n \n \n \n
\n \n

\n
\n
\n
\n \n \n \n \n \n
\n
\n
\n","import { Component, OnInit, Inject, OnDestroy, ViewChild } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { DecimalPipe } from '@angular/common';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatStepper } from '@angular/material/stepper';\nimport { Subject, Observable, of } from 'rxjs';\nimport { takeUntil, filter, startWith, map } from 'rxjs/operators';\nimport { Actions } from '@ngrx/effects';\nimport { Store } from '@ngrx/store';\nimport { faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\nimport { ChannelRebalanceAlert } from '../../../../shared/models/alertData';\nimport { LoggerService } from '../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../shared/services/common.service';\nimport { Channel, QueryRoutes, ListInvoices } from '../../../../shared/models/lndModels';\nimport { FEE_LIMIT_TYPES, LNDActions, PAGE_SIZE, ScreenSizeEnum, UI_MESSAGES } from '../../../../shared/services/consts-enums-functions';\n\nimport { RTLState } from '../../../../store/rtl.state';\nimport { saveNewInvoice, sendPayment } from '../../../store/lnd.actions';\nimport { invoices } from '../../../store/lnd.selector';\nimport { ApiCallStatusPayload } from '../../../../shared/models/apiCallsPayload';\nimport { opacityAnimation } from '../../../../shared/animation/opacity-animation';\n\n@Component({\n selector: 'rtl-channel-rebalance',\n templateUrl: './channel-rebalance.component.html',\n styleUrls: ['./channel-rebalance.component.scss'],\n animations: [opacityAnimation]\n})\nexport class ChannelRebalanceComponent implements OnInit, OnDestroy {\n\n @ViewChild('stepper', { static: false }) stepper: MatStepper;\n public faInfoCircle = faInfoCircle;\n public invoices: ListInvoices = {};\n public selChannel: Channel = {};\n public activeChannels: Channel[] = [];\n public filteredActiveChannels: Observable;\n public feeLimitTypes: any[] = [];\n public queryRoute: QueryRoutes | null = {};\n public paymentRequest = '';\n public paymentStatus: any = null;\n public flgReusingInvoice = false;\n public flgInvoiceGenerated = false;\n public flgPaymentSent = false;\n public inputFormLabel = 'Amount to rebalance';\n public feeFormLabel = 'Select rebalance fee';\n public flgEditable = true;\n public flgShowInfo = false;\n public stepNumber = 1;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public animationDirection = 'forward';\n inputFormGroup: UntypedFormGroup;\n feeFormGroup: UntypedFormGroup;\n statusFormGroup: UntypedFormGroup;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: ChannelRebalanceAlert,\n private logger: LoggerService,\n private store: Store,\n private actions: Actions,\n private formBuilder: UntypedFormBuilder,\n private decimalPipe: DecimalPipe,\n private commonService: CommonService) { }\n\n ngOnInit() {\n this.screenSize = this.commonService.getScreenSize();\n let x = '';\n let y = '';\n this.selChannel = this.data.message?.selChannel || {};\n this.activeChannels = this.data.message?.channels?.filter((channel) => channel.active && channel.chan_id !== this.selChannel.chan_id && channel.remote_balance && channel.remote_balance > 0) || [];\n this.activeChannels = this.activeChannels.sort((c1: Channel, c2: Channel) => {\n x = c1.remote_alias ? c1.remote_alias.toLowerCase() : c1.chan_id ? c1.chan_id.toLowerCase() : '';\n y = c2.remote_alias ? c2.remote_alias.toLowerCase() : c1.chan_id ? c1.chan_id.toLowerCase() : '';\n return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n });\n FEE_LIMIT_TYPES.forEach((FEE_LIMIT_TYPE, i) => {\n if (i > 0) {\n this.feeLimitTypes.push(FEE_LIMIT_TYPE);\n }\n });\n // HiddenAmount & hiddenFeeLimit are temporary hacks to overcome material steppers stepChanged event shortcoming.\n // User should be able to go to next step only by clicking the action button on the step.\n this.inputFormGroup = this.formBuilder.group({\n hiddenAmount: ['', [Validators.required]],\n rebalanceAmount: ['', [Validators.required, Validators.min(1), Validators.max(this.selChannel.local_balance || 0)]],\n selRebalancePeer: [null, Validators.required]\n });\n this.feeFormGroup = this.formBuilder.group({\n selFeeLimitType: [this.feeLimitTypes[0], Validators.required],\n feeLimit: ['', [Validators.required, Validators.min(0)]],\n hiddenFeeLimit: ['', [Validators.required]]\n });\n this.statusFormGroup = this.formBuilder.group({});\n this.store.select(invoices).pipe(takeUntil(this.unSubs[0])).\n subscribe((invoicesSelector: { listInvoices: ListInvoices, apiCallStatus: ApiCallStatusPayload }) => {\n this.invoices = invoicesSelector.listInvoices;\n this.logger.info(invoicesSelector);\n });\n this.actions.pipe(\n takeUntil(this.unSubs[1]),\n filter((action) => action.type === LNDActions.SET_QUERY_ROUTES_LND || action.type === LNDActions.SEND_PAYMENT_STATUS_LND || action.type === LNDActions.NEWLY_SAVED_INVOICE_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.SET_QUERY_ROUTES_LND) {\n this.queryRoute = action.payload;\n }\n if (action.type === LNDActions.SEND_PAYMENT_STATUS_LND) {\n this.logger.info(action.payload);\n this.flgPaymentSent = true;\n this.paymentStatus = action.payload;\n this.flgEditable = true;\n }\n if (action.type === LNDActions.NEWLY_SAVED_INVOICE_LND) {\n this.logger.info(action.payload);\n this.flgInvoiceGenerated = true;\n this.sendPayment(action.payload.paymentRequest);\n }\n });\n this.inputFormGroup.get('rebalanceAmount')?.valueChanges.pipe(\n takeUntil(this.unSubs[2]), startWith(0)).\n subscribe((amount) => {\n this.inputFormGroup.controls.selRebalancePeer.setValue('');\n this.inputFormGroup.controls.selRebalancePeer.setErrors(null);\n this.filteredActiveChannels = of(amount ? this.filterActiveChannels() : this.activeChannels.slice());\n });\n this.inputFormGroup.get('selRebalancePeer')?.valueChanges.pipe(\n takeUntil(this.unSubs[3]), startWith('')).\n subscribe((alias) => {\n if (typeof alias === 'string') {\n this.filteredActiveChannels = of(this.filterActiveChannels());\n }\n });\n }\n\n onSelectFee(): boolean | void {\n if (this.inputFormGroup.controls.selRebalancePeer.value && typeof this.inputFormGroup.controls.selRebalancePeer.value === 'string') {\n this.onSelectedPeerChanged();\n }\n if (!this.inputFormGroup.controls.selRebalancePeer.value || typeof this.inputFormGroup.controls.selRebalancePeer.value === 'string') {\n this.inputFormGroup.controls.selRebalancePeer.setErrors({ required: true });\n return true;\n }\n if (!this.inputFormGroup.controls.rebalanceAmount.value) {\n return true;\n }\n if (this.stepper.selectedIndex === 0) {\n this.inputFormGroup.controls.hiddenAmount.setValue(this.inputFormGroup.controls.rebalanceAmount.value);\n this.stepper.next();\n }\n this.queryRoute = null;\n this.feeFormGroup.reset();\n this.feeFormGroup.controls.selFeeLimitType.setValue(this.feeLimitTypes[0]);\n }\n\n stepSelectionChanged(event: any) {\n switch (event.selectedIndex) {\n case 0:\n this.inputFormLabel = 'Amount to rebalance';\n this.feeFormLabel = 'Select rebalance fee';\n break;\n\n case 1:\n if (this.inputFormGroup.controls.rebalanceAmount.value || this.inputFormGroup.controls.selRebalancePeer.value.remote_alias) {\n this.inputFormLabel = 'Rebalancing Amount: ' +\n (this.decimalPipe.transform(this.inputFormGroup.controls.rebalanceAmount.value ? this.inputFormGroup.controls.rebalanceAmount.value : 0)) +\n ' Sats | Peer: ' + (this.inputFormGroup.controls.selRebalancePeer.value.remote_alias ? this.inputFormGroup.controls.selRebalancePeer.value.remote_alias :\n (this.inputFormGroup.controls.selRebalancePeer.value.remote_pubkey.substring(0, 15) + '...'));\n } else {\n this.inputFormLabel = 'Amount to rebalance';\n }\n this.feeFormLabel = 'Select rebalance fee';\n break;\n\n case 2:\n if (this.inputFormGroup.controls.rebalanceAmount.value || this.inputFormGroup.controls.selRebalancePeer.value.remote_alias) {\n this.inputFormLabel = 'Rebalancing Amount: ' +\n (this.decimalPipe.transform(this.inputFormGroup.controls.rebalanceAmount.value ? this.inputFormGroup.controls.rebalanceAmount.value : 0)) +\n ' Sats | Peer: ' + (this.inputFormGroup.controls.selRebalancePeer.value.remote_alias ? this.inputFormGroup.controls.selRebalancePeer.value.remote_alias :\n (this.inputFormGroup.controls.selRebalancePeer.value.remote_pubkey.substring(0, 15) + '...'));\n } else {\n this.inputFormLabel = 'Amount to rebalance';\n }\n if (this.queryRoute && this.queryRoute.routes && this.queryRoute.routes.length > 0 && (this.queryRoute.routes[0].total_fees_msat || (this.queryRoute.routes[0].hops && this.queryRoute.routes[0].hops.length))) {\n this.feeFormLabel = this.feeFormGroup.controls.selFeeLimitType.value.placeholder + ': ' + this.decimalPipe.transform(this.feeFormGroup.controls.feeLimit.value ? this.feeFormGroup.controls.feeLimit.value : 0) + ' | Hops: ' + this.queryRoute.routes[0].hops?.length;\n } else {\n this.feeFormLabel = 'Select rebalance fee';\n }\n break;\n\n default:\n this.inputFormLabel = 'Amount to rebalance';\n this.feeFormLabel = 'Select rebalance fee';\n break;\n }\n if (event.selectedIndex < event.previouslySelectedIndex) {\n if (event.selectedIndex === 0) {\n this.inputFormGroup.controls.hiddenAmount.setValue('');\n } else if (event.selectedIndex === 1) {\n this.feeFormGroup.controls.hiddenFeeLimit.setValue('');\n }\n }\n }\n\n onRebalance(): boolean | void {\n if (!this.inputFormGroup.controls.rebalanceAmount.value || this.inputFormGroup.controls.rebalanceAmount.value <= 0 ||\n (this.selChannel.local_balance && this.inputFormGroup.controls.rebalanceAmount.value > +this.selChannel.local_balance) ||\n !this.feeFormGroup.controls.feeLimit.value || this.feeFormGroup.controls.feeLimit.value < 0 ||\n !this.inputFormGroup.controls.selRebalancePeer.value.remote_pubkey) {\n return true;\n }\n this.feeFormGroup.controls.hiddenFeeLimit.setValue(this.feeFormGroup.controls.feeLimit.value);\n this.stepper.next();\n this.flgEditable = false;\n this.paymentRequest = '';\n this.paymentStatus = null;\n this.flgReusingInvoice = false;\n this.flgInvoiceGenerated = false;\n this.flgPaymentSent = false;\n const unsettledInvoice = this.findUnsettledInvoice();\n if (unsettledInvoice) {\n this.flgReusingInvoice = true;\n this.sendPayment(unsettledInvoice.payment_request || '');\n } else {\n this.store.dispatch(saveNewInvoice({\n payload: {\n uiMessage: UI_MESSAGES.NO_SPINNER, memo: 'Local-Rebalance-' + this.inputFormGroup.controls.rebalanceAmount.value + '-Sats', value: this.inputFormGroup.controls.rebalanceAmount.value, private: false, expiry: 3600, is_amp: false, pageSize: PAGE_SIZE, openModal: false\n }\n }));\n }\n }\n\n findUnsettledInvoice() {\n return this.invoices.invoices?.find((invoice) => (!invoice.settle_date || +invoice.settle_date === 0) && invoice.memo === 'Local-Rebalance-' + this.inputFormGroup.controls.rebalanceAmount.value + '-Sats' && invoice.state !== 'CANCELED');\n }\n\n sendPayment(payReq: string) {\n this.flgInvoiceGenerated = true;\n this.paymentRequest = payReq;\n if (this.feeFormGroup.controls.selFeeLimitType.value.id === 'percent' && !(+this.feeFormGroup.controls.feeLimit.value % 1 === 0)) {\n this.store.dispatch(sendPayment({ payload: { uiMessage: UI_MESSAGES.NO_SPINNER, paymentReq: payReq, outgoingChannel: this.selChannel,\n feeLimitType: 'fixed', feeLimit: Math.ceil((+this.feeFormGroup.controls.feeLimit.value * +this.inputFormGroup.controls.rebalanceAmount.value) / 100),\n allowSelfPayment: true, lastHopPubkey: this.inputFormGroup.controls.selRebalancePeer.value.remote_pubkey, fromDialog: true } }));\n } else {\n this.store.dispatch(sendPayment({ payload: { uiMessage: UI_MESSAGES.NO_SPINNER, paymentReq: payReq, outgoingChannel: this.selChannel,\n feeLimitType: this.feeFormGroup.controls.selFeeLimitType.value.id, feeLimit: this.feeFormGroup.controls.feeLimit.value, allowSelfPayment: true,\n lastHopPubkey: this.inputFormGroup.controls.selRebalancePeer.value.remote_pubkey, fromDialog: true } }));\n }\n }\n\n filterActiveChannels() {\n return this.activeChannels?.filter((channel) => channel.remote_balance && channel.remote_balance >= this.inputFormGroup.controls.rebalanceAmount.value &&\n channel.chan_id !== this.selChannel.chan_id && ((channel.remote_alias?.toLowerCase().indexOf(this.inputFormGroup.controls.selRebalancePeer.value ? this.inputFormGroup.controls.selRebalancePeer.value.toLowerCase() : '') === 0) ||\n (channel.chan_id?.toLowerCase().indexOf(this.inputFormGroup.controls.selRebalancePeer.value ? this.inputFormGroup.controls.selRebalancePeer.value.toLowerCase() : '') === 0)));\n }\n\n onSelectedPeerChanged() {\n if (this.inputFormGroup.controls.selRebalancePeer.value && this.inputFormGroup.controls.selRebalancePeer.value.length > 0 && typeof this.inputFormGroup.controls.selRebalancePeer.value === 'string') {\n const foundChannels = this.activeChannels?.filter((channel) => channel.remote_alias?.length === this.inputFormGroup.controls.selRebalancePeer.value.length &&\n channel.remote_alias?.toLowerCase().indexOf(this.inputFormGroup.controls.selRebalancePeer.value ? this.inputFormGroup.controls.selRebalancePeer.value.toLowerCase() : '') === 0);\n if (foundChannels && foundChannels.length > 0) {\n this.inputFormGroup.controls.selRebalancePeer.setValue(foundChannels[0]);\n this.inputFormGroup.controls.selRebalancePeer.setErrors(null);\n } else {\n this.inputFormGroup.controls.selRebalancePeer.setErrors({ notfound: true });\n }\n }\n }\n\n displayFn(channel: Channel): string {\n return (channel && channel.remote_alias) ? channel.remote_alias : (channel && channel.chan_id) ? channel.chan_id : '';\n }\n\n showInfo() {\n this.flgShowInfo = true;\n }\n\n onStepChanged(index: number) {\n this.animationDirection = index < this.stepNumber ? 'backward' : 'forward';\n this.stepNumber = index;\n }\n\n onClose() {\n this.dialogRef.close(false);\n }\n\n onRestart() {\n this.flgInvoiceGenerated = false;\n this.flgPaymentSent = false;\n this.flgEditable = true;\n this.stepper.reset();\n this.inputFormGroup.reset();\n this.feeFormGroup.reset();\n this.statusFormGroup.reset();\n this.inputFormGroup.controls.hiddenAmount.setValue('');\n this.inputFormGroup.controls.hiddenAmount.setErrors(null);\n this.inputFormGroup.controls.rebalanceAmount.setValue('');\n this.inputFormGroup.controls.rebalanceAmount.setErrors(null);\n this.inputFormGroup.controls.selRebalancePeer.setValue('');\n this.inputFormGroup.controls.selRebalancePeer.setErrors(null);\n this.filteredActiveChannels = of(this.activeChannels);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n {{channelToClose.active ? 'Close Channel' : 'Force Close Channel'}}\n
\n \n
\n \n
\n
\n

{{\n channelToClose.active ? \n ('Closing channel: ' + ((!channelToClose.remote_alias && !channelToClose.chan_id) ? channelToClose.channel_point : (channelToClose.remote_alias && channelToClose.chan_id) ? channelToClose.remote_alias + ' (' + channelToClose.chan_id + ')' : channelToClose.remote_alias ? channelToClose.remote_alias : channelToClose.chan_id)) : \n ('Force closing channel: ' + ((!channelToClose.remote_alias && !channelToClose.chan_id) ? channelToClose.channel_point : (channelToClose.remote_alias && channelToClose.chan_id) ? channelToClose.remote_alias + ' (' + channelToClose.chan_id + ')' : channelToClose.remote_alias ? channelToClose.remote_alias : channelToClose.chan_id))}}\n

\n
\n

close{{errorMsg}}

\n
\n
\n
\n \n Priority/Fee for force closing inactive channels cannot be modified.\n
\n
\n \n \n \n {{transType.name}}\n \n \n \n \n \n \n \n \n Number of blocks is required.\n \n \n \n Fees is required.\n \n
\n
\n
\n
\n \n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, Inject, OnDestroy } from '@angular/core';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faExclamationTriangle, faInfoCircle } from '@fortawesome/free-solid-svg-icons';\n\nimport { LoggerService } from '../../../../shared/services/logger.service';\nimport { Channel } from '../../../../shared/models/lndModels';\nimport { ChannelInformation } from '../../../../shared/models/alertData';\nimport { APICallStatusEnum, LNDActions, TRANS_TYPES } from '../../../../shared/services/consts-enums-functions';\n\nimport { RTLState } from '../../../../store/rtl.state';\nimport { closeChannel } from '../../../store/lnd.actions';\n\n@Component({\n selector: 'rtl-close-channel',\n templateUrl: './close-channel.component.html',\n styleUrls: ['./close-channel.component.scss']\n})\nexport class CloseChannelComponent implements OnInit, OnDestroy {\n\n public channelToClose: Channel;\n public transTypes = TRANS_TYPES;\n public selTransType = '0';\n public blocks = null;\n public fees = null;\n public faExclamationTriangle = faExclamationTriangle;\n public faInfoCircle = faInfoCircle;\n public flgPendingHtlcs = false;\n public errorMsg = 'Please wait for pending HTLCs to settle before attempting channel closure.';\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: ChannelInformation, private store: Store, private actions: Actions, private logger: LoggerService) { }\n\n ngOnInit() {\n this.channelToClose = this.data.channel;\n this.actions.pipe(\n takeUntil(this.unSubs[0]),\n filter((action) => action.type === LNDActions.UPDATE_API_CALL_STATUS_LND || action.type === LNDActions.SET_CHANNELS_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.SET_CHANNELS_LND) {\n const filteredChannel = action.payload.find((channel) => channel.chan_id === this.data.channel.chan_id);\n if (filteredChannel && filteredChannel.pending_htlcs && filteredChannel.pending_htlcs.length && filteredChannel.pending_htlcs.length > 0) {\n this.flgPendingHtlcs = true;\n }\n }\n if (action.type === LNDActions.UPDATE_API_CALL_STATUS_LND && action.payload.status === APICallStatusEnum.ERROR && action.payload.action === 'FetchAllChannels') {\n this.logger.error('Fetching latest channel information failed!\\n' + action.payload.message);\n }\n });\n }\n\n onCloseChannel(): boolean | void {\n if ((this.selTransType === '1' && (!this.blocks || this.blocks === 0)) || (this.selTransType === '2' && (!this.fees || this.fees === 0))) {\n return true;\n }\n const closeChannelParams: any = { channelPoint: this.channelToClose.channel_point, forcibly: !this.channelToClose.active };\n if (this.blocks) {\n closeChannelParams.targetConf = this.blocks;\n }\n if (this.fees) {\n closeChannelParams.satPerByte = this.fees;\n }\n this.store.dispatch(closeChannel({ payload: closeChannelParams }));\n this.dialogRef.close(false);\n }\n\n resetData() {\n this.selTransType = '0';\n this.blocks = null;\n this.fees = null;\n }\n\n onClose() {\n this.dialogRef.close(false);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
\n \n \n \n \n \n Peer\n
\n {{channel.remote_alias}}\n
\n
Pubkey\n
\n {{channel.remote_pubkey}}\n
\n
Channel Point\n
\n {{channel.channel_point}}\n
\n
Channel ID\n
\n {{channel.chan_id}}\n
\n
Initiator{{channel.initiator ? 'Yes' : 'No'}}Static Remote Key{{channel.static_remote_key ? 'Yes' : 'No'}}Uptime ({{timeUnit}}){{channel.uptime_str}} Lifetime ({{timeUnit}}){{channel.lifetime_str}} Commit Fee (Sats){{channel.commit_fee | number}} Commit Weight{{channel.commit_weight | number}} Fee/KW{{channel.fee_per_kw | number}} Updates{{channel.num_updates | number}} Unsettled Balance (Sats){{channel.unsettled_balance | number}} Capacity (Sats){{channel.capacity | number}} Local Reserve (Sats){{channel.local_chan_reserve_sat | number}} Remote Reserve (Sats){{channel.remote_chan_reserve_sat | number}} Sats Sent{{channel.total_satoshis_sent | number}} Sats Received{{channel.total_satoshis_received | number}} Local Balance (Sats){{channel.local_balance | number}} Remote Balance (Sats){{channel.remote_balance | number}} Balance Score\n
\n {{channel.balancedness || 0 | number}}\n
\n 0 ? ((+channel.local_balance/((+channel.local_balance)+(+channel.remote_balance)))*100) : 0}}\">\n
\n
\n \n \n Update Fee Policy\n Download CSV\n \n
\n
\n
\n \n \n View Info\n View Remote Fee \n Update Fee Policy\n 0 || +versionsArr[1] >= 9\" (click)=\"onCircularRebalance(channel)\">Circular Rebalance\n Loop Out\n Close Channel\n \n
\n
\n

No peers connected. Add a peer in order to open a channel.

\n

0 && (!channels?.data || channels?.data?.length<1) && apiCallStatus?.status === apiCallStatusEnum.COMPLETED\">No channel available.

\n

Getting channels...

\n

{{errorMessage}}

\n
\n
\n \n
\n","import { Component, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { take, takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { faEye, faEyeSlash } from '@fortawesome/free-solid-svg-icons';\n\nimport { ChannelInformationComponent } from '../../channel-information-modal/channel-information.component';\nimport { SelNodeChild } from '../../../../../shared/models/RTLconfig';\nimport { BlockchainBalance, Channel, ChannelsSummary, GetInfo, LightningBalance, Peer } from '../../../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, UserPersonaEnum, LoopTypeEnum, APICallStatusEnum, UI_MESSAGES, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../../../shared/services/logger.service';\nimport { LoopService } from '../../../../../shared/services/loop.service';\nimport { CommonService } from '../../../../../shared/services/common.service';\nimport { ChannelRebalanceComponent } from '../../channel-rebalance-modal/channel-rebalance.component';\nimport { CloseChannelComponent } from '../../close-channel-modal/close-channel.component';\nimport { LoopModalComponent } from '../../../../../shared/components/ln-services/loop/loop-modal/loop-modal.component';\n\nimport { LNDEffects } from '../../../../store/lnd.effects';\nimport { RTLEffects } from '../../../../../store/rtl.effects';\nimport { RTLState } from '../../../../../store/rtl.state';\nimport { openAlert, openConfirmation } from '../../../../../store/rtl.actions';\nimport { channelLookup, fetchChannels, updateChannel } from '../../../../store/lnd.actions';\nimport { blockchainBalance, channels, lndNodeInformation, lndNodeSettings, lndPageSettings, peers } from '../../../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-channel-open-table',\n templateUrl: './channel-open-table.component.html',\n styleUrls: ['./channel-open-table.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Channels') }\n ]\n})\nexport class ChannelOpenTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'peers_channels';\n public tableSetting: TableSetting = { tableId: 'open', recordsPerPage: PAGE_SIZE, sortBy: 'balancedness', sortOrder: SortOrderEnum.DESCENDING };\n public timeUnit = 'mins:secs';\n public userPersonaEnum = UserPersonaEnum;\n public selNode: SelNodeChild | null = {};\n public totalBalance = 0;\n public displayedColumns: any[] = [];\n public channelsData: Channel[] = [];\n public channels: any = new MatTableDataSource([]);\n public myChanPolicy: any = {};\n public information: GetInfo = {};\n public numPeers = -1;\n public selFilter = '';\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public versionsArr: string[] = [];\n public faEye = faEye;\n public faEyeSlash = faEyeSlash;\n private targetConf = 6;\n public errorMessage = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(\n private logger: LoggerService,\n private store: Store,\n private lndEffects: LNDEffects,\n private commonService: CommonService,\n private rtlEffects: RTLEffects,\n private decimalPipe: DecimalPipe,\n private loopService: LoopService,\n private router: Router,\n private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n this.selFilter = this.router.getCurrentNavigation()?.extras?.state?.filter ? this.router.getCurrentNavigation()?.extras?.state?.filter : '';\n }\n\n ngOnInit() {\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((nodeSettings) => {\n this.selNode = nodeSettings;\n });\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[1])).\n subscribe((nodeInfo: GetInfo) => {\n this.information = nodeInfo;\n if (this.information && this.information.version) {\n this.versionsArr = this.information.version.split('.');\n }\n });\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[2])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.unshift('private');\n this.displayedColumns.unshift('active');\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(peers).pipe(takeUntil(this.unSubs[3])).\n subscribe((peersSelector: { peers: Peer[], apiCallStatus: ApiCallStatusPayload }) => {\n this.numPeers = (peersSelector.peers && peersSelector.peers.length) ? peersSelector.peers.length : 0;\n });\n this.store.select(blockchainBalance).pipe(takeUntil(this.unSubs[4])).\n subscribe((bcBalanceSelector: { blockchainBalance: BlockchainBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.totalBalance = bcBalanceSelector.blockchainBalance?.total_balance ? +bcBalanceSelector.blockchainBalance?.total_balance : 0;\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[5])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = channelsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.channelsData = this.calculateUptime(channelsSelector.channels);\n if (this.channelsData.length > 0) {\n this.loadChannelsTable(this.channelsData);\n }\n this.logger.info(channelsSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.channelsData.length > 0) {\n this.loadChannelsTable(this.channelsData);\n }\n }\n\n onViewRemotePolicy(selChannel: Channel) {\n this.store.dispatch(channelLookup({ payload: { uiMessage: UI_MESSAGES.GET_REMOTE_POLICY, channelID: selChannel.chan_id?.toString() + '/' + this.information.identity_pubkey } }));\n this.lndEffects.setLookup.pipe(take(1)).subscribe((resLookup): boolean | void => {\n if (!resLookup.fee_base_msat && !resLookup.fee_rate_milli_msat && !resLookup.time_lock_delta) {\n return false;\n }\n const reorderedChannelPolicy = [\n [{ key: 'fee_base_msat', value: resLookup.fee_base_msat, title: 'Base Fees (mSats)', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'fee_rate_milli_msat', value: resLookup.fee_rate_milli_msat, title: 'Fee Rate (milli mSats)', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'fee_rate_milli_msat', value: resLookup.fee_rate_milli_msat / 10000, title: 'Fee Rate (%)', width: 25, type: DataTypeEnum.NUMBER, digitsInfo: '1.0-8' },\n { key: 'time_lock_delta', value: resLookup.time_lock_delta, title: 'Time Lock Delta', width: 25, type: DataTypeEnum.NUMBER }]\n ];\n const titleMsg = 'Remote policy for Channel: ' + ((!selChannel.remote_alias && !selChannel.chan_id) ? selChannel.channel_point : (selChannel.remote_alias && selChannel.chan_id) ? selChannel.remote_alias + ' (' + selChannel.chan_id + ')' : selChannel.remote_alias ? selChannel.remote_alias : selChannel.chan_id);\n setTimeout(() => {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Remote Channel Policy',\n titleMessage: titleMsg,\n message: reorderedChannelPolicy\n }\n }\n }));\n }, 0);\n });\n }\n\n onCircularRebalance(selChannel: any) {\n const channelsToRebalanceMessage = {\n channels: this.channelsData,\n selChannel: selChannel\n };\n this.store.dispatch(openAlert({\n payload: {\n data: {\n message: channelsToRebalanceMessage,\n component: ChannelRebalanceComponent\n }\n }\n }));\n }\n\n onChannelUpdate(channelToUpdate: any) {\n if (channelToUpdate === 'all') {\n const confirmationMsg = [];\n this.store.dispatch(openConfirmation({\n payload: {\n data: {\n type: AlertTypeEnum.CONFIRM,\n alertTitle: 'Update Fee Policy',\n noBtnText: 'Cancel',\n yesBtnText: 'Update All Channels',\n message: confirmationMsg,\n titleMessage: 'Update fee policy for all channels',\n flgShowInput: true,\n getInputs: [\n { placeholder: 'Base Fee (mSat)', inputType: DataTypeEnum.NUMBER, inputValue: 1000, step: 100, width: 32 },\n { placeholder: 'Fee Rate (mili mSat)', inputType: DataTypeEnum.NUMBER, inputValue: 1, min: 1, width: 32, hintFunction: this.percentHintFunction },\n { placeholder: 'Time Lock Delta', inputType: DataTypeEnum.NUMBER, inputValue: 40, width: 32 }\n ]\n }\n }\n }));\n this.rtlEffects.closeConfirm.\n pipe(takeUntil(this.unSubs[6])).\n subscribe((confirmRes) => {\n if (confirmRes) {\n const base_fee = confirmRes[0].inputValue;\n const fee_rate = confirmRes[1].inputValue;\n const time_lock_delta = confirmRes[2].inputValue;\n this.store.dispatch(updateChannel({ payload: { baseFeeMsat: base_fee, feeRate: fee_rate, timeLockDelta: time_lock_delta, chanPoint: 'all' } }));\n }\n });\n } else {\n this.myChanPolicy = { fee_base_msat: 0, fee_rate_milli_msat: 0, time_lock_delta: 0, min_htlc_msat: 0, max_htlc_msat: 0 };\n this.store.dispatch(channelLookup({ payload: { uiMessage: UI_MESSAGES.GET_CHAN_POLICY, channelID: channelToUpdate.chan_id.toString() } }));\n this.lndEffects.setLookup.pipe(take(1)).subscribe((resLookup) => {\n if (resLookup.node1_pub === this.information.identity_pubkey) {\n this.myChanPolicy = resLookup.node1_policy;\n } else if (resLookup.node2_pub === this.information.identity_pubkey) {\n this.myChanPolicy = resLookup.node2_policy;\n } else {\n this.myChanPolicy = { fee_base_msat: 0, fee_rate_milli_msat: 0, time_lock_delta: 0 };\n }\n this.logger.info(this.myChanPolicy);\n const titleMsg = 'Update fee policy for Channel: ' + ((!channelToUpdate.remote_alias && !channelToUpdate.chan_id) ?\n channelToUpdate.channel_point : (channelToUpdate.remote_alias && channelToUpdate.chan_id) ? channelToUpdate.remote_alias +\n ' (' + channelToUpdate.chan_id + ')' : channelToUpdate.remote_alias ? channelToUpdate.remote_alias : channelToUpdate.chan_id);\n const confirmationMsg = [];\n setTimeout(() => {\n this.store.dispatch(openConfirmation({\n payload: {\n data: {\n type: AlertTypeEnum.CONFIRM,\n alertTitle: 'Update Fee Policy',\n titleMessage: titleMsg,\n noBtnText: 'Cancel',\n yesBtnText: 'Update Channel',\n message: confirmationMsg,\n flgShowInput: true,\n hasAdvanced: true,\n getInputs: [\n { placeholder: 'Base Fee (mSat)', inputType: DataTypeEnum.NUMBER, inputValue: (this.myChanPolicy.fee_base_msat === '') ? 0 : this.myChanPolicy.fee_base_msat, step: 100, width: 32 },\n { placeholder: 'Fee Rate (mili mSat)', inputType: DataTypeEnum.NUMBER, inputValue: this.myChanPolicy.fee_rate_milli_msat, min: 1, width: 32, hintFunction: this.percentHintFunction },\n { placeholder: 'Time Lock Delta', inputType: DataTypeEnum.NUMBER, inputValue: this.myChanPolicy.time_lock_delta, width: 32 },\n { placeholder: 'Minimum HTLC (mSat)', inputType: DataTypeEnum.NUMBER, inputValue: (this.myChanPolicy.min_htlc === '') ? 0 : this.myChanPolicy.min_htlc, width: 49, advancedField: true },\n { placeholder: 'Maximum HTLC (mSat)', inputType: DataTypeEnum.NUMBER, inputValue: (this.myChanPolicy.max_htlc_msat === '') ? 0 : this.myChanPolicy.max_htlc_msat, width: 49, advancedField: true }\n ]\n }\n }\n }));\n }, 0);\n });\n this.rtlEffects.closeConfirm.\n pipe(takeUntil(this.unSubs[7])).\n subscribe((confirmRes: boolean | any[]) => {\n if (confirmRes) {\n const updateChanPayload = {\n baseFeeMsat: confirmRes[0].inputValue,\n feeRate: confirmRes[1].inputValue,\n timeLockDelta: confirmRes[2].inputValue,\n chanPoint: channelToUpdate.channel_point\n };\n if ((confirmRes).length > 3 && confirmRes[3] && confirmRes[4]) {\n updateChanPayload['minHtlcMsat'] = confirmRes[3].inputValue;\n updateChanPayload['maxHtlcMsat'] = confirmRes[4].inputValue;\n }\n this.store.dispatch(updateChannel({ payload: updateChanPayload }));\n }\n });\n }\n this.applyFilter();\n }\n\n onChannelClose(channelToClose: Channel) {\n if (channelToClose.active) {\n this.store.dispatch(fetchChannels()); // To get latest pending htlc status\n }\n this.store.dispatch(openAlert({\n payload: {\n data: {\n channel: channelToClose,\n component: CloseChannelComponent\n }\n }\n }));\n }\n\n onChannelClick(selChannel: Channel, event: any) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n channel: selChannel,\n showCopy: true,\n component: ChannelInformationComponent\n }\n }\n }));\n }\n\n applyFilter() {\n this.channels.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.channels.filterPredicate = (rowData: Channel, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = ((rowData.active) ? 'active' : 'inactive') + (rowData.chan_id ? rowData.chan_id.toLowerCase() : '') +\n (rowData.remote_pubkey ? rowData.remote_pubkey.toLowerCase() : '') + (rowData.remote_alias ? rowData.remote_alias.toLowerCase() : '') +\n (rowData.capacity ? rowData.capacity : '') + (rowData.local_balance ? rowData.local_balance : '') +\n (rowData.remote_balance ? rowData.remote_balance : '') + (rowData.total_satoshis_sent ? rowData.total_satoshis_sent : '') +\n (rowData.total_satoshis_received ? rowData.total_satoshis_received : '') + (rowData.commit_fee ? rowData.commit_fee : '') +\n (rowData.private ? 'private' : 'public');\n break;\n\n case 'active':\n rowToFilter = rowData?.active ? 'active' : 'inactive';\n break;\n\n case 'private':\n rowToFilter = rowData?.private ? 'private' : 'public';\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return this.selFilterBy === 'active' ? rowToFilter.indexOf(fltr) === 0 : rowToFilter.includes(fltr);\n };\n }\n\n loadChannelsTable(mychannels: Channel[]) {\n this.channels = new MatTableDataSource([...mychannels]);\n this.channels.sort = this.sort;\n this.channels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.channels.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.channels.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.channels);\n }\n\n calculateUptime(channels: Channel[]) {\n const minutesDivider = 60;\n const hoursDivider = minutesDivider * 60;\n const daysDivider = hoursDivider * 24;\n const yearsDivider = daysDivider * 365;\n let maxDivider = minutesDivider;\n let minDivider = 1;\n let max_uptime = 0;\n channels.forEach((channel) => {\n if (channel.uptime && +channel.uptime > max_uptime) {\n max_uptime = +channel.uptime;\n }\n });\n switch (true) {\n case max_uptime < hoursDivider:\n this.timeUnit = 'Mins:Secs';\n maxDivider = minutesDivider;\n minDivider = 1;\n break;\n\n case max_uptime >= hoursDivider && max_uptime < daysDivider:\n this.timeUnit = 'Hrs:Mins';\n maxDivider = hoursDivider;\n minDivider = minutesDivider;\n break;\n\n case max_uptime >= daysDivider && max_uptime < yearsDivider:\n this.timeUnit = 'Days:Hrs';\n maxDivider = daysDivider;\n minDivider = hoursDivider;\n break;\n\n case max_uptime > yearsDivider:\n this.timeUnit = 'Yrs:Days';\n maxDivider = yearsDivider;\n minDivider = daysDivider;\n break;\n\n default:\n this.timeUnit = 'Mins:Secs';\n maxDivider = minutesDivider;\n minDivider = 1;\n break;\n }\n channels.forEach((channel) => {\n channel.uptime_str = channel.uptime ? (this.decimalPipe.transform(Math.floor(+channel.uptime / maxDivider), '2.0-0') + ':' + this.decimalPipe.transform(Math.round((+channel.uptime % maxDivider) / minDivider), '2.0-0')) : '---';\n channel.lifetime_str = channel.lifetime ? (this.decimalPipe.transform(Math.floor(+channel.lifetime / maxDivider), '2.0-0') + ':' + this.decimalPipe.transform(Math.round((+channel.lifetime % maxDivider) / minDivider), '2.0-0')) : '---';\n });\n return channels;\n }\n\n onLoopOut(selChannel: Channel) {\n this.loopService.getLoopOutTermsAndQuotes(this.targetConf).\n pipe(takeUntil(this.unSubs[8])).\n subscribe((response) => {\n this.store.dispatch(openAlert({\n payload: {\n minHeight: '56rem', data: {\n channel: selChannel,\n minQuote: response[0],\n maxQuote: response[1],\n direction: LoopTypeEnum.LOOP_OUT,\n component: LoopModalComponent\n }\n }\n }));\n });\n }\n\n onDownloadCSV() {\n if (this.channels.data && this.channels.data.length > 0) {\n this.commonService.downloadFile(this.channels.data, 'Open-channels');\n }\n }\n\n percentHintFunction(fee_rate_milli_msat) {\n return (fee_rate_milli_msat / 10000).toString() + '%';\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n Bump Fee\n
\n \n
\n \n
\n
\n

Bump fee for channel point: {{bumpFeeChannel?.channel?.channel_point}}\n \n

\n
\n
\n \n Bumping fee on pending open channels is an advanced feature, attempt it only if you are familiar with the functionality of Bitcoin transactions.\n
Before attempting fee bump ensure the following:
\n
1: Use a Bitcoin block explorer to ensure that channel opening transaction is not confirmed.
\n
2: The channel opening transaction must have a sizable change output, which can be spent further. The fee cannot be bumped without the change output.
\n
3: Find the index value of the change output via a block explorer.
\n
4: Enter the index value of the change output in the form below and the desired fee rate.
\n
5: Upon successful fee bump, use your block explorer to track the child transaction in the mempool, which should be linked with the change output transaction.
\n
\n
\n
\n \n \n Index for change output is required.\n Invalid index value.\n \n \n \n \n {{transType.name}}\n \n \n \n \n \n Number of blocks is required.\n \n \n \n Fees is required.\n \n
\n
\n \n {{bumpFeeError}}\n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';\nimport { NgModel } from '@angular/forms';\nimport { MatDialogRef, MAT_DIALOG_DATA } from '@angular/material/dialog';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { faCopy, faInfoCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport { PendingOpenChannel } from '../../../../shared/models/lndModels';\nimport { PendingOpenChannelInformation } from '../../../../shared/models/alertData';\nimport { TRANS_TYPES } from '../../../../shared/services/consts-enums-functions';\nimport { DataService } from '../../../../shared/services/data.service';\nimport { LoggerService } from '../../../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-bump-fee',\n templateUrl: './bump-fee.component.html',\n styleUrls: ['./bump-fee.component.scss']\n})\nexport class BumpFeeComponent implements OnInit, OnDestroy {\n\n private outputIdx: NgModel;\n @ViewChild('outputIdx') set payReq(outIdx: NgModel) {\n if (outIdx) {\n this.outputIdx = outIdx;\n }\n }\n public bumpFeeChannel: PendingOpenChannel;\n public transTypes = [...TRANS_TYPES];\n public selTransType = '2';\n public blocks: number | null = null;\n public fees: number | null = null;\n public outputIndex: number | null = null;\n public faCopy = faCopy;\n public faInfoCircle = faInfoCircle;\n public faExclamationTriangle = faExclamationTriangle;\n public bumpFeeError = '';\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: PendingOpenChannelInformation, private logger: LoggerService, private dataService: DataService, private snackBar: MatSnackBar) { }\n\n ngOnInit() {\n this.transTypes = this.transTypes.splice(1);\n this.bumpFeeChannel = this.data.pendingChannel;\n const channelPointArr = this.bumpFeeChannel.channel?.channel_point?.split(':') || [];\n if (this.bumpFeeChannel && this.bumpFeeChannel.channel) {\n this.bumpFeeChannel.channel.txid_str = channelPointArr[0] || (this.bumpFeeChannel.channel && this.bumpFeeChannel.channel.channel_point ? this.bumpFeeChannel.channel.channel_point : '');\n this.bumpFeeChannel.channel.output_index = +channelPointArr[1] || null;\n }\n }\n\n onBumpFee(): boolean | void {\n if (this.outputIndex === this.bumpFeeChannel.channel?.output_index) {\n this.outputIdx.control.setErrors({ pendingChannelOutputIndex: true });\n return true;\n }\n if ((!this.outputIndex && this.outputIndex !== 0) || (this.selTransType === '1' && (!this.blocks || this.blocks === 0)) || (this.selTransType === '2' && (!this.fees || this.fees === 0))) {\n return true;\n }\n this.dataService.bumpFee((this.bumpFeeChannel && this.bumpFeeChannel.channel && this.bumpFeeChannel.channel.txid_str ? this.bumpFeeChannel.channel.txid_str : ''), this.outputIndex, (this.blocks || null), (this.fees || null)).pipe(takeUntil(this.unSubs[0])).\n subscribe({\n next: (res) => {\n this.dialogRef.close(false);\n }, error: (err) => {\n this.logger.error(err);\n this.bumpFeeError = err.message ? err.message : err;\n }\n });\n }\n\n onCopyID(payload: string) {\n this.snackBar.open('Transaction ID copied.');\n }\n\n resetData() {\n this.bumpFeeError = '';\n this.selTransType = '2';\n this.blocks = null;\n this.fees = null;\n this.outputIdx.control.setErrors(null);\n }\n\n onClose() {\n this.dialogRef.close(false);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n Total Limbo Balance: {{pendingChannels.total_limbo_balance | number}} Sats\n \n \n \n \n Pending Open ({{pendingOpenChannelsLength}})\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Peer\n
\n {{channel.channel.remote_alias}}\n
\n
Pubkey\n
\n {{channel.channel.remote_node_pub}}\n
\n
Channel Point\n
\n {{channel.channel.channel_point}}\n
\n
Initiator{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}Commitment Type{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}Confirmation Height{{channel.confirmation_height | number}}Commit Fee (Sats){{channel.commit_fee | number}}Commit Weight{{channel.commit_weight | number}}Fee/KW{{channel.fee_per_kw | number}}Capacity (Sats){{channel.channel.capacity | number}}Local Balance (Sats){{channel.channel.local_balance | number}}Remote Balance (Sats){{channel.channel.remote_balance | number}}\n
Actions
\n
\n
\n \n \n View Info\n Bump Fee\n \n
\n
\n

No pending channel.

\n

Getting pending channels...

\n

{{errorMessage}}

\n
\n
\n
\n \n \n \n Pending Force Closing ({{pendingForceClosingChannelsLength}})\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Closing Tx ID\n
\n {{channel.closing_txid}}\n
\n
Peer\n
\n {{channel.channel.remote_alias}}\n
\n
Pubkey\n
\n {{channel.channel.remote_node_pub}}\n
\n
Channel Point\n
\n {{channel.channel.channel_point}}\n
\n
Initiator{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}Commitment Type{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}Limbo Balance (Sats){{channel.limbo_balance | number}}Maturity Height{{channel.maturity_height | number}}Blocks till Maturity{{channel.blocks_til_maturity | number}}Recovered Balance (Sats){{channel.recovered_balance | number}}Capacity (Sats){{channel.channel.capacity | number}}Local Balance (Sats){{channel.channel.local_balance | number}}Remote Balance (Sats){{channel.channel.remote_balance | number}}\n
Actions
\n
\n \n \n

No pending channel.

\n

Getting pending channels...

\n

{{errorMessage}}

\n
\n
\n
\n \n \n \n Pending Closing ({{pendingClosingChannelsLength}})\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Closing Tx ID\n
\n {{channel.closing_txid}}\n
\n
Peer\n
\n {{channel.channel.remote_alias}}\n
\n
Pubkey\n
\n {{channel.channel.remote_node_pub}}\n
\n
Channel Point\n
\n {{channel.channel.channel_point}}\n
\n
Initiator{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}Commitment Type{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}Capacity (Sats){{channel.channel.capacity | number}}Local Balance (Sats){{channel.channel.local_balance | number}}Remote Balance (Sats){{channel.channel.remote_balance | number}}\n
Actions
\n
\n \n \n

No pending channel.

\n

Getting pending channels...

\n

{{errorMessage}}

\n
\n
\n
\n \n \n \n Waiting Close ({{pendingWaitClosingChannelsLength}})\n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Closing Tx ID\n
\n {{channel.closing_txid}}\n
\n
Peer\n
\n {{channel.channel.remote_alias}}\n
\n
Pubkey\n
\n {{channel.channel.remote_node_pub}}\n
\n
Channel Point\n
\n {{channel.channel.channel_point}}\n
\n
Initiator{{channel.channel.initiator | camelcaseWithReplace:'initiator_'}}Commitment Type{{channel.channel.commitment_type | camelcaseWithReplace:'commitment_type':'_'}}Limbo Balance (Sats){{channel.limbo_balance | number}}Capacity (Sats){{channel.channel.capacity | number}}Local Balance (Sats){{channel.channel.local_balance | number}}Remote Balance (Sats){{channel.channel.remote_balance | number}} fxLayoutAlign=\"end center\"\n
Actions
\n
\n \n \n

No pending channel.

\n

Getting pending channels...

\n

{{errorMessage}}

\n
\n
\n
\n
\n
","import { Component, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Channel, GetInfo, PendingChannels, PendingClosingChannel, PendingForceClosingChannel, PendingOpenChannel, WaitingCloseChannel } from '../../../../../shared/models/lndModels';\nimport { AlertTypeEnum, APICallStatusEnum, DataTypeEnum, LND_DEFAULT_PAGE_SETTINGS, PAGE_SIZE, ScreenSizeEnum, SortOrderEnum } from '../../../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../../../shared/models/apiCallsPayload';\nimport { SelNodeChild } from '../../../../../shared/models/RTLconfig';\nimport { LoggerService } from '../../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../../shared/services/common.service';\nimport { BumpFeeComponent } from '../../bump-fee-modal/bump-fee.component';\n\nimport { openAlert } from '../../../../../store/rtl.actions';\nimport { RTLState } from '../../../../../store/rtl.state';\nimport { lndNodeInformation, lndNodeSettings, lndPageSettings, pendingChannels } from '../../../../store/lnd.selector';\nimport { PageSettings, TableSetting } from '../../../../../shared/models/pageSettings';\n\n@Component({\n selector: 'rtl-channel-pending-table',\n templateUrl: './channel-pending-table.component.html',\n styleUrls: ['./channel-pending-table.component.scss']\n})\nexport class ChannelPendingTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n public PAGE_ID = 'peers_channels';\n public openTableSetting: TableSetting = { tableId: 'pending_open', recordsPerPage: PAGE_SIZE, sortBy: 'capacity', sortOrder: SortOrderEnum.DESCENDING };\n public forceClosingTableSetting: TableSetting = { tableId: 'pending_force_closing', recordsPerPage: PAGE_SIZE, sortBy: 'limbo_balance', sortOrder: SortOrderEnum.DESCENDING };\n public closingTableSetting: TableSetting = { tableId: 'pending_closing', recordsPerPage: PAGE_SIZE, sortBy: 'capacity', sortOrder: SortOrderEnum.DESCENDING };\n public waitingCloseTableSetting: TableSetting = { tableId: 'pending_waiting_close', recordsPerPage: PAGE_SIZE, sortBy: 'limbo_balance', sortOrder: SortOrderEnum.DESCENDING };\n public selNode: SelNodeChild | null = {};\n public information: GetInfo = {};\n public pendingChannels: PendingChannels = {};\n public displayedOpenColumns: any[] = [];\n public pendingOpenChannelsLength = 0;\n public pendingOpenChannels: any = new MatTableDataSource([]);\n public displayedForceClosingColumns: any[] = [];\n public pendingForceClosingChannelsLength = 0;\n public pendingForceClosingChannels: any = new MatTableDataSource([]);\n public displayedClosingColumns: any[] = [];\n public pendingClosingChannelsLength = 0;\n public pendingClosingChannels: any = new MatTableDataSource([]);\n public displayedWaitClosingColumns: any[] = [];\n public pendingWaitClosingChannelsLength = 0;\n public pendingWaitClosingChannels: any = new MatTableDataSource([]);\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private commonService: CommonService) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[1])).subscribe((nodeInfo: GetInfo) => { this.information = nodeInfo; });\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[2])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.openTableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.openTableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.openTableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedOpenColumns = JSON.parse(JSON.stringify(this.openTableSetting.columnSelectionSM));\n } else {\n this.displayedOpenColumns = JSON.parse(JSON.stringify(this.openTableSetting.columnSelection));\n }\n this.displayedOpenColumns.push('actions');\n this.logger.info(this.displayedOpenColumns);\n this.forceClosingTableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.forceClosingTableSetting.tableId) ||\n LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.forceClosingTableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedForceClosingColumns = JSON.parse(JSON.stringify(this.forceClosingTableSetting.columnSelectionSM));\n } else {\n this.displayedForceClosingColumns = JSON.parse(JSON.stringify(this.forceClosingTableSetting.columnSelection));\n }\n this.displayedForceClosingColumns.push('actions');\n this.logger.info(this.displayedForceClosingColumns);\n this.closingTableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.closingTableSetting.tableId) ||\n LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.closingTableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedClosingColumns = JSON.parse(JSON.stringify(this.closingTableSetting.columnSelectionSM));\n } else {\n this.displayedClosingColumns = JSON.parse(JSON.stringify(this.closingTableSetting.columnSelection));\n }\n this.displayedClosingColumns.push('actions');\n this.logger.info(this.displayedClosingColumns);\n this.waitingCloseTableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.waitingCloseTableSetting.tableId) ||\n LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.waitingCloseTableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedWaitClosingColumns = JSON.parse(JSON.stringify(this.waitingCloseTableSetting.columnSelectionSM));\n } else {\n this.displayedWaitClosingColumns = JSON.parse(JSON.stringify(this.waitingCloseTableSetting.columnSelection));\n }\n this.displayedWaitClosingColumns.push('actions');\n this.logger.info(this.displayedWaitClosingColumns);\n });\n this.store.select(pendingChannels).pipe(takeUntil(this.unSubs[3])).\n subscribe((pendingChannelsSelector: { pendingChannels: PendingChannels, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = pendingChannelsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.pendingChannels = pendingChannelsSelector.pendingChannels;\n if (this.pendingChannels.pending_open_channels && this.pendingChannels.pending_open_channels.length && this.pendingChannels.pending_open_channels.length > 0) {\n this.loadOpenChannelsTable(this.pendingChannels.pending_open_channels);\n }\n if (this.pendingChannels.pending_force_closing_channels && this.pendingChannels.pending_force_closing_channels.length && this.pendingChannels.pending_force_closing_channels.length > 0) {\n this.loadForceClosingChannelsTable(this.pendingChannels.pending_force_closing_channels);\n }\n if (this.pendingChannels.pending_closing_channels && this.pendingChannels.pending_closing_channels.length && this.pendingChannels.pending_closing_channels.length > 0) {\n this.loadClosingChannelsTable(this.pendingChannels.pending_closing_channels);\n }\n if (this.pendingChannels.waiting_close_channels && this.pendingChannels.waiting_close_channels.length && this.pendingChannels.waiting_close_channels.length > 0) {\n this.loadWaitClosingChannelsTable(this.pendingChannels.waiting_close_channels);\n }\n this.logger.info(pendingChannelsSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.pendingChannels.pending_open_channels && this.pendingChannels.pending_open_channels.length && this.pendingChannels.pending_open_channels.length > 0) {\n this.loadOpenChannelsTable(this.pendingChannels.pending_open_channels);\n }\n if (this.pendingChannels.pending_force_closing_channels && this.pendingChannels.pending_force_closing_channels.length && this.pendingChannels.pending_force_closing_channels.length > 0) {\n this.loadForceClosingChannelsTable(this.pendingChannels.pending_force_closing_channels);\n }\n if (this.pendingChannels.pending_closing_channels && this.pendingChannels.pending_closing_channels.length && this.pendingChannels.pending_closing_channels.length > 0) {\n this.loadClosingChannelsTable(this.pendingChannels.pending_closing_channels);\n }\n if (this.pendingChannels.waiting_close_channels && this.pendingChannels.waiting_close_channels.length && this.pendingChannels.waiting_close_channels.length > 0) {\n this.loadWaitClosingChannelsTable(this.pendingChannels.waiting_close_channels);\n }\n }\n\n onOpenClick(selChannel: any) {\n const fcChannelObj1 = JSON.parse(JSON.stringify(selChannel, ['commit_weight', 'confirmation_height', 'fee_per_kw', 'commit_fee'], 2));\n const fcChannelObj2 = JSON.parse(JSON.stringify(selChannel.channel, ['remote_alias', 'channel_point', 'remote_balance', 'local_balance', 'remote_node_pub', 'capacity'], 2));\n const preOrderedChannel: any = {};\n Object.assign(preOrderedChannel, fcChannelObj1, fcChannelObj2);\n const reorderedChannel = [\n [{ key: 'channel_point', value: preOrderedChannel.channel_point, title: 'Channel Point', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'remote_node_pub', value: preOrderedChannel.remote_node_pub, title: 'Peer Node Pubkey', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'remote_alias', value: preOrderedChannel.remote_alias, title: 'Peer Alias', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'capacity', value: preOrderedChannel.capacity, title: 'Capacity', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'confirmation_height', value: preOrderedChannel.confirmation_height, title: 'Confirmation Height', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'local_balance', value: preOrderedChannel.local_balance, title: 'Local Balance', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'remote_balance', value: preOrderedChannel.remote_balance, title: 'Remote Balance', width: 25, type: DataTypeEnum.NUMBER }],\n [{ key: 'fee_per_kw', value: preOrderedChannel.fee_per_kw, title: 'Fee/KW', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'commit_weight', value: preOrderedChannel.commit_weight, title: 'Commit Weight', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'commit_fee', value: preOrderedChannel.commit_fee, title: 'Commit Fee', width: 50, type: DataTypeEnum.NUMBER }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Opening Channel Information',\n message: reorderedChannel\n }\n }\n }));\n }\n\n onBumpFee(selChannel: PendingOpenChannel) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n pendingChannel: selChannel,\n component: BumpFeeComponent\n }\n }\n }));\n }\n\n onForceClosingClick(selChannel: any) {\n const fcChannelObj1 = JSON.parse(JSON.stringify(selChannel, ['closing_txid', 'limbo_balance', 'maturity_height', 'blocks_til_maturity', 'recovered_balance'], 2));\n const fcChannelObj2 = JSON.parse(JSON.stringify(selChannel.channel, ['remote_alias', 'channel_point', 'remote_balance', 'local_balance', 'remote_node_pub', 'capacity'], 2));\n const preOrderedChannel: any = {};\n Object.assign(preOrderedChannel, fcChannelObj1, fcChannelObj2);\n const reorderedChannel = [\n [{ key: 'closing_txid', value: preOrderedChannel.closing_txid, title: 'Closing Transaction ID', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'channel_point', value: preOrderedChannel.channel_point, title: 'Channel Point', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'remote_alias', value: preOrderedChannel.remote_alias, title: 'Peer Alias', width: 25, type: DataTypeEnum.STRING },\n { key: 'remote_node_pub', value: preOrderedChannel.remote_node_pub, title: 'Peer Node Pubkey', width: 75, type: DataTypeEnum.STRING }],\n [{ key: 'capacity', value: preOrderedChannel.capacity, title: 'Capacity', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'limbo_balance', value: preOrderedChannel.limbo_balance, title: 'Limbo Balance', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'local_balance', value: preOrderedChannel.local_balance, title: 'Local Balance', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'remote_balance', value: preOrderedChannel.remote_balance, title: 'Remote Balance', width: 25, type: DataTypeEnum.NUMBER }],\n [{ key: 'maturity_height', value: preOrderedChannel.maturity_height, title: 'Maturity Height', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'blocks_til_maturity', value: preOrderedChannel.blocks_til_maturity, title: 'Blocks Till Maturity', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'recovered_balance', value: preOrderedChannel.recovered_balance, title: 'Recovered Balance', width: 50, type: DataTypeEnum.NUMBER }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Force Closing Channel Information',\n message: reorderedChannel\n }\n }\n }));\n }\n\n onClosingClick(selChannel: any) {\n const fcChannelObj1 = JSON.parse(JSON.stringify(selChannel, ['closing_txid'], 2));\n const fcChannelObj2 = JSON.parse(JSON.stringify(selChannel.channel, ['remote_alias', 'channel_point', 'remote_balance', 'local_balance', 'remote_node_pub', 'capacity'], 2));\n const preOrderedChannel: any = {};\n Object.assign(preOrderedChannel, fcChannelObj1, fcChannelObj2);\n const reorderedChannel = [\n [{ key: 'closing_txid', value: preOrderedChannel.closing_txid, title: 'Closing Transaction ID', width: 50, type: DataTypeEnum.STRING }],\n [{ key: 'channel_point', value: preOrderedChannel.channel_point, title: 'Channel Point', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'remote_alias', value: preOrderedChannel.remote_alias, title: 'Peer Alias', width: 25, type: DataTypeEnum.STRING },\n { key: 'remote_node_pub', value: preOrderedChannel.remote_node_pub, title: 'Peer Node Pubkey', width: 75, type: DataTypeEnum.STRING }],\n [{ key: 'capacity', value: preOrderedChannel.capacity, title: 'Capacity', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'local_balance', value: preOrderedChannel.local_balance, title: 'Local Balance', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'remote_balance', value: preOrderedChannel.remote_balance, title: 'Remote Balance', width: 50, type: DataTypeEnum.NUMBER }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Closing Channel Information',\n message: reorderedChannel\n }\n }\n }));\n }\n\n onWaitClosingClick(selChannel: any) {\n const fcChannelObj1 = JSON.parse(JSON.stringify(selChannel, ['limbo_balance'], 2));\n const fcChannelObj2 = JSON.parse(JSON.stringify(selChannel.channel, ['remote_alias', 'channel_point', 'remote_balance', 'local_balance', 'remote_node_pub', 'capacity'], 2));\n const fcChannelObj3 = JSON.parse(JSON.stringify(selChannel.commitments, ['local_txid'], 2));\n const preOrderedChannel: any = {};\n Object.assign(preOrderedChannel, fcChannelObj1, fcChannelObj2, fcChannelObj3);\n const reorderedChannel = [\n [{ key: 'local_txid', value: preOrderedChannel.local_txid, title: 'Transaction ID', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'channel_point', value: preOrderedChannel.channel_point, title: 'Channel Point', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'remote_alias', value: preOrderedChannel.remote_alias, title: 'Peer Alias', width: 25, type: DataTypeEnum.STRING },\n { key: 'remote_node_pub', value: preOrderedChannel.remote_node_pub, title: 'Peer Node Pubkey', width: 75, type: DataTypeEnum.STRING }],\n [{ key: 'capacity', value: preOrderedChannel.capacity, title: 'Capacity', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'limbo_balance', value: preOrderedChannel.limbo_balance, title: 'Limbo Balance', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'local_balance', value: preOrderedChannel.local_balance, title: 'Local Balance', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'remote_balance', value: preOrderedChannel.remote_balance, title: 'Remote Balance', width: 25, type: DataTypeEnum.NUMBER }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Wait Closing Channel Information',\n message: reorderedChannel\n }\n }\n }));\n }\n\n loadOpenChannelsTable(channels) {\n this.pendingOpenChannelsLength = (channels.length) ? channels.length : 0;\n this.pendingOpenChannels = new MatTableDataSource([...channels]);\n this.pendingOpenChannels.sort = this.sort;\n this.pendingOpenChannels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.pendingOpenChannels.sort?.sort({ id: this.openTableSetting.sortBy, start: this.openTableSetting.sortOrder, disableClear: true });\n this.logger.info(this.pendingOpenChannels);\n }\n\n loadForceClosingChannelsTable(channels) {\n this.pendingForceClosingChannelsLength = (channels.length) ? channels.length : 0;\n this.pendingForceClosingChannels = new MatTableDataSource([...channels]);\n this.pendingForceClosingChannels.sort = this.sort;\n this.pendingForceClosingChannels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.pendingForceClosingChannels.sort?.sort({ id: this.forceClosingTableSetting.sortBy, start: this.forceClosingTableSetting.sortOrder, disableClear: true });\n this.logger.info(this.pendingForceClosingChannels);\n }\n\n loadClosingChannelsTable(channels) {\n this.pendingClosingChannelsLength = (channels.length) ? channels.length : 0;\n this.pendingClosingChannels = new MatTableDataSource([...channels]);\n this.pendingClosingChannels.sort = this.sort;\n this.pendingClosingChannels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.pendingClosingChannels.sort?.sort({ id: this.closingTableSetting.sortBy, start: this.closingTableSetting.sortOrder, disableClear: true });\n this.logger.info(this.pendingClosingChannels);\n }\n\n loadWaitClosingChannelsTable(channels) {\n this.pendingWaitClosingChannelsLength = (channels.length) ? channels.length : 0;\n this.pendingWaitClosingChannels = new MatTableDataSource([...channels]);\n this.pendingWaitClosingChannels.sort = this.sort;\n this.pendingWaitClosingChannels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.pendingWaitClosingChannels.sort?.sort({ id: this.waitingCloseTableSetting.sortBy, start: this.waitingCloseTableSetting.sortOrder, disableClear: true });\n this.logger.info(this.pendingWaitClosingChannels);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Close Type\n
\n info_outline\n {{channelClosureType[channel.close_type].name}}\n
\n
Peer\n
\n {{channel?.remote_alias}}\n
\n
Pubkey\n
\n {{channel?.remote_pubkey}}\n
\n
Channel Point\n
\n {{channel?.channel_point}}\n
\n
Channel ID\n
\n {{channel?.chan_id}}\n
\n
Closing Tx Hash\n
\n {{channel?.closing_tx_hash}}\n
\n
Chain Hash\n
\n {{channel?.chain_hash}}\n
\n
Open Initiator{{channel.open_initiator | camelcaseWithReplace:'initiator_'}}Close Initiator{{channel.close_initiator | camelcaseWithReplace:'initiator_'}}Timelocked Balance (Sats){{channel.time_locked_balance | number}} \n Capacity (Sats){{channel.capacity | number}} \n Close Height{{channel.close_height | number}}\n Settled Balance (Sats){{channel.settled_balance | number}}\n \n
\n \n \n Download CSV\n \n
\n
\n \n \n \n \n

No closed channel available.

\n

Getting closed channels...

\n

{{errorMessage}}

\n
\n
\n \n
\n","import { Component, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faHistory } from '@fortawesome/free-solid-svg-icons';\n\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { ClosedChannel } from '../../../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, CHANNEL_CLOSURE_TYPE, APICallStatusEnum, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../../shared/services/common.service';\n\nimport { openAlert } from '../../../../../store/rtl.actions';\nimport { RTLState } from '../../../../../store/rtl.state';\nimport { closedChannels, lndPageSettings } from '../../../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-channel-closed-table',\n templateUrl: './channel-closed-table.component.html',\n styleUrls: ['./channel-closed-table.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Channels') }\n ]\n})\nexport class ChannelClosedTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'peers_channels';\n public tableSetting: TableSetting = { tableId: 'closed', recordsPerPage: PAGE_SIZE, sortBy: 'close_type', sortOrder: SortOrderEnum.DESCENDING };\n public channelClosureType = CHANNEL_CLOSURE_TYPE;\n public faHistory = faHistory;\n public displayedColumns: any[] = [];\n public closedChannelsData: ClosedChannel[] = [];\n public closedChannels: any = new MatTableDataSource([]);\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private commonService: CommonService, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(closedChannels).pipe(takeUntil(this.unSubs[1])).\n subscribe((closedChannelsSelector: { closedChannels: ClosedChannel[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = closedChannelsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.closedChannelsData = closedChannelsSelector.closedChannels;\n if (this.closedChannelsData.length > 0) {\n this.loadClosedChannelsTable(this.closedChannelsData);\n }\n this.logger.info(closedChannelsSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.closedChannelsData.length > 0) {\n this.loadClosedChannelsTable(this.closedChannelsData);\n }\n }\n\n applyFilter() {\n this.closedChannels.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.closedChannels.filterPredicate = (rowData: ClosedChannel, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = JSON.stringify(rowData).toLowerCase();\n break;\n\n case 'close_type':\n rowToFilter = (rowData.close_type && this.channelClosureType[rowData.close_type] && this.channelClosureType[rowData.close_type].name ? this.channelClosureType[rowData.close_type].name.toLowerCase() : '');\n break;\n\n case 'open_initiator':\n case 'close_initiator':\n rowToFilter = this.camelCaseWithReplace.transform((rowData[this.selFilterBy] || ''), 'initiator_').trim().toLowerCase();\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return (this.selFilterBy === 'close_type' || this.selFilterBy === 'open_initiator' || this.selFilterBy === 'close_initiator') ? rowToFilter.indexOf(fltr) === 0 : rowToFilter.includes(fltr);\n };\n }\n\n onClosedChannelClick(selChannel: ClosedChannel, event: any) {\n const reorderedChannel = [\n [{ key: 'close_type', value: this.channelClosureType[selChannel.close_type].name, title: 'Close Type', width: 30, type: DataTypeEnum.STRING },\n { key: 'settled_balance', value: selChannel.settled_balance, title: 'Settled Balance', width: 30, type: DataTypeEnum.NUMBER },\n { key: 'time_locked_balance', value: selChannel.time_locked_balance, title: 'Time Locked Balance', width: 40, type: DataTypeEnum.NUMBER }],\n [{ key: 'chan_id', value: selChannel.chan_id, title: 'Channel ID', width: 30 },\n { key: 'capacity', value: selChannel.capacity, title: 'Capacity', width: 30, type: DataTypeEnum.NUMBER },\n { key: 'close_height', value: selChannel.close_height, title: 'Close Height', width: 40, type: DataTypeEnum.NUMBER }],\n [{ key: 'remote_alias', value: selChannel.remote_alias, title: 'Peer Alias', width: 30 },\n { key: 'remote_pubkey', value: selChannel.remote_pubkey, title: 'Peer Public Key', width: 70 }],\n [{ key: 'channel_point', value: selChannel.channel_point, title: 'Channel Point', width: 100 }],\n [{ key: 'closing_tx_hash', value: selChannel.closing_tx_hash, title: 'Closing Transaction Hash', width: 100, type: DataTypeEnum.STRING }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Closed Channel Information',\n message: reorderedChannel\n }\n }\n }));\n }\n\n loadClosedChannelsTable(closedChannels) {\n this.closedChannels = new MatTableDataSource([...closedChannels]);\n this.closedChannels.sort = this.sort;\n this.closedChannels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.closedChannels.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.closedChannels.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.closedChannels);\n }\n\n onDownloadCSV() {\n if (this.closedChannels.data && this.closedChannels.data.length > 0) {\n this.commonService.downloadFile(this.closedChannels.data, 'Closed-channels');\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Amount (Sats)\n \n Active HTLCs: {{channel?.pending_htlcs?.length}}\n \n \n \n {{htlc?.amount | number}}\n \n \n Alias/Incoming\n {{channel?.remote_alias}}\n \n \n {{htlc?.incoming ? 'Yes' : 'No'}}\n \n \n Forwarding Channel\n {{' '}}\n \n \n {{htlc?.forwarding_channel}}\n \n \n \n HTLC Index\n \n {{' '}}\n \n \n {{htlc?.htlc_index | number}}\n \n \n \n Forwarding HTLC Index\n \n {{' '}}\n \n \n {{htlc?.forwarding_htlc_index | number}}\n \n \n \n Expiration Height\n \n {{' '}}\n \n \n {{htlc?.expiration_height | number:'1.0-0'}}\n \n \n \n Hash Lock\n \n {{' '}}\n \n \n {{htlc?.hash_lock}}\n \n \n \n
\n \n \n Download CSV\n \n
\n
\n \n \n \n
\n
\n \n
\n
\n
\n

No active htlc available.

\n

Getting active htlcs...

\n

{{errorMessage}}

\n
\n
\n \n
\n","import { Component, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { ChannelInformationComponent } from '../../channel-information-modal/channel-information.component';\nimport { Channel, ChannelHTLC, ChannelsSummary, LightningBalance } from '../../../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, APICallStatusEnum, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../../shared/services/common.service';\n\nimport { openAlert } from '../../../../../store/rtl.actions';\nimport { RTLState } from '../../../../../store/rtl.state';\nimport { channels, lndPageSettings } from '../../../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-channel-active-htlcs-table',\n templateUrl: './channel-active-htlcs-table.component.html',\n styleUrls: ['./channel-active-htlcs-table.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('HTLCs') }\n ]\n})\nexport class ChannelActiveHTLCsTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'peers_channels';\n public tableSetting: TableSetting = { tableId: 'active_HTLCs', recordsPerPage: PAGE_SIZE, sortBy: 'expiration_height', sortOrder: SortOrderEnum.DESCENDING };\n public channels: any = new MatTableDataSource([]);\n public channelsJSONArr: Channel[] = [];\n public displayedColumns: any[] = [];\n public htlcColumns = [];\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[1])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = channelsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.channelsJSONArr = channelsSelector.channels?.filter((channel) => channel.pending_htlcs && channel.pending_htlcs.length > 0) || [];\n if (this.channelsJSONArr.length > 0 && this.sort && this.paginator && this.displayedColumns.length > 0) {\n this.loadHTLCsTable(this.channelsJSONArr);\n }\n this.logger.info(channelsSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.channelsJSONArr.length > 0) {\n this.loadHTLCsTable(this.channelsJSONArr);\n }\n }\n\n onHTLCClick(selHtlc: ChannelHTLC, selChannel: Channel) {\n const reorderedHTLC = [\n [{ key: 'remote_alias', value: selChannel.remote_alias, title: 'Alias', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'amount', value: selHtlc.amount, title: 'Amount (Sats)', width: 50, type: DataTypeEnum.NUMBER },\n { key: 'incoming', value: (selHtlc.incoming ? 'Yes' : 'No'), title: 'Incoming', width: 50, type: DataTypeEnum.STRING }],\n [{ key: 'expiration_height', value: selHtlc.expiration_height, title: 'Expiration Height', width: 50, type: DataTypeEnum.NUMBER },\n { key: 'hash_lock', value: selHtlc.hash_lock, title: 'Hash Lock', width: 50, type: DataTypeEnum.STRING }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'HTLC Information',\n message: reorderedHTLC\n }\n }\n }));\n }\n\n onChannelClick(selChannel: Channel, event: any) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n channel: selChannel,\n showCopy: true,\n component: ChannelInformationComponent\n }\n }\n }));\n }\n\n applyFilter() {\n this.channels.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.channels.filterPredicate = (rowData: Channel, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = (rowData.remote_alias ? rowData.remote_alias.toLowerCase() : '') +\n rowData.pending_htlcs?.map((htlc) => JSON.stringify(htlc) + (htlc.incoming ? 'yes' : 'no'));\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return rowToFilter.includes(fltr);\n };\n }\n\n loadHTLCsTable(channels: Channel[]) {\n this.channels = (channels) ? new MatTableDataSource([...channels]) : new MatTableDataSource([]);\n this.channels.sort = this.sort;\n this.channels.sortingDataAccessor = (data: any, sortHeaderId: string) => {\n switch (sortHeaderId) {\n case 'amount':\n this.commonService.sortByKey(data.pending_htlcs, sortHeaderId, 'number', this.sort?.direction);\n return data.pending_htlcs && data.pending_htlcs.length ? data.pending_htlcs.length : null;\n\n case 'incoming':\n this.commonService.sortByKey(data.pending_htlcs, sortHeaderId, 'boolean', this.sort?.direction);\n return data.remote_alias ? data.remote_alias : data.remote_pubkey ? data.remote_pubkey : null;\n\n case 'expiration_height':\n this.commonService.sortByKey(data.pending_htlcs, sortHeaderId, 'number', this.sort?.direction);\n return data;\n\n case 'hash_lock':\n this.commonService.sortByKey(data.pending_htlcs, sortHeaderId, 'number', this.sort?.direction);\n return data;\n\n default:\n return (data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null;\n }\n };\n this.channels.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.channels.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n }\n\n onDownloadCSV() {\n if (this.channels.data && this.channels.data.length > 0) {\n this.commonService.downloadFile(this.flattenHTLCs(), 'ActiveHTLCs');\n }\n }\n\n flattenHTLCs() {\n const channelsDataCopy = JSON.parse(JSON.stringify(this.channels.data));\n const flattenedHTLCs = channelsDataCopy?.reduce((acc, curr) => {\n if (curr.pending_htlcs) {\n return acc.concat(curr.pending_htlcs);\n } else {\n return acc.concat(curr);\n }\n }, []);\n return flattenedHTLCs;\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n \n Enter Wallet Password\n Wallet password is required.\n \n
\n \n \n
\n
\n
\n","import { Component, OnInit } from '@angular/core';\nimport { Store } from '@ngrx/store';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { unlockWallet } from '../../store/lnd.actions';\n\n@Component({\n selector: 'rtl-unlock-wallet',\n templateUrl: './unlock.component.html',\n styleUrls: ['./unlock.component.scss']\n})\nexport class UnlockWalletComponent implements OnInit {\n\n walletPassword = '';\n\n constructor(private store: Store) { }\n\n ngOnInit() {\n this.walletPassword = '';\n }\n\n onUnlockWallet(): boolean | void {\n if (!this.walletPassword) {\n return true;\n }\n this.store.dispatch(unlockWallet({ payload: { pwd: window.btoa(this.walletPassword) } }));\n }\n\n resetData() {\n this.walletPassword = '';\n }\n\n}\n","
\n
\n
\n
Warning: Your connection is unsecure, it's not safe to generate private keys over this connection.Are you sure you want to proceed?
\n
\n \n \n
\n
\n
\n
\n
Please re-configure & re-start RTL after securing your LND connction. You can close this window now.
\n
\n \n
\n
\n\n \n
\n \n \n Enter Wallet Password\n Password is required.\n Password must be at least 8 characters in length.\n \n \n \n Confirm Wallet Password\n Confirm password is required.\n Confirm password must be at least 8 characters in length.\n \n
\n cancelPasswords do not match.\n
\n
\n \n
\n
\n
\n \n
\n
\n Existing Cipher\n \n \n Cipher Seed\n Cipher seed is required.\n Invalid Cipher. Enter comma separated 24 words cipher seed.\n \n
\n
\n \n \n
\n
\n
\n \n
\n
\n Existing Passphrase\n \n \n Enter Passphrase\n Passphrase is required.\n \n
\n
\n \n \n \n
\n
\n
\n \n vpn_key\n \n \n swap_calls\n \n \n fingerprint\n \n
\n
0 && initWalletResponse !== ''\">\n
\n
YOU MUST WRITE DOWN THIS SEED TO BE ABLE TO RESTORE THE WALLET!
\n
\n {{genSeed}}\n
\n
Wallet initialization is done.
\n
The node will be usable only after LND has synced completely with the network.
\n
Click continue only after writing down the seed.
\n
\n \n
\n
\n
\n
0 && initWalletResponse === ''\">\n
\n
Something went wrong! Unable to initialize wallet!
\n
\n \n
\n
\n
\n
\n
\n
Wallet recovery is done.
\n
The node will be usable only after LND has synced completely with the network.
\n
\n \n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators, ValidatorFn, ValidationErrors } from '@angular/forms';\nimport { STEPPER_GLOBAL_OPTIONS } from '@angular/cdk/stepper';\nimport { MatStepper } from '@angular/material/stepper';\n\nimport { LNDEffects } from '../../store/lnd.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { updateSelectedNodeOptions } from '../../../store/rtl.actions';\nimport { fetchInfoLND, genSeed, initWallet } from '../../store/lnd.actions';\n\nexport function matchedPasswords(control: UntypedFormGroup): ValidationErrors | null {\n const initWalletPassword = control.get('initWalletPassword');\n const initWalletConfirmPassword = control.get('initWalletConfirmPassword');\n return initWalletPassword && initWalletConfirmPassword && initWalletPassword.value !== initWalletConfirmPassword.value ? { unmatchedPasswords: true } : null;\n}\n\nexport function cipherSeedLength(control: UntypedFormGroup): ValidationErrors | null {\n const cipherArr = control.value.toString().trim().split(',') || [];\n return cipherArr && cipherArr.length !== 24 ? { invalidCipher: true } : null;\n}\n\n@Component({\n selector: 'rtl-initialize-wallet',\n templateUrl: './initialize.component.html',\n styleUrls: ['./initialize.component.scss'],\n providers: [{\n provide: STEPPER_GLOBAL_OPTIONS, useValue: { displayDefaultIndicatorType: false }\n }]\n})\nexport class InitializeWalletComponent implements OnInit, OnDestroy {\n\n @ViewChild(MatStepper, { static: false }) stepper: MatStepper;\n public insecureLND = false;\n public genSeedResponse: string[] = [];\n public initWalletResponse = '';\n passwordFormGroup: UntypedFormGroup;\n cipherFormGroup: UntypedFormGroup;\n passphraseFormGroup: UntypedFormGroup;\n proceed = true;\n warnRes = false;\n private unsubs = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private store: Store, private formBuilder: UntypedFormBuilder, private lndEffects: LNDEffects) { }\n\n ngOnInit() {\n this.passwordFormGroup = this.formBuilder.group({\n initWalletPassword: ['', [Validators.required, Validators.minLength(8)]],\n initWalletConfirmPassword: ['', [Validators.required, Validators.minLength(8)]]\n }, { validators: matchedPasswords });\n this.cipherFormGroup = this.formBuilder.group({\n existingCipher: [false],\n cipherSeed: [{ value: '', disabled: true }, [cipherSeedLength]]\n });\n this.passphraseFormGroup = this.formBuilder.group({\n enterPassphrase: [false],\n passphrase: [{ value: '', disabled: true }]\n });\n\n this.cipherFormGroup.controls.existingCipher.valueChanges.pipe(takeUntil(this.unsubs[0])).subscribe((checked) => {\n if (checked) {\n this.cipherFormGroup.controls.cipherSeed.setValue('');\n this.cipherFormGroup.controls.cipherSeed.enable();\n } else {\n this.cipherFormGroup.controls.cipherSeed.setValue('');\n this.cipherFormGroup.controls.cipherSeed.disable();\n }\n });\n\n this.passphraseFormGroup.controls.enterPassphrase.valueChanges.pipe(takeUntil(this.unsubs[1])).subscribe((checked) => {\n if (checked) {\n this.passphraseFormGroup.controls.passphrase.setValue('');\n this.passphraseFormGroup.controls.passphrase.enable();\n } else {\n this.passphraseFormGroup.controls.passphrase.setValue('');\n this.passphraseFormGroup.controls.passphrase.disable();\n }\n });\n\n this.insecureLND = !window.location.protocol.includes('https:');\n\n this.lndEffects.initWalletRes.pipe(takeUntil(this.unsubs[2])).subscribe((initWalletResponse) => {\n this.initWalletResponse = initWalletResponse;\n });\n\n this.lndEffects.genSeedResponse.pipe(takeUntil(this.unsubs[3])).subscribe((genSeedRes) => {\n this.genSeedResponse = genSeedRes;\n if (this.passphraseFormGroup.controls.enterPassphrase.value) {\n this.store.dispatch(initWallet({\n payload: {\n pwd: window.btoa(this.passwordFormGroup.controls.initWalletPassword.value),\n cipher: this.genSeedResponse,\n passphrase: window.btoa(this.passphraseFormGroup.controls.passphrase.value)\n }\n }));\n } else {\n this.store.dispatch(initWallet({\n payload: {\n pwd: window.btoa(this.passwordFormGroup.controls.initWalletPassword.value),\n cipher: this.genSeedResponse\n }\n }));\n }\n });\n }\n\n onInitWallet(): boolean | void {\n if (this.passwordFormGroup.invalid || this.cipherFormGroup.invalid || this.passphraseFormGroup.invalid) {\n return true;\n }\n if (this.cipherFormGroup.controls.existingCipher.value) {\n const cipherArr = this.cipherFormGroup.controls.cipherSeed.value.toString().trim().split(',');\n if (this.passphraseFormGroup.controls.enterPassphrase.value) {\n this.store.dispatch(initWallet({\n payload: {\n pwd: window.btoa(this.passwordFormGroup.controls.initWalletPassword.value),\n cipher: cipherArr,\n passphrase: window.btoa(this.passphraseFormGroup.controls.passphrase.value)\n }\n }));\n } else {\n this.store.dispatch(initWallet({\n payload: {\n pwd: window.btoa(this.passwordFormGroup.controls.initWalletPassword.value),\n cipher: cipherArr\n }\n }));\n }\n } else {\n if (this.passphraseFormGroup.controls.enterPassphrase.value) {\n this.store.dispatch(genSeed({ payload: window.btoa(this.passphraseFormGroup.controls.passphrase.value) }));\n } else {\n this.store.dispatch(genSeed({ payload: '' }));\n }\n }\n }\n\n onGoToHome() {\n setTimeout(() => {\n this.store.dispatch(updateSelectedNodeOptions());\n this.store.dispatch(fetchInfoLND({ payload: { loadPage: 'HOME' } }));\n }, 1000 * 1);\n }\n\n resetData() {\n this.genSeedResponse = [];\n this.initWalletResponse = '';\n }\n\n ngOnDestroy() {\n this.unsubs.forEach((unsub) => {\n unsub.next(null);\n unsub.complete();\n });\n }\n\n}\n","import { Component } from '@angular/core';\nimport { faWallet } from '@fortawesome/free-solid-svg-icons';\n\n\n@Component({\n selector: 'rtl-wallet',\n templateUrl: './wallet.component.html',\n styleUrls: ['./wallet.component.scss']\n})\nexport class WalletComponent {\n\n public faWallet = faWallet;\n\n constructor() {}\n\n}\n","
\n \n Wallet\n
\n
\n \n \n \n \n \n \n \n \n
\n","
\n \n Lightning Balance\n
\n
\n \n \n \n \n \n
\n
\n \n Lightning Transactions\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter, withLatestFrom } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faExchangeAlt, faChartPie } from '@fortawesome/free-solid-svg-icons';\n\nimport { UserPersonaEnum } from '../../shared/services/consts-enums-functions';\nimport { LoggerService } from '../../shared/services/logger.service';\nimport { RTLState } from '../../store/rtl.state';\nimport { channels, lndNodeSettings } from '../store/lnd.selector';\nimport { Channel, ChannelsSummary, LightningBalance } from '../../shared/models/lndModels';\nimport { ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';\nimport { SelNodeChild } from '../../shared/models/RTLconfig';\n\n@Component({\n selector: 'rtl-transactions',\n templateUrl: './transactions.component.html',\n styleUrls: ['./transactions.component.scss']\n})\nexport class TransactionsComponent implements OnInit, OnDestroy {\n\n faExchangeAlt = faExchangeAlt;\n faChartPie = faChartPie;\n currencyUnits: string[] = [];\n balances = [{ title: 'Local Capacity', dataValue: 0, tooltip: 'Amount you can send' }, { title: 'Remote Capacity', dataValue: 0, tooltip: 'Amount you can receive' }];\n public links = [{ link: 'payments', name: 'Payments' }, { link: 'invoices', name: 'Invoices' }, { link: 'lookuptransactions', name: 'Lookup' }];\n public activeLink = this.links[0].link;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private router: Router) { }\n\n ngOnInit() {\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n }\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[1]),\n withLatestFrom(this.store.select(lndNodeSettings))).\n subscribe(([channelsSelector, nodeSettings]: [{ channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }, (SelNodeChild | null)]) => {\n this.currencyUnits = nodeSettings?.currencyUnits || [];\n if (nodeSettings?.userPersona === UserPersonaEnum.OPERATOR) {\n this.balances = [{ title: 'Local Capacity', dataValue: (channelsSelector.lightningBalance.local || 0), tooltip: 'Amount you can send' }, { title: 'Remote Capacity', dataValue: (channelsSelector.lightningBalance.remote || 0), tooltip: 'Amount you can receive' }];\n } else {\n this.balances = [{ title: 'Outbound Capacity', dataValue: (channelsSelector.lightningBalance.local || 0), tooltip: 'Amount you can send' }, { title: 'Inbound Capacity', dataValue: (channelsSelector.lightningBalance.remote || 0), tooltip: 'Amount you can receive' }];\n }\n this.logger.info(channelsSelector);\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n Graph Lookups\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { faSearch } from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'rtl-graph',\n templateUrl: './graph.component.html',\n styleUrls: ['./graph.component.scss']\n})\nexport class GraphComponent implements OnInit, OnDestroy {\n\n faSearch = faSearch;\n public links = [{ link: 'lookups', name: 'Lookup' }, { link: 'queryroutes', name: 'Query Routes' }];\n public activeLink = this.links[0].link;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private router: Router) { }\n\n ngOnInit() {\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n }\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n \n The actual routing fee on a payment can be different from the fee shown on query routes.\n
\n \n \n Destination pubkey is required.\n \n \n \n Amount is required.\n \n
\n \n \n
\n
\n
\n
\n \n Transaction Route\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Hop{{hop?.hop_sequence}}Peer\n
\n {{hop?.pubkey_alias}}\n
\n
Peer Pubkey\n
\n {{hop?.pub_key}}\n
\n
Channel ID\n
\n {{hop?.chan_id}}\n
\n
TLV Payload{{hop?.tlv_payload ? 'Yes' : 'No'}}Expiry{{hop?.expiry | number}}Capacity (Sats){{hop?.chan_capacity | number}}Amount To Fwd (Sats){{hop?.amt_to_forward | number}}\n Fee (mSats){{hop?.fee_msat | number}} \n \n
Actions
\n
\n \n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faRoute, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { Hop } from '../../../shared/models/lndModels';\nimport { AlertTypeEnum, DataTypeEnum, LND_DEFAULT_PAGE_SETTINGS, PAGE_SIZE, ScreenSizeEnum, SortOrderEnum } from '../../../shared/services/consts-enums-functions';\n\nimport { LNDEffects } from '../../store/lnd.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert } from '../../../store/rtl.actions';\nimport { getQueryRoutes } from '../../store/lnd.actions';\nimport { PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { lndPageSettings } from '../../store/lnd.selector';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-query-routes',\n templateUrl: './query-routes.component.html',\n styleUrls: ['./query-routes.component.scss']\n})\nexport class QueryRoutesComponent implements OnInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n public colWidth = '20rem';\n public PAGE_ID = 'graph_lookup';\n public tableSetting: TableSetting = { tableId: 'query_routes', recordsPerPage: PAGE_SIZE, sortBy: 'hop_sequence', sortOrder: SortOrderEnum.ASCENDING };\n public destinationPubkey = '';\n public amount = null;\n public qrHops: any = new MatTableDataSource([]);\n public displayedColumns: any[] = [];\n public flgLoading: Array = [false]; // 0: peers\n public faRoute = faRoute;\n public faExclamationTriangle = faExclamationTriangle;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private lndEffects: LNDEffects, private commonService: CommonService) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.lndEffects.setQueryRoutes.pipe(takeUntil(this.unSubs[1])).subscribe((queryRoute) => {\n this.qrHops = new MatTableDataSource([]);\n if (queryRoute.routes && queryRoute.routes.length && queryRoute.routes.length > 0 && queryRoute.routes[0].hops) {\n this.flgLoading[0] = false;\n this.qrHops = new MatTableDataSource([...queryRoute.routes[0].hops]);\n this.qrHops.data = queryRoute.routes[0].hops;\n } else {\n this.flgLoading[0] = 'error';\n }\n this.qrHops.sort = this.sort;\n this.qrHops.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.qrHops.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n });\n }\n\n onQueryRoutes(): boolean | void {\n if (!this.destinationPubkey || !this.amount) {\n return true;\n }\n this.qrHops = new MatTableDataSource([]);\n this.flgLoading[0] = true;\n this.store.dispatch(getQueryRoutes({ payload: { destPubkey: this.destinationPubkey, amount: this.amount } }));\n }\n\n resetData() {\n this.destinationPubkey = '';\n this.amount = null;\n this.flgLoading[0] = false;\n }\n\n onHopClick(selHop: Hop, event: any) {\n const reorderedHop = [\n [{ key: 'hop_sequence', value: selHop.hop_sequence, title: 'Sequence', width: 33, type: DataTypeEnum.NUMBER },\n { key: 'amt_to_forward', value: selHop.amt_to_forward, title: 'Amount To Forward (Sats)', width: 33, type: DataTypeEnum.NUMBER },\n { key: 'fee_msat', value: selHop.fee_msat, title: 'Fee (mSats)', width: 34, type: DataTypeEnum.NUMBER }],\n [{ key: 'chan_capacity', value: selHop.chan_capacity, title: 'Channel Capacity (Sats)', width: 50, type: DataTypeEnum.NUMBER },\n { key: 'expiry', value: selHop.expiry, title: 'Expiry', width: 50, type: DataTypeEnum.NUMBER }],\n [{ key: 'pubkey_alias', value: selHop.pubkey_alias, title: 'Peer Alias', width: 50, type: DataTypeEnum.STRING },\n { key: 'chan_id', value: selHop.chan_id, title: 'Channel ID', width: 50, type: DataTypeEnum.STRING }],\n [{ key: 'pub_key', value: selHop.pub_key, title: 'Peer Pubkey', width: 100, type: DataTypeEnum.STRING }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Route Information',\n message: reorderedHop\n }\n }\n }));\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n
\n
\n

Channel ID

\n {{lookupResult.channel_id}}\n
\n
\n

Channel Point

\n {{lookupResult.chan_point}}\n
\n
\n \n
\n
\n

Last Update

\n {{(lookupResult.last_update * 1000) | date:'dd/MMM/y HH:mm'}}\n
\n
\n

Capacity (Sats)

\n {{lookupResult.capacity | number}}\n
\n
\n \n
\n
\n
\n

Node 1

\n

Node 1 (Your Node)

\n
\n \n
\n

Pubkey

\n {{lookupResult.node1_pub}}\n
\n \n
\n

Time Lock Delta

\n {{lookupResult.node1_policy?.time_lock_delta}}\n
\n \n
\n

Min HTLC

\n {{lookupResult.node1_policy?.min_htlc}}\n
\n \n
\n

Max HTLC

\n {{lookupResult.node1_policy?.max_htlc_msat}}\n
\n \n
\n

Fee Base Msat

\n {{lookupResult.node1_policy?.fee_base_msat}}\n
\n \n
\n

Fee Rate Milli Msat

\n {{lookupResult.node1_policy?.fee_rate_milli_msat}}\n
\n \n
\n

Disabled

\n {{lookupResult.node1_policy?.disabled ? 'Yes' : 'No'}}\n
\n
\n
\n
\n

Node 2

\n

Node 2 (Your Node)

\n
\n \n
\n

Pubkey

\n {{lookupResult.node2_pub}}\n
\n \n
\n

Time Lock Delta

\n {{lookupResult.node2_policy?.time_lock_delta}}\n
\n \n
\n

Min HTLC

\n {{lookupResult.node2_policy?.min_htlc}}\n
\n \n
\n

Max HTLC

\n {{lookupResult.node2_policy?.max_htlc_msat}}\n
\n \n
\n

Fee Base Msat

\n {{lookupResult.node2_policy?.fee_base_msat}}\n
\n \n
\n

Fee Rate Milli Msat

\n {{lookupResult.node2_policy?.fee_rate_milli_msat}}\n
\n \n
\n

Disabled

\n {{lookupResult.node2_policy?.disabled ? 'Yes' : 'No'}}\n
\n
\n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { ChannelEdge, GetInfo } from '../../../../shared/models/lndModels';\nimport { RTLState } from '../../../../store/rtl.state';\nimport { lndNodeInformation } from '../../../store/lnd.selector';\n\n@Component({\n selector: 'rtl-channel-lookup',\n templateUrl: './channel-lookup.component.html',\n styleUrls: ['./channel-lookup.component.scss']\n})\nexport class ChannelLookupComponent implements OnInit {\n\n @Input() lookupResult: ChannelEdge;\n public node1_match = false;\n public node2_match = false;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private store: Store) { }\n\n ngOnInit() {\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[0])).subscribe((nodeInfo: GetInfo) => {\n if (this.lookupResult.node1_pub === nodeInfo.identity_pubkey) {\n this.node1_match = true;\n }\n if (this.lookupResult.node2_pub === nodeInfo.identity_pubkey) {\n this.node2_match = true;\n }\n });\n }\n\n}\n","
\n \n
\n
\n

Alias

\n {{lookupResult.node.alias}}{{lookupResult.node?.color}}\n
\n
\n

Pub Key

\n {{lookupResult.node.pub_key}}\n
\n
\n \n
\n
\n

Last Update

\n {{(lookupResult.node.last_update * 1000) | date:'dd/MMM/y HH:mm'}}\n
\n
\n

Total Capacity (Sats)

\n {{lookupResult.total_capacity | number}}\n
\n
\n \n
\n
\n

Number of Channels

\n {{lookupResult.num_channels | number}}\n
\n
\n

Features

\n {{nodeFeaturesEnum[feature.value.name] || feature.value.name}}: {{feature.value.is_required ? 'Mandatory' : 'Optional'}}\n
\n
\n \n
\n

Addresses

\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
Network{{address?.network}}Address{{address?.addr}}\n
Actions
\n
\n \n \n \n
\n
\n
\n
\n","import { Component, Input } from '@angular/core';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { GraphNode } from '../../../../shared/models/lndModels';\nimport { NodeFeaturesLND } from '../../../../shared/services/consts-enums-functions';\nimport { LoggerService } from '../../../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-node-lookup',\n templateUrl: './node-lookup.component.html',\n styleUrls: ['./node-lookup.component.scss']\n})\nexport class NodeLookupComponent {\n\n @Input() lookupResult: GraphNode;\n public nodeFeaturesEnum = NodeFeaturesLND;\n public displayedColumns = ['network', 'addr', 'actions'];\n\n constructor(private logger: LoggerService, private snackBar: MatSnackBar) { }\n\n onCopyNodeURI(payload: string) {\n this.snackBar.open('Node URI copied.');\n this.logger.info('Copied Text: ' + payload);\n }\n\n}\n","
\n
\n \n
\n
\n \n \n {{lookupField.name}}\n \n \n
\n \n \n {{lookupFields[selectedFieldId]?.placeholder}} is required.\n \n
\n \n \n
\n
\n
\n \n {{errorMessage}}\n
\n
\n
\n {{lookupFields[selectedFieldId].name}} Details\n
\n
\n \n \n fxFlex=\"100\"

Error! Unable to find details!

\n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faSearch } from '@fortawesome/free-solid-svg-icons';\n\nimport { APICallStatusEnum, LNDActions, ScreenSizeEnum, UI_MESSAGES } from '../../../shared/services/consts-enums-functions';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { channelLookup, peerLookup } from '../../store/lnd.actions';\n\n@Component({\n selector: 'rtl-lookups',\n templateUrl: './lookups.component.html',\n styleUrls: ['./lookups.component.scss']\n})\nexport class LookupsComponent implements OnInit, OnDestroy {\n\n public lookupKey = '';\n public lookupValue = {};\n public flgSetLookupValue = false;\n public messageObj = [];\n public selectedFieldId = 0;\n public lookupFields = [\n { id: 0, name: 'Node', placeholder: 'Pubkey' },\n { id: 1, name: 'Channel', placeholder: 'Channel ID' }\n ];\n public faSearch = faSearch;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private actions: Actions) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.actions.pipe(takeUntil(this.unSubs[0]), filter((action) => (action.type === LNDActions.SET_LOOKUP_LND || action.type === LNDActions.UPDATE_API_CALL_STATUS_LND))).\n subscribe((resLookup: any) => {\n if (resLookup.type === LNDActions.SET_LOOKUP_LND) {\n this.errorMessage = (this.selectedFieldId === 0 && resLookup.payload.hasOwnProperty('node')) ? '' : (this.selectedFieldId === 1 && resLookup.payload.hasOwnProperty('channel_id')) ? '' : this.errorMessage;\n this.lookupValue = JSON.parse(JSON.stringify(resLookup.payload));\n this.flgSetLookupValue = (this.selectedFieldId === 0 && resLookup.payload.hasOwnProperty('node')) ? true : !!((this.selectedFieldId === 1 && resLookup.payload.hasOwnProperty('channel_id')));\n this.logger.info(this.lookupValue);\n }\n if (resLookup.type === LNDActions.UPDATE_API_CALL_STATUS_LND && resLookup.payload.action === 'Lookup') {\n this.errorMessage = '';\n if (resLookup.payload.status === APICallStatusEnum.ERROR) {\n this.errorMessage = (typeof (resLookup.payload.message) === 'object') ? JSON.stringify(resLookup.payload.message) : resLookup.payload.message;\n }\n if (resLookup.payload.status === APICallStatusEnum.INITIATED) {\n this.errorMessage = UI_MESSAGES.GET_LOOKUP_DETAILS;\n }\n }\n });\n }\n\n onLookup(): boolean | void {\n if (!this.lookupKey) {\n return true;\n }\n this.flgSetLookupValue = false;\n this.lookupValue = {};\n switch (this.selectedFieldId) {\n case 0:\n this.store.dispatch(peerLookup({ payload: this.lookupKey.trim() }));\n break;\n case 1:\n this.store.dispatch(channelLookup({ payload: { uiMessage: UI_MESSAGES.SEARCHING_CHANNEL, channelID: this.lookupKey.trim() } }));\n break;\n default:\n break;\n }\n }\n\n onSelectChange(event: any) {\n this.resetData();\n this.selectedFieldId = event.value;\n }\n\n resetData() {\n this.flgSetLookupValue = false;\n this.selectedFieldId = 0;\n this.lookupKey = '';\n this.lookupValue = {};\n this.errorMessage = '';\n }\n\n clearLookupValue() {\n this.lookupValue = {};\n this.flgSetLookupValue = false;\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n Routing\n
\n
\n \n \n
\n
\n \n \n \n \n Invalid date format.\n \n \n \n \n \n Invalid date format.\n \n
\n
\n \n \n
\n
\n
\n \n \n \n
\n
\n \n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faMapSigns } from '@fortawesome/free-solid-svg-icons';\n\nimport { RTLState } from '../../store/rtl.state';\nimport { getForwardingHistory, setForwardingHistory } from '../store/lnd.actions';\nimport { LoggerService } from '../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-routing',\n templateUrl: './routing.component.html',\n styleUrls: ['./routing.component.scss']\n})\nexport class RoutingComponent implements OnInit, OnDestroy {\n\n public faMapSigns = faMapSigns;\n public today = new Date(Date.now());\n public lastMonthDay = new Date(this.today.getFullYear(), this.today.getMonth() - 1, this.today.getDate() + 1, 0, 0, 0);\n public yesterday = new Date(this.today.getFullYear(), this.today.getMonth(), this.today.getDate() - 1, 0, 0, 0);\n public endDate = this.today;\n public startDate = this.lastMonthDay;\n public links = [{ link: 'forwardinghistory', name: 'Forwarding History' }, { link: 'peers', name: 'Routing Peers' }, { link: 'nonroutingprs', name: 'Non Routing Peers' }];\n public activeLink = this.links[0].link;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private router: Router) { }\n\n ngOnInit() {\n this.onEventsFetch();\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n }\n });\n }\n\n onEventsFetch() {\n this.store.dispatch(setForwardingHistory({ payload: { forwarding_events: [] } }));\n if (!this.endDate) {\n this.endDate = this.today;\n }\n if (!this.startDate) {\n this.startDate = new Date(this.endDate.getFullYear(), this.endDate.getMonth() - 1, this.endDate.getDate() + 1, 0, 0, 0);\n }\n this.store.dispatch(getForwardingHistory({\n payload: {\n end_time: Math.round(this.endDate.getTime() / 1000).toString(),\n start_time: Math.round(this.startDate.getTime() / 1000).toString()\n }\n }));\n }\n\n resetData() {\n this.endDate = this.today;\n this.startDate = this.lastMonthDay;\n }\n\n ngOnDestroy() {\n this.resetData();\n this.store.dispatch(setForwardingHistory({ payload: { forwarding_events: [] } }));\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
{{errorMessage}}
\n
\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Timestamp{{(fhEvent.timestamp * 1000) | date:'dd/MMM/y HH:mm'}}Inbound Alias\n
\n {{fhEvent?.alias_in}}\n
\n
Inbound Channel\n
\n {{fhEvent?.chan_id_in}}\n
\n
Outbound Alias\n
\n {{fhEvent?.alias_out}}\n
\n
Outbound Channel\n
\n {{fhEvent?.chan_id_out}}\n
\n
Inbound Amount (Sats){{fhEvent.amt_in | number}}Outbound Amount (Sats){{fhEvent.amt_out | number}}Fee (mSats){{fhEvent.fee_msat | number}}\n
\n \n \n Download CSV\n \n
\n
\n \n \n

No forwarding history available.

\n

Getting forwarding history...

\n

{{errorMessage}}

\n
\n
\n \n
\n","import { Component, OnInit, OnChanges, ViewChild, Input, SimpleChanges, OnDestroy, AfterViewInit } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\n\nimport { ForwardingEvent, SwitchRes } from '../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, APICallStatusEnum, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { openAlert } from '../../../store/rtl.actions';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { forwardingHistory, lndPageSettings } from '../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-forwarding-history',\n templateUrl: './forwarding-history.component.html',\n styleUrls: ['./forwarding-history.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Events') }\n ]\n})\nexport class ForwardingHistoryComponent implements OnInit, AfterViewInit, OnChanges, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n @Input() pageId = 'routing';\n @Input() tableId = 'forwarding_history';\n @Input() eventsData = [];\n @Input() selFilter = '';\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public tableSetting: TableSetting = { tableId: 'forwarding_history', recordsPerPage: PAGE_SIZE, sortBy: 'timestamp', sortOrder: SortOrderEnum.DESCENDING };\n public forwardingHistoryData: ForwardingEvent[] = [];\n public displayedColumns: any[] = [];\n public forwardingHistoryEvents: any = new MatTableDataSource([]);\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private datePipe: DatePipe, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting.tableId = this.tableId;\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.pageId)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.pageId)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(forwardingHistory).pipe(takeUntil(this.unSubs[1])).\n subscribe((fhSelector: { forwardingHistory: SwitchRes, apiCallStatus: ApiCallStatusPayload }) => {\n if (this.eventsData.length <= 0) {\n this.errorMessage = '';\n this.apiCallStatus = fhSelector.apiCallStatus;\n if (fhSelector.apiCallStatus?.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.forwardingHistoryData = fhSelector.forwardingHistory.forwarding_events || [];\n this.loadForwardingEventsTable(this.forwardingHistoryData);\n this.logger.info(fhSelector.apiCallStatus);\n this.logger.info(fhSelector.forwardingHistory);\n }\n });\n }\n\n ngAfterViewInit() {\n setTimeout(() => {\n if (this.forwardingHistoryData.length > 0) {\n this.loadForwardingEventsTable(this.forwardingHistoryData);\n }\n }, 0);\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (changes.eventsData) {\n this.apiCallStatus = { status: APICallStatusEnum.COMPLETED, action: 'FetchForwardingHistory' };\n this.eventsData = changes.eventsData.currentValue;\n this.forwardingHistoryData = this.eventsData;\n if (!changes.eventsData.firstChange) {\n this.loadForwardingEventsTable(this.forwardingHistoryData);\n }\n }\n if (changes.selFilter && !changes.selFilter.firstChange) {\n this.selFilterBy = 'all';\n this.applyFilter();\n }\n }\n\n onForwardingEventClick(selFEvent: ForwardingEvent, event: any) {\n const reorderedFHEvent = [\n [{ key: 'timestamp', value: selFEvent.timestamp, title: 'Timestamp', width: 25, type: DataTypeEnum.DATE_TIME },\n { key: 'amt_in', value: selFEvent.amt_in, title: 'Inbound Amount (Sats)', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'amt_out', value: selFEvent.amt_out, title: 'Outbound Amount (Sats)', width: 25, type: DataTypeEnum.NUMBER },\n { key: 'fee_msat', value: selFEvent.fee_msat, title: 'Fee (mSats)', width: 25, type: DataTypeEnum.NUMBER }],\n [{ key: 'alias_in', value: selFEvent.alias_in, title: 'Inbound Peer Alias', width: 25, type: DataTypeEnum.STRING },\n { key: 'chan_id_in', value: selFEvent.chan_id_in, title: 'Inbound Channel ID', width: 25, type: DataTypeEnum.STRING },\n { key: 'alias_out', value: selFEvent.alias_out, title: 'Outbound Peer Alias', width: 25, type: DataTypeEnum.STRING },\n { key: 'chan_id_out', value: selFEvent.chan_id_out, title: 'Outbound Channel ID', width: 25, type: DataTypeEnum.STRING }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Event Information',\n message: reorderedFHEvent\n }\n }\n }));\n }\n\n applyFilter() {\n if (this.forwardingHistoryEvents) {\n this.forwardingHistoryEvents.filter = this.selFilter.trim().toLowerCase();\n }\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.pageId][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.forwardingHistoryEvents.filterPredicate = (rowData: ForwardingEvent, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = ((rowData.timestamp) ? this.datePipe.transform(new Date(rowData.timestamp * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() : '') + JSON.stringify(rowData).toLowerCase();\n break;\n\n case 'timestamp':\n rowToFilter = this.datePipe.transform(new Date((rowData[this.selFilterBy] || 0) * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() || '';\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return rowToFilter.includes(fltr);\n };\n }\n\n loadForwardingEventsTable(forwardingEvents: ForwardingEvent[]) {\n this.forwardingHistoryEvents = forwardingEvents ? new MatTableDataSource([...forwardingEvents]) : new MatTableDataSource([]);\n this.forwardingHistoryEvents.sort = this.sort;\n this.forwardingHistoryEvents.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.forwardingHistoryEvents.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.forwardingHistoryEvents.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.forwardingHistoryEvents);\n }\n\n onDownloadCSV() {\n if (this.forwardingHistoryEvents && this.forwardingHistoryEvents.data && this.forwardingHistoryEvents.data.length > 0) {\n this.commonService.downloadFile(this.forwardingHistoryEvents.data, 'Forwarding-history');\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
{{errorMessage}}
\n
\n
\n
\n
Incoming
\n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Channel ID\n
\n {{rPeer?.chan_id}}\n
\n
Peer Alias\n
\n {{rPeer?.alias}}\n
\n
Events{{rPeer.events | number}}\n Total Amount (Sats){{rPeer.total_amount | number}}\n
Actions
\n
\n \n \n

No incoming routing peer available.

\n

Getting incoming routing peers...

\n

{{errorMessage}}

\n
\n
\n \n
\n
\n
\n
Outgoing
\n
\n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Channel ID\n
\n {{rPeer?.chan_id}}\n
\n
Peer Alias\n
\n {{rPeer?.alias}}\n
\n
Events{{rPeer.events | number}}\n Total Amount (Sats){{rPeer.total_amount | number}}\n

No outgoing routing peer available.

\n

Getting outgoing routing peers...

\n

{{errorMessage}}

\n
\n
\n \n
\n
\n
\n","import { Component, OnInit, ViewChild, OnDestroy, AfterViewInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\n\nimport { ForwardingEvent, RoutingPeers, SwitchRes } from '../../../shared/models/lndModels';\nimport { AlertTypeEnum, APICallStatusEnum, DataTypeEnum, getPaginatorLabel, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS, PAGE_SIZE, PAGE_SIZE_OPTIONS, ScreenSizeEnum, SortOrderEnum } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { openAlert } from '../../../store/rtl.actions';\nimport { RTLState } from '../../../store/rtl.state';\nimport { forwardingHistory, lndPageSettings } from '../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-routing-peers',\n templateUrl: './routing-peers.component.html',\n styleUrls: ['./routing-peers.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Routing peers') }\n ]\n})\nexport class RoutingPeersComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild('tableIn', { read: MatSort, static: false }) sortIn: MatSort;\n @ViewChild('tableOut', { read: MatSort, static: false }) sortOut: MatSort;\n @ViewChild('paginatorIn', { static: false }) paginatorIn: MatPaginator | undefined;\n @ViewChild('paginatorOut', { static: false }) paginatorOut: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterByIn = 'all';\n public selFilterByOut = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'routing';\n public tableSetting: TableSetting = { tableId: 'routing_peers', recordsPerPage: PAGE_SIZE, sortBy: 'total_amount', sortOrder: SortOrderEnum.DESCENDING };\n public routingPeersData: any[] = [];\n public displayedColumns: any[] = [];\n public routingPeersIncoming = new MatTableDataSource([]);\n public routingPeersOutgoing = new MatTableDataSource([]);\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public filterIn = '';\n public filterOut = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / (this.displayedColumns.length * 2)) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(forwardingHistory).pipe(takeUntil(this.unSubs[1])).\n subscribe((fhSelector: { forwardingHistory: SwitchRes, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = fhSelector.apiCallStatus;\n if (fhSelector.apiCallStatus?.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n if (fhSelector.forwardingHistory.forwarding_events) {\n this.routingPeersData = fhSelector.forwardingHistory.forwarding_events;\n } else {\n this.routingPeersData = [];\n }\n if (this.routingPeersData.length > 0 && this.sortIn && this.paginatorIn && this.sortOut && this.paginatorOut) {\n this.loadRoutingPeersTable(this.routingPeersData);\n }\n this.logger.info(fhSelector.apiCallStatus);\n this.logger.info(fhSelector.forwardingHistory);\n });\n }\n\n ngAfterViewInit() {\n if (this.routingPeersData.length > 0) {\n this.loadRoutingPeersTable(this.routingPeersData);\n }\n }\n\n onRoutingPeerClick(selRPeer: RoutingPeers, event: any, direction: string) {\n let alertTitle = ' Routing Information';\n if (direction === 'in') {\n alertTitle = 'Incoming' + alertTitle;\n } else {\n alertTitle = 'Outgoing' + alertTitle;\n }\n const reorderedRoutingPeer = [\n [{ key: 'chan_id', value: selRPeer.chan_id, title: 'Channel ID', width: 50, type: DataTypeEnum.STRING },\n { key: 'alias', value: selRPeer.alias, title: 'Peer Alias', width: 50, type: DataTypeEnum.STRING }],\n [{ key: 'events', value: selRPeer.events, title: 'Events', width: 50, type: DataTypeEnum.NUMBER },\n { key: 'total_amount', value: selRPeer.total_amount, title: 'Total Amount (Sats)', width: 50, type: DataTypeEnum.NUMBER }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: alertTitle,\n message: reorderedRoutingPeer\n }\n }\n }));\n }\n\n applyFilterIncoming() {\n this.routingPeersIncoming.filter = this.filterIn.trim().toLowerCase();\n }\n\n applyFilterOutgoing() {\n this.routingPeersOutgoing.filter = this.filterOut.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.routingPeersIncoming.filterPredicate = (rowDataIn: RoutingPeers, fltr: string) => {\n let rowToFilterIn = '';\n switch (this.selFilterByIn) {\n case 'all':\n rowToFilterIn = JSON.stringify(rowDataIn).toLowerCase();\n break;\n\n default:\n rowToFilterIn = typeof rowDataIn[this.selFilterByIn] === 'string' ? rowDataIn[this.selFilterByIn].toLowerCase() : typeof rowDataIn[this.selFilterByIn] === 'boolean' ? (rowDataIn[this.selFilterByIn] ? 'yes' : 'no') : rowDataIn[this.selFilterByIn].toString();\n break;\n }\n return rowToFilterIn.includes(fltr);\n };\n\n this.routingPeersOutgoing.filterPredicate = (rowDataOut: RoutingPeers, fltr: string) => {\n let rowToFilterOut = '';\n switch (this.selFilterByOut) {\n case 'all':\n rowToFilterOut = JSON.stringify(rowDataOut).toLowerCase();\n break;\n\n case 'total_amount':\n case 'total_fee':\n rowToFilterOut = ((+(rowDataOut[this.selFilterByOut] || 0)) / 1000)?.toString() || '';\n break;\n\n default:\n rowToFilterOut = typeof rowDataOut[this.selFilterByOut] === 'string' ? rowDataOut[this.selFilterByOut].toLowerCase() : typeof rowDataOut[this.selFilterByOut] === 'boolean' ? (rowDataOut[this.selFilterByOut] ? 'yes' : 'no') : rowDataOut[this.selFilterByOut].toString();\n break;\n }\n return rowToFilterOut.includes(fltr);\n };\n }\n\n loadRoutingPeersTable(forwardingEvents: ForwardingEvent[]) {\n if (forwardingEvents.length > 0) {\n const results = this.groupRoutingPeers(forwardingEvents);\n this.routingPeersIncoming = new MatTableDataSource(results[0]);\n this.routingPeersIncoming.sort = this.sortIn;\n this.routingPeersIncoming.sort.sort({ id: this.tableSetting.sortBy || 'total_amount', start: this.tableSetting.sortOrder || SortOrderEnum.DESCENDING, disableClear: true });\n this.routingPeersIncoming.paginator = this.paginatorIn!;\n this.logger.info(this.routingPeersIncoming);\n this.routingPeersOutgoing = new MatTableDataSource(results[1]);\n this.routingPeersOutgoing.sort = this.sortOut;\n this.routingPeersOutgoing.sort.sort({ id: this.tableSetting.sortBy || 'total_amount', start: this.tableSetting.sortOrder || SortOrderEnum.DESCENDING, disableClear: true });\n this.routingPeersOutgoing.paginator = this.paginatorOut!;\n this.logger.info(this.routingPeersOutgoing);\n } else {\n // To reset table after other Forwarding history calls\n this.routingPeersIncoming = new MatTableDataSource([]);\n this.routingPeersOutgoing = new MatTableDataSource([]);\n }\n this.setFilterPredicate();\n this.applyFilterIncoming();\n this.applyFilterOutgoing();\n }\n\n groupRoutingPeers(forwardingEvents: ForwardingEvent[]) {\n const incomingResults: any = [];\n const outgoingResults: any = [];\n forwardingEvents.forEach((event) => {\n const incoming: any = incomingResults.find((result) => result.chan_id === event.chan_id_in);\n const outgoing: any = outgoingResults.find((result) => result.chan_id === event.chan_id_out);\n if (!incoming) {\n incomingResults.push({ chan_id: event.chan_id_in, alias: event.alias_in, events: 1, total_amount: +(event.amt_in || 0) });\n } else {\n incoming.events++;\n incoming.total_amount = +incoming.total_amount + +(event.amt_in || 0);\n }\n if (!outgoing) {\n outgoingResults.push({ chan_id: event.chan_id_out, alias: event.alias_out, events: 1, total_amount: +(event.amt_out || 0) });\n } else {\n outgoing.events++;\n outgoing.total_amount = +outgoing.total_amount + +(event.amt_out || 0);\n }\n });\n return [this.commonService.sortDescByKey(incomingResults, 'total_amount'), this.commonService.sortDescByKey(outgoingResults, 'total_amount')];\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n Reports\n
\n
\n \n \n \n \n \n \n \n
\n ","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { faChartBar } from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'rtl-reports',\n templateUrl: './reports.component.html',\n styleUrls: ['./reports.component.scss']\n})\nexport class ReportsComponent implements OnInit, OnDestroy {\n\n public faChartBar = faChartBar;\n public links = [{ link: 'routingreport', name: 'Routing' }, { link: 'transactions', name: 'Transactions' }];\n public activeLink = this.links[0].link;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private router: Router) { }\n\n ngOnInit() {\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n }\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n
\n \n Report By: \n Fees\n Events\n \n
\n \n
\n
0 && events.forwarding_events && events.forwarding_events.length && events.forwarding_events.length > 0\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex=\"100\" class=\"font-size-120 font-bold-700 mt-1\"\n [@fadeIn]=\"events.total_fee_msat\">{{(events.total_fee_msat / 1000 || 0) | number:'1.0-2'}} Sats/{{(events?.forwarding_events?.length || 0) | number}} Events
\n
No routing report for the selected period
\n
{{errorMessage}}
\n
\n 0 && events.forwarding_events && events.forwarding_events.length && events.forwarding_events.length > 0\"\n class=\"one-color\"\n [view]=\"view\"\n [results]=\"routingReportData\"\n [gradient]=\"false\"\n [xAxis]=\"true\"\n [yAxis]=\"true\"\n [showXAxisLabel]=\"true\"\n [showYAxisLabel]=\"showYAxisLabel\"\n [xAxisLabel]=\"xAxisLabel\"\n [yAxisLabel]=\"yAxisLabel\"\n [showGridLines]=\"false\"\n [showDataLabel]=\"false\"\n (select)=\"onChartBarSelected($event)\"\n (mouseup)=\"onChartMouseUp($event)\">\n \n \n Events: {{((selReportBy === reportBy.EVENTS ? model.value : model.extra.totalEvents) || 0) | number}}\n Fee: {{((selReportBy === reportBy.EVENTS ? model.extra.totalFees : model.value) || 0) | number:'1.0-2'}}\n \n \n \n
\n
\n
\n
\n 0\" [pageId]=\"'reports'\" [tableId]=\"'routing'\" [eventsData]=\"events?.forwarding_events\" [selFilter]=\"eventFilterValue\">\n
\n
\n
\n","import { Component, OnInit, OnDestroy, HostListener } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { SwitchRes } from '../../../shared/models/lndModels';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { MONTHS, ReportBy, ScreenSizeEnum, SCROLL_RANGES, UI_MESSAGES } from '../../../shared/services/consts-enums-functions';\nimport { DataService } from '../../../shared/services/data.service';\nimport { fadeIn } from '../../../shared/animation/opacity-animation';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { lndNodeInformation } from '../../store/lnd.selector';\nimport { LoggerService } from '../../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-routing-report',\n templateUrl: './routing-report.component.html',\n styleUrls: ['./routing-report.component.scss'],\n animations: [fadeIn]\n})\nexport class RoutingReportComponent implements OnInit, OnDestroy {\n\n public reportPeriod = SCROLL_RANGES[0];\n public secondsInADay = 24 * 60 * 60;\n public events: SwitchRes = {};\n public eventFilterValue = '';\n public reportBy = ReportBy;\n public selReportBy = ReportBy.FEES;\n public today = new Date(Date.now());\n public startDate = new Date(this.today.getFullYear(), this.today.getMonth(), 1, 0, 0, 0);\n public endDate = new Date(this.today.getFullYear(), this.today.getMonth(), this.getMonthDays(this.today.getMonth(), this.today.getFullYear()), 23, 59, 59);\n public routingReportData: any = [];\n public view: [number, number] = [350, 350];\n public screenPaddingX = 100;\n public gradient = true;\n public xAxisLabel = 'Date';\n public yAxisLabel = 'Fee (Sats)';\n public showYAxisLabel = true;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private dataService: DataService, private commonService: CommonService, private store: Store) { }\n\n ngOnInit() {\n this.screenSize = this.commonService.getScreenSize();\n this.showYAxisLabel = !(this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM);\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[0])).subscribe((info) => {\n if (info.identity_pubkey) {\n setTimeout(() => {\n this.fetchEvents(this.startDate, this.endDate);\n }, 10); // To avoid fetchEvents call on selectedNode change and dashboard load\n }\n });\n this.commonService.containerSizeUpdated.pipe(takeUntil(this.unSubs[1])).subscribe((CONTAINER_SIZE) => {\n switch (this.screenSize) {\n case ScreenSizeEnum.MD:\n this.screenPaddingX = CONTAINER_SIZE.width / 10;\n break;\n\n case ScreenSizeEnum.LG:\n this.screenPaddingX = CONTAINER_SIZE.width / 16;\n break;\n\n default:\n this.screenPaddingX = CONTAINER_SIZE.width / 20;\n break;\n }\n this.view = [CONTAINER_SIZE.width - this.screenPaddingX, CONTAINER_SIZE.height / 2.2];\n this.logger.info('Container Size: ' + JSON.stringify(CONTAINER_SIZE));\n this.logger.info('View: ' + JSON.stringify(this.view));\n });\n }\n\n fetchEvents(start: Date, end: Date) {\n this.errorMessage = UI_MESSAGES.GET_FORWARDING_HISTORY;\n const startDateInSeconds = Math.round(start.getTime() / 1000).toString();\n const endDateInSeconds = Math.round(end.getTime() / 1000).toString();\n this.dataService.getForwardingHistory('LND', startDateInSeconds, endDateInSeconds).\n pipe(takeUntil(this.unSubs[2])).subscribe({\n next: (res) => {\n this.errorMessage = '';\n if (res.forwarding_events && res.forwarding_events.length) {\n res.forwarding_events = res.forwarding_events.reverse();\n this.events = res;\n this.routingReportData = this.selReportBy === this.reportBy.EVENTS ? this.prepareEventsReport(start) : this.prepareFeeReport(start);\n } else {\n this.events = { forwarding_events: [], total_fee_msat: 0 };\n this.routingReportData = [];\n }\n }, error: (err) => {\n this.errorMessage = err;\n }\n });\n }\n\n @HostListener('mouseup', ['$event']) onChartMouseUp(e) {\n if (e.srcElement.tagName === 'svg' && e.srcElement.classList.length > 0 && e.srcElement.classList[0] === 'ngx-charts') {\n this.eventFilterValue = '';\n }\n }\n\n onChartBarSelected(event) {\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n this.eventFilterValue = event.name + '/' + this.startDate.getFullYear();\n } else {\n this.eventFilterValue = event.name.toString().padStart(2, '0') + '/' + MONTHS[this.startDate.getMonth()].name + '/' + this.startDate.getFullYear();\n }\n }\n\n prepareFeeReport(start: Date) {\n const startDateInSeconds = Math.round(start.getTime() / 1000);\n const feeReport: any[] = [];\n this.events.total_fee_msat = 0;\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n for (let i = 0; i < 12; i++) {\n feeReport.push({ name: MONTHS[i].name, value: 0.0, extra: { totalEvents: 0 } });\n }\n this.events.forwarding_events?.map((event) => {\n const monthNumber = new Date(+(event.timestamp || 0) * 1000).getMonth();\n feeReport[monthNumber].value = feeReport[monthNumber].value + (+(event.fee_msat || 0) / 1000);\n feeReport[monthNumber].extra.totalEvents = feeReport[monthNumber].extra.totalEvents + 1;\n this.events.total_fee_msat = (this.events.total_fee_msat ? this.events.total_fee_msat : 0) + +(event.fee_msat || 0);\n return this.events;\n });\n } else {\n for (let i = 0; i < this.getMonthDays(start.getMonth(), start.getFullYear()); i++) {\n feeReport.push({ name: i + 1, value: 0.0, extra: { totalEvents: 0 } });\n }\n this.events.forwarding_events?.map((event) => {\n const dateNumber = Math.floor((+(event.timestamp || 0) - startDateInSeconds) / this.secondsInADay);\n feeReport[dateNumber].value = feeReport[dateNumber].value + (+(event.fee_msat || 0) / 1000);\n feeReport[dateNumber].extra.totalEvents = feeReport[dateNumber].extra.totalEvents + 1;\n this.events.total_fee_msat = (this.events.total_fee_msat ? this.events.total_fee_msat : 0) + +(event.fee_msat || 0);\n return this.events;\n });\n }\n return feeReport;\n }\n\n prepareEventsReport(start: Date) {\n const startDateInSeconds = Math.round(start.getTime() / 1000);\n const eventsReport: any[] = [];\n this.events.total_fee_msat = 0;\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n for (let i = 0; i < 12; i++) {\n eventsReport.push({ name: MONTHS[i].name, value: 0, extra: { totalFees: 0.0 } });\n }\n this.events.forwarding_events?.map((event) => {\n const monthNumber = new Date(+(event.timestamp || 0) * 1000).getMonth();\n eventsReport[monthNumber].value = eventsReport[monthNumber].value + 1;\n eventsReport[monthNumber].extra.totalFees = eventsReport[monthNumber].extra.totalFees + (+(event.fee_msat || 0) / 1000);\n this.events.total_fee_msat = (this.events.total_fee_msat ? this.events.total_fee_msat : 0) + +(event.fee_msat || 0);\n return this.events;\n });\n } else {\n for (let i = 0; i < this.getMonthDays(start.getMonth(), start.getFullYear()); i++) {\n eventsReport.push({ name: i + 1, value: 0, extra: { totalFees: 0.0 } });\n }\n this.events.forwarding_events?.map((event) => {\n const dateNumber = Math.floor((+(event.timestamp || 0) - startDateInSeconds) / this.secondsInADay);\n eventsReport[dateNumber].value = eventsReport[dateNumber].value + 1;\n eventsReport[dateNumber].extra.totalFees = eventsReport[dateNumber].extra.totalFees + (+(event.fee_msat || 0) / 1000);\n this.events.total_fee_msat = (this.events.total_fee_msat ? this.events.total_fee_msat : 0) + +(event.fee_msat || 0);\n return this.events;\n });\n }\n return eventsReport;\n }\n\n onSelectionChange(selectedValues: { selDate: Date, selScrollRange: string }) {\n const selMonth = selectedValues.selDate.getMonth();\n const selYear = selectedValues.selDate.getFullYear();\n this.reportPeriod = selectedValues.selScrollRange;\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n this.startDate = new Date(selYear, 0, 1, 0, 0, 0);\n this.endDate = new Date(selYear, 11, 31, 23, 59, 59);\n } else {\n this.startDate = new Date(selYear, selMonth, 1, 0, 0, 0);\n this.endDate = new Date(selYear, selMonth, this.getMonthDays(selMonth, selYear), 23, 59, 59);\n }\n this.fetchEvents(this.startDate, this.endDate);\n this.eventFilterValue = '';\n }\n\n getMonthDays(selMonth: number, selYear: number) {\n return (selMonth === 1 && selYear % 4 === 0) ? (MONTHS[selMonth].days + 1) : MONTHS[selMonth].days;\n }\n\n onSelReportByChange() {\n this.yAxisLabel = this.selReportBy === this.reportBy.EVENTS ? 'Events' : 'Fee (Sats)';\n this.routingReportData = this.selReportBy === this.reportBy.EVENTS ? this.prepareEventsReport(this.startDate) : this.prepareFeeReport(this.startDate);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n \n
\n \n Getting transactions data...\n
\n
{{errorMessage}}
\n
0 && apiCallStatus.status === apiCallStatusEnum.COMPLETED\" fxLayout=\"column\" fxLayoutAlign=\"center center\" fxFlex=\"100\" class=\"font-size-120 font-bold-700 mt-1\" [@fadeIn]=\"transactionsReportSummary\">\n
0\" fxLayout=\"row\" fxLayoutAlign=\"start stretch\" fxFlex=\"100\">\n Paid {{(transactionsReportSummary.amountPaidSelectedPeriod / 1000 || 0) | number:'1.0-2'}} Sats/{{transactionsReportSummary.paymentsSelectedPeriod | number}} Payments\n
\n
\n Received {{(transactionsReportSummary.amountReceivedSelectedPeriod / 1000 || 0) | number:'1.0-2'}} Sats/{{transactionsReportSummary.invoicesSelectedPeriod | number}} Invoices\n
\n
\n
No transactions report for the selected period
\n
0 && apiCallStatus.status === apiCallStatusEnum.COMPLETED\" class=\"mt-1\">\n 0 && transactionsNonZeroReportData.length > 0\"\n class=\"two-color\"\n [view]=\"view\"\n [results]=\"transactionsReportData\"\n [noBarWhenZero]=\"false\"\n [gradient]=\"false\"\n [xAxis]=\"true\"\n [yAxis]=\"true\"\n [showXAxisLabel]=\"true\"\n [showYAxisLabel]=\"showYAxisLabel\"\n [xAxisLabel]=\"xAxisLabel\"\n [yAxisLabel]=\"yAxisLabel\"\n [showGridLines]=\"false\"\n [showDataLabel]=\"false\"\n [groupPadding]=\"(reportPeriod === scrollRanges[0]) ? 2 : 8\"\n (select)=\"onChartBarSelected($event)\"\n (mouseup)=\"onChartMouseUp($event)\">\n \n {{model.name}}: {{(model.value || 0) | number:'1.0-2'}}/# {{model.name === 'Paid' ? 'Payments' : 'Invoices'}}: {{(model.extra?.total || 0) | number}}\n \n \n
\n
\n 0 && apiCallStatus.status === apiCallStatusEnum.COMPLETED\" [displayedColumns]=\"displayedColumns\" [tableSetting]=\"tableSetting\" [dataList]=\"transactionsNonZeroReportData\" [dataRange]=\"reportPeriod\" [selFilter]=\"transactionFilterValue\">\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, HostListener } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { Payment, Invoice, ListInvoices, ListPayments } from '../../../shared/models/lndModels';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { APICallStatusEnum, LND_DEFAULT_PAGE_SETTINGS, MONTHS, PAGE_SIZE, ScreenSizeEnum, SCROLL_RANGES, SortOrderEnum } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { fadeIn } from '../../../shared/animation/opacity-animation';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { allLightningTransactions } from '../../store/lnd.selector';\nimport { getAllLightningTransactions } from '../../store/lnd.actions';\nimport { PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { clnPageSettings } from '../../../cln/store/cln.selector';\n\n@Component({\n selector: 'rtl-transactions-report',\n templateUrl: './transactions-report.component.html',\n styleUrls: ['./transactions-report.component.scss'],\n animations: [fadeIn]\n})\nexport class TransactionsReportComponent implements OnInit, OnDestroy {\n\n public scrollRanges = SCROLL_RANGES;\n public reportPeriod = SCROLL_RANGES[0];\n public secondsInADay = 24 * 60 * 60;\n public payments: Payment[] = [];\n public invoices: Invoice[] = [];\n public colWidth = '20rem';\n public PAGE_ID = 'reports';\n public tableSetting: TableSetting = { tableId: 'transactions', recordsPerPage: PAGE_SIZE, sortBy: 'date', sortOrder: SortOrderEnum.DESCENDING };\n public displayedColumns: any[] = ['date', 'amount_paid', 'num_payments', 'amount_received', 'num_invoices'];\n public transactionsReportSummary = { paymentsSelectedPeriod: 0, invoicesSelectedPeriod: 0, amountPaidSelectedPeriod: 0, amountReceivedSelectedPeriod: 0 };\n public transactionFilterValue = '';\n public today = new Date(Date.now());\n public startDate = new Date(this.today.getFullYear(), this.today.getMonth(), 1, 0, 0, 0);\n public endDate = new Date(this.today.getFullYear(), this.today.getMonth(), this.getMonthDays(this.today.getMonth(), this.today.getFullYear()), 23, 59, 59);\n public transactionsReportData: any = [{ date: '', name: '1', series: [{ extra: { total: 0.0 }, name: 'Paid', value: 0.0 }, { extra: { total: 0.0 }, name: 'Received', value: 0.0 }] }];\n public transactionsNonZeroReportData: any = [{ amount_paid: 0.0, amount_received: 0.0, date: '', num_invoices: 0, num_payments: 0 }];\n public view: [number, number] = [350, 350];\n public screenPaddingX = 100;\n public gradient = true;\n public xAxisLabel = 'Date';\n public yAxisLabel = 'Amount (Sats)';\n public showYAxisLabel = true;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store) { }\n\n ngOnInit() {\n this.screenSize = this.commonService.getScreenSize();\n this.showYAxisLabel = !(this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM);\n this.store.select(clnPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n\n this.store.select(allLightningTransactions).pipe(takeUntil(this.unSubs[1])).\n subscribe((allLTSelector: { allLightningTransactions: { listPaymentsAll: ListPayments, listInvoicesAll: ListInvoices }, apiCallStatus: ApiCallStatusPayload }) => {\n if (allLTSelector.apiCallStatus.status === APICallStatusEnum.UN_INITIATED) {\n this.store.dispatch(getAllLightningTransactions());\n }\n this.errorMessage = '';\n this.apiCallStatus = allLTSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.payments = allLTSelector.allLightningTransactions.listPaymentsAll.payments || [];\n this.invoices = allLTSelector.allLightningTransactions.listInvoicesAll.invoices || [];\n if (this.payments.length > 0 || this.invoices.length > 0) {\n this.transactionsReportData = this.filterTransactionsForSelectedPeriod(this.startDate, this.endDate);\n this.transactionsNonZeroReportData = this.prepareTableData();\n }\n this.logger.info(allLTSelector);\n });\n this.commonService.containerSizeUpdated.pipe(takeUntil(this.unSubs[2])).subscribe((CONTAINER_SIZE) => {\n switch (this.screenSize) {\n case ScreenSizeEnum.MD:\n this.screenPaddingX = CONTAINER_SIZE.width / 10;\n break;\n\n case ScreenSizeEnum.LG:\n this.screenPaddingX = CONTAINER_SIZE.width / 16;\n break;\n\n default:\n this.screenPaddingX = CONTAINER_SIZE.width / 20;\n break;\n }\n this.view = [CONTAINER_SIZE.width - this.screenPaddingX, CONTAINER_SIZE.height / 2.2];\n this.logger.info('Container Size: ' + JSON.stringify(CONTAINER_SIZE));\n this.logger.info('View: ' + JSON.stringify(this.view));\n });\n }\n\n @HostListener('mouseup', ['$event']) onChartMouseUp(e) {\n if (e.srcElement.tagName === 'svg' && e.srcElement.classList.length > 0 && e.srcElement.classList[0] === 'ngx-charts') {\n this.transactionFilterValue = '';\n }\n }\n\n onChartBarSelected(event) {\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n this.transactionFilterValue = event.series + '/' + this.startDate.getFullYear();\n } else {\n this.transactionFilterValue = event.series.toString().padStart(2, '0') + '/' + MONTHS[this.startDate.getMonth()].name + '/' + this.startDate.getFullYear();\n }\n }\n\n filterTransactionsForSelectedPeriod(start: Date, end: Date) {\n const startDateInSeconds = Math.round(start.getTime() / 1000);\n const endDateInSeconds = Math.round(end.getTime() / 1000);\n const transactionsReport: any[] = [];\n this.transactionsNonZeroReportData = [];\n this.transactionsReportSummary = { paymentsSelectedPeriod: 0, invoicesSelectedPeriod: 0, amountPaidSelectedPeriod: 0, amountReceivedSelectedPeriod: 0 };\n const filteredPayments = this.payments?.filter((payment) => payment.status === 'SUCCEEDED' && payment.creation_date && payment.creation_date >= startDateInSeconds && payment.creation_date < endDateInSeconds);\n const filteredInvoices = this.invoices?.filter((invoice) => invoice.settled && invoice.creation_date && +invoice.creation_date >= startDateInSeconds && +invoice.creation_date < endDateInSeconds);\n this.transactionsReportSummary.paymentsSelectedPeriod = filteredPayments.length;\n this.transactionsReportSummary.invoicesSelectedPeriod = filteredInvoices.length;\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n for (let i = 0; i < 12; i++) {\n transactionsReport.push({ name: MONTHS[i].name, date: new Date(start.getFullYear(), i, 1, 0, 0, 0, 0), series: [{ name: 'Paid', value: 0, extra: { total: 0 } }, { name: 'Received', value: 0, extra: { total: 0 } }] });\n }\n filteredPayments?.map((payment) => {\n const monthNumber = new Date(+(payment.creation_date || 0) * 1000).getMonth();\n this.transactionsReportSummary.amountPaidSelectedPeriod = this.transactionsReportSummary.amountPaidSelectedPeriod + (+(payment.value_msat || 0)) + (+(payment.fee_msat || 0));\n transactionsReport[monthNumber].series[0].value = transactionsReport[monthNumber].series[0].value + ((+(payment.value_msat || 0) + +(payment.fee_msat || 0)) / 1000);\n transactionsReport[monthNumber].series[0].extra.total = transactionsReport[monthNumber].series[0].extra.total + 1;\n return this.transactionsReportSummary;\n });\n filteredInvoices?.map((invoice) => {\n const monthNumber = new Date(+(invoice.creation_date || 0) * 1000).getMonth();\n this.transactionsReportSummary.amountReceivedSelectedPeriod = this.transactionsReportSummary.amountReceivedSelectedPeriod + (+(invoice.amt_paid_msat || 0));\n transactionsReport[monthNumber].series[1].value = transactionsReport[monthNumber].series[1].value + (+(invoice.amt_paid_msat || 0) / 1000);\n transactionsReport[monthNumber].series[1].extra.total = transactionsReport[monthNumber].series[1].extra.total + 1;\n return this.transactionsReportSummary;\n });\n } else {\n for (let i = 0; i < this.getMonthDays(start.getMonth(), start.getFullYear()); i++) {\n transactionsReport.push({ name: (i + 1).toString(), date: new Date((((i) * this.secondsInADay) + startDateInSeconds) * 1000), series: [{ name: 'Paid', value: 0, extra: { total: 0 } }, { name: 'Received', value: 0, extra: { total: 0 } }] });\n }\n filteredPayments?.map((payment) => {\n const dateNumber = Math.floor((+(payment.creation_date || 0) - startDateInSeconds) / this.secondsInADay);\n this.transactionsReportSummary.amountPaidSelectedPeriod = this.transactionsReportSummary.amountPaidSelectedPeriod + (+(payment.value_msat || 0)) + (+(payment.fee_msat || 0));\n transactionsReport[dateNumber].series[0].value = transactionsReport[dateNumber].series[0].value + ((+(payment.value_msat || 0) + +(payment.fee_msat || 0)) / 1000);\n transactionsReport[dateNumber].series[0].extra.total = transactionsReport[dateNumber].series[0].extra.total + 1;\n return this.transactionsReportSummary;\n });\n filteredInvoices?.map((invoice) => {\n const dateNumber = Math.floor((+(invoice.creation_date || 0) - startDateInSeconds) / this.secondsInADay);\n this.transactionsReportSummary.amountReceivedSelectedPeriod = this.transactionsReportSummary.amountReceivedSelectedPeriod + (+(invoice.amt_paid_msat || 0));\n transactionsReport[dateNumber].series[1].value = transactionsReport[dateNumber].series[1].value + (+(invoice.amt_paid_msat || 0) / 1000);\n transactionsReport[dateNumber].series[1].extra.total = transactionsReport[dateNumber].series[1].extra.total + 1;\n return this.transactionsReportSummary;\n });\n }\n return transactionsReport;\n }\n\n prepareTableData() {\n return this.transactionsReportData?.reduce((acc, curr) => {\n if (curr.series[0].extra.total > 0 || curr.series[1].extra.total > 0) {\n return acc.concat({ date: curr.date, amount_paid: curr.series[0].value, num_payments: curr.series[0].extra.total, amount_received: curr.series[1].value, num_invoices: curr.series[1].extra.total });\n }\n return acc;\n }, []);\n }\n\n onSelectionChange(selectedValues: { selDate: Date, selScrollRange: string }) {\n const selMonth = selectedValues.selDate.getMonth();\n const selYear = selectedValues.selDate.getFullYear();\n this.reportPeriod = selectedValues.selScrollRange;\n if (this.reportPeriod === SCROLL_RANGES[1]) {\n this.startDate = new Date(selYear, 0, 1, 0, 0, 0);\n this.endDate = new Date(selYear, 11, 31, 23, 59, 59);\n } else {\n this.startDate = new Date(selYear, selMonth, 1, 0, 0, 0);\n this.endDate = new Date(selYear, selMonth, this.getMonthDays(selMonth, selYear), 23, 59, 59);\n }\n this.transactionsReportData = this.filterTransactionsForSelectedPeriod(this.startDate, this.endDate);\n this.transactionsNonZeroReportData = this.prepareTableData();\n this.transactionFilterValue = '';\n }\n\n getMonthDays(selMonth: number, selYear: number) {\n return (selMonth === 1 && selYear % 4 === 0) ? (MONTHS[selMonth].days + 1) : MONTHS[selMonth].days;\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n\n","
\n
\n \n
\n Label UTXO\n
\n \n
\n \n
\n \n \n UTXO Label is required.\n \n
\n \n {{labelError}}\n
\n
\n \n \n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\nimport { Store } from '@ngrx/store';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { UTXO } from '../../../shared/models/lndModels';\nimport { OnChainLabelUTXO } from '../../../shared/models/alertData';\nimport { DataService } from '../../../shared/services/data.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { fetchTransactions, fetchUTXOs } from '../../store/lnd.actions';\n\n@Component({\n selector: 'rtl-on-chain-lebel-modal',\n templateUrl: './on-chain-label-modal.component.html',\n styleUrls: ['./on-chain-label-modal.component.scss']\n})\nexport class OnChainLabelModalComponent implements OnInit, OnDestroy {\n\n @ViewChild('form', { static: true }) form: any;\n public faExclamationTriangle = faExclamationTriangle;\n public utxo: UTXO | null = null;\n public label = '';\n public labelError = '';\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(public dialogRef: MatDialogRef, @Inject(MAT_DIALOG_DATA) public data: OnChainLabelUTXO, private dataService: DataService, private store: Store, private snackBar: MatSnackBar, private commonService: CommonService) { }\n\n ngOnInit() {\n this.utxo = this.data.utxo;\n this.label = this.utxo.label || '';\n }\n\n onLabelUTXO(): boolean | void {\n if (!this.label || this.label === '') {\n return true;\n }\n this.labelError = '';\n this.dataService.labelUTXO((this.utxo && this.utxo.outpoint && this.utxo.outpoint.txid_bytes ? this.utxo.outpoint.txid_bytes : ''), this.label, true).\n pipe(takeUntil(this.unSubs[0])).\n subscribe({\n next: (res) => {\n this.store.dispatch(fetchTransactions());\n this.store.dispatch(fetchUTXOs());\n this.snackBar.open('Successfully labelled the UTXO.');\n this.dialogRef.close();\n }, error: (err) => {\n this.labelError = err;\n }\n });\n }\n\n resetData() {\n this.labelError = '';\n this.label = '';\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n \n \n 0 && dustUtxos && dustUtxos.length > 0 && !isDustUTXO ? ['all'].concat(displayedColumns.slice(0, -1)) : ['all'].concat(displayedColumns.slice(0, -1)))\" [value]=\"column\">{{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
\n \n warning\n \n Transaction ID\n \n {{utxo.outpoint.txid_str}}\n \n Output\n {{utxo.outpoint.output_index}}\n Label\n \n {{utxo.label}}\n \n Address Type\n
\n {{addressType[utxo.address_type].name}} \n
\n
Address\n \n {{utxo?.address}}\n \n Amount (Sats)\n {{(utxo.amount_sat || 0) | number}}\n Confirmations{{(utxo.confirmations || 0) | number}}\n
\n \n \n Download CSV\n \n
\n
\n
\n \n \n View Info\n Label\n Lease\n \n
\n
\n

No UTXO available.

\n

Getting UTXOs...

\n

{{errorMessage}}

\n
\n \n
\n
\n
\n\n \n\n","import { Component, ViewChild, Input, OnChanges, OnDestroy, OnInit } from '@angular/core';\nimport { Router } from '@angular/router';\nimport { DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faMoneyBillWave } from '@fortawesome/free-solid-svg-icons';\n\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { UTXO } from '../../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, WALLET_ADDRESS_TYPE, APICallStatusEnum, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../shared/services/common.service';\nimport { DataService } from '../../../../shared/services/data.service';\nimport { OnChainLabelModalComponent } from '../../on-chain-label-modal/on-chain-label-modal.component';\n\nimport { RTLEffects } from '../../../../store/rtl.effects';\nimport { RTLState } from '../../../../store/rtl.state';\nimport { openAlert, openConfirmation } from '../../../../store/rtl.actions';\nimport { lndPageSettings, utxos } from '../../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-on-chain-utxos',\n templateUrl: './utxos.component.html',\n styleUrls: ['./utxos.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('UTXOs') }\n ]\n})\nexport class OnChainUTXOsComponent implements OnInit, OnChanges, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n @Input() isDustUTXO = false;\n @Input() dustAmount = 1000;\n public faMoneyBillWave = faMoneyBillWave;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'on_chain';\n public tableSetting: TableSetting = { tableId: 'utxos', recordsPerPage: PAGE_SIZE, sortBy: 'tx_id', sortOrder: SortOrderEnum.DESCENDING };\n public utxos: UTXO[];\n public dustUtxos: UTXO[];\n public addressType = WALLET_ADDRESS_TYPE;\n public displayedColumns: any[] = [];\n public listUTXOs: any = new MatTableDataSource([]);\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private dataService: DataService, private store: Store, private rtlEffects: RTLEffects, private decimalPipe: DecimalPipe, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.tableSetting.tableId = this.isDustUTXO ? 'dust_utxos' : 'utxos';\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(utxos).pipe(takeUntil(this.unSubs[1])).\n subscribe((utxosSelector: { utxos: UTXO[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = utxosSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n if (utxosSelector.utxos && utxosSelector.utxos.length > 0) {\n this.dustUtxos = utxosSelector.utxos?.filter((utxo) => +(utxo.amount_sat || 0) < this.dustAmount);\n this.utxos = utxosSelector.utxos;\n if (this.utxos.length > 0 && this.dustUtxos.length > 0 && !this.isDustUTXO) {\n this.displayedColumns.unshift('is_dust');\n }\n this.loadUTXOsTable((this.isDustUTXO) ? this.dustUtxos : this.utxos);\n }\n this.logger.info(utxosSelector);\n });\n }\n\n ngOnChanges() {\n if (!this.isDustUTXO && this.utxos && this.utxos.length > 0) {\n this.loadUTXOsTable(this.utxos);\n }\n if (this.isDustUTXO && this.dustUtxos && this.dustUtxos.length > 0) {\n this.loadUTXOsTable(this.dustUtxos);\n }\n }\n\n applyFilter() {\n this.listUTXOs.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : column === 'is_dust' ? 'Dust' : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.listUTXOs.filterPredicate = (rowData: UTXO, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = ((rowData.label ? rowData.label.toLowerCase() : '') + (rowData.outpoint?.txid_str ? rowData.outpoint.txid_str.toLowerCase() : '') + (rowData.outpoint?.output_index ? rowData.outpoint?.output_index : '') +\n (rowData.outpoint?.txid_bytes ? rowData.outpoint?.txid_bytes.toLowerCase() : '') + (rowData.address ? rowData.address.toLowerCase() : '') + (rowData.address_type ? this.addressType[rowData.address_type].name.toLowerCase() : '') +\n (rowData.amount_sat ? rowData.amount_sat : '') + (rowData.confirmations ? rowData.confirmations : ''));\n break;\n\n case 'is_dust':\n rowToFilter = (rowData?.amount_sat || 0) < this.dustAmount ? 'dust' : 'nondust';\n break;\n\n case 'tx_id':\n rowToFilter = (rowData.outpoint && rowData.outpoint.txid_str ? rowData.outpoint.txid_str.toLowerCase() : '');\n break;\n\n case 'output':\n rowToFilter = (rowData.outpoint && rowData.outpoint.output_index ? rowData.outpoint.output_index.toString() : '0');\n break;\n\n case 'address_type':\n rowToFilter = (rowData.address_type && this.addressType[rowData.address_type] && this.addressType[rowData.address_type].name ? this.addressType[rowData.address_type].name.toLowerCase() : '');\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return (this.selFilterBy === 'is_dust' || this.selFilterBy === 'address_type') ? rowToFilter.indexOf(fltr) === 0 : rowToFilter.includes(fltr);\n };\n }\n\n onUTXOClick(selUTXO: UTXO) {\n const reorderedUTXOs = [\n [{ key: 'txid', value: selUTXO.outpoint?.txid_str, title: 'Transaction ID', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'label', value: selUTXO.label, title: 'Label', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'output_index', value: selUTXO.outpoint?.output_index, title: 'Output Index', width: 34, type: DataTypeEnum.NUMBER },\n { key: 'amount_sat', value: selUTXO.amount_sat, title: 'Amount (Sats)', width: 33, type: DataTypeEnum.NUMBER },\n { key: 'confirmations', value: selUTXO.confirmations, title: 'Confirmations', width: 33, type: DataTypeEnum.NUMBER }],\n [{ key: 'address_type', value: (selUTXO.address_type ? this.addressType[selUTXO.address_type].name : ''), title: 'Address Type', width: 34 },\n { key: 'address', value: selUTXO.address, title: 'Address', width: 66 }],\n [{ key: 'pk_script', value: selUTXO.pk_script, title: 'PK Script', width: 100, type: DataTypeEnum.STRING }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'UTXO Information',\n message: reorderedUTXOs\n }\n }\n }));\n }\n\n loadUTXOsTable(UTXOs: UTXO[]) {\n this.listUTXOs = new MatTableDataSource([...UTXOs]);\n this.listUTXOs.sortingDataAccessor = (data: any, sortHeaderId: string) => {\n switch (sortHeaderId) {\n case 'is_dust': return +(data.amount_sat || 0) < this.dustAmount;\n case 'tx_id': return data.outpoint.txid_str.toLocaleLowerCase();\n case 'output': return +data.outpoint.output_index;\n default: return (data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null;\n }\n };\n this.listUTXOs.sort = this.sort;\n this.listUTXOs.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.listUTXOs.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.listUTXOs);\n }\n\n onLabelUTXO(utxo: UTXO) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n utxo: utxo,\n component: OnChainLabelModalComponent\n }\n }\n }));\n }\n\n onLeaseUTXO(utxo: UTXO) {\n const utxoDetails = [\n [{ key: 'txid_str', value: utxo.outpoint?.txid_str, title: 'Transaction ID', width: 100 }],\n [{ key: 'amount_sat', value: this.decimalPipe.transform(utxo.amount_sat), title: 'Amount (Sats)', width: 100 }]\n ];\n if (utxo.label) {\n utxoDetails.splice(1, 0, [{ key: 'label', value: utxo.label, title: 'Label', width: 100 }]);\n }\n this.store.dispatch(openConfirmation({\n payload: {\n data: {\n type: AlertTypeEnum.CONFIRM,\n alertTitle: 'Lease UTXO',\n informationMessage: 'The UTXO will be leased for 10 minutes.',\n message: utxoDetails,\n noBtnText: 'Cancel',\n yesBtnText: 'Lease UTXO'\n }\n }\n }));\n this.rtlEffects.closeConfirm.\n pipe(takeUntil(this.unSubs[2])).\n subscribe((confirmRes) => {\n if (confirmRes) {\n this.dataService.leaseUTXO((utxo.outpoint?.txid_bytes || ''), (utxo.outpoint?.output_index || 0));\n }\n });\n }\n\n onDownloadCSV() {\n if (this.listUTXOs.data && this.listUTXOs.data.length > 0) {\n this.commonService.downloadFile(this.listUTXOs.data, 'UTXOs');\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Date/Time{{(transaction.time_stamp * 1000) | date:'dd/MMM/y HH:mm'}}Label\n
\n {{transaction?.label}}\n
\n
Block Hash\n
\n {{transaction?.block_hash}}\n
\n
Transaction Hash\n
\n {{transaction?.tx_hash}}\n
\n
Amount (Sats)\n 0 || transaction.amount === 0\" fxLayoutAlign=\"end center\">{{transaction.amount | number}}\n ({{transaction.amount * -1 | number}})\n Fees (Sats){{transaction.total_fees | number}}Block Height{{transaction.block_height | number}}Confirmations\n {{transaction?.num_confirmations | number}} \n
\n \n \n Download CSV\n \n
\n
\n \n \n

No transaction available.

\n

Getting transactions...

\n

{{errorMessage}}

\n
\n \n
\n
\n
","import { Component, ViewChild, Input, OnChanges, OnInit, OnDestroy } from '@angular/core';\nimport { DatePipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faHistory } from '@fortawesome/free-solid-svg-icons';\n\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { Transaction } from '../../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, AlertTypeEnum, DataTypeEnum, ScreenSizeEnum, APICallStatusEnum, SortOrderEnum, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS } from '../../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../../shared/services/logger.service';\nimport { CommonService } from '../../../../shared/services/common.service';\n\nimport { RTLState } from '../../../../store/rtl.state';\nimport { openAlert } from '../../../../store/rtl.actions';\nimport { lndPageSettings, transactions } from '../../../store/lnd.selector';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-on-chain-transaction-history',\n templateUrl: './on-chain-transaction-history.component.html',\n styleUrls: ['./on-chain-transaction-history.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Transactions') }\n ]\n})\nexport class OnChainTransactionHistoryComponent implements OnInit, OnChanges, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'on_chain';\n public tableSetting: TableSetting = { tableId: 'transactions', recordsPerPage: PAGE_SIZE, sortBy: 'time_stamp', sortOrder: SortOrderEnum.DESCENDING };\n public transactions: Transaction[];\n public faHistory = faHistory;\n public displayedColumns: any[] = [];\n public listTransactions: any = new MatTableDataSource([]);\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private datePipe: DatePipe, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(transactions).pipe(takeUntil(this.unSubs[1])).\n subscribe((transactionsSelector: { transactions: Transaction[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = transactionsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n if (transactionsSelector.transactions && transactionsSelector.transactions.length > 0) {\n this.transactions = transactionsSelector.transactions;\n this.loadTransactionsTable(this.transactions);\n }\n this.logger.info(transactionsSelector);\n });\n }\n\n ngOnChanges() {\n if (this.transactions && this.transactions.length > 0) {\n this.loadTransactionsTable(this.transactions);\n }\n }\n\n onTransactionClick(selTransaction: Transaction) {\n const reorderedTransactions = [\n [{ key: 'block_hash', value: selTransaction.block_hash, title: 'Block Hash', width: 100 }],\n [{ key: 'tx_hash', value: selTransaction.tx_hash, title: 'Transaction Hash', width: 100 }],\n [{ key: 'label', value: selTransaction.label, title: 'Label', width: 100, type: DataTypeEnum.STRING }],\n [{ key: 'time_stamp', value: selTransaction.time_stamp, title: 'Date/Time', width: 50, type: DataTypeEnum.DATE_TIME },\n { key: 'block_height', value: selTransaction.block_height, title: 'Block Height', width: 50, type: DataTypeEnum.NUMBER }],\n [{ key: 'num_confirmations', value: selTransaction.num_confirmations, title: 'Number of Confirmations', width: 34, type: DataTypeEnum.NUMBER },\n { key: 'total_fees', value: selTransaction.total_fees, title: 'Total Fees (Sats)', width: 33, type: DataTypeEnum.NUMBER },\n { key: 'amount', value: selTransaction.amount, title: 'Amount (Sats)', width: 33, type: DataTypeEnum.NUMBER }],\n [{ key: 'dest_addresses', value: selTransaction.dest_addresses, title: 'Destination Addresses', width: 100, type: DataTypeEnum.ARRAY }]\n ];\n this.store.dispatch(openAlert({\n payload: {\n data: {\n type: AlertTypeEnum.INFORMATION,\n alertTitle: 'Transaction Information',\n message: reorderedTransactions,\n scrollable: selTransaction.dest_addresses && selTransaction.dest_addresses.length > 5\n }\n }\n }));\n }\n\n applyFilter() {\n this.listTransactions.filter = this.selFilter.trim().toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.listTransactions.filterPredicate = (rowData: Transaction, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = ((rowData.time_stamp) ? this.datePipe.transform(new Date(rowData.time_stamp * 1000), 'dd/MMM/y HH:mm')?.toLowerCase() : '') + JSON.stringify(rowData).toLowerCase();\n break;\n\n case 'time_stamp':\n rowToFilter = this.datePipe.transform(new Date((rowData?.time_stamp || 0) * 1000), 'dd/MMM/YYYY HH:mm')?.toLowerCase() || '';\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return rowToFilter.includes(fltr);\n };\n }\n\n loadTransactionsTable(transactions) {\n this.listTransactions = new MatTableDataSource([...transactions]);\n this.listTransactions.sort = this.sort;\n this.listTransactions.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.listTransactions.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.listTransactions.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.listTransactions);\n }\n\n onDownloadCSV() {\n if (this.listTransactions.data && this.listTransactions.data.length > 0) {\n this.commonService.downloadFile(this.listTransactions.data, 'Transactions');\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n \n \n UTXOs\n \n \n \n \n \n Transactions\n \n \n \n \n \n Dust UTXOs\n \n \n \n \n
\n","import { Component, OnInit, OnDestroy, Input, Output, EventEmitter } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { LoggerService } from '../../../shared/services/logger.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { fetchTransactions, fetchUTXOs } from '../../store/lnd.actions';\nimport { transactions, utxos } from '../../store/lnd.selector';\nimport { Transaction, UTXO } from '../../../shared/models/lndModels';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\n\n@Component({\n selector: 'rtl-utxo-tables',\n templateUrl: './utxo-tables.component.html',\n styleUrls: ['./utxo-tables.component.scss']\n})\nexport class UTXOTablesComponent implements OnInit, OnDestroy {\n\n @Input() selectedTableIndex = 0;\n @Output() readonly selectedTableIndexChange = new EventEmitter();\n public DUST_AMOUNT = 1000;\n public numTransactions = 0;\n public numUtxos = 0;\n public numDustUtxos = 0;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store) { }\n\n ngOnInit() {\n this.store.dispatch(fetchTransactions());\n this.store.dispatch(fetchUTXOs());\n this.store.select(utxos).pipe(takeUntil(this.unSubs[0])).\n subscribe((utxosSelector: { utxos: UTXO[], apiCallStatus: ApiCallStatusPayload }) => {\n if (utxosSelector.utxos && utxosSelector.utxos.length > 0) {\n this.numUtxos = utxosSelector.utxos.length;\n this.numDustUtxos = utxosSelector.utxos?.filter((utxo) => utxo.amount_sat && +utxo.amount_sat < this.DUST_AMOUNT).length;\n }\n this.logger.info(utxosSelector);\n });\n this.store.select(transactions).pipe(takeUntil(this.unSubs[1])).\n subscribe((transactionsSelector: { transactions: Transaction[], apiCallStatus: ApiCallStatusPayload }) => {\n if (transactionsSelector.transactions && transactionsSelector.transactions.length > 0) {\n this.numTransactions = transactionsSelector.transactions.length;\n }\n this.logger.info(transactionsSelector);\n });\n }\n\n onSelectedIndexChanged(event) {\n this.selectedTableIndexChange.emit(event);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n On-chain Balance\n
\n
\n \n \n \n \n \n
\n
\n \n On-chain Transactions\n
\n
\n \n \n \n \n
\n \n
\n
\n \n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, ActivatedRoute, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faExchangeAlt, faChartPie } from '@fortawesome/free-solid-svg-icons';\n\nimport { SelNodeChild } from '../../shared/models/RTLconfig';\nimport { RTLState } from '../../store/rtl.state';\nimport { blockchainBalance, lndNodeSettings } from '../store/lnd.selector';\nimport { ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';\nimport { BlockchainBalance } from '../../shared/models/lndModels';\n\n@Component({\n selector: 'rtl-on-chain',\n templateUrl: './on-chain.component.html',\n styleUrls: ['./on-chain.component.scss']\n})\nexport class OnChainComponent implements OnInit, OnDestroy {\n\n public selNode: SelNodeChild | null = {};\n public faExchangeAlt = faExchangeAlt;\n public faChartPie = faChartPie;\n public balances = [{ title: 'Total Balance', dataValue: 0 }, { title: 'Confirmed', dataValue: 0 }, { title: 'Unconfirmed', dataValue: 0 }];\n public links = [{ link: 'receive', name: 'Receive' }, { link: 'send', name: 'Send' }, { link: 'sweep', name: 'Sweep All' }];\n public activeLink = this.links[0].link;\n public tables = [{ id: 0, name: 'utxos' }, { id: 1, name: 'trans' }, { id: 2, name: 'dustUtxos' }];\n public selectedTable = this.tables[0];\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private store: Store, private router: Router, private activatedRoute: ActivatedRoute) { }\n\n ngOnInit() {\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.selectedTable = this.tables.find((table) => table.name === this.router.url.substring(this.router.url.lastIndexOf('/') + 1)) || this.tables[0];\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.selectedTable = this.tables.find((table) => table.name === (value).urlAfterRedirects.substring((value).urlAfterRedirects.lastIndexOf('/') + 1)) || this.tables[0];\n }\n });\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[1])).\n subscribe((nodeSettings: SelNodeChild | null) => {\n this.selNode = nodeSettings;\n });\n this.store.select(blockchainBalance).pipe(takeUntil(this.unSubs[2])).\n subscribe((bcBalanceSelector: { blockchainBalance: BlockchainBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.balances = [{ title: 'Total Balance', dataValue: bcBalanceSelector.blockchainBalance.total_balance || 0 }, { title: 'Confirmed', dataValue: (bcBalanceSelector.blockchainBalance.confirmed_balance || 0) }, { title: 'Unconfirmed', dataValue: (bcBalanceSelector.blockchainBalance.unconfirmed_balance || 0) }];\n });\n }\n\n onSelectedTableIndexChanged(event: number) {\n this.selectedTable = this.tables.find((table) => table.id === event) || this.tables[0];\n this.router.navigate(['./', this.activeLink, this.selectedTable.name], { relativeTo: this.activatedRoute });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n \n \n {{addressType.addressTp}}\n \n \n \n
\n \n
\n
\n
\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { AddressType, GetInfo } from '../../../shared/models/lndModels';\nimport { ADDRESS_TYPES } from '../../../shared/services/consts-enums-functions';\nimport { OnChainGeneratedAddressComponent } from '../../../shared/components/data-modal/on-chain-generated-address/on-chain-generated-address.component';\n\nimport { LNDEffects } from '../../store/lnd.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert } from '../../../store/rtl.actions';\nimport { getNewAddress } from '../../store/lnd.actions';\nimport { lndNodeInformation } from '../../store/lnd.selector';\nimport { CommonService } from '../../../shared/services/common.service';\n\n@Component({\n selector: 'rtl-on-chain-receive',\n templateUrl: './on-chain-receive.component.html',\n styleUrls: ['./on-chain-receive.component.scss']\n})\nexport class OnChainReceiveComponent implements OnInit, OnDestroy {\n\n public addressTypes = [];\n public selectedAddressType: AddressType = ADDRESS_TYPES[0];\n public newAddress = '';\n public flgVersionCompatible = true;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private store: Store, private lndEffects: LNDEffects, private commonService: CommonService) { }\n\n ngOnInit() {\n this.store.select(lndNodeInformation).pipe(takeUntil(this.unSubs[0])).\n subscribe((nodeInfo: GetInfo) => {\n this.flgVersionCompatible = this.commonService.isVersionCompatible(nodeInfo.version, '0.15.0');\n this.addressTypes = (this.flgVersionCompatible) ? ADDRESS_TYPES : ADDRESS_TYPES.filter((at) => at.addressId !== '4');\n });\n }\n\n onGenerateAddress() {\n this.store.dispatch(getNewAddress({ payload: this.selectedAddressType }));\n this.lndEffects.setNewAddress.pipe(take(1)).subscribe((newAddress) => {\n this.newAddress = newAddress;\n setTimeout(() => {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n address: this.newAddress,\n addressType: this.selectedAddressType.addressTp,\n component: OnChainGeneratedAddressComponent\n }\n }\n }));\n }, 0);\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n {{sweepAll ? 'Sweep All Funds' : 'Send Funds'}}\n
\n \n
\n \n
\n \n \n Bitcoin address is required.\n \n \n \n {{selAmountUnit}} \n {{amountError}}\n \n \n \n {{amountUnit}}\n \n \n
\n \n \n \n {{transType.name}}\n \n \n \n \n \n Number of blocks is required.\n \n \n \n Fees is required.\n \n
\n
\n
\n \n {{sendFundError}}\n
\n
\n \n \n
\n
\n
\n
\n
\n\n\n
\n \n \n
\n {{passwordFormLabel}}\n
\n \n \n Password is required.\n \n
\n
\n \n
\n
\n
\n \n
\n {{sendFundFormLabel}}\n
\n \n \n Bitcoin address is required.\n \n \n \n \n {{transType.name}}\n \n \n \n \n \n Number of blocks is required.\n \n \n \n Fees is required.\n \n
\n
\n \n
\n
\n
\n \n
\n {{confirmFormLabel}}\n
\n
\n \n You are about to sweep all funds from RTL. Are you sure?\n
\n
\n \n {{sendFundError}}\n
\n
\n \n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n","import { Component, OnInit, OnDestroy, ViewChild, Inject } from '@angular/core';\nimport { UntypedFormBuilder, UntypedFormGroup, Validators } from '@angular/forms';\nimport { DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { filter, takeUntil, take } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { MatSnackBar } from '@angular/material/snack-bar';\nimport { MAT_DIALOG_DATA, MatDialogRef } from '@angular/material/dialog';\nimport { MatStepper } from '@angular/material/stepper';\nimport { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons';\n\nimport { OnChainSendFunds } from '../../../shared/models/alertData';\nimport { SelNodeChild, RTLConfiguration } from '../../../shared/models/RTLconfig';\nimport { GetInfo, AddressType, BlockchainBalance } from '../../../shared/models/lndModels';\nimport { CURRENCY_UNITS, CurrencyUnitEnum, CURRENCY_UNIT_FORMATS, APICallStatusEnum, LNDActions } from '../../../shared/services/consts-enums-functions';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport * as sha256 from 'sha256';\n\nimport { RTLEffects } from '../../../store/rtl.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { isAuthorized, openSnackBar } from '../../../store/rtl.actions';\nimport { setChannelTransaction } from '../../store/lnd.actions';\nimport { rootAppConfig, rootSelectedNode } from '../../../store/rtl.selector';\n\n@Component({\n selector: 'rtl-on-chain-send-modal',\n templateUrl: './on-chain-send-modal.component.html',\n styleUrls: ['./on-chain-send-modal.component.scss']\n})\nexport class OnChainSendModalComponent implements OnInit, OnDestroy {\n\n @ViewChild('form', { static: true }) form: any;\n @ViewChild('formSweepAll', { static: false }) formSweepAll: any;\n @ViewChild('stepper', { static: false }) stepper: MatStepper;\n public faExclamationTriangle = faExclamationTriangle;\n public sweepAll = false;\n public selNode: SelNodeChild | null = {};\n public appConfig: RTLConfiguration;\n public addressTypes = [];\n public selectedAddress: AddressType = {};\n public blockchainBalance: BlockchainBalance = {};\n public information: GetInfo = {};\n public newAddress = '';\n public transactionAddress = '';\n public transactionAmount: number | null = null;\n public transactionFees: number | null = null;\n public transactionBlocks: number | null = null;\n public transTypes = [{ id: '1', name: 'Target Confirmation Blocks' }, { id: '2', name: 'Fee' }];\n public selTransType = '1';\n public fiatConversion = false;\n public amountUnits = CURRENCY_UNITS;\n public selAmountUnit = CURRENCY_UNITS[0];\n public currConvertorRate = {};\n public unitConversionValue = 0;\n public currencyUnitFormats = CURRENCY_UNIT_FORMATS;\n public sendFundError = '';\n public flgValidated = false;\n public flgEditable = true;\n public passwordFormLabel = 'Authenticate with your RTL password';\n public sendFundFormLabel = 'Sweep funds';\n public confirmFormLabel = 'Confirm sweep';\n public amountError = 'Amount is Required.';\n passwordFormGroup: UntypedFormGroup;\n sendFundFormGroup: UntypedFormGroup;\n confirmFormGroup: UntypedFormGroup;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(\n public dialogRef: MatDialogRef,\n @Inject(MAT_DIALOG_DATA) public data: OnChainSendFunds,\n private logger: LoggerService,\n private store: Store,\n private rtlEffects: RTLEffects,\n private commonService: CommonService,\n private decimalPipe: DecimalPipe,\n private snackBar: MatSnackBar,\n private actions: Actions,\n private formBuilder: UntypedFormBuilder) { }\n\n ngOnInit() {\n this.sweepAll = this.data.sweepAll;\n this.passwordFormGroup = this.formBuilder.group({\n hiddenPassword: ['', [Validators.required]],\n password: ['', [Validators.required]]\n });\n this.sendFundFormGroup = this.formBuilder.group({\n transactionAddress: ['', Validators.required],\n transactionBlocks: [null],\n transactionFees: [null],\n selTransType: ['1', Validators.required]\n });\n this.confirmFormGroup = this.formBuilder.group({});\n this.sendFundFormGroup.controls.selTransType.valueChanges.pipe(takeUntil(this.unSubs[0])).subscribe((transType) => {\n if (transType === '1') {\n this.sendFundFormGroup.controls.transactionBlocks.setValidators([Validators.required]);\n this.sendFundFormGroup.controls.transactionBlocks.setValue(null);\n this.sendFundFormGroup.controls.transactionFees.setValidators(null);\n this.sendFundFormGroup.controls.transactionFees.setValue(null);\n } else {\n this.sendFundFormGroup.controls.transactionBlocks.setValidators(null);\n this.sendFundFormGroup.controls.transactionBlocks.setValue(null);\n this.sendFundFormGroup.controls.transactionFees.setValidators([Validators.required]);\n this.sendFundFormGroup.controls.transactionFees.setValue(null);\n }\n });\n this.store.select(rootAppConfig).pipe(takeUntil(this.unSubs[1])).subscribe((appConfig) => {\n this.appConfig = appConfig;\n });\n this.store.select(rootSelectedNode).pipe(takeUntil(this.unSubs[2])).subscribe((selNode) => {\n this.fiatConversion = selNode.settings.fiatConversion;\n this.amountUnits = selNode.settings.currencyUnits;\n this.logger.info(selNode);\n });\n this.actions.pipe(\n takeUntil(this.unSubs[3]),\n filter((action) => action.type === LNDActions.UPDATE_API_CALL_STATUS_LND || action.type === LNDActions.SET_CHANNEL_TRANSACTION_RES_LND)).\n subscribe((action: any) => {\n if (action.type === LNDActions.SET_CHANNEL_TRANSACTION_RES_LND) {\n this.store.dispatch(openSnackBar({ payload: (this.sweepAll ? 'All Funds Sent Successfully!' : 'Fund Sent Successfully!') }));\n this.dialogRef.close();\n }\n if (action.type === LNDActions.UPDATE_API_CALL_STATUS_LND && action.payload.status === APICallStatusEnum.ERROR && action.payload.action === 'SetChannelTransaction') {\n this.sendFundError = action.payload.message;\n }\n });\n }\n\n onAuthenticate(): boolean | void {\n if (!this.passwordFormGroup.controls.password.value) {\n return true;\n }\n this.flgValidated = false;\n this.store.dispatch(isAuthorized({ payload: sha256(this.passwordFormGroup.controls.password.value).toString() }));\n this.rtlEffects.isAuthorizedRes.pipe(take(1)).\n subscribe((authRes) => {\n if (authRes !== 'ERROR') {\n this.passwordFormGroup.controls.hiddenPassword.setValue(this.passwordFormGroup.controls.password.value);\n this.stepper.next();\n } else {\n this.dialogRef.close();\n this.snackBar.open('Unauthorized User. Logging out from RTL.');\n }\n });\n }\n\n onSendFunds(): boolean | void {\n if (this.invalidValues) {\n return true;\n }\n this.sendFundError = '';\n const postTransaction = {\n amount: this.transactionAmount ? this.transactionAmount : 0,\n sendAll: this.sweepAll\n };\n if (this.sweepAll) {\n postTransaction['address'] = this.sendFundFormGroup.controls.transactionAddress.value;\n if (this.sendFundFormGroup.controls.selTransType.value === '1') {\n postTransaction['blocks'] = this.sendFundFormGroup.controls.transactionBlocks.value;\n }\n if (this.sendFundFormGroup.controls.selTransType.value === '2') {\n postTransaction['fees'] = this.sendFundFormGroup.controls.transactionFees.value;\n }\n } else {\n postTransaction['address'] = this.transactionAddress;\n if (this.selTransType === '1') {\n postTransaction['blocks'] = this.transactionBlocks;\n }\n if (this.selTransType === '2') {\n postTransaction['fees'] = this.transactionFees;\n }\n }\n if (this.transactionAmount && this.selAmountUnit !== CurrencyUnitEnum.SATS) {\n this.commonService.convertCurrency(this.transactionAmount, this.selAmountUnit === this.amountUnits[2] ? CurrencyUnitEnum.OTHER : this.selAmountUnit, CurrencyUnitEnum.SATS, this.amountUnits[2], this.fiatConversion).\n pipe(takeUntil(this.unSubs[4])).\n subscribe({\n next: (data) => {\n this.selAmountUnit = CurrencyUnitEnum.SATS;\n postTransaction.amount = +(this.decimalPipe.transform(data[this.amountUnits[0]], this.currencyUnitFormats[this.amountUnits[0]])?.replace(/,/g, '') || 0);\n this.store.dispatch(setChannelTransaction({ payload: postTransaction }));\n }, error: (err) => {\n this.transactionAmount = null;\n this.selAmountUnit = CurrencyUnitEnum.SATS;\n this.amountError = 'Conversion Error: ' + err;\n }\n });\n } else {\n this.store.dispatch(setChannelTransaction({ payload: postTransaction }));\n }\n }\n\n get invalidValues(): boolean {\n if (this.sweepAll) {\n return (!this.sendFundFormGroup.controls.transactionAddress.value || this.sendFundFormGroup.controls.transactionAddress.value === '') ||\n (this.sendFundFormGroup.controls.selTransType.value === '1' &&\n (!this.sendFundFormGroup.controls.transactionBlocks.value || this.sendFundFormGroup.controls.transactionBlocks.value <= 0)) ||\n (this.sendFundFormGroup.controls.selTransType.value === '2' && (!this.sendFundFormGroup.controls.transactionFees.value ||\n this.sendFundFormGroup.controls.transactionFees.value <= 0));\n } else {\n return (!this.transactionAddress || this.transactionAddress === '') || (!this.transactionAmount || this.transactionAmount <= 0) ||\n (this.selTransType === '1' && (!this.transactionBlocks || this.transactionBlocks <= 0)) || (this.selTransType === '2' && (!this.transactionFees || this.transactionFees <= 0));\n }\n }\n\n resetData() {\n this.sendFundError = '';\n this.selTransType = '1';\n this.transactionAddress = '';\n this.transactionBlocks = null;\n this.transactionFees = null;\n if (!this.sweepAll) {\n this.transactionAmount = null;\n }\n }\n\n stepSelectionChanged(event: any) {\n this.sendFundError = '';\n switch (event.selectedIndex) {\n case 0:\n this.passwordFormLabel = 'Authenticate with your RTL password';\n this.sendFundFormLabel = 'Sweep funds';\n break;\n\n case 1:\n this.passwordFormLabel = 'User authenticated successfully';\n this.sendFundFormLabel = 'Sweep funds';\n break;\n\n case 2:\n this.passwordFormLabel = 'User authenticated successfully';\n this.sendFundFormLabel = 'Sweep funds | Address: ' + this.sendFundFormGroup.controls.transactionAddress.value + ' | ' +\n this.transTypes[this.sendFundFormGroup.controls.selTransType.value - 1].name +\n (this.sendFundFormGroup.controls.selTransType.value === '2' ? ' (Sats/vByte)' : '') + ': ' +\n (this.sendFundFormGroup.controls.selTransType.value === '1' ? this.sendFundFormGroup.controls.transactionBlocks.value : this.sendFundFormGroup.controls.transactionFees.value);\n break;\n\n default:\n this.passwordFormLabel = 'Authenticate with your RTL password';\n this.sendFundFormLabel = 'Sweep funds';\n break;\n }\n if (event.selectedIndex < event.previouslySelectedIndex) {\n if (event.selectedIndex === 0) {\n this.passwordFormGroup.controls.hiddenPassword.setValue('');\n }\n }\n }\n\n onAmountUnitChange(event: any) {\n const self = this;\n const prevSelectedUnit = (this.sweepAll) ? CurrencyUnitEnum.SATS : (this.selAmountUnit === this.amountUnits[2]) ? CurrencyUnitEnum.OTHER : this.selAmountUnit;\n let currSelectedUnit = event.value === this.amountUnits[2] ? CurrencyUnitEnum.OTHER : event.value;\n if (this.transactionAmount && this.selAmountUnit !== event.value) {\n const amount = this.transactionAmount ? this.transactionAmount : 0;\n this.commonService.convertCurrency(amount, prevSelectedUnit, currSelectedUnit, this.amountUnits[2], this.fiatConversion).\n pipe(takeUntil(this.unSubs[5])).\n subscribe({\n next: (data) => {\n this.selAmountUnit = event.value;\n self.transactionAmount = +(self.decimalPipe.transform(data[currSelectedUnit], self.currencyUnitFormats[currSelectedUnit])?.replace(/,/g, '') || 0);\n }, error: (err) => {\n self.transactionAmount = null;\n this.amountError = 'Conversion Error: ' + err;\n this.selAmountUnit = prevSelectedUnit;\n currSelectedUnit = prevSelectedUnit;\n }\n });\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","import { Component, OnDestroy, OnInit } from '@angular/core';\nimport { ActivatedRoute } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { OnChainSendModalComponent } from '../on-chain-send-modal/on-chain-send-modal.component';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { openAlert } from '../../../store/rtl.actions';\n\n@Component({\n selector: 'rtl-on-chain-send',\n templateUrl: './on-chain-send.component.html',\n styleUrls: ['./on-chain-send.component.scss']\n})\nexport class OnChainSendComponent implements OnInit, OnDestroy {\n\n public sweepAll = false;\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private store: Store, private activatedRoute: ActivatedRoute) { }\n\n ngOnInit() {\n this.activatedRoute.data.pipe(takeUntil(this.unSubs[0])).subscribe((routeData) => {\n this.sweepAll = routeData.sweepAll;\n });\n }\n\n openSendFundsModal() {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n sweepAll: this.sweepAll,\n component: OnChainSendModalComponent\n }\n }\n }));\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n
\n
\n","
\n \n \n
\n
\n
\n \n {{card.title}}\n
\n
\n
\n \n \n \n
\n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n \n Network\n
\n \n \n \n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n
\n\n\n
\n

{{errorMessages[1]}}

\n
\n
\n\n
\n
\n

Network Capacity

\n
{{networkInfo.total_network_capacity | number}} Sats
\n
\n
\n

Number of Nodes

\n
{{networkInfo.num_nodes | number}}
\n
\n
\n

Number of Channels

\n {{networkInfo.num_channels | number}}\n
\n
\n
\n\n
\n
\n

Max Channel Size

\n
{{networkInfo.max_channel_size | number}}
\n
\n
\n

Avg Channel Size

\n
{{networkInfo.avg_channel_size | number}}
\n
\n
\n

Min Channel Size

\n {{networkInfo.min_channel_size | number}}\n
\n
\n
\n\n
\n
\n

Max Out Degree

\n
{{networkInfo.max_out_degree | number}}
\n
\n
\n

Avg Out Degree

\n
{{networkInfo.avg_out_degree | number:'1.0-2'}}
\n
\n
\n

\n \n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { faProjectDiagram, faBolt, faServer, faNetworkWired } from '@fortawesome/free-solid-svg-icons';\n\nimport { LoggerService } from '../../shared/services/logger.service';\nimport { GetInfo, NetworkInfo, Fees, ChannelsStatus, PendingChannels, PendingChannelsSummary, Channel, ChannelsSummary, LightningBalance } from '../../shared/models/lndModels';\nimport { SelNodeChild } from '../../shared/models/RTLconfig';\nimport { CommonService } from '../../shared/services/common.service';\nimport { APICallStatusEnum, ScreenSizeEnum, UserPersonaEnum } from '../../shared/services/consts-enums-functions';\nimport { ApiCallsListLND, ApiCallStatusPayload } from '../../shared/models/apiCallsPayload';\n\nimport { RTLState } from '../../store/rtl.state';\nimport { channels, fees, networkInfo, nodeInfoAndNodeSettingsAndAPIStatus, pendingChannels } from '../store/lnd.selector';\n\n@Component({\n selector: 'rtl-network-info',\n templateUrl: './network-info.component.html',\n styleUrls: ['./network-info.component.scss']\n})\nexport class NetworkInfoComponent implements OnInit, OnDestroy {\n\n public faProjectDiagram = faProjectDiagram;\n public faBolt = faBolt;\n public faServer = faServer;\n public faNetworkWired = faNetworkWired;\n public selNode: SelNodeChild | null = {};\n public information: GetInfo = {};\n public fees: Fees;\n public channelsStatus: ChannelsStatus = {};\n public networkInfo: NetworkInfo = {};\n public networkCards: any[] = [];\n public nodeCards: any[] = [];\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public userPersonaEnum = UserPersonaEnum;\n public errorMessages = ['', '', '', '', ''];\n public apiCallStatusNodeInfo: ApiCallStatusPayload | null = null;\n public apiCallStatusNetwork: ApiCallStatusPayload | null = null;\n public apiCallStatusFees: ApiCallStatusPayload | null = null;\n public apiCallStatusChannels: ApiCallStatusPayload | null = null;\n public apiCallStatusPendingChannels: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store) {\n this.screenSize = this.commonService.getScreenSize();\n if (this.screenSize === ScreenSizeEnum.XS) {\n this.networkCards = [\n { id: 'general', cols: 3, rows: 1 },\n { id: 'channels', cols: 3, rows: 1 },\n { id: 'degrees', cols: 3, rows: 1 }\n ];\n this.nodeCards = [\n { id: 'node', icon: this.faServer, title: 'Node Information', cols: 3, rows: 1 },\n { id: 'status', icon: this.faNetworkWired, title: 'Channels', cols: 3, rows: 1 },\n { id: 'fee', icon: this.faBolt, title: 'Routing Fee', cols: 3, rows: 1 }\n ];\n } else {\n this.networkCards = [\n { id: 'general', cols: 1, rows: 1 },\n { id: 'channels', cols: 1, rows: 1 },\n { id: 'degrees', cols: 1, rows: 1 }\n ];\n this.nodeCards = [\n { id: 'node', icon: this.faServer, title: 'Node Information', cols: 1, rows: 1 },\n { id: 'status', icon: this.faNetworkWired, title: 'Channels', cols: 1, rows: 1 },\n { id: 'fee', icon: this.faBolt, title: 'Routing Fee', cols: 1, rows: 1 }\n ];\n }\n }\n\n ngOnInit() {\n this.store.select(nodeInfoAndNodeSettingsAndAPIStatus).pipe(takeUntil(this.unSubs[0])).\n subscribe((infoSettingsStatusSelector: { information: GetInfo, nodeSettings: SelNodeChild | null, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[0] = '';\n this.apiCallStatusNodeInfo = infoSettingsStatusSelector.apiCallStatus;\n if (this.apiCallStatusNodeInfo.status === APICallStatusEnum.ERROR) {\n this.errorMessages[0] = (typeof (this.apiCallStatusNodeInfo.message) === 'object') ? JSON.stringify(this.apiCallStatusNodeInfo.message) : this.apiCallStatusNodeInfo.message ? this.apiCallStatusNodeInfo.message : '';\n }\n this.selNode = infoSettingsStatusSelector.nodeSettings;\n this.information = infoSettingsStatusSelector.information;\n });\n this.store.select(networkInfo).pipe(takeUntil(this.unSubs[1])).\n subscribe((networkInfoSelector: { networkInfo: NetworkInfo, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[1] = '';\n this.apiCallStatusNetwork = networkInfoSelector.apiCallStatus;\n if (this.apiCallStatusNetwork.status === APICallStatusEnum.ERROR) {\n this.errorMessages[1] = (typeof (this.apiCallStatusNetwork.message) === 'object') ? JSON.stringify(this.apiCallStatusNetwork.message) : this.apiCallStatusNetwork.message ? this.apiCallStatusNetwork.message : '';\n }\n this.networkInfo = networkInfoSelector.networkInfo;\n });\n this.store.select(fees).pipe(takeUntil(this.unSubs[2])).\n subscribe((feesSelector: { fees: Fees, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[2] = '';\n this.apiCallStatusFees = feesSelector.apiCallStatus;\n if (this.apiCallStatusFees.status === APICallStatusEnum.ERROR) {\n this.errorMessages[2] = (typeof (this.apiCallStatusFees.message) === 'object') ? JSON.stringify(this.apiCallStatusFees.message) : this.apiCallStatusFees.message ? this.apiCallStatusFees.message : '';\n }\n this.fees = feesSelector.fees;\n });\n this.store.select(pendingChannels).pipe(takeUntil(this.unSubs[3])).\n subscribe((pendingChannelsSelector: { pendingChannels: PendingChannels, pendingChannelsSummary: PendingChannelsSummary, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[4] = '';\n this.apiCallStatusPendingChannels = pendingChannelsSelector.apiCallStatus;\n if (this.apiCallStatusPendingChannels.status === APICallStatusEnum.ERROR) {\n this.errorMessages[4] = (typeof (this.apiCallStatusPendingChannels.message) === 'object') ? JSON.stringify(this.apiCallStatusPendingChannels.message) : this.apiCallStatusPendingChannels.message ? this.apiCallStatusPendingChannels.message : '';\n }\n this.channelsStatus.pending = { num_channels: pendingChannelsSelector.pendingChannelsSummary.open?.num_channels, capacity: pendingChannelsSelector.pendingChannelsSummary.open?.limbo_balance };\n this.channelsStatus.closing = {\n num_channels: (pendingChannelsSelector.pendingChannelsSummary.closing?.num_channels || 0) + (pendingChannelsSelector.pendingChannelsSummary.force_closing?.num_channels || 0) + (pendingChannelsSelector.pendingChannelsSummary.waiting_close?.num_channels || 0),\n capacity: pendingChannelsSelector.pendingChannelsSummary.total_limbo_balance\n };\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[4])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessages[3] = '';\n this.apiCallStatusChannels = channelsSelector.apiCallStatus;\n if (this.apiCallStatusChannels.status === APICallStatusEnum.ERROR) {\n this.errorMessages[3] = (typeof (this.apiCallStatusChannels.message) === 'object') ? JSON.stringify(this.apiCallStatusChannels.message) : this.apiCallStatusChannels.message ? this.apiCallStatusChannels.message : '';\n }\n this.channelsStatus.active = channelsSelector.channelsSummary.active;\n this.channelsStatus.inactive = channelsSelector.channelsSummary.inactive;\n this.logger.info(channelsSelector);\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n Channels Backup\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { faDownload } from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'rtl-backup',\n templateUrl: './backup.component.html',\n styleUrls: ['./backup.component.scss']\n})\nexport class BackupComponent implements OnInit, OnDestroy {\n\n public faDownload = faDownload;\n public links = [{ link: 'bckup', name: 'Backup' }, { link: 'restore', name: 'Restore' }];\n public activeLink = this.links[0].link;\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private router: Router) { }\n\n ngOnInit() {\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n }\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n

Restore folder location: {{selNode.channelBackupPath}}/restore

\n
\n \n
\n
\n
\n

Restore folder location: {{selNode.channelBackupPath}}/restore

\n

All channel backup file not found! To perform channel restoration, channel backup file/s must be placed at the above location.

\n
\n
0\" fxLayout=\"column\" fxLayoutAlign=\"space-between start\" fxLayout.gt-md=\"row wrap\">\n

Restore folder location: {{selNode.channelBackupPath}}/restore

\n
\n
\n
\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Channel Point\n
\n {{channel?.channel_point}}\n
\n
\n
Actions
\n
\n \n \n \n \n

No singular channel backups available.

\n
\n
\n \n
\n","import { AfterViewInit, Component, OnDestroy, OnInit, ViewChild } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\n\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { Channel } from '../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, ScreenSizeEnum } from '../../../shared/services/consts-enums-functions';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\n\nimport { LNDEffects } from '../../store/lnd.effects';\nimport { RTLState } from '../../../store/rtl.state';\nimport { restoreChannels, restoreChannelsList } from '../../store/lnd.actions';\nimport { lndNodeSettings } from '../../store/lnd.selector';\n\n@Component({\n selector: 'rtl-channel-restore-table',\n templateUrl: './channel-restore-table.component.html',\n styleUrls: ['./channel-restore-table.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Channels') }\n ]\n})\nexport class ChannelRestoreTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public selNode: SelNodeChild | null = {};\n public displayedColumns = ['channel_point', 'actions'];\n public selChannel: Channel;\n public channelsData = [];\n public channels: any = new MatTableDataSource([]);\n public allRestoreExists = false;\n public flgLoading: Array = [true]; // 0: channels\n public selFilter = '';\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private lndEffects: LNDEffects, private commonService: CommonService) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.dispatch(restoreChannelsList());\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.lndEffects.setRestoreChannelList.pipe(takeUntil(this.unSubs[1])).\n subscribe((resRCList) => {\n this.allRestoreExists = resRCList.all_restore_exists;\n this.channelsData = resRCList.files;\n if (this.channelsData.length > 0) {\n this.loadRestoreTable(this.channelsData);\n }\n if (this.flgLoading[0] !== 'error' || (resRCList && resRCList.files)) {\n this.flgLoading[0] = false;\n }\n this.logger.info(resRCList);\n });\n }\n\n ngAfterViewInit() {\n if (this.channelsData && this.channelsData.length > 0) {\n this.loadRestoreTable(this.channelsData);\n }\n }\n\n onRestoreChannels(selChannel: Channel) {\n this.store.dispatch(restoreChannels({ payload: { channelPoint: (selChannel.channel_point) ? selChannel.channel_point : 'ALL' } }));\n }\n\n applyFilter() {\n this.channels.filter = this.selFilter.trim().toLowerCase();\n }\n\n loadRestoreTable(channels: any[]) {\n this.channels = new MatTableDataSource([...channels]);\n this.channels.sort = this.sort;\n this.channels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.channels.paginator = this.paginator;\n this.channels.filterPredicate = (rowData: Channel, fltr: string) => (rowData.channel_point ? rowData.channel_point.toLowerCase() : '').includes(fltr);\n this.applyFilter();\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n
\n \n Save your backup files in a redundant location.\n
\n
\n \n Backup Folder Location: {{selNode.channelBackupPath}}.\n
\n
\n \n \n \n
\n
\n
\n
\n \n Backups\n
\n
\n
\n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Channel Point\n
\n {{channel?.channel_point}}\n
\n
\n
Actions
\n
\n
\n \n \n View Info\n Backup\n Download Backup\n Verify\n \n
\n
\n

No channel available.

\n

Getting channels...

\n

{{errorMessage}}

\n
\n
\n \n
\n","import { Component, OnInit, OnDestroy, ViewChild, AfterViewInit } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faInfoCircle, faExclamationTriangle, faArchive } from '@fortawesome/free-solid-svg-icons';\n\nimport { ChannelInformationComponent } from '../../peers-channels/channels/channel-information-modal/channel-information.component';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { SelNodeChild } from '../../../shared/models/RTLconfig';\nimport { Channel, ChannelsSummary, LightningBalance } from '../../../shared/models/lndModels';\nimport { PAGE_SIZE, PAGE_SIZE_OPTIONS, getPaginatorLabel, ScreenSizeEnum, APICallStatusEnum, UI_MESSAGES, LNDActions, RTLActions } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { fetchFile, openAlert } from '../../../store/rtl.actions';\nimport { backupChannels, verifyChannel } from '../../store/lnd.actions';\nimport { channels, lndNodeSettings } from '../../store/lnd.selector';\n\n@Component({\n selector: 'rtl-channel-backup-table',\n templateUrl: './channel-backup-table.component.html',\n styleUrls: ['./channel-backup-table.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Channels') }\n ]\n})\nexport class ChannelBackupTableComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public faInfoCircle = faInfoCircle;\n public faExclamationTriangle = faExclamationTriangle;\n public faArchive = faArchive;\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public selNode: SelNodeChild | null = {};\n public displayedColumns = ['channel_point', 'actions'];\n public selectedChannel: Channel | null;\n public channelsData: Channel[] = [];\n public channels: any = new MatTableDataSource([]);\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private store: Store, private actions: Actions, private commonService: CommonService) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndNodeSettings).pipe(takeUntil(this.unSubs[0])).subscribe((nodeSettings: SelNodeChild | null) => { this.selNode = nodeSettings; });\n this.store.select(channels).pipe(takeUntil(this.unSubs[1])).\n subscribe((channelsSeletor: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = channelsSeletor.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.channelsData = channelsSeletor.channels;\n if (this.channelsData.length > 0) {\n this.loadBackupTable(this.channelsData);\n }\n this.logger.info(channelsSeletor);\n });\n this.actions.pipe(takeUntil(this.unSubs[2]), filter((action) => action.type === LNDActions.SET_CHANNELS_LND || action.type === RTLActions.SHOW_FILE)).subscribe((action: any) => {\n if (action.type === LNDActions.SET_CHANNELS_LND) {\n this.selectedChannel = null;\n }\n if (action.type === RTLActions.SHOW_FILE) {\n this.commonService.downloadFile(action.payload, 'channel-' + (this.selectedChannel?.channel_point ? this.selectedChannel.channel_point : 'all'), '.bak', '.bak');\n this.selectedChannel = null;\n }\n });\n }\n\n ngAfterViewInit() {\n if (this.channelsData.length > 0) {\n this.loadBackupTable(this.channelsData);\n }\n }\n\n onBackupChannels(selChannel: Channel) {\n this.store.dispatch(backupChannels({ payload: { uiMessage: UI_MESSAGES.BACKUP_CHANNEL, channelPoint: (selChannel.channel_point) ? selChannel.channel_point : 'ALL', showMessage: '' } }));\n }\n\n onVerifyChannels(selChannel: Channel) {\n this.store.dispatch(verifyChannel({ payload: { channelPoint: (selChannel.channel_point) ? selChannel.channel_point : 'ALL' } }));\n }\n\n onDownloadBackup(selChannel: Channel) {\n this.selectedChannel = selChannel;\n this.store.dispatch(fetchFile({ payload: { channelPoint: selChannel.channel_point ? selChannel.channel_point : 'all' } }));\n }\n\n onChannelClick(selChannel: Channel, event: any) {\n this.store.dispatch(openAlert({\n payload: {\n data: {\n channel: selChannel,\n showCopy: false,\n component: ChannelInformationComponent\n }\n }\n }));\n }\n\n applyFilter() {\n this.channels.filter = this.selFilter.trim().toLowerCase();\n }\n\n loadBackupTable(channels: any[]) {\n this.channels = channels ? new MatTableDataSource([...channels]) : new MatTableDataSource([]);\n this.channels.sort = this.sort;\n this.channels.sortingDataAccessor = (data: any, sortHeaderId: string) => ((data[sortHeaderId] && isNaN(data[sortHeaderId])) ? data[sortHeaderId].toLocaleLowerCase() : data[sortHeaderId] ? +data[sortHeaderId] : null);\n this.channels.paginator = this.paginator;\n this.channels.filterPredicate = (rowData: Channel, fltr: string) => (rowData.channel_point ? rowData.channel_point.toLowerCase() : '').includes(fltr);\n this.applyFilter();\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n Sign/Verify Message\n
\n
\n \n \n \n \n
\n \n
\n
\n
\n
\n ","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Router, ResolveEnd, Event } from '@angular/router';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { faUserCheck } from '@fortawesome/free-solid-svg-icons';\n\n@Component({\n selector: 'rtl-sign-verify-message',\n templateUrl: './sign-verify-message.component.html',\n styleUrls: ['./sign-verify-message.component.scss']\n})\nexport class SignVerifyMessageComponent implements OnInit, OnDestroy {\n\n public faUserCheck = faUserCheck;\n public links = [{ link: 'sign', name: 'Sign' }, { link: 'verify', name: 'Verify' }];\n public activeLink = this.links[0].link;\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private router: Router) { }\n\n ngOnInit() {\n const linkFound = this.links.find((link) => this.router.url.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n this.router.events.pipe(takeUntil(this.unSubs[0]), filter((e) => e instanceof ResolveEnd)).\n subscribe({\n next: (value: ResolveEnd | Event) => {\n const linkFound = this.links.find((link) => (value).urlAfterRedirects.includes(link.link));\n this.activeLink = linkFound ? linkFound.link : this.links[0].link;\n }\n });\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n \n Message is required.\n \n
\n \n \n
\n \n

Generated Signature

\n
{{signature}}
\n
\n \n
\n
\n
\n","import { Component, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { DataService } from '../../../shared/services/data.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-sign',\n templateUrl: './sign.component.html',\n styleUrls: ['./sign.component.scss']\n})\nexport class SignComponent implements OnDestroy {\n\n public message = '';\n public signedMessage = '';\n public signature = '';\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private dataService: DataService, private snackBar: MatSnackBar, private logger: LoggerService) { }\n\n onSign(): boolean | void {\n if (!this.message || this.message === '') {\n return true;\n }\n this.dataService.signMessage(this.message).pipe(takeUntil(this.unSubs[0])).subscribe((res) => {\n this.signedMessage = this.message;\n this.signature = res.signature;\n });\n }\n\n onMessageChange() {\n if (this.signedMessage !== this.message) {\n this.signature = '';\n }\n }\n\n onCopyField(payload: string) {\n this.snackBar.open('Signature copied.');\n this.logger.info('Copied Text: ' + payload);\n }\n\n resetData() {\n this.message = '';\n this.signature = '';\n this.signedMessage = '';\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
\n \n \n Message is required.\n \n \n \n Signature is required.\n \n

closeVerification failed, please double check message and signature

\n
\n \n \n
\n
\n \n
\n

Pubkey Used

\n
\n
\n

{{verifyRes?.pubkey}}

\n
\n
\n \n
\n
\n
\n
\n","import { Component, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { MatSnackBar } from '@angular/material/snack-bar';\n\nimport { DataService } from '../../../shared/services/data.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\n\n@Component({\n selector: 'rtl-verify',\n templateUrl: './verify.component.html',\n styleUrls: ['./verify.component.scss']\n})\nexport class VerifyComponent implements OnDestroy {\n\n public message = '';\n public verifiedMessage = '';\n public signature = '';\n public verifiedSignature = '';\n public showVerifyStatus = false;\n public verifyRes: any = { pubkey: '', valid: null };\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private dataService: DataService, private snackBar: MatSnackBar, private logger: LoggerService) { }\n\n onVerify(): boolean | void {\n if ((!this.message || this.message === '') || (!this.signature || this.signature === '')) {\n return true;\n }\n this.dataService.verifyMessage(this.message, this.signature).pipe(takeUntil(this.unSubs[0])).\n subscribe((res) => {\n this.verifyRes = res;\n this.showVerifyStatus = true;\n this.verifiedMessage = this.message;\n this.verifiedSignature = this.signature;\n });\n }\n\n onChange() {\n if (this.verifiedMessage !== this.message || this.verifiedSignature !== this.signature) {\n this.showVerifyStatus = false;\n this.verifyRes = { pubkey: '', valid: null };\n }\n }\n\n resetData() {\n this.message = '';\n this.signature = '';\n this.verifyRes = null;\n this.showVerifyStatus = false;\n }\n\n onCopyField(payload: string) {\n this.snackBar.open('Pubkey copied.');\n this.logger.info('Copied Text: ' + payload);\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n
{{errorMessage}}
\n
\n
\n
Non Routing Peers
\n
\n \n \n {{getLabel(column)}}\n \n \n \n \n \n
\n
\n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n 0}\">\n \n \n
Channel ID\n
\n {{nonRPeer?.chan_id}}\n
\n
Peer Alias\n
\n {{nonRPeer?.remote_alias}}\n
\n
Peer Pubkey\n
\n {{nonRPeer?.remote_pubkey}}\n
\n
Channel Point\n
\n {{nonRPeer?.channel_point}}\n
\n
Uptime ({{timeUnit}}){{nonRPeer.uptime_str}} Lifetime ({{timeUnit}}){{nonRPeer.lifetime_str}} Commit Fee (Sats){{nonRPeer.commit_fee | number}} Commit Weight{{nonRPeer.commit_weight | number}} Fee/KW{{nonRPeer.fee_per_kw | number}} Updates{{nonRPeer.num_updates | number}} Unsettled Balance (Sats){{nonRPeer.unsettled_balance | number}} Capacity (Sats){{nonRPeer.capacity | number}} Local Reserve (Sats){{nonRPeer.local_chan_reserve_sat | number}} Remote Reserve (Sats){{nonRPeer.remote_chan_reserve_sat | number}} Sats Sent{{nonRPeer.total_satoshis_sent | number}}Sats Received{{nonRPeer.total_satoshis_received | number}}\n Local Balance (Sats){{nonRPeer.local_balance | number}}\n Remote Balance (Sats){{nonRPeer.remote_balance | number}}\n
Actions
\n
\n \n \n

All peers are routing.

\n

Getting non routing peers...

\n

{{errorMessage}}

\n
\n
\n \n
\n
\n","import { Component, OnInit, ViewChild, OnDestroy, AfterViewInit } from '@angular/core';\nimport { DecimalPipe } from '@angular/common';\nimport { Subject } from 'rxjs';\nimport { takeUntil } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { MatSort } from '@angular/material/sort';\nimport { MatTableDataSource } from '@angular/material/table';\nimport { MatPaginator, MatPaginatorIntl } from '@angular/material/paginator';\n\nimport { ForwardingEvent, SwitchRes, Channel, ChannelsSummary, LightningBalance } from '../../../shared/models/lndModels';\nimport { APICallStatusEnum, getPaginatorLabel, LND_DEFAULT_PAGE_SETTINGS, LND_PAGE_DEFS, PAGE_SIZE, PAGE_SIZE_OPTIONS, ScreenSizeEnum, SortOrderEnum } from '../../../shared/services/consts-enums-functions';\nimport { ApiCallStatusPayload } from '../../../shared/models/apiCallsPayload';\nimport { LoggerService } from '../../../shared/services/logger.service';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { RTLState } from '../../../store/rtl.state';\nimport { channels, forwardingHistory, lndPageSettings } from '../../store/lnd.selector';\nimport { ActivatedRoute, Router } from '@angular/router';\nimport { ColumnDefinition, PageSettings, TableSetting } from '../../../shared/models/pageSettings';\nimport { CamelCaseWithReplacePipe } from '../../../shared/pipes/app.pipe';\n\n@Component({\n selector: 'rtl-non-routing-peers',\n templateUrl: './non-routing-peers.component.html',\n styleUrls: ['./non-routing-peers.component.scss'],\n providers: [\n { provide: MatPaginatorIntl, useValue: getPaginatorLabel('Non routing peers') }\n ]\n})\nexport class NonRoutingPeersComponent implements OnInit, AfterViewInit, OnDestroy {\n\n @ViewChild(MatSort, { static: false }) sort: MatSort | undefined;\n @ViewChild(MatPaginator, { static: false }) paginator: MatPaginator | undefined;\n public nodePageDefs = LND_PAGE_DEFS;\n public selFilterBy = 'all';\n public colWidth = '20rem';\n public PAGE_ID = 'routing';\n public tableSetting: TableSetting = { tableId: 'non_routing_peers', recordsPerPage: PAGE_SIZE, sortBy: 'remote_alias', sortOrder: SortOrderEnum.DESCENDING };\n public routingPeersData: any[] = [];\n public displayedColumns: any[] = [];\n public nonRoutingPeers: any = new MatTableDataSource([]);\n public pageSize = PAGE_SIZE;\n public pageSizeOptions = PAGE_SIZE_OPTIONS;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public selFilter = '';\n public activeChannels: Channel[] = [];\n public timeUnit = 'mins:secs';\n public apiCallStatus: ApiCallStatusPayload | null = null;\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject(), new Subject(), new Subject(), new Subject(), new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private router: Router, private activatedRoute: ActivatedRoute, private decimalPipe: DecimalPipe, private camelCaseWithReplace: CamelCaseWithReplacePipe) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.store.select(lndPageSettings).pipe(takeUntil(this.unSubs[0])).\n subscribe((settings: { pageSettings: PageSettings[], apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = settings.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = this.apiCallStatus.message || '';\n }\n this.tableSetting = settings.pageSettings.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId) || LND_DEFAULT_PAGE_SETTINGS.find((page) => page.pageId === this.PAGE_ID)?.tables.find((table) => table.tableId === this.tableSetting.tableId)!;\n if (this.screenSize === ScreenSizeEnum.XS || this.screenSize === ScreenSizeEnum.SM) {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelectionSM));\n } else {\n this.displayedColumns = JSON.parse(JSON.stringify(this.tableSetting.columnSelection));\n }\n this.displayedColumns.push('actions');\n this.pageSize = this.tableSetting.recordsPerPage ? +this.tableSetting.recordsPerPage : PAGE_SIZE;\n this.colWidth = this.displayedColumns.length ? ((this.commonService.getContainerSize().width / this.displayedColumns.length) / 10) + 'rem' : '20rem';\n this.logger.info(this.displayedColumns);\n });\n this.store.select(forwardingHistory).pipe(takeUntil(this.unSubs[1])).\n subscribe((fhSelector: { forwardingHistory: SwitchRes, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = fhSelector.apiCallStatus;\n if (fhSelector.apiCallStatus?.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n if (fhSelector.forwardingHistory.forwarding_events) {\n this.routingPeersData = fhSelector.forwardingHistory.forwarding_events;\n } else {\n this.routingPeersData = [];\n }\n if (this.routingPeersData.length > 0 && this.sort && this.paginator && this.displayedColumns.length > 0) {\n this.loadNonRoutingPeersTable(this.routingPeersData);\n }\n this.logger.info(fhSelector.apiCallStatus);\n this.logger.info(fhSelector.forwardingHistory);\n });\n this.store.select(channels).pipe(takeUntil(this.unSubs[2])).\n subscribe((channelsSelector: { channels: Channel[], channelsSummary: ChannelsSummary, lightningBalance: LightningBalance, apiCallStatus: ApiCallStatusPayload }) => {\n this.errorMessage = '';\n this.apiCallStatus = channelsSelector.apiCallStatus;\n if (this.apiCallStatus.status === APICallStatusEnum.ERROR) {\n this.errorMessage = !this.apiCallStatus.message ? '' : (typeof (this.apiCallStatus.message) === 'object') ? JSON.stringify(this.apiCallStatus.message) : this.apiCallStatus.message;\n }\n this.activeChannels = channelsSelector.channels;\n this.logger.info(channelsSelector);\n });\n }\n\n ngAfterViewInit() {\n if (this.routingPeersData.length > 0) {\n this.loadNonRoutingPeersTable(this.routingPeersData);\n }\n }\n\n calculateUptime(channels: Channel[]) {\n const minutesDivider = 60;\n const hoursDivider = minutesDivider * 60;\n const daysDivider = hoursDivider * 24;\n const yearsDivider = daysDivider * 365;\n let maxDivider = minutesDivider;\n let minDivider = 1;\n let max_uptime = 0;\n channels.forEach((channel) => {\n if (channel.uptime && +channel.uptime > max_uptime) {\n max_uptime = +channel.uptime;\n }\n });\n switch (true) {\n case max_uptime < hoursDivider:\n this.timeUnit = 'Mins:Secs';\n maxDivider = minutesDivider;\n minDivider = 1;\n break;\n\n case max_uptime >= hoursDivider && max_uptime < daysDivider:\n this.timeUnit = 'Hrs:Mins';\n maxDivider = hoursDivider;\n minDivider = minutesDivider;\n break;\n\n case max_uptime >= daysDivider && max_uptime < yearsDivider:\n this.timeUnit = 'Days:Hrs';\n maxDivider = daysDivider;\n minDivider = hoursDivider;\n break;\n\n case max_uptime > yearsDivider:\n this.timeUnit = 'Yrs:Days';\n maxDivider = yearsDivider;\n minDivider = daysDivider;\n break;\n\n default:\n this.timeUnit = 'Mins:Secs';\n maxDivider = minutesDivider;\n minDivider = 1;\n break;\n }\n channels.forEach((channel) => {\n channel.uptime_str = channel.uptime ? (this.decimalPipe.transform(Math.floor(+channel.uptime / maxDivider), '2.0-0') + ':' + this.decimalPipe.transform(Math.round((+channel.uptime % maxDivider) / minDivider), '2.0-0')) : '---';\n channel.lifetime_str = channel.lifetime ? (this.decimalPipe.transform(Math.floor(+channel.lifetime / maxDivider), '2.0-0') + ':' + this.decimalPipe.transform(Math.round((+channel.lifetime % maxDivider) / minDivider), '2.0-0')) : '---';\n });\n return channels;\n }\n\n onManagePeer(selNonRoutingChannel: Channel) {\n this.router.navigate(['../../', 'connections', 'channels', 'open'], { relativeTo: this.activatedRoute, state: { filter: selNonRoutingChannel.chan_id } });\n }\n\n // groupRoutingPeers(forwardingEvents: ForwardingEvent[]) {\n // const results: any[] = [];\n // forwardingEvents.forEach((event: ForwardingEvent) => {\n // const foundEntryInIdx = results.findIndex((result) => result.chan_id === event.chan_id_in);\n // const foundEntryOutIdx = results.findIndex((result) => result.chan_id === event.chan_id_out);\n // if (foundEntryInIdx < 0 && foundEntryOutIdx < 0) {\n // results.push({ chan_id: event.chan_id_in, alias: event.alias_in, amt_in_msat: +event.amt_in_msat, amt_out_msat: 0 });\n // results.push({ chan_id: event.chan_id_out, alias: event.alias_out, amt_out_msat: +event.amt_out_msat, amt_in_msat: 0 });\n // }\n // if (foundEntryInIdx < 0 && foundEntryOutIdx > -1) {\n // results.push({ chan_id: event.chan_id_in, alias: event.alias_in, amt_in_msat: +event.amt_in_msat, amt_out_msat: 0 });\n // results[foundEntryOutIdx].amt_out_msat = results[foundEntryOutIdx].amt_out_msat + +event.amt_out_msat;\n // }\n // if (foundEntryInIdx > -1 && foundEntryOutIdx < 0) {\n // results.push({ chan_id: event.chan_id_out, alias: event.alias_out, amt_out_msat: +event.amt_out_msat, amt_in_msat: 0 });\n // results[foundEntryInIdx].amt_in_msat = results[foundEntryInIdx].amt_in_msat + +event.amt_in_msat;\n // }\n // if (foundEntryInIdx > -1 && foundEntryOutIdx > -1) {\n // results[foundEntryInIdx].amt_in_msat = results[foundEntryInIdx].amt_in_msat + +event.amt_in_msat;\n // results[foundEntryOutIdx].amt_out_msat = results[foundEntryOutIdx].amt_out_msat + +event.amt_out_msat;\n // }\n // });\n // return this.commonService.sortDescByKey(results, 'alias');\n // }\n\n applyFilter() {\n this.nonRoutingPeers.filter = this.selFilter.toLowerCase();\n }\n\n getLabel(column: string) {\n const returnColumn: ColumnDefinition = this.nodePageDefs[this.PAGE_ID][this.tableSetting.tableId].allowedColumns.find((col) => col.column === column);\n return returnColumn ? returnColumn.label ? returnColumn.label : this.camelCaseWithReplace.transform(returnColumn.column, '_') : this.commonService.titleCase(column);\n }\n\n setFilterPredicate() {\n this.nonRoutingPeers.filterPredicate = (rowData: Channel, fltr: string) => {\n let rowToFilter = '';\n switch (this.selFilterBy) {\n case 'all':\n rowToFilter = JSON.stringify(rowData).toLowerCase();\n break;\n\n default:\n rowToFilter = typeof rowData[this.selFilterBy] === 'undefined' ? '' : typeof rowData[this.selFilterBy] === 'string' ? rowData[this.selFilterBy].toLowerCase() : typeof rowData[this.selFilterBy] === 'boolean' ? (rowData[this.selFilterBy] ? 'yes' : 'no') : rowData[this.selFilterBy].toString();\n break;\n }\n return rowToFilter.includes(fltr);\n };\n }\n\n loadNonRoutingPeersTable(forwardingEvents: ForwardingEvent[]) {\n if (forwardingEvents.length > 0) {\n // const grpdRoutingPeers = this.groupRoutingPeers(forwardingEvents);\n const filteredNonRoutingChannels = this.calculateUptime(this.activeChannels?.filter((actvChnl) => forwardingEvents.findIndex((evnt) => (evnt.chan_id_in === actvChnl.chan_id || evnt.chan_id_out === actvChnl.chan_id)) < 0));\n this.nonRoutingPeers = new MatTableDataSource(filteredNonRoutingChannels);\n this.nonRoutingPeers.sort = this.sort;\n this.nonRoutingPeers.sort?.sort({ id: this.tableSetting.sortBy, start: this.tableSetting.sortOrder, disableClear: true });\n this.nonRoutingPeers.paginator = this.paginator;\n this.setFilterPredicate();\n this.applyFilter();\n this.logger.info(this.nonRoutingPeers);\n } else {\n this.nonRoutingPeers = new MatTableDataSource([]);\n }\n this.applyFilter();\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","import { Component, Input, OnInit, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, take } from 'rxjs/operators';\n\nimport { Payment, PayRequest } from '../../../../shared/models/lndModels';\nimport { DataService } from '../../../../shared/services/data.service';\n\n@Component({\n selector: 'rtl-payment-lookup',\n templateUrl: './payment-lookup.component.html',\n styleUrls: ['./payment-lookup.component.scss']\n})\nexport class PaymentLookupComponent implements OnInit, OnDestroy {\n\n @Input() payment: Payment;\n public paths = '';\n private unSubs: Array> = [new Subject(), new Subject()];\n\n constructor(private dataService: DataService) { }\n\n ngOnInit() {\n if (this.payment.htlcs && this.payment.htlcs[0] && this.payment.htlcs[0].route && this.payment.htlcs[0].route.hops && this.payment.htlcs[0].route.hops.length > 0) {\n const nodePubkeys = this.payment.htlcs[0].route.hops?.reduce((pubkeys, hop) => (pubkeys === '' && hop.pub_key ? hop.pub_key : pubkeys + ',' + hop.pub_key), '');\n this.dataService.getAliasesFromPubkeys(nodePubkeys, true).pipe(takeUntil(this.unSubs[0])).\n subscribe((nodes: any) => {\n this.paths = nodes?.reduce((pathAliases, node) => (pathAliases === '' ? node : pathAliases + '\\n' + node), '');\n });\n }\n if (this.payment.payment_request && this.payment.payment_request.trim() !== '') {\n this.dataService.decodePayment(this.payment.payment_request, false).\n pipe(take(1)).subscribe((decodedPayment: PayRequest) => {\n if (decodedPayment && decodedPayment.description && decodedPayment.description !== '') {\n this.payment.description = decodedPayment.description;\n }\n });\n }\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","
\n \n
\n

Payment Hash

\n {{payment?.payment_hash}}\n
\n \n
\n

Payment Preimage

\n \n
{{payment?.payment_preimage}}
\n
\n
\n \n
\n

Payment Request

\n \n
{{payment?.payment_request}}
\n
\n
\n \n
\n

Description

\n \n
{{payment?.description}}
\n
\n
\n \n
\n
\n

Status

\n \n
{{payment?.status}}
\n
\n
\n
\n

Creation Date

\n \n
{{payment?.creation_date}}
\n
\n
\n
\n \n
\n
\n

Value (mSats)

\n \n
{{payment?.value_msat | number}}
\n
\n
\n
\n

Fee (mSats)

\n \n
{{payment?.fee_msat | number}}
\n
\n
\n
\n \n
\n

Path

\n \n
{{paths}}
\n
\n
\n \n
\n
\n","
\n
\n \n N/A\n
\n
\n \n
\n
\n \n QR Code Not Applicable\n
\n \n
\n
\n
\n

{{screenSize === screenSizeEnum.XS ? 'Amount' : 'Amount Requested'}}

\n {{(invoice?.value || 0) | number}} Sats (zero amount) \n
\n
\n

Amount Settled

\n \n
{{invoice?.amt_paid_sat | number}} Sats
\n
\n
\n
\n \n
\n
\n

Date Created

\n {{invoice?.creation_date * 1000 | date:'dd/MMM/y HH:mm'}}\n
\n
\n

Date Settled

\n {{(+invoice?.settle_date !== 0 ? ((+invoice?.settle_date * 1000) | date:'dd/MMM/y HH:mm') : '-')}}\n
\n
\n \n
\n
\n

Memo

\n {{invoice?.memo}}\n
\n
\n \n
\n
\n

Payment Request

\n {{invoice?.payment_request || 'N/A'}}\n
\n
\n \n
\n
\n

Payment Hash

\n {{invoice?.r_hash || ''}}\n
\n
\n
\n \n
\n
\n

Preimage

\n {{invoice?.r_preimage || '-'}}\n
\n
\n \n
\n
\n

State

\n {{invoice?.state}}\n
\n
\n

Expiry

\n {{invoice?.expiry}}\n
\n
\n

Private Routing Hints

\n {{invoice?.private ? 'Yes' : 'No'}}\n
\n
\n \n
0\" fxLayout=\"row\">\n \n \n \n

HTLCs

\n
\n
\n
\n
\n Channel ID\n Amount (Sats)\n
\n \n
\n
\n \n \n \n \n {{htlc.chan_id}}\n \n {{((+htlc.amt_msat/1000) || 0) | number:getDecimalFormat(htlc)}}\n
\n \n
\n
\n
\n
\n 0\" class=\"my-1\" [inset]=\"true\">\n
\n
\n
\n
\n
\n
\n","import { Component, OnInit, Input } from '@angular/core';\n\nimport { CommonService } from '../../../../shared/services/common.service';\nimport { Invoice } from '../../../../shared/models/lndModels';\nimport { ScreenSizeEnum } from '../../../../shared/services/consts-enums-functions';\n\n@Component({\n selector: 'rtl-invoice-lookup',\n templateUrl: './invoice-lookup.component.html',\n styleUrls: ['./invoice-lookup.component.scss']\n})\nexport class InvoiceLookupComponent implements OnInit {\n\n @Input() invoice: Invoice;\n public qrWidth = 240;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n\n constructor(private commonService: CommonService) { }\n\n ngOnInit() {\n this.screenSize = this.commonService.getScreenSize();\n if (this.screenSize === ScreenSizeEnum.XS) {\n this.qrWidth = 220;\n }\n }\n\n getDecimalFormat(htlc: any): string {\n return htlc.amt_msat < 1000 ? '1.0-4' : '1.0-0';\n }\n\n}\n","
\n
\n \n
\n
\n \n \n {{lookupField.name}}\n \n \n
\n \n \n {{lookupFields[selectedFieldId]?.placeholder}} is required.\n \n
\n \n \n
\n
\n
\n \n {{errorMessage}}\n
\n
\n
\n {{lookupFields[selectedFieldId].name}} Details\n
\n
\n \n \n fxFlex=\"100\"

Error! Unable to find details!

\n
\n
\n
\n
\n
\n","import { Component, OnInit, OnDestroy } from '@angular/core';\nimport { Subject } from 'rxjs';\nimport { takeUntil, filter } from 'rxjs/operators';\nimport { Store } from '@ngrx/store';\nimport { Actions } from '@ngrx/effects';\nimport { faSearch } from '@fortawesome/free-solid-svg-icons';\n\nimport { APICallStatusEnum, LNDActions, ScreenSizeEnum } from '../../../shared/services/consts-enums-functions';\nimport { CommonService } from '../../../shared/services/common.service';\nimport { LoggerService } from '../../../shared/services/logger.service';\n\nimport { RTLState } from '../../../store/rtl.state';\nimport { invoiceLookup, paymentLookup } from '../../store/lnd.actions';\n\n@Component({\n selector: 'rtl-lookup-transactions',\n templateUrl: './lookup-transactions.component.html',\n styleUrls: ['./lookup-transactions.component.scss']\n})\nexport class LookupTransactionsComponent implements OnInit, OnDestroy {\n\n public lookupKey = '';\n public lookupValue = {};\n public flgSetLookupValue = false;\n public messageObj = [];\n public selectedFieldId = 0;\n public lookupFields = [\n { id: 0, name: 'Payment', placeholder: 'Payment Hash' },\n { id: 1, name: 'Invoice', placeholder: 'Payment Hash' }\n ];\n public faSearch = faSearch;\n public screenSize = '';\n public screenSizeEnum = ScreenSizeEnum;\n public errorMessage = '';\n public apiCallStatusEnum = APICallStatusEnum;\n private unSubs: Array> = [new Subject()];\n\n constructor(private logger: LoggerService, private commonService: CommonService, private store: Store, private actions: Actions) {\n this.screenSize = this.commonService.getScreenSize();\n }\n\n ngOnInit() {\n this.actions.pipe(takeUntil(this.unSubs[0]), filter((action) => (action.type === LNDActions.SET_LOOKUP_LND))).\n subscribe((resLookup: any) => {\n this.flgSetLookupValue = !resLookup.payload.error;\n this.lookupValue = JSON.parse(JSON.stringify(resLookup.payload));\n this.errorMessage = resLookup.payload.error ? this.commonService.extractErrorMessage(resLookup.payload.error) : '';\n this.logger.info(this.lookupValue);\n });\n }\n\n onLookup(): boolean | void {\n if (!this.lookupKey) {\n return true;\n }\n this.errorMessage = '';\n this.flgSetLookupValue = false;\n this.lookupValue = {};\n switch (this.selectedFieldId) {\n case 0:\n this.store.dispatch(paymentLookup({ payload: Buffer.from(this.lookupKey.trim(), 'hex').toString('base64')?.replace(/\\+/g, '-')?.replace(/[/]/g, '_') }));\n break;\n case 1:\n this.store.dispatch(invoiceLookup({ payload: { openSnackBar: false, paymentHash: Buffer.from(this.lookupKey.trim(), 'hex').toString('base64')?.replace(/\\+/g, '-')?.replace(/[/]/g, '_') } }));\n // if (this.lookupKey.trim().length < 45) {\n // this.store.dispatch(invoiceLookup({ payload: { openSnackBar: false, paymentAddress: this.lookupKey.trim()?.replace(/\\+/g, '-')?.replace(/[/]/g, '_') } }));\n // }\n // if (this.lookupKey.trim().length > 45 && this.lookupKey.trim().length < 70) {\n // this.store.dispatch(invoiceLookup({ payload: { openSnackBar: false, paymentHash: Buffer.from(this.lookupKey.trim(), 'hex').toString('base64')?.replace(/\\+/g, '-')?.replace(/[/]/g, '_') } }));\n // }\n break;\n default:\n break;\n }\n }\n\n onSelectChange(event: any) {\n this.resetData();\n this.selectedFieldId = event.value;\n }\n\n resetData() {\n this.flgSetLookupValue = false;\n this.selectedFieldId = 0;\n this.lookupKey = '';\n this.lookupValue = {};\n this.errorMessage = '';\n }\n\n clearLookupValue() {\n this.lookupValue = {};\n this.flgSetLookupValue = false;\n }\n\n ngOnDestroy() {\n this.unSubs.forEach((completeSub) => {\n completeSub.next(null);\n completeSub.complete();\n });\n }\n\n}\n","import { Routes, RouterModule } from '@angular/router';\nimport { ModuleWithProviders } from '@angular/core';\n\nimport { LNDRootComponent } from './lnd-root.component';\nimport { HomeComponent } from './home/home.component';\nimport { ConnectionsComponent } from './peers-channels/connections.component';\nimport { PeersComponent } from './peers-channels/peers/peers.component';\nimport { ChannelsTablesComponent } from './peers-channels/channels/channels-tables/channels-tables.component';\nimport { ChannelOpenTableComponent } from './peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component';\nimport { ChannelPendingTableComponent } from './peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component';\nimport { ChannelClosedTableComponent } from './peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component';\nimport { ChannelActiveHTLCsTableComponent } from './peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component';\nimport { WalletComponent } from './wallet/wallet.component';\nimport { TransactionsComponent } from './transactions/transactions.component';\nimport { LightningPaymentsComponent } from './transactions/payments/lightning-payments.component';\nimport { LightningInvoicesComponent } from './transactions/invoices/lightning-invoices.component';\nimport { GraphComponent } from './graph/graph.component';\nimport { QueryRoutesComponent } from './graph/query-routes/query-routes.component';\nimport { LookupsComponent } from './graph/lookups/lookups.component';\nimport { RoutingComponent } from './routing/routing.component';\nimport { ForwardingHistoryComponent } from './routing/forwarding-history/forwarding-history.component';\nimport { RoutingPeersComponent } from './routing/routing-peers/routing-peers.component';\nimport { ReportsComponent } from './reports/reports.component';\nimport { RoutingReportComponent } from './reports/routing/routing-report.component';\nimport { TransactionsReportComponent } from './reports/transactions/transactions-report.component';\nimport { OnChainComponent } from './on-chain/on-chain.component';\nimport { OnChainReceiveComponent } from './on-chain/on-chain-receive/on-chain-receive.component';\nimport { OnChainSendComponent } from './on-chain/on-chain-send/on-chain-send.component';\nimport { NetworkInfoComponent } from './network-info/network-info.component';\nimport { BackupComponent } from './backup/backup.component';\nimport { ChannelRestoreTableComponent } from './backup/channel-restore-table/channel-restore-table.component';\nimport { ChannelBackupTableComponent } from './backup/channel-backup-table/channel-backup-table.component';\nimport { SignVerifyMessageComponent } from './sign-verify-message/sign-verify-message.component';\nimport { SignComponent } from './sign-verify-message/sign/sign.component';\nimport { VerifyComponent } from './sign-verify-message/verify/verify.component';\nimport { NotFoundComponent } from '../shared/components/not-found/not-found.component';\n\nimport { AuthGuard, LNDUnlockedGuard } from '../shared/services/auth.guard';\nimport { NonRoutingPeersComponent } from './routing/non-routing-peers/non-routing-peers.component';\nimport { LookupTransactionsComponent } from './transactions/lookup-transactions/lookup-transactions.component';\n\ntype PathMatch = 'full' | 'prefix' | undefined;\n\nexport const LndRoutes: Routes = [\n {\n path: '', component: LNDRootComponent,\n children: [\n { path: '', pathMatch: 'full', redirectTo: 'home' },\n { path: 'home', component: HomeComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'wallet', component: WalletComponent, canActivate: [AuthGuard] },\n {\n path: 'onchain', component: OnChainComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'receive/utxos' },\n { path: 'receive/:selTab', component: OnChainReceiveComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'send/:selTab', component: OnChainSendComponent, data: { sweepAll: false }, canActivate: [LNDUnlockedGuard] },\n { path: 'sweep/:selTab', component: OnChainSendComponent, data: { sweepAll: true }, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'connections', component: ConnectionsComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'channels' },\n {\n path: 'channels', component: ChannelsTablesComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'open' },\n { path: 'open', component: ChannelOpenTableComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'pending', component: ChannelPendingTableComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'closed', component: ChannelClosedTableComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'activehtlcs', component: ChannelActiveHTLCsTableComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n { path: 'peers', component: PeersComponent, data: { sweepAll: false }, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'transactions', component: TransactionsComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'payments' },\n { path: 'payments', component: LightningPaymentsComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'invoices', component: LightningInvoicesComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'lookuptransactions', component: LookupTransactionsComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'messages', component: SignVerifyMessageComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'sign' },\n { path: 'sign', component: SignComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'verify', component: VerifyComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'channelbackup', component: BackupComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'bckup' },\n { path: 'bckup', component: ChannelBackupTableComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'restore', component: ChannelRestoreTableComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'routing', component: RoutingComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'forwardinghistory' },\n { path: 'forwardinghistory', component: ForwardingHistoryComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'peers', component: RoutingPeersComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'nonroutingprs', component: NonRoutingPeersComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'reports', component: ReportsComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'routingreport' },\n { path: 'routingreport', component: RoutingReportComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'transactions', component: TransactionsReportComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n {\n path: 'graph', component: GraphComponent, canActivate: [LNDUnlockedGuard], children: [\n { path: '', pathMatch: 'full', redirectTo: 'lookups' },\n { path: 'lookups', component: LookupsComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'queryroutes', component: QueryRoutesComponent, canActivate: [LNDUnlockedGuard] }\n ]\n },\n { path: 'lookups', component: LookupsComponent, canActivate: [LNDUnlockedGuard] },\n { path: 'network', component: NetworkInfoComponent, canActivate: [LNDUnlockedGuard] },\n { path: '**', component: NotFoundComponent },\n { path: 'rates', redirectTo: 'network' }\n ]\n }\n];\n\nexport const LNDRouting: ModuleWithProviders = RouterModule.forChild(LndRoutes);\n","import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\n\nimport { LNDRouting } from './lnd.routing';\nimport { SharedModule } from '../shared/shared.module';\n\nimport { LNDRootComponent } from './lnd-root.component';\nimport { HomeComponent } from './home/home.component';\nimport { ConnectionsComponent } from './peers-channels/connections.component';\nimport { ChannelsTablesComponent } from './peers-channels/channels/channels-tables/channels-tables.component';\nimport { PeersComponent } from './peers-channels/peers/peers.component';\nimport { LightningInvoicesComponent } from './transactions/invoices/lightning-invoices.component';\nimport { LookupTransactionsComponent } from './transactions/lookup-transactions/lookup-transactions.component';\nimport { PaymentLookupComponent } from './transactions/lookup-transactions/payment-lookup/payment-lookup.component';\nimport { InvoiceLookupComponent } from './transactions/lookup-transactions/invoice-lookup/invoice-lookup.component';\nimport { OnChainReceiveComponent } from './on-chain/on-chain-receive/on-chain-receive.component';\nimport { OnChainComponent } from './on-chain/on-chain.component';\nimport { UTXOTablesComponent } from './on-chain/utxo-tables/utxo-tables.component';\nimport { OnChainUTXOsComponent } from './on-chain/utxo-tables/utxos/utxos.component';\nimport { OnChainTransactionHistoryComponent } from './on-chain/utxo-tables/on-chain-transaction-history/on-chain-transaction-history.component';\nimport { WalletComponent } from './wallet/wallet.component';\nimport { LightningPaymentsComponent } from './transactions/payments/lightning-payments.component';\nimport { ChannelPendingTableComponent } from './peers-channels/channels/channels-tables/channel-pending-table/channel-pending-table.component';\nimport { BumpFeeComponent } from './peers-channels/channels/bump-fee-modal/bump-fee.component';\nimport { ChannelClosedTableComponent } from './peers-channels/channels/channels-tables/channel-closed-table/channel-closed-table.component';\nimport { TransactionsComponent } from './transactions/transactions.component';\nimport { LookupsComponent } from './graph/lookups/lookups.component';\nimport { ReportsComponent } from './reports/reports.component';\nimport { RoutingReportComponent } from './reports/routing/routing-report.component';\nimport { TransactionsReportComponent } from './reports/transactions/transactions-report.component';\nimport { RoutingComponent } from './routing/routing.component';\nimport { ForwardingHistoryComponent } from './routing/forwarding-history/forwarding-history.component';\nimport { RoutingPeersComponent } from './routing/routing-peers/routing-peers.component';\nimport { NonRoutingPeersComponent } from './routing/non-routing-peers/non-routing-peers.component';\nimport { ChannelLookupComponent } from './graph/lookups/channel-lookup/channel-lookup.component';\nimport { NodeLookupComponent } from './graph/lookups/node-lookup/node-lookup.component';\nimport { BackupComponent } from './backup/backup.component';\nimport { ChannelBackupTableComponent } from './backup/channel-backup-table/channel-backup-table.component';\nimport { ChannelRestoreTableComponent } from './backup/channel-restore-table/channel-restore-table.component';\nimport { SignVerifyMessageComponent } from './sign-verify-message/sign-verify-message.component';\nimport { SignComponent } from './sign-verify-message/sign/sign.component';\nimport { VerifyComponent } from './sign-verify-message/verify/verify.component';\nimport { QueryRoutesComponent } from './graph/query-routes/query-routes.component';\nimport { GraphComponent } from './graph/graph.component';\nimport { ChannelOpenTableComponent } from './peers-channels/channels/channels-tables/channel-open-table/channel-open-table.component';\nimport { ChannelActiveHTLCsTableComponent } from './peers-channels/channels/channels-tables/channel-active-htlcs-table/channel-active-htlcs-table.component';\nimport { UnlockWalletComponent } from './wallet/unlock/unlock.component';\nimport { InitializeWalletComponent } from './wallet/initialize/initialize.component';\nimport { NodeInfoComponent } from './home/node-info/node-info.component';\nimport { BalancesInfoComponent } from './home/balances-info/balances-info.component';\nimport { FeeInfoComponent } from './home/fee-info/fee-info.component';\nimport { ChannelStatusInfoComponent } from './home/channel-status-info/channel-status-info.component';\nimport { ChannelCapacityInfoComponent } from './home/channel-capacity-info/channel-capacity-info.component';\nimport { ChannelLiquidityInfoComponent } from './home/channel-liquidity-info/channel-liquidity-info.component';\nimport { NetworkInfoComponent } from './network-info/network-info.component';\nimport { InvoiceInformationComponent } from './transactions/invoice-information-modal/invoice-information.component';\nimport { ChannelRebalanceComponent } from './peers-channels/channels/channel-rebalance-modal/channel-rebalance.component';\nimport { ChannelRebalanceInfographicsComponent } from './peers-channels/channels/channel-rebalance-infographics/channel-rebalance-infographics.component';\nimport { CloseChannelComponent } from './peers-channels/channels/close-channel-modal/close-channel.component';\nimport { OpenChannelComponent } from './peers-channels/channels/open-channel-modal/open-channel.component';\nimport { ChannelInformationComponent } from './peers-channels/channels/channel-information-modal/channel-information.component';\nimport { OnChainLabelModalComponent } from './on-chain/on-chain-label-modal/on-chain-label-modal.component';\nimport { OnChainSendModalComponent } from './on-chain/on-chain-send-modal/on-chain-send-modal.component';\nimport { OnChainSendComponent } from './on-chain/on-chain-send/on-chain-send.component';\nimport { LightningSendPaymentsComponent } from './transactions/send-payment-modal/send-payment.component';\nimport { CreateInvoiceComponent } from './transactions/create-invoice-modal/create-invoice.component';\nimport { ConnectPeerComponent } from './peers-channels/connect-peer/connect-peer.component';\n\nimport { LNDUnlockedGuard } from '../shared/services/auth.guard';\n\n@NgModule({\n imports: [\n CommonModule,\n SharedModule,\n LNDRouting\n ],\n declarations: [\n LNDRootComponent,\n HomeComponent,\n PeersComponent,\n ConnectionsComponent,\n LightningInvoicesComponent,\n LookupTransactionsComponent,\n PaymentLookupComponent,\n InvoiceLookupComponent,\n WalletComponent,\n LightningPaymentsComponent,\n ChannelPendingTableComponent,\n BumpFeeComponent,\n ChannelClosedTableComponent,\n TransactionsComponent,\n LookupsComponent,\n RoutingComponent,\n ForwardingHistoryComponent,\n RoutingPeersComponent,\n NonRoutingPeersComponent,\n ChannelLookupComponent,\n NodeLookupComponent,\n BackupComponent,\n ChannelBackupTableComponent,\n ChannelRestoreTableComponent,\n SignVerifyMessageComponent,\n SignComponent,\n VerifyComponent,\n ReportsComponent,\n RoutingReportComponent,\n TransactionsReportComponent,\n QueryRoutesComponent,\n GraphComponent,\n OnChainReceiveComponent,\n OnChainComponent,\n UTXOTablesComponent,\n OnChainUTXOsComponent,\n OnChainTransactionHistoryComponent,\n ChannelsTablesComponent,\n ChannelOpenTableComponent,\n ChannelActiveHTLCsTableComponent,\n UnlockWalletComponent,\n InitializeWalletComponent,\n NodeInfoComponent,\n BalancesInfoComponent,\n FeeInfoComponent,\n ChannelStatusInfoComponent,\n ChannelCapacityInfoComponent,\n ChannelLiquidityInfoComponent,\n NetworkInfoComponent,\n InvoiceInformationComponent,\n ChannelRebalanceComponent,\n ChannelRebalanceInfographicsComponent,\n OpenChannelComponent,\n ChannelInformationComponent,\n LightningSendPaymentsComponent,\n ConnectPeerComponent,\n CloseChannelComponent,\n CreateInvoiceComponent,\n OnChainSendComponent,\n OnChainSendModalComponent,\n OnChainLabelModalComponent\n ],\n providers: [\n LNDUnlockedGuard\n ],\n bootstrap: [LNDRootComponent]\n})\nexport class LNDModule { }\n"],"x_google_ignoreList":[]}